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

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

    <bug>
          <bug_id>46381</bug_id>
          
          <creation_ts>2023-06-04 16:46:45 +0300</creation_ts>
          <short_desc>Обновление исходников до версии 4.96</short_desc>
          <delta_ts>2023-07-05 14:57:16 +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>exim</component>
          <version>unstable</version>
          <rep_platform>x86_64</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>patch</keywords>
          <priority>P5</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Danil Nazarov">idaniel959</reporter>
          <assigned_to name="Gremlin from Kremlin">gremlin</assigned_to>
          <cc>gremlin</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>226993</commentid>
    <comment_count>0</comment_count>
      <attachid>13372</attachid>
    <who name="Danil Nazarov">idaniel959</who>
    <bug_when>2023-06-04 16:46:45 +0300</bug_when>
    <thetext>Created attachment 13372
4.94.2 -&gt; 4.96

Исходники старой версии (Gear): https://git.altlinux.org/gears/e/exim.git?p=exim.git;a=tree;f=src;h=b1ea5e4c1614a35f4c81d962568e393983710a37;hb=a35775e0ee3724a1206e67b084dc8f8426ff98ac

Исходники новой версии: https://downloads.exim.org/exim4/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226994</commentid>
    <comment_count>1</comment_count>
      <attachid>13373</attachid>
    <who name="Danil Nazarov">idaniel959</who>
    <bug_when>2023-06-04 16:47:10 +0300</bug_when>
    <thetext>Created attachment 13373
Патч для spec-файла</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226995</commentid>
    <comment_count>2</comment_count>
      <attachid>13374</attachid>
    <who name="Danil Nazarov">idaniel959</who>
    <bug_when>2023-06-04 17:14:27 +0300</bug_when>
    <thetext>Created attachment 13374
Патч для spec-файла</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226996</commentid>
    <comment_count>3</comment_count>
      <attachid>13375</attachid>
    <who name="Danil Nazarov">idaniel959</who>
    <bug_when>2023-06-04 17:15:54 +0300</bug_when>
    <thetext>Created attachment 13375
Патч для spec-файла</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228070</commentid>
    <comment_count>4</comment_count>
    <who name="Gremlin from Kremlin">gremlin</who>
    <bug_when>2023-06-20 14:53:49 +0300</bug_when>
    <thetext>На всякий случай: критичных исправлений нет, обновлю по мере возможности.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228806</commentid>
    <comment_count>5</comment_count>
    <who name="Gremlin from Kremlin">gremlin</who>
    <bug_when>2023-07-03 13:59:39 +0300</bug_when>
    <thetext>Task #324128</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228992</commentid>
    <comment_count>6</comment_count>
    <who name="Gremlin from Kremlin">gremlin</who>
    <bug_when>2023-07-05 14:57:16 +0300</bug_when>
    <thetext>4.96-alt1</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13372</attachid>
            <date>2023-06-04 16:46:45 +0300</date>
            <delta_ts>2023-06-04 16:46:45 +0300</delta_ts>
            <desc>4.94.2 -&gt; 4.96</desc>
            <filename>exim-update.patch</filename>
            <type>text/plain</type>
            <size>1518128</size>
            <attacher name="Danil Nazarov">idaniel959</attacher>
            
              <data encoding="base64">0KLQvtC70YzQutC+INCyIGV4aW06IGRvYwpkaWZmIC11ciBleGltLm9yaWcvZXhpbV9tb25pdG9y
L2VtX2dsb2JhbHMuYyBleGltL2V4aW1fbW9uaXRvci9lbV9nbG9iYWxzLmMKLS0tIGV4aW0ub3Jp
Zy9leGltX21vbml0b3IvZW1fZ2xvYmFscy5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAw
ICswMzAwCisrKyBleGltL2V4aW1fbW9uaXRvci9lbV9nbG9iYWxzLmMJMjAyMi0wNi0yMyAxNjo0
MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTMsNiArMyw3IEBACiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZl
cnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBF
eGltIE1haW50YWluZXJzIDIwMjEgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRp
dGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIApAQCAtODEsNyArODIsNyBAQAog
aW50ICAgICBxdWV1ZV91cGRhdGUgPSA2MDsKIGludCAgICAgcXVldWVfd2lkdGggPSA2MDA7CiAK
LXBjcmUgICAqeXl5eW1tZGRfcmVnZXg7CitwY3JlMl9jb2RlICAgKnl5eXltbWRkX3JlZ2V4Owog
CiB1c2NoYXIgKnNpemVfc3RyaXBjaGFydCA9IE5VTEw7CiB1c2NoYXIgKnNpemVfc3RyaXBjaGFy
dF9uYW1lID0gTlVMTDsKQEAgLTg5LDcgKzkwLDcgQEAKIGludCAgICAgc3RhcnRfc21hbGwgPSBG
QUxTRTsKIGludCAgICAgc3RyaXBjaGFydF9oZWlnaHQgPSA5MDsKIGludCAgICAgc3RyaXBjaGFy
dF9udW1iZXIgPSAxOwotcGNyZSAgKipzdHJpcGNoYXJ0X3JlZ2V4OworcGNyZTJfY29kZSAgKipz
dHJpcGNoYXJ0X3JlZ2V4OwogdXNjaGFyICoqc3RyaXBjaGFydF90aXRsZTsKIGludCAgICAqc3Ry
aXBjaGFydF90b3RhbDsKIGludCAgICAgc3RyaXBjaGFydF91cGRhdGUgPSA2MDsKQEAgLTE5Niw2
ICsxOTcsNyBAQAogaW50ICAgICByZWNlaXZlZF9jb3VudCAgICAgICAgID0gMDsKIHVzY2hhciAq
cmVjZWl2ZWRfcHJvdG9jb2wgICAgICA9IE5VTEw7CiBzdHJ1Y3QgdGltZXZhbCByZWNlaXZlZF90
aW1lICAgPSB7IDAsIDAgfTsKK3N0cnVjdCB0aW1ldmFsIHJlY2VpdmVkX3RpbWVfY29tcGxldGUg
PSB7IDAsIDAgfTsKIGludCAgICAgcmVjaXBpZW50c19jb3VudCAgICAgICA9IDA7CiByZWNpcGll
bnRfaXRlbSAqcmVjaXBpZW50c19saXN0ID0gTlVMTDsKIGludCAgICAgcmVjaXBpZW50c19saXN0
X21heCAgICA9IDA7CmRpZmYgLXVyIGV4aW0ub3JpZy9leGltX21vbml0b3IvZW1faGRyLmggZXhp
bS9leGltX21vbml0b3IvZW1faGRyLmgKLS0tIGV4aW0ub3JpZy9leGltX21vbml0b3IvZW1faGRy
LmgJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vZXhpbV9tb25p
dG9yL2VtX2hkci5oCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0zLDYg
KzMsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KIAogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAw
OSAqLworLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxIC0gMjAyMiAq
LwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3Ry
aWJ1dGlvbi4gKi8KIAogCkBAIC04NSw3ICs4Niw4IEBACiAKIC8qIFJlZ3VsYXIgZXhwcmVzc2lv
biBpbmNsdWRlICovCiAKLSNpbmNsdWRlIDxwY3JlLmg+CisjZGVmaW5lIFBDUkUyX0NPREVfVU5J
VF9XSURUSCA4CisjaW5jbHVkZSA8cGNyZTIuaD4KIAogLyogSW5jbHVkZXMgZnJvbSB0aGUgbWFp
biBzb3VyY2Ugb2YgRXhpbS4gIE9uZSBvZiB0aGVzZSBkYXlzIEkgc2hvdWxkIHRpZHkgdXAKIHRo
aXMgaW50ZXJmYWNlIHNvIHRoYXQgdGhpcyBraW5kIG9mIGtsdWRnZSBpc24ndCBuZWVkZWQuICov
CkBAIC05MywxNCArOTUsMTUgQEAKICNpZm5kZWYgTlNfTUFYTVNHCiAjIGRlZmluZSBOU19NQVhN
U0cgNjU1MzUKICNlbmRpZgotdHlwZWRlZiB2b2lkIGhjdHg7Cit0eXBlZGVmIHZvaWQgKiBoY3R4
OwogCiAjaW5jbHVkZSAibG9jYWxfc2Nhbi5oIgogI2luY2x1ZGUgIm1hY3Jvcy5oIgogI2luY2x1
ZGUgInN0cnVjdHMuaCIKICNpbmNsdWRlICJibG9iLmgiCiAjaW5jbHVkZSAiZ2xvYmFscy5oIgot
I2luY2x1ZGUgImRic3R1ZmYuaCIKKyNpbmNsdWRlICJoaW50c2RiLmgiCisjaW5jbHVkZSAiaGlu
dHNkYl9zdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiZnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAib3NmdW5j
dGlvbnMuaCIKIApAQCAtMjczLDcgKzI3Niw3IEBACiBleHRlcm4gaW50ICAgICBxdWV1ZV91cGRh
dGU7ICAgICAgICAvKiB1cGRhdGUgaW50ZXJ2YWwgKi8KIGV4dGVybiBpbnQgICAgIHF1ZXVlX3dp
ZHRoOyAgICAgICAgIC8qIHdpZHRoIG9mIHF1ZXVlIHdpbmRvdyAqLwogCi1leHRlcm4gcGNyZSAg
ICp5eXl5bW1kZF9yZWdleDsgICAgLyogZm9yIG1hdGNoaW5nIHl5eXktbW0tZGQgKi8KK2V4dGVy
biBwY3JlMl9jb2RlICAgKnl5eXltbWRkX3JlZ2V4OyAgICAvKiBmb3IgbWF0Y2hpbmcgeXl5eS1t
bS1kZCAqLwogCiBleHRlcm4gdXNjaGFyICpzaXplX3N0cmlwY2hhcnQ7ICAgICAvKiBwYXRoIGZv
ciBzaXplIG1vbml0b3JpbmcgKi8KIGV4dGVybiB1c2NoYXIgKnNpemVfc3RyaXBjaGFydF9uYW1l
OyAvKiBuYW1lIGZvciBzaXplIHN0cmlwY2hhcnQgKi8KQEAgLTI4Miw3ICsyODUsNyBAQAogZXh0
ZXJuIGludCAgICAgc3RhcnRfc21hbGw7ICAgICAgICAgLyogVHJ1ZSB0byBzdGFydCB3aXRoIHNt
YWxsIHdpbmRvdyAqLwogZXh0ZXJuIGludCAgICAgc3RyaXBjaGFydF9oZWlnaHQ7ICAgLyogaGVp
Z2h0IG9mIHN0cmlwY2hhcnRzICovCiBleHRlcm4gaW50ICAgICBzdHJpcGNoYXJ0X251bWJlcjsg
ICAvKiBudW1iZXIgb2Ygc3RyaXBjaGFydHMgKi8KLWV4dGVybiBwY3JlICAqKnN0cmlwY2hhcnRf
cmVnZXg7ICAvKiB2ZWN0b3Igb2YgcmVnZXhwcyAqLworZXh0ZXJuIHBjcmUyX2NvZGUgICoqc3Ry
aXBjaGFydF9yZWdleDsgIC8qIHZlY3RvciBvZiByZWdleHBzICovCiBleHRlcm4gdXNjaGFyICoq
c3RyaXBjaGFydF90aXRsZTsgICAgLyogdmVjdG9yIG9mIHRpdGxlcyAqLwogZXh0ZXJuIGludCAg
ICAqc3RyaXBjaGFydF90b3RhbDsgICAgLyogdmVjdG9yIG9mIGFjY3VtdWxhdGluZyB2YWx1ZXMg
Ki8KIGV4dGVybiBpbnQgICAgIHN0cmlwY2hhcnRfdXBkYXRlOyAgIC8qIHVwZGF0ZSBpbnRlcnZh
bCAqLwpkaWZmIC11ciBleGltLm9yaWcvZXhpbV9tb25pdG9yL2VtX2luaXQuYyBleGltL2V4aW1f
bW9uaXRvci9lbV9pbml0LmMKLS0tIGV4aW0ub3JpZy9leGltX21vbml0b3IvZW1faW5pdC5jCTIw
MjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL2V4aW1fbW9uaXRvci9l
bV9pbml0LmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTMsNyArMyw3
IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwog
CiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDA5ICov
Ci0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KKy8qIENvcHly
aWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjEgKi8KIC8qIFNlZSB0aGUg
ZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAK
IC8qIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGluZ3MgZnJvbSB0
aGUKQEAgLTMyLDcgKzMyLDYgQEAKIHdvcmsuICovCiAKIGZvciAoaSA9IDA7IGkgPD0gMTsgaSsr
KQotCiAgIHsKICAgaW50IGZpcnN0ID0gMTsKICAgaW50IGNvdW50ID0gMDsKQEAgLTY5LDEzICs2
OCwxOCBAQAogICAgICAgYnVmZmVyW3AtcHBdID0gMDsKICAgICAgIGlmIChmaXJzdCkKICAgICAg
ICAgewotICAgICAgICBpbnQgb2Zmc2V0OwotICAgICAgICBjb25zdCB1c2NoYXIgKmVycm9yOwot
ICAgICAgICBpZiAoIShzdHJpcGNoYXJ0X3JlZ2V4W2luZHhdID0gcGNyZV9jb21waWxlKENTIGJ1
ZmZlciwgUENSRV9DT1BULAotICAgICAgICAgIENDU1MgJmVycm9yLCAmb2Zmc2V0LCBOVUxMKSkp
CisgICAgICAgIHNpemVfdCBvZmZzZXQ7CisgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgaWYg
KCEoc3RyaXBjaGFydF9yZWdleFtpbmR4XSA9CisJCXBjcmUyX2NvbXBpbGUoKFBDUkUyX1NQVFIp
YnVmZmVyLAorCQkgICAgICBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsIFBDUkVfQ09QVCwKKwkJICAg
ICAgJmVyciwgJm9mZnNldCwgTlVMTCkpKQogICAgICAgICAgIHsKLSAgICAgICAgICBwcmludGYo
InJlZ3VsYXIgZXhwcmVzc2lvbiBlcnJvcjogJXMgYXQgb2Zmc2V0ICVkICIKLSAgICAgICAgICAg
ICJ3aGlsZSBjb21waWxpbmcgJXNcbiIsIGVycm9yLCBvZmZzZXQsIGJ1ZmZlcik7CisJICB1c2No
YXIgZXJyYnVmWzEyOF07CisJICBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZShlcnIsIGVycmJ1Ziwg
c2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgIHByaW50ZigicmVndWxhciBleHByZXNzaW9uIGVy
cm9yOiAlcyBhdCBvZmZzZXQgJWxkICIKKyAgICAgICAgICAgICJ3aGlsZSBjb21waWxpbmcgJXNc
biIsIGVycmJ1ZiwgKGxvbmcpb2Zmc2V0LCBidWZmZXIpOwogICAgICAgICAgIGV4aXQoOTkpOwog
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtOTUsNyArOTksNyBAQAogICBpZiAoaSA9PSAwKQog
ICAgIHsKICAgICBzdHJpcGNoYXJ0X251bWJlciArPSBjb3VudDsKLSAgICBzdHJpcGNoYXJ0X3Jl
Z2V4ID0gKHBjcmUgKiopc3RvcmVfbWFsbG9jKHN0cmlwY2hhcnRfbnVtYmVyICogc2l6ZW9mKHBj
cmUgKikpOworICAgIHN0cmlwY2hhcnRfcmVnZXggPSAocGNyZTJfY29kZSAqKilzdG9yZV9tYWxs
b2Moc3RyaXBjaGFydF9udW1iZXIgKiBzaXplb2YocGNyZTJfY29kZSAqKSk7CiAgICAgc3RyaXBj
aGFydF90aXRsZSA9ICh1c2NoYXIgKiopc3RvcmVfbWFsbG9jKHN0cmlwY2hhcnRfbnVtYmVyICog
c2l6ZW9mKHVzY2hhciAqKSk7CiAgICAgfQogICB9CkBAIC0xMDksNDAgKzExMywzNiBAQAogdm9p
ZCBpbml0KGludCBhcmdjLCB1c2NoYXIgKiphcmd2KQogewogaW50IHg7Ci1pbnQgZXJyb3JvZmZz
ZXQ7CitzaXplX3QgZXJyb3JvZmZzZXQ7CiB1c2NoYXIgKnM7Ci1jb25zdCB1c2NoYXIgKmVycm9y
OwogCiBhcmdjID0gYXJnYzsgICAgIC8qIFRoZXNlIGFyZSBjdXJyZW50bHkgdW51c2VkLiAqLwog
YXJndiA9IGFyZ3Y7CiAKIC8qIERlYWwgd2l0aCBzaW1wbGUgdmFsdWVzIGluIHRoZSBlbnZpcm9u
bWVudC4gKi8KIAotcyA9IFVTIGdldGVudigiQUNUSU9OX09VVFBVVCIpOwotaWYgKHMgIT0gTlVM
TCkKK2lmICgocyA9IFVTIGdldGVudigiQUNUSU9OX09VVFBVVCIpKSkKICAgewogICBpZiAoVXN0
cmNtcChzLCAibm8iKSA9PSAwKSBhY3Rpb25fb3V0cHV0ID0gRkFMU0U7CiAgIGlmIChVc3RyY21w
KHMsICJ5ZXMiKSA9PSAwKSBhY3Rpb25fb3V0cHV0ID0gVFJVRTsKICAgfQogCi1zID0gVVMgZ2V0
ZW52KCJBQ1RJT05fUVVFVUVfVVBEQVRFIik7Ci1pZiAocyAhPSBOVUxMKQoraWYgKChzID0gVVMg
Z2V0ZW52KCJBQ1RJT05fUVVFVUVfVVBEQVRFIikpKQogICB7CiAgIGlmIChVc3RyY21wKHMsICJu
byIpID09IDApIGFjdGlvbl9xdWV1ZV91cGRhdGUgPSBGQUxTRTsKICAgaWYgKFVzdHJjbXAocywg
InllcyIpID09IDApIGFjdGlvbl9xdWV1ZV91cGRhdGUgPSBUUlVFOwogICB9CiAKIHMgPSBVUyBn
ZXRlbnYoIkJPRFlfTUFYIik7Ci1pZiAocyAhPSBOVUxMICYmICh4ID0gVWF0b2kocykpICE9IDAp
IGJvZHlfbWF4ID0geDsKK2lmIChzICYmICh4ID0gVWF0b2kocykpICE9IDApIGJvZHlfbWF4ID0g
eDsKIAotcyA9IFVTIGdldGVudigiRVhJTV9QQVRIIik7Ci1pZiAocyAhPSBOVUxMKSBleGltX3Bh
dGggPSBzdHJpbmdfY29weShzKTsKK2lmICgocyA9IFVTIGdldGVudigiRVhJTV9QQVRIIikpKQor
ICBleGltX3BhdGggPSBzdHJpbmdfY29weShzKTsKIAotcyA9IFVTIGdldGVudigiRVhJTU9OX0VY
SU1fQ09ORklHIik7Ci1pZiAocyAhPSBOVUxMKSBhbHRlcm5hdGVfY29uZmlnID0gc3RyaW5nX2Nv
cHkocyk7CitpZiAoKHMgPSBVUyBnZXRlbnYoIkVYSU1PTl9FWElNX0NPTkZJRyIpKSkKKyAgYWx0
ZXJuYXRlX2NvbmZpZyA9IHN0cmluZ19jb3B5KHMpOwogCi1zID0gVVMgZ2V0ZW52KCJMT0dfQlVG
RkVSIik7Ci1pZiAocyAhPSBOVUxMKQoraWYgKChzID0gVVMgZ2V0ZW52KCJMT0dfQlVGRkVSIikp
KQogICB7CiAgIHVzY2hhciBjWzFdOwogICBpZiAoc3NjYW5mKENTIHMsICIlZCVjIiwgJngsIGMp
ID4gMCkKQEAgLTE1NCw2MyArMTU0LDY0IEBACiAgIH0KIAogcyA9IFVTIGdldGVudigiTE9HX0RF
UFRIIik7Ci1pZiAocyAhPSBOVUxMICYmICh4ID0gVWF0b2kocykpICE9IDApIGxvZ19kZXB0aCA9
IHg7CitpZiAocyAmJiAoeCA9IFVhdG9pKHMpKSAhPSAwKSBsb2dfZGVwdGggPSB4OwogCi1zID0g
VVMgZ2V0ZW52KCJMT0dfRklMRV9OQU1FIik7Ci1pZiAocyAhPSBOVUxMKSBsb2dfZmlsZSA9IHN0
cmluZ19jb3B5KHMpOworaWYgKChzID0gVVMgZ2V0ZW52KCJMT0dfRklMRV9OQU1FIikpKQorICBs
b2dfZmlsZSA9IHN0cmluZ19jb3B5KHMpOwogCi1zID0gVVMgZ2V0ZW52KCJMT0dfRk9OVCIpOwot
aWYgKHMgIT0gTlVMTCkgbG9nX2ZvbnQgPSBzdHJpbmdfY29weShzKTsKK2lmICgocyA9IFVTIGdl
dGVudigiTE9HX0ZPTlQiKSkpCisgIGxvZ19mb250ID0gc3RyaW5nX2NvcHkocyk7CiAKIHMgPSBV
UyBnZXRlbnYoIkxPR19XSURUSCIpOwotaWYgKHMgIT0gTlVMTCAmJiAoeCA9IFVhdG9pKHMpKSAh
PSAwKSBsb2dfd2lkdGggPSB4OworaWYgKHMgJiYgKHggPSBVYXRvaShzKSkgIT0gMCkgbG9nX3dp
ZHRoID0geDsKIAotcyA9IFVTIGdldGVudigiTUVOVV9FVkVOVCIpOwotaWYgKHMgIT0gTlVMTCkg
bWVudV9ldmVudCA9IHN0cmluZ19jb3B5KHMpOworaWYgKChzID0gVVMgZ2V0ZW52KCJNRU5VX0VW
RU5UIikpKQorICBtZW51X2V2ZW50ID0gc3RyaW5nX2NvcHkocyk7CiAKIHMgPSBVUyBnZXRlbnYo
Ik1JTl9IRUlHSFQiKTsKLWlmIChzICE9IE5VTEwgJiYgKHggPSBVYXRvaShzKSkgPiAwKSBtaW5f
aGVpZ2h0ID0geDsKK2lmIChzICYmICh4ID0gVWF0b2kocykpID4gMCkgbWluX2hlaWdodCA9IHg7
CiAKIHMgPSBVUyBnZXRlbnYoIk1JTl9XSURUSCIpOwotaWYgKHMgIT0gTlVMTCAmJiAoeCA9IFVh
dG9pKHMpKSA+IDApIG1pbl93aWR0aCA9IHg7CitpZiAocyAmJiAoeCA9IFVhdG9pKHMpKSA+IDAp
IG1pbl93aWR0aCA9IHg7CiAKLXMgPSBVUyBnZXRlbnYoIlFVQUxJRllfRE9NQUlOIik7Ci1pZiAo
cyAhPSBOVUxMKSBxdWFsaWZ5X2RvbWFpbiA9IHN0cmluZ19jb3B5KHMpOwotICBlbHNlIHF1YWxp
ZnlfZG9tYWluID0gVVMiIjsgIC8qIERvbid0IHdhbnQgTlVMTCAqLworaWYgKChzID0gVVMgZ2V0
ZW52KCJRVUFMSUZZX0RPTUFJTiIpKSkKKyAgcXVhbGlmeV9kb21haW4gPSBzdHJpbmdfY29weShz
KTsKK2Vsc2UKKyAgcXVhbGlmeV9kb21haW4gPSBVUyIiOyAgLyogRG9uJ3Qgd2FudCBOVUxMICov
CiAKIHMgPSBVUyBnZXRlbnYoIlFVRVVFX0RFUFRIIik7Ci1pZiAocyAhPSBOVUxMICYmICh4ID0g
VWF0b2kocykpICE9IDApIHF1ZXVlX2RlcHRoID0geDsKK2lmIChzICYmICh4ID0gVWF0b2kocykp
ICE9IDApIHF1ZXVlX2RlcHRoID0geDsKIAotcyA9IFVTIGdldGVudigiUVVFVUVfRk9OVCIpOwot
aWYgKHMgIT0gTlVMTCkgcXVldWVfZm9udCA9IHN0cmluZ19jb3B5KHMpOworaWYgKChzID0gVVMg
Z2V0ZW52KCJRVUVVRV9GT05UIikpKQorICBxdWV1ZV9mb250ID0gc3RyaW5nX2NvcHkocyk7CiAK
IHMgPSBVUyBnZXRlbnYoIlFVRVVFX0lOVEVSVkFMIik7Ci1pZiAocyAhPSBOVUxMICYmICh4ID0g
VWF0b2kocykpICE9IDApIHF1ZXVlX3VwZGF0ZSA9IHg7CitpZiAocyAmJiAoeCA9IFVhdG9pKHMp
KSAhPSAwKSBxdWV1ZV91cGRhdGUgPSB4OwogCiBzID0gVVMgZ2V0ZW52KCJRVUVVRV9NQVhfQURE
UkVTU0VTIik7Ci1pZiAocyAhPSBOVUxMICYmICh4ID0gVWF0b2kocykpICE9IDApIHF1ZXVlX21h
eF9hZGRyZXNzZXMgPSB4OworaWYgKHMgJiYgKHggPSBVYXRvaShzKSkgIT0gMCkgcXVldWVfbWF4
X2FkZHJlc3NlcyA9IHg7CiAKIHMgPSBVUyBnZXRlbnYoIlFVRVVFX1dJRFRIIik7Ci1pZiAocyAh
PSBOVUxMICYmICh4ID0gVWF0b2kocykpICE9IDApIHF1ZXVlX3dpZHRoID0geDsKK2lmIChzICYm
ICh4ID0gVWF0b2kocykpICE9IDApIHF1ZXVlX3dpZHRoID0geDsKIAotcyA9IFVTIGdldGVudigi
U1BPT0xfRElSRUNUT1JZIik7Ci1pZiAocyAhPSBOVUxMKSBzcG9vbF9kaXJlY3RvcnkgPSBzdHJp
bmdfY29weShzKTsKK2lmICgocyA9IFVTIGdldGVudigiU1BPT0xfRElSRUNUT1JZIikpKQorICBz
cG9vbF9kaXJlY3RvcnkgPSBzdHJpbmdfY29weShzKTsKIAogcyA9IFVTIGdldGVudigiU1RBUlRf
U01BTEwiKTsKLWlmIChzICE9IE5VTEwgJiYgVXN0cmNtcChzLCAieWVzIikgPT0gMCkgc3RhcnRf
c21hbGwgPSAxOworaWYgKHMgJiYgVXN0cmNtcChzLCAieWVzIikgPT0gMCkgc3RhcnRfc21hbGwg
PSAxOwogCiBzID0gVVMgZ2V0ZW52KCJURVhUX0RFUFRIIik7Ci1pZiAocyAhPSBOVUxMICYmICh4
ID0gVWF0b2kocykpICE9IDApIHRleHRfZGVwdGggPSB4OworaWYgKHMgJiYgKHggPSBVYXRvaShz
KSkgIT0gMCkgdGV4dF9kZXB0aCA9IHg7CiAKLXMgPSBVUyBnZXRlbnYoIldJTkRPV19USVRMRSIp
OwotaWYgKHMgIT0gTlVMTCkgd2luZG93X3RpdGxlID0gc3RyaW5nX2NvcHkocyk7CitpZiAoKHMg
PSBVUyBnZXRlbnYoIldJTkRPV19USVRMRSIpKSkKKyAgd2luZG93X3RpdGxlID0gc3RyaW5nX2Nv
cHkocyk7CiAKIC8qIERlYWwgd2l0aCBzdHJpcGNoYXJ0IGNvbmZpZ3VyYXRpb24uIEZpcnN0IHNl
ZSBpZiB3ZSBhcmUgbW9uaXRvcmluZwogdGhlIHNpemUgb2YgYSBwYXJ0aXRpb24sIHRoZW4gZGVh
bCB3aXRoIGxvZyBzdHJpcGNoYXJ0cyBpbiBhIHNlcGFyYXRlCiBmdW5jdGlvbiAqLwogCiBzID0g
VVMgZ2V0ZW52KCJTSVpFX1NUUklQQ0hBUlQiKTsKLWlmIChzICE9IE5VTEwgJiYgKnMgIT0gMCkK
K2lmIChzICYmICpzKQogICB7CiAgIHN0cmlwY2hhcnRfbnVtYmVyKys7CiAgIHN0cmlwY2hhcnRf
dmFyc3RhcnQrKzsKQEAgLTIxOSwxOSArMjIwLDE5IEBACiAgIGlmIChzICE9IE5VTEwgJiYgKnMg
IT0gMCkgc2l6ZV9zdHJpcGNoYXJ0X25hbWUgPSBzdHJpbmdfY29weShzKTsKICAgfQogCi1zID0g
VVMgZ2V0ZW52KCJMT0dfU1RSSVBDSEFSVFMiKTsKLWlmIChzICE9IE5VTEwpIGRlY29kZV9zdHJp
cGNoYXJ0X2NvbmZpZyhzKTsKK2lmICgocyA9IFVTIGdldGVudigiTE9HX1NUUklQQ0hBUlRTIikp
KQorICBkZWNvZGVfc3RyaXBjaGFydF9jb25maWcocyk7CiAKIHMgPSBVUyBnZXRlbnYoIlNUUklQ
Q0hBUlRfSU5URVJWQUwiKTsKLWlmIChzICE9IE5VTEwgJiYgKHggPSBVYXRvaShzKSkgIT0gMCkg
c3RyaXBjaGFydF91cGRhdGUgPSB4OworaWYgKHMgJiYgKHggPSBVYXRvaShzKSkgIT0gMCkgc3Ry
aXBjaGFydF91cGRhdGUgPSB4OwogCiBzID0gVVMgZ2V0ZW52KCJRVUVVRV9TVFJJUENIQVJUX05B
TUUiKTsKLXF1ZXVlX3N0cmlwY2hhcnRfbmFtZSA9IChzICE9IE5VTEwpPyBzdHJpbmdfY29weShz
KSA6IFVTInF1ZXVlIjsKK3F1ZXVlX3N0cmlwY2hhcnRfbmFtZSA9IHMgPyBzdHJpbmdfY29weShz
KSA6IFVTInF1ZXVlIjsKIAogLyogQ29tcGlsZSB0aGUgcmVnZXggZm9yIG1hdGNoaW5nIHl5eXkt
bW0tZGQgYXQgdGhlIHN0YXJ0IG9mIGEgc3RyaW5nLiAqLwogCi15eXl5bW1kZF9yZWdleCA9IHBj
cmVfY29tcGlsZSgiXlxcZHs0fS1cXGRcXGQtXFxkXFxkXFxzIiwgUENSRV9DT1BULAotICBDQ1NT
ICZlcnJvciwgJmVycm9yb2Zmc2V0LCBOVUxMKTsKK3l5eXltbWRkX3JlZ2V4ID0gcGNyZTJfY29t
cGlsZSgoUENSRTJfU1BUUikiXlxcZHs0fS1cXGRcXGQtXFxkXFxkXFxzIiwKKyAgUENSRTJfWkVS
T19URVJNSU5BVEVELCBQQ1JFX0NPUFQsICZ4LCAmZXJyb3JvZmZzZXQsIE5VTEwpOwogfQogCiAv
KiBFbmQgb2YgZW1faW5pdC5jICovCmRpZmYgLXVyIGV4aW0ub3JpZy9leGltX21vbml0b3IvZW1f
bG9nLmMgZXhpbS9leGltX21vbml0b3IvZW1fbG9nLmMKLS0tIGV4aW0ub3JpZy9leGltX21vbml0
b3IvZW1fbG9nLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0v
ZXhpbV9tb25pdG9yL2VtX2xvZy5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAw
CkBAIC0zLDYgKzMsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KIAogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAx
OTk1IC0gMjAxOCAqLworLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbnRlcnMgMjAy
MSAtIDIwMjIgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNl
IGFuZCBkaXN0cmlidXRpb24uICovCiAKIC8qIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGNvZGUgZm9y
IHNjYW5uaW5nIHRoZSBtYWluIGxvZywKQEAgLTIyOSw3ICsyMzAsNyBAQAogICAgIHVzY2hhciAq
cCA9IGJ1ZmZlcjsKICAgICBybWFyayByZXNldF9wb2ludDsKICAgICBpbnQgbGVuZ3RoID0gVXN0
cmxlbihidWZmZXIpOwotICAgIGludCBpOworICAgIHBjcmUyX21hdGNoX2RhdGEgKiBtZCA9IHBj
cmUyX21hdGNoX2RhdGFfY3JlYXRlKDEsIE5VTEwpOwogCiAgICAgLyogU2tpcCB0b3RhbGx5IGJs
YW5rIGxpbmVzIChwYXJhbm9pYTogdGhlcmUgc2hvdWxkbid0IGJlIGFueSkgKi8KIApAQCAtMjQ2
LDI3ICsyNDcsMjUgQEAKICAgICBzdHJpcGNoYXJ0IGlzIHRoZSBxdWV1ZSBsZW5ndGgsIHdoaWNo
IGlzIGhhbmRsZWQgZWxzZXdoZXJlLCBhbmQgdGhlCiAgICAgMXN0IG1heSB0aGUgYSBzaXplIG1v
bml0b3IuICovCiAKLSAgICBmb3IgKGkgPSBzdHJpcGNoYXJ0X3ZhcnN0YXJ0OyBpIDwgc3RyaXBj
aGFydF9udW1iZXI7IGkrKykKLSAgICAgIHsKLSAgICAgIGlmIChwY3JlX2V4ZWMoc3RyaXBjaGFy
dF9yZWdleFtpXSwgTlVMTCwgQ1MgYnVmZmVyLCBsZW5ndGgsIDAsIFBDUkVfRU9QVCwKLSAgICAg
ICAgICAgIE5VTEwsIDApID49IDApCisgICAgZm9yIChpbnQgaSA9IHN0cmlwY2hhcnRfdmFyc3Rh
cnQ7IGkgPCBzdHJpcGNoYXJ0X251bWJlcjsgaSsrKQorICAgICAgaWYgKHBjcmUyX21hdGNoKHN0
cmlwY2hhcnRfcmVnZXhbaV0sIChQQ1JFMl9TUFRSKWJ1ZmZlciwgbGVuZ3RoLAorCQkJMCwgUENS
RV9FT1BULCBtZCwgTlVMTCkgPj0gMCkKICAgICAgICAgc3RyaXBjaGFydF90b3RhbFtpXSsrOwot
ICAgICAgfQogCiAgICAgLyogTXVuZ2UgdGhlIGxvZyBlbnRyeSBhbmQgZGlzcGxheSBzaG9ydGVu
ZWQgZm9ybSBvbiBvbmUgbGluZS4KICAgICBXZSBvbWl0IHRoZSBkYXRlIGFuZCBzaG93IG9ubHkg
dGhlIHRpbWUuIFJlbW92ZSBhbnkgdGltZSB6b25lIG9mZnNldC4KICAgICBUYWtlIG5vdGUgb2Yg
dGhlIHByZXNlbmNlIG9mIFtwaWRdLiAqLwogCi0gICAgaWYgKHBjcmVfZXhlYyh5eXl5bW1kZF9y
ZWdleCxOVUxMLENTIGJ1ZmZlcixsZW5ndGgsMCxQQ1JFX0VPUFQsTlVMTCwwKSA+PSAwKQorICAg
IGlmIChwY3JlMl9tYXRjaCh5eXl5bW1kZF9yZWdleCwgKFBDUkUyX1NQVFIpIGJ1ZmZlciwgbGVu
Z3RoLCAwLCBQQ1JFX0VPUFQsCisJCSAgICAgIG1kLCBOVUxMKSA+PSAwKQogICAgICAgewogICAg
ICAgaW50IHBpZGxlbmd0aCA9IDA7Ci0gICAgICBpZiAoKGJ1ZmZlclsyMF0gPT0gJysnIHx8IGJ1
ZmZlclsyMF0gPT0gJy0nKSAmJgotICAgICAgICAgIGlzZGlnaXQoYnVmZmVyWzIxXSkgJiYgYnVm
ZmVyWzI1XSA9PSAnICcpCisgICAgICBpZiAoICAoYnVmZmVyWzIwXSA9PSAnKycgfHwgYnVmZmVy
WzIwXSA9PSAnLScpCisgICAgICAgICAmJiBpc2RpZ2l0KGJ1ZmZlclsyMV0pICYmIGJ1ZmZlclsy
NV0gPT0gJyAnKQogICAgICAgICBtZW1tb3ZlKGJ1ZmZlciArIDIwLCBidWZmZXIgKyAyNiwgVXN0
cmxlbihidWZmZXIgKyAyNikgKyAxKTsKICAgICAgIGlmIChidWZmZXJbMjBdID09ICdbJykKLSAg
ICAgICAgewotICAgICAgICB3aGlsZSAoVXN0cmNocigiW10wMTIzNDU2Nzg5IiwgYnVmZmVyWzIw
K3BpZGxlbmd0aCsrXSkgIT0gTlVMTCk7Ci0gICAgICAgIH0KKyAgICAgICAgd2hpbGUgKFVzdHJj
aHIoIltdMDEyMzQ1Njc4OSIsIGJ1ZmZlclsyMCtwaWRsZW5ndGgrK10pICE9IE5VTEwpCisJICA7
CiAgICAgICBpZCA9IHN0cmluZ19jb3B5bihidWZmZXIgKyAyMCArIHBpZGxlbmd0aCwgTUVTU0FH
RV9JRF9MRU5HVEgpOwogICAgICAgc2hvd19sb2coIiVzIiwgYnVmZmVyKzExKTsKICAgICAgIH0K
QEAgLTI3NSw2ICsyNzQsNyBAQAogICAgICAgaWQgPSBVUyIiOwogICAgICAgc2hvd19sb2coIiVz
IiwgYnVmZmVyKTsKICAgICAgIH0KKyAgICBwY3JlMl9tYXRjaF9kYXRhX2ZyZWUobWQpOwogCiAg
ICAgLyogRGVhbCB3aXRoIGZyb3plbiBhbmQgdW5mcm96ZW4gbWVzc2FnZXMgKi8KIApAQCAtMjky
LDcgKzI5Miw3IEBACiAgICAgaWYgKChwID0gVXN0cnN0cihidWZmZXIsICI9PSIpKSAhPSBOVUxM
KQogICAgICAgewogICAgICAgcXVldWVfaXRlbSAqcXEgPSBmaW5kX3F1ZXVlKGlkLCBxdWV1ZV9u
b29wLCAwKTsKLSAgICAgIGlmIChxcSAhPSBOVUxMKQorICAgICAgaWYgKHFxKQogICAgICAgICB7
CiAgICAgICAgIGRlc3RfaXRlbSAqZDsKICAgICAgICAgdXNjaGFyICpxLCAqcjsKZGlmZiAtdXIg
ZXhpbS5vcmlnL2V4aW1fbW9uaXRvci9lbV9tYWluLmMgZXhpbS9leGltX21vbml0b3IvZW1fbWFp
bi5jCi0tLSBleGltLm9yaWcvZXhpbV9tb25pdG9yL2VtX21haW4uYwkyMDIzLTA2LTA0IDE2OjIy
OjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9leGltX21vbml0b3IvZW1fbWFpbi5jCTIwMjIt
MDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0zLDYgKzMsNyBAQAogKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogQ29weXJpZ2h0
IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLworLyogQ29weXJpZ2h0
IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxIC0gMjAyMiAqLwogLyogU2VlIHRoZSBmaWxl
IE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogCkBA
IC0xNzMsOCArMTc0LDYgQEAKIHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcCk7CiBmcHJpbnRm
KHN0ZGVyciwgIlxuIik7CiB2YV9lbmQoYXApOwotc2VsZWN0b3IgPSBzZWxlY3RvcjsgICAgIC8q
IEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1mbGFncyA9IGZsYWdzOwogfQogCiAKQEAg
LTE5OCwxOSArMTk3LDQ3IEBACiAqLwogCiBpbnQKLWhvc3RfYWRkcmVzc19leHRyYWN0X3BvcnQo
dXNjaGFyICphZGRyZXNzKQoraG9zdF9hZGRyZXNzX2V4dHJhY3RfcG9ydCh1c2NoYXIgKiBhZGRy
ZXNzKQogewotaW50IHNraXAgPSAtMzsgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIDMgZG90
cyBpbiBJUHY0IGFkZHJlc3NlcyAqLwotYWRkcmVzcy0tOwotd2hpbGUgKCooKythZGRyZXNzKSAh
PSAwKQotICB7Ci0gIGludCBjaCA9ICphZGRyZXNzOwotICBpZiAoY2ggPT0gJzonKSBza2lwID0g
MDsgICAgICAgICAvKiBTa2lwIDAgZG90cyBpbiBJUHY2IGFkZHJlc3NlcyAqLwotICAgIGVsc2Ug
aWYgKGNoID09ICcuJyAmJiBza2lwKysgPj0gMCkgYnJlYWs7Ci0gIH0KLWlmICgqYWRkcmVzcyA9
PSAwKSByZXR1cm4gMDsKLSphZGRyZXNzKysgPSAwOwotcmV0dXJuIFVhdG9pKGFkZHJlc3MpOwor
aW50IHBvcnQgPSAwOwordXNjaGFyICplbmRwdHI7CisKKy8qIEhhbmRsZSB0aGUgImJyYWNrZXRl
ZCB3aXRoIGNvbG9uIG9uIHRoZSBlbmQiIGZvcm1hdCAqLworCitpZiAoKmFkZHJlc3MgPT0gJ1sn
KQorICB7CisgIHVzY2hhciAqcmIgPSBhZGRyZXNzICsgMTsKKyAgd2hpbGUgKCpyYiAhPSAwICYm
ICpyYiAhPSAnXScpIHJiKys7CisgIGlmICgqcmIrKyA9PSAwKSByZXR1cm4gMDsJCS8qIE1pc3Np
bmcgXTsgbGVhdmUgaW52YWxpZCBhZGRyZXNzICovCisgIGlmICgqcmIgPT0gJzonKQorICAgIHsK
KyAgICBwb3J0ID0gVXN0cnRvbChyYiArIDEsICZlbmRwdHIsIDEwKTsKKyAgICBpZiAoKmVuZHB0
ciAhPSAwKSByZXR1cm4gMDsJCS8qIEludmFsaWQgcG9ydDsgbGVhdmUgaW52YWxpZCBhZGRyZXNz
ICovCisgICAgfQorICBlbHNlIGlmICgqcmIgIT0gMCkgcmV0dXJuIDA7CQkvKiBCYWQgc3ludGF4
OyBsZWF2ZSBpbnZhbGlkIGFkZHJlc3MgKi8KKyAgbWVtbW92ZShhZGRyZXNzLCBhZGRyZXNzICsg
MSwgcmIgLSBhZGRyZXNzIC0gMik7CisgIHJiWy0yXSA9IDA7CisgIH0KKworLyogSGFuZGxlIHRo
ZSAiZG90IG9uIHRoZSBlbmQiIGZvcm1hdCAqLworCitlbHNlCisgIHsKKyAgaW50IHNraXAgPSAt
MzsJCQkvKiBTa2lwIDMgZG90cyBpbiBJUHY0IGFkZHJlc3NlcyAqLworICBhZGRyZXNzLS07Cisg
IHdoaWxlICgqKCsrYWRkcmVzcykgIT0gMCkKKyAgICB7CisgICAgaW50IGNoID0gKmFkZHJlc3M7
CisgICAgaWYgKGNoID09ICc6Jykgc2tpcCA9IDA7CQkvKiBTa2lwIDAgZG90cyBpbiBJUHY2IGFk
ZHJlc3NlcyAqLworICAgICAgZWxzZSBpZiAoY2ggPT0gJy4nICYmIHNraXArKyA+PSAwKSBicmVh
azsKKyAgICB9CisgIGlmICgqYWRkcmVzcyA9PSAwKSByZXR1cm4gMDsKKyAgcG9ydCA9IFVzdHJ0
b2woYWRkcmVzcyArIDEsICZlbmRwdHIsIDEwKTsKKyAgaWYgKCplbmRwdHIgIT0gMCkgcmV0dXJu
IDA7CQkvKiBJbnZhbGlkIHBvcnQ7IGxlYXZlIGludmFsaWQgYWRkcmVzcyAqLworICAqYWRkcmVz
cyA9IDA7CisgIH0KKworcmV0dXJuIHBvcnQ7CiB9CiAKIApAQCAtMjQwLDkgKzI2Nyw2IEBACiAK
IHZvaWQgdXBkYXRlQWN0aW9uKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9p
bnRlciBjYWxsX2RhdGEpCiB7Ci13ID0gdzsgICAgICAgLyogS2VlcCBwaWNreSBjb21waWxlcnMg
aGFwcHkgKi8KLWNsaWVudF9kYXRhID0gY2xpZW50X2RhdGE7Ci1jYWxsX2RhdGEgPSBjYWxsX2Rh
dGE7CiBzY2FuX3Nwb29sX2lucHV0KFRSVUUpOwogcXVldWVfZGlzcGxheSgpOwogdGlja19xdWV1
ZV9hY2N1bXVsYXRvciA9IDA7CkBAIC0yNTAsOSArMjc0LDYgQEAKIAogdm9pZCBoaWRlQWN0aW9u
KFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciBjYWxsX2RhdGEpCiB7
Ci13ID0gdzsgICAgICAgLyogS2VlcCBwaWNreSBjb21waWxlcnMgaGFwcHkgKi8KLWNsaWVudF9k
YXRhID0gY2xpZW50X2RhdGE7Ci1jYWxsX2RhdGEgPSBjYWxsX2RhdGE7CiBhY3Rpb25lZF9tZXNz
YWdlWzBdID0gMDsKIGRpYWxvZ19yZWZfd2lkZ2V0ID0gdzsKIGRpYWxvZ19hY3Rpb24gPSBkYV9o
aWRlOwpAQCAtMjYzLDExICsyODQsNyBAQAogewogc2tpcF9pdGVtICpzayA9IHF1ZXVlX3NraXA7
CiAKLXcgPSB3OyAgICAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotY2xpZW50
X2RhdGEgPSBjbGllbnRfZGF0YTsKLWNhbGxfZGF0YSA9IGNhbGxfZGF0YTsKLQotd2hpbGUgKHNr
ICE9IE5VTEwpCit3aGlsZSAoc2spCiAgIHsKICAgc2tpcF9pdGVtICpuZXh0ID0gc2stPm5leHQ7
CiAgIHN0b3JlX2ZyZWUoc2spOwpAQCAtMjg1LDkgKzMwMiw2IEBACiAKIHZvaWQgcXVpdEFjdGlv
bihXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKQog
ewotdyA9IHc7ICAgICAgIC8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1jbGllbnRf
ZGF0YSA9IGNsaWVudF9kYXRhOwotY2FsbF9kYXRhID0gY2FsbF9kYXRhOwogZXhpdCgwKTsKIH0K
IApAQCAtMzE4LDEwICszMzIsNiBAQAogWFdpbmRvd0F0dHJpYnV0ZXMgYTsKIFdpbmRvdyB3ID0g
WHRXaW5kb3codG9wbGV2ZWxfd2lkZ2V0KTsKIAotYnV0dG9uID0gYnV0dG9uOyAgICAvKiBLZWVw
IHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotY2xpZW50X2RhdGEgPSBjbGllbnRfZGF0YTsKLWNh
bGxfZGF0YSA9IGNhbGxfZGF0YTsKLQogLyogR2V0IHRoZSBwb3NpdGlvbiBhbmQgc2l6ZSBvZiB0
aGUgdG9wIGxldmVsIHdpZGdldC4gKi8KIAogc2l6ZXBvc19hcmdzWzBdLnZhbHVlID0gKFh0QXJn
VmFsKSgmd2lkdGgpOwpAQCAtNDczLDkgKzQ4Myw2IEBACiB0aWNrX3N0cmlwY2hhcnRfYWNjdW11
bGF0b3IgKz0gdGlja19pbnRlcnZhbDsKIHJlYWRfbG9nKCk7CiAKLXB0ID0gcHQ7ICAgIC8qIEtl
ZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1pID0gaTsKLQogLyogSWYgd2UgaGF2ZSBwYXNz
ZWQgdGhlIHF1ZXVlIHVwZGF0ZSB0aW1lLCB3ZSBtdXN0IGRvIGEgZnVsbAogc2NhbiBvZiB0aGUg
cXVldWUsIGNoZWNraW5nIGZvciBuZXcgYXJyaXZhbHMsIGV0Yy4gVGhpcyB3aWxsCiBhcyBhIGJ5
LXByb2R1Y3Qgc2V0IHRoZSBjb3VudCBvZiBpdGVtcyBmb3IgdXNlIGJ5IHRoZSBzdHJpcGNoYXJ0
CkBAIC01OTIsNyArNTk5LDggQEAKICogICAgICAgICAgICAgICBJbml0aWFsaXplICAgICAgICAg
ICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCitpbnQKK21haW4o
aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogaW50IGk7CiBzdHJ1Y3Qgc3RhdCBzdGF0ZGF0YTsK
QEAgLTYxMyw3ICs2MjEsOCBAQAogY29uc3RydWN0aW5nIGZpbGUgbmFtZXMgYW5kIHRoaW5ncy4g
VGhpcyBjYWxsIHdpbGwgaW5pdGlhbGl6ZQogdGhlIHN0b3JlX2dldCgpIGZ1bmN0aW9uLiAqLwog
Ci1iaWdfYnVmZmVyID0gc3RvcmVfZ2V0KGJpZ19idWZmZXJfc2l6ZSwgRkFMU0UpOworc3RvcmVf
aW5pdCgpOworYmlnX2J1ZmZlciA9IHN0b3JlX2dldChiaWdfYnVmZmVyX3NpemUsIEdFVF9VTlRB
SU5URUQpOwogCiAvKiBTZXQgdXAgdGhlIHZlcnNpb24gc3RyaW5nIGFuZCBkYXRlIGFuZCBvdXRw
dXQgdGhlbSAqLwogCmRpZmYgLXVyIGV4aW0ub3JpZy9leGltX21vbml0b3IvZW1fbWVudS5jIGV4
aW0vZXhpbV9tb25pdG9yL2VtX21lbnUuYwotLS0gZXhpbS5vcmlnL2V4aW1fbW9uaXRvci9lbV9t
ZW51LmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vZXhpbV9t
b25pdG9yL2VtX21lbnUuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAt
Myw2ICszLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCiAKIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAt
IDIwMTggKi8KKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMSAqLwog
LyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1
dGlvbi4gKi8KIAogCkBAIC0xMTUsMTAgKzExNiw5IEBACiAqICAgICAgICBEZXN0cm95IHRoZSBt
ZW51IHdoZW4gcG9wcGVkIGRvd24gICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgcG9wZG93bkFjdGlvbihXaWRn
ZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKQorc3RhdGlj
IHZvaWQKK3BvcGRvd25BY3Rpb24oV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQ
b2ludGVyIGNhbGxfZGF0YSkKIHsKLWNsaWVudF9kYXRhID0gY2xpZW50X2RhdGE7ICAgIC8qIEtl
ZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1jYWxsX2RhdGEgPSBjYWxsX2RhdGE7CiBpZiAo
aGlnaGxpZ2h0ZWRfeCA+PSAwKQogICBYYXdUZXh0U2lua0Rpc3BsYXlUZXh0KHF1ZXVlX3RleHRf
c2luaywKICAgICBoaWdobGlnaHRlZF94LCBoaWdobGlnaHRlZF95LApAQCAtMTM2LDE3ICsxMzYs
MTMgQEAKIHN0YXRpYyB2b2lkCiBtc2dsb2dBY3Rpb24oV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGll
bnRfZGF0YSwgWHRQb2ludGVyIGNhbGxfZGF0YSkKIHsKLWludCBpOwogV2lkZ2V0IHRleHQgPSB0
ZXh0X2NyZWF0ZShVUyBjbGllbnRfZGF0YSwgdGV4dF9kZXB0aCk7CiB1c2NoYXIgKiBmbmFtZSA9
IE5VTEw7CiBGSUxFICogZiA9IE5VTEw7CiAKLXcgPSB3OyAgICAgIC8qIEtlZXAgcGlja3kgY29t
cGlsZXJzIGhhcHB5ICovCi1jYWxsX2RhdGEgPSBjYWxsX2RhdGE7Ci0KIC8qIEVuZCB1cCB3aXRo
IHRoZSBzcGxpdCB2ZXJzaW9uLCBzbyBtZXNzYWdlIGxvb2tzIHJpZ2h0IHdoZW4gbm9uLWV4aXN0
ICovCiAKLWZvciAoaSA9IDA7IGkgPCAoc3Bvb2xfaXNfc3BsaXQgPyAyOjEpOyBpKyspCitmb3Ig
KGludCBpID0gMDsgaSA8IChzcG9vbF9pc19zcGxpdCA/IDI6MSk7IGkrKykKICAgewogICBtZXNz
YWdlX3N1YmRpclswXSA9IGkgIT0gMCA/IChVUyBjbGllbnRfZGF0YSlbNV0gOiAwOwogICBmbmFt
ZSA9IHNwb29sX2ZuYW1lKFVTIm1zZ2xvZyIsIG1lc3NhZ2Vfc3ViZGlyLCBVUyBjbGllbnRfZGF0
YSwgVVMiIik7CkBAIC0xNzMsMTQgKzE2OSwxMCBAQAogc3RhdGljIHZvaWQKIGJvZHlBY3Rpb24o
V2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIGNhbGxfZGF0YSkKIHsK
LWludCBpOwogV2lkZ2V0IHRleHQgPSB0ZXh0X2NyZWF0ZShVUyBjbGllbnRfZGF0YSwgdGV4dF9k
ZXB0aCk7CiBGSUxFICpmID0gTlVMTDsKIAotdyA9IHc7ICAgICAgLyogS2VlcCBwaWNreSBjb21w
aWxlcnMgaGFwcHkgKi8KLWNhbGxfZGF0YSA9IGNhbGxfZGF0YTsKLQotZm9yIChpID0gMDsgaSA8
IChzcG9vbF9pc19zcGxpdD8gMjoxKTsgaSsrKQorZm9yIChpbnQgaSA9IDA7IGkgPCAoc3Bvb2xf
aXNfc3BsaXQ/IDI6MSk7IGkrKykKICAgewogICB1c2NoYXIgKiBmbmFtZTsKICAgbWVzc2FnZV9z
dWJkaXJbMF0gPSBpICE9IDAgPyAoVVMgY2xpZW50X2RhdGEpWzVdIDogMDsKQEAgLTE4OSw3ICsx
ODEsNyBAQAogICAgIGJyZWFrOwogICB9CiAKLWlmIChmID09IE5VTEwpCitpZiAoIWYpCiAgIHRl
eHRfc2hvd2YodGV4dCwgIkZhaWxlZCB0byBvcGVuIGZpbGU6ICVzXG4iLCBzdHJlcnJvcihlcnJu
bykpOwogZWxzZQogICB7CkBAIC0yMjEsNyArMjEzLDggQEAKIHRoZSBjb21tYW5kIHdoZXRoZXIg
d2Ugd2FudCB0aGUgb3V0cHV0IG9yIG5vdCwgc28gdGhlIHBpcGUgaGFzIHRvIGJlIHNldCB1cCBp
bgogYWxsIGNhc2VzLiAqLwogCi1zdGF0aWMgdm9pZCBBY3RPbk1lc3NhZ2UodXNjaGFyICppZCwg
dXNjaGFyICphY3Rpb24sIHVzY2hhciAqYWRkcmVzc19hcmcpCitzdGF0aWMgdm9pZAorQWN0T25N
ZXNzYWdlKHVzY2hhciAqaWQsIHVzY2hhciAqYWN0aW9uLCB1c2NoYXIgKmFkZHJlc3NfYXJnKQog
ewogaW50IHBpZDsKIGludCBwaXBlX2ZkWzJdOwpAQCAtNDA3LDQxICs0MDAsMzIgQEAKICogICAg
ICAgIENhdXNlIGEgbWVzc2FnZSB0byBiZSBkZWxpdmVyZWQgICAgICAgICAqCiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBk
ZWxpdmVyQWN0aW9uKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciBj
YWxsX2RhdGEpCitzdGF0aWMgdm9pZAorZGVsaXZlckFjdGlvbihXaWRnZXQgdywgWHRQb2ludGVy
IGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKQogewotdyA9IHc7ICAgICAgLyogS2Vl
cCBwaWNreSBjb21waWxlcnMgaGFwcHkgKi8KLWNhbGxfZGF0YSA9IGNhbGxfZGF0YTsKIEFjdE9u
TWVzc2FnZShVUyBjbGllbnRfZGF0YSwgVVMiLXYgLU0iLCBVUyIiKTsKIH0KIAotCi0KIC8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICBD
YXVzZSBhIG1lc3NhZ2UgdG8gYmUgRnJvemVuICAgICAgICAgICAgKgogKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgZnJlZXpl
QWN0aW9uKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciBjYWxsX2Rh
dGEpCitzdGF0aWMgdm9pZAorZnJlZXplQWN0aW9uKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50
X2RhdGEsIFh0UG9pbnRlciBjYWxsX2RhdGEpCiB7Ci13ID0gdzsgICAgICAvKiBLZWVwIHBpY2t5
IGNvbXBpbGVycyBoYXBweSAqLwotY2FsbF9kYXRhID0gY2FsbF9kYXRhOwogQWN0T25NZXNzYWdl
KFVTIGNsaWVudF9kYXRhLCBVUyItTWYiLCBVUyIiKTsKIH0KIAotCi0KIC8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICBDYXVzZSBhIG1l
c3NhZ2UgdG8gYmUgdGhhd2VkICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgdGhhd0FjdGlvbihXaWRn
ZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKQorc3RhdGlj
IHZvaWQKK3RoYXdBY3Rpb24oV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2lu
dGVyIGNhbGxfZGF0YSkKIHsKLXcgPSB3OyAgICAgIC8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhh
cHB5ICovCi1jYWxsX2RhdGEgPSBjYWxsX2RhdGE7CiBBY3RPbk1lc3NhZ2UoVVMgY2xpZW50X2Rh
dGEsIFVTIi1NdCIsIFVTIiIpOwogfQogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgVGFrZSBhY3Rpb24gdXNpbmcgZGlh
bG9nIGRhdGEgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwpAQCAtNDUwLDI1ICs0MzQsMTkgQEAKIGluLiBJdCBpcyBnbG9iYWwgYmVj
YXVzZSBpdCBpcyBzZXQgdXAgaW4gdGhlIGFjdGlvbiB0YWJsZSBhdAogc3RhcnQtdXAgdGltZS4g
SWYgdGhlIHN0cmluZyBpcyBlbXB0eSwgZG8gbm90aGluZy4gKi8KIAotWHRBY3Rpb25Qcm9jIGRp
YWxvZ0FjdGlvbihXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpzcywgQ2FyZGluYWwg
KmMpCitYdEFjdGlvblByb2MKK2RpYWxvZ0FjdGlvbihXaWRnZXQgdywgWEV2ZW50ICpldmVudCwg
U3RyaW5nICpzcywgQ2FyZGluYWwgKmMpCiB7CiB1c2NoYXIgKnMgPSBVUyBYYXdEaWFsb2dHZXRW
YWx1ZVN0cmluZyhkaWFsb2dfd2lkZ2V0KTsKIAotdyA9IHc7ICAgICAgLyogS2VlcCBwaWNreSBj
b21waWxlcnMgaGFwcHkgKi8KLWV2ZW50ID0gZXZlbnQ7Ci1zcyA9IHNzOwotYyA9IGM7Ci0KIFh0
UG9wZG93bigoV2lkZ2V0KWRpYWxvZ19zaGVsbCk7CiBYdERlc3Ryb3lXaWRnZXQoKFdpZGdldClk
aWFsb2dfc2hlbGwpOwogd2hpbGUgKGlzc3BhY2UoKnMpKSBzKys7CiBpZiAoc1swXSAhPSAwKQot
ICB7CiAgIGlmIChhY3Rpb25lZF9tZXNzYWdlWzBdICE9IDApCiAgICAgQWN0T25NZXNzYWdlKGFj
dGlvbmVkX21lc3NhZ2UsIGFjdGlvbl9yZXF1aXJlZCwgcyk7CiAgIGVsc2UKICAgICBOb25NZXNz
YWdlRGlhbG9ndWUocyk7ICAgIC8qIFdoZW4gY2FsbGVkIGZyb20gc29tZXdoZXJlIGVsc2UgKi8K
LSAgfQogcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQ4Miw3ICs0NjAsOCBAQAogYmUgZG9uZSB0byB0
aGUgYXBwbGljYXRpb24gdW50aWwgdGhlIGJveCBpcyBmaWxsZWQgaW4uIFRoaXMKIGZ1bmN0aW9u
IGlzIGFsc28gdXNlZCBieSB0aGUgSGlkZSBidXR0b24gaGFuZGxlci4gKi8KIAotdm9pZCBjcmVh
dGVfZGlhbG9nKHVzY2hhciAqbGFiZWwsIHVzY2hhciAqdmFsdWUpCit2b2lkCitjcmVhdGVfZGlh
bG9nKHVzY2hhciAqbGFiZWwsIHVzY2hhciAqdmFsdWUpCiB7CiBBcmcgd2FyZ1s0XTsKIERpbWVu
c2lvbiB4LCB5LCB4eCwgeXk7CkBAIC01NDQsOSArNTIzLDYgQEAKIH0KIAogCi0KLQotCiAvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAg
Q2F1c2UgYSByZWNpcGllbnQgdG8gYmUgYWRkZWQgICAgICAgICAgICoKICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01NTQsMTAgKzUzMCw5IEBA
CiAvKiBUaGlzIGp1c3Qgc2V0cyB1cCB0aGUgZGlhbG9nIGJveDsgdGhlIGFjdGlvbiBoYXBwZW5z
IHdoZW4gaXQgaGFzIGJlZW4gZmlsbGVkCiBpbi4gKi8KIAotc3RhdGljIHZvaWQgYWRkcmVjaXBB
Y3Rpb24oV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIGNhbGxfZGF0
YSkKK3N0YXRpYyB2b2lkCithZGRyZWNpcEFjdGlvbihXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVu
dF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKQogewotdyA9IHc7ICAgICAgLyogS2VlcCBwaWNr
eSBjb21waWxlcnMgaGFwcHkgKi8KLWNhbGxfZGF0YSA9IGNhbGxfZGF0YTsKIFVzdHJuY3B5KGFj
dGlvbmVkX21lc3NhZ2UsIGNsaWVudF9kYXRhLCAyNCk7CiBhY3Rpb25lZF9tZXNzYWdlWzIzXSA9
ICdcMCc7CiBhY3Rpb25fcmVxdWlyZWQgPSBVUyItTWFyIjsKQEAgLTU2NSwxNiArNTQwLDEzIEBA
CiBjcmVhdGVfZGlhbG9nKFVTIlJlY2lwaWVudCBhZGRyZXNzIHRvIGFkZD8iLCBVUyIiKTsKIH0K
IAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
CiAqICAgIENhdXNlIGFuIGFkZHJlc3MgdG8gYmUgbWFya2VkIGRlbGl2ZXJlZCAgICAgKgogKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGlj
IHZvaWQgbWFya2RlbEFjdGlvbihXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBv
aW50ZXIgY2FsbF9kYXRhKQorc3RhdGljIHZvaWQKK21hcmtkZWxBY3Rpb24oV2lkZ2V0IHcsIFh0
UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIGNhbGxfZGF0YSkKIHsKLXcgPSB3OyAgICAg
IC8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1jYWxsX2RhdGEgPSBjYWxsX2RhdGE7
CiBVc3RybmNweShhY3Rpb25lZF9tZXNzYWdlLCBjbGllbnRfZGF0YSwgMjQpOwogYWN0aW9uZWRf
bWVzc2FnZVsyM10gPSAnXDAnOwogYWN0aW9uX3JlcXVpcmVkID0gVVMiLU1tZCI7CkBAIC01ODIs
MzAgKzU1NCwyNiBAQAogY3JlYXRlX2RpYWxvZyhVUyJSZWNpcGllbnQgYWRkcmVzcyB0byBtYXJr
IGRlbGl2ZXJlZD8iLCBVUyIiKTsKIH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgogKiAgIENhdXNlIGFsbCBhZGRyZXNzZXMgdG8gYmUgbWFy
a2VkIGRlbGl2ZXJlZCAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIG1hcmthbGxkZWxBY3Rpb24oV2lkZ2V0IHcsIFh0
UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIGNhbGxfZGF0YSkKK3N0YXRpYyB2b2lkCitt
YXJrYWxsZGVsQWN0aW9uKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRl
ciBjYWxsX2RhdGEpCiB7Ci13ID0gdzsgICAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBw
eSAqLwotY2FsbF9kYXRhID0gY2FsbF9kYXRhOwogQWN0T25NZXNzYWdlKFVTIGNsaWVudF9kYXRh
LCBVUyItTW1hZCIsIFVTIiIpOwogfQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICBFZGl0IHRoZSBtZXNzYWdlJ3Mgc2VuZGVy
ICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgZWRpdHNlbmRlckFjdGlvbihXaWRnZXQgdywgWHRQ
b2ludGVyIGNsaWVudF9kYXRhLAotICBYdFBvaW50ZXIgY2FsbF9kYXRhKQorc3RhdGljIHZvaWQK
K2VkaXRzZW5kZXJBY3Rpb24oV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2lu
dGVyIGNhbGxfZGF0YSkKIHsKIHF1ZXVlX2l0ZW0gKnE7CiB1c2NoYXIgKnNlbmRlcjsKLXcgPSB3
OyAgICAgIC8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1jYWxsX2RhdGEgPSBjYWxs
X2RhdGE7CisKIFVzdHJuY3B5KGFjdGlvbmVkX21lc3NhZ2UsIGNsaWVudF9kYXRhLCAyNCk7CiBh
Y3Rpb25lZF9tZXNzYWdlWzIzXSA9ICdcMCc7CiBxID0gZmluZF9xdWV1ZShhY3Rpb25lZF9tZXNz
YWdlLCBxdWV1ZV9ub29wLCAwKTsKQEAgLTYxNSw0NyArNTgzLDM3IEBACiBjcmVhdGVfZGlhbG9n
KFVTIk5ldyBzZW5kZXIgYWRkcmVzcz8iLCBzZW5kZXIpOwogfQogCi0KIC8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgIENhdXNlIGEgbWVzc2Fn
ZSB0byBiZSByZXR1cm5lZCB0byBzZW5kZXIgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgZ2l2ZXVwQWN0aW9uKFdp
ZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciBjYWxsX2RhdGEpCitzdGF0
aWMgdm9pZAorZ2l2ZXVwQWN0aW9uKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0
UG9pbnRlciBjYWxsX2RhdGEpCiB7Ci13ID0gdzsgICAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVy
cyBoYXBweSAqLwotY2FsbF9kYXRhID0gY2FsbF9kYXRhOwogQWN0T25NZXNzYWdlKFVTIGNsaWVu
dF9kYXRhLCBVUyItdiAtTWciLCBVUyIiKTsKIH0KIAotCi0KIC8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgQ2F1c2UgYSBtZXNzYWdlIHRv
IGJlIGNhbmNlbGxlZCAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgcmVtb3ZlQWN0aW9uKFdpZGdldCB3
LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciBjYWxsX2RhdGEpCitzdGF0aWMgdm9p
ZAorcmVtb3ZlQWN0aW9uKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRl
ciBjYWxsX2RhdGEpCiB7Ci13ID0gdzsgICAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBw
eSAqLwotY2FsbF9kYXRhID0gY2FsbF9kYXRhOwogQWN0T25NZXNzYWdlKFVTIGNsaWVudF9kYXRh
LCBVUyItTXJtIiwgVVMiIik7CiB9CiAKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICBEaXNwbGF5IGEgbWVzc2FnZSdz
IGhlYWRlcnMgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGhlYWRlcnNBY3Rpb24oV2lkZ2V0IHcsIFh0UG9p
bnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIGNhbGxfZGF0YSkKK3N0YXRpYyB2b2lkCitoZWFk
ZXJzQWN0aW9uKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciBjYWxs
X2RhdGEpCiB7CiB1c2NoYXIgYnVmZmVyWzI1Nl07Ci1oZWFkZXJfbGluZSAqaCwgKm5leHQ7CiBX
aWRnZXQgdGV4dCA9IHRleHRfY3JlYXRlKFVTIGNsaWVudF9kYXRhLCB0ZXh0X2RlcHRoKTsKIHJt
YXJrIHJlc2V0X3BvaW50OwogCi13ID0gdzsgICAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBo
YXBweSAqLwotY2FsbF9kYXRhID0gY2FsbF9kYXRhOwotCiAvKiBSZW1lbWJlciB0aGUgcG9pbnQg
aW4gdGhlIGR5bmFtaWMgc3RvcmUgc28gd2UgY2FuIHJlY292ZXIgdG8gaXQgYWZ0ZXJ3YXJkcy4K
IFRoZW4gdXNlIEV4aW0ncyBmdW5jdGlvbiB0byByZWFkIHRoZSBoZWFkZXIuICovCiAKQEAgLTY3
OCwyNiArNjM2LDIyIEBACiAgIHJldHVybjsKICAgfQogCi1pZiAoc2VuZGVyX2FkZHJlc3MgIT0g
TlVMTCkKLSAgeworaWYgKHNlbmRlcl9hZGRyZXNzKQogICB0ZXh0X3Nob3dmKHRleHQsICIlcyBz
ZW5kZXI6IDwlcz5cbiIsIGYuc2VuZGVyX2xvY2FsID8gIkxvY2FsIiA6ICJSZW1vdGUiLAogICAg
IHNlbmRlcl9hZGRyZXNzKTsKLSAgfQogCi1pZiAocmVjaXBpZW50c19saXN0ICE9IE5VTEwpCitp
ZiAocmVjaXBpZW50c19saXN0KQogICB7Ci0gIGludCBpOwogICB0ZXh0X3Nob3codGV4dCwgVVMi
UmVjaXBpZW50czpcbiIpOwotICBmb3IgKGkgPSAwOyBpIDwgcmVjaXBpZW50c19jb3VudDsgaSsr
KQotICAgIHsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNpcGllbnRzX2NvdW50OyBpKyspCiAg
ICAgdGV4dF9zaG93Zih0ZXh0LCAiICAlcyAlc1xuIiwKLSAgICAgICh0cmVlX3NlYXJjaCh0cmVl
X25vbnJlY2lwaWVudHMsIHJlY2lwaWVudHNfbGlzdFtpXS5hZGRyZXNzKSA9PSBOVUxMKT8KLSAg
ICAgICAgIiAiOiIqIiwgcmVjaXBpZW50c19saXN0W2ldLmFkZHJlc3MpOwotICAgIH0KKyAgICAg
IHRyZWVfc2VhcmNoKHRyZWVfbm9ucmVjaXBpZW50cywgcmVjaXBpZW50c19saXN0W2ldLmFkZHJl
c3MpCisgICAgICAgID8gIioiIDogIiAiLAorICAgICAgcmVjaXBpZW50c19saXN0W2ldLmFkZHJl
c3MpOwogICB0ZXh0X3Nob3codGV4dCwgVVMiXG4iKTsKICAgfQogCi1mb3IgKGggPSBoZWFkZXJf
bGlzdDsgaCAhPSBOVUxMOyBoID0gbmV4dCkKK2ZvciAoaGVhZGVyX2xpbmUgKiBuZXh0LCAqIGgg
PSBoZWFkZXJfbGlzdDsgaDsgaCA9IG5leHQpCiAgIHsKICAgbmV4dCA9IGgtPm5leHQ7CiAgIHRl
eHRfc2hvd2YodGV4dCwgIiVjICIsIGgtPnR5cGUpOyAgIC8qIERvbid0IHB1c2ggaC0+dGV4dCB0
aHJvdWdoIGEgJXMgKi8KQEAgLTcwNywyMCArNjYxLDEzIEBACiBzdG9yZV9yZXNldChyZXNldF9w
b2ludCk7CiB9CiAKLQotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCiAqICAgICAgICAgICAgICBEaXNtaXNzIGEgdGV4dCB3aW5kb3cgICAgICAg
ICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KIAotc3RhdGljIHZvaWQgZGlzbWlzc0FjdGlvbihXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVu
dF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKQorc3RhdGljIHZvaWQKK2Rpc21pc3NBY3Rpb24o
V2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIGNhbGxfZGF0YSkKIHsK
LXBpcGVfaXRlbSAqcCA9IHBpcGVfY2hhaW47Ci0KLXcgPSB3OyAgICAgIC8qIEtlZXAgcGlja3kg
Y29tcGlsZXJzIGhhcHB5ICovCi1jYWxsX2RhdGEgPSBjYWxsX2RhdGE7Ci0KIFh0UG9wZG93bigo
V2lkZ2V0KWNsaWVudF9kYXRhKTsKIFh0RGVzdHJveVdpZGdldCgoV2lkZ2V0KWNsaWVudF9kYXRh
KTsKIApAQCAtNzI5LDE2ICs2NzYsOSBAQAogdG8gc2VhcmNoIHRoZSBwYXJlbnRzIG9mIHRoZSBz
YXZlZCB3aWRnZXQgdG8gc2VlIGlmIG9uZSBvZiB0aGVtCiBpcyB3aGF0IHdlIGhhdmUganVzdCBk
ZXN0cm95ZWQuICovCiAKLXdoaWxlIChwICE9IE5VTEwpCi0gIHsKLSAgV2lkZ2V0IHBwID0gcC0+
d2lkZ2V0OwotICB3aGlsZSAocHAgIT0gTlVMTCkKLSAgICB7Citmb3IgKHBpcGVfaXRlbSAqIHAg
PSBwaXBlX2NoYWluOyBwOyBwID0gcC0+bmV4dCkKKyAgZm9yIChXaWRnZXQgcHAgPSBwLT53aWRn
ZXQ7IHBwOyBwcCA9IFh0UGFyZW50KHBwKSkKICAgICBpZiAocHAgPT0gKFdpZGdldCljbGllbnRf
ZGF0YSkgeyBwLT53aWRnZXQgPSBOVUxMOyByZXR1cm47IH0KLSAgICBwcCA9IFh0UGFyZW50KHBw
KTsKLSAgICB9Ci0gIHAgPSBwLT5uZXh0OwotICB9CiB9CiAKIApAQCAtNzQ3LDcgKzY4Nyw4IEBA
CiAqICAgICAgICAgICAgIFNldCB1cCBwb3B1cCB0ZXh0IHdpbmRvdyAgICAgICAgICAgKgogKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGlj
IFdpZGdldCB0ZXh0X2NyZWF0ZSh1c2NoYXIgKm5hbWUsIGludCBoZWlnaHQpCitzdGF0aWMgV2lk
Z2V0Cit0ZXh0X2NyZWF0ZSh1c2NoYXIgKm5hbWUsIGludCBoZWlnaHQpCiB7CiBXaWRnZXQgdGV4
dHNoZWxsLCBmb3JtLCB0ZXh0LCBidXR0b247CiAKQEAgLTc5OCw5ICs3MzksNiBAQAogcmV0dXJu
IHRleHQ7CiB9CiAKLQotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCiAqICAgICAgICAgICAgU2V0IHVwIG1lbnUgaW4gcXVldWUgd2luZG93ICAg
ICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KQEAgLTgwOCw3ICs3NDYsOCBAQAogLyogV2UgaGF2ZSBhZGRlZCBhbiBhY3Rpb24gdGFibGUg
dGhhdCBjYXVzZXMgdGhpcyBmdW5jdGlvbiB0bwogYmUgY2FsbGVkLCBhbmQgc2V0IHVwIGJ1dHRv
biAyIGluIHRoZSB0ZXh0IHdpZGdldHMgdG8gY2FsbCBpdC4gKi8KIAotdm9pZCBtZW51X2NyZWF0
ZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICphY3RhcmdzLCBDYXJkaW5hbCAqY291
bnQpCit2b2lkCittZW51X2NyZWF0ZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICph
Y3RhcmdzLCBDYXJkaW5hbCAqY291bnQpCiB7CiBpbnQgbGluZTsKIGludCBpOwpAQCAtODI0LDkg
Kzc2Myw2IEBACiAgICA8QnRuVXA+OiAgICAgICAgIE1lbnVQb3Bkb3duKClub3RpZnkoKXVuaGln
aGxpZ2h0KClcblwKICAgIik7CiAKLWFjdGFyZ3MgPSBhY3RhcmdzOyAgIC8qIEtlZXAgcGlja3kg
Y29tcGlsZXJzIGhhcHB5ICovCi1jb3VudCA9IGNvdW50OwotCiAvKiBHZXQgdGhlIHNpbmsgYW5k
IHNvdXJjZSBhbmQgdGhlIGN1cnJlbnQgdGV4dCBwb2ludGVyICovCiAKIHF1ZXVlX2dldF9hcmdb
MF0udmFsdWUgPSAoWHRBcmdWYWwpKCZxdWV1ZV90ZXh0X3NpbmspOwpkaWZmIC11ciBleGltLm9y
aWcvZXhpbV9tb25pdG9yL2VtX3F1ZXVlLmMgZXhpbS9leGltX21vbml0b3IvZW1fcXVldWUuYwot
LS0gZXhpbS5vcmlnL2V4aW1fbW9uaXRvci9lbV9xdWV1ZS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUu
MDAwMDAwMDAwICswMzAwCisrKyBleGltL2V4aW1fbW9uaXRvci9lbV9xdWV1ZS5jCTIwMjItMDYt
MjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0zLDcgKzMsNyBAQAogKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogQ29weXJpZ2h0IChj
KSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChj
KSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGlt
IE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBj
b25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAKQEAgLTEzOCw4ICsxMzgs
OCBAQAogYWNsX3Zhcl9jcmVhdGUodXNjaGFyICpuYW1lKQogewogdHJlZV9ub2RlICpub2RlLCAq
KnJvb3Q7Ci1yb290ID0gKG5hbWVbMF0gPT0gJ2MnKT8gJmFjbF92YXJfYyA6ICZhY2xfdmFyX207
Ci1ub2RlID0gc3RvcmVfZ2V0KHNpemVvZih0cmVlX25vZGUpICsgVXN0cmxlbihuYW1lKSwgRkFM
U0UpOworcm9vdCA9IG5hbWVbMF0gPT0gJ2MnID8gJmFjbF92YXJfYyA6ICZhY2xfdmFyX207Citu
b2RlID0gc3RvcmVfZ2V0KHNpemVvZih0cmVlX25vZGUpICsgVXN0cmxlbihuYW1lKSwgR0VUX1VO
VEFJTlRFRCk7CiBVc3RyY3B5KG5vZGUtPm5hbWUsIG5hbWUpOwogbm9kZS0+ZGF0YS5wdHIgPSBO
VUxMOwogKHZvaWQpdHJlZV9pbnNlcnRub2RlKHJvb3QsIG5vZGUpOwpkaWZmIC11ciBleGltLm9y
aWcvZXhpbV9tb25pdG9yL2VtX1RleHRQb3AuYyBleGltL2V4aW1fbW9uaXRvci9lbV9UZXh0UG9w
LmMKLS0tIGV4aW0ub3JpZy9leGltX21vbml0b3IvZW1fVGV4dFBvcC5jCTIwMjMtMDYtMDQgMTY6
MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL2V4aW1fbW9uaXRvci9lbV9UZXh0UG9wLmMJ
MjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTEsNCArMSw1IEBACiAvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
K0NvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMgogQ29weXJpZ2h0IDE5ODkg
YnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksCiBDYW1icmlkZ2Us
IE1hc3NhY2h1c2V0dHMuCiAKQEAgLTI0Niw3ICsyNDcsNyBAQAogICBBcmcgYXJnc1sxXTsKIAog
I2lmZGVmIG5vdGRlZgotICBpZiAoY3R4LT50ZXh0LnNvdXJjZS0+U2VhcmNoID09IE5VTEwpIHsK
KyAgaWYgKCFjdHgtPnRleHQuc291cmNlLT5TZWFyY2gpIHsKICAgICAgIFhCZWxsKFh0RGlzcGxh
eSh3KSwgMCk7CiAgICAgICByZXR1cm47CiAgIH0KQEAgLTI3OSwxNiArMjgwLDE1IEBACiAgICAg
cmV0dXJuOwogICB9CiAKLSAgaWYgKGN0eC0+dGV4dC5zZWFyY2g9PSBOVUxMKSB7CisgIGlmICgh
Y3R4LT50ZXh0LnNlYXJjaCkgewogICAgIGN0eC0+dGV4dC5zZWFyY2ggPSBYdE5ldyhzdHJ1Y3Qg
U2VhcmNoQW5kUmVwbGFjZSk7CiAgICAgY3R4LT50ZXh0LnNlYXJjaC0+c2VhcmNoX3BvcHVwID0g
Q3JlYXRlRGlhbG9nKHcsIHB0ciwgInNlYXJjaCIsCiAJCQkJCQkgIEFkZFNlYXJjaENoaWxkcmVu
KTsKICAgICBYdFJlYWxpemVXaWRnZXQoY3R4LT50ZXh0LnNlYXJjaC0+c2VhcmNoX3BvcHVwKTsK
ICAgICBTZXRXTVByb3RvY29sVHJhbnNsYXRpb25zKGN0eC0+dGV4dC5zZWFyY2gtPnNlYXJjaF9w
b3B1cCk7CiAgIH0KLSAgZWxzZSBpZiAoKm51bV9wYXJhbXMgPiAxKSB7CisgIGVsc2UgaWYgKCpu
dW1fcGFyYW1zID4gMSkKICAgICBYdFZhU2V0VmFsdWVzKGN0eC0+dGV4dC5zZWFyY2gtPnNlYXJj
aF90ZXh0LCBYdE5zdHJpbmcsIHB0ciwgTlVMTCk7Ci0gIH0KIAogICBYdFNldEFyZyhhcmdzWzBd
LCBYdE5lZGl0VHlwZSwmZWRpdF9tb2RlKTsKICAgWHRHZXRWYWx1ZXMoY3R4LT50ZXh0LnNvdXJj
ZSwgYXJncywgT05FKTsKZGlmZiAtdXIgZXhpbS5vcmlnL2V4aW1fbW9uaXRvci9lbV92ZXJzaW9u
LmMgZXhpbS9leGltX21vbml0b3IvZW1fdmVyc2lvbi5jCi0tLSBleGltLm9yaWcvZXhpbV9tb25p
dG9yL2VtX3ZlcnNpb24uYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysg
ZXhpbS9leGltX21vbml0b3IvZW1fdmVyc2lvbi5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAw
MDAwICswMzAwCkBAIC0zLDcgKzMsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KIAogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENh
bWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFp
bmVycyAyMDIwICovCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAg
LSAyMDIxICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBh
bmQgZGlzdHJpYnV0aW9uLiAqLwogCiAjZGVmaW5lIEVNX1ZFUlNJT05fQwrQotC+0LvRjNC60L4g
0LIgZXhpbTogTG9jYWwKZGlmZiAtdXIgZXhpbS5vcmlnL01ha2VmaWxlIGV4aW0vTWFrZWZpbGUK
LS0tIGV4aW0ub3JpZy9NYWtlZmlsZQkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMw
MAorKysgZXhpbS9NYWtlZmlsZQkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApA
QCAtMiw2ICsyLDcgQEAKICMgYXBwcm9wcmlhdGUgbGlua3MsIGFuZCB0aGVuIGNyZWF0aW5nIGFu
ZCBydW5uaW5nIHRoZSBtYWluIG1ha2VmaWxlIGluIHRoYXQKICMgZGlyZWN0b3J5LgogCisjIENv
cHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMgogIyBDb3B5cmlnaHQgKGMpIFVu
aXZlcnNpdHkgb2YgQ2FtYnJpZGdlLCAxOTk1IC0gMjAxOAogIyBTZWUgdGhlIGZpbGUgTk9USUNF
IGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLgogCkBAIC0xMDIsNiArMTAz
LDcgQEAKIGNzY29wZS5maWxlczogRlJDCiAJZWNobyAiLXEiID4gJEAKIAllY2hvICItcDMiID4+
ICRACisJLWJkPWJ1aWxkLSQoYnVpbGRuYW1lKTsgWyAtZCAkJGJkIF0gJiYgZWNobyAtZSAiJCRi
ZC9jb25maWcuaFxuJCRiZC9NYWtlZmlsZSIgPj4gJEAKIAlmaW5kIHNyYyBMb2NhbCBPUyBleGlt
X21vbml0b3IgLW5hbWUgIiouW2NzaHlsXSIgLXByaW50IFwKIAkJICAgIC1vIC1uYW1lICJvcy5b
Y2hdKiIgLXByaW50IFwKIAkJICAgIC1vIC1uYW1lICIqYWtlZmlsZSoiIC1wcmludCBcCmRpZmYg
LXVyIGV4aW0ub3JpZy9PUy9NYWtlZmlsZS1CYXNlIGV4aW0vT1MvTWFrZWZpbGUtQmFzZQotLS0g
ZXhpbS5vcmlnL09TL01ha2VmaWxlLUJhc2UJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAg
KzAzMDAKKysrIGV4aW0vT1MvTWFrZWZpbGUtQmFzZQkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAw
MDAwMCArMDMwMApAQCAtNSw4ICs1LDcgQEAKICMgb3B0aW9uYWwsIExvY2FsLyogZmlsZXMgYXQg
dGhlIGZyb250IG9mIHRoaXMgZmlsZSwgdG8gY3JlYXRlIE1ha2VmaWxlIGluIHRoZQogIyBidWls
ZCBkaXJlY3RvcnkuCiAjCi0jIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMTk5
NSAtIDIwMTgKLSMgQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwCisjIENv
cHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMTk5NSAtIDIwMjIKIAogU0hFTEwgICAg
ICA9ICQoTUFLRV9TSEVMTCkKIFNDUklQVFMgICAgPSAuLi9zY3JpcHRzCkBAIC04MSw3ICs4MCw2
IEBACiAjIEJ1aWxkIChsaW5rKSB0aGUgb3MuaCBmaWxlCiAKIG9zLmg6CSQoU0NSSVBUUykvQ29u
ZmlndXJlLW9zLmggXAotCSQoTykvb3MuaC1EYXJ3aW4JXAogCSQoTykvb3MuaC1GcmVlQlNECVwK
IAkkKE8pL29zLmgtR05VCQlcCiAJJChPKS9vcy5oLUxpbnV4CQlcCkBAIC0xMTMsNyArMTExLDcg
QEAKIAogT0JKX01BQ1JPID0gbWFjcm9fcHJlZGVmLm8gXAogCW1hY3JvLWdsb2JhbHMubyBtYWNy
by1yZWFkY29uZi5vIG1hY3JvLXJvdXRlLm8gbWFjcm8tdHJhbnNwb3J0Lm8gbWFjcm8tZHJ0YWJs
ZXMubyBcCi0JbWFjcm8tdGxzLm8gXAorCW1hY3JvLWFjbC5vIG1hY3JvLXRscy5vIFwKIAltYWNy
by1hcHBlbmRmaWxlLm8gbWFjcm8tYXV0b3JlcGx5Lm8gbWFjcm8tbG10cC5vIG1hY3JvLXBpcGUu
byBtYWNyby1xdWV1ZWZpbGUubyBcCiAJbWFjcm8tc210cC5vIG1hY3JvLWFjY2VwdC5vIG1hY3Jv
LWRuc2xvb2t1cC5vIG1hY3JvLWlwbGl0ZXJhbC5vIG1hY3JvLWlwbG9va3VwLm8gXAogCW1hY3Jv
LW1hbnVhbHJvdXRlLm8gbWFjcm8tcXVlcnlwcm9ncmFtLm8gbWFjcm8tcmVkaXJlY3QubyBcCkBA
IC0xNDEsNiArMTM5LDkgQEAKIG1hY3JvLWRydGFibGVzLm8gOglkcnRhYmxlcy5jCiAJQGVjaG8g
IiQoQ0MpIC1ETUFDUk9fUFJFREVGIGRydGFibGVzLmMiCiAJJChGRSkkKENDKSAtYyAkKENGTEFH
UykgLURNQUNST19QUkVERUYgJChJTkNMVURFKSAtbyAkQCBkcnRhYmxlcy5jCittYWNyby1hY2wu
bzoJYWNsLmMKKwlAZWNobyAiJChDQykgLURNQUNST19QUkVERUYgYWNsLmMiCisJJChGRSkkKEND
KSAtYyAkKENGTEFHUykgLURNQUNST19QUkVERUYgJChJTkNMVURFKSAtbyAkQCBhY2wuYwogbWFj
cm8tdGxzLm86CXRscy5jIHRscy1nbnUuYyB0bHMtb3BlbnNzbC5jCiAJQGVjaG8gIiQoQ0MpIC1E
TUFDUk9fUFJFREVGIHRscy5jIgogCSQoRkUpJChDQykgLWMgJChDRkxBR1MpIC1ETUFDUk9fUFJF
REVGICQoSU5DTFVERSkgLW8gJEAgdGxzLmMKQEAgLTQ3NCw3ICs0NzUsNiBAQAogCQkJZG1hcmMu
byBcCiAJCQlpbWFwX3V0ZjcubyBcCiAJCQlzcGYubyBcCi0JCQlzcnMubyBcCiAJCQl1dGY4Lm8K
IAogIyBUYXJnZXRzIGZvciBmaW5hbCBiaW5hcmllczsgdGhlIG1haW4gb25lIGhhcyBhIGJ1aWxk
IG51bWJlciB3aGljaCBpcwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAKIE9CSl9FWElNID0gYWNsLm8g
YmFzZTY0Lm8gY2hpbGQubyBjcnlwdDE2Lm8gZGFlbW9uLm8gZGJmbi5vIGRlYnVnLm8gZGVsaXZl
ci5vIFwKICAgICAgICAgZGlyZWN0b3J5Lm8gZG5zLm8gZHJ0YWJsZXMubyBlbnEubyBleGltLm8g
ZXhwYW5kLm8gZmlsdGVyLm8gXAotICAgICAgICBmaWx0ZXJ0ZXN0Lm8gZ2xvYmFscy5vIGRraW0u
byBka2ltX3RyYW5zcG9ydC5vIGhhc2gubyBcCisgICAgICAgIGZpbHRlcnRlc3QubyBnbG9iYWxz
Lm8gZGtpbS5vIGRraW1fdHJhbnNwb3J0Lm8gZG5zYmwubyBoYXNoLm8gXAogICAgICAgICBoZWFk
ZXIubyBob3N0Lm8gaXAubyBsb2cubyBsc3MubyBtYXRjaC5vIG1kNS5vIG1vYW4ubyBcCiAgICAg
ICAgIG9zLm8gcGFyc2UubyBwcml2Lm8gcXVldWUubyBcCiAgICAgICAgIHJkYS5vIHJlYWRjb25m
Lm8gcmVjZWl2ZS5vIHJldHJ5Lm8gcmV3cml0ZS5vIHJmYzIwNDcubyBcCkBAIC02MzUsMTEgKzYz
NSwxMiBAQAogSERSUyAgPQlibG9iLmggXAogCWNvbmZpZy5oIFwKIAlkYmZ1bmN0aW9ucy5oIFwK
LQlkYnN0dWZmLmggXAogCWV4aW0uaCBcCiAJZnVuY3Rpb25zLmggXAogCWdsb2JhbHMuaCBcCiAJ
aGFzaC5oIFwKKwloaW50c2RiLmggXAorCWhpbnRzZGJfc3RydWN0cy5oIFwKIAlsb2NhbF9zY2Fu
LmggXAogCW1hY3Jvcy5oIFwKIAlteXR5cGVzLmggXApAQCAtNjQ4LDEwICs2NDksMTEgQEAKIAlv
cy5oCiBQSERSUyA9IC4uL2NvbmZpZy5oIFwKIAkuLi9kYmZ1bmN0aW9ucy5oIFwKLQkuLi9kYnN0
dWZmLmggXAogCS4uL2V4aW0uaCBcCiAJLi4vZnVuY3Rpb25zLmggXAogCS4uL2dsb2JhbHMuaCBc
CisJLi4vaGludHNkYi5oIFwKKwkuLi9oaW50c2RiX3N0cnVjdHMuaCBcCiAJLi4vbG9jYWxfc2Nh
bi5oIFwKIAkuLi9tYWNyb3MuaCBcCiAJLi4vbXl0eXBlcy5oIFwKQEAgLTc3NCw2ICs3NzYsNyBA
QAogZGVsaXZlci5vOiAgICAgICAkKEhEUlMpIHRyYW5zcG9ydHMvc210cC5oIGRlbGl2ZXIuYwog
ZGlyZWN0b3J5Lm86ICAgICAkKEhEUlMpIGRpcmVjdG9yeS5jCiBkbnMubzogICAgICAgICAgICQo
SERSUykgZG5zLmMKK2Ruc2JsLm86ICAgICAgICAgJChIRFJTKSBkbnNibC5jCiBlbnEubzogICAg
ICAgICAgICQoSERSUykgZW5xLmMKIGV4aW0ubzogICAgICAgICAgJChIRFJTKSBleGltLmMKIGV4
cGFuZC5vOiAgICAgICAgJChIRFJTKSBleHBhbmQuYwpAQCAtODM5LDcgKzg0Miw2IEBACiBkbWFy
Yy5vOgkkKEhEUlMpIHBka2ltL3Bka2ltLmggZG1hcmMuaCBkbWFyYy5jCiBpbWFwX3V0ZjcubzoJ
JChIRFJTKSBpbWFwX3V0ZjcuYwogc3BmLm86CQkkKEhEUlMpIHNwZi5oIHNwZi5jCi1zcnMubzoJ
CSQoSERSUykgc3JzLmggc3JzLmMKIHV0ZjgubzoJCSQoSERSUykgdXRmOC5jCiAKICMgVGhlIG1v
ZHVsZSBjb250YWluaW5nIHRhYmxlcyBvZiBhdmFpbGFibGUgbG9va3Vwcywgcm91dGVycywgYXV0
aHMsIGFuZArQotC+0LvRjNC60L4g0LIgZXhpbS5vcmlnL09TOiBNYWtlZmlsZS1EYXJ3aW4KZGlm
ZiAtdXIgZXhpbS5vcmlnL09TL01ha2VmaWxlLURlZmF1bHQgZXhpbS9PUy9NYWtlZmlsZS1EZWZh
dWx0Ci0tLSBleGltLm9yaWcvT1MvTWFrZWZpbGUtRGVmYXVsdAkyMDIzLTA2LTA0IDE2OjIyOjA1
LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9PUy9NYWtlZmlsZS1EZWZhdWx0CTIwMjItMDYtMjMg
MTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC04OSw3ICs4OSw3IEBACiAKICMgUENSRV9MSUJT
IGNvbnRhaW5zIHRoZSBsaWJyYXJ5IHRvIGJlIGxpbmtlZCBmb3IgUENSRQogCi1QQ1JFX0xJQlM9
LWxwY3JlCitQQ1JFX0xJQlM9LWxwY3JlMi04CiAKIAogIyBMSUJTIGFuZCBFWFRSQUxJQlMgY29u
dGFpbiBsaWJyYXJ5IHNldHRpbmdzIHRoYXQgYXJlIHVzZWQgb24gbGlua2luZwpkaWZmIC11ciBl
eGltLm9yaWcvT1MvTWFrZWZpbGUtRnJlZUJTRCBleGltL09TL01ha2VmaWxlLUZyZWVCU0QKLS0t
IGV4aW0ub3JpZy9PUy9NYWtlZmlsZS1GcmVlQlNECTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAw
MDAwICswMzAwCisrKyBleGltL09TL01ha2VmaWxlLUZyZWVCU0QJMjAyMi0wNi0yMyAxNjo0MTox
MC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsNyArMiw3IEBACiAjIENvcHlyaWdodCAoYykgVGhlIEV4
aW0gTWFpbnRhaW5lcnMgMjAyMAogCiBDSE9XTl9DT01NQU5EPS91c3Ivc2Jpbi9jaG93bgotU1RS
SVBfQ09NTUFORD0vdXNyL2Jpbi9zdHJpcAorI1NUUklQX0NPTU1BTkQ9L3Vzci9iaW4vc3RyaXAK
IENITU9EX0NPTU1BTkQ9L2Jpbi9jaG1vZAogCiAKZGlmZiAtdXIgZXhpbS5vcmlnL09TL01ha2Vm
aWxlLU9wZW5CU0QgZXhpbS9PUy9NYWtlZmlsZS1PcGVuQlNECi0tLSBleGltLm9yaWcvT1MvTWFr
ZWZpbGUtT3BlbkJTRAkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhp
bS9PUy9NYWtlZmlsZS1PcGVuQlNECTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAw
CkBAIC0xLDUgKzEsNSBAQAogIyBFeGltOiBPUy1zcGVjaWZpYyBtYWtlIGZpbGUgZm9yIE9wZW5C
U0QKLSMgQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwCisjIENvcHlyaWdo
dCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMgogCiBDSE9XTl9DT01NQU5EPS91c3Ivc2Jp
bi9jaG93bgogQ0hHUlBfQ09NTUFORD0vdXNyL3NiaW4vY2hncnAKQEAgLTI0LDcgKzI0LDcgQEAK
IAogSEFWRV9JUFY2PVlFUwogCi0jIE9wZW5CU0QgYWx3YXlzIHNoaXBzIHdpdGggQmVya2VsZXkg
REIKLVVTRV9EQj15ZXMKKyMgT3BlbkJTRCBzaGlwcyB3aXRoIGEgdG9vLW9sZCBCZXJrZWxleSBE
Qi4gIE5EQk0gaXMgdGhlIGRlZmF1bHQgaWYgd2UgZG9uJ3Qgc3BlY2lmeSBvbmUuCisjVVNFX0RC
PXllcwogCiAjIEVuZApkaWZmIC11ciBleGltLm9yaWcvT1Mvb3MuYy1GcmVlQlNEIGV4aW0vT1Mv
b3MuYy1GcmVlQlNECi0tLSBleGltLm9yaWcvT1Mvb3MuYy1GcmVlQlNECTIwMjMtMDYtMDQgMTY6
MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL09TL29zLmMtRnJlZUJTRAkyMDIyLTA2LTIz
IDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMyw2ICszLDcgQEAKICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIENvcHlyaWdodCAoYykg
SmVyZW15IEhhcnJpcyAxOTk1IC0gMjAyMCAqLworLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBN
YWludGFpbmVycyAyMDIxICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25z
IG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBGcmVlQlNELXNwZWNpZmljIGNvZGUu
IFRoaXMgaXMgY29uY2F0ZW5hdGVkIG9udG8gdGhlIGdlbmVyaWMKQEAgLTE2LDEwICsxNywxMSBA
QAogc3NpemVfdAogb3Nfc2VuZGZpbGUoaW50IG91dCwgaW50IGluLCBvZmZfdCAqIG9mZnAsIHNp
emVfdCBjbnQpCiB7Ci1vZmZfdCBsb2ZmID0gKm9mZnAsIHdyaXR0ZW47CitvZmZfdCBsb2ZmID0g
b2ZmcCA/ICpvZmZwIDogMDsKK29mZl90IHdyaXR0ZW47CiAKIGlmIChzZW5kZmlsZShpbiwgb3V0
LCBsb2ZmLCBjbnQsIE5VTEwsICZ3cml0dGVuLCAwKSA8IDApIHJldHVybiAoc3NpemVfdCktMTsK
LSpvZmZwID0gbG9mZiArIHdyaXR0ZW47CitpZiAob2ZmcCkgKm9mZnAgPSBsb2ZmICsgd3JpdHRl
bjsKIHJldHVybiAoc3NpemVfdCl3cml0dGVuOwogfQogCtCi0L7Qu9GM0LrQviDQsiBleGltLm9y
aWcvT1M6IG9zLmgtRGFyd2luCmRpZmYgLXVyIGV4aW0ub3JpZy9PUy9vcy5oLUZyZWVCU0QgZXhp
bS9PUy9vcy5oLUZyZWVCU0QKLS0tIGV4aW0ub3JpZy9PUy9vcy5oLUZyZWVCU0QJMjAyMy0wNi0w
NCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vT1Mvb3MuaC1GcmVlQlNECTIwMjIt
MDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0xLDYgKzEsNiBAQAogLyogRXhpbTog
T1Mtc3BlY2lmaWMgQyBoZWFkZXIgZmlsZSBmb3IgRnJlZUJTRCAqLwogLyogQ29weXJpZ2h0IChj
KSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChj
KSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGlt
IE1haW50YWluZXJzIDIwMjAgLSAyMDIxICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBj
b25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAKQEAgLTExLDkgKzExLDEy
IEBACiAjZGVmaW5lIEhBVkVfU0VUQ0xBU1NSRVNPVVJDRVMKICNkZWZpbmUgSEFWRV9NTUFQCiAj
ZGVmaW5lIEhBVkVfU1lTX01PVU5UX0gKKyNkZWZpbmUgSEFWRV9HRVRJRkFERFJTCiAjZGVmaW5l
IFNJT0NHSUZDT05GX0dJVkVTX0FERFIKICNkZWZpbmUgSEFWRV9TUkFORE9NREVWCiAjZGVmaW5l
IEhBVkVfQVJDNFJBTkRPTQorI2RlZmluZSBFWElNX0hBVkVfT1BFTkFUCisjZGVmaW5lIEVYSU1f
SEFWRV9GVVRJTUVOUwogCiAvKiBBcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBjYWxsIGFyYzRyYW5k
b21fc3RpcigpIGV4cGxpY2l0bHkgYWZ0ZXIKICAqIEZyZWVCU0QgcjIyNzUyMCAoYXBwcm94aW1h
dGVseSAxMDAwMDAyKS4KQEAgLTU1LDYgKzU4LDExIEBACiAjZGVmaW5lIE9TX1NFTkRGSUxFCiBl
eHRlcm4gc3NpemVfdCBvc19zZW5kZmlsZShpbnQsIGludCwgb2ZmX3QgKiwgc2l6ZV90KTsKIAor
I2lmZGVmIFBJRF9UX0ZNVAorIyB1bmRlZiBQSURfVF9GTVQKKyNlbmRpZgorI2RlZmluZSBQSURf
VF9GTVQgIiVkIgorCiAKIC8qKioqKioqKioqKioqKioqKioqLwogCkBAIC02OCw0ICs3Niw2IEBA
CiAKIC8qKioqKioqKioqKioqKioqKioqLwogCisjZGVmaW5lIEVYSU1fSEFWRV9LRVZFTlQKKwog
LyogRW5kICovCmRpZmYgLXVyIGV4aW0ub3JpZy9PUy9vcy5oLUdOVSBleGltL09TL29zLmgtR05V
Ci0tLSBleGltLm9yaWcvT1Mvb3MuaC1HTlUJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAg
KzAzMDAKKysrIGV4aW0vT1Mvb3MuaC1HTlUJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAg
KzAzMDAKQEAgLTEsNSArMSw1IEBACiAvKiBFeGltOiBPUy1zcGVjaWZpYyBDIGhlYWRlciBmaWxl
IGZvciBHTlUvSHVyZCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAy
MDIwICovCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIx
ICovCiAKICNpbmNsdWRlIDxmZWF0dXJlcy5oPgogCmRpZmYgLXVyIGV4aW0ub3JpZy9PUy9vcy5o
LUxpbnV4IGV4aW0vT1Mvb3MuaC1MaW51eAotLS0gZXhpbS5vcmlnL09TL29zLmgtTGludXgJMjAy
My0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vT1Mvb3MuaC1MaW51eAky
MDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMSw1ICsxLDYgQEAKIC8qIEV4
aW06IE9TLXNwZWNpZmljIEMgaGVhZGVyIGZpbGUgZm9yIExpbnV4ICovCiAvKiBDb3B5cmlnaHQg
KGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDIwICovCisvKiBDb3B5cmlnaHQg
KGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjEgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0Ug
Zm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIApAQCAtMTYsNiAr
MTcsNyBAQAogI2RlZmluZSBIQVZFX01NQVAKICNkZWZpbmUgSEFWRV9CU0RfR0VUTE9BREFWRwog
I2RlZmluZSBIQVZFX1NZU19TVEFUVkZTX0gKKyNkZWZpbmUgSEFWRV9HRVRJRkFERFJTCiAjZGVm
aW5lIE5PX0lQX1ZBUl9ICiAjZGVmaW5lIFNJR19JR05fV09SS1MKIApAQCAtNzEsOCArNzMsOSBA
QAogIyBkZWZpbmUgTExPTkdfTUFYIExPTkdfTE9OR19NQVgKICNlbmRpZgogCi0jaWYgX1BPU0lY
X0NfU09VUkNFID49IDIwMDgwOUwgfHwgX0FURklMRV9TT1VDRQorI2lmIF9QT1NJWF9DX1NPVVJD
RSA+PSAyMDA4MDlMIHx8IF9BVEZJTEVfU09VUkNFCiAjIGRlZmluZSBFWElNX0hBVkVfT1BFTkFU
CisjIGRlZmluZSBFWElNX0hBVkVfRlVUSU1FTlMKICNlbmRpZgogCiAvKiBUQ1AgRmFzdCBPcGVu
IHN1cHBvcnQgKi8KQEAgLTkwLDUgKzkzLDEyIEBACiAvKiAiQWJzdHJhY3QiIFVuaXgtc29ja2V0
IG5hbWVzICovCiAjZGVmaW5lIEVYSU1fSEFWRV9BQlNUUkFDVF9VTklYX1NPQ0tFVFMKIAorLyog
aW5vdGlmeSg3KSBldGMgc3lzY2FsbHMgKi8KKyNkZWZpbmUgRVhJTV9IQVZFX0lOT1RJRlkKKwor
LyogTmVlZGVkIGZvciB1Q2xpYmMgKi8KKyNpZm5kZWYgTlNfTUFYTVNHCisjIGRlZmluZSBOU19N
QVhNU0cgNjU1MzUKKyNlbmRpZgogCiAvKiBFbmQgKi8KZGlmZiAtdXIgZXhpbS5vcmlnL09TL29z
LmgtT3BlbkJTRCBleGltL09TL29zLmgtT3BlbkJTRAotLS0gZXhpbS5vcmlnL09TL29zLmgtT3Bl
bkJTRAkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9PUy9vcy5o
LU9wZW5CU0QJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTEsMTIgKzEs
MTUgQEAKIC8qIEV4aW06IE9TLXNwZWNpZmljIEMgaGVhZGVyIGZpbGUgZm9yIE9wZW5CU0QgKi8K
IC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8K
Ky8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMSAqLwogLyogU2VlIHRo
ZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8K
IAogCiAjZGVmaW5lIEhBVkVfQlNEX0dFVExPQURBVkcKICNkZWZpbmUgSEFWRV9NTUFQCiAjZGVm
aW5lIEhBVkVfU1lTX01PVU5UX0gKLSNkZWZpbmUgU0lPQ0dJRkNPTkZfR0lWRVNfQUREUgorI2Rl
ZmluZSBIQVZFX0dFVElGQUREUlMKKyNkZWZpbmUgRVhJTV9IQVZFX09QRU5BVAorI2RlZmluZSBF
WElNX0hBVkVfRlVUSU1FTlMKICNkZWZpbmUgSEFWRV9BUkM0UkFORE9NCiAvKiBJbiBNYXkgMjAx
NCwgT3BlbkJTRCA1LjUgd2FzIHJlbGVhc2VkIHdoaWNoIGNsZWFuZWQgdXAgdGhlIGFyYzRyYW5k
b21fKiBBUEkKICAgIHdoaWNoIHJlbW92ZWQgdGhlIGFyYzRyYW5kb21fc3RpcigpIGZ1bmN0aW9u
LiBTZXQgTk9UX0hBVkVfQVJDNFJBTkRPTV9TVElSCkBAIC01Nyw0ICs2MCw2IEBACiBTcGFjZS1j
b25zdHJhaW5lZCBkZXZpY2VzIGNvdWxkIHVzZSBtdWNoIHNtYWxsZXI7IGEgZmV3IGsuICovCiAj
ZGVmaW5lIE5TX01BWE1TRyA2NTUzNQogCisjZGVmaW5lIEVYSU1fSEFWRV9LRVZFTlQKKwogLyog
RW5kICovCmRpZmYgLXVyIGV4aW0ub3JpZy9PUy9vcy5oLVN1bk9TNSBleGltL09TL29zLmgtU3Vu
T1M1Ci0tLSBleGltLm9yaWcvT1Mvb3MuaC1TdW5PUzUJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vT1Mvb3MuaC1TdW5PUzUJMjAyMi0wNi0yMyAxNjo0MToxMC4w
MDAwMDAwMDAgKzAzMDAKQEAgLTEsNCArMSw1IEBACiAvKiBFeGltOiBPUy1zcGVjaWZpYyBDIGhl
YWRlciBmaWxlIGZvciBTdW5PUzUgYWthIFNvbGFyaXMgKi8KKy8qIENvcHlyaWdodCAoYykgVGhl
IEV4aW0gTWFpbnRhaW5lcnMgMjAyMSAqLwogCiAjZGVmaW5lIENSWVBUX0gKICNkZWZpbmUgSEFW
RV9NTUFQCkBAIC04LDYgKzksOCBAQAogCiAjZGVmaW5lIEhBVkVfR0VUSVBOT0RFQllOQU1FICAg
IDEKICNkZWZpbmUgSEFWRV9HRVRJUE5PREVCWUFERFIgICAgMQorI2RlZmluZSBFWElNX0hBVkVf
T1BFTkFUCisjZGVmaW5lIEVYSU1fSEFWRV9GVVRJTUVOUwogCiAjZGVmaW5lIEhBVkVfS1NUQVQK
ICNkZWZpbmUgTE9BRF9BVkdfS1NUQVQgICAgICAgICAic3lzdGVtX21pc2MiCkBAIC0zNiw2ICsz
OSwxMCBAQAogIyBkZWZpbmUgTUlTU0lOR19VTlNFVEVOVl8zCiAjZW5kaWYKIAorI2lmIF9QT1NJ
WF9DX1NPVVJDRSA8IDIwMDgwOUwKKyMgZGVmaW5lIE1JU1NJTkdfUE9TSVhfTUVNQUxJR04KKyNl
bmRpZgorCiAKIC8qIFN1bk9TNSBkb2Vzbid0IGFjY2VwdCBnZXRjd2QoTlVMTCwgMCkgdG8gYXV0
by1hbGxvY2F0ZQogYSBidWZmZXIgKi8K0KLQvtC70YzQutC+INCyIGV4aW0vT1MvdW5zdXBwb3J0
ZWQ6IE1ha2VmaWxlLURhcndpbgpkaWZmIC11ciBleGltLm9yaWcvT1MvdW5zdXBwb3J0ZWQvb3Mu
Yy1JUklYIGV4aW0vT1MvdW5zdXBwb3J0ZWQvb3MuYy1JUklYCi0tLSBleGltLm9yaWcvT1MvdW5z
dXBwb3J0ZWQvb3MuYy1JUklYCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisr
KyBleGltL09TL3Vuc3VwcG9ydGVkL29zLmMtSVJJWAkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAw
MDAwMCArMDMwMApAQCAtMiw2ICsyLDcgQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWls
IHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJz
IDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMjAwMSAq
LwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3Ry
aWJ1dGlvbi4gKi8KIApAQCAtNTksNyArNjAsNyBAQAogICBsb2dfd3JpdGUoMCwgTE9HX1BBTklD
X0RJRSwgImlmbGlzdC1zeXNjdGwtZXN0aW1hdGUgZmFpbGVkOiAlcyIsCiAgICAgc3RyZXJyb3Io
ZXJybm8pKTsKIAotYnVmID0gc3RvcmVfZ2V0KG5lZWRlZCwgRkFMU0UpOworYnVmID0gc3RvcmVf
Z2V0KG5lZWRlZCwgR0VUX1VOVEFJTlRFRCk7CiAKIGlmIChzeXNjdGwobWliLCA2LCBidWYsICZu
ZWVkZWQsIE5VTEwsIDApIDwgMCkKICAgbG9nX3dyaXRlKDAsIExPR19QQU5JQ19ESUUsICJzeXNj
dGwgb2YgaWZuZXQgbGlzdCBmYWlsZWQ6ICVzIiwKZGlmZiAtdXIgZXhpbS5vcmlnL09TL3Vuc3Vw
cG9ydGVkL29zLmMtSVJJWDYgZXhpbS9PUy91bnN1cHBvcnRlZC9vcy5jLUlSSVg2Ci0tLSBleGlt
Lm9yaWcvT1MvdW5zdXBwb3J0ZWQvb3MuYy1JUklYNgkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAw
MDAwMCArMDMwMAorKysgZXhpbS9PUy91bnN1cHBvcnRlZC9vcy5jLUlSSVg2CTIwMjItMDYtMjMg
MTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDYgKzIsNyBAQAogKiAgICAgRXhpbSAtIGFu
IEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4
aW0gTWFpbnRhaW5lcnMgMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENh
bWJyaWRnZSAyMDAxICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9m
IHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCkBAIC01OSw3ICs2MCw3IEBACiAgIGxvZ193cml0
ZSgwLCBMT0dfUEFOSUNfRElFLCAiaWZsaXN0LXN5c2N0bC1lc3RpbWF0ZSBmYWlsZWQ6ICVzIiwK
ICAgICBzdHJlcnJvcihlcnJubykpOwogCi1idWYgPSBzdG9yZV9nZXQobmVlZGVkLCBGQUxTRSk7
CitidWYgPSBzdG9yZV9nZXQobmVlZGVkLCBHRVRfVU5UQUlOVEVEKTsKIAogaWYgKHN5c2N0bCht
aWIsIDYsIGJ1ZiwgJm5lZWRlZCwgTlVMTCwgMCkgPCAwKQogICBsb2dfd3JpdGUoMCwgTE9HX1BB
TklDX0RJRSwgInN5c2N0bCBvZiBpZm5ldCBsaXN0IGZhaWxlZDogJXMiLApkaWZmIC11ciBleGlt
Lm9yaWcvT1MvdW5zdXBwb3J0ZWQvb3MuYy1JUklYNjMyIGV4aW0vT1MvdW5zdXBwb3J0ZWQvb3Mu
Yy1JUklYNjMyCi0tLSBleGltLm9yaWcvT1MvdW5zdXBwb3J0ZWQvb3MuYy1JUklYNjMyCTIwMjMt
MDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL09TL3Vuc3VwcG9ydGVkL29z
LmMtSVJJWDYzMgkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw2ICsy
LDcgQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAq
CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisv
KiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjIgKi8KIC8qIENvcHlyaWdo
dCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMjAwMSAqLwogLyogU2VlIHRoZSBmaWxlIE5P
VElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIApAQCAtNTks
NyArNjAsNyBAQAogICBsb2dfd3JpdGUoMCwgTE9HX1BBTklDX0RJRSwgImlmbGlzdC1zeXNjdGwt
ZXN0aW1hdGUgZmFpbGVkOiAlcyIsCiAgICAgc3RyZXJyb3IoZXJybm8pKTsKIAotYnVmID0gc3Rv
cmVfZ2V0KG5lZWRlZCwgRkFMU0UpOworYnVmID0gc3RvcmVfZ2V0KG5lZWRlZCwgR0VUX1VOVEFJ
TlRFRCk7CiAKIGlmIChzeXNjdGwobWliLCA2LCBidWYsICZuZWVkZWQsIE5VTEwsIDApIDwgMCkK
ICAgbG9nX3dyaXRlKDAsIExPR19QQU5JQ19ESUUsICJzeXNjdGwgb2YgaWZuZXQgbGlzdCBmYWls
ZWQ6ICVzIiwKZGlmZiAtdXIgZXhpbS5vcmlnL09TL3Vuc3VwcG9ydGVkL29zLmMtSVJJWDY1IGV4
aW0vT1MvdW5zdXBwb3J0ZWQvb3MuYy1JUklYNjUKLS0tIGV4aW0ub3JpZy9PUy91bnN1cHBvcnRl
ZC9vcy5jLUlSSVg2NQkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhp
bS9PUy91bnN1cHBvcnRlZC9vcy5jLUlSSVg2NQkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAw
MCArMDMwMApAQCAtMiw2ICsyLDcgQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRy
YW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIw
MjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMjAwMSAqLwog
LyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1
dGlvbi4gKi8KIApAQCAtNTksNyArNjAsNyBAQAogICBsb2dfd3JpdGUoMCwgTE9HX1BBTklDX0RJ
RSwgImlmbGlzdC1zeXNjdGwtZXN0aW1hdGUgZmFpbGVkOiAlcyIsCiAgICAgc3RyZXJyb3IoZXJy
bm8pKTsKIAotYnVmID0gc3RvcmVfZ2V0KG5lZWRlZCwgRkFMU0UpOworYnVmID0gc3RvcmVfZ2V0
KG5lZWRlZCwgR0VUX1VOVEFJTlRFRCk7CiAKIGlmIChzeXNjdGwobWliLCA2LCBidWYsICZuZWVk
ZWQsIE5VTEwsIDApIDwgMCkKICAgbG9nX3dyaXRlKDAsIExPR19QQU5JQ19ESUUsICJzeXNjdGwg
b2YgaWZuZXQgbGlzdCBmYWlsZWQ6ICVzIiwK0KLQvtC70YzQutC+INCyIGV4aW0vT1MvdW5zdXBw
b3J0ZWQ6IG9zLmgtRGFyd2luCmRpZmYgLXVyIGV4aW0ub3JpZy9PUy91bnN1cHBvcnRlZC9vcy5o
LU5ldEJTRCBleGltL09TL3Vuc3VwcG9ydGVkL29zLmgtTmV0QlNECi0tLSBleGltLm9yaWcvT1Mv
dW5zdXBwb3J0ZWQvb3MuaC1OZXRCU0QJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAz
MDAKKysrIGV4aW0vT1MvdW5zdXBwb3J0ZWQvb3MuaC1OZXRCU0QJMjAyMi0wNi0yMyAxNjo0MTox
MC4wMDAwMDAwMDAgKzAzMDAKQEAgLTEsNCArMSw1IEBACiAvKiBFeGltOiBPUy1zcGVjaWZpYyBD
IGhlYWRlciBmaWxlIGZvciBOZXRCU0QgKi8KKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFp
bnRhaW5lcnMgMjAyMSAqLwogCiAjZGVmaW5lIEhBVkVfQlNEX0dFVExPQURBVkcKICNkZWZpbmUg
SEFWRV9HRVRJRkFERFJTCkBAIC0yNSw0ICsyNiw2IEBACiAvKiBkZWZhdWx0IGlzIG5vbi1jb25z
dCAqLwogI2RlZmluZSBJQ09OVl9BUkcyX1RZUEUgY29uc3QgY2hhciAqKgogCisjZGVmaW5lIEVY
SU1fSEFWRV9LRVZFTlQKKwogLyogRW5kICovCmRpZmYgLXVyIGV4aW0ub3JpZy9zY3JpcHRzL0Nv
bmZpZ3VyZS1NYWtlZmlsZSBleGltL3NjcmlwdHMvQ29uZmlndXJlLU1ha2VmaWxlCi0tLSBleGlt
Lm9yaWcvc2NyaXB0cy9Db25maWd1cmUtTWFrZWZpbGUJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc2NyaXB0cy9Db25maWd1cmUtTWFrZWZpbGUJMjAyMi0wNi0y
MyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTcsNyArNyw3IEBACiAjIGp1c3QgZ290IHRv
byBob3JyZW5kb3VzIHRvIGdldCBpdCByaWdodCBpbiAibWFrZSIsIGJlY2F1c2Ugb2YgdGhlIG9w
dGlvbmFsbHkKICMgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBmaWxlcy4KICMKLSMgQ29weXJpZ2h0
IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAxOTk1IC0gMjAyMAorIyBDb3B5cmlnaHQgKGMpIFRo
ZSBFeGltIE1haW50YWluZXJzIDE5OTUgLSAyMDIxCiAKIAogIyBGaXJzdCBvZmYsIGdldCB0aGUg
T1MgdHlwZSwgYW5kIGNoZWNrIHRoYXQgdGhlcmUgaXMgYSBtYWtlIGZpbGUgZm9yIGl0LgpAQCAt
MTUwLDcgKzE1MCw3IEBACiBlZ3JlcCAiXlskc3RdKihBVVRIfExPT0tVUClfW0EtWjAtOV9dKlsk
c3RdKj1bJHN0XSoiICRtZnQgfCBcCiAgIHNlZCAicy9bJHN0XSo9Lz0nLyIgfCBcCiAgIHNlZCAi
cy9cJC8nLyIgPiAkbWZ0dAotZWdyZXAgIl5bJHN0XSooKFVTRV8oT1BFTlNTTHxHTlVUTFMpX1BD
KXxTVVBQT1JUX1RMU3xVU0VfR05VVExTfFBDUkVfQ09ORklHfEFWT0lEX0dOVVRMU19QS0NTMTEp
WyRzdF0qPVskc3RdKiIgJG1mdCB8IFwKK2VncmVwICJeWyRzdF0qKChVU0VfKE9QRU5TU0x8R05V
VExTKV9QQyl8U1VQUE9SVF9UTFN8VVNFX0dOVVRMU3xQQ1JFMj9fQ09ORklHfEFWT0lEX0dOVVRM
U19QS0NTMTEpWyRzdF0qPVskc3RdKiIgJG1mdCB8IFwKICAgc2VkICJzL1skc3RdKj0vPScvIiB8
IFwKICAgc2VkICJzL1wkLycvIiA+PiAkbWZ0dAogaWYgdGVzdCAtcyAkbWZ0dApAQCAtMjMzLDEy
ICsyMzMsMzIgQEAKICAgICAgIFBDUkVfQ09ORklHKQogICAgICAgICBjYXNlICRQQ1JFX0NPTkZJ
RyBpbgogICAgICAgICAgIHllc3xZRVN8eXxZKQotICAgICAgICAgICAgY2ZsYWdzPWBwY3JlLWNv
bmZpZyAtLWNmbGFnc2AKKwkgICAgIGVjaG8gPiYyICJwY3JlIGlzIG5vIGxvbmdlciBzdXBwb3J0
ZWQ7IG1pZ3JhdGUgdG8gcGNyZTIiCisJICAgICBleGl0IDEKKworIyAgICAgICAgICAgIGNmbGFn
cz1gcGNyZS1jb25maWcgLS1jZmxhZ3NgCisjICAgICAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0
aGVuCisjICAgICAgICAgICAgICBlY2hvID4mMiAiKioqIE1pc3NpbmcgcGNyZS1jb25maWcgZm9y
IHJlZ3VsYXIgZXhwcmVzc2lvbiBzdXBwb3J0IgorIyAgICAgICAgICAgICAgZXhpdCAxCisjICAg
ICAgICAgICAgZmkKKyMgICAgICAgICAgICBsaWJzPWBwY3JlLWNvbmZpZyAtLWxpYnNgCisjICAg
ICAgICAgICAgaWYgWyAiLiRjZmxhZ3MiICE9ICIuIiBdOyB0aGVuCisjICAgICAgICAgICAgICBl
Y2hvICJJTkNMVURFICs9ICRjZmxhZ3MiCisjICAgICAgICAgICAgZmkKKyMgICAgICAgICAgICBl
Y2hvICJQQ1JFX0xJQlM9JGxpYnMiCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAg
ICAgIDs7CisKKyAgICAgIFBDUkUyX0NPTkZJRykKKyAgICAgICAgY2FzZSAkUENSRTJfQ09ORklH
IGluCisgICAgICAgICAgeWVzfFlFU3x5fFkpCisgICAgICAgICAgICBjZmxhZ3M9YHBjcmUyLWNv
bmZpZyAtLWNmbGFnc2AKICAgICAgICAgICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgotICAgICAg
ICAgICAgICBlY2hvID4mMiAiKioqIE1pc3NpbmcgcGNyZS1jb25maWcgZm9yIHJlZ3VsYXIgZXhw
cmVzc2lvbiBzdXBwb3J0IgorICAgICAgICAgICAgICBlY2hvID4mMiAiKioqIE1pc3NpbmcgcGNy
ZTItY29uZmlnIGZvciByZWd1bGFyIGV4cHJlc3Npb24gc3VwcG9ydCIKICAgICAgICAgICAgICAg
ZXhpdCAxCiAgICAgICAgICAgICBmaQotICAgICAgICAgICAgbGlicz1gcGNyZS1jb25maWcgLS1s
aWJzYAorICAgICAgICAgICAgbGlicz1gcGNyZTItY29uZmlnIC0tbGliczhgCiAgICAgICAgICAg
ICBpZiBbICIuJGNmbGFncyIgIT0gIi4iIF07IHRoZW4KICAgICAgICAgICAgICAgZWNobyAiSU5D
TFVERSArPSAkY2ZsYWdzIgogICAgICAgICAgICAgZmkKZGlmZiAtdXIgZXhpbS5vcmlnL3Njcmlw
dHMvbG9va3Vwcy1NYWtlZmlsZSBleGltL3NjcmlwdHMvbG9va3Vwcy1NYWtlZmlsZQotLS0gZXhp
bS5vcmlnL3NjcmlwdHMvbG9va3Vwcy1NYWtlZmlsZQkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAw
MDAwMCArMDMwMAorKysgZXhpbS9zY3JpcHRzL2xvb2t1cHMtTWFrZWZpbGUJMjAyMi0wNi0yMyAx
Njo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTEsNSArMSw3IEBACiAjISAvYmluL3NoCiAKKyMg
Q29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAxOTk1IC0gMjAyMQorCiAjIFdlIHR1
cm4gdGhlIGNvbmZpZ3VyZS1idWlsdCBidWlsZC0kZm9vL2xvb2t1cHMvTWFrZWZpbGUucHJlZHlu
YW1pYyBpbnRvIE1ha2VmaWxlCiAKICMgV2UgYWx3YXlzIHJlLWV4ZWMgb3Vyc2VsdmVzIGF0IGxl
YXN0IG9uY2UsIGJlY2F1c2UgaXQncyB0aGUgY2xlYW5lc3QgYW5kCkBAIC0xNjAsNyArMTYyLDcg
QEAKIHNlZCAtbiAiMSwvJHRhZ19tYXJrZXIvcCIgPCAiJGlucHV0IgogCiBmb3IgbmFtZV9tb2Qg
aW4gXAotICAgIENEQiBEQk06ZGJtZGIgRE5TREIgRFNFQVJDSCBJQkFTRSBKU09OIExTRUFSQ0gg
TVlTUUwgTklTIE5JU1BMVVMgT1JBQ0xFIFwKKyAgICBDREIgREJNOmRibWRiIEROU0RCIERTRUFS
Q0ggSUJBU0UgSlNPTiBMTURCIExTRUFSQ0ggTVlTUUwgTklTIE5JU1BMVVMgT1JBQ0xFIFwKICAg
ICBQQVNTV0QgUEdTUUwgUkVESVMgU1FMSVRFIFRFU1REQiBXSE9TT04KIGRvCiAgIGVtaXRfbW9k
dWxlX3J1bGUgJG5hbWVfbW9kCkBAIC0xNzcsMTEgKzE3OSw2IEBACiAKIE9CSj0iJHtPQkp9IHNw
Zi5vIgogCi1pZiB3YW50X2V4cGVyaW1lbnRhbCBMTURCCi10aGVuCi0gIE9CSj0iJHtPQkp9IGxt
ZGIubyIKLWZpCi0KICMgcmVhZHNvY2sgaXMgYWx3YXlzIHdhbnRlZCBhcyBpdCBpbXBsZW1lbnRz
IHRoZSAke3JlYWRzb2NrIH0gZXhwYW5zaW9uCiBPQko9IiR7T0JKfSByZWFkc29jay5vIgogCmRp
ZmYgLXVyIGV4aW0ub3JpZy9zY3JpcHRzL01ha2VMaW5rcyBleGltL3NjcmlwdHMvTWFrZUxpbmtz
Ci0tLSBleGltLm9yaWcvc2NyaXB0cy9NYWtlTGlua3MJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc2NyaXB0cy9NYWtlTGlua3MJMjAyMi0wNi0yMyAxNjo0MTox
MC4wMDAwMDAwMDAgKzAzMDAKQEAgLTMsNyArMyw3IEBACiAjIFNjcmlwdCB0byBidWlsZCBsaW5r
cyBmb3IgYWxsIHRoZSBleGltIHNvdXJjZSBmaWxlcyBmcm9tIHRoZSBzeXN0ZW0tCiAjIHNwZWNp
ZmljIGJ1aWxkIGRpcmVjdG9yeS4gSXQgc2hvdWxkIGJlIHJ1biBmcm9tIHdpdGhpbiB0aGF0IGRp
cmVjdG9yeS4KICMKLSMgQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAxOTk1IC0g
MjAyMAorIyBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDE5OTUgLSAyMDIyCiAK
IHRlc3QgISAtZCAuLi9zcmMgJiYgXAogICBlY2hvICIqKiogJDAgc2hvdWxkIGJlIHJ1biBpbiBh
IHN5c3RlbS1zcGVjaWZpYyBzdWJkaXJlY3RvcnkuIiAmJiBcCkBAIC05NSwxMiArOTUsMTIgQEAK
ICMgYnV0IGxvY2FsX3NjYW4uYyBkb2VzIG5vdCwgYmVjYXVzZSBpdHMgbG9jYXRpb24gaXMgdGFr
ZW4gZnJvbSB0aGUgYnVpbGQtdGltZQogIyBjb25maWd1cmF0aW9uLiBMaWtld2lzZSBmb3IgdGhl
IG9zLmMgZmlsZSwgd2hpY2ggZ2V0cyBidWlsZCBkeW5hbWljYWxseS4KIAotZm9yIGYgaW4gYmxv
Yi5oIGRiZnVuY3Rpb25zLmggZGJzdHVmZi5oIGV4aW0uaCBmdW5jdGlvbnMuaCBnbG9iYWxzLmgg
XAotICBoYXNoLmggbG9jYWxfc2Nhbi5oIFwKK2ZvciBmIGluIGJsb2IuaCBkYmZ1bmN0aW9ucy5o
IGV4aW0uaCBmdW5jdGlvbnMuaCBnbG9iYWxzLmggXAorICBoYXNoLmggaGludHNkYi5oIGhpbnRz
ZGJfc3RydWN0cy5oIGxvY2FsX3NjYW4uaCBcCiAgIG1hY3Jvcy5oIG15dHlwZXMuaCBvc2Z1bmN0
aW9ucy5oIHN0b3JlLmggc3RydWN0cy5oIGxvb2t1cGFwaS5oIHNoYV92ZXIuaCBcCiAgIFwKICAg
YWNsLmMgYnVpbGRjb25maWcuYyBiYXNlNjQuYyBjaGlsZC5jIGNyeXB0MTYuYyBkYWVtb24uYyBk
YmZuLmMgZGVidWcuYyBcCi0gIGRlbGl2ZXIuYyBkaXJlY3RvcnkuYyBkbnMuYyBkcnRhYmxlcy5j
IGR1bW1pZXMuYyBlbnEuYyBleGltLmMgXAorICBkZWxpdmVyLmMgZGlyZWN0b3J5LmMgZG5zLmMg
ZG5zYmwuYyBkcnRhYmxlcy5jIGR1bW1pZXMuYyBlbnEuYyBleGltLmMgXAogICBleGltX2RibWJ1
aWxkLmMgZXhpbV9kYnV0aWwuYyBleGltX2xvY2suYyBleHBhbmQuYyBmaWx0ZXIuYyBmaWx0ZXJ0
ZXN0LmMgXAogICBnbG9iYWxzLmMgaGFzaC5jIGhlYWRlci5jIGhvc3QuYyBpcC5jIGxvZy5jIGxz
cy5jIG1hdGNoLmMgbWQ1LmMgbW9hbi5jIFwKICAgcGFyc2UuYyBwZXJsLmMgcHJpdi5jIHF1ZXVl
LmMgcmRhLmMgcmVhZGNvbmYuYyByZWNlaXZlLmMgcmV0cnkuYyByZXdyaXRlLmMgXApkaWZmIC11
ciBleGltLm9yaWcvc2NyaXB0cy9yZXZlcnNpb24gZXhpbS9zY3JpcHRzL3JldmVyc2lvbgotLS0g
ZXhpbS5vcmlnL3NjcmlwdHMvcmV2ZXJzaW9uCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAw
ICswMzAwCisrKyBleGltL3NjcmlwdHMvcmV2ZXJzaW9uCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAw
MDAwMDAwICswMzAwCkBAIC0xLDUgKzEsNSBAQAogIyEvYmluL3NoCi0jIENvcHlyaWdodCAoYykg
VGhlIEV4aW0gTWFpbnRhaW5lcnMgMTk5NSAtIDIwMTgKKyMgQ29weXJpZ2h0IChjKSBUaGUgRXhp
bSBNYWludGFpbmVycyAxOTk1IC0gMjAyMQogCiBzZXQgLWUKIExDX0FMTD1DCkBAIC0yOSw3ICsy
OSwxMSBAQAogIyBSZWFkIHZlcnNpb24gaW5mb3JtYXRpb24gdGhhdCB3YXMgZ2VuZXJhdGVkIGJ5
IGEgcHJldmlvdXMgcnVuIG9mCiAjIHRoaXMgc2NyaXB0LCBvciBkdXJpbmcgdGhlIHJlbGVhc2Ug
cHJvY2Vzcy4KIAotaWYgICBbIC1mIC4vdmVyc2lvbi5zaCBdOyB0aGVuCisjIE92ZXJyaWRlLCB1
c2VkIGZvciBhdXRvbWF0ZWQgdGVzdGluZyB3L28gYWNjZXNzIHRvIHRoZQorIyAuZ2l0IGRpcmVj
dG9yeSAody5nLiBpbnNpZGUgYSBnaXQgd29ya3RyZWUpCitpZiAgIFsgLW4gIiRFWElNX1JFTEVB
U0VfVkVSU0lPTiIgXTsgdGhlbgorICAgIDoKK2VsaWYgICBbIC1mIC4vdmVyc2lvbi5zaCBdOyB0
aGVuCiAgICAgLiAgICAuL3ZlcnNpb24uc2gKIGVsaWYgWyAtZiAuLi9zcmMvdmVyc2lvbi5zaCBd
OyB0aGVuCiAgICAgLiAgICAuLi9zcmMvdmVyc2lvbi5zaApAQCAtNTEsOSArNTUsMTIgQEAKICAg
ICAgICAgICAgIEVYSU1fVkFSSUFOVF9WRVJTSU9OPSIkMyIKICAgICAgICAgICAgIHJtIC1mIHZl
cnNpb24uaAogICAgIGZpCi1lbHNlCitmaQorCitpZiBbIC16ICIkRVhJTV9SRUxFQVNFX1ZFUlNJ
T04iIF07IHRoZW4KICAgICBlY2hvICJDYW5ub3QgZGV0ZXJtaW5lIHRoZSByZWxlYXNlIG51bWJl
ciIgPiYyCi0gICAgZXhpdAorICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBvdmVycmlkZSBpdCB3
aXRoIEVYSU1fUkVMRUFTRV9WRVJTSU9OIiA+JjIKKyAgICBleGl0IDEKIGZpCiAKICMgSWYgeW91
IGFyZSBtYWludGFpbmluZyBhIHBhdGNoZWQgdmVyc2lvbiBvZiBFeGltLCB5b3UgY2FuIGVpdGhl
cgpkaWZmIC11ciBleGltLm9yaWcvc3JjL2FjbC5jIGV4aW0vc3JjL2FjbC5jCi0tLSBleGltLm9y
aWcvc3JjL2FjbC5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGlt
L3NyYy9hY2wuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiwxOSAr
MiwyNiBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAg
ICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAK
Ky8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8q
IENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8q
IENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBm
aWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAog
LyogQ29kZSBmb3IgaGFuZGxpbmcgQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpICovCiAKICNp
bmNsdWRlICJleGltLmgiCiAKKyNpZm5kZWYgTUFDUk9fUFJFREVGCiAKIC8qIERlZmF1bHQgY2Fs
bG91dCB0aW1lb3V0ICovCiAKICNkZWZpbmUgQ0FMTE9VVF9USU1FT1VUX0RFRkFVTFQgMzAKIAor
LyogRGVmYXVsdCBxdW90YSBjYWNoZSBUVExzICovCisKKyNkZWZpbmUgUVVPVEFfUE9TX0RFRkFV
TFQgKDUqNjApCisjZGVmaW5lIFFVT1RBX05FR19ERUZBVUxUICg2MCo2MCkKKworCiAvKiBBQ0wg
dmVyYiBjb2RlcyAtIGtlZXAgaW4gc3RlcCB3aXRoIHRoZSB0YWJsZSBvZiB2ZXJicyB0aGF0IGZv
bGxvd3MgKi8KIAogZW51bSB7IEFDTF9BQ0NFUFQsIEFDTF9ERUZFUiwgQUNMX0RFTlksIEFDTF9E
SVNDQVJELCBBQ0xfRFJPUCwgQUNMX1JFUVVJUkUsCkBAIC00Nyw2ICs1NCw4IEBACiAgIFtBQ0xf
V0FSTl0gPQkJQklUKE9LKQogICB9OwogCisjZW5kaWYKKwogLyogQUNMIGNvbmRpdGlvbiBhbmQg
bW9kaWZpZXIgY29kZXMgLSBrZWVwIGluIHN0ZXAgd2l0aCB0aGUgdGFibGUgdGhhdAogZm9sbG93
cy4KIGRvd24uICovCkBAIC05Nyw2ICsxMDYsNyBAQAogICAgICAgIEFDTENfUkVHRVgsCiAjZW5k
aWYKICAgICAgICBBQ0xDX1JFTU9WRV9IRUFERVIsCisgICAgICAgQUNMQ19TRUVOLAogICAgICAg
IEFDTENfU0VOREVSX0RPTUFJTlMsCiAgICAgICAgQUNMQ19TRU5ERVJTLAogICAgICAgIEFDTENf
U0VULApAQCAtMjgyLDYgKzI5Miw3IEBACiAJCQkJICAgIEFDTF9CSVRfTUlNRSB8IEFDTF9CSVRf
Tk9UU01UUCB8CiAJCQkJICAgIEFDTF9CSVRfTk9UU01UUF9TVEFSVCksCiAgIH0sCisgIFtBQ0xD
X1NFRU5dID0JCQl7IFVTInNlZW4iLAkJVFJVRSwgRkFMU0UsCTAgfSwKICAgW0FDTENfU0VOREVS
X0RPTUFJTlNdID0JeyBVUyJzZW5kZXJfZG9tYWlucyIsCUZBTFNFLCBGQUxTRSwKIAkJCQkgIEFD
TF9CSVRfQVVUSCB8IEFDTF9CSVRfQ09OTkVDVCB8CiAJCQkJICAgIEFDTF9CSVRfSEVMTyB8CkBA
IC0zMzIsNiArMzQzLDI0IEBACiB9OwogCiAKKyNpZmRlZiBNQUNST19QUkVERUYKKyMgaW5jbHVk
ZSAibWFjcm9fcHJlZGVmLmgiCit2b2lkCitmZWF0dXJlc19hY2wodm9pZCkKK3sKK2ZvciAoY29u
ZGl0aW9uX2RlZiAqIGMgPSBjb25kaXRpb25zOyBjIDwgY29uZGl0aW9ucyArIG5lbGVtKGNvbmRp
dGlvbnMpOyBjKyspCisgIHsKKyAgdXNjaGFyIGJ1Zls2NF0sICogcCwgKiBzOworICBpbnQgbiA9
IHNwcmludGYoQ1MgYnVmLCAiX0FDTF8lc18iLCBjLT5pc19tb2RpZmllciA/ICJNT0QiIDogIkNP
TkQiKTsKKyAgZm9yIChwID0gYnVmICsgbiwgcyA9IGMtPm5hbWU7ICpzOyBzKyspICpwKysgPSB0
b3VwcGVyKCpzKTsKKyAgKnAgPSAnXDAnOworICBidWlsdGluX21hY3JvX2NyZWF0ZShidWYpOwor
ICB9Cit9CisjZW5kaWYKKworCisjaWZuZGVmIE1BQ1JPX1BSRURFRgogCiAvKiBSZXR1cm4gdmFs
dWVzIGZyb20gZGVjb2RlX2NvbnRyb2woKTsgdXNlZCBhcyBpbmRleCBzbyBrZWVwIGluIHN0ZXAK
IHdpdGggdGhlIGNvbnRyb2xzX2xpc3QgdGFibGUgdGhhdCBmb2xsb3dzISAqLwpAQCAtNjEzLDYg
KzY0Miw4IEBACiBzdGF0aWMgaW50IGFjbF9jaGVja193YXJncyhpbnQsIGFkZHJlc3NfaXRlbSAq
LCBjb25zdCB1c2NoYXIgKiwgdXNjaGFyICoqLAogICAgIHVzY2hhciAqKik7CiAKK3N0YXRpYyBh
Y2xfYmxvY2sgKiBhY2xfY3VycmVudCA9IE5VTEw7CisKIAogLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICBGaW5kIGNvbnRyb2wg
aW4gbGlzdCAgICAgICAgICAgICAgICAqCkBAIC03NzcsNyArODA4LDcgQEAKICAgICAgICplcnJv
ciA9IHN0cmluZ19zcHJpbnRmKCJtYWxmb3JtZWQgQUNMIGxpbmUgXCIlc1wiIiwgc2F2ZWxpbmUp
OwogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICB9Ci0gICAgdGhpcyA9IHN0b3JlX2dldChzaXpl
b2YoYWNsX2Jsb2NrKSwgRkFMU0UpOworICAgIHRoaXMgPSBzdG9yZV9nZXQoc2l6ZW9mKGFjbF9i
bG9jayksIEdFVF9VTlRBSU5URUQpOwogICAgICpsYXN0cCA9IHRoaXM7CiAgICAgbGFzdHAgPSAm
KHRoaXMtPm5leHQpOwogICAgIHRoaXMtPm5leHQgPSBOVUxMOwpAQCAtODI0LDcgKzg1NSw3IEBA
CiAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gIGNvbmQgPSBzdG9yZV9nZXQoc2l6ZW9mKGFj
bF9jb25kaXRpb25fYmxvY2spLCBGQUxTRSk7CisgIGNvbmQgPSBzdG9yZV9nZXQoc2l6ZW9mKGFj
bF9jb25kaXRpb25fYmxvY2spLCBHRVRfVU5UQUlOVEVEKTsKICAgY29uZC0+bmV4dCA9IE5VTEw7
CiAgIGNvbmQtPnR5cGUgPSBjOwogICBjb25kLT51Lm5lZ2F0ZWQgPSBuZWdhdGVkOwpAQCAtMTAy
Myw3ICsxMDU0LDcgQEAKICAgICB7CiAgICAgLyogVGhlIGhlYWRlcl9saW5lIHN0cnVjdCBpdHNl
bGYgaXMgbm90IHRhaW50ZWQsIHRob3VnaCBpdCBwb2ludHMgdG8KICAgICBwb3NzaWJseSB0YWlu
dGVkIGRhdGEuICovCi0gICAgaGVhZGVyX2xpbmUgKiBoID0gc3RvcmVfZ2V0KHNpemVvZihoZWFk
ZXJfbGluZSksIEZBTFNFKTsKKyAgICBoZWFkZXJfbGluZSAqIGggPSBzdG9yZV9nZXQoc2l6ZW9m
KGhlYWRlcl9saW5lKSwgR0VUX1VOVEFJTlRFRCk7CiAgICAgaC0+dGV4dCA9IGhkcjsKICAgICBo
LT5uZXh0ID0gTlVMTDsKICAgICBoLT50eXBlID0gbmV3dHlwZTsKQEAgLTExODAsMTEgKzEyMTEs
OSBAQAogewogaW50IHJjOwogCi11c2VyX21zZ3B0ciA9IHVzZXJfbXNncHRyOyAgLyogc3RvcCBj
b21waWxlciB3YXJuaW5nICovCi0KIC8qIFByZXZpb3VzIHN1Y2Nlc3MgKi8KIAotaWYgKHNlbmRl
cl9ob3N0X25hbWUgIT0gTlVMTCkgcmV0dXJuIE9LOworaWYgKHNlbmRlcl9ob3N0X25hbWUpIHJl
dHVybiBPSzsKIAogLyogUHJldmlvdXMgZmFpbHVyZSAqLwogCkBAIC0xMzA5LDExICsxMzM4LDEy
IEBACiB0cmVlX25vZGUgKnQ7CiBjb25zdCB1c2NoYXIgKmZvdW5kOwogaW50IHByaW9yaXR5LCB3
ZWlnaHQsIHBvcnQ7Ci1kbnNfYW5zd2VyICogZG5zYSA9IHN0b3JlX2dldF9kbnNfYW5zd2VyKCk7
CitkbnNfYW5zd2VyICogZG5zYTsKIGRuc19zY2FuIGRuc3M7CiBkbnNfcmVjb3JkICpycjsKLWlu
dCByYywgdHlwZTsKLXVzY2hhciB0YXJnZXRbMjU2XTsKK2ludCByYywgdHlwZSwgeWllbGQ7Cisj
ZGVmaW5lIFRBUkdFVF9TSVpFIDI1NgordXNjaGFyICogdGFyZ2V0ID0gc3RvcmVfZ2V0KFRBUkdF
VF9TSVpFLCBHRVRfVEFJTlRFRCk7CiAKIC8qIFdvcmsgb3V0IHRoZSBkb21haW4gd2UgYXJlIHVz
aW5nIGZvciB0aGUgQ1NBIGxvb2t1cC4gVGhlIGRlZmF1bHQgaXMgdGhlCiBjbGllbnQncyBIRUxP
IGRvbWFpbi4gSWYgdGhlIGNsaWVudCBoYXMgbm90IHNhaWQgSEVMTywgdXNlIGl0cyBJUCBhZGRy
ZXNzCkBAIC0xMzIxLDggKzEzNTEsOCBAQAogCiB3aGlsZSAoaXNzcGFjZSgqZG9tYWluKSAmJiAq
ZG9tYWluICE9ICdcMCcpICsrZG9tYWluOwogaWYgKCpkb21haW4gPT0gJ1wwJykgZG9tYWluID0g
c2VuZGVyX2hlbG9fbmFtZTsKLWlmIChkb21haW4gPT0gTlVMTCkgZG9tYWluID0gc2VuZGVyX2hv
c3RfYWRkcmVzczsKLWlmIChzZW5kZXJfaG9zdF9hZGRyZXNzID09IE5VTEwpIHJldHVybiBDU0Ff
VU5LTk9XTjsKK2lmICghZG9tYWluKSBkb21haW4gPSBzZW5kZXJfaG9zdF9hZGRyZXNzOworaWYg
KCFzZW5kZXJfaG9zdF9hZGRyZXNzKSByZXR1cm4gQ1NBX1VOS05PV047CiAKIC8qIElmIHdlIGhh
dmUgYW4gYWRkcmVzcyBsaXRlcmFsLCBzdHJpcCBvZmYgdGhlIGZyYW1pbmcgcmVhZHkgZm9yIHR1
cm5pbmcgaXQKIGludG8gYSBkb21haW4uIFRoZSBmcmFtaW5nIGNvbnNpc3RzIG9mIG1hdGNoZWQg
c3F1YXJlIGJyYWNrZXRzIHBvc3NpYmx5CkBAIC0xMzUyLDMzICsxMzgyLDM2IEBACiBmb3IgdGhp
cyBkb21haW4uIFRoZSBuYW1lIGlzIGZpbGxlZCBpbiBub3csIGFuZCB0aGUgdmFsdWUgaXMgZmls
bGVkIGluIHdoZW4KIHdlIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24uICovCiAKLXQgPSB0cmVl
X3NlYXJjaChjc2FfY2FjaGUsIGRvbWFpbik7Ci1pZiAodCAhPSBOVUxMKSByZXR1cm4gdC0+ZGF0
YS52YWw7CitpZiAoKHQgPSB0cmVlX3NlYXJjaChjc2FfY2FjaGUsIGRvbWFpbikpKQorICByZXR1
cm4gdC0+ZGF0YS52YWw7CiAKLXQgPSBzdG9yZV9nZXRfcGVybShzaXplb2YodHJlZV9ub2RlKSAr
IFVzdHJsZW4oZG9tYWluKSwgaXNfdGFpbnRlZChkb21haW4pKTsKK3QgPSBzdG9yZV9nZXRfcGVy
bShzaXplb2YodHJlZV9ub2RlKSArIFVzdHJsZW4oZG9tYWluKSwgZG9tYWluKTsKIFVzdHJjcHko
dC0+bmFtZSwgZG9tYWluKTsKICh2b2lkKXRyZWVfaW5zZXJ0bm9kZSgmY3NhX2NhY2hlLCB0KTsK
IAogLyogTm93IHdlIGFyZSByZWFkeSB0byBkbyB0aGUgYWN0dWFsIEROUyBsb29rdXAocykuICov
CiAKIGZvdW5kID0gZG9tYWluOworZG5zYSA9IHN0b3JlX2dldF9kbnNfYW5zd2VyKCk7CiBzd2l0
Y2ggKGRuc19zcGVjaWFsX2xvb2t1cChkbnNhLCBkb21haW4sIFRfQ1NBLCAmZm91bmQpKQogICB7
CiAgIC8qIElmIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQgKG1vc3QgY29tbW9ubHkgRE5TX0FHQUlO
KSwgZGVmZXIuICovCiAKICAgZGVmYXVsdDoKLSAgcmV0dXJuIHQtPmRhdGEudmFsID0gQ1NBX0RF
RkVSX1NSVjsKKyAgICB5aWVsZCA9IENTQV9ERUZFUl9TUlY7CisgICAgZ290byBvdXQ7CiAKICAg
LyogSWYgd2UgZm91bmQgbm90aGluZywgdGhlIGNsaWVudCdzIGF1dGhvcml6YXRpb24gaXMgdW5r
bm93bi4gKi8KIAogICBjYXNlIEROU19OT01BVENIOgogICBjYXNlIEROU19OT0RBVEE6Ci0gIHJl
dHVybiB0LT5kYXRhLnZhbCA9IENTQV9VTktOT1dOOworICAgIHlpZWxkID0gQ1NBX1VOS05PV047
CisgICAgZ290byBvdXQ7CiAKICAgLyogV2UgZ290IHNvbWV0aGluZyEgR28gb24gdG8gbG9vayBh
dCB0aGUgcmVwbHkgaW4gbW9yZSBkZXRhaWwuICovCiAKICAgY2FzZSBETlNfU1VDQ0VFRDoKLSAg
YnJlYWs7CisgICAgYnJlYWs7CiAgIH0KIAogLyogU2NhbiB0aGUgcmVwbHkgZm9yIHdlbGwtZm9y
bWVkIENTQSBTUlYgcmVjb3Jkcy4gKi8KQEAgLTE0MDksNyArMTQ0MiwxMCBAQAogICBTUlYgcmVj
b3JkcyBvZiB0aGVpciBvd24uICovCiAKICAgaWYgKFVzdHJjbXAoZm91bmQsIGRvbWFpbikgIT0g
MCkKLSAgICByZXR1cm4gdC0+ZGF0YS52YWwgPSBwb3J0ICYgMSA/IENTQV9GQUlMX0VYUExJQ0lU
IDogQ1NBX1VOS05PV047CisgICAgeworICAgIHlpZWxkID0gcG9ydCAmIDEgPyBDU0FfRkFJTF9F
WFBMSUNJVCA6IENTQV9VTktOT1dOOworICAgIGdvdG8gb3V0OworICAgIH0KIAogICAvKiBUaGlz
IENTQSBTUlYgcmVjb3JkIHJlZmVycyBkaXJlY3RseSB0byBvdXIgZG9tYWluLCBzbyB3ZSBjaGVj
ayB0aGUgdmFsdWUKICAgaW4gdGhlIHdlaWdodCBmaWVsZCB0byB3b3JrIG91dCB0aGUgZG9tYWlu
J3MgYXV0aG9yaXphdGlvbi4gMCBhbmQgMSBhcmUKQEAgLTE0MTcsNyArMTQ1MywxMSBAQAogICBh
ZGRyZXNzIGluIG9yZGVyIHRvIGF1dGhlbnRpY2F0ZSBpdCwgc28gd2UgdHJlYXQgaXQgYXMgdW5r
bm93bjsgdmFsdWVzCiAgIGdyZWF0ZXIgdGhhbiAzIGFyZSB1bmRlZmluZWQuICovCiAKLSAgaWYg
KHdlaWdodCA8IDIpIHJldHVybiB0LT5kYXRhLnZhbCA9IENTQV9GQUlMX0RPTUFJTjsKKyAgaWYg
KHdlaWdodCA8IDIpCisgICAgeworICAgIHlpZWxkID0gQ1NBX0ZBSUxfRE9NQUlOOworICAgIGdv
dG8gb3V0OworICAgIH0KIAogICBpZiAod2VpZ2h0ID4gMikgY29udGludWU7CiAKQEAgLTE0MjYs
NyArMTQ2Niw3IEBACiAgIHRhcmdldCBob3N0bmFtZSB0aGVuIGJyZWFrIHRvIHNjYW4gdGhlIGFk
ZGl0aW9uYWwgZGF0YSBmb3IgaXRzIGFkZHJlc3Nlcy4gKi8KIAogICAodm9pZClkbl9leHBhbmQo
ZG5zYS0+YW5zd2VyLCBkbnNhLT5hbnN3ZXIgKyBkbnNhLT5hbnN3ZXJsZW4sIHAsCi0gICAgKERO
X0VYUEFORF9BUkc0X1RZUEUpdGFyZ2V0LCBzaXplb2YodGFyZ2V0KSk7CisgICAgKEROX0VYUEFO
RF9BUkc0X1RZUEUpdGFyZ2V0LCBUQVJHRVRfU0laRSk7CiAKICAgREVCVUcoRF9hY2wpIGRlYnVn
X3ByaW50Zl9pbmRlbnQoIkNTQSB0YXJnZXQgaXMgJXNcbiIsIHRhcmdldCk7CiAKQEAgLTE0MzUs
NyArMTQ3NSwxMSBAQAogCiAvKiBJZiB3ZSBkaWRuJ3QgYnJlYWsgdGhlIGxvb3AgdGhlbiBubyBh
cHByb3ByaWF0ZSByZWNvcmRzIHdlcmUgZm91bmQuICovCiAKLWlmICghcnIpIHJldHVybiB0LT5k
YXRhLnZhbCA9IENTQV9VTktOT1dOOworaWYgKCFycikKKyAgeworICB5aWVsZCA9IENTQV9VTktO
T1dOOworICBnb3RvIG91dDsKKyAgfQogCiAvKiBEbyBub3QgY2hlY2sgYWRkcmVzc2VzIGlmIHRo
ZSB0YXJnZXQgaXMgIi4iLCBpbiBhY2NvcmRhbmNlIHdpdGggUkZDIDI3ODIuCiBBIHRhcmdldCBv
ZiAiLiIgaW5kaWNhdGVzIHRoZXJlIGFyZSBubyB2YWxpZCBhZGRyZXNzZXMsIHNvIHRoZSBjbGll
bnQgY2Fubm90CkBAIC0xNDQzLDcgKzE0ODcsMTEgQEAKIGVxdWl2YWxlbnQgdG8gd2VpZ2h0PTEs
IGJ1dCB3ZSBjaGVjayBmb3IgaXQgaW4gb3JkZXIgdG8ga2VlcCBsb2FkIG9mZiB0aGUKIHJvb3Qg
bmFtZSBzZXJ2ZXJzLikgTm90ZSB0aGF0IGRuX2V4cGFuZCgpIHR1cm5zICIuIiBpbnRvICIiLiAq
LwogCi1pZiAoVXN0cmNtcCh0YXJnZXQsICIiKSA9PSAwKSByZXR1cm4gdC0+ZGF0YS52YWwgPSBD
U0FfRkFJTF9OT0FERFI7CitpZiAoVXN0cmNtcCh0YXJnZXQsICIiKSA9PSAwKQorICB7CisgIHlp
ZWxkID0gQ1NBX0ZBSUxfTk9BRERSOworICBnb3RvIG91dDsKKyAgfQogCiAvKiBTY2FuIHRoZSBh
ZGRpdGlvbmFsIHNlY3Rpb24gb2YgdGhlIENTQSBTUlYgcmVwbHkgZm9yIGFkZHJlc3NlcyBiZWxv
bmdpbmcKIHRvIHRoZSB0YXJnZXQuIElmIHRoZSBuYW1lIHNlcnZlciBkaWRuJ3QgcmV0dXJuIGFu
eSBhZGRpdGlvbmFsIGRhdGEgKGUuZy4KQEAgLTE0NTEsNyArMTQ5OSwxMSBAQAogdG8gb2J0YWlu
IHRoZSB0YXJnZXQgYWRkcmVzc2VzOyBvdGhlcndpc2Ugd2UgaGF2ZSBhIGRlZmluaXRpdmUgcmVz
dWx0LiAqLwogCiByYyA9IGFjbF92ZXJpZnlfY3NhX2FkZHJlc3MoZG5zYSwgJmRuc3MsIFJFU0VU
X0FERElUSU9OQUwsIHRhcmdldCk7Ci1pZiAocmMgIT0gQ1NBX0ZBSUxfTk9BRERSKSByZXR1cm4g
dC0+ZGF0YS52YWwgPSByYzsKK2lmIChyYyAhPSBDU0FfRkFJTF9OT0FERFIpCisgIHsKKyAgeWll
bGQgPSByYzsKKyAgZ290byBvdXQ7CisgIH0KIAogLyogVGhlIEROUyBsb29rdXAgdHlwZSBjb3Jy
ZXNwb25kcyB0byB0aGUgSVAgdmVyc2lvbiB1c2VkIGJ5IHRoZSBjbGllbnQuICovCiAKQEAgLTE0
NjksMTMgKzE1MjEsMTggQEAKICAgLyogSWYgc29tZXRoaW5nIGJhZCBoYXBwZW5lZCAobW9zdCBj
b21tb25seSBETlNfQUdBSU4pLCBkZWZlci4gKi8KIAogICBkZWZhdWx0OgotICAgIHJldHVybiB0
LT5kYXRhLnZhbCA9IENTQV9ERUZFUl9BRERSOworICAgIHlpZWxkID0gQ1NBX0RFRkVSX0FERFI7
CisgICAgYnJlYWs7CiAKICAgLyogSWYgdGhlIHF1ZXJ5IHN1Y2NlZWRlZCwgc2NhbiB0aGUgYWRk
cmVzc2VzIGFuZCByZXR1cm4gdGhlIHJlc3VsdC4gKi8KIAogICBjYXNlIEROU19TVUNDRUVEOgog
ICAgIHJjID0gYWNsX3ZlcmlmeV9jc2FfYWRkcmVzcyhkbnNhLCAmZG5zcywgUkVTRVRfQU5TV0VS
UywgdGFyZ2V0KTsKLSAgICBpZiAocmMgIT0gQ1NBX0ZBSUxfTk9BRERSKSByZXR1cm4gdC0+ZGF0
YS52YWwgPSByYzsKKyAgICBpZiAocmMgIT0gQ1NBX0ZBSUxfTk9BRERSKQorICAgICAgeworICAg
ICAgeWllbGQgPSByYzsKKyAgICAgIGJyZWFrOworICAgICAgfQogICAgIC8qIGVsc2UgZmFsbCB0
aHJvdWdoICovCiAKICAgLyogSWYgdGhlIHRhcmdldCBoYXMgbm8gSVAgYWRkcmVzc2VzLCB0aGUg
Y2xpZW50IGNhbm5vdCBoYXZlIGFuIGF1dGhvcml6ZWQKQEAgLTE0ODQsOCArMTU0MSwxNCBAQAog
CiAgIGNhc2UgRE5TX05PTUFUQ0g6CiAgIGNhc2UgRE5TX05PREFUQToKLSAgICByZXR1cm4gdC0+
ZGF0YS52YWwgPSBDU0FfRkFJTF9OT0FERFI7CisgICAgeWllbGQgPSBDU0FfRkFJTF9OT0FERFI7
CisgICAgYnJlYWs7CiAgIH0KKworb3V0OgorCitzdG9yZV9mcmVlX2Ruc19hbnN3ZXIoZG5zYSk7
CityZXR1cm4gdC0+ZGF0YS52YWwgPSB5aWVsZDsKIH0KIAogCkBAIC0xNTExLDE0ICsxNTc0LDE0
IEBACiAgICAgeyBVUyJjZXJ0aWZpY2F0ZSIsCSAgCVZFUklGWV9DRVJULAkgCSh1bnNpZ25lZCl+
MCwJVFJVRSwgIDAgfSwKICAgICB7IFVTImhlbG8iLAkgIAkJVkVSSUZZX0hFTE8sCSAJKHVuc2ln
bmVkKX4wLAlUUlVFLCAgMCB9LAogICAgIHsgVVMiY3NhIiwJICAJCVZFUklGWV9DU0EsCSAJKHVu
c2lnbmVkKX4wLAlGQUxTRSwgMCB9LAotICAgIHsgVVMiaGVhZGVyX3N5bnRheCIsCVZFUklGWV9I
RFJfU1lOVEFYLAlBQ0xfQklUX0RBVEEgfCBBQ0xfQklUX05PVFNNVFAsIFRSVUUsIDAgfSwKLSAg
ICB7IFVTIm5vdF9ibGluZCIsCSAgCVZFUklGWV9OT1RfQkxJTkQsCUFDTF9CSVRfREFUQSB8IEFD
TF9CSVRfTk9UU01UUCwgRkFMU0UsIDAgfSwKLSAgICB7IFVTImhlYWRlcl9zZW5kZXIiLAlWRVJJ
RllfSERSX1NORFIsCUFDTF9CSVRfREFUQSB8IEFDTF9CSVRfTk9UU01UUCwgRkFMU0UsIDAgfSwK
KyAgICB7IFVTImhlYWRlcl9zeW50YXgiLAlWRVJJRllfSERSX1NZTlRBWCwJQUNMX0JJVFNfSEFW
RURBVEEsIFRSVUUsIDAgfSwKKyAgICB7IFVTIm5vdF9ibGluZCIsCSAgCVZFUklGWV9OT1RfQkxJ
TkQsCUFDTF9CSVRTX0hBVkVEQVRBLCBGQUxTRSwgMCB9LAorICAgIHsgVVMiaGVhZGVyX3NlbmRl
ciIsCVZFUklGWV9IRFJfU05EUiwJQUNMX0JJVFNfSEFWRURBVEEsIEZBTFNFLCAwIH0sCiAgICAg
eyBVUyJzZW5kZXIiLAkgIAlWRVJJRllfU05EUiwJCUFDTF9CSVRfTUFJTCB8IEFDTF9CSVRfUkNQ
VAotCQkJfEFDTF9CSVRfUFJFREFUQSB8IEFDTF9CSVRfREFUQSB8IEFDTF9CSVRfTk9UU01UUCwK
KwkJCXwgQUNMX0JJVF9QUkVEQVRBIHwgQUNMX0JJVF9EQVRBIHwgQUNMX0JJVF9OT1RTTVRQLAog
CQkJCQkJCQkJCUZBTFNFLCA2IH0sCiAgICAgeyBVUyJyZWNpcGllbnQiLAkgIAlWRVJJRllfUkNQ
VCwJIAlBQ0xfQklUX1JDUFQsCUZBTFNFLCAwIH0sCi0gICAgeyBVUyJoZWFkZXJfbmFtZXNfYXNj
aWkiLAlWRVJJRllfSERSX05BTUVTX0FTQ0lJLCBBQ0xfQklUX0RBVEEgfCBBQ0xfQklUX05PVFNN
VFAsIFRSVUUsIDAgfSwKKyAgICB7IFVTImhlYWRlcl9uYW1lc19hc2NpaSIsCVZFUklGWV9IRFJf
TkFNRVNfQVNDSUksIEFDTF9CSVRTX0hBVkVEQVRBLCBUUlVFLCAwIH0sCiAjaWZkZWYgRVhQRVJJ
TUVOVEFMX0FSQwogICAgIHsgVVMiYXJjIiwJCQlWRVJJRllfQVJDLAkgCUFDTF9CSVRfREFUQSwJ
RkFMU0UgLCAwIH0sCiAjZW5kaWYKQEAgLTE1NTYsNiArMTYxOSwyMCBAQAogCiAKIAorc3RhdGlj
IGludAordl9wZXJpb2QoY29uc3QgdXNjaGFyICogcywgY29uc3QgdXNjaGFyICogYXJnLCB1c2No
YXIgKiogbG9nX21zZ3B0cikKK3sKK2ludCBwZXJpb2Q7CitpZiAoKHBlcmlvZCA9IHJlYWRjb25m
X3JlYWR0aW1lKHMsIDAsIEZBTFNFKSkgPCAwKQorICB7CisgICpsb2dfbXNncHRyID0gc3RyaW5n
X3NwcmludGYoImJhZCB0aW1lIHZhbHVlIGluIEFDTCBjb25kaXRpb24gIgorICAgICJcInZlcmlm
eSAlc1wiIiwgYXJnKTsKKyAgfQorcmV0dXJuIHBlcmlvZDsKK30KKworCisKIC8qIFRoaXMgZnVu
Y3Rpb24gaW1wbGVtZW50cyB0aGUgInZlcmlmeSIgY29uZGl0aW9uLiBJdCBpcyBjYWxsZWQgd2hl
bgogZW5jb3VudGVyZWQgaW4gYW55IEFDTCwgYmVjYXVzZSBzb21lIHRlc3RzIGFyZSBhbG1vc3Qg
YWx3YXlzIHBlcm1pdHRlZC4gU29tZQoganVzdCBkb24ndCBtYWtlIHNlbnNlLCBhbmQgYWx3YXlz
IGZhaWwgKGZvciBleGFtcGxlLCBhbiBhdHRlbXB0IHRvIHRlc3QgYSBob3N0CkBAIC0xNTkwLDYg
KzE2NjcsOCBAQAogQk9PTCBjYWxsb3V0X2RlZmVyX29rID0gRkFMU0U7CiBCT09MIG5vX2RldGFp
bHMgPSBGQUxTRTsKIEJPT0wgc3VjY2Vzc19vbl9yZWRpcmVjdCA9IEZBTFNFOworQk9PTCBxdW90
YSA9IEZBTFNFOworaW50IHF1b3RhX3Bvc19jYWNoZSA9IFFVT1RBX1BPU19ERUZBVUxULCBxdW90
YV9uZWdfY2FjaGUgPSBRVU9UQV9ORUdfREVGQVVMVDsKIGFkZHJlc3NfaXRlbSAqc2VuZGVyX3Zh
ZGRyID0gTlVMTDsKIHVzY2hhciAqdmVyaWZ5X3NlbmRlcl9hZGRyZXNzID0gTlVMTDsKIHVzY2hh
ciAqcG1fbWFpbGZyb20gPSBOVUxMOwpAQCAtMTc0Niw3ICsxODI1LDcgQEAKICAgICBpbiBwbGFj
ZSBvZiB0aGUgYWN0dWFsIHNlbmRlciAocmFyZSBzcGVjaWFsLWNhc2UgcmVxdWlyZW1lbnQpLiAq
LwogICAgIHsKICAgICB1c2NoYXIgKnMgPSBzcyArIDY7Ci0gICAgaWYgKCpzID09IDApCisgICAg
aWYgKCEqcykKICAgICAgIHZlcmlmeV9zZW5kZXJfYWRkcmVzcyA9IHNlbmRlcl9hZGRyZXNzOwog
ICAgIGVsc2UKICAgICAgIHsKQEAgLTE3OTIsMTkgKzE4NzEsMTYgQEAKICAgZWxzZSBpZiAoc3Ry
bmNtcGljKHNzLCBVUyJjYWxsb3V0IiwgNykgPT0gMCkKICAgICB7CiAgICAgY2FsbG91dCA9IENB
TExPVVRfVElNRU9VVF9ERUZBVUxUOwotICAgIHNzICs9IDc7Ci0gICAgaWYgKCpzcyAhPSAwKQor
ICAgIGlmICgqKHNzICs9IDcpKQogICAgICAgewogICAgICAgd2hpbGUgKGlzc3BhY2UoKnNzKSkg
c3MrKzsKICAgICAgIGlmICgqc3MrKyA9PSAnPScpCiAgICAgICAgIHsKIAljb25zdCB1c2NoYXIg
KiBzdWJsaXN0ID0gc3M7CiAgICAgICAgIGludCBvcHRzZXAgPSAnLCc7Ci0gICAgICAgIHVzY2hh
ciBidWZmZXJbMjU2XTsKLQl1c2NoYXIgKiBvcHQ7CiAKICAgICAgICAgd2hpbGUgKGlzc3BhY2Uo
KnN1Ymxpc3QpKSBzdWJsaXN0Kys7Ci0gICAgICAgIHdoaWxlICgob3B0ID0gc3RyaW5nX25leHRp
bmxpc3QoJnN1Ymxpc3QsICZvcHRzZXAsIE5VTEwsIDApKSkKKyAgICAgICAgZm9yICh1c2NoYXIg
KiBvcHQ7IG9wdCA9IHN0cmluZ19uZXh0aW5saXN0KCZzdWJsaXN0LCAmb3B0c2VwLCBOVUxMLCAw
KTsgKQogICAgICAgICAgIHsKIAkgIGNhbGxvdXRfb3B0X3QgKiBvcDsKIAkgIGRvdWJsZSBwZXJp
b2QgPSAxLjBGOwpAQCAtMTgyNiwxMiArMTkwMiw4IEBACiAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHdoaWxlIChpc3NwYWNlKCpvcHQpKSBvcHQrKzsKIAkgICAgfQotCSAgaWYgKG9wLT50
aW1ldmFsICYmIChwZXJpb2QgPSByZWFkY29uZl9yZWFkdGltZShvcHQsIDAsIEZBTFNFKSkgPCAw
KQotCSAgICB7Ci0JICAgICpsb2dfbXNncHRyID0gc3RyaW5nX3NwcmludGYoImJhZCB0aW1lIHZh
bHVlIGluIEFDTCBjb25kaXRpb24gIgotCSAgICAgICJcInZlcmlmeSAlc1wiIiwgYXJnKTsKKwkg
IGlmIChvcC0+dGltZXZhbCAmJiAocGVyaW9kID0gdl9wZXJpb2Qob3B0LCBhcmcsIGxvZ19tc2dw
dHIpKSA8IDApCiAJICAgIHJldHVybiBFUlJPUjsKLQkgICAgfQogCiAJICBzd2l0Y2gob3AtPnZh
bHVlKQogCSAgICB7CkBAIC0xODY0LDYgKzE5MzYsMzggQEAKICAgICAgIH0KICAgICB9CiAKKyAg
LyogVGhlIHF1b3RhIG9wdGlvbiBoYXMgc3ViLW9wdGlvbnMsIGNvbW1hLXNlcGFyYXRlZCAqLwor
CisgIGVsc2UgaWYgKHN0cm5jbXBpYyhzcywgVVMicXVvdGEiLCA1KSA9PSAwKQorICAgIHsKKyAg
ICBxdW90YSA9IFRSVUU7CisgICAgaWYgKCooc3MgKz0gNSkpCisgICAgICB7CisgICAgICB3aGls
ZSAoaXNzcGFjZSgqc3MpKSBzcysrOworICAgICAgaWYgKCpzcysrID09ICc9JykKKyAgICAgICAg
eworCWNvbnN0IHVzY2hhciAqIHN1Ymxpc3QgPSBzczsKKyAgICAgICAgaW50IG9wdHNlcCA9ICcs
JzsKKwlpbnQgcGVyaW9kOworCisgICAgICAgIHdoaWxlIChpc3NwYWNlKCpzdWJsaXN0KSkgc3Vi
bGlzdCsrOworICAgICAgICBmb3IgKHVzY2hhciAqIG9wdDsgb3B0ID0gc3RyaW5nX25leHRpbmxp
c3QoJnN1Ymxpc3QsICZvcHRzZXAsIE5VTEwsIDApOyApCisJICBpZiAoVXN0cm5jbXAob3B0LCAi
Y2FjaGVwb3M9IiwgOSkgPT0gMCkKKwkgICAgaWYgKChwZXJpb2QgPSB2X3BlcmlvZChvcHQgKz0g
OSwgYXJnLCBsb2dfbXNncHRyKSkgPCAwKQorCSAgICAgIHJldHVybiBFUlJPUjsKKwkgICAgZWxz
ZQorCSAgICAgIHF1b3RhX3Bvc19jYWNoZSA9IHBlcmlvZDsKKwkgIGVsc2UgaWYgKFVzdHJuY21w
KG9wdCwgImNhY2hlbmVnPSIsIDkpID09IDApCisJICAgIGlmICgocGVyaW9kID0gdl9wZXJpb2Qo
b3B0ICs9IDksIGFyZywgbG9nX21zZ3B0cikpIDwgMCkKKwkgICAgICByZXR1cm4gRVJST1I7CisJ
ICAgIGVsc2UKKwkgICAgICBxdW90YV9uZWdfY2FjaGUgPSBwZXJpb2Q7CisJICBlbHNlIGlmIChV
c3RyY21wKG9wdCwgIm5vX2NhY2hlIikgPT0gMCkKKwkgICAgcXVvdGFfcG9zX2NhY2hlID0gcXVv
dGFfbmVnX2NhY2hlID0gMDsKKwl9CisgICAgICB9CisgICAgfQorCiAgIC8qIE9wdGlvbiBub3Qg
cmVjb2duaXplZCAqLwogCiAgIGVsc2UKQEAgLTE4ODIsNiArMTk4NiwzMiBAQAogICByZXR1cm4g
RVJST1I7CiAgIH0KIAorLyogSGFuZGxlIHF1b3RhIHZlcmlmaWNhdGlvbiAqLworaWYgKHF1b3Rh
KQorICB7CisgIGlmICh2cC0+dmFsdWUgIT0gVkVSSUZZX1JDUFQpCisgICAgeworICAgICpsb2df
bXNncHRyID0gVVMiY2FuIG9ubHkgdmVyaWZ5IHF1b3RhIG9mIHJlY2lwaWVudCI7CisgICAgcmV0
dXJuIEVSUk9SOworICAgIH0KKworICBpZiAoKHJjID0gdmVyaWZ5X3F1b3RhX2NhbGwoYWRkci0+
YWRkcmVzcywKKwkgICAgICBxdW90YV9wb3NfY2FjaGUsIHF1b3RhX25lZ19jYWNoZSwgbG9nX21z
Z3B0cikpICE9IE9LKQorICAgIHsKKyAgICAqYmFzaWNfZXJybm8gPSBlcnJubzsKKyAgICBpZiAo
c210cF9yZXR1cm5fZXJyb3JfZGV0YWlscykKKyAgICAgIHsKKyAgICAgIGlmICghKnVzZXJfbXNn
cHRyICYmICpsb2dfbXNncHRyKQorICAgICAgICAqdXNlcl9tc2dwdHIgPSBzdHJpbmdfc3ByaW50
ZigiUmVqZWN0ZWQgYWZ0ZXIgJXM6ICVzIiwKKwkgICAgc210cF9uYW1lc1tzbXRwX2Nvbm5lY3Rp
b25faGFkW1NNVFBfSEJVRkZfUFJFVihzbXRwX2NoX2luZGV4KV1dLAorCSAgICAqbG9nX21zZ3B0
cik7CisgICAgICBpZiAocmMgPT0gREVGRVIpIGYuYWNsX3RlbXBfZGV0YWlscyA9IFRSVUU7Cisg
ICAgICB9CisgICAgfQorCisgIHJldHVybiByYzsKKyAgfQorCiAvKiBIYW5kbGUgc2VuZGVyLWlu
LWhlYWRlciB2ZXJpZmljYXRpb24uIERlZmF1bHQgdGhlIHVzZXIgbWVzc2FnZSB0byB0aGUgbG9n
CiBtZXNzYWdlIGlmIGdpdmluZyBvdXQgdmVyaWZpY2F0aW9uIGRldGFpbHMuICovCiAKQEAgLTE5
MjgsOCArMjA1OCw4IEBACiAgICAgfQogCiAgIHNlbmRlcl92YWRkciA9IHZlcmlmeV9jaGVja2Vk
X3NlbmRlcih2ZXJpZnlfc2VuZGVyX2FkZHJlc3MpOwotICBpZiAoc2VuZGVyX3ZhZGRyICE9IE5V
TEwgJiYgICAgICAgICAgICAgICAvKiBQcmV2aW91c2x5IGNoZWNrZWQgKi8KLSAgICAgIGNhbGxv
dXQgPD0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gY2FsbG91dCBuZWVkZWQgdGhp
cyB0aW1lICovCisgIGlmICggICBzZW5kZXJfdmFkZHIJCQkJLyogUHJldmlvdXNseSBjaGVja2Vk
ICovCisgICAgICAmJiBjYWxsb3V0IDw9IDApCQkJCS8qIE5vIGNhbGxvdXQgbmVlZGVkIHRoaXMg
dGltZSAqLwogICAgIHsKICAgICAvKiBJZiB0aGUgInJvdXRlZCIgZmxhZyBpcyBzZXQsIGl0IG1l
YW5zIHRoYXQgcm91dGluZyB3b3JrZWQgYmVmb3JlLCBzbwogICAgIHRoaXMgY2hlY2sgY2FuIGdp
dmUgT0sgKHRoZSBzYXZlZCByZXR1cm4gY29kZSB2YWx1ZSwgaWYgc2V0LCBiZWxvbmdzIHRvIGEK
QEAgLTE5OTYsMTQgKzIxMjYsMTIgQEAKICAgICAgICAgKmJhc2ljX2Vycm5vID0gc2VuZGVyX3Zh
ZGRyLT5iYXNpY19lcnJubzsKICAgICAgIGVsc2UKIAlERUJVRyhEX2FjbCkKLQkgIHsKIAkgIGlm
IChVc3RyY21wKHNlbmRlcl92YWRkci0+YWRkcmVzcywgdmVyaWZ5X3NlbmRlcl9hZGRyZXNzKSAh
PSAwKQogCSAgICBkZWJ1Z19wcmludGZfaW5kZW50KCJzZW5kZXIgJXMgdmVyaWZpZWQgb2sgYXMg
JXNcbiIsCiAJICAgICAgdmVyaWZ5X3NlbmRlcl9hZGRyZXNzLCBzZW5kZXJfdmFkZHItPmFkZHJl
c3MpOwogCSAgZWxzZQogCSAgICBkZWJ1Z19wcmludGZfaW5kZW50KCJzZW5kZXIgJXMgdmVyaWZp
ZWQgb2tcbiIsCiAJICAgICAgdmVyaWZ5X3NlbmRlcl9hZGRyZXNzKTsKLQkgIH0KICAgICAgIH0K
ICAgICBlbHNlCiAgICAgICByYyA9IE9LOyAgLyogTnVsbCBzZW5kZXIgKi8KQEAgLTIwNDcsOCAr
MjE3NSw3IEBACiAKICAgKmJhc2ljX2Vycm5vID0gYWRkcjIuYmFzaWNfZXJybm87CiAgICpsb2df
bXNncHRyID0gYWRkcjIubWVzc2FnZTsKLSAgKnVzZXJfbXNncHRyID0gKGFkZHIyLnVzZXJfbWVz
c2FnZSAhPSBOVUxMKT8KLSAgICBhZGRyMi51c2VyX21lc3NhZ2UgOiBhZGRyMi5tZXNzYWdlOwor
ICAqdXNlcl9tc2dwdHIgPSBhZGRyMi51c2VyX21lc3NhZ2UgPyBhZGRyMi51c2VyX21lc3NhZ2Ug
OiBhZGRyMi5tZXNzYWdlOwogCiAgIC8qIEFsbG93IGRldGFpbHMgZm9yIHRlbXBvcmFyeSBlcnJv
ciBpZiB0aGUgYWRkcmVzcyBpcyBzbyBmbGFnZ2VkLiAqLwogICBpZiAodGVzdGZsYWcoKCZhZGRy
MiksIGFmX3Bhc3NfbWVzc2FnZSkpIGYuYWNsX3RlbXBfZGV0YWlscyA9IFRSVUU7CkBAIC0yMDU5
LDggKzIxODYsMTAgQEAKIAogLyogV2UgaGF2ZSBhIHJlc3VsdCBmcm9tIHRoZSByZWxldmFudCB0
ZXN0LiBIYW5kbGUgZGVmZXIgb3ZlcnJpZGVzIGZpcnN0LiAqLwogCi1pZiAocmMgPT0gREVGRVIg
JiYgKGRlZmVyX29rIHx8Ci0gICAoY2FsbG91dF9kZWZlcl9vayAmJiAqYmFzaWNfZXJybm8gPT0g
RVJSTk9fQ0FMTE9VVERFRkVSKSkpCitpZiAoICByYyA9PSBERUZFUgorICAgJiYgKCAgZGVmZXJf
b2sKKyAgICAgIHx8IGNhbGxvdXRfZGVmZXJfb2sgJiYgKmJhc2ljX2Vycm5vID09IEVSUk5PX0NB
TExPVVRERUZFUgorICAgKSAgKQogICB7CiAgIEhERUJVRyhEX2FjbCkgZGVidWdfcHJpbnRmX2lu
ZGVudCgidmVyaWZ5IGRlZmVyIG92ZXJyaWRkZW4gYnkgJXNcbiIsCiAgICAgZGVmZXJfb2s/ICJk
ZWZlcl9vayIgOiAiY2FsbG91dF9kZWZlcl9vayIpOwpAQCAtMjA3MCw3ICsyMTk5LDcgQEAKIC8q
IElmIHdlJ3ZlIGZhaWxlZCBhIHNlbmRlciwgc2V0IHVwIGEgcmVjaXBpZW50IG1lc3NhZ2UsIGFu
ZCBwb2ludAogc2VuZGVyX3ZlcmlmaWVkX2ZhaWxlZCB0byB0aGUgYWRkcmVzcyBpdGVtIHRoYXQg
YWN0dWFsbHkgZmFpbGVkLiAqLwogCi1pZiAocmMgIT0gT0sgJiYgdmVyaWZ5X3NlbmRlcl9hZGRy
ZXNzICE9IE5VTEwpCitpZiAocmMgIT0gT0sgJiYgdmVyaWZ5X3NlbmRlcl9hZGRyZXNzKQogICB7
CiAgIGlmIChyYyAhPSBERUZFUikKICAgICAqbG9nX21zZ3B0ciA9ICp1c2VyX21zZ3B0ciA9IFVT
IlNlbmRlciB2ZXJpZnkgZmFpbGVkIjsKQEAgLTIwODksNyArMjIxOCw3IEBACiAvKiBWZXJpZnlp
bmcgYW4gYWRkcmVzcyBtZXNzZXMgdXAgdGhlIHZhbHVlcyBvZiAkZG9tYWluIGFuZCAkbG9jYWxf
cGFydCwKIHNvIHJlc2V0IHRoZW0gYmVmb3JlIHJldHVybmluZyBpZiB0aGlzIGlzIGEgUkNQVCBB
Q0wuICovCiAKLWlmIChhZGRyICE9IE5VTEwpCitpZiAoYWRkcikKICAgewogICBkZWxpdmVyX2Rv
bWFpbiA9IGFkZHItPmRvbWFpbjsKICAgZGVsaXZlcl9sb2NhbHBhcnQgPSBhZGRyLT5sb2NhbF9w
YXJ0OwpAQCAtMjQ1OCw3ICsyNTg3LDcgQEAKICAgICAvKiBObyBCbG9vbSBmaWx0ZXIuIFRoaXMg
YmFzaWMgcmF0ZWxpbWl0IGJsb2NrIGlzIGluaXRpYWxpemVkIGJlbG93LiAqLwogICAgIEhERUJV
RyhEX2FjbCkgZGVidWdfcHJpbnRmX2luZGVudCgicmF0ZWxpbWl0IGNyZWF0aW5nIG5ldyByYXRl
IGRhdGEgYmxvY2tcbiIpOwogICAgIGRiZGJfc2l6ZSA9IHNpemVvZigqZGJkKTsKLSAgICBkYmRi
ID0gc3RvcmVfZ2V0KGRiZGJfc2l6ZSwgRkFMU0UpOwkJLyogbm90IHRhaW50ZWQgKi8KKyAgICBk
YmRiID0gc3RvcmVfZ2V0KGRiZGJfc2l6ZSwgR0VUX1VOVEFJTlRFRCk7CiAgICAgfQogICBlbHNl
CiAgICAgewpAQCAtMjQ3Miw3ICsyNjAxLDcgQEAKICAgICBleHRyYSA9IChpbnQpbGltaXQgKiAy
IC0gc2l6ZW9mKGRiZGItPmJsb29tKTsKICAgICBpZiAoZXh0cmEgPCAwKSBleHRyYSA9IDA7CiAg
ICAgZGJkYl9zaXplID0gc2l6ZW9mKCpkYmRiKSArIGV4dHJhOwotICAgIGRiZGIgPSBzdG9yZV9n
ZXQoZGJkYl9zaXplLCBGQUxTRSk7CQkvKiBub3QgdGFpbnRlZCAqLworICAgIGRiZGIgPSBzdG9y
ZV9nZXQoZGJkYl9zaXplLCBHRVRfVU5UQUlOVEVEKTsKICAgICBkYmRiLT5ibG9vbV9lcG9jaCA9
IHR2LnR2X3NlYzsKICAgICBkYmRiLT5ibG9vbV9zaXplID0gc2l6ZW9mKGRiZGItPmJsb29tKSAr
IGV4dHJhOwogICAgIG1lbXNldChkYmRiLT5ibG9vbSwgMCwgZGJkYi0+Ymxvb21fc2l6ZSk7CkBA
IC0yNjkyLDcgKzI4MjEsNyBAQAogLyogU3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgdHJlZSBmb3Ig
ZnV0dXJlIHJlZmVyZW5jZS4gIFRha2UgdGhlIHRhaW50IHN0YXR1cwogZnJvbSB0aGUga2V5IGZv
ciBjb25zaXN0ZW5jeSBldmVuIHRob3VnaCBpdCdzIHVubGlrZWx5IHdlJ2xsIGV2ZXIgZXhwYW5k
IHRoaXMuICovCiAKLXQgPSBzdG9yZV9nZXQoc2l6ZW9mKHRyZWVfbm9kZSkgKyBVc3RybGVuKGtl
eSksIGlzX3RhaW50ZWQoa2V5KSk7Cit0ID0gc3RvcmVfZ2V0KHNpemVvZih0cmVlX25vZGUpICsg
VXN0cmxlbihrZXkpLCBrZXkpOwogdC0+ZGF0YS5wdHIgPSBkYmQ7CiBVc3RyY3B5KHQtPm5hbWUs
IGtleSk7CiAodm9pZCl0cmVlX2luc2VydG5vZGUoYW5jaG9yLCB0KTsKQEAgLTI3MTIsNiArMjg0
MSwxNDMgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgorKiAgICAgIEhhbmRsZSBhIGNoZWNrIGZvciBwcmV2aW91c2x5LXNlZW4gICAgICAg
ICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK
Ky8qCitBQ0wgY2xhdXNlcyBsaWtlOiAgIHNlZW4gPSAtNW0gLyBrZXk9JGZvbyAvIHJlYWRvbmx5
CisKK1JldHVybiBpcyB0cnVlIGZvciBjb25kaXRpb24tdHJ1ZSAtIGJ1dCB0aGUgc2VtYW50aWNz
CitkZXBlbmQgaGVhdmlseSBvbiB0aGUgYWN0dWFsIHVzZS1jYXNlLgorCitOZWdhdGl2ZSB0aW1l
cyB0ZXN0IGZvciBzZWVuLWJlZm9yZSwgcG9zaXRpdmUgZm9yIHNlZW4tbW9yZS1yZWNlbnRseS10
aGFuCisodGhlIGdpdmVuIGludGVydmFsIGJlZm9yZSBjdXJyZW50IHRpbWUpLgorCitBbGwgYXJl
IHN1YmplY3QgdG8gaGlzdG9yeSBub3QgaGF2aW5nIGJlZW4gY2xlYW5lZCBmcm9tIHRoZSBEQi4K
KworRGVmYXVsdCBmb3Igc2Vlbi1iZWZvcmUgaXMgdG8gY3JlYXRlIGlmIG5vdCBwcmVzZW50LCBh
bmQgdG8KK3VwZGF0ZSBpZiBvbGRlciB0aGFuIDEwZCAod2l0aCB0aGUgc2Vlbi10ZXN0IHRpbWUp
LgorRGVmYXVsdCBmb3Igc2Vlbi1zaW5jZSBpcyB0byBhbHdheXMgY3JlYXRlIG9yIHVwZGF0ZS4K
KworT3B0aW9uczoKKyAga2V5PXZhbHVlLiAgRGVmYXVsdCBrZXkgaXMgJHNlbmRlcl9ob3N0X2Fk
ZHJlc3MKKyAgcmVhZG9ubHkKKyAgd3JpdGUKKyAgcmVmcmVzaD08aW50ZXJ2YWw+OiAgdXBkYXRl
IGFuIGV4aXN0aW5nIERCIGVudHJ5IG9sZGVyIHRoYW4gZ2l2ZW4KKwkJCWFtb3VudC4gIERlZmF1
bHQgcmVmcmVzaCBsYWNraW5nIHRoaXMgb3B0aW9uIGlzIDEwZC4KKwkJCVRoZSB1cGRhdGUgc2V0
cyB0aGUgcmVjb3JkIHRpbWVzdGFtcCB0byB0aGUgc2Vlbi10ZXN0IHRpbWUuCisKK1hYWCBkbyB3
ZSBuZWVkIHNlcGFyYXRlIG5vY3JlYXRlLCBub3VwZGF0ZSBjb250cm9scz8KKworQXJndW1lbnRz
OgorICBhcmcgICAgICAgICB0aGUgb3B0aW9uIHN0cmluZyBmb3Igc2Vlbj0KKyAgd2hlcmUgICAg
ICAgQUNMX1dIRVJFX3h4eHggaW5kaWNhdGluZyB3aGljaCBBQ0wgdGhpcyBpcworICBsb2dfbXNn
cHRyICBmb3IgZXJyb3IgbWVzc2FnZXMKKworUmV0dXJuczogICAgICAgT0sgICAgICAgIC0gQ29u
ZGl0aW9uIGlzIHRydWUKKyAgICAgICAgICAgICAgIEZBSUwgICAgICAtIENvbmRpdGlvbiBpcyBm
YWxzZQorICAgICAgICAgICAgICAgREVGRVIgICAgIC0gUHJvYmxlbSBvcGVuaW5nIGhpc3Rvcnkg
ZGF0YWJhc2UKKyAgICAgICAgICAgICAgIEVSUk9SICAgICAtIFN5bnRheCBlcnJvciBpbiBvcHRp
b25zCisqLworCitzdGF0aWMgaW50CithY2xfc2Vlbihjb25zdCB1c2NoYXIgKiBhcmcsIGludCB3
aGVyZSwgdXNjaGFyICoqIGxvZ19tc2dwdHIpCit7CitlbnVtIHsgU0VFTl9ERUZBVUxULCBTRUVO
X1JFQURPTkxZLCBTRUVOX1dSSVRFIH07CisKK2NvbnN0IHVzY2hhciAqIGxpc3QgPSBhcmc7Citp
bnQgc2xhc2ggPSAnLycsIGludGVydmFsLCBtb2RlID0gU0VFTl9ERUZBVUxULCB5aWVsZCA9IEZB
SUw7CitCT09MIGJlZm9yZTsKK2ludCByZWZyZXNoID0gMTAgKiAyNCAqIDYwICogNjA7CS8qIDEw
IGRheXMgKi8KK2NvbnN0IHVzY2hhciAqIGVsZSwgKiBrZXkgPSBzZW5kZXJfaG9zdF9hZGRyZXNz
Oworb3Blbl9kYiBkYmJsb2NrLCAqIGRibTsKK2RiZGF0YV9zZWVuICogZGJkOwordGltZV90IG5v
dzsKKworLyogUGFyc2UgdGhlIGZpcnN0IGVsZW1lbnQsIHRoZSB0aW1lLXJlbGF0aW9uLiAqLwor
CitpZiAoIShlbGUgPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNsYXNoLCBOVUxMLCAwKSkp
CisgIGdvdG8gYmFkcGFyc2U7CitpZiAoKGJlZm9yZSA9ICplbGUgPT0gJy0nKSkKKyAgZWxlKys7
CitpZiAoKGludGVydmFsID0gcmVhZGNvbmZfcmVhZHRpbWUoZWxlLCAwLCBGQUxTRSkpIDwgMCkK
KyAgZ290byBiYWRwYXJzZTsKKworLyogUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBvcHRpb25zICov
CisKK3doaWxlICgoZWxlID0gc3RyaW5nX25leHRpbmxpc3QoJmxpc3QsICZzbGFzaCwgTlVMTCwg
MCkpKQorICBpZiAoVXN0cm5jbXAoZWxlLCAia2V5PSIsIDQpID09IDApCisgICAga2V5ID0gZWxl
ICsgNDsKKyAgZWxzZSBpZiAoVXN0cmNtcChlbGUsICJyZWFkb25seSIpID09IDApCisgICAgbW9k
ZSA9IFNFRU5fUkVBRE9OTFk7CisgIGVsc2UgaWYgKFVzdHJjbXAoZWxlLCAid3JpdGUiKSA9PSAw
KQorICAgIG1vZGUgPSBTRUVOX1dSSVRFOworICBlbHNlIGlmIChVc3RybmNtcChlbGUsICJyZWZy
ZXNoPSIsIDgpID09IDApCisgICAgeworICAgIGlmICgocmVmcmVzaCA9IHJlYWRjb25mX3JlYWR0
aW1lKGVsZSArIDgsIDAsIEZBTFNFKSkgPCAwKQorICAgICAgZ290byBiYWRwYXJzZTsKKyAgICB9
CisgIGVsc2UKKyAgICBnb3RvIGJhZG9wdDsKKworaWYgKCEoZGJtID0gZGJmbl9vcGVuKFVTInNl
ZW4iLCBPX1JEV1IsICZkYmJsb2NrLCBUUlVFLCBUUlVFKSkpCisgIHsKKyAgSERFQlVHKERfYWNs
KSBkZWJ1Z19wcmludGZfaW5kZW50KCJkYXRhYmFzZSBmb3IgJ3NlZW4nIG5vdCBhdmFpbGFibGVc
biIpOworICAqbG9nX21zZ3B0ciA9IFVTImRhdGFiYXNlIGZvciAnc2Vlbicgbm90IGF2YWlsYWJs
ZSI7CisgIHJldHVybiBERUZFUjsKKyAgfQorCitkYmQgPSBkYmZuX3JlYWRfd2l0aF9sZW5ndGgo
ZGJtLCBrZXksIE5VTEwpOworbm93ID0gdGltZShOVUxMKTsKK2lmIChkYmQpCQkvKiBhbiBleGlz
dGluZyByZWNvcmQgKi8KKyAgeworICB0aW1lX3QgZGlmZiA9IG5vdyAtIGRiZC0+dGltZV9zdGFt
cDsJLyogdGltZSBzaW5jZSB0aGUgcmVjb3JkIHdhcyB3cml0dGVuICovCisKKyAgaWYgKGJlZm9y
ZSA/IGRpZmYgPj0gaW50ZXJ2YWwgOiBkaWZmIDwgaW50ZXJ2YWwpCisgICAgeWllbGQgPSBPSzsK
KworICBpZiAobW9kZSA9PSBTRUVOX1JFQURPTkxZKQorICAgIHsgSERFQlVHKERfYWNsKSBkZWJ1
Z19wcmludGZfaW5kZW50KCJzZWVuIGRiIG5vdCB3cml0dGVuIChyZWFkb25seSlcbiIpOyB9Cisg
IGVsc2UgaWYgKG1vZGUgPT0gU0VFTl9XUklURSB8fCAhYmVmb3JlKQorICAgIHsKKyAgICBkYmQt
PnRpbWVfc3RhbXAgPSBub3c7CisgICAgZGJmbl93cml0ZShkYm0sIGtleSwgZGJkLCBzaXplb2Yo
KmRiZCkpOworICAgIEhERUJVRyhEX2FjbCkgZGVidWdfcHJpbnRmX2luZGVudCgic2VlbiBkYiB3
cml0dGVuICh1cGRhdGUpXG4iKTsKKyAgICB9CisgIGVsc2UgaWYgKGRpZmYgPj0gcmVmcmVzaCkK
KyAgICB7CisgICAgZGJkLT50aW1lX3N0YW1wID0gbm93IC0gaW50ZXJ2YWw7CisgICAgZGJmbl93
cml0ZShkYm0sIGtleSwgZGJkLCBzaXplb2YoKmRiZCkpOworICAgIEhERUJVRyhEX2FjbCkgZGVi
dWdfcHJpbnRmX2luZGVudCgic2VlbiBkYiB3cml0dGVuIChyZWZyZXNoKVxuIik7CisgICAgfQor
ICB9CitlbHNlCisgIHsJCQkvKiBObyByZWNvcmQgZm91bmQsIHlpZWxkIGFsd2F5cyBGQUlMICov
CisgIGlmIChtb2RlICE9IFNFRU5fUkVBRE9OTFkpCisgICAgeworICAgIGRiZGF0YV9zZWVuIGQg
PSB7LnRpbWVfc3RhbXAgPSBub3d9OworICAgIGRiZm5fd3JpdGUoZGJtLCBrZXksICZkLCBzaXpl
b2YoKmRiZCkpOworICAgIEhERUJVRyhEX2FjbCkgZGVidWdfcHJpbnRmX2luZGVudCgic2VlbiBk
YiB3cml0dGVuIChjcmVhdGUpXG4iKTsKKyAgICB9CisgIGVsc2UKKyAgICBIREVCVUcoRF9hY2wp
IGRlYnVnX3ByaW50Zl9pbmRlbnQoInNlZW4gZGIgbm90IHdyaXR0ZW4gKHJlYWRvbmx5KVxuIik7
CisgIH0KKworZGJmbl9jbG9zZShkYm0pOworcmV0dXJuIHlpZWxkOworCisKK2JhZHBhcnNlOgor
ICAqbG9nX21zZ3B0ciA9IHN0cmluZ19zcHJpbnRmKCJmYWlsZWQgdG8gcGFyc2UgJyVzJyIsIGFy
Zyk7CisgIHJldHVybiBFUlJPUjsKK2JhZG9wdDoKKyAgKmxvZ19tc2dwdHIgPSBzdHJpbmdfc3By
aW50ZigidW5yZWNvZ25pc2VkIG9wdGlvbiAnJXMnIGluICclcyciLCBlbGUsIGFyZyk7CisgIHJl
dHVybiBFUlJPUjsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgVGhlIHVkcHNlbmQgQUNMIG1vZGlmaWVyICAg
ICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KIApAQCAtMjc2NSw3ICszMDMxLDcgQEAKICAgfQogCiAvKiBNYWtlIGEgc2luZ2xlLWl0
ZW0gaG9zdCBsaXN0LiAqLwotaCA9IHN0b3JlX2dldChzaXplb2YoaG9zdF9pdGVtKSwgRkFMU0Up
OworaCA9IHN0b3JlX2dldChzaXplb2YoaG9zdF9pdGVtKSwgR0VUX1VOVEFJTlRFRCk7CiBtZW1z
ZXQoaCwgMCwgc2l6ZW9mKGhvc3RfaXRlbSkpOwogaC0+bmFtZSA9IGhvc3RuYW1lOwogaC0+cG9y
dCA9IHBvcnRudW07CkBAIC0zMTMxLDEzICszMzk3LDE1IEBACiAKIAljYXNlIENPTlRST0xfRkFL
RVJFSkVDVDoKIAkgIGNhbmNlbF9jdXR0aHJvdWdoX2Nvbm5lY3Rpb24oVFJVRSwgVVMiZmFrZXJl
amVjdCIpOwotCSAgY2FzZSBDT05UUk9MX0ZBS0VERUZFUjoKKwljYXNlIENPTlRST0xfRkFLRURF
RkVSOgogCSAgZmFrZV9yZXNwb25zZSA9IChjb250cm9sX3R5cGUgPT0gQ09OVFJPTF9GQUtFREVG
RVIpID8gREVGRVIgOiBGQUlMOwogCSAgaWYgKCpwID09ICcvJykKIAkgICAgewogCSAgICBjb25z
dCB1c2NoYXIgKnBwID0gcCArIDE7CiAJICAgIHdoaWxlICgqcHApIHBwKys7Ci0JICAgIGZha2Vf
cmVzcG9uc2VfdGV4dCA9IGV4cGFuZF9zdHJpbmcoc3RyaW5nX2NvcHluKHArMSwgcHAtcC0xKSk7
CisJICAgIC8qIFRoZSBlbnRpcmUgY29udHJvbD0gbGluZSB3YXMgZXhwYW5kZWQgYXQgdG9wIHNv
IG5vIG5lZWQgdG8gZXhwYW5kCisJICAgIHRoZSBwYXJ0IGFmdGVyIHRoZSAvICovCisJICAgIGZh
a2VfcmVzcG9uc2VfdGV4dCA9IHN0cmluZ19jb3B5bihwKzEsIHBwLXAtMSk7CiAJICAgIHAgPSBw
cDsKIAkgICAgfQogCSAgIGVsc2UgLyogRXhwbGljaXRseSByZXNldCB0byBkZWZhdWx0IHN0cmlu
ZyAqLwpAQCAtMzIxMyw5ICszNDgxLDggQEAKIAogCWNhc2UgQ09OVFJPTF9ERUJVRzoKIAkgIHsK
LQkgIHVzY2hhciAqIGRlYnVnX3RhZyA9IE5VTEw7Ci0JICB1c2NoYXIgKiBkZWJ1Z19vcHRzID0g
TlVMTDsKLQkgIEJPT0wga2lsbCA9IEZBTFNFOworCSAgdXNjaGFyICogZGVidWdfdGFnID0gTlVM
TCwgKiBkZWJ1Z19vcHRzID0gTlVMTDsKKwkgIEJPT0wga2lsbCA9IEZBTFNFLCBzdG9wID0gRkFM
U0U7CiAKIAkgIHdoaWxlICgqcCA9PSAnLycpCiAJICAgIHsKQEAgLTMyMzIsMTggKzM0OTksMzkg
QEAKIAkgICAgICB9CiAJICAgIGVsc2UgaWYgKFVzdHJuY21wKHBwLCAia2lsbCIsIDQpID09IDAp
CiAJICAgICAgewotCSAgICAgIGZvciAocHAgKz0gNDsgKnBwICYmICpwcCAhPSAnLyc7KSBwcCsr
OworCSAgICAgIHBwICs9IDQ7CiAJICAgICAga2lsbCA9IFRSVUU7CiAJICAgICAgfQotCSAgICBl
bHNlCi0JICAgICAgd2hpbGUgKCpwcCAmJiAqcHAgIT0gJy8nKSBwcCsrOworCSAgICBlbHNlIGlm
IChVc3RybmNtcChwcCwgInN0b3AiLCA0KSA9PSAwKQorCSAgICAgIHsKKwkgICAgICBwcCArPSA0
OworCSAgICAgIHN0b3AgPSBUUlVFOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoVXN0cm5jbXAo
cHAsICJwcmV0cmlnZ2VyPSIsIDExKSA9PSAwKQorCQlkZWJ1Z19wcmV0cmlnZ2VyX3NldHVwKHBw
KzExKTsKKwkgICAgZWxzZSBpZiAoVXN0cm5jbXAocHAsICJ0cmlnZ2VyPSIsIDgpID09IDApCisJ
ICAgICAgeworCSAgICAgIGlmIChVc3RybmNtcChwcCArPSA4LCAibm93IiwgMykgPT0gMCkKKwkJ
eworCQlwcCArPSAzOworCQlkZWJ1Z190cmlnZ2VyX2ZpcmUoKTsKKwkJfQorCSAgICAgIGVsc2Ug
aWYgKFVzdHJuY21wKHBwLCAicGFuaWNsb2ciLCA4KSA9PSAwKQorCQl7CisJCXBwICs9IDg7CisJ
CWR0cmlnZ2VyX3NlbGVjdG9yIHw9IEJJVChEVGlfcGFuaWN0cmlnZ2VyKTsKKwkJfQorCSAgICAg
IH0KKwkgICAgd2hpbGUgKCpwcCAmJiAqcHAgIT0gJy8nKSBwcCsrOwogCSAgICBwID0gcHA7CiAJ
ICAgIH0KIAotCSAgICBpZiAoa2lsbCkKLQkgICAgICBkZWJ1Z19sb2dnaW5nX3N0b3AoKTsKLQkg
ICAgZWxzZQotCSAgICAgIGRlYnVnX2xvZ2dpbmdfYWN0aXZhdGUoZGVidWdfdGFnLCBkZWJ1Z19v
cHRzKTsKKwkgIGlmIChraWxsKQorCSAgICBkZWJ1Z19sb2dnaW5nX3N0b3AoVFJVRSk7CisJICBl
bHNlIGlmIChzdG9wKQorCSAgICBkZWJ1Z19sb2dnaW5nX3N0b3AoRkFMU0UpOworCSAgZWxzZSBp
ZiAoZGVidWdfdGFnIHx8IGRlYnVnX29wdHMpCisJICAgIGRlYnVnX2xvZ2dpbmdfYWN0aXZhdGUo
ZGVidWdfdGFnLCBkZWJ1Z19vcHRzKTsKIAkgIGJyZWFrOwogCSAgfQogCkBAIC0zNDM0LDcgKzM3
MjIsNyBAQAogICAgICAgfQogICAgIGJyZWFrOwogCi0gICAgI2lmbmRlZiBESVNBQkxFX0RLSU0K
KyNpZm5kZWYgRElTQUJMRV9ES0lNCiAgICAgY2FzZSBBQ0xDX0RLSU1fU0lHTkVSOgogICAgIGlm
IChka2ltX2N1cl9zaWduZXIpCiAgICAgICByYyA9IG1hdGNoX2lzaW5saXN0KGRraW1fY3VyX3Np
Z25lciwKQEAgLTM0NDcsNyArMzczNSw3IEBACiAgICAgcmMgPSBtYXRjaF9pc2lubGlzdChka2lt
X3ZlcmlmeV9zdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAmYXJnLCAwLCBOVUxMLCBO
VUxMLCBNQ0xfU1RSSU5HLCBUUlVFLCBOVUxMKTsKICAgICBicmVhazsKLSAgICAjZW5kaWYKKyNl
bmRpZgogCiAjaWZkZWYgU1VQUE9SVF9ETUFSQwogICAgIGNhc2UgQUNMQ19ETUFSQ19TVEFUVVM6
CkBAIC0zNjMyLDYgKzM5MjAsMTAgQEAKICAgICBzZXR1cF9yZW1vdmVfaGVhZGVyKGFyZyk7CiAg
ICAgYnJlYWs7CiAKKyAgICBjYXNlIEFDTENfU0VFTjoKKyAgICByYyA9IGFjbF9zZWVuKGFyZywg
d2hlcmUsIGxvZ19tc2dwdHIpOworICAgIGJyZWFrOworCiAgICAgY2FzZSBBQ0xDX1NFTkRFUl9E
T01BSU5TOgogICAgICAgewogICAgICAgdXNjaGFyICpzZG9tYWluOwpAQCAtMzkxMCw2ICs0MjAy
LDE4IEBACiAKIAogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLworLyogRm9yIGVycm9yIG1lc3NhZ2VzLCBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBj
b25maWcgbG9jYXRpb24KK2Fzc29jaWF0ZWQgd2l0aCBjdXJyZW50IHByb2Nlc3NpbmcuIE5VTEwg
aWYgbm90IGluIGFuIEFDTC4gKi8KKwordXNjaGFyICoKK2FjbF9jdXJyZW50X3ZlcmIodm9pZCkK
K3sKK2lmIChhY2xfY3VycmVudCkgcmV0dXJuIHN0cmluZ19zcHJpbnRmKCIgKEFDTCAlcywgJXMg
JWQpIiwKKyAgICB2ZXJic1thY2xfY3VycmVudC0+dmVyYl0sIGFjbF9jdXJyZW50LT5zcmNmaWxl
LCBhY2xfY3VycmVudC0+c3JjbGluZSk7CityZXR1cm4gTlVMTDsKK30KKwogLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgIENoZWNrIGFj
Y2VzcyB1c2luZyBhbiBBQ0wgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzk4NCw2ICs0Mjg4LDE1IEBACiAKIGFj
bF90ZXh0ID0gc3M7CiAKK2lmIChpc190YWludGVkKGFjbF90ZXh0KSAmJiAhZi5ydW5uaW5nX2lu
X3Rlc3RfaGFybmVzcykKKyAgeworICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLAor
ICAgICJhdHRlbXB0IHRvIHVzZSB0YWludGVkIEFDTCB0ZXh0IFwiJXNcIiIsIGFjbF90ZXh0KTsK
KyAgLyogQXZvaWQgbGVha2luZyBpbmZvIHRvIGFuIGF0dGFja2VyICovCisgICpsb2dfbXNncHRy
ID0gVVMiaW50ZXJuYWwgY29uZmlndXJhdGlvbiBlcnJvciI7CisgIHJldHVybiBFUlJPUjsKKyAg
fQorCiAvKiBIYW5kbGUgdGhlIGNhc2Ugb2YgYSBzdHJpbmcgdGhhdCBkb2VzIG5vdCBjb250YWlu
IGFueSBzcGFjZXMuIExvb2sgZm9yIGEKIG5hbWVkIEFDTCBhbW9uZyB0aG9zZSByZWFkIGZyb20g
dGhlIGNvbmZpZ3VyYXRpb24sIG9yIGEgcHJldmlvdXNseSByZWFkIGZpbGUuCiBJdCBpcyBwb3Nz
aWJsZSB0aGF0IHRoZSBwb2ludGVyIHRvIHRoZSBBQ0wgaXMgTlVMTCBpZiB0aGUgY29uZmlndXJh
dGlvbgpAQCAtNDAwNywxNCArNDMyMCw2IEBACiAgIGVsc2UgaWYgKCpzcyA9PSAnLycpCiAgICAg
ewogICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7Ci0gICAgaWYgKGlzX3RhaW50ZWQoc3MpKQotICAg
ICAgewotICAgICAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQywKLQkiYXR0ZW1wdCB0
byBvcGVuIHRhaW50ZWQgQUNMIGZpbGUgbmFtZSBcIiVzXCIiLCBzcyk7Ci0gICAgICAvKiBBdm9p
ZCBsZWFraW5nIGluZm8gdG8gYW4gYXR0YWNrZXIgKi8KLSAgICAgICpsb2dfbXNncHRyID0gVVMi
aW50ZXJuYWwgY29uZmlndXJhdGlvbiBlcnJvciI7Ci0gICAgICByZXR1cm4gRVJST1I7Ci0gICAg
ICB9CiAgICAgaWYgKChmZCA9IFVvcGVuKHNzLCBPX1JET05MWSwgMCkpIDwgMCkKICAgICAgIHsK
ICAgICAgICpsb2dfbXNncHRyID0gc3RyaW5nX3NwcmludGYoImZhaWxlZCB0byBvcGVuIEFDTCBm
aWxlIFwiJXNcIjogJXMiLCBzcywKQEAgLTQwMjksNyArNDMzNCw3IEBACiAgICAgICB9CiAKICAg
ICAvKiBJZiB0aGUgc3RyaW5nIGJlaW5nIHVzZWQgYXMgYSBmaWxlbmFtZSBpcyB0YWludGVkLCBz
byBpcyB0aGUgZmlsZSBjb250ZW50ICovCi0gICAgYWNsX3RleHQgPSBzdG9yZV9nZXQoc3RhdGJ1
Zi5zdF9zaXplICsgMSwgaXNfdGFpbnRlZChzcykpOworICAgIGFjbF90ZXh0ID0gc3RvcmVfZ2V0
KHN0YXRidWYuc3Rfc2l6ZSArIDEsIHNzKTsKICAgICBhY2xfdGV4dF9lbmQgPSBhY2xfdGV4dCAr
IHN0YXRidWYuc3Rfc2l6ZSArIDE7CiAKICAgICBpZiAocmVhZChmZCwgYWNsX3RleHQsIHN0YXRi
dWYuc3Rfc2l6ZSkgIT0gc3RhdGJ1Zi5zdF9zaXplKQpAQCAtNDA1OSw3ICs0MzY0LDcgQEAKICAg
aWYgKCFhY2wgJiYgKmxvZ19tc2dwdHIpIHJldHVybiBFUlJPUjsKICAgaWYgKGZkID49IDApCiAg
ICAgewotICAgIHRyZWVfbm9kZSAqdCA9IHN0b3JlX2dldF9wZXJtKHNpemVvZih0cmVlX25vZGUp
ICsgVXN0cmxlbihzcyksIGlzX3RhaW50ZWQoc3MpKTsKKyAgICB0cmVlX25vZGUgKiB0ID0gc3Rv
cmVfZ2V0X3Blcm0oc2l6ZW9mKHRyZWVfbm9kZSkgKyBVc3RybGVuKHNzKSwgc3MpOwogICAgIFVz
dHJjcHkodC0+bmFtZSwgc3MpOwogICAgIHQtPmRhdGEucHRyID0gYWNsOwogICAgICh2b2lkKXRy
ZWVfaW5zZXJ0bm9kZSgmYWNsX2FuY2hvciwgdCk7CkBAIC00MDY4LDcgKzQzNzMsNyBAQAogCiAv
KiBOb3cgd2UgaGF2ZSBhbiBBQ0wgdG8gdXNlLiBJdCdzIHBvc3NpYmxlIGl0IG1heSBiZSBOVUxM
LiAqLwogCi13aGlsZSAoYWNsKQord2hpbGUgKChhY2xfY3VycmVudCA9IGFjbCkpCiAgIHsKICAg
aW50IGNvbmQ7CiAgIGludCBiYXNpY19lcnJubyA9IDA7CkBAIC00MjE1LDggKzQ1MjAsOCBAQAog
ICAgICAgZWxzZSBpZiAoY29uZCA9PSBERUZFUiAmJiBMT0dHSU5HKGFjbF93YXJuX3NraXBwZWQp
KQogCWxvZ193cml0ZSgwLCBMT0dfTUFJTiwgIiVzIFdhcm5pbmc6IEFDTCBcIndhcm5cIiBzdGF0
ZW1lbnQgc2tpcHBlZDogIgogCSAgImNvbmRpdGlvbiB0ZXN0IGRlZmVycmVkJXMlcyIsIGhvc3Rf
YW5kX2lkZW50KFRSVUUpLAotCSAgKCpsb2dfbXNncHRyID09IE5VTEwpPyBVUyIiIDogVVMiOiAi
LAotCSAgKCpsb2dfbXNncHRyID09IE5VTEwpPyBVUyIiIDogKmxvZ19tc2dwdHIpOworCSAgKmxv
Z19tc2dwdHIgPyBVUyI6ICIgOiBVUyIiLAorCSAgKmxvZ19tc2dwdHIgPyAqbG9nX21zZ3B0ciA6
IFVTIiIpOwogICAgICAgKmxvZ19tc2dwdHIgPSAqdXNlcl9tc2dwdHIgPSBOVUxMOyAgLyogSW4g
Y2FzZSBpbXBsaWNpdCBERU5ZIGZvbGxvd3MgKi8KICAgICAgIGJyZWFrOwogCkBAIC00NTQxLDcg
KzQ4NDYsNyBAQAogdHJlZV9ub2RlICogbm9kZSwgKiogcm9vdCA9IG5hbWVbMF0gPT0gJ2MnID8g
JmFjbF92YXJfYyA6ICZhY2xfdmFyX207CiBpZiAoIShub2RlID0gdHJlZV9zZWFyY2goKnJvb3Qs
IG5hbWUpKSkKICAgewotICBub2RlID0gc3RvcmVfZ2V0KHNpemVvZih0cmVlX25vZGUpICsgVXN0
cmxlbihuYW1lKSwgaXNfdGFpbnRlZChuYW1lKSk7CisgIG5vZGUgPSBzdG9yZV9nZXQoc2l6ZW9m
KHRyZWVfbm9kZSkgKyBVc3RybGVuKG5hbWUpLCBuYW1lKTsKICAgVXN0cmNweShub2RlLT5uYW1l
LCBuYW1lKTsKICAgKHZvaWQpdHJlZV9pbnNlcnRub2RlKHJvb3QsIG5vZGUpOwogICB9CkBAIC00
NTcyLDEzICs0ODc3LDIwIEBACiAqLwogCiB2b2lkCi1hY2xfdmFyX3dyaXRlKHVzY2hhciAqbmFt
ZSwgdXNjaGFyICp2YWx1ZSwgdm9pZCAqY3R4KQorYWNsX3Zhcl93cml0ZSh1c2NoYXIgKiBuYW1l
LCB1c2NoYXIgKiB2YWx1ZSwgdm9pZCAqIGN0eCkKIHsKLUZJTEUgKmYgPSAoRklMRSAqKWN0eDsK
LWlmIChpc190YWludGVkKHZhbHVlKSkgcHV0YygnLScsIGYpOwotZnByaW50ZihmLCAiLWFjbCVj
ICVzICVkXG4lc1xuIiwgbmFtZVswXSwgbmFtZSsxLCBVc3RybGVuKHZhbHVlKSwgdmFsdWUpOwor
RklMRSAqIGYgPSAoRklMRSAqKWN0eDsKK3B1dGMoJy0nLCBmKTsKK2lmIChpc190YWludGVkKHZh
bHVlKSkKKyAgeworICBpbnQgcSA9IHF1b3Rlcl9mb3JfYWRkcmVzcyh2YWx1ZSk7CisgIHB1dGMo
Jy0nLCBmKTsKKyAgaWYgKGlzX3JlYWxfcXVvdGVyKHEpKSBmcHJpbnRmKGYsICIoJXMpIiwgbG9v
a3VwX2xpc3RbcV0tPm5hbWUpOworICB9CitmcHJpbnRmKGYsICJhY2wlYyAlcyAlZFxuJXNcbiIs
IG5hbWVbMF0sIG5hbWUrMSwgVXN0cmxlbih2YWx1ZSksIHZhbHVlKTsKIH0KIAorI2VuZGlmCS8q
ICFNQUNST19QUkVERUYgKi8KIC8qIHZpOiBhdyBhaSBzdz0yCiAqLwogLyogRW5kIG9mIGFjbC5j
ICovCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvYXJjLmMgZXhpbS9zcmMvYXJjLmMKLS0tIGV4aW0u
b3JpZy9zcmMvYXJjLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4
aW0vc3JjL2FyYy5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0zLDYg
KzMsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KIC8qIEV4cGVyaW1lbnRhbCBBUkMgc3VwcG9ydCBmb3IgRXhpbQogICAgQ29weXJpZ2h0IChj
KSBKZXJlbXkgSGFycmlzIDIwMTggLSAyMDIwCisgICBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1h
aW50YWluZXJzIDIwMjEgLSAyMDIyCiAgICBMaWNlbnNlOiBHUEwKICovCiAKQEAgLTE0MSw3ICsx
NDIsNyBAQAogICB9CiAKIERFQlVHKERfYWNsKSBkZWJ1Z19wcmludGYoIkFSQzogbmV3IGluc3Rh
bmNlICV1XG4iLCBpKTsKLSpwYXMgPSBhcyA9IHN0b3JlX2dldChzaXplb2YoYXJjX3NldCksIEZB
TFNFKTsKKypwYXMgPSBhcyA9IHN0b3JlX2dldChzaXplb2YoYXJjX3NldCksIEdFVF9VTlRBSU5U
RUQpOwogbWVtc2V0KGFzLCAwLCBzaXplb2YoYXJjX3NldCkpOwogYXMtPm5leHQgPSBuZXh0Owog
YXMtPnByZXYgPSBwcmV2OwpAQCAtMTk5LDcgKzIwMCw3IEBACiAKIGlmICghaW5zdGFuY2Vfb25s
eSkKICAgewotICBhbC0+cmF3c2lnX25vX2JfdmFsLmRhdGEgPSBzdG9yZV9nZXQoaC0+c2xlbiAr
IDEsIFRSVUUpOwkvKiB0YWludGVkICovCisgIGFsLT5yYXdzaWdfbm9fYl92YWwuZGF0YSA9IHN0
b3JlX2dldChoLT5zbGVuICsgMSwgR0VUX1RBSU5URUQpOwogICBtZW1jcHkoYWwtPnJhd3NpZ19u
b19iX3ZhbC5kYXRhLCBoLT50ZXh0LCBvZmYpOwkvKiBjb3B5IHRoZSBoZWFkZXIgbmFtZSBibGlu
ZCAqLwogICByID0gYWwtPnJhd3NpZ19ub19iX3ZhbC5kYXRhICsgb2ZmOwogICBhbC0+cmF3c2ln
X25vX2JfdmFsLmxlbiA9IG9mZjsKQEAgLTM4NSw3ICszODYsNyBAQAogewogdW5zaWduZWQgaTsK
IGFyY19zZXQgKiBhczsKLWFyY19saW5lICogYWwgPSBzdG9yZV9nZXQoc2l6ZW9mKGFyY19saW5l
KSwgRkFMU0UpLCAqKiBhbHA7CithcmNfbGluZSAqIGFsID0gc3RvcmVfZ2V0KHNpemVvZihhcmNf
bGluZSksIEdFVF9VTlRBSU5URUQpLCAqKiBhbHA7CiB1c2NoYXIgKiBlOwogCiBtZW1zZXQoYWws
IDAsIHNpemVvZihhcmNfbGluZSkpOwpAQCAtNDk2LDcgKzQ5Nyw3IEBACiBERUJVRyhEX2FjbCkg
ZGVidWdfcHJpbnRmKCJBUkM6IGNvbGxlY3RpbmcgYXJjIHNldHNcbiIpOwogZm9yIChoID0gaGVh
ZGVyX2xpc3Q7IGg7IGggPSBoLT5uZXh0KQogICB7Ci0gIHIgPSBzdG9yZV9nZXQoc2l6ZW9mKGhk
cl9ybGlzdCksIEZBTFNFKTsKKyAgciA9IHN0b3JlX2dldChzaXplb2YoaGRyX3JsaXN0KSwgR0VU
X1VOVEFJTlRFRCk7CiAgIHItPnByZXYgPSBycHJldjsKICAgci0+dXNlZCA9IEZBTFNFOwogICBy
LT5oID0gaDsKQEAgLTU2OCw3ICs1NjksNyBAQAogCiAgICAgICBsZW4gPSBVc3RybGVuKHMpOwog
ICAgICAgREVCVUcoRF9hY2wpIHBka2ltX3F1b3RlcHJpbnQocywgbGVuKTsKLSAgICAgIGV4aW1f
c2hhX3VwZGF0ZSgmaGhhc2hfY3R4LCBzLCBVc3RybGVuKHMpKTsKKyAgICAgIGV4aW1fc2hhX3Vw
ZGF0ZV9zdHJpbmcoJmhoYXNoX2N0eCwgcyk7CiAgICAgICByLT51c2VkID0gVFJVRTsKICAgICAg
IGJyZWFrOwogICAgICAgfQpAQCAtMTEwMiw3ICsxMTAzLDcgQEAKIHN0YXRpYyBoZHJfcmxpc3Qg
KgogYXJjX3JsaXN0X2VudHJ5KGhkcl9ybGlzdCAqIGxpc3QsIGNvbnN0IHVzY2hhciAqIHMsIGlu
dCBsZW4pCiB7Ci1oZHJfcmxpc3QgKiByID0gc3RvcmVfZ2V0KHNpemVvZihoZHJfcmxpc3QpICsg
c2l6ZW9mKGhlYWRlcl9saW5lKSwgRkFMU0UpOworaGRyX3JsaXN0ICogciA9IHN0b3JlX2dldChz
aXplb2YoaGRyX3JsaXN0KSArIHNpemVvZihoZWFkZXJfbGluZSksIEdFVF9VTlRBSU5URUQpOwog
aGVhZGVyX2xpbmUgKiBoID0gci0+aCA9IChoZWFkZXJfbGluZSAqKShyKzEpOwogCiByLT5wcmV2
ID0gbGlzdDsKQEAgLTExMTIsMTEgKzExMTMsNiBAQAogaC0+c2xlbiA9IGxlbjsKIGgtPnRleHQg
PSBVUyBzOwogCi0vKiBUaGlzIHdvcmtzIGZvciBlaXRoZXIgTkwgb3IgQ1JMRiBsaW5lczsgYWxz
byBudWwtdGVybWluYXRpb24gKi8KLXdoaWxlICgqKytzKQotICBpZiAoKnMgPT0gJ1xuJyAmJiBz
WzFdICE9ICdcdCcgJiYgc1sxXSAhPSAnICcpIGJyZWFrOwotcysrOwkJLyogbW92ZSBwYXN0IGVu
ZCBvZiBsaW5lICovCi0KIHJldHVybiByOwogfQogCkBAIC0xMTk0LDcgKzExOTAsNyBAQAogewog
aW50IGFhcl9vZmYgPSBnc3RyaW5nX2xlbmd0aChnKTsKIGFyY19zZXQgKiBhcyA9Ci0gIHN0b3Jl
X2dldChzaXplb2YoYXJjX3NldCkgKyBzaXplb2YoYXJjX2xpbmUpICsgc2l6ZW9mKGhlYWRlcl9s
aW5lKSwgRkFMU0UpOworICBzdG9yZV9nZXQoc2l6ZW9mKGFyY19zZXQpICsgc2l6ZW9mKGFyY19s
aW5lKSArIHNpemVvZihoZWFkZXJfbGluZSksIEdFVF9VTlRBSU5URUQpOwogYXJjX2xpbmUgKiBh
bCA9IChhcmNfbGluZSAqKShhcysxKTsKIGhlYWRlcl9saW5lICogaCA9IChoZWFkZXJfbGluZSAq
KShhbCsxKTsKIApAQCAtMTMwNCw3ICsxMzAwLDcgQEAKIGludCBoYXNodHlwZSA9IHBka2ltX2hh
c2huYW1lX3RvX2hhc2h0eXBlKFVTInNoYTI1NiIsIDYpOwkvKlhYWCBoYXJkd2lyZWQgKi8KIGJs
b2Igc2lnOwogaW50IGFtc19vZmY7Ci1hcmNfbGluZSAqIGFsID0gc3RvcmVfZ2V0KHNpemVvZiho
ZWFkZXJfbGluZSkgKyBzaXplb2YoYXJjX2xpbmUpLCBGQUxTRSk7CithcmNfbGluZSAqIGFsID0g
c3RvcmVfZ2V0KHNpemVvZihoZWFkZXJfbGluZSkgKyBzaXplb2YoYXJjX2xpbmUpLCBHRVRfVU5U
QUlOVEVEKTsKIGhlYWRlcl9saW5lICogaCA9IChoZWFkZXJfbGluZSAqKShhbCsxKTsKIAogLyog
ZGVidWdfcHJpbnRmKCIlc1xuIiwgX19GVU5DVElPTl9fKTsgKi8KQEAgLTE0MTksNyArMTQxNSw3
IEBACiB7CiBnc3RyaW5nICogYXJjc2V0OwogdXNjaGFyICogc3RhdHVzID0gYXJjX2FyX2N2X3N0
YXR1cyhhcik7Ci1hcmNfbGluZSAqIGFsID0gc3RvcmVfZ2V0KHNpemVvZihoZWFkZXJfbGluZSkg
KyBzaXplb2YoYXJjX2xpbmUpLCBGQUxTRSk7CithcmNfbGluZSAqIGFsID0gc3RvcmVfZ2V0KHNp
emVvZihoZWFkZXJfbGluZSkgKyBzaXplb2YoYXJjX2xpbmUpLCBHRVRfVU5UQUlOVEVEKTsKIGhl
YWRlcl9saW5lICogaCA9IChoZWFkZXJfbGluZSAqKShhbCsxKTsKIHVzY2hhciAqIGJhZGxpbmVf
c3RyOwogCkBAIC0xNTMxLDYgKzE1MjcsNyBAQAogYXJjX3NpZ25faW5pdCh2b2lkKQogewogbWVt
c2V0KCZhcmNfc2lnbl9jdHgsIDAsIHNpemVvZihhcmNfc2lnbl9jdHgpKTsKK2hlYWRlcnNfcmxp
c3QgPSBOVUxMOwogfQogCiAKQEAgLTE1NTcsNiArMTU1NCwyMyBAQAogCiAKIAorLyogUGVyIFJG
Q3MgNjM3NiwgNzQ4OSB0aGUgb25seSBhbGxvd2VkIGNoYXJzIGluIGVpdGhlciBhbiBBRE1EIGlk
CitvciBhIHNlbGVjdG9yIGFyZSBBTFBIQS9ESUdHSVQvJy0nLycuJworCitDaGVjaywgdG8gaGVs
cCBjYXRjaCBtaXNjb25maWd1cmF0aW9ucyBzdWNoIGFzIGEgbWlzc2luZyBzZWxlY3RvcgorZWxl
bWVudCBpbiB0aGUgYXJjX3NpZ24gbGlzdC4KKyovCisKK3N0YXRpYyBCT09MCithcmNfdmFsaWRf
aWQoY29uc3QgdXNjaGFyICogcykKK3sKK2ZvciAodXNjaGFyIGM7IGMgPSAqcysrOyApCisgIGlm
ICghaXNhbG51bShjKSAmJiBjICE9ICctJyAmJiBjICE9ICcuJykgcmV0dXJuIEZBTFNFOworcmV0
dXJuIFRSVUU7Cit9CisKKworCiAvKiBBUkMgc2lnbmluZy4gIENhbGxlZCBmcm9tIHRoZSBzbXRw
IHRyYW5zcG9ydCwgaWYgdGhlIGFyY19zaWduIG9wdGlvbiBpcyBzZXQuCiBUaGUgZGtpbV9leGlt
X3NpZ24oKSBmdW5jdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCwgc28gd2lsbCBoYXZlIGhh
c2hlZCB0aGUKIG1lc3NhZ2UgYm9keSBmb3IgdXMgc28gbG9uZyBhcyB3ZSByZXF1ZXN0ZWQgYSBo
YXNoIHByZXZpb3VzbHkuCkBAIC0xNTkwLDE3ICsxNjA0LDE4IEBACiAKIC8qIFBhcnNlIHRoZSBz
aWduaW5nIHNwZWNpZmljYXRpb24gKi8KIAotaWRlbnRpdHkgPSBzdHJpbmdfbmV4dGlubGlzdCgm
c2lnbnNwZWMsICZzZXAsIE5VTEwsIDApOwotc2VsZWN0b3IgPSBzdHJpbmdfbmV4dGlubGlzdCgm
c2lnbnNwZWMsICZzZXAsIE5VTEwsIDApOwotaWYgKCAgISppZGVudGl0eSB8fCAhKnNlbGVjdG9y
Ci0gICB8fCAhKHByaXZrZXkgPSBzdHJpbmdfbmV4dGlubGlzdCgmc2lnbnNwZWMsICZzZXAsIE5V
TEwsIDApKSB8fCAhKnByaXZrZXkpCi0gIHsKLSAgbG9nX3dyaXRlKDAsIExPR19NQUlOLCAiQVJD
OiBiYWQgc2lnbmluZy1zcGVjaWZpY2F0aW9uICglcykiLAotICAgICEqaWRlbnRpdHkgPyAiaWRl
bnRpdHkiIDogISpzZWxlY3RvciA/ICJzZWxlY3RvciIgOiAicHJpdmF0ZS1rZXkiKTsKLSAgcmV0
dXJuIHNpZ2hlYWRlcnMgPyBzaWdoZWFkZXJzIDogc3RyaW5nX2dldCgwKTsKLSAgfQoraWYgKCEo
aWRlbnRpdHkgPSBzdHJpbmdfbmV4dGlubGlzdCgmc2lnbnNwZWMsICZzZXAsIE5VTEwsIDApKSB8
fCAhKmlkZW50aXR5KQorICB7IHMgPSBVUyJpZGVudGl0eSI7IGdvdG8gYmFkX2FyZ19yZXQ7IH0K
K2lmICghKHNlbGVjdG9yID0gc3RyaW5nX25leHRpbmxpc3QoJnNpZ25zcGVjLCAmc2VwLCBOVUxM
LCAwKSkgfHwgISpzZWxlY3RvcikKKyAgeyBzID0gVVMic2VsZWN0b3IiOyBnb3RvIGJhZF9hcmdf
cmV0OyB9CitpZiAoIShwcml2a2V5ID0gc3RyaW5nX25leHRpbmxpc3QoJnNpZ25zcGVjLCAmc2Vw
LCBOVUxMLCAwKSkgIHx8ICEqcHJpdmtleSkKKyAgeyBzID0gVVMicHJpdmtleSI7IGdvdG8gYmFk
X2FyZ19yZXQ7IH0KK2lmICghYXJjX3ZhbGlkX2lkKGlkZW50aXR5KSkKKyAgeyBzID0gVVMiaWRl
bnRpdHkiOyBnb3RvIGJhZF9hcmdfcmV0OyB9CitpZiAoIWFyY192YWxpZF9pZChzZWxlY3Rvcikp
CisgIHsgcyA9IFVTInNlbGVjdG9yIjsgZ290byBiYWRfYXJnX3JldDsgfQogaWYgKCpwcml2a2V5
ID09ICcvJyAmJiAhKHByaXZrZXkgPSBleHBhbmRfZmlsZV9iaWdfYnVmZmVyKHByaXZrZXkpKSkK
LSAgcmV0dXJuIHNpZ2hlYWRlcnMgPyBzaWdoZWFkZXJzIDogc3RyaW5nX2dldCgwKTsKKyAgZ290
byByZXRfc2lnaGVhZGVyczsKIAogaWYgKChvcHRzID0gc3RyaW5nX25leHRpbmxpc3QoJnNpZ25z
cGVjLCAmc2VwLCBOVUxMLCAwKSkpCiAgIHsKQEAgLTE2NTksNyArMTY3NCw3IEBACiBpZiAoIShh
cmNfc2lnbl9maW5kX2FyKGhlYWRlcnMsIGlkZW50aXR5LCAmYXIpKSkKICAgewogICBsb2dfd3Jp
dGUoMCwgTE9HX01BSU4sICJBUkM6IG5vIEF1dGhlbnRpY2F0aW9uLVJlc3VsdHMgaGVhZGVyIGZv
ciBzaWduaW5nIik7Ci0gIHJldHVybiBzaWdoZWFkZXJzID8gc2lnaGVhZGVycyA6IHN0cmluZ19n
ZXQoMCk7CisgIGdvdG8gcmV0X3NpZ2hlYWRlcnM7CiAgIH0KIAogLyogV2UgcHJldmlvdXNseSBi
dWlsdCB0aGUgZGF0YS1zdHJ1Y3QgZm9yIHRoZSBleGlzdGluZyBBUkMgY2hhaW4sIGlmIGFueSwg
dXNpbmcgYSBoZWFkZXJzCkBAIC0xNzE1LDkgKzE3MzAsMTkgQEAKIC8qIEZpbmFsbHksIGFwcGVu
ZCB0aGUgZGtpbSBoZWFkZXJzIGFuZCByZXR1cm4gdGhlIGxvdC4gKi8KIAogaWYgKHNpZ2hlYWRl
cnMpIGcgPSBzdHJpbmdfY2F0bihnLCBzaWdoZWFkZXJzLT5zLCBzaWdoZWFkZXJzLT5wdHIpOwot
KHZvaWQpIHN0cmluZ19mcm9tX2dzdHJpbmcoZyk7Ci1nc3RyaW5nX3JlbGVhc2VfdW51c2VkKGcp
OwotcmV0dXJuIGc7CisKK291dDoKKyAgaWYgKCFnKSByZXR1cm4gc3RyaW5nX2dldCgxKTsKKyAg
KHZvaWQpIHN0cmluZ19mcm9tX2dzdHJpbmcoZyk7CisgIGdzdHJpbmdfcmVsZWFzZV91bnVzZWQo
Zyk7CisgIHJldHVybiBnOworCisKK2JhZF9hcmdfcmV0OgorICBsb2dfd3JpdGUoMCwgTE9HX01B
SU4sICJBUkM6IGJhZCBzaWduaW5nLXNwZWNpZmljYXRpb24gKCVzKSIsIHMpOworcmV0X3NpZ2hl
YWRlcnM6CisgIGcgPSBzaWdoZWFkZXJzOworICBnb3RvIG91dDsKIH0KIAogCmRpZmYgLXVyIGV4
aW0ub3JpZy9zcmMvYXV0aHMvYXV0aC1zcGEuYyBleGltL3NyYy9hdXRocy9hdXRoLXNwYS5jCi0t
LSBleGltLm9yaWcvc3JjL2F1dGhzL2F1dGgtc3BhLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2F1dGhzL2F1dGgtc3BhLmMJMjAyMi0wNi0yMyAxNjo0
MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTgsNiArOCw4IEBACiAKICAqIEFsbCB0aGUgb3JpZ2lu
YWwgY29kZSB1c2VkIGhlcmUgd2FzIHRvcm4gYnkgTWFyYyBQcnVkJ2hvbW1lYXV4IG91dCBvZiB0
aGUKICAqIFNhbWJhIHByb2plY3QgKGJ5IEFuZHJldyBUcmlkZ2VsbCwgSmVyZW15IEFsbGlzb24s
IGFuZCBvdGhlcnMpLgorICoKKyAqIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMg
MjAyMQogCiAgKiBUb20gS2lzdG5lciBwcm92aWRlZCBhZGRpdGlvbmFsIGNvZGUsIGFkZGluZyBz
cGFfYnVpbGRfYXV0aF9jaGFsbGVuZ2UoKSB0bwogICogc3VwcG9ydCBzZXJ2ZXIgYXV0aGVudGlj
YXRpb24gbW9kZS4KQEAgLTEzOTUsOCArMTM5Nyw2IEBACiBpbnQgcCA9IChpbnQpZ2V0cGlkKCk7
CiBpbnQgcmFuZG9tX3NlZWQgPSAoaW50KXRpbWUoTlVMTCkgXiAoKHAgPDwgMTYpIHwgcCk7CiAK
LXJlcXVlc3QgPSByZXF1ZXN0OyAgLyogQWRkZWQgYnkgUEggdG8gc3RvcCBjb21waWxlcnMgd2hp
bmdpbmcgKi8KLQogLyogRW5zdXJlIGNoYWxsZW5nZSBkYXRhIGlzIGNsZWFyZWQsIGluIGNhc2Ug
aXQgaXNuJ3QgYWxsIHVzZWQuIFRoaXMKIHBhdGNoIGFkZGVkIGJ5IFBIIG9uIHN1Z2dlc3Rpb24g
b2YgUnVzc2VsbCBLaW5nICovCiAKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9hdXRocy9jYWxsX3Bh
bS5jIGV4aW0vc3JjL2F1dGhzL2NhbGxfcGFtLmMKLS0tIGV4aW0ub3JpZy9zcmMvYXV0aHMvY2Fs
bF9wYW0uYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMv
YXV0aHMvY2FsbF9wYW0uYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAt
Myw3ICszLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCiAKIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAt
IDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwor
LyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMSAqLwogLyog
U2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlv
bi4gKi8KIAogI2luY2x1ZGUgIi4uL2V4aW0uaCIKQEAgLTg4LDcgKzg4LDcgQEAKIAlhcmcgPSBV
UyIiOwogCXBhbV9hcmdfZW5kZWQgPSBUUlVFOwogCX0KLSAgICAgIHJlcGx5W2ldLnJlc3AgPSBD
UyBzdHJpbmdfY29weV9tYWxsb2MoYXJnKTsgLyogUEFNIGZyZWVzIHJlc3AgKi8KKyAgICAgIHJl
cGx5W2ldLnJlc3AgPSBzdHJkdXAoQ0NTIGFyZyk7IC8qIFVzZSBsaWJjIG1hbGxvYywgUEFNIGZy
ZWVzIHJlc3AgZGlyZWN0bHkqLwogICAgICAgcmVwbHlbaV0ucmVzcF9yZXRjb2RlID0gUEFNX1NV
Q0NFU1M7CiAgICAgICBicmVhazsKIApkaWZmIC11ciBleGltLm9yaWcvc3JjL2F1dGhzL2NhbGxf
cmFkaXVzLmMgZXhpbS9zcmMvYXV0aHMvY2FsbF9yYWRpdXMuYwotLS0gZXhpbS5vcmlnL3NyYy9h
dXRocy9jYWxsX3JhZGl1cy5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisr
KyBleGltL3NyYy9hdXRocy9jYWxsX3JhZGl1cy5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAw
MDAwICswMzAwCkBAIC0yLDIzICsyLDEzIEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFp
bCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KIAotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVy
cyAyMDIwICovCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAy
MDIyICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAy
MDE2ICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQg
ZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBUaGlzIGZpbGUgd2FzIG9yaWdpbmFsbHkgc3VwcGxpZWQg
YnkgSWFuIEtpcmsuIFRoZSBsaWJyYWRpdXMgc3VwcG9ydCBjYW1lCiBmcm9tIEFsZXggS2llcm5h
bi4gKi8KIAotLyogdWdseSBoYWNrIHRvIHdvcmsgYXJvdW5kIHJlZGVmaW5pdGlvbiBvZiBFTlYg
YnkgcmFkaXVzY2xpZW50LmggYW5kCi0gKiBkYi5oOiBkZWZpbmUgX0RCX0hfIHNvIHRoZSBkYi5o
IGluY2x1ZGUgdGhpbmtzIGl0J3MgYWxyZWFkeSBpbmNsdWRlZCwKLSAqIHdlIGNhbiBnZXQgYXdh
eSB3aXRoIGl0IGxpa2UgdGhpcywgc2luY2UgdGhpcyBmaWxlIGRvZXNuJ3QgdXNlIGFueSBkYgot
ICogZnVuY3Rpb25zLiAqLwotI2lmbmRlZiBfREJfSF8KLSMgZGVmaW5lIF9EQl9IXyAxCi0jIGRl
ZmluZSBfREJfRVhUX1BST1RfSU5fIDEKLSMgZGVmaW5lIERCIHZvaWQKLSNlbmRpZgotCiAjaW5j
bHVkZSAiLi4vZXhpbS5oIgogCiAvKiBUaGlzIG1vZHVsZSBjb250YWlucyBmdW5jdGlvbnMgdGhh
dCBjYWxsIHRoZSBSYWRpdXMgYXV0aGVudGljYXRpb24KQEAgLTQ0LDE3ICszNCwxOCBAQAogdXNp
bmcgaXRzIG9yaWdpbmFsIEFQSS4gQXQgcmVsZWFzZSAwLjQuMCB0aGUgQVBJIGNoYW5nZWQuICov
CiAKICNpZmRlZiBSQURJVVNfTElCX1JBRExJQgotICAjaW5jbHVkZSA8cmFkbGliLmg+CisjIGlu
Y2x1ZGUgPHJhZGxpYi5oPgogI2Vsc2UKLSAgI2lmICFkZWZpbmVkKFJBRElVU19MSUJfUkFESVVT
Q0xJRU5UKSAmJiAhZGVmaW5lZChSQURJVVNfTElCX1JBRElVU0NMSUVOVE5FVykKLSAgIyBkZWZp
bmUgUkFESVVTX0xJQl9SQURJVVNDTElFTlQKLSAgI2VuZGlmCi0KLSAgI2lmZGVmIFJBRElVU19M
SUJfUkFESVVTQ0xJRU5UTkVXCi0gICMgaW5jbHVkZSA8ZnJlZXJhZGl1cy1jbGllbnQuaD4KLSAg
I2Vsc2UKLSAgIyBpbmNsdWRlIDxyYWRpdXNjbGllbnQuaD4KLSAgI2VuZGlmCisjIGlmICFkZWZp
bmVkKFJBRElVU19MSUJfUkFESVVTQ0xJRU5UKSAmJiAhZGVmaW5lZChSQURJVVNfTElCX1JBRElV
U0NMSUVOVE5FVykKKyMgIGRlZmluZSBSQURJVVNfTElCX1JBRElVU0NMSUVOVAorIyBlbmRpZgor
CisjIGlmZGVmIFJBRElVU19MSUJfUkFESVVTQ0xJRU5UTkVXCisjICBkZWZpbmUgRU5WIEZSRUVS
QURJVVNDTElFTlRfRU5WCS8qIEF2b2lkIGNsYXNoIHdpdGggQmVya2VsZXkgREIgKi8KKyMgIGlu
Y2x1ZGUgPGZyZWVyYWRpdXMtY2xpZW50Lmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHJhZGl1c2Ns
aWVudC5oPgorIyBlbmRpZgogI2VuZGlmCiAKIApkaWZmIC11ciBleGltLm9yaWcvc3JjL2F1dGhz
L2N5cnVzX3Nhc2wuYyBleGltL3NyYy9hdXRocy9jeXJ1c19zYXNsLmMKLS0tIGV4aW0ub3JpZy9z
cmMvYXV0aHMvY3lydXNfc2FzbC5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAw
CisrKyBleGltL3NyYy9hdXRocy9jeXJ1c19zYXNsLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAw
MDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFp
bCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVy
cyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRn
ZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAy
MDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQg
ZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgY29udHJpYnV0
ZWQgYnkgTWF0dGhldyBCeW5nLU1hZGRpY2sgKi8KQEAgLTcxLDcgKzcxLDcgQEAKIGludCBhdXRo
X2N5cnVzX3Nhc2xfc2VydmVyKGF1dGhfaW5zdGFuY2UgKmFibG9jaywgdXNjaGFyICpkYXRhKSB7
cmV0dXJuIDA7fQogaW50IGF1dGhfY3lydXNfc2FzbF9jbGllbnQoYXV0aF9pbnN0YW5jZSAqYWJs
b2NrLCB2b2lkICogc3gsCiAgIGludCB0aW1lb3V0LCB1c2NoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZz
aXplKSB7cmV0dXJuIDA7fQotdm9pZCBhdXRoX2N5cnVzX3Nhc2xfdmVyc2lvbl9yZXBvcnQoRklM
RSAqZikge30KK2dzdHJpbmcgKiBhdXRoX2N5cnVzX3Nhc2xfdmVyc2lvbl9yZXBvcnQoZ3N0cmlu
ZyAqIGcpIHtyZXR1cm4gTlVMTDt9CiAKICNlbHNlICAgLyohTUFDUk9fUFJFREVGKi8KIApAQCAt
Mzc4LDcgKzM3OCw3IEBACiAgICAgSERFQlVHKERfYXV0aCkKICAgICAgIGRlYnVnX3ByaW50Zigi
Q3lydXMgU0FTTCBsaWJyYXJ5IHdpbGwgbm90IHRlbGwgdXMgdGhlIHVzZXJuYW1lOiAlc1xuIiwK
IAkgIHNhc2xfZXJyc3RyaW5nKHJjLCBOVUxMLCBOVUxMKSk7Ci0gICAgbG9nX3dyaXRlKDAsIExP
R19SRUpFQ1QsICIlcyBhdXRoZW50aWNhdG9yICglcyk6XG4gICIKKyAgICBsb2dfd3JpdGUoMCwg
TE9HX1JFSkVDVCwgIiVzIGF1dGhlbnRpY2F0b3IgKCVzKTogIgogICAgICAgICJDeXJ1cyBTQVNM
IHVzZXJuYW1lIGZldGNoIHByb2JsZW06ICVzIiwgYWJsb2NrLT5uYW1lLCBvYi0+c2VydmVyX21l
Y2gsCiAgICAgICAgc2FzbF9lcnJzdHJpbmcocmMsIE5VTEwsIE5VTEwpKTsKICAgICBzYXNsX2Rp
c3Bvc2UoJmNvbm4pOwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAgICAgICAvKiB0aGVzZSBhcmUgY29u
c2lkZXJlZCBwZXJtYW5lbnQgZmFpbHVyZSBjb2RlcyAqLwogICAgICAgSERFQlVHKERfYXV0aCkK
IAlkZWJ1Z19wcmludGYoIkN5cnVzIFNBU0wgcGVybWFuZW50IGZhaWx1cmUgJWQgKCVzKVxuIiwg
cmMsIHNhc2xfZXJyc3RyaW5nKHJjLCBOVUxMLCBOVUxMKSk7Ci0gICAgICBsb2dfd3JpdGUoMCwg
TE9HX1JFSkVDVCwgIiVzIGF1dGhlbnRpY2F0b3IgKCVzKTpcbiAgIgorICAgICAgbG9nX3dyaXRl
KDAsIExPR19SRUpFQ1QsICIlcyBhdXRoZW50aWNhdG9yICglcyk6ICIKIAkgIkN5cnVzIFNBU0wg
cGVybWFuZW50IGZhaWx1cmU6ICVzIiwgYWJsb2NrLT5uYW1lLCBvYi0+c2VydmVyX21lY2gsCiAJ
IHNhc2xfZXJyc3RyaW5nKHJjLCBOVUxMLCBOVUxMKSk7CiAgICAgICBzYXNsX2Rpc3Bvc2UoJmNv
bm4pOwpAQCAtNDI3LDcgKzQyNyw3IEBACiAJSERFQlVHKERfYXV0aCkKIAkgIGRlYnVnX3ByaW50
ZigiQ3lydXMgU0FTTCBsaWJyYXJ5IHdpbGwgbm90IHRlbGwgdXMgdGhlIFNTRjogJXNcbiIsCiAJ
ICAgICAgc2FzbF9lcnJzdHJpbmcocmMsIE5VTEwsIE5VTEwpKTsKLQlsb2dfd3JpdGUoMCwgTE9H
X1JFSkVDVCwgIiVzIGF1dGhlbnRpY2F0b3IgKCVzKTpcbiAgIgorCWxvZ193cml0ZSgwLCBMT0df
UkVKRUNULCAiJXMgYXV0aGVudGljYXRvciAoJXMpOiAiCiAJICAgICJDeXJ1cyBTQVNMIFNTRiB2
YWx1ZSBub3QgYXZhaWxhYmxlOiAlcyIsIGFibG9jay0+bmFtZSwgb2ItPnNlcnZlcl9tZWNoLAog
CSAgICBzYXNsX2VycnN0cmluZyhyYywgTlVMTCwgTlVMTCkpOwogCXNhc2xfZGlzcG9zZSgmY29u
bik7CkBAIC00NDEsNyArNDQxLDcgQEAKIAl7CiAJSERFQlVHKERfYXV0aCkKIAkgIGRlYnVnX3By
aW50ZigiRXhpbSBkb2VzIG5vdCBpbXBsZW1lbnQgU0FTTCB3cmFwcGluZyAobmVlZGVkIGZvciBT
U0YgJWQpLlxuIiwgbmVnb3RpYXRlZF9zc2YpOwotCWxvZ193cml0ZSgwLCBMT0dfUkVKRUNULCAi
JXMgYXV0aGVudGljYXRvciAoJXMpOlxuICAiCisJbG9nX3dyaXRlKDAsIExPR19SRUpFQ1QsICIl
cyBhdXRoZW50aWNhdG9yICglcyk6ICIKIAkgICAgIkN5cnVzIFNBU0wgU1NGICVkIG5vdCBzdXBw
b3J0ZWQgYnkgRXhpbSIsIGFibG9jay0+bmFtZSwgb2ItPnNlcnZlcl9tZWNoLCBuZWdvdGlhdGVk
X3NzZik7CiAJc2FzbF9kaXNwb3NlKCZjb25uKTsKIAlzYXNsX2RvbmUoKTsKQEAgLTQ3NiwxNSAr
NDc2LDE3IEBACiAqICAgICAgICAgICAgICAgIERpYWdub3N0aWMgQVBJICAgICAgICAgICAgICAg
ICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
IAotdm9pZAotYXV0aF9jeXJ1c19zYXNsX3ZlcnNpb25fcmVwb3J0KEZJTEUgKmYpCitnc3RyaW5n
ICoKK2F1dGhfY3lydXNfc2FzbF92ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykKIHsKLWNvbnN0
IGNoYXIgKmltcGxlbWVudGF0aW9uLCAqdmVyc2lvbjsKK2NvbnN0IGNoYXIgKiBpbXBsZW1lbnRh
dGlvbiwgKiB2ZXJzaW9uOwogc2FzbF92ZXJzaW9uX2luZm8oJmltcGxlbWVudGF0aW9uLCAmdmVy
c2lvbiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci1mcHJpbnRmKGYsICJMaWJyYXJ5IHZlcnNp
b246IEN5cnVzIFNBU0w6IENvbXBpbGU6ICVkLiVkLiVkXG4iCi0JICAgIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUnVudGltZTogJXMgWyVzXVxuIiwKK2cgPSBzdHJpbmdfZm10X2FwcGVu
ZChnLAorCSJMaWJyYXJ5IHZlcnNpb246IEN5cnVzIFNBU0w6IENvbXBpbGU6ICVkLiVkLiVkXG4i
CisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZTogJXMgWyVzXVxuIiwKIAlT
QVNMX1ZFUlNJT05fTUFKT1IsIFNBU0xfVkVSU0lPTl9NSU5PUiwgU0FTTF9WRVJTSU9OX1NURVAs
CiAJdmVyc2lvbiwgaW1wbGVtZW50YXRpb24pOworcmV0dXJuIGc7CiB9CiAKIC8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLXVyIGV4aW0ub3Jp
Zy9zcmMvYXV0aHMvY3lydXNfc2FzbC5oIGV4aW0vc3JjL2F1dGhzL2N5cnVzX3Nhc2wuaAotLS0g
ZXhpbS5vcmlnL3NyYy9hdXRocy9jeXJ1c19zYXNsLmgJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2F1dGhzL2N5cnVzX3Nhc2wuaAkyMDIyLTA2LTIzIDE2
OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw2ICsyLDcgQEAKICogICAgIEV4aW0gLSBhbiBJ
bnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGlt
IE1haW50YWluZXJzIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1i
cmlkZ2UgMTk5NSAtIDIwMTIgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlv
bnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKQEAgLTMwLDYgKzMxLDYgQEAKIGV4dGVy
biB2b2lkIGF1dGhfY3lydXNfc2FzbF9pbml0KGF1dGhfaW5zdGFuY2UgKik7CiBleHRlcm4gaW50
IGF1dGhfY3lydXNfc2FzbF9zZXJ2ZXIoYXV0aF9pbnN0YW5jZSAqLCB1c2NoYXIgKik7CiBleHRl
cm4gaW50IGF1dGhfY3lydXNfc2FzbF9jbGllbnQoYXV0aF9pbnN0YW5jZSAqLCB2b2lkICosIGlu
dCwgdXNjaGFyICosIGludCk7Ci1leHRlcm4gdm9pZCBhdXRoX2N5cnVzX3Nhc2xfdmVyc2lvbl9y
ZXBvcnQoRklMRSAqZik7CitleHRlcm4gZ3N0cmluZyAqIGF1dGhfY3lydXNfc2FzbF92ZXJzaW9u
X3JlcG9ydChnc3RyaW5nICopOwogCiAvKiBFbmQgb2YgY3lydXNfc2FzbC5oICovCmRpZmYgLXVy
IGV4aW0ub3JpZy9zcmMvYXV0aHMvZG92ZWNvdC5jIGV4aW0vc3JjL2F1dGhzL2RvdmVjb3QuYwot
LS0gZXhpbS5vcmlnL3NyYy9hdXRocy9kb3ZlY290LmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2F1dGhzL2RvdmVjb3QuYwkyMDIyLTA2LTIzIDE2OjQx
OjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMSw2ICsxLDYgQEAKIC8qCisgKiBDb3B5cmlnaHQgKGMp
IFRoZSBFeGltIE1haW50YWluZXJzIDIwMDYgLSAyMDIyCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQg
QW5kcmV5IFBhbmluIDxwYXprZUBkb25wYWMucnU+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAy
MCBUaGUgRXhpbSBNYWludGFpbmVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZApA
QCAtMjc1LDExICsyNzUsMjAgQEAKICMgaWZuZGVmIERJU0FCTEVfVExTCiBpZiAob2ItPnNlcnZl
cl90bHMpCiAgIHsKLSAgdXNjaGFyICogczsKKyAgdW5pb24gc29ja2FkZHJfNDYgaW50ZXJmYWNl
X3NvY2s7CisgIEVYSU1fU09DS0xFTl9UIHNpemUgPSBzaXplb2YoaW50ZXJmYWNlX3NvY2spOwog
ICBzbXRwX2Nvbm5lY3RfYXJncyBjb25uX2FyZ3MgPSB7IC5ob3N0ID0gJmhvc3QgfTsKLSAgdGxz
X3N1cHBvcnQgdGxzX2R1bW15ID0gey5zbmk9TlVMTH07CisgIHRsc19zdXBwb3J0IHRsc19kdW1t
eSA9IHsgLnNuaSA9IE5VTEwgfTsKICAgdXNjaGFyICogZXJyc3RyOwogCisgIGlmIChnZXRzb2Nr
bmFtZShjY3R4LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZpbnRlcmZhY2Vfc29jaywgJnNp
emUpID09IDApCisgICAgY29ubl9hcmdzLnNlbmRpbmdfaXBfYWRkcmVzcyA9IGhvc3RfbnRvYSgt
MSwgJmludGVyZmFjZV9zb2NrLCBOVUxMLCBOVUxMKTsKKyAgZWxzZQorICAgIHsKKyAgICAqZXJy
bXNnID0gc3RyaW5nX3NwcmludGYoImdldHNvY2tuYW1lIGZhaWxlZDogJXMiLCBzdHJlcnJvcihl
cnJubykpOworICAgIGdvdG8gYmFkOworICAgIH0KKwogICBpZiAoIXRsc19jbGllbnRfc3RhcnQo
JmNjdHgsICZjb25uX2FyZ3MsIE5VTEwsICZ0bHNfZHVtbXksICZlcnJzdHIpKQogICAgIHsKICAg
ICBhdXRoX2RlZmVyX21zZyA9IHN0cmluZ19zcHJpbnRmKCJUTFMgY29ubmVjdCBmYWlsZWQ6ICVz
IiwgZXJyc3RyKTsKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9hdXRocy9nZXRfZGF0YS5jIGV4aW0v
c3JjL2F1dGhzL2dldF9kYXRhLmMKLS0tIGV4aW0ub3JpZy9zcmMvYXV0aHMvZ2V0X2RhdGEuYwky
MDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvYXV0aHMvZ2V0
X2RhdGEuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMyw3ICszLDcg
QEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAK
IC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8K
LS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLworLyogQ29weXJp
Z2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMSAqLwogLyogU2VlIHRoZSBm
aWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAog
I2luY2x1ZGUgIi4uL2V4aW0uaCIKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9hdXRocy9nc2FzbF9l
eGltLmMgZXhpbS9zcmMvYXV0aHMvZ3Nhc2xfZXhpbS5jCi0tLSBleGltLm9yaWcvc3JjL2F1dGhz
L2dzYXNsX2V4aW0uYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhp
bS9zcmMvYXV0aHMvZ3Nhc2xfZXhpbS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICsw
MzAwCkBAIC0yLDcgKzIsNyBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNw
b3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCiAKLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxOS0y
MDIwICovCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMTkgLSAyMDIy
ICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4
ICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlz
dHJpYnV0aW9uLiAqLwogCkBAIC0yNyw3ICsyNyw2IEBACiAqLwogCiAjaW5jbHVkZSAiLi4vZXhp
bS5oIgotI2RlZmluZSBDSEFOTkVMQklORF9IQUNLCiAKICNpZm5kZWYgQVVUSF9HU0FTTAogLyog
ZHVtbXkgZnVuY3Rpb24gdG8gc2F0aXNmeSBjb21waWxlcnMgd2hlbiB3ZSBsaW5rIGluIGFuICJl
bXB0eSIgZmlsZS4gKi8KQEAgLTQwLDE0ICszOSwyOCBAQAogI2luY2x1ZGUgImdzYXNsX2V4aW0u
aCIKIAogCi0jaWYgR1NBU0xfVkVSU0lPTl9NSU5PUiA+PSA5CisjaWYgR1NBU0xfVkVSU0lPTl9N
SU5PUiA+PSAxMAorIyBkZWZpbmUgRVhJTV9HU0FTTF9IQVZFX1NDUkFNX1NIQV8yNTYKKyMgZGVm
aW5lIEVYSU1fR1NBU0xfU0NSQU1fU19LRVkKKworI2VsaWYgR1NBU0xfVkVSU0lPTl9NSU5PUiA9
PSA5CiAjIGRlZmluZSBFWElNX0dTQVNMX0hBVkVfU0NSQU1fU0hBXzI1NgogCiAjIGlmIEdTQVNM
X1ZFUlNJT05fUEFUQ0ggPj0gMQogIyAgZGVmaW5lIEVYSU1fR1NBU0xfU0NSQU1fU19LRVkKICMg
ZW5kaWYKKyMgaWYgR1NBU0xfVkVSU0lPTl9QQVRDSCA8IDIKKyMgIGRlZmluZSBDSEFOTkVMQklO
RF9IQUNLCisjIGVuZGlmCisKKyNlbHNlCisjIGRlZmluZSBDSEFOTkVMQklORF9IQUNLCiAjZW5k
aWYKIAorLyogQ29udmVuaWVuY2UgZm9yIHRlc3Rpbmcgc3RyaW5ncyAqLworCisjZGVmaW5lIFNU
UkVRSUMoRm9vLCBCYXIpIChzdHJjbXBpYygoRm9vKSwgKEJhcikpID09IDApCisKIAogLyogQXV0
aGVudGljYXRvci1zcGVjaWZpYyBvcHRpb25zLiAqLwogLyogSSBkaWQgaGF2ZSBzZXJ2ZXJfKl9j
b25kaXRpb24gb3B0aW9ucyBmb3IgdmFyaW91cyBtZWNoYW5pc21zLCBidXQgc2luY2UKQEAgLTk5
LDcgKzExMiw3IEBACiBpbnQgYXV0aF9nc2FzbF9zZXJ2ZXIoYXV0aF9pbnN0YW5jZSAqYWJsb2Nr
LCB1c2NoYXIgKmRhdGEpIHtyZXR1cm4gMDt9CiBpbnQgYXV0aF9nc2FzbF9jbGllbnQoYXV0aF9p
bnN0YW5jZSAqYWJsb2NrLCB2b2lkICogc3gsCiAgIGludCB0aW1lb3V0LCB1c2NoYXIgKmJ1ZmZl
ciwgaW50IGJ1ZmZzaXplKSB7cmV0dXJuIDA7fQotdm9pZCBhdXRoX2dzYXNsX3ZlcnNpb25fcmVw
b3J0KEZJTEUgKmYpIHt9Citnc3RyaW5nICogYXV0aF9nc2FzbF92ZXJzaW9uX3JlcG9ydChnc3Ry
aW5nICogZykge3JldHVybiBOVUxMO30KIAogdm9pZAogYXV0aF9nc2FzbF9tYWNyb3Modm9pZCkK
QEAgLTE5MSwxNSArMjA0LDIxIEBACiAJICAgICJHTlUgU0FTTCBkb2VzIG5vdCBzdXBwb3J0IG1l
Y2hhbmlzbSBcIiVzXCIiLAogCSAgICBhYmxvY2stPm5hbWUsIG9iLT5zZXJ2ZXJfbWVjaCk7CiAK
LWFibG9jay0+c2VydmVyID0gVFJVRTsKK2lmIChhYmxvY2stPnNlcnZlcl9jb25kaXRpb24pCisg
IGFibG9jay0+c2VydmVyID0gVFJVRTsKK2Vsc2UgaWYoICBvYi0+c2VydmVyX21lY2gKKyAgICAg
ICAmJiAhU1RSRVFJQyhvYi0+c2VydmVyX21lY2gsIFVTIkVYVEVSTkFMIikKKyAgICAgICAmJiAh
U1RSRVFJQyhvYi0+c2VydmVyX21lY2gsIFVTIkFOT05ZTU9VUyIpCisgICAgICAgJiYgIVNUUkVR
SUMob2ItPnNlcnZlcl9tZWNoLCBVUyJQTEFJTiIpCisgICAgICAgJiYgIVNUUkVRSUMob2ItPnNl
cnZlcl9tZWNoLCBVUyJMT0dJTiIpCisgICAgICAgKQorICB7CisgIC8qIEF0IHByZXNlbnQsIGZv
ciBtZWNoYW5pc21zIHdlIGRvbid0IHBhbmljIG9uIGFic2VuY2Ugb2Ygc2VydmVyX2NvbmRpdGlv
bjsKKyAgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtb3N0IGdlbmVyaWNhbGx5IGNvcnJlY3QgYXBw
cm9hY2ggdG8gZGVjaWRpbmcgd2hlbgorICBpdCdzIGNyaXRpY2FsIGFuZCB3aGVuIGl0IGlzbid0
LiAgRWcsIGZvciBzaW1wbGUgdmFsaWRhdGlvbiAoUExBSU4gbWVjaGFuaXNtLAorICBldGMpIGl0
IGNsZWFybHkgaXMgY3JpdGljYWwuCisgICovCiAKLWlmICggICFhYmxvY2stPnNlcnZlcl9jb25k
aXRpb24KLSAgICYmICggIHN0cmVxaWMob2ItPnNlcnZlcl9tZWNoLCBVUyJFWFRFUk5BTCIpCi0g
ICAgICB8fCBzdHJlcWljKG9iLT5zZXJ2ZXJfbWVjaCwgVVMiQU5PTllNT1VTIikKLSAgICAgIHx8
IHN0cmVxaWMob2ItPnNlcnZlcl9tZWNoLCBVUyJQTEFJTiIpCi0gICAgICB8fCBzdHJlcWljKG9i
LT5zZXJ2ZXJfbWVjaCwgVVMiTE9HSU4iKQotICAgKSAgKQotICB7CiAgIGFibG9jay0+c2VydmVy
ID0gRkFMU0U7CiAgIEhERUJVRyhEX2F1dGgpIGRlYnVnX3ByaW50ZigiJXMgYXV0aGVudGljYXRv
cjogICIKIAkgICAgIk5lZWQgc2VydmVyX2NvbmRpdGlvbiBmb3IgJXMgbWVjaGFuaXNtXG4iLApA
QCAtMjEwLDcgKzIyOSw3IEBACiB3aGljaCBwcm9wZXJ0aWVzIHdpbGwgYmUgbmVlZGVkLiAqLwog
CiBpZiAoICAhb2ItPnNlcnZlcl9yZWFsbQotICAgJiYgc3RyZXFpYyhvYi0+c2VydmVyX21lY2gs
IFVTIkRJR0VTVC1NRDUiKSkKKyAgICYmIFNUUkVRSUMob2ItPnNlcnZlcl9tZWNoLCBVUyJESUdF
U1QtTUQ1IikpCiAgIHsKICAgYWJsb2NrLT5zZXJ2ZXIgPSBGQUxTRTsKICAgSERFQlVHKERfYXV0
aCkgZGVidWdfcHJpbnRmKCIlcyBhdXRoZW50aWNhdG9yOiAgIgpAQCAtMjE4LDEyICsyMzcsNiBA
QAogCSAgICBhYmxvY2stPm5hbWUsIG9iLT5zZXJ2ZXJfbWVjaCk7CiAgIH0KIAotLyogQXQgcHJl
c2VudCwgZm9yIG1lY2hhbmlzbXMgd2UgZG9uJ3QgcGFuaWMgb24gYWJzZW5jZSBvZiBzZXJ2ZXJf
Y29uZGl0aW9uOwotbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtb3N0IGdlbmVyaWNhbGx5IGNvcnJl
Y3QgYXBwcm9hY2ggdG8gZGVjaWRpbmcgd2hlbgotaXQncyBjcml0aWNhbCBhbmQgd2hlbiBpdCBp
c24ndC4gIEVnLCBmb3Igc2ltcGxlIHZhbGlkYXRpb24gKFBMQUlOIG1lY2hhbmlzbSwKLWV0Yykg
aXQgY2xlYXJseSBpcyBjcml0aWNhbC4KLSovCi0KIGFibG9jay0+Y2xpZW50ID0gb2ItPmNsaWVu
dF91c2VybmFtZSAmJiBvYi0+Y2xpZW50X3Bhc3N3b3JkOwogfQogCkBAIC0yOTksNDQgKzMxMiw0
MSBAQAogewogc3dpdGNoIChwcm9wKQogICB7Ci0gIGNhc2UgR1NBU0xfQVVUSElEOiByZXR1cm4g
VVMiQVVUSElEIjsKLSAgY2FzZSBHU0FTTF9BVVRIWklEOiByZXR1cm4gVVMiQVVUSFpJRCI7Ci0g
IGNhc2UgR1NBU0xfUEFTU1dPUkQ6IHJldHVybiBVUyJQQVNTV09SRCI7Ci0gIGNhc2UgR1NBU0xf
QU5PTllNT1VTX1RPS0VOOiByZXR1cm4gVVMiQU5PTllNT1VTX1RPS0VOIjsKLSAgY2FzZSBHU0FT
TF9TRVJWSUNFOiByZXR1cm4gVVMiU0VSVklDRSI7Ci0gIGNhc2UgR1NBU0xfSE9TVE5BTUU6IHJl
dHVybiBVUyJIT1NUTkFNRSI7Ci0gIGNhc2UgR1NBU0xfR1NTQVBJX0RJU1BMQVlfTkFNRTogcmV0
dXJuIFVTIkdTU0FQSV9ESVNQTEFZX05BTUUiOwotICBjYXNlIEdTQVNMX1BBU1NDT0RFOiByZXR1
cm4gVVMiUEFTU0NPREUiOwotICBjYXNlIEdTQVNMX1NVR0dFU1RFRF9QSU46IHJldHVybiBVUyJT
VUdHRVNURURfUElOIjsKLSAgY2FzZSBHU0FTTF9QSU46IHJldHVybiBVUyJQSU4iOwotICBjYXNl
IEdTQVNMX1JFQUxNOiByZXR1cm4gVVMiUkVBTE0iOwotICBjYXNlIEdTQVNMX0RJR0VTVF9NRDVf
SEFTSEVEX1BBU1NXT1JEOiByZXR1cm4gVVMiRElHRVNUX01ENV9IQVNIRURfUEFTU1dPUkQiOwot
ICBjYXNlIEdTQVNMX1FPUFM6IHJldHVybiBVUyJRT1BTIjsKLSAgY2FzZSBHU0FTTF9RT1A6IHJl
dHVybiBVUyJRT1AiOwotICBjYXNlIEdTQVNMX1NDUkFNX0lURVI6IHJldHVybiBVUyJTQ1JBTV9J
VEVSIjsKLSAgY2FzZSBHU0FTTF9TQ1JBTV9TQUxUOiByZXR1cm4gVVMiU0NSQU1fU0FMVCI7Ci0g
IGNhc2UgR1NBU0xfU0NSQU1fU0FMVEVEX1BBU1NXT1JEOiByZXR1cm4gVVMiU0NSQU1fU0FMVEVE
X1BBU1NXT1JEIjsKLSNpZmRlZiBFWElNX0dTQVNMX1NDUkFNX1NfS0VZCi0gIGNhc2UgR1NBU0xf
U0NSQU1fU1RPUkVES0VZOiByZXR1cm4gVVMiU0NSQU1fU1RPUkVES0VZIjsKLSAgY2FzZSBHU0FT
TF9TQ1JBTV9TRVJWRVJLRVk6IHJldHVybiBVUyJTQ1JBTV9TRVJWRVJLRVkiOwotI2VuZGlmCi0g
IGNhc2UgR1NBU0xfQ0JfVExTX1VOSVFVRTogcmV0dXJuIFVTIkNCX1RMU19VTklRVUUiOwotICBj
YXNlIEdTQVNMX1NBTUwyMF9JRFBfSURFTlRJRklFUjogcmV0dXJuIFVTIlNBTUwyMF9JRFBfSURF
TlRJRklFUiI7Ci0gIGNhc2UgR1NBU0xfU0FNTDIwX1JFRElSRUNUX1VSTDogcmV0dXJuIFVTIlNB
TUwyMF9SRURJUkVDVF9VUkwiOwotICBjYXNlIEdTQVNMX09QRU5JRDIwX1JFRElSRUNUX1VSTDog
cmV0dXJuIFVTIk9QRU5JRDIwX1JFRElSRUNUX1VSTCI7Ci0gIGNhc2UgR1NBU0xfT1BFTklEMjBf
T1VUQ09NRV9EQVRBOiByZXR1cm4gVVMiT1BFTklEMjBfT1VUQ09NRV9EQVRBIjsKLSAgY2FzZSBH
U0FTTF9TQU1MMjBfQVVUSEVOVElDQVRFX0lOX0JST1dTRVI6IHJldHVybiBVUyJTQU1MMjBfQVVU
SEVOVElDQVRFX0lOX0JST1dTRVIiOwotICBjYXNlIEdTQVNMX09QRU5JRDIwX0FVVEhFTlRJQ0FU
RV9JTl9CUk9XU0VSOiByZXR1cm4gVVMiT1BFTklEMjBfQVVUSEVOVElDQVRFX0lOX0JST1dTRVIi
OworICBjYXNlIEdTQVNMX0FVVEhJRDoJCQlyZXR1cm4gVVMiQVVUSElEIjsKKyAgY2FzZSBHU0FT
TF9BVVRIWklEOgkJCXJldHVybiBVUyJBVVRIWklEIjsKKyAgY2FzZSBHU0FTTF9QQVNTV09SRDoJ
CQlyZXR1cm4gVVMiUEFTU1dPUkQiOworICBjYXNlIEdTQVNMX0FOT05ZTU9VU19UT0tFTjoJCXJl
dHVybiBVUyJBTk9OWU1PVVNfVE9LRU4iOworICBjYXNlIEdTQVNMX1NFUlZJQ0U6CQkJcmV0dXJu
IFVTIlNFUlZJQ0UiOworICBjYXNlIEdTQVNMX0hPU1ROQU1FOgkJCXJldHVybiBVUyJIT1NUTkFN
RSI7CisgIGNhc2UgR1NBU0xfR1NTQVBJX0RJU1BMQVlfTkFNRToJcmV0dXJuIFVTIkdTU0FQSV9E
SVNQTEFZX05BTUUiOworICBjYXNlIEdTQVNMX1BBU1NDT0RFOgkJCXJldHVybiBVUyJQQVNTQ09E
RSI7CisgIGNhc2UgR1NBU0xfU1VHR0VTVEVEX1BJTjoJCXJldHVybiBVUyJTVUdHRVNURURfUElO
IjsKKyAgY2FzZSBHU0FTTF9QSU46CQkJcmV0dXJuIFVTIlBJTiI7CisgIGNhc2UgR1NBU0xfUkVB
TE06CQkJcmV0dXJuIFVTIlJFQUxNIjsKKyAgY2FzZSBHU0FTTF9ESUdFU1RfTUQ1X0hBU0hFRF9Q
QVNTV09SRDoJcmV0dXJuIFVTIkRJR0VTVF9NRDVfSEFTSEVEX1BBU1NXT1JEIjsKKyAgY2FzZSBH
U0FTTF9RT1BTOgkJCXJldHVybiBVUyJRT1BTIjsKKyAgY2FzZSBHU0FTTF9RT1A6CQkJcmV0dXJu
IFVTIlFPUCI7CisgIGNhc2UgR1NBU0xfU0NSQU1fSVRFUjoJCXJldHVybiBVUyJTQ1JBTV9JVEVS
IjsKKyAgY2FzZSBHU0FTTF9TQ1JBTV9TQUxUOgkJcmV0dXJuIFVTIlNDUkFNX1NBTFQiOworICBj
YXNlIEdTQVNMX1NDUkFNX1NBTFRFRF9QQVNTV09SRDoJcmV0dXJuIFVTIlNDUkFNX1NBTFRFRF9Q
QVNTV09SRCI7CiAjaWZkZWYgRVhJTV9HU0FTTF9TQ1JBTV9TX0tFWQotICBjYXNlIEdTQVNMX1ND
UkFNX0NMSUVOVEtFWTogcmV0dXJuIFVTIlNDUkFNX0NMSUVOVEtFWSI7CisgIGNhc2UgR1NBU0xf
U0NSQU1fU1RPUkVES0VZOgkJcmV0dXJuIFVTIlNDUkFNX1NUT1JFREtFWSI7CisgIGNhc2UgR1NB
U0xfU0NSQU1fU0VSVkVSS0VZOgkJcmV0dXJuIFVTIlNDUkFNX1NFUlZFUktFWSI7CiAjZW5kaWYK
LSAgY2FzZSBHU0FTTF9WQUxJREFURV9TSU1QTEU6IHJldHVybiBVUyJWQUxJREFURV9TSU1QTEUi
OwotICBjYXNlIEdTQVNMX1ZBTElEQVRFX0VYVEVSTkFMOiByZXR1cm4gVVMiVkFMSURBVEVfRVhU
RVJOQUwiOwotICBjYXNlIEdTQVNMX1ZBTElEQVRFX0FOT05ZTU9VUzogcmV0dXJuIFVTIlZBTElE
QVRFX0FOT05ZTU9VUyI7Ci0gIGNhc2UgR1NBU0xfVkFMSURBVEVfR1NTQVBJOiByZXR1cm4gVVMi
VkFMSURBVEVfR1NTQVBJIjsKLSAgY2FzZSBHU0FTTF9WQUxJREFURV9TRUNVUklEOiByZXR1cm4g
VVMiVkFMSURBVEVfU0VDVVJJRCI7Ci0gIGNhc2UgR1NBU0xfVkFMSURBVEVfU0FNTDIwOiByZXR1
cm4gVVMiVkFMSURBVEVfU0FNTDIwIjsKLSAgY2FzZSBHU0FTTF9WQUxJREFURV9PUEVOSUQyMDog
cmV0dXJuIFVTIlZBTElEQVRFX09QRU5JRDIwIjsKKyAgY2FzZSBHU0FTTF9DQl9UTFNfVU5JUVVF
OgkJcmV0dXJuIFVTIkNCX1RMU19VTklRVUUiOworICBjYXNlIEdTQVNMX1NBTUwyMF9JRFBfSURF
TlRJRklFUjoJcmV0dXJuIFVTIlNBTUwyMF9JRFBfSURFTlRJRklFUiI7CisgIGNhc2UgR1NBU0xf
U0FNTDIwX1JFRElSRUNUX1VSTDoJcmV0dXJuIFVTIlNBTUwyMF9SRURJUkVDVF9VUkwiOworICBj
YXNlIEdTQVNMX09QRU5JRDIwX1JFRElSRUNUX1VSTDoJcmV0dXJuIFVTIk9QRU5JRDIwX1JFRElS
RUNUX1VSTCI7CisgIGNhc2UgR1NBU0xfT1BFTklEMjBfT1VUQ09NRV9EQVRBOglyZXR1cm4gVVMi
T1BFTklEMjBfT1VUQ09NRV9EQVRBIjsKKyAgY2FzZSBHU0FTTF9TQU1MMjBfQVVUSEVOVElDQVRF
X0lOX0JST1dTRVI6CXJldHVybiBVUyJTQU1MMjBfQVVUSEVOVElDQVRFX0lOX0JST1dTRVIiOwor
ICBjYXNlIEdTQVNMX09QRU5JRDIwX0FVVEhFTlRJQ0FURV9JTl9CUk9XU0VSOglyZXR1cm4gVVMi
T1BFTklEMjBfQVVUSEVOVElDQVRFX0lOX0JST1dTRVIiOworICBjYXNlIEdTQVNMX1ZBTElEQVRF
X1NJTVBMRToJCXJldHVybiBVUyJWQUxJREFURV9TSU1QTEUiOworICBjYXNlIEdTQVNMX1ZBTElE
QVRFX0VYVEVSTkFMOgkJcmV0dXJuIFVTIlZBTElEQVRFX0VYVEVSTkFMIjsKKyAgY2FzZSBHU0FT
TF9WQUxJREFURV9BTk9OWU1PVVM6CXJldHVybiBVUyJWQUxJREFURV9BTk9OWU1PVVMiOworICBj
YXNlIEdTQVNMX1ZBTElEQVRFX0dTU0FQSToJCXJldHVybiBVUyJWQUxJREFURV9HU1NBUEkiOwor
ICBjYXNlIEdTQVNMX1ZBTElEQVRFX1NFQ1VSSUQ6CQlyZXR1cm4gVVMiVkFMSURBVEVfU0VDVVJJ
RCI7CisgIGNhc2UgR1NBU0xfVkFMSURBVEVfU0FNTDIwOgkJcmV0dXJuIFVTIlZBTElEQVRFX1NB
TUwyMCI7CisgIGNhc2UgR1NBU0xfVkFMSURBVEVfT1BFTklEMjA6CQlyZXR1cm4gVVMiVkFMSURB
VEVfT1BFTklEMjAiOwogICB9CiByZXR1cm4gQ1VTIHN0cmluZ19zcHJpbnRmKCIodW5rbm93biBw
cm9wOiAlZCkiLCAoaW50KXByb3ApOwogfQpAQCAtMzY1LDcgKzM3NSw3IEBACiAjaWZuZGVmIERJ
U0FCTEVfVExTCiBpZiAodGxzX2luLmNoYW5uZWxiaW5kaW5nICYmIG9iLT5zZXJ2ZXJfY2hhbm5l
bGJpbmRpbmcpCiAgIHsKLSMgaWZkZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUKKyMgaWZuZGVm
IERJU0FCTEVfVExTX1JFU1VNRQogICBpZiAoIXRsc19pbi5leHRfbWFzdGVyX3NlY3JldCAmJiB0
bHNfaW4ucmVzdW1wdGlvbiA9PSBSRVNVTUVfVVNFRCkKICAgICB7CQkvKiBwZXIgUkZDIDc2Nzcg
c2VjdGlvbiA0ICovCiAgICAgSERFQlVHKERfYXV0aCkgZGVidWdfcHJpbnRmKApAQCAtMzc0LDkg
KzM4NCw5IEBACiAgICAgfQogIyBlbmRpZgogIyBpZmRlZiBDSEFOTkVMQklORF9IQUNLCi0vKiBU
aGlzIGlzIGEgZ3Jvc3MgaGFjayB0byBnZXQgYXJvdW5kIHRoZSBsaWJyYXJ5IGEpIHJlcXVpcmlu
ZyB0aGF0Ci1jLWIgd2FzIGFscmVhZHkgc2V0LCBhdCB0aGUgX3N0YXJ0KCkgY2FsbCwgYW5kIGIp
IGNhY2hpbmcgYSBiNjQnZAotdmVyc2lvbiBvZiB0aGUgYmluZGluZyB0aGVuIHdoaWNoIGl0IG5l
dmVyIHVwZGF0ZXMuICovCisvKiBUaGlzIGlzIGEgZ3Jvc3MgaGFjayB0byBnZXQgYXJvdW5kIHRo
ZSBsaWJyYXJ5IGJlZm9yZSAxLjkuMgorYSkgcmVxdWlyaW5nIHRoYXQgYy1iIHdhcyBhbHJlYWR5
IHNldCwgYXQgdGhlIF9zdGFydCgpIGNhbGwsIGFuZAorYikgY2FjaGluZyBhIGI2NCdkIHZlcnNp
b24gb2YgdGhlIGJpbmRpbmcgdGhlbiB3aGljaCBpdCBuZXZlciB1cGRhdGVzLiAqLwogCiAgIGdz
YXNsX2NhbGxiYWNrX2hvb2tfc2V0KGdzYXNsX2N0eCwgdGxzX2luLmNoYW5uZWxiaW5kaW5nKTsK
ICMgZW5kaWYKQEAgLTQyOSw2ICs0MzksMTIgQEAKICAgd291bGQgdGhlbiByZXN1bHQgaW4gbWVj
aGFuaXNtIG5hbWUgY2hhbmdlcyBvbiBhIGxpYnJhcnkgdXBkYXRlLCB3ZQogICBoYXZlIGxpdHRs
ZSBjaG9pY2UgYnV0IHRvIGRlZmF1bHQgaXQgb2ZmIGFuZCBsZXQgdGhlIGFkbWluIGNob29zZSB0
bwogICBlbmFibGUgaXQuICAqc2lnaCoKKworICBFYXJsaWVyIGxpYnJhcnkgdmVyc2lvbnMgbmVl
ZCB0aGlzIHNldCBlYXJseSwgZHVyaW5nIHRoZSBfc3RhcnQoKSBjYWxsLAorICBzbyB3ZSBoYWQg
dG8gbWlzdXNlIGdzYXNsX2NhbGxiYWNrX2hvb2tfc2V0L2dldCgpIGFzIGEgZGF0YSB0cmFuc2Zl
cgorICBtZWNoIGZvciB0aGUgY2FsbGJhY2sgZG9uZSBhdCB0aGF0IHRpbWUgdG8gZ2V0IHRoZSBi
aW5kLWRhdGEuICBNb3JlIHJlY2VudGx5CisgIHRoZSBjYWxsYmFjayBpcyBkb25lIChpZiBuZWVk
ZWQpIGR1cmluZyB0aGUgZmlyc3QgZ3Nhc2xfc3RvcCgpLiAgV2Uga25vdworICB0aGUgYmluZC1k
YXRhIGhlcmUgc28gY2FuIHNldCBpdCAoYW5kIHNob3VsZCBub3QgZ2V0IGEgY2FsbGJhY2spLgog
ICAqLwogICBpZiAob2ItPnNlcnZlcl9jaGFubmVsYmluZGluZykKICAgICB7CkBAIC01NzAsMTQg
KzU4NiwxOSBAQAogfQogCiAKKy8qIFNldCB0aGUgIm5leHQiICRhdXRoW25dIGFuZCBpbmNyZW1l
bnQgZXhwYW5kX25tYXggKi8KKwogc3RhdGljIHZvaWQKIHNldF9leGltX2F1dGh2YXJfZnJvbV9w
cm9wKEdzYXNsX3Nlc3Npb24gKiBzY3R4LCBHc2FzbF9wcm9wZXJ0eSBwcm9wKQogewogdXNjaGFy
ICogcHJvcHZhbCA9IFVTIGdzYXNsX3Byb3BlcnR5X2Zhc3Qoc2N0eCwgcHJvcCk7CiBpbnQgaSA9
IGV4cGFuZF9ubWF4LCBqID0gaSArIDE7CiBwcm9wdmFsID0gcHJvcHZhbCA/IHN0cmluZ19jb3B5
KHByb3B2YWwpIDogVVMiIjsKLWF1dGhfdmFyc1tpXSA9IGV4cGFuZF9uc3RyaW5nW2pdID0gcHJv
cHZhbDsKK0hERUJVRyhEX2F1dGgpIGRlYnVnX3ByaW50ZigiYXV0aFslZF0gPD0gICVzJyVzJ1xu
IiwKKwkJCSAgICBqLCBnc2FzbF9wcm9wX2NvZGVfdG9fbmFtZShwcm9wKSwgcHJvcHZhbCk7Citl
eHBhbmRfbnN0cmluZ1tqXSA9IHByb3B2YWw7CiBleHBhbmRfbmxlbmd0aFtqXSA9IFVzdHJsZW4o
cHJvcHZhbCk7CitpZiAoaSA8IEFVVEhfVkFSUykgYXV0aF92YXJzW2ldID0gcHJvcHZhbDsKIGV4
cGFuZF9ubWF4ID0gajsKIH0KIApAQCAtNjIxLDEwICs2NDIsMTAgQEAKIHNlcnZlcl9jYWxsYmFj
ayhHc2FzbCAqY3R4LCBHc2FzbF9zZXNzaW9uICpzY3R4LCBHc2FzbF9wcm9wZXJ0eSBwcm9wLAog
ICBhdXRoX2luc3RhbmNlICphYmxvY2spCiB7Ci1jaGFyICp0bXBzOwotdXNjaGFyICpzLCAqcHJv
cHZhbDsKK2NoYXIgKiB0bXBzOwordXNjaGFyICogczsKIGludCBjYnJjID0gR1NBU0xfTk9fQ0FM
TEJBQ0s7Ci1hdXRoX2dzYXNsX29wdGlvbnNfYmxvY2sgKm9iID0KK2F1dGhfZ3Nhc2xfb3B0aW9u
c19ibG9jayAqIG9iID0KICAgKGF1dGhfZ3Nhc2xfb3B0aW9uc19ibG9jayAqKShhYmxvY2stPm9w
dGlvbnNfYmxvY2spOwogCiBIREVCVUcoRF9hdXRoKSBkZWJ1Z19wcmludGYoIkdOVSBTQVNMIGNh
bGxiYWNrICVzIGZvciAlcy8lcyBhcyBzZXJ2ZXJcbiIsCkBAIC03NDAsNyArNzYxLDcgQEAKICAg
ICBmb3IgbWVtb3J5IHdpcGluZywgc28gZXhwYW5kaW5nIHN0cmluZ3Mgd2lsbCBsZWF2ZSBzdHVm
ZiBsYXlpbmcgYXJvdW5kLgogICAgIEJ1dCBubyBuZWVkIHRvIGNvbXBvdW5kIHRoZSBwcm9ibGVt
LCBzbyBnZXQgcmlkIG9mIHRoZSBvbmUgd2UgY2FuLiAqLwogCi0gICAgbWVtc2V0KHRtcHMsICdc
MCcsIHN0cmxlbih0bXBzKSk7CisgICAgaWYgKFVTIHRtcHMgIT0gcykgbWVtc2V0KHRtcHMsICdc
MCcsIHN0cmxlbih0bXBzKSk7CiAgICAgY2JyYyA9IEdTQVNMX09LOwogICAgIGJyZWFrOwogCkBA
IC03NjUsNyArNzg2LDYgQEAKICAgdW5zaWduZWQgZmxhZ3MsIHVzY2hhciAqIGJ1ZmZlciwgaW50
IGJ1ZmZzaXplKQogewogdXNjaGFyICogczsKLWludCByYzsKIAogaWYgKCF2YWwpIHJldHVybiAh
IShmbGFncyAmIFBST1BfT1BUSU9OQUwpOwogaWYgKCEocyA9IGV4cGFuZF9zdHJpbmcodmFsKSkg
fHwgIShmbGFncyAmIFBST1BfT1BUSU9OQUwpICYmICEqcykKQEAgLTgxNCwxOCArODM0LDE5IEBA
CiAjaWZuZGVmIERJU0FCTEVfVExTCiBpZiAodGxzX291dC5jaGFubmVsYmluZGluZyAmJiBvYi0+
Y2xpZW50X2NoYW5uZWxiaW5kaW5nKQogICB7Ci0jIGlmZGVmIEVYUEVSSU1FTlRBTF9UTFNfUkVT
VU1FCisjIGlmbmRlZiBESVNBQkxFX1RMU19SRVNVTUUKICAgaWYgKCF0bHNfb3V0LmV4dF9tYXN0
ZXJfc2VjcmV0ICYmIHRsc19vdXQucmVzdW1wdGlvbiA9PSBSRVNVTUVfVVNFRCkKLSAgICB7CQkv
KiBwZXIgUkZDIDc2Nzcgc2VjdGlvbiA0ICovCisgICAgewkvKiBQZXIgUkZDIDc2Nzcgc2VjdGlv
biA0LiAgU2VlIGFsc28gUkZDIDc2MjcsICJUcmlwbGUgSGFuZHNoYWtlIgorCXZ1bG5lcmFiaWxp
dHksIGFuZCBodHRwczovL3d3dy5taXRscy5vcmcvcGFnZXMvYXR0YWNrcy8zU0hBS0UgKi8KICAg
ICBzdHJpbmdfZm9ybWF0KGJ1ZmZlciwgYnVmZnNpemUsICIlcyIsCiAgICAgICAiY2hhbm5lbCBi
aW5kaW5nIG5vdCB1c2FibGUgb24gcmVzdW1lZCBUTFMgd2l0aG91dCBleHRlbmRlZC1tYXN0ZXIt
c2VjcmV0Iik7CiAgICAgcmV0dXJuIEZBSUw7CiAgICAgfQogIyBlbmRpZgogIyBpZmRlZiBDSEFO
TkVMQklORF9IQUNLCi0gIC8qIFRoaXMgaXMgYSBncm9zcyBoYWNrIHRvIGdldCBhcm91bmQgdGhl
IGxpYnJhcnkgYSkgcmVxdWlyaW5nIHRoYXQKLSAgYy1iIHdhcyBhbHJlYWR5IHNldCwgYXQgdGhl
IF9zdGFydCgpIGNhbGwsIGFuZCBiKSBjYWNoaW5nIGEgYjY0J2QKLSAgdmVyc2lvbiBvZiB0aGUg
YmluZGluZyB0aGVuIHdoaWNoIGl0IG5ldmVyIHVwZGF0ZXMuICovCisgIC8qIFRoaXMgaXMgYSBn
cm9zcyBoYWNrIHRvIGdldCBhcm91bmQgdGhlIGxpYnJhcnkgYmVmb3JlIDEuOS4yCisgIGEpIHJl
cXVpcmluZyB0aGF0IGMtYiB3YXMgYWxyZWFkeSBzZXQsIGF0IHRoZSBfc3RhcnQoKSBjYWxsLCBh
bmQKKyAgYikgY2FjaGluZyBhIGI2NCdkIHZlcnNpb24gb2YgdGhlIGJpbmRpbmcgdGhlbiB3aGlj
aCBpdCBuZXZlciB1cGRhdGVzLiAqLwogCiAgIGdzYXNsX2NhbGxiYWNrX2hvb2tfc2V0KGdzYXNs
X2N0eCwgdGxzX291dC5jaGFubmVsYmluZGluZyk7CiAjIGVuZGlmCkBAIC04NDYsMTAgKzg2Nyw3
IEBACiAKIC8qIFNldCBwcm9wZXJ0aWVzICovCiAKLWlmICggICFzZXRfY2xpZW50X3Byb3Aoc2N0
eCwgR1NBU0xfU0NSQU1fU0FMVEVEX1BBU1NXT1JELCBvYi0+Y2xpZW50X3NwYXNzd29yZCwKLQkJ
ICAwLCBidWZmZXIsIGJ1ZmZzaXplKQotICAgICAgJiYKLSAgICAgICFzZXRfY2xpZW50X3Byb3Ao
c2N0eCwgR1NBU0xfUEFTU1dPUkQsIG9iLT5jbGllbnRfcGFzc3dvcmQsCitpZiAoICAhc2V0X2Ns
aWVudF9wcm9wKHNjdHgsIEdTQVNMX1BBU1NXT1JELCBvYi0+Y2xpZW50X3Bhc3N3b3JkLAogCQkg
IDAsIGJ1ZmZlciwgYnVmZnNpemUpCiAgICB8fCAhc2V0X2NsaWVudF9wcm9wKHNjdHgsIEdTQVNM
X0FVVEhJRCwgb2ItPmNsaWVudF91c2VybmFtZSwKIAkJICAwLCBidWZmZXIsIGJ1ZmZzaXplKQpA
QCAtODc5LDI0ICs4OTcsMjcgQEAKIGZvcihzID0gTlVMTDsgOykKICAgewogICB1c2NoYXIgKiBv
dXRzdHI7Ci0gIEJPT0wgZmFpbDsKKyAgQk9PTCBmYWlsID0gVFJVRTsKIAogICByYyA9IGdzYXNs
X3N0ZXA2NChzY3R4LCBDUyBzLCBDU1MgJm91dHN0cik7CiAKLSAgZmFpbCA9IGluaXRpYWwKLSAg
ICA/IHNtdHBfd3JpdGVfY29tbWFuZChzeCwgU0NNRF9GTFVTSCwKLQkJCW91dHN0ciA/ICJBVVRI
ICVzICVzXHJcbiIgOiAiQVVUSCAlc1xyXG4iLAotCQkJYWJsb2NrLT5wdWJsaWNfbmFtZSwgb3V0
c3RyKSA8PSAwCi0gICAgOiBvdXRzdHIKLSAgICA/IHNtdHBfd3JpdGVfY29tbWFuZChzeCwgU0NN
RF9GTFVTSCwgIiVzXHJcbiIsIG91dHN0cikgPD0gMAotICAgIDogRkFMU0U7Ci0gIGlmIChvdXRz
dHIgJiYgKm91dHN0cikgZnJlZShvdXRzdHIpOwotICBpZiAoZmFpbCkKKyAgaWYgKHJjID09IEdT
QVNMX05FRURTX01PUkUgfHwgcmMgPT0gR1NBU0xfT0spCiAgICAgewotICAgIHlpZWxkID0gRkFJ
TF9TRU5EOwotICAgIGdvdG8gZG9uZTsKKyAgICBmYWlsID0gaW5pdGlhbAorICAgICAgPyBzbXRw
X3dyaXRlX2NvbW1hbmQoc3gsIFNDTURfRkxVU0gsCisJCQkgIG91dHN0ciA/ICJBVVRIICVzICVz
XHJcbiIgOiAiQVVUSCAlc1xyXG4iLAorCQkJICBhYmxvY2stPnB1YmxpY19uYW1lLCBvdXRzdHIp
IDw9IDAKKyAgICAgIDogb3V0c3RyCisgICAgICA/IHNtdHBfd3JpdGVfY29tbWFuZChzeCwgU0NN
RF9GTFVTSCwgIiVzXHJcbiIsIG91dHN0cikgPD0gMAorICAgICAgOiBGQUxTRTsKKyAgICBmcmVl
KG91dHN0cik7CisgICAgaWYgKGZhaWwpCisgICAgICB7CisgICAgICB5aWVsZCA9IEZBSUxfU0VO
RDsKKyAgICAgIGdvdG8gZG9uZTsKKyAgICAgIH0KKyAgICBpbml0aWFsID0gRkFMU0U7CiAgICAg
fQotICBpbml0aWFsID0gRkFMU0U7CiAKICAgaWYgKHJjICE9IEdTQVNMX05FRURTX01PUkUpCiAg
ICAgewpAQCAtOTI3LDEwICs5NDgsMTMgQEAKICAgfQogCiBkb25lOgotSERFQlVHKERfYXV0aCkK
K2lmICh5aWVsZCA9PSBPSykKICAgewotICBjb25zdCB1c2NoYXIgKiBzID0gQ1VTIGdzYXNsX3By
b3BlcnR5X2Zhc3Qoc2N0eCwgR1NBU0xfU0NSQU1fU0FMVEVEX1BBU1NXT1JEKTsKLSAgaWYgKHMp
IGRlYnVnX3ByaW50ZigiIC0gU2FsdGVkUGFzc3dvcmQ6ICclcydcbiIsIHMpOworICBleHBhbmRf
bm1heCA9IDA7CisgIHNldF9leGltX2F1dGh2YXJfZnJvbV9wcm9wKHNjdHgsIEdTQVNMX0FVVEhJ
RCk7CisgIHNldF9leGltX2F1dGh2YXJfZnJvbV9wcm9wKHNjdHgsIEdTQVNMX1NDUkFNX0lURVIp
OworICBzZXRfZXhpbV9hdXRodmFyX2Zyb21fcHJvcChzY3R4LCBHU0FTTF9TQ1JBTV9TQUxUKTsK
KyAgc2V0X2V4aW1fYXV0aHZhcl9mcm9tX3Byb3Aoc2N0eCwgR1NBU0xfU0NSQU1fU0FMVEVEX1BB
U1NXT1JEKTsKICAgfQogCiBnc2FzbF9maW5pc2goc2N0eCk7CkBAIC05NDQsMTEgKzk2OCwzMSBA
QAogCSAgICBnc2FzbF9wcm9wX2NvZGVfdG9fbmFtZShwcm9wKSwgYWJsb2NrLT5uYW1lLCBhYmxv
Y2stPnB1YmxpY19uYW1lKTsKIHN3aXRjaCAocHJvcCkKICAgewotICBjYXNlIEdTQVNMX0NCX1RM
U19VTklRVUU6CisgIGNhc2UgR1NBU0xfQ0JfVExTX1VOSVFVRToJLypYWFggc2hvdWxkIG5ldmVy
IGdldCBjYWxsZWQgZm9yIHRoaXMgKi8KICAgICBIREVCVUcoRF9hdXRoKQogICAgICAgZGVidWdf
cHJpbnRmKCIgZmlsbGluZyBpblxuIik7CiAgICAgZ3Nhc2xfcHJvcGVydHlfc2V0KHNjdHgsIEdT
QVNMX0NCX1RMU19VTklRVUUsIENDUyB0bHNfb3V0LmNoYW5uZWxiaW5kaW5nKTsKKyAgICByZXR1
cm4gR1NBU0xfT0s7CisgIGNhc2UgR1NBU0xfU0NSQU1fU0FMVEVEX1BBU1NXT1JEOgorICAgIHsK
KyAgICB1c2NoYXIgKiBjbGllbnRfc3Bhc3N3b3JkID0KKyAgICAgICgoYXV0aF9nc2FzbF9vcHRp
b25zX2Jsb2NrICopIGFibG9jay0+b3B0aW9uc19ibG9jayktPmNsaWVudF9zcGFzc3dvcmQ7Cisg
ICAgdXNjaGFyIGR1bW15WzRdOworICAgIEhERUJVRyhEX2F1dGgpIGlmICghY2xpZW50X3NwYXNz
d29yZCkKKyAgICAgIGRlYnVnX3ByaW50ZigiIGNsaWVudF9zcGFzc3dvcmQgb3B0aW9uIHVuc2V0
XG4iKTsKKyAgICBpZiAoY2xpZW50X3NwYXNzd29yZCkKKyAgICAgIHsKKyAgICAgIGV4cGFuZF9u
bWF4ID0gMDsKKyAgICAgIHNldF9leGltX2F1dGh2YXJfZnJvbV9wcm9wKHNjdHgsIEdTQVNMX0FV
VEhJRCk7CisgICAgICBzZXRfZXhpbV9hdXRodmFyX2Zyb21fcHJvcChzY3R4LCBHU0FTTF9TQ1JB
TV9JVEVSKTsKKyAgICAgIHNldF9leGltX2F1dGh2YXJfZnJvbV9wcm9wKHNjdHgsIEdTQVNMX1ND
UkFNX1NBTFQpOworICAgICAgc2V0X2NsaWVudF9wcm9wKHNjdHgsIEdTQVNMX1NDUkFNX1NBTFRF
RF9QQVNTV09SRCwgY2xpZW50X3NwYXNzd29yZCwKKwkJICAwLCBkdW1teSwgc2l6ZW9mKGR1bW15
KSk7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEFVVEhfVkFSUzsgaSsrKSBhdXRoX3ZhcnNb
aV0gPSBOVUxMOworICAgICAgZXhwYW5kX25tYXggPSAwOworICAgICAgfQogICAgIGJyZWFrOwor
ICAgIH0KICAgZGVmYXVsdDoKICAgICBIREVCVUcoRF9hdXRoKQogICAgICAgZGVidWdfcHJpbnRm
KCIgbm90IHByb3ZpZGluZyBvbmVcbiIpOwpAQCAtOTYxLDE0ICsxMDA1LDEyIEBACiAqICAgICAg
ICAgICAgICAgIERpYWdub3N0aWMgQVBJICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZAotYXV0aF9nc2Fz
bF92ZXJzaW9uX3JlcG9ydChGSUxFICpmKQorZ3N0cmluZyAqCithdXRoX2dzYXNsX3ZlcnNpb25f
cmVwb3J0KGdzdHJpbmcgKiBnKQogewotY29uc3QgY2hhciAqcnVudGltZTsKLXJ1bnRpbWUgPSBn
c2FzbF9jaGVja192ZXJzaW9uKE5VTEwpOwotZnByaW50ZihmLCAiTGlicmFyeSB2ZXJzaW9uOiBH
TlUgU0FTTDogQ29tcGlsZTogJXNcbiIKLQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAg
UnVudGltZTogJXNcbiIsCi0JR1NBU0xfVkVSU0lPTiwgcnVudGltZSk7CityZXR1cm4gc3RyaW5n
X2ZtdF9hcHBlbmQoZywgIkxpYnJhcnkgdmVyc2lvbjogR05VIFNBU0w6IENvbXBpbGU6ICVzXG4i
CisJCQkgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWU6ICVzXG4iLAorCUdT
QVNMX1ZFUlNJT04sIGdzYXNsX2NoZWNrX3ZlcnNpb24oTlVMTCkpOwogfQogCiAKZGlmZiAtdXIg
ZXhpbS5vcmlnL3NyYy9hdXRocy9nc2FzbF9leGltLmggZXhpbS9zcmMvYXV0aHMvZ3Nhc2xfZXhp
bS5oCi0tLSBleGltLm9yaWcvc3JjL2F1dGhzL2dzYXNsX2V4aW0uaAkyMDIzLTA2LTA0IDE2OjIy
OjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvYXV0aHMvZ3Nhc2xfZXhpbS5oCTIwMjIt
MDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhp
bSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykg
VGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxOSAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5p
dmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTIgKi8KLS8qIENvcHlyaWdodCAoYykgVGhl
IEV4aW0gTWFpbnRhaW5lcnMgMjAxOS0yMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZv
ciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBDb3B5cmlnaHQg
KGMpIFR3aXR0ZXIgSW5jIDIwMTIgKi8KQEAgLTQ3LDcgKzQ3LDcgQEAKIGV4dGVybiBpbnQgYXV0
aF9nc2FzbF9zZXJ2ZXIoYXV0aF9pbnN0YW5jZSAqLCB1c2NoYXIgKik7CiBleHRlcm4gaW50IGF1
dGhfZ3Nhc2xfY2xpZW50KGF1dGhfaW5zdGFuY2UgKiwgdm9pZCAqLAogCQkJCWludCwgdXNjaGFy
ICosIGludCk7Ci1leHRlcm4gdm9pZCBhdXRoX2dzYXNsX3ZlcnNpb25fcmVwb3J0KEZJTEUgKmYp
OworZXh0ZXJuIGdzdHJpbmcgKiBhdXRoX2dzYXNsX3ZlcnNpb25fcmVwb3J0KGdzdHJpbmcgKik7
CiBleHRlcm4gdm9pZCBhdXRoX2dzYXNsX21hY3Jvcyh2b2lkKTsKIAogLyogRW5kIG9mIGdzYXNs
X2V4aW0uaCAqLwpkaWZmIC11ciBleGltLm9yaWcvc3JjL2F1dGhzL2hlaW1kYWxfZ3NzYXBpLmMg
ZXhpbS9zcmMvYXV0aHMvaGVpbWRhbF9nc3NhcGkuYwotLS0gZXhpbS5vcmlnL3NyYy9hdXRocy9o
ZWltZGFsX2dzc2FwaS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBl
eGltL3NyYy9hdXRocy9oZWltZGFsX2dzc2FwaS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAw
MDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwg
dHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMg
MjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ug
MTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAy
MCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRp
c3RyaWJ1dGlvbi4gKi8KIAogLyogQ29weXJpZ2h0IChjKSBUd2l0dGVyIEluYyAyMDEyCkBAIC04
NSw3ICs4NSw3IEBACiBpbnQgYXV0aF9oZWltZGFsX2dzc2FwaV9zZXJ2ZXIoYXV0aF9pbnN0YW5j
ZSAqYWJsb2NrLCB1c2NoYXIgKmRhdGEpIHtyZXR1cm4gMDt9CiBpbnQgYXV0aF9oZWltZGFsX2dz
c2FwaV9jbGllbnQoYXV0aF9pbnN0YW5jZSAqYWJsb2NrLCB2b2lkICogc3gsCiAgIGludCB0aW1l
b3V0LCB1c2NoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZzaXplKSB7cmV0dXJuIDA7fQotdm9pZCBhdXRo
X2hlaW1kYWxfZ3NzYXBpX3ZlcnNpb25fcmVwb3J0KEZJTEUgKmYpIHt9Citnc3RyaW5nICogYXV0
aF9oZWltZGFsX2dzc2FwaV92ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykge30KIAogI2Vsc2Ug
ICAvKiFNQUNST19QUkVERUYqLwogCkBAIC02MDEsMTQgKzYwMSwxNSBAQAogKiAgICAgICAgICAg
ICAgICBEaWFnbm9zdGljIEFQSSAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQKLWF1dGhfaGVpbWRhbF9n
c3NhcGlfdmVyc2lvbl9yZXBvcnQoRklMRSAqZikKK2dzdHJpbmcgKgorYXV0aF9oZWltZGFsX2dz
c2FwaV92ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykKIHsKIC8qIE5vIGJ1aWxkLXRpbWUgY29u
c3RhbnRzIGF2YWlsYWJsZSB1bmxlc3Mgd2UgbGluayBhZ2FpbnN0IGxpYnJhcmllcyBhdAogYnVp
bGQtdGltZSBhbmQgZXhwb3J0IHRoZSByZXN1bHQgYXMgYSBzdHJpbmcgaW50byBhIGhlYWRlciBv
dXJzZWx2ZXMuICovCi1mcHJpbnRmKGYsICJMaWJyYXJ5IHZlcnNpb246IEhlaW1kYWw6IFJ1bnRp
bWU6ICVzXG4iCi0JICAgIiBCdWlsZCBJbmZvOiAlc1xuIiwKLQloZWltZGFsX3ZlcnNpb24sIGhl
aW1kYWxfbG9uZ192ZXJzaW9uKTsKKworcmV0dXJuIHN0cmluZ19mbXRfYXBwZW5kKGcsICJMaWJy
YXJ5IHZlcnNpb246IEhlaW1kYWw6IFJ1bnRpbWU6ICVzXG4iCisJCQkgICAgIiBCdWlsZCBJbmZv
OiAlc1xuIiwKKwloZWltZGFsX3ZlcnNpb24sIGhlaW1kYWxfbG9uZ192ZXJzaW9uKSk7CiB9CiAK
ICNlbmRpZiAgIC8qIU1BQ1JPX1BSRURFRiovCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvYXV0aHMv
aGVpbWRhbF9nc3NhcGkuaCBleGltL3NyYy9hdXRocy9oZWltZGFsX2dzc2FwaS5oCi0tLSBleGlt
Lm9yaWcvc3JjL2F1dGhzL2hlaW1kYWxfZ3NzYXBpLmgJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2F1dGhzL2hlaW1kYWxfZ3NzYXBpLmgJMjAyMi0wNi0y
MyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsNiArMiw3IEBACiAqICAgICBFeGltIC0g
YW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUg
RXhpbSBNYWludGFpbmVycyAyMDIyICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2Yg
Q2FtYnJpZGdlIDE5OTUgLSAyMDEyICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25k
aXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCkBAIC0zMyw2ICszNCw2IEBACiBl
eHRlcm4gdm9pZCBhdXRoX2hlaW1kYWxfZ3NzYXBpX2luaXQoYXV0aF9pbnN0YW5jZSAqKTsKIGV4
dGVybiBpbnQgYXV0aF9oZWltZGFsX2dzc2FwaV9zZXJ2ZXIoYXV0aF9pbnN0YW5jZSAqLCB1c2No
YXIgKik7CiBleHRlcm4gaW50IGF1dGhfaGVpbWRhbF9nc3NhcGlfY2xpZW50KGF1dGhfaW5zdGFu
Y2UgKiwgdm9pZCAqLCBpbnQsIHVzY2hhciAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgYXV0aF9oZWlt
ZGFsX2dzc2FwaV92ZXJzaW9uX3JlcG9ydChGSUxFICpmKTsKK2V4dGVybiB2b2lkIGF1dGhfaGVp
bWRhbF9nc3NhcGlfdmVyc2lvbl9yZXBvcnQoQk9PTCk7CiAKIC8qIEVuZCBvZiBoZWltZGFsX2dz
c2FwaS5oICovCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvYXV0aHMvcGxhaW50ZXh0LmMgZXhpbS9z
cmMvYXV0aHMvcGxhaW50ZXh0LmMKLS0tIGV4aW0ub3JpZy9zcmMvYXV0aHMvcGxhaW50ZXh0LmMJ
MjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2F1dGhzL3Bs
YWludGV4dC5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0zLDcgKzMs
NyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
IAogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAq
LwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCisvKiBDb3B5
cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIxICovCiAvKiBTZWUgdGhl
IGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwog
CiAjaW5jbHVkZSAiLi4vZXhpbS5oIgpAQCAtMTA5LDcgKzEwOSw3IEBACiBvdXQgYXMgcHJvbXB0
cywgYW5kIGdldCBhIGRhdGEgaXRlbSBiYWNrLiBJZiB0aGUgZGF0YSBpdGVtIGlzICIqIiwgYWJh
bmRvbiB0aGUKIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHQuIE90aGVyd2lzZSwgc3BsaXQgaXQgaW50
byBpdGVtcyBhcyBhYm92ZS4gKi8KIAotd2hpbGUgKCAgKHMgPSBzdHJpbmdfbmV4dGlubGlzdCgm
cHJvbXB0cywgJnNlcCwgYmlnX2J1ZmZlciwgYmlnX2J1ZmZlcl9zaXplKSkKK3doaWxlICggIChz
ID0gc3RyaW5nX25leHRpbmxpc3QoJnByb21wdHMsICZzZXAsIE5VTEwsIDApKQogICAgICAgJiYg
ZXhwYW5kX25tYXggPCBFWFBBTkRfTUFYTikKICAgaWYgKG51bWJlcisrID4gZXhwYW5kX25tYXgp
CiAgICAgaWYgKChyYyA9IGF1dGhfcHJvbXB0KENVUyBzKSkgIT0gT0spCmRpZmYgLXVyIGV4aW0u
b3JpZy9zcmMvYXV0aHMvcHdjaGVjay5jIGV4aW0vc3JjL2F1dGhzL3B3Y2hlY2suYwotLS0gZXhp
bS5vcmlnL3NyYy9hdXRocy9wd2NoZWNrLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAg
KzAzMDAKKysrIGV4aW0vc3JjL2F1dGhzL3B3Y2hlY2suYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAw
MDAwMDAwMCArMDMwMApAQCAtMyw2ICszLDcgQEAKICAqIFRpbSBNYXJ0aW4KICAqICRJZDogY2hl
Y2twdy5jLHYgMS40OSAyMDAyLzAzLzA3IDE5OjE0OjA0IGtlbjMgRXhwICQKICAqLworLyogQ29w
eXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxIC0gMjAyMiAqLwogLyoKICAqIENv
cHlyaWdodCAoYykgMjAwMSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgpAQCAtODYsOCArODcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKnBhc3N3ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICoqcmVwbHkpCiB7Ci11c2VyaWQgPSB1c2VyaWQ7ICAvKiBLZWVwIHBpY2t5IGNvbXBp
bGVycyBoYXBweSAqLwotcGFzc3dkID0gcGFzc3dkOwogKnJlcGx5ID0gInB3Y2hlY2sgc3VwcG9y
dCBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcyBFeGltIGJpbmFyeSI7CiByZXR1cm4gUFdDSEVDS19G
QUlMOwogfQpAQCAtMTYzLDEwICsxNjIsNiBAQAogICAgICAgICAgICAgICAgIGNvbnN0IHVzY2hh
ciAqcmVhbG0sCiAgICAgICAgICAgICAgICAgY29uc3QgdXNjaGFyICoqcmVwbHkpCiB7Ci11c2Vy
aWQgPSB1c2VyaWQ7ICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotcGFzc3dkID0g
cGFzc3dkOwotc2VydmljZSA9IHNlcnZpY2U7Ci1yZWFsbSA9IHJlYWxtOwogKnJlcGx5ID0gVVMi
c2FzbGF1dGhkIHN1cHBvcnQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMgRXhpbSBiaW5hcnkiOwog
cmV0dXJuIFBXQ0hFQ0tfRkFJTDsKIH0KQEAgLTI5Nyw3ICsyOTIsNyBAQAogICAgICAgICAgICAg
cmV0dXJuIC0xOwogICAgICAgICB9IGVsc2UgewogCSAgICAvKiBBc3N1bWUgdGhlIGZpbGUgaXMg
dHJ1c3RlZCwgc28gbm8gdGFpbnRpbmcgKi8KLSAgICAgICAgICAgICpyZXR2YWwgPSBzdG9yZV9n
ZXQoY291bnQgKyAxLCBGQUxTRSk7CisgICAgICAgICAgICAqcmV0dmFsID0gc3RvcmVfZ2V0KGNv
dW50ICsgMSwgR0VUX1VOVEFJTlRFRCk7CiAgICAgICAgICAgICByYyA9IChyZXRyeV9yZWFkKGZk
LCAqcmV0dmFsLCBjb3VudCkgPCAoaW50KSBjb3VudCk7CiAgICAgICAgICAgICAoKnJldHZhbClb
Y291bnRdID0gJ1wwJzsKICAgICAgICAgICAgIHJldHVybiBjb3VudDsKZGlmZiAtdXIgZXhpbS5v
cmlnL3NyYy9hdXRocy94dGV4dGRlY29kZS5jIGV4aW0vc3JjL2F1dGhzL3h0ZXh0ZGVjb2RlLmMK
LS0tIGV4aW0ub3JpZy9zcmMvYXV0aHMveHRleHRkZWNvZGUuYwkyMDIzLTA2LTA0IDE2OjIyOjA1
LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvYXV0aHMveHRleHRkZWNvZGUuYwkyMDIyLTA2
LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw2ICsyLDcgQEAKICogICAgIEV4aW0g
LSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRo
ZSBFeGltIE1haW50YWluZXJzIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBv
ZiBDYW1icmlkZ2UgMTk5NSAtIDIwMDkgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNv
bmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKQEAgLTMzLDcgKzM0LDcgQEAK
IGF1dGhfeHRleHRkZWNvZGUodXNjaGFyICpjb2RlLCB1c2NoYXIgKipwdHIpCiB7CiByZWdpc3Rl
ciBpbnQgeDsKLXVzY2hhciAqcmVzdWx0ID0gc3RvcmVfZ2V0KFVzdHJsZW4oY29kZSkgKyAxLCBp
c190YWludGVkKGNvZGUpKTsKK3VzY2hhciAqIHJlc3VsdCA9IHN0b3JlX2dldChVc3RybGVuKGNv
ZGUpICsgMSwgY29kZSk7CiAqcHRyID0gcmVzdWx0OwogCiB3aGlsZSAoKHggPSAoKmNvZGUrKykp
ICE9IDApCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvYXV0aHMveHRleHRlbmNvZGUuYyBleGltL3Ny
Yy9hdXRocy94dGV4dGVuY29kZS5jCi0tLSBleGltLm9yaWcvc3JjL2F1dGhzL3h0ZXh0ZW5jb2Rl
LmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2F1dGhz
L3h0ZXh0ZW5jb2RlLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIs
NiArMiw3IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQg
ICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
IAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIyICovCiAvKiBDb3B5
cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCiAvKiBTZWUg
dGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAq
LwogCkBAIC00MCw3ICs0MSw3IEBACiB3aGlsZSAoYyAtLSA+IDApCiAgIGNvdW50ICs9ICgoeCA9
ICpwKyspIDwgMzMgfHwgeCA+IDEyNyB8fCB4ID09ICcrJyB8fCB4ID09ICc9Jyk/IDMgOiAxOwog
Ci1wcCA9IGNvZGUgPSBzdG9yZV9nZXQoY291bnQsIGlzX3RhaW50ZWQoY2xlYXIpKTsKK3BwID0g
Y29kZSA9IHN0b3JlX2dldChjb3VudCwgY2xlYXIpOwogCiBwID0gVVMgY2xlYXI7CiBjID0gbGVu
OwpkaWZmIC11ciBleGltLm9yaWcvc3JjL2Jhc2U2NC5jIGV4aW0vc3JjL2Jhc2U2NC5jCi0tLSBl
eGltLm9yaWcvc3JjL2Jhc2U2NC5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAw
CisrKyBleGltL3NyYy9iYXNlNjQuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMw
MApAQCAtNiw3ICs2LDcgQEAKIC8qIExpY2Vuc2U6IEdQTCAqLwogCiAvKiBDb3B5cmlnaHQgKGMp
IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBDb3B5cmlnaHQgKGMp
IFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0g
TWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNv
bmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIApAQCAtMTU3LDEwICsxNTcs
MTAgQEAKIGludCB4LCB5OwogdXNjaGFyICpyZXN1bHQ7CiAKLXsKKyB7CiAgIGludCBsID0gVXN0
cmxlbihjb2RlKTsKLSAgKnB0ciA9IHJlc3VsdCA9IHN0b3JlX2dldCgxICsgbC80ICogMyArIGwl
NCwgaXNfdGFpbnRlZChjb2RlKSk7Ci19CisgICpwdHIgPSByZXN1bHQgPSBzdG9yZV9nZXQoMSAr
IGwvNCAqIDMgKyBsJTQsIGNvZGUpOworIH0KIAogLyogRWFjaCBjeWNsZSBvZiB0aGUgbG9vcCBo
YW5kbGVzIGEgcXVhbnR1bSBvZiA0IGlucHV0IGJ5dGVzLiBGb3IgdGhlIGxhc3QKIHF1YW50dW0g
dGhpcyBtYXkgZGVjb2RlIHRvIDEsIDIsIG9yIDMgb3V0cHV0IGJ5dGVzLiAqLwpAQCAtMjM0LDYg
KzIzNCw3IEBACiBBcmd1bWVudHM6CiAgIGNsZWFyICAgICAgIHBvaW50cyB0byB0aGUgY2xlYXIg
dGV4dCBieXRlcwogICBsZW4gICAgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZQor
ICBwcm90b19tZW0gICB0YWludCBpbmRpY2F0b3IKIAogUmV0dXJuczogICAgICBhIHBvaW50ZXIg
dG8gdGhlIHplcm8tdGVybWluYXRlZCBiYXNlIDY0IHN0cmluZywgd2hpY2gKICAgICAgICAgICAg
ICAgaXMgaW4gd29ya2luZyBzdG9yZQpAQCAtMjQzLDEwICsyNDQsMTAgQEAKICAgVVMiQUJDREVG
R0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkr
LyI7CiAKIHVzY2hhciAqCi1iNjRlbmNvZGVfdGFpbnQoY29uc3QgdXNjaGFyICogY2xlYXIsIGlu
dCBsZW4sIEJPT0wgdGFpbnRlZCkKK2I2NGVuY29kZV90YWludChjb25zdCB1c2NoYXIgKiBjbGVh
ciwgaW50IGxlbiwgY29uc3Qgdm9pZCAqIHByb3RvX21lbSkKIHsKLXVzY2hhciAqY29kZSA9IHN0
b3JlX2dldCg0KigobGVuKzIpLzMpICsgMSwgdGFpbnRlZCk7Ci11c2NoYXIgKnAgPSBjb2RlOwor
dXNjaGFyICogY29kZSA9IHN0b3JlX2dldCg0KigobGVuKzIpLzMpICsgMSwgcHJvdG9fbWVtKTsK
K3VzY2hhciAqIHAgPSBjb2RlOwogCiB3aGlsZSAobGVuLS0gPjApCiAgIHsKQEAgLTI4Nyw3ICsy
ODgsNyBAQAogdXNjaGFyICoKIGI2NGVuY29kZShjb25zdCB1c2NoYXIgKiBjbGVhciwgaW50IGxl
bikKIHsKLXJldHVybiBiNjRlbmNvZGVfdGFpbnQoY2xlYXIsIGxlbiwgaXNfdGFpbnRlZChjbGVh
cikpOworcmV0dXJuIGI2NGVuY29kZV90YWludChjbGVhciwgbGVuLCBjbGVhcik7CiB9CiAKIApk
aWZmIC11ciBleGltLm9yaWcvc3JjL2JtaV9zcGFtLmMgZXhpbS9zcmMvYm1pX3NwYW0uYwotLS0g
ZXhpbS5vcmlnL3NyYy9ibWlfc3BhbS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICsw
MzAwCisrKyBleGltL3NyYy9ibWlfc3BhbS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAw
ICswMzAwCkBAIC01LDYgKzUsNyBAQAogLyogQ29kZSBmb3IgY2FsbGluZyBCcmlnaHRtYWlsIEFu
dGlTcGFtLgogICAgQ29weXJpZ2h0IChjKSBUb20gS2lzdG5lciA8dG9tQGR1bmNhbnRocmF4Lm5l
dD4gMjAwNAogICAgTGljZW5zZTogR1BMICovCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1h
aW50YWluZXJzIDIwMjEgLSAyMDIyICovCiAKICNpbmNsdWRlICJleGltLmgiCiAjaWZkZWYgRVhQ
RVJJTUVOVEFMX0JSSUdIVE1BSUwKQEAgLTE5MywxNiArMTk0LDE2IEBACiAgIC8qIEdldCBzdG9y
ZSBmb3IgdGhlIHZlcmRpY3Qgc3RyaW5nLiAgU2luY2Ugd2UgYXJlIHByb2Nlc3NpbmcgbWVzc2Fn
ZSBkYXRhLCBhc3N1bWUgdGhhdAogICB0aGUgdmVyZGljdCBpcyB0YWludGVkLiAgWFhYIHRoaXMg
c2hvdWxkIHVzZSBhIGdyb3dhYmxlLXN0cmluZyAgKi8KIAotICB2ZXJkaWN0cyA9IHN0b3JlX2dl
dCgxLCBUUlVFKTsKKyAgdmVyZGljdHMgPSBzdG9yZV9nZXQoMSwgR0VUX1RBSU5URUQpOwogICAq
dmVyZGljdHMgPSAnXDAnOwogCiAgIGZvciAoIGVyciA9IGJtaUFjY2Vzc0ZpcnN0VmVyZGljdCht
ZXNzYWdlLCAmdmVyZGljdCk7Ci0gICAgICAgIHZlcmRpY3QgIT0gTlVMTDsKKyAgICAgICAgdmVy
ZGljdDsKICAgICAgICAgZXJyID0gYm1pQWNjZXNzTmV4dFZlcmRpY3QobWVzc2FnZSwgdmVyZGlj
dCwgJnZlcmRpY3QpICkgewogICAgIGNoYXIgKnZlcmRpY3Rfc3RyOwogCiAgICAgZXJyID0gYm1p
Q3JlYXRlU3RyRnJvbVZlcmRpY3QodmVyZGljdCwmdmVyZGljdF9zdHIpOwotICAgIGlmICghc3Rv
cmVfZXh0ZW5kKHZlcmRpY3RzLCBUUlVFLAorICAgIGlmICghc3RvcmVfZXh0ZW5kKHZlcmRpY3Rz
LAogCSAgVXN0cmxlbih2ZXJkaWN0cykrMSwgVXN0cmxlbih2ZXJkaWN0cykrMStzdHJsZW4odmVy
ZGljdF9zdHIpKzEpKSB7CiAgICAgICAvKiBjYW4ndCBhbGxvY2F0ZSBtb3JlIHN0b3JlICovCiAg
ICAgICByZXR1cm4gTlVMTDsKQEAgLTMwMiw3ICszMDMsNyBAQAogICB9CiAgIGVsc2UgewogICAg
IC8qIGRlbGl2ZXIgdG8gYWx0ZXJuYXRlIGxvY2F0aW9uICovCi0gICAgcmMgPSBzdG9yZV9nZXQo
c3RybGVuKGJtaVZlcmRpY3RBY2Nlc3NEZXN0aW5hdGlvbih2ZXJkaWN0KSkrMSwgVFJVRSk7Cisg
ICAgcmMgPSBzdG9yZV9nZXQoc3RybGVuKGJtaVZlcmRpY3RBY2Nlc3NEZXN0aW5hdGlvbih2ZXJk
aWN0KSkrMSwgR0VUX1RBSU5URUQpOwogICAgIFVzdHJjcHkocmMsIGJtaVZlcmRpY3RBY2Nlc3NE
ZXN0aW5hdGlvbih2ZXJkaWN0KSk7CiAgICAgcmNbc3RybGVuKGJtaVZlcmRpY3RBY2Nlc3NEZXN0
aW5hdGlvbih2ZXJkaWN0KSldID0gJ1wwJzsKICAgfTsKQEAgLTMyNyw3ICszMjgsNyBAQAogICAg
IHJldHVybiBOVUxMOwogCiAgIC8qIGFsbG9jYXRlIHJvb20gZm9yIHRoZSBiNjQgdmVyZGljdCBz
dHJpbmcgKi8KLSAgdmVyZGljdF9idWZmZXIgPSBzdG9yZV9nZXQoVXN0cmxlbihibWlfdmVyZGlj
dHMpKzEsIFRSVUUpOworICB2ZXJkaWN0X2J1ZmZlciA9IHN0b3JlX2dldChVc3RybGVuKGJtaV92
ZXJkaWN0cykrMSwgR0VUX1RBSU5URUQpOwogCiAgIC8qIGxvb3AgdGhyb3VnaCB2ZXJkaWN0cyAq
LwogICB2ZXJkaWN0X3B0ciA9IGJtaV92ZXJkaWN0czsKQEAgLTQ0OCw5ICs0NDksMTEgQEAKICAg
fQogCiAgIC8qIGxvb3AgdGhyb3VnaCBudW1iZXJzICovCisgIC8qIG9wdGlvbl9saXN0IGRvZXNu
J3Qgc2VlbSB0byBiZSBleHBhbmRlZCBzbyBjYW5ub3QgYmUgdGFpbnRlZC4gIElmIGl0IGV2ZXIg
aXMgd2UKKyAgd2lsbCB0cmFwIGhlcmUgKi8KICAgcnVsZV9wdHIgPSBvcHRpb25fbGlzdDsKICAg
d2hpbGUgKChydWxlX251bSA9IHN0cmluZ19uZXh0aW5saXN0KCZydWxlX3B0ciwgJnNlcCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVfYnVmZmVyLCAzMikpICE9
IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVfYnVm
ZmVyLCBzaXplb2YocnVsZV9idWZmZXIpKSkpIHsKICAgICBpbnQgcnVsZV9pbnQgPSAtMTsKIAog
ICAgIC8qIHRyeSB0byB0cmFuc2xhdGUgdG8gaW50ICovCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMv
YnVpbGRjb25maWcuYyBleGltL3NyYy9idWlsZGNvbmZpZy5jCi0tLSBleGltLm9yaWcvc3JjL2J1
aWxkY29uZmlnLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0v
c3JjL2J1aWxkY29uZmlnLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAg
LTIsNiArMiw3IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdl
bnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIyICovCiAvKiBD
b3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCiAvKiBT
ZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9u
LiAqLwogCkBAIC01MSw3ICs1Miw3IEBACiAgIGNoYXIgKmRhdGE7CiB9IHNhdmVfaXRlbTsKIAot
c3RhdGljIGNvbnN0IGNoYXIgKmRiX29wdHNbXSA9IHsgIiIsICJVU0VfREIiLCAiVVNFX0dEQk0i
LCAiVVNFX1REQiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpkYl9vcHRzW10gPSB7ICIiLCAiVVNF
X0RCIiwgIlVTRV9HREJNIiwgIlVTRV9UREIiLCAiVVNFX05EQk0iIH07CiAKIHN0YXRpYyBpbnQg
aGF2ZV9pcHY2ID0gMDsKIHN0YXRpYyBpbnQgaGF2ZV9pY29udiA9IDA7CkBAIC0yMjEsOCArMjIy
LDcgQEAKIAogLyogTm93IHNlYXJjaCB0aGUgbWFrZWZpbGUgZm9yIGNlcnRhaW4gc2V0dGluZ3Mg
Ki8KIAotYmFzZSA9IGZvcGVuKCJNYWtlZmlsZSIsICJyYiIpOwotaWYgKGJhc2UgPT0gTlVMTCkK
K2lmICghKGJhc2UgPSBmb3BlbigiTWFrZWZpbGUiLCAicmIiKSkpCiAgIHsKICAgcHJpbnRmKCIq
KiogQnVpbGRjb25maWc6IGZhaWxlZCB0byBvcGVuIE1ha2VmaWxlXG4iKTsKICAgKHZvaWQpZmNs
b3NlKG5ldyk7CkBAIC0zODcsNyArMzg3LDYgQEAKICAgZW5jb3VudGVyZWQuICovCiAKICAgZm9y
IChpID0gMTsgaSA8IHNpemVvZihkYl9vcHRzKS9zaXplb2YoY2hhciAqKTsgaSsrKQotICAgIHsK
ICAgICBpZiAoc3RyY21wKG5hbWUsIGRiX29wdHNbaV0pID09IDApCiAgICAgICB7CiAgICAgICBp
ZiAodXNlX3doaWNoX2RiID09IGkpCkBAIC0zOTcsNyArMzk2LDYgQEAKICAgICAgICAgZnByaW50
ZihuZXcsICIvKiAlcyBub3Qgc2V0ICovXG4iLCBuYW1lKTsKICAgICAgIGJyZWFrOwogICAgICAg
fQotICAgIH0KICAgaWYgKGkgPCBzaXplb2YoZGJfb3B0cykvc2l6ZW9mKGNoYXIgKikpIGNvbnRp
bnVlOwogCiAgIC8qIEVYSU1fVVNFUiBpcyBhIHNwZWNpYWwgY2FzZS4gV2UgbG9vayBpbiB0aGUg
ZW52aXJvbm1lbnQgZm9yIEVYSU1fVVNFUiBvcgpkaWZmIC11ciBleGltLm9yaWcvc3JjL2NoaWxk
LmMgZXhpbS9zcmMvY2hpbGQuYwotLS0gZXhpbS5vcmlnL3NyYy9jaGlsZC5jCTIwMjMtMDYtMDQg
MTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9jaGlsZC5jCTIwMjItMDYtMjMg
MTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFu
IEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4
aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0
eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTUgKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0g
TWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9u
cyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogCkBAIC0yNyw3ICsyNyw3IEBACiBSZXR1
cm5zOiAgICAgICBub3RoaW5nCiAqLwogCi1zdGF0aWMgdm9pZAordm9pZAogZm9yY2VfZmQoaW50
IG9sZGZkLCBpbnQgbmV3ZmQpCiB7CiBpZiAob2xkZmQgPT0gbmV3ZmQpIHJldHVybjsKQEAgLTc2
LDIyICs3NiwxOSBAQAogaW50IGV4dHJhID0gcGNvdW50ID8gKnBjb3VudCA6IDA7CiB1c2NoYXIg
Kiphcmd2OwogCi1hcmd2ID0gc3RvcmVfZ2V0KChleHRyYSArIGFjb3VudCArIE1BWF9DTE1BQ1JP
UyArIDIxKSAqIHNpemVvZihjaGFyICopLCBGQUxTRSk7Cithcmd2ID0gc3RvcmVfZ2V0KChleHRy
YSArIGFjb3VudCArIE1BWF9DTE1BQ1JPUyArIDI0KSAqIHNpemVvZihjaGFyICopLCBHRVRfVU5U
QUlOVEVEKTsKIAogLyogSW4gYWxsIGNhc2UsIHRoZSBsaXN0IHN0YXJ0cyBvdXQgd2l0aCB0aGUg
cGF0aCwgYW55IG1hY3JvcywgYW5kIGEgY2hhbmdlZAogY29uZmlnIGZpbGUuICovCiAKLWFyZ3Zb
bisrXSA9IGV4aW1fcGF0aDsKK2FyZ3ZbbisrXSA9IGV4aW1fcGF0aDsJCS8qIGFzc3VtZSB1bnRh
aW50ZWQgKi8KIGlmIChjbG1hY3JvX2NvdW50ID4gMCkKICAgewogICBtZW1jcHkoYXJndiArIG4s
IGNsbWFjcm9zLCBjbG1hY3JvX2NvdW50ICogc2l6ZW9mKHVzY2hhciAqKSk7CiAgIG4gKz0gY2xt
YWNyb19jb3VudDsKICAgfQogaWYgKGYuY29uZmlnX2NoYW5nZWQpCi0gIHsKLSAgYXJndltuKytd
ID0gVVMiLUMiOwotICBhcmd2W24rK10gPSBjb25maWdfbWFpbl9maWxlbmFtZTsKLSAgfQorICB7
IGFyZ3ZbbisrXSA9IFVTIi1DIjsgYXJndltuKytdID0gY29uZmlnX21haW5fZmlsZW5hbWU7IH0K
IAogLyogVGhlc2UgdmFsdWVzIGFyZSBhZGRlZCBvbmx5IGZvciBub24tbWluaW1hbCBjYXNlcy4g
SWYgZGVidWdfc2VsZWN0b3IgaXMKIHByZWNpc2VseSBEX3YsIHdlIGhhdmUgdG8gYXNzdW1lIHRo
aXMgd2FzIHN0YXJ0ZWQgYnkgYSBub24tYWRtaW4gdXNlciwgYW5kCkBAIC0xMDgsMjQgKzEwNSwz
NSBAQAogICBlbHNlCiAgICAgewogICAgIGlmIChkZWJ1Z19zZWxlY3RvciAhPSAwKQorICAgICAg
ewogICAgICAgYXJndltuKytdID0gc3RyaW5nX3NwcmludGYoIi1kPTB4JXgiLCBkZWJ1Z19zZWxl
Y3Rvcik7CisgICAgICBpZiAoZGVidWdfZmQgPiAyKQorCXsKKwlpbnQgZmxhZ3MgPSBmY250bChk
ZWJ1Z19mZCwgRl9HRVRGRCk7CisJaWYgKGZsYWdzICE9IC0xKSAodm9pZClmY250bChkZWJ1Z19m
ZCwgRl9TRVRGRCwgZmxhZ3MgJiB+RkRfQ0xPRVhFQyk7CisJY2xvc2UoMik7CisJZHVwMihkZWJ1
Z19mZCwgMik7CisJY2xvc2UoZGVidWdfZmQpOworCX0KKyAgICAgIH0KICAgICB9CisgIGlmIChk
ZWJ1Z19wcmV0cmlnZ2VyX2J1ZikKKyAgICB7IGFyZ3ZbbisrXSA9IFVTIi1kcCI7IGFyZ3Zbbisr
XSA9IHN0cmluZ19zcHJpbnRmKCIweCV4IiwgZGVidWdfcHJldHJpZ2dlcl9ic2l6ZSk7IH0KKyAg
aWYgKGR0cmlnZ2VyX3NlbGVjdG9yICE9IDApCisgICAgYXJndltuKytdID0gc3RyaW5nX3Nwcmlu
dGYoIi1kdD0weCV4IiwgZHRyaWdnZXJfc2VsZWN0b3IpOwogICBERUJVRyhEX2FueSkKICAgICB7
CiAgICAgYXJndltuKytdID0gVVMiLU1DZCI7CiAgICAgYXJndltuKytdID0gVVMgcHJvY2Vzc19w
dXJwb3NlOwogICAgIH0KLSAgaWYgKCFmLnRlc3RzdWl0ZV9kZWxheXMpIGFyZ3ZbbisrXSA9IFVT
Ii1vZGQiOwotICBpZiAoZi5kb250X2RlbGl2ZXIpIGFyZ3ZbbisrXSA9IFVTIi1OIjsKLSAgaWYg
KGYucXVldWVfc210cCkgYXJndltuKytdID0gVVMiLW9kcXMiOwotICBpZiAoZi5zeW5jaHJvbm91
c19kZWxpdmVyeSkgYXJndltuKytdID0gVVMiLW9kaSI7CisgIGlmICghZi50ZXN0c3VpdGVfZGVs
YXlzKQlhcmd2W24rK10gPSBVUyItb2RkIjsKKyAgaWYgKGYuZG9udF9kZWxpdmVyKQkJYXJndltu
KytdID0gVVMiLU4iOworICBpZiAoZi5xdWV1ZV9zbXRwKQkJYXJndltuKytdID0gVVMiLW9kcXMi
OworICBpZiAoZi5zeW5jaHJvbm91c19kZWxpdmVyeSkJYXJndltuKytdID0gVVMiLW9kaSI7CiAg
IGlmIChjb25uZWN0aW9uX21heF9tZXNzYWdlcyA+PSAwKQogICAgIGFyZ3ZbbisrXSA9IHN0cmlu
Z19zcHJpbnRmKCItb0IlZCIsIGNvbm5lY3Rpb25fbWF4X21lc3NhZ2VzKTsKICAgaWYgKCpxdWV1
ZV9uYW1lKQotICAgIHsKLSAgICBhcmd2W24rK10gPSBVUyItTUNHIjsKLSAgICBhcmd2W24rK10g
PSBxdWV1ZV9uYW1lOwotICAgIH0KKyAgICB7IGFyZ3ZbbisrXSA9IFVTIi1NQ0ciOyBhcmd2W24r
K10gPSBxdWV1ZV9uYW1lOyB9CiAgIH0KIAogLyogTm93IGFkZCBpbiBhbnkgb3RoZXJzIHRoYXQg
YXJlIGluIHRoZSBjYWxsLiBSZW1lbWJlciB3aGljaCB0aGV5IHdlcmUsCkBAIC0xNTksNyArMTY3
LDcgQEAKIGV4ZWN2KENTIGFyZ3ZbMF0sIChjaGFyICpjb25zdCAqKWFyZ3YpOwogCiBsb2dfd3Jp
dGUoMCwKLSAgTE9HX01BSU4gfCAoKGV4ZWNfdHlwZSA9PSBDRUVfRVhFQ19FWElUKT8gTE9HX1BB
TklDIDogTE9HX1BBTklDX0RJRSksCisgIExPR19NQUlOIHwgKGV4ZWNfdHlwZSA9PSBDRUVfRVhF
Q19FWElUID8gTE9HX1BBTklDIDogTE9HX1BBTklDX0RJRSksCiAgICJyZS1leGVjIG9mIGV4aW0g
KCVzKSB3aXRoICVzIGZhaWxlZDogJXMiLCBleGltX3BhdGgsIGFyZ3ZbZmlyc3Rfc3BlY2lhbF0s
CiAgIHN0cmVycm9yKGVycm5vKSk7CiAKQEAgLTI2OSw2ICsyNzcsOCBAQAogICAgIH0KICAgfQog
Cit0ZXN0aGFybmVzc19wYXVzZV9tcygxMDApOyAvKiBsZXQgY2hpbGQgd29yayBldmVuIGxvbmdl
ciwgZm9yIGV4ZWMgKi8KKwogLyogUGFyZW50IHByb2Nlc3MuIFNhdmUgZm9yaygpIGVycm5vIGFu
ZCBjbG9zZSB0aGUgcmVhZGluZyBlbmQgb2YgdGhlIHN0ZGluCiBwaXBlLiAqLwogCkBAIC0zMzMs
NiArMzQzLDEzIEBACiBpbnQgaW5wZmRbMl0sIG91dHBmZFsyXTsKIHBpZF90IHBpZDsKIAoraWYg
KGlzX3RhaW50ZWQoYXJndlswXSkpCisgIHsKKyAgbG9nX3dyaXRlKDAsIExPR19NQUlOIHwgTE9H
X1BBTklDLCAiQXR0ZW1wdCB0byBleGVjIHRhaW50ZWQgcGF0aDogJyVzJyIsIGFyZ3ZbMF0pOwor
ICBlcnJubyA9IEVQRVJNOworICByZXR1cm4gKHBpZF90KSgtMSk7CisgIH0KKwogLyogQ3JlYXRl
IHRoZSBwaXBlcy4gKi8KIAogaWYgKHBpcGUoaW5wZmQpICE9IDApIHJldHVybiAocGlkX3QpKC0x
KTsK0KLQvtC70YzQutC+INCyIGV4aW0vc3JjOiBjbnVtYmVyLmgKZGlmZiAtdXIgZXhpbS5vcmln
L3NyYy9jb25maWcuaC5kZWZhdWx0cyBleGltL3NyYy9jb25maWcuaC5kZWZhdWx0cwotLS0gZXhp
bS5vcmlnL3NyYy9jb25maWcuaC5kZWZhdWx0cwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAw
MCArMDMwMAorKysgZXhpbS9zcmMvY29uZmlnLmguZGVmYXVsdHMJMjAyMi0wNi0yMyAxNjo0MTox
MC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJu
ZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWlu
dGFpbmVycyAyMDE4IC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENh
bWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFp
bmVycyAyMDE4LTIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMg
b2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIC8qIFRoZSBkZWZhdWx0IHNldHRpbmdzIGZv
ciBFeGltIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBBICNkZWZpbmUgd2l0aG91dApAQCAtMzEs
NyArMzEsNyBAQAogI2RlZmluZSBBVVRIX1NQQQogI2RlZmluZSBBVVRIX1RMUwogCi0jZGVmaW5l
IEFVVEhfVkFSUyAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVUSF9WQVJTICAgICAg
ICAgICAgICAgICAgICAgNAogCiAjZGVmaW5lIEJJTl9ESVJFQ1RPUlkKIApAQCAtNDYsMTQgKzQ2
LDE4IEBACiAjZGVmaW5lIERFRkFVTFRfQ1JZUFQgICAgICAgICAgICAgIGNyeXB0CiAjZGVmaW5l
IERFTElWRVJfSU5fQlVGRkVSX1NJWkUgICAgIDgxOTIKICNkZWZpbmUgREVMSVZFUl9PVVRfQlVG
RkVSX1NJWkUgICAgODE5MgorCisjZGVmaW5lIERJU0FCTEVfQ0xJRU5UX0NNRF9MT0cKKyNkZWZp
bmUgRElTQUJMRV9EX09QVElPTgogI2RlZmluZSBESVNBQkxFX0ROU1NFQwogI2RlZmluZSBESVNB
QkxFX0RLSU0KICNkZWZpbmUgRElTQUJMRV9FVkVOVAogI2RlZmluZSBESVNBQkxFX09DU1AKICNk
ZWZpbmUgRElTQUJMRV9QSVBFX0NPTk5FQ1QKICNkZWZpbmUgRElTQUJMRV9QUkRSCisjZGVmaW5l
IERJU0FCTEVfUVVFVUVfUkFNUAogI2RlZmluZSBESVNBQkxFX1RMUwotI2RlZmluZSBESVNBQkxF
X0RfT1BUSU9OCisjZGVmaW5lIERJU0FCTEVfVExTX1JFU1VNRQogCiAjZGVmaW5lIEVOQUJMRV9E
SVNBQkxFX0ZTWU5DCiAKQEAgLTk3LDYgKzEwMSw3IEBACiAjZGVmaW5lIExPT0tVUF9JQkFTRQog
I2RlZmluZSBMT09LVVBfSlNPTgogI2RlZmluZSBMT09LVVBfTERBUAorI2RlZmluZSBMT09LVVBf
TE1EQgogI2RlZmluZSBMT09LVVBfTFNFQVJDSAogI2RlZmluZSBMT09LVVBfTVlTUUwKICNkZWZp
bmUgTE9PS1VQX05JUwpAQCAtMTU2LDYgKzE2MSw3IEBACiAjZGVmaW5lIFNVUFBPUlRfUFJPWFkK
ICNkZWZpbmUgU1VQUE9SVF9TT0NLUwogI2RlZmluZSBTVVBQT1JUX1NQRgorI2RlZmluZSBTVVBQ
T1JUX1NSUwogI2RlZmluZSBTVVBQT1JUX1RSQU5TTEFURV9JUF9BRERSRVNTCiAKICNkZWZpbmUg
U1lTTE9HX0xPR19QSUQKQEAgLTE3NSw2ICsxODEsNyBAQAogI2RlZmluZSBVU0VfR0RCTQogI2Rl
ZmluZSBVU0VfR05VVExTCiAjZGVmaW5lIEFWT0lEX0dOVVRMU19QS0NTMTEKKyNkZWZpbmUgVVNF
X05EQk0KICNkZWZpbmUgVVNFX09QRU5TU0wKICNkZWZpbmUgVVNFX1JFQURMSU5FCiAjZGVmaW5l
IFVTRV9UQ1BfV1JBUFBFUlMKQEAgLTIwMSwxMiArMjA4LDggQEAKICNkZWZpbmUgRVhQRVJJTUVO
VEFMX0JSSUdIVE1BSUwKICNkZWZpbmUgRVhQRVJJTUVOVEFMX0RDQwogI2RlZmluZSBFWFBFUklN
RU5UQUxfRFNOX0lORk8KLSNkZWZpbmUgRVhQRVJJTUVOVEFMX0xNREIKLSNkZWZpbmUgRVhQRVJJ
TUVOVEFMX1FVRVVFX1JBTVAKKyNkZWZpbmUgRVhQRVJJTUVOVEFMX0VTTVRQX0xJTUlUUwogI2Rl
ZmluZSBFWFBFUklNRU5UQUxfUVVFVUVGSUxFCi0jZGVmaW5lIEVYUEVSSU1FTlRBTF9TUlMKLSNk
ZWZpbmUgRVhQRVJJTUVOVEFMX1NSU19OQVRJVkUKLSNkZWZpbmUgRVhQRVJJTUVOVEFMX1RMU19S
RVNVTUUKIAogCiAvKiBGb3IgZGV2ZWxvcGVycyAqLwpkaWZmIC11ciBleGltLm9yaWcvc3JjL2Nv
bmZpZ3VyZS5kZWZhdWx0IGV4aW0vc3JjL2NvbmZpZ3VyZS5kZWZhdWx0Ci0tLSBleGltLm9yaWcv
c3JjL2NvbmZpZ3VyZS5kZWZhdWx0CTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAw
CisrKyBleGltL3NyYy9jb25maWd1cmUuZGVmYXVsdAkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAw
MDAwMCArMDMwMApAQCAtMTQ3LDE1ICsxNDcsMTUgQEAKICMgc3BhbWRfYWRkcmVzcyA9IDEyNy4w
LjAuMSA3ODMKIAogCi0jIElmIEV4aW0gaXMgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBUTFMs
IHlvdSBtYXkgd2FudCB0byBlbmFibGUgdGhlCi0jIGZvbGxvd2luZyBvcHRpb25zIHNvIHRoYXQg
RXhpbSBhbGxvd3MgY2xpZW50cyB0byBtYWtlIGVuY3J5cHRlZAotIyBjb25uZWN0aW9ucy4gSW4g
dGhlIGF1dGhlbnRpY2F0b3JzIHNlY3Rpb24gYmVsb3csIHRoZXJlIGFyZSB0ZW1wbGF0ZQotIyBj
b25maWd1cmF0aW9ucyBmb3IgcGxhaW50ZXh0IHVzZXJuYW1lL3Bhc3N3b3JkIGF1dGhlbnRpY2F0
aW9uLiBUaGlzIGtpbmQKLSMgb2YgYXV0aGVudGljYXRpb24gaXMgb25seSBzYWZlIHdoZW4gdXNl
ZCB3aXRoaW4gYSBUTFMgY29ubmVjdGlvbiwgc28gdGhlCi0jIGF1dGhlbnRpY2F0b3JzIHdpbGwg
b25seSB3b3JrIGlmIHRoZSBmb2xsb3dpbmcgVExTIHNldHRpbmdzIGFyZSB0dXJuZWQgb24KLSMg
YXMgd2VsbC4KKyMgSWYgRXhpbSBpcyBjb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yIFRMUywgeW91
IG1heSB3YW50IHRvIGNoYW5nZSB0aGUKKyMgZm9sbG93aW5nIG9wdGlvbiBzbyB0aGF0IEV4aW0g
ZGlzYWxsb3dzIGNlcnRhaW4gY2xpZW50cyBmcm9tIG1ha2VpbmcgZW5jcnlwdGVkCisjIGNvbm5l
Y3Rpb25zLiBUaGUgZGVmYXVsdCBpcyB0byBhbGxvdyBhbGwuCisjIEluIHRoZSBhdXRoZW50aWNh
dG9ycyBzZWN0aW9uIGJlbG93LCB0aGVyZSBhcmUgdGVtcGxhdGUgY29uZmlndXJhdGlvbnMgZm9y
CisjIHBsYWludGV4dCB1c2VybmFtZS9wYXNzd29yZCBhdXRoZW50aWNhdGlvbi4gVGhpcyBraW5k
IG9mIGF1dGhlbnRpY2F0aW9uIGlzCisjIG9ubHkgc2FmZSB3aGVuIHVzZWQgd2l0aGluIGEgVExT
IGNvbm5lY3Rpb24sIHNvIHRoZSBhdXRoZW50aWNhdG9ycyB3aWxsIG9ubHkKKyMgd29yayBpZiBU
TFMgaXMgYWxsb3dlZCBoZXJlLgogCi0jIEFsbG93IGFueSBjbGllbnQgdG8gdXNlIFRMUy4KKyMg
VGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZWZhdWx0LgogCiAjIHRsc19hZHZlcnRpc2VfaG9z
dHMgPSAqCiAKQEAgLTE2OSw3ICsxNjksMTYgQEAKICMgdGxzX3ByaXZhdGVrZXkgPSAvZXRjL3Nz
bC9leGltLnBlbQogCiAjIEZvciBPcGVuU1NMLCBwcmVmZXIgRUMtIG92ZXIgUlNBLWF1dGhlbnRp
Y2F0ZWQgY2lwaGVycwotIyB0bHNfcmVxdWlyZV9jaXBoZXJzID0gRUNEU0E6UlNBOiFDT01QTEVN
RU5UT0ZERUZBVUxUCisuaWZkZWYgX0hBVkVfT1BFTlNTTAordGxzX3JlcXVpcmVfY2lwaGVycyA9
IEVDRFNBOlJTQTohQ09NUExFTUVOVE9GREVGQVVMVAorLmVuZGlmCisKKyMgRG9uJ3Qgb2ZmZXIg
cmVzdW1wdGlvbiB0byAobW9zdCkgTVVBcywgd2hvIHdlIGRvbid0IHdhbnQgdG8gcmV1c2UKKyMg
dGlja2V0cy4gIE9uY2UgdGhlIFRMUyBleHRlbnNpb24gZm9yIHZlbmRlZCB0aWNrZXQgbnVtYmVy
cyBjb21lcworIyB0aG91Z2gsIHJlLWV4YW1pbmUgc2luY2UgcmVzdW1wdGlvbiBvbiBhIHNpbmds
ZS11c2UgdGlja2V0IGlzIHN0aWxsIGEgYmVuZWZpdC4KKy5pZmRlZiBfSEFWRV9UTFNfUkVTVU1F
Cit0bHNfcmVzdW1wdGlvbl9ob3N0cyA9ICR7aWYgaW5saXN0IHskcmVjZWl2ZWRfcG9ydH17NTg3
OjQ2NX0gezp9eyp9fQorLmVuZGlmCiAKICMgSW4gb3JkZXIgdG8gc3VwcG9ydCByb2FtaW5nIHVz
ZXJzIHdobyB3aXNoIHRvIHNlbmQgZW1haWwgZnJvbSBhbnl3aGVyZSwKICMgeW91IG1heSB3YW50
IHRvIG1ha2UgRXhpbSBsaXN0ZW4gb24gb3RoZXIgcG9ydHMgYXMgd2VsbCBhcyBwb3J0IDI1LCBp
bgpAQCAtNDk1LDExICs1MDQsNiBAQAogICAgICAgICAgIGNvbnRyb2wgICAgICAgPSBzdWJtaXNz
aW9uCiAgICAgICAgICAgY29udHJvbCAgICAgICA9IGRraW1fZGlzYWJsZV92ZXJpZnkKIAotICAj
IEluc2lzdCB0aGF0IGEgSEVMTy9FSExPIHdhcyBhY2NlcHRlZC4KLQotICByZXF1aXJlIG1lc3Nh
Z2UgICAgICAgPSBuaWNlIGhvc3RzIHNheSBIRUxPIGZpcnN0Ci0gICAgICAgICAgY29uZGl0aW9u
ICAgICA9ICR7aWYgZGVmOnNlbmRlcl9oZWxvX25hbWV9Ci0KICAgIyBJbnNpc3QgdGhhdCBhbnkg
b3RoZXIgcmVjaXBpZW50IGFkZHJlc3MgdGhhdCB3ZSBhY2NlcHQgaXMgZWl0aGVyIGluIG9uZSBv
ZgogICAjIG91ciBsb2NhbCBkb21haW5zLCBvciBpcyBpbiBhIGRvbWFpbiBmb3Igd2hpY2ggd2Ug
ZXhwbGljaXRseSBhbGxvdwogICAjIHJlbGF5aW5nLiBBbnkgb3RoZXIgZG9tYWluIGlzIHJlamVj
dGVkIGFzIGJlaW5nIHVuYWNjZXB0YWJsZSBmb3IgcmVsYXlpbmcuCkBAIC01NDUsMTEgKzU0OSwx
MSBAQAogICAjIHRvIHRoZSBmaXJzdCByZWNpcGllbnQgbXVzdCBiZSBkZWZlcnJlZCB1bmxlc3Mg
dGhlIHNlbmRlciB0YWxrcyBQUkRSLgogICAjCiAgICMgZGVmZXIgICFjb25kaXRpb24gICAgID0g
JHByZHJfcmVxdWVzdGVkCi0gICMgICAgICAgIGNvbmRpdGlvbiAgICAgID0gJHtpZiA+IHswfXsk
cmVjZWlwaWVudHNfY291bnR9fQorICAjICAgICAgICBjb25kaXRpb24gICAgICA9ICR7aWYgPiB7
MH17JHJlY2lwaWVudHNfY291bnR9fQogICAjICAgICAgICBjb25kaXRpb24gICAgICA9ICR7aWYg
IWVxIHskYWNsX21fY29udGVudF9maWx0ZXJ9IFwKICAgIyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7JHtsb29rdXAgUEVSX1JDUFRfQ09OVEVOVF9GSUxURVJ9fX0KICAgIyB3YXJu
ICAgIWNvbmRpdGlvbiAgICAgPSAkcHJkcl9yZXF1ZXN0ZWQKLSAgIyAgICAgICAgY29uZGl0aW9u
ICAgICAgPSAke2lmID4gezB9eyRyZWNlaXBpZW50c19jb3VudH19CisgICMgICAgICAgIGNvbmRp
dGlvbiAgICAgID0gJHtpZiA+IHswfXskcmVjaXBpZW50c19jb3VudH19CiAgICMgICAgICAgIHNl
dCBhY2xfbV9jb250ZW50X2ZpbHRlciA9ICR7bG9va3VwIFBFUl9SQ1BUX0NPTlRFTlRfRklMVEVS
fQogICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC04MTUsMTMgKzgxOSwxMiBAQAogCiAKICMg
VGhpcyB0cmFuc3BvcnQgaXMgdXNlZCBmb3IgZGVsaXZlcmluZyBtZXNzYWdlcyBvdmVyIFNNVFAg
Y29ubmVjdGlvbnMuCi0jIFJlZnVzZSB0byBzZW5kIGFueSBtZXNzYWdlIHdpdGggb3Zlci1sb25n
IGxpbmVzLCB3aGljaCBjb3VsZCBoYXZlCi0jIGJlZW4gcmVjZWl2ZWQgb3RoZXIgdGhhbiB2aWEg
U01UUC4gVGhlIHVzZSBvZiBtZXNzYWdlX3NpemVfbGltaXQgdG8KLSMgZW5mb3JjZSB0aGlzIGlz
IGEgcmVkIGhlcnJpbmcuCiAKIHJlbW90ZV9zbXRwOgogICBkcml2ZXIgPSBzbXRwCi0gIG1lc3Nh
Z2Vfc2l6ZV9saW1pdCA9ICR7aWYgPiB7JG1heF9yZWNlaXZlZF9saW5lbGVuZ3RofXs5OTh9IHsx
fXswfX0KKy5pZmRlZiBfSEFWRV9UTFNfUkVTVU1FCisgIHRsc19yZXN1bXB0aW9uX2hvc3RzID0g
KgorLmVuZGlmCiAKIAogIyBUaGlzIHRyYW5zcG9ydCBpcyB1c2VkIGZvciBkZWxpdmVyaW5nIG1l
c3NhZ2VzIHRvIGEgc21hcnRob3N0LCBpZiB0aGUKQEAgLTgzMyw3ICs4MzYsNiBAQAogCiBzbWFy
dGhvc3Rfc210cDoKICAgZHJpdmVyID0gc210cAotICBtZXNzYWdlX3NpemVfbGltaXQgPSAke2lm
ID4geyRtYXhfcmVjZWl2ZWRfbGluZWxlbmd0aH17OTk4fSB7MX17MH19CiAgIG11bHRpX2RvbWFp
bgogICAjCiAuaWZkZWYgX0hBVkVfVExTCkBAIC04NDEsOSArODQzLDkgQEAKICAgIyByZXF1ZXN0
IHdpdGggeW91ciBzbWFydGhvc3QgcHJvdmlkZXIgdG8gZ2V0IHRoaW5ncyBmaXhlZDoKICAgaG9z
dHNfcmVxdWlyZV90bHMgPSAqCiAgIHRsc192ZXJpZnlfaG9zdHMgPSAqCi0gICMgQXMgbG9uZyBh
cyB0bHNfdmVyaWZ5X2hvc3RzIGlzIGVuYWJsZWQsIHRoaXMgd29uJ3QgbWF0dGVyLCBidXQgaWYg
eW91Ci0gICMgaGF2ZSB0byBjb21tZW50IGl0IG91dCB0aGVuIHRoaXMgd2lsbCBhdCBsZWFzdCBs
b2cgd2hldGhlciB5b3Ugc3VjY2VlZAotICAjIG9yIG5vdDoKKyAgIyBBcyBsb25nIGFzIHRsc192
ZXJpZnlfaG9zdHMgaXMgZW5hYmxlZCwgdGhpcyB0aGlzIHdpbGwgaGF2ZSBubyBlZmZlY3QsCisg
ICMgYnV0IGlmIHlvdSBoYXZlIHRvIGNvbW1lbnQgaXQgb3V0IHRoZW4gdGhpcyB3aWxsIGF0IGxl
YXN0IGxvZyB3aGV0aGVyCisgICMgeW91IHN1Y2NlZWQgb3Igbm90OgogICB0bHNfdHJ5X3Zlcmlm
eV9ob3N0cyA9ICoKICAgIwogICAjIFRoZSBTTkkgbmFtZSBzaG91bGQgbWF0Y2ggdGhlIG5hbWUg
d2hpY2ggd2UnbGwgZXhwZWN0IHRvIHZlcmlmeTsKQEAgLTg1OSw2ICs4NjEsOSBAQAogLmlmZGVm
IF9IQVZFX0dOVVRMUwogICB0bHNfcmVxdWlyZV9jaXBoZXJzID0gU0VDVVJFMTkyOi1WRVJTLVNT
TDMuMDotVkVSUy1UTFMxLjA6LVZFUlMtVExTMS4xCiAuZW5kaWYKKy5pZmRlZiBfSEFWRV9UTFNf
UkVTVU1FCisgIHRsc19yZXN1bXB0aW9uX2hvc3RzID0gKgorLmVuZGlmCiAuZW5kaWYKIAogCmRp
ZmYgLXVyIGV4aW0ub3JpZy9zcmMvZGFlbW9uLmMgZXhpbS9zcmMvZGFlbW9uLmMKLS0tIGV4aW0u
b3JpZy9zcmMvZGFlbW9uLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysr
IGV4aW0vc3JjL2RhZW1vbi5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBA
IC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFn
ZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIg
Ki8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTgg
Ki8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2Vl
IHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4g
Ki8KIAogLyogRnVuY3Rpb25zIGNvbmNlcm5lZCB3aXRoIHJ1bm5pbmcgRXhpbSBhcyBhIGRhZW1v
biAqLwpAQCAtNTksNyArNTksNiBAQAogc3RhdGljIHZvaWQKIHNpZ2h1cF9oYW5kbGVyKGludCBz
aWcpCiB7Ci1zaWcgPSBzaWc7ICAgIC8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCiBz
aWdodXBfc2VlbiA9IFRSVUU7CiBzaWduYWwoU0lHSFVQLCBzaWdodXBfaGFuZGxlcik7CiB9CkBA
IC04MywxMyArODIsMTIgQEAKIHN0YXRpYyB2b2lkCiBtYWluX3NpZ2NobGRfaGFuZGxlcihpbnQg
c2lnKQogewotc2lnID0gc2lnOyAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwog
b3Nfbm9uX3Jlc3RhcnRpbmdfc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOwogc2lnY2hsZF9zZWVu
ID0gVFJVRTsKIH0KIAogCi0vKiBTSUdURVJNIGhhbmRsZXIuICBUcnkgdG8gZ2V0IHRoZSBkYW1v
biBwaWYgZmlsZSByZW1vdmVkCisvKiBTSUdURVJNIGhhbmRsZXIuICBUcnkgdG8gZ2V0IHRoZSBk
YWVtb24gcGlkIGZpbGUgcmVtb3ZlZAogYmVmb3JlIGV4aXRpbmcuICovCiAKIHN0YXRpYyB2b2lk
CkBAIC0xNDMsNyArMTQxLDcgQEAKIAogc3RhdGljIHZvaWQKIGNsb3NlX2RhZW1vbl9zb2NrZXRz
KGludCBkYWVtb25fbm90aWZpZXJfZmQsCi0gIGludCAqIGxpc3Rlbl9zb2NrZXRzLCBpbnQgbGlz
dGVuX3NvY2tldF9jb3VudCkKKyAgc3RydWN0IHBvbGxmZCAqIGZkX3BvbGxzLCBpbnQgbGlzdGVu
X3NvY2tldF9jb3VudCkKIHsKIGlmIChkYWVtb25fbm90aWZpZXJfZmQgPj0gMCkKICAgewpAQCAt
MTU0LDcgKzE1Miw3IEBACiAjZW5kaWYKICAgfQogCi1mb3IgKGludCBpID0gMDsgaSA8IGxpc3Rl
bl9zb2NrZXRfY291bnQ7IGkrKykgKHZvaWQpIGNsb3NlKGxpc3Rlbl9zb2NrZXRzW2ldKTsKK2Zv
ciAoaW50IGkgPSAwOyBpIDwgbGlzdGVuX3NvY2tldF9jb3VudDsgaSsrKSAodm9pZCkgY2xvc2Uo
ZmRfcG9sbHNbaV0uZmQpOwogfQogCiAKQEAgLTE2OSw3ICsxNjcsNyBAQAogbGVhayBzdG9yZSBp
biB0aGlzIHByb2Nlc3MgLSByZXNldCB0aGUgc3RhY2tpbmcgcG9vbCBhdCB0aGUgZW5kLgogCiBB
cmd1bWVudHM6Ci0gIGxpc3Rlbl9zb2NrZXRzICAgICAgICBzb2NrZXRzIHdoaWNoIGFyZSBsaXN0
ZW5pbmcgZm9yIGluY29taW5nIGNhbGxzCisgIGZkX3BvbGxzICAgICAgICBzb2NrZXRzIHdoaWNo
IGFyZSBsaXN0ZW5pbmcgZm9yIGluY29taW5nIGNhbGxzCiAgIGxpc3Rlbl9zb2NrZXRfY291bnQg
ICBjb3VudCBvZiBsaXN0ZW5pbmcgc29ja2V0cwogICBhY2NlcHRfc29ja2V0ICAgICAgICAgc29j
a2V0IG9mIHRoZSBjdXJyZW50IGFjY2VwdGVkIGNhbGwKICAgYWNjZXB0ZWQgICAgICAgICAgICAg
IHNvY2tldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBjYWxsCkBAIC0xNzgsNyArMTc2
LDcgQEAKICovCiAKIHN0YXRpYyB2b2lkCi1oYW5kbGVfc210cF9jYWxsKGludCAqbGlzdGVuX3Nv
Y2tldHMsIGludCBsaXN0ZW5fc29ja2V0X2NvdW50LAoraGFuZGxlX3NtdHBfY2FsbChzdHJ1Y3Qg
cG9sbGZkICpmZF9wb2xscywgaW50IGxpc3Rlbl9zb2NrZXRfY291bnQsCiAgIGludCBhY2NlcHRf
c29ja2V0LCBzdHJ1Y3Qgc29ja2FkZHIgKmFjY2VwdGVkKQogewogcGlkX3QgcGlkOwpAQCAtMjc3
LDcgKzI3NSw3IEBACiBpZiAoc210cF9sb2FkX3Jlc2VydmUgPj0gMCkKICAgewogICBsb2FkX2F2
ZXJhZ2UgPSBPU19HRVRMT0FEQVZHKCk7Ci0gIGlmIChzbXRwX3Jlc2VydmVfaG9zdHMgPT0gTlVM
TCAmJiBsb2FkX2F2ZXJhZ2UgPiBzbXRwX2xvYWRfcmVzZXJ2ZSkKKyAgaWYgKCFzbXRwX3Jlc2Vy
dmVfaG9zdHMgJiYgbG9hZF9hdmVyYWdlID4gc210cF9sb2FkX3Jlc2VydmUpCiAgICAgewogICAg
IERFQlVHKERfYW55KSBkZWJ1Z19wcmludGYoInJlamVjdGluZyBTTVRQIGNvbm5lY3Rpb246IGxv
YWQgYXZlcmFnZSA9ICUuMmZcbiIsCiAgICAgICAoZG91YmxlKWxvYWRfYXZlcmFnZS8xMDAwLjAp
OwpAQCAtMjk3LDEwICsyOTUsMTAgQEAKIHRoaXMgaXMgaW4gdGhlIGRhZW1vbiBtYWlubGluZSwg
b25seSBmYXN0IGV4cGFuc2lvbnMgKHN1Y2ggYXMgaW5saW5lIGFkZHJlc3MKIGNoZWNrcykgc2hv
dWxkIGJlIHVzZWQuIFRoZSBkb2N1bWVudGF0aW9uIGlzIGZ1bGwgb2Ygd2FybmluZ3MuICovCiAK
LWlmIChzbXRwX2FjY2VwdF9tYXhfcGVyX2hvc3QgIT0gTlVMTCkKK2lmIChzbXRwX2FjY2VwdF9t
YXhfcGVyX2hvc3QpCiAgIHsKICAgdXNjaGFyICpleHBhbmRlZCA9IGV4cGFuZF9zdHJpbmcoc210
cF9hY2NlcHRfbWF4X3Blcl9ob3N0KTsKLSAgaWYgKGV4cGFuZGVkID09IE5VTEwpCisgIGlmICgh
ZXhwYW5kZWQpCiAgICAgewogICAgIGlmICghZi5leHBhbmRfc3RyaW5nX2ZvcmNlZGZhaWwpCiAg
ICAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAiZXhwYW5zaW9uIG9mIHNtdHBf
YWNjZXB0X21heF9wZXJfaG9zdCAiCkBAIC0zMTIsNyArMzEwLDcgQEAKICAgICB1c2NoYXIgKnMg
PSBleHBhbmRlZDsKICAgICB3aGlsZSAoaXNkaWdpdCgqcykpCiAgICAgICBtYXhfZm9yX3RoaXNf
aG9zdCA9IG1heF9mb3JfdGhpc19ob3N0ICogMTAgKyAqcysrIC0gJzAnOwotICAgIGlmICgqcyAh
PSAwKQorICAgIGlmICgqcykKICAgICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUMs
ICJleHBhbnNpb24gb2Ygc210cF9hY2NlcHRfbWF4X3Blcl9ob3N0ICIKICAgICAgICAgImZvciAl
cyBjb250YWlucyBub24tZGlnaXQ6ICVzIiwgd2hvZnJvbS0+cywgZXhwYW5kZWQpOwogICAgIH0K
QEAgLTMyMiw4ICszMjAsNyBAQAogcGVyIGhvc3RfYWRkcmVzcyBjaGVja3MuIE5vdGUgdGhhdCBh
dCB0aGlzIHN0YWdlIHNtdHBfYWNjZXB0X2NvdW50IGNvbnRhaW5zIHRoZQogY291bnQgb2YgKm90
aGVyKiBjb25uZWN0aW9ucywgbm90IGluY2x1ZGluZyB0aGlzIG9uZS4gKi8KIAotaWYgKChtYXhf
Zm9yX3RoaXNfaG9zdCA+IDApICYmCi0gICAgKHNtdHBfYWNjZXB0X2NvdW50ID49IG1heF9mb3Jf
dGhpc19ob3N0KSkKK2lmIChtYXhfZm9yX3RoaXNfaG9zdCA+IDAgJiYgc210cF9hY2NlcHRfY291
bnQgPj0gbWF4X2Zvcl90aGlzX2hvc3QpCiAgIHsKICAgaW50IGhvc3RfYWNjZXB0X2NvdW50ID0g
MDsKICAgaW50IG90aGVyX2hvc3RfY291bnQgPSAwOyAgICAvKiBrZWVwIGEgY291bnQgb2Ygbm9u
IG1hdGNoZXMgdG8gb3B0aW1pc2UgKi8KQEAgLTM0MCw4ICszMzcsOCBAQAogICAgICAgZWFybHks
IGVpdGhlciBieSBoaXR0aW5nIHRoZSB0YXJnZXQsIG9yIGZpbmRpbmcgdGhlcmUgYXJlIG5vdCBl
bm91Z2gKICAgICAgIGNvbm5lY3Rpb25zIGxlZnQgdG8gbWFrZSB0aGUgdGFyZ2V0LiAqLwogCi0g
ICAgICBpZiAoKGhvc3RfYWNjZXB0X2NvdW50ID49IG1heF9mb3JfdGhpc19ob3N0KSB8fAotICAg
ICAgICAgKChzbXRwX2FjY2VwdF9jb3VudCAtIG90aGVyX2hvc3RfY291bnQpIDwgbWF4X2Zvcl90
aGlzX2hvc3QpKQorICAgICAgaWYgKCAgaG9zdF9hY2NlcHRfY291bnQgPj0gbWF4X2Zvcl90aGlz
X2hvc3QKKyAgICAgICAgIHx8IHNtdHBfYWNjZXB0X2NvdW50IC0gb3RoZXJfaG9zdF9jb3VudCA8
IG1heF9mb3JfdGhpc19ob3N0KQogICAgICAgIGJyZWFrOwogICAgICAgfQogCkBAIC0zNzcsNyAr
Mzc0LDcgQEAKICAgewogICB1c2NoYXIgKmxpc3QgPSBob3N0c19jb25uZWN0aW9uX25vbG9nOwog
ICBtZW1zZXQoc2VuZGVyX2hvc3RfY2FjaGUsIDAsIHNpemVvZihzZW5kZXJfaG9zdF9jYWNoZSkp
OwotICBpZiAobGlzdCAhPSBOVUxMICYmIHZlcmlmeV9jaGVja19ob3N0KCZsaXN0KSA9PSBPSykK
KyAgaWYgKGxpc3QgJiYgdmVyaWZ5X2NoZWNrX2hvc3QoJmxpc3QpID09IE9LKQogICAgIHNhdmVf
bG9nX3NlbGVjdG9yICY9IH5MX3NtdHBfY29ubmVjdGlvbjsKICAgZWxzZQogICAgIGxvZ193cml0
ZShMX3NtdHBfY29ubmVjdGlvbiwgTE9HX01BSU4sICJTTVRQIGNvbm5lY3Rpb24gZnJvbSAlcyAi
CkBAIC0zOTksMTIgKzM5NiwxOCBAQAogICBpbnQgc2F2ZV9kZWJ1Z19zZWxlY3RvciA9IGRlYnVn
X3NlbGVjdG9yOwogICBCT09MIGxvY2FsX3F1ZXVlX29ubHk7CiAgIEJPT0wgc2Vzc2lvbl9sb2Nh
bF9xdWV1ZV9vbmx5OwotICAjaWZkZWYgU0FfTk9DTERXQUlUCisjaWZkZWYgU0FfTk9DTERXQUlU
CiAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0OwotICAjZW5kaWYKKyNlbmRpZgogCiAgIHNtdHBfYWNj
ZXB0X2NvdW50Kys7ICAgIC8qIFNvIHRoYXQgaXQgaW5jbHVkZXMgdGhpcyBwcm9jZXNzICovCiAK
KyAgLyogSWYgdGhlIGxpc3RlbiBiYWNrbG9nIHdhcyBvdmVyIHRoZSBtb25pdG9yaW5nIGxldmVs
LCBsb2cgaXQuICovCisKKyAgaWYgKHNtdHBfbGlzdGVuX2JhY2tsb2cgPiBzbXRwX2JhY2tsb2df
bW9uaXRvcikKKyAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU4sICJsaXN0ZW4gYmFja2xvZyAlZCBJ
PVslc106JWQiLAorCQlzbXRwX2xpc3Rlbl9iYWNrbG9nLCBpbnRlcmZhY2VfYWRkcmVzcywgaW50
ZXJmYWNlX3BvcnQpOworCiAgIC8qIE1heSBoYXZlIGJlZW4gbW9kaWZpZWQgZm9yIHRoZSBzdWJw
cm9jZXNzICovCiAKICAgKmxvZ19zZWxlY3RvciA9IHNhdmVfbG9nX3NlbGVjdG9yOwpAQCAtNDU2
LDcgKzQ1OSw3IEBACiAgIGV4dGVuc2l2ZSBjb21tZW50IGJlZm9yZSB0aGUgcmVjZXB0aW9uIGxv
b3AgaW4gZXhpbS5jIGZvciBhIGZ1bGxlcgogICBleHBsYW5hdGlvbiBvZiB0aGlzIGxvZ2ljLiAq
LwogCi0gIGNsb3NlX2RhZW1vbl9zb2NrZXRzKGRhZW1vbl9ub3RpZmllcl9mZCwgbGlzdGVuX3Nv
Y2tldHMsIGxpc3Rlbl9zb2NrZXRfY291bnQpOworICBjbG9zZV9kYWVtb25fc29ja2V0cyhkYWVt
b25fbm90aWZpZXJfZmQsIGZkX3BvbGxzLCBsaXN0ZW5fc29ja2V0X2NvdW50KTsKIAogICAvKiBT
ZXQgRkRfQ0xPRVhFQyBvbiB0aGUgU01UUCBzb2NrZXQuIFdlIGRvbid0IHdhbnQgYW55IHJvZ3Vl
IGNoaWxkIHByb2Nlc3NlcwogICB0byBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggdGhlbSwg
dW5kZXIgYW55IGNpcmN1bXN0YW5jZXMuICovCkBAIC00NjUsMTQgKzQ2OCwxNCBAQAogICAodm9p
ZClmY250bChkdXBfYWNjZXB0X3NvY2tldCwgRl9TRVRGRCwKICAgICAgICAgICAgICAgZmNudGwo
ZHVwX2FjY2VwdF9zb2NrZXQsIEZfR0VURkQpIHwgRkRfQ0xPRVhFQyk7CiAKLSAgI2lmZGVmIFNB
X05PQ0xEV0FJVAorI2lmZGVmIFNBX05PQ0xEV0FJVAogICBhY3Quc2FfaGFuZGxlciA9IFNJR19J
R047CiAgIHNpZ2VtcHR5c2V0KCYoYWN0LnNhX21hc2spKTsKICAgYWN0LnNhX2ZsYWdzID0gU0Ff
Tk9DTERXQUlUOwogICBzaWdhY3Rpb24oU0lHQ0hMRCwgJmFjdCwgTlVMTCk7Ci0gICNlbHNlCisj
ZWxzZQogICBzaWduYWwoU0lHQ0hMRCwgU0lHX0lHTik7Ci0gICNlbmRpZgorI2VuZGlmCiAgIHNp
Z25hbChTSUdURVJNLCBTSUdfREZMKTsKICAgc2lnbmFsKFNJR0lOVCwgU0lHX0RGTCk7CiAKQEAg
LTU1OCw3ICs1NjEsNyBAQAogICAgICAgICB9CiAgICAgICBpZiAobWVzc2FnZV9pZFswXSA9PSAw
KSBjb250aW51ZTsgICAvKiBObyBtZXNzYWdlIHdhcyBhY2NlcHRlZCAqLwogICAgICAgfQotICAg
IGVsc2UKKyAgICBlbHNlCQkJCS8qIGJhZCBzbXRwX3NldHVwX21zZygpICovCiAgICAgICB7CiAg
ICAgICBpZiAoc210cF9vdXQpCiAJewpAQCAtNjc4LDE2ICs2ODEsMTcgQEAKICAgICAgIHsKICAg
ICAgIHBpZF90IGRwaWQ7CiAKLSAgICAgIC8qIEJlZm9yZSBmb3JraW5nLCBlbnN1cmUgdGhhdCB0
aGUgQyBvdXRwdXQgYnVmZmVyIGlzIGZsdXNoZWQuIE90aGVyd2lzZQotICAgICAgYW55dGhpbmcg
dGhhdCBpdCBpbiBpdCB3aWxsIGdldCBkdXBsaWNhdGVkLCBsZWFkaW5nIHRvIGR1cGxpY2F0ZSBj
b3BpZXMKLSAgICAgIG9mIHRoZSBwZW5kaW5nIG91dHB1dC4gKi8KLQotICAgICAgbWFjX3NtdHBf
ZmZsdXNoKCk7CisgICAgICAvKiBXZSB1c2VkIHRvIGZsdXNoIHNtdHBfb3V0IGJlZm9yZSBmb3Jr
aW5nIHNvIHRoYXQgYnVmZmVyZWQgZGF0YSB3YXMgbm90CisgICAgICBkdXBsaWNhdGVkLCBidXQg
bm93IHdlIHdhbnQgdG8gcGlwZWxpbmUgdGhlIHJlc3BvbnNlcyBmb3IgZGF0YSBhbmQgcXVpdC4K
KyAgICAgIEluc3RlYWQsIGhhcmQtY2xvc2UgdGhlIGZkIHVuZGVybHlpbmcgc210cF9vdXQgcmln
aHQgYWZ0ZXIgZm9yayB0byBkaXNjYXJkCisgICAgICB0aGUgZGF0YSBidWZmZXIuICovCiAKICAg
ICAgIGlmICgoZHBpZCA9IGV4aW1fZm9yayhVUyJkYWVtb24tYWNjZXB0LWRlbGl2ZXJ5IikpID09
IDApCiAgICAgICAgIHsKICAgICAgICAgKHZvaWQpZmNsb3NlKHNtdHBfaW4pOworCSh2b2lkKWNs
b3NlKGZpbGVubyhzbXRwX291dCkpOwogICAgICAgICAodm9pZClmY2xvc2Uoc210cF9vdXQpOwor
CXNtdHBfaW4gPSBzbXRwX291dCA9IE5VTEw7CiAKICAgICAgICAgLyogRG9uJ3QgZXZlciBtb2xl
c3QgdGhlIHBhcmVudCdzIFNTTCBjb25uZWN0aW9uLCBidXQgZG8gY2xlYW4gdXAKICAgICAgICAg
dGhlIGRhdGEgc3RydWN0dXJlcyBpZiBuZWNlc3NhcnkuICovCkBAIC03ODksMTAgKzc5Myw4IEBA
CiB0aGUgaW5jb21pbmcgaG9zdCBhZGRyZXNzIGFuZCBhbiBleHBhbmRlZCBhY3RpdmVfaG9zdG5h
bWUuICovCiAKIGxvZ19jbG9zZV9hbGwoKTsKLWludGVyZmFjZV9hZGRyZXNzID0KLXNlbmRlcl9o
b3N0X2FkZHJlc3MgPSBOVUxMOworaW50ZXJmYWNlX2FkZHJlc3MgPSBzZW5kZXJfaG9zdF9uYW1l
ID0gc2VuZGVyX2hvc3RfYWRkcmVzcyA9IE5VTEw7CiBzdG9yZV9yZXNldChyZXNldF9wb2ludCk7
Ci1zZW5kZXJfaG9zdF9hZGRyZXNzID0gTlVMTDsKIH0KIAogCkBAIC05NTYsMjYgKzk1OCwyMCBA
QAogdGhlIGZpbGUuIEZJWE1FLgogUmV0dXJuczogdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSArIGVy
cm5vPT1FQUNDRVMgb3RoZXJ3aXNlCiAqLworCiBzdGF0aWMgQk9PTAogb3BlcmF0ZV9vbl9waWRf
ZmlsZShjb25zdCBlbnVtIHBpZF9vcCBvcGVyYXRpb24sIGNvbnN0IHBpZF90IHBpZCkKIHsKIGNo
YXIgcGlkX2xpbmVbc2l6ZW9mKGludCkgKiAzICsgMl07CiBjb25zdCBpbnQgcGlkX2xlbiA9IHNu
cHJpbnRmKHBpZF9saW5lLCBzaXplb2YocGlkX2xpbmUpLCAiJWRcbiIsIChpbnQpcGlkKTsKIEJP
T0wgbGluZXNfbWF0Y2ggPSBGQUxTRTsKLQotY2hhciAqIHBhdGggPSBOVUxMOwotY2hhciAqIGJh
c2UgPSBOVUxMOwotY2hhciAqIGRpciA9IE5VTEw7Cit1c2NoYXIgKiBwYXRoLCAqIGJhc2UsICog
ZGlyOwogCiBjb25zdCBpbnQgZGlyX2ZsYWdzID0gT19SRE9OTFkgfCBPX05PTkJMT0NLOwogY29u
c3QgaW50IGJhc2VfZmxhZ3MgPSBPX05PRk9MTE9XIHwgT19OT05CTE9DSzsKIGNvbnN0IG1vZGVf
dCBiYXNlX21vZGUgPSAwNjQ0Owogc3RydWN0IHN0YXQgc2I7Ci0KLWludCBjd2RfZmQgPSAtMTsK
LWludCBkaXJfZmQgPSAtMTsKLWludCBiYXNlX2ZkID0gLTE7Ci0KK2ludCBjd2RfZmQgPSAtMSwg
ZGlyX2ZkID0gLTEsIGJhc2VfZmQgPSAtMTsKIEJPT0wgc3VjY2VzcyA9IEZBTFNFOwogZXJybm8g
PSBFQUNDRVM7CiAKQEAgLTk4MywyNCArOTc5LDI0IEBACiBpZiAoIWYucnVubmluZ19pbl90ZXN0
X2hhcm5lc3MgJiYgcmVhbF91aWQgIT0gcm9vdF91aWQgJiYgcmVhbF91aWQgIT0gZXhpbV91aWQp
IGdvdG8gY2xlYW51cDsKIGlmIChwaWRfbGVuIDwgMiB8fCBwaWRfbGVuID49IChpbnQpc2l6ZW9m
KHBpZF9saW5lKSkgZ290byBjbGVhbnVwOwogCi1wYXRoID0gQ1Mgc3RyaW5nX2NvcHkocGlkX2Zp
bGVfcGF0aCk7Ci1pZiAoKGJhc2UgPSBVc3RycmNocihwYXRoLCAnLycpKSA9PSBOVUxMKSAvKiBz
aG91bGQgbm90IGhhcHBlbiwgYnV0IHdobyBrbm93cyAqLworcGF0aCA9IHN0cmluZ19jb3B5KHBp
ZF9maWxlX3BhdGgpOworaWYgKChiYXNlID0gVXN0cnJjaHIocGF0aCwgJy8nKSkgPT0gTlVMTCkJ
Lyogc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCB3aG8ga25vd3MgKi8KICAgbG9nX3dyaXRlKDAsIExP
R19NQUlOfExPR19QQU5JQ19ESUUsICJwaWQgZmlsZSBwYXRoIFwiJXNcIiBkb2VzIG5vdCBjb250
YWluIGEgJy8nIiwgcGlkX2ZpbGVfcGF0aCk7CiAKLWRpciA9IChiYXNlICE9IHBhdGgpID8gcGF0
aCA6ICIvIjsKK2RpciA9IGJhc2UgIT0gcGF0aCA/IHBhdGggOiBVUyIvIjsKICpiYXNlKysgPSAn
XDAnOwogCiBpZiAoIWRpciB8fCAhKmRpciB8fCAqZGlyICE9ICcvJykgZ290byBjbGVhbnVwOwot
aWYgKCFiYXNlIHx8ICEqYmFzZSB8fCBzdHJjaHIoYmFzZSwgJy8nKSAhPSBOVUxMKSBnb3RvIGNs
ZWFudXA7CitpZiAoIWJhc2UgfHwgISpiYXNlIHx8IFVzdHJjaHIoYmFzZSwgJy8nKSAhPSBOVUxM
KSBnb3RvIGNsZWFudXA7CiAKIGN3ZF9mZCA9IG9wZW4oIi4iLCBkaXJfZmxhZ3MpOwogaWYgKGN3
ZF9mZCA8IDAgfHwgZnN0YXQoY3dkX2ZkLCAmc2IpICE9IDAgfHwgIVNfSVNESVIoc2Iuc3RfbW9k
ZSkpIGdvdG8gY2xlYW51cDsKLWRpcl9mZCA9IG9wZW4oZGlyLCBkaXJfZmxhZ3MpOworZGlyX2Zk
ID0gb3BlbihDUyBkaXIsIGRpcl9mbGFncyk7CiBpZiAoZGlyX2ZkIDwgMCB8fCBmc3RhdChkaXJf
ZmQsICZzYikgIT0gMCB8fCAhU19JU0RJUihzYi5zdF9tb2RlKSkgZ290byBjbGVhbnVwOwogCiAv
KiBlbXVsYXRlIG9wZW5hdCAqLwogaWYgKGZjaGRpcihkaXJfZmQpICE9IDApIGdvdG8gY2xlYW51
cDsKLWJhc2VfZmQgPSBvcGVuKGJhc2UsIE9fUkRPTkxZIHwgYmFzZV9mbGFncyk7CitiYXNlX2Zk
ID0gb3BlbihDUyBiYXNlLCBPX1JET05MWSB8IGJhc2VfZmxhZ3MpOwogaWYgKGZjaGRpcihjd2Rf
ZmQpICE9IDApCiAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLCAiY2FuJ3Qg
cmV0dXJuIHRvIHByZXZpb3VzIHdvcmtpbmcgZGlyOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CiAK
QEAgLTEwMTksNyArMTAxNSw3IEBACiAKICAgaWYgKHN0cnNwbihsaW5lLCAiMDEyMzQ1Njc4OSIp
ICE9IChzaXplX3QpbGVuLTEpIGdvdG8gY2xlYW51cDsKICAgaWYgKGxpbmVbbGVuLTFdICE9ICdc
bicpIGdvdG8gY2xlYW51cDsKLSAgbGluZXNfbWF0Y2ggPSAobGVuID09IHBpZF9sZW4gJiYgc3Ry
Y21wKGxpbmUsIHBpZF9saW5lKSA9PSAwKTsKKyAgbGluZXNfbWF0Y2ggPSBsZW4gPT0gcGlkX2xl
biAmJiBzdHJjbXAobGluZSwgcGlkX2xpbmUpID09IDA7CiAgIH0KIAogaWYgKG9wZXJhdGlvbiA9
PSBQSURfV1JJVEUpCkBAIC0xMDMxLDcgKzEwMjcsNyBAQAogICAgICAgaW50IGVycm9yID0gLTE7
CiAgICAgICAvKiBlbXVsYXRlIHVubGlua2F0ICovCiAgICAgICBpZiAoZmNoZGlyKGRpcl9mZCkg
IT0gMCkgZ290byBjbGVhbnVwOwotICAgICAgZXJyb3IgPSB1bmxpbmsoYmFzZSk7CisgICAgICBl
cnJvciA9IHVubGluayhDUyBiYXNlKTsKICAgICAgIGlmIChmY2hkaXIoY3dkX2ZkKSAhPSAwKQog
ICAgICAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDX0RJRSwgImNhbid0IHJldHVy
biB0byBwcmV2aW91cyB3b3JraW5nIGRpcjogJXMiLCBzdHJlcnJvcihlcnJubykpOwogICAgICAg
aWYgKGVycm9yKSBnb3RvIGNsZWFudXA7CkBAIC0xMDQwLDcgKzEwMzYsNyBAQAogICAgICB9CiAg
ICAgLyogZW11bGF0ZSBvcGVuYXQgKi8KICAgICBpZiAoZmNoZGlyKGRpcl9mZCkgIT0gMCkgZ290
byBjbGVhbnVwOwotICAgIGJhc2VfZmQgPSBvcGVuKGJhc2UsIE9fV1JPTkxZIHwgT19DUkVBVCB8
IE9fRVhDTCB8IGJhc2VfZmxhZ3MsIGJhc2VfbW9kZSk7CisgICAgYmFzZV9mZCA9IG9wZW4oQ1Mg
YmFzZSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMIHwgYmFzZV9mbGFncywgYmFzZV9tb2Rl
KTsKICAgICBpZiAoZmNoZGlyKGN3ZF9mZCkgIT0gMCkKICAgICAgICAgbG9nX3dyaXRlKDAsIExP
R19NQUlOfExPR19QQU5JQ19ESUUsICJjYW4ndCByZXR1cm4gdG8gcHJldmlvdXMgd29ya2luZyBk
aXI6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKICAgICBpZiAoYmFzZV9mZCA8IDApIGdvdG8gY2xl
YW51cDsKQEAgLTEwNTcsNyArMTA1Myw3IEBACiAgICAgaW50IGVycm9yID0gLTE7CiAgICAgLyog
ZW11bGF0ZSB1bmxpbmthdCAqLwogICAgIGlmIChmY2hkaXIoZGlyX2ZkKSAhPSAwKSBnb3RvIGNs
ZWFudXA7Ci0gICAgZXJyb3IgPSB1bmxpbmsoYmFzZSk7CisgICAgZXJyb3IgPSB1bmxpbmsoQ1Mg
YmFzZSk7CiAgICAgaWYgKGZjaGRpcihjd2RfZmQpICE9IDApCiAgICAgICAgIGxvZ193cml0ZSgw
LCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLCAiY2FuJ3QgcmV0dXJuIHRvIHByZXZpb3VzIHdvcmtp
bmcgZGlyOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CiAgICAgaWYgKGVycm9yKSBnb3RvIGNsZWFu
dXA7CkBAIC0xMTQ0LDYgKzExNDAsMTEgQEAKIHN0cnVjdCBzb2NrYWRkcl91biBzYV91biA9IHsu
c3VuX2ZhbWlseSA9IEFGX1VOSVh9OwogaW50IGxlbjsKIAoraWYgKCFub3RpZmllcl9zb2NrZXQg
fHwgISpub3RpZmllcl9zb2NrZXQpCisgIHsKKyAgREVCVUcoRF9hbnkpIGRlYnVnX3ByaW50Zigi
LW9ZIHVzZWQgc28gbm90IGNyZWF0aW5nIG5vdGlmaWVyIHNvY2tldFxuIik7CisgIHJldHVybjsK
KyAgfQogaWYgKG92ZXJyaWRlX2xvY2FsX2ludGVyZmFjZXMgJiYgIW92ZXJyaWRlX3BpZF9maWxl
X3BhdGgpCiAgIHsKICAgREVCVUcoRF9hbnkpCkBAIC0xMjcyLDE0ICsxMjczLDE0IEBACiBidWZb
c3pdID0gMDsKIHN3aXRjaCAoYnVmWzBdKQogICB7Ci0jaWZkZWYgRVhQRVJJTUVOVEFMX1FVRVVF
X1JBTVAKKyNpZm5kZWYgRElTQUJMRV9RVUVVRV9SQU1QCiAgIGNhc2UgTk9USUZZX01TR19RUlVO
OgogICAgIC8qIHRoaXMgc2hvdWxkIGJlIGEgbWVzc2FnZV9pZCAqLwogICAgIERFQlVHKERfcXVl
dWVfcnVuKQogICAgICAgZGVidWdfcHJpbnRmKCIlczogcXJ1bm5lciB0cmlnZ2VyOiAlc1xuIiwg
X19GVU5DVElPTl9fLCBidWYrMSk7CiAgICAgbWVtY3B5KHF1ZXVlcnVuX21zZ2lkLCBidWYrMSwg
TUVTU0FHRV9JRF9MRU5HVEgrMSk7CiAgICAgcmV0dXJuIFRSVUU7Ci0jZW5kaWYJLypFWFBFUklN
RU5UQUxfUVVFVUVfUkFNUCovCisjZW5kaWYKIAogICBjYXNlIE5PVElGWV9RVUVVRV9TSVpFX1JF
UToKICAgICB7CkBAIC0xMzAwLDYgKzEzMDEsOCBAQAogfQogCiAKKworCiAvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgRXhp
bSBEYWVtb24gTWFpbmxpbmUgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMzI2LDEwICsxMzI5LDEwIEBACiB2b2lk
CiBkYWVtb25fZ28odm9pZCkKIHsKLXN0cnVjdCBwYXNzd2QgKnB3OwotaW50ICpsaXN0ZW5fc29j
a2V0cyA9IE5VTEw7Ci1pbnQgbGlzdGVuX3NvY2tldF9jb3VudCA9IDA7Ci1pcF9hZGRyZXNzX2l0
ZW0gKmFkZHJlc3NlcyA9IE5VTEw7CitzdHJ1Y3QgcGFzc3dkICogcHc7CitzdHJ1Y3QgcG9sbGZk
ICogZmRfcG9sbHMsICogdGxzX3dhdGNoX3BvbGwgPSBOVUxMLCAqIGRub3RpZnlfcG9sbCA9IE5V
TEw7CitpbnQgbGlzdGVuX3NvY2tldF9jb3VudCA9IDAsIHBvbGxfZmRfY291bnQ7CitpcF9hZGRy
ZXNzX2l0ZW0gKiBhZGRyZXNzZXMgPSBOVUxMOwogdGltZV90IGxhc3RfY29ubmVjdGlvbl90aW1l
ID0gKHRpbWVfdCkwOwogaW50IGxvY2FsX3F1ZXVlX3J1bl9tYXggPSBhdG9pKENTIGV4cGFuZF9z
dHJpbmcocXVldWVfcnVuX21heCkpOwogCkBAIC0xMzQwLDE2ICsxMzQzLDIxIEBACiAKIERFQlVH
KERfYW55fERfdikgZGVidWdfc2VsZWN0b3IgfD0gRF9waWQ7CiAKKy8qIEFsbG9jYXRlIGVub3Vn
aCBwb2xsc3RydWN0cyBmb3IgaW5ldGQgbW9kZSBwbHVzIHRoZSBhbmNpbGxhcnkgc29ja2V0czsK
K2Fsc28gdXNlZCB3aGVuIHRoZXJlIGFyZSBubyBsaXN0ZW4gc29ja2V0cy4gKi8KKworZmRfcG9s
bHMgPSBzdG9yZV9nZXQoc2l6ZW9mKHN0cnVjdCBwb2xsZmQpICogMywgR0VUX1VOVEFJTlRFRCk7
CisKIGlmIChmLmluZXRkX3dhaXRfbW9kZSkKICAgewogICBsaXN0ZW5fc29ja2V0X2NvdW50ID0g
MTsKLSAgbGlzdGVuX3NvY2tldHMgPSBzdG9yZV9nZXQoc2l6ZW9mKGludCksIEZBTFNFKTsKICAg
KHZvaWQpIGNsb3NlKDMpOwogICBpZiAoZHVwMigwLCAzKSA9PSAtMSkKICAgICBsb2dfd3JpdGUo
MCwgTE9HX01BSU58TE9HX1BBTklDX0RJRSwKICAgICAgICAgImZhaWxlZCB0byBkdXAgaW5ldGQg
c29ja2V0IHNhZmVseSBhd2F5OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CiAKLSAgbGlzdGVuX3Nv
Y2tldHNbMF0gPSAzOworICBmZF9wb2xsc1swXS5mZCA9IDM7CisgIGZkX3BvbGxzWzBdLmV2ZW50
cyA9IFBPTExJTjsKICAgKHZvaWQpIGNsb3NlKDApOwogICAodm9pZCkgY2xvc2UoMSk7CiAgICh2
b2lkKSBjbG9zZSgyKTsKQEAgLTEzODYsMTEgKzEzOTQsMTEgQEAKICAgZm9yIHRob3NlIE9TIGZv
ciB3aGljaCB0aGlzIGlzIG5lY2Vzc2FyeSB0aGUgZmlyc3QgdGltZSBpdCBpcyBjYWxsZWQgKGlu
CiAgIG9yZGVyIHRvIHBlcmZvcm0gYW4gIm9wZW4iIG9uIHRoZSBrZXJuZWwgbWVtb3J5IGZpbGUp
LiAqLwogCi0gICNpZmRlZiBMT0FEX0FWR19ORUVEU19ST09UCisjaWZkZWYgTE9BRF9BVkdfTkVF
RFNfUk9PVAogICBpZiAocXVldWVfb25seV9sb2FkID49IDAgfHwgc210cF9sb2FkX3Jlc2VydmUg
Pj0gMCB8fAogICAgICAgIChkZWxpdmVyX3F1ZXVlX2xvYWRfbWF4ID49IDAgJiYgZGVsaXZlcl9k
cm9wX3ByaXZpbGVnZSkpCiAgICAgKHZvaWQpb3NfZ2V0bG9hZGF2ZygpOwotICAjZW5kaWYKKyNl
bmRpZgogICB9CiAKIApAQCAtMTUyNiw3ICsxNTM0LDcgQEAKICAgc2VwID0gMDsKICAgd2hpbGUg
KChzID0gc3RyaW5nX25leHRpbmxpc3QoJmxpc3QsICZzZXAsIE5VTEwsIDApKSkKICAgICBwY3Qr
KzsKLSAgZGVmYXVsdF9zbXRwX3BvcnQgPSBzdG9yZV9nZXQoKHBjdCsxKSAqIHNpemVvZihpbnQp
LCBGQUxTRSk7CisgIGRlZmF1bHRfc210cF9wb3J0ID0gc3RvcmVfZ2V0KChwY3QrMSkgKiBzaXpl
b2YoaW50KSwgR0VUX1VOVEFJTlRFRCk7CiAgIGxpc3QgPSBkYWVtb25fc210cF9wb3J0OwogICBz
ZXAgPSAwOwogICBmb3IgKHBjdCA9IDA7CkBAIC0xNTU0LDYgKzE1NjIsNyBAQAogCiAgIGxpc3Qg
PSB0bHNfaW4ub25fY29ubmVjdF9wb3J0czsKICAgc2VwID0gMDsKKyAgLyogdGhlIGxpc3QgaXNu
J3QgZXhwYW5kZWQgc28gY2Fubm90IGJlIHRhaW50ZWQuICBJZiBpdCBldmVyIGlzIHdlIHdpbGwg
dHJhcCBoZXJlICovCiAgIHdoaWxlICgocyA9IHN0cmluZ19uZXh0aW5saXN0KCZsaXN0LCAmc2Vw
LCBiaWdfYnVmZmVyLCBiaWdfYnVmZmVyX3NpemUpKSkKICAgICBpZiAoIWlzZGlnaXQoKnMpKQog
ICAgICAgewpAQCAtMTYxNCw3ICsxNjIzLDcgQEAKICAgICBpcGEtPnBvcnQgPSBkZWZhdWx0X3Nt
dHBfcG9ydFswXTsKICAgICBmb3IgKGludCBpID0gMTsgZGVmYXVsdF9zbXRwX3BvcnRbaV0gPiAw
OyBpKyspCiAgICAgICB7Ci0gICAgICBpcF9hZGRyZXNzX2l0ZW0gKm5ldyA9IHN0b3JlX2dldChz
aXplb2YoaXBfYWRkcmVzc19pdGVtKSwgRkFMU0UpOworICAgICAgaXBfYWRkcmVzc19pdGVtICog
bmV3ID0gc3RvcmVfZ2V0KHNpemVvZihpcF9hZGRyZXNzX2l0ZW0pLCBHRVRfVU5UQUlOVEVEKTsK
IAogICAgICAgbWVtY3B5KG5ldy0+YWRkcmVzcywgaXBhLT5hZGRyZXNzLCBVc3RybGVuKGlwYS0+
YWRkcmVzcykgKyAxKTsKICAgICAgIG5ldy0+cG9ydCA9IGRlZmF1bHRfc210cF9wb3J0W2ldOwpA
QCAtMTY2OCwxMSArMTY3NywxNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gIC8qIEdldCBhIHZl
Y3RvciB0byByZW1lbWJlciBhbGwgdGhlIHNvY2tldHMgaW4gKi8KKyAgLyogR2V0IGEgdmVjdG9y
IHRvIHJlbWVtYmVyIGFsbCB0aGUgc29ja2V0cyBpbi4KKyAgVHdvIGV4dHJhIGVsZW1lbnRzIGZv
ciB0aGUgYW5jaWxsYXJ5IHNvY2tldHMgKi8KIAogICBmb3IgKGlwYSA9IGFkZHJlc3NlczsgaXBh
OyBpcGEgPSBpcGEtPm5leHQpCiAgICAgbGlzdGVuX3NvY2tldF9jb3VudCsrOwotICBsaXN0ZW5f
c29ja2V0cyA9IHN0b3JlX2dldChzaXplb2YoaW50KSAqIGxpc3Rlbl9zb2NrZXRfY291bnQsIEZB
TFNFKTsKKyAgZmRfcG9sbHMgPSBzdG9yZV9nZXQoc2l6ZW9mKHN0cnVjdCBwb2xsZmQpICogKGxp
c3Rlbl9zb2NrZXRfY291bnQgKyAyKSwKKwkJCSAgICBHRVRfVU5UQUlOVEVEKTsKKyAgZm9yIChz
dHJ1Y3QgcG9sbGZkICogcCA9IGZkX3BvbGxzOyBwIDwgZmRfcG9sbHMgKyBsaXN0ZW5fc29ja2V0
X2NvdW50ICsgMjsKKyAgICAgICBwKyspCisgICAgeyBwLT5mZCA9IC0xOyBwLT5ldmVudHMgPSBQ
T0xMSU47IH0KIAogICB9IC8qIGRhZW1vbl9saXN0ZW4gYnV0IG5vdCBpbmV0ZF93YWl0X21vZGUg
Ki8KIApAQCAtMTY5NSw3ICsxNzA5LDcgQEAKIAogICBpZiAoc210cF9hY2NlcHRfbWF4ID4gMCkK
ICAgICB7Ci0gICAgc210cF9zbG90cyA9IHN0b3JlX2dldChzbXRwX2FjY2VwdF9tYXggKiBzaXpl
b2Yoc210cF9zbG90KSwgRkFMU0UpOworICAgIHNtdHBfc2xvdHMgPSBzdG9yZV9nZXQoc210cF9h
Y2NlcHRfbWF4ICogc2l6ZW9mKHNtdHBfc2xvdCksIEdFVF9VTlRBSU5URUQpOwogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc210cF9hY2NlcHRfbWF4OyBpKyspIHNtdHBfc2xvdHNbaV0gPSBlbXB0
eV9zbXRwX3Nsb3Q7CiAgICAgfQogICB9CkBAIC0xNzYzLDggKzE3NzcsOCBAQAogICBmb3IgKGlw
YSA9IGFkZHJlc3Nlcywgc2sgPSAwOyBzayA8IGxpc3Rlbl9zb2NrZXRfY291bnQ7IGlwYSA9IGlw
YS0+bmV4dCwgc2srKykKICAgICB7CiAgICAgQk9PTCB3aWxkY2FyZDsKLSAgICBpcF9hZGRyZXNz
X2l0ZW0gKmlwYTI7Ci0gICAgaW50IGFmOworICAgIGlwX2FkZHJlc3NfaXRlbSAqIGlwYTI7Cisg
ICAgaW50IGZkLCBhZjsKIAogICAgIGlmIChVc3RyY2hyKGlwYS0+YWRkcmVzcywgJzonKSAhPSBO
VUxMKQogICAgICAgewpAQCAtMTc3Nyw3ICsxNzkxLDcgQEAKICAgICAgIHdpbGRjYXJkID0gaXBh
LT5hZGRyZXNzWzBdID09IDA7CiAgICAgICB9CiAKLSAgICBpZiAoKGxpc3Rlbl9zb2NrZXRzW3Nr
XSA9IGlwX3NvY2tldChTT0NLX1NUUkVBTSwgYWYpKSA8IDApCisgICAgaWYgKChmZF9wb2xsc1tz
a10uZmQgPSBmZCA9IGlwX3NvY2tldChTT0NLX1NUUkVBTSwgYWYpKSA8IDApCiAgICAgICB7CiAg
ICAgICBpZiAoY2hlY2tfc3BlY2lhbF9jYXNlKDAsIGFkZHJlc3NlcywgaXBhLCBGQUxTRSkpCiAg
ICAgICAgIHsKQEAgLTE3ODYsNyArMTgwMCw3IEBACiAgICAgICAgIGdvdG8gU0tJUF9TT0NLRVQ7
CiAgICAgICAgIH0KICAgICAgIGxvZ193cml0ZSgwLCBMT0dfUEFOSUNfRElFLCAiSVB2JWMgc29j
a2V0IGNyZWF0aW9uIGZhaWxlZDogJXMiLAotICAgICAgICAoYWYgPT0gQUZfSU5FVDYpPyAnNicg
OiAnNCcsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGFmID09IEFGX0lORVQ2ID8gJzYnIDog
JzQnLCBzdHJlcnJvcihlcnJubykpOwogICAgICAgfQogCiAgICAgLyogSWYgdGhpcyBpcyBhbiBJ
UHY2IHdpbGRjYXJkIHNvY2tldCwgc2V0IElQVjZfVjZPTkxZIGlmIHRoYXQgb3B0aW9uIGlzCkBA
IC0xNzk1LDggKzE4MDksNyBAQAogCiAjaWZkZWYgSVBWNl9WNk9OTFkKICAgICBpZiAoYWYgPT0g
QUZfSU5FVDYgJiYgd2lsZGNhcmQgJiYKLSAgICAgICAgc2V0c29ja29wdChsaXN0ZW5fc29ja2V0
c1tza10sIElQUFJPVE9fSVBWNiwgSVBWNl9WNk9OTFksIENTICgmb24pLAotICAgICAgICAgIHNp
emVvZihvbikpIDwgMCkKKyAgICAgICAgc2V0c29ja29wdChmZCwgSVBQUk9UT19JUFY2LCBJUFY2
X1Y2T05MWSwgJm9uLCBzaXplb2Yob24pKSA8IDApCiAgICAgICBsb2dfd3JpdGUoMCwgTE9HX01B
SU4sICJTZXR0aW5nIElQVjZfVjZPTkxZIG9uIGRhZW1vbidzIElQdjYgd2lsZGNhcmQgIgogICAg
ICAgICAic29ja2V0IGZhaWxlZCAoJXMpOiBjYXJyeWluZyBvbiB3aXRob3V0IGl0Iiwgc3RyZXJy
b3IoZXJybm8pKTsKICNlbmRpZiAgLyogSVBWNl9WNk9OTFkgKi8KQEAgLTE4MDUsMTYgKzE4MTgs
MTQgQEAKICAgICBpcyBiZWluZyBoYW5kbGVkLiAgV2l0aG91dCB0aGlzLCBhIGNvbm5lY3Rpb24g
d2lsbCBwcmV2ZW50IHJldXNlIG9mIHRoZQogICAgIHNtdHAgcG9ydCBmb3IgbGlzdGVuaW5nLiAq
LwogCi0gICAgaWYgKHNldHNvY2tvcHQobGlzdGVuX3NvY2tldHNbc2tdLCBTT0xfU09DS0VULCBT
T19SRVVTRUFERFIsCi0gICAgICAgICAgICAgICAgICAgVVMgKCZvbiksIHNpemVvZihvbikpIDwg
MCkKKyAgICBpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmb24s
IHNpemVvZihvbikpIDwgMCkKICAgICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNf
RElFLCAic2V0dGluZyBTT19SRVVTRUFERFIgb24gc29ja2V0ICIKICAgICAgICAgImZhaWxlZCB3
aGVuIHN0YXJ0aW5nIGRhZW1vbjogJXMiLCBzdHJlcnJvcihlcnJubykpOwogCiAgICAgLyogU2V0
IFRDUF9OT0RFTEFZOyBFeGltIGRvZXMgaXRzIG93biBidWZmZXJpbmcuIFRoZXJlIGlzIGEgc3dp
dGNoIHRvCiAgICAgZGlzYWJsZSB0aGlzIGJlY2F1c2UgaXQgYnJlYWtzIHNvbWUgYnJva2VuIGNs
aWVudHMuICovCiAKLSAgICBpZiAodGNwX25vZGVsYXkpIHNldHNvY2tvcHQobGlzdGVuX3NvY2tl
dHNbc2tdLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksCi0gICAgICBVUyAoJm9uKSwgc2l6ZW9m
KG9uKSk7CisgICAgaWYgKHRjcF9ub2RlbGF5KSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwg
VENQX05PREVMQVksICZvbiwgc2l6ZW9mKG9uKSk7CiAKICAgICAvKiBOb3cgYmluZCB0aGUgc29j
a2V0IHRvIHRoZSByZXF1aXJlZCBwb3J0OyBpZiBFeGltIGlzIGJlaW5nIHJlc3RhcnRlZAogICAg
IGl0IG1heSBub3QgYWx3YXlzIGJlIHBvc3NpYmxlIHRvIGJpbmQgaW1tZWRpYXRlbHksIGV2ZW4g
d2l0aCBTT19SRVVTRUFERFIKQEAgLTE4MzIsMTIgKzE4NDMsMTIgQEAKICAgICBmb3IoOzspCiAg
ICAgICB7CiAgICAgICB1c2NoYXIgKm1zZywgKmFkZHI7Ci0gICAgICBpZiAoaXBfYmluZChsaXN0
ZW5fc29ja2V0c1tza10sIGFmLCBpcGEtPmFkZHJlc3MsIGlwYS0+cG9ydCkgPj0gMCkgYnJlYWs7
CisgICAgICBpZiAoaXBfYmluZChmZCwgYWYsIGlwYS0+YWRkcmVzcywgaXBhLT5wb3J0KSA+PSAw
KSBicmVhazsKICAgICAgIGlmIChjaGVja19zcGVjaWFsX2Nhc2UoZXJybm8sIGFkZHJlc3Nlcywg
aXBhLCBUUlVFKSkKICAgICAgICAgewogICAgICAgICBERUJVRyhEX2FueSkgZGVidWdfcHJpbnRm
KCJ3aWxkY2FyZCBJUHY0IGJpbmQoKSBmYWlsZWQgYWZ0ZXIgSVB2NiAiCiAgICAgICAgICAgImxp
c3RlbigpIHN1Y2Nlc3M7IEVBRERSSU5VU0UgaWdub3JlZFxuIik7Ci0gICAgICAgICh2b2lkKWNs
b3NlKGxpc3Rlbl9zb2NrZXRzW3NrXSk7CisgICAgICAgICh2b2lkKWNsb3NlKGZkKTsKICAgICAg
ICAgZ290byBTS0lQX1NPQ0tFVDsKICAgICAgICAgfQogICAgICAgbXNnID0gVVMgc3RyZXJyb3Io
ZXJybm8pOwpAQCAtMTg2NSwzMCArMTg3NiwzMCBAQAogICAgICAgZWxzZQogICAgICAgICBkZWJ1
Z19wcmludGYoImxpc3RlbmluZyBvbiAlcyBwb3J0ICVkXG4iLCBpcGEtPmFkZHJlc3MsIGlwYS0+
cG9ydCk7CiAKKyAgICAvKiBTdGFydCBsaXN0ZW5pbmcgb24gdGhlIGJvdW5kIHNvY2tldCwgZXN0
YWJsaXNoaW5nIHRoZSBtYXhpbXVtIGJhY2tsb2cgb2YKKyAgICBjb25uZWN0aW9ucyB0aGF0IGlz
IGFsbG93ZWQuIE9uIHN1Y2Nlc3MsIGFkZCB0byB0aGUgc2V0IG9mIHNvY2tldHMgZm9yIHNlbGVj
dAorICAgIGFuZCBjb250aW51ZSB0byB0aGUgbmV4dCBhZGRyZXNzLiAqLworCiAjaWYgZGVmaW5l
ZChUQ1BfRkFTVE9QRU4pICYmICFkZWZpbmVkKF9fQVBQTEVfXykKICAgICBpZiAoICBmLnRjcF9m
YXN0b3Blbl9vawotICAgICAgICYmIHNldHNvY2tvcHQobGlzdGVuX3NvY2tldHNbc2tdLCBJUFBS
T1RPX1RDUCwgVENQX0ZBU1RPUEVOLAorICAgICAgICYmIHNldHNvY2tvcHQoZmQsIElQUFJPVE9f
VENQLCBUQ1BfRkFTVE9QRU4sCiAJCSAgICAmc210cF9jb25uZWN0X2JhY2tsb2csIHNpemVvZihz
bXRwX2Nvbm5lY3RfYmFja2xvZykpKQogICAgICAgewogICAgICAgREVCVUcoRF9hbnkpIGRlYnVn
X3ByaW50Zigic2V0c29ja29wdCBGQVNUT1BFTjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CiAg
ICAgICBmLnRjcF9mYXN0b3Blbl9vayA9IEZBTFNFOwogICAgICAgfQogI2VuZGlmCi0KLSAgICAv
KiBTdGFydCBsaXN0ZW5pbmcgb24gdGhlIGJvdW5kIHNvY2tldCwgZXN0YWJsaXNoaW5nIHRoZSBt
YXhpbXVtIGJhY2tsb2cgb2YKLSAgICBjb25uZWN0aW9ucyB0aGF0IGlzIGFsbG93ZWQuIE9uIHN1
Y2Nlc3MsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IGFkZHJlc3MuICovCi0KLSAgICBpZiAobGlzdGVu
KGxpc3Rlbl9zb2NrZXRzW3NrXSwgc210cF9jb25uZWN0X2JhY2tsb2cpID49IDApCisgICAgaWYg
KGxpc3RlbihmZCwgc210cF9jb25uZWN0X2JhY2tsb2cpID49IDApCiAgICAgICB7CiAjaWYgZGVm
aW5lZChUQ1BfRkFTVE9QRU4pICYmIGRlZmluZWQoX19BUFBMRV9fKQogICAgICAgaWYgKCAgZi50
Y3BfZmFzdG9wZW5fb2sKLQkgJiYgc2V0c29ja29wdChsaXN0ZW5fc29ja2V0c1tza10sIElQUFJP
VE9fVENQLCBUQ1BfRkFTVE9QRU4sCi0JCSAgICAgICZvbiwgc2l6ZW9mKG9uKSkpCisJICYmIHNl
dHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfRkFTVE9QRU4sICZvbiwgc2l6ZW9mKG9uKSkp
CiAJewogCURFQlVHKERfYW55KSBkZWJ1Z19wcmludGYoInNldHNvY2tvcHQgRkFTVE9QRU46ICVz
XG4iLCBzdHJlcnJvcihlcnJubykpOwogCWYudGNwX2Zhc3RvcGVuX29rID0gRkFMU0U7CiAJfQog
I2VuZGlmCisgICAgICBmZF9wb2xsc1tza10uZmQgPSBmZDsKICAgICAgIGNvbnRpbnVlOwogICAg
ICAgfQogCkBAIC0xOTA2LDcgKzE5MTcsNyBAQAogCiAgICAgREVCVUcoRF9hbnkpIGRlYnVnX3By
aW50Zigid2lsZGNhcmQgSVB2NCBsaXN0ZW4oKSBmYWlsZWQgYWZ0ZXIgSVB2NiAiCiAgICAgICAi
bGlzdGVuKCkgc3VjY2VzczsgRUFERFJJTlVTRSBpZ25vcmVkXG4iKTsKLSAgICAodm9pZCljbG9z
ZShsaXN0ZW5fc29ja2V0c1tza10pOworICAgICh2b2lkKWNsb3NlKGZkKTsKIAogICAgIC8qIENv
bWUgaGVyZSBpZiB0aGVyZSBoYXMgYmVlbiBhIHByb2JsZW0gd2l0aCB0aGUgc29ja2V0IHdoaWNo
IHdlCiAgICAgYXJlIGdvaW5nIHRvIGlnbm9yZS4gV2UgcmVtb3ZlIHRoZSBhZGRyZXNzIGZyb20g
dGhlIGNoYWluLCBhbmQgYmFjayB1cCB0aGUKQEAgLTE5NTUsNiArMTk2Niw3IEBACiAgIH0KIAog
LyogU2V0IHVwIHRoZSBoYW5kbGVyIGZvciBTSUdIVVAsIHdoaWNoIGNhdXNlcyBhIHJlc3RhcnQg
b2YgdGhlIGRhZW1vbi4gKi8KKwogc2lnaHVwX3NlZW4gPSBGQUxTRTsKIHNpZ25hbChTSUdIVVAs
IHNpZ2h1cF9oYW5kbGVyKTsKIApAQCAtMTk3OSw3ICsxOTkxLDcgQEAKIAogaWYgKHF1ZXVlX2lu
dGVydmFsID4gMCAmJiBsb2NhbF9xdWV1ZV9ydW5fbWF4ID4gMCkKICAgewotICBxdWV1ZV9waWRf
c2xvdHMgPSBzdG9yZV9nZXQobG9jYWxfcXVldWVfcnVuX21heCAqIHNpemVvZihwaWRfdCksIEZB
TFNFKTsKKyAgcXVldWVfcGlkX3Nsb3RzID0gc3RvcmVfZ2V0KGxvY2FsX3F1ZXVlX3J1bl9tYXgg
KiBzaXplb2YocGlkX3QpLCBHRVRfVU5UQUlOVEVEKTsKICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
b2NhbF9xdWV1ZV9ydW5fbWF4OyBpKyspIHF1ZXVlX3BpZF9zbG90c1tpXSA9IDA7CiAgIH0KIApA
QCAtMjE2NCw2ICsyMTc2LDI3IEBACiAjaWZkZWYgU1VQUE9SVF9TUEYKIHNwZl9pbml0KCk7CiAj
ZW5kaWYKKyNpZm5kZWYgRElTQUJMRV9UTFMKK3Rsc19kYWVtb25faW5pdCgpOworI2VuZGlmCisK
Ky8qIEFkZCBhbmNpbGxhcnkgc29ja2V0cyB0byB0aGUgc2V0IGZvciBzZWxlY3QgKi8KKworcG9s
bF9mZF9jb3VudCA9IGxpc3Rlbl9zb2NrZXRfY291bnQ7CisjaWZuZGVmIERJU0FCTEVfVExTCitp
ZiAodGxzX3dhdGNoX2ZkID49IDApCisgIHsKKyAgdGxzX3dhdGNoX3BvbGwgPSAmZmRfcG9sbHNb
cG9sbF9mZF9jb3VudCsrXTsKKyAgdGxzX3dhdGNoX3BvbGwtPmZkID0gdGxzX3dhdGNoX2ZkOwor
ICB0bHNfd2F0Y2hfcG9sbC0+ZXZlbnRzID0gUE9MTElOOworICB9CisjZW5kaWYKK2lmIChkYWVt
b25fbm90aWZpZXJfZmQgPj0gMCkKKyAgeworICBkbm90aWZ5X3BvbGwgPSAmZmRfcG9sbHNbcG9s
bF9mZF9jb3VudCsrXTsKKyAgZG5vdGlmeV9wb2xsLT5mZCA9IGRhZW1vbl9ub3RpZmllcl9mZDsK
KyAgZG5vdGlmeV9wb2xsLT5ldmVudHMgPSBQT0xMSU47CisgIH0KIAogLyogQ2xvc2UgdGhlIGxv
ZyBzbyBpdCBjYW4gYmUgcmVuYW1lZCBhbmQgbW92ZWQuIEluIHRoZSBmZXcgY2FzZXMgYmVsb3cg
d2hlcmUKIHRoaXMgbG9uZy1ydW5uaW5nIHByb2Nlc3Mgd3JpdGVzIHRvIHRoZSBsb2cgKGFsd2F5
cyBleGNlcHRpb25hbCBjb25kaXRpb25zKSwgaXQKQEAgLTIxODUsMTMgKzIyMTgsNiBAQAogCiBm
b3IgKDs7KQogICB7Ci0gICNpZiBIQVZFX0lQVjYKLSAgc3RydWN0IHNvY2thZGRyX2luNiBhY2Nl
cHRlZDsKLSAgI2Vsc2UKLSAgc3RydWN0IHNvY2thZGRyX2luIGFjY2VwdGVkOwotICAjZW5kaWYK
LQotICBFWElNX1NPQ0tMRU5fVCBsZW47CiAgIHBpZF90IHBpZDsKIAogICBpZiAoc2lndGVybV9z
ZWVuKQpAQCAtMjI0Niw3ICsyMjcyLDcgQEAKICAgICBlbHNlCiAgICAgICB7CiAgICAgICBERUJV
RyhEX2FueSkgZGVidWdfcHJpbnRmKCIlcyByZWNlaXZlZFxuIiwKLSNpZmRlZiBFWFBFUklNRU5U
QUxfUVVFVUVfUkFNUAorI2lmbmRlZiBESVNBQkxFX1FVRVVFX1JBTVAKIAkqcXVldWVydW5fbXNn
aWQgPyAicXJ1biBub3RpZmljYXRpb24iIDoKICNlbmRpZgogCSJTSUdBTFJNIik7CkBAIC0yMjY5
LDcgKzIyOTUsNyBAQAogICAgICAgICAgIC8qIENsb3NlIGFueSBvcGVuIGxpc3RlbmluZyBzb2Nr
ZXRzIGluIHRoZSBjaGlsZCAqLwogCiAJICBjbG9zZV9kYWVtb25fc29ja2V0cyhkYWVtb25fbm90
aWZpZXJfZmQsCi0JICAgIGxpc3Rlbl9zb2NrZXRzLCBsaXN0ZW5fc29ja2V0X2NvdW50KTsKKwkg
ICAgZmRfcG9sbHMsIGxpc3Rlbl9zb2NrZXRfY291bnQpOwogCiAgICAgICAgICAgLyogUmVzZXQg
U0lHSFVQIGFuZCBTSUdDSExEIGluIHRoZSBjaGlsZCBpbiBib3RoIGNhc2VzLiAqLwogCkBAIC0y
MjkyLDcgKzIzMTgsNyBAQAogICAgICAgICAgICAgKnArKyA9ICctJzsKICAgICAgICAgICAgICpw
KysgPSAncSc7CiAgICAgICAgICAgICBpZiAoICBmLnF1ZXVlXzJzdGFnZQotI2lmZGVmIEVYUEVS
SU1FTlRBTF9RVUVVRV9SQU1QCisjaWZuZGVmIERJU0FCTEVfUVVFVUVfUkFNUAogCSAgICAgICAm
JiAhKnF1ZXVlcnVuX21zZ2lkCiAjZW5kaWYKIAkgICAgICAgKSAqcCsrID0gJ3EnOwpAQCAtMjMw
NCw3ICsyMzMwLDcgQEAKIAkgICAgZXh0cmFbMF0gPSAqcXVldWVfbmFtZQogCSAgICAgID8gc3Ry
aW5nX3NwcmludGYoIiVzRyVzIiwgb3B0LCBxdWV1ZV9uYW1lKSA6IG9wdDsKIAotI2lmZGVmIEVY
UEVSSU1FTlRBTF9RVUVVRV9SQU1QCisjaWZuZGVmIERJU0FCTEVfUVVFVUVfUkFNUAogCSAgICBp
ZiAoKnF1ZXVlcnVuX21zZ2lkKQogCSAgICAgIHsKIAkgICAgICBsb2dfd3JpdGUoMCwgTE9HX01B
SU4sICJub3RpZnkgdHJpZ2dlcmVkIHF1ZXVlIHJ1biIpOwpAQCAtMjMzOSw3ICsyMzY1LDcgQEAK
IAogICAgICAgICAgIC8qIE5vIG5lZWQgdG8gcmUtZXhlYzsgU0lHQUxSTSByZW1haW5zIHNldCB0
byB0aGUgZGVmYXVsdCBoYW5kbGVyICovCiAKLSNpZmRlZiBFWFBFUklNRU5UQUxfUVVFVUVfUkFN
UAorI2lmbmRlZiBESVNBQkxFX1FVRVVFX1JBTVAKIAkgIGlmICgqcXVldWVydW5fbXNnaWQpCiAJ
ICAgIHsKIAkgICAgbG9nX3dyaXRlKDAsIExPR19NQUlOLCAibm90aWZ5IHRyaWdnZXJlZCBxdWV1
ZSBydW4iKTsKQEAgLTIzNzUsNyArMjQwMSw3IEBACiAgICAgICAvKiBSZXNldCB0aGUgYWxhcm0g
Y2xvY2sgKi8KIAogICAgICAgc2lnYWxybV9zZWVuID0gRkFMU0U7Ci0jaWZkZWYgRVhQRVJJTUVO
VEFMX1FVRVVFX1JBTVAKKyNpZm5kZWYgRElTQUJMRV9RVUVVRV9SQU1QCiAgICAgICBpZiAoKnF1
ZXVlcnVuX21zZ2lkKQogCSpxdWV1ZXJ1bl9tc2dpZCA9IDA7CiAgICAgICBlbHNlCkBAIC0yMzk3
LDE5ICsyNDIzLDggQEAKIAogICBpZiAoZi5kYWVtb25fbGlzdGVuKQogICAgIHsKLSAgICBpbnQg
bGNvdW50LCBzZWxlY3RfZXJybm87Ci0gICAgaW50IG1heF9zb2NrZXQgPSAwOworICAgIGludCBs
Y291bnQ7CiAgICAgQk9PTCBzZWxlY3RfZmFpbGVkID0gRkFMU0U7Ci0gICAgZmRfc2V0IHNlbGVj
dF9saXN0ZW47Ci0KLSAgICBGRF9aRVJPKCZzZWxlY3RfbGlzdGVuKTsKLSAgICBpZiAoZGFlbW9u
X25vdGlmaWVyX2ZkID49IDApCi0gICAgICBGRF9TRVQoZGFlbW9uX25vdGlmaWVyX2ZkLCAmc2Vs
ZWN0X2xpc3Rlbik7Ci0gICAgZm9yIChpbnQgc2sgPSAwOyBzayA8IGxpc3Rlbl9zb2NrZXRfY291
bnQ7IHNrKyspCi0gICAgICB7Ci0gICAgICBGRF9TRVQobGlzdGVuX3NvY2tldHNbc2tdLCAmc2Vs
ZWN0X2xpc3Rlbik7Ci0gICAgICBpZiAobGlzdGVuX3NvY2tldHNbc2tdID4gbWF4X3NvY2tldCkg
bWF4X3NvY2tldCA9IGxpc3Rlbl9zb2NrZXRzW3NrXTsKLSAgICAgIH0KIAogICAgIERFQlVHKERf
YW55KSBkZWJ1Z19wcmludGYoIkxpc3RlbmluZy4uLlxuIik7CiAKQEAgLTI0MjYsOCArMjQ0MSw3
IEBACiAgICAgICBlcnJubyA9IEVJTlRSOwogICAgICAgfQogICAgIGVsc2UKLSAgICAgIGxjb3Vu
dCA9IHNlbGVjdChtYXhfc29ja2V0ICsgMSwgKFNFTEVDVF9BUkcyX1RZUEUgKikmc2VsZWN0X2xp
c3RlbiwKLSAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgICBsY291bnQgPSBwb2xsKGZk
X3BvbGxzLCBwb2xsX2ZkX2NvdW50LCAtMSk7CiAKICAgICBpZiAobGNvdW50IDwgMCkKICAgICAg
IHsKQEAgLTI0NDIsMTQgKzI0NTYsMjMgQEAKICAgICBvbGQgb25lIGhhZCBqdXN0IGZpbmlzaGVk
LiBQcmVzZXJ2ZSB0aGUgZXJybm8gZnJvbSBhbnkgc2VsZWN0KCkgZmFpbHVyZSBmb3IKICAgICB0
aGUgdXNlIG9mIHRoZSBjb21tb24gc2VsZWN0L2FjY2VwdCBlcnJvciBwcm9jZXNzaW5nIGJlbG93
LiAqLwogCi0gICAgc2VsZWN0X2Vycm5vID0gZXJybm87Ci0gICAgaGFuZGxlX2VuZGluZ19wcm9j
ZXNzZXMoKTsKLSAgICBlcnJubyA9IHNlbGVjdF9lcnJubzsKKyAgICAgIHsKKyAgICAgIGludCBz
ZWxlY3RfZXJybm8gPSBlcnJubzsKKyAgICAgIGhhbmRsZV9lbmRpbmdfcHJvY2Vzc2VzKCk7CiAK
ICNpZm5kZWYgRElTQUJMRV9UTFMKLSAgICAvKiBDcmVhdGUgb3Igcm90YXRlIGFueSByZXF1aXJl
ZCBrZXlzICovCi0gICAgdGxzX2RhZW1vbl9pbml0KCk7CisgICAgICB7CisgICAgICBpbnQgb2xk
X3RmZDsKKyAgICAgIC8qIENyZWF0ZSBvciByb3RhdGUgYW55IHJlcXVpcmVkIGtleXM7IGhhbmRs
ZSAoZGVsYXllZCkgZmlsZXdhdGNoIGV2ZW50ICovCisKKyAgICAgIGlmICgob2xkX3RmZCA9IHRs
c19kYWVtb25fdGljaygpKSA+PSAwKQorCWZvciAoc3RydWN0IHBvbGxmZCAqIHAgPSAmZmRfcG9s
bHNbbGlzdGVuX3NvY2tldF9jb3VudF07CisJICAgICBwIDwgZmRfcG9sbHMgKyBwb2xsX2ZkX2Nv
dW50OyBwKyspCisJICBpZiAocC0+ZmQgPT0gb2xkX3RmZCkgeyBwLT5mZCA9IHRsc193YXRjaF9m
ZCA7IGJyZWFrOyB9CisgICAgICB9CiAjZW5kaWYKKyAgICAgIGVycm5vID0gc2VsZWN0X2Vycm5v
OworICAgICAgfQogCiAgICAgLyogTG9vcCBmb3IgYWxsIHRoZSBzb2NrZXRzIHRoYXQgYXJlIGN1
cnJlbnRseSByZWFkeSB0byBnby4gSWYgc2VsZWN0CiAgICAgYWN0dWFsbHkgZmFpbGVkLCB3ZSBo
YXZlIHNldCB0aGUgY291bnQgdG8gMSBhbmQgc2VsZWN0X2ZhaWxlZD1UUlVFLCBzbyBhcwpAQCAt
MjQ1OCwyMyArMjQ4MSw1NyBAQAogICAgIHdoaWxlIChsY291bnQtLSA+IDApCiAgICAgICB7CiAg
ICAgICBpbnQgYWNjZXB0X3NvY2tldCA9IC0xOworI2lmIEhBVkVfSVBWNgorICAgICAgc3RydWN0
IHNvY2thZGRyX2luNiBhY2NlcHRlZDsKKyNlbHNlCisgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4g
YWNjZXB0ZWQ7CisjZW5kaWYKIAogICAgICAgaWYgKCFzZWxlY3RfZmFpbGVkKQogCXsKLQlpZiAo
ICBkYWVtb25fbm90aWZpZXJfZmQgPj0gMAotCSAgICYmIEZEX0lTU0VUKGRhZW1vbl9ub3RpZmll
cl9mZCwgJnNlbGVjdF9saXN0ZW4pKQorI2lmICFkZWZpbmVkKERJU0FCTEVfVExTKSAmJiAoZGVm
aW5lZChFWElNX0hBVkVfSU5PVElGWSkgfHwgZGVmaW5lZChFWElNX0hBVkVfS0VWRU5UKSkKKwlp
ZiAodGxzX3dhdGNoX3BvbGwgJiYgdGxzX3dhdGNoX3BvbGwtPnJldmVudHMgJiBQT0xMSU4pCisJ
ICB7CisJICB0bHNfd2F0Y2hfcG9sbC0+cmV2ZW50cyA9IDA7CisgICAgICAgICAgdGxzX3dhdGNo
X3RyaWdnZXJfdGltZSA9IHRpbWUoTlVMTCk7CS8qIFNldCB1cCBkZWxheWVkIGV2ZW50ICovCisJ
ICB0bHNfd2F0Y2hfZGlzY2FyZF9ldmVudCh0bHNfd2F0Y2hfZmQpOworCSAgYnJlYWs7CS8qIHRv
IHRvcCBvZiBkYWVtb24gbG9vcCAqLworCSAgfQorI2VuZGlmCisJaWYgKGRub3RpZnlfcG9sbCAm
JiBkbm90aWZ5X3BvbGwtPnJldmVudHMgJiBQT0xMSU4pCiAJICB7Ci0JICBGRF9DTFIoZGFlbW9u
X25vdGlmaWVyX2ZkLCAmc2VsZWN0X2xpc3Rlbik7CisJICBkbm90aWZ5X3BvbGwtPnJldmVudHMg
PSAwOwogCSAgc2lnYWxybV9zZWVuID0gZGFlbW9uX25vdGlmaWNhdGlvbigpOwogCSAgYnJlYWs7
CS8qIHRvIHRvcCBvZiBkYWVtb24gbG9vcCAqLwogCSAgfQotICAgICAgICBmb3IgKGludCBzayA9
IDA7IHNrIDwgbGlzdGVuX3NvY2tldF9jb3VudDsgc2srKykKLSAgICAgICAgICBpZiAoRkRfSVNT
RVQobGlzdGVuX3NvY2tldHNbc2tdLCAmc2VsZWN0X2xpc3RlbikpCisJZm9yIChzdHJ1Y3QgcG9s
bGZkICogcCA9IGZkX3BvbGxzOyBwIDwgZmRfcG9sbHMgKyBsaXN0ZW5fc29ja2V0X2NvdW50Owor
CSAgICAgcCsrKQorCSAgaWYgKHAtPnJldmVudHMgJiBQT0xMSU4pCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICBsZW4gPSBzaXplb2YoYWNjZXB0ZWQpOwotICAgICAgICAgICAgYWNjZXB0X3Nv
Y2tldCA9IGFjY2VwdChsaXN0ZW5fc29ja2V0c1tza10sCi0gICAgICAgICAgICAgIChzdHJ1Y3Qg
c29ja2FkZHIgKikmYWNjZXB0ZWQsICZsZW4pOwotICAgICAgICAgICAgRkRfQ0xSKGxpc3Rlbl9z
b2NrZXRzW3NrXSwgJnNlbGVjdF9saXN0ZW4pOworCSAgICBFWElNX1NPQ0tMRU5fVCBhbGVuID0g
c2l6ZW9mKGFjY2VwdGVkKTsKKyNpZmRlZiBUQ1BfSU5GTworCSAgICBzdHJ1Y3QgdGNwX2luZm8g
dGk7CisJICAgIHNvY2tsZW5fdCB0bGVuID0gc2l6ZW9mKHRpKTsKKworCSAgICAvKiBJZiBtb25p
dG9yaW5nIHRoZSBiYWNrbG9nIGlzIHdhbnRlZCwgZ3JhYiBmb3IgbGF0ZXIgbG9nZ2luZyAqLwor
CisJICAgIHNtdHBfbGlzdGVuX2JhY2tsb2cgPSAwOworCSAgICBpZiAoICBzbXRwX2JhY2tsb2df
bW9uaXRvciA+IDAKKwkgICAgICAgJiYgZ2V0c29ja29wdChwLT5mZCwgSVBQUk9UT19UQ1AsIFRD
UF9JTkZPLCAmdGksICZ0bGVuKSA9PSAwKQorCSAgICAgIHsKKyMgaWZkZWYgRVhJTV9IQVZFX1RD
UElfVU5BQ0tFRAorCSAgICAgIERFQlVHKERfaW50ZXJmYWNlKSBkZWJ1Z19wcmludGYoImxpc3Rl
biBmZCAlZCBxdWV1ZSBtYXggJXUgY3VyciAldVxuIiwKKwkJICAgICAgcC0+ZmQsIHRpLnRjcGlf
c2Fja2VkLCB0aS50Y3BpX3VuYWNrZWQpOworCSAgICAgIHNtdHBfbGlzdGVuX2JhY2tsb2cgPSB0
aS50Y3BpX3VuYWNrZWQ7CisjIGVsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykJLyogVGhpcyBkb2Vz
IG5vdCB3b3JrLiBJbnZlc3RpZ2F0ZSBrZXJuZWwgc291cmNlY29kZS4gKi8KKwkgICAgICBERUJV
RyhEX2ludGVyZmFjZSkgZGVidWdfcHJpbnRmKCJsaXN0ZW4gZmQgJWQgcXVldWUgbWF4ICV1IGN1
cnIgJXVcbiIsCisJCSAgICAgIHAtPmZkLCB0aS5fX3RjcGlfc2Fja2VkLCB0aS5fX3RjcGlfdW5h
Y2tlZCk7CisJICAgICAgc210cF9saXN0ZW5fYmFja2xvZyA9IHRpLl9fdGNwaV91bmFja2VkOwor
IyBlbmRpZgorCSAgICAgIH0KKyNlbmRpZgorCSAgICBwLT5yZXZlbnRzID0gMDsKKyAgICAgICAg
ICAgIGFjY2VwdF9zb2NrZXQgPSBhY2NlcHQocC0+ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWNj
ZXB0ZWQsICZhbGVuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCX0KQEAg
LTI0OTksNDEgKzI1NTYsNDMgQEAKICAgICAgICAgZWxzZSBpZiAoICBlcnJubyAhPSBhY2NlcHRf
cmV0cnlfZXJybm8KIAkJfHwgc2VsZWN0X2ZhaWxlZCAhPSBhY2NlcHRfcmV0cnlfc2VsZWN0X2Zh
aWxlZAogCQl8fCBhY2NlcHRfcmV0cnlfY291bnQgPj0gNTApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU4gfCAoYWNjZXB0X3JldHJ5X2NvdW50ID49IDUw
PyBMT0dfUEFOSUMgOiAwKSwKLSAgICAgICAgICAgICAgIiVkICVzKCkgZmFpbHVyZSVzOiAlcyIs
Ci0gICAgICAgICAgICAgIGFjY2VwdF9yZXRyeV9jb3VudCwKLSAgICAgICAgICAgICAgYWNjZXB0
X3JldHJ5X3NlbGVjdF9mYWlsZWQ/ICJzZWxlY3QiIDogImFjY2VwdCIsCi0gICAgICAgICAgICAg
IGFjY2VwdF9yZXRyeV9jb3VudCA9PSAxID8gIiIgOiAicyIsCi0gICAgICAgICAgICAgIHN0cmVy
cm9yKGFjY2VwdF9yZXRyeV9lcnJubykpOwotICAgICAgICAgICAgbG9nX2Nsb3NlX2FsbCgpOwot
ICAgICAgICAgICAgYWNjZXB0X3JldHJ5X2NvdW50ID0gMDsKLSAgICAgICAgICAgIGFjY2VwdF9y
ZXRyeV9lcnJubyA9IGVycm5vOwotICAgICAgICAgICAgYWNjZXB0X3JldHJ5X3NlbGVjdF9mYWls
ZWQgPSBzZWxlY3RfZmFpbGVkOwotICAgICAgICAgICAgfQorCSAgeworCSAgbG9nX3dyaXRlKDAs
IExPR19NQUlOIHwgKGFjY2VwdF9yZXRyeV9jb3VudCA+PSA1MCA/IExPR19QQU5JQyA6IDApLAor
CSAgICAiJWQgJXMoKSBmYWlsdXJlJXM6ICVzIiwKKwkgICAgYWNjZXB0X3JldHJ5X2NvdW50LAor
CSAgICBhY2NlcHRfcmV0cnlfc2VsZWN0X2ZhaWxlZCA/ICJzZWxlY3QiIDogImFjY2VwdCIsCisJ
ICAgIGFjY2VwdF9yZXRyeV9jb3VudCA9PSAxID8gIiIgOiAicyIsCisJICAgIHN0cmVycm9yKGFj
Y2VwdF9yZXRyeV9lcnJubykpOworCSAgbG9nX2Nsb3NlX2FsbCgpOworCSAgYWNjZXB0X3JldHJ5
X2NvdW50ID0gMDsKKwkgIGFjY2VwdF9yZXRyeV9lcnJubyA9IGVycm5vOworCSAgYWNjZXB0X3Jl
dHJ5X3NlbGVjdF9mYWlsZWQgPSBzZWxlY3RfZmFpbGVkOworCSAgfQogICAgICAgICBhY2NlcHRf
cmV0cnlfY291bnQrKzsKICAgICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
IGlmIChhY2NlcHRfcmV0cnlfY291bnQgPiAwKQotICAgICAgICAgIHsKLSAgICAgICAgICBsb2df
d3JpdGUoMCwgTE9HX01BSU4sICIlZCAlcygpIGZhaWx1cmUlczogJXMiLAotICAgICAgICAgICAg
YWNjZXB0X3JldHJ5X2NvdW50LAotICAgICAgICAgICAgYWNjZXB0X3JldHJ5X3NlbGVjdF9mYWls
ZWQ/ICJzZWxlY3QiIDogImFjY2VwdCIsCi0gICAgICAgICAgICAoYWNjZXB0X3JldHJ5X2NvdW50
ID09IDEpPyAiIiA6ICJzIiwKLSAgICAgICAgICAgIHN0cmVycm9yKGFjY2VwdF9yZXRyeV9lcnJu
bykpOwotICAgICAgICAgIGxvZ19jbG9zZV9hbGwoKTsKLSAgICAgICAgICBhY2NlcHRfcmV0cnlf
Y291bnQgPSAwOwotICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgZWxzZSBpZiAoYWNjZXB0
X3JldHJ5X2NvdW50ID4gMCkKKwl7CisJbG9nX3dyaXRlKDAsIExPR19NQUlOLCAiJWQgJXMoKSBm
YWlsdXJlJXM6ICVzIiwKKwkgIGFjY2VwdF9yZXRyeV9jb3VudCwKKwkgIGFjY2VwdF9yZXRyeV9z
ZWxlY3RfZmFpbGVkID8gInNlbGVjdCIgOiAiYWNjZXB0IiwKKwkgIGFjY2VwdF9yZXRyeV9jb3Vu
dCA9PSAxID8gIiIgOiAicyIsCisJICBzdHJlcnJvcihhY2NlcHRfcmV0cnlfZXJybm8pKTsKKwls
b2dfY2xvc2VfYWxsKCk7CisJYWNjZXB0X3JldHJ5X2NvdW50ID0gMDsKKwl9CiAKICAgICAgIC8q
IElmIHNlbGVjdC9hY2NlcHQgc3VjY2VlZGVkLCBkZWFsIHdpdGggdGhlIGNvbm5lY3Rpb24uICov
CiAKICAgICAgIGlmIChhY2NlcHRfc29ja2V0ID49IDApCiAgICAgICAgIHsKKyNpZmRlZiBUQ1Bf
UVVJQ0tBQ0sgLyogQXZvaWQgcHVyZS1BQ0tzIHdoaWxlIGluIHRscyBwcm90b2NvbCBwaW5ncG9u
ZyBwaGFzZSAqLworCS8qIFVuZm9ydHVuYXRlbHkgd2UgY2Fubm90IGJlIGNlcnRhaW4gdG8gZG8g
dGhpcyBiZWZvcmUgYSBUTFMtb24tY29ubmVjdAorCUNsaWVudCBIZWxsbyBhcnJpdmVzIGFuZCBp
cyBhY2tlZC4gV2UgZG8gaXQgYXMgZWFybHkgYXMgcG9zc2libGUuICovCisJKHZvaWQpIHNldHNv
Y2tvcHQoYWNjZXB0X3NvY2tldCwgSVBQUk9UT19UQ1AsIFRDUF9RVUlDS0FDSywgVVMgJm9mZiwg
c2l6ZW9mKG9mZikpOworI2VuZGlmCiAgICAgICAgIGlmIChpbmV0ZF93YWl0X3RpbWVvdXQpCiAg
ICAgICAgICAgbGFzdF9jb25uZWN0aW9uX3RpbWUgPSB0aW1lKE5VTEwpOwotICAgICAgICBoYW5k
bGVfc210cF9jYWxsKGxpc3Rlbl9zb2NrZXRzLCBsaXN0ZW5fc29ja2V0X2NvdW50LCBhY2NlcHRf
c29ja2V0LAorICAgICAgICBoYW5kbGVfc210cF9jYWxsKGZkX3BvbGxzLCBsaXN0ZW5fc29ja2V0
X2NvdW50LCBhY2NlcHRfc29ja2V0LAogICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWNj
ZXB0ZWQpOwogICAgICAgICB9CiAgICAgICB9CkBAIC0yNTQ4LDEwICsyNjA3LDggQEAKIAogICBl
bHNlCiAgICAgewotICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotICAgIHR2LnR2X3NlYyA9IHF1ZXVl
X2ludGVydmFsOwotICAgIHR2LnR2X3VzZWMgPSAwOwotICAgIHNlbGVjdCgwLCBOVUxMLCBOVUxM
LCBOVUxMLCAmdHYpOworICAgIHN0cnVjdCBwb2xsZmQgcDsKKyAgICBwb2xsKCZwLCAwLCBxdWV1
ZV9pbnRlcnZhbCAqIDEwMDApOwogICAgIGhhbmRsZV9lbmRpbmdfcHJvY2Vzc2VzKCk7CiAgICAg
fQogCkBAIC0yNTc2LDggKzI2MzMsNyBAQAogICAgIHsKICAgICBsb2dfd3JpdGUoMCwgTE9HX01B
SU4sICJwaWQgJWQ6IFNJR0hVUCByZWNlaXZlZDogcmUtZXhlYyBkYWVtb24iLAogICAgICAgZ2V0
cGlkKCkpOwotICAgIGNsb3NlX2RhZW1vbl9zb2NrZXRzKGRhZW1vbl9ub3RpZmllcl9mZCwKLSAg
ICAgIGxpc3Rlbl9zb2NrZXRzLCBsaXN0ZW5fc29ja2V0X2NvdW50KTsKKyAgICBjbG9zZV9kYWVt
b25fc29ja2V0cyhkYWVtb25fbm90aWZpZXJfZmQsIGZkX3BvbGxzLCBsaXN0ZW5fc29ja2V0X2Nv
dW50KTsKICAgICBBTEFSTV9DTFIoMCk7CiAgICAgc2lnbmFsKFNJR0hVUCwgU0lHX0lHTik7CiAg
ICAgc2lnaHVwX2FyZ3ZbMF0gPSBleGltX3BhdGg7CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvZGJm
bi5jIGV4aW0vc3JjL2RiZm4uYwotLS0gZXhpbS5vcmlnL3NyYy9kYmZuLmMJMjAyMy0wNi0wNCAx
NjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2RiZm4uYwkyMDIyLTA2LTIzIDE2
OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiwxMyArMiwxOCBAQAogKiAgICAgRXhpbSAtIGFu
IEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4
aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0
eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0g
TWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9u
cyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogCiAjaW5jbHVkZSAiZXhpbS5oIgogCisv
KiBXZSBoYXZlIGJ1ZmZlcnMgaG9sZGluZyBwYXRoIG5hbWVzIGZvciBkYXRhYmFzZSBmaWxlcy4K
K1BBVEhfTUFYIGNvdWxkIGJlIHVzZWQgaGVyZSwgYnV0IHdvdWxkIGJlIHdhc3RpbmcgbWVtb3J5
LCBhcyB3ZSBkZWFsCit3aXRoIGRhdGFiYXNlIGZpbGVzIGxpa2UgJHNwb29sZGlyZWN0b3J5L2Ri
LzxuYW1lPiAqLworI2RlZmluZSBQQVRITEVOIDI1NgorCiAKIC8qIEZ1bmN0aW9ucyBmb3IgYWNj
ZXNzaW5nIEV4aW0ncyBoaW50cyBkYXRhYmFzZSwgd2hpY2ggY29uc2lzdHMgb2YgYSBudW1iZXIg
b2YKIGRpZmZlcmVudCBEQk0gZmlsZXMuIFRoaXMgbW9kdWxlIGRvZXMgbm90IGNvbnRhaW4gY29k
ZSBmb3IgcmVhZGluZyBEQk0gZmlsZXMKQEAgLTM0LDMxICszOSw2IEBACiAKIAogLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICAgICAgICBCZXJr
ZWxleSBEQiBlcnJvciBjYWxsYmFjayAgICAgICAgICAgICAqCi0qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBGb3IgQmVya2VsZXkgREIgPj0g
Miwgd2UgY2FuIGRlZmluZSBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpbiBjYXNlIG9mIERCCi1l
cnJvcnMuIFRoaXMgc2hvdWxkIGhlbHAgd2l0aCBkZWJ1Z2dpbmcgc3RyYW5nZSBEQiBwcm9ibGVt
cywgZS5nLiBnZXR0aW5nICJGaWxlCi1leGlzdHMiIHdoZW4geW91IHRyeSB0byBvcGVuIGEgZGIg
ZmlsZS4gVGhlIEFQSSBmb3IgdGhpcyBmdW5jdGlvbiB3YXMgY2hhbmdlZAotYXQgREIgcmVsZWFz
ZSA0LjMuICovCi0KLSNpZiBkZWZpbmVkKFVTRV9EQikgJiYgZGVmaW5lZChEQl9WRVJTSU9OX1NU
UklORykKLXZvaWQKLSNpZiBEQl9WRVJTSU9OX01BSk9SID4gNCB8fCAoREJfVkVSU0lPTl9NQUpP
UiA9PSA0ICYmIERCX1ZFUlNJT05fTUlOT1IgPj0gMykKLWRiZm5fYmRiX2Vycm9yX2NhbGxiYWNr
KGNvbnN0IERCX0VOViAqZGJlbnYsIGNvbnN0IGNoYXIgKnBmeCwgY29uc3QgY2hhciAqbXNnKQot
ewotZGJlbnYgPSBkYmVudjsKLSNlbHNlCi1kYmZuX2JkYl9lcnJvcl9jYWxsYmFjayhjb25zdCBj
aGFyICpwZngsIGNoYXIgKm1zZykKLXsKLSNlbmRpZgotcGZ4ID0gcGZ4OwotbG9nX3dyaXRlKDAs
IExPR19NQUlOLCAiQmVya2VsZXkgREIgZXJyb3I6ICVzIiwgbXNnKTsKLX0KLSNlbmRpZgotCi0K
LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAg
ICAgICAgIE9wZW4gYW5kIGxvY2sgYSBkYXRhYmFzZSBmaWxlICAgICAgICAgKgogKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtOTAsNyArNzAs
NyBAQAogaW50IHJjLCBzYXZlX2Vycm5vOwogQk9PTCByZWFkX29ubHkgPSBmbGFncyA9PSBPX1JE
T05MWTsKIGZsb2NrX3QgbG9ja19kYXRhOwotdXNjaGFyIGRpcm5hbWVbMjU2XSwgZmlsZW5hbWVb
MjU2XTsKK3VzY2hhciBkaXJuYW1lW1BBVEhMRU5dLCBmaWxlbmFtZVtQQVRITEVOXTsKIAogREVC
VUcoRF9oaW50c19sb29rdXApIGFjbF9sZXZlbCsrOwogCkBAIC0xMjEsNyArMTAxLDcgQEAKIGlm
IChkYmJsb2NrLT5sb2NrZmQgPCAwKQogICB7CiAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTiwgIiVz
IiwKLSAgICBzdHJpbmdfb3Blbl9mYWlsZWQoZXJybm8sICJkYXRhYmFzZSBsb2NrIGZpbGUgJXMi
LCBmaWxlbmFtZSkpOworICAgIHN0cmluZ19vcGVuX2ZhaWxlZCgiZGF0YWJhc2UgbG9jayBmaWxl
ICVzIiwgZmlsZW5hbWUpKTsKICAgZXJybm8gPSAwOyAgICAgIC8qIEluZGljYXRlcyBsb2NraW5n
IGZhaWx1cmUgKi8KICAgREVCVUcoRF9oaW50c19sb29rdXApIGFjbF9sZXZlbC0tOwogICByZXR1
cm4gTlVMTDsKQEAgLTE2NywxMiArMTQ3LDEyIEBACiBzbnByaW50ZihDUyBmaWxlbmFtZSwgc2l6
ZW9mKGZpbGVuYW1lKSwgIiVzLyVzIiwgZGlybmFtZSwgbmFtZSk7CiAKIHByaXZfZHJvcF90ZW1w
KGV4aW1fdWlkLCBleGltX2dpZCk7Ci1FWElNX0RCT1BFTihmaWxlbmFtZSwgZGlybmFtZSwgZmxh
Z3MsIEVYSU1EQl9NT0RFLCAmKGRiYmxvY2stPmRicHRyKSk7CitkYmJsb2NrLT5kYnB0ciA9IGV4
aW1fZGJvcGVuKGZpbGVuYW1lLCBkaXJuYW1lLCBmbGFncywgRVhJTURCX01PREUpOwogaWYgKCFk
YmJsb2NrLT5kYnB0ciAmJiBlcnJubyA9PSBFTk9FTlQgJiYgZmxhZ3MgPT0gT19SRFdSKQogICB7
CiAgIERFQlVHKERfaGludHNfbG9va3VwKQogICAgIGRlYnVnX3ByaW50Zl9pbmRlbnQoIiVzIGFw
cGVhcnMgbm90IHRvIGV4aXN0OiB0cnlpbmcgdG8gY3JlYXRlXG4iLCBmaWxlbmFtZSk7Ci0gIEVY
SU1fREJPUEVOKGZpbGVuYW1lLCBkaXJuYW1lLCBmbGFnc3xPX0NSRUFULCBFWElNREJfTU9ERSwg
JihkYmJsb2NrLT5kYnB0cikpOworICBkYmJsb2NrLT5kYnB0ciA9IGV4aW1fZGJvcGVuKGZpbGVu
YW1lLCBkaXJuYW1lLCBmbGFnc3xPX0NSRUFULCBFWElNREJfTU9ERSk7CiAgIH0KIHNhdmVfZXJy
bm8gPSBlcnJubzsKIHByaXZfcmVzdG9yZSgpOwpAQCAtMTgzLDEyICsxNjMsMTMgQEAKIAogaWYg
KCFkYmJsb2NrLT5kYnB0cikKICAgeworICBlcnJubyA9IHNhdmVfZXJybm87CiAgIGlmIChsb2Yg
JiYgc2F2ZV9lcnJubyAhPSBFTk9FTlQpCi0gICAgbG9nX3dyaXRlKDAsIExPR19NQUlOLCAiJXMi
LCBzdHJpbmdfb3Blbl9mYWlsZWQoc2F2ZV9lcnJubywgIkRCIGZpbGUgJXMiLAorICAgIGxvZ193
cml0ZSgwLCBMT0dfTUFJTiwgIiVzIiwgc3RyaW5nX29wZW5fZmFpbGVkKCJEQiBmaWxlICVzIiwK
ICAgICAgICAgZmlsZW5hbWUpKTsKICAgZWxzZQogICAgIERFQlVHKERfaGludHNfbG9va3VwKQot
ICAgICAgZGVidWdfcHJpbnRmX2luZGVudCgiJXNcbiIsIENTIHN0cmluZ19vcGVuX2ZhaWxlZChz
YXZlX2Vycm5vLCAiREIgZmlsZSAlcyIsCisgICAgICBkZWJ1Z19wcmludGZfaW5kZW50KCIlc1xu
IiwgQ1Mgc3RyaW5nX29wZW5fZmFpbGVkKCJEQiBmaWxlICVzIiwKICAgICAgICAgICBmaWxlbmFt
ZSkpOwogICAodm9pZCljbG9zZShkYmJsb2NrLT5sb2NrZmQpOwogICBlcnJubyA9IHNhdmVfZXJy
bm87CkBAIC0yMjYsNyArMjA3LDcgQEAKIHZvaWQKIGRiZm5fY2xvc2Uob3Blbl9kYiAqZGJibG9j
aykKIHsKLUVYSU1fREJDTE9TRShkYmJsb2NrLT5kYnB0cik7CitleGltX2RiY2xvc2UoZGJibG9j
ay0+ZGJwdHIpOwogKHZvaWQpY2xvc2UoZGJibG9jay0+bG9ja2ZkKTsKIERFQlVHKERfaGludHNf
bG9va3VwKQogICB7IGRlYnVnX3ByaW50Zl9pbmRlbnQoImNsb3NlZCBoaW50cyBkYXRhYmFzZSBh
bmQgbG9ja2ZpbGVcbiIpOyBhY2xfbGV2ZWwtLTsgfQpAQCAtMjYyLDMxICsyNDMsNTkgQEAKIHZv
aWQgKnlpZWxkOwogRVhJTV9EQVRVTSBrZXlfZGF0dW0sIHJlc3VsdF9kYXR1bTsKIGludCBrbGVu
ID0gVXN0cmxlbihrZXkpICsgMTsKLXVzY2hhciAqIGtleV9jb3B5ID0gc3RvcmVfZ2V0KGtsZW4s
IGlzX3RhaW50ZWQoa2V5KSk7Cit1c2NoYXIgKiBrZXlfY29weSA9IHN0b3JlX2dldChrbGVuLCBr
ZXkpOwogCiBtZW1jcHkoa2V5X2NvcHksIGtleSwga2xlbik7CiAKIERFQlVHKERfaGludHNfbG9v
a3VwKSBkZWJ1Z19wcmludGZfaW5kZW50KCJkYmZuX3JlYWQ6IGtleT0lc1xuIiwga2V5KTsKIAot
RVhJTV9EQVRVTV9JTklUKGtleV9kYXR1bSk7ICAgICAgICAgLyogU29tZSBEQk0gbGlicmFyaWVz
IHJlcXVpcmUgdGhlIGRhdHVtICovCi1FWElNX0RBVFVNX0lOSVQocmVzdWx0X2RhdHVtKTsgICAg
ICAvKiB0byBiZSBjbGVhcmVkIGJlZm9yZSB1c2UuICovCi1FWElNX0RBVFVNX0RBVEEoa2V5X2Rh
dHVtKSA9IENTIGtleV9jb3B5OwotRVhJTV9EQVRVTV9TSVpFKGtleV9kYXR1bSkgPSBrbGVuOwor
ZXhpbV9kYXR1bV9pbml0KCZrZXlfZGF0dW0pOyAgICAgICAgIC8qIFNvbWUgREJNIGxpYnJhcmll
cyByZXF1aXJlIHRoZSBkYXR1bSAqLworZXhpbV9kYXR1bV9pbml0KCZyZXN1bHRfZGF0dW0pOyAg
ICAgIC8qIHRvIGJlIGNsZWFyZWQgYmVmb3JlIHVzZS4gKi8KK2V4aW1fZGF0dW1fZGF0YV9zZXQo
JmtleV9kYXR1bSwga2V5X2NvcHkpOworZXhpbV9kYXR1bV9zaXplX3NldCgma2V5X2RhdHVtLCBr
bGVuKTsKIAotaWYgKCFFWElNX0RCR0VUKGRiYmxvY2stPmRicHRyLCBrZXlfZGF0dW0sIHJlc3Vs
dF9kYXR1bSkpIHJldHVybiBOVUxMOworaWYgKCFleGltX2RiZ2V0KGRiYmxvY2stPmRicHRyLCAm
a2V5X2RhdHVtLCAmcmVzdWx0X2RhdHVtKSkgcmV0dXJuIE5VTEw7CiAKIC8qIEFzc3VtZSB0aGUg
ZGF0YSBzdG9yZSBjb3VsZCBoYXZlIGJlZW4gdGFpbnRlZC4gIFByb3Blcmx5LCB3ZSBzaG91bGQK
IHN0b3JlIHRoZSB0YWludCBzdGF0dXMgd2l0aCB0aGUgZGF0YS4gKi8KIAoteWllbGQgPSBzdG9y
ZV9nZXQoRVhJTV9EQVRVTV9TSVpFKHJlc3VsdF9kYXR1bSksIFRSVUUpOwotbWVtY3B5KHlpZWxk
LCBFWElNX0RBVFVNX0RBVEEocmVzdWx0X2RhdHVtKSwgRVhJTV9EQVRVTV9TSVpFKHJlc3VsdF9k
YXR1bSkpOwotaWYgKGxlbmd0aCAhPSBOVUxMKSAqbGVuZ3RoID0gRVhJTV9EQVRVTV9TSVpFKHJl
c3VsdF9kYXR1bSk7Cit5aWVsZCA9IHN0b3JlX2dldChleGltX2RhdHVtX3NpemVfZ2V0KCZyZXN1
bHRfZGF0dW0pLCBHRVRfVEFJTlRFRCk7CittZW1jcHkoeWllbGQsIGV4aW1fZGF0dW1fZGF0YV9n
ZXQoJnJlc3VsdF9kYXR1bSksIGV4aW1fZGF0dW1fc2l6ZV9nZXQoJnJlc3VsdF9kYXR1bSkpOwor
aWYgKGxlbmd0aCkgKmxlbmd0aCA9IGV4aW1fZGF0dW1fc2l6ZV9nZXQoJnJlc3VsdF9kYXR1bSk7
CiAKLUVYSU1fREFUVU1fRlJFRShyZXN1bHRfZGF0dW0pOyAgICAvKiBTb21lIERCTSBsaWJzIHJl
cXVpcmUgZnJlZWluZyAqLworZXhpbV9kYXR1bV9mcmVlKCZyZXN1bHRfZGF0dW0pOyAgICAvKiBT
b21lIERCTSBsaWJzIHJlcXVpcmUgZnJlZWluZyAqLwogcmV0dXJuIHlpZWxkOwogfQogCiAKKy8q
IFJlYWQgYSByZWNvcmQuICBJZiB0aGUgbGVuZ3RoIGlzIG5vdCBhcyBleHBlY3RlZCB0aGVuIGRl
bGV0ZSBpdCwgd3JpdGUKK2FuIGVycm9yIGxvZyBsaW5lLCBkZWxldGUgdGhlIHJlY29yZCBhbmQg
cmV0dXJuIE5VTEwuCitVc2UgdGhpcyBmb3IgZml4ZWQtc2l6ZSByZWNvcmRzIChzbyBub3QgcmV0
cnkgb3Igd2FpdCByZWNvcmRzKS4KKworQXJndW1lbnRzOgorICBkYmJsb2NrICAgYSBwb2ludGVy
IHRvIGFuIG9wZW4gZGF0YWJhc2UgYmxvY2sKKyAga2V5ICAgICAgIHRoZSBrZXkgb2YgdGhlIHJl
Y29yZCB0byBiZSByZWFkCisgIGxlbmd0aCAgICB0aGUgZXhwZWN0ZWQgcmVjb3JkIGxlbmd0aAor
CitSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlIHJldHJpZXZlZCByZWNvcmQsIG9yCisgICAgICAg
ICBOVUxMIGlmIHRoZSByZWNvcmQgaXMgbm90IGZvdW5kL2JhZAorKi8KKwordm9pZCAqCitkYmZu
X3JlYWRfZW5mb3JjZV9sZW5ndGgob3Blbl9kYiAqIGRiYmxvY2ssIGNvbnN0IHVzY2hhciAqIGtl
eSwgc2l6ZV90IGxlbmd0aCkKK3sKK2ludCBybGVuOwordm9pZCAqIHlpZWxkID0gZGJmbl9yZWFk
X3dpdGhfbGVuZ3RoKGRiYmxvY2ssIGtleSwgJnJsZW4pOworCitpZiAoeWllbGQpCisgIHsKKyAg
aWYgKHJsZW4gPT0gbGVuZ3RoKSByZXR1cm4geWllbGQ7CisgIGxvZ193cml0ZSgwLCBMT0dfTUFJ
TnxMT0dfUEFOSUMsICJCYWQgZGIgcmVjb3JkIHNpemUgZm9yICclcyciLCBrZXkpOworICBkYmZu
X2RlbGV0ZShkYmJsb2NrLCBrZXkpOworICB9CityZXR1cm4gTlVMTDsKK30KKwogCiAvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAg
ICBXcml0ZSB0byBkYXRhYmFzZSBmaWxlICAgICAgICAgICAgICoKQEAgLTMwOSwyMCArMzE4LDIw
IEBACiBFWElNX0RBVFVNIGtleV9kYXR1bSwgdmFsdWVfZGF0dW07CiBkYmRhdGFfZ2VuZXJpYyAq
Z3B0ciA9IChkYmRhdGFfZ2VuZXJpYyAqKXB0cjsKIGludCBrbGVuID0gVXN0cmxlbihrZXkpICsg
MTsKLXVzY2hhciAqIGtleV9jb3B5ID0gc3RvcmVfZ2V0KGtsZW4sIGlzX3RhaW50ZWQoa2V5KSk7
Cit1c2NoYXIgKiBrZXlfY29weSA9IHN0b3JlX2dldChrbGVuLCBrZXkpOwogCiBtZW1jcHkoa2V5
X2NvcHksIGtleSwga2xlbik7CiBncHRyLT50aW1lX3N0YW1wID0gdGltZShOVUxMKTsKIAogREVC
VUcoRF9oaW50c19sb29rdXApIGRlYnVnX3ByaW50Zl9pbmRlbnQoImRiZm5fd3JpdGU6IGtleT0l
c1xuIiwga2V5KTsKIAotRVhJTV9EQVRVTV9JTklUKGtleV9kYXR1bSk7ICAgICAgICAgLyogU29t
ZSBEQk0gbGlicmFyaWVzIHJlcXVpcmUgdGhlIGRhdHVtICovCi1FWElNX0RBVFVNX0lOSVQodmFs
dWVfZGF0dW0pOyAgICAgICAvKiB0byBiZSBjbGVhcmVkIGJlZm9yZSB1c2UuICovCi1FWElNX0RB
VFVNX0RBVEEoa2V5X2RhdHVtKSA9IENTIGtleV9jb3B5OwotRVhJTV9EQVRVTV9TSVpFKGtleV9k
YXR1bSkgPSBrbGVuOwotRVhJTV9EQVRVTV9EQVRBKHZhbHVlX2RhdHVtKSA9IENTIHB0cjsKLUVY
SU1fREFUVU1fU0laRSh2YWx1ZV9kYXR1bSkgPSBsZW5ndGg7Ci1yZXR1cm4gRVhJTV9EQlBVVChk
YmJsb2NrLT5kYnB0ciwga2V5X2RhdHVtLCB2YWx1ZV9kYXR1bSk7CitleGltX2RhdHVtX2luaXQo
JmtleV9kYXR1bSk7ICAgICAgICAgLyogU29tZSBEQk0gbGlicmFyaWVzIHJlcXVpcmUgdGhlIGRh
dHVtICovCitleGltX2RhdHVtX2luaXQoJnZhbHVlX2RhdHVtKTsgICAgICAgLyogdG8gYmUgY2xl
YXJlZCBiZWZvcmUgdXNlLiAqLworZXhpbV9kYXR1bV9kYXRhX3NldCgma2V5X2RhdHVtLCBrZXlf
Y29weSk7CitleGltX2RhdHVtX3NpemVfc2V0KCZrZXlfZGF0dW0sIGtsZW4pOworZXhpbV9kYXR1
bV9kYXRhX3NldCgmdmFsdWVfZGF0dW0sIHB0cik7CitleGltX2RhdHVtX3NpemVfc2V0KCZ2YWx1
ZV9kYXR1bSwgbGVuZ3RoKTsKK3JldHVybiBleGltX2RicHV0KGRiYmxvY2stPmRicHRyLCAma2V5
X2RhdHVtLCAmdmFsdWVfZGF0dW0pOwogfQogCiAKQEAgLTM0MywxNiArMzUyLDE2IEBACiBkYmZu
X2RlbGV0ZShvcGVuX2RiICpkYmJsb2NrLCBjb25zdCB1c2NoYXIgKmtleSkKIHsKIGludCBrbGVu
ID0gVXN0cmxlbihrZXkpICsgMTsKLXVzY2hhciAqIGtleV9jb3B5ID0gc3RvcmVfZ2V0KGtsZW4s
IGlzX3RhaW50ZWQoa2V5KSk7Cit1c2NoYXIgKiBrZXlfY29weSA9IHN0b3JlX2dldChrbGVuLCBr
ZXkpOworRVhJTV9EQVRVTSBrZXlfZGF0dW07CiAKIERFQlVHKERfaGludHNfbG9va3VwKSBkZWJ1
Z19wcmludGZfaW5kZW50KCJkYmZuX2RlbGV0ZToga2V5PSVzXG4iLCBrZXkpOwogCiBtZW1jcHko
a2V5X2NvcHksIGtleSwga2xlbik7Ci1FWElNX0RBVFVNIGtleV9kYXR1bTsKLUVYSU1fREFUVU1f
SU5JVChrZXlfZGF0dW0pOyAgICAgICAgIC8qIFNvbWUgREJNIGxpYnJhcmllcyByZXF1aXJlIGNs
ZWFyaW5nICovCi1FWElNX0RBVFVNX0RBVEEoa2V5X2RhdHVtKSA9IENTIGtleV9jb3B5OwotRVhJ
TV9EQVRVTV9TSVpFKGtleV9kYXR1bSkgPSBrbGVuOwotcmV0dXJuIEVYSU1fREJERUwoZGJibG9j
ay0+ZGJwdHIsIGtleV9kYXR1bSk7CitleGltX2RhdHVtX2luaXQoJmtleV9kYXR1bSk7ICAgICAg
ICAgLyogU29tZSBEQk0gbGlicmFyaWVzIHJlcXVpcmUgY2xlYXJpbmcgKi8KK2V4aW1fZGF0dW1f
ZGF0YV9zZXQoJmtleV9kYXR1bSwga2V5X2NvcHkpOworZXhpbV9kYXR1bV9zaXplX3NldCgma2V5
X2RhdHVtLCBrbGVuKTsKK3JldHVybiBleGltX2RiZGVsKGRiYmxvY2stPmRicHRyLCAma2V5X2Rh
dHVtKTsKIH0KIAogCkBAIC0zNzgsMjMgKzM4NywyMiBAQAogewogRVhJTV9EQVRVTSBrZXlfZGF0
dW0sIHZhbHVlX2RhdHVtOwogdXNjaGFyICp5aWVsZDsKLXZhbHVlX2RhdHVtID0gdmFsdWVfZGF0
dW07ICAgIC8qIGR1bW15OyBub3QgYWxsIGRiIGxpYnJhcmllcyB1c2UgdGhpcyAqLwogCiBERUJV
RyhEX2hpbnRzX2xvb2t1cCkgZGVidWdfcHJpbnRmX2luZGVudCgiZGJmbl9zY2FuXG4iKTsKIAog
LyogU29tZSBkYm0gcmVxdWlyZSBhbiBpbml0aWFsaXphdGlvbiAqLwogCi1pZiAoc3RhcnQpIEVY
SU1fREJDUkVBVEVfQ1VSU09SKGRiYmxvY2stPmRicHRyLCBjdXJzb3IpOworaWYgKHN0YXJ0KSAq
Y3Vyc29yID0gZXhpbV9kYmNyZWF0ZV9jdXJzb3IoZGJibG9jay0+ZGJwdHIpOwogCi1FWElNX0RB
VFVNX0lOSVQoa2V5X2RhdHVtKTsgICAgICAgICAvKiBTb21lIERCTSBsaWJyYXJpZXMgcmVxdWly
ZSB0aGUgZGF0dW0gKi8KLUVYSU1fREFUVU1fSU5JVCh2YWx1ZV9kYXR1bSk7ICAgICAgIC8qIHRv
IGJlIGNsZWFyZWQgYmVmb3JlIHVzZS4gKi8KK2V4aW1fZGF0dW1faW5pdCgma2V5X2RhdHVtKTsg
ICAgICAgICAvKiBTb21lIERCTSBsaWJyYXJpZXMgcmVxdWlyZSB0aGUgZGF0dW0gKi8KK2V4aW1f
ZGF0dW1faW5pdCgmdmFsdWVfZGF0dW0pOyAgICAgICAvKiB0byBiZSBjbGVhcmVkIGJlZm9yZSB1
c2UuICovCiAKLXlpZWxkID0gKEVYSU1fREJTQ0FOKGRiYmxvY2stPmRicHRyLCBrZXlfZGF0dW0s
IHZhbHVlX2RhdHVtLCBzdGFydCwgKmN1cnNvcikpPwotICBVUyBFWElNX0RBVFVNX0RBVEEoa2V5
X2RhdHVtKSA6IE5VTEw7Cit5aWVsZCA9IGV4aW1fZGJzY2FuKGRiYmxvY2stPmRicHRyLCAma2V5
X2RhdHVtLCAmdmFsdWVfZGF0dW0sIHN0YXJ0LCAqY3Vyc29yKQorICA/IFVTIGV4aW1fZGF0dW1f
ZGF0YV9nZXQoJmtleV9kYXR1bSkgOiBOVUxMOwogCiAvKiBTb21lIGRibSByZXF1aXJlIGEgdGVy
bWluYXRpb24gKi8KIAotaWYgKCF5aWVsZCkgRVhJTV9EQkRFTEVURV9DVVJTT1IoKmN1cnNvcik7
CitpZiAoIXlpZWxkKSBleGltX2RiZGVsZXRlX2N1cnNvcigqY3Vyc29yKTsKIHJldHVybiB5aWVs
ZDsKIH0KIApkaWZmIC11ciBleGltLm9yaWcvc3JjL2RiZnVuY3Rpb25zLmggZXhpbS9zcmMvZGJm
dW5jdGlvbnMuaAotLS0gZXhpbS5vcmlnL3NyYy9kYmZ1bmN0aW9ucy5oCTIwMjMtMDYtMDQgMTY6
MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9kYmZ1bmN0aW9ucy5oCTIwMjItMDYt
MjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDkgKzIsMTIgQEAKICogICAgIEV4aW0g
LSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBDb3B5cmlnaHQgKGMpIFVu
aXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE1ICovCisvKiBDb3B5cmlnaHQgKGMpIFRo
ZSBFeGltIE1haW50YWluZXJzIDIwMjIgKi8KKy8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBv
ZiBDYW1icmlkZ2UgMTk5NSAtIDIwMjEgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNv
bmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKKyNpZm5kZWYgREJGVU5DVElP
TlNfSAorI2RlZmluZSBEQkZVTkNUSU9OU19ICiAKIC8qIEZ1bmN0aW9ucyBmb3IgcmVhZGluZy93
cml0aW5nIGV4aW0gZGF0YWJhc2UgZmlsZXMgKi8KIApAQCAtMTIsNiArMTUsNyBAQAogaW50ICAg
ICAgZGJmbl9kZWxldGUob3Blbl9kYiAqLCBjb25zdCB1c2NoYXIgKik7CiBvcGVuX2RiICpkYmZu
X29wZW4odXNjaGFyICosIGludCwgb3Blbl9kYiAqLCBCT09MLCBCT09MKTsKIHZvaWQgICAgKmRi
Zm5fcmVhZF93aXRoX2xlbmd0aChvcGVuX2RiICosIGNvbnN0IHVzY2hhciAqLCBpbnQgKik7Cit2
b2lkICAgICpkYmZuX3JlYWRfZW5mb3JjZV9sZW5ndGgob3Blbl9kYiAqLCBjb25zdCB1c2NoYXIg
Kiwgc2l6ZV90KTsKIHVzY2hhciAgKmRiZm5fc2NhbihvcGVuX2RiICosIEJPT0wsIEVYSU1fQ1VS
U09SICoqKTsKIGludCAgICAgIGRiZm5fd3JpdGUob3Blbl9kYiAqLCBjb25zdCB1c2NoYXIgKiwg
dm9pZCAqLCBpbnQpOwogCkBAIC0yMywxMSArMjcsMTIgQEAKIGNoYW5nZWQgYXQgcmVsZWFzZSA0
LjMuICovCiAKICNpZiBkZWZpbmVkKFVTRV9EQikgJiYgZGVmaW5lZChEQl9WRVJTSU9OX1NUUklO
RykKLSNpZiBEQl9WRVJTSU9OX01BSk9SID4gNCB8fCAoREJfVkVSU0lPTl9NQUpPUiA9PSA0ICYm
IERCX1ZFUlNJT05fTUlOT1IgPj0gMykKKyMgaWYgREJfVkVSU0lPTl9NQUpPUiA+IDQgfHwgKERC
X1ZFUlNJT05fTUFKT1IgPT0gNCAmJiBEQl9WRVJTSU9OX01JTk9SID49IDMpCiB2b2lkICAgICBk
YmZuX2JkYl9lcnJvcl9jYWxsYmFjayhjb25zdCBEQl9FTlYgKiwgY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICopOwotI2Vsc2UKKyMgZWxzZQogdm9pZCAgICAgZGJmbl9iZGJfZXJyb3JfY2FsbGJh
Y2soY29uc3QgY2hhciAqLCBjaGFyICopOwotI2VuZGlmCisjIGVuZGlmCiAjZW5kaWYKIAorI2Vu
ZGlmCiAvKiBFbmQgb2YgZGJmdW5jdGlvbnMuaCAqLwrQotC+0LvRjNC60L4g0LIgZXhpbS5vcmln
L3NyYzogZGJzdHVmZi5oCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvZGNjLmMgZXhpbS9zcmMvZGNj
LmMKLS0tIGV4aW0ub3JpZy9zcmMvZGNjLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAg
KzAzMDAKKysrIGV4aW0vc3JjL2RjYy5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICsw
MzAwCkBAIC03LDcgKzcsNyBAQAogICogd2JyZXloYUBnbXgubmV0CiAgKiBTZWUgdGhlIGZpbGUg
Tk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLgogICoKLSAqIENv
cHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNSAtIDIwMTkKKyAqIENvcHlyaWdo
dCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNSAtIDIwMjEKICAqLwogCiAvKiBDb2RlIGZv
ciBjYWxsaW5nIGRjY2lmZC4gQ2FsbGVkIGZyb20gYWNsLmMuICovCkBAIC0yMyw0NDIgKzIzLDQ2
OCBAQAogaW50IGRjY19yYyA9IDA7CiAKIC8qIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBmaWxlIGRl
c2NyaXB0b3IgYW5kIGEgYnVmZmVyIGFzIGlucHV0IGFuZAotICogcmV0dXJucyBlaXRoZXIgMCBm
b3Igc3VjY2VzcyBvciBlcnJubyBpbiBjYXNlIG9mIGVycm9yLiAqLworcmV0dXJucyBlaXRoZXIg
MCBmb3Igc3VjY2VzcyBvciBlcnJubyBpbiBjYXNlIG9mIGVycm9yLiAqLwogCi1pbnQgZmx1c2hi
dWZmZXIgKGludCBzb2NrZXQsIGdzdHJpbmcgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgZmx1c2hidWZm
ZXIKKyhpbnQgc29ja2V0LCBnc3RyaW5nICpidWZmZXIpCiB7Ci0gIGludCByZXR2YWwsIHJzcDsK
LSAgcnNwID0gd3JpdGUoc29ja2V0LCBidWZmZXItPnMsIGJ1ZmZlci0+cHRyKTsKK2ludCByc3A7
CisKK3JzcCA9IHdyaXRlKHNvY2tldCwgYnVmZmVyLT5zLCBidWZmZXItPnB0cik7CitERUJVRyhE
X2FjbCkKKyAgZGVidWdfcHJpbnRmKCJEQ0M6IGZsdXNoYnVmZmVyKCk6IFJlc3VsdCBvZiB0aGUg
d3JpdGUoKSA9ICVkXG4iLCByc3ApOworaWYocnNwIDwgMCkKKyAgewogICBERUJVRyhEX2FjbCkK
LSAgICBkZWJ1Z19wcmludGYoIkRDQzogZmx1c2hidWZmZXIoKTogUmVzdWx0IG9mIHRoZSB3cml0
ZSgpID0gJWRcbiIsIHJzcCk7Ci0gIGlmKHJzcCA8IDApIHsKLSAgICBERUJVRyhEX2FjbCkKLSAg
ICAgIGRlYnVnX3ByaW50ZigiRENDOiBmbHVzaGJ1ZmZlcigpOiBFcnJvciB3cml0aW5nIGJ1ZmZl
ciB0byBzb2NrZXQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgIHJldHZhbCA9IGVycm5v
OworICAgIGRlYnVnX3ByaW50ZigiRENDOiBmbHVzaGJ1ZmZlcigpOiBFcnJvciB3cml0aW5nIGJ1
ZmZlciB0byBzb2NrZXQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICByZXR1cm4gZXJybm87
CiAgIH0KLSAgZWxzZSB7Ci0gICAgREVCVUcoRF9hY2wpCi0gICAgICBkZWJ1Z19wcmludGYoIkRD
QzogZmx1c2hidWZmZXIoKTogV3JvdGUgYnVmZmVyIHRvIHNvY2tldDpcbiUuKnNcbiIsIGJ1ZmZl
ci0+cHRyLCBidWZmZXItPnMpOwotICAgIHJldHZhbCA9IDA7Ci0gIH0KLSAgcmV0dXJuIHJldHZh
bDsKK0RFQlVHKERfYWNsKQorICBkZWJ1Z19wcmludGYoIkRDQzogZmx1c2hidWZmZXIoKTogV3Jv
dGUgYnVmZmVyIHRvIHNvY2tldDpcbiUuKnNcbiIsIGJ1ZmZlci0+cHRyLCBidWZmZXItPnMpOwor
cmV0dXJuIDA7CiB9CiAKIGludAogZGNjX3Byb2Nlc3ModXNjaGFyICoqbGlzdHB0cikKIHsKLSAg
aW50IHNlcCA9IDA7Ci0gIGNvbnN0IHVzY2hhciAqbGlzdCA9ICpsaXN0cHRyOwotICBGSUxFICpk
YXRhX2ZpbGU7Ci0gIHVzY2hhciAqZGNjX2RlZmF1bHRfaXBfb3B0aW9uID0gVVMiMTI3LjAuMC4x
IjsKLSAgdXNjaGFyICpkY2NfaGVsb19vcHRpb24gPSBVUyJsb2NhbGhvc3QiOwotICB1c2NoYXIg
Knh0cmFfaGRycyA9IE5VTEw7Ci0gIHVzY2hhciAqb3ZlcnJpZGVfY2xpZW50X2lwICA9IE5VTEw7
Ci0KLSAgLyogZnJvbSBsb2NhbF9zY2FuICovCi0gIGludCBkY2NfcmVzcGxlbiwgcmV0dmFsLCBz
b2NrZmQsIHJlc3A7Ci0gIHVuc2lnbmVkIGludCBwb3J0bnI7Ci0gIHN0cnVjdCBzb2NrYWRkcl91
biAgc2Vydl9hZGRyOwotICBzdHJ1Y3Qgc29ja2FkZHJfaW4gIHNlcnZfYWRkcl9pbjsKLSAgc3Ry
dWN0IGhvc3RlbnQgKmlwYWRkcmVzczsKLSAgdXNjaGFyIHNvY2twYXRoWzEyOF07Ci0gIHVzY2hh
ciBzb2NraXBbNDBdLCBjbGllbnRfaXBbNDBdOwotICBnc3RyaW5nICpkY2NfaGVhZGVyczsKLSAg
Z3N0cmluZyAqc2VuZGJ1ZjsKLSAgdXNjaGFyICpkY2NfcmV0dXJuX3RleHQ7Ci0gIHN0cnVjdCBo
ZWFkZXJfbGluZSAqbWFpbF9oZWFkZXJzOwotICB1c2NoYXIgKmRjY19hY2xfb3B0aW9uczsKLSAg
Z3N0cmluZyAqZGNjX3h0cmFfaGRyczsKLSAgZ3N0cmluZyAqZGNjX2hlYWRlcl9zdHI7Ci0KLSAg
LyogZ3JlcCAxc3Qgb3B0aW9uICovCi0gIGlmICgoZGNjX2FjbF9vcHRpb25zID0gc3RyaW5nX25l
eHRpbmxpc3QoJmxpc3QsICZzZXAsIE5VTEwsIDApKSkgewotICAgIC8qIHBhcnNlIDFzdCBvcHRp
b24gKi8KLSAgICBpZiAoICBzdHJjbXBpYyhkY2NfYWNsX29wdGlvbnMsIFVTImZhbHNlIikgPT0g
MAotICAgICAgIHx8IFVzdHJjbXAoZGNjX2FjbF9vcHRpb25zLCAiMCIpID09IDApCi0gICAgICBy
ZXR1cm4gRkFJTDsJLyogZXhwbGljaXRseSBubyBtYXRjaGluZyAqLworaW50IHNlcCA9IDA7Citj
b25zdCB1c2NoYXIgKmxpc3QgPSAqbGlzdHB0cjsKK0ZJTEUgKmRhdGFfZmlsZTsKK3VzY2hhciAq
ZGNjX2RlZmF1bHRfaXBfb3B0aW9uID0gVVMiMTI3LjAuMC4xIjsKK3VzY2hhciAqZGNjX2hlbG9f
b3B0aW9uID0gVVMibG9jYWxob3N0IjsKK3VzY2hhciAqeHRyYV9oZHJzID0gTlVMTDsKK3VzY2hh
ciAqb3ZlcnJpZGVfY2xpZW50X2lwICA9IE5VTEw7CisKKy8qIGZyb20gbG9jYWxfc2NhbiAqLwor
aW50IGRjY19yZXNwbGVuLCByZXR2YWwsIHNvY2tmZCwgcmVzcDsKK3Vuc2lnbmVkIGludCBwb3J0
bnI7CitzdHJ1Y3Qgc29ja2FkZHJfdW4gIHNlcnZfYWRkcjsKK3N0cnVjdCBzb2NrYWRkcl9pbiAg
c2Vydl9hZGRyX2luOworc3RydWN0IGhvc3RlbnQgKmlwYWRkcmVzczsKK3VzY2hhciBzb2NrcGF0
aFsxMjhdOwordXNjaGFyIHNvY2tpcFs0MF0sIGNsaWVudF9pcFs0MF07Citnc3RyaW5nICpkY2Nf
aGVhZGVyczsKK2dzdHJpbmcgKnNlbmRidWY7Cit1c2NoYXIgKmRjY19yZXR1cm5fdGV4dCA9IFVT
IicnIjsKK3N0cnVjdCBoZWFkZXJfbGluZSAqbWFpbF9oZWFkZXJzOwordXNjaGFyICpkY2NfYWNs
X29wdGlvbnM7Citnc3RyaW5nICpkY2NfeHRyYV9oZHJzOworZ3N0cmluZyAqZGNjX2hlYWRlcl9z
dHI7CisKKy8qIGdyZXAgMXN0IG9wdGlvbiAqLworaWYgKChkY2NfYWNsX29wdGlvbnMgPSBzdHJp
bmdfbmV4dGlubGlzdCgmbGlzdCwgJnNlcCwgTlVMTCwgMCkpKQorICB7CisgIC8qIHBhcnNlIDFz
dCBvcHRpb24gKi8KKyAgaWYgKCAgc3RyY21waWMoZGNjX2FjbF9vcHRpb25zLCBVUyJmYWxzZSIp
ID09IDAKKyAgICAgfHwgVXN0cmNtcChkY2NfYWNsX29wdGlvbnMsICIwIikgPT0gMCkKKyAgICBy
ZXR1cm4gRkFJTDsJLyogZXhwbGljaXRseSBubyBtYXRjaGluZyAqLwogICB9Ci0gIGVsc2UKLSAg
ICByZXR1cm4gRkFJTDsJLyogZW1wdHkgbWVhbnMgImRvbid0IG1hdGNoIGFueXRoaW5nIiAqLwot
Ci0gIHNlcCA9IDA7CitlbHNlCisgIHJldHVybiBGQUlMOwkvKiBlbXB0eSBtZWFucyAiZG9uJ3Qg
bWF0Y2ggYW55dGhpbmciICovCiAKLSAgLyogaWYgd2Ugc2Nhbm5lZCB0aGlzIG1lc3NhZ2UgbGFz
dCB0aW1lLCBqdXN0IHJldHVybiAqLwotICBpZiAoZGNjX29rKQotICAgIHJldHVybiBkY2NfcmM7
CitzZXAgPSAwOwogCi0gIC8qIG9wZW4gdGhlIHNwb29sZWQgYm9keSAqLwotICBmb3IgKGludCBp
ID0gMDsgaSA8IDI7IGkrKykgewotICAgIHVzY2hhciBtZXNzYWdlX3N1YmRpclsyXTsKLSAgICBz
ZXRfc3ViZGlyX3N0cihtZXNzYWdlX3N1YmRpciwgbWVzc2FnZV9pZCwgaSk7Ci0gICAgaWYgKChk
YXRhX2ZpbGUgPSBVZm9wZW4oCi0JICAgIHNwb29sX2ZuYW1lKFVTImlucHV0IiwgbWVzc2FnZV9z
dWJkaXIsIG1lc3NhZ2VfaWQsIFVTIi1EIiksICJyYiIpKSkKLSAgICAgIGJyZWFrOwotICB9Ci0K
LSAgaWYgKCFkYXRhX2ZpbGUpIHsKLSAgICAvKiBlcnJvciB3aGlsZSBzcG9vbGluZyAqLwotICAg
IGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUMsCi0gICAgICAgICAgICJEQ0M6IGVycm9y
IHdoaWxlIG9wZW5pbmcgc3Bvb2wgZmlsZSIpOwotICAgIHJldHVybiBERUZFUjsKLSAgfQotCi0g
IC8qIEluaXRpYWxpemUgdGhlIHZhcmlhYmxlcyAqLworLyogaWYgd2Ugc2Nhbm5lZCB0aGlzIG1l
c3NhZ2UgbGFzdCB0aW1lLCBqdXN0IHJldHVybiAqLworaWYgKGRjY19vaykKKyAgcmV0dXJuIGRj
Y19yYzsKIAotICBiemVybyhzb2NraXAsc2l6ZW9mKHNvY2tpcCkpOwotICBpZiAoZGNjaWZkX2Fk
ZHJlc3MpIHsKLSAgICBpZiAoZGNjaWZkX2FkZHJlc3NbMF0gPT0gJy8nKQotICAgICAgVXN0cm5j
cHkoc29ja3BhdGgsIGRjY2lmZF9hZGRyZXNzLCBzaXplb2Yoc29ja3BhdGgpKTsKLSAgICBlbHNl
Ci0gICAgICBpZiggc3NjYW5mKENTIGRjY2lmZF9hZGRyZXNzLCAiJXMgJXUiLCBzb2NraXAsICZw
b3J0bnIpICE9IDIpIHsKLSAgICAgICAgbG9nX3dyaXRlKDAsIExPR19NQUlOLAotICAgICAgICAg
ICJEQ0M6IHdhcm5pbmcgLSBpbnZhbGlkIGRjY2lmZCBhZGRyZXNzOiAnJXMnIiwgZGNjaWZkX2Fk
ZHJlc3MpOwotICAgICAgICAodm9pZClmY2xvc2UoZGF0YV9maWxlKTsKLSAgICAgICAgcmV0dXJu
IERFRkVSOworLyogb3BlbiB0aGUgc3Bvb2xlZCBib2R5ICovCitmb3IgKGludCBpID0gMDsgaSA8
IDI7IGkrKykKKyAgeworICB1c2NoYXIgbWVzc2FnZV9zdWJkaXJbMl07CisgIHNldF9zdWJkaXJf
c3RyKG1lc3NhZ2Vfc3ViZGlyLCBtZXNzYWdlX2lkLCBpKTsKKyAgaWYgKChkYXRhX2ZpbGUgPSBV
Zm9wZW4oCisJICBzcG9vbF9mbmFtZShVUyJpbnB1dCIsIG1lc3NhZ2Vfc3ViZGlyLCBtZXNzYWdl
X2lkLCBVUyItRCIpLCAicmIiKSkpCisgICAgYnJlYWs7CisgIH0KKworaWYgKCFkYXRhX2ZpbGUp
CisgIHsKKyAgLyogZXJyb3Igd2hpbGUgc3Bvb2xpbmcgKi8KKyAgbG9nX3dyaXRlKDAsIExPR19N
QUlOfExPR19QQU5JQywKKwkgIkRDQzogZXJyb3Igd2hpbGUgb3BlbmluZyBzcG9vbCBmaWxlIik7
CisgIHJldHVybiBERUZFUjsKKyAgfQorCisvKiBJbml0aWFsaXplIHRoZSB2YXJpYWJsZXMgKi8K
KworYnplcm8oc29ja2lwLHNpemVvZihzb2NraXApKTsKK2lmIChkY2NpZmRfYWRkcmVzcykKKyAg
eworICBpZiAoZGNjaWZkX2FkZHJlc3NbMF0gPT0gJy8nKQorICAgIFVzdHJuY3B5KHNvY2twYXRo
LCBkY2NpZmRfYWRkcmVzcywgc2l6ZW9mKHNvY2twYXRoKSk7CisgIGVsc2UKKyAgICBpZiggc3Nj
YW5mKENTIGRjY2lmZF9hZGRyZXNzLCAiJXMgJXUiLCBzb2NraXAsICZwb3J0bnIpICE9IDIpCisg
ICAgICB7CisgICAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU4sCisJIkRDQzogd2FybmluZyAtIGlu
dmFsaWQgZGNjaWZkIGFkZHJlc3M6ICclcyciLCBkY2NpZmRfYWRkcmVzcyk7CisgICAgICAodm9p
ZClmY2xvc2UoZGF0YV9maWxlKTsKKyAgICAgIHJldHVybiBERUZFUjsKICAgICAgIH0KICAgfQog
Ci0gIC8qIGRjY19oZWFkZXJzIGlzIHdoYXQgd2Ugc2VuZCBhcyBkY2NpZmQgb3B0aW9ucyAtIHNl
ZSBtYW4gZGNjaWZkICovCi0gIC8qIFdlIGRvbid0IHN1cHBvcnQgYW55IG90aGVyIG9wdGlvbiB0
aGFuICdoZWFkZXInIHNvIGp1c3QgY29weSB0aGF0ICovCi0gIGRjY19oZWFkZXJzID0gc3RyaW5n
X2NhdChOVUxMLCBkY2NpZmRfb3B0aW9ucyk7Ci0gIC8qIGlmICRhY2xfbV9kY2Nfb3ZlcnJpZGVf
Y2xpZW50X2lwIGlzIHNldCB1c2UgaXQgKi8KLSAgaWYgKCgob3ZlcnJpZGVfY2xpZW50X2lwID0g
ZXhwYW5kX3N0cmluZyhVUyIkYWNsX21fZGNjX292ZXJyaWRlX2NsaWVudF9pcCIpKSAhPSBOVUxM
KSAmJgotICAgICAgIChvdmVycmlkZV9jbGllbnRfaXBbMF0gIT0gJ1wwJykpIHsKLSAgICBVc3Ry
bmNweShjbGllbnRfaXAsIG92ZXJyaWRlX2NsaWVudF9pcCwgc2l6ZW9mKGNsaWVudF9pcCktMSk7
Ci0gICAgREVCVUcoRF9hY2wpCi0gICAgICBkZWJ1Z19wcmludGYoIkRDQzogQ2xpZW50IElQIChv
dmVycmlkZGVuKTogJXNcbiIsIGNsaWVudF9pcCk7CisvKiBkY2NfaGVhZGVycyBpcyB3aGF0IHdl
IHNlbmQgYXMgZGNjaWZkIG9wdGlvbnMgLSBzZWUgbWFuIGRjY2lmZCAqLworLyogV2UgZG9uJ3Qg
c3VwcG9ydCBhbnkgb3RoZXIgb3B0aW9uIHRoYW4gJ2hlYWRlcicgc28ganVzdCBjb3B5IHRoYXQg
Ki8KK2RjY19oZWFkZXJzID0gc3RyaW5nX2NhdChOVUxMLCBkY2NpZmRfb3B0aW9ucyk7CisvKiBp
ZiAkYWNsX21fZGNjX292ZXJyaWRlX2NsaWVudF9pcCBpcyBzZXQgdXNlIGl0ICovCitpZiAoKChv
dmVycmlkZV9jbGllbnRfaXAgPSBleHBhbmRfc3RyaW5nKFVTIiRhY2xfbV9kY2Nfb3ZlcnJpZGVf
Y2xpZW50X2lwIikpICE9IE5VTEwpICYmCisgICAgIChvdmVycmlkZV9jbGllbnRfaXBbMF0gIT0g
J1wwJykpCisgIHsKKyAgVXN0cm5jcHkoY2xpZW50X2lwLCBvdmVycmlkZV9jbGllbnRfaXAsIHNp
emVvZihjbGllbnRfaXApLTEpOworICBERUJVRyhEX2FjbCkKKyAgICBkZWJ1Z19wcmludGYoIkRD
QzogQ2xpZW50IElQIChvdmVycmlkZGVuKTogJXNcbiIsIGNsaWVudF9pcCk7CiAgIH0KLSAgZWxz
ZSBpZihzZW5kZXJfaG9zdF9hZGRyZXNzKSB7CitlbHNlIGlmKHNlbmRlcl9ob3N0X2FkZHJlc3Mp
CisgIHsKICAgLyogZWxzZSBpZiAkc2VuZGVyX2hvc3RfYWRkcmVzcyBpcyBhdmFpbGFibGUgdXNl
IHRoYXQ/ICovCi0gICAgVXN0cm5jcHkoY2xpZW50X2lwLCBzZW5kZXJfaG9zdF9hZGRyZXNzLCBz
aXplb2YoY2xpZW50X2lwKS0xKTsKLSAgICBERUJVRyhEX2FjbCkKLSAgICAgIGRlYnVnX3ByaW50
ZigiRENDOiBDbGllbnQgSVAgKHNlbmRlcl9ob3N0X2FkZHJlc3MpOiAlc1xuIiwgY2xpZW50X2lw
KTsKKyAgVXN0cm5jcHkoY2xpZW50X2lwLCBzZW5kZXJfaG9zdF9hZGRyZXNzLCBzaXplb2YoY2xp
ZW50X2lwKS0xKTsKKyAgREVCVUcoRF9hY2wpCisgICAgZGVidWdfcHJpbnRmKCJEQ0M6IENsaWVu
dCBJUCAoc2VuZGVyX2hvc3RfYWRkcmVzcyk6ICVzXG4iLCBjbGllbnRfaXApOwogICB9Ci0gIGVs
c2UgewotICAgIC8qIHNlbmRlcl9ob3N0X2FkZHJlc3MgaXMgTlVMTCB3aGljaCBtZWFucyBpdCBj
b21lcyBmcm9tIGxvY2FsaG9zdCAqLwotICAgIFVzdHJuY3B5KGNsaWVudF9pcCwgZGNjX2RlZmF1
bHRfaXBfb3B0aW9uLCBzaXplb2YoY2xpZW50X2lwKS0xKTsKLSAgICBERUJVRyhEX2FjbCkKLSAg
ICAgIGRlYnVnX3ByaW50ZigiRENDOiBDbGllbnQgSVAgKGRlZmF1bHQpOiAlc1xuIiwgY2xpZW50
X2lwKTsKK2Vsc2UKKyAgeworICAvKiBzZW5kZXJfaG9zdF9hZGRyZXNzIGlzIE5VTEwgd2hpY2gg
bWVhbnMgaXQgY29tZXMgZnJvbSBsb2NhbGhvc3QgKi8KKyAgVXN0cm5jcHkoY2xpZW50X2lwLCBk
Y2NfZGVmYXVsdF9pcF9vcHRpb24sIHNpemVvZihjbGllbnRfaXApLTEpOworICBERUJVRyhEX2Fj
bCkKKyAgICBkZWJ1Z19wcmludGYoIkRDQzogQ2xpZW50IElQIChkZWZhdWx0KTogJXNcbiIsIGNs
aWVudF9pcCk7CiAgIH0KLSAgLyogYnVpbGQgb3B0aW9ucyBibG9jayAqLwotICBkY2NfaGVhZGVy
cyA9IHN0cmluZ19hcHBlbmQoZGNjX2hlYWRlcnMsIDUsIFVTIlxuIiwgY2xpZW50X2lwLCBVUyJc
bkhFTE8gIiwgZGNjX2hlbG9fb3B0aW9uLCBVUyJcbiIpOworLyogYnVpbGQgb3B0aW9ucyBibG9j
ayAqLworZGNjX2hlYWRlcnMgPSBzdHJpbmdfYXBwZW5kKGRjY19oZWFkZXJzLCA1LCBVUyJcbiIs
IGNsaWVudF9pcCwgVVMiXG5IRUxPICIsIGRjY19oZWxvX29wdGlvbiwgVVMiXG4iKTsKIAotICAv
KiBpbml0aWFsaXplIHRoZSBvdGhlciB2YXJpYWJsZXMgKi8KLSAgbWFpbF9oZWFkZXJzID0gaGVh
ZGVyX2xpc3Q7Ci0gIC8qIHdlIHNldCB0aGUgZGVmYXVsdCByZXR1cm4gdmFsdWUgdG8gREVGRVIg
Ki8KLSAgcmV0dmFsID0gREVGRVI7Ci0KLSAgLyogc2VuZCBhIG51bGwgcmV0dXJuIHBhdGggYXMg
Ijw+Ii4gKi8KLSAgZGNjX2hlYWRlcnMgPSBzdHJpbmdfY2F0IChkY2NfaGVhZGVycywgKnNlbmRl
cl9hZGRyZXNzID8gc2VuZGVyX2FkZHJlc3MgOiBVUyI8PiIpOwotICBkY2NfaGVhZGVycyA9IHN0
cmluZ19jYXRuKGRjY19oZWFkZXJzLCBVUyJcbiIsIDEpOwotCi0gIC8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgotICAgKiBOb3cgY3JlYXRpbmcgdGhlIHNvY2tldCBjb25u
ZWN0aW9uICoKLSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0g
IC8qIElmIHNvY2tpcCBjb250YWlucyBhbiBpcCwgd2UgdXNlIGEgdGNwIHNvY2tldCwgb3RoZXJ3
aXNlIGEgVU5JWCBzb2NrZXQgKi8KLSAgaWYoVXN0cmNtcChzb2NraXAsICIiKSkgewotICAgIGlw
YWRkcmVzcyA9IGdldGhvc3RieW5hbWUoQ1Mgc29ja2lwKTsKLSAgICBiemVybyhDUyAgJnNlcnZf
YWRkcl9pbiwgc2l6ZW9mKHNlcnZfYWRkcl9pbikpOwotICAgIHNlcnZfYWRkcl9pbi5zaW5fZmFt
aWx5ID0gQUZfSU5FVDsKLSAgICBiY29weShDUyBpcGFkZHJlc3MtPmhfYWRkciwgQ1MgJnNlcnZf
YWRkcl9pbi5zaW5fYWRkci5zX2FkZHIsIGlwYWRkcmVzcy0+aF9sZW5ndGgpOwotICAgIHNlcnZf
YWRkcl9pbi5zaW5fcG9ydCA9IGh0b25zKHBvcnRucik7Ci0gICAgaWYgKChzb2NrZmQgPSBzb2Nr
ZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sMCkpIDwgMCkgewotICAgICAgREVCVUcoRF9hY2wpCi0g
ICAgICAgIGRlYnVnX3ByaW50ZigiRENDOiBDcmVhdGluZyBUQ1Agc29ja2V0IGNvbm5lY3Rpb24g
ZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgIGxvZ193cml0ZSgwLExPR19Q
QU5JQywiRENDOiBDcmVhdGluZyBUQ1Agc29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkOiAlc1xuIiwg
c3RyZXJyb3IoZXJybm8pKTsKLSAgICAgIC8qIGlmIHdlIGNhbm5vdCBjcmVhdGUgdGhlIHNvY2tl
dCwgZGVmZXIgdGhlIG1haWwgKi8KLSAgICAgICh2b2lkKWZjbG9zZShkYXRhX2ZpbGUpOwotICAg
ICAgcmV0dXJuIHJldHZhbDsKKy8qIGluaXRpYWxpemUgdGhlIG90aGVyIHZhcmlhYmxlcyAqLwor
bWFpbF9oZWFkZXJzID0gaGVhZGVyX2xpc3Q7CisvKiB3ZSBzZXQgdGhlIGRlZmF1bHQgcmV0dXJu
IHZhbHVlIHRvIERFRkVSICovCityZXR2YWwgPSBERUZFUjsKKworLyogc2VuZCBhIG51bGwgcmV0
dXJuIHBhdGggYXMgIjw+Ii4gKi8KK2RjY19oZWFkZXJzID0gc3RyaW5nX2NhdCAoZGNjX2hlYWRl
cnMsICpzZW5kZXJfYWRkcmVzcyA/IHNlbmRlcl9hZGRyZXNzIDogVVMiPD4iKTsKK2RjY19oZWFk
ZXJzID0gc3RyaW5nX2NhdG4oZGNjX2hlYWRlcnMsIFVTIlxuIiwgMSk7CisKKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTm93IGNyZWF0aW5nIHRoZSBzb2NrZXQg
Y29ubmVjdGlvbiAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK
Ky8qIElmIHNvY2tpcCBjb250YWlucyBhbiBpcCwgd2UgdXNlIGEgdGNwIHNvY2tldCwgb3RoZXJ3
aXNlIGEgVU5JWCBzb2NrZXQgKi8KK2lmKFVzdHJjbXAoc29ja2lwLCAiIikpCisgIHsKKyAgaXBh
ZGRyZXNzID0gZ2V0aG9zdGJ5bmFtZShDUyBzb2NraXApOworICBiemVybyhDUyAgJnNlcnZfYWRk
cl9pbiwgc2l6ZW9mKHNlcnZfYWRkcl9pbikpOworICBzZXJ2X2FkZHJfaW4uc2luX2ZhbWlseSA9
IEFGX0lORVQ7CisgIGJjb3B5KENTIGlwYWRkcmVzcy0+aF9hZGRyLCBDUyAmc2Vydl9hZGRyX2lu
LnNpbl9hZGRyLnNfYWRkciwgaXBhZGRyZXNzLT5oX2xlbmd0aCk7CisgIHNlcnZfYWRkcl9pbi5z
aW5fcG9ydCA9IGh0b25zKHBvcnRucik7CisgIGlmICgoc29ja2ZkID0gc29ja2V0KEFGX0lORVQs
IFNPQ0tfU1RSRUFNLDApKSA8IDApCisgICAgeworICAgIERFQlVHKERfYWNsKQorICAgICAgZGVi
dWdfcHJpbnRmKCJEQ0M6IENyZWF0aW5nIFRDUCBzb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQ6ICVz
XG4iLCBzdHJlcnJvcihlcnJubykpOworICAgIGxvZ193cml0ZSgwLExPR19QQU5JQywiRENDOiBD
cmVhdGluZyBUQ1Agc29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAvKiBpZiB3ZSBjYW5ub3QgY3JlYXRlIHRoZSBzb2NrZXQsIGRlZmVyIHRoZSBt
YWlsICovCisgICAgKHZvaWQpZmNsb3NlKGRhdGFfZmlsZSk7CisgICAgcmV0dXJuIHJldHZhbDsK
ICAgICB9Ci0gICAgLyogTm93IGNvbm5lY3RpbmcgdGhlIHNvY2tldCAoSU5FVCkgKi8KLSAgICBp
ZiAoY29ubmVjdChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Vydl9hZGRyX2luLCBzaXpl
b2Yoc2Vydl9hZGRyX2luKSkgPCAwKSB7Ci0gICAgICBERUJVRyhEX2FjbCkKLSAgICAgICAgZGVi
dWdfcHJpbnRmKCJEQ0M6IENvbm5lY3RpbmcgdG8gVENQIHNvY2tldCBmYWlsZWQ6ICVzXG4iLCBz
dHJlcnJvcihlcnJubykpOwotICAgICAgbG9nX3dyaXRlKDAsTE9HX1BBTklDLCJEQ0M6IENvbm5l
Y3RpbmcgdG8gVENQIHNvY2tldCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAg
ICAgLyogaWYgd2UgY2Fubm90IGNvbnRhY3QgdGhlIHNvY2tldCwgZGVmZXIgdGhlIG1haWwgKi8K
LSAgICAgICh2b2lkKWZjbG9zZShkYXRhX2ZpbGUpOwotICAgICAgcmV0dXJuIHJldHZhbDsKKyAg
LyogTm93IGNvbm5lY3RpbmcgdGhlIHNvY2tldCAoSU5FVCkgKi8KKyAgaWYgKGNvbm5lY3Qoc29j
a2ZkLCAoc3RydWN0IHNvY2thZGRyICopJnNlcnZfYWRkcl9pbiwgc2l6ZW9mKHNlcnZfYWRkcl9p
bikpIDwgMCkKKyAgICB7CisgICAgREVCVUcoRF9hY2wpCisgICAgICBkZWJ1Z19wcmludGYoIkRD
QzogQ29ubmVjdGluZyB0byBUQ1Agc29ja2V0IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5v
KSk7CisgICAgbG9nX3dyaXRlKDAsTE9HX1BBTklDLCJEQ0M6IENvbm5lY3RpbmcgdG8gVENQIHNv
Y2tldCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgIC8qIGlmIHdlIGNhbm5v
dCBjb250YWN0IHRoZSBzb2NrZXQsIGRlZmVyIHRoZSBtYWlsICovCisgICAgKHZvaWQpZmNsb3Nl
KGRhdGFfZmlsZSk7CisgICAgcmV0dXJuIHJldHZhbDsKICAgICB9CiAgIH0KLSAgZWxzZSB7Ci0g
ICAgLyogY29ubmVjdGluZyB0byB0aGUgZGNjaWZkIFVOSVggc29ja2V0ICovCi0gICAgYnplcm8o
JnNlcnZfYWRkciwgc2l6ZW9mKHNlcnZfYWRkcikpOwotICAgIHNlcnZfYWRkci5zdW5fZmFtaWx5
ID0gQUZfVU5JWDsKLSAgICBVc3RybmNweShVUyBzZXJ2X2FkZHIuc3VuX3BhdGgsIHNvY2twYXRo
LCBzaXplb2Yoc2Vydl9hZGRyLnN1bl9wYXRoKSk7Ci0gICAgaWYgKChzb2NrZmQgPSBzb2NrZXQo
QUZfVU5JWCwgU09DS19TVFJFQU0sMCkpIDwgMCkgewotICAgICAgREVCVUcoRF9hY2wpCi0gICAg
ICAgIGRlYnVnX3ByaW50ZigiRENDOiBDcmVhdGluZyBVTklYIHNvY2tldCBjb25uZWN0aW9uIGZh
aWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICBsb2dfd3JpdGUoMCxMT0dfUEFO
SUMsIkRDQzogQ3JlYXRpbmcgVU5JWCBzb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQ6ICVzXG4iLCBz
dHJlcnJvcihlcnJubykpOwotICAgICAgLyogaWYgd2UgY2Fubm90IGNyZWF0ZSB0aGUgc29ja2V0
LCBkZWZlciB0aGUgbWFpbCAqLwotICAgICAgKHZvaWQpZmNsb3NlKGRhdGFfZmlsZSk7Ci0gICAg
ICByZXR1cm4gcmV0dmFsOworZWxzZQorICB7CisgIC8qIGNvbm5lY3RpbmcgdG8gdGhlIGRjY2lm
ZCBVTklYIHNvY2tldCAqLworICBiemVybygmc2Vydl9hZGRyLCBzaXplb2Yoc2Vydl9hZGRyKSk7
CisgIHNlcnZfYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgVXN0cm5jcHkoVVMgc2Vydl9h
ZGRyLnN1bl9wYXRoLCBzb2NrcGF0aCwgc2l6ZW9mKHNlcnZfYWRkci5zdW5fcGF0aCkpOworICBp
ZiAoKHNvY2tmZCA9IHNvY2tldChBRl9VTklYLCBTT0NLX1NUUkVBTSwwKSkgPCAwKQorICAgIHsK
KyAgICBERUJVRyhEX2FjbCkKKyAgICAgIGRlYnVnX3ByaW50ZigiRENDOiBDcmVhdGluZyBVTklY
IHNvY2tldCBjb25uZWN0aW9uIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
bG9nX3dyaXRlKDAsTE9HX1BBTklDLCJEQ0M6IENyZWF0aW5nIFVOSVggc29ja2V0IGNvbm5lY3Rp
b24gZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAvKiBpZiB3ZSBjYW5ub3Qg
Y3JlYXRlIHRoZSBzb2NrZXQsIGRlZmVyIHRoZSBtYWlsICovCisgICAgKHZvaWQpZmNsb3NlKGRh
dGFfZmlsZSk7CisgICAgcmV0dXJuIHJldHZhbDsKICAgICB9Ci0gICAgLyogTm93IGNvbm5lY3Rp
bmcgdGhlIHNvY2tldCAoVU5JWCkgKi8KLSAgICBpZiAoY29ubmVjdChzb2NrZmQsIChzdHJ1Y3Qg
c29ja2FkZHIgKikgJnNlcnZfYWRkciwgc2l6ZW9mKHNlcnZfYWRkcikpIDwgMCkgewotICAgICAg
REVCVUcoRF9hY2wpCi0gICAgICAgIGRlYnVnX3ByaW50ZigiRENDOiBDb25uZWN0aW5nIHRvIFVO
SVggc29ja2V0IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICBsb2dfd3Jp
dGUoMCxMT0dfUEFOSUMsIkRDQzogQ29ubmVjdGluZyB0byBVTklYIHNvY2tldCBmYWlsZWQ6ICVz
XG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgLyogaWYgd2UgY2Fubm90IGNvbnRhY3QgdGhl
IHNvY2tldCwgZGVmZXIgdGhlIG1haWwgKi8KLSAgICAgICh2b2lkKWZjbG9zZShkYXRhX2ZpbGUp
OwotICAgICAgcmV0dXJuIHJldHZhbDsKKyAgLyogTm93IGNvbm5lY3RpbmcgdGhlIHNvY2tldCAo
VU5JWCkgKi8KKyAgaWYgKGNvbm5lY3Qoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2
X2FkZHIsIHNpemVvZihzZXJ2X2FkZHIpKSA8IDApCisgICAgeworICAgIERFQlVHKERfYWNsKQor
ICAgICAgZGVidWdfcHJpbnRmKCJEQ0M6IENvbm5lY3RpbmcgdG8gVU5JWCBzb2NrZXQgZmFpbGVk
OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBsb2dfd3JpdGUoMCxMT0dfUEFOSUMsIkRD
QzogQ29ubmVjdGluZyB0byBVTklYIHNvY2tldCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJu
bykpOworICAgIC8qIGlmIHdlIGNhbm5vdCBjb250YWN0IHRoZSBzb2NrZXQsIGRlZmVyIHRoZSBt
YWlsICovCisgICAgKHZvaWQpZmNsb3NlKGRhdGFfZmlsZSk7CisgICAgcmV0dXJuIHJldHZhbDsK
ICAgICB9CiAgIH0KLSAgLyogdGhlIHNvY2tldCBpcyBvcGVuLCBub3cgc2VuZCB0aGUgb3B0aW9u
cyB0byBkY2NpZmQqLworLyogdGhlIHNvY2tldCBpcyBvcGVuLCBub3cgc2VuZCB0aGUgb3B0aW9u
cyB0byBkY2NpZmQqLworREVCVUcoRF9hY2wpCisgIGRlYnVnX3ByaW50ZigiRENDOiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuRENDOiBTb2NrZXQgb3BlbmVkOyBub3cgc2Vu
ZGluZyBpbnB1dFxuIgorCSAgICAgICAiRENDOiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLVxuIik7CisKKy8qIGxldCdzIHNlbmQgZWFjaCBvZiB0aGUgcmVjaXBpZW50cyB0byBk
Y2NpZmQgKi8KK2ZvciAoaW50IGkgPSAwOyBpIDwgcmVjaXBpZW50c19jb3VudDsgaSsrKQorICB7
CiAgIERFQlVHKERfYWNsKQotICAgIGRlYnVnX3ByaW50ZigiRENDOiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuRENDOiBTb2NrZXQgb3BlbmVkOyBub3cgc2VuZGluZyBpbnB1
dFxuIgotICAgICAgICAgICAgICAgICAiRENDOiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLVxuIik7Ci0KLSAgLyogbGV0J3Mgc2VuZCBlYWNoIG9mIHRoZSByZWNpcGllbnRzIHRv
IGRjY2lmZCAqLwotICBmb3IgKGludCBpID0gMDsgaSA8IHJlY2lwaWVudHNfY291bnQ7IGkrKykg
ewotICAgIERFQlVHKERfYWNsKQotICAgICAgZGVidWdfcHJpbnRmKCJEQ0M6IHJlY2lwaWVudCA9
ICVzXG4iLHJlY2lwaWVudHNfbGlzdFtpXS5hZGRyZXNzKTsKLSAgICBkY2NfaGVhZGVycyA9IHN0
cmluZ19hcHBlbmQoZGNjX2hlYWRlcnMsIDIsIHJlY2lwaWVudHNfbGlzdFtpXS5hZGRyZXNzLCAi
XG4iKTsKKyAgICBkZWJ1Z19wcmludGYoIkRDQzogcmVjaXBpZW50ID0gJXNcbiIscmVjaXBpZW50
c19saXN0W2ldLmFkZHJlc3MpOworICBkY2NfaGVhZGVycyA9IHN0cmluZ19hcHBlbmQoZGNjX2hl
YWRlcnMsIDIsIHJlY2lwaWVudHNfbGlzdFtpXS5hZGRyZXNzLCAiXG4iKTsKICAgfQotICAvKiBz
ZW5kIGEgYmxhbmsgbGluZSBiZXR3ZWVuIG9wdGlvbnMgYW5kIG1lc3NhZ2UgKi8KLSAgZGNjX2hl
YWRlcnMgPSBzdHJpbmdfY2F0bihkY2NfaGVhZGVycywgVVMiXG4iLCAxKTsKLSAgLyogTm93IHdl
IHNlbmQgdGhlIGlucHV0IGJ1ZmZlciAqLwotICAodm9pZCkgc3RyaW5nX2Zyb21fZ3N0cmluZyhk
Y2NfaGVhZGVycyk7Ci0gIERFQlVHKERfYWNsKQotICAgIGRlYnVnX3ByaW50ZigiRENDOiAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuRENDOiBTZW5kaW5nIG9wdGlvbnM6XG4l
cyIKLSAgICAgICAgICAgICAgICAgIkRDQzogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKipcbiIsIGRjY19oZWFkZXJzLT5zKTsKLSAgaWYgKGZsdXNoYnVmZmVyKHNvY2tmZCwgZGNj
X2hlYWRlcnMpICE9IDApIHsKLSAgICAgICh2b2lkKWZjbG9zZShkYXRhX2ZpbGUpOwotICAgICAg
cmV0dXJuIHJldHZhbDsKKy8qIHNlbmQgYSBibGFuayBsaW5lIGJldHdlZW4gb3B0aW9ucyBhbmQg
bWVzc2FnZSAqLworZGNjX2hlYWRlcnMgPSBzdHJpbmdfY2F0bihkY2NfaGVhZGVycywgVVMiXG4i
LCAxKTsKKy8qIE5vdyB3ZSBzZW5kIHRoZSBpbnB1dCBidWZmZXIgKi8KKyh2b2lkKSBzdHJpbmdf
ZnJvbV9nc3RyaW5nKGRjY19oZWFkZXJzKTsKK0RFQlVHKERfYWNsKQorICBkZWJ1Z19wcmludGYo
IkRDQzogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkRDQzogU2VuZGluZyBv
cHRpb25zOlxuJXMiCisJICAgICAgICJEQ0M6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqXG4iLCBkY2NfaGVhZGVycy0+cyk7CitpZiAoZmx1c2hidWZmZXIoc29ja2ZkLCBkY2Nf
aGVhZGVycykgIT0gMCkKKyAgeworICAodm9pZClmY2xvc2UoZGF0YV9maWxlKTsKKyAgcmV0dXJu
IHJldHZhbDsKICAgfQogCi0gIC8qIG5vdyBzZW5kIHRoZSBtZXNzYWdlICovCi0gIC8qIEZpcnN0
IHNlbmQgdGhlIGhlYWRlcnMgKi8KLSAgREVCVUcoRF9hY2wpCi0gICAgZGVidWdfcHJpbnRmKCJE
Q0M6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5EQ0M6IFNlbmRpbmcgaGVh
ZGVyczpcbiIpOwotICBzZW5kYnVmID0gc3RyaW5nX2dldCg4MTkyKTsKKy8qIG5vdyBzZW5kIHRo
ZSBtZXNzYWdlICovCisvKiBGaXJzdCBzZW5kIHRoZSBoZWFkZXJzICovCitERUJVRyhEX2FjbCkK
KyAgZGVidWdfcHJpbnRmKCJEQ0M6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
XG5EQ0M6IFNlbmRpbmcgaGVhZGVyczpcbiIpOworc2VuZGJ1ZiA9IHN0cmluZ19nZXQoODE5Mik7
CitzZW5kYnVmID0gc3RyaW5nX2NhdG4oc2VuZGJ1ZiwgbWFpbF9oZWFkZXJzLT50ZXh0LCBtYWls
X2hlYWRlcnMtPnNsZW4pOword2hpbGUoKG1haWxfaGVhZGVycz1tYWlsX2hlYWRlcnMtPm5leHQp
KQogICBzZW5kYnVmID0gc3RyaW5nX2NhdG4oc2VuZGJ1ZiwgbWFpbF9oZWFkZXJzLT50ZXh0LCBt
YWlsX2hlYWRlcnMtPnNsZW4pOwotICB3aGlsZSgobWFpbF9oZWFkZXJzPW1haWxfaGVhZGVycy0+
bmV4dCkpIHsKLSAgICBzZW5kYnVmID0gc3RyaW5nX2NhdG4oc2VuZGJ1ZiwgbWFpbF9oZWFkZXJz
LT50ZXh0LCBtYWlsX2hlYWRlcnMtPnNsZW4pOwotICB9CiAKLSAgLyogYSBibGFuayBsaW5lIHNl
cGFyYXRlcyBoZWFkZXIgZnJvbSBib2R5ICovCi0gIHNlbmRidWYgPSBzdHJpbmdfY2F0bihzZW5k
YnVmLCBVUyJcclxuIiwgMik7Ci0gICh2b2lkKSBzdHJpbmdfZnJvbV9nc3RyaW5nKHNlbmRidWYp
OwotICBnc3RyaW5nX3JlbGVhc2VfdW51c2VkKHNlbmRidWYpOwotICBERUJVRyhEX2FjbCkKLSAg
ICBkZWJ1Z19wcmludGYoIiVzRENDOiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KlxuIiwgc2VuZGJ1Zi0+cyk7Ci0gIGlmIChmbHVzaGJ1ZmZlcihzb2NrZmQsIHNlbmRidWYpICE9
IDApIHsKLSAgICAgICh2b2lkKWZjbG9zZShkYXRhX2ZpbGUpOwotICAgICAgcmV0dXJuIHJldHZh
bDsKKy8qIGEgYmxhbmsgbGluZSBzZXBhcmF0ZXMgaGVhZGVyIGZyb20gYm9keSAqLworc2VuZGJ1
ZiA9IHN0cmluZ19jYXRuKHNlbmRidWYsIFVTIlxyXG4iLCAyKTsKKyh2b2lkKSBzdHJpbmdfZnJv
bV9nc3RyaW5nKHNlbmRidWYpOworZ3N0cmluZ19yZWxlYXNlX3VudXNlZChzZW5kYnVmKTsKK0RF
QlVHKERfYWNsKQorICBkZWJ1Z19wcmludGYoIiVzRENDOiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKlxuIiwgc2VuZGJ1Zi0+cyk7CitpZiAoZmx1c2hidWZmZXIoc29ja2ZkLCBz
ZW5kYnVmKSAhPSAwKQorICB7CisgICh2b2lkKWZjbG9zZShkYXRhX2ZpbGUpOworICByZXR1cm4g
cmV0dmFsOwogICB9CiAKLSAgLyogbm93IHNlbmQgdGhlIGJvZHkgKi8KLSAgREVCVUcoRF9hY2wp
Ci0gICAgZGVidWdfcHJpbnRmKCJEQ0M6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqXG5EQ0M6IFdyaXRpbmcgYm9keTpcbiIpOwotICAodm9pZClmc2VlayhkYXRhX2ZpbGUsIFNQ
T09MX0RBVEFfU1RBUlRfT0ZGU0VULCBTRUVLX1NFVCk7Ci0KLSAgZ3N0cmluZyBmaWxlYnVmID0g
eyAuc2l6ZSA9IGJpZ19idWZmZXJfc2l6ZSwgLnB0ciA9IDAsIC5zID0gYmlnX2J1ZmZlciB9Owot
Ci0gIHdoaWxlKChmaWxlYnVmLnB0ciA9IGZyZWFkKGZpbGVidWYucywgMSwgZmlsZWJ1Zi5zaXpl
LCBkYXRhX2ZpbGUpKSA+IDApIHsKLSAgICBpZiAoZmx1c2hidWZmZXIoc29ja2ZkLCAmZmlsZWJ1
ZikgIT0gMCkgewotICAgICAgICAodm9pZClmY2xvc2UoZGF0YV9maWxlKTsKLSAgICAgICAgcmV0
dXJuIHJldHZhbDsKKy8qIG5vdyBzZW5kIHRoZSBib2R5ICovCitERUJVRyhEX2FjbCkKKyAgZGVi
dWdfcHJpbnRmKCJEQ0M6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5EQ0M6
IFdyaXRpbmcgYm9keTpcbiIpOworKHZvaWQpZnNlZWsoZGF0YV9maWxlLCBTUE9PTF9EQVRBX1NU
QVJUX09GRlNFVCwgU0VFS19TRVQpOworCitnc3RyaW5nIGZpbGVidWYgPSB7IC5zaXplID0gYmln
X2J1ZmZlcl9zaXplLCAucHRyID0gMCwgLnMgPSBiaWdfYnVmZmVyIH07CisKK3doaWxlKChmaWxl
YnVmLnB0ciA9IGZyZWFkKGZpbGVidWYucywgMSwgZmlsZWJ1Zi5zaXplLCBkYXRhX2ZpbGUpKSA+
IDApCisgIGlmIChmbHVzaGJ1ZmZlcihzb2NrZmQsICZmaWxlYnVmKSAhPSAwKQorICAgIHsKKyAg
ICAodm9pZClmY2xvc2UoZGF0YV9maWxlKTsKKyAgICByZXR1cm4gcmV0dmFsOwogICAgIH0KLSAg
fQotICBERUJVRyhEX2FjbCkKLSAgICBkZWJ1Z19wcmludGYoIkRDQzogKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKipcbiIpOworREVCVUcoRF9hY2wpCisgIGRlYnVnX3ByaW50Zigi
RENDOiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CiAKLSAgLyogc2h1
dGRvd24oKSB0aGUgc29ja2V0ICovCi0gIGlmKHNodXRkb3duKHNvY2tmZCwgU0hVVF9XUikgPCAw
KSB7CisvKiBzaHV0ZG93bigpIHRoZSBzb2NrZXQgKi8KK2lmKHNodXRkb3duKHNvY2tmZCwgU0hV
VF9XUikgPCAwKQorICB7CisgIERFQlVHKERfYWNsKQorICAgIGRlYnVnX3ByaW50ZigiRENDOiBD
b3VsZG4ndCBzaHV0ZG93biBzb2NrZXQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICBsb2df
d3JpdGUoMCxMT0dfTUFJTiwiRENDOiBDb3VsZG4ndCBzaHV0ZG93biBzb2NrZXQ6ICVzXG4iLCBz
dHJlcnJvcihlcnJubykpOworICAvKiBJZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgc2h1
dGRvd24oKQorICAgKiBkZWZlciB0aGUgbWFpbC4gKi8KKyAgKHZvaWQpZmNsb3NlKGRhdGFfZmls
ZSk7CisgIHJldHVybiByZXR2YWw7CisgIH0KK0RFQlVHKERfYWNsKQorICBkZWJ1Z19wcmludGYo
IkRDQzogSW5wdXQgc2VudC5cbiIKKwkgICAgICAgIkRDQzogKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKytcbiIKKwkgICAgICAgIkRDQzogTm93IHJlY2VpdmluZyBvdXRwdXQgZnJv
bSBzZXJ2ZXJcbiIKKwkgICAgICAgIkRDQzogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS1cbiIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJlY2Vp
dmluZyBvdXRwdXQgZnJvbSBkY2NpZmQgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCisgKiBXZSBzaG91bGQgZ2V0IDMgbGluZXM6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAxLyBGaXJzdCBsaW5lIGlzIG92ZXJh
bGwgcmVzdWx0OiBlaXRoZXIgJ0EnIGZvciBBY2NlcHQsICAgICAgICAqCisgKiAgICAnUicgZm9y
IFJlamVjdCwgJ1MnIGZvciBhY2NlcHQgU29tZSByZWNpcGllbnRzIG9yICAgICAgICAgICAqCisg
KiAgICAnVCcgZm9yIGEgVGVtcG9yYXJ5IGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqCisgKiAyLyBTZWNvbmQgbGluZSBjb250YWlucyB0aGUgbGlzdCBvZiBBY2NlcHRl
ZC9SZWplY3RlZCAgICAgICAgICAqCisgKiAgICByZWNpcGllbnRzIGluIHRoZSBmb3JtIEFBUlJB
IChBID0gYWNjZXB0ZWQsIFIgPSByZWplY3RlZCkuICAqCisgKiAzLyBUaGlyZCBsaW5lIGNvbnRh
aW5zIHRoZSBYLURDQyBoZWFkZXIuICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LworCitpbnQgbGluZSA9IDE7ICAgIC8qIHdlIHN0YXJ0IGF0IHRoZSBmaXJzdCBsaW5lIG9mIHRo
ZSBvdXRwdXQgKi8KK2ludCBidWZvZmZzZXQ7CisKK2RjY19oZWFkZXJfc3RyID0gc3RyaW5nX2dl
dChEQ0NfSEVBREVSX0xJTUlUICsgMik7CisvKiBMZXQncyByZWFkIGZyb20gdGhlIHNvY2tldCB1
bnRpbCB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byByZWFkICovCit3aGlsZSgoZGNjX3Jlc3BsZW4g
PSByZWFkKHNvY2tmZCwgYmlnX2J1ZmZlciwgYmlnX2J1ZmZlcl9zaXplLTEpKSA+IDApCisgIHsK
KyAgLyogZmFpbCBvbiByZWFkIGVycm9yICovCisgIGlmKGRjY19yZXNwbGVuIDwgMCkKKyAgICB7
CiAgICAgREVCVUcoRF9hY2wpCi0gICAgICBkZWJ1Z19wcmludGYoIkRDQzogQ291bGRuJ3Qgc2h1
dGRvd24gc29ja2V0OiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICBsb2dfd3JpdGUoMCxM
T0dfTUFJTiwiRENDOiBDb3VsZG4ndCBzaHV0ZG93biBzb2NrZXQ6ICVzXG4iLCBzdHJlcnJvcihl
cnJubykpOwotICAgIC8qIElmIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBzaHV0ZG93bigp
Ci0gICAgICogZGVmZXIgdGhlIG1haWwuICovCisgICAgICBkZWJ1Z19wcmludGYoIkRDQzogRXJy
b3IgcmVhZGluZyBmcm9tIHNvY2tldDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CiAgICAgKHZv
aWQpZmNsb3NlKGRhdGFfZmlsZSk7CiAgICAgcmV0dXJuIHJldHZhbDsKLSAgfQotICBERUJVRyhE
X2FjbCkKLSAgICBkZWJ1Z19wcmludGYoIkRDQzogSW5wdXQgc2VudC5cbiIKLSAgICAgICAgICAg
ICAgICAgIkRDQzogKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKytcbiIKLSAgICAg
ICAgICAgICAgICAgIkRDQzogTm93IHJlY2VpdmluZyBvdXRwdXQgZnJvbSBzZXJ2ZXJcbiIKLSAg
ICAgICAgICAgICAgICAgIkRDQzogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c
biIpOwotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKiByZWNlaXZp
bmcgb3V0cHV0IGZyb20gZGNjaWZkICoKLSAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKLSAgICogV2Ugc2hvdWxkIGdldCAzIGxpbmVzOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICAgKiAxLyBGaXJzdCBsaW5lIGlz
IG92ZXJhbGwgcmVzdWx0OiBlaXRoZXIgJ0EnIGZvciBBY2NlcHQsICAgICAgICAqCi0gICAqICAg
ICdSJyBmb3IgUmVqZWN0LCAnUycgZm9yIGFjY2VwdCBTb21lIHJlY2lwaWVudHMgb3IgICAgICAg
ICAgICoKLSAgICogICAgJ1QnIGZvciBhIFRlbXBvcmFyeSBlcnJvci4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKgotICAgKiAyLyBTZWNvbmQgbGluZSBjb250YWlucyB0aGUgbGlz
dCBvZiBBY2NlcHRlZC9SZWplY3RlZCAgICAgICAgICAqCi0gICAqICAgIHJlY2lwaWVudHMgaW4g
dGhlIGZvcm0gQUFSUkEgKEEgPSBhY2NlcHRlZCwgUiA9IHJlamVjdGVkKS4gICoKLSAgICogMy8g
VGhpcmQgbGluZSBjb250YWlucyB0aGUgWC1EQ0MgaGVhZGVyLiAgICAgICAgICAgICAgICAgICAg
ICAgKgotICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwotCi0gIGludCBsaW5lID0gMTsgICAgLyogd2Ugc3RhcnQgYXQg
dGhlIGZpcnN0IGxpbmUgb2YgdGhlIG91dHB1dCAqLwotICBpbnQgYnVmb2Zmc2V0OwotCi0gIGRj
Y19oZWFkZXJfc3RyID0gc3RyaW5nX2dldChEQ0NfSEVBREVSX0xJTUlUICsgMik7Ci0gIC8qIExl
dCdzIHJlYWQgZnJvbSB0aGUgc29ja2V0IHVudGlsIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIHJl
YWQgKi8KLSAgd2hpbGUoKGRjY19yZXNwbGVuID0gcmVhZChzb2NrZmQsIGJpZ19idWZmZXIsIGJp
Z19idWZmZXJfc2l6ZS0xKSkgPiAwKSB7Ci0gICAgLyogZmFpbCBvbiByZWFkIGVycm9yICovCi0g
ICAgaWYoZGNjX3Jlc3BsZW4gPCAwKSB7Ci0gICAgICBERUJVRyhEX2FjbCkKLSAgICAgICAgZGVi
dWdfcHJpbnRmKCJEQ0M6IEVycm9yIHJlYWRpbmcgZnJvbSBzb2NrZXQ6ICVzXG4iLCBzdHJlcnJv
cihlcnJubykpOwotICAgICAgKHZvaWQpZmNsb3NlKGRhdGFfZmlsZSk7Ci0gICAgICByZXR1cm4g
cmV0dmFsOwogICAgIH0KLSAgICAvKiBtYWtlIHRoZSBhbnN3ZXIgMC10ZXJtaW5hdGVkLiBvbmx5
IG5lZWRlZCBmb3IgZGVidWdfcHJpbnRmICovCi0gICAgREVCVUcoRF9hY2wpCi0gICAgICBkZWJ1
Z19wcmludGYoIkRDQzogTGVuZ3RoIG9mIHRoZSBvdXRwdXQgYnVmZmVyIGlzOiAlZFxuRENDOiBP
dXRwdXQgYnVmZmVyIGlzOlxuIgotICAgICAgICAgICAgICAgICAgICJEQ0M6IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4lLipzXG4iCi0gICAgICAgICAgICAgICAgICAgIkRD
QzogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsIGRjY19yZXNwbGVuLCBk
Y2NfcmVzcGxlbiwgYmlnX2J1ZmZlcik7Ci0KLSAgICAvKiBOb3cgbGV0J3MgcmVhZCBlYWNoIGNo
YXJhY3RlciBhbmQgc2VlIHdoYXQgd2UndmUgZ290ICovCi0gICAgZm9yKGJ1Zm9mZnNldCA9IDA7
IGJ1Zm9mZnNldCA8IGRjY19yZXNwbGVuLCBsaW5lIDw9IDI7IGJ1Zm9mZnNldCsrKSB7Ci0gICAg
ICAvKiBGaXJzdCBjaGVjayBpZiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGxpbmUgYW5kCi0g
ICAgICAgKiB0aGVuIGluY3JlbWVudCB0aGUgbGluZSBjb3VudGVyICovCi0gICAgICBpZihiaWdf
YnVmZmVyW2J1Zm9mZnNldF0gPT0gJ1xuJykKLSAgICAgICAgbGluZSsrOwotICAgICAgZWxzZSB7
Ci0gICAgICAgIC8qIFRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0IGxpbmUgaXMgdGhl
Ci0gICAgICAgICAqIG92ZXJhbGwgcmVzcG9uc2UuIElmIHRoZXJlJ3MgYW5vdGhlciBjaGFyYWN0
ZXIKLSAgICAgICAgICogb24gdGhhdCBsaW5lIGl0IGlzIG5vdCBjb3JyZWN0LiAqLwotICAgICAg
ICBpZihsaW5lID09IDEpIHsKLSAgICAgICAgICBpZihidWZvZmZzZXQgPT0gMCkgewotICAgICAg
ICAgICAgLyogTm93IGdldCB0aGUgdmFsdWUgYW5kIHNldCB0aGUKLSAgICAgICAgICAgICAqIHJl
dHVybiB2YWx1ZSBhY2NvcmRpbmdseSAqLwotICAgICAgICAgICAgc3dpdGNoKGJpZ19idWZmZXJb
YnVmb2Zmc2V0XSkgewotICAgICAgICAgICAgICBjYXNlICdBJzoKLSAgICAgICAgICAgICAgICBE
RUJVRyhEX2FjbCkKLSAgICAgICAgICAgICAgICAgIGRlYnVnX3ByaW50ZigiRENDOiBPdmVyYWxs
IHJlc3VsdCA9IEFcdHJldHVybmluZyBPS1xuIik7Ci0gICAgICAgICAgICAgICAgZGNjX3JldHVy
bl90ZXh0ID0gVVMiTWFpbCBhY2NlcHRlZCBieSBEQ0MiOwotICAgICAgICAgICAgICAgIGRjY19y
ZXN1bHQgPSBVUyJBIjsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBPSzsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAnUic6Ci0gICAgICAgICAgICAgICAgREVC
VUcoRF9hY2wpCi0gICAgICAgICAgICAgICAgICBkZWJ1Z19wcmludGYoIkRDQzogT3ZlcmFsbCBy
ZXN1bHQgPSBSXHRyZXR1cm5pbmcgRkFJTFxuIik7Ci0gICAgICAgICAgICAgICAgZGNjX3JldHVy
bl90ZXh0ID0gVVMiUmVqZWN0ZWQgYnkgRENDIjsKLSAgICAgICAgICAgICAgICBkY2NfcmVzdWx0
ID0gVVMiUiI7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gRkFJTDsKLSAgICAgICAgICAgICAg
ICBpZihzZW5kZXJfaG9zdF9uYW1lKQotICAgICAgICAgICAgICAgICAgbG9nX3dyaXRlKDAsIExP
R19NQUlOLCAiSD0lcyBbJXNdIEY9PCVzPjogcmVqZWN0ZWQgYnkgRENDIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VuZGVyX2hvc3RfbmFtZSwgc2VuZGVyX2hvc3RfYWRkcmVzcywg
c2VuZGVyX2FkZHJlc3MpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
IGxvZ193cml0ZSgwLCBMT0dfTUFJTiwgIkg9WyVzXSBGPTwlcz46IHJlamVjdGVkIGJ5IERDQyIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlcl9ob3N0X2FkZHJlc3MsIHNlbmRl
cl9hZGRyZXNzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAn
Uyc6Ci0gICAgICAgICAgICAgICAgREVCVUcoRF9hY2wpCi0gICAgICAgICAgICAgICAgICBkZWJ1
Z19wcmludGYoIkRDQzogT3ZlcmFsbCByZXN1bHQgID0gU1x0cmV0dXJuaW5nIE9LXG4iKTsKLSAg
ICAgICAgICAgICAgICBkY2NfcmV0dXJuX3RleHQgPSBVUyJOb3QgYWxsIHJlY2lwaWVudHMgYWNj
ZXB0ZWQgYnkgRENDIjsKLSAgICAgICAgICAgICAgICAvKiBTaW5jZSB3ZSdyZSBpbiBhbiBBQ0wg
d2Ugd2FudCBhIGdsb2JhbCByZXN1bHQKLSAgICAgICAgICAgICAgICAgKiBzbyB3ZSBhY2NlcHQg
Zm9yIGFsbCAqLwotICAgICAgICAgICAgICAgIGRjY19yZXN1bHQgPSBVUyJBIjsKLSAgICAgICAg
ICAgICAgICByZXR2YWwgPSBPSzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSAnRyc6Ci0gICAgICAgICAgICAgICAgREVCVUcoRF9hY2wpCi0gICAgICAgICAgICAg
ICAgICBkZWJ1Z19wcmludGYoIkRDQzogT3ZlcmFsbCByZXN1bHQgID0gR1x0cmV0dXJuaW5nIEZB
SUxcbiIpOwotICAgICAgICAgICAgICAgIGRjY19yZXR1cm5fdGV4dCA9IFVTIkdyZXlsaXN0ZWQg
YnkgRENDIjsKLSAgICAgICAgICAgICAgICBkY2NfcmVzdWx0ID0gVVMiRyI7Ci0gICAgICAgICAg
ICAgICAgcmV0dmFsID0gRkFJTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSAnVCc6Ci0gICAgICAgICAgICAgICAgREVCVUcoRF9hY2wpCi0gICAgICAgICAgICAg
ICAgICBkZWJ1Z19wcmludGYoIkRDQzogT3ZlcmFsbCByZXN1bHQgPSBUXHRyZXR1cm5pbmcgREVG
RVJcbiIpOwotICAgICAgICAgICAgICAgIGRjY19yZXR1cm5fdGV4dCA9IFVTIlRlbXBvcmFyeSBl
cnJvciB3aXRoIERDQyI7Ci0gICAgICAgICAgICAgICAgZGNjX3Jlc3VsdCA9IFVTIlQiOwotICAg
ICAgICAgICAgICAgIHJldHZhbCA9IERFRkVSOwotICAgICAgICAgICAgICAgIGxvZ193cml0ZSgw
LExPR19NQUlOLCJUZW1wb3JhcnkgZXJyb3Igd2l0aCBEQ0M6ICVzXG4iLCBiaWdfYnVmZmVyKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBERUJVRyhEX2FjbCkKLSAgICAgICAgICAgICAgICAgIGRlYnVnX3ByaW50ZigiREND
OiBPdmVyYWxsIHJlc3VsdCA9IHNvbWV0aGluZyBlbHNlXHRyZXR1cm5pbmcgREVGRVJcbiIpOwot
CQlkY2NfcmV0dXJuX3RleHQgPSBVUyJVbmtub3duIERDQyByZXNwb25zZSI7Ci0gICAgICAgICAg
ICAgICAgZGNjX3Jlc3VsdCA9IFVTIlQiOwotICAgICAgICAgICAgICAgIHJldHZhbCA9IERFRkVS
OwotICAgICAgICAgICAgICAgIGxvZ193cml0ZSgwLExPR19NQUlOLCJVbmtub3duIERDQyByZXNw
b25zZTogJXNcbiIsIGJpZ19idWZmZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIFdl
J3JlIG9uIHRoZSBmaXJzdCBsaW5lIGJ1dCBub3Qgb24gdGhlIGZpcnN0IGNoYXJhY3RlciwKLSAg
ICAgICAgICAgICAqIHRoZXJlIG11c3QgYmUgc29tZXRoaW5nIHdyb25nLiAqLwotICAgICAgICAg
ICAgREVCVUcoRF9hY2wpIGRlYnVnX3ByaW50ZigiRENDOiBMaW5lID0gJWQgYnV0IGJ1Zm9mZnNl
dCA9ICVkICE9IDAiCi0JCSIgIGNoYXJhY3RlciBpcyAlYyAtIFRoaXMgaXMgd3JvbmchXG4iLCBs
aW5lLCBidWZvZmZzZXQsIGJpZ19idWZmZXJbYnVmb2Zmc2V0XSk7Ci0gICAgICAgICAgICBsb2df
d3JpdGUoMCxMT0dfTUFJTiwiV3JvbmcgaGVhZGVyIGZyb20gRENDLCBvdXRwdXQgaXMgJXNcbiIs
IGJpZ19idWZmZXIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKGxp
bmUgPT0gMikgewotICAgICAgICAgIC8qIE9uIHRoZSBzZWNvbmQgbGluZSB3ZSBnZXQgYSBsaXN0
IG9mCi0gICAgICAgICAgICogYW5zd2VycyBmb3IgZWFjaCByZWNpcGllbnQuIFdlIGRvbid0IGNh
cmUgYWJvdXQKLSAgICAgICAgICAgKiBpdCBiZWNhdXNlIHdlJ3JlIGluIGFuIGFjbCBhbmQgdGFr
ZSB0aGUKLSAgICAgICAgICAgKiBnbG9iYWwgcmVzdWx0LiAqLwotICAgICAgICB9CisgIC8qIG1h
a2UgdGhlIGFuc3dlciAwLXRlcm1pbmF0ZWQuIG9ubHkgbmVlZGVkIGZvciBkZWJ1Z19wcmludGYg
Ki8KKyAgREVCVUcoRF9hY2wpCisgICAgZGVidWdfcHJpbnRmKCJEQ0M6IExlbmd0aCBvZiB0aGUg
b3V0cHV0IGJ1ZmZlciBpczogJWRcbkRDQzogT3V0cHV0IGJ1ZmZlciBpczpcbiIKKwkJICJEQ0M6
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4lLipzXG4iCisJCSAiRENDOiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiwgZGNjX3Jlc3BsZW4sIGRjY19y
ZXNwbGVuLCBiaWdfYnVmZmVyKTsKKworICAvKiBOb3cgbGV0J3MgcmVhZCBlYWNoIGNoYXJhY3Rl
ciBhbmQgc2VlIHdoYXQgd2UndmUgZ290ICovCisgIGZvcihidWZvZmZzZXQgPSAwOyBidWZvZmZz
ZXQgPCBkY2NfcmVzcGxlbiAmJiBsaW5lIDw9IDI7IGJ1Zm9mZnNldCsrKQorICAgIHsKKyAgICAv
KiBGaXJzdCBjaGVjayBpZiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGxpbmUgYW5kCisgICAg
dGhlbiBpbmNyZW1lbnQgdGhlIGxpbmUgY291bnRlciAqLworICAgIGlmKGJpZ19idWZmZXJbYnVm
b2Zmc2V0XSA9PSAnXG4nKQorICAgICAgbGluZSsrOworICAgIGVsc2UKKyAgICAgIHsKKyAgICAg
IC8qIFRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0IGxpbmUgaXMgdGhlIG92ZXJhbGwg
cmVzcG9uc2UuIElmCisgICAgICB0aGVyZSdzIGFub3RoZXIgY2hhcmFjdGVyIG9uIHRoYXQgbGlu
ZSBpdCBpcyBub3QgY29ycmVjdC4gKi8KKyAgICAgIGlmKGxpbmUgPT0gMSkKKwl7CisJaWYoYnVm
b2Zmc2V0ID09IDApCisJICB7CisJICAvKiBOb3cgZ2V0IHRoZSB2YWx1ZSBhbmQgc2V0IHRoZSBy
ZXR1cm4gdmFsdWUgYWNjb3JkaW5nbHkgKi8KKwkgIHN3aXRjaCAoYmlnX2J1ZmZlcltidWZvZmZz
ZXRdKQorCSAgICB7CisJICAgIGNhc2UgJ0EnOgorCSAgICAgIERFQlVHKERfYWNsKQorCQlkZWJ1
Z19wcmludGYoIkRDQzogT3ZlcmFsbCByZXN1bHQgPSBBXHRyZXR1cm5pbmcgT0tcbiIpOworCSAg
ICAgIGRjY19yZXR1cm5fdGV4dCA9IFVTIk1haWwgYWNjZXB0ZWQgYnkgRENDIjsKKwkgICAgICBk
Y2NfcmVzdWx0ID0gVVMiQSI7CisJICAgICAgcmV0dmFsID0gT0s7CisJICAgICAgYnJlYWs7CisJ
ICAgIGNhc2UgJ1InOgorCSAgICAgIERFQlVHKERfYWNsKQorCQlkZWJ1Z19wcmludGYoIkRDQzog
T3ZlcmFsbCByZXN1bHQgPSBSXHRyZXR1cm5pbmcgRkFJTFxuIik7CisJICAgICAgZGNjX3JldHVy
bl90ZXh0ID0gVVMiUmVqZWN0ZWQgYnkgRENDIjsKKwkgICAgICBkY2NfcmVzdWx0ID0gVVMiUiI7
CisJICAgICAgcmV0dmFsID0gRkFJTDsKKwkgICAgICBpZihzZW5kZXJfaG9zdF9uYW1lKQorCQls
b2dfd3JpdGUoMCwgTE9HX01BSU4sICJIPSVzIFslc10gRj08JXM+OiByZWplY3RlZCBieSBEQ0Mi
LAorCQkJICAgc2VuZGVyX2hvc3RfbmFtZSwgc2VuZGVyX2hvc3RfYWRkcmVzcywgc2VuZGVyX2Fk
ZHJlc3MpOworCSAgICAgIGVsc2UKKwkJbG9nX3dyaXRlKDAsIExPR19NQUlOLCAiSD1bJXNdIEY9
PCVzPjogcmVqZWN0ZWQgYnkgRENDIiwKKwkJCSAgIHNlbmRlcl9ob3N0X2FkZHJlc3MsIHNlbmRl
cl9hZGRyZXNzKTsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSAnUyc6CisJICAgICAgREVCVUco
RF9hY2wpCisJCWRlYnVnX3ByaW50ZigiRENDOiBPdmVyYWxsIHJlc3VsdCAgPSBTXHRyZXR1cm5p
bmcgT0tcbiIpOworCSAgICAgIGRjY19yZXR1cm5fdGV4dCA9IFVTIk5vdCBhbGwgcmVjaXBpZW50
cyBhY2NlcHRlZCBieSBEQ0MiOworCSAgICAgIC8qIFNpbmNlIHdlJ3JlIGluIGFuIEFDTCB3ZSB3
YW50IGEgZ2xvYmFsIHJlc3VsdCBzbyB3ZSBhY2NlcHQgZm9yIGFsbCAqLworCSAgICAgIGRjY19y
ZXN1bHQgPSBVUyJBIjsKKwkgICAgICByZXR2YWwgPSBPSzsKKwkgICAgICBicmVhazsKKwkgICAg
Y2FzZSAnRyc6CisJICAgICAgREVCVUcoRF9hY2wpCisJCWRlYnVnX3ByaW50ZigiRENDOiBPdmVy
YWxsIHJlc3VsdCAgPSBHXHRyZXR1cm5pbmcgRkFJTFxuIik7CisJICAgICAgZGNjX3JldHVybl90
ZXh0ID0gVVMiR3JleWxpc3RlZCBieSBEQ0MiOworCSAgICAgIGRjY19yZXN1bHQgPSBVUyJHIjsK
KwkgICAgICByZXR2YWwgPSBGQUlMOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlICdUJzoKKwkg
ICAgICBERUJVRyhEX2FjbCkKKwkJZGVidWdfcHJpbnRmKCJEQ0M6IE92ZXJhbGwgcmVzdWx0ID0g
VFx0cmV0dXJuaW5nIERFRkVSXG4iKTsKKwkgICAgICBkY2NfcmV0dXJuX3RleHQgPSBVUyJUZW1w
b3JhcnkgZXJyb3Igd2l0aCBEQ0MiOworCSAgICAgIGRjY19yZXN1bHQgPSBVUyJUIjsKKwkgICAg
ICByZXR2YWwgPSBERUZFUjsKKwkgICAgICBsb2dfd3JpdGUoMCxMT0dfTUFJTiwiVGVtcG9yYXJ5
IGVycm9yIHdpdGggRENDOiAlc1xuIiwgYmlnX2J1ZmZlcik7CisJICAgICAgYnJlYWs7CisJICAg
IGRlZmF1bHQ6CisJICAgICAgREVCVUcoRF9hY2wpCisJCWRlYnVnX3ByaW50ZigiRENDOiBPdmVy
YWxsIHJlc3VsdCA9IHNvbWV0aGluZyBlbHNlXHRyZXR1cm5pbmcgREVGRVJcbiIpOworCSAgICAg
IGRjY19yZXR1cm5fdGV4dCA9IFVTIlVua25vd24gRENDIHJlc3BvbnNlIjsKKwkgICAgICBkY2Nf
cmVzdWx0ID0gVVMiVCI7CisJICAgICAgcmV0dmFsID0gREVGRVI7CisJICAgICAgbG9nX3dyaXRl
KDAsTE9HX01BSU4sIlVua25vd24gRENDIHJlc3BvbnNlOiAlc1xuIiwgYmlnX2J1ZmZlcik7CisJ
ICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisJZWxzZQorCSAgeworCSAgLyogV2UncmUgb24gdGhl
IGZpcnN0IGxpbmUgYnV0IG5vdCBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyLAorCSAgICogdGhlcmUg
bXVzdCBiZSBzb21ldGhpbmcgd3JvbmcuICovCisJICBERUJVRyhEX2FjbCkgZGVidWdfcHJpbnRm
KCJEQ0M6IExpbmUgPSAlZCBidXQgYnVmb2Zmc2V0ID0gJWQgIT0gMCIKKwkgICAgICAiICBjaGFy
YWN0ZXIgaXMgJWMgLSBUaGlzIGlzIHdyb25nIVxuIiwgbGluZSwgYnVmb2Zmc2V0LCBiaWdfYnVm
ZmVyW2J1Zm9mZnNldF0pOworCSAgbG9nX3dyaXRlKDAsTE9HX01BSU4sIldyb25nIGhlYWRlciBm
cm9tIERDQywgb3V0cHV0IGlzICVzXG4iLCBiaWdfYnVmZmVyKTsKKwkgIH0KKwl9CisgICAgICBl
bHNlIGlmKGxpbmUgPT0gMikKKwl7CisJLyogT24gdGhlIHNlY29uZCBsaW5lIHdlIGdldCBhIGxp
c3Qgb2YgYW5zd2VycyBmb3IgZWFjaCByZWNpcGllbnQuIFdlCisJZG9uJ3QgY2FyZSBhYm91dCBp
dCBiZWNhdXNlIHdlJ3JlIGluIGFuIGFjbCBhbmQgdGFrZSB0aGUgZ2xvYmFsIHJlc3VsdC4gKi8K
Kwl9CiAgICAgICB9CiAgICAgfQotICAgIGlmKGxpbmUgPiAyKSB7Ci0gICAgICAvKiBUaGUgdGhp
cmQgYW5kIGZvbGxvd2luZyBsaW5lcyBhcmUgdGhlIFgtRENDIGhlYWRlciwKLSAgICAgICAqIHNv
IHdlIHN0b3JlIGl0IGluIGRjY19oZWFkZXJfc3RyIHVwIHRvIG91ciBsaW1pdC4gKi8KLSAgICAg
IC8qIGNoZWNrIGlmIGJ1ZmZlciBjb250YWlucyB0aGUgZW5kIG9mIHRoZSBoZWFkZXIgLi4iXG5c
biIgYW5kIHRydW5jYXRlIGl0ICovCi0gICAgICBpZiAoKGJpZ19idWZmZXJbZGNjX3Jlc3BsZW4t
MV0gPT0gJ1xuJykgJiYKLSAgICAgICAgICAoYmlnX2J1ZmZlcltkY2NfcmVzcGxlbi0yXSA9PSAn
XG4nKSkKLSAgICAgICAgZGNjX3Jlc3BsZW4gLT0gMjsKLSAgICAgIGRjY19yZXNwbGVuIC09IGJ1
Zm9mZnNldDsKLSAgICAgIGlmIChkY2NfaGVhZGVyX3N0ci0+cHRyICsgZGNjX3Jlc3BsZW4gPiBE
Q0NfSEVBREVSX0xJTUlUKSB7Ci0gICAgICAgIGRjY19yZXNwbGVuID0gRENDX0hFQURFUl9MSU1J
VCAtIGRjY19oZWFkZXJfc3RyLT5wdHI7Ci0gICAgICAgIERFQlVHKERfYWNsKSBkZWJ1Z19wcmlu
dGYoIkRDQzogV2UgZ290IG1vcmUgb3V0cHV0IHRoYW4gd2UgY2FuIHN0b3JlIgotCSAgICAgICAg
ICAgICAgICAgICAiaW4gdGhlIFgtRENDIGhlYWRlci4gVHJ1bmNhdGluZyBhdCAxMjAgY2hhcmFj
dGVycy5cbiIpOworICBpZihsaW5lID4gMikKKyAgICB7CisgICAgLyogVGhlIHRoaXJkIGFuZCBm
b2xsb3dpbmcgbGluZXMgYXJlIHRoZSBYLURDQyBoZWFkZXIsIHNvIHdlIHN0b3JlIGl0IGluCisg
ICAgZGNjX2hlYWRlcl9zdHIgdXAgdG8gb3VyIGxpbWl0LiAqLworICAgIC8qIGNoZWNrIGlmIGJ1
ZmZlciBjb250YWlucyB0aGUgZW5kIG9mIHRoZSBoZWFkZXIgLi4iXG5cbiIgYW5kIHRydW5jYXRl
IGl0ICovCisgICAgaWYgKChiaWdfYnVmZmVyW2RjY19yZXNwbGVuLTFdID09ICdcbicpICYmCisJ
KGJpZ19idWZmZXJbZGNjX3Jlc3BsZW4tMl0gPT0gJ1xuJykpCisgICAgICBkY2NfcmVzcGxlbiAt
PSAyOworICAgIGRjY19yZXNwbGVuIC09IGJ1Zm9mZnNldDsKKyAgICBpZiAoZGNjX2hlYWRlcl9z
dHItPnB0ciArIGRjY19yZXNwbGVuID4gRENDX0hFQURFUl9MSU1JVCkKKyAgICAgIHsKKyAgICAg
IGRjY19yZXNwbGVuID0gRENDX0hFQURFUl9MSU1JVCAtIGRjY19oZWFkZXJfc3RyLT5wdHI7Cisg
ICAgICBERUJVRyhEX2FjbCkgZGVidWdfcHJpbnRmKCJEQ0M6IFdlIGdvdCBtb3JlIG91dHB1dCB0
aGFuIHdlIGNhbiBzdG9yZSIKKwkJCSAiaW4gdGhlIFgtRENDIGhlYWRlci4gVHJ1bmNhdGluZyBh
dCAxMjAgY2hhcmFjdGVycy5cbiIpOwogICAgICAgfQotICAgICAgZGNjX2hlYWRlcl9zdHIgPSBz
dHJpbmdfY2F0bihkY2NfaGVhZGVyX3N0ciwgJmJpZ19idWZmZXJbYnVmb2Zmc2V0XSwgZGNjX3Jl
c3BsZW4pOworICAgIGRjY19oZWFkZXJfc3RyID0gc3RyaW5nX2NhdG4oZGNjX2hlYWRlcl9zdHIs
ICZiaWdfYnVmZmVyW2J1Zm9mZnNldF0sIGRjY19yZXNwbGVuKTsKICAgICB9CiAgIH0KLSAgLyog
V2UgaGF2ZSByZWFkIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc29ja2V0LiBtYWtlIHN1cmUgdGhlIGhl
YWRlciBlbmRzIHdpdGggIlxuIiAqLwotICBkY2NfaGVhZGVyX3N0ciA9IHN0cmluZ19jYXRuKGRj
Y19oZWFkZXJfc3RyLCBVUyJcbiIsIDEpOworLyogV2UgaGF2ZSByZWFkIGV2ZXJ5dGhpbmcgZnJv
bSB0aGUgc29ja2V0LiBtYWtlIHN1cmUgdGhlIGhlYWRlciBlbmRzIHdpdGggIlxuIiAqLworZGNj
X2hlYWRlcl9zdHIgPSBzdHJpbmdfY2F0bihkY2NfaGVhZGVyX3N0ciwgVVMiXG4iLCAxKTsKIAot
ICAodm9pZCkgc3RyaW5nX2Zyb21fZ3N0cmluZyhkY2NfaGVhZGVyX3N0cik7Ci0gIC8qIE5vdyBs
ZXQncyBzdW0gdXAgd2hhdCB3ZSd2ZSBnb3QuICovCi0gIERFQlVHKERfYWNsKQotICAgIGRlYnVn
X3ByaW50ZigiXG5EQ0M6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5EQ0M6IE92ZXJhbGwg
cmVzdWx0ID0gJWRcbiIKLSAgICAgICAgICAgICAgICAgIkRDQzogWC1EQ0MgaGVhZGVyOiAlc1Jl
dHVybiBtZXNzYWdlOiAlc1xuRENDOiBkY2NfcmVzdWx0OiAlc1xuIiwKLSAgICAgICAgICAgICAg
ICAgICByZXR2YWwsIGRjY19oZWFkZXJfc3RyLT5zLCBkY2NfcmV0dXJuX3RleHQsIGRjY19yZXN1
bHQpOwotCi0gIC8qIFdlIG9ubHkgYWRkIHRoZSBYLURDQyBoZWFkZXIgaWYgaXQgc3RhcnRzIHdp
dGggWC1EQ0MgKi8KLSAgaWYoIShVc3RybmNtcChkY2NfaGVhZGVyX3N0ci0+cywgIlgtRENDIiwg
NSkpKSB7Ci0gICAgZGNjX2hlYWRlciA9IGRjY19oZWFkZXJfc3RyLT5zOwotICAgIGlmKGRjY19k
aXJlY3RfYWRkX2hlYWRlcikgewotICAgICAgaGVhZGVyX2FkZCgnICcgLCAiJXMiLCBkY2NfaGVh
ZGVyX3N0ci0+cyk7Ci0gIC8qIHNpbmNlIHRoZSBNSU1FIEFDTCBhbHJlYWR5IHdyaXRlcyB0aGUg
LmVtbCBmaWxlIHRvIGRpc2sgd2l0aG91dCBEQ0MgSGVhZGVyIHdlJ3ZlIHRvIGVyYXNlIGl0ICov
Ci0gICAgICB1bnNwb29sX21ib3goKTsKKyh2b2lkKSBzdHJpbmdfZnJvbV9nc3RyaW5nKGRjY19o
ZWFkZXJfc3RyKTsKKy8qIE5vdyBsZXQncyBzdW0gdXAgd2hhdCB3ZSd2ZSBnb3QuICovCitERUJV
RyhEX2FjbCkKKyAgZGVidWdfcHJpbnRmKCJcbkRDQzogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS1cbkRDQzogT3ZlcmFsbCByZXN1bHQgPSAlZFxuIgorCSAgICAgICAiRENDOiBYLURDQyBoZWFk
ZXI6ICVzUmV0dXJuIG1lc3NhZ2U6ICVzXG5EQ0M6IGRjY19yZXN1bHQ6ICVzXG4iLAorCQkgcmV0
dmFsLCBkY2NfaGVhZGVyX3N0ci0+cywgZGNjX3JldHVybl90ZXh0LCBkY2NfcmVzdWx0KTsKKwor
LyogV2Ugb25seSBhZGQgdGhlIFgtRENDIGhlYWRlciBpZiBpdCBzdGFydHMgd2l0aCBYLURDQyAq
LworaWYoIShVc3RybmNtcChkY2NfaGVhZGVyX3N0ci0+cywgIlgtRENDIiwgNSkpKQorICB7Cisg
IGRjY19oZWFkZXIgPSBkY2NfaGVhZGVyX3N0ci0+czsKKyAgaWYoZGNjX2RpcmVjdF9hZGRfaGVh
ZGVyKQorICAgIHsKKyAgICBoZWFkZXJfYWRkKCcgJyAsICIlcyIsIGRjY19oZWFkZXJfc3RyLT5z
KTsKKy8qIHNpbmNlIHRoZSBNSU1FIEFDTCBhbHJlYWR5IHdyaXRlcyB0aGUgLmVtbCBmaWxlIHRv
IGRpc2sgd2l0aG91dCBEQ0MgSGVhZGVyIHdlJ3ZlIHRvIGVyYXNlIGl0ICovCisgICAgdW5zcG9v
bF9tYm94KCk7CiAgICAgfQogICB9Ci0gIGVsc2UgewotICAgIERFQlVHKERfYWNsKQotICAgICAg
ZGVidWdfcHJpbnRmKCJEQ0M6IFdyb25nIGZvcm1hdCBvZiB0aGUgWC1EQ0MgaGVhZGVyOiAlLipz
XG4iLCBkY2NfaGVhZGVyX3N0ci0+cHRyLCBkY2NfaGVhZGVyX3N0ci0+cyk7Ci0gIH0KK2Vsc2UK
KyAgREVCVUcoRF9hY2wpCisgICAgZGVidWdfcHJpbnRmKCJEQ0M6IFdyb25nIGZvcm1hdCBvZiB0
aGUgWC1EQ0MgaGVhZGVyOiAlLipzXG4iLCBkY2NfaGVhZGVyX3N0ci0+cHRyLCBkY2NfaGVhZGVy
X3N0ci0+cyk7CiAKLSAgLyogY2hlY2sgaWYgd2Ugc2hvdWxkIGFkZCBhZGRpdGlvbmFsIGhlYWRl
cnMgcGFzc2VkIGluIGFjbF9tX2RjY19hZGRfaGVhZGVyICovCi0gIGlmKGRjY19kaXJlY3RfYWRk
X2hlYWRlcikgewotICAgIGlmICgoKHh0cmFfaGRycyA9IGV4cGFuZF9zdHJpbmcoVVMiJGFjbF9t
X2RjY19hZGRfaGVhZGVyIikpICE9IE5VTEwpICYmICh4dHJhX2hkcnNbMF0gIT0gJ1wwJykpIHsK
LSAgICAgIGRjY194dHJhX2hkcnMgPSBzdHJpbmdfY2F0KE5VTEwsIHh0cmFfaGRycyk7Ci0gICAg
ICBpZiAoZGNjX3h0cmFfaGRycy0+c1tkY2NfeHRyYV9oZHJzLT5wdHIgLSAxXSAhPSAnXG4nKQot
ICAgICAgICBkY2NfeHRyYV9oZHJzID0gc3RyaW5nX2NhdG4oZGNjX3h0cmFfaGRycywgVVMiXG4i
LCAxKTsKLSAgICAgIGhlYWRlcl9hZGQoJyAnLCAiJXMiLCBzdHJpbmdfZnJvbV9nc3RyaW5nKGRj
Y194dHJhX2hkcnMpKTsKLSAgICAgIERFQlVHKERfYWNsKQotICAgICAgICBkZWJ1Z19wcmludGYo
IkRDQzogYWRkaW5nIGFkZGl0aW9uYWwgaGVhZGVycyBpbiAkYWNsX21fZGNjX2FkZF9oZWFkZXI6
ICUuKnMiLCBkY2NfeHRyYV9oZHJzLT5wdHIsIGRjY194dHJhX2hkcnMtPnMpOworLyogY2hlY2sg
aWYgd2Ugc2hvdWxkIGFkZCBhZGRpdGlvbmFsIGhlYWRlcnMgcGFzc2VkIGluIGFjbF9tX2RjY19h
ZGRfaGVhZGVyICovCitpZiAoZGNjX2RpcmVjdF9hZGRfaGVhZGVyKQorICB7CisgIGlmICgoKHh0
cmFfaGRycyA9IGV4cGFuZF9zdHJpbmcoVVMiJGFjbF9tX2RjY19hZGRfaGVhZGVyIikpICE9IE5V
TEwpICYmICh4dHJhX2hkcnNbMF0gIT0gJ1wwJykpCisgICAgeworICAgIGRjY194dHJhX2hkcnMg
PSBzdHJpbmdfY2F0KE5VTEwsIHh0cmFfaGRycyk7CisgICAgaWYgKGRjY194dHJhX2hkcnMtPnNb
ZGNjX3h0cmFfaGRycy0+cHRyIC0gMV0gIT0gJ1xuJykKKyAgICAgIGRjY194dHJhX2hkcnMgPSBz
dHJpbmdfY2F0bihkY2NfeHRyYV9oZHJzLCBVUyJcbiIsIDEpOworICAgIGhlYWRlcl9hZGQoJyAn
LCAiJXMiLCBzdHJpbmdfZnJvbV9nc3RyaW5nKGRjY194dHJhX2hkcnMpKTsKKyAgICBERUJVRyhE
X2FjbCkKKyAgICAgIGRlYnVnX3ByaW50ZigiRENDOiBhZGRpbmcgYWRkaXRpb25hbCBoZWFkZXJz
IGluICRhY2xfbV9kY2NfYWRkX2hlYWRlcjogJS4qcyIsIGRjY194dHJhX2hkcnMtPnB0ciwgZGNj
X3h0cmFfaGRycy0+cyk7CiAgICAgfQogICB9CiAKLSAgZGNjX29rID0gMTsKLSAgLyogTm93IHJl
dHVybiB0byBleGltIG1haW4gcHJvY2VzcyAqLwotICBERUJVRyhEX2FjbCkKLSAgICBkZWJ1Z19w
cmludGYoIkRDQzogQmVmb3JlIHJldHVybmluZyB0byBleGltIG1haW4gcHJvY2VzczpcbkRDQzog
cmV0dXJuX3RleHQgPSAlcyAtIHJldHZhbCA9ICVkXG4iCi0gICAgICAgICAgICAgICAgICJEQ0M6
IGRjY19yZXN1bHQgPSAlc1xuIiwgZGNjX3JldHVybl90ZXh0LCByZXR2YWwsIGRjY19yZXN1bHQp
OwotCi0gICh2b2lkKWZjbG9zZShkYXRhX2ZpbGUpOwotICBkY2NfcmMgPSByZXR2YWw7Ci0gIHJl
dHVybiBkY2NfcmM7CitkY2Nfb2sgPSAxOworLyogTm93IHJldHVybiB0byBleGltIG1haW4gcHJv
Y2VzcyAqLworREVCVUcoRF9hY2wpCisgIGRlYnVnX3ByaW50ZigiRENDOiBCZWZvcmUgcmV0dXJu
aW5nIHRvIGV4aW0gbWFpbiBwcm9jZXNzOlxuRENDOiByZXR1cm5fdGV4dCA9ICVzIC0gcmV0dmFs
ID0gJWRcbiIKKwkgICAgICAgIkRDQzogZGNjX3Jlc3VsdCA9ICVzXG4iLCBkY2NfcmV0dXJuX3Rl
eHQsIHJldHZhbCwgZGNjX3Jlc3VsdCk7CisKKyh2b2lkKWZjbG9zZShkYXRhX2ZpbGUpOworZGNj
X3JjID0gcmV0dmFsOworcmV0dXJuIGRjY19yYzsKIH0KIAogI2VuZGlmCmRpZmYgLXVyIGV4aW0u
b3JpZy9zcmMvZGVidWcuYyBleGltL3NyYy9kZWJ1Zy5jCi0tLSBleGltLm9yaWcvc3JjL2RlYnVn
LmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2RlYnVn
LmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsNiArMiw3IEBACiAq
ICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJp
Z2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDE1IC0gMjAyMiAqLwogLyogQ29weXJpZ2h0
IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwogLyogU2VlIHRoZSBm
aWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIApA
QCAtMTIsNiArMTMsOCBAQAogc3RhdGljIHVzY2hhciAqZGVidWdfcHRyID0gZGVidWdfYnVmZmVy
Owogc3RhdGljIGludCAgICAgZGVidWdfcHJlZml4X2xlbmd0aCA9IDA7CiAKK3N0YXRpYyB1bnNp
Z25lZCBwcmV0cmlnZ2VyX3dyaXRlb2ZmOworc3RhdGljIHVuc2lnbmVkIHByZXRyaWdnZXJfcmVh
ZG9mZjsKIAogCiBjb25zdCB1c2NoYXIgKiByY19uYW1lc1tdID0gewkJLyogTW9zdGx5IGZvciBk
ZWJ1ZyBvdXRwdXQgKi8KQEAgLTUyLDggKzU1LDggQEAKIG1vdmVzIGRvd24gdGhlIHBhZ2UuIFRo
aXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IGluIGRlYnVnZ2luZyBjaXJjdW1zdGFuY2VzLiBUaGUK
IG91dHB1dCBpcyBkb25lIHZpYSBkZWJ1Z19wcmludGYoKS4gKi8KIAotI2RlZmluZSB0cmVlX3By
aW50bGluZXNpemUgMTMyICAgLyogbGluZSBzaXplIGZvciBwcmludGluZyAqLwotc3RhdGljIHVz
Y2hhciB0cmVlX3ByaW50bGluZVt0cmVlX3ByaW50bGluZXNpemVdOworI2RlZmluZSBUUkVFX1BS
SU5UTElORVNJWkUgMTMyICAgLyogbGluZSBzaXplIGZvciBwcmludGluZyAqLworc3RhdGljIHVz
Y2hhciB0cmVlX3ByaW50bGluZVtUUkVFX1BSSU5UTElORVNJWkVdOwogCiAvKiBJbnRlcm5hbCBy
ZWN1cnNpdmUgc3Vicm91dGluZS4KIApAQCAtNjYsMTIgKzY5LDEyIEBACiAqLwogCiBzdGF0aWMg
dm9pZAotdHJlZV9wcmludHN1Yih0cmVlX25vZGUgKnAsIGludCBwb3MsIGludCBiYXJzd2l0Y2gp
Cit0cmVlX3ByaW50c3ViKHRyZWVfbm9kZSAqIHAsIGludCBwb3MsIGludCBiYXJzd2l0Y2gpCiB7
CiBpZiAocC0+cmlnaHQpIHRyZWVfcHJpbnRzdWIocC0+cmlnaHQsIHBvcysyLCAxKTsKLWZvciAo
aW50IGkgPSAwOyBpIDw9IHBvcy0xOyBpKyspIGRlYnVnX3ByaW50ZigiJWMiLCB0cmVlX3ByaW50
bGluZVtpXSk7Ci1kZWJ1Z19wcmludGYoIi0tPiVzIFslZF1cbiIsIHAtPm5hbWUsIHAtPmJhbGFu
Y2UpOwotdHJlZV9wcmludGxpbmVbcG9zXSA9IGJhcnN3aXRjaD8gJ3wnIDogJyAnOworZm9yIChp
bnQgaSA9IDA7IGkgPD0gcG9zLTE7IGkrKykgZGVidWdfcHJpbnRmX2luZGVudCgiICVjIiwgdHJl
ZV9wcmludGxpbmVbaV0pOworZGVidWdfcHJpbnRmX2luZGVudCgiIC0tPiVzIFslZF1cbiIsIHAt
Pm5hbWUsIHAtPmJhbGFuY2UpOwordHJlZV9wcmludGxpbmVbcG9zXSA9IGJhcnN3aXRjaCA/ICd8
JyA6ICcgJzsKIGlmIChwLT5sZWZ0KQogICB7CiAgIHRyZWVfcHJpbnRsaW5lW3BvcysyXSA9ICd8
JzsKQEAgLTgyLDExICs4NSwxMiBAQAogLyogVGhlIGV4dGVybmFsIGZ1bmN0aW9uLCB3aXRoIGp1
c3QgYSB0cmVlIG5vZGUgYXJndW1lbnQuICovCiAKIHZvaWQKLWRlYnVnX3ByaW50X3RyZWUodHJl
ZV9ub2RlICpwKQorZGVidWdfcHJpbnRfdHJlZShjb25zdCBjaGFyICogdGl0bGUsIHRyZWVfbm9k
ZSAqIHApCiB7Ci1mb3IgKGludCBpID0gMDsgaSA8IHRyZWVfcHJpbnRsaW5lc2l6ZTsgaSsrKSB0
cmVlX3ByaW50bGluZVtpXSA9ICcgJzsKLWlmICghcCkgZGVidWdfcHJpbnRmKCJFbXB0eSBUcmVl
XG4iKTsgZWxzZSB0cmVlX3ByaW50c3ViKHAsIDAsIDApOwotZGVidWdfcHJpbnRmKCItLS0tIEVu
ZCBvZiB0cmVlIC0tLS1cbiIpOworZGVidWdfcHJpbnRmX2luZGVudCgiJXM6XG4iLCB0aXRsZSk7
Citmb3IgKGludCBpID0gMDsgaSA8IFRSRUVfUFJJTlRMSU5FU0laRTsgaSsrKSB0cmVlX3ByaW50
bGluZVtpXSA9ICcgJzsKK2lmICghcCkgZGVidWdfcHJpbnRmX2luZGVudCgiIEVtcHR5IFRyZWVc
biIpOyBlbHNlIHRyZWVfcHJpbnRzdWIocCwgMCwgMCk7CitkZWJ1Z19wcmludGZfaW5kZW50KCIt
LS0tIEVuZCBvZiB0cmVlIC0tLS1cbiIpOwogfQogCiAKQEAgLTMxNiw4ICszMjAsNDEgQEAKICAg
ICAgIH0KICAgICB9CiAKLSAgZnByaW50ZihkZWJ1Z19maWxlLCAiJXMiLCBDUyBkZWJ1Z19idWZm
ZXIpOwotICBmZmx1c2goZGVidWdfZmlsZSk7CisgIGlmIChkZWJ1Z19wcmV0cmlnZ2VyX2J1ZikK
KyAgICB7CisgICAgaW50IG5lZWRlZCA9IFVzdHJsZW4oZGVidWdfYnVmZmVyKSsxLCBhdmFpbDsK
KyAgICBjaGFyIGM7CisKKyAgICBpZiAobmVlZGVkID4gZGVidWdfcHJldHJpZ2dlcl9ic2l6ZSkK
KyAgICAgIG5lZWRlZCA9IGRlYnVnX3ByZXRyaWdnZXJfYnNpemU7CisgICAgaWYgKChhdmFpbCA9
IHByZXRyaWdnZXJfcmVhZG9mZiAtIHByZXRyaWdnZXJfd3JpdGVvZmYpIDw9IDApCisgICAgICBh
dmFpbCArPSBkZWJ1Z19wcmV0cmlnZ2VyX2JzaXplOworCisgICAgLyogV2UgaGF2ZSBhIHByZXRy
aWdnZXIgc2V0IHVwLCB0cmlnZ2VyIG5vdCB5ZXQgaGl0LiBDb3B5IHRoZSBsaW5lKHMpIHRvIHRo
ZQorICAgIHByZXRyaWcgYnVmZmVyLCBkcm9wcGluZyBlYXJsaWVyIGxpbmVzIGlmIG5lZWRlZCBi
dXQgdHJ1bmNhdGluZyB0aGlzIGxpbmUgaWYKKyAgICB0aGUgcGJ1ZiBpcyBtYXhlZCBvdXQuICBJ
biB0aGUgUFRCIHRoZSBsaW5lcyBhcmUgTk9UIG51bC10ZXJtaW5hdGVkLiAqLworCisgICAgd2hp
bGUgKGF2YWlsIDwgbmVlZGVkKQorICAgICAgZG8KKwl7CisJYXZhaWwrKzsKKyAgICAgICAgYyA9
IGRlYnVnX3ByZXRyaWdnZXJfYnVmW3ByZXRyaWdnZXJfcmVhZG9mZl07CisJaWYgKCsrcHJldHJp
Z2dlcl9yZWFkb2ZmID49IGRlYnVnX3ByZXRyaWdnZXJfYnNpemUpIHByZXRyaWdnZXJfcmVhZG9m
ZiA9IDA7CisJfQorICAgICAgd2hpbGUgKGMgJiYgYyAhPSAnXG4nICYmIHByZXRyaWdnZXJfcmVh
ZG9mZiAhPSBwcmV0cmlnZ2VyX3dyaXRlb2ZmKTsKKworICAgIG5lZWRlZC0tOworICAgIGZvciAo
aW50IGkgPSAwOyBuZWVkZWQ7IGkrKywgbmVlZGVkLS0pCisgICAgICB7CisgICAgICBkZWJ1Z19w
cmV0cmlnZ2VyX2J1ZltwcmV0cmlnZ2VyX3dyaXRlb2ZmXSA9IGRlYnVnX2J1ZmZlcltpXTsKKyAg
ICAgIGlmICgrK3ByZXRyaWdnZXJfd3JpdGVvZmYgPj0gZGVidWdfcHJldHJpZ2dlcl9ic2l6ZSkg
cHJldHJpZ2dlcl93cml0ZW9mZiA9IDA7CisgICAgICB9CisgICAgfQorICBlbHNlCisgICAgewor
ICAgIGZwcmludGYoZGVidWdfZmlsZSwgIiVzIiwgQ1MgZGVidWdfYnVmZmVyKTsKKyAgICBmZmx1
c2goZGVidWdfZmlsZSk7CisgICAgfQogICBkZWJ1Z19wdHIgPSBkZWJ1Z19idWZmZXI7CiAgIGRl
YnVnX3ByZWZpeF9sZW5ndGggPSAwOwogICB9CkBAIC0zNTEsNyArMzg4LDcgQEAKIAlnID0gc3Ry
aW5nX2ZtdF9hcHBlbmQoZywgIiBsY2wgWyVzXToldSIsCiAJICBpbmV0X250b2Eoc2lucC0+c2lu
X2FkZHIpLCBudG9ocyhzaW5wLT5zaW5fcG9ydCkpOwogCWFsZW4gPSBzaXplb2YoKnNpbnApOwot
CWlmIChnZXRwZWVybmFtZShmZCwgc2lucCwgJmFsZW4pID09IDApCisJaWYgKGdldHBlZXJuYW1l
KGZkLCAoc3RydWN0IHNvY2thZGRyICopc2lucCwgJmFsZW4pID09IDApCiAJICBnID0gc3RyaW5n
X2ZtdF9hcHBlbmQoZywgIiBybXQgWyVzXToldSIsCiAJICAgIGluZXRfbnRvYShzaW5wLT5zaW5f
YWRkciksIG50b2hzKHNpbnAtPnNpbl9wb3J0KSk7CiAJYnJlYWs7CkBAIC0zNjMsNyArNDAwLDcg
QEAKIAkgIGluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjZwLT5zaW42X2FkZHIsIENTIGJ1Ziwgc2l6
ZW9mKGJ1ZikpLAogCSAgbnRvaHMoc2luNnAtPnNpbjZfcG9ydCkpOwogCWFsZW4gPSBzaXplb2Yo
KnNpbjZwKTsKLQlpZiAoZ2V0cGVlcm5hbWUoZmQsIHNpbjZwLCAmYWxlbikgPT0gMCkKKwlpZiAo
Z2V0cGVlcm5hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilzaW42cCwgJmFsZW4pID09IDApCiAJ
ICBnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywgIiBybXQgWyVzXToldSIsCiAJICAgIGluZXRfbnRv
cChBRl9JTkVUNiwgJnNpbjZwLT5zaW42X2FkZHIsIENTIGJ1Ziwgc2l6ZW9mKGJ1ZikpLAogCSAg
ICBudG9ocyhzaW42cC0+c2luNl9wb3J0KSk7CkBAIC0zNzYsNyArNDEzLDcgQEAKICAgICAgICAg
ICAgIHN1bnAtPnN1bl9wYXRoWzBdID8gVVMiIiA6IFVTIkAiLAogICAgICAgICAgICAgc3VucC0+
c3VuX3BhdGhbMF0gPyBzdW5wLT5zdW5fcGF0aCA6IHN1bnAtPnN1bl9wYXRoKzEpOwogICAgICAg
ICBhbGVuID0gc2l6ZW9mKCpzdW5wKTsKLSAgICAgICAgaWYgKGdldHBlZXJuYW1lKGZkLCBzdW5w
LCAmYWxlbikgPT0gMCkKKyAgICAgICAgaWYgKGdldHBlZXJuYW1lKGZkLCAoc3RydWN0IHNvY2th
ZGRyICopc3VucCwgJmFsZW4pID09IDApCiAgICAgICAgICAgZyA9IHN0cmluZ19mbXRfYXBwZW5k
KGcsICIgcm10ICVzJXMiLAogICAgICAgICAgICAgc3VucC0+c3VuX3BhdGhbMF0gPyBVUyIiIDog
VVMiQCIsCiAgICAgICAgICAgICBzdW5wLT5zdW5fcGF0aFswXSA/IHN1bnAtPnN1bl9wYXRoIDog
c3VucC0+c3VuX3BhdGgrMSk7CkBAIC00MDgsNCArNDQ1LDU0IEBACiB9CiAKIAorLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
LyogUHJldHJpZ2dlciBoYW5kbGluZyBmb3IgZGVidWcuICBUaGUgZGVidWdfcHJpbnRmIGltcGxl
bWVudGF0aW9uCitkaXZlcnRzIG91dHB1dCB0byBhIGNpcmN1bGFyIGJ1ZmZlciBpZiB0aGUgYnVm
ZmVyIGlzIHNldCB1cC4KK1RoZSByb3V0aW5lcyBoZXJlIHNldCB1cCB0aGUgYnVmZmVyLCBhbmQg
dW5sb2FkIGl0IHRvIGZpbGUgKGFuZCByZWxlYXNlIGl0KS4KK1doYXQgZW5kcyB1cCBpbiB0aGUg
YnVmZmVyIGlzIHN1YmplY3QgdG8gdGhlIHVzdWFsIGRlYnVnX3NlbGVjdG9yLiAqLworCit2b2lk
CitkZWJ1Z19wcmV0cmlnZ2VyX3NldHVwKGNvbnN0IHVzY2hhciAqIHNpemVfc3RyaW5nKQorewor
bG9uZyBzaXplID0gVXN0cnRvbChzaXplX3N0cmluZywgTlVMTCwgMCk7CitpZiAoc2l6ZSA+IDAp
CisgIHsKKyAgdW5zaWduZWQgYnVmc2l6ZSA9IE1JTihzaXplLCAxNjM4NCk7CisKKyAgZHRyaWdn
ZXJfc2VsZWN0b3IgfD0gQklUKERUaV9wcmV0cmlnZ2VyKTsKKyAgaWYgKGRlYnVnX3ByZXRyaWdn
ZXJfYnVmKSBzdG9yZV9mcmVlKGRlYnVnX3ByZXRyaWdnZXJfYnVmKTsKKyAgZGVidWdfcHJldHJp
Z2dlcl9idWYgPSBzdG9yZV9tYWxsb2MoKHNpemVfdCkoZGVidWdfcHJldHJpZ2dlcl9ic2l6ZSA9
IGJ1ZnNpemUpKTsKKyAgcHJldHJpZ2dlcl9yZWFkb2ZmID0gcHJldHJpZ2dlcl93cml0ZW9mZiA9
IDA7CisgIH0KK30KKwordm9pZAorZGVidWdfdHJpZ2dlcl9maXJlKHZvaWQpCit7CitpbnQgbmJ5
dGVzOworCitpZiAoIWRlYnVnX3ByZXRyaWdnZXJfYnVmKSByZXR1cm47CisKK2lmIChkZWJ1Z19m
aWxlICYmIChuYnl0ZXMgPSBwcmV0cmlnZ2VyX3dyaXRlb2ZmIC0gcHJldHJpZ2dlcl9yZWFkb2Zm
KSAhPSAwKQorICBpZiAobmJ5dGVzID4gMCkKKyAgICBmd3JpdGUoZGVidWdfcHJldHJpZ2dlcl9i
dWYgKyBwcmV0cmlnZ2VyX3JlYWRvZmYsIDEsIG5ieXRlcywgZGVidWdfZmlsZSk7CisgIGVsc2UK
KyAgICB7CisgICAgZndyaXRlKGRlYnVnX3ByZXRyaWdnZXJfYnVmICsgcHJldHJpZ2dlcl9yZWFk
b2ZmLCAxLAorICAgICAgZGVidWdfcHJldHJpZ2dlcl9ic2l6ZSAtIHByZXRyaWdnZXJfcmVhZG9m
ZiwgZGVidWdfZmlsZSk7CisgICAgZndyaXRlKGRlYnVnX3ByZXRyaWdnZXJfYnVmLCAxLCBwcmV0
cmlnZ2VyX3dyaXRlb2ZmLCBkZWJ1Z19maWxlKTsKKyAgICB9CisKK2RlYnVnX3ByZXRyaWdnZXJf
ZGlzY2FyZCgpOworfQorCit2b2lkCitkZWJ1Z19wcmV0cmlnZ2VyX2Rpc2NhcmQodm9pZCkKK3sK
K2lmIChkZWJ1Z19wcmV0cmlnZ2VyX2J1Zikgc3RvcmVfZnJlZShkZWJ1Z19wcmV0cmlnZ2VyX2J1
Zik7CitkZWJ1Z19wcmV0cmlnZ2VyX2J1ZiA9IE5VTEw7CitkdHJpZ2dlcl9zZWxlY3RvciA9IDA7
Cit9CisKKwogLyogRW5kIG9mIGRlYnVnLmMgKi8KZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9kZWxp
dmVyLmMgZXhpbS9zcmMvZGVsaXZlci5jCi0tLSBleGltLm9yaWcvc3JjL2RlbGl2ZXIuYwkyMDIz
LTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvZGVsaXZlci5jCTIw
MjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAg
RXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAo
YykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykg
VW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykg
VGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3Ig
Y29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogLyogVGhlIG1haW4gY29k
ZSBmb3IgZGVsaXZlcmluZyBhIG1lc3NhZ2UuICovCkBAIC03NCw2ICs3NCw3IEBACiBzdGF0aWMg
Qk9PTCByZW1vdmVfam91cm5hbDsKIHN0YXRpYyBpbnQgIHBhcmNvdW50ID0gMDsKIHN0YXRpYyBw
YXJkYXRhICpwYXJsaXN0ID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgcG9sbGZkICpwYXJwb2xsOwog
c3RhdGljIGludCAgcmV0dXJuX2NvdW50Owogc3RhdGljIHVzY2hhciAqZnJvemVuX2luZm8gPSBV
UyIiOwogc3RhdGljIHVzY2hhciAqdXNlZF9yZXR1cm5fcGF0aCA9IE5VTEw7CkBAIC0xNDUsNyAr
MTQ2LDcgQEAKIGFkZHJlc3NfaXRlbSAqCiBkZWxpdmVyX21ha2VfYWRkcih1c2NoYXIgKmFkZHJl
c3MsIEJPT0wgY29weSkKIHsKLWFkZHJlc3NfaXRlbSAqYWRkciA9IHN0b3JlX2dldChzaXplb2Yo
YWRkcmVzc19pdGVtKSwgRkFMU0UpOworYWRkcmVzc19pdGVtICogYWRkciA9IHN0b3JlX2dldChz
aXplb2YoYWRkcmVzc19pdGVtKSwgR0VUX1VOVEFJTlRFRCk7CiAqYWRkciA9IGFkZHJlc3NfZGVm
YXVsdHM7CiBpZiAoY29weSkgYWRkcmVzcyA9IHN0cmluZ19jb3B5KGFkZHJlc3MpOwogYWRkci0+
YWRkcmVzcyA9IGFkZHJlc3M7CkBAIC01MjEsOCArNTIyLDEyIEBACiAgIGVsc2UgaWYgKG9uZS0+
cG9ydCAhPSB0d28tPnBvcnQpCiAgICAgcmV0dXJuIEZBTFNFOwogCi0gIC8qIEhvc3RzIG1hdGNo
ZWQgKi8KKyNpZmRlZiBTVVBQT1JUX0RBTkUKKyAgLyogRE5TU0VDIGVxdWFsaXR5ICovCisgIGlm
IChvbmUtPmRuc3NlYyAhPSB0d28tPmRuc3NlYykgcmV0dXJuIEZBTFNFOworI2VuZGlmCiAKKyAg
LyogSG9zdHMgbWF0Y2hlZCAqLwogICBvbmUgPSBvbmUtPm5leHQ7CiAgIHR3byA9IHR3by0+bmV4
dDsKICAgfQpAQCAtNzkyLDYgKzc5Nyw5IEBACiBpZiAoTE9HR0lORyhvdXRnb2luZ19wb3J0KSkK
ICAgZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcsICI6JWQiLCBoLT5wb3J0KTsKIAoraWYgKGNvbnRp
bnVlX3NlcXVlbmNlID4gMSkJCS8qWFhYIHRoaXMgaXMgd3JvbmcgZm9yIGEgZHJvcHBlZCBwcm94
eWNvbm4uICBXb3VsZCBoYXZlIHRvIHBhc3MgYmFjayBmcm9tIHRyYW5zcG9ydCAqLworICBnID0g
c3RyaW5nX2NhdG4oZywgVVMiKiIsIDEpOworCiAjaWZkZWYgU1VQUE9SVF9TT0NLUwogaWYgKExP
R0dJTkcocHJveHkpICYmIHByb3h5X2xvY2FsX2FkZHJlc3MpCiAgIHsKQEAgLTgyMCw3ICs4Mjgs
NyBAQAogaWYgKExPR0dJTkcodGxzX2NpcGhlcikgJiYgYWRkci0+Y2lwaGVyKQogICB7CiAgIGcg
PSBzdHJpbmdfYXBwZW5kKGcsIDIsIFVTIiBYPSIsIGFkZHItPmNpcGhlcik7Ci0jaWZkZWYgRVhQ
RVJJTUVOVEFMX1RMU19SRVNVTUUKKyNpZm5kZWYgRElTQUJMRV9UTFNfUkVTVU1FCiAgIGlmIChM
T0dHSU5HKHRsc19yZXN1bXB0aW9uKSAmJiB0ZXN0ZmxhZyhhZGRyLCBhZl90bHNfcmVzdW1lKSkK
ICAgICBnID0gc3RyaW5nX2NhdG4oZywgVVMiKiIsIDEpOwogI2VuZGlmCkBAIC04NDYsOCArODU0
LDE4IEBACiAKIAogI2lmbmRlZiBESVNBQkxFX0VWRU5UCisvKiBEaXN0cmlidXRlIGEgbmFtZWQg
ZXZlbnQgdG8gYW55IGxpc3RlbmVycy4KKworQXJnczoJYWN0aW9uCWNvbmZpZyBvcHRpb24gc3Bl
Y2lmeWluZyBsaXN0ZW5lcgorCWV2ZW50CW5hbWUgb2YgdGhlIGV2ZW50CisJZXZfZGF0YQlhc3Nv
Y2lhdGVkIGRhdGEgZm9yIHRoZSBldmVudAorCWVycm5vcAlwb2ludGVyIHRvIGVycm5vIGZvciBt
b2RpZmljYXRpb24sIG9yIG51bGwKKworUmV0dXJuOiBzdHJpbmcgZXhwYW5zaW9uIGZyb20gbGlz
dGVuZXIsIG9yIE5VTEwKKyovCisKIHVzY2hhciAqCi1ldmVudF9yYWlzZSh1c2NoYXIgKiBhY3Rp
b24sIGNvbnN0IHVzY2hhciAqIGV2ZW50LCB1c2NoYXIgKiBldl9kYXRhKQorZXZlbnRfcmFpc2Uo
dXNjaGFyICogYWN0aW9uLCBjb25zdCB1c2NoYXIgKiBldmVudCwgdXNjaGFyICogZXZfZGF0YSwg
aW50ICogZXJybm9wKQogewogdXNjaGFyICogczsKIGlmIChhY3Rpb24pCkBAIC04NzQsNyArODky
LDggQEAKICAgICB7CiAgICAgREVCVUcoRF9kZWxpdmVyKQogICAgICAgZGVidWdfcHJpbnRmKCJF
dmVudCglcyk6IGV2ZW50X2FjdGlvbiByZXR1cm5lZCBcIiVzXCJcbiIsIGV2ZW50LCBzKTsKLSAg
ICBlcnJubyA9IEVSUk5PX0VWRU5UOworICAgIGlmIChlcnJub3ApCisgICAgICAqZXJybm9wID0g
RVJSTk9fRVZFTlQ7CiAgICAgcmV0dXJuIHM7CiAgICAgfQogICB9CkBAIC05MDMsNyArOTIyLDcg
QEAKICAgICAgYSBmaWx0ZXIgd2FzIHVzZWQgd2hpY2ggdHJpZ2dlcmVkIGEgZmFpbCBjb21tYW5k
IChpbiBzdWNoIGEgY2FzZQogICAgICBhIHRyYW5zcG9ydCBpc24ndCBuZWVkZWQpLiAgQ29udmVy
dCBpdCB0byBhbiBpbnRlcm5hbCBmYWlsIGV2ZW50LiAqLwogCi0gICAgKHZvaWQpIGV2ZW50X3Jh
aXNlKGV2ZW50X2FjdGlvbiwgVVMibXNnOmZhaWw6aW50ZXJuYWwiLCBhZGRyLT5tZXNzYWdlKTsK
KyAgICAodm9pZCkgZXZlbnRfcmFpc2UoZXZlbnRfYWN0aW9uLCBVUyJtc2c6ZmFpbDppbnRlcm5h
bCIsIGFkZHItPm1lc3NhZ2UsIE5VTEwpOwogICAgIH0KICAgfQogZWxzZQpAQCAtOTE1LDcgKzkz
NCw4IEBACiAJICAgIHx8IFVzdHJjbXAoYWRkci0+dHJhbnNwb3J0LT5kcml2ZXJfbmFtZSwgInNt
dHAiKSA9PSAwCiAJICAgIHx8IFVzdHJjbXAoYWRkci0+dHJhbnNwb3J0LT5kcml2ZXJfbmFtZSwg
ImxtdHAiKSA9PSAwCiAJICAgIHx8IFVzdHJjbXAoYWRkci0+dHJhbnNwb3J0LT5kcml2ZXJfbmFt
ZSwgImF1dG9yZXBseSIpID09IDAKLQkgICA/IGFkZHItPm1lc3NhZ2UgOiBOVUxMKTsKKwkgICA/
IGFkZHItPm1lc3NhZ2UgOiBOVUxMLAorCSAgIE5VTEwpOwogICB9CiAKIGRlbGl2ZXJfaG9zdF9w
b3J0ID0gICAgc2F2ZV9wb3J0OwpAQCAtOTMzLDkgKzk1MywyMiBAQAogCiAKIC8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgICAgICBHZW5lcmF0
ZSBsb2NhbCBwcnQgZm9yIGxvZ2dpbmcgICAgICAgICAgKgorKiAgICAgICAgR2VuZXJhdGUgbG9j
YWwgcGFydCBmb3IgbG9nZ2luZyAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB1c2NoYXIgKgorc3RyaW5nX2dldF9s
cGFydF9zdWIoY29uc3QgYWRkcmVzc19pdGVtICogYWRkciwgdXNjaGFyICogcykKK3sKKyNpZmRl
ZiBTVVBQT1JUX0kxOE4KK2lmICh0ZXN0ZmxhZyhhZGRyLCBhZl91dGY4X2Rvd25jdnQpKQorICB7
CisgIHVzY2hhciAqIHQgPSBzdHJpbmdfbG9jYWxwYXJ0X3V0ZjhfdG9fYWxhYmVsKHMsIE5VTEwp
OworICByZXR1cm4gdCA/IHQgOiBzOwkvKiB0IGlzIE5VTEwgb24gYSBmYWlsZWQgY29udmVyc2lv
biAqLworICB9CisjZW5kaWYKK3JldHVybiBzOworfQorCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGEg
c3Vicm91dGluZSBmb3IgdXNlIGluIHN0cmluZ19sb2dfYWRkcmVzcygpIGJlbG93LgogCiBBcmd1
bWVudHM6CkBAIC05NTAsMzIgKzk4MywxMyBAQAogewogdXNjaGFyICogczsKIAotcyA9IGFkZHIt
PnByZWZpeDsKLWlmICh0ZXN0ZmxhZyhhZGRyLCBhZl9pbmNsdWRlX2FmZml4ZXMpICYmIHMpCi0g
IHsKLSNpZmRlZiBTVVBQT1JUX0kxOE4KLSAgaWYgKHRlc3RmbGFnKGFkZHIsIGFmX3V0ZjhfZG93
bmN2dCkpCi0gICAgcyA9IHN0cmluZ19sb2NhbHBhcnRfdXRmOF90b19hbGFiZWwocywgTlVMTCk7
Ci0jZW5kaWYKLSAgeWllbGQgPSBzdHJpbmdfY2F0KHlpZWxkLCBzKTsKLSAgfQoraWYgKHRlc3Rm
bGFnKGFkZHIsIGFmX2luY2x1ZGVfYWZmaXhlcykgJiYgKHMgPSBhZGRyLT5wcmVmaXgpKQorICB5
aWVsZCA9IHN0cmluZ19jYXQoeWllbGQsIHN0cmluZ19nZXRfbHBhcnRfc3ViKGFkZHIsIHMpKTsK
IAotcyA9IGFkZHItPmxvY2FsX3BhcnQ7Ci0jaWZkZWYgU1VQUE9SVF9JMThOCi1pZiAodGVzdGZs
YWcoYWRkciwgYWZfdXRmOF9kb3duY3Z0KSkKLSAgcyA9IHN0cmluZ19sb2NhbHBhcnRfdXRmOF90
b19hbGFiZWwocywgTlVMTCk7Ci0jZW5kaWYKLXlpZWxkID0gc3RyaW5nX2NhdCh5aWVsZCwgcyk7
Cit5aWVsZCA9IHN0cmluZ19jYXQoeWllbGQsIHN0cmluZ19nZXRfbHBhcnRfc3ViKGFkZHIsIGFk
ZHItPmxvY2FsX3BhcnQpKTsKIAotcyA9IGFkZHItPnN1ZmZpeDsKLWlmICh0ZXN0ZmxhZyhhZGRy
LCBhZl9pbmNsdWRlX2FmZml4ZXMpICYmIHMpCi0gIHsKLSNpZmRlZiBTVVBQT1JUX0kxOE4KLSAg
aWYgKHRlc3RmbGFnKGFkZHIsIGFmX3V0ZjhfZG93bmN2dCkpCi0gICAgcyA9IHN0cmluZ19sb2Nh
bHBhcnRfdXRmOF90b19hbGFiZWwocywgTlVMTCk7Ci0jZW5kaWYKLSAgeWllbGQgPSBzdHJpbmdf
Y2F0KHlpZWxkLCBzKTsKLSAgfQoraWYgKHRlc3RmbGFnKGFkZHIsIGFmX2luY2x1ZGVfYWZmaXhl
cykgJiYgKHMgPSBhZGRyLT5zdWZmaXgpKQorICB5aWVsZCA9IHN0cmluZ19jYXQoeWllbGQsIHN0
cmluZ19nZXRfbHBhcnRfc3ViKGFkZHIsIHMpKTsKIAogcmV0dXJuIHlpZWxkOwogfQpAQCAtMTEy
OCw3ICsxMTQyLDcgQEAKICNlbmRpZgogCiByZXNldF9wb2ludCA9IHN0b3JlX21hcmsoKTsKLWcg
PSBzdHJpbmdfZ2V0X3RhaW50ZWQoMjU2LCBUUlVFKTsJLyogYWRkcnMgd2lsbCBiZSB0YWludGVk
LCBzbyBhdm9pZCBjb3B5ICovCitnID0gc3RyaW5nX2dldF90YWludGVkKDI1NiwgR0VUX1RBSU5U
RUQpOwkvKiBhZGRycyB3aWxsIGJlIHRhaW50ZWQsIHNvIGF2b2lkIGNvcHkgKi8KIAogaWYgKG1z
ZykKICAgZyA9IHN0cmluZ19hcHBlbmQoZywgMiwgaG9zdF9hbmRfaWRlbnQoVFJVRSksIFVTIiAi
KTsKQEAgLTExNTIsMTEgKzExNjYsNiBAQAogaWYgKCpxdWV1ZV9uYW1lKQogICBnID0gc3RyaW5n
X2FwcGVuZChnLCAyLCBVUyIgUT0iLCBxdWV1ZV9uYW1lKTsKIAotI2lmZGVmIEVYUEVSSU1FTlRB
TF9TUlMKLWlmKGFkZHItPnByb3Auc3JzX3NlbmRlcikKLSAgZyA9IHN0cmluZ19hcHBlbmQoZywg
MywgVVMiIFNSUz08IiwgYWRkci0+cHJvcC5zcnNfc2VuZGVyLCBVUyI+Iik7Ci0jZW5kaWYKLQog
LyogWW91IG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHJldHVybiBwYXRoIG11c3QgYWx3YXlzIGJlIHNl
dCBmb3IgYSBzdWNjZXNzZnVsCiBkZWxpdmVyeTsgaW5kZWVkLCBJIGRpZCBmb3Igc29tZSB0aW1l
LCB1bnRpbCB0aGlzIHN0YXRlbWVudCBjcmFzaGVkLiBUaGUgY2FzZQogd2hlbiBpdCBpcyBub3Qg
c2V0IGlzIGZvciBhIGRlbGl2ZXJ5IHRvIC9kZXYvbnVsbCB3aGljaCBpcyBvcHRpbWlzZWQgYnkg
bm90CkBAIC0xMTk1LDggKzEyMDQsNiBAQAogICBpZiAoYWRkci0+aG9zdF91c2VkKQogICAgIHsK
ICAgICBnID0gZF9ob3N0bG9nKGcsIGFkZHIpOwotICAgIGlmIChjb250aW51ZV9zZXF1ZW5jZSA+
IDEpCQkvKlhYWCB0aGlzIGlzIHdyb25nIGZvciBhIGRyb3BwZWQgcHJveHljb25uLiAgV291bGQg
aGF2ZSB0byBwYXNzIGJhY2sgZnJvbSB0cmFuc3BvcnQgKi8KLSAgICAgIGcgPSBzdHJpbmdfY2F0
bihnLCBVUyIqIiwgMSk7CiAKICNpZm5kZWYgRElTQUJMRV9FVkVOVAogICAgIGRlbGl2ZXJfaG9z
dF9hZGRyZXNzID0gYWRkci0+aG9zdF91c2VkLT5hZGRyZXNzOwpAQCAtMTI2OCw4ICsxMjc1LDgg
QEAKIC8qIFRpbWUgb24gcXVldWUgYW5kIGFjdHVhbCB0aW1lIHRha2VuIHRvIGRlbGl2ZXIgKi8K
IAogaWYgKExPR0dJTkcocXVldWVfdGltZSkpCi0gIGcgPSBzdHJpbmdfYXBwZW5kKGcsIDIsIFVT
IiBRVD0iLAotICAgIHN0cmluZ190aW1lc2luY2UoJnJlY2VpdmVkX3RpbWUpKTsKKyAgZyA9IHN0
cmluZ19hcHBlbmQoZywgMiwgVVMiIFFUPSIsIHN0cmluZ190aW1lc2luY2UoCisgICAgTE9HR0lO
RyhxdWV1ZV90aW1lX2V4Y2x1c2l2ZSkgPyAmcmVjZWl2ZWRfdGltZV9jb21wbGV0ZSA6ICZyZWNl
aXZlZF90aW1lKSk7CiAKIGlmIChMT0dHSU5HKGRlbGl2ZXJfdGltZSkpCiAgIGcgPSBzdHJpbmdf
YXBwZW5kKGcsIDIsIFVTIiBEVD0iLCBzdHJpbmdfdGltZWRpZmYoJmFkZHItPmRlbGl2ZXJ5X3Rp
bWUpKTsKQEAgLTEzMjUsMjAgKzEzMzIsMTAgQEAKIGcgPSBzdHJpbmdfZm10X2FwcGVuZChnLCAi
IGRlZmVyICglZCkiLCBhZGRyLT5iYXNpY19lcnJubyk7CiAKIGlmIChhZGRyLT5iYXNpY19lcnJu
byA+IDApCi0gIGcgPSBzdHJpbmdfYXBwZW5kKGcsIDIsIFVTIjogIiwKLSAgICBVUyBzdHJlcnJv
cihhZGRyLT5iYXNpY19lcnJubykpOworICBnID0gc3RyaW5nX2FwcGVuZChnLCAyLCBVUyI6ICIs
IFVTIHN0cmVycm9yKGFkZHItPmJhc2ljX2Vycm5vKSk7CiAKIGlmIChhZGRyLT5ob3N0X3VzZWQp
Ci0gIHsKLSAgZyA9IHN0cmluZ19hcHBlbmQoZywgNSwKLQkJICAgIFVTIiBIPSIsIGFkZHItPmhv
c3RfdXNlZC0+bmFtZSwKLQkJICAgIFVTIiBbIiwgIGFkZHItPmhvc3RfdXNlZC0+YWRkcmVzcywg
VVMiXSIpOwotICBpZiAoTE9HR0lORyhvdXRnb2luZ19wb3J0KSkKLSAgICB7Ci0gICAgaW50IHBv
cnQgPSBhZGRyLT5ob3N0X3VzZWQtPnBvcnQ7Ci0gICAgZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcs
ICI6JWQiLCBwb3J0ID09IFBPUlRfTk9ORSA/IDI1IDogcG9ydCk7Ci0gICAgfQotICB9CisgIGcg
PSBkX2hvc3Rsb2coZywgYWRkcik7CiAKIGlmIChMT0dHSU5HKGRlbGl2ZXJfdGltZSkpCiAgIGcg
PSBzdHJpbmdfYXBwZW5kKGcsIDIsIFVTIiBEVD0iLCBzdHJpbmdfdGltZWRpZmYoJmFkZHItPmRl
bGl2ZXJ5X3RpbWUpKTsKQEAgLTE1ODksNiArMTU4NiwxMiBAQAogICAodm9pZCljbG9zZShhZGRy
LT5yZXR1cm5fZmlsZSk7CiAgIH0KIAorLyogQ2hlY2sgaWYgdGhlIHRyYW5zcG9ydCBub3RpZmVk
IGNvbnRpbnVlLWNvbm4gc3RhdHVzIGV4cGxpY2l0bHksIGFuZAordXBkYXRlIG91ciBrbm93bGVn
ZS4gKi8KKworaWYgKHRlc3RmbGFnKGFkZHIsIGFmX25ld19jb25uKSkgICAgICAgY29udGludWVf
c2VxdWVuY2UgPSAxOworZWxzZSBpZiAodGVzdGZsYWcoYWRkciwgYWZfY29udF9jb25uKSkgY29u
dGludWVfc2VxdWVuY2UrKzsKKwogLyogVGhlIHN1Y2Nlc3MgY2FzZSBoYXBwZW5zIG9ubHkgYWZ0
ZXIgZGVsaXZlcnkgYnkgYSB0cmFuc3BvcnQuICovCiAKIGlmIChyZXN1bHQgPT0gT0spCkBAIC0y
MTI4LDcgKzIxMzEsNyBAQAogUmV0dXJuczogICAgIG5vdGhpbmcKICovCiAKLXN0YXRpYyB2b2lk
Cit2b2lkCiBkZWxpdmVyX2xvY2FsKGFkZHJlc3NfaXRlbSAqYWRkciwgQk9PTCBzaGFkb3dpbmcp
CiB7CiBCT09MIHVzZV9pbml0Z3JvdXBzOwpAQCAtMjE0NiwyNyArMjE0OSwyMSBAQAogCiBpZihh
ZGRyLT5wcm9wLmVycm9yc19hZGRyZXNzKQogICByZXR1cm5fcGF0aCA9IGFkZHItPnByb3AuZXJy
b3JzX2FkZHJlc3M7Ci0jaWZkZWYgRVhQRVJJTUVOVEFMX1NSUwotZWxzZSBpZiAoYWRkci0+cHJv
cC5zcnNfc2VuZGVyKQotICByZXR1cm5fcGF0aCA9IGFkZHItPnByb3Auc3JzX3NlbmRlcjsKLSNl
bmRpZgogZWxzZQogICByZXR1cm5fcGF0aCA9IHNlbmRlcl9hZGRyZXNzOwogCiBpZiAodHAtPnJl
dHVybl9wYXRoKQogICB7Ci0gIHVzY2hhciAqbmV3X3JldHVybl9wYXRoID0gZXhwYW5kX3N0cmlu
Zyh0cC0+cmV0dXJuX3BhdGgpOwotICBpZiAoIW5ld19yZXR1cm5fcGF0aCkKLSAgICB7Ci0gICAg
aWYgKCFmLmV4cGFuZF9zdHJpbmdfZm9yY2VkZmFpbCkKLSAgICAgIHsKLSAgICAgIGNvbW1vbl9l
cnJvcihUUlVFLCBhZGRyLCBFUlJOT19FWFBBTkRGQUlMLAotICAgICAgICBVUyJGYWlsZWQgdG8g
ZXhwYW5kIHJldHVybiBwYXRoIFwiJXNcIiBpbiAlcyB0cmFuc3BvcnQ6ICVzIiwKLSAgICAgICAg
dHAtPnJldHVybl9wYXRoLCB0cC0+bmFtZSwgZXhwYW5kX3N0cmluZ19tZXNzYWdlKTsKLSAgICAg
IHJldHVybjsKLSAgICAgIH0KKyAgdXNjaGFyICogbmV3X3JldHVybl9wYXRoID0gZXhwYW5kX3N0
cmluZyh0cC0+cmV0dXJuX3BhdGgpOworICBpZiAobmV3X3JldHVybl9wYXRoKQorICAgIHJldHVy
bl9wYXRoID0gbmV3X3JldHVybl9wYXRoOworICBlbHNlIGlmICghZi5leHBhbmRfc3RyaW5nX2Zv
cmNlZGZhaWwpCisgICAgeworICAgIGNvbW1vbl9lcnJvcihUUlVFLCBhZGRyLCBFUlJOT19FWFBB
TkRGQUlMLAorICAgICAgVVMiRmFpbGVkIHRvIGV4cGFuZCByZXR1cm4gcGF0aCBcIiVzXCIgaW4g
JXMgdHJhbnNwb3J0OiAlcyIsCisgICAgICB0cC0+cmV0dXJuX3BhdGgsIHRwLT5uYW1lLCBleHBh
bmRfc3RyaW5nX21lc3NhZ2UpOworICAgIHJldHVybjsKICAgICB9Ci0gIGVsc2UgcmV0dXJuX3Bh
dGggPSBuZXdfcmV0dXJuX3BhdGg7CiAgIH0KIAogLyogRm9yIGxvY2FsIGRlbGl2ZXJpZXMsIG9u
ZSBhdCBhIHRpbWUsIHRoZSB2YWx1ZSB1c2VkIGZvciBsb2dnaW5nIGNhbiBqdXN0IGJlCkBAIC0y
MzczLDI3ICsyMzcwLDI5IEBACiAgICAgewogICAgIEJPT0wgb2sgPSBUUlVFOwogICAgIHNldF9w
cm9jZXNzX2luZm8oImRlbGl2ZXJpbmcgJXMgdG8gJXMgdXNpbmcgJXMiLCBtZXNzYWdlX2lkLAot
ICAgICBhZGRyLT5sb2NhbF9wYXJ0LCBhZGRyLT50cmFuc3BvcnQtPm5hbWUpOworICAgICBhZGRy
LT5sb2NhbF9wYXJ0LCB0cC0+bmFtZSk7CiAKLSAgICAvKiBTZXR0aW5nIHRoaXMgZ2xvYmFsIGlu
IHRoZSBzdWJwcm9jZXNzIG1lYW5zIHdlIG5lZWQgbmV2ZXIgY2xlYXIgaXQgKi8KKyAgICAvKiBT
ZXR0aW5nIHRoZXNlIGdsb2JhbHMgaW4gdGhlIHN1YnByb2Nlc3MgbWVhbnMgd2UgbmVlZCBuZXZl
ciBjbGVhciB0aGVtICovCiAgICAgdHJhbnNwb3J0X25hbWUgPSBhZGRyLT50cmFuc3BvcnQtPm5h
bWU7CisgICAgZHJpdmVyX3NyY2ZpbGUgPSB0cC0+c3JjZmlsZTsKKyAgICBkcml2ZXJfc3JjbGlu
ZSA9IHRwLT5zcmNsaW5lOwogCiAgICAgLyogSWYgYSB0cmFuc3BvcnQgZmlsdGVyIGhhcyBiZWVu
IHNwZWNpZmllZCwgc2V0IHVwIGl0cyBhcmd1bWVudCBsaXN0LgogICAgIEFueSBlcnJvcnMgd2ls
bCBnZXQgcHV0IGludG8gdGhlIGFkZHJlc3MsIGFuZCBGQUxTRSB5aWVsZGVkLiAqLwogCi0gICAg
aWYgKGFkZHItPnRyYW5zcG9ydC0+ZmlsdGVyX2NvbW1hbmQpCisgICAgaWYgKHRwLT5maWx0ZXJf
Y29tbWFuZCkKICAgICAgIHsKICAgICAgIG9rID0gdHJhbnNwb3J0X3NldF91cF9jb21tYW5kKCZ0
cmFuc3BvcnRfZmlsdGVyX2FyZ3YsCi0gICAgICAgIGFkZHItPnRyYW5zcG9ydC0+ZmlsdGVyX2Nv
bW1hbmQsCi0gICAgICAgIFRSVUUsIFBBTklDLCBhZGRyLCBVUyJ0cmFuc3BvcnQgZmlsdGVyIiwg
TlVMTCk7Ci0gICAgICB0cmFuc3BvcnRfZmlsdGVyX3RpbWVvdXQgPSBhZGRyLT50cmFuc3BvcnQt
PmZpbHRlcl90aW1lb3V0OworICAgICAgICB0cC0+ZmlsdGVyX2NvbW1hbmQsCisgICAgICAgIFRS
VUUsIFBBTklDLCBhZGRyLCBGQUxTRSwgVVMidHJhbnNwb3J0IGZpbHRlciIsIE5VTEwpOworICAg
ICAgdHJhbnNwb3J0X2ZpbHRlcl90aW1lb3V0ID0gdHAtPmZpbHRlcl90aW1lb3V0OwogICAgICAg
fQogICAgIGVsc2UgdHJhbnNwb3J0X2ZpbHRlcl9hcmd2ID0gTlVMTDsKIAogICAgIGlmIChvaykK
ICAgICAgIHsKLSAgICAgIGRlYnVnX3ByaW50X3N0cmluZyhhZGRyLT50cmFuc3BvcnQtPmRlYnVn
X3N0cmluZyk7Ci0gICAgICByZXBsaWNhdGUgPSAhKGFkZHItPnRyYW5zcG9ydC0+aW5mby0+Y29k
ZSkoYWRkci0+dHJhbnNwb3J0LCBhZGRyKTsKKyAgICAgIGRlYnVnX3ByaW50X3N0cmluZyh0cC0+
ZGVidWdfc3RyaW5nKTsKKyAgICAgIHJlcGxpY2F0ZSA9ICEodHAtPmluZm8tPmNvZGUpKGFkZHIt
PnRyYW5zcG9ydCwgYWRkcik7CiAgICAgICB9CiAgICAgfQogCkBAIC0yNDEzLDEzICsyNDEyLDEz
IEBACiAgICAgdXNjaGFyICpzOwogICAgIGludCByZXQ7CiAKLSAgICBpZiggIChyZXQgPSB3cml0
ZShwZmRbcGlwZV93cml0ZV0sICZhZGRyMi0+dHJhbnNwb3J0X3JldHVybiwgc2l6ZW9mKGludCkp
KSAhPSBzaXplb2YoaW50KQorICAgIGlmKCAgKGkgPSBhZGRyMi0+dHJhbnNwb3J0X3JldHVybiwg
KHJldCA9IHdyaXRlKHBmZFtwaXBlX3dyaXRlXSwgJmksIHNpemVvZihpbnQpKSkgIT0gc2l6ZW9m
KGludCkpCiAgICAgICB8fCAocmV0ID0gd3JpdGUocGZkW3BpcGVfd3JpdGVdLCAmdHJhbnNwb3J0
X2NvdW50LCBzaXplb2YodHJhbnNwb3J0X2NvdW50KSkpICE9IHNpemVvZih0cmFuc3BvcnRfY291
bnQpCiAgICAgICB8fCAocmV0ID0gd3JpdGUocGZkW3BpcGVfd3JpdGVdLCAmYWRkcjItPmZsYWdz
LCBzaXplb2YoYWRkcjItPmZsYWdzKSkpICE9IHNpemVvZihhZGRyMi0+ZmxhZ3MpCiAgICAgICB8
fCAocmV0ID0gd3JpdGUocGZkW3BpcGVfd3JpdGVdLCAmYWRkcjItPmJhc2ljX2Vycm5vLCAgICBz
aXplb2YoaW50KSkpICE9IHNpemVvZihpbnQpCiAgICAgICB8fCAocmV0ID0gd3JpdGUocGZkW3Bp
cGVfd3JpdGVdLCAmYWRkcjItPm1vcmVfZXJybm8sICAgICBzaXplb2YoaW50KSkpICE9IHNpemVv
ZihpbnQpCiAgICAgICB8fCAocmV0ID0gd3JpdGUocGZkW3BpcGVfd3JpdGVdLCAmYWRkcjItPmRl
bGl2ZXJ5X3RpbWUsICBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKSkgIT0gc2l6ZW9mKHN0cnVjdCB0
aW1ldmFsKQotICAgICAgfHwgKHJldCA9IHdyaXRlKHBmZFtwaXBlX3dyaXRlXSwgJmFkZHIyLT5z
cGVjaWFsX2FjdGlvbiwgc2l6ZW9mKGludCkpKSAhPSBzaXplb2YoaW50KQorICAgICAgfHwgKGkg
PSBhZGRyMi0+c3BlY2lhbF9hY3Rpb24sIChyZXQgPSB3cml0ZShwZmRbcGlwZV93cml0ZV0sICZp
LCBzaXplb2YoaW50KSkpICE9IHNpemVvZihpbnQpKQogICAgICAgfHwgKHJldCA9IHdyaXRlKHBm
ZFtwaXBlX3dyaXRlXSwgJmFkZHIyLT50cmFuc3BvcnQsCiAgICAgICAgIHNpemVvZih0cmFuc3Bv
cnRfaW5zdGFuY2UgKikpKSAhPSBzaXplb2YodHJhbnNwb3J0X2luc3RhbmNlICopCiAKQEAgLTI0
ODcsNyArMjQ4Niw3IEBACiAgICAgbGVuID0gcmVhZChwZmRbcGlwZV9yZWFkXSwgJmFkZHIyLT5i
YXNpY19lcnJubywgICAgc2l6ZW9mKGludCkpOwogICAgIGxlbiA9IHJlYWQocGZkW3BpcGVfcmVh
ZF0sICZhZGRyMi0+bW9yZV9lcnJubywgICAgIHNpemVvZihpbnQpKTsKICAgICBsZW4gPSByZWFk
KHBmZFtwaXBlX3JlYWRdLCAmYWRkcjItPmRlbGl2ZXJ5X3RpbWUsICBzaXplb2Yoc3RydWN0IHRp
bWV2YWwpKTsKLSAgICBsZW4gPSByZWFkKHBmZFtwaXBlX3JlYWRdLCAmYWRkcjItPnNwZWNpYWxf
YWN0aW9uLCBzaXplb2YoaW50KSk7CisgICAgbGVuID0gcmVhZChwZmRbcGlwZV9yZWFkXSwgJmks
IHNpemVvZihpbnQpKTsgYWRkcjItPnNwZWNpYWxfYWN0aW9uID0gaTsKICAgICBsZW4gPSByZWFk
KHBmZFtwaXBlX3JlYWRdLCAmYWRkcjItPnRyYW5zcG9ydCwKICAgICAgIHNpemVvZih0cmFuc3Bv
cnRfaW5zdGFuY2UgKikpOwogCkBAIC0yODg5LDEwICsyODg4LDggQEAKICAgZGVsaXZlcmllcyAo
ZS5nLiB0byBwaXBlcykgY2FuIHRha2UgYSBzdWJzdGFudGlhbCB0aW1lLiAqLwogCiAgIGlmICgh
KGRibV9maWxlID0gZGJmbl9vcGVuKFVTInJldHJ5IiwgT19SRE9OTFksICZkYmJsb2NrLCBGQUxT
RSwgVFJVRSkpKQotICAgIHsKICAgICBERUJVRyhEX2RlbGl2ZXJ8RF9yZXRyeXxEX2hpbnRzX2xv
b2t1cCkKICAgICAgIGRlYnVnX3ByaW50Zigibm8gcmV0cnkgZGF0YSBhdmFpbGFibGVcbiIpOwot
ICAgIH0KIAogICBhZGRyMiA9IGFkZHI7CiAgIGFkZHIzID0gTlVMTDsKQEAgLTMwNDgsNyArMzA0
NSw3IEBACiAgICAgZWxzZSBmb3IgKGFkZHIyID0gYWRkcjsgYWRkcjI7IGFkZHIyID0gYWRkcjIt
Pm5leHQpCiAgICAgICBpZiAoYWRkcjItPnRyYW5zcG9ydF9yZXR1cm4gPT0gT0spCiAJewotCWFk
ZHIzID0gc3RvcmVfZ2V0KHNpemVvZihhZGRyZXNzX2l0ZW0pLCBGQUxTRSk7CisJYWRkcjMgPSBz
dG9yZV9nZXQoc2l6ZW9mKGFkZHJlc3NfaXRlbSksIEdFVF9VTlRBSU5URUQpOwogCSphZGRyMyA9
ICphZGRyMjsKIAlhZGRyMy0+bmV4dCA9IE5VTEw7CiAJYWRkcjMtPnNoYWRvd19tZXNzYWdlID0g
VVMgJmFkZHIyLT5zaGFkb3dfbWVzc2FnZTsKQEAgLTMxOTYsNiArMzE5Myw3IEBACiB1c2NoYXIg
KnBhdHRlcm47CiB1c2NoYXIgcGF0YnVmWzI1Nl07CiAKKy8qWFhYIFRoZSBsaXN0IGlzIHVzZWQg
YmVmb3JlIGV4cGFuc2lvbi4gTm90IHN1cmUgaG93IHRoYXQgdGllcyB1cCB3aXRoIHRoZSBkb2Nz
ICovCiB3aGlsZSAoICAqYXB0cgogICAgICAgJiYgKHBhdHRlcm4gPSBzdHJpbmdfbmV4dGlubGlz
dCgmbGlzdHB0ciwgJnNlcCwgcGF0YnVmLCBzaXplb2YocGF0YnVmKSkpCiAgICAgICApCkBAIC0z
MzA4LDcgKzMzMDYsNyBAQAogCiAvKiBMb29wIHRocm91Z2ggYWxsIGl0ZW1zLCByZWFkaW5nIGZy
b20gdGhlIHBpcGUgd2hlbiBuZWNlc3NhcnkuIFRoZSBwaXBlCiB1c2VkIHRvIGJlIG5vbi1ibG9j
a2luZy4gQnV0IEkgZG8gbm90IHNlZSBhIHJlYXNvbiBmb3IgdXNpbmcgbm9uLWJsb2NraW5nIEkv
TwotaGVyZSwgYXMgdGhlIHByZWNlZGluZyBzZWxlY3QoKSB0ZWxscyB1cywgaWYgZGF0YSBpcyBh
dmFpbGFibGUgZm9yIHJlYWRpbmcuCitoZXJlLCBhcyB0aGUgcHJlY2VkaW5nIHBvbGwoKSB0ZWxs
cyB1cywgaWYgZGF0YSBpcyBhdmFpbGFibGUgZm9yIHJlYWRpbmcuCiAKIEEgcmVhZCgpIG9uIGEg
InNlbGVjdGVkIiBoYW5kbGUgc2hvdWxkIG5ldmVyIGJsb2NrLCBidXQoISkgaXQgbWF5IHJldHVy
bgogbGVzcyBkYXRhIHRoZW4gd2UgZXhwZWN0ZWQuIChUaGUgYnVmZmVyIHNpemUgd2UgcGFzcyB0
byByZWFkKCkgc2hvdWxkbid0IGJlCkBAIC0zNDQyLDcgKzM0NDAsNyBAQAogCiAgICAgICBpZiAo
IXIgfHwgISgqcHRyICYgcmZfZGVsZXRlKSkKIAl7Ci0JciA9IHN0b3JlX2dldChzaXplb2YocmV0
cnlfaXRlbSksIEZBTFNFKTsKKwlyID0gc3RvcmVfZ2V0KHNpemVvZihyZXRyeV9pdGVtKSwgR0VU
X1VOVEFJTlRFRCk7CiAJci0+bmV4dCA9IGFkZHItPnJldHJpZXM7CiAJYWRkci0+cmV0cmllcyA9
IHI7CiAJci0+ZmxhZ3MgPSAqcHRyKys7CkBAIC0zNTgxLDcgKzM1NzksMTMgQEAKIAogICAgICAg
c3dpdGNoICgqc3ViaWQpCiAJewotICAjaWZkZWYgU1VQUE9SVF9TT0NLUworCWNhc2UgMzoJCS8q
IGV4cGxpY2l0IG5vdGlmaWNhdGlvbiBvZiBjb250aW51ZWQtY29ubmVjdGlvbiAobm9uKXVzZTsK
KwkJCW92ZXJyaWRlcyBjYWxsZXIncyBrbm93bGVnZS4gKi8KKwkgIGlmICgqcHRyICYgQklUKDEp
KSAgICAgIHNldGZsYWcoYWRkciwgYWZfbmV3X2Nvbm4pOworCSAgZWxzZSBpZiAoKnB0ciAmIEJJ
VCgyKSkgc2V0ZmxhZyhhZGRyLCBhZl9jb250X2Nvbm4pOworCSAgYnJlYWs7CisKKyNpZmRlZiBT
VVBQT1JUX1NPQ0tTCiAJY2FzZSAnMic6CS8qIHByb3h5IGluZm9ybWF0aW9uOyBtdXN0IGFycml2
ZSBiZWZvcmUgQTAgYW5kIGFwcGxpZXMgdG8gdGhhdCBhZGRyIFhYWCBvb3BzKi8KIAkgIHByb3h5
X3Nlc3Npb24gPSBUUlVFOwkvKlhYWCBzaG91bGQgdGhpcyBiZSBjbGVhcmVkIHNvbWV3aGVyZT8g
Ki8KIAkgIGlmICgqcHRyID09IDApCkBAIC0zNTk0LDkgKzM1OTgsOSBAQAogCSAgICBwdHIgKz0g
c2l6ZW9mKHByb3h5X2xvY2FsX3BvcnQpOwogCSAgICB9CiAJICBicmVhazsKLSAgI2VuZGlmCisj
ZW5kaWYKIAotICAjaWZkZWYgRVhQRVJJTUVOVEFMX0RTTl9JTkZPCisjaWZkZWYgRVhQRVJJTUVO
VEFMX0RTTl9JTkZPCiAJY2FzZSAnMSc6CS8qIG11c3QgYXJyaXZlIGJlZm9yZSBBMCwgYW5kIGFw
cGxpZXMgdG8gdGhhdCBhZGRyICovCiAJCQkvKiBUd28gc3RyaW5nczogc210cF9ncmVldGluZyBh
bmQgaGVsb19yZXNwb25zZSAqLwogCSAgYWRkci0+c210cF9ncmVldGluZyA9IHN0cmluZ19jb3B5
KHB0cik7CkBAIC0zNjA0LDcgKzM2MDgsNyBAQAogCSAgYWRkci0+aGVsb19yZXNwb25zZSA9IHN0
cmluZ19jb3B5KHB0cik7CiAJICB3aGlsZSgqcHRyKyspOwogCSAgYnJlYWs7Ci0gICNlbmRpZgor
I2VuZGlmCiAKIAljYXNlICcwJzoKIAkgIERFQlVHKERfZGVsaXZlcikgZGVidWdfcHJpbnRmKCJB
MCAlcyB0cmV0ICVkXG4iLCBhZGRyLT5hZGRyZXNzLCAqcHRyKTsKQEAgLTM2MjcsNyArMzYzMSw3
IEBACiAKIAkgIGlmICgqcHRyKQogCSAgICB7Ci0JICAgIGggPSBzdG9yZV9nZXQoc2l6ZW9mKGhv
c3RfaXRlbSksIEZBTFNFKTsKKwkgICAgaCA9IHN0b3JlX2dldChzaXplb2YoaG9zdF9pdGVtKSwg
R0VUX1VOVEFJTlRFRCk7CiAJICAgIGgtPm5hbWUgPSBzdHJpbmdfY29weShwdHIpOwogCSAgICB3
aGlsZSAoKnB0cisrKTsKIAkgICAgaC0+YWRkcmVzcyA9IHN0cmluZ19jb3B5KHB0cik7CkBAIC0z
ODM2LDcgKzM4NDAsNyBAQAogcGFyX3dhaXQodm9pZCkKIHsKIGludCBwb2Zmc2V0LCBzdGF0dXM7
Ci1hZGRyZXNzX2l0ZW0gKmFkZHIsICphZGRybGlzdDsKK2FkZHJlc3NfaXRlbSAqIGFkZHIsICog
YWRkcmxpc3Q7CiBwaWRfdCBwaWQ7CiAKIHNldF9wcm9jZXNzX2luZm8oImRlbGl2ZXJpbmcgJXM6
IHdhaXRpbmcgZm9yIGEgcmVtb3RlIGRlbGl2ZXJ5IHN1YnByb2Nlc3MgIgpAQCAtMzg0NiwxOCAr
Mzg1MCwxOCBAQAogZXhpc3RlbmNlIC0gaW4gd2hpY2ggY2FzZSBnaXZlIGFuIGVycm9yIHJldHVy
bi4gV2UgY2Fubm90IHByb2NlZWQganVzdCBieQogd2FpdGluZyBmb3IgYSBjb21wbGV0aW9uLCBi
ZWNhdXNlIGEgc3VicHJvY2VzcyBtYXkgaGF2ZSBmaWxsZWQgdXAgaXRzIHBpcGUsIGFuZAogYmUg
d2FpdGluZyBmb3IgaXQgdG8gYmUgZW1wdGllZC4gVGhlcmVmb3JlLCBpZiBubyBwcm9jZXNzZXMg
aGF2ZSBmaW5pc2hlZCwgd2UKLXdhaXQgZm9yIG9uZSBvZiB0aGUgcGlwZXMgdG8gYWNxdWlyZSBz
b21lIGRhdGEgYnkgY2FsbGluZyBzZWxlY3QoKSwgd2l0aCBhCit3YWl0IGZvciBvbmUgb2YgdGhl
IHBpcGVzIHRvIGFjcXVpcmUgc29tZSBkYXRhIGJ5IGNhbGxpbmcgcG9sbCgpLCB3aXRoIGEKIHRp
bWVvdXQganVzdCBpbiBjYXNlLgogCiBUaGUgc2ltcGxlIGFwcHJvYWNoIGlzIGp1c3QgdG8gaXRl
cmF0ZSBhZnRlciByZWFkaW5nIGRhdGEgZnJvbSBhIHJlYWR5IHBpcGUuCiBUaGlzIGxlYWRzIHRv
IG5vbi1pZGVhbCBiZWhhdmlvdXIgd2hlbiB0aGUgc3VicHJvY2VzcyBoYXMgd3JpdHRlbiBpdHMg
ZmluYWwgWgogaXRlbSwgY2xvc2VkIHRoZSBwaXBlLCBhbmQgaXMgaW4gdGhlIHByb2Nlc3Mgb2Yg
ZXhpdGluZyAodGhlIGNvbW1vbiBjYXNlKS4gQQotY2FsbCB0byB3YWl0cGlkKCkgeWllbGRzIG5v
dGhpbmcgY29tcGxldGVkLCBidXQgc2VsZWN0KCkgc2hvd3MgdGhlIHBpcGUgcmVhZHkgLQorY2Fs
bCB0byB3YWl0cGlkKCkgeWllbGRzIG5vdGhpbmcgY29tcGxldGVkLCBidXQgcG9sbCgpIHNob3dz
IHRoZSBwaXBlIHJlYWR5IC0KIHJlYWRpbmcgaXQgeWllbGRzIEVPRiwgc28geW91IGVuZCB1cCB3
aXRoIGJ1c3ktd2FpdGluZyB1bnRpbCB0aGUgc3VicHJvY2VzcyBoYXMKIGFjdHVhbGx5IGZpbmlz
aGVkLgogCiBUbyBhdm9pZCB0aGlzLCBpZiBhbGwgdGhlIGRhdGEgdGhhdCBpcyBuZWVkZWQgaGFz
IGJlZW4gcmVhZCBmcm9tIGEgc3VicHJvY2VzcwotYWZ0ZXIgc2VsZWN0KCksIGFuIGV4cGxpY2l0
IHdhaXQoKSBmb3IgaXQgaXMgZG9uZS4gV2Uga25vdyB0aGF0IGFsbCBpdCBpcyBkb2luZworYWZ0
ZXIgcG9sbCgpLCBhbiBleHBsaWNpdCB3YWl0KCkgZm9yIGl0IGlzIGRvbmUuIFdlIGtub3cgdGhh
dCBhbGwgaXQgaXMgZG9pbmcKIGlzIHdyaXRpbmcgdG8gdGhlIHBpcGUgYW5kIHRoZW4gZXhpdGlu
Zywgc28gdGhlIHdhaXQgc2hvdWxkIG5vdCBiZSBsb25nLgogCiBUaGUgbm9uLWJsb2NraW5nIHdh
aXRwaWQoKSBpcyB0byBzb21lIGV4dGVudCBqdXN0IGluc3VyYW5jZTsgaWYgd2UgY291bGQKQEAg
LTM4NzcsOSArMzg4MSw3IEBACiAgIHsKICAgd2hpbGUgKChwaWQgPSB3YWl0cGlkKC0xLCAmc3Rh
dHVzLCBXTk9IQU5HKSkgPD0gMCkKICAgICB7Ci0gICAgc3RydWN0IHRpbWV2YWwgdHY7Ci0gICAg
ZmRfc2V0IHNlbGVjdF9waXBlczsKLSAgICBpbnQgbWF4cGlwZSwgcmVhZHljb3VudDsKKyAgICBp
bnQgcmVhZHljb3VudDsKIAogICAgIC8qIEEgcmV0dXJuIHZhbHVlIG9mIC0xIGNhbiBtZWFuIHNl
dmVyYWwgdGhpbmdzLiBJZiBlcnJubyAhPSBFQ0hJTEQsIGl0CiAgICAgZWl0aGVyIG1lYW5zIGlu
dmFsaWQgb3B0aW9ucyAod2hpY2ggd2UgZGlzY291bnQpLCBvciB0aGF0IHRoaXMgcHJvY2VzcyB3
YXMKQEAgLTM5MDMsNyArMzkwNSw3IEBACiAgICAgc3VicHJvY2Vzc2VzIGFyZSBzdGlsbCBpbiBl
eGlzdGVuY2UuIElmIGtpbGwoKSBnaXZlcyBhbiBPSyByZXR1cm4sIHdlIGtub3cKICAgICBpdCBt
dXN0IGJlIGZvciBvbmUgb2Ygb3VyIHByb2Nlc3NlcyAtIGl0IGNhbid0IGJlIGZvciBhIHJlLXVz
ZSBvZiB0aGUgcGlkLAogICAgIGJlY2F1c2UgaWYgb3VyIHByb2Nlc3MgaGFkIGZpbmlzaGVkLCB3
YWl0cGlkKCkgd291bGQgaGF2ZSBmb3VuZCBpdC4gSWYgYW55Ci0gICAgb2Ygb3VyIHN1YnByb2Nl
c3NlcyBhcmUgaW4gZXhpc3RlbmNlLCB3ZSBwcm9jZWVkIHRvIHVzZSBzZWxlY3QoKSBhcyBpZgor
ICAgIG9mIG91ciBzdWJwcm9jZXNzZXMgYXJlIGluIGV4aXN0ZW5jZSwgd2UgcHJvY2VlZCB0byB1
c2UgcG9sbCgpIGFzIGlmCiAgICAgd2FpdHBpZCgpIGhhZCByZXR1cm5lZCB6ZXJvLiBJIHRoaW5r
IHRoaXMgaXMgc2FmZS4gKi8KIAogICAgIGlmIChwaWQgPCAwKQpAQCAtMzkyNyw3ICszOTI5LDcg
QEAKICAgICAgIGlmIChwb2Zmc2V0ID49IHJlbW90ZV9tYXhfcGFyYWxsZWwpCiAgICAgICAgIHsK
ICAgICAgICAgREVCVUcoRF9kZWxpdmVyKSBkZWJ1Z19wcmludGYoIioqKiBubyBkZWxpdmVyeSBj
aGlsZHJlbiBmb3VuZFxuIik7Ci0gICAgICAgIHJldHVybiBOVUxMOyAgIC8qIFRoaXMgaXMgdGhl
IGVycm9yIHJldHVybiAqLworCXJldHVybiBOVUxMOwkvKiBUaGlzIGlzIHRoZSBlcnJvciByZXR1
cm4gKi8KICAgICAgICAgfQogICAgICAgfQogCkBAIC0zOTM2LDI4ICszOTM4LDIzIEBACiAgICAg
c3VicHJvY2VzcywgYnV0IHRoZXJlIGFyZSBubyBjb21wbGV0ZWQgc3VicHJvY2Vzc2VzLiBTZWUg
aWYgYW55IHBpcGVzIGFyZQogICAgIHJlYWR5IHdpdGggYW55IGRhdGEgZm9yIHJlYWRpbmcuICov
CiAKLSAgICBERUJVRyhEX2RlbGl2ZXIpIGRlYnVnX3ByaW50Zigic2VsZWN0aW5nIG9uIHN1YnBy
b2Nlc3MgcGlwZXNcbiIpOworICAgIERFQlVHKERfZGVsaXZlcikgZGVidWdfcHJpbnRmKCJwb2xs
aW5nIHN1YnByb2Nlc3MgcGlwZXNcbiIpOwogCi0gICAgbWF4cGlwZSA9IDA7Ci0gICAgRkRfWkVS
Tygmc2VsZWN0X3BpcGVzKTsKICAgICBmb3IgKHBvZmZzZXQgPSAwOyBwb2Zmc2V0IDwgcmVtb3Rl
X21heF9wYXJhbGxlbDsgcG9mZnNldCsrKQogICAgICAgaWYgKHBhcmxpc3RbcG9mZnNldF0ucGlk
ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgaW50IGZkID0gcGFybGlzdFtwb2Zmc2V0XS5mZDsK
LSAgICAgICAgRkRfU0VUKGZkLCAmc2VsZWN0X3BpcGVzKTsKLSAgICAgICAgaWYgKGZkID4gbWF4
cGlwZSkgbWF4cGlwZSA9IGZkOwotICAgICAgICB9CisJeworCXBhcnBvbGxbcG9mZnNldF0uZmQg
PSBwYXJsaXN0W3BvZmZzZXRdLmZkOworCXBhcnBvbGxbcG9mZnNldF0uZXZlbnRzID0gUE9MTElO
OworCX0KKyAgICAgIGVsc2UKKwlwYXJwb2xsW3BvZmZzZXRdLmZkID0gLTE7CiAKICAgICAvKiBT
dGljayBpbiBhIDYwLXNlY29uZCB0aW1lb3V0LCBqdXN0IGluIGNhc2UuICovCiAKLSAgICB0di50
dl9zZWMgPSA2MDsKLSAgICB0di50dl91c2VjID0gMDsKLQotICAgIHJlYWR5Y291bnQgPSBzZWxl
Y3QobWF4cGlwZSArIDEsIChTRUxFQ1RfQVJHMl9UWVBFICopJnNlbGVjdF9waXBlcywKLSAgICAg
ICAgIE5VTEwsIE5VTEwsICZ0dik7CisgICAgcmVhZHljb3VudCA9IHBvbGwocGFycG9sbCwgcmVt
b3RlX21heF9wYXJhbGxlbCwgNjAgKiAxMDAwKTsKIAogICAgIC8qIFNjYW4gdGhyb3VnaCB0aGUg
cGlwZXMgYW5kIHJlYWQgYW55IHRoYXQgYXJlIHJlYWR5OyB1c2UgdGhlIGNvdW50Ci0gICAgcmV0
dXJuZWQgYnkgc2VsZWN0KCkgdG8gc3RvcCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlLiBTZWxlY3Qo
KSBjYW4gcmV0dXJuCisgICAgcmV0dXJuZWQgYnkgcG9sbCgpIHRvIHN0b3Agd2hlbiB0aGVyZSBh
cmUgbm8gbW9yZS4gU2VsZWN0KCkgY2FuIHJldHVybgogICAgIHdpdGggbm8gcHJvY2Vzc2VzIChl
LmcuIGlmIGludGVycnVwdGVkKS4gVGhpcyBzaG91bGRuJ3QgbWF0dGVyLgogCiAgICAgSWYgcGFy
X3JlYWRfcGlwZSgpIHJldHVybnMgVFJVRSwgaXQgbWVhbnMgdGhhdCBlaXRoZXIgdGhlIHRlcm1p
bmF0aW5nIFogd2FzCkBAIC0zOTc0LDcgKzM5NzEsNyBAQAogICAgICAgICAgcG9mZnNldCsrKQog
ICAgICAgewogICAgICAgaWYgKCAgKHBpZCA9IHBhcmxpc3RbcG9mZnNldF0ucGlkKSAhPSAwCi0g
ICAgICAgICAmJiBGRF9JU1NFVChwYXJsaXN0W3BvZmZzZXRdLmZkLCAmc2VsZWN0X3BpcGVzKQor
CSAmJiBwYXJwb2xsW3BvZmZzZXRdLnJldmVudHMKIAkgKQogICAgICAgICB7CiAgICAgICAgIHJl
YWR5Y291bnQtLTsKQEAgLTQwMTIsNyArNDAwOSw3IEBACiAgICAgInRyYW5zcG9ydCBwcm9jZXNz
IGxpc3QiLCBwaWQpOwogICB9ICAvKiBFbmQgb2YgdGhlICJmb3IiIGxvb3AgKi8KIAotLyogQ29t
ZSBoZXJlIHdoZW4gYWxsIHRoZSBkYXRhIHdhcyBjb21wbGV0ZWx5IHJlYWQgYWZ0ZXIgYSBzZWxl
Y3QoKSwgYW5kCisvKiBDb21lIGhlcmUgd2hlbiBhbGwgdGhlIGRhdGEgd2FzIGNvbXBsZXRlbHkg
cmVhZCBhZnRlciBhIHBvbGwoKSwgYW5kCiB0aGUgcHJvY2VzcyBpbiBwaWQgaGFzIGJlZW4gd2Fp
dCgpZWQgZm9yLiAqLwogCiBQUk9DRVNTX0RPTkU6CkBAIC00MDQ3LDcgKzQwNDQsNyBAQAogICAg
ICIlcyAlZCIsCiAgICAgYWRkcmxpc3QtPnRyYW5zcG9ydC0+ZHJpdmVyX25hbWUsCiAgICAgc3Rh
dHVzLAotICAgIChtc2IgPT0gMCk/ICJ0ZXJtaW5hdGVkIGJ5IHNpZ25hbCIgOiAiZXhpdCBjb2Rl
IiwKKyAgICBtc2IgPT0gMCA/ICJ0ZXJtaW5hdGVkIGJ5IHNpZ25hbCIgOiAiZXhpdCBjb2RlIiwK
ICAgICBjb2RlKTsKIAogICBpZiAobXNiICE9IDAgfHwgKGNvZGUgIT0gU0lHVEVSTSAmJiBjb2Rl
ICE9IFNJR0tJTEwgJiYgY29kZSAhPSBTSUdRVUlUKSkKQEAgLTQwNjUsNyArNDA2Miw4IEBACiAv
KiBFbHNlIGNvbXBsZXRlIHJlYWRpbmcgdGhlIHBpcGUgdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhl
IGRlbGl2ZXJ5LCBpZiBhbGwKIHRoZSBkYXRhIGhhcyBub3QgeWV0IGJlZW4gb2J0YWluZWQuICov
CiAKLWVsc2UgaWYgKCFwYXJsaXN0W3BvZmZzZXRdLmRvbmUpICh2b2lkKXBhcl9yZWFkX3BpcGUo
cG9mZnNldCwgVFJVRSk7CitlbHNlIGlmICghcGFybGlzdFtwb2Zmc2V0XS5kb25lKQorICAodm9p
ZCkgcGFyX3JlYWRfcGlwZShwb2Zmc2V0LCBUUlVFKTsKIAogLyogUHV0IHRoZSBkYXRhIGNvdW50
IGFuZCByZXR1cm4gcGF0aCBpbnRvIGdsb2JhbHMsIG1hcmsgdGhlIGRhdGEgc2xvdCB1bnVzZWQs
CiBkZWNyZW1lbnQgdGhlIGNvdW50IG9mIHN1YnByb2Nlc3NlcywgYW5kIHJldHVybiB0aGUgYWRk
cmVzcyBjaGFpbi4gKi8KQEAgLTQyMTEsOSArNDIwOSwxMCBAQAogCiBpZiAoIXBhcmxpc3QpCiAg
IHsKLSAgcGFybGlzdCA9IHN0b3JlX2dldChyZW1vdGVfbWF4X3BhcmFsbGVsICogc2l6ZW9mKHBh
cmRhdGEpLCBGQUxTRSk7CisgIHBhcmxpc3QgPSBzdG9yZV9nZXQocmVtb3RlX21heF9wYXJhbGxl
bCAqIHNpemVvZihwYXJkYXRhKSwgR0VUX1VOVEFJTlRFRCk7CiAgIGZvciAocG9mZnNldCA9IDA7
IHBvZmZzZXQgPCByZW1vdGVfbWF4X3BhcmFsbGVsOyBwb2Zmc2V0KyspCiAgICAgcGFybGlzdFtw
b2Zmc2V0XS5waWQgPSAwOworICBwYXJwb2xsID0gc3RvcmVfZ2V0KHJlbW90ZV9tYXhfcGFyYWxs
ZWwgKiBzaXplb2Yoc3RydWN0IHBvbGxmZCksIEdFVF9VTlRBSU5URUQpOwogICB9CiAKIC8qIE5v
dyBsb29wIGZvciBlYWNoIHJlbW90ZSBkZWxpdmVyeSAqLwpAQCAtNDQ0MSwxMCArNDQ0MCw2IEBA
CiAKICAgaWYoYWRkci0+cHJvcC5lcnJvcnNfYWRkcmVzcykKICAgICByZXR1cm5fcGF0aCA9IGFk
ZHItPnByb3AuZXJyb3JzX2FkZHJlc3M7Ci0jaWZkZWYgRVhQRVJJTUVOVEFMX1NSUwotICBlbHNl
IGlmKGFkZHItPnByb3Auc3JzX3NlbmRlcikKLSAgICByZXR1cm5fcGF0aCA9IGFkZHItPnByb3Au
c3JzX3NlbmRlcjsKLSNlbmRpZgogICBlbHNlCiAgICAgcmV0dXJuX3BhdGggPSBzZW5kZXJfYWRk
cmVzczsKIApAQCAtNDYwOSw3ICs0NjA0LDcgQEAKICAgICB0aGF0IGl0IGNhbiB1c2UgZWl0aGVy
IG9mIHRoZW0sIHRob3VnaCBpdCBwcmVmZXJzIE9fTk9OQkxPQ0ssIHdoaWNoCiAgICAgZGlzdGlu
Z3Vpc2hlcyBiZXR3ZWVuIEVPRiBhbmQgbm8tbW9yZS1kYXRhLiAqLwogCi0vKiBUaGUgZGF0YSBh
cHBlYXJzIGluIGEgdGltZWx5IG1hbm5lciBhbmQgd2UgYWxyZWFkeSBkaWQgYSBzZWxlY3Qgb24K
Ky8qIFRoZSBkYXRhIGFwcGVhcnMgaW4gYSB0aW1lbHkgbWFubmVyIGFuZCB3ZSBhbHJlYWR5IGRp
ZCBhIHBvbGwgb24KIGFsbCBwaXBlcywgc28gSSBkbyBub3Qgc2VlIGEgcmVhc29uIHRvIHVzZSBu
b24tYmxvY2tpbmcgSU8gaGVyZQogCiAjaWZkZWYgT19OT05CTE9DSwpAQCAtNDY2NSw4ICs0NjYw
LDEwIEBACiAgICAgaW50IGZkID0gcGZkW3BpcGVfd3JpdGVdOwogICAgIGhvc3RfaXRlbSAqaDsK
IAotICAgIC8qIFNldHRpbmcgdGhpcyBnbG9iYWwgaW4gdGhlIHN1YnByb2Nlc3MgbWVhbnMgd2Ug
bmVlZCBuZXZlciBjbGVhciBpdCAqLwotICAgIHRyYW5zcG9ydF9uYW1lID0gdHAtPm5hbWU7Cisg
ICAgLyogU2V0dGluZyB0aGVzZSBnbG9iYWxzIGluIHRoZSBzdWJwcm9jZXNzIG1lYW5zIHdlIG5l
ZWQgbmV2ZXIgY2xlYXIgdGhlbSAqLworICAgIHRyYW5zcG9ydF9uYW1lID0gYWRkci0+dHJhbnNw
b3J0LT5uYW1lOworICAgIGRyaXZlcl9zcmNmaWxlID0gdHAtPnNyY2ZpbGU7CisgICAgZHJpdmVy
X3NyY2xpbmUgPSB0cC0+c3JjbGluZTsKIAogICAgIC8qIFRoZXJlIGFyZSB3ZWlyZCBjaXJjdW1z
dGFuY2VzIGluIHdoaWNoIGxvZ2dpbmcgaXMgZGlzYWJsZWQgKi8KICAgICBmLmRpc2FibGVfbG9n
Z2luZyA9IHRwLT5kaXNhYmxlX2xvZ2dpbmc7CkBAIC00Nzg2LDcgKzQ3ODMsNyBAQAogI2lmZGVm
IFNVUFBPUlRfREFORQogICAgICAgaWYgKHRsc19vdXQuZGFuZV92ZXJpZmllZCkgICAgICAgIHNl
dGZsYWcoYWRkciwgYWZfZGFuZV92ZXJpZmllZCk7CiAjZW5kaWYKLSMgaWZkZWYgRVhQRVJJTUVO
VEFMX1RMU19SRVNVTUUKKyMgaWZuZGVmIERJU0FCTEVfVExTX1JFU1VNRQogICAgICAgaWYgKHRs
c19vdXQucmVzdW1wdGlvbiAmIFJFU1VNRV9VU0VEKSBzZXRmbGFnKGFkZHIsIGFmX3Rsc19yZXN1
bWUpOwogIyBlbmRpZgogCkBAIC00ODk1LDYgKzQ4OTIsMTQgQEAKICAgICAgICAgcm10X2Rsdl9j
aGVja2VkX3dyaXRlKGZkLCAnUicsICcwJywgYmlnX2J1ZmZlciwgcHRyIC0gYmlnX2J1ZmZlcik7
CiAgICAgICAgIH0KIAorICAgICAgaWYgKHRlc3RmbGFnKGFkZHIsIGFmX25ld19jb25uKSB8fCB0
ZXN0ZmxhZyhhZGRyLCBhZl9jb250X2Nvbm4pKQorCXsKKwlERUJVRyhEX2RlbGl2ZXIpIGRlYnVn
X3ByaW50ZigiJXNjb250aW51ZWQtY29ubmVjdGlvblxuIiwKKwkgIHRlc3RmbGFnKGFkZHIsIGFm
X25ld19jb25uKSA/ICJub24tIiA6ICIiKTsKKwliaWdfYnVmZmVyWzBdID0gdGVzdGZsYWcoYWRk
ciwgYWZfbmV3X2Nvbm4pID8gQklUKDEpIDogQklUKDIpOworICAgICAgICBybXRfZGx2X2NoZWNr
ZWRfd3JpdGUoZmQsICdBJywgJzMnLCBiaWdfYnVmZmVyLCAxKTsKKwl9CisKICNpZmRlZiBTVVBQ
T1JUX1NPQ0tTCiAgICAgICBpZiAoTE9HR0lORyhwcm94eSkgJiYgcHJveHlfc2Vzc2lvbikKIAl7
CkBAIC01MTA0LDcgKzUxMDksNyBAQAogdGhpcywgSmFuIDE5OTkuXSBXZSBrbm93IHRoZSBzeW50
YXggaXMgdmFsaWQsIHNvIHRoaXMgY2FuIGJlIGRvbmUgYnkgc2ltcGx5CiByZW1vdmluZyBxdW90
aW5nIGJhY2tzbGFzaGVzIGFuZCBhbnkgdW5xdW90ZWQgZG91YmxlcXVvdGVzLiAqLwogCi10ID0g
YWRkci0+Y2NfbG9jYWxfcGFydCA9IHN0b3JlX2dldChsZW4rMSwgaXNfdGFpbnRlZChhZGRyZXNz
KSk7Cit0ID0gYWRkci0+Y2NfbG9jYWxfcGFydCA9IHN0b3JlX2dldChsZW4rMSwgYWRkcmVzcyk7
CiB3aGlsZShsZW4tLSA+IDApCiAgIHsKICAgaW50IGMgPSAqYWRkcmVzcysrOwpAQCAtNTE0Nyw3
ICs1MTUyLDcgQEAKIAogICBpZiAobmV3X2FkZHJlc3MpCiAgICAgewotICAgIGFkZHJlc3NfaXRl
bSAqbmV3X3BhcmVudCA9IHN0b3JlX2dldChzaXplb2YoYWRkcmVzc19pdGVtKSwgRkFMU0UpOwor
ICAgIGFkZHJlc3NfaXRlbSAqIG5ld19wYXJlbnQgPSBzdG9yZV9nZXQoc2l6ZW9mKGFkZHJlc3Nf
aXRlbSksIEdFVF9VTlRBSU5URUQpOwogICAgICpuZXdfcGFyZW50ID0gKmFkZHI7CiAgICAgYWRk
ci0+cGFyZW50ID0gbmV3X3BhcmVudDsKICAgICBuZXdfcGFyZW50LT5jaGlsZF9jb3VudCA9IDE7
CkBAIC01MzQxLDEwICs1MzQ2LDEwIEBACiAqLwogCiBzdGF0aWMgdm9pZAotcHJpbnRfYWRkcmVz
c19lcnJvcihhZGRyZXNzX2l0ZW0gKmFkZHIsIEZJTEUgKmYsIHVzY2hhciAqdCkKK3ByaW50X2Fk
ZHJlc3NfZXJyb3IoYWRkcmVzc19pdGVtICogYWRkciwgRklMRSAqIGYsIGNvbnN0IHVzY2hhciAq
IHQpCiB7CiBpbnQgY291bnQgPSBVc3RybGVuKHQpOwotdXNjaGFyICpzID0gdGVzdGZsYWcoYWRk
ciwgYWZfcGFzc19tZXNzYWdlKSA/IGFkZHItPm1lc3NhZ2UgOiBOVUxMOwordXNjaGFyICogcyA9
IHRlc3RmbGFnKGFkZHIsIGFmX3Bhc3NfbWVzc2FnZSkgPyBhZGRyLT5tZXNzYWdlIDogTlVMTDsK
IAogaWYgKCFzICYmICEocyA9IGFkZHItPnVzZXJfbWVzc2FnZSkpCiAgIHJldHVybjsKQEAgLTU4
ODQsNyArNTg4OSw3IEBACiAgICAgcmV0dXJuIGNvbnRpbnVlX2Nsb3NlZG93bigpOyAgIC8qIHlp
ZWxkcyBERUxJVkVSX05PVF9BVFRFTVBURUQgKi8KICAgICB9CiAKLSAgLyogTWFrZSBhIEMgc3Ry
ZWFtIG91dCBvZiBpdC4gKi8KKyAgLyogTWFrZSBhIHN0ZGlvIHN0cmVhbSBvdXQgb2YgaXQuICov
CiAKICAgaWYgKCEobWVzc2FnZV9sb2cgPSBmZG9wZW4oZmQsICJhIikpKQogICAgIHsKQEAgLTYz
MzEsNyArNjMzNiw3IEBACiAJICAgIHN0cmluZ19jb3B5bihhZGRyK3N0YXJ0LCBkb20gPyAoZG9t
LTEpIC0gc3RhcnQgOiBlbmQgLSBzdGFydCk7CiAJICBkZWxpdmVyX2RvbWFpbiA9IGRvbSA/IENV
UyBzdHJpbmdfY29weW4oYWRkcitkb20sIGVuZCAtIGRvbSkgOiBDVVMiIjsKIAotCSAgZXZlbnRf
cmFpc2UoZXZlbnRfYWN0aW9uLCBVUyJtc2c6ZmFpbDppbnRlcm5hbCIsIG5ldy0+bWVzc2FnZSk7
CisJICAodm9pZCkgZXZlbnRfcmFpc2UoZXZlbnRfYWN0aW9uLCBVUyJtc2c6ZmFpbDppbnRlcm5h
bCIsIG5ldy0+bWVzc2FnZSwgTlVMTCk7CiAKIAkgIGRlbGl2ZXJfbG9jYWxwYXJ0ID0gc2F2ZV9s
b2NhbDsKIAkgIGRlbGl2ZXJfZG9tYWluID0gc2F2ZV9kb21haW47CkBAIC02NDExLDEwICs2NDE2
LDggQEAKICAgd2hpbGUgKGFkZHJfbmV3KQogICAgIHsKICAgICBpbnQgcmM7Ci0gICAgdXNjaGFy
ICpwOwotICAgIHRyZWVfbm9kZSAqdG5vZGU7Ci0gICAgZGJkYXRhX3JldHJ5ICpkb21haW5fcmV0
cnlfcmVjb3JkOwotICAgIGRiZGF0YV9yZXRyeSAqYWRkcmVzc19yZXRyeV9yZWNvcmQ7CisgICAg
dHJlZV9ub2RlICogdG5vZGU7CisgICAgZGJkYXRhX3JldHJ5ICogZG9tYWluX3JldHJ5X3JlY29y
ZCwgKiBhZGRyZXNzX3JldHJ5X3JlY29yZDsKIAogICAgIGFkZHIgPSBhZGRyX25ldzsKICAgICBh
ZGRyX25ldyA9IGFkZHItPm5leHQ7CkBAIC02NTQwLDE0ICs2NTQzLDE5IEBACiAKICAgICAgIC8q
IFRyZWF0IC9kZXYvbnVsbCBhcyBhIHNwZWNpYWwgY2FzZSBhbmQgYWJhbmRvbiB0aGUgZGVsaXZl
cnkuIFRoaXMKICAgICAgIGF2b2lkcyBoYXZpbmcgdG8gc3BlY2lmeSBhIHVpZCBvbiB0aGUgdHJh
bnNwb3J0IGp1c3QgZm9yIHRoaXMgY2FzZS4KLSAgICAgIEFycmFuZ2UgZm9yIHRoZSB0cmFuc3Bv
cnQgbmFtZSB0byBiZSBsb2dnZWQgYXMgIioqYnlwYXNzZWQqKiIuICovCisgICAgICBBcnJhbmdl
IGZvciB0aGUgdHJhbnNwb3J0IG5hbWUgdG8gYmUgbG9nZ2VkIGFzICIqKmJ5cGFzc2VkKioiLgor
ICAgICAgQ29weSB0aGUgdHJhbnNwb3J0IGZvciB0aGlzIGZhaXJseSB1bnVzdWFsIGNhc2UgcmF0
aGVyIHRoYW4gaGF2aW5nCisgICAgICB0byBtYWtlIGFsbCB0cmFuc3BvcnRzIG11dGFibGUuICov
CiAKICAgICAgIGlmIChVc3RyY21wKGFkZHItPmFkZHJlc3MsICIvZGV2L251bGwiKSA9PSAwKQog
ICAgICAgICB7Ci0gICAgICAgIHVzY2hhciAqc2F2ZSA9IGFkZHItPnRyYW5zcG9ydC0+bmFtZTsK
LSAgICAgICAgYWRkci0+dHJhbnNwb3J0LT5uYW1lID0gVVMiKipieXBhc3NlZCoqIjsKKwl0cmFu
c3BvcnRfaW5zdGFuY2UgKiBzYXZlX3QgPSBhZGRyLT50cmFuc3BvcnQ7CisJdHJhbnNwb3J0X2lu
c3RhbmNlICogdCA9IHN0b3JlX2dldChzaXplb2YoKnQpLCBzYXZlX3QpOworCSp0ID0gKnNhdmVf
dDsKKwl0LT5uYW1lID0gVVMiKipieXBhc3NlZCoqIjsKKwlhZGRyLT50cmFuc3BvcnQgPSB0Owog
ICAgICAgICAodm9pZClwb3N0X3Byb2Nlc3Nfb25lKGFkZHIsIE9LLCBMT0dfTUFJTiwgRVhJTV9E
VFlQRV9UUkFOU1BPUlQsICc9Jyk7Ci0gICAgICAgIGFkZHItPnRyYW5zcG9ydC0+bmFtZSA9IHNh
dmU7CisgICAgICAgIGFkZHItPnRyYW5zcG9ydD0gc2F2ZV90OwogICAgICAgICBjb250aW51ZTsg
ICAvKiB3aXRoIHRoZSBuZXh0IG5ldyBhZGRyZXNzICovCiAgICAgICAgIH0KIApAQCAtNjYyNiw4
ICs2NjM0LDcgQEAKICAgICAvKiBFbnN1cmUgdGhhdCB0aGUgZG9tYWluIGluIHRoZSB1bmlxdWUg
ZmllbGQgaXMgbG93ZXIgY2FzZWQsIGJlY2F1c2UKICAgICBkb21haW5zIGFyZSBhbHdheXMgaGFu
ZGxlZCBjYXNlbGVzc2x5LiAqLwogCi0gICAgcCA9IFVzdHJyY2hyKGFkZHItPnVuaXF1ZSwgJ0An
KTsKLSAgICB3aGlsZSAoKnAgIT0gMCkgeyAqcCA9IHRvbG93ZXIoKnApOyBwKys7IH0KKyAgICBm
b3IgKHVzY2hhciAqIHAgPSBVc3RycmNocihhZGRyLT51bmlxdWUsICdAJyk7ICpwOyBwKyspICpw
ID0gdG9sb3dlcigqcCk7CiAKICAgICBERUJVRyhEX2RlbGl2ZXJ8RF9yb3V0ZSkgZGVidWdfcHJp
bnRmKCJ1bmlxdWUgPSAlc1xuIiwgYWRkci0+dW5pcXVlKTsKIApAQCAtNjgyNCw3ICs2ODMxLDcg
QEAKICAgICAgIGFkZHJfcm91dGUgPSBhZGRyLT5uZXh0OwogCiAgICAgICBkZWxpdmVyX2RvbWFp
biA9IGFkZHItPmRvbWFpbjsgIC8qIHNldCAkZG9tYWluICovCi0gICAgICBpZiAoKHJjID0gbWF0
Y2hfaXNpbmxpc3QoYWRkci0+ZG9tYWluLCAoY29uc3QgdXNjaGFyICoqKSZxdWV1ZV9kb21haW5z
LCAwLAorICAgICAgaWYgKChyYyA9IG1hdGNoX2lzaW5saXN0KGFkZHItPmRvbWFpbiwgQ1VTUyAm
cXVldWVfZG9tYWlucywgMCwKICAgICAgICAgICAgICZkb21haW5saXN0X2FuY2hvciwgYWRkci0+
ZG9tYWluX2NhY2hlLCBNQ0xfRE9NQUlOLCBUUlVFLCBOVUxMKSkKICAgICAgICAgICAgICAgIT0g
T0spCiAgICAgICAgIGlmIChyYyA9PSBERUZFUikKQEAgLTcwOTUsNyArNzEwMiw3IEBACiAgICAg
ZGVidWdfcHJpbnRmKCJkZWZlcnJpbmcgbG9jYWwgZGVsaXZlcmllcyBkdWUgdG8gY29udGludWVk
LXRyYW5zcG9ydFxuIik7CiAgIGlmIChhZGRyX2RlZmVyKQogICAgIHsKLSAgICBhZGRyZXNzX2l0
ZW0gKmFkZHIgPSBhZGRyX2RlZmVyOworICAgIGFkZHJlc3NfaXRlbSAqIGFkZHIgPSBhZGRyX2Rl
ZmVyOwogICAgIHdoaWxlIChhZGRyLT5uZXh0KSBhZGRyID0gYWRkci0+bmV4dDsKICAgICBhZGRy
LT5uZXh0ID0gYWRkcl9sb2NhbDsKICAgICB9CkBAIC03Mzc3LDcgKzczODQsNyBAQAogICAgIHsK
ICAgICAvKiBjb3B5IGFuZCByZWxpbmsgYWRkcmVzc19pdGVtIGFuZCBzZW5kIHJlcG9ydCB3aXRo
IGFsbCBvZiB0aGVtIGF0IG9uY2UgbGF0ZXIgKi8KICAgICBhZGRyZXNzX2l0ZW0gKiBhZGRyX25l
eHQgPSBhZGRyX3NlbmRkc247Ci0gICAgYWRkcl9zZW5kZHNuID0gc3RvcmVfZ2V0KHNpemVvZihh
ZGRyZXNzX2l0ZW0pLCBGQUxTRSk7CisgICAgYWRkcl9zZW5kZHNuID0gc3RvcmVfZ2V0KHNpemVv
ZihhZGRyZXNzX2l0ZW0pLCBHRVRfVU5UQUlOVEVEKTsKICAgICAqYWRkcl9zZW5kZHNuID0gKmE7
CiAgICAgYWRkcl9zZW5kZHNuLT5uZXh0ID0gYWRkcl9uZXh0OwogICAgIH0KQEAgLTgwNzcsNyAr
ODA4NCw3IEBACiAgIGYuZGVsaXZlcl9mcmVlemUgPSBGQUxTRTsKIAogI2lmbmRlZiBESVNBQkxF
X0VWRU5UCi0gICh2b2lkKSBldmVudF9yYWlzZShldmVudF9hY3Rpb24sIFVTIm1zZzpjb21wbGV0
ZSIsIE5VTEwpOworICAodm9pZCkgZXZlbnRfcmFpc2UoZXZlbnRfYWN0aW9uLCBVUyJtc2c6Y29t
cGxldGUiLCBOVUxMLCBOVUxMKTsKICNlbmRpZgogICB9CiAKQEAgLTg0MjYsNyArODQzMyw3IEBA
CiAgIC8qIElmIHRoaXMgd2FzIGEgZmlyc3QgZGVsaXZlcnkgYXR0ZW1wdCwgdW5zZXQgdGhlIGZp
cnN0IHRpbWUgZmxhZywgYW5kCiAgIGVuc3VyZSB0aGF0IHRoZSBzcG9vbCBnZXRzIHVwZGF0ZWQu
ICovCiAKLSAgaWYgKGYuZGVsaXZlcl9maXJzdHRpbWUpCisgIGlmIChmLmRlbGl2ZXJfZmlyc3R0
aW1lICYmICFmLnF1ZXVlXzJzdGFnZSkKICAgICB7CiAgICAgZi5kZWxpdmVyX2ZpcnN0dGltZSA9
IEZBTFNFOwogICAgIHVwZGF0ZV9zcG9vbCA9IFRSVUU7CkBAIC04NTU5LDUyICs4NTY2LDkgQEAK
IH0KIAogCi11c2NoYXIgKgotZGVsaXZlcl9nZXRfc2VuZGVyX2FkZHJlc3MgKHVzY2hhciAqIGlk
KQotewotaW50IHJjOwotdXNjaGFyICogbmV3X3NlbmRlcl9hZGRyZXNzLAotICAgICAgICogc2F2
ZV9zZW5kZXJfYWRkcmVzczsKLUJPT0wgc2F2ZV9xciA9IGYucXVldWVfcnVubmluZzsKLXVzY2hh
ciAqIHNwb29sbmFtZTsKLQotLyogbWFrZSBzcG9vbF9vcGVuX2RhdGFmaWxlIG5vbi1ub2lzeSBv
biBmYWlsICovCi0KLWYucXVldWVfcnVubmluZyA9IFRSVUU7Ci0KLS8qIFNpZGUgZWZmZWN0OiBt
ZXNzYWdlX3N1YmRpciBpcyBzZXQgZm9yIHRoZSAocG9zc2libHkgc3BsaXQpIHNwb29sIGRpcmVj
dG9yeSAqLwotCi1kZWxpdmVyX2RhdGFmaWxlID0gc3Bvb2xfb3Blbl9kYXRhZmlsZShpZCk7Ci1m
LnF1ZXVlX3J1bm5pbmcgPSBzYXZlX3FyOwotaWYgKGRlbGl2ZXJfZGF0YWZpbGUgPCAwKQotICBy
ZXR1cm4gTlVMTDsKLQotLyogU2F2ZSBhbmQgcmVzdG9yZSB0aGUgZ2xvYmFsIHNlbmRlcl9hZGRy
ZXNzLiAgSSdtIG5vdCBzdXJlIGlmIHdlIHNob3VsZAotbm90IHNhdmUvcmVzdG9yZSBhbGwgdGhl
IG90aGVyIGdsb2JhbCB2YXJpYWJsZXMgdG9vLCBiZWNhdXNlCi1zcG9vbF9yZWFkX2hlYWRlcigp
IG1heSBjaGFuZ2UgYWxsIG9mIHRoZW0uIEJ1dCBPVE9ILCB3aGVuIHRoaXMKLWRlbGl2ZXJfZ2V0
X3NlbmRlcl9hZGRyZXNzKCkgZ2V0cyBjYWxsZWQsIHRoZSBjdXJyZW50IG1lc3NhZ2UgaXMgZG9u
ZQotYWxyZWFkeSBhbmQgbm9ib2R5IG5lZWRzIHRoZSBnbG9iYWxzIGFueW1vcmUuIChIUzEyLCAy
MDE1LTA4LTIxKSAqLwotCi1zcG9vbG5hbWUgPSBzdHJpbmdfc3ByaW50ZigiJXMtSCIsIGlkKTsK
LXNhdmVfc2VuZGVyX2FkZHJlc3MgPSBzZW5kZXJfYWRkcmVzczsKLQotcmMgPSBzcG9vbF9yZWFk
X2hlYWRlcihzcG9vbG5hbWUsIFRSVUUsIFRSVUUpOwotCi1uZXdfc2VuZGVyX2FkZHJlc3MgPSBz
ZW5kZXJfYWRkcmVzczsKLXNlbmRlcl9hZGRyZXNzID0gc2F2ZV9zZW5kZXJfYWRkcmVzczsKLQot
aWYgKHJjICE9IHNwb29sX3JlYWRfT0spCi0gIHJldHVybiBOVUxMOwotCi1hc3NlcnQobmV3X3Nl
bmRlcl9hZGRyZXNzKTsKLQotKHZvaWQpY2xvc2UoZGVsaXZlcl9kYXRhZmlsZSk7Ci1kZWxpdmVy
X2RhdGFmaWxlID0gLTE7Ci0KLXJldHVybiBuZXdfc2VuZGVyX2FkZHJlc3M7Ci19Ci0KIAorLyog
Q2FsbGVkIGZyb20gYSBjb21tYW5kbGluZSwgb3IgZnJvbSB0aGUgZGFlbW9uLCB0byBkbyBhIGRl
bGl2ZXJ5LgorV2UgbmVlZCB0byByZWdhaW4gcHJpdnM7IGRvIHRoaXMgYnkgZXhlYyBvZiB0aGUg
ZXhpbSBiaW5hcnkuICovCiAKIHZvaWQKIGRlbGl2ZXJ5X3JlX2V4ZWMoaW50IGV4ZWNfdHlwZSkK
QEAgLTg2MzksNyArODYwMyw3IEBACiAgICAgaWYgKHBpZCA9PSAwKQkvKiBjaGlsZDogd2lsbCBm
b3JrIGFnYWluIHRvIHRvdGFsbHkgZGlzY29ubmVjdCAqLwogICAgICAgewogICAgICAgc210cF9w
cm94eV90bHMoY3V0dGhyb3VnaC5jY3R4LnRsc19jdHgsIGJpZ19idWZmZXIsIGJpZ19idWZmZXJf
c2l6ZSwKLQkJICAgICAgcGZkLCA1KjYwKTsKKwkJICAgICAgcGZkLCA1KjYwLCBjdXR0aHJvdWdo
Lmhvc3QubmFtZSk7CiAgICAgICAvKiBkb2VzIG5vdCByZXR1cm4gKi8KICAgICAgIH0KIApkaWZm
IC11ciBleGltLm9yaWcvc3JjL2RpcmVjdG9yeS5jIGV4aW0vc3JjL2RpcmVjdG9yeS5jCi0tLSBl
eGltLm9yaWcvc3JjL2RpcmVjdG9yeS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICsw
MzAwCisrKyBleGltL3NyYy9kaXJlY3RvcnkuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAw
MCArMDMwMApAQCAtMiw4ICsyLDggQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRy
YW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIw
MTAgLSAyMDIyICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5
OTUgLSAyMDA5ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMTAg
LSAyMDE4ICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBh
bmQgZGlzdHJpYnV0aW9uLiAqLwogCiAjaW5jbHVkZSAiZXhpbS5oIgpAQCAtNDQsNiArNDQsOSBA
QAogc3RydWN0IHN0YXQgc3RhdGJ1ZjsKIHVzY2hhciAqIHBhdGg7CiAKK2lmIChpc190YWludGVk
KG5hbWUpKSAKKyAgeyBwID0gVVMiY3JlYXRlIjsgcGF0aCA9IFVTIG5hbWU7IGVycm5vID0gRVJS
Tk9fVEFJTlQ7IGdvdG8gYmFkOyB9CisKIGlmIChwYXJlbnQpCiAgIHsKICAgcGF0aCA9IHN0cmlu
Z19zcHJpbnRmKCIlcyVzJXMiLCBwYXJlbnQsIFVTIi8iLCBuYW1lKTsKQEAgLTg1LDcgKzg4LDcg
QEAKIAogYmFkOgogICBpZiAocGFuaWMpIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNf
RElFLAotICAgICJGYWlsZWQgdG8gJXMgZGlyZWN0b3J5IFwiJXNcIjogJXNcbiIsIHAsIHBhdGgs
IHN0cmVycm9yKGVycm5vKSk7CisgICAgIkZhaWxlZCB0byAlcyBkaXJlY3RvcnkgXCIlc1wiOiAl
c1xuIiwgcCwgcGF0aCwgZXhpbV9lcnJzdHIoZXJybm8pKTsKICAgcmV0dXJuIEZBTFNFOwogfQog
CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvZGtpbS5jIGV4aW0vc3JjL2RraW0uYwotLS0gZXhpbS5v
cmlnL3NyYy9ka2ltLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4
aW0vc3JjL2RraW0uYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4
ICsyLDggQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAg
ICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwog
CisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAv
KiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLCAxOTk1IC0gMjAxOCAqLwot
LyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhl
IGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwog
CiAvKiBDb2RlIGZvciBES0lNIHN1cHBvcnQuIE90aGVyIERLSU0gcmVsZXZhbnQgY29kZSBpcyBp
bgpAQCAtNTAsMTEgKzUwLDExIEBACiBkbnNfYW5zd2VyICogZG5zYSA9IHN0b3JlX2dldF9kbnNf
YW5zd2VyKCk7CiBkbnNfc2NhbiBkbnNzOwogcm1hcmsgcmVzZXRfcG9pbnQgPSBzdG9yZV9tYXJr
KCk7Ci1nc3RyaW5nICogZyA9IE5VTEw7Citnc3RyaW5nICogZyA9IHN0cmluZ19nZXRfdGFpbnRl
ZCgyNTYsIEdFVF9UQUlOVEVEKTsKIAogbG9va3VwX2Ruc3NlY19hdXRoZW50aWNhdGVkID0gTlVM
TDsKIGlmIChkbnNfbG9va3VwKGRuc2EsIG5hbWUsIFRfVFhULCBOVUxMKSAhPSBETlNfU1VDQ0VF
RCkKLSAgcmV0dXJuIE5VTEw7CS8qWFhYIGJldHRlciBlcnJvciBkZXRhaWw/ICBsb2dnaW5nPyAq
LworICBnb3RvIGJhZDsKIAogLyogU2VhcmNoIGZvciBUWFQgcmVjb3JkICovCiAKQEAgLTYyLDEy
ICs2Miw4IEBACiAgICAgIHJyOwogICAgICByciA9IGRuc19uZXh0X3JyKGRuc2EsICZkbnNzLCBS
RVNFVF9ORVhUKSkKICAgaWYgKHJyLT50eXBlID09IFRfVFhUKQotICAgIHsKLSAgICBpbnQgcnJf
b2Zmc2V0ID0gMDsKLQotICAgIC8qIENvcHkgcmVjb3JkIGNvbnRlbnQgdG8gdGhlIGFuc3dlciBi
dWZmZXIgKi8KLQotICAgIHdoaWxlIChycl9vZmZzZXQgPCByci0+c2l6ZSkKKyAgICB7CQkJLyog
Q29weSByZWNvcmQgY29udGVudCB0byB0aGUgYW5zd2VyIGJ1ZmZlciAqLworICAgIGZvciAoaW50
IHJyX29mZnNldCA9IDA7IHJyX29mZnNldCA8IHJyLT5zaXplOyApCiAgICAgICB7CiAgICAgICB1
c2NoYXIgbGVuID0gcnItPmRhdGFbcnJfb2Zmc2V0KytdOwogCkBAIC03OCwxOCArNzQsMjAgQEAK
ICAgICAgIHJyX29mZnNldCArPSBsZW47CiAgICAgICB9CiAKLSAgICAvKiBjaGVjayBpZiB0aGlz
IGxvb2tzIGxpa2UgYSBES0lNIHJlY29yZCAqLworICAgIC8qIENoZWNrIGlmIHRoaXMgbG9va3Mg
bGlrZSBhIERLSU0gcmVjb3JkICovCiAgICAgaWYgKFVzdHJuY21wKGctPnMsICJ2PSIsIDIpICE9
IDAgfHwgc3RybmNhc2VjbXAoQ1MgZy0+cywgInY9ZGtpbSIsIDYpID09IDApCiAgICAgICB7Cisg
ICAgICBzdG9yZV9mcmVlX2Ruc19hbnN3ZXIoZG5zYSk7CiAgICAgICBnc3RyaW5nX3JlbGVhc2Vf
dW51c2VkKGcpOwogICAgICAgcmV0dXJuIHN0cmluZ19mcm9tX2dzdHJpbmcoZyk7CiAgICAgICB9
CiAKLSAgICBpZiAoZykgZy0+cHRyID0gMDsJCS8qIG92ZXJ3cml0ZSBwcmV2aW91cyByZWNvcmQg
Ki8KKyAgICBnLT5wdHIgPSAwOwkJLyogb3ZlcndyaXRlIHByZXZpb3VzIHJlY29yZCAqLwogICAg
IH0KIAogYmFkOgogc3RvcmVfcmVzZXQocmVzZXRfcG9pbnQpOworc3RvcmVfZnJlZV9kbnNfYW5z
d2VyKGRuc2EpOwogcmV0dXJuIE5VTEw7CS8qWFhYIGJldHRlciBlcnJvciBkZXRhaWw/ICBsb2dn
aW5nPyAqLwogfQogCkBAIC0xMDksMTIgKzEwNywxNSBAQAogewogZGtpbV9leGltX2luaXQoKTsK
IAotLyogVGhlcmUgaXMgYSBzdG9yZS1yZXNldCBiZXR3ZWVuIGhlYWRlciAmIGJvZHkgcmVjZXB0
aW9uCi1zbyBjYW5ub3QgdXNlIHRoZSBtYWluIHBvb2wuIEFueSBhbGxvY3MgZG9uZSBieSBFeGlt
Ci1tZW1vcnktaGFuZGxpbmcgbXVzdCB1c2UgdGhlIHBlcm0gcG9vbC4gKi8KKy8qIFRoZXJlIGlz
IGEgc3RvcmUtcmVzZXQgYmV0d2VlbiBoZWFkZXIgJiBib2R5IHJlY2VwdGlvbiBmb3IgdGhlIG1h
aW4gcG9vbAorKGFjdHVhbGx5LCBhZnRlciBldmVyeSBoZWFkZXIgbGluZSkgc28gY2Fubm90IHVz
ZSB0aGF0IGFzIHdlIG5lZWQgdGhlIGRhdGEgd2UKK3N0b3JlIHBlci1oZWFkZXIsIGR1cmluZyBo
ZWFkZXIgcHJvY2Vzc2luZywgYXQgdGhlIGVuZCBvZiBib2R5IHJlY2VwdGlvbgorZm9yIGV2YWx1
YXRpbmcgdGhlIHNpZ25hdHVyZS4gIEFueSBhbGxvY3MgZG9uZSBmb3IgZGtpbSB2ZXJpZnkKK21l
bW9yeS1oYW5kbGluZyBtdXN0IHVzZSBhIGRpZmZlcmVudCBwb29sLiAgV2UgdXNlIGEgc2VwYXJh
dGUgb25lIHRoYXQgd2UKK2NhbiByZXNldCBwZXIgbWVzc2FnZS4gKi8KIAogZGtpbV92ZXJpZnlf
b2xkcG9vbCA9IHN0b3JlX3Bvb2w7Ci1zdG9yZV9wb29sID0gUE9PTF9QRVJNOworc3RvcmVfcG9v
bCA9IFBPT0xfTUVTU0FHRTsKIAogLyogRnJlZSBwcmV2aW91cyBjb250ZXh0IGlmIHRoZXJlIGlz
IG9uZSAqLwogCkBAIC0xMjcsMTkgKzEyOCwyMiBAQAogZGtpbV9jb2xsZWN0X2lucHV0ID0gZGtp
bV92ZXJpZnlfY3R4ID8gREtJTV9NQVhfU0lHTkFUVVJFUyA6IDA7CiBka2ltX2NvbGxlY3RfZXJy
b3IgPSBOVUxMOwogCi0vKiBTdGFydCBmZWVkIHVwIHdpdGggYW55IGNhY2hlZCBkYXRhICovCi1y
ZWNlaXZlX2dldF9jYWNoZSgpOworLyogU3RhcnQgZmVlZCB1cCB3aXRoIGFueSBjYWNoZWQgZGF0
YSwgYnV0IGxpbWl0ZWQgdG8gbWVzc2FnZSBkYXRhICovCityZWNlaXZlX2dldF9jYWNoZShjaHVu
a2luZ19zdGF0ZSA9PSBDSFVOS0lOR19MQVNUCisJCSAgPyBjaHVua2luZ19kYXRhX2xlZnQgOiBH
RVRDX0JVRkZFUl9VTkxJTUlURUQpOwogCiBzdG9yZV9wb29sID0gZGtpbV92ZXJpZnlfb2xkcG9v
bDsKIH0KIAogCisvKiBTdWJtaXQgYSBjaHVuayBvZiBkYXRhIGZvciB2ZXJpZmljYXRpb24gaW5w
dXQuCitPbmx5IHVzZSB0aGUgZGF0YSB3aGVuIHRoZSBmZWVkIGlzIGFjdGl2YXRlZC4gKi8KIHZv
aWQKIGRraW1fZXhpbV92ZXJpZnlfZmVlZCh1c2NoYXIgKiBkYXRhLCBpbnQgbGVuKQogewogaW50
IHJjOwogCi1zdG9yZV9wb29sID0gUE9PTF9QRVJNOworc3RvcmVfcG9vbCA9IFBPT0xfTUVTU0FH
RTsKIGlmICggIGRraW1fY29sbGVjdF9pbnB1dAogICAgJiYgKHJjID0gcGRraW1fZmVlZChka2lt
X3ZlcmlmeV9jdHgsIGRhdGEsIGxlbikpICE9IFBES0lNX09LKQogICB7CkBAIC0zMDUsNyArMzA5
LDcgQEAKIGdzdHJpbmcgKiBnID0gTlVMTDsKIGNvbnN0IHVzY2hhciAqIGVycnN0ciA9IE5VTEw7
CiAKLXN0b3JlX3Bvb2wgPSBQT09MX1BFUk07CitzdG9yZV9wb29sID0gUE9PTF9NRVNTQUdFOwog
CiAvKiBEZWxldGUgZXZlbnR1YWwgcHJldmlvdXMgc2lnbmF0dXJlIGNoYWluICovCiAKZGlmZiAt
dXIgZXhpbS5vcmlnL3NyYy9ka2ltX3RyYW5zcG9ydC5jIGV4aW0vc3JjL2RraW1fdHJhbnNwb3J0
LmMKLS0tIGV4aW0ub3JpZy9zcmMvZGtpbV90cmFuc3BvcnQuYwkyMDIzLTA2LTA0IDE2OjIyOjA1
LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvZGtpbV90cmFuc3BvcnQuYwkyMDIyLTA2LTIz
IDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw2ICsyLDcgQEAKICogICAgIEV4aW0gLSBh
biBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBF
eGltIE1haW50YWluZXJzIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBD
YW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRp
dGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKQEAgLTE2OSw3ICsxNzAsNyBAQAog
I2lmZGVmIEVYUEVSSU1FTlRBTF9BUkMKIGlmIChka2ltLT5hcmNfc2lnbnNwZWMpCQkJLyogUHJl
cGVuZCBBUkMgaGVhZGVycyAqLwogICB7Ci0gIHVzY2hhciAqIGU7CisgIHVzY2hhciAqIGUgPSBO
VUxMOwogICBpZiAoIShka2ltX3NpZ25hdHVyZSA9IGFyY19zaWduKGRraW0tPmFyY19zaWduc3Bl
YywgZGtpbV9zaWduYXR1cmUsICZlKSkpCiAgICAgewogICAgICplcnIgPSBlOwpkaWZmIC11ciBl
eGltLm9yaWcvc3JjL2RtYXJjLmMgZXhpbS9zcmMvZG1hcmMuYwotLS0gZXhpbS5vcmlnL3NyYy9k
bWFyYy5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9k
bWFyYy5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBA
QAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBETUFS
QyBzdXBwb3J0LgorICAgQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDE5IC0g
MjAyMgogICAgQ29weXJpZ2h0IChjKSBUb2RkIEx5b25zIDx0bHlvbnNAZXhpbS5vcmc+IDIwMTIg
LSAyMDE0Ci0gICBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMTkKICAgIExp
Y2Vuc2U6IEdQTCAqLwogCiAvKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTIsIDIwMTMsIFRo
ZSBUcnVzdGVkIERvbWFpbiBQcm9qZWN0OwpAQCAtNTEsMjEgKzUxLDMyIEBACiAgIHsgVVMicmVq
ZWN0IiwgICAgIERNQVJDX1JFQ09SRF9QX1JFSkVDVCB9LAogICB7IE5VTEwsICAgICAgICAgICAw
IH0KIH07CisKKworZ3N0cmluZyAqCitkbWFyY192ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykK
K3sKK3JldHVybiBzdHJpbmdfZm10X2FwcGVuZChnLCAiTGlicmFyeSB2ZXJzaW9uOiBkbWFyYzog
Q29tcGlsZTogJWQuJWQuJWQuJWRcbiIsCisgICAgKE9QRU5ETUFSQ19MSUJfVkVSU0lPTiAmIDB4
ZmYwMDAwMDApID4+IDI0LCAoT1BFTkRNQVJDX0xJQl9WRVJTSU9OICYgMHgwMGZmMDAwMCkgPj4g
MTYsCisgICAgKE9QRU5ETUFSQ19MSUJfVkVSU0lPTiAmIDB4MDAwMGZmMDApID4+IDgsIE9QRU5E
TUFSQ19MSUJfVkVSU0lPTiAmIDB4MDAwMDAwZmYpOworfQorCisKIC8qIEFjY2VwdCBhbiBlcnJv
cl9ibG9jayBzdHJ1Y3QsIGluaXRpYWxpemUgaWYgZW1wdHksIHBhcnNlIHRvIHRoZQotICogZW5k
LCBhbmQgYXBwZW5kIHRoZSB0d28gc3RyaW5ncyBwYXNzZWQgdG8gaXQuICBVc2VkIGZvciBhZGRp
bmcKLSAqIHZhcmlhYmxlIGFtb3VudHMgb2YgdmFsdWU6cGFpciBkYXRhIHRvIHRoZSBmb3JlbnNp
YyBlbWFpbHMuICovCitlbmQsIGFuZCBhcHBlbmQgdGhlIHR3byBzdHJpbmdzIHBhc3NlZCB0byBp
dC4gIFVzZWQgZm9yIGFkZGluZwordmFyaWFibGUgYW1vdW50cyBvZiB2YWx1ZTpwYWlyIGRhdGEg
dG8gdGhlIGZvcmVuc2ljIGVtYWlscy4gKi8KIAogc3RhdGljIGVycm9yX2Jsb2NrICoKIGFkZF90
b19lYmxvY2soZXJyb3JfYmxvY2sgKmVibG9jaywgdXNjaGFyICp0MSwgdXNjaGFyICp0MikKIHsK
IGVycm9yX2Jsb2NrICplYiA9IHN0b3JlX21hbGxvYyhzaXplb2YoZXJyb3JfYmxvY2spKTsKLWlm
IChlYmxvY2sgPT0gTlVMTCkKK2lmICghZWJsb2NrKQogICBlYmxvY2sgPSBlYjsKIGVsc2UKICAg
ewogICAvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIGVibG9jayBzdHJ1Y3QgYW5kIHBvaW50IGl0IGF0
IGViICovCiAgIGVycm9yX2Jsb2NrICp0bXAgPSBlYmxvY2s7Ci0gIHdoaWxlKHRtcC0+bmV4dCAh
PSBOVUxMKQorICB3aGlsZSh0bXAtPm5leHQpCiAgICAgdG1wID0gdG1wLT5uZXh0OwogICB0bXAt
Pm5leHQgPSBlYjsKICAgfQpAQCAtNzYsOCArODcsOCBAQAogfQogCiAvKiBkbWFyY19pbml0IHNl
dHMgdXAgYSBjb250ZXh0IHRoYXQgY2FuIGJlIHJlLXVzZWQgZm9yIHNldmVyYWwKLSAgIG1lc3Nh
Z2VzIG9uIHRoZSBzYW1lIFNNVFAgY29ubmVjdGlvbiAodGhhdCBjb21lIGZyb20gdGhlCi0gICBz
YW1lIGhvc3Qgd2l0aCB0aGUgc2FtZSBIRUxPIHN0cmluZykgKi8KK21lc3NhZ2VzIG9uIHRoZSBz
YW1lIFNNVFAgY29ubmVjdGlvbiAodGhhdCBjb21lIGZyb20gdGhlCitzYW1lIGhvc3Qgd2l0aCB0
aGUgc2FtZSBIRUxPIHN0cmluZykgKi8KIAogaW50CiBkbWFyY19pbml0KCkKQEAgLTIxOCw3ICsy
MjksMTEgQEAKICAgZm9yIChkbnNfcmVjb3JkICogcnIgPSBkbnNfbmV4dF9ycihkbnNhLCAmZG5z
cywgUkVTRVRfQU5TV0VSUyk7IHJyOwogICAgICAgIHJyID0gZG5zX25leHRfcnIoZG5zYSwgJmRu
c3MsIFJFU0VUX05FWFQpKQogICAgIGlmIChyci0+dHlwZSA9PSBUX1RYVCAmJiByci0+c2l6ZSA+
IDMpCi0gICAgICByZXR1cm4gc3RyaW5nX2NvcHluKFVTIHJyLT5kYXRhLCByci0+c2l6ZSk7Cisg
ICAgICB7CisgICAgICBzdG9yZV9mcmVlX2Ruc19hbnN3ZXIoZG5zYSk7CisgICAgICByZXR1cm4g
c3RyaW5nX2NvcHluX3RhaW50KFVTIHJyLT5kYXRhLCByci0+c2l6ZSwgR0VUX1RBSU5URUQpOwor
ICAgICAgfQorc3RvcmVfZnJlZV9kbnNfYW5zd2VyKGRuc2EpOwogcmV0dXJuIE5VTEw7CiB9CiAK
QEAgLTIyNiw2ICsyNDEsOCBAQAogc3RhdGljIGludAogZG1hcmNfd3JpdGVfaGlzdG9yeV9maWxl
KCkKIHsKK2ludCBoaXN0b3J5X2ZpbGVfZmQ7Citzc2l6ZV90IHdyaXR0ZW5fbGVuOwogaW50IHRt
cF9hbnM7CiB1X2NoYXIgKipydWE7IC8qIGFnZ3JlZ2F0ZSByZXBvcnQgYWRkcmVzc2VlcyAqLwog
dXNjaGFyICpoaXN0b3J5X2J1ZmZlciA9IE5VTEw7CkBAIC0yMzUsNiArMjUyLDE0IEBACiAgIERF
QlVHKERfcmVjZWl2ZSkgZGVidWdfcHJpbnRmKCJETUFSQyBoaXN0b3J5IGZpbGUgbm90IHNldFxu
Iik7CiAgIHJldHVybiBETUFSQ19ISVNUX0RJU0FCTEVEOwogICB9CitoaXN0b3J5X2ZpbGVfZmQg
PSBsb2dfb3Blbl9hc19leGltKGRtYXJjX2hpc3RvcnlfZmlsZSk7CisKK2lmIChoaXN0b3J5X2Zp
bGVfZmQgPCAwKQorICB7CisgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUMsICJmYWls
dXJlIHRvIGNyZWF0ZSBETUFSQyBoaXN0b3J5IGZpbGU6ICVzIiwKKwkJCSAgIGRtYXJjX2hpc3Rv
cnlfZmlsZSk7CisgIHJldHVybiBETUFSQ19ISVNUX0ZJTEVfRVJSOworICB9CiAKIC8qIEdlbmVy
YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgaGlzdG9yeSBmaWxlICovCiBoaXN0b3J5X2J1ZmZlciA9
IHN0cmluZ19zcHJpbnRmKApAQCAtMjg2LDI4ICszMTEsMTYgQEAKICAgfQogZWxzZQogICB7Ci0g
IHNzaXplX3Qgd3JpdHRlbl9sZW47Ci0gIGNvbnN0IGludCBoaXN0b3J5X2ZpbGVfZmQgPSBsb2df
b3Blbl9hc19leGltKGRtYXJjX2hpc3RvcnlfZmlsZSk7Ci0KLSAgaWYgKGhpc3RvcnlfZmlsZV9m
ZCA8IDApCi0gICAgewotICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUMsICJmYWls
dXJlIHRvIGNyZWF0ZSBETUFSQyBoaXN0b3J5IGZpbGU6ICVzIiwKLQkJCSAgIGRtYXJjX2hpc3Rv
cnlfZmlsZSk7Ci0gICAgcmV0dXJuIERNQVJDX0hJU1RfRklMRV9FUlI7Ci0gICAgfQotCiAgIHdy
aXR0ZW5fbGVuID0gd3JpdGVfdG9fZmRfYnVmKGhpc3RvcnlfZmlsZV9mZCwKIAkJCQloaXN0b3J5
X2J1ZmZlciwKIAkJCQlVc3RybGVuKGhpc3RvcnlfYnVmZmVyKSk7Ci0KLSAgKHZvaWQpY2xvc2Uo
aGlzdG9yeV9maWxlX2ZkKTsKLQotICBpZiAod3JpdHRlbl9sZW4gPD0gMCkKKyAgaWYgKHdyaXR0
ZW5fbGVuID09IDApCiAgICAgewogICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUMs
ICJmYWlsdXJlIHRvIHdyaXRlIHRvIERNQVJDIGhpc3RvcnkgZmlsZTogJXMiLAogCQkJICAgZG1h
cmNfaGlzdG9yeV9maWxlKTsKICAgICByZXR1cm4gRE1BUkNfSElTVF9XUklURV9FUlI7CiAgICAg
fQorICAodm9pZCljbG9zZShoaXN0b3J5X2ZpbGVfZmQpOwogICB9CiByZXR1cm4gRE1BUkNfSElT
VF9PSzsKIH0KQEAgLTUxNyw3ICs1MzAsNyBAQAogICAvKiBDYW4ndCB1c2UgZXhpbSdzIHN0cmlu
ZyBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHNvIGFsbG9jYXRlIG1lbW9yeQogICBmb3IgbGlib3Bl
bmRtYXJjIHVzaW5nIGl0cyBtYXggaG9zdG5hbWUgbGVuZ3RoIGRlZmluaXRpb24uICovCiAKLSAg
ZG1hcmNfZG9tYWluID0gc3RvcmVfZ2V0KERNQVJDX01BWEhPU1ROQU1FTEVOLCBUUlVFKTsKKyAg
ZG1hcmNfZG9tYWluID0gc3RvcmVfZ2V0KERNQVJDX01BWEhPU1ROQU1FTEVOLCBHRVRfVEFJTlRF
RCk7CiAgIGxpYmRtX3N0YXR1cyA9IG9wZW5kbWFyY19wb2xpY3lfZmV0Y2hfdXRpbGl6ZWRfZG9t
YWluKGRtYXJjX3BjdHgsCiAgICAgZG1hcmNfZG9tYWluLCBETUFSQ19NQVhIT1NUTkFNRUxFTi0x
KTsKICAgc3RvcmVfcmVsZWFzZV9hYm92ZShkbWFyY19kb21haW4gKyBVc3RybGVuKGRtYXJjX2Rv
bWFpbikrMSk7CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvZG1hcmMuaCBleGltL3NyYy9kbWFyYy5o
Ci0tLSBleGltLm9yaWcvc3JjL2RtYXJjLmgJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAg
KzAzMDAKKysrIGV4aW0vc3JjL2RtYXJjLmgJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAg
KzAzMDAKQEAgLTMsNiArMyw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwogCiAvKiBFeHBlcmltZW50YWwgRE1BUkMgc3VwcG9ydC4KKyAgIENv
cHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMSAtIDIwMjIKICAgIENvcHlyaWdo
dCAoYykgVG9kZCBMeW9ucyA8dGx5b25zQGV4aW0ub3JnPiAyMDEyIC0gMjAxNAogICAgTGljZW5z
ZTogR1BMICovCiAKQEAgLTE3LDE1ICsxOCwxMyBAQAogIyBlbmRpZiAvKiBTVVBQT1JUX1NQRiAq
LwogCiAvKiBwcm90b3R5cGVzICovCitnc3RyaW5nICogZG1hcmNfdmVyc2lvbl9yZXBvcnQoZ3N0
cmluZyAqKTsKIGludCBkbWFyY19pbml0KCk7CiBpbnQgZG1hcmNfc3RvcmVfZGF0YShoZWFkZXJf
bGluZSAqKTsKIGludCBkbWFyY19wcm9jZXNzKCk7CiB1c2NoYXIgKmRtYXJjX2V4aW1fZXhwYW5k
X3F1ZXJ5KGludCk7CiB1c2NoYXIgKmRtYXJjX2V4aW1fZXhwYW5kX2RlZmF1bHRzKGludCk7Ci11
c2NoYXIgKmRtYXJjX2F1dGhfcmVzdWx0c19oZWFkZXIoaGVhZGVyX2xpbmUgKix1c2NoYXIgKik7
Ci1zdGF0aWMgaW50IGRtYXJjX3dyaXRlX2hpc3RvcnlfZmlsZSgpOwogCi0jZGVmaW5lIERNQVJD
X0FSX0hFQURFUiAgICAgICAgVVMiQXV0aGVudGljYXRpb24tUmVzdWx0czoiCiAjZGVmaW5lIERN
QVJDX1ZFUklGWV9TVEFUVVMgICAgMQogCiAjZGVmaW5lIERNQVJDX0hJU1RfT0sgICAgICAgICAg
MQrQotC+0LvRjNC60L4g0LIgZXhpbS9zcmM6IGRuc2JsLmMKZGlmZiAtdXIgZXhpbS5vcmlnL3Ny
Yy9kbnMuYyBleGltL3NyYy9kbnMuYwotLS0gZXhpbS5vcmlnL3NyYy9kbnMuYwkyMDIzLTA2LTA0
IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvZG5zLmMJMjAyMi0wNi0yMyAx
Njo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4g
SW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhp
bSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5
IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBN
YWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25z
IG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBGdW5jdGlvbnMgZm9yIGludGVyZmFj
aW5nIHdpdGggdGhlIEROUy4gKi8KQEAgLTI1OCw3ICsyNTgsNyBAQAogICB7CiAgIGludCB2Nls0
XTsKIAotICBnID0gc3RyaW5nX2dldF90YWludGVkKDMyLCBpc190YWludGVkKHN0cmluZykpOwor
ICBnID0gc3RyaW5nX2dldF90YWludGVkKDMyLCBzdHJpbmcpOwogICAodm9pZClob3N0X2F0b24o
c3RyaW5nLCB2Nik7CiAKICAgLyogVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIElQdjYg
cmV2ZXJzZSBsb29rdXAgd2FzIHRvIGludmVydCBlYWNoCkBAIC0zMzQsNyArMzM0LDYgQEAKICNp
ZmRlZiBycl90cmFjZQogIyBkZWZpbmUgVFJBQ0UgREVCVUcoRF9kbnMpCiAjZWxzZQotdHJhY2Ug
PSB0cmFjZTsKICMgZGVmaW5lIFRSQUNFIGlmIChGQUxTRSkKICNlbmRpZgogCkBAIC02MzgsNyAr
NjM3LDcgQEAKICAgZSA9IHByZXZpb3VzLT5kYXRhLnB0cjsKIGVsc2UKICAgewotICBlID0gc3Rv
cmVfZ2V0X3Blcm0oRE5TX0ZBSUxOT0RFX1NJWkUsIGlzX3RhaW50ZWQobmFtZSkpOworICBlID0g
c3RvcmVfZ2V0X3Blcm0oRE5TX0ZBSUxOT0RFX1NJWkUsIG5hbWUpOwogICBuZXcgPSAodm9pZCAq
KShlKzEpOwogICBkbnNfZmFpbF90YWcobmV3LT5uYW1lLCBuYW1lLCB0eXBlKTsKICAgbmV3LT5k
YXRhLnB0ciA9IGU7CkBAIC02NzIsMTMgKzY3MSwxMCBAQAogdmFsID0gZS0+ZGF0YS52YWw7CiBy
YyA9IGUtPmV4cGlyeSAmJiBlLT5leHBpcnkgPD0gdGltZShOVUxMKSA/IC0xIDogdmFsOwogCi1E
RUJVRyhEX2RucykgZGVidWdfcHJpbnRmKCJETlMgbG9va3VwIG9mICUuMjU1cy0lczogJXNjYWNo
ZWQgdmFsdWUgJXMlc1xuIiwKK0RFQlVHKERfZG5zKSBkZWJ1Z19wcmludGYoIkROUyBsb29rdXAg
b2YgJS4yNTVzICglcyk6ICVzY2FjaGVkIHZhbHVlICVzJXNcbiIsCiAgIG5hbWUsIGRuc190ZXh0
X3R5cGUodHlwZSksCiAgIHJjID09IC0xID8gIiIgOiAidXNpbmcgIiwKLSAgICB2YWwgPT0gRE5T
X05PTUFUQ0ggPyAiRE5TX05PTUFUQ0giIDoKLSAgICB2YWwgPT0gRE5TX05PREFUQSA/ICJETlNf
Tk9EQVRBIiA6Ci0gICAgdmFsID09IEROU19BR0FJTiA/ICJETlNfQUdBSU4iIDoKLSAgICB2YWwg
PT0gRE5TX0ZBSUwgPyAiRE5TX0ZBSUwiIDogIj8/IiwKKyAgZG5zX3JjX25hbWVzW3ZhbF0sCiAg
IHJjID09IC0xID8gIiBwYXN0IHZhbGlkIHRpbWUiIDogIiIpOwogCiByZXR1cm4gcmM7CkBAIC02
OTUsOSArNjkxLDExIEBACiByZXBsYWNlbWVudCB2YWx1ZS4gKFRoZSBvbmx5IHdheSB0byBmaXgg
dGhpcyBwcm9wZXJseSB3b3VsZCBiZSB0bwogcmUtaW1wbGVtZW50IHJlc19zZWFyY2goKSBhbmQg
cmVzX3F1ZXJ5KCkgc28gdGhhdCB0aGV5IGRvbid0IG11ZGRsZSB0aGVpcgogc3VjY2VzcyBhbmQg
cGFja2V0IGxlbmd0aCByZXR1cm4gdmFsdWVzLikgRm9yIGFkZGVkIHNhZmV0eSB3ZSBvbmx5IHJl
c2V0Ci10aGUgcGFja2V0IGxlbmd0aCBpZiB0aGUgcGFja2V0IGhlYWRlciBsb29rcyBwbGF1c2li
bGUuICovCit0aGUgcGFja2V0IGxlbmd0aCBpZiB0aGUgcGFja2V0IGhlYWRlciBsb29rcyBwbGF1
c2libGUuCiAKLXN0YXRpYyB2b2lkCitSZXR1cm4gVFJVRSBpZmYgaXQgc2VlbWVkIG9rICovCisK
K3N0YXRpYyBCT09MCiBmYWtlX2Ruc2FfbGVuX2Zvcl9mYWlsKGRuc19hbnN3ZXIgKiBkbnNhLCBp
bnQgdHlwZSkKIHsKIGNvbnN0IEhFQURFUiAqIGggPSAoY29uc3QgSEVBREVSICopZG5zYS0+YW5z
d2VyOwpAQCAtNzE0LDcgKzcxMiwxMSBAQAogICBERUJVRyhEX2RucykgZGVidWdfcHJpbnRmKCJm
YWtpbmcgcmVzX3NlYXJjaCglcykgcmVzcG9uc2UgbGVuZ3RoIGFzICVkXG4iLAogICAgIGRuc190
ZXh0X3R5cGUodHlwZSksIChpbnQpc2l6ZW9mKGRuc2EtPmFuc3dlcikpOwogICBkbnNhLT5hbnN3
ZXJsZW4gPSBzaXplb2YoZG5zYS0+YW5zd2VyKTsKKyAgcmV0dXJuIFRSVUU7CiAgIH0KK0RFQlVH
KERfZG5zKSBkZWJ1Z19wcmludGYoIkROUzogY291bGRuJ3QgZmFrZSBkbnNhIGxlblxuIik7Cisv
KiBNYXliZSB3ZSBzaG91bGQganVzdCBkbyBhIHNlY29uZCBsb29rdXAgZm9yIGFuIFNPQT8gKi8K
K3JldHVybiBGQUxTRTsKIH0KIAogCkBAIC03MjgsMzcgKzczMCwzNyBAQAogewogZG5zX3NjYW4g
ZG5zczsKIAotZmFrZV9kbnNhX2xlbl9mb3JfZmFpbChkbnNhLCB0eXBlKTsKK2lmIChmYWtlX2Ru
c2FfbGVuX2Zvcl9mYWlsKGRuc2EsIHR5cGUpKQorICBmb3IgKGRuc19yZWNvcmQgKiByciA9IGRu
c19uZXh0X3JyKGRuc2EsICZkbnNzLCBSRVNFVF9BVVRIT1JJVFkpOworICAgICAgIHJyOyByciA9
IGRuc19uZXh0X3JyKGRuc2EsICZkbnNzLCBSRVNFVF9ORVhUKQorICAgICAgKSBpZiAocnItPnR5
cGUgPT0gVF9TT0EpCisgICAgeworICAgIGNvbnN0IHVzY2hhciAqIHAgPSByci0+ZGF0YTsKKyAg
ICB1c2NoYXIgZGlzY2FyZF9idWZbMjU2XTsKKyAgICBpbnQgbGVuOworICAgIHVuc2lnbmVkIGxv
bmcgdHRsOworCisgICAgLyogU2tpcCB0aGUgbW5hbWUgJiBybmFtZSBzdHJpbmdzICovCisKKyAg
ICBpZiAoKGxlbiA9IGRuX2V4cGFuZChkbnNhLT5hbnN3ZXIsIGRuc2EtPmFuc3dlciArIGRuc2Et
PmFuc3dlcmxlbiwKKwlwLCAoRE5fRVhQQU5EX0FSRzRfVFlQRSlkaXNjYXJkX2J1ZiwgMjU2KSkg
PCAwKQorICAgICAgYnJlYWs7CisgICAgcCArPSBsZW47CisgICAgaWYgKChsZW4gPSBkbl9leHBh
bmQoZG5zYS0+YW5zd2VyLCBkbnNhLT5hbnN3ZXIgKyBkbnNhLT5hbnN3ZXJsZW4sCisJcCwgKERO
X0VYUEFORF9BUkc0X1RZUEUpZGlzY2FyZF9idWYsIDI1NikpIDwgMCkKKyAgICAgIGJyZWFrOwor
ICAgIHAgKz0gbGVuOworCisgICAgLyogU2tpcCB0aGUgU09BIHNlcmlhbCwgcmVmcmVzaCwgcmV0
cnkgJiBleHBpcmUuICBHcmFiIHRoZSBUVEwgKi8KKworICAgIGlmIChwID4gZG5zYS0+YW5zd2Vy
ICsgZG5zYS0+YW5zd2VybGVuIC0gNSAqIElOVDMyU1opCisgICAgICBicmVhazsKKyAgICBwICs9
IDQgKiBJTlQzMlNaOworICAgIEdFVExPTkcodHRsLCBwKTsKIAotZm9yIChkbnNfcmVjb3JkICog
cnIgPSBkbnNfbmV4dF9ycihkbnNhLCAmZG5zcywgUkVTRVRfQVVUSE9SSVRZKTsKLSAgICAgcnI7
IHJyID0gZG5zX25leHRfcnIoZG5zYSwgJmRuc3MsIFJFU0VUX05FWFQpCi0gICAgKSBpZiAocnIt
PnR5cGUgPT0gVF9TT0EpCi0gIHsKLSAgY29uc3QgdXNjaGFyICogcCA9IHJyLT5kYXRhOwotICB1
c2NoYXIgZGlzY2FyZF9idWZbMjU2XTsKLSAgaW50IGxlbjsKLSAgdW5zaWduZWQgbG9uZyB0dGw7
Ci0KLSAgLyogU2tpcCB0aGUgbW5hbWUgJiBybmFtZSBzdHJpbmdzICovCi0KLSAgaWYgKChsZW4g
PSBkbl9leHBhbmQoZG5zYS0+YW5zd2VyLCBkbnNhLT5hbnN3ZXIgKyBkbnNhLT5hbnN3ZXJsZW4s
Ci0gICAgICBwLCAoRE5fRVhQQU5EX0FSRzRfVFlQRSlkaXNjYXJkX2J1ZiwgMjU2KSkgPCAwKQot
ICAgIGJyZWFrOwotICBwICs9IGxlbjsKLSAgaWYgKChsZW4gPSBkbl9leHBhbmQoZG5zYS0+YW5z
d2VyLCBkbnNhLT5hbnN3ZXIgKyBkbnNhLT5hbnN3ZXJsZW4sCi0gICAgICBwLCAoRE5fRVhQQU5E
X0FSRzRfVFlQRSlkaXNjYXJkX2J1ZiwgMjU2KSkgPCAwKQotICAgIGJyZWFrOwotICBwICs9IGxl
bjsKLQotICAvKiBTa2lwIHRoZSBTT0Egc2VyaWFsLCByZWZyZXNoLCByZXRyeSAmIGV4cGlyZS4g
IEdyYWIgdGhlIFRUTCAqLwotCi0gIGlmIChwID4gZG5zYS0+YW5zd2VyICsgZG5zYS0+YW5zd2Vy
bGVuIC0gNSAqIElOVDMyU1opCi0gICAgYnJlYWs7Ci0gIHAgKz0gNCAqIElOVDMyU1o7Ci0gIEdF
VExPTkcodHRsLCBwKTsKKyAgICByZXR1cm4gdGltZShOVUxMKSArIHR0bDsKKyAgICB9CiAKLSAg
cmV0dXJuIHRpbWUoTlVMTCkgKyB0dGw7Ci0gIH0KIERFQlVHKERfZG5zKSBkZWJ1Z19wcmludGYo
IkROUzogbm8gU09BIHJlY29yZCBmb3VuZCBmb3IgbmVnLVRUTFxuIik7CiByZXR1cm4gMDsKIH0K
QEAgLTg0OCwxMSArODUwLDggQEAKIAogaWYgKGNoZWNrX2Ruc19uYW1lc19wYXR0ZXJuWzBdICE9
IDAgJiYgdHlwZSAhPSBUX1BUUiAmJiB0eXBlICE9IFRfVFhUKQogICB7Ci0gIGludCBvdmVjdG9y
WzMqKEVYUEFORF9NQVhOKzEpXTsKLQogICBkbnNfcGF0dGVybl9pbml0KCk7Ci0gIGlmIChwY3Jl
X2V4ZWMocmVnZXhfY2hlY2tfZG5zX25hbWVzLCBOVUxMLCBDQ1MgbmFtZSwgVXN0cmxlbihuYW1l
KSwKLSAgICAgIDAsIFBDUkVfRU9QVCwgb3ZlY3RvciwgbmVsZW0ob3ZlY3RvcikpIDwgMCkKKyAg
aWYgKCFyZWdleF9tYXRjaChyZWdleF9jaGVja19kbnNfbmFtZXMsIG5hbWUsIC0xLCBOVUxMKSkK
ICAgICB7CiAgICAgREVCVUcoRF9kbnMpCiAgICAgICBkZWJ1Z19wcmludGYoIkROUyBuYW1lIHN5
bnRheCBjaGVjayBmYWlsZWQ6ICVzICglcylcbiIsIG5hbWUsCkBAIC0xMDY2LDcgKzEwNjUsNyBA
QAogICAgIHJldHVybiBETlNfRkFJTDsKIAogICAvKiBETlMgZGF0YSBjb21lcyBmcm9tIHRoZSBv
dXRzaWRlLCBoZW5jZSB0YWludGVkICovCi0gIGRhdGEgPSBzdG9yZV9nZXQoMjU2LCBUUlVFKTsK
KyAgZGF0YSA9IHN0b3JlX2dldCgyNTYsIEdFVF9UQUlOVEVEKTsKICAgaWYgKGRuX2V4cGFuZChk
bnNhLT5hbnN3ZXIsIGRuc2EtPmFuc3dlciArIGRuc2EtPmFuc3dlcmxlbiwKICAgICAgIGNuYW1l
X3JyLmRhdGEsIChETl9FWFBBTkRfQVJHNF9UWVBFKWRhdGEsIDI1NikgPCAwKQogICAgIHJldHVy
biBETlNfRkFJTDsKQEAgLTExNDksNyArMTE0OCw3IEBACiAgIGNhc2UgVF9DU0E6CiAgICAgewog
ICAgIHVzY2hhciAqc3J2bmFtZSwgKm5hbWVzdWZmLCAqdGxkOwotICAgIGludCBwcmlvcml0eSwg
d2VpZ2h0LCBwb3J0OworICAgIGludCBwcmlvcml0eSwgZHVtbXlfd2VpZ2h0LCBwb3J0OwogICAg
IGludCBsaW1pdCwgcmMsIGk7CiAgICAgQk9PTCBpcHY2OwogICAgIGRuc19yZWNvcmQgKnJyOwpA
QCAtMTIwMywxOCArMTIwMiw3IEBACiAgICAgSWYgdGhlIFRMRCBhbmQgdGhlIDJMRCBleGlzdCBi
dXQgdGhlIGV4cGxpY2l0IENTQSByZWNvcmQgbG9va3VwIGZhaWxlZCwgdGhlbgogICAgIHRoZSBB
VVRIT1JJVFkgU09BIHdpbGwgYmUgdGhlIDJMRCdzIG9yIGEgc3ViZG9tYWluIHRoZXJlb2YuICov
CiAKLSAgICBpZiAocmMgPT0gRE5TX05PTUFUQ0gpCi0gICAgICB7Ci0gICAgICBmYWtlX2Ruc2Ff
bGVuX2Zvcl9mYWlsKGRuc2EsIFRfQ1NBKTsKLQotICAgICAgZm9yIChyciA9IGRuc19uZXh0X3Jy
KGRuc2EsICZkbnNzLCBSRVNFVF9BVVRIT1JJVFkpOwotCSAgIHJyOyByciA9IGRuc19uZXh0X3Jy
KGRuc2EsICZkbnNzLCBSRVNFVF9ORVhUKQotCSAgKQotCWlmIChyci0+dHlwZSAhPSBUX1NPQSkg
Y29udGludWU7Ci0JZWxzZSBpZiAoc3RyY21waWMocnItPm5hbWUsIFVTIiIpID09IDAgfHwKLQkJ
IHN0cmNtcGljKHJyLT5uYW1lLCB0bGQpID09IDApIHJldHVybiBETlNfTk9NQVRDSDsKLQllbHNl
IGJyZWFrOwotICAgICAgfQorICAgIGlmIChyYyA9PSBETlNfTk9NQVRDSCkgcmV0dXJuIEROU19O
T01BVENIOwogCiAgICAgZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspCiAgICAgICB7CkBAIC0x
MjQ5LDcgKzEyMzcsNyBAQAogCiAJLyogRXh0cmFjdCB0aGUgbnVtZXJpY2FsIFNSViBmaWVsZHMg
KHAgaXMgaW5jcmVtZW50ZWQpICovCiAJR0VUU0hPUlQocHJpb3JpdHksIHApOwotCUdFVFNIT1JU
KHdlaWdodCwgcCk7CXdlaWdodCA9IHdlaWdodDsgLyogY29tcGlsZXIgcXVpZXRlbmluZyAqLwor
CUdFVFNIT1JUKGR1bW15X3dlaWdodCwgcCk7CiAJR0VUU0hPUlQocG9ydCwgcCk7CiAKIAkvKiBD
aGVjayB0aGUgQ1NBIHZlcnNpb24gbnVtYmVyICovCkBAIC0xMzA1LDcgKzEyOTMsNyBAQAogICBp
ZiAocCArIDQgPD0gZG5zYV9saW0pCiAgICAgewogICAgIC8qIHRoZSBJUCBpcyBub3QgcmVnYXJk
ZWQgYXMgdGFpbnRlZCAqLwotICAgIHlpZWxkID0gc3RvcmVfZ2V0KHNpemVvZihkbnNfYWRkcmVz
cykgKyAyMCwgRkFMU0UpOworICAgIHlpZWxkID0gc3RvcmVfZ2V0KHNpemVvZihkbnNfYWRkcmVz
cykgKyAyMCwgR0VUX1VOVEFJTlRFRCk7CiAgICAgKHZvaWQpc3ByaW50ZihDUyB5aWVsZC0+YWRk
cmVzcywgIiVkLiVkLiVkLiVkIiwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSk7CiAgICAgeWllbGQt
Pm5leHQgPSBOVUxMOwogICAgIH0KQEAgLTEzMTksNyArMTMwNyw3IEBACiAgICAgewogICAgIHN0
cnVjdCBpbjZfYWRkciBpbjY7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSBpbjYu
czZfYWRkcltpXSA9IHJyLT5kYXRhW2ldOwotICAgIHlpZWxkID0gc3RvcmVfZ2V0KHNpemVvZihk
bnNfYWRkcmVzcykgKyA1MCwgRkFMU0UpOworICAgIHlpZWxkID0gc3RvcmVfZ2V0KHNpemVvZihk
bnNfYWRkcmVzcykgKyA1MCwgR0VUX1VOVEFJTlRFRCk7CiAgICAgaW5ldF9udG9wKEFGX0lORVQ2
LCAmaW42LCBDUyB5aWVsZC0+YWRkcmVzcywgNTApOwogICAgIHlpZWxkLT5uZXh0ID0gTlVMTDsK
ICAgICB9CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvZHJ0YWJsZXMuYyBleGltL3NyYy9kcnRhYmxl
cy5jCi0tLSBleGltLm9yaWcvc3JjL2RydGFibGVzLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2RydGFibGVzLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4w
MDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQg
bWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFp
bmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJy
aWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVy
cyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBh
bmQgZGlzdHJpYnV0aW9uLiAqLwogCiAKQEAgLTUxOCw3ICs1MTgsNyBAQAogc3RhdGljIHZvaWQK
IGFkZGxvb2t1cG1vZHVsZSh2b2lkICpkbCwgc3RydWN0IGxvb2t1cF9tb2R1bGVfaW5mbyAqaW5m
bykKIHsKLXN0cnVjdCBsb29rdXBtb2R1bGVzdHIgKnAgPSBzdG9yZV9nZXQoc2l6ZW9mKHN0cnVj
dCBsb29rdXBtb2R1bGVzdHIpLCBGQUxTRSk7CitzdHJ1Y3QgbG9va3VwbW9kdWxlc3RyICpwID0g
c3RvcmVfZ2V0KHNpemVvZihzdHJ1Y3QgbG9va3VwbW9kdWxlc3RyKSwgR0VUX1VOVEFJTlRFRCk7
CiAKIHAtPmRsID0gZGw7CiBwLT5pbmZvID0gaW5mbzsKQEAgLTYwMiw3ICs2MDIsNyBAQAogI2lm
IGRlZmluZWQoTE9PS1VQX1JFRElTKSAmJiBMT09LVVBfUkVESVMhPTIKIGV4dGVybiBsb29rdXBf
bW9kdWxlX2luZm8gcmVkaXNfbG9va3VwX21vZHVsZV9pbmZvOwogI2VuZGlmCi0jaWYgZGVmaW5l
ZChFWFBFUklNRU5UQUxfTE1EQikKKyNpZiBkZWZpbmVkKExPT0tVUF9MTURCKQogZXh0ZXJuIGxv
b2t1cF9tb2R1bGVfaW5mbyBsbWRiX2xvb2t1cF9tb2R1bGVfaW5mbzsKICNlbmRpZgogI2lmIGRl
ZmluZWQoU1VQUE9SVF9TUEYpCkBAIC02OTgsNyArNjk4LDcgQEAKIGFkZGxvb2t1cG1vZHVsZShO
VUxMLCAmcmVkaXNfbG9va3VwX21vZHVsZV9pbmZvKTsKICNlbmRpZgogCi0jaWZkZWYgRVhQRVJJ
TUVOVEFMX0xNREIKKyNpZmRlZiBMT09LVVBfTE1EQgogYWRkbG9va3VwbW9kdWxlKE5VTEwsICZs
bWRiX2xvb2t1cF9tb2R1bGVfaW5mbyk7CiAjZW5kaWYKIApAQCAtNzI4LDE1ICs3MjgsMTUgQEAK
ICAgfQogZWxzZQogICB7Ci0gIGNvbnN0IHBjcmUgKnJlZ2V4X2lzbG9va3VwbW9kID0gcmVnZXhf
bXVzdF9jb21waWxlKAorICBjb25zdCBwY3JlMl9jb2RlICpyZWdleF9pc2xvb2t1cG1vZCA9IHJl
Z2V4X211c3RfY29tcGlsZSgKICAgICBVUyJcXC4iIERZTkxJQl9GTl9FWFQgIiQiLCBGQUxTRSwg
VFJVRSk7CiAKICAgREVCVUcoRF9sb29rdXApIGRlYnVnX3ByaW50ZigiTG9hZGluZyBsb29rdXAg
bW9kdWxlcyBmcm9tICVzXG4iLCBMT09LVVBfTU9EVUxFX0RJUik7CiAgIHdoaWxlICgoZW50ID0g
cmVhZGRpcihkZCkpKQogICAgIHsKLSAgICBjaGFyICpuYW1lID0gZW50LT5kX25hbWU7CisgICAg
Y2hhciAqIG5hbWUgPSBlbnQtPmRfbmFtZTsKICAgICBpbnQgbGVuID0gKGludClzdHJsZW4obmFt
ZSk7Ci0gICAgaWYgKHBjcmVfZXhlYyhyZWdleF9pc2xvb2t1cG1vZCwgTlVMTCwgbmFtZSwgbGVu
LCAwLCBQQ1JFX0VPUFQsIE5VTEwsIDApID49IDApCisgICAgaWYgKHJlZ2V4X21hdGNoKHJlZ2V4
X2lzbG9va3VwbW9kLCBVUyBuYW1lLCBsZW4sIE5VTCkpCiAgICAgICB7CiAgICAgICBpbnQgcGF0
aG5hbWVsZW4gPSBsZW4gKyAoaW50KXN0cmxlbihMT09LVVBfTU9EVUxFX0RJUikgKyAyOwogICAg
ICAgdm9pZCAqZGw7CkBAIC03NjQsMTAgKzc2NCwxMCBAQAogCX0KIAogICAgICAgLyogRnJlZUJT
RCBuc2Rpc3BhdGNoKCkgY2FuIHRyaWdnZXIgZGxlcnJvcigpIGVycm9ycyBhYm91dAotICAgICAg
ICogX25zc19jYWNoZV9jeWNsZV9wcmV2ZW50aW9uX2Z1bmN0aW9uOyB3ZSBuZWVkIHRvIGNsZWFy
IHRoZSBkbGVycm9yKCkKLSAgICAgICAqIHN0YXRlIGJlZm9yZSBjYWxsaW5nIGRsc3ltKCksIHNv
IHRoYXQgYW55IGVycm9yIGFmdGVyd2FyZHMgb25seQotICAgICAgICogY29tZXMgZnJvbSBkbHN5
bSgpLgotICAgICAgICovCisgICAgICBfbnNzX2NhY2hlX2N5Y2xlX3ByZXZlbnRpb25fZnVuY3Rp
b247IHdlIG5lZWQgdG8gY2xlYXIgdGhlIGRsZXJyb3IoKQorICAgICAgc3RhdGUgYmVmb3JlIGNh
bGxpbmcgZGxzeW0oKSwgc28gdGhhdCBhbnkgZXJyb3IgYWZ0ZXJ3YXJkcyBvbmx5IGNvbWVzCisg
ICAgICBmcm9tIGRsc3ltKCkuICAqLworCiAgICAgICBlcnJvcm1zZyA9IGRsZXJyb3IoKTsKIAog
ICAgICAgaW5mbyA9IChzdHJ1Y3QgbG9va3VwX21vZHVsZV9pbmZvKikgZGxzeW0oZGwsICJfbG9v
a3VwX21vZHVsZV9pbmZvIik7CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvZHVtbWllcy5jIGV4aW0v
c3JjL2R1bW1pZXMuYwotLS0gZXhpbS5vcmlnL3NyYy9kdW1taWVzLmMJMjAyMy0wNi0wNCAxNjoy
MjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2R1bW1pZXMuYwkyMDIyLTA2LTIzIDE2
OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMyw2ICszLDcgQEAKICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIENvcHlyaWdodCAoYykgVW5p
dmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMDkgKi8KKy8qIENvcHlyaWdodCAoYykgVGhl
IEV4aW0gTWFpbnRhaW5lcnMgMjAyMSAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29u
ZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogLyogVGhpcyBmaWxlIGlzIG5v
dCBwYXJ0IG9mIHRoZSBtYWluIEV4aW0gY29kZS4gVGhlcmUgYXJlIGxpdHRsZSBiaXRzIG9mIHRl
c3QKQEAgLTQ3LDggKzQ4LDYgQEAKIHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcCk7CiBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CiB2YV9lbmQoYXApOwotc2VsZWN0b3IgPSBzZWxlY3RvcjsgICAg
IC8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1mbGFncyA9IGZsYWdzOwogfQogCiAK
QEAgLTEwMyw3ICsxMDIsNiBAQAogdm9pZAogc2lnYWxybV9oYW5kbGVyKGludCBzaWcpCiB7Ci1z
aWcgPSBzaWc7ICAgICAgICAgICAgLyogS2VlcCBwaWNreSBjb21waWxlcnMgaGFwcHkgKi8KIHNp
Z2Fscm1fc2VlbiA9IFRSVUU7CiB9CiAKQEAgLTExNiwxOSArMTE0LDEyIEBACiBpbnQKIGhlYWRl
cl9jaGVja25hbWUodm9pZCAqaCwgY2hhciAqbmFtZSwgaW50IGxlbikKIHsKLWggPSBoOyAgICAg
ICAgICAgIC8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1uYW1lID0gbmFtZTsKLWxl
biA9IGxlbjsKIHJldHVybiAwOwogfQogCiB2b2lkCiBkaXJlY3RvcnlfbWFrZShjaGFyICpwYXJl
bnQsIGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQgcGFuaWMpCiB7Ci1wYXJlbnQgPSBwYXJlbnQ7
ICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotbmFtZSA9IG5hbWU7Ci1tb2RlID0g
bW9kZTsKLXBhbmljID0gcGFuaWM7CiB9CiAKIHZvaWQKQEAgLTE0MCwxMCArMTMxLDYgQEAKIGNo
YXIgKgogaG9zdF9udG9hKGludCB0eXBlLCBjb25zdCB2b2lkICphcmcsIGNoYXIgKmJ1ZmZlciwg
aW50ICpwb3J0cHRyKQogewotdHlwZSA9IHR5cGU7ICAgICAgLyogS2VlcCBwaWNreSBjb21waWxl
cnMgaGFwcHkgKi8KLWFyZyA9IGFyZzsKLWJ1ZmZlciA9IGJ1ZmZlcjsKLXBvcnRwdHIgPSBwb3J0
cHRyOwogcmV0dXJuIE5VTEw7CiB9CiAjZW5kaWYKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9FRElU
TUUgZXhpbS9zcmMvRURJVE1FCi0tLSBleGltLm9yaWcvc3JjL0VESVRNRQkyMDIzLTA2LTA0IDE2
OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvRURJVE1FCTIwMjItMDYtMjMgMTY6
NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0xOTgsNyArMTk4LDcgQEAKICMgdGhlIGxpYnJhcmll
cyBhbmQgaGVhZGVycyBhcmUgaW5zdGFsbGVkLCBhcyB0aGUgcGtnLWNvbmZpZyAucGMKICMgc3Bl
Y2lmaWNhdGlvbiBzaG91bGQgaW5jbHVkZSBhbGwgLUwvLUkgaW5mb3JtYXRpb24gbmVjZXNzYXJ5
LgogIyBFbmFibGluZyB0aGUgVVNFXypfUEMgb3B0aW9ucyBzaG91bGQgYmUgc3VmZmljaWVudC4g
SWYgbm90IHVzaW5nCi0jIHBrZy1jb25maWcsIHRoZW4geW91IGhhdmUgdG8gc3BlY2lmeSB0aGUg
bGlicmFyaWVzLCBhbmQgeW91IG1taWdodAorIyBwa2ctY29uZmlnLCB0aGVuIHlvdSBoYXZlIHRv
IHNwZWNpZnkgdGhlIGxpYnJhcmllcywgYW5kIHlvdSBtaWdodAogIyBuZWVkIHRvIHNwZWNpZnkg
dGhlIGxvY2F0aW9ucyB0b28uCiAKICMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgaWYg
eW91IHdhbnQKQEAgLTIwNyw3ICsyMDcsNyBAQAogIyBVbmxlc3MgeW91IGRvIHRoaXMsIHlvdSBt
dXN0IGRlZmluZSBvbmUgb2YgVVNFX09QRU5TU0wgb3IgVVNFX0dOVVRMUwogIyBiZWxvdy4KIAot
IyBJZiB5b3UgYXJlIGJ1bGlkaW5nIHdpdGggVExTLCB0aGUgbGlicmFyeSBjb25maWd1cmF0aW9u
IG11c3QgYmUgZG9uZToKKyMgSWYgeW91IGFyZSBidWlsZGluZyB3aXRoIFRMUywgdGhlIGxpYnJh
cnkgY29uZmlndXJhdGlvbiBtdXN0IGJlIGRvbmU6CiAKICMgVW5jb21tZW50IHRoaXMgaWYgeW91
IGFyZSB1c2luZyBPcGVuU1NMCiAjIFVTRV9PUEVOU1NMPXllcwpAQCAtMjc2LDYgKzI3Niw5IEBA
CiAjIHNwZWNpZmllZCBpbiBJTkNMVURFLgogCiAKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcg
bGluZSB0byByZW1vdmUgc3VwcG9ydCBmb3IgVExTIFJlc3VtcHRpb24KKyMgRElTQUJMRV9UTFNf
UkVTVU1FPXllcworCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgICAgICAgICAgIFRIRVNF
IEFSRSBUSElOR1MgWU9VIFBST0JBQkxZIFdBTlQgVE8gU1BFQ0lGWSAgICAgICAgICAgICAgICAg
ICAgICMKQEAgLTQxMSw2ICs0MTQsOCBAQAogIyBMT09LVVBfSUJBU0U9eWVzCiAjIExPT0tVUF9K
U09OPXllcwogIyBMT09LVVBfTERBUD15ZXMKKyMgTE9PS1VQX0xNREI9eWVzCisKICMgTE9PS1VQ
X01ZU1FMPXllcwogIyBMT09LVVBfTVlTUUxfUEM9bWFyaWFkYgogIyBMT09LVVBfTklTPXllcwpA
QCAtNDUyLDE5ICs0NTcsMTkgQEAKIAogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoZSBQ
Q1JFIGxpYnJhcnkgaXMgcmVxdWlyZWQgZm9yIEV4aW0uICBUaGVyZSBpcyBubyBsb25nZXIgYW4g
ZW1iZWRkZWQKKyMgVGhlIFBDUkUyIGxpYnJhcnkgaXMgcmVxdWlyZWQgZm9yIEV4aW0uICBUaGVy
ZSBpcyBubyBsb25nZXIgYW4gZW1iZWRkZWQKICMgdmVyc2lvbiBvZiB0aGUgUENSRSBsaWJyYXJ5
IGluY2x1ZGVkIHdpdGggdGhlIHNvdXJjZSBjb2RlLCBpbnN0ZWFkIHlvdQotIyBtdXN0IHVzZSBh
IHN5c3RlbSBsaWJyYXJ5IG9yIGJ1aWxkIHlvdXIgb3duIGNvcHkgb2YgUENSRS4KKyMgbXVzdCB1
c2UgYSBzeXN0ZW0gbGlicmFyeSBvciBidWlsZCB5b3VyIG93biBjb3B5IG9mIFBDUkUyLgogIyBJ
biBlaXRoZXIgY2FzZSB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBsaWJyYXJ5IGxpbmsgaW5mbyBoZXJl
LiAgSWYgdGhlCi0jIFBDUkUgaGVhZGVyIGZpbGVzIGFyZSBub3QgaW4gdGhlIHN0YW5kYXJkIHNl
YXJjaCBwYXRoIHlvdSBtdXN0IGFsc28KKyMgUENSRTIgaGVhZGVyIGZpbGVzIGFyZSBub3QgaW4g
dGhlIHN0YW5kYXJkIHNlYXJjaCBwYXRoIHlvdSBtdXN0IGFsc28KICMgbW9kaWZ5IHRoZSBJTkNM
VURFIHBhdGggKGFib3ZlKQogIwogIyBVc2UgUENSRV9DT05GSUcgdG8gcXVlcnkgdGhlIHBjcmUt
Y29uZmlnIGNvbW1hbmQgKGZpcnN0IGZvdW5kIGluICRQQVRIKQogIyB0byBmaW5kIHRoZSBpbmNs
dWRlIGZpbGVzIGFuZCBsaWJyYXJpZXMsIGVsc2UgdXNlIFBDUkVfTElCUyBhbmQgc2V0IElOQ0xV
REUKICMgdG9vIGlmIG5lZWRlZC4KIAotUENSRV9DT05GSUc9eWVzCi0jIFBDUkVfTElCUz0tbHBj
cmUKK1BDUkUyX0NPTkZJRz15ZXMKKyMgUENSRV9MSUJTPS1scGNyZTIKIAogCiAjLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC00ODcsNyArNDkyLDE1IEBACiAjIFlvdSBkbyBub3QgbmVlZCB0byB1
c2UgdGhpcyBmb3IgYW55IGxvb2t1cCBpbmZvcm1hdGlvbiBhZGRlZCB2aWEgcGtnLWNvbmZpZy4K
IAogIyBMT09LVVBfSU5DTFVERT0tSSAvdXNyL2xvY2FsL2xkYXAvaW5jbHVkZSAtSSAvdXNyL2xv
Y2FsL215c3FsL2luY2x1ZGUgLUkgL3Vzci9sb2NhbC9wZ3NxbC9pbmNsdWRlCi0jIExPT0tVUF9M
SUJTPS1ML3Vzci9sb2NhbC9saWIgLWxsZGFwIC1sbGJlciAtbG15c3FsY2xpZW50IC1scHEgLWxn
ZHMgLWxzcWxpdGUzCisjIExPT0tVUF9JTkNMVURFICs9LUkgL3Vzci9sb2NhbC9pbmNsdWRlCisj
IExPT0tVUF9MSUJTPS1ML3Vzci9sb2NhbC9saWIgLWxsZGFwIC1sbGJlciAtbG15c3FsY2xpZW50
IC1scHEgLWxnZHMgLWxzcWxpdGUzIC1sbG1kYgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisj
IElmIHlvdSBpbmNsdWRlZCBMT09LVVBfTE1EQiBhYm92ZSB5b3Ugd2lsbCBuZWVkIHRoZSBsaWJy
YXJ5LiBEZXBlbmRpbmcKKyMgb24gd2hlcmUgaW5zdGFsbGVkIHlvdSBtYXkgYWxzbyBuZWVkIGFu
IGluY2x1ZGUgZGlyZWN0b3J5CisjCisjIExPT0tVUF9JTkNMVURFICs9IC1JL3Vzci9sb2NhbC9p
bmNsdWRlCisjIExPT0tVUF9MSUJTICs9IC1sbG1kYgogCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KQEAgLTU2MCw3ICs1NzMsNiBAQAogIyBESVNBQkxFX0ROU1NFQz15ZXMKIAogIyBUbyBkaXNh
YmxlIHN1cHBvcnQgZm9yIEV2ZW50cyBzZXQgRElTQUJMRV9FVkVOVCB0byAieWVzIgotCiAjIERJ
U0FCTEVfRVZFTlQ9eWVzCiAKIApAQCAtNTY5LDYgKzU4MSwxNCBAQAogIyBESVNBQkxFX1BJUEVf
Q09OTkVDVD15ZXMKIAogCisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIHRvIHJlbW92ZSB0aGUg
ZmFzdC1yYW1wIHR3by1waGFzZS1xdWV1ZS1ydW4gc3VwcG9ydAorIyBESVNBQkxFX1FVRVVFX1JB
TVA9eWVzCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gYWRkIFNSUyAoU2Vu
ZGVyIFJld3JpdGluZyBTY2hlbWUpIHN1cHBvcnQKKyMgdXNpbmcgb25seSBuYXRpdmUgZmFjaWxp
dGllcy4KKyMgU1VQUE9SVF9TUlM9eWVzCisKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBD
b21waWxpbmcgRXhpbSB3aXRoIGV4cGVyaW1lbnRhbCBmZWF0dXJlcy4gVGhlc2UgYXJlIGRvY3Vt
ZW50ZWQgaW4KICMgZXhwZXJpbWVudGFsLXNwZWMudHh0LiAiRXhwZXJpbWVudGFsIiBtZWFucyB0
aGF0IHRoZSB3YXkgdGhlc2UgZmVhdHVyZXMgYXJlCkBAIC01ODAsMjEgKzYwMCwxMCBAQAogCiAj
IEVYUEVSSU1FTlRBTF9EQ0M9eWVzCiAKLSMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMg
dG8gYWRkIFNSUyAoU2VuZGVyIHJld3JpdGluZyBzY2hlbWUpIHN1cHBvcnQuCi0jIFlvdSBuZWVk
IHRvIGhhdmUgbGlic3JzX2FsdCBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gKHNycy5taXJ0b2wu
Y29tKS4KLSMgRGVwZW5kaW5nIG9uIHdoZXJlIGl0IGlzIGluc3RhbGxlZCB5b3UgbWF5IGhhdmUg
dG8gZWRpdCB0aGUgQ0ZMQUdTIGFuZAotIyBMREZMQUdTIGxpbmVzLgotCi0jIEVYUEVSSU1FTlRB
TF9TUlM9eWVzCi0jIENGTEFHUyAgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKLSMgTERGTEFHUyAr
PSAtbHNyc19hbHQKLQotIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBhZGQgU1JT
IChTZW5kZXIgcmV3cml0aW5nIHNjaGVtZSkgc3VwcG9ydAotIyB1c2luZyBvbmx5IG5hdGl2ZSBm
YWNpbGl0aWVzLgotIyBFWFBFUklNRU5UQUxfU1JTX05BVElWRT15ZXMKLQogIyBVbmNvbW1lbnQg
dGhlIGZvbGxvd2luZyBsaW5lIHRvIGFkZCBETUFSQyBjaGVja2luZyBjYXBhYmlsaXR5LCBpbXBs
ZW1lbnRlZAogIyB1c2luZyBsaWJvcGVuZG1hcmMgbGlicmFyaWVzLiBZb3UgbXVzdCBoYXZlIFNQ
RiBhbmQgREtJTSBzdXBwb3J0IGVuYWJsZWQgYWxzby4KKyMgTGlicmFyeSB2ZXJzaW9uIGxpYm9w
ZW5kbWFyYy0xLjQuMS0xLmZjMzMueDg2XzY0ICAob24gRmVkb3JhIDMzKSBpcyBrbm93biBicm9r
ZW47CisjIDEuMy4yLTMgd29ya3MuICBJIHNlZW1zIHRoYXQgdGhlIE9wZW5ETUFSQyBwcm9qZWN0
IGJyb2tlIHRoZWlyIEFQSS4KICMgU1VQUE9SVF9ETUFSQz15ZXMKICMgQ0ZMQUdTICs9IC1JL3Vz
ci9sb2NhbC9pbmNsdWRlCiAjIExERkxBR1MgKz0gLWxvcGVuZG1hcmMKQEAgLTYxOCwyMiArNjI3
LDkgQEAKICMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgdG8gaW5jbHVkZSBleHRyYSBpbmZvcm1h
dGlvbiBpbiBmYWlsIERTTiBtZXNzYWdlIChib3VuY2VzKQogIyBFWFBFUklNRU5UQUxfRFNOX0lO
Rk89eWVzCiAKLSMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgdG8gYWRkIExNREIgbG9va3VwIHN1
cHBvcnQKLSMgWW91IG5lZWQgdG8gaGF2ZSBMTURCIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSAo
aHR0cHM6Ly9naXRodWIuY29tL0xNREIvbG1kYikKLSMgRGVwZW5kaW5nIG9uIHdoZXJlIGl0IGlz
IGluc3RhbGxlZCB5b3UgbWF5IGhhdmUgdG8gZWRpdCB0aGUgQ0ZMQUdTIGFuZCBMREZMQUdTIGxp
bmVzLgotIyBFWFBFUklNRU5UQUxfTE1EQj15ZXMKLSMgQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9p
bmNsdWRlCi0jIExERkxBR1MgKz0gLWxsbWRiCi0KICMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcg
bGluZSB0byBhZGQgcXVldWVmaWxlIHRyYW5zcG9ydCBzdXBwb3J0CiAjIEVYUEVSSU1FTlRBTF9R
VUVVRUZJTEU9eWVzCiAKLSMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBpbmNsdWRl
IHN1cHBvcnQgZm9yIFRMUyBSZXN1bXB0aW9uCi0jIEVYUEVSSU1FTlRBTF9UTFNfUkVTVU1FPXll
cwotCi0jIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIHRvIGluY2x1ZGUgdGhlIGZhc3QtcmFtcCB0
d28tcGhhc2UtcXVldWUtcnVuIHN1cHBvcnQKLSMgRVhQRVJJTUVOVEFMX1FVRVVFX1JBTVA9eWVz
Ci0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgICAgICAgICAgICAgICAgIFRIRVNFIEFSRSBU
SElOR1MgWU9VIE1JR0hUIFdBTlQgVE8gU1BFQ0lGWSAgICAgICAgICAgICAgICAgICMKICMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKQEAgLTE0OTMsNCArMTQ4OSw5IEBACiAjIEZvciBkZXZlbG9wbWVu
dCwgYWRkIHRoaXMgdG8gaW5jbHVkZSBjb2RlIHRvIHRpbWUgdmFyaW91cyBzdGFnZXMgYW5kIHJl
cG9ydC4KICMgQ0ZMQUdTICs9IC1ETUVBU1VSRV9USU1JTkcKIAorIyBGb3IgYSB2ZXJ5IHNsaWdo
dGx5IHNtYWxsZXIgYnVpbGQsIGZvciBjb25zdHJhaW5lZCBzeXN0ZW1zLCB1bmNvbW1lbnQgdGhp
cy4KKyMgVGhlIGZlYXR1cmUgaW52b2x2ZWQgaXMgcHVyZWx5IGZvciBkZWJ1Z2dpbmcuCisKKyMg
RElTQUJMRV9DTElFTlRfQ01EX0xPRz15ZXMKKwogIyBFbmQgb2YgRURJVE1FIGZvciBFeGltIDQu
CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvZW5xLmMgZXhpbS9zcmMvZW5xLmMKLS0tIGV4aW0ub3Jp
Zy9zcmMvZW5xLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0v
c3JjL2VucS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0zLDYgKzMs
NyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
IAogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxNSAq
LworLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxICovCiAvKiBTZWUg
dGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAq
LwogCiAvKiBGdW5jdGlvbnMgY29uY2VybmVkIHdpdGggc2VyaWFsaXphdGlvbi4gKi8KQEAgLTUz
LDcgKzU0LDcgQEAKIC8qIFNlZSBpZiB0aGVyZSBpcyBhIHJlY29yZCBmb3IgdGhpcyBob3N0IG9y
IHF1ZXVlIHJ1bjsgaWYgdGhlcmUgaXMsIHdlIGNhbm5vdAogcHJvY2VlZCB3aXRoIHRoZSBjb25u
ZWN0aW9uIHVubGVzcyB0aGUgcmVjb3JkIGlzIHZlcnkgb2xkLiAqLwogCi1zZXJpYWxfcmVjb3Jk
ID0gZGJmbl9yZWFkKGRibV9maWxlLCBrZXkpOworc2VyaWFsX3JlY29yZCA9IGRiZm5fcmVhZF9l
bmZvcmNlX2xlbmd0aChkYm1fZmlsZSwga2V5LCBzaXplb2YoZGJkYXRhX3NlcmlhbGl6ZSkpOwog
aWYgKHNlcmlhbF9yZWNvcmQgJiYgdGltZShOVUxMKSAtIHNlcmlhbF9yZWNvcmQtPnRpbWVfc3Rh
bXAgPCA2KjYwKjYwKQogICB7CiAgIGlmIChzZXJpYWxfcmVjb3JkLT5jb3VudCA+PSBsaW0pCkBA
IC0xMDIsNyArMTAzLDcgQEAKIERFQlVHKERfdHJhbnNwb3J0KSBkZWJ1Z19wcmludGYoImVuZCBz
ZXJpYWxpemVkOiAlc1xuIiwga2V5KTsKIAogaWYgKCAgIShkYm1fZmlsZSA9IGRiZm5fb3BlbihV
UyJtaXNjIiwgT19SRFdSLCAmZGJibG9jaywgVFJVRSwgVFJVRSkpCi0gICB8fCAhKHNlcmlhbF9y
ZWNvcmQgPSBkYmZuX3JlYWQoZGJtX2ZpbGUsIGtleSkpCisgICB8fCAhKHNlcmlhbF9yZWNvcmQg
PSBkYmZuX3JlYWRfZW5mb3JjZV9sZW5ndGgoZGJtX2ZpbGUsIGtleSwgc2l6ZW9mKGRiZGF0YV9z
ZXJpYWxpemUpKSkKICAgICkKICAgcmV0dXJuOwogaWYgKC0tc2VyaWFsX3JlY29yZC0+Y291bnQg
PiAwKQpkaWZmIC11ciBleGltLm9yaWcvc3JjL2V4aWdyZXAuc3JjIGV4aW0vc3JjL2V4aWdyZXAu
c3JjCi0tLSBleGltLm9yaWcvc3JjL2V4aWdyZXAuc3JjCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAw
MDAwMDAwICswMzAwCisrKyBleGltL3NyYy9leGlncmVwLnNyYwkyMDIyLTA2LTIzIDE2OjQxOjEw
LjAwMDAwMDAwMCArMDMwMApAQCAtOSw3ICs5LDcgQEAKIHVzZSBGaWxlOjpCYXNlbmFtZTsKIAog
IyBDb3B5cmlnaHQgKGMpIDIwMDctMjAxNyBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KLSMgQ29w
eXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwCisjIENvcHlyaWdodCAoYykgVGhl
IEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjEKICMgU2VlIHRoZSBmaWxlIE5PVElDRSBmb3Ig
Y29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4KIAogIyBFeGNlcHQgd2hlbiB0aGV5
IGFwcGVhciBpbiBjb21tZW50cywgdGhlIGZvbGxvd2luZyBwbGFjZWhvbGRlcnMgaW4gdGhpcwpA
QCAtNDUsMjAgKzQ1LDIxIEBACiAjIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBv
Y2guIEl0IGhhbmRsZXMgb3B0aW9uYWwgdGltZXpvbmUKICMgaW5mb3JtYXRpb24uCiAKLXN1YiBz
ZWNvbmRzIHsKLW15KCR5ZWFyLCRtb250aCwkZGF5LCRob3VyLCRtaW4sJHNlYywkdHpzLCR0emgs
JHR6bSkgPQotICAkX1swXSA9fiAvXihcZHs0fSktKFxkXGQpLShcZFxkKVxzKFxkXGQpOihcZFxk
KTooXGRcZCkoPzouXGQrKT8oPz5ccyhbKy1dKShcZFxkKShcZFxkKSk/L287CitzdWIgc2Vjb25k
cworICB7CisgIG15KCR5ZWFyLCRtb250aCwkZGF5LCRob3VyLCRtaW4sJHNlYywkdHpzLCR0emgs
JHR6bSkgPQorICAgICRfWzBdID1+IC9eKFxkezR9KS0oXGRcZCktKFxkXGQpXHMoXGRcZCk6KFxk
XGQpOihcZFxkKSg/Oi5cZCspPyg/PlxzKFsrLV0pKFxkXGQpKFxkXGQpKT8vbzsKIAotbXkgJHNl
Y29uZHMgPSBta3RpbWUgJHNlYywgJG1pbiwgJGhvdXIsICRkYXksICRtb250aCAtIDEsICR5ZWFy
IC0gMTkwMDsKKyAgbXkgJHNlY29uZHMgPSBta3RpbWUgJHNlYywgJG1pbiwgJGhvdXIsICRkYXks
ICRtb250aCAtIDEsICR5ZWFyIC0gMTkwMDsKIAotaWYgKGRlZmluZWQgJHR6cykKLSAgewotICAk
c2Vjb25kcyAtPSAkdHpoICogMzYwMCArICR0em0gKiA2MCBpZiAkdHpzIGVxICIrIjsKLSAgJHNl
Y29uZHMgKz0gJHR6aCAqIDM2MDAgKyAkdHptICogNjAgaWYgJHR6cyBlcSAiLSI7Ci0gIH0KKyAg
aWYgKGRlZmluZWQgJHR6cykKKyAgICB7CisgICAgJHNlY29uZHMgLT0gJHR6aCAqIDM2MDAgKyAk
dHptICogNjAgaWYgJHR6cyBlcSAiKyI7CisgICAgJHNlY29uZHMgKz0gJHR6aCAqIDM2MDAgKyAk
dHptICogNjAgaWYgJHR6cyBlcSAiLSI7CisgICAgfQogCi1yZXR1cm4gJHNlY29uZHM7Ci19Cisg
IHJldHVybiAkc2Vjb25kczsKKyAgfQogCiAKICMgVGhpcyBzdWJyb3V0aW5lIHByb2Nlc3NlcyBh
IHNpbmdsZSBsaW5lIChpbiAkXykgZnJvbSBhIGxvZyBmaWxlLiBQcm9ncmFtCkBAIC03OCw3NyAr
NzksNzggQEAKIG15ICRyZWxhdGVkX3JlPScnOwogbXkgQE1pZHMgPSAoKTsKIAotc3ViIGRvX2xp
bmUgeworc3ViIGRvX2xpbmUKKyAgewogCi0jIENvbnZlcnQgc3lzbG9nIGxpbmVzIHRvIG1haW5s
b2cgZm9ybWF0LCBhcyBpbiBleGltc3RhdHMuCisgICMgQ29udmVydCBzeXNsb2cgbGluZXMgdG8g
bWFpbmxvZyBmb3JtYXQsIGFzIGluIGV4aW1zdGF0cy4KIAotaWYgKCEvXlxkezR9LS9vKSB7ICRf
ID1+IHMvXi4qPyBleGltXGIuKj86IC8vbzsgfQorICBpZiAoIS9eXGR7NH0tL28pIHsgJF8gPX4g
cy9eLio/IGV4aW1cYi4qPzogLy9vOyB9CiAKLXJldHVybiB1bmxlc3MKLSAgbXkoJGRhdGUsJGlk
KSA9IC9eKFxkezR9LVxkXGQtXGRcZCBcZFxkOlxkXGQ6XGRcZCg/OlwuXGQrKT8gKD86WystXVxk
ezR9ICk/KSg/OlxbXGQrXF0gKT8oXHd7Nn1cLVx3ezZ9XC1cd3syfSk/L287CisgIHJldHVybiB1
bmxlc3MKKyAgICBteSgkZGF0ZSwkaWQpID0gL14oXGR7NH0tXGRcZC1cZFxkIFxkXGQ6XGRcZDpc
ZFxkKD86XC5cZCspPyAoPzpbKy1dXGR7NH0gKT8pKD86XFtcZCtcXSApPyhcd3s2fVwtXHd7Nn1c
LVx3ezJ9KT8vbzsKIAotIyBIYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGUgbG9nIGxpbmUgYmVsb25n
cyB0byBhIHNwZWNpZmljIG1lc3NhZ2UuIFdlIHNhdmUKLSMgbGluZXMgZm9yIHNwZWNpZmljIG1l
c3NhZ2VzIHVudGlsIHRoZSBtZXNzYWdlIGlzIGNvbXBsZXRlLiBUaGVuIGVpdGhlciBwcmludAot
IyBvciBkaXNjYXJkLgorICAjIEhhbmRsZSB0aGUgY2FzZSB3aGVuIHRoZSBsb2cgbGluZSBiZWxv
bmdzIHRvIGEgc3BlY2lmaWMgbWVzc2FnZS4gV2Ugc2F2ZQorICAjIGxpbmVzIGZvciBzcGVjaWZp
YyBtZXNzYWdlcyB1bnRpbCB0aGUgbWVzc2FnZSBpcyBjb21wbGV0ZS4gVGhlbiBlaXRoZXIgcHJp
bnQKKyAgIyBvciBkaXNjYXJkLgogCi1pZiAoZGVmaW5lZCAkaWQpCi0gIHsKLSAgJHNhdmVkeyRp
ZH0gPSAnJyB1bmxlc3MgZGVmaW5lZCgkc2F2ZWR7JGlkfSk7CisgIGlmIChkZWZpbmVkICRpZCkK
KyAgICB7CisgICAgJHNhdmVkeyRpZH0gPSAnJyB1bmxlc3MgZGVmaW5lZCgkc2F2ZWR7JGlkfSk7
CiAKLSAgIyBTYXZlIHVwIHRoZSBkYXRhIGZvciB0aGlzIG1lc3NhZ2UgaW4gY2FzZSBpdCBiZWNv
bWVzIGludGVyZXN0aW5nIGxhdGVyLgorICAgICMgU2F2ZSB1cCB0aGUgZGF0YSBmb3IgdGhpcyBt
ZXNzYWdlIGluIGNhc2UgaXQgYmVjb21lcyBpbnRlcmVzdGluZyBsYXRlci4KIAotICAkc2F2ZWR7
JGlkfSAuPSAkXzsKKyAgICAkc2F2ZWR7JGlkfSAuPSAkXzsKIAotICAjIEFyZSB3ZSBpbnRlcmVz
dGVkIGluIHRoaXMgaWQgPyBTaG9ydCBjaXJjdWl0IGlmIHdlIGFscmVhZHkgd2VyZSBpbnRlcmVz
dGVkLgorICAgICMgQXJlIHdlIGludGVyZXN0ZWQgaW4gdGhpcyBpZCA/IFNob3J0IGNpcmN1aXQg
aWYgd2UgYWxyZWFkeSB3ZXJlIGludGVyZXN0ZWQuCiAKLSAgaWYgKCRpbnZlcnQpCi0gICAgewot
ICAgICRpZF9saXN0eyRpZH0gPSAxIGlmICghZGVmaW5lZCgkaWRfbGlzdHskaWR9KSk7Ci0gICAg
JGlkX2xpc3R7JGlkfSA9IDAgaWYgKCgkaW5zZW5zaXRpdmUgJiYgLyRwYXR0ZXJuL2lvKSB8fCAv
JHBhdHRlcm4vbyk7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgIGlmIChkZWZpbmVkICRpZF9s
aXN0eyRpZH0gfHwKLSAgICAgICgkaW5zZW5zaXRpdmUgJiYgLyRwYXR0ZXJuL2lvKSB8fCAvJHBh
dHRlcm4vbykKKyAgICBpZiAoJGludmVydCkKICAgICAgIHsKLSAgICAgICRpZF9saXN0eyRpZH0g
PSAxOwotICAgICAgZ2V0X3JlbGF0ZWRfaWRzKCRpZCkgaWYgJHJlbGF0ZWQ7CisgICAgICAkaWRf
bGlzdHskaWR9ID0gMSBpZiAoIWRlZmluZWQoJGlkX2xpc3R7JGlkfSkpOworICAgICAgJGlkX2xp
c3R7JGlkfSA9IDAgaWYgKCgkaW5zZW5zaXRpdmUgJiYgLyRwYXR0ZXJuL2lvKSB8fCAvJHBhdHRl
cm4vbyk7CiAgICAgICB9Ci0gICAgZWxzaWYgKCRyZWxhdGVkICYmICRyZWxhdGVkX3JlKQorICAg
IGVsc2UKICAgICAgIHsKLSAgICAgIGdyZXBfZm9yX3JlbGF0ZWQoJF8sICRpZCk7CisgICAgICBp
ZiAoZGVmaW5lZCAkaWRfbGlzdHskaWR9IHx8CisJKCRpbnNlbnNpdGl2ZSAmJiAvJHBhdHRlcm4v
aW8pIHx8IC8kcGF0dGVybi9vKQorCXsKKwkkaWRfbGlzdHskaWR9ID0gMTsKKwlnZXRfcmVsYXRl
ZF9pZHMoJGlkKSBpZiAkcmVsYXRlZDsKKwl9CisgICAgICBlbHNpZiAoJHJlbGF0ZWQgJiYgJHJl
bGF0ZWRfcmUpCisJeworCWdyZXBfZm9yX3JlbGF0ZWQoJF8sICRpZCk7CisJfQogICAgICAgfQot
ICAgIH0KIAotICAjIFNlZSBpZiB0aGlzIGlzIGEgY29tcGxldGlvbiBmb3Igc29tZSBtZXNzYWdl
LiBJZiBpdCBpcyBpbnRlcmVzdGluZywKLSAgIyBwcmludCBpdCwgYnV0IGluIGFueSBldmVudCwg
dGhyb3cgYXdheSB3aGF0IHdhcyBzYXZlZC4KKyAgICAjIFNlZSBpZiB0aGlzIGlzIGEgY29tcGxl
dGlvbiBmb3Igc29tZSBtZXNzYWdlLiBJZiBpdCBpcyBpbnRlcmVzdGluZywKKyAgICAjIHByaW50
IGl0LCBidXQgaW4gYW55IGV2ZW50LCB0aHJvdyBhd2F5IHdoYXQgd2FzIHNhdmVkLgogCi0gIGlm
IChpbmRleCgkXywgJ0NvbXBsZXRlZCcpICE9IC0xIHx8Ci0gICAgICBpbmRleCgkXywgJ1NNVFAg
ZGF0YSB0aW1lb3V0JykgIT0gLTEgfHwKLSAgICAgICAgKGluZGV4KCRfLCAncmVqZWN0ZWQnKSAh
PSAtMSAmJgotICAgICAgICAgIC9eKFxkezR9LVxkXGQtXGRcZCBcZFxkOlxkXGQ6XGRcZCg/Olwu
XGQrKT8gKD86WystXVxkezR9ICk/KSg/OlxbXGQrXF0gKT9cd3s2fVwtXHd7Nn1cLVx3ezJ9IHJl
amVjdGVkL28pKQotICAgIHsKLSAgICBpZiAoJHF1ZXVlX3RpbWUgIT0gLTEgJiYKLSAgICAgICAg
JHNhdmVkeyRpZH0gPX4gL14oXGR7NH0tXGRcZC1cZFxkIFxkXGQ6XGRcZDpcZFxkIChbKy1dXGR7
NH0gKT8pL28pCisgICAgaWYgKGluZGV4KCRfLCAnQ29tcGxldGVkJykgIT0gLTEgfHwKKwlpbmRl
eCgkXywgJ1NNVFAgZGF0YSB0aW1lb3V0JykgIT0gLTEgfHwKKwkgIChpbmRleCgkXywgJ3JlamVj
dGVkJykgIT0gLTEgJiYKKwkgICAgL14oXGR7NH0tXGRcZC1cZFxkIFxkXGQ6XGRcZDpcZFxkKD86
XC5cZCspPyAoPzpbKy1dXGR7NH0gKT8pKD86XFtcZCtcXSApP1x3ezZ9XC1cd3s2fVwtXHd7Mn0g
cmVqZWN0ZWQvbykpCiAgICAgICB7Ci0gICAgICBteSAkb2xkX3NlYyA9ICZzZWNvbmRzKCQxKTsK
LSAgICAgIG15ICRzZWMgPSAmc2Vjb25kcygkZGF0ZSk7Ci0gICAgICAkaWRfbGlzdHskaWR9ID0g
MCBpZiAkaWRfbGlzdHskaWR9ICYmICRzZWMgLSAkb2xkX3NlYyA8PSAkcXVldWVfdGltZTsKKyAg
ICAgIGlmICgkcXVldWVfdGltZSAhPSAtMSAmJgorCSAgJHNhdmVkeyRpZH0gPX4gL14oXGR7NH0t
XGRcZC1cZFxkIFxkXGQ6XGRcZDpcZFxkIChbKy1dXGR7NH0gKT8pL28pCisJeworCW15ICRvbGRf
c2VjID0gJnNlY29uZHMoJDEpOworCW15ICRzZWMgPSAmc2Vjb25kcygkZGF0ZSk7CisJJGlkX2xp
c3R7JGlkfSA9IDAgaWYgJGlkX2xpc3R7JGlkfSAmJiAkc2VjIC0gJG9sZF9zZWMgPD0gJHF1ZXVl
X3RpbWU7CisJfQorCisgICAgICBwcmludCAiJHNhdmVkeyRpZH1cbiIgaWYgKCRpZF9saXN0eyRp
ZH0pOworICAgICAgZGVsZXRlICRpZF9saXN0eyRpZH07CisgICAgICBkZWxldGUgJHNhdmVkeyRp
ZH07CiAgICAgICB9Ci0KLSAgICBwcmludCAiJHNhdmVkeyRpZH1cbiIgaWYgKCRpZF9saXN0eyRp
ZH0pOwotICAgIGRlbGV0ZSAkaWRfbGlzdHskaWR9OwotICAgIGRlbGV0ZSAkc2F2ZWR7JGlkfTsK
ICAgICB9Ci0gIH0KIAotIyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGxvZyBsaW5lIGRvZXMg
bm90IGJlbG9uZyB0byBhIHNwZWNpZmljIG1lc3NhZ2UuCi0jIFByaW50IGl0IGlmIGl0IGlzIGlu
dGVyZXN0aW5nLgorICAjIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbG9nIGxpbmUgZG9lcyBu
b3QgYmVsb25nIHRvIGEgc3BlY2lmaWMgbWVzc2FnZS4KKyAgIyBQcmludCBpdCBpZiBpdCBpcyBp
bnRlcmVzdGluZy4KIAotZWxzaWYgKCAoJGludmVydCAmJiAoKCRpbnNlbnNpdGl2ZSAmJiAhLyRw
YXR0ZXJuL2lvKSB8fCAhLyRwYXR0ZXJuL28pKSB8fAotICAgICAgICghJGludmVydCAmJiAoKCRp
bnNlbnNpdGl2ZSAmJiAgLyRwYXR0ZXJuL2lvKSB8fCAgLyRwYXR0ZXJuL28pKSApCi0gIHsgcHJp
bnQgIiRfXG4iOyB9Ci19CisgIGVsc2lmICggKCRpbnZlcnQgJiYgKCgkaW5zZW5zaXRpdmUgJiYg
IS8kcGF0dGVybi9pbykgfHwgIS8kcGF0dGVybi9vKSkgfHwKKwkgKCEkaW52ZXJ0ICYmICgoJGlu
c2Vuc2l0aXZlICYmICAvJHBhdHRlcm4vaW8pIHx8ICAvJHBhdHRlcm4vbykpICkKKyAgICB7IHBy
aW50ICIkX1xuIjsgfQorICB9CiAKICMgUm90YXRlZCBsb2cgZmlsZXMgYXJlIGZyZXF1ZW50bHkg
Y29tcHJlc3NlZCBhbmQgdGhlcmUgYXJlIGEgdmFyaWV0eSBvZgogIyBmb3JtYXRzIGl0IGNvdWxk
IGJlIGNvbXByZXNzZWQgd2l0aC4gUmF0aGVyIHRoYW4gdXNlIGp1c3Qgb25lIHRoYXQgaXMKQEAg
LTIwMCwxNyArMjAyLDE5IEBACiAgIHJldHVybiAkY21kbGluZTsKICAgfQogCi1zdWIgZ3JlcF9m
b3JfcmVsYXRlZCB7CitzdWIgZ3JlcF9mb3JfcmVsYXRlZAorICB7CiAgIG15ICgkbGluZSwkaWQp
ID0gQF87CiAgICRpZF9saXN0eyRpZH0gPSAxIGlmICRsaW5lID1+IG0vJHJlbGF0ZWRfcmUvOwot
fQorICB9CiAKLXN1YiBnZXRfcmVsYXRlZF9pZHMgeworc3ViIGdldF9yZWxhdGVkX2lkcworICB7
CiAgIG15ICgkaWQpID0gQF87CiAgIHB1c2ggQE1pZHMsICRpZCB1bmxlc3MgZ3JlcCAvXGIkaWRc
Yi8sIEBNaWRzOwogICBteSAkcmUgPSBqb2luICd8JywgQE1pZHM7CiAgICRyZWxhdGVkX3JlID0g
cXIvJHJlLzsKLX0KKyAgfQogCiAjIFRoZSBtYWluIHByb2dyYW0uIEV4dHJhY3QgdGhlIHBhdHRl
cm4gYW5kIG1ha2Ugc3VyZSBhbnkgcmVsZXZhbnQgY2hhcmFjdGVycwogIyBhcmUgcXVvdGVkIGlm
IHRoZSAtbCBmbGFnIGlzIGdpdmVuLiBUaGUgLXQgZmxhZyBnaXZlcyBhIHRpbWUtb24tcXVldWUg
dmFsdWUKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9leGltLmMgZXhpbS9zcmMvZXhpbS5jCi0tLSBl
eGltLm9yaWcvc3JjL2V4aW0uYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAor
KysgZXhpbS9zcmMvZXhpbS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBA
IC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFn
ZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIg
Ki8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTgg
Ki8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2Vl
IHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4g
Ki8KIAogCkBAIC00MCwzMSArNDAsMTkgQEAKIGZvciBzdG9yZSBhbGxvY2F0aW9uIHZpYSBFeGlt
J3Mgc3RvcmUgbWFuYWdlci4gVGhlIG5vcm1hbCBjYWxscyBhcmUgYWN0dWFsbHkKIG1hY3JvcyB0
aGF0IHBhc3Mgb3ZlciBsb2NhdGlvbiBpbmZvcm1hdGlvbiB0byBtYWtlIHRyYWNpbmcgZWFzaWVy
LiBUaGVzZQogZnVuY3Rpb25zIGp1c3QgaW50ZXJmYWNlIHRvIHRoZSBzdGFuZGFyZCBtYWNybyBj
YWxscy4gQSBnb29kIGNvbXBpbGVyIHdpbGwKLW9wdGltaXplIG91dCB0aGUgdGFpbCByZWN1cnNp
b24gYW5kIHNvIG5vdCBtYWtlIHRoZW0gdG9vIGV4cGVuc2l2ZS4gVGhlcmUKLWFyZSB0d28gc2V0
cyBvZiBmdW5jdGlvbnM7IG9uZSBmb3IgdXNlIHdoZW4gd2Ugd2FudCB0byByZXRhaW4gdGhlIGNv
bXBpbGVkCi1yZWd1bGFyIGV4cHJlc3Npb24gZm9yIGEgbG9uZyB0aW1lOyB0aGUgb3RoZXIgZm9y
IHNob3J0LXRlcm0gdXNlLiAqLworb3B0aW1pemUgb3V0IHRoZSB0YWlsIHJlY3Vyc2lvbiBhbmQg
c28gbm90IG1ha2UgdGhlbSB0b28gZXhwZW5zaXZlLiAqLwogCiBzdGF0aWMgdm9pZCAqCi1mdW5j
dGlvbl9zdG9yZV9nZXQoc2l6ZV90IHNpemUpCi17Ci0vKiBGb3Igbm93LCByZWdhcmQgYWxsIFJF
IHJlc3VsdHMgYXMgcG90ZW50aWFsbHkgdGFpbnRlZC4gIFdlIG1pZ2h0IG5lZWQKLW1vcmUgaW50
ZWxsaWdlbmNlIG9uIHRoaXMgcG9pbnQuICovCi1yZXR1cm4gc3RvcmVfZ2V0KChpbnQpc2l6ZSwg
VFJVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mdW5jdGlvbl9kdW1teV9mcmVlKHZvaWQgKmJsb2Nr
KSB7IGJsb2NrID0gYmxvY2s7IH0KLQotc3RhdGljIHZvaWQgKgotZnVuY3Rpb25fc3RvcmVfbWFs
bG9jKHNpemVfdCBzaXplKQorZnVuY3Rpb25fc3RvcmVfbWFsbG9jKFBDUkUyX1NJWkUgc2l6ZSwg
dm9pZCAqIHRhZykKIHsKIHJldHVybiBzdG9yZV9tYWxsb2MoKGludClzaXplKTsKIH0KIAogc3Rh
dGljIHZvaWQKLWZ1bmN0aW9uX3N0b3JlX2ZyZWUodm9pZCAqYmxvY2spCitmdW5jdGlvbl9zdG9y
ZV9mcmVlKHZvaWQgKiBibG9jaywgdm9pZCAqIHRhZykKIHsKLXN0b3JlX2ZyZWUoYmxvY2spOwor
LyogQXQgbGVhc3Qgc29tZSB2ZXJzaW9uIG9mIHBjcmUyIHBhc3MgYSBudWxsIHBvaW50ZXIgKi8K
K2lmIChibG9jaykgc3RvcmVfZnJlZShibG9jayk7CiB9CiAKIApAQCAtOTgsMjkgKzg2LDUxIEBA
CiBSZXR1cm5zOiAgICAgIHBvaW50ZXIgdG8gdGhlIGNvbXBpbGVkIHBhdHRlcm4KICovCiAKLWNv
bnN0IHBjcmUgKgotcmVnZXhfbXVzdF9jb21waWxlKGNvbnN0IHVzY2hhciAqcGF0dGVybiwgQk9P
TCBjYXNlbGVzcywgQk9PTCB1c2VfbWFsbG9jKQorY29uc3QgcGNyZTJfY29kZSAqCityZWdleF9t
dXN0X2NvbXBpbGUoY29uc3QgdXNjaGFyICogcGF0dGVybiwgQk9PTCBjYXNlbGVzcywgQk9PTCB1
c2VfbWFsbG9jKQogewotaW50IG9mZnNldDsKLWludCBvcHRpb25zID0gUENSRV9DT1BUOwotY29u
c3QgcGNyZSAqeWllbGQ7Ci1jb25zdCB1c2NoYXIgKmVycm9yOworc2l6ZV90IG9mZnNldDsKK2lu
dCBvcHRpb25zID0gY2FzZWxlc3MgPyBQQ1JFX0NPUFR8UENSRTJfQ0FTRUxFU1MgOiBQQ1JFX0NP
UFQ7Citjb25zdCBwY3JlMl9jb2RlICogeWllbGQ7CitpbnQgZXJyOworcGNyZTJfZ2VuZXJhbF9j
b250ZXh0ICogZ2N0eDsKK3BjcmUyX2NvbXBpbGVfY29udGV4dCAqIGNjdHg7CisKIGlmICh1c2Vf
bWFsbG9jKQogICB7Ci0gIHBjcmVfbWFsbG9jID0gZnVuY3Rpb25fc3RvcmVfbWFsbG9jOwotICBw
Y3JlX2ZyZWUgPSBmdW5jdGlvbl9zdG9yZV9mcmVlOworICBnY3R4ID0gcGNyZTJfZ2VuZXJhbF9j
b250ZXh0X2NyZWF0ZShmdW5jdGlvbl9zdG9yZV9tYWxsb2MsIGZ1bmN0aW9uX3N0b3JlX2ZyZWUs
IE5VTEwpOworICBjY3R4ID0gcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZShnY3R4KTsKICAg
fQotaWYgKGNhc2VsZXNzKSBvcHRpb25zIHw9IFBDUkVfQ0FTRUxFU1M7Ci15aWVsZCA9IHBjcmVf
Y29tcGlsZShDQ1MgcGF0dGVybiwgb3B0aW9ucywgQ0NTUyAmZXJyb3IsICZvZmZzZXQsIE5VTEwp
OwotcGNyZV9tYWxsb2MgPSBmdW5jdGlvbl9zdG9yZV9nZXQ7Ci1wY3JlX2ZyZWUgPSBmdW5jdGlv
bl9kdW1teV9mcmVlOwotaWYgKHlpZWxkID09IE5VTEwpCitlbHNlCisgIGNjdHggPSBwY3JlX2Nt
cF9jdHg7CisKK2lmICghKHlpZWxkID0gcGNyZTJfY29tcGlsZSgoUENSRTJfU1BUUilwYXR0ZXJu
LCBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsIG9wdGlvbnMsCisgICZlcnIsICZvZmZzZXQsIGNjdHgp
KSkKKyAgeworICB1c2NoYXIgZXJyYnVmWzEyOF07CisgIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdl
KGVyciwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CiAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxM
T0dfUEFOSUNfRElFLCAicmVndWxhciBleHByZXNzaW9uIGVycm9yOiAiCi0gICAgIiVzIGF0IG9m
ZnNldCAlZCB3aGlsZSBjb21waWxpbmcgJXMiLCBlcnJvciwgb2Zmc2V0LCBwYXR0ZXJuKTsKKyAg
ICAiJXMgYXQgb2Zmc2V0ICVsZCB3aGlsZSBjb21waWxpbmcgJXMiLCBlcnJidWYsIChsb25nKW9m
ZnNldCwgcGF0dGVybik7CisgIH0KKworaWYgKHVzZV9tYWxsb2MpCisgIHsKKyAgcGNyZTJfY29t
cGlsZV9jb250ZXh0X2ZyZWUoY2N0eCk7CisgIHBjcmUyX2dlbmVyYWxfY29udGV4dF9mcmVlKGdj
dHgpOworICB9CiByZXR1cm4geWllbGQ7CiB9CiAKIAorc3RhdGljIHZvaWQKK3BjcmVfaW5pdCh2
b2lkKQoreworcGNyZV9nZW5fY3R4ID0gcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZShmdW5j
dGlvbl9zdG9yZV9tYWxsb2MsIGZ1bmN0aW9uX3N0b3JlX2ZyZWUsIE5VTEwpOworcGNyZV9jbXBf
Y3R4ID0gcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZShwY3JlX2dlbl9jdHgpOworcGNyZV9t
dGNfY3R4ID0gcGNyZTJfbWF0Y2hfY29udGV4dF9jcmVhdGUocGNyZV9nZW5fY3R4KTsKK30KKwor
CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
QEAgLTEyOCw3ICsxMzgsOCBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KIAogLyogVGhpcyBmdW5jdGlvbiBydW5zIGEgcmVndWxhciBleHByZXNz
aW9uIG1hdGNoLCBhbmQgc2V0cyB1cCB0aGUgcG9pbnRlcnMgdG8KLXRoZSBtYXRjaGVkIHN1YnN0
cmluZ3MuCit0aGUgbWF0Y2hlZCBzdWJzdHJpbmdzLiAgVGhlIG1hdGNoZWQgc3RyaW5ncyBhcmUg
Y29waWVkIHNvIHRoZSBsaWZldGltZSBvZgordGhlIHN1YmplY3QgaXMgbm90IGEgcHJvYmxlbS4K
IAogQXJndW1lbnRzOgogICByZSAgICAgICAgICB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbgpAQCAt
MTM4LDMyICsxNDksNjcgQEAKICAgICAgICAgICAgICAgaWYgPj0gMCBzZXR1cCBmcm9tIHNldHVw
KzEgb253YXJkcywKICAgICAgICAgICAgICAgICBleGNsdWRpbmcgdGhlIGZ1bGwgbWF0Y2hlZCBz
dHJpbmcKIAotUmV0dXJuczogICAgICBUUlVFIG9yIEZBTFNFCitSZXR1cm5zOiAgICAgIFRSVUUg
aWYgbWF0Y2hlZCwgb3IgRkFMU0UKICovCiAKIEJPT0wKLXJlZ2V4X21hdGNoX2FuZF9zZXR1cChj
b25zdCBwY3JlICpyZSwgY29uc3QgdXNjaGFyICpzdWJqZWN0LCBpbnQgb3B0aW9ucywgaW50IHNl
dHVwKQorcmVnZXhfbWF0Y2hfYW5kX3NldHVwKGNvbnN0IHBjcmUyX2NvZGUgKiByZSwgY29uc3Qg
dXNjaGFyICogc3ViamVjdCwgaW50IG9wdGlvbnMsIGludCBzZXR1cCkKIHsKLWludCBvdmVjdG9y
WzMqKEVYUEFORF9NQVhOKzEpXTsKLXVzY2hhciAqIHMgPSBzdHJpbmdfY29weShzdWJqZWN0KTsJ
LyogZGUtY29uc3RpZnlpbmcgKi8KLWludCBuID0gcGNyZV9leGVjKHJlLCBOVUxMLCBDUyBzLCBV
c3RybGVuKHMpLCAwLAotICBQQ1JFX0VPUFQgfCBvcHRpb25zLCBvdmVjdG9yLCBuZWxlbShvdmVj
dG9yKSk7Ci1CT09MIHlpZWxkID0gbiA+PSAwOwotaWYgKG4gPT0gMCkgbiA9IEVYUEFORF9NQVhO
ICsgMTsKLWlmICh5aWVsZCkKK3BjcmUyX21hdGNoX2RhdGEgKiBtZCA9IHBjcmUyX21hdGNoX2Rh
dGFfY3JlYXRlX2Zyb21fcGF0dGVybihyZSwgcGNyZV9nZW5fY3R4KTsKK2ludCByZXMgPSBwY3Jl
Ml9tYXRjaChyZSwgKFBDUkUyX1NQVFIpc3ViamVjdCwgUENSRTJfWkVST19URVJNSU5BVEVELCAw
LAorCQkJUENSRV9FT1BUIHwgb3B0aW9ucywgbWQsIHBjcmVfbXRjX2N0eCk7CitCT09MIHlpZWxk
OworCitpZiAoKHlpZWxkID0gKHJlcyA+PSAwKSkpCiAgIHsKKyAgcmVzID0gcGNyZTJfZ2V0X292
ZWN0b3JfY291bnQobWQpOwogICBleHBhbmRfbm1heCA9IHNldHVwIDwgMCA/IDAgOiBzZXR1cCAr
IDE7Ci0gIGZvciAoaW50IG5uID0gc2V0dXAgPCAwID8gMCA6IDI7IG5uIDwgbioyOyBubiArPSAy
KQorICBmb3IgKGludCBtYXRjaG51bSA9IHNldHVwIDwgMCA/IDAgOiAxOyBtYXRjaG51bSA8IHJl
czsgbWF0Y2hudW0rKykKICAgICB7Ci0gICAgZXhwYW5kX25zdHJpbmdbZXhwYW5kX25tYXhdID0g
cyArIG92ZWN0b3Jbbm5dOwotICAgIGV4cGFuZF9ubGVuZ3RoW2V4cGFuZF9ubWF4KytdID0gb3Zl
Y3RvcltubisxXSAtIG92ZWN0b3Jbbm5dOworICAgIFBDUkUyX1NJWkUgbGVuOworICAgIHBjcmUy
X3N1YnN0cmluZ19nZXRfYnludW1iZXIobWQsIG1hdGNobnVtLAorICAgICAgKFBDUkUyX1VDSEFS
ICoqKSZleHBhbmRfbnN0cmluZ1tleHBhbmRfbm1heF0sICZsZW4pOworICAgIGV4cGFuZF9ubGVu
Z3RoW2V4cGFuZF9ubWF4KytdID0gKGludClsZW47CiAgICAgfQogICBleHBhbmRfbm1heC0tOwog
ICB9CitlbHNlIGlmIChyZXMgIT0gUENSRTJfRVJST1JfTk9NQVRDSCkgREVCVUcoRF9hbnkpCisg
IHsKKyAgdXNjaGFyIGVycmJ1ZlsxMjhdOworICBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZShyZXMs
IGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpOworICBkZWJ1Z19wcmludGZfaW5kZW50KCJwY3JlMjog
JXNcbiIsIGVycmJ1Zik7CisgIH0KK3BjcmUyX21hdGNoX2RhdGFfZnJlZShtZCk7CiByZXR1cm4g
eWllbGQ7CiB9CiAKIAorLyogQ2hlY2sganVzdCBmb3IgbWF0Y2ggd2l0aCByZWdleC4gIFVzZXMg
dGhlIGNvbW1vbiBtZW1vcnktaGFuZGxpbmcuCisKK0FyZ3VtZW50czoKKwlyZQljb21waWxlZCBy
ZWdleAorCXN1YmplY3QJc3RyaW5nIHRvIGJlIGNoZWNrZWQKKwlzbGVuCWxlbmd0aCBvZiBzdWJq
ZWN0OyAtMSBmb3IgbnVsLXRlcm1pbmF0ZWQKKwlycHRyCXBvaW50ZXIgZm9yIG1hdGNoZWQgc3Ry
aW5nLCBjb3BpZWQsIG9yIE5VTEwKKworUmV0dXJuOiBUUlVFIGZvciBhIG1hdGNoLgorKi8KKwor
Qk9PTAorcmVnZXhfbWF0Y2goY29uc3QgcGNyZTJfY29kZSAqIHJlLCBjb25zdCB1c2NoYXIgKiBz
dWJqZWN0LCBpbnQgc2xlbiwgdXNjaGFyICoqIHJwdHIpCit7CitwY3JlMl9tYXRjaF9kYXRhICog
bWQgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSgxLCBwY3JlX2dlbl9jdHgpOworaW50IHJjID0g
cGNyZTJfbWF0Y2gocmUsIChQQ1JFMl9TUFRSKXN1YmplY3QsCisJCSAgICAgIHNsZW4gPj0gMCA/
IHNsZW4gOiBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsCisJCSAgICAgIDAsIFBDUkVfRU9QVCwgbWQs
IHBjcmVfbXRjX2N0eCk7CitQQ1JFMl9TSVpFICogb3ZlYyA9IHBjcmUyX2dldF9vdmVjdG9yX3Bv
aW50ZXIobWQpOworaWYgKHJjIDwgMCkKKyAgcmV0dXJuIEZBTFNFOworaWYgKHJwdHIpCisgICpy
cHRyID0gc3RyaW5nX2NvcHluKHN1YmplY3QgKyBvdmVjWzBdLCBvdmVjWzFdIC0gb3ZlY1swXSk7
CityZXR1cm4gVFJVRTsKK30KKwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCkBAIC0yMTEsNiArMjU3LDQ2IEBACiB9CiAKIAorLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgSGFu
ZGxlciBmb3IgU0lHU0VHViAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorI2lmZGVmIFNBX1NJR0lO
Rk8KK3NlZ3ZfaGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QgKiBpbmZvLCB2b2lkICogdWN0eCkK
K3sKK2xvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUMsICJTSUdTRUdWIChmYXVsdCBhZGRy
ZXNzOiAlcCkiLCBpbmZvLT5zaV9hZGRyKTsKKyMgaWYgZGVmaW5lZChTRUdWX01BUEVSUikgJiYg
ZGVmaW5lZChTRUdWX0FDQ0VSUikgJiYgZGVmaW5lZChTRUdWX0JOREVSUikgJiYgZGVmaW5lZChT
RUdWX1BLVUVSUikKK3N3aXRjaCAoaW5mby0+c2lfY29kZSkKKyAgeworICBjYXNlIFNFR1ZfTUFQ
RVJSOiBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAiU0VHVl9NQVBFUlIiKTsgYnJl
YWs7CisgIGNhc2UgU0VHVl9BQ0NFUlI6IGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUMs
ICJTRUdWX0FDQ0VSUiIpOyBicmVhazsKKyAgY2FzZSBTRUdWX0JOREVSUjogbG9nX3dyaXRlKDAs
IExPR19NQUlOfExPR19QQU5JQywgIlNFR1ZfQk5ERVJSIik7IGJyZWFrOworICBjYXNlIFNFR1Zf
UEtVRVJSOiBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAiU0VHVl9QS1VFUlIiKTsg
YnJlYWs7CisgIH0KKyMgZW5kaWYKK2lmIChVUyBpbmZvLT5zaV9hZGRyIDwgVVMgNDA5NikKKyAg
bG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQywgIlNJR1NFR1YgKG51bGwgcG9pbnRlciBp
bmRpcmVjdGlvbikiKTsKK2Vsc2UKKyAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQywg
IlNJR1NFR1YgKG1heWJlIGF0dGVtcHQgdG8gd3JpdGUgdG8gaW1tdXRhYmxlIG1lbW9yeSkiKTsK
K2lmIChwcm9jZXNzX2luZm9fbGVuID4gMCkKKyAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19Q
QU5JQywgIlNJR1NFR1YgKCUuKnMpIiwgcHJvY2Vzc19pbmZvX2xlbiwgcHJvY2Vzc19pbmZvKTsK
K3NpZ25hbChTSUdTRUdWLCBTSUdfREZMKTsKK2tpbGwoZ2V0cGlkKCksIHNpZyk7Cit9CisKKyNl
bHNlCitzZWd2X2hhbmRsZXIoaW50IHNpZykKK3sKK2xvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0df
UEFOSUMsICJTSUdTRUdWIChtYXliZSBhdHRlbXB0IHRvIHdyaXRlIHRvIGltbXV0YWJsZSBtZW1v
cnkpIik7CitpZiAocHJvY2Vzc19pbmZvX2xlbiA+IDApCisgIGxvZ193cml0ZSgwLCBMT0dfTUFJ
TnxMT0dfUEFOSUMsICJTSUdTRUdWICglLipzKSIsIHByb2Nlc3NfaW5mb19sZW4sIHByb2Nlc3Nf
aW5mbyk7CitzaWduYWwoU0lHU0VHViwgU0lHX0RGTCk7CitraWxsKGdldHBpZCgpLCBzaWcpOwor
fQorI2VuZGlmCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKICogICAgICAgICAgICAgSGFuZGxlciBmb3IgU0lHVVNSMSAgICAgICAgICAgICAg
ICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpA
QCAtMjY5LDcgKzM1NSw2IEBACiB2b2lkCiBzaWdhbHJtX2hhbmRsZXIoaW50IHNpZykKIHsKLXNp
ZyA9IHNpZzsgICAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwogc2lnYWxybV9z
ZWVuID0gVFJVRTsKIG9zX25vbl9yZXN0YXJ0aW5nX3NpZ25hbChTSUdBTFJNLCBzaWdhbHJtX2hh
bmRsZXIpOwogfQpAQCAtNDMyLDkgKzUxNywxMCBAQAogY2xvY2tzIHRoYXQgZ28gYmFja3dhcmRz
LgogCiBBcmd1bWVudHM6Ci0gIHRndF90diAgICAgICBBIHRpbWV2YWwgd2hpY2ggd2FzIHVzZWQg
dG8gY3JlYXRlIHVuaXF1ZW5lc3M7IGl0cyB1c2VjIGZpZWxkCisgIHByZXZfdHYgICAgICBBIHRp
bWV2YWwgd2hpY2ggd2FzIHVzZWQgdG8gY3JlYXRlIHVuaXF1ZW5lc3M7IGl0cyB1c2VjIGZpZWxk
CiAgICAgICAgICAgICAgICAgIGhhcyBiZWVuIHJvdW5kZWQgZG93biB0byB0aGUgdmFsdWUgb2Yg
dGhlIHJlc29sdXRpb24uCiAgICAgICAgICAgICAgICAgIFdlIHdhbnQgdG8gYmUgc3VyZSB0aGUg
Y3VycmVudCB0aW1lIGlzIGdyZWF0ZXIgdGhhbiB0aGlzLgorCQkgT24gcmV0dXJuLCB1cGRhdGVk
IHRvIGN1cnJlbnQgKHJvdW5kZWQgZG93bikuCiAgIHJlc29sdXRpb24gICBUaGUgcmVzb2x1dGlv
biB0aGF0IHdhcyB1c2VkIHRvIGRpdmlkZSB0aGUgbWljcm9zZWNvbmRzCiAgICAgICAgICAgICAg
ICAgICgxIGZvciBtYWlsZGlyLCBsYXJnZXIgZm9yIG1lc3NhZ2UgaWRzKQogCkBAIC00NDIsNyAr
NTI4LDcgQEAKICovCiAKIHZvaWQKLWV4aW1fd2FpdF90aWNrKHN0cnVjdCB0aW1ldmFsICogdGd0
X3R2LCBpbnQgcmVzb2x1dGlvbikKK2V4aW1fd2FpdF90aWNrKHN0cnVjdCB0aW1ldmFsICogcHJl
dl90diwgaW50IHJlc29sdXRpb24pCiB7CiBzdHJ1Y3QgdGltZXZhbCBub3dfdHY7CiBsb25nIGlu
dCBub3dfdHJ1ZV91c2VjOwpAQCAtNDUxLDEzICs1MzcsMTMgQEAKIG5vd190cnVlX3VzZWMgPSBu
b3dfdHYudHZfdXNlYzsKIG5vd190di50dl91c2VjID0gKG5vd190cnVlX3VzZWMvcmVzb2x1dGlv
bikgKiByZXNvbHV0aW9uOwogCi13aGlsZSAoZXhpbV90dmNtcCgmbm93X3R2LCB0Z3RfdHYpIDw9
IDApCit3aGlsZSAoZXhpbV90dmNtcCgmbm93X3R2LCBwcmV2X3R2KSA8PSAwKQogICB7CiAgIHN0
cnVjdCBpdGltZXJ2YWwgaXR2YWw7CiAgIGl0dmFsLml0X2ludGVydmFsLnR2X3NlYyA9IDA7CiAg
IGl0dmFsLml0X2ludGVydmFsLnR2X3VzZWMgPSAwOwotICBpdHZhbC5pdF92YWx1ZS50dl9zZWMg
PSB0Z3RfdHYtPnR2X3NlYyAtIG5vd190di50dl9zZWM7Ci0gIGl0dmFsLml0X3ZhbHVlLnR2X3Vz
ZWMgPSB0Z3RfdHYtPnR2X3VzZWMgKyByZXNvbHV0aW9uIC0gbm93X3RydWVfdXNlYzsKKyAgaXR2
YWwuaXRfdmFsdWUudHZfc2VjID0gcHJldl90di0+dHZfc2VjIC0gbm93X3R2LnR2X3NlYzsKKyAg
aXR2YWwuaXRfdmFsdWUudHZfdXNlYyA9IHByZXZfdHYtPnR2X3VzZWMgKyByZXNvbHV0aW9uIC0g
bm93X3RydWVfdXNlYzsKIAogICAvKiBXZSBrbm93IHRoYXQsIG92ZXJhbGwsICJub3ciIGlzIGxl
c3MgdGhhbiBvciBlcXVhbCB0byAidGhlbiIuIFRoZXJlZm9yZSwgYQogICBuZWdhdGl2ZSB2YWx1
ZSBmb3IgdGhlIG1pY3Jvc2Vjb25kcyBpcyBwb3NzaWJsZSBvbmx5IGluIHRoZSBjYXNlIHdoZW4g
Im5vdyIKQEAgLTQ3NSw3ICs1NjEsNyBAQAogICAgIGlmICghZi5ydW5uaW5nX2luX3Rlc3RfaGFy
bmVzcykKICAgICAgIHsKICAgICAgIGRlYnVnX3ByaW50ZigidGljayBjaGVjazogIiBUSU1FX1Rf
Rk1UICIuJTA2bHUgIiBUSU1FX1RfRk1UICIuJTA2bHVcbiIsCi0gICAgICAgIHRndF90di0+dHZf
c2VjLCAobG9uZykgdGd0X3R2LT50dl91c2VjLAorICAgICAgICBwcmV2X3R2LT50dl9zZWMsIChs
b25nKSBwcmV2X3R2LT50dl91c2VjLAogICAgICAgIAlub3dfdHYudHZfc2VjLCAobG9uZykgbm93
X3R2LnR2X3VzZWMpOwogICAgICAgZGVidWdfcHJpbnRmKCJ3YWl0aW5nICIgVElNRV9UX0ZNVCAi
LiUwNmx1IHNlY1xuIiwKICAgICAgICAgaXR2YWwuaXRfdmFsdWUudHZfc2VjLCAobG9uZykgaXR2
YWwuaXRfdmFsdWUudHZfdXNlYyk7CkBAIC00ODcsMTAgKzU3MywxMSBAQAogICAvKiBCZSBwcmFw
YXJlZCB0byBnbyBhcm91bmQgaWYgdGhlIGtlcm5lbCBkb2VzIG5vdCBpbXBsZW1lbnQgc3VidGlj
awogICBncmFudWxhcml0eSAoR05VIEh1cmQpICovCiAKLSAgKHZvaWQpZ2V0dGltZW9mZGF5KCZu
b3dfdHYsIE5VTEwpOworICBleGltX2dldHRpbWUoJm5vd190dik7CiAgIG5vd190cnVlX3VzZWMg
PSBub3dfdHYudHZfdXNlYzsKICAgbm93X3R2LnR2X3VzZWMgPSAobm93X3RydWVfdXNlYy9yZXNv
bHV0aW9uKSAqIHJlc29sdXRpb247CiAgIH0KKypwcmV2X3R2ID0gbm93X3R2OwogfQogCiAKQEAg
LTU1NSw3ICs2NDIsNyBAQAogICAgIHsKICAgICBpZiAoZGV2bnVsbCA8IDApIGRldm51bGwgPSBv
cGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOwogICAgIGlmIChkZXZudWxsIDwgMCkgbG9nX3dyaXRl
KDAsIExPR19NQUlOfExPR19QQU5JQ19ESUUsICIlcyIsCi0gICAgICBzdHJpbmdfb3Blbl9mYWls
ZWQoZXJybm8sICIvZGV2L251bGwiLCBOVUxMKSk7CisgICAgICBzdHJpbmdfb3Blbl9mYWlsZWQo
Ii9kZXYvbnVsbCIsIE5VTEwpKTsKICAgICBpZiAoZGV2bnVsbCAhPSBpKSAodm9pZClkdXAyKGRl
dm51bGwsIGkpOwogICAgIH0KICAgfQpAQCAtNjUyLDcgKzczOSw3IEBACiAqLwogCiB2b2lkCi1l
eGltX3NldHVnaWQodWlkX3QgdWlkLCBnaWRfdCBnaWQsIEJPT0wgaWdmbGFnLCB1c2NoYXIgKm1z
ZykKK2V4aW1fc2V0dWdpZCh1aWRfdCB1aWQsIGdpZF90IGdpZCwgQk9PTCBpZ2ZsYWcsIGNvbnN0
IHVzY2hhciAqIG1zZykKIHsKIHVpZF90IGV1aWQgPSBnZXRldWlkKCk7CiBnaWRfdCBlZ2lkID0g
Z2V0ZWdpZCgpOwpAQCAtODYxLDcgKzk0OCw3IEBACiAgIGludCByYyA9IHZlcmlmeV9hZGRyZXNz
KGRlbGl2ZXJfbWFrZV9hZGRyKGFkZHJlc3MsVFJVRSksIHN0ZG91dCwgZmxhZ3MsIC0xLAogICAg
IC0xLCAtMSwgTlVMTCwgTlVMTCwgTlVMTCk7CiAgIGlmIChyYyA9PSBGQUlMKSAqZXhpdF92YWx1
ZSA9IDI7Ci0gICAgZWxzZSBpZiAocmMgPT0gREVGRVIgJiYgKmV4aXRfdmFsdWUgPT0gMCkgKmV4
aXRfdmFsdWUgPSAxOworICBlbHNlIGlmIChyYyA9PSBERUZFUiAmJiAqZXhpdF92YWx1ZSA9PSAw
KSAqZXhpdF92YWx1ZSA9IDE7CiAgIH0KIH0KIApAQCAtODcyLDU0ICs5NTksNjYgQEAKICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyB2
b2lkCi1zaG93X2RiX3ZlcnNpb24oRklMRSAqIGYpCitzaG93X3N0cmluZyhCT09MIGlzX3N0ZG91
dCwgZ3N0cmluZyAqIGcpCit7Citjb25zdCB1c2NoYXIgKiBzID0gc3RyaW5nX2Zyb21fZ3N0cmlu
ZyhnKTsKK2lmIChzKQorICBpZiAoaXNfc3Rkb3V0KSBmcHV0cyhDQ1Mgcywgc3Rkb3V0KTsKKyAg
ZWxzZSBkZWJ1Z19wcmludGYoIiVzIiwgcyk7Cit9CisKKworc3RhdGljIGdzdHJpbmcgKgorc2hv
d19kYl92ZXJzaW9uKGdzdHJpbmcgKiBnKQogewogI2lmZGVmIERCX1ZFUlNJT05fU1RSSU5HCiBE
RUJVRyhEX2FueSkKICAgewotICBmcHJpbnRmKGYsICJMaWJyYXJ5IHZlcnNpb246IEJEQjogQ29t
cGlsZTogJXNcbiIsIERCX1ZFUlNJT05fU1RSSU5HKTsKLSAgZnByaW50ZihmLCAiICAgICAgICAg
ICAgICAgICAgICAgIFJ1bnRpbWU6ICVzXG4iLAorICBnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywg
IkxpYnJhcnkgdmVyc2lvbjogQkRCOiBDb21waWxlOiAlc1xuIiwgREJfVkVSU0lPTl9TVFJJTkcp
OworICBnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywgIiAgICAgICAgICAgICAgICAgICAgICBSdW50
aW1lOiAlc1xuIiwKICAgICBkYl92ZXJzaW9uKE5VTEwsIE5VTEwsIE5VTEwpKTsKICAgfQogZWxz
ZQotICBmcHJpbnRmKGYsICJCZXJrZWxleSBEQjogJXNcbiIsIERCX1ZFUlNJT05fU1RSSU5HKTsK
KyAgZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcsICJCZXJrZWxleSBEQjogJXNcbiIsIERCX1ZFUlNJ
T05fU1RSSU5HKTsKIAogI2VsaWYgZGVmaW5lZChCVFJFRVZFUlNJT04pICYmIGRlZmluZWQoSEFT
SFZFUlNJT04pCi0gICNpZmRlZiBVU0VfREIKLSAgZnByaW50ZihmLCAiUHJvYmFibHkgQmVya2Vs
ZXkgREIgdmVyc2lvbiAxLjh4IChuYXRpdmUgbW9kZSlcbiIpOwotICAjZWxzZQotICBmcHJpbnRm
KGYsICJQcm9iYWJseSBCZXJrZWxleSBEQiB2ZXJzaW9uIDEuOHggKGNvbXBhdGliaWxpdHkgbW9k
ZSlcbiIpOwotICAjZW5kaWYKKyMgaWZkZWYgVVNFX0RCCisgIGcgPSBzdHJpbmdfY2F0KGcsIFVT
IlByb2JhYmx5IEJlcmtlbGV5IERCIHZlcnNpb24gMS44eCAobmF0aXZlIG1vZGUpXG4iKTsKKyMg
ZWxzZQorICBnID0gc3RyaW5nX2NhdChnLCBVUyJQcm9iYWJseSBCZXJrZWxleSBEQiB2ZXJzaW9u
IDEuOHggKGNvbXBhdGliaWxpdHkgbW9kZSlcbiIpOworIyBlbmRpZgogCiAjZWxpZiBkZWZpbmVk
KF9EQk1fUkRPTkxZKSB8fCBkZWZpbmVkKGRibV9kaXJmbm8pCi1mcHJpbnRmKGYsICJQcm9iYWJs
eSBuZGJtXG4iKTsKK2cgPSBzdHJpbmdfY2F0KGcsIFVTIlByb2JhYmx5IG5kYm1cbiIpOwogI2Vs
aWYgZGVmaW5lZChVU0VfVERCKQotZnByaW50ZihmLCAiVXNpbmcgdGRiXG4iKTsKK2cgPSBzdHJp
bmdfY2F0KGcsIFVTIlVzaW5nIHRkYlxuIik7CiAjZWxzZQotICAjaWZkZWYgVVNFX0dEQk0KLSAg
ZnByaW50ZihmLCAiUHJvYmFibHkgR0RCTSAobmF0aXZlIG1vZGUpXG4iKTsKLSAgI2Vsc2UKLSAg
ZnByaW50ZihmLCAiUHJvYmFibHkgR0RCTSAoY29tcGF0aWJpbGl0eSBtb2RlKVxuIik7Ci0gICNl
bmRpZgorIyBpZmRlZiBVU0VfR0RCTQorICBnID0gc3RyaW5nX2NhdChnLCBVUyJQcm9iYWJseSBH
REJNIChuYXRpdmUgbW9kZSlcbiIpOworIyBlbHNlCisgIGcgPSBzdHJpbmdfY2F0KGcsIFVTIlBy
b2JhYmx5IEdEQk0gKGNvbXBhdGliaWxpdHkgbW9kZSlcbiIpOworIyBlbmRpZgogI2VuZGlmCity
ZXR1cm4gZzsKIH0KIAogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgLWJWLy0tdmVy
c2lvbiBhbmQgZm9yIC1kIHRvIG91dHB1dCB0aGUgb3B0aW9uYWwKIGZlYXR1cmVzIG9mIHRoZSBj
dXJyZW50IEV4aW0gYmluYXJ5LgogCi1Bcmd1bWVudHM6ICBhIEZJTEUgZm9yIHByaW50aW5nCitB
cmd1bWVudHM6ICBCT09MLCB0cnVlIGZvciBzdGRvdXQgZWxzZSBkZWJ1ZyBjaGFubmVsCiBSZXR1
cm5zOiAgICBub3RoaW5nCiAqLwogCiBzdGF0aWMgdm9pZAotc2hvd193aGF0c19zdXBwb3J0ZWQo
RklMRSAqIGZwKQorc2hvd193aGF0c19zdXBwb3J0ZWQoQk9PTCBpc19zdGRvdXQpCiB7CiBybWFy
ayByZXNldF9wb2ludCA9IHN0b3JlX21hcmsoKTsKLWdzdHJpbmcgKiBnOwotREVCVUcoRF9hbnkp
IHt9IGVsc2Ugc2hvd19kYl92ZXJzaW9uKGZwKTsKK2dzdHJpbmcgKiBnID0gTlVMTDsKIAotZyA9
IHN0cmluZ19jYXQoTlVMTCwgVVMiU3VwcG9ydCBmb3I6Iik7CitERUJVRyhEX2FueSkge30gZWxz
ZSBnID0gc2hvd19kYl92ZXJzaW9uKGcpOworCitnID0gc3RyaW5nX2NhdChnLCBVUyJTdXBwb3J0
IGZvcjoiKTsKICNpZmRlZiBTVVBQT1JUX0NSWVBURVEKICAgZyA9IHN0cmluZ19jYXQoZywgVVMi
IGNyeXB0ZXEiKTsKICNlbmRpZgpAQCAtOTUwLDYgKzEwNDksOSBAQAogI2lmZGVmIFVTRV9PUEVO
U1NMCiAgIGcgPSBzdHJpbmdfY2F0KGcsIFVTIiBPcGVuU1NMIik7CiAjZW5kaWYKKyNpZm5kZWYg
RElTQUJMRV9UTFNfUkVTVU1FCisgIGcgPSBzdHJpbmdfY2F0KGcsIFVTIiBUTFNfcmVzdW1lIik7
CisjZW5kaWYKICNpZmRlZiBTVVBQT1JUX1RSQU5TTEFURV9JUF9BRERSRVNTCiAgIGcgPSBzdHJp
bmdfY2F0KGcsIFVTIiB0cmFuc2xhdGVfaXBfYWRkcmVzcyIpOwogI2VuZGlmCkBAIC05NjUsNiAr
MTA2Nyw5IEBACiAjaWZuZGVmIERJU0FCTEVfREtJTQogICBnID0gc3RyaW5nX2NhdChnLCBVUyIg
REtJTSIpOwogI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9ETUFSQworICBnID0gc3RyaW5nX2NhdChn
LCBVUyIgRE1BUkMiKTsKKyNlbmRpZgogI2lmbmRlZiBESVNBQkxFX0ROU1NFQwogICBnID0gc3Ry
aW5nX2NhdChnLCBVUyIgRE5TU0VDIik7CiAjZW5kaWYKQEAgLTk3OCw3ICsxMDgzLDcgQEAKICAg
ZyA9IHN0cmluZ19jYXQoZywgVVMiIE9DU1AiKTsKICNlbmRpZgogI2lmbmRlZiBESVNBQkxFX1BJ
UEVfQ09OTkVDVAotICBnID0gc3RyaW5nX2NhdChnLCBVUyIgUElQRV9DT05ORUNUIik7CisgIGcg
PSBzdHJpbmdfY2F0KGcsIFVTIiBQSVBFQ09OTkVDVCIpOwogI2VuZGlmCiAjaWZuZGVmIERJU0FC
TEVfUFJEUgogICBnID0gc3RyaW5nX2NhdChnLCBVUyIgUFJEUiIpOwpAQCAtOTg2LDE0ICsxMDkx
LDE3IEBACiAjaWZkZWYgU1VQUE9SVF9QUk9YWQogICBnID0gc3RyaW5nX2NhdChnLCBVUyIgUFJP
WFkiKTsKICNlbmRpZgorI2lmbmRlZiBESVNBQkxFX1FVRVVFX1JBTVAKKyAgZyA9IHN0cmluZ19j
YXQoZywgVVMiIFF1ZXVlX1JhbXAiKTsKKyNlbmRpZgogI2lmZGVmIFNVUFBPUlRfU09DS1MKICAg
ZyA9IHN0cmluZ19jYXQoZywgVVMiIFNPQ0tTIik7CiAjZW5kaWYKICNpZmRlZiBTVVBQT1JUX1NQ
RgogICBnID0gc3RyaW5nX2NhdChnLCBVUyIgU1BGIik7CiAjZW5kaWYKLSNpZmRlZiBTVVBQT1JU
X0RNQVJDCi0gIGcgPSBzdHJpbmdfY2F0KGcsIFVTIiBETUFSQyIpOworI2lmIGRlZmluZWQoU1VQ
UE9SVF9TUlMpCisgIGcgPSBzdHJpbmdfY2F0KGcsIFVTIiBTUlMiKTsKICNlbmRpZgogI2lmZGVm
IFRDUF9GQVNUT1BFTgogICB0Y3BfaW5pdCgpOwpAQCAtMTAxMSwyMSArMTExOSwxMiBAQAogI2lm
ZGVmIEVYUEVSSU1FTlRBTF9EU05fSU5GTwogICBnID0gc3RyaW5nX2NhdChnLCBVUyIgRXhwZXJp
bWVudGFsX0RTTl9pbmZvIik7CiAjZW5kaWYKLSNpZmRlZiBFWFBFUklNRU5UQUxfTE1EQgotICBn
ID0gc3RyaW5nX2NhdChnLCBVUyIgRXhwZXJpbWVudGFsX0xNREIiKTsKLSNlbmRpZgotI2lmZGVm
IEVYUEVSSU1FTlRBTF9RVUVVRV9SQU1QCi0gIGcgPSBzdHJpbmdfY2F0KGcsIFVTIiBFeHBlcmlt
ZW50YWxfUXVldWVfUmFtcCIpOworI2lmZGVmIEVYUEVSSU1FTlRBTF9FU01UUF9MSU1JVFMKKyAg
ZyA9IHN0cmluZ19jYXQoZywgVVMiIEV4cGVyaW1lbnRhbF9FU01UUF9MaW1pdHMiKTsKICNlbmRp
ZgogI2lmZGVmIEVYUEVSSU1FTlRBTF9RVUVVRUZJTEUKICAgZyA9IHN0cmluZ19jYXQoZywgVVMi
IEV4cGVyaW1lbnRhbF9RVUVVRUZJTEUiKTsKICNlbmRpZgotI2lmIGRlZmluZWQoRVhQRVJJTUVO
VEFMX1NSUykgfHwgZGVmaW5lZChFWFBFUklNRU5UQUxfU1JTX05BVElWRSkKLSAgZyA9IHN0cmlu
Z19jYXQoZywgVVMiIEV4cGVyaW1lbnRhbF9TUlMiKTsKLSNlbmRpZgotI2lmZGVmIEVYUEVSSU1F
TlRBTF9UTFNfUkVTVU1FCi0gIGcgPSBzdHJpbmdfY2F0KGcsIFVTIiBFeHBlcmltZW50YWxfVExT
X3Jlc3VtZSIpOwotI2VuZGlmCiBnID0gc3RyaW5nX2NhdChnLCBVUyJcbiIpOwogCiBnID0gc3Ry
aW5nX2NhdChnLCBVUyJMb29rdXBzIChidWlsdC1pbik6Iik7CkBAIC0xMDUzLDcgKzExNTIsNyBA
QAogI2lmIGRlZmluZWQoTE9PS1VQX0xEQVApICYmIExPT0tVUF9MREFQIT0yCiAgIGcgPSBzdHJp
bmdfY2F0KGcsIFVTIiBsZGFwIGxkYXBkbiBsZGFwbSIpOwogI2VuZGlmCi0jaWZkZWYgRVhQRVJJ
TUVOVEFMX0xNREIKKyNpZmRlZiBMT09LVVBfTE1EQgogICBnID0gc3RyaW5nX2NhdChnLCBVUyIg
bG1kYiIpOwogI2VuZGlmCiAjaWYgZGVmaW5lZChMT09LVVBfTVlTUUwpICYmIExPT0tVUF9NWVNR
TCE9MgpAQCAtMTA5NSw2ICsxMTk0LDcgQEAKICNpZmRlZiBXSVRIX0NPTlRFTlRfU0NBTgogZyA9
IG1hbHdhcmVfc2hvd19zdXBwb3J0ZWQoZyk7CiAjZW5kaWYKK3Nob3dfc3RyaW5nKGlzX3N0ZG91
dCwgZyk7IGcgPSBOVUxMOwogCiBpZiAoZml4ZWRfbmV2ZXJfdXNlcnNbMF0gPiAwKQogICB7CkBA
IC0xMTA2LDE5ICsxMjA2LDE5IEBACiAgIH0KIAogZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcsICJD
b25maWd1cmUgb3duZXI6ICVkOiVkXG4iLCBjb25maWdfdWlkLCBjb25maWdfZ2lkKTsKLWZwdXRz
KENTIHN0cmluZ19mcm9tX2dzdHJpbmcoZyksIGZwKTsKIAotZnByaW50ZihmcCwgIlNpemUgb2Yg
b2ZmX3Q6ICIgU0laRV9UX0ZNVCAiXG4iLCBzaXplb2Yob2ZmX3QpKTsKK2cgPSBzdHJpbmdfZm10
X2FwcGVuZChnLCAiU2l6ZSBvZiBvZmZfdDogIiBTSVpFX1RfRk1UICJcbiIsIHNpemVvZihvZmZf
dCkpOwogCiAvKiBFdmVyeXRoaW5nIGVsc2UgaXMgZGV0YWlscyB3aGljaCBhcmUgb25seSB3b3J0
aCByZXBvcnRpbmcgd2hlbiBkZWJ1Z2dpbmcuCiBQZXJoYXBzIHRoZSB0bHNfdmVyc2lvbl9yZXBv
cnQgc2hvdWxkIG1vdmUgaW50byB0aGlzIHRvby4gKi8KLURFQlVHKERfYW55KSBkbyB7CitERUJV
RyhEX2FueSkKKyAgewogCiAvKiBjbGFuZyBkZWZpbmVzIF9fR05VQ19fIChhdCBsZWFzdCwgZm9y
IG1lKSBzbyB0ZXN0IGZvciBpdCBmaXJzdCAqLwogI2lmIGRlZmluZWQoX19jbGFuZ19fKQotICBm
cHJpbnRmKGZwLCAiQ29tcGlsZXI6IENMYW5nIFslc11cbiIsIF9fY2xhbmdfdmVyc2lvbl9fKTsK
KyAgZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcsICJDb21waWxlcjogQ0xhbmcgWyVzXVxuIiwgX19j
bGFuZ192ZXJzaW9uX18pOwogI2VsaWYgZGVmaW5lZChfX0dOVUNfXykKLSAgZnByaW50ZihmcCwg
IkNvbXBpbGVyOiBHQ0MgWyVzXVxuIiwKKyAgZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcsICJDb21w
aWxlcjogR0NDIFslc11cbiIsCiAjIGlmZGVmIF9fVkVSU0lPTl9fCiAgICAgICBfX1ZFUlNJT05f
XwogIyBlbHNlCkBAIC0xMTI2LDMyICsxMjI2LDM4IEBACiAjIGVuZGlmCiAgICAgICApOwogI2Vs
c2UKLSAgZnByaW50ZihmcCwgIkNvbXBpbGVyOiA8dW5rbm93bj5cbiIpOworICBnID0gc3RyaW5n
X2NhdChnLCBVUyJDb21waWxlcjogPHVua25vd24+XG4iKTsKICNlbmRpZgogCiAjaWYgZGVmaW5l
ZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCi0gIGZwcmludGYoZnAsICJMaWJy
YXJ5IHZlcnNpb246IEdsaWJjOiBDb21waWxlOiAlZC4lZFxuIiwKKyAgZyA9IHN0cmluZ19mbXRf
YXBwZW5kKGcsICJMaWJyYXJ5IHZlcnNpb246IEdsaWJjOiBDb21waWxlOiAlZC4lZFxuIiwKIAkg
ICAgICAgCV9fR0xJQkNfXywgX19HTElCQ19NSU5PUl9fKTsKICAgaWYgKF9fR0xJQkNfUFJFUkVR
KDIsIDEpKQotICAgIGZwcmludGYoZnAsICIgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1l
OiAlc1xuIiwKKyAgICBnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywgIiAgICAgICAgICAgICAgICAg
ICAgICAgIFJ1bnRpbWU6ICVzXG4iLAogCSAgICAgICAJZ251X2dldF9saWJjX3ZlcnNpb24oKSk7
CiAjZW5kaWYKIAotc2hvd19kYl92ZXJzaW9uKGZwKTsKK2cgPSBzaG93X2RiX3ZlcnNpb24oZyk7
CiAKICNpZm5kZWYgRElTQUJMRV9UTFMKLSAgdGxzX3ZlcnNpb25fcmVwb3J0KGZwKTsKKyAgZyA9
IHRsc192ZXJzaW9uX3JlcG9ydChnKTsKICNlbmRpZgogI2lmZGVmIFNVUFBPUlRfSTE4TgotICB1
dGY4X3ZlcnNpb25fcmVwb3J0KGZwKTsKKyAgZyA9IHV0ZjhfdmVyc2lvbl9yZXBvcnQoZyk7Cisj
ZW5kaWYKKyNpZmRlZiBTVVBQT1JUX0RNQVJDCisgIGcgPSBkbWFyY192ZXJzaW9uX3JlcG9ydChn
KTsKICNlbmRpZgogI2lmZGVmIFNVUFBPUlRfU1BGCi0gIHNwZl9saWJfdmVyc2lvbl9yZXBvcnQo
ZnApOworICBnID0gc3BmX2xpYl92ZXJzaW9uX3JlcG9ydChnKTsKICNlbmRpZgogCi0gIGZvciAo
YXV0aF9pbmZvICogYXV0aGkgPSBhdXRoc19hdmFpbGFibGU7ICphdXRoaS0+ZHJpdmVyX25hbWUg
IT0gJ1wwJzsgKythdXRoaSkKLSAgICBpZiAoYXV0aGktPnZlcnNpb25fcmVwb3J0KQotICAgICAg
KCphdXRoaS0+dmVyc2lvbl9yZXBvcnQpKGZwKTsKK3Nob3dfc3RyaW5nKGlzX3N0ZG91dCwgZyk7
CitnID0gTlVMTDsKKworZm9yIChhdXRoX2luZm8gKiBhdXRoaSA9IGF1dGhzX2F2YWlsYWJsZTsg
KmF1dGhpLT5kcml2ZXJfbmFtZSAhPSAnXDAnOyArK2F1dGhpKQorICBpZiAoYXV0aGktPnZlcnNp
b25fcmVwb3J0KQorICAgIGcgPSAoKmF1dGhpLT52ZXJzaW9uX3JlcG9ydCkoZyk7CiAKICAgLyog
UENSRV9QUkVSRUxFQVNFIGlzIGVpdGhlciBkZWZpbmVkIGFuZCBlbXB0eSBvciBhIGJhcmUgc2Vx
dWVuY2Ugb2YKICAgY2hhcmFjdGVyczsgdW5sZXNzIGl0J3MgYW4gYW5jaWVudCB2ZXJzaW9uIG9m
IFBDUkUgaW4gd2hpY2ggY2FzZSBpdApAQCAtMTE2MSwzMSArMTI2Nyw0MSBAQAogI2VuZGlmCiAj
ZGVmaW5lIFFVT1RFKFgpICNYCiAjZGVmaW5lIEVYUEFORF9BTkRfUVVPVEUoWCkgUVVPVEUoWCkK
LSAgZnByaW50ZihmcCwgIkxpYnJhcnkgdmVyc2lvbjogUENSRTogQ29tcGlsZTogJWQuJWQlc1xu
IgotICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWU6ICVzXG4iLAot
ICAgICAgICAgIFBDUkVfTUFKT1IsIFBDUkVfTUlOT1IsCi0gICAgICAgICAgRVhQQU5EX0FORF9R
VU9URShQQ1JFX1BSRVJFTEVBU0UpICIiLAotICAgICAgICAgIHBjcmVfdmVyc2lvbigpKTsKKyAg
eworICB1c2NoYXIgYnVmWzI0XTsKKyAgcGNyZTJfY29uZmlnKFBDUkUyX0NPTkZJR19WRVJTSU9O
LCBidWYpOworICBnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywgIkxpYnJhcnkgdmVyc2lvbjogUENS
RTI6IENvbXBpbGU6ICVkLiVkJXNcbiIKKyAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAg
ICAgICAgIFJ1bnRpbWU6ICVzXG4iLAorICAgICAgICAgIFBDUkUyX01BSk9SLCBQQ1JFMl9NSU5P
UiwKKyAgICAgICAgICBFWFBBTkRfQU5EX1FVT1RFKFBDUkUyX1BSRVJFTEVBU0UpICIiLAorICAg
ICAgICAgIGJ1Zik7CisgIH0KICN1bmRlZiBRVU9URQogI3VuZGVmIEVYUEFORF9BTkRfUVVPVEUK
IAotICBpbml0X2xvb2t1cF9saXN0KCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbG9va3VwX2xp
c3RfY291bnQ7IGkrKykKLSAgICBpZiAobG9va3VwX2xpc3RbaV0tPnZlcnNpb25fcmVwb3J0KQot
ICAgICAgbG9va3VwX2xpc3RbaV0tPnZlcnNpb25fcmVwb3J0KGZwKTsKK3Nob3dfc3RyaW5nKGlz
X3N0ZG91dCwgZyk7CitnID0gTlVMTDsKKworaW5pdF9sb29rdXBfbGlzdCgpOworZm9yIChpbnQg
aSA9IDA7IGkgPCBsb29rdXBfbGlzdF9jb3VudDsgaSsrKQorICBpZiAobG9va3VwX2xpc3RbaV0t
PnZlcnNpb25fcmVwb3J0KQorICAgIGcgPSBsb29rdXBfbGlzdFtpXS0+dmVyc2lvbl9yZXBvcnQo
Zyk7CitzaG93X3N0cmluZyhpc19zdGRvdXQsIGcpOworZyA9IE5VTEw7CiAKICNpZmRlZiBXSElU
RUxJU1RfRF9NQUNST1MKLSAgZnByaW50ZihmcCwgIldISVRFTElTVF9EX01BQ1JPUzogXCIlc1wi
XG4iLCBXSElURUxJU1RfRF9NQUNST1MpOworICBnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywgIldI
SVRFTElTVF9EX01BQ1JPUzogXCIlc1wiXG4iLCBXSElURUxJU1RfRF9NQUNST1MpOwogI2Vsc2UK
LSAgZnByaW50ZihmcCwgIldISVRFTElTVF9EX01BQ1JPUyB1bnNldFxuIik7CisgIGcgPSBzdHJp
bmdfY2F0KGcsIFVTIldISVRFTElTVF9EX01BQ1JPUyB1bnNldFxuIik7CiAjZW5kaWYKICNpZmRl
ZiBUUlVTVEVEX0NPTkZJR19MSVNUCi0gIGZwcmludGYoZnAsICJUUlVTVEVEX0NPTkZJR19MSVNU
OiBcIiVzXCJcbiIsIFRSVVNURURfQ09ORklHX0xJU1QpOworICBnID0gc3RyaW5nX2ZtdF9hcHBl
bmQoZywgIlRSVVNURURfQ09ORklHX0xJU1Q6IFwiJXNcIlxuIiwgVFJVU1RFRF9DT05GSUdfTElT
VCk7CiAjZWxzZQotICBmcHJpbnRmKGZwLCAiVFJVU1RFRF9DT05GSUdfTElTVCB1bnNldFxuIik7
CisgIGcgPSBzdHJpbmdfY2F0KGcsIFVTIlRSVVNURURfQ09ORklHX0xJU1QgdW5zZXRcbiIpOwog
I2VuZGlmCisgIH0KIAotfSB3aGlsZSAoMCk7CitzaG93X3N0cmluZyhpc19zdGRvdXQsIGcpOwog
c3RvcmVfcmVzZXQocmVzZXRfcG9pbnQpOwogfQogCkBAIC0xMzM3LDU2ICsxNDUzLDU4IEBACiBn
ZXRfc3RkaW5wdXQoY2hhciAqKCpmbl9yZWFkbGluZSkoY29uc3QgY2hhciAqKSwgdm9pZCgqZm5f
YWRkaGlzdCkoY29uc3QgY2hhciAqKSkKIHsKIGdzdHJpbmcgKiBnID0gTlVMTDsKK0JPT0wgaGFk
X2lucHV0ID0gRkFMU0U7CiAKIGlmICghZm5fcmVhZGxpbmUpIHsgcHJpbnRmKCI+ICIpOyBmZmx1
c2goc3Rkb3V0KTsgfQogCiBmb3IgKGludCBpID0gMDs7IGkrKykKICAgewogICB1c2NoYXIgYnVm
ZmVyWzEwMjRdOwotICB1c2NoYXIgKnAsICpzczsKKyAgdXNjaGFyICogcCwgKiBzczsKIAotICAj
aWZkZWYgVVNFX1JFQURMSU5FCisjaWZkZWYgVVNFX1JFQURMSU5FCiAgIGNoYXIgKnJlYWRsaW5l
X2xpbmUgPSBOVUxMOwogICBpZiAoZm5fcmVhZGxpbmUpCiAgICAgewogICAgIGlmICghKHJlYWRs
aW5lX2xpbmUgPSBmbl9yZWFkbGluZSgoaSA+IDApPyAiIjoiPiAiKSkpIGJyZWFrOwotICAgIGlm
ICgqcmVhZGxpbmVfbGluZSAhPSAwICYmIGZuX2FkZGhpc3QpIGZuX2FkZGhpc3QocmVhZGxpbmVf
bGluZSk7CisgICAgaWYgKCpyZWFkbGluZV9saW5lICYmIGZuX2FkZGhpc3QpIGZuX2FkZGhpc3Qo
cmVhZGxpbmVfbGluZSk7CiAgICAgcCA9IFVTIHJlYWRsaW5lX2xpbmU7CiAgICAgfQogICBlbHNl
Ci0gICNlbmRpZgorI2VuZGlmCiAKICAgLyogcmVhZGxpbmUoKSBub3QgaW4gdXNlICovCiAKICAg
ICB7Ci0gICAgaWYgKFVmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikgPT0gTlVM
TCkgYnJlYWs7CisgICAgaWYgKFVmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikg
PT0gTlVMTCkgYnJlYWs7CS8qRU9GKi8KICAgICBwID0gYnVmZmVyOwogICAgIH0KIAogICAvKiBI
YW5kbGUgdGhlIGxpbmUgKi8KIAotICBzcyA9IHAgKyAoaW50KVVzdHJsZW4ocCk7Ci0gIHdoaWxl
IChzcyA+IHAgJiYgaXNzcGFjZShzc1stMV0pKSBzcy0tOworICBoYWRfaW5wdXQgPSBUUlVFOwor
ICBzcyA9IHAgKyBVc3RybGVuKHApOworICB3aGlsZSAoc3MgPiBwICYmIGlzc3BhY2Uoc3NbLTFd
KSkgc3MtLTsgLyogc3RyaXAgdHJhaWxpbmcgbmV3bGluZSAoYW5kIHNwYWNlcykgKi8KIAogICBp
ZiAoaSA+IDApCi0gICAgd2hpbGUgKHAgPCBzcyAmJiBpc3NwYWNlKCpwKSkgcCsrOyAgIC8qIGxl
YWRpbmcgc3BhY2UgYWZ0ZXIgY29udCAqLworICAgIHdoaWxlIChwIDwgc3MgJiYgaXNzcGFjZSgq
cCkpIHArKzsgICAvKiBzdHJpcCBsZWFkaW5nIHNwYWNlIGFmdGVyIGNvbnQgKi8KIAogICBnID0g
c3RyaW5nX2NhdG4oZywgcCwgc3MgLSBwKTsKIAotICAjaWZkZWYgVVNFX1JFQURMSU5FCisjaWZk
ZWYgVVNFX1JFQURMSU5FCiAgIGlmIChmbl9yZWFkbGluZSkgZnJlZShyZWFkbGluZV9saW5lKTsK
LSAgI2VuZGlmCisjZW5kaWYKIAogICAvKiBnIGNhbiBvbmx5IGJlIE5VTEwgaWYgc3M9PXAgKi8K
LSAgaWYgKHNzID09IHAgfHwgZy0+c1tnLT5wdHItMV0gIT0gJ1xcJykKKyAgaWYgKHNzID09IHAg
fHwgZy0+c1tnLT5wdHItMV0gIT0gJ1xcJykgLyogbm90IGNvbnRpbnVhdGlvbjsgZG9uZSAqLwog
ICAgIGJyZWFrOwogCi0gIC0tZy0+cHRyOwotICAodm9pZCkgc3RyaW5nX2Zyb21fZ3N0cmluZyhn
KTsKKyAgLS1nLT5wdHI7CQkJCS8qIGRyb3AgdGhlIFwgKi8KICAgfQogCi1pZiAoIWcpIHByaW50
ZigiXG4iKTsKLXJldHVybiBzdHJpbmdfZnJvbV9nc3RyaW5nKGcpOworaWYgKGhhZF9pbnB1dCkg
cmV0dXJuIGcgPyBzdHJpbmdfZnJvbV9nc3RyaW5nKGcpIDogVVMiIjsKK3ByaW50ZigiXG4iKTsK
K3JldHVybiBOVUxMOwogfQogCiAKQEAgLTE1MTgsMTQgKzE2MzYsOCBAQAogICAgIGNvbnRpbnVl
OwogICBpZiAoKGxlbiA9IG0tPnJlcGxlbikgPT0gMCkKICAgICBjb250aW51ZTsKLSAgbiA9IHBj
cmVfZXhlYyhyZWdleF93aGl0ZWxpc3RlZF9tYWNybywgTlVMTCwgQ1MgbS0+cmVwbGFjZW1lbnQs
IGxlbiwKLSAgIDAsIFBDUkVfRU9QVCwgTlVMTCwgMCk7Ci0gIGlmIChuIDwgMCkKLSAgICB7Ci0g
ICAgaWYgKG4gIT0gUENSRV9FUlJPUl9OT01BVENIKQotICAgICAgZGVidWdfcHJpbnRmKCJtYWNy
b3NfdHJ1c3RlZCBjaGVja2luZyAlcyByZXR1cm5lZCAlZFxuIiwgbS0+bmFtZSwgbik7CisgIGlm
ICghcmVnZXhfbWF0Y2gocmVnZXhfd2hpdGVsaXN0ZWRfbWFjcm8sIG0tPnJlcGxhY2VtZW50LCBs
ZW4sIE5VTEwpKQogICAgIHJldHVybiBGQUxTRTsKLSAgICB9CiAgIH0KIERFQlVHKERfYW55KSBk
ZWJ1Z19wcmludGYoIm1hY3Jvc190cnVzdGVkIG92ZXJyaWRkZW4gdG8gdHJ1ZSBieSB3aGl0ZWxp
c3RpbmdcbiIpOwogcmV0dXJuIFRSVUU7CkBAIC0xNjAxLDcgKzE3MTMsNyBAQAogaW50ICBsaXN0
X3F1ZXVlX29wdGlvbiA9IDA7CiBpbnQgIG1zZ19hY3Rpb24gPSAwOwogaW50ICBtc2dfYWN0aW9u
X2FyZyA9IC0xOwotaW50ICBuYW1lbGVuID0gKGFyZ3ZbMF0gPT0gTlVMTCk/IDAgOiBVc3RybGVu
KGFyZ3ZbMF0pOworaW50ICBuYW1lbGVuID0gYXJndlswXSA/IFVzdHJsZW4oYXJndlswXSkgOiAw
OwogaW50ICBxdWV1ZV9vbmx5X3JlYXNvbiA9IDA7CiAjaWZkZWYgRVhJTV9QRVJMCiBpbnQgIHBl
cmxfc3RhcnRfb3B0aW9uID0gMDsKQEAgLTE2MjYsNyArMTczOCw2IEBACiBCT09MIGxpc3Rfb3B0
aW9ucyA9IEZBTFNFOwogQk9PTCBsaXN0X2NvbmZpZyA9IEZBTFNFOwogQk9PTCBsb2NhbF9xdWV1
ZV9vbmx5OwotQk9PTCBtb3JlID0gVFJVRTsKIEJPT0wgb25lX21zZ19hY3Rpb24gPSBGQUxTRTsK
IEJPT0wgb3B0X0RfdXNlZCA9IEZBTFNFOwogQk9PTCBxdWV1ZV9vbmx5X3NldCA9IEZBTFNFOwpA
QCAtMTYzOCw2ICsxNzQ5LDcgQEAKIEJPT0wgdXNhZ2Vfd2FudGVkID0gRkFMU0U7CiBCT09MIHZl
cmlmeV9hZGRyZXNzX21vZGUgPSBGQUxTRTsKIEJPT0wgdmVyaWZ5X2FzX3NlbmRlciA9IEZBTFNF
OworQk9PTCByY3B0X3ZlcmlmeV9xdW90YSA9IEZBTFNFOwogQk9PTCB2ZXJzaW9uX3ByaW50ZWQg
PSBGQUxTRTsKIHVzY2hhciAqYWxpYXNfYXJnID0gTlVMTDsKIHVzY2hhciAqY2FsbGVkX2FzID0g
VVMiIjsKQEAgLTE2NzksNiArMTc5MSw5IEBACiAodm9pZClnZXR0aW1lb2ZkYXkoJnRpbWVzdGFt
cF9zdGFydHVwLCBOVUxMKTsKICNlbmRpZgogCitzdG9yZV9pbml0KCk7CS8qIEluaXRpYWxpc2Ug
dGhlIG1lbW9yeSBhbGxvY2F0aW9uIHN1c2JzeXN0ZW0gKi8KK3BjcmVfaW5pdCgpOwkvKiBTZXQg
dXAgbWVtb3J5IGhhbmRsaW5nIGZvciBwY3JlICovCisKIC8qIElmIHRoZSBFeGltIHVzZXIgYW5k
L29yIGdyb3VwIGFuZC9vciB0aGUgY29uZmlndXJhdGlvbiBmaWxlIG93bmVyL2dyb3VwIHdlcmUK
IGRlZmluZWQgYnkgcmVmOm5hbWUgYXQgYnVpbGQgdGltZSwgd2UgbXVzdCBub3cgZmluZCB0aGUg
YWN0dWFsIHVpZC9naWQgdmFsdWVzLgogVGhpcyBpcyBhIGZlYXR1cmUgdG8gbWFrZSB0aGUgbGl2
ZXMgb2YgYmluYXJ5IGRpc3RyaWJ1dG9ycyBlYXNpZXIuICovCkBAIC0xNzQyLDYgKzE4NTcsNyBA
QAogICBkZWJ1Z19zdG9yZSA9IFRSVUU7CiAKIC8qIFByb3RlY3QgYWdhaW5zdCBhYnVzaXZlIGFy
Z3ZbMF0gKi8KK2lmICghYXJndlswXSB8fCAhYXJnYykgZXhpbV9mYWlsKCJleGltOiBleGVjdXRh
YmxlIG5hbWUgcmVxdWlyZWRcbiIpOwogZXhpbV9zdHJfZmFpbF90b29sb25nKGFyZ3ZbMF0sIFBB
VEhfTUFYLCAiYXJndlswXSIpOwogCiAvKiBUaGUgQyBzdGFuZGFyZCBzYXlzIHRoYXQgdGhlIGVx
dWl2YWxlbnQgb2Ygc2V0bG9jYWxlKExDX0FMTCwgIkMiKSBpcyBvYmV5ZWQKQEAgLTE3NzgsMTUg
KzE4OTQsNiBAQAogCiBpZiAoZnN0YXQoZmlsZW5vKHN0ZGVyciksICZzdGF0YnVmKSA+PSAwKSBs
b2dfc3RkZXJyID0gc3RkZXJyOwogCi0vKiBBcnJhbmdlIGZvciB0aGUgUENSRSByZWdleCBsaWJy
YXJ5IHRvIHVzZSBvdXIgc3RvcmUgZnVuY3Rpb25zLiBOb3RlIHRoYXQKLXRoZSBub3JtYWwgY2Fs
bHMgYXJlIGFjdHVhbGx5IG1hY3JvcyB0aGF0IGFkZCBhZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IK
LWRlYnVnZ2luZyBwdXJwb3NlcyBzbyB3ZSBoYXZlIHRvIGFzc2lnbiBzcGVjaWFsbHkgY29uc3Ry
dWN0ZWQgZnVuY3Rpb25zIGhlcmUuCi1UaGUgZGVmYXVsdCBpcyB0byB1c2Ugc3RvcmUgaW4gdGhl
IHN0YWNraW5nIHBvb2wsIGJ1dCB0aGlzIGlzIG92ZXJyaWRkZW4gaW4gdGhlCi1yZWdleF9tdXN0
X2NvbXBpbGUoKSBmdW5jdGlvbi4gKi8KLQotcGNyZV9tYWxsb2MgPSBmdW5jdGlvbl9zdG9yZV9n
ZXQ7Ci1wY3JlX2ZyZWUgPSBmdW5jdGlvbl9kdW1teV9mcmVlOwotCiAvKiBFbnN1cmUgdGhlcmUg
aXMgYSBiaWcgYnVmZmVyIGZvciB0ZW1wb3JhcnkgdXNlIGluIHNldmVyYWwgcGxhY2VzLiBJdCBp
cyBwdXQKIGluIG1hbGxvYyBzdG9yZSBzbyB0aGF0IGl0IGNhbiBiZSBmcmVlZCBmb3IgZW5sYXJn
ZW1lbnQgaWYgbmVjZXNzYXJ5LiAqLwogCkBAIC0xNzk1LDkgKzE5MDIsMTcgQEAKIC8qIFNldCB1
cCB0aGUgaGFuZGxlciBmb3IgdGhlIGRhdGEgcmVxdWVzdCBzaWduYWwsIGFuZCBzZXQgdGhlIGlu
aXRpYWwKIGRlc2NyaXB0aXZlIHRleHQuICovCiAKLXByb2Nlc3NfaW5mbyA9IHN0b3JlX2dldChQ
Uk9DRVNTX0lORk9fU0laRSwgVFJVRSk7CS8qIHRhaW50ZWQgKi8KK3Byb2Nlc3NfaW5mbyA9IHN0
b3JlX2dldChQUk9DRVNTX0lORk9fU0laRSwgR0VUX1RBSU5URUQpOwogc2V0X3Byb2Nlc3NfaW5m
bygiaW5pdGlhbGl6aW5nIik7Ci1vc19yZXN0YXJ0aW5nX3NpZ25hbChTSUdVU1IxLCB1c3IxX2hh
bmRsZXIpOworb3NfcmVzdGFydGluZ19zaWduYWwoU0lHVVNSMSwgdXNyMV9oYW5kbGVyKTsJCS8q
IGV4aXdoYXQgKi8KKyNpZmRlZiBTQV9TSUdJTkZPCisgIHsKKyAgc3RydWN0IHNpZ2FjdGlvbiBh
Y3QgPSB7IC5zYV9zaWdhY3Rpb24gPSBzZWd2X2hhbmRsZXIsIC5zYV9mbGFncyA9IFNBX1JFU0VU
SEFORCB8IFNBX1NJR0lORk8gfTsKKyAgc2lnYWN0aW9uKFNJR1NFR1YsICZhY3QsIE5VTEwpOwor
ICB9CisjZWxzZQorc2lnbmFsKFNJR1NFR1YsIHNlZ3ZfaGFuZGxlcik7CQkJCS8qIGxvZyBmYXVs
dHMgKi8KKyNlbmRpZgogCiAvKiBJZiBydW5uaW5nIGluIGEgZG9ja2VyaXplZCBlbnZpcm9ubWVu
dCwgdGhlIFRFUk0gc2lnbmFsIGlzIG9ubHkKIGRlbGVnYXRlZCB0byB0aGUgUElEIDEgaWYgd2Ug
cmVxdWVzdCBpdCBieSBzZXR0aW5nIGFuIHNpZ25hbCBoYW5kbGVyICovCkBAIC0yMTU4LDcgKzIy
NzMsOSBAQAogCSAgaWYgKCEqYXJncmVzdCB8fCBVc3RyY21wKGFyZ3Jlc3QsICJjIikgPT0gMCkK
IAkgICAgewogCSAgICBpZiAoKytpID49IGFyZ2MpIHsgYmFkYXJnID0gVFJVRTsgYnJlYWs7IH0K
LQkgICAgc2VuZGVyX2hvc3RfYWRkcmVzcyA9IHN0cmluZ19jb3B5X3RhaW50KGV4aW1fc3RyX2Zh
aWxfdG9vbG9uZyhhcmd2W2ldLCBFWElNX0lQQUREUl9NQVgsICItYmgiKSwgVFJVRSk7CisJICAg
IHNlbmRlcl9ob3N0X2FkZHJlc3MgPSBzdHJpbmdfY29weV90YWludCgKKwkJICBleGltX3N0cl9m
YWlsX3Rvb2xvbmcoYXJndltpXSwgRVhJTV9JUEFERFJfTUFYLCAiLWJoIiksCisJCSAgR0VUX1RB
SU5URUQpOwogCSAgICBob3N0X2NoZWNraW5nID0gY2hlY2tpbmcgPSBmLmxvZ190ZXN0aW5nX21v
ZGUgPSBUUlVFOwogCSAgICBmLmhvc3RfY2hlY2tpbmdfY2FsbG91dCA9ICphcmdyZXN0ID09ICdj
JzsKIAkgICAgbWVzc2FnZV9sb2dzID0gRkFMU0U7CkBAIC0yMjY4LDcgKzIzODUsNyBAQAogCWNh
c2UgJ1AnOgogCiAJICAvKiAtYlAgY29uZmlnOiB3ZSBuZWVkIHRvIHNldHVwIGhlcmUsIGJlY2F1
c2UgbGF0ZXIsCi0JICAgKiB3aGVuIGxpc3Rfb3B0aW9ucyBpcyBjaGVja2VkLCB0aGUgY29uZmln
IGlzIHJlYWQgYWxyZWFkeSAqLworCSAgd2hlbiBsaXN0X29wdGlvbnMgaXMgY2hlY2tlZCwgdGhl
IGNvbmZpZyBpcyByZWFkIGFscmVhZHkgKi8KIAkgIGlmICgqYXJncmVzdCkKIAkgICAgYmFkYXJn
ID0gVFJVRTsKIAkgIGVsc2UgaWYgKGFyZ3ZbaSsxXSAmJiBVc3RyY21wKGFyZ3ZbaSsxXSwgImNv
bmZpZyIpID09IDApCkBAIC0yMzQ5LDcgKzI0NjYsNyBAQAogCSAgICAgIHZlcnNpb25fY251bWJl
ciwgdmVyc2lvbl9kYXRlKTsKIAkgICAgcHJpbnRmKCIlc1xuIiwgQ1MgdmVyc2lvbl9jb3B5cmln
aHQpOwogCSAgICB2ZXJzaW9uX3ByaW50ZWQgPSBUUlVFOwotCSAgICBzaG93X3doYXRzX3N1cHBv
cnRlZChzdGRvdXQpOworCSAgICBzaG93X3doYXRzX3N1cHBvcnRlZChUUlVFKTsKIAkgICAgZi5s
b2dfdGVzdGluZ19tb2RlID0gVFJVRTsKIAkgICAgfQogCSAgZWxzZSBiYWRhcmcgPSBUUlVFOwpA
QCAtMjM4Niw2ICsyNTAzLDcgQEAKICAgICAgIGludCBsZW4gPSBVc3RybGVuKEFMVF9DT05GSUdf
UFJFRklYKTsKICAgICAgIGNvbnN0IHVzY2hhciAqbGlzdCA9IGFyZ3Jlc3Q7CiAgICAgICB1c2No
YXIgKmZpbGVuYW1lOworICAgICAgLyogVGhlIGFyZ3YgaXMgdW50YWludGVkLCBzbyBiaWdfYnVm
ZmVyIChhbHNvIHVudGFpbnRlZCkgaXMgb2sgdG8gdXNlICovCiAgICAgICB3aGlsZSgoZmlsZW5h
bWUgPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNlcCwgYmlnX2J1ZmZlciwKICAgICAgICAg
ICAgICBiaWdfYnVmZmVyX3NpemUpKSkKICAgICAgICAgaWYgKCAgKCAgVXN0cmxlbihmaWxlbmFt
ZSkgPCBsZW4KQEAgLTI1NDMsMjEgKzI2NjEsMzYgQEAKICAgICAjZW5kaWYKICAgICBicmVhazsK
IAotICAgIC8qIC1kOiBTZXQgZGVidWcgbGV2ZWwgKHNlZSBhbHNvIC12IGJlbG93KSBvciBzZXQg
dGhlIGRyb3BfY3Igb3B0aW9uLgotICAgIFRoZSBsYXR0ZXIgaXMgbm93IGEgbm8tb3AsIHJldGFp
bmVkIGZvciBjb21wYXRpYmlsaXR5IG9ubHkuIElmIC1kZCBpcyB1c2VkLAotICAgIGRlYnVnZ2lu
ZyBzdWJwcm9jZXNzZXMgb2YgdGhlIGRhZW1vbiBpcyBkaXNhYmxlZC4gKi8KLQogICAgIGNhc2Ug
J2QnOgorCisgICAgLyogLWRyb3BjcjogU2V0IHRoaXMgb3B0aW9uLiAgTm93IGEgbm8tb3AsIHJl
dGFpbmVkIGZvciBjb21wYXRpYmlsaXR5IG9ubHkuICovCisKICAgICBpZiAoVXN0cmNtcChhcmdy
ZXN0LCAicm9wY3IiKSA9PSAwKQogICAgICAgewogICAgICAgLyogZHJvcF9jciA9IFRSVUU7ICov
CiAgICAgICB9CiAKLSAgICAvKiBVc2UgYW4gaW50ZXJtZWRpYXRlIHZhcmlhYmxlIHNvIHRoYXQg
d2UgZG9uJ3Qgc2V0IGRlYnVnZ2luZyB3aGlsZQotICAgIGRlY29kaW5nIHRoZSBkZWJ1Z2dpbmcg
Yml0cy4gKi8KKyAgICAvKiAtZHA6IFNldCB1cCBhIGRlYnVnIHByZXRyaWdnZXIgYnVmZmVyIHdp
dGggZ2l2ZW4gc2l6ZS4gKi8KKworICAgIGVsc2UgaWYgKFVzdHJjbXAoYXJncmVzdCwgInAiKSA9
PSAwKQorICAgICAgaWYgKCsraSA+PSBhcmdjKQorCWJhZGFyZyA9IFRSVUU7CisgICAgICBlbHNl
CisJZGVidWdfcHJldHJpZ2dlcl9zZXR1cChhcmd2W2ldKTsKKworICAgIC8qIC1kdDogU2V0IGEg
ZGVidWcgdHJpZ2dlciBzZWxlY3RvciAqLworCisgICAgZWxzZSBpZiAoVXN0cm5jbXAoYXJncmVz
dCwgInQ9IiwgMikgPT0gMCkKKyAgICAgIGR0cmlnZ2VyX3NlbGVjdG9yID0gKHVuc2lnbmVkIGlu
dCkgVXN0cnRvbChhcmdyZXN0ICsgMiwgTlVMTCwgMCk7CisKKyAgICAvKiAtZDogU2V0IGRlYnVn
IGxldmVsIChzZWUgYWxzbyAtdiBiZWxvdykuCisgICAgSWYgLWRkIGlzIHVzZWQsIGRlYnVnZ2lu
ZyBzdWJwcm9jZXNzZXMgb2YgdGhlIGRhZW1vbiBpcyBkaXNhYmxlZC4gKi8KIAogICAgIGVsc2UK
ICAgICAgIHsKKyAgICAgIC8qIFVzZSBhbiBpbnRlcm1lZGlhdGUgdmFyaWFibGUgc28gdGhhdCB3
ZSBkb24ndCBzZXQgZGVidWdnaW5nIHdoaWxlCisgICAgICBkZWNvZGluZyB0aGUgZGVidWdnaW5n
IGJpdHMuICovCisKICAgICAgIHVuc2lnbmVkIGludCBzZWxlY3RvciA9IERfZGVmYXVsdDsKICAg
ICAgIGRlYnVnX3NlbGVjdG9yID0gMDsKICAgICAgIGRlYnVnX2ZpbGUgPSBOVUxMOwpAQCAtMjYx
NSw3ICsyNzQ4LDkgQEAKICAgICBjYXNlICdGJzoKICAgICBpZiAoISphcmdyZXN0KQogICAgICAg
aWYgKCsraSA8IGFyZ2MpIGFyZ3Jlc3QgPSBhcmd2W2ldOyBlbHNlIHsgYmFkYXJnID0gVFJVRTsg
YnJlYWs7IH0KLSAgICBvcmlnaW5hdG9yX25hbWUgPSBzdHJpbmdfY29weV90YWludChleGltX3N0
cl9mYWlsX3Rvb2xvbmcoYXJncmVzdCwgRVhJTV9IVU1BTk5BTUVfTUFYLCAiLUYiKSwgVFJVRSk7
CisgICAgb3JpZ2luYXRvcl9uYW1lID0gc3RyaW5nX2NvcHlfdGFpbnQoCisJCSAgZXhpbV9zdHJf
ZmFpbF90b29sb25nKGFyZ3Jlc3QsIEVYSU1fSFVNQU5OQU1FX01BWCwgIi1GIiksCisJCSAgR0VU
X1RBSU5URUQpOwogICAgIGYuc2VuZGVyX25hbWVfZm9yY2VkID0gVFJVRTsKICAgICBicmVhazsK
IApAQCAtMjY0Myw3ICsyNzc4LDcgQEAKICAgICAgICAgaWYgKGkrMSA8IGFyZ2MpIGFyZ3Jlc3Qg
PSBhcmd2WysraV07IGVsc2UgeyBiYWRhcmcgPSBUUlVFOyBicmVhazsgfQogICAgICAgKHZvaWQp
IGV4aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmdyZXN0LCBFWElNX0RJU1BMQVlNQUlMX01BWCwgIi1m
Iik7CiAgICAgICBpZiAoISphcmdyZXN0KQotICAgICAgICAqKHNlbmRlcl9hZGRyZXNzID0gc3Rv
cmVfZ2V0KDEsIEZBTFNFKSkgPSAnXDAnOyAgLyogRW5zdXJlIHdyaXRlYWJsZSBtZW1vcnkgKi8K
KyAgICAgICAgKihzZW5kZXJfYWRkcmVzcyA9IHN0b3JlX2dldCgxLCBHRVRfVU5UQUlOVEVEKSkg
PSAnXDAnOyAgLyogRW5zdXJlIHdyaXRlYWJsZSBtZW1vcnkgKi8KICAgICAgIGVsc2UKICAgICAg
ICAgewogICAgICAgICB1c2NoYXIgKiB0ZW1wID0gYXJncmVzdCArIFVzdHJsZW4oYXJncmVzdCkg
LSAxOwpAQCAtMjY1OCw3ICsyNzkzLDcgQEAKIAkJICAmZHVtbXlfc3RhcnQsICZkdW1teV9lbmQs
ICZzZW5kZXJfYWRkcmVzc19kb21haW4sIFRSVUUpKSkKICAgICAgICAgICBleGltX2ZhaWwoImV4
aW06IGJhZCAtZiBhZGRyZXNzIFwiJXNcIjogJXNcbiIsIGFyZ3Jlc3QsIGVycm1lc3MpOwogCi0J
c2VuZGVyX2FkZHJlc3MgPSBzdHJpbmdfY29weV90YWludChzZW5kZXJfYWRkcmVzcywgVFJVRSk7
CisJc2VuZGVyX2FkZHJlc3MgPSBzdHJpbmdfY29weV90YWludChzZW5kZXJfYWRkcmVzcywgR0VU
X1RBSU5URUQpOwogI2lmZGVmIFNVUFBPUlRfSTE4TgogCW1lc3NhZ2Vfc210cHV0ZjggPSAgc3Ry
aW5nX2lzX3V0Zjgoc2VuZGVyX2FkZHJlc3MpOwogCWFsbG93X3V0ZjhfZG9tYWlucyA9IEZBTFNF
OwpAQCAtMjcwOCw3ICsyODQzLDcgQEAKICAgICAgIGV4aW1fZmFpbCgiZXhpbTogdGhlIC1MIHN5
c2xvZyBuYW1lIGlzIHRvbyBsb25nOiBcIiVzXCJcbiIsIGFyZ3Jlc3QpOwogICAgIGlmIChzeiA8
IDEpCiAgICAgICBleGltX2ZhaWwoImV4aW06IHRoZSAtTCBzeXNsb2cgbmFtZSBpcyB0b28gc2hv
cnRcbiIpOwotICAgIGNtZGxpbmVfc3lzbG9nX25hbWUgPSBzdHJpbmdfY29weV90YWludChhcmdy
ZXN0LCBUUlVFKTsKKyAgICBjbWRsaW5lX3N5c2xvZ19uYW1lID0gc3RyaW5nX2NvcHlfdGFpbnQo
YXJncmVzdCwgR0VUX1RBSU5URUQpOwogICAgIGJyZWFrOwogCiAgICAgY2FzZSAnTSc6CkBAIC0y
NzM4LDkgKzI4NzMsMTUgQEAKICAgICAgIGlmIChtc2dfYWN0aW9uX2FyZyA+PSAwKQogICAgICAg
ICBleGltX2ZhaWwoImV4aW06IGluY29tcGF0aWJsZSBhcmd1bWVudHNcbiIpOwogCi0gICAgICBj
b250aW51ZV90cmFuc3BvcnQgPSBzdHJpbmdfY29weV90YWludChleGltX3N0cl9mYWlsX3Rvb2xv
bmcoYXJndlsrK2ldLCBFWElNX0RSSVZFUk5BTUVfTUFYLCAiLUMgaW50ZXJuYWwgdHJhbnNwb3J0
IiksIFRSVUUpOwotICAgICAgY29udGludWVfaG9zdG5hbWUgPSBzdHJpbmdfY29weV90YWludChl
eGltX3N0cl9mYWlsX3Rvb2xvbmcoYXJndlsrK2ldLCBFWElNX0hPU1ROQU1FX01BWCwgIi1DIGlu
dGVybmFsIGhvc3RuYW1lIiksIFRSVUUpOwotICAgICAgY29udGludWVfaG9zdF9hZGRyZXNzID0g
c3RyaW5nX2NvcHlfdGFpbnQoZXhpbV9zdHJfZmFpbF90b29sb25nKGFyZ3ZbKytpXSwgRVhJTV9J
UEFERFJfTUFYLCAiLUMgaW50ZXJuYWwgaG9zdGFkZHIiKSwgVFJVRSk7CisgICAgICBjb250aW51
ZV90cmFuc3BvcnQgPSBzdHJpbmdfY29weV90YWludCgKKwlleGltX3N0cl9mYWlsX3Rvb2xvbmco
YXJndlsrK2ldLCBFWElNX0RSSVZFUk5BTUVfTUFYLCAiLUMgaW50ZXJuYWwgdHJhbnNwb3J0Iiks
CisJR0VUX1RBSU5URUQpOworICAgICAgY29udGludWVfaG9zdG5hbWUgPSBzdHJpbmdfY29weV90
YWludCgKKwlleGltX3N0cl9mYWlsX3Rvb2xvbmcoYXJndlsrK2ldLCBFWElNX0hPU1ROQU1FX01B
WCwgIi1DIGludGVybmFsIGhvc3RuYW1lIiksCisJR0VUX1RBSU5URUQpOworICAgICAgY29udGlu
dWVfaG9zdF9hZGRyZXNzID0gc3RyaW5nX2NvcHlfdGFpbnQoCisJZXhpbV9zdHJfZmFpbF90b29s
b25nKGFyZ3ZbKytpXSwgRVhJTV9JUEFERFJfTUFYLCAiLUMgaW50ZXJuYWwgaG9zdGFkZHIiKSwK
KwlHRVRfVEFJTlRFRCk7CiAgICAgICBjb250aW51ZV9zZXF1ZW5jZSA9IFVhdG9pKGFyZ3ZbKytp
XSk7CiAgICAgICBtc2dfYWN0aW9uID0gTVNHX0RFTElWRVI7CiAgICAgICBtc2dfYWN0aW9uX2Fy
ZyA9ICsraTsKQEAgLTI3ODUsMTMgKzI5MjYsMTkgQEAKICAgICAvKiAtTUNkOiBmb3IgZGVidWcs
IHNldCBhIHByb2Nlc3MtcHVycG9zZSBzdHJpbmcgKi8KIAogCWNhc2UgJ2QnOiBpZiAoKytpIDwg
YXJnYykKLQkJICAgIHByb2Nlc3NfcHVycG9zZSA9IHN0cmluZ19jb3B5X3RhaW50KGV4aW1fc3Ry
X2ZhaWxfdG9vbG9uZyhhcmd2W2ldLCBFWElNX0RSSVZFUk5BTUVfTUFYLCAiLU1DZCIpLCBUUlVF
KTsKKwkJICAgIHByb2Nlc3NfcHVycG9zZSA9IHN0cmluZ19jb3B5X3RhaW50KAorCQkgICAgICBl
eGltX3N0cl9mYWlsX3Rvb2xvbmcoYXJndltpXSwgRVhJTV9EUklWRVJOQU1FX01BWCwgIi1NQ2Qi
KSwKKwkJICAgICAgR0VUX1RBSU5URUQpOwogCQkgIGVsc2UgYmFkYXJnID0gVFJVRTsKIAkJICBi
cmVhazsKIAotICAgIC8qIC1NQ0c6IHNldCB0aGUgcXVldWUgbmFtZSwgdG8gYSBub24tZGVmYXVs
dCB2YWx1ZSAqLwotCi0JY2FzZSAnRyc6IGlmICgrK2kgPCBhcmdjKSBxdWV1ZV9uYW1lID0gc3Ry
aW5nX2NvcHlfdGFpbnQoZXhpbV9zdHJfZmFpbF90b29sb25nKGFyZ3ZbaV0sIEVYSU1fRFJJVkVS
TkFNRV9NQVgsICItTUNHIiksIFRSVUUpOworICAgIC8qIC1NQ0c6IHNldCB0aGUgcXVldWUgbmFt
ZSwgdG8gYSBub24tZGVmYXVsdCB2YWx1ZS4gQXJndWFibHksIGFueXRoaW5nCisgICAgICAgZnJv
bSB0aGUgY29tbWFuZGxpbmUgc2hvdWxkIGJlIHRhaW50ZWQgLSBidXQgd2Ugd2lsbCBuZWVkIGFu
IHVudGFpbnRlZAorICAgICAgIHZhbHVlIGZvciB0aGUgc3Bvb2xmaWxlIHdoZW4gZG9pbmcgYSAt
b2RpIGRlbGl2ZXJ5IHByb2Nlc3MuICovCisKKwljYXNlICdHJzogaWYgKCsraSA8IGFyZ2MpIHF1
ZXVlX25hbWUgPSBzdHJpbmdfY29weV90YWludCgKKwkJICAgICAgZXhpbV9zdHJfZmFpbF90b29s
b25nKGFyZ3ZbaV0sIEVYSU1fRFJJVkVSTkFNRV9NQVgsICItTUNHIiksCisJCSAgICAgIEdFVF9V
TlRBSU5URUQpOwogCQkgIGVsc2UgYmFkYXJnID0gVFJVRTsKIAkJICBicmVhazsKIApAQCAtMjc5
OSwxMSArMjk0Niw0MiBAQAogCiAJY2FzZSAnSyc6IHNtdHBfcGVlcl9vcHRpb25zIHw9IE9QVElP
Tl9DSFVOS0lORzsgYnJlYWs7CiAKKyNpZmRlZiBFWFBFUklNRU5UQUxfRVNNVFBfTElNSVRTCisg
ICAgLyogLU1DTDogcGVlciB1c2VkIExJTUlUUyBSQ1BUTUFYIGFuZC9vciBSQ1BURE9NQUlOTUFY
ICovCisJY2FzZSAnTCc6IGlmICgrK2kgPCBhcmdjKSBjb250aW51ZV9saW1pdF9tYWlsID0gVWF0
b2koYXJndltpXSk7CisJCSAgZWxzZSBiYWRhcmcgPSBUUlVFOworCQkgIGlmICgrK2kgPCBhcmdj
KSBjb250aW51ZV9saW1pdF9yY3B0ID0gVWF0b2koYXJndltpXSk7CisJCSAgZWxzZSBiYWRhcmcg
PSBUUlVFOworCQkgIGlmICgrK2kgPCBhcmdjKSBjb250aW51ZV9saW1pdF9yY3B0ZG9tID0gVWF0
b2koYXJndltpXSk7CisJCSAgZWxzZSBiYWRhcmcgPSBUUlVFOworCQkgIGJyZWFrOworI2VuZGlm
CisKICAgICAvKiAtTUNQOiBzZXQgdGhlIHNtdHBfdXNlX3BpcGVsaW5pbmcgZmxhZzsgdGhpcyBp
cyB1c2VmdWwgb25seSB3aGVuCiAgICAgaXQgcHJlY2VkZWQgLU1DIChzZWUgYWJvdmUpICovCiAK
IAljYXNlICdQJzogc210cF9wZWVyX29wdGlvbnMgfD0gT1BUSU9OX1BJUEU7IGJyZWFrOwogCisj
aWZkZWYgU1VQUE9SVF9TT0NLUworICAgIC8qIC1NQ3A6IFNvY2tzIHByb3h5IGluIHVzZTsgbmVh
cnNpZGUgSVAsIHBvcnQsIGV4dGVybmFsIElQLCBwb3J0ICovCisJY2FzZSAncCc6IHByb3h5X3Nl
c3Npb24gPSBUUlVFOworCQkgIGlmICgrK2kgPCBhcmdjKQorCQkgICAgeworCQkgICAgcHJveHlf
bG9jYWxfYWRkcmVzcyA9IHN0cmluZ19jb3B5X3RhaW50KGFyZ3ZbaV0sIEdFVF9UQUlOVEVEKTsK
KwkJICAgIGlmICgrK2kgPCBhcmdjKQorCQkgICAgICB7CisJCSAgICAgIHByb3h5X2xvY2FsX3Bv
cnQgPSBVYXRvaShhcmd2W2ldKTsKKwkJICAgICAgaWYgKCsraSA8IGFyZ2MpCisJCQl7CisJCQlw
cm94eV9leHRlcm5hbF9hZGRyZXNzID0gc3RyaW5nX2NvcHlfdGFpbnQoYXJndltpXSwgR0VUX1RB
SU5URUQpOworCQkJaWYgKCsraSA8IGFyZ2MpCisJCQkgIHsKKwkJCSAgcHJveHlfZXh0ZXJuYWxf
cG9ydCA9IFVhdG9pKGFyZ3ZbaV0pOworCQkJICBicmVhazsKKwkJICAgIH0gfSB9IH0KKwkJICBi
YWRhcmcgPSBUUlVFOworCQkgIGJyZWFrOworI2VuZGlmCiAgICAgLyogLU1DUTogcGFzcyBvbiB0
aGUgcGlkIG9mIHRoZSBxdWV1ZS1ydW5uaW5nIHByb2Nlc3MgdGhhdCBzdGFydGVkCiAgICAgdGhp
cyBjaGFpbiBvZiBkZWxpdmVyaWVzIGFuZCB0aGUgZmQgb2YgaXRzIHN5bmNocm9uaXppbmcgcGlw
ZTsgdGhpcwogICAgIGlzIHVzZWZ1bCBvbmx5IHdoZW4gaXQgcHJlY2VkZXMgLU1DIChzZWUgYWJv
dmUpICovCkBAIC0yODE0LDYgKzI5OTIsMTMgQEAKIAkJICBlbHNlIGJhZGFyZyA9IFRSVUU7CiAJ
CSAgYnJlYWs7CiAKKyAgICAvKiAtTUNxOiBkbyBhIHF1b3RhIGNoZWNrIG9uIHRoZSBnaXZlbiBy
ZWNpcGllbnQgZm9yIHRoZSBnaXZlbiBzaXplCisgICAgb2YgbWVzc2FnZS4gIFNlcGFyYXRlIGZy
b20gLU1DLiAqLworCWNhc2UgJ3EnOiByY3B0X3ZlcmlmeV9xdW90YSA9IFRSVUU7CisJCSAgaWYg
KCsraSA8IGFyZ2MpIG1lc3NhZ2Vfc2l6ZSA9IFVhdG9pKGFyZ3ZbaV0pOworCQkgIGVsc2UgYmFk
YXJnID0gVFJVRTsKKwkJICBicmVhazsKKwogICAgIC8qIC1NQ1M6IHNldCB0aGUgc210cF91c2Vf
c2l6ZSBmbGFnOyB0aGlzIGlzIHVzZWZ1bCBvbmx5IHdoZW4gaXQKICAgICBwcmVjZWRlcyAtTUMg
KHNlZSBhYm92ZSkgKi8KIApAQCAtMjgyNiw3ICszMDExLDkgQEAKIAljYXNlICdyJzoKIAljYXNl
ICdzJzogaWYgKCsraSA8IGFyZ2MpCiAJCSAgICB7Ci0JCSAgICBjb250aW51ZV9wcm94eV9zbmkg
PSBzdHJpbmdfY29weV90YWludChleGltX3N0cl9mYWlsX3Rvb2xvbmcoYXJndltpXSwgRVhJTV9I
T1NUTkFNRV9NQVgsICItTUNyLy1NQ3MiKSwgVFJVRSk7CisJCSAgICBjb250aW51ZV9wcm94eV9z
bmkgPSBzdHJpbmdfY29weV90YWludCgKKwkJICAgICAgZXhpbV9zdHJfZmFpbF90b29sb25nKGFy
Z3ZbaV0sIEVYSU1fSE9TVE5BTUVfTUFYLCAiLU1Dci8tTUNzIiksCisJCSAgICAgIEdFVF9UQUlO
VEVEKTsKIAkJICAgIGlmIChhcmdyZXN0WzFdID09ICdyJykgY29udGludWVfcHJveHlfZGFuZSA9
IFRSVUU7CiAJCSAgICB9CiAJCSAgZWxzZSBiYWRhcmcgPSBUUlVFOwpAQCAtMjgzOCwxMyArMzAy
NSwxNyBAQAogICAgIGFuZCB0aGUgVExTIGNpcGhlci4gKi8KIAogCWNhc2UgJ3QnOiBpZiAoKytp
IDwgYXJnYykKLQkJICAgIHNlbmRpbmdfaXBfYWRkcmVzcyA9IHN0cmluZ19jb3B5X3RhaW50KGV4
aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmd2W2ldLCBFWElNX0lQQUREUl9NQVgsICItTUN0IElQIiks
IFRSVUUpOworCQkgICAgc2VuZGluZ19pcF9hZGRyZXNzID0gc3RyaW5nX2NvcHlfdGFpbnQoCisJ
CSAgICAgIGV4aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmd2W2ldLCBFWElNX0lQQUREUl9NQVgsICIt
TUN0IElQIiksCisJCSAgICAgIEdFVF9UQUlOVEVEKTsKIAkJICBlbHNlIGJhZGFyZyA9IFRSVUU7
CiAJCSAgaWYgKCsraSA8IGFyZ2MpCiAJCSAgICBzZW5kaW5nX3BvcnQgPSAoaW50KShVYXRvbChh
cmd2W2ldKSk7CiAJCSAgZWxzZSBiYWRhcmcgPSBUUlVFOwogCQkgIGlmICgrK2kgPCBhcmdjKQot
CQkgICAgY29udGludWVfcHJveHlfY2lwaGVyID0gc3RyaW5nX2NvcHlfdGFpbnQoZXhpbV9zdHJf
ZmFpbF90b29sb25nKGFyZ3ZbaV0sIEVYSU1fQ0lQSEVSTkFNRV9NQVgsICItTUN0IGNpcGhlciIp
LCBUUlVFKTsKKwkJICAgIGNvbnRpbnVlX3Byb3h5X2NpcGhlciA9IHN0cmluZ19jb3B5X3RhaW50
KAorCQkgICAgICBleGltX3N0cl9mYWlsX3Rvb2xvbmcoYXJndltpXSwgRVhJTV9DSVBIRVJOQU1F
X01BWCwgIi1NQ3QgY2lwaGVyIiksCisJCSAgICAgIEdFVF9UQUlOVEVEKTsKIAkJICBlbHNlIGJh
ZGFyZyA9IFRSVUU7CiAJCSAgLypGQUxMVEhST1VHSCovCiAKQEAgLTI5MDcsMTIgKzMwOTgsMTEg
QEAKICAgIGVsc2UgaWYgKFVzdHJjbXAoYXJncmVzdCwgIkciKSA9PSAwKQogICAgICAgewogICAg
ICAgbXNnX2FjdGlvbiA9IE1TR19TRVRRVUVVRTsKLSAgICAgIHF1ZXVlX25hbWVfZGVzdCA9IHN0
cmluZ19jb3B5X3RhaW50KGV4aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmd2WysraV0sIEVYSU1fRFJJ
VkVSTkFNRV9NQVgsICItTUciKSwgVFJVRSk7Ci0gICAgICB9Ci0gICAgZWxzZSBpZiAoVXN0cmNt
cChhcmdyZXN0LCAibWFkIikgPT0gMCkKLSAgICAgIHsKLSAgICAgIG1zZ19hY3Rpb24gPSBNU0df
TUFSS19BTExfREVMSVZFUkVEOworICAgICAgcXVldWVfbmFtZV9kZXN0ID0gc3RyaW5nX2NvcHlf
dGFpbnQoCisJZXhpbV9zdHJfZmFpbF90b29sb25nKGFyZ3ZbKytpXSwgRVhJTV9EUklWRVJOQU1F
X01BWCwgIi1NRyIpLAorCUdFVF9UQUlOVEVEKTsKICAgICAgIH0KKyAgICBlbHNlIGlmIChVc3Ry
Y21wKGFyZ3Jlc3QsICJtYWQiKSA9PSAwKSBtc2dfYWN0aW9uID0gTVNHX01BUktfQUxMX0RFTElW
RVJFRDsKICAgICBlbHNlIGlmIChVc3RyY21wKGFyZ3Jlc3QsICJtZCIpID09IDApCiAgICAgICB7
CiAgICAgICBtc2dfYWN0aW9uID0gTVNHX01BUktfREVMSVZFUkVEOwpAQCAtMzEyMCwyNyArMzMx
MCwzNyBAQAogCS8qIC1vTWE6IFNldCBzZW5kZXIgaG9zdCBhZGRyZXNzICovCiAKIAlpZiAoVXN0
cmNtcChhcmdyZXN0LCAiYSIpID09IDApCi0JICBzZW5kZXJfaG9zdF9hZGRyZXNzID0gc3RyaW5n
X2NvcHlfdGFpbnQoZXhpbV9zdHJfZmFpbF90b29sb25nKGFyZ3ZbKytpXSwgRVhJTV9JUEFERFJf
TUFYLCAiLW9NYSIpLCBUUlVFKTsKKwkgIHNlbmRlcl9ob3N0X2FkZHJlc3MgPSBzdHJpbmdfY29w
eV90YWludCgKKwkgICAgZXhpbV9zdHJfZmFpbF90b29sb25nKGFyZ3ZbKytpXSwgRVhJTV9JUEFE
RFJfTUFYLCAiLW9NYSIpLAorCSAgICBHRVRfVEFJTlRFRCk7CiAKIAkvKiAtb01hYTogU2V0IGF1
dGhlbnRpY2F0b3IgbmFtZSAqLwogCiAJZWxzZSBpZiAoVXN0cmNtcChhcmdyZXN0LCAiYWEiKSA9
PSAwKQotCSAgc2VuZGVyX2hvc3RfYXV0aGVudGljYXRlZCA9IHN0cmluZ19jb3B5X3RhaW50KGV4
aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmd2WysraV0sIEVYSU1fRFJJVkVSTkFNRV9NQVgsICItb01h
YSIpLCBUUlVFKTsKKwkgIHNlbmRlcl9ob3N0X2F1dGhlbnRpY2F0ZWQgPSBzdHJpbmdfY29weV90
YWludCgKKwkgICAgZXhpbV9zdHJfZmFpbF90b29sb25nKGFyZ3ZbKytpXSwgRVhJTV9EUklWRVJO
QU1FX01BWCwgIi1vTWFhIiksCisJICAgIEdFVF9UQUlOVEVEKTsKIAogCS8qIC1vTWFzOiBzZXR0
aW5nIGF1dGhlbnRpY2F0ZWQgc2VuZGVyICovCiAKIAllbHNlIGlmIChVc3RyY21wKGFyZ3Jlc3Qs
ICJhcyIpID09IDApCi0JICBhdXRoZW50aWNhdGVkX3NlbmRlciA9IHN0cmluZ19jb3B5X3RhaW50
KGV4aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmd2WysraV0sIEVYSU1fRU1BSUxBRERSX01BWCwgIi1v
TWFzIiksIFRSVUUpOworCSAgYXV0aGVudGljYXRlZF9zZW5kZXIgPSBzdHJpbmdfY29weV90YWlu
dCgKKwkgICAgZXhpbV9zdHJfZmFpbF90b29sb25nKGFyZ3ZbKytpXSwgRVhJTV9FTUFJTEFERFJf
TUFYLCAiLW9NYXMiKSwKKwkgICAgR0VUX1RBSU5URUQpOwogCiAJLyogLW9NYWk6IHNldHRpbmcg
YXV0aGVudGljYXRlZCBpZCAqLwogCiAJZWxzZSBpZiAoVXN0cmNtcChhcmdyZXN0LCAiYWkiKSA9
PSAwKQotCSAgYXV0aGVudGljYXRlZF9pZCA9IHN0cmluZ19jb3B5X3RhaW50KGV4aW1fc3RyX2Zh
aWxfdG9vbG9uZyhhcmd2WysraV0sIEVYSU1fRU1BSUxBRERSX01BWCwgIi1vTWFzIiksIFRSVUUp
OworCSAgYXV0aGVudGljYXRlZF9pZCA9IHN0cmluZ19jb3B5X3RhaW50KAorCSAgICBleGltX3N0
cl9mYWlsX3Rvb2xvbmcoYXJndlsrK2ldLCBFWElNX0VNQUlMQUREUl9NQVgsICItb01hcyIpLAor
CSAgICBHRVRfVEFJTlRFRCk7CiAKIAkvKiAtb01pOiBTZXQgaW5jb21pbmcgaW50ZXJmYWNlIGFk
ZHJlc3MgKi8KIAogCWVsc2UgaWYgKFVzdHJjbXAoYXJncmVzdCwgImkiKSA9PSAwKQotCSAgaW50
ZXJmYWNlX2FkZHJlc3MgPSBzdHJpbmdfY29weV90YWludChleGltX3N0cl9mYWlsX3Rvb2xvbmco
YXJndlsrK2ldLCBFWElNX0lQQUREUl9NQVgsICItb01pIiksIFRSVUUpOworCSAgaW50ZXJmYWNl
X2FkZHJlc3MgPSBzdHJpbmdfY29weV90YWludCgKKwkgICAgZXhpbV9zdHJfZmFpbF90b29sb25n
KGFyZ3ZbKytpXSwgRVhJTV9JUEFERFJfTUFYLCAiLW9NaSIpLAorCSAgICBHRVRfVEFJTlRFRCk7
CiAKIAkvKiAtb01tOiBNZXNzYWdlIHJlZmVyZW5jZSAqLwogCkBAIC0zMTYwLDE5ICszMzYwLDI1
IEBACiAJICBpZiAocmVjZWl2ZWRfcHJvdG9jb2wpCiAJICAgIGV4aW1fZmFpbCgicmVjZWl2ZWRf
cHJvdG9jb2wgaXMgc2V0IGFscmVhZHlcbiIpOwogCSAgZWxzZQotCSAgICByZWNlaXZlZF9wcm90
b2NvbCA9IHN0cmluZ19jb3B5X3RhaW50KGV4aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmd2WysraV0s
IEVYSU1fRFJJVkVSTkFNRV9NQVgsICItb01yIiksIFRSVUUpOworCSAgICByZWNlaXZlZF9wcm90
b2NvbCA9IHN0cmluZ19jb3B5X3RhaW50KAorCSAgICAgIGV4aW1fc3RyX2ZhaWxfdG9vbG9uZyhh
cmd2WysraV0sIEVYSU1fRFJJVkVSTkFNRV9NQVgsICItb01yIiksCisJICAgICAgR0VUX1RBSU5U
RUQpOwogCiAJLyogLW9NczogU2V0IHNlbmRlciBob3N0IG5hbWUgKi8KIAogCWVsc2UgaWYgKFVz
dHJjbXAoYXJncmVzdCwgInMiKSA9PSAwKQotCSAgc2VuZGVyX2hvc3RfbmFtZSA9IHN0cmluZ19j
b3B5X3RhaW50KGV4aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmd2WysraV0sIEVYSU1fSE9TVE5BTUVf
TUFYLCAiLW9NcyIpLCBUUlVFKTsKKwkgIHNlbmRlcl9ob3N0X25hbWUgPSBzdHJpbmdfY29weV90
YWludCgKKwkgICAgZXhpbV9zdHJfZmFpbF90b29sb25nKGFyZ3ZbKytpXSwgRVhJTV9IT1NUTkFN
RV9NQVgsICItb01zIiksCisJICAgIEdFVF9UQUlOVEVEKTsKIAogCS8qIC1vTXQ6IFNldCBzZW5k
ZXIgaWRlbnQgKi8KIAogCWVsc2UgaWYgKFVzdHJjbXAoYXJncmVzdCwgInQiKSA9PSAwKQogCSAg
ewogCSAgc2VuZGVyX2lkZW50X3NldCA9IFRSVUU7Ci0JICBzZW5kZXJfaWRlbnQgPSBzdHJpbmdf
Y29weV90YWludChleGltX3N0cl9mYWlsX3Rvb2xvbmcoYXJndlsrK2ldLCBFWElNX0lERU5UVVNF
Ul9NQVgsICItb010IiksIFRSVUUpOworCSAgc2VuZGVyX2lkZW50ID0gc3RyaW5nX2NvcHlfdGFp
bnQoCisJICAgIGV4aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmd2WysraV0sIEVYSU1fSURFTlRVU0VS
X01BWCwgIi1vTXQiKSwKKwkgICAgR0VUX1RBSU5URUQpOwogCSAgfQogCiAJLyogRWxzZSBhIGJh
ZCBhcmd1bWVudCAqLwpAQCAtMzIzMCw3ICszNDM2LDE2IEBACiAKICAgICAgIGNhc2UgJ1gnOgog
CWlmICgqYXJncmVzdCkgYmFkYXJnID0gVFJVRTsKLQllbHNlIG92ZXJyaWRlX2xvY2FsX2ludGVy
ZmFjZXMgPSBzdHJpbmdfY29weV90YWludChleGltX3N0cl9mYWlsX3Rvb2xvbmcoYXJndlsrK2ld
LCAxMDI0LCAiLW9YIiksIFRSVUUpOworCWVsc2Ugb3ZlcnJpZGVfbG9jYWxfaW50ZXJmYWNlcyA9
IHN0cmluZ19jb3B5X3RhaW50KAorCSAgZXhpbV9zdHJfZmFpbF90b29sb25nKGFyZ3ZbKytpXSwg
MTAyNCwgIi1vWCIpLAorCSAgR0VUX1RBSU5URUQpOworCWJyZWFrOworCisgICAgICAvKiAtb1k6
IE92ZXJyaWRlIGNyZWF0aW9uIG9mIGRhZW1vbiBub3RpZmllciBzb2NrZXQgKi8KKworICAgICAg
Y2FzZSAnWSc6CisJaWYgKCphcmdyZXN0KSBiYWRhcmcgPSBUUlVFOworCWVsc2Ugbm90aWZpZXJf
c29ja2V0ID0gTlVMTDsKIAlicmVhazsKIAogICAgICAgLyogVW5rbm93biAtbyBhcmd1bWVudCAq
LwpAQCAtMzI3MSwxMiArMzQ4NiwxNCBAQAogICAgICAgICBleGltX2ZhaWwoInJlY2VpdmVkX3By
b3RvY29sIGlzIHNldCBhbHJlYWR5XG4iKTsKIAogICAgICAgaWYgKCFobikKLSAgICAgICAgcmVj
ZWl2ZWRfcHJvdG9jb2wgPSBzdHJpbmdfY29weV90YWludChleGltX3N0cl9mYWlsX3Rvb2xvbmco
YXJncmVzdCwgRVhJTV9EUklWRVJOQU1FX01BWCwgIi1wPHByb3RvY29sPiIpLCBUUlVFKTsKKyAg
ICAgICAgcmVjZWl2ZWRfcHJvdG9jb2wgPSBzdHJpbmdfY29weV90YWludCgKKwkgIGV4aW1fc3Ry
X2ZhaWxfdG9vbG9uZyhhcmdyZXN0LCBFWElNX0RSSVZFUk5BTUVfTUFYLCAiLXA8cHJvdG9jb2w+
IiksCisJICBHRVRfVEFJTlRFRCk7CiAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgKHZv
aWQpIGV4aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmdyZXN0LCAoRVhJTV9EUklWRVJOQU1FX01BWCsx
K0VYSU1fSE9TVE5BTUVfTUFYKSwgIi1wPHByb3RvY29sPjo8aG9zdD4iKTsKLSAgICAgICAgcmVj
ZWl2ZWRfcHJvdG9jb2wgPSBzdHJpbmdfY29weW5fdGFpbnQoYXJncmVzdCwgaG4gLSBhcmdyZXN0
LCBUUlVFKTsKLSAgICAgICAgc2VuZGVyX2hvc3RfbmFtZSA9IHN0cmluZ19jb3B5X3RhaW50KGhu
ICsgMSwgVFJVRSk7CisgICAgICAgIHJlY2VpdmVkX3Byb3RvY29sID0gc3RyaW5nX2NvcHluX3Rh
aW50KGFyZ3Jlc3QsIGhuIC0gYXJncmVzdCwgR0VUX1RBSU5URUQpOworICAgICAgICBzZW5kZXJf
aG9zdF9uYW1lID0gc3RyaW5nX2NvcHlfdGFpbnQoaG4gKyAxLCBHRVRfVEFJTlRFRCk7CiAgICAg
ICAgIH0KICAgICAgIH0KICAgICBicmVhazsKQEAgLTMzNDUsOSArMzU2Miw5IEBACiAJewogCXF1
ZXVlX2ludGVydmFsID0gMDsKIAlpZiAoaSsxIDwgYXJnYyAmJiBtYWNfaXNtc2dpZChhcmd2W2kr
MV0pKQotCSAgc3RhcnRfcXVldWVfcnVuX2lkID0gc3RyaW5nX2NvcHlfdGFpbnQoYXJndlsrK2ld
LCBUUlVFKTsKKwkgIHN0YXJ0X3F1ZXVlX3J1bl9pZCA9IHN0cmluZ19jb3B5X3RhaW50KGFyZ3Zb
KytpXSwgR0VUX1RBSU5URUQpOwogCWlmIChpKzEgPCBhcmdjICYmIG1hY19pc21zZ2lkKGFyZ3Zb
aSsxXSkpCi0JICBzdG9wX3F1ZXVlX3J1bl9pZCA9IHN0cmluZ19jb3B5X3RhaW50KGFyZ3ZbKytp
XSwgVFJVRSk7CisJICBzdG9wX3F1ZXVlX3J1bl9pZCA9IHN0cmluZ19jb3B5X3RhaW50KGFyZ3Zb
KytpXSwgR0VUX1RBSU5URUQpOwogCX0KIAogICAgIC8qIC1xW2ZdW2ZdW2xdW0c8bmFtZT4vXTxu
PjogUnVuIHRoZSBxdWV1ZSBhdCByZWd1bGFyIGludGVydmFscywgb3B0aW9uYWxseQpAQCAtMzM5
NSw3ICszNjEyLDkgQEAKIAl0YWludGVkX3NlbGVjdHN0ciA9IGFyZ3ZbKytpXTsKICAgICAgIGVs
c2UKIAlleGltX2ZhaWwoImV4aW06IHN0cmluZyBleHBlY3RlZCBhZnRlciAtUlxuIik7Ci0gICAg
ICBkZWxpdmVyX3NlbGVjdHN0cmluZyA9IHN0cmluZ19jb3B5X3RhaW50KGV4aW1fc3RyX2ZhaWxf
dG9vbG9uZyh0YWludGVkX3NlbGVjdHN0ciwgRVhJTV9FTUFJTEFERFJfTUFYLCAiLVIiKSwgVFJV
RSk7CisgICAgICBkZWxpdmVyX3NlbGVjdHN0cmluZyA9IHN0cmluZ19jb3B5X3RhaW50KAorCWV4
aW1fc3RyX2ZhaWxfdG9vbG9uZyh0YWludGVkX3NlbGVjdHN0ciwgRVhJTV9FTUFJTEFERFJfTUFY
LCAiLVIiKSwKKwlHRVRfVEFJTlRFRCk7CiAgICAgICB9CiAgICAgYnJlYWs7CiAKQEAgLTM0Mzgs
NyArMzY1Nyw5IEBACiAJdGFpbnRlZF9zZWxlY3RzdHIgPSBhcmd2WysraV07CiAgICAgICBlbHNl
CiAJZXhpbV9mYWlsKCJleGltOiBzdHJpbmcgZXhwZWN0ZWQgYWZ0ZXIgLVNcbiIpOwotICAgICAg
ZGVsaXZlcl9zZWxlY3RzdHJpbmdfc2VuZGVyID0gc3RyaW5nX2NvcHlfdGFpbnQoZXhpbV9zdHJf
ZmFpbF90b29sb25nKHRhaW50ZWRfc2VsZWN0c3RyLCBFWElNX0VNQUlMQUREUl9NQVgsICItUyIp
LCBUUlVFKTsKKyAgICAgIGRlbGl2ZXJfc2VsZWN0c3RyaW5nX3NlbmRlciA9IHN0cmluZ19jb3B5
X3RhaW50KAorCWV4aW1fc3RyX2ZhaWxfdG9vbG9uZyh0YWludGVkX3NlbGVjdHN0ciwgRVhJTV9F
TUFJTEFERFJfTUFYLCAiLVMiKSwKKwlHRVRfVEFJTlRFRCk7CiAgICAgICB9CiAgICAgYnJlYWs7
CiAKQEAgLTM0NDksNyArMzY3MCw3IEBACiAKICAgICBjYXNlICdUJzoKICAgICBpZiAoZi5ydW5u
aW5nX2luX3Rlc3RfaGFybmVzcyAmJiBVc3RyY21wKGFyZ3Jlc3QsICJxdCIpID09IDApCi0gICAg
ICBmdWRnZWRfcXVldWVfdGltZXMgPSBzdHJpbmdfY29weV90YWludChhcmd2WysraV0sIFRSVUUp
OworICAgICAgZnVkZ2VkX3F1ZXVlX3RpbWVzID0gc3RyaW5nX2NvcHlfdGFpbnQoYXJndlsrK2ld
LCBHRVRfVEFJTlRFRCk7CiAgICAgZWxzZSBiYWRhcmcgPSBUUlVFOwogICAgIGJyZWFrOwogCkBA
IC0zNTI2LDcgKzM3NDcsOSBAQAogICAgIGNhc2UgJ3onOgogICAgIGlmICghKmFyZ3Jlc3QpCiAg
ICAgICBpZiAoKytpIDwgYXJnYykKLQlsb2dfb25lbGluZSA9IHN0cmluZ19jb3B5X3RhaW50KGV4
aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmd2W2ldLCAyMDQ4LCAiLXogbG9ndGV4dCIpLCBUUlVFKTsK
Kwlsb2dfb25lbGluZSA9IHN0cmluZ19jb3B5X3RhaW50KAorCSAgZXhpbV9zdHJfZmFpbF90b29s
b25nKGFyZ3ZbaV0sIDIwNDgsICIteiBsb2d0ZXh0IiksCisJICBHRVRfVEFJTlRFRCk7CiAgICAg
ICBlbHNlCiAgICAgICAgIGV4aW1fZmFpbCgiZXhpbTogZmlsZSBuYW1lIGV4cGVjdGVkIGFmdGVy
ICVzXG4iLCBhcmd2W2ktMV0pOwogICAgIGJyZWFrOwpAQCAtMzU2MSw1NCArMzc4NCw0MCBAQAog
aWYgKHVzYWdlX3dhbnRlZCkgZXhpbV91c2FnZShjYWxsZWRfYXMpOwogCiAvKiBBcmd1bWVudHMg
aGF2ZSBiZWVuIHByb2Nlc3NlZC4gQ2hlY2sgZm9yIGluY29tcGF0aWJpbGl0aWVzLiAqLwotaWYg
KCgKLSAgICAoc210cF9pbnB1dCB8fCBleHRyYWN0X3JlY2lwaWVudHMgfHwgcmVjaXBpZW50c19h
cmcgPCBhcmdjKSAmJgotICAgIChmLmRhZW1vbl9saXN0ZW4gfHwgcXVldWVfaW50ZXJ2YWwgPj0g
MCB8fCBiaV9vcHRpb24gfHwKLSAgICAgIHRlc3RfcmV0cnlfYXJnID49IDAgfHwgdGVzdF9yZXdy
aXRlX2FyZyA+PSAwIHx8Ci0gICAgICBmaWx0ZXJfdGVzdCAhPSBGVEVTVF9OT05FIHx8IChtc2df
YWN0aW9uX2FyZyA+IDAgJiYgIW9uZV9tc2dfYWN0aW9uKSkKLSAgICApIHx8Ci0gICAgKAotICAg
IG1zZ19hY3Rpb25fYXJnID4gMCAmJgotICAgIChmLmRhZW1vbl9saXN0ZW4gfHwgcXVldWVfaW50
ZXJ2YWwgPiAwIHx8IGxpc3Rfb3B0aW9ucyB8fAotICAgICAgKGNoZWNraW5nICYmIG1zZ19hY3Rp
b24gIT0gTVNHX0xPQUQpIHx8Ci0gICAgICBiaV9vcHRpb24gfHwgdGVzdF9yZXRyeV9hcmcgPj0g
MCB8fCB0ZXN0X3Jld3JpdGVfYXJnID49IDApCi0gICAgKSB8fAotICAgICgKLSAgICAoZi5kYWVt
b25fbGlzdGVuIHx8IHF1ZXVlX2ludGVydmFsID4gMCkgJiYKLSAgICAoc2VuZGVyX2FkZHJlc3Mg
IT0gTlVMTCB8fCBsaXN0X29wdGlvbnMgfHwgbGlzdF9xdWV1ZSB8fCBjaGVja2luZyB8fAotICAg
ICAgYmlfb3B0aW9uKQotICAgICkgfHwKLSAgICAoCi0gICAgZi5kYWVtb25fbGlzdGVuICYmIHF1
ZXVlX2ludGVydmFsID09IDAKLSAgICApIHx8Ci0gICAgKAotICAgIGYuaW5ldGRfd2FpdF9tb2Rl
ICYmIHF1ZXVlX2ludGVydmFsID49IDAKLSAgICApIHx8Ci0gICAgKAotICAgIGxpc3Rfb3B0aW9u
cyAmJgotICAgIChjaGVja2luZyB8fCBzbXRwX2lucHV0IHx8IGV4dHJhY3RfcmVjaXBpZW50cyB8
fAotICAgICAgZmlsdGVyX3Rlc3QgIT0gRlRFU1RfTk9ORSB8fCBiaV9vcHRpb24pCi0gICAgKSB8
fAotICAgICgKLSAgICB2ZXJpZnlfYWRkcmVzc19tb2RlICYmCi0gICAgKGYuYWRkcmVzc190ZXN0
X21vZGUgfHwgc210cF9pbnB1dCB8fCBleHRyYWN0X3JlY2lwaWVudHMgfHwKLSAgICAgIGZpbHRl
cl90ZXN0ICE9IEZURVNUX05PTkUgfHwgYmlfb3B0aW9uKQotICAgICkgfHwKLSAgICAoCi0gICAg
Zi5hZGRyZXNzX3Rlc3RfbW9kZSAmJiAoc210cF9pbnB1dCB8fCBleHRyYWN0X3JlY2lwaWVudHMg
fHwKLSAgICAgIGZpbHRlcl90ZXN0ICE9IEZURVNUX05PTkUgfHwgYmlfb3B0aW9uKQotICAgICkg
fHwKLSAgICAoCi0gICAgc210cF9pbnB1dCAmJiAoc2VuZGVyX2FkZHJlc3MgIT0gTlVMTCB8fCBm
aWx0ZXJfdGVzdCAhPSBGVEVTVF9OT05FIHx8Ci0gICAgICBleHRyYWN0X3JlY2lwaWVudHMpCi0g
ICAgKSB8fAotICAgICgKLSAgICBkZWxpdmVyX3NlbGVjdHN0cmluZyAhPSBOVUxMICYmIHF1ZXVl
X2ludGVydmFsIDwgMAotICAgICkgfHwKLSAgICAoCi0gICAgbXNnX2FjdGlvbiA9PSBNU0dfTE9B
RCAmJgotICAgICAgKCFleHBhbnNpb25fdGVzdCB8fCBleHBhbnNpb25fdGVzdF9tZXNzYWdlICE9
IE5VTEwpCi0gICAgKQoraWYgKCAgKCAgKHNtdHBfaW5wdXQgfHwgZXh0cmFjdF9yZWNpcGllbnRz
IHx8IHJlY2lwaWVudHNfYXJnIDwgYXJnYykKKyAgICAgICYmICggIGYuZGFlbW9uX2xpc3RlbiB8
fCBxdWV1ZV9pbnRlcnZhbCA+PSAwIHx8IGJpX29wdGlvbgorCSB8fCB0ZXN0X3JldHJ5X2FyZyA+
PSAwIHx8IHRlc3RfcmV3cml0ZV9hcmcgPj0gMAorCSB8fCBmaWx0ZXJfdGVzdCAhPSBGVEVTVF9O
T05FCisJIHx8IG1zZ19hY3Rpb25fYXJnID4gMCAmJiAhb25lX21zZ19hY3Rpb24KKyAgICAgICkg
ICkKKyAgIHx8ICggIG1zZ19hY3Rpb25fYXJnID4gMAorICAgICAgJiYgKCAgZi5kYWVtb25fbGlz
dGVuIHx8IHF1ZXVlX2ludGVydmFsID4gMCB8fCBsaXN0X29wdGlvbnMKKwkgfHwgY2hlY2tpbmcg
JiYgbXNnX2FjdGlvbiAhPSBNU0dfTE9BRAorCSB8fCBiaV9vcHRpb24gfHwgdGVzdF9yZXRyeV9h
cmcgPj0gMCB8fCB0ZXN0X3Jld3JpdGVfYXJnID49IDAKKyAgICAgICkgICkKKyAgIHx8ICggIChm
LmRhZW1vbl9saXN0ZW4gfHwgcXVldWVfaW50ZXJ2YWwgPiAwKQorICAgICAgJiYgKCAgc2VuZGVy
X2FkZHJlc3MgfHwgbGlzdF9vcHRpb25zIHx8IGxpc3RfcXVldWUgfHwgY2hlY2tpbmcKKwkgfHwg
Ymlfb3B0aW9uCisgICAgICApICApCisgICB8fCBmLmRhZW1vbl9saXN0ZW4gJiYgcXVldWVfaW50
ZXJ2YWwgPT0gMAorICAgfHwgZi5pbmV0ZF93YWl0X21vZGUgJiYgcXVldWVfaW50ZXJ2YWwgPj0g
MAorICAgfHwgKCAgbGlzdF9vcHRpb25zCisgICAgICAmJiAoICBjaGVja2luZyB8fCBzbXRwX2lu
cHV0IHx8IGV4dHJhY3RfcmVjaXBpZW50cworCSB8fCBmaWx0ZXJfdGVzdCAhPSBGVEVTVF9OT05F
IHx8IGJpX29wdGlvbgorICAgICAgKSAgKQorICAgfHwgKCAgdmVyaWZ5X2FkZHJlc3NfbW9kZQor
ICAgICAgJiYgKCAgZi5hZGRyZXNzX3Rlc3RfbW9kZSB8fCBzbXRwX2lucHV0IHx8IGV4dHJhY3Rf
cmVjaXBpZW50cworCSB8fCBmaWx0ZXJfdGVzdCAhPSBGVEVTVF9OT05FIHx8IGJpX29wdGlvbgor
ICAgICAgKSAgKQorICAgfHwgKCAgZi5hZGRyZXNzX3Rlc3RfbW9kZQorICAgICAgJiYgKCAgc210
cF9pbnB1dCB8fCBleHRyYWN0X3JlY2lwaWVudHMgfHwgZmlsdGVyX3Rlc3QgIT0gRlRFU1RfTk9O
RQorCSB8fCBiaV9vcHRpb24KKyAgICAgICkgICkKKyAgIHx8ICggIHNtdHBfaW5wdXQKKyAgICAg
ICYmIChzZW5kZXJfYWRkcmVzcyB8fCBmaWx0ZXJfdGVzdCAhPSBGVEVTVF9OT05FIHx8IGV4dHJh
Y3RfcmVjaXBpZW50cykKKyAgICAgICkKKyAgIHx8IGRlbGl2ZXJfc2VsZWN0c3RyaW5nICYmIHF1
ZXVlX2ludGVydmFsIDwgMAorICAgfHwgbXNnX2FjdGlvbiA9PSBNU0dfTE9BRCAmJiAoIWV4cGFu
c2lvbl90ZXN0IHx8IGV4cGFuc2lvbl90ZXN0X21lc3NhZ2UpCiAgICApCiAgIGV4aW1fZmFpbCgi
ZXhpbTogaW5jb21wYXRpYmxlIGNvbW1hbmQtbGluZSBvcHRpb25zIG9yIGFyZ3VtZW50c1xuIik7
CiAKQEAgLTM2MjgsNyArMzgzNyw3IEBACiAgICAgICB2ZXJzaW9uX3N0cmluZywgKGxvbmcgaW50
KXJlYWxfdWlkLCAobG9uZyBpbnQpcmVhbF9naWQsIChpbnQpZ2V0cGlkKCksCiAgICAgICBkZWJ1
Z19zZWxlY3Rvcik7CiAgICAgaWYgKCF2ZXJzaW9uX3ByaW50ZWQpCi0gICAgICBzaG93X3doYXRz
X3N1cHBvcnRlZChzdGRlcnIpOworICAgICAgc2hvd193aGF0c19zdXBwb3J0ZWQoRkFMU0UpOwog
ICAgIH0KICAgfQogCkBAIC0zNjQ2LDcgKzM4NTUsNyBAQAogICB7CiAgIHN0cnVjdCBybGltaXQg
cmxwOwogCi0gICNpZmRlZiBSTElNSVRfTk9GSUxFCisjaWZkZWYgUkxJTUlUX05PRklMRQogICBp
ZiAoZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZybHApIDwgMCkKICAgICB7CiAgICAgbG9nX3dy
aXRlKDAsIExPR19NQUlOfExPR19QQU5JQywgImdldHJsaW1pdChSTElNSVRfTk9GSUxFKSBmYWls
ZWQ6ICVzIiwKQEAgLTM2NjksOSArMzg3OCw5IEBACiAgICAgICAgICAgc3RyZXJyb3IoZXJybm8p
KTsKICAgICAgIH0KICAgICB9Ci0gICNlbmRpZgorI2VuZGlmCiAKLSAgI2lmZGVmIFJMSU1JVF9O
UFJPQworI2lmZGVmIFJMSU1JVF9OUFJPQwogICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9OUFJPQywg
JnJscCkgPCAwKQogICAgIHsKICAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAi
Z2V0cmxpbWl0KFJMSU1JVF9OUFJPQykgZmFpbGVkOiAlcyIsCkBAIC0zNjc5LDIwICszODg4LDIw
IEBACiAgICAgcmxwLnJsaW1fY3VyID0gcmxwLnJsaW1fbWF4ID0gMDsKICAgICB9CiAKLSAgI2lm
ZGVmIFJMSU1fSU5GSU5JVFkKKyMgaWZkZWYgUkxJTV9JTkZJTklUWQogICBpZiAocmxwLnJsaW1f
Y3VyICE9IFJMSU1fSU5GSU5JVFkgJiYgcmxwLnJsaW1fY3VyIDwgMTAwMCkKICAgICB7CiAgICAg
cmxwLnJsaW1fY3VyID0gcmxwLnJsaW1fbWF4ID0gUkxJTV9JTkZJTklUWTsKLSAgI2Vsc2UKKyMg
ZWxzZQogICBpZiAocmxwLnJsaW1fY3VyIDwgMTAwMCkKICAgICB7CiAgICAgcmxwLnJsaW1fY3Vy
ID0gcmxwLnJsaW1fbWF4ID0gMTAwMDsKLSAgI2VuZGlmCisjIGVuZGlmCiAgICAgaWYgKHNldHJs
aW1pdChSTElNSVRfTlBST0MsICZybHApIDwgMCkKICAgICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJ
TnxMT0dfUEFOSUMsICJzZXRybGltaXQoUkxJTUlUX05QUk9DKSBmYWlsZWQ6ICVzIiwKICAgICAg
ICAgc3RyZXJyb3IoZXJybm8pKTsKICAgICB9Ci0gICNlbmRpZgorI2VuZGlmCiAgIH0KIAogLyog
RXhpbSBpcyBub3JtYWxseSBlbnRlcmVkIGFzIHJvb3QgKGJ1dCBzb21lIHNwZWNpYWwgY29uZmln
dXJhdGlvbnMgYXJlCkBAIC0zODE1LDYgKzQwMjQsNyBAQAogVGhpcyBuZWVkcyB0byBoYXBwZW4g
YmVmb3JlIHdlIHJlYWQgdGhlIG1haW4gY29uZmlndXJhdGlvbi4gKi8KIGluaXRfbG9va3VwX2xp
c3QoKTsKIAorLypYWFggdGhpcyBleGNyZXNjZW5jZSBjb3VsZCBtb3ZlIHRvIHRoZSB0ZXN0c3Vp
dGUgc3RhbmRhcmQgY29uZmlnIHNldHVwIGZpbGUgKi8KICNpZmRlZiBTVVBQT1JUX0kxOE4KIGlm
IChmLnJ1bm5pbmdfaW5fdGVzdF9oYXJuZXNzKSBzbXRwdXRmOF9hZHZlcnRpc2VfaG9zdHMgPSBO
VUxMOwogI2VuZGlmCkBAIC0zODUzLDE5ICs0MDYzLDIxIEBACiBkZWZpbmVkKSAqLwogCiAgIHsK
KyAgaW50IG9sZF9wb29sID0gc3RvcmVfcG9vbDsKICNpZmRlZiBNRUFTVVJFX1RJTUlORwotICBz
dHJ1Y3QgdGltZXZhbCB0MCwgZGlmZjsKKyAgc3RydWN0IHRpbWV2YWwgdDA7CiAgICh2b2lkKWdl
dHRpbWVvZmRheSgmdDAsIE5VTEwpOwogI2VuZGlmCiAKKyAgc3RvcmVfcG9vbCA9IFBPT0xfQ09O
RklHOwogICByZWFkY29uZl9tYWluKGNoZWNraW5nIHx8IGxpc3Rfb3B0aW9ucyk7CisgIHN0b3Jl
X3Bvb2wgPSBvbGRfcG9vbDsKIAogI2lmZGVmIE1FQVNVUkVfVElNSU5HCiAgIHJlcG9ydF90aW1l
X3NpbmNlKCZ0MCwgVVMicmVhZGNvbmZfbWFpbiAoZGVsdGEpIik7CiAjZW5kaWYKICAgfQogCi0K
IC8qIE5vdyBpbiBkaXJlY3RvcnkgIi8iICovCiAKIGlmIChjbGVhbnVwX2Vudmlyb25tZW50KCkg
PT0gRkFMU0UpCkBAIC00MTY4LDEwICs0MzgwLDggQEAKIAogaWYgKFVjaGRpcihzcG9vbF9kaXJl
Y3RvcnkpICE9IDApCiAgIHsKLSAgaW50IGR1bW15OwotICAodm9pZClkaXJlY3RvcnlfbWFrZShz
cG9vbF9kaXJlY3RvcnksIFVTIiIsIFNQT09MX0RJUkVDVE9SWV9NT0RFLCBGQUxTRSk7Ci0gIGR1
bW15ID0gLyogcXVpZXRlbiBjb21waWxlciAqLyBVY2hkaXIoc3Bvb2xfZGlyZWN0b3J5KTsKLSAg
ZHVtbXkgPSBkdW1teTsJLyogeWV0IG1vcmUgY29tcGlsZXIgcXVpZXRlbmluZywgc2lnaCAqLwor
ICAodm9pZCkgZGlyZWN0b3J5X21ha2Uoc3Bvb2xfZGlyZWN0b3J5LCBVUyIiLCBTUE9PTF9ESVJF
Q1RPUllfTU9ERSwgRkFMU0UpOworICAodm9pZCkgVWNoZGlyKHNwb29sX2RpcmVjdG9yeSk7CiAg
IH0KIAogLyogSGFuZGxlIGNhbGxzIHdpdGggdGhlIC1iaSBvcHRpb24uIFRoaXMgaXMgYSBzZW5k
bWFpbCBvcHRpb24gdG8gcmVidWlsZCAqdGhlKgpAQCAtNDE4MiwyMyArNDM5MiwyMyBAQAogCiBp
ZiAoYmlfb3B0aW9uKQogICB7Ci0gICh2b2lkKWZjbG9zZShjb25maWdfZmlsZSk7Ci0gIGlmIChi
aV9jb21tYW5kKQorICAodm9pZCkgZmNsb3NlKGNvbmZpZ19maWxlKTsKKyAgaWYgKGJpX2NvbW1h
bmQgJiYgKmJpX2NvbW1hbmQpCiAgICAgewogICAgIGludCBpID0gMDsKICAgICB1c2NoYXIgKmFy
Z3ZbM107Ci0gICAgYXJndltpKytdID0gYmlfY29tbWFuZDsKKyAgICBhcmd2W2krK10gPSBiaV9j
b21tYW5kOwkvKiBub25leHBhbmRlZCBvcHRpb24gc28gYXNzdW1lIHVudGFpbnRlZCAqLwogICAg
IGlmIChhbGlhc19hcmcpIGFyZ3ZbaSsrXSA9IGFsaWFzX2FyZzsKICAgICBhcmd2W2krK10gPSBO
VUxMOwogCiAgICAgc2V0Z3JvdXBzKGdyb3VwX2NvdW50LCBncm91cF9saXN0KTsKICAgICBleGlt
X3NldHVnaWQocmVhbF91aWQsIHJlYWxfZ2lkLCBGQUxTRSwgVVMicnVubmluZyBiaV9jb21tYW5k
Iik7CiAKLSAgICBERUJVRyhEX2V4ZWMpIGRlYnVnX3ByaW50ZigiZXhlYyAlLjI1NnMgJS4yNTZz
XG4iLCBhcmd2WzBdLAotICAgICAgYXJndlsxXSA/IGFyZ3ZbMV0gOiBVUyIiKTsKKyAgICBERUJV
RyhEX2V4ZWMpIGRlYnVnX3ByaW50ZigiZXhlYyAnJS4yNTZzJyAlcyUuMjU2cyVzXG4iLCBhcmd2
WzBdLAorICAgICAgYXJndlsxXSA/ICInIiA6ICIiLCBhcmd2WzFdID8gYXJndlsxXSA6IFVTIiIs
IGFyZ3ZbMV0gPyAiJyIgOiAiIik7CiAKICAgICBleGVjdihDUyBhcmd2WzBdLCAoY2hhciAqY29u
c3QgKilhcmd2KTsKLSAgICBleGltX2ZhaWwoImV4aW06IGV4ZWMgZmFpbGVkOiAlc1xuIiwgc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICBleGltX2ZhaWwoImV4aW06IGV4ZWMgJyVzJyBmYWlsZWQ6ICVz
XG4iLCBhcmd2WzBdLCBzdHJlcnJvcihlcnJubykpOwogICAgIH0KICAgZWxzZQogICAgIHsKQEAg
LTQyMzIsNyArNDQ0Miw3IEBACiAgICAgIHx8IHF1ZXVlX25hbWVfZGVzdCAmJiBwcm9kX3JlcXVp
cmVzX2FkbWluCiAgICAgIHx8IGRlYnVnc2V0ICYmICFmLnJ1bm5pbmdfaW5fdGVzdF9oYXJuZXNz
CiAgICAgICkKLSAgICBleGltX2ZhaWwoImV4aW06JXMgcGVybWlzc2lvbiBkZW5pZWRcbiIsIGRl
YnVnc2V0PyAiIGRlYnVnZ2luZyIgOiAiIik7CisgICAgZXhpbV9mYWlsKCJleGltOiVzIHBlcm1p
c3Npb24gZGVuaWVkXG4iLCBkZWJ1Z3NldCA/ICIgZGVidWdnaW5nIiA6ICIiKTsKICAgfQogCiAv
KiBJZiB0aGUgcmVhbCB1c2VyIGlzIG5vdCByb290IG9yIHRoZSBleGltIHVpZCwgdGhlIGFyZ3Vt
ZW50IGZvciBwYXNzaW5nCkBAIC00MjQxLDExICs0NDUxLDEzIEBACiBvbmUgdGhhdCBzdXBwbGll
ZCBhbiBpbnB1dCBtZXNzYWdlLCBvciB3ZSBhcmUgdXNpbmcgYSBwYXRjaGVkIGV4aW0gZm9yCiBy
ZWdyZXNzaW9uIHRlc3RpbmcuICovCiAKLWlmIChyZWFsX3VpZCAhPSByb290X3VpZCAmJiByZWFs
X3VpZCAhPSBleGltX3VpZCAmJgotICAgICAoY29udGludWVfaG9zdG5hbWUgIT0gTlVMTCB8fAot
ICAgICAgIChmLmRvbnRfZGVsaXZlciAmJgotICAgICAgICAgKHF1ZXVlX2ludGVydmFsID49IDAg
fHwgZi5kYWVtb25fbGlzdGVuIHx8IG1zZ19hY3Rpb25fYXJnID4gMCkKLSAgICAgICApKSAmJiAh
Zi5ydW5uaW5nX2luX3Rlc3RfaGFybmVzcykKK2lmICggIHJlYWxfdWlkICE9IHJvb3RfdWlkICYm
IHJlYWxfdWlkICE9IGV4aW1fdWlkCisgICAmJiAoICBjb250aW51ZV9ob3N0bmFtZQorICAgICAg
fHwgKCAgZi5kb250X2RlbGl2ZXIKKwkgJiYgKHF1ZXVlX2ludGVydmFsID49IDAgfHwgZi5kYWVt
b25fbGlzdGVuIHx8IG1zZ19hY3Rpb25fYXJnID4gMCkKKyAgICAgICkgICkKKyAgICYmICFmLnJ1
bm5pbmdfaW5fdGVzdF9oYXJuZXNzCisgICApCiAgIGV4aW1fZmFpbCgiZXhpbTogUGVybWlzc2lv
biBkZW5pZWRcbiIpOwogCiAvKiBJZiB0aGUgY2FsbGVyIGlzIG5vdCB0cnVzdGVkLCBjZXJ0YWlu
IGFyZ3VtZW50cyBhcmUgaWdub3JlZCB3aGVuIHJ1bm5pbmcgZm9yCkBAIC00MjY3LDkgKzQ0Nzks
OSBAQAogCiBlbHNlCiAgIHsKLSAgaWYgKHNlbmRlcl9ob3N0X2FkZHJlc3MgIT0gTlVMTCkKKyAg
aWYgKHNlbmRlcl9ob3N0X2FkZHJlc3MpCiAgICAgc2VuZGVyX2hvc3RfcG9ydCA9IGNoZWNrX3Bv
cnQoc2VuZGVyX2hvc3RfYWRkcmVzcyk7Ci0gIGlmIChpbnRlcmZhY2VfYWRkcmVzcyAhPSBOVUxM
KQorICBpZiAoaW50ZXJmYWNlX2FkZHJlc3MpCiAgICAgaW50ZXJmYWNlX3BvcnQgPSBjaGVja19w
b3J0KGludGVyZmFjZV9hZGRyZXNzKTsKICAgfQogCkBAIC00MzU2LDE4ICs0NTY4LDIwIEBACiBz
aXR1YXRpb24gKGNvbnRyb2xsZWQgYnkgdGhlIFRSVUUgYmVsb3cpLCBpbiBvcmRlciB0byBiZSBh
cyBjbG9zZSBhcyBwb3NzaWJsZQogdG8gdGhlIHN0YXRlIEV4aW0gdXN1YWxseSBydW5zIGluLiAq
LwogCi1pZiAoIXVucHJpdmlsZWdlZCAmJiAgICAgICAgICAgICAgICAgICAgICAvKiBvcmlnaW5h
bGx5IGhhZCByb290IEFORCAqLwotICAgICFyZW1vdmVkX3ByaXZpbGVnZSAmJiAgICAgICAgICAg
ICAgICAgLyogc3RpbGwgZ290IHJvb3QgQU5EICAgICAgKi8KLSAgICAhZi5kYWVtb25fbGlzdGVu
ICYmICAgICAgICAgICAgICAgICAgICAgLyogbm90IHN0YXJ0aW5nIHRoZSBkYWVtb24gKi8KLSAg
ICBxdWV1ZV9pbnRlcnZhbCA8PSAwICYmICAgICAgICAgICAgICAgIC8qIChlaXRoZXIga2luZCBv
ZiBkYWVtb24pICovCi0gICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiAgICBBTkQgRUlUSEVSICAgICAgICAgICAqLwotICAgICAgZGVsaXZlcl9kcm9wX3ByaXZpbGVn
ZSB8fCAgICAgICAgICAgLyogcmVxdWVzdGVkIHVucHJpdmlsZWdlZCAgKi8KLSAgICAgICAgKCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgIE9SICAgICAgICAgICAgICAg
ICovCi0gICAgICAgIHF1ZXVlX2ludGVydmFsIDwgMCAmJiAgICAgICAgICAgICAvKiBub3QgcnVu
bmluZyB0aGUgcXVldWUgICAqLwotICAgICAgICAobXNnX2FjdGlvbl9hcmcgPCAwIHx8ICAgICAg
ICAgICAgLyogICAgICAgYW5kICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICBtc2dfYWN0aW9u
ICE9IE1TR19ERUxJVkVSKSAmJiAgIC8qIG5vdCBkZWxpdmVyaW5nIGFuZCAgICAgICovCi0gICAg
ICAgICghY2hlY2tpbmcgfHwgIWYuYWRkcmVzc190ZXN0X21vZGUpIC8qIG5vdCBhZGRyZXNzIGNo
ZWNraW5nICAgICovCi0gICApICApICkKK2lmICggICF1bnByaXZpbGVnZWQJCQkJLyogb3JpZ2lu
YWxseSBoYWQgcm9vdCBBTkQgKi8KKyAgICYmICFyZW1vdmVkX3ByaXZpbGVnZQkJCS8qIHN0aWxs
IGdvdCByb290IEFORCAgICAgICovCisgICAmJiAhZi5kYWVtb25fbGlzdGVuCQkJCS8qIG5vdCBz
dGFydGluZyB0aGUgZGFlbW9uICovCisgICAmJiBxdWV1ZV9pbnRlcnZhbCA8PSAwCQkJLyogKGVp
dGhlciBraW5kIG9mIGRhZW1vbikgKi8KKyAgICYmICgJCQkJCQkvKiAgICBBTkQgRUlUSEVSICAg
ICAgICAgICAqLworICAgICAgICAgZGVsaXZlcl9kcm9wX3ByaXZpbGVnZQkJCS8qIHJlcXVlc3Rl
ZCB1bnByaXZpbGVnZWQgICovCisgICAgICB8fCAoCQkJCQkvKiAgICAgICBPUiAgICAgICAgICAg
ICAgICAqLworICAgICAgICAgICAgcXVldWVfaW50ZXJ2YWwgPCAwCQkJLyogbm90IHJ1bm5pbmcg
dGhlIHF1ZXVlICAgKi8KKyAgICAgICAgICYmICggIG1zZ19hY3Rpb25fYXJnIDwgMAkJLyogICAg
ICAgYW5kICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHx8IG1zZ19hY3Rpb24gIT0gTVNH
X0RFTElWRVIJLyogbm90IGRlbGl2ZXJpbmcgICAgICAgICAgKi8KKwkgICAgKQkJCQkJLyogICAg
ICAgYW5kICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICYmICghY2hlY2tpbmcgfHwgIWYuYWRk
cmVzc190ZXN0X21vZGUpCS8qIG5vdCBhZGRyZXNzIGNoZWNraW5nICAgICovCisJICYmICFyY3B0
X3ZlcmlmeV9xdW90YQkJCS8qIGFuZCBub3QgcXVvdGEgY2hlY2tpbmcgICovCisgICApICApICAp
CiAgIGV4aW1fc2V0dWdpZChleGltX3VpZCwgZXhpbV9naWQsIFRSVUUsIFVTInByaXZpbGVnZSBu
b3QgbmVlZGVkIik7CiAKIC8qIFdoZW4gd2UgYXJlIHJldGFpbmluZyBhIHByaXZpbGVnZWQgdWlk
LCB3ZSBzdGlsbCBjaGFuZ2UgdG8gdGhlIGV4aW0gZ2lkLiAqLwpAQCAtNDM5OCw4ICs0NjEyLDcg
QEAKICNpZmRlZiBXSVRIX0NPTlRFTlRfU0NBTgogICBpbnQgcmVzdWx0OwogICBzZXRfcHJvY2Vz
c19pbmZvKCJzY2FubmluZyBmaWxlIGZvciBtYWx3YXJlIik7Ci0gIHJlc3VsdCA9IG1hbHdhcmVf
aW5fZmlsZShtYWx3YXJlX3Rlc3RfZmlsZSk7Ci0gIGlmIChyZXN1bHQgPT0gRkFJTCkKKyAgaWYg
KChyZXN1bHQgPSBtYWx3YXJlX2luX2ZpbGUobWFsd2FyZV90ZXN0X2ZpbGUpKSA9PSBGQUlMKQog
ICAgIHsKICAgICBwcmludGYoIk5vIG1hbHdhcmUgZm91bmQuXG4iKTsKICAgICBleGl0KEVYSVRf
U1VDQ0VTUyk7CkBAIC00NDUxLDcgKzQ2NjQsMTMgQEAKICAgZXZlbnRfYWN0aW9uIGdldHMgZXhw
YW5kZWQgKi8KIAogICBpZiAobXNnX2FjdGlvbiA9PSBNU0dfUkVNT1ZFKQorICAgIHsKKyAgICBp
bnQgb2xkX3Bvb2wgPSBzdG9yZV9wb29sOworICAgIHN0b3JlX3Bvb2wgPSBQT09MX0NPTkZJRzsK
ICAgICByZWFkY29uZl9yZXN0KCk7CisgICAgc3RvcmVfcG9vbCA9IG9sZF9wb29sOworICAgIHN0
b3JlX3dyaXRlcHJvdGVjdChQT09MX0NPTkZJRyk7CisgICAgfQogCiAgIGlmICghb25lX21zZ19h
Y3Rpb24pCiAgICAgewpAQCAtNDQ3NiwxOCArNDY5NSwzOSBAQAogbmVlZGVkIGluIHRyYW5zcG9y
dHMgc28gd2UgbG9zdCB0aGUgb3B0aW1pc2F0aW9uLiAqLwogCiAgIHsKKyAgaW50IG9sZF9wb29s
ID0gc3RvcmVfcG9vbDsKICNpZmRlZiBNRUFTVVJFX1RJTUlORwotICBzdHJ1Y3QgdGltZXZhbCB0
MCwgZGlmZjsKKyAgc3RydWN0IHRpbWV2YWwgdDA7CiAgICh2b2lkKWdldHRpbWVvZmRheSgmdDAs
IE5VTEwpOwogI2VuZGlmCiAKKyAgc3RvcmVfcG9vbCA9IFBPT0xfQ09ORklHOwogICByZWFkY29u
Zl9yZXN0KCk7CisgIHN0b3JlX3Bvb2wgPSBvbGRfcG9vbDsKKworICAvKiAtYmUgY2FuIGFkZCBt
YWNybyBkZWZpbml0aW9ucywgbmVlZGluZyB0byBsaW5rIHRvIHRoZSBtYWNybyBzdHJ1Y3R1cmUK
KyAgY2hhaW4uICBPdGhlcndpc2UsIG1ha2UgdGhlIG1lbW9yeSB1c2VkIGZvciBjb25maWcgZGF0
YSByZWFkb25seS4gKi8KKworICBpZiAoIWV4cGFuc2lvbl90ZXN0KQorICAgIHN0b3JlX3dyaXRl
cHJvdGVjdChQT09MX0NPTkZJRyk7CiAKICNpZmRlZiBNRUFTVVJFX1RJTUlORwogICByZXBvcnRf
dGltZV9zaW5jZSgmdDAsIFVTInJlYWRjb25mX3Jlc3QgKGRlbHRhKSIpOwogI2VuZGlmCiAgIH0K
IAorLyogSGFuZGxlIGEgcmVxdWVzdCB0byBjaGVjayBxdW90YSAqLworaWYgKHJjcHRfdmVyaWZ5
X3F1b3RhKQorICBpZiAocmVhbF91aWQgIT0gcm9vdF91aWQgJiYgcmVhbF91aWQgIT0gZXhpbV91
aWQpCisgICAgZXhpbV9mYWlsKCJleGltOiBQZXJtaXNzaW9uIGRlbmllZFxuIik7CisgIGVsc2Ug
aWYgKHJlY2lwaWVudHNfYXJnID49IGFyZ2MpCisgICAgZXhpbV9mYWlsKCJleGltOiBtaXNzaW5n
IHJlY2lwaWVudCBmb3IgcXVvdGEgY2hlY2tcbiIpOworICBlbHNlCisgICAgeworICAgIHZlcmlm
eV9xdW90YShhcmd2W3JlY2lwaWVudHNfYXJnXSk7CisgICAgZXhpbV9leGl0KEVYSVRfU1VDQ0VT
Uyk7CisgICAgfQorCiAvKiBIYW5kbGUgdGhlIC1icnQgb3B0aW9uLiBUaGlzIGlzIGZvciBjaGVj
a2luZyBvdXQgcmV0cnkgY29uZmlndXJhdGlvbnMuCiBUaGUgbmV4dCB0aHJlZSBhcmd1bWVudHMg
YXJlIGEgZG9tYWluIG5hbWUgb3IgYSBjb21wbGV0ZSBhZGRyZXNzLCBhbmQKIG9wdGlvbmFsbHkg
dHdvIGVycm9yIG51bWJlcnMuIEFsbCBpdCBkb2VzIGlzIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHRo
YXQKQEAgLTQ3NjIsNyArNTAwMiw3IEBACiAKICAgICAgICAgaWYgKGdlY29zX3BhdHRlcm4gJiYg
Z2Vjb3NfbmFtZSkKICAgICAgICAgICB7Ci0gICAgICAgICAgY29uc3QgcGNyZSAqcmU7CisgICAg
ICAgICAgY29uc3QgcGNyZTJfY29kZSAqcmU7CiAgICAgICAgICAgcmUgPSByZWdleF9tdXN0X2Nv
bXBpbGUoZ2Vjb3NfcGF0dGVybiwgRkFMU0UsIFRSVUUpOyAvKiBVc2UgbWFsbG9jICovCiAKICAg
ICAgICAgICBpZiAocmVnZXhfbWF0Y2hfYW5kX3NldHVwKHJlLCBuYW1lLCAwLCAtMSkpCkBAIC00
ODAzLDE2ICs1MDQzLDE2IEBACiBjb25maWd1cmF0aW9uIHNwZWNpZmllcyBzb21ldGhpbmcgdG8g
dXNlLiBXaGVuIHJ1bm5pbmcgaW4gdGhlIHRlc3QgaGFybmVzcywKIGFueSBzZXR0aW5nIG9mIHVu
a25vd25fbG9naW4gb3ZlcnJpZGVzIHRoZSBhY3R1YWwgbmFtZS4gKi8KIAotaWYgKG9yaWdpbmF0
b3JfbG9naW4gPT0gTlVMTCB8fCBmLnJ1bm5pbmdfaW5fdGVzdF9oYXJuZXNzKQoraWYgKCFvcmln
aW5hdG9yX2xvZ2luIHx8IGYucnVubmluZ19pbl90ZXN0X2hhcm5lc3MpCiAgIHsKLSAgaWYgKHVu
a25vd25fbG9naW4gIT0gTlVMTCkKKyAgaWYgKHVua25vd25fbG9naW4pCiAgICAgewogICAgIG9y
aWdpbmF0b3JfbG9naW4gPSBleHBhbmRfc3RyaW5nKHVua25vd25fbG9naW4pOwotICAgIGlmIChv
cmlnaW5hdG9yX25hbWUgPT0gTlVMTCAmJiB1bmtub3duX3VzZXJuYW1lICE9IE5VTEwpCisgICAg
aWYgKCFvcmlnaW5hdG9yX25hbWUgJiYgdW5rbm93bl91c2VybmFtZSkKICAgICAgIG9yaWdpbmF0
b3JfbmFtZSA9IGV4cGFuZF9zdHJpbmcodW5rbm93bl91c2VybmFtZSk7Ci0gICAgaWYgKG9yaWdp
bmF0b3JfbmFtZSA9PSBOVUxMKSBvcmlnaW5hdG9yX25hbWUgPSBVUyIiOworICAgIGlmICghb3Jp
Z2luYXRvcl9uYW1lKSBvcmlnaW5hdG9yX25hbWUgPSBVUyIiOwogICAgIH0KLSAgaWYgKG9yaWdp
bmF0b3JfbG9naW4gPT0gTlVMTCkKKyAgaWYgKCFvcmlnaW5hdG9yX2xvZ2luKQogICAgIGxvZ193
cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLCAiRmFpbGVkIHRvIGdldCB1c2VyIG5hbWUg
Zm9yIHVpZCAlZCIsCiAgICAgICAoaW50KXJlYWxfdWlkKTsKICAgfQpAQCAtNDgyMCw3ICs1MDYw
LDcgQEAKIC8qIEVuc3VyZSB0aGF0IHRoZSB1c2VyIG5hbWUgaXMgaW4gYSBzdWl0YWJsZSBmb3Jt
IGZvciB1c2UgYXMgYSAicGhyYXNlIiBpbiBhbgogUkZDODIyIGFkZHJlc3MuKi8KIAotb3JpZ2lu
YXRvcl9uYW1lID0gcGFyc2VfZml4X3BocmFzZShvcmlnaW5hdG9yX25hbWUsIFVzdHJsZW4ob3Jp
Z2luYXRvcl9uYW1lKSk7CitvcmlnaW5hdG9yX25hbWUgPSBVUyBwYXJzZV9maXhfcGhyYXNlKG9y
aWdpbmF0b3JfbmFtZSwgVXN0cmxlbihvcmlnaW5hdG9yX25hbWUpKTsKIAogLyogSWYgYSBtZXNz
YWdlIGlzIGNyZWF0ZWQgYnkgdGhpcyBjYWxsIG9mIEV4aW0sIHRoZSB1aWQvZ2lkIG9mIGl0cyBv
cmlnaW5hdG9yCiBhcmUgdGhvc2Ugb2YgdGhlIGNhbGxlci4gVGhlc2UgdmFsdWVzIGFyZSBvdmVy
cmlkZGVuIGlmIGFuIGV4aXN0aW5nIG1lc3NhZ2UgaXMKQEAgLTQ4NTEsNyArNTA5MSw3IEBACiAg
IHJvdXRpbmVzIGluIGl0LCBzbyBjYWxsIGV2ZW4gaWYgdGxzX3JlcXVpcmVfY2lwaGVycyBpcyB1
bnNldCAqLwogICAgIHsKICMgaWZkZWYgTUVBU1VSRV9USU1JTkcKLSAgICBzdHJ1Y3QgdGltZXZh
bCB0MCwgZGlmZjsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0MDsKICAgICAodm9pZClnZXR0aW1lb2Zk
YXkoJnQwLCBOVUxMKTsKICMgZW5kaWYKICAgICBpZiAoIXRsc19kcm9wcHJpdnNfdmFsaWRhdGVf
cmVxdWlyZV9jaXBoZXIoRkFMU0UpKQpAQCAtNDkyMiw4ICs1MTYyLDggQEAKICAgc2VuZGVyLCBv
ciBpZiBhIHNlbmRlciBvdGhlciB0aGFuIDw+IGlzIHNldCwgb3ZlcnJpZGUgd2l0aCB0aGUgb3Jp
Z2luYXRvcidzCiAgIGxvZ2luICh3aGljaCB3aWxsIGdldCBxdWFsaWZpZWQgYmVsb3cpLCBleGNl
cHQgd2hlbiBjaGVja2luZyB0aGluZ3MuICovCiAKLSAgaWYgKHNlbmRlcl9hZGRyZXNzID09IE5V
TEwgICAgICAgICAgICAgLyogTm8gc2VuZGVyX2FkZHJlc3Mgc2V0ICovCi0gICAgICAgfHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgT1IgICAgICAgICAgICAqLwor
ICBpZiAoICAhc2VuZGVyX2FkZHJlc3MgICAgICAgICAgICAgICAgICAvKiBObyBzZW5kZXJfYWRk
cmVzcyBzZXQgKi8KKyAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog
ICAgICAgICBPUiAgICAgICAgICAgICovCiAgICAgICAgKHNlbmRlcl9hZGRyZXNzWzBdICE9IDAg
JiYgICAgICAgIC8qIE5vbi1lbXB0eSBzZW5kZXIgYWRkcmVzcywgQU5EICovCiAgICAgICAgIWNo
ZWNraW5nKSkgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBydW5uaW5nIHRlc3RzLCBpbmNs
dWRpbmcgZmlsdGVyIHRlc3RzICovCiAgICAgewpAQCAtNDk3NCwxMSArNTIxNCwxMiBAQAogICAg
IH0KIAogICBpZiAocmVjaXBpZW50c19hcmcgPCBhcmdjKQotICAgIHsKICAgICB3aGlsZSAocmVj
aXBpZW50c19hcmcgPCBhcmdjKQogICAgICAgewogICAgICAgLyogU3VwcGxpZWQgYWRkcmVzc2Vz
IGFyZSB0YWludGVkIHNpbmNlIHRoZXkgY29tZSBmcm9tIGEgdXNlciAqLwotICAgICAgdXNjaGFy
ICogcyA9IHN0cmluZ19jb3B5X3RhaW50KGV4aW1fc3RyX2ZhaWxfdG9vbG9uZyhhcmd2W3JlY2lw
aWVudHNfYXJnKytdLCBFWElNX0RJU1BMQVlNQUlMX01BWCwgImFkZHJlc3MgdmVyaWZpY2F0aW9u
IiksIFRSVUUpOworICAgICAgdXNjaGFyICogcyA9IHN0cmluZ19jb3B5X3RhaW50KAorCWV4aW1f
c3RyX2ZhaWxfdG9vbG9uZyhhcmd2W3JlY2lwaWVudHNfYXJnKytdLCBFWElNX0RJU1BMQVlNQUlM
X01BWCwgImFkZHJlc3MgdmVyaWZpY2F0aW9uIiksCisJR0VUX1RBSU5URUQpOwogICAgICAgd2hp
bGUgKCpzKQogICAgICAgICB7CiAgICAgICAgIEJPT0wgZmluaXNoZWQgPSBGQUxTRTsKQEAgLTQ5
OTAsMTMgKzUyMzEsMTUgQEAKICAgICAgICAgICB3aGlsZSAoKisrcyA9PSAnLCcgfHwgaXNzcGFj
ZSgqcykpIDsKICAgICAgICAgfQogICAgICAgfQotICAgIH0KIAogICBlbHNlIGZvciAoOzspCiAg
ICAgewogICAgIHVzY2hhciAqIHMgPSBnZXRfc3RkaW5wdXQoTlVMTCwgTlVMTCk7CiAgICAgaWYg
KCFzKSBicmVhazsKLSAgICB0ZXN0X2FkZHJlc3Moc3RyaW5nX2NvcHlfdGFpbnQoZXhpbV9zdHJf
ZmFpbF90b29sb25nKHMsIEVYSU1fRElTUExBWU1BSUxfTUFYLCAiYWRkcmVzcyB2ZXJpZmljYXRp
b24gKHN0ZGluKSIpLCBUUlVFKSwgZmxhZ3MsICZleGl0X3ZhbHVlKTsKKyAgICB0ZXN0X2FkZHJl
c3Moc3RyaW5nX2NvcHlfdGFpbnQoCisJZXhpbV9zdHJfZmFpbF90b29sb25nKHMsIEVYSU1fRElT
UExBWU1BSUxfTUFYLCAiYWRkcmVzcyB2ZXJpZmljYXRpb24gKHN0ZGluKSIpLAorCUdFVF9UQUlO
VEVEKSwKKyAgICAgIGZsYWdzLCAmZXhpdF92YWx1ZSk7CiAgICAgfQogCiAgIHJvdXRlX3RpZHl1
cCgpOwpAQCAtNTAxOSw3ICs1MjYyLDcgQEAKICAgICBtZXNzYWdlX2lkID0gVVMgZXhpbV9zdHJf
ZmFpbF90b29sb25nKGFyZ3ZbbXNnX2FjdGlvbl9hcmddLCBNRVNTQUdFX0lEX0xFTkdUSCwgIm1l
c3NhZ2UtaWQiKTsKICAgICAvKiBDaGVja2luZyB0aGUgbGVuZ3RoIG9mIHRoZSBJRCBpcyBzdWZm
aWNpZW50IHRvIHZhbGlkYXRlIGl0LgogICAgIEdldCBhbiB1bnRhaW50ZWQgdmVyc2lvbiBzbyBm
aWxlIG9wZW5zIGNhbiBiZSBkb25lLiAqLwotICAgIG1lc3NhZ2VfaWQgPSBzdHJpbmdfY29weV90
YWludChtZXNzYWdlX2lkLCBGQUxTRSk7CisgICAgbWVzc2FnZV9pZCA9IHN0cmluZ19jb3B5X3Rh
aW50KG1lc3NhZ2VfaWQsIEdFVF9VTlRBSU5URUQpOwogCiAgICAgc3Bvb2xuYW1lID0gc3RyaW5n
X3NwcmludGYoIiVzLUgiLCBtZXNzYWdlX2lkKTsKICAgICBpZiAoKGRlbGl2ZXJfZGF0YWZpbGUg
PSBzcG9vbF9vcGVuX2RhdGFmaWxlKG1lc3NhZ2VfaWQpKSA8IDApCkBAIC01MTM2LDcgKzUzNzks
NyBAQAogICBpdC4gVGhlIGNvZGUgd29ya3MgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiwgYXMgaXQg
aGFwcGVucy4gKi8KIAogICBzaXplID0gaG9zdF9hdG9uKHNlbmRlcl9ob3N0X2FkZHJlc3MsIHgp
OwotICBzZW5kZXJfaG9zdF9hZGRyZXNzID0gc3RvcmVfZ2V0KDQ4LCBGQUxTRSk7ICAvKiBsYXJn
ZSBlbm91Z2ggZm9yIGZ1bGwgSVB2NiAqLworICBzZW5kZXJfaG9zdF9hZGRyZXNzID0gc3RvcmVf
Z2V0KDQ4LCBHRVRfVU5UQUlOVEVEKTsgIC8qIGxhcmdlIGVub3VnaCBmb3IgZnVsbCBJUHY2ICov
CiAgICh2b2lkKWhvc3Rfbm10b2Eoc2l6ZSwgeCwgLTEsIHNlbmRlcl9ob3N0X2FkZHJlc3MsICc6
Jyk7CiAKICAgLyogTm93IHNldCB1cCBmb3IgdGVzdGluZyAqLwpAQCAtNTMwNCw3ICs1NTQ3LDcg
QEAKICAgewogICBpZiAoIWYuaXNfaW5ldGQpIHNldF9wcm9jZXNzX2luZm8oImFjY2VwdGluZyBh
IGxvY2FsICVzU01UUCBtZXNzYWdlIGZyb20gPCVzPiIsCiAgICAgc210cF9iYXRjaGVkX2lucHV0
PyAiYmF0Y2hlZCAiIDogIiIsCi0gICAgKHNlbmRlcl9hZGRyZXNzIT0gTlVMTCk/IHNlbmRlcl9h
ZGRyZXNzIDogb3JpZ2luYXRvcl9sb2dpbik7CisgICAgc2VuZGVyX2FkZHJlc3MgPyBzZW5kZXJf
YWRkcmVzcyA6IG9yaWdpbmF0b3JfbG9naW4pOwogICB9CiBlbHNlCiAgIHsKQEAgLTUzNTQsNyAr
NTU5Nyw4IEBACiAgICAgfQogICB9CiAKLS8qIE90aGVyd2lzZSwgc2V0IHVwIHRoZSBpbnB1dCBz
aXplIGxpbWl0IGhlcmUuICovCisvKiBPdGhlcndpc2UsIHNldCB1cCB0aGUgaW5wdXQgc2l6ZSBs
aW1pdCBoZXJlIGFuZCBzZXQgbm8gc3RkaW4gc3RkaW8gYnVmZmVyCisod2UgaGFuZGxlIGJ1ZmVy
cmluZyBzbyBhcyB0byBoYXZlIHZpc2liaWxpdHkgb2YgZmlsbCBsZXZlbCkuICovCiAKIGVsc2UK
ICAgewpAQCAtNTM2Niw2ICs1NjEwLDggQEAKICAgICBlbHNlCiAgICAgICBsb2dfd3JpdGUoMCwg
TE9HX01BSU58TE9HX1BBTklDX0RJRSwgImludmFsaWQgdmFsdWUgZm9yICIKICAgICAgICAgIm1l
c3NhZ2Vfc2l6ZV9saW1pdDogJXMiLCBleHBhbmRfc3RyaW5nX21lc3NhZ2UpOworCisgIHNldHZi
dWYoc3RkaW4sIE5VTEwsIF9JT05CRiwgMCk7CiAgIH0KIAogLyogTG9vcCBmb3Igc2V2ZXJhbCBt
ZXNzYWdlcyB3aGVuIHJlYWRpbmcgU01UUCBpbnB1dC4gSWYgd2UgZm9yayBhbnkgY2hpbGQKQEAg
LTUzOTgsMTUgKzU2NDQsMTUgQEAKIAogaWYgKCFmLnN5bmNocm9ub3VzX2RlbGl2ZXJ5KQogICB7
Ci0gICNpZmRlZiBTQV9OT0NMRFdBSVQKKyNpZmRlZiBTQV9OT0NMRFdBSVQKICAgc3RydWN0IHNp
Z2FjdGlvbiBhY3Q7CiAgIGFjdC5zYV9oYW5kbGVyID0gU0lHX0lHTjsKICAgc2lnZW1wdHlzZXQo
JihhY3Quc2FfbWFzaykpOwogICBhY3Quc2FfZmxhZ3MgPSBTQV9OT0NMRFdBSVQ7CiAgIHNpZ2Fj
dGlvbihTSUdDSExELCAmYWN0LCBOVUxMKTsKLSAgI2Vsc2UKKyNlbHNlCiAgIHNpZ25hbChTSUdD
SExELCBTSUdfSUdOKTsKLSAgI2VuZGlmCisjZW5kaWYKICAgfQogCiAvKiBTYXZlIHRoZSBjdXJy
ZW50IHN0b3JlIHBvb2wgcG9pbnQsIGZvciByZXNldHRpbmcgYXQgdGhlIHN0YXJ0IG9mCkBAIC01
NDE4LDcgKzU2NjQsNyBAQAogbWVzc2FnZXMgdG8gYmUgcmVhZCAoU01UUCBpbnB1dCksIG9yIEZB
TFNFIG90aGVyd2lzZSAobm90IFNNVFAsIG9yIFNNVFAgY2hhbm5lbAogY29sbGFwc2VkKS4gKi8K
IAotd2hpbGUgKG1vcmUpCitmb3IgKEJPT0wgbW9yZSA9IFRSVUU7IG1vcmU7ICkKICAgewogICBy
bWFyayByZXNldF9wb2ludCA9IHN0b3JlX21hcmsoKTsKICAgbWVzc2FnZV9pZFswXSA9IDA7CkBA
IC01NDYwLDEwICs1NzA2LDEwIEBACiAgICAgICAvKiBOb3cgZ2V0IHRoZSBkYXRhIGZvciB0aGUg
bWVzc2FnZSAqLwogCiAgICAgICBtb3JlID0gcmVjZWl2ZV9tc2coZXh0cmFjdF9yZWNpcGllbnRz
KTsKLSAgICAgIGlmIChtZXNzYWdlX2lkWzBdID09IDApCisgICAgICBpZiAoIW1lc3NhZ2VfaWRb
MF0pCiAgICAgICAgIHsKIAljYW5jZWxfY3V0dGhyb3VnaF9jb25uZWN0aW9uKFRSVUUsIFVTInJl
Y2VpdmUgZHJvcHBlZCIpOwotICAgICAgICBpZiAobW9yZSkgZ290byBtb3JlbG9vcDsKKyAgICAg
ICAgaWYgKG1vcmUpIGdvdG8gTU9SRUxPT1A7CiAgICAgICAgIHNtdHBfbG9nX25vX21haWwoKTsg
ICAgICAgICAgICAgICAvKiBMb2cgbm8gbWFpbCBpZiBjb25maWd1cmVkICovCiAgICAgICAgIGV4
aW1fZXhpdChFWElUX0ZBSUxVUkUpOwogICAgICAgICB9CkBAIC01NTA1LDExICs1NzUxLDEzIEBA
CiAgICAgICB1c2NoYXIgKiBlcnJtZXNzOwogICAgICAgLyogVGhlcmUgY2FuIGJlIG11bHRpcGxl
IGFkZHJlc3Nlcywgc28gRVhJTV9ESVNQTEFZTUFJTF9NQVggKHR1bmVkIGZvciAxKSBpcyB0b28g
c2hvcnQuCiAgICAgICAgKiBXZSdsbCBzdGlsbCB3YW50IHRvIGNhcCBpdCB0byBzb21ldGhpbmcs
IGp1c3QgaW4gY2FzZS4gKi8KLSAgICAgIHVzY2hhciAqIHMgPSBzdHJpbmdfY29weV90YWludChl
eGltX3N0cl9mYWlsX3Rvb2xvbmcobGlzdFtpXSwgQklHX0JVRkZFUl9TSVpFLCAiYWRkcmVzcyBh
cmd1bWVudCIpLCBUUlVFKTsKKyAgICAgIHVzY2hhciAqIHMgPSBzdHJpbmdfY29weV90YWludCgK
KwlleGltX3N0cl9mYWlsX3Rvb2xvbmcobGlzdFtpXSwgQklHX0JVRkZFUl9TSVpFLCAiYWRkcmVz
cyBhcmd1bWVudCIpLAorCUdFVF9UQUlOVEVEKTsKIAogICAgICAgLyogTG9vcCBmb3IgZWFjaCBj
b21tYS1zZXBhcmF0ZWQgYWRkcmVzcyAqLwogCi0gICAgICB3aGlsZSAoKnMgIT0gMCkKKyAgICAg
IHdoaWxlICgqcykKICAgICAgICAgewogICAgICAgICBCT09MIGZpbmlzaGVkID0gRkFMU0U7CiAg
ICAgICAgIHVzY2hhciAqcmVjaXBpZW50OwpAQCAtNTU3MSw3ICs1ODE5LDcgQEAKICAgICAgICAg
ICAgICAgICBlcnJvcnNfc2VuZGVyX3JjIDogRVhJVF9GQUlMVVJFOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgIHJlY2VpdmVfYWRkX3JlY2lwaWVudChzdHJpbmdfY29weV90YWludChyZWNpcGll
bnQsIFRSVUUpLCAtMSk7CisgICAgICAgIHJlY2VpdmVfYWRkX3JlY2lwaWVudChzdHJpbmdfY29w
eV90YWludChyZWNpcGllbnQsIEdFVF9UQUlOVEVEKSwgLTEpOwogICAgICAgICBzID0gc3M7CiAg
ICAgICAgIGlmICghZmluaXNoZWQpCiAgICAgICAgICAgd2hpbGUgKCooKytzKSAhPSAwICYmICgq
cyA9PSAnLCcgfHwgaXNzcGFjZSgqcykpKTsKQEAgLTU2MTAsMTMgKzU4NTgsOCBAQAogICAgIHRo
ZSBmaWxlIGNvcHkuICovCiAKICAgICBpZiAoIXJlY2VpdmVfdGltZW91dCkKLSAgICAgIHsKLSAg
ICAgIHN0cnVjdCB0aW1ldmFsIHQgPSB7IC50dl9zZWMgPSAzMCo2MCwgLnR2X3VzZWMgPSAwIH07
CS8qIDMwIG1pbnV0ZXMgKi8KLSAgICAgIGZkX3NldCByOwotCi0gICAgICBGRF9aRVJPKCZyKTsg
RkRfU0VUKDAsICZyKTsKLSAgICAgIGlmIChzZWxlY3QoMSwgJnIsIE5VTEwsIE5VTEwsICZ0KSA9
PSAwKSBtYWlubG9nX2Nsb3NlKCk7Ci0gICAgICB9CisgICAgICBpZiAocG9sbF9vbmVfZmQoMCwg
UE9MTElOLCAzMCo2MCoxMDAwKSA9PSAwKQkvKiAzMCBtaW51dGVzICovCisJbWFpbmxvZ19jbG9z
ZSgpOwogCiAgICAgLyogUmVhZCB0aGUgZGF0YSBmb3IgdGhlIG1lc3NhZ2UuIElmIGZpbHRlcl90
ZXN0IGlzIG5vdCBGVEVTVF9OT05FLCB0aGlzCiAgICAgd2lsbCBqdXN0IHJlYWQgdGhlIGhlYWRl
cnMgZm9yIHRoZSBtZXNzYWdlLCBhbmQgbm90IHdyaXRlIGFueXRoaW5nIG9udG8gdGhlCkBAIC01
NjI5LDcgKzU4NzIsNyBAQAogICAgIGZvciByZWFsOyB3aGVuIHJlYWRpbmcgdGhlIGhlYWRlcnMg
b2YgYSBtZXNzYWdlIGZvciBmaWx0ZXIgdGVzdGluZywKICAgICBpdCBpcyBUUlVFIGlmIHRoZSBo
ZWFkZXJzIHdlcmUgdGVybWluYXRlZCBieSAnLicgYW5kIEZBTFNFIG90aGVyd2lzZS4gKi8KIAot
ICAgIGlmIChtZXNzYWdlX2lkWzBdID09IDApIGV4aW1fZXhpdChFWElUX0ZBSUxVUkUpOworICAg
IGlmICghbWVzc2FnZV9pZFswXSkgZXhpbV9leGl0KEVYSVRfRkFJTFVSRSk7CiAgICAgfSAgLyog
Tm9uLVNNVFAgbWVzc2FnZSByZWNlcHRpb24gKi8KIAogICAvKiBJZiB0aGlzIGlzIGEgZmlsdGVy
IHRlc3RpbmcgcnVuLCB0aGVyZSBhcmUgaGVhZGVycyBpbiBzdG9yZSwgYnV0CkBAIC01ODIyLDEx
ICs2MDY1LDExIEBACiAgIGZpbmlzaGVkIHN1YnByb2Nlc3NlcyBoZXJlLCBpbiBjYXNlIHRoZXJl
IGFyZSBsb3RzIG9mIG1lc3NhZ2VzIGNvbWluZyBpbgogICBmcm9tIHRoZSBzYW1lIHNvdXJjZS4g
Ki8KIAotICAjaWZuZGVmIFNJR19JR05fV09SS1MKKyNpZm5kZWYgU0lHX0lHTl9XT1JLUwogICB3
aGlsZSAod2FpdHBpZCgtMSwgTlVMTCwgV05PSEFORykgPiAwKTsKLSAgI2VuZGlmCisjZW5kaWYK
IAotbW9yZWxvb3A6CitNT1JFTE9PUDoKICAgcmV0dXJuX3BhdGggPSBzZW5kZXJfYWRkcmVzcyA9
IE5VTEw7CiAgIGF1dGhlbnRpY2F0ZWRfc2VuZGVyID0gTlVMTDsKICAgZGVsaXZlcl9sb2NhbHBh
cnRfb3JpZyA9IE5VTEw7CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvZXhpbV9kYm1idWlsZC5jIGV4
aW0vc3JjL2V4aW1fZGJtYnVpbGQuYwotLS0gZXhpbS5vcmlnL3NyYy9leGltX2RibWJ1aWxkLmMJ
MjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2V4aW1fZGJt
YnVpbGQuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4ICsyLDgg
QEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBD
b3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBDb3B5
cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBDb3B5
cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBO
T1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIApAQCAt
MzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiZXhpbS5oIgogCi11c2NoYXIgKiBzcG9vbF9kaXJl
Y3RvcnkgPSBOVUxMOwkvKiBkdW1teSBmb3IgZGJzdHVmZi5oICovCit1c2NoYXIgKiBzcG9vbF9k
aXJlY3RvcnkgPSBOVUxMOwkvKiBkdW1teSBmb3IgaGludHNkYi5oICovCiAKIC8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCiAJCQkJCS8qIGR1bW1pZXMgbmVlZGVkIGJ5IFNvbGFyaXMgYnVpbGQgKi8K
QEAgLTQyLDEwICs0MiwxMCBAQAogcmVhZGNvbmZfcHJpbnR0aW1lKGludCB0KQogeyByZXR1cm4g
TlVMTDsgfQogdm9pZCAqCi1zdG9yZV9nZXRfMyhpbnQgc2l6ZSwgQk9PTCB0YWludGVkLCBjb25z
dCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVudW1iZXIpCitzdG9yZV9nZXRfMyhpbnQgc2l6ZSwg
Y29uc3Qgdm9pZCAqIHByb3RvX21lbSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbnVt
YmVyKQogeyByZXR1cm4gTlVMTDsgfQogdm9pZCAqKgotc3RvcmVfcmVzZXRfMyh2b2lkICoqcHRy
LCBpbnQgcG9vbCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbnVtYmVyKQorc3RvcmVf
cmVzZXRfMyh2b2lkICoqcHRyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVudW1iZXIp
CiB7IHJldHVybiBOVUxMOyB9CiB2b2lkCiBzdG9yZV9yZWxlYXNlX2Fib3ZlXzModm9pZCAqcHRy
LCBjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZW51bWJlcikKQEAgLTcwLDYgKzcwLDE2IEBACiB1
bnNpZ25lZCBpbnQJCWxvZ19zZWxlY3RvclsxXTsKIHVzY2hhciAqCQlxdWV1ZV9uYW1lOwogQk9P
TAkJCXNwbGl0X3Nwb29sX2RpcmVjdG9yeTsKKworCisvKiBUaGVzZSBpbnRyb2R1Y2VkIGJ5IHRo
ZSB0YWludHdhcm4gaGFuZGxpbmcgKi8KK3JtYXJrCitzdG9yZV9tYXJrXzMoY29uc3QgY2hhciAq
ZnVuYywgaW50IGxpbmVudW1iZXIpCit7IHJldHVybiBOVUxMOyB9CisjaWZkZWYgQUxMT1dfSU5T
RUNVUkVfVEFJTlRFRF9EQVRBCitCT09MICAgIGFsbG93X2luc2VjdXJlX3RhaW50ZWRfZGF0YTsK
KyNlbmRpZgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKQEAgLTk2LDI2ICsxMDYsNiBA
QAogI2VuZGlmIC8qIFNUUkVSUk9SX0ZST01fRVJSTElTVCAqLwogCiAKLS8qIEZvciBCZXJrZWxl
eSBEQiA+PSAyLCB3ZSBjYW4gZGVmaW5lIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGluIGNhc2Ug
b2YgREIKLWVycm9ycy4gVGhpcyBzaG91bGQgaGVscCB3aXRoIGRlYnVnZ2luZyBzdHJhbmdlIERC
IHByb2JsZW1zLCBlLmcuIGdldHRpbmcgIkZpbGUKLWV4aXN0cyIgd2hlbiB5b3UgdHJ5IHRvIG9w
ZW4gYSBkYiBmaWxlLiBUaGUgQVBJIGNoYW5nZWQgYXQgcmVsZWFzZSA0LjMuICovCi0KLSNpZiBk
ZWZpbmVkKFVTRV9EQikgJiYgZGVmaW5lZChEQl9WRVJTSU9OX1NUUklORykKLXZvaWQKLSMgaWYg
REJfVkVSU0lPTl9NQUpPUiA+IDQgfHwgKERCX1ZFUlNJT05fTUFKT1IgPT0gNCAmJiBEQl9WRVJT
SU9OX01JTk9SID49IDMpCi1kYmZuX2JkYl9lcnJvcl9jYWxsYmFjayhjb25zdCBEQl9FTlYgKmRi
ZW52LCBjb25zdCBjaGFyICpwZngsIGNvbnN0IGNoYXIgKm1zZykKLXsKLWRiZW52ID0gZGJlbnY7
Ci0jIGVsc2UKLWRiZm5fYmRiX2Vycm9yX2NhbGxiYWNrKGNvbnN0IGNoYXIgKnBmeCwgY2hhciAq
bXNnKQotewotIyBlbmRpZgotcGZ4ID0gcGZ4OwotcHJpbnRmKCJCZXJrZWxleSBEQiBlcnJvcjog
JXNcbiIsIG1zZyk7Ci19Ci0jZW5kaWYKLQotCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgIEludGVycHJldCBlc2NhcGUgc2Vx
dWVuY2UgICAgICAgICAgICAgKgpAQCAtMjU2LDkgKzI0Niw3IEBACiAvKiBJdCBpcyBhcHBhcmVu
dGx5IG5lY2Vzc2FyeSB0byBvcGVuIHdpdGggT19SRFdSIGZvciB0aGlzIHRvIHdvcmsKIHdpdGgg
Z2RibS0xLjcuMywgdGhvdWdoIG5vIHJlYWRpbmcgaXMgYWN0dWFsbHkgZ29pbmcgdG8gYmUgZG9u
ZS4gKi8KIAotRVhJTV9EQk9QRU4odGVtcF9kYm1uYW1lLCBkaXJuYW1lLCBPX1JEV1J8T19DUkVB
VHxPX0VYQ0wsIDA2NDQsICZkKTsKLQotaWYgKGQgPT0gTlVMTCkKK2lmICghKGQgPSBleGltX2Ri
b3Blbih0ZW1wX2RibW5hbWUsIGRpcm5hbWUsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTCwgMDY0NCkp
KQogICB7CiAgIHByaW50ZigiZXhpbV9kYm1idWlsZDogdW5hYmxlIHRvIGNyZWF0ZSAlczogJXNc
biIsIHRlbXBfZGJtbmFtZSwKICAgICBzdHJlcnJvcihlcnJubykpOwpAQCAtMzM3LDExICszMjUs
MTEgQEAKIAogICAgIGlmIChzdGFydGVkKQogICAgICAgewotICAgICAgRVhJTV9EQVRVTV9JTklU
KGNvbnRlbnQpOwotICAgICAgRVhJTV9EQVRVTV9EQVRBKGNvbnRlbnQpID0gQ1MgYnVmZmVyOwot
ICAgICAgRVhJTV9EQVRVTV9TSVpFKGNvbnRlbnQpID0gYnB0ciAtIGJ1ZmZlciArIGFkZF96ZXJv
OworICAgICAgZXhpbV9kYXR1bV9pbml0KCZjb250ZW50KTsKKyAgICAgIGV4aW1fZGF0dW1fZGF0
YV9zZXQoJmNvbnRlbnQsIGJ1ZmZlcik7CisgICAgICBleGltX2RhdHVtX3NpemVfc2V0KCZjb250
ZW50LCBicHRyIC0gYnVmZmVyICsgYWRkX3plcm8pOwogCi0gICAgICBzd2l0Y2gocmMgPSBFWElN
X0RCUFVUQihkLCBrZXksIGNvbnRlbnQpKQorICAgICAgc3dpdGNoKHJjID0gZXhpbV9kYnB1dGIo
ZCwgJmtleSwgJmNvbnRlbnQpKQogICAgICAgICB7CiAgICAgICAgIGNhc2UgRVhJTV9EQlBVVEJf
T0s6CiAJICBjb3VudCsrOwpAQCAtMzUxLDcgKzMzOSw3IEBACiAJICBpZiAod2FybikgZnByaW50
ZihzdGRlcnIsICIqKiBEdXBsaWNhdGUga2V5IFwiJXNcIlxuIiwga2V5YnVmZmVyKTsKIAkgIGR1
cGNvdW50Kys7CiAJICBpZihkdXBlcnIpIHlpZWxkID0gMTsKLQkgIGlmIChsYXN0ZHVwKSBFWElN
X0RCUFVUKGQsIGtleSwgY29udGVudCk7CisJICBpZiAobGFzdGR1cCkgZXhpbV9kYnB1dChkLCAm
a2V5LCAmY29udGVudCk7CiAJICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OgpAQCAtMzY0LDgg
KzM1Miw4IEBACiAgICAgICBicHRyID0gYnVmZmVyOwogICAgICAgfQogCi0gICAgRVhJTV9EQVRV
TV9JTklUKGtleSk7Ci0gICAgRVhJTV9EQVRVTV9EQVRBKGtleSkgPSBDUyBrZXlidWZmZXI7Cisg
ICAgZXhpbV9kYXR1bV9pbml0KCZrZXkpOworICAgIGV4aW1fZGF0dW1fZGF0YV9zZXQoJmtleSwg
a2V5YnVmZmVyKTsKIAogICAgIC8qIERlYWwgd2l0aCBxdW90ZWQga2V5cy4gRXNjYXBlIHNlcXVl
bmNlcyBhbHdheXMgbWFrZSBvbmUgY2hhcmFjdGVyCiAgICAgb3V0IG9mIHNldmVyYWwsIHNvIHdl
IGNhbiByZS1idWlsZCBpbiBwbGFjZS4gKi8KQEAgLTM4MiwxNiArMzcwLDE2IEBACiAgICAgICAg
IHMrKzsKICAgICAgICAgfQogICAgICAgaWYgKCpzICE9IDApIHMrKzsgICAgICAgICAgICAgICAv
KiBQYXN0IHRlcm1pbmF0aW5nICIgKi8KLSAgICAgIEVYSU1fREFUVU1fU0laRShrZXkpID0gdCAt
IGtleXN0YXJ0ICsgYWRkX3plcm87CisgICAgICBleGltX2RhdHVtX3NpemVfc2V0KCZrZXksIHQg
LSBrZXlzdGFydCArIGFkZF96ZXJvKTsKICAgICAgIH0KICAgICBlbHNlCiAgICAgICB7CiAgICAg
ICBrZXlzdGFydCA9IHM7CiAgICAgICB3aGlsZSAoKnMgIT0gMCAmJiAqcyAhPSAnOicgJiYgIWlz
c3BhY2UoKnMpKSBzKys7Ci0gICAgICBFWElNX0RBVFVNX1NJWkUoa2V5KSA9IHMgLSBrZXlzdGFy
dCArIGFkZF96ZXJvOworICAgICAgZXhpbV9kYXR1bV9zaXplX3NldCgma2V5LCBzIC0ga2V5c3Rh
cnQgKyBhZGRfemVybyk7CiAgICAgICB9CiAKLSAgICBpZiAoRVhJTV9EQVRVTV9TSVpFKGtleSkg
PiAyNTYpCisgICAgaWYgKGV4aW1fZGF0dW1fc2l6ZV9nZXQoJmtleSkgPiAyNTYpCiAgICAgICB7
CiAgICAgICBwcmludGYoIktleXMgbG9uZ2VyIHRoYW4gMjU1IGNoYXJhY3RlcnMgY2Fubm90IGJl
IGhhbmRsZWRcbiIpOwogICAgICAgc3RhcnRlZCA9IDA7CkBAIC00MDAsMTAgKzM4OCwxMCBAQAog
ICAgICAgfQogCiAgICAgaWYgKGxvd2VyY2FzZSkKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBFWElN
X0RBVFVNX1NJWkUoa2V5KSAtIGFkZF96ZXJvOyBpKyspCisgICAgICBmb3IgKGkgPSAwOyBpIDwg
ZXhpbV9kYXR1bV9zaXplX2dldCgma2V5KSAtIGFkZF96ZXJvOyBpKyspCiAgICAgICAgIGtleWJ1
ZmZlcltpXSA9IHRvbG93ZXIoa2V5c3RhcnRbaV0pOwogICAgIGVsc2UKLSAgICAgIGZvciAoaSA9
IDA7IGkgPCBFWElNX0RBVFVNX1NJWkUoa2V5KSAtIGFkZF96ZXJvOyBpKyspCisgICAgICBmb3Ig
KGkgPSAwOyBpIDwgZXhpbV9kYXR1bV9zaXplX2dldCgma2V5KSAtIGFkZF96ZXJvOyBpKyspCiAg
ICAgICAgIGtleWJ1ZmZlcltpXSA9IGtleXN0YXJ0W2ldOwogCiAgICAga2V5YnVmZmVyW2ldID0g
MDsKQEAgLTQyNywxMSArNDE1LDExIEBACiBpZiAoc3RhcnRlZCkKICAgewogICBpbnQgcmM7Ci0g
IEVYSU1fREFUVU1fSU5JVChjb250ZW50KTsKLSAgRVhJTV9EQVRVTV9EQVRBKGNvbnRlbnQpID0g
Q1MgYnVmZmVyOwotICBFWElNX0RBVFVNX1NJWkUoY29udGVudCkgPSBicHRyIC0gYnVmZmVyICsg
YWRkX3plcm87CisgIGV4aW1fZGF0dW1faW5pdCgmY29udGVudCk7CisgIGV4aW1fZGF0dW1fZGF0
YV9zZXQoJmNvbnRlbnQsIGJ1ZmZlcik7CisgIGV4aW1fZGF0dW1fc2l6ZV9zZXQoJmNvbnRlbnQs
IGJwdHIgLSBidWZmZXIgKyBhZGRfemVybyk7CiAKLSAgc3dpdGNoKHJjID0gRVhJTV9EQlBVVEIo
ZCwga2V5LCBjb250ZW50KSkKKyAgc3dpdGNoKHJjID0gZXhpbV9kYnB1dGIoZCwgJmtleSwgJmNv
bnRlbnQpKQogICAgIHsKICAgICBjYXNlIEVYSU1fREJQVVRCX09LOgogICAgIGNvdW50Kys7CkBA
IC00NDEsNyArNDI5LDcgQEAKICAgICBpZiAod2FybikgZnByaW50ZihzdGRlcnIsICIqKiBEdXBs
aWNhdGUga2V5IFwiJXNcIlxuIiwga2V5YnVmZmVyKTsKICAgICBkdXBjb3VudCsrOwogICAgIGlm
IChkdXBlcnIpIHlpZWxkID0gMTsKLSAgICBpZiAobGFzdGR1cCkgRVhJTV9EQlBVVChkLCBrZXks
IGNvbnRlbnQpOworICAgIGlmIChsYXN0ZHVwKSBleGltX2RicHV0KGQsICZrZXksICZjb250ZW50
KTsKICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CkBAIC00NTYsNyArNDQ0LDcgQEAKIAogVElE
WVVQOgogCi1FWElNX0RCQ0xPU0UoZCk7CitleGltX2RiY2xvc2UoZCk7CiAodm9pZClmY2xvc2Uo
Zik7CiAKIC8qIElmIHN1Y2Nlc3NmdWwsIG91dHB1dCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgYW5k
IHJlbmFtZSB0aGUgdGVtcG9yYXJ5CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvZXhpbV9kYnV0aWwu
YyBleGltL3NyYy9leGltX2RidXRpbC5jCi0tLSBleGltLm9yaWcvc3JjL2V4aW1fZGJ1dGlsLmMJ
MjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2V4aW1fZGJ1
dGlsLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBA
CiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29w
eXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJp
Z2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJp
Z2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9U
SUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAKQEAgLTE3
LDExICsxNywxMyBAQAogSW4gYWxsIGNhc2VzLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIG5h
bWUgb2YgdGhlIHNwb29sIGRpcmVjdG9yeS4gVGhlIHNlY29uZAogYXJndW1lbnQgaXMgdGhlIG5h
bWUgb2YgdGhlIGRhdGFiYXNlIGZpbGUuIFRoZSBhdmFpbGFibGUgbmFtZXMgYXJlOgogCi0gIHJl
dHJ5OiAgICAgIHJldHJ5IGRlbGl2ZXJ5IGluZm9ybWF0aW9uCi0gIG1pc2M6ICAgICAgIG1pc2Nl
bGxhbmVvdXMgaGludHMgZGF0YQotICB3YWl0LTx0PjogICBtZXNzYWdlIHdhaXRpbmcgaW5mb3Jt
YXRpb247IDx0PiBpcyBhIHRyYW5zcG9ydCBuYW1lCi0gIGNhbGxvdXQ6ICAgIGNhbGxvdXQgdmVy
aWZpY2F0aW9uIGNhY2hlCi0gIHRsczoJICAgICAgVExTIHNlc3Npb24gcmVzdW1wdGlvbiBjYWNo
ZQorICBjYWxsb3V0OgljYWxsb3V0IHZlcmlmaWNhdGlvbiBjYWNoZQorICBtaXNjOgkJbWlzY2Vs
bGFuZW91cyBoaW50cyBkYXRhCisgIHJhdGVsaW1pdDoJcmVjb3JkIGZvciBBQ0wgInJhdGVsaW1p
dCIgY29uZGl0aW9uCisgIHJldHJ5OglldHJ5IGRlbGl2ZXJ5IGluZm9ybWF0aW9uCisgIHNlZW46
CQlpbWVzdGFtcCByZWNvcmRzIGZvciBBQ0wgInNlZW4iIGNvbmRpdGlvbgorICB0bHM6CQlUTFMg
c2Vzc2lvbiByZXN1bXB0aW9uIGNhY2hlCisgIHdhaXQtPHQ+OgltZXNzYWdlIHdhaXRpbmcgaW5m
b3JtYXRpb247IDx0PiBpcyBhIHRyYW5zcG9ydCBuYW1lCiAKIFRoZXJlIGFyZSBhIG51bWJlciBv
ZiBjb21tb24gc3Vicm91dGluZXMsIGZvbGxvd2VkIGJ5IHRocmVlIG1haW4gcHJvZ3JhbXMsCiB3
aG9zZSBpbmNsdXNpb24gaXMgY29udHJvbGxlZCBieSAtRCBvbiB0aGUgY29tcGlsYXRpb24gY29t
bWFuZC4gKi8KQEAgLTM4LDEyICs0MCwxNiBAQAogI2RlZmluZSB0eXBlX2NhbGxvdXQgICA0CiAj
ZGVmaW5lIHR5cGVfcmF0ZWxpbWl0IDUKICNkZWZpbmUgdHlwZV90bHMgICAgICAgNgorI2RlZmlu
ZSB0eXBlX3NlZW4gICAgICA3CiAKIAogLyogVGhpcyBpcyB1c2VkIGJ5IG91ciBjdXQtZG93biBk
YmZuX29wZW4oKS4gKi8KIAogdXNjaGFyICpzcG9vbF9kaXJlY3Rvcnk7CiAKK0JPT0wga2V5b25s
eSA9IEZBTFNFOworQk9PTCB1dGMgPSBGQUxTRTsKKwogCiAvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LwogICAgICAgLyogZHVtbWllcyBuZWVkZWQgYnkgU29sYXJpcyBidWlsZCAqLwpAQCAtNjksMzIg
Kzc1LDE0IEBACiB1bnNpZ25lZCBpbnQJCWxvZ19zZWxlY3RvclsxXTsKIHVzY2hhciAqCQlxdWV1
ZV9uYW1lOwogQk9PTAkJCXNwbGl0X3Nwb29sX2RpcmVjdG9yeTsKLS8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKLSogICAgICAgICBCZXJrZWxleSBEQiBlcnJvciBjYWxsYmFjayAgICAgICAgICAgICAq
Ci0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0v
KiBGb3IgQmVya2VsZXkgREIgPj0gMiwgd2UgY2FuIGRlZmluZSBhIGZ1bmN0aW9uIHRvIGJlIGNh
bGxlZCBpbiBjYXNlIG9mIERCCi1lcnJvcnMuIFRoaXMgc2hvdWxkIGhlbHAgd2l0aCBkZWJ1Z2dp
bmcgc3RyYW5nZSBEQiBwcm9ibGVtcywgZS5nLiBnZXR0aW5nICJGaWxlCi1leGlzdHMiIHdoZW4g
eW91IHRyeSB0byBvcGVuIGEgZGIgZmlsZS4gVGhlIEFQSSBjaGFuZ2VkIGF0IHJlbGVhc2UgNC4z
LiAqLwogCi0jaWYgZGVmaW5lZChVU0VfREIpICYmIGRlZmluZWQoREJfVkVSU0lPTl9TVFJJTkcp
Ci12b2lkCi0jaWYgREJfVkVSU0lPTl9NQUpPUiA+IDQgfHwgKERCX1ZFUlNJT05fTUFKT1IgPT0g
NCAmJiBEQl9WRVJTSU9OX01JTk9SID49IDMpCi1kYmZuX2JkYl9lcnJvcl9jYWxsYmFjayhjb25z
dCBEQl9FTlYgKmRiZW52LCBjb25zdCBjaGFyICpwZngsIGNvbnN0IGNoYXIgKm1zZykKLXsKLWRi
ZW52ID0gZGJlbnY7Ci0jZWxzZQotZGJmbl9iZGJfZXJyb3JfY2FsbGJhY2soY29uc3QgY2hhciAq
cGZ4LCBjaGFyICptc2cpCi17Ci0jZW5kaWYKLXBmeCA9IHBmeDsKLXByaW50ZigiQmVya2VsZXkg
REIgZXJyb3I6ICVzXG4iLCBtc2cpOwotfQorLyogVGhlc2UgaW50cm9kdWNlZCBieSB0aGUgdGFp
bnR3YXJuIGhhbmRsaW5nICovCisjaWZkZWYgQUxMT1dfSU5TRUNVUkVfVEFJTlRFRF9EQVRBCitC
T09MICAgIGFsbG93X2luc2VjdXJlX3RhaW50ZWRfZGF0YTsKICNlbmRpZgogCisvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCkBAIC0xMDYsNyArOTQsNiBAQAogdm9pZAogc2lnYWxybV9oYW5kbGVyKGlu
dCBzaWcpCiB7Ci1zaWcgPSBzaWc7ICAgICAgICAgICAgLyogS2VlcCBwaWNreSBjb21waWxlcnMg
aGFwcHkgKi8KIHNpZ2Fscm1fc2VlbiA9IDE7CiB9CiAKQEAgLTEyMCw4ICsxMDcsOCBAQAogdXNh
Z2UodXNjaGFyICpuYW1lLCB1c2NoYXIgKm9wdGlvbnMpCiB7CiBwcmludGYoIlVzYWdlOiBleGlt
XyVzJXMgIDxzcG9vbC1kaXJlY3Rvcnk+IDxkYXRhYmFzZS1uYW1lPlxuIiwgbmFtZSwgb3B0aW9u
cyk7Ci1wcmludGYoIiAgPGRhdGFiYXNlLW5hbWU+ID0gcmV0cnkgfCBtaXNjIHwgd2FpdC08dHJh
bnNwb3J0LW5hbWU+IHwgY2FsbG91dCB8IHJhdGVsaW1pdCB8IHRsc1xuIik7Ci1leGl0KDEpOwor
cHJpbnRmKCIgIDxkYXRhYmFzZS1uYW1lPiA9IHJldHJ5IHwgbWlzYyB8IHdhaXQtPHRyYW5zcG9y
dC1uYW1lPiB8IGNhbGxvdXQgfCByYXRlbGltaXQgfCB0bHMgfCBzZWVuXG4iKTsKK2V4aXQoRVhJ
VF9GQUlMVVJFKTsKIH0KIAogCkBAIC0xMzYsMjAgKzEyMyw0MCBAQAogc3RhdGljIGludAogY2hl
Y2tfYXJncyhpbnQgYXJnYywgdXNjaGFyICoqYXJndiwgdXNjaGFyICpuYW1lLCB1c2NoYXIgKm9w
dGlvbnMpCiB7Ci1pZiAoYXJnYyA9PSAzKQordXNjaGFyICogYW5hbWUgPSBhcmd2W29wdGluZCAr
IDFdOworaWYgKGFyZ2MgLSBvcHRpbmQgPT0gMikKICAgewotICBpZiAoVXN0cmNtcChhcmd2WzJd
LCAicmV0cnkiKSA9PSAwKSByZXR1cm4gdHlwZV9yZXRyeTsKLSAgaWYgKFVzdHJjbXAoYXJndlsy
XSwgIm1pc2MiKSA9PSAwKSByZXR1cm4gdHlwZV9taXNjOwotICBpZiAoVXN0cm5jbXAoYXJndlsy
XSwgIndhaXQtIiwgNSkgPT0gMCkgcmV0dXJuIHR5cGVfd2FpdDsKLSAgaWYgKFVzdHJjbXAoYXJn
dlsyXSwgImNhbGxvdXQiKSA9PSAwKSByZXR1cm4gdHlwZV9jYWxsb3V0OwotICBpZiAoVXN0cmNt
cChhcmd2WzJdLCAicmF0ZWxpbWl0IikgPT0gMCkgcmV0dXJuIHR5cGVfcmF0ZWxpbWl0OwotICBp
ZiAoVXN0cmNtcChhcmd2WzJdLCAidGxzIikgPT0gMCkgcmV0dXJuIHR5cGVfdGxzOworICBpZiAo
VXN0cmNtcChhbmFtZSwgInJldHJ5IikgPT0gMCkJcmV0dXJuIHR5cGVfcmV0cnk7CisgIGlmIChV
c3RyY21wKGFuYW1lLCAibWlzYyIpID09IDApCXJldHVybiB0eXBlX21pc2M7CisgIGlmIChVc3Ry
bmNtcChhbmFtZSwgIndhaXQtIiwgNSkgPT0gMCkJcmV0dXJuIHR5cGVfd2FpdDsKKyAgaWYgKFVz
dHJjbXAoYW5hbWUsICJjYWxsb3V0IikgPT0gMCkJcmV0dXJuIHR5cGVfY2FsbG91dDsKKyAgaWYg
KFVzdHJjbXAoYW5hbWUsICJyYXRlbGltaXQiKSA9PSAwKQlyZXR1cm4gdHlwZV9yYXRlbGltaXQ7
CisgIGlmIChVc3RyY21wKGFuYW1lLCAidGxzIikgPT0gMCkJcmV0dXJuIHR5cGVfdGxzOworICBp
ZiAoVXN0cmNtcChhbmFtZSwgInNlZW4iKSA9PSAwKQlyZXR1cm4gdHlwZV9zZWVuOwogICB9CiB1
c2FnZShuYW1lLCBvcHRpb25zKTsKIHJldHVybiAtMTsgICAgICAgICAgICAgIC8qIE5ldmVyIG9i
ZXllZCAqLwogfQogCiAKK0ZVTkNfTUFZQkVfVU5VU0VECitzdGF0aWMgdm9pZAorb3B0aW9ucyhp
bnQgYXJnYywgdXNjaGFyICogYXJndltdLCB1c2NoYXIgKiBuYW1lLCBjb25zdCB1c2NoYXIgKiBv
cHRzKQoreworaW50IG9wdDsKKworb3B0ZXJyID0gMDsKK3doaWxlICgob3B0ID0gZ2V0b3B0KGFy
Z2MsIChjaGFyICogY29uc3QgKilhcmd2LCBDQ1Mgb3B0cykpICE9IC0xKQorICBzd2l0Y2ggKG9w
dCkKKyAgeworICBjYXNlICdrJzoJa2V5b25seSA9IFRSVUU7IGJyZWFrOworICBjYXNlICd6JzoJ
dXRjID0gVFJVRTsgYnJlYWs7CisgIGRlZmF1bHQ6CXVzYWdlKG5hbWUsIFVTIiBbLXpdIFsta10i
KTsKKyAgfQorfQorCisKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgogKiAgICAgICAgIEhhbmRsZSBhdHRlbXB0cyB0byB3cml0ZSB0aGUgbG9n
ICAgICAgICoKQEAgLTE3Nyw4ICsxODQsNiBAQAogdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFw
KTsKIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKIHZhX2VuZChhcCk7Ci1zZWxlY3RvciA9IHNlbGVj
dG9yOyAgICAgLyogS2VlcCBwaWNreSBjb21waWxlcnMgaGFwcHkgKi8KLWZsYWdzID0gZmxhZ3M7
CiB9CiAKIApAQCAtMTkyLDcgKzE5Nyw3IEBACiB1c2NoYXIgKgogcHJpbnRfdGltZSh0aW1lX3Qg
dCkKIHsKLXN0cnVjdCB0bSAqdG1zdHIgPSBsb2NhbHRpbWUoJnQpOworc3RydWN0IHRtICp0bXN0
ciA9IHV0YyA/IGdtdGltZSgmdCkgOiBsb2NhbHRpbWUoJnQpOwogVXN0cmZ0aW1lKHRpbWVfYnVm
ZmVyLCBzaXplb2YodGltZV9idWZmZXIpLCAiJWQtJWItJVkgJUg6JU06JVMiLCB0bXN0cik7CiBy
ZXR1cm4gdGltZV9idWZmZXI7CiB9CkBAIC0yMDYsOCArMjExLDggQEAKIHVzY2hhciAqCiBwcmlu
dF9jYWNoZShpbnQgdmFsdWUpCiB7Ci1yZXR1cm4gKHZhbHVlID09IGNjYWNoZV9hY2NlcHQpPyBV
UyJhY2NlcHQiIDoKLSAgICAgICAodmFsdWUgPT0gY2NhY2hlX3JlamVjdCk/IFVTInJlamVjdCIg
OgorcmV0dXJuIHZhbHVlID09IGNjYWNoZV9hY2NlcHQgPyBVUyJhY2NlcHQiIDoKKyAgICAgICB2
YWx1ZSA9PSBjY2FjaGVfcmVqZWN0ID8gVVMicmVqZWN0IiA6CiAgICAgICAgVVMidW5rbm93biI7
CiB9CiAKQEAgLTMzNyw3ICszNDIsNyBAQAogI2Vsc2UKIGZpbGVuYW1lID0gc3RyaW5nX3Nwcmlu
dGYoIiVzLyVzIiwgZGlybmFtZSwgbmFtZSk7CiAjZW5kaWYKLUVYSU1fREJPUEVOKGZpbGVuYW1l
LCBkaXJuYW1lLCBmbGFncywgMCwgJmRiYmxvY2stPmRicHRyKTsKK2RiYmxvY2stPmRicHRyID0g
ZXhpbV9kYm9wZW4oZmlsZW5hbWUsIGRpcm5hbWUsIGZsYWdzLCAwKTsKIAogaWYgKCFkYmJsb2Nr
LT5kYnB0cikKICAgewpAQCAtMzczLDcgKzM3OCw3IEBACiB2b2lkCiBkYmZuX2Nsb3NlKG9wZW5f
ZGIgKmRiYmxvY2spCiB7Ci1FWElNX0RCQ0xPU0UoZGJibG9jay0+ZGJwdHIpOworZXhpbV9kYmNs
b3NlKGRiYmxvY2stPmRicHRyKTsKICh2b2lkKWNsb3NlKGRiYmxvY2stPmxvY2tmZCk7CiB9CiAK
QEAgLTQwMywyNSArNDA4LDI1IEBACiB2b2lkICp5aWVsZDsKIEVYSU1fREFUVU0ga2V5X2RhdHVt
LCByZXN1bHRfZGF0dW07CiBpbnQga2xlbiA9IFVzdHJsZW4oa2V5KSArIDE7Ci11c2NoYXIgKiBr
ZXlfY29weSA9IHN0b3JlX2dldChrbGVuLCBpc190YWludGVkKGtleSkpOwordXNjaGFyICoga2V5
X2NvcHkgPSBzdG9yZV9nZXQoa2xlbiwga2V5KTsKIAogbWVtY3B5KGtleV9jb3B5LCBrZXksIGts
ZW4pOwogCi1FWElNX0RBVFVNX0lOSVQoa2V5X2RhdHVtKTsgICAgICAgICAvKiBTb21lIERCTSBs
aWJyYXJpZXMgcmVxdWlyZSB0aGUgZGF0dW0gKi8KLUVYSU1fREFUVU1fSU5JVChyZXN1bHRfZGF0
dW0pOyAgICAgIC8qIHRvIGJlIGNsZWFyZWQgYmVmb3JlIHVzZS4gKi8KLUVYSU1fREFUVU1fREFU
QShrZXlfZGF0dW0pID0gQ1Mga2V5X2NvcHk7Ci1FWElNX0RBVFVNX1NJWkUoa2V5X2RhdHVtKSA9
IGtsZW47CitleGltX2RhdHVtX2luaXQoJmtleV9kYXR1bSk7ICAgICAgICAgLyogU29tZSBEQk0g
bGlicmFyaWVzIHJlcXVpcmUgdGhlIGRhdHVtICovCitleGltX2RhdHVtX2luaXQoJnJlc3VsdF9k
YXR1bSk7ICAgICAgLyogdG8gYmUgY2xlYXJlZCBiZWZvcmUgdXNlLiAqLworZXhpbV9kYXR1bV9k
YXRhX3NldCgma2V5X2RhdHVtLCBrZXlfY29weSk7CitleGltX2RhdHVtX3NpemVfc2V0KCZrZXlf
ZGF0dW0sIGtsZW4pOwogCi1pZiAoIUVYSU1fREJHRVQoZGJibG9jay0+ZGJwdHIsIGtleV9kYXR1
bSwgcmVzdWx0X2RhdHVtKSkgcmV0dXJuIE5VTEw7CitpZiAoIWV4aW1fZGJnZXQoZGJibG9jay0+
ZGJwdHIsICZrZXlfZGF0dW0sICZyZXN1bHRfZGF0dW0pKSByZXR1cm4gTlVMTDsKIAogLyogQXNz
dW1lIGZvciBub3cgdGhhdCBhbnl0aGluZyBzdG9yZWQgY291bGQgaGF2ZSBiZWVuIHRhaW50ZWQu
IFByb3Blcmx5CiB3ZSBzaG91bGQgc3RvcmUgdGhlIHRhaW50IHN0YXR1cyBhbG9uZyB3aXRoIHRo
ZSBkYXRhLiAqLwogCi15aWVsZCA9IHN0b3JlX2dldChFWElNX0RBVFVNX1NJWkUocmVzdWx0X2Rh
dHVtKSwgVFJVRSk7Ci1tZW1jcHkoeWllbGQsIEVYSU1fREFUVU1fREFUQShyZXN1bHRfZGF0dW0p
LCBFWElNX0RBVFVNX1NJWkUocmVzdWx0X2RhdHVtKSk7Ci1pZiAobGVuZ3RoKSAqbGVuZ3RoID0g
RVhJTV9EQVRVTV9TSVpFKHJlc3VsdF9kYXR1bSk7Cit5aWVsZCA9IHN0b3JlX2dldChleGltX2Rh
dHVtX3NpemVfZ2V0KCZyZXN1bHRfZGF0dW0pLCBHRVRfVEFJTlRFRCk7CittZW1jcHkoeWllbGQs
IGV4aW1fZGF0dW1fZGF0YV9nZXQoJnJlc3VsdF9kYXR1bSksIGV4aW1fZGF0dW1fc2l6ZV9nZXQo
JnJlc3VsdF9kYXR1bSkpOworaWYgKGxlbmd0aCkgKmxlbmd0aCA9IGV4aW1fZGF0dW1fc2l6ZV9n
ZXQoJnJlc3VsdF9kYXR1bSk7CiAKLUVYSU1fREFUVU1fRlJFRShyZXN1bHRfZGF0dW0pOyAgICAv
KiBTb21lIERCTSBsaWJzIHJlcXVpcmUgZnJlZWluZyAqLworZXhpbV9kYXR1bV9mcmVlKCZyZXN1
bHRfZGF0dW0pOyAgICAvKiBTb21lIERCTSBsaWJzIHJlcXVpcmUgZnJlZWluZyAqLwogcmV0dXJu
IHlpZWxkOwogfQogCkBAIC00NTAsMTggKzQ1NSwxOCBAQAogRVhJTV9EQVRVTSBrZXlfZGF0dW0s
IHZhbHVlX2RhdHVtOwogZGJkYXRhX2dlbmVyaWMgKmdwdHIgPSAoZGJkYXRhX2dlbmVyaWMgKilw
dHI7CiBpbnQga2xlbiA9IFVzdHJsZW4oa2V5KSArIDE7Ci11c2NoYXIgKiBrZXlfY29weSA9IHN0
b3JlX2dldChrbGVuLCBpc190YWludGVkKGtleSkpOwordXNjaGFyICoga2V5X2NvcHkgPSBzdG9y
ZV9nZXQoa2xlbiwga2V5KTsKIAogbWVtY3B5KGtleV9jb3B5LCBrZXksIGtsZW4pOwogZ3B0ci0+
dGltZV9zdGFtcCA9IHRpbWUoTlVMTCk7CiAKLUVYSU1fREFUVU1fSU5JVChrZXlfZGF0dW0pOyAg
ICAgICAgIC8qIFNvbWUgREJNIGxpYnJhcmllcyByZXF1aXJlIHRoZSBkYXR1bSAqLwotRVhJTV9E
QVRVTV9JTklUKHZhbHVlX2RhdHVtKTsgICAgICAgLyogdG8gYmUgY2xlYXJlZCBiZWZvcmUgdXNl
LiAqLwotRVhJTV9EQVRVTV9EQVRBKGtleV9kYXR1bSkgPSBDUyBrZXlfY29weTsKLUVYSU1fREFU
VU1fU0laRShrZXlfZGF0dW0pID0ga2xlbjsKLUVYSU1fREFUVU1fREFUQSh2YWx1ZV9kYXR1bSkg
PSBDUyBwdHI7Ci1FWElNX0RBVFVNX1NJWkUodmFsdWVfZGF0dW0pID0gbGVuZ3RoOwotcmV0dXJu
IEVYSU1fREJQVVQoZGJibG9jay0+ZGJwdHIsIGtleV9kYXR1bSwgdmFsdWVfZGF0dW0pOworZXhp
bV9kYXR1bV9pbml0KCZrZXlfZGF0dW0pOyAgICAgICAgIC8qIFNvbWUgREJNIGxpYnJhcmllcyBy
ZXF1aXJlIHRoZSBkYXR1bSAqLworZXhpbV9kYXR1bV9pbml0KCZ2YWx1ZV9kYXR1bSk7ICAgICAg
IC8qIHRvIGJlIGNsZWFyZWQgYmVmb3JlIHVzZS4gKi8KK2V4aW1fZGF0dW1fZGF0YV9zZXQoJmtl
eV9kYXR1bSwga2V5X2NvcHkpOworZXhpbV9kYXR1bV9zaXplX3NldCgma2V5X2RhdHVtLCBrbGVu
KTsKK2V4aW1fZGF0dW1fZGF0YV9zZXQoJnZhbHVlX2RhdHVtLCBwdHIpOworZXhpbV9kYXR1bV9z
aXplX3NldCgmdmFsdWVfZGF0dW0sIGxlbmd0aCk7CityZXR1cm4gZXhpbV9kYnB1dChkYmJsb2Nr
LT5kYnB0ciwgJmtleV9kYXR1bSwgJnZhbHVlX2RhdHVtKTsKIH0KIAogCkBAIC00ODIsMTQgKzQ4
NywxNCBAQAogZGJmbl9kZWxldGUob3Blbl9kYiAqZGJibG9jaywgY29uc3QgdXNjaGFyICprZXkp
CiB7CiBpbnQga2xlbiA9IFVzdHJsZW4oa2V5KSArIDE7Ci11c2NoYXIgKiBrZXlfY29weSA9IHN0
b3JlX2dldChrbGVuLCBpc190YWludGVkKGtleSkpOwordXNjaGFyICoga2V5X2NvcHkgPSBzdG9y
ZV9nZXQoa2xlbiwga2V5KTsKK0VYSU1fREFUVU0ga2V5X2RhdHVtOwogCiBtZW1jcHkoa2V5X2Nv
cHksIGtleSwga2xlbik7Ci1FWElNX0RBVFVNIGtleV9kYXR1bTsKLUVYSU1fREFUVU1fSU5JVChr
ZXlfZGF0dW0pOyAgICAgICAgIC8qIFNvbWUgREJNIGxpYnJhcmllcyByZXF1aXJlIGNsZWFyaW5n
ICovCi1FWElNX0RBVFVNX0RBVEEoa2V5X2RhdHVtKSA9IENTIGtleV9jb3B5OwotRVhJTV9EQVRV
TV9TSVpFKGtleV9kYXR1bSkgPSBrbGVuOwotcmV0dXJuIEVYSU1fREJERUwoZGJibG9jay0+ZGJw
dHIsIGtleV9kYXR1bSk7CitleGltX2RhdHVtX2luaXQoJmtleV9kYXR1bSk7ICAgICAgICAgLyog
U29tZSBEQk0gbGlicmFyaWVzIHJlcXVpcmUgY2xlYXJpbmcgKi8KK2V4aW1fZGF0dW1fZGF0YV9z
ZXQoJmtleV9kYXR1bSwga2V5X2NvcHkpOworZXhpbV9kYXR1bV9zaXplX3NldCgma2V5X2RhdHVt
LCBrbGVuKTsKK3JldHVybiBleGltX2RiZGVsKGRiYmxvY2stPmRicHRyLCAma2V5X2RhdHVtKTsK
IH0KIAogI2VuZGlmICAvKiBFWElNX1RJRFlEQiB8fCBFWElNX0ZJWERCICovCkBAIC01MTgsMjEg
KzUyMywyMCBAQAogewogRVhJTV9EQVRVTSBrZXlfZGF0dW0sIHZhbHVlX2RhdHVtOwogdXNjaGFy
ICp5aWVsZDsKLXZhbHVlX2RhdHVtID0gdmFsdWVfZGF0dW07ICAgIC8qIGR1bW15OyBub3QgYWxs
IGRiIGxpYnJhcmllcyB1c2UgdGhpcyAqLwogCiAvKiBTb21lIGRibSByZXF1aXJlIGFuIGluaXRp
YWxpemF0aW9uICovCiAKLWlmIChzdGFydCkgRVhJTV9EQkNSRUFURV9DVVJTT1IoZGJibG9jay0+
ZGJwdHIsIGN1cnNvcik7CitpZiAoc3RhcnQpICpjdXJzb3IgPSBleGltX2RiY3JlYXRlX2N1cnNv
cihkYmJsb2NrLT5kYnB0cik7CiAKLUVYSU1fREFUVU1fSU5JVChrZXlfZGF0dW0pOyAgICAgICAg
IC8qIFNvbWUgREJNIGxpYnJhcmllcyByZXF1aXJlIHRoZSBkYXR1bSAqLwotRVhJTV9EQVRVTV9J
TklUKHZhbHVlX2RhdHVtKTsgICAgICAgLyogdG8gYmUgY2xlYXJlZCBiZWZvcmUgdXNlLiAqLwor
ZXhpbV9kYXR1bV9pbml0KCZrZXlfZGF0dW0pOyAgICAgICAgIC8qIFNvbWUgREJNIGxpYnJhcmll
cyByZXF1aXJlIHRoZSBkYXR1bSAqLworZXhpbV9kYXR1bV9pbml0KCZ2YWx1ZV9kYXR1bSk7ICAg
ICAgIC8qIHRvIGJlIGNsZWFyZWQgYmVmb3JlIHVzZS4gKi8KIAoteWllbGQgPSAoRVhJTV9EQlND
QU4oZGJibG9jay0+ZGJwdHIsIGtleV9kYXR1bSwgdmFsdWVfZGF0dW0sIHN0YXJ0LCAqY3Vyc29y
KSk/Ci0gIFVTIEVYSU1fREFUVU1fREFUQShrZXlfZGF0dW0pIDogTlVMTDsKK3lpZWxkID0gZXhp
bV9kYnNjYW4oZGJibG9jay0+ZGJwdHIsICZrZXlfZGF0dW0sICZ2YWx1ZV9kYXR1bSwgc3RhcnQs
ICpjdXJzb3IpCisgID8gVVMgZXhpbV9kYXR1bV9kYXRhX2dldCgma2V5X2RhdHVtKSA6IE5VTEw7
CiAKIC8qIFNvbWUgZGJtIHJlcXVpcmUgYSB0ZXJtaW5hdGlvbiAqLwogCi1pZiAoIXlpZWxkKSBF
WElNX0RCREVMRVRFX0NVUlNPUigqY3Vyc29yKTsKK2lmICgheWllbGQpIGV4aW1fZGJkZWxldGVf
Y3Vyc29yKCpjdXJzb3IpOwogcmV0dXJuIHlpZWxkOwogfQogI2VuZGlmICAvKiBFWElNX0RVTVBE
QiB8fCBFWElNX1RJRFlEQiAqLwpAQCAtNTU1LDExICs1NTksMTYgQEAKIHVzY2hhciAqKmFyZ3Yg
PSBVU1MgY2FyZ3Y7CiB1c2NoYXIga2V5YnVmZmVyWzEwMjRdOwogCitzdG9yZV9pbml0KCk7Citv
cHRpb25zKGFyZ2MsIGFyZ3YsIFVTImR1bXBkYiIsIFVTImt6Iik7CisKIC8qIENoZWNrIHRoZSBh
cmd1bWVudHMsIGFuZCBvcGVuIHRoZSBkYXRhYmFzZSAqLwogCi1kYmRhdGFfdHlwZSA9IGNoZWNr
X2FyZ3MoYXJnYywgYXJndiwgVVMiZHVtcGRiIiwgVVMiIik7Ci1zcG9vbF9kaXJlY3RvcnkgPSBh
cmd2WzFdOwotaWYgKCEoZGJtID0gZGJmbl9vcGVuKGFyZ3ZbMl0sIE9fUkRPTkxZLCAmZGJibG9j
aywgRkFMU0UsIFRSVUUpKSkKK2RiZGF0YV90eXBlID0gY2hlY2tfYXJncyhhcmdjLCBhcmd2LCBV
UyJkdW1wZGIiLCBVUyIgWy16XSBbLWtdIik7CithcmdjIC09IG9wdGluZDsgYXJndiArPSBvcHRp
bmQ7CitzcG9vbF9kaXJlY3RvcnkgPSBhcmd2WzBdOworCitpZiAoIShkYm0gPSBkYmZuX29wZW4o
YXJndlsxXSwgT19SRE9OTFksICZkYmJsb2NrLCBGQUxTRSwgVFJVRSkpKQogICBleGl0KDEpOwog
CiAvKiBTY2FuIHRoZSBmaWxlLCBmb3JtYXR0aW5nIHRoZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBl
bnRyeS4gTm90ZQpAQCAtNTc2LDYgKzU4NSw3IEBACiAgIGRiZGF0YV9yYXRlbGltaXQgKnJhdGVs
aW1pdDsKICAgZGJkYXRhX3JhdGVsaW1pdF91bmlxdWUgKnJhdGVfdW5pcXVlOwogICBkYmRhdGFf
dGxzX3Nlc3Npb24gKnNlc3Npb247CisgIGRiZGF0YV9zZWVuICpzZWVuOwogICBpbnQgY291bnRf
YmFkID0gMDsKICAgaW50IGxlbmd0aDsKICAgdXNjaGFyICp0OwpAQCAtNTkzLDEyICs2MDMsMTMg
QEAKICAgICB9CiAgIFVzdHJjcHkoa2V5YnVmZmVyLCBrZXkpOwogCi0gIGlmICghKHZhbHVlID0g
ZGJmbl9yZWFkX3dpdGhfbGVuZ3RoKGRibSwga2V5YnVmZmVyLCAmbGVuZ3RoKSkpCisgIGlmIChr
ZXlvbmx5KQorICAgIHByaW50ZigiICAlc1xuIiwga2V5YnVmZmVyKTsKKyAgZWxzZSBpZiAoISh2
YWx1ZSA9IGRiZm5fcmVhZF93aXRoX2xlbmd0aChkYm0sIGtleWJ1ZmZlciwgJmxlbmd0aCkpKQog
ICAgIGZwcmludGYoc3RkZXJyLCAiKioqKiBFbnRyeSBcIiVzXCIgd2FzIGluIHRoZSBrZXkgc2Nh
biwgYnV0IHRoZSByZWNvcmQgIgogICAgICAgICAgICAgICAgICAgICAid2FzIG5vdCBmb3VuZCBp
biB0aGUgZmlsZSAtIHNvbWV0aGluZyBpcyB3cm9uZyFcbiIsCiAgICAgICBDUyBrZXlidWZmZXIp
OwogICBlbHNlCi0gICAgewogICAgIC8qIE5vdGU6IGRvbid0IHVzZSBwcmludF90aW1lIG1vcmUg
dGhhbiBvbmNlIGluIG9uZSBzdGF0ZW1lbnQsIHNpbmNlCiAgICAgaXQgdXNlcyBhIHNpbmdsZSBi
dWZmZXIuICovCiAKQEAgLTcxNSw4ICs3MjYsMTIgQEAKIAlzZXNzaW9uID0gKGRiZGF0YV90bHNf
c2Vzc2lvbiAqKXZhbHVlOwogCXByaW50ZigiICAlcyAlLipzXG4iLCBrZXlidWZmZXIsIGxlbmd0
aCwgc2Vzc2lvbi0+c2Vzc2lvbik7CiAJYnJlYWs7CisKKyAgICAgIGNhc2UgdHlwZV9zZWVuOgor
CXNlZW4gPSAoZGJkYXRhX3NlZW4gKil2YWx1ZTsKKwlwcmludGYoIiVzXHQlc1xuIiwga2V5YnVm
ZmVyLCBwcmludF90aW1lKHNlZW4tPnRpbWVfc3RhbXApKTsKKwlicmVhazsKICAgICAgIH0KLSAg
ICB9CiAgIHN0b3JlX3Jlc2V0KHJlc2V0X3BvaW50KTsKICAgfQogCkBAIC03NjEsMjEgKzc3Niwy
OSBAQAogaXMgcmUtdXNlZC4gKi8KIAogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmNhcmd2
KQoraW50CittYWluKGludCBhcmdjLCBjaGFyICoqY2FyZ3YpCiB7CiBpbnQgZGJkYXRhX3R5cGU7
CiB1c2NoYXIgKiphcmd2ID0gVVNTIGNhcmd2OwogdXNjaGFyIGJ1ZmZlclsyNTZdOwogdXNjaGFy
IG5hbWVbMjU2XTsKIHJtYXJrIHJlc2V0X3BvaW50OwordXNjaGFyICogYW5hbWU7CiAKK3N0b3Jl
X2luaXQoKTsKK29wdGlvbnMoYXJnYywgYXJndiwgVVMiZml4ZGIiLCBVUyJ6Iik7CiBuYW1lWzBd
ID0gMDsgIC8qIE5vIG5hbWUgc2V0ICovCiAKIC8qIFNvcnQgb3V0IHRoZSBkYXRhYmFzZSB0eXBl
LCB2ZXJpZnkgd2hhdCB3ZSBhcmUgd29ya2luZyBvbiBhbmQgdGhlbiBwcm9jZXNzCiB1c2VyIHJl
cXVlc3RzICovCiAKLWRiZGF0YV90eXBlID0gY2hlY2tfYXJncyhhcmdjLCBhcmd2LCBVUyJmaXhk
YiIsIFVTIiIpOwotcHJpbnRmKCJNb2RpZnlpbmcgRXhpbSBoaW50cyBkYXRhYmFzZSAlcy9kYi8l
c1xuIiwgYXJndlsxXSwgYXJndlsyXSk7CitkYmRhdGFfdHlwZSA9IGNoZWNrX2FyZ3MoYXJnYywg
YXJndiwgVVMiZml4ZGIiLCBVUyIgWy16XSIpOworYXJnYyAtPSBvcHRpbmQ7IGFyZ3YgKz0gb3B0
aW5kOworc3Bvb2xfZGlyZWN0b3J5ID0gYXJndlswXTsKK2FuYW1lID0gYXJndlsxXTsKKworcHJp
bnRmKCJNb2RpZnlpbmcgRXhpbSBoaW50cyBkYXRhYmFzZSAlcy9kYi8lc1xuIiwgc3Bvb2xfZGly
ZWN0b3J5LCBhbmFtZSk7CiAKIGZvcig7IChyZXNldF9wb2ludCA9IHN0b3JlX21hcmsoKSk7IHN0
b3JlX3Jlc2V0KHJlc2V0X3BvaW50KSkKICAgewpAQCAtODIyLDkgKzg0NSw4IEBACiAgIGlmIChm
aWVsZFswXSAhPSAwKQogICAgIHsKICAgICBpbnQgdmVyaWZ5ID0gMTsKLSAgICBzcG9vbF9kaXJl
Y3RvcnkgPSBhcmd2WzFdOwogCi0gICAgaWYgKCEoZGJtID0gZGJmbl9vcGVuKGFyZ3ZbMl0sIE9f
UkRXUiwgJmRiYmxvY2ssIEZBTFNFLCBUUlVFKSkpCisgICAgaWYgKCEoZGJtID0gZGJmbl9vcGVu
KGFuYW1lLCBPX1JEV1IsICZkYmJsb2NrLCBGQUxTRSwgVFJVRSkpKQogICAgICAgY29udGludWU7
CiAKICAgICBpZiAoVXN0cmNtcChmaWVsZCwgImQiKSA9PSAwKQpAQCAtOTkzLDggKzEwMTUsNyBA
QAogCiAgIC8qIEhhbmRsZSBhIHJlYWQgcmVxdWVzdCwgb3IgdmVyaWZ5IGFmdGVyIGFuIHVwZGF0
ZS4gKi8KIAotICBzcG9vbF9kaXJlY3RvcnkgPSBhcmd2WzFdOwotICBpZiAoIShkYm0gPSBkYmZu
X29wZW4oYXJndlsyXSwgT19SRE9OTFksICZkYmJsb2NrLCBGQUxTRSwgVFJVRSkpKQorICBpZiAo
IShkYm0gPSBkYmZuX29wZW4oYW5hbWUsIE9fUkRPTkxZLCAmZGJibG9jaywgRkFMU0UsIFRSVUUp
KSkKICAgICBjb250aW51ZTsKIAogICBpZiAoIShyZWNvcmQgPSBkYmZuX3JlYWRfd2l0aF9sZW5n
dGgoZGJtLCBuYW1lLCAmb2xkbGVuZ3RoKSkpCkBAIC0xMTI0LDcgKzExNDUsOCBAQAogfSBrZXlf
aXRlbTsKIAogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmNhcmd2KQoraW50CittYWluKGlu
dCBhcmdjLCBjaGFyICoqY2FyZ3YpCiB7CiBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOwogaW50IG1heGtl
ZXAgPSAzMCAqIDI0ICogNjAgKiA2MDsKQEAgLTExMzgsNiArMTE2MCw4IEBACiB1c2NoYXIgYnVm
ZmVyWzI1Nl07CiB1c2NoYXIgKmtleTsKIAorc3RvcmVfaW5pdCgpOworCiAvKiBTY2FuIHRoZSBv
cHRpb25zICovCiAKIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCkBAIC0xMjAzLDcgKzEyMjcs
NyBAQAogICAgICBrZXk7CiAgICAgIGtleSA9IGRiZm5fc2NhbihkYm0sIEZBTFNFLCAmY3Vyc29y
KSkKICAgewotICBrZXlfaXRlbSAqayA9IHN0b3JlX2dldChzaXplb2Yoa2V5X2l0ZW0pICsgVXN0
cmxlbihrZXkpLCBpc190YWludGVkKGtleSkpOworICBrZXlfaXRlbSAqIGsgPSBzdG9yZV9nZXQo
c2l6ZW9mKGtleV9pdGVtKSArIFVzdHJsZW4oa2V5KSwga2V5KTsKICAgay0+bmV4dCA9IGtleWNo
YWluOwogICBrZXljaGFpbiA9IGs7CiAgIFVzdHJjcHkoay0+a2V5LCBrZXkpOwpkaWZmIC11ciBl
eGltLm9yaWcvc3JjL2V4aW0uaCBleGltL3NyYy9leGltLmgKLS0tIGV4aW0ub3JpZy9zcmMvZXhp
bS5oCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9leGlt
LmgJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsNiArMiw3IEBACiAq
ICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJp
Z2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0
IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwogLyogU2VlIHRoZSBm
aWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIApA
QCAtODcsNiArODgsMTMgQEAKICMgaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKIAorI2lmZGVm
IEVYSU1fSEFWRV9JTk9USUZZCisjIGluY2x1ZGUgPHN5cy9pbm90aWZ5Lmg+CisjZW5kaWYKKyNp
ZmRlZiBFWElNX0hBVkVfS0VWRU5UCisjIGluY2x1ZGUgPHN5cy9ldmVudC5oPgorI2VuZGlmCisK
IC8qIEM5OSBpbnRlZ2VyIHR5cGVzLCBmaWd1cmUgb3V0IGhvdyB0byB1bmRvIHRoaXMgaWYgbmVl
ZGVkIGZvciBvbGRlciBzeXN0ZW1zICovCiAKICNpbmNsdWRlIDxpbnR0eXBlcy5oPgpAQCAtNTE1
LDcgKzUyMyw4IEBACiAKIC8qIFRoZSBoZWFkZXIgZnJvbSB0aGUgUENSRSByZWdleCBwYWNrYWdl
ICovCiAKLSNpbmNsdWRlIDxwY3JlLmg+CisjZGVmaW5lIFBDUkUyX0NPREVfVU5JVF9XSURUSCA4
CisjaW5jbHVkZSA8cGNyZTIuaD4KIAogLyogRXhpbSBpbmNsdWRlcyBhcmUgaW4gc2V2ZXJhbCBm
aWxlcy4gTm90ZSB0aGF0IGxvY2FsX3NjYW4uaCAjaW5jbHVkZXMKIGNvbmZpZy5oLCBteXR5cGVz
LmgsIGFuZCBzdG9yZS5oLCBzbyB3ZSBkb24ndCBuZWVkIHRvIG1lbnRpb24gdGhlbSBleHBsaWNp
dGx5LgpAQCAtNTIzLDExICs1MzIsMTIgQEAKIAogI2luY2x1ZGUgImxvY2FsX3NjYW4uaCIKICNp
bmNsdWRlICJtYWNyb3MuaCIKLSNpbmNsdWRlICJkYnN0dWZmLmgiCisjaW5jbHVkZSAiaGludHNk
Yi5oIgorI2luY2x1ZGUgImhpbnRzZGJfc3RydWN0cy5oIgogI2luY2x1ZGUgInN0cnVjdHMuaCIK
ICNpbmNsdWRlICJibG9iLmgiCi0jaW5jbHVkZSAiZ2xvYmFscy5oIgogI2luY2x1ZGUgImhhc2gu
aCIKKyNpbmNsdWRlICJnbG9iYWxzLmgiCiAjaW5jbHVkZSAiZnVuY3Rpb25zLmgiCiAjaW5jbHVk
ZSAiZGJmdW5jdGlvbnMuaCIKICNpbmNsdWRlICJvc2Z1bmN0aW9ucy5oIgpAQCAtNTM4LDkgKzU0
OCw2IEBACiAjaWZkZWYgU1VQUE9SVF9TUEYKICMgaW5jbHVkZSAic3BmLmgiCiAjZW5kaWYKLSNp
ZmRlZiBFWFBFUklNRU5UQUxfU1JTCi0jIGluY2x1ZGUgInNycy5oIgotI2VuZGlmCiAjaWZuZGVm
IERJU0FCTEVfREtJTQogIyBpbmNsdWRlICJka2ltLmgiCiAjZW5kaWYKQEAgLTY0NCw1ICs2NTEs
MjEgQEAKICMgZGVmaW5lIEVYSU1fR1JPVVBMSVNUX1NJWkUgTkdST1VQU19NQVgKICNlbmRpZgog
CisvKiBMaW51eCBoYXMgVENQX0NPUkssIEZyZWVCU0QgaGFzIFRDUF9OT1BVU0g7IHRoZXkgZG8g
cHJldHR5IG11Y2ggdGhlIHNhbWUgKi8KKworI2lmZGVmIFRDUF9DT1JLCisjIGRlZmluZSBFWElN
X1RDUF9DT1JLIFRDUF9DT1JLCisjZWxpZiBkZWZpbmVkKFRDUF9OT1BVU0gpCisjIGRlZmluZSBF
WElNX1RDUF9DT1JLIFRDUF9OT1BVU0gKKyNlbmRpZgorCisvKiBMaWJyZVNTTCBzZWVtcyB0byBu
b3QgcHVzaCBvdXQgdGhlIFNNVFAgcmVzcG9uc2UgdG8gUVVJVCB3aXRoIG91ciB1c3VhbAoraGFu
ZGxpbmcgd2hpY2ggaXMgdHJ5aW5nIHRvIGdldCB0aGUgY2xpZW50IHRvIEZJTiBmaXJzdCBzbyB0
aGF0IHRoZSBzZXJ2ZXIgZG9lcworbm90IGdldCB0aGUgVElNRV9XQUlUICovCisKKyNpZiAhZGVm
aW5lZChESVNBQkxFX1RMUykgJiYgZGVmaW5lZChVU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChMSUJS
RVNTTF9WRVJTSU9OX05VTUJFUikKKyMgZGVmaW5lIFNFUlZFUlNJREVfQ0xPU0VfTk9XQUlUCisj
ZW5kaWYKKwogI2VuZGlmCiAvKiBFbmQgb2YgZXhpbS5oICovCmRpZmYgLXVyIGV4aW0ub3JpZy9z
cmMvZXhpbV9sb2NrLmMgZXhpbS9zcmMvZXhpbV9sb2NrLmMKLS0tIGV4aW0ub3JpZy9zcmMvZXhp
bV9sb2NrLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3Jj
L2V4aW1fbG9jay5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0xMCw3
ICsxMCw3IEBACiAKIEFyZ3VtZW50OiB0aGUgbmFtZSBvZiB0aGUgbG9jayBmaWxlCiAKLUNvcHly
aWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNgorQ29weXJpZ2h0IChjKSBUaGUgRXhp
bSBNYWludGFpbmVycyAyMDE2IC0gMjAyMQogKi8KIAogI2luY2x1ZGUgIm9zLmgiCkBAIC04Nyw3
ICs4Nyw2IEBACiBzdGF0aWMgdm9pZAogc2lnYWxybV9oYW5kbGVyKGludCBzaWcpCiB7Ci1zaWcg
PSBzaWc7ICAgICAgLyogS2VlcCBwaWNreSBjb21waWxlcnMgaGFwcHkgKi8KIHNpZ2Fscm1fc2Vl
biA9IFRSVUU7CiB9CiAKQEAgLTU4NCw3ICs1ODMsNyBAQAogaWYgKHJlc3RvcmVfdGltZXMpCiAg
IHsKICAgc3RydWN0IHN0YXQgc3RyZXN0b3JlOwotI2lmZGVmIEVYSU1fSEFWRV9PUEVOQVQKKyNp
ZmRlZiBFWElNX0hBVkVfRlVUSU1FTlMKICAgaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19SRFdS
KTsgLyogdXNlIGZkIGZvciBib3RoIGdldCAmIHJlc3RvcmUgKi8KICAgc3RydWN0IHRpbWVzcGVj
IHR0WzJdOwogCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvZXhpcWdyZXAuc3JjIGV4aW0vc3JjL2V4
aXFncmVwLnNyYwotLS0gZXhpbS5vcmlnL3NyYy9leGlxZ3JlcC5zcmMJMjAyMy0wNi0wNCAxNjoy
MjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2V4aXFncmVwLnNyYwkyMDIyLTA2LTIz
IDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw2ICsyLDggQEAKIAogIyBVdGlsaXR5IGZv
ciBzZWFyY2hpbmcgYW5kIGRpc3BsYXlpbmcgcXVldWUgaW5mb3JtYXRpb24uCiAjIFdyaXR0ZW4g
YnkgTWF0dCBIdWJiYXJkIDE1IEF1Z3VzdCAyMDAyCisjCisjIENvcHlyaWdodCAoYykgVGhlIEV4
aW0gTWFpbnRhaW5lcnMgMjAyMSAtIDIwMjIKIAogIyBFeGNlcHQgd2hlbiB0aGV5IGFwcGVhciBp
biBjb21tZW50cywgdGhlIGZvbGxvd2luZyBwbGFjZWhvbGRlcnMgaW4gdGhpcwogIyBzb3VyY2Ug
YXJlIHJlcGxhY2VkIHdoZW4gaXQgaXMgdHVybmVkIGludG8gYSBydW5uYWJsZSBzY3JpcHQ6CkBA
IC01MywxMiArNTUsMTQgQEAKICAgICAgICAgZXhpdCAwOwogfQogCi1nZXRvcHRzKCdoZjpyOnk6
bzpzOkM6enhsaWJSY2FHOicsXCVvcHQpOwotaWYgKCRBUkdWWzBdKSB7ICZoZWxwOyBleGl0O30K
LWlmICgkb3B0e2h9KSB7ICZoZWxwOyBleGl0O30KK2lmICghZ2V0b3B0cygnaGY6cjp5Om86czpD
Onp4bGliUmNhRzpFOicsXCVvcHQpKSB7ICZoZWxwOyBleGl0OyB9CitpZiAoJG9wdHtofSkgeyAm
aGVscDsgZXhpdDsgfQoraWYgKCRBUkdWWzBdIHx8ICEoJG9wdHtmfSB8fCAkb3B0e3J9IHx8ICRv
cHR7c30gfHwgJG9wdHt5fSB8fCAkb3B0e299IHx8ICRvcHR7en0gfHwgJG9wdHt4fSB8fCAkb3B0
e2N9KSkKKyAgIHsgJmhlbHA7IGV4aXQoMSk7IH0KIGlmICgkb3B0e2F9KSB7ICRlYXJncyA9ICct
YnAnOyB9CiBpZiAoJG9wdHtDfSAmJiAtZSAkb3B0e0N9ICYmIC1mICRvcHR7Q30gJiYgLVIgJG9w
dHtDfSkgeyAkZWFyZ3MgLj0gJyAtQyAnLiRvcHR7Q307IH0KIGlmICgkb3B0e0d9KSB7ICRlYXJn
cyAuPSAnIC1xRycuJG9wdHtHfTsgfQoraWYgKCRvcHR7RX0pIHsgJGV4aW0gPSAkb3B0e0V9OyB9
CiAKICMgUmVhZCBtZXNzYWdlIHF1ZXVlIG91dHB1dCBpbnRvIGhhc2gKICZjb2xsZWN0KCk7CkBA
IC03NSw2ICs3OSw3IEBACiAKIAktaAkJVGhpcyBoZWxwIG1lc3NhZ2UuCiAJLUMJCVNwZWNpZnkg
d2hpY2ggZXhpbS5jb25mIHRvIHVzZS4KKwktRQkJU3BlY2lmeSBleGltIGJpbmFyeSB0byB1c2Uu
CiAKIFNlbGVjdGlvbiBjcml0ZXJpYToKIAktZiA8cmVnZXhwPglNYXRjaCBzZW5kZXIgYWRkcmVz
cyBzZW5kZXIgKGZpZWxkIGlzICI8ID4iIHdyYXBwZWQpCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMv
ZXhwYW5kLmMgZXhpbS9zcmMvZXhwYW5kLmMKLS0tIGV4aW0ub3JpZy9zcmMvZXhwYW5kLmMJMjAy
My0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2V4cGFuZC5jCTIw
MjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAg
RXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAo
YykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykg
VW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykg
VGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3Ig
Y29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogCkBAIC0xMzEsNyArMTMx
LDcgQEAKICAgVVMicnVuIiwKICAgVVMic2ciLAogICBVUyJzb3J0IiwKLSNpZmRlZiBFWFBFUklN
RU5UQUxfU1JTX05BVElWRQorI2lmZGVmIFNVUFBPUlRfU1JTCiAgIFVTInNyc19lbmNvZGUiLAog
I2VuZGlmCiAgIFVTInN1YnN0ciIsCkBAIC0xNjYsNyArMTY2LDcgQEAKICAgRUlURU1fUlVOLAog
ICBFSVRFTV9TRywKICAgRUlURU1fU09SVCwKLSNpZmRlZiBFWFBFUklNRU5UQUxfU1JTX05BVElW
RQorI2lmZGVmIFNVUFBPUlRfU1JTCiAgIEVJVEVNX1NSU19FTkNPREUsCiAjZW5kaWYKICAgRUlU
RU1fU1VCU1RSLApAQCAtMTc3LDcgKzE3Nyw3IEBACiBjYXNlcyB0byBpbnRyb2R1Y2UgYXJndW1l
bnRzLCB3aGVyZWFzIGZvciBvdGhlciBpdCBpcyBwYXJ0IG9mIHRoZSBuYW1lLiBUaGlzIGlzCiBh
biBoaXN0b3JpY2FsIG1pcy1kZXNpZ24uICovCiAKLXN0YXRpYyB1c2NoYXIgKm9wX3RhYmxlX3Vu
ZGVyc2NvcmVbXSA9IHsKK3N0YXRpYyB1c2NoYXIgKiBvcF90YWJsZV91bmRlcnNjb3JlW10gPSB7
CiAgIFVTImZyb21fdXRmOCIsCiAgIFVTImxvY2FsX3BhcnQiLAogICBVUyJxdW90ZV9sb2NhbF9w
YXJ0IiwKQEAgLTIxNiw3ICsyMTYsNiBAQAogICBVUyJiYXNlNjJkIiwKICAgVVMiYmFzZTY0IiwK
ICAgVVMiYmFzZTY0ZCIsCi0gIFVTImJsZXNzIiwKICAgVVMiZG9tYWluIiwKICAgVVMiZXNjYXBl
IiwKICAgVVMiZXNjYXBlOGJpdCIsCkBAIC0yNjQsNyArMjYzLDYgQEAKICAgRU9QX0JBU0U2MkQs
CiAgIEVPUF9CQVNFNjQsCiAgIEVPUF9CQVNFNjRELAotICBFT1BfQkxFU1MsCiAgIEVPUF9ET01B
SU4sCiAgIEVPUF9FU0NBUEUsCiAgIEVPUF9FU0NBUEU4QklULApAQCAtMzM0LDcgKzMzMiw3IEBA
CiAgIFVTImdlaSIsCiAgIFVTImd0IiwKICAgVVMiZ3RpIiwKLSNpZmRlZiBFWFBFUklNRU5UQUxf
U1JTX05BVElWRQorI2lmZGVmIFNVUFBPUlRfU1JTCiAgIFVTImluYm91bmRfc3JzIiwKICNlbmRp
ZgogICBVUyJpbmxpc3QiLApAQCAtMzg3LDcgKzM4NSw3IEBACiAgIEVDT05EX1NUUl9HRUksCiAg
IEVDT05EX1NUUl9HVCwKICAgRUNPTkRfU1RSX0dUSSwKLSNpZmRlZiBFWFBFUklNRU5UQUxfU1JT
X05BVElWRQorI2lmZGVmIFNVUFBPUlRfU1JTCiAgIEVDT05EX0lOQk9VTkRfU1JTLAogI2VuZGlm
CiAgIEVDT05EX0lOTElTVCwKQEAgLTQ0Niw5ICs0NDQsOSBAQAogICB2dHlwZV9wc3BhY2UsICAg
ICAgICAgLyogcGFydGl0aW9uIHNwYWNlOyB2YWx1ZSBpcyBUL0YgZm9yIHNwb29sL2xvZyAqLwog
ICB2dHlwZV9waW5vZGVzLCAgICAgICAgLyogcGFydGl0aW9uIGlub2RlczsgdmFsdWUgaXMgVC9G
IGZvciBzcG9vbC9sb2cgKi8KICAgdnR5cGVfY2VydAkJLyogU1NMIGNlcnRpZmljYXRlICovCi0g
ICNpZm5kZWYgRElTQUJMRV9ES0lNCisjaWZuZGVmIERJU0FCTEVfREtJTQogICAsdnR5cGVfZGtp
bSAgICAgICAgICAgLyogTG9va3VwIG9mIHZhbHVlIGluIERLSU0gc2lnbmF0dXJlICovCi0gICNl
bmRpZgorI2VuZGlmCiB9OwogCiAvKiBUeXBlIGZvciBtYWluIHZhcmlhYmxlIHRhYmxlICovCkBA
IC01ODUsOSArNTgzLDkgQEAKICAgeyAiaW50ZXJmYWNlX2FkZHJlc3MiLCAgIHZ0eXBlX3N0cmlu
Z3B0ciwgICAmaW50ZXJmYWNlX2FkZHJlc3MgfSwKICAgeyAiaW50ZXJmYWNlX3BvcnQiLCAgICAg
IHZ0eXBlX2ludCwgICAgICAgICAmaW50ZXJmYWNlX3BvcnQgfSwKICAgeyAiaXRlbSIsICAgICAg
ICAgICAgICAgIHZ0eXBlX3N0cmluZ3B0ciwgICAmaXRlcmF0ZV9pdGVtIH0sCi0gICNpZmRlZiBM
T09LVVBfTERBUAorI2lmZGVmIExPT0tVUF9MREFQCiAgIHsgImxkYXBfZG4iLCAgICAgICAgICAg
ICB2dHlwZV9zdHJpbmdwdHIsICAgJmVsZGFwX2RuIH0sCi0gICNlbmRpZgorI2VuZGlmCiAgIHsg
ImxvYWRfYXZlcmFnZSIsICAgICAgICB2dHlwZV9sb2FkX2F2ZywgICAgTlVMTCB9LAogICB7ICJs
b2NhbF9wYXJ0IiwgICAgICAgICAgdnR5cGVfc3RyaW5ncHRyLCAgICZkZWxpdmVyX2xvY2FscGFy
dCB9LAogICB7ICJsb2NhbF9wYXJ0X2RhdGEiLCAgICAgdnR5cGVfc3RyaW5ncHRyLCAgICZkZWxp
dmVyX2xvY2FscGFydF9kYXRhIH0sCkBAIC03NTIsMTggKzc1MCw5IEBACiAgIHsgInNwb29sX2Rp
cmVjdG9yeSIsICAgICB2dHlwZV9zdHJpbmdwdHIsICAgJnNwb29sX2RpcmVjdG9yeSB9LAogICB7
ICJzcG9vbF9pbm9kZXMiLCAgICAgICAgdnR5cGVfcGlub2RlcywgICAgICh2b2lkICopVFJVRSB9
LAogICB7ICJzcG9vbF9zcGFjZSIsICAgICAgICAgdnR5cGVfcHNwYWNlLCAgICAgICh2b2lkICop
VFJVRSB9LAotI2lmZGVmIEVYUEVSSU1FTlRBTF9TUlMKLSAgeyAic3JzX2RiX2FkZHJlc3MiLCAg
ICAgIHZ0eXBlX3N0cmluZ3B0ciwgICAmc3JzX2RiX2FkZHJlc3MgfSwKLSAgeyAic3JzX2RiX2tl
eSIsICAgICAgICAgIHZ0eXBlX3N0cmluZ3B0ciwgICAmc3JzX2RiX2tleSB9LAotICB7ICJzcnNf
b3JpZ19yZWNpcGllbnQiLCAgdnR5cGVfc3RyaW5ncHRyLCAgICZzcnNfb3JpZ19yZWNpcGllbnQg
fSwKLSAgeyAic3JzX29yaWdfc2VuZGVyIiwgICAgIHZ0eXBlX3N0cmluZ3B0ciwgICAmc3JzX29y
aWdfc2VuZGVyIH0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEVYUEVSSU1FTlRBTF9TUlMpIHx8IGRl
ZmluZWQoRVhQRVJJTUVOVEFMX1NSU19OQVRJVkUpCisjaWZkZWYgU1VQUE9SVF9TUlMKICAgeyAi
c3JzX3JlY2lwaWVudCIsICAgICAgIHZ0eXBlX3N0cmluZ3B0ciwgICAmc3JzX3JlY2lwaWVudCB9
LAogI2VuZGlmCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1NSUwotICB7ICJzcnNfc3RhdHVzIiwgICAg
ICAgICAgdnR5cGVfc3RyaW5ncHRyLCAgICZzcnNfc3RhdHVzIH0sCi0jZW5kaWYKICAgeyAidGhp
c2FkZHJlc3MiLCAgICAgICAgIHZ0eXBlX3N0cmluZ3B0ciwgICAmZmlsdGVyX3RoaXNhZGRyZXNz
IH0sCiAKICAgLyogVGhlIG5vbi0oaW4sb3V0KSB2YXJpYWJsZXMgYXJlIG5vdyBkZXByZWNhdGVk
ICovCkBAIC03NzksNyArNzY4LDcgQEAKICAgeyAidGxzX2luX291cmNlcnQiLCAgICAgIHZ0eXBl
X2NlcnQsICAgICAgICAmdGxzX2luLm91cmNlcnQgfSwKICAgeyAidGxzX2luX3BlZXJjZXJ0Iiwg
ICAgIHZ0eXBlX2NlcnQsICAgICAgICAmdGxzX2luLnBlZXJjZXJ0IH0sCiAgIHsgInRsc19pbl9w
ZWVyZG4iLCAgICAgICB2dHlwZV9zdHJpbmdwdHIsICAgJnRsc19pbi5wZWVyZG4gfSwKLSNpZmRl
ZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQorI2lmbmRlZiBESVNBQkxFX1RMU19SRVNVTUUKICAg
eyAidGxzX2luX3Jlc3VtcHRpb24iLCAgIHZ0eXBlX2ludCwgICAgICAgICAmdGxzX2luLnJlc3Vt
cHRpb24gfSwKICNlbmRpZgogI2lmbmRlZiBESVNBQkxFX1RMUwpAQCAtNzk3LDcgKzc4Niw3IEBA
CiAgIHsgInRsc19vdXRfb3VyY2VydCIsICAgICB2dHlwZV9jZXJ0LCAgICAgICAgJnRsc19vdXQu
b3VyY2VydCB9LAogICB7ICJ0bHNfb3V0X3BlZXJjZXJ0IiwgICAgdnR5cGVfY2VydCwgICAgICAg
ICZ0bHNfb3V0LnBlZXJjZXJ0IH0sCiAgIHsgInRsc19vdXRfcGVlcmRuIiwgICAgICB2dHlwZV9z
dHJpbmdwdHIsICAgJnRsc19vdXQucGVlcmRuIH0sCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1RMU19S
RVNVTUUKKyNpZm5kZWYgRElTQUJMRV9UTFNfUkVTVU1FCiAgIHsgInRsc19vdXRfcmVzdW1wdGlv
biIsICB2dHlwZV9pbnQsICAgICAgICAgJnRsc19vdXQucmVzdW1wdGlvbiB9LAogI2VuZGlmCiAj
aWZuZGVmIERJU0FCTEVfVExTCkBAIC0xMjk5LDcgKzEyODgsNyBAQAogY29uc3QgdXNjaGFyICog
dGxpc3QgPSBsaXN0OwogaW50IHNlcCA9IDA7CiAvKiBUYWludGVkIG1lbSBmb3IgdGhlIHRocm93
YXdheSBlbGVtZW50IGNvcGllcyAqLwotdXNjaGFyICogZHVtbXkgPSBzdG9yZV9nZXQoMiwgVFJV
RSk7Cit1c2NoYXIgKiBkdW1teSA9IHN0b3JlX2dldCgyLCBHRVRfVEFJTlRFRCk7CiAKIGlmIChm
aWVsZCA8IDApCiAgIHsKQEAgLTE1OTUsNyArMTU4NCw3IEBACiAqLwogCiBzdGF0aWMgdXNjaGFy
ICoKLWZpbmRfaGVhZGVyKHVzY2hhciAqbmFtZSwgaW50ICpuZXdzaXplLCB1bnNpZ25lZCBmbGFn
cywgdXNjaGFyICpjaGFyc2V0KQorZmluZF9oZWFkZXIodXNjaGFyICpuYW1lLCBpbnQgKm5ld3Np
emUsIHVuc2lnbmVkIGZsYWdzLCBjb25zdCB1c2NoYXIgKmNoYXJzZXQpCiB7CiBCT09MIGZvdW5k
ID0gIW5hbWU7CiBpbnQgbGVuID0gbmFtZSA/IFVzdHJsZW4obmFtZSkgOiAwOwpAQCAtMTcwOSw5
ICsxNjk4LDkgQEAKIGlmIChzZW5kZXJfaG9zdF9uYW1lKQogICBnID0gc3RyaW5nX2FwcGVuZChn
LCAzLCBVUyI7XG5cdGlwcmV2PXBhc3MgKCIsIHNlbmRlcl9ob3N0X25hbWUsIFVTIikiKTsKIGVs
c2UgaWYgKGhvc3RfbG9va3VwX2RlZmVycmVkKQotICBnID0gc3RyaW5nX2NhdG4oZywgVVMiO1xu
XHRpcHJldj10ZW1wZXJyb3IiLCAxOSk7CisgIGcgPSBzdHJpbmdfY2F0KGcsIFVTIjtcblx0aXBy
ZXY9dGVtcGVycm9yIik7CiBlbHNlIGlmIChob3N0X2xvb2t1cF9mYWlsZWQpCi0gIGcgPSBzdHJp
bmdfY2F0bihnLCBVUyI7XG5cdGlwcmV2PWZhaWwiLCAxMyk7CisgIGcgPSBzdHJpbmdfY2F0KGcs
IFVTIjtcblx0aXByZXY9ZmFpbCIpOwogZWxzZQogICByZXR1cm4gZzsKIApAQCAtMTc2Miw4ICsx
NzUxLDYgQEAKICNpZm5kZWYgRVhJTV9IQVZFX0FCU1RSQUNUX1VOSVhfU09DS0VUUwogdXNjaGFy
ICogc25hbWU7CiAjZW5kaWYKLWZkX3NldCBmZHM7Ci1zdHJ1Y3QgdGltZXZhbCB0djsKIAogaWYg
KChmZCA9IHNvY2tldChBRl9VTklYLCBTT0NLX0RHUkFNLCAwKSkgPCAwKQogICB7CkBAIC0xODA3
LDkgKzE3OTQsNyBAQAogYnVmWzBdID0gTk9USUZZX1FVRVVFX1NJWkVfUkVROwogaWYgKHNlbmQo
ZmQsIGJ1ZiwgMSwgMCkgPCAwKSB7IHdoZXJlID0gVVMic2VuZCI7IGdvdG8gYmFkOyB9CiAKLUZE
X1pFUk8oJmZkcyk7IEZEX1NFVChmZCwgJmZkcyk7Ci10di50dl9zZWMgPSAyOyB0di50dl91c2Vj
ID0gMDsKLWlmIChzZWxlY3QoZmQgKyAxLCAoU0VMRUNUX0FSRzJfVFlQRSAqKSZmZHMsIE5VTEws
IE5VTEwsICZ0dikgIT0gMSkKK2lmIChwb2xsX29uZV9mZChmZCwgUE9MTElOLCAyICogMTAwMCkg
IT0gMSkKICAgewogICBERUJVRyhEX2V4cGFuZCkgZGVidWdfcHJpbnRmKCJubyBkYWVtb24gcmVz
cG9uc2U7IHVzaW5nIGxvY2FsIGV2YWx1YXRpb25cbiIpOwogICBsZW4gPSBzbnByaW50ZihDUyBi
dWYsIHNpemVvZihidWYpLCAiJXUiLCBxdWV1ZV9jb3VudF9jYWNoZWQoKSk7CkBAIC0xODU2LDcg
KzE4NDEsNyBAQAogICAgICAgICAgICAgICAgIHNvbWV0aGluZyBub24tTlVMTCBpZiBleGlzdHNf
b25seSBpcyBUUlVFCiAqLwogCi1zdGF0aWMgdXNjaGFyICoKK3N0YXRpYyBjb25zdCB1c2NoYXIg
KgogZmluZF92YXJpYWJsZSh1c2NoYXIgKm5hbWUsIEJPT0wgZXhpc3RzX29ubHksIEJPT0wgc2tp
cHBpbmcsIGludCAqbmV3c2l6ZSkKIHsKIHZhcl9lbnRyeSAqIHZwOwpAQCAtMTg5NCwxNSArMTg3
OSwxNSBAQAogICB7CiAgIHVzY2hhciAqZW5kcHRyOwogICBpbnQgbiA9IFVzdHJ0b3VsKG5hbWUg
KyA0LCAmZW5kcHRyLCAxMCk7Ci0gIGlmICgqZW5kcHRyID09IDAgJiYgbiAhPSAwICYmIG4gPD0g
QVVUSF9WQVJTKQotICAgIHJldHVybiAhYXV0aF92YXJzW24tMV0gPyBVUyIiIDogYXV0aF92YXJz
W24tMV07CisgIGlmICghKmVuZHB0ciAmJiBuICE9IDAgJiYgbiA8PSBBVVRIX1ZBUlMpCisgICAg
cmV0dXJuIGF1dGhfdmFyc1tuLTFdID8gYXV0aF92YXJzW24tMV0gOiBVUyIiOwogICB9CiBlbHNl
IGlmIChVc3RybmNtcChuYW1lLCAicmVnZXgiLCA1KSA9PSAwKQogICB7CiAgIHVzY2hhciAqZW5k
cHRyOwogICBpbnQgbiA9IFVzdHJ0b3VsKG5hbWUgKyA1LCAmZW5kcHRyLCAxMCk7Ci0gIGlmICgq
ZW5kcHRyID09IDAgJiYgbiAhPSAwICYmIG4gPD0gUkVHRVhfVkFSUykKLSAgICByZXR1cm4gIXJl
Z2V4X3ZhcnNbbi0xXSA/IFVTIiIgOiByZWdleF92YXJzW24tMV07CisgIGlmICghKmVuZHB0ciAm
JiBuICE9IDAgJiYgbiA8PSBSRUdFWF9WQVJTKQorICAgIHJldHVybiByZWdleF92YXJzW24tMV0g
PyByZWdleF92YXJzW24tMV0gOiBVUyIiOwogICB9CiAKIC8qIEZvciBhbGwgb3RoZXIgdmFyaWFi
bGVzLCBzZWFyY2ggdGhlIHRhYmxlICovCkBAIC0xOTg1LDExICsxOTcwLDEyIEBACiAgICAgc3Mg
PSAodXNjaGFyICoqKSh2YWwpOwogICAgIGlmICghKnNzICYmIGRlbGl2ZXJfZGF0YWZpbGUgPj0g
MCkgIC8qIFJlYWQgYm9keSB3aGVuIG5lZWRlZCAqLwogICAgICAgewotICAgICAgdXNjaGFyICpi
b2R5OworICAgICAgdXNjaGFyICogYm9keTsKICAgICAgIG9mZl90IHN0YXJ0X29mZnNldCA9IFNQ
T09MX0RBVEFfU1RBUlRfT0ZGU0VUOwogICAgICAgaW50IGxlbiA9IG1lc3NhZ2VfYm9keV92aXNp
YmxlOworCiAgICAgICBpZiAobGVuID4gbWVzc2FnZV9zaXplKSBsZW4gPSBtZXNzYWdlX3NpemU7
Ci0gICAgICAqc3MgPSBib2R5ID0gc3RvcmVfbWFsbG9jKGxlbisxKTsKKyAgICAgICpzcyA9IGJv
ZHkgPSBzdG9yZV9nZXQobGVuKzEsIEdFVF9UQUlOVEVEKTsKICAgICAgIGJvZHlbMF0gPSAwOwog
ICAgICAgaWYgKHZwLT50eXBlID09IHZ0eXBlX21zZ2JvZHlfZW5kKQogCXsKQEAgLTIwMDQsOCAr
MTk5MCw3IEBACiAgICAgICBpZiAobHNlZWsoZGVsaXZlcl9kYXRhZmlsZSwgc3RhcnRfb2Zmc2V0
LCBTRUVLX1NFVCkgPCAwKQogCWxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLCAi
ZGVsaXZlcl9kYXRhZmlsZSBsc2VlazogJXMiLAogCSAgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAg
IGxlbiA9IHJlYWQoZGVsaXZlcl9kYXRhZmlsZSwgYm9keSwgbGVuKTsKLSAgICAgIGlmIChsZW4g
PiAwKQorICAgICAgaWYgKChsZW4gPSByZWFkKGRlbGl2ZXJfZGF0YWZpbGUsIGJvZHksIGxlbikp
ID4gMCkKIAl7CiAJYm9keVtsZW5dID0gMDsKIAlpZiAobWVzc2FnZV9ib2R5X25ld2xpbmVzKSAg
IC8qIFNlcGFyYXRlIGxvb3BzIGZvciBlZmZpY2llbmN5ICovCkBAIC0yNDQwLDcgKzI0MjUsNyBA
QAogCiAKIAotI2lmZGVmIEVYUEVSSU1FTlRBTF9TUlNfTkFUSVZFCisjaWZkZWYgU1VQUE9SVF9T
UlMKIC8qIERvIGFuIGhtYWNfbWQ1LiAgVGhlIHJlc3VsdCBpcyBfbm90XyBudWwtdGVybWluYXRl
ZCwgYW5kIGlzIHNpemVkIGFzCiB0aGUgc21hbGxlciBvZiBhIGZ1bGwgaG1hY19tZDUgcmVzdWx0
ICgxNiBieXRlcykgb3IgdGhlIHN1cHBsaWVkIG91dHB1dCBidWZmZXIuCiAKQEAgLTI1MTUsNyAr
MjUwMCw3IEBACiAgIH0KIHJldHVybjsKIH0KLSNlbmRpZiAvKkVYUEVSSU1FTlRBTF9TUlNfTkFU
SVZFKi8KKyNlbmRpZiAvKlNVUFBPUlRfU1JTKi8KIAogCiAvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjU0NSwxNiArMjUzMCwxMyBAQAogQk9P
TCAqc3ViY29uZHB0cjsKIEJPT0wgc3ViMl9ob25vdXJfZG9sbGFyID0gVFJVRTsKIEJPT0wgaXNf
Zm9yYW55LCBpc19qc29uLCBpc19qc29uczsKLWludCByYywgY29uZF90eXBlLCByb2Zmc2V0Owor
aW50IHJjLCBjb25kX3R5cGU7CiBpbnRfZXhpbWFyaXRoX3QgbnVtWzJdOwogc3RydWN0IHN0YXQg
c3RhdGJ1ZjsKIHVzY2hhciAqIG9wbmFtZTsKIHVzY2hhciBuYW1lWzI1Nl07CiBjb25zdCB1c2No
YXIgKnN1YlsxMF07CiAKLWNvbnN0IHBjcmUgKnJlOwotY29uc3QgdXNjaGFyICpyZXJyb3I7Ci0K
IGZvciAoOzspCiAgIGlmIChVc2tpcF93aGl0ZXNwYWNlKCZzKSA9PSAnIScpIHsgdGVzdGZvciA9
ICF0ZXN0Zm9yOyBzKys7IH0gZWxzZSBicmVhazsKIApAQCAtMjU2NSw3ICsyNTQ3LDcgQEAKIAog
ICBjYXNlIEVDT05EX0RFRjoKICAgICB7Ci0gICAgdXNjaGFyICogdDsKKyAgICBjb25zdCB1c2No
YXIgKiB0OwogCiAgICAgaWYgKCpzICE9ICc6JykKICAgICAgIHsKQEAgLTI5MTYsMTQzICsyODk4
LDEzMyBAQAogICAgIHsKICAgICBjYXNlIEVDT05EX05VTV9FOgogICAgIGNhc2UgRUNPTkRfTlVN
X0VFOgotICAgIHRlbXBjb25kID0gKG51bVswXSA9PSBudW1bMV0pOwotICAgIGJyZWFrOworICAg
ICAgdGVtcGNvbmQgPSAobnVtWzBdID09IG51bVsxXSk7IGJyZWFrOwogCiAgICAgY2FzZSBFQ09O
RF9OVU1fRzoKLSAgICB0ZW1wY29uZCA9IChudW1bMF0gPiBudW1bMV0pOwotICAgIGJyZWFrOwor
ICAgICAgdGVtcGNvbmQgPSAobnVtWzBdID4gbnVtWzFdKTsgYnJlYWs7CiAKICAgICBjYXNlIEVD
T05EX05VTV9HRToKLSAgICB0ZW1wY29uZCA9IChudW1bMF0gPj0gbnVtWzFdKTsKLSAgICBicmVh
azsKKyAgICAgIHRlbXBjb25kID0gKG51bVswXSA+PSBudW1bMV0pOyBicmVhazsKIAogICAgIGNh
c2UgRUNPTkRfTlVNX0w6Ci0gICAgdGVtcGNvbmQgPSAobnVtWzBdIDwgbnVtWzFdKTsKLSAgICBi
cmVhazsKKyAgICAgIHRlbXBjb25kID0gKG51bVswXSA8IG51bVsxXSk7IGJyZWFrOwogCiAgICAg
Y2FzZSBFQ09ORF9OVU1fTEU6Ci0gICAgdGVtcGNvbmQgPSAobnVtWzBdIDw9IG51bVsxXSk7Ci0g
ICAgYnJlYWs7CisgICAgICB0ZW1wY29uZCA9IChudW1bMF0gPD0gbnVtWzFdKTsgYnJlYWs7CiAK
ICAgICBjYXNlIEVDT05EX1NUUl9MVDoKLSAgICB0ZW1wY29uZCA9IChVc3RyY21wKHN1YlswXSwg
c3ViWzFdKSA8IDApOwotICAgIGJyZWFrOworICAgICAgdGVtcGNvbmQgPSAoVXN0cmNtcChzdWJb
MF0sIHN1YlsxXSkgPCAwKTsgYnJlYWs7CiAKICAgICBjYXNlIEVDT05EX1NUUl9MVEk6Ci0gICAg
dGVtcGNvbmQgPSAoc3RyY21waWMoc3ViWzBdLCBzdWJbMV0pIDwgMCk7Ci0gICAgYnJlYWs7Cisg
ICAgICB0ZW1wY29uZCA9IChzdHJjbXBpYyhzdWJbMF0sIHN1YlsxXSkgPCAwKTsgYnJlYWs7CiAK
ICAgICBjYXNlIEVDT05EX1NUUl9MRToKLSAgICB0ZW1wY29uZCA9IChVc3RyY21wKHN1YlswXSwg
c3ViWzFdKSA8PSAwKTsKLSAgICBicmVhazsKKyAgICAgIHRlbXBjb25kID0gKFVzdHJjbXAoc3Vi
WzBdLCBzdWJbMV0pIDw9IDApOyBicmVhazsKIAogICAgIGNhc2UgRUNPTkRfU1RSX0xFSToKLSAg
ICB0ZW1wY29uZCA9IChzdHJjbXBpYyhzdWJbMF0sIHN1YlsxXSkgPD0gMCk7Ci0gICAgYnJlYWs7
CisgICAgICB0ZW1wY29uZCA9IChzdHJjbXBpYyhzdWJbMF0sIHN1YlsxXSkgPD0gMCk7IGJyZWFr
OwogCiAgICAgY2FzZSBFQ09ORF9TVFJfRVE6Ci0gICAgdGVtcGNvbmQgPSAoVXN0cmNtcChzdWJb
MF0sIHN1YlsxXSkgPT0gMCk7Ci0gICAgYnJlYWs7CisgICAgICB0ZW1wY29uZCA9IChVc3RyY21w
KHN1YlswXSwgc3ViWzFdKSA9PSAwKTsgYnJlYWs7CiAKICAgICBjYXNlIEVDT05EX1NUUl9FUUk6
Ci0gICAgdGVtcGNvbmQgPSAoc3RyY21waWMoc3ViWzBdLCBzdWJbMV0pID09IDApOwotICAgIGJy
ZWFrOworICAgICAgdGVtcGNvbmQgPSAoc3RyY21waWMoc3ViWzBdLCBzdWJbMV0pID09IDApOyBi
cmVhazsKIAogICAgIGNhc2UgRUNPTkRfU1RSX0dUOgotICAgIHRlbXBjb25kID0gKFVzdHJjbXAo
c3ViWzBdLCBzdWJbMV0pID4gMCk7Ci0gICAgYnJlYWs7CisgICAgICB0ZW1wY29uZCA9IChVc3Ry
Y21wKHN1YlswXSwgc3ViWzFdKSA+IDApOyBicmVhazsKIAogICAgIGNhc2UgRUNPTkRfU1RSX0dU
SToKLSAgICB0ZW1wY29uZCA9IChzdHJjbXBpYyhzdWJbMF0sIHN1YlsxXSkgPiAwKTsKLSAgICBi
cmVhazsKKyAgICAgIHRlbXBjb25kID0gKHN0cmNtcGljKHN1YlswXSwgc3ViWzFdKSA+IDApOyBi
cmVhazsKIAogICAgIGNhc2UgRUNPTkRfU1RSX0dFOgotICAgIHRlbXBjb25kID0gKFVzdHJjbXAo
c3ViWzBdLCBzdWJbMV0pID49IDApOwotICAgIGJyZWFrOworICAgICAgdGVtcGNvbmQgPSAoVXN0
cmNtcChzdWJbMF0sIHN1YlsxXSkgPj0gMCk7IGJyZWFrOwogCiAgICAgY2FzZSBFQ09ORF9TVFJf
R0VJOgotICAgIHRlbXBjb25kID0gKHN0cmNtcGljKHN1YlswXSwgc3ViWzFdKSA+PSAwKTsKLSAg
ICBicmVhazsKKyAgICAgIHRlbXBjb25kID0gKHN0cmNtcGljKHN1YlswXSwgc3ViWzFdKSA+PSAw
KTsgYnJlYWs7CiAKICAgICBjYXNlIEVDT05EX01BVENIOiAgIC8qIFJlZ3VsYXIgZXhwcmVzc2lv
biBtYXRjaCAqLwotICAgIGlmICghKHJlID0gcGNyZV9jb21waWxlKENTIHN1YlsxXSwgUENSRV9D
T1BULCBDQ1NTICZyZXJyb3IsCi0JCQkgICAgJnJvZmZzZXQsIE5VTEwpKSkKICAgICAgIHsKLSAg
ICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJyZWd1bGFyIGV4cHJl
c3Npb24gZXJyb3IgaW4gIgotICAgICAgICAiXCIlc1wiOiAlcyBhdCBvZmZzZXQgJWQiLCBzdWJb
MV0sIHJlcnJvciwgcm9mZnNldCk7Ci0gICAgICByZXR1cm4gTlVMTDsKKyAgICAgIGNvbnN0IHBj
cmUyX2NvZGUgKiByZTsKKyAgICAgIFBDUkUyX1NJWkUgb2Zmc2V0OworICAgICAgaW50IGVycjsK
KworICAgICAgaWYgKCEocmUgPSBwY3JlMl9jb21waWxlKChQQ1JFMl9TUFRSKXN1YlsxXSwgUENS
RTJfWkVST19URVJNSU5BVEVELAorCQkJCVBDUkVfQ09QVCwgJmVyciwgJm9mZnNldCwgcGNyZV9j
bXBfY3R4KSkpCisJeworCXVzY2hhciBlcnJidWZbMTI4XTsKKwlwY3JlMl9nZXRfZXJyb3JfbWVz
c2FnZShlcnIsIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpOworCWV4cGFuZF9zdHJpbmdfbWVzc2Fn
ZSA9IHN0cmluZ19zcHJpbnRmKCJyZWd1bGFyIGV4cHJlc3Npb24gZXJyb3IgaW4gIgorCSAgIlwi
JXNcIjogJXMgYXQgb2Zmc2V0ICVsZCIsIHN1YlsxXSwgZXJyYnVmLCAobG9uZylvZmZzZXQpOwor
CXJldHVybiBOVUxMOworCX0KKworICAgICAgdGVtcGNvbmQgPSByZWdleF9tYXRjaF9hbmRfc2V0
dXAocmUsIHN1YlswXSwgMCwgLTEpOworICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgdGVtcGNv
bmQgPSByZWdleF9tYXRjaF9hbmRfc2V0dXAocmUsIHN1YlswXSwgMCwgLTEpOwotICAgIGJyZWFr
OwogCiAgICAgY2FzZSBFQ09ORF9NQVRDSF9BRERSRVNTOiAgLyogTWF0Y2ggaW4gYW4gYWRkcmVz
cyBsaXN0ICovCi0gICAgcmMgPSBtYXRjaF9hZGRyZXNzX2xpc3Qoc3ViWzBdLCBUUlVFLCBGQUxT
RSwgJihzdWJbMV0pLCBOVUxMLCAtMSwgMCwgTlVMTCk7Ci0gICAgZ290byBNQVRDSEVEX1NPTUVU
SElORzsKKyAgICAgIHJjID0gbWF0Y2hfYWRkcmVzc19saXN0KHN1YlswXSwgVFJVRSwgRkFMU0Us
ICYoc3ViWzFdKSwgTlVMTCwgLTEsIDAsCisJCQkgICAgICBDVVNTICZsb29rdXBfdmFsdWUpOwor
ICAgICAgZ290byBNQVRDSEVEX1NPTUVUSElORzsKIAogICAgIGNhc2UgRUNPTkRfTUFUQ0hfRE9N
QUlOOiAgIC8qIE1hdGNoIGluIGEgZG9tYWluIGxpc3QgKi8KLSAgICByYyA9IG1hdGNoX2lzaW5s
aXN0KHN1YlswXSwgJihzdWJbMV0pLCAwLCAmZG9tYWlubGlzdF9hbmNob3IsIE5VTEwsCi0gICAg
ICBNQ0xfRE9NQUlOICsgTUNMX05PRVhQQU5ELCBUUlVFLCBOVUxMKTsKLSAgICBnb3RvIE1BVENI
RURfU09NRVRISU5HOworICAgICAgcmMgPSBtYXRjaF9pc2lubGlzdChzdWJbMF0sICYoc3ViWzFd
KSwgMCwgJmRvbWFpbmxpc3RfYW5jaG9yLCBOVUxMLAorCU1DTF9ET01BSU4gKyBNQ0xfTk9FWFBB
TkQsIFRSVUUsIENVU1MgJmxvb2t1cF92YWx1ZSk7CisgICAgICBnb3RvIE1BVENIRURfU09NRVRI
SU5HOwogCiAgICAgY2FzZSBFQ09ORF9NQVRDSF9JUDogICAgICAgLyogTWF0Y2ggSVAgYWRkcmVz
cyBpbiBhIGhvc3QgbGlzdCAqLwotICAgIGlmIChzdWJbMF1bMF0gIT0gMCAmJiBzdHJpbmdfaXNf
aXBfYWRkcmVzcyhzdWJbMF0sIE5VTEwpID09IDApCi0gICAgICB7Ci0gICAgICBleHBhbmRfc3Ry
aW5nX21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigiXCIlc1wiIGlzIG5vdCBhbiBJUCBhZGRyZXNz
IiwKLSAgICAgICAgc3ViWzBdKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQotICAgIGVs
c2UKLSAgICAgIHsKLSAgICAgIHVuc2lnbmVkIGludCAqbnVsbGNhY2hlID0gTlVMTDsKLSAgICAg
IGNoZWNrX2hvc3RfYmxvY2sgY2I7CisgICAgICBpZiAoc3ViWzBdWzBdICE9IDAgJiYgc3RyaW5n
X2lzX2lwX2FkZHJlc3Moc3ViWzBdLCBOVUxMKSA9PSAwKQorCXsKKwlleHBhbmRfc3RyaW5nX21l
c3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigiXCIlc1wiIGlzIG5vdCBhbiBJUCBhZGRyZXNzIiwKKwkg
IHN1YlswXSk7CisJcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZQorCXsKKwl1bnNpZ25lZCBp
bnQgKm51bGxjYWNoZSA9IE5VTEw7CisJY2hlY2tfaG9zdF9ibG9jayBjYjsKIAotICAgICAgY2Iu
aG9zdF9uYW1lID0gVVMiIjsKLSAgICAgIGNiLmhvc3RfYWRkcmVzcyA9IHN1YlswXTsKKwljYi5o
b3N0X25hbWUgPSBVUyIiOworCWNiLmhvc3RfYWRkcmVzcyA9IHN1YlswXTsKIAotICAgICAgLyog
SWYgdGhlIGhvc3QgYWRkcmVzcyBzdGFydHMgb2ZmIDo6ZmZmZjogaXQgaXMgYW4gSVB2NiBhZGRy
ZXNzIGluCi0gICAgICBJUHY0LWNvbXBhdGlibGUgbW9kZS4gRmluZCB0aGUgSVB2NCBwYXJ0IGZv
ciBjaGVja2luZyBhZ2FpbnN0IElQdjQKLSAgICAgIGFkZHJlc3Nlcy4gKi8KLQotICAgICAgY2Iu
aG9zdF9pcHY0ID0gKFVzdHJuY21wKGNiLmhvc3RfYWRkcmVzcywgIjo6ZmZmZjoiLCA3KSA9PSAw
KT8KLSAgICAgICAgY2IuaG9zdF9hZGRyZXNzICsgNyA6IGNiLmhvc3RfYWRkcmVzczsKLQotICAg
ICAgcmMgPSBtYXRjaF9jaGVja19saXN0KAotICAgICAgICAgICAgICZzdWJbMV0sICAgICAgICAg
ICAgICAgICAgIC8qIHRoZSBsaXN0ICovCi0gICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgLyogc2VwYXJhdG9yIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgICZob3N0bGlz
dF9hbmNob3IsICAgICAgICAgIC8qIGFuY2hvciBwb2ludGVyICovCi0gICAgICAgICAgICAgJm51
bGxjYWNoZSwgICAgICAgICAgICAgICAgLyogY2FjaGUgcG9pbnRlciAqLwotICAgICAgICAgICAg
IGNoZWNrX2hvc3QsICAgICAgICAgICAgICAgIC8qIGZ1bmN0aW9uIGZvciB0ZXN0aW5nICovCi0g
ICAgICAgICAgICAgJmNiLCAgICAgICAgICAgICAgICAgICAgICAgLyogYXJndW1lbnQgZm9yIGZ1
bmN0aW9uICovCi0gICAgICAgICAgICAgTUNMX0hPU1QsICAgICAgICAgICAgICAgICAgLyogdHlw
ZSBvZiBjaGVjayAqLwotICAgICAgICAgICAgIHN1YlswXSwgICAgICAgICAgICAgICAgICAgIC8q
IHRleHQgZm9yIGRlYnVnZ2luZyAqLwotICAgICAgICAgICAgIE5VTEwpOyAgICAgICAgICAgICAg
ICAgICAgIC8qIHdoZXJlIHRvIHBhc3MgYmFjayBkYXRhICovCi0gICAgICB9Ci0gICAgZ290byBN
QVRDSEVEX1NPTUVUSElORzsKKwkvKiBJZiB0aGUgaG9zdCBhZGRyZXNzIHN0YXJ0cyBvZmYgOjpm
ZmZmOiBpdCBpcyBhbiBJUHY2IGFkZHJlc3MgaW4KKwlJUHY0LWNvbXBhdGlibGUgbW9kZS4gRmlu
ZCB0aGUgSVB2NCBwYXJ0IGZvciBjaGVja2luZyBhZ2FpbnN0IElQdjQKKwlhZGRyZXNzZXMuICov
CisKKwljYi5ob3N0X2lwdjQgPSAoVXN0cm5jbXAoY2IuaG9zdF9hZGRyZXNzLCAiOjpmZmZmOiIs
IDcpID09IDApPworCSAgY2IuaG9zdF9hZGRyZXNzICsgNyA6IGNiLmhvc3RfYWRkcmVzczsKKwor
CXJjID0gbWF0Y2hfY2hlY2tfbGlzdCgKKwkgICAgICAgJnN1YlsxXSwgICAgICAgICAgICAgICAg
ICAgLyogdGhlIGxpc3QgKi8KKwkgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyog
c2VwYXJhdG9yIGNoYXJhY3RlciAqLworCSAgICAgICAmaG9zdGxpc3RfYW5jaG9yLCAgICAgICAg
ICAvKiBhbmNob3IgcG9pbnRlciAqLworCSAgICAgICAmbnVsbGNhY2hlLCAgICAgICAgICAgICAg
ICAvKiBjYWNoZSBwb2ludGVyICovCisJICAgICAgIGNoZWNrX2hvc3QsICAgICAgICAgICAgICAg
IC8qIGZ1bmN0aW9uIGZvciB0ZXN0aW5nICovCisJICAgICAgICZjYiwgICAgICAgICAgICAgICAg
ICAgICAgIC8qIGFyZ3VtZW50IGZvciBmdW5jdGlvbiAqLworCSAgICAgICBNQ0xfSE9TVCwgICAg
ICAgICAgICAgICAgICAvKiB0eXBlIG9mIGNoZWNrICovCisJICAgICAgIHN1YlswXSwgICAgICAg
ICAgICAgICAgICAgIC8qIHRleHQgZm9yIGRlYnVnZ2luZyAqLworCSAgICAgICBDVVNTICZsb29r
dXBfdmFsdWUpOyAgICAgICAvKiB3aGVyZSB0byBwYXNzIGJhY2sgZGF0YSAqLworCX0KKyAgICAg
IGdvdG8gTUFUQ0hFRF9TT01FVEhJTkc7CiAKICAgICBjYXNlIEVDT05EX01BVENIX0xPQ0FMX1BB
UlQ6Ci0gICAgcmMgPSBtYXRjaF9pc2lubGlzdChzdWJbMF0sICYoc3ViWzFdKSwgMCwgJmxvY2Fs
cGFydGxpc3RfYW5jaG9yLCBOVUxMLAotICAgICAgTUNMX0xPQ0FMUEFSVCArIE1DTF9OT0VYUEFO
RCwgVFJVRSwgTlVMTCk7Ci0gICAgLyogRmFsbCB0aHJvdWdoICovCi0gICAgLyogVlZWVlZWVlZW
VlZWICovCi0gICAgTUFUQ0hFRF9TT01FVEhJTkc6Ci0gICAgc3dpdGNoKHJjKQotICAgICAgewot
ICAgICAgY2FzZSBPSzoKLSAgICAgIHRlbXBjb25kID0gVFJVRTsKLSAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIEZBSUw6Ci0gICAgICB0ZW1wY29uZCA9IEZBTFNFOwotICAgICAgYnJlYWs7Cisg
ICAgICByYyA9IG1hdGNoX2lzaW5saXN0KHN1YlswXSwgJihzdWJbMV0pLCAwLCAmbG9jYWxwYXJ0
bGlzdF9hbmNob3IsIE5VTEwsCisJTUNMX0xPQ0FMUEFSVCArIE1DTF9OT0VYUEFORCwgVFJVRSwg
Q1VTUyAmbG9va3VwX3ZhbHVlKTsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgICAgLyog
VlZWVlZWVlZWVlZWICovCisgICAgICBNQVRDSEVEX1NPTUVUSElORzoKKyAgICAgIHN3aXRjaChy
YykKKwl7CisJY2FzZSBPSzogICB0ZW1wY29uZCA9IFRSVUU7ICBicmVhazsKKwljYXNlIEZBSUw6
IHRlbXBjb25kID0gRkFMU0U7IGJyZWFrOwogCi0gICAgICBjYXNlIERFRkVSOgotICAgICAgZXhw
YW5kX3N0cmluZ19tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoInVuYWJsZSB0byBjb21wbGV0ZSBt
YXRjaCAiCi0gICAgICAgICJhZ2FpbnN0IFwiJXNcIjogJXMiLCBzdWJbMV0sIHNlYXJjaF9lcnJv
cl9tZXNzYWdlKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQorCWNhc2UgREVGRVI6CisJ
ICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigidW5hYmxlIHRvIGNvbXBs
ZXRlIG1hdGNoICIKKwkgICAgImFnYWluc3QgXCIlc1wiOiAlcyIsIHN1YlsxXSwgc2VhcmNoX2Vy
cm9yX21lc3NhZ2UpOworCSAgcmV0dXJuIE5VTEw7CisJfQogCi0gICAgYnJlYWs7CisgICAgICBi
cmVhazsKIAogICAgIC8qIFZhcmlvdXMgImVuY3J5cHRlZCIgY29tcGFyaXNvbnMuIElmIHRoZSBz
ZWNvbmQgc3RyaW5nIHN0YXJ0cyB3aXRoCiAgICAgInsiIHRoZW4gYW4gZW5jcnlwdGlvbiB0eXBl
IGlzIGdpdmVuLiBEZWZhdWx0IHRvIGNyeXB0KCkgb3IgY3J5cHQxNigpCkBAIC0zMDYxLDEzOCAr
MzAzMywxMzggQEAKIAogICAgIGNhc2UgRUNPTkRfQ1JZUFRFUToKICAgICAjaWZuZGVmIFNVUFBP
UlRfQ1JZUFRFUQotICAgIGdvdG8gQ09ORF9GQUlMRURfTk9UX0NPTVBJTEVEOworICAgICAgZ290
byBDT05EX0ZBSUxFRF9OT1RfQ09NUElMRUQ7CiAgICAgI2Vsc2UKLSAgICBpZiAoc3RybmNtcGlj
KHN1YlsxXSwgVVMie21kNX0iLCA1KSA9PSAwKQotICAgICAgewotICAgICAgaW50IHN1YmxlbiA9
IFVzdHJsZW4oc3ViWzFdKzUpOwotICAgICAgbWQ1IGJhc2U7Ci0gICAgICB1c2NoYXIgZGlnZXN0
WzE2XTsKLQotICAgICAgbWQ1X3N0YXJ0KCZiYXNlKTsKLSAgICAgIG1kNV9lbmQoJmJhc2UsIHN1
YlswXSwgVXN0cmxlbihzdWJbMF0pLCBkaWdlc3QpOwotCi0gICAgICAvKiBJZiB0aGUgbGVuZ3Ro
IHRoYXQgd2UgYXJlIGNvbXBhcmluZyBhZ2FpbnN0IGlzIDI0LCB0aGUgTUQ1IGRpZ2VzdAotICAg
ICAgaXMgZXhwcmVzc2VkIGFzIGEgYmFzZTY0IHN0cmluZy4gVGhpcyBpcyB0aGUgd2F5IExEQVAg
ZG9lcyBpdC4gSG93ZXZlciwKLSAgICAgIHNvbWUgb3RoZXIgc29mdHdhcmUgdXNlcyBhIHN0cmFp
Z2h0Zm9yd2FyZCBoZXggcmVwcmVzZW50YXRpb24uIFdlIGFzc3VtZQotICAgICAgdGhpcyBpZiB0
aGUgbGVuZ3RoIGlzIDMyLiBPdGhlciBsZW5ndGhzIGZhaWwuICovCi0KLSAgICAgIGlmIChzdWJs
ZW4gPT0gMjQpCi0gICAgICAgIHsKLSAgICAgICAgdXNjaGFyICpjb2RlZCA9IGI2NGVuY29kZShD
VVMgZGlnZXN0LCAxNik7Ci0gICAgICAgIERFQlVHKERfYXV0aCkgZGVidWdfcHJpbnRmKCJjcnlw
dGVxOiB1c2luZyBNRDUrQjY0IGhhc2hpbmdcbiIKLSAgICAgICAgICAiICBzdWJqZWN0PSVzXG4g
IGNyeXB0ZWQ9JXNcbiIsIGNvZGVkLCBzdWJbMV0rNSk7Ci0gICAgICAgIHRlbXBjb25kID0gKFVz
dHJjbXAoY29kZWQsIHN1YlsxXSs1KSA9PSAwKTsKLSAgICAgICAgfQotICAgICAgZWxzZSBpZiAo
c3VibGVuID09IDMyKQotICAgICAgICB7Ci0gICAgICAgIHVzY2hhciBjb2RlZFszNl07Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgc3ByaW50ZihDUyAoY29kZWQrMippKSwg
IiUwMlgiLCBkaWdlc3RbaV0pOwotICAgICAgICBjb2RlZFszMl0gPSAwOwotICAgICAgICBERUJV
RyhEX2F1dGgpIGRlYnVnX3ByaW50ZigiY3J5cHRlcTogdXNpbmcgTUQ1K2hleCBoYXNoaW5nXG4i
Ci0gICAgICAgICAgIiAgc3ViamVjdD0lc1xuICBjcnlwdGVkPSVzXG4iLCBjb2RlZCwgc3ViWzFd
KzUpOwotICAgICAgICB0ZW1wY29uZCA9IChzdHJjbXBpYyhjb2RlZCwgc3ViWzFdKzUpID09IDAp
OwotICAgICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgREVCVUcoRF9hdXRo
KSBkZWJ1Z19wcmludGYoImNyeXB0ZXE6IGxlbmd0aCBmb3IgTUQ1IG5vdCAyNCBvciAzMjogIgot
ICAgICAgICAgICJmYWlsXG4gIGNyeXB0ZWQ9JXNcbiIsIHN1YlsxXSs1KTsKLSAgICAgICAgdGVt
cGNvbmQgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgZWxzZSBpZiAoc3RybmNt
cGljKHN1YlsxXSwgVVMie3NoYTF9IiwgNikgPT0gMCkKLSAgICAgIHsKLSAgICAgIGludCBzdWJs
ZW4gPSBVc3RybGVuKHN1YlsxXSs2KTsKLSAgICAgIGhjdHggaDsKLSAgICAgIHVzY2hhciBkaWdl
c3RbMjBdOworICAgICAgaWYgKHN0cm5jbXBpYyhzdWJbMV0sIFVTInttZDV9IiwgNSkgPT0gMCkK
Kwl7CisJaW50IHN1YmxlbiA9IFVzdHJsZW4oc3ViWzFdKzUpOworCW1kNSBiYXNlOworCXVzY2hh
ciBkaWdlc3RbMTZdOworCisJbWQ1X3N0YXJ0KCZiYXNlKTsKKwltZDVfZW5kKCZiYXNlLCBzdWJb
MF0sIFVzdHJsZW4oc3ViWzBdKSwgZGlnZXN0KTsKKworCS8qIElmIHRoZSBsZW5ndGggdGhhdCB3
ZSBhcmUgY29tcGFyaW5nIGFnYWluc3QgaXMgMjQsIHRoZSBNRDUgZGlnZXN0CisJaXMgZXhwcmVz
c2VkIGFzIGEgYmFzZTY0IHN0cmluZy4gVGhpcyBpcyB0aGUgd2F5IExEQVAgZG9lcyBpdC4gSG93
ZXZlciwKKwlzb21lIG90aGVyIHNvZnR3YXJlIHVzZXMgYSBzdHJhaWdodGZvcndhcmQgaGV4IHJl
cHJlc2VudGF0aW9uLiBXZSBhc3N1bWUKKwl0aGlzIGlmIHRoZSBsZW5ndGggaXMgMzIuIE90aGVy
IGxlbmd0aHMgZmFpbC4gKi8KKworCWlmIChzdWJsZW4gPT0gMjQpCisJICB7CisJICB1c2NoYXIg
KmNvZGVkID0gYjY0ZW5jb2RlKENVUyBkaWdlc3QsIDE2KTsKKwkgIERFQlVHKERfYXV0aCkgZGVi
dWdfcHJpbnRmKCJjcnlwdGVxOiB1c2luZyBNRDUrQjY0IGhhc2hpbmdcbiIKKwkgICAgIiAgc3Vi
amVjdD0lc1xuICBjcnlwdGVkPSVzXG4iLCBjb2RlZCwgc3ViWzFdKzUpOworCSAgdGVtcGNvbmQg
PSAoVXN0cmNtcChjb2RlZCwgc3ViWzFdKzUpID09IDApOworCSAgfQorCWVsc2UgaWYgKHN1Ymxl
biA9PSAzMikKKwkgIHsKKwkgIHVzY2hhciBjb2RlZFszNl07CisJICBmb3IgKGludCBpID0gMDsg
aSA8IDE2OyBpKyspIHNwcmludGYoQ1MgKGNvZGVkKzIqaSksICIlMDJYIiwgZGlnZXN0W2ldKTsK
KwkgIGNvZGVkWzMyXSA9IDA7CisJICBERUJVRyhEX2F1dGgpIGRlYnVnX3ByaW50ZigiY3J5cHRl
cTogdXNpbmcgTUQ1K2hleCBoYXNoaW5nXG4iCisJICAgICIgIHN1YmplY3Q9JXNcbiAgY3J5cHRl
ZD0lc1xuIiwgY29kZWQsIHN1YlsxXSs1KTsKKwkgIHRlbXBjb25kID0gKHN0cmNtcGljKGNvZGVk
LCBzdWJbMV0rNSkgPT0gMCk7CisJICB9CisJZWxzZQorCSAgeworCSAgREVCVUcoRF9hdXRoKSBk
ZWJ1Z19wcmludGYoImNyeXB0ZXE6IGxlbmd0aCBmb3IgTUQ1IG5vdCAyNCBvciAzMjogIgorCSAg
ICAiZmFpbFxuICBjcnlwdGVkPSVzXG4iLCBzdWJbMV0rNSk7CisJICB0ZW1wY29uZCA9IEZBTFNF
OworCSAgfQorCX0KIAotICAgICAgc2hhMV9zdGFydCgmaCk7Ci0gICAgICBzaGExX2VuZCgmaCwg
c3ViWzBdLCBVc3RybGVuKHN1YlswXSksIGRpZ2VzdCk7CisgICAgICBlbHNlIGlmIChzdHJuY21w
aWMoc3ViWzFdLCBVUyJ7c2hhMX0iLCA2KSA9PSAwKQorCXsKKwlpbnQgc3VibGVuID0gVXN0cmxl
bihzdWJbMV0rNik7CisJaGN0eCBoOworCXVzY2hhciBkaWdlc3RbMjBdOwogCi0gICAgICAvKiBJ
ZiB0aGUgbGVuZ3RoIHRoYXQgd2UgYXJlIGNvbXBhcmluZyBhZ2FpbnN0IGlzIDI4LCBhc3N1bWUg
dGhlIFNIQTEKLSAgICAgIGRpZ2VzdCBpcyBleHByZXNzZWQgYXMgYSBiYXNlNjQgc3RyaW5nLiBJ
ZiB0aGUgbGVuZ3RoIGlzIDQwLCBhc3N1bWUgYQotICAgICAgc3RyYWlnaHRmb3J3YXJkIGhleCBy
ZXByZXNlbnRhdGlvbi4gT3RoZXIgbGVuZ3RocyBmYWlsLiAqLworCXNoYTFfc3RhcnQoJmgpOwor
CXNoYTFfZW5kKCZoLCBzdWJbMF0sIFVzdHJsZW4oc3ViWzBdKSwgZGlnZXN0KTsKIAotICAgICAg
aWYgKHN1YmxlbiA9PSAyOCkKLSAgICAgICAgewotICAgICAgICB1c2NoYXIgKmNvZGVkID0gYjY0
ZW5jb2RlKENVUyBkaWdlc3QsIDIwKTsKLSAgICAgICAgREVCVUcoRF9hdXRoKSBkZWJ1Z19wcmlu
dGYoImNyeXB0ZXE6IHVzaW5nIFNIQTErQjY0IGhhc2hpbmdcbiIKLSAgICAgICAgICAiICBzdWJq
ZWN0PSVzXG4gIGNyeXB0ZWQ9JXNcbiIsIGNvZGVkLCBzdWJbMV0rNik7Ci0gICAgICAgIHRlbXBj
b25kID0gKFVzdHJjbXAoY29kZWQsIHN1YlsxXSs2KSA9PSAwKTsKLSAgICAgICAgfQotICAgICAg
ZWxzZSBpZiAoc3VibGVuID09IDQwKQotICAgICAgICB7Ci0gICAgICAgIHVzY2hhciBjb2RlZFs0
NF07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjA7IGkrKykgc3ByaW50ZihDUyAoY29k
ZWQrMippKSwgIiUwMlgiLCBkaWdlc3RbaV0pOwotICAgICAgICBjb2RlZFs0MF0gPSAwOwotICAg
ICAgICBERUJVRyhEX2F1dGgpIGRlYnVnX3ByaW50ZigiY3J5cHRlcTogdXNpbmcgU0hBMStoZXgg
aGFzaGluZ1xuIgotICAgICAgICAgICIgIHN1YmplY3Q9JXNcbiAgY3J5cHRlZD0lc1xuIiwgY29k
ZWQsIHN1YlsxXSs2KTsKLSAgICAgICAgdGVtcGNvbmQgPSAoc3RyY21waWMoY29kZWQsIHN1Ylsx
XSs2KSA9PSAwKTsKLSAgICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgIERF
QlVHKERfYXV0aCkgZGVidWdfcHJpbnRmKCJjcnlwdGVxOiBsZW5ndGggZm9yIFNIQS0xIG5vdCAy
OCBvciA0MDogIgotICAgICAgICAgICJmYWlsXG4gIGNyeXB0ZWQ9JXNcbiIsIHN1YlsxXSs2KTsK
LQl0ZW1wY29uZCA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICB9CisJLyogSWYgdGhlIGxlbmd0
aCB0aGF0IHdlIGFyZSBjb21wYXJpbmcgYWdhaW5zdCBpcyAyOCwgYXNzdW1lIHRoZSBTSEExCisJ
ZGlnZXN0IGlzIGV4cHJlc3NlZCBhcyBhIGJhc2U2NCBzdHJpbmcuIElmIHRoZSBsZW5ndGggaXMg
NDAsIGFzc3VtZSBhCisJc3RyYWlnaHRmb3J3YXJkIGhleCByZXByZXNlbnRhdGlvbi4gT3RoZXIg
bGVuZ3RocyBmYWlsLiAqLworCisJaWYgKHN1YmxlbiA9PSAyOCkKKwkgIHsKKwkgIHVzY2hhciAq
Y29kZWQgPSBiNjRlbmNvZGUoQ1VTIGRpZ2VzdCwgMjApOworCSAgREVCVUcoRF9hdXRoKSBkZWJ1
Z19wcmludGYoImNyeXB0ZXE6IHVzaW5nIFNIQTErQjY0IGhhc2hpbmdcbiIKKwkgICAgIiAgc3Vi
amVjdD0lc1xuICBjcnlwdGVkPSVzXG4iLCBjb2RlZCwgc3ViWzFdKzYpOworCSAgdGVtcGNvbmQg
PSAoVXN0cmNtcChjb2RlZCwgc3ViWzFdKzYpID09IDApOworCSAgfQorCWVsc2UgaWYgKHN1Ymxl
biA9PSA0MCkKKwkgIHsKKwkgIHVzY2hhciBjb2RlZFs0NF07CisJICBmb3IgKGludCBpID0gMDsg
aSA8IDIwOyBpKyspIHNwcmludGYoQ1MgKGNvZGVkKzIqaSksICIlMDJYIiwgZGlnZXN0W2ldKTsK
KwkgIGNvZGVkWzQwXSA9IDA7CisJICBERUJVRyhEX2F1dGgpIGRlYnVnX3ByaW50ZigiY3J5cHRl
cTogdXNpbmcgU0hBMStoZXggaGFzaGluZ1xuIgorCSAgICAiICBzdWJqZWN0PSVzXG4gIGNyeXB0
ZWQ9JXNcbiIsIGNvZGVkLCBzdWJbMV0rNik7CisJICB0ZW1wY29uZCA9IChzdHJjbXBpYyhjb2Rl
ZCwgc3ViWzFdKzYpID09IDApOworCSAgfQorCWVsc2UKKwkgIHsKKwkgIERFQlVHKERfYXV0aCkg
ZGVidWdfcHJpbnRmKCJjcnlwdGVxOiBsZW5ndGggZm9yIFNIQS0xIG5vdCAyOCBvciA0MDogIgor
CSAgICAiZmFpbFxuICBjcnlwdGVkPSVzXG4iLCBzdWJbMV0rNik7CisJICB0ZW1wY29uZCA9IEZB
TFNFOworCSAgfQorCX0KIAotICAgIGVsc2UgICAvKiB7Y3J5cHR9IG9yIHtjcnlwdDE2fSBhbmQg
bm9uLXsgYXQgc3RhcnQgKi8KLSAgICAgICAgICAgLyogfS1mb3ItdGV4dC1lZGl0b3JzICovCi0g
ICAgICB7Ci0gICAgICBpbnQgd2hpY2ggPSAwOwotICAgICAgdXNjaGFyICpjb2RlZDsKKyAgICAg
IGVsc2UgICAvKiB7Y3J5cHR9IG9yIHtjcnlwdDE2fSBhbmQgbm9uLXsgYXQgc3RhcnQgKi8KKwkg
ICAgIC8qIH0tZm9yLXRleHQtZWRpdG9ycyAqLworCXsKKwlpbnQgd2hpY2ggPSAwOworCXVzY2hh
ciAqY29kZWQ7CiAKLSAgICAgIGlmIChzdHJuY21waWMoc3ViWzFdLCBVUyJ7Y3J5cHR9IiwgNykg
PT0gMCkKLSAgICAgICAgewotICAgICAgICBzdWJbMV0gKz0gNzsKLSAgICAgICAgd2hpY2ggPSAx
OwotICAgICAgICB9Ci0gICAgICBlbHNlIGlmIChzdHJuY21waWMoc3ViWzFdLCBVUyJ7Y3J5cHQx
Nn0iLCA5KSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgIHN1YlsxXSArPSA5OwotICAgICAgICB3
aGljaCA9IDI7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UgaWYgKHN1YlsxXVswXSA9PSAneycpCQkv
KiB9LWZvci10ZXh0LWVkaXRvcnMgKi8KLSAgICAgICAgewotICAgICAgICBleHBhbmRfc3RyaW5n
X21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigidW5rbm93biBlbmNyeXB0aW9uIG1lY2hhbmlzbSAi
Ci0gICAgICAgICAgImluIFwiJXNcIiIsIHN1YlsxXSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgICAgICB9CisJaWYgKHN0cm5jbXBpYyhzdWJbMV0sIFVTIntjcnlwdH0iLCA3KSA9PSAwKQor
CSAgeworCSAgc3ViWzFdICs9IDc7CisJICB3aGljaCA9IDE7CisJICB9CisJZWxzZSBpZiAoc3Ry
bmNtcGljKHN1YlsxXSwgVVMie2NyeXB0MTZ9IiwgOSkgPT0gMCkKKwkgIHsKKwkgIHN1YlsxXSAr
PSA5OworCSAgd2hpY2ggPSAyOworCSAgfQorCWVsc2UgaWYgKHN1YlsxXVswXSA9PSAneycpCQkv
KiB9LWZvci10ZXh0LWVkaXRvcnMgKi8KKwkgIHsKKwkgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9
IHN0cmluZ19zcHJpbnRmKCJ1bmtub3duIGVuY3J5cHRpb24gbWVjaGFuaXNtICIKKwkgICAgImlu
IFwiJXNcIiIsIHN1YlsxXSk7CisJICByZXR1cm4gTlVMTDsKKwkgIH0KIAotICAgICAgc3dpdGNo
KHdoaWNoKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgMDogIGNvZGVkID0gVVMgREVGQVVMVF9D
UllQVChDUyBzdWJbMF0sIENTIHN1YlsxXSk7IGJyZWFrOwotICAgICAgICBjYXNlIDE6ICBjb2Rl
ZCA9IFVTIGNyeXB0KENTIHN1YlswXSwgQ1Mgc3ViWzFdKTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6IGNvZGVkID0gVVMgY3J5cHQxNihDUyBzdWJbMF0sIENTIHN1YlsxXSk7IGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICNkZWZpbmUgU1RSKHMpICMgcwotICAgICAgI2RlZmluZSBYU1RSKHMp
IFNUUihzKQotICAgICAgREVCVUcoRF9hdXRoKSBkZWJ1Z19wcmludGYoImNyeXB0ZXE6IHVzaW5n
ICVzKClcbiIKLSAgICAgICAgIiAgc3ViamVjdD0lc1xuICBjcnlwdGVkPSVzXG4iLAotICAgICAg
ICB3aGljaCA9PSAwID8gWFNUUihERUZBVUxUX0NSWVBUKSA6IHdoaWNoID09IDEgPyAiY3J5cHQi
IDogImNyeXB0MTYiLAotICAgICAgICBjb2RlZCwgc3ViWzFdKTsKLSAgICAgICN1bmRlZiBTVFIK
LSAgICAgICN1bmRlZiBYU1RSCi0KLSAgICAgIC8qIElmIHRoZSBlbmNyeXB0ZWQgc3RyaW5nIGNv
bnRhaW5zIGZld2VyIHRoYW4gdHdvIGNoYXJhY3RlcnMgKGZvciB0aGUKLSAgICAgIHNhbHQpLCBm
b3JjZSBmYWlsdXJlLiBPdGhlcndpc2Ugd2UgZ2V0IGZhbHNlIHBvc2l0aXZlczogd2l0aCBhbiBl
bXB0eQotICAgICAgc3RyaW5nIHRoZSB5aWVsZCBvZiBjcnlwdCgpIGlzIGFuIGVtcHR5IHN0cmlu
ZyEgKi8KLQotICAgICAgaWYgKGNvZGVkKQotCXRlbXBjb25kID0gVXN0cmxlbihzdWJbMV0pIDwg
MiA/IEZBTFNFIDogVXN0cmNtcChjb2RlZCwgc3ViWzFdKSA9PSAwOwotICAgICAgZWxzZSBpZiAo
ZXJybm8gPT0gRUlOVkFMKQotCXRlbXBjb25kID0gRkFMU0U7Ci0gICAgICBlbHNlCi0JewotCWV4
cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJjcnlwdCBlcnJvcjogJXNcbiIs
Ci0JICBVUyBzdHJlcnJvcihlcnJubykpOwotCXJldHVybiBOVUxMOworCXN3aXRjaCh3aGljaCkK
KwkgIHsKKwkgIGNhc2UgMDogIGNvZGVkID0gVVMgREVGQVVMVF9DUllQVChDUyBzdWJbMF0sIENT
IHN1YlsxXSk7IGJyZWFrOworCSAgY2FzZSAxOiAgY29kZWQgPSBVUyBjcnlwdChDUyBzdWJbMF0s
IENTIHN1YlsxXSk7IGJyZWFrOworCSAgZGVmYXVsdDogY29kZWQgPSBVUyBjcnlwdDE2KENTIHN1
YlswXSwgQ1Mgc3ViWzFdKTsgYnJlYWs7CisJICB9CisKKwkjZGVmaW5lIFNUUihzKSAjIHMKKwkj
ZGVmaW5lIFhTVFIocykgU1RSKHMpCisJREVCVUcoRF9hdXRoKSBkZWJ1Z19wcmludGYoImNyeXB0
ZXE6IHVzaW5nICVzKClcbiIKKwkgICIgIHN1YmplY3Q9JXNcbiAgY3J5cHRlZD0lc1xuIiwKKwkg
IHdoaWNoID09IDAgPyBYU1RSKERFRkFVTFRfQ1JZUFQpIDogd2hpY2ggPT0gMSA/ICJjcnlwdCIg
OiAiY3J5cHQxNiIsCisJICBjb2RlZCwgc3ViWzFdKTsKKwkjdW5kZWYgU1RSCisJI3VuZGVmIFhT
VFIKKworCS8qIElmIHRoZSBlbmNyeXB0ZWQgc3RyaW5nIGNvbnRhaW5zIGZld2VyIHRoYW4gdHdv
IGNoYXJhY3RlcnMgKGZvciB0aGUKKwlzYWx0KSwgZm9yY2UgZmFpbHVyZS4gT3RoZXJ3aXNlIHdl
IGdldCBmYWxzZSBwb3NpdGl2ZXM6IHdpdGggYW4gZW1wdHkKKwlzdHJpbmcgdGhlIHlpZWxkIG9m
IGNyeXB0KCkgaXMgYW4gZW1wdHkgc3RyaW5nISAqLworCisJaWYgKGNvZGVkKQorCSAgdGVtcGNv
bmQgPSBVc3RybGVuKHN1YlsxXSkgPCAyID8gRkFMU0UgOiBVc3RyY21wKGNvZGVkLCBzdWJbMV0p
ID09IDA7CisJZWxzZSBpZiAoZXJybm8gPT0gRUlOVkFMKQorCSAgdGVtcGNvbmQgPSBGQUxTRTsK
KwllbHNlCisJICB7CisJICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50Zigi
Y3J5cHQgZXJyb3I6ICVzXG4iLAorCSAgICBVUyBzdHJlcnJvcihlcnJubykpOworCSAgcmV0dXJu
IE5VTEw7CisJICB9CiAJfQotICAgICAgfQotICAgIGJyZWFrOworICAgICAgYnJlYWs7CiAgICAg
I2VuZGlmICAvKiBTVVBQT1JUX0NSWVBURVEgKi8KIAogICAgIGNhc2UgRUNPTkRfSU5MSVNUOgpA
QCAtMzIxNSw2ICszMTg3LDcgQEAKICAgICAgICAgaWYgKGNvbXBhcmUoc3ViWzBdLCBpdGVyYXRl
X2l0ZW0pID09IDApCiAgICAgICAgICAgewogICAgICAgICAgIHRlbXBjb25kID0gVFJVRTsKKwkg
IGxvb2t1cF92YWx1ZSA9IGl0ZXJhdGVfaXRlbTsKICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICB9CiAJfQpAQCAtMzQ0NSwxNCArMzQxOCwxNSBAQAogICAgIHJldHVybiBzOwogICAgIH0KIAot
I2lmZGVmIEVYUEVSSU1FTlRBTF9TUlNfTkFUSVZFCisjaWZkZWYgU1VQUE9SVF9TUlMKICAgY2Fz
ZSBFQ09ORF9JTkJPVU5EX1NSUzoKICAgICAvKiAke2lmIGluYm91bmRfc3JzIHtsb2NhbF9wYXJ0
fXtzZWNyZXR9ICB7eWVzfXtub319ICovCiAgICAgewogICAgIHVzY2hhciAqIHN1YlsyXTsKLSAg
ICBjb25zdCBwY3JlICogcmU7Ci0gICAgaW50IG92ZWNbMyooNCsxKV07Ci0gICAgaW50IG47Cisg
ICAgY29uc3QgcGNyZTJfY29kZSAqIHJlOworICAgIHBjcmUyX21hdGNoX2RhdGEgKiBtZDsKKyAg
ICBQQ1JFMl9TSVpFICogb3ZlYzsKKyAgICBpbnQgcXVvdGluZyA9IDA7CiAgICAgdXNjaGFyIGNr
c3VtWzRdOwogICAgIEJPT0wgYm9vbHZhbHVlID0gRkFMU0U7CiAKQEAgLTM0NjgsMTggKzM0NDIs
MzAgQEAKIAogICAgIHJlID0gcmVnZXhfbXVzdF9jb21waWxlKFVTIl4oP2kpU1JTMD0oW149XSsp
PShbQS1aMi03XSspPShbXj1dKik9KC4qKSQiLAogCQkJICAgIFRSVUUsIEZBTFNFKTsKLSAgICBp
ZiAocGNyZV9leGVjKHJlLCBOVUxMLCBDUyBzdWJbMF0sIFVzdHJsZW4oc3ViWzBdKSwgMCwgUENS
RV9FT1BULAotCQkgIG92ZWMsIG5lbGVtKG92ZWMpKSA8IDApCisgICAgbWQgPSBwY3JlMl9tYXRj
aF9kYXRhX2NyZWF0ZSg0KzEsIHBjcmVfZ2VuX2N0eCk7CisgICAgaWYgKHBjcmUyX21hdGNoKHJl
LCBzdWJbMF0sIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCwgMCwgUENSRV9FT1BULAorCQkgICAgbWQs
IHBjcmVfbXRjX2N0eCkgPCAwKQogICAgICAgewogICAgICAgREVCVUcoRF9leHBhbmQpIGRlYnVn
X3ByaW50Zigibm8gbWF0Y2ggZm9yIFNSUydkIGxvY2FsLXBhcnQgcGF0dGVyblxuIik7CiAgICAg
ICBnb3RvIHNyc19yZXN1bHQ7CiAgICAgICB9CisgICAgb3ZlYyA9IHBjcmUyX2dldF9vdmVjdG9y
X3BvaW50ZXIobWQpOwogCi0gICAgLyogU2lkZS1lZmZlY3Q6IHJlY29yZCB0aGUgZGVjb2RlZCBy
ZWNpcGllbnQgKi8KLQotICAgIHNyc19yZWNpcGllbnQgPSBzdHJpbmdfc3ByaW50ZigiJS4qU0Al
LipTIiwgICAJCS8qIGxvd2VyY2FzZWQgKi8KLQkJICAgICAgb3ZlY1s5XS1vdmVjWzhdLCBzdWJb
MF0gKyBvdmVjWzhdLAkvKiBzdWJzdHJpbmcgNCAqLwotCQkgICAgICBvdmVjWzddLW92ZWNbNl0s
IHN1YlswXSArIG92ZWNbNl0pOwkvKiBzdWJzdHJpbmcgMyAqLworICAgIGlmIChzdWJbMF1bMF0g
PT0gJyInKQorICAgICAgcXVvdGluZyA9IDE7CisgICAgZWxzZSBmb3IgKHVzY2hhciAqIHMgPSBz
dWJbMF07ICpzOyBzKyspCisgICAgICBpZiAoIWlzYWxudW0oKnMpICYmIFVzdHJjaHIoIi4hIyQl
JicqKy0vPT9eX2B7fH1+IiwgKnMpID09IE5VTEwpCisJeyBxdW90aW5nID0gMTsgYnJlYWs7IH0K
KyAgICBpZiAocXVvdGluZykKKyAgICAgIERFQlVHKERfZXhwYW5kKSBkZWJ1Z19wcmludGZfaW5k
ZW50KCJhdXRvLXF1b3RpbmcgbG9jYWwgcGFydFxuIik7CisKKyAgICAvKiBSZWNvcmQgdGhlIChx
dW90ZWQsIGlmIG5lZWRlZCkgZGVjb2RlZCByZWNpcGllbnQgYXMgJHNyc19yZWNpcGllbnQgKi8K
KworICAgIHNyc19yZWNpcGllbnQgPSBzdHJpbmdfc3ByaW50ZigiJS4qcyUuKlMlLipzQCUuKlMi
LCAgIAkvKiBsb3dlcmNhc2VkICovCisJCSAgICAgIHF1b3RpbmcsICJcIiIsCisJCSAgICAgIChp
bnQpIChvdmVjWzldLW92ZWNbOF0pLCBzdWJbMF0gKyBvdmVjWzhdLCAgLyogc3Vic3RyIDQgKi8K
KwkJICAgICAgcXVvdGluZywgIlwiIiwKKwkJICAgICAgKGludCkgKG92ZWNbN10tb3ZlY1s2XSks
IHN1YlswXSArIG92ZWNbNl0pOyAvKiBzdWJzdHIgMyAqLwogCiAgICAgLyogSWYgYSB6ZXJvLWxl
bmd0aCBzZWNyZXQgd2FzIGdpdmVuLCB3ZSdyZSBkb25lLiAgT3RoZXJ3aXNlIGNhcnJ5IG9uCiAg
ICAgYW5kIHZhbGlkYXRlIHRoZSBnaXZlbiBTUlMgbG9jYWxfcGFydCBhZ2FpbnQgb3VyIHNlY3Jl
dC4gKi8KQEAgLTM0OTUsNiArMzQ4MSw3IEBACiAgICAgICBzdHJ1Y3QgdGltZXZhbCBub3c7CiAg
ICAgICB1c2NoYXIgKiBzcyA9IHN1YlswXSArIG92ZWNbNF07CS8qIHN1YnN0cmluZyAyLCB0aGUg
dGltZXN0YW1wICovCiAgICAgICBsb25nIGQ7CisgICAgICBpbnQgbjsKIAogICAgICAgZ2V0dGlt
ZW9mZGF5KCZub3csIE5VTEwpOwogICAgICAgbm93LnR2X3NlYyAvPSA4NjQwMDsJCS8qIGRheXMg
c2luY2UgZXBvY2ggKi8KQEAgLTM1MzcsNyArMzUyNCw3IEBACiAgICAgaWYgKHlpZWxkKSAqeWll
bGQgPSAoYm9vbHZhbHVlID09IHRlc3Rmb3IpOwogICAgIHJldHVybiBzOwogICAgIH0KLSNlbmRp
ZiAvKkVYUEVSSU1FTlRBTF9TUlNfTkFUSVZFKi8KKyNlbmRpZiAvKlNVUFBPUlRfU1JTKi8KIAog
ICAvKiBVbmtub3duIGNvbmRpdGlvbiAqLwogCkBAIC0zNTg4LDcgKzM1NzUsNyBAQAogKi8KIAog
c3RhdGljIGludAotc2F2ZV9leHBhbmRfc3RyaW5ncyh1c2NoYXIgKipzYXZlX2V4cGFuZF9uc3Ry
aW5nLCBpbnQgKnNhdmVfZXhwYW5kX25sZW5ndGgpCitzYXZlX2V4cGFuZF9zdHJpbmdzKGNvbnN0
IHVzY2hhciAqKnNhdmVfZXhwYW5kX25zdHJpbmcsIGludCAqc2F2ZV9leHBhbmRfbmxlbmd0aCkK
IHsKIGZvciAoaW50IGkgPSAwOyBpIDw9IGV4cGFuZF9ubWF4OyBpKyspCiAgIHsKQEAgLTM2MTUs
NyArMzYwMiw3IEBACiAqLwogCiBzdGF0aWMgdm9pZAotcmVzdG9yZV9leHBhbmRfc3RyaW5ncyhp
bnQgc2F2ZV9leHBhbmRfbm1heCwgdXNjaGFyICoqc2F2ZV9leHBhbmRfbnN0cmluZywKK3Jlc3Rv
cmVfZXhwYW5kX3N0cmluZ3MoaW50IHNhdmVfZXhwYW5kX25tYXgsIGNvbnN0IHVzY2hhciAqKnNh
dmVfZXhwYW5kX25zdHJpbmcsCiAgIGludCAqc2F2ZV9leHBhbmRfbmxlbmd0aCkKIHsKIGV4cGFu
ZF9ubWF4ID0gc2F2ZV9leHBhbmRfbm1heDsKQEAgLTM4MjksOCArMzgxNiw4IEBACiBzdGF0aWMg
dXNjaGFyICoKIHBydnNfZGF5c3RhbXAoaW50IGRheV9vZmZzZXQpCiB7Ci11c2NoYXIgKmRheXMg
PSBzdG9yZV9nZXQoMzIsIEZBTFNFKTsgICAgICAgICAvKiBOZWVkIGF0IGxlYXN0IDI0IGZvciBj
YXNlcyAqLwotKHZvaWQpc3RyaW5nX2Zvcm1hdChkYXlzLCAzMiwgVElNRV9UX0ZNVCwgICAgLyog
d2hlcmUgVElNRV9UX0ZNVCBpcyAlbGxkICovCit1c2NoYXIgKiBkYXlzID0gc3RvcmVfZ2V0KDMy
LCBHRVRfVU5UQUlOVEVEKTsgICAgICAvKiBOZWVkIGF0IGxlYXN0IDI0IGZvciBjYXNlcyAqLwor
KHZvaWQpc3RyaW5nX2Zvcm1hdChkYXlzLCAzMiwgVElNRV9UX0ZNVCwgCSAgIC8qIHdoZXJlIFRJ
TUVfVF9GTVQgaXMgJWxsZCAqLwogICAodGltZShOVUxMKSArIGRheV9vZmZzZXQqODY0MDApLzg2
NDAwKTsKIHJldHVybiAoVXN0cmxlbihkYXlzKSA+PSAzKSA/ICZkYXlzW1VzdHJsZW4oZGF5cykt
M10gOiBVUyIxMDAiOwogfQpAQCAtMzkwMSw3ICszODg4LDcgQEAKIAogLyogSGFzaGluZyBpcyBk
ZWVtZWQgc3VmZmljaWVudCB0byBkZS10YWludCBhbnkgaW5wdXQgZGF0YSAqLwogCi1wID0gZmlu
YWxoYXNoX2hleCA9IHN0b3JlX2dldCg0MCwgRkFMU0UpOworcCA9IGZpbmFsaGFzaF9oZXggPSBz
dG9yZV9nZXQoNDAsIEdFVF9VTlRBSU5URUQpOwogZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKysp
CiAgIHsKICAgKnArKyA9IGhleF9kaWdpdHNbKGZpbmFsaGFzaFtpXSAmIDB4ZjApID4+IDRdOwpA
QCAtMzkzMiw3ICszOTE5LDcgQEAKICovCiAKIGdzdHJpbmcgKgotY2F0X2ZpbGUoRklMRSAqZiwg
Z3N0cmluZyAqeWllbGQsIHVzY2hhciAqZW9sKQorY2F0X2ZpbGUoRklMRSAqIGYsIGdzdHJpbmcg
KiB5aWVsZCwgdXNjaGFyICogZW9sKQogewogdXNjaGFyIGJ1ZmZlclsxMDI0XTsKIApAQCAtMzk0
NCw4ICszOTMxLDYgQEAKICAgaWYgKGVvbCAmJiBidWZmZXJbbGVuXSkKICAgICB5aWVsZCA9IHN0
cmluZ19jYXQoeWllbGQsIGVvbCk7CiAgIH0KLQotKHZvaWQpIHN0cmluZ19mcm9tX2dzdHJpbmco
eWllbGQpOwogcmV0dXJuIHlpZWxkOwogfQogCkBAIC0zOTY3LDcgKzM5NTIsNiBAQAogLyogV2Ug
YXNzdW1lIHRoYXQgYWxsIGVycm9ycywgYW5kIGFueSByZXR1cm5zIG9mIHplcm8gYnl0ZXMsCiBh
cmUgYWN0dWFsbHkgRU9GLiAqLwogCi0odm9pZCkgc3RyaW5nX2Zyb21fZ3N0cmluZyh5aWVsZCk7
CiByZXR1cm4geWllbGQ7CiB9CiAjZW5kaWYKQEAgLTQyOTMsNiArNDI3NywxMjcgQEAKIH0KIAog
CisvKiBFeHBhbmQgYSBuYW1lZCBsaXN0LiAgUmV0dXJuIGZhbHNlIG9uIGZhaWx1cmUuICovCitz
dGF0aWMgZ3N0cmluZyAqCitleHBhbmRfbGlzdG5hbWVkKGdzdHJpbmcgKiB5aWVsZCwgY29uc3Qg
dXNjaGFyICogbmFtZSwgY29uc3QgdXNjaGFyICogbGlzdHR5cGUpCit7Cit0cmVlX25vZGUgKnQg
PSBOVUxMOworY29uc3QgdXNjaGFyICogbGlzdDsKK2ludCBzZXAgPSAwOwordXNjaGFyICogaXRl
bTsKK0JPT0wgbmVlZHNlcCA9IEZBTFNFOworI2RlZmluZSBMSVNUTkFNRURfQlVGX1NJWkUgMjU2
Cit1c2NoYXIgYltMSVNUTkFNRURfQlVGX1NJWkVdOwordXNjaGFyICogYnVmZmVyID0gYjsKKwor
aWYgKCpuYW1lID09ICcrJykgbmFtZSsrOworaWYgKCFsaXN0dHlwZSkJCS8qIG5vLWFyZ3VtZW50
IHZlcnNpb24gKi8KKyAgeworICBpZiAoICAhKHQgPSB0cmVlX3NlYXJjaChhZGRyZXNzbGlzdF9h
bmNob3IsIG5hbWUpKQorICAgICAmJiAhKHQgPSB0cmVlX3NlYXJjaChkb21haW5saXN0X2FuY2hv
ciwgIG5hbWUpKQorICAgICAmJiAhKHQgPSB0cmVlX3NlYXJjaChob3N0bGlzdF9hbmNob3IsICAg
IG5hbWUpKSkKKyAgICB0ID0gdHJlZV9zZWFyY2gobG9jYWxwYXJ0bGlzdF9hbmNob3IsIG5hbWUp
OworICB9CitlbHNlIHN3aXRjaCgqbGlzdHR5cGUpCS8qIHNwZWNpZmljIGxpc3QtdHlwZSB2ZXJz
aW9uICovCisgIHsKKyAgY2FzZSAnYSc6IHQgPSB0cmVlX3NlYXJjaChhZGRyZXNzbGlzdF9hbmNo
b3IsICAgbmFtZSk7IGJyZWFrOworICBjYXNlICdkJzogdCA9IHRyZWVfc2VhcmNoKGRvbWFpbmxp
c3RfYW5jaG9yLCAgICBuYW1lKTsgYnJlYWs7CisgIGNhc2UgJ2gnOiB0ID0gdHJlZV9zZWFyY2go
aG9zdGxpc3RfYW5jaG9yLCAgICAgIG5hbWUpOyBicmVhazsKKyAgY2FzZSAnbCc6IHQgPSB0cmVl
X3NlYXJjaChsb2NhbHBhcnRsaXN0X2FuY2hvciwgbmFtZSk7IGJyZWFrOworICBkZWZhdWx0Ogor
ICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IFVTImJhZCBzdWZmaXggb24gXCJsaXN0XCIgb3Bl
cmF0b3IiOworICAgIHJldHVybiB5aWVsZDsKKyAgfQorCitpZighdCkKKyAgeworICBleHBhbmRf
c3RyaW5nX21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigiXCIlc1wiIGlzIG5vdCBhICVzbmFtZWQg
bGlzdCIsCisgICAgbmFtZSwgIWxpc3R0eXBlPyIiCisgICAgICA6ICpsaXN0dHlwZT09J2EnPyJh
ZGRyZXNzICIKKyAgICAgIDogKmxpc3R0eXBlPT0nZCc/ImRvbWFpbiAiCisgICAgICA6ICpsaXN0
dHlwZT09J2gnPyJob3N0ICIKKyAgICAgIDogKmxpc3R0eXBlPT0nbCc/ImxvY2FscGFydCAiCisg
ICAgICA6IDApOworICByZXR1cm4geWllbGQ7CisgIH0KKworbGlzdCA9ICgobmFtZWRsaXN0X2Js
b2NrICopKHQtPmRhdGEucHRyKSktPnN0cmluZzsKKworLyogVGhlIGxpc3QgY291bGQgYmUgcXVp
dGUgbG9uZyBzbyB3ZSAocmUpdXNlIGEgYnVmZmVyIGZvciBlYWNoIGVsZW1lbnQKK3JhdGhlciB0
aGFuIGdldHRpbmcgZWFjaCBpbiBuZXcgbWVtb3J5ICovCisKK2lmIChpc190YWludGVkKGxpc3Qp
KSBidWZmZXIgPSBzdG9yZV9nZXQoTElTVE5BTUVEX0JVRl9TSVpFLCBHRVRfVEFJTlRFRCk7Cit3
aGlsZSAoKGl0ZW0gPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNlcCwgYnVmZmVyLCBMSVNU
TkFNRURfQlVGX1NJWkUpKSkKKyAgeworICB1c2NoYXIgKiBidWYgPSBVUyIgOiAiOworICBpZiAo
bmVlZHNlcCkKKyAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBidWYsIDMpOworICBlbHNl
CisgICAgbmVlZHNlcCA9IFRSVUU7CisKKyAgaWYgKCppdGVtID09ICcrJykJLyogbGlzdCBpdGVt
IGlzIGl0c2VsZiBhIG5hbWVkIGxpc3QgKi8KKyAgICB7CisgICAgeWllbGQgPSBleHBhbmRfbGlz
dG5hbWVkKHlpZWxkLCBpdGVtLCBsaXN0dHlwZSk7CisgICAgaWYgKGV4cGFuZF9zdHJpbmdfbWVz
c2FnZSkKKyAgICAgIHJldHVybiB5aWVsZDsKKyAgICB9CisKKyAgZWxzZSBpZiAoc2VwICE9ICc6
JykJLyogaXRlbSBmcm9tIG5vbi1jb2xvbi1zZXAgbGlzdCwgcmUtcXVvdGUgZm9yIGNvbG9uIGxp
c3Qtc2VwYXJhdG9yICovCisgICAgeworICAgIGNoYXIgdG9rWzNdOworICAgIHRva1swXSA9IHNl
cDsgdG9rWzFdID0gJzonOyB0b2tbMl0gPSAwOworCisgICAgZm9yKGNoYXIgKiBjcDsgY3AgPSBz
dHJwYnJrKENDUyBpdGVtLCB0b2spOyBpdGVtID0gVVMgY3ApCisgICAgICB7CisgICAgICB5aWVs
ZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBpdGVtLCBjcCAtIENTIGl0ZW0pOworICAgICAgaWYgKCpj
cCsrID09ICc6JykJLyogY29sb24gaW4gYSBub24tY29sb24tc2VwIGxpc3QgaXRlbSwgbmVlZHMg
ZG91YmxpbmcgKi8KKwl5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBVUyI6OiIsIDIpOworICAg
ICAgZWxzZQkJLyogc2VwIGluIGl0ZW07IHNob3VsZCBhbHJlYWR5IGJlIGRvdWJsZWQ7IGVtaXQg
b25jZSAqLworCXsKKwl5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBVUyB0b2ssIDEpOworCWlm
ICgqY3AgPT0gc2VwKSBjcCsrOworCX0KKyAgICAgIH0KKyAgICB5aWVsZCA9IHN0cmluZ19jYXQo
eWllbGQsIGl0ZW0pOworICAgIH0KKyAgZWxzZQorICAgIHlpZWxkID0gc3RyaW5nX2NhdCh5aWVs
ZCwgaXRlbSk7CisgIH0KK3JldHVybiB5aWVsZDsKK30KKworCisKKy8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAorZGVidWdfZXhw
YW5zaW9uX2ludGVyaW0oY29uc3QgdXNjaGFyICogd2hhdCwgY29uc3QgdXNjaGFyICogdmFsdWUs
IGludCBuY2hhciwKKyAgQk9PTCBza2lwcGluZykKK3sKK0RFQlVHKERfbm91dGY4KQorICBkZWJ1
Z19wcmludGZfaW5kZW50KCJ8Iik7CitlbHNlCisgIGRlYnVnX3ByaW50Zl9pbmRlbnQoVVRGOF9W
RVJUX1JJR0hUKTsKKworZm9yIChpbnQgZmlsbCA9IDExIC0gVXN0cmxlbih3aGF0KTsgZmlsbCA+
IDA7IGZpbGwtLSkKKyAgREVCVUcoRF9ub3V0ZjgpCisgICAgZGVidWdfcHJpbnRmKCItIik7Cisg
IGVsc2UKKyAgICBkZWJ1Z19wcmludGYoVVRGOF9IT1JJWik7CisKK2RlYnVnX3ByaW50ZigiJXM6
ICUuKnNcbiIsIHdoYXQsIG5jaGFyLCB2YWx1ZSk7CitpZiAoaXNfdGFpbnRlZCh2YWx1ZSkpCisg
IHsKKyAgREVCVUcoRF9ub3V0ZjgpCisgICAgZGVidWdfcHJpbnRmX2luZGVudCgiJXMgICAgIFxc
X18iLCBza2lwcGluZyA/ICJ8ICAgICAiIDogIiAgICAgICIpOworICBlbHNlCisgICAgZGVidWdf
cHJpbnRmX2luZGVudCgiJXMiLAorICAgICAgc2tpcHBpbmcKKyAgICAgID8gVVRGOF9WRVJUICIg
ICAgICAgICAgICAgIiA6ICIgICAgICAgICAgICIgVVRGOF9VUF9SSUdIVCBVVEY4X0hPUklaIFVU
RjhfSE9SSVopOworICBkZWJ1Z19wcmludGYoIih0YWludGVkKVxuIik7CisgIH0KK30KKworCiAv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAg
ICAgICAgICAgICAgRXhwYW5kIHN0cmluZyAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MzYzLDIzICs0NDY4
LDEyIEBACiBybWFyayByZXNldF9wb2ludCA9IHN0b3JlX21hcmsoKTsKIGdzdHJpbmcgKiB5aWVs
ZCA9IHN0cmluZ19nZXQoVXN0cmxlbihzdHJpbmcpICsgNjQpOwogaW50IGl0ZW1fdHlwZTsKLWNv
bnN0IHVzY2hhciAqcyA9IHN0cmluZzsKLXVzY2hhciAqc2F2ZV9leHBhbmRfbnN0cmluZ1tFWFBB
TkRfTUFYTisxXTsKK2NvbnN0IHVzY2hhciAqIHMgPSBzdHJpbmc7Citjb25zdCB1c2NoYXIgKiBz
YXZlX2V4cGFuZF9uc3RyaW5nW0VYUEFORF9NQVhOKzFdOwogaW50IHNhdmVfZXhwYW5kX25sZW5n
dGhbRVhQQU5EX01BWE4rMV07Ci1CT09MIHJlc2V0b2sgPSBUUlVFOworQk9PTCByZXNldG9rID0g
VFJVRSwgZmlyc3QgPSBUUlVFOwogCiBleHBhbmRfbGV2ZWwrKzsKLURFQlVHKERfZXhwYW5kKQot
ICBERUJVRyhEX25vdXRmOCkKLSAgICBkZWJ1Z19wcmludGZfaW5kZW50KCIvJXM6ICVzXG4iLAot
ICAgICAgc2tpcHBpbmcgPyAiLS0tc2Nhbm5pbmciIDogImNvbnNpZGVyaW5nIiwgc3RyaW5nKTsK
LSAgZWxzZQotICAgIGRlYnVnX3ByaW50Zl9pbmRlbnQoVVRGOF9ET1dOX1JJR0hUICIlczogJXNc
biIsCi0gICAgICBza2lwcGluZwotICAgICAgPyBVVEY4X0hPUklaIFVURjhfSE9SSVogVVRGOF9I
T1JJWiAic2Nhbm5pbmciCi0gICAgICA6ICJjb25zaWRlcmluZyIsCi0gICAgICBzdHJpbmcpOwot
CiBmLmV4cGFuZF9zdHJpbmdfZm9yY2VkZmFpbCA9IEZBTFNFOwogZXhwYW5kX3N0cmluZ19tZXNz
YWdlID0gVVMiIjsKIApAQCAtNDM5MSwxMSArNDQ4NSwyNiBAQAogICBnb3RvIEVYUEFORF9GQUlM
RUQ7CiAgIH0KIAotd2hpbGUgKCpzICE9IDApCit3aGlsZSAoKnMpCiAgIHsKLSAgdXNjaGFyICp2
YWx1ZTsKICAgdXNjaGFyIG5hbWVbMjU2XTsKIAorICBERUJVRyhEX2V4cGFuZCkKKyAgICB7Cisg
ICAgREVCVUcoRF9ub3V0ZjgpCisgICAgICBkZWJ1Z19wcmludGZfaW5kZW50KCIlYyVzOiAlc1xu
IiwKKwlmaXJzdCA/ICcvJyA6ICd8JywKKwlza2lwcGluZyA/ICItLS1zY2FubmluZyIgOiAiY29u
c2lkZXJpbmciLCBzKTsKKyAgICBlbHNlCisgICAgICBkZWJ1Z19wcmludGZfaW5kZW50KCIlcyVz
OiAlc1xuIiwKKwlmaXJzdCA/IFVURjhfRE9XTl9SSUdIVCA6IFVURjhfVkVSVF9SSUdIVCwKKwlz
a2lwcGluZworCT8gVVRGOF9IT1JJWiBVVEY4X0hPUklaIFVURjhfSE9SSVogInNjYW5uaW5nIgor
CTogImNvbnNpZGVyaW5nIiwKKwlzKTsKKyAgICBmaXJzdCA9IEZBTFNFOworICAgIH0KKwogICAv
KiBcIGVzY2FwZXMgdGhlIG5leHQgY2hhcmFjdGVyLCB3aGljaCBtdXN0IGV4aXN0LCBvciBlbHNl
CiAgIHRoZSBleHBhbnNpb24gZmFpbHMuIFRoZXJlJ3MgYSBzcGVjaWFsIGVzY2FwZSwgXE4sIHdo
aWNoIGNhdXNlcwogICBjb3B5aW5nIG9mIHRoZSBzdWJqZWN0IHZlcmJhdGltIHVwIHRvIHRoZSBu
ZXh0IFxOLiBPdGhlcndpc2UsCkBAIC00NDEyLDMyICs0NTIxLDQ0IEBACiAgICAgaWYgKHNbMV0g
PT0gJ04nKQogICAgICAgewogICAgICAgY29uc3QgdXNjaGFyICogdCA9IHMgKyAyOwotICAgICAg
Zm9yIChzID0gdDsgKnMgIT0gMDsgcysrKSBpZiAoKnMgPT0gJ1xcJyAmJiBzWzFdID09ICdOJykg
YnJlYWs7CisgICAgICBmb3IgKHMgPSB0OyAqcyA7IHMrKykgaWYgKCpzID09ICdcXCcgJiYgc1sx
XSA9PSAnTicpIGJyZWFrOworCisgICAgICBERUJVRyhEX2V4cGFuZCkKKwlkZWJ1Z19leHBhbnNp
b25faW50ZXJpbShVUyJwcm90ZWN0ZWQiLCB0LCAoaW50KShzIC0gdCksIHNraXBwaW5nKTsKICAg
ICAgIHlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIHQsIHMgLSB0KTsKLSAgICAgIGlmICgqcyAh
PSAwKSBzICs9IDI7CisgICAgICBpZiAoKnMpIHMgKz0gMjsKICAgICAgIH0KLQogICAgIGVsc2UK
ICAgICAgIHsKICAgICAgIHVzY2hhciBjaFsxXTsKKyAgICAgIERFQlVHKERfZXhwYW5kKQorCURF
QlVHKERfbm91dGY4KQorCSAgZGVidWdfcHJpbnRmX2luZGVudCgifGJhY2tzbGFzaGVkOiAnXFwl
YydcbiIsIHNbMV0pOworCWVsc2UKKwkgIGRlYnVnX3ByaW50Zl9pbmRlbnQoVVRGOF9WRVJUX1JJ
R0hUICJiYWNrc2xhc2hlZDogJ1xcJWMnXG4iLCBzWzFdKTsKICAgICAgIGNoWzBdID0gc3RyaW5n
X2ludGVycHJldF9lc2NhcGUoJnMpOwogICAgICAgcysrOwogICAgICAgeWllbGQgPSBzdHJpbmdf
Y2F0bih5aWVsZCwgY2gsIDEpOwogICAgICAgfQotCiAgICAgY29udGludWU7CiAgICAgfQogCi0g
IC8qeyovCisJCQkJCQkJCQkvKnt7Ki8KICAgLyogQW55dGhpbmcgb3RoZXIgdGhhbiAkIGlzIGp1
c3QgY29waWVkIHZlcmJhdGltLCB1bmxlc3Mgd2UgYXJlCiAgIGxvb2tpbmcgZm9yIGEgdGVybWlu
YXRpbmcgfSBjaGFyYWN0ZXIuICovCiAKLSAgLyp7Ki8KICAgaWYgKGtldF9lbmRzICYmICpzID09
ICd9JykgYnJlYWs7CiAKICAgaWYgKCpzICE9ICckJyB8fCAhaG9ub3VyX2RvbGxhcikKICAgICB7
Ci0gICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgcysrLCAxKTsKKyAgICBpbnQgaSA9IDE7
CQkJCQkJCQkvKnsqLworICAgIGZvciAoY29uc3QgdXNjaGFyICogdCA9IHMrMTsKKwkqdCAmJiAq
dCAhPSAnJCcgJiYgKnQgIT0gJ30nICYmICp0ICE9ICdcXCc7IHQrKykgaSsrOworCisgICAgREVC
VUcoRF9leHBhbmQpIGRlYnVnX2V4cGFuc2lvbl9pbnRlcmltKFVTInRleHQiLCBzLCBpLCBza2lw
cGluZyk7CisKKyAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBzLCBpKTsKKyAgICBzICs9
IGk7CiAgICAgY29udGludWU7CiAgICAgfQogCkBAIC00NDQ5LDEwICs0NTcwLDEwIEBACiAgICIk
aGVhZGVyXyIuIEEgbm9uLWV4aXN0ZW50IGhlYWRlciB5aWVsZHMgYSBOVUxMIHZhbHVlOyBub3Ro
aW5nIGlzCiAgIGluc2VydGVkLiAqLwkvKn0qLwogCi0gIGlmIChpc2FscGhhKCgqKCsrcykpKSkK
KyAgaWYgKGlzYWxwaGEoKisrcykpCiAgICAgewotICAgIGludCBsZW47Ci0gICAgaW50IG5ld3Np
emUgPSAwOworICAgIGNvbnN0IHVzY2hhciAqIHZhbHVlOworICAgIGludCBuZXdzaXplID0gMCwg
bGVuOwogICAgIGdzdHJpbmcgKiBnID0gTlVMTDsKICAgICB1c2NoYXIgKiB0OwogCkBAIC00NDYy
LDEzICs0NTgzLDEzIEBACiAgICAgYnVmZmVyLiAqLwogCiAgICAgaWYgKCF5aWVsZCkKLSAgICAg
IGcgPSBzdG9yZV9nZXQoc2l6ZW9mKGdzdHJpbmcpLCBGQUxTRSk7CisgICAgICBnID0gc3RvcmVf
Z2V0KHNpemVvZihnc3RyaW5nKSwgR0VUX1VOVEFJTlRFRCk7CiAgICAgZWxzZSBpZiAoeWllbGQt
PnB0ciA9PSAwKQogICAgICAgewogICAgICAgaWYgKHJlc2V0b2spIHJlc2V0X3BvaW50ID0gc3Rv
cmVfcmVzZXQocmVzZXRfcG9pbnQpOwogICAgICAgeWllbGQgPSBOVUxMOwogICAgICAgcmVzZXRf
cG9pbnQgPSBzdG9yZV9tYXJrKCk7Ci0gICAgICBnID0gc3RvcmVfZ2V0KHNpemVvZihnc3RyaW5n
KSwgRkFMU0UpOwkvKiBhbGxvYyBfYmVmb3JlXyBjYWxsaW5nIGZpbmRfdmFyaWFibGUoKSAqLwor
ICAgICAgZyA9IHN0b3JlX2dldChzaXplb2YoZ3N0cmluZyksIEdFVF9VTlRBSU5URUQpOwkvKiBh
bGxvYyBfYmVmb3JlXyBjYWxsaW5nIGZpbmRfdmFyaWFibGUoKSAqLwogICAgICAgfQogCiAgICAg
LyogSGVhZGVyICovCkBAIC00NDgyLDcgKzQ2MDMsNyBAQAogICAgICAgdW5zaWduZWQgZmxhZ3Mg
PSAqbmFtZSA9PSAncicgPyBGSF9XQU5UX1JBVwogCQkgICAgICA6ICpuYW1lID09ICdsJyA/IEZI
X1dBTlRfUkFXfEZIX1dBTlRfTElTVAogCQkgICAgICA6IDA7Ci0gICAgICB1c2NoYXIgKiBjaGFy
c2V0ID0gKm5hbWUgPT0gJ2InID8gTlVMTCA6IGhlYWRlcnNfY2hhcnNldDsKKyAgICAgIGNvbnN0
IHVzY2hhciAqIGNoYXJzZXQgPSAqbmFtZSA9PSAnYicgPyBOVUxMIDogaGVhZGVyc19jaGFyc2V0
OwogCiAgICAgICBzID0gcmVhZF9oZWFkZXJfbmFtZShuYW1lLCBzaXplb2YobmFtZSksIHMpOwog
ICAgICAgdmFsdWUgPSBmaW5kX2hlYWRlcihuYW1lLCAmbmV3c2l6ZSwgZmxhZ3MsIGNoYXJzZXQp
OwpAQCAtNDQ5Myw3ICs0NjE0LDcgQEAKICAgICAgIEJ1dCB0aGVyZSBpcyBubyBlcnJvciBoZXJl
IC0gbm90aGluZyBnZXRzIGluc2VydGVkLiAqLwogCiAgICAgICBpZiAoIXZhbHVlKQotICAgICAg
ICB7CisgICAgICAgIHsJCQkJCQkJCS8qeyovCiAgICAgICAgIGlmIChVc3RyY2hyKG5hbWUsICd9
JykpIG1hbGZvcm1lZF9oZWFkZXIgPSBUUlVFOwogICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQpAQCAtNDUyMyw3ICs0NjQ0LDcgQEAKICAgICAgIHlpZWxkID0gZzsKICAgICAgIHlpZWxkLT5z
aXplID0gbmV3c2l6ZTsKICAgICAgIHlpZWxkLT5wdHIgPSBsZW47Ci0gICAgICB5aWVsZC0+cyA9
IHZhbHVlOworICAgICAgeWllbGQtPnMgPSBVUyB2YWx1ZTsgLyoga25vd24gdG8gYmUgaW4gbmV3
IHN0b3JlIGkuZS4gYSBjb3B5LCBzbyBkZWNvbnN0IHNhZmUgKi8KICAgICAgIH0KICAgICBlbHNl
CiAgICAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCB2YWx1ZSwgbGVuKTsKQEAgLTQ1NDks
MTQgKzQ2NzAsMTQgQEAKICAgICB9CiAKICAgLyogQWZ0ZXIgeyB0aGVyZSBjYW4gYmUgdmFyaW91
cyB0aGluZ3MsIGJ1dCB0aGV5IGFsbCBzdGFydCB3aXRoCi0gIGFuIGluaXRpYWwgd29yZCwgZXhj
ZXB0IGZvciBhIG51bWJlciBmb3IgYSBzdHJpbmcgbWF0Y2ggdmFyaWFibGUuICovCisgIGFuIGlu
aXRpYWwgd29yZCwgZXhjZXB0IGZvciBhIG51bWJlciBmb3IgYSBzdHJpbmcgbWF0Y2ggdmFyaWFi
bGUuICovCS8qfSovCiAKLSAgaWYgKGlzZGlnaXQoKCooKytzKSkpKQorICBpZiAoaXNkaWdpdCgq
KytzKSkKICAgICB7CiAgICAgaW50IG47Ci0gICAgcyA9IHJlYWRfY251bWJlcigmbiwgcyk7CQkv
KnsqLworICAgIHMgPSByZWFkX2NudW1iZXIoJm4sIHMpOwkJCQkJCS8qe3sqLwogICAgIGlmICgq
cysrICE9ICd9JykKLSAgICAgIHsJCQkJCS8qeyovCisgICAgICB7CiAgICAgICBleHBhbmRfc3Ry
aW5nX21lc3NhZ2UgPSBVUyJ9IGV4cGVjdGVkIGFmdGVyIG51bWJlciI7CiAgICAgICBnb3RvIEVY
UEFORF9GQUlMRUQ7CiAgICAgICB9CkBAIC00NTczLDExICs0Njk0LDE2IEBACiAKICAgLyogQWxs
b3cgIi0iIGluIG5hbWVzIHRvIGNhdGVyIGZvciBzdWJzdHJpbmdzIHdpdGggbmVnYXRpdmUKICAg
YXJndW1lbnRzLiBTaW5jZSB3ZSBhcmUgY2hlY2tpbmcgZm9yIGtub3duIG5hbWVzIGFmdGVyIHsg
dGhpcyBpcwotICBPSy4gKi8KKyAgT0suICovCQkJCQkJCQkvKn0qLwogCiAgIHMgPSByZWFkX25h
bWUobmFtZSwgc2l6ZW9mKG5hbWUpLCBzLCBVUyJfLSIpOwogICBpdGVtX3R5cGUgPSBjaG9wX21h
dGNoKG5hbWUsIGl0ZW1fdGFibGUsIG5lbGVtKGl0ZW1fdGFibGUpKTsKIAorICAvKiBTd2l0Y2gg
b24gaXRlbSB0eXBlLiAgQWxsIG5vbmRlZmF1bHQgY2hvaWNlcyBzaG91bGQgImNvbnRpbnVlKiB3
aGVuCisgIHNraXBwaW5nLCBidXQgImJyZWFrIiBvdGhlcndpc2Ugc28gd2UgZ2V0IGRlYnVnIG91
dHB1dCBmb3IgdGhlIGl0ZW0KKyAgZXhwYW5zaW9uLiAqLworICB7CisgIGludCBzdGFydCA9IGdz
dHJpbmdfbGVuZ3RoKHlpZWxkKTsKICAgc3dpdGNoKGl0ZW1fdHlwZSkKICAgICB7CiAgICAgLyog
Q2FsbCBhbiBBQ0wgZnJvbSBhbiBleHBhbnNpb24uICBXZSBmZWVkIGRhdGEgaW4gdmlhICRhY2xf
YXJnMSAtICRhY2xfYXJnOS4KQEAgLTQ1OTIsOCArNDcxOCw4IEBACiAgICAgY2FzZSBFSVRFTV9B
Q0w6CiAgICAgICAvKiAke2FjbCB7bmFtZX0ge2FyZzF9e2FyZzJ9Li4ufSAqLwogICAgICAgewot
ICAgICAgdXNjaGFyICpzdWJbMTBdOwkvKiBuYW1lICsgYXJnMS1hcmc5ICh3aGljaCBtdXN0IG1h
dGNoIG51bWJlciBvZiBhY2xfYXJnW10pICovCi0gICAgICB1c2NoYXIgKnVzZXJfbXNnOworICAg
ICAgdXNjaGFyICogc3ViWzEwXTsJLyogbmFtZSArIGFyZzEtYXJnOSAod2hpY2ggbXVzdCBtYXRj
aCBudW1iZXIgb2YgYWNsX2FyZ1tdKSAqLworICAgICAgdXNjaGFyICogdXNlcl9tc2c7CiAgICAg
ICBpbnQgcmM7CiAKICAgICAgIHN3aXRjaChyZWFkX3N1YnMoc3ViLCBuZWxlbShzdWIpLCAxLCAm
cywgc2tpcHBpbmcsIFRSVUUsIG5hbWUsCkBAIC00NjE0LDcgKzQ3NDAsNyBAQAogCSAgICBkZWJ1
Z19wcmludGZfaW5kZW50KCJhY2wgZXhwYW5zaW9uIHlpZWxkOiAlc1xuIiwgdXNlcl9tc2cpOwog
CSAgaWYgKHVzZXJfbXNnKQogICAgICAgICAgICAgeWllbGQgPSBzdHJpbmdfY2F0KHlpZWxkLCB1
c2VyX21zZyk7Ci0JICBjb250aW51ZTsKKwkgIGJyZWFrOwogCiAJY2FzZSBERUZFUjoKICAgICAg
ICAgICBmLmV4cGFuZF9zdHJpbmdfZm9yY2VkZmFpbCA9IFRSVUU7CkBAIC00NjI0LDEyICs0NzUw
LDEzIEBACiAJICAgIHJjX25hbWVzW3JjXSwgc3ViWzBdKTsKIAkgIGdvdG8gRVhQQU5EX0ZBSUxF
RDsKIAl9CisgICAgICBicmVhazsKICAgICAgIH0KIAogICAgIGNhc2UgRUlURU1fQVVUSFJFU1VM
VFM6CiAgICAgICAvKiAke2F1dGhyZXN1bHRzIHtteXN5c3RlbW5hbWV9fSAqLwogICAgICAgewot
ICAgICAgdXNjaGFyICpzdWJfYXJnWzFdOworICAgICAgdXNjaGFyICogc3ViX2FyZ1sxXTsKIAog
ICAgICAgc3dpdGNoKHJlYWRfc3VicyhzdWJfYXJnLCBuZWxlbShzdWJfYXJnKSwgMSwgJnMsIHNr
aXBwaW5nLCBUUlVFLCBuYW1lLAogCQkgICAgICAmcmVzZXRvaykpCkBAIC00NjU4LDcgKzQ3ODUs
NyBAQAogI2lmZGVmIEVYUEVSSU1FTlRBTF9BUkMKICAgICAgIHlpZWxkID0gYXV0aHJlc19hcmMo
eWllbGQpOwogI2VuZGlmCi0gICAgICBjb250aW51ZTsKKyAgICAgIGJyZWFrOwogICAgICAgfQog
CiAgICAgLyogSGFuZGxlIGNvbmRpdGlvbmFscyAtIHByZXNlcnZlIHRoZSB2YWx1ZXMgb2YgdGhl
IG51bWVyaWNhbCBleHBhbnNpb24KQEAgLTQ2NzIsMjcgKzQ3OTksMTggQEAKICAgICAgIGNvbnN0
IHVzY2hhciAqbmV4dF9zOwogICAgICAgaW50IHNhdmVfZXhwYW5kX25tYXggPQogICAgICAgICBz
YXZlX2V4cGFuZF9zdHJpbmdzKHNhdmVfZXhwYW5kX25zdHJpbmcsIHNhdmVfZXhwYW5kX25sZW5n
dGgpOworICAgICAgdXNjaGFyICogc2F2ZV9sb29rdXBfdmFsdWUgPSBsb29rdXBfdmFsdWU7CiAK
ICAgICAgIFVza2lwX3doaXRlc3BhY2UoJnMpOwogICAgICAgaWYgKCEobmV4dF9zID0gZXZhbF9j
b25kaXRpb24ocywgJnJlc2V0b2ssIHNraXBwaW5nID8gTlVMTCA6ICZjb25kKSkpCiAJZ290byBF
WFBBTkRfRkFJTEVEOyAgLyogbWVzc2FnZSBhbHJlYWR5IHNldCAqLwogCiAgICAgICBERUJVRyhE
X2V4cGFuZCkKLQlERUJVRyhEX25vdXRmOCkKLQkgIHsKLQkgIGRlYnVnX3ByaW50Zl9pbmRlbnQo
InwtLWNvbmRpdGlvbjogJS4qc1xuIiwgKGludCkobmV4dF9zIC0gcyksIHMpOwotCSAgZGVidWdf
cHJpbnRmX2luZGVudCgifC0tLS0tcmVzdWx0OiAlc1xuIiwgY29uZCA/ICJ0cnVlIiA6ICJmYWxz
ZSIpOwotCSAgfQotCWVsc2UKLQkgIHsKLQkgIGRlYnVnX3ByaW50Zl9pbmRlbnQoVVRGOF9WRVJU
X1JJR0hUIFVURjhfSE9SSVogVVRGOF9IT1JJWgotCSAgICAiY29uZGl0aW9uOiAlLipzXG4iLAot
CSAgICAoaW50KShuZXh0X3MgLSBzKSwgcyk7Ci0JICBkZWJ1Z19wcmludGZfaW5kZW50KFVURjhf
VkVSVF9SSUdIVCBVVEY4X0hPUklaIFVURjhfSE9SSVoKLQkgICAgVVRGOF9IT1JJWiBVVEY4X0hP
UklaIFVURjhfSE9SSVoKLQkgICAgInJlc3VsdDogJXNcbiIsCi0JICAgIGNvbmQgPyAidHJ1ZSIg
OiAiZmFsc2UiKTsKLQkgIH0KKwl7CisJZGVidWdfZXhwYW5zaW9uX2ludGVyaW0oVVMiY29uZGl0
aW9uIiwgcywgKGludCkobmV4dF9zIC0gcyksIHNraXBwaW5nKTsKKwlkZWJ1Z19leHBhbnNpb25f
aW50ZXJpbShVUyJyZXN1bHQiLAorCSAgY29uZCA/IFVTInRydWUiIDogVVMiZmFsc2UiLCBjb25k
ID8gNCA6IDUsIHNraXBwaW5nKTsKKwl9CiAKICAgICAgIHMgPSBuZXh0X3M7CiAKQEAgLTQ3MTUs
MTQgKzQ4MzMsMTUgQEAKICAgICAgIC8qIFJlc3RvcmUgZXh0ZXJuYWwgc2V0dGluZyBvZiBleHBh
bnNpb24gdmFyaWFibGVzIGZvciBjb250aW51YXRpb24KICAgICAgIGF0IHRoaXMgbGV2ZWwuICov
CiAKKyAgICAgIGxvb2t1cF92YWx1ZSA9IHNhdmVfbG9va3VwX3ZhbHVlOwogICAgICAgcmVzdG9y
ZV9leHBhbmRfc3RyaW5ncyhzYXZlX2V4cGFuZF9ubWF4LCBzYXZlX2V4cGFuZF9uc3RyaW5nLAog
ICAgICAgICBzYXZlX2V4cGFuZF9ubGVuZ3RoKTsKLSAgICAgIGNvbnRpbnVlOworICAgICAgYnJl
YWs7CiAgICAgICB9CiAKICNpZmRlZiBTVVBQT1JUX0kxOE4KICAgICBjYXNlIEVJVEVNX0lNQVBG
T0xERVI6Ci0gICAgICB7CQkJCS8qICR7aW1hcGZvbGRlciB7bmFtZX17c2VwXXtzcGVjaWFsc319
ICovCisgICAgICB7CQkJCS8qICR7aW1hcGZvbGRlciB7bmFtZX17c2VwfXtzcGVjaWFsc319ICov
CiAgICAgICB1c2NoYXIgKnN1Yl9hcmdbM107CiAgICAgICB1c2NoYXIgKmVuY29kZWQ7CiAKQEAg
LTQ3NDgsMTQgKzQ4NjcsMTMgQEAKIAlnb3RvIEVYUEFORF9GQUlMRUQ7CiAJfQogCi0gICAgICBp
ZiAoIXNraXBwaW5nKQotCXsKLQlpZiAoIShlbmNvZGVkID0gaW1hcF91dGY3X2VuY29kZShzdWJf
YXJnWzBdLCBoZWFkZXJzX2NoYXJzZXQsCi0JCQkgICAgc3ViX2FyZ1sxXVswXSwgc3ViX2FyZ1sy
XSwgJmV4cGFuZF9zdHJpbmdfbWVzc2FnZSkpKQotCSAgZ290byBFWFBBTkRfRkFJTEVEOwotCXlp
ZWxkID0gc3RyaW5nX2NhdCh5aWVsZCwgZW5jb2RlZCk7Ci0JfQotICAgICAgY29udGludWU7Cisg
ICAgICBpZiAoc2tpcHBpbmcpIGNvbnRpbnVlOworCisgICAgICBpZiAoIShlbmNvZGVkID0gaW1h
cF91dGY3X2VuY29kZShzdWJfYXJnWzBdLCBoZWFkZXJzX2NoYXJzZXQsCisJCQkgIHN1Yl9hcmdb
MV1bMF0sIHN1Yl9hcmdbMl0sICZleHBhbmRfc3RyaW5nX21lc3NhZ2UpKSkKKwlnb3RvIEVYUEFO
RF9GQUlMRUQ7CisgICAgICB5aWVsZCA9IHN0cmluZ19jYXQoeWllbGQsIGVuY29kZWQpOworICAg
ICAgYnJlYWs7CiAgICAgICB9CiAjZW5kaWYKIApAQCAtNDc3MSwxMyArNDg4OSwxMyBAQAogICAg
ICAgaW50IHN0eXBlLCBwYXJ0aWFsLCBhZmZpeGxlbiwgc3RhcmZsYWdzOwogICAgICAgaW50IGV4
cGFuZF9zZXR1cCA9IDA7CiAgICAgICBpbnQgbmFtZXB0ciA9IDA7Ci0gICAgICB1c2NoYXIgKmtl
eSwgKmZpbGVuYW1lOworICAgICAgdXNjaGFyICoga2V5LCAqIGZpbGVuYW1lOwogICAgICAgY29u
c3QgdXNjaGFyICogYWZmaXgsICogb3B0czsKLSAgICAgIHVzY2hhciAqc2F2ZV9sb29rdXBfdmFs
dWUgPSBsb29rdXBfdmFsdWU7CisgICAgICB1c2NoYXIgKiBzYXZlX2xvb2t1cF92YWx1ZSA9IGxv
b2t1cF92YWx1ZTsKICAgICAgIGludCBzYXZlX2V4cGFuZF9ubWF4ID0KICAgICAgICAgc2F2ZV9l
eHBhbmRfc3RyaW5ncyhzYXZlX2V4cGFuZF9uc3RyaW5nLCBzYXZlX2V4cGFuZF9ubGVuZ3RoKTsK
IAotICAgICAgaWYgKChleHBhbmRfZm9yYmlkICYgUkRPX0xPT0tVUCkgIT0gMCkKKyAgICAgIGlm
IChleHBhbmRfZm9yYmlkICYgUkRPX0xPT0tVUCkKICAgICAgICAgewogICAgICAgICBleHBhbmRf
c3RyaW5nX21lc3NhZ2UgPSBVUyJsb29rdXAgZXhwYW5zaW9ucyBhcmUgbm90IHBlcm1pdHRlZCI7
CiAgICAgICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKQEAgLTQ4NDEsMTUgKzQ5NTksMTIgQEAKICAg
ICAgICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgaWYgKGtleSkKLSAgICAgICAgICB7Ci0gICAgICAg
ICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoImEgc2luZ2xlIGtleSB3
YXMgZ2l2ZW4gZm9yICIKLSAgICAgICAgICAgICJsb29rdXAgdHlwZSBcIiVzXCIsIHdoaWNoIGlz
IG5vdCBhIHNpbmdsZS1rZXkgbG9va3VwIHR5cGUiLCBuYW1lKTsKLSAgICAgICAgICBnb3RvIEVY
UEFORF9GQUlMRUQ7Ci0gICAgICAgICAgfQotICAgICAgICB9CisgICAgICBlbHNlIGlmIChrZXkp
CisJeworCWV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJhIHNpbmdsZSBr
ZXkgd2FzIGdpdmVuIGZvciAiCisJICAibG9va3VwIHR5cGUgXCIlc1wiLCB3aGljaCBpcyBub3Qg
YSBzaW5nbGUta2V5IGxvb2t1cCB0eXBlIiwgbmFtZSk7CisJZ290byBFWFBBTkRfRkFJTEVEOwor
CX0KIAogICAgICAgLyogR2V0IHRoZSBuZXh0IHN0cmluZyBpbiBicmFja2V0cyBhbmQgZXhwYW5k
IGl0LiBJdCBpcyB0aGUgZmlsZSBuYW1lIGZvcgogICAgICAgc2luZ2xlLWtleStmaWxlIGxvb2t1
cHMsIGFuZCB0aGUgd2hvbGUgcXVlcnkgb3RoZXJ3aXNlLiBJbiB0aGUgY2FzZSBvZgpAQCAtNDg1
OSwxMCArNDk3NCwxMSBAQAogICAgICAgaWYgKCpzICE9ICd7JykKICAgICAgICAgewogCWV4cGFu
ZF9zdHJpbmdfbWVzc2FnZSA9IFVTIm1pc3NpbmcgJ3snIGZvciBsb29rdXAgZmlsZS1vci1xdWVy
eSBhcmciOwotCWdvdG8gRVhQQU5EX0ZBSUxFRF9DVVJMWTsKKwlnb3RvIEVYUEFORF9GQUlMRURf
Q1VSTFk7CQkJCQkJLyp9fSovCiAJfQogICAgICAgaWYgKCEoZmlsZW5hbWUgPSBleHBhbmRfc3Ry
aW5nX2ludGVybmFsKHMrMSwgVFJVRSwgJnMsIHNraXBwaW5nLCBUUlVFLCAmcmVzZXRvaykpKQog
CWdvdG8gRVhQQU5EX0ZBSUxFRDsKKyAgICAgIAkJCQkJCQkJCQkvKnt7Ki8KICAgICAgIGlmICgq
cysrICE9ICd9JykKICAgICAgICAgewogCWV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IFVTIm1pc3Np
bmcgJ30nIGNsb3NpbmcgbG9va3VwIGZpbGUtb3ItcXVlcnkgYXJnIjsKQEAgLTQ4NzYsMjEgKzQ5
OTIsNyBAQAogICAgICAgZmlsZSB0eXBlcywgdGhlIHF1ZXJ5IChpLmUuICJrZXkiKSBzdGFydHMg
d2l0aCBhIGZpbGUgbmFtZS4gKi8KIAogICAgICAgaWYgKCFrZXkpCi0gICAgICAgIHsKLQlVc2tp
cF93aGl0ZXNwYWNlKCZmaWxlbmFtZSk7Ci0gICAgICAgIGtleSA9IGZpbGVuYW1lOwotCi0gICAg
ICAgIGlmIChtYWNfaXNsb29rdXAoc3R5cGUsIGxvb2t1cF9xdWVyeXN0eWxlKSkKLSAgICAgICAg
ICBmaWxlbmFtZSA9IE5VTEw7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBpZiAoKmZpbGVuYW1l
ID09ICcvJykKLQkgICAgewotCSAgICB3aGlsZSAoKmtleSAmJiAhaXNzcGFjZSgqa2V5KSkga2V5
Kys7Ci0JICAgIGlmICgqa2V5KSAqa2V5KysgPSAnXDAnOwotCSAgICB9Ci0JICBlbHNlCi0JICAg
IGZpbGVuYW1lID0gTlVMTDsKLSAgICAgICAgfQorCWtleSA9IHNlYXJjaF9hcmdzKHN0eXBlLCBu
YW1lLCBmaWxlbmFtZSwgJmZpbGVuYW1lLCBvcHRzKTsKIAogICAgICAgLyogSWYgc2tpcHBpbmcs
IGRvbid0IGRvIHRoZSBuZXh0IGJpdCAtIGp1c3QgbG9va3VwX3ZhbHVlID09IE5VTEwsIGFzIGlm
CiAgICAgICB0aGUgZW50cnkgd2FzIG5vdCBmb3VuZC4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHNl
YXJjaF9jbG9zZSgpIGZ1bmN0aW9uLgpAQCAtNDkwOSw3ICs1MDExLDcgQEAKICAgICAgICAgbG9v
a3VwX3ZhbHVlID0gTlVMTDsKICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICB2b2lkICpo
YW5kbGUgPSBzZWFyY2hfb3BlbihmaWxlbmFtZSwgc3R5cGUsIDAsIE5VTEwsIE5VTEwpOworICAg
ICAgICB2b2lkICogaGFuZGxlID0gc2VhcmNoX29wZW4oZmlsZW5hbWUsIHN0eXBlLCAwLCBOVUxM
LCBOVUxMKTsKICAgICAgICAgaWYgKCFoYW5kbGUpCiAgICAgICAgICAgewogICAgICAgICAgIGV4
cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHNlYXJjaF9lcnJvcl9tZXNzYWdlOwpAQCAtNDk0OCw3ICs1
MDUwLDkgQEAKIAogICAgICAgcmVzdG9yZV9leHBhbmRfc3RyaW5ncyhzYXZlX2V4cGFuZF9ubWF4
LCBzYXZlX2V4cGFuZF9uc3RyaW5nLAogICAgICAgICBzYXZlX2V4cGFuZF9ubGVuZ3RoKTsKLSAg
ICAgIGNvbnRpbnVlOworCisgICAgICBpZiAoc2tpcHBpbmcpIGNvbnRpbnVlOworICAgICAgYnJl
YWs7CiAgICAgICB9CiAKICAgICAvKiBJZiBQZXJsIHN1cHBvcnQgaXMgY29uZmlndXJlZCwgaGFu
ZGxlIGNhbGxpbmcgZW1iZWRkZWQgcGVybCBzdWJyb3V0aW5lcywKQEAgLTQ5NTYsMjAgKzUwNjAs
MjAgQEAKICAgICBvciAke3Blcmx7c3VifXthcmcxfXthcmcyfX0gb3IgdXAgdG8gYSBtYXhpbXVt
IG9mIEVYSU1fUEVSTF9NQVhfQVJHUwogICAgIGFyZ3VtZW50cyAoZGVmaW5lZCBiZWxvdykuICov
CiAKLSAgICAjZGVmaW5lIEVYSU1fUEVSTF9NQVhfQVJHUyA4CisjZGVmaW5lIEVYSU1fUEVSTF9N
QVhfQVJHUyA4CiAKICAgICBjYXNlIEVJVEVNX1BFUkw6Ci0gICAgI2lmbmRlZiBFWElNX1BFUkwK
LSAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBVUyJcIiR7cGVybFwiIGVuY291bnRlcmVkLCBi
dXQgdGhpcyBmYWNpbGl0eSAiCS8qfSovCi0gICAgICAiaXMgbm90IGluY2x1ZGVkIGluIHRoaXMg
YmluYXJ5IjsKLSAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CisjaWZuZGVmIEVYSU1fUEVSTAorICAg
ICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gVVMiXCIke3BlcmxcIiBlbmNvdW50ZXJlZCwgYnV0
IHRoaXMgZmFjaWxpdHkgIgkvKn0qLworCSJpcyBub3QgaW5jbHVkZWQgaW4gdGhpcyBiaW5hcnki
OworICAgICAgZ290byBFWFBBTkRfRkFJTEVEOwogCi0gICAgI2Vsc2UgICAvKiBFWElNX1BFUkwg
Ki8KKyNlbHNlICAgLyogRVhJTV9QRVJMICovCiAgICAgICB7Ci0gICAgICB1c2NoYXIgKnN1Yl9h
cmdbRVhJTV9QRVJMX01BWF9BUkdTICsgMl07Ci0gICAgICBnc3RyaW5nICpuZXdfeWllbGQ7Cisg
ICAgICB1c2NoYXIgKiBzdWJfYXJnW0VYSU1fUEVSTF9NQVhfQVJHUyArIDJdOworICAgICAgZ3N0
cmluZyAqIG5ld195aWVsZDsKIAotICAgICAgaWYgKChleHBhbmRfZm9yYmlkICYgUkRPX1BFUkwp
ICE9IDApCisgICAgICBpZiAoZXhwYW5kX2ZvcmJpZCAmIFJET19QRVJMKQogICAgICAgICB7CiAg
ICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IFVTIlBlcmwgY2FsbHMgYXJlIG5vdCBwZXJt
aXR0ZWQiOwogICAgICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CkBAIC00OTkxLDcgKzUwOTUsNyBA
QAogCiAgICAgICBpZiAoIW9wdF9wZXJsX3N0YXJ0ZWQpCiAgICAgICAgIHsKLSAgICAgICAgdXNj
aGFyICppbml0ZXJyb3I7CisgICAgICAgIHVzY2hhciAqIGluaXRlcnJvcjsKICAgICAgICAgaWYg
KCFvcHRfcGVybF9zdGFydHVwKQogICAgICAgICAgIHsKICAgICAgICAgICBleHBhbmRfc3RyaW5n
X21lc3NhZ2UgPSBVUyJBIHNldHRpbmcgb2YgcGVybF9zdGFydHVwIGlzIG5lZWRlZCB3aGVuICIK
QEAgLTUwMzUsMTcgKzUxMzksMTYgQEAKIAogICAgICAgZi5leHBhbmRfc3RyaW5nX2ZvcmNlZGZh
aWwgPSBGQUxTRTsKICAgICAgIHlpZWxkID0gbmV3X3lpZWxkOwotICAgICAgY29udGludWU7Cisg
ICAgICBicmVhazsKICAgICAgIH0KLSAgICAjZW5kaWYgLyogRVhJTV9QRVJMICovCisjZW5kaWYg
LyogRVhJTV9QRVJMICovCiAKICAgICAvKiBUcmFuc2Zvcm0gZW1haWwgYWRkcmVzcyB0byAicHJ2
cyIgc2NoZW1lIHRvIHVzZQogICAgICAgIGFzIEJBVFYtc2lnbmVkIHJldHVybiBwYXRoICovCiAK
ICAgICBjYXNlIEVJVEVNX1BSVlM6CiAgICAgICB7Ci0gICAgICB1c2NoYXIgKnN1Yl9hcmdbM107
Ci0gICAgICB1c2NoYXIgKnAsKmRvbWFpbjsKKyAgICAgIHVzY2hhciAqIHN1Yl9hcmdbM10sICog
cCwgKiBkb21haW47CiAKICAgICAgIHN3aXRjaChyZWFkX3N1YnMoc3ViX2FyZywgMywgMiwgJnMs
IHNraXBwaW5nLCBUUlVFLCBuYW1lLCAmcmVzZXRvaykpCiAgICAgICAgIHsKQEAgLTUwOTQsMTcg
KzUxOTcsMTYgQEAKICAgICAgIHlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIFVTIkAiLCAxKTsK
ICAgICAgIHlpZWxkID0gc3RyaW5nX2NhdCAoeWllbGQsIGRvbWFpbik7CiAKLSAgICAgIGNvbnRp
bnVlOworICAgICAgYnJlYWs7CiAgICAgICB9CiAKICAgICAvKiBDaGVjayBhIHBydnMtZW5jb2Rl
ZCBhZGRyZXNzIGZvciB2YWxpZGl0eSAqLwogCiAgICAgY2FzZSBFSVRFTV9QUlZTQ0hFQ0s6CiAg
ICAgICB7Ci0gICAgICB1c2NoYXIgKnN1Yl9hcmdbM107CisgICAgICB1c2NoYXIgKiBzdWJfYXJn
WzNdLCAqIHA7CiAgICAgICBnc3RyaW5nICogZzsKLSAgICAgIGNvbnN0IHBjcmUgKnJlOwotICAg
ICAgdXNjaGFyICpwOworICAgICAgY29uc3QgcGNyZTJfY29kZSAqIHJlOwogCiAgICAgICAvKiBU
RjogVWdsaW5lc3M6IFdlIHdhbnQgdG8gZXhwYW5kIHBhcmFtZXRlciAxIGZpcnN0LCB0aGVuIHNl
dAogICAgICAgICAgdXAgZXhwYW5zaW9uIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGluIHRoZSBl
eHBhbnNpb24gb2YKQEAgLTUxMTQsNyArNTIxNiw3IEBACiAgICAgICAgICBQSDogQWN0dWFsbHks
IHRoYXQgaXNuJ3QgbmVjZXNzYXJ5LiBUaGUgcmVhZF9zdWJzKCkgZnVuY3Rpb24gaXMKICAgICAg
ICAgIGRlc2lnbmVkIHRvIHdvcmsgdGhpcyB3YXkgZm9yIHRoZSAke2lmIGFuZCAke2xvb2t1cCBl
eHBhbnNpb25zLiBJJ3ZlCiAgICAgICAgICB0aWRpZWQgdGhlIGNvZGUuCi0gICAgICAqLworICAg
ICAgKi8JCQkJCQkJCS8qfX0qLwogCiAgICAgICAvKiBSZXNldCBleHBhbnNpb24gdmFyaWFibGVz
ICovCiAgICAgICBwcnZzY2hlY2tfcmVzdWx0ID0gTlVMTDsKQEAgLTUxMzMsMTEgKzUyMzUsMTEg
QEAKIAogICAgICAgaWYgKHJlZ2V4X21hdGNoX2FuZF9zZXR1cChyZSxzdWJfYXJnWzBdLDAsLTEp
KQogICAgICAgICB7Ci0gICAgICAgIHVzY2hhciAqbG9jYWxfcGFydCA9IHN0cmluZ19jb3B5bihl
eHBhbmRfbnN0cmluZ1s0XSxleHBhbmRfbmxlbmd0aFs0XSk7Ci0gICAgICAgIHVzY2hhciAqa2V5
X251bSA9IHN0cmluZ19jb3B5bihleHBhbmRfbnN0cmluZ1sxXSxleHBhbmRfbmxlbmd0aFsxXSk7
Ci0gICAgICAgIHVzY2hhciAqZGF5c3RhbXAgPSBzdHJpbmdfY29weW4oZXhwYW5kX25zdHJpbmdb
Ml0sZXhwYW5kX25sZW5ndGhbMl0pOwotICAgICAgICB1c2NoYXIgKmhhc2ggPSBzdHJpbmdfY29w
eW4oZXhwYW5kX25zdHJpbmdbM10sZXhwYW5kX25sZW5ndGhbM10pOwotICAgICAgICB1c2NoYXIg
KmRvbWFpbiA9IHN0cmluZ19jb3B5bihleHBhbmRfbnN0cmluZ1s1XSxleHBhbmRfbmxlbmd0aFs1
XSk7CisgICAgICAgIHVzY2hhciAqIGxvY2FsX3BhcnQgPSBzdHJpbmdfY29weW4oZXhwYW5kX25z
dHJpbmdbNF0sZXhwYW5kX25sZW5ndGhbNF0pOworICAgICAgICB1c2NoYXIgKiBrZXlfbnVtID0g
c3RyaW5nX2NvcHluKGV4cGFuZF9uc3RyaW5nWzFdLGV4cGFuZF9ubGVuZ3RoWzFdKTsKKyAgICAg
ICAgdXNjaGFyICogZGF5c3RhbXAgPSBzdHJpbmdfY29weW4oZXhwYW5kX25zdHJpbmdbMl0sZXhw
YW5kX25sZW5ndGhbMl0pOworICAgICAgICB1c2NoYXIgKiBoYXNoID0gc3RyaW5nX2NvcHluKGV4
cGFuZF9uc3RyaW5nWzNdLGV4cGFuZF9ubGVuZ3RoWzNdKTsKKyAgICAgICAgdXNjaGFyICogZG9t
YWluID0gc3RyaW5nX2NvcHluKGV4cGFuZF9uc3RyaW5nWzVdLGV4cGFuZF9ubGVuZ3RoWzVdKTsK
IAogICAgICAgICBERUJVRyhEX2V4cGFuZCkgZGVidWdfcHJpbnRmX2luZGVudCgicHJ2c2NoZWNr
IGxvY2FscGFydDogJXNcbiIsIGxvY2FsX3BhcnQpOwogICAgICAgICBERUJVRyhEX2V4cGFuZCkg
ZGVidWdfcHJpbnRmX2luZGVudCgicHJ2c2NoZWNrIGtleSBudW1iZXI6ICVzXG4iLCBrZXlfbnVt
KTsKQEAgLTUyMzUsMTUgKzUzMzcsMTYgQEAKICAgICAgICAgICBjYXNlIDM6IGdvdG8gRVhQQU5E
X0ZBSUxFRDsKICAgICAgICAgICB9CiAKLSAgICAgIGNvbnRpbnVlOworICAgICAgaWYgKHNraXBw
aW5nKSBjb250aW51ZTsKKyAgICAgIGJyZWFrOwogICAgICAgfQogCiAgICAgLyogSGFuZGxlICJy
ZWFkZmlsZSIgdG8gaW5zZXJ0IGFuIGVudGlyZSBmaWxlICovCiAKICAgICBjYXNlIEVJVEVNX1JF
QURGSUxFOgogICAgICAgewotICAgICAgRklMRSAqZjsKLSAgICAgIHVzY2hhciAqc3ViX2FyZ1sy
XTsKKyAgICAgIEZJTEUgKiBmOworICAgICAgdXNjaGFyICogc3ViX2FyZ1syXTsKIAogICAgICAg
aWYgKChleHBhbmRfZm9yYmlkICYgUkRPX1JFQURGSUxFKSAhPSAwKQogICAgICAgICB7CkBAIC01
MjY2LDEzICs1MzY5LDEzIEBACiAKICAgICAgIGlmICghKGYgPSBVZm9wZW4oc3ViX2FyZ1swXSwg
InJiIikpKQogICAgICAgICB7Ci0gICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmlu
Z19vcGVuX2ZhaWxlZChlcnJubywgIiVzIiwgc3ViX2FyZ1swXSk7CisgICAgICAgIGV4cGFuZF9z
dHJpbmdfbWVzc2FnZSA9IHN0cmluZ19vcGVuX2ZhaWxlZCgiJXMiLCBzdWJfYXJnWzBdKTsKICAg
ICAgICAgZ290byBFWFBBTkRfRkFJTEVEOwogICAgICAgICB9CiAKICAgICAgIHlpZWxkID0gY2F0
X2ZpbGUoZiwgeWllbGQsIHN1Yl9hcmdbMV0pOwogICAgICAgKHZvaWQpZmNsb3NlKGYpOwotICAg
ICAgY29udGludWU7CisgICAgICBicmVhazsKICAgICAgIH0KIAogICAgIC8qIEhhbmRsZSAicmVh
ZHNvY2tldCIgdG8gaW5zZXJ0IGRhdGEgZnJvbSBhIHNvY2tldCwgZWl0aGVyCkBAIC01Mzc4LDM4
ICs1NDgxLDM5IEBACiAgICAgICAvKiBUaGUgd2hvbGUgdGhpbmcgaGFzIHdvcmtlZCAob3Igd2Ug
d2VyZSBza2lwcGluZykuIElmIHRoZXJlIGlzIGEKICAgICAgIGZhaWx1cmUgc3RyaW5nIGZvbGxv
d2luZywgd2UgbmVlZCB0byBza2lwIGl0LiAqLwogCi0gICAgICBpZiAoKnMgPT0gJ3snKQorICAg
ICAgaWYgKCpzID09ICd7JykJCQkJCQkJLyp9Ki8KICAgICAgICAgewogICAgICAgICBpZiAoIWV4
cGFuZF9zdHJpbmdfaW50ZXJuYWwocysxLCBUUlVFLCAmcywgVFJVRSwgVFJVRSwgJnJlc2V0b2sp
KQotICAgICAgICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKKyAgICAgICAgICBnb3RvIEVYUEFORF9G
QUlMRUQ7CQkJCQkJLyp7Ki8KICAgICAgICAgaWYgKCpzKysgIT0gJ30nKQotCSAgeworCSAgewkJ
CQkJCQkJLyp7Ki8KIAkgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IFVTIm1pc3NpbmcgJ30nIGNs
b3NpbmcgZmFpbHN0cmluZyBmb3IgcmVhZHNvY2tldCI7CiAJICBnb3RvIEVYUEFORF9GQUlMRURf
Q1VSTFk7CiAJICB9CiAgICAgICAgIFVza2lwX3doaXRlc3BhY2UoJnMpOwogICAgICAgICB9CiAK
LSAgICBSRUFEU09DS19ET05FOgorICAgIFJFQURTT0NLX0RPTkU6CQkJCQkJCS8qeyovCiAgICAg
ICBpZiAoKnMrKyAhPSAnfScpCi0gICAgICAgIHsKKyAgICAgICAgewkJCQkJCQkJLyp7Ki8KIAll
eHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBVUyJtaXNzaW5nICd9JyBjbG9zaW5nIHJlYWRzb2NrZXQi
OwogCWdvdG8gRVhQQU5EX0ZBSUxFRF9DVVJMWTsKIAl9Ci0gICAgICBjb250aW51ZTsKKyAgICAg
IGlmIChza2lwcGluZykgY29udGludWU7CisgICAgICBicmVhazsKIAogICAgICAgLyogQ29tZSBo
ZXJlIG9uIGZhaWx1cmUgdG8gY3JlYXRlIHNvY2tldCwgY29ubmVjdCBzb2NrZXQsIHdyaXRlIHRv
IHRoZQogICAgICAgc29ja2V0LCBvciB0aW1lb3V0IG9uIHJlYWRpbmcuIElmIGFub3RoZXIgc3Vi
c3RyaW5nIGZvbGxvd3MsIGV4cGFuZCBhbmQKICAgICAgIHVzZSBpdC4gT3RoZXJ3aXNlLCB0aG9z
ZSBjb25kaXRpb25zIGdpdmUgZXhwYW5kIGVycm9ycy4gKi8KIAogICAgIFNPQ0tfRkFJTDoKLSAg
ICAgIGlmICgqcyAhPSAneycpIGdvdG8gRVhQQU5EX0ZBSUxFRDsKKyAgICAgIGlmICgqcyAhPSAn
eycpIGdvdG8gRVhQQU5EX0ZBSUxFRDsJCQkJLyp9Ki8KICAgICAgIERFQlVHKERfYW55KSBkZWJ1
Z19wcmludGYoIiVzXG4iLCBleHBhbmRfc3RyaW5nX21lc3NhZ2UpOwogICAgICAgaWYgKCEoYXJn
ID0gZXhwYW5kX3N0cmluZ19pbnRlcm5hbChzKzEsIFRSVUUsICZzLCBGQUxTRSwgVFJVRSwgJnJl
c2V0b2spKSkKICAgICAgICAgZ290byBFWFBBTkRfRkFJTEVEOwotICAgICAgeWllbGQgPSBzdHJp
bmdfY2F0KHlpZWxkLCBhcmcpOworICAgICAgeWllbGQgPSBzdHJpbmdfY2F0KHlpZWxkLCBhcmcp
OwkJCQkJLyp7Ki8KICAgICAgIGlmICgqcysrICE9ICd9JykKLSAgICAgICAgeworICAgICAgICB7
CQkJCQkJCQkvKnsqLwogCWV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IFVTIm1pc3NpbmcgJ30nIGNs
b3NpbmcgZmFpbHN0cmluZyBmb3IgcmVhZHNvY2tldCI7CiAJZ290byBFWFBBTkRfRkFJTEVEX0NV
UkxZOwogCX0KQEAgLTU0MjEsMTEgKzU1MjUsOSBAQAogCiAgICAgY2FzZSBFSVRFTV9SVU46CiAg
ICAgICB7Ci0gICAgICBGSUxFICpmOwotICAgICAgdXNjaGFyICphcmc7Ci0gICAgICBjb25zdCB1
c2NoYXIgKiphcmd2OwotICAgICAgcGlkX3QgcGlkOwotICAgICAgaW50IGZkX2luLCBmZF9vdXQ7
CisgICAgICBGSUxFICogZjsKKyAgICAgIGNvbnN0IHVzY2hhciAqIGFyZywgKiogYXJndjsKKyAg
ICAgIEJPT0wgbGF0ZV9leHBhbmQgPSBUUlVFOwogCiAgICAgICBpZiAoKGV4cGFuZF9mb3JiaWQg
JiBSRE9fUlVOKSAhPSAwKQogICAgICAgICB7CkBAIC01NDMzLDE3ICs1NTM1LDQ1IEBACiAgICAg
ICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKICAgICAgICAgfQogCisgICAgICAvKiBIYW5kbGUgb3B0
aW9ucyB0byB0aGUgInJ1biIgKi8KKworICAgICAgd2hpbGUgKCpzID09ICcsJykKKwl7CisJaWYg
KFVzdHJuY21wKCsrcywgInByZWV4cGFuZCIsIDkpID09IDApCisJICB7IGxhdGVfZXhwYW5kID0g
RkFMU0U7IHMgKz0gOTsgfQorCWVsc2UKKwkgIHsKKwkgIGNvbnN0IHVzY2hhciAqIHQgPSBzOwor
CSAgd2hpbGUgKGlzYWxwaGEoKisrdCkpIDsKKwkgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0
cmluZ19zcHJpbnRmKCJiYWQgb3B0aW9uICclLipzJyBmb3IgcnVuIiwKKwkJCQkJCSAgKGludCko
dC1zKSwgcyk7CisJICBnb3RvIEVYUEFORF9GQUlMRUQ7CisJICB9CisJfQogICAgICAgVXNraXBf
d2hpdGVzcGFjZSgmcyk7Ci0gICAgICBpZiAoKnMgIT0gJ3snKQorCisgICAgICBpZiAoKnMgIT0g
J3snKQkJCQkJLyp9Ki8KICAgICAgICAgewogCWV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IFVTIm1p
c3NpbmcgJ3snIGZvciBjb21tYW5kIGFyZyBvZiBydW4iOwotCWdvdG8gRVhQQU5EX0ZBSUxFRF9D
VVJMWTsKKwlnb3RvIEVYUEFORF9GQUlMRURfQ1VSTFk7CQkJLyoifSovCiAJfQotICAgICAgaWYg
KCEoYXJnID0gZXhwYW5kX3N0cmluZ19pbnRlcm5hbChzKzEsIFRSVUUsICZzLCBza2lwcGluZywg
VFJVRSwgJnJlc2V0b2spKSkKLQlnb3RvIEVYUEFORF9GQUlMRUQ7Ci0gICAgICBVc2tpcF93aGl0
ZXNwYWNlKCZzKTsKKyAgICAgIHMrKzsKKworICAgICAgaWYgKGxhdGVfZXhwYW5kKQkJLyogdGhp
cyBpcyB0aGUgZGVmYXVsdCBjYXNlICovCisJeworCWludCBuID0gVXN0cmNzcG4ocywgIn0iKTsK
KwlhcmcgPSBza2lwcGluZyA/IE5VTEwgOiBzdHJpbmdfY29weW4ocywgbik7CisJcyArPSBuOwor
CX0KKyAgICAgIGVsc2UKKwl7CisJaWYgKCEoYXJnID0gZXhwYW5kX3N0cmluZ19pbnRlcm5hbChz
LCBUUlVFLCAmcywgc2tpcHBpbmcsIFRSVUUsICZyZXNldG9rKSkpCisJICBnb3RvIEVYUEFORF9G
QUlMRUQ7CisJVXNraXBfd2hpdGVzcGFjZSgmcyk7CisJfQorCQkJCQkJCS8qeyovCiAgICAgICBp
ZiAoKnMrKyAhPSAnfScpCi0gICAgICAgIHsKKyAgICAgICAgewkJCQkJCS8qeyovCiAJZXhwYW5k
X3N0cmluZ19tZXNzYWdlID0gVVMibWlzc2luZyAnfScgY2xvc2luZyBjb21tYW5kIGFyZyBvZiBy
dW4iOwogCWdvdG8gRVhQQU5EX0ZBSUxFRF9DVVJMWTsKIAl9CkBAIC01NDU1LDEzICs1NTg1LDE3
IEBACiAJfQogICAgICAgZWxzZQogICAgICAgICB7CisJaW50IGZkX2luLCBmZF9vdXQ7CisJcGlk
X3QgcGlkOworCiAgICAgICAgIGlmICghdHJhbnNwb3J0X3NldF91cF9jb21tYW5kKCZhcmd2LCAg
ICAvKiBhbmNob3IgZm9yIGFyZyBsaXN0ICovCiAgICAgICAgICAgICBhcmcsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiByYXcgY29tbWFuZCAqLwotICAgICAgICAgICAgRkFMU0Us
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgZXhwYW5kIHRoZSBhcmd1bWVu
dHMgKi8KLSAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q
IG5vdCByZWxldmFudCB3aGVuLi4uICovCi0gICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBubyB0cmFuc3BvcnRpbmcgYWRkcmVzcyAqLwotICAgICAgICAg
ICAgVVMiJHtydW59IGV4cGFuc2lvbiIsICAgICAgICAgICAgICAgLyogZm9yIGVycm9yIG1lc3Nh
Z2VzICovCi0gICAgICAgICAgICAmZXhwYW5kX3N0cmluZ19tZXNzYWdlKSkgICAgICAgICAgICAv
KiB3aGVyZSB0byBwdXQgZXJyb3IgbWVzc2FnZSAqLworCSAgICBsYXRlX2V4cGFuZCwJCS8qIGV4
cGFuZCBhcmdzIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KKyAgICAgICAgICAgIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBub3QgcmVsZXZhbnQgd2hlbi4uLiAqLworICAgICAgICAgICAg
TlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHRyYW5zcG9ydGluZyBhZGRyZXNzICov
CisJICAgIGxhdGVfZXhwYW5kLAkJLyogYWxsb3cgdGFpbnRlZCBhcmdzLCB3aGVuIGV4cGFuZC1h
ZnRlci1zcGxpdCAqLworICAgICAgICAgICAgVVMiJHtydW59IGV4cGFuc2lvbiIsICAgICAgIC8q
IGZvciBlcnJvciBtZXNzYWdlcyAqLworICAgICAgICAgICAgJmV4cGFuZF9zdHJpbmdfbWVzc2Fn
ZSkpICAgIC8qIHdoZXJlIHRvIHB1dCBlcnJvciBtZXNzYWdlICovCiAgICAgICAgICAgZ290byBF
WFBBTkRfRkFJTEVEOwogCiAgICAgICAgIC8qIENyZWF0ZSB0aGUgY2hpbGQgcHJvY2VzcywgbWFr
aW5nIGl0IGEgZ3JvdXAgbGVhZGVyLiAqLwpAQCAtNTQ3Miw3ICs1NjA2LDcgQEAKICAgICAgICAg
ICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPQogICAgICAgICAgICAgc3RyaW5nX3NwcmludGYoImNv
dWxkbid0IGNyZWF0ZSBjaGlsZCBwcm9jZXNzOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CiAgICAg
ICAgICAgZ290byBFWFBBTkRfRkFJTEVEOwotICAgICAgICAgIH0KKwkgIH0KIAogICAgICAgICAv
KiBOb3RoaW5nIGlzIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIGlucHV0LiAqLwogCkBAIC01NTMw
LDcgKzU2NjQsOCBAQAogICAgICAgICBjYXNlIDI6IGdvdG8gRVhQQU5EX0ZBSUxFRF9DVVJMWTsg
ICAgLyogcmV0dXJuZWQgdmFsdWUgaXMgMCAqLwogICAgICAgICB9CiAKLSAgICAgIGNvbnRpbnVl
OworICAgICAgaWYgKHNraXBwaW5nKSBjb250aW51ZTsKKyAgICAgIGJyZWFrOwogICAgICAgfQog
CiAgICAgLyogSGFuZGxlIGNoYXJhY3RlciB0cmFuc2xhdGlvbiBmb3IgInRyIiAqLwpAQCAtNTUz
OSw3ICs1Njc0LDcgQEAKICAgICAgIHsKICAgICAgIGludCBvbGRwdHIgPSBnc3RyaW5nX2xlbmd0
aCh5aWVsZCk7CiAgICAgICBpbnQgbzJtOwotICAgICAgdXNjaGFyICpzdWJbM107CisgICAgICB1
c2NoYXIgKiBzdWJbM107CiAKICAgICAgIHN3aXRjaChyZWFkX3N1YnMoc3ViLCAzLCAzLCAmcywg
c2tpcHBpbmcsIFRSVUUsIG5hbWUsICZyZXNldG9rKSkKICAgICAgICAgewpAQCAtNTU2MSw3ICs1
Njk2LDggQEAKICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgY29udGludWU7CisgICAg
ICBpZiAoc2tpcHBpbmcpIGNvbnRpbnVlOworICAgICAgYnJlYWs7CiAgICAgICB9CiAKICAgICAv
KiBIYW5kbGUgImhhc2giLCAibGVuZ3RoIiwgIm5oYXNoIiwgYW5kICJzdWJzdHIiIHdoZW4gdGhl
eSBhcmUgZ2l2ZW4gd2l0aApAQCAtNTU3NSw3ICs1NzExLDcgQEAKICAgICAgIGludCBsZW47CiAg
ICAgICB1c2NoYXIgKnJldDsKICAgICAgIGludCB2YWxbMl0gPSB7IDAsIC0xIH07Ci0gICAgICB1
c2NoYXIgKnN1YlszXTsKKyAgICAgIHVzY2hhciAqIHN1YlszXTsKIAogICAgICAgLyogImxlbmd0
aCIgdGFrZXMgb25seSAyIGFyZ3VtZW50cyB3aGVyZWFzIHRoZSBvdGhlcnMgdGFrZSAyIG9yIDMu
CiAgICAgICBFbnN1cmUgdGhhdCBzdWJbMl0gaXMgc2V0IGluIHRoZSAke2xlbmd0aCB9IGNhc2Uu
ICovCkBAIC01NjI0LDcgKzU3NjAsOCBAQAogICAgICAgaWYgKCFyZXQpCiAJZ290byBFWFBBTkRf
RkFJTEVEOwogICAgICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgcmV0LCBsZW4pOwotICAg
ICAgY29udGludWU7CisgICAgICBpZiAoc2tpcHBpbmcpIGNvbnRpbnVlOworICAgICAgYnJlYWs7
CiAgICAgICB9CiAKICAgICAvKiBIYW5kbGUgSE1BQyBjb21wdXRhdGlvbjogJHtobWFjezxhbGdv
cml0aG0+fXs8c2VjcmV0Pn17PHRleHQ+fX0KQEAgLTU2MzksMTQgKzU3NzYsMTQgQEAKIAogICAg
IGNhc2UgRUlURU1fSE1BQzoKICAgICAgIHsKLSAgICAgIHVzY2hhciAqc3ViWzNdOworICAgICAg
dXNjaGFyICogc3ViWzNdOwogICAgICAgbWQ1IG1kNV9iYXNlOwogICAgICAgaGN0eCBzaGExX2N0
eDsKLSAgICAgIHZvaWQgKnVzZV9iYXNlOworICAgICAgdm9pZCAqIHVzZV9iYXNlOwogICAgICAg
aW50IHR5cGU7CiAgICAgICBpbnQgaGFzaGxlbjsgICAgICAvKiBOdW1iZXIgb2Ygb2N0ZXRzIGZv
ciB0aGUgaGFzaCBhbGdvcml0aG0ncyBvdXRwdXQgKi8KICAgICAgIGludCBoYXNoYmxvY2tsZW47
IC8qIE51bWJlciBvZiBvY3RldHMgdGhlIGhhc2ggYWxnb3JpdGhtIHByb2Nlc3NlcyAqLwotICAg
ICAgdXNjaGFyICprZXlwdHIsICpwOworICAgICAgdXNjaGFyICoga2V5cHRyLCAqIHA7CiAgICAg
ICB1bnNpZ25lZCBpbnQga2V5bGVuOwogCiAgICAgICB1c2NoYXIga2V5aGFzaFtNQVhfSEFTSExF
Tl07CkBAIC01NjYzLDc5ICs1ODAwLDc4IEBACiAgICAgICAgIGNhc2UgMzogZ290byBFWFBBTkRf
RkFJTEVEOwogICAgICAgICB9CiAKLSAgICAgIGlmICghc2tpcHBpbmcpCisgICAgICBpZiAoc2tp
cHBpbmcpIGNvbnRpbnVlOworCisgICAgICBpZiAoVXN0cmNtcChzdWJbMF0sICJtZDUiKSA9PSAw
KQogCXsKLQlpZiAoVXN0cmNtcChzdWJbMF0sICJtZDUiKSA9PSAwKQotCSAgewotCSAgdHlwZSA9
IEhNQUNfTUQ1OwotCSAgdXNlX2Jhc2UgPSAmbWQ1X2Jhc2U7Ci0JICBoYXNobGVuID0gMTY7Ci0J
ICBoYXNoYmxvY2tsZW4gPSA2NDsKLQkgIH0KLQllbHNlIGlmIChVc3RyY21wKHN1YlswXSwgInNo
YTEiKSA9PSAwKQotCSAgewotCSAgdHlwZSA9IEhNQUNfU0hBMTsKLQkgIHVzZV9iYXNlID0gJnNo
YTFfY3R4OwotCSAgaGFzaGxlbiA9IDIwOwotCSAgaGFzaGJsb2NrbGVuID0gNjQ7Ci0JICB9Ci0J
ZWxzZQotCSAgewotCSAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0KLQkgICAgc3RyaW5nX3Nwcmlu
dGYoImhtYWMgYWxnb3JpdGhtIFwiJXNcIiBpcyBub3QgcmVjb2duaXNlZCIsIHN1YlswXSk7Ci0J
ICBnb3RvIEVYUEFORF9GQUlMRUQ7Ci0JICB9CisJdHlwZSA9IEhNQUNfTUQ1OworCXVzZV9iYXNl
ID0gJm1kNV9iYXNlOworCWhhc2hsZW4gPSAxNjsKKwloYXNoYmxvY2tsZW4gPSA2NDsKKwl9Cisg
ICAgICBlbHNlIGlmIChVc3RyY21wKHN1YlswXSwgInNoYTEiKSA9PSAwKQorCXsKKwl0eXBlID0g
SE1BQ19TSEExOworCXVzZV9iYXNlID0gJnNoYTFfY3R4OworCWhhc2hsZW4gPSAyMDsKKwloYXNo
YmxvY2tsZW4gPSA2NDsKKwl9CisgICAgICBlbHNlCisJeworCWV4cGFuZF9zdHJpbmdfbWVzc2Fn
ZSA9CisJICBzdHJpbmdfc3ByaW50ZigiaG1hYyBhbGdvcml0aG0gXCIlc1wiIGlzIG5vdCByZWNv
Z25pc2VkIiwgc3ViWzBdKTsKKwlnb3RvIEVYUEFORF9GQUlMRUQ7CisJfQogCi0Ja2V5cHRyID0g
c3ViWzFdOwotCWtleWxlbiA9IFVzdHJsZW4oa2V5cHRyKTsKKyAgICAgIGtleXB0ciA9IHN1Ylsx
XTsKKyAgICAgIGtleWxlbiA9IFVzdHJsZW4oa2V5cHRyKTsKIAotCS8qIElmIHRoZSBrZXkgaXMg
bG9uZ2VyIHRoYW4gdGhlIGhhc2ggYmxvY2sgbGVuZ3RoLCB0aGVuIGhhc2ggdGhlIGtleQotCWZp
cnN0ICovCisgICAgICAvKiBJZiB0aGUga2V5IGlzIGxvbmdlciB0aGFuIHRoZSBoYXNoIGJsb2Nr
IGxlbmd0aCwgdGhlbiBoYXNoIHRoZSBrZXkKKyAgICAgIGZpcnN0ICovCiAKLQlpZiAoa2V5bGVu
ID4gaGFzaGJsb2NrbGVuKQotCSAgewotCSAgY2hhc2hfc3RhcnQodHlwZSwgdXNlX2Jhc2UpOwot
CSAgY2hhc2hfZW5kKHR5cGUsIHVzZV9iYXNlLCBrZXlwdHIsIGtleWxlbiwga2V5aGFzaCk7Ci0J
ICBrZXlwdHIgPSBrZXloYXNoOwotCSAga2V5bGVuID0gaGFzaGxlbjsKLQkgIH0KKyAgICAgIGlm
IChrZXlsZW4gPiBoYXNoYmxvY2tsZW4pCisJeworCWNoYXNoX3N0YXJ0KHR5cGUsIHVzZV9iYXNl
KTsKKwljaGFzaF9lbmQodHlwZSwgdXNlX2Jhc2UsIGtleXB0ciwga2V5bGVuLCBrZXloYXNoKTsK
KwlrZXlwdHIgPSBrZXloYXNoOworCWtleWxlbiA9IGhhc2hsZW47CisJfQogCi0JLyogTm93IG1h
a2UgdGhlIGlubmVyIGFuZCBvdXRlciBrZXkgdmFsdWVzICovCisgICAgICAvKiBOb3cgbWFrZSB0
aGUgaW5uZXIgYW5kIG91dGVyIGtleSB2YWx1ZXMgKi8KIAotCW1lbXNldChpbm5lcmtleSwgMHgz
NiwgaGFzaGJsb2NrbGVuKTsKLQltZW1zZXQob3V0ZXJrZXksIDB4NWMsIGhhc2hibG9ja2xlbik7
CisgICAgICBtZW1zZXQoaW5uZXJrZXksIDB4MzYsIGhhc2hibG9ja2xlbik7CisgICAgICBtZW1z
ZXQob3V0ZXJrZXksIDB4NWMsIGhhc2hibG9ja2xlbik7CiAKLQlmb3IgKGludCBpID0gMDsgaSA8
IGtleWxlbjsgaSsrKQotCSAgewotCSAgaW5uZXJrZXlbaV0gXj0ga2V5cHRyW2ldOwotCSAgb3V0
ZXJrZXlbaV0gXj0ga2V5cHRyW2ldOwotCSAgfQorICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBr
ZXlsZW47IGkrKykKKwl7CisJaW5uZXJrZXlbaV0gXj0ga2V5cHRyW2ldOworCW91dGVya2V5W2ld
IF49IGtleXB0cltpXTsKKwl9CiAKLQkvKiBOb3cgZG8gdGhlIGhhc2hlcyAqLworICAgICAgLyog
Tm93IGRvIHRoZSBoYXNoZXMgKi8KIAotCWNoYXNoX3N0YXJ0KHR5cGUsIHVzZV9iYXNlKTsKLQlj
aGFzaF9taWQodHlwZSwgdXNlX2Jhc2UsIGlubmVya2V5KTsKLQljaGFzaF9lbmQodHlwZSwgdXNl
X2Jhc2UsIHN1YlsyXSwgVXN0cmxlbihzdWJbMl0pLCBpbm5lcmhhc2gpOworICAgICAgY2hhc2hf
c3RhcnQodHlwZSwgdXNlX2Jhc2UpOworICAgICAgY2hhc2hfbWlkKHR5cGUsIHVzZV9iYXNlLCBp
bm5lcmtleSk7CisgICAgICBjaGFzaF9lbmQodHlwZSwgdXNlX2Jhc2UsIHN1YlsyXSwgVXN0cmxl
bihzdWJbMl0pLCBpbm5lcmhhc2gpOwogCi0JY2hhc2hfc3RhcnQodHlwZSwgdXNlX2Jhc2UpOwot
CWNoYXNoX21pZCh0eXBlLCB1c2VfYmFzZSwgb3V0ZXJrZXkpOwotCWNoYXNoX2VuZCh0eXBlLCB1
c2VfYmFzZSwgaW5uZXJoYXNoLCBoYXNobGVuLCBmaW5hbGhhc2gpOworICAgICAgY2hhc2hfc3Rh
cnQodHlwZSwgdXNlX2Jhc2UpOworICAgICAgY2hhc2hfbWlkKHR5cGUsIHVzZV9iYXNlLCBvdXRl
cmtleSk7CisgICAgICBjaGFzaF9lbmQodHlwZSwgdXNlX2Jhc2UsIGlubmVyaGFzaCwgaGFzaGxl
biwgZmluYWxoYXNoKTsKIAotCS8qIEVuY29kZSB0aGUgZmluYWwgaGFzaCBhcyBhIGhleCBzdHJp
bmcgKi8KKyAgICAgIC8qIEVuY29kZSB0aGUgZmluYWwgaGFzaCBhcyBhIGhleCBzdHJpbmcgKi8K
IAotCXAgPSBmaW5hbGhhc2hfaGV4OwotCWZvciAoaW50IGkgPSAwOyBpIDwgaGFzaGxlbjsgaSsr
KQotCSAgewotCSAgKnArKyA9IGhleF9kaWdpdHNbKGZpbmFsaGFzaFtpXSAmIDB4ZjApID4+IDRd
OwotCSAgKnArKyA9IGhleF9kaWdpdHNbZmluYWxoYXNoW2ldICYgMHgwZl07Ci0JICB9CisgICAg
ICBwID0gZmluYWxoYXNoX2hleDsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaGFzaGxlbjsg
aSsrKQorCXsKKwkqcCsrID0gaGV4X2RpZ2l0c1soZmluYWxoYXNoW2ldICYgMHhmMCkgPj4gNF07
CisJKnArKyA9IGhleF9kaWdpdHNbZmluYWxoYXNoW2ldICYgMHgwZl07CisJfQogCi0JREVCVUco
RF9hbnkpIGRlYnVnX3ByaW50ZigiSE1BQ1slc10oJS4qcywlcyk9JS4qc1xuIiwKLQkgIHN1Ylsw
XSwgKGludClrZXlsZW4sIGtleXB0ciwgc3ViWzJdLCBoYXNobGVuKjIsIGZpbmFsaGFzaF9oZXgp
OworICAgICAgREVCVUcoRF9hbnkpIGRlYnVnX3ByaW50ZigiSE1BQ1slc10oJS4qcywlcyk9JS4q
c1xuIiwKKwlzdWJbMF0sIChpbnQpa2V5bGVuLCBrZXlwdHIsIHN1YlsyXSwgaGFzaGxlbioyLCBm
aW5hbGhhc2hfaGV4KTsKIAotCXlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIGZpbmFsaGFzaF9o
ZXgsIGhhc2hsZW4qMik7Ci0JfQotICAgICAgY29udGludWU7CisgICAgICB5aWVsZCA9IHN0cmlu
Z19jYXRuKHlpZWxkLCBmaW5hbGhhc2hfaGV4LCBoYXNobGVuKjIpOworICAgICAgYnJlYWs7CiAg
ICAgICB9CiAKICAgICAvKiBIYW5kbGUgZ2xvYmFsIHN1YnN0aXR1dGlvbiBmb3IgInNnIiAtIGxp
a2UgUGVybCdzIHMveHh4L3l5eS9nIG9wZXJhdG9yLgpAQCAtNTc0MywxMyArNTg3OSwxMiBAQAog
CiAgICAgY2FzZSBFSVRFTV9TRzoKICAgICAgIHsKLSAgICAgIGNvbnN0IHBjcmUgKnJlOworICAg
ICAgY29uc3QgcGNyZTJfY29kZSAqIHJlOwogICAgICAgaW50IG1vZmZzZXQsIG1vZmZzZXRleHRy
YSwgc2xlbjsKLSAgICAgIGludCByb2Zmc2V0OwotICAgICAgaW50IGVtcHR5b3B0OwotICAgICAg
Y29uc3QgdXNjaGFyICpyZXJyb3I7Ci0gICAgICB1c2NoYXIgKnN1YmplY3Q7Ci0gICAgICB1c2No
YXIgKnN1YlszXTsKKyAgICAgIFBDUkUyX1NJWkUgcm9mZnNldDsKKyAgICAgIHBjcmUyX21hdGNo
X2RhdGEgKiBtZDsKKyAgICAgIGludCBlcnIsIGVtcHR5b3B0OworICAgICAgdXNjaGFyICogc3Vi
amVjdCwgKiBzdWJbM107CiAgICAgICBpbnQgc2F2ZV9leHBhbmRfbm1heCA9CiAgICAgICAgIHNh
dmVfZXhwYW5kX3N0cmluZ3Moc2F2ZV9leHBhbmRfbnN0cmluZywgc2F2ZV9leHBhbmRfbmxlbmd0
aCk7CiAKQEAgLTU3NjAsMTUgKzU4OTUsMTkgQEAKICAgICAgICAgY2FzZSAzOiBnb3RvIEVYUEFO
RF9GQUlMRUQ7CiAgICAgICAgIH0KIAorICAgICAgLypYWFggbm8gaGFuZGxpbmcgb2Ygc2tpcHBp
bmc/ICovCiAgICAgICAvKiBDb21waWxlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKi8KIAotICAg
ICAgaWYgKCEocmUgPSBwY3JlX2NvbXBpbGUoQ1Mgc3ViWzFdLCBQQ1JFX0NPUFQsIENDU1MgJnJl
cnJvciwKLQkJCSAgICAgICZyb2Zmc2V0LCBOVUxMKSkpCisgICAgICBpZiAoIShyZSA9IHBjcmUy
X2NvbXBpbGUoKFBDUkUyX1NQVFIpc3ViWzFdLCBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsCisJCSAg
UENSRV9DT1BULCAmZXJyLCAmcm9mZnNldCwgcGNyZV9jbXBfY3R4KSkpCiAgICAgICAgIHsKKyAg
ICAgICAgdXNjaGFyIGVycmJ1ZlsxMjhdOworCXBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKGVyciwg
ZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CiAgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9
IHN0cmluZ19zcHJpbnRmKCJyZWd1bGFyIGV4cHJlc3Npb24gZXJyb3IgaW4gIgotICAgICAgICAg
ICJcIiVzXCI6ICVzIGF0IG9mZnNldCAlZCIsIHN1YlsxXSwgcmVycm9yLCByb2Zmc2V0KTsKKyAg
ICAgICAgICAiXCIlc1wiOiAlcyBhdCBvZmZzZXQgJWxkIiwgc3ViWzFdLCBlcnJidWYsIChsb25n
KXJvZmZzZXQpOwogICAgICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CiAgICAgICAgIH0KKyAgICAg
IG1kID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUoRVhQQU5EX01BWE4gKyAxLCBwY3JlX2dlbl9j
dHgpOwogCiAgICAgICAvKiBOb3cgcnVuIGEgbG9vcCB0byBkbyB0aGUgc3Vic3RpdHV0aW9ucyBh
cyBvZnRlbiBhcyBuZWNlc3NhcnkuIEl0IGVuZHMKICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIG1v
cmUgbWF0Y2hlcy4gVGFrZSBjYXJlIG92ZXIgbWF0Y2hlcyBvZiB0aGUgbnVsbCBzdHJpbmc7CkBA
IC01NzgxLDEwICs1OTIwLDEwIEBACiAKICAgICAgIGZvciAoOzspCiAgICAgICAgIHsKLSAgICAg
ICAgaW50IG92ZWN0b3JbMyooRVhQQU5EX01BWE4rMSldOwotICAgICAgICBpbnQgbiA9IHBjcmVf
ZXhlYyhyZSwgTlVMTCwgQ1Mgc3ViamVjdCwgc2xlbiwgbW9mZnNldCArIG1vZmZzZXRleHRyYSwK
LSAgICAgICAgICBQQ1JFX0VPUFQgfCBlbXB0eW9wdCwgb3ZlY3RvciwgbmVsZW0ob3ZlY3Rvcikp
OwotICAgICAgICB1c2NoYXIgKmluc2VydDsKKwlQQ1JFMl9TSVpFICogb3ZlYyA9IHBjcmUyX2dl
dF9vdmVjdG9yX3BvaW50ZXIobWQpOworCWludCBuID0gcGNyZTJfbWF0Y2gocmUsIChQQ1JFMl9T
UFRSKXN1YmplY3QsIHNsZW4sIG1vZmZzZXQgKyBtb2Zmc2V0ZXh0cmEsCisJICBQQ1JFX0VPUFQg
fCBlbXB0eW9wdCwgbWQsIHBjcmVfbXRjX2N0eCk7CisgICAgICAgIHVzY2hhciAqIGluc2VydDsK
IAogICAgICAgICAvKiBObyBtYXRjaCAtIGlmIHdlIHByZXZpb3VzbHkgc2V0IFBDUkVfTk9URU1Q
VFkgYWZ0ZXIgYSBudWxsIG1hdGNoLCB0aGlzCiAgICAgICAgIGlzIG5vdCBuZWNlc3NhcmlseSB0
aGUgZW5kLiBXZSB3YW50IHRvIHJlcGVhdCB0aGUgbWF0Y2ggZnJvbSBvbmUKQEAgLTU4MDYsMjQg
KzU5NDUsMjYgQEAKICAgICAgICAgICB9CiAKICAgICAgICAgLyogTWF0Y2ggLSBzZXQgdXAgZm9y
IGV4cGFuZGluZyB0aGUgcmVwbGFjZW1lbnQuICovCisJREVCVUcoRF9leHBhbmQpIGRlYnVnX3By
aW50Zl9pbmRlbnQoIiVzOiBtYXRjaFxuIiwgbmFtZSk7CiAKICAgICAgICAgaWYgKG4gPT0gMCkg
biA9IEVYUEFORF9NQVhOICsgMTsKICAgICAgICAgZXhwYW5kX25tYXggPSAwOwogICAgICAgICBm
b3IgKGludCBubiA9IDA7IG5uIDwgbioyOyBubiArPSAyKQogICAgICAgICAgIHsKLSAgICAgICAg
ICBleHBhbmRfbnN0cmluZ1tleHBhbmRfbm1heF0gPSBzdWJqZWN0ICsgb3ZlY3Rvcltubl07Ci0g
ICAgICAgICAgZXhwYW5kX25sZW5ndGhbZXhwYW5kX25tYXgrK10gPSBvdmVjdG9yW25uKzFdIC0g
b3ZlY3Rvcltubl07CisgICAgICAgICAgZXhwYW5kX25zdHJpbmdbZXhwYW5kX25tYXhdID0gc3Vi
amVjdCArIG92ZWNbbm5dOworICAgICAgICAgIGV4cGFuZF9ubGVuZ3RoW2V4cGFuZF9ubWF4Kytd
ID0gb3ZlY1tubisxXSAtIG92ZWNbbm5dOwogICAgICAgICAgIH0KICAgICAgICAgZXhwYW5kX25t
YXgtLTsKIAogICAgICAgICAvKiBDb3B5IHRoZSBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgbWF0Y2gs
IHBsdXMgdGhlIGV4cGFuZGVkIGluc2VydGlvbi4gKi8KIAotICAgICAgICB5aWVsZCA9IHN0cmlu
Z19jYXRuKHlpZWxkLCBzdWJqZWN0ICsgbW9mZnNldCwgb3ZlY3RvclswXSAtIG1vZmZzZXQpOwor
CXlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIHN1YmplY3QgKyBtb2Zmc2V0LCBvdmVjWzBdIC0g
bW9mZnNldCk7CisKICAgICAgICAgaWYgKCEoaW5zZXJ0ID0gZXhwYW5kX3N0cmluZyhzdWJbMl0p
KSkKIAkgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKICAgICAgICAgeWllbGQgPSBzdHJpbmdfY2F0KHlp
ZWxkLCBpbnNlcnQpOwogCi0gICAgICAgIG1vZmZzZXQgPSBvdmVjdG9yWzFdOworICAgICAgICBt
b2Zmc2V0ID0gb3ZlY1sxXTsKICAgICAgICAgbW9mZnNldGV4dHJhID0gMDsKICAgICAgICAgZW1w
dHlvcHQgPSAwOwogCkBAIC01ODM0LDEwICs1OTc1LDEwIEBACiAgICAgICAgIHN0cmluZyBhdCB0
aGUgc2FtZSBwb2ludC4gSWYgdGhpcyBmYWlscyAocGlja2VkIHVwIGFib3ZlKSB3ZSBhZHZhbmNl
IHRvCiAgICAgICAgIHRoZSBuZXh0IGNoYXJhY3Rlci4gKi8KIAotICAgICAgICBpZiAob3ZlY3Rv
clswXSA9PSBvdmVjdG9yWzFdKQorICAgICAgICBpZiAob3ZlY1swXSA9PSBvdmVjWzFdKQogICAg
ICAgICAgIHsKLSAgICAgICAgICBpZiAob3ZlY3RvclswXSA9PSBzbGVuKSBicmVhazsKLSAgICAg
ICAgICBlbXB0eW9wdCA9IFBDUkVfTk9URU1QVFkgfCBQQ1JFX0FOQ0hPUkVEOworICAgICAgICAg
IGlmIChvdmVjWzBdID09IHNsZW4pIGJyZWFrOworICAgICAgICAgIGVtcHR5b3B0ID0gUENSRTJf
Tk9URU1QVFkgfCBQQ1JFMl9BTkNIT1JFRDsKICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAt
NTg0NSw3ICs1OTg2LDggQEAKIAogICAgICAgcmVzdG9yZV9leHBhbmRfc3RyaW5ncyhzYXZlX2V4
cGFuZF9ubWF4LCBzYXZlX2V4cGFuZF9uc3RyaW5nLAogICAgICAgICBzYXZlX2V4cGFuZF9ubGVu
Z3RoKTsKLSAgICAgIGNvbnRpbnVlOworICAgICAgaWYgKHNraXBwaW5nKSBjb250aW51ZTsKKyAg
ICAgIGJyZWFrOwogICAgICAgfQogCiAgICAgLyogSGFuZGxlIGtleWVkIGFuZCBudW1iZXJlZCBz
dWJzdHJpbmcgZXh0cmFjdGlvbi4gSWYgdGhlIGZpcnN0IGFyZ3VtZW50CkBAIC01ODU1LDggKzU5
OTcsNyBAQAogICAgICAgewogICAgICAgaW50IGZpZWxkX251bWJlciA9IDE7CiAgICAgICBCT09M
IGZpZWxkX251bWJlcl9zZXQgPSBGQUxTRTsKLSAgICAgIHVzY2hhciAqc2F2ZV9sb29rdXBfdmFs
dWUgPSBsb29rdXBfdmFsdWU7Ci0gICAgICB1c2NoYXIgKnN1YlszXTsKKyAgICAgIHVzY2hhciAq
IHNhdmVfbG9va3VwX3ZhbHVlID0gbG9va3VwX3ZhbHVlLCAqIHN1YlszXTsKICAgICAgIGludCBz
YXZlX2V4cGFuZF9ubWF4ID0KICAgICAgICAgc2F2ZV9leHBhbmRfc3RyaW5ncyhzYXZlX2V4cGFu
ZF9uc3RyaW5nLCBzYXZlX2V4cGFuZF9ubGVuZ3RoKTsKIApAQCAtNTg4Miw3ICs2MDIzLDcgQEAK
IAogICAgICAgaWYgKHNraXBwaW5nKQogCXsKLSAgICAgICAgZm9yIChpbnQgaiA9IDU7IGogPiAw
ICYmICpzID09ICd7Jzsgai0tKQkJLyonfScqLworICAgICAgICBmb3IgKGludCBqID0gNTsgaiA+
IDAgJiYgKnMgPT0gJ3snOyBqLS0pCQkJLyonfScqLwogCSAgewogICAgICAgICAgIGlmICghZXhw
YW5kX3N0cmluZ19pbnRlcm5hbChzKzEsIFRSVUUsICZzLCBza2lwcGluZywgVFJVRSwgJnJlc2V0
b2spKQogCSAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CQkJCQkvKid7JyovCkBAIC01ODkzLDEzICs2
MDM0LDEzIEBACiAJICAgIH0KIAkgIFVza2lwX3doaXRlc3BhY2UoJnMpOwogCSAgfQotCWlmICgg
IFVzdHJuY21wKHMsICJmYWlsIiwgNCkgPT0gMAkJCS8qJ3snKi8KKwlpZiAoICBVc3RybmNtcChz
LCAiZmFpbCIsIDQpID09IDAJCQkJLyoneycqLwogCSAgICYmIChzWzRdID09ICd9JyB8fCBzWzRd
ID09ICcgJyB8fCBzWzRdID09ICdcdCcgfHwgIXNbNF0pCiAJICAgKQogCSAgewogCSAgcyArPSA0
OwogCSAgVXNraXBfd2hpdGVzcGFjZSgmcyk7Ci0JICB9CQkJCQkJCS8qJ3snKi8KKwkgIH0JCQkJ
CQkJCS8qJ3snKi8KIAlpZiAoKnMgIT0gJ30nKQogCSAgewogCSAgZXhwYW5kX3N0cmluZ19tZXNz
YWdlID0gVVMibWlzc2luZyAnfScgY2xvc2luZyBleHRyYWN0IjsKQEAgLTU5MDksMTAgKzYwNTAs
MTAgQEAKIAogICAgICAgZWxzZSBmb3IgKGludCBpID0gMCwgaiA9IDI7IGkgPCBqOyBpKyspIC8q
IFJlYWQgdGhlIHByb3BlciBudW1iZXIgb2YgYXJndW1lbnRzICovCiAgICAgICAgIHsKLQlpZiAo
VXNraXBfd2hpdGVzcGFjZSgmcykgPT0gJ3snKSAJCQkJCQkvKid9JyovCisJaWYgKFVza2lwX3do
aXRlc3BhY2UoJnMpID09ICd7JykgCQkJCS8qJ30nKi8KICAgICAgICAgICB7CiAgICAgICAgICAg
aWYgKCEoc3ViW2ldID0gZXhwYW5kX3N0cmluZ19pbnRlcm5hbChzKzEsIFRSVUUsICZzLCBza2lw
cGluZywgVFJVRSwgJnJlc2V0b2spKSkKLQkgICAgZ290byBFWFBBTkRfRkFJTEVEOwkJCQkJLyon
eycqLworCSAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CQkJCQkJLyoneycqLwogICAgICAgICAgIGlm
ICgqcysrICE9ICd9JykKIAkgICAgewogCSAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBzdHJp
bmdfc3ByaW50ZigKQEAgLTU5MjksNyArNjA3MCw3IEBACiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICBpbnQgbGVuOwogICAgICAgICAgICAgaW50IHggPSAwOwotICAgICAgICAgICAgdXNjaGFy
ICpwID0gc3ViWzBdOworICAgICAgICAgICAgdXNjaGFyICogcCA9IHN1YlswXTsKIAogICAgICAg
ICAgICAgVXNraXBfd2hpdGVzcGFjZSgmcCk7CiAgICAgICAgICAgICBzdWJbMF0gPSBwOwpAQCAt
NTkzOCw3ICs2MDc5LDcgQEAKICAgICAgICAgICAgIHdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2Uo
cFtsZW4tMV0pKSBsZW4tLTsKICAgICAgICAgICAgIHBbbGVuXSA9IDA7CiAKLQkgICAgaWYgKCpw
ID09IDApCisJICAgIGlmICghKnApCiAJICAgICAgewogCSAgICAgIGV4cGFuZF9zdHJpbmdfbWVz
c2FnZSA9IFVTImZpcnN0IGFyZ3VtZW50IG9mIFwiZXh0cmFjdFwiIG11c3QgIgogCQkibm90IGJl
IGVtcHR5IjsKQEAgLTU5NTAsOCArNjA5MSw4IEBACiAJICAgICAgZmllbGRfbnVtYmVyID0gLTE7
CiAJICAgICAgcCsrOwogCSAgICAgIH0KLQkgICAgd2hpbGUgKCpwICE9IDAgJiYgaXNkaWdpdCgq
cCkpIHggPSB4ICogMTAgKyAqcCsrIC0gJzAnOwotCSAgICBpZiAoKnAgPT0gMCkKKwkgICAgd2hp
bGUgKCpwICYmIGlzZGlnaXQoKnApKSB4ID0geCAqIDEwICsgKnArKyAtICcwJzsKKwkgICAgaWYg
KCEqcCkKIAkgICAgICB7CiAJICAgICAgZmllbGRfbnVtYmVyICo9IHg7CiAJICAgICAgaWYgKGZt
dCA9PSBleHRyYWN0X2Jhc2ljKSBqID0gMzsgICAgICAgICAgICAgICAvKiBOZWVkIDMgYXJncyAq
LwpAQCAtNjA4MSw3ICs2MjIyLDggQEAKICAgICAgIHJlc3RvcmVfZXhwYW5kX3N0cmluZ3Moc2F2
ZV9leHBhbmRfbm1heCwgc2F2ZV9leHBhbmRfbnN0cmluZywKICAgICAgICAgc2F2ZV9leHBhbmRf
bmxlbmd0aCk7CiAKLSAgICAgIGNvbnRpbnVlOworICAgICAgaWYgKHNraXBwaW5nKSBjb250aW51
ZTsKKyAgICAgIGJyZWFrOwogICAgICAgfQogCiAgICAgLyogcmV0dXJuIHRoZSBOdGggaXRlbSBm
cm9tIGEgbGlzdCAqLwpAQCAtNjA4OSw4ICs2MjMxLDcgQEAKICAgICBjYXNlIEVJVEVNX0xJU1RF
WFRSQUNUOgogICAgICAgewogICAgICAgaW50IGZpZWxkX251bWJlciA9IDE7Ci0gICAgICB1c2No
YXIgKnNhdmVfbG9va3VwX3ZhbHVlID0gbG9va3VwX3ZhbHVlOwotICAgICAgdXNjaGFyICpzdWJb
Ml07CisgICAgICB1c2NoYXIgKiBzYXZlX2xvb2t1cF92YWx1ZSA9IGxvb2t1cF92YWx1ZSwgKiBz
dWJbMl07CiAgICAgICBpbnQgc2F2ZV9leHBhbmRfbm1heCA9CiAgICAgICAgIHNhdmVfZXhwYW5k
X3N0cmluZ3Moc2F2ZV9leHBhbmRfbnN0cmluZywgc2F2ZV9leHBhbmRfbmxlbmd0aCk7CiAKQEAg
LTYwOTgsMTUgKzYyMzksMTUgQEAKIAogICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKysp
CiAgICAgICAgIHsKLSAgICAgICAgaWYgKFVza2lwX3doaXRlc3BhY2UoJnMpICE9ICd7JykJCQkJ
CS8qJ30nKi8KKyAgICAgICAgaWYgKFVza2lwX3doaXRlc3BhY2UoJnMpICE9ICd7JykJCQkJLyp9
Ki8KIAkgIHsKIAkgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKAotCSAg
ICAibWlzc2luZyAneycgZm9yIGFyZyAlZCBvZiBsaXN0ZXh0cmFjdCIsIGkrMSk7CisJICAgICJt
aXNzaW5nICd7JyBmb3IgYXJnICVkIG9mIGxpc3RleHRyYWN0IiwgaSsxKTsJCS8qfSovCiAJICBn
b3RvIEVYUEFORF9GQUlMRURfQ1VSTFk7CiAJICB9CiAKIAlzdWJbaV0gPSBleHBhbmRfc3RyaW5n
X2ludGVybmFsKHMrMSwgVFJVRSwgJnMsIHNraXBwaW5nLCBUUlVFLCAmcmVzZXRvayk7Ci0JaWYg
KCFzdWJbaV0pICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CQkvKnsqLworCWlmICghc3ViW2ldKSAg
ICAgZ290byBFWFBBTkRfRkFJTEVEOwkJCQkvKnt7Ki8KIAlpZiAoKnMrKyAhPSAnfScpCiAJICB7
CiAJICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigKQEAgLTYxNzksNyAr
NjMyMCw4IEBACiAgICAgICByZXN0b3JlX2V4cGFuZF9zdHJpbmdzKHNhdmVfZXhwYW5kX25tYXgs
IHNhdmVfZXhwYW5kX25zdHJpbmcsCiAgICAgICAgIHNhdmVfZXhwYW5kX25sZW5ndGgpOwogCi0g
ICAgICBjb250aW51ZTsKKyAgICAgIGlmIChza2lwcGluZykgY29udGludWU7CisgICAgICBicmVh
azsKICAgICAgIH0KIAogICAgIGNhc2UgRUlURU1fTElTVFFVT1RFOgpAQCAtNjE5NywxNCArNjMz
OSwxNCBAQAogCXlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIHN1YlsxXSwgMSk7CiAJfQogICAg
ICAgZWxzZSB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBVUyIgIiwgMSk7Ci0gICAgICBjb250
aW51ZTsKKyAgICAgIGlmIChza2lwcGluZykgY29udGludWU7CisgICAgICBicmVhazsKICAgICAg
IH0KIAogI2lmbmRlZiBESVNBQkxFX1RMUwogICAgIGNhc2UgRUlURU1fQ0VSVEVYVFJBQ1Q6CiAg
ICAgICB7Ci0gICAgICB1c2NoYXIgKnNhdmVfbG9va3VwX3ZhbHVlID0gbG9va3VwX3ZhbHVlOwot
ICAgICAgdXNjaGFyICpzdWJbMl07CisgICAgICB1c2NoYXIgKiBzYXZlX2xvb2t1cF92YWx1ZSA9
IGxvb2t1cF92YWx1ZSwgKiBzdWJbMl07CiAgICAgICBpbnQgc2F2ZV9leHBhbmRfbm1heCA9CiAg
ICAgICAgIHNhdmVfZXhwYW5kX3N0cmluZ3Moc2F2ZV9leHBhbmRfbnN0cmluZywgc2F2ZV9leHBh
bmRfbmxlbmd0aCk7CiAKQEAgLTYyMTIsMTAgKzYzNTQsMTAgQEAKICAgICAgIGlmIChVc2tpcF93
aGl0ZXNwYWNlKCZzKSAhPSAneycpCQkJCQkvKn0qLwogCXsKIAlleHBhbmRfc3RyaW5nX21lc3Nh
Z2UgPSBVUyJtaXNzaW5nICd7JyBmb3IgZmllbGQgYXJnIG9mIGNlcnRleHRyYWN0IjsKLQlnb3Rv
IEVYUEFORF9GQUlMRURfQ1VSTFk7CisJZ290byBFWFBBTkRfRkFJTEVEX0NVUkxZOwkJCQkJLyp9
Ki8KIAl9CiAgICAgICBzdWJbMF0gPSBleHBhbmRfc3RyaW5nX2ludGVybmFsKHMrMSwgVFJVRSwg
JnMsIHNraXBwaW5nLCBUUlVFLCAmcmVzZXRvayk7Ci0gICAgICBpZiAoIXN1YlswXSkgICAgIGdv
dG8gRVhQQU5EX0ZBSUxFRDsJCS8qeyovCisgICAgICBpZiAoIXN1YlswXSkgICAgIGdvdG8gRVhQ
QU5EX0ZBSUxFRDsJCQkJLyp7eyovCiAgICAgICBpZiAoKnMrKyAhPSAnfScpCiAgICAgICAgIHsK
IAlleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBVUyJtaXNzaW5nICd9JyBjbG9zaW5nIGZpZWxkIGFy
ZyBvZiBjZXJ0ZXh0cmFjdCI7CkBAIC02MjM4LDcgKzYzODAsNyBAQAogICAgICAgaWYgKFVza2lw
X3doaXRlc3BhY2UoJnMpICE9ICd7JykJCQkJCS8qfSovCiAJewogCWV4cGFuZF9zdHJpbmdfbWVz
c2FnZSA9IFVTIm1pc3NpbmcgJ3snIGZvciBjZXJ0IHZhcmlhYmxlIGFyZyBvZiBjZXJ0ZXh0cmFj
dCI7Ci0JZ290byBFWFBBTkRfRkFJTEVEX0NVUkxZOworCWdvdG8gRVhQQU5EX0ZBSUxFRF9DVVJM
WTsJCQkJCS8qfSovCiAJfQogICAgICAgaWYgKCorK3MgIT0gJyQnKQogICAgICAgICB7CkBAIC02
MjQ3LDcgKzYzODksNyBAQAogCWdvdG8gRVhQQU5EX0ZBSUxFRDsKIAl9CiAgICAgICBzdWJbMV0g
PSBleHBhbmRfc3RyaW5nX2ludGVybmFsKHMrMSwgVFJVRSwgJnMsIHNraXBwaW5nLCBGQUxTRSwg
JnJlc2V0b2spOwotICAgICAgaWYgKCFzdWJbMV0pICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CQkv
KnsqLworICAgICAgaWYgKCFzdWJbMV0pICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CQkJCS8qe3sq
LwogICAgICAgaWYgKCpzKysgIT0gJ30nKQogICAgICAgICB7CiAJZXhwYW5kX3N0cmluZ19tZXNz
YWdlID0gVVMibWlzc2luZyAnfScgY2xvc2luZyBjZXJ0IHZhcmlhYmxlIGFyZyBvZiBjZXJ0ZXh0
cmFjdCI7CkBAIC02Mjc2LDcgKzY0MTgsOCBAQAogCiAgICAgICByZXN0b3JlX2V4cGFuZF9zdHJp
bmdzKHNhdmVfZXhwYW5kX25tYXgsIHNhdmVfZXhwYW5kX25zdHJpbmcsCiAgICAgICAgIHNhdmVf
ZXhwYW5kX25sZW5ndGgpOwotICAgICAgY29udGludWU7CisgICAgICBpZiAoc2tpcHBpbmcpIGNv
bnRpbnVlOworICAgICAgYnJlYWs7CiAgICAgICB9CiAjZW5kaWYJLypESVNBQkxFX1RMUyovCiAK
QEAgLTYyODYsMjMgKzY0MjksMjIgQEAKICAgICBjYXNlIEVJVEVNX01BUDoKICAgICBjYXNlIEVJ
VEVNX1JFRFVDRToKICAgICAgIHsKLSAgICAgIGludCBzZXAgPSAwOwotICAgICAgaW50IHNhdmVf
cHRyID0gZ3N0cmluZ19sZW5ndGgoeWllbGQpOworICAgICAgaW50IHNlcCA9IDAsIHNhdmVfcHRy
ID0gZ3N0cmluZ19sZW5ndGgoeWllbGQpOwogICAgICAgdXNjaGFyIG91dHNlcFsyXSA9IHsgJ1ww
JywgJ1wwJyB9OwogICAgICAgY29uc3QgdXNjaGFyICpsaXN0LCAqZXhwciwgKnRlbXA7Ci0gICAg
ICB1c2NoYXIgKnNhdmVfaXRlcmF0ZV9pdGVtID0gaXRlcmF0ZV9pdGVtOwotICAgICAgdXNjaGFy
ICpzYXZlX2xvb2t1cF92YWx1ZSA9IGxvb2t1cF92YWx1ZTsKKyAgICAgIHVzY2hhciAqIHNhdmVf
aXRlcmF0ZV9pdGVtID0gaXRlcmF0ZV9pdGVtOworICAgICAgdXNjaGFyICogc2F2ZV9sb29rdXBf
dmFsdWUgPSBsb29rdXBfdmFsdWU7CiAKICAgICAgIFVza2lwX3doaXRlc3BhY2UoJnMpOwotICAg
ICAgaWYgKCpzKysgIT0gJ3snKQorICAgICAgaWYgKCpzKysgIT0gJ3snKQkJCQkJCQkvKn0qLwog
ICAgICAgICB7CiAJZXhwYW5kX3N0cmluZ19tZXNzYWdlID0KIAkgIHN0cmluZ19zcHJpbnRmKCJt
aXNzaW5nICd7JyBmb3IgZmlyc3QgYXJnIG9mICVzIiwgbmFtZSk7Ci0JZ290byBFWFBBTkRfRkFJ
TEVEX0NVUkxZOworCWdvdG8gRVhQQU5EX0ZBSUxFRF9DVVJMWTsJCQkJCS8qfSovCiAJfQogCiAg
ICAgICBpZiAoIShsaXN0ID0gZXhwYW5kX3N0cmluZ19pbnRlcm5hbChzLCBUUlVFLCAmcywgc2tp
cHBpbmcsIFRSVUUsICZyZXNldG9rKSkpCi0JZ290byBFWFBBTkRfRkFJTEVEOworCWdvdG8gRVhQ
QU5EX0ZBSUxFRDsJCQkJCQkvKnt7Ki8KICAgICAgIGlmICgqcysrICE9ICd9JykKICAgICAgICAg
ewogCWV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9CkBAIC02MzE0LDE0ICs2NDU2LDE0IEBACiAgICAg
ICAgIHsKIAl1c2NoYXIgKiB0OwogICAgICAgICBVc2tpcF93aGl0ZXNwYWNlKCZzKTsKLSAgICAg
ICAgaWYgKCpzKysgIT0gJ3snKQorICAgICAgICBpZiAoKnMrKyAhPSAneycpCQkJCQkJLyp9Ki8K
IAkgIHsKIAkgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IFVTIm1pc3NpbmcgJ3snIGZvciBzZWNv
bmQgYXJnIG9mIHJlZHVjZSI7Ci0JICBnb3RvIEVYUEFORF9GQUlMRURfQ1VSTFk7CisJICBnb3Rv
IEVYUEFORF9GQUlMRURfQ1VSTFk7CQkJCQkvKn0qLwogCSAgfQogICAgICAgICB0ID0gZXhwYW5k
X3N0cmluZ19pbnRlcm5hbChzLCBUUlVFLCAmcywgc2tpcHBpbmcsIFRSVUUsICZyZXNldG9rKTsK
ICAgICAgICAgaWYgKCF0KSBnb3RvIEVYUEFORF9GQUlMRUQ7Ci0gICAgICAgIGxvb2t1cF92YWx1
ZSA9IHQ7CisgICAgICAgIGxvb2t1cF92YWx1ZSA9IHQ7CQkJCQkJLyp7eyovCiAgICAgICAgIGlm
ICgqcysrICE9ICd9JykKIAkgIHsKIAkgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IFVTIm1pc3Np
bmcgJ30nIGNsb3Npbmcgc2Vjb25kIGFyZyBvZiByZWR1Y2UiOwpAQCAtNjMzMCwxMCArNjQ3Miwx
MCBAQAogICAgICAgICB9CiAKICAgICAgIFVza2lwX3doaXRlc3BhY2UoJnMpOwotICAgICAgaWYg
KCpzKysgIT0gJ3snKQorICAgICAgaWYgKCpzKysgIT0gJ3snKQkJCQkJCQkvKn0qLwogICAgICAg
ICB7CiAJZXhwYW5kX3N0cmluZ19tZXNzYWdlID0KLQkgIHN0cmluZ19zcHJpbnRmKCJtaXNzaW5n
ICd7JyBmb3IgbGFzdCBhcmcgb2YgJXMiLCBuYW1lKTsKKwkgIHN0cmluZ19zcHJpbnRmKCJtaXNz
aW5nICd7JyBmb3IgbGFzdCBhcmcgb2YgJXMiLCBuYW1lKTsJLyp9Ki8KIAlnb3RvIEVYUEFORF9G
QUlMRURfQ1VSTFk7CiAJfQogCkBAIC02MzQ1LDEzICs2NDg3LDEwIEBACiAgICAgICBjb25kaXRp
b24gZm9yIHJlYWwuIEZvciBFSVRFTV9NQVAgYW5kIEVJVEVNX1JFRFVDRSwgZG8gdGhlIHNhbWUs
IHVzaW5nCiAgICAgICB0aGUgbm9ybWFsIGludGVybmFsIGV4cGFuc2lvbiBmdW5jdGlvbi4gKi8K
IAotICAgICAgaWYgKGl0ZW1fdHlwZSA9PSBFSVRFTV9GSUxURVIpCi0gICAgICAgIHsKLSAgICAg
ICAgaWYgKCh0ZW1wID0gZXZhbF9jb25kaXRpb24oZXhwciwgJnJlc2V0b2ssIE5VTEwpKSkKLQkg
IHMgPSB0ZW1wOwotICAgICAgICB9Ci0gICAgICBlbHNlCisgICAgICBpZiAoaXRlbV90eXBlICE9
IEVJVEVNX0ZJTFRFUikKICAgICAgICAgdGVtcCA9IGV4cGFuZF9zdHJpbmdfaW50ZXJuYWwocywg
VFJVRSwgJnMsIFRSVUUsIFRSVUUsICZyZXNldG9rKTsKKyAgICAgIGVsc2UKKyAgICAgICAgaWYg
KCh0ZW1wID0gZXZhbF9jb25kaXRpb24oZXhwciwgJnJlc2V0b2ssIE5VTEwpKSkgcyA9IHRlbXA7
CiAKICAgICAgIGlmICghdGVtcCkKICAgICAgICAgewpAQCAtNjM2MCwxOCArNjQ5OSwxOCBAQAog
ICAgICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CiAgICAgICAgIH0KIAotICAgICAgVXNraXBfd2hp
dGVzcGFjZSgmcyk7CisgICAgICBVc2tpcF93aGl0ZXNwYWNlKCZzKTsJCQkJCQkvKnt7eyovCiAg
ICAgICBpZiAoKnMrKyAhPSAnfScpCi0gICAgICAgIHsJCQkJCQkvKnsqLworICAgICAgICB7CiAg
ICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJtaXNzaW5nIH0g
YXQgZW5kIG9mIGNvbmRpdGlvbiAiCiAgICAgICAgICAgIm9yIGV4cHJlc3Npb24gaW5zaWRlIFwi
JXNcIjsgY291bGQgYmUgYW4gdW5xdW90ZWQgfSBpbiB0aGUgY29udGVudCIsCiAJICBuYW1lKTsK
ICAgICAgICAgZ290byBFWFBBTkRfRkFJTEVEOwogICAgICAgICB9CiAKLSAgICAgIFVza2lwX3do
aXRlc3BhY2UoJnMpOwkJCQkvKnsqLworICAgICAgVXNraXBfd2hpdGVzcGFjZSgmcyk7CQkJCQkJ
Lyp7eyovCiAgICAgICBpZiAoKnMrKyAhPSAnfScpCi0gICAgICAgIHsJCQkJCQkvKnsqLworICAg
ICAgICB7CiAgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJt
aXNzaW5nIH0gYXQgZW5kIG9mIFwiJXNcIiIsCiAgICAgICAgICAgbmFtZSk7CiAgICAgICAgIGdv
dG8gRVhQQU5EX0ZBSUxFRDsKQEAgLTY0MzQsNiArNjU3Myw5IEBACiAgICAgICAgIGl0ZW0gb2Yg
dGhlIG91dHB1dCBsaXN0LCBhZGQgaW4gYSBzcGFjZSBpZiB0aGUgbmV3IGl0ZW0gYmVnaW5zIHdp
dGggdGhlCiAgICAgICAgIHNlcGFyYXRvciBjaGFyYWN0ZXIsIG9yIGlzIGFuIGVtcHR5IHN0cmlu
Zy4gKi8KIAorLypYWFggaXMgdGhlcmUgbm90IGEgc3RhbmRhcmQgc3VwcG9ydCBmdW5jdGlvbiBm
b3IgdGhpcywgYXBwZW5kaW5nIHRvIGEgbGlzdD8gKi8KKy8qIHllcywgc3RyaW5nX2FwcGVuZF9s
aXN0ZWxlKCksIGJ1dCBpdCBkZXBlbmRzIG9uIGxhY2sgb2YgdGV4dCBiZWZvcmUgdGhlIGxpc3Qg
Ki8KKwogICAgICAgICBpZiAoICB5aWVsZCAmJiB5aWVsZC0+cHRyICE9IHNhdmVfcHRyCiAJICAg
JiYgKHRlbXBbMF0gPT0gKm91dHNlcCB8fCB0ZW1wWzBdID09IDApKQogICAgICAgICAgIHlpZWxk
ID0gc3RyaW5nX2NhdG4oeWllbGQsIFVTIiAiLCAxKTsKQEAgLTY0NTEsNyArNjU5Myw3IEBACiAg
ICAgICAgICAgdG9vIG1hbnk7IGJhY2t1cCBhbmQgZW5kIHRoZSBsb29wLiBPdGhlcndpc2UgYXJy
YW5nZSB0byBkb3VibGUgdGhlCiAgICAgICAgICAgc2VwYXJhdG9yLiAqLwogCi0gICAgICAgICAg
aWYgKHRlbXBbc2VnbGVuXSA9PSAnXDAnKSB7IHlpZWxkLT5wdHItLTsgYnJlYWs7IH0KKyAgICAg
ICAgICBpZiAoIXRlbXBbc2VnbGVuXSkgeyB5aWVsZC0+cHRyLS07IGJyZWFrOyB9CiAgICAgICAg
ICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgb3V0c2VwLCAxKTsKICAgICAgICAgICB0ZW1w
ICs9IHNlZ2xlbiArIDE7CiAgICAgICAgICAgfQpAQCAtNjQ4MCwyOCArNjYyMiwyNyBAQAogICAg
ICAgLyogUmVzdG9yZSBwcmVzZXJ2ZWQgJGl0ZW0gKi8KIAogICAgICAgaXRlcmF0ZV9pdGVtID0g
c2F2ZV9pdGVyYXRlX2l0ZW07Ci0gICAgICBjb250aW51ZTsKKyAgICAgIGlmIChza2lwcGluZykg
Y29udGludWU7CisgICAgICBicmVhazsKICAgICAgIH0KIAogICAgIGNhc2UgRUlURU1fU09SVDoK
ICAgICAgIHsKLSAgICAgIGludCBjb25kX3R5cGU7Ci0gICAgICBpbnQgc2VwID0gMDsKLSAgICAg
IGNvbnN0IHVzY2hhciAqc3JjbGlzdCwgKmNtcCwgKnh0cmFjdDsKKyAgICAgIGludCBzZXAgPSAw
LCBjb25kX3R5cGU7CisgICAgICBjb25zdCB1c2NoYXIgKiBzcmNsaXN0LCAqIGNtcCwgKiB4dHJh
Y3Q7CiAgICAgICB1c2NoYXIgKiBvcG5hbWUsICogc3JjaXRlbTsKLSAgICAgIGNvbnN0IHVzY2hh
ciAqZHN0bGlzdCA9IE5VTEwsICpkc3RrZXlsaXN0ID0gTlVMTDsKLSAgICAgIHVzY2hhciAqIHRt
cDsKLSAgICAgIHVzY2hhciAqc2F2ZV9pdGVyYXRlX2l0ZW0gPSBpdGVyYXRlX2l0ZW07CisgICAg
ICBjb25zdCB1c2NoYXIgKiBkc3RsaXN0ID0gTlVMTCwgKiBkc3RrZXlsaXN0ID0gTlVMTDsKKyAg
ICAgIHVzY2hhciAqIHRtcCwgKiBzYXZlX2l0ZXJhdGVfaXRlbSA9IGl0ZXJhdGVfaXRlbTsKIAog
ICAgICAgVXNraXBfd2hpdGVzcGFjZSgmcyk7Ci0gICAgICBpZiAoKnMrKyAhPSAneycpCisgICAg
ICBpZiAoKnMrKyAhPSAneycpCQkJCQkJCS8qfSovCiAgICAgICAgIHsKICAgICAgICAgZXhwYW5k
X3N0cmluZ19tZXNzYWdlID0gVVMibWlzc2luZyAneycgZm9yIGxpc3QgYXJnIG9mIHNvcnQiOwot
CWdvdG8gRVhQQU5EX0ZBSUxFRF9DVVJMWTsKKwlnb3RvIEVYUEFORF9GQUlMRURfQ1VSTFk7CQkJ
CQkvKn0qLwogCX0KIAogICAgICAgc3JjbGlzdCA9IGV4cGFuZF9zdHJpbmdfaW50ZXJuYWwocywg
VFJVRSwgJnMsIHNraXBwaW5nLCBUUlVFLCAmcmVzZXRvayk7Ci0gICAgICBpZiAoIXNyY2xpc3Qp
IGdvdG8gRVhQQU5EX0ZBSUxFRDsKKyAgICAgIGlmICghc3JjbGlzdCkgZ290byBFWFBBTkRfRkFJ
TEVEOwkJCQkJLyp7eyovCiAgICAgICBpZiAoKnMrKyAhPSAnfScpCiAgICAgICAgIHsKICAgICAg
ICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gVVMibWlzc2luZyAnfScgY2xvc2luZyBsaXN0IGFy
ZyBvZiBzb3J0IjsKQEAgLTY1MDksMTQgKzY2NTAsMTQgQEAKIAl9CiAKICAgICAgIFVza2lwX3do
aXRlc3BhY2UoJnMpOwotICAgICAgaWYgKCpzKysgIT0gJ3snKQorICAgICAgaWYgKCpzKysgIT0g
J3snKQkJCQkJCQkvKn0qLwogICAgICAgICB7CiAgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2Fn
ZSA9IFVTIm1pc3NpbmcgJ3snIGZvciBjb21wYXJhdG9yIGFyZyBvZiBzb3J0IjsKLQlnb3RvIEVY
UEFORF9GQUlMRURfQ1VSTFk7CisJZ290byBFWFBBTkRfRkFJTEVEX0NVUkxZOwkJCQkJLyp9Ki8K
IAl9CiAKICAgICAgIGNtcCA9IGV4cGFuZF9zdHJpbmdfaW50ZXJuYWwocywgVFJVRSwgJnMsIHNr
aXBwaW5nLCBGQUxTRSwgJnJlc2V0b2spOwotICAgICAgaWYgKCFjbXApIGdvdG8gRVhQQU5EX0ZB
SUxFRDsKKyAgICAgIGlmICghY21wKSBnb3RvIEVYUEFORF9GQUlMRUQ7CQkJCQkvKnt7Ki8KICAg
ICAgIGlmICgqcysrICE9ICd9JykKICAgICAgICAgewogICAgICAgICBleHBhbmRfc3RyaW5nX21l
c3NhZ2UgPSBVUyJtaXNzaW5nICd9JyBjbG9zaW5nIGNvbXBhcmF0b3IgYXJnIG9mIHNvcnQiOwpA
QCAtNjU0MywyNSArNjY4NCwyNSBAQAogCX0KIAogICAgICAgVXNraXBfd2hpdGVzcGFjZSgmcyk7
Ci0gICAgICBpZiAoKnMrKyAhPSAneycpCisgICAgICBpZiAoKnMrKyAhPSAneycpCQkJCQkJCS8q
fSovCiAgICAgICAgIHsKICAgICAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gVVMibWlzc2lu
ZyAneycgZm9yIGV4dHJhY3RvciBhcmcgb2Ygc29ydCI7Ci0JZ290byBFWFBBTkRfRkFJTEVEX0NV
UkxZOworCWdvdG8gRVhQQU5EX0ZBSUxFRF9DVVJMWTsJCQkJCS8qfSovCiAJfQogCiAgICAgICB4
dHJhY3QgPSBzOwogICAgICAgaWYgKCEodG1wID0gZXhwYW5kX3N0cmluZ19pbnRlcm5hbChzLCBU
UlVFLCAmcywgVFJVRSwgVFJVRSwgJnJlc2V0b2spKSkKIAlnb3RvIEVYUEFORF9GQUlMRUQ7CiAg
ICAgICB4dHJhY3QgPSBzdHJpbmdfY29weW4oeHRyYWN0LCBzIC0geHRyYWN0KTsKLQorCQkJCQkJ
CQkJLyp7eyovCiAgICAgICBpZiAoKnMrKyAhPSAnfScpCiAgICAgICAgIHsKICAgICAgICAgZXhw
YW5kX3N0cmluZ19tZXNzYWdlID0gVVMibWlzc2luZyAnfScgY2xvc2luZyBleHRyYWN0b3IgYXJn
IG9mIHNvcnQiOwogCWdvdG8gRVhQQU5EX0ZBSUxFRF9DVVJMWTsKIAl9Ci0JCQkJCQkJLyp7Ki8K
KwkJCQkJCQkJCS8qe3sqLwogICAgICAgaWYgKCpzKysgIT0gJ30nKQotICAgICAgICB7CQkJCQkJ
Lyp7Ki8KKyAgICAgICAgewogICAgICAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBVUyJtaXNz
aW5nIH0gYXQgZW5kIG9mIFwic29ydFwiIjsKICAgICAgICAgZ290byBFWFBBTkRfRkFJTEVEOwog
ICAgICAgICB9CkBAIC02NTcxLDggKzY3MTIsNyBAQAogICAgICAgd2hpbGUgKChzcmNpdGVtID0g
c3RyaW5nX25leHRpbmxpc3QoJnNyY2xpc3QsICZzZXAsIE5VTEwsIDApKSkKIAl7CiAJdXNjaGFy
ICogc3JjZmllbGQsICogZHN0aXRlbTsKLQlnc3RyaW5nICogbmV3bGlzdCA9IE5VTEw7Ci0JZ3N0
cmluZyAqIG5ld2tleWxpc3QgPSBOVUxMOworCWdzdHJpbmcgKiBuZXdsaXN0ID0gTlVMTCwgKiBu
ZXdrZXlsaXN0ID0gTlVMTDsKIAogICAgICAgICBERUJVRyhEX2V4cGFuZCkgZGVidWdfcHJpbnRm
X2luZGVudCgiJXM6ICRpdGVtID0gXCIlc1wiXG4iLCBuYW1lLCBzcmNpdGVtKTsKIApAQCAtNjU5
Niw3ICs2NzM2LDcgQEAKIAogCSAgLyogZmllbGQgZm9yIGNvbXBhcmlzb24gKi8KIAkgIGlmICgh
KGRzdGZpZWxkID0gc3RyaW5nX25leHRpbmxpc3QoJmRzdGtleWxpc3QsICZzZXAsIE5VTEwsIDAp
KSkKLQkgICAgZ290byBzb3J0X21pc21hdGNoOworCSAgICBnb3RvIFNPUlRfTUlTTUFUQ0g7CiAK
IAkgIC8qIFN0cmluZy1jb21wYXJhdG9yIG5hbWVzIHN0YXJ0IHdpdGggYSBsZXR0ZXI7IG51bWVy
aWMgbmFtZXMgZG8gbm90ICovCiAKQEAgLTY2MTcsNyArNjc1Nyw3IEBACiAJICAgIHdoaWxlICgo
ZHN0aXRlbSA9IHN0cmluZ19uZXh0aW5saXN0KCZkc3RsaXN0LCAmc2VwLCBOVUxMLCAwKSkpCiAJ
ICAgICAgewogCSAgICAgIGlmICghKGRzdGZpZWxkID0gc3RyaW5nX25leHRpbmxpc3QoJmRzdGtl
eWxpc3QsICZzZXAsIE5VTEwsIDApKSkKLQkJZ290byBzb3J0X21pc21hdGNoOworCQlnb3RvIFNP
UlRfTUlTTUFUQ0g7CiAJICAgICAgbmV3bGlzdCA9IHN0cmluZ19hcHBlbmRfbGlzdGVsZShuZXds
aXN0LCBzZXAsIGRzdGl0ZW0pOwogCSAgICAgIG5ld2tleWxpc3QgPSBzdHJpbmdfYXBwZW5kX2xp
c3RlbGUobmV3a2V5bGlzdCwgc2VwLCBkc3RmaWVsZCk7CiAJICAgICAgfQpAQCAtNjY0OCw5ICs2
Nzg4LDkgQEAKIAogICAgICAgLyogUmVzdG9yZSBwcmVzZXJ2ZWQgJGl0ZW0gKi8KICAgICAgIGl0
ZXJhdGVfaXRlbSA9IHNhdmVfaXRlcmF0ZV9pdGVtOwotICAgICAgY29udGludWU7CisgICAgICBi
cmVhazsKIAotICAgICAgc29ydF9taXNtYXRjaDoKKyAgICAgIFNPUlRfTUlTTUFUQ0g6CiAJZXhw
YW5kX3N0cmluZ19tZXNzYWdlID0gVVMiSW50ZXJuYWwgZXJyb3IgaW4gc29ydCAobGlzdCBtaXNt
YXRjaCkiOwogCWdvdG8gRVhQQU5EX0ZBSUxFRDsKICAgICAgIH0KQEAgLTY2NzEsMTMgKzY4MTEs
MTMgQEAKIAogI2Vsc2UgICAvKiBFWFBBTkRfRExGVU5DICovCiAgICAgICB7Ci0gICAgICB0cmVl
X25vZGUgKnQ7Ci0gICAgICBleGltX2RsZnVuY190ICpmdW5jOwotICAgICAgdXNjaGFyICpyZXN1
bHQ7CisgICAgICB0cmVlX25vZGUgKiB0OworICAgICAgZXhpbV9kbGZ1bmNfdCAqIGZ1bmM7Cisg
ICAgICB1c2NoYXIgKiByZXN1bHQ7CiAgICAgICBpbnQgc3RhdHVzLCBhcmdjOwotICAgICAgdXNj
aGFyICphcmd2W0VYUEFORF9ETEZVTkNfTUFYX0FSR1MgKyAzXTsKKyAgICAgIHVzY2hhciAqIGFy
Z3ZbRVhQQU5EX0RMRlVOQ19NQVhfQVJHUyArIDNdOwogCi0gICAgICBpZiAoKGV4cGFuZF9mb3Ji
aWQgJiBSRE9fRExGVU5DKSAhPSAwKQorICAgICAgaWYgKGV4cGFuZF9mb3JiaWQgJiBSRE9fRExG
VU5DKQogICAgICAgICB7CiAgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9CiAgICAgICAg
ICAgVVMiZHluYW1pY2FsbHktbG9hZGVkIGZ1bmN0aW9ucyBhcmUgbm90IHBlcm1pdHRlZCI7CkBA
IC02NzAxLDcgKzY4NDEsNyBAQAogCiAgICAgICBpZiAoISh0ID0gdHJlZV9zZWFyY2goZGxvYmpf
YW5jaG9yLCBhcmd2WzBdKSkpCiAgICAgICAgIHsKLSAgICAgICAgdm9pZCAqaGFuZGxlID0gZGxv
cGVuKENTIGFyZ3ZbMF0sIFJUTERfTEFaWSk7CisgICAgICAgIHZvaWQgKiBoYW5kbGUgPSBkbG9w
ZW4oQ1MgYXJndlswXSwgUlRMRF9MQVpZKTsKICAgICAgICAgaWYgKCFoYW5kbGUpCiAgICAgICAg
ICAgewogICAgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJk
bG9wZW4gXCIlc1wiIGZhaWxlZDogJXMiLApAQCAtNjcwOSw3ICs2ODQ5LDcgQEAKICAgICAgICAg
ICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAiJXMiLCBleHBhbmRfc3RyaW5nX21l
c3NhZ2UpOwogICAgICAgICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKICAgICAgICAgICB9Ci0gICAg
ICAgIHQgPSBzdG9yZV9nZXRfcGVybShzaXplb2YodHJlZV9ub2RlKSArIFVzdHJsZW4oYXJndlsw
XSksIGlzX3RhaW50ZWQoYXJndlswXSkpOworICAgICAgICB0ID0gc3RvcmVfZ2V0X3Blcm0oc2l6
ZW9mKHRyZWVfbm9kZSkgKyBVc3RybGVuKGFyZ3ZbMF0pLCBhcmd2WzBdKTsKICAgICAgICAgVXN0
cmNweSh0LT5uYW1lLCBhcmd2WzBdKTsKICAgICAgICAgdC0+ZGF0YS5wdHIgPSBoYW5kbGU7CiAg
ICAgICAgICh2b2lkKXRyZWVfaW5zZXJ0bm9kZSgmZGxvYmpfYW5jaG9yLCB0KTsKQEAgLTY3MzUs
MTUgKzY4NzUsOSBAQAogCiAgICAgICByZXNldG9rID0gRkFMU0U7CiAgICAgICByZXN1bHQgPSBO
VUxMOwotICAgICAgZm9yIChhcmdjID0gMDsgYXJndlthcmdjXTsgYXJnYysrKTsKLSAgICAgIHN0
YXR1cyA9IGZ1bmMoJnJlc3VsdCwgYXJnYyAtIDIsICZhcmd2WzJdKTsKLSAgICAgIGlmKHN0YXR1
cyA9PSBPSykKLSAgICAgICAgewotICAgICAgICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0gVVMiIjsK
LSAgICAgICAgeWllbGQgPSBzdHJpbmdfY2F0KHlpZWxkLCByZXN1bHQpOwotICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotICAgICAgZWxzZQorICAgICAgZm9yIChhcmdjID0gMDsgYXJndlth
cmdjXTsgYXJnYysrKSA7CisKKyAgICAgIGlmICgoc3RhdHVzID0gZnVuYygmcmVzdWx0LCBhcmdj
IC0gMiwgJmFyZ3ZbMl0pKSAhPSBPSykKICAgICAgICAgewogICAgICAgICBleHBhbmRfc3RyaW5n
X21lc3NhZ2UgPSByZXN1bHQgPyByZXN1bHQgOiBVUyIobm8gbWVzc2FnZSkiOwogICAgICAgICBp
ZiAoc3RhdHVzID09IEZBSUxfRk9SQ0VEKQpAQCAtNjc1Myw2ICs2ODg3LDkgQEAKICAgICAgICAg
ICAgICAgYXJndlswXSwgYXJndlsxXSwgc3RhdHVzLCBleHBhbmRfc3RyaW5nX21lc3NhZ2UpOwog
ICAgICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CiAgICAgICAgIH0KKworICAgICAgaWYgKHJlc3Vs
dCkgeWllbGQgPSBzdHJpbmdfY2F0KHlpZWxkLCByZXN1bHQpOworICAgICAgYnJlYWs7CiAgICAg
ICB9CiAjZW5kaWYgLyogRVhQQU5EX0RMRlVOQyAqLwogCkBAIC02NzY1LDEwICs2OTAyLDEwIEBA
CiAJZ290byBFWFBBTkRfRkFJTEVEOwogCiAgICAgICBrZXkgPSBleHBhbmRfc3RyaW5nX2ludGVy
bmFsKHMrMSwgVFJVRSwgJnMsIHNraXBwaW5nLCBUUlVFLCAmcmVzZXRvayk7Ci0gICAgICBpZiAo
IWtleSkgZ290byBFWFBBTkRfRkFJTEVEOwkJCS8qeyovCisgICAgICBpZiAoIWtleSkgZ290byBF
WFBBTkRfRkFJTEVEOwkJCQkJLyp7eyovCiAgICAgICBpZiAoKnMrKyAhPSAnfScpCiAgICAgICAg
IHsKLSAgICAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gVVMibWlzc2luZyAneycgZm9yIG5h
bWUgYXJnIG9mIGVudiI7CisgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IFVTIm1pc3Np
bmcgJ30nIGZvciBuYW1lIGFyZyBvZiBlbnYiOwogCWdvdG8gRVhQQU5EX0ZBSUxFRF9DVVJMWTsK
IAl9CiAKQEAgLTY3ODYsMTUgKzY5MjMsMTggQEAKICAgICAgICAgY2FzZSAxOiBnb3RvIEVYUEFO
RF9GQUlMRUQ7ICAgICAgICAgIC8qIHdoZW4gYWxsIGlzIHdlbGwsIHRoZSAqLwogICAgICAgICBj
YXNlIDI6IGdvdG8gRVhQQU5EX0ZBSUxFRF9DVVJMWTsgICAgLyogcmV0dXJuZWQgdmFsdWUgaXMg
MCAqLwogICAgICAgICB9Ci0gICAgICBjb250aW51ZTsKKyAgICAgIGlmIChza2lwcGluZykgY29u
dGludWU7CisgICAgICBicmVhazsKICAgICAgIH0KIAotI2lmZGVmIEVYUEVSSU1FTlRBTF9TUlNf
TkFUSVZFCisjaWZkZWYgU1VQUE9SVF9TUlMKICAgICBjYXNlIEVJVEVNX1NSU19FTkNPREU6CiAg
ICAgICAvKiAke3Nyc19lbmNvZGUge3NlY3JldH0ge3JldHVybl9wYXRofSB7b3JpZ19kb21haW59
fSAqLwogICAgICAgewogICAgICAgdXNjaGFyICogc3ViWzNdOwogICAgICAgdXNjaGFyIGNrc3Vt
WzRdOworICAgICAgZ3N0cmluZyAqIGcgPSBOVUxMOworICAgICAgQk9PTCBxdW90ZWQgPSBGQUxT
RTsKIAogICAgICAgc3dpdGNoIChyZWFkX3N1YnMoc3ViLCAzLCAzLCBDVVNTICZzLCBza2lwcGlu
ZywgVFJVRSwgbmFtZSwgJnJlc2V0b2spKQogICAgICAgICB7CkBAIC02ODAyLDQ5ICs2OTQyLDkz
IEBACiAgICAgICAgIGNhc2UgMjoKICAgICAgICAgY2FzZSAzOiBnb3RvIEVYUEFORF9GQUlMRUQ7
CiAgICAgICAgIH0KKyAgICAgIGlmIChza2lwcGluZykgY29udGludWU7CiAKLSAgICAgIHlpZWxk
ID0gc3RyaW5nX2NhdG4oeWllbGQsIFVTIlNSUzA9IiwgNSk7CisgICAgICBpZiAoc3ViWzFdICYm
ICooc3ViWzFdKSkKKwl7CisJZyA9IHN0cmluZ19jYXRuKGcsIFVTIlNSUzA9IiwgNSk7CiAKLSAg
ICAgIC8qICR7bF80OiR7aG1hY3ttZDV9e1NSU19TRUNSRVR9eyR7bGM6JHJldHVybl9wYXRofX19
fT0gKi8KLSAgICAgIGhtYWNfbWQ1KHN1YlswXSwgc3RyaW5nX2NvcHlsYyhzdWJbMV0pLCBja3N1
bSwgc2l6ZW9mKGNrc3VtKSk7Ci0gICAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBja3N1
bSwgc2l6ZW9mKGNrc3VtKSk7Ci0gICAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBVUyI9
IiwgMSk7CisJLyogJHtsXzQ6JHtobWFje21kNX17U1JTX1NFQ1JFVH17JHtsYzokcmV0dXJuX3Bh
dGh9fX19PSAqLworCWhtYWNfbWQ1KHN1YlswXSwgc3RyaW5nX2NvcHlsYyhzdWJbMV0pLCBja3N1
bSwgc2l6ZW9mKGNrc3VtKSk7CisJZyA9IHN0cmluZ19jYXRuKGcsIGNrc3VtLCBzaXplb2YoY2tz
dW0pKTsKKwlnID0gc3RyaW5nX2NhdG4oZywgVVMiPSIsIDEpOwogCi0gICAgICAvKiAke2Jhc2Uz
Mjoke2V2YWw6JHRvZF9lcG9jaC84NjQwMCYweDNmZn19PSAqLwotCXsKLQlzdHJ1Y3QgdGltZXZh
bCBub3c7Ci0JdW5zaWduZWQgbG9uZyBpOwotCWdzdHJpbmcgKiBnID0gTlVMTDsKKwkvKiAke2Jh
c2UzMjoke2V2YWw6JHRvZF9lcG9jaC84NjQwMCYweDNmZn19PSAqLworCSAgeworCSAgc3RydWN0
IHRpbWV2YWwgbm93OworCSAgdW5zaWduZWQgbG9uZyBpOworCSAgZ3N0cmluZyAqIGggPSBOVUxM
OwogCi0JZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwotCWZvciAodW5zaWduZWQgbG9uZyBpID0g
KG5vdy50dl9zZWMgLyA4NjQwMCkgJiAweDNmZjsgaTsgaSA+Pj0gNSkKLQkgIGcgPSBzdHJpbmdf
Y2F0bihnLCAmYmFzZTMyX2NoYXJzW2kgJiAweDFmXSwgMSk7Ci0JaWYgKGcpIHdoaWxlIChnLT5w
dHIgPiAwKQotCSAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgJmctPnNbLS1nLT5wdHJdLCAx
KTsKLQl9Ci0gICAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBVUyI9IiwgMSk7CisJICBn
ZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisJICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IChub3cu
dHZfc2VjIC8gODY0MDApICYgMHgzZmY7IGk7IGkgPj49IDUpCisJICAgIGggPSBzdHJpbmdfY2F0
bihoLCAmYmFzZTMyX2NoYXJzW2kgJiAweDFmXSwgMSk7CisJICBpZiAoaCkgd2hpbGUgKGgtPnB0
ciA+IDApCisJICAgIGcgPSBzdHJpbmdfY2F0bihnLCAmaC0+c1stLWgtPnB0cl0sIDEpOworCSAg
fQorCWcgPSBzdHJpbmdfY2F0bihnLCBVUyI9IiwgMSk7CiAKLSAgICAgIC8qICR7ZG9tYWluOiRy
ZXR1cm5fcGF0aH09JHtsb2NhbF9wYXJ0OiRyZXR1cm5fcGF0aH0gKi8KLQl7Ci0gICAgICAgIGlu
dCBzdGFydCwgZW5kLCBkb21haW47Ci0gICAgICAgIHVzY2hhciAqIHQgPSBwYXJzZV9leHRyYWN0
X2FkZHJlc3Moc3ViWzFdLCAmZXhwYW5kX3N0cmluZ19tZXNzYWdlLAotCQkJCQkgICZzdGFydCwg
JmVuZCwgJmRvbWFpbiwgRkFMU0UpOwotICAgICAgICBpZiAoIXQpCi0JICBnb3RvIEVYUEFORF9G
QUlMRUQ7CisJLyogJHtkb21haW46JHJldHVybl9wYXRofT0ke2xvY2FsX3BhcnQ6JHJldHVybl9w
YXRofSAqLworCSAgeworCSAgaW50IHN0YXJ0LCBlbmQsIGRvbWFpbjsKKwkgIHVzY2hhciAqIHQg
PSBwYXJzZV9leHRyYWN0X2FkZHJlc3Moc3ViWzFdLCAmZXhwYW5kX3N0cmluZ19tZXNzYWdlLAor
CQkJCQkgICAgJnN0YXJ0LCAmZW5kLCAmZG9tYWluLCBGQUxTRSk7CisJICB1c2NoYXIgKiBzOwog
Ci0JaWYgKGRvbWFpbiA+IDApIHlpZWxkID0gc3RyaW5nX2NhdCh5aWVsZCwgdCArIGRvbWFpbik7
Ci0JeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgVVMiPSIsIDEpOwotCXlpZWxkID0gZG9tYWlu
ID4gMAotCSAgPyBzdHJpbmdfY2F0bih5aWVsZCwgdCwgZG9tYWluIC0gMSkgOiBzdHJpbmdfY2F0
KHlpZWxkLCB0KTsKLSAgICAgICAgfQorCSAgaWYgKCF0KQorCSAgICBnb3RvIEVYUEFORF9GQUlM
RUQ7CiAKLSAgICAgIC8qIEAkb3JpZ2luYWxfZG9tYWluICovCi0gICAgICB5aWVsZCA9IHN0cmlu
Z19jYXRuKHlpZWxkLCBVUyJAIiwgMSk7Ci0gICAgICB5aWVsZCA9IHN0cmluZ19jYXQoeWllbGQs
IHN1YlsyXSk7Ci0gICAgICBjb250aW51ZTsKKwkgIGlmIChkb21haW4gPiAwKSBnID0gc3RyaW5n
X2NhdChnLCB0ICsgZG9tYWluKTsKKwkgIGcgPSBzdHJpbmdfY2F0bihnLCBVUyI9IiwgMSk7CisK
KwkgIHMgPSBkb21haW4gPiAwID8gc3RyaW5nX2NvcHluKHQsIGRvbWFpbiAtIDEpIDogdDsKKwkg
IGlmICgocXVvdGVkID0gVXN0cmNocihzLCAnIicpICE9IE5VTEwpKQorCSAgICB7CisJICAgIGdz
dHJpbmcgKiBoID0gTlVMTDsKKwkgICAgREVCVUcoRF9leHBhbmQpIGRlYnVnX3ByaW50Zl9pbmRl
bnQoImF1dG8tcXVvdGluZyBsb2NhbCBwYXJ0XG4iKTsKKwkgICAgd2hpbGUgKCpzKQkJLyogZGUt
cXVvdGUgKi8KKwkgICAgICB7CisJICAgICAgd2hpbGUgKCpzICYmICpzICE9ICciJykgaCA9IHN0
cmluZ19jYXRuKGgsIHMrKywgMSk7CisJICAgICAgaWYgKCpzKSBzKys7CisJICAgICAgd2hpbGUg
KCpzICYmICpzICE9ICciJykgaCA9IHN0cmluZ19jYXRuKGgsIHMrKywgMSk7CisJICAgICAgaWYg
KCpzKSBzKys7CisJICAgICAgfQorCSAgICBnc3RyaW5nX3JlbGVhc2VfdW51c2VkKGgpOworCSAg
ICBzID0gc3RyaW5nX2Zyb21fZ3N0cmluZyhoKTsKKwkgICAgfQorCSAgZyA9IHN0cmluZ19jYXQo
Zywgcyk7CisJICB9CisKKwkvKiBBc3N1bWUgdGhhdCBpZiB0aGUgb3JpZ2luYWwgbG9jYWxfcGFy
dCBoYWQgcXVvdGVzCisJaXQgd2FzIGZvciBnb29kIHJlYXNvbiAqLworCisJaWYgKHF1b3RlZCkg
eWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgVVMiXCIiLCAxKTsKKwl5aWVsZCA9IHN0cmluZ19j
YXRuKHlpZWxkLCBnLT5zLCBnLT5wdHIpOworCWlmIChxdW90ZWQpIHlpZWxkID0gc3RyaW5nX2Nh
dG4oeWllbGQsIFVTIlwiIiwgMSk7CisKKwkvKiBAJG9yaWdpbmFsX2RvbWFpbiAqLworCXlpZWxk
ID0gc3RyaW5nX2NhdG4oeWllbGQsIFVTIkAiLCAxKTsKKwl5aWVsZCA9IHN0cmluZ19jYXQoeWll
bGQsIHN1YlsyXSk7CisJfQorICAgICAgZWxzZQorCURFQlVHKERfZXhwYW5kKSBkZWJ1Z19wcmlu
dGZfaW5kZW50KCJudWxsIHJldHVybl9wYXRoIGZvciBzcnMtZW5jb2RlXG4iKTsKKworICAgICAg
YnJlYWs7CiAgICAgICB9Ci0jZW5kaWYgLypFWFBFUklNRU5UQUxfU1JTX05BVElWRSovCisjZW5k
aWYgLypTVVBQT1JUX1NSUyovCisKKyAgICBkZWZhdWx0OgorICAgICAgZ290byBOT1RfSVRFTTsK
ICAgICB9CS8qIEVJVEVNXyogc3dpdGNoICovCisgICAgLypOT1RSRUFDSEVEKi8KKworICBERUJV
RyhEX2V4cGFuZCkKKyAgICBpZiAoeWllbGQgJiYgKHN0YXJ0ID4gMCB8fCAqcykpCS8qIG9ubHkg
aWYgbm90IHRoZSBzb2xlIGV4cGFuc2lvbiBvZiB0aGUgbGluZSAqLworICAgICAgZGVidWdfZXhw
YW5zaW9uX2ludGVyaW0oVVMiaXRlbS1yZXMiLAorCQkJICAgICAgeWllbGQtPnMgKyBzdGFydCwg
eWllbGQtPnB0ciAtIHN0YXJ0LCBza2lwcGluZyk7CisgIGNvbnRpbnVlOworCitOT1RfSVRFTTog
OworICB9CiAKICAgLyogQ29udHJvbCByZWFjaGVzIGhlcmUgaWYgdGhlIG5hbWUgaXMgbm90IHJl
Y29nbml6ZWQgYXMgb25lIG9mIHRoZSBtb3JlCiAgIGNvbXBsaWNhdGVkIGV4cGFuc2lvbiBpdGVt
cy4gQ2hlY2sgZm9yIHRoZSAib3BlcmF0b3IiIHN5bnRheCAobmFtZSB0ZXJtaW5hdGVkCkBAIC02
ODU0LDEwICs3MDM4LDkgQEAKICAgaWYgKCpzID09ICc6JykKICAgICB7CiAgICAgaW50IGM7Ci0g
ICAgdXNjaGFyICphcmcgPSBOVUxMOwotICAgIHVzY2hhciAqc3ViOworICAgIHVzY2hhciAqIGFy
ZyA9IE5VTEwsICogc3ViOwogI2lmbmRlZiBESVNBQkxFX1RMUwotICAgIHZhcl9lbnRyeSAqdnAg
PSBOVUxMOworICAgIHZhcl9lbnRyeSAqIHZwID0gTlVMTDsKICNlbmRpZgogCiAgICAgLyogT3dp
bmcgdG8gYW4gaGlzdG9yaWNhbCBtaXMtZGVzaWduLCBhbiB1bmRlcnNjb3JlIG1heSBiZSBwYXJ0
IG9mIHRoZQpAQCAtNjg5MSw3ICs3MDc0LDcgQEAKIAkJICBGQUxTRSwgJnJlc2V0b2spOwogCSAg
aWYgKCFzdWIpICAgICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsJCS8qeyovCiAJICBpZiAoKnMxICE9
ICd9JykKLQkgICAgeworCSAgICB7CQkJCQkJLyp7Ki8KIAkgICAgZXhwYW5kX3N0cmluZ19tZXNz
YWdlID0KIAkgICAgICBzdHJpbmdfc3ByaW50ZigibWlzc2luZyAnfScgY2xvc2luZyBjZXJ0IGFy
ZyBvZiAlcyIsIG5hbWUpOwogCSAgICBnb3RvIEVYUEFORF9GQUlMRURfQ1VSTFk7CkBAIC02OTIw
LDEyOSArNzEwMywxMTggQEAKIAogICAgIGlmIChza2lwcGluZyAmJiBjID49IDApIGNvbnRpbnVl
OwogCi0gICAgLyogT3RoZXJ3aXNlLCBzd2l0Y2ggb24gdGhlIG9wZXJhdG9yIHR5cGUgKi8KKyAg
ICAvKiBPdGhlcndpc2UsIHN3aXRjaCBvbiB0aGUgb3BlcmF0b3IgdHlwZS4gIEFmdGVyIGhhbmRs
aW5nIGdvIGJhY2sKKyAgICB0byB0aGUgbWFpbiBsb29wIHRvcC4gKi8KIAotICAgIHN3aXRjaChj
KQorICAgICB7CisgICAgIGludCBzdGFydCA9IHlpZWxkLT5wdHI7CisgICAgIHN3aXRjaChjKQog
ICAgICAgewogICAgICAgY2FzZSBFT1BfQkFTRTMyOgogCXsKLSAgICAgICAgdXNjaGFyICp0Owot
ICAgICAgICB1bnNpZ25lZCBsb25nIGludCBuID0gVXN0cnRvdWwoc3ViLCAmdCwgMTApOworCXVz
Y2hhciAqdDsKKwl1bnNpZ25lZCBsb25nIGludCBuID0gVXN0cnRvdWwoc3ViLCAmdCwgMTApOwog
CWdzdHJpbmcgKiBnID0gTlVMTDsKIAotICAgICAgICBpZiAoKnQgIT0gMCkKLSAgICAgICAgICB7
Ci0gICAgICAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoImFyZ3Vt
ZW50IGZvciBiYXNlMzIgIgotICAgICAgICAgICAgIm9wZXJhdG9yIGlzIFwiJXNcIiwgd2hpY2gg
aXMgbm90IGEgZGVjaW1hbCBudW1iZXIiLCBzdWIpOwotICAgICAgICAgIGdvdG8gRVhQQU5EX0ZB
SUxFRDsKLSAgICAgICAgICB9CisJaWYgKCp0ICE9IDApCisJICB7CisJICBleHBhbmRfc3RyaW5n
X21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigiYXJndW1lbnQgZm9yIGJhc2UzMiAiCisJICAgICJv
cGVyYXRvciBpcyBcIiVzXCIsIHdoaWNoIGlzIG5vdCBhIGRlY2ltYWwgbnVtYmVyIiwgc3ViKTsK
KwkgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKKwkgIH0KIAlmb3IgKCA7IG47IG4gPj49IDUpCiAJICBn
ID0gc3RyaW5nX2NhdG4oZywgJmJhc2UzMl9jaGFyc1tuICYgMHgxZl0sIDEpOwogCiAJaWYgKGcp
IHdoaWxlIChnLT5wdHIgPiAwKSB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCAmZy0+c1stLWct
PnB0cl0sIDEpOwotCWNvbnRpbnVlOworCWJyZWFrOwogCX0KIAogICAgICAgY2FzZSBFT1BfQkFT
RTMyRDoKLSAgICAgICAgewotICAgICAgICB1c2NoYXIgKnR0ID0gc3ViOwotICAgICAgICB1bnNp
Z25lZCBsb25nIGludCBuID0gMDsKLSAgICAgICAgd2hpbGUgKCp0dCkKLSAgICAgICAgICB7Ci0g
ICAgICAgICAgdXNjaGFyICogdCA9IFVzdHJjaHIoYmFzZTMyX2NoYXJzLCAqdHQrKyk7Ci0gICAg
ICAgICAgaWYgKCF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgZXhwYW5kX3N0cmluZ19t
ZXNzYWdlID0gc3RyaW5nX3NwcmludGYoImFyZ3VtZW50IGZvciBiYXNlMzJkICIKLSAgICAgICAg
ICAgICAgIm9wZXJhdG9yIGlzIFwiJXNcIiwgd2hpY2ggaXMgbm90IGEgYmFzZSAzMiBudW1iZXIi
LCBzdWIpOwotICAgICAgICAgICAgZ290byBFWFBBTkRfRkFJTEVEOwotICAgICAgICAgICAgfQot
ICAgICAgICAgIG4gPSBuICogMzIgKyAodCAtIGJhc2UzMl9jaGFycyk7Ci0gICAgICAgICAgfQot
ICAgICAgICB5aWVsZCA9IHN0cmluZ19mbXRfYXBwZW5kKHlpZWxkLCAiJWxkIiwgbik7Ci0gICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9CisJeworCXVzY2hhciAqdHQgPSBzdWI7CisJdW5zaWdu
ZWQgbG9uZyBpbnQgbiA9IDA7CisJd2hpbGUgKCp0dCkKKwkgIHsKKwkgIHVzY2hhciAqIHQgPSBV
c3RyY2hyKGJhc2UzMl9jaGFycywgKnR0KyspOworCSAgaWYgKCF0KQorCSAgICB7CisJICAgIGV4
cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJhcmd1bWVudCBmb3IgYmFzZTMy
ZCAiCisJICAgICAgIm9wZXJhdG9yIGlzIFwiJXNcIiwgd2hpY2ggaXMgbm90IGEgYmFzZSAzMiBu
dW1iZXIiLCBzdWIpOworCSAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CisJICAgIH0KKwkgIG4gPSBu
ICogMzIgKyAodCAtIGJhc2UzMl9jaGFycyk7CisJICB9CisJeWllbGQgPSBzdHJpbmdfZm10X2Fw
cGVuZCh5aWVsZCwgIiVsZCIsIG4pOworCWJyZWFrOworCX0KIAogICAgICAgY2FzZSBFT1BfQkFT
RTYyOgotICAgICAgICB7Ci0gICAgICAgIHVzY2hhciAqdDsKLSAgICAgICAgdW5zaWduZWQgbG9u
ZyBpbnQgbiA9IFVzdHJ0b3VsKHN1YiwgJnQsIDEwKTsKLSAgICAgICAgaWYgKCp0ICE9IDApCi0g
ICAgICAgICAgewotICAgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJp
bnRmKCJhcmd1bWVudCBmb3IgYmFzZTYyICIKLSAgICAgICAgICAgICJvcGVyYXRvciBpcyBcIiVz
XCIsIHdoaWNoIGlzIG5vdCBhIGRlY2ltYWwgbnVtYmVyIiwgc3ViKTsKLSAgICAgICAgICBnb3Rv
IEVYUEFORF9GQUlMRUQ7Ci0gICAgICAgICAgfQotICAgICAgICB5aWVsZCA9IHN0cmluZ19jYXQo
eWllbGQsIHN0cmluZ19iYXNlNjIobikpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQor
CXsKKwl1c2NoYXIgKnQ7CisJdW5zaWduZWQgbG9uZyBpbnQgbiA9IFVzdHJ0b3VsKHN1YiwgJnQs
IDEwKTsKKwlpZiAoKnQgIT0gMCkKKwkgIHsKKwkgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0
cmluZ19zcHJpbnRmKCJhcmd1bWVudCBmb3IgYmFzZTYyICIKKwkgICAgIm9wZXJhdG9yIGlzIFwi
JXNcIiwgd2hpY2ggaXMgbm90IGEgZGVjaW1hbCBudW1iZXIiLCBzdWIpOworCSAgZ290byBFWFBB
TkRfRkFJTEVEOworCSAgfQorCXlpZWxkID0gc3RyaW5nX2NhdCh5aWVsZCwgc3RyaW5nX2Jhc2U2
MihuKSk7CisJYnJlYWs7CisJfQogCiAgICAgICAvKiBOb3RlIHRoYXQgZm9yIERhcndpbiBhbmQg
Q3lnd2luLCBCQVNFXzYyIGFjdHVhbGx5IGhhcyB0aGUgdmFsdWUgMzYgKi8KIAogICAgICAgY2Fz
ZSBFT1BfQkFTRTYyRDoKLSAgICAgICAgewotICAgICAgICB1c2NoYXIgKnR0ID0gc3ViOwotICAg
ICAgICB1bnNpZ25lZCBsb25nIGludCBuID0gMDsKLSAgICAgICAgd2hpbGUgKCp0dCAhPSAwKQot
ICAgICAgICAgIHsKLSAgICAgICAgICB1c2NoYXIgKnQgPSBVc3RyY2hyKGJhc2U2Ml9jaGFycywg
KnR0KyspOwotICAgICAgICAgIGlmICghdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGV4
cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJhcmd1bWVudCBmb3IgYmFzZTYy
ZCAiCi0gICAgICAgICAgICAgICJvcGVyYXRvciBpcyBcIiVzXCIsIHdoaWNoIGlzIG5vdCBhIGJh
c2UgJWQgbnVtYmVyIiwgc3ViLAotICAgICAgICAgICAgICBCQVNFXzYyKTsKLSAgICAgICAgICAg
IGdvdG8gRVhQQU5EX0ZBSUxFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBuID0gbiAqIEJB
U0VfNjIgKyAodCAtIGJhc2U2Ml9jaGFycyk7Ci0gICAgICAgICAgfQotICAgICAgICB5aWVsZCA9
IHN0cmluZ19mbXRfYXBwZW5kKHlpZWxkLCAiJWxkIiwgbik7Ci0gICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgIGNhc2UgRU9QX0JMRVNTOgotCS8qIFRoaXMgaXMgcHVyZWx5IGZv
ciB0aGUgY29udmVuaWVuY2Ugb2YgdGhlIHRlc3QgaGFybmVzcy4gIERvIG5vdCBlbmFibGUKLQlp
dCBvdGhlcndpc2UgYXMgaXQgZGVmZWF0cyB0aGUgdGFpbnQtY2hlY2tpbmcgc2VjdXJpdHkuICov
Ci0KLQlpZiAoZi5ydW5uaW5nX2luX3Rlc3RfaGFybmVzcykKLQkgIHlpZWxkID0gc3RyaW5nX2Nh
dCh5aWVsZCwgaXNfdGFpbnRlZChzdWIpCi0JCQkJICAgID8gc3RyaW5nX2NvcHlfdGFpbnQoc3Vi
LCBGQUxTRSkgOiBzdWIpOwotCWVsc2UKKwl7CisJdXNjaGFyICp0dCA9IHN1YjsKKwl1bnNpZ25l
ZCBsb25nIGludCBuID0gMDsKKwl3aGlsZSAoKnR0ICE9IDApCiAJICB7Ci0JICBERUJVRyhEX2V4
cGFuZCkgZGVidWdfcHJpbnRmX2luZGVudCgiYmxlc3Mgb3BlcmF0b3Igbm90IHN1cHBvcnRlZFxu
Iik7Ci0JICB5aWVsZCA9IHN0cmluZ19jYXQoeWllbGQsIHN1Yik7CisJICB1c2NoYXIgKnQgPSBV
c3RyY2hyKGJhc2U2Ml9jaGFycywgKnR0KyspOworCSAgaWYgKCF0KQorCSAgICB7CisJICAgIGV4
cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJhcmd1bWVudCBmb3IgYmFzZTYy
ZCAiCisJICAgICAgIm9wZXJhdG9yIGlzIFwiJXNcIiwgd2hpY2ggaXMgbm90IGEgYmFzZSAlZCBu
dW1iZXIiLCBzdWIsCisJICAgICAgQkFTRV82Mik7CisJICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsK
KwkgICAgfQorCSAgbiA9IG4gKiBCQVNFXzYyICsgKHQgLSBiYXNlNjJfY2hhcnMpOwogCSAgfQot
CWNvbnRpbnVlOworCXlpZWxkID0gc3RyaW5nX2ZtdF9hcHBlbmQoeWllbGQsICIlbGQiLCBuKTsK
KwlicmVhazsKKwl9CiAKICAgICAgIGNhc2UgRU9QX0VYUEFORDoKLSAgICAgICAgewotICAgICAg
ICB1c2NoYXIgKmV4cGFuZGVkID0gZXhwYW5kX3N0cmluZ19pbnRlcm5hbChzdWIsIEZBTFNFLCBO
VUxMLCBza2lwcGluZywgVFJVRSwgJnJlc2V0b2spOwotICAgICAgICBpZiAoIWV4cGFuZGVkKQot
ICAgICAgICAgIHsKLSAgICAgICAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPQotICAgICAgICAg
ICAgc3RyaW5nX3NwcmludGYoImludGVybmFsIGV4cGFuc2lvbiBvZiBcIiVzXCIgZmFpbGVkOiAl
cyIsIHN1YiwKLSAgICAgICAgICAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlKTsKLSAgICAgICAg
ICBnb3RvIEVYUEFORF9GQUlMRUQ7Ci0gICAgICAgICAgfQotICAgICAgICB5aWVsZCA9IHN0cmlu
Z19jYXQoeWllbGQsIGV4cGFuZGVkKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKwl7
CisJdXNjaGFyICpleHBhbmRlZCA9IGV4cGFuZF9zdHJpbmdfaW50ZXJuYWwoc3ViLCBGQUxTRSwg
TlVMTCwgc2tpcHBpbmcsIFRSVUUsICZyZXNldG9rKTsKKwlpZiAoIWV4cGFuZGVkKQorCSAgewor
CSAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0KKwkgICAgc3RyaW5nX3NwcmludGYoImludGVybmFs
IGV4cGFuc2lvbiBvZiBcIiVzXCIgZmFpbGVkOiAlcyIsIHN1YiwKKwkgICAgICBleHBhbmRfc3Ry
aW5nX21lc3NhZ2UpOworCSAgZ290byBFWFBBTkRfRkFJTEVEOworCSAgfQorCXlpZWxkID0gc3Ry
aW5nX2NhdCh5aWVsZCwgZXhwYW5kZWQpOworCWJyZWFrOworCX0KIAogICAgICAgY2FzZSBFT1Bf
TEM6Ci0gICAgICAgIHsKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgdXNjaGFyICp0
ID0gc3ViIC0gMTsKLSAgICAgICAgd2hpbGUgKCooKyt0KSAhPSAwKSB7ICp0ID0gdG9sb3dlcigq
dCk7IGNvdW50Kys7IH0KLSAgICAgICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgc3ViLCBj
b3VudCk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisJeworCWludCBjb3VudCA9IDA7
CisJdXNjaGFyICp0ID0gc3ViIC0gMTsKKwl3aGlsZSAoKigrK3QpICE9IDApIHsgKnQgPSB0b2xv
d2VyKCp0KTsgY291bnQrKzsgfQorCXlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIHN1YiwgY291
bnQpOworCWJyZWFrOworCX0KIAogICAgICAgY2FzZSBFT1BfVUM6Ci0gICAgICAgIHsKLSAgICAg
ICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgdXNjaGFyICp0ID0gc3ViIC0gMTsKLSAgICAgICAg
d2hpbGUgKCooKyt0KSAhPSAwKSB7ICp0ID0gdG91cHBlcigqdCk7IGNvdW50Kys7IH0KLSAgICAg
ICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgc3ViLCBjb3VudCk7Ci0gICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9CisJeworCWludCBjb3VudCA9IDA7CisJdXNjaGFyICp0ID0gc3ViIC0g
MTsKKwl3aGlsZSAoKigrK3QpICE9IDApIHsgKnQgPSB0b3VwcGVyKCp0KTsgY291bnQrKzsgfQor
CXlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIHN1YiwgY291bnQpOworCWJyZWFrOworCX0KIAog
ICAgICAgY2FzZSBFT1BfTUQ1OgogI2lmbmRlZiBESVNBQkxFX1RMUwpAQCAtNzA2MSw3ICs3MjMz
LDcgQEAKIAkgIGZvciAoaW50IGogPSAwOyBqIDwgMTY7IGorKykKIAkgICAgeWllbGQgPSBzdHJp
bmdfZm10X2FwcGVuZCh5aWVsZCwgIiUwMngiLCBkaWdlc3Rbal0pOwogCSAgfQotICAgICAgICBj
b250aW51ZTsKKwlicmVhazsKIAogICAgICAgY2FzZSBFT1BfU0hBMToKICNpZm5kZWYgRElTQUJM
RV9UTFMKQEAgLTcwODAsNyArNzI1Miw3IEBACiAJICBmb3IgKGludCBqID0gMDsgaiA8IDIwOyBq
KyspCiAJICAgIHlpZWxkID0gc3RyaW5nX2ZtdF9hcHBlbmQoeWllbGQsICIlMDJYIiwgZGlnZXN0
W2pdKTsKIAkgIH0KLSAgICAgICAgY29udGludWU7CisJYnJlYWs7CiAKICAgICAgIGNhc2UgRU9Q
X1NIQTI6CiAgICAgICBjYXNlIEVPUF9TSEEyNTY6CkBAIC03MTA2LDcgKzcyNzgsNyBAQAogCSAg
ICBnb3RvIEVYUEFORF9GQUlMRUQ7CiAJICAgIH0KIAotCSAgZXhpbV9zaGFfdXBkYXRlKCZoLCBz
dWIsIFVzdHJsZW4oc3ViKSk7CisJICBleGltX3NoYV91cGRhdGVfc3RyaW5nKCZoLCBzdWIpOwog
CSAgZXhpbV9zaGFfZmluaXNoKCZoLCAmYik7CiAJICB3aGlsZSAoYi5sZW4tLSA+IDApCiAJICAg
IHlpZWxkID0gc3RyaW5nX2ZtdF9hcHBlbmQoeWllbGQsICIlMDJYIiwgKmIuZGF0YSsrKTsKQEAg
LTcxMTQsNyArNzI4Niw3IEBACiAjZWxzZQogCSAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gVVMi
c2hhMjU2IG9ubHkgc3VwcG9ydGVkIHdpdGggVExTIjsKICNlbmRpZgotICAgICAgICBjb250aW51
ZTsKKwlicmVhazsKIAogICAgICAgY2FzZSBFT1BfU0hBMzoKICNpZmRlZiBFWElNX0hBVkVfU0hB
MwpAQCAtNzEzNCwxMiArNzMwNiwxMiBAQAogCSAgZ290byBFWFBBTkRfRkFJTEVEOwogCSAgfQog
Ci0JZXhpbV9zaGFfdXBkYXRlKCZoLCBzdWIsIFVzdHJsZW4oc3ViKSk7CisJZXhpbV9zaGFfdXBk
YXRlX3N0cmluZygmaCwgc3ViKTsKIAlleGltX3NoYV9maW5pc2goJmgsICZiKTsKIAl3aGlsZSAo
Yi5sZW4tLSA+IDApCiAJICB5aWVsZCA9IHN0cmluZ19mbXRfYXBwZW5kKHlpZWxkLCAiJTAyWCIs
ICpiLmRhdGErKyk7CiAJfQotICAgICAgICBjb250aW51ZTsKKwlicmVhazsKICNlbHNlCiAJZXhw
YW5kX3N0cmluZ19tZXNzYWdlID0gVVMic2hhMyBvbmx5IHN1cHBvcnRlZCB3aXRoIEdudVRMUyAz
LjUuMCArIG9yIE9wZW5TU0wgMS4xLjEgKyI7CiAJZ290byBFWFBBTkRfRkFJTEVEOwpAQCAtNzE0
OCwxNjAgKzczMjAsODUgQEAKICAgICAgIC8qIENvbnZlcnQgaGV4IGVuY29kaW5nIHRvIGJhc2U2
NCBlbmNvZGluZyAqLwogCiAgICAgICBjYXNlIEVPUF9IRVgyQjY0OgotICAgICAgICB7Ci0gICAg
ICAgIGludCBjID0gMDsKLSAgICAgICAgaW50IGIgPSAtMTsKLSAgICAgICAgdXNjaGFyICppbiA9
IHN1YjsKLSAgICAgICAgdXNjaGFyICpvdXQgPSBzdWI7Ci0gICAgICAgIHVzY2hhciAqZW5jOwor
CXsKKwlpbnQgYyA9IDA7CisJaW50IGIgPSAtMTsKKwl1c2NoYXIgKmluID0gc3ViOworCXVzY2hh
ciAqb3V0ID0gc3ViOworCXVzY2hhciAqZW5jOwogCi0gICAgICAgIGZvciAoZW5jID0gc3ViOyAq
ZW5jOyBlbmMrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFpc3hkaWdpdCgqZW5jKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmlu
Z19zcHJpbnRmKCJcIiVzXCIgaXMgbm90IGEgaGV4ICIKLSAgICAgICAgICAgICAgInN0cmluZyIs
IHN1Yik7Ci0gICAgICAgICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgYysrOwotICAgICAgICAgIH0KKwlmb3IgKGVuYyA9IHN1YjsgKmVuYzsgZW5jKysp
CisJICB7CisJICBpZiAoIWlzeGRpZ2l0KCplbmMpKQorCSAgICB7CisJICAgIGV4cGFuZF9zdHJp
bmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJcIiVzXCIgaXMgbm90IGEgaGV4ICIKKwkgICAg
ICAic3RyaW5nIiwgc3ViKTsKKwkgICAgZ290byBFWFBBTkRfRkFJTEVEOworCSAgICB9CisJICBj
Kys7CisJICB9CiAKLSAgICAgICAgaWYgKChjICYgMSkgIT0gMCkKLSAgICAgICAgICB7Ci0gICAg
ICAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoIlwiJXNcIiBjb250
YWlucyBhbiBvZGQgIgotICAgICAgICAgICAgIm51bWJlciBvZiBjaGFyYWN0ZXJzIiwgc3ViKTsK
LSAgICAgICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7Ci0gICAgICAgICAgfQorCWlmICgoYyAmIDEp
ICE9IDApCisJICB7CisJICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50Zigi
XCIlc1wiIGNvbnRhaW5zIGFuIG9kZCAiCisJICAgICJudW1iZXIgb2YgY2hhcmFjdGVycyIsIHN1
Yik7CisJICBnb3RvIEVYUEFORF9GQUlMRUQ7CisJICB9CiAKLSAgICAgICAgd2hpbGUgKChjID0g
KmluKyspICE9IDApCi0gICAgICAgICAgewotICAgICAgICAgIGlmIChpc2RpZ2l0KGMpKSBjIC09
ICcwJzsKLSAgICAgICAgICBlbHNlIGMgPSB0b3VwcGVyKGMpIC0gJ0EnICsgMTA7Ci0gICAgICAg
ICAgaWYgKGIgPT0gLTEpCi0gICAgICAgICAgICBiID0gYyA8PCA0OwotICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICpvdXQrKyA9IGIgfCBjOwotICAgICAgICAgICAg
YiA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KKwl3aGlsZSAoKGMgPSAqaW4rKykg
IT0gMCkKKwkgIHsKKwkgIGlmIChpc2RpZ2l0KGMpKSBjIC09ICcwJzsKKwkgIGVsc2UgYyA9IHRv
dXBwZXIoYykgLSAnQScgKyAxMDsKKwkgIGlmIChiID09IC0xKQorCSAgICBiID0gYyA8PCA0Owor
CSAgZWxzZQorCSAgICB7CisJICAgICpvdXQrKyA9IGIgfCBjOworCSAgICBiID0gLTE7CisJICAg
IH0KKwkgIH0KIAotICAgICAgICBlbmMgPSBiNjRlbmNvZGUoQ1VTIHN1Yiwgb3V0IC0gc3ViKTsK
LSAgICAgICAgeWllbGQgPSBzdHJpbmdfY2F0KHlpZWxkLCBlbmMpOwotICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQorCWVuYyA9IGI2NGVuY29kZShDVVMgc3ViLCBvdXQgLSBzdWIpOworCXlp
ZWxkID0gc3RyaW5nX2NhdCh5aWVsZCwgZW5jKTsKKwlicmVhazsKKwl9CiAKICAgICAgIC8qIENv
bnZlcnQgb2N0ZXRzIG91dHNpZGUgMHgyMS4uMHg3RSB0byBceFhYIGZvcm0gKi8KIAogICAgICAg
Y2FzZSBFT1BfSEVYUVVPVEU6CiAJewotICAgICAgICB1c2NoYXIgKnQgPSBzdWIgLSAxOwotICAg
ICAgICB3aGlsZSAoKigrK3QpICE9IDApCi0gICAgICAgICAgewotICAgICAgICAgIGlmICgqdCA8
IDB4MjEgfHwgMHg3RSA8ICp0KQotICAgICAgICAgICAgeWllbGQgPSBzdHJpbmdfZm10X2FwcGVu
ZCh5aWVsZCwgIlxceCUwMngiLCAqdCk7CisJdXNjaGFyICp0ID0gc3ViIC0gMTsKKwl3aGlsZSAo
KigrK3QpICE9IDApCisJICB7CisJICBpZiAoKnQgPCAweDIxIHx8IDB4N0UgPCAqdCkKKwkgICAg
eWllbGQgPSBzdHJpbmdfZm10X2FwcGVuZCh5aWVsZCwgIlxceCUwMngiLCAqdCk7CiAJICBlbHNl
CiAJICAgIHlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIHQsIDEpOwotICAgICAgICAgIH0KLQlj
b250aW51ZTsKKwkgIH0KKwlicmVhazsKIAl9CiAKICAgICAgIC8qIGNvdW50IHRoZSBudW1iZXIg
b2YgbGlzdCBlbGVtZW50cyAqLwogCiAgICAgICBjYXNlIEVPUF9MSVNUQ09VTlQ6Ci0gICAgICAg
IHsKLQlpbnQgY250ID0gMDsKLQlpbnQgc2VwID0gMDsKKwl7CisJaW50IGNudCA9IDAsIHNlcCA9
IDA7CisJdXNjaGFyICogYnVmID0gc3RvcmVfZ2V0KDIsIHN1Yik7CiAKLQl3aGlsZSAoc3RyaW5n
X25leHRpbmxpc3QoQ1VTUyAmc3ViLCAmc2VwLCBOVUxMLCAwKSkgY250Kys7CisJd2hpbGUgKHN0
cmluZ19uZXh0aW5saXN0KENVU1MgJnN1YiwgJnNlcCwgYnVmLCAxKSkgY250Kys7CiAJeWllbGQg
PSBzdHJpbmdfZm10X2FwcGVuZCh5aWVsZCwgIiVkIiwgY250KTsKLSAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KKwlicmVhazsKKwl9CiAKICAgICAgIC8qIGV4cGFuZCBhIG5hbWVkIGxpc3Qg
Z2l2ZW4gdGhlIG5hbWUgKi8KICAgICAgIC8qIGhhbmRsZXMgbmVzdGVkIG5hbWVkIGxpc3RzOyBy
ZXF1b3RlcyBhcyBjb2xvbi1zZXAgbGlzdCAqLwogCiAgICAgICBjYXNlIEVPUF9MSVNUTkFNRUQ6
Ci0JewotCXRyZWVfbm9kZSAqdCA9IE5VTEw7Ci0JY29uc3QgdXNjaGFyICogbGlzdDsKLQlpbnQg
c2VwID0gMDsKLQl1c2NoYXIgKiBpdGVtOwotCXVzY2hhciAqIHN1ZmZpeCA9IFVTIiI7Ci0JQk9P
TCBuZWVkc2VwID0gRkFMU0U7Ci0JdXNjaGFyIGJ1ZmZlclsyNTZdOwotCi0JaWYgKCpzdWIgPT0g
JysnKSBzdWIrKzsKLQlpZiAoIWFyZykJCS8qIG5vLWFyZ3VtZW50IHZlcnNpb24gKi8KLQkgIHsK
LQkgIGlmICghKHQgPSB0cmVlX3NlYXJjaChhZGRyZXNzbGlzdF9hbmNob3IsIHN1YikpICYmCi0J
ICAgICAgISh0ID0gdHJlZV9zZWFyY2goZG9tYWlubGlzdF9hbmNob3IsICBzdWIpKSAmJgotCSAg
ICAgICEodCA9IHRyZWVfc2VhcmNoKGhvc3RsaXN0X2FuY2hvciwgICAgc3ViKSkpCi0JICAgIHQg
PSB0cmVlX3NlYXJjaChsb2NhbHBhcnRsaXN0X2FuY2hvciwgc3ViKTsKLQkgIH0KLQllbHNlIHN3
aXRjaCgqYXJnKQkvKiBzcGVjaWZpYyBsaXN0LXR5cGUgdmVyc2lvbiAqLwotCSAgewotCSAgY2Fz
ZSAnYSc6IHQgPSB0cmVlX3NlYXJjaChhZGRyZXNzbGlzdF9hbmNob3IsICAgc3ViKTsgc3VmZml4
ID0gVVMiX2EiOyBicmVhazsKLQkgIGNhc2UgJ2QnOiB0ID0gdHJlZV9zZWFyY2goZG9tYWlubGlz
dF9hbmNob3IsICAgIHN1Yik7IHN1ZmZpeCA9IFVTIl9kIjsgYnJlYWs7Ci0JICBjYXNlICdoJzog
dCA9IHRyZWVfc2VhcmNoKGhvc3RsaXN0X2FuY2hvciwgICAgICBzdWIpOyBzdWZmaXggPSBVUyJf
aCI7IGJyZWFrOwotCSAgY2FzZSAnbCc6IHQgPSB0cmVlX3NlYXJjaChsb2NhbHBhcnRsaXN0X2Fu
Y2hvciwgc3ViKTsgc3VmZml4ID0gVVMiX2wiOyBicmVhazsKLQkgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBVUyJiYWQgc3VmZml4IG9uIFwibGlzdFwiIG9w
ZXJhdG9yIjsKLQkgICAgZ290byBFWFBBTkRfRkFJTEVEOwotCSAgfQotCi0JaWYoIXQpCi0JICB7
Ci0gICAgICAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoIlwiJXNc
IiBpcyBub3QgYSAlc25hbWVkIGxpc3QiLAotICAgICAgICAgICAgc3ViLCAhYXJnPyIiCi0JICAg
ICAgOiAqYXJnPT0nYSc/ImFkZHJlc3MgIgotCSAgICAgIDogKmFyZz09J2QnPyJkb21haW4gIgot
CSAgICAgIDogKmFyZz09J2gnPyJob3N0ICIKLQkgICAgICA6ICphcmc9PSdsJz8ibG9jYWxwYXJ0
ICIKLQkgICAgICA6IDApOworCWV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IE5VTEw7CisJeWllbGQg
PSBleHBhbmRfbGlzdG5hbWVkKHlpZWxkLCBzdWIsIGFyZyk7CisJaWYgKGV4cGFuZF9zdHJpbmdf
bWVzc2FnZSkKIAkgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKLQkgIH0KLQotCWxpc3QgPSAoKG5hbWVk
bGlzdF9ibG9jayAqKSh0LT5kYXRhLnB0cikpLT5zdHJpbmc7Ci0KLQl3aGlsZSAoKGl0ZW0gPSBz
dHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNlcCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpKQot
CSAgewotCSAgdXNjaGFyICogYnVmID0gVVMiIDogIjsKLQkgIGlmIChuZWVkc2VwKQotCSAgICB5
aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBidWYsIDMpOwotCSAgZWxzZQotCSAgICBuZWVkc2Vw
ID0gVFJVRTsKLQotCSAgaWYgKCppdGVtID09ICcrJykJLyogbGlzdCBpdGVtIGlzIGl0c2VsZiBh
IG5hbWVkIGxpc3QgKi8KLQkgICAgewotCSAgICB1c2NoYXIgKiBzdWIgPSBzdHJpbmdfc3ByaW50
ZigiJHtsaXN0bmFtZWQlczolc30iLCBzdWZmaXgsIGl0ZW0pOwotCSAgICBpdGVtID0gZXhwYW5k
X3N0cmluZ19pbnRlcm5hbChzdWIsIEZBTFNFLCBOVUxMLCBGQUxTRSwgVFJVRSwgJnJlc2V0b2sp
OwotCSAgICB9Ci0JICBlbHNlIGlmIChzZXAgIT0gJzonKQkvKiBpdGVtIGZyb20gbm9uLWNvbG9u
LXNlcCBsaXN0LCByZS1xdW90ZSBmb3IgY29sb24gbGlzdC1zZXBhcmF0b3IgKi8KLQkgICAgewot
CSAgICBjaGFyICogY3A7Ci0JICAgIGNoYXIgdG9rWzNdOwotCSAgICB0b2tbMF0gPSBzZXA7IHRv
a1sxXSA9ICc6JzsgdG9rWzJdID0gMDsKLQkgICAgd2hpbGUgKChjcD0gc3RycGJyayhDQ1MgaXRl
bSwgdG9rKSkpCi0JICAgICAgewotICAgICAgICAgICAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlp
ZWxkLCBpdGVtLCBjcCAtIENTIGl0ZW0pOwotCSAgICAgIGlmICgqY3ArKyA9PSAnOicpCS8qIGNv
bG9uIGluIGEgbm9uLWNvbG9uLXNlcCBsaXN0IGl0ZW0sIG5lZWRzIGRvdWJsaW5nICovCi0JICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgVVMiOjoi
LCAyKTsKLQkgICAgICAgIGl0ZW0gPSBVUyBjcDsKLQkJfQotCSAgICAgIGVsc2UJCS8qIHNlcCBp
biBpdGVtOyBzaG91bGQgYWxyZWFkeSBiZSBkb3VibGVkOyBlbWl0IG9uY2UgKi8KLQkgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBVUyB0b2ssIDEp
OwotCQlpZiAoKmNwID09IHNlcCkgY3ArKzsKLQkgICAgICAgIGl0ZW0gPSBVUyBjcDsKLQkJfQot
CSAgICAgIH0KLQkgICAgfQotICAgICAgICAgIHlpZWxkID0gc3RyaW5nX2NhdCh5aWVsZCwgaXRl
bSk7Ci0JICB9Ci0gICAgICAgIGNvbnRpbnVlOwotCX0KKwlicmVhazsKIAogICAgICAgLyogcXVv
dGUgYSBsaXN0LWl0ZW0gZm9yIHRoZSBnaXZlbiBsaXN0LXNlcGFyYXRvciAqLwogCkBAIC03MzA5
LDU0ICs3NDA2LDY1IEBACiAgICAgICAke21hc2s6MTMxLjExMS4xMC4yMDYvMjh9IGlzIDEzMS4x
MTEuMTAuMTkyLzI4LiAqLwogCiAgICAgICBjYXNlIEVPUF9NQVNLOgotICAgICAgICB7Ci0gICAg
ICAgIGludCBjb3VudDsKLSAgICAgICAgdXNjaGFyICplbmRwdHI7Ci0gICAgICAgIGludCBiaW5h
cnlbNF07Ci0gICAgICAgIGludCBtYXNrLCBtYXNrb2Zmc2V0OwotICAgICAgICBpbnQgdHlwZSA9
IHN0cmluZ19pc19pcF9hZGRyZXNzKHN1YiwgJm1hc2tvZmZzZXQpOwotICAgICAgICB1c2NoYXIg
YnVmZmVyWzY0XTsKKwl7CisJaW50IGNvdW50OworCXVzY2hhciAqZW5kcHRyOworCWludCBiaW5h
cnlbNF07CisJaW50IHR5cGUsIG1hc2ssIG1hc2tvZmZzZXQ7CisJQk9PTCBub3JtYWxpc2VkOwor
CXVzY2hhciBidWZmZXJbNjRdOwogCi0gICAgICAgIGlmICh0eXBlID09IDApCi0gICAgICAgICAg
ewotICAgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJcIiVz
XCIgaXMgbm90IGFuIElQIGFkZHJlc3MiLAotICAgICAgICAgICBzdWIpOwotICAgICAgICAgIGdv
dG8gRVhQQU5EX0ZBSUxFRDsKLSAgICAgICAgICB9CisJaWYgKCh0eXBlID0gc3RyaW5nX2lzX2lw
X2FkZHJlc3Moc3ViLCAmbWFza29mZnNldCkpID09IDApCisJICB7CisJICBleHBhbmRfc3RyaW5n
X21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigiXCIlc1wiIGlzIG5vdCBhbiBJUCBhZGRyZXNzIiwK
KwkgICBzdWIpOworCSAgZ290byBFWFBBTkRfRkFJTEVEOworCSAgfQogCi0gICAgICAgIGlmICht
YXNrb2Zmc2V0ID09IDApCi0gICAgICAgICAgewotICAgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVz
c2FnZSA9IHN0cmluZ19zcHJpbnRmKCJtaXNzaW5nIG1hc2sgdmFsdWUgaW4gXCIlc1wiIiwKLSAg
ICAgICAgICAgIHN1Yik7Ci0gICAgICAgICAgZ290byBFWFBBTkRfRkFJTEVEOwotICAgICAgICAg
IH0KKwlpZiAobWFza29mZnNldCA9PSAwKQorCSAgeworCSAgZXhwYW5kX3N0cmluZ19tZXNzYWdl
ID0gc3RyaW5nX3NwcmludGYoIm1pc3NpbmcgbWFzayB2YWx1ZSBpbiBcIiVzXCIiLAorCSAgICBz
dWIpOworCSAgZ290byBFWFBBTkRfRkFJTEVEOworCSAgfQogCi0gICAgICAgIG1hc2sgPSBVc3Ry
dG9sKHN1YiArIG1hc2tvZmZzZXQgKyAxLCAmZW5kcHRyLCAxMCk7CisJbWFzayA9IFVzdHJ0b2wo
c3ViICsgbWFza29mZnNldCArIDEsICZlbmRwdHIsIDEwKTsKIAotICAgICAgICBpZiAoKmVuZHB0
ciAhPSAwIHx8IG1hc2sgPCAwIHx8IG1hc2sgPiAoKHR5cGUgPT0gNCk/IDMyIDogMTI4KSkKLSAg
ICAgICAgICB7Ci0gICAgICAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gc3RyaW5nX3Nwcmlu
dGYoIm1hc2sgdmFsdWUgdG9vIGJpZyBpbiBcIiVzXCIiLAotICAgICAgICAgICAgc3ViKTsKLSAg
ICAgICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7Ci0gICAgICAgICAgfQorCWlmICgqZW5kcHRyIHx8
IG1hc2sgPCAwIHx8IG1hc2sgPiAodHlwZSA9PSA0ID8gMzIgOiAxMjgpKQorCSAgeworCSAgZXhw
YW5kX3N0cmluZ19tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoIm1hc2sgdmFsdWUgdG9vIGJpZyBp
biBcIiVzXCIiLAorCSAgICBzdWIpOworCSAgZ290byBFWFBBTkRfRkFJTEVEOworCSAgfQogCi0g
ICAgICAgIC8qIENvbnZlcnQgdGhlIGFkZHJlc3MgdG8gYmluYXJ5IGludGVnZXIocykgYW5kIGFw
cGx5IHRoZSBtYXNrICovCisJLyogSWYgYW4gb3B0aW9uYWwgJ24nIHdhcyBnaXZlbiwgaXB2NiBn
ZXRzIG5vcm1hbGlzZWQgb3V0cHV0OgorCWNvbG9ucyByYXRoZXIgdGhhbiBkb3RzLCBhbmQgemVy
by1jb21wcmVzc2VkLiAqLwogCi0gICAgICAgIHN1YlttYXNrb2Zmc2V0XSA9IDA7Ci0gICAgICAg
IGNvdW50ID0gaG9zdF9hdG9uKHN1YiwgYmluYXJ5KTsKLSAgICAgICAgaG9zdF9tYXNrKGNvdW50
LCBiaW5hcnksIG1hc2spOworCW5vcm1hbGlzZWQgPSBhcmcgJiYgKmFyZyA9PSAnbic7CiAKLSAg
ICAgICAgLyogQ29udmVydCB0byBtYXNrZWQgdGV4dHVhbCBmb3JtYXQgYW5kIGFkZCB0byBvdXRw
dXQuICovCisJLyogQ29udmVydCB0aGUgYWRkcmVzcyB0byBiaW5hcnkgaW50ZWdlcihzKSBhbmQg
YXBwbHkgdGhlIG1hc2sgKi8KIAotICAgICAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBi
dWZmZXIsCi0gICAgICAgICAgaG9zdF9ubXRvYShjb3VudCwgYmluYXJ5LCBtYXNrLCBidWZmZXIs
ICcuJykpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorCXN1YlttYXNrb2Zmc2V0XSA9
IDA7CisJY291bnQgPSBob3N0X2F0b24oc3ViLCBiaW5hcnkpOworCWhvc3RfbWFzayhjb3VudCwg
YmluYXJ5LCBtYXNrKTsKKworCS8qIENvbnZlcnQgdG8gbWFza2VkIHRleHR1YWwgZm9ybWF0IGFu
ZCBhZGQgdG8gb3V0cHV0LiAqLworCisJaWYgKHR5cGUgPT0gNCB8fCAhbm9ybWFsaXNlZCkKKwkg
IHlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIGJ1ZmZlciwKKwkgICAgaG9zdF9ubXRvYShjb3Vu
dCwgYmluYXJ5LCBtYXNrLCBidWZmZXIsICcuJykpOworCWVsc2UKKwkgIHsKKwkgIGlwdjZfbm10
b2EoYmluYXJ5LCBidWZmZXIpOworCSAgeWllbGQgPSBzdHJpbmdfZm10X2FwcGVuZCh5aWVsZCwg
IiVzLyVkIiwgYnVmZmVyLCBtYXNrKTsKKwkgIH0KKwlicmVhazsKKwl9CiAKICAgICAgIGNhc2Ug
RU9QX0lQVjZOT1JNOgogICAgICAgY2FzZSBFT1BfSVBWNkRFTk9STToKIAl7Ci0gICAgICAgIGlu
dCB0eXBlID0gc3RyaW5nX2lzX2lwX2FkZHJlc3Moc3ViLCBOVUxMKTsKKwlpbnQgdHlwZSA9IHN0
cmluZ19pc19pcF9hZGRyZXNzKHN1YiwgTlVMTCk7CiAJaW50IGJpbmFyeVs0XTsKIAl1c2NoYXIg
YnVmZmVyWzQ0XTsKIApAQCAtNzM4Miw5NCArNzQ5MCw5NCBAQAogCQkgICAgPyBpcHY2X25tdG9h
KGJpbmFyeSwgYnVmZmVyKQogCQkgICAgOiBob3N0X25tdG9hKDQsIGJpbmFyeSwgLTEsIGJ1ZmZl
ciwgJzonKQogCQkgICk7Ci0JY29udGludWU7CisJYnJlYWs7CiAJfQogCiAgICAgICBjYXNlIEVP
UF9BRERSRVNTOgogICAgICAgY2FzZSBFT1BfTE9DQUxfUEFSVDoKICAgICAgIGNhc2UgRU9QX0RP
TUFJTjoKLSAgICAgICAgewotICAgICAgICB1c2NoYXIgKiBlcnJvcjsKLSAgICAgICAgaW50IHN0
YXJ0LCBlbmQsIGRvbWFpbjsKLSAgICAgICAgdXNjaGFyICogdCA9IHBhcnNlX2V4dHJhY3RfYWRk
cmVzcyhzdWIsICZlcnJvciwgJnN0YXJ0LCAmZW5kLCAmZG9tYWluLAotICAgICAgICAgIEZBTFNF
KTsKLSAgICAgICAgaWYgKHQpCisJeworCXVzY2hhciAqIGVycm9yOworCWludCBzdGFydCwgZW5k
LCBkb21haW47CisJdXNjaGFyICogdCA9IHBhcnNlX2V4dHJhY3RfYWRkcmVzcyhzdWIsICZlcnJv
ciwgJnN0YXJ0LCAmZW5kLCAmZG9tYWluLAorCSAgRkFMU0UpOworCWlmICh0KQogCSAgaWYgKGMg
IT0gRU9QX0RPTUFJTikKIAkgICAgeWllbGQgPSBjID09IEVPUF9MT0NBTF9QQVJUICYmIGRvbWFp
biA+IDAKIAkgICAgICA/IHN0cmluZ19jYXRuKHlpZWxkLCB0LCBkb21haW4gLSAxKQogCSAgICAg
IDogc3RyaW5nX2NhdCh5aWVsZCwgdCk7CiAJICBlbHNlIGlmIChkb21haW4gPiAwKQogCSAgICB5
aWVsZCA9IHN0cmluZ19jYXQoeWllbGQsIHQgKyBkb21haW4pOwotICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQorCWJyZWFrOworCX0KIAogICAgICAgY2FzZSBFT1BfQUREUkVTU0VTOgotICAg
ICAgICB7Ci0gICAgICAgIHVzY2hhciBvdXRzZXBbMl0gPSB7ICc6JywgJ1wwJyB9OwotICAgICAg
ICB1c2NoYXIgKmFkZHJlc3MsICplcnJvcjsKLSAgICAgICAgaW50IHNhdmVfcHRyID0gZ3N0cmlu
Z19sZW5ndGgoeWllbGQpOwotICAgICAgICBpbnQgc3RhcnQsIGVuZCwgZG9tYWluOyAgLyogTm90
IHJlYWxseSB1c2VkICovCisJeworCXVzY2hhciBvdXRzZXBbMl0gPSB7ICc6JywgJ1wwJyB9Owor
CXVzY2hhciAqYWRkcmVzcywgKmVycm9yOworCWludCBzYXZlX3B0ciA9IGdzdHJpbmdfbGVuZ3Ro
KHlpZWxkKTsKKwlpbnQgc3RhcnQsIGVuZCwgZG9tYWluOyAgLyogTm90IHJlYWxseSB1c2VkICov
CiAKIAlpZiAoVXNraXBfd2hpdGVzcGFjZSgmc3ViKSA9PSAnPicpCi0gICAgICAgICAgaWYgKCpv
dXRzZXAgPSAqKytzdWIpICsrc3ViOwotICAgICAgICAgIGVsc2UKKwkgIGlmICgqb3V0c2VwID0g
Kisrc3ViKSArK3N1YjsKKwkgIGVsc2UKIAkgICAgewotICAgICAgICAgICAgZXhwYW5kX3N0cmlu
Z19tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoIm91dHB1dCBzZXBhcmF0b3IgIgotICAgICAgICAg
ICAgICAibWlzc2luZyBpbiBleHBhbmRpbmcgJHthZGRyZXNzZXM6JXN9IiwgLS1zdWIpOwotICAg
ICAgICAgICAgZ290byBFWFBBTkRfRkFJTEVEOwotICAgICAgICAgICAgfQotICAgICAgICBmLnBh
cnNlX2FsbG93X2dyb3VwID0gVFJVRTsKKwkgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gc3Ry
aW5nX3NwcmludGYoIm91dHB1dCBzZXBhcmF0b3IgIgorCSAgICAgICJtaXNzaW5nIGluIGV4cGFu
ZGluZyAke2FkZHJlc3Nlczolc30iLCAtLXN1Yik7CisJICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsK
KwkgICAgfQorCWYucGFyc2VfYWxsb3dfZ3JvdXAgPSBUUlVFOwogCi0gICAgICAgIGZvciAoOzsp
Ci0gICAgICAgICAgewotICAgICAgICAgIHVzY2hhciAqIHAgPSBwYXJzZV9maW5kX2FkZHJlc3Nf
ZW5kKHN1YiwgRkFMU0UpOwotICAgICAgICAgIHVzY2hhciBzYXZlZW5kID0gKnA7Ci0gICAgICAg
ICAgKnAgPSAnXDAnOwotICAgICAgICAgIGFkZHJlc3MgPSBwYXJzZV9leHRyYWN0X2FkZHJlc3Mo
c3ViLCAmZXJyb3IsICZzdGFydCwgJmVuZCwgJmRvbWFpbiwKLSAgICAgICAgICAgIEZBTFNFKTsK
LSAgICAgICAgICAqcCA9IHNhdmVlbmQ7Ci0KLSAgICAgICAgICAvKiBBZGQgdGhlIGFkZHJlc3Mg
dG8gdGhlIG91dHB1dCBsaXN0IHRoYXQgd2UgYXJlIGJ1aWxkaW5nLiBUaGlzIGlzCi0gICAgICAg
ICAgZG9uZSBpbiBjaHVua3MgYnkgc2VhcmNoaW5nIGZvciB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rl
ci4gQXQgdGhlCi0gICAgICAgICAgc3RhcnQsIHVubGVzcyB3ZSBhcmUgZGVhbGluZyB3aXRoIHRo
ZSBmaXJzdCBhZGRyZXNzIG9mIHRoZSBvdXRwdXQKLSAgICAgICAgICBsaXN0LCBhZGQgaW4gYSBz
cGFjZSBpZiB0aGUgbmV3IGFkZHJlc3MgYmVnaW5zIHdpdGggdGhlIHNlcGFyYXRvcgotICAgICAg
ICAgIGNoYXJhY3Rlciwgb3IgaXMgYW4gZW1wdHkgc3RyaW5nLiAqLworCWZvciAoOzspCisJICB7
CisJICB1c2NoYXIgKiBwID0gcGFyc2VfZmluZF9hZGRyZXNzX2VuZChzdWIsIEZBTFNFKTsKKwkg
IHVzY2hhciBzYXZlZW5kID0gKnA7CisJICAqcCA9ICdcMCc7CisJICBhZGRyZXNzID0gcGFyc2Vf
ZXh0cmFjdF9hZGRyZXNzKHN1YiwgJmVycm9yLCAmc3RhcnQsICZlbmQsICZkb21haW4sCisJICAg
IEZBTFNFKTsKKwkgICpwID0gc2F2ZWVuZDsKKworCSAgLyogQWRkIHRoZSBhZGRyZXNzIHRvIHRo
ZSBvdXRwdXQgbGlzdCB0aGF0IHdlIGFyZSBidWlsZGluZy4gVGhpcyBpcworCSAgZG9uZSBpbiBj
aHVua3MgYnkgc2VhcmNoaW5nIGZvciB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci4gQXQgdGhlCisJ
ICBzdGFydCwgdW5sZXNzIHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIGZpcnN0IGFkZHJlc3Mgb2Yg
dGhlIG91dHB1dAorCSAgbGlzdCwgYWRkIGluIGEgc3BhY2UgaWYgdGhlIG5ldyBhZGRyZXNzIGJl
Z2lucyB3aXRoIHRoZSBzZXBhcmF0b3IKKwkgIGNoYXJhY3Rlciwgb3IgaXMgYW4gZW1wdHkgc3Ry
aW5nLiAqLwogCi0gICAgICAgICAgaWYgKGFkZHJlc3MpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoeWllbGQgJiYgeWllbGQtPnB0ciAhPSBzYXZlX3B0ciAmJiBhZGRyZXNzWzBdID09
ICpvdXRzZXApCi0gICAgICAgICAgICAgIHlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIFVTIiAi
LCAxKTsKKwkgIGlmIChhZGRyZXNzKQorCSAgICB7CisJICAgIGlmICh5aWVsZCAmJiB5aWVsZC0+
cHRyICE9IHNhdmVfcHRyICYmIGFkZHJlc3NbMF0gPT0gKm91dHNlcCkKKwkgICAgICB5aWVsZCA9
IHN0cmluZ19jYXRuKHlpZWxkLCBVUyIgIiwgMSk7CiAKLSAgICAgICAgICAgIGZvciAoOzspCi0g
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc2l6ZV90IHNlZ2xlbiA9IFVzdHJjc3BuKGFk
ZHJlc3MsIG91dHNlcCk7Ci0gICAgICAgICAgICAgIHlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQs
IGFkZHJlc3MsIHNlZ2xlbiArIDEpOwotCi0gICAgICAgICAgICAgIC8qIElmIHdlIGdvdCB0byB0
aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2Ugb3V0cHV0IG9uZSBjaGFyYWN0ZXIKLSAgICAgICAgICAg
ICAgdG9vIG1hbnkuICovCi0KLSAgICAgICAgICAgICAgaWYgKGFkZHJlc3Nbc2VnbGVuXSA9PSAn
XDAnKSB7IHlpZWxkLT5wdHItLTsgYnJlYWs7IH0KLSAgICAgICAgICAgICAgeWllbGQgPSBzdHJp
bmdfY2F0bih5aWVsZCwgb3V0c2VwLCAxKTsKLSAgICAgICAgICAgICAgYWRkcmVzcyArPSBzZWds
ZW4gKyAxOwotICAgICAgICAgICAgICB9CisJICAgIGZvciAoOzspCisJICAgICAgeworCSAgICAg
IHNpemVfdCBzZWdsZW4gPSBVc3RyY3NwbihhZGRyZXNzLCBvdXRzZXApOworCSAgICAgIHlpZWxk
ID0gc3RyaW5nX2NhdG4oeWllbGQsIGFkZHJlc3MsIHNlZ2xlbiArIDEpOwogCi0gICAgICAgICAg
ICAvKiBPdXRwdXQgYSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIHN0cmluZzogd2Ugd2lsbCByZW1vdmUg
dGhlCi0gICAgICAgICAgICByZWR1bmRhbnQgZmluYWwgb25lIGF0IHRoZSBlbmQuICovCisJICAg
ICAgLyogSWYgd2UgZ290IHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3ZSBvdXRwdXQgb25lIGNo
YXJhY3RlcgorCSAgICAgIHRvbyBtYW55LiAqLwogCi0gICAgICAgICAgICB5aWVsZCA9IHN0cmlu
Z19jYXRuKHlpZWxkLCBvdXRzZXAsIDEpOwotICAgICAgICAgICAgfQorCSAgICAgIGlmIChhZGRy
ZXNzW3NlZ2xlbl0gPT0gJ1wwJykgeyB5aWVsZC0+cHRyLS07IGJyZWFrOyB9CisJICAgICAgeWll
bGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgb3V0c2VwLCAxKTsKKwkgICAgICBhZGRyZXNzICs9IHNl
Z2xlbiArIDE7CisJICAgICAgfQogCi0gICAgICAgICAgaWYgKHNhdmVlbmQgPT0gJ1wwJykgYnJl
YWs7Ci0gICAgICAgICAgc3ViID0gcCArIDE7Ci0gICAgICAgICAgfQorCSAgICAvKiBPdXRwdXQg
YSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIHN0cmluZzogd2Ugd2lsbCByZW1vdmUgdGhlCisJICAgIHJl
ZHVuZGFudCBmaW5hbCBvbmUgYXQgdGhlIGVuZC4gKi8KIAotICAgICAgICAvKiBJZiB3ZSBoYXZl
IGdlbmVyYXRlZCBhbnl0aGluZywgcmVtb3ZlIHRoZSByZWR1bmRhbnQgZmluYWwKLSAgICAgICAg
c2VwYXJhdG9yLiAqLworCSAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBvdXRzZXAsIDEp
OworCSAgICB9CiAKLSAgICAgICAgaWYgKHlpZWxkICYmIHlpZWxkLT5wdHIgIT0gc2F2ZV9wdHIp
IHlpZWxkLT5wdHItLTsKLSAgICAgICAgZi5wYXJzZV9hbGxvd19ncm91cCA9IEZBTFNFOwotICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQorCSAgaWYgKHNhdmVlbmQgPT0gJ1wwJykgYnJlYWs7
CisJICBzdWIgPSBwICsgMTsKKwkgIH0KKworCS8qIElmIHdlIGhhdmUgZ2VuZXJhdGVkIGFueXRo
aW5nLCByZW1vdmUgdGhlIHJlZHVuZGFudCBmaW5hbAorCXNlcGFyYXRvci4gKi8KKworCWlmICh5
aWVsZCAmJiB5aWVsZC0+cHRyICE9IHNhdmVfcHRyKSB5aWVsZC0+cHRyLS07CisJZi5wYXJzZV9h
bGxvd19ncm91cCA9IEZBTFNFOworCWJyZWFrOworCX0KIAogCiAgICAgICAvKiBxdW90ZSBwdXRz
IGEgc3RyaW5nIGluIHF1b3RlcyBpZiBpdCBpcyBlbXB0eSBvciBjb250YWlucyBhbnl0aGluZwpA
QCAtNzQ4Myw1ODYgKzc1OTEsNjE1IEBACiAKICAgICAgIGNhc2UgRU9QX1FVT1RFOgogICAgICAg
Y2FzZSBFT1BfUVVPVEVfTE9DQUxfUEFSVDoKLSAgICAgIGlmICghYXJnKQotICAgICAgICB7Ci0g
ICAgICAgIEJPT0wgbmVlZHNfcXVvdGUgPSAoISpzdWIpOyAgICAgIC8qIFRSVUUgZm9yIGVtcHR5
IHN0cmluZyAqLwotICAgICAgICB1c2NoYXIgKnQgPSBzdWIgLSAxOwotCi0gICAgICAgIGlmIChj
ID09IEVPUF9RVU9URSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgd2hpbGUgKCFuZWVkc19xdW90
ZSAmJiAqKCsrdCkgIT0gMCkKLSAgICAgICAgICAgIG5lZWRzX3F1b3RlID0gIWlzYWxudW0oKnQp
ICYmICFzdHJjaHIoIl8tLiIsICp0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgIC8qIEVP
UF9RVU9URV9MT0NBTF9QQVJUICovCi0gICAgICAgICAgewotICAgICAgICAgIHdoaWxlICghbmVl
ZHNfcXVvdGUgJiYgKigrK3QpICE9IDApCi0gICAgICAgICAgICBuZWVkc19xdW90ZSA9ICFpc2Fs
bnVtKCp0KSAmJgotICAgICAgICAgICAgICBzdHJjaHIoIiEjJCUmJyorLS89P15fYHt8fX4iLCAq
dCkgPT0gTlVMTCAmJgotICAgICAgICAgICAgICAoKnQgIT0gJy4nIHx8IHQgPT0gc3ViIHx8IHRb
MV0gPT0gMCk7Ci0gICAgICAgICAgfQorCWlmICghYXJnKQorCSAgeworCSAgQk9PTCBuZWVkc19x
dW90ZSA9ICghKnN1Yik7ICAgICAgLyogVFJVRSBmb3IgZW1wdHkgc3RyaW5nICovCisJICB1c2No
YXIgKnQgPSBzdWIgLSAxOwogCi0gICAgICAgIGlmIChuZWVkc19xdW90ZSkKLSAgICAgICAgICB7
Ci0gICAgICAgICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgVVMiXCIiLCAxKTsKLSAgICAg
ICAgICB0ID0gc3ViIC0gMTsKLSAgICAgICAgICB3aGlsZSAoKigrK3QpICE9IDApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoKnQgPT0gJ1xuJykKLSAgICAgICAgICAgICAgeWllbGQg
PSBzdHJpbmdfY2F0bih5aWVsZCwgVVMiXFxuIiwgMik7Ci0gICAgICAgICAgICBlbHNlIGlmICgq
dCA9PSAnXHInKQotICAgICAgICAgICAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBVUyJc
XHIiLCAyKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBpZiAoKnQgPT0gJ1xcJyB8fCAqdCA9PSAnIicpCi0gICAgICAgICAgICAgICAgeWllbGQgPSBz
dHJpbmdfY2F0bih5aWVsZCwgVVMiXFwiLCAxKTsKLSAgICAgICAgICAgICAgeWllbGQgPSBzdHJp
bmdfY2F0bih5aWVsZCwgdCwgMSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBVUyJcIiIsIDEpOwotICAgICAgICAg
IH0KLSAgICAgICAgZWxzZSB5aWVsZCA9IHN0cmluZ19jYXQoeWllbGQsIHN1Yik7Ci0gICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9CisJICBpZiAoYyA9PSBFT1BfUVVPVEUpCisJICAgIHdoaWxl
ICghbmVlZHNfcXVvdGUgJiYgKisrdCkKKwkgICAgICBuZWVkc19xdW90ZSA9ICFpc2FsbnVtKCp0
KSAmJiAhc3RyY2hyKCJfLS4iLCAqdCk7CisKKwkgIGVsc2UgIC8qIEVPUF9RVU9URV9MT0NBTF9Q
QVJUICovCisJICAgIHdoaWxlICghbmVlZHNfcXVvdGUgJiYgKisrdCkKKwkgICAgICBuZWVkc19x
dW90ZSA9ICFpc2FsbnVtKCp0KQorCQkmJiBzdHJjaHIoIiEjJCUmJyorLS89P15fYHt8fX4iLCAq
dCkgPT0gTlVMTAorCQkmJiAoKnQgIT0gJy4nIHx8IHQgPT0gc3ViIHx8ICF0WzFdKTsKIAotICAg
ICAgLyogcXVvdGVfbG9va3VwdHlwZSBkb2VzIGxvb2t1cC1zcGVjaWZpYyBxdW90aW5nICovCisJ
ICBpZiAobmVlZHNfcXVvdGUpCisJICAgIHsKKwkgICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVs
ZCwgVVMiXCIiLCAxKTsKKwkgICAgdCA9IHN1YiAtIDE7CisJICAgIHdoaWxlICgqKyt0KQorCSAg
ICAgIGlmICgqdCA9PSAnXG4nKQorCQl5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBVUyJcXG4i
LCAyKTsKKwkgICAgICBlbHNlIGlmICgqdCA9PSAnXHInKQorCQl5aWVsZCA9IHN0cmluZ19jYXRu
KHlpZWxkLCBVUyJcXHIiLCAyKTsKKwkgICAgICBlbHNlCisJCXsKKwkJaWYgKCp0ID09ICdcXCcg
fHwgKnQgPT0gJyInKQorCQkgIHlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIFVTIlxcIiwgMSk7
CisJCXlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIHQsIDEpOworCQl9CisJICAgIHlpZWxkID0g
c3RyaW5nX2NhdG4oeWllbGQsIFVTIlwiIiwgMSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeWll
bGQgPSBzdHJpbmdfY2F0KHlpZWxkLCBzdWIpOworCSAgYnJlYWs7CisJICB9CiAKLSAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICBpbnQgbjsKLSAgICAgICAgdXNjaGFyICpvcHQgPSBVc3Ry
Y2hyKGFyZywgJ18nKTsKKwkvKiBxdW90ZV9sb29rdXB0eXBlIGRvZXMgbG9va3VwLXNwZWNpZmlj
IHF1b3RpbmcgKi8KIAotICAgICAgICBpZiAob3B0KSAqb3B0KysgPSAwOworCWVsc2UKKwkgIHsK
KwkgIGludCBuOworCSAgdXNjaGFyICogb3B0ID0gVXN0cmNocihhcmcsICdfJyk7CiAKLSAgICAg
ICAgaWYgKChuID0gc2VhcmNoX2ZpbmR0eXBlKGFyZywgVXN0cmxlbihhcmcpKSkgPCAwKQotICAg
ICAgICAgIHsKLSAgICAgICAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBzZWFyY2hfZXJyb3Jf
bWVzc2FnZTsKLSAgICAgICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7Ci0gICAgICAgICAgfQorCSAg
aWYgKG9wdCkgKm9wdCsrID0gMDsKIAotICAgICAgICBpZiAobG9va3VwX2xpc3Rbbl0tPnF1b3Rl
KQotICAgICAgICAgIHN1YiA9IChsb29rdXBfbGlzdFtuXS0+cXVvdGUpKHN1Yiwgb3B0KTsKLSAg
ICAgICAgZWxzZSBpZiAob3B0KQotCSAgc3ViID0gTlVMTDsKKwkgIGlmICgobiA9IHNlYXJjaF9m
aW5kdHlwZShhcmcsIFVzdHJsZW4oYXJnKSkpIDwgMCkKKwkgICAgeworCSAgICBleHBhbmRfc3Ry
aW5nX21lc3NhZ2UgPSBzZWFyY2hfZXJyb3JfbWVzc2FnZTsKKwkgICAgZ290byBFWFBBTkRfRkFJ
TEVEOworCSAgICB9CiAKLSAgICAgICAgaWYgKCFzdWIpCi0gICAgICAgICAgewotICAgICAgICAg
IGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKAotICAgICAgICAgICAgIlwi
JXNcIiB1bnJlY29nbml6ZWQgYWZ0ZXIgXCIke3F1b3RlXyVzXCIiLAotICAgICAgICAgICAgb3B0
LCBhcmcpOwotICAgICAgICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKLSAgICAgICAgICB9CisJICBp
ZiAobG9va3VwX2xpc3Rbbl0tPnF1b3RlKQorCSAgICBzdWIgPSAobG9va3VwX2xpc3Rbbl0tPnF1
b3RlKShzdWIsIG9wdCwgKHVuc2lnbmVkKW4pOworCSAgZWxzZSBpZiAob3B0KQorCSAgICBzdWIg
PSBOVUxMOwogCi0gICAgICAgIHlpZWxkID0gc3RyaW5nX2NhdCh5aWVsZCwgc3ViKTsKLSAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KKwkgIGlmICghc3ViKQorCSAgICB7CisJICAgIGV4cGFu
ZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKAorCSAgICAgICJcIiVzXCIgdW5yZWNv
Z25pemVkIGFmdGVyIFwiJHtxdW90ZV8lc1wiIiwJLyp9Ki8KKwkgICAgICBvcHQsIGFyZyk7CisJ
ICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKKwkgICAgfQogCi0gICAgICAvKiByeCBxdW90ZSBzdGlj
a3MgaW4gXCBiZWZvcmUgYW55IG5vbi1hbHBoYW1lcmljIGNoYXJhY3RlciBzbyB0aGF0Ci0gICAg
ICB0aGUgaW5zZXJ0aW9uIHdvcmtzIGluIGEgcmVndWxhciBleHByZXNzaW9uLiAqLworCSAgeWll
bGQgPSBzdHJpbmdfY2F0KHlpZWxkLCBzdWIpOworCSAgYnJlYWs7CisJICB9CiAKLSAgICAgIGNh
c2UgRU9QX1JYUVVPVEU6Ci0gICAgICAgIHsKLSAgICAgICAgdXNjaGFyICp0ID0gc3ViIC0gMTsK
LSAgICAgICAgd2hpbGUgKCooKyt0KSAhPSAwKQotICAgICAgICAgIHsKLSAgICAgICAgICBpZiAo
IWlzYWxudW0oKnQpKQotICAgICAgICAgICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgVVMi
XFwiLCAxKTsKLSAgICAgICAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCB0LCAxKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisJLyogcnggcXVvdGUgc3Rp
Y2tzIGluIFwgYmVmb3JlIGFueSBub24tYWxwaGFtZXJpYyBjaGFyYWN0ZXIgc28gdGhhdAorCXRo
ZSBpbnNlcnRpb24gd29ya3MgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24uICovCiAKLSAgICAgIC8q
IFJGQyAyMDQ3IGVuY29kZXMsIGFzc3VtaW5nIGhlYWRlcnNfY2hhcnNldCAoZGVmYXVsdCBJU08g
ODg1OS0xKSBhcwotICAgICAgcHJlc2NyaWJlZCBieSB0aGUgUkZDLCBpZiB0aGVyZSBhcmUgY2hh
cmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgZW5jb2RlZCAqLworCWNhc2UgRU9QX1JYUVVPVEU6CisJ
ICB7CisJICB1c2NoYXIgKnQgPSBzdWIgLSAxOworCSAgd2hpbGUgKCooKyt0KSAhPSAwKQorCSAg
ICB7CisJICAgIGlmICghaXNhbG51bSgqdCkpCisJICAgICAgeWllbGQgPSBzdHJpbmdfY2F0bih5
aWVsZCwgVVMiXFwiLCAxKTsKKwkgICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgdCwgMSk7
CisJICAgIH0KKwkgIGJyZWFrOworCSAgfQogCi0gICAgICBjYXNlIEVPUF9SRkMyMDQ3OgotICAg
ICAgICB5aWVsZCA9IHN0cmluZ19jYXQoeWllbGQsCi0JCQkgICAgcGFyc2VfcXVvdGVfMjA0Nyhz
dWIsIFVzdHJsZW4oc3ViKSwgaGVhZGVyc19jaGFyc2V0LAotCQkJICAgICAgRkFMU0UpKTsKLSAg
ICAgICAgY29udGludWU7CisJLyogUkZDIDIwNDcgZW5jb2RlcywgYXNzdW1pbmcgaGVhZGVyc19j
aGFyc2V0IChkZWZhdWx0IElTTyA4ODU5LTEpIGFzCisJcHJlc2NyaWJlZCBieSB0aGUgUkZDLCBp
ZiB0aGVyZSBhcmUgY2hhcmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgZW5jb2RlZCAqLwogCi0gICAg
ICAvKiBSRkMgMjA0NyBkZWNvZGUgKi8KKwljYXNlIEVPUF9SRkMyMDQ3OgorCSAgeWllbGQgPSBz
dHJpbmdfY2F0KHlpZWxkLAorCQkJICAgICAgcGFyc2VfcXVvdGVfMjA0NyhzdWIsIFVzdHJsZW4o
c3ViKSwgaGVhZGVyc19jaGFyc2V0LAorCQkJCUZBTFNFKSk7CisJICBicmVhazsKIAotICAgICAg
Y2FzZSBFT1BfUkZDMjA0N0Q6Ci0gICAgICAgIHsKLSAgICAgICAgaW50IGxlbjsKLSAgICAgICAg
dXNjaGFyICplcnJvcjsKLSAgICAgICAgdXNjaGFyICpkZWNvZGVkID0gcmZjMjA0N19kZWNvZGUo
c3ViLCBjaGVja19yZmMyMDQ3X2xlbmd0aCwKLSAgICAgICAgICBoZWFkZXJzX2NoYXJzZXQsICc/
JywgJmxlbiwgJmVycm9yKTsKLSAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgIHsKLSAgICAg
ICAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBlcnJvcjsKLSAgICAgICAgICBnb3RvIEVYUEFO
RF9GQUlMRUQ7Ci0gICAgICAgICAgfQotICAgICAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxk
LCBkZWNvZGVkLCBsZW4pOwotICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorCS8qIFJGQyAy
MDQ3IGRlY29kZSAqLwogCi0gICAgICAvKiBmcm9tX3V0ZjggY29udmVydHMgVVRGLTggdG8gODg1
OS0xLCB0dXJuaW5nIG5vbi1leGlzdGVudCBjaGFycyBpbnRvCi0gICAgICB1bmRlcnNjb3JlcyAq
LworCWNhc2UgRU9QX1JGQzIwNDdEOgorCSAgeworCSAgaW50IGxlbjsKKwkgIHVzY2hhciAqZXJy
b3I7CisJICB1c2NoYXIgKmRlY29kZWQgPSByZmMyMDQ3X2RlY29kZShzdWIsIGNoZWNrX3JmYzIw
NDdfbGVuZ3RoLAorCSAgICBoZWFkZXJzX2NoYXJzZXQsICc/JywgJmxlbiwgJmVycm9yKTsKKwkg
IGlmIChlcnJvcikKKwkgICAgeworCSAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBlcnJvcjsK
KwkgICAgZ290byBFWFBBTkRfRkFJTEVEOworCSAgICB9CisJICB5aWVsZCA9IHN0cmluZ19jYXRu
KHlpZWxkLCBkZWNvZGVkLCBsZW4pOworCSAgYnJlYWs7CisJICB9CiAKLSAgICAgIGNhc2UgRU9Q
X0ZST01fVVRGODoKLSAgICAgICAgewotCXVzY2hhciAqIGJ1ZmYgPSBzdG9yZV9nZXQoNCwgaXNf
dGFpbnRlZChzdWIpKTsKLSAgICAgICAgd2hpbGUgKCpzdWIpCi0gICAgICAgICAgewotICAgICAg
ICAgIGludCBjOwotICAgICAgICAgIEdFVFVURjhJTkMoYywgc3ViKTsKLSAgICAgICAgICBpZiAo
YyA+IDI1NSkgYyA9ICdfJzsKLSAgICAgICAgICBidWZmWzBdID0gYzsKLSAgICAgICAgICB5aWVs
ZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBidWZmLCAxKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9CisJLyogZnJvbV91dGY4IGNvbnZlcnRzIFVURi04IHRvIDg4NTkt
MSwgdHVybmluZyBub24tZXhpc3RlbnQgY2hhcnMgaW50bworCXVuZGVyc2NvcmVzICovCiAKLSAg
ICAgIC8qIHJlcGxhY2UgaWxsZWdhbCBVVEYtOCBzZXF1ZW5jZXMgYnkgcmVwbGFjZW1lbnQgY2hh
cmFjdGVyICAqLworCWNhc2UgRU9QX0ZST01fVVRGODoKKwkgIHsKKwkgIHVzY2hhciAqIGJ1ZmYg
PSBzdG9yZV9nZXQoNCwgc3ViKTsKKwkgIHdoaWxlICgqc3ViKQorCSAgICB7CisJICAgIGludCBj
OworCSAgICBHRVRVVEY4SU5DKGMsIHN1Yik7CisJICAgIGlmIChjID4gMjU1KSBjID0gJ18nOwor
CSAgICBidWZmWzBdID0gYzsKKwkgICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgYnVmZiwg
MSk7CisJICAgIH0KKwkgIGJyZWFrOworCSAgfQogCi0gICAgICAjZGVmaW5lIFVURjhfUkVQTEFD
RU1FTlRfQ0hBUiBVUyI/IgorCS8qIHJlcGxhY2UgaWxsZWdhbCBVVEYtOCBzZXF1ZW5jZXMgYnkg
cmVwbGFjZW1lbnQgY2hhcmFjdGVyICAqLwogCi0gICAgICBjYXNlIEVPUF9VVEY4Q0xFQU46Ci0g
ICAgICAgIHsKLSAgICAgICAgaW50IHNlcV9sZW4gPSAwLCBpbmRleCA9IDA7Ci0gICAgICAgIGlu
dCBieXRlc19sZWZ0ID0gMDsKLSAgICAgICAgbG9uZyBjb2RlcG9pbnQgPSAtMTsKLSAgICAgICAg
aW50IGNvbXBsZXRlOwotICAgICAgICB1c2NoYXIgc2VxX2J1ZmZbNF07CQkJLyogYWNjdW11bGF0
ZSB1dGYtOCBoZXJlICovCisJI2RlZmluZSBVVEY4X1JFUExBQ0VNRU5UX0NIQVIgVVMiPyIKIAot
CS8qIE1hbnVhbGx5IHRyYWNrIHRhaW50aW5nLCBhcyB3ZSBkZWFsIGluIGluZGl2aWR1YWwgY2hh
cnMgYmVsb3cgKi8KKwljYXNlIEVPUF9VVEY4Q0xFQU46CisJICB7CisJICBpbnQgc2VxX2xlbiA9
IDAsIGluZGV4ID0gMDsKKwkgIGludCBieXRlc19sZWZ0ID0gMDsKKwkgIGxvbmcgY29kZXBvaW50
ID0gLTE7CisJICBpbnQgY29tcGxldGU7CisJICB1c2NoYXIgc2VxX2J1ZmZbNF07CQkJLyogYWNj
dW11bGF0ZSB1dGYtOCBoZXJlICovCiAKLQlpZiAoaXNfdGFpbnRlZChzdWIpKQotCSAgaWYgKHlp
ZWxkLT5zICYmIHlpZWxkLT5wdHIpCi0JICAgIGdzdHJpbmdfcmVidWZmZXIoeWllbGQpOwotCSAg
ZWxzZQotCSAgICB5aWVsZC0+cyA9IHN0b3JlX2dldCh5aWVsZC0+c2l6ZSA9IFVzdHJsZW4oc3Vi
KSwgVFJVRSk7CisJICAvKiBNYW51YWxseSB0cmFjayB0YWludGluZywgYXMgd2UgZGVhbCBpbiBp
bmRpdmlkdWFsIGNoYXJzIGJlbG93ICovCiAKLQkvKiBDaGVjayB0aGUgVVRGLTgsIGJ5dGUtYnkt
Ynl0ZSAqLworCSAgaWYgKCF5aWVsZC0+cyB8fCAheWllbGQtPnB0cikKKwkgICAgeWllbGQtPnMg
PSBzdG9yZV9nZXQoeWllbGQtPnNpemUgPSBVc3RybGVuKHN1YiksIHN1Yik7CisJICBlbHNlIGlm
IChpc19pbmNvbXBhdGlibGUoeWllbGQtPnMsIHN1YikpCisJICAgIGdzdHJpbmdfcmVidWZmZXIo
eWllbGQsIHN1Yik7CiAKLSAgICAgICAgd2hpbGUgKCpzdWIpCi0JICB7Ci0JICBjb21wbGV0ZSA9
IDA7Ci0JICB1c2NoYXIgYyA9ICpzdWIrKzsKKwkgIC8qIENoZWNrIHRoZSBVVEYtOCwgYnl0ZS1i
eS1ieXRlICovCiAKLQkgIGlmIChieXRlc19sZWZ0KQorCSAgd2hpbGUgKCpzdWIpCiAJICAgIHsK
LQkgICAgaWYgKChjICYgMHhjMCkgIT0gMHg4MCkKLQkJICAgIC8qIHdyb25nIGNvbnRpbnVhdGlv
biBieXRlOyBpbnZhbGlkYXRlIGFsbCBieXRlcyAqLwotCSAgICAgIGNvbXBsZXRlID0gMTsgLyog
ZXJyb3IgKi8KLQkgICAgZWxzZQotCSAgICAgIHsKLQkgICAgICBjb2RlcG9pbnQgPSAoY29kZXBv
aW50IDw8IDYpIHwgKGMgJiAweDNmKTsKLQkgICAgICBzZXFfYnVmZltpbmRleCsrXSA9IGM7Ci0J
ICAgICAgaWYgKC0tYnl0ZXNfbGVmdCA9PSAwKQkJLyogY29kZXBvaW50IGNvbXBsZXRlICovCi0J
CWlmKGNvZGVwb2ludCA+IDB4MTBGRkZGKQkvKiBpcyBpdCB0b28gbGFyZ2U/ICovCi0JCSAgY29t
cGxldGUgPSAtMTsJLyogZXJyb3IgKFJGQzM2MjkgbGltaXQpICovCi0JCWVsc2UKLQkJICB7CQkv
KiBmaW5pc2hlZDsgb3V0cHV0IHV0Zi04IHNlcXVlbmNlICovCi0JCSAgeWllbGQgPSBzdHJpbmdf
Y2F0bih5aWVsZCwgc2VxX2J1ZmYsIHNlcV9sZW4pOwotCQkgIGluZGV4ID0gMDsKLQkJICB9Ci0J
ICAgICAgfQotCSAgICB9Ci0JICBlbHNlCS8qIG5vIGJ5dGVzIGxlZnQ6IG5ldyBzZXF1ZW5jZSAq
LwotCSAgICB7Ci0JICAgIGlmKCEoYyAmIDB4ODApKQkvKiAxLWJ5dGUgc2VxdWVuY2UsIFVTLUFT
Q0lJLCBrZWVwIGl0ICovCi0JICAgICAgewotCSAgICAgIHlpZWxkID0gc3RyaW5nX2NhdG4oeWll
bGQsICZjLCAxKTsKLQkgICAgICBjb250aW51ZTsKLQkgICAgICB9Ci0JICAgIGlmKChjICYgMHhl
MCkgPT0gMHhjMCkJCS8qIDItYnl0ZSBzZXF1ZW5jZSAqLworCSAgICBjb21wbGV0ZSA9IDA7CisJ
ICAgIHVzY2hhciBjID0gKnN1YisrOworCisJICAgIGlmIChieXRlc19sZWZ0KQogCSAgICAgIHsK
LQkgICAgICBpZihjID09IDB4YzAgfHwgYyA9PSAweGMxKQkvKiAweGMwIGFuZCAweGMxIGFyZSBp
bGxlZ2FsICovCi0JCWNvbXBsZXRlID0gLTE7CisJICAgICAgaWYgKChjICYgMHhjMCkgIT0gMHg4
MCkKKwkJICAgICAgLyogd3JvbmcgY29udGludWF0aW9uIGJ5dGU7IGludmFsaWRhdGUgYWxsIGJ5
dGVzICovCisJCWNvbXBsZXRlID0gMTsgLyogZXJyb3IgKi8KIAkgICAgICBlbHNlCiAJCXsKLQkJ
ICBieXRlc19sZWZ0ID0gMTsKLQkJICBjb2RlcG9pbnQgPSBjICYgMHgxZjsKKwkJY29kZXBvaW50
ID0gKGNvZGVwb2ludCA8PCA2KSB8IChjICYgMHgzZik7CisJCXNlcV9idWZmW2luZGV4KytdID0g
YzsKKwkJaWYgKC0tYnl0ZXNfbGVmdCA9PSAwKQkJLyogY29kZXBvaW50IGNvbXBsZXRlICovCisJ
CSAgaWYoY29kZXBvaW50ID4gMHgxMEZGRkYpCS8qIGlzIGl0IHRvbyBsYXJnZT8gKi8KKwkJICAg
IGNvbXBsZXRlID0gLTE7CS8qIGVycm9yIChSRkMzNjI5IGxpbWl0KSAqLworCQkgIGVsc2UKKwkJ
ICAgIHsJCS8qIGZpbmlzaGVkOyBvdXRwdXQgdXRmLTggc2VxdWVuY2UgKi8KKwkJICAgIHlpZWxk
ID0gc3RyaW5nX2NhdG4oeWllbGQsIHNlcV9idWZmLCBzZXFfbGVuKTsKKwkJICAgIGluZGV4ID0g
MDsKKwkJICAgIH0KIAkJfQogCSAgICAgIH0KLQkgICAgZWxzZSBpZigoYyAmIDB4ZjApID09IDB4
ZTApCQkvKiAzLWJ5dGUgc2VxdWVuY2UgKi8KKwkgICAgZWxzZQkvKiBubyBieXRlcyBsZWZ0OiBu
ZXcgc2VxdWVuY2UgKi8KIAkgICAgICB7Ci0JICAgICAgYnl0ZXNfbGVmdCA9IDI7Ci0JICAgICAg
Y29kZXBvaW50ID0gYyAmIDB4MGY7Ci0JICAgICAgfQotCSAgICBlbHNlIGlmKChjICYgMHhmOCkg
PT0gMHhmMCkJCS8qIDQtYnl0ZSBzZXF1ZW5jZSAqLworCSAgICAgIGlmKCEoYyAmIDB4ODApKQkv
KiAxLWJ5dGUgc2VxdWVuY2UsIFVTLUFTQ0lJLCBrZWVwIGl0ICovCisJCXsKKwkJeWllbGQgPSBz
dHJpbmdfY2F0bih5aWVsZCwgJmMsIDEpOworCQljb250aW51ZTsKKwkJfQorCSAgICAgIGlmKChj
ICYgMHhlMCkgPT0gMHhjMCkJCS8qIDItYnl0ZSBzZXF1ZW5jZSAqLworCQl7CisJCWlmKGMgPT0g
MHhjMCB8fCBjID09IDB4YzEpCS8qIDB4YzAgYW5kIDB4YzEgYXJlIGlsbGVnYWwgKi8KKwkJICBj
b21wbGV0ZSA9IC0xOworCQllbHNlCisJCSAgeworCQkgICAgYnl0ZXNfbGVmdCA9IDE7CisJCSAg
ICBjb2RlcG9pbnQgPSBjICYgMHgxZjsKKwkJICB9CisJCX0KKwkgICAgICBlbHNlIGlmKChjICYg
MHhmMCkgPT0gMHhlMCkJCS8qIDMtYnl0ZSBzZXF1ZW5jZSAqLworCQl7CisJCWJ5dGVzX2xlZnQg
PSAyOworCQljb2RlcG9pbnQgPSBjICYgMHgwZjsKKwkJfQorCSAgICAgIGVsc2UgaWYoKGMgJiAw
eGY4KSA9PSAweGYwKQkJLyogNC1ieXRlIHNlcXVlbmNlICovCisJCXsKKwkJYnl0ZXNfbGVmdCA9
IDM7CisJCWNvZGVwb2ludCA9IGMgJiAweDA3OworCQl9CisJICAgICAgZWxzZQkvKiBpbnZhbGlk
IG9yIHRvbyBsb25nIChSRkMzNjI5IGFsbG93cyBvbmx5IDQgYnl0ZXMpICovCisJCWNvbXBsZXRl
ID0gLTE7CisKKwkgICAgICBzZXFfYnVmZltpbmRleCsrXSA9IGM7CisJICAgICAgc2VxX2xlbiA9
IGJ5dGVzX2xlZnQgKyAxOworCSAgICAgIH0JCS8qIGlmKGJ5dGVzX2xlZnQpICovCisKKwkgICAg
aWYgKGNvbXBsZXRlICE9IDApCiAJICAgICAgewotCSAgICAgIGJ5dGVzX2xlZnQgPSAzOwotCSAg
ICAgIGNvZGVwb2ludCA9IGMgJiAweDA3OworCSAgICAgIGJ5dGVzX2xlZnQgPSBpbmRleCA9IDA7
CisJICAgICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgVVRGOF9SRVBMQUNFTUVOVF9DSEFS
LCAxKTsKIAkgICAgICB9Ci0JICAgIGVsc2UJLyogaW52YWxpZCBvciB0b28gbG9uZyAoUkZDMzYy
OSBhbGxvd3Mgb25seSA0IGJ5dGVzKSAqLwotCSAgICAgIGNvbXBsZXRlID0gLTE7Ci0KLQkgICAg
c2VxX2J1ZmZbaW5kZXgrK10gPSBjOwotCSAgICBzZXFfbGVuID0gYnl0ZXNfbGVmdCArIDE7Ci0J
ICAgIH0JCS8qIGlmKGJ5dGVzX2xlZnQpICovCisJICAgIGlmICgoY29tcGxldGUgPT0gMSkgJiYg
KChjICYgMHg4MCkgPT0gMCkpCisJCQkgIC8qIEFTQ0lJIGNoYXJhY3RlciBmb2xsb3dzIGluY29t
cGxldGUgc2VxdWVuY2UgKi8KKwkJeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgJmMsIDEpOwor
CSAgICB9CisJICAvKiBJZiBnaXZlbiBhIHNlcXVlbmNlIHRydW5jYXRlZCBtaWQtY2hhcmFjdGVy
LCB3ZSBhbHNvIHdhbnQgdG8gcmVwb3J0ID8KKwkgIEVnLCAke2xlbmd0aF8xOuODleOCo+ODq30g
aXMgb25lIGJ5dGUsIG5vdCBvbmUgY2hhcmFjdGVyLCBzbyB3ZSBleHBlY3QKKwkgICR7dXRmOGNs
ZWFuOiR7bGVuZ3RoXzE644OV44Kj44OrfX0gdG8geWllbGQgJz8nICovCiAKLQkgIGlmIChjb21w
bGV0ZSAhPSAwKQotCSAgICB7Ci0JICAgIGJ5dGVzX2xlZnQgPSBpbmRleCA9IDA7CisJICBpZiAo
Ynl0ZXNfbGVmdCAhPSAwKQogCSAgICB5aWVsZCA9IHN0cmluZ19jYXRuKHlpZWxkLCBVVEY4X1JF
UExBQ0VNRU5UX0NIQVIsIDEpOwotCSAgICB9Ci0JICBpZiAoKGNvbXBsZXRlID09IDEpICYmICgo
YyAmIDB4ODApID09IDApKQotCQkJLyogQVNDSUkgY2hhcmFjdGVyIGZvbGxvd3MgaW5jb21wbGV0
ZSBzZXF1ZW5jZSAqLwotCSAgICAgIHlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsICZjLCAxKTsK
LQkgIH0KLSAgICAgICAgLyogSWYgZ2l2ZW4gYSBzZXF1ZW5jZSB0cnVuY2F0ZWQgbWlkLWNoYXJh
Y3Rlciwgd2UgYWxzbyB3YW50IHRvIHJlcG9ydCA/Ci0gICAgICAgICogRWcsICR7bGVuZ3RoXzE6
44OV44Kj44OrfSBpcyBvbmUgYnl0ZSwgbm90IG9uZSBjaGFyYWN0ZXIsIHNvIHdlIGV4cGVjdAot
ICAgICAgICAqICR7dXRmOGNsZWFuOiR7bGVuZ3RoXzE644OV44Kj44OrfX0gdG8geWllbGQgJz8n
ICovCi0gICAgICAgIGlmIChieXRlc19sZWZ0ICE9IDApCi0gICAgICAgICAgeWllbGQgPSBzdHJp
bmdfY2F0bih5aWVsZCwgVVRGOF9SRVBMQUNFTUVOVF9DSEFSLCAxKTsKIAotICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQorCSAgYnJlYWs7CisJICB9CiAKICNpZmRlZiBTVVBQT1JUX0kxOE4K
LSAgICAgIGNhc2UgRU9QX1VURjhfRE9NQUlOX1RPX0FMQUJFTDoKLQl7Ci0gICAgICAgIHVzY2hh
ciAqIGVycm9yID0gTlVMTDsKLQl1c2NoYXIgKiBzID0gc3RyaW5nX2RvbWFpbl91dGY4X3RvX2Fs
YWJlbChzdWIsICZlcnJvcik7Ci0JaWYgKGVycm9yKQorCWNhc2UgRU9QX1VURjhfRE9NQUlOX1RP
X0FMQUJFTDoKIAkgIHsKLQkgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRm
KAotCSAgICAiZXJyb3IgY29udmVydGluZyB1dGY4ICglcykgdG8gYWxhYmVsOiAlcyIsCi0JICAg
IHN0cmluZ19wcmludGluZyhzdWIpLCBlcnJvcik7Ci0JICBnb3RvIEVYUEFORF9GQUlMRUQ7CisJ
ICB1c2NoYXIgKiBlcnJvciA9IE5VTEw7CisJICB1c2NoYXIgKiBzID0gc3RyaW5nX2RvbWFpbl91
dGY4X3RvX2FsYWJlbChzdWIsICZlcnJvcik7CisJICBpZiAoZXJyb3IpCisJICAgIHsKKwkgICAg
ZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoCisJICAgICAgImVycm9yIGNv
bnZlcnRpbmcgdXRmOCAoJXMpIHRvIGFsYWJlbDogJXMiLAorCSAgICAgIHN0cmluZ19wcmludGlu
ZyhzdWIpLCBlcnJvcik7CisJICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKKwkgICAgfQorCSAgeWll
bGQgPSBzdHJpbmdfY2F0KHlpZWxkLCBzKTsKKwkgIGJyZWFrOwogCSAgfQotCXlpZWxkID0gc3Ry
aW5nX2NhdCh5aWVsZCwgcyk7Ci0gICAgICAgIGNvbnRpbnVlOwotCX0KIAotICAgICAgY2FzZSBF
T1BfVVRGOF9ET01BSU5fRlJPTV9BTEFCRUw6Ci0JewotICAgICAgICB1c2NoYXIgKiBlcnJvciA9
IE5VTEw7Ci0JdXNjaGFyICogcyA9IHN0cmluZ19kb21haW5fYWxhYmVsX3RvX3V0Zjgoc3ViLCAm
ZXJyb3IpOwotCWlmIChlcnJvcikKKwljYXNlIEVPUF9VVEY4X0RPTUFJTl9GUk9NX0FMQUJFTDoK
IAkgIHsKLQkgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKAotCSAgICAi
ZXJyb3IgY29udmVydGluZyBhbGFiZWwgKCVzKSB0byB1dGY4OiAlcyIsCi0JICAgIHN0cmluZ19w
cmludGluZyhzdWIpLCBlcnJvcik7Ci0JICBnb3RvIEVYUEFORF9GQUlMRUQ7CisJICB1c2NoYXIg
KiBlcnJvciA9IE5VTEw7CisJICB1c2NoYXIgKiBzID0gc3RyaW5nX2RvbWFpbl9hbGFiZWxfdG9f
dXRmOChzdWIsICZlcnJvcik7CisJICBpZiAoZXJyb3IpCisJICAgIHsKKwkgICAgZXhwYW5kX3N0
cmluZ19tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoCisJICAgICAgImVycm9yIGNvbnZlcnRpbmcg
YWxhYmVsICglcykgdG8gdXRmODogJXMiLAorCSAgICAgIHN0cmluZ19wcmludGluZyhzdWIpLCBl
cnJvcik7CisJICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKKwkgICAgfQorCSAgeWllbGQgPSBzdHJp
bmdfY2F0KHlpZWxkLCBzKTsKKwkgIGJyZWFrOwogCSAgfQotCXlpZWxkID0gc3RyaW5nX2NhdCh5
aWVsZCwgcyk7Ci0gICAgICAgIGNvbnRpbnVlOwotCX0KIAotICAgICAgY2FzZSBFT1BfVVRGOF9M
T0NBTFBBUlRfVE9fQUxBQkVMOgotCXsKLSAgICAgICAgdXNjaGFyICogZXJyb3IgPSBOVUxMOwot
CXVzY2hhciAqIHMgPSBzdHJpbmdfbG9jYWxwYXJ0X3V0ZjhfdG9fYWxhYmVsKHN1YiwgJmVycm9y
KTsKLQlpZiAoZXJyb3IpCisJY2FzZSBFT1BfVVRGOF9MT0NBTFBBUlRfVE9fQUxBQkVMOgogCSAg
ewotCSAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoCi0JICAgICJlcnJv
ciBjb252ZXJ0aW5nIHV0ZjggKCVzKSB0byBhbGFiZWw6ICVzIiwKLQkgICAgc3RyaW5nX3ByaW50
aW5nKHN1YiksIGVycm9yKTsKLQkgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKKwkgIHVzY2hhciAqIGVy
cm9yID0gTlVMTDsKKwkgIHVzY2hhciAqIHMgPSBzdHJpbmdfbG9jYWxwYXJ0X3V0ZjhfdG9fYWxh
YmVsKHN1YiwgJmVycm9yKTsKKwkgIGlmIChlcnJvcikKKwkgICAgeworCSAgICBleHBhbmRfc3Ry
aW5nX21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigKKwkgICAgICAiZXJyb3IgY29udmVydGluZyB1
dGY4ICglcykgdG8gYWxhYmVsOiAlcyIsCisJICAgICAgc3RyaW5nX3ByaW50aW5nKHN1YiksIGVy
cm9yKTsKKwkgICAgZ290byBFWFBBTkRfRkFJTEVEOworCSAgICB9CisJICB5aWVsZCA9IHN0cmlu
Z19jYXQoeWllbGQsIHMpOworCSAgREVCVUcoRF9leHBhbmQpIGRlYnVnX3ByaW50Zl9pbmRlbnQo
InlpZWxkOiAnJXMnXG4iLCB5aWVsZC0+cyk7CisJICBicmVhazsKIAkgIH0KLQl5aWVsZCA9IHN0
cmluZ19jYXQoeWllbGQsIHMpOwotCURFQlVHKERfZXhwYW5kKSBkZWJ1Z19wcmludGZfaW5kZW50
KCJ5aWVsZDogJyVzJ1xuIiwgeWllbGQtPnMpOwotICAgICAgICBjb250aW51ZTsKLQl9CiAKLSAg
ICAgIGNhc2UgRU9QX1VURjhfTE9DQUxQQVJUX0ZST01fQUxBQkVMOgotCXsKLSAgICAgICAgdXNj
aGFyICogZXJyb3IgPSBOVUxMOwotCXVzY2hhciAqIHMgPSBzdHJpbmdfbG9jYWxwYXJ0X2FsYWJl
bF90b191dGY4KHN1YiwgJmVycm9yKTsKLQlpZiAoZXJyb3IpCisJY2FzZSBFT1BfVVRGOF9MT0NB
TFBBUlRfRlJPTV9BTEFCRUw6CiAJICB7Ci0JICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBzdHJp
bmdfc3ByaW50ZigKLQkgICAgImVycm9yIGNvbnZlcnRpbmcgYWxhYmVsICglcykgdG8gdXRmODog
JXMiLAotCSAgICBzdHJpbmdfcHJpbnRpbmcoc3ViKSwgZXJyb3IpOwotCSAgZ290byBFWFBBTkRf
RkFJTEVEOworCSAgdXNjaGFyICogZXJyb3IgPSBOVUxMOworCSAgdXNjaGFyICogcyA9IHN0cmlu
Z19sb2NhbHBhcnRfYWxhYmVsX3RvX3V0Zjgoc3ViLCAmZXJyb3IpOworCSAgaWYgKGVycm9yKQor
CSAgICB7CisJICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKAorCSAg
ICAgICJlcnJvciBjb252ZXJ0aW5nIGFsYWJlbCAoJXMpIHRvIHV0Zjg6ICVzIiwKKwkgICAgICBz
dHJpbmdfcHJpbnRpbmcoc3ViKSwgZXJyb3IpOworCSAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CisJ
ICAgIH0KKwkgIHlpZWxkID0gc3RyaW5nX2NhdCh5aWVsZCwgcyk7CisJICBicmVhazsKIAkgIH0K
LQl5aWVsZCA9IHN0cmluZ19jYXQoeWllbGQsIHMpOwotICAgICAgICBjb250aW51ZTsKLQl9CiAj
ZW5kaWYJLyogRVhQRVJJTUVOVEFMX0lOVEVSTkFUSU9OQUwgKi8KIAotICAgICAgLyogZXNjYXBl
IHR1cm5zIGFsbCBub24tcHJpbnRpbmcgY2hhcmFjdGVycyBpbnRvIGVzY2FwZSBzZXF1ZW5jZXMu
ICovCisJLyogZXNjYXBlIHR1cm5zIGFsbCBub24tcHJpbnRpbmcgY2hhcmFjdGVycyBpbnRvIGVz
Y2FwZSBzZXF1ZW5jZXMuICovCiAKLSAgICAgIGNhc2UgRU9QX0VTQ0FQRToKLSAgICAgICAgewot
ICAgICAgICBjb25zdCB1c2NoYXIgKiB0ID0gc3RyaW5nX3ByaW50aW5nKHN1Yik7Ci0gICAgICAg
IHlpZWxkID0gc3RyaW5nX2NhdCh5aWVsZCwgdCk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9CisJY2FzZSBFT1BfRVNDQVBFOgorCSAgeworCSAgY29uc3QgdXNjaGFyICogdCA9IHN0cmlu
Z19wcmludGluZyhzdWIpOworCSAgeWllbGQgPSBzdHJpbmdfY2F0KHlpZWxkLCB0KTsKKwkgIGJy
ZWFrOworCSAgfQogCi0gICAgICBjYXNlIEVPUF9FU0NBUEU4QklUOgotCXsKLQl1c2NoYXIgYzsK
KwljYXNlIEVPUF9FU0NBUEU4QklUOgorCSAgeworCSAgdXNjaGFyIGM7CiAKLQlmb3IgKGNvbnN0
IHVzY2hhciAqIHMgPSBzdWI7IChjID0gKnMpOyBzKyspCi0JICB5aWVsZCA9IGMgPCAxMjcgJiYg
YyAhPSAnXFwnCi0JICAgID8gc3RyaW5nX2NhdG4oeWllbGQsIHMsIDEpCi0JICAgIDogc3RyaW5n
X2ZtdF9hcHBlbmQoeWllbGQsICJcXCUwM28iLCBjKTsKLQljb250aW51ZTsKLQl9CisJICBmb3Ig
KGNvbnN0IHVzY2hhciAqIHMgPSBzdWI7IChjID0gKnMpOyBzKyspCisJICAgIHlpZWxkID0gYyA8
IDEyNyAmJiBjICE9ICdcXCcKKwkgICAgICA/IHN0cmluZ19jYXRuKHlpZWxkLCBzLCAxKQorCSAg
ICAgIDogc3RyaW5nX2ZtdF9hcHBlbmQoeWllbGQsICJcXCUwM28iLCBjKTsKKwkgIGJyZWFrOwor
CSAgfQogCi0gICAgICAvKiBIYW5kbGUgbnVtZXJpYyBleHByZXNzaW9uIGV2YWx1YXRpb24gKi8K
KwkvKiBIYW5kbGUgbnVtZXJpYyBleHByZXNzaW9uIGV2YWx1YXRpb24gKi8KIAotICAgICAgY2Fz
ZSBFT1BfRVZBTDoKLSAgICAgIGNhc2UgRU9QX0VWQUwxMDoKLSAgICAgICAgewotICAgICAgICB1
c2NoYXIgKnNhdmVfc3ViID0gc3ViOwotICAgICAgICB1c2NoYXIgKmVycm9yID0gTlVMTDsKLSAg
ICAgICAgaW50X2V4aW1hcml0aF90IG4gPSBldmFsX2V4cHIoJnN1YiwgKGMgPT0gRU9QX0VWQUwx
MCksICZlcnJvciwgRkFMU0UpOwotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgewotICAg
ICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJlcnJvciBpbiBl
eHByZXNzaW9uICIKLSAgICAgICAgICAgICJldmFsdWF0aW9uOiAlcyAoYWZ0ZXIgcHJvY2Vzc2lu
ZyBcIiUuKnNcIikiLCBlcnJvciwKLQkgICAgKGludCkoc3ViLXNhdmVfc3ViKSwgc2F2ZV9zdWIp
OwotICAgICAgICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKLSAgICAgICAgICB9Ci0gICAgICAgIHlp
ZWxkID0gc3RyaW5nX2ZtdF9hcHBlbmQoeWllbGQsIFBSX0VYSU1fQVJJVEgsIG4pOwotICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQorCWNhc2UgRU9QX0VWQUw6CisJY2FzZSBFT1BfRVZBTDEw
OgorCSAgeworCSAgdXNjaGFyICpzYXZlX3N1YiA9IHN1YjsKKwkgIHVzY2hhciAqZXJyb3IgPSBO
VUxMOworCSAgaW50X2V4aW1hcml0aF90IG4gPSBldmFsX2V4cHIoJnN1YiwgKGMgPT0gRU9QX0VW
QUwxMCksICZlcnJvciwgRkFMU0UpOworCSAgaWYgKGVycm9yKQorCSAgICB7CisJICAgIGV4cGFu
ZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJlcnJvciBpbiBleHByZXNzaW9uICIK
KwkgICAgICAiZXZhbHVhdGlvbjogJXMgKGFmdGVyIHByb2Nlc3NpbmcgXCIlLipzXCIpIiwgZXJy
b3IsCisJICAgICAgKGludCkoc3ViLXNhdmVfc3ViKSwgc2F2ZV9zdWIpOworCSAgICBnb3RvIEVY
UEFORF9GQUlMRUQ7CisJICAgIH0KKwkgIHlpZWxkID0gc3RyaW5nX2ZtdF9hcHBlbmQoeWllbGQs
IFBSX0VYSU1fQVJJVEgsIG4pOworCSAgYnJlYWs7CisJICB9CiAKLSAgICAgIC8qIEhhbmRsZSB0
aW1lIHBlcmlvZCBmb3JtYXR0aW5nICovCisJLyogSGFuZGxlIHRpbWUgcGVyaW9kIGZvcm1hdHRp
bmcgKi8KIAotICAgICAgY2FzZSBFT1BfVElNRV9FVkFMOgotICAgICAgICB7Ci0gICAgICAgIGlu
dCBuID0gcmVhZGNvbmZfcmVhZHRpbWUoc3ViLCAwLCBGQUxTRSk7Ci0gICAgICAgIGlmIChuIDwg
MCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gc3RyaW5n
X3NwcmludGYoInN0cmluZyBcIiVzXCIgaXMgbm90IGFuICIKLSAgICAgICAgICAgICJFeGltIHRp
bWUgaW50ZXJ2YWwgaW4gXCIlc1wiIG9wZXJhdG9yIiwgc3ViLCBuYW1lKTsKLSAgICAgICAgICBn
b3RvIEVYUEFORF9GQUlMRUQ7Ci0gICAgICAgICAgfQotICAgICAgICB5aWVsZCA9IHN0cmluZ19m
bXRfYXBwZW5kKHlpZWxkLCAiJWQiLCBuKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
KwljYXNlIEVPUF9USU1FX0VWQUw6CisJICB7CisJICBpbnQgbiA9IHJlYWRjb25mX3JlYWR0aW1l
KHN1YiwgMCwgRkFMU0UpOworCSAgaWYgKG4gPCAwKQorCSAgICB7CisJICAgIGV4cGFuZF9zdHJp
bmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJzdHJpbmcgXCIlc1wiIGlzIG5vdCBhbiAiCisJ
ICAgICAgIkV4aW0gdGltZSBpbnRlcnZhbCBpbiBcIiVzXCIgb3BlcmF0b3IiLCBzdWIsIG5hbWUp
OworCSAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CisJICAgIH0KKwkgIHlpZWxkID0gc3RyaW5nX2Zt
dF9hcHBlbmQoeWllbGQsICIlZCIsIG4pOworCSAgYnJlYWs7CisJICB9CiAKLSAgICAgIGNhc2Ug
RU9QX1RJTUVfSU5URVJWQUw6Ci0gICAgICAgIHsKLSAgICAgICAgaW50IG47Ci0gICAgICAgIHVz
Y2hhciAqdCA9IHJlYWRfbnVtYmVyKCZuLCBzdWIpOwotICAgICAgICBpZiAoKnQgIT0gMCkgLyog
Tm90IEEgTnVtYmVyKi8KLSAgICAgICAgICB7Ci0gICAgICAgICAgZXhwYW5kX3N0cmluZ19tZXNz
YWdlID0gc3RyaW5nX3NwcmludGYoInN0cmluZyBcIiVzXCIgaXMgbm90IGEgIgotICAgICAgICAg
ICAgInBvc2l0aXZlIG51bWJlciBpbiBcIiVzXCIgb3BlcmF0b3IiLCBzdWIsIG5hbWUpOwotICAg
ICAgICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKLSAgICAgICAgICB9Ci0gICAgICAgIHQgPSByZWFk
Y29uZl9wcmludHRpbWUobik7Ci0gICAgICAgIHlpZWxkID0gc3RyaW5nX2NhdCh5aWVsZCwgdCk7
Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisJY2FzZSBFT1BfVElNRV9JTlRFUlZBTDoK
KwkgIHsKKwkgIGludCBuOworCSAgdXNjaGFyICp0ID0gcmVhZF9udW1iZXIoJm4sIHN1Yik7CisJ
ICBpZiAoKnQgIT0gMCkgLyogTm90IEEgTnVtYmVyKi8KKwkgICAgeworCSAgICBleHBhbmRfc3Ry
aW5nX21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50Zigic3RyaW5nIFwiJXNcIiBpcyBub3QgYSAiCisJ
ICAgICAgInBvc2l0aXZlIG51bWJlciBpbiBcIiVzXCIgb3BlcmF0b3IiLCBzdWIsIG5hbWUpOwor
CSAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CisJICAgIH0KKwkgIHQgPSByZWFkY29uZl9wcmludHRp
bWUobik7CisJICB5aWVsZCA9IHN0cmluZ19jYXQoeWllbGQsIHQpOworCSAgYnJlYWs7CisJICB9
CiAKLSAgICAgIC8qIENvbnZlcnQgc3RyaW5nIHRvIGJhc2U2NCBlbmNvZGluZyAqLworCS8qIENv
bnZlcnQgc3RyaW5nIHRvIGJhc2U2NCBlbmNvZGluZyAqLwogCi0gICAgICBjYXNlIEVPUF9TVFIy
QjY0OgotICAgICAgY2FzZSBFT1BfQkFTRTY0OgotCXsKKwljYXNlIEVPUF9TVFIyQjY0OgorCWNh
c2UgRU9QX0JBU0U2NDoKKwkgIHsKICNpZm5kZWYgRElTQUJMRV9UTFMKLQl1c2NoYXIgKiBzID0g
dnAgJiYgKih2b2lkICoqKXZwLT52YWx1ZQotCSAgPyB0bHNfY2VydF9kZXJfYjY0KCoodm9pZCAq
Kil2cC0+dmFsdWUpCi0JICA6IGI2NGVuY29kZShDVVMgc3ViLCBVc3RybGVuKHN1YikpOworCSAg
dXNjaGFyICogcyA9IHZwICYmICoodm9pZCAqKil2cC0+dmFsdWUKKwkgICAgPyB0bHNfY2VydF9k
ZXJfYjY0KCoodm9pZCAqKil2cC0+dmFsdWUpCisJICAgIDogYjY0ZW5jb2RlKENVUyBzdWIsIFVz
dHJsZW4oc3ViKSk7CiAjZWxzZQotCXVzY2hhciAqIHMgPSBiNjRlbmNvZGUoQ1VTIHN1YiwgVXN0
cmxlbihzdWIpKTsKKwkgIHVzY2hhciAqIHMgPSBiNjRlbmNvZGUoQ1VTIHN1YiwgVXN0cmxlbihz
dWIpKTsKICNlbmRpZgotCXlpZWxkID0gc3RyaW5nX2NhdCh5aWVsZCwgcyk7Ci0JY29udGludWU7
Ci0JfQorCSAgeWllbGQgPSBzdHJpbmdfY2F0KHlpZWxkLCBzKTsKKwkgIGJyZWFrOworCSAgfQog
Ci0gICAgICBjYXNlIEVPUF9CQVNFNjREOgotICAgICAgICB7Ci0gICAgICAgIHVzY2hhciAqIHM7
Ci0gICAgICAgIGludCBsZW4gPSBiNjRkZWNvZGUoc3ViLCAmcyk7Ci0JaWYgKGxlbiA8IDApCi0g
ICAgICAgICAgewotICAgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJp
bnRmKCJzdHJpbmcgXCIlc1wiIGlzIG5vdCAiCi0gICAgICAgICAgICAid2VsbC1mb3JtZWQgZm9y
IFwiJXNcIiBvcGVyYXRvciIsIHN1YiwgbmFtZSk7Ci0gICAgICAgICAgZ290byBFWFBBTkRfRkFJ
TEVEOwotICAgICAgICAgIH0KLSAgICAgICAgeWllbGQgPSBzdHJpbmdfY2F0KHlpZWxkLCBzKTsK
LSAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKwljYXNlIEVPUF9CQVNFNjREOgorCSAgewor
CSAgdXNjaGFyICogczsKKwkgIGludCBsZW4gPSBiNjRkZWNvZGUoc3ViLCAmcyk7CisJICBpZiAo
bGVuIDwgMCkKKwkgICAgeworCSAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBzdHJpbmdfc3By
aW50Zigic3RyaW5nIFwiJXNcIiBpcyBub3QgIgorCSAgICAgICJ3ZWxsLWZvcm1lZCBmb3IgXCIl
c1wiIG9wZXJhdG9yIiwgc3ViLCBuYW1lKTsKKwkgICAgZ290byBFWFBBTkRfRkFJTEVEOworCSAg
ICB9CisJICB5aWVsZCA9IHN0cmluZ19jYXQoeWllbGQsIHMpOworCSAgYnJlYWs7CisJICB9CiAK
LSAgICAgIC8qIHN0cmxlbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAqLworCS8q
IHN0cmxlbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAqLwogCi0gICAgICBjYXNl
IEVPUF9TVFJMRU46Ci0gICAgICAgIHlpZWxkID0gc3RyaW5nX2ZtdF9hcHBlbmQoeWllbGQsICIl
ZCIsIFVzdHJsZW4oc3ViKSk7Ci0gICAgICAgIGNvbnRpbnVlOworCWNhc2UgRU9QX1NUUkxFTjoK
KwkgIHlpZWxkID0gc3RyaW5nX2ZtdF9hcHBlbmQoeWllbGQsICIlZCIsIFVzdHJsZW4oc3ViKSk7
CisJICBicmVhazsKIAotICAgICAgLyogbGVuZ3RoX24gb3IgbF9uIHRha2VzIGp1c3QgdGhlIGZp
cnN0IG4gY2hhcmFjdGVycyBvciB0aGUgd2hvbGUgc3RyaW5nLAotICAgICAgd2hpY2hldmVyIGlz
IHRoZSBzaG9ydGVyOworCS8qIGxlbmd0aF9uIG9yIGxfbiB0YWtlcyBqdXN0IHRoZSBmaXJzdCBu
IGNoYXJhY3RlcnMgb3IgdGhlIHdob2xlIHN0cmluZywKKwl3aGljaGV2ZXIgaXMgdGhlIHNob3J0
ZXI7CiAKLSAgICAgIHN1YnN0cl9tX24sIGFuZCBzX21fbiB0YWtlIG4gY2hhcmFjdGVycyBmcm9t
IG9mZnNldCBtOyBuZWdhdGl2ZSBtIHRha2UKLSAgICAgIGZyb20gdGhlIGVuZDsgbF9uIGlzIHN5
bm9ueW1vdXMgd2l0aCBzXzBfbi4gSWYgbiBpcyBvbWl0dGVkIGluIHN1YnN0ciBpdAotICAgICAg
dGFrZXMgdGhlIHJlc3QsIGVpdGhlciB0byB0aGUgcmlnaHQgb3IgdG8gdGhlIGxlZnQuCi0KLSAg
ICAgIGhhc2hfbiBvciBoX24gbWFrZXMgYSBoYXNoIG9mIGxlbmd0aCBuIGZyb20gdGhlIHN0cmlu
ZywgeWllbGRpbmcgbgotICAgICAgY2hhcmFjdGVycyBmcm9tIHRoZSBzZXQgYS16OyBoYXNoX25f
bSBtYWtlcyBhIGhhc2ggb2YgbGVuZ3RoIG4sIGJ1dAotICAgICAgdXNlcyBtIGNoYXJhY3RlcnMg
ZnJvbSB0aGUgc2V0IGEtekEtWjAtOS4KLQotICAgICAgbmhhc2hfbiByZXR1cm5zIGEgc2luZ2xl
IG51bWJlciBiZXR3ZWVuIDAgYW5kIG4tMSAoaW4gdGV4dCBmb3JtKSwgd2hpbGUKLSAgICAgIG5o
YXNoX25fbSByZXR1cm5zIGEgZGl2L21vZCBoYXNoIGFzIHR3byBudW1iZXJzICJhL2IiLiBUaGUg
Zmlyc3QgbGllcwotICAgICAgYmV0d2VlbiAwIGFuZCBuLTEgYW5kIHRoZSBzZWNvbmQgYmV0d2Vl
biAwIGFuZCBtLTEuICovCi0KLSAgICAgIGNhc2UgRU9QX0xFTkdUSDoKLSAgICAgIGNhc2UgRU9Q
X0w6Ci0gICAgICBjYXNlIEVPUF9TVUJTVFI6Ci0gICAgICBjYXNlIEVPUF9TOgotICAgICAgY2Fz
ZSBFT1BfSEFTSDoKLSAgICAgIGNhc2UgRU9QX0g6Ci0gICAgICBjYXNlIEVPUF9OSEFTSDoKLSAg
ICAgIGNhc2UgRU9QX05IOgotICAgICAgICB7Ci0gICAgICAgIGludCBzaWduID0gMTsKLSAgICAg
ICAgaW50IHZhbHVlMSA9IDA7Ci0gICAgICAgIGludCB2YWx1ZTIgPSAtMTsKLSAgICAgICAgaW50
ICpwbjsKLSAgICAgICAgaW50IGxlbjsKLSAgICAgICAgdXNjaGFyICpyZXQ7CisJc3Vic3RyX21f
biwgYW5kIHNfbV9uIHRha2UgbiBjaGFyYWN0ZXJzIGZyb20gb2Zmc2V0IG07IG5lZ2F0aXZlIG0g
dGFrZQorCWZyb20gdGhlIGVuZDsgbF9uIGlzIHN5bm9ueW1vdXMgd2l0aCBzXzBfbi4gSWYgbiBp
cyBvbWl0dGVkIGluIHN1YnN0ciBpdAorCXRha2VzIHRoZSByZXN0LCBlaXRoZXIgdG8gdGhlIHJp
Z2h0IG9yIHRvIHRoZSBsZWZ0LgorCisJaGFzaF9uIG9yIGhfbiBtYWtlcyBhIGhhc2ggb2YgbGVu
Z3RoIG4gZnJvbSB0aGUgc3RyaW5nLCB5aWVsZGluZyBuCisJY2hhcmFjdGVycyBmcm9tIHRoZSBz
ZXQgYS16OyBoYXNoX25fbSBtYWtlcyBhIGhhc2ggb2YgbGVuZ3RoIG4sIGJ1dAorCXVzZXMgbSBj
aGFyYWN0ZXJzIGZyb20gdGhlIHNldCBhLXpBLVowLTkuCisKKwluaGFzaF9uIHJldHVybnMgYSBz
aW5nbGUgbnVtYmVyIGJldHdlZW4gMCBhbmQgbi0xIChpbiB0ZXh0IGZvcm0pLCB3aGlsZQorCW5o
YXNoX25fbSByZXR1cm5zIGEgZGl2L21vZCBoYXNoIGFzIHR3byBudW1iZXJzICJhL2IiLiBUaGUg
Zmlyc3QgbGllcworCWJldHdlZW4gMCBhbmQgbi0xIGFuZCB0aGUgc2Vjb25kIGJldHdlZW4gMCBh
bmQgbS0xLiAqLworCisJY2FzZSBFT1BfTEVOR1RIOgorCWNhc2UgRU9QX0w6CisJY2FzZSBFT1Bf
U1VCU1RSOgorCWNhc2UgRU9QX1M6CisJY2FzZSBFT1BfSEFTSDoKKwljYXNlIEVPUF9IOgorCWNh
c2UgRU9QX05IQVNIOgorCWNhc2UgRU9QX05IOgorCSAgeworCSAgaW50IHNpZ24gPSAxOworCSAg
aW50IHZhbHVlMSA9IDA7CisJICBpbnQgdmFsdWUyID0gLTE7CisJICBpbnQgKnBuOworCSAgaW50
IGxlbjsKKwkgIHVzY2hhciAqcmV0OwogCi0gICAgICAgIGlmICghYXJnKQotICAgICAgICAgIHsK
LSAgICAgICAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigibWlzc2lu
ZyB2YWx1ZXMgYWZ0ZXIgJXMiLAotICAgICAgICAgICAgbmFtZSk7Ci0gICAgICAgICAgZ290byBF
WFBBTkRfRkFJTEVEOwotICAgICAgICAgIH0KKwkgIGlmICghYXJnKQorCSAgICB7CisJICAgIGV4
cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJtaXNzaW5nIHZhbHVlcyBhZnRl
ciAlcyIsCisJICAgICAgbmFtZSk7CisJICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKKwkgICAgfQog
Ci0gICAgICAgIC8qICJsZW5ndGgiIGhhcyBvbmx5IG9uZSBhcmd1bWVudCwgZWZmZWN0aXZlbHkg
YmVpbmcgc3lub255bW91cyB3aXRoCi0gICAgICAgIHN1YnN0cl8wX24uICovCisJICAvKiAibGVu
Z3RoIiBoYXMgb25seSBvbmUgYXJndW1lbnQsIGVmZmVjdGl2ZWx5IGJlaW5nIHN5bm9ueW1vdXMg
d2l0aAorCSAgc3Vic3RyXzBfbi4gKi8KIAotICAgICAgICBpZiAoYyA9PSBFT1BfTEVOR1RIIHx8
IGMgPT0gRU9QX0wpCi0gICAgICAgICAgewotICAgICAgICAgIHBuID0gJnZhbHVlMjsKLSAgICAg
ICAgICB2YWx1ZTIgPSAwOwotICAgICAgICAgIH0KKwkgIGlmIChjID09IEVPUF9MRU5HVEggfHwg
YyA9PSBFT1BfTCkKKwkgICAgeworCSAgICBwbiA9ICZ2YWx1ZTI7CisJICAgIHZhbHVlMiA9IDA7
CisJICAgIH0KIAotICAgICAgICAvKiBUaGUgb3RoZXJzIGhhdmUgb25lIG9yIHR3byBhcmd1bWVu
dHM7IGZvciAic3Vic3RyIiB0aGUgZmlyc3QgbWF5IGJlCi0gICAgICAgIG5lZ2F0aXZlLiBUaGUg
c2Vjb25kIGJlaW5nIG5lZ2F0aXZlIG1lYW5zICJub3Qgc3VwcGxpZWQiLiAqLworCSAgLyogVGhl
IG90aGVycyBoYXZlIG9uZSBvciB0d28gYXJndW1lbnRzOyBmb3IgInN1YnN0ciIgdGhlIGZpcnN0
IG1heSBiZQorCSAgbmVnYXRpdmUuIFRoZSBzZWNvbmQgYmVpbmcgbmVnYXRpdmUgbWVhbnMgIm5v
dCBzdXBwbGllZCIuICovCiAKLSAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICBw
biA9ICZ2YWx1ZTE7Ci0gICAgICAgICAgaWYgKG5hbWVbMF0gPT0gJ3MnICYmICphcmcgPT0gJy0n
KSB7IHNpZ24gPSAtMTsgYXJnKys7IH0KLSAgICAgICAgICB9CisJICBlbHNlCisJICAgIHsKKwkg
ICAgcG4gPSAmdmFsdWUxOworCSAgICBpZiAobmFtZVswXSA9PSAncycgJiYgKmFyZyA9PSAnLScp
IHsgc2lnbiA9IC0xOyBhcmcrKzsgfQorCSAgICB9CiAKLSAgICAgICAgLyogUmVhZCB1cCB0byB0
d28gbnVtYmVycywgc2VwYXJhdGVkIGJ5IHVuZGVyc2NvcmVzICovCisJICAvKiBSZWFkIHVwIHRv
IHR3byBudW1iZXJzLCBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZXMgKi8KIAotICAgICAgICByZXQg
PSBhcmc7Ci0gICAgICAgIHdoaWxlICgqYXJnICE9IDApCi0gICAgICAgICAgewotICAgICAgICAg
IGlmIChhcmcgIT0gcmV0ICYmICphcmcgPT0gJ18nICYmIHBuID09ICZ2YWx1ZTEpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICBwbiA9ICZ2YWx1ZTI7Ci0gICAgICAgICAgICB2YWx1ZTIgPSAw
OwotICAgICAgICAgICAgaWYgKGFyZ1sxXSAhPSAwKSBhcmcrKzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICBlbHNlIGlmICghaXNkaWdpdCgqYXJnKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9Ci0gICAgICAgICAgICAgIHN0cmluZ19zcHJpbnRm
KCJub24tZGlnaXQgYWZ0ZXIgdW5kZXJzY29yZSBpbiBcIiVzXCIiLCBuYW1lKTsKLSAgICAgICAg
ICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlICpw
biA9ICgqcG4pKjEwICsgKmFyZysrIC0gJzAnOwotICAgICAgICAgIH0KLSAgICAgICAgdmFsdWUx
ICo9IHNpZ247CisJICByZXQgPSBhcmc7CisJICB3aGlsZSAoKmFyZyAhPSAwKQorCSAgICB7CisJ
ICAgIGlmIChhcmcgIT0gcmV0ICYmICphcmcgPT0gJ18nICYmIHBuID09ICZ2YWx1ZTEpCisJICAg
ICAgeworCSAgICAgIHBuID0gJnZhbHVlMjsKKwkgICAgICB2YWx1ZTIgPSAwOworCSAgICAgIGlm
IChhcmdbMV0gIT0gMCkgYXJnKys7CisJICAgICAgfQorCSAgICBlbHNlIGlmICghaXNkaWdpdCgq
YXJnKSkKKwkgICAgICB7CisJICAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0KKwkJc3RyaW5n
X3NwcmludGYoIm5vbi1kaWdpdCBhZnRlciB1bmRlcnNjb3JlIGluIFwiJXNcIiIsIG5hbWUpOwor
CSAgICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKKwkgICAgICB9CisJICAgIGVsc2UgKnBuID0gKCpw
bikqMTAgKyAqYXJnKysgLSAnMCc7CisJICAgIH0KKwkgIHZhbHVlMSAqPSBzaWduOwogCi0gICAg
ICAgIC8qIFBlcmZvcm0gdGhlIHJlcXVpcmVkIG9wZXJhdGlvbiAqLworCSAgLyogUGVyZm9ybSB0
aGUgcmVxdWlyZWQgb3BlcmF0aW9uICovCiAKLSAgICAgICAgcmV0ID0gYyA9PSBFT1BfSEFTSCB8
fCBjID09IEVPUF9ICi0JICA/IGNvbXB1dGVfaGFzaChzdWIsIHZhbHVlMSwgdmFsdWUyLCAmbGVu
KQotCSAgOiBjID09IEVPUF9OSEFTSCB8fCBjID09IEVPUF9OSAotCSAgPyBjb21wdXRlX25oYXNo
KHN1YiwgdmFsdWUxLCB2YWx1ZTIsICZsZW4pCi0JICA6IGV4dHJhY3Rfc3Vic3RyKHN1YiwgdmFs
dWUxLCB2YWx1ZTIsICZsZW4pOwotICAgICAgICBpZiAoIXJldCkgZ290byBFWFBBTkRfRkFJTEVE
OworCSAgcmV0ID0gYyA9PSBFT1BfSEFTSCB8fCBjID09IEVPUF9ICisJICAgID8gY29tcHV0ZV9o
YXNoKHN1YiwgdmFsdWUxLCB2YWx1ZTIsICZsZW4pCisJICAgIDogYyA9PSBFT1BfTkhBU0ggfHwg
YyA9PSBFT1BfTkgKKwkgICAgPyBjb21wdXRlX25oYXNoKHN1YiwgdmFsdWUxLCB2YWx1ZTIsICZs
ZW4pCisJICAgIDogZXh0cmFjdF9zdWJzdHIoc3ViLCB2YWx1ZTEsIHZhbHVlMiwgJmxlbik7CisJ
ICBpZiAoIXJldCkgZ290byBFWFBBTkRfRkFJTEVEOwogCi0gICAgICAgIHlpZWxkID0gc3RyaW5n
X2NhdG4oeWllbGQsIHJldCwgbGVuKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKwkg
IHlpZWxkID0gc3RyaW5nX2NhdG4oeWllbGQsIHJldCwgbGVuKTsKKwkgIGJyZWFrOworCSAgfQog
Ci0gICAgICAvKiBTdGF0IGEgcGF0aCAqLworCS8qIFN0YXQgYSBwYXRoICovCiAKLSAgICAgIGNh
c2UgRU9QX1NUQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgdXNjaGFyIHNtb2RlWzEyXTsKLSAgICAg
ICAgdXNjaGFyICoqbW9kZXRhYmxlWzNdOwotICAgICAgICBtb2RlX3QgbW9kZTsKLSAgICAgICAg
c3RydWN0IHN0YXQgc3Q7CisJY2FzZSBFT1BfU1RBVDoKKwkgIHsKKwkgIHVzY2hhciBzbW9kZVsx
Ml07CisJICB1c2NoYXIgKiptb2RldGFibGVbM107CisJICBtb2RlX3QgbW9kZTsKKwkgIHN0cnVj
dCBzdGF0IHN0OwogCi0gICAgICAgIGlmIChleHBhbmRfZm9yYmlkICYgUkRPX0VYSVNUUykKLSAg
ICAgICAgICB7Ci0gICAgICAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gVVMiVXNlIG9mIHRo
ZSBzdGF0KCkgZXhwYW5zaW9uIGlzIG5vdCBwZXJtaXR0ZWQiOwotICAgICAgICAgIGdvdG8gRVhQ
QU5EX0ZBSUxFRDsKLSAgICAgICAgICB9CisJICBpZiAoZXhwYW5kX2ZvcmJpZCAmIFJET19FWElT
VFMpCisJICAgIHsKKwkgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gVVMiVXNlIG9mIHRoZSBz
dGF0KCkgZXhwYW5zaW9uIGlzIG5vdCBwZXJtaXR0ZWQiOworCSAgICBnb3RvIEVYUEFORF9GQUlM
RUQ7CisJICAgIH0KIAotICAgICAgICBpZiAoc3RhdChDUyBzdWIsICZzdCkgPCAwKQotICAgICAg
ICAgIHsKLSAgICAgICAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UgPSBzdHJpbmdfc3ByaW50Zigi
c3RhdCglcykgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICBzdWIsIHN0cmVycm9yKGVycm5vKSk7
Ci0gICAgICAgICAgZ290byBFWFBBTkRfRkFJTEVEOwotICAgICAgICAgIH0KLSAgICAgICAgbW9k
ZSA9IHN0LnN0X21vZGU7Ci0gICAgICAgIHN3aXRjaCAobW9kZSAmIFNfSUZNVCkKLSAgICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBTX0lGSUZPOiBzbW9kZVswXSA9ICdwJzsgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBTX0lGQ0hSOiBzbW9kZVswXSA9ICdjJzsgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBTX0lGRElSOiBzbW9kZVswXSA9ICdkJzsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBTX0lGQkxL
OiBzbW9kZVswXSA9ICdiJzsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBTX0lGUkVHOiBzbW9kZVsw
XSA9ICctJzsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogc21vZGVbMF0gPSAnPyc7IGJyZWFr
OwotICAgICAgICAgIH0KKwkgIGlmIChzdGF0KENTIHN1YiwgJnN0KSA8IDApCisJICAgIHsKKwkg
ICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoInN0YXQoJXMpIGZhaWxl
ZDogJXMiLAorCSAgICAgIHN1Yiwgc3RyZXJyb3IoZXJybm8pKTsKKwkgICAgZ290byBFWFBBTkRf
RkFJTEVEOworCSAgICB9CisJICBtb2RlID0gc3Quc3RfbW9kZTsKKwkgIHN3aXRjaCAobW9kZSAm
IFNfSUZNVCkKKwkgICAgeworCSAgICBjYXNlIFNfSUZJRk86IHNtb2RlWzBdID0gJ3AnOyBicmVh
azsKKwkgICAgY2FzZSBTX0lGQ0hSOiBzbW9kZVswXSA9ICdjJzsgYnJlYWs7CisJICAgIGNhc2Ug
U19JRkRJUjogc21vZGVbMF0gPSAnZCc7IGJyZWFrOworCSAgICBjYXNlIFNfSUZCTEs6IHNtb2Rl
WzBdID0gJ2InOyBicmVhazsKKwkgICAgY2FzZSBTX0lGUkVHOiBzbW9kZVswXSA9ICctJzsgYnJl
YWs7CisJICAgIGRlZmF1bHQ6IHNtb2RlWzBdID0gJz8nOyBicmVhazsKKwkgICAgfQogCi0gICAg
ICAgIG1vZGV0YWJsZVswXSA9ICgobW9kZSAmIDAxMDAwKSA9PSAwKT8gbXRhYmxlX25vcm1hbCA6
IG10YWJsZV9zdGlja3k7Ci0gICAgICAgIG1vZGV0YWJsZVsxXSA9ICgobW9kZSAmIDAyMDAwKSA9
PSAwKT8gbXRhYmxlX25vcm1hbCA6IG10YWJsZV9zZXRpZDsKLSAgICAgICAgbW9kZXRhYmxlWzJd
ID0gKChtb2RlICYgMDQwMDApID09IDApPyBtdGFibGVfbm9ybWFsIDogbXRhYmxlX3NldGlkOwor
CSAgbW9kZXRhYmxlWzBdID0gKChtb2RlICYgMDEwMDApID09IDApPyBtdGFibGVfbm9ybWFsIDog
bXRhYmxlX3N0aWNreTsKKwkgIG1vZGV0YWJsZVsxXSA9ICgobW9kZSAmIDAyMDAwKSA9PSAwKT8g
bXRhYmxlX25vcm1hbCA6IG10YWJsZV9zZXRpZDsKKwkgIG1vZGV0YWJsZVsyXSA9ICgobW9kZSAm
IDA0MDAwKSA9PSAwKT8gbXRhYmxlX25vcm1hbCA6IG10YWJsZV9zZXRpZDsKIAotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgbWVtY3B5
KENTKHNtb2RlICsgNyAtIGkqMyksIENTKG1vZGV0YWJsZVtpXVttb2RlICYgN10pLCAzKTsKLSAg
ICAgICAgICBtb2RlID4+PSAzOwotICAgICAgICAgIH0KKwkgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgaSsrKQorCSAgICB7CisJICAgIG1lbWNweShDUyhzbW9kZSArIDcgLSBpKjMpLCBDUyhtb2Rl
dGFibGVbaV1bbW9kZSAmIDddKSwgMyk7CisJICAgIG1vZGUgPj49IDM7CisJICAgIH0KIAotICAg
ICAgICBzbW9kZVsxMF0gPSAwOwotICAgICAgICB5aWVsZCA9IHN0cmluZ19mbXRfYXBwZW5kKHlp
ZWxkLAotCSAgIm1vZGU9JTA0bG8gc21vZGU9JXMgaW5vZGU9JWxkIGRldmljZT0lbGQgbGlua3M9
JWxkICIKLSAgICAgICAgICAidWlkPSVsZCBnaWQ9JWxkIHNpemU9IiBPRkZfVF9GTVQgIiBhdGlt
ZT0lbGQgbXRpbWU9JWxkIGN0aW1lPSVsZCIsCi0gICAgICAgICAgKGxvbmcpKHN0LnN0X21vZGUg
JiAwNzc3NzcpLCBzbW9kZSwgKGxvbmcpc3Quc3RfaW5vLAotICAgICAgICAgIChsb25nKXN0LnN0
X2RldiwgKGxvbmcpc3Quc3RfbmxpbmssIChsb25nKXN0LnN0X3VpZCwKLSAgICAgICAgICAobG9u
ZylzdC5zdF9naWQsIHN0LnN0X3NpemUsIChsb25nKXN0LnN0X2F0aW1lLAotICAgICAgICAgIChs
b25nKXN0LnN0X210aW1lLCAobG9uZylzdC5zdF9jdGltZSk7Ci0gICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9CisJICBzbW9kZVsxMF0gPSAwOworCSAgeWllbGQgPSBzdHJpbmdfZm10X2FwcGVu
ZCh5aWVsZCwKKwkgICAgIm1vZGU9JTA0bG8gc21vZGU9JXMgaW5vZGU9JWxkIGRldmljZT0lbGQg
bGlua3M9JWxkICIKKwkgICAgInVpZD0lbGQgZ2lkPSVsZCBzaXplPSIgT0ZGX1RfRk1UICIgYXRp
bWU9JWxkIG10aW1lPSVsZCBjdGltZT0lbGQiLAorCSAgICAobG9uZykoc3Quc3RfbW9kZSAmIDA3
Nzc3NyksIHNtb2RlLCAobG9uZylzdC5zdF9pbm8sCisJICAgIChsb25nKXN0LnN0X2RldiwgKGxv
bmcpc3Quc3RfbmxpbmssIChsb25nKXN0LnN0X3VpZCwKKwkgICAgKGxvbmcpc3Quc3RfZ2lkLCBz
dC5zdF9zaXplLCAobG9uZylzdC5zdF9hdGltZSwKKwkgICAgKGxvbmcpc3Quc3RfbXRpbWUsIChs
b25nKXN0LnN0X2N0aW1lKTsKKwkgIGJyZWFrOworCSAgfQogCi0gICAgICAvKiB2YWd1ZWx5IHJh
bmRvbSBudW1iZXIgbGVzcyB0aGFuIE4gKi8KKwkvKiB2YWd1ZWx5IHJhbmRvbSBudW1iZXIgbGVz
cyB0aGFuIE4gKi8KIAotICAgICAgY2FzZSBFT1BfUkFORElOVDoKLSAgICAgICAgewotICAgICAg
ICBpbnRfZXhpbWFyaXRoX3QgbWF4ID0gZXhwYW5kZWRfc3RyaW5nX2ludGVnZXIoc3ViLCBUUlVF
KTsKKwljYXNlIEVPUF9SQU5ESU5UOgorCSAgeworCSAgaW50X2V4aW1hcml0aF90IG1heCA9IGV4
cGFuZGVkX3N0cmluZ19pbnRlZ2VyKHN1YiwgVFJVRSk7CiAKLSAgICAgICAgaWYgKGV4cGFuZF9z
dHJpbmdfbWVzc2FnZSkKLSAgICAgICAgICBnb3RvIEVYUEFORF9GQUlMRUQ7Ci0gICAgICAgIHlp
ZWxkID0gc3RyaW5nX2ZtdF9hcHBlbmQoeWllbGQsICIlZCIsIHZhZ3VlbHlfcmFuZG9tX251bWJl
cigoaW50KW1heCkpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorCSAgaWYgKGV4cGFu
ZF9zdHJpbmdfbWVzc2FnZSkKKwkgICAgZ290byBFWFBBTkRfRkFJTEVEOworCSAgeWllbGQgPSBz
dHJpbmdfZm10X2FwcGVuZCh5aWVsZCwgIiVkIiwgdmFndWVseV9yYW5kb21fbnVtYmVyKChpbnQp
bWF4KSk7CisJICBicmVhazsKKwkgIH0KIAotICAgICAgLyogUmV2ZXJzZSBJUCwgaW5jbHVkaW5n
IElQdjYgdG8gZG90dGVkLW5pYmJsZSAqLworCS8qIFJldmVyc2UgSVAsIGluY2x1ZGluZyBJUHY2
IHRvIGRvdHRlZC1uaWJibGUgKi8KIAotICAgICAgY2FzZSBFT1BfUkVWRVJTRV9JUDoKLSAgICAg
ICAgewotICAgICAgICBpbnQgZmFtaWx5LCBtYXNrcHRyOwotICAgICAgICB1c2NoYXIgcmV2ZXJz
ZWRbMTI4XTsKKwljYXNlIEVPUF9SRVZFUlNFX0lQOgorCSAgeworCSAgaW50IGZhbWlseSwgbWFz
a3B0cjsKKwkgIHVzY2hhciByZXZlcnNlZFsxMjhdOwogCi0gICAgICAgIGZhbWlseSA9IHN0cmlu
Z19pc19pcF9hZGRyZXNzKHN1YiwgJm1hc2twdHIpOwotICAgICAgICBpZiAoZmFtaWx5ID09IDAp
Ci0gICAgICAgICAgewotICAgICAgICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IHN0cmluZ19z
cHJpbnRmKAotICAgICAgICAgICAgICAicmV2ZXJzZV9pcCgpIG5vdCBnaXZlbiBhbiBJUCBhZGRy
ZXNzIFslc10iLCBzdWIpOwotICAgICAgICAgIGdvdG8gRVhQQU5EX0ZBSUxFRDsKLSAgICAgICAg
ICB9Ci0gICAgICAgIGludmVydF9hZGRyZXNzKHJldmVyc2VkLCBzdWIpOwotICAgICAgICB5aWVs
ZCA9IHN0cmluZ19jYXQoeWllbGQsIHJldmVyc2VkKTsKLSAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KKwkgIGZhbWlseSA9IHN0cmluZ19pc19pcF9hZGRyZXNzKHN1YiwgJm1hc2twdHIpOwor
CSAgaWYgKGZhbWlseSA9PSAwKQorCSAgICB7CisJICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9
IHN0cmluZ19zcHJpbnRmKAorCQkicmV2ZXJzZV9pcCgpIG5vdCBnaXZlbiBhbiBJUCBhZGRyZXNz
IFslc10iLCBzdWIpOworCSAgICBnb3RvIEVYUEFORF9GQUlMRUQ7CisJICAgIH0KKwkgIGludmVy
dF9hZGRyZXNzKHJldmVyc2VkLCBzdWIpOworCSAgeWllbGQgPSBzdHJpbmdfY2F0KHlpZWxkLCBy
ZXZlcnNlZCk7CisJICBicmVhazsKKwkgIH0KIAotICAgICAgLyogVW5rbm93biBvcGVyYXRvciAq
LworCS8qIFVua25vd24gb3BlcmF0b3IgKi8KIAotICAgICAgZGVmYXVsdDoKLQlleHBhbmRfc3Ry
aW5nX21lc3NhZ2UgPQotCSAgc3RyaW5nX3NwcmludGYoInVua25vd24gZXhwYW5zaW9uIG9wZXJh
dG9yIFwiJXNcIiIsIG5hbWUpOwotCWdvdG8gRVhQQU5EX0ZBSUxFRDsKLSAgICAgIH0KKwlkZWZh
dWx0OgorCSAgZXhwYW5kX3N0cmluZ19tZXNzYWdlID0KKwkgICAgc3RyaW5nX3NwcmludGYoInVu
a25vd24gZXhwYW5zaW9uIG9wZXJhdG9yIFwiJXNcIiIsIG5hbWUpOworCSAgZ290byBFWFBBTkRf
RkFJTEVEOworCX0JLyogRU9QXyogc3dpdGNoICovCisKKyAgICAgICBERUJVRyhEX2V4cGFuZCkK
Kwl7CisJY29uc3QgdXNjaGFyICogcyA9IHlpZWxkLT5zICsgc3RhcnQ7CisJaW50IGkgPSB5aWVs
ZC0+cHRyIC0gc3RhcnQ7CisJQk9PTCB0YWludGVkID0gaXNfdGFpbnRlZChzKTsKKworCURFQlVH
KERfbm91dGY4KQorCSAgeworCSAgZGVidWdfcHJpbnRmX2luZGVudCgifC0tLS0tb3AtcmVzOiAl
LipzXG4iLCBpLCBzKTsKKwkgIGlmICh0YWludGVkKQorCSAgICB7CisJICAgIGRlYnVnX3ByaW50
Zl9pbmRlbnQoIiVzICAgICBcXF9fIiwgc2tpcHBpbmcgPyAifCAgICAgIiA6ICIgICAgICAiKTsK
KwkgICAgZGVidWdfcHJpbnRfdGFpbnQoeWllbGQtPnMpOworCSAgICB9CisJICB9CisJZWxzZQor
CSAgeworCSAgZGVidWdfcHJpbnRmX2luZGVudChVVEY4X1ZFUlRfUklHSFQKKwkgICAgVVRGOF9I
T1JJWiBVVEY4X0hPUklaIFVURjhfSE9SSVogVVRGOF9IT1JJWiBVVEY4X0hPUklaCisJICAgICJv
cC1yZXM6ICUuKnNcbiIsIGksIHMpOworCSAgaWYgKHRhaW50ZWQpCisJICAgIHsKKwkgICAgZGVi
dWdfcHJpbnRmX2luZGVudCgiJXMiLAorCSAgICAgIHNraXBwaW5nCisJICAgICAgPyBVVEY4X1ZF
UlQgIiAgICAgICAgICAgICAiIDogIiAgICAgICAgICAgIiBVVEY4X1VQX1JJR0hUIFVURjhfSE9S
SVogVVRGOF9IT1JJWik7CisJICAgIGRlYnVnX3ByaW50X3RhaW50KHlpZWxkLT5zKTsKKwkgICAg
fQorCSAgfQorCX0KKyAgICAgICBjb250aW51ZTsKKyAgICAgICB9CiAgICAgfQogCisgIC8qIE5v
dCBhbiBpdGVtIG9yIGFuIG9wZXJhdG9yICovCiAgIC8qIEhhbmRsZSBhIHBsYWluIG5hbWUuIElm
IHRoaXMgaXMgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBleHBhbnNpb24sIHJlbGVhc2UKICAgdGhl
IHByZS1hbGxvY2F0ZWQgYnVmZmVyLiBJZiB0aGUgcmVzdWx0IGRhdGEgaXMga25vd24gdG8gYmUg
aW4gYSBuZXcgYnVmZmVyLAogICBuZXdzaXplIHdpbGwgYmUgc2V0IHRvIHRoZSBzaXplIG9mIHRo
YXQgYnVmZmVyLCBhbmQgd2UgY2FuIGp1c3QgcG9pbnQgYXQgdGhhdApAQCAtODA3MiwxOCArODIw
OSwxOSBAQAogCQkJCQkJLyp7Ki8KICAgaWYgKCpzKysgPT0gJ30nKQogICAgIHsKKyAgICBjb25z
dCB1c2NoYXIgKiB2YWx1ZTsKICAgICBpbnQgbGVuOwogICAgIGludCBuZXdzaXplID0gMDsKICAg
ICBnc3RyaW5nICogZyA9IE5VTEw7CiAKICAgICBpZiAoIXlpZWxkKQotICAgICAgZyA9IHN0b3Jl
X2dldChzaXplb2YoZ3N0cmluZyksIEZBTFNFKTsKKyAgICAgIGcgPSBzdG9yZV9nZXQoc2l6ZW9m
KGdzdHJpbmcpLCBHRVRfVU5UQUlOVEVEKTsKICAgICBlbHNlIGlmICh5aWVsZC0+cHRyID09IDAp
CiAgICAgICB7CiAgICAgICBpZiAocmVzZXRvaykgcmVzZXRfcG9pbnQgPSBzdG9yZV9yZXNldChy
ZXNldF9wb2ludCk7CiAgICAgICB5aWVsZCA9IE5VTEw7CiAgICAgICByZXNldF9wb2ludCA9IHN0
b3JlX21hcmsoKTsKLSAgICAgIGcgPSBzdG9yZV9nZXQoc2l6ZW9mKGdzdHJpbmcpLCBGQUxTRSk7
CS8qIGFsbG9jIF9iZWZvcmVfIGNhbGxpbmcgZmluZF92YXJpYWJsZSgpICovCisgICAgICBnID0g
c3RvcmVfZ2V0KHNpemVvZihnc3RyaW5nKSwgR0VUX1VOVEFJTlRFRCk7CS8qIGFsbG9jIF9iZWZv
cmVfIGNhbGxpbmcgZmluZF92YXJpYWJsZSgpICovCiAgICAgICB9CiAgICAgaWYgKCEodmFsdWUg
PSBmaW5kX3ZhcmlhYmxlKG5hbWUsIEZBTFNFLCBza2lwcGluZywgJm5ld3NpemUpKSkKICAgICAg
IHsKQEAgLTgwOTgsNyArODIzNiw3IEBACiAgICAgICB5aWVsZCA9IGc7CiAgICAgICB5aWVsZC0+
c2l6ZSA9IG5ld3NpemU7CiAgICAgICB5aWVsZC0+cHRyID0gbGVuOwotICAgICAgeWllbGQtPnMg
PSB2YWx1ZTsKKyAgICAgIHlpZWxkLT5zID0gVVMgdmFsdWU7IC8qIGtub3duIHRvIGJlIGluIG5l
dyBzdG9yZSBpLmUuIGEgY29weSwgc28gZGVjb25zdCBzYWZlICovCiAgICAgICB9CiAgICAgZWxz
ZQogICAgICAgeWllbGQgPSBzdHJpbmdfY2F0bih5aWVsZCwgdmFsdWUsIGxlbik7CkBAIC04MTE2
LDcgKzgyNTQsNyBAQAogLyogSWYgd2UgaGl0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGVuIGtl
dF9lbmRzIGlzIHNldCwgdGhlcmUgaXMgYSBtaXNzaW5nCiB0ZXJtaW5hdGluZyBicmFjZS4gKi8K
IAotaWYgKGtldF9lbmRzICYmICpzID09IDApCitpZiAoa2V0X2VuZHMgJiYgISpzKQogICB7CiAg
IGV4cGFuZF9zdHJpbmdfbWVzc2FnZSA9IG1hbGZvcm1lZF9oZWFkZXIKICAgICA/IFVTIm1pc3Np
bmcgfSBhdCBlbmQgb2Ygc3RyaW5nIC0gY291bGQgYmUgaGVhZGVyIG5hbWUgbm90IHRlcm1pbmF0
ZWQgYnkgY29sb24iCkBAIC04MTQ5LDggKzgyODcsMTAgQEAKICAgICBkZWJ1Z19wcmludGZfaW5k
ZW50KCIlc3Jlc3VsdDogJXNcbiIsCiAgICAgICBza2lwcGluZyA/ICJ8LS0tLS0iIDogIlxcX19f
X18iLCB5aWVsZC0+cyk7CiAgICAgaWYgKHRhaW50ZWQpCi0gICAgICBkZWJ1Z19wcmludGZfaW5k
ZW50KCIlcyAgICAgXFxfXyh0YWludGVkKVxuIiwKLQlza2lwcGluZyA/ICJ8ICAgICAiIDogIiAg
ICAgICIpOworICAgICAgeworICAgICAgZGVidWdfcHJpbnRmX2luZGVudCgiJXMgICAgIFxcX18i
LCBza2lwcGluZyA/ICJ8ICAgICAiIDogIiAgICAgICIpOworICAgICAgZGVidWdfcHJpbnRfdGFp
bnQoeWllbGQtPnMpOworICAgICAgfQogICAgIGlmIChza2lwcGluZykKICAgICAgIGRlYnVnX3By
aW50Zl9pbmRlbnQoIlxcX19fc2tpcHBpbmc6IHJlc3VsdCBpcyBub3QgdXNlZFxuIik7CiAgICAg
fQpAQCAtODE2NCw5ICs4MzA0LDEyIEBACiAgICAgICBza2lwcGluZyA/IFVURjhfVkVSVF9SSUdI
VCA6IFVURjhfVVBfUklHSFQsCiAgICAgICB5aWVsZC0+cyk7CiAgICAgaWYgKHRhaW50ZWQpCi0g
ICAgICBkZWJ1Z19wcmludGZfaW5kZW50KCIlcyh0YWludGVkKVxuIiwKKyAgICAgIHsKKyAgICAg
IGRlYnVnX3ByaW50Zl9pbmRlbnQoIiVzIiwKIAlza2lwcGluZwogCT8gVVRGOF9WRVJUICIgICAg
ICAgICAgICAgIiA6ICIgICAgICAgICAgICIgVVRGOF9VUF9SSUdIVCBVVEY4X0hPUklaIFVURjhf
SE9SSVopOworICAgICAgZGVidWdfcHJpbnRfdGFpbnQoeWllbGQtPnMpOworICAgICAgfQogICAg
IGlmIChza2lwcGluZykKICAgICAgIGRlYnVnX3ByaW50Zl9pbmRlbnQoVVRGOF9VUF9SSUdIVCBV
VEY4X0hPUklaIFVURjhfSE9SSVogVVRGOF9IT1JJWgogCSJza2lwcGluZzogcmVzdWx0IGlzIG5v
dCB1c2VkXG4iKTsKQEAgLTgxOTMsNiArODMzNiw3IEBACiBFWFBBTkRfRkFJTEVEOgogaWYgKGxl
ZnQpICpsZWZ0ID0gczsKIERFQlVHKERfZXhwYW5kKQorICB7CiAgIERFQlVHKERfbm91dGY4KQog
ICAgIHsKICAgICBkZWJ1Z19wcmludGZfaW5kZW50KCJ8ZmFpbGVkIHRvIGV4cGFuZDogJXNcbiIs
IHN0cmluZyk7CkBAIC04MjEyLDYgKzgzNTYsNyBAQAogICAgIGlmIChmLmV4cGFuZF9zdHJpbmdf
Zm9yY2VkZmFpbCkKICAgICAgIGRlYnVnX3ByaW50Zl9pbmRlbnQoVVRGOF9VUF9SSUdIVCAiZmFp
bHVyZSB3YXMgZm9yY2VkXG4iKTsKICAgICB9CisgIH0KIGlmIChyZXNldG9rX3AgJiYgIXJlc2V0
b2spICpyZXNldG9rX3AgPSBGQUxTRTsKIGV4cGFuZF9sZXZlbC0tOwogcmV0dXJuIE5VTEw7CkBA
IC04NTE5LDYgKzg2NjQsNyBAQAogICBjb25zdCB1c2NoYXIgKnZhcl9kYXRhOwogfSBlcnJfY3R4
OwogCisvKiBDYWxsZWQgdmlhIHRyZWVfd2Fsaywgd2hpY2ggYWxsb3dzIG5vbmNvbnN0IG5hbWUv
ZGF0YS4gIE91ciB1c2FnZSBpcyBjb25zdC4gKi8KIHN0YXRpYyB2b2lkCiBhc3NlcnRfdmFyaWFi
bGVfbm90aW4odXNjaGFyICogdmFyX25hbWUsIHVzY2hhciAqIHZhcl9kYXRhLCB2b2lkICogY3R4
KQogewpAQCAtODU0MCwxMyArODY4NiwxNCBAQAogdHJlZV93YWxrKGFjbF92YXJfYywgYXNzZXJ0
X3ZhcmlhYmxlX25vdGluLCAmZSk7CiB0cmVlX3dhbGsoYWNsX3Zhcl9tLCBhc3NlcnRfdmFyaWFi
bGVfbm90aW4sICZlKTsKIAotLyogY2hlY2sgYXV0aDxuPiB2YXJpYWJsZXMgKi8KKy8qIGNoZWNr
IGF1dGg8bj4gdmFyaWFibGVzLgorYXNzZXJ0X3ZhcmlhYmxlX25vdGluKCkgdHJlYXRzIGFzIGNv
bnN0LCBzbyBkZWNvbnN0IGlzIHNhZmUuICovCiBmb3IgKGludCBpID0gMDsgaSA8IEFVVEhfVkFS
UzsgaSsrKSBpZiAoYXV0aF92YXJzW2ldKQotICBhc3NlcnRfdmFyaWFibGVfbm90aW4oVVMiYXV0
aDxuPiIsIGF1dGhfdmFyc1tpXSwgJmUpOworICBhc3NlcnRfdmFyaWFibGVfbm90aW4oVVMiYXV0
aDxuPiIsIFVTIGF1dGhfdmFyc1tpXSwgJmUpOwogCi0vKiBjaGVjayByZWdleDxuPiB2YXJpYWJs
ZXMgKi8KKy8qIGNoZWNrIHJlZ2V4PG4+IHZhcmlhYmxlcy4gYXNzZXJ0X3ZhcmlhYmxlX25vdGlu
KCkgdHJlYXRzIGFzIGNvbnN0LiAqLwogZm9yIChpbnQgaSA9IDA7IGkgPCBSRUdFWF9WQVJTOyBp
KyspIGlmIChyZWdleF92YXJzW2ldKQotICBhc3NlcnRfdmFyaWFibGVfbm90aW4oVVMicmVnZXg8
bj4iLCByZWdleF92YXJzW2ldLCAmZSk7CisgIGFzc2VydF92YXJpYWJsZV9ub3RpbihVUyJyZWdl
eDxuPiIsIFVTIHJlZ2V4X3ZhcnNbaV0sICZlKTsKIAogLyogY2hlY2sga25vd24tbmFtZSB2YXJp
YWJsZXMgKi8KIGZvciAodmFyX2VudHJ5ICogdiA9IHZhcl90YWJsZTsgdiA8IHZhcl90YWJsZSAr
IHZhcl90YWJsZV9zaXplOyB2KyspCkBAIC04NTc3LDExICs4NzI0LDExIEBACiAKIAogQk9PTAot
cmVnZXhfbWF0Y2hfYW5kX3NldHVwKGNvbnN0IHBjcmUgKnJlLCB1c2NoYXIgKnN1YmplY3QsIGlu
dCBvcHRpb25zLCBpbnQgc2V0dXApCityZWdleF9tYXRjaF9hbmRfc2V0dXAoY29uc3QgcGNyZTJf
Y29kZSAqcmUsIHVzY2hhciAqc3ViamVjdCwgaW50IG9wdGlvbnMsIGludCBzZXR1cCkKIHsKLWlu
dCBvdmVjdG9yWzMqKEVYUEFORF9NQVhOKzEpXTsKK2ludCBvdmVjWzMqKEVYUEFORF9NQVhOKzEp
XTsKIGludCBuID0gcGNyZV9leGVjKHJlLCBOVUxMLCBzdWJqZWN0LCBVc3RybGVuKHN1YmplY3Qp
LCAwLCBQQ1JFX0VPUFR8b3B0aW9ucywKLSAgb3ZlY3RvciwgbmVsZW0ob3ZlY3RvcikpOworICBv
dmVjLCBuZWxlbShvdmVjKSk7CiBCT09MIHlpZWxkID0gbiA+PSAwOwogaWYgKG4gPT0gMCkgbiA9
IEVYUEFORF9NQVhOICsgMTsKIGlmICh5aWVsZCkKQEAgLTg1ODksOCArODczNiw4IEBACiAgIGV4
cGFuZF9ubWF4ID0gc2V0dXAgPCAwID8gMCA6IHNldHVwICsgMTsKICAgZm9yIChpbnQgbm4gPSBz
ZXR1cCA8IDAgPyAwIDogMjsgbm4gPCBuKjI7IG5uICs9IDIpCiAgICAgewotICAgIGV4cGFuZF9u
c3RyaW5nW2V4cGFuZF9ubWF4XSA9IHN1YmplY3QgKyBvdmVjdG9yW25uXTsKLSAgICBleHBhbmRf
bmxlbmd0aFtleHBhbmRfbm1heCsrXSA9IG92ZWN0b3Jbbm4rMV0gLSBvdmVjdG9yW25uXTsKKyAg
ICBleHBhbmRfbnN0cmluZ1tleHBhbmRfbm1heF0gPSBzdWJqZWN0ICsgb3ZlY1tubl07CisgICAg
ZXhwYW5kX25sZW5ndGhbZXhwYW5kX25tYXgrK10gPSBvdmVjW25uKzFdIC0gb3ZlY1tubl07CiAg
ICAgfQogICBleHBhbmRfbm1heC0tOwogICB9CkBAIC04NjA2LDYgKzg3NTMsNyBAQAogZGVidWdf
ZmlsZSA9IHN0ZGVycjsKIGRlYnVnX2ZkID0gZmlsZW5vKGRlYnVnX2ZpbGUpOwogYmlnX2J1ZmZl
ciA9IG1hbGxvYyhiaWdfYnVmZmVyX3NpemUpOworc3RvcmVfaW5pdCgpOwogCiBmb3IgKGludCBp
ID0gMTsgaSA8IGFyZ2M7IGkrKykKICAgewpkaWZmIC11ciBleGltLm9yaWcvc3JjL2ZpbHRlci5j
IGV4aW0vc3JjL2ZpbHRlci5jCi0tLSBleGltLm9yaWcvc3JjL2ZpbHRlci5jCTIwMjMtMDYtMDQg
MTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9maWx0ZXIuYwkyMDIyLTA2LTIz
IDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4ICsyLDggQEAKICogICAgIEV4aW0gLSBh
biBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBF
eGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNp
dHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGlt
IE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlv
bnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIApAQCAtMjcsNyArMjcsNyBAQAogICBz
dHJ1Y3QgY29uZGl0aW9uX2Jsb2NrICpjOwogICBzdHJ1Y3QgZmlsdGVyX2NtZCAgICAgICpmOwog
ICBpbnQgICAgICAgICAgICAgICAgICAgICBpOwotICB1c2NoYXIgICAgICAgICAgICAgICAgICp1
OworICBjb25zdCB1c2NoYXIgICAgICAgICAgICAqdTsKIH07CiAKIC8qIExvY2FsIHN0cnVjdHVy
ZXMgdXNlZCBpbiB0aGlzIG1vZHVsZSAqLwpAQCAtNjcsNyArNjcsNyBAQAogCiBlbnVtIHsgaGFk
X25laXRoZXIsIGhhZF9lbHNlLCBoYWRfZWxpZiwgaGFkX2VuZGlmIH07CiAKLXN0YXRpYyBCT09M
IHJlYWRfY29tbWFuZF9saXN0KHVzY2hhciAqKiwgZmlsdGVyX2NtZCAqKiosIEJPT0wpOworc3Rh
dGljIEJPT0wgcmVhZF9jb21tYW5kX2xpc3QoY29uc3QgdXNjaGFyICoqLCBmaWx0ZXJfY21kICoq
KiwgQk9PTCk7CiAKIAogLyogVGhlIHN0cmluZyBhcmd1bWVudHMgZm9yIHRoZSBtYWlsIGNvbW1h
bmQuIFRoZSBoZWFkZXIgbGluZSBvbmVzICh0aGF0IGFyZQpAQCAtMjUyLDggKzI1Miw4IEBACiBS
ZXR1cm5zOiAgICAgICAgICAgcG9pbnRlciB0byBuZXh0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rl
cgogKi8KIAotc3RhdGljIHVzY2hhciAqCi1uZXh0c2lnY2hhcih1c2NoYXIgKnB0ciwgQk9PTCBj
b21tZW50X2FsbG93ZWQpCitzdGF0aWMgY29uc3QgdXNjaGFyICoKK25leHRzaWdjaGFyKGNvbnN0
IHVzY2hhciAqcHRyLCBCT09MIGNvbW1lbnRfYWxsb3dlZCkKIHsKIGZvciAoOzspCiAgIHsKQEAg
LTI5MCw4ICsyOTAsOCBAQAogUmV0dXJuczogICAgcG9pbnRlciB0byB0aGUgbmV4dCBzaWduaWZp
Y2FudCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHdvcmQKICovCiAKLXN0YXRpYyB1c2NoYXIgKgotbmV4
dHdvcmQodXNjaGFyICpwdHIsIHVzY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSwgQk9PTCBicmFja2V0
KQorc3RhdGljIGNvbnN0IHVzY2hhciAqCituZXh0d29yZChjb25zdCB1c2NoYXIgKnB0ciwgdXNj
aGFyICpidWZmZXIsIGludCBzaXplLCBCT09MIGJyYWNrZXQpCiB7CiB1c2NoYXIgKmJwID0gYnVm
ZmVyOwogd2hpbGUgKCpwdHIgIT0gMCAmJiAhaXNzcGFjZSgqcHRyKSAmJgpAQCAtMzI2LDEzICsz
MjYsMTMgQEAKIFJldHVybnM6ICAgICB0aGUgbmV4dCBzaWduaWZpY2FudCBjaGFyYWN0ZXIgYWZ0
ZXIgdGhlIGl0ZW0KICovCiAKLXN0YXRpYyB1c2NoYXIgKgotbmV4dGl0ZW0odXNjaGFyICpwdHIs
IHVzY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSwgQk9PTCBicmFja2V0KQorc3RhdGljIGNvbnN0IHVz
Y2hhciAqCituZXh0aXRlbShjb25zdCB1c2NoYXIgKnB0ciwgdXNjaGFyICpidWZmZXIsIGludCBz
aXplLCBCT09MIGJyYWNrZXQpCiB7CiB1c2NoYXIgKmJwID0gYnVmZmVyOwogaWYgKCpwdHIgIT0g
J1wiJykgcmV0dXJuIG5leHR3b3JkKHB0ciwgYnVmZmVyLCBzaXplLCBicmFja2V0KTsKIAotd2hp
bGUgKCooKytwdHIpICE9IDAgJiYgKnB0ciAhPSAnXCInICYmICpwdHIgIT0gJ1xuJykKK3doaWxl
ICgqKytwdHIgJiYgKnB0ciAhPSAnXCInICYmICpwdHIgIT0gJ1xuJykKICAgewogICBpZiAoYnAg
LSBidWZmZXIgPj0gc2l6ZSAtIDEpCiAgICAgewpAQCAtMzQ1LDcgKzM0NSw3IEBACiAgICAgewog
ICAgIGlmIChpc3NwYWNlKHB0clsxXSkpICAgIC8qIFw8d2hpdGVzcGFjZT5OTDx3aGl0ZXNwYWNl
PiBpZ25vcmVkICovCiAgICAgICB7Ci0gICAgICB1c2NoYXIgKnAgPSBwdHIgKyAxOworICAgICAg
Y29uc3QgdXNjaGFyICpwID0gcHRyICsgMTsKICAgICAgIHdoaWxlICgqcCAhPSAnXG4nICYmIGlz
c3BhY2UoKnApKSBwKys7CiAgICAgICBpZiAoKnAgPT0gJ1xuJykKICAgICAgICAgewpAQCAtMzg1
LDcgKzM4NSw3IEBACiAqLwogCiBzdGF0aWMgaW50Ci1nZXRfbnVtYmVyKHVzY2hhciAqcywgQk9P
TCAqb2spCitnZXRfbnVtYmVyKGNvbnN0IHVzY2hhciAqcywgQk9PTCAqb2spCiB7CiBpbnQgdmFs
dWUsIGNvdW50OwogKm9rID0gRkFMU0U7CkBAIC00MTYsOCArNDE2LDggQEAKIFJldHVybnM6ICAg
ICAgICAgIHBvaW50cyB0byBuZXh0IGNoYXJhY3RlciBhZnRlciAidGhlbiIKICovCiAKLXN0YXRp
YyB1c2NoYXIgKgotcmVhZF9jb25kaXRpb24odXNjaGFyICpwdHIsIGNvbmRpdGlvbl9ibG9jayAq
KmNvbmQsIEJPT0wgdG9wbGV2ZWwpCitzdGF0aWMgY29uc3QgdXNjaGFyICoKK3JlYWRfY29uZGl0
aW9uKGNvbnN0IHVzY2hhciAqcHRyLCBjb25kaXRpb25fYmxvY2sgKipjb25kLCBCT09MIHRvcGxl
dmVsKQogewogdXNjaGFyIGJ1ZmZlclsxMDI0XTsKIEJPT0wgdGVzdGZvciA9IFRSVUU7CkBAIC00
MzQsNyArNDM0LDcgQEAKIAogICAvKiByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBpbnB1dCBpcyBh
biBlcnJvci4gKi8KIAotICBpZiAoKnB0ciA9PSAwKQorICBpZiAoISpwdHIpCiAgICAgewogICAg
ICplcnJvcl9wb2ludGVyID0gVVMiXCJ0aGVuXCIgbWlzc2luZyBhdCBlbmQgb2YgZmlsdGVyIGZp
bGUiOwogICAgIGJyZWFrOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAgIGVsc2UKICAgICB7CiAgICAg
cHRyID0gbmV4dGl0ZW0ocHRyLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBUUlVFKTsKLSAgICBp
ZiAoKmVycm9yX3BvaW50ZXIgIT0gTlVMTCkgYnJlYWs7CisgICAgaWYgKCplcnJvcl9wb2ludGVy
KSBicmVhazsKIAogICAgIC8qICJUaGVuIiBhdCB0aGUgc3RhcnQgb2YgYSBjb25kaXRpb24gaXMg
YW4gZXJyb3IgKi8KIApAQCAtNDk4LDcgKzQ5OCw3IEBACiAKICAgICAvKiBCdWlsZCBhIGNvbmRp
dGlvbiBibG9jayBmcm9tIHRoZSBzcGVjaWZpYyB3b3JkLiAqLwogCi0gICAgYyA9IHN0b3JlX2dl
dChzaXplb2YoY29uZGl0aW9uX2Jsb2NrKSwgRkFMU0UpOworICAgIGMgPSBzdG9yZV9nZXQoc2l6
ZW9mKGNvbmRpdGlvbl9ibG9jayksIEdFVF9VTlRBSU5URUQpOwogICAgIGMtPmxlZnQudSA9IGMt
PnJpZ2h0LnUgPSBOVUxMOwogICAgIGMtPnRlc3Rmb3IgPSB0ZXN0Zm9yOwogICAgIHRlc3Rmb3Ig
PSBUUlVFOwpAQCAtNTE4LDcgKzUxOCw3IEBACiAgICAgICBmb3IgKDs7KQogICAgICAgICB7CiAg
ICAgICAgIHN0cmluZ19pdGVtICphYTsKLSAgICAgICAgdXNjaGFyICpzYXZlcHRyID0gcHRyOwor
ICAgICAgICBjb25zdCB1c2NoYXIgKiBzYXZlcHRyID0gcHRyOwogICAgICAgICBwdHIgPSBuZXh0
d29yZChwdHIsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIFRSVUUpOwogICAgICAgICBpZiAoKmVy
cm9yX3BvaW50ZXIpIGJyZWFrOwogICAgICAgICBpZiAoVXN0cmNtcChidWZmZXIsICJhbGlhcyIp
ICE9IDApCkBAIC01MjgsNyArNTI4LDcgQEAKICAgICAgICAgICB9CiAgICAgICAgIHB0ciA9IG5l
eHRpdGVtKHB0ciwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgVFJVRSk7CiAgICAgICAgIGlmICgq
ZXJyb3JfcG9pbnRlcikgYnJlYWs7Ci0gICAgICAgIGFhID0gc3RvcmVfZ2V0KHNpemVvZihzdHJp
bmdfaXRlbSksIEZBTFNFKTsKKyAgICAgICAgYWEgPSBzdG9yZV9nZXQoc2l6ZW9mKHN0cmluZ19p
dGVtKSwgR0VUX1VOVEFJTlRFRCk7CiAgICAgICAgIGFhLT50ZXh0ID0gc3RyaW5nX2NvcHkoYnVm
ZmVyKTsKICAgICAgICAgYWEtPm5leHQgPSBjLT5sZWZ0LmE7CiAgICAgICAgIGMtPmxlZnQuYSA9
IGFhOwpAQCAtNTY5LDcgKzU2OSw3IEBACiAgICAgZWxzZQogICAgICAgewogICAgICAgaW50IGk7
Ci0gICAgICB1c2NoYXIgKmlzcHRyID0gTlVMTDsKKyAgICAgIGNvbnN0IHVzY2hhciAqaXNwdHIg
PSBOVUxMOwogCiAgICAgICBjLT5sZWZ0LnUgPSBzdHJpbmdfY29weShidWZmZXIpOwogICAgICAg
cHRyID0gbmV4dHdvcmQocHRyLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBUUlVFKTsKQEAgLTY1
NSwxOCArNjU1LDIzIEBACiAKICAgZWxzZQogICAgIHsKLSAgICB1c2NoYXIgKnNhdmVwdHIgPSBw
dHI7CisvLyAgICBjb25zdCB1c2NoYXIgKnNhdmVwdHIgPSBwdHI7CiAgICAgcHRyID0gbmV4dHdv
cmQocHRyLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBGQUxTRSk7CiAgICAgaWYgKCplcnJvcl9w
b2ludGVyKSBicmVhazsKIAogICAgIC8qICJUaGVuIiB0ZXJtaW5hdGVzIGEgdG9wbGV2ZWwgY29u
ZGl0aW9uOyBvdGhlcndpc2UgYSBjbG9zaW5nIGJyYWNrZXQKICAgICBoYXMgYmVlbiBvbWl0dGVk
LiBQdXQgYSBzdHJpbmcgdGVybWluYXRvciBhdCB0aGUgc3RhcnQgb2YgInRoZW4iIHNvCiAgICAg
dGhhdCByZWZsZWN0aW5nIHRoZSBjb25kaXRpb24gY2FuIGJlIGRvbmUgd2hlbiB0ZXN0aW5nLiAq
LworICAgIC8qWFhYIFRoaXMgc3RvcHMgdXMgZG9pbmcgYSBjb25zdGlmaWNhdGlvbiBqb2IgaW4g
dGhpcyBmaWxlLCB1bmZvcnR1bmF0ZWx5LgorICAgIENvbW1lbnQgaXQgb3V0IGFuZCBzZWUgaWYg
YW55dGhpbmcgYnJlYWtzLgorICAgIFdpdGggb25lIGFkZGl0aW9uIGRvd24gYXQgREVGRVJGUkVF
WkVGQUlMIGl0IHBhc3NlcyB0aGUgdGVzdHN1aXRlLiAqLwogCiAgICAgaWYgKFVzdHJjbXAoYnVm
ZmVyLCAidGhlbiIpID09IDApCiAgICAgICB7Ci0gICAgICBpZiAodG9wbGV2ZWwpICpzYXZlcHRy
ID0gMDsKLSAgICAgIGVsc2UgKmVycm9yX3BvaW50ZXIgPSBzdHJpbmdfc3ByaW50ZigibWlzc2lu
ZyBcIilcIiBhdCBlbmQgb2YgIgorLy8gICAgICBpZiAodG9wbGV2ZWwpICpzYXZlcHRyID0gMDsK
Ky8vICAgICAgZWxzZQorICAgaWYgKCF0b3BsZXZlbCkKKyAgICAgICplcnJvcl9wb2ludGVyID0g
c3RyaW5nX3NwcmludGYoIm1pc3NpbmcgXCIpXCIgYXQgZW5kIG9mICIKICAgICAgICAgICAiY29u
ZGl0aW9uIG5lYXIgbGluZSAlZCBvZiBmaWx0ZXIgZmlsZSIsIGxpbmVfbnVtYmVyKTsKICAgICAg
IGJyZWFrOwogICAgICAgfQpAQCAtNjc5LDcgKzY4NCw3IEBACiAKICAgICBlbHNlIGlmIChVc3Ry
Y21wKGJ1ZmZlciwgImFuZCIpID09IDApCiAgICAgICB7Ci0gICAgICBjb25kaXRpb25fYmxvY2sg
KmFuZGMgPSBzdG9yZV9nZXQoc2l6ZW9mKGNvbmRpdGlvbl9ibG9jayksIEZBTFNFKTsKKyAgICAg
IGNvbmRpdGlvbl9ibG9jayAqIGFuZGMgPSBzdG9yZV9nZXQoc2l6ZW9mKGNvbmRpdGlvbl9ibG9j
ayksIEdFVF9VTlRBSU5URUQpOwogICAgICAgYW5kYy0+cGFyZW50ID0gY3VycmVudF9wYXJlbnQ7
CiAgICAgICBhbmRjLT50eXBlID0gY29uZF9hbmQ7CiAgICAgICBhbmRjLT50ZXN0Zm9yID0gVFJV
RTsKQEAgLTY5Nyw4ICs3MDIsOCBAQAogCiAgICAgZWxzZSBpZiAoVXN0cmNtcChidWZmZXIsICJv
ciIpID09IDApCiAgICAgICB7Ci0gICAgICBjb25kaXRpb25fYmxvY2sgKm9yYyA9IHN0b3JlX2dl
dChzaXplb2YoY29uZGl0aW9uX2Jsb2NrKSwgRkFMU0UpOwotICAgICAgY29uZGl0aW9uX2Jsb2Nr
ICpvcl9wYXJlbnQgPSBOVUxMOworICAgICAgY29uZGl0aW9uX2Jsb2NrICogb3JjID0gc3RvcmVf
Z2V0KHNpemVvZihjb25kaXRpb25fYmxvY2spLCBHRVRfVU5UQUlOVEVEKTsKKyAgICAgIGNvbmRp
dGlvbl9ibG9jayAqIG9yX3BhcmVudCA9IE5VTEw7CiAKICAgICAgIGlmIChjdXJyZW50X3BhcmVu
dCkKICAgICAgICAgewpAQCAtODM3LDcgKzg0Miw3IEBACiAqLwogCiBzdGF0aWMgQk9PTAotcmVh
ZF9jb21tYW5kKHVzY2hhciAqKnBwdHIsIGZpbHRlcl9jbWQgKioqbGFzdGNtZHB0cikKK3JlYWRf
Y29tbWFuZChjb25zdCB1c2NoYXIgKipwcHRyLCBmaWx0ZXJfY21kICoqKmxhc3RjbWRwdHIpCiB7
CiBpbnQgY29tbWFuZCwgaSwgY21kX2JpdDsKIGZpbHRlcl9jbWQgKm5ldywgKipuZXdsYXN0Y21k
cHRyOwpAQCAtODQ1LDggKzg1MCw4IEBACiBCT09MIHdhc19zZWVuX29yX3Vuc2VlbiA9IEZBTFNF
OwogQk9PTCB3YXNfbm9lcnJvciA9IEZBTFNFOwogdXNjaGFyIGJ1ZmZlclsxMDI0XTsKLXVzY2hh
ciAqcHRyID0gKnBwdHI7Ci11c2NoYXIgKnNhdmVwdHI7Citjb25zdCB1c2NoYXIgKnB0ciA9ICpw
cHRyOworY29uc3QgdXNjaGFyICpzYXZlcHRyOwogdXNjaGFyICpmbXNnID0gTlVMTDsKIAogLyog
UmVhZCB0aGUgbmV4dCB3b3JkIGFuZCBmaW5kIHdoaWNoIGNvbW1hbmQgaXQgaXMuIENvbW1hbmQg
d29yZHMgYXJlIG5vcm1hbGx5CkBAIC04NTUsNiArODYwLDggQEAKIGFzIGJyYWNrZXRzIGFyZSBh
bGxvd2VkIGluIGNvbmRpdGlvbnMgYW5kIHVzZXJzIHdpbGwgZXhwZWN0IG5vdCB0byByZXF1aXJl
CiB3aGl0ZSBzcGFjZSBoZXJlLiAqLwogCisqYnVmZmVyID0gJ1wwJzsJLyogY29tcGlsZXIgcXVp
ZXRlbmluZyAqLworCiBpZiAoVXN0cm5jbXAocHRyLCAiaWYoIiwgMykgPT0gMCkKICAgewogICBV
c3RyY3B5KGJ1ZmZlciwgVVMiaWYiKTsKQEAgLTg2OCw3ICs4NzUsNyBAQAogZWxzZQogICB7CiAg
IHB0ciA9IG5leHR3b3JkKHB0ciwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgRkFMU0UpOwotICBp
ZiAoKmVycm9yX3BvaW50ZXIgIT0gTlVMTCkgcmV0dXJuIEZBTFNFOworICBpZiAoKmVycm9yX3Bv
aW50ZXIpIHJldHVybiBGQUxTRTsKICAgfQogCiBmb3IgKGNvbW1hbmQgPSAwOyBjb21tYW5kIDwg
Y29tbWFuZF9saXN0X2NvdW50OyBjb21tYW5kKyspCkBAIC05MDcsMTEgKzkxNCwxMSBAQAogICBj
YXNlIHRlc3RwcmludF9jb21tYW5kOgogCiAgIHB0ciA9IG5leHRpdGVtKHB0ciwgYnVmZmVyLCBz
aXplb2YoYnVmZmVyKSwgRkFMU0UpOwotICBpZiAoKmJ1ZmZlciA9PSAwKQorICBpZiAoISpidWZm
ZXIpCiAgICAgKmVycm9yX3BvaW50ZXIgPSBzdHJpbmdfc3ByaW50ZigiXCIlc1wiIHJlcXVpcmVz
IGFuIGFyZ3VtZW50ICIKICAgICAgICJuZWFyIGxpbmUgJWQgb2YgZmlsdGVyIGZpbGUiLCBjb21t
YW5kX2xpc3RbY29tbWFuZF0sIGxpbmVfbnVtYmVyKTsKIAotICBpZiAoKmVycm9yX3BvaW50ZXIg
IT0gTlVMTCkgeWllbGQgPSBGQUxTRTsgZWxzZQorICBpZiAoKmVycm9yX3BvaW50ZXIpIHlpZWxk
ID0gRkFMU0U7IGVsc2UKICAgICB7CiAgICAgdW5pb24gYXJndHlwZXMgYXJndW1lbnQsIHNlY29u
ZF9hcmd1bWVudDsKIApAQCAtOTIxLDEzICs5MjgsMTMgQEAKICAgICAgIHsKICAgICAgIGFyZ3Vt
ZW50LnUgPSBzdHJpbmdfY29weShidWZmZXIpOwogICAgICAgcHRyID0gbmV4dGl0ZW0ocHRyLCBi
dWZmZXIsIHNpemVvZihidWZmZXIpLCBGQUxTRSk7Ci0gICAgICBpZiAoKmJ1ZmZlciA9PSAwIHx8
IFVzdHJjbXAoYnVmZmVyLCAidG8iKSAhPSAwKQorICAgICAgaWYgKCEqYnVmZmVyIHx8IFVzdHJj
bXAoYnVmZmVyLCAidG8iKSAhPSAwKQogICAgICAgICAqZXJyb3JfcG9pbnRlciA9IHN0cmluZ19z
cHJpbnRmKCJcInRvXCIgZXhwZWN0ZWQgaW4gXCJhZGRcIiBjb21tYW5kICIKICAgICAgICAgICAi
bmVhciBsaW5lICVkIG9mIGZpbHRlciBmaWxlIiwgbGluZV9udW1iZXIpOwogICAgICAgZWxzZQog
ICAgICAgICB7CiAgICAgICAgIHB0ciA9IG5leHRpdGVtKHB0ciwgYnVmZmVyLCBzaXplb2YoYnVm
ZmVyKSwgRkFMU0UpOwotICAgICAgICBpZiAoKmJ1ZmZlciA9PSAwKQorICAgICAgICBpZiAoISpi
dWZmZXIpCiAgICAgICAgICAgKmVycm9yX3BvaW50ZXIgPSBzdHJpbmdfc3ByaW50ZigidmFsdWUg
bWlzc2luZyBhZnRlciBcInRvXCIgIgogICAgICAgICAgICAgIm5lYXIgbGluZSAlZCBvZiBmaWx0
ZXIgZmlsZSIsIGxpbmVfbnVtYmVyKTsKICAgICAgICAgZWxzZSBzZWNvbmRfYXJndW1lbnQudSA9
IHN0cmluZ19jb3B5KGJ1ZmZlcik7CkBAIC05NjMsNyArOTcwLDcgQEAKICAgICAgIGlmICh5aWVs
ZCkKICAgICAgICAgewogICAgICAgICBwdHIgPSBuZXh0aXRlbShwdHIsIGJ1ZmZlciwgc2l6ZW9m
KGJ1ZmZlciksIEZBTFNFKTsKLSAgICAgICAgaWYgKCpidWZmZXIgPT0gMCkKKyAgICAgICAgaWYg
KCEqYnVmZmVyKQogICAgICAgICAgICplcnJvcl9wb2ludGVyID0gc3RyaW5nX3NwcmludGYoInZh
bHVlIG1pc3NpbmcgYWZ0ZXIgXCJhZGRcIiwgIgogICAgICAgICAgICAgIlwicmVtb3ZlXCIsIG9y
IFwiY2hhcnNldFwiIG5lYXIgbGluZSAlZCBvZiBmaWx0ZXIgZmlsZSIsCiAgICAgICAgICAgICAg
IGxpbmVfbnVtYmVyKTsKQEAgLTk5OSw3ICsxMDA2LDcgQEAKIAogICAgICAgZWxzZSBpZiAoY29t
bWFuZCA9PSBkZWxpdmVyX2NvbW1hbmQpCiAgICAgICAgIHsKLSAgICAgICAgdXNjaGFyICpzYXZl
X3B0ciA9IHB0cjsKKyAgICAgICAgY29uc3QgdXNjaGFyICpzYXZlX3B0ciA9IHB0cjsKICAgICAg
ICAgcHRyID0gbmV4dHdvcmQocHRyLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBGQUxTRSk7CiAg
ICAgICAgIGlmIChVc3RyY21wKGJ1ZmZlciwgImVycm9yc190byIpID09IDApCiAgICAgICAgICAg
ewpAQCAtMTAxNCw5ICsxMDIxLDEwIEBACiAgICAgRkFMU0UgZm9yIGxvZ2dpbmcgY29tbWFuZHMs
IGFuZCBpdCBkb2Vzbid0IG1hdHRlciBmb3IgdGVzdHByaW50LCBhcwogICAgIHRoYXQgZG9lc24n
dCBjaGFuZ2UgdGhlICJkZWxpdmVyZWQiIHN0YXR1cy4gKi8KIAotICAgIGlmICgqZXJyb3JfcG9p
bnRlciAhPSBOVUxMKSB5aWVsZCA9IEZBTFNFOyBlbHNlCisgICAgaWYgKCplcnJvcl9wb2ludGVy
KSB5aWVsZCA9IEZBTFNFOworICAgIGVsc2UKICAgICAgIHsKLSAgICAgIG5ldyA9IHN0b3JlX2dl
dChzaXplb2YoZmlsdGVyX2NtZCkgKyBzaXplb2YodW5pb24gYXJndHlwZXMpLCBGQUxTRSk7Cisg
ICAgICBuZXcgPSBzdG9yZV9nZXQoc2l6ZW9mKGZpbHRlcl9jbWQpICsgc2l6ZW9mKHVuaW9uIGFy
Z3R5cGVzKSwgR0VUX1VOVEFJTlRFRCk7CiAgICAgICBuZXctPm5leHQgPSBOVUxMOwogICAgICAg
KipsYXN0Y21kcHRyID0gbmV3OwogICAgICAgKmxhc3RjbWRwdHIgPSAmKG5ldy0+bmV4dCk7CkBA
IC0xMDgxLDcgKzEwODksNyBAQAogCiAgIHNhdmVwdHIgPSBwdHI7CiAgIHB0ciA9IG5leHRpdGVt
KHB0ciwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgRkFMU0UpOwotICBpZiAoKnNhdmVwdHIgIT0g
J1wiJyAmJiAoKmJ1ZmZlciA9PSAwIHx8IFVzdHJjbXAoYnVmZmVyLCAidGV4dCIpICE9IDApKQor
ICBpZiAoKnNhdmVwdHIgIT0gJ1wiJyAmJiAoISpidWZmZXIgfHwgVXN0cmNtcChidWZmZXIsICJ0
ZXh0IikgIT0gMCkpCiAgICAgewogICAgIHB0ciA9IHNhdmVwdHI7CiAgICAgZm1zZyA9IFVTIiI7
CkBAIC0xMTAwLDEyICsxMTA4LDEyIEBACiAgIC8qIEZpbmlzaCBoYXMgbm8gYXJndW1lbnRzOyBm
bXNnIGRlZmF1bHRzIHRvIE5VTEwgKi8KIAogICBjYXNlIGZpbmlzaF9jb21tYW5kOgotICBuZXcg
PSBzdG9yZV9nZXQoc2l6ZW9mKGZpbHRlcl9jbWQpLCBGQUxTRSk7CisgIG5ldyA9IHN0b3JlX2dl
dChzaXplb2YoZmlsdGVyX2NtZCksIEdFVF9VTlRBSU5URUQpOwogICBuZXctPm5leHQgPSBOVUxM
OwogICAqKmxhc3RjbWRwdHIgPSBuZXc7CiAgICpsYXN0Y21kcHRyID0gJihuZXctPm5leHQpOwog
ICBuZXctPmNvbW1hbmQgPSBjb21tYW5kOwotICBuZXctPnNlZW4gPSBzZWVuX2ZvcmNlPyBzZWVu
X3ZhbHVlIDogRkFMU0U7CisgIG5ldy0+c2VlbiA9IHNlZW5fZm9yY2UgPyBzZWVuX3ZhbHVlIDog
RkFMU0U7CiAgIG5ldy0+YXJnc1swXS51ID0gZm1zZzsKICAgYnJlYWs7CiAKQEAgLTExMjQsMTAg
KzExMzIsMTAgQEAKIAogICAvKiBTZXQgdXAgdGhlIGNvbW1hbmQgYmxvY2sgZm9yIGlmICovCiAK
LSAgbmV3ID0gc3RvcmVfZ2V0KHNpemVvZihmaWx0ZXJfY21kKSArIDQgKiBzaXplb2YodW5pb24g
YXJndHlwZXMpLCBGQUxTRSk7CisgIG5ldyA9IHN0b3JlX2dldChzaXplb2YoZmlsdGVyX2NtZCkg
KyA0ICogc2l6ZW9mKHVuaW9uIGFyZ3R5cGVzKSwgR0VUX1VOVEFJTlRFRCk7CiAgIG5ldy0+bmV4
dCA9IE5VTEw7CiAgICoqbGFzdGNtZHB0ciA9IG5ldzsKLSAgKmxhc3RjbWRwdHIgPSAmKG5ldy0+
bmV4dCk7CisgICpsYXN0Y21kcHRyID0gJm5ldy0+bmV4dDsKICAgbmV3LT5jb21tYW5kID0gY29t
bWFuZDsKICAgbmV3LT5zZWVuID0gRkFMU0U7CiAgIG5ldy0+YXJnc1swXS51ID0gTlVMTDsKQEAg
LTExMzYsOCArMTE0NCw4IEBACiAKICAgLyogUmVhZCB0aGUgY29uZGl0aW9uICovCiAKLSAgcHRy
ID0gcmVhZF9jb25kaXRpb24ocHRyLCAmKG5ldy0+YXJnc1swXS5jKSwgVFJVRSk7Ci0gIGlmICgq
ZXJyb3JfcG9pbnRlciAhPSBOVUxMKSB7IHlpZWxkID0gRkFMU0U7IGJyZWFrOyB9CisgIHB0ciA9
IHJlYWRfY29uZGl0aW9uKHB0ciwgJm5ldy0+YXJnc1swXS5jLCBUUlVFKTsKKyAgaWYgKCplcnJv
cl9wb2ludGVyKSB7IHlpZWxkID0gRkFMU0U7IGJyZWFrOyB9CiAKICAgLyogUmVhZCB0aGUgY29t
bWFuZHMgdG8gYmUgb2JleWVkIGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSAqLwogCkBAIC0xMTUy
LDcgKzExNjAsNyBAQAogICAgIHdoaWxlIChoYWRfZWxzZV9lbmRpZiA9PSBoYWRfZWxpZikKICAg
ICAgIHsKICAgICAgIGZpbHRlcl9jbWQgKm5ld25ldyA9Ci0gICAgICAgIHN0b3JlX2dldChzaXpl
b2YoZmlsdGVyX2NtZCkgKyA0ICogc2l6ZW9mKHVuaW9uIGFyZ3R5cGVzKSwgRkFMU0UpOworICAg
ICAgICBzdG9yZV9nZXQoc2l6ZW9mKGZpbHRlcl9jbWQpICsgNCAqIHNpemVvZih1bmlvbiBhcmd0
eXBlcyksIEdFVF9VTlRBSU5URUQpOwogICAgICAgbmV3LT5hcmdzWzJdLmYgPSBuZXduZXc7CiAg
ICAgICBuZXcgPSBuZXduZXc7CiAgICAgICBuZXctPm5leHQgPSBOVUxMOwpAQCAtMTE2Miw4ICsx
MTcwLDggQEAKICAgICAgIG5ldy0+YXJnc1sxXS51ID0gbmV3LT5hcmdzWzJdLnUgPSBOVUxMOwog
ICAgICAgbmV3LT5hcmdzWzNdLnUgPSBwdHI7CiAKLSAgICAgIHB0ciA9IHJlYWRfY29uZGl0aW9u
KHB0ciwgJihuZXctPmFyZ3NbMF0uYyksIFRSVUUpOwotICAgICAgaWYgKCplcnJvcl9wb2ludGVy
ICE9IE5VTEwpIHsgeWllbGQgPSBGQUxTRTsgYnJlYWs7IH0KKyAgICAgIHB0ciA9IHJlYWRfY29u
ZGl0aW9uKHB0ciwgJm5ldy0+YXJnc1swXS5jLCBUUlVFKTsKKyAgICAgIGlmICgqZXJyb3JfcG9p
bnRlcikgeyB5aWVsZCA9IEZBTFNFOyBicmVhazsgfQogICAgICAgbmV3bGFzdGNtZHB0ciA9ICYo
bmV3LT5hcmdzWzFdLmYpOwogICAgICAgaWYgKCFyZWFkX2NvbW1hbmRfbGlzdCgmcHRyLCAmbmV3
bGFzdGNtZHB0ciwgVFJVRSkpCiAgICAgICAgIHlpZWxkID0gRkFMU0U7CkBAIC0xMjA1LDEwICsx
MjEzLDEwIEBACiAKICAgY2FzZSBtYWlsX2NvbW1hbmQ6CiAgIGNhc2UgdmFjYXRpb25fY29tbWFu
ZDoKLSAgbmV3ID0gc3RvcmVfZ2V0KHNpemVvZihmaWx0ZXJfY21kKSArIG1haWxhcmdzX3RvdGFs
ICogc2l6ZW9mKHVuaW9uIGFyZ3R5cGVzKSwgRkFMU0UpOworICBuZXcgPSBzdG9yZV9nZXQoc2l6
ZW9mKGZpbHRlcl9jbWQpICsgbWFpbGFyZ3NfdG90YWwgKiBzaXplb2YodW5pb24gYXJndHlwZXMp
LCBHRVRfVU5UQUlOVEVEKTsKICAgbmV3LT5uZXh0ID0gTlVMTDsKICAgbmV3LT5jb21tYW5kID0g
Y29tbWFuZDsKLSAgbmV3LT5zZWVuID0gc2Vlbl9mb3JjZT8gc2Vlbl92YWx1ZSA6IEZBTFNFOwor
ICBuZXctPnNlZW4gPSBzZWVuX2ZvcmNlID8gc2Vlbl92YWx1ZSA6IEZBTFNFOwogICBuZXctPm5v
ZXJyb3IgPSBub2Vycm9yX2ZvcmNlOwogICBmb3IgKGkgPSAwOyBpIDwgbWFpbGFyZ3NfdG90YWw7
IGkrKykgbmV3LT5hcmdzW2ldLnUgPSBOVUxMOwogCkBAIC0xMjE5LDEzICsxMjI3LDEwIEBACiAK
ICAgZm9yICg7OykKICAgICB7Ci0gICAgdXNjaGFyICpzYXZlcHRyID0gcHRyOworICAgIGNvbnN0
IHVzY2hhciAqc2F2ZXB0ciA9IHB0cjsKICAgICBwdHIgPSBuZXh0d29yZChwdHIsIGJ1ZmZlciwg
c2l6ZW9mKGJ1ZmZlciksIEZBTFNFKTsKLSAgICBpZiAoKmVycm9yX3BvaW50ZXIgIT0gTlVMTCkK
LSAgICAgIHsKLSAgICAgIHlpZWxkID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICAgIH0KKyAg
ICBpZiAoKmVycm9yX3BvaW50ZXIpCisgICAgICB7IHlpZWxkID0gRkFMU0U7IGJyZWFrOyB9CiAK
ICAgICAvKiBFbnN1cmUgInJldHVybiIgaXMgZm9sbG93ZWQgYnkgIm1lc3NhZ2UiOyB0aGF0J3Mg
YSBjb21wbGV0ZSBvcHRpb24gKi8KIApAQCAtMTI3NSwxMSArMTI4MCw4IEBACiAgICAgLyogRm91
bmQga2V5d29yZCwgcmVhZCB0aGUgZGF0YSBpdGVtICovCiAKICAgICBwdHIgPSBuZXh0aXRlbShw
dHIsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIEZBTFNFKTsKLSAgICBpZiAoKmVycm9yX3BvaW50
ZXIgIT0gTlVMTCkKLSAgICAgIHsKLSAgICAgIHlpZWxkID0gRkFMU0U7Ci0gICAgICBicmVhazsK
LSAgICAgIH0KKyAgICBpZiAoKmVycm9yX3BvaW50ZXIpCisgICAgICB7IHlpZWxkID0gRkFMU0U7
IGJyZWFrOyB9CiAgICAgZWxzZSBuZXctPmFyZ3NbaV0udSA9IHN0cmluZ19jb3B5KGJ1ZmZlcik7
CiAgICAgfQogCkBAIC0xMjg4LDE4ICsxMjkwLDE4IEBACiAKICAgaWYgKGNvbW1hbmQgPT0gdmFj
YXRpb25fY29tbWFuZCkKICAgICB7Ci0gICAgaWYgKG5ldy0+YXJnc1ttYWlsYXJnX2luZGV4X2Zp
bGVdLnUgPT0gTlVMTCkKKyAgICBpZiAoIW5ldy0+YXJnc1ttYWlsYXJnX2luZGV4X2ZpbGVdLnUp
CiAgICAgICB7CiAgICAgICBuZXctPmFyZ3NbbWFpbGFyZ19pbmRleF9maWxlXS51ID0gc3RyaW5n
X2NvcHkoVVMiLnZhY2F0aW9uLm1zZyIpOwogICAgICAgbmV3LT5hcmdzW21haWxhcmdfaW5kZXhf
ZXhwYW5kXS51ID0gVVMiIjsgICAvKiBub3QgTlVMTCA9PiBUUlVFICovCiAgICAgICB9Ci0gICAg
aWYgKG5ldy0+YXJnc1ttYWlsYXJnX2luZGV4X2xvZ10udSA9PSBOVUxMKQorICAgIGlmICghbmV3
LT5hcmdzW21haWxhcmdfaW5kZXhfbG9nXS51KQogICAgICAgbmV3LT5hcmdzW21haWxhcmdfaW5k
ZXhfbG9nXS51ID0gc3RyaW5nX2NvcHkoVVMiLnZhY2F0aW9uLmxvZyIpOwotICAgIGlmIChuZXct
PmFyZ3NbbWFpbGFyZ19pbmRleF9vbmNlXS51ID09IE5VTEwpCisgICAgaWYgKCFuZXctPmFyZ3Nb
bWFpbGFyZ19pbmRleF9vbmNlXS51KQogICAgICAgbmV3LT5hcmdzW21haWxhcmdfaW5kZXhfb25j
ZV0udSA9IHN0cmluZ19jb3B5KFVTIi52YWNhdGlvbiIpOwotICAgIGlmIChuZXctPmFyZ3NbbWFp
bGFyZ19pbmRleF9vbmNlX3JlcGVhdF0udSA9PSBOVUxMKQorICAgIGlmICghbmV3LT5hcmdzW21h
aWxhcmdfaW5kZXhfb25jZV9yZXBlYXRdLnUpCiAgICAgICBuZXctPmFyZ3NbbWFpbGFyZ19pbmRl
eF9vbmNlX3JlcGVhdF0udSA9IHN0cmluZ19jb3B5KFVTIjdkIik7Ci0gICAgaWYgKG5ldy0+YXJn
c1ttYWlsYXJnX2luZGV4X3N1YmplY3RdLnUgPT0gTlVMTCkKKyAgICBpZiAoIW5ldy0+YXJnc1tt
YWlsYXJnX2luZGV4X3N1YmplY3RdLnUpCiAgICAgICBuZXctPmFyZ3NbbWFpbGFyZ19pbmRleF9z
dWJqZWN0XS51ID0gc3RyaW5nX2NvcHkoVVMiT24gdmFjYXRpb24iKTsKICAgICB9CiAKQEAgLTEz
MTQsNyArMTMxNiw3IEBACiAKICAgY2FzZSBzZWVuX2NvbW1hbmQ6CiAgIGNhc2UgdW5zZWVuX2Nv
bW1hbmQ6Ci0gIGlmICgqcHRyID09IDApCisgIGlmICghKnB0cikKICAgICB7CiAgICAgKmVycm9y
X3BvaW50ZXIgPSBzdHJpbmdfc3ByaW50ZigiXCJzZWVuXCIgb3IgXCJ1bnNlZW5cIiAiCiAgICAg
ICAibmVhciBsaW5lICVkIGlzIG5vdCBmb2xsb3dlZCBieSBhIGNvbW1hbmQiLCBsaW5lX251bWJl
cik7CkBAIC0xMzM1LDcgKzEzMzcsNyBAQAogICAvKiBTbyBkb2VzIG5vZXJyb3IgKi8KIAogICBj
YXNlIG5vZXJyb3JfY29tbWFuZDoKLSAgaWYgKCpwdHIgPT0gMCkKKyAgaWYgKCEqcHRyKQogICAg
IHsKICAgICAqZXJyb3JfcG9pbnRlciA9IHN0cmluZ19zcHJpbnRmKCJcIm5vZXJyb3JcIiAiCiAg
ICAgICAibmVhciBsaW5lICVkIGlzIG5vdCBmb2xsb3dlZCBieSBhIGNvbW1hbmQiLCBsaW5lX251
bWJlcik7CkBAIC0xMzg0LDExICsxMzg2LDExIEBACiAqLwogCiBzdGF0aWMgQk9PTAotcmVhZF9j
b21tYW5kX2xpc3QodXNjaGFyICoqcHB0ciwgZmlsdGVyX2NtZCAqKipsYXN0Y21kcHRyLCBCT09M
IGNvbmRpdGlvbmFsKQorcmVhZF9jb21tYW5kX2xpc3QoY29uc3QgdXNjaGFyICoqcHB0ciwgZmls
dGVyX2NtZCAqKipsYXN0Y21kcHRyLCBCT09MIGNvbmRpdGlvbmFsKQogewogaWYgKGNvbmRpdGlv
bmFsKSBleHBlY3RfZW5kaWYrKzsKIGhhZF9lbHNlX2VuZGlmID0gaGFkX25laXRoZXI7Ci13aGls
ZSAoKipwcHRyICE9IDAgJiYgaGFkX2Vsc2VfZW5kaWYgPT0gaGFkX25laXRoZXIpCit3aGlsZSAo
KipwcHRyICYmIGhhZF9lbHNlX2VuZGlmID09IGhhZF9uZWl0aGVyKQogICB7CiAgIGlmICghcmVh
ZF9jb21tYW5kKHBwdHIsIGxhc3RjbWRwdHIpKSByZXR1cm4gRkFMU0U7CiAgICpwcHRyID0gbmV4
dHNpZ2NoYXIoKnBwdHIsIFRSVUUpOwpAQCAtMTQyNSwxMCArMTQyNyw3IEBACiB0ZXN0X2NvbmRp
dGlvbihjb25kaXRpb25fYmxvY2sgKmMsIEJPT0wgdG9wbGV2ZWwpCiB7CiBCT09MIHlpZWxkID0g
RkFMU0U7Ci1jb25zdCBwY3JlICpyZTsKLXVzY2hhciAqZXhwWzJdLCAqcCwgKnBwOwotY29uc3Qg
dXNjaGFyICpyZWdjb21wX2Vycm9yID0gTlVMTDsKLWludCByZWdjb21wX2Vycm9yX29mZnNldDsK
K2NvbnN0IHVzY2hhciAqZXhwWzJdLCAqIHAsICogcHA7CiBpbnQgdmFsWzJdOwogaW50IGk7CiAK
QEAgLTE0ODYsOCArMTQ4NSw3IEBACiAKICAgY2FzZSBjb25kX2ZvcmFueWFkZHJlc3M6CiAgIHAg
PSBjLT5sZWZ0LnU7Ci0gIHBwID0gZXhwYW5kX3N0cmluZyhwKTsKLSAgaWYgKHBwID09IE5VTEwp
CisgIGlmICghKHBwID0gZXhwYW5kX2NzdHJpbmcocCkpKQogICAgIHsKICAgICAqZXJyb3JfcG9p
bnRlciA9IHN0cmluZ19zcHJpbnRmKCJmYWlsZWQgdG8gZXhwYW5kIFwiJXNcIiBpbiAiCiAgICAg
ICAiZmlsdGVyIGZpbGU6ICVzIiwgcCwgZXhwYW5kX3N0cmluZ19tZXNzYWdlKTsKQEAgLTE0OTcs
MTkgKzE0OTUsMTcgQEAKICAgeWllbGQgPSBGQUxTRTsKICAgZi5wYXJzZV9hbGxvd19ncm91cCA9
IFRSVUU7ICAgICAvKiBBbGxvdyBncm91cCBzeW50YXggKi8KIAotICB3aGlsZSAoKnBwICE9IDAp
CisgIHdoaWxlICgqcHApCiAgICAgewogICAgIHVzY2hhciAqZXJyb3I7CiAgICAgaW50IHN0YXJ0
LCBlbmQsIGRvbWFpbjsKLSAgICBpbnQgc2F2ZWVuZDsKKyAgICB1c2NoYXIgKiBzOwogCiAgICAg
cCA9IHBhcnNlX2ZpbmRfYWRkcmVzc19lbmQocHAsIEZBTFNFKTsKLSAgICBzYXZlZW5kID0gKnA7
CisgICAgcyA9IHN0cmluZ19jb3B5bihwcCwgcCAtIHBwKTsKIAotICAgICpwID0gMDsKICAgICBm
aWx0ZXJfdGhpc2FkZHJlc3MgPQotICAgICAgcGFyc2VfZXh0cmFjdF9hZGRyZXNzKHBwLCAmZXJy
b3IsICZzdGFydCwgJmVuZCwgJmRvbWFpbiwgRkFMU0UpOwotICAgICpwID0gc2F2ZWVuZDsKKyAg
ICAgIHBhcnNlX2V4dHJhY3RfYWRkcmVzcyhzLCAmZXJyb3IsICZzdGFydCwgJmVuZCwgJmRvbWFp
biwgRkFMU0UpOwogCiAgICAgaWYgKGZpbHRlcl90aGlzYWRkcmVzcykKICAgICAgIHsKQEAgLTE1
MjMsNyArMTUxOSw3IEBACiAgICAgICB9CiAKICAgICBpZiAoeWllbGQpIGJyZWFrOwotICAgIGlm
IChzYXZlZW5kID09IDApIGJyZWFrOworICAgIGlmICghKnApIGJyZWFrOwogICAgIHBwID0gcCAr
IDE7CiAgICAgfQogCkBAIC0xNTM4LDggKzE1MzQsNyBAQAogICBwID0gYy0+bGVmdC51OwogICBm
b3IgKGkgPSAwOyBpIDwgMjsgaSsrKQogICAgIHsKLSAgICBleHBbaV0gPSBleHBhbmRfc3RyaW5n
KHApOwotICAgIGlmIChleHBbaV0gPT0gTlVMTCkKKyAgICBpZiAoIShleHBbaV0gPSBleHBhbmRf
Y3N0cmluZyhwKSkpCiAgICAgICB7CiAgICAgICAqZXJyb3JfcG9pbnRlciA9IHN0cmluZ19zcHJp
bnRmKCJmYWlsZWQgdG8gZXhwYW5kIFwiJXNcIiBpbiAiCiAgICAgICAgICJmaWx0ZXIgZmlsZTog
JXMiLCBwLCBleHBhbmRfc3RyaW5nX21lc3NhZ2UpOwpAQCAtMTU2MSw3ICsxNTU2LDcgQEAKICAg
ICBicmVhazsKIAogICAgIGNhc2UgY29uZF9jb250YWluczoKLSAgICB5aWVsZCA9IHN0cnN0cmlj
KGV4cFswXSwgZXhwWzFdLCBGQUxTRSkgIT0gTlVMTDsKKyAgICB5aWVsZCA9IHN0cnN0cmljX2Mo
ZXhwWzBdLCBleHBbMV0sIEZBTFNFKSAhPSBOVUxMOwogICAgIGJyZWFrOwogCiAgICAgY2FzZSBj
b25kX0NPTlRBSU5TOgpAQCAtMTU4MCwzNCArMTU3NSw0MyBAQAogICAgIGNhc2UgY29uZF9FTkRT
OgogICAgICAgewogICAgICAgaW50IGxlbiA9IFVzdHJsZW4oZXhwWzFdKTsKLSAgICAgIHVzY2hh
ciAqcyA9IGV4cFswXSArIFVzdHJsZW4oZXhwWzBdKSAtIGxlbjsKLSAgICAgIHlpZWxkID0gKHMg
PCBleHBbMF0pPyBGQUxTRSA6Ci0gICAgICAgICgoYy0+dHlwZSA9PSBjb25kX2VuZHMpPyBzdHJj
bXBpYyhzLCBleHBbMV0pIDogVXN0cmNtcChzLCBleHBbMV0pKSA9PSAwOworICAgICAgY29uc3Qg
dXNjaGFyICpzID0gZXhwWzBdICsgVXN0cmxlbihleHBbMF0pIC0gbGVuOworICAgICAgeWllbGQg
PSBzIDwgZXhwWzBdCisJPyBGQUxTRQorCTogKGMtPnR5cGUgPT0gY29uZF9lbmRzID8gc3RyY21w
aWMocywgZXhwWzFdKSA6IFVzdHJjbXAocywgZXhwWzFdKSkgPT0gMDsKICAgICAgIH0KICAgICBi
cmVhazsKIAogICAgIGNhc2UgY29uZF9tYXRjaGVzOgogICAgIGNhc2UgY29uZF9NQVRDSEVTOgot
ICAgIGlmICgoZmlsdGVyX3Rlc3QgIT0gRlRFU1RfTk9ORSAmJiBkZWJ1Z19zZWxlY3RvciAhPSAw
KSB8fAotICAgICAgICAoZGVidWdfc2VsZWN0b3IgJiBEX2ZpbHRlcikgIT0gMCkKICAgICAgIHsK
LSAgICAgIGRlYnVnX3ByaW50Zl9pbmRlbnQoIk1hdGNoIGV4cGFuZGVkIGFyZ3VtZW50czpcbiIp
OwotICAgICAgZGVidWdfcHJpbnRmX2luZGVudCgiICBTdWJqZWN0ID0gJXNcbiIsIGV4cFswXSk7
Ci0gICAgICBkZWJ1Z19wcmludGZfaW5kZW50KCIgIFBhdHRlcm4gPSAlc1xuIiwgZXhwWzFdKTsK
LSAgICAgIH0KKyAgICAgIGNvbnN0IHBjcmUyX2NvZGUgKnJlOworICAgICAgaW50IGVycjsKKyAg
ICAgIFBDUkUyX1NJWkUgb2Zmc2V0OwogCi0gICAgaWYgKCEocmUgPSBwY3JlX2NvbXBpbGUoQ1Mg
ZXhwWzFdLAotICAgICAgUENSRV9DT1BUIHwgKChjLT50eXBlID09IGNvbmRfbWF0Y2hlcyk/IFBD
UkVfQ0FTRUxFU1MgOiAwKSwKLSAgICAgIENDU1MgJnJlZ2NvbXBfZXJyb3IsICZyZWdjb21wX2Vy
cm9yX29mZnNldCwgTlVMTCkpKQotICAgICAgewotICAgICAgKmVycm9yX3BvaW50ZXIgPSBzdHJp
bmdfc3ByaW50ZigiZXJyb3Igd2hpbGUgY29tcGlsaW5nICIKLSAgICAgICAgInJlZ3VsYXIgZXhw
cmVzc2lvbiBcIiVzXCI6ICVzIGF0IG9mZnNldCAlZCIsCi0gICAgICAgIGV4cFsxXSwgcmVnY29t
cF9lcnJvciwgcmVnY29tcF9lcnJvcl9vZmZzZXQpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAg
ICAgfQorICAgICAgaWYgKChmaWx0ZXJfdGVzdCAhPSBGVEVTVF9OT05FICYmIGRlYnVnX3NlbGVj
dG9yICE9IDApIHx8CisJICAoZGVidWdfc2VsZWN0b3IgJiBEX2ZpbHRlcikgIT0gMCkKKwl7CisJ
ZGVidWdfcHJpbnRmX2luZGVudCgiTWF0Y2ggZXhwYW5kZWQgYXJndW1lbnRzOlxuIik7CisJZGVi
dWdfcHJpbnRmX2luZGVudCgiICBTdWJqZWN0ID0gJXNcbiIsIGV4cFswXSk7CisJZGVidWdfcHJp
bnRmX2luZGVudCgiICBQYXR0ZXJuID0gJXNcbiIsIGV4cFsxXSk7CisJfQogCi0gICAgeWllbGQg
PSByZWdleF9tYXRjaF9hbmRfc2V0dXAocmUsIGV4cFswXSwgUENSRV9FT1BULCAtMSk7Ci0gICAg
YnJlYWs7CisgICAgICBpZiAoIShyZSA9IHBjcmUyX2NvbXBpbGUoKFBDUkUyX1NQVFIpZXhwWzFd
LCBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsCisJCSAgUENSRV9DT1BUIHwgKGMtPnR5cGUgPT0gY29u
ZF9tYXRjaGVzID8gUENSRTJfQ0FTRUxFU1MgOiAwKSwKKwkJICAmZXJyLCAmb2Zmc2V0LCBwY3Jl
X2NtcF9jdHgpKSkKKwl7CisJdXNjaGFyIGVycmJ1ZlsxMjhdOworCXBjcmUyX2dldF9lcnJvcl9t
ZXNzYWdlKGVyciwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CisJKmVycm9yX3BvaW50ZXIgPSBz
dHJpbmdfc3ByaW50ZigiZXJyb3Igd2hpbGUgY29tcGlsaW5nICIKKwkgICJyZWd1bGFyIGV4cHJl
c3Npb24gXCIlc1wiOiAlcyBhdCBvZmZzZXQgJWxkIiwKKwkgIGV4cFsxXSwgZXJyYnVmLCAobG9u
ZylvZmZzZXQpOworCXJldHVybiBGQUxTRTsKKwl9CisKKyAgICAgIHlpZWxkID0gcmVnZXhfbWF0
Y2hfYW5kX3NldHVwKHJlLCBleHBbMF0sIFBDUkVfRU9QVCwgLTEpOworICAgICAgYnJlYWs7Cisg
ICAgICB9CiAKICAgICAvKiBGb3IgYWJvdmUgYW5kIGJlbG93LCBjb252ZXJ0IHRoZSBzdHJpbmdz
IHRvIG51bWJlcnMgKi8KIApAQCAtMTY4NiwxNyArMTY5MCwxNiBAQAogCiAgIGZvciAoaSA9IDA7
IGkgPCAoY29tbWFuZF9leHBhcmdfY291bnRbY29tbWFuZHMtPmNvbW1hbmRdICYgMTUpOyBpKysp
CiAgICAgewotICAgIHVzY2hhciAqc3MgPSBjb21tYW5kcy0+YXJnc1tpXS51OworICAgIGNvbnN0
IHVzY2hhciAqc3MgPSBjb21tYW5kcy0+YXJnc1tpXS51OwogICAgIGlmICghc3MpCiAgICAgICBl
eHBhcmdzW2ldID0gTlVMTDsKLSAgICBlbHNlCi0gICAgICBpZiAoIShleHBhcmdzW2ldID0gZXhw
YW5kX3N0cmluZyhzcykpKQotICAgICAgICB7Ci0gICAgICAgICplcnJvcl9wb2ludGVyID0gc3Ry
aW5nX3NwcmludGYoImZhaWxlZCB0byBleHBhbmQgXCIlc1wiIGluICIKLSAgICAgICAgICAiJXMg
Y29tbWFuZDogJXMiLCBzcywgY29tbWFuZF9saXN0W2NvbW1hbmRzLT5jb21tYW5kXSwKLSAgICAg
ICAgICBleHBhbmRfc3RyaW5nX21lc3NhZ2UpOwotICAgICAgICByZXR1cm4gRkZfRVJST1I7Ci0g
ICAgICAgIH0KKyAgICBlbHNlIGlmICghKGV4cGFyZ3NbaV0gPSBleHBhbmRfY3N0cmluZyhzcykp
KQorICAgICAgeworICAgICAgKmVycm9yX3BvaW50ZXIgPSBzdHJpbmdfc3ByaW50ZigiZmFpbGVk
IHRvIGV4cGFuZCBcIiVzXCIgaW4gIgorCSIlcyBjb21tYW5kOiAlcyIsIHNzLCBjb21tYW5kX2xp
c3RbY29tbWFuZHMtPmNvbW1hbmRdLAorCWV4cGFuZF9zdHJpbmdfbWVzc2FnZSk7CisgICAgICBy
ZXR1cm4gRkZfRVJST1I7CisgICAgICB9CiAgICAgfQogCiAgIC8qIE5vdyBzd2l0Y2ggZm9yIGVh
Y2ggY29tbWFuZCwgc2V0dGluZyB0aGUgImRlbGl2ZXJlZCIgZmxhZyBpZiBhbnkgb2YgdGhlbQpA
QCAtMTg5Miw3ICsxODk1LDcgQEAKIAlpZiAoZXhwYW5kX25tYXggPj0gMCB8fCBmaWx0ZXJfdGhp
c2FkZHJlc3MgIT0gTlVMTCkKIAkgIHsKIAkgIGludCBlY291bnQgPSBleHBhbmRfbm1heCA+PSAw
ID8gZXhwYW5kX25tYXggOiAtMTsKLQkgIHVzY2hhciAqKnNzID0gc3RvcmVfZ2V0KHNpemVvZih1
c2NoYXIgKikgKiAoZWNvdW50ICsgMyksIEZBTFNFKTsKKwkgIHVzY2hhciAqKiBzcyA9IHN0b3Jl
X2dldChzaXplb2YodXNjaGFyICopICogKGVjb3VudCArIDMpLCBHRVRfVU5UQUlOVEVEKTsKIAog
CSAgYWRkci0+cGlwZV9leHBhbmRuID0gc3M7CiAJICBpZiAoIWZpbHRlcl90aGlzYWRkcmVzcykg
ZmlsdGVyX3RoaXNhZGRyZXNzID0gVVMiIjsKQEAgLTE5NTEsNyArMTk1NCw3IEBACiAJICAobG9u
ZyBpbnQpZ2V0ZXVpZCgpKTsKIAlpZiAobG9nX2ZkIDwgMCkKIAkgIHsKLQkgIGlmIChsb2dfZmls
ZW5hbWUgPT0gTlVMTCkKKwkgIGlmICghbG9nX2ZpbGVuYW1lKQogCSAgICB7CiAJICAgICplcnJv
cl9wb2ludGVyID0gVVMiYXR0ZW1wdCB0byBvYmV5IFwibG9nd3JpdGVcIiBjb21tYW5kICIKIAkg
ICAgICAid2l0aG91dCBhIHByZXZpb3VzIFwibG9nZmlsZVwiIjsKQEAgLTE5NjAsNyArMTk2Myw3
IEBACiAJICBsb2dfZmQgPSBVb3Blbihsb2dfZmlsZW5hbWUsIE9fQ1JFQVR8T19BUFBFTkR8T19X
Uk9OTFksIGxvZ19tb2RlKTsKIAkgIGlmIChsb2dfZmQgPCAwKQogCSAgICB7Ci0JICAgICplcnJv
cl9wb2ludGVyID0gc3RyaW5nX29wZW5fZmFpbGVkKGVycm5vLCAiZmlsdGVyIGxvZyBmaWxlIFwi
JXNcIiIsCisJICAgICplcnJvcl9wb2ludGVyID0gc3RyaW5nX29wZW5fZmFpbGVkKCJmaWx0ZXIg
bG9nIGZpbGUgXCIlc1wiIiwKIAkgICAgICBsb2dfZmlsZW5hbWUpOwogCSAgICByZXR1cm4gRkZf
RVJST1I7CiAJICAgIH0KQEAgLTE5NzQsOSArMTk3Nyw4IEBACiAJICB9CiAJfQogICAgICAgZWxz
ZQotCXsKLQlERUJVRyhEX2ZpbHRlcikgZGVidWdfcHJpbnRmX2luZGVudCgic2tpcHBpbmcgbG9n
d3JpdGUgKHZlcmlmeWluZyBvciB0ZXN0aW5nKVxuIik7Ci0JfQorCURFQlVHKERfZmlsdGVyKQor
CSAgZGVidWdfcHJpbnRmX2luZGVudCgic2tpcHBpbmcgbG9nd3JpdGUgKHZlcmlmeWluZyBvciB0
ZXN0aW5nKVxuIik7CiAgICAgICBicmVhazsKIAogICAgICAgLyogSGVhZGVyIGFkZGl0aW9uIGFu
ZCByZW1vdmFsIGlzIGF2YWlsYWJsZSBvbmx5IGluIHRoZSBzeXN0ZW0gZmlsdGVyLiBUaGUKQEAg
LTE5ODksMTYgKzE5OTEsMTkgQEAKIAlzID0gZXhwYXJnc1swXTsKIAogCWlmIChmaWx0ZXJfdGVz
dCAhPSBGVEVTVF9OT05FKQotCSAgcHJpbnRmKCJIZWFkZXJzICVzIFwiJXNcIlxuIiwgKHN1YnR5
cGUgPT0gVFJVRSk/ICJhZGQiIDoKLQkgICAgKHN1YnR5cGUgPT0gRkFMU0UpPyAicmVtb3ZlIiA6
ICJjaGFyc2V0Iiwgc3RyaW5nX3ByaW50aW5nKHMpKTsKKwkgIHByaW50ZigiSGVhZGVycyAlcyBc
IiVzXCJcbiIsCisJICAgIHN1YnR5cGUgPT0gVFJVRSA/ICJhZGQiCisJICAgIDogc3VidHlwZSA9
PSBGQUxTRSA/ICJyZW1vdmUiCisJICAgIDogImNoYXJzZXQiLAorCSAgICBzdHJpbmdfcHJpbnRp
bmcocykpOwogCiAJaWYgKHN1YnR5cGUgPT0gVFJVRSkKIAkgIHsKIAkgIHdoaWxlIChpc3NwYWNl
KCpzKSkgcysrOwotCSAgaWYgKHNbMF0gIT0gMCkKKwkgIGlmICgqcykKIAkgICAgewotCSAgICBo
ZWFkZXJfYWRkKGh0eXBlX290aGVyLCAiJXMlcyIsIHMsIChzW1VzdHJsZW4ocyktMV0gPT0gJ1xu
Jyk/Ci0JICAgICAgIiIgOiAiXG4iKTsKKwkgICAgaGVhZGVyX2FkZChodHlwZV9vdGhlciwgIiVz
JXMiLCBzLAorCSAgICAgIHNbVXN0cmxlbihzKS0xXSA9PSAnXG4nID8gIiIgOiAiXG4iKTsKIAkg
ICAgaGVhZGVyX2xhc3QtPnR5cGUgPSBoZWFkZXJfY2hlY2tuYW1lKGhlYWRlcl9sYXN0LCBGQUxT
RSk7CiAJICAgIGlmIChoZWFkZXJfbGFzdC0+dHlwZSA+PSAnYScpIGhlYWRlcl9sYXN0LT50eXBl
ID0gaHR5cGVfb3RoZXI7CiAJICAgIH0KQEAgLTIwMDcsMTggKzIwMTIsMTYgQEAKIAllbHNlIGlm
IChzdWJ0eXBlID09IEZBTFNFKQogCSAgewogCSAgaW50IHNlcCA9IDA7Ci0JICB1c2NoYXIgKnNz
OwotCSAgY29uc3QgdXNjaGFyICpsaXN0ID0gczsKLQkgIHVzY2hhciBidWZmZXJbMTI4XTsKLQkg
IHdoaWxlICgoc3MgPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNlcCwgYnVmZmVyLCBzaXpl
b2YoYnVmZmVyKSkpCi0JCSAhPSBOVUxMKQorCSAgY29uc3QgdXNjaGFyICogbGlzdCA9IHM7CisK
KwkgIGZvciAodXNjaGFyICogc3M7IHNzID0gc3RyaW5nX25leHRpbmxpc3QoJmxpc3QsICZzZXAs
IE5VTEwsIDApOyApCiAJICAgIGhlYWRlcl9yZW1vdmUoMCwgc3MpOwogCSAgfQogCiAJLyogVGhp
cyBzZXR0aW5nIGxhc3RzIG9ubHkgd2hpbGUgdGhlIGZpbHRlciBpcyBydW5uaW5nOyBvbiBleGl0
LCB0aGUKIAl2YXJpYWJsZSBpcyByZXNldCB0byB0aGUgcHJldmlvdXMgdmFsdWUuICovCiAKLQll
bHNlIGhlYWRlcnNfY2hhcnNldCA9IHM7CS8qWFhYIGxvc2VzIHRyYWNrIG9mIGNvbnN0ICovCisJ
ZWxzZSBoZWFkZXJzX2NoYXJzZXQgPSBzOwogCX0KICAgICAgIGJyZWFrOwogCkBAIC0yMDQxLDE4
ICsyMDQ0LDIwIEBACiAgICAgICBmZl9uYW1lID0gVVMiZnJlZXplIjsKICAgICAgIGZmX3JldCA9
IEZGX0ZSRUVaRTsKIAotICAgICAgREVGRVJGUkVFWkVGQUlMOgotICAgICAgZm1zZyA9IGV4cGFy
Z3NbMF07CQkvKlhYWCBsb3NlcyB0cmFjayBvZiBjb25zdCAqLwotICAgICAgaWYgKFVzdHJsZW4o
Zm1zZykgPiAxMDI0KSBVc3RyY3B5KGZtc2cgKyAxMDAwLCBVUyIgLi4uICh0cnVuY2F0ZWQpIik7
Ci0gICAgICBmbXNnID0gVVMgc3RyaW5nX3ByaW50aW5nKGZtc2cpOwotICAgICAgKmVycm9yX3Bv
aW50ZXIgPSBmbXNnOworICAgIERFRkVSRlJFRVpFRkFJTDoKKyAgICAgICplcnJvcl9wb2ludGVy
ID0gZm1zZyA9IFVTIHN0cmluZ19wcmludGluZyhVc3RybGVuKGV4cGFyZ3NbMF0pID4gMTAyNAor
CT8gc3RyaW5nX3NwcmludGYoIiUuMTAwMHMgLi4uICh0cnVuY2F0ZWQpIiwgZXhwYXJnc1swXSkK
Kwk6IHN0cmluZ19jb3B5KGV4cGFyZ3NbMF0pKTsKKyAgICAgIGZvcih1c2NoYXIgKiBzID0gZm1z
ZzsgKnM7IHMrKykKKwlpZiAoIXNbMV0gJiYgKnMgPT0gJ1xuJykgeyAqcyA9ICdcMCc7IGJyZWFr
OyB9CS8qIGRyb3AgdHJhaWxpbmcgbmV3bGluZSAqLwogCiAgICAgICBpZiAoZmlsdGVyX3Rlc3Qg
IT0gRlRFU1RfTk9ORSkKIAl7CiAJaW5kZW50KCk7CiAJcHJpbnRmKCIlYyVzIHRleHQgXCIlc1wi
XG4iLCB0b3VwcGVyKGZmX25hbWVbMF0pLCBmZl9uYW1lKzEsIGZtc2cpOwogCX0KLSAgICAgIGVs
c2UgREVCVUcoRF9maWx0ZXIpIGRlYnVnX3ByaW50Zl9pbmRlbnQoIkZpbHRlcjogJXMgXCIlc1wi
XG4iLCBmZl9uYW1lLCBmbXNnKTsKKyAgICAgIGVsc2UKKyAgICAgICAgREVCVUcoRF9maWx0ZXIp
IGRlYnVnX3ByaW50Zl9pbmRlbnQoIkZpbHRlcjogJXMgXCIlc1wiXG4iLCBmZl9uYW1lLCBmbXNn
KTsKICAgICAgIHJldHVybiBmZl9yZXQ7CiAKICAgICBjYXNlIGZpbmlzaF9jb21tYW5kOgpAQCAt
MjA2MiwxOSArMjA2NywxOSBAQAogCXByaW50ZigiJXNpbmlzaFxuIiwgKGNvbW1hbmRzLT5zZWVu
KT8gIlNlZW4gZiIgOiAiRiIpOwogCX0KICAgICAgIGVsc2UKLQl7CiAJREVCVUcoRF9maWx0ZXIp
IGRlYnVnX3ByaW50Zl9pbmRlbnQoIkZpbHRlcjogJXNmaW5pc2hcbiIsCi0JICAoY29tbWFuZHMt
PnNlZW4pPyAiIFNlZW4gIiA6ICIiKTsKLQl9CisJICBjb21tYW5kcy0+c2VlbiA/ICIgU2VlbiAi
IDogIiIpOwogICAgICAgZmluaXNoX29iZXllZCA9IFRSVUU7Ci0gICAgICByZXR1cm4gZmlsdGVy
X2RlbGl2ZXJlZD8gRkZfREVMSVZFUkVEIDogRkZfTk9UREVMSVZFUkVEOworICAgICAgcmV0dXJu
IGZpbHRlcl9kZWxpdmVyZWQgPyBGRl9ERUxJVkVSRUQgOiBGRl9OT1RERUxJVkVSRUQ7CiAKICAg
ICBjYXNlIGlmX2NvbW1hbmQ6CiAJewogCXVzY2hhciAqc2F2ZV9hZGRyZXNzID0gZmlsdGVyX3Ro
aXNhZGRyZXNzOwogCWludCBvayA9IEZGX0RFTElWRVJFRDsKIAljb25kaXRpb25fdmFsdWUgPSB0
ZXN0X2NvbmRpdGlvbihjb21tYW5kcy0+YXJnc1swXS5jLCBUUlVFKTsKLQlpZiAoKmVycm9yX3Bv
aW50ZXIgIT0gTlVMTCkgb2sgPSBGRl9FUlJPUjsgZWxzZQorCWlmICgqZXJyb3JfcG9pbnRlcikK
KwkgIG9rID0gRkZfRVJST1I7CisJZWxzZQogCSAgewogCSAgb3V0cHV0X2luZGVudCArPSAyOwog
CSAgb2sgPSBpbnRlcnByZXRfY29tbWFuZHMoY29tbWFuZHMtPmFyZ3NbY29uZGl0aW9uX3ZhbHVl
PyAxOjJdLmYsCkBAIC0yMDgyLDcgKzIwODcsNyBAQAogCSAgb3V0cHV0X2luZGVudCAtPSAyOwog
CSAgfQogCWZpbHRlcl90aGlzYWRkcmVzcyA9IHNhdmVfYWRkcmVzczsKLQlpZiAoZmluaXNoX29i
ZXllZCB8fCAob2sgIT0gRkZfREVMSVZFUkVEICYmIG9rICE9IEZGX05PVERFTElWRVJFRCkpCisJ
aWYgKGZpbmlzaF9vYmV5ZWQgIHx8ICBvayAhPSBGRl9ERUxJVkVSRUQgJiYgb2sgIT0gRkZfTk9U
REVMSVZFUkVEKQogCSAgcmV0dXJuIG9rOwogCX0KICAgICAgIGJyZWFrOwpAQCAtMjA5NCw3ICsy
MDk5LDcgQEAKIAogICAgIGNhc2UgbWFpbF9jb21tYW5kOgogICAgIGNhc2UgdmFjYXRpb25fY29t
bWFuZDoKLQlpZiAocmV0dXJuX3BhdGggPT0gTlVMTCB8fCByZXR1cm5fcGF0aFswXSA9PSAwKQor
CWlmICghcmV0dXJuX3BhdGggfHwgISpyZXR1cm5fcGF0aCkKIAkgIHsKIAkgIGlmIChmaWx0ZXJf
dGVzdCAhPSBGVEVTVF9OT05FKQogCSAgICBwcmludGYoIiVzIGNvbW1hbmQgaWdub3JlZCBiZWNh
dXNlIHJldHVybl9wYXRoIGlzIGVtcHR5XG4iLApAQCAtMjEyNCwxMiArMjEyOSwxMSBAQAogCiAJ
Zm9yIChpID0gMDsgaSA8IE1BSUxBUkdTX1NUUklOR19DT1VOVDsgaSsrKQogCSAgewotCSAgdXNj
aGFyICpwOwogCSAgY29uc3QgdXNjaGFyICpzID0gZXhwYXJnc1tpXTsKIAotCSAgaWYgKHMgPT0g
TlVMTCkgY29udGludWU7CisJICBpZiAoIXMpIGNvbnRpbnVlOwogCi0JICBpZiAoaSAhPSBtYWls
YXJnX2luZGV4X3RleHQpIGZvciAocCA9IHM7ICpwICE9IDA7IHArKykKKwkgIGlmIChpICE9IG1h
aWxhcmdfaW5kZXhfdGV4dCkgZm9yIChjb25zdCB1c2NoYXIgKiBwID0gczsgKnA7IHArKykKIAkg
ICAgewogCSAgICBpbnQgYyA9ICpwOwogCSAgICBpZiAoaSA+IG1haWxhcmdfaW5kZXhfdGV4dCkK
QEAgLTIxNTksMTIgKzIxNjMsMTIgQEAKIAogCSAgICAgIGVsc2UKIAkJewotCQl1c2NoYXIgKnBw
OworCQljb25zdCB1c2NoYXIgKnBwOwogCQlmb3IgKHBwID0gcCArIDE7OyBwcCsrKQogCQkgIHsK
IAkJICBjID0gKnBwOwogCQkgIGlmIChjID09ICc6JyAmJiBwcCAhPSBwICsgMSkgYnJlYWs7Ci0J
CSAgaWYgKGMgPT0gMCB8fCBjID09ICc6JyB8fCBpc3NwYWNlKCpwcCkpCisJCSAgaWYgKCFjIHx8
IGMgPT0gJzonIHx8IGlzc3BhY2UoYykpCiAJCSAgICB7CiAJCSAgICAqZXJyb3JfcG9pbnRlciA9
IHN0cmluZ19zcHJpbnRmKCJcXG4gbm90IGZvbGxvd2VkIGJ5IHNwYWNlIG9yICIKIAkJICAgICAg
InZhbGlkIGhlYWRlciBuYW1lIGluIFwiJS4xMDI0c1wiIGluICVzIGNvbW1hbmQiLApAQCAtMjE3
OSwxNCArMjE4MywxNCBAQAogCiAJICAvKiBUaGUgc3RyaW5nIGlzIE9LICovCiAKLQkgIGNvbW1h
bmRzLT5hcmdzW2ldLnUgPSBzOwkvKlhYWCBsb3NlcyB0cmFjayBvZiBjb25zdCAqLworCSAgY29t
bWFuZHMtPmFyZ3NbaV0udSA9IHM7CiAJICB9CiAKIAkvKiBQcm9jZWVkIHdpdGggbWFpbCBvciB2
YWNhdGlvbiBjb21tYW5kICovCiAKIAlpZiAoZmlsdGVyX3Rlc3QgIT0gRlRFU1RfTk9ORSkKIAkg
IHsKLQkgIHVzY2hhciAqdG8gPSBjb21tYW5kcy0+YXJnc1ttYWlsYXJnX2luZGV4X3RvXS51Owor
CSAgY29uc3QgdXNjaGFyICp0byA9IGNvbW1hbmRzLT5hcmdzW21haWxhcmdfaW5kZXhfdG9dLnU7
CiAJICBpbmRlbnQoKTsKIAkgIHByaW50ZigiJXNhaWwgdG86ICVzJXMlc1xuIiwgKGNvbW1hbmRz
LT5zZWVuKT8gIlNlZW4gbSIgOiAiTSIsCiAJICAgIHRvID8gdG8gOiBVUyI8ZGVmYXVsdD4iLApA
QCAtMjE5NCw3ICsyMTk4LDcgQEAKIAkgICAgY29tbWFuZHMtPm5vZXJyb3IgPyAiIChub2Vycm9y
KSIgOiAiIik7CiAJICBmb3IgKGkgPSAxOyBpIDwgTUFJTEFSR1NfU1RSSU5HX0NPVU5UOyBpKysp
CiAJICAgIHsKLQkgICAgdXNjaGFyICphcmcgPSBjb21tYW5kcy0+YXJnc1tpXS51OworCSAgICBj
b25zdCB1c2NoYXIgKmFyZyA9IGNvbW1hbmRzLT5hcmdzW2ldLnU7CiAJICAgIGlmIChhcmcpCiAJ
ICAgICAgewogCSAgICAgIGludCBsZW4gPSBVc3RybGVuKG1haWxhcmdzW2ldKTsKQEAgLTIyMTAs
MTUgKzIyMTQsMjIgQEAKIAkgIH0KIAllbHNlCiAJICB7Ci0JICB1c2NoYXIgKnR0OwotCSAgdXNj
aGFyICp0byA9IGNvbW1hbmRzLT5hcmdzW21haWxhcmdfaW5kZXhfdG9dLnU7CisJICBjb25zdCB1
c2NoYXIgKnR0OworCSAgY29uc3QgdXNjaGFyICp0byA9IGNvbW1hbmRzLT5hcmdzW21haWxhcmdf
aW5kZXhfdG9dLnU7CiAJICBnc3RyaW5nICogbG9nX2FkZHIgPSBOVUxMOwogCiAJICBpZiAoIXRv
KSB0byA9IGV4cGFuZF9zdHJpbmcoVVMiJHJlcGx5X2FkZHJlc3MiKTsKIAkgIHdoaWxlIChpc3Nw
YWNlKCp0bykpIHRvKys7CiAKLQkgIGZvciAodHQgPSB0bzsgKnR0ICE9IDA7IHR0KyspICAgICAv
KiBHZXQgcmlkIG9mIG5ld2xpbmVzICovCi0JICAgIGlmICgqdHQgPT0gJ1xuJykgKnR0ID0gJyAn
OworCSAgZm9yICh0dCA9IHRvOyAqdHQ7IHR0KyspICAgICAvKiBHZXQgcmlkIG9mIG5ld2xpbmVz
ICovCisJICAgIGlmICgqdHQgPT0gJ1xuJykKKwkgICAgICB7CisJICAgICAgdXNjaGFyICogcyA9
IHN0cmluZ19jb3B5KHRvKTsKKwkgICAgICBmb3IgKHVzY2hhciAqIHNzID0gczsgKnNzOyBzcysr
KQorCQlpZiAoKnNzID09ICdcbicpICpzcyA9ICcgJzsKKwkgICAgICB0byA9IHM7CisJICAgICAg
YnJlYWs7CisJICAgICAgfQogCiAJICBERUJVRyhEX2ZpbHRlcikKIAkgICAgewpAQCAtMjIyOSw4
ICsyMjQwLDggQEAKIAkgICAgICBjb21tYW5kcy0+bm9lcnJvciA/ICIgKG5vZXJyb3IpIiA6ICIi
KTsKIAkgICAgZm9yIChpID0gMTsgaSA8IE1BSUxBUkdTX1NUUklOR19DT1VOVDsgaSsrKQogCSAg
ICAgIHsKLQkgICAgICB1c2NoYXIgKmFyZyA9IGNvbW1hbmRzLT5hcmdzW2ldLnU7Ci0JICAgICAg
aWYgKGFyZyAhPSBOVUxMKQorCSAgICAgIGNvbnN0IHVzY2hhciAqYXJnID0gY29tbWFuZHMtPmFy
Z3NbaV0udTsKKwkgICAgICBpZiAoYXJnKQogCQl7CiAJCWludCBsZW4gPSBVc3RybGVuKG1haWxh
cmdzW2ldKTsKIAkJd2hpbGUgKGxlbisrIDwgMTUpIGRlYnVnX3ByaW50Zl9pbmRlbnQoIiAiKTsK
QEAgLTIyNDgsNyArMjI1OSw3IEBACiAJICBzdHJpbmcgZ2V0cyB0b28gbG9uZy4gKi8KIAogCSAg
dHQgPSB0bzsKLQkgIHdoaWxlICgqdHQgIT0gMCkKKwkgIHdoaWxlICgqdHQpCiAJICAgIHsKIAkg
ICAgdXNjaGFyICpzcyA9IHBhcnNlX2ZpbmRfYWRkcmVzc19lbmQodHQsIEZBTFNFKTsKIAkgICAg
dXNjaGFyICpyZWNpcGllbnQsICplcnJtZXNzOwpAQCAtMjI5Niw3ICsyMzA3LDcgQEAKIAkgIGFk
ZHItPm5leHQgPSAqZ2VuZXJhdGVkOwogCSAgKmdlbmVyYXRlZCA9IGFkZHI7CiAKLQkgIGFkZHIt
PnJlcGx5ID0gc3RvcmVfZ2V0KHNpemVvZihyZXBseV9pdGVtKSwgRkFMU0UpOworCSAgYWRkci0+
cmVwbHkgPSBzdG9yZV9nZXQoc2l6ZW9mKHJlcGx5X2l0ZW0pLCBHRVRfVU5UQUlOVEVEKTsKIAkg
IGFkZHItPnJlcGx5LT5mcm9tID0gTlVMTDsKIAkgIGFkZHItPnJlcGx5LT50byA9IHN0cmluZ19j
b3B5KHRvKTsKIAkgIGFkZHItPnJlcGx5LT5maWxlX2V4cGFuZCA9CkBAIC0yMzI0LDcgKzIzMzUs
NyBAQAogCiAJICBmb3IgKGkgPSAxOyBpIDwgbWFpbGFyZ3Nfc3RyaW5nX3Bhc3NlZDsgaSsrKQog
CSAgICB7Ci0JICAgIHVzY2hhciAqc3MgPSBjb21tYW5kcy0+YXJnc1tpXS51OworCSAgICBjb25z
dCB1c2NoYXIgKnNzID0gY29tbWFuZHMtPmFyZ3NbaV0udTsKIAkgICAgKihVU1MoKFVTIGFkZHIt
PnJlcGx5KSArIHJlcGx5X29mZnNldHNbaV0pKSA9CiAJICAgICAgc3MgPyBzdHJpbmdfY29weShz
cykgOiBOVUxMOwogCSAgICB9CkBAIC0yNDk3LDEzICsyNTA4LDEzIEBACiAqLwogCiBpbnQKLWZp
bHRlcl9pbnRlcnByZXQodXNjaGFyICpmaWx0ZXIsIGludCBvcHRpb25zLCBhZGRyZXNzX2l0ZW0g
KipnZW5lcmF0ZWQsCitmaWx0ZXJfaW50ZXJwcmV0KGNvbnN0IHVzY2hhciAqZmlsdGVyLCBpbnQg
b3B0aW9ucywgYWRkcmVzc19pdGVtICoqZ2VuZXJhdGVkLAogICB1c2NoYXIgKiplcnJvcikKIHsK
IGludCBpOwogaW50IHlpZWxkID0gRkZfRVJST1I7Ci11c2NoYXIgKnB0ciA9IGZpbHRlcjsKLXVz
Y2hhciAqc2F2ZV9oZWFkZXJzX2NoYXJzZXQgPSBoZWFkZXJzX2NoYXJzZXQ7Citjb25zdCB1c2No
YXIgKnB0ciA9IGZpbHRlcjsKK2NvbnN0IHVzY2hhciAqc2F2ZV9oZWFkZXJzX2NoYXJzZXQgPSBo
ZWFkZXJzX2NoYXJzZXQ7CiBmaWx0ZXJfY21kICpjb21tYW5kcyA9IE5VTEw7CiBmaWx0ZXJfY21k
ICoqbGFzdGNtZHB0ciA9ICZjb21tYW5kczsKIApkaWZmIC11ciBleGltLm9yaWcvc3JjL2ZpbHRl
cnRlc3QuYyBleGltL3NyYy9maWx0ZXJ0ZXN0LmMKLS0tIGV4aW0ub3JpZy9zcmMvZmlsdGVydGVz
dC5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9maWx0
ZXJ0ZXN0LmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsNiArMiw3
IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgog
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyog
Q29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxIC0gMjAyMiAqLwogLyogQ29w
eXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAwOSAqLwogLyogU2Vl
IHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4g
Ki8KIApAQCAtNDUsMTEgKzQ2LDExIEBACiBib2R5X2xpbmVjb3VudCA9IDA7CiBoZWFkZXJfc2l6
ZSA9IG1lc3NhZ2Vfc2l6ZTsKIAotaWYgKCFkb3RfZW5kZWQgJiYgIWZlb2Yoc3RkaW4pKQoraWYg
KCFkb3RfZW5kZWQgJiYgIXN0ZGluX2Zlb2YoKSkKICAgewogICBpZiAoIWYuZG90X2VuZHMpCiAg
ICAgewotICAgIHdoaWxlICgoY2ggPSBnZXRjKHN0ZGluKSkgIT0gRU9GKQorICAgIHdoaWxlICgo
Y2ggPSBzdGRpbl9nZXRjKEdFVENfQlVGRkVSX1VOTElNSVRFRCkpICE9IEVPRikKICAgICAgIHsK
ICAgICAgIGlmIChjaCA9PSAwKSBib2R5X3plcm9jb3VudCsrOwogICAgICAgaWYgKGNoID09ICdc
bicpIGJvZHlfbGluZWNvdW50Kys7CkBAIC02Miw3ICs2Myw3IEBACiAgIGVsc2UKICAgICB7CiAg
ICAgaW50IGNoX3N0YXRlID0gMTsKLSAgICB3aGlsZSAoKGNoID0gZ2V0YyhzdGRpbikpICE9IEVP
RikKKyAgICB3aGlsZSAoKGNoID0gc3RkaW5fZ2V0YyhHRVRDX0JVRkZFUl9VTkxJTUlURUQpKSAh
PSBFT0YpCiAgICAgICB7CiAgICAgICBpZiAoY2ggPT0gMCkgYm9keV96ZXJvY291bnQrKzsKICAg
ICAgIHN3aXRjaCAoY2hfc3RhdGUpCkBAIC05NSwxMCArOTYsMTEgQEAKICAgICAgIGlmIChzID4g
bWVzc2FnZV9ib2R5X2VuZCArIG1lc3NhZ2VfYm9keV92aXNpYmxlKSBzID0gbWVzc2FnZV9ib2R5
X2VuZDsKICAgICAgIG1lc3NhZ2Vfc2l6ZSsrOwogICAgICAgfQotICAgIFJFQURfRU5EOiBjaCA9
IGNoOyAgLyogU29tZSBjb21waWxlcnMgZG9uJ3QgbGlrZSBudWxsIHN0YXRlbWVudHMgKi8KKyAg
ICBSRUFEX0VORDogOwogICAgIH0KICAgaWYgKHMgPT0gbWVzc2FnZV9ib2R5X2VuZCB8fCBzWy0x
XSAhPSAnXG4nKSBib2R5X2xpbmVjb3VudCsrOwogICB9CitkZWJ1Z19wcmludGYoIiVzICVkXG4i
LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKIAogbWVzc2FnZV9ib2R5W2JvZHlfbGVuXSA9IDA7
CiBtZXNzYWdlX2JvZHlfc2l6ZSA9IG1lc3NhZ2Vfc2l6ZSAtIGhlYWRlcl9zaXplOwpAQCAtMTEy
LDcgKzExNCw3IEBACiAgIGludCBhYm92ZSA9IG1lc3NhZ2VfYm9keV92aXNpYmxlIC0gYmVsb3c7
CiAgIGlmIChhYm92ZSA+IDApCiAgICAgewotICAgIHVzY2hhciAqdGVtcCA9IHN0b3JlX2dldChi
ZWxvdywgVFJVRSk7CisgICAgdXNjaGFyICogdGVtcCA9IHN0b3JlX2dldChiZWxvdywgR0VUX1VO
VEFJTlRFRCk7CiAgICAgbWVtY3B5KHRlbXAsIG1lc3NhZ2VfYm9keV9lbmQsIGJlbG93KTsKICAg
ICBtZW1tb3ZlKG1lc3NhZ2VfYm9keV9lbmQsIHMrMSwgYWJvdmUpOwogICAgIG1lbWNweShtZXNz
YWdlX2JvZHlfZW5kICsgYWJvdmUsIHRlbXAsIGJlbG93KTsKQEAgLTE3OCw3ICsxODAsNyBAQAog
ICByZXR1cm4gRkFMU0U7CiAgIH0KIAotZmlsZWJ1ZiA9IHN0b3JlX2dldChzdGF0YnVmLnN0X3Np
emUgKyAxLCBpc190YWludGVkKGZpbGVuYW1lKSk7CitmaWxlYnVmID0gc3RvcmVfZ2V0KHN0YXRi
dWYuc3Rfc2l6ZSArIDEsIGZpbGVuYW1lKTsKIHJjID0gcmVhZChmZCwgZmlsZWJ1Ziwgc3RhdGJ1
Zi5zdF9zaXplKTsKICh2b2lkKWNsb3NlKGZkKTsKIApAQCAtMjUwLDcgKzI1Miw3IEBACiAvKiBG
b3IgYSBmaWx0ZXIsIHNldCB1cCB0aGUgbWVzc2FnZV9ib2R5IHZhcmlhYmxlcyBhbmQgdGhlIG1l
c3NhZ2Ugc2l6ZSBpZiB0aGlzCiBpcyB0aGUgZmlyc3QgdGltZSB0aGlzIGZ1bmN0aW9uIGhhcyBi
ZWVuIGNhbGxlZC4gKi8KIAotaWYgKG1lc3NhZ2VfYm9keSA9PSBOVUxMKSByZWFkX21lc3NhZ2Vf
Ym9keShkb3RfZW5kZWQpOworaWYgKCFtZXNzYWdlX2JvZHkpIHJlYWRfbWVzc2FnZV9ib2R5KGRv
dF9lbmRlZCk7CiAKIC8qIE5vdyBwYXNzIHRoZSBmaWx0ZXIgZmlsZSB0byB0aGUgZnVuY3Rpb24g
dGhhdCBpbnRlcnByZXRzIGl0LiBCZWNhdXNlCiBmaWx0ZXJfdGVzdCBpcyBub3QgRklMVEVSX05P
TkUsIHRoZSBpbnRlcnByZXRlciB3aWxsIG91dHB1dCBjb21tZW50cyBhYm91dCB3aGF0CkBAIC0y
NjksMTAgKzI3MSw5IEBACiAgIH0KIGVsc2UKICAgewotICB5aWVsZCA9IChmaWx0ZXJfdHlwZSA9
PSBGSUxURVJfU0lFVkUpPwotICAgIHNpZXZlX2ludGVycHJldChmaWxlYnVmLCBSRE9fUkVXUklU
RSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgJmdlbmVyYXRlZCwgJmVycm9yKQotICAgIDoKLSAg
ICBmaWx0ZXJfaW50ZXJwcmV0KGZpbGVidWYsIFJET19SRVdSSVRFLCAmZ2VuZXJhdGVkLCAmZXJy
b3IpOworICB5aWVsZCA9IGZpbHRlcl90eXBlID09IEZJTFRFUl9TSUVWRQorICAgID8gc2lldmVf
aW50ZXJwcmV0KGZpbGVidWYsIFJET19SRVdSSVRFLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAm
Z2VuZXJhdGVkLCAmZXJyb3IpCisgICAgOiBmaWx0ZXJfaW50ZXJwcmV0KGZpbGVidWYsIFJET19S
RVdSSVRFLCAmZ2VuZXJhdGVkLCAmZXJyb3IpOwogICB9CiAKIHJldHVybiB5aWVsZCAhPSBGRl9F
UlJPUjsKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9mdW5jdGlvbnMuaCBleGltL3NyYy9mdW5jdGlv
bnMuaAotLS0gZXhpbS5vcmlnL3NyYy9mdW5jdGlvbnMuaAkyMDIzLTA2LTA0IDE2OjIyOjA1LjAw
MDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvZnVuY3Rpb25zLmgJMjAyMi0wNi0yMyAxNjo0MTox
MC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJu
ZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWlu
dGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENh
bWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFp
bmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVz
ZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAKQEAgLTUzLDMxICs1MywzOSBAQAogZXh0ZXJuIHZv
aWQgICAgdGxzX2NsZWFuX2Vudih2b2lkKTsKIGV4dGVybiBCT09MICAgIHRsc19jbGllbnRfc3Rh
cnQoY2xpZW50X2Nvbm5fY3R4ICosIHNtdHBfY29ubmVjdF9hcmdzICosCiAJCSAgdm9pZCAqLCB0
bHNfc3VwcG9ydCAqLCB1c2NoYXIgKiopOworZXh0ZXJuIHZvaWQgICAgdGxzX2NsaWVudF9jcmVk
c19yZWxvYWQoQk9PTCk7CiAKIGV4dGVybiB2b2lkICAgIHRsc19jbG9zZSh2b2lkICosIGludCk7
Ci1leHRlcm4gQk9PTCAgICB0bHNfY291bGRfcmVhZCh2b2lkKTsKK2V4dGVybiBCT09MICAgIHRs
c19jb3VsZF9nZXRjKHZvaWQpOwogZXh0ZXJuIHZvaWQgICAgdGxzX2RhZW1vbl9pbml0KHZvaWQp
OworZXh0ZXJuIGludCAgICAgdGxzX2RhZW1vbl90aWNrKHZvaWQpOwogZXh0ZXJuIEJPT0wgICAg
dGxzX2Ryb3Bwcml2c192YWxpZGF0ZV9yZXF1aXJlX2NpcGhlcihCT09MKTsKIGV4dGVybiBCT09M
ICAgIHRsc19leHBvcnRfY2VydCh1c2NoYXIgKiwgc2l6ZV90LCB2b2lkICopOwogZXh0ZXJuIGlu
dCAgICAgdGxzX2Zlb2Yodm9pZCk7CiBleHRlcm4gaW50ICAgICB0bHNfZmVycm9yKHZvaWQpOwor
ZXh0ZXJuIHVzY2hhciAqdGxzX2ZpZWxkX2Zyb21fZG4odXNjaGFyICosIGNvbnN0IHVzY2hhciAq
KTsKIGV4dGVybiB2b2lkICAgIHRsc19mcmVlX2NlcnQodm9pZCAqKik7CiBleHRlcm4gaW50ICAg
ICB0bHNfZ2V0Yyh1bnNpZ25lZCk7CiBleHRlcm4gdXNjaGFyICp0bHNfZ2V0YnVmKHVuc2lnbmVk
ICopOwotZXh0ZXJuIHZvaWQgICAgdGxzX2dldF9jYWNoZSh2b2lkKTsKK2V4dGVybiB2b2lkICAg
IHRsc19nZXRfY2FjaGUodW5zaWduZWQpOworZXh0ZXJuIEJPT0wgICAgdGxzX2hhc2Modm9pZCk7
CiBleHRlcm4gQk9PTCAgICB0bHNfaW1wb3J0X2NlcnQoY29uc3QgdXNjaGFyICosIHZvaWQgKiop
OworZXh0ZXJuIEJPT0wgICAgdGxzX2lzX25hbWVfZm9yX2NlcnQoY29uc3QgdXNjaGFyICosIHZv
aWQgKik7CisjIGlmZGVmIFVTRV9PUEVOU1NMCitleHRlcm4gQk9PTCAgICB0bHNfb3BlbnNzbF9v
cHRpb25zX3BhcnNlKHVzY2hhciAqLCBsb25nICopOworIyBlbmRpZgogZXh0ZXJuIGludCAgICAg
dGxzX3JlYWQodm9pZCAqLCB1c2NoYXIgKiwgc2l6ZV90KTsKLWV4dGVybiBpbnQgICAgIHRsc19z
ZXJ2ZXJfc3RhcnQoY29uc3QgdXNjaGFyICosIHVzY2hhciAqKik7CitleHRlcm4gaW50ICAgICB0
bHNfc2VydmVyX3N0YXJ0KHVzY2hhciAqKik7CitleHRlcm4gdm9pZCAgICB0bHNfc2h1dGRvd25f
d3Iodm9pZCAqKTsKIGV4dGVybiBCT09MICAgIHRsc19zbXRwX2J1ZmZlcmVkKHZvaWQpOwogZXh0
ZXJuIGludCAgICAgdGxzX3VuZ2V0YyhpbnQpOworI2lmIGRlZmluZWQoRVhJTV9IQVZFX0lOT1RJ
RlkpIHx8IGRlZmluZWQoRVhJTV9IQVZFX0tFVkVOVCkKK2V4dGVybiB2b2lkICAgIHRsc193YXRj
aF9kaXNjYXJkX2V2ZW50KGludCk7CitleHRlcm4gdm9pZCAgICB0bHNfd2F0Y2hfaW52YWxpZGF0
ZSh2b2lkKTsKKyNlbmRpZgogZXh0ZXJuIGludCAgICAgdGxzX3dyaXRlKHZvaWQgKiwgY29uc3Qg
dXNjaGFyICosIHNpemVfdCwgQk9PTCk7CiBleHRlcm4gdXNjaGFyICp0bHNfdmFsaWRhdGVfcmVx
dWlyZV9jaXBoZXIodm9pZCk7Ci1leHRlcm4gdm9pZCAgICB0bHNfdmVyc2lvbl9yZXBvcnQoRklM
RSAqKTsKLSMgaWZkZWYgVVNFX09QRU5TU0wKLWV4dGVybiBCT09MICAgIHRsc19vcGVuc3NsX29w
dGlvbnNfcGFyc2UodXNjaGFyICosIGxvbmcgKik7Ci0jIGVuZGlmCi1leHRlcm4gdXNjaGFyICog
dGxzX2ZpZWxkX2Zyb21fZG4odXNjaGFyICosIGNvbnN0IHVzY2hhciAqKTsKLWV4dGVybiBCT09M
ICAgIHRsc19pc19uYW1lX2Zvcl9jZXJ0KGNvbnN0IHVzY2hhciAqLCB2b2lkICopOworZXh0ZXJu
IGdzdHJpbmcgKnRsc192ZXJzaW9uX3JlcG9ydChnc3RyaW5nICopOwogCiAjIGlmZGVmIFNVUFBP
UlRfREFORQogZXh0ZXJuIGludCAgICAgdGxzYV9sb29rdXAoY29uc3QgaG9zdF9pdGVtICosIGRu
c19hbnN3ZXIgKiwgQk9PTCk7CkBAIC05MCw2ICs5OCw3IEBACiAKIGV4dGVybiBhY2xfYmxvY2sg
KmFjbF9yZWFkKHVzY2hhciAqKCopKHZvaWQpLCB1c2NoYXIgKiopOwogZXh0ZXJuIGludCAgICAg
YWNsX2NoZWNrKGludCwgdXNjaGFyICosIHVzY2hhciAqLCB1c2NoYXIgKiosIHVzY2hhciAqKik7
CitleHRlcm4gdXNjaGFyICphY2xfY3VycmVudF92ZXJiKHZvaWQpOwogZXh0ZXJuIGludCAgICAg
YWNsX2V2YWwoaW50LCB1c2NoYXIgKiwgdXNjaGFyICoqLCB1c2NoYXIgKiopOwogCiBleHRlcm4g
dHJlZV9ub2RlICphY2xfdmFyX2NyZWF0ZSh1c2NoYXIgKik7CkBAIC0xMjMsNiArMTMyLDcgQEAK
IGV4dGVybiBnc3RyaW5nICogYXV0aF9zaG93X3N1cHBvcnRlZChnc3RyaW5nICopOwogZXh0ZXJu
IHVzY2hhciAqYXV0aF94dGV4dGVuY29kZSh1c2NoYXIgKiwgaW50KTsKIGV4dGVybiBpbnQgICAg
IGF1dGhfeHRleHRkZWNvZGUodXNjaGFyICosIHVzY2hhciAqKik7CitleHRlcm4gdXNjaGFyICph
dXRoZW50aWNhdG9yX2N1cnJlbnRfbmFtZSh2b2lkKTsKIAogI2lmZGVmIEVYUEVSSU1FTlRBTF9B
UkMKIGV4dGVybiBnc3RyaW5nICphdXRocmVzX2FyYyhnc3RyaW5nICopOwpAQCAtMTM5LDEwICsx
NDksMTEgQEAKICNlbmRpZgogCiBleHRlcm4gdXNjaGFyICpiNjRlbmNvZGUoY29uc3QgdXNjaGFy
ICosIGludCk7Ci1leHRlcm4gdXNjaGFyICpiNjRlbmNvZGVfdGFpbnQoY29uc3QgdXNjaGFyICos
IGludCwgQk9PTCk7CitleHRlcm4gdXNjaGFyICpiNjRlbmNvZGVfdGFpbnQoY29uc3QgdXNjaGFy
ICosIGludCwgY29uc3Qgdm9pZCAqKTsKIGV4dGVybiBpbnQgICAgIGI2NGRlY29kZShjb25zdCB1
c2NoYXIgKiwgdXNjaGFyICoqKTsKIGV4dGVybiBpbnQgICAgIGJkYXRfZ2V0Yyh1bnNpZ25lZCk7
CiBleHRlcm4gdXNjaGFyICpiZGF0X2dldGJ1Zih1bnNpZ25lZCAqKTsKK2V4dGVybiBCT09MICAg
IGJkYXRfaGFzYyh2b2lkKTsKIGV4dGVybiBpbnQgICAgIGJkYXRfdW5nZXRjKGludCk7CiBleHRl
cm4gdm9pZCAgICBiZGF0X2ZsdXNoX2RhdGEodm9pZCk7CiAKQEAgLTE3NiwxOSArMTg3LDI0IEBA
CiBleHRlcm4gaW50ICAgICBkY2NfcHJvY2Vzcyh1c2NoYXIgKiopOwogI2VuZGlmCiAKLWV4dGVy
biB2b2lkICAgIGRlYnVnX2xvZ2dpbmdfYWN0aXZhdGUodXNjaGFyICosIHVzY2hhciAqKTsKLWV4
dGVybiB2b2lkICAgIGRlYnVnX2xvZ2dpbmdfc3RvcCh2b2lkKTsKK2V4dGVybiB2b2lkICAgIGRl
YnVnX2xvZ2dpbmdfYWN0aXZhdGUoY29uc3QgdXNjaGFyICosIGNvbnN0IHVzY2hhciAqKTsKK2V4
dGVybiB2b2lkICAgIGRlYnVnX2xvZ2dpbmdfZnJvbV9zcG9vbChjb25zdCB1c2NoYXIgKik7Citl
eHRlcm4gdm9pZCAgICBkZWJ1Z19sb2dnaW5nX3N0b3AoQk9PTCk7CiBleHRlcm4gdm9pZCAgICBk
ZWJ1Z19wcmludF9hcmd2KGNvbnN0IHVzY2hhciAqKik7CiBleHRlcm4gdm9pZCAgICBkZWJ1Z19w
cmludF9pZHModXNjaGFyICopOwogZXh0ZXJuIHZvaWQgICAgZGVidWdfcHJpbnRmX2luZGVudChj
b25zdCBjaGFyICosIC4uLikgUFJJTlRGX0ZVTkNUSU9OKDEsMik7CiBleHRlcm4gdm9pZCAgICBk
ZWJ1Z19wcmludF9zdHJpbmcodXNjaGFyICopOwotZXh0ZXJuIHZvaWQgICAgZGVidWdfcHJpbnRf
dHJlZSh0cmVlX25vZGUgKik7CitleHRlcm4gdm9pZCAgICBkZWJ1Z19wcmludF90cmVlKGNvbnN0
IGNoYXIgKiwgdHJlZV9ub2RlICopOwogZXh0ZXJuIHZvaWQgICAgZGVidWdfdnByaW50ZihpbnQs
IGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CitleHRlcm4gdm9pZCAgICBkZWJ1Z19wcmV0cmlnZ2Vy
X3NldHVwKGNvbnN0IHVzY2hhciAqKTsKK2V4dGVybiB2b2lkICAgIGRlYnVnX3ByZXRyaWdnZXJf
ZGlzY2FyZCh2b2lkKTsKIGV4dGVybiB2b2lkICAgIGRlYnVnX3ByaW50X3NvY2tldChpbnQpOwor
ZXh0ZXJuIHZvaWQgICAgZGVidWdfdHJpZ2dlcl9maXJlKHZvaWQpOwogCiBleHRlcm4gdm9pZCAg
ICBkZWNvZGVfYml0cyh1bnNpZ25lZCBpbnQgKiwgc2l6ZV90LCBpbnQgKiwKLQkgICAgICAgICAg
IHVzY2hhciAqLCBiaXRfdGFibGUgKiwgaW50LCB1c2NoYXIgKiwgaW50KTsKKwkgICAgICAgICAg
IGNvbnN0IHVzY2hhciAqLCBiaXRfdGFibGUgKiwgaW50LCB1c2NoYXIgKiwgaW50KTsKIGV4dGVy
biB2b2lkICAgIGRlbGV0ZV9waWRfZmlsZSh2b2lkKTsKK2V4dGVybiB2b2lkICAgIGRlbGl2ZXJf
bG9jYWwoYWRkcmVzc19pdGVtICosIEJPT0wpOwogZXh0ZXJuIGFkZHJlc3NfaXRlbSAqZGVsaXZl
cl9tYWtlX2FkZHIodXNjaGFyICosIEJPT0wpOwogZXh0ZXJuIHZvaWQgICAgZGVsaXZlcnlfbG9n
KGludCwgYWRkcmVzc19pdGVtICosIGludCwgdXNjaGFyICopOwogZXh0ZXJuIGludCAgICAgZGVs
aXZlcl9tZXNzYWdlKHVzY2hhciAqLCBCT09MLCBCT09MKTsKQEAgLTE5Nyw3ICsyMTMsNiBAQAog
ZXh0ZXJuIGludCAgICAgZGVsaXZlcl9zcGxpdF9hZGRyZXNzKGFkZHJlc3NfaXRlbSAqKTsKIGV4
dGVybiB2b2lkICAgIGRlbGl2ZXJfc3VjY2VlZGVkKGFkZHJlc3NfaXRlbSAqKTsKIAotZXh0ZXJu
IHVzY2hhciAqZGVsaXZlcl9nZXRfc2VuZGVyX2FkZHJlc3MgKHVzY2hhciAqaWQpOwogZXh0ZXJu
IHZvaWQgICAgZGVsaXZlcnlfcmVfZXhlYyhpbnQpOwogCiBleHRlcm4gdm9pZCAgICBkaWVfdGFp
bnRlZChjb25zdCB1c2NoYXIgKiwgY29uc3QgdXNjaGFyICosIGludCk7CkBAIC0yMjcsNyArMjQy
LDcgQEAKIGV4dGVybiB2b2lkICAgIGVucV9lbmQodXNjaGFyICopOwogZXh0ZXJuIEJPT0wgICAg
ZW5xX3N0YXJ0KHVzY2hhciAqLCB1bnNpZ25lZCk7CiAjaWZuZGVmIERJU0FCTEVfRVZFTlQKLWV4
dGVybiB1c2NoYXIgKmV2ZW50X3JhaXNlKHVzY2hhciAqLCBjb25zdCB1c2NoYXIgKiwgdXNjaGFy
ICopOworZXh0ZXJuIHVzY2hhciAqZXZlbnRfcmFpc2UodXNjaGFyICosIGNvbnN0IHVzY2hhciAq
LCB1c2NoYXIgKiwgaW50ICopOwogZXh0ZXJuIHZvaWQgICAgbXNnX2V2ZW50X3JhaXNlKGNvbnN0
IHVzY2hhciAqLCBjb25zdCBhZGRyZXNzX2l0ZW0gKik7CiAjZW5kaWYKIApAQCAtMjM2LDcgKzI1
MSw3IEBACiBleHRlcm4gdm9pZCAgICBleGltX2V4aXQoaW50KSBOT1JFVFVSTjsKIGV4dGVybiB2
b2lkICAgIGV4aW1fZ2V0dGltZShzdHJ1Y3QgdGltZXZhbCAqKTsKIGV4dGVybiB2b2lkICAgIGV4
aW1fbnVsbHN0ZCh2b2lkKTsKLWV4dGVybiB2b2lkICAgIGV4aW1fc2V0dWdpZCh1aWRfdCwgZ2lk
X3QsIEJPT0wsIHVzY2hhciAqKTsKK2V4dGVybiB2b2lkICAgIGV4aW1fc2V0dWdpZCh1aWRfdCwg
Z2lkX3QsIEJPT0wsIGNvbnN0IHVzY2hhciAqKTsKIGV4dGVybiB2b2lkICAgIGV4aW1fdW5kZXJi
YXJfZXhpdChpbnQpIE5PUkVUVVJOOwogZXh0ZXJuIHZvaWQgICAgZXhpbV93YWl0X3RpY2soc3Ry
dWN0IHRpbWV2YWwgKiwgaW50KTsKIGV4dGVybiBpbnQgICAgIGV4cF9ib29sKGFkZHJlc3NfaXRl
bSAqYWRkciwKQEAgLTI1NSwxMiArMjcwLDEzIEBACiAKIGV4dGVybiBCT09MICAgIGZkX3JlYWR5
KGludCwgdGltZV90KTsKIAotZXh0ZXJuIGludCAgICAgZmlsdGVyX2ludGVycHJldCh1c2NoYXIg
KiwgaW50LCBhZGRyZXNzX2l0ZW0gKiosIHVzY2hhciAqKik7CitleHRlcm4gaW50ICAgICBmaWx0
ZXJfaW50ZXJwcmV0KGNvbnN0IHVzY2hhciAqLCBpbnQsIGFkZHJlc3NfaXRlbSAqKiwgdXNjaGFy
ICoqKTsKIGV4dGVybiBCT09MICAgIGZpbHRlcl9wZXJzb25hbChzdHJpbmdfaXRlbSAqLCBCT09M
KTsKIGV4dGVybiBCT09MICAgIGZpbHRlcl9ydW50ZXN0KGludCwgdXNjaGFyICosIEJPT0wsIEJP
T0wpOwogZXh0ZXJuIEJPT0wgICAgZmlsdGVyX3N5c3RlbV9pbnRlcnByZXQoYWRkcmVzc19pdGVt
ICoqLCB1c2NoYXIgKiopOwogCiBleHRlcm4gdXNjaGFyICogZm5faGRyc19hZGRlZCh2b2lkKTsK
K2V4dGVybiB2b2lkICAgIGZvcmNlX2ZkKGludCwgaW50KTsKIAogZXh0ZXJuIHZvaWQgICAgaGVh
ZGVyX2FkZChpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKTsKIGV4dGVybiBoZWFkZXJfbGluZSAqaGVh
ZGVyX2FkZF9hdF9wb3NpdGlvbl9pbnRlcm5hbChCT09MLCB1c2NoYXIgKiwgQk9PTCwgaW50LCBj
b25zdCBjaGFyICosIC4uLik7CkBAIC0zMDgsNyArMzI0LDcgQEAKIGV4dGVybiBpbnQgICAgIGlw
djZfbm10b2EoaW50ICosIHVzY2hhciAqKTsKIAogZXh0ZXJuIHVzY2hhciAqbG9jYWxfcGFydF9x
dW90ZSh1c2NoYXIgKik7Ci1leHRlcm4gaW50ICAgICBsb2dfb3Blbl9hc19leGltKHVzY2hhciAq
KTsKK2V4dGVybiBpbnQgICAgIGxvZ19vcGVuX2FzX2V4aW0oY29uc3QgdXNjaGFyICogY29uc3Qp
OwogZXh0ZXJuIHZvaWQgICAgbG9nX2Nsb3NlX2FsbCh2b2lkKTsKIAogZXh0ZXJuIG1hY3JvX2l0
ZW0gKiBtYWNyb19jcmVhdGUoY29uc3QgdXNjaGFyICosIGNvbnN0IHVzY2hhciAqLCBCT09MKTsK
QEAgLTMzMSw2ICszNDcsOSBAQAogICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKiwgaW50
LCBCT09MLCBjb25zdCB1c2NoYXIgKiopOwogZXh0ZXJuIGludCAgICAgbWF0Y2hfY2hlY2tfc3Ry
aW5nKGNvbnN0IHVzY2hhciAqLCBjb25zdCB1c2NoYXIgKiwgaW50LCBCT09MLCBCT09MLCBCT09M
LAogICAgICAgICAgICAgICAgICBjb25zdCB1c2NoYXIgKiopOworCitleHRlcm4gdm9pZCAgICBt
ZXNzYWdlX3N0YXJ0KHZvaWQpOworZXh0ZXJuIHZvaWQgICAgbWVzc2FnZV90aWR5dXAodm9pZCk7
CiBleHRlcm4gdm9pZCAgICBtZDVfZW5kKG1kNSAqLCBjb25zdCB1c2NoYXIgKiwgaW50LCB1c2No
YXIgKik7CiBleHRlcm4gdm9pZCAgICBtZDVfbWlkKG1kNSAqLCBjb25zdCB1c2NoYXIgKik7CiBl
eHRlcm4gdm9pZCAgICBtZDVfc3RhcnQobWQ1ICopOwpAQCAtMzYxLDEzICszODAsMTQgQEAKIAog
ZXh0ZXJuIHVzY2hhciAqcGFyc2VfZXh0cmFjdF9hZGRyZXNzKGNvbnN0IHVzY2hhciAqLCB1c2No
YXIgKiosIGludCAqLCBpbnQgKiwgaW50ICosCiAgICAgICAgICAgICAgICAgIEJPT0wpOwotZXh0
ZXJuIGludCAgICAgcGFyc2VfZm9yd2FyZF9saXN0KHVzY2hhciAqLCBpbnQsIGFkZHJlc3NfaXRl
bSAqKiwgdXNjaGFyICoqLAotICAgICAgICAgICAgICAgICBjb25zdCB1c2NoYXIgKiwgdXNjaGFy
ICosIGVycm9yX2Jsb2NrICoqKTsKLWV4dGVybiB1c2NoYXIgKnBhcnNlX2ZpbmRfYWRkcmVzc19l
bmQodXNjaGFyICosIEJPT0wpOworZXh0ZXJuIGludCAgICAgcGFyc2VfZm9yd2FyZF9saXN0KGNv
bnN0IHVzY2hhciAqLCBpbnQsIGFkZHJlc3NfaXRlbSAqKiwgdXNjaGFyICoqLAorICAgICAgICAg
ICAgICAgICBjb25zdCB1c2NoYXIgKiwgY29uc3QgdXNjaGFyICosIGVycm9yX2Jsb2NrICoqKTsK
K2V4dGVybiB1c2NoYXIgKnBhcnNlX2ZpbmRfYWRkcmVzc19lbmQoY29uc3QgdXNjaGFyICosIEJP
T0wpOwogZXh0ZXJuIGNvbnN0IHVzY2hhciAqcGFyc2VfZmluZF9hdChjb25zdCB1c2NoYXIgKik7
CiBleHRlcm4gY29uc3QgdXNjaGFyICpwYXJzZV9maXhfcGhyYXNlKGNvbnN0IHVzY2hhciAqLCBp
bnQpOwogZXh0ZXJuIGNvbnN0IHVzY2hhciAqcGFyc2VfbWVzc2FnZV9pZChjb25zdCB1c2NoYXIg
KiwgdXNjaGFyICoqLCB1c2NoYXIgKiopOwotZXh0ZXJuIGNvbnN0IHVzY2hhciAqcGFyc2VfcXVv
dGVfMjA0Nyhjb25zdCB1c2NoYXIgKiwgaW50LCB1c2NoYXIgKiwgQk9PTCk7CitleHRlcm4gY29u
c3QgdXNjaGFyICpwYXJzZV9xdW90ZV8yMDQ3KGNvbnN0IHVzY2hhciAqLCBpbnQsIGNvbnN0IHVz
Y2hhciAqLAorCQkJCSAgICAgIEJPT0wpOwogZXh0ZXJuIGNvbnN0IHVzY2hhciAqcGFyc2VfZGF0
ZV90aW1lKGNvbnN0IHVzY2hhciAqc3RyLCB0aW1lX3QgKnQpOwogZXh0ZXJuIHZvaWQgcHJpdl9k
cm9wX3RlbXAoY29uc3QgdWlkX3QsIGNvbnN0IGdpZF90KTsKIGV4dGVybiB2b2lkIHByaXZfcmVz
dG9yZSh2b2lkKTsKQEAgLTM4MSwxNiArNDAxLDE2IEBACiBleHRlcm4gdW5zaWduZWQgcXVldWVf
Y291bnQodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgcXVldWVfY291bnRfY2FjaGVkKHZvaWQpOwog
ZXh0ZXJuIHZvaWQgICAgcXVldWVfbGlzdChpbnQsIHVzY2hhciAqKiwgaW50KTsKLSNpZmRlZiBF
WFBFUklNRU5UQUxfUVVFVUVfUkFNUAorI2lmbmRlZiBESVNBQkxFX1FVRVVFX1JBTVAKIGV4dGVy
biB2b2lkICAgIHF1ZXVlX25vdGlmeV9kYWVtb24oY29uc3QgdXNjaGFyICogaG9zdG5hbWUpOwog
I2VuZGlmCiBleHRlcm4gdm9pZCAgICBxdWV1ZV9ydW4odXNjaGFyICosIHVzY2hhciAqLCBCT09M
KTsKIAogZXh0ZXJuIGludCAgICAgcmFuZG9tX251bWJlcihpbnQpOwogZXh0ZXJuIGNvbnN0IHVz
Y2hhciAqcmNfdG9fc3RyaW5nKGludCk7Ci1leHRlcm4gaW50ICAgICByZGFfaW50ZXJwcmV0KHJl
ZGlyZWN0X2Jsb2NrICosIGludCwgdXNjaGFyICosIHVzY2hhciAqLAotICAgICAgICAgICAgICAg
ICB1c2NoYXIgKiwgdXNjaGFyICosIHVzY2hhciAqLCB1Z2lkX2Jsb2NrICosIGFkZHJlc3NfaXRl
bSAqKiwKLSAgICAgICAgICAgICAgICAgdXNjaGFyICoqLCBlcnJvcl9ibG9jayAqKiwgaW50ICos
IHVzY2hhciAqKTsKK2V4dGVybiBpbnQgICAgIHJkYV9pbnRlcnByZXQocmVkaXJlY3RfYmxvY2sg
KiwgaW50LCBjb25zdCB1c2NoYXIgKiwgY29uc3QgdXNjaGFyICosCisgICAgICAgICAgICAgICAg
IGNvbnN0IHVzY2hhciAqLCBjb25zdCB1c2NoYXIgKiwgY29uc3QgdXNjaGFyICosIGNvbnN0IHVn
aWRfYmxvY2sgKiwgYWRkcmVzc19pdGVtICoqLAorICAgICAgICAgICAgICAgICB1c2NoYXIgKios
IGVycm9yX2Jsb2NrICoqLCBpbnQgKiwgY29uc3QgdXNjaGFyICopOwogZXh0ZXJuIGludCAgICAg
cmRhX2lzX2ZpbHRlcihjb25zdCB1c2NoYXIgKik7CiBleHRlcm4gQk9PTCAgICByZWFkY29uZl9k
ZXBlbmRzKGRyaXZlcl9pbnN0YW5jZSAqLCB1c2NoYXIgKik7CiBleHRlcm4gdm9pZCAgICByZWFk
Y29uZl9kcml2ZXJfaW5pdCh1c2NoYXIgKiwgZHJpdmVyX2luc3RhbmNlICoqLApAQCAtNDE1LDgg
KzQzNSw5IEBACiAjaWZkZWYgV0lUSF9DT05URU5UX1NDQU4KIGV4dGVybiBpbnQgICAgIHJlZ2V4
KGNvbnN0IHVzY2hhciAqKik7CiAjZW5kaWYKLWV4dGVybiBCT09MICAgIHJlZ2V4X21hdGNoX2Fu
ZF9zZXR1cChjb25zdCBwY3JlICosIGNvbnN0IHVzY2hhciAqLCBpbnQsIGludCk7Ci1leHRlcm4g
Y29uc3QgcGNyZSAqcmVnZXhfbXVzdF9jb21waWxlKGNvbnN0IHVzY2hhciAqLCBCT09MLCBCT09M
KTsKK2V4dGVybiBCT09MICAgIHJlZ2V4X21hdGNoKGNvbnN0IHBjcmUyX2NvZGUgKiwgY29uc3Qg
dXNjaGFyICosIGludCwgdXNjaGFyICoqKTsKK2V4dGVybiBCT09MICAgIHJlZ2V4X21hdGNoX2Fu
ZF9zZXR1cChjb25zdCBwY3JlMl9jb2RlICosIGNvbnN0IHVzY2hhciAqLCBpbnQsIGludCk7Citl
eHRlcm4gY29uc3QgcGNyZTJfY29kZSAqcmVnZXhfbXVzdF9jb21waWxlKGNvbnN0IHVzY2hhciAq
LCBCT09MLCBCT09MKTsKIGV4dGVybiB2b2lkICAgIHJldHJ5X2FkZF9pdGVtKGFkZHJlc3NfaXRl
bSAqLCB1c2NoYXIgKiwgaW50KTsKIGV4dGVybiBCT09MICAgIHJldHJ5X2NoZWNrX2FkZHJlc3Mo
Y29uc3QgdXNjaGFyICosIGhvc3RfaXRlbSAqLCB1c2NoYXIgKiwgQk9PTCwKICAgICAgICAgICAg
ICAgICAgdXNjaGFyICoqLCB1c2NoYXIgKiopOwpAQCAtNDMyLDggKzQ1Myw4IEBACiBleHRlcm4g
Y29uc3QgdXNjaGFyICpyZXdyaXRlX29uZShjb25zdCB1c2NoYXIgKiwgaW50LCBCT09MICosIEJP
T0wsIHVzY2hhciAqLAogICAgICAgICAgICAgICAgICByZXdyaXRlX3J1bGUgKik7CiBleHRlcm4g
dm9pZCAgICByZXdyaXRlX3Rlc3QoY29uc3QgdXNjaGFyICopOwotZXh0ZXJuIHVzY2hhciAqcmZj
MjA0N19kZWNvZGUyKHVzY2hhciAqLCBCT09MLCB1c2NoYXIgKiwgaW50LCBpbnQgKiwgaW50ICos
Ci0gICAgICAgICAgICAgICAgIHVzY2hhciAqKik7CitleHRlcm4gdXNjaGFyICpyZmMyMDQ3X2Rl
Y29kZTIodXNjaGFyICosIEJPT0wsIGNvbnN0IHVzY2hhciAqLCBpbnQsIGludCAqLAorCQkJCSAg
ICAgaW50ICosIHVzY2hhciAqKik7CiBleHRlcm4gaW50ICAgICByb3V0ZV9hZGRyZXNzKGFkZHJl
c3NfaXRlbSAqLCBhZGRyZXNzX2l0ZW0gKiosIGFkZHJlc3NfaXRlbSAqKiwKICAgICAgICAgICAg
ICAgICAgYWRkcmVzc19pdGVtICoqLCBhZGRyZXNzX2l0ZW0gKiosIGludCk7CiBleHRlcm4gaW50
ICAgICByb3V0ZV9jaGVja19wcmVmaXgoY29uc3QgdXNjaGFyICosIGNvbnN0IHVzY2hhciAqLCB1
bnNpZ25lZCAqKTsKQEAgLTQ0Nyw3ICs0NjgsOSBAQAogZXh0ZXJuIHZvaWQgICAgcm91dGVfaW5p
dCh2b2lkKTsKIGV4dGVybiBnc3RyaW5nICogcm91dGVfc2hvd19zdXBwb3J0ZWQoZ3N0cmluZyAq
KTsKIGV4dGVybiB2b2lkICAgIHJvdXRlX3RpZHl1cCh2b2lkKTsKK2V4dGVybiB1c2NoYXIgKnJv
dXRlcl9jdXJyZW50X25hbWUodm9pZCk7CiAKK2V4dGVybiB1c2NoYXIgKnNlYXJjaF9hcmdzKGlu
dCwgdXNjaGFyICosIHVzY2hhciAqLCB1c2NoYXIgKiosIGNvbnN0IHVzY2hhciAqKTsKIGV4dGVy
biB1c2NoYXIgKnNlYXJjaF9maW5kKHZvaWQgKiwgY29uc3QgdXNjaGFyICosIHVzY2hhciAqLCBp
bnQsCiAJCSBjb25zdCB1c2NoYXIgKiwgaW50LCBpbnQsIGludCAqLCBjb25zdCB1c2NoYXIgKik7
CiBleHRlcm4gaW50ICAgICBzZWFyY2hfZmluZHR5cGUoY29uc3QgdXNjaGFyICosIGludCk7CkBA
IC00NTksMTAgKzQ4MiwxMSBAQAogZXh0ZXJuIHZvaWQgICAgc2hhMV9lbmQoaGN0eCAqLCBjb25z
dCB1c2NoYXIgKiwgaW50LCB1c2NoYXIgKik7CiBleHRlcm4gdm9pZCAgICBzaGExX21pZChoY3R4
ICosIGNvbnN0IHVzY2hhciAqKTsKIGV4dGVybiB2b2lkICAgIHNoYTFfc3RhcnQoaGN0eCAqKTsK
LWV4dGVybiBpbnQgICAgIHNpZXZlX2ludGVycHJldCh1c2NoYXIgKiwgaW50LCB1c2NoYXIgKiwg
dXNjaGFyICosIHVzY2hhciAqLAotICAgICAgICAgICAgICAgICB1c2NoYXIgKiwgYWRkcmVzc19p
dGVtICoqLCB1c2NoYXIgKiopOworZXh0ZXJuIGludCAgICAgc2lldmVfaW50ZXJwcmV0KGNvbnN0
IHVzY2hhciAqLCBpbnQsIGNvbnN0IHVzY2hhciAqLAorCQkgY29uc3QgdXNjaGFyICosIGNvbnN0
IHVzY2hhciAqLCBjb25zdCB1c2NoYXIgKiwKKwkJIGFkZHJlc3NfaXRlbSAqKiwgdXNjaGFyICoq
KTsKIGV4dGVybiB2b2lkICAgIHNpZ2Fscm1faGFuZGxlcihpbnQpOwotZXh0ZXJuIEJPT0wgICAg
c210cF9idWZmZXJlZCh2b2lkKTsKK2V4dGVybiBpbnQgICAgIHNtdHBfYm91bmRzb2NrKHNtdHBf
Y29ubmVjdF9hcmdzICopOwogZXh0ZXJuIHZvaWQgICAgc210cF9jbG9zZWRvd24odXNjaGFyICop
OwogZXh0ZXJuIHZvaWQgICAgc210cF9jb21tYW5kX3RpbWVvdXRfZXhpdCh2b2lkKSBOT1JFVFVS
TjsKIGV4dGVybiB2b2lkICAgIHNtdHBfY29tbWFuZF9zaWd0ZXJtX2V4aXQodm9pZCkgTk9SRVRV
Uk47CkBAIC00NzEsOCArNDk1LDYgQEAKIGV4dGVybiB2b2lkICAgIHNtdHBfZGVsaXZlcl9pbml0
KHZvaWQpOwogZXh0ZXJuIHVzY2hhciAqc210cF9jbWRfaGlzdCh2b2lkKTsKIGV4dGVybiBpbnQg
ICAgIHNtdHBfY29ubmVjdChzbXRwX2Nvbm5lY3RfYXJncyAqLCBjb25zdCBibG9iICopOwotZXh0
ZXJuIGludCAgICAgc210cF9zb2NrX2Nvbm5lY3QoaG9zdF9pdGVtICosIGludCwgaW50LCB1c2No
YXIgKiwKLQkJIHRyYW5zcG9ydF9pbnN0YW5jZSAqIHRiLCBpbnQsIGNvbnN0IGJsb2IgKik7CiBl
eHRlcm4gaW50ICAgICBzbXRwX2Zlb2Yodm9pZCk7CiBleHRlcm4gaW50ICAgICBzbXRwX2ZlcnJv
cih2b2lkKTsKIGV4dGVybiB1c2NoYXIgKnNtdHBfZ2V0X2Nvbm5lY3Rpb25faW5mbyh2b2lkKTsK
QEAgLTQ4MSwxMSArNTAzLDEyIEBACiBleHRlcm4gQk9PTCAgICBzbXRwX2dldF9wb3J0KHVzY2hh
ciAqLCBhZGRyZXNzX2l0ZW0gKiwgaW50ICosIHVzY2hhciAqKTsKIGV4dGVybiBpbnQgICAgIHNt
dHBfZ2V0Yyh1bnNpZ25lZCk7CiBleHRlcm4gdXNjaGFyICpzbXRwX2dldGJ1Zih1bnNpZ25lZCAq
KTsKLWV4dGVybiB2b2lkICAgIHNtdHBfZ2V0X2NhY2hlKHZvaWQpOworZXh0ZXJuIHZvaWQgICAg
c210cF9nZXRfY2FjaGUodW5zaWduZWQpOworZXh0ZXJuIEJPT0wgICAgc210cF9oYXNjKHZvaWQp
OwogZXh0ZXJuIGludCAgICAgc210cF9oYW5kbGVfYWNsX2ZhaWwoaW50LCBpbnQsIHVzY2hhciAq
LCB1c2NoYXIgKik7CiBleHRlcm4gdm9pZCAgICBzbXRwX2xvZ19ub19tYWlsKHZvaWQpOwogZXh0
ZXJuIHZvaWQgICAgc210cF9tZXNzYWdlX2NvZGUodXNjaGFyICoqLCBpbnQgKiwgdXNjaGFyICoq
LCB1c2NoYXIgKiosIEJPT0wpOwotZXh0ZXJuIHZvaWQgICAgc210cF9wcm94eV90bHModm9pZCAq
LCB1c2NoYXIgKiwgc2l6ZV90LCBpbnQgKiwgaW50KSBOT1JFVFVSTjsKK2V4dGVybiB2b2lkICAg
IHNtdHBfcHJveHlfdGxzKHZvaWQgKiwgdXNjaGFyICosIHNpemVfdCwgaW50ICosIGludCwgY29u
c3QgdXNjaGFyICopIE5PUkVUVVJOOwogZXh0ZXJuIEJPT0wgICAgc210cF9yZWFkX3Jlc3BvbnNl
KHZvaWQgKiwgdXNjaGFyICosIGludCwgaW50LCBpbnQpOwogZXh0ZXJuIHZvaWQgICAqc210cF9y
ZXNldCh2b2lkICopOwogZXh0ZXJuIHZvaWQgICAgc210cF9yZXNwb25kKHVzY2hhciAqLCBpbnQs
IEJPT0wsIHVzY2hhciAqKTsKQEAgLTQ5Myw2ICs1MTYsNyBAQAogZXh0ZXJuIHZvaWQgICAgc210
cF9wb3J0X2Zvcl9jb25uZWN0KGhvc3RfaXRlbSAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgICAgc210
cF9zZW5kX3Byb2hpYml0aW9uX21lc3NhZ2UoaW50LCB1c2NoYXIgKik7CiBleHRlcm4gaW50ICAg
ICBzbXRwX3NldHVwX21zZyh2b2lkKTsKK2V4dGVybiBpbnQgICAgIHNtdHBfc29ja19jb25uZWN0
KHNtdHBfY29ubmVjdF9hcmdzICosIGludCwgY29uc3QgYmxvYiAqKTsKIGV4dGVybiBCT09MICAg
IHNtdHBfc3RhcnRfc2Vzc2lvbih2b2lkKTsKIGV4dGVybiBpbnQgICAgIHNtdHBfdW5nZXRjKGlu
dCk7CiBleHRlcm4gQk9PTCAgICBzbXRwX3ZlcmlmeV9oZWxvKHZvaWQpOwpAQCAtNTA2LDEzICs1
MzAsMTggQEAKIGV4dGVybiBpbnQgICAgIHNwb29sX29wZW5fZGF0YWZpbGUodXNjaGFyICopOwog
ZXh0ZXJuIGludCAgICAgc3Bvb2xfb3Blbl90ZW1wKHVzY2hhciAqKTsKIGV4dGVybiBpbnQgICAg
IHNwb29sX3JlYWRfaGVhZGVyKHVzY2hhciAqLCBCT09MLCBCT09MKTsKK2V4dGVybiB1c2NoYXIg
KnNwb29sX3NlbmRlcl9mcm9tX21zZ2lkKGNvbnN0IHVzY2hhciAqKTsKIGV4dGVybiBpbnQgICAg
IHNwb29sX3dyaXRlX2hlYWRlcih1c2NoYXIgKiwgaW50LCB1c2NoYXIgKiopOwogZXh0ZXJuIGlu
dCAgICAgc3RkaW5fZ2V0Yyh1bnNpZ25lZCk7CiBleHRlcm4gaW50ICAgICBzdGRpbl9mZW9mKHZv
aWQpOwogZXh0ZXJuIGludCAgICAgc3RkaW5fZmVycm9yKHZvaWQpOworZXh0ZXJuIEJPT0wgICAg
c3RkaW5faGFzYyh2b2lkKTsKIGV4dGVybiBpbnQgICAgIHN0ZGluX3VuZ2V0YyhpbnQpOwogCiBl
eHRlcm4gdm9pZCAgICBzdG9yZV9leGl0KHZvaWQpOworZXh0ZXJuIHZvaWQgICAgc3RvcmVfaW5p
dCh2b2lkKTsKK2V4dGVybiB2b2lkICAgIHN0b3JlX3dyaXRlcHJvdGVjdChpbnQpOworCiBleHRl
cm4gZ3N0cmluZyAqc3RyaW5nX2FwcGVuZChnc3RyaW5nICosIGludCwgLi4uKSBXQVJOX1VOVVNF
RF9SRVNVTFQ7CiBleHRlcm4gZ3N0cmluZyAqc3RyaW5nX2FwcGVuZF9saXN0ZWxlKGdzdHJpbmcg
KiwgdXNjaGFyLCBjb25zdCB1c2NoYXIgKikgV0FSTl9VTlVTRURfUkVTVUxUOwogZXh0ZXJuIGdz
dHJpbmcgKnN0cmluZ19hcHBlbmRfbGlzdGVsZV9uKGdzdHJpbmcgKiwgdXNjaGFyLCBjb25zdCB1
c2NoYXIgKiwgdW5zaWduZWQpIFdBUk5fVU5VU0VEX1JFU1VMVDsKQEAgLTU1MiwxMCArNTgxLDEw
IEBACiBleHRlcm4gZ3N0cmluZyAqc3RyaW5nX3Zmb3JtYXRfdHJjKGdzdHJpbmcgKiwgY29uc3Qg
dXNjaGFyICosIHVuc2lnbmVkLAogCQkJdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBjaGFyICos
IHZhX2xpc3QpOwogCi0jZGVmaW5lIHN0cmluZ19vcGVuX2ZhaWxlZChlbm8sIGZtdCwgLi4uKSBc
Ci0Jc3RyaW5nX29wZW5fZmFpbGVkX3RyYyhlbm8sIFVTIF9fRlVOQ1RJT05fXywgX19MSU5FX18s
IGZtdCwgX19WQV9BUkdTX18pCi1leHRlcm4gdXNjaGFyICpzdHJpbmdfb3Blbl9mYWlsZWRfdHJj
KGludCwgY29uc3QgdXNjaGFyICosIHVuc2lnbmVkLAotCQkJY29uc3QgY2hhciAqLCAuLi4pIFBS
SU5URl9GVU5DVElPTig0LDUpOworI2RlZmluZSBzdHJpbmdfb3Blbl9mYWlsZWQoZm10LCAuLi4p
IFwKKwlzdHJpbmdfb3Blbl9mYWlsZWRfdHJjKFVTIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIGZt
dCwgX19WQV9BUkdTX18pCitleHRlcm4gdXNjaGFyICpzdHJpbmdfb3Blbl9mYWlsZWRfdHJjKGNv
bnN0IHVzY2hhciAqLCB1bnNpZ25lZCwKKwkJCWNvbnN0IGNoYXIgKiwgLi4uKSBQUklOVEZfRlVO
Q1RJT04oMyw0KTsKIAogI2RlZmluZSBzdHJpbmdfbmV4dGlubGlzdChscCwgc3AsIGIsIGwpIFwK
IAlzdHJpbmdfbmV4dGlubGlzdF90cmMoKGxwKSwgKHNwKSwgKGIpLCAobCksIFVTIF9fRlVOQ1RJ
T05fXywgX19MSU5FX18pCkBAIC01NjUsNiArNTk0LDcgQEAKIGV4dGVybiBpbnQgICAgIHN0cmNt
cGljKGNvbnN0IHVzY2hhciAqLCBjb25zdCB1c2NoYXIgKik7CiBleHRlcm4gaW50ICAgICBzdHJu
Y21waWMoY29uc3QgdXNjaGFyICosIGNvbnN0IHVzY2hhciAqLCBpbnQpOwogZXh0ZXJuIHVzY2hh
ciAqc3Ryc3RyaWModXNjaGFyICosIHVzY2hhciAqLCBCT09MKTsKK2V4dGVybiBjb25zdCB1c2No
YXIgKnN0cnN0cmljX2MoY29uc3QgdXNjaGFyICosIGNvbnN0IHVzY2hhciAqLCBCT09MKTsKIAog
ZXh0ZXJuIGludCAgICAgdGVzdF9oYXJuZXNzX2Z1ZGdlZF9xdWV1ZV90aW1lKGludCk7CiBleHRl
cm4gdm9pZCAgICB0Y3BfaW5pdCh2b2lkKTsKQEAgLTU3NSwxNSArNjA1LDE5IEBACiBleHRlcm4g
dXNjaGFyICp0b2Rfc3RhbXAoaW50KTsKIAogZXh0ZXJuIEJPT0wgICAgdHJhbnNwb3J0X2NoZWNr
X3dhaXRpbmcoY29uc3QgdXNjaGFyICosIGNvbnN0IHVzY2hhciAqLCBpbnQsIHVzY2hhciAqLAot
ICAgICAgICAgICAgICAgICBCT09MICosIG9pY2YsIHZvaWQqKTsKLWV4dGVybiB2b2lkICAgIHRy
YW5zcG9ydF9pbml0KHZvaWQpOworICAgICAgICAgICAgICAgICBvaWNmLCB2b2lkKik7CitleHRl
cm4gdXNjaGFyICp0cmFuc3BvcnRfY3VycmVudF9uYW1lKHZvaWQpOwogZXh0ZXJuIHZvaWQgICAg
dHJhbnNwb3J0X2RvX3Bhc3Nfc29ja2V0KGNvbnN0IHVzY2hhciAqLCBjb25zdCB1c2NoYXIgKiwK
IAkJIGNvbnN0IHVzY2hhciAqLCB1c2NoYXIgKiwgaW50KTsKLWV4dGVybiBCT09MICAgIHRyYW5z
cG9ydF9wYXNzX3NvY2tldChjb25zdCB1c2NoYXIgKiwgY29uc3QgdXNjaGFyICosIGNvbnN0IHVz
Y2hhciAqLCB1c2NoYXIgKiwKLSAgICAgICAgICAgICAgICAgaW50KTsKK2V4dGVybiB2b2lkICAg
IHRyYW5zcG9ydF9pbml0KHZvaWQpOworZXh0ZXJuIEJPT0wgICAgdHJhbnNwb3J0X3Bhc3Nfc29j
a2V0KGNvbnN0IHVzY2hhciAqLCBjb25zdCB1c2NoYXIgKiwgY29uc3QgdXNjaGFyICosIHVzY2hh
ciAqLCBpbnQKKyNpZmRlZiBFWFBFUklNRU5UQUxfRVNNVFBfTElNSVRTCisJCQksIHVuc2lnbmVk
LCB1bnNpZ25lZCwgdW5zaWduZWQKKyNlbmRpZgorCQkJKTsKIGV4dGVybiB1c2NoYXIgKnRyYW5z
cG9ydF9yY3B0X2FkZHJlc3MoYWRkcmVzc19pdGVtICosIEJPT0wpOwotZXh0ZXJuIEJPT0wgICAg
dHJhbnNwb3J0X3NldF91cF9jb21tYW5kKGNvbnN0IHVzY2hhciAqKiosIHVzY2hhciAqLAotCQkg
Qk9PTCwgaW50LCBhZGRyZXNzX2l0ZW0gKiwgdXNjaGFyICosIHVzY2hhciAqKik7CitleHRlcm4g
Qk9PTCAgICB0cmFuc3BvcnRfc2V0X3VwX2NvbW1hbmQoY29uc3QgdXNjaGFyICoqKiwgY29uc3Qg
dXNjaGFyICosCisJCSBCT09MLCBpbnQsIGFkZHJlc3NfaXRlbSAqLCBCT09MLCBjb25zdCB1c2No
YXIgKiwgdXNjaGFyICoqKTsKIGV4dGVybiB2b2lkICAgIHRyYW5zcG9ydF91cGRhdGVfd2FpdGlu
Zyhob3N0X2l0ZW0gKiwgdXNjaGFyICopOwogZXh0ZXJuIEJPT0wgICAgdHJhbnNwb3J0X3dyaXRl
X2Jsb2NrKHRyYW5zcG9ydF9jdHggKiwgdXNjaGFyICosIGludCwgQk9PTCk7CiBleHRlcm4gdm9p
ZCAgICB0cmFuc3BvcnRfd3JpdGVfcmVzZXQoaW50KTsKQEAgLTYwNSw3ICs2MzksNyBAQAogZXh0
ZXJuIHZvaWQgICAgdW5zcG9vbF9tYm94KHZvaWQpOwogI2VuZGlmCiAjaWZkZWYgU1VQUE9SVF9J
MThOCi1leHRlcm4gdm9pZCAgICB1dGY4X3ZlcnNpb25fcmVwb3J0KEZJTEUgKik7CitleHRlcm4g
Z3N0cmluZyAqdXRmOF92ZXJzaW9uX3JlcG9ydChnc3RyaW5nICopOwogI2VuZGlmCiAKIGV4dGVy
biBpbnQgICAgIHZlcmlmeV9hZGRyZXNzKGFkZHJlc3NfaXRlbSAqLCBGSUxFICosIGludCwgaW50
LCBpbnQsIGludCwKQEAgLTYyMiw2ICs2NTYsOCBAQAogCSAgICAgICAgIGNvbnN0IHVzY2hhcios
IGNvbnN0IHVzY2hhciAqLCBjb25zdCB1c2NoYXIgKiopOwogZXh0ZXJuIGFkZHJlc3NfaXRlbSAq
dmVyaWZ5X2NoZWNrZWRfc2VuZGVyKHVzY2hhciAqKTsKIGV4dGVybiB2b2lkICAgIHZlcmlmeV9n
ZXRfaWRlbnQoaW50KTsKK2V4dGVybiB2b2lkICAgIHZlcmlmeV9xdW90YSh1c2NoYXIgKik7Citl
eHRlcm4gaW50ICAgICB2ZXJpZnlfcXVvdGFfY2FsbChjb25zdCB1c2NoYXIgKiwgaW50LCBpbnQs
IHVzY2hhciAqKik7CiBleHRlcm4gQk9PTCAgICB2ZXJpZnlfc2VuZGVyKGludCAqLCB1c2NoYXIg
KiopOwogZXh0ZXJuIEJPT0wgICAgdmVyaWZ5X3NlbmRlcl9wcmVsaW1pbmFyeShpbnQgKiwgdXNj
aGFyICoqKTsKIGV4dGVybiB2b2lkICAgIHZlcnNpb25faW5pdCh2b2lkKTsKQEAgLTY0Nyw2ICs2
ODMsMTggQEAKICNlbmRpZgogfQogCitzdGF0aWMgaW5saW5lIEJPT0wKK2lzX2luY29tcGF0aWJs
ZShjb25zdCB2b2lkICogb2xkLCBjb25zdCB2b2lkICogbmV3KQoreworI2lmIGRlZmluZWQoQ09N
UElMRV9VVElMSVRZKSB8fCBkZWZpbmVkKE1BQ1JPX1BSRURFRikgfHwgZGVmaW5lZChFTV9WRVJT
SU9OX0MpCityZXR1cm4gRkFMU0U7CisKKyNlbHNlCitleHRlcm4gQk9PTCBpc19pbmNvbXBhdGli
bGVfZm4oY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworcmV0dXJuIGlzX2luY29tcGF0aWJs
ZV9mbihvbGQsIG5ldyk7CisjZW5kaWYKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8q
IFN0cmluZyBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbmxpbmUgdXNjaGFyICogX19Vc3RyY2F0KHVz
Y2hhciAqIGRzdCwgY29uc3QgdXNjaGFyICogc3JjLCBjb25zdCBjaGFyICogZnVuYywgaW50IGxp
bmUpCkBAIC03MzksMzIgKzc4NywzNSBAQAogCiBzdGF0aWMgaW5saW5lIHVzY2hhciAqCiBzdHJp
bmdfY29weW5fdGFpbnRfdHJjKGNvbnN0IHVzY2hhciAqIHMsIHVuc2lnbmVkIGxlbiwKLQlCT09M
IHRhaW50ZWQsIGNvbnN0IGNoYXIgKiBmdW5jLCBpbnQgbGluZSkKKwljb25zdCB2b2lkICogcHJv
dG9fbWVtLCBjb25zdCBjaGFyICogZnVuYywgaW50IGxpbmUpCiB7Ci11c2NoYXIgKiBzcyA9IHN0
b3JlX2dldF8zKGxlbiArIDEsIHRhaW50ZWQsIGZ1bmMsIGxpbmUpOwordXNjaGFyICogc3M7Cit1
bnNpZ25lZCBzbGVuID0gVXN0cmxlbihzKTsKK2lmIChsZW4gPiBzbGVuKSBsZW4gPSBzbGVuOwor
c3MgPSBzdG9yZV9nZXRfMyhsZW4gKyAxLCBwcm90b19tZW0sIGZ1bmMsIGxpbmUpOwogbWVtY3B5
KHNzLCBzLCBsZW4pOwogc3NbbGVuXSA9ICdcMCc7CiByZXR1cm4gc3M7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgdXNjaGFyICoKLXN0cmluZ19jb3B5X3RhaW50X3RyYyhjb25zdCB1c2NoYXIgKiBzLCBC
T09MIHRhaW50ZWQsIGNvbnN0IGNoYXIgKiBmdW5jLCBpbnQgbGluZSkKLXsgcmV0dXJuIHN0cmlu
Z19jb3B5bl90YWludF90cmMocywgVXN0cmxlbihzKSwgdGFpbnRlZCwgZnVuYywgbGluZSk7IH0K
K3N0cmluZ19jb3B5X3RhaW50X3RyYyhjb25zdCB1c2NoYXIgKiBzLCBjb25zdCB2b2lkICogcHJv
dG9fbWVtLCBjb25zdCBjaGFyICogZnVuYywgaW50IGxpbmUpCit7IHJldHVybiBzdHJpbmdfY29w
eW5fdGFpbnRfdHJjKHMsIFVzdHJsZW4ocyksIHByb3RvX21lbSwgZnVuYywgbGluZSk7IH0KIAog
c3RhdGljIGlubGluZSB1c2NoYXIgKgogc3RyaW5nX2NvcHluX3RyYyhjb25zdCB1c2NoYXIgKiBz
LCB1bnNpZ25lZCBsZW4sIGNvbnN0IGNoYXIgKiBmdW5jLCBpbnQgbGluZSkKLXsgcmV0dXJuIHN0
cmluZ19jb3B5bl90YWludF90cmMocywgbGVuLCBpc190YWludGVkKHMpLCBmdW5jLCBsaW5lKTsg
fQoreyByZXR1cm4gc3RyaW5nX2NvcHluX3RhaW50X3RyYyhzLCBsZW4sIHMsIGZ1bmMsIGxpbmUp
OyB9CiBzdGF0aWMgaW5saW5lIHVzY2hhciAqCiBzdHJpbmdfY29weV90cmMoY29uc3QgdXNjaGFy
ICogcywgY29uc3QgY2hhciAqIGZ1bmMsIGludCBsaW5lKQoteyByZXR1cm4gc3RyaW5nX2NvcHlf
dGFpbnRfdHJjKHMsIGlzX3RhaW50ZWQocyksIGZ1bmMsIGxpbmUpOyB9Cit7IHJldHVybiBzdHJp
bmdfY29weV90YWludF90cmMocywgcywgZnVuYywgbGluZSk7IH0KIAogCiAvKiBTdHJpbmctY29w
eSBmdW5jdGlvbnMgZXhwbGljaXRseSBzZXR0aW5nIHRoZSB0YWludCBzdGF0dXMgKi8KIAotI2Rl
ZmluZSBzdHJpbmdfY29weW5fdGFpbnQocywgbGVuLCB0YWludGVkKSBcCi0Jc3RyaW5nX2NvcHlu
X3RhaW50X3RyYygocyksIChsZW4pLCAodGFpbnRlZCksIF9fRlVOQ1RJT05fXywgX19MSU5FX18p
Ci0jZGVmaW5lIHN0cmluZ19jb3B5X3RhaW50KHMsIHRhaW50ZWQpIFwKLQlzdHJpbmdfY29weV90
YWludF90cmMoKHMpLCAodGFpbnRlZCksIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCisjZGVmaW5l
IHN0cmluZ19jb3B5bl90YWludChzLCBsZW4sIHByb3RvX21lbSkgXAorCXN0cmluZ19jb3B5bl90
YWludF90cmMoKHMpLCAobGVuKSwgKHByb3RvX21lbSksIF9fRlVOQ1RJT05fXywgX19MSU5FX18p
CisjZGVmaW5lIHN0cmluZ19jb3B5X3RhaW50KHMsIHByb3RvX21lbSkgXAorCXN0cmluZ19jb3B5
X3RhaW50X3RyYygocyksIChwcm90b19tZW0pLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKQogCiAv
KiBTaW1wbGUgc3RyaW5nLWNvcHkgZnVuY3Rpb25zIG1haW50YWluaW5nIHRoZSB0YWludCAqLwog
CkBAIC03ODQsMTEgKzgzNSwxMSBAQAogKi8KIAogc3RhdGljIGlubGluZSB1c2NoYXIgKgotc3Ry
aW5nX2NvcHlsYyhjb25zdCB1c2NoYXIgKnMpCitzdHJpbmdfY29weWxjKGNvbnN0IHVzY2hhciAq
IHMpCiB7Ci11c2NoYXIgKnNzID0gc3RvcmVfZ2V0KFVzdHJsZW4ocykgKyAxLCBpc190YWludGVk
KHMpKTsKLXVzY2hhciAqcCA9IHNzOwotd2hpbGUgKCpzICE9IDApICpwKysgPSB0b2xvd2VyKCpz
KyspOwordXNjaGFyICogc3MgPSBzdG9yZV9nZXQoVXN0cmxlbihzKSArIDEsIHMpOwordXNjaGFy
ICogcCA9IHNzOword2hpbGUgKCpzKSAqcCsrID0gdG9sb3dlcigqcysrKTsKICpwID0gMDsKIHJl
dHVybiBzczsKIH0KQEAgLTgxMCwxMCArODYxLDEwIEBACiAqLwogCiBzdGF0aWMgaW5saW5lIHVz
Y2hhciAqCi1zdHJpbmdfY29weW5sYyh1c2NoYXIgKnMsIGludCBuKQorc3RyaW5nX2NvcHlubGMo
dXNjaGFyICogcywgaW50IG4pCiB7Ci11c2NoYXIgKnNzID0gc3RvcmVfZ2V0KG4gKyAxLCBpc190
YWludGVkKHMpKTsKLXVzY2hhciAqcCA9IHNzOwordXNjaGFyICogc3MgPSBzdG9yZV9nZXQobiAr
IDEsIHMpOwordXNjaGFyICogcCA9IHNzOwogd2hpbGUgKG4tLSA+IDApICpwKysgPSB0b2xvd2Vy
KCpzKyspOwogKnAgPSAwOwogcmV0dXJuIHNzOwpAQCAtODM5LDcgKzg5MCw3IEBACiB1c2NoYXIg
KnNzOwogCiBzdG9yZV9wb29sID0gUE9PTF9QRVJNOwotc3MgPSBzdG9yZV9nZXQobGVuLCBmb3Jj
ZV90YWludCB8fCBpc190YWludGVkKHMpKTsKK3NzID0gc3RvcmVfZ2V0KGxlbiwgZm9yY2VfdGFp
bnQgPyBHRVRfVEFJTlRFRCA6IHMpOwogbWVtY3B5KHNzLCBzLCBsZW4pOwogc3RvcmVfcG9vbCA9
IG9sZF9wb29sOwogcmV0dXJuIHNzOwpAQCAtODY3LDE0ICs5MTgsMTQgQEAKIAogLyogQ3JlYXRl
IGEgZ3Jvd2FibGUtc3RyaW5nIHdpdGggc29tZSBwcmVhc3NpZ25lZCBzcGFjZSAqLwogCi0jZGVm
aW5lIHN0cmluZ19nZXRfdGFpbnRlZChzaXplLCB0YWludGVkKSBcCi0Jc3RyaW5nX2dldF90YWlu
dGVkX3RyYygoc2l6ZSksICh0YWludGVkKSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKKyNkZWZp
bmUgc3RyaW5nX2dldF90YWludGVkKHNpemUsIHByb3RvX21lbSkgXAorCXN0cmluZ19nZXRfdGFp
bnRlZF90cmMoKHNpemUpLCAocHJvdG9fbWVtKSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKIAog
c3RhdGljIGlubGluZSBnc3RyaW5nICoKLXN0cmluZ19nZXRfdGFpbnRlZF90cmModW5zaWduZWQg
c2l6ZSwgQk9PTCB0YWludGVkLCBjb25zdCBjaGFyICogZnVuYywgdW5zaWduZWQgbGluZSkKK3N0
cmluZ19nZXRfdGFpbnRlZF90cmModW5zaWduZWQgc2l6ZSwgY29uc3Qgdm9pZCAqIHByb3RvX21l
bSwgY29uc3QgY2hhciAqIGZ1bmMsIHVuc2lnbmVkIGxpbmUpCiB7Ci1nc3RyaW5nICogZyA9IHN0
b3JlX2dldF8zKHNpemVvZihnc3RyaW5nKSArIHNpemUsIHRhaW50ZWQsIGZ1bmMsIGxpbmUpOwot
Zy0+c2l6ZSA9IHNpemU7Citnc3RyaW5nICogZyA9IHN0b3JlX2dldF8zKHNpemVvZihnc3RyaW5n
KSArIHNpemUsIHByb3RvX21lbSwgZnVuYywgbGluZSk7CitnLT5zaXplID0gc2l6ZTsJCS8qWFhY
IHdvdWxkIGJlIGdvb2QgaWYgd2UgY291bGQgc2VlIHRoZSBhY3R1YWwgYWxsb2Mgc2l6ZSAqLwog
Zy0+cHRyID0gMDsKIGctPnMgPSBVUyhnICsgMSk7CiByZXR1cm4gZzsKQEAgLTg4Niw3ICs5Mzcs
NyBAQAogc3RhdGljIGlubGluZSBnc3RyaW5nICoKIHN0cmluZ19nZXRfdHJjKHVuc2lnbmVkIHNp
emUsIGNvbnN0IGNoYXIgKiBmdW5jLCB1bnNpZ25lZCBsaW5lKQogewotcmV0dXJuIHN0cmluZ19n
ZXRfdGFpbnRlZF90cmMoc2l6ZSwgRkFMU0UsIGZ1bmMsIGxpbmUpOworcmV0dXJuIHN0cmluZ19n
ZXRfdGFpbnRlZF90cmMoc2l6ZSwgR0VUX1VOVEFJTlRFRCwgZnVuYywgbGluZSk7CiB9CiAKIC8q
IE5VTC10ZXJtaW5hdGUgdGhlIEMgc3RyaW5nIGluIHRoZSBncm93YWJsZS1zdHJpbmcsIGFuZCBy
ZXR1cm4gaXQuICovCkBAIC05MzksMzEgKzk5MCw0NSBAQAogfQogCiAKLS8qIENvcHkgdGhlIGNv
bnRlbnQgb2YgYSBzdHJpbmcgdG8gdGFpbnRlZCBtZW1vcnkgKi8KKy8qIENvcHkgdGhlIGNvbnRl
bnQgb2YgYSBzdHJpbmcgdG8gdGFpbnRlZCBtZW1vcnkuICBUaGUgcHJvdG9fbWVtIGFyZword2ls
bCBhbHdheXMgYmUgdGFpbnRlZCwgYW5kIHN1aXRhYmxlIGFzIGEgcHJvdG90eXBlLiAqLwogCiBz
dGF0aWMgaW5saW5lIHZvaWQKLWdzdHJpbmdfcmVidWZmZXIoZ3N0cmluZyAqIGcpCitnc3RyaW5n
X3JlYnVmZmVyKGdzdHJpbmcgKiBnLCBjb25zdCB2b2lkICogcHJvdG9fbWVtKQogewotdXNjaGFy
ICogcyA9IHN0b3JlX2dldChnLT5zaXplLCBUUlVFKTsKK3VzY2hhciAqIHMgPSBzdG9yZV9nZXRf
MyhnLT5zaXplLCBwcm90b19tZW0sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOwogbWVtY3B5KHMs
IGctPnMsIGctPnB0cik7CiBnLT5zID0gczsKIH0KIAogCisjIGlmbmRlZiBDT01QSUxFX1VUSUxJ
VFkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBVc2Ugc3RvcmVfbWFsbG9jIGZvciBETlNB
IHN0cnVjdHMsIGFuZCBleHBsaWNpdCBmcmVlcy4gVXNpbmcgdGhlIHNhbWUgcG9vbAorZm9yIHRo
ZW0gYXMgdGhlIHN0cmluZ3Mgd2UgcHJvY2VlZCB0byBjb3B5IGZyb20gdGhlbSBtZWFudCB0aGV5
IGNvdWxkIG5vdCBiZQorcmVsZWFzZWQsIGhlbmNlIGJsb3dpbmcgNjRrIGZvciBldmVyeSBETlMg
bG9va3VwLiBUaGF0IG1vdW50ZWQgdXAuIFdpdGggbWFsbG9jCit3ZSBkbyBoYXZlIHRvIHRha2Ug
Y2FyZSBvdmVyIG1hcmtpbmcgdGFpbnRlZCBhbGwgY29waWVkIHN0cmluZ3MuICBBIHNlcGFyYXRl
IHBvb2wKK2NvdWxkIGJlIHVzZWQgYW5kIHdvdWxkIGhhbmRsZSB0aGF0IGltcGxpY2l0bHkuICov
CiAKICNkZWZpbmUgc3RvcmVfZ2V0X2Ruc19hbnN3ZXIoKSBzdG9yZV9nZXRfZG5zX2Fuc3dlcl90
cmMoQ1VTIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCiAKIHN0YXRpYyBpbmxpbmUgZG5zX2Fuc3dl
ciAqCiBzdG9yZV9nZXRfZG5zX2Fuc3dlcl90cmMoY29uc3QgdXNjaGFyICogZnVuYywgdW5zaWdu
ZWQgbGluZSkKIHsKLXJldHVybiBzdG9yZV9nZXRfMyhzaXplb2YoZG5zX2Fuc3dlciksIFRSVUUs
IENDUyBmdW5jLCBsaW5lKTsgIC8qIHVzZSB0YWludGVkIG1lbSAqLworcmV0dXJuIHN0b3JlX21h
bGxvY18zKHNpemVvZihkbnNfYW5zd2VyKSwgQ0NTIGZ1bmMsIGxpbmUpOworfQorCisjZGVmaW5l
IHN0b3JlX2ZyZWVfZG5zX2Fuc3dlcihkbnNhKSBzdG9yZV9mcmVlX2Ruc19hbnN3ZXJfdHJjKGRu
c2EsIENVUyBfX0ZVTkNUSU9OX18sIF9fTElORV9fKQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3N0
b3JlX2ZyZWVfZG5zX2Fuc3dlcl90cmMoZG5zX2Fuc3dlciAqIGRuc2EsIGNvbnN0IHVzY2hhciAq
IGZ1bmMsIHVuc2lnbmVkIGxpbmUpCit7CitzdG9yZV9mcmVlXzMoZG5zYSwgQ0NTIGZ1bmMsIGxp
bmUpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogUm91dGluZXMgd2l0aCBrbm93
bGVkZ2Ugb2Ygc3Bvb2wgbGF5b3V0ICovCiAKLSMgaWZuZGVmIENPTVBJTEVfVVRJTElUWQogc3Rh
dGljIGlubGluZSB2b2lkCiBzcG9vbF9wbmFtZV9idWYodXNjaGFyICogYnVmLCBpbnQgbGVuKQog
ewpAQCAtMTAwOCw3ICsxMDczLDcgQEAKICNpZmRlZiBDT01QSUxFX1VUSUxJVFkJCS8qIHZlcnNp
b24gYXZvaWRpbmcgc3RyaW5nLWV4dGVuc2lvbiAqLwogaW50IGxlbiA9IFVzdHJsZW4oc3Bvb2xf
ZGlyZWN0b3J5KSArIDEgKyBVc3RybGVuKHF1ZXVlX25hbWUpICsgMSArIFVzdHJsZW4ocHVycG9z
ZSkgKyAxCiAJKyBVc3RybGVuKHN1YmRpcikgKyAxICsgVXN0cmxlbihmbmFtZSkgKyBVc3RybGVu
KHN1ZmZpeCkgKyAxOwotdXNjaGFyICogYnVmID0gc3RvcmVfZ2V0KGxlbiwgRkFMU0UpOwordXNj
aGFyICogYnVmID0gc3RvcmVfZ2V0KGxlbiwgR0VUX1VOVEFJTlRFRCk7CiBzdHJpbmdfZm9ybWF0
KGJ1ZiwgbGVuLCAiJXMvJXMvJXMvJXMvJXMlcyIsCiAJc3Bvb2xfZGlyZWN0b3J5LCBxdWV1ZV9u
YW1lLCBwdXJwb3NlLCBzdWJkaXIsIGZuYW1lLCBzdWZmaXgpOwogcmV0dXJuIGJ1ZjsKQEAgLTEw
MjksMTggKzEwOTQsMjUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBUaW1lIGNhbGN1
bGF0aW9ucyAqLwogCisvKiBEaWZmIHR3byB0aW1lcyAobGF0ZXIsIGVhcmxpZXIpIHJldHVybmlu
ZyBkaWZmIGluIDFzdCBhcmcgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotdGltZXNpbmNlKHN0cnVj
dCB0aW1ldmFsICogZGlmZiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKiB0aGVuKQordGltZWRpZmYo
c3RydWN0IHRpbWV2YWwgKiBsYXRlciwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKiBlYXJsaWVyKQog
ewotZ2V0dGltZW9mZGF5KGRpZmYsIE5VTEwpOwotZGlmZi0+dHZfc2VjIC09IHRoZW4tPnR2X3Nl
YzsKLWlmICgoZGlmZi0+dHZfdXNlYyAtPSB0aGVuLT50dl91c2VjKSA8IDApCitsYXRlci0+dHZf
c2VjIC09IGVhcmxpZXItPnR2X3NlYzsKK2lmICgobGF0ZXItPnR2X3VzZWMgLT0gZWFybGllci0+
dHZfdXNlYykgPCAwKQogICB7Ci0gIGRpZmYtPnR2X3NlYy0tOwotICBkaWZmLT50dl91c2VjICs9
IDEwMDAqMTAwMDsKKyAgbGF0ZXItPnR2X3NlYy0tOworICBsYXRlci0+dHZfdXNlYyArPSAxMDAw
KjEwMDA7CiAgIH0KIH0KIAorc3RhdGljIGlubGluZSB2b2lkCit0aW1lc2luY2Uoc3RydWN0IHRp
bWV2YWwgKiBkaWZmLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqIHRoZW4pCit7CitnZXR0aW1lb2Zk
YXkoZGlmZiwgTlVMTCk7Cit0aW1lZGlmZihkaWZmLCB0aGVuKTsKK30KKwogc3RhdGljIGlubGlu
ZSB1c2NoYXIgKgogc3RyaW5nX3RpbWVkaWZmKGNvbnN0IHN0cnVjdCB0aW1ldmFsICogZGlmZikK
IHsKQEAgLTExMDEsNiArMTE3Myw3IEBACiBlcnJubyA9IEVBQ0NFUzsKIHJldHVybiAtMTsKIH0K
KyNpZmRlZiBFWElNX0hBVkVfT1BFTkFUCiBzdGF0aWMgaW5saW5lIGludAogZXhpbV9vcGVuYXQo
aW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzKQogewpAQCAtMTExNyw2
ICsxMTkwLDcgQEAKIGVycm5vID0gRUFDQ0VTOwogcmV0dXJuIC0xOwogfQorI2VuZGlmCiAKIHN0
YXRpYyBpbmxpbmUgRklMRSAqCiBleGltX2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBjb25z
dCBjaGFyICptb2RlKQpAQCAtMTE3NSw2ICsxMjQ5LDUwIEBACiAgIG91dGZkcHRyLCBtYWtlX2xl
YWRlciwgcHVycG9zZSk7CiB9CiAKKy8qIFJldHVybiAxIGlmIGZkIGlzIHVzYWJsZSBwZXIgcG9s
bGJpdHMsIGVsc2UgMCAqLworc3RhdGljIGlubGluZSBpbnQKK3BvbGxfb25lX2ZkKGludCBmZCwg
c2hvcnQgcG9sbGJpdHMsIGludCB0bW9fbWlsbGlzZWMpCit7CitzdHJ1Y3QgcG9sbGZkIHAgPSB7
LmZkID0gZmQsIC5ldmVudHMgPSBwb2xsYml0c307CityZXR1cm4gcG9sbCgmcCwgMSwgdG1vX21p
bGxpc2VjKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENsaWVudC1zaWRlIHNt
dHAgbG9nIHN0cmluZywgZm9yIGRlYnVnICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc210cF9k
ZWJ1Z19jbWQoY29uc3QgdXNjaGFyICogYnVmLCBpbnQgbW9kZSkKK3sKK0hERUJVRyhEX3RyYW5z
cG9ydHxEX2FjbHxEX3YpIGRlYnVnX3ByaW50Zl9pbmRlbnQoIiAgU01UUCVjPiAlc1xuIiwKKyAg
bW9kZSA9PSBTQ01EX0JVRkZFUiA/ICd8JyA6IG1vZGUgPT0gU0NNRF9NT1JFID8gJysnIDogJz4n
LCBidWYpOworCisjICBpZm5kZWYgRElTQUJMRV9DTElFTlRfQ01EX0xPRworICB7CisgIGludCBs
ZW4gPSBVc3RyY3NwbihidWYsICIgXG4iKTsKKyAgaW50IG9sZF9wb29sID0gc3RvcmVfcG9vbDsK
KyAgc3RvcmVfcG9vbCA9IFBPT0xfUEVSTTsJLyogTWFpbiBwb29sIEFDTCBhbGxvY2F0aW9ucyBl
Zy4gY2FsbG91dHMgZ2V0IHJlbGVhc2VkICovCisgIGNsaWVudF9jbWRfbG9nID0gc3RyaW5nX2Fw
cGVuZF9saXN0ZWxlX24oY2xpZW50X2NtZF9sb2csICc6JywgYnVmLCBNSU4obGVuLCA4KSk7Cisg
IGlmIChtb2RlID09IFNDTURfQlVGRkVSKSAKKyAgICB7CisgICAgY2xpZW50X2NtZF9sb2cgPSBz
dHJpbmdfY2F0bihjbGllbnRfY21kX2xvZywgVVMifCIsIDEpOyAKKyAgICAodm9pZCkgc3RyaW5n
X2Zyb21fZ3N0cmluZyhjbGllbnRfY21kX2xvZyk7CisgICAgfQorICBzdG9yZV9wb29sID0gb2xk
X3Bvb2w7CisgIH0KKyMgIGVuZGlmCit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitzbXRwX2Rl
YnVnX2NtZF9yZXBvcnQodm9pZCkKK3sKKyMgIGlmbmRlZiBESVNBQkxFX0NMSUVOVF9DTURfTE9H
CitkZWJ1Z19wcmludGYoImNtZGxvZzogJyVzJ1xuIiwgY2xpZW50X2NtZF9sb2cgPyBjbGllbnRf
Y21kX2xvZy0+cyA6IFVTIih1bnNldCkiKTsKKyMgIGVuZGlmCit9CisKKworCiAjIGVuZGlmCS8q
ICFDT01QSUxFX1VUSUxJVFkgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtdXIg
ZXhpbS5vcmlnL3NyYy9nbG9iYWxzLmMgZXhpbS9zcmMvZ2xvYmFscy5jCi0tLSBleGltLm9yaWcv
c3JjL2dsb2JhbHMuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhp
bS9zcmMvZ2xvYmFscy5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0y
LDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50
ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8K
IC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8K
LS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRo
ZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8K
IAogLyogQWxsIHRoZSBnbG9iYWwgdmFyaWFibGVzIGFyZSBkZWZpbmVkIHRvZ2V0aGVyIGluIHRo
aXMgb25lIG1vZHVsZSwgc28KQEAgLTExNCwxNSArMTE0LDE3IEBACiAKIHVzY2hhciAqZHNuX2Vu
dmlkICAgICAgICAgICAgICA9IE5VTEw7CiBpbnQgICAgIGRzbl9yZXQgICAgICAgICAgICAgICAg
PSAwOwotY29uc3QgcGNyZSAgKnJlZ2V4X0RTTiAgICAgICAgID0gTlVMTDsKK2NvbnN0IHBjcmUy
X2NvZGUgICpyZWdleF9EU04gICAgICAgICA9IE5VTEw7CiB1c2NoYXIgKmRzbl9hZHZlcnRpc2Vf
aG9zdHMgICAgPSBOVUxMOwogCiAjaWZuZGVmIERJU0FCTEVfVExTCiBCT09MICAgIGdudXRsc19j
b21wYXRfbW9kZSAgICAgPSBGQUxTRTsKIEJPT0wgICAgZ251dGxzX2FsbG93X2F1dG9fcGtjczEx
ID0gRkFMU0U7Cit1c2NoYXIgKmhvc3RzX3JlcXVpcmVfYWxwbiAgICAgPSBOVUxMOwogdXNjaGFy
ICpvcGVuc3NsX29wdGlvbnMgICAgICAgID0gTlVMTDsKLWNvbnN0IHBjcmUgKnJlZ2V4X1NUQVJU
VExTICAgICA9IE5VTEw7Citjb25zdCBwY3JlMl9jb2RlICpyZWdleF9TVEFSVFRMUyAgICAgPSBO
VUxMOwogdXNjaGFyICp0bHNfYWR2ZXJ0aXNlX2hvc3RzICAgID0gVVMiKiI7Cit1c2NoYXIgKnRs
c19hbHBuCSAgICAgICA9IFVTInNtdHA6ZXNtdHAiOwogdXNjaGFyICp0bHNfY2VydGlmaWNhdGUg
ICAgICAgID0gTlVMTDsKIHVzY2hhciAqdGxzX2NybCAgICAgICAgICAgICAgICA9IE5VTEw7CiAv
KiBUaGlzIGRlZmF1bHQgbWF0Y2hlcyBOU1MgREhfTUFYX1BfQklUUyB2YWx1ZSBhdCBjdXJyZW50
IHRpbWUgKDIwMTIpLCBiZWNhdXNlCkBAIC0xMzcsMTIgKzEzOSwxNCBAQAogdXNjaGFyICp0bHNf
cHJpdmF0ZWtleSAgICAgICAgID0gTlVMTDsKIEJPT0wgICAgdGxzX3JlbWVtYmVyX2VzbXRwICAg
ICA9IEZBTFNFOwogdXNjaGFyICp0bHNfcmVxdWlyZV9jaXBoZXJzICAgID0gTlVMTDsKLSMgaWZk
ZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUKKyMgaWZuZGVmIERJU0FCTEVfVExTX1JFU1VNRQog
dXNjaGFyICp0bHNfcmVzdW1wdGlvbl9ob3N0cyAgID0gTlVMTDsKICMgZW5kaWYKIHVzY2hhciAq
dGxzX3RyeV92ZXJpZnlfaG9zdHMgICA9IE5VTEw7CiB1c2NoYXIgKnRsc192ZXJpZnlfY2VydGlm
aWNhdGVzPSBVUyJzeXN0ZW0iOwogdXNjaGFyICp0bHNfdmVyaWZ5X2hvc3RzICAgICAgID0gTlVM
TDsKK2ludCAgICAgdGxzX3dhdGNoX2ZkCSAgICAgICA9IC0xOwordGltZV90ICB0bHNfd2F0Y2hf
dHJpZ2dlcl90aW1lID0gKHRpbWVfdCkwOwogI2Vsc2UJLypESVNBQkxFX1RMUyovCiB1c2NoYXIg
KnRsc19hZHZlcnRpc2VfaG9zdHMgICAgPSBOVUxMOwogI2VuZGlmCkBAIC0xNTEsMTEgKzE1NSwx
MSBAQAogLyogUGVyIFJlY2lwaWVudCBEYXRhIFJlc3BvbnNlIHZhcmlhYmxlcyAqLwogQk9PTCAg
ICBwcmRyX2VuYWJsZSAgICAgICAgICAgID0gRkFMU0U7CiBCT09MICAgIHByZHJfcmVxdWVzdGVk
ICAgICAgICAgPSBGQUxTRTsKLWNvbnN0IHBjcmUgKnJlZ2V4X1BSRFIgICAgICAgICA9IE5VTEw7
Citjb25zdCBwY3JlMl9jb2RlICpyZWdleF9QUkRSICAgICAgICAgPSBOVUxMOwogI2VuZGlmCiAK
ICNpZmRlZiBTVVBQT1JUX0kxOE4KLWNvbnN0IHBjcmUgKnJlZ2V4X1VURjggICAgICAgICA9IE5V
TEw7Citjb25zdCBwY3JlMl9jb2RlICpyZWdleF9VVEY4ICAgICAgICAgPSBOVUxMOwogI2VuZGlm
CiAKIC8qIElucHV0LXJlYWRpbmcgZnVuY3Rpb25zIGZvciBtZXNzYWdlcywgc28gd2UgY2FuIHVz
ZSBzcGVjaWFsIG9uZXMgZm9yCkBAIC0xNjMsMTYgKzE2NywxOCBAQAogc3RhbmQtYWxvbmUgdGVz
dHMuICovCiAKICNpZiAhZGVmaW5lZChTVEFORF9BTE9ORSkgJiYgIWRlZmluZWQoTUFDUk9fUFJF
REVGKQotaW50ICgqbHdyX3JlY2VpdmVfZ2V0YykodW5zaWduZWQpID0gc3RkaW5fZ2V0YzsKK2lu
dAkoKmx3cl9yZWNlaXZlX2dldGMpKHVuc2lnbmVkKQk9IHN0ZGluX2dldGM7CiB1c2NoYXIgKiAo
Kmx3cl9yZWNlaXZlX2dldGJ1ZikodW5zaWduZWQgKikgPSBOVUxMOwotaW50ICgqbHdyX3JlY2Vp
dmVfdW5nZXRjKShpbnQpID0gc3RkaW5fdW5nZXRjOwotaW50ICgqcmVjZWl2ZV9nZXRjKSh1bnNp
Z25lZCkgID0gc3RkaW5fZ2V0YzsKLXVzY2hhciAqICgqcmVjZWl2ZV9nZXRidWYpKHVuc2lnbmVk
ICopICA9IE5VTEw7Ci12b2lkICgqcmVjZWl2ZV9nZXRfY2FjaGUpKHZvaWQpPSBOVUxMOwotaW50
ICgqcmVjZWl2ZV91bmdldGMpKGludCkgICAgID0gc3RkaW5fdW5nZXRjOwotaW50ICgqcmVjZWl2
ZV9mZW9mKSh2b2lkKSAgICAgID0gc3RkaW5fZmVvZjsKLWludCAoKnJlY2VpdmVfZmVycm9yKSh2
b2lkKSAgICA9IHN0ZGluX2ZlcnJvcjsKLUJPT0wgKCpyZWNlaXZlX3NtdHBfYnVmZmVyZWQpKHZv
aWQpID0gTlVMTDsgICAvKiBPbmx5IHVzZWQgZm9yIFNNVFAgKi8KK2ludAkoKmx3cl9yZWNlaXZl
X3VuZ2V0YykoaW50KQk9IHN0ZGluX3VuZ2V0YzsKK0JPT0wJKCpsd3JfcmVjZWl2ZV9oYXNjKSh2
b2lkKQk9IHN0ZGluX2hhc2M7CisKK2ludAkoKnJlY2VpdmVfZ2V0YykodW5zaWduZWQpIAk9IHN0
ZGluX2dldGM7Cit1c2NoYXIgKiAoKnJlY2VpdmVfZ2V0YnVmKSh1bnNpZ25lZCAqKSAJPSBOVUxM
Owordm9pZAkoKnJlY2VpdmVfZ2V0X2NhY2hlKSh1bnNpZ25lZCkJPSBOVUxMOworQk9PTAkoKnJl
Y2VpdmVfaGFzYykodm9pZCkJCT0gc3RkaW5faGFzYzsKK2ludAkoKnJlY2VpdmVfdW5nZXRjKShp
bnQpICAgIAk9IHN0ZGluX3VuZ2V0YzsKK2ludAkoKnJlY2VpdmVfZmVvZikodm9pZCkgICAgIAk9
IHN0ZGluX2Zlb2Y7CitpbnQJKCpyZWNlaXZlX2ZlcnJvcikodm9pZCkgICAJPSBzdGRpbl9mZXJy
b3I7CiAjZW5kaWYKIAogCkBAIC0zMDgsNiArMzE0LDcgQEAKICNlbmRpZgogCS5zbXRwX2luX3Bp
cGVsaW5pbmdfYWR2ZXJ0aXNlZCA9IEZBTFNFLAogCS5zbXRwX2luX3BpcGVsaW5pbmdfdXNlZCA9
IEZBTFNFLAorCS5zbXRwX2luX3F1aXQJCT0gRkFMU0UsCiAJLnNwb29sX2ZpbGVfd2lyZWZvcm1h
dCAgPSBGQUxTRSwKIAkuc3VibWlzc2lvbl9tb2RlICAgICAgICA9IEZBTFNFLAogCS5zdXBwcmVz
c19sb2NhbF9maXh1cHMgID0gRkFMU0UsCkBAIC0zODMsNyArMzkwLDcgQEAKIEJPT0wgICAgcHJv
eHlfc2Vzc2lvbiAgICAgICAgICA9IEZBTFNFOwogI2VuZGlmCiAKLSNpZmRlZiBFWFBFUklNRU5U
QUxfUVVFVUVfUkFNUAorI2lmbmRlZiBESVNBQkxFX1FVRVVFX1JBTVAKIEJPT0wgICAgcXVldWVf
ZmFzdF9yYW1wCQk9IEZBTFNFOwogI2VuZGlmCiBCT09MICAgIHF1ZXVlX2xpc3RfcmVxdWlyZXNf
YWRtaW4gPSBUUlVFOwpAQCAtNDA4LDEwICs0MTUsNiBAQAogI2VuZGlmCiBCT09MICAgIHNwbGl0
X3Nwb29sX2RpcmVjdG9yeSAgPSBGQUxTRTsKIEJPT0wgICAgc3Bvb2xfd2lyZWZvcm1hdCAgICAg
ICA9IEZBTFNFOwotI2lmZGVmIEVYUEVSSU1FTlRBTF9TUlMKLUJPT0wgICAgc3JzX3VzZWhhc2gg
ICAgICAgICAgICA9IFRSVUU7Ci1CT09MICAgIHNyc191c2V0aW1lc3RhbXAgICAgICAgPSBUUlVF
OwotI2VuZGlmCiBCT09MICAgIHN0cmljdF9hY2xfdmFycyAgICAgICAgPSBGQUxTRTsKIEJPT0wg
ICAgc3RyaXBfZXhjZXNzX2FuZ2xlX2JyYWNrZXRzID0gRkFMU0U7CiBCT09MICAgIHN0cmlwX3Ry
YWlsaW5nX2RvdCAgICAgPSBGQUxTRTsKQEAgLTU5Nyw5ICs2MDAsNiBAQAogICAgIC5leHRyYV9o
ZWFkZXJzID0JTlVMTCwKICAgICAucmVtb3ZlX2hlYWRlcnMgPQlOVUxMLAogICAgIC52YXJpYWJs
ZXMgPQlOVUxMLAotI2lmZGVmIEVYUEVSSU1FTlRBTF9TUlMKLSAgICAuc3JzX3NlbmRlciA9CU5V
TEwsCi0jZW5kaWYKICAgICAuaWdub3JlX2Vycm9yID0JRkFMU0UsCiAjaWZkZWYgU1VQUE9SVF9J
MThOCiAgICAgLnV0ZjhfbXNnID0JCUZBTFNFLApAQCAtNjQ5LDcgKzY0OSw4IEBACiAKIHVzY2hh
ciAqYXV0aF9kZWZlcl9tc2cgICAgICAgICA9IFVTInJlYXNvbiBub3QgcmVjb3JkZWQiOwogdXNj
aGFyICphdXRoX2RlZmVyX3VzZXJfbXNnICAgID0gVVMiIjsKLXVzY2hhciAqYXV0aF92YXJzW0FV
VEhfVkFSU107Citjb25zdCB1c2NoYXIgKmF1dGhfdmFyc1tBVVRIX1ZBUlNdOwordXNjaGFyICph
dXRoZW50aWNhdG9yX25hbWUgICAgID0gTlVMTDsKIGludCAgICAgYXV0b190aGF3ICAgICAgICAg
ICAgICA9IDA7CiAjaWZkZWYgV0lUSF9DT05URU5UX1NDQU4KIGludCAgICAgYXZfZmFpbGVkICAg
ICAgICAgICAgICA9IEZBTFNFOwkvKiBib29sZWFuIGJ1dCBhY2Nlc3NlZCBhcyB2dHlwZV9pbnQq
LwpAQCAtNzAyLDExICs3MDMsMTggQEAKIHVuc2lnbmVkIGNodW5raW5nX2RhdGFzaXplICAgICA9
IDA7CiB1bnNpZ25lZCBjaHVua2luZ19kYXRhX2xlZnQgICAgPSAwOwogY2h1bmtpbmdfc3RhdGVf
dCBjaHVua2luZ19zdGF0ZT0gQ0hVTktJTkdfTk9UX09GRkVSRUQ7Ci1jb25zdCBwY3JlICpyZWdl
eF9DSFVOS0lORyAgICAgPSBOVUxMOworY29uc3QgcGNyZTJfY29kZSAqcmVnZXhfQ0hVTktJTkcg
ICAgID0gTlVMTDsKKworI2lmZGVmIEVYUEVSSU1FTlRBTF9FU01UUF9MSU1JVFMKK2NvbnN0IHBj
cmUyX2NvZGUgKnJlZ2V4X0xJTUlUUyAgICAgICAgPSBOVUxMOworI2VuZGlmCiAKIHVzY2hhciAq
Y2xpZW50X2F1dGhlbnRpY2F0b3IgICA9IE5VTEw7CiB1c2NoYXIgKmNsaWVudF9hdXRoZW50aWNh
dGVkX2lkID0gTlVMTDsKIHVzY2hhciAqY2xpZW50X2F1dGhlbnRpY2F0ZWRfc2VuZGVyID0gTlVM
TDsKKyNpZm5kZWYgRElTQUJMRV9DTElFTlRfQ01EX0xPRworZ3N0cmluZyAqY2xpZW50X2NtZF9s
b2cgICAgICAgID0gTlVMTDsKKyNlbmRpZgogaW50ICAgICBjbG1hY3JvX2NvdW50ICAgICAgICAg
ID0gMDsKIHVzY2hhciAqY2xtYWNyb3NbTUFYX0NMTUFDUk9TXTsKIEZJTEUgICAqY29uZmlnX2Zp
bGUgICAgICAgICAgICA9IE5VTEw7CkBAIC03MzYsNiArNzQ0LDExIEBACiB1c2NoYXIgKmNvbnRp
bnVlX2hvc3RfYWRkcmVzcyAgPSBOVUxMOwogaW50ICAgICBjb250aW51ZV9zZXF1ZW5jZSAgICAg
ID0gMTsKIHVzY2hhciAqY29udGludWVfdHJhbnNwb3J0ICAgICA9IE5VTEw7CisjaWZkZWYgRVhQ
RVJJTUVOVEFMX0VTTVRQX0xJTUlUUwordW5zaWduZWQgY29udGludWVfbGltaXRfbWFpbCAgID0g
MDsKK3Vuc2lnbmVkIGNvbnRpbnVlX2xpbWl0X3JjcHQgICA9IDA7Cit1bnNpZ25lZCBjb250aW51
ZV9saW1pdF9yY3B0ZG9tPSAwOworI2VuZGlmCiAKIHVzY2hhciAqY3NhX3N0YXR1cyAgICAgICAg
ICAgICA9IE5VTEw7CiBjdXRfdCAgIGN1dHRocm91Z2ggPSB7CkBAIC04MDEsOSArODE0LDEyIEBA
CiAgIEJJVF9UQUJMRShELCB1aWQpLAogICBCSVRfVEFCTEUoRCwgdmVyaWZ5KSwKIH07Ci1pbnQg
ICAgIGRlYnVnX29wdGlvbnNfY291bnQgICAgPSBuZWxlbShkZWJ1Z19vcHRpb25zKTsKK2ludCAg
ICAgIGRlYnVnX29wdGlvbnNfY291bnQJPSBuZWxlbShkZWJ1Z19vcHRpb25zKTsKK3VzY2hhciAg
IGRlYnVnbG9nX25hbWVbTE9HX05BTUVfU0laRV0gPSB7MH07Cit1bnNpZ25lZCBkZWJ1Z19wcmV0
cmlnZ2VyX2JzaXplCT0gMDsKK3VzY2hhciAqIGRlYnVnX3ByZXRyaWdnZXJfYnVmCT0gTlVMTDsK
K3Vuc2lnbmVkIGludCBkZWJ1Z19zZWxlY3Rvcgk9IDA7CiAKLXVuc2lnbmVkIGludCBkZWJ1Z19z
ZWxlY3RvciAgICA9IDA7CiBpbnQgICAgIGRlbGF5X3dhcm5pbmdbREVMQVlfV0FSTklOR19TSVpF
XSA9IHsgREVMQVlfV0FSTklOR19TSVpFLCAxLCAyNCo2MCo2MCB9OwogdXNjaGFyICpkZWxheV93
YXJuaW5nX2NvbmRpdGlvbj0KICAgVVMiJHtpZiBvciB7IgpAQCAtODgzLDcgKzg5OSwxMCBAQAog
dXNjaGFyICpkbnNsaXN0X3ZhbHVlICAgICAgICAgID0gTlVMTDsKIHRyZWVfbm9kZSAqZG9tYWlu
bGlzdF9hbmNob3IgICA9IE5VTEw7CiBpbnQgICAgIGRvbWFpbmxpc3RfY291bnQgICAgICAgPSAw
OworY29uc3QgdXNjaGFyICpkcml2ZXJfc3JjZmlsZSAgID0gTlVMTDsKK2ludCAgICAgZHJpdmVy
X3NyY2xpbmUJICAgICAgID0gMDsKIHVzY2hhciAqZHNuX2Zyb20gICAgICAgICAgICAgICA9IFVT
IERFRkFVTFRfRFNOX0ZST007Cit1bnNpZ25lZCBpbnQgZHRyaWdnZXJfc2VsZWN0b3IgPSAwOwog
CiBpbnQgICAgIGVycm5vX3F1b3RhICAgICAgICAgICAgPSBFUlJOT19RVU9UQTsKIHVzY2hhciAq
ZXJyb3JzX2NvcHkgICAgICAgICAgICA9IE5VTEw7CkBAIC05MDYsNyArOTI1LDcgQEAKIGludCAg
ICAgZXhwYW5kX2ZvcmJpZCAgICAgICAgICA9IDA7CiBpbnQgICAgIGV4cGFuZF9ubGVuZ3RoW0VY
UEFORF9NQVhOKzFdOwogaW50ICAgICBleHBhbmRfbm1heCAgICAgICAgICAgID0gLTE7Ci11c2No
YXIgKmV4cGFuZF9uc3RyaW5nW0VYUEFORF9NQVhOKzFdOworY29uc3QgdXNjaGFyICpleHBhbmRf
bnN0cmluZ1tFWFBBTkRfTUFYTisxXTsKIHVzY2hhciAqZXhwYW5kX3N0cmluZ19tZXNzYWdlOwog
dXNjaGFyICpleHRyYV9sb2NhbF9pbnRlcmZhY2VzID0gTlVMTDsKIApAQCAtOTM1LDcgKzk1NCw3
IEBACiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgaGFkX2NvbW1hbmRfc2lndGVybSA9IDA7CiB2b2xh
dGlsZSBzaWdfYXRvbWljX3QgaGFkX2RhdGFfdGltZW91dCAgICA9IDA7CiB2b2xhdGlsZSBzaWdf
YXRvbWljX3QgaGFkX2RhdGFfc2lnaW50ICAgICA9IDA7Ci11c2NoYXIgKmhlYWRlcnNfY2hhcnNl
dCAgICAgICAgPSBVUyBIRUFERVJTX0NIQVJTRVQ7Citjb25zdCB1c2NoYXIgKmhlYWRlcnNfY2hh
cnNldCAgPSBVUyBIRUFERVJTX0NIQVJTRVQ7CiBpbnQgICAgIGhlYWRlcl9pbnNlcnRfbWF4bGVu
ICAgPSA2NCAqIDEwMjQ7CiBoZWFkZXJfbGluZSAgKmhlYWRlcl9sYXN0ICAgICAgPSBOVUxMOwog
aGVhZGVyX2xpbmUgICpoZWFkZXJfbGlzdCAgICAgID0gTlVMTDsKQEAgLTk3OCw2ICs5OTcsNyBA
QAogdHJlZV9ub2RlICpob3N0bGlzdF9hbmNob3IgICAgID0gTlVMTDsKIGludCAgICAgaG9zdGxp
c3RfY291bnQgICAgICAgICA9IDA7CiB1c2NoYXIgKmhvc3RzX3RyZWF0X2FzX2xvY2FsICAgPSBO
VUxMOwordXNjaGFyICpob3N0c19yZXF1aXJlX2hlbG8gICAgID0gVVMiKiI7CiB1c2NoYXIgKmhv
c3RzX2Nvbm5lY3Rpb25fbm9sb2cgPSBOVUxMOwogCiBpbnQgICAgIGlnbm9yZV9ib3VuY2VfZXJy
b3JzX2FmdGVyID0gMTAqNyoyNCo2MCo2MDsgIC8qIDEwIHdlZWtzICovCkBAIC05OTUsNiArMTAx
NSw5IEBACiBpbnQgICAgIGtlZXBfbWFsZm9ybWVkICAgICAgICAgPSA0KjI0KjYwKjYwOyAgICAv
KiA0IGRheXMgKi8KIAogdXNjaGFyICplbGRhcF9kbiAgICAgICAgICAgICAgID0gTlVMTDsKKyNp
ZmRlZiBFWFBFUklNRU5UQUxfRVNNVFBfTElNSVRTCit1c2NoYXIgKmxpbWl0c19hZHZlcnRpc2Vf
aG9zdHMgPSBVUyIqIjsKKyNlbmRpZgogaW50ICAgICBsb2FkX2F2ZXJhZ2UgICAgICAgICAgID0g
LTI7CiB1c2NoYXIgKmxvY2FsX2Zyb21fcHJlZml4ICAgICAgPSBOVUxMOwogdXNjaGFyICpsb2Nh
bF9mcm9tX3N1ZmZpeCAgICAgID0gTlVMTDsKQEAgLTEwMjgsNiArMTA1MSw3IEBACiAgIExpX291
dGdvaW5nX2ludGVyZmFjZSwgLyogc2VlIGRfbG9nX2ludGVyZmFjZSBpbiBkZWxpdmVyLmMgKi8K
ICAgTGlfbXNnX2lkLAogICBMaV9xdWV1ZV9ydW4sCisgIExpX3F1ZXVlX3RpbWVfZXhjbHVzaXZl
LAogICBMaV9yZWplY3RlZF9oZWFkZXIsCiAgIExpX3JldHJ5X2RlZmVyLAogICBMaV9zZW5kZXJf
dmVyaWZ5X2ZhaWwsCkBAIC0xMDc2LDExICsxMTAwLDEzIEBACiAgIEJJVF9UQUJMRShMLCBvdXRn
b2luZ19wb3J0KSwKICAgQklUX1RBQkxFKEwsIHBpZCksCiAgIEJJVF9UQUJMRShMLCBwaXBlbGlu
aW5nKSwKKyAgQklUX1RBQkxFKEwsIHByb3RvY29sX2RldGFpbCksCiAjaWYgZGVmaW5lZChTVVBQ
T1JUX1BST1hZKSB8fCBkZWZpbmVkKFNVUFBPUlRfU09DS1MpCiAgIEJJVF9UQUJMRShMLCBwcm94
eSksCiAjZW5kaWYKICAgQklUX1RBQkxFKEwsIHF1ZXVlX3J1biksCiAgIEJJVF9UQUJMRShMLCBx
dWV1ZV90aW1lKSwKKyAgQklUX1RBQkxFKEwsIHF1ZXVlX3RpbWVfZXhjbHVzaXZlKSwKICAgQklU
X1RBQkxFKEwsIHF1ZXVlX3RpbWVfb3ZlcmFsbCksCiAgIEJJVF9UQUJMRShMLCByZWNlaXZlX3Rp
bWUpLAogICBCSVRfVEFCTEUoTCwgcmVjZWl2ZWRfcmVjaXBpZW50cyksCkBAIC0xMTM2LDcgKzEx
NjIsNiBAQAogdXNjaGFyICptZXNzYWdlX2lkOwogdXNjaGFyICptZXNzYWdlX2lkX2RvbWFpbiAg
ICAgID0gTlVMTDsKIHVzY2hhciAqbWVzc2FnZV9pZF90ZXh0ICAgICAgICA9IE5VTEw7Ci1zdHJ1
Y3QgdGltZXZhbCBtZXNzYWdlX2lkX3R2ICAgPSB7IDAsIDAgfTsKIHVzY2hhciAgbWVzc2FnZV9p
ZF9vcHRpb25bTUVTU0FHRV9JRF9MRU5HVEggKyAzXTsKIHVzY2hhciAqbWVzc2FnZV9pZF9leHRl
cm5hbDsKIGludCAgICAgbWVzc2FnZV9saW5lY291bnQgICAgICA9IDA7CkBAIC0xMTgyLDYgKzEy
MDcsMTAgQEAKIHVzY2hhciAqb3ZlcnJpZGVfbG9jYWxfaW50ZXJmYWNlcyA9IE5VTEw7CiB1c2No
YXIgKm92ZXJyaWRlX3BpZF9maWxlX3BhdGggPSBOVUxMOwogCitwY3JlMl9nZW5lcmFsX2NvbnRl
eHQgKiBwY3JlX2dlbl9jdHggPSBOVUxMOworcGNyZTJfY29tcGlsZV9jb250ZXh0ICogcGNyZV9j
bXBfY3R4ID0gTlVMTDsKK3BjcmUyX21hdGNoX2NvbnRleHQgKiBwY3JlX210Y19jdHggPSBOVUxM
OworCiB1c2NoYXIgKnBlcmNlbnRfaGFja19kb21haW5zICAgPSBOVUxMOwogdXNjaGFyICpwaWRf
ZmlsZV9wYXRoICAgICAgICAgID0gVVMgUElEX0ZJTEVfUEFUSAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIlwwPC0tLS0tLS0tLS0tLS0tU3BhY2UgdG8gcGF0Y2ggcGlkX2ZpbGVfcGF0aC0+
IjsKQEAgLTEyMDEsNiArMTIzMCw3IEBACiBpbnQgICAgIHByb3h5X2V4dGVybmFsX3BvcnQgICAg
PSAwOwogdXNjaGFyICpwcm94eV9sb2NhbF9hZGRyZXNzICAgID0gTlVMTDsKIGludCAgICAgcHJv
eHlfbG9jYWxfcG9ydCAgICAgICA9IDA7CitpbnQgICAgIHByb3h5X3Byb3RvY29sX3RpbWVvdXQg
PSAzOwogI2VuZGlmCiAKIHVzY2hhciAqcHJ2c2NoZWNrX2FkZHJlc3MgICAgICA9IE5VTEw7CkBA
IC0xMjY2LDcgKzEyOTYsNyBAQAogaW50ICAgICByZWNlaXZlZF9oZWFkZXJzX21heCAgID0gMzA7
CiB1c2NoYXIgKnJlY2VpdmVkX3Byb3RvY29sICAgICAgPSBOVUxMOwogc3RydWN0IHRpbWV2YWwg
cmVjZWl2ZWRfdGltZSAgID0geyAwLCAwIH07Ci1zdHJ1Y3QgdGltZXZhbCByZWNlaXZlZF90aW1l
X3Rha2VuID0geyAwLCAwIH07CitzdHJ1Y3QgdGltZXZhbCByZWNlaXZlZF90aW1lX2NvbXBsZXRl
ID0geyAwLCAwIH07CiB1c2NoYXIgKnJlY2lwaWVudF9kYXRhICAgICAgICAgPSBOVUxMOwogdXNj
aGFyICpyZWNpcGllbnRfdW5xdWFsaWZpZWRfaG9zdHMgPSBOVUxMOwogdXNjaGFyICpyZWNpcGll
bnRfdmVyaWZ5X2ZhaWx1cmUgPSBOVUxMOwpAQCAtMTI3NCwyMCArMTMwNCwyMCBAQAogcmVjaXBp
ZW50X2l0ZW0gICpyZWNpcGllbnRzX2xpc3QgPSBOVUxMOwogaW50ICAgICByZWNpcGllbnRzX2xp
c3RfbWF4ICAgID0gMDsKIGludCAgICAgcmVjaXBpZW50c19tYXggICAgICAgICA9IDUwMDAwOwot
Y29uc3QgcGNyZSAqcmVnZXhfQVVUSCAgICAgICAgID0gTlVMTDsKLWNvbnN0IHBjcmUgKnJlZ2V4
X2NoZWNrX2Ruc19uYW1lcyA9IE5VTEw7Ci1jb25zdCBwY3JlICpyZWdleF9Gcm9tICAgICAgICAg
PSBOVUxMOwotY29uc3QgcGNyZSAqcmVnZXhfSUdOT1JFUVVPVEEgID0gTlVMTDsKLWNvbnN0IHBj
cmUgKnJlZ2V4X1BJUEVMSU5JTkcgICA9IE5VTEw7Ci1jb25zdCBwY3JlICpyZWdleF9TSVpFICAg
ICAgICAgPSBOVUxMOworY29uc3QgcGNyZTJfY29kZSAqcmVnZXhfQVVUSCAgICAgICAgID0gTlVM
TDsKK2NvbnN0IHBjcmUyX2NvZGUgKnJlZ2V4X2NoZWNrX2Ruc19uYW1lcyA9IE5VTEw7Citjb25z
dCBwY3JlMl9jb2RlICpyZWdleF9Gcm9tICAgICAgICAgPSBOVUxMOworY29uc3QgcGNyZTJfY29k
ZSAqcmVnZXhfSUdOT1JFUVVPVEEgID0gTlVMTDsKK2NvbnN0IHBjcmUyX2NvZGUgKnJlZ2V4X1BJ
UEVMSU5JTkcgICA9IE5VTEw7Citjb25zdCBwY3JlMl9jb2RlICpyZWdleF9TSVpFICAgICAgICAg
PSBOVUxMOwogI2lmbmRlZiBESVNBQkxFX1BJUEVfQ09OTkVDVAotY29uc3QgcGNyZSAqcmVnZXhf
RUFSTFlfUElQRSAgID0gTlVMTDsKK2NvbnN0IHBjcmUyX2NvZGUgKnJlZ2V4X0VBUkxZX1BJUEUg
ICA9IE5VTEw7CiAjZW5kaWYKLWNvbnN0IHBjcmUgKnJlZ2V4X2lzbXNnaWQgICAgICA9IE5VTEw7
Ci1jb25zdCBwY3JlICpyZWdleF9zbXRwX2NvZGUgICAgPSBOVUxMOwotdXNjaGFyICpyZWdleF92
YXJzW1JFR0VYX1ZBUlNdOworY29uc3QgcGNyZTJfY29kZSAqcmVnZXhfaXNtc2dpZCAgICAgID0g
TlVMTDsKK2NvbnN0IHBjcmUyX2NvZGUgKnJlZ2V4X3NtdHBfY29kZSAgICA9IE5VTEw7Citjb25z
dCB1c2NoYXIgKnJlZ2V4X3ZhcnNbUkVHRVhfVkFSU107CiAjaWZkZWYgV0hJVEVMSVNUX0RfTUFD
Uk9TCi1jb25zdCBwY3JlICpyZWdleF93aGl0ZWxpc3RlZF9tYWNybyA9IE5VTEw7Citjb25zdCBw
Y3JlMl9jb2RlICpyZWdleF93aGl0ZWxpc3RlZF9tYWNybyA9IE5VTEw7CiAjZW5kaWYKICNpZmRl
ZiBXSVRIX0NPTlRFTlRfU0NBTgogdXNjaGFyICpyZWdleF9tYXRjaF9zdHJpbmcgICAgID0gTlVM
TDsKQEAgLTE0NDIsMTIgKzE0NzIsMTMgQEAKIGludCAgICAgc210cF9hY2NlcHRfbWF4ICAgICAg
ICA9IDIwOwogaW50ICAgICBzbXRwX2FjY2VwdF9tYXhfbm9ubWFpbD0gMTA7CiB1c2NoYXIgKnNt
dHBfYWNjZXB0X21heF9ub25tYWlsX2hvc3RzID0gVVMiKiI7Ci1pbnQgICAgIHNtdHBfYWNjZXB0
X21heF9wZXJfY29ubmVjdGlvbiA9IDEwMDA7Cit1c2NoYXIgKnNtdHBfYWNjZXB0X21heF9wZXJf
Y29ubmVjdGlvbiA9IFVTIjEwMDAiOwogdXNjaGFyICpzbXRwX2FjY2VwdF9tYXhfcGVyX2hvc3Qg
PSBOVUxMOwogaW50ICAgICBzbXRwX2FjY2VwdF9xdWV1ZSAgICAgID0gMDsKIGludCAgICAgc210
cF9hY2NlcHRfcXVldWVfcGVyX2Nvbm5lY3Rpb24gPSAxMDsKIGludCAgICAgc210cF9hY2NlcHRf
cmVzZXJ2ZSAgICA9IDA7CiB1c2NoYXIgKnNtdHBfYWN0aXZlX2hvc3RuYW1lICAgPSBOVUxMOwor
aW50CXNtdHBfYmFja2xvZ19tb25pdG9yICAgPSAwOwogdXNjaGFyICpzbXRwX2Jhbm5lciAgICAg
ICAgICAgID0gVVMiJHNtdHBfYWN0aXZlX2hvc3RuYW1lIEVTTVRQICIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIkV4aW0gJHZlcnNpb25fbnVtYmVyICR0b2RfZnVsbCIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIlwwPC0tLS0tLS0tLS0tLS0tLVNwYWNlIHRvIHBhdGNoIHNt
dHBfYmFubmVyLT4iOwpAQCAtMTQ2MCwxMyArMTQ5MSwxNyBAQAogZG91YmxlICBzbXRwX2RlbGF5
X21haWwgICAgICAgID0gMC4wOwogZG91YmxlICBzbXRwX2RlbGF5X3JjcHQgICAgICAgID0gMC4w
OwogRklMRSAgICpzbXRwX2luICAgICAgICAgICAgICAgID0gTlVMTDsKK2ludCAgICAgc210cF9s
aXN0ZW5fYmFja2xvZyAgICA9IDA7CiBpbnQgICAgIHNtdHBfbG9hZF9yZXNlcnZlICAgICAgPSAt
MTsKIGludCAgICAgc210cF9tYWlsY21kX2NvdW50ICAgICA9IDA7CitpbnQgICAgIHNtdHBfbWFp
bGNtZF9tYXggICAgICAgPSAtMTsKIEZJTEUgICAqc210cF9vdXQgICAgICAgICAgICAgICA9IE5V
TEw7CiB1c2NoYXIgKnNtdHBfZXRybl9jb21tYW5kICAgICAgPSBOVUxMOwogaW50ICAgICBzbXRw
X21heF9zeW5wcm90X2Vycm9ycz0gMzsKIGludCAgICAgc210cF9tYXhfdW5rbm93bl9jb21tYW5k
cyA9IDM7CiB1c2NoYXIgKnNtdHBfbm90cXVpdF9yZWFzb24gICAgPSBOVUxMOwordW5zaWduZWQg
c210cF9wZWVyX29wdGlvbnMgICAgID0gMDsKK3Vuc2lnbmVkIHNtdHBfcGVlcl9vcHRpb25zX3dy
YXA9IDA7CiB1c2NoYXIgKnNtdHBfcmF0ZWxpbWl0X2hvc3RzICAgPSBOVUxMOwogdXNjaGFyICpz
bXRwX3JhdGVsaW1pdF9tYWlsICAgID0gTlVMTDsKIHVzY2hhciAqc210cF9yYXRlbGltaXRfcmNw
dCAgICA9IE5VTEw7CkBAIC0xNDgyLDggKzE1MTcsNiBAQAogZG91YmxlICBzbXRwX3Jscl9mYWN0
b3IgICAgICAgID0gMC4wOwogaW50ICAgICBzbXRwX3Jscl9saW1pdCAgICAgICAgID0gMDsKIGlu
dCAgICAgc210cF9ybHJfdGhyZXNob2xkICAgICA9IElOVF9NQVg7Ci11bnNpZ25lZCBzbXRwX3Bl
ZXJfb3B0aW9ucyAgICAgPSAwOwotdW5zaWduZWQgc210cF9wZWVyX29wdGlvbnNfd3JhcD0gMDsK
ICNpZmRlZiBTVVBQT1JUX0kxOE4KIHVzY2hhciAqc210cHV0ZjhfYWR2ZXJ0aXNlX2hvc3RzID0g
VVMiKiI7CS8qIG92ZXJyaWRkZW4gdW5kZXIgdGVzdC1oYXJuZXNzICovCiAjZW5kaWYKQEAgLTE1
MTEsMjcgKzE1NDQsMTQgQEAKIEZJTEUgICAqc3Bvb2xfZGF0YV9maWxlCSAgICAgICA9IE5VTEw7
CiB1c2NoYXIgKnNwb29sX2RpcmVjdG9yeSAgICAgICAgPSBVUyBTUE9PTF9ESVJFQ1RPUlkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJcMDwtLS0tLS0tLS0tLS0tLVNwYWNlIHRvIHBhdGNo
IHNwb29sX2RpcmVjdG9yeS0+IjsKLSNpZmRlZiBFWFBFUklNRU5UQUxfU1JTCi11c2NoYXIgKnNy
c19jb25maWcgICAgICAgICAgICAgPSBOVUxMOwotdXNjaGFyICpzcnNfZGJfYWRkcmVzcyAgICAg
ICAgID0gTlVMTDsKLXVzY2hhciAqc3JzX2RiX2tleSAgICAgICAgICAgICA9IE5VTEw7Ci1pbnQg
ICAgIHNyc19oYXNobGVuZ3RoICAgICAgICAgPSA2OwotaW50ICAgICBzcnNfaGFzaG1pbiAgICAg
ICAgICAgID0gLTE7Ci1pbnQgICAgIHNyc19tYXhhZ2UgICAgICAgICAgICAgPSAzMTsKLXVzY2hh
ciAqc3JzX29yaWdfcmVjaXBpZW50ICAgICA9IE5VTEw7Ci11c2NoYXIgKnNyc19vcmlnX3NlbmRl
ciAgICAgICAgPSBOVUxMOwotdXNjaGFyICpzcnNfcmVjaXBpZW50ICAgICAgICAgID0gTlVMTDsK
LXVzY2hhciAqc3JzX3NlY3JldHMgICAgICAgICAgICA9IE5VTEw7Ci11c2NoYXIgKnNyc19zdGF0
dXMgICAgICAgICAgICAgPSBOVUxMOwotI2VuZGlmCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1NSU19O
QVRJVkUKKyNpZmRlZiBTVVBQT1JUX1NSUwogdXNjaGFyICpzcnNfcmVjaXBpZW50ICAgICAgICAg
ID0gTlVMTDsKICNlbmRpZgogaW50ICAgICBzdHJpbmdfZGF0ZXN0YW1wX29mZnNldD0gLTE7CiBp
bnQgICAgIHN0cmluZ19kYXRlc3RhbXBfbGVuZ3RoPSAwOwogaW50ICAgICBzdHJpbmdfZGF0ZXN0
YW1wX3R5cGUgID0gLTE7Ci11c2NoYXIgKnN1Ym1pc3Npb25fZG9tYWluICAgICAgPSBOVUxMOwot
dXNjaGFyICpzdWJtaXNzaW9uX25hbWUgICAgICAgID0gTlVMTDsKK2NvbnN0IHVzY2hhciAqc3Vi
bWlzc2lvbl9kb21haW4gPSBOVUxMOworY29uc3QgdXNjaGFyICpzdWJtaXNzaW9uX25hbWUgID0g
TlVMTDsKIGludCAgICAgc3lzbG9nX2ZhY2lsaXR5ICAgICAgICA9IExPR19NQUlMOwogdXNjaGFy
ICpzeXNsb2dfcHJvY2Vzc25hbWUgICAgID0gVVMiZXhpbSI7CiB1c2NoYXIgKnN5c3RlbV9maWx0
ZXIgICAgICAgICAgPSBOVUxMOwpAQCAtMTU1OSw2MCArMTU3OSwxNiBAQAogdHJhbnNwb3J0X2lu
c3RhbmNlICAqdHJhbnNwb3J0cyA9IE5VTEw7CiAKIHRyYW5zcG9ydF9pbnN0YW5jZSAgdHJhbnNw
b3J0X2RlZmF1bHRzID0gewotICAgIC5uZXh0ID0JCQlOVUxMLAotICAgIC5uYW1lID0JCQlOVUxM
LAotICAgIC5pbmZvID0JCQlOVUxMLAotICAgIC5vcHRpb25zX2Jsb2NrID0JCU5VTEwsCi0gICAg
LmRyaXZlcl9uYW1lID0JCU5VTEwsCi0gICAgLnNldHVwID0JCQlOVUxMLAorICAgIC8qIEFsbCBu
b24tbWVudGlvbmVkIGVsZW1lbnRzIHplcm8vTlVMTC9GQUxTRSAqLwogICAgIC5iYXRjaF9tYXgg
PQkJMSwKLSAgICAuYmF0Y2hfaWQgPQkJCU5VTEwsCi0gICAgLmhvbWVfZGlyID0JCQlOVUxMLAot
ICAgIC5jdXJyZW50X2RpciA9CQlOVUxMLAotICAgIC5leHBhbmRfbXVsdGlfZG9tYWluID0JTlVM
TCwKICAgICAubXVsdGlfZG9tYWluID0JCVRSVUUsCi0gICAgLm92ZXJyaWRlc19ob3N0cyA9CQlG
QUxTRSwKICAgICAubWF4X2FkZHJlc3NlcyA9CQkxMDAsCiAgICAgLmNvbm5lY3Rpb25fbWF4X21l
c3NhZ2VzID0JNTAwLAotICAgIC5kZWxpdmVyX2FzX2NyZWF0b3IgPQlGQUxTRSwKLSAgICAuZGlz
YWJsZV9sb2dnaW5nID0JCUZBTFNFLAotICAgIC5pbml0Z3JvdXBzID0JCUZBTFNFLAotICAgIC51
aWRfc2V0ID0JCQlGQUxTRSwKLSAgICAuZ2lkX3NldCA9CQkJRkFMU0UsCiAgICAgLnVpZCA9CQkJ
KHVpZF90KSgtMSksCiAgICAgLmdpZCA9CQkJKGdpZF90KSgtMSksCi0gICAgLmV4cGFuZF91aWQg
PQkJTlVMTCwKLSAgICAuZXhwYW5kX2dpZCA9CQlOVUxMLAotICAgIC53YXJuX21lc3NhZ2UgPQkJ
TlVMTCwKLSAgICAuc2hhZG93ID0JCQlOVUxMLAotICAgIC5zaGFkb3dfY29uZGl0aW9uID0JCU5V
TEwsCi0gICAgLmZpbHRlcl9jb21tYW5kID0JCU5VTEwsCi0gICAgLmFkZF9oZWFkZXJzID0JCU5V
TEwsCi0gICAgLnJlbW92ZV9oZWFkZXJzID0JCU5VTEwsCi0gICAgLnJldHVybl9wYXRoID0JCU5V
TEwsCi0gICAgLmRlYnVnX3N0cmluZyA9CQlOVUxMLAotICAgIC5tYXhfcGFyYWxsZWwgPQkJTlVM
TCwKLSAgICAubWVzc2FnZV9zaXplX2xpbWl0ID0JTlVMTCwKLSAgICAuaGVhZGVyc19yZXdyaXRl
ID0JCU5VTEwsCi0gICAgLnJld3JpdGVfcnVsZXMgPQkJTlVMTCwKLSAgICAucmV3cml0ZV9leGlz
dGZsYWdzID0JMCwKICAgICAuZmlsdGVyX3RpbWVvdXQgPQkJMzAwLAotICAgIC5ib2R5X29ubHkg
PQkJRkFMU0UsCi0gICAgLmRlbGl2ZXJ5X2RhdGVfYWRkID0JRkFMU0UsCi0gICAgLmVudmVsb3Bl
X3RvX2FkZCA9CQlGQUxTRSwKLSAgICAuaGVhZGVyc19vbmx5ID0JCUZBTFNFLAotICAgIC5yY3B0
X2luY2x1ZGVfYWZmaXhlcyA9CUZBTFNFLAotICAgIC5yZXR1cm5fcGF0aF9hZGQgPQkJRkFMU0Us
Ci0gICAgLnJldHVybl9vdXRwdXQgPQkJRkFMU0UsCi0gICAgLnJldHVybl9mYWlsX291dHB1dCA9
CUZBTFNFLAotICAgIC5sb2dfb3V0cHV0ID0JCUZBTFNFLAotICAgIC5sb2dfZmFpbF9vdXRwdXQg
PQkJRkFMU0UsCi0gICAgLmxvZ19kZWZlcl9vdXRwdXQgPQkJRkFMU0UsCiAgICAgLnJldHJ5X3Vz
ZV9sb2NhbF9wYXJ0ID0JVFJVRV9VTlNFVCwJLyogcmV0cnlfdXNlX2xvY2FsX3BhcnQ6IEJPT0ws
IGJ1dCBzZXQgbmVpdGhlcgogCQkJCQkJIDEgbm9yIDAgc28gY2FuIGRldGVjdCB1bnNldCAqLwot
I2lmbmRlZiBESVNBQkxFX0VWRU5UCi0gICAuZXZlbnRfYWN0aW9uID0JCU5VTEwKLSNlbmRpZgog
fTsKIAogaW50ICAgICB0cmFuc3BvcnRfY291bnQ7CkBAIC0xNjYzLDcgKzE2MzksNyBAQAogdXNj
aGFyICp2ZXJpZnlfbW9kZQkgICAgICAgPSBOVUxMOwogdXNjaGFyICp2ZXJzaW9uX2NvcHlyaWdo
dCAgICAgID0KICBVUyJDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLCAxOTk1
IC0gMjAxOFxuIgotICAgIihjKSBUaGUgRXhpbSBNYWludGFpbmVycyBhbmQgY29udHJpYnV0b3Jz
IGluIEFDS05PV0xFREdNRU5UUyBmaWxlLCAyMDA3IC0gMjAxOCI7CisgICAiKGMpIFRoZSBFeGlt
IE1haW50YWluZXJzIGFuZCBjb250cmlidXRvcnMgaW4gQUNLTk9XTEVER01FTlRTIGZpbGUsIDIw
MDcgLSAyMDIyIjsKIHVzY2hhciAqdmVyc2lvbl9kYXRlICAgICAgICAgICA9IFVTIj8iOwogdXNj
aGFyICp2ZXJzaW9uX2NudW1iZXIgICAgICAgID0gVVMiPz8/PyI7CiB1c2NoYXIgKnZlcnNpb25f
c3RyaW5nICAgICAgICAgPSBVUyI/IjsKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9nbG9iYWxzLmgg
ZXhpbS9zcmMvZ2xvYmFscy5oCi0tLSBleGltLm9yaWcvc3JjL2dsb2JhbHMuaAkyMDIzLTA2LTA0
IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvZ2xvYmFscy5oCTIwMjItMDYt
MjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAt
IGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhl
IEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVy
c2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4
aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0
aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogLyogQWxtb3N0IGFsbCB0aGUgZ2xv
YmFsIHZhcmlhYmxlcyBhcmUgZGVmaW5lZCB0b2dldGhlciBpbiB0aGlzIG9uZSBoZWFkZXIsIHNv
CkBAIC0xMDcsNyArMTA3LDEwIEBACiAgICAgT0NTUF9GQUlMRUQsCQkvKiB2ZXJpZnkgZmFpbGVk
ICovCiAgICAgT0NTUF9WRklFRAkJCS8qIHZlcmlmaWVkICovCiAgICAgfSAgICAgb2NzcDsJCSAg
ICAgIC8qIFN0YXBsZWQgT0NTUCBzdGF0dXMgKi8KLSNpZmRlZiBFWFBFUklNRU5UQUxfVExTX1JF
U1VNRQorI2lmbmRlZiBESVNBQkxFX1RMU19SRVNVTUUKKyAgaGN0eAkgIHJlc3VtZV9oY3R4OwkJ
Lyogc2Vzc2lvbiBsb29rdXAga2V5IGFjY3VtdWxhdGlvbiAqLworICBjb25zdCB1c2NoYXIgKiBy
ZXN1bWVfaW5kZXg7CS8qIHNlc3Npb24gbG9va3VwIGtleSAqLworCiAgIHVuc2lnbmVkIHJlc3Vt
cHRpb247CQkvKiBTZXNzaW9uIHJlc3VtcHRpb24gKi8KICAgQk9PTAkgIGhvc3RfcmVzdW1hYmxl
OjE7CiAgIEJPT0wJICB0aWNrZXRfcmVjZWl2ZWQ6MTsKQEAgLTEyMSw4ICsxMjQsMTAgQEAKICNp
Zm5kZWYgRElTQUJMRV9UTFMKIGV4dGVybiBCT09MICAgIGdudXRsc19jb21wYXRfbW9kZTsgICAg
IC8qIExlc3Mgc2VjdXJpdHksIG1vcmUgY29tcGF0aWJpbGl0eSAqLwogZXh0ZXJuIEJPT0wgICAg
Z251dGxzX2FsbG93X2F1dG9fcGtjczExOyAvKiBMZXQgR251VExTIGF1dG9sb2FkIFBLQ1MxMSBt
b2R1bGVzICovCitleHRlcm4gdXNjaGFyICpob3N0c19yZXF1aXJlX2FscG47ICAgICAvKiBNYW5k
YXRvcnkgQUxQTiBzdWNjZXNzZnVsIG5vZ2l0aWF0aW9uICovCiBleHRlcm4gdXNjaGFyICpvcGVu
c3NsX29wdGlvbnM7ICAgICAgICAvKiBPcGVuU1NMIGNvbXBhdGliaWxpdHkgb3B0aW9ucyAqLwot
ZXh0ZXJuIGNvbnN0IHBjcmUgKnJlZ2V4X1NUQVJUVExTOyAgICAgLyogRm9yIHJlY29nbml6aW5n
IFNUQVJUVExTIHNldHRpbmdzICovCitleHRlcm4gY29uc3QgcGNyZTJfY29kZSAqcmVnZXhfU1RB
UlRUTFM7ICAgICAvKiBGb3IgcmVjb2duaXppbmcgU1RBUlRUTFMgc2V0dGluZ3MgKi8KK2V4dGVy
biB1c2NoYXIgKnRsc19hbHBuOwkgICAgICAgLyogQUxQTiBuYW1lcyBhY2NlcHRhYmxlICovCiBl
eHRlcm4gdXNjaGFyICp0bHNfY2VydGlmaWNhdGU7ICAgICAgICAvKiBDZXJ0aWZpY2F0ZSBmaWxl
ICovCiBleHRlcm4gdXNjaGFyICp0bHNfY3JsOyAgICAgICAgICAgICAgICAvKiBDUkwgRmlsZSAq
LwogZXh0ZXJuIGludCAgICAgdGxzX2RoX21heF9iaXRzOyAgICAgICAgLyogZG9uJ3QgYWNjZXB0
IGhpZ2hlciBsaWIgc3VnZ2VzdGlvbnMgKi8KQEAgLTEzNCwxOCArMTM5LDIwIEBACiBleHRlcm4g
dXNjaGFyICp0bHNfcHJpdmF0ZWtleTsgICAgICAgICAvKiBQcml2YXRlIGtleSBmaWxlICovCiBl
eHRlcm4gQk9PTCAgICB0bHNfcmVtZW1iZXJfZXNtdHA7ICAgICAvKiBGb3IgWUFFQiAqLwogZXh0
ZXJuIHVzY2hhciAqdGxzX3JlcXVpcmVfY2lwaGVyczsgICAgLyogU28gc29tZSBjYW4gYmUgYXZv
aWRlZCAqLwotIyBpZmRlZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQorIyBpZm5kZWYgRElTQUJM
RV9UTFNfUkVTVU1FCiBleHRlcm4gdXNjaGFyICp0bHNfcmVzdW1wdGlvbl9ob3N0czsgICAvKiBU
TFMgc2Vzc2lvbiByZXN1bXB0aW9uICovCiAjIGVuZGlmCiBleHRlcm4gdXNjaGFyICp0bHNfdHJ5
X3ZlcmlmeV9ob3N0czsgICAvKiBPcHRpb25hbCBjbGllbnQgdmVyaWZpY2F0aW9uICovCiBleHRl
cm4gdXNjaGFyICp0bHNfdmVyaWZ5X2NlcnRpZmljYXRlczsvKiBQYXRoIGZvciBjZXJ0aWZpY2F0
ZXMgdG8gY2hlY2sgKi8KIGV4dGVybiB1c2NoYXIgKnRsc192ZXJpZnlfaG9zdHM7ICAgICAgIC8q
IE1hbmRhdG9yeSBjbGllbnQgdmVyaWZpY2F0aW9uICovCitleHRlcm4gaW50ICAgICB0bHNfd2F0
Y2hfZmQ7CSAgICAgICAvKiBmb3IgaW5vdGlmeSBvZiBjcmVkcyBmaWxlcyAqLworZXh0ZXJuIHRp
bWVfdCAgdGxzX3dhdGNoX3RyaWdnZXJfdGltZTsgLyogbm9uLTA6IHRyaWdnZXJlZCAqLwogI2Vu
ZGlmCiBleHRlcm4gdXNjaGFyICp0bHNfYWR2ZXJ0aXNlX2hvc3RzOyAgICAvKiBob3N0IGZvciB3
aGljaCBUTFMgaXMgYWR2ZXJ0aXNlZCAqLwogCiBleHRlcm4gdXNjaGFyICAqZHNuX2VudmlkOyAg
ICAgICAgICAgICAvKiBEU04gZW52aWQgc3RyaW5nICovCiBleHRlcm4gaW50ICAgICAgZHNuX3Jl
dDsgICAgICAgICAgICAgICAvKiBEU04gcmV0IHR5cGUqLwotZXh0ZXJuIGNvbnN0IHBjcmUgICpy
ZWdleF9EU047ICAgICAgICAgLyogRm9yIHJlY29nbml6aW5nIERTTiBzZXR0aW5ncyAqLworZXh0
ZXJuIGNvbnN0IHBjcmUyX2NvZGUgICpyZWdleF9EU047ICAgICAgICAgLyogRm9yIHJlY29nbml6
aW5nIERTTiBzZXR0aW5ncyAqLwogZXh0ZXJuIHVzY2hhciAgKmRzbl9hZHZlcnRpc2VfaG9zdHM7
ICAgLyogaG9zdCBmb3Igd2hpY2ggVExTIGlzIGFkdmVydGlzZWQgKi8KIAogLyogSW5wdXQtcmVh
ZGluZyBmdW5jdGlvbnMgZm9yIG1lc3NhZ2VzLCBzbyB3ZSBjYW4gdXNlIHNwZWNpYWwgb25lcyBm
b3IKQEAgLTE1MywxNCArMTYwLDE2IEBACiAKIGV4dGVybiBpbnQgKCpsd3JfcmVjZWl2ZV9nZXRj
KSh1bnNpZ25lZCk7CiBleHRlcm4gdXNjaGFyICogKCpsd3JfcmVjZWl2ZV9nZXRidWYpKHVuc2ln
bmVkICopOworZXh0ZXJuIEJPT0wgKCpsd3JfcmVjZWl2ZV9oYXNjKSh2b2lkKTsKIGV4dGVybiBp
bnQgKCpsd3JfcmVjZWl2ZV91bmdldGMpKGludCk7CisKIGV4dGVybiBpbnQgKCpyZWNlaXZlX2dl
dGMpKHVuc2lnbmVkKTsKIGV4dGVybiB1c2NoYXIgKiAoKnJlY2VpdmVfZ2V0YnVmKSh1bnNpZ25l
ZCAqKTsKLWV4dGVybiB2b2lkICgqcmVjZWl2ZV9nZXRfY2FjaGUpKHZvaWQpOworZXh0ZXJuIEJP
T0wgKCpyZWNlaXZlX2hhc2MpKHZvaWQpOworZXh0ZXJuIHZvaWQgKCpyZWNlaXZlX2dldF9jYWNo
ZSkodW5zaWduZWQpOwogZXh0ZXJuIGludCAoKnJlY2VpdmVfdW5nZXRjKShpbnQpOwogZXh0ZXJu
IGludCAoKnJlY2VpdmVfZmVvZikodm9pZCk7CiBleHRlcm4gaW50ICgqcmVjZWl2ZV9mZXJyb3Ip
KHZvaWQpOwotZXh0ZXJuIEJPT0wgKCpyZWNlaXZlX3NtdHBfYnVmZmVyZWQpKHZvaWQpOwogCiAK
IC8qIEZvciBjbGVhcmluZywgc2F2aW5nLCByZXN0b3JpbmcgYWRkcmVzcyBleHBhbnNpb24gdmFy
aWFibGVzLiBXZSBoYXZlIHRvIGhhdmUKQEAgLTI2NCwxMiArMjczLDEzIEBACiAgQk9PTCAgIHNl
bmRlcl9zZXRfdW50cnVzdGVkCQk6MTsgLyogU2VuZGVyIHNldCBieSB1bnRydXN0ZWQgY2FsbGVy
ICovCiAgQk9PTCAgIHNtdHBfYXV0aGVudGljYXRlZAkJOjE7IC8qIFNlbmRpbmcgY2xpZW50IGhh
cyBhdXRoZW50aWNhdGVkICovCiAjaWZuZGVmIERJU0FCTEVfUElQRV9DT05ORUNUCi0gQk9PTCAg
IHNtdHBfaW5fZWFybHlfcGlwZV9hZHZlcnRpc2VkCToxOyAvKiBzZXJ2ZXIgYWR2ZXJ0aXNlZCBQ
SVBFX0NPTk5FQ1QgKi8KKyBCT09MICAgc210cF9pbl9lYXJseV9waXBlX2FkdmVydGlzZWQJOjE7
IC8qIHNlcnZlciBhZHZlcnRpc2VkIFBJUEVDT05ORUNUICovCiAgQk9PTAlzbXRwX2luX2Vhcmx5
X3BpcGVfbm9fYXV0aAk6MTsgLyogdG9vIG1hbnkgYXV0aGVudGljYXRvciBuYW1lcyAqLwogIEJP
T0wgICBzbXRwX2luX2Vhcmx5X3BpcGVfdXNlZAkJOjE7IC8qIGNsaWVudCBkaWQgc2VuZCBlYXJs
eSBkYXRhICovCiAjZW5kaWYKICBCT09MICAgc210cF9pbl9waXBlbGluaW5nX2FkdmVydGlzZWQJ
OjE7IC8qIHNlcnZlciBhZHZlcnRpc2VkIFBJUEVMSU5JTkcgKi8KICBCT09MICAgc210cF9pbl9w
aXBlbGluaW5nX3VzZWQJCToxOyAvKiBzZXJ2ZXIgbm90ZWQgY2xpZW50IHVzaW5nIFBJUEVMSU5J
TkcgKi8KKyBCT09MICAgc210cF9pbl9xdWl0CQkJOjE7IC8qIHNlcnZlciBub3RlZCBRVUlUIGNv
bW1hbmQgKi8KICBCT09MICAgc3Bvb2xfZmlsZV93aXJlZm9ybWF0CQk6MTsgLyogY3VycmVudCAt
RCBmaWxlIGhhcyBDUkxGIHJhdGhlciB0aGFuIE5MICovCiAgQk9PTCAgIHN1Ym1pc3Npb25fbW9k
ZQkJCToxOyAvKiBDYW4gYmUgZm9yY2VkIGZyb20gQUNMICovCiAgQk9PTCAgIHN1cHByZXNzX2xv
Y2FsX2ZpeHVwcwkJOjE7IC8qIENhbiBiZSBmb3JjZWQgZnJvbSBBQ0wgKi8KQEAgLTMxMSw3ICsz
MjEsNyBAQAogZXh0ZXJuIHVzY2hhciAqYWNsX3NtdHBfZGF0YTsgICAgICAgICAgLyogQUNMIHJ1
biBhZnRlciBEQVRBIHJlY2VpdmVkICovCiAjaWZuZGVmIERJU0FCTEVfUFJEUgogZXh0ZXJuIHVz
Y2hhciAqYWNsX3NtdHBfZGF0YV9wcmRyOyAgICAgLyogQUNMIHJ1biBhZnRlciBEQVRBIHJlY2Vp
dmVkIGlmIGluIFBSRFIgbW9kZSovCi1jb25zdCBleHRlcm4gcGNyZSAqcmVnZXhfUFJEUjsgICAg
ICAgICAvKiBGb3IgcmVjb2duaXppbmcgUFJEUiBzZXR0aW5ncyAqLworY29uc3QgZXh0ZXJuIHBj
cmUyX2NvZGUgKnJlZ2V4X1BSRFI7ICAgICAgICAgLyogRm9yIHJlY29nbml6aW5nIFBSRFIgc2V0
dGluZ3MgKi8KICNlbmRpZgogI2lmbmRlZiBESVNBQkxFX0RLSU0KIGV4dGVybiB1c2NoYXIgKmFj
bF9zbXRwX2RraW07ICAgICAgICAgIC8qIEFDTCBydW4gZm9yIERLSU0gc2lnbmF0dXJlcyAvIGRv
bWFpbnMgKi8KQEAgLTM1NywxMyArMzY3LDE0IEBACiBleHRlcm4gdXNjaGFyICphdXRoZW50aWNh
dGVkX2lkOyAgICAgICAvKiBJRCB0aGF0IHdhcyBhdXRoZW50aWNhdGVkICovCiBleHRlcm4gdXNj
aGFyICphdXRoZW50aWNhdGVkX3NlbmRlcjsgICAvKiBGcm9tIEFVVEggb24gTUFJTCAqLwogZXh0
ZXJuIEJPT0wgICAgYXV0aGVudGljYXRpb25fZmFpbGVkOyAgLyogVFJVRSBpZiBBVVRIIHdhcyB0
cmllZCBhbmQgZmFpbGVkICovCitleHRlcm4gdXNjaGFyICphdXRoZW50aWNhdG9yX25hbWU7ICAg
ICAvKiBmb3IgZGVidWcgYW5kIGVycm9yIG1lc3NhZ2VzICovCiBleHRlcm4gdXNjaGFyICphdXRo
X2FkdmVydGlzZV9ob3N0czsgICAvKiBPbmx5IGFkdmVydGlzZSB0byB0aGVzZSAqLwogZXh0ZXJu
IGF1dGhfaW5mbyBhdXRoc19hdmFpbGFibGVbXTsgICAgLyogVmVjdG9yIG9mIGF2YWlsYWJsZSBh
dXRoIG1lY2hhbmlzbXMgKi8KIGV4dGVybiBhdXRoX2luc3RhbmNlICphdXRoczsgICAgICAgICAg
IC8qIENoYWluIG9mIGluc3RhbnRpYXRlZCBhdXRocyAqLwogZXh0ZXJuIGF1dGhfaW5zdGFuY2Ug
YXV0aF9kZWZhdWx0czsgICAgLyogRGVmYXVsdCB2YWx1ZXMgKi8KIGV4dGVybiB1c2NoYXIgKmF1
dGhfZGVmZXJfbXNnOyAgICAgICAgIC8qIEVycm9yIG1lc3NhZ2UgZm9yIGxvZyAqLwogZXh0ZXJu
IHVzY2hhciAqYXV0aF9kZWZlcl91c2VyX21zZzsgICAgLyogRXJyb3IgbWVzc2FnZSBmb3IgdXNl
ciAqLwotZXh0ZXJuIHVzY2hhciAqYXV0aF92YXJzW107ICAgICAgICAgICAgLyogJGF1dGhuIHZh
cmlhYmxlcyAqLworZXh0ZXJuIGNvbnN0IHVzY2hhciAqYXV0aF92YXJzW107ICAgICAgLyogJGF1
dGhuIHZhcmlhYmxlcyAqLwogZXh0ZXJuIGludCAgICAgYXV0b190aGF3OyAgICAgICAgICAgICAg
LyogQXV0by10aGF3IGludGVydmFsICovCiAjaWZkZWYgV0lUSF9DT05URU5UX1NDQU4KIGV4dGVy
biBpbnQgICAgIGF2X2ZhaWxlZDsgICAgICAgICAgICAgIC8qIFRSVUUgaWYgdGhlIEFWIHByb2Nl
c3MgZmFpbGVkICovCkBAIC00MTMsNiArNDI0LDkgQEAKIGV4dGVybiB1c2NoYXIgKmNsaWVudF9h
dXRoZW50aWNhdG9yOyAgICAgICAgLyogQXV0aGVudGljYXRvciBuYW1lIHVzZWQgZm9yIHNtdHAg
ZGVsaXZlcnkgKi8KIGV4dGVybiB1c2NoYXIgKmNsaWVudF9hdXRoZW50aWNhdGVkX2lkOyAgICAg
LyogImxvZ2luIiBuYW1lIHVzZWQgZm9yIFNNVFAgQVVUSCAqLwogZXh0ZXJuIHVzY2hhciAqY2xp
ZW50X2F1dGhlbnRpY2F0ZWRfc2VuZGVyOyAvKiBBVVRIIG9wdGlvbiB0byBTTVRQIE1BSUwgRlJP
TSAobm90IHlldCB1c2VkKSAqLworI2lmbmRlZiBESVNBQkxFX0NMSUVOVF9DTURfTE9HCitleHRl
cm4gZ3N0cmluZyAqY2xpZW50X2NtZF9sb2c7CSAgICAgICAvKiBkZWJ1ZyBsb2cgb2YgY2xpZW50
IGNtZHMgJiByZXNwb25zZXMgKi8KKyNlbmRpZgogZXh0ZXJuIGludCAgICAgY2xtYWNyb19jb3Vu
dDsgICAgICAgICAgLyogTnVtYmVyIG9mIGNvbW1hbmQgbGluZSBtYWNyb3MgKi8KIGV4dGVybiB1
c2NoYXIgKmNsbWFjcm9zW107ICAgICAgICAgICAgIC8qIENvcHkgb2YgdGhlbSwgZm9yIHJlLWV4
ZWMgKi8KIGV4dGVybiBCT09MICAgIGNvbW1hbmRsaW5lX2NoZWNrc19yZXF1aXJlX2FkbWluOyAv
KiBiZWx0IGFuZCBicmFjZXMgZm9yIGluc2VjdXJlIHNldHVwcyAqLwpAQCAtNDMyLDYgKzQ0Niwx
MiBAQAogZXh0ZXJuIHVzY2hhciAqY29udGludWVfaG9zdF9hZGRyZXNzOyAgLyogSVAgYWRkcmVz
cyBmb3IgZGl0dG8gKi8KIGV4dGVybiBpbnQgICAgIGNvbnRpbnVlX3NlcXVlbmNlOyAgICAgIC8q
IFNlcXVlbmNlIG51bSBmb3IgY29udGludWVkIGRlbGl2ZXJ5ICovCiBleHRlcm4gdXNjaGFyICpj
b250aW51ZV90cmFuc3BvcnQ7ICAgICAvKiBUcmFuc3BvcnQgZm9yIGNvbnRpbnVlZCBkZWxpdmVy
eSAqLworI2lmZGVmIEVYUEVSSU1FTlRBTF9FU01UUF9MSU1JVFMKK2V4dGVybiB1bnNpZ25lZCBj
b250aW51ZV9saW1pdF9tYWlsOyAgIC8qIFBlZXIgYWR2ZXJ0aXNlZCBsaW1pdCAqLworZXh0ZXJu
IHVuc2lnbmVkIGNvbnRpbnVlX2xpbWl0X3JjcHQ7CitleHRlcm4gdW5zaWduZWQgY29udGludWVf
bGltaXRfcmNwdGRvbTsKKyNlbmRpZgorCiAKIGV4dGVybiB1c2NoYXIgKmNzYV9zdGF0dXM7ICAg
ICAgICAgICAgIC8qIENsaWVudCBTTVRQIEF1dGhvcml6YXRpb24gcmVzdWx0ICovCiAKQEAgLTQ3
MCw3ICs0OTAsMTEgQEAKIGV4dGVybiBpbnQgICAgIGRlYnVnX25vdGFsbFtdOyAgICAgICAgIC8q
IERlYnVnIG9wdGlvbnMgZXhjbHVkZWQgZnJvbSArYWxsICovCiBleHRlcm4gYml0X3RhYmxlIGRl
YnVnX29wdGlvbnNbXTsgICAgICAvKiBUYWJsZSBvZiBkZWJ1ZyBvcHRpb25zICovCiBleHRlcm4g
aW50ICAgICBkZWJ1Z19vcHRpb25zX2NvdW50OyAgICAvKiBTaXplIG9mIHRhYmxlICovCitleHRl
cm4gdW5zaWduZWQgZGVidWdfcHJldHJpZ2dlcl9ic2l6ZTsKK2V4dGVybiB1c2NoYXIgKmRlYnVn
X3ByZXRyaWdnZXJfYnVmOyAgIC8qIGNpcmN1bGFyIGJ1ZmZlciBmb3IgcHJlY2FwdHVyZSAqLwog
ZXh0ZXJuIEJPT0wgICAgZGVidWdfc3RvcmU7CSAgICAgICAvKiBEbyBleHRyYSBjaGVja3Mgb24g
c3RvcmVfcmVzZXQgKi8KK2V4dGVybiB1c2NoYXIgIGRlYnVnbG9nX25hbWVbTE9HX05BTUVfU0la
RV07IC8qIEFDTC1pbml0IGRlYnVnICovCisKIGV4dGVybiBpbnQgICAgIGRlbGF5X3dhcm5pbmdb
XTsgICAgICAgIC8qIFRpbWVzIGJldHdlZW4gd2FybmluZ3MgKi8KIGV4dGVybiB1c2NoYXIgKmRl
bGF5X3dhcm5pbmdfY29uZGl0aW9uOyAvKiBDb25kaXRpb24gc3RyaW5nIGZvciB3YXJuaW5ncyAq
LwogZXh0ZXJuIEJPT0wgICAgZGVsaXZlcnlfZGF0ZV9yZW1vdmU7ICAgLyogUmVtb3ZlIGRlbGl2
ZXJ5LWRhdGUgaGVhZGVycyAqLwpAQCAtNTQ2LDYgKzU3MCw3IEBACiBleHRlcm4gaW50ICAgICBk
bnNfcmV0cmFuczsgICAgICAgICAgICAvKiBSZXRyYW5zbWlzc2lvbiB0aW1lIHNldHRpbmcgKi8K
IGV4dGVybiBpbnQgICAgIGRuc19yZXRyeTsgICAgICAgICAgICAgIC8qIE51bWJlciBvZiByZXRy
aWVzICovCiBleHRlcm4gaW50ICAgICBkbnNfZG5zc2VjX29rOyAgICAgICAgICAvKiBXaGVuIGNv
bnN0cnVjdGluZyBETlMgcXVlcnksIHNldCBETyBmbGFnICovCitleHRlcm4gY29uc3QgdXNjaGFy
ICogZG5zX3JjX25hbWVzW107ICAvKiBNb3N0bHkgZm9yIGRlYnVnIG91dHB1dCAqLwogZXh0ZXJu
IHVzY2hhciAqZG5zX3RydXN0X2FhOyAgICAgICAgICAgLyogRE5TU0VDIHRydXN0IEFBIGFzIEFE
ICovCiBleHRlcm4gaW50ICAgICBkbnNfdXNlX2VkbnMwOyAgICAgICAgICAvKiBDb2VyY2UgRURO
UzAgc3VwcG9ydCBvbi9vZmYgaW4gcmVzb2x2ZXIuICovCiBleHRlcm4gdXNjaGFyICpkbnNsaXN0
X2RvbWFpbjsgICAgICAgICAvKiBETlMgKGJsYWNrKSBsaXN0IGRvbWFpbiAqLwpAQCAtNTU3LDYg
KzU4MiwxMCBAQAogCiAvKiBUaGlzIG9wdGlvbiBpcyBub3cgYSBuby1vcHQsIHJldGFpbmVkIGZv
ciBjb21wYXRpYmlsaXR5ICovCiBleHRlcm4gQk9PTCAgICBkcm9wX2NyOyAgICAgICAgICAgICAg
ICAvKiBGb3IgYnJva2VuIGxvY2FsIE1VQXMgKi8KK2V4dGVybiBjb25zdCB1c2NoYXIgKmRyaXZl
cl9zcmNmaWxlOyAgIC8qIEZvciBkZWJ1ZyAmIGVycm9ycyAqLworZXh0ZXJuIGludCAgICAgZHJp
dmVyX3NyY2xpbmU7CSAgICAgICAvKiBGb3IgZGVidWcgJiBlcnJvcnMgKi8KKworZXh0ZXJuIHVu
c2lnbmVkIGludCBkdHJpZ2dlcl9zZWxlY3RvcjsgLyogd2hlbiB0byBzdGFydCBkZWJ1ZyAqLwog
CiBleHRlcm4gdXNjaGFyICpkc25fZnJvbTsgICAgICAgICAgICAgICAvKiBGcm9tOiBzdHJpbmcg
Zm9yIERTTnMgKi8KIApAQCAtNTg0LDcgKzYxMyw3IEBACiBleHRlcm4gaW50ICAgICBleHBhbmRf
Zm9yYmlkOyAgICAgICAgICAvKiBSRE8gZmxhZ3MgZm9yIGZvcmJpZGRpbmcgdGhpbmdzICovCiBl
eHRlcm4gaW50ICAgICBleHBhbmRfbmxlbmd0aFtdOyAgICAgICAvKiBMZW5ndGhzIG9mIG51bWJl
cmVkIHN0cmluZ3MgKi8KIGV4dGVybiBpbnQgICAgIGV4cGFuZF9ubWF4OyAgICAgICAgICAgIC8q
IE1heCBudW1lcmljYWwgdmFsdWUgKi8KLWV4dGVybiB1c2NoYXIgKmV4cGFuZF9uc3RyaW5nW107
ICAgICAgIC8qIE51bWJlcmVkIHN0cmluZ3MgKi8KK2V4dGVybiBjb25zdCB1c2NoYXIgKmV4cGFu
ZF9uc3RyaW5nW107ICAgICAgIC8qIE51bWJlcmVkIHN0cmluZ3MgKi8KIGV4dGVybiBCT09MICAg
IGV4dHJhY3RfYWRkcmVzc2VzX3JlbW92ZV9hcmd1bWVudHM7IC8qIENvbnRyb2xzIC10IGJlaGF2
aW91ciAqLwogZXh0ZXJuIHVzY2hhciAqZXh0cmFfbG9jYWxfaW50ZXJmYWNlczsgLyogTG9jYWws
IG5vbi1saXN0ZW4gaW50ZXJmYWNlcyAqLwogCkBAIC02MzAsNiArNjU5LDcgQEAKIGV4dGVybiB1
c2NoYXIgKmhvc3RfbG9va3VwX21zZzsgICAgICAgIC8qIFRleHQgZm9yIHdoeSBpdCBmYWlsZWQg
Ki8KIGV4dGVybiBpbnQgICAgIGhvc3RfbnVtYmVyOyAgICAgICAgICAgIC8qIEZvciBzaGFyaW5n
IHNwb29scyAqLwogZXh0ZXJuIHVzY2hhciAqaG9zdF9udW1iZXJfc3RyaW5nOyAgICAgLyogRm9y
IGV4cGFuZGluZyAqLworZXh0ZXJuIHVzY2hhciAqaG9zdHNfcmVxdWlyZV9oZWxvOyAgICAgLyog
Y2hlY2sgZm9yIEhFTE8vRUhMTyBiZWZvcmUgTUFJTCAqLwogZXh0ZXJuIHVzY2hhciAqaG9zdF9y
ZWplY3RfY29ubmVjdGlvbjsgLyogUmVqZWN0IHRoZXNlIGhvc3RzICovCiBleHRlcm4gdHJlZV9u
b2RlICpob3N0bGlzdF9hbmNob3I7ICAgICAvKiBUcmVlIG9mIGRlZmluZWQgaG9zdCBsaXN0cyAq
LwogZXh0ZXJuIGludCAgICAgaG9zdGxpc3RfY291bnQ7ICAgICAgICAgLyogTnVtYmVyIGRlZmlu
ZWQgKi8KQEAgLTY0OSw2ICs2NzksOSBAQAogZXh0ZXJuIGludCAgICAga2VlcF9tYWxmb3JtZWQ7
ICAgICAgICAgLyogVGltZSB0byBrZWVwIG1hbGZvcm1lZCBtZXNzYWdlcyAqLwogCiBleHRlcm4g
dXNjaGFyICplbGRhcF9kbjsgICAgICAgICAgICAgICAvKiBXaGVyZSBMREFQIEROcyBhcmUgbGVm
dCAqLworI2lmZGVmIEVYUEVSSU1FTlRBTF9FU01UUF9MSU1JVFMKK2V4dGVybiB1c2NoYXIgKmxp
bWl0c19hZHZlcnRpc2VfaG9zdHM7IC8qIGZvciBiYW5uZXIvRUhMTyBwaXBlbGluaW5nICovCisj
ZW5kaWYKIGV4dGVybiBpbnQgICAgIGxvYWRfYXZlcmFnZTsgICAgICAgICAgIC8qIE1vc3QgcmVj
ZW50bHkgcmVhZCBsb2FkIGF2ZXJhZ2UgKi8KIGV4dGVybiBCT09MICAgIGxvY2FsX2Zyb21fY2hl
Y2s7ICAgICAgIC8qIEZvciBhZGRpbmcgU2VuZGVyOiAoZ2xvYmFsIHZhbHVlKSAqLwogZXh0ZXJu
IHVzY2hhciAqbG9jYWxfZnJvbV9wcmVmaXg7ICAgICAgLyogUGVybWl0dGVkIHByZWZpeGVzICov
CkBAIC03MDQsNyArNzM3LDYgQEAKIGV4dGVybiB1c2NoYXIgKm1lc3NhZ2VfaWRfZXh0ZXJuYWw7
ICAgIC8qIEV4dGVybmFsIGZvcm0gb2YgZm9sbG93aW5nICovCiBleHRlcm4gdXNjaGFyICptZXNz
YWdlX2lkX2RvbWFpbjsgICAgICAvKiBFeHBhbmRlZCB0byBmb3JtIGRvbWFpbi1wYXJ0IG9mIG1l
c3NhZ2VfaWQgKi8KIGV4dGVybiB1c2NoYXIgKm1lc3NhZ2VfaWRfdGV4dDsgICAgICAgIC8qIEV4
cGFuZGVkIHRvIGZvcm0gbWVzc2FnZV9pZCAqLwotZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIG1lc3Nh
Z2VfaWRfdHY7ICAgLyogVGltZSB1c2VkIHRvIGNyZWF0ZSBsYXN0IG1lc3NhZ2VfaWQgKi8KIGV4
dGVybiBpbnQgICAgIG1lc3NhZ2VfbGluZWNvdW50OyAgICAgIC8qIEFzIGl0IHNheXMgKi8KIGV4
dGVybiBCT09MICAgIG1lc3NhZ2VfbG9nczsgICAgICAgICAgIC8qIFRSVUUgdG8gd3JpdGUgbWVz
c2FnZSBsb2dzICovCiBleHRlcm4gaW50ICAgICBtZXNzYWdlX3NpemU7ICAgICAgICAgICAvKiBT
aXplIG9mIG1lc3NhZ2UgKi8KQEAgLTcxMiw3ICs3NDQsNyBAQAogI2lmZGVmIFNVUFBPUlRfSTE4
TgogZXh0ZXJuIEJPT0wgICAgbWVzc2FnZV9zbXRwdXRmODsgICAgICAgLyogSW50ZXJuYXRpb25h
bGl6ZWQgbWFpbCBoYW5kbGluZyAqLwogZXh0ZXJuIGludCAgICAgbWVzc2FnZV91dGY4X2Rvd25j
b252ZXJ0OyAvKiBjb252ZXJ0IGZyb20gdXRmOCAqLwotY29uc3QgZXh0ZXJuIHBjcmUgKnJlZ2V4
X1VURjg7ICAgICAgICAgLyogRm9yIHJlY29nbml6aW5nIFNNVFBVVEY4IHNldHRpbmdzICovCitj
b25zdCBleHRlcm4gcGNyZTJfY29kZSAqcmVnZXhfVVRGODsgICAgICAgICAvKiBGb3IgcmVjb2du
aXppbmcgU01UUFVURjggc2V0dGluZ3MgKi8KICNlbmRpZgogZXh0ZXJuIHVzY2hhciAgbWVzc2Fn
ZV9zdWJkaXJbXTsgICAgICAgLyogU3ViZGlyZWN0b3J5IGZvciBtZXNzYWdlcyAqLwogZXh0ZXJu
IHVzY2hhciAqbWVzc2FnZV9yZWZlcmVuY2U7ICAgICAgLyogUmVmZXJlbmNlIGZvciBlcnJvciBt
ZXNzYWdlcyAqLwpAQCAtNzYwLDYgKzc5MiwxMCBAQAogZXh0ZXJuIHVzY2hhciAqb3ZlcnJpZGVf
bG9jYWxfaW50ZXJmYWNlczsgLyogVmFsdWUgb2YgLW9YIGFyZ3VtZW50ICovCiBleHRlcm4gdXNj
aGFyICpvdmVycmlkZV9waWRfZmlsZV9wYXRoOyAvKiBWYWx1ZSBvZiAtb1AgYXJndW1lbnQgKi8K
IAorZXh0ZXJuIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqIHBjcmVfZ2VuX2N0eDsJLyogcGNyZSBt
ZW1vcnkgbWFuYWdlbWVudCAqLworZXh0ZXJuIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqIHBjcmVf
Y21wX2N0eDsKK2V4dGVybiBwY3JlMl9tYXRjaF9jb250ZXh0ICogICBwY3JlX210Y19jdHg7CisK
IGV4dGVybiB1c2NoYXIgKnBlcmNlbnRfaGFja19kb21haW5zOyAgIC8qIExvY2FsIGRvbWFpbnMg
Zm9yIHdoaWNoICclIG9wZXJhdGVzICovCiBleHRlcm4gdXNjaGFyICpwaWRfZmlsZV9wYXRoOyAg
ICAgICAgICAvKiBGb3Igd3JpdGluZyBkYWVtb24gcGlkcyAqLwogI2lmbmRlZiBESVNBQkxFX1BJ
UEVfQ09OTkVDVApAQCAtNzg1LDYgKzgyMSw3IEBACiBleHRlcm4gaW50ICAgICBwcm94eV9leHRl
cm5hbF9wb3J0OyAgICAvKiBQb3J0IG9uIHJlbW90ZSBpbnRlcmZhY2Ugb2YgcHJveHkgKi8KIGV4
dGVybiB1c2NoYXIgKnByb3h5X2xvY2FsX2FkZHJlc3M7ICAgIC8qIElQIG9mIGxvY2FsIGludGVy
ZmFjZSBvZiBwcm94eSAqLwogZXh0ZXJuIGludCAgICAgcHJveHlfbG9jYWxfcG9ydDsgICAgICAg
LyogUG9ydCBvbiBsb2NhbCBpbnRlcmZhY2Ugb2YgcHJveHkgKi8KK2V4dGVybiBpbnQgICAgIHBy
b3h5X3Byb3RvY29sX3RpbWVvdXQ7IC8qIFRpbWVvdXQgZm9yIHByb3h5IG5lZ290aWF0aW9uICov
CiBleHRlcm4gQk9PTCAgICBwcm94eV9zZXNzaW9uOyAgICAgICAgICAvKiBUUlVFIGlmIHJlY2Vp
dmluZyBtYWlsIGZyb20gdmFsaWQgcHJveHkgICovCiAjZW5kaWYKIApAQCAtNzk1LDcgKzgzMiw3
IEBACiBleHRlcm4gY29uc3QgdXNjaGFyICpxdWFsaWZ5X2RvbWFpbl9yZWNpcGllbnQ7IC8qIERv
bWFpbiB0byBxdWFsaWZ5IHJlY2lwaWVudHMgd2l0aCAqLwogZXh0ZXJuIHVzY2hhciAqcXVhbGlm
eV9kb21haW5fc2VuZGVyOyAgLyogRG9tYWluIHRvIHF1YWxpZnkgc2VuZGVycyB3aXRoICovCiBl
eHRlcm4gdXNjaGFyICpxdWV1ZV9kb21haW5zOyAgICAgICAgICAvKiBRdWV1ZSB0aGVzZSBkb21h
aW5zICovCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1FVRVVFX1JBTVAKKyNpZm5kZWYgRElTQUJMRV9R
VUVVRV9SQU1QCiBleHRlcm4gQk9PTCAgICBxdWV1ZV9mYXN0X3JhbXA7ICAgICAgICAvKiAyLXBo
YXNlIHF1ZXVlLXJ1biBvdmVybGFwICovCiAjZW5kaWYKIGV4dGVybiBCT09MICAgIHF1ZXVlX2xp
c3RfcmVxdWlyZXNfYWRtaW47IC8qIFRSVUUgaWYgLWJwIHJlcXVpcmVzIGFkbWluICovCkBAIC04
MzcsMjkgKzg3NCwzMiBAQAogZXh0ZXJuIHVzY2hhciAqcmVjZWl2ZWRfZm9yOyAgICAgICAgICAg
LyogRm9yICJmb3IiIGZpZWxkICovCiBleHRlcm4gdXNjaGFyICpyZWNlaXZlZF9oZWFkZXJfdGV4
dDsgICAvKiBEZWZpbml0aW9uIG9mIFJlY2VpdmVkOiBoZWFkZXIgKi8KIGV4dGVybiBpbnQgICAg
IHJlY2VpdmVkX2hlYWRlcnNfbWF4OyAgIC8qIE1heCBjb3VudCBvZiBSZWNlaXZlZDogaGVhZGVy
cyAqLwotZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHJlY2VpdmVkX3RpbWU7ICAgLyogVGltZSB0aGUg
bWVzc2FnZSB3YXMgcmVjZWl2ZWQgKi8KLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCByZWNlaXZlZF90
aW1lX3Rha2VuOyAvKiBJbnRlcnZhbCB0aGUgbWVzc2FnZSB0b29rIHRvIGJlIHJlY2VpdmVkICov
CitleHRlcm4gc3RydWN0IHRpbWV2YWwgcmVjZWl2ZWRfdGltZTsgICAvKiBUaW1lIHRoZSBtZXNz
YWdlIHN0YXJ0ZWQgdG8gYmUgcmVjZWl2ZWQgKi8KK2V4dGVybiBzdHJ1Y3QgdGltZXZhbCByZWNl
aXZlZF90aW1lX2NvbXBsZXRlOyAvKiBUaW1lIHRoZSBtZXNzYWdlIGNvbXBsZXRlZCByZWNlcHRp
b24gKi8KIGV4dGVybiB1c2NoYXIgKnJlY2lwaWVudF9kYXRhOyAgICAgICAgIC8qIGxvb2t1cCBk
YXRhIGZvciByZWNpcGllbnRzICovCiBleHRlcm4gdXNjaGFyICpyZWNpcGllbnRfdW5xdWFsaWZp
ZWRfaG9zdHM7IC8qIFBlcm1pdHRlZCB1bnF1YWxpZmllZCByZWNpcGllbnRzICovCiBleHRlcm4g
dXNjaGFyICpyZWNpcGllbnRfdmVyaWZ5X2ZhaWx1cmU7IC8qIFdoYXQgd2VudCB3cm9uZyAqLwog
ZXh0ZXJuIGludCAgICAgcmVjaXBpZW50c19saXN0X21heDsgICAgLyogTWF4aW11bSBudW1iZXIg
Zml0dGluZyBpbiBsaXN0ICovCiBleHRlcm4gaW50ICAgICByZWNpcGllbnRzX21heDsgICAgICAg
ICAvKiBNYXggcGVybWl0dGVkICovCiBleHRlcm4gQk9PTCAgICByZWNpcGllbnRzX21heF9yZWpl
Y3Q7ICAvKiBJZiBUUlVFLCByZWplY3Qgd2hvbGUgbWVzc2FnZSAqLwotZXh0ZXJuIGNvbnN0IHBj
cmUgKnJlZ2V4X0FVVEg7ICAgICAgICAgLyogRm9yIHJlY29nbml6aW5nIEFVVEggc2V0dGluZ3Mg
Ki8KLWV4dGVybiBjb25zdCBwY3JlICAqcmVnZXhfY2hlY2tfZG5zX25hbWVzOyAvKiBGb3IgRE5T
IG5hbWUgY2hlY2tpbmcgKi8KLWV4dGVybiBjb25zdCBwY3JlICAqcmVnZXhfRnJvbTsgICAgICAg
IC8qIEZvciByZWNvZ25pemluZyAiRnJvbV8iIGxpbmVzICovCi1leHRlcm4gY29uc3QgcGNyZSAg
KnJlZ2V4X0NIVU5LSU5HOyAgICAvKiBGb3IgcmVjb2duaXppbmcgQ0hVTktJTkcgKFJGQyAzMDMw
KSAqLwotZXh0ZXJuIGNvbnN0IHBjcmUgICpyZWdleF9JR05PUkVRVU9UQTsgLyogRm9yIHJlY29n
bml6aW5nIElHTk9SRVFVT1RBIChMTVRQKSAqLwotZXh0ZXJuIGNvbnN0IHBjcmUgICpyZWdleF9Q
SVBFTElOSU5HOyAgLyogRm9yIHJlY29nbml6aW5nIFBJUEVMSU5JTkcgKi8KLWV4dGVybiBjb25z
dCBwY3JlICAqcmVnZXhfU0laRTsgICAgICAgIC8qIEZvciByZWNvZ25pemluZyBTSVpFIHNldHRp
bmdzICovCitleHRlcm4gY29uc3QgcGNyZTJfY29kZSAqcmVnZXhfQVVUSDsgICAgICAgICAvKiBG
b3IgcmVjb2duaXppbmcgQVVUSCBzZXR0aW5ncyAqLworZXh0ZXJuIGNvbnN0IHBjcmUyX2NvZGUg
ICpyZWdleF9jaGVja19kbnNfbmFtZXM7IC8qIEZvciBETlMgbmFtZSBjaGVja2luZyAqLworZXh0
ZXJuIGNvbnN0IHBjcmUyX2NvZGUgICpyZWdleF9Gcm9tOyAgICAgICAgLyogRm9yIHJlY29nbml6
aW5nICJGcm9tXyIgbGluZXMgKi8KK2V4dGVybiBjb25zdCBwY3JlMl9jb2RlICAqcmVnZXhfQ0hV
TktJTkc7ICAgIC8qIEZvciByZWNvZ25pemluZyBDSFVOS0lORyAoUkZDIDMwMzApICovCitleHRl
cm4gY29uc3QgcGNyZTJfY29kZSAgKnJlZ2V4X0lHTk9SRVFVT1RBOyAvKiBGb3IgcmVjb2duaXpp
bmcgSUdOT1JFUVVPVEEgKExNVFApICovCisjaWZkZWYgRVhQRVJJTUVOVEFMX0VTTVRQX0xJTUlU
UworZXh0ZXJuIGNvbnN0IHBjcmUyX2NvZGUgICpyZWdleF9MSU1JVFM7IC8qIEZvciByZWNvZ25p
emluZyBMSU1JVFMgKi8KKyNlbmRpZgorZXh0ZXJuIGNvbnN0IHBjcmUyX2NvZGUgICpyZWdleF9Q
SVBFTElOSU5HOyAgLyogRm9yIHJlY29nbml6aW5nIFBJUEVMSU5JTkcgKi8KK2V4dGVybiBjb25z
dCBwY3JlMl9jb2RlICAqcmVnZXhfU0laRTsgICAgICAgIC8qIEZvciByZWNvZ25pemluZyBTSVpF
IHNldHRpbmdzICovCiAjaWZuZGVmIERJU0FCTEVfUElQRV9DT05ORUNUCi1leHRlcm4gY29uc3Qg
cGNyZSAgKnJlZ2V4X0VBUkxZX1BJUEU7ICAvKiBGb3IgcmVjb2duaXppbmcgUElQRV9DT05OQ1Qg
Ki8KK2V4dGVybiBjb25zdCBwY3JlMl9jb2RlICAqcmVnZXhfRUFSTFlfUElQRTsgIC8qIEZvciBy
ZWNvZ25pemluZyBQSVBFX0NPTk5DVCAqLwogI2VuZGlmCi1leHRlcm4gY29uc3QgcGNyZSAgKnJl
Z2V4X2lzbXNnaWQ7ICAgICAvKiBDb21waWxlZCByLmUuIGZvciBtZXNzYWdlIGl0ICovCi1leHRl
cm4gY29uc3QgcGNyZSAgKnJlZ2V4X3NtdHBfY29kZTsgICAvKiBGb3IgcmVjb2duaXppbmcgU01U
UCBjb2RlcyAqLwotZXh0ZXJuIHVzY2hhciAqcmVnZXhfdmFyc1tdOyAgICAgICAgICAgLyogJHJl
Z2V4TiB2YXJpYWJsZXMgKi8KK2V4dGVybiBjb25zdCBwY3JlMl9jb2RlICAqcmVnZXhfaXNtc2dp
ZDsgICAgIC8qIENvbXBpbGVkIHIuZS4gZm9yIG1lc3NhZ2UgSUQgKi8KK2V4dGVybiBjb25zdCBw
Y3JlMl9jb2RlICAqcmVnZXhfc210cF9jb2RlOyAgIC8qIEZvciByZWNvZ25pemluZyBTTVRQIGNv
ZGVzICovCitleHRlcm4gY29uc3QgdXNjaGFyICpyZWdleF92YXJzW107ICAgICAgICAgICAvKiAk
cmVnZXhOIHZhcmlhYmxlcyAqLwogI2lmZGVmIFdISVRFTElTVF9EX01BQ1JPUwotZXh0ZXJuIGNv
bnN0IHBjcmUgICpyZWdleF93aGl0ZWxpc3RlZF9tYWNybzsgLyogRm9yIC1EIG1hY3JvIHZhbHVl
cyAqLworZXh0ZXJuIGNvbnN0IHBjcmUyX2NvZGUgICpyZWdleF93aGl0ZWxpc3RlZF9tYWNybzsg
LyogRm9yIC1EIG1hY3JvIHZhbHVlcyAqLwogI2VuZGlmCiAjaWZkZWYgV0lUSF9DT05URU5UX1ND
QU4KIGV4dGVybiB1c2NoYXIgKnJlZ2V4X21hdGNoX3N0cmluZzsgICAgIC8qIHJlZ2V4IHRoYXQg
bWF0Y2hlZCBhIGxpbmUgKHJlZ2V4IEFDTCBjb25kaXRpb24pICovCkBAIC05MjIsMTIgKzk2Miwx
MyBAQAogZXh0ZXJuIGludCAgICAgc210cF9hY2NlcHRfbWF4OyAgICAgICAgLyogTWF4IFNNVFAg
Y29ubmVjdGlvbnMgKi8KIGV4dGVybiBpbnQgICAgIHNtdHBfYWNjZXB0X21heF9ub25tYWlsOy8q
IE1heCBub24tbWFpbCBjb21tYW5kcyBpbiBvbmUgY29uICovCiBleHRlcm4gdXNjaGFyICpzbXRw
X2FjY2VwdF9tYXhfbm9ubWFpbF9ob3N0czsgLyogTGltaXQgbm9uLW1haWwgY21kcyBmcm9tIHRo
ZXNlIGhvc3RzICovCi1leHRlcm4gaW50ICAgICBzbXRwX2FjY2VwdF9tYXhfcGVyX2Nvbm5lY3Rp
b247IC8qIE1heCBtc2dzIHBlciBjb25uZWN0aW9uICovCitleHRlcm4gdXNjaGFyICpzbXRwX2Fj
Y2VwdF9tYXhfcGVyX2Nvbm5lY3Rpb247IC8qIE1heCBtc2dzIHBlciBjb25uZWN0aW9uICovCiBl
eHRlcm4gdXNjaGFyICpzbXRwX2FjY2VwdF9tYXhfcGVyX2hvc3Q7IC8qIE1heCBTTVRQIGNvbnMg
ZnJvbSBvbmUgSVAgYWRkciAqLwogZXh0ZXJuIGludCAgICAgc210cF9hY2NlcHRfcXVldWU7ICAg
ICAgLyogUXVldWUgYWZ0ZXIgc28gbWFueSBjb25uZWN0aW9ucyAqLwogZXh0ZXJuIGludCAgICAg
c210cF9hY2NlcHRfcXVldWVfcGVyX2Nvbm5lY3Rpb247IC8qIFF1ZXVlIGFmdGVyIHNvIG1hbnkg
bXNncyAqLwogZXh0ZXJuIGludCAgICAgc210cF9hY2NlcHRfcmVzZXJ2ZTsgICAgLyogUmVzZXJ2
ZSB0aGVzZSBTTVRQIGNvbm5lY3Rpb25zICovCiBleHRlcm4gdXNjaGFyICpzbXRwX2FjdGl2ZV9o
b3N0bmFtZTsgICAvKiBIb3N0bmFtZSBmb3IgdGhpcyBtZXNzYWdlICovCitleHRlcm4gaW50ICAg
ICBzbXRwX2JhY2tsb2dfbW9uaXRvcjsgICAvKiBsaXN0ZW4gYmFja2xvZyBsZXZlbCB0byBsb2cg
Ki8KIGV4dGVybiB1c2NoYXIgKnNtdHBfYmFubmVyOyAgICAgICAgICAgIC8qIEJhbm5lciBzdHJp
bmcgKHRvIGJlIGV4cGFuZGVkKSAqLwogZXh0ZXJuIEJPT0wgICAgc210cF9jaGVja19zcG9vbF9z
cGFjZTsgLyogVFJVRSB0byBjaGVjayBTTVRQIFNJWkUgdmFsdWUgKi8KIGV4dGVybiBpbnQgICAg
IHNtdHBfY2hfaW5kZXg7ICAgICAgICAgIC8qIEluZGV4IGluIHNtdHBfY29ubmVjdGlvbl9oYWQg
Ki8KQEAgLTk0MiwxMCArOTgzLDEzIEBACiBleHRlcm4gdXNjaGFyICpzbXRwX2V0cm5fY29tbWFu
ZDsgICAgICAvKiBDb21tYW5kIHRvIHJ1biAqLwogZXh0ZXJuIEJPT0wgICAgc210cF9ldHJuX3Nl
cmlhbGl6ZTsgICAgLyogT25seSBvbmUgYXQgb25jZSAqLwogZXh0ZXJuIEZJTEUgICAqc210cF9p
bjsgICAgICAgICAgICAgICAgLyogSW5jb21pbmcgU01UUCBpbnB1dCBmaWxlICovCitleHRlcm4g
aW50ICAgICBzbXRwX2xpc3Rlbl9iYWNrbG9nOyAgICAvKiBDdXJyZW50IGxpc3RlbmVyIHNvY2tl
dCBiYWNrbG9nLCBpZiBtb25pdG9yZWQgKi8KIGV4dGVybiBpbnQgICAgIHNtdHBfbG9hZF9yZXNl
cnZlOyAgICAgIC8qIE9ubHkgZnJvbSByZXNlcnZlZCBpZiBsb2FkID4gdGhpcyAqLwogZXh0ZXJu
IGludCAgICAgc210cF9tYWlsY21kX2NvdW50OyAgICAgLyogQ291bnQgb2YgTUFJTCBjb21tYW5k
cyAqLworZXh0ZXJuIGludCAgICAgc210cF9tYWlsY21kX21heDsgICAgICAgLyogTGltaXQgZm9y
IE1BSUwgY29tbWFuZHMgKi8KIGV4dGVybiBpbnQgICAgIHNtdHBfbWF4X3N5bnByb3RfZXJyb3Jz
Oy8qIE1heCBzeW50YXgvcHJvdG9jb2wgZXJyb3JzICovCiBleHRlcm4gaW50ICAgICBzbXRwX21h
eF91bmtub3duX2NvbW1hbmRzOyAvKiBBcyBpdCBzYXlzICovCitleHRlcm4gdXNjaGFyICpzbXRw
X25hbWVzW107CSAgICAgICAvKiBkZWNvZGUgZm9yIGNvbW1hbmQgY29kZXMgKi8KIGV4dGVybiB1
c2NoYXIgKnNtdHBfbm90cXVpdF9yZWFzb247ICAgIC8qIEdsb2JhbCBmb3IgZGlzY29ubmVjdCBy
ZWFzb24gKi8KIGV4dGVybiBGSUxFICAgKnNtdHBfb3V0OyAgICAgICAgICAgICAgIC8qIEluY29t
aW5nIFNNVFAgb3V0cHV0IGZpbGUgKi8KIGV4dGVybiB1c2NoYXIgKnNtdHBfcmF0ZWxpbWl0X2hv
c3RzOyAgIC8qIFJhdGUgbGltaXQgdGhlc2UgaG9zdHMgKi8KQEAgLTk5MiwyMiArMTAzNiw3IEBA
CiBleHRlcm4gRklMRSAgICpzcG9vbF9kYXRhX2ZpbGU7CSAgICAgICAvKiBoYW5kbGUgZm9yIC1E
IGZpbGUgKi8KIGV4dGVybiB1c2NoYXIgKnNwb29sX2RpcmVjdG9yeTsgICAgICAgIC8qIE5hbWUg
b2Ygc3Bvb2wgZGlyZWN0b3J5ICovCiBleHRlcm4gQk9PTCAgICBzcG9vbF93aXJlZm9ybWF0OyAg
ICAgICAvKiBjYW4gd3JpdGUgd2lyZWZvcm1hdCAtRCBmaWxlcyAqLwotI2lmZGVmIEVYUEVSSU1F
TlRBTF9TUlMKLWV4dGVybiB1c2NoYXIgKnNyc19jb25maWc7ICAgICAgICAgICAgIC8qIFNSUyBj
b25maWcgc2VjcmV0Om1heCBhZ2U6aGFzaCBsZW5ndGg6dXNlIHRpbWVzdGFtcDp1c2UgaGFzaCAq
LwotZXh0ZXJuIHVzY2hhciAqc3JzX2RiX2FkZHJlc3M7ICAgICAgICAgLyogU1JTIGRiIGFkZHJl
c3MgKi8KLWV4dGVybiB1c2NoYXIgKnNyc19kYl9rZXk7ICAgICAgICAgICAgIC8qIFNSUyBkYiBr
ZXkgKi8KLWV4dGVybiBpbnQgICAgIHNyc19oYXNobGVuZ3RoOyAgICAgICAgIC8qIFNSUyBoYXNo
IGxlbmd0aCAqLwotZXh0ZXJuIGludCAgICAgc3JzX2hhc2htaW47ICAgICAgICAgICAgLyogU1JT
IG1pbmltdW0gaGFzaCBsZW5ndGggKi8KLWV4dGVybiBpbnQgICAgIHNyc19tYXhhZ2U7ICAgICAg
ICAgICAgIC8qIFNSUyBtYXggYWdlICovCi1leHRlcm4gdXNjaGFyICpzcnNfb3JpZ19zZW5kZXI7
ICAgICAgICAvKiBTUlMgb3JpZ2luYWwgc2VuZGVyICovCi1leHRlcm4gdXNjaGFyICpzcnNfb3Jp
Z19yZWNpcGllbnQ7ICAgICAvKiBTUlMgb3JpZ2luYWwgcmVjaXBpZW50ICovCi1leHRlcm4gdXNj
aGFyICpzcnNfcmVjaXBpZW50OyAgICAgICAgICAvKiBTUlMgcmVjaXBpZW50ICovCi1leHRlcm4g
dXNjaGFyICpzcnNfc2VjcmV0czsgICAgICAgICAgICAvKiBTUlMgc2VjcmV0cyBsaXN0ICovCi1l
eHRlcm4gdXNjaGFyICpzcnNfc3RhdHVzOyAgICAgICAgICAgICAvKiBTUlMgc3RhdXMgKi8KLWV4
dGVybiBCT09MICAgIHNyc191c2VoYXNoOyAgICAgICAgICAgIC8qIFNSUyB1c2UgaGFzaCBmbGFn
ICovCi1leHRlcm4gQk9PTCAgICBzcnNfdXNldGltZXN0YW1wOyAgICAgICAvKiBTUlMgdXNlIHRp
bWVzdGFtcCBmbGFnICovCi0jZW5kaWYKLSNpZmRlZiBFWFBFUklNRU5UQUxfU1JTX05BVElWRQor
I2lmZGVmIFNVUFBPUlRfU1JTCiBleHRlcm4gdXNjaGFyICpzcnNfcmVjaXBpZW50OyAgICAgICAg
ICAvKiBTUlMgcmVjaXBpZW50ICovCiAjZW5kaWYKIGV4dGVybiBCT09MICAgIHN0cmljdF9hY2xf
dmFyczsgICAgICAgIC8qIEFDTCB2YXJpYWJsZXMgaGF2ZSB0byBiZSBzZXQgYmVmb3JlIGJlaW5n
IHVzZWQgKi8KQEAgLTEwMTYsOCArMTA0NSw4IEBACiBleHRlcm4gaW50ICAgICBzdHJpbmdfZGF0
ZXN0YW1wX3R5cGU7ICAvKiBBZnRlciBpbnNlcnRpb24gYnkgc3RyaW5nX2Zvcm1hdCAqLwogZXh0
ZXJuIEJPT0wgICAgc3RyaXBfZXhjZXNzX2FuZ2xlX2JyYWNrZXRzOyAvKiBTdXJyb3VuZGluZyBy
b3V0ZS1hZGRycyAqLwogZXh0ZXJuIEJPT0wgICAgc3RyaXBfdHJhaWxpbmdfZG90OyAgICAgLyog
UmVtb3ZlIGRvdHMgYXQgZW5kcyBvZiBkb21haW5zICovCi1leHRlcm4gdXNjaGFyICpzdWJtaXNz
aW9uX2RvbWFpbjsgICAgICAvKiBEb21haW4gZm9yIHN1Ym1pc3Npb24gbW9kZSAqLwotZXh0ZXJu
IHVzY2hhciAqc3VibWlzc2lvbl9uYW1lOyAgICAgICAgLyogVXNlciBuYW1lIHNldCBmcm9tIEFD
TCAqLworZXh0ZXJuIGNvbnN0IHVzY2hhciAqc3VibWlzc2lvbl9kb21haW47LyogRG9tYWluIGZv
ciBzdWJtaXNzaW9uIG1vZGUgKi8KK2V4dGVybiBjb25zdCB1c2NoYXIgKnN1Ym1pc3Npb25fbmFt
ZTsgIC8qIFVzZXIgbmFtZSBzZXQgZnJvbSBBQ0wgKi8KIGV4dGVybiBCT09MICAgIHN5c2xvZ19k
dXBsaWNhdGlvbjsgICAgIC8qIEZBTFNFID0+IG5vIGR1cGxpY2F0ZSBsb2dnaW5nICovCiBleHRl
cm4gaW50ICAgICBzeXNsb2dfZmFjaWxpdHk7ICAgICAgICAvKiBBcyBkZWZpbmVkIGJ5IFN5c2xv
Zy5oICovCiBleHRlcm4gQk9PTCAgICBzeXNsb2dfcGlkOyAgICAgICAgICAgICAvKiBUUlVFIGlm
IFBJRCBvbiBzeXNsb2dzICovCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvaGFzaC5jIGV4aW0vc3Jj
L2hhc2guYwotLS0gZXhpbS5vcmlnL3NyYy9oYXNoLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2hhc2guYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAw
MDAwMCArMDMwMApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgRXhpbSAtIGFuIEludGVybmV0IG1h
aWwgdHJhbnNwb3J0IGFnZW50CiAgKgotICogIENvcHlyaWdodCAoQykgMjAxMCAtIDIwMTggIEV4
aW0gbWFpbnRhaW5lcnMKKyAqICBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIw
MTAgLSAyMDIyCiAgKiAgQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1
IC0gMjAwOQogICoKICAqICBIYXNoIGludGVyZmFjZSBmdW5jdGlvbnMKQEAgLTI5LDE3ICsyOSwx
OSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmZGVmIFNIQV9PUEVOU1NMCisjIGRl
ZmluZSBIQVZFX1BBUlRJQUxfU0hBCiAKIEJPT0wKIGV4aW1fc2hhX2luaXQoaGN0eCAqIGgsIGhh
c2htZXRob2QgbSkKIHsKKyMgaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MzAwMDAwMDBM
CiBzd2l0Y2ggKGgtPm1ldGhvZCA9IG0pCiAgIHsKICAgY2FzZSBIQVNIX1NIQTE6ICAgICBoLT5o
YXNobGVuID0gMjA7IFNIQTFfSW5pdCAgKCZoLT51LnNoYTEpOyAgICAgYnJlYWs7CiAgIGNhc2Ug
SEFTSF9TSEEyXzI1NjogaC0+aGFzaGxlbiA9IDMyOyBTSEEyNTZfSW5pdCgmaC0+dS5zaGEyXzI1
Nik7IGJyZWFrOwogICBjYXNlIEhBU0hfU0hBMl8zODQ6IGgtPmhhc2hsZW4gPSA0ODsgU0hBMzg0
X0luaXQoJmgtPnUuc2hhMl81MTIpOyBicmVhazsKICAgY2FzZSBIQVNIX1NIQTJfNTEyOiBoLT5o
YXNobGVuID0gNjQ7IFNIQTUxMl9Jbml0KCZoLT51LnNoYTJfNTEyKTsgYnJlYWs7Ci0jaWZkZWYg
RVhJTV9IQVZFX1NIQTMKKyMgIGlmZGVmIEVYSU1fSEFWRV9TSEEzCiAgIGNhc2UgSEFTSF9TSEEz
XzIyNDogaC0+aGFzaGxlbiA9IDI4OwogCQkgICAgICBFVlBfRGlnZXN0SW5pdChoLT51Lm1jdHgg
PSBFVlBfTURfQ1RYX25ldygpLCBFVlBfc2hhM18yMjQoKSk7CiAJCSAgICAgIGJyZWFrOwpAQCAt
NTIsMzIgKzU0LDYyIEBACiAgIGNhc2UgSEFTSF9TSEEzXzUxMjogaC0+aGFzaGxlbiA9IDY0Owog
CQkgICAgICBFVlBfRGlnZXN0SW5pdChoLT51Lm1jdHggPSBFVlBfTURfQ1RYX25ldygpLCBFVlBf
c2hhM181MTIoKSk7CiAJCSAgICAgIGJyZWFrOwotI2VuZGlmCisjICBlbmRpZgogICBkZWZhdWx0
OgkgICAgICBoLT5oYXNobGVuID0gMDsgcmV0dXJuIEZBTFNFOwogICB9CiByZXR1cm4gVFJVRTsK
KworIyBlbHNlCitFVlBfTUQgKiBtZDsKKworaC0+aGFzaGxlbiA9IDA7CitpZiAoIShoLT51Lm1j
dHggPSBFVlBfTURfQ1RYX25ldygpKSkgcmV0dXJuIEZBTFNFOworc3dpdGNoIChoLT5tZXRob2Qg
PSBtKQorICB7CisgIGNhc2UgSEFTSF9TSEExOiAgICAgaC0+aGFzaGxlbiA9IDIwOyBtZCA9IEVW
UF9NRF9mZXRjaChOVUxMLCAiU0hBMSIsIE5VTEwpOyBicmVhazsKKyAgY2FzZSBIQVNIX1NIQTJf
MjU2OiBoLT5oYXNobGVuID0gMzI7IG1kID0gRVZQX01EX2ZldGNoKE5VTEwsICJTSEEyLTI1NiIs
IE5VTEwpOyBicmVhazsKKyAgY2FzZSBIQVNIX1NIQTJfMzg0OiBoLT5oYXNobGVuID0gNDg7IG1k
ID0gRVZQX01EX2ZldGNoKE5VTEwsICJTSEEyLTM4NCIsIE5VTEwpOyBicmVhazsKKyAgY2FzZSBI
QVNIX1NIQTJfNTEyOiBoLT5oYXNobGVuID0gNjQ7IG1kID0gRVZQX01EX2ZldGNoKE5VTEwsICJT
SEEyLTUxMiIsIE5VTEwpOyBicmVhazsKKyAgY2FzZSBIQVNIX1NIQTNfMjI0OiBoLT5oYXNobGVu
ID0gMjg7IG1kID0gRVZQX01EX2ZldGNoKE5VTEwsICJTSEEzLTIyNCIsIE5VTEwpOyBicmVhazsK
KyAgY2FzZSBIQVNIX1NIQTNfMjU2OiBoLT5oYXNobGVuID0gMzI7IG1kID0gRVZQX01EX2ZldGNo
KE5VTEwsICJTSEEzLTI1NiIsIE5VTEwpOyBicmVhazsKKyAgY2FzZSBIQVNIX1NIQTNfMzg0OiBo
LT5oYXNobGVuID0gNDg7IG1kID0gRVZQX01EX2ZldGNoKE5VTEwsICJTSEEzLTM4NCIsIE5VTEwp
OyBicmVhazsKKyAgY2FzZSBIQVNIX1NIQTNfNTEyOiBoLT5oYXNobGVuID0gNjQ7IG1kID0gRVZQ
X01EX2ZldGNoKE5VTEwsICJTSEEzLTUxMiIsIE5VTEwpOyBicmVhazsKKyAgZGVmYXVsdDoJICAg
ICAgcmV0dXJuIEZBTFNFOworICB9CitpZiAobWQgJiYgRVZQX0RpZ2VzdEluaXRfZXgoaC0+dS5t
Y3R4LCBtZCwgTlVMTCkpCisgIHJldHVybiBUUlVFOworCitoLT5oYXNobGVuID0gMDsKK3JldHVy
biBGQUxTRTsKKyMgZW5kaWYKIH0KIAogCiB2b2lkCiBleGltX3NoYV91cGRhdGUoaGN0eCAqIGgs
IGNvbnN0IHVzY2hhciAqIGRhdGEsIGludCBsZW4pCiB7CisjIGlmIE9QRU5TU0xfVkVSU0lPTl9O
VU1CRVIgPCAweDMwMDAwMDAwTAogc3dpdGNoIChoLT5tZXRob2QpCiAgIHsKICAgY2FzZSBIQVNI
X1NIQTE6ICAgICBTSEExX1VwZGF0ZSAgKCZoLT51LnNoYTEsICAgICBkYXRhLCBsZW4pOyBicmVh
azsKICAgY2FzZSBIQVNIX1NIQTJfMjU2OiBTSEEyNTZfVXBkYXRlKCZoLT51LnNoYTJfMjU2LCBk
YXRhLCBsZW4pOyBicmVhazsKICAgY2FzZSBIQVNIX1NIQTJfMzg0OiBTSEEzODRfVXBkYXRlKCZo
LT51LnNoYTJfNTEyLCBkYXRhLCBsZW4pOyBicmVhazsKICAgY2FzZSBIQVNIX1NIQTJfNTEyOiBT
SEE1MTJfVXBkYXRlKCZoLT51LnNoYTJfNTEyLCBkYXRhLCBsZW4pOyBicmVhazsKLSNpZmRlZiBF
WElNX0hBVkVfU0hBMworIyAgaWZkZWYgRVhJTV9IQVZFX1NIQTMKICAgY2FzZSBIQVNIX1NIQTNf
MjI0OgogICBjYXNlIEhBU0hfU0hBM18yNTY6CiAgIGNhc2UgSEFTSF9TSEEzXzM4NDoKICAgY2Fz
ZSBIQVNIX1NIQTNfNTEyOiBFVlBfRGlnZXN0VXBkYXRlKGgtPnUubWN0eCwgZGF0YSwgbGVuKTsg
YnJlYWs7Ci0jZW5kaWYKKyMgIGVuZGlmCiAgIC8qIHNob3VsZCBiZSBibG9ja2VkIGJ5IGluaXQg
bm90IGhhbmRsaW5nIHRoZXNlLCBidXQgYmUgZXhwbGljaXQgdG8KICAgZ3VhcmQgYWdhaW5zdCBh
Y2NpZGVudHMgbGF0ZXIgKGFuZCBodXNoIHVwIGNsYW5nIC1Xc3dpdGNoKSAqLwogICBkZWZhdWx0
OiBhc3NlcnQoMCk7CiAgIH0KKworIyBlbHNlCisKK0VWUF9EaWdlc3RVcGRhdGUoaC0+dS5tY3R4
LCBkYXRhLCBsZW4pOworIyBlbmRpZgogfQogCiAKQEAgLTg1LDI2ICsxMTcsMzcgQEAKIGV4aW1f
c2hhX2ZpbmlzaChoY3R4ICogaCwgYmxvYiAqIGIpCiB7CiAvKiBIYXNoaW5nIGlzIHN1ZmZpY2ll
bnQgdG8gcHVyaWZ5IGFueSB0YWludGVkIGlucHV0ICovCi1iLT5kYXRhID0gc3RvcmVfZ2V0KGIt
PmxlbiA9IGgtPmhhc2hsZW4sIEZBTFNFKTsKK2ItPmRhdGEgPSBzdG9yZV9nZXQoYi0+bGVuID0g
aC0+aGFzaGxlbiwgR0VUX1VOVEFJTlRFRCk7CisKKyMgaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJF
UiA8IDB4MzAwMDAwMDBMCiBzd2l0Y2ggKGgtPm1ldGhvZCkKICAgewogICBjYXNlIEhBU0hfU0hB
MTogICAgIFNIQTFfRmluYWwgIChiLT5kYXRhLCAmaC0+dS5zaGExKTsgICAgIGJyZWFrOwogICBj
YXNlIEhBU0hfU0hBMl8yNTY6IFNIQTI1Nl9GaW5hbChiLT5kYXRhLCAmaC0+dS5zaGEyXzI1Nik7
IGJyZWFrOwogICBjYXNlIEhBU0hfU0hBMl8zODQ6IFNIQTM4NF9GaW5hbChiLT5kYXRhLCAmaC0+
dS5zaGEyXzUxMik7IGJyZWFrOwogICBjYXNlIEhBU0hfU0hBMl81MTI6IFNIQTUxMl9GaW5hbChi
LT5kYXRhLCAmaC0+dS5zaGEyXzUxMik7IGJyZWFrOwotI2lmZGVmIEVYSU1fSEFWRV9TSEEzCisj
ICBpZmRlZiBFWElNX0hBVkVfU0hBMwogICBjYXNlIEhBU0hfU0hBM18yMjQ6CiAgIGNhc2UgSEFT
SF9TSEEzXzI1NjoKICAgY2FzZSBIQVNIX1NIQTNfMzg0OgogICBjYXNlIEhBU0hfU0hBM181MTI6
IEVWUF9EaWdlc3RGaW5hbChoLT51Lm1jdHgsIGItPmRhdGEsIE5VTEwpOyBicmVhazsKLSNlbmRp
ZgorIyAgZW5kaWYKICAgZGVmYXVsdDogYXNzZXJ0KDApOwogICB9CisKKyMgZWxzZQorCitFVlBf
RGlnZXN0RmluYWxfZXgoaC0+dS5tY3R4LCBiLT5kYXRhLCBOVUxMKTsKK0VWUF9NRF9mcmVlKChF
VlBfTUQgKikgRVZQX01EX0NUWF9nZXQwX21kKGgtPnUubWN0eCkpOworRVZQX01EX0NUWF9mcmVl
KGgtPnUubWN0eCk7CisKKyMgZW5kaWYKIH0KIAogCiAKICNlbGlmIGRlZmluZWQoU0hBX0dOVVRM
UykKKyMgZGVmaW5lIEhBVkVfUEFSVElBTF9TSEEKIC8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAK
IEJPT0wKQEAgLTEzOCwxMyArMTgxLDE0IEBACiB2b2lkCiBleGltX3NoYV9maW5pc2goaGN0eCAq
IGgsIGJsb2IgKiBiKQogewotYi0+ZGF0YSA9IHN0b3JlX2dldChiLT5sZW4gPSBoLT5oYXNobGVu
LCBGQUxTRSk7CitiLT5kYXRhID0gc3RvcmVfZ2V0KGItPmxlbiA9IGgtPmhhc2hsZW4sIEdFVF9V
TlRBSU5URUQpOwogZ251dGxzX2hhc2hfb3V0cHV0KGgtPnNoYSwgYi0+ZGF0YSk7CiB9CiAKIAog
CiAjZWxpZiBkZWZpbmVkKFNIQV9HQ1JZUFQpCisjIGRlZmluZSBIQVZFX1BBUlRJQUxfU0hBCiAv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwogCiBCT09MCkBAIC0xNzUsNyArMjE5LDcgQEAKIHZvaWQK
IGV4aW1fc2hhX2ZpbmlzaChoY3R4ICogaCwgYmxvYiAqIGIpCiB7Ci1iLT5kYXRhID0gc3RvcmVf
Z2V0KGItPmxlbiA9IGgtPmhhc2hsZW4sIEZBTFNFKTsKK2ItPmRhdGEgPSBzdG9yZV9nZXQoYi0+
bGVuID0gaC0+aGFzaGxlbiwgR0VUX1VOVEFJTlRFRCk7CiBtZW1jcHkoYi0+ZGF0YSwgZ2NyeV9t
ZF9yZWFkKGgtPnNoYSwgMCksIGgtPmhhc2hsZW4pOwogfQogCkBAIC0xODMsNiArMjI3LDcgQEAK
IAogCiAjZWxpZiBkZWZpbmVkKFNIQV9QT0xBUlNTTCkKKyMgZGVmaW5lIEhBVkVfUEFSVElBTF9T
SEEKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIEJPT0wKQEAgLTIxMyw3ICsyNTgsNyBAQAog
dm9pZAogZXhpbV9zaGFfZmluaXNoKGhjdHggKiBoLCBibG9iICogYikKIHsKLWItPmRhdGEgPSBz
dG9yZV9nZXQoYi0+bGVuID0gaC0+aGFzaGxlbiwgRkFMU0UpOworYi0+ZGF0YSA9IHN0b3JlX2dl
dChiLT5sZW4gPSBoLT5oYXNobGVuLCBHRVRfSU5UQUlOVEVEKTsKIHN3aXRjaCAoaC0+bWV0aG9k
KQogICB7CiAgIGNhc2UgSEFTSF9TSEExOiAgIHNoYTFfZmluaXNoKGgtPnUuc2hhMSwgYi0+ZGF0
YSk7IGJyZWFrOwpAQCAtMzkxLDkgKzQzNiw3IEBACiAgIG1lbXNldCh3b3JrLCAwLCA1Nik7CiAg
IH0KIGVsc2UKLSAgewogICBtZW1zZXQod29yaytsZW5ndGgrMSwgMCwgNTUtbGVuZ3RoKTsKLSAg
fQogCiAvKiBUaGUgZmluYWwgOCBieXRlcyBvZiB0aGUgZmluYWwgY2h1bmsgYXJlIGEgNjQtYml0
IHJlcHJlc2VudGF0aW9uIG9mIHRoZQogbGVuZ3RoIG9mIHRoZSBpbnB1dCBzdHJpbmcgKmJpdHMq
LCBiZWZvcmUgcGFkZGluZywgaGlnaCBvcmRlciB3b3JkIGZpcnN0LCBhbmQKQEAgLTQ1MSw3ICs0
OTQsNyBAQAogdm9pZAogZXhpbV9zaGFfZmluaXNoKGhjdHggKiBoLCBibG9iICogYikKIHsKLWIt
PmRhdGEgPSBzdG9yZV9nZXQoYi0+bGVuID0gaC0+aGFzaGxlbiwgRkFMU0UpOworYi0+ZGF0YSA9
IHN0b3JlX2dldChiLT5sZW4gPSBoLT5oYXNobGVuLCBHRVRfVU5UQUlOVEVEKTsKIAogbmF0aXZl
X3NoYTFfZW5kKCZoLT5zaGExLCBOVUxMLCAwLCBiLT5kYXRhKTsKIH0KQEAgLTUxNSw2ICs1NTgs
MTQgQEAKIAogCiAKKyNpZmRlZiBIQVZFX1BBUlRJQUxfU0hBCisjIHVuZGVmIEhBVkVfUEFSVElB
TF9TSEEKK3ZvaWQKK2V4aW1fc2hhX3VwZGF0ZV9zdHJpbmcoaGN0eCAqIGgsIGNvbnN0IHVzY2hh
ciAqIHMpCit7CitpZiAocykgZXhpbV9zaGFfdXBkYXRlKGgsIHMsIFVzdHJsZW4ocykpOworfQor
I2VuZGlmCiAKIAogCkBAIC01MjQsNyArNTc1LDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwogCi0jIGlmZGVmIFNUQU5EX0FMT05FCisjaWZkZWYgU1RB
TkRfQUxPTkUKIAogLyogVGVzdCB2YWx1ZXMuIFRoZSBmaXJzdCAxMjggbWF5IGNvbnRhaW4gYmlu
YXJ5IHplcm9zIGFuZCBoYXZlIGluY3JlYXNpbmcKIGxlbmd0aC4gKi8KQEAgLTgzOSw2ICs4OTAs
NiBAQAogaWYgKHN0cmNtcChzLCBhdGVzdCkgIT0gMCkgcHJpbnRmKCIqKiogTm8gbWF0Y2ggKioq
XG4iKTsKIAogfQotIyBlbmRpZgkvKlNUQU5EX0FMT05FKi8KKyNlbmRpZgkvKlNUQU5EX0FMT05F
Ki8KIAogLyogRW5kIG9mIEZpbGUgKi8KZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9oYXNoLmggZXhp
bS9zcmMvaGFzaC5oCi0tLSBleGltLm9yaWcvc3JjL2hhc2guaAkyMDIzLTA2LTA0IDE2OjIyOjA1
LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvaGFzaC5oCTIwMjItMDYtMjMgMTY6NDE6MTAu
MDAwMDAwMDAwICswMzAwCkBAIC0xLDcgKzEsNiBAQAogLyoKICAqICBFeGltIC0gYW4gSW50ZXJu
ZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk1IC0gMjAx
OCAgRXhpbSBtYWludGFpbmVycworICogIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5l
cnMgMTk5NSAtIDIwMjIKICAqCiAgKiAgSGFzaCBpbnRlcmZhY2UgZnVuY3Rpb25zCiAgKi8KQEAg
LTc3LDYgKzc2LDcgQEAKIAogZXh0ZXJuIEJPT0wgICAgIGV4aW1fc2hhX2luaXQoaGN0eCAqLCBo
YXNobWV0aG9kKTsKIGV4dGVybiB2b2lkICAgICBleGltX3NoYV91cGRhdGUoaGN0eCAqLCBjb25z
dCB1c2NoYXIgKmEsIGludCk7CitleHRlcm4gdm9pZCAgICAgZXhpbV9zaGFfdXBkYXRlX3N0cmlu
ZyhoY3R4ICosIGNvbnN0IHVzY2hhciAqYSk7CiBleHRlcm4gdm9pZCAgICAgZXhpbV9zaGFfZmlu
aXNoKGhjdHggKiwgYmxvYiAqKTsKIAogI2VuZGlmCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvaGVh
ZGVyLmMgZXhpbS9zcmMvaGVhZGVyLmMKLS0tIGV4aW0ub3JpZy9zcmMvaGVhZGVyLmMJMjAyMy0w
Ni0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2hlYWRlci5jCTIwMjIt
MDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhp
bSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykg
VGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5p
dmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTYgKi8KLS8qIENvcHlyaWdodCAoYykgVGhl
IEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29u
ZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogCkBAIC05NywxMiArOTcsMTUg
QEAKIGhlYWRlcl9saW5lICpoLCAqbmV3ID0gTlVMTDsKIGhlYWRlcl9saW5lICoqaHB0cjsKIAot
dXNjaGFyICpwLCAqcTsKLXVzY2hhciAqIGJ1ZiA9IHN0b3JlX2dldChIRUFERVJfQUREX0JVRkZF
Ul9TSVpFLCBGQUxTRSk7Ci1nc3RyaW5nIGdzID0geyAuc2l6ZSA9IEhFQURFUl9BRERfQlVGRkVS
X1NJWkUsIC5wdHIgPSAwLCAucyA9IGJ1ZiB9OwordXNjaGFyICogcCwgKiBxLCAqIGJ1ZjsKK2dz
dHJpbmcgZ3M7CiAKIGlmICghaGVhZGVyX2xhc3QpIHJldHVybiBOVUxMOwogCitncy5zID0gYnVm
ID0gc3RvcmVfZ2V0KEhFQURFUl9BRERfQlVGRkVSX1NJWkUsIEdFVF9VTlRBSU5URUQpOworZ3Mu
c2l6ZSA9IEhFQURFUl9BRERfQlVGRkVSX1NJWkU7Citncy5wdHIgPSAwOworCiBpZiAoIXN0cmlu
Z192Zm9ybWF0KCZncywgU1ZGTVRfUkVCVUZGRVIsIGZvcm1hdCwgYXApKQogICBsb2dfd3JpdGUo
MCwgTE9HX01BSU58TE9HX1BBTklDX0RJRSwgInN0cmluZyB0b28gbG9uZyBpbiBoZWFkZXJfYWRk
OiAiCiAgICAgIiUuMTAwcyAuLi4iLCBzdHJpbmdfZnJvbV9nc3RyaW5nKCZncykpOwpAQCAtMTc5
LDcgKzE4Miw3IEBACiAgICAgaWYgKCooKytxKSAhPSAnICcgJiYgKnEgIT0gJ1x0JykgYnJlYWs7
CiAgICAgfQogCi0gIG5ldyA9IHN0b3JlX2dldChzaXplb2YoaGVhZGVyX2xpbmUpLCBGQUxTRSk7
CisgIG5ldyA9IHN0b3JlX2dldChzaXplb2YoaGVhZGVyX2xpbmUpLCBHRVRfVU5UQUlOVEVEKTsK
ICAgbmV3LT50ZXh0ID0gc3RyaW5nX2NvcHluKHAsIHEgLSBwKTsKICAgbmV3LT5zbGVuID0gcSAt
IHA7CiAgIG5ldy0+dHlwZSA9IHR5cGU7CkBAIC0zNjgsNyArMzcxLDcgQEAKIG9uZV9wYXR0ZXJu
X21hdGNoKHVzY2hhciAqbmFtZSwgaW50IHNsZW4sIEJPT0wgaGFzX2FkZHJlc3NlcywgdXNjaGFy
ICpwYXR0ZXJuKQogewogQk9PTCB5aWVsZCA9IEZBTFNFOwotY29uc3QgcGNyZSAqcmUgPSBOVUxM
OworY29uc3QgcGNyZTJfY29kZSAqcmUgPSBOVUxMOwogCiAvKiBJZiB0aGUgcGF0dGVybiBpcyBh
IHJlZ2V4LCBjb21waWxlIGl0LiBCb21iIG91dCBpZiBjb21waWxpbmcgZmFpbHM7IHRoZXNlCiBw
YXR0ZXJucyBhcmUgYWxsIGNvbnN0cnVjdGVkIGludGVybmFsbHkgYW5kIHNob3VsZCBiZSB2YWxp
ZC4gKi8KQEAgLTQxNiwxMCArNDE5LDkgQEAKIAogICAgICAgLyogT3RoZXJ3aXNlLCB0ZXN0IGZv
ciB0aGUgcGF0dGVybjsgYSBub24tcmVnZXggbXVzdCBiZSBhbiBleGFjdCBtYXRjaCAqLwogCi0g
ICAgICB5aWVsZCA9ICFyZQotICAgICAgICA/IChzdHJjbXBpYyhuZXh0LCBwYXR0ZXJuKSA9PSAw
KQotICAgICAgICA6IChwY3JlX2V4ZWMocmUsIE5VTEwsIENTIG5leHQsIFVzdHJsZW4obmV4dCks
IDAsIFBDUkVfRU9QVCwgTlVMTCwgMCkKLSAgICAgICAgICA+PSAwKTsKKyAgICAgIHlpZWxkID0g
cmUKKwk/IHJlZ2V4X21hdGNoKHJlLCBuZXh0LCAtMSwgTlVMTCkKKyAgICAgICAgOiAoc3RyY21w
aWMobmV4dCwgcGF0dGVybikgPT0gMCk7CiAgICAgICB9CiAgICAgfQogCkBAIC00MjgsMTAgKzQz
MCw5IEBACiAKICAgZWxzZQogICAgIHsKLSAgICB5aWVsZCA9IChyZSA9PSBOVUxMKT8KLSAgICAg
IChzdHJzdHJpYyhoLT50ZXh0LCBwYXR0ZXJuLCBGQUxTRSkgIT0gTlVMTCkKLSAgICAgIDoKLSAg
ICAgIChwY3JlX2V4ZWMocmUsIE5VTEwsIENTIGgtPnRleHQsIGgtPnNsZW4sIDAsIFBDUkVfRU9Q
VCwgTlVMTCwgMCkgPj0gMCk7CisgICAgeWllbGQgPSByZQorICAgICAgPyByZWdleF9tYXRjaChy
ZSwgaC0+dGV4dCwgaC0+c2xlbiwgTlVMTCkKKyAgICAgIDogKHN0cnN0cmljKGgtPnRleHQsIHBh
dHRlcm4sIEZBTFNFKSAhPSBOVUxMKTsKICAgICB9CiAgIH0KIArQotC+0LvRjNC60L4g0LIgZXhp
bS9zcmM6IGhpbnRzZGIuaArQotC+0LvRjNC60L4g0LIgZXhpbS9zcmM6IGhpbnRzZGJfc3RydWN0
cy5oCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvaG9zdC5jIGV4aW0vc3JjL2hvc3QuYwotLS0gZXhp
bS5vcmlnL3NyYy9ob3N0LmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysr
IGV4aW0vc3JjL2hvc3QuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAt
Miw4ICsyLDggQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2Vu
dCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICov
CiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICov
Ci0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0
aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICov
CiAKIC8qIEZ1bmN0aW9ucyBmb3IgZmluZGluZyBob3N0cywgZWl0aGVyIGJ5IGdldGhvc3RieW5h
bWUoKSwgZ2V0aG9zdGJ5YWRkcigpLCBvcgpAQCAtMTk3LDkgKzE5Nyw5IEBACiAgICAgIHx8ICBp
cGEgPT0gNiAmJiBhZiA9PSBBRl9JTkVUNikKICAgICB7CiAgICAgaW50IHhbNF07Ci0gICAgeWll
bGQgPSBzdG9yZV9nZXQoc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwgRkFMU0UpOwotICAgIGFsaXN0
ID0gc3RvcmVfZ2V0KDIgKiBzaXplb2YoY2hhciAqKSwgRkFMU0UpOwotICAgIGFkZHMgID0gc3Rv
cmVfZ2V0KGFsZW4sIEZBTFNFKTsKKyAgICB5aWVsZCA9IHN0b3JlX2dldChzaXplb2Yoc3RydWN0
IGhvc3RlbnQpLCBHRVRfVU5UQUlOVEVEKTsKKyAgICBhbGlzdCA9IHN0b3JlX2dldCgyICogc2l6
ZW9mKGNoYXIgKiksIEdFVF9VTlRBSU5URUQpOworICAgIGFkZHMgID0gc3RvcmVfZ2V0KGFsZW4s
IEdFVF9VTlRBSU5URUQpOwogICAgIHlpZWxkLT5oX25hbWUgPSBDUyBuYW1lOwogICAgIHlpZWxk
LT5oX2FsaWFzZXMgPSBOVUxMOwogICAgIHlpZWxkLT5oX2FkZHJ0eXBlID0gYWY7CkBAIC0yMjIs
NyArMjIyLDggQEAKICAgZWxzZQogICAgIHsKICAgICAqZXJyb3JfbnVtID0gSE9TVF9OT1RfRk9V
TkQ7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgeWllbGQgPSBOVUxMOworICAgIGdvdG8gb3V0Owog
ICAgIH0KIAogLyogSGFuZGxlIGEgaG9zdCBuYW1lICovCkBAIC0yMzgsMTEgKzIzOSwxMSBAQAog
ICBzd2l0Y2gocmMpCiAgICAgewogICAgIGNhc2UgRE5TX1NVQ0NFRUQ6IGJyZWFrOwotICAgIGNh
c2UgRE5TX05PTUFUQ0g6ICplcnJvcl9udW0gPSBIT1NUX05PVF9GT1VORDsgcmV0dXJuIE5VTEw7
Ci0gICAgY2FzZSBETlNfTk9EQVRBOiAgKmVycm9yX251bSA9IE5PX0RBVEE7IHJldHVybiBOVUxM
OwotICAgIGNhc2UgRE5TX0FHQUlOOiAgICplcnJvcl9udW0gPSBUUllfQUdBSU47IHJldHVybiBO
VUxMOworICAgIGNhc2UgRE5TX05PTUFUQ0g6ICplcnJvcl9udW0gPSBIT1NUX05PVF9GT1VORDsg
eWllbGQgPSBOVUxMOyBnb3RvIG91dDsKKyAgICBjYXNlIEROU19OT0RBVEE6ICAqZXJyb3JfbnVt
ID0gTk9fREFUQTsgeWllbGQgPSBOVUxMOyBnb3RvIG91dDsKKyAgICBjYXNlIEROU19BR0FJTjog
ICAqZXJyb3JfbnVtID0gVFJZX0FHQUlOOyB5aWVsZCA9IE5VTEw7IGdvdG8gb3V0OwogICAgIGRl
ZmF1bHQ6Ci0gICAgY2FzZSBETlNfRkFJTDogICAgKmVycm9yX251bSA9IE5PX1JFQ09WRVJZOyBy
ZXR1cm4gTlVMTDsKKyAgICBjYXNlIEROU19GQUlMOiAgICAqZXJyb3JfbnVtID0gTk9fUkVDT1ZF
Ulk7IHlpZWxkID0gTlVMTDsgZ290byBvdXQ7CiAgICAgfQogCiAgIGZvciAoZG5zX3JlY29yZCAq
IHJyID0gZG5zX25leHRfcnIoZG5zYSwgJmRuc3MsIFJFU0VUX0FOU1dFUlMpOwpAQCAtMjUwLDkg
KzI1MSw5IEBACiAgICAgICAgcnIgPSBkbnNfbmV4dF9ycihkbnNhLCAmZG5zcywgUkVTRVRfTkVY
VCkpIGlmIChyci0+dHlwZSA9PSB0eXBlKQogICAgIGNvdW50Kys7CiAKLSAgeWllbGQgPSBzdG9y
ZV9nZXQoc2l6ZW9mKHN0cnVjdCBob3N0ZW50KSwgRkFMU0UpOwotICBhbGlzdCA9IHN0b3JlX2dl
dCgoY291bnQgKyAxKSAqIHNpemVvZihjaGFyICopLCBGQUxTRSk7Ci0gIGFkZHMgID0gc3RvcmVf
Z2V0KGNvdW50ICphbGVuLCBGQUxTRSk7CisgIHlpZWxkID0gc3RvcmVfZ2V0KHNpemVvZihzdHJ1
Y3QgaG9zdGVudCksIEdFVF9VTlRBSU5URUQpOworICBhbGlzdCA9IHN0b3JlX2dldCgoY291bnQg
KyAxKSAqIHNpemVvZihjaGFyICopLCBHRVRfVU5UQUlOVEVEKTsKKyAgYWRkcyAgPSBzdG9yZV9n
ZXQoY291bnQgKmFsZW4sIEdFVF9VTlRBSU5URUQpOwogCiAgIHlpZWxkLT5oX25hbWUgPSBDUyBu
YW1lOwogICB5aWVsZC0+aF9hbGlhc2VzID0gTlVMTDsKQEAgLTI4MCw2ICsyODEsOSBAQAogICAq
YWxpc3QgPSBOVUxMOwogICB9CiAKK291dDoKKworc3RvcmVfZnJlZV9kbnNfYW5zd2VyKGRuc2Ep
OwogcmV0dXJuIHlpZWxkOwogfQogCkBAIC0zMjQsMTIgKzMyOCwxMiBAQAogICAgIGNvbnRpbnVl
OwogICAgIH0KIAotICBoID0gc3RvcmVfZ2V0KHNpemVvZihob3N0X2l0ZW0pLCBGQUxTRSk7Cisg
IGggPSBzdG9yZV9nZXQoc2l6ZW9mKGhvc3RfaXRlbSksIEdFVF9VTlRBSU5URUQpOwogICBoLT5u
YW1lID0gbmFtZTsKICAgaC0+YWRkcmVzcyA9IE5VTEw7CiAgIGgtPnBvcnQgPSBQT1JUX05PTkU7
CiAgIGgtPm14ID0gZmFrZV9teDsKLSAgaC0+c29ydF9rZXkgPSByYW5kb21pemU/ICgtZmFrZV9t
eCkqMTAwMCArIHJhbmRvbV9udW1iZXIoMTAwMCkgOiAwOworICBoLT5zb3J0X2tleSA9IHJhbmRv
bWl6ZSA/ICgtZmFrZV9teCkqMTAwMCArIHJhbmRvbV9udW1iZXIoMTAwMCkgOiAwOwogICBoLT5z
dGF0dXMgPSBoc3RhdHVzX3Vua25vd247CiAgIGgtPndoeSA9IGh3aHlfdW5rbm93bjsKICAgaC0+
bGFzdF90cnkgPSAwOwpAQCAtMzY2LDE1ICszNzAsMTggQEAKICogICAgICAgIEV4dHJhY3QgcG9y
dCBmcm9tIGFkZHJlc3Mgc3RyaW5nICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBJbiB0aGUgc3Bvb2wgZmlsZSwgYW5kIGlu
IHRoZSAtb01hIGFuZCAtb01pIG9wdGlvbnMsIGEgaG9zdCBwbHVzIHBvcnQgaXMKLWdpdmVuIGFz
IGFuIElQIGFkZHJlc3MgZm9sbG93ZWQgYnkgYSBkb3QgYW5kIGEgcG9ydCBudW1iZXIuIFRoaXMg
ZnVuY3Rpb24KLWRlY29kZXMgdGhpcy4KKy8qIEluIHRoZSAtb01hIGFuZCAtb01pIG9wdGlvbnMs
IGEgaG9zdCBwbHVzIHBvcnQgaXMgZ2l2ZW4gYXMgYW4gSVAgYWRkcmVzcworZm9sbG93ZWQgYnkg
YSBkb3QgYW5kIGEgcG9ydCBudW1iZXIuIFRoaXMgZnVuY3Rpb24gZGVjb2RlcyB0aGlzLgogCiBB
biBhbHRlcm5hdGl2ZSBmb3JtYXQgZm9yIHRoZSAtb01hIGFuZCAtb01pIG9wdGlvbnMgaXMgW2lw
IGFkZHJlc3NdOnBvcnQgd2hpY2gKLWlzIHdoYXQgRXhpbSA0IHVzZXMgZm9yIG91dHB1dCwgYmVj
YXVzZSBpdCBzZWVtcyB0byBiZWNvbWluZyBjb21tb25seSB1c2VkLAoraXMgd2hhdCBFeGltIHVz
ZXMgZm9yIG91dHB1dCwgYmVjYXVzZSBpdCBzZWVtcyB0byBiZWNvbWluZyBjb21tb25seSB1c2Vk
LAogd2hlcmVhcyB0aGUgZG90IGZvcm0gY29uZnVzZXMgc29tZSBwcm9ncmFtcy9wZW9wbGUuIFNv
IHdlIHJlY29nbml6ZSB0aGF0IGZvcm0KIHRvby4KIAorVGhlIHNwb29sIGZpbGUgdXNlZCB0byB1
c2UgdGhlIGZpcnN0IGZvcm0sIGJ1dCB0aGlzIGJyZWFrcyB3aXRoIGEgdjRtYXBwZWQgaXB2Ngor
aHlicmlkLCBiZWNhdXNlIHRoZSBwYXJzaW5nIGhlcmUgaXMgbm90IGNsZXZlci4gIFNvIGZvciBz
cG9vbCB3ZSBub3cgdXNlIHRoZQorc2Vjb25kIGZvcm0uCisKIEFyZ3VtZW50OgogICBhZGRyZXNz
ICAgIHBvaW50cyB0byB0aGUgc3RyaW5nOyBpZiB0aGVyZSBpcyBhIHBvcnQsIHRoZSAnLicgaW4g
dGhlIHN0cmluZwogICAgICAgICAgICAgIGlzIG92ZXJ3cml0dGVuIHdpdGggemVybyB0byB0ZXJt
aW5hdGUgdGhlIGFkZHJlc3M7IGlmIHRoZSBzdHJpbmcKQEAgLTcyOCw3ICs3MzUsNiBAQAogaW50
IHNlcCA9IDA7CiB1c2NoYXIgKnM7CiBpcF9hZGRyZXNzX2l0ZW0gKiB5aWVsZCA9IE5VTEwsICog
bGFzdCA9IE5VTEwsICogbmV4dDsKLUJPT0wgdGFpbnQgPSBpc190YWludGVkKGxpc3QpOwogCiB3
aGlsZSAoKHMgPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNlcCwgTlVMTCwgMCkpKQogICB7
CkBAIC03NDcsNyArNzUzLDcgQEAKICAgYWRkcmVzcyBhYm92ZS4gVGhlIGZpZWxkIGluIHRoZSBp
cF9hZGRyZXNzX2l0ZW0gaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYW4KICAgSVB2NiBhZGRyZXNz
LiAqLwogCi0gIG5leHQgPSBzdG9yZV9nZXQoc2l6ZW9mKGlwX2FkZHJlc3NfaXRlbSksIHRhaW50
KTsKKyAgbmV4dCA9IHN0b3JlX2dldChzaXplb2YoaXBfYWRkcmVzc19pdGVtKSwgbGlzdCk7CiAg
IG5leHQtPm5leHQgPSBOVUxMOwogICBVc3RyY3B5KG5leHQtPmFkZHJlc3MsIHMpOwogICBuZXh0
LT5wb3J0ID0gcG9ydDsKQEAgLTgxNSw3ICs4MjEsNyBAQAogewogaXBfYWRkcmVzc19pdGVtICpy
dW5uaW5nX2ludGVyZmFjZXMgPSBOVUxMOwogCi1pZiAobG9jYWxfaW50ZXJmYWNlX2RhdGEgPT0g
TlVMTCkKK2lmICghbG9jYWxfaW50ZXJmYWNlX2RhdGEpCiAgIHsKICAgdm9pZCAqcmVzZXRfaXRl
bSA9IHN0b3JlX21hcmsoKTsKICAgaXBfYWRkcmVzc19pdGVtICpkbGlzdCA9IGhvc3RfYnVpbGRf
aWZhY2VsaXN0KENVUyBsb2NhbF9pbnRlcmZhY2VzLApAQCAtOTExLDE0ICs5MTcsMTQgQEAKICAg
ICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzayA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYXJnOwog
ICAgIHlpZWxkID0gVVMgaW5ldF9udG9wKGZhbWlseSwgJihzay0+c2luNl9hZGRyKSwgQ1MgYWRk
cl9idWZmZXIsCiAgICAgICBzaXplb2YoYWRkcl9idWZmZXIpKTsKLSAgICBpZiAocG9ydHB0ciAh
PSBOVUxMKSAqcG9ydHB0ciA9IG50b2hzKHNrLT5zaW42X3BvcnQpOworICAgIGlmIChwb3J0cHRy
KSAqcG9ydHB0ciA9IG50b2hzKHNrLT5zaW42X3BvcnQpOwogICAgIH0KICAgZWxzZQogICAgIHsK
ICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNrID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFyZzsK
ICAgICB5aWVsZCA9IFVTIGluZXRfbnRvcChmYW1pbHksICYoc2stPnNpbl9hZGRyKSwgQ1MgYWRk
cl9idWZmZXIsCiAgICAgICBzaXplb2YoYWRkcl9idWZmZXIpKTsKLSAgICBpZiAocG9ydHB0ciAh
PSBOVUxMKSAqcG9ydHB0ciA9IG50b2hzKHNrLT5zaW5fcG9ydCk7CisgICAgaWYgKHBvcnRwdHIp
ICpwb3J0cHRyID0gbnRvaHMoc2stPnNpbl9wb3J0KTsKICAgICB9CiAgIH0KIGVsc2UKQEAgLTkz
Nyw3ICs5NDMsNyBAQAogaWYgKHR5cGUgPCAwKQogICB7CiAgIHlpZWxkID0gVVMgaW5ldF9udG9h
KCgoc3RydWN0IHNvY2thZGRyX2luICopYXJnKS0+c2luX2FkZHIpOwotICBpZiAocG9ydHB0ciAh
PSBOVUxMKSAqcG9ydHB0ciA9IG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopYXJnKS0+c2lu
X3BvcnQpOworICBpZiAocG9ydHB0cikgKnBvcnRwdHIgPSBudG9ocygoKHN0cnVjdCBzb2NrYWRk
cl9pbiAqKWFyZyktPnNpbl9wb3J0KTsKICAgfQogZWxzZQogICB5aWVsZCA9IFVTIGluZXRfbnRv
YSgqKChzdHJ1Y3QgaW5fYWRkciAqKWFyZykpOwpAQCAtOTQ1LDcgKzk1MSw3IEBACiAKIC8qIElm
IHRoZXJlIGlzIG5vIGJ1ZmZlciwgcHV0IHRoZSBzdHJpbmcgaW50byBzb21lIG5ldyBzdG9yZS4g
Ki8KIAotaWYgKCFidWZmZXIpIGJ1ZmZlciA9IHN0b3JlX2dldCg0NiwgRkFMU0UpOworaWYgKCFi
dWZmZXIpIGJ1ZmZlciA9IHN0b3JlX2dldCg0NiwgR0VUX1VOVEFJTlRFRCk7CiAKIC8qIENhbGxl
cnMgb2YgdGhpcyBmdW5jdGlvbiB3aXRoIGEgbm9uLU5VTEwgYnVmZmVyIG11c3QgZW5zdXJlIHRo
YXQgaXQgaXMKIGxhcmdlIGVub3VnaCB0byBob2xkIGFuIElQdjYgYWRkcmVzcywgbmFtZWx5LCBh
dCBsZWFzdCA0NiBieXRlcy4gVGhhdCdzIHdoYXQKQEAgLTExOTcsOSArMTIwMyw5IEBACiAgIGMr
KzsKICAgfQogCi1jWy0xXSA9ICdcMCc7CS8qIGRyb3AgdHJhaWxpbmcgY29sb24gKi8KKyotLWMg
PSAnXDAnOwkvKiBkcm9wIHRyYWlsaW5nIGNvbG9uICovCiAKLS8qIGRlYnVnX3ByaW50ZigiJXM6
IEQgayAlZCA8JXM+IDwlcz5cbiIsIF9fRlVOQ1RJT05fXywgaywgZCwgZCArIDIqKGsrMSkpOyAq
LworLyogZGVidWdfcHJpbnRmKCIlczogRCBrICVkIDwlcz4gPCVzPlxuIiwgX19GVU5DVElPTl9f
LCBrLCBidWZmZXIsIGJ1ZmZlciArIDIqKGsrMSkpOyAqLwogaWYgKGsgPj0gMCkKICAgewkJCS8q
IGNvbGxhcHNlICovCiAgIGMgPSBkICsgMiooaysxKTsKQEAgLTEyMzIsMTQgKzEyMzgsMTEgQEAK
IGhvc3RfaXNfdGxzX29uX2Nvbm5lY3RfcG9ydChpbnQgcG9ydCkKIHsKIGludCBzZXAgPSAwOwot
dXNjaGFyIGJ1ZmZlclszMl07Ci1jb25zdCB1c2NoYXIgKmxpc3QgPSB0bHNfaW4ub25fY29ubmVj
dF9wb3J0czsKLXVzY2hhciAqczsKLXVzY2hhciAqZW5kOworY29uc3QgdXNjaGFyICogbGlzdCA9
IHRsc19pbi5vbl9jb25uZWN0X3BvcnRzOwogCiBpZiAodGxzX2luLm9uX2Nvbm5lY3QpIHJldHVy
biBUUlVFOwogCi13aGlsZSAoKHMgPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNlcCwgYnVm
ZmVyLCBzaXplb2YoYnVmZmVyKSkpKQorZm9yICh1c2NoYXIgKiBzLCAqIGVuZDsgcyA9IHN0cmlu
Z19uZXh0aW5saXN0KCZsaXN0LCAmc2VwLCBOVUxMLCAwKTsgKQogICBpZiAoVXN0cnRvbChzLCAm
ZW5kLCAxMCkgPT0gcG9ydCkKICAgICByZXR1cm4gVFJVRTsKIApAQCAtMTU4MSwxMiArMTU4NCwx
MiBAQAogCiAgIGlmIChob3N0cy0+aF9hbGlhc2VzKQogICAgIHsKLSAgICBpbnQgY291bnQgPSAx
OworICAgIGludCBjb3VudCA9IDE7ICAvKiBuZWVkIDEgbW9yZSBmb3IgdGVybWluYXRpbmcgTlVM
TCAqLwogICAgIHVzY2hhciAqKnB0cjsKIAogICAgIGZvciAodXNjaGFyICoqIGFsaWFzZXMgPSBV
U1MgaG9zdHMtPmhfYWxpYXNlczsgKmFsaWFzZXM7IGFsaWFzZXMrKykgY291bnQrKzsKICAgICBz
dG9yZV9wb29sID0gUE9PTF9QRVJNOwotICAgIHB0ciA9IHNlbmRlcl9ob3N0X2FsaWFzZXMgPSBz
dG9yZV9nZXQoY291bnQgKiBzaXplb2YodXNjaGFyICopLCBGQUxTRSk7CisgICAgcHRyID0gc2Vu
ZGVyX2hvc3RfYWxpYXNlcyA9IHN0b3JlX2dldChjb3VudCAqIHNpemVvZih1c2NoYXIgKiksIEdF
VF9VTlRBSU5URUQpOwogICAgIHN0b3JlX3Bvb2wgPSBQT09MX1RBSU5UX1BFUk07CiAKICAgICBm
b3IgKHVzY2hhciAqKiBhbGlhc2VzID0gVVNTIGhvc3RzLT5oX2FsaWFzZXM7ICphbGlhc2VzOyBh
bGlhc2VzKyspCkBAIC0xNjkwLDcgKzE2OTMsNyBAQAogICAgICAgewogICAgICAgdXNjaGFyICoq
YXB0ciA9IE5VTEw7CiAgICAgICBpbnQgc3NpemUgPSAyNjQ7Ci0gICAgICBpbnQgY291bnQgPSAw
OworICAgICAgaW50IGNvdW50ID0gMTsgIC8qIG5lZWQgMSBtb3JlIGZvciB0ZXJtaW5hdGluZyBO
VUxMICovCiAgICAgICBpbnQgb2xkX3Bvb2wgPSBzdG9yZV9wb29sOwogCiAgICAgICBzZW5kZXJf
aG9zdF9kbnNzZWMgPSBkbnNfaXNfc2VjdXJlKGRuc2EpOwpAQCAtMTcwOCw3ICsxNzExLDcgQEAK
ICAgICAgIC8qIEdldCBzdG9yZSBmb3IgdGhlIGxpc3Qgb2YgYWxpYXNlcy4gRm9yIGNvbXBhdGli
aWxpdHkgd2l0aAogICAgICAgZ2V0aG9zdGJ5YWRkciwgd2UgbWFrZSBhbiBlbXB0eSBsaXN0IGlm
IHRoZXJlIGFyZSBub25lLiAqLwogCi0gICAgICBhcHRyID0gc2VuZGVyX2hvc3RfYWxpYXNlcyA9
IHN0b3JlX2dldChjb3VudCAqIHNpemVvZih1c2NoYXIgKiksIEZBTFNFKTsKKyAgICAgIGFwdHIg
PSBzZW5kZXJfaG9zdF9hbGlhc2VzID0gc3RvcmVfZ2V0KGNvdW50ICogc2l6ZW9mKHVzY2hhciAq
KSwgR0VUX1VOVEFJTlRFRCk7CiAKICAgICAgIC8qIFJlLXNjYW4gYW5kIGV4dHJhY3QgdGhlIG5h
bWVzICovCiAKQEAgLTE3MTYsNyArMTcxOSw3IEBACiAgICAgICAgICAgIHJyOwogICAgICAgICAg
ICByciA9IGRuc19uZXh0X3JyKGRuc2EsICZkbnNzLCBSRVNFVF9ORVhUKSkgaWYgKHJyLT50eXBl
ID09IFRfUFRSKQogICAgICAgICB7Ci0gICAgICAgIHVzY2hhciAqIHMgPSBzdG9yZV9nZXQoc3Np
emUsIFRSVUUpOwkvKiBuYW1lcyBhcmUgdGFpbnRlZCAqLworICAgICAgICB1c2NoYXIgKiBzID0g
c3RvcmVfZ2V0KHNzaXplLCBHRVRfVEFJTlRFRCk7CS8qIG5hbWVzIGFyZSB0YWludGVkICovCiAK
ICAgICAgICAgLyogSWYgYW4gb3ZlcmxvbmcgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLCB0aGUgZGF0
YSB3aWxsIGhhdmUgYmVlbgogICAgICAgICB0cnVuY2F0ZWQgYW5kIGRuX2V4cGFuZCBtYXkgZmFp
bC4gKi8KQEAgLTE3OTMsNyArMTc5Niw3IEBACiAgIHsKICAgdXNjaGFyICoqYWxpYXNlcyA9IHNl
bmRlcl9ob3N0X2FsaWFzZXM7CiAgIGRlYnVnX3ByaW50ZigiSVAgYWRkcmVzcyBsb29rdXAgeWll
bGRlZCBcIiVzXCJcbiIsIHNlbmRlcl9ob3N0X25hbWUpOwotICB3aGlsZSAoKmFsaWFzZXMgIT0g
TlVMTCkgZGVidWdfcHJpbnRmKCIgIGFsaWFzIFwiJXNcIlxuIiwgKmFsaWFzZXMrKyk7CisgIHdo
aWxlICgqYWxpYXNlcykgZGVidWdfcHJpbnRmKCIgIGFsaWFzIFwiJXNcIlxuIiwgKmFsaWFzZXMr
Kyk7CiAgIH0KIAogLyogV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBhIGZvcndhcmQgbG9va3VwIG9u
IHRoZSBuYW1lIHdlIGZvdW5kIGRvZXMgaW5kZWVkCkBAIC0yMDQxLDQ0ICsyMDQ0LDQyIEBACiAK
ICAgaWYgKCFob3N0ZGF0YSkKICAgICB7Ci0gICAgdXNjaGFyICplcnJvcjsKKyAgICB1c2NoYXIg
KiBlcnJvcjsKICAgICBzd2l0Y2ggKGVycm9yX251bSkKICAgICAgIHsKLSAgICAgIGNhc2UgSE9T
VF9OT1RfRk9VTkQ6IGVycm9yID0gVVMiSE9TVF9OT1RfRk9VTkQiOyBicmVhazsKLSAgICAgIGNh
c2UgVFJZX0FHQUlOOiAgICAgIGVycm9yID0gVVMiVFJZX0FHQUlOIjsgYnJlYWs7Ci0gICAgICBj
YXNlIE5PX1JFQ09WRVJZOiAgICBlcnJvciA9IFVTIk5PX1JFQ09WRVJZIjsgYnJlYWs7Ci0gICAg
ICBjYXNlIE5PX0RBVEE6ICAgICAgICBlcnJvciA9IFVTIk5PX0RBVEEiOyBicmVhazsKKyAgICAg
IGNhc2UgSE9TVF9OT1RfRk9VTkQ6IGVycm9yID0gVVMiSE9TVF9OT1RfRk9VTkQiOwlicmVhazsK
KyAgICAgIGNhc2UgVFJZX0FHQUlOOiAgICAgIGVycm9yID0gVVMiVFJZX0FHQUlOIjsgICB0ZW1w
X2Vycm9yID0gVFJVRTsgYnJlYWs7CisgICAgICBjYXNlIE5PX1JFQ09WRVJZOiAgICBlcnJvciA9
IFVTIk5PX1JFQ09WRVJZIjsgdGVtcF9lcnJvciA9IFRSVUU7IGJyZWFrOworICAgICAgY2FzZSBO
T19EQVRBOiAgICAgICAgZXJyb3IgPSBVUyJOT19EQVRBIjsJCWJyZWFrOwogICAgICNpZiBOT19E
QVRBICE9IE5PX0FERFJFU1MKLSAgICAgIGNhc2UgTk9fQUREUkVTUzogICAgIGVycm9yID0gVVMi
Tk9fQUREUkVTUyI7IGJyZWFrOworICAgICAgY2FzZSBOT19BRERSRVNTOiAgICAgZXJyb3IgPSBV
UyJOT19BRERSRVNTIjsJYnJlYWs7CiAgICAgI2VuZGlmCiAgICAgICBkZWZhdWx0OiBlcnJvciA9
IFVTIj8iOyBicmVhazsKICAgICAgIH0KIAotICAgIERFQlVHKERfaG9zdF9sb29rdXApIGRlYnVn
X3ByaW50ZigiJXMgcmV0dXJuZWQgJWQgKCVzKVxuIiwKKyAgICBERUJVRyhEX2hvc3RfbG9va3Vw
KSBkZWJ1Z19wcmludGYoIiVzKGFmPSVzKSByZXR1cm5lZCAlZCAoJXMpXG4iLAogICAgICAgZi5y
dW5uaW5nX2luX3Rlc3RfaGFybmVzcyA/ICJob3N0X2Zha2VfZ2V0aG9zdGJ5bmFtZSIgOgotICAg
ICAgI2lmIEhBVkVfSVBWNgotICAgICAgICAjaWYgSEFWRV9HRVRJUE5PREVCWU5BTUUKLSAgICAg
ICAgYWYgPT0gQUZfSU5FVDYgPyAiZ2V0aXBub2RlYnluYW1lKGFmPWluZXQ2KSIgOiAiZ2V0aXBu
b2RlYnluYW1lKGFmPWluZXQpIiwKLSAgICAgICAgI2Vsc2UKLSAgICAgICAgYWYgPT0gQUZfSU5F
VDYgPyAiZ2V0aG9zdGJ5bmFtZTIoYWY9aW5ldDYpIiA6ICJnZXRob3N0YnluYW1lMihhZj1pbmV0
KSIsCi0gICAgICAgICNlbmRpZgotICAgICAgI2Vsc2UKLSAgICAgICJnZXRob3N0YnluYW1lIiwK
LSAgICAgICNlbmRpZgotICAgICAgZXJyb3JfbnVtLCBlcnJvcik7CisjaWYgSEFWRV9JUFY2Cisj
IGlmIEhBVkVfR0VUSVBOT0RFQllOQU1FCisgICAgICAgICJnZXRpcG5vZGVieW5hbWUiLAorIyBl
bHNlCisgICAgICAgICJnZXRob3N0YnluYW1lMiIsCisjIGVuZGlmCisjZWxzZQorCSJnZXRob3N0
YnluYW1lIiwKKyNlbmRpZgorICAgICAgYWYgPT0gQUZfSU5FVCA/ICJpbmV0IiA6ICJpbmV0NiIs
IGVycm9yX251bSwgZXJyb3IpOwogCi0gICAgaWYgKGVycm9yX251bSA9PSBUUllfQUdBSU4gfHwg
ZXJyb3JfbnVtID09IE5PX1JFQ09WRVJZKSB0ZW1wX2Vycm9yID0gVFJVRTsKICAgICBjb250aW51
ZTsKICAgICB9Ci0gIGlmICgoaG9zdGRhdGEtPmhfYWRkcl9saXN0KVswXSA9PSBOVUxMKSBjb250
aW51ZTsKKyAgaWYgKCEoaG9zdGRhdGEtPmhfYWRkcl9saXN0KVswXSkgY29udGludWU7CiAKICAg
LyogUmVwbGFjZSB0aGUgbmFtZSB3aXRoIHRoZSBmdWxseSBxdWFsaWZpZWQgb25lIGlmIG5lY2Vz
c2FyeSwgYW5kIGZpbGwgaW4KICAgdGhlIGZ1bGx5X3F1YWxpZmllZF9uYW1lIHBvaW50ZXIuICov
CiAKLSAgaWYgKGhvc3RkYXRhLT5oX25hbWVbMF0gIT0gMCAmJgotICAgICAgVXN0cmNtcChob3N0
LT5uYW1lLCBob3N0ZGF0YS0+aF9uYW1lKSAhPSAwKQorICBpZiAoaG9zdGRhdGEtPmhfbmFtZVsw
XSAmJiBVc3RyY21wKGhvc3QtPm5hbWUsIGhvc3RkYXRhLT5oX25hbWUpICE9IDApCiAgICAgaG9z
dC0+bmFtZSA9IHN0cmluZ19jb3B5X2Ruc2RvbWFpbihVUyBob3N0ZGF0YS0+aF9uYW1lKTsKLSAg
aWYgKGZ1bGx5X3F1YWxpZmllZF9uYW1lICE9IE5VTEwpICpmdWxseV9xdWFsaWZpZWRfbmFtZSA9
IGhvc3QtPm5hbWU7CisgIGlmIChmdWxseV9xdWFsaWZpZWRfbmFtZSkgKmZ1bGx5X3F1YWxpZmll
ZF9uYW1lID0gaG9zdC0+bmFtZTsKIAogICAvKiBHZXQgdGhlIGxpc3Qgb2YgYWRkcmVzc2VzLiBJ
UHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBjYW4gYmUgZGlzdGluZ3Vpc2hlZAogICBieSB0aGVpciBk
aWZmZXJlbnQgbGVuZ3Rocy4gU2NhbiB0aGUgbGlzdCwgaWdub3JpbmcgYW55IHRoYXQgYXJlIHRv
IGJlCkBAIC0yMDkyLDkgKzIwOTMsOSBAQAogICAgICAgaG9zdF9udG9hKGlwdjRfYWRkcj8gQUZf
SU5FVDpBRl9JTkVUNiwgKmFkZHJsaXN0LCBOVUxMLCBOVUxMKTsKIAogICAgICNpZm5kZWYgU1RB
TkRfQUxPTkUKLSAgICBpZiAoaWdub3JlX3RhcmdldF9ob3N0cyAhPSBOVUxMICYmCi0gICAgICAg
IHZlcmlmeV9jaGVja190aGlzX2hvc3QoJmlnbm9yZV90YXJnZXRfaG9zdHMsIE5VTEwsIGhvc3Qt
Pm5hbWUsCi0gICAgICAgICAgdGV4dF9hZGRyZXNzLCBOVUxMKSA9PSBPSykKKyAgICBpZiAoICBp
Z25vcmVfdGFyZ2V0X2hvc3RzCisgICAgICAgJiYgdmVyaWZ5X2NoZWNrX3RoaXNfaG9zdCgmaWdu
b3JlX3RhcmdldF9ob3N0cywgTlVMTCwgaG9zdC0+bmFtZSwKKwkgICAgdGV4dF9hZGRyZXNzLCBO
VUxMKSA9PSBPSykKICAgICAgIHsKICAgICAgIERFQlVHKERfaG9zdF9sb29rdXApCiAgICAgICAg
IGRlYnVnX3ByaW50ZigiaWdub3JlZCBob3N0ICVzIFslc11cbiIsIGhvc3QtPm5hbWUsIHRleHRf
YWRkcmVzcyk7CkBAIC0yMTAyLDEwICsyMTAzLDEwIEBACiAgICAgICB9CiAgICAgI2VuZGlmCiAK
LSAgICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBhZGRyZXNzLCBsYXN0ID09IE5VTEwgYW5kIHdl
IHB1dCB0aGUgZGF0YSBpbiB0aGUKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBhZGRyZXNz
LCBsYXN0IGlzIE5VTEwgYW5kIHdlIHB1dCB0aGUgZGF0YSBpbiB0aGUKICAgICBvcmlnaW5hbCBi
bG9jay4gKi8KIAotICAgIGlmIChsYXN0ID09IE5VTEwpCisgICAgaWYgKCFsYXN0KQogICAgICAg
ewogICAgICAgaG9zdC0+YWRkcmVzcyA9IHRleHRfYWRkcmVzczsKICAgICAgIGhvc3QtPnBvcnQg
PSBQT1JUX05PTkU7CkBAIC0yMTIwLDcgKzIxMjEsNyBAQAogCiAgICAgZWxzZQogICAgICAgewot
ICAgICAgaG9zdF9pdGVtICpuZXh0ID0gc3RvcmVfZ2V0KHNpemVvZihob3N0X2l0ZW0pLCBGQUxT
RSk7CisgICAgICBob3N0X2l0ZW0gKm5leHQgPSBzdG9yZV9nZXQoc2l6ZW9mKGhvc3RfaXRlbSks
IEdFVF9VTlRBSU5URUQpOwogICAgICAgbmV4dC0+bmFtZSA9IGhvc3QtPm5hbWU7CiAjaWZuZGVm
IERJU0FCTEVfVExTCiAgICAgICBuZXh0LT5jZXJ0bmFtZSA9IGhvc3QtPmNlcnRuYW1lOwpAQCAt
MjE0MywxMiArMjE0NCwxMiBAQAogTlVMTC4gSWYgdGVtcF9lcnJvciBpcyBzZXQsIGF0IGxlYXN0
IG9uZSBvZiB0aGUgbG9va3VwcyBnYXZlIGEgdGVtcG9yYXJ5IGVycm9yLAogc28gd2UgcGFzcyB0
aGF0IGJhY2suICovCiAKLWlmIChob3N0LT5hZGRyZXNzID09IE5VTEwpCitpZiAoIWhvc3QtPmFk
ZHJlc3MpCiAgIHsKICAgdXNjaGFyICptc2cgPQogICAgICNpZm5kZWYgU1RBTkRfQUxPTkUKLSAg
ICAobWVzc2FnZV9pZFswXSA9PSAwICYmIHNtdHBfaW4gIT0gTlVMTCk/Ci0gICAgICBzdHJpbmdf
c3ByaW50Zigibm8gSVAgYWRkcmVzcyBmb3VuZCBmb3IgaG9zdCAlcyAoZHVyaW5nICVzKSIsIGhv
c3QtPm5hbWUsCisgICAgIW1lc3NhZ2VfaWRbMF0gJiYgc210cF9pbgorICAgICAgPyBzdHJpbmdf
c3ByaW50Zigibm8gSVAgYWRkcmVzcyBmb3VuZCBmb3IgaG9zdCAlcyAoZHVyaW5nICVzKSIsIGhv
c3QtPm5hbWUsCiAgICAgICAgICAgc210cF9nZXRfY29ubmVjdGlvbl9pbmZvKCkpIDoKICAgICAj
ZW5kaWYKICAgICBzdHJpbmdfc3ByaW50Zigibm8gSVAgYWRkcmVzcyBmb3VuZCBmb3IgaG9zdCAl
cyIsIGhvc3QtPm5hbWUpOwpAQCAtMjE5Niw3ICsyMTk3LDcgQEAKIAogUkVUVVJOX0FHQUlOOgog
ICB7Ci0gICNpZm5kZWYgU1RBTkRfQUxPTkUKKyNpZm5kZWYgU1RBTkRfQUxPTkUKICAgaW50IHJj
OwogICBjb25zdCB1c2NoYXIgKnNhdmUgPSBkZWxpdmVyX2RvbWFpbjsKICAgZGVsaXZlcl9kb21h
aW4gPSBob3N0LT5uYW1lOyAgLyogc2V0ICRkb21haW4gKi8KQEAgLTIyMDksNyArMjIxMCw3IEBA
CiAgICAgICAicmV0dXJuaW5nIEhPU1RfRklORF9GQUlMRURcbiIsIGhvc3QtPm5hbWUpOwogICAg
IHJldHVybiBIT1NUX0ZJTkRfRkFJTEVEOwogICAgIH0KLSAgI2VuZGlmCisjZW5kaWYKICAgcmV0
dXJuIEhPU1RfRklORF9BR0FJTjsKICAgfQogfQpAQCAtMjI2Nyw2ICsyMjY4LDcgQEAKIEJPT0wg
djZfZmluZF9hZ2FpbiA9IEZBTFNFOwogQk9PTCBkbnNzZWNfZmFpbCA9IEZBTFNFOwogaW50IGk7
CitkbnNfYW5zd2VyICogZG5zYTsKIAogI2lmbmRlZiBESVNBQkxFX1RMUwogLyogQ29weSB0aGUg
aG9zdCBuYW1lIGF0IHRoaXMgcG9pbnQgdG8gdGhlIHZhbHVlIHdoaWNoIGlzIHVzZWQgZm9yCkBA
IC0yMjkyLDYgKzIyOTQsOCBAQAogICByZXR1cm4gSE9TVF9GT1VORDsKICAgfQogCitkbnNhID0g
c3RvcmVfZ2V0X2Ruc19hbnN3ZXIoKTsKKwogLyogT24gYW4gSVB2NiBzeXN0ZW0sIHVubGVzcyBJ
UHY2IGlzIGRpc2FibGVkLCBnbyByb3VuZCB0aGUgbG9vcCB1cCB0byB0d2ljZSwKIGxvb2tpbmcg
Zm9yIEFBQUEgcmVjb3JkcyB0aGUgZmlyc3QgdGltZS4gSG93ZXZlciwgdW5sZXNzIGRvaW5nIHN0
YW5kYWxvbmUKIHRlc3RpbmcsIHdlIGZvcmNlIGFuIElQdjQgbG9va3VwIGlmIHRoZSBkb21haW4g
bWF0Y2hlcyBkbnNfaXB2NF9sb29rdXAgZ2xvYmFsLgpAQCAtMjMyMyw3ICsyMzI3LDYgQEAKICAg
aW50IHR5cGUgPSB0eXBlc1tpXTsKICAgaW50IHJhbmRvZmZzZXQgPSBpID09ICh3aGljaHJycyAm
IEhPU1RfRklORF9JUFY0X0ZJUlNUID8gMSA6IDApCiAgICAgPyA1MDAgOiAwOyAgLyogRW5zdXJl
cyB2Ni80IHNvcnQgb3JkZXIgKi8KLSAgZG5zX2Fuc3dlciAqIGRuc2EgPSBzdG9yZV9nZXRfZG5z
X2Fuc3dlcigpOwogICBkbnNfc2NhbiBkbnNzOwogCiAgIGludCByYyA9IGRuc19sb29rdXBfdGlt
ZXJ3cmFwKGRuc2EsIGhvc3QtPm5hbWUsIHR5cGUsIGZ1bGx5X3F1YWxpZmllZF9uYW1lKTsKQEAg
LTIzNDYsMTAgKzIzNDksMTMgQEAKICAgICB7CiAgICAgaWYgKGkgPT0gMCkgIC8qIEp1c3QgdHJp
ZWQgZm9yIGFuIEEgcmVjb3JkLCBpLmUuIGVuZCBvZiBsb29wICovCiAgICAgICB7Ci0gICAgICBp
ZiAoaG9zdC0+YWRkcmVzcyAhPSBOVUxMKSByZXR1cm4gSE9TVF9GT1VORDsgIC8qIEFBQUEgd2Fz
IGZvdW5kICovCi0gICAgICBpZiAocmMgPT0gRE5TX0FHQUlOIHx8IHJjID09IEROU19GQUlMIHx8
IHY2X2ZpbmRfYWdhaW4pCi0gICAgICAgIHJldHVybiBIT1NUX0ZJTkRfQUdBSU47Ci0gICAgICBy
ZXR1cm4gSE9TVF9GSU5EX0ZBSUxFRDsgICAgLyogRE5TX05PTUFUQ0ggb3IgRE5TX05PREFUQSAq
LworICAgICAgaWYgKGhvc3QtPmFkZHJlc3MgIT0gTlVMTCkKKyAgICAgICAgaSA9IEhPU1RfRk9V
TkQ7ICAvKiBBQUFBIHdhcyBmb3VuZCAqLworICAgICAgZWxzZSBpZiAocmMgPT0gRE5TX0FHQUlO
IHx8IHJjID09IEROU19GQUlMIHx8IHY2X2ZpbmRfYWdhaW4pCisgICAgICAgIGkgPSBIT1NUX0ZJ
TkRfQUdBSU47CisgICAgICBlbHNlCisJaSA9IEhPU1RfRklORF9GQUlMRUQ7ICAgIC8qIEROU19O
T01BVENIIG9yIEROU19OT0RBVEEgKi8KKyAgICAgIGdvdG8gb3V0OwogICAgICAgfQogCiAgICAg
LyogVHJpZWQgZm9yIGFuIEFBQUEgcmVjb3JkOiByZW1lbWJlciBpZiB0aGlzIHdhcyBhIHRlbXBv
cmFyeQpAQCAtMjQ1Miw3ICsyNDU4LDcgQEAKIAkvKiBOb3QgYSBkdXBsaWNhdGUgKi8KIAogCW5l
d19zb3J0X2tleSA9IGhvc3QtPm14ICogMTAwMCArIHJhbmRvbV9udW1iZXIoNTAwKSArIHJhbmRv
ZmZzZXQ7Ci0JbmV4dCA9IHN0b3JlX2dldChzaXplb2YoaG9zdF9pdGVtKSwgRkFMU0UpOworCW5l
eHQgPSBzdG9yZV9nZXQoc2l6ZW9mKGhvc3RfaXRlbSksIEdFVF9VTlRBSU5URUQpOwogCiAJLyog
TmV3IGFkZHJlc3MgZ29lcyBmaXJzdDogaW5zZXJ0IHRoZSBuZXcgYmxvY2sgYWZ0ZXIgdGhlIGZp
cnN0IG9uZQogCShzbyBhcyBub3QgdG8gZGlzdHVyYiB0aGUgb3JpZ2luYWwgcG9pbnRlcikgYnV0
IHB1dCB0aGUgbmV3IGFkZHJlc3MKQEAgLTI0OTQsMTEgKzI1MDAsMTUgQEAKIC8qIENvbnRyb2wg
Z2V0cyBoZXJlIG9ubHkgaWYgdGhlIHNlY29uZCBsb29rdXAgKHRoZSBBIHJlY29yZCkgc3VjY2Vl
ZGVkLgogSG93ZXZlciwgdGhlIGFkZHJlc3MgbWF5IG5vdCBiZSBmaWxsZWQgaW4gaWYgaXQgd2Fz
IGlnbm9yZWQuICovCiAKLXJldHVybiBob3N0LT5hZGRyZXNzCitpID0gaG9zdC0+YWRkcmVzcwog
ICA/IEhPU1RfRk9VTkQKICAgOiBkbnNzZWNfZmFpbAogICA/IEhPU1RfRklORF9TRUNVUklUWQog
ICA6IEhPU1RfSUdOT1JFRDsKKworb3V0OgorICBzdG9yZV9mcmVlX2Ruc19hbnN3ZXIoZG5zYSk7
CisgIHJldHVybiBpOwogfQogCiAKQEAgLTI2MzcsNyArMjY0Nyw3IEBACiAjZW5kaWYKICAgICAg
IHsgeWllbGQgPSBIT1NUX0ZJTkRfQUdBSU47IGdvdG8gb3V0OyB9CiAgICAgREVCVUcoRF9ob3N0
X2xvb2t1cCkgZGVidWdfcHJpbnRmKCJETlNfJXMgdHJlYXRlZCBhcyBETlNfTk9EQVRBICIKLSAg
ICAgICIoZG9tYWluIGluIHNydl9mYWlsX2RvbWFpbnMpXG4iLCAocmMgPT0gRE5TX0ZBSUwpPyAi
RkFJTCI6IkFHQUlOIik7CisgICAgICAiKGRvbWFpbiBpbiBzcnZfZmFpbF9kb21haW5zKVxuIiwg
cmMgPT0gRE5TX0ZBSUwgPyAiRkFJTCI6IkFHQUlOIik7CiAgICAgfQogICB9CiAKQEAgLTI4NTUs
NyArMjg2NSw3IEBACiAgIC8qIE1ha2UgYSBuZXcgaG9zdCBpdGVtIGFuZCBzZWVrIHRoZSBjb3Jy
ZWN0IGluc2VydGlvbiBwbGFjZSAqLwogICAgIHsKICAgICBpbnQgc29ydF9rZXkgPSBwcmVjZWRl
bmNlICogMTAwMCArIHdlaWdodDsKLSAgICBob3N0X2l0ZW0gKm5leHQgPSBzdG9yZV9nZXQoc2l6
ZW9mKGhvc3RfaXRlbSksIEZBTFNFKTsKKyAgICBob3N0X2l0ZW0gKiBuZXh0ID0gc3RvcmVfZ2V0
KHNpemVvZihob3N0X2l0ZW0pLCBHRVRfVU5UQUlOVEVEKTsKICAgICBuZXh0LT5uYW1lID0gc3Ry
aW5nX2NvcHlfZG5zZG9tYWluKGRhdGEpOwogICAgIG5leHQtPmFkZHJlc3MgPSBOVUxMOwogICAg
IG5leHQtPnBvcnQgPSBwb3J0OwpAQCAtMzE2Nyw2ICszMTc3LDcgQEAKIG91dDoKIAogZG5zX2lu
aXQoRkFMU0UsIEZBTFNFLCBGQUxTRSk7CS8qIGNsZWFyIHRoZSBkbnNzZWMgYml0IGZvciBnZXRh
ZGRyYnluYW1lICovCitzdG9yZV9mcmVlX2Ruc19hbnN3ZXIoZG5zYSk7CiByZXR1cm4geWllbGQ7
CiB9CiAKQEAgLTMxOTUsNyArMzIwNiw3IEBACiByYyA9IGRuc19sb29rdXBfdGltZXJ3cmFwKGRu
c2EsIGJ1ZmZlciwgVF9UTFNBLCAmZnVsbG5hbWUpOwogc2VjID0gZG5zX2lzX3NlY3VyZShkbnNh
KTsKIERFQlVHKERfdHJhbnNwb3J0KQotICBkZWJ1Z19wcmludGYoIlRMU0EgbG9va3VwIHJldCAl
ZCAlc0ROU1NFQ1xuIiwgcmMsIHNlYyA/ICIiIDogIm5vdCAiKTsKKyAgZGVidWdfcHJpbnRmKCJU
TFNBIGxvb2t1cCByZXQgJXMgJXNETlNTRUNcbiIsIGRuc19yY19uYW1lc1tyY10sIHNlYyA/ICIi
IDogIm5vdCAiKTsKIAogc3dpdGNoIChyYykKICAgewpAQCAtMzI2NSw2ICszMjc2LDcgQEAKIAog
ZGlzYWJsZV9pcHY2ID0gRkFMU0U7CiBwcmltYXJ5X2hvc3RuYW1lID0gVVMiIjsKK3N0b3JlX2lu
aXQoKTsKIHN0b3JlX3Bvb2wgPSBQT09MX01BSU47CiBkZWJ1Z19zZWxlY3RvciA9IERfaG9zdF9s
b29rdXB8RF9pbnRlcmZhY2U7CiBkZWJ1Z19maWxlID0gc3Rkb3V0OwpkaWZmIC11ciBleGltLm9y
aWcvc3JjL2lwLmMgZXhpbS9zcmMvaXAuYwotLS0gZXhpbS5vcmlnL3NyYy9pcC5jCTIwMjMtMDYt
MDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9pcC5jCTIwMjItMDYtMjMg
MTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0zLDcgKzMsNyBAQAogKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogQ29weXJpZ2h0IChjKSBV
bml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBU
aGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1h
aW50YWluZXJzIDIwMjAgLSAyMDIxICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25k
aXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBGdW5jdGlvbnMgZm9yIGRv
aW5nIHRoaW5ncyB3aXRoIHNvY2tldHMuIFdpdGggdGhlIGFkdmVudCBvZiBJUHY2IHRoaXMgaGFz
CkBAIC0xMjcsOCArMTI3LDYgQEAKICAgcmV0dXJuIHNpemVvZihzaW4tPnY2KTsKICAgfQogZWxz
ZQotI2Vsc2UgICAgIC8qIEhBVkVfSVB2NiAqLwotYWYgPSBhZjsgIC8qIEF2b2lkIGNvbXBpbGVy
IHdhcm5pbmcgKi8KICNlbmRpZiAgICAvKiBIQVZFX0lQVjYgKi8KIAogLyogU2V0dXAgY29kZSB3
aGVuIHVzaW5nIElQdjQgc29ja2V0LiBUaGUgd2lsZGNhcmQgYWRkcmVzcyBpcyAiIi4gKi8KQEAg
LTIwOSw4ICsyMDcsNiBAQAogICBzX2xlbiA9IHNpemVvZihzX2luNik7CiAgIH0KIGVsc2UKLSNl
bHNlICAgICAvKiBIQVZFX0lQVjYgKi8KLWFmID0gYWY7ICAvKiBBdm9pZCBjb21waWxlciB3YXJu
aW5nICovCiAjZW5kaWYgICAgLyogSEFWRV9JUFY2ICovCiAKIC8qIEZvciBhbiBJUHY0IGFkZHJl
c3MsIHVzZSBhbiBJUHY0IHNvY2thZGRyIHN0cnVjdHVyZSwgZXZlbiBvbiBhIHN5c3RlbSB3aXRo
CkBAIC00NjcsOCArNDYzLDggQEAKICAgZm9yIChpbnQgcG9ydCA9IHBvcnRsbzsgcG9ydCA8PSBw
b3J0aGk7IHBvcnQrKykKICAgICBpZiAoaXBfY29ubmVjdChmZCwgYWYsIGgtPmFkZHJlc3MsIHBv
cnQsIHRpbWVvdXQsIGZhc3RvcGVuX2Jsb2IpID09IDApCiAgICAgICB7Ci0gICAgICBpZiAoZmQg
IT0gZmQ2KSBjbG9zZShmZDYpOwotICAgICAgaWYgKGZkICE9IGZkNCkgY2xvc2UoZmQ0KTsKKyAg
ICAgIGlmIChmZDYgPj0gMCAmJiBmZCAhPSBmZDYpIGNsb3NlKGZkNik7CisgICAgICBpZiAoZmQ0
ID49IDAgJiYgZmQgIT0gZmQ0KSBjbG9zZShmZDQpOwogICAgICAgaWYgKGNvbm5ob3N0KQogCXsK
IAloLT5wb3J0ID0gcG9ydDsKQEAgLTU5Myw5ICs1ODksNyBAQAogQk9PTAogZmRfcmVhZHkoaW50
IGZkLCB0aW1lX3QgdGltZWxpbWl0KQogewotZmRfc2V0IHNlbGVjdF9pbnNldDsKLWludCB0aW1l
X2xlZnQgPSB0aW1lbGltaXQgLSB0aW1lKE5VTEwpOwotaW50IHJjOworaW50IHJjLCB0aW1lX2xl
ZnQgPSB0aW1lbGltaXQgLSB0aW1lKE5VTEwpOwogCiBpZiAodGltZV9sZWZ0IDw9IDApCiAgIHsK
QEAgLTYwNiwxMiArNjAwLDggQEAKIAogZG8KICAgewotICBzdHJ1Y3QgdGltZXZhbCB0diA9IHsg
LnR2X3NlYyA9IHRpbWVfbGVmdCwgLnR2X3VzZWMgPSAwIH07Ci0gIEZEX1pFUk8gKCZzZWxlY3Rf
aW5zZXQpOwotICBGRF9TRVQgKGZkLCAmc2VsZWN0X2luc2V0KTsKLQogICAvKkRFQlVHKERfdHJh
bnNwb3J0KSBkZWJ1Z19wcmludGYoIndhaXRpbmcgZm9yIGRhdGEgb24gZmRcbiIpOyovCi0gIHJj
ID0gc2VsZWN0KGZkICsgMSwgKFNFTEVDVF9BUkcyX1RZUEUgKikmc2VsZWN0X2luc2V0LCBOVUxM
LCBOVUxMLCAmdHYpOworICByYyA9IHBvbGxfb25lX2ZkKGZkLCBQT0xMSU4sIHRpbWVfbGVmdCAq
IDEwMDApOwogCiAgIC8qIElmIHNvbWUgaW50ZXJydXB0IGFycml2ZWQsIGp1c3QgcmV0cnkuIFdl
IHByZXN1bWUgdGhpcyB0byBiZSByYXJlLAogICBidXQgaXQgY2FuIGhhcHBlbiAoZS5nLiB0aGUg
U0lHVVNSMSBzaWduYWwgc2VudCBieSBleGl3aGF0IGNhdXNlcwpAQCAtNjQwLDcgKzYzMCw3IEBA
CiAgIC8qIENoZWNraW5nIHRoZSBGRF9JU1NFVCBpcyBub3QgZW5vdWdoLCBpZiB3ZSdyZSBpbnRl
cnJ1cHRlZCwgdGhlCiAgIHNlbGVjdF9pbnNldCBtYXkgc3RpbGwgY29udGFpbiB0aGUgJ2lucHV0
Jy4gKi8KICAgfQotd2hpbGUgKHJjIDwgMCB8fCAhRkRfSVNTRVQoZmQsICZzZWxlY3RfaW5zZXQp
KTsKK3doaWxlIChyYyA8IDApOwogcmV0dXJuIFRSVUU7CiB9CiAKZGlmZiAtdXIgZXhpbS5vcmln
L3NyYy9sb2NhbF9zY2FuLmMgZXhpbS9zcmMvbG9jYWxfc2Nhbi5jCi0tLSBleGltLm9yaWcvc3Jj
L2xvY2FsX3NjYW4uYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhp
bS9zcmMvbG9jYWxfc2Nhbi5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBA
IC0zLDYgKzMsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KIAogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1
IC0gMjAwOSAqLworLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxICov
CiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJp
YnV0aW9uLiAqLwogCiAKQEAgLTU3LDggKzU4LDYgQEAKIGludAogbG9jYWxfc2NhbihpbnQgZmQs
IHVzY2hhciAqKnJldHVybl90ZXh0KQogewotZmQgPSBmZDsgICAgICAgICAgICAgICAgICAgICAg
LyogS2VlcCBwaWNreSBjb21waWxlcnMgaGFwcHkgKi8KLXJldHVybl90ZXh0ID0gcmV0dXJuX3Rl
eHQ7CiByZXR1cm4gTE9DQUxfU0NBTl9BQ0NFUFQ7CiB9CiAKZGlmZiAtdXIgZXhpbS5vcmlnL3Ny
Yy9sb2NhbF9zY2FuLmggZXhpbS9zcmMvbG9jYWxfc2Nhbi5oCi0tLSBleGltLm9yaWcvc3JjL2xv
Y2FsX3NjYW4uaAkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9z
cmMvbG9jYWxfc2Nhbi5oCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0y
LDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50
ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8K
IC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMjAgKi8K
LS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRo
ZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8K
IAogLyogVGhpcyBmaWxlIGlzIHRoZSBoZWFkZXIgdGhhdCBpcyB0aGUgb25seSBFeGltIGhlYWRl
ciB0byBiZSBpbmNsdWRlZCBpbiB0aGUKQEAgLTQwLDggKzQwLDggQEAKIGVhY2ggdGltZSBhIG5l
dyBmZWF0dXJlIGlzIGFkZGVkIChpbiBhIHdheSB0aGF0IGRvZXNuJ3QgYnJlYWsgYmFja3dhcmQK
IGNvbXBhdGliaWxpdHkpLiAqLwogCi0jZGVmaW5lIExPQ0FMX1NDQU5fQUJJX1ZFUlNJT05fTUFK
T1IgNAotI2RlZmluZSBMT0NBTF9TQ0FOX0FCSV9WRVJTSU9OX01JTk9SIDEKKyNkZWZpbmUgTE9D
QUxfU0NBTl9BQklfVkVSU0lPTl9NQUpPUiA2CisjZGVmaW5lIExPQ0FMX1NDQU5fQUJJX1ZFUlNJ
T05fTUlOT1IgMAogI2RlZmluZSBMT0NBTF9TQ0FOX0FCSV9WRVJTSU9OIFwKICAgTE9DQUxfU0NB
Tl9BQklfVkVSU0lPTl9NQUpPUi5MT0NBTF9TQ0FOX0FCSV9WRVJTSU9OX01JTk9SCiAKQEAgLTE2
MCw3ICsxNjAsNyBAQAogZXh0ZXJuIGludCAgICAgYm9keV9saW5lY291bnQ7ICAgICAgICAgLyog
TGluZSBjb3VudCBpbiBib2R5ICovCiBleHRlcm4gaW50ICAgICBib2R5X3plcm9jb3VudDsgICAg
ICAgICAvKiBCaW5hcnkgemVybyBjb3VudCBpbiBib2R5ICovCiBleHRlcm4gdXNjaGFyICpleHBh
bmRfc3RyaW5nX21lc3NhZ2U7ICAvKiBFcnJvciBpbmZvIGZvciBmYWlsaW5nIGV4cGFuc2lvbiAq
LwotZXh0ZXJuIHVzY2hhciAqaGVhZGVyc19jaGFyc2V0OyAgICAgICAgLyogQ2hhcnNldCBmb3Ig
UkZDIDIwNDcgZGVjb2RpbmcgKi8KK2V4dGVybiBjb25zdCB1c2NoYXIgKmhlYWRlcnNfY2hhcnNl
dDsgIC8qIENoYXJzZXQgZm9yIFJGQyAyMDQ3IGRlY29kaW5nICovCiBleHRlcm4gaGVhZGVyX2xp
bmUgKmhlYWRlcl9sYXN0OyAgICAgICAvKiBGaW5hbCBoZWFkZXIgKi8KIGV4dGVybiBoZWFkZXJf
bGluZSAqaGVhZGVyX2xpc3Q7ICAgICAgIC8qIEZpcnN0IGhlYWRlciAqLwogZXh0ZXJuIEJPT0wg
ICAgaG9zdF9jaGVja2luZzsgICAgICAgICAgLyogU2V0IHdoZW4gY2hlY2tpbmcgYSBob3N0ICov
CkBAIC0xOTgsNyArMTk4LDggQEAKIGV4dGVybiBpbnQgICAgIGxzc19tYXRjaF9ob3N0KHVzY2hh
ciAqLCB1c2NoYXIgKiwgdXNjaGFyICopOwogZXh0ZXJuIHZvaWQgICAgcmVjZWl2ZV9hZGRfcmVj
aXBpZW50KHVzY2hhciAqLCBpbnQpOwogZXh0ZXJuIEJPT0wgICAgcmVjZWl2ZV9yZW1vdmVfcmVj
aXBpZW50KHVzY2hhciAqKTsKLWV4dGVybiB1c2NoYXIgKnJmYzIwNDdfZGVjb2RlKHVzY2hhciAq
LCBCT09MLCB1c2NoYXIgKiwgaW50LCBpbnQgKiwgdXNjaGFyICoqKTsKK2V4dGVybiB1c2NoYXIg
KnJmYzIwNDdfZGVjb2RlKHVzY2hhciAqLCBCT09MLCBjb25zdCB1c2NoYXIgKiwgaW50LCBpbnQg
KiwKKwkJCSAgICAgIHVzY2hhciAqKik7CiBleHRlcm4gaW50ICAgICBzbXRwX2ZmbHVzaCh2b2lk
KTsKIGV4dGVybiB2b2lkICAgIHNtdHBfcHJpbnRmKGNvbnN0IGNoYXIgKiwgQk9PTCwgLi4uKSBQ
UklOVEZfRlVOQ1RJT04oMSwzKTsKIGV4dGVybiB2b2lkICAgIHNtdHBfdnByaW50Zihjb25zdCBj
aGFyICosIEJPT0wsIHZhX2xpc3QpOwpAQCAtMjA3LDEyICsyMDgsMTIgQEAKIAlzdHJpbmdfc3By
aW50Zl90cmMoZm10LCBVUyBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBfX1ZBX0FSR1NfXykKIGV4
dGVybiB1c2NoYXIgKnN0cmluZ19zcHJpbnRmX3RyYyhjb25zdCBjaGFyICosIGNvbnN0IHVzY2hh
ciAqLCB1bnNpZ25lZCwgLi4uKSBBTE1PU1RfUFJJTlRGKDEsNCk7CiAKLSNkZWZpbmUgc3RvcmVf
Z2V0KHNpemUsIHRhaW50ZWQpIFwKLQlzdG9yZV9nZXRfMyhzaXplLCB0YWludGVkLCBfX0ZVTkNU
SU9OX18sIF9fTElORV9fKQotZXh0ZXJuIHZvaWQgICAqc3RvcmVfZ2V0XzMoaW50LCBCT09MLCBj
b25zdCBjaGFyICosIGludCkJQUxMT0MgQUxMT0NfU0laRSgxKSBXQVJOX1VOVVNFRF9SRVNVTFQ7
Ci0jZGVmaW5lIHN0b3JlX2dldF9wZXJtKHNpemUsIHRhaW50ZWQpIFwKLQlzdG9yZV9nZXRfcGVy
bV8zKHNpemUsIHRhaW50ZWQsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCi1leHRlcm4gdm9pZCAg
ICpzdG9yZV9nZXRfcGVybV8zKGludCwgQk9PTCwgY29uc3QgY2hhciAqLCBpbnQpCUFMTE9DIEFM
TE9DX1NJWkUoMSkgV0FSTl9VTlVTRURfUkVTVUxUOworI2RlZmluZSBzdG9yZV9nZXQoc2l6ZSwg
cHJvdG9fbWVtKSBcCisJc3RvcmVfZ2V0XzMoKHNpemUpLCAocHJvdG9fbWVtKSwgX19GVU5DVElP
Tl9fLCBfX0xJTkVfXykKK2V4dGVybiB2b2lkICAgKnN0b3JlX2dldF8zKGludCwgY29uc3Qgdm9p
ZCAqLCBjb25zdCBjaGFyICosIGludCkJQUxMT0MgQUxMT0NfU0laRSgxKSBXQVJOX1VOVVNFRF9S
RVNVTFQ7CisjZGVmaW5lIHN0b3JlX2dldF9wZXJtKHNpemUsIHByb3RvX21lbSkgXAorCXN0b3Jl
X2dldF9wZXJtXzMoKHNpemUpLCAocHJvdG9fbWVtKSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykK
K2V4dGVybiB2b2lkICAgKnN0b3JlX2dldF9wZXJtXzMoaW50LCBjb25zdCB2b2lkICosIGNvbnN0
IGNoYXIgKiwgaW50KQlBTExPQyBBTExPQ19TSVpFKDEpIFdBUk5fVU5VU0VEX1JFU1VMVDsKIAog
CiAjaWYgZGVmaW5lZChMT0NBTF9TQ0FOKSB8fCBkZWZpbmVkKERMRlVOQ19JTVBMKQpAQCAtMjI5
LDcgKzIzMCw3IEBACiAKIGV4dGVybiB1c2NoYXIgKiBzdHJpbmdfY29weV9mdW5jdGlvbihjb25z
dCB1c2NoYXIgKik7CiBleHRlcm4gdXNjaGFyICogc3RyaW5nX2NvcHluX2Z1bmN0aW9uKGNvbnN0
IHVzY2hhciAqLCBpbnQgbik7Ci1leHRlcm4gdXNjaGFyICogc3RyaW5nX2NvcHlfdGFpbnRfZnVu
Y3Rpb24oY29uc3QgdXNjaGFyICosIEJPT0wgdGFpbnRlZCk7CitleHRlcm4gdXNjaGFyICogc3Ry
aW5nX2NvcHlfdGFpbnRfZnVuY3Rpb24oY29uc3QgdXNjaGFyICosIGNvbnN0IHZvaWQgKiBwcm90
b19tZW0pOwogZXh0ZXJuIHBpZF90ICAgIGNoaWxkX29wZW5fZXhpbV9mdW5jdGlvbihpbnQgKiwg
Y29uc3QgdXNjaGFyICopOwogZXh0ZXJuIHBpZF90ICAgIGNoaWxkX29wZW5fZXhpbTJfZnVuY3Rp
b24oaW50ICosIHVzY2hhciAqLCB1c2NoYXIgKiwgY29uc3QgdXNjaGFyICopOwogZXh0ZXJuIHBp
ZF90ICAgIGNoaWxkX29wZW5fZnVuY3Rpb24odXNjaGFyICoqLCB1c2NoYXIgKiosIGludCwgaW50
ICosIGludCAqLCBCT09MLCBjb25zdCB1c2NoYXIgKik7CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMv
bG9nLmMgZXhpbS9zcmMvbG9nLmMKLS0tIGV4aW0ub3JpZy9zcmMvbG9nLmMJMjAyMy0wNi0wNCAx
NjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2xvZy5jCTIwMjItMDYtMjMgMTY6
NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIElu
dGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0g
TWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBv
ZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFp
bnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBv
ZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogLyogRnVuY3Rpb25zIGZvciB3cml0aW5nIGxv
ZyBmaWxlcy4gVGhlIGNvZGUgZm9yIG1haW50YWluaW5nIGRhdGVzdGFtcGVkCkBAIC0xMiw3ICsx
Miw2IEBACiAKICNpbmNsdWRlICJleGltLmgiCiAKLSNkZWZpbmUgTE9HX05BTUVfU0laRSAyNTYK
ICNkZWZpbmUgTUFYX1NZU0xPR19MRU4gODcwCiAKICNkZWZpbmUgTE9HX01PREVfRklMRSAgIDEK
QEAgLTMwLDcgKzI5LDYgQEAKIAogc3RhdGljIHVzY2hhciBtYWlubG9nX25hbWVbTE9HX05BTUVf
U0laRV07CiBzdGF0aWMgdXNjaGFyIHJlamVjdGxvZ19uYW1lW0xPR19OQU1FX1NJWkVdOwotc3Rh
dGljIHVzY2hhciBkZWJ1Z2xvZ19uYW1lW0xPR19OQU1FX1NJWkVdOwogCiBzdGF0aWMgdXNjaGFy
ICptYWlubG9nX2RhdGVzdGFtcCA9IE5VTEw7CiBzdGF0aWMgdXNjaGFyICpyZWplY3Rsb2dfZGF0
ZXN0YW1wID0gTlVMTDsKQEAgLTU1LDY1ICs1Myw2OCBAQAogbnVtYmVyIGRlZmluaXRpb25zIGlu
IG1hY3Jvcy5oICovCiAKIHN0YXRpYyBjb25zdCB1c2NoYXIgKiBleGltX2VycnN0cmluZ3NbXSA9
IHsKLSAgVVMiIiwKLSAgVVMidW5rbm93biBlcnJvciIsCi0gIFVTInVzZXIgc2xhc2giLAotICBV
UyJleGlzdCByYWNlIiwKLSAgVVMibm90IHJlZ3VsYXIiLAotICBVUyJub3QgZGlyZWN0b3J5IiwK
LSAgVVMiYmFkIHVnaWQiLAotICBVUyJiYWQgbW9kZSIsCi0gIFVTImlub2RlIGNoYW5nZWQiLAot
ICBVUyJsb2NrIGZhaWxlZCIsCi0gIFVTImJhZCBhZGRyZXNzMiIsCi0gIFVTImZvcmJpZCBwaXBl
IiwKLSAgVVMiZm9yYmlkIGZpbGUiLAotICBVUyJmb3JiaWQgcmVwbHkiLAotICBVUyJtaXNzaW5n
IHBpcGUiLAotICBVUyJtaXNzaW5nIGZpbGUiLAotICBVUyJtaXNzaW5nIHJlcGx5IiwKLSAgVVMi
YmFkIHJlZGlyZWN0IiwKLSAgVVMic210cCBjbG9zZWQiLAotICBVUyJzbXRwIGZvcm1hdCIsCi0g
IFVTInNwb29sIGZvcm1hdCIsCi0gIFVTIm5vdCBhYnNvbHV0ZSIsCi0gIFVTIkV4aW0taW1wb3Nl
ZCBxdW90YSIsCi0gIFVTImhlbGQiLAotICBVUyJEZWxpdmVyeSBmaWx0ZXIgcHJvY2VzcyBmYWls
dXJlIiwKLSAgVVMiRGVsaXZlcnkgYWRkL3JlbW92ZSBoZWFkZXIgZmFpbHVyZSIsCi0gIFVTIkRl
bGl2ZXJ5IHdyaXRlIGluY29tcGxldGUgZXJyb3IiLAotICBVUyJTb21lIGV4cGFuc2lvbiBmYWls
ZWQiLAotICBVUyJGYWlsZWQgdG8gZ2V0IGdpZCIsCi0gIFVTIkZhaWxlZCB0byBnZXQgdWlkIiwK
LSAgVVMiVW5zZXQgb3Igbm9uLWV4aXN0ZW50IHRyYW5zcG9ydCIsCi0gIFVTIk1CWCBsZW5ndGgg
bWlzbWF0Y2giLAotICBVUyJMb29rdXAgZmFpbGVkIHJvdXRpbmcgb3IgaW4gc210cCB0cHQiLAot
ICBVUyJDYW4ndCBtYXRjaCBmb3JtYXQgaW4gYXBwZW5kZmlsZSIsCi0gIFVTIkNyZWF0aW9uIG91
dHNpZGUgaG9tZSBpbiBhcHBlbmRmaWxlIiwKLSAgVVMiQ2FuJ3QgY2hlY2sgYSBsaXN0OyBsb29r
dXAgZGVmZXIiLAotICBVUyJETlMgbG9va3VwIGRlZmVyIiwKLSAgVVMiRmFpbGVkIHRvIHN0YXJ0
IFRMUyBzZXNzaW9uIiwKLSAgVVMiTWFuZGF0b3J5IFRMUyBzZXNzaW9uIG5vdCBzdGFydGVkIiwK
LSAgVVMiRmFpbGVkIHRvIGNob3duIGEgZmlsZSIsCi0gIFVTIkZhaWxlZCB0byBjcmVhdGUgYSBw
aXBlIiwKLSAgVVMiV2hlbiB2ZXJpZnlpbmciLAotICBVUyJXaGVuIHJlcXVpcmVkIGJ5IGNsaWVu
dCIsCi0gIFVTIlVzZWQgaW50ZXJuYWxseSBpbiBzbXRwIHRyYW5zcG9ydCIsCi0gIFVTIlJDUFQg
Z2F2ZSA0eHggZXJyb3IiLAotICBVUyJNQUlMIGdhdmUgNHh4IGVycm9yIiwKLSAgVVMiREFUQSBn
YXZlIDR4eCBlcnJvciIsCi0gIFVTIk5lZ290aWF0aW9uIGZhaWxlZCBmb3IgcHJveHkgY29uZmln
dXJlZCBob3N0IiwKLSAgVVMiQXV0aGVudGljYXRvciAnb3RoZXInIGZhaWx1cmUiLAotICBVUyJ0
YXJnZXQgbm90IHN1cHBvcnRpbmcgU01UUFVURjgiLAotICBVUyIiLAotCi0gIFVTIk5vdCB0aW1l
IGZvciByb3V0aW5nIiwKLSAgVVMiTm90IHRpbWUgZm9yIGxvY2FsIGRlbGl2ZXJ5IiwKLSAgVVMi
Tm90IHRpbWUgZm9yIGFueSByZW1vdGUgaG9zdCIsCi0gIFVTIkxvY2FsLW9ubHkgZGVsaXZlcnki
LAotICBVUyJEb21haW4gaW4gcXVldWVfZG9tYWlucyIsCi0gIFVTIlRyYW5zcG9ydCBjb25jdXJy
ZW5jeSBsaW1pdCIsCi0gIFVTIkV2ZW50IHJlcXVlc3RzIGFsdGVybmF0ZSByZXNwb25zZSIsCisg
IFswXSA9IFVTIiIsCisgIFstIEVSUk5PX1VOS05PV05FUlJPUl0gPQlVUyJ1bmtub3duIGVycm9y
IiwKKyAgWy0gRVJSTk9fVVNFUlNMQVNIXSA9CQlVUyJ1c2VyIHNsYXNoIiwKKyAgWy0gRVJSTk9f
RVhJU1RSQUNFXSA9CQlVUyJleGlzdCByYWNlIiwKKyAgWy0gRVJSTk9fTk9UUkVHVUxBUl0gPQlV
UyJub3QgcmVndWxhciIsCisgIFstIEVSUk5PX05PVERJUkVDVE9SWV0gPQlVUyJub3QgZGlyZWN0
b3J5IiwKKyAgWy0gRVJSTk9fQkFEVUdJRF0gPQkJVVMiYmFkIHVnaWQiLAorICBbLSBFUlJOT19C
QURNT0RFXSA9CQlVUyJiYWQgbW9kZSIsCisgIFstIEVSUk5PX0lOT0RFQ0hBTkdFRF0gPQlVUyJp
bm9kZSBjaGFuZ2VkIiwKKyAgWy0gRVJSTk9fTE9DS0ZBSUxFRF0gPQlVUyJsb2NrIGZhaWxlZCIs
CisgIFstIEVSUk5PX0JBREFERFJFU1MyXSA9CVVTImJhZCBhZGRyZXNzMiIsCisgIFstIEVSUk5P
X0ZPUkJJRFBJUEVdID0JVVMiZm9yYmlkIHBpcGUiLAorICBbLSBFUlJOT19GT1JCSURGSUxFXSA9
CVVTImZvcmJpZCBmaWxlIiwKKyAgWy0gRVJSTk9fRk9SQklEUkVQTFldID0JVVMiZm9yYmlkIHJl
cGx5IiwKKyAgWy0gRVJSTk9fTUlTU0lOR1BJUEVdID0JVVMibWlzc2luZyBwaXBlIiwKKyAgWy0g
RVJSTk9fTUlTU0lOR0ZJTEVdID0JVVMibWlzc2luZyBmaWxlIiwKKyAgWy0gRVJSTk9fTUlTU0lO
R1JFUExZXSA9CVVTIm1pc3NpbmcgcmVwbHkiLAorICBbLSBFUlJOT19CQURSRURJUkVDVF0gPQlV
UyJiYWQgcmVkaXJlY3QiLAorICBbLSBFUlJOT19TTVRQQ0xPU0VEXSA9CVVTInNtdHAgY2xvc2Vk
IiwKKyAgWy0gRVJSTk9fU01UUEZPUk1BVF0gPQlVUyJzbXRwIGZvcm1hdCIsCisgIFstIEVSUk5P
X1NQT09MRk9STUFUXSA9CVVTInNwb29sIGZvcm1hdCIsCisgIFstIEVSUk5PX05PVEFCU09MVVRF
XSA9CVVTIm5vdCBhYnNvbHV0ZSIsCisgIFstIEVSUk5PX0VYSU1RVU9UQV0gPQkJVVMiRXhpbS1p
bXBvc2VkIHF1b3RhIiwKKyAgWy0gRVJSTk9fSEVMRF0gPQkJVVMiaGVsZCIsCisgIFstIEVSUk5P
X0ZJTFRFUl9GQUlMXSA9CVVTIkRlbGl2ZXJ5IGZpbHRlciBwcm9jZXNzIGZhaWx1cmUiLAorICBb
LSBFUlJOT19DSEhFQURFUl9GQUlMXSA9CVVTIkRlbGl2ZXJ5IGFkZC9yZW1vdmUgaGVhZGVyIGZh
aWx1cmUiLAorICBbLSBFUlJOT19XUklURUlOQ09NUExFVEVdID0JVVMiRGVsaXZlcnkgd3JpdGUg
aW5jb21wbGV0ZSBlcnJvciIsCisgIFstIEVSUk5PX0VYUEFOREZBSUxdID0JVVMiU29tZSBleHBh
bnNpb24gZmFpbGVkIiwKKyAgWy0gRVJSTk9fR0lERkFJTF0gPQkJVVMiRmFpbGVkIHRvIGdldCBn
aWQiLAorICBbLSBFUlJOT19VSURGQUlMXSA9CQlVUyJGYWlsZWQgdG8gZ2V0IHVpZCIsCisgIFst
IEVSUk5PX0JBRFRSQU5TUE9SVF0gPQlVUyJVbnNldCBvciBub24tZXhpc3RlbnQgdHJhbnNwb3J0
IiwKKyAgWy0gRVJSTk9fTUJYTEVOR1RIXSA9CQlVUyJNQlggbGVuZ3RoIG1pc21hdGNoIiwKKyAg
Wy0gRVJSTk9fVU5LTk9XTkhPU1RdID0JVVMiTG9va3VwIGZhaWxlZCByb3V0aW5nIG9yIGluIHNt
dHAgdHB0IiwKKyAgWy0gRVJSTk9fRk9STUFUVU5LTk9XTl0gPQlVUyJDYW4ndCBtYXRjaCBmb3Jt
YXQgaW4gYXBwZW5kZmlsZSIsCisgIFstIEVSUk5PX0JBRENSRUFURV0gPQkJVVMiQ3JlYXRpb24g
b3V0c2lkZSBob21lIGluIGFwcGVuZGZpbGUiLAorICBbLSBFUlJOT19MSVNUREVGRVJdID0JCVVT
IkNhbid0IGNoZWNrIGEgbGlzdDsgbG9va3VwIGRlZmVyIiwKKyAgWy0gRVJSTk9fRE5TREVGRVJd
ID0JCVVTIkROUyBsb29rdXAgZGVmZXIiLAorICBbLSBFUlJOT19UTFNGQUlMVVJFXSA9CVVTIkZh
aWxlZCB0byBzdGFydCBUTFMgc2Vzc2lvbiIsCisgIFstIEVSUk5PX1RMU1JFUVVJUkVEXSA9CVVT
Ik1hbmRhdG9yeSBUTFMgc2Vzc2lvbiBub3Qgc3RhcnRlZCIsCisgIFstIEVSUk5PX0NIT1dORkFJ
TF0gPQkJVVMiRmFpbGVkIHRvIGNob3duIGEgZmlsZSIsCisgIFstIEVSUk5PX1BJUEVGQUlMXSA9
CQlVUyJGYWlsZWQgdG8gY3JlYXRlIGEgcGlwZSIsCisgIFstIEVSUk5PX0NBTExPVVRERUZFUl0g
PQlVUyJXaGVuIHZlcmlmeWluZyIsCisgIFstIEVSUk5PX0FVVEhGQUlMXSA9CQlVUyJXaGVuIHJl
cXVpcmVkIGJ5IGNsaWVudCIsCisgIFstIEVSUk5PX0NPTk5FQ1RUSU1FT1VUXSA9CVVTIlVzZWQg
aW50ZXJuYWxseSBpbiBzbXRwIHRyYW5zcG9ydCIsCisgIFstIEVSUk5PX1JDUFQ0WFhdID0JCVVT
IlJDUFQgZ2F2ZSA0eHggZXJyb3IiLAorICBbLSBFUlJOT19NQUlMNFhYXSA9CQlVUyJNQUlMIGdh
dmUgNHh4IGVycm9yIiwKKyAgWy0gRVJSTk9fREFUQTRYWF0gPQkJVVMiREFUQSBnYXZlIDR4eCBl
cnJvciIsCisgIFstIEVSUk5PX1BST1hZRkFJTF0gPQkJVVMiTmVnb3RpYXRpb24gZmFpbGVkIGZv
ciBwcm94eSBjb25maWd1cmVkIGhvc3QiLAorICBbLSBFUlJOT19BVVRIUFJPQl0gPQkJVVMiQXV0
aGVudGljYXRvciAnb3RoZXInIGZhaWx1cmUiLAorICBbLSBFUlJOT19VVEY4X0ZXRF0gPQkJVVMi
dGFyZ2V0IG5vdCBzdXBwb3J0aW5nIFNNVFBVVEY4IiwKKyAgWy0gRVJSTk9fSE9TVF9JU19MT0NB
TF0gPQlVUyJob3N0IGlzIGxvY2FsIiwKKyAgWy0gRVJSTk9fVEFJTlRdID0JCVVTInRhaW50ZWQg
ZmlsZW5hbWUiLAorCisgIFstIEVSUk5PX1JSRVRSWV0gPQkJVVMiTm90IHRpbWUgZm9yIHJvdXRp
bmciLAorCisgIFstIEVSUk5PX0xSRVRSWV0gPQkJVVMiTm90IHRpbWUgZm9yIGxvY2FsIGRlbGl2
ZXJ5IiwKKyAgWy0gRVJSTk9fSFJFVFJZXSA9CQlVUyJOb3QgdGltZSBmb3IgYW55IHJlbW90ZSBo
b3N0IiwKKyAgWy0gRVJSTk9fTE9DQUxfT05MWV0gPQlVUyJMb2NhbC1vbmx5IGRlbGl2ZXJ5IiwK
KyAgWy0gRVJSTk9fUVVFVUVfRE9NQUlOXSA9CVVTIkRvbWFpbiBpbiBxdWV1ZV9kb21haW5zIiwK
KyAgWy0gRVJSTk9fVFJFVFJZXSA9CQlVUyJUcmFuc3BvcnQgY29uY3VycmVuY3kgbGltaXQiLAor
CisgIFstIEVSUk5PX0VWRU5UXSA9CQlVUyJFdmVudCByZXF1ZXN0cyBhbHRlcm5hdGUgcmVzcG9u
c2UiLAogfTsKIAogCkBAIC0yNjUsNyArMjY2LDcgQEAKICovCiAKIHN0YXRpYyBpbnQKLWxvZ19v
cGVuX2FscmVhZHlfZXhpbSh1c2NoYXIgKiBjb25zdCBuYW1lKQorbG9nX29wZW5fYWxyZWFkeV9l
eGltKGNvbnN0IHVzY2hhciAqIGNvbnN0IG5hbWUpCiB7CiBpbnQgZmQgPSAtMTsKIGNvbnN0IGlu
dCBmbGFncyA9IE9fV1JPTkxZIHwgT19BUFBFTkQgfCBPX0NSRUFUIHwgT19OT05CTE9DSzsKQEAg
LTI4Nyw4ICsyODgsMTEgQEAKICAgdXNjaGFyICpsYXN0c2xhc2ggPSBVc3RycmNocihuYW1lLCAn
LycpOwogICAqbGFzdHNsYXNoID0gMDsKICAgY3JlYXRlZCA9IGRpcmVjdG9yeV9tYWtlKE5VTEws
IG5hbWUsIExPR19ESVJFQ1RPUllfTU9ERSwgRkFMU0UpOwotICBERUJVRyhEX2FueSkgZGVidWdf
cHJpbnRmKCIlcyBsb2cgZGlyZWN0b3J5ICVzXG4iLAotICAgIGNyZWF0ZWQgPyAiY3JlYXRlZCIg
OiAiZmFpbGVkIHRvIGNyZWF0ZSIsIG5hbWUpOworICBERUJVRyhEX2FueSkKKyAgICBpZiAoY3Jl
YXRlZCkKKyAgICAgIGRlYnVnX3ByaW50ZigiY3JlYXRlZCBsb2cgZGlyZWN0b3J5ICVzXG4iLCBu
YW1lKTsKKyAgICBlbHNlCisgICAgICBkZWJ1Z19wcmludGYoImZhaWxlZCB0byBjcmVhdGUgbG9n
IGRpcmVjdG9yeSAlczogJXNcbiIsIG5hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAgICpsYXN0c2xh
c2ggPSAnLyc7CiAgIGlmIChjcmVhdGVkKSBmZCA9IFVvcGVuKG5hbWUsIGZsYWdzLCBMT0dfTU9E
RSk7CiAgIH0KQEAgLTI5OCw5ICszMDIsMTIgQEAKIAogCiAKLS8qIEluc3BpcmVkIGJ5IE9wZW5T
U0gncyBtbV9zZW5kX2ZkKCkuIFRoYW5rcyEgKi8KKy8qIEluc3BpcmVkIGJ5IE9wZW5TU0gncyBt
bV9zZW5kX2ZkKCkuIFRoYW5rcyEKK1NlbmQgZmQgb3ZlciBzb2NrZXRwYWlyLgorUmV0dXJuOiB0
cnVlIGlmZiBnb29kLgorKi8KIAotc3RhdGljIGludAorc3RhdGljIEJPT0wKIGxvZ19zZW5kX2Zk
KGNvbnN0IGludCBzb2NrLCBjb25zdCBpbnQgZmQpCiB7CiBzdHJ1Y3QgbXNnaGRyIG1zZzsKQEAg
LTMwOSw4ICszMTYsOCBAQAogICBjaGFyIGJ1ZltDTVNHX1NQQUNFKHNpemVvZihpbnQpKV07CiB9
IGNtc2didWY7CiBzdHJ1Y3QgY21zZ2hkciAqY21zZzsKLXN0cnVjdCBpb3ZlYyB2ZWM7CiBjaGFy
IGNoID0gJ0EnOworc3RydWN0IGlvdmVjIHZlYyA9IHsuaW92X2Jhc2UgPSAmY2gsIC5pb3ZfbGVu
ID0gMX07CiBzc2l6ZV90IG47CiAKIG1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CkBAIC0z
MjQsMTcgKzMzMSwxNiBAQAogY21zZy0+Y21zZ190eXBlID0gU0NNX1JJR0hUUzsKICooaW50ICop
Q01TR19EQVRBKGNtc2cpID0gZmQ7CiAKLXZlYy5pb3ZfYmFzZSA9ICZjaDsKLXZlYy5pb3ZfbGVu
ID0gMTsKIG1zZy5tc2dfaW92ID0gJnZlYzsKIG1zZy5tc2dfaW92bGVuID0gMTsKIAogd2hpbGUg
KChuID0gc2VuZG1zZyhzb2NrLCAmbXNnLCAwKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOwot
aWYgKG4gIT0gMSkgcmV0dXJuIC0xOwotcmV0dXJuIDA7CityZXR1cm4gbiA9PSAxOwogfQogCi0v
KiBJbnNwaXJlZCBieSBPcGVuU1NIJ3MgbW1fcmVjZWl2ZV9mZCgpLiBUaGFua3MhICovCisvKiBJ
bnNwaXJlZCBieSBPcGVuU1NIJ3MgbW1fcmVjZWl2ZV9mZCgpLiBUaGFua3MhCitSZXR1cm4gZmQg
cGFzc2VkIG92ZXIgc29ja2V0cGFpciwgb3IgLTEgb24gZXJyb3IuCisqLwogCiBzdGF0aWMgaW50
CiBsb2dfcmVjdl9mZChjb25zdCBpbnQgc29jaykKQEAgLTM0NSwxNCArMzUxLDEyIEBACiAgIGNo
YXIgYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKGludCkpXTsKIH0gY21zZ2J1ZjsKIHN0cnVjdCBjbXNn
aGRyICpjbXNnOwotc3RydWN0IGlvdmVjIHZlYzsKLXNzaXplX3QgbjsKIGNoYXIgY2ggPSAnXDAn
OwotaW50IGZkID0gLTE7CitzdHJ1Y3QgaW92ZWMgdmVjID0gey5pb3ZfYmFzZSA9ICZjaCwgLmlv
dl9sZW4gPSAxfTsKK3NzaXplX3QgbjsKK2ludCBmZDsKIAogbWVtc2V0KCZtc2csIDAsIHNpemVv
Zihtc2cpKTsKLXZlYy5pb3ZfYmFzZSA9ICZjaDsKLXZlYy5pb3ZfbGVuID0gMTsKIG1zZy5tc2df
aW92ID0gJnZlYzsKIG1zZy5tc2dfaW92bGVuID0gMTsKIApAQCAtMzYwLDE0ICszNjQsMTIgQEAK
IG1zZy5tc2dfY29udHJvbCA9ICZjbXNnYnVmLmJ1ZjsKIG1zZy5tc2dfY29udHJvbGxlbiA9IHNp
emVvZihjbXNnYnVmLmJ1Zik7CiAKLXdoaWxlICgobiA9IHJlY3Ztc2coc29jaywgJm1zZywgMCkp
ID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKK3doaWxlICgobiA9IHJlY3Ztc2coc29jaywgJm1z
ZywgMCkpID09IC0xICYmIGVycm5vID09IEVJTlRSKSA7CiBpZiAobiAhPSAxIHx8IGNoICE9ICdB
JykgcmV0dXJuIC0xOwogCi1jbXNnID0gQ01TR19GSVJTVEhEUigmbXNnKTsKLWlmIChjbXNnID09
IE5VTEwpIHJldHVybiAtMTsKK2lmICghKGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtc2cpKSkgcmV0
dXJuIC0xOwogaWYgKGNtc2ctPmNtc2dfdHlwZSAhPSBTQ01fUklHSFRTKSByZXR1cm4gLTE7Ci1m
ZCA9ICooY29uc3QgaW50ICopQ01TR19EQVRBKGNtc2cpOwotaWYgKGZkIDwgMCkgcmV0dXJuIC0x
OworaWYgKChmZCA9ICooY29uc3QgaW50ICopQ01TR19EQVRBKGNtc2cpKSA8IDApIHJldHVybiAt
MTsKIHJldHVybiBmZDsKIH0KIApAQCAtMzg4LDM0ICszOTAsMzIgQEAKICovCiAKIGludAotbG9n
X29wZW5fYXNfZXhpbSh1c2NoYXIgKiBjb25zdCBuYW1lKQorbG9nX29wZW5fYXNfZXhpbShjb25z
dCB1c2NoYXIgKiBjb25zdCBuYW1lKQogewogaW50IGZkID0gLTE7CiBjb25zdCB1aWRfdCBldWlk
ID0gZ2V0ZXVpZCgpOwogCiBpZiAoZXVpZCA9PSBleGltX3VpZCkKLSAgewogICBmZCA9IGxvZ19v
cGVuX2FscmVhZHlfZXhpbShuYW1lKTsKLSAgfQogZWxzZSBpZiAoZXVpZCA9PSByb290X3VpZCkK
ICAgewogICBpbnQgc29ja1syXTsKICAgaWYgKHNvY2tldHBhaXIoQUZfVU5JWCwgU09DS19TVFJF
QU0sIDAsIHNvY2spID09IDApCiAgICAgewotICAgIGNvbnN0IHBpZF90IHBpZCA9IGV4aW1fZm9y
ayhVUyJsb2dmaWxlLW9wZW4iKTsKKyAgICBjb25zdCBwaWRfdCBwaWQgPSBmb3JrKCk7CiAgICAg
aWYgKHBpZCA9PSAwKQogICAgICAgewogICAgICAgKHZvaWQpY2xvc2Uoc29ja1swXSk7Ci0gICAg
ICBpZiAoc2V0Z3JvdXBzKDEsICZleGltX2dpZCkgIT0gMCkgX2V4aXQoRVhJVF9GQUlMVVJFKTsK
LSAgICAgIGlmIChzZXRnaWQoZXhpbV9naWQpICE9IDApIF9leGl0KEVYSVRfRkFJTFVSRSk7Ci0g
ICAgICBpZiAoc2V0dWlkKGV4aW1fdWlkKSAhPSAwKSBfZXhpdChFWElUX0ZBSUxVUkUpOwotCi0g
ICAgICBpZiAoZ2V0dWlkKCkgIT0gZXhpbV91aWQgfHwgZ2V0ZXVpZCgpICE9IGV4aW1fdWlkKSBf
ZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgaWYgKGdldGdpZCgpICE9IGV4aW1fZ2lkIHx8IGdl
dGVnaWQoKSAhPSBleGltX2dpZCkgX2V4aXQoRVhJVF9GQUlMVVJFKTsKLQotICAgICAgZmQgPSBs
b2dfb3Blbl9hbHJlYWR5X2V4aW0obmFtZSk7Ci0gICAgICBpZiAoZmQgPCAwKSBfZXhpdChFWElU
X0ZBSUxVUkUpOwotICAgICAgaWYgKGxvZ19zZW5kX2ZkKHNvY2tbMV0sIGZkKSAhPSAwKSBfZXhp
dChFWElUX0ZBSUxVUkUpOworICAgICAgaWYgKCAgc2V0Z3JvdXBzKDEsICZleGltX2dpZCkgIT0g
MAorICAgICAgICAgfHwgc2V0Z2lkKGV4aW1fZ2lkKSAhPSAwCisgICAgICAgICB8fCBzZXR1aWQo
ZXhpbV91aWQpICE9IDAKKworICAgICAgICAgfHwgZ2V0dWlkKCkgIT0gZXhpbV91aWQgfHwgZ2V0
ZXVpZCgpICE9IGV4aW1fdWlkCisgICAgICAgICB8fCBnZXRnaWQoKSAhPSBleGltX2dpZCB8fCBn
ZXRlZ2lkKCkgIT0gZXhpbV9naWQKKworICAgICAgICAgfHwgKGZkID0gbG9nX29wZW5fYWxyZWFk
eV9leGltKG5hbWUpKSA8IDAKKyAgICAgICAgIHx8ICFsb2dfc2VuZF9mZChzb2NrWzFdLCBmZCkK
KwkgKSBfZXhpdChFWElUX0ZBSUxVUkUpOwogICAgICAgKHZvaWQpY2xvc2Uoc29ja1sxXSk7CiAg
ICAgICBfZXhpdChFWElUX1NVQ0NFU1MpOwogICAgICAgfQpAQCAtNDM5LDkgKzQzOSw3IEBACiAg
IGlmIChmbGFncyAhPSAtMSkgKHZvaWQpZmNudGwoZmQsIEZfU0VURkwsIGZsYWdzICYgfk9fTk9O
QkxPQ0spOwogICB9CiBlbHNlCi0gIHsKICAgZXJybm8gPSBFQUNDRVM7Ci0gIH0KIAogcmV0dXJu
IGZkOwogfQpAQCAtNDU3LDcgKzQ1NSw3IEBACiBpdCBkb2VzIG5vdCBleGlzdC4gVGhpcyBtYXkg
YmUgY2FsbGVkIHJlY3Vyc2l2ZWx5IG9uIGZhaWx1cmUsIGluIG9yZGVyIHRvIG9wZW4KIHRoZSBw
YW5pYyBsb2cuCiAKLVRoZSBkaXJlY3RvcnkgaXMgaW4gdGhlIHN0YXRpYyB2YXJpYWJsZSBmaWxl
X3BhdGguIFRoaXMgaXMgc3RhdGljIHNvIHRoYXQgaXQKK1RoZSBkaXJlY3RvcnkgaXMgaW4gdGhl
IHN0YXRpYyB2YXJpYWJsZSBmaWxlX3BhdGguIFRoaXMgaXMgc3RhdGljIHNvIHRoYXQKIHRoZSB3
b3JrIG9mIHNvcnRpbmcgb3V0IHRoZSBwYXRoIGlzIGRvbmUganVzdCBvbmNlIHBlciBFeGltIHBy
b2Nlc3MuCiAKIEV4aW0gaXMgbm9ybWFsbHkgY29uZmlndXJlZCB0byBhdm9pZCBydW5uaW5nIGFz
IHJvb3Qgd2hlcmV2ZXIgcG9zc2libGUsIHRoZSBsb2cKQEAgLTQ3NSw3ICs0NzMsNyBAQAogKi8K
IAogc3RhdGljIHZvaWQKLW9wZW5fbG9nKGludCAqZmQsIGludCB0eXBlLCB1c2NoYXIgKnRhZykK
K29wZW5fbG9nKGludCAqIGZkLCBpbnQgdHlwZSwgY29uc3QgdXNjaGFyICogdGFnKQogewogdWlk
X3QgZXVpZDsKIEJPT0wgb2ssIG9rMjsKQEAgLTQ5Miw2MCArNDkwLDY0IEBACiAKIG9rID0gc3Ry
aW5nX2Zvcm1hdChidWZmZXIsIHNpemVvZihidWZmZXIpLCBDUyBmaWxlX3BhdGgsIGxvZ19uYW1l
c1t0eXBlXSk7CiAKLS8qIFNhdmUgdGhlIG5hbWUgb2YgdGhlIG1haW5sb2cgZm9yIHJvbGxvdmVy
IHByb2Nlc3NpbmcuIFdpdGhvdXQgYSBkYXRlc3RhbXAsCi1pdCBnZXRzIHN0YXR0ZWQgdG8gc2Vl
IGlmIGl0IGhhcyBiZWVuIGN5Y2xlZC4gV2l0aCBhIGRhdGVzdGFtcCwgdGhlIGRhdGVzdGFtcAot
d2lsbCBiZSBjb21wYXJlZC4gVGhlIHN0YXRpYyBzbG90IGZvciBzYXZpbmcgaXQgaXMgdGhlIHNh
bWUgc2l6ZSBhcyBidWZmZXIsCi1hbmQgdGhlIHRleHQgaGFzIGJlZW4gY2hlY2tlZCBhYm92ZSB0
byBmaXQsIHNvIHRoaXMgdXNlIG9mIHN0cmNweSgpIGlzIE9LLiAqLwotCi1pZiAodHlwZSA9PSBs
dF9tYWluICYmIHN0cmluZ19kYXRlc3RhbXBfb2Zmc2V0ID49IDApCitzd2l0Y2ggKHR5cGUpCiAg
IHsKLSAgVXN0cmNweShtYWlubG9nX25hbWUsIGJ1ZmZlcik7Ci0gIG1haW5sb2dfZGF0ZXN0YW1w
ID0gbWFpbmxvZ19uYW1lICsgc3RyaW5nX2RhdGVzdGFtcF9vZmZzZXQ7Ci0gIH0KLQotLyogRGl0
dG8gZm9yIHRoZSByZWplY3QgbG9nICovCi0KLWVsc2UgaWYgKHR5cGUgPT0gbHRfcmVqZWN0ICYm
IHN0cmluZ19kYXRlc3RhbXBfb2Zmc2V0ID49IDApCi0gIHsKLSAgVXN0cmNweShyZWplY3Rsb2df
bmFtZSwgYnVmZmVyKTsKLSAgcmVqZWN0bG9nX2RhdGVzdGFtcCA9IHJlamVjdGxvZ19uYW1lICsg
c3RyaW5nX2RhdGVzdGFtcF9vZmZzZXQ7Ci0gIH0KLQotLyogYW5kIGRlYWwgd2l0aCB0aGUgZGVi
dWcgbG9nICh3aGljaCBrZWVwcyB0aGUgZGF0ZXN0YW1wLCBidXQgZG9lcyBub3QKLXVwZGF0ZSBp
dCkgKi8KKyAgY2FzZSBsdF9tYWluOgorICAgIC8qIFNhdmUgdGhlIG5hbWUgb2YgdGhlIG1haW5s
b2cgZm9yIHJvbGxvdmVyIHByb2Nlc3NpbmcuIFdpdGhvdXQgYSBkYXRlc3RhbXAsCisgICAgaXQg
Z2V0cyBzdGF0dGVkIHRvIHNlZSBpZiBpdCBoYXMgYmVlbiBjeWNsZWQuIFdpdGggYSBkYXRlc3Rh
bXAsIHRoZSBkYXRlc3RhbXAKKyAgICB3aWxsIGJlIGNvbXBhcmVkLiBUaGUgc3RhdGljIHNsb3Qg
Zm9yIHNhdmluZyBpdCBpcyB0aGUgc2FtZSBzaXplIGFzIGJ1ZmZlciwKKyAgICBhbmQgdGhlIHRl
eHQgaGFzIGJlZW4gY2hlY2tlZCBhYm92ZSB0byBmaXQsIHNvIHRoaXMgdXNlIG9mIHN0cmNweSgp
IGlzIE9LLiAqLworICAgIFVzdHJjcHkobWFpbmxvZ19uYW1lLCBidWZmZXIpOworICAgIGlmIChz
dHJpbmdfZGF0ZXN0YW1wX29mZnNldCA+IDApCisgICAgICBtYWlubG9nX2RhdGVzdGFtcCA9IG1h
aW5sb2dfbmFtZSArIHN0cmluZ19kYXRlc3RhbXBfb2Zmc2V0OworICAgIGJyZWFrOwogCi1lbHNl
IGlmICh0eXBlID09IGx0X2RlYnVnKQotICB7Ci0gIFVzdHJjcHkoZGVidWdsb2dfbmFtZSwgYnVm
ZmVyKTsKLSAgaWYgKHRhZykKLSAgICB7Ci0gICAgLyogdGhpcyB3b24ndCBjaGFuZ2UgdGhlIG9m
ZnNldCBvZiB0aGUgZGF0ZXN0YW1wICovCi0gICAgb2syID0gc3RyaW5nX2Zvcm1hdChidWZmZXIs
IHNpemVvZihidWZmZXIpLCAiJXMlcyIsCi0gICAgICBkZWJ1Z2xvZ19uYW1lLCB0YWcpOwotICAg
IGlmIChvazIpCi0gICAgICBVc3RyY3B5KGRlYnVnbG9nX25hbWUsIGJ1ZmZlcik7Ci0gICAgfQot
ICB9CisgIGNhc2UgbHRfcmVqZWN0OgorICAgIC8qIERpdHRvIGZvciB0aGUgcmVqZWN0IGxvZyAq
LworICAgIFVzdHJjcHkocmVqZWN0bG9nX25hbWUsIGJ1ZmZlcik7CisgICAgaWYgKHN0cmluZ19k
YXRlc3RhbXBfb2Zmc2V0ID4gMCkKKyAgICAgIHJlamVjdGxvZ19kYXRlc3RhbXAgPSByZWplY3Rs
b2dfbmFtZSArIHN0cmluZ19kYXRlc3RhbXBfb2Zmc2V0OworICAgIGJyZWFrOwogCi0vKiBSZW1v
dmUgYW55IGRhdGVzdGFtcCBpZiB0aGlzIGlzIHRoZSBwYW5pYyBsb2cuIFRoaXMgaXMgcmFyZSwg
c28gdGhlcmUncyBubwotbmVlZCB0byBvcHRpbWl6ZSBnZXR0aW5nIHRoZSBkYXRlc3RhbXAgbGVu
Z3RoLiBXZSByZW1vdmUgb25lIG5vbi1hbHBoYW51bWVyaWMKLWNoYXIgYWZ0ZXJ3YXJkcyBpZiBh
dCB0aGUgc3RhcnQsIG90aGVyd2lzZSBvbmUgYmVmb3JlLiAqLworICBjYXNlIGx0X2RlYnVnOgor
ICAgIC8qIGFuZCBkZWFsIHdpdGggdGhlIGRlYnVnIGxvZyAod2hpY2gga2VlcHMgdGhlIGRhdGVz
dGFtcCwgYnV0IGRvZXMgbm90CisgICAgdXBkYXRlIGl0KSAqLworICAgIFVzdHJjcHkoZGVidWds
b2dfbmFtZSwgYnVmZmVyKTsKKyAgICBpZiAodGFnKQorICAgICAgeworICAgICAgaWYgKGlzX3Rh
aW50ZWQodGFnKSkKKyAgICAgIAlkaWUoVVMiZXhpbTogdGFpbnRlZCB0YWcgZm9yIGRlYnVnIGxv
ZyBmaWxlbmFtZSIsCisgICAgICAJICAgICAgVVMiTG9nZ2luZyBmYWlsdXJlOyBwbGVhc2UgdHJ5
IGxhdGVyIik7CisKKyAgICAgIC8qIHRoaXMgd29uJ3QgY2hhbmdlIHRoZSBvZmZzZXQgb2YgdGhl
IGRhdGVzdGFtcCAqLworICAgICAgb2syID0gc3RyaW5nX2Zvcm1hdChidWZmZXIsIHNpemVvZihi
dWZmZXIpLCAiJXMlcyIsCisgICAgICAgIGRlYnVnbG9nX25hbWUsIHRhZyk7CisgICAgICBpZiAo
b2syKQorICAgICAgICBVc3RyY3B5KGRlYnVnbG9nX25hbWUsIGJ1ZmZlcik7CisgICAgICB9Cisg
ICAgYnJlYWs7CiAKLWVsc2UgaWYgKHN0cmluZ19kYXRlc3RhbXBfb2Zmc2V0ID49IDApCi0gIHsK
LSAgdXNjaGFyICogZnJvbSA9IGJ1ZmZlciArIHN0cmluZ19kYXRlc3RhbXBfb2Zmc2V0OwotICB1
c2NoYXIgKiB0byA9IGZyb20gKyBzdHJpbmdfZGF0ZXN0YW1wX2xlbmd0aDsKKyAgZGVmYXVsdDoK
KyAgICAvKiBSZW1vdmUgYW55IGRhdGVzdGFtcCBpZiB0aGlzIGlzIHRoZSBwYW5pYyBsb2cuIFRo
aXMgaXMgcmFyZSwgc28gdGhlcmUncyBubworICAgIG5lZWQgdG8gb3B0aW1pemUgZ2V0dGluZyB0
aGUgZGF0ZXN0YW1wIGxlbmd0aC4gV2UgcmVtb3ZlIG9uZSBub24tYWxwaGFudW1lcmljCisgICAg
Y2hhciBhZnRlcndhcmRzIGlmIGF0IHRoZSBzdGFydCwgb3RoZXJ3aXNlIG9uZSBiZWZvcmUuICov
CisgICAgaWYgKHN0cmluZ19kYXRlc3RhbXBfb2Zmc2V0ID49IDApCisgICAgICB7CisgICAgICB1
c2NoYXIgKiBmcm9tID0gYnVmZmVyICsgc3RyaW5nX2RhdGVzdGFtcF9vZmZzZXQ7CisgICAgICB1
c2NoYXIgKiB0byA9IGZyb20gKyBzdHJpbmdfZGF0ZXN0YW1wX2xlbmd0aDsKIAotICBpZiAoZnJv
bSA9PSBidWZmZXIgfHwgZnJvbVstMV0gPT0gJy8nKQotICAgIHsKLSAgICBpZiAoIWlzYWxudW0o
KnRvKSkgdG8rKzsKLSAgICB9Ci0gIGVsc2UKLSAgICBpZiAoIWlzYWxudW0oZnJvbVstMV0pKSBm
cm9tLS07CisgICAgICBpZiAoZnJvbSA9PSBidWZmZXIgfHwgZnJvbVstMV0gPT0gJy8nKQorICAg
ICAgICB7CisgICAgICAgIGlmICghaXNhbG51bSgqdG8pKSB0bysrOworICAgICAgICB9CisgICAg
ICBlbHNlCisgICAgICAgIGlmICghaXNhbG51bShmcm9tWy0xXSkpIGZyb20tLTsKIAotICAvKiBU
aGlzIGNvcHkgaXMgb2ssIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRvIGlzIGEgc3Vic3RyaW5nIG9m
IGZyb20uIEJ1dAotICBkdWUgdG8gb3ZlcmxhcCB3ZSBtdXN0IHVzZSBtZW1tb3ZlKCkgbm90IFVz
dHJjcHkoKS4gKi8KLSAgbWVtbW92ZShmcm9tLCB0bywgVXN0cmxlbih0bykrMSk7CisgICAgICAv
KiBUaGlzIGNvcHkgaXMgb2ssIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRvIGlzIGEgc3Vic3RyaW5n
IG9mIGZyb20uIEJ1dAorICAgICAgZHVlIHRvIG92ZXJsYXAgd2UgbXVzdCB1c2UgbWVtbW92ZSgp
IG5vdCBVc3RyY3B5KCkuICovCisgICAgICBtZW1tb3ZlKGZyb20sIHRvLCBVc3RybGVuKHRvKSsx
KTsKKyAgICAgIH0KKyAgICBicmVhazsKICAgfQogCiAvKiBJZiB0aGUgZmlsZSBuYW1lIGlzIHRv
byBsb25nLCBpdCBpcyBhbiB1bnJlY292ZXJhYmxlIGRpc2FzdGVyICovCkBAIC01NTYsMTIgKzU1
OCw4IEBACiAKIC8qIFdlIG5vdyBoYXZlIHRoZSBmaWxlIG5hbWUuIEFmdGVyIGEgc3VjY2Vzc2Z1
bCBvcGVuLCByZXR1cm4uICovCiAKLSpmZCA9IGxvZ19vcGVuX2FzX2V4aW0oYnVmZmVyKTsKLQot
aWYgKCpmZCA+PSAwKQotICB7CitpZiAoKCpmZCA9IGxvZ19vcGVuX2FzX2V4aW0oYnVmZmVyKSkg
Pj0gMCkKICAgcmV0dXJuOwotICB9CiAKIGV1aWQgPSBnZXRldWlkKCk7CiAKQEAgLTcyOSwxMCAr
NzI3LDE3IEBACiB9CiAKIAorLyogQ2xvc2UgbWFpbmxvZywgdW5sZXNzIHdlIGRvIG5vdCBzZWUg
YSBjaGFuY2UgdG8gb3BlbiB0aGUgZmlsZSBtYWlubG9nIGxhdGVyCithZ2Fpbi4gIFRoaXMgd2ls
bCBoYXBwZW4gaWYgd2UgbG9nIGZyb20gYSB0cmFuc3BvcnQgcHJvY2VzcyAod2hpY2ggaGFzIGRy
b3BwZWQKK3ByaXZzKTsgc29tZXRoaW5nIHdlIHRyYWRpdGlvbmFsbHkgYXZvaWQsIGJ1dCB0aGUg
aW50cm9kdWN0aW9uIG9mIHRhaW50LXRyYWNraW5nCithbmQgcmVzdWx0aW5nIGRldGVjdGlvbiBv
ZiBlcnJvcnMgaXMgbWFraW5uZyBoYXJkZXIuICovCisKIHZvaWQKIG1haW5sb2dfY2xvc2Uodm9p
ZCkKIHsKLWlmIChtYWlubG9nZmQgPCAwKSByZXR1cm47CitpZiAobWFpbmxvZ2ZkIDwgMAorICAg
fHwgIShnZXRldWlkKCkgPT0gMCB8fCBnZXRldWlkKCkgPT0gZXhpbV91aWQpKQorICByZXR1cm47
CiAodm9pZCljbG9zZShtYWlubG9nZmQpOwogbWFpbmxvZ2ZkID0gLTE7CiBtYWlubG9nX2lub2Rl
ID0gMDsKQEAgLTkwMiw2ICs5MDcsMTEgQEAKICAgICAgICJNb3JlIHRoYW4gb25lIHBhdGggZ2l2
ZW4gaW4gbG9nX2ZpbGVfcGF0aDogdXNpbmcgJXMiLCBmaWxlX3BhdGgpOwogICB9CiAKKy8qIE9w
dGlvbmFsbHkgdHJpZ2dlciBkZWJ1ZyAqLworCitpZiAoZmxhZ3MgJiBMT0dfUEFOSUMgJiYgZHRy
aWdnZXJfc2VsZWN0b3IgJiBCSVQoRFRpX3BhbmljdHJpZ2dlcikpCisgIGRlYnVnX3RyaWdnZXJf
ZmlyZSgpOworCiAvKiBJZiBkZWJ1Z2dpbmcsIHNob3cgYWxsIGxvZyBlbnRyaWVzLCBidXQgZG9u
J3Qgc2hvdyBoZWFkZXJzLiBEbyBpdCBhbGwKIGluIG9uZSBnbyBzbyB0aGF0IGl0IGRvZXNuJ3Qg
Z2V0IHNwbGl0IHdoZW4gbXVsdGktcHJvY2Vzc2luZy4gKi8KIApAQCAtMTI0OSwxMCArMTI1OSw3
IEBACiAgICAgcGFuaWNfcmVjdXJzZWZsYWcgPSBGQUxTRTsKIAogICAgIGlmIChwYW5pY19zYXZl
X2J1ZmZlcikKLSAgICAgIHsKLSAgICAgIGludCBpID0gd3JpdGUocGFuaWNsb2dmZCwgcGFuaWNf
c2F2ZV9idWZmZXIsIFVzdHJsZW4ocGFuaWNfc2F2ZV9idWZmZXIpKTsKLSAgICAgIGkgPSBpOwkv
KiBjb21waWxlciBxdWlldGVuaW5nICovCi0gICAgICB9CisgICAgICAodm9pZCkgd3JpdGUocGFu
aWNsb2dmZCwgcGFuaWNfc2F2ZV9idWZmZXIsIFVzdHJsZW4ocGFuaWNfc2F2ZV9idWZmZXIpKTsK
IAogICAgIHdyaXR0ZW5fbGVuID0gd3JpdGVfdG9fZmRfYnVmKHBhbmljbG9nZmQsIGctPnMsIGct
PnB0cik7CiAgICAgaWYgKHdyaXR0ZW5fbGVuICE9IGctPnB0cikKQEAgLTEzNTYsOCArMTM2Myw5
IEBACiAqLwogCiB2b2lkCi1kZWNvZGVfYml0cyh1bnNpZ25lZCBpbnQgKnNlbGVjdG9yLCBzaXpl
X3Qgc2Vsc2l6ZSwgaW50ICpub3RhbGwsCi0gIHVzY2hhciAqc3RyaW5nLCBiaXRfdGFibGUgKm9w
dGlvbnMsIGludCBjb3VudCwgdXNjaGFyICp3aGljaCwgaW50IGZsYWdzKQorZGVjb2RlX2JpdHMo
dW5zaWduZWQgaW50ICogc2VsZWN0b3IsIHNpemVfdCBzZWxzaXplLCBpbnQgKiBub3RhbGwsCisg
IGNvbnN0IHVzY2hhciAqIHN0cmluZywgYml0X3RhYmxlICogb3B0aW9ucywgaW50IGNvdW50LCB1
c2NoYXIgKiB3aGljaCwKKyAgaW50IGZsYWdzKQogewogdXNjaGFyICplcnJtc2c7CiBpZiAoIXN0
cmluZykgcmV0dXJuOwpAQCAtMTM2Niw3ICsxMzc0LDcgQEAKICAgewogICBjaGFyICplbmQ7ICAg
IC8qIE5vdCB1c2NoYXIgKi8KICAgbWVtc2V0KHNlbGVjdG9yLCAwLCBzaXplb2YoKnNlbGVjdG9y
KSpzZWxzaXplKTsKLSAgKnNlbGVjdG9yID0gc3RydG91bChDUyBzdHJpbmcrMSwgJmVuZCwgMCk7
CisgICpzZWxlY3RvciA9IHN0cnRvdWwoQ0NTIHN0cmluZysxLCAmZW5kLCAwKTsKICAgaWYgKCEq
ZW5kKSByZXR1cm47CiAgIGVycm1zZyA9IHN0cmluZ19zcHJpbnRmKCJtYWxmb3JtZWQgbnVtZXJp
YyAlc19zZWxlY3RvciBzZXR0aW5nOiAlcyIsIHdoaWNoLAogICAgIHN0cmluZyk7CkBAIC0xMzc4
LDkgKzEzODYsOSBAQAogZWxzZSBmb3IoOzspCiAgIHsKICAgQk9PTCBhZGRpbmc7Ci0gIHVzY2hh
ciAqczsKKyAgY29uc3QgdXNjaGFyICogczsKICAgaW50IGxlbjsKLSAgYml0X3RhYmxlICpzdGFy
dCwgKmVuZDsKKyAgYml0X3RhYmxlICogc3RhcnQsICogZW5kOwogCiAgIFVza2lwX3doaXRlc3Bh
Y2UoJnN0cmluZyk7CiAgIGlmICghKnN0cmluZykgcmV0dXJuOwpAQCAtMTQ2OSwxMyArMTQ3Nywx
NSBAQAogCiBUaGUgZmlyc3QgdXNlIG9mIHRoaXMgaXMgaW4gQUNMIGxvZ2ljLCAiY29udHJvbCA9
IGRlYnVnL3RhZz1mb28vb3B0cz0rZXhwYW5kIgogd2hpY2ggY2FuIGJlIGNvbWJpbmVkIHdpdGgg
Y29uZGl0aW9ucywgZXRjLCB0byBhY3RpdmF0ZSBleHRyYSBsb2dnaW5nIG9ubHkKLWZvciBjZXJ0
YWluIHNvdXJjZXMuIFRoZSBzZWNvbmQgdXNlIGlzIGluZXRkIHdhaXQgbW9kZSBkZWJ1ZyBwcmVz
ZXJ2YXRpb24uICovCitmb3IgY2VydGFpbiBzb3VyY2VzLiBUaGUgc2Vjb25kIHVzZSBpcyBpbmV0
ZCB3YWl0IG1vZGUgZGVidWcgcHJlc2VydmF0aW9uLgorCitJdCBtaWdodCBiZSBuaWNlLCBpbiBB
Q0wtaW5pdGlhdGVkIHByZXRyaWdnZXIgbW9kZSwgdG8gbm90IGNyZWF0ZSB0aGUgZmlsZQoraW1t
ZWRpYXRlbHkgYnV0IG9ubHkgdXBvbiBhIHRyaWdnZXIgLSBidXQgd2UnZCBuZWVkIGFub3RoZXIg
Y21kbGluZSBvcHRpb24KK3RvIHBhc3MgdGhlIG5hbWUgdGhyb3VnaCBjaGlsZF9leHhlY19leGlt
KCkuICovCiAKIHZvaWQKLWRlYnVnX2xvZ2dpbmdfYWN0aXZhdGUodXNjaGFyICp0YWdfbmFtZSwg
dXNjaGFyICpvcHRzKQorZGVidWdfbG9nZ2luZ19hY3RpdmF0ZShjb25zdCB1c2NoYXIgKiB0YWdf
bmFtZSwgY29uc3QgdXNjaGFyICogb3B0cykKIHsKLWludCBmZCA9IC0xOwotCiBpZiAoZGVidWdf
ZmlsZSkKICAgewogICBkZWJ1Z19wcmludGYoIkRFQlVHR0lORyBBQ1RJVkFURUQgRlJPTSBXSVRI
SU4gQ09ORklHLlxuIgpAQCAtMTQ4Myw3ICsxNDkzLDcgQEAKICAgcmV0dXJuOwogICB9CiAKLWlm
ICh0YWdfbmFtZSAhPSBOVUxMICYmIChVc3RyY2hyKHRhZ19uYW1lLCAnLycpICE9IE5VTEwpKQor
aWYgKHRhZ19uYW1lICYmIChVc3RyY2hyKHRhZ19uYW1lLCAnLycpICE9IE5VTEwpKQogICB7CiAg
IGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUMsICJkZWJ1ZyB0YWcgbWF5IG5vdCBjb250
YWluIGEgJy8nIGluOiAlcyIsCiAgICAgICB0YWdfbmFtZSk7CkBAIC0xNTAxLDI0ICsxNTExLDQz
IEBACiAKIGlmICghKmZpbGVfcGF0aCkgc2V0X2ZpbGVfcGF0aCgpOwogCi1vcGVuX2xvZygmZmQs
IGx0X2RlYnVnLCB0YWdfbmFtZSk7CitvcGVuX2xvZygmZGVidWdfZmQsIGx0X2RlYnVnLCB0YWdf
bmFtZSk7CiAKLWlmIChmZCAhPSAtMSkKLSAgZGVidWdfZmlsZSA9IGZkb3BlbihmZCwgInciKTsK
K2lmIChkZWJ1Z19mZCAhPSAtMSkKKyAgZGVidWdfZmlsZSA9IGZkb3BlbihkZWJ1Z19mZCwgInci
KTsKIGVsc2UKICAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQywgInVuYWJsZSB0byBv
cGVuIGRlYnVnIGxvZyIpOwogfQogCiAKIHZvaWQKLWRlYnVnX2xvZ2dpbmdfc3RvcCh2b2lkKQor
ZGVidWdfbG9nZ2luZ19mcm9tX3Nwb29sKGNvbnN0IHVzY2hhciAqIGZpbGVuYW1lKQoreworaWYg
KGRlYnVnX2ZkIDwgMCkKKyAgeworICBVc3RybmNweShkZWJ1Z2xvZ19uYW1lLCBmaWxlbmFtZSwg
c2l6ZW9mKGRlYnVnbG9nX25hbWUpKTsKKyAgaWYgKChkZWJ1Z19mZCA9IGxvZ19vcGVuX2FzX2V4
aW0oZmlsZW5hbWUpKSA+PSAwKQorICAgIGRlYnVnX2ZpbGUgPSBmZG9wZW4oZGVidWdfZmQsICJ3
Iik7CisgIERFQlVHKERfZGVsaXZlcikgZGVidWdfcHJpbnRmKCJkZWJ1ZyBlbmFibGVkIGJ5IHNw
b29sZmlsZVxuIik7CisgIH0KKy8qCitlbHNlIERFQlVHKERfZGVsaXZlcikKKyAgZGVidWdfcHJp
bnRmKCJkZWJ1ZyBhbHJlYWR5IGFjdGl2ZTsgaWdub3Jpbmcgc3Bvb2xmaWxlICclcydcbiIsIGZp
bGVuYW1lKTsKKyovCit9CisKKwordm9pZAorZGVidWdfbG9nZ2luZ19zdG9wKEJPT0wga2lsbCkK
IHsKK2RlYnVnX3ByZXRyaWdnZXJfZGlzY2FyZCgpOwogaWYgKCFkZWJ1Z19maWxlIHx8ICFkZWJ1
Z2xvZ19uYW1lWzBdKSByZXR1cm47CiAKIGRlYnVnX3NlbGVjdG9yID0gMDsKIGZjbG9zZShkZWJ1
Z19maWxlKTsKIGRlYnVnX2ZpbGUgPSBOVUxMOwotdW5saW5rX2xvZyhsdF9kZWJ1Zyk7CitkZWJ1
Z19mZCA9IC0xOworaWYgKGtpbGwpIHVubGlua19sb2cobHRfZGVidWcpOwogfQogCiAKZGlmZiAt
dXIgZXhpbS5vcmlnL3NyYy9sb29rdXBhcGkuaCBleGltL3NyYy9sb29rdXBhcGkuaAotLS0gZXhp
bS5vcmlnL3NyYy9sb29rdXBhcGkuaAkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMw
MAorKysgZXhpbS9zcmMvbG9va3VwYXBpLmgJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAg
KzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFu
c3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIy
ICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE1
ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNl
ZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24u
ICovCiAKIApAQCAtNDIsMTYgKzQyLDE5IEBACiAgIHZvaWQgKCp0aWR5KSh2b2lkKTsgICAgICAg
ICAgICAgLyogdGlkeSBmdW5jdGlvbiAqLwogICB1c2NoYXIgKigqcXVvdGUpKCAgICAgICAgICAg
ICAgIC8qIHF1b3RpbmcgZnVuY3Rpb24gKi8KICAgICB1c2NoYXIgKiwgICAgICAgICAgICAgICAg
ICAgICAvKiBzdHJpbmcgdG8gcXVvdGUgKi8KLSAgICB1c2NoYXIgKik7ICAgICAgICAgICAgICAg
ICAgICAvKiBhZGRpdGlvbmFsIGRhdGEgZnJvbSBxdW90ZSBuYW1lICovCi0gIHZvaWQgKCp2ZXJz
aW9uX3JlcG9ydCkoICAgICAgICAgLyogZGlhZ25vc3RpYyBmdW5jdGlvbiAqLwotICAgIEZJTEUg
Kik7ICAgICAgICAgICAgICAgICAgICAgIC8qIGZoIHRvIHdyaXRlIHRvICovCisgICAgdXNjaGFy
ICosICAgICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBkYXRhIGZyb20gcXVvdGUgbmFt
ZSAqLworICAgIHVuc2lnbmVkKTsJCQkgIC8qIGxvb2t1cCB0eXBlIGluZGV4ICovCisgIGdzdHJp
bmcgKiAoKnZlcnNpb25fcmVwb3J0KSggICAgLyogZGlhZ25vc3RpYyBmdW5jdGlvbiAqLworICAg
IGdzdHJpbmcgKik7ICAgICAgICAgICAgICAgICAgIC8qIHN0cmluZyB0byBhcHBhbmQgdG8gKi8K
IH0gbG9va3VwX2luZm87CiAKIC8qIFRoaXMgbWFnaWMgbnVtYmVyIGlzIHVzZWQgYnkgdGhlIGZv
bGxvd2luZyBsb29rdXBfbW9kdWxlX2luZm8gc3RydWN0dXJlCiAgICBmb3IgY2hlY2tpbmcgQVBJ
IGNvbXBhdGliaWxpdHkuIEl0IHVzZWQgdG8gYmUgZXF1aXZhbGVudCB0byB0aGUgc3RyaW5nIkxN
TTMiICovCi0jZGVmaW5lIExPT0tVUF9NT0RVTEVfSU5GT19NQUdJQyAweDRjNGQ0OTMzCisjZGVm
aW5lIExPT0tVUF9NT0RVTEVfSU5GT19NQUdJQyAweDRjNGQ0OTM1CiAvKiBWZXJzaW9uIDIgYWRk
czogdmVyc2lvbl9yZXBvcnQgKi8KIC8qIFZlcnNpb24gMyBjaGFuZ2U6IG5vbi9jYWNoZSBiZWNv
bWVzIFRUTCBpbiBzZWNvbmRzICovCisvKiBWZXJzaW9uIDQgYWRkOiBpbmRleCBvbiBxdW90aW5n
IGZ1bmN0aW9uICovCisvKiBWZXJzaW9uIDUgY2hhbmdlOiB2ZXJzaW9uIHJlcG9ydCBub3cgYWRk
cyB0byBhIGdzdHJpbmcgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgbG9va3VwX21vZHVsZV9pbmZvIHsK
ICAgdWludCBtYWdpYzsKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9sb29rdXBzL2NkYi5jIGV4aW0v
c3JjL2xvb2t1cHMvY2RiLmMKLS0tIGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9jZGIuYwkyMDIzLTA2
LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvbG9va3Vwcy9jZGIuYwky
MDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtNiw4ICs2LDggQEAKICAqIEV4
aW0gLSBDREIgZGF0YWJhc2UgbG9va3VwIG1vZHVsZQogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+CiAgKgorICogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAy
MDIwIC0gMjAyMgogICogQ29weXJpZ2h0IChjKSAxOTk4IE5pZ2VsIE1ldGhlcmluZ2hhbSwgUGxh
bmV0IE9ubGluZSBMdGQKLSAqIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAy
MAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNTcsMTkgKzE1NywxNCBAQAogCiBpZiAoKGZpbGVu
byA9IFVvcGVuKGZpbGVuYW1lLCBPX1JET05MWSwgMCkpIDwgMCkKICAgewotICBpbnQgc2F2ZV9l
cnJubyA9IGVycm5vOwotICAqZXJybXNnID0gc3RyaW5nX29wZW5fZmFpbGVkKGVycm5vLCAiJXMg
Zm9yIGNkYiBsb29rdXAiLCBmaWxlbmFtZSk7Ci0gIGVycm5vID0gc2F2ZV9lcnJubzsKKyAgKmVy
cm1zZyA9IHN0cmluZ19vcGVuX2ZhaWxlZCgiJXMgZm9yIGNkYiBsb29rdXAiLCBmaWxlbmFtZSk7
CiAgIHJldHVybiBOVUxMOwogICB9CiAKIGlmIChmc3RhdChmaWxlbm8sICZzdGF0YnVmKSAhPSAw
KQogICB7Ci0gIGludCBzYXZlX2Vycm5vID0gZXJybm87Ci0gICplcnJtc2cgPSBzdHJpbmdfb3Bl
bl9mYWlsZWQoZXJybm8sCi0JCQkgICAgICAiZnN0YXQoJXMpIGZhaWxlZCAtIGNhbm5vdCBkbyBj
ZGIgbG9va3VwIiwKKyAgKmVycm1zZyA9IHN0cmluZ19vcGVuX2ZhaWxlZCgiZnN0YXQoJXMpIGZh
aWxlZCAtIGNhbm5vdCBkbyBjZGIgbG9va3VwIiwKIAkJCSAgICAgIGZpbGVuYW1lKTsKLSAgZXJy
bm8gPSBzYXZlX2Vycm5vOwogICByZXR1cm4gTlVMTDsKICAgfQogCkBAIC0xNzgsMTYgKzE3Mywx
MiBAQAogCiBpZiAoc3RhdGJ1Zi5zdF9zaXplIDwgQ0RCX0hBU0hfVEFCTEUpCiAgIHsKLSAgaW50
IHNhdmVfZXJybm8gPSBlcnJubzsKLSAgKmVycm1zZyA9IHN0cmluZ19vcGVuX2ZhaWxlZChlcnJu
bywKLQkJCSAgICAgICIlcyB0b28gc2hvcnQgZm9yIGNkYiBsb29rdXAiLAotCQkJICAgICAgZmls
ZW5hbWUpOwotICBlcnJubyA9IHNhdmVfZXJybm87CisgICplcnJtc2cgPSBzdHJpbmdfb3Blbl9m
YWlsZWQoIiVzIHRvbyBzaG9ydCBmb3IgY2RiIGxvb2t1cCIsIGZpbGVuYW1lKTsKICAgcmV0dXJu
IE5VTEw7CiAgIH0KIAogLyogSGF2aW5nIGdvdCBhIGZpbGUgb3BlbiB3ZSBuZWVkIHRoZSBzdHJ1
Y3R1cmUgdG8gcHV0IHRoaW5ncyBpbiAqLwotY2RicCA9IHN0b3JlX2dldChzaXplb2Yoc3RydWN0
IGNkYl9zdGF0ZSksIEZBTFNFKTsKK2NkYnAgPSBzdG9yZV9nZXQoc2l6ZW9mKHN0cnVjdCBjZGJf
c3RhdGUpLCBHRVRfVU5UQUlOVEVEKTsKIC8qIHN0b3JlX2dldCgpIGRvZXMgbm90IHJldHVybiBp
ZiBtZW1vcnkgd2FzIG5vdCBhdmFpbGFibGUuLi4gKi8KIC8qIHByZWxvYWQgdGhlIHN0cnVjdHVy
ZS4uLi4gKi8KIGNkYnAtPmZpbGVubyA9IGZpbGVubzsKQEAgLTIyMiw3ICsyMTMsNyBAQAogLyog
Z2V0IGEgYnVmZmVyIHRvIHN0YXNoIHRoZSBiYXNpYyBvZmZzZXRzIGluIC0gdGhpcyBzaG91bGQg
c3BlZWQKIHRoaW5ncyB1cCBhIGxvdCAtIGVzcGVjaWFsbHkgb24gbXVsdGlwbGUgbG9va3VwcyAq
LwogCi1jZGJwLT5jZGJfb2Zmc2V0cyA9IHN0b3JlX2dldChDREJfSEFTSF9UQUJMRSwgRkFMU0Up
OworY2RicC0+Y2RiX29mZnNldHMgPSBzdG9yZV9nZXQoQ0RCX0hBU0hfVEFCTEUsIEdFVF9VTlRB
SU5URUQpOwogCiAvKiBub3cgZmlsbCB0aGUgYnVmZmVyIHVwLi4uICovCiAKQEAgLTIzMSw4ICsy
MjIsNyBAQAogICAvKiByZWFkIG9mIGhhc2ggdGFibGUgZmFpbGVkLCBvaCBkZWFyLCBvaC4uLi4u
ICB0aW1lIHRvIGdpdmUgdXAgSSB0aGluay4uLi4KICAgY2FsbCB0aGUgY2xvc2Ugcm91dGluZSAo
ZGVhbGxvY3MgdGhlIG1lbW9yeSksIGFuZCByZXR1cm4gTlVMTCAqLwogCi0gICplcnJtc2cgPSBz
dHJpbmdfb3Blbl9mYWlsZWQoZXJybm8sCi0JCQkgICAgICAiY2Fubm90IHJlYWQgaGVhZGVyIGZy
b20gJXMgZm9yIGNkYiBsb29rdXAiLAorICAqZXJybXNnID0gc3RyaW5nX29wZW5fZmFpbGVkKCJj
YW5ub3QgcmVhZCBoZWFkZXIgZnJvbSAlcyBmb3IgY2RiIGxvb2t1cCIsCiAJCQkgICAgICBmaWxl
bmFtZSk7CiAgIGNkYl9jbG9zZShjZGJwKTsKICAgcmV0dXJuIE5VTEw7CkBAIC0yODEsOSArMjcx
LDYgQEAKIGhhc2hfb2ZmbGVuLAogaGFzaF9zbG90bm07CiAKLS8qIEtlZXAgcGlja3kgY29tcGls
ZXJzIGhhcHB5ICovCi1kb19jYWNoZSA9IGRvX2NhY2hlOwotCiBrZXlfaGFzaCA9IGNkYl9oYXNo
KGtleXN0cmluZywga2V5X2xlbik7CiAKIGhhc2hfb2Zmc2V0X2VudHJ5ID0gQ0RCX0hBU0hfRU5U
UlkgKiAoa2V5X2hhc2ggJiBDREJfSEFTSF9NQVNLKTsKQEAgLTM1Niw3ICszNDMsNyBAQAogCSAg
IC8qIC4uLiBhbmQgdGhlIHJldHVybmVkIHJlc3VsdC4gIEFzc3VtZSBpdCBpcyBub3QKIAkgICB0
YWludGVkLCBsYWNraW5nIGFueSB3YXkgb2YgdGVsbGluZy4gICovCiAKLQkgICAqcmVzdWx0ID0g
c3RvcmVfZ2V0KGl0ZW1fZGF0X2xlbiArIDEsIEZBTFNFKTsKKwkgICAqcmVzdWx0ID0gc3RvcmVf
Z2V0KGl0ZW1fZGF0X2xlbiArIDEsIEdFVF9VTlRBSU5URUQpOwogCSAgIG1lbWNweSgqcmVzdWx0
LCBpdGVtX3B0ciwgaXRlbV9kYXRfbGVuKTsKIAkgICAoKnJlc3VsdClbaXRlbV9kYXRfbGVuXSA9
IDA7CiAJICAgcmV0dXJuIE9LOwpAQCAtNDAwLDcgKzM4Nyw3IEBACiAgICAgaWYgKGl0ZW1fa2V5
X2xlbiA9PSBrZXlfbGVuKQogICAgICAgewkJCQkJLyogZmluYWxseSBjaGVjayBpZiBrZXkgbWF0
Y2hlcyAqLwogICAgICAgcm1hcmsgcmVzZXRfcG9pbnQgPSBzdG9yZV9tYXJrKCk7Ci0gICAgICB1
c2NoYXIgKiBpdGVtX2tleSA9IHN0b3JlX2dldChrZXlfbGVuLCBUUlVFKTsgLyoga2V5cyBsaWFi
bGUgdG8gYmUgdGFpbnRlZCAqLworICAgICAgdXNjaGFyICogaXRlbV9rZXkgPSBzdG9yZV9nZXQo
a2V5X2xlbiwgR0VUX1RBSU5URUQpOyAvKiBrZXlzIGxpYWJsZSB0byBiZSB0YWludGVkICovCiAK
ICAgICAgIGlmIChjZGJfYnJlYWQoY2RicC0+ZmlsZW5vLCBpdGVtX2tleSwga2V5X2xlbikgPT0g
LTEpIHJldHVybiBERUZFUjsKICAgICAgIGlmIChVc3RybmNtcChrZXlzdHJpbmcsIGl0ZW1fa2V5
LCBrZXlfbGVuKSA9PSAwKQpAQCAtNDE0LDcgKzQwMSw3IEBACiAgICAgICAgIC8qIHRoZW4gd2Ug
YnVpbGQgYSBuZXcgcmVzdWx0IHN0cmluZy4gIFdlIGtub3cgd2UgaGF2ZSBlbm91Z2gKICAgICAg
ICAgbWVtb3J5IHNvIGRpc2FibGUgQ292ZXJpdHkgZXJyb3JzIGFib3V0IHRoZSB0YWludGVkIGl0
ZW1fZGF0X2tlbiAqLwogCi0gICAgICAgICpyZXN1bHQgPSBzdG9yZV9nZXQoaXRlbV9kYXRfbGVu
ICsgMSwgRkFMU0UpOworICAgICAgICAqcmVzdWx0ID0gc3RvcmVfZ2V0KGl0ZW1fZGF0X2xlbiAr
IDEsIEdFVF9VTlRBSU5URUQpOwogICAgICAgICAvKiBjb3Zlcml0eVt0YWludGVkX2RhdGFdICov
CiAgICAgICAgIGlmIChjZGJfYnJlYWQoY2RicC0+ZmlsZW5vLCAqcmVzdWx0LCBpdGVtX2RhdF9s
ZW4pID09IC0xKQogCSAgcmV0dXJuIERFRkVSOwpAQCAtNDcxLDEyICs0NTgsMTMgQEAKIAogI2lu
Y2x1ZGUgIi4uL3ZlcnNpb24uaCIKIAotdm9pZAotY2RiX3ZlcnNpb25fcmVwb3J0KEZJTEUgKmYp
Citnc3RyaW5nICoKK2NkYl92ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykKIHsKICNpZmRlZiBE
WU5MT09LVVAKLWZwcmludGYoZiwgIkxpYnJhcnkgdmVyc2lvbjogQ0RCOiBFeGltIHZlcnNpb24g
JXNcbiIsIEVYSU1fVkVSU0lPTl9TVFIpOworZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcsICJMaWJy
YXJ5IHZlcnNpb246IENEQjogRXhpbSB2ZXJzaW9uICVzXG4iLCBFWElNX1ZFUlNJT05fU1RSKTsK
ICNlbmRpZgorcmV0dXJuIGc7CiB9CiAKIApkaWZmIC11ciBleGltLm9yaWcvc3JjL2xvb2t1cHMv
ZGJtZGIuYyBleGltL3NyYy9sb29rdXBzL2RibWRiLmMKLS0tIGV4aW0ub3JpZy9zcmMvbG9va3Vw
cy9kYm1kYi5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3Ny
Yy9sb29rdXBzL2RibWRiLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAg
LTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdl
bnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAq
LwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAq
LwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUg
dGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAq
LwogCiAjaW5jbHVkZSAiLi4vZXhpbS5oIgpAQCAtMjEsMTYgKzIxLDExIEBACiB7CiB1c2NoYXIg
KiBkaXJuYW1lID0gc3RyaW5nX2NvcHkoZmlsZW5hbWUpOwogdXNjaGFyICogczsKLUVYSU1fREIg
KnlpZWxkID0gTlVMTDsKK0VYSU1fREIgKiB5aWVsZCA9IE5VTEw7CiAKIGlmICgocyA9IFVzdHJy
Y2hyKGRpcm5hbWUsICcvJykpKSAqcyA9ICdcMCc7Ci1FWElNX0RCT1BFTihmaWxlbmFtZSwgZGly
bmFtZSwgT19SRE9OTFksIDAsICZ5aWVsZCk7Ci1pZiAoIXlpZWxkKQotICB7Ci0gIGludCBzYXZl
X2Vycm5vID0gZXJybm87Ci0gICplcnJtc2cgPSBzdHJpbmdfb3Blbl9mYWlsZWQoZXJybm8sICIl
cyBhcyBhICVzIGZpbGUiLCBmaWxlbmFtZSwgRVhJTV9EQlRZUEUpOwotICBlcnJubyA9IHNhdmVf
ZXJybm87Ci0gIH0KK2lmICghKHlpZWxkID0gZXhpbV9kYm9wZW4oZmlsZW5hbWUsIGRpcm5hbWUs
IE9fUkRPTkxZLCAwKSkpCisgICplcnJtc2cgPSBzdHJpbmdfb3Blbl9mYWlsZWQoIiVzIGFzIGEg
JXMgZmlsZSIsIGZpbGVuYW1lLCBFWElNX0RCVFlQRSk7CiByZXR1cm4geWllbGQ7CiB9CiAKQEAg
LTUyLDcgKzQ3LDYgQEAKICAgZ2lkX3QgKm93bmdyb3VwcywgdXNjaGFyICoqZXJybXNnKQogewog
aW50IHJjOwotaGFuZGxlID0gaGFuZGxlOyAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBw
eSAqLwogCiAjaWYgZGVmaW5lZChVU0VfREIpIHx8IGRlZmluZWQoVVNFX1REQikgfHwgZGVmaW5l
ZChVU0VfR0RCTSkKIHJjID0gbGZfY2hlY2tfZmlsZSgtMSwgZmlsZW5hbWUsIFNfSUZSRUcsIG1v
ZGVtYXNrLCBvd25lcnMsIG93bmdyb3VwcywKQEAgLTk4LDE5ICs5MiwxNyBAQAogRVhJTV9EQiAq
ZCA9IChFWElNX0RCICopaGFuZGxlOwogRVhJTV9EQVRVTSBrZXksIGRhdGE7CiAKLWZpbGVuYW1l
ID0gZmlsZW5hbWU7ICAgIC8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1lcnJtc2cg
PSBlcnJtc2c7Ci1kb19jYWNoZSA9IGRvX2NhY2hlOwotCi1FWElNX0RBVFVNX0lOSVQoa2V5KTsg
ICAgICAgICAgICAgICAvKiBTb21lIERCTSBsaWJyYXJpZXMgcmVxdWlyZSBkYXR1bXMgdG8gKi8K
LUVYSU1fREFUVU1fSU5JVChkYXRhKTsgICAgICAgICAgICAgIC8qIGJlIGNsZWFyZWQgYmVmb3Jl
IHVzZS4gKi8KLUVYSU1fREFUVU1fREFUQShrZXkpID0gQ1Mga2V5c3RyaW5nOwotRVhJTV9EQVRV
TV9TSVpFKGtleSkgPSBsZW5ndGggKyAxOworZXhpbV9kYXR1bV9pbml0KCZrZXkpOyAgICAgICAg
ICAgICAgIC8qIFNvbWUgREJNIGxpYnJhcmllcyByZXF1aXJlIGRhdHVtcyB0byAqLworZXhpbV9k
YXR1bV9pbml0KCZkYXRhKTsgICAgICAgICAgICAgIC8qIGJlIGNsZWFyZWQgYmVmb3JlIHVzZS4g
Ki8KK2xlbmd0aCsrOworZXhpbV9kYXR1bV9kYXRhX3NldCgma2V5LAorICBtZW1jcHkoc3RvcmVf
Z2V0KGxlbmd0aCwga2V5c3RyaW5nKSwga2V5c3RyaW5nLCBsZW5ndGgpKTsgLyoga2V5IGNhbiBo
YXZlIGVtYmVkZGVkIE5VTCAqLworZXhpbV9kYXR1bV9zaXplX3NldCgma2V5LCBsZW5ndGgpOwog
Ci1pZiAoRVhJTV9EQkdFVChkLCBrZXksIGRhdGEpKQoraWYgKGV4aW1fZGJnZXQoZCwgJmtleSwg
JmRhdGEpKQogICB7Ci0gICpyZXN1bHQgPSBzdHJpbmdfY29weW4oVVMgRVhJTV9EQVRVTV9EQVRB
KGRhdGEpLCBFWElNX0RBVFVNX1NJWkUoZGF0YSkpOwotICBFWElNX0RBVFVNX0ZSRUUoZGF0YSk7
ICAgICAgICAgICAgLyogU29tZSBEQk0gbGlicmFyaWVzIG5lZWQgYSBmcmVlKCkgY2FsbCAqLwor
ICAqcmVzdWx0ID0gc3RyaW5nX2NvcHluKGV4aW1fZGF0dW1fZGF0YV9nZXQoJmRhdGEpLCBleGlt
X2RhdHVtX3NpemVfZ2V0KCZkYXRhKSk7CisgIGV4aW1fZGF0dW1fZnJlZSgmZGF0YSk7ICAgICAg
ICAgICAgLyogU29tZSBEQk0gbGlicmFyaWVzIG5lZWQgYSBmcmVlKCkgY2FsbCAqLwogICByZXR1
cm4gT0s7CiAgIH0KIHJldHVybiBGQUlMOwpAQCAtMTU4LDcgKzE1MCw3IEBACiBvciBsZXNzIHRo
YW4sIHRoZSBsZW5ndGggb2YgdGhlIGRlbGltaXRlZCBsaXN0IHBhc3NlZCBpbiArIDEuICovCiAK
IGJ1ZmxlbiA9IGxlbmd0aCArIDM7Ci1rZXlfYnVmZmVyID0gc3RvcmVfZ2V0KGJ1ZmxlbiwgaXNf
dGFpbnRlZChrZXlzdHJpbmcpKTsKK2tleV9idWZmZXIgPSBzdG9yZV9nZXQoYnVmbGVuLCBrZXlz
dHJpbmcpOwogCiBrZXlfYnVmZmVyWzBdID0gJ1wwJzsKIApAQCAtMjIzLDcgKzIxNSw3IEBACiB2
b2lkCiBzdGF0aWMgZGJtZGJfY2xvc2Uodm9pZCAqaGFuZGxlKQogewotRVhJTV9EQkNMT1NFKChF
WElNX0RCICopaGFuZGxlKTsKK2V4aW1fZGJjbG9zZSgoRVhJTV9EQiAqKWhhbmRsZSk7CiB9CiAK
IApAQCAtMjM2LDEyICsyMjgsMTMgQEAKIAogI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKIAotdm9p
ZAotZGJtX3ZlcnNpb25fcmVwb3J0KEZJTEUgKmYpCitnc3RyaW5nICoKK2RibV92ZXJzaW9uX3Jl
cG9ydChnc3RyaW5nICogZykKIHsKICNpZmRlZiBEWU5MT09LVVAKLWZwcmludGYoZiwgIkxpYnJh
cnkgdmVyc2lvbjogREJNOiBFeGltIHZlcnNpb24gJXNcbiIsIEVYSU1fVkVSU0lPTl9TVFIpOwor
ZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcsICJMaWJyYXJ5IHZlcnNpb246IERCTTogRXhpbSB2ZXJz
aW9uICVzXG4iLCBFWElNX1ZFUlNJT05fU1RSKTsKICNlbmRpZgorcmV0dXJuIGc7CiB9CiAKIApk
aWZmIC11ciBleGltLm9yaWcvc3JjL2xvb2t1cHMvZG5zZGIuYyBleGltL3NyYy9sb29rdXBzL2Ru
c2RiLmMKLS0tIGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9kbnNkYi5jCTIwMjMtMDYtMDQgMTY6MjI6
MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9sb29rdXBzL2Ruc2RiLmMJMjAyMi0wNi0y
MyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0g
YW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUg
RXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJz
aXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhp
bSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRp
b25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAjaW5jbHVkZSAiLi4vZXhpbS5oIgpA
QCAtODAsOCArODAsNiBAQAogc3RhdGljIHZvaWQgKgogZG5zZGJfb3Blbihjb25zdCB1c2NoYXIg
KiBmaWxlbmFtZSwgdXNjaGFyICoqZXJybXNnKQogewotZmlsZW5hbWUgPSBmaWxlbmFtZTsgICAv
KiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotZXJybXNnID0gZXJybXNnOyAgICAgICAv
KiBEaXR0byAqLwogcmV0dXJuICh2b2lkICopKC0xKTsgICAvKiBBbnkgbm9uLTAgdmFsdWUgKi8K
IH0KIApAQCAtMTU1LDExICsxNTMsNiBAQAogCiBnc3RyaW5nICogeWllbGQgPSBzdHJpbmdfZ2V0
KDI1Nik7CiAKLWhhbmRsZSA9IGhhbmRsZTsgICAgICAgICAgIC8qIEtlZXAgcGlja3kgY29tcGls
ZXJzIGhhcHB5ICovCi1maWxlbmFtZSA9IGZpbGVuYW1lOwotbGVuZ3RoID0gbGVuZ3RoOwotZG9f
Y2FjaGUgPSBkb19jYWNoZTsKLQogLyogSWYgdGhlIHN0cmluZyBzdGFydHMgd2l0aCAnPicgd2Ug
Y2hhbmdlIHRoZSBvdXRwdXQgc2VwYXJhdG9yLgogSWYgaXQncyBmb2xsb3dlZCBieSAnOycgb3Ig
JywnIHdlIHNldCB0aGUgVFhUIG91dHB1dCBzZXBhcmF0b3IuICovCiAKQEAgLTE5Nyw3ICsxOTAs
OCBAQAogICAgIGVsc2UKICAgICAgIHsKICAgICAgICplcnJtc2cgPSBVUyJ1bnN1cHBvcnRlZCBk
bnNkYiBkZWZlciBiZWhhdmlvdXIiOwotICAgICAgcmV0dXJuIERFRkVSOworICAgICAgcmMgPSBE
RUZFUjsKKyAgICAgIGdvdG8gb3V0OwogICAgICAgfQogICAgIH0KICAgZWxzZSBpZiAoc3RybmNt
cGljKGtleXN0cmluZywgVVMiZG5zc2VjXyIsIDcpID09IDApCkBAIC0yMTIsNyArMjA2LDggQEAK
ICAgICBlbHNlCiAgICAgICB7CiAgICAgICAqZXJybXNnID0gVVMidW5zdXBwb3J0ZWQgZG5zZGIg
ZG5zc2VjIGJlaGF2aW91ciI7Ci0gICAgICByZXR1cm4gREVGRVI7CisgICAgICByYyA9IERFRkVS
OworICAgICAgZ290byBvdXQ7CiAgICAgICB9CiAgICAgfQogICBlbHNlIGlmIChzdHJuY21waWMo
a2V5c3RyaW5nLCBVUyJyZXRyYW5zXyIsIDgpID09IDApCkBAIC0yMjEsNyArMjE2LDggQEAKICAg
ICBpZiAoKHRpbWVvdXRfc2VjID0gcmVhZGNvbmZfcmVhZHRpbWUoa2V5c3RyaW5nICs9IDgsICcs
JywgRkFMU0UpKSA8PSAwKQogICAgICAgewogICAgICAgKmVycm1zZyA9IFVTInVuc3VwcG9ydGVk
IGRuc2RiIHRpbWVvdXQgdmFsdWUiOwotICAgICAgcmV0dXJuIERFRkVSOworICAgICAgcmMgPSBE
RUZFUjsKKyAgICAgIGdvdG8gb3V0OwogICAgICAgfQogICAgIGRuc19yZXRyYW5zID0gdGltZW91
dF9zZWM7CiAgICAgd2hpbGUgKCprZXlzdHJpbmcgIT0gJywnKSBrZXlzdHJpbmcrKzsKQEAgLTIz
Miw3ICsyMjgsOCBAQAogICAgIGlmICgocmV0cmllcyA9IChpbnQpc3RydG9sKENDUyBrZXlzdHJp
bmcgKyA2LCBDU1MgJmtleXN0cmluZywgMCkpIDwgMCkKICAgICAgIHsKICAgICAgICplcnJtc2cg
PSBVUyJ1bnN1cHBvcnRlZCBkbnNkYiByZXRyeSBjb3VudCI7Ci0gICAgICByZXR1cm4gREVGRVI7
CisgICAgICByYyA9IERFRkVSOworICAgICAgZ290byBvdXQ7CiAgICAgICB9CiAgICAgZG5zX3Jl
dHJ5ID0gcmV0cmllczsKICAgICB9CkBAIC0yNDMsNyArMjQwLDggQEAKICAgaWYgKCprZXlzdHJp
bmcrKyAhPSAnLCcpCiAgICAgewogICAgICplcnJtc2cgPSBVUyJkbnNkYiBtb2RpZmllciBzeW50
YXggZXJyb3IiOwotICAgIHJldHVybiBERUZFUjsKKyAgICByYyA9IERFRkVSOworICAgIGdvdG8g
b3V0OwogICAgIH0KICAgd2hpbGUgKGlzc3BhY2UoKmtleXN0cmluZykpIGtleXN0cmluZysrOwog
ICB9CkBAIC0yNzEsNyArMjY5LDggQEAKICAgaWYgKGkgPj0gbmVsZW0odHlwZV9uYW1lcykpCiAg
ICAgewogICAgICplcnJtc2cgPSBVUyJ1bnN1cHBvcnRlZCBETlMgcmVjb3JkIHR5cGUiOwotICAg
IHJldHVybiBERUZFUjsKKyAgICByYyA9IERFRkVSOworICAgIGdvdG8gb3V0OwogICAgIH0KIAog
ICBrZXlzdHJpbmcgPSBlcXVhbHMgKyAxOwpAQCAtMzY2LDcgKzM2NSw4IEBACiAJZG5zX3JldHJh
bnMgPSBzYXZlX3JldHJhbnM7CiAJZG5zX3JldHJ5ID0gc2F2ZV9yZXRyeTsKIAlkbnNfaW5pdChG
QUxTRSwgRkFMU0UsIEZBTFNFKTsJCQkvKiBjbHIgZG5zc2VjIGJpdCAqLwotCXJldHVybiBERUZF
UjsJCQkJCS8qIGFsd2F5cyBkZWZlciAqLworCXJjID0gREVGRVI7CQkJCQkvKiBhbHdheXMgZGVm
ZXIgKi8KKwlnb3RvIG91dDsKIAl9CiAgICAgICBpZiAoZGVmZXJfbW9kZSA9PSBQQVNTKSBmYWls
cmMgPSBERUZFUjsgICAgICAgICAvKiBkZWZlciBvbmx5IGlmIGFsbCBkbyAqLwogICAgICAgY29u
dGludWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHJlYXQgZGVm
ZXIgYXMgZmFpbCAqLwpAQCAtNTU2LDEwICs1NTYsMTggQEAKIGRuc19yZXRyeSA9IHNhdmVfcmV0
cnk7CiBkbnNfaW5pdChGQUxTRSwgRkFMU0UsIEZBTFNFKTsJLyogY2xlYXIgdGhlIGRuc3NlYyBi
aXQgZm9yIGdldGFkZHJieW5hbWUgKi8KIAotaWYgKCF5aWVsZCB8fCAheWllbGQtPnB0cikgcmV0
dXJuIGZhaWxyYzsKK2lmICgheWllbGQgfHwgIXlpZWxkLT5wdHIpCisgIHJjID0gZmFpbHJjOwor
ZWxzZQorICB7CisgICpyZXN1bHQgPSBzdHJpbmdfZnJvbV9nc3RyaW5nKHlpZWxkKTsKKyAgcmMg
PSBPSzsKKyAgfQorCitvdXQ6CiAKLSpyZXN1bHQgPSBzdHJpbmdfZnJvbV9nc3RyaW5nKHlpZWxk
KTsKLXJldHVybiBPSzsKK3N0b3JlX2ZyZWVfZG5zX2Fuc3dlcihkbnNhKTsKK3JldHVybiByYzsK
IH0KIAogCkBAIC01NzIsMTIgKzU4MCwxMyBAQAogCiAjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgog
Ci12b2lkCi1kbnNkYl92ZXJzaW9uX3JlcG9ydChGSUxFICpmKQorZ3N0cmluZyAqCitkbnNkYl92
ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykKIHsKICNpZmRlZiBEWU5MT09LVVAKLWZwcmludGYo
ZiwgIkxpYnJhcnkgdmVyc2lvbjogRE5TREI6IEV4aW0gdmVyc2lvbiAlc1xuIiwgRVhJTV9WRVJT
SU9OX1NUUik7CitnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywgIkxpYnJhcnkgdmVyc2lvbjogRE5T
REI6IEV4aW0gdmVyc2lvbiAlc1xuIiwgRVhJTV9WRVJTSU9OX1NUUik7CiAjZW5kaWYKK3JldHVy
biBnOwogfQogCiAKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9sb29rdXBzL2RzZWFyY2guYyBleGlt
L3NyYy9sb29rdXBzL2RzZWFyY2guYwotLS0gZXhpbS5vcmlnL3NyYy9sb29rdXBzL2RzZWFyY2gu
YwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvbG9va3Vw
cy9kc2VhcmNoLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCAr
Miw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAg
KgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAor
LyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyog
Q29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxNSAqLwotLyog
Q29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZp
bGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAv
KiBUaGUgaWRlYSBmb3IgdGhpcyBjb2RlIGNhbWUgZnJvbSBNYXR0aGV3IEJ5bmctTWFkZGljaywg
YnV0IGhpcyBvcmlnaW5hbCBoYXMKQEAgLTMxLDkgKzMxLDcgQEAKIERJUiAqIGRwID0gZXhpbV9v
cGVuZGlyKGRpcm5hbWUpOwogaWYgKCFkcCkKICAgewotICBpbnQgc2F2ZV9lcnJubyA9IGVycm5v
OwotICAqZXJybXNnID0gc3RyaW5nX29wZW5fZmFpbGVkKGVycm5vLCAiJXMgZm9yIGRpcmVjdG9y
eSBzZWFyY2giLCBkaXJuYW1lKTsKLSAgZXJybm8gPSBzYXZlX2Vycm5vOworICAqZXJybXNnID0g
c3RyaW5nX29wZW5fZmFpbGVkKCIlcyBmb3IgZGlyZWN0b3J5IHNlYXJjaCIsIGRpcm5hbWUpOwog
ICByZXR1cm4gTlVMTDsKICAgfQogY2xvc2VkaXIoZHApOwpAQCAtODYsMTAgKzg0LDYgQEAKIHVz
Y2hhciAqIGZpbGVuYW1lOwogdW5zaWduZWQgZmxhZ3MgPSAwOwogCi1oYW5kbGUgPSBoYW5kbGU7
ICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotbGVuZ3RoID0gbGVuZ3RoOwotZG9f
Y2FjaGUgPSBkb19jYWNoZTsKLQogaWYgKFVzdHJjaHIoa2V5c3RyaW5nLCAnLycpICE9IDApCiAg
IHsKICAgKmVycm1zZyA9IHN0cmluZ19zcHJpbnRmKCJrZXkgZm9yIGRzZWFyY2ggbG9va3VwIGNv
bnRhaW5zIGEgc2xhc2g6ICVzIiwKQEAgLTEzMCw3ICsxMjQsNyBAQAogICB7CiAgIC8qIFNpbmNl
IHRoZSBmaWxlbmFtZSBleGlzdHMgaW4gdGhlIGZpbGVzeXN0ZW0sIHdlIGNhbiByZXR1cm4gYQog
ICBub24tdGFpbnRlZCByZXN1bHQuICovCi0gICpyZXN1bHQgPSBzdHJpbmdfY29weV90YWludChm
bGFncyAmIFJFVF9GVUxMID8gZmlsZW5hbWUgOiBrZXlzdHJpbmcsIEZBTFNFKTsKKyAgKnJlc3Vs
dCA9IHN0cmluZ19jb3B5X3RhaW50KGZsYWdzICYgUkVUX0ZVTEwgPyBmaWxlbmFtZSA6IGtleXN0
cmluZywgR0VUX1VOVEFJTlRFRCk7CiAgIHJldHVybiBPSzsKICAgfQogCkBAIC0xNjQsMTIgKzE1
OCwxMyBAQAogCiAjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgogCi12b2lkCi1kc2VhcmNoX3ZlcnNp
b25fcmVwb3J0KEZJTEUgKmYpCitnc3RyaW5nICoKK2RzZWFyY2hfdmVyc2lvbl9yZXBvcnQoZ3N0
cmluZyAqIGcpCiB7CiAjaWZkZWYgRFlOTE9PS1VQCi1mcHJpbnRmKGYsICJMaWJyYXJ5IHZlcnNp
b246IGRzZWFyY2g6IEV4aW0gdmVyc2lvbiAlc1xuIiwgRVhJTV9WRVJTSU9OX1NUUik7CitnID0g
c3RyaW5nX2ZtdF9hcHBlbmQoZywgIkxpYnJhcnkgdmVyc2lvbjogZHNlYXJjaDogRXhpbSB2ZXJz
aW9uICVzXG4iLCBFWElNX1ZFUlNJT05fU1RSKTsKICNlbmRpZgorcmV0dXJuIGc7CiB9CiAKIApk
aWZmIC11ciBleGltLm9yaWcvc3JjL2xvb2t1cHMvaWJhc2UuYyBleGltL3NyYy9sb29rdXBzL2li
YXNlLmMKLS0tIGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9pYmFzZS5jCTIwMjMtMDYtMDQgMTY6MjI6
MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9sb29rdXBzL2liYXNlLmMJMjAyMi0wNi0y
MyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0g
YW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUg
RXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJz
aXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhp
bSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRp
b25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBUaGUgY29kZSBpbiB0aGlzIG1v
ZHVsZSB3YXMgY29udHJpYnV0ZWQgYnkgQXJkIEJpZXNoZXV2ZWwuICovCkBAIC0xNzcsNyArMTc3
LDcgQEAKICAgfQogZWxzZQogICB7Ci0gIGNuID0gc3RvcmVfZ2V0KHNpemVvZihpYmFzZV9jb25u
ZWN0aW9uKSwgRkFMU0UpOworICBjbiA9IHN0b3JlX2dldChzaXplb2YoaWJhc2VfY29ubmVjdGlv
biksIEdFVF9VTlRBSU5URUQpOwogICBjbi0+c2VydmVyID0gc2VydmVyX2NvcHk7CiAgIGNuLT5k
YmggPSBOVUxMOwogICBjbi0+dHJhbnNoID0gTlVMTDsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCiAv
KiBMYWNraW5nIGFueSBpbmZvcm1hdGlvbiwgYXNzdW1lIHRoYXQgdGhlIGRhdGEgaXMgdW50YWlu
dGVkICovCiByZXNldF9wb2ludCA9IHN0b3JlX21hcmsoKTsKLW91dF9zcWxkYSA9IHN0b3JlX2dl
dChYU1FMREFfTEVOR1RIKDEpLCBGQUxTRSk7CitvdXRfc3FsZGEgPSBzdG9yZV9nZXQoWFNRTERB
X0xFTkdUSCgxKSwgR0VUX1VOVEFJTlRFRCk7CiBvdXRfc3FsZGEtPnZlcnNpb24gPSBTUUxEQV9W
RVJTSU9OMTsKIG91dF9zcWxkYS0+c3FsbiA9IDE7CiAKQEAgLTI3Miw3ICsyNzIsNyBAQAogLyog
cmUtYWxsb2NhdGUgdGhlIG91dHB1dCBzdHJ1Y3R1cmUgaWYgdGhlcmUncyBtb3JlIHRoYW4gb25l
IGZpZWxkICovCiBpZiAob3V0X3NxbGRhLT5zcWxuIDwgb3V0X3NxbGRhLT5zcWxkKQogICB7Ci0g
IFhTUUxEQSAqbmV3X3NxbGRhID0gc3RvcmVfZ2V0KFhTUUxEQV9MRU5HVEgob3V0X3NxbGRhLT5z
cWxkKSwgRkFMU0UpOworICBYU1FMREEgKm5ld19zcWxkYSA9IHN0b3JlX2dldChYU1FMREFfTEVO
R1RIKG91dF9zcWxkYS0+c3FsZCksIEdFVF9VTlRBSU5URUQpOwogICBpZiAoaXNjX2RzcWxfZGVz
Y3JpYmUKICAgICAgIChzdGF0dXMsICZzdG10aCwgb3V0X3NxbGRhLT52ZXJzaW9uLCBuZXdfc3Fs
ZGEpKQogICAgIHsKQEAgLTI5NCw0NiArMjk0LDQ2IEBACiAgIHN3aXRjaCAodmFyLT5zcWx0eXBl
ICYgfjEpCiAgICAgewogICAgIGNhc2UgU1FMX1ZBUllJTkc6Ci0JdmFyLT5zcWxkYXRhID0gQ1Mg
c3RvcmVfZ2V0KHNpemVvZihjaGFyKSAqIHZhci0+c3FsbGVuICsgMiwgRkFMU0UpOworCXZhci0+
c3FsZGF0YSA9IENTIHN0b3JlX2dldChzaXplb2YoY2hhcikgKiB2YXItPnNxbGxlbiArIDIsIEdF
VF9VTlRBSU5URUQpOwogCWJyZWFrOwogICAgIGNhc2UgU1FMX1RFWFQ6Ci0JdmFyLT5zcWxkYXRh
ID0gQ1Mgc3RvcmVfZ2V0KHNpemVvZihjaGFyKSAqIHZhci0+c3FsbGVuLCBGQUxTRSk7CisJdmFy
LT5zcWxkYXRhID0gQ1Mgc3RvcmVfZ2V0KHNpemVvZihjaGFyKSAqIHZhci0+c3FsbGVuLCBHRVRf
VU5UQUlOVEVEKTsKIAlicmVhazsKICAgICBjYXNlIFNRTF9TSE9SVDoKLQl2YXItPnNxbGRhdGEg
PSBDUyAgc3RvcmVfZ2V0KHNpemVvZihzaG9ydCksIEZBTFNFKTsKKwl2YXItPnNxbGRhdGEgPSBD
UyAgc3RvcmVfZ2V0KHNpemVvZihzaG9ydCksIEdFVF9VTlRBSU5URUQpOwogCWJyZWFrOwogICAg
IGNhc2UgU1FMX0xPTkc6Ci0JdmFyLT5zcWxkYXRhID0gQ1MgIHN0b3JlX2dldChzaXplb2YoSVND
X0xPTkcpLCBGQUxTRSk7CisJdmFyLT5zcWxkYXRhID0gQ1MgIHN0b3JlX2dldChzaXplb2YoSVND
X0xPTkcpLCBHRVRfVU5UQUlOVEVEKTsKIAlicmVhazsKICNpZmRlZiBTUUxfSU5UNjQKICAgICBj
YXNlIFNRTF9JTlQ2NDoKLQl2YXItPnNxbGRhdGEgPSBDUyAgc3RvcmVfZ2V0KHNpemVvZihJU0Nf
SU5UNjQpLCBGQUxTRSk7CisJdmFyLT5zcWxkYXRhID0gQ1MgIHN0b3JlX2dldChzaXplb2YoSVND
X0lOVDY0KSwgR0VUX1VOVEFJTlRFRCk7CiAJYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIFNRTF9G
TE9BVDoKLQl2YXItPnNxbGRhdGEgPSBDUyAgc3RvcmVfZ2V0KHNpemVvZihmbG9hdCksIEZBTFNF
KTsKKwl2YXItPnNxbGRhdGEgPSBDUyAgc3RvcmVfZ2V0KHNpemVvZihmbG9hdCksIEdFVF9VTlRB
SU5URUQpOwogCWJyZWFrOwogICAgIGNhc2UgU1FMX0RPVUJMRToKLQl2YXItPnNxbGRhdGEgPSBD
UyAgc3RvcmVfZ2V0KHNpemVvZihkb3VibGUpLCBGQUxTRSk7CisJdmFyLT5zcWxkYXRhID0gQ1Mg
IHN0b3JlX2dldChzaXplb2YoZG91YmxlKSwgR0VUX1VOVEFJTlRFRCk7CiAJYnJlYWs7CiAjaWZk
ZWYgU1FMX1RJTUVTVEFNUAogICAgIGNhc2UgU1FMX0RBVEU6Ci0JdmFyLT5zcWxkYXRhID0gQ1Mg
IHN0b3JlX2dldChzaXplb2YoSVNDX1FVQUQpLCBGQUxTRSk7CisJdmFyLT5zcWxkYXRhID0gQ1Mg
IHN0b3JlX2dldChzaXplb2YoSVNDX1FVQUQpLCBHRVRfVU5UQUlOVEVEKTsKIAlicmVhazsKICNl
bHNlCiAgICAgY2FzZSBTUUxfVElNRVNUQU1QOgotCXZhci0+c3FsZGF0YSA9IENTICBzdG9yZV9n
ZXQoc2l6ZW9mKElTQ19USU1FU1RBTVApLCBGQUxTRSk7CisJdmFyLT5zcWxkYXRhID0gQ1MgIHN0
b3JlX2dldChzaXplb2YoSVNDX1RJTUVTVEFNUCksIEdFVF9VTlRBSU5URUQpOwogCWJyZWFrOwog
ICAgIGNhc2UgU1FMX1RZUEVfREFURToKLQl2YXItPnNxbGRhdGEgPSBDUyAgc3RvcmVfZ2V0KHNp
emVvZihJU0NfREFURSksIEZBTFNFKTsKKwl2YXItPnNxbGRhdGEgPSBDUyAgc3RvcmVfZ2V0KHNp
emVvZihJU0NfREFURSksIEdFVF9VTlRBSU5URUQpOwogCWJyZWFrOwogICAgIGNhc2UgU1FMX1RZ
UEVfVElNRToKLQl2YXItPnNxbGRhdGEgPSBDUyAgc3RvcmVfZ2V0KHNpemVvZihJU0NfVElNRSks
IEZBTFNFKTsKKwl2YXItPnNxbGRhdGEgPSBDUyAgc3RvcmVfZ2V0KHNpemVvZihJU0NfVElNRSks
IEdFVF9VTlRBSU5URUQpOwogCWJyZWFrOwogICAjZW5kaWYKICAgICB9CiAgIGlmICh2YXItPnNx
bHR5cGUgJiAxKQotICAgIHZhci0+c3FsaW5kID0gKHNob3J0ICopIHN0b3JlX2dldChzaXplb2Yo
c2hvcnQpLCBGQUxTRSk7CisgICAgdmFyLT5zcWxpbmQgPSAoc2hvcnQgKikgc3RvcmVfZ2V0KHNp
emVvZihzaG9ydCksIEdFVF9VTlRBSU5URUQpOwogICB9CiAKIC8qIGZpbmFsbHksIHdlJ3JlIHJl
YWR5IHRvIGV4ZWN1dGUgdGhlIHN0YXRlbWVudCAqLwpAQCAtNDU3LDE0ICs0NTcsMTAgQEAKIGlu
dCBzZXAgPSAwOwogdXNjaGFyICpzZXJ2ZXI7CiB1c2NoYXIgKmxpc3QgPSBpYmFzZV9zZXJ2ZXJz
OwotdXNjaGFyIGJ1ZmZlcls1MTJdOwotCi0vKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAq
LwotZG9fY2FjaGUgPSBkb19jYWNoZTsKIAogREVCVUcoRF9sb29rdXApIGRlYnVnX3ByaW50Zl9p
bmRlbnQoIkludGVyYmFzZSBxdWVyeTogJXNcbiIsIHF1ZXJ5KTsKIAotd2hpbGUgKChzZXJ2ZXIg
PSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNlcCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkp
KQord2hpbGUgKChzZXJ2ZXIgPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNlcCwgTlVMTCwg
MCkpKQogICB7CiAgIEJPT0wgZGVmZXJfYnJlYWsgPSBGQUxTRTsKICAgaW50IHJjID0gcGVyZm9y
bV9pYmFzZV9zZWFyY2gocXVlcnksIHNlcnZlciwgcmVzdWx0LCBlcnJtc2csICZkZWZlcl9icmVh
ayk7CkBAIC00OTYsNTEgKzQ5MiwzMiBAQAogQXJndW1lbnRzOgogICBzICAgICAgICAgIHRoZSBz
dHJpbmcgdG8gYmUgcXVvdGVkCiAgIG9wdCAgICAgICAgYWRkaXRpb25hbCBvcHRpb24gdGV4dCBv
ciBOVUxMIGlmIG5vbmUKKyAgaWR4CSAgICAgbG9va3VwIHR5cGUgaW5kZXgKIAogUmV0dXJuczog
ICAgIHRoZSBwcm9jZXNzZWQgc3RyaW5nIG9yIE5VTEwgZm9yIGEgYmFkIG9wdGlvbgogKi8KIAot
c3RhdGljIHVzY2hhciAqaWJhc2VfcXVvdGUodXNjaGFyICogcywgdXNjaGFyICogb3B0KQorc3Rh
dGljIHVzY2hhciAqCitpYmFzZV9xdW90ZSh1c2NoYXIgKiBzLCB1c2NoYXIgKiBvcHQsIHVuc2ln
bmVkIGlkeCkKIHsKLSAgICByZWdpc3RlciBpbnQgYzsKLSAgICBpbnQgY291bnQgPSAwOwotICAg
IHVzY2hhciAqdCA9IHM7Ci0gICAgdXNjaGFyICpxdW90ZWQ7Ci0KLSAgICBpZiAob3B0ICE9IE5V
TEwpCi0gICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIE5vIG9wdGlvbnMgcmVjb2du
aXplZCAqLwotCi0gICAgd2hpbGUgKChjID0gKnQrKykgIT0gMCkKLSAgICAgICAgaWYgKFVzdHJj
aHIoIlxuXHRcclxiXCdcIlxcIiwgYykgIT0gTlVMTCkKLSAgICAgICAgICAgIGNvdW50Kys7Ci0K
LSAgICBpZiAoY291bnQgPT0gMCkKLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgdCA9IHF1b3RlZCA9
IHN0b3JlX2dldChVc3RybGVuKHMpICsgY291bnQgKyAxLCBGQUxTRSk7Ci0KLSAgICB3aGlsZSAo
KGMgPSAqcysrKSAhPSAwKSB7Ci0gICAgICAgIGlmIChVc3RyY2hyKCInIiwgYykgIT0gTlVMTCkg
ewotICAgICAgICAgICAgKnQrKyA9ICdcJyc7Ci0gICAgICAgICAgICAqdCsrID0gJ1wnJzsKLS8q
ICAgIHN3aXRjaChjKQotICAgICAgewotICAgICAgY2FzZSAnXG4nOiAqdCsrID0gJ24nOwotICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlICdcdCc6ICp0KysgPSAndCc7Ci0gICAgICBicmVhazsKLSAg
ICAgIGNhc2UgJ1xyJzogKnQrKyA9ICdyJzsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnXGIn
OiAqdCsrID0gJ2InOwotICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiAgICp0KysgPSBjOwot
ICAgICAgYnJlYWs7Ci0gICAgICB9Ki8KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAqdCsr
ID0gYzsKLSAgICB9CitpbnQgYzsKK2ludCBjb3VudCA9IDA7Cit1c2NoYXIgKiB0ID0gcywgKiBx
dW90ZWQ7CisKK2lmIChvcHQpCisgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIE5vIG9wdGlv
bnMgcmVjb2duaXplZCAqLworCit3aGlsZSAoKGMgPSAqdCsrKSkKKyAgaWYgKGMgPT0gJ1wnJykg
Y291bnQrKzsKKwordCA9IHF1b3RlZCA9IHN0b3JlX2dldF9xdW90ZWQoVXN0cmxlbihzKSArIGNv
dW50ICsgMSwgcywgaWR4KTsKKword2hpbGUgKChjID0gKnMrKykpCisgIGlmIChjID09ICdcJycp
IHsgKnQrKyA9ICdcJyc7ICp0KysgPSAnXCcnOyB9CisgIGVsc2UgKnQrKyA9IGM7CiAKLSAgICAq
dCA9IDA7Ci0gICAgcmV0dXJuIHF1b3RlZDsKKyp0ID0gMDsKK3JldHVybiBxdW90ZWQ7CiB9CiAK
IApAQCAtNTUyLDEyICs1MjksMTMgQEAKIAogI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKIAotdm9p
ZAotaWJhc2VfdmVyc2lvbl9yZXBvcnQoRklMRSAqZikKK2dzdHJpbmcgKgoraWJhc2VfdmVyc2lv
bl9yZXBvcnQoZ3N0cmluZyAqIGcpCiB7CiAjaWZkZWYgRFlOTE9PS1VQCi1mcHJpbnRmKGYsICJM
aWJyYXJ5IHZlcnNpb246IGliYXNlOiBFeGltIHZlcnNpb24gJXNcbiIsIEVYSU1fVkVSU0lPTl9T
VFIpOworZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcsICJMaWJyYXJ5IHZlcnNpb246IGliYXNlOiBF
eGltIHZlcnNpb24gJXNcbiIsIEVYSU1fVkVSU0lPTl9TVFIpKTsKICNlbmRpZgorcmV0dXJuIGc7
CiB9CiAKIApkaWZmIC11ciBleGltLm9yaWcvc3JjL2xvb2t1cHMvanNvbi5jIGV4aW0vc3JjL2xv
b2t1cHMvanNvbi5jCi0tLSBleGltLm9yaWcvc3JjL2xvb2t1cHMvanNvbi5jCTIwMjMtMDYtMDQg
MTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9sb29rdXBzL2pzb24uYwkyMDIy
LTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw3ICsyLDggQEAKICogICAgIEV4
aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBDb3B5cmlnaHQgKGMp
IEplcmVteSBIYXJyaXMgMjAxOS0yMDIwICovCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1h
aW50YWluZXJzIDIwMjEgLSAyMDIyICovCisvKiBDb3B5cmlnaHQgKGMpIEplcmVteSBIYXJyaXMg
MjAxOSAtIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2Yg
dXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKICNpbmNsdWRlICIuLi9leGltLmgiCkBAIC0yMyw3
ICsyNCw3IEBACiBzdGF0aWMgdm9pZCAqCiBqc29uX21hbGxvYyhzaXplX3QgbmJ5dGVzKQogewot
dm9pZCAqIHAgPSBzdG9yZV9nZXQoKGludCluYnl0ZXMsIEZBTFNFKTsKK3ZvaWQgKiBwID0gc3Rv
cmVfZ2V0KChpbnQpbmJ5dGVzLCBHRVRfVU5UQUlOVEVEKTsKIC8qIGRlYnVnX3ByaW50ZigiJXMg
JWQ6ICVwXG4iLCBfX0ZVTkNUSU9OX18sIChpbnQpbmJ5dGVzLCBwKTsgKi8KIHJldHVybiBwOwog
fQpAQCAtNDcsMTIgKzQ4LDcgQEAKIGpzb25fc2V0X2FsbG9jX2Z1bmNzKGpzb25fbWFsbG9jLCBq
c29uX2ZyZWUpOwogCiBpZiAoIShmID0gVWZvcGVuKGZpbGVuYW1lLCAicmIiKSkpCi0gIHsKLSAg
aW50IHNhdmVfZXJybm8gPSBlcnJubzsKLSAgKmVycm1zZyA9IHN0cmluZ19vcGVuX2ZhaWxlZChl
cnJubywgIiVzIGZvciBqc29uIHNlYXJjaCIsIGZpbGVuYW1lKTsKLSAgZXJybm8gPSBzYXZlX2Vy
cm5vOwotICByZXR1cm4gTlVMTDsKLSAgfQorICAqZXJybXNnID0gc3RyaW5nX29wZW5fZmFpbGVk
KCIlcyBmb3IganNvbiBzZWFyY2giLCBmaWxlbmFtZSk7CiByZXR1cm4gZjsKIH0KIApAQCAtODks
OSArODUsNiBAQAogdXNjaGFyICoga2V5OwogaW50IHNlcCA9IDA7CiAKLWxlbmd0aCA9IGxlbmd0
aDsJLyogS2VlcCBwaWNreSBjb21waWxlcnMgaGFwcHkgKi8KLWRvX2NhY2hlID0gZG9fY2FjaGU7
CS8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi0KIHJld2luZChmKTsKIGlmICghKGog
PSBqc29uX2xvYWRmKGYsIDAsICZqZXJyKSkpCiAgIHsKQEAgLTE2NSwxMCArMTU4LDEwIEBACiAK
ICNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCiAKLXZvaWQKLWpzb25fdmVyc2lvbl9yZXBvcnQoRklM
RSAqZikKK2dzdHJpbmcgKgoranNvbl92ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykKIHsKLWZw
cmludGYoZiwgIkxpYnJhcnkgdmVyc2lvbjoganNvbjogSmFuc29ubiB2ZXJzaW9uICVzXG4iLCBK
QU5TU09OX1ZFUlNJT04pOworcmV0dXJuIHN0cmluZ19mbXRfYXBwZW5kKGcsICJMaWJyYXJ5IHZl
cnNpb246IGpzb246IEphbnNvbm4gdmVyc2lvbiAlc1xuIiwgSkFOU1NPTl9WRVJTSU9OKTsKIH0K
IAogCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9sZGFwLmMgZXhpbS9zcmMvbG9va3Vw
cy9sZGFwLmMKLS0tIGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9sZGFwLmMJMjAyMy0wNi0wNCAxNjoy
MjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2xvb2t1cHMvbGRhcC5jCTIwMjItMDYt
MjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAt
IGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhl
IEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVy
c2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4
aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0
aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogLyogTWFueSB0aGFua3MgdG8gU3R1
YXJ0IEx5bm5lIGZvciBjb250cmlidXRpbmcgdGhlIG9yaWdpbmFsIGNvZGUgZm9yIHRoaXMKQEAg
LTQ5Niw3ICs0OTYsNyBAQAogCiAgIC8qIE5vdyBhZGQgdGhpcyBjb25uZWN0aW9uIHRvIHRoZSBj
aGFpbiBvZiBjYWNoZWQgY29ubmVjdGlvbnMgKi8KIAotICBsY3AgPSBzdG9yZV9nZXQoc2l6ZW9m
KExEQVBfQ09OTkVDVElPTiksIEZBTFNFKTsKKyAgbGNwID0gc3RvcmVfZ2V0KHNpemVvZihMREFQ
X0NPTk5FQ1RJT04pLCBHRVRfVU5UQUlOVEVEKTsKICAgbGNwLT5ob3N0ID0gaG9zdCA/IHN0cmlu
Z19jb3B5KGhvc3QpIDogTlVMTDsKICAgbGNwLT5ib3VuZCA9IEZBTFNFOwogICBsY3AtPnVzZXIg
PSBOVUxMOwpAQCAtMTA5MSw3ICsxMDkxLDYgQEAKIHVzY2hhciAqdXNlciA9IE5VTEw7CiB1c2No
YXIgKnBhc3N3b3JkID0gTlVMTDsKIHVzY2hhciAqbG9jYWxfc2VydmVycyA9IE5VTEw7Ci11c2No
YXIgKnNlcnZlcjsKIGNvbnN0IHVzY2hhciAqbGlzdDsKIAogd2hpbGUgKGlzc3BhY2UoKnVybCkp
IHVybCsrOwpAQCAtMTI1MCwxMyArMTI0OSwxMyBAQAogICAgICZkZWZlcl9icmVhaywgdXNlciwg
cGFzc3dvcmQsIHNpemVsaW1pdCwgdGltZWxpbWl0LCB0Y3BsaW1pdCwgZGVyZWZlcmVuY2UsCiAg
ICAgcmVmZXJyYWxzKTsKIAotLyogTG9vcCB0aHJvdWdoIHRoZSBkZWZhdWx0IHNlcnZlcnMgdW50
aWwgT0sgb3IgRkFJTC4gVXNlIGxvY2FsX3NlcnZlcnMgbGlzdAotICogaWYgZGVmaW5lZCBpbiB0
aGUgbG9va3VwLCBvdGhlcndpc2UgdXNlIHRoZSBnbG9iYWwgZGVmYXVsdCBsaXN0ICovCi1saXN0
ID0gIWxvY2FsX3NlcnZlcnMgPyBlbGRhcF9kZWZhdWx0X3NlcnZlcnMgOiBsb2NhbF9zZXJ2ZXJz
Owotd2hpbGUgKChzZXJ2ZXIgPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNlcCwgTlVMTCwg
MCkpKQorLyogTG9vcCB0aHJvdWdoIHRoZSBzZXJ2ZXJzIHVudGlsIE9LIG9yIEZBSUwuIFVzZSBs
b2NhbF9zZXJ2ZXJzIGxpc3QKK2lmIGRlZmluZWQgaW4gdGhlIGxvb2t1cCwgb3RoZXJ3aXNlIHVz
ZSB0aGUgZ2xvYmFsIGRlZmF1bHQgbGlzdCAqLworCitsaXN0ID0gbG9jYWxfc2VydmVycyA/IGxv
Y2FsX3NlcnZlcnMgOiBlbGRhcF9kZWZhdWx0X3NlcnZlcnM7Citmb3IgKHVzY2hhciAqIHNlcnZl
cjsgc2VydmVyID0gc3RyaW5nX25leHRpbmxpc3QoJmxpc3QsICZzZXAsIE5VTEwsIDApOyApCiAg
IHsKLSAgaW50IHJjOwotICBpbnQgcG9ydCA9IDA7CisgIGludCByYywgcG9ydCA9IDA7CiAgIHVz
Y2hhciAqY29sb24gPSBVc3RyY2hyKHNlcnZlciwgJzonKTsKICAgaWYgKGNvbG9uKQogICAgIHsK
QEAgLTEyODcsOCArMTI4Niw2IEBACiAgIGludCBsZW5ndGgsIHVzY2hhciAqKiByZXN1bHQsIHVz
Y2hhciAqKiBlcnJtc2csIHVpbnQgKiBkb19jYWNoZSwKICAgY29uc3QgdXNjaGFyICogb3B0cykK
IHsKLS8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1kb19jYWNoZSA9IGRvX2NhY2hl
OwogcmV0dXJuKGNvbnRyb2xfbGRhcF9zZWFyY2gobGRhcF91cmwsIFNFQVJDSF9MREFQX1NJTkdM
RSwgcmVzdWx0LCBlcnJtc2cpKTsKIH0KIApAQCAtMTI5Nyw4ICsxMjk0LDYgQEAKICAgaW50IGxl
bmd0aCwgdXNjaGFyICoqIHJlc3VsdCwgdXNjaGFyICoqIGVycm1zZywgdWludCAqIGRvX2NhY2hl
LAogICBjb25zdCB1c2NoYXIgKiBvcHRzKQogewotLyogS2VlcCBwaWNreSBjb21waWxlcnMgaGFw
cHkgKi8KLWRvX2NhY2hlID0gZG9fY2FjaGU7CiByZXR1cm4oY29udHJvbF9sZGFwX3NlYXJjaChs
ZGFwX3VybCwgU0VBUkNIX0xEQVBfTVVMVElQTEUsIHJlc3VsdCwgZXJybXNnKSk7CiB9CiAKQEAg
LTEzMDcsOCArMTMwMiw2IEBACiAgIGludCBsZW5ndGgsIHVzY2hhciAqKiByZXN1bHQsIHVzY2hh
ciAqKiBlcnJtc2csIHVpbnQgKiBkb19jYWNoZSwKICAgY29uc3QgdXNjaGFyICogb3B0cykKIHsK
LS8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1kb19jYWNoZSA9IGRvX2NhY2hlOwog
cmV0dXJuKGNvbnRyb2xfbGRhcF9zZWFyY2gobGRhcF91cmwsIFNFQVJDSF9MREFQX0ROLCByZXN1
bHQsIGVycm1zZykpOwogfQogCkBAIC0xMzE2LDggKzEzMDksNiBAQAogZWxkYXBhdXRoX2ZpbmQo
dm9pZCAqIGhhbmRsZSwgY29uc3QgdXNjaGFyICogZmlsZW5hbWUsIGNvbnN0IHVzY2hhciAqIGxk
YXBfdXJsLAogICBpbnQgbGVuZ3RoLCB1c2NoYXIgKiogcmVzdWx0LCB1c2NoYXIgKiogZXJybXNn
LCB1aW50ICogZG9fY2FjaGUpCiB7Ci0vKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwot
ZG9fY2FjaGUgPSBkb19jYWNoZTsKIHJldHVybihjb250cm9sX2xkYXBfc2VhcmNoKGxkYXBfdXJs
LCBTRUFSQ0hfTERBUF9BVVRILCByZXN1bHQsIGVycm1zZykpOwogfQogCkBAIC0xMzQ3LDE2ICsx
MzM4LDEzIEBACiBzdGF0aWMgdm9pZAogZWxkYXBfdGlkeSh2b2lkKQogewotTERBUF9DT05ORUNU
SU9OICpsY3AgPSBOVUxMOwogZWxkYXBfZG4gPSBOVUxMOwogCi13aGlsZSAoKGxjcCA9IGxkYXBf
Y29ubmVjdGlvbnMpICE9IE5VTEwpCitmb3IgKExEQVBfQ09OTkVDVElPTiAqbGNwOyBsY3AgPSBs
ZGFwX2Nvbm5lY3Rpb25zOyBsZGFwX2Nvbm5lY3Rpb25zID0gbGNwLT5uZXh0KQogICB7Ci0gIERF
QlVHKERfbG9va3VwKSBkZWJ1Z19wcmludGZfaW5kZW50KCJ1bmJpbmQgTERBUCBjb25uZWN0aW9u
IHRvICVzOiVkXG4iLCBsY3AtPmhvc3QsCi0gICAgbGNwLT5wb3J0KTsKLSAgaWYobGNwLT5ib3Vu
ZCA9PSBUUlVFKQotICAgIGxkYXBfdW5iaW5kKGxjcC0+bGQpOwotICBsZGFwX2Nvbm5lY3Rpb25z
ID0gbGNwLT5uZXh0OworICBERUJVRyhEX2xvb2t1cCkgZGVidWdfcHJpbnRmX2luZGVudCgidW5i
aW5kIExEQVAgY29ubmVjdGlvbiB0byAlczolZFxuIiwKKyAgICBsY3AtPmhvc3QsIGxjcC0+cG9y
dCk7CisgIGlmKGxjcC0+Ym91bmQpIGxkYXBfdW5iaW5kKGxjcC0+bGQpOwogICB9CiB9CiAKQEAg
LTE0MTcsNiArMTQwNSw3IEBACiAgIHMgICAgICAgICAgdGhlIHN0cmluZyB0byBiZSBxdW90ZWQK
ICAgb3B0ICAgICAgICBhZGRpdGlvbmFsIG9wdGlvbiB0ZXh0IG9yIE5VTEwgaWYgbm9uZQogICAg
ICAgICAgICAgIG9ubHkgImRuIiBpcyByZWNvZ25pemVkCisgIGlkeAkgICAgIGxvb2t1cCB0eXBl
IGluZGV4CiAKIFJldHVybnM6ICAgICB0aGUgcHJvY2Vzc2VkIHN0cmluZyBvciBOVUxMIGZvciBh
IGJhZCBvcHRpb24KICovCkBAIC0xNDQyLDE4ICsxNDMxLDE1IEBACiAKIAogc3RhdGljIHVzY2hh
ciAqCi1lbGRhcF9xdW90ZSh1c2NoYXIgKnMsIHVzY2hhciAqb3B0KQorZWxkYXBfcXVvdGUodXNj
aGFyICogcywgdXNjaGFyICogb3B0LCB1bnNpZ25lZCBpZHgpCiB7Ci1yZWdpc3RlciBpbnQgYzsK
LWludCBjb3VudCA9IDA7Ci1pbnQgbGVuID0gMDsKK2ludCBjLCBjb3VudCA9IDAsIGxlbiA9IDA7
CiBCT09MIGRuID0gRkFMU0U7Ci11c2NoYXIgKnQgPSBzOwotdXNjaGFyICpxdW90ZWQ7Cit1c2No
YXIgKiB0ID0gcywgKiBxdW90ZWQ7CiAKIC8qIFRlc3QgZm9yIGEgRE4gcXVvdGF0aW9uLiAqLwog
Ci1pZiAob3B0ICE9IE5VTEwpCitpZiAob3B0KQogICB7CiAgIGlmIChVc3RyY21wKG9wdCwgImRu
IikgIT0gMCkgcmV0dXJuIE5VTEw7ICAgIC8qIE5vIG90aGVycyByZWNvZ25pemVkICovCiAgIGRu
ID0gVFJVRTsKQEAgLTE0NjYsMjQgKzE0NTIsMjUgQEAKIHBvc3NpYmx5IGVzY2FwZWQgY2hhcmFj
dGVyLiBUaGUgcmVhbGx5IGZhc3Qgd2F5IHdvdWxkIGJlIGp1c3QgdG8gdGVzdCBmb3IKIG5vbi1h
bHBoYW51bWVyaWNzLCBidXQgaXQgaXMgcHJvYmFibHkgYmV0dGVyIHRvIHNwb3QgYSBmZXcgb3Ro
ZXJzIHRoYXQgYXJlCiBuZXZlciBlc2NhcGVkLCBiZWNhdXNlIGlmIHRoZXJlIGFyZSBubyBzcGVj
aWFscyBhdCBhbGwsIHdlIGNhbiBhdm9pZCBjb3B5aW5nCi10aGUgc3RyaW5nLiAqLwordGhlIHN0
cmluZy4KK1hYWCBObyBsb25nZXIgdHJ1ZTsgd2UgYWx3YXlzIGNvcHksIHRvIHN1cHBvcnQgcXVv
dGVkLWVuZm9yY2VtZW50ICovCiAKLXdoaWxlICgoYyA9ICp0KyspICE9IDApCit3aGlsZSAoKGMg
PSAqdCsrKSkKICAgewogICBsZW4rKzsKICAgaWYgKCFpc2FsbnVtKGMpICYmIFVzdHJjaHIoQUxX
QVlTX0xJVEVSQUwsIGMpID09IE5VTEwpIGNvdW50ICs9IDU7CiAgIH0KLWlmIChjb3VudCA9PSAw
KSByZXR1cm4gczsKKy8qaWYgKGNvdW50ID09IDApIHJldHVybiBzOyovCiAKIC8qIEdldCBzdWZm
aWNpZW50IHN0b3JlIHRvIGhvbGQgdGhlIHF1b3RlZCBzdHJpbmcgKi8KIAotdCA9IHF1b3RlZCA9
IHN0b3JlX2dldChsZW4gKyBjb3VudCArIDEsIGlzX3RhaW50ZWQocykpOwordCA9IHF1b3RlZCA9
IHN0b3JlX2dldF9xdW90ZWQobGVuICsgY291bnQgKyAxLCBzLCBpZHgpOwogCiAvKiBIYW5kbGUg
cGxhaW4gcXVvdGVfbGRhcCAqLwogCiBpZiAoIWRuKQogICB7Ci0gIHdoaWxlICgoYyA9ICpzKysp
ICE9IDApCisgIHdoaWxlICgoYyA9ICpzKyspKQogICAgIHsKICAgICBpZiAoIWlzYWxudW0oYykp
CiAgICAgICB7CkBAIC0xNTA4LDcgKzE0OTUsNyBAQAogCiBlbHNlCiAgIHsKLSAgdXNjaGFyICpz
cyA9IHMgKyBsZW47CisgIHVzY2hhciAqIHNzID0gcyArIGxlbjsKIAogICAvKiBGaW5kIHRoZSBs
YXN0IGNoYXIgYmVmb3JlIGFueSB0cmFpbGluZyBzcGFjZXMgKi8KIApAQCAtMTU3MCwxMiArMTU1
NywxMyBAQAogCiAjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgogCi12b2lkCi1sZGFwX3ZlcnNpb25f
cmVwb3J0KEZJTEUgKmYpCitnc3RyaW5nICoKK2xkYXBfdmVyc2lvbl9yZXBvcnQoZ3N0cmluZyAq
IGcpCiB7CiAjaWZkZWYgRFlOTE9PS1VQCi1mcHJpbnRmKGYsICJMaWJyYXJ5IHZlcnNpb246IExE
QVA6IEV4aW0gdmVyc2lvbiAlc1xuIiwgRVhJTV9WRVJTSU9OX1NUUik7CitnID0gc3RyaW5nX2Zt
dF9hcHBlbmQoZywgIkxpYnJhcnkgdmVyc2lvbjogTERBUDogRXhpbSB2ZXJzaW9uICVzXG4iLCBF
WElNX1ZFUlNJT05fU1RSKTsKICNlbmRpZgorcmV0dXJuIGc7CiB9CiAKIApkaWZmIC11ciBleGlt
Lm9yaWcvc3JjL2xvb2t1cHMvbGZfc3FscGVyZm9ybS5jIGV4aW0vc3JjL2xvb2t1cHMvbGZfc3Fs
cGVyZm9ybS5jCi0tLSBleGltLm9yaWcvc3JjL2xvb2t1cHMvbGZfc3FscGVyZm9ybS5jCTIwMjMt
MDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9sb29rdXBzL2xmX3Nx
bHBlcmZvcm0uYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4ICsy
LDggQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAq
CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisv
KiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBD
b3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBD
b3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmls
ZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIApk
aWZmIC11ciBleGltLm9yaWcvc3JjL2xvb2t1cHMvbG1kYi5jIGV4aW0vc3JjL2xvb2t1cHMvbG1k
Yi5jCi0tLSBleGltLm9yaWcvc3JjL2xvb2t1cHMvbG1kYi5jCTIwMjMtMDYtMDQgMTY6MjI6MDUu
MDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9sb29rdXBzL2xtZGIuYwkyMDIyLTA2LTIzIDE2
OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiwxMyArMiwxMyBAQAogKiAgICAgRXhpbSAtIGFu
IEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4
aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0
eSBvZiBDYW1icmlkZ2UgMjAxNiAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0g
TWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9u
cyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogI2luY2x1ZGUgIi4uL2V4aW0uaCIKIAot
I2lmZGVmIEVYUEVSSU1FTlRBTF9MTURCCisjaWZkZWYgTE9PS1VQX0xNREIKIAogI2luY2x1ZGUg
PGxtZGIuaD4KIApAQCAtMzEsNyArMzEsNyBAQAogaW50IHJldCwgc2F2ZV9lcnJubzsKIGNvbnN0
IHVzY2hhciAqIGVycnN0cjsKIAotbG1kYl9wID0gc3RvcmVfZ2V0KHNpemVvZihMbWRic3RyY3Qp
LCBGQUxTRSk7CitsbWRiX3AgPSBzdG9yZV9nZXQoc2l6ZW9mKExtZGJzdHJjdCksIEdFVF9VTlRB
SU5URUQpOwogbG1kYl9wLT50eG4gPSBOVUxMOwogCiBpZiAoKHJldCA9IG1kYl9lbnZfY3JlYXRl
KCZkYl9lbnYpKSkKQEAgLTEyOSwxNCArMTI5LDE1IEBACiAKICNpbmNsdWRlICIuLi92ZXJzaW9u
LmgiCiAKLXZvaWQKLWxtZGJfdmVyc2lvbl9yZXBvcnQoRklMRSAqIGYpCitnc3RyaW5nICoKK2xt
ZGJfdmVyc2lvbl9yZXBvcnQoZ3N0cmluZyAqIGcpCiB7Ci1mcHJpbnRmKGYsICJMaWJyYXJ5IHZl
cnNpb246IExNREI6IENvbXBpbGU6ICVkLiVkLiVkXG4iLAotICAgIE1EQl9WRVJTSU9OX01BSk9S
LCBNREJfVkVSU0lPTl9NSU5PUiwgTURCX1ZFUlNJT05fUEFUQ0gpOworZyA9IHN0cmluZ19mbXRf
YXBwZW5kKGcsICJMaWJyYXJ5IHZlcnNpb246IExNREI6IENvbXBpbGU6ICVkLiVkLiVkXG4iLAor
CQkJICBNREJfVkVSU0lPTl9NQUpPUiwgTURCX1ZFUlNJT05fTUlOT1IsIE1EQl9WRVJTSU9OX1BB
VENIKTsKICNpZmRlZiBEWU5MT09LVVAKLWZwcmludGYoZiwgIiAgICAgICAgICAgICAgICAgICAg
ICAgIEV4aW0gdmVyc2lvbiAlc1xuIiwgRVhJTV9WRVJTSU9OX1NUUik7CitnID0gc3RyaW5nX2Zt
dF9hcHBlbmQoZywgIiAgICAgICAgICAgICAgICAgICAgICAgIEV4aW0gdmVyc2lvbiAlc1xuIiwg
RVhJTV9WRVJTSU9OX1NUUik7CiAjZW5kaWYKK3JldHVybiBnOwogfQogCiBzdGF0aWMgbG9va3Vw
X2luZm8gbG1kYl9sb29rdXBfaW5mbyA9IHsKQEAgLTE1OCw0ICsxNTksNCBAQAogc3RhdGljIGxv
b2t1cF9pbmZvICpfbG9va3VwX2xpc3RbXSA9IHsgJmxtZGJfbG9va3VwX2luZm8gfTsKIGxvb2t1
cF9tb2R1bGVfaW5mbyBsbWRiX2xvb2t1cF9tb2R1bGVfaW5mbyA9IHsgTE9PS1VQX01PRFVMRV9J
TkZPX01BR0lDLCBfbG9va3VwX2xpc3QsIDEgfTsKIAotI2VuZGlmIC8qIEVYUEVSSU1FTlRBTF9M
TURCICovCisjZW5kaWYgLyogTE9PS1VQX0xNREIgKi8KZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9s
b29rdXBzL2xzZWFyY2guYyBleGltL3NyYy9sb29rdXBzL2xzZWFyY2guYwotLS0gZXhpbS5vcmln
L3NyYy9sb29rdXBzL2xzZWFyY2guYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMw
MAorKysgZXhpbS9zcmMvbG9va3Vwcy9sc2VhcmNoLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAw
MDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFp
bCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVy
cyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRn
ZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAy
MDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQg
ZGlzdHJpYnV0aW9uLiAqLwogCiAjaW5jbHVkZSAiLi4vZXhpbS5oIgpAQCAtMjksMTQgKzI5LDkg
QEAKIHN0YXRpYyB2b2lkICoKIGxzZWFyY2hfb3Blbihjb25zdCB1c2NoYXIgKiBmaWxlbmFtZSwg
dXNjaGFyICoqIGVycm1zZykKIHsKLUZJTEUgKmYgPSBVZm9wZW4oZmlsZW5hbWUsICJyYiIpOwot
aWYgKGYgPT0gTlVMTCkKLSAgewotICBpbnQgc2F2ZV9lcnJubyA9IGVycm5vOwotICAqZXJybXNn
ID0gc3RyaW5nX29wZW5fZmFpbGVkKGVycm5vLCAiJXMgZm9yIGxpbmVhciBzZWFyY2giLCBmaWxl
bmFtZSk7Ci0gIGVycm5vID0gc2F2ZV9lcnJubzsKLSAgcmV0dXJuIE5VTEw7Ci0gIH0KK0ZJTEUg
KiBmID0gVWZvcGVuKGZpbGVuYW1lLCAicmIiKTsKK2lmICghZikKKyAgKmVycm1zZyA9IHN0cmlu
Z19vcGVuX2ZhaWxlZCgiJXMgZm9yIGxpbmVhciBzZWFyY2giLCBmaWxlbmFtZSk7CiByZXR1cm4g
ZjsKIH0KIApAQCAtNzQsMzIgKzY5LDM4IEBACiBzdGF0aWMgaW50CiBpbnRlcm5hbF9sc2VhcmNo
X2ZpbmQodm9pZCAqIGhhbmRsZSwgY29uc3QgdXNjaGFyICogZmlsZW5hbWUsCiAgIGNvbnN0IHVz
Y2hhciAqIGtleXN0cmluZywgaW50IGxlbmd0aCwgdXNjaGFyICoqIHJlc3VsdCwgdXNjaGFyICoq
IGVycm1zZywKLSBpbnQgdHlwZSkKKyAgaW50IHR5cGUsIGNvbnN0IHVzY2hhciAqIG9wdHMpCiB7
Ci1GSUxFICpmID0gKEZJTEUgKiloYW5kbGU7Ci1CT09MIGxhc3Rfd2FzX2VvbCA9IFRSVUU7Ci1C
T09MIHRoaXNfaXNfZW9sID0gVFJVRTsKK0ZJTEUgKmYgPSBoYW5kbGU7CitCT09MIHJldF9mdWxs
ID0gRkFMU0U7CiBpbnQgb2xkX3Bvb2wgPSBzdG9yZV9wb29sOwogcm1hcmsgcmVzZXRfcG9pbnQg
PSBOVUxMOwogdXNjaGFyIGJ1ZmZlcls0MDk2XTsKIAoraWYgKG9wdHMpCisgIHsKKyAgaW50IHNl
cCA9ICcsJzsKKyAgdXNjaGFyICogZWxlOworCisgIHdoaWxlICgoZWxlID0gc3RyaW5nX25leHRp
bmxpc3QoJm9wdHMsICZzZXAsIE5VTEwsIDApKSkKKyAgICBpZiAoVXN0cmNtcChlbGUsICJyZXQ9
ZnVsbCIpID09IDApCisgICAgICB7IHJldF9mdWxsID0gVFJVRTsgYnJlYWs7IH0KKyAgfQorCiAv
KiBXaWxkY2FyZCBzZWFyY2hlcyBtYXkgdXNlIHVwIHNvbWUgc3RvcmUsIGJlY2F1c2Ugb2YgZXhw
YW5zaW9ucy4gV2UgZG9uJ3QKIHdhbnQgdGhlbSB0byBmaWxsIHVwIG91ciBzZWFyY2ggc3RvcmUu
IFdoYXQgd2UgZG8gaXMgc2V0IHRoZSBwb29sIHRvIHRoZSBtYWluCiBwb29sIGFuZCBnZXQgYSBw
b2ludCB0byByZXNldCB0byBsYXRlci4gV2lsZGNhcmQgc2VhcmNoZXMgY291bGQgYWxzbyBpc3N1
ZQogbG9va3VwcywgYnV0IGludGVybmFsX3NlYXJjaF9maW5kIHdpbGwgdGFrZSBjYXJlIG9mIHRo
YXQsIGFuZCB0aGUgY2FjaGUgd2lsbCBiZQogc2FmZWx5IHN0b3JlZCBpbiB0aGUgc2VhcmNoIHBv
b2wgYWdhaW4uICovCiAKLWlmKHR5cGUgPT0gTFNFQVJDSF9XSUxEIHx8IHR5cGUgPT0gTFNFQVJD
SF9OV0lMRCkKK2lmICh0eXBlID09IExTRUFSQ0hfV0lMRCB8fCB0eXBlID09IExTRUFSQ0hfTldJ
TEQpCiAgIHsKICAgc3RvcmVfcG9vbCA9IFBPT0xfTUFJTjsKICAgcmVzZXRfcG9pbnQgPSBzdG9y
ZV9tYXJrKCk7CiAgIH0KIAotZmlsZW5hbWUgPSBmaWxlbmFtZTsgIC8qIEtlZXAgcGlja3kgY29t
cGlsZXJzIGhhcHB5ICovCi1lcnJtc2cgPSBlcnJtc2c7Ci0KIHJld2luZChmKTsKLWZvciAobGFz
dF93YXNfZW9sID0gVFJVRTsKK2ZvciAoQk9PTCB0aGlzX2lzX2VvbCwgbGFzdF93YXNfZW9sID0g
VFJVRTsKICAgICAgVWZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGYpICE9IE5VTEw7CiAg
ICAgIGxhc3Rfd2FzX2VvbCA9IHRoaXNfaXNfZW9sKQogICB7CkBAIC0xNDUsMjEgKzE0NiwyMiBA
QAogICBpZiAoKnMgPT0gJ1wiJykKICAgICB7CiAgICAgdXNjaGFyICp0ID0gcysrOwotICAgIHdo
aWxlICgqcyAhPSAwICYmICpzICE9ICdcIicpCisgICAgd2hpbGUgKCpzICYmICpzICE9ICdcIicp
CiAgICAgICB7Ci0gICAgICBpZiAoKnMgPT0gJ1xcJykgKnQrKyA9IHN0cmluZ19pbnRlcnByZXRf
ZXNjYXBlKENVU1MgJnMpOwotICAgICAgICBlbHNlICp0KysgPSAqczsKKyAgICAgICp0KysgPSAq
cyA9PSAnXFwnID8gc3RyaW5nX2ludGVycHJldF9lc2NhcGUoQ1VTUyAmcykgOiAqczsKICAgICAg
IHMrKzsKICAgICAgIH0KLSAgICBpZiAoKnMgIT0gMCkgcysrOyAgICAgICAgICAgICAgIC8qIFBh
c3QgdGVybWluYXRpbmcgIiAqLwogICAgIGxpbmVrZXlsZW5ndGggPSB0IC0gYnVmZmVyOworICAg
IGlmICgqcykgcysrOwkJCS8qIFBhc3QgdGVybWluYXRpbmcgIiAqLworICAgIGlmIChyZXRfZnVs
bCkKKyAgICAgIG1lbW1vdmUodCwgcywgVXN0cmxlbihzKSsxKTsJLyogY29weSB0aGUgcmVzdCBv
ZiBsaW5lIGFsc28gKi8KICAgICB9CiAKICAgLyogT3RoZXJ3aXNlIGl0IGlzIHRlcm1pbmF0ZWQg
YnkgYSBjb2xvbiBvciB3aGl0ZSBzcGFjZSAqLwogCiAgIGVsc2UKICAgICB7Ci0gICAgd2hpbGUg
KCpzICE9IDAgJiYgKnMgIT0gJzonICYmICFpc3NwYWNlKCpzKSkgcysrOworICAgIHdoaWxlICgq
cyAmJiAqcyAhPSAnOicgJiYgIWlzc3BhY2UoKnMpKSBzKys7CiAgICAgbGluZWtleWxlbmd0aCA9
IHMgLSBidWZmZXI7CiAgICAgfQogCkBAIC0xNzAsOSArMTcyLDkgQEAKICAgICAvKiBBIHBsYWlu
IGxzZWFyY2ggdHJlYXRzIGVhY2gga2V5IGFzIGEgbGl0ZXJhbCAqLwogCiAgICAgY2FzZSBMU0VB
UkNIX1BMQUlOOgotICAgIGlmIChsaW5la2V5bGVuZ3RoICE9IGxlbmd0aCB8fCBzdHJuY21waWMo
YnVmZmVyLCBrZXlzdHJpbmcsIGxlbmd0aCkgIT0gMCkKLSAgICAgIGNvbnRpbnVlOwotICAgIGJy
ZWFrOyAgICAgIC8qIEtleSBtYXRjaGVkICovCisgICAgICBpZiAobGluZWtleWxlbmd0aCAhPSBs
ZW5ndGggfHwgc3RybmNtcGljKGJ1ZmZlciwga2V5c3RyaW5nLCBsZW5ndGgpICE9IDApCisJY29u
dGludWU7CisgICAgICBicmVhazsgICAgICAvKiBLZXkgbWF0Y2hlZCAqLwogCiAgICAgLyogQSB3
aWxkIGxzZWFyY2ggdHJlYXRzIGVhY2gga2V5IGFzIGEgcG9zc2libGUgd2lsZGNhcmRlZCBzdHJp
bmc7IG5vCiAgICAgZXhwYW5zaW9uIGlzIGRvbmUgZm9yIG53aWxkbHNlYXJjaC4gKi8KQEAgLTE4
OSw3ICsxOTEsNyBAQAogICAgICAgICBVQ0hBUl9NQVgrMSwgICAgICAgICAgICAgIC8qIFNpbmds
ZS1pdGVtIGxpc3QgKi8KICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBObyBh
bmNob3IgKi8KICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBObyBjYWNoaW5n
ICovCi0gICAgICAgIE1DTF9TVFJJTkcgKyAoKHR5cGUgPT0gTFNFQVJDSF9XSUxEKT8gMDpNQ0xf
Tk9FWFBBTkQpLAorICAgICAgICBNQ0xfU1RSSU5HICsgKHR5cGUgPT0gTFNFQVJDSF9XSUxEID8g
MCA6IE1DTF9OT0VYUEFORCksCiAgICAgICAgIFRSVUUsICAgICAgICAgICAgICAgICAgICAgLyog
Q2FzZWxlc3MgKi8KICAgICAgICAgTlVMTCk7CiAgICAgICBidWZmZXJbbGluZWtleWxlbmd0aF0g
PSBzYXZlOwpAQCAtMTk3LDQ3ICsxOTksNDcgQEAKICAgICAgIGlmIChyYyA9PSBERUZFUikgcmV0
dXJuIERFRkVSOwogICAgICAgfQogCi0gICAgLyogVGhlIGtleSBoYXMgbWF0Y2hlZC4gSWYgdGhl
IHNlYXJjaCBpbnZvbHZlZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgaXQKLSAgICBtaWdodCBoYXZl
IGNhdXNlZCBudW1lcmljYWwgdmFyaWFibGVzIHRvIGJlIHNldC4gSG93ZXZlciwgdGhlaXIgdmFs
dWVzIHdpbGwKLSAgICBiZSBpbiB0aGUgd3Jvbmcgc3RvcmFnZSBwb29sIGZvciBleHRlcm5hbCB1
c2UuIENvcHlpbmcgdGhlbSB0byB0aGUgc3RhbmRhcmQKLSAgICBwb29sIGlzIG5vdCBmZWFzaWJs
ZSBiZWNhdXNlIG9mIHRoZSBjYWNoaW5nIG9mIGxvb2t1cCByZXN1bHRzIC0gYSByZXBlYXRlZAot
ICAgIGxvb2t1cCB3aWxsIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uIGFnYWluLiBU
aGVyZWZvcmUsIHdlIGZsYXR0ZW4KLSAgICBhbGwgbnVtZXJpYyB2YXJpYWJsZXMgYXQgdGhpcyBw
b2ludC4gKi8KKyAgICAgIC8qIFRoZSBrZXkgaGFzIG1hdGNoZWQuIElmIHRoZSBzZWFyY2ggaW52
b2x2ZWQgYSByZWd1bGFyIGV4cHJlc3Npb24sIGl0CisgICAgICBtaWdodCBoYXZlIGNhdXNlZCBu
dW1lcmljYWwgdmFyaWFibGVzIHRvIGJlIHNldC4gSG93ZXZlciwgdGhlaXIgdmFsdWVzIHdpbGwK
KyAgICAgIGJlIGluIHRoZSB3cm9uZyBzdG9yYWdlIHBvb2wgZm9yIGV4dGVybmFsIHVzZS4gQ29w
eWluZyB0aGVtIHRvIHRoZSBzdGFuZGFyZAorICAgICAgcG9vbCBpcyBub3QgZmVhc2libGUgYmVj
YXVzZSBvZiB0aGUgY2FjaGluZyBvZiBsb29rdXAgcmVzdWx0cyAtIGEgcmVwZWF0ZWQKKyAgICAg
IGxvb2t1cCB3aWxsIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uIGFnYWluLiBUaGVy
ZWZvcmUsIHdlIGRyb3AKKyAgICAgIGFsbCBudW1lcmljIHZhcmlhYmxlcyBhdCB0aGlzIHBvaW50
LiAqLwogCi0gICAgZXhwYW5kX25tYXggPSAtMTsKLSAgICBicmVhazsKKyAgICAgIGV4cGFuZF9u
bWF4ID0gLTE7CisgICAgICBicmVhazsKIAogICAgIC8qIENvbXBhcmUgYW4gaXAgYWRkcmVzcyBh
Z2FpbnN0IGEgbGlzdCBvZiBuZXR3b3JrL2lwIGFkZHJlc3Nlcy4gV2UgaGF2ZSB0bwogICAgIGFs
bG93IGZvciB0aGUgIioiIGNhc2Ugc3BlY2lhbGx5LiAqLwogCiAgICAgY2FzZSBMU0VBUkNIX0lQ
OgotICAgIGlmIChsaW5la2V5bGVuZ3RoID09IDEgJiYgYnVmZmVyWzBdID09ICcqJykKLSAgICAg
IHsKLSAgICAgIGlmIChsZW5ndGggIT0gMSB8fCBrZXlzdHJpbmdbMF0gIT0gJyonKSBjb250aW51
ZTsKLSAgICAgIH0KLSAgICBlbHNlIGlmIChsZW5ndGggPT0gMSAmJiBrZXlzdHJpbmdbMF0gPT0g
JyonKSBjb250aW51ZTsKLSAgICBlbHNlCi0gICAgICB7Ci0gICAgICBpbnQgbWFza29mZnNldDsK
LSAgICAgIGludCBzYXZlID0gYnVmZmVyW2xpbmVrZXlsZW5ndGhdOwotICAgICAgYnVmZmVyW2xp
bmVrZXlsZW5ndGhdID0gMDsKLSAgICAgIGlmIChzdHJpbmdfaXNfaXBfYWRkcmVzcyhidWZmZXIs
ICZtYXNrb2Zmc2V0KSA9PSAwIHx8Ci0gICAgICAgICAgIWhvc3RfaXNfaW5fbmV0KGtleXN0cmlu
ZywgYnVmZmVyLCBtYXNrb2Zmc2V0KSkgY29udGludWU7Ci0gICAgICBidWZmZXJbbGluZWtleWxl
bmd0aF0gPSBzYXZlOwotICAgICAgfQotICAgIGJyZWFrOyAgICAgIC8qIEtleSBtYXRjaGVkICov
CisgICAgICBpZiAobGluZWtleWxlbmd0aCA9PSAxICYmIGJ1ZmZlclswXSA9PSAnKicpCisJewor
CWlmIChsZW5ndGggIT0gMSB8fCBrZXlzdHJpbmdbMF0gIT0gJyonKSBjb250aW51ZTsKKwl9Cisg
ICAgICBlbHNlIGlmIChsZW5ndGggPT0gMSAmJiBrZXlzdHJpbmdbMF0gPT0gJyonKSBjb250aW51
ZTsKKyAgICAgIGVsc2UKKwl7CisJaW50IG1hc2tvZmZzZXQ7CisJaW50IHNhdmUgPSBidWZmZXJb
bGluZWtleWxlbmd0aF07CisJYnVmZmVyW2xpbmVrZXlsZW5ndGhdID0gMDsKKwlpZiAoc3RyaW5n
X2lzX2lwX2FkZHJlc3MoYnVmZmVyLCAmbWFza29mZnNldCkgPT0gMCB8fAorCSAgICAhaG9zdF9p
c19pbl9uZXQoa2V5c3RyaW5nLCBidWZmZXIsIG1hc2tvZmZzZXQpKSBjb250aW51ZTsKKwlidWZm
ZXJbbGluZWtleWxlbmd0aF0gPSBzYXZlOworCX0KKyAgICAgIGJyZWFrOyAgICAgIC8qIEtleSBt
YXRjaGVkICovCiAgICAgfQogCiAgIC8qIFRoZSBrZXkgaGFzIG1hdGNoZWQuIFNraXAgc3BhY2Vz
IGFmdGVyIHRoZSBrZXksIGFuZCBhbGxvdyBhbiBvcHRpb25hbAogICBjb2xvbiBhZnRlciB0aGUg
c3BhY2VzLiBUaGlzIGlzIGFuIG9kZCBzcGVjaWZpY2F0aW9uLCBidXQgaXQncyBmb3IKICAgY29t
cGF0aWJpbGl0eS4gKi8KIAotICB3aGlsZSAoaXNzcGFjZSgodXNjaGFyKSpzKSkgcysrOwotICBp
ZiAoKnMgPT0gJzonKQotICAgIHsKLSAgICBzKys7Ci0gICAgd2hpbGUgKGlzc3BhY2UoKHVzY2hh
cikqcykpIHMrKzsKLSAgICB9CisgIGlmICghcmV0X2Z1bGwpCisgICAgaWYgKFVza2lwX3doaXRl
c3BhY2UoJnMpID09ICc6JykKKyAgICAgIHsKKyAgICAgIHMrKzsKKyAgICAgIFVza2lwX3doaXRl
c3BhY2UoJnMpOworICAgICAgfQogCiAgIC8qIFJlc2V0IGR5bmFtaWMgc3RvcmUsIGlmIHdlIG5l
ZWQgdG8sIGFuZCByZXZlcnQgdG8gdGhlIHNlYXJjaCBwb29sICovCiAKQEAgLTI1Niw3ICsyNTgs
OSBAQAogCiAgIHRoaXNfaXNfY29tbWVudCA9IEZBTFNFOwogICB5aWVsZCA9IHN0cmluZ19nZXQo
MTAwKTsKLSAgaWYgKCpzICE9IDApCisgIGlmIChyZXRfZnVsbCkKKyAgICB5aWVsZCA9IHN0cmlu
Z19jYXQoeWllbGQsIGJ1ZmZlcik7CisgIGVsc2UgaWYgKCpzKQogICAgIHlpZWxkID0gc3RyaW5n
X2NhdCh5aWVsZCwgcyk7CiAKICAgLyogTm93IGhhbmRsZSBjb250aW51YXRpb25zICovCkBAIC0z
MjQsOSArMzI4LDggQEAKICAgaW50IGxlbmd0aCwgdXNjaGFyICoqIHJlc3VsdCwgdXNjaGFyICoq
IGVycm1zZywgdWludCAqIGRvX2NhY2hlLAogICBjb25zdCB1c2NoYXIgKiBvcHRzKQogewotZG9f
Y2FjaGUgPSBkb19jYWNoZTsgIC8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCiByZXR1
cm4gaW50ZXJuYWxfbHNlYXJjaF9maW5kKGhhbmRsZSwgZmlsZW5hbWUsIGtleXN0cmluZywgbGVu
Z3RoLCByZXN1bHQsCi0gIGVycm1zZywgTFNFQVJDSF9QTEFJTik7CisgIGVycm1zZywgTFNFQVJD
SF9QTEFJTiwgb3B0cyk7CiB9CiAKIApAQCAtMzQyLDkgKzM0NSw4IEBACiAgIGludCBsZW5ndGgs
IHVzY2hhciAqKiByZXN1bHQsIHVzY2hhciAqKiBlcnJtc2csIHVpbnQgKiBkb19jYWNoZSwKICAg
Y29uc3QgdXNjaGFyICogb3B0cykKIHsKLWRvX2NhY2hlID0gZG9fY2FjaGU7ICAvKiBLZWVwIHBp
Y2t5IGNvbXBpbGVycyBoYXBweSAqLwogcmV0dXJuIGludGVybmFsX2xzZWFyY2hfZmluZChoYW5k
bGUsIGZpbGVuYW1lLCBrZXlzdHJpbmcsIGxlbmd0aCwgcmVzdWx0LAotICBlcnJtc2csIExTRUFS
Q0hfV0lMRCk7CisgIGVycm1zZywgTFNFQVJDSF9XSUxELCBvcHRzKTsKIH0KIAogCkBAIC0zNjAs
OSArMzYyLDggQEAKICAgaW50IGxlbmd0aCwgdXNjaGFyICoqIHJlc3VsdCwgdXNjaGFyICoqIGVy
cm1zZywgdWludCAqIGRvX2NhY2hlLAogICBjb25zdCB1c2NoYXIgKiBvcHRzKQogewotZG9fY2Fj
aGUgPSBkb19jYWNoZTsgIC8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCiByZXR1cm4g
aW50ZXJuYWxfbHNlYXJjaF9maW5kKGhhbmRsZSwgZmlsZW5hbWUsIGtleXN0cmluZywgbGVuZ3Ro
LCByZXN1bHQsCi0gIGVycm1zZywgTFNFQVJDSF9OV0lMRCk7CisgIGVycm1zZywgTFNFQVJDSF9O
V0lMRCwgb3B0cyk7CiB9CiAKIApAQCAtMzc5LDEyICszODAsMTAgQEAKICAgaW50IGxlbmd0aCwg
dXNjaGFyICoqIHJlc3VsdCwgdXNjaGFyICoqIGVycm1zZywgdWludCAqIGRvX2NhY2hlLAogICBj
b25zdCB1c2NoYXIgKiBvcHRzKQogewotZG9fY2FjaGUgPSBkb19jYWNoZTsgIC8qIEtlZXAgcGlj
a3kgY29tcGlsZXJzIGhhcHB5ICovCi0KIGlmICgobGVuZ3RoID09IDEgJiYga2V5c3RyaW5nWzBd
ID09ICcqJykgfHwKICAgICBzdHJpbmdfaXNfaXBfYWRkcmVzcyhrZXlzdHJpbmcsIE5VTEwpICE9
IDApCiAgIHJldHVybiBpbnRlcm5hbF9sc2VhcmNoX2ZpbmQoaGFuZGxlLCBmaWxlbmFtZSwga2V5
c3RyaW5nLCBsZW5ndGgsIHJlc3VsdCwKLSAgICBlcnJtc2csIExTRUFSQ0hfSVApOworICAgIGVy
cm1zZywgTFNFQVJDSF9JUCwgb3B0cyk7CiAKICplcnJtc2cgPSBzdHJpbmdfc3ByaW50ZigiXCIl
c1wiIGlzIG5vdCBhIHZhbGlkIGlwbHNlYXJjaCBrZXkgKGFuIElQICIKICJhZGRyZXNzLCB3aXRo
IG9wdGlvbmFsIENJRFIgbWFzaywgaXMgd2FudGVkKTogIgpAQCAtNDE3LDEyICs0MTYsMTMgQEAK
IAogI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKIAotdm9pZAotbHNlYXJjaF92ZXJzaW9uX3JlcG9y
dChGSUxFICpmKQorZ3N0cmluZyAqCitsc2VhcmNoX3ZlcnNpb25fcmVwb3J0KGdzdHJpbmcgKiBn
KQogewogI2lmZGVmIERZTkxPT0tVUAotZnByaW50ZihmLCAiTGlicmFyeSB2ZXJzaW9uOiBsc2Vh
cmNoOiBFeGltIHZlcnNpb24gJXNcbiIsIEVYSU1fVkVSU0lPTl9TVFIpOworZyA9IHN0cmluZ19m
bXRfYXBwZW5kKGcsICJMaWJyYXJ5IHZlcnNpb246IGxzZWFyY2g6IEV4aW0gdmVyc2lvbiAlc1xu
IiwgRVhJTV9WRVJTSU9OX1NUUikpOwogI2VuZGlmCityZXR1cm4gZzsKIH0KIAogCmRpZmYgLXVy
IGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9NYWtlZmlsZSBleGltL3NyYy9sb29rdXBzL01ha2VmaWxl
Ci0tLSBleGltLm9yaWcvc3JjL2xvb2t1cHMvTWFrZWZpbGUJMjAyMy0wNi0wNCAxNjoyMjowNS4w
MDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2xvb2t1cHMvTWFrZWZpbGUJMjAyMi0wNi0yMyAx
Njo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTEsNiArMSw4IEBACiAjIE1ha2UgZmlsZSBmb3Ig
YnVpbGRpbmcgRXhpbSdzIGxvb2t1cCBtb2R1bGVzLgogIyBUaGlzIGlzIGNhbGxlZCBmcm9tIHRo
ZSBtYWluIG1ha2UgZmlsZSwgYWZ0ZXIgY2QnaW5nCiAjIHRvIHRoZSBsb29rdXBzIHN1YmRpcmVj
dG9yeS4KKyMKKyMgQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxCiAKICMg
bmI6IGF0IGJ1aWxkIHRpbWUsIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1c2VkIHdpbGwgaGF2
ZSBoYWQgc29tZQogIyAgICAgZXh0cmEgdmFyaWFibGUgZGVmaW5pdGlvbnMgYW5kIHByZXBlbmRl
ZCB0byBpdCBhbmQgbW9kdWxlIGJ1aWxkIHJ1bGVzCkBAIC0yNCw1MSArMjYsNTEgQEAKIC5jLnNv
OjsgICAgICAgICAgQGVjaG8gIiQoQ0MpIC1zaGFyZWQgJCouYyIKIAkJICQoRkUpJChDQykgJChM
T09LVVBfJCpfSU5DTFVERSkgJChMT09LVVBfJCpfTElCUykgLUREWU5MT09LVVAgJChDRkxBR1Nf
RFlOQU1JQykgJChDRkxBR1MpICQoSU5DTFVERSkgJChETEZMQUdTKSAkKi5jIC1vICRACiAKLWxm
X2NoZWNrX2ZpbGUubzogJChQSERSUykgbGZfY2hlY2tfZmlsZS5jICBsZl9mdW5jdGlvbnMuaAot
bGZfcXVvdGUubzogICAgICAkKFBIRFJTKSBsZl9xdW90ZS5jICAgICAgIGxmX2Z1bmN0aW9ucy5o
Ci1sZl9zcWxwZXJmb3JtLm86ICQoUEhEUlMpIGxmX3NxbHBlcmZvcm0uYyAgbGZfZnVuY3Rpb25z
LmgKLQotY2RiLm86ICAgICAgICAgICAkKFBIRFJTKSBjZGIuYwotZGJtZGIubzogICAgICAgICAk
KFBIRFJTKSBkYm1kYi5jCi1kbnNkYi5vOiAgICAgICAgICQoUEhEUlMpIGRuc2RiLmMKLWRzZWFy
Y2gubzogICAgICAgJChQSERSUykgZHNlYXJjaC5jCi1pYmFzZS5vOiAgICAgICAgICQoUEhEUlMp
IGliYXNlLmMKLWxkYXAubzogICAgICAgICAgJChQSERSUykgbGRhcC5jCi1sbWRiLm86ICAgICAg
ICAgICQoUEhEUlMpIGxtZGIuYwotanNvbi5vOiAgICAgICAgICAkKFBIRFJTKSBqc29uLmMKLWxz
ZWFyY2gubzogICAgICAgJChQSERSUykgbHNlYXJjaC5jCi1teXNxbC5vOiAgICAgICAgICQoUEhE
UlMpIG15c3FsLmMKLW5pcy5vOiAgICAgICAgICAgJChQSERSUykgbmlzLmMKLW5pc3BsdXMubzog
ICAgICAgJChQSERSUykgbmlzcGx1cy5jCi1vcmFjbGUubzogICAgICAgICQoUEhEUlMpIG9yYWNs
ZS5jCi1wYXNzd2QubzogICAgICAgICQoUEhEUlMpIHBhc3N3ZC5jCi1wZ3NxbC5vOiAgICAgICAg
ICQoUEhEUlMpIHBnc3FsLmMKLXJlYWRzb2NrLm86ICAgICAgJChQSERSUykgcmVhZHNvY2suYwot
cmVkaXMubzogICAgICAgICAkKFBIRFJTKSByZWRpcy5jCi1zcGYubzogICAgICAgICAgICQoUEhE
UlMpIHNwZi5jCi1zcWxpdGUubzogICAgICAgICQoUEhEUlMpIHNxbGl0ZS5jCi10ZXN0ZGIubzog
ICAgICAgICQoUEhEUlMpIHRlc3RkYi5jCi13aG9zb24ubzogICAgICAgICQoUEhEUlMpIHdob3Nv
bi5jCi0KLWNkYi5zbzogICAgICAgICAgICQoUEhEUlMpIGNkYi5jCi1kYm1kYi5zbzogICAgICAg
ICAkKFBIRFJTKSBkYm1kYi5jCi1kbnNkYi5zbzogICAgICAgICAkKFBIRFJTKSBkbnNkYi5jCi1k
c2VhcmNoLnNvOiAgICAgICAkKFBIRFJTKSBkc2VhcmNoLmMKLWliYXNlLnNvOiAgICAgICAgICQo
UEhEUlMpIGliYXNlLmMKLWpzb24uc286ICAgICAgICAgICQoUEhEUlMpIGpzb24uYwotbGRhcC5z
bzogICAgICAgICAgJChQSERSUykgbGRhcC5jCi1sbWRiLnNvOiAgICAgICAgICAkKFBIRFJTKSBs
bWRiLmMKLWxzZWFyY2guc286ICAgICAgICQoUEhEUlMpIGxzZWFyY2guYwotbXlzcWwuc286ICAg
ICAgICAgJChQSERSUykgbXlzcWwuYwotbmlzLnNvOiAgICAgICAgICAgJChQSERSUykgbmlzLmMK
LW5pc3BsdXMuc286ICAgICAgICQoUEhEUlMpIG5pc3BsdXMuYwotb3JhY2xlLnNvOiAgICAgICAg
JChQSERSUykgb3JhY2xlLmMKLXBhc3N3ZC5zbzogICAgICAgICQoUEhEUlMpIHBhc3N3ZC5jCi1w
Z3NxbC5zbzogICAgICAgICAkKFBIRFJTKSBwZ3NxbC5jCi1yZWRpcy5zbzogICAgICAgICAkKFBI
RFJTKSByZWRpcy5jCi1zcGYuc286ICAgICAgICAgICAkKFBIRFJTKSBzcGYuYwotc3FsaXRlLnNv
OiAgICAgICAgJChQSERSUykgc3FsaXRlLmMKLXRlc3RkYi5zbzogICAgICAgICQoUEhEUlMpIHRl
c3RkYi5jCi13aG9zb24uc286ICAgICAgICAkKFBIRFJTKSB3aG9zb24uYworbGZfY2hlY2tfZmls
ZS5vOiAkKEhEUlMpIGxmX2NoZWNrX2ZpbGUuYyAgbGZfZnVuY3Rpb25zLmgKK2xmX3F1b3RlLm86
ICAgICAgJChIRFJTKSBsZl9xdW90ZS5jICAgICAgIGxmX2Z1bmN0aW9ucy5oCitsZl9zcWxwZXJm
b3JtLm86ICQoSERSUykgbGZfc3FscGVyZm9ybS5jICBsZl9mdW5jdGlvbnMuaAorCitjZGIubzog
ICAgICAgICAgICQoSERSUykgY2RiLmMKK2RibWRiLm86ICAgICAgICAgJChIRFJTKSBkYm1kYi5j
CitkbnNkYi5vOiAgICAgICAgICQoSERSUykgZG5zZGIuYworZHNlYXJjaC5vOiAgICAgICAkKEhE
UlMpIGRzZWFyY2guYworaWJhc2UubzogICAgICAgICAkKEhEUlMpIGliYXNlLmMKK2xkYXAubzog
ICAgICAgICAgJChIRFJTKSBsZGFwLmMKK2xtZGIubzogICAgICAgICAgJChIRFJTKSBsbWRiLmMK
K2pzb24ubzogICAgICAgICAgJChIRFJTKSBqc29uLmMKK2xzZWFyY2gubzogICAgICAgJChIRFJT
KSBsc2VhcmNoLmMKK215c3FsLm86ICAgICAgICAgJChIRFJTKSBteXNxbC5jCituaXMubzogICAg
ICAgICAgICQoSERSUykgbmlzLmMKK25pc3BsdXMubzogICAgICAgJChIRFJTKSBuaXNwbHVzLmMK
K29yYWNsZS5vOiAgICAgICAgJChIRFJTKSBvcmFjbGUuYworcGFzc3dkLm86ICAgICAgICAkKEhE
UlMpIHBhc3N3ZC5jCitwZ3NxbC5vOiAgICAgICAgICQoSERSUykgcGdzcWwuYworcmVhZHNvY2su
bzogICAgICAkKEhEUlMpIHJlYWRzb2NrLmMKK3JlZGlzLm86ICAgICAgICAgJChIRFJTKSByZWRp
cy5jCitzcGYubzogICAgICAgICAgICQoSERSUykgc3BmLmMKK3NxbGl0ZS5vOiAgICAgICAgJChI
RFJTKSBzcWxpdGUuYwordGVzdGRiLm86ICAgICAgICAkKEhEUlMpIHRlc3RkYi5jCit3aG9zb24u
bzogICAgICAgICQoSERSUykgd2hvc29uLmMKKworY2RiLnNvOiAgICAgICAgICAgJChIRFJTKSBj
ZGIuYworZGJtZGIuc286ICAgICAgICAgJChIRFJTKSBkYm1kYi5jCitkbnNkYi5zbzogICAgICAg
ICAkKEhEUlMpIGRuc2RiLmMKK2RzZWFyY2guc286ICAgICAgICQoSERSUykgZHNlYXJjaC5jCitp
YmFzZS5zbzogICAgICAgICAkKEhEUlMpIGliYXNlLmMKK2pzb24uc286ICAgICAgICAgICQoSERS
UykganNvbi5jCitsZGFwLnNvOiAgICAgICAgICAkKEhEUlMpIGxkYXAuYworbG1kYi5zbzogICAg
ICAgICAgJChIRFJTKSBsbWRiLmMKK2xzZWFyY2guc286ICAgICAgICQoSERSUykgbHNlYXJjaC5j
CitteXNxbC5zbzogICAgICAgICAkKEhEUlMpIG15c3FsLmMKK25pcy5zbzogICAgICAgICAgICQo
SERSUykgbmlzLmMKK25pc3BsdXMuc286ICAgICAgICQoSERSUykgbmlzcGx1cy5jCitvcmFjbGUu
c286ICAgICAgICAkKEhEUlMpIG9yYWNsZS5jCitwYXNzd2Quc286ICAgICAgICAkKEhEUlMpIHBh
c3N3ZC5jCitwZ3NxbC5zbzogICAgICAgICAkKEhEUlMpIHBnc3FsLmMKK3JlZGlzLnNvOiAgICAg
ICAgICQoSERSUykgcmVkaXMuYworc3BmLnNvOiAgICAgICAgICAgJChIRFJTKSBzcGYuYworc3Fs
aXRlLnNvOiAgICAgICAgJChIRFJTKSBzcWxpdGUuYwordGVzdGRiLnNvOiAgICAgICAgJChIRFJT
KSB0ZXN0ZGIuYword2hvc29uLnNvOiAgICAgICAgJChIRFJTKSB3aG9zb24uYwogCiAjIEVuZApk
aWZmIC11ciBleGltLm9yaWcvc3JjL2xvb2t1cHMvbXlzcWwuYyBleGltL3NyYy9sb29rdXBzL215
c3FsLmMKLS0tIGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9teXNxbC5jCTIwMjMtMDYtMDQgMTY6MjI6
MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9sb29rdXBzL215c3FsLmMJMjAyMi0wNi0y
MyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0g
YW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUg
RXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJz
aXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhp
bSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRp
b25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBUaGFua3MgdG8gUGF1bCBLZWxs
eSBmb3IgY29udHJpYnV0aW5nIHRoZSBvcmlnaW5hbCBjb2RlIGZvciB0aGVzZQpAQCAtMjMxLDcg
KzIzMSw3IEBACiAKICAgLyogR2V0IHN0b3JlIGZvciBhIG5ldyBoYW5kbGUsIGluaXRpYWxpemUg
aXQsIGFuZCBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgKi8KIAotICBteXNxbF9oYW5kbGUgPSBzdG9y
ZV9nZXQoc2l6ZW9mKE1ZU1FMKSwgRkFMU0UpOworICBteXNxbF9oYW5kbGUgPSBzdG9yZV9nZXQo
c2l6ZW9mKE1ZU1FMKSwgR0VUX1VOVEFJTlRFRCk7CiAgIG15c3FsX2luaXQobXlzcWxfaGFuZGxl
KTsKICAgbXlzcWxfb3B0aW9ucyhteXNxbF9oYW5kbGUsIE1ZU1FMX1JFQURfREVGQVVMVF9HUk9V
UCwgQ1MgZ3JvdXApOwogICBpZiAobXlzcWxfcmVhbF9jb25uZWN0KG15c3FsX2hhbmRsZSwKQEAg
LTI0Nyw3ICsyNDcsNyBAQAogCiAgIC8qIEFkZCB0aGUgY29ubmVjdGlvbiB0byB0aGUgY2FjaGUg
Ki8KIAotICBjbiA9IHN0b3JlX2dldChzaXplb2YobXlzcWxfY29ubmVjdGlvbiksIEZBTFNFKTsK
KyAgY24gPSBzdG9yZV9nZXQoc2l6ZW9mKG15c3FsX2Nvbm5lY3Rpb24pLCBHRVRfVU5UQUlOVEVE
KTsKICAgY24tPnNlcnZlciA9IHNlcnZlcl9jb3B5OwogICBjbi0+aGFuZGxlID0gbXlzcWxfaGFu
ZGxlOwogICBjbi0+bmV4dCA9IG15c3FsX2Nvbm5lY3Rpb25zOwpAQCAtMjg2LDcgKzI4Niw3IEBA
CiAgICAgewogICAgIERFQlVHKERfbG9va3VwKSBkZWJ1Z19wcmludGZfaW5kZW50KCJNWVNRTDog
cXVlcnkgd2FzIG5vdCBvbmUgdGhhdCByZXR1cm5zIGRhdGFcbiIpOwogICAgIHJlc3VsdCA9IHN0
cmluZ19jYXQocmVzdWx0LAotCSAgICAgICBzdHJpbmdfc3ByaW50ZigiJWQiLCBteXNxbF9hZmZl
Y3RlZF9yb3dzKG15c3FsX2hhbmRsZSkpKTsKKwkgICAgICAgc3RyaW5nX3NwcmludGYoIiVsbGQi
LCBteXNxbF9hZmZlY3RlZF9yb3dzKG15c3FsX2hhbmRsZSkpKTsKICAgICAqZG9fY2FjaGUgPSAw
OwogICAgIGdvdG8gTVlTUUxfRVhJVDsKICAgICB9CkBAIC0zMDgsNyArMzA4LDcgQEAKIAogd2hp
bGUgKChteXNxbF9yb3dfZGF0YSA9IG15c3FsX2ZldGNoX3JvdyhteXNxbF9yZXN1bHQpKSkKICAg
ewotICB1bnNpZ25lZCBsb25nICpsZW5ndGhzID0gbXlzcWxfZmV0Y2hfbGVuZ3RocyhteXNxbF9y
ZXN1bHQpOworICB1bnNpZ25lZCBsb25nICogbGVuZ3RocyA9IG15c3FsX2ZldGNoX2xlbmd0aHMo
bXlzcWxfcmVzdWx0KTsKIAogICBpZiAocmVzdWx0KQogICAgIHJlc3VsdCA9IHN0cmluZ19jYXRu
KHJlc3VsdCwgVVMiXG4iLCAxKTsKQEAgLTMxOSw3ICszMTksOSBAQAogCQkJcmVzdWx0KTsKIAog
ICBlbHNlIGlmIChteXNxbF9yb3dfZGF0YVswXSAhPSBOVUxMKSAgICAvKiBOVUxMIHZhbHVlIHlp
ZWxkcyBub3RoaW5nICovCi0gICAgICByZXN1bHQgPSBzdHJpbmdfY2F0bihyZXN1bHQsIFVTIG15
c3FsX3Jvd19kYXRhWzBdLCBsZW5ndGhzWzBdKTsKKyAgICAgIHJlc3VsdCA9IGxlbmd0aHNbMF0g
PT0gMCAmJiAhcmVzdWx0CisJPyBzdHJpbmdfZ2V0KDEpCQkvKiBmb3IgMC1sZW4gc3RyaW5nIHJl
c3VsdCBlbnN1cmUgbm9uLW51bGwgZ3N0cmluZyAqLworICAgICAgICA6IHN0cmluZ19jYXRuKHJl
c3VsdCwgVVMgbXlzcWxfcm93X2RhdGFbMF0sIGxlbmd0aHNbMF0pOwogICB9CiAKIC8qIG1vcmUg
cmVzdWx0cz8gLTEgPSBubywgPjAgPSBlcnJvciwgMCA9IHllcyAoa2VlcCBsb29waW5nKQpAQCAt
NDExLDQzICs0MTMsMzkgQEAKIEFyZ3VtZW50czoKICAgcyAgICAgICAgICB0aGUgc3RyaW5nIHRv
IGJlIHF1b3RlZAogICBvcHQgICAgICAgIGFkZGl0aW9uYWwgb3B0aW9uIHRleHQgb3IgTlVMTCBp
ZiBub25lCisgIGlkeAkgICAgIGxvb2t1cCB0eXBlIGluZGV4CiAKIFJldHVybnM6ICAgICB0aGUg
cHJvY2Vzc2VkIHN0cmluZyBvciBOVUxMIGZvciBhIGJhZCBvcHRpb24KICovCiAKIHN0YXRpYyB1
c2NoYXIgKgotbXlzcWxfcXVvdGUodXNjaGFyICpzLCB1c2NoYXIgKm9wdCkKK215c3FsX3F1b3Rl
KHVzY2hhciAqIHMsIHVzY2hhciAqIG9wdCwgdW5zaWduZWQgaWR4KQogewotcmVnaXN0ZXIgaW50
IGM7Ci1pbnQgY291bnQgPSAwOwotdXNjaGFyICp0ID0gczsKLXVzY2hhciAqcXVvdGVkOworaW50
IGMsIGNvdW50ID0gMDsKK3VzY2hhciAqIHQgPSBzLCAqIHF1b3RlZDsKIAotaWYgKG9wdCAhPSBO
VUxMKSByZXR1cm4gTlVMTDsgICAgIC8qIE5vIG9wdGlvbnMgcmVjb2duaXplZCAqLworaWYgKG9w
dCkgcmV0dXJuIE5VTEw7ICAgICAvKiBObyBvcHRpb25zIHJlY29nbml6ZWQgKi8KIAotd2hpbGUg
KChjID0gKnQrKykgIT0gMCkKK3doaWxlICgoYyA9ICp0KyspKQogICBpZiAoVXN0cmNocigiXG5c
dFxyXGJcJ1wiXFwiLCBjKSAhPSBOVUxMKSBjb3VudCsrOwogCi1pZiAoY291bnQgPT0gMCkgcmV0
dXJuIHM7Ci10ID0gcXVvdGVkID0gc3RvcmVfZ2V0KFVzdHJsZW4ocykgKyBjb3VudCArIDEsIGlz
X3RhaW50ZWQocykpOworLyogT2xkIGNvZGU6ICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIHM7CitO
b3cgYWx3YXlzIGFsbG9jYXRlIGFuZCBjb3B5LCB0byB0cmFjayB0aGUgcXVvdGVkIHN0YXR1cy4g
Ki8KIAotd2hpbGUgKChjID0gKnMrKykgIT0gMCkKK3QgPSBxdW90ZWQgPSBzdG9yZV9nZXRfcXVv
dGVkKFVzdHJsZW4ocykgKyBjb3VudCArIDEsIHMsIGlkeCk7CisKK3doaWxlICgoYyA9ICpzKysp
KQogICB7CiAgIGlmIChVc3RyY2hyKCJcblx0XHJcYlwnXCJcXCIsIGMpICE9IE5VTEwpCiAgICAg
ewogICAgICp0KysgPSAnXFwnOwogICAgIHN3aXRjaChjKQogICAgICAgewotICAgICAgY2FzZSAn
XG4nOiAqdCsrID0gJ24nOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdcdCc6ICp0KysgPSAn
dCc7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2UgJ1xyJzogKnQrKyA9ICdyJzsKLSAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSAnXGInOiAqdCsrID0gJ2InOwotICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OiAgICp0KysgPSBjOwotICAgICAgYnJlYWs7CisgICAgICBjYXNlICdcbic6ICp0Kysg
PSAnbic7IGJyZWFrOworICAgICAgY2FzZSAnXHQnOiAqdCsrID0gJ3QnOyBicmVhazsKKyAgICAg
IGNhc2UgJ1xyJzogKnQrKyA9ICdyJzsgYnJlYWs7CisgICAgICBjYXNlICdcYic6ICp0KysgPSAn
Yic7IGJyZWFrOworICAgICAgZGVmYXVsdDogICAqdCsrID0gYzsgICBicmVhazsKICAgICAgIH0K
ICAgICB9CiAgIGVsc2UgKnQrKyA9IGM7CkBAIC00NjYsMTYgKzQ2NCwxOSBAQAogCiAjaW5jbHVk
ZSAiLi4vdmVyc2lvbi5oIgogCi12b2lkCi1teXNxbF92ZXJzaW9uX3JlcG9ydChGSUxFICpmKQor
Z3N0cmluZyAqCitteXNxbF92ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykKIHsKLWZwcmludGYo
ZiwgIkxpYnJhcnkgdmVyc2lvbjogTXlTUUw6IENvbXBpbGU6ICVsdSAlcyBbJXNdXG4iCi0gICAg
ICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lOiAlbHUgJXNcbiIsCitnID0g
c3RyaW5nX2ZtdF9hcHBlbmQoZywKKyAgIkxpYnJhcnkgdmVyc2lvbjogTXlTUUw6IENvbXBpbGU6
ICVsdSAlcyBbJXNdXG4iCisgICIgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lOiAlbHUg
JXNcbiIsCiAgICAgICAgIChsb25nKUVYSU1fTXhTUUxfVkVSU0lPTl9JRCwgRVhJTV9NeFNRTF9W
RVJTSU9OX1NUUiwgRVhJTV9NeFNRTF9CQVNFX1NUUiwKICAgICAgICAgbXlzcWxfZ2V0X2NsaWVu
dF92ZXJzaW9uKCksIG15c3FsX2dldF9jbGllbnRfaW5mbygpKTsKICNpZmRlZiBEWU5MT09LVVAK
LWZwcmludGYoZiwgIiAgICAgICAgICAgICAgICAgICAgICAgIEV4aW0gdmVyc2lvbiAlc1xuIiwg
RVhJTV9WRVJTSU9OX1NUUik7CitnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywKKyAgIiAgICAgICAg
ICAgICAgICAgICAgICAgIEV4aW0gdmVyc2lvbiAlc1xuIiwgRVhJTV9WRVJTSU9OX1NUUik7CiAj
ZW5kaWYKK3JldHVybiBnOwogfQogCiAvKiBUaGVzZSBhcmUgdGhlIGxvb2t1cF9pbmZvIGJsb2Nr
cyBmb3IgdGhpcyBkcml2ZXIgKi8KZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9sb29rdXBzL25pcy5j
IGV4aW0vc3JjL2xvb2t1cHMvbmlzLmMKLS0tIGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9uaXMuYwky
MDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvbG9va3Vwcy9u
aXMuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4ICsyLDggQEAK
ICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5
cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBDb3B5cmln
aHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE1ICovCi0vKiBDb3B5cmln
aHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJ
Q0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKICNpbmNsdWRl
ICIuLi9leGltLmgiCkBAIC05NywxMiArOTcsMTMgQEAKIAogI2luY2x1ZGUgIi4uL3ZlcnNpb24u
aCIKIAotdm9pZAotbmlzX3ZlcnNpb25fcmVwb3J0KEZJTEUgKmYpCitnc3RyaW5nICoKK25pc192
ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykKIHsKICNpZmRlZiBEWU5MT09LVVAKLWZwcmludGYo
ZiwgIkxpYnJhcnkgdmVyc2lvbjogTklTOiBFeGltIHZlcnNpb24gJXNcbiIsIEVYSU1fVkVSU0lP
Tl9TVFIpOworZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcsICJMaWJyYXJ5IHZlcnNpb246IE5JUzog
RXhpbSB2ZXJzaW9uICVzXG4iLCBFWElNX1ZFUlNJT05fU1RSKTsKICNlbmRpZgorcmV0dXJuIGc7
CiB9CiAKIApkaWZmIC11ciBleGltLm9yaWcvc3JjL2xvb2t1cHMvbmlzcGx1cy5jIGV4aW0vc3Jj
L2xvb2t1cHMvbmlzcGx1cy5jCi0tLSBleGltLm9yaWcvc3JjL2xvb2t1cHMvbmlzcGx1cy5jCTIw
MjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9sb29rdXBzL25p
c3BsdXMuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4ICsyLDgg
QEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBD
b3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBDb3B5
cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBDb3B5
cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBO
T1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKICNpbmNs
dWRlICIuLi9leGltLmgiCkBAIC0yMjYsMjUgKzIyNiwyNCBAQAogQXJndW1lbnRzOgogICBzICAg
ICAgICAgIHRoZSBzdHJpbmcgdG8gYmUgcXVvdGVkCiAgIG9wdCAgICAgICAgYWRkaXRpb25hbCBv
cHRpb24gdGV4dCBvciBOVUxMIGlmIG5vbmUKKyAgaWR4CSAgICAgbG9va3VwIHR5cGUgaW5kZXgK
IAogUmV0dXJuczogICAgIHRoZSBwcm9jZXNzZWQgc3RyaW5nIG9yIE5VTEwgZm9yIGEgYmFkIG9w
dGlvbgogKi8KIAogc3RhdGljIHVzY2hhciAqCi1uaXNwbHVzX3F1b3RlKHVzY2hhciAqcywgdXNj
aGFyICpvcHQpCituaXNwbHVzX3F1b3RlKHVzY2hhciAqIHMsIHVzY2hhciAqIG9wdCwgdW5zaWdu
ZWQgaWR4KQogewogaW50IGNvdW50ID0gMDsKLXVzY2hhciAqcXVvdGVkOwotdXNjaGFyICp0ID0g
czsKK3VzY2hhciAqIHF1b3RlZCwgKiB0ID0gczsKIAotaWYgKG9wdCAhPSBOVUxMKSByZXR1cm4g
TlVMTDsgICAgLyogTm8gb3B0aW9ucyByZWNvZ25pemVkICovCitpZiAob3B0KSByZXR1cm4gTlVM
TDsgICAgLyogTm8gb3B0aW9ucyByZWNvZ25pemVkICovCiAKLXdoaWxlICgqdCAhPSAwKSBpZiAo
KnQrKyA9PSAnXCInKSBjb3VudCsrOwotaWYgKGNvdW50ID09IDApIHJldHVybiBzOword2hpbGUg
KCp0KSBpZiAoKnQrKyA9PSAnXCInKSBjb3VudCsrOwogCi10ID0gcXVvdGVkID0gc3RvcmVfZ2V0
KFVzdHJsZW4ocykgKyBjb3VudCArIDEsIGlzX3RhaW50ZWQocykpOwordCA9IHF1b3RlZCA9IHN0
b3JlX2dldF9xdW90ZWQoVXN0cmxlbihzKSArIGNvdW50ICsgMSwgcywgaWR4KTsKIAotd2hpbGUg
KCpzICE9IDApCit3aGlsZSAoKnMpCiAgIHsKICAgKnQrKyA9ICpzOwogICBpZiAoKnMrKyA9PSAn
XCInKSAqdCsrID0gJ1wiJzsKQEAgLTI2MywxMiArMjYyLDEzIEBACiAKICNpbmNsdWRlICIuLi92
ZXJzaW9uLmgiCiAKLXZvaWQKLW5pc3BsdXNfdmVyc2lvbl9yZXBvcnQoRklMRSAqZikKK2dzdHJp
bmcgKgorbmlzcGx1c192ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykKIHsKICNpZmRlZiBEWU5M
T09LVVAKLWZwcmludGYoZiwgIkxpYnJhcnkgdmVyc2lvbjogTklTKzogRXhpbSB2ZXJzaW9uICVz
XG4iLCBFWElNX1ZFUlNJT05fU1RSKTsKK2cgPSBzdHJpbmdfZm10X2FwcGVuZChnLCAiTGlicmFy
eSB2ZXJzaW9uOiBOSVMrOiBFeGltIHZlcnNpb24gJXNcbiIsIEVYSU1fVkVSU0lPTl9TVFIpOwog
I2VuZGlmCityZXR1cm4gZzsKIH0KIAogCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9v
cmFjbGUuYyBleGltL3NyYy9sb29rdXBzL29yYWNsZS5jCi0tLSBleGltLm9yaWcvc3JjL2xvb2t1
cHMvb3JhY2xlLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0v
c3JjL2xvb2t1cHMvb3JhY2xlLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAK
QEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQg
YWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAy
MiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAx
NSAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCiAvKiBT
ZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9u
LiAqLwogCiAvKiBJbnRlcmZhY2UgdG8gYW4gT3JhY2xlIGRhdGFiYXNlLiBUaGlzIGNvZGUgd2Fz
IG9yaWdpbmFsbHkgc3VwcGxpZWQgYnkKQEAgLTMwNiw4ICszMDYsOCBAQAogCiAgIC8qIEdldCBz
dG9yZSBmb3IgYSBuZXcgY29ubmVjdGlvbiwgaW5pdGlhbGl6ZSBpdCwgYW5kIGNvbm5lY3QgdG8g
dGhlIHNlcnZlciAqLwogCi0gICBvcmFjbGVfaGFuZGxlID0gc3RvcmVfZ2V0KHNpemVvZihzdHJ1
Y3QgY2RhX2RlZiksIEZBTFNFKTsKLSAgIGhkYSA9IHN0b3JlX2dldChIREFfU0laRSwgRkFMU0Up
OworICAgb3JhY2xlX2hhbmRsZSA9IHN0b3JlX2dldChzaXplb2Yoc3RydWN0IGNkYV9kZWYpLCBH
RVRfVU5UQUlOVEVEKTsKKyAgIGhkYSA9IHN0b3JlX2dldChIREFfU0laRSwgR0VUX1VOVEFJTlRF
RCk7CiAgICBtZW1zZXQoaGRhLCdcMCcsSERBX1NJWkUpOwogCiAgIC8qCkBAIC0zMzAsNyArMzMw
LDcgQEAKIAogICAvKiBBZGQgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGNhY2hlICovCiAKLSAgY24g
PSBzdG9yZV9nZXQoc2l6ZW9mKG9yYWNsZV9jb25uZWN0aW9uKSwgRkFMU0UpOworICBjbiA9IHN0
b3JlX2dldChzaXplb2Yob3JhY2xlX2Nvbm5lY3Rpb24pLCBHRVRfVU5UQUlOVEVEKTsKICAgY24t
PnNlcnZlciA9IHNlcnZlcl9jb3B5OwogICBjbi0+aGFuZGxlID0gb3JhY2xlX2hhbmRsZTsKICAg
Y24tPm5leHQgPSBvcmFjbGVfY29ubmVjdGlvbnM7CkBAIC0zNDksNyArMzQ5LDcgQEAKIAogLyog
V2UgaGF2ZSBhIGNvbm5lY3Rpb24uIE9wZW4gYSBjdXJzb3IgYW5kIHJ1biB0aGUgcXVlcnkgKi8K
IAotY2RhID0gc3RvcmVfZ2V0KHNpemVvZihDZGFfRGVmKSwgRkFMU0UpOworY2RhID0gc3RvcmVf
Z2V0KHNpemVvZihDZGFfRGVmKSwgR0VUX1VOVEFJTlRFRCk7CiAKIGlmIChvb3BlbihjZGEsIG9y
YWNsZV9oYW5kbGUsICh0ZXh0ICopMCwgLTEsIC0xLCAodGV4dCAqKTAsIC0xKSAhPSAwKQogICB7
CkBAIC0zNzAsOCArMzcwLDggQEAKIC8qIEZpbmQgdGhlIG51bWJlciBvZiBmaWVsZHMgcmV0dXJu
ZWQgYW5kIHNvcnQgb3V0IHRoZWlyIHR5cGVzLiBJZiB0aGUgbnVtYmVyCiBpcyBvbmUsIHdlIGRv
bid0IGFkZCBmaWVsZCBuYW1lcyB0byB0aGUgZGF0YS4gT3RoZXJ3aXNlIHdlIGRvLiAqLwogCi1k
ZWYgPSBzdG9yZV9nZXQoc2l6ZW9mKE9yYV9EZWZpbmUpKk1BWF9TRUxFQ1RfTElTVF9TSVpFLCBG
QUxTRSk7Ci1kZXNjID0gc3RvcmVfZ2V0KHNpemVvZihPcmFfRGVzY3JpYmUpKk1BWF9TRUxFQ1Rf
TElTVF9TSVpFLCBGQUxTRSk7CitkZWYgPSBzdG9yZV9nZXQoc2l6ZW9mKE9yYV9EZWZpbmUpKk1B
WF9TRUxFQ1RfTElTVF9TSVpFLCBHRVRfVU5UQUlOVEVEKTsKK2Rlc2MgPSBzdG9yZV9nZXQoc2l6
ZW9mKE9yYV9EZXNjcmliZSkqTUFYX1NFTEVDVF9MSVNUX1NJWkUsIEdFVF9VTlRBSU5URUQpOwog
CiBpZiAoKG51bV9maWVsZHMgPSBkZXNjcmliZV9kZWZpbmUoY2RhLGRlZixkZXNjKSkgPT0gLTEp
CiAgIHsKQEAgLTUxMCwxMyArNTEwLDEyIEBACiBpbnQgc2VwID0gMDsKIHVzY2hhciAqc2VydmVy
OwogdXNjaGFyICpsaXN0ID0gb3JhY2xlX3NlcnZlcnM7Ci11c2NoYXIgYnVmZmVyWzUxMl07CiAK
IGRvX2NhY2hlID0gZG9fY2FjaGU7ICAgLyogUGxhY2F0ZSBwaWNreSBjb21waWxlcnMgKi8KIAog
REVCVUcoRF9sb29rdXApIGRlYnVnX3ByaW50Zl9pbmRlbnQoIk9SQUNMRSBxdWVyeTogJXNcbiIs
IHF1ZXJ5KTsKIAotd2hpbGUgKChzZXJ2ZXIgPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNl
cCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpKQord2hpbGUgKChzZXJ2ZXIgPSBzdHJpbmdfbmV4
dGlubGlzdCgmbGlzdCwgJnNlcCwgTlVMTCwgMCkpKQogICB7CiAgIEJPT0wgZGVmZXJfYnJlYWs7
CiAgIGludCByYyA9IHBlcmZvcm1fb3JhY2xlX3NlYXJjaChxdWVyeSwgc2VydmVyLCByZXN1bHQs
IGVycm1zZywgJmRlZmVyX2JyZWFrKTsKQEAgLTU0NCwyNyArNTQzLDI1IEBACiBBcmd1bWVudHM6
CiAgIHMgICAgICAgICAgdGhlIHN0cmluZyB0byBiZSBxdW90ZWQKICAgb3B0ICAgICAgICBhZGRp
dGlvbmFsIG9wdGlvbiB0ZXh0IG9yIE5VTEwgaWYgbm9uZQorICBpZHgJICAgICBsb29rdXAgdHlw
ZSBpbmRleAogCiBSZXR1cm5zOiAgICAgdGhlIHByb2Nlc3NlZCBzdHJpbmcgb3IgTlVMTCBmb3Ig
YSBiYWQgb3B0aW9uCiAqLwogCiBzdGF0aWMgdXNjaGFyICoKLW9yYWNsZV9xdW90ZSh1c2NoYXIg
KnMsIHVzY2hhciAqb3B0KQorb3JhY2xlX3F1b3RlKHVzY2hhciAqIHMsIHVzY2hhciAqIG9wdCwg
dW5zaWduZWQgaWR4KQogewotcmVnaXN0ZXIgaW50IGM7Ci1pbnQgY291bnQgPSAwOwotdXNjaGFy
ICp0ID0gczsKLXVzY2hhciAqcXVvdGVkOworaW50IGMsIGNvdW50ID0gMDsKK3VzY2hhciAqIHQg
PSBzLCAqIHF1b3RlZDsKIAotaWYgKG9wdCAhPSBOVUxMKSByZXR1cm4gTlVMTDsgICAgLyogTm8g
b3B0aW9ucyBhcmUgcmVjb2duaXplZCAqLworaWYgKG9wdCkgcmV0dXJuIE5VTEw7ICAgIC8qIE5v
IG9wdGlvbnMgYXJlIHJlY29nbml6ZWQgKi8KIAotd2hpbGUgKChjID0gKnQrKykgIT0gMCkKK3do
aWxlICgoYyA9ICp0KyspKQogICBpZiAoc3RyY2hyKCJcblx0XHJcYlwnXCJcXCIsIGMpICE9IE5V
TEwpIGNvdW50Kys7CiAKLWlmIChjb3VudCA9PSAwKSByZXR1cm4gczsKLXQgPSBxdW90ZWQgPSBz
dG9yZV9nZXQoKGludClzdHJsZW4ocykgKyBjb3VudCArIDEsIGlzX3RhaW50ZWQocykpOwordCA9
IHF1b3RlZCA9IHN0b3JlX2dldF9xdW90ZWQoKGludClVc3RybGVuKHMpICsgY291bnQgKyAxLCBz
LCBpZHgpOwogCi13aGlsZSAoKGMgPSAqcysrKSAhPSAwKQord2hpbGUgKChjID0gKnMrKykpCiAg
IHsKICAgaWYgKHN0cmNocigiXG5cdFxyXGJcJ1wiXFwiLCBjKSAhPSBOVUxMKQogICAgIHsKQEAg
LTU5OSwxMiArNTk2LDEzIEBACiAKICNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCiAKLXZvaWQKLW9y
YWNsZV92ZXJzaW9uX3JlcG9ydChGSUxFICpmKQorZ3N0cmluZyAqCitvcmFjbGVfdmVyc2lvbl9y
ZXBvcnQoZ3N0cmluZyAqIGcpCiB7CiAjaWZkZWYgRFlOTE9PS1VQCi1mcHJpbnRmKGYsICJMaWJy
YXJ5IHZlcnNpb246IE9yYWNsZTogRXhpbSB2ZXJzaW9uICVzXG4iLCBFWElNX1ZFUlNJT05fU1RS
KTsKK2cgPSBzdHJpbmdfZm10X2FwcGVuZChnLCAiTGlicmFyeSB2ZXJzaW9uOiBPcmFjbGU6IEV4
aW0gdmVyc2lvbiAlc1xuIiwgRVhJTV9WRVJTSU9OX1NUUik7CiAjZW5kaWYKK3JldHVybiBnOwog
fQogCiAKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9sb29rdXBzL3Bhc3N3ZC5jIGV4aW0vc3JjL2xv
b2t1cHMvcGFzc3dkLmMKLS0tIGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9wYXNzd2QuYwkyMDIzLTA2
LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvbG9va3Vwcy9wYXNzd2Qu
YwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4ICsyLDggQEAKICog
ICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5cmln
aHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBDb3B5cmlnaHQg
KGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE1ICovCi0vKiBDb3B5cmlnaHQg
KGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0Ug
Zm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKICNpbmNsdWRlICIu
Li9leGltLmgiCkBAIC0xOSw4ICsxOSw2IEBACiBzdGF0aWMgdm9pZCAqCiBwYXNzd2Rfb3Blbihj
b25zdCB1c2NoYXIgKiBmaWxlbmFtZSwgdXNjaGFyICoqIGVycm1zZykKIHsKLWZpbGVuYW1lID0g
ZmlsZW5hbWU7ICAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotZXJybXNnID0g
ZXJybXNnOwogcmV0dXJuICh2b2lkICopKC0xKTsgICAgIC8qIEp1c3QgcmV0dXJuIHNvbWV0aGlu
ZyBub24tbnVsbCAqLwogfQogCkBAIC00MCwxMiArMzgsNiBAQAogewogc3RydWN0IHBhc3N3ZCAq
cHc7CiAKLWhhbmRsZSA9IGhhbmRsZTsgICAgICAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBo
YXBweSAqLwotZmlsZW5hbWUgPSBmaWxlbmFtZTsKLWxlbmd0aCA9IGxlbmd0aDsKLWVycm1zZyA9
IGVycm1zZzsKLWRvX2NhY2hlID0gZG9fY2FjaGU7Ci0KIGlmICghcm91dGVfZmluZHVzZXIoa2V5
c3RyaW5nLCAmcHcsIE5VTEwpKSByZXR1cm4gRkFJTDsKICpyZXN1bHQgPSBzdHJpbmdfc3ByaW50
ZigiKjolZDolZDolczolczolcyIsIChpbnQpcHctPnB3X3VpZCwgKGludClwdy0+cHdfZ2lkLAog
ICBwdy0+cHdfZ2Vjb3MsIHB3LT5wd19kaXIsIHB3LT5wd19zaGVsbCk7CkBAIC02MiwxMiArNTQs
MTMgQEAKIAogI2luY2x1ZGUgIi4uL3ZlcnNpb24uaCIKIAotdm9pZAotcGFzc3dkX3ZlcnNpb25f
cmVwb3J0KEZJTEUgKmYpCitnc3RyaW5nICoKK3Bhc3N3ZF92ZXJzaW9uX3JlcG9ydChnc3RyaW5n
ICogZykKIHsKICNpZmRlZiBEWU5MT09LVVAKLWZwcmludGYoZiwgIkxpYnJhcnkgdmVyc2lvbjog
cGFzc3dkOiBFeGltIHZlcnNpb24gJXNcbiIsIEVYSU1fVkVSU0lPTl9TVFIpOworZyA9IHN0cmlu
Z19mbXRfYXBwZW5kKGcsICJMaWJyYXJ5IHZlcnNpb246IHBhc3N3ZDogRXhpbSB2ZXJzaW9uICVz
XG4iLCBFWElNX1ZFUlNJT05fU1RSKTsKICNlbmRpZgorcmV0dXJuIGc7CiB9CiAKIHN0YXRpYyBs
b29rdXBfaW5mbyBfbG9va3VwX2luZm8gPSB7CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvbG9va3Vw
cy9wZ3NxbC5jIGV4aW0vc3JjL2xvb2t1cHMvcGdzcWwuYwotLS0gZXhpbS5vcmlnL3NyYy9sb29r
dXBzL3Bnc3FsLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0v
c3JjL2xvb2t1cHMvcGdzcWwuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApA
QCAtMiw4ICsyLDggQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBh
Z2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIy
ICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4
ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNl
ZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24u
ICovCiAKIC8qIFRoYW5rcyB0byBQZXRyIENlY2ggZm9yIGNvbnRyaWJ1dGluZyB0aGUgb3JpZ2lu
YWwgY29kZSBmb3IgdGhlc2UKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiAgIC8qIEFkZCB0aGUgY29u
bmVjdGlvbiB0byB0aGUgY2FjaGUgKi8KIAotICBjbiA9IHN0b3JlX2dldChzaXplb2YocGdzcWxf
Y29ubmVjdGlvbiksIEZBTFNFKTsKKyAgY24gPSBzdG9yZV9nZXQoc2l6ZW9mKHBnc3FsX2Nvbm5l
Y3Rpb24pLCBHRVRfVU5UQUlOVEVEKTsKICAgY24tPnNlcnZlciA9IHNlcnZlcl9jb3B5OwogICBj
bi0+aGFuZGxlID0gcGdfY29ubjsKICAgY24tPm5leHQgPSBwZ3NxbF9jb25uZWN0aW9uczsKQEAg
LTMzNiw2ICszMzYsNyBAQAogICAgICAgdXNjaGFyICp0bXAgPSBVUyBQUWdldHZhbHVlKHBnX3Jl
c3VsdCwgaSwgaik7CiAgICAgICByZXN1bHQgPSBsZl9xdW90ZShVUyBQUWZuYW1lKHBnX3Jlc3Vs
dCwgaiksIHRtcCwgVXN0cmxlbih0bXApLCByZXN1bHQpOwogICAgICAgfQorICBpZiAoIXJlc3Vs
dCkgcmVzdWx0ID0gc3RyaW5nX2dldCgxKTsKICAgfQogCiAvKiBJZiByZXN1bHQgaXMgTlVMTCB0
aGVuIG5vIGRhdGEgaGFzIGJlZW4gZm91bmQgYW5kIHNvIHdlIHJldHVybiBGQUlMLiAqLwpAQCAt
NDEzLDI3ICs0MTQsMjUgQEAKIEFyZ3VtZW50czoKICAgcyAgICAgICAgICB0aGUgc3RyaW5nIHRv
IGJlIHF1b3RlZAogICBvcHQgICAgICAgIGFkZGl0aW9uYWwgb3B0aW9uIHRleHQgb3IgTlVMTCBp
ZiBub25lCisgIGlkeAkgICAgIGxvb2t1cCB0eXBlIGluZGV4CiAKIFJldHVybnM6ICAgICB0aGUg
cHJvY2Vzc2VkIHN0cmluZyBvciBOVUxMIGZvciBhIGJhZCBvcHRpb24KICovCiAKIHN0YXRpYyB1
c2NoYXIgKgotcGdzcWxfcXVvdGUodXNjaGFyICpzLCB1c2NoYXIgKm9wdCkKK3Bnc3FsX3F1b3Rl
KHVzY2hhciAqIHMsIHVzY2hhciAqIG9wdCwgdW5zaWduZWQgaWR4KQogewotcmVnaXN0ZXIgaW50
IGM7Ci1pbnQgY291bnQgPSAwOwotdXNjaGFyICp0ID0gczsKLXVzY2hhciAqcXVvdGVkOworaW50
IGNvdW50ID0gMCwgYzsKK3VzY2hhciAqIHQgPSBzLCAqIHF1b3RlZDsKIAotaWYgKG9wdCAhPSBO
VUxMKSByZXR1cm4gTlVMTDsgICAgIC8qIE5vIG9wdGlvbnMgcmVjb2duaXplZCAqLworaWYgKG9w
dCkgcmV0dXJuIE5VTEw7ICAgICAvKiBObyBvcHRpb25zIHJlY29nbml6ZWQgKi8KIAotd2hpbGUg
KChjID0gKnQrKykgIT0gMCkKK3doaWxlICgoYyA9ICp0KyspKQogICBpZiAoVXN0cmNocigiXG5c
dFxyXGJcJ1wiXFwiLCBjKSAhPSBOVUxMKSBjb3VudCsrOwogCi1pZiAoY291bnQgPT0gMCkgcmV0
dXJuIHM7Ci10ID0gcXVvdGVkID0gc3RvcmVfZ2V0KFVzdHJsZW4ocykgKyBjb3VudCArIDEsIGlz
X3RhaW50ZWQocykpOwordCA9IHF1b3RlZCA9IHN0b3JlX2dldF9xdW90ZWQoVXN0cmxlbihzKSAr
IGNvdW50ICsgMSwgcywgaWR4KTsKIAotd2hpbGUgKChjID0gKnMrKykgIT0gMCkKK3doaWxlICgo
YyA9ICpzKyspKQogICB7CiAgIGlmIChjID09ICdcJycpCiAgICAgewpAQCAtNDQ1LDE2ICs0NDQs
MTEgQEAKICAgICAqdCsrID0gJ1xcJzsKICAgICBzd2l0Y2goYykKICAgICAgIHsKLSAgICAgIGNh
c2UgJ1xuJzogKnQrKyA9ICduJzsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSAnXHQnOiAqdCsr
ID0gJ3QnOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdccic6ICp0KysgPSAncic7Ci0gICAg
ICBicmVhazsKLSAgICAgIGNhc2UgJ1xiJzogKnQrKyA9ICdiJzsKLSAgICAgIGJyZWFrOwotICAg
ICAgZGVmYXVsdDogICAqdCsrID0gYzsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSAnXG4nOiAq
dCsrID0gJ24nOyBicmVhazsKKyAgICAgIGNhc2UgJ1x0JzogKnQrKyA9ICd0JzsgYnJlYWs7Cisg
ICAgICBjYXNlICdccic6ICp0KysgPSAncic7IGJyZWFrOworICAgICAgY2FzZSAnXGInOiAqdCsr
ID0gJ2InOyBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICAgKnQrKyA9IGM7ICAgYnJlYWs7CiAgICAg
ICB9CiAgICAgfQogICBlbHNlICp0KysgPSBjOwpAQCAtNDczLDExICs0NjcsMTEgQEAKIAogI2lu
Y2x1ZGUgIi4uL3ZlcnNpb24uaCIKIAotdm9pZAotcGdzcWxfdmVyc2lvbl9yZXBvcnQoRklMRSAq
ZikKK2dzdHJpbmcgKgorcGdzcWxfdmVyc2lvbl9yZXBvcnQoZ3N0cmluZyAqIGcpCiB7CiAjaWZk
ZWYgRFlOTE9PS1VQCi1mcHJpbnRmKGYsICJMaWJyYXJ5IHZlcnNpb246IFBvc3RncmVTUUw6IEV4
aW0gdmVyc2lvbiAlc1xuIiwgRVhJTV9WRVJTSU9OX1NUUik7CitnID0gc3RyaW5nX2ZtdF9hcHBl
bmQoZywgIkxpYnJhcnkgdmVyc2lvbjogUG9zdGdyZVNRTDogRXhpbSB2ZXJzaW9uICVzXG4iLCBF
WElNX1ZFUlNJT05fU1RSKTsKICNlbmRpZgogCiAvKiBWZXJzaW9uIHJlcG9ydGluZzogdGhlcmUg
YXBwZWFycyB0byBiZSBubyBhdmFpbGFibGUgaW5mb3JtYXRpb24gYWJvdXQKQEAgLTQ4NSw2ICs0
NzksOCBAQAogY2FuIGFjY2VzcyB0aGUgc2VydmVyIHZlcnNpb24gYW5kIHRoZSBjaG9zZW4gcHJv
dG9jb2wgdmVyc2lvbiwgYnV0IHRob3NlCiBhcmVuJ3QgcmVhbGx5IHdoYXQgd2Ugd2FudC4gIEl0
IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gZGVidWdfcHJpbnRmIHRob3NlCiB3aGVuIHRoZSBjb25uZWN0
aW9uIGlzIGVzdGFibGlzaGVkIHRob3VnaD8gKi8KKworcmV0dXJuIGc7CiB9CiAKIApkaWZmIC11
ciBleGltLm9yaWcvc3JjL2xvb2t1cHMvcmVhZHNvY2suYyBleGltL3NyYy9sb29rdXBzL3JlYWRz
b2NrLmMKLS0tIGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9yZWFkc29jay5jCTIwMjMtMDYtMDQgMTY6
MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9sb29rdXBzL3JlYWRzb2NrLmMJMjAy
Mi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsNiArMiw3IEBACiAqICAgICBF
eGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChj
KSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBK
ZXJlbXkgSGFycmlzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlv
bnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKQEAgLTEzLDggKzE0LDYgQEAKIGludGVy
bmFsX3JlYWRzb2NrX29wZW4oY2xpZW50X2Nvbm5fY3R4ICogY2N0eCwgY29uc3QgdXNjaGFyICog
c3NwZWMsCiAgIGludCB0aW1lb3V0LCBCT09MIGRvX3RscywgdXNjaGFyICoqIGVycm1zZykKIHsK
LWludCBzZXAgPSAnLCc7Ci11c2NoYXIgKiBlbGU7CiBjb25zdCB1c2NoYXIgKiBzZXJ2ZXJfbmFt
ZTsKIGhvc3RfaXRlbSBob3N0OwogCkBAIC05Nyw3ICs5Niw3IEBACiAKICAgc2lnYWxybV9zZWVu
ID0gRkFMU0U7CiAgIEFMQVJNKHRpbWVvdXQpOwotICByYyA9IGNvbm5lY3QoY2N0eC0+c29jaywg
KHN0cnVjdCBzb2NrYWRkciAqKSgmc29ja3VuKSwgc2l6ZW9mKHNvY2t1bikpOworICByYyA9IGNv
bm5lY3QoY2N0eC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmc29ja3VuLCBzaXplb2Yoc29j
a3VuKSk7CiAgIEFMQVJNX0NMUigwKTsKICAgaWYgKHNpZ2Fscm1fc2VlbikKICAgICB7CkBAIC0x
MTcsMTAgKzExNiwyMCBAQAogI2lmbmRlZiBESVNBQkxFX1RMUwogaWYgKGRvX3RscykKICAgewor
ICB1bmlvbiBzb2NrYWRkcl80NiBpbnRlcmZhY2Vfc29jazsKKyAgRVhJTV9TT0NLTEVOX1Qgc2l6
ZSA9IHNpemVvZihpbnRlcmZhY2Vfc29jayk7CiAgIHNtdHBfY29ubmVjdF9hcmdzIGNvbm5fYXJn
cyA9IHsuaG9zdCA9ICZob3N0IH07Ci0gIHRsc19zdXBwb3J0IHRsc19kdW1teSA9IHsuc25pPU5V
TEx9OworICB0bHNfc3VwcG9ydCB0bHNfZHVtbXkgPSB7IC5zbmkgPSBOVUxMIH07CiAgIHVzY2hh
ciAqIGVycnN0cjsKIAorICBpZiAoZ2V0c29ja25hbWUoY2N0eC0+c29jaywgKHN0cnVjdCBzb2Nr
YWRkciAqKSAmaW50ZXJmYWNlX3NvY2ssICZzaXplKSA9PSAwKQorICAgIGNvbm5fYXJncy5zZW5k
aW5nX2lwX2FkZHJlc3MgPSBob3N0X250b2EoLTEsICZpbnRlcmZhY2Vfc29jaywgTlVMTCwgTlVM
TCk7CisgIGVsc2UKKyAgICB7CisgICAgKmVycm1zZyA9IHN0cmluZ19zcHJpbnRmKCJnZXRzb2Nr
bmFtZSBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBnb3RvIGJhZDsKKyAgICB9
CisKICAgaWYgKCF0bHNfY2xpZW50X3N0YXJ0KGNjdHgsICZjb25uX2FyZ3MsIE5VTEwsICZ0bHNf
ZHVtbXksICZlcnJzdHIpKQogICAgIHsKICAgICAqZXJybXNnID0gc3RyaW5nX3NwcmludGYoIlRM
UyBjb25uZWN0IGZhaWxlZDogJXMiLCBlcnJzdHIpOwpAQCAtMTUxLDcgKzE2MCw3IEBACiBzdGF0
aWMgdm9pZCAqCiByZWFkc29ja19vcGVuKGNvbnN0IHVzY2hhciAqIGZpbGVuYW1lLCB1c2NoYXIg
KiogZXJybXNnKQogewotY2xpZW50X2Nvbm5fY3R4ICogY2N0eCA9IHN0b3JlX2dldChzaXplb2Yo
KmNjdHgpLCBGQUxTRSk7CitjbGllbnRfY29ubl9jdHggKiBjY3R4ID0gc3RvcmVfZ2V0KHNpemVv
ZigqY2N0eCksIEdFVF9VTlRBSU5URUQpOwogY2N0eC0+c29jayA9IC0xOwogY2N0eC0+dGxzX2N0
eCA9IE5VTEw7CiBERUJVRyhEX2xvb2t1cCkgZGVidWdfcHJpbnRmX2luZGVudCgicmVhZHNvY2s6
IGFsbG9jYXRlZCBjb250ZXh0XG4iKTsKQEAgLTE4Miw3ICsxOTEsNiBAQAogfSBsZiA9IHsuZG9f
c2h1dGRvd24gPSBUUlVFfTsKIHVzY2hhciAqIGVvbCA9IE5VTEw7CiBpbnQgdGltZW91dCA9IDU7
Ci1GSUxFICogZnA7CiBnc3RyaW5nICogeWllbGQ7CiBpbnQgcmV0ID0gREVGRVI7CiAKQEAgLTI1
MCwxNiArMjU4LDI4IEBACiBhbmQgbWlnaHQgbmVlZCBsYXRlciB3cml0ZSBvcHMgb24gdGhlIHNv
Y2tldCwgdGhlIHN0ZGlvIG11c3QgYmUgaW4KIHdyaXRhYmxlIG1vZGUgb3IgdGhlIHVuZGVybHlp
bmcgc29ja2V0IGdvZXMgbm9uLXdyaXRhYmxlLiAqLwogCi1pZiAoIWNjdHgtPnRsc19jdHgpCi0g
IGZwID0gZmRvcGVuKGNjdHgtPnNvY2ssIGxmLmRvX3NodXRkb3duID8gInJiIiA6ICJ3YiIpOwot
CiBzaWdhbHJtX3NlZW4gPSBGQUxTRTsKLUFMQVJNKHRpbWVvdXQpOwoteWllbGQgPQotI2lmbmRl
ZiBESVNBQkxFX1RMUwotICBjY3R4LT50bHNfY3R4ID8gY2F0X2ZpbGVfdGxzKGNjdHgtPnRsc19j
dHgsIE5VTEwsIGVvbCkgOgorI2lmZGVmIERJU0FCTEVfVExTCitpZiAoVFJVRSkKKyNlbHNlCitp
ZiAoIWNjdHgtPnRsc19jdHgpCiAjZW5kaWYKLQkJICBjYXRfZmlsZShmcCwgTlVMTCwgZW9sKTsK
KyAgeworICBGSUxFICogZnAgPSBmZG9wZW4oY2N0eC0+c29jaywgInJiIik7CisgIGlmICghZnAp
CisgICAgeworICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUMsICJyZWFkc29jayBm
ZG9wZW46ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgIGdvdG8gb3V0OworICAgIH0KKyAg
QUxBUk0odGltZW91dCk7CisgIHlpZWxkID0gY2F0X2ZpbGUoZnAsIE5VTEwsIGVvbCk7CisgIH0K
K2Vsc2UKKyAgeworICBBTEFSTSh0aW1lb3V0KTsKKyAgeWllbGQgPSBjYXRfZmlsZV90bHMoY2N0
eC0+dGxzX2N0eCwgTlVMTCwgZW9sKTsKKyAgfQorCiBBTEFSTV9DTFIoMCk7CiAKIGlmIChzaWdh
bHJtX3NlZW4pCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvbG9va3Vwcy9yZWRpcy5jIGV4aW0vc3Jj
L2xvb2t1cHMvcmVkaXMuYwotLS0gZXhpbS5vcmlnL3NyYy9sb29rdXBzL3JlZGlzLmMJMjAyMy0w
Ni0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL2xvb2t1cHMvcmVkaXMu
YwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4ICsyLDggQEAKICog
ICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5cmln
aHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBDb3B5cmlnaHQg
KGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBDb3B5cmlnaHQg
KGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0Ug
Zm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKICNpbmNsdWRlICIu
Li9leGltLmgiCkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICB9CiAKICAgLyogQWRkIHRoZSBjb25u
ZWN0aW9uIHRvIHRoZSBjYWNoZSAqLwotICBjbiA9IHN0b3JlX2dldChzaXplb2YocmVkaXNfY29u
bmVjdGlvbiksIEZBTFNFKTsKKyAgY24gPSBzdG9yZV9nZXQoc2l6ZW9mKHJlZGlzX2Nvbm5lY3Rp
b24pLCBHRVRfVU5UQUlOVEVEKTsKICAgY24tPnNlcnZlciA9IHNlcnZlcl9jb3B5OwogICBjbi0+
aGFuZGxlID0gcmVkaXNfaGFuZGxlOwogICBjbi0+bmV4dCA9IHJlZGlzX2Nvbm5lY3Rpb25zOwpA
QCAtMzk5LDI3ICszOTksMjUgQEAKIEFyZ3VtZW50czoKICAgcyAgICAgICAgICB0aGUgc3RyaW5n
IHRvIGJlIHF1b3RlZAogICBvcHQgICAgICAgIGFkZGl0aW9uYWwgb3B0aW9uIHRleHQgb3IgTlVM
TCBpZiBub25lCisgIGlkeAkgICAgIGxvb2t1cCB0eXBlIGluZGV4CiAKIFJldHVybnM6ICAgICB0
aGUgcHJvY2Vzc2VkIHN0cmluZyBvciBOVUxMIGZvciBhIGJhZCBvcHRpb24KICovCiAKIHN0YXRp
YyB1c2NoYXIgKgotcmVkaXNfcXVvdGUodXNjaGFyICpzLCB1c2NoYXIgKm9wdCkKK3JlZGlzX3F1
b3RlKHVzY2hhciAqIHMsIHVzY2hhciAqIG9wdCwgdW5zaWduZWQgaWR4KQogewotcmVnaXN0ZXIg
aW50IGM7Ci1pbnQgY291bnQgPSAwOwotdXNjaGFyICp0ID0gczsKLXVzY2hhciAqcXVvdGVkOwor
aW50IGMsIGNvdW50ID0gMDsKK3VzY2hhciAqIHQgPSBzLCAqIHF1b3RlZDsKIAogaWYgKG9wdCkg
cmV0dXJuIE5VTEw7ICAgICAvKiBObyBvcHRpb25zIHJlY29nbml6ZWQgKi8KIAotd2hpbGUgKChj
ID0gKnQrKykgIT0gMCkKK3doaWxlICgoYyA9ICp0KyspKQogICBpZiAoaXNzcGFjZShjKSB8fCBj
ID09ICdcXCcpIGNvdW50Kys7CiAKLWlmIChjb3VudCA9PSAwKSByZXR1cm4gczsKLXQgPSBxdW90
ZWQgPSBzdG9yZV9nZXQoVXN0cmxlbihzKSArIGNvdW50ICsgMSwgaXNfdGFpbnRlZChzKSk7Cit0
ID0gcXVvdGVkID0gc3RvcmVfZ2V0X3F1b3RlZChVc3RybGVuKHMpICsgY291bnQgKyAxLCBzLCBp
ZHgpOwogCi13aGlsZSAoKGMgPSAqcysrKSAhPSAwKQord2hpbGUgKChjID0gKnMrKykpCiAgIHsK
ICAgaWYgKGlzc3BhY2UoYykgfHwgYyA9PSAnXFwnKSAqdCsrID0gJ1xcJzsKICAgKnQrKyA9IGM7
CkBAIC00MzUsMTQgKzQzMywxNiBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KICNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCiAKLXZvaWQKLXJlZGlz
X3ZlcnNpb25fcmVwb3J0KEZJTEUgKmYpCitnc3RyaW5nICoKK3JlZGlzX3ZlcnNpb25fcmVwb3J0
KGdzdHJpbmcgKiBnKQogewotZnByaW50ZihmLCAiTGlicmFyeSB2ZXJzaW9uOiBSRURJUzogQ29t
cGlsZTogJWQgWyVkXVxuIiwKLSAgICAgICAgICAgICAgIEhJUkVESVNfTUFKT1IsIEhJUkVESVNf
TUlOT1IpOworZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcsCisgICJMaWJyYXJ5IHZlcnNpb246IFJF
RElTOiBDb21waWxlOiAlZCBbJWRdXG4iLCBISVJFRElTX01BSk9SLCBISVJFRElTX01JTk9SKTsK
ICNpZmRlZiBEWU5MT09LVVAKLWZwcmludGYoZiwgIiAgICAgICAgICAgICAgICAgICAgICAgIEV4
aW0gdmVyc2lvbiAlc1xuIiwgRVhJTV9WRVJTSU9OX1NUUik7CitnID0gc3RyaW5nX2ZtdF9hcHBl
bmQoZywKKyAgIiAgICAgICAgICAgICAgICAgICAgICAgIEV4aW0gdmVyc2lvbiAlc1xuIiwgRVhJ
TV9WRVJTSU9OX1NUUik7CiAjZW5kaWYKK3JldHVybiBnOwogfQogCiAKZGlmZiAtdXIgZXhpbS5v
cmlnL3NyYy9sb29rdXBzL3NwZi5jIGV4aW0vc3JjL2xvb2t1cHMvc3BmLmMKLS0tIGV4aW0ub3Jp
Zy9zcmMvbG9va3Vwcy9zcGYuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAor
KysgZXhpbS9zcmMvbG9va3Vwcy9zcGYuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCAr
MDMwMApAQCAtNSwxNCArNSwxMyBAQAogLyogRXhpbSAtIFNQRiBsb29rdXAgbW9kdWxlIHVzaW5n
IGxpYnNwZjIKICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKK0Nv
cHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIKIENvcHlyaWdodCAo
YykgMjAwNSBDaHJpcyBXZWJiLCBBcmFjaHN5cyBJbnRlcm5ldCBTZXJ2aWNlcyBMdGQKIAogVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIgdmVyc2lvbiAyCiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQotQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwCiAq
LwogCiAjaW5jbHVkZSAiLi4vZXhpbS5oIgpAQCAtMTI4LDEyICsxMjcsMTMgQEAKIAogI2luY2x1
ZGUgIi4uL3ZlcnNpb24uaCIKIAotdm9pZAotc3BmX3ZlcnNpb25fcmVwb3J0KEZJTEUgKmYpCitn
c3RyaW5nICoKK3NwZl92ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykKIHsKICNpZmRlZiBEWU5M
T09LVVAKLWZwcmludGYoZiwgIkxpYnJhcnkgdmVyc2lvbjogU1BGOiBFeGltIHZlcnNpb24gJXNc
biIsIEVYSU1fVkVSU0lPTl9TVFIpOworZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcsICJMaWJyYXJ5
IHZlcnNpb246IFNQRjogRXhpbSB2ZXJzaW9uICVzXG4iLCBFWElNX1ZFUlNJT05fU1RSKSk7CiAj
ZW5kaWYKK3JldHVybiBnOwogfQogCiAKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9sb29rdXBzL3Nx
bGl0ZS5jIGV4aW0vc3JjL2xvb2t1cHMvc3FsaXRlLmMKLS0tIGV4aW0ub3JpZy9zcmMvbG9va3Vw
cy9zcWxpdGUuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9z
cmMvbG9va3Vwcy9zcWxpdGUuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApA
QCAtMiw4ICsyLDggQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBh
Z2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIy
ICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4
ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNl
ZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24u
ICovCiAKICNpbmNsdWRlICIuLi9leGltLmgiCkBAIC02Niw3ICs2Niw3IEBACiAgIC8qIEZvciBt
dWx0aXBsZSBmaWVsZHMsIGluY2x1ZGUgdGhlIGZpZWxkIG5hbWUgdG9vICovCiAgIGZvciAoaW50
IGkgPSAwOyBpIDwgYXJnYzsgaSsrKQogICAgIHsKLSAgICB1c2NoYXIgKnZhbHVlID0gVVMoKGFy
Z3ZbaV0gIT0gTlVMTCk/IGFyZ3ZbaV06IjxOVUxMPiIpOworICAgIHVzY2hhciAqIHZhbHVlID0g
VVMoYXJndltpXSA/IGFyZ3ZbaV0gOiAiPE5VTEw+Iik7CiAgICAgcmVzID0gbGZfcXVvdGUoVVMg
YXpDb2xOYW1lW2ldLCB2YWx1ZSwgVXN0cmxlbih2YWx1ZSksIHJlcyk7CiAgICAgfQogICB9CkBA
IC03NCw3ICs3NCw4IEBACiBlbHNlCiAgIHJlcyA9IHN0cmluZ19jYXQocmVzLCBhcmd2WzBdID8g
VVMgYXJndlswXSA6IFVTICI8TlVMTD4iKTsKIAotKihnc3RyaW5nICoqKWFyZyA9IHJlczsKKy8q
IGFsd2F5cyByZXR1cm4gYSBub24tbnVsbCBnc3RyaW5nLCBldmVuIGZvciBhIHplcm8tbGVuZ3Ro
IHN0cmluZyByZXN1bHQgKi8KKyooZ3N0cmluZyAqKilhcmcgPSByZXMgPyByZXMgOiBzdHJpbmdf
Z2V0KDEpOwogcmV0dXJuIDA7CiB9CiAKQEAgLTk0LDcgKzk1LDcgQEAKICAgcmV0dXJuIEZBSUw7
CiAgIH0KIAotaWYgKCFyZXMpICpkb19jYWNoZSA9IDA7CitpZiAoIXJlcykgKmRvX2NhY2hlID0g
MDsJLyogb24gZmFpbCwgd2lwZSBjYWNoZSAqLwogCiAqcmVzdWx0ID0gc3RyaW5nX2Zyb21fZ3N0
cmluZyhyZXMpOwogcmV0dXJuIE9LOwpAQCAtMTI1LDI2ICsxMjYsMjUgQEAKIEFyZ3VtZW50czoK
ICAgcyAgICAgICAgICB0aGUgc3RyaW5nIHRvIGJlIHF1b3RlZAogICBvcHQgICAgICAgIGFkZGl0
aW9uYWwgb3B0aW9uIHRleHQgb3IgTlVMTCBpZiBub25lCisgIGlkeAkgICAgIGxvb2t1cCB0eXBl
IGluZGV4CiAKIFJldHVybnM6ICAgICB0aGUgcHJvY2Vzc2VkIHN0cmluZyBvciBOVUxMIGZvciBh
IGJhZCBvcHRpb24KICovCiAKIHN0YXRpYyB1c2NoYXIgKgotc3FsaXRlX3F1b3RlKHVzY2hhciAq
cywgdXNjaGFyICpvcHQpCitzcWxpdGVfcXVvdGUodXNjaGFyICogcywgdXNjaGFyICogb3B0LCB1
bnNpZ25lZCBpZHgpCiB7Ci1yZWdpc3RlciBpbnQgYzsKLWludCBjb3VudCA9IDA7Ci11c2NoYXIg
KnQgPSBzOwotdXNjaGFyICpxdW90ZWQ7CitpbnQgYywgY291bnQgPSAwOwordXNjaGFyICogdCA9
IHMsICogcXVvdGVkOwogCi1pZiAob3B0ICE9IE5VTEwpIHJldHVybiBOVUxMOyAgICAgLyogTm8g
b3B0aW9ucyByZWNvZ25pemVkICovCitpZiAob3B0KSByZXR1cm4gTlVMTDsgICAgIC8qIE5vIG9w
dGlvbnMgcmVjb2duaXplZCAqLwogCi13aGlsZSAoKGMgPSAqdCsrKSAhPSAwKSBpZiAoYyA9PSAn
XCcnKSBjb3VudCsrOword2hpbGUgKChjID0gKnQrKykpIGlmIChjID09ICdcJycpIGNvdW50Kys7
Citjb3VudCArPSB0IC0gczsKIAotaWYgKGNvdW50ID09IDApIHJldHVybiBzOwotdCA9IHF1b3Rl
ZCA9IHN0b3JlX2dldChVc3RybGVuKHMpICsgY291bnQgKyAxLCBpc190YWludGVkKHMpKTsKK3Qg
PSBxdW90ZWQgPSBzdG9yZV9nZXRfcXVvdGVkKGNvdW50ICsgMSwgcywgaWR4KTsKIAotd2hpbGUg
KChjID0gKnMrKykgIT0gMCkKK3doaWxlICgoYyA9ICpzKyspKQogICB7CiAgIGlmIChjID09ICdc
JycpICp0KysgPSAnXCcnOwogICAqdCsrID0gYzsKQEAgLTE2NCwxNSArMTY0LDE4IEBACiAKICNp
bmNsdWRlICIuLi92ZXJzaW9uLmgiCiAKLXZvaWQKLXNxbGl0ZV92ZXJzaW9uX3JlcG9ydChGSUxF
ICpmKQorZ3N0cmluZyAqCitzcWxpdGVfdmVyc2lvbl9yZXBvcnQoZ3N0cmluZyAqIGcpCiB7Ci1m
cHJpbnRmKGYsICJMaWJyYXJ5IHZlcnNpb246IFNRTGl0ZTogQ29tcGlsZTogJXNcbiIKLSAgICAg
ICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lOiAlc1xuIiwKK2cgPSBzdHJp
bmdfZm10X2FwcGVuZChnLAorICAiTGlicmFyeSB2ZXJzaW9uOiBTUUxpdGU6IENvbXBpbGU6ICVz
XG4iCisgICIgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZTogJXNcbiIsCiAgICAgICAg
IFNRTElURV9WRVJTSU9OLCBzcWxpdGUzX2xpYnZlcnNpb24oKSk7CiAjaWZkZWYgRFlOTE9PS1VQ
Ci1mcHJpbnRmKGYsICIgICAgICAgICAgICAgICAgICAgICAgICAgRXhpbSB2ZXJzaW9uICVzXG4i
LCBFWElNX1ZFUlNJT05fU1RSKTsKK2cgPSBzdHJpbmdfZm10X2FwcGVuZChnLAorICAiICAgICAg
ICAgICAgICAgICAgICAgICAgIEV4aW0gdmVyc2lvbiAlc1xuIiwgRVhJTV9WRVJTSU9OX1NUUik7
CiAjZW5kaWYKK3JldHVybiBnOwogfQogCiBzdGF0aWMgbG9va3VwX2luZm8gX2xvb2t1cF9pbmZv
ID0gewpkaWZmIC11ciBleGltLm9yaWcvc3JjL2xvb2t1cHMvdGVzdGRiLmMgZXhpbS9zcmMvbG9v
a3Vwcy90ZXN0ZGIuYwotLS0gZXhpbS5vcmlnL3NyYy9sb29rdXBzL3Rlc3RkYi5jCTIwMjMtMDYt
MDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9sb29rdXBzL3Rlc3RkYi5j
CTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAg
ICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdo
dCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAo
YykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTUgKi8KLS8qIENvcHlyaWdodCAo
YykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBm
b3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogI2luY2x1ZGUgIi4u
L2V4aW0uaCIKQEAgLTI0LDggKzI0LDYgQEAKIHN0YXRpYyB2b2lkICoKIHRlc3RkYl9vcGVuKGNv
bnN0IHVzY2hhciAqIGZpbGVuYW1lLCB1c2NoYXIgKiogZXJybXNnKQogewotZmlsZW5hbWUgPSBm
aWxlbmFtZTsgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotZXJybXNnID0gZXJy
bXNnOwogcmV0dXJuICh2b2lkICopKDEpOyAgICAvKiBKdXN0IHJldHVybiBzb21ldGhpbmcgbm9u
LW51bGwgKi8KIH0KIApAQCAtNDIsMTAgKzQwLDYgQEAKICAgaW50IGxlbmd0aCwgdXNjaGFyICoq
IHJlc3VsdCwgdXNjaGFyICoqIGVycm1zZywgdWludCAqIGRvX2NhY2hlLAogICBjb25zdCB1c2No
YXIgKiBvcHRzKQogewotaGFuZGxlID0gaGFuZGxlOyAgICAgICAgICAvKiBLZWVwIHBpY2t5IGNv
bXBpbGVycyBoYXBweSAqLwotZmlsZW5hbWUgPSBmaWxlbmFtZTsKLWxlbmd0aCA9IGxlbmd0aDsK
LQogaWYgKFVzdHJjbXAocXVlcnksICJmYWlsIikgPT0gMCkKICAgewogICAqZXJybXNnID0gVVMi
dGVzdGRiIGxvb2t1cCBmb3JjZWQgRkFJTCI7CkBAIC03NCwxMiArNjgsMTMgQEAKIAogI2luY2x1
ZGUgIi4uL3ZlcnNpb24uaCIKIAotdm9pZAotdGVzdGRiX3ZlcnNpb25fcmVwb3J0KEZJTEUgKmYp
Citnc3RyaW5nICoKK3Rlc3RkYl92ZXJzaW9uX3JlcG9ydChnc3RyaW5nICogZykKIHsKICNpZmRl
ZiBEWU5MT09LVVAKLWZwcmludGYoZiwgIkxpYnJhcnkgdmVyc2lvbjogVGVzdERCOiBFeGltIHZl
cnNpb24gJXNcbiIsIEVYSU1fVkVSU0lPTl9TVFIpOworZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcs
ICJMaWJyYXJ5IHZlcnNpb246IFRlc3REQjogRXhpbSB2ZXJzaW9uICVzXG4iLCBFWElNX1ZFUlNJ
T05fU1RSKTsKICNlbmRpZgorcmV0dXJuIGc7CiB9CiAKIApkaWZmIC11ciBleGltLm9yaWcvc3Jj
L2xvb2t1cHMvd2hvc29uLmMgZXhpbS9zcmMvbG9va3Vwcy93aG9zb24uYwotLS0gZXhpbS5vcmln
L3NyYy9sb29rdXBzL3dob3Nvbi5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAw
CisrKyBleGltL3NyYy9sb29rdXBzL3dob3Nvbi5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAw
MDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwg
dHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMg
MjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ug
MTk5NSAtIDIwMTUgKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAy
MCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRp
c3RyaWJ1dGlvbi4gKi8KIAogLyogVGhpcyBjb2RlIG9yaWdpbmFsbHkgY2FtZSBmcm9tIFJvYmVy
dCBXYWwuICovCkBAIC0yMyw4ICsyMyw2IEBACiBzdGF0aWMgdm9pZCAqCiB3aG9zb25fb3Blbihj
b25zdCB1c2NoYXIgKiBmaWxlbmFtZSwgdXNjaGFyICoqIGVycm1zZykKIHsKLWZpbGVuYW1lID0g
ZmlsZW5hbWU7ICAgLyogS2VlcCBwaWNreSBjb21waWxlcnMgaGFwcHkgKi8KLWVycm1zZyA9IGVy
cm1zZzsKIHJldHVybiAodm9pZCAqKSgxKTsgICAgLyogSnVzdCByZXR1cm4gc29tZXRoaW5nIG5v
bi1udWxsICovCiB9CiAKQEAgLTQwLDExICszOCw2IEBACiAgIHVzY2hhciAqKiByZXN1bHQsIHVz
Y2hhciAqKiBlcnJtc2csIHVpbnQgKiBkb19jYWNoZSwgY29uc3QgdXNjaGFyICogb3B0cykKIHsK
IHVzY2hhciBidWZmZXJbODBdOwotaGFuZGxlID0gaGFuZGxlOyAgICAgICAgICAvKiBLZWVwIHBp
Y2t5IGNvbXBpbGVycyBoYXBweSAqLwotZmlsZW5hbWUgPSBmaWxlbmFtZTsKLWxlbmd0aCA9IGxl
bmd0aDsKLWVycm1zZyA9IGVycm1zZzsKLWRvX2NhY2hlID0gZG9fY2FjaGU7CiAKIHN3aXRjaCAo
d3NvX3F1ZXJ5KENTIHF1ZXJ5LCBDUyBidWZmZXIsIHNpemVvZihidWZmZXIpKSkKICAgewpAQCAt
NzEsMTMgKzY0LDE2IEBACiAKICNpbmNsdWRlICIuLi92ZXJzaW9uLmgiCiAKLXZvaWQKLXdob3Nv
bl92ZXJzaW9uX3JlcG9ydChGSUxFICpmKQorZ3N0cmluZyAqCit3aG9zb25fdmVyc2lvbl9yZXBv
cnQoZ3N0cmluZyAqIGcpCiB7Ci1mcHJpbnRmKGYsICJMaWJyYXJ5IHZlcnNpb246IFdob3Nvbjog
UnVudGltZTogJXNcbiIsIHdzb192ZXJzaW9uKCkpOworZyA9IHN0cmluZ19mbXRfYXBwZW5kKGcs
CisgICJMaWJyYXJ5IHZlcnNpb246IFdob3NvbjogUnVudGltZTogJXNcbiIsIHdzb192ZXJzaW9u
KCkpOwogI2lmZGVmIERZTkxPT0tVUAotZnByaW50ZihmLCAiICAgICAgICAgICAgICAgICAgICAg
ICAgIEV4aW0gdmVyc2lvbiAlc1xuIiwgRVhJTV9WRVJTSU9OX1NUUik7CitnID0gc3RyaW5nX2Zt
dF9hcHBlbmQoZywKKyAgIiAgICAgICAgICAgICAgICAgICAgICAgICBFeGltIHZlcnNpb24gJXNc
biIsIEVYSU1fVkVSU0lPTl9TVFIpOwogI2VuZGlmCityZXR1cm4gZzsKIH0KIAogc3RhdGljIGxv
b2t1cF9pbmZvIF9sb29rdXBfaW5mbyA9IHsKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9tYWNyb19w
cmVkZWYuYyBleGltL3NyYy9tYWNyb19wcmVkZWYuYwotLS0gZXhpbS5vcmlnL3NyYy9tYWNyb19w
cmVkZWYuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMv
bWFjcm9fcHJlZGVmLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIs
OCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQg
ICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
IAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwog
LyogQ29weXJpZ2h0IChjKSBKZXJlbXkgSGFycmlzIDE5OTUgLSAyMDE4ICovCi0vKiBDb3B5cmln
aHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJ
Q0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIC8qIENyZWF0
ZSBhIHN0YXRpYyBkYXRhIHN0cnVjdHVyZSB3aXRoIHRoZSBwcmVkZWZpbmVkIG1hY3JvcywgdG8g
YmUKQEAgLTE3NCwyMSArMTc0LDE4IEBACiAjaWZkZWYgU1VQUE9SVF9TT0NLUwogICBidWlsdGlu
X21hY3JvX2NyZWF0ZShVUyJfSEFWRV9TT0NLUyIpOwogI2VuZGlmCisjaWYgZGVmaW5lZChTVVBQ
T1JUX1NSUykKKyAgYnVpbHRpbl9tYWNyb19jcmVhdGUoVVMiX0hBVkVfTkFUSVZFX1NSUyIpOwkv
KiBiZXdhcmUgY2xhc2ggd2l0aCBfSEFWRV9TUlMgKi8KKyNlbmRpZgogI2lmZGVmIFRDUF9GQVNU
T1BFTgogICBidWlsdGluX21hY3JvX2NyZWF0ZShVUyJfSEFWRV9UQ1BfRkFTVE9QRU4iKTsKICNl
bmRpZgotI2lmZGVmIEVYUEVSSU1FTlRBTF9MTURCCi0gIGJ1aWx0aW5fbWFjcm9fY3JlYXRlKFVT
Il9IQVZFX0xNREIiKTsKLSNlbmRpZgogI2lmZGVmIFNVUFBPUlRfU1BGCiAgIGJ1aWx0aW5fbWFj
cm9fY3JlYXRlKFVTIl9IQVZFX1NQRiIpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChFWFBFUklNRU5U
QUxfU1JTKSB8fCBkZWZpbmVkKEVYUEVSSU1FTlRBTF9TUlNfTkFUSVZFKQorI2lmZGVmIFNVUFBP
UlRfU1JTCiAgIGJ1aWx0aW5fbWFjcm9fY3JlYXRlKFVTIl9IQVZFX1NSUyIpOwogI2VuZGlmCi0j
aWYgZGVmaW5lZChFWFBFUklNRU5UQUxfU1JTX05BVElWRSkKLSAgYnVpbHRpbl9tYWNyb19jcmVh
dGUoVVMiX0hBVkVfTkFUSVZFX1NSUyIpOwkvKiBiZXdhcmUgY2xhc2ggd2l0aCBfSEFWRV9TUlMg
Ki8KLSNlbmRpZgogI2lmZGVmIEVYUEVSSU1FTlRBTF9BUkMKICAgYnVpbHRpbl9tYWNyb19jcmVh
dGUoVVMiX0hBVkVfQVJDIik7CiAjZW5kaWYKQEAgLTIwNCw3ICsyMDEsNyBAQAogI2lmZGVmIEVY
UEVSSU1FTlRBTF9EU05fSU5GTwogICBidWlsdGluX21hY3JvX2NyZWF0ZShVUyJfSEFWRV9EU05f
SU5GTyIpOwogI2VuZGlmCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUKKyNpZm5kZWYg
RElTQUJMRV9UTFNfUkVTVU1FCiAgIGJ1aWx0aW5fbWFjcm9fY3JlYXRlKFVTIl9IQVZFX1RMU19S
RVNVTUUiKTsKICNlbmRpZgogCkBAIC0yMjYsMTUgKzIyMywxNiBAQAogI2lmZGVmIExPT0tVUF9J
QkFTRQogICBidWlsdGluX21hY3JvX2NyZWF0ZShVUyJfSEFWRV9MT09LVVBfSUJBU0UiKTsKICNl
bmRpZgorI2lmZGVmIExPT0tVUF9MTURCCisgIGJ1aWx0aW5fbWFjcm9fY3JlYXRlKFVTIl9IQVZF
X0xNREIiKTsKKyAgYnVpbHRpbl9tYWNyb19jcmVhdGUoVVMiX0hBVkVfTE9PS1VQX0xNREIiKTsK
KyNlbmRpZgogI2lmZGVmIExPT0tVUF9MREFQCiAgIGJ1aWx0aW5fbWFjcm9fY3JlYXRlKFVTIl9I
QVZFX0xPT0tVUF9KU09OIik7CiAjZW5kaWYKICNpZmRlZiBMT09LVVBfTERBUAogICBidWlsdGlu
X21hY3JvX2NyZWF0ZShVUyJfSEFWRV9MT09LVVBfTERBUCIpOwogI2VuZGlmCi0jaWZkZWYgRVhQ
RVJJTUVOVEFMX0xNREIKLSAgYnVpbHRpbl9tYWNyb19jcmVhdGUoVVMiX0hBVkVfTE9PS1VQX0xN
REIiKTsKLSNlbmRpZgogI2lmZGVmIExPT0tVUF9NWVNRTAogICBidWlsdGluX21hY3JvX2NyZWF0
ZShVUyJfSEFWRV9MT09LVVBfTVlTUUwiKTsKICNlbmRpZgpAQCAtMjc4LDExICsyNzYsMzUgQEAK
ICMgZW5kaWYKICNlbmRpZgogCitmZWF0dXJlc19hY2woKTsKK2ZlYXR1cmVzX2NyeXB0bygpOwor
CiAjaWZkZWYgV0lUSF9DT05URU5UX1NDQU4KIGZlYXR1cmVzX21hbHdhcmUoKTsKICNlbmRpZgor
fQogCi1mZWF0dXJlc19jcnlwdG8oKTsKK3N0YXRpYyB2b2lkCitleHBfZmVhdHVyZXModm9pZCkK
K3sKKyNpZmRlZiBFWFBFUklNRU5UQUxfQVJDCisgIGJ1aWx0aW5fbWFjcm9fY3JlYXRlKFVTIl9F
WFBfQVJDIik7CisjZW5kaWYKKyNpZmRlZiBFWFBFUklNRU5UQUxfQlJJR0hUTUFJTAorICBidWls
dGluX21hY3JvX2NyZWF0ZShVUyJfRVhQX0JNSSIpOworI2VuZGlmCisjaWZkZWYgRVhQRVJJTUVO
VEFMX0RDQworICBidWlsdGluX21hY3JvX2NyZWF0ZShVUyJfRVhQX0RDQyIpOworI2VuZGlmCisj
aWZkZWYgRVhQRVJJTUVOVEFMX0RTTl9JTkZPCisgIGJ1aWx0aW5fbWFjcm9fY3JlYXRlKFVTIl9F
WFBfRFNOSSIpOworI2VuZGlmCisjaWZkZWYgRVhQRVJJTUVOVEFMX0VTTVRQX0xJTUlUUworICBi
dWlsdGluX21hY3JvX2NyZWF0ZShVUyJfRVhQX0xJTUlUUyIpOworI2VuZGlmCisjaWZkZWYgRVhQ
RVJJTUVOVEFMX1FVRVVFRklMRQorICBidWlsdGluX21hY3JvX2NyZWF0ZShVUyJfRVhQX1FVRVVF
RklMRSIpOworI2VuZGlmCiB9CiAKIApAQCAtMzEzLDYgKzMzNSw3IEBACiB7CiBwcmludGYoIiNp
bmNsdWRlIFwiZXhpbS5oXCJcbiIpOwogZmVhdHVyZXMoKTsKK2V4cF9mZWF0dXJlcygpOwogb3B0
aW9ucygpOwogcGFyYW1zKCk7CiAKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9tYWNyb19wcmVkZWYu
aCBleGltL3NyYy9tYWNyb19wcmVkZWYuaAotLS0gZXhpbS5vcmlnL3NyYy9tYWNyb19wcmVkZWYu
aAkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvbWFjcm9f
cHJlZGVmLmgJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTMsNiArMyw3
IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwog
CiAvKiBDb3B5cmlnaHQgKGMpIEplcmVteSBIYXJyaXMgMjAxNyAtIDIwMTggKi8KKy8qIENvcHly
aWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMSAqLwogLyogU2VlIHRoZSBmaWxlIE5P
VElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogLyogR2xv
YmFsIGZ1bmN0aW9ucyAqLwpAQCAtMTIsNiArMTMsNyBAQAogZXh0ZXJuIHZvaWQgYnVpbHRpbl9t
YWNyb19jcmVhdGVfdmFyKGNvbnN0IHVzY2hhciAqLCBjb25zdCB1c2NoYXIgKik7CiBleHRlcm4g
dm9pZCBvcHRpb25zX2Zyb21fbGlzdChvcHRpb25saXN0ICosIHVuc2lnbmVkLCBjb25zdCB1c2No
YXIgKiwgdXNjaGFyICopOwogCitleHRlcm4gdm9pZCBmZWF0dXJlc19hY2wodm9pZCk7CiBleHRl
cm4gdm9pZCBmZWF0dXJlc19tYWx3YXJlKHZvaWQpOwogZXh0ZXJuIHZvaWQgZmVhdHVyZXNfY3J5
cHRvKHZvaWQpOwogZXh0ZXJuIHZvaWQgb3B0aW9uc19tYWluKHZvaWQpOwpkaWZmIC11ciBleGlt
Lm9yaWcvc3JjL21hY3Jvcy5oIGV4aW0vc3JjL21hY3Jvcy5oCi0tLSBleGltLm9yaWcvc3JjL21h
Y3Jvcy5oCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9t
YWNyb3MuaAkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4ICsyLDgg
QEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBD
b3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBDb3B5
cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBDb3B5
cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBO
T1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIApAQCAt
NzksMTEgKzc5LDYgQEAKICAgKCh1c2NoYXIpKGMpID4gMTI3ICYmIHByaW50X3RvcGJpdGNoYXJz
KSkKIAogCi0vKiBDb252ZW5pZW5jZSBmb3IgdGVzdGluZyBzdHJpbmdzICovCi0KLSNkZWZpbmUg
c3RyZXFpYyhGb28sIEJhcikgKHN0cmNtcGljKEZvbywgQmFyKSA9PSAwKQotCi0KIC8qIFdoZW4g
YnVpbHQgd2l0aCBUTFMgc3VwcG9ydCwgdGhlIGFjdCBvZiBmbHVzaGluZyBTTVRQIG91dHB1dCBi
ZWNvbWVzCiBhIG5vLW9wIG9uY2UgYW4gU1NMIHNlc3Npb24gaXMgaW4gcHJvZ3Jlc3MuICovCiAK
QEAgLTExMCw4ICsxMDUsOSBAQAogCiAvKiBEZWJ1Z2dpbmcgY29udHJvbCAqLwogCisjZGVmaW5l
IExPR19OQU1FX1NJWkUgMjU2CiAjZGVmaW5lIERFQlVHKHgpICAgICAgaWYgKGRlYnVnX3NlbGVj
dG9yICYgKHgpKQotI2RlZmluZSBIREVCVUcoeCkgICAgIGlmIChob3N0X2NoZWNraW5nIHx8IChk
ZWJ1Z19zZWxlY3RvciAmICh4KSkpCisjZGVmaW5lIEhERUJVRyh4KSAgICAgaWYgKGhvc3RfY2hl
Y2tpbmcgfHwgZGVidWdfc2VsZWN0b3IgJiAoeCkpCiAKIC8qIFRoZSBkZWZhdWx0IEZyb206IHRl
eHQgZm9yIERTTnMgKi8KIApAQCAtMTk1LDE0ICsxOTEsNiBAQAogI2RlZmluZSBXQUlUX05BTUVf
TUFYIDUwCiAjZGVmaW5lIFdBSVRfQ09OVF9NQVggMTAwMAogCi0vKiBXYWl0IHRoaXMgbG9uZyBi
ZWZvcmUgZGV0ZXJtaW5pbmcgdGhhdCBhIFByb3h5IFByb3RvY29sIGNvbmZpZ3VyZWQKLWhvc3Qg
aXNuJ3Qgc3BlYWtpbmcgdGhlIHByb3RvY29sLCBhbmQgc28gaXMgZGlzYWxsb3dlZC4gQ2FuIGJl
IG1vdmVkIHRvCi1ydW50aW1lIGNvbmZpZ3VyYXRpb24gaWYgcGVyIHNpdGUgc2V0dGluZ3MgYmVj
b21lIG5lZWRlZC4gKi8KLSNpZmRlZiBTVVBQT1JUX1BST1hZCi0jZGVmaW5lIFBST1hZX05FR09U
SUFUSU9OX1RJTUVPVVRfU0VDIDMKLSNkZWZpbmUgUFJPWFlfTkVHT1RJQVRJT05fVElNRU9VVF9V
U0VDIDAKLSNlbmRpZgotCiAvKiBGaXhlZCBvcHRpb24gdmFsdWVzIGZvciBhbGwgUENSRSBmdW5j
dGlvbnMgKi8KIAogI2RlZmluZSBQQ1JFX0NPUFQgMCAgIC8qIGNvbXBpbGUgKi8KQEAgLTIxMCw4
ICsxOTgsNyBAQAogCiAvKiBNYWNyb3MgZm9yIHRyaXZpYWwgZnVuY3Rpb25zICovCiAKLSNkZWZp
bmUgbWFjX2lzbXNnaWQocykgXAotICAocGNyZV9leGVjKHJlZ2V4X2lzbXNnaWQsTlVMTCxDUyBz
LFVzdHJsZW4ocyksMCxQQ1JFX0VPUFQsTlVMTCwwKSA+PSAwKQorI2RlZmluZSBtYWNfaXNtc2dp
ZChzKQkocmVnZXhfbWF0Y2gocmVnZXhfaXNtc2dpZCwgKHMpLCAtMSwgTlVMTCkpCiAKIAogLyog
T3B0aW9ucyBmb3IgZG5zX25leHRfcnIgKi8KQEAgLTMxMyw3ICszMDAsNyBAQAogI2RlZmluZSBE
RUxJVkVSX01VQV9GQUlMRUQgICAgICAgICAyICAvKiBGYWlsdXJlIHdoZW4gbXVhX3dyYXBwZXIg
aXMgc2V0ICovCiAjZGVmaW5lIERFTElWRVJfTk9UX0FUVEVNUFRFRCAgICAgIDMgIC8qIE5vdCB0
cmllZCAobm8gbXNnIG9yIGlzIGxvY2tlZCAqLwogCi0vKiBSZXR1cm5zIGZyb20gRE5TIGxvb2t1
cCBmdW5jdGlvbnMuICovCisvKiBSZXR1cm5zIGZyb20gRE5TIGxvb2t1cCBmdW5jdGlvbnMuIFVz
ZSBkbnNfcmNfbmFtZXNbXSBmb3IgZGVidWcgc3RyaW5ncyAqLwogCiBlbnVtIHsgRE5TX1NVQ0NF
RUQsIEROU19OT01BVENILCBETlNfTk9EQVRBLCBETlNfQUdBSU4sIEROU19GQUlMIH07CiAKQEAg
LTQzNiw2ICs0MjMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRF90aW1lc3RhbXAgICB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRF9yZXNvbHZlcikpCiAKKy8qIEJpdHMgZm9yIGRlYnVnIHRyaWdnZXJzICovCisKK2Vu
dW0geworICBEVGlfcGFuaWN0cmlnZ2VyLAorICBEVGlfcHJldHJpZ2dlciwKK307CisKIC8qIE9w
dGlvbnMgYml0cyBmb3IgbG9nZ2luZy4gVGhvc2UgdGhhdCBoYXZlIHZhbHVlcyA8IEJJVFdPUkRT
SVpFIGNhbiBiZSB1c2VkCiBpbiBjYWxscyB0byBsb2dfd3JpdGUoKS4gVGhlIG90aGVycyBhcmUg
cHV0IGludG8gbGF0ZXIgd29yZHMgaW4gbG9nX3NlbGVjdG9yCiBhbmQgYXJlIG9ubHkgZXZlciB0
ZXN0ZWQgaW5kZXBlbmRlbnRseSwgc28gdGhleSBkbyBub3QgbmVlZCBiaXQgbWFzawpAQCAtNDgz
LDggKzQ3NywxMCBAQAogICBMaV9vdXRnb2luZ19wb3J0LAogICBMaV9waWQsCiAgIExpX3BpcGVs
aW5pbmcsCisgIExpX3Byb3RvY29sX2RldGFpbCwKICAgTGlfcHJveHksCiAgIExpX3F1ZXVlX3Rp
bWUsCisgIExpX3F1ZXVlX3RpbWVfZXhjbHVzaXZlLAogICBMaV9xdWV1ZV90aW1lX292ZXJhbGws
CiAgIExpX3JlY2VpdmVfdGltZSwKICAgTGlfcmVjZWl2ZWRfc2VuZGVyLApAQCAtNTYzLDE5ICs1
NTksMjAgQEAKICNkZWZpbmUgRVJSTk9fQVVUSFBST0IgICAgICAgKC00OCkgICAvKiBBdXRoZW50
aWNhdG9yICJvdGhlciIgZmFpbHVyZSAqLwogI2RlZmluZSBFUlJOT19VVEY4X0ZXRCAgICAgICAo
LTQ5KSAgIC8qIHRhcmdldCBub3Qgc3VwcG9ydGluZyBTTVRQVVRGOCAqLwogI2RlZmluZSBFUlJO
T19IT1NUX0lTX0xPQ0FMICAoLTUwKSAgIC8qIFRyYW5zcG9ydCByZWZ1c2VzIHRvIHRhbGsgdG8g
bG9jYWxob3N0ICovCisjZGVmaW5lIEVSUk5PX1RBSU5UICAgICAgICAgICgtNTEpICAgLyogVHJh
bnNwb3J0IHJlZnVzZXMgdG8gdGFsayB1c2UgdGFpbnRlZCBmaWxlbmFtZSAqLwogCiAvKiBUaGVz
ZSBtdXN0IGJlIGxhc3QsIHNvIGFsbCByZXRyeSBkZWZlcm1lbnRzIGNhbiBlYXNpbHkgYmUgaWRl
bnRpZmllZCAqLwogCi0jZGVmaW5lIEVSUk5PX1JFVFJZX0JBU0UgICAgICgtNTEpICAgLyogQmFz
ZSB0byB0ZXN0IGFnYWluc3QgKi8KLSNkZWZpbmUgRVJSTk9fUlJFVFJZICAgICAgICAgKC01MSkg
ICAvKiBOb3QgdGltZSBmb3Igcm91dGluZyAqLworI2RlZmluZSBFUlJOT19SRVRSWV9CQVNFICAg
ICAoLTUyKSAgIC8qIEJhc2UgdG8gdGVzdCBhZ2FpbnN0ICovCisjZGVmaW5lIEVSUk5PX1JSRVRS
WSAgICAgICAgICgtNTIpICAgLyogTm90IHRpbWUgZm9yIHJvdXRpbmcgKi8KIAotI2RlZmluZSBF
UlJOT19XQVJOX0JBU0UgICAgICAoLTUyKSAgIC8qIEJhc2UgdG8gdGVzdCBhZ2FpbnN0ICovCi0j
ZGVmaW5lIEVSUk5PX0xSRVRSWSAgICAgICAgICgtNTIpICAgLyogTm90IHRpbWUgZm9yIGxvY2Fs
IGRlbGl2ZXJ5ICovCi0jZGVmaW5lIEVSUk5PX0hSRVRSWSAgICAgICAgICgtNTMpICAgLyogTm90
IHRpbWUgZm9yIGFueSByZW1vdGUgaG9zdCAqLwotI2RlZmluZSBFUlJOT19MT0NBTF9PTkxZICAg
ICAoLTU0KSAgIC8qIExvY2FsLW9ubHkgZGVsaXZlcnkgKi8KLSNkZWZpbmUgRVJSTk9fUVVFVUVf
RE9NQUlOICAgKC01NSkgICAvKiBEb21haW4gaW4gcXVldWVfZG9tYWlucyAqLwotI2RlZmluZSBF
UlJOT19UUkVUUlkgICAgICAgICAoLTU2KSAgIC8qIFRyYW5zcG9ydCBjb25jdXJyZW5jeSBsaW1p
dCAqLwotI2RlZmluZSBFUlJOT19FVkVOVAkgICAgICgtNTcpICAgLyogRXZlbnQgcHJvY2Vzc2lu
ZyByZXF1ZXN0IGFsdGVybmF0ZSByZXNwb25zZSAqLworI2RlZmluZSBFUlJOT19XQVJOX0JBU0Ug
ICAgICAoLTUzKSAgIC8qIEJhc2UgdG8gdGVzdCBhZ2FpbnN0ICovCisjZGVmaW5lIEVSUk5PX0xS
RVRSWSAgICAgICAgICgtNTMpICAgLyogTm90IHRpbWUgZm9yIGxvY2FsIGRlbGl2ZXJ5ICovCisj
ZGVmaW5lIEVSUk5PX0hSRVRSWSAgICAgICAgICgtNTQpICAgLyogTm90IHRpbWUgZm9yIGFueSBy
ZW1vdGUgaG9zdCAqLworI2RlZmluZSBFUlJOT19MT0NBTF9PTkxZICAgICAoLTU1KSAgIC8qIExv
Y2FsLW9ubHkgZGVsaXZlcnkgKi8KKyNkZWZpbmUgRVJSTk9fUVVFVUVfRE9NQUlOICAgKC01Nikg
ICAvKiBEb21haW4gaW4gcXVldWVfZG9tYWlucyAqLworI2RlZmluZSBFUlJOT19UUkVUUlkgICAg
ICAgICAoLTU3KSAgIC8qIFRyYW5zcG9ydCBjb25jdXJyZW5jeSBsaW1pdCAqLworI2RlZmluZSBF
UlJOT19FVkVOVAkgICAgICgtNTgpICAgLyogRXZlbnQgcHJvY2Vzc2luZyByZXF1ZXN0IGFsdGVy
bmF0ZSByZXNwb25zZSAqLwogCiAKIApAQCAtNzM5LDYgKzczNiw3IEBACiAjZGVmaW5lIHZvcHRf
Y2FsbG91dF9yZWNpcHBtYXN0ZXIgMHgwMTAwICAgLyogdXNlIHBvc3RtYXN0ZXIgdG8gdmVyaWZ5
IHJlY2lwICovCiAjZGVmaW5lIHZvcHRfY2FsbG91dF9ob2xkCSAgMHgwMjAwICAgLyogbGF6eSBj
bG9zZSBjb25uZWN0aW9uICovCiAjZGVmaW5lIHZvcHRfc3VjY2Vzc19vbl9yZWRpcmVjdCAgMHgw
NDAwCisjZGVmaW5lIHZvcHRfcXVvdGEgICAgICAgICAgICAgICAgMHgwODAwICAgLyogcXVvdGEg
Y2hlY2ssIHRvIGxvY2FsL2FwcGVuZGZpbGUgKi8KIAogLyogVmFsdWVzIGZvciBmaWVsZHMgaW4g
Y2FsbG91dCBjYWNoZSByZWNvcmRzICovCiAKQEAgLTg2OSwyMiArODY3LDIzIEBACiAKIC8qIE9w
dGlvbnMgZm9yIHRyYW5zcG9ydF93cml0ZV9tZXNzYWdlICovCiAKLSNkZWZpbmUgdG9wdF9hZGRf
cmV0dXJuX3BhdGggICAgMHgwMDEKLSNkZWZpbmUgdG9wdF9hZGRfZGVsaXZlcnlfZGF0ZSAgMHgw
MDIKLSNkZWZpbmUgdG9wdF9hZGRfZW52ZWxvcGVfdG8gICAgMHgwMDQKLSNkZWZpbmUgdG9wdF91
c2VfY3JsZiAgICAgICAgICAgMHgwMDggIC8qIFRlcm1pbmF0ZSBsaW5lcyB3aXRoIENSTEYgKi8K
LSNkZWZpbmUgdG9wdF9lbmRfZG90ICAgICAgICAgICAgMHgwMTAgIC8qIFNlbmQgdGVybWluYXRp
bmcgZG90IGxpbmUgKi8KLSNkZWZpbmUgdG9wdF9ub19oZWFkZXJzICAgICAgICAgMHgwMjAgIC8q
IE9taXQgaGVhZGVycyAqLwotI2RlZmluZSB0b3B0X25vX2JvZHkgICAgICAgICAgICAweDA0MCAg
LyogT21pdCBib2R5ICovCi0jZGVmaW5lIHRvcHRfZXNjYXBlX2hlYWRlcnMgICAgIDB4MDgwICAv
KiBBcHBseSBlc2NhcGUgY2hlY2sgdG8gaGVhZGVycyAqLwotI2RlZmluZSB0b3B0X3VzZV9iZGF0
CQkweDEwMCAgLyogcHJlcGVuZCBjaHVua3Mgd2l0aCBSRkMzMDMwIEJEQVQgaGVhZGVyICovCi0j
ZGVmaW5lIHRvcHRfb3V0cHV0X3N0cmluZwkweDIwMCAgLyogY3JlYXRlIHN0cmluZyByYXRoZXIg
dGhhbiB3cml0ZSB0byBmZCAqLwotI2RlZmluZSB0b3B0X2NvbnRpbnVhdGlvbgkweDQwMCAgLyog
ZG8gbm90IHJlc2V0IGJ1ZmZlciAqLwotI2RlZmluZSB0b3B0X25vdF9zb2NrZXQJCTB4ODAwICAv
KiBjYW5ub3QgZG8gc29ja2V0LW9ubHkgc3lzY2FsbHMgKi8KKyNkZWZpbmUgdG9wdF9hZGRfcmV0
dXJuX3BhdGggICAgMHgwMDAxCisjZGVmaW5lIHRvcHRfYWRkX2RlbGl2ZXJ5X2RhdGUgIDB4MDAw
MgorI2RlZmluZSB0b3B0X2FkZF9lbnZlbG9wZV90byAgICAweDAwMDQKKyNkZWZpbmUgdG9wdF9l
c2NhcGVfaGVhZGVycyAgICAgMHgwMDA4CS8qIEFwcGx5IGVzY2FwZSBjaGVjayB0byBoZWFkZXJz
ICovCisjZGVmaW5lIHRvcHRfdXNlX2NybGYgICAgICAgICAgIDB4MDAxMAkvKiBUZXJtaW5hdGUg
bGluZXMgd2l0aCBDUkxGICovCisjZGVmaW5lIHRvcHRfbm9faGVhZGVycyAgICAgICAgIDB4MDAy
MAkvKiBPbWl0IGhlYWRlcnMgKi8KKyNkZWZpbmUgdG9wdF9ub19ib2R5ICAgICAgICAgICAgMHgw
MDQwCS8qIE9taXQgYm9keSAqLworI2RlZmluZSB0b3B0X2VuZF9kb3QgICAgICAgICAgICAweDAw
ODAJLyogU2VuZCB0ZXJtaW5hdGluZyBkb3QgbGluZSAqLworI2RlZmluZSB0b3B0X25vX2ZsdXNo
CQkweDAxMDAJLyogbW9yZSBkYXRhIGV4cGVjdGVkIGFmdGVyIG1lc3NhZ2UgKGVnIFFVSVQpICov
CisjZGVmaW5lIHRvcHRfdXNlX2JkYXQJCTB4MDIwMAkvKiBwcmVwZW5kIGNodW5rcyB3aXRoIFJG
QzMwMzAgQkRBVCBoZWFkZXIgKi8KKyNkZWZpbmUgdG9wdF9vdXRwdXRfc3RyaW5nCTB4MDQwMAkv
KiBjcmVhdGUgc3RyaW5nIHJhdGhlciB0aGFuIHdyaXRlIHRvIGZkICovCisjZGVmaW5lIHRvcHRf
Y29udGludWF0aW9uCTB4MDgwMAkvKiBkbyBub3QgcmVzZXQgYnVmZmVyICovCisjZGVmaW5lIHRv
cHRfbm90X3NvY2tldAkJMHgxMDAwCS8qIGNhbm5vdCBkbyBzb2NrZXQtb25seSBzeXNjYWxscyAq
LwogCiAvKiBPcHRpb25zIGZvciBzbXRwX3dyaXRlX2NvbW1hbmQgKi8KIAotZW51bSB7CQorZW51
bSB7CiAgIFNDTURfRkxVU0ggPSAwLAkvKiB3cml0ZSB0byBrZXJuZWwgKi8KICAgU0NNRF9NT1JF
LAkJLyogd3JpdGUgdG8ga2VybmVsLCBidXQgbGlrZWx5IG1vcmUgc29vbiAqLwogICBTQ01EX0JV
RkZFUgkJLyogc3Rhc2ggaW4gYXBwbGljYXRpb24gY21kIG91dHB1dCBidWZmZXIgKi8KQEAgLTk3
Niw3ICs5NzUsOSBAQAogI2RlZmluZSBBQ0xfQklUX01JTUUJCUJJVChBQ0xfV0hFUkVfTUlNRSkK
ICNkZWZpbmUgQUNMX0JJVF9ES0lNCQlCSVQoQUNMX1dIRVJFX0RLSU0pCiAjZGVmaW5lIEFDTF9C
SVRfREFUQQkJQklUKEFDTF9XSEVSRV9EQVRBKQotI2lmbmRlZiBESVNBQkxFX1BSRFIKKyNpZmRl
ZiBESVNBQkxFX1BSRFIKKyMgZGVmaW5lIEFDTF9CSVRfUFJEUgkJMAorI2Vsc2UKICMgZGVmaW5l
IEFDTF9CSVRfUFJEUgkJQklUKEFDTF9XSEVSRV9QUkRSKQogI2VuZGlmCiAjZGVmaW5lIEFDTF9C
SVRfTk9UU01UUAkJQklUKEFDTF9XSEVSRV9OT1RTTVRQKQpAQCAtOTk0LDYgKzk5NSwxMCBAQAog
I2RlZmluZSBBQ0xfQklUX0RFTElWRVJZCUJJVChBQ0xfV0hFUkVfREVMSVZFUlkpCiAjZGVmaW5l
IEFDTF9CSVRfVU5LTk9XTgkJQklUKEFDTF9XSEVSRV9VTktOT1dOKQogCisjZGVmaW5lIEFDTF9C
SVRTX0hBVkVEQVRBCShBQ0xfQklUX01JTUUgfCBBQ0xfQklUX0RLSU0gfCBBQ0xfQklUX0RBVEEg
XAorCQkJCXwgQUNMX0JJVF9QUkRSIFwKKwkJCQl8IEFDTF9CSVRfTk9UU01UUCB8IEFDTF9CSVRf
UVVJVCB8IEFDTF9CSVRfTk9UUVVJVCkKKwogCiAvKiBTaXR1YXRpb25zIGZvciBzcG9vbF93cml0
ZV9oZWFkZXIoKSAqLwogCkBAIC0xMDQ3LDkgKzEwNTIsMTAgQEAKIAogCiAvKiBPcHRpb25zIG9u
IHRsc19jbG9zZSAqLwotI2RlZmluZSBUTFNfTk9fU0hVVERPV04JCTAKLSNkZWZpbmUgVExTX1NI
VVRET1dOX05PV0FJVAkxCi0jZGVmaW5lIFRMU19TSFVURE9XTl9XQUlUCTIKKyNkZWZpbmUgVExT
X05PX1NIVVRET1dOCQkwCS8qIEp1c3QgZm9yZ2V0IHRoZSBjb250ZXh0ICovCisjZGVmaW5lIFRM
U19TSFVURE9XTl9OT1dBSVQJMQkvKiBTZW5kIGFsZXJ0OyBkbyBub3Qgd2FpdCAqLworI2RlZmlu
ZSBUTFNfU0hVVERPV05fV0FJVAkyCS8qIFNlbmQgYWxlcnQgJiB3YWl0IGZvciBwZWVyJ3MgYWxl
cnQgKi8KKyNkZWZpbmUgVExTX1NIVVRET1dOX1dPTkxZCTMJLyogb25seSB3YWl0IGZvciBwZWVy
J3MgYWxlcnQgKi8KIAogCiAjaWZkZWYgQ09NUElMRV9VVElMSVRZCkBAIC0xMDcwLDggKzEwNzYs
OCBAQAogCiAjZGVmaW5lIEFVVEhTX1JFR0VYIFVTIlxcbjI1MFtcXHNcXC1dQVVUSFxccysoW1xc
LVxcdyBcXHRdKykoPzpcXG58JCkiCiAKLSNkZWZpbmUgRUFSTFlfUElQRV9GRUFUVVJFX05BTUUg
IlBJUEVfQ09OTkVDVCIKLSNkZWZpbmUgRUFSTFlfUElQRV9GRUFUVVJFX0xFTiAgMTIKKyNkZWZp
bmUgRUFSTFlfUElQRV9GRUFUVVJFX05BTUUgIlBJUEVDT05ORUNUIgorI2RlZmluZSBFQVJMWV9Q
SVBFX0ZFQVRVUkVfTEVOICAxMQogCiAKIC8qIEZsYWdzIGZvciBhdXRoX2NsaWVudF9pdGVtKCkg
Ki8KZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9tYWx3YXJlLmMgZXhpbS9zcmMvbWFsd2FyZS5jCi0t
LSBleGltLm9yaWcvc3JjL21hbHdhcmUuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCAr
MDMwMAorKysgZXhpbS9zcmMvbWFsd2FyZS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAw
ICswMzAwCkBAIC0yLDkgKzIsMTAgQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRy
YW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwogCi0vKiBDb3B5cmlnaHQgKGMpIFRvbSBLaXN0bmVyIDx0b21AZHVuY2Fu
dGhyYXgubmV0PiAyMDAzIC0gMjAxNQorLyoKKyAqIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFp
bnRhaW5lcnMgMjAxNSAtIDIwMjIKKyAqIENvcHlyaWdodCAoYykgVG9tIEtpc3RuZXIgPHRvbUBk
dW5jYW50aHJheC5uZXQ+IDIwMDMgLSAyMDE1CiAgKiBMaWNlbnNlOiBHUEwKLSAqIENvcHlyaWdo
dCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNSAtIDIwMjAKICAqLwogCiAvKiBDb2RlIGZv
ciBjYWxsaW5nIHZpcnVzIChtYWx3YXJlKSBzY2FubmVycy4gQ2FsbGVkIGZyb20gYWNsLmMuICov
CkBAIC0xMjksOCArMTMwLDcgQEAKICNkZWZpbmUgTUFMV0FSRV9USU1FT1VUIDEyMAkvKiBkZWZh
dWx0IHRpbWVvdXQsIHNlY29uZHMgKi8KIAogc3RhdGljIGNvbnN0IHVzY2hhciAqIG1hbHdhcmVf
cmVnZXhfZGVmYXVsdCA9IFVTICIuKyI7Ci1zdGF0aWMgY29uc3QgcGNyZSAqIG1hbHdhcmVfZGVm
YXVsdF9yZSA9IE5VTEw7Ci0KK3N0YXRpYyBjb25zdCBwY3JlMl9jb2RlICogbWFsd2FyZV9kZWZh
dWx0X3JlID0gTlVMTDsKIAogCiAjaWZuZGVmIERJU0FCTEVfTUFMX0NMQU0KQEAgLTE1NywzNSAr
MTU3LDM1IEBACiAjIGRlZmluZSBERVJSX0JBRF9DQUxMICAgICAgICAgICAgICAgKDE8PDE1KSAg
Lyogd3JvbmcgY29tbWFuZCAqLwogCiBzdGF0aWMgY29uc3QgdXNjaGFyICogZHJ3ZWJfcmVfc3Ry
ID0gVVMgImluZmVjdGVkXFxzd2l0aFxccyooLis/KSQiOwotc3RhdGljIGNvbnN0IHBjcmUgKiBk
cndlYl9yZSA9IE5VTEw7CitzdGF0aWMgY29uc3QgcGNyZTJfY29kZSAqIGRyd2ViX3JlID0gTlVM
TDsKICNlbmRpZgogCiAjaWZuZGVmIERJU0FCTEVfTUFMX0ZTRUNVUkUKIHN0YXRpYyBjb25zdCB1
c2NoYXIgKiBmc2VjX3JlX3N0ciA9IFVTICJcXFN7MCw1fUlORkVDVEVEXFx0W15cXHRdKlxcdChb
XlxcdF0rKVxcdFxcUyokIjsKLXN0YXRpYyBjb25zdCBwY3JlICogZnNlY19yZSA9IE5VTEw7Citz
dGF0aWMgY29uc3QgcGNyZTJfY29kZSAqIGZzZWNfcmUgPSBOVUxMOwogI2VuZGlmCiAKICNpZm5k
ZWYgRElTQUJMRV9NQUxfS0FWCiBzdGF0aWMgY29uc3QgdXNjaGFyICoga2F2X3JlX3N1c19zdHIg
PSBVUyAic3VzcGljaW9uOlxccyooLis/KVxccyokIjsKIHN0YXRpYyBjb25zdCB1c2NoYXIgKiBr
YXZfcmVfaW5mX3N0ciA9IFVTICJpbmZlY3RlZDpcXHMqKC4rPylcXHMqJCI7Ci1zdGF0aWMgY29u
c3QgcGNyZSAqIGthdl9yZV9zdXMgPSBOVUxMOwotc3RhdGljIGNvbnN0IHBjcmUgKiBrYXZfcmVf
aW5mID0gTlVMTDsKK3N0YXRpYyBjb25zdCBwY3JlMl9jb2RlICoga2F2X3JlX3N1cyA9IE5VTEw7
CitzdGF0aWMgY29uc3QgcGNyZTJfY29kZSAqIGthdl9yZV9pbmYgPSBOVUxMOwogI2VuZGlmCiAK
ICNpZm5kZWYgRElTQUJMRV9NQUxfQVZBU1QKIHN0YXRpYyBjb25zdCB1c2NoYXIgKiBhdmFfcmVf
Y2xlYW5fc3RyID0gVVMgIig/IVxcXFwpXFx0XFxbXFwrXFxdIjsKIHN0YXRpYyBjb25zdCB1c2No
YXIgKiBhdmFfcmVfdmlydXNfc3RyID0gVVMgIig/IVxcXFwpXFx0XFxbTFxcXVxcZCtcXC4wXFx0
MFxccyguKikiOwogc3RhdGljIGNvbnN0IHVzY2hhciAqIGF2YV9yZV9lcnJvcl9zdHIgPSBVUyAi
KD8hXFxcXClcXHRcXFtFXFxdXFxkK1xcLjBcXHRFcnJvclxcc1xcZCtcXHMoLiopIjsKLXN0YXRp
YyBjb25zdCBwY3JlICogYXZhX3JlX2NsZWFuID0gTlVMTDsKLXN0YXRpYyBjb25zdCBwY3JlICog
YXZhX3JlX3ZpcnVzID0gTlVMTDsKLXN0YXRpYyBjb25zdCBwY3JlICogYXZhX3JlX2Vycm9yID0g
TlVMTDsKK3N0YXRpYyBjb25zdCBwY3JlMl9jb2RlICogYXZhX3JlX2NsZWFuID0gTlVMTDsKK3N0
YXRpYyBjb25zdCBwY3JlMl9jb2RlICogYXZhX3JlX3ZpcnVzID0gTlVMTDsKK3N0YXRpYyBjb25z
dCBwY3JlMl9jb2RlICogYXZhX3JlX2Vycm9yID0gTlVMTDsKICNlbmRpZgogCiAjaWZuZGVmIERJ
U0FCTEVfTUFMX0ZGUk9UNkQKIHN0YXRpYyBjb25zdCB1c2NoYXIgKiBmcHJvdDZkX3JlX2Vycm9y
X3N0ciA9IFVTICJeXFxkK1xcczwoLis/KT4kIjsKIHN0YXRpYyBjb25zdCB1c2NoYXIgKiBmcHJv
dDZkX3JlX3ZpcnVzX3N0ciA9IFVTICJeXFxkK1xcczxpbmZlY3RlZDpcXHMrKC4rPyk+XFxzKy4r
JCI7Ci1zdGF0aWMgY29uc3QgcGNyZSAqIGZwcm90NmRfcmVfZXJyb3IgPSBOVUxMOwotc3RhdGlj
IGNvbnN0IHBjcmUgKiBmcHJvdDZkX3JlX3ZpcnVzID0gTlVMTDsKK3N0YXRpYyBjb25zdCBwY3Jl
Ml9jb2RlICogZnByb3Q2ZF9yZV9lcnJvciA9IE5VTEw7CitzdGF0aWMgY29uc3QgcGNyZTJfY29k
ZSAqIGZwcm90NmRfcmVfdmlydXMgPSBOVUxMOwogI2VuZGlmCiAKIApAQCAtMjIwLDYgKzIyMCw3
IEBACiAvKiBTb21lIChjdXJyZW50bHkgYXZhc3Qgb25seSkgdXNlIGJhY2tzbGFzaCBlc2NhcGVk
IHdoaXRlc3BhY2UsCiB0aGlzIGZ1bmN0aW9uIHVuZG9lcyB0aGVzZSBlc2NhcGVzICovCiAKKyNp
Zm5kZWYgRElTQUJMRV9NQUxfQVZBU1QKIHN0YXRpYyBpbmxpbmUgdm9pZAogdW5lc2NhcGUodXNj
aGFyICpwKQogewpAQCAtMjI4LDYgKzIyOSw3IEBACiAgIGlmICgqcCA9PSAnXFwnICYmIChpc3Nw
YWNlKHBbMV0pIHx8IHBbMV0gPT0gJ1xcJykpCiAgICAgZm9yIChwMCA9IHA7ICpwMDsgKytwMCkg
KnAwID0gcDBbMV07CiB9CisjZW5kaWYKIAogLyogLS0tIG1hbHdhcmVfKl9kZWZlciAtLS0gKi8K
IHN0YXRpYyBpbmxpbmUgaW50CkBAIC0yNTAsMTMgKzI1Miw2IEBACiByZXR1cm4gbWFsd2FyZV9w
YW5pY19kZWZlcihzdHJpbmdfc3ByaW50ZigiJXMgJXMgOiAlcyIsCiAgIHNjYW5lbnQtPm5hbWUs
IGhvc3Rwb3J0ID8gaG9zdHBvcnQgOiBDVVMiIiwgc3RyKSk7CiB9Ci1zdGF0aWMgaW5saW5lIGlu
dAotbV9sb2dfZGVmZXIoc3RydWN0IHNjYW4gKiBzY2FuZW50LCBjb25zdCB1c2NoYXIgKiBob3N0
cG9ydCwKLSAgY29uc3QgdXNjaGFyICogc3RyKQotewotcmV0dXJuIG1hbHdhcmVfbG9nX2RlZmVy
KHN0cmluZ19zcHJpbnRmKCIlcyAlcyA6ICVzIiwKLSAgc2NhbmVudC0+bmFtZSwgaG9zdHBvcnQg
PyBob3N0cG9ydCA6IENVUyIiLCBzdHIpKTsKLX0KIC8qIC0tLSBtXypfZGVmZXJfMyAqLwogc3Rh
dGljIGlubGluZSBpbnQKIG1fcGFuaWNfZGVmZXJfMyhzdHJ1Y3Qgc2NhbiAqIHNjYW5lbnQsIGNv
bnN0IHVzY2hhciAqIGhvc3Rwb3J0LApAQCAtMjc3LDggKzI3MiwxNSBAQAogbV90Y3Bzb2NrZXQo
Y29uc3QgdXNjaGFyICogaG9zdG5hbWUsIHVuc2lnbmVkIGludCBwb3J0LAogCWhvc3RfaXRlbSAq
IGhvc3QsIHVzY2hhciAqKiBlcnJzdHIsIGNvbnN0IGJsb2IgKiBmYXN0b3Blbl9ibG9iKQogewot
cmV0dXJuIGlwX2Nvbm5lY3RlZHNvY2tldChTT0NLX1NUUkVBTSwgaG9zdG5hbWUsIHBvcnQsIHBv
cnQsIDUsCitpbnQgZmQgPSBpcF9jb25uZWN0ZWRzb2NrZXQoU09DS19TVFJFQU0sIGhvc3RuYW1l
LCBwb3J0LCBwb3J0LCA1LAogCQkJICBob3N0LCBlcnJzdHIsIGZhc3RvcGVuX2Jsb2IpOworI2lm
ZGVmIEVYSU1fVEZPX0ZSRUVCU0QKKy8qIFVuZGVyIHNvbWUgZmF1bHQgY29uZGl0aW9ucywgRnJl
ZUJTRCAxMi4yIHNlZW4gdG8gc2VuZCBhIChub24tVEZPKSBTWU4KK2FuZCwgZ2V0dGluZyBubyBy
ZXNwb25zZSwgd2FpdCBmb3IgYSBsb25nIHRpbWUuICBJbXBvc2UgYSA1cyBtYXguICovCitpZiAo
ZmQgPj0gMCkKKyAgKHZvaWQpIHBvbGxfb25lX2ZkKGZkLCBQT0xMT1VULCA1ICogMTAwMCk7Cisj
ZW5kaWYKK3JldHVybiBmZDsKIH0KICNlbmRpZgogCkBAIC0yOTYsMzcgKzI5OCw0MyBAQAogcmV0
dXJuIHNvY2s7CiB9CiAKLXN0YXRpYyBjb25zdCBwY3JlICoKK3N0YXRpYyBjb25zdCBwY3JlMl9j
b2RlICoKIG1fcGNyZV9jb21waWxlKGNvbnN0IHVzY2hhciAqIHJlLCB1c2NoYXIgKiogZXJyc3Ry
KQogewotY29uc3QgdXNjaGFyICogcmVycm9yOwotaW50IHJvZmZzZXQ7Ci1jb25zdCBwY3JlICog
Y3JlOwotCi1pZiAoIShjcmUgPSBwY3JlX2NvbXBpbGUoQ1MgcmUsIFBDUkVfQ09QVCwgQ0NTUyAm
cmVycm9yLCAmcm9mZnNldCwgTlVMTCkpKQotICAqZXJyc3RyPSBzdHJpbmdfc3ByaW50ZigicmVn
dWxhciBleHByZXNzaW9uIGVycm9yIGluICclcyc6ICVzIGF0IG9mZnNldCAlZCIsCi0gICAgICBy
ZSwgcmVycm9yLCByb2Zmc2V0KTsKK2ludCBlcnI7CitQQ1JFMl9TSVpFIHJvZmZzZXQ7Citjb25z
dCBwY3JlMl9jb2RlICogY3JlOworCitpZiAoIShjcmUgPSBwY3JlMl9jb21waWxlKChQQ1JFMl9T
UFRSKXJlLCBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsCisJICAgICAgUENSRV9DT1BULCAmZXJyLCAm
cm9mZnNldCwgcGNyZV9jbXBfY3R4KSkpCisgIHsKKyAgdXNjaGFyIGVycmJ1ZlsxMjhdOworICBw
Y3JlMl9nZXRfZXJyb3JfbWVzc2FnZShlcnIsIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpOworICAq
ZXJyc3RyPSBzdHJpbmdfc3ByaW50ZigicmVndWxhciBleHByZXNzaW9uIGVycm9yIGluICclcyc6
ICVzIGF0IG9mZnNldCAlbGQiLAorICAgICAgcmUsIGVycmJ1ZiwgKGxvbmcpcm9mZnNldCk7Cisg
IH0KIHJldHVybiBjcmU7CiB9CiAKIHVzY2hhciAqCi1tX3BjcmVfZXhlYyhjb25zdCBwY3JlICog
Y3JlLCB1c2NoYXIgKiB0ZXh0KQorbV9wY3JlX2V4ZWMoY29uc3QgcGNyZTJfY29kZSAqIGNyZSwg
dXNjaGFyICogdGV4dCkKIHsKLWludCBvdmVjdG9yWzEwKjNdOwotaW50IGkgPSBwY3JlX2V4ZWMo
Y3JlLCBOVUxMLCBDUyB0ZXh0LCBVc3RybGVuKHRleHQpLCAwLCAwLAotCSAgICAgIG92ZWN0b3Is
IG5lbGVtKG92ZWN0b3IpKTsKLXVzY2hhciAqIHN1YnN0ciA9IE5VTEw7CitwY3JlMl9tYXRjaF9k
YXRhICogbWQgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSgyLCBwY3JlX2dlbl9jdHgpOworaW50
IGkgPSBwY3JlMl9tYXRjaChjcmUsIHRleHQsIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCwgMCwgMCwg
bWQsIHBjcmVfbXRjX2N0eCk7CitQQ1JFMl9VQ0hBUiAqIHN1YnN0ciA9IE5VTEw7CitQQ1JFMl9T
SVpFIHNsZW47CisKIGlmIChpID49IDIpCQkJCS8qIEdvdCBpdCAqLwotICBwY3JlX2dldF9zdWJz
dHJpbmcoQ1MgdGV4dCwgb3ZlY3RvciwgaSwgMSwgQ0NTUyAmc3Vic3RyKTsKLXJldHVybiBzdWJz
dHI7CisgIHBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIobWQsIDEsICZzdWJzdHIsICZzbGVu
KTsKK3JldHVybiBVUyBzdWJzdHI7CiB9CiAKLXN0YXRpYyBjb25zdCBwY3JlICoKK3N0YXRpYyBj
b25zdCBwY3JlMl9jb2RlICoKIG1fcGNyZV9uZXh0aW5saXN0KGNvbnN0IHVzY2hhciAqKiBsaXN0
LCBpbnQgKiBzZXAsCiAgY2hhciAqIGxpc3RlcnIsIHVzY2hhciAqKiBlcnJzdHIpCiB7CiBjb25z
dCB1c2NoYXIgKiBsaXN0X2VsZTsKLWNvbnN0IHBjcmUgKiBjcmUgPSBOVUxMOworY29uc3QgcGNy
ZTJfY29kZSAqIGNyZSA9IE5VTEw7CiAKIGlmICghKGxpc3RfZWxlID0gc3RyaW5nX25leHRpbmxp
c3QobGlzdCwgc2VwLCBOVUxMLCAwKSkpCiAgICplcnJzdHIgPSBVUyBsaXN0ZXJyOwpAQCAtMzg2
LDYgKzM5NCw3IEBACiB9CiAKIC8qIHJldHVybiBUUlVFIGlmZiBzaXplIGFzIHJlcXVlc3RlZCAq
LworI2lmbmRlZiBESVNBQkxFX01BTF9EUldFQgogc3RhdGljIEJPT0wKIHJlY3ZfbGVuKGludCBz
b2NrLCB2b2lkICogYnVmLCBpbnQgc2l6ZSwgdGltZV90IHRtbykKIHsKQEAgLTM5Myw2ICs0MDIs
NyBAQAogICA/IHJlY3Yoc29jaywgYnVmLCBzaXplLCAwKSA9PSBzaXplCiAgIDogRkFMU0U7CiB9
CisjZW5kaWYKIAogCiAKQEAgLTU3NCw3ICs1ODQsNyBAQAogdXNjaGFyICpzY2FubmVyX25hbWU7
CiB1bnNpZ25lZCBsb25nIG1ib3hfc2l6ZTsKIEZJTEUgKm1ib3hfZmlsZTsKLWNvbnN0IHBjcmUg
KnJlOworY29uc3QgcGNyZTJfY29kZSAqcmU7CiB1c2NoYXIgKiBlcnJzdHI7CiBzdHJ1Y3Qgc2Nh
biAqIHNjYW5lbnQ7CiBjb25zdCB1c2NoYXIgKiBzY2FubmVyX29wdGlvbnM7CkBAIC05MTYsNyAr
OTI2LDcgQEAKIAkvKiByZWFkIGFuZCBjb25jYXRlbmF0ZSB2aXJ1cyBuYW1lcyBpbnRvIG9uZSBz
dHJpbmcgKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IGRyd2ViX3ZudW07IGkrKykKIAkgIHsKLQkg
IGludCBvdmVjdG9yWzEwKjNdOworCSAgcGNyZTJfbWF0Y2hfZGF0YSAqIG1kID0gcGNyZTJfbWF0
Y2hfZGF0YV9jcmVhdGUoMiwgcGNyZV9nZW5fY3R4KTsKIAogCSAgLyogcmVhZCB0aGUgc2l6ZSBv
ZiByZXBvcnQgKi8KIAkgIGlmICghcmVjdl9sZW4obWFsd2FyZV9kYWVtb25fY3R4LnNvY2ssICZk
cndlYl9zbGVuLCBzaXplb2YoZHJ3ZWJfc2xlbiksIHRtbykpCkBAIC05MjUsNyArOTM1LDcgQEAK
IAkgIGRyd2ViX3NsZW4gPSBudG9obChkcndlYl9zbGVuKTsKIAogCSAgLyogYXNzdW1lIHRhaW50
ZWQsIHNpbmNlIGl0IGlzIGV4dGVybmFsIGlucHV0ICovCi0JICB0bXBidWYgPSBzdG9yZV9nZXQo
ZHJ3ZWJfc2xlbiwgVFJVRSk7CisJICB0bXBidWYgPSBzdG9yZV9nZXQoZHJ3ZWJfc2xlbiwgR0VU
X1RBSU5URUQpOwogCiAJICAvKiByZWFkIHJlcG9ydCBib2R5ICovCiAJICBpZiAoIXJlY3ZfbGVu
KG1hbHdhcmVfZGFlbW9uX2N0eC5zb2NrLCB0bXBidWYsIGRyd2ViX3NsZW4sIHRtbykpCkBAIC05
MzQsMjIgKzk0NCwyMCBAQAogCSAgdG1wYnVmW2Ryd2ViX3NsZW5dID0gJ1wwJzsKIAogCSAgLyog
dHJ5IG1hdGNoZXIgb24gdGhlIGxpbmUsIGdyYWIgc3Vic3RyaW5nICovCi0JICByZXN1bHQgPSBw
Y3JlX2V4ZWMoZHJ3ZWJfcmUsIE5VTEwsIENTIHRtcGJ1ZiwgVXN0cmxlbih0bXBidWYpLCAwLCAw
LAotCQkJCSAgb3ZlY3RvciwgbmVsZW0ob3ZlY3RvcikpOworCSAgcmVzdWx0ID0gcGNyZTJfbWF0
Y2goZHJ3ZWJfcmUsIChQQ1JFMl9TUFRSKXRtcGJ1ZiwgUENSRTJfWkVST19URVJNSU5BVEVELAor
CQkJCTAsIDAsIG1kLCBwY3JlX210Y19jdHgpOwogCSAgaWYgKHJlc3VsdCA+PSAyKQogCSAgICB7
Ci0JICAgIGNvbnN0IGNoYXIgKiBwcmVfbWFsd2FyZV9uYjsKLQotCSAgICBwY3JlX2dldF9zdWJz
dHJpbmcoQ1MgdG1wYnVmLCBvdmVjdG9yLCByZXN1bHQsIDEsICZwcmVfbWFsd2FyZV9uYik7CisJ
ICAgIFBDUkUyX1NJWkUgKiBvdmVjID0gcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcihtZCk7CiAK
IAkgICAgaWYgKGk9PTApCS8qIHRoZSBmaXJzdCBuYW1lIHdlIGp1c3QgY29weSB0byBtYWx3YXJl
X25hbWUgKi8KLQkgICAgICBnID0gc3RyaW5nX2NhdChOVUxMLCBVUyBwcmVfbWFsd2FyZV9uYik7
CisJICAgICAgZyA9IHN0cmluZ19jYXRuKE5VTEwsIFVTIG92ZWNbMl0sIG92ZWNbM10gLSBvdmVj
WzJdKTsKIAotCSAgICAvKlhYWCBjb3VsZCBiZSBzdHJpbmdfYXBwZW5kX2xpc3RlbGU/ICovCiAJ
ICAgIGVsc2UJLyogY29uY2F0ZW5hdGUgZWFjaCBuZXcgdmlydXMgbmFtZSB0byBwcmV2aW91cyAq
LwotCSAgICAgIGcgPSBzdHJpbmdfYXBwZW5kKGcsIDIsICIvIiwgcHJlX21hbHdhcmVfbmIpOwot
Ci0JICAgIHBjcmVfZnJlZV9zdWJzdHJpbmcocHJlX21hbHdhcmVfbmIpOworCSAgICAgIHsKKwkg
ICAgICBnID0gc3RyaW5nX2NhdG4oZywgVVMiLyIsIDEpOworCSAgICAgIGcgPSBzdHJpbmdfY2F0
bihnLCBVUyBvdmVjWzJdLCBvdmVjWzNdIC0gb3ZlY1syXSk7CisJICAgICAgfQogCSAgICB9CiAJ
ICB9CiAJICBtYWx3YXJlX25hbWUgPSBzdHJpbmdfZnJvbV9nc3RyaW5nKGcpOwpAQCAtMTE0Miw3
ICsxMTUwLDcgQEAKICAgICAgIGludCBrYXZfcmM7CiAgICAgICB1bnNpZ25lZCBsb25nIGthdl9y
ZXBvcnRsZW47CiAgICAgICBpbnQgYnJlYWQ7Ci0gICAgICBjb25zdCBwY3JlICprYXZfcmU7Cisg
ICAgICBjb25zdCBwY3JlMl9jb2RlICprYXZfcmU7CiAgICAgICB1c2NoYXIgKnA7CiAKICAgICAg
IC8qIGdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUsIGJ1aWxkIHNjYW4gcmVxdWVzdCAqLwpAQCAt
MTI1MSw4ICsxMjU5LDggQEAKICAgICBjYXNlIE1fQ01ETDogLyogImNtZGxpbmUiIHNjYW5uZXIg
dHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICAgICB7CiAgICAg
ICBjb25zdCB1c2NoYXIgKmNtZGxpbmVfc2Nhbm5lciA9IHNjYW5uZXJfb3B0aW9uczsKLSAgICAg
IGNvbnN0IHBjcmUgKmNtZGxpbmVfdHJpZ2dlcl9yZTsKLSAgICAgIGNvbnN0IHBjcmUgKmNtZGxp
bmVfcmVnZXhfcmU7CisgICAgICBjb25zdCBwY3JlMl9jb2RlICpjbWRsaW5lX3RyaWdnZXJfcmU7
CisgICAgICBjb25zdCBwY3JlMl9jb2RlICpjbWRsaW5lX3JlZ2V4X3JlOwogICAgICAgdXNjaGFy
ICogZmlsZV9uYW1lOwogICAgICAgdXNjaGFyICogY29tbWFuZGxpbmU7CiAgICAgICB2b2lkICgq
ZXhpbXNpZ2NobGQpKGludCk7CkBAIC0xNDQ2LDkgKzE0NTQsNyBAQAogICAgICAgdXNjaGFyIGF2
X2J1ZmZlclsxMDI0XTsKICAgICAgIHVzY2hhciAqaG9zdG5hbWUgPSBVUyIiOwogICAgICAgaG9z
dF9pdGVtIGNvbm5ob3N0OwotICAgICAgdXNjaGFyICpjbGFtYXZfZmJ1ZjsKLSAgICAgIGludCBj
bGFtX2ZkLCByZXN1bHQ7Ci0gICAgICBvZmZfdCBmc2l6ZTsKKyAgICAgIGludCBjbGFtX2ZkOwog
ICAgICAgdW5zaWduZWQgaW50IGZzaXplX3VpbnQ7CiAgICAgICBCT09MIHVzZV9zY2FuX2NvbW1h
bmQgPSBGQUxTRTsKICAgICAgIGNsYW1kX2FkZHJlc3MgKiBjdltNQVhfQ0xBTURfU0VSVkVSU107
CkBAIC0xNDY2LDkgKzE0NzIsOSBAQAogCWludCBzdWJzZXAgPSAnICc7CiAKIAkvKiBMb2NhbCBm
aWxlOyBzbyB3ZSBkZWYgd2FudCB0byB1c2Vfc2Nhbl9jb21tYW5kIGFuZCBkb24ndCB3YW50IHRv
IHRyeQotCSAqIHBhc3NpbmcgSVAvcG9ydCBjb21iaW5hdGlvbnMgKi8KKwlwYXNzaW5nIElQL3Bv
cnQgY29tYmluYXRpb25zICovCiAJdXNlX3NjYW5fY29tbWFuZCA9IFRSVUU7Ci0JY2QgPSAoY2xh
bWRfYWRkcmVzcyAqKSBzdG9yZV9nZXQoc2l6ZW9mKGNsYW1kX2FkZHJlc3MpLCBGQUxTRSk7CisJ
Y2QgPSAoY2xhbWRfYWRkcmVzcyAqKSBzdG9yZV9nZXQoc2l6ZW9mKGNsYW1kX2FkZHJlc3MpLCBH
RVRfVU5UQUlOVEVEKTsKIAogCS8qIGV4dHJhY3Qgc29ja2V0LXBhdGggcGFydCAqLwogCXN1Ymxp
c3QgPSBzY2FubmVyX29wdGlvbnM7CkBAIC0xNTAyLDcgKzE1MDgsNyBAQAogCSAgICBjb250aW51
ZTsKIAkgICAgfQogCi0JICBjZCA9IChjbGFtZF9hZGRyZXNzICopIHN0b3JlX2dldChzaXplb2Yo
Y2xhbWRfYWRkcmVzcyksIEZBTFNFKTsKKwkgIGNkID0gKGNsYW1kX2FkZHJlc3MgKikgc3RvcmVf
Z2V0KHNpemVvZihjbGFtZF9hZGRyZXNzKSwgR0VUX1VOVEFJTlRFRCk7CiAKIAkgIC8qIGV4dHJh
Y3QgaG9zdCBhbmQgcG9ydCBwYXJ0ICovCiAJICBzdWJsaXN0ID0gc2Nhbm5lcl9vcHRpb25zOwpA
QCAtMTU1NSwxNiArMTU2MSwxNyBAQAogCXsgY21kX3N0ci5kYXRhID0gVVMieklOU1RSRUFNIjsg
Y21kX3N0ci5sZW4gPSAxMDsgfQogICAgICAgZWxzZQogCXsKLQljbWRfc3RyLmRhdGEgPSBzdHJp
bmdfc3ByaW50ZigiU0NBTiAlc1xuIiwgZW1sX2ZpbGVuYW1lKTsKLQljbWRfc3RyLmxlbiA9IFVz
dHJsZW4oY21kX3N0ci5kYXRhKTsKKwlpbnQgbjsKKwljbWRfc3RyLmRhdGEgPSBzdHJpbmdfc3By
aW50ZigiU0NBTiAlc1xuJW4iLCBlbWxfZmlsZW5hbWUsICZuKTsKKwljbWRfc3RyLmxlbiA9IG47
CQkvKiAubGVuIGlzIGEgc2l6ZV90ICovCiAJfQogCiAgICAgICAvKiBXZSBoYXZlIHNvbWUgbmV0
d29yayBzZXJ2ZXJzIHNwZWNpZmllZCAqLwogICAgICAgaWYgKG51bV9zZXJ2ZXJzKQogCXsKIAkv
KiBDb25maXJtZWQgaW4gQ2xhbUFWIHNvdXJjZSAoMC45NS4zKSB0aGF0IHRoZSBUQ1BBZGRyIG9w
dGlvbiBvZiBjbGFtZAotCSAqIG9ubHkgc3VwcG9ydHMgQUZfSU5FVCwgYnV0IHdlIHNob3VsZCBw
cm9iYWJseSBiZSBsb29raW5nIHRvIHRoZQotCSAqIGZ1dHVyZSBhbmQgcmV3cml0aW5nIHRoaXMg
dG8gYmUgcHJvdG9jb2wtaW5kZXBlbmRlbnQgYW55d2F5LiAqLworCW9ubHkgc3VwcG9ydHMgQUZf
SU5FVCwgYnV0IHdlIHNob3VsZCBwcm9iYWJseSBiZSBsb29raW5nIHRvIHRoZQorCWZ1dHVyZSBh
bmQgcmV3cml0aW5nIHRoaXMgdG8gYmUgcHJvdG9jb2wtaW5kZXBlbmRlbnQgYW55d2F5LiAqLwog
CiAJd2hpbGUgKG51bV9zZXJ2ZXJzID4gMCkKIAkgIHsKQEAgLTE1NzUsMTYgKzE1ODIsMTcgQEAK
IAkJCSBjZC0+aG9zdHNwZWMsIGNkLT50Y3BfcG9ydCk7CiAKIAkgIC8qIExvb2t1cCB0aGUgaG9z
dC4gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB3ZSBjb25uZWN0IHRvIHRoZSBzYW1lIElQCi0JICAg
KiBvbiBib3RoIGNvbm5lY3Rpb25zIChhcyBvbmUgaG9zdCBjb3VsZCByZXNvbHZlIHRvIG11bHRp
cGxlIGlwcykgKi8KKwkgIG9uIGJvdGggY29ubmVjdGlvbnMgKGFzIG9uZSBob3N0IGNvdWxkIHJl
c29sdmUgdG8gbXVsdGlwbGUgaXBzKSAqLwogCSAgZm9yICg7OykKIAkgICAgewotCSAgICAvKlhY
WCB3ZSB0cnVzdCB0aGF0IHRoZSBjbWRfc3RyIGlzIGlkZWVtcG90ZW50ICovCisJICAgIC8qWFhY
IHdlIHRydXN0IHRoYXQgdGhlIGNtZF9zdHIgaXMgaWRlbXBvdGVudCAqLwogCSAgICBpZiAoKG1h
bHdhcmVfZGFlbW9uX2N0eC5zb2NrID0gbV90Y3Bzb2NrZXQoY2QtPmhvc3RzcGVjLCBjZC0+dGNw
X3BvcnQsCi0JCQkJICAgICZjb25uaG9zdCwgJmVycnN0ciwgJmNtZF9zdHIpKSA+PSAwKQorCQkJ
CSAgICAmY29ubmhvc3QsICZlcnJzdHIsCisJCQkJICAgIHVzZV9zY2FuX2NvbW1hbmQgPyAmY21k
X3N0ciA6IE5VTEwpKSA+PSAwKQogCSAgICAgIHsKIAkgICAgICAvKiBDb25uZWN0aW9uIHN1Y2Nl
c3NmdWxseSBlc3RhYmxpc2hlZCB3aXRoIGEgc2VydmVyICovCiAJICAgICAgaG9zdG5hbWUgPSBj
ZC0+aG9zdHNwZWM7Ci0JICAgICAgY21kX3N0ci5sZW4gPSAwOworCSAgICAgIGlmICh1c2Vfc2Nh
bl9jb21tYW5kKSBjbWRfc3RyLmxlbiA9IDA7CiAJICAgICAgYnJlYWs7CiAJICAgICAgfQogCSAg
ICBpZiAoY2QtPnJldHJ5IDw9IDApIGJyZWFrOwpAQCAtMTYxOCwyMCArMTYyNiwyOCBAQAogCSAg
fQogCiAgICAgICAvKiBoYXZlIHNvY2tldCBpbiB2YXJpYWJsZSAic29jayI7IGNvbW1hbmQgdG8g
dXNlIGlzIHNlbWktaW5kZXBlbmRlbnQgb2YKLSAgICAgICAqIHRoZSBzb2NrZXQgcHJvdG9jb2wu
ICBXZSB1c2UgU0NBTiBpZiBpcyBsb2NhbCAoZWl0aGVyIFVuaXgvbG9jYWwKLSAgICAgICAqIGRv
bWFpbiBzb2NrZXQsIG9yIGV4cGxpY2l0bHkgdG9sZCBsb2NhbCkgZWxzZSB3ZSBzdHJlYW0gdGhl
IGRhdGEuCi0gICAgICAgKiBIb3cgd2Ugc3RyZWFtIHRoZSBkYXRhIGRlcGVuZHMgdXBvbiBob3cg
d2Ugd2VyZSBidWlsdC4gICovCisgICAgICB0aGUgc29ja2V0IHByb3RvY29sLiAgV2UgdXNlIFND
QU4gaWYgaXMgbG9jYWwgKGVpdGhlciBVbml4L2xvY2FsCisgICAgICBkb21haW4gc29ja2V0LCBv
ciBleHBsaWNpdGx5IHRvbGQgbG9jYWwpIGVsc2Ugd2Ugc3RyZWFtIHRoZSBkYXRhLgorICAgICAg
SG93IHdlIHN0cmVhbSB0aGUgZGF0YSBkZXBlbmRzIHVwb24gaG93IHdlIHdlcmUgYnVpbHQuICAq
LwogCiAgICAgICBpZiAoIXVzZV9zY2FuX2NvbW1hbmQpCiAJeworCXN0cnVjdCBzdGF0IHN0Owor
I2lmIGRlZmluZWQoRVhJTV9UQ1BfQ09SSykgJiYgIWRlZmluZWQoT1NfU0VOREZJTEUpCisJQk9P
TCBjb3JrZWQgPSBUUlVFOworI2VuZGlmCiAJLyogTmV3IHByb3RvY29sOiAieklOU1RSRUFNXG4i
IGZvbGxvd2VkIGJ5IGEgc2VxdWVuY2Ugb2YgPGxlbmd0aD48ZGF0YT4KIAljaHVua3MsIDxuPiBh
IDQtYnl0ZSBudW1iZXIgKG5ldHdvcmsgb3JkZXIpLCB0ZXJtaW5hdGVkIGJ5IGEgemVyby1sZW5n
dGgKLQljaHVuay4gKi8KKwljaHVuay4gV2Ugb25seSBzZW5kIG9uZSBjaHVuay4gKi8KIAogCURF
QlVHKERfYWNsKSBkZWJ1Z19wcmludGZfaW5kZW50KAogCSAgICAiTWFsd2FyZSBzY2FuOiBpc3N1
aW5nICVzIG5ldy1zdHlsZSByZW1vdGUgc2NhbiAoeklOU1RSRUFNKVxuIiwKIAkgICAgc2Nhbm5l
cl9uYW1lKTsKIAorI2lmIGRlZmluZWQoRVhJTV9UQ1BfQ09SSykKKwkodm9pZCkgc2V0c29ja29w
dChtYWx3YXJlX2RhZW1vbl9jdHguc29jaywgSVBQUk9UT19UQ1AsIEVYSU1fVENQX0NPUkssCisJ
CQkgIFVTICZvbiwgc2l6ZW9mKG9uKSk7CisjZW5kaWYKIAkvKiBQYXNzIHRoZSBzdHJpbmcgdG8g
Q2xhbUFWICgxMCA9ICJ6SU5TVFJFQU1cMCIpLCBpZiBub3QgYWxyZWFkeSBzZW50ICovCiAJaWYg
KGNtZF9zdHIubGVuKQogCSAgaWYgKHNlbmQobWFsd2FyZV9kYWVtb25fY3R4LnNvY2ssIGNtZF9z
dHIuZGF0YSwgY21kX3N0ci5sZW4sIDApIDwgMCkKQEAgLTE2NDAsNyArMTY1Niw2IEBACiAJCXN0
cmVycm9yKGVycm5vKSksCiAJICAgICAgbWFsd2FyZV9kYWVtb25fY3R4LnNvY2spOwogCi0JLyog
Y2FsYyBmaWxlIHNpemUgKi8KIAlpZiAoKGNsYW1fZmQgPSBleGltX29wZW4yKENTIGVtbF9maWxl
bmFtZSwgT19SRE9OTFkpKSA8IDApCiAJICB7CiAJICBpbnQgZXJyID0gZXJybm87CkBAIC0xNjQ5
LDY2ICsxNjY0LDc5IEBACiAJICAgICAgZW1sX2ZpbGVuYW1lLCBzdHJlcnJvcihlcnIpKSwKIAkg
ICAgbWFsd2FyZV9kYWVtb25fY3R4LnNvY2spOwogCSAgfQotCWlmICgoZnNpemUgPSBsc2Vlayhj
bGFtX2ZkLCAwLCBTRUVLX0VORCkpIDwgMCkKKwlpZiAoZnN0YXQoY2xhbV9mZCwgJnN0KSA8IDAp
CiAJICB7Ci0JICBpbnQgZXJyOwotYl9zZWVrOiAgIGVyciA9IGVycm5vOworCSAgaW50IGVyciA9
IGVycm5vOwogCSAgKHZvaWQpY2xvc2UoY2xhbV9mZCk7CiAJICByZXR1cm4gbV9wYW5pY19kZWZl
cl8zKHNjYW5lbnQsIE5VTEwsCi0JICAgIHN0cmluZ19zcHJpbnRmKCJjYW4ndCBzZWVrIHNwb29s
IGZpbGUgJXM6ICVzIiwKKwkgICAgc3RyaW5nX3NwcmludGYoImNhbid0IHN0YXQgc3Bvb2wgZmls
ZSAlczogJXMiLAogCSAgICAgIGVtbF9maWxlbmFtZSwgc3RyZXJyb3IoZXJyKSksCiAJICAgIG1h
bHdhcmVfZGFlbW9uX2N0eC5zb2NrKTsKIAkgIH0KLQlmc2l6ZV91aW50ID0gKHVuc2lnbmVkIGlu
dCkgZnNpemU7Ci0JaWYgKChvZmZfdClmc2l6ZV91aW50ICE9IGZzaXplKQorCWZzaXplX3VpbnQg
PSAodW5zaWduZWQgaW50KSBzdC5zdF9zaXplOworCWlmICgob2ZmX3QpZnNpemVfdWludCAhPSBz
dC5zdF9zaXplKQogCSAgewogCSAgKHZvaWQpY2xvc2UoY2xhbV9mZCk7CiAJICByZXR1cm4gbV9w
YW5pY19kZWZlcl8zKHNjYW5lbnQsIE5VTEwsCi0JICAgIHN0cmluZ19zcHJpbnRmKCJzZWVraW5n
IHNwb29sIGZpbGUgJXMsIHNpemUgb3ZlcmZsb3ciLAotCSAgICAgIGVtbF9maWxlbmFtZSksCisJ
ICAgIHN0cmluZ19zcHJpbnRmKCJzdGF0IHNwb29sIGZpbGUgJXMsIHNpemUgb3ZlcmZsb3ciLCBl
bWxfZmlsZW5hbWUpLAogCSAgICBtYWx3YXJlX2RhZW1vbl9jdHguc29jayk7CiAJICB9Ci0JaWYg
KGxzZWVrKGNsYW1fZmQsIDAsIFNFRUtfU0VUKSA8IDApCi0JICBnb3RvIGJfc2VlazsKIAotCWlm
ICghKGNsYW1hdl9mYnVmID0gc3RvcmVfbWFsbG9jKGZzaXplX3VpbnQpKSkKLQkgIHsKLQkgICh2
b2lkKWNsb3NlKGNsYW1fZmQpOworCS8qIHNlbmQgZmlsZSBzaXplICovCisJc2VuZF9zaXplID0g
aHRvbmwoZnNpemVfdWludCk7CisJaWYgKHNlbmQobWFsd2FyZV9kYWVtb25fY3R4LnNvY2ssICZz
ZW5kX3NpemUsIHNpemVvZihzZW5kX3NpemUpLCAwKSA8IDApCiAJICByZXR1cm4gbV9wYW5pY19k
ZWZlcl8zKHNjYW5lbnQsIE5VTEwsCi0JICAgIHN0cmluZ19zcHJpbnRmKCJ1bmFibGUgdG8gYWxs
b2NhdGUgbWVtb3J5ICV1IGZvciBmaWxlICglcykiLAotCSAgICAgIGZzaXplX3VpbnQsIGVtbF9m
aWxlbmFtZSksCisJICAgIHN0cmluZ19zcHJpbnRmKCJ1bmFibGUgdG8gc2VuZCBmaWxlIHNpemUg
dG8gc29ja2V0ICglcykiLCBob3N0bmFtZSksCiAJICAgIG1hbHdhcmVfZGFlbW9uX2N0eC5zb2Nr
KTsKLQkgIH0KIAotCWlmICgocmVzdWx0ID0gcmVhZChjbGFtX2ZkLCBjbGFtYXZfZmJ1ZiwgZnNp
emVfdWludCkpIDwgMCkKKwkvKiBzZW5kIGZpbGUgYm9keSAqLworCXdoaWxlIChmc2l6ZV91aW50
KQogCSAgewotCSAgaW50IGVyciA9IGVycm5vOwotCSAgc3RvcmVfZnJlZShjbGFtYXZfZmJ1Zik7
ICh2b2lkKWNsb3NlKGNsYW1fZmQpOwotCSAgcmV0dXJuIG1fcGFuaWNfZGVmZXJfMyhzY2FuZW50
LCBOVUxMLAotCSAgICBzdHJpbmdfc3ByaW50ZigiY2FuJ3QgcmVhZCBzcG9vbCBmaWxlICVzOiAl
cyIsCi0JICAgICAgZW1sX2ZpbGVuYW1lLCBzdHJlcnJvcihlcnIpKSwKLQkgICAgbWFsd2FyZV9k
YWVtb25fY3R4LnNvY2spOworI2lmZGVmIE9TX1NFTkRGSUxFCisJICBpbnQgbiA9IG9zX3NlbmRm
aWxlKG1hbHdhcmVfZGFlbW9uX2N0eC5zb2NrLCBjbGFtX2ZkLCBOVUxMLCAoc2l6ZV90KWZzaXpl
X3VpbnQpOworCSAgaWYgKG4gPCAwKQorCSAgICByZXR1cm4gbV9wYW5pY19kZWZlcl8zKHNjYW5l
bnQsIE5VTEwsCisJICAgICAgc3RyaW5nX3NwcmludGYoInVuYWJsZSB0byBzZW5kIGZpbGUgYm9k
eSB0byBzb2NrZXQgKCVzKTogJXMiLCBob3N0bmFtZSwgc3RyZXJyb3IoZXJybm8pKSwKKwkgICAg
ICBtYWx3YXJlX2RhZW1vbl9jdHguc29jayk7CisJICBmc2l6ZV91aW50IC09IG47CisjZWxzZQor
CSAgaW50IG4gPSBNSU4oZnNpemVfdWludCwgYmlnX2J1ZmZlcl9zaXplKTsKKwkgIGlmICgobiA9
IHJlYWQoY2xhbV9mZCwgYmlnX2J1ZmZlciwgbikpIDwgMCkKKwkgICAgcmV0dXJuIG1fcGFuaWNf
ZGVmZXJfMyhzY2FuZW50LCBOVUxMLAorCSAgICAgIHN0cmluZ19zcHJpbnRmKCJjYW4ndCByZWFk
IHNwb29sIGZpbGUgJXM6ICVzIiwKKwkJZW1sX2ZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpLAor
CSAgICAgIG1hbHdhcmVfZGFlbW9uX2N0eC5zb2NrKTsKKwkgIGlmIChzZW5kKG1hbHdhcmVfZGFl
bW9uX2N0eC5zb2NrLCBiaWdfYnVmZmVyLCAoc2l6ZV90KW4sIDApIDwgMCkKKwkgICAgcmV0dXJu
IG1fcGFuaWNfZGVmZXJfMyhzY2FuZW50LCBOVUxMLAorCSAgICAgIHN0cmluZ19zcHJpbnRmKCJ1
bmFibGUgdG8gc2VuZCBmaWxlIGJvZHkgdG8gc29ja2V0ICglcyk6ICVzIiwgaG9zdG5hbWUsIHN0
cmVycm9yKGVycm5vKSksCisJICAgICAgbWFsd2FyZV9kYWVtb25fY3R4LnNvY2spOworCSAgZnNp
emVfdWludCAtPSBuOworIyBpZmRlZiBFWElNX1RDUF9DT1JLCisJICBpZiAoY29ya2VkKQorCSAg
ICB7CisJICAgIGNvcmtlZCA9IEZBTFNFOworCSAgICAodm9pZCkgc2V0c29ja29wdChtYWx3YXJl
X2RhZW1vbl9jdHguc29jaywgSVBQUk9UT19UQ1AsIEVYSU1fVENQX0NPUkssCisJCQkgICAgICBV
UyAmb2ZmLCBzaXplb2Yob2ZmKSk7CisJICAgIH0KKyMgZW5kaWYKKyNlbmRpZgkvKiFPU19TRU5E
RklMRSovCisKIAkgIH0KLQkodm9pZCljbG9zZShjbGFtX2ZkKTsKIAotCS8qIHNlbmQgZmlsZSBi
b2R5IHRvIHNvY2tldCAqLwotCXNlbmRfc2l6ZSA9IGh0b25sKGZzaXplX3VpbnQpOwogCXNlbmRf
ZmluYWxfemVyb2Jsb2NrID0gMDsKLQlpZiAoKHNlbmQobWFsd2FyZV9kYWVtb25fY3R4LnNvY2ss
ICZzZW5kX3NpemUsIHNpemVvZihzZW5kX3NpemUpLCAwKSA8IDApIHx8Ci0JICAgIChzZW5kKG1h
bHdhcmVfZGFlbW9uX2N0eC5zb2NrLCBjbGFtYXZfZmJ1ZiwgZnNpemVfdWludCwgMCkgPCAwKSB8
fAotCSAgICAoc2VuZChtYWx3YXJlX2RhZW1vbl9jdHguc29jaywgJnNlbmRfZmluYWxfemVyb2Js
b2NrLCBzaXplb2Yoc2VuZF9maW5hbF96ZXJvYmxvY2spLCAwKSA8IDApKQotCSAgewotCSAgc3Rv
cmVfZnJlZShjbGFtYXZfZmJ1Zik7CisJaWYgKHNlbmQobWFsd2FyZV9kYWVtb25fY3R4LnNvY2ss
ICZzZW5kX2ZpbmFsX3plcm9ibG9jaywgc2l6ZW9mKHNlbmRfZmluYWxfemVyb2Jsb2NrKSwgMCkg
PCAwKQogCSAgcmV0dXJuIG1fcGFuaWNfZGVmZXJfMyhzY2FuZW50LCBOVUxMLAotCSAgICBzdHJp
bmdfc3ByaW50ZigidW5hYmxlIHRvIHNlbmQgZmlsZSBib2R5IHRvIHNvY2tldCAoJXMpIiwgaG9z
dG5hbWUpLAorCSAgICBzdHJpbmdfc3ByaW50ZigidW5hYmxlIHRvIHNlbmQgZmlsZSB0ZXJtaW5h
dG9yIHRvIHNvY2tldCAoJXMpIiwgaG9zdG5hbWUpLAogCSAgICBtYWx3YXJlX2RhZW1vbl9jdHgu
c29jayk7Ci0JICB9Ci0Jc3RvcmVfZnJlZShjbGFtYXZfZmJ1Zik7CisjaWZkZWYgT1NfU0VOREZJ
TEUKKwkodm9pZCkgc2V0c29ja29wdChtYWx3YXJlX2RhZW1vbl9jdHguc29jaywgSVBQUk9UT19U
Q1AsIEVYSU1fVENQX0NPUkssCisJCQkgIFVTICZvZmYsIHNpemVvZihvZmYpKTsKKyNlbmRpZgog
CX0KICAgICAgIGVsc2UKIAl7IC8qIHVzZSBzY2FuIGNvbW1hbmQgKi8KIAkvKiBTZW5kIGEgU0NB
TiBjb21tYW5kIHBvaW50aW5nIHRvIGEgZmlsZW5hbWU7IHRoZW4gaW4gdGhlIHRoZW4gaW4gdGhl
Ci0JICogc2Nhbi1tZXRob2QtbmV1dHJhbCBwYXJ0LCByZWFkIHRoZSByZXNwb25zZSBiYWNrICov
CisJc2Nhbi1tZXRob2QtbmV1dHJhbCBwYXJ0LCByZWFkIHRoZSByZXNwb25zZSBiYWNrICovCiAK
IC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ICovCiAKQEAgLTE3MzMsMTAgKzE3NjEsMTAgQEAKIAkgICAgICBtYWx3YXJl
X2RhZW1vbl9jdHguc29jayk7CiAKIAkvKiBEbyBub3Qgc2h1dCBkb3duIHRoZSBzb2NrZXQgZm9y
IHdyaXRpbmc7IGEgdXNlciByZXBvcnQgbm90ZWQgdGhhdAotCSAqIGNsYW1kIDAuNzAgZG9lcyBu
b3QgcmVhY3Qgd2VsbCB0byB0aGlzLiAqLworCWNsYW1kIDAuNzAgZG9lcyBub3QgcmVhY3Qgd2Vs
bCB0byB0aGlzLiAqLwogCX0KICAgICAgIC8qIENvbW1hbmRzIGhhdmUgYmVlbiBzZW50LCBubyBt
YXR0ZXIgd2hpY2ggc2NhbiBtZXRob2Qgb3IgY29ubmVjdGlvbgotICAgICAgICogdHlwZSB3ZSdy
ZSB1c2luZzsgbm93IGp1c3QgcmVhZCB0aGUgcmVzdWx0LCBpbmRlcGVuZGVudCBvZiBtZXRob2Qu
ICovCisgICAgICB0eXBlIHdlJ3JlIHVzaW5nOyBub3cganVzdCByZWFkIHRoZSByZXN1bHQsIGlu
ZGVwZW5kZW50IG9mIG1ldGhvZC4gKi8KIAogICAgICAgLyogUmVhZCB0aGUgcmVzdWx0ICovCiAg
ICAgICBtZW1zZXQoYXZfYnVmZmVyLCAwLCBzaXplb2YoYXZfYnVmZmVyKSk7CkBAIC0xNzgyLDYg
KzE4MTAsNyBAQAogICAgICAgLyogc3RyaXAgbmV3bGluZSBhdCB0aGUgZW5kICh3b24ndCBiZSBw
cmVzZW50IGZvciB6SU5TVFJFQU0pCiAgICAgICAoYWxzbyBhbnkgdHJhaWxpbmcgd2hpdGVzcGFj
ZSwgd2hpY2ggc2hvdWxkbid0IGV4aXN0LCBidXQgd2UgZGVwZW5kIHVwb24KICAgICAgIHRoaXMg
YmVsb3csIHNvIGRvdWJsZS1jaGVjaykgKi8KKwogICAgICAgcCA9IGF2X2J1ZmZlciArIFVzdHJs
ZW4oYXZfYnVmZmVyKSAtIDE7CiAgICAgICBpZiAoKnAgPT0gJ1xuJykgKnAgPSAnXDAnOwogCkBA
IC0xNzkyLDcgKzE4MjEsNyBAQAogICAgICAgaWYgKCpwKSArK3A7CiAKICAgICAgIC8qIGNvbG9u
IGluIHJldHVybmVkIG91dHB1dD8gKi8KLSAgICAgIGlmKCEocCA9IFVzdHJjaHIoYXZfYnVmZmVy
LCc6JykpKQorICAgICAgaWYgKCEocCA9IFVzdHJjaHIoYXZfYnVmZmVyLCc6JykpKQogCXJldHVy
biBtX3BhbmljX2RlZmVyKHNjYW5lbnQsIENVUyBjYWxsb3V0X2FkZHJlc3MsIHN0cmluZ19zcHJp
bnRmKAogCQkgICJDbGFtQVYgcmV0dXJuZWQgbWFsZm9ybWVkIHJlc3VsdCAobWlzc2luZyBjb2xv
bik6ICVzIiwKIAkJICBhdl9idWZmZXIpKTsKQEAgLTE4NTYsOCArMTg4NSw4IEBACiAgICAgICB1
c2NoYXIgKiBsaW5lYnVmZmVyOwogICAgICAgdXNjaGFyICogc29ja2xpbmVfc2Nhbm5lcjsKICAg
ICAgIHVzY2hhciBzb2NrbGluZV9zY2FubmVyX2RlZmF1bHRbXSA9ICIlc1xuIjsKLSAgICAgIGNv
bnN0IHBjcmUgKnNvY2tsaW5lX3RyaWdfcmU7Ci0gICAgICBjb25zdCBwY3JlICpzb2NrbGluZV9u
YW1lX3JlOworICAgICAgY29uc3QgcGNyZTJfY29kZSAqc29ja2xpbmVfdHJpZ19yZTsKKyAgICAg
IGNvbnN0IHBjcmUyX2NvZGUgKnNvY2tsaW5lX25hbWVfcmU7CiAKICAgICAgIC8qIGZpbmQgc2Nh
bm5lciBjb21tYW5kIGxpbmUgKi8KICAgICAgIGlmICggIChzb2NrbGluZV9zY2FubmVyID0gc3Ry
aW5nX25leHRpbmxpc3QoJmF2X3NjYW5uZXJfd29yaywgJnNlcCwKQEAgLTIwOTYsNyArMjEyNSw3
IEBACiAgICAgICAgICAgICAgIGlmIChtYWx3YXJlX25hbWUpICAgICAvKiBOb3RoaW5nIGVsc2Ug
bWF0dGVycywganVzdCByZWFkIG9uICovCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLQkgICAg
ICBpZiAocGNyZV9leGVjKGF2YV9yZV9jbGVhbiwgTlVMTCwgQ1MgYnVmLCBzbGVuLCAwLCAwLCBO
VUxMLCAwKSA9PSAwKQorCSAgICAgIGlmIChyZWdleF9tYXRjaChhdmFfcmVfY2xlYW4sIGJ1Ziwg
c2xlbiwgTlVMTCkpCiAJCWJyZWFrOwogCiAgICAgICAgICAgICAgIGlmICgobWFsd2FyZV9uYW1l
ID0gbV9wY3JlX2V4ZWMoYXZhX3JlX3ZpcnVzLCBidWYpKSkKQEAgLTIxMTcsNyArMjE0Niw3IEBA
CiAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgIGVsc2UgaWYgKHBjcmVfZXhlYyhhdmFfcmVfZXJyb3Is
IE5VTEwsIENTIGJ1Ziwgc2xlbiwgMCwgMCwgTlVMTCwgMCkgPT0gMCkKKyAgICAgICAgICAgICAg
ZWxzZSBpZiAocmVnZXhfbWF0Y2goYXZhX3JlX2Vycm9yLCBidWYsIHNsZW4sIE5VTEwpKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU4sICJp
bnRlcm5hbCBzY2FubmVyIGVycm9yIChpZ25vcmVkKTogJXMiLCBidWYpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpkaWZmIC11ciBleGltLm9yaWcvc3JjL21hdGNoLmMgZXhpbS9zcmMvbWF0Y2gu
YwotLS0gZXhpbS5vcmlnL3NyYy9tYXRjaC5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAw
ICswMzAwCisrKyBleGltL3NyYy9tYXRjaC5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAw
ICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJh
bnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAy
MCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5
NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAq
LwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3Ry
aWJ1dGlvbi4gKi8KIAogLyogRnVuY3Rpb25zIGZvciBtYXRjaGluZyBzdHJpbmdzICovCkBAIC0x
MDQsOCArMTA0LDYgQEAKIHVzY2hhciAqa2V5cXVlcnksICpyZXN1bHQsICpzZW1pY29sb247CiB2
b2lkICpoYW5kbGU7CiAKLWVycm9yID0gZXJyb3I7ICAvKiBLZWVwIGNsZXZlciBjb21waWxlcnMg
ZnJvbSBjb21wbGFpbmluZyAqLwotCiBpZiAodmFsdWVwdHIpICp2YWx1ZXB0ciA9IE5VTEw7CiAK
IC8qIEZvciByZWd1bGFyIGV4cHJlc3Npb25zLCB1c2UgY2ItPm9yaWdzdWJqZWN0IHJhdGhlciB0
aGFuIGNiLT5zdWJqZWN0IHNvIHRoYXQKQEAgLTEzMCw5ICsxMjgsOSBAQAogCiBpZiAocGF0dGVy
blswXSA9PSAnXicpCiAgIHsKLSAgY29uc3QgcGNyZSAqIHJlID0gcmVnZXhfbXVzdF9jb21waWxl
KHBhdHRlcm4sIGNiLT5jYXNlbGVzcywgRkFMU0UpOworICBjb25zdCBwY3JlMl9jb2RlICogcmUg
PSByZWdleF9tdXN0X2NvbXBpbGUocGF0dGVybiwgY2ItPmNhc2VsZXNzLCBGQUxTRSk7CiAgIGlm
IChleHBhbmRfc2V0dXAgPCAwCi0gICAgICA/IHBjcmVfZXhlYyhyZSwgTlVMTCwgQ0NTIHMsIFVz
dHJsZW4ocyksIDAsIFBDUkVfRU9QVCwgTlVMTCwgMCkgPCAwCisgICAgICA/ICFyZWdleF9tYXRj
aChyZSwgcywgLTEsIE5VTEwpCiAgICAgICA6ICFyZWdleF9tYXRjaF9hbmRfc2V0dXAocmUsIHMs
IDAsIGV4cGFuZF9zZXR1cCkKICAgICAgKQogICAgIHJldHVybiBGQUlMOwpAQCAtMjg2LDIyICsy
ODQsNyBAQAogCiAvKiBTZXQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB0aHJlZSBkaWZmZXJlbnQg
a2luZHMgb2YgbG9va3VwLiAqLwogCi1rZXlxdWVyeSA9IHNlbWljb2xvbiArIDE7Ci1Vc2tpcF93
aGl0ZXNwYWNlKCZrZXlxdWVyeSk7Ci0KLWlmIChtYWNfaXNsb29rdXAoc2VhcmNoX3R5cGUsIGxv
b2t1cF9hYnNmaWxlcXVlcnkpKQotICB7Ci0gIGZpbGVuYW1lID0ga2V5cXVlcnk7Ci0gIHdoaWxl
ICgqa2V5cXVlcnkgJiYgIWlzc3BhY2UoKmtleXF1ZXJ5KSkga2V5cXVlcnkrKzsKLSAgZmlsZW5h
bWUgPSBzdHJpbmdfY29weW4oZmlsZW5hbWUsIGtleXF1ZXJ5IC0gZmlsZW5hbWUpOwotICBVc2tp
cF93aGl0ZXNwYWNlKCZrZXlxdWVyeSk7Ci0gIH0KLQotZWxzZSBpZiAoIW1hY19pc2xvb2t1cChz
ZWFyY2hfdHlwZSwgbG9va3VwX3F1ZXJ5c3R5bGUpKQotICB7Ci0gIGZpbGVuYW1lID0ga2V5cXVl
cnk7Ci0gIGtleXF1ZXJ5ID0gczsKLSAgfQora2V5cXVlcnkgPSBzZWFyY2hfYXJncyhzZWFyY2hf
dHlwZSwgcywgc2VtaWNvbG9uKzEsICZmaWxlbmFtZSwgb3B0cyk7CiAKIC8qIE5vdyBkbyB0aGUg
YWN0dWFsIGxvb2t1cDsgdGhyb3cgYXdheSB0aGUgZGF0YSByZXR1cm5lZCB1bmxlc3MgaXQgd2Fz
IGFza2VkCiBmb3I7IHBhcnRpYWwgbWF0Y2hpbmcgaXMgYWxsIGhhbmRsZWQgaW5zaWRlIHNlYXJj
aF9maW5kKCkuIE5vdGUgdGhhdCB0aGVyZSBpcwpAQCAtNDQ5LDExICs0MzIsOSBAQAogICB2b2lk
ICphcmcsIGludCB0eXBlLCBjb25zdCB1c2NoYXIgKm5hbWUsIGNvbnN0IHVzY2hhciAqKnZhbHVl
cHRyKQogewogaW50IHlpZWxkID0gT0s7Ci11bnNpZ25lZCBpbnQgKm9yaWdpbmFsX2NhY2hlX2Jp
dHMgPSAqY2FjaGVfcHRyOwotQk9PTCBpbmNsdWRlX3Vua25vd24gPSBGQUxTRTsKLUJPT0wgaWdu
b3JlX3Vua25vd24gPSBGQUxTRTsKLUJPT0wgaW5jbHVkZV9kZWZlciA9IEZBTFNFOwotQk9PTCBp
Z25vcmVfZGVmZXIgPSBGQUxTRTsKK3Vuc2lnbmVkIGludCAqIG9yaWdpbmFsX2NhY2hlX2JpdHMg
PSAqY2FjaGVfcHRyOworQk9PTCBpbmNsdWRlX3Vua25vd24gPSBGQUxTRSwgaWdub3JlX3Vua25v
d24gPSBGQUxTRSwKKyAgICAgIGluY2x1ZGVfZGVmZXIgPSBGQUxTRSwgaWdub3JlX2RlZmVyID0g
RkFMU0U7CiBjb25zdCB1c2NoYXIgKmxpc3Q7CiB1c2NoYXIgKnNzczsKIHVzY2hhciAqb3QgPSBO
VUxMOwpAQCAtNDYyLDggKzQ0Myw4IEBACiAKIEhERUJVRyhEX2FueSkKICAgewotICB1c2NoYXIg
Kmxpc3RuYW1lID0gcmVhZGNvbmZfZmluZF9vcHRpb24obGlzdHB0cik7Ci0gIGlmIChsaXN0bmFt
ZVswXSAhPSAwKSBvdCA9IHN0cmluZ19zcHJpbnRmKCIlcyBpbiAlcz8iLCBuYW1lLCBsaXN0bmFt
ZSk7CisgIHVzY2hhciAqIGxpc3RuYW1lID0gcmVhZGNvbmZfZmluZF9vcHRpb24obGlzdHB0cik7
CisgIGlmICgqbGlzdG5hbWUpIG90ID0gc3RyaW5nX3NwcmludGYoIiVzIGluICVzPyIsIG5hbWUs
IGxpc3RuYW1lKTsKICAgfQogCiAvKiBJZiB0aGUgbGlzdCBpcyBlbXB0eSwgdGhlIGFuc3dlciBp
cyBuby4gU2tpcCB0aGUgZGVidWdnaW5nIG91dHB1dCBmb3IKQEAgLTQ3MSw3ICs0NTIsNyBAQAog
CiBpZiAoISpsaXN0cHRyKQogICB7Ci0gIEhERUJVRyhEX2xpc3RzKSBpZiAob3QpIGRlYnVnX3By
aW50ZigiJXMgbm8gKG9wdGlvbiB1bnNldClcbiIsIG90KTsKKyAgSERFQlVHKERfbGlzdHMpIGlm
IChvdCkgZGVidWdfcHJpbnRmX2luZGVudCgiJXMgbm8gKG9wdGlvbiB1bnNldClcbiIsIG90KTsK
ICAgcmV0dXJuIEZBSUw7CiAgIH0KIApAQCAtNTA0LDcgKzQ4NSw3IEBACiAgICAgewogICAgIGlm
IChmLmV4cGFuZF9zdHJpbmdfZm9yY2VkZmFpbCkKICAgICAgIHsKLSAgICAgIEhERUJVRyhEX2xp
c3RzKSBkZWJ1Z19wcmludGYoImV4cGFuc2lvbiBvZiBcIiVzXCIgZm9yY2VkIGZhaWx1cmU6ICIK
KyAgICAgIEhERUJVRyhEX2xpc3RzKSBkZWJ1Z19wcmludGZfaW5kZW50KCJleHBhbnNpb24gb2Yg
XCIlc1wiIGZvcmNlZCBmYWlsdXJlOiAiCiAgICAgICAgICJhc3N1bWUgbm90IGluIHRoaXMgbGlz
dFxuIiwgKmxpc3RwdHIpOwogICAgICAgcmV0dXJuIEZBSUw7CiAgICAgICB9CkBAIC01MTUsOCAr
NDk2LDE4IEBACiAgIH0KIAogLyogRm9yIGFuIHVubmFtZWQgbGlzdCwgdXNlIHRoZSBleHBhbmRl
ZCB2ZXJzaW9uIGluIGNvbW1lbnRzICovCisjZGVmaW5lIExJU1RfTElNSVRfUFIgMjA0OAogCi1I
REVCVUcoRF9hbnkpIGlmICghb3QpIG90ID0gc3RyaW5nX3NwcmludGYoIiVzIGluIFwiJXNcIj8i
LCBuYW1lLCBsaXN0KTsKK0hERUJVRyhEX2FueSkgaWYgKCFvdCkKKyAgeworICBpbnQgbiwgbTsK
KyAgZ3N0cmluZyAqIGcgPSBzdHJpbmdfZm10X2FwcGVuZChOVUxMLCAiJXMgaW4gXCIlbiUuKnMl
blwiIiwKKyAgICBuYW1lLCAmbiwgTElTVF9MSU1JVF9QUiwgbGlzdCwgJm0pOworICBpZiAobSAt
IG4gPj0gTElTVF9MSU1JVF9QUikgZyA9IHN0cmluZ19jYXRuKGcsIFVTIi4uLiIsIDMpOworICBn
ID0gc3RyaW5nX2NhdG4oZywgVVMiPyIsIDEpOworICBnc3RyaW5nX3JlbGVhc2VfdW51c2VkKGcp
OworICBvdCA9IHN0cmluZ19mcm9tX2dzdHJpbmcoZyk7CisgIH0KIAogLyogTm93IHNjYW4gdGhl
IGxpc3QgYW5kIHByb2Nlc3MgZWFjaCBpdGVtIGluIHR1cm4sIHVudGlsIG9uZSBvZiB0aGVtIG1h
dGNoZXMsCiBvciB3ZSBoaXQgYW4gZXJyb3IuICovCkBAIC02NzYsNyArNjY3LDcgQEAKICAgICAg
ICAgICAgIHNvIHdlIHVzZSB0aGUgcGVybWFuZW50IHN0b3JlIHBvb2wgKi8KIAogICAgICAgICAg
ICAgc3RvcmVfcG9vbCA9IFBPT0xfUEVSTTsKLSAgICAgICAgICAgIHAgPSBzdG9yZV9nZXQoc2l6
ZW9mKG5hbWVkbGlzdF9jYWNoZWJsb2NrKSwgRkFMU0UpOworICAgICAgICAgICAgcCA9IHN0b3Jl
X2dldChzaXplb2YobmFtZWRsaXN0X2NhY2hlYmxvY2spLCBHRVRfVU5UQUlOVEVEKTsKICAgICAg
ICAgICAgIHAtPmtleSA9IHN0cmluZ19jb3B5KGdldF9jaGVja19rZXkoYXJnLCB0eXBlKSk7CiAK
IApAQCAtNjg2LDcgKzY3Nyw3IEBACiAgICAgICAgICAgICBwLT5uZXh0ID0gbmItPmNhY2hlX2Rh
dGE7CiAgICAgICAgICAgICBuYi0+Y2FjaGVfZGF0YSA9IHA7CiAgICAgICAgICAgICBpZiAoKnZh
bHVlcHRyKQotICAgICAgICAgICAgICBERUJVRyhEX2xpc3RzKSBkZWJ1Z19wcmludGYoImRhdGEg
ZnJvbSBsb29rdXAgc2F2ZWQgZm9yICIKKyAgICAgICAgICAgICAgREVCVUcoRF9saXN0cykgZGVi
dWdfcHJpbnRmX2luZGVudCgiZGF0YSBmcm9tIGxvb2t1cCBzYXZlZCBmb3IgIgogICAgICAgICAg
ICAgICAgICJjYWNoZSBmb3IgJXM6IGtleSAnJXMnIHZhbHVlICclcydcbiIsIHNzLCBwLT5rZXks
ICp2YWx1ZXB0cik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQpAQCAtNjk4LDcgKzY4OSw3
IEBACiAKICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICBERUJVRyhEX2xpc3RzKSBkZWJ1
Z19wcmludGYoImNhY2hlZCAlcyBtYXRjaCBmb3IgJXNcbiIsCisgICAgICAgIERFQlVHKERfbGlz
dHMpIGRlYnVnX3ByaW50Zl9pbmRlbnQoImNhY2hlZCAlcyBtYXRjaCBmb3IgJXNcbiIsCiAgICAg
ICAgICAgKGJpdHMgJiAoLWJpdHMpKSA9PSBiaXRzID8gInllcyIgOiAibm8iLCBzcyk7CiAKICAg
ICAgICAgY2FjaGVkID0gVVMiIC0gY2FjaGVkIjsKQEAgLTcxMiw3ICs3MDMsNyBAQAogICAgICAg
ICAgICAgICAqdmFsdWVwdHIgPSBwLT5kYXRhOwogICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgfQotICAgICAgICAgIERFQlVHKERfbGlzdHMpIGRlYnVnX3ByaW50ZigiY2FjaGVk
IGxvb2t1cCBkYXRhID0gJXNcbiIsICp2YWx1ZXB0cik7CisgICAgICAgICAgREVCVUcoRF9saXN0
cykgZGVidWdfcHJpbnRmX2luZGVudCgiY2FjaGVkIGxvb2t1cCBkYXRhID0gJXNcbiIsICp2YWx1
ZXB0cik7CiAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTcyMSw4ICs3MTIsOCBAQAogCiAg
ICAgICBpZiAoKGJpdHMgJiAoLWJpdHMpKSA9PSBiaXRzKSAgICAvKiBPbmx5IG9uZSBvZiB0aGUg
dHdvIGJpdHMgaXMgc2V0ICovCiAgICAgICAgIHsKLSAgICAgICAgSERFQlVHKERfbGlzdHMpIGRl
YnVnX3ByaW50ZigiJXMgJXMgKG1hdGNoZWQgXCIlc1wiJXMpXG4iLCBvdCwKLSAgICAgICAgICAo
eWllbGQgPT0gT0spPyAieWVzIiA6ICJubyIsIHNzcywgY2FjaGVkKTsKKyAgICAgICAgSERFQlVH
KERfbGlzdHMpIGRlYnVnX3ByaW50Zl9pbmRlbnQoIiVzICVzIChtYXRjaGVkIFwiJXNcIiVzKVxu
Iiwgb3QsCisgICAgICAgICAgeWllbGQgPT0gT0sgPyAieWVzIiA6ICJubyIsIHNzcywgY2FjaGVk
KTsKICAgICAgICAgcmV0dXJuIHlpZWxkOwogICAgICAgICB9CiAgICAgICB9CkBAIC03MzUsNyAr
NzI2LDcgQEAKICAgICAgIHN3aXRjaCAoKGZ1bmMpKGFyZywgc3MsIHZhbHVlcHRyLCAmZXJyb3Ip
KQogICAgICAgICB7CiAgICAgICAgIGNhc2UgT0s6Ci0JICBIREVCVUcoRF9saXN0cykgZGVidWdf
cHJpbnRmKCIlcyAlcyAobWF0Y2hlZCBcIiVzXCIpXG4iLCBvdCwKKwkgIEhERUJVRyhEX2xpc3Rz
KSBkZWJ1Z19wcmludGZfaW5kZW50KCIlcyAlcyAobWF0Y2hlZCBcIiVzXCIpXG4iLCBvdCwKIAkg
ICAgKHlpZWxkID09IE9LKT8gInllcyIgOiAibm8iLCBzc3MpOwogCSAgcmV0dXJuIHlpZWxkOwog
CkBAIC03NDQsNyArNzM1LDcgQEAKIAkgICAgZXJyb3IgPSBzdHJpbmdfc3ByaW50ZigiRE5TIGxv
b2t1cCBvZiBcIiVzXCIgZGVmZXJyZWQiLCBzcyk7CiAJICBpZiAoaWdub3JlX2RlZmVyKQogCSAg
ICB7Ci0JICAgIEhERUJVRyhEX2xpc3RzKSBkZWJ1Z19wcmludGYoIiVzOiBpdGVtIGlnbm9yZWQg
YnkgK2lnbm9yZV9kZWZlclxuIiwKKwkgICAgSERFQlVHKERfbGlzdHMpIGRlYnVnX3ByaW50Zl9p
bmRlbnQoIiVzOiBpdGVtIGlnbm9yZWQgYnkgK2lnbm9yZV9kZWZlclxuIiwKIAkgICAgICBlcnJv
cik7CiAJICAgIGJyZWFrOwogCSAgICB9CkBAIC03NjQsMTIgKzc1NSwxMiBAQAogICAgICAgICBj
YXNlIEVSUk9SOgogCSAgaWYgKGlnbm9yZV91bmtub3duKQogCSAgICB7Ci0JICAgIEhERUJVRyhE
X2xpc3RzKSBkZWJ1Z19wcmludGYoIiVzOiBpdGVtIGlnbm9yZWQgYnkgK2lnbm9yZV91bmtub3du
XG4iLAorCSAgICBIREVCVUcoRF9saXN0cykgZGVidWdfcHJpbnRmX2luZGVudCgiJXM6IGl0ZW0g
aWdub3JlZCBieSAraWdub3JlX3Vua25vd25cbiIsCiAJICAgICAgZXJyb3IpOwogCSAgICB9CiAJ
ICBlbHNlCiAJICAgIHsKLQkgICAgSERFQlVHKERfbGlzdHMpIGRlYnVnX3ByaW50ZigiJXMgJXMg
KCVzKVxuIiwgb3QsCisJICAgIEhERUJVRyhEX2xpc3RzKSBkZWJ1Z19wcmludGZfaW5kZW50KCIl
cyAlcyAoJXMpXG4iLCBvdCwKIAkgICAgICBpbmNsdWRlX3Vua25vd24/ICJ5ZXMiOiJubyIsIGVy
cm9yKTsKIAkgICAgaWYgKCFpbmNsdWRlX3Vua25vd24pCiAJICAgICAgewpAQCAtODAzLDcgKzc5
NCw3IEBACiAgICAgICBpZiAobGlzdG5hbWVbMF0gPT0gMCkKICAgICAgICAgbGlzdG5hbWUgPSBz
dHJpbmdfc3ByaW50ZigiXCIlc1wiIiwgKmxpc3RwdHIpOwogICAgICAgbG9nX3dyaXRlKDAsIExP
R19NQUlOfExPR19QQU5JQ19ESUUsICIlcyIsCi0gICAgICAgIHN0cmluZ19vcGVuX2ZhaWxlZChl
cnJubywgIiVzIHdoZW4gY2hlY2tpbmcgJXMiLCBzc3MsIGxpc3RuYW1lKSk7CisgICAgICAgIHN0
cmluZ19vcGVuX2ZhaWxlZCgiJXMgd2hlbiBjaGVja2luZyAlcyIsIHNzcywgbGlzdG5hbWUpKTsK
ICAgICAgIH0KIAogICAgIC8qIFRyYWlsaW5nIGNvbW1lbnRzIGFyZSBpbnRyb2R1Y2VkIGJ5ICMs
IGJ1dCBpbiBhbiBhZGRyZXNzIGxpc3Qgb3IgbG9jYWwKQEAgLTgyNiwxOSArODE3LDE5IEBACiAg
ICAgICAgIHNzcyA9IHNzICsgMTsKICAgICAgICAgfQogCi0gICAgICBzcyA9IGZpbGVidWZmZXIg
KyBVc3RybGVuKGZpbGVidWZmZXIpOyAgICAgICAgICAgICAvKiB0cmFpbGluZyBzcGFjZSAqLwor
ICAgICAgc3MgPSBmaWxlYnVmZmVyICsgVXN0cmxlbihmaWxlYnVmZmVyKTsJCS8qIHRyYWlsaW5n
IHNwYWNlICovCiAgICAgICB3aGlsZSAoc3MgPiBmaWxlYnVmZmVyICYmIGlzc3BhY2Uoc3NbLTFd
KSkgc3MtLTsKICAgICAgICpzcyA9IDA7CiAKICAgICAgIHNzID0gZmlsZWJ1ZmZlcjsKLSAgICAg
IHdoaWxlIChpc3NwYWNlKCpzcykpIHNzKys7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxl
YWRpbmcgc3BhY2UgKi8KKyAgICAgIHdoaWxlIChpc3NwYWNlKCpzcykpIHNzKys7CQkJLyogbGVh
ZGluZyBzcGFjZSAqLwogCi0gICAgICBpZiAoKnNzID09IDApIGNvbnRpbnVlOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBpZ25vcmUgZW1wdHkgKi8KKyAgICAgIGlmICghKnNzKSBjb250
aW51ZTsJCQkJLyogaWdub3JlIGVtcHR5ICovCiAKLSAgICAgIGZpbGVfeWllbGQgPSB5aWVsZDsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc2l0aXZlIHlpZWxkICovCi0gICAg
ICBzc3MgPSBzczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBm
b3IgZGVidWdnaW5nICovCisgICAgICBmaWxlX3lpZWxkID0geWllbGQ7CQkJCS8qIHBvc2l0aXZl
IHlpZWxkICovCisgICAgICBzc3MgPSBzczsJCQkJCQkvKiBmb3IgZGVidWdnaW5nICovCiAKLSAg
ICAgIGlmICgqc3MgPT0gJyEnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q
IG5lZ2F0aW9uICovCisgICAgICBpZiAoKnNzID09ICchJykJCQkJCS8qIG5lZ2F0aW9uICovCiAg
ICAgICAgIHsKICAgICAgICAgZmlsZV95aWVsZCA9IChmaWxlX3lpZWxkID09IE9LKT8gRkFJTCA6
IE9LOwogICAgICAgICB3aGlsZSAoaXNzcGFjZSgoKigrK3NzKSkpKTsKQEAgLTg0OCw3ICs4Mzks
NyBAQAogICAgICAgICB7CiAgICAgICAgIGNhc2UgT0s6CiAJICAodm9pZClmY2xvc2UoZik7Ci0J
ICBIREVCVUcoRF9saXN0cykgZGVidWdfcHJpbnRmKCIlcyAlcyAobWF0Y2hlZCBcIiVzXCIgaW4g
JXMpXG4iLCBvdCwKKwkgIEhERUJVRyhEX2xpc3RzKSBkZWJ1Z19wcmludGZfaW5kZW50KCIlcyAl
cyAobWF0Y2hlZCBcIiVzXCIgaW4gJXMpXG4iLCBvdCwKIAkgICAgeWllbGQgPT0gT0sgPyAieWVz
IiA6ICJubyIsIHNzcywgZmlsZW5hbWUpOwogCiAJICAvKiBUaGUgInBhdHRlcm4iIGJlaW5nIG1h
dGNoZWQgY2FtZSBmcm9tIHRoZSBmaWxlOyB3ZSB1c2UgYSBzdGFjay1sb2NhbC4KQEAgLTg2Miw3
ICs4NTMsNyBAQAogCSAgICBlcnJvciA9IHN0cmluZ19zcHJpbnRmKCJETlMgbG9va3VwIG9mICVz
IGRlZmVycmVkIiwgc3MpOwogCSAgaWYgKGlnbm9yZV9kZWZlcikKIAkgICAgewotCSAgICBIREVC
VUcoRF9saXN0cykgZGVidWdfcHJpbnRmKCIlczogaXRlbSBpZ25vcmVkIGJ5ICtpZ25vcmVfZGVm
ZXJcbiIsCisJICAgIEhERUJVRyhEX2xpc3RzKSBkZWJ1Z19wcmludGZfaW5kZW50KCIlczogaXRl
bSBpZ25vcmVkIGJ5ICtpZ25vcmVfZGVmZXJcbiIsCiAJICAgICAgZXJyb3IpOwogCSAgICBicmVh
azsKIAkgICAgfQpAQCAtODc3LDEyICs4NjgsMTIgQEAKICAgICAgICAgY2FzZSBFUlJPUjoJCS8q
IGhvc3QgbmFtZSBsb29rdXAgZmFpbGVkIC0gdGhpcyBjYW4gb25seSAqLwogCSAgaWYgKGlnbm9y
ZV91bmtub3duKQkvKiBiZSBmb3IgYW4gaW5jb21pbmcgaG9zdCAobm90IG91dGdvaW5nKSAqLwog
CSAgICB7Ci0JICAgIEhERUJVRyhEX2xpc3RzKSBkZWJ1Z19wcmludGYoIiVzOiBpdGVtIGlnbm9y
ZWQgYnkgK2lnbm9yZV91bmtub3duXG4iLAorCSAgICBIREVCVUcoRF9saXN0cykgZGVidWdfcHJp
bnRmX2luZGVudCgiJXM6IGl0ZW0gaWdub3JlZCBieSAraWdub3JlX3Vua25vd25cbiIsCiAJICAg
ICAgZXJyb3IpOwogCSAgICB9CiAJICBlbHNlCiAJICAgewotCSAgICBIREVCVUcoRF9saXN0cykg
ZGVidWdfcHJpbnRmKCIlcyAlcyAoJXMpXG4iLCBvdCwKKwkgICAgSERFQlVHKERfbGlzdHMpIGRl
YnVnX3ByaW50Zl9pbmRlbnQoIiVzICVzICglcylcbiIsIG90LAogCSAgICAgIGluY2x1ZGVfdW5r
bm93bj8gInllcyI6Im5vIiwgZXJyb3IpOwogCSAgICAodm9pZClmY2xvc2UoZik7CiAJICAgIGlm
ICghaW5jbHVkZV91bmtub3duKQpAQCAtOTA4LDcgKzg5OSw3IEBACiAvKiBFbmQgb2YgbGlzdCBy
ZWFjaGVkOiBpZiB0aGUgbGFzdCBpdGVtIHdhcyBuZWdhdGVkIHlpZWxkIE9LLCBlbHNlIEZBSUwu
ICovCiAKIEhERUJVRyhEX2xpc3RzKQotICBkZWJ1Z19wcmludGYoIiVzICVzIChlbmQgb2YgbGlz
dClcbiIsIG90LCB5aWVsZCA9PSBPSyA/ICJubyI6InllcyIpOworICBkZWJ1Z19wcmludGZfaW5k
ZW50KCIlcyAlcyAoZW5kIG9mIGxpc3QpXG4iLCBvdCwgeWllbGQgPT0gT0sgPyAibm8iOiJ5ZXMi
KTsKIHJldHVybiB5aWVsZCA9PSBPSyA/IEZBSUwgOiBPSzsKIAogLyogU29tZXRoaW5nIGRlZmVy
cmVkICovCkBAIC0xMDE0LDE5ICsxMDA1LDE4IEBACiBzdGF0aWMgaW50CiBjaGVja19hZGRyZXNz
KHZvaWQgKmFyZywgY29uc3QgdXNjaGFyICpwYXR0ZXJuLCBjb25zdCB1c2NoYXIgKip2YWx1ZXB0
ciwgdXNjaGFyICoqZXJyb3IpCiB7Ci1jaGVja19hZGRyZXNzX2Jsb2NrICpjYiA9IChjaGVja19h
ZGRyZXNzX2Jsb2NrICopYXJnOworY2hlY2tfYWRkcmVzc19ibG9jayAqIGNiID0gKGNoZWNrX2Fk
ZHJlc3NfYmxvY2sgKilhcmc7CiBjaGVja19zdHJpbmdfYmxvY2sgY3NiOwogaW50IHJjOwogaW50
IGV4cGFuZF9pbmMgPSAwOwotdW5zaWduZWQgaW50ICpudWxsID0gTlVMTDsKLWNvbnN0IHVzY2hh
ciAqbGlzdHB0cjsKLXVzY2hhciAqc3ViamVjdCA9IGNiLT5hZGRyZXNzOwotY29uc3QgdXNjaGFy
ICpzOwotdXNjaGFyICpwZG9tYWluLCAqc2RvbWFpbjsKK3Vuc2lnbmVkIGludCAqIG51bGwgPSBO
VUxMOworY29uc3QgdXNjaGFyICogbGlzdHB0cjsKK3VzY2hhciAqIHN1YmplY3QgPSBjYi0+YWRk
cmVzczsKK2NvbnN0IHVzY2hhciAqIHM7Cit1c2NoYXIgKiBwZG9tYWluLCAqIHNkb21haW47Cit1
c2NoYXIgKiB2YWx1ZSA9IE5VTEw7CiAKLWVycm9yID0gZXJyb3I7ICAvKiBLZWVwIGNsZXZlciBj
b21waWxlcnMgZnJvbSBjb21wbGFpbmluZyAqLwotCi1ERUJVRyhEX2xpc3RzKSBkZWJ1Z19wcmlu
dGYoImFkZHJlc3MgbWF0Y2ggdGVzdDogc3ViamVjdD0lcyBwYXR0ZXJuPSVzXG4iLAorREVCVUco
RF9saXN0cykgZGVidWdfcHJpbnRmX2luZGVudCgiYWRkcmVzcyBtYXRjaCB0ZXN0OiBzdWJqZWN0
PSVzIHBhdHRlcm49JXNcbiIsCiAgIHN1YmplY3QsIHBhdHRlcm4pOwogCiAvKiBGaW5kIHRoZSBz
dWJqZWN0J3MgZG9tYWluICovCkBAIC0xMDc1LDcgKzEwNjUsNyBAQAogYmVjYXVzZSBvdGhlciBw
YXR0ZXJucyBleHBlY3QgdG8gaGF2ZSBhIGxvY2FsIHBhcnQgYW5kIGEgZG9tYWluIHRvIG1hdGNo
CiBhZ2FpbnN0LiAqLwogCi1pZiAoKnN1YmplY3QgPT0gMCkgcmV0dXJuICgqcGF0dGVybiA9PSAw
KT8gT0sgOiBGQUlMOworaWYgKCEqc3ViamVjdCkgcmV0dXJuICpwYXR0ZXJuID8gRkFJTCA6IE9L
OwogCiAvKiBJZiB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCAiQEAiIHdlIGhhdmUgYSBzcGxpdCBs
b29rdXAsIHdoZXJlIHRoZSBkb21haW4gaXMKIGxvb2tlZCB1cCB0byBvYnRhaW4gYSBsaXN0IG9m
IGxvY2FsIHBhcnRzLiBJZiB0aGUgc3ViamVjdCdzIGxvY2FsIHBhcnQgaXMganVzdApAQCAtMTA4
NSw3ICsxMDc1LDYgQEAKICAgewogICBpbnQgd2F0Y2hkb2cgPSA1MDsKICAgdXNjaGFyICpsaXN0
LCAqc3M7Ci0gIHVzY2hhciBidWZmZXJbMTAyNF07CiAKICAgaWYgKHNkb21haW4gPT0gc3ViamVj
dCArIDEgJiYgKnN1YmplY3QgPT0gJyonKSByZXR1cm4gRkFJTDsKIApAQCAtMTExNiw3ICsxMTA1
LDcgQEAKICAgICAvKiBMb29rIHVwIHRoZSBsb2NhbCBwYXJ0cyBwcm92aWRlZCBieSB0aGUgbGlz
dDsgbmVnYXRpb24gaXMgcGVybWl0dGVkLgogICAgIElmIGEgbG9jYWwgcGFydCBoYXMgdG8gYmVn
aW4gd2l0aCAhLCBhIHJlZ2V4IGNhbiBiZSB1c2VkLiAqLwogCi0gICAgd2hpbGUgKChzcyA9IHN0
cmluZ19uZXh0aW5saXN0KENVU1MgJmxpc3QsICZzZXAsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikp
KSkKKyAgICB3aGlsZSAoKHNzID0gc3RyaW5nX25leHRpbmxpc3QoQ1VTUyAmbGlzdCwgJnNlcCwg
TlVMTCwgMCkpKQogICAgICAgewogICAgICAgaW50IGxvY2FsX3lpZWxkOwogCkBAIC0xMTk4LDYg
KzExODcsNyBAQAogICAgICAgZXhwYW5kX25sZW5ndGhbY2ItPmV4cGFuZF9zZXR1cF0gPSBzbGxl
biAtIGNsbGVuOwogICAgICAgZXhwYW5kX2luYyA9IDE7CiAgICAgICB9CisgICAgdmFsdWUgPSBz
dHJpbmdfY29weW4ocGF0dGVybiArIDEsIGNsbGVuKTsKICAgICB9CiAgIGVsc2UKICAgICB7CkBA
IC0xMjA2LDYgKzExOTYsNyBAQAogICAgICAgICA/IHN0cm5jbXBpYyhzdWJqZWN0LCBwYXR0ZXJu
LCBzbGxlbikgIT0gMAogCTogVXN0cm5jbXAoc3ViamVjdCwgcGF0dGVybiwgc2xsZW4pICE9IDAp
IHJldHVybiBGQUlMOwogICAgIH0KKyAgICB2YWx1ZSA9IHN0cmluZ19jb3B5bihwYXR0ZXJuLCBz
bGxlbik7CiAgIH0KIAogLyogSWYgdGhlIGxvY2FsIHBhcnQgbWF0Y2hlZCwgb3Igd2FzIG5vdCBi
ZWluZyBjaGVja2VkLCBjaGVjayB0aGUgZG9tYWluIHVzaW5nCkBAIC0xMjMwLDE2ICsxMjIxLDIz
IEBACiBsaXN0cHRyID0gcGRvbWFpbiA/IHBkb21haW4gKyAxIDogcGF0dGVybjsKIGlmICh2YWx1
ZXB0cikgKnZhbHVlcHRyID0gTlVMTDsKIAotcmV0dXJuIG1hdGNoX2NoZWNrX2xpc3QoCi0gICZs
aXN0cHRyLCAgICAgICAgICAgICAgICAgIC8qIGxpc3Qgb2Ygb25lIGl0ZW0gKi8KLSAgVUNIQVJf
TUFYKzEsICAgICAgICAgICAgICAgLyogaW1wb3NzaWJsZSBzZXBhcmF0b3I7IHNpbmdsZSBpdGVt
ICovCi0gICZkb21haW5saXN0X2FuY2hvciwgICAgICAgIC8qIGl0J3MgYSBkb21haW4gbGlzdCAq
LwotICAmbnVsbCwgICAgICAgICAgICAgICAgICAgICAvKiBwdHIgdG8gTlVMTCBtZWFucyBubyBj
YWNoaW5nICovCi0gIGNoZWNrX3N0cmluZywgICAgICAgICAgICAgIC8qIHRoZSBmdW5jdGlvbiB0
byBkbyBvbmUgdGVzdCAqLwotICAmY3NiLCAgICAgICAgICAgICAgICAgICAgICAvKiBpdHMgZGF0
YSAqLwotICBNQ0xfRE9NQUlOICsgTUNMX05PRVhQQU5ELCAvKiBkb21haW4gbGlzdDsgZG9uJ3Qg
ZXhwYW5kICovCi0gIGNzYi5zdWJqZWN0LCAgICAgICAgICAgICAgIC8qIHN0cmluZyBmb3IgbWVz
c2FnZXMgKi8KLSAgdmFsdWVwdHIpOyAgICAgICAgICAgICAgICAgLyogd2hlcmUgdG8gcGFzcyBi
YWNrIGxvb2t1cCBkYXRhICovCisgIHsKKyAgY29uc3QgdXNjaGFyICogZHZhbHVlID0gTlVMTDsK
KyAgcmMgPSBtYXRjaF9jaGVja19saXN0KAorICAgICZsaXN0cHRyLCAgICAgICAgICAgICAgICAg
IC8qIGxpc3Qgb2Ygb25lIGl0ZW0gKi8KKyAgICBVQ0hBUl9NQVgrMSwgICAgICAgICAgICAgICAv
KiBpbXBvc3NpYmxlIHNlcGFyYXRvcjsgc2luZ2xlIGl0ZW0gKi8KKyAgICAmZG9tYWlubGlzdF9h
bmNob3IsICAgICAgICAvKiBpdCdzIGEgZG9tYWluIGxpc3QgKi8KKyAgICAmbnVsbCwgICAgICAg
ICAgICAgICAgICAgICAvKiBwdHIgdG8gTlVMTCBtZWFucyBubyBjYWNoaW5nICovCisgICAgY2hl
Y2tfc3RyaW5nLCAgICAgICAgICAgICAgLyogdGhlIGZ1bmN0aW9uIHRvIGRvIG9uZSB0ZXN0ICov
CisgICAgJmNzYiwgICAgICAgICAgICAgICAgICAgICAgLyogaXRzIGRhdGEgKi8KKyAgICBNQ0xf
RE9NQUlOICsgTUNMX05PRVhQQU5ELCAvKiBkb21haW4gbGlzdDsgZG9uJ3QgZXhwYW5kICovCisg
ICAgY3NiLnN1YmplY3QsICAgICAgICAgICAgICAgLyogc3RyaW5nIGZvciBtZXNzYWdlcyAqLwor
ICAgICZkdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgLyogd2hlcmUgdG8gcGFzcyBiYWNr
IGxvb2t1cCBkYXRhICovCisgIGlmICh2YWx1ZXB0ciAmJiAodmFsdWUgfHwgZHZhbHVlKSkKKyAg
ICAqdmFsdWVwdHIgPSBzdHJpbmdfc3ByaW50ZigiJXNAJXMiLAorCQkgIHZhbHVlID8gdmFsdWUg
OiBVUyIiLCBkdmFsdWUgPyBkdmFsdWUgOiBVUyIiKTsKKyAgfQorcmV0dXJuIHJjOwogfQogCiAK
QEAgLTEyOTQsOCArMTI5Miw4IEBACiBwYXR0ZXJucy4pIE90aGVyd2lzZSBqdXN0IHRoZSBkb21h
aW4gaXMgbG93ZXIgY2FzZXMuIEEgbWFnaWMgaXRlbSAiK2Nhc2VmdWwiIGluCiB0aGUgbGlzdCBj
YW4gYmUgdXNlZCB0byByZXN0b3JlIGEgY2FzZWZ1bCBjb3B5IG9mIHRoZSBsb2NhbCBwYXJ0IGZy
b20gdGhlCiBvcmlnaW5hbCBhZGRyZXNzLgotTGltaXQgdGhlIHN1YmplY3QgYWRkcmVzcyBzaXpl
IHRvIGF2b2lkIG1lbS1leGhhc3Rpb24gYXR0YWNrcy4gIFRoZSBzaXplIGNob3NlbgotaXMgaGlz
dG9yaWNhbCAod2UgdXNlZCB0byB1c2UgYmlnX2J1ZmZlciBoZXIpLiAqLworTGltaXQgdGhlIHN1
YmplY3QgYWRkcmVzcyBzaXplIHRvIGF2b2lkIG1lbS1leGhhdXN0aW9uIGF0dGFja3MuICBUaGUg
c2l6ZSBjaG9zZW4KK2lzIGhpc3RvcmljYWwgKHdlIHVzZWQgdG8gdXNlIGJpZ19idWZmZXIgaGVy
ZSkuICovCiAKIGlmICgobGVuID0gVXN0cmxlbihhZGRyZXNzKSkgPiBCSUdfQlVGRkVSX1NJWkUp
IGxlbiA9IEJJR19CVUZGRVJfU0laRTsKIGFiLmFkZHJlc3MgPSBzdHJpbmdfY29weW4oYWRkcmVz
cywgbGVuKTsKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9taW1lLmMgZXhpbS9zcmMvbWltZS5jCi0t
LSBleGltLm9yaWcvc3JjL21pbWUuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMw
MAorKysgZXhpbS9zcmMvbWltZS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAw
CkBAIC0yLDkgKzIsMTAgQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9y
dCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwogCi0vKiBDb3B5cmlnaHQgKGMpIFRvbSBLaXN0bmVyIDx0b21AZHVuY2FudGhyYXgu
bmV0PiAyMDA0IC0gMjAxNQorLyoKKyAqIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5l
cnMgMjAxNSAtIDIwMjIKKyAqIENvcHlyaWdodCAoYykgVG9tIEtpc3RuZXIgPHRvbUBkdW5jYW50
aHJheC5uZXQ+IDIwMDQgLSAyMDE1CiAgKiBMaWNlbnNlOiBHUEwKLSAqIENvcHlyaWdodCAoYykg
VGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNSAtIDIwMjAKICAqLwogCiAjaW5jbHVkZSAiZXhpbS5o
IgpAQCAtNTAxLDcgKzUwMiw3IEBACiBzdHJ1Y3QgbWltZV9ib3VuZGFyeV9jb250ZXh0IG5lc3Rl
ZF9jb250ZXh0OwogCiAvKiByZXNlcnZlIGEgbGluZSBidWZmZXIgdG8gd29yayBpbi4gIEFzc3Vt
ZSB0YWludGVkIGRhdGEuICovCi1oZWFkZXIgPSBzdG9yZV9nZXQoTUlNRV9NQVhfSEVBREVSX1NJ
WkUrMSwgVFJVRSk7CitoZWFkZXIgPSBzdG9yZV9nZXQoTUlNRV9NQVhfSEVBREVSX1NJWkUrMSwg
R0VUX1RBSU5URUQpOwogCiAvKiBOb3QgYWN0dWFsbHkgdXNlZCBhdCB0aGUgbW9tZW50LCBidXQg
d2lsbCBiZSB2aXRhbCB0byBmaXhpbmcKICAqIHNvbWUgUkZDIDIwNDYgbm9uY29uZm9ybWFuY2Ug
bGF0ZXIuLi4gKi8KZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9tb2FuLmMgZXhpbS9zcmMvbW9hbi5j
Ci0tLSBleGltLm9yaWcvc3JjL21vYW4uYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCAr
MDMwMAorKysgZXhpbS9zcmMvbW9hbi5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICsw
MzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNw
b3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAt
IDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAt
IDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwog
LyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1
dGlvbi4gKi8KIAogLyogRnVuY3Rpb25zIGZvciBzZW5kaW5nIG1lc3NhZ2VzIHRvIHNlbmRlciBv
ciB0byBtYWlsbWFzdGVyLiAqLwpAQCAtMzg2LDcgKzM4Niw3IEBACiAgIGlmIChib3VuY2VfcmV0
dXJuX2JvZHkgJiYgbWVzc2FnZV9maWxlKQogICAgIHsKICAgICBCT09MIGVuZGRvdCA9IGYuZG90
X2VuZHMgJiYgbWVzc2FnZV9maWxlID09IHN0ZGluOwotICAgIHVzY2hhciAqIGJ1ZiA9IHN0b3Jl
X2dldChib3VuY2VfcmV0dXJuX2xpbmVzaXplX2xpbWl0KzIsIFRSVUUpOworICAgIHVzY2hhciAq
IGJ1ZiA9IHN0b3JlX2dldChib3VuY2VfcmV0dXJuX2xpbmVzaXplX2xpbWl0KzIsIEdFVF9UQUlO
VEVEKTsKIAogICAgIGlmIChmaXJzdGxpbmUpIGZwcmludGYoZnAsICIlcyIsIENTIGZpcnN0bGlu
ZSk7CiAKQEAgLTcxOSw3ICs3MTksNiBAQAogdXNjaGFyICppdGVtLCAqbG9jYWxwYXJ0LCAqZG9t
YWluOwogY29uc3QgdXNjaGFyICpsaXN0cHRyID0gZXJyb3JzX2NvcHk7CiB1c2NoYXIgKnlpZWxk
ID0gTlVMTDsKLXVzY2hhciBidWZmZXJbMjU2XTsKIGludCBzZXAgPSAwOwogaW50IGxsZW47CiAK
QEAgLTczNSw3ICs3MzQsNyBAQAogCiAvKiBTY2FuIHRocm91Z2ggdGhlIGNvbmZpZ3VyZWQgaXRl
bXMgKi8KIAotd2hpbGUgKChpdGVtID0gc3RyaW5nX25leHRpbmxpc3QoJmxpc3RwdHIsICZzZXAs
IGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKSkKK3doaWxlICgoaXRlbSA9IHN0cmluZ19uZXh0aW5s
aXN0KCZsaXN0cHRyLCAmc2VwLCBOVUxMLCAwKSkpCiAgIHsKICAgY29uc3QgdXNjaGFyICpuZXdh
ZGRyZXNzID0gaXRlbTsKICAgY29uc3QgdXNjaGFyICpwYXR0ZXJuID0gc3RyaW5nX2RlcXVvdGUo
Jm5ld2FkZHJlc3MpOwpkaWZmIC11ciBleGltLm9yaWcvc3JjL215dHlwZXMuaCBleGltL3NyYy9t
eXR5cGVzLmgKLS0tIGV4aW0ub3JpZy9zcmMvbXl0eXBlcy5oCTIwMjMtMDYtMDQgMTY6MjI6MDUu
MDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9teXR5cGVzLmgJMjAyMi0wNi0yMyAxNjo0MTox
MC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJu
ZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWlu
dGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENh
bWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFp
bmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVz
ZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAKQEAgLTMwLDI4ICszMCwzNyBAQAogCiAKIC8qIElm
IGdjYyBpcyBiZWluZyB1c2VkIHRvIGNvbXBpbGUgRXhpbSwgd2UgY2FuIHVzZSBpdHMgZmFjaWxp
dHkgZm9yIGNoZWNraW5nCi10aGUgYXJndW1lbnRzIG9mIHByaW50Zi1saWtlIGZ1bmN0aW9ucy4g
VGhpcyBpcyBkb25lIGJ5IGEgbWFjcm8uICovCit0aGUgYXJndW1lbnRzIG9mIHByaW50Zi1saWtl
IGZ1bmN0aW9ucy4gVGhpcyBpcyBkb25lIGJ5IGEgbWFjcm8uCitPcGVuQlNEIGhhcyB1bmZvcnR1
bmF0ZWx5IHRha2VuIHRvIG9iamVjdGluZyB0byB1c2Ugb2YgJW4gaW4gcHJpbnRmCitzbyB3ZSBo
YXZlIHRvIGdpdmUgdXAgb24gYWxsIG9mIHRoZSBhdmFpbGFibGUgcGFyYW1ldGVyIGNoZWNraW5n
LiAqLwogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX2NsYW5nX18pCi0jIGRl
ZmluZSBQUklOVEZfRlVOQ1RJT04oQSxCKQlfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLEEs
QikpKQorIyBpZm5kZWYgX19PcGVuQlNEX18KKyMgIGRlZmluZSBQUklOVEZfRlVOQ1RJT04oQSxC
KQlfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLEEsQikpKQorIyBlbmRpZgogIyBkZWZpbmUg
QVJHX1VOVVNFRAkJX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisjIGRlZmluZSBGVU5DX01B
WUJFX1VOVVNFRAlfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKICMgZGVmaW5lIFdBUk5fVU5V
U0VEX1JFU1VMVAlfX2F0dHJpYnV0ZV9fKChfX3dhcm5fdW51c2VkX3Jlc3VsdF9fKSkKICMgZGVm
aW5lIEFMTE9DCQkJX19hdHRyaWJ1dGVfXygobWFsbG9jKSkKICMgZGVmaW5lIEFMTE9DX1NJWkUo
QSkJCV9fYXR0cmlidXRlX18oKGFsbG9jX3NpemUoQSkpKQogIyBkZWZpbmUgTk9SRVRVUk4JCV9f
YXR0cmlidXRlX18oKG5vcmV0dXJuKSkKICNlbHNlCi0jIGRlZmluZSBQUklOVEZfRlVOQ1RJT04o
QSxCKQogIyBkZWZpbmUgQVJHX1VOVVNFRAkJLyoqLworIyBkZWZpbmUgRlVOQ19NQVlCRV9VTlVT
RUQJLyoqLwogIyBkZWZpbmUgV0FSTl9VTlVTRURfUkVTVUxUCS8qKi8KICMgZGVmaW5lIEFMTE9D
CQkJLyoqLwogIyBkZWZpbmUgQUxMT0NfU0laRShBKQkJLyoqLwogIyBkZWZpbmUgTk9SRVRVUk4J
CS8qKi8KICNlbmRpZgogCisjaWZuZGVmIFBSSU5URl9GVU5DVElPTgorIyBkZWZpbmUgUFJJTlRG
X0ZVTkNUSU9OKEEsQikJLyoqLworI2VuZGlmCisKICNpZmRlZiBXQU5UX0RFRVBFUl9QUklOVEZf
Q0hFQ0tTCiAjIGRlZmluZSBBTE1PU1RfUFJJTlRGKEEsIEIpIFBSSU5URl9GVU5DVElPTihBLCBC
KQogI2Vsc2UKLSMgZGVmaW5lIEFMTU9TVF9QUklOVEYoQSwgQikKKyMgZGVmaW5lIEFMTU9TVF9Q
UklOVEYoQSwgQikJLyoqLwogI2VuZGlmCiAKIApkaWZmIC11ciBleGltLm9yaWcvc3JjL29zLmMg
ZXhpbS9zcmMvb3MuYwotLS0gZXhpbS5vcmlnL3NyYy9vcy5jCTIwMjMtMDYtMDQgMTY6MjI6MDUu
MDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9vcy5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAw
MDAwMDAwICswMzAwCkBAIC0yLDYgKzIsNyBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1h
aWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5l
cnMgMjAyMSAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlk
Z2UgMTk5NSAtIDIwMTggKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMg
b2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKQEAgLTQ5NSw5ICs0OTYsMTEgQEAKIAogZm9y
IChzdHJ1Y3QgaWZhZGRycyAqIGlmYSA9IGlmYWxpc3Q7IGlmYTsgaWZhID0gaWZhLT5pZmFfbmV4
dCkKICAgewotICBpZiAoaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5ICE9IEFGX0lORVQKKyAgc3Ry
dWN0IHNvY2thZGRyICogaWZhX2FkZHIgPSBpZmEtPmlmYV9hZGRyOworICBpZiAoIWlmYV9hZGRy
KSBjb250aW51ZTsKKyAgaWYgKGlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVAogI2lmIEhB
VkVfSVBWNgotICAgICYmIGlmYS0+aWZhX2FkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUNgorICAg
ICYmIGlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYKICNlbmRpZiAvKiBIQVZFX0lQVjYg
Ki8KICAgICApCiAgICAgY29udGludWU7CkBAIC01MDgsMTIgKzUxMSwxMiBAQAogICAvKiBDcmVh
dGUgYSBkYXRhIGJsb2NrIGZvciB0aGUgYWRkcmVzcywgZmlsbCBpbiB0aGUgZGF0YSwgYW5kIHB1
dCBpdCBvbiB0aGUKICAgY2hhaW4uICovCiAKLSAgbmV4dCA9IHN0b3JlX2dldChzaXplb2YoaXBf
YWRkcmVzc19pdGVtKSwgRkFMU0UpOworICBuZXh0ID0gc3RvcmVfZ2V0KHNpemVvZihpcF9hZGRy
ZXNzX2l0ZW0pLCBHRVRfVU5UQUlOVEVEKTsKICAgbmV4dC0+bmV4dCA9IE5VTEw7CiAgIG5leHQt
PnBvcnQgPSAwOwotICAodm9pZClob3N0X250b2EoLTEsIGlmYS0+aWZhX2FkZHIsIG5leHQtPmFk
ZHJlc3MsIE5VTEwpOworICAodm9pZClob3N0X250b2EoLTEsIGlmYV9hZGRyLCBuZXh0LT5hZGRy
ZXNzLCBOVUxMKTsKIAotICBpZiAoeWllbGQgPT0gTlVMTCkKKyAgaWYgKCF5aWVsZCkKICAgICB5
aWVsZCA9IGxhc3QgPSBuZXh0OwogICBlbHNlCiAgICAgewpAQCAtNzQzLDcgKzc0Niw3IEBACiAg
IC8qIENyZWF0ZSBhIGRhdGEgYmxvY2sgZm9yIHRoZSBhZGRyZXNzLCBmaWxsIGluIHRoZSBkYXRh
LCBhbmQgcHV0IGl0IG9uIHRoZQogICBjaGFpbi4gKi8KIAotICBuZXh0ID0gc3RvcmVfZ2V0KHNp
emVvZihpcF9hZGRyZXNzX2l0ZW0pLCBGQUxTRSk7CisgIG5leHQgPSBzdG9yZV9nZXQoc2l6ZW9m
KGlwX2FkZHJlc3NfaXRlbSksIEdFVF9VTlRBSU5URUQpOwogICBuZXh0LT5uZXh0ID0gTlVMTDsK
ICAgbmV4dC0+cG9ydCA9IDA7CiAgICh2b2lkKWhvc3RfbnRvYSgtMSwgYWRkcnAsIG5leHQtPmFk
ZHJlc3MsIE5VTEwpOwpAQCAtNzc1LDEzICs3NzgsMTMgQEAKIGlwX2FkZHJlc3NfaXRlbSAqCiBv
c19jb21tb25fZmluZF9ydW5uaW5nX2ludGVyZmFjZXModm9pZCkKIHsKLWlwX2FkZHJlc3NfaXRl
bSAqeWllbGQgPSBzdG9yZV9nZXQoc2l6ZW9mKGFkZHJlc3NfaXRlbSksIEZBTFNFKTsKK2lwX2Fk
ZHJlc3NfaXRlbSAqeWllbGQgPSBzdG9yZV9nZXQoc2l6ZW9mKGFkZHJlc3NfaXRlbSksIEdFVF9V
TlRBSU5URUQpOwogeWllbGQtPmFkZHJlc3MgPSBVUyIxMjcuMC4wLjEiOwogeWllbGQtPnBvcnQg
PSAwOwogeWllbGQtPm5leHQgPSBOVUxMOwogCiAjaWYgSEFWRV9JUFY2Ci15aWVsZC0+bmV4dCA9
IHN0b3JlX2dldChzaXplb2YoYWRkcmVzc19pdGVtKSwgRkFMU0UpOworeWllbGQtPm5leHQgPSBz
dG9yZV9nZXQoc2l6ZW9mKGFkZHJlc3NfaXRlbSksIEdFVF9VTlRBSU5URUQpOwogeWllbGQtPm5l
eHQtPmFkZHJlc3MgPSBVUyI6OjEiOwogeWllbGQtPm5leHQtPnBvcnQgPSAwOwogeWllbGQtPm5l
eHQtPm5leHQgPSBOVUxMOwpkaWZmIC11ciBleGltLm9yaWcvc3JjL3BhcnNlLmMgZXhpbS9zcmMv
cGFyc2UuYwotLS0gZXhpbS5vcmlnL3NyYy9wYXJzZS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAw
MDAwMDAwICswMzAwCisrKyBleGltL3NyYy9wYXJzZS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAw
MDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1h
aWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5l
cnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlk
Z2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMg
MjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5k
IGRpc3RyaWJ1dGlvbi4gKi8KIAogLyogRnVuY3Rpb25zIGZvciBwYXJzaW5nIGFkZHJlc3NlcyAq
LwpAQCAtMjIsMjIgKzIyLDI1IEBACiAKICNpZmRlZiBTVEFORF9BTE9ORQogCi1hZGRyZXNzX2l0
ZW0gKmRlbGl2ZXJfbWFrZV9hZGRyKHVzY2hhciAqYWRkcmVzcywgQk9PTCBjb3B5KQorYWRkcmVz
c19pdGVtICoKK2RlbGl2ZXJfbWFrZV9hZGRyKHVzY2hhciAqYWRkcmVzcywgQk9PTCBjb3B5KQog
ewotYWRkcmVzc19pdGVtICphZGRyID0gc3RvcmVfZ2V0KHNpemVvZihhZGRyZXNzX2l0ZW0pLCBG
QUxTRSk7CithZGRyZXNzX2l0ZW0gKmFkZHIgPSBzdG9yZV9nZXQoc2l6ZW9mKGFkZHJlc3NfaXRl
bSksIEdFVF9VTlRBSU5URUQpOwogYWRkci0+bmV4dCA9IE5VTEw7CiBhZGRyLT5wYXJlbnQgPSBO
VUxMOwogYWRkci0+YWRkcmVzcyA9IGFkZHJlc3M7CiByZXR1cm4gYWRkcjsKIH0KIAotdXNjaGFy
ICpyZXdyaXRlX2FkZHJlc3ModXNjaGFyICpyZWNpcGllbnQsIEJPT0wgZHVtbXkxLCBCT09MIGR1
bW15MiwgcmV3cml0ZV9ydWxlCit1c2NoYXIgKgorcmV3cml0ZV9hZGRyZXNzKHVzY2hhciAqcmVj
aXBpZW50LCBCT09MIGR1bW15MSwgQk9PTCBkdW1teTIsIHJld3JpdGVfcnVsZQogICAqZHVtbXkz
LCBpbnQgZHVtbXk0KQogewogcmV0dXJuIHJlY2lwaWVudDsKIH0KIAotdXNjaGFyICpyZXdyaXRl
X2FkZHJlc3NfcXVhbGlmeSh1c2NoYXIgKnJlY2lwaWVudCwgQk9PTCBkdW1teTEpCit1c2NoYXIg
KgorcmV3cml0ZV9hZGRyZXNzX3F1YWxpZnkodXNjaGFyICpyZWNpcGllbnQsIEJPT0wgZHVtbXkx
KQogewogcmV0dXJuIHJlY2lwaWVudDsKIH0KQEAgLTY1LDcgKzY4LDcgQEAKICovCiAKIHVzY2hh
ciAqCi1wYXJzZV9maW5kX2FkZHJlc3NfZW5kKHVzY2hhciAqcywgQk9PTCBubF9lbmRzKQorcGFy
c2VfZmluZF9hZGRyZXNzX2VuZChjb25zdCB1c2NoYXIgKnMsIEJPT0wgbmxfZW5kcykKIHsKIEJP
T0wgc291cmNlX3JvdXRpbmcgPSAqcyA9PSAnQCc7CiBpbnQgbm9fdGVybSA9IHNvdXJjZV9yb3V0
aW5nPyAxIDogMDsKQEAgLTEyMSw3ICsxMjQsNyBAQAogICAgIH0KICAgfQogCi1yZXR1cm4gczsK
K3JldHVybiBVUyBzOwogfQogCiAKQEAgLTIyNCwxNiArMjI3LDIwIEBACiBpbiBbXS4gTWFrZSBz
dXJlIHRoZSBvdXRwdXQgaXMgc2V0IHRvIHRoZSBudWxsIHN0cmluZyBpZiB0aGVyZSBpcyBhIHN5
bnRheAogZXJyb3IgYXMgd2VsbCBhcyBpZiB0aGVyZSBpcyBubyBkb21haW4gYXQgYWxsLgogCitP
cHRpb25hbGx5LCBtc2dfaWQgZG9tYWluIGxpdGVyYWxzICggcHJpbnRhYmxlLWFzY2lpIGVuY2xv
c2VkIGluIFtdICkKK2FyZSBwZXJtaXR0ZWQuCisKIEFyZ3VtZW50czoKICAgcyAgICAgICAgICBj
dXJyZW50IGNoYXJhY3RlciBwb2ludGVyCiAgIHQgICAgICAgICAgd2hlcmUgdG8gcHV0IHRoZSBk
b21haW4KKyAgbXNnX2lkX2xpdGVyYWxzICAgICBmbGFnIGZvciByZWxheGVkIGRvbWFpbi1saXRl
cmFsIHByb2Nlc3NpbmcKICAgZXJyb3JwdHIgICBwdXQgZXJyb3IgbWVzc2FnZSBoZXJlIG9uIGZh
aWx1cmUgKCp0IHdpbGwgYmUgMCBvbiBleGl0KQogCiBSZXR1cm5zOiAgICAgbmV3IGNoYXJhY3Rl
ciBwb2ludGVyCiAqLwogCiBzdGF0aWMgY29uc3QgdXNjaGFyICoKLXJlYWRfZG9tYWluKGNvbnN0
IHVzY2hhciAqcywgdXNjaGFyICp0LCB1c2NoYXIgKiplcnJvcnB0cikKK3JlYWRfZG9tYWluKGNv
bnN0IHVzY2hhciAqcywgdXNjaGFyICp0LCBCT09MIG1zZ19pZF9saXRlcmFscywgdXNjaGFyICoq
ZXJyb3JwdHIpCiB7CiB1c2NoYXIgKnR0ID0gdDsKIHMgPSBza2lwX2NvbW1lbnQocyk7CkBAIC0y
NTksNyArMjY2LDExIEBACiAgICAgdCArPSA1OwogICAgIHMgKz0gNTsKICAgICB9Ci0gIHdoaWxl
ICgqcyA9PSAnLicgfHwgKnMgPT0gJzonIHx8IGlzeGRpZ2l0KCpzKSkgKnQrKyA9ICpzKys7CisK
KyAgaWYgKG1zZ19pZF9saXRlcmFscykKKyAgICB3aGlsZSAoKnMgPj0gMzMgJiYgKnMgPD0gOTAg
fHwgKnMgPj0gOTQgJiYgKnMgPD0gMTI2KSAqdCsrID0gKnMrKzsKKyAgZWxzZQorICAgIHdoaWxl
ICgqcyA9PSAnLicgfHwgKnMgPT0gJzonIHx8IGlzeGRpZ2l0KCpzKSkgKnQrKyA9ICpzKys7CiAK
ICAgaWYgKCpzID09ICddJykgKnQrKyA9ICpzKys7IGVsc2UKICAgICB7CkBAIC0yNjcsNyArMjc4
LDcgQEAKICAgICAqdHQgPSAwOwogICAgIH0KIAotICBpZiAoIWFsbG93X2RvbWFpbl9saXRlcmFs
cykKKyAgaWYgKCFhbGxvd19kb21haW5fbGl0ZXJhbHMgJiYgIW1zZ19pZF9saXRlcmFscykKICAg
ICB7CiAgICAgKmVycm9ycHRyID0gVVMiZG9tYWluIGxpdGVyYWxzIG5vdCBhbGxvd2VkIjsKICAg
ICAqdHQgPSAwOwpAQCAtNTAwLDcgKzUxMSw3IEBACiB3aGlsZSAoKnMgPT0gJ0AnKQogICB7CiAg
ICp0KysgPSAnQCc7Ci0gIHMgPSByZWFkX2RvbWFpbihzKzEsIHQsIGVycm9ycHRyKTsKKyAgcyA9
IHJlYWRfZG9tYWluKHMrMSwgdCwgRkFMU0UsIGVycm9ycHRyKTsKICAgaWYgKCp0ID09IDApIHJl
dHVybiBzOwogICB0ICs9IFVzdHJsZW4oKGNvbnN0IHVzY2hhciAqKXQpOwogICBpZiAoKnMgIT0g
JywnKSBicmVhazsKQEAgLTU1OSw3ICs1NzAsNyBAQAogICAgICAgdCArPSBVc3RybGVuKChjb25z
dCB1c2NoYXIgKil0KTsKICAgICAgICp0KysgPSAqcysrOwogICAgICAgKmRvbWFpbnB0ciA9IHQ7
Ci0gICAgICBzID0gcmVhZF9kb21haW4ocywgdCwgZXJyb3JwdHIpOworICAgICAgcyA9IHJlYWRf
ZG9tYWluKHMsIHQsIEZBTFNFLCBlcnJvcnB0cik7CiAgICAgICB9CiByZXR1cm4gczsKIH0KQEAg
LTYxOSw3ICs2MzAsNyBAQAogcGFyc2VfZXh0cmFjdF9hZGRyZXNzKGNvbnN0IHVzY2hhciAqbWFp
bGJveCwgdXNjaGFyICoqZXJyb3JwdHIsIGludCAqc3RhcnQsIGludCAqZW5kLAogICBpbnQgKmRv
bWFpbiwgQk9PTCBhbGxvd19udWxsKQogewotdXNjaGFyICp5aWVsZCA9IHN0b3JlX2dldChVc3Ry
bGVuKG1haWxib3gpICsgMSwgaXNfdGFpbnRlZChtYWlsYm94KSk7Cit1c2NoYXIgKiB5aWVsZCA9
IHN0b3JlX2dldChVc3RybGVuKG1haWxib3gpICsgMSwgbWFpbGJveCk7CiBjb25zdCB1c2NoYXIg
KnN0YXJ0cHRyLCAqZW5kcHRyOwogY29uc3QgdXNjaGFyICpzID0gVVMgbWFpbGJveDsKIHVzY2hh
ciAqdCA9IFVTIHlpZWxkOwpAQCAtNjQ3LDkgKzY1OCw5IEBACiAKIGlmICgqcyAhPSAnQCcgJiYg
KnMgIT0gJzwnKQogICB7Ci0gIGlmICgqcyA9PSAwIHx8ICpzID09ICc7JykKKyAgaWYgKCEqcyB8
fCAqcyA9PSAnOycpCiAgICAgewotICAgIGlmICgqdCA9PSAwKSBGQUlMRUQoVVMiZW1wdHkgYWRk
cmVzcyIpOworICAgIGlmICghKnQpIEZBSUxFRChVUyJlbXB0eSBhZGRyZXNzIik7CiAgICAgZW5k
cHRyID0gbGFzdF9jb21tZW50X3Bvc2l0aW9uOwogICAgIGdvdG8gUEFSU0VfU1VDQ0VFREVEOyAg
ICAgICAgICAgICAgLyogQmFyZSBsb2NhbCBwYXJ0ICovCiAgICAgfQpAQCAtNzQwLDcgKzc1MSw3
IEBACiAgICAgfQogCiAgIGVuZHB0ciA9IHM7Ci0gIGlmICgqZXJyb3JwdHIgIT0gTlVMTCkgZ290
byBQQVJTRV9GQUlMRUQ7CisgIGlmICgqZXJyb3JwdHIpIGdvdG8gUEFSU0VfRkFJTEVEOwogICB3
aGlsZSAoYnJhY2tldF9jb3VudC0tID4gMCkgaWYgKCpzKysgIT0gJz4nKQogICAgIHsKICAgICAq
ZXJyb3JwdHIgPSBzWy0xXSA9PSAwCkBAIC03NTksMTQgKzc3MCwxNCBAQAogbm90IGVuY2xvc2Vk
IGluIDw+IGFzIHdlbGwsIHdoaWNoIGlzIGluZGljYXRlZCBieSBhbiBlbXB0eSBmaXJzdCBsb2Nh
bAogcGFydCBwcmVjZWRpbmcgJ0AnLiBUaGUgc291cmNlIHJvdXRpbmcgaXMsIGhvd2V2ZXIsIGln
bm9yZWQuICovCiAKLWVsc2UgaWYgKCp0ID09IDApCitlbHNlIGlmICghKnQpCiAgIHsKICAgdXNj
aGFyICpkb21haW5wdHIgPSB5aWVsZDsKICAgcyA9IHJlYWRfcm91dGUocywgdCwgZXJyb3JwdHIp
OwotICBpZiAoKmVycm9ycHRyICE9IE5VTEwpIGdvdG8gUEFSU0VfRkFJTEVEOworICBpZiAoKmVy
cm9ycHRyKSBnb3RvIFBBUlNFX0ZBSUxFRDsKICAgKnQgPSAwOyAgICAgICAgIC8qIEVuc3VyZSBy
b3V0ZSBpcyBpZ25vcmVkIC0gcHJvYmFibHkgb3ZlcmtpbGwgKi8KICAgcyA9IHJlYWRfYWRkcl9z
cGVjKHMsIHQsIDAsIGVycm9ycHRyLCAmZG9tYWlucHRyKTsKLSAgaWYgKCplcnJvcnB0ciAhPSBO
VUxMKSBnb3RvIFBBUlNFX0ZBSUxFRDsKKyAgaWYgKCplcnJvcnB0cikgZ290byBQQVJTRV9GQUlM
RUQ7CiAgICpkb21haW4gPSBkb21haW5wdHIgLSB5aWVsZDsKICAgZW5kcHRyID0gbGFzdF9jb21t
ZW50X3Bvc2l0aW9uOwogICBpZiAoKmRvbWFpbiA9PSAwKSBGQUlMRUQoVVMiZG9tYWluIG1pc3Np
bmcgaW4gc291cmNlLXJvdXRlZCBhZGRyZXNzIik7CkBAIC03NzksOCArNzkwLDggQEAKICAgdCAr
PSBVc3RybGVuKChjb25zdCB1c2NoYXIgKil0KTsKICAgKnQrKyA9ICpzKys7CiAgICpkb21haW4g
PSB0IC0geWllbGQ7Ci0gIHMgPSByZWFkX2RvbWFpbihzLCB0LCBlcnJvcnB0cik7Ci0gIGlmICgq
dCA9PSAwKSBnb3RvIFBBUlNFX0ZBSUxFRDsKKyAgcyA9IHJlYWRfZG9tYWluKHMsIHQsIFRSVUUs
IGVycm9ycHRyKTsKKyAgaWYgKCEqdCkgZ290byBQQVJTRV9GQUlMRUQ7CiAgIGVuZHB0ciA9IGxh
c3RfY29tbWVudF9wb3NpdGlvbjsKICAgfQogCkBAIC03ODksNyArODAwLDcgQEAKIG1vdmUgaXQg
YmFjayBwYXN0IHdoaXRlIHNwYWNlIGlmIG5lY2Vzc2FyeS4gKi8KIAogUEFSU0VfU1VDQ0VFREVE
OgotaWYgKCpzICE9IDApCitpZiAoKnMpCiAgIHsKICAgaWYgKGYucGFyc2VfZm91bmRfZ3JvdXAg
JiYgKnMgPT0gJzsnKQogICAgIHsKQEAgLTg2Myw3ICs4NzQsOCBAQAogKi8KIAogY29uc3QgdXNj
aGFyICoKLXBhcnNlX3F1b3RlXzIwNDcoY29uc3QgdXNjaGFyICpzdHJpbmcsIGludCBsZW4sIHVz
Y2hhciAqY2hhcnNldCwgQk9PTCBmb2xkKQorcGFyc2VfcXVvdGVfMjA0Nyhjb25zdCB1c2NoYXIg
KnN0cmluZywgaW50IGxlbiwgY29uc3QgdXNjaGFyICpjaGFyc2V0LAorICBCT09MIGZvbGQpCiB7
CiBjb25zdCB1c2NoYXIgKiBzID0gc3RyaW5nOwogaW50IGhsZW4sIGw7CkBAIC05MDQsOCArOTE2
LDEzIEBACiAgICAgeyBnID0gc3RyaW5nX2NhdG4oZywgcywgMSk7IGZpcnN0X2J5dGUgPSBGQUxT
RTsgfQogICB9CiAKLWcgPSBzdHJpbmdfY2F0bihnLCBVUyI/PSIsIDIpOwotcmV0dXJuIGNvZGVk
ID8gc3RyaW5nX2Zyb21fZ3N0cmluZyhnKSA6IHN0cmluZzsKK2lmIChjb2RlZCkKKyAgc3RyaW5n
ID0gc3RyaW5nX2Zyb21fZ3N0cmluZyhnID0gc3RyaW5nX2NhdG4oZywgVVMiPz0iLCAyKSk7Citl
bHNlCisgIGctPnB0ciA9IC0xOworCitnc3RyaW5nX3JlbGVhc2VfdW51c2VkKGcpOworcmV0dXJu
IHN0cmluZzsKIH0KIAogCkBAIC05ODAsMTEgKzk5Nyw5IEBACiAvKiBObyBub24tcHJpbnRlcnM7
IHVzZSB0aGUgUkZDIDgyMiBxdW90aW5nIHJ1bGVzICovCiAKIGlmIChsZW4gPD0gMCB8fCBsZW4g
Pj0gSU5UX01BWC80KQotICB7Ci0gIHJldHVybiBzdHJpbmdfY29weV90YWludChDVVMiIiwgaXNf
dGFpbnRlZChwaHJhc2UpKTsKLSAgfQorICByZXR1cm4gc3RyaW5nX2NvcHlfdGFpbnQoQ1VTIiIs
IHBocmFzZSk7CiAKLWJ1ZmZlciA9IHN0b3JlX2dldCgobGVuKzEpKjQsIGlzX3RhaW50ZWQocGhy
YXNlKSk7CitidWZmZXIgPSBzdG9yZV9nZXQoKGxlbisxKSo0LCBwaHJhc2UpOwogCiBzID0gcGhy
YXNlOwogZW5kID0gcyArIGxlbjsKQEAgLTEyMjgsOCArMTI0Myw4IEBACiAqLwogCiBpbnQKLXBh
cnNlX2ZvcndhcmRfbGlzdCh1c2NoYXIgKnMsIGludCBvcHRpb25zLCBhZGRyZXNzX2l0ZW0gKiph
bmNob3IsCi0gIHVzY2hhciAqKmVycm9yLCBjb25zdCB1c2NoYXIgKmluY29taW5nX2RvbWFpbiwg
dXNjaGFyICpkaXJlY3RvcnksCitwYXJzZV9mb3J3YXJkX2xpc3QoY29uc3QgdXNjaGFyICpzLCBp
bnQgb3B0aW9ucywgYWRkcmVzc19pdGVtICoqYW5jaG9yLAorICB1c2NoYXIgKiplcnJvciwgY29u
c3QgdXNjaGFyICppbmNvbWluZ19kb21haW4sIGNvbnN0IHVzY2hhciAqZGlyZWN0b3J5LAogICBl
cnJvcl9ibG9jayAqKnN5bnRheF9lcnJvcnMpCiB7CiBpbnQgY291bnQgPSAwOwpAQCAtMTIzOCwx
OCArMTI1MywxNSBAQAogCiBmb3IgKDs7KQogICB7Ci0gIGludCBsZW47Ci0gIGludCBzcGVjaWFs
ID0gMDsKLSAgaW50IHNwZWNvcHQgPSAwOwotICBpbnQgc3BlY2JpdCA9IDA7Ci0gIHVzY2hhciAq
c3MsICpuZXh0czsKLSAgYWRkcmVzc19pdGVtICphZGRyOworICBpbnQgbGVuLCBzcGVjaWFsID0g
MCwgc3BlY29wdCA9IDAsIHNwZWNiaXQgPSAwOworICBjb25zdCB1c2NoYXIgKiBzcywgKiBuZXh0
czsKKyAgYWRkcmVzc19pdGVtICogYWRkcjsKICAgQk9PTCBpbnF1b3RlID0gRkFMU0U7CiAKICAg
Zm9yICg7OykKICAgICB7CiAgICAgd2hpbGUgKGlzc3BhY2UoKnMpIHx8ICpzID09ICcsJykgcysr
OwotICAgIGlmICgqcyA9PSAnIycpIHsgd2hpbGUgKCpzICE9IDAgJiYgKnMgIT0gJ1xuJykgcysr
OyB9IGVsc2UgYnJlYWs7CisgICAgaWYgKCpzID09ICcjJykgeyB3aGlsZSAoKnMgJiYgKnMgIT0g
J1xuJykgcysrOyB9IGVsc2UgYnJlYWs7CiAgICAgfQogCiAgIC8qIFdoZW4gd2UgcmVhY2ggdGhl
IGVuZCBvZiB0aGUgbGlzdCwgd2UgcmV0dXJuIEZGX0RFTElWRVJFRCBpZiBhbnkgY2hpbGQKQEAg
LTEyNzAsMTggKzEyODIsMTcgQEAKICAgICBzeW50YXggZXJyb3IgaGFzIGJlZW4gc2tpcHBlZC4g
SSBub3cgdGhpbmsgaXQgaXMgdGhlIHdyb25nIGFwcHJvYWNoLCBidXQKICAgICBoYXZlIGxlZnQg
dGhpcyBoZXJlIGp1c3QgaW4gY2FzZSwgYW5kIGZvciB0aGUgcmVjb3JkLiAqLwogCi0gICAgI2lm
ZGVmIE5FVkVSCisjaWZkZWYgTkVWRVIKICAgICBpZiAoY291bnQgPiAwKSByZXR1cm4gRkZfREVM
SVZFUkVEOyAgIC8qIFNvbWV0aGluZyB3YXMgZ2VuZXJhdGVkICovCiAKLSAgICBpZiAoc3ludGF4
X2Vycm9ycyA9PSBOVUxMIHx8ICAgICAgICAgIC8qIE5vdCBza2lwcGluZyBzeW50YXggZXJyb3Jz
LCBvciAqLwotICAgICAgICpzeW50YXhfZXJyb3JzID09IE5VTEwpICAgICAgICAgICAgLyogICB3
ZSBkaWRuJ3QgYWN0dWFsbHkgc2tpcCBhbnkgKi8KKyAgICBpZiAoIXN5bnRheF9lcnJvcnMgfHwg
ICAgICAgICAgLyogTm90IHNraXBwaW5nIHN5bnRheCBlcnJvcnMsIG9yICovCisgICAgICAgISpz
eW50YXhfZXJyb3JzKSAgICAgICAgICAgIC8qICAgd2UgZGlkbid0IGFjdHVhbGx5IHNraXAgYW55
ICovCiAgICAgICByZXR1cm4gRkZfTk9UREVMSVZFUkVEOwogCiAgICAgKmVycm9yID0gc3RyaW5n
X3NwcmludGYoIm5vIGFkZHJlc3NlcyBnZW5lcmF0ZWQ6IHN5bnRheCBlcnJvciBpbiAlczogJXMi
LAogICAgICAgICgqc3ludGF4X2Vycm9ycyktPnRleHQyLCAoKnN5bnRheF9lcnJvcnMpLT50ZXh0
MSk7CiAgICAgcmV0dXJuIEZGX0VSUk9SOwotICAgICNlbmRpZgotCisjZW5kaWYKICAgICB9CiAK
ICAgLyogRmluZCB0aGUgZW5kIG9mIHRoZSBuZXh0IGFkZHJlc3MuIFF1b3RlZCBzdHJpbmdzIGlu
IGFkZHJlc3NlcyBtYXkgY29udGFpbgpAQCAtMTI5OCw3ICsxMzA5LDcgQEAKIAogICAvKiBSZW1v
dmUgYW55IHRyYWlsaW5nIHNwYWNlczsgd2Uga25vdyB0aGVyZSdzIGF0IGxlYXN0IG9uZSBub24t
c3BhY2UuICovCiAKLSAgd2hpbGUgKGlzc3BhY2UoKHNzWy0xXSkpKSBzcy0tOworICB3aGlsZSAo
aXNzcGFjZShzc1stMV0pKSBzcy0tOwogCiAgIC8qIFdlIG5vdyBoYXZlIHMtPnN0YXJ0IGFuZCBz
cy0+ZW5kIG9mIHRoZSBuZXh0IGFkZHJlc3MuIFJlbW92ZSBxdW90ZXMKICAgaWYgdGhleSBjb21w
bGV0ZWx5IGVuY2xvc2UsIHJlbWVtYmVyaW5nIHRoZSBhZGRyZXNzIHN0YXJ0ZWQgd2l0aCBhIHF1
b3RlCkBAIC0xMzExLDIwICsxMzIyLDE0IEBACiAgICAgc3MtLTsKICAgICBpbnF1b3RlID0gVFJV
RTsKICAgICB3aGlsZSAocyA8IHNzICYmIGlzc3BhY2UoKnMpKSBzKys7Ci0gICAgd2hpbGUgKHNz
ID4gcyAmJiBpc3NwYWNlKChzc1stMV0pKSkgc3MtLTsKKyAgICB3aGlsZSAoc3MgPiBzICYmIGlz
c3BhY2Uoc3NbLTFdKSkgc3MtLTsKICAgICB9CiAKICAgLyogU2V0IHVwIHRoZSBsZW5ndGggb2Yg
dGhlIGFkZHJlc3MuICovCiAKICAgbGVuID0gc3MgLSBzOwogCi0gIERFQlVHKERfcm91dGUpCi0g
ICAgewotICAgIGludCBzYXZlID0gc1tsZW5dOwotICAgIHNbbGVuXSA9IDA7Ci0gICAgZGVidWdf
cHJpbnRmKCJleHRyYWN0IGl0ZW06ICVzXG4iLCBzKTsKLSAgICBzW2xlbl0gPSBzYXZlOwotICAg
IH0KKyAgREVCVUcoRF9yb3V0ZSkgZGVidWdfcHJpbnRmKCJleHRyYWN0IGl0ZW06ICUuKnNcbiIs
IGxlbiwgcyk7CiAKICAgLyogSGFuZGxlIHNwZWNpYWwgYWRkcmVzc2VzIGlmIHBlcm1pdHRlZC4g
SWYgdGhlIGFkZHJlc3MgaXMgOnVua25vd246CiAgIGlnbm9yZSBpdCAtIHRoaXMgaXMgZm9yIGJh
Y2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgYWxpYXMgZmlsZXMuIFlvdQpAQCAtMTM0NSwx
OCArMTM1MCwxOCBAQAogICBlbHNlIGlmIChVc3RybmNtcChzLCAiOmZhaWw6IiwgNikgPT0gMCkK
ICAgICB7IHNwZWNpYWwgPSBGRl9GQUlMOyBzcGVjb3B0ID0gUkRPX0ZBSUw7IH0gIC8qIHNwZWNi
aXQgaXMgMCAqLwogCi0gIGlmIChzcGVjaWFsICE9IDApCisgIGlmIChzcGVjaWFsKQogICAgIHsK
LSAgICB1c2NoYXIgKnNzID0gVXN0cmNocihzKzEsICc6JykgKyAxOworICAgIHVzY2hhciAqIHNz
ID0gVXN0cmNocihzKzEsICc6JykgKyAxOyAvKiBsaW5lIGFmdGVyIHRoZSBzcGVjaWFsLi4uICov
CiAgICAgaWYgKChvcHRpb25zICYgc3BlY29wdCkgPT0gc3BlY2JpdCkKICAgICAgIHsKICAgICAg
ICplcnJvciA9IHN0cmluZ19zcHJpbnRmKCJcIiUuKnNcIiBpcyBub3QgcGVybWl0dGVkIiwgbGVu
LCBzKTsKICAgICAgIHJldHVybiBGRl9FUlJPUjsKICAgICAgIH0KLSAgICB3aGlsZSAoKnNzICE9
IDAgJiYgaXNzcGFjZSgqc3MpKSBzcysrOwotICAgIHdoaWxlIChzW2xlbl0gIT0gMCAmJiBzW2xl
bl0gIT0gJ1xuJykgbGVuKys7Ci0gICAgc1tsZW5dID0gMDsKLSAgICAqZXJyb3IgPSBzdHJpbmdf
Y29weShzcyk7CisgICAgd2hpbGUgKCpzcyAmJiBpc3NwYWNlKCpzcykpIHNzKys7CS8qIHNraXAg
bGVhZGluZyB3aGl0ZXNwYWNlICovCisgICAgaWYgKChsZW4gPSBVc3RybGVuKHNzKSkgPiAwKQkv
KiBpZ25vcmUgdHJhaWxpbmcgbmV3bGluZXMgKi8KKyAgICAgIGZvciAoY29uc3QgdXNjaGFyICog
dCA9IHNzICsgbGVuIC0gMTsgdCA+PSBzcyAmJiAqdCA9PSAnXG4nOyB0LS0pIGxlbi0tOworICAg
ICplcnJvciA9IHN0cmluZ19jb3B5bihzcywgbGVuKTsJLyogYmVjb21lcyB0aGUgZXJyb3IgKi8K
ICAgICByZXR1cm4gc3BlY2lhbDsKICAgICB9CiAKQEAgLTEzNjcsMTQgKzEzNzIsMTQgQEAKIAog
ICBpZiAoVXN0cm5jbXAocywgIjppbmNsdWRlOiIsIDkpID09IDApCiAgICAgewotICAgIHVzY2hh
ciAqZmlsZWJ1ZjsKKyAgICB1c2NoYXIgKiBmaWxlYnVmOwogICAgIHVzY2hhciBmaWxlbmFtZVsy
NTZdOwotICAgIHVzY2hhciAqdCA9IHMrOTsKKyAgICBjb25zdCB1c2NoYXIgKiB0ID0gcys5Owog
ICAgIGludCBmbGVuID0gbGVuIC0gOTsKICAgICBpbnQgZnJjOwogICAgIHN0cnVjdCBzdGF0IHN0
YXRidWY7Ci0gICAgYWRkcmVzc19pdGVtICpsYXN0OwotICAgIEZJTEUgKmY7CisgICAgYWRkcmVz
c19pdGVtICogbGFzdDsKKyAgICBGSUxFICogZjsKIAogICAgIHdoaWxlIChmbGVuID4gMCAmJiBp
c3NwYWNlKCp0KSkgeyB0Kys7IGZsZW4tLTsgfQogCkBAIC0xMzg0LDcgKzEzODksNyBAQAogICAg
ICAgcmV0dXJuIEZGX0VSUk9SOwogICAgICAgfQogCi0gICAgaWYgKGZsZW4gPiAyNTUpCisgICAg
aWYgKGZsZW4gPiBzaXplb2YoZmlsZW5hbWUpLTEpCiAgICAgICB7CiAgICAgICAqZXJyb3IgPSBz
dHJpbmdfc3ByaW50ZigiaW5jbHVkZWQgZmlsZSBuYW1lIFwiJXNcIiBpcyB0b28gbG9uZyIsIHQp
OwogICAgICAgcmV0dXJuIEZGX0VSUk9SOwpAQCAtMTQyMiw4ICsxNDI3LDEwIEBACiAgICAgaWYg
KGRpcmVjdG9yeSkKICAgICAgIHsKICAgICAgIGludCBsZW4gPSBVc3RybGVuKGRpcmVjdG9yeSk7
Ci0gICAgICB1c2NoYXIgKnAgPSBmaWxlbmFtZSArIGxlbjsKKyAgICAgIHVzY2hhciAqIHA7CiAK
KyAgICAgIHdoaWxlIChsZW4gPiAwICYmIGRpcmVjdG9yeVtsZW4tMV0gPT0gJy8nKSBsZW4tLTsJ
CS8qIGlnbm9yZSB0cmFpbGluZyAnLycgKi8KKyAgICAgIHAgPSBmaWxlbmFtZSArIGxlbjsKICAg
ICAgIGlmIChVc3RybmNtcChmaWxlbmFtZSwgZGlyZWN0b3J5LCBsZW4pICE9IDAgfHwgKnAgIT0g
Jy8nKQogICAgICAgICB7CiAgICAgICAgICplcnJvciA9IHN0cmluZ19zcHJpbnRmKCJpbmNsdWRl
ZCBmaWxlICVzIGlzIG5vdCBpbiBkaXJlY3RvcnkgJXMiLApAQCAtMTQzOCw3ICsxNDQ1LDcgQEAK
ICAgICAgIHdpdGggYSBmbGFnIHRoYXQgZmFpbHMgc3ltbGlua3MuICovCiAKICAgICAgIHsKLSAg
ICAgIGludCBmZCA9IGV4aW1fb3BlbjIoQ1MgZGlyZWN0b3J5LCBPX1JET05MWSk7CisgICAgICBp
bnQgZmQgPSBleGltX29wZW4yKENDUyBkaXJlY3RvcnksIE9fUkRPTkxZKTsKICAgICAgIGlmIChm
ZCA8IDApCiAJewogCSplcnJvciA9IHN0cmluZ19zcHJpbnRmKCJmYWlsZWQgdG8gb3BlbiBkaXJl
Y3RvcnkgJXMiLCBkaXJlY3RvcnkpOwpAQCAtMTQ0OCw5ICsxNDU1LDEwIEBACiAJewogCXVzY2hh
ciB0ZW1wOwogCWludCBmZDI7Ci0JdXNjaGFyICogcSA9IHA7CisJdXNjaGFyICogcSA9IHAgKyAx
OwkJLyogc2tpcCBkaXZpZGluZyAnLycgKi8KIAotCXdoaWxlICgqKytwICYmICpwICE9ICcvJykg
OworCXdoaWxlICgqcSA9PSAnLycpIHErKzsJCS8qIHNraXAgZXh0cmEgJy8nICovCisJd2hpbGUg
KCorK3AgJiYgKnAgIT0gJy8nKSA7CS8qIGVuZCBvZiBjb21wb25lbnQgKi8KIAl0ZW1wID0gKnA7
CiAJKnAgPSAnXDAnOwogCkBAIC0xNTA4LDcgKzE1MTYsNyBAQAogCiAgICAgaWYgKCFmKQogICAg
ICAgewotICAgICAgKmVycm9yID0gc3RyaW5nX29wZW5fZmFpbGVkKGVycm5vLCAiaW5jbHVkZWQg
ZmlsZSAlcyIsIGZpbGVuYW1lKTsKKyAgICAgICplcnJvciA9IHN0cmluZ19vcGVuX2ZhaWxlZCgi
aW5jbHVkZWQgZmlsZSAlcyIsIGZpbGVuYW1lKTsKICAgICAgIHJldHVybiBGRl9JTkNMVURFRkFJ
TDsKICAgICAgIH0KIApAQCAtMTUzOCw3ICsxNTQ2LDcgQEAKICAgICAgIHJldHVybiBGRl9FUlJP
UjsKICAgICAgIH0KIAotICAgIGZpbGVidWYgPSBzdG9yZV9nZXQoc3RhdGJ1Zi5zdF9zaXplICsg
MSwgaXNfdGFpbnRlZChmaWxlbmFtZSkpOworICAgIGZpbGVidWYgPSBzdG9yZV9nZXQoc3RhdGJ1
Zi5zdF9zaXplICsgMSwgZmlsZW5hbWUpOwogICAgIGlmIChmcmVhZChmaWxlYnVmLCAxLCBzdGF0
YnVmLnN0X3NpemUsIGYpICE9IHN0YXRidWYuc3Rfc2l6ZSkKICAgICAgIHsKICAgICAgICplcnJv
ciA9IHN0cmluZ19zcHJpbnRmKCJlcnJvciB3aGlsZSByZWFkaW5nIGluY2x1ZGVkIGZpbGUgJXM6
ICVzIiwKQEAgLTE1ODYsMTggKzE1OTQsMTcgQEAKICAgICB7CiAgICAgaW50IHN0YXJ0LCBlbmQs
IGRvbWFpbjsKICAgICBjb25zdCB1c2NoYXIgKnJlY2lwaWVudCA9IE5VTEw7Ci0gICAgaW50IHNh
dmUgPSBzW2xlbl07Ci0gICAgc1tsZW5dID0gMDsKKyAgICB1c2NoYXIgKiBzX2x0ZCA9IHN0cmlu
Z19jb3B5bihzLCBsZW4pOwogCiAgICAgLyogSWYgaXQgc3RhcnRzIHdpdGggXCBhbmQgdGhlIHJl
c3Qgb2YgaXQgcGFyc2VzIGFzIGEgdmFsaWQgbWFpbCBhZGRyZXNzCiAgICAgd2l0aG91dCBhIGRv
bWFpbiwgY2Fycnkgb24gd2l0aCB0aGF0IGFkZHJlc3MsIGJ1dCBxdWFsaWZ5IGl0IHdpdGggdGhl
CiAgICAgaW5jb21pbmcgZG9tYWluLiBPdGhlcndpc2UgYXJyYW5nZSBmb3IgdGhlIGFkZHJlc3Mg
dG8gZmFsbCB0aHJvdWdoLAogICAgIGNhdXNpbmcgYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgcmUt
cGFyc2UuICovCiAKLSAgICBpZiAoKnMgPT0gJ1xcJykKKyAgICBpZiAoKnNfbHRkID09ICdcXCcp
CiAgICAgICB7CiAgICAgICByZWNpcGllbnQgPQotICAgICAgICBwYXJzZV9leHRyYWN0X2FkZHJl
c3MocysxLCBlcnJvciwgJnN0YXJ0LCAmZW5kLCAmZG9tYWluLCBGQUxTRSk7CisgICAgICAgIHBh
cnNlX2V4dHJhY3RfYWRkcmVzcyhzX2x0ZCsxLCBlcnJvciwgJnN0YXJ0LCAmZW5kLCAmZG9tYWlu
LCBGQUxTRSk7CiAgICAgICBpZiAocmVjaXBpZW50KQogICAgICAgICByZWNpcGllbnQgPSBkb21h
aW4gIT0gMCA/IE5VTEwgOgogICAgICAgICAgIHN0cmluZ19zcHJpbnRmKCIlc0AlcyIsIHJlY2lw
aWVudCwgaW5jb21pbmdfZG9tYWluKTsKQEAgLTE2MDYsMjIgKzE2MTMsMjIgQEAKICAgICAvKiBU
cnkgcGFyc2luZyB0aGUgaXRlbSBhcyBhbiBhZGRyZXNzLiAqLwogCiAgICAgaWYgKCFyZWNpcGll
bnQpIHJlY2lwaWVudCA9Ci0gICAgICBwYXJzZV9leHRyYWN0X2FkZHJlc3MocywgZXJyb3IsICZz
dGFydCwgJmVuZCwgJmRvbWFpbiwgRkFMU0UpOworICAgICAgcGFyc2VfZXh0cmFjdF9hZGRyZXNz
KHNfbHRkLCBlcnJvciwgJnN0YXJ0LCAmZW5kLCAmZG9tYWluLCBGQUxTRSk7CiAKICAgICAvKiBJ
ZiBpdGVtIHN0YXJ0cyB3aXRoIC8gb3IgfCBhbmQgaXMgbm90IGEgdmFsaWQgYWRkcmVzcywgb3Ig
dGhlcmUKICAgICBpcyBubyBkb21haW4sIHRyZWF0IGl0IGFzIGEgZmlsZSBvciBwaXBlLiBJZiBp
dCB3YXMgYSBxdW90ZWQgaXRlbSwKICAgICByZW1vdmUgdGhlIHF1b3Rpbmcgb2NjdXJyZW5jZXMg
b2YgXCB3aXRoaW4gaXQuICovCiAKLSAgICBpZiAoKCpzID09ICd8JyB8fCAqcyA9PSAnLycpICYm
IChyZWNpcGllbnQgPT0gTlVMTCB8fCBkb21haW4gPT0gMCkpCisgICAgaWYgKCgqc19sdGQgPT0g
J3wnIHx8ICpzX2x0ZCA9PSAnLycpICYmICghcmVjaXBpZW50IHx8IGRvbWFpbiA9PSAwKSkKICAg
ICAgIHsKLSAgICAgIHVzY2hhciAqdCA9IHN0b3JlX2dldChVc3RybGVuKHMpICsgMSwgaXNfdGFp
bnRlZChzKSk7Ci0gICAgICB1c2NoYXIgKnAgPSB0OwotICAgICAgdXNjaGFyICpxID0gczsKLSAg
ICAgIHdoaWxlICgqcSAhPSAwKQorICAgICAgdXNjaGFyICogdCA9IHN0b3JlX2dldChVc3RybGVu
KHNfbHRkKSArIDEsIHNfbHRkKTsKKyAgICAgIHVzY2hhciAqIHAgPSB0LCAqIHEgPSBzX2x0ZDsK
KworICAgICAgd2hpbGUgKCpxKQogICAgICAgICB7CiAgICAgICAgIGlmIChpbnF1b3RlKQogICAg
ICAgICAgIHsKLSAgICAgICAgICAqcCsrID0gKCpxID09ICdcXCcpPyAqKCsrcSkgOiAqcTsKKyAg
ICAgICAgICAqcCsrID0gKnEgPT0gJ1xcJyA/ICorK3EgOiAqcTsKICAgICAgICAgICBxKys7CiAg
ICAgICAgICAgfQogICAgICAgICBlbHNlICpwKysgPSAqcSsrOwpAQCAtMTYyOSw3ICsxNjM2LDcg
QEAKICAgICAgICpwID0gMDsKICAgICAgIGFkZHIgPSBkZWxpdmVyX21ha2VfYWRkcih0LCBUUlVF
KTsKICAgICAgIHNldGZsYWcoYWRkciwgYWZfcGZyKTsgICAgICAgICAgICAgICAgICAgLyogaW5k
aWNhdGVzIHBpcGUvZmlsZS9yZXBseSAqLwotICAgICAgaWYgKCpzICE9ICd8Jykgc2V0ZmxhZyhh
ZGRyLCBhZl9maWxlKTsgICAvKiBpbmRpY2F0ZXMgZmlsZSAqLworICAgICAgaWYgKCpzX2x0ZCAh
PSAnfCcpIHNldGZsYWcoYWRkciwgYWZfZmlsZSk7ICAgLyogaW5kaWNhdGVzIGZpbGUgKi8KICAg
ICAgIH0KIAogICAgIC8qIEl0ZW0gbXVzdCBiZSBhbiBhZGRyZXNzLiBDb21wbGFpbiBpZiBub3Qs
IGVsc2UgcXVhbGlmeSwgcmV3cml0ZSBhbmQgc2V0CkBAIC0xNjQxLDM2ICsxNjQ4LDM1IEBACiAK
ICAgICBlbHNlCiAgICAgICB7Ci0gICAgICBpZiAocmVjaXBpZW50ID09IE5VTEwpCisgICAgICBp
ZiAoIXJlY2lwaWVudCkKICAgICAgICAgewogICAgICAgICBpZiAoVXN0cmNtcCgqZXJyb3IsICJl
bXB0eSBhZGRyZXNzIikgPT0gMCkKICAgICAgICAgICB7CiAgICAgICAgICAgKmVycm9yID0gTlVM
TDsKLSAgICAgICAgICBzW2xlbl0gPSBzYXZlOwogICAgICAgICAgIHMgPSBuZXh0czsKICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICB9CiAKLSAgICAgICAgaWYgKHN5bnRheF9lcnJvcnMg
IT0gTlVMTCkKKyAgICAgICAgaWYgKHN5bnRheF9lcnJvcnMpCiAgICAgICAgICAgewotICAgICAg
ICAgIGVycm9yX2Jsb2NrICplID0gc3RvcmVfZ2V0KHNpemVvZihlcnJvcl9ibG9jayksIEZBTFNF
KTsKLSAgICAgICAgICBlcnJvcl9ibG9jayAqbGFzdCA9ICpzeW50YXhfZXJyb3JzOwotICAgICAg
ICAgIGlmIChsYXN0ID09IE5VTEwpICpzeW50YXhfZXJyb3JzID0gZTsgZWxzZQorICAgICAgICAg
IGVycm9yX2Jsb2NrICogZSA9IHN0b3JlX2dldChzaXplb2YoZXJyb3JfYmxvY2spLCBHRVRfVU5U
QUlOVEVEKTsKKyAgICAgICAgICBlcnJvcl9ibG9jayAqIGxhc3QgPSAqc3ludGF4X2Vycm9yczsK
KyAgICAgICAgICBpZiAobGFzdCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlIChs
YXN0LT5uZXh0ICE9IE5VTEwpIGxhc3QgPSBsYXN0LT5uZXh0OworICAgICAgICAgICAgd2hpbGUg
KGxhc3QtPm5leHQpIGxhc3QgPSBsYXN0LT5uZXh0OwogICAgICAgICAgICAgbGFzdC0+bmV4dCA9
IGU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorCSAgICAqc3ludGF4X2Vycm9ycyA9
IGU7CiAgICAgICAgICAgZS0+bmV4dCA9IE5VTEw7CiAgICAgICAgICAgZS0+dGV4dDEgPSAqZXJy
b3I7Ci0gICAgICAgICAgZS0+dGV4dDIgPSBzdHJpbmdfY29weShzKTsKLSAgICAgICAgICBzW2xl
bl0gPSBzYXZlOworICAgICAgICAgIGUtPnRleHQyID0gc19sdGQ7CiAgICAgICAgICAgcyA9IG5l
eHRzOwogICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAg
ICAgICAgIHsKLSAgICAgICAgICAqZXJyb3IgPSBzdHJpbmdfc3ByaW50ZigiJXMgaW4gXCIlc1wi
IiwgKmVycm9yLCBzKTsKLSAgICAgICAgICBzW2xlbl0gPSBzYXZlOyAgIC8qIF9hZnRlcl8gdXNp
bmcgaXQgZm9yICplcnJvciAqLworICAgICAgICAgICplcnJvciA9IHN0cmluZ19zcHJpbnRmKCIl
cyBpbiBcIiVzXCIiLCAqZXJyb3IsIHNfbHRkKTsKICAgICAgICAgICByZXR1cm4gRkZfRVJST1I7
CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNjc4LDE3ICsxNjg0LDE1IEBACiAgICAgICAv
KiBBZGRyZXNzIHdhcyBzdWNjZXNzZnVsbHkgcGFyc2VkLiBSZXdyaXRlLCBhbmQgdGhlbiBtYWtl
IGFuIGFkZHJlc3MKICAgICAgIGJsb2NrLiAqLwogCi0gICAgICByZWNpcGllbnQgPSAoKG9wdGlv
bnMgJiBSRE9fUkVXUklURSkgIT0gMCk/Ci0gICAgICAgIHJld3JpdGVfYWRkcmVzcyhyZWNpcGll
bnQsIFRSVUUsIEZBTFNFLCBnbG9iYWxfcmV3cml0ZV9ydWxlcywKLSAgICAgICAgICByZXdyaXRl
X2V4aXN0ZmxhZ3MpIDoKLSAgICAgICAgcmV3cml0ZV9hZGRyZXNzX3F1YWxpZnkocmVjaXBpZW50
LCBUUlVFKTsJLypYWFggbG9zZXMgdHJhY2sgb2YgY29uc3QgKi8KKyAgICAgIHJlY2lwaWVudCA9
IG9wdGlvbnMgJiBSRE9fUkVXUklURQorCT8gcmV3cml0ZV9hZGRyZXNzKHJlY2lwaWVudCwgVFJV
RSwgRkFMU0UsIGdsb2JhbF9yZXdyaXRlX3J1bGVzLAorCQkJICByZXdyaXRlX2V4aXN0ZmxhZ3Mp
CisJOiByZXdyaXRlX2FkZHJlc3NfcXVhbGlmeShyZWNpcGllbnQsIFRSVUUpOwkvKlhYWCBsb3Nl
cyB0cmFjayBvZiBjb25zdCAqLwogICAgICAgYWRkciA9IGRlbGl2ZXJfbWFrZV9hZGRyKFVTIHJl
Y2lwaWVudCwgVFJVRSk7ICAvKiBUUlVFID0+IGNvcHkgcmVjaXBpZW50LCBzbyBkZWNvbnN0IG9r
ICovCiAgICAgICB9CiAKLSAgICAvKiBSZXN0b3JlIHRoZSBmaW5hbCBjaGFyYWN0ZXIgaW4gdGhl
IG9yaWdpbmFsIGRhdGEsIGFuZCBhZGQgdG8gdGhlCi0gICAgb3V0cHV0IGNoYWluLiAqLworICAg
IC8qIEFkZCB0aGUgb3JpZ2luYWwgZGF0YSB0byB0aGUgb3V0cHV0IGNoYWluLiAqLwogCi0gICAg
c1tsZW5dID0gc2F2ZTsKICAgICBhZGRyLT5uZXh0ID0gKmFuY2hvcjsKICAgICAqYW5jaG9yID0g
YWRkcjsKICAgICBjb3VudCsrOwpAQCAtMTczNSw3ICsxNzM5LDcgQEAKIGxpbmUuIFRoZXJlZm9y
ZSwgdGFrZSBjYXJlIHRvIHJlbGVhc2UgdW53YW50ZWQgc3RvcmUgYWZ0ZXJ3YXJkcy4gKi8KIAog
cmVzZXRfcG9pbnQgPSBzdG9yZV9tYXJrKCk7Ci1pZCA9ICp5aWVsZCA9IHN0b3JlX2dldChVc3Ry
bGVuKHN0cikgKyAxLCBpc190YWludGVkKHN0cikpOworaWQgPSAqeWllbGQgPSBzdG9yZV9nZXQo
VXN0cmxlbihzdHIpICsgMSwgc3RyKTsKICppZCsrID0gKnN0cisrOwogCiBzdHIgPSByZWFkX2Fk
ZHJfc3BlYyhzdHIsIGlkLCAnPicsIGVycm9yLCAmZG9tYWluKTsKQEAgLTIwODYsNiArMjA5MCw3
IEBACiBpbnQgc3RhcnQsIGVuZCwgZG9tYWluOwogdXNjaGFyIGJ1ZmZlclsxMDI0XTsKIAorc3Rv
cmVfaW5pdCgpOwogYmlnX2J1ZmZlciA9IHN0b3JlX21hbGxvYyhiaWdfYnVmZmVyX3NpemUpOwog
CiAvKiBzdHJpcF90cmFpbGluZ19kb3QgPSBUUlVFOyAqLwpkaWZmIC11ciBleGltLm9yaWcvc3Jj
L3Bka2ltL3Bka2ltLmMgZXhpbS9zcmMvcGRraW0vcGRraW0uYwotLS0gZXhpbS5vcmlnL3NyYy9w
ZGtpbS9wZGtpbS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGlt
L3NyYy9wZGtpbS9wZGtpbS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBA
IC0xLDYgKzEsNyBAQAogLyoKICAqICBQREtJTSAtIGEgUkZDNDg3MSAoREtJTSkgaW1wbGVtZW50
YXRpb24KICAqCisgKiAgQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxIC0g
MjAyMgogICogIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTYgIFRvbSBLaXN0bmVyIDx0b21AZHVu
Y2FudGhyYXgubmV0PgogICogIENvcHlyaWdodCAoQykgMjAxNiAtIDIwMjAgIEplcmVteSBIYXJy
aXMgPGpnaEBleGltLm9yZz4KICAqCkBAIC0yNDcsNyArMjQ4LDcgQEAKIHN0YXRpYyBwZGtpbV9z
dHJpbmdsaXN0ICoKIHBka2ltX3ByZXBlbmRfc3RyaW5nbGlzdChwZGtpbV9zdHJpbmdsaXN0ICog
YmFzZSwgY29uc3QgdXNjaGFyICogc3RyKQogewotcGRraW1fc3RyaW5nbGlzdCAqIG5ld19lbnRy
eSA9IHN0b3JlX2dldChzaXplb2YocGRraW1fc3RyaW5nbGlzdCksIEZBTFNFKTsKK3Bka2ltX3N0
cmluZ2xpc3QgKiBuZXdfZW50cnkgPSBzdG9yZV9nZXQoc2l6ZW9mKHBka2ltX3N0cmluZ2xpc3Qp
LCBHRVRfVU5UQUlOVEVEKTsKIAogbWVtc2V0KG5ld19lbnRyeSwgMCwgc2l6ZW9mKHBka2ltX3N0
cmluZ2xpc3QpKTsKIG5ld19lbnRyeS0+dmFsdWUgPSBzdHJpbmdfY29weShzdHIpOwpAQCAtMzM3
LDcgKzMzOCw3IEBACiB7CiBCT09MIHBhc3RfZmllbGRfbmFtZSA9IEZBTFNFOwogQk9PTCBzZWVu
X3dzcCA9IEZBTFNFOwotdXNjaGFyICogcmVsYXhlZCA9IHN0b3JlX2dldChsZW4rMywgVFJVRSk7
CS8qIHRhaW50ZWQgKi8KK3VzY2hhciAqIHJlbGF4ZWQgPSBzdG9yZV9nZXQobGVuKzMsIEdFVF9U
QUlOVEVEKTsKIHVzY2hhciAqIHEgPSByZWxheGVkOwogCiBmb3IgKGNvbnN0IHVzY2hhciAqIHAg
PSBoZWFkZXI7IHAgLSBoZWFkZXIgPCBsZW47IHArKykKQEAgLTQxNyw3ICs0MTgsNyBAQAogaW50
IG5jaGFyID0gMDsKIHVzY2hhciAqIHE7CiBjb25zdCB1c2NoYXIgKiBwID0gc3RyOwotdXNjaGFy
ICogbiA9IHN0b3JlX2dldChVc3RybGVuKHN0cikrMSwgVFJVRSk7Cit1c2NoYXIgKiBuID0gc3Rv
cmVfZ2V0KFVzdHJsZW4oc3RyKSsxLCBHRVRfVEFJTlRFRCk7CiAKICpuID0gJ1wwJzsKIHEgPSBu
OwpAQCAtNDc0LDcgKzQ3NSw3IEBACiBCT09MIGluX2JfdmFsID0gRkFMU0U7CiBpbnQgd2hlcmUg
PSBQREtJTV9IRFJfTElNQk87CiAKLXNpZyA9IHN0b3JlX2dldChzaXplb2YocGRraW1fc2lnbmF0
dXJlKSwgRkFMU0UpOworc2lnID0gc3RvcmVfZ2V0KHNpemVvZihwZGtpbV9zaWduYXR1cmUpLCBH
RVRfVU5UQUlOVEVEKTsKIG1lbXNldChzaWcsIDAsIHNpemVvZihwZGtpbV9zaWduYXR1cmUpKTsK
IHNpZy0+Ym9keWxlbmd0aCA9IC0xOwogCkBAIC00ODMsNyArNDg0LDcgQEAKIHNpZy0+a2V5dHlw
ZSA9IC0xOwogc2lnLT5oYXNodHlwZSA9IC0xOwogCi1xID0gc2lnLT5yYXdzaWdfbm9fYl92YWwg
PSBzdG9yZV9nZXQoVXN0cmxlbihyYXdfaGRyKSsxLCBUUlVFKTsJLyogdGFpbnRlZCAqLworcSA9
IHNpZy0+cmF3c2lnX25vX2JfdmFsID0gc3RvcmVfZ2V0KFVzdHJsZW4ocmF3X2hkcikrMSwgR0VU
X1RBSU5URUQpOwogCiBmb3IgKHVzY2hhciAqIHAgPSByYXdfaGRyOyA7IHArKykKICAgewpAQCAt
NjYzLDcgKzY2NCw3IEBACiBpbnQgc2VwID0gJzsnOwogcGRraW1fcHVia2V5ICogcHViOwogCi1w
dWIgPSBzdG9yZV9nZXQoc2l6ZW9mKHBka2ltX3B1YmtleSksIFRSVUUpOwkvKiB0YWludGVkICov
CitwdWIgPSBzdG9yZV9nZXQoc2l6ZW9mKHBka2ltX3B1YmtleSksIEdFVF9UQUlOVEVEKTsKIG1l
bXNldChwdWIsIDAsIHNpemVvZihwZGtpbV9wdWJrZXkpKTsKIAogd2hpbGUgKChlbGUgPSBzdHJp
bmdfbmV4dGlubGlzdCgmcmF3X3JlY29yZCwgJnNlcCwgTlVMTCwgMCkpKQpAQCAtNzkzLDggKzc5
NCw5IEBACiB7CiBmb3IgKHBka2ltX2JvZHloYXNoICogYiA9IGN0eC0+Ym9keWhhc2g7IGI7IGIg
PSBiLT5uZXh0KSAgICAgLyogRmluaXNoIGhhc2hlcyAqLwogICB7Ci0gIERFQlVHKERfYWNsKSBk
ZWJ1Z19wcmludGYoIkRLSU06IGZpbmlzaCBib2R5aGFzaCAlZC8lZC8lbGQgbGVuICVsZFxuIiwK
LQkgICAgYi0+aGFzaHR5cGUsIGItPmNhbm9uX21ldGhvZCwgYi0+Ym9keWxlbmd0aCwgYi0+c2ln
bmVkX2JvZHlfYnl0ZXMpOworICBERUJVRyhEX2FjbCkgZGVidWdfcHJpbnRmKCJES0lNOiBmaW5p
c2ggYm9keWhhc2ggJXMvJXMvJWxkIGxlbiAlbGRcbiIsCisgICAgICBwZGtpbV9oYXNoZXNbYi0+
aGFzaHR5cGVdLmRraW1faGFzaG5hbWUsIHBka2ltX2Nhbm9uc1tiLT5jYW5vbl9tZXRob2RdLAor
ICAgICAgYi0+Ym9keWxlbmd0aCwgYi0+c2lnbmVkX2JvZHlfYnl0ZXMpOwogICBleGltX3NoYV9m
aW5pc2goJmItPmJvZHlfaGFzaF9jdHgsICZiLT5iaCk7CiAgIH0KIApAQCAtODA1LDEwICs4MDcs
MTAgQEAKIAogICBERUJVRyhEX2FjbCkKICAgICB7Ci0gICAgZGVidWdfcHJpbnRmKCJES0lNIFsl
c10gQm9keSBieXRlcyAoJXMpIGhhc2hlZDogJWx1XG4iCi0JCSAiREtJTSBbJXNdIEJvZHkgJXMg
Y29tcHV0ZWQ6ICIsCi0Jc2lnLT5kb21haW4sIHBka2ltX2Nhbm9uc1tiLT5jYW5vbl9tZXRob2Rd
LCBiLT5zaWduZWRfYm9keV9ieXRlcywKLQlzaWctPmRvbWFpbiwgcGRraW1faGFzaGVzW2ItPmhh
c2h0eXBlXS5ka2ltX2hhc2huYW1lKTsKKyAgICBkZWJ1Z19wcmludGYoIkRLSU0gWyVzXSVzIEJv
ZHkgYnl0ZXMgKCVzKSBoYXNoZWQ6ICVsdVxuIgorCQkgIkRLSU0gWyVzXSVzIEJvZHkgJXMgY29t
cHV0ZWQ6ICIsCisJc2lnLT5kb21haW4sIHNpZy0+c2VsZWN0b3IsIHBka2ltX2Nhbm9uc1tiLT5j
YW5vbl9tZXRob2RdLCBiLT5zaWduZWRfYm9keV9ieXRlcywKKwlzaWctPmRvbWFpbiwgc2lnLT5z
ZWxlY3RvciwgcGRraW1faGFzaGVzW2ItPmhhc2h0eXBlXS5ka2ltX2hhc2huYW1lKTsKICAgICBw
ZGtpbV9oZXhwcmludChDVVMgYi0+YmguZGF0YSwgYi0+YmgubGVuKTsKICAgICB9CiAKQEAgLTEy
NjQsNyArMTI2Niw3IEBACiAKIGlmIChzaWctPmNyZWF0ZWQgPiAwKQogICB7Ci0gIHVzY2hhciBt
aW5pYnVmWzIwXTsKKyAgdXNjaGFyIG1pbmlidWZbMjFdOwogCiAgIHNucHJpbnRmKENTIG1pbmli
dWYsIHNpemVvZihtaW5pYnVmKSwgIiVsdSIsIHNpZy0+Y3JlYXRlZCk7CiAgIGhkciA9IHBka2lt
X2hlYWRjYXQoJmNvbCwgaGRyLCBVUyI7IiwgVVMidD0iLCBtaW5pYnVmKTsKQEAgLTEyNzIsNyAr
MTI3NCw3IEBACiAKIGlmIChzaWctPmV4cGlyZXMgPiAwKQogICB7Ci0gIHVzY2hhciBtaW5pYnVm
WzIwXTsKKyAgdXNjaGFyIG1pbmlidWZbMjFdOwogCiAgIHNucHJpbnRmKENTIG1pbmlidWYsIHNp
emVvZihtaW5pYnVmKSwgIiVsdSIsIHNpZy0+ZXhwaXJlcyk7CiAgIGhkciA9IHBka2ltX2hlYWRj
YXQoJmNvbCwgaGRyLCBVUyI7IiwgVVMieD0iLCBtaW5pYnVmKTsKQEAgLTEyODAsNyArMTI4Miw3
IEBACiAKIGlmIChzaWctPmJvZHlsZW5ndGggPj0gMCkKICAgewotICB1c2NoYXIgbWluaWJ1Zlsy
MF07CisgIHVzY2hhciBtaW5pYnVmWzIxXTsKIAogICBzbnByaW50ZihDUyBtaW5pYnVmLCBzaXpl
b2YobWluaWJ1ZiksICIlbHUiLCBzaWctPmJvZHlsZW5ndGgpOwogICBoZHIgPSBwZGtpbV9oZWFk
Y2F0KCZjb2wsIGhkciwgVVMiOyIsIFVTImw9IiwgbWluaWJ1Zik7CkBAIC0xNjExLDcgKzE2MTMs
NyBAQAogCSAgcmggPSBwZGtpbV9yZWxheF9oZWFkZXIocmgsIFRSVUUpOwkvKiBjb29rIGhlYWRl
ciBmb3IgcmVsYXhlZCBjYW5vbiAqLwogCiAJLyogRmVlZCBoZWFkZXIgdG8gdGhlIGhhc2ggYWxn
b3JpdGhtICovCi0JZXhpbV9zaGFfdXBkYXRlKCZoaGFzaF9jdHgsIENVUyByaCwgVXN0cmxlbihy
aCkpOworCWV4aW1fc2hhX3VwZGF0ZV9zdHJpbmcoJmhoYXNoX2N0eCwgQ1VTIHJoKTsKIAogCS8q
IFJlbWVtYmVyIGhlYWRlcnMgYmxvY2sgZm9yIHNpZ25pbmcgKHdoZW4gdGhlIGxpYnJhcnkgY2Fu
bm90IGRvIGluY3JlbWVudGFsKSAgKi8KIAkvKlhYWCB3ZSBjb3VsZCBhdm9pZCBkb2luZyB0aGlz
IGZvciBhbGwgYnV0IHRoZSBHbnVUTFMvUlNBIGNhc2UgKi8KQEAgLTE2NzIsNyArMTY3NCw3IEBA
CiAJICAgICAgOiBzdHJpbmdfY29weShDVVMgaGRycy0+dmFsdWUpOwogCiAJICAgIC8qIEZlZWQg
aGVhZGVyIHRvIHRoZSBoYXNoIGFsZ29yaXRobSAqLwotCSAgICBleGltX3NoYV91cGRhdGUoJmho
YXNoX2N0eCwgQ1VTIHJoLCBVc3RybGVuKHJoKSk7CisJICAgIGV4aW1fc2hhX3VwZGF0ZV9zdHJp
bmcoJmhoYXNoX2N0eCwgQ1VTIHJoKTsKIAogCSAgICBERUJVRyhEX2FjbCkgcGRraW1fcXVvdGVw
cmludChyaCwgVXN0cmxlbihyaCkpOwogCSAgICBoZHJzLT50YWcgPSAxOwpAQCAtMTcxMyw3ICsx
NzE1LDcgQEAKICAgICB9CiAKICAgLyogRmluYWxpemUgaGVhZGVyIGhhc2ggKi8KLSAgZXhpbV9z
aGFfdXBkYXRlKCZoaGFzaF9jdHgsIENVUyBzaWdfaGRyLCBVc3RybGVuKHNpZ19oZHIpKTsKKyAg
ZXhpbV9zaGFfdXBkYXRlX3N0cmluZygmaGhhc2hfY3R4LCBDVVMgc2lnX2hkcik7CiAgIGV4aW1f
c2hhX2ZpbmlzaCgmaGhhc2hfY3R4LCAmaGhhc2gpOwogCiAgIERFQlVHKERfYWNsKQpAQCAtMTkx
OCwxMyArMTkyMCwxNCBAQAogewogcGRraW1fY3R4ICogY3R4OwogCi1jdHggPSBzdG9yZV9nZXQo
c2l6ZW9mKHBka2ltX2N0eCksIEZBTFNFKTsKK2N0eCA9IHN0b3JlX2dldChzaXplb2YocGRraW1f
Y3R4KSwgR0VUX1VOVEFJTlRFRCk7CiBtZW1zZXQoY3R4LCAwLCBzaXplb2YocGRraW1fY3R4KSk7
CiAKIGlmIChkb3Rfc3R1ZmZpbmcpIGN0eC0+ZmxhZ3MgPSBQREtJTV9ET1RfVEVSTTsKIC8qIFRo
ZSBsaW5lLWJ1ZmZlciBpcyBmb3IgbWVzc2FnZSBkYXRhLCBoZW5jZSB0YWludGVkICovCi1jdHgt
PmxpbmVidWYgPSBzdG9yZV9nZXQoUERLSU1fTUFYX0JPRFlfTElORV9MRU4sIFRSVUUpOworY3R4
LT5saW5lYnVmID0gc3RvcmVfZ2V0KFBES0lNX01BWF9CT0RZX0xJTkVfTEVOLCBHRVRfVEFJTlRF
RCk7CiBjdHgtPmRuc190eHRfY2FsbGJhY2sgPSBkbnNfdHh0X2NhbGxiYWNrOworY3R4LT5jdXJf
aGVhZGVyID0gc3RyaW5nX2dldF90YWludGVkKDM2LCBHRVRfVEFJTlRFRCk7CiAKIHJldHVybiBj
dHg7CiB9CkBAIC0xOTQ1LDcgKzE5NDgsNyBAQAogCiAvKiBBbGxvY2F0ZSAmIGluaXQgb25lIHNp
Z25hdHVyZSBzdHJ1Y3QgKi8KIAotc2lnID0gc3RvcmVfZ2V0KHNpemVvZihwZGtpbV9zaWduYXR1
cmUpLCBGQUxTRSk7CitzaWcgPSBzdG9yZV9nZXQoc2l6ZW9mKHBka2ltX3NpZ25hdHVyZSksIEdF
VF9VTlRBSU5URUQpOwogbWVtc2V0KHNpZywgMCwgc2l6ZW9mKHBka2ltX3NpZ25hdHVyZSkpOwog
CiBzaWctPmJvZHlsZW5ndGggPSAtMTsKQEAgLTIwMjYsMTQgKzIwMjksMTQgQEAKICAgICAgJiYg
Y2Fub25fbWV0aG9kID09IGItPmNhbm9uX21ldGhvZAogICAgICAmJiBib2R5bGVuZ3RoID09IGIt
PmJvZHlsZW5ndGgpCiAgICAgewotICAgIERFQlVHKERfcmVjZWl2ZSkgZGVidWdfcHJpbnRmKCJE
S0lNOiB1c2luZyBleGlzdGluZyBib2R5aGFzaCAlZC8lZC8lbGRcbiIsCi0JCQkJICBoYXNodHlw
ZSwgY2Fub25fbWV0aG9kLCBib2R5bGVuZ3RoKTsKKyAgICBERUJVRyhEX3JlY2VpdmUpIGRlYnVn
X3ByaW50ZigiREtJTTogdXNpbmcgZXhpc3RpbmcgYm9keWhhc2ggJXMvJXMvJWxkXG4iLAorICAg
ICAgcGRraW1faGFzaGVzW2hhc2h0eXBlXS5ka2ltX2hhc2huYW1lLCBwZGtpbV9jYW5vbnNbY2Fu
b25fbWV0aG9kXSwgYm9keWxlbmd0aCk7CiAgICAgcmV0dXJuIGI7CiAgICAgfQogCi1ERUJVRyhE
X3JlY2VpdmUpIGRlYnVnX3ByaW50ZigiREtJTTogbmV3IGJvZHloYXNoICVkLyVkLyVsZFxuIiwK
LQkJCSAgICAgIGhhc2h0eXBlLCBjYW5vbl9tZXRob2QsIGJvZHlsZW5ndGgpOwotYiA9IHN0b3Jl
X2dldChzaXplb2YocGRraW1fYm9keWhhc2gpLCBGQUxTRSk7CitERUJVRyhEX3JlY2VpdmUpIGRl
YnVnX3ByaW50ZigiREtJTTogbmV3IGJvZHloYXNoICVzLyVzLyVsZFxuIiwKKyAgICBwZGtpbV9o
YXNoZXNbaGFzaHR5cGVdLmRraW1faGFzaG5hbWUsIHBka2ltX2Nhbm9uc1tjYW5vbl9tZXRob2Rd
LCBib2R5bGVuZ3RoKTsKK2IgPSBzdG9yZV9nZXQoc2l6ZW9mKHBka2ltX2JvZHloYXNoKSwgR0VU
X1VOVEFJTlRFRCk7CiBiLT5uZXh0ID0gY3R4LT5ib2R5aGFzaDsKIGItPmhhc2h0eXBlID0gaGFz
aHR5cGU7CiBiLT5jYW5vbl9tZXRob2QgPSBjYW5vbl9tZXRob2Q7CkBAIC0yMDc4LDcgKzIwODEs
NyBAQAogbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKHBka2ltX2N0eCkpOwogY3R4LT5mbGFncyA9IGRv
dF9zdHVmZmVkID8gUERLSU1fTU9ERV9TSUdOIHwgUERLSU1fRE9UX1RFUk0gOiBQREtJTV9NT0RF
X1NJR047CiAvKiBUaGUgbGluZSBidWZmZXIgaXMgZm9yIG1lc3NhZ2UgZGF0YSwgaGVuY2UgdGFp
bnRlZCAqLwotY3R4LT5saW5lYnVmID0gc3RvcmVfZ2V0KFBES0lNX01BWF9CT0RZX0xJTkVfTEVO
LCBUUlVFKTsKK2N0eC0+bGluZWJ1ZiA9IHN0b3JlX2dldChQREtJTV9NQVhfQk9EWV9MSU5FX0xF
TiwgR0VUX1RBSU5URUQpOwogREVCVUcoRF9hY2wpIGN0eC0+ZG5zX3R4dF9jYWxsYmFjayA9IGRu
c190eHRfY2FsbGJhY2s7CiB9CiAKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9wZGtpbS9zaWduaW5n
LmMgZXhpbS9zcmMvcGRraW0vc2lnbmluZy5jCi0tLSBleGltLm9yaWcvc3JjL3Bka2ltL3NpZ25p
bmcuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvcGRr
aW0vc2lnbmluZy5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0xLDcg
KzEsNiBAQAogLyoKICAqICBQREtJTSAtIGEgUkZDNDg3MSAoREtJTSkgaW1wbGVtZW50YXRpb24K
LSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk1IC0gMjAyMCAgRXhpbSBtYWludGFpbmVycworICog
IENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMTk5NSAtIDIwMjIKICAqCiAgKiAg
c2lnbmluZy92ZXJpZmljYXRpb24gaW50ZXJmYWNlCiAgKi8KQEAgLTM3LDYgKzM2LDEwIEBACiAj
aWZkZWYgU0lHTl9HTlVUTFMKICMgZGVmaW5lIEVYSU1fR05VVExTX0xJQlJBUllfTE9HX0xFVkVM
IDMKIAorIyBpZm5kZWYgR05VVExTX1ZFUklGWV9BTExPV19CUk9LRU4KKyMgIGRlZmluZSBHTlVU
TFNfVkVSSUZZX0FMTE9XX0JST0tFTiAwCisjIGVuZGlmCisKIAogLyogTG9nZ2luZyBmdW5jdGlv
biB3aGljaCBjYW4gYmUgcmVnaXN0ZXJlZCB3aXRoCiAgKiAgIGdudXRsc19nbG9iYWxfc2V0X2xv
Z19mdW5jdGlvbigpCkBAIC0yMTksNyArMjIyLDggQEAKICAgICBkZWZhdWx0OgkJcmV0dXJuIFVT
Im5vbmhhbmRsZWQgaGFzaCB0eXBlIjsKICAgICB9CiAKLSAgaWYgKChyYyA9IGdudXRsc19wdWJr
ZXlfdmVyaWZ5X2hhc2gyKHZlcmlmeV9jdHgtPmtleSwgYWxnbywgMCwgJmssICZzKSkgPCAwKQor
ICBpZiAoKHJjID0gZ251dGxzX3B1YmtleV92ZXJpZnlfaGFzaDIodmVyaWZ5X2N0eC0+a2V5LCBh
bGdvLAorCSAgICAgIEdOVVRMU19WRVJJRllfQUxMT1dfQlJPS0VOLCAmaywgJnMpKSA8IDApCiAg
ICAgcmV0ID0gVVMgZ251dGxzX3N0cmVycm9yKHJjKTsKICAgfQogCkBAIC01MDIsNyArNTA2LDcg
QEAKICAgfQogCiAjZGVmaW5lIFNJR1NQQUNFIDEyOAotc2lnLT5kYXRhID0gc3RvcmVfZ2V0KFNJ
R1NQQUNFLCBGQUxTRSk7CitzaWctPmRhdGEgPSBzdG9yZV9nZXQoU0lHU1BBQ0UsIEdFVF9VTlRB
SU5URUQpOwogCiBpZiAoZ2NyeV9tcGlfY21wIChzaWduX2N0eC0+cCwgc2lnbl9jdHgtPnEpID4g
MCkKICAgewpAQCAtNzYxLDcgKzc2NSw3IEBACiBpZiAoICAoY3R4ID0gRVZQX01EX0NUWF9uZXco
KSkKICAgICYmIEVWUF9EaWdlc3RTaWduSW5pdChjdHgsIE5VTEwsIG1kLCBOVUxMLCBzaWduX2N0
eC0+a2V5KSA+IDAKICAgICYmIEVWUF9EaWdlc3RTaWduKGN0eCwgTlVMTCwgJnNpZ2xlbiwgTlVM
TCwgMCkgPiAwCi0gICAmJiAoc2lnLT5kYXRhID0gc3RvcmVfZ2V0KHNpZ2xlbiwgRkFMU0UpKQor
ICAgJiYgKHNpZy0+ZGF0YSA9IHN0b3JlX2dldChzaWdsZW4sIEdFVF9VTlRBSU5URUQpKQogCiAg
ICAvKiBPYnRhaW4gdGhlIHNpZ25hdHVyZSAoc2xlbiBjb3VsZCBjaGFuZ2UgaGVyZSEpICovCiAg
ICAmJiBFVlBfRGlnZXN0U2lnbihjdHgsIHNpZy0+ZGF0YSwgJnNpZ2xlbiwgZGF0YS0+ZGF0YSwg
ZGF0YS0+bGVuKSA+IDAKQEAgLTc3Nyw3ICs3ODEsNyBAQAogICAgJiYgRVZQX0RpZ2VzdFNpZ25J
bml0KGN0eCwgTlVMTCwgbWQsIE5VTEwsIHNpZ25fY3R4LT5rZXkpID4gMAogICAgJiYgRVZQX0Rp
Z2VzdFNpZ25VcGRhdGUoY3R4LCBkYXRhLT5kYXRhLCBkYXRhLT5sZW4pID4gMAogICAgJiYgRVZQ
X0RpZ2VzdFNpZ25GaW5hbChjdHgsIE5VTEwsICZzaWdsZW4pID4gMAotICAgJiYgKHNpZy0+ZGF0
YSA9IHN0b3JlX2dldChzaWdsZW4sIEZBTFNFKSkKKyAgICYmIChzaWctPmRhdGEgPSBzdG9yZV9n
ZXQoc2lnbGVuLCBHRVRfVU5UQUlOVEVEKSkKICAKICAgIC8qIE9idGFpbiB0aGUgc2lnbmF0dXJl
IChzbGVuIGNvdWxkIGNoYW5nZSBoZXJlISkgKi8KICAgICYmIEVWUF9EaWdlc3RTaWduRmluYWwo
Y3R4LCBzaWctPmRhdGEsICZzaWdsZW4pID4gMApkaWZmIC11ciBleGltLm9yaWcvc3JjL3Blcmwu
YyBleGltL3NyYy9wZXJsLmMKLS0tIGV4aW0ub3JpZy9zcmMvcGVybC5jCTIwMjMtMDYtMDQgMTY6
MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9wZXJsLmMJMjAyMi0wNi0yMyAxNjo0
MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50
ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBN
YWludGFpbmVycyAxOTk5IC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSAxOTk4IE1hbGNvbG0g
QmVhdHRpZSAqLwotLyogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAxOCAgRXhpbSBtYWludGFpbmVy
cyAqLwogCiAvKiBNb2RpZmllZCBieSBQSCB0byBnZXQgcmlkIG9mIHRoZSAibmEiIHVzYWdlLCBN
YXJjaCAxOTk5LgogICAgTW9kaWZpZWQgZnVydGhlciBieSBQSCBmb3IgZ2VuZXJhbCB0aWR5aW5n
IGZvciBFeGltIDQuCkBAIC0xNSw2ICsxNSwxMCBAQAogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBm
b3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogI2luY2x1ZGUgPGFz
c2VydC5oPgorCisjZGVmaW5lIEhJTlRTREJfSAorI2RlZmluZSBEQkZVTkNUSU9OU19ICisKICNp
bmNsdWRlICJleGltLmgiCiAKICNkZWZpbmUgRVhJTV9UUlVFIFRSVUUKZGlmZiAtdXIgZXhpbS5v
cmlnL3NyYy9xdWV1ZS5jIGV4aW0vc3JjL3F1ZXVlLmMKLS0tIGV4aW0ub3JpZy9zcmMvcXVldWUu
YwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvcXVldWUu
YwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4ICsyLDggQEAKICog
ICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5cmln
aHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBDb3B5cmlnaHQg
KGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBDb3B5cmlnaHQg
KGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0Ug
Zm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIC8qIEZ1bmN0aW9u
cyB0aGF0IG9wZXJhdGUgb24gdGhlIGlucHV0IHF1ZXVlLiAqLwpAQCAtMjYsNiArMjYsOSBAQAog
I2RlZmluZSBMT0cyX01BWE5PREVTIDMyCiAKIAorI2lmbmRlZiBESVNBQkxFX1RMUworc3RhdGlj
IEJPT0wgcXVldWVfdGxzX2luaXQgPSBGQUxTRTsKKyNlbmRpZgogCiAvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgSGVscGVyIHNvcnQgZnVuY3Rp
b24gZm9yIHF1ZXVlX2dldF9zcG9vbF9saXN0ICoKQEAgLTIxMSw4ICsyMTQsOCBAQAogCSgqcGNv
dW50KSsrOwogICAgICAgZWxzZQogCXsKLQlxdWV1ZV9maWxlbmFtZSAqbmV4dCA9Ci0JICBzdG9y
ZV9nZXQoc2l6ZW9mKHF1ZXVlX2ZpbGVuYW1lKSArIFVzdHJsZW4obmFtZSksIGlzX3RhaW50ZWQo
bmFtZSkpOworCXF1ZXVlX2ZpbGVuYW1lICogbmV4dCA9CisJICBzdG9yZV9nZXQoc2l6ZW9mKHF1
ZXVlX2ZpbGVuYW1lKSArIFVzdHJsZW4obmFtZSksIG5hbWUpOwogCVVzdHJjcHkobmV4dC0+dGV4
dCwgbmFtZSk7CiAJbmV4dC0+ZGlyX3VzY2hhciA9IHN1YmRpcmNoYXI7CiAKQEAgLTM0Nyw4ICsz
NTAsOCBAQAogewogQk9PTCBmb3JjZV9kZWxpdmVyeSA9IGYucXVldWVfcnVuX2ZvcmNlIHx8IGRl
bGl2ZXJfc2VsZWN0c3RyaW5nICE9IE5VTEwgfHwKICAgZGVsaXZlcl9zZWxlY3RzdHJpbmdfc2Vu
ZGVyICE9IE5VTEw7Ci1jb25zdCBwY3JlICpzZWxlY3RzdHJpbmdfcmVnZXggPSBOVUxMOwotY29u
c3QgcGNyZSAqc2VsZWN0c3RyaW5nX3JlZ2V4X3NlbmRlciA9IE5VTEw7Citjb25zdCBwY3JlMl9j
b2RlICpzZWxlY3RzdHJpbmdfcmVnZXggPSBOVUxMOworY29uc3QgcGNyZTJfY29kZSAqc2VsZWN0
c3RyaW5nX3JlZ2V4X3NlbmRlciA9IE5VTEw7CiB1c2NoYXIgKmxvZ19kZXRhaWwgPSBOVUxMOwog
aW50IHN1YmNvdW50ID0gMDsKIHVzY2hhciBzdWJkaXJzWzY0XTsKQEAgLTU2Niw5ICs1NjksNyBA
QAogCiAgICAgICBlbHNlIGlmICggIGRlbGl2ZXJfc2VsZWN0c3RyaW5nX3NlbmRlcgogCSAgICAg
ICYmICEoZi5kZWxpdmVyX3NlbGVjdHN0cmluZ19zZW5kZXJfcmVnZXgKLQkJICA/IChwY3JlX2V4
ZWMoc2VsZWN0c3RyaW5nX3JlZ2V4X3NlbmRlciwgTlVMTCwKLQkJICAgICAgQ1Mgc2VuZGVyX2Fk
ZHJlc3MsIFVzdHJsZW4oc2VuZGVyX2FkZHJlc3MpLCAwLCBQQ1JFX0VPUFQsCi0JCSAgICAgIE5V
TEwsIDApID49IDApCisJCSAgPyByZWdleF9tYXRjaChzZWxlY3RzdHJpbmdfcmVnZXhfc2VuZGVy
LCBzZW5kZXJfYWRkcmVzcywgLTEsIE5VTEwpCiAJCSAgOiAoc3Ryc3RyaWMoc2VuZGVyX2FkZHJl
c3MsIGRlbGl2ZXJfc2VsZWN0c3RyaW5nX3NlbmRlciwgRkFMU0UpCiAJCSAgICAgICE9IE5VTEwp
CiAJICAgICAgKSAgICkKQEAgLTU4Nyw4ICs1ODgsNyBAQAogICAgICAgICAgIHsKICAgICAgICAg
ICB1c2NoYXIgKmFkZHJlc3MgPSByZWNpcGllbnRzX2xpc3RbaV0uYWRkcmVzczsKICAgICAgICAg
ICBpZiAoICAoZi5kZWxpdmVyX3NlbGVjdHN0cmluZ19yZWdleAotCQk/IChwY3JlX2V4ZWMoc2Vs
ZWN0c3RyaW5nX3JlZ2V4LCBOVUxMLCBDUyBhZGRyZXNzLAotCQkgICAgIFVzdHJsZW4oYWRkcmVz
cyksIDAsIFBDUkVfRU9QVCwgTlVMTCwgMCkgPj0gMCkKKwkJPyByZWdleF9tYXRjaChzZWxlY3Rz
dHJpbmdfcmVnZXgsIGFkZHJlc3MsIC0xLCBOVUxMKQogICAgICAgICAgICAgICAgIDogKHN0cnN0
cmljKGFkZHJlc3MsIGRlbGl2ZXJfc2VsZWN0c3RyaW5nLCBGQUxTRSkgIT0gTlVMTCkKIAkJKQog
ICAgICAgICAgICAgICYmIHRyZWVfc2VhcmNoKHRyZWVfbm9ucmVjaXBpZW50cywgYWRkcmVzcykg
PT0gTlVMTApAQCAtNjU0LDYgKzY1NCwxNiBAQAogICAgIHJlcG9ydF90aW1lX3NpbmNlKCZ0aW1l
c3RhbXBfc3RhcnR1cCwgVVMicXVldWUgbXNnIHNlbGVjdGVkIik7CiAjZW5kaWYKIAorI2lmbmRl
ZiBESVNBQkxFX1RMUworICAgIGlmICghcXVldWVfdGxzX2luaXQpCisgICAgICB7CisgICAgICBx
dWV1ZV90bHNfaW5pdCA9IFRSVUU7CisgICAgICAvKiBQcmVsb2FkIFRMUyBsaWJyYXJ5IGluZm8g
Zm9yIHNtdHAgdHJhbnNwb3J0cy4gIE9uY2UsIGFuZCBvbmx5IGlmIHdlCisgICAgICBoYXZlIGEg
ZGVsaXZlcnkgdG8gZG8uICovCisgICAgICB0bHNfY2xpZW50X2NyZWRzX3JlbG9hZChGQUxTRSk7
CisgICAgICB9CisjZW5kaWYKKwogc2luZ2xlX2l0ZW1fcmV0cnk6CiAgICAgaWYgKChwaWQgPSBl
eGltX2ZvcmsoVVMicXJ1bi1kZWxpdmVyeSIpKSA9PSAwKQogICAgICAgewpAQCAtODkxLDggKzkw
MSw4IEBACiAgIHF1ZXVlX2ZpbGVuYW1lICpsYXN0ID0gTlVMTDsKICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQogICAgIHsKLSAgICBxdWV1ZV9maWxlbmFtZSAqbmV4dCA9Ci0gICAg
ICBzdG9yZV9nZXQoc2l6ZW9mKHF1ZXVlX2ZpbGVuYW1lKSArIFVzdHJsZW4obGlzdFtpXSkgKyAy
LCBpc190YWludGVkKGxpc3RbaV0pKTsKKyAgICBxdWV1ZV9maWxlbmFtZSAqIG5leHQgPQorICAg
ICAgc3RvcmVfZ2V0KHNpemVvZihxdWV1ZV9maWxlbmFtZSkgKyBVc3RybGVuKGxpc3RbaV0pICsg
MiwgbGlzdFtpXSk7CiAgICAgc3ByaW50ZihDUyBuZXh0LT50ZXh0LCAiJXMtSCIsIGxpc3RbaV0p
OwogICAgIG5leHQtPmRpcl91c2NoYXIgPSAnKic7CiAgICAgbmV4dC0+bmV4dCA9IE5VTEw7CkBA
IC0xMzM4LDE1ICsxMzQ4LDE1IEBACiAJICAgIGRlbGl2ZXJfZG9tYWluID0gZG9tCiAJICAgICAg
PyBDVVMgc3RyaW5nX2NvcHluKGFkZHIrZG9tLCBlbmQgLSBkb20pIDogQ1VTIiI7CiAKLQkgICAg
ZXZlbnRfcmFpc2UoZXZlbnRfYWN0aW9uLCBVUyJtc2c6ZmFpbDppbnRlcm5hbCIsCi0JICAgICAg
c3RyaW5nX3NwcmludGYoIm1lc3NhZ2UgcmVtb3ZlZCBieSAlcyIsIHVzZXJuYW1lKSk7CisJICAg
ICh2b2lkKSBldmVudF9yYWlzZShldmVudF9hY3Rpb24sIFVTIm1zZzpmYWlsOmludGVybmFsIiwK
KwkgICAgICBzdHJpbmdfc3ByaW50ZigibWVzc2FnZSByZW1vdmVkIGJ5ICVzIiwgdXNlcm5hbWUp
LCBOVUxMKTsKIAogCSAgICBkZWxpdmVyX2xvY2FscGFydCA9IHNhdmVfbG9jYWw7CiAJICAgIGRl
bGl2ZXJfZG9tYWluID0gc2F2ZV9kb21haW47CiAJICAgIH0KIAkgIH0KIAl9Ci0gICAgICAodm9p
ZCkgZXZlbnRfcmFpc2UoZXZlbnRfYWN0aW9uLCBVUyJtc2c6Y29tcGxldGUiLCBOVUxMKTsKKyAg
ICAgICh2b2lkKSBldmVudF9yYWlzZShldmVudF9hY3Rpb24sIFVTIm1zZzpjb21wbGV0ZSIsIE5V
TEwsIE5VTEwpOwogI2VuZGlmCiAgICAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU4sICJyZW1vdmVk
IGJ5ICVzIiwgdXNlcm5hbWUpOwogICAgICAgbG9nX3dyaXRlKDAsIExPR19NQUlOLCAiQ29tcGxl
dGVkIik7CkBAIC0xNTM3LDcgKzE1NDcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBFWFBFUklNRU5UQUxfUVVFVUVfUkFNUAor
I2lmbmRlZiBESVNBQkxFX1FVRVVFX1JBTVAKIHZvaWQKIHF1ZXVlX25vdGlmeV9kYWVtb24oY29u
c3QgdXNjaGFyICogbXNnaWQpCiB7CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvcmRhLmMgZXhpbS9z
cmMvcmRhLmMKLS0tIGV4aW0ub3JpZy9zcmMvcmRhLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL3JkYS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAw
MDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwg
dHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gbWFpbnRhaW5lcnMg
MjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ug
MTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gbWFpbnRhaW5lcnMgMjAy
MCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRp
c3RyaWJ1dGlvbi4gKi8KIAogLyogVGhpcyBtb2R1bGUgY29udGFpbnMgY29kZSBmb3IgZXh0cmFj
dGluZyBhZGRyZXNzZXMgZnJvbSBhIGZvcndhcmRpbmcgbGlzdApAQCAtMTY2LDcgKzE2Niw3IEBA
CiAqLwogCiBzdGF0aWMgdXNjaGFyICoKLXJkYV9nZXRfZmlsZV9jb250ZW50cyhyZWRpcmVjdF9i
bG9jayAqcmRhdGEsIGludCBvcHRpb25zLCB1c2NoYXIgKiplcnJvciwKK3JkYV9nZXRfZmlsZV9j
b250ZW50cyhjb25zdCByZWRpcmVjdF9ibG9jayAqcmRhdGEsIGludCBvcHRpb25zLCB1c2NoYXIg
KiplcnJvciwKICAgaW50ICp5aWVsZCkKIHsKIEZJTEUgKmZ3ZDsKQEAgLTIyMiw3ICsyMjIsNyBA
QAogCiBERUZBVUxUX0VSUk9SOgogICBkZWZhdWx0OgotICAgICplcnJvciA9IHN0cmluZ19vcGVu
X2ZhaWxlZChlcnJubywgIiVzIiwgZmlsZW5hbWUpOworICAgICplcnJvciA9IHN0cmluZ19vcGVu
X2ZhaWxlZCgiJXMiLCBmaWxlbmFtZSk7CiAgICAgKnlpZWxkID0gRkZfRVJST1I7CiAgICAgcmV0
dXJuIE5VTEw7CiAgIH0KQEAgLTI4NCw3ICsyODQsNyBAQAogCiAvKiBSZWFkIHRoZSBmaWxlIGlu
IG9uZSBnbyBpbiBvcmRlciB0byBtaW5pbWl6ZSB0aGUgdGltZSB3ZSBoYXZlIGl0IG9wZW4uICov
CiAKLWZpbGVidWYgPSBzdG9yZV9nZXQoc3RhdGJ1Zi5zdF9zaXplICsgMSwgaXNfdGFpbnRlZChm
aWxlbmFtZSkpOworZmlsZWJ1ZiA9IHN0b3JlX2dldChzdGF0YnVmLnN0X3NpemUgKyAxLCBmaWxl
bmFtZSk7CiAKIGlmIChmcmVhZChmaWxlYnVmLCAxLCBzdGF0YnVmLnN0X3NpemUsIGZ3ZCkgIT0g
c3RhdGJ1Zi5zdF9zaXplKQogICB7CkBAIC0zMzksMTMgKzMzOSwxMyBAQAogKi8KIAogc3RhdGlj
IGludAotcmRhX2V4dHJhY3QocmVkaXJlY3RfYmxvY2sgKnJkYXRhLCBpbnQgb3B0aW9ucywgdXNj
aGFyICppbmNsdWRlX2RpcmVjdG9yeSwKLSAgdXNjaGFyICpzaWV2ZV92YWNhdGlvbl9kaXJlY3Rv
cnksIHVzY2hhciAqc2lldmVfZW5vdGlmeV9tYWlsdG9fb3duZXIsCi0gIHVzY2hhciAqc2lldmVf
dXNlcmFkZHJlc3MsIHVzY2hhciAqc2lldmVfc3ViYWRkcmVzcywKLSAgYWRkcmVzc19pdGVtICoq
Z2VuZXJhdGVkLCB1c2NoYXIgKiplcnJvciwgZXJyb3JfYmxvY2sgKiplYmxvY2twLAotICBpbnQg
KmZpbHRlcnR5cGUpCityZGFfZXh0cmFjdChjb25zdCByZWRpcmVjdF9ibG9jayAqIHJkYXRhLCBp
bnQgb3B0aW9ucywKKyAgY29uc3QgdXNjaGFyICogaW5jbHVkZV9kaXJlY3RvcnksIGNvbnN0IHVz
Y2hhciAqIHNpZXZlX3ZhY2F0aW9uX2RpcmVjdG9yeSwKKyAgY29uc3QgdXNjaGFyICogc2lldmVf
ZW5vdGlmeV9tYWlsdG9fb3duZXIsIGNvbnN0IHVzY2hhciAqIHNpZXZlX3VzZXJhZGRyZXNzLAor
ICBjb25zdCB1c2NoYXIgKiBzaWV2ZV9zdWJhZGRyZXNzLCBhZGRyZXNzX2l0ZW0gKiogZ2VuZXJh
dGVkLCB1c2NoYXIgKiogZXJyb3IsCisgIGVycm9yX2Jsb2NrICoqIGVibG9ja3AsIGludCAqIGZp
bHRlcnR5cGUpCiB7Ci11c2NoYXIgKmRhdGE7Citjb25zdCB1c2NoYXIgKiBkYXRhOwogCiBpZiAo
cmRhdGEtPmlzZmlsZSkKICAgewpAQCAtNDQyLDkgKzQ0Miw5IEBACiBzdGF0aWMgaW50CiByZGFf
d3JpdGVfc3RyaW5nKGludCBmZCwgY29uc3QgdXNjaGFyICpzKQogewotaW50IGxlbiA9IChzID09
IE5VTEwpPyAwIDogVXN0cmxlbihzKSArIDE7CitpbnQgbGVuID0gcyA/IFVzdHJsZW4ocykgKyAx
IDogMDsKIHJldHVybiAoICB3cml0ZShmZCwgJmxlbiwgc2l6ZW9mKGludCkpICE9IHNpemVvZihp
bnQpCi0gICAgICAgfHwgKHMgIT0gTlVMTCAgJiYgIHdyaXRlKGZkLCBzLCBsZW4pICE9IGxlbikK
KyAgICAgICB8fCAocyAgICYmICB3cml0ZShmZCwgcywgbGVuKSAhPSBsZW4pCiAgICAgICAgKQog
ICAgICAgID8gLTEgOiAwOwogfQpAQCAtNDc2LDcgKzQ3Niw3IEBACiAgIC8qIFdlIGtub3cgd2Ug
aGF2ZSBlbm91Z2ggbWVtb3J5IHNvIGRpc2FibGUgdGhlIGVycm9yIG9uICJsZW4iICovCiAgIC8q
IGNvdmVyaXR5W3RhaW50ZWRfZGF0YV0gKi8KICAgLyogV2UgdHJ1c3QgdGhlIGRhdGEgc291cmNl
LCBzbyB1bnRhaW50ZWQgKi8KLSAgaWYgKHJlYWQoZmQsICpzcCA9IHN0b3JlX2dldChsZW4sIEZB
TFNFKSwgbGVuKSAhPSBsZW4pIHJldHVybiBGQUxTRTsKKyAgaWYgKHJlYWQoZmQsICpzcCA9IHN0
b3JlX2dldChsZW4sIEdFVF9VTlRBSU5URUQpLCBsZW4pICE9IGxlbikgcmV0dXJuIEZBTFNFOwog
cmV0dXJuIFRSVUU7CiB9CiAKQEAgLTU0MSwxMSArNTQxLDExIEBACiAqLwogCiBpbnQKLXJkYV9p
bnRlcnByZXQocmVkaXJlY3RfYmxvY2sgKnJkYXRhLCBpbnQgb3B0aW9ucywgdXNjaGFyICppbmNs
dWRlX2RpcmVjdG9yeSwKLSAgdXNjaGFyICpzaWV2ZV92YWNhdGlvbl9kaXJlY3RvcnksIHVzY2hh
ciAqc2lldmVfZW5vdGlmeV9tYWlsdG9fb3duZXIsCi0gIHVzY2hhciAqc2lldmVfdXNlcmFkZHJl
c3MsIHVzY2hhciAqc2lldmVfc3ViYWRkcmVzcywgdWdpZF9ibG9jayAqdWdpZCwKLSAgYWRkcmVz
c19pdGVtICoqZ2VuZXJhdGVkLCB1c2NoYXIgKiplcnJvciwgZXJyb3JfYmxvY2sgKiplYmxvY2tw
LAotICBpbnQgKmZpbHRlcnR5cGUsIHVzY2hhciAqcm5hbWUpCityZGFfaW50ZXJwcmV0KHJlZGly
ZWN0X2Jsb2NrICogcmRhdGEsIGludCBvcHRpb25zLAorICBjb25zdCB1c2NoYXIgKiBpbmNsdWRl
X2RpcmVjdG9yeSwgY29uc3QgdXNjaGFyICogc2lldmVfdmFjYXRpb25fZGlyZWN0b3J5LAorICBj
b25zdCB1c2NoYXIgKiBzaWV2ZV9lbm90aWZ5X21haWx0b19vd25lciwgY29uc3QgdXNjaGFyICog
c2lldmVfdXNlcmFkZHJlc3MsCisgIGNvbnN0IHVzY2hhciAqIHNpZXZlX3N1YmFkZHJlc3MsIGNv
bnN0IHVnaWRfYmxvY2sgKiB1Z2lkLCBhZGRyZXNzX2l0ZW0gKiogZ2VuZXJhdGVkLAorICB1c2No
YXIgKiogZXJyb3IsIGVycm9yX2Jsb2NrICoqIGVibG9ja3AsIGludCAqIGZpbHRlcnR5cGUsIGNv
bnN0IHVzY2hhciAqIHJuYW1lKQogewogaW50IGZkLCByYywgcGZkWzJdOwogaW50IHlpZWxkLCBz
dGF0dXM7CkBAIC04MDgsNyArODA4LDcgQEAKICAgICB1c2NoYXIgKnM7CiAgICAgaWYgKCFyZGFf
cmVhZF9zdHJpbmcoZmQsICZzKSkgZ290byBESVNBU1RFUjsKICAgICBpZiAoIXMpIGJyZWFrOwot
ICAgIGUgPSBzdG9yZV9nZXQoc2l6ZW9mKGVycm9yX2Jsb2NrKSwgRkFMU0UpOworICAgIGUgPSBz
dG9yZV9nZXQoc2l6ZW9mKGVycm9yX2Jsb2NrKSwgR0VUX1VOVEFJTlRFRCk7CiAgICAgZS0+bmV4
dCA9IE5VTEw7CiAgICAgZS0+dGV4dDEgPSBzOwogICAgIGlmICghcmRhX3JlYWRfc3RyaW5nKGZk
LCAmcykpIGdvdG8gRElTQVNURVI7CkBAIC05MDcsNyArOTA3LDcgQEAKIAogICAgIGlmIChpID4g
MCkKICAgICAgIHsKLSAgICAgIGFkZHItPnBpcGVfZXhwYW5kbiA9IHN0b3JlX2dldCgoaSsxKSAq
IHNpemVvZih1c2NoYXIgKiksIEZBTFNFKTsKKyAgICAgIGFkZHItPnBpcGVfZXhwYW5kbiA9IHN0
b3JlX2dldCgoaSsxKSAqIHNpemVvZih1c2NoYXIgKiksIEdFVF9VTlRBSU5URUQpOwogICAgICAg
YWRkci0+cGlwZV9leHBhbmRuW2ldID0gTlVMTDsKICAgICAgIHdoaWxlICgtLWkgPj0gMCkgYWRk
ci0+cGlwZV9leHBhbmRuW2ldID0gZXhwYW5kbltpXTsKICAgICAgIH0KQEAgLTkxNyw3ICs5MTcs
NyBAQAogICAgIGlmIChyZWFkKGZkLCAmcmVwbHlfb3B0aW9ucywgc2l6ZW9mKGludCkpICE9IHNp
emVvZihpbnQpKSBnb3RvIERJU0FTVEVSOwogICAgIGlmICgocmVwbHlfb3B0aW9ucyAmIFJFUExZ
X0VYSVNUUykgIT0gMCkKICAgICAgIHsKLSAgICAgIGFkZHItPnJlcGx5ID0gc3RvcmVfZ2V0KHNp
emVvZihyZXBseV9pdGVtKSwgRkFMU0UpOworICAgICAgYWRkci0+cmVwbHkgPSBzdG9yZV9nZXQo
c2l6ZW9mKHJlcGx5X2l0ZW0pLCBHRVRfVU5UQUlOVEVEKTsKIAogICAgICAgYWRkci0+cmVwbHkt
PmZpbGVfZXhwYW5kID0gKHJlcGx5X29wdGlvbnMgJiBSRVBMWV9FWFBBTkQpICE9IDA7CiAgICAg
ICBhZGRyLT5yZXBseS0+cmV0dXJuX21lc3NhZ2UgPSAocmVwbHlfb3B0aW9ucyAmIFJFUExZX1JF
VFVSTikgIT0gMDsKQEAgLTk2MSwxNiArOTYxLDE0IEBACiAgICplcnJvciA9IHN0cmluZ19zcHJp
bnRmKCJpbnRlcm5hbCBwcm9ibGVtIGluICVzOiBmYWlsdXJlIHRvIHRyYW5zZmVyICIKICAgICAi
ZGF0YSBmcm9tIHN1YnByb2Nlc3M6IHN0YXR1cz0lMDR4JXMlcyVzIiwgcm5hbWUsCiAgICAgc3Rh
dHVzLCByZWFkZXJyb3IsCi0gICAgKCplcnJvciA9PSBOVUxMKT8gVVMiIiA6IFVTIjogZXJyb3I9
IiwKLSAgICAoKmVycm9yID09IE5VTEwpPyBVUyIiIDogKmVycm9yKTsKKyAgICAqZXJyb3IgPyBV
UyI6IGVycm9yPSIgOiBVUyIiLAorICAgICplcnJvciA/ICplcnJvciA6IFVTIiIpOwogICBsb2df
d3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAiJXMiLCAqZXJyb3IpOwogICB9CiBlbHNlIGlm
IChzdGF0dXMgIT0gMCkKLSAgewogICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAi
aW50ZXJuYWwgcHJvYmxlbSBpbiAlczogdW5leHBlY3RlZCBzdGF0dXMgIgogICAgICIlMDR4IGZy
b20gcmVkaXJlY3Qgc3VicHJvY2VzcyAoYnV0IGRhdGEgY29ycmVjdGx5IHJlY2VpdmVkKSIsIHJu
YW1lLAogICAgIHN0YXR1cyk7Ci0gIH0KIAogRklOQUxfRVhJVDoKICh2b2lkKWNsb3NlKGZkKTsK
ZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9yZWFkY29uZi5jIGV4aW0vc3JjL3JlYWRjb25mLmMKLS0t
IGV4aW0ub3JpZy9zcmMvcmVhZGNvbmYuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCAr
MDMwMAorKysgZXhpbS9zcmMvcmVhZGNvbmYuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAw
MCArMDMwMApAQCAtMiw4ICsyLDggQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRy
YW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIw
MjAgLSAyMDIyICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5
OTUgLSAyMDE4ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAg
Ki8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0
cmlidXRpb24uICovCiAKIC8qIEZ1bmN0aW9ucyBmb3IgcmVhZGluZyB0aGUgY29uZmlndXJhdGlv
biBmaWxlLCBhbmQgZm9yIGRpc3BsYXlpbmcKQEAgLTE4MSw2ICsxODEsMTAgQEAKICNpZmRlZiBT
VVBQT1JUX1BST1hZCiAgIHsgImhvc3RzX3Byb3h5IiwgICAgICAgICAgICAgIG9wdF9zdHJpbmdw
dHIsICAgeyZob3N0c19wcm94eX0gfSwKICNlbmRpZgorI2lmbmRlZiBESVNBQkxFX1RMUworICB7
ICJob3N0c19yZXF1aXJlX2FscG4iLCAgICAgICBvcHRfc3RyaW5ncHRyLCAgIHsmaG9zdHNfcmVx
dWlyZV9hbHBufSB9LAorI2VuZGlmCisgIHsgImhvc3RzX3JlcXVpcmVfaGVsbyIsICAgICAgIG9w
dF9zdHJpbmdwdHIsICAgeyZob3N0c19yZXF1aXJlX2hlbG99IH0sCiAgIHsgImhvc3RzX3RyZWF0
X2FzX2xvY2FsIiwgICAgIG9wdF9zdHJpbmdwdHIsICAgeyZob3N0c190cmVhdF9hc19sb2NhbH0g
fSwKICNpZmRlZiBMT09LVVBfSUJBU0UKICAgeyAiaWJhc2Vfc2VydmVycyIsICAgICAgICAgICAg
b3B0X3N0cmluZ3B0ciwgICB7JmliYXNlX3NlcnZlcnN9IH0sCkBAIC0yMDEsNiArMjA1LDkgQEAK
ICAgeyAibGRhcF9zdGFydF90bHMiLCAgICAgICAgICAgb3B0X2Jvb2wsICAgICAgICB7JmVsZGFw
X3N0YXJ0X3Rsc30gfSwKICAgeyAibGRhcF92ZXJzaW9uIiwgICAgICAgICAgICAgb3B0X2ludCwg
ICAgICAgICB7JmVsZGFwX3ZlcnNpb259IH0sCiAjZW5kaWYKKyNpZmRlZiBFWFBFUklNRU5UQUxf
RVNNVFBfTElNSVRTCisgIHsgImxpbWl0c19hZHZlcnRpc2VfaG9zdHMiLCBvcHRfc3RyaW5ncHRy
LCB7JmxpbWl0c19hZHZlcnRpc2VfaG9zdHN9IH0sCisjZW5kaWYKICAgeyAibG9jYWxfZnJvbV9j
aGVjayIsICAgICAgICAgb3B0X2Jvb2wsICAgICAgICB7JmxvY2FsX2Zyb21fY2hlY2t9IH0sCiAg
IHsgImxvY2FsX2Zyb21fcHJlZml4IiwgICAgICAgIG9wdF9zdHJpbmdwdHIsICAgeyZsb2NhbF9m
cm9tX3ByZWZpeH0gfSwKICAgeyAibG9jYWxfZnJvbV9zdWZmaXgiLCAgICAgICAgb3B0X3N0cmlu
Z3B0ciwgICB7JmxvY2FsX2Zyb21fc3VmZml4fSB9LApAQCAtMjU5LDEwICsyNjYsMTMgQEAKICAg
eyAicHJpbnRfdG9wYml0Y2hhcnMiLCAgICAgICAgb3B0X2Jvb2wsICAgICAgICB7JnByaW50X3Rv
cGJpdGNoYXJzfSB9LAogICB7ICJwcm9jZXNzX2xvZ19wYXRoIiwgICAgICAgICBvcHRfc3RyaW5n
cHRyLCAgIHsmcHJvY2Vzc19sb2dfcGF0aH0gfSwKICAgeyAicHJvZF9yZXF1aXJlc19hZG1pbiIs
ICAgICAgb3B0X2Jvb2wsICAgICAgICB7JnByb2RfcmVxdWlyZXNfYWRtaW59IH0sCisjaWZkZWYg
U1VQUE9SVF9QUk9YWQorICB7ICJwcm94eV9wcm90b2NvbF90aW1lb3V0IiwgICBvcHRfdGltZSwg
ICAgICAgIHsmcHJveHlfcHJvdG9jb2xfdGltZW91dH0gfSwKKyNlbmRpZgogICB7ICJxdWFsaWZ5
X2RvbWFpbiIsICAgICAgICAgICBvcHRfc3RyaW5ncHRyLCAgIHsmcXVhbGlmeV9kb21haW5fc2Vu
ZGVyfSB9LAogICB7ICJxdWFsaWZ5X3JlY2lwaWVudCIsICAgICAgICBvcHRfc3RyaW5ncHRyLCAg
IHsmcXVhbGlmeV9kb21haW5fcmVjaXBpZW50fSB9LAogICB7ICJxdWV1ZV9kb21haW5zIiwgICAg
ICAgICAgICBvcHRfc3RyaW5ncHRyLCAgIHsmcXVldWVfZG9tYWluc30gfSwKLSNpZmRlZiBFWFBF
UklNRU5UQUxfUVVFVUVfUkFNUAorI2lmbmRlZiBESVNBQkxFX1FVRVVFX1JBTVAKICAgeyAicXVl
dWVfZmFzdF9yYW1wIiwgICAgICAgICAgb3B0X2Jvb2wsICAgICAgICB7JnF1ZXVlX2Zhc3RfcmFt
cH0gfSwKICNlbmRpZgogICB7ICJxdWV1ZV9saXN0X3JlcXVpcmVzX2FkbWluIixvcHRfYm9vbCwg
ICAgICAgIHsmcXVldWVfbGlzdF9yZXF1aXJlc19hZG1pbn0gfSwKQEAgLTI5NywxMiArMzA3LDEz
IEBACiAgIHsgInNtdHBfYWNjZXB0X21heCIsICAgICAgICAgIG9wdF9pbnQsICAgICAgICAgeyZz
bXRwX2FjY2VwdF9tYXh9IH0sCiAgIHsgInNtdHBfYWNjZXB0X21heF9ub25tYWlsIiwgIG9wdF9p
bnQsICAgICAgICAgeyZzbXRwX2FjY2VwdF9tYXhfbm9ubWFpbH0gfSwKICAgeyAic210cF9hY2Nl
cHRfbWF4X25vbm1haWxfaG9zdHMiLCBvcHRfc3RyaW5ncHRyLCB7JnNtdHBfYWNjZXB0X21heF9u
b25tYWlsX2hvc3RzfSB9LAotICB7ICJzbXRwX2FjY2VwdF9tYXhfcGVyX2Nvbm5lY3Rpb24iLCBv
cHRfaW50LCAgIHsmc210cF9hY2NlcHRfbWF4X3Blcl9jb25uZWN0aW9ufSB9LAorICB7ICJzbXRw
X2FjY2VwdF9tYXhfcGVyX2Nvbm5lY3Rpb24iLCBvcHRfc3RyaW5ncHRyLCAgIHsmc210cF9hY2Nl
cHRfbWF4X3Blcl9jb25uZWN0aW9ufSB9LAogICB7ICJzbXRwX2FjY2VwdF9tYXhfcGVyX2hvc3Qi
LCBvcHRfc3RyaW5ncHRyLCAgIHsmc210cF9hY2NlcHRfbWF4X3Blcl9ob3N0fSB9LAogICB7ICJz
bXRwX2FjY2VwdF9xdWV1ZSIsICAgICAgICBvcHRfaW50LCAgICAgICAgIHsmc210cF9hY2NlcHRf
cXVldWV9IH0sCiAgIHsgInNtdHBfYWNjZXB0X3F1ZXVlX3Blcl9jb25uZWN0aW9uIiwgb3B0X2lu
dCwgeyZzbXRwX2FjY2VwdF9xdWV1ZV9wZXJfY29ubmVjdGlvbn0gfSwKICAgeyAic210cF9hY2Nl
cHRfcmVzZXJ2ZSIsICAgICAgb3B0X2ludCwgICAgICAgICB7JnNtdHBfYWNjZXB0X3Jlc2VydmV9
IH0sCiAgIHsgInNtdHBfYWN0aXZlX2hvc3RuYW1lIiwgICAgIG9wdF9zdHJpbmdwdHIsICAgeyZy
YXdfYWN0aXZlX2hvc3RuYW1lfSB9LAorICB7ICJzbXRwX2JhY2tsb2dfbW9uaXRvciIsICAgICBv
cHRfaW50LCAgICAgICAgIHsmc210cF9iYWNrbG9nX21vbml0b3J9IH0sCiAgIHsgInNtdHBfYmFu
bmVyIiwgICAgICAgICAgICAgIG9wdF9zdHJpbmdwdHIsICAgeyZzbXRwX2Jhbm5lcn0gfSwKICAg
eyAic210cF9jaGVja19zcG9vbF9zcGFjZSIsICAgb3B0X2Jvb2wsICAgICAgICB7JnNtdHBfY2hl
Y2tfc3Bvb2xfc3BhY2V9IH0sCiAgIHsgInNtdHBfY29ubmVjdF9iYWNrbG9nIiwgICAgIG9wdF9p
bnQsICAgICAgICAgeyZzbXRwX2Nvbm5lY3RfYmFja2xvZ30gfSwKQEAgLTMzNSwxNSArMzQ2LDYg
QEAKICAgeyAic3FsaXRlX2RiZmlsZSIsICAgICAgICAgICAgb3B0X3N0cmluZ3B0ciwgICB7JnNx
bGl0ZV9kYmZpbGV9IH0sCiAgIHsgInNxbGl0ZV9sb2NrX3RpbWVvdXQiLCAgICAgIG9wdF9pbnQs
ICAgICAgICAgeyZzcWxpdGVfbG9ja190aW1lb3V0fSB9LAogI2VuZGlmCi0jaWZkZWYgRVhQRVJJ
TUVOVEFMX1NSUwotICB7ICJzcnNfY29uZmlnIiwgICAgICAgICAgICAgICBvcHRfc3RyaW5ncHRy
LCAgIHsmc3JzX2NvbmZpZ30gfSwKLSAgeyAic3JzX2hhc2hsZW5ndGgiLCAgICAgICAgICAgb3B0
X2ludCwgICAgICAgICB7JnNyc19oYXNobGVuZ3RofSB9LAotICB7ICJzcnNfaGFzaG1pbiIsICAg
ICAgICAgICAgICBvcHRfaW50LCAgICAgICAgIHsmc3JzX2hhc2htaW59IH0sCi0gIHsgInNyc19t
YXhhZ2UiLCAgICAgICAgICAgICAgIG9wdF9pbnQsICAgICAgICAgeyZzcnNfbWF4YWdlfSB9LAot
ICB7ICJzcnNfc2VjcmV0cyIsICAgICAgICAgICAgICBvcHRfc3RyaW5ncHRyLCAgIHsmc3JzX3Nl
Y3JldHN9IH0sCi0gIHsgInNyc191c2VoYXNoIiwgICAgICAgICAgICAgIG9wdF9ib29sLCAgICAg
ICAgeyZzcnNfdXNlaGFzaH0gfSwKLSAgeyAic3JzX3VzZXRpbWVzdGFtcCIsICAgICAgICAgb3B0
X2Jvb2wsICAgICAgICB7JnNyc191c2V0aW1lc3RhbXB9IH0sCi0jZW5kaWYKICAgeyAic3RyaWN0
X2FjbF92YXJzIiwgICAgICAgICAgb3B0X2Jvb2wsICAgICAgICB7JnN0cmljdF9hY2xfdmFyc30g
fSwKICAgeyAic3RyaXBfZXhjZXNzX2FuZ2xlX2JyYWNrZXRzIiwgb3B0X2Jvb2wsICAgICB7JnN0
cmlwX2V4Y2Vzc19hbmdsZV9icmFja2V0c30gfSwKICAgeyAic3RyaXBfdHJhaWxpbmdfZG90Iiwg
ICAgICAgb3B0X2Jvb2wsICAgICAgICB7JnN0cmlwX3RyYWlsaW5nX2RvdH0gfSwKQEAgLTM2Nyw2
ICszNjksNyBAQAogICB7ICJ0aW1lem9uZSIsICAgICAgICAgICAgICAgICBvcHRfc3RyaW5ncHRy
LCAgIHsmdGltZXpvbmVfc3RyaW5nfSB9LAogICB7ICJ0bHNfYWR2ZXJ0aXNlX2hvc3RzIiwgICAg
ICBvcHRfc3RyaW5ncHRyLCAgIHsmdGxzX2FkdmVydGlzZV9ob3N0c30gfSwKICNpZm5kZWYgRElT
QUJMRV9UTFMKKyAgeyAidGxzX2FscG4iLAkJICAgICAgICBvcHRfc3RyaW5ncHRyLCAgIHsmdGxz
X2FscG59IH0sCiAgIHsgInRsc19jZXJ0aWZpY2F0ZSIsICAgICAgICAgIG9wdF9zdHJpbmdwdHIs
ICAgeyZ0bHNfY2VydGlmaWNhdGV9IH0sCiAgIHsgInRsc19jcmwiLCAgICAgICAgICAgICAgICAg
IG9wdF9zdHJpbmdwdHIsICAgeyZ0bHNfY3JsfSB9LAogICB7ICJ0bHNfZGhfbWF4X2JpdHMiLCAg
ICAgICAgICBvcHRfaW50LCAgICAgICAgIHsmdGxzX2RoX21heF9iaXRzfSB9LApAQCAtMzc5LDcg
KzM4Miw3IEBACiAgIHsgInRsc19wcml2YXRla2V5IiwgICAgICAgICAgIG9wdF9zdHJpbmdwdHIs
ICAgeyZ0bHNfcHJpdmF0ZWtleX0gfSwKICAgeyAidGxzX3JlbWVtYmVyX2VzbXRwIiwgICAgICAg
b3B0X2Jvb2wsICAgICAgICB7JnRsc19yZW1lbWJlcl9lc210cH0gfSwKICAgeyAidGxzX3JlcXVp
cmVfY2lwaGVycyIsICAgICAgb3B0X3N0cmluZ3B0ciwgICB7JnRsc19yZXF1aXJlX2NpcGhlcnN9
IH0sCi0jIGlmZGVmIEVYUEVSSU1FTlRBTF9UTFNfUkVTVU1FCisjIGlmbmRlZiBESVNBQkxFX1RM
U19SRVNVTUUKICAgeyAidGxzX3Jlc3VtcHRpb25faG9zdHMiLCAgICAgb3B0X3N0cmluZ3B0ciwg
ICB7JnRsc19yZXN1bXB0aW9uX2hvc3RzfSB9LAogIyBlbmRpZgogICB7ICJ0bHNfdHJ5X3Zlcmlm
eV9ob3N0cyIsICAgICBvcHRfc3RyaW5ncHRyLCAgIHsmdGxzX3RyeV92ZXJpZnlfaG9zdHN9IH0s
CkBAIC02NDMsNyArNjQ2LDcgQEAKIG1hY3JvX2l0ZW0gKgogbWFjcm9fY3JlYXRlKGNvbnN0IHVz
Y2hhciAqIG5hbWUsIGNvbnN0IHVzY2hhciAqIHZhbCwgQk9PTCBjb21tYW5kX2xpbmUpCiB7Ci1t
YWNyb19pdGVtICogbSA9IHN0b3JlX2dldChzaXplb2YobWFjcm9faXRlbSksIEZBTFNFKTsKK21h
Y3JvX2l0ZW0gKiBtID0gc3RvcmVfZ2V0KHNpemVvZihtYWNyb19pdGVtKSwgR0VUX1VOVEFJTlRF
RCk7CiAKIFJFQURDT05GX0RFQlVHIGZwcmludGYoc3RkZXJyLCAiJXM6ICclcycgJyVzJ1xuIiwg
X19GVU5DVElPTl9fLCBuYW1lLCB2YWwpOwogbS0+bmV4dCA9IE5VTEw7CkBAIC0xMDczLDcgKzEw
NzYsNyBAQAogCiAgICAgaWYgKGNvbmZpZ19saW5lcykKICAgICAgIHNhdmVfY29uZmlnX3Bvc2l0
aW9uKGNvbmZpZ19maWxlbmFtZSwgY29uZmlnX2xpbmVubyk7Ci0gICAgc2F2ZSA9IHN0b3JlX2dl
dChzaXplb2YoY29uZmlnX2ZpbGVfaXRlbSksIEZBTFNFKTsKKyAgICBzYXZlID0gc3RvcmVfZ2V0
KHNpemVvZihjb25maWdfZmlsZV9pdGVtKSwgR0VUX1VOVEFJTlRFRCk7CiAgICAgc2F2ZS0+bmV4
dCA9IGNvbmZpZ19maWxlX3N0YWNrOwogICAgIGNvbmZpZ19maWxlX3N0YWNrID0gc2F2ZTsKICAg
ICBzYXZlLT5maWxlID0gY29uZmlnX2ZpbGU7CkBAIC0xNDIyLDcgKzE0MjUsNyBAQAogc3RhdGlj
IHJld3JpdGVfcnVsZSAqCiByZWFkY29uZl9vbmVfcmV3cml0ZShjb25zdCB1c2NoYXIgKnAsIGlu
dCAqZXhpc3RmbGFncywgQk9PTCBpc2dsb2JhbCkKIHsKLXJld3JpdGVfcnVsZSAqbmV4dCA9IHN0
b3JlX2dldChzaXplb2YocmV3cml0ZV9ydWxlKSwgRkFMU0UpOworcmV3cml0ZV9ydWxlICogbmV4
dCA9IHN0b3JlX2dldChzaXplb2YocmV3cml0ZV9ydWxlKSwgR0VUX1VOVEFJTlRFRCk7CiAKIG5l
eHQtPm5leHQgPSBOVUxMOwogbmV4dC0+a2V5ID0gc3RyaW5nX2RlcXVvdGUoJnApOwpAQCAtMTg1
NSw2ICsxODU4LDcgQEAKICAgICAgICAgZmxhZ3B0ciA9IChpbnQgKilvbDMtPnYudmFsdWU7CiAg
ICAgICAgIH0KIAorICAgICAgLyogVGhpcyB3aWxsIHRyYXAgaWYgc3B0ciBpcyB0YWludGVkLiBO
b3Qgc3VyZSBpZiB0aGF0IGNhbiBoYXBwZW4gKi8KICAgICAgIHdoaWxlICgocCA9IHN0cmluZ19u
ZXh0aW5saXN0KENVU1MgJnNwdHIsICZzZXAsIGJpZ19idWZmZXIsIEJJR19CVUZGRVJfU0laRSkp
KQogICAgICAgICB7CiAgICAgICAgIHJld3JpdGVfcnVsZSAqbmV4dCA9IHJlYWRjb25mX29uZV9y
ZXdyaXRlKHAsIGZsYWdwdHIsIEZBTFNFKTsKQEAgLTE5OTksNiArMjAwMyw3IEBACiAgICAgICB3
aGlsZSAoY291bnQtLSA+IDEpCiAgICAgICAgIHsKICAgICAgICAgaW50IHNlcCA9IDA7CisJLyog
SWYgcCBpcyB0YWludGVkIHdlIHRyYXAuICBOb3Qgc3VyZSB0aGF0IGNhbiBoYXBwZW4gKi8KICAg
ICAgICAgKHZvaWQpc3RyaW5nX25leHRpbmxpc3QoJnAsICZzZXAsIGJpZ19idWZmZXIsIEJJR19C
VUZGRVJfU0laRSk7CiAgICAgICAgIGlmICghcm91dGVfZmluZHVzZXIoYmlnX2J1ZmZlciwgTlVM
TCwgJnVpZCkpCiAgICAgICAgICAgbG9nX3dyaXRlKDAsIExPR19QQU5JQ19ESUV8TE9HX0NPTkZJ
R19JTiwgInVzZXIgJXMgd2FzIG5vdCBmb3VuZCIsCkBAIC0yMDQwLDYgKzIwNDUsNyBAQAogICAg
ICAgd2hpbGUgKGNvdW50LS0gPiAxKQogICAgICAgICB7CiAgICAgICAgIGludCBzZXAgPSAwOwor
CS8qIElmIHAgaXMgdGFpbnRlZCB3ZSB0cmFwLiAgTm90IHN1cmUgdGhhdCBjYW4gaGFwcGVuICov
CiAgICAgICAgICh2b2lkKXN0cmluZ19uZXh0aW5saXN0KCZwLCAmc2VwLCBiaWdfYnVmZmVyLCBC
SUdfQlVGRkVSX1NJWkUpOwogICAgICAgICBpZiAoIXJvdXRlX2ZpbmRncm91cChiaWdfYnVmZmVy
LCAmZ2lkKSkKICAgICAgICAgICBsb2dfd3JpdGUoMCwgTE9HX1BBTklDX0RJRXxMT0dfQ09ORklH
X0lOLCAiZ3JvdXAgJXMgd2FzIG5vdCBmb3VuZCIsCkBAIC0yOTk3LDcgKzMwMDMsNyBAQAogQk9P
TCBmb3JjZWNhY2hlID0gRkFMU0U7CiB1c2NoYXIgKnNzOwogdHJlZV9ub2RlICp0OwotbmFtZWRs
aXN0X2Jsb2NrICogbmIgPSBzdG9yZV9nZXQoc2l6ZW9mKG5hbWVkbGlzdF9ibG9jayksIEZBTFNF
KTsKK25hbWVkbGlzdF9ibG9jayAqIG5iID0gc3RvcmVfZ2V0X3Blcm0oc2l6ZW9mKG5hbWVkbGlz
dF9ibG9jayksIEZBTFNFKTsKIAogaWYgKFVzdHJuY21wKHMsICJfY2FjaGUiLCA2KSA9PSAwKQog
ICB7CkBAIC0zMDE1LDcgKzMwMjEsNyBAQAogVXNraXBfd2hpdGVzcGFjZSgmcyk7CiBzcyA9IHM7
CiB3aGlsZSAoaXNhbG51bSgqcykgfHwgKnMgPT0gJ18nKSBzKys7Ci10ID0gc3RvcmVfZ2V0KHNp
emVvZih0cmVlX25vZGUpICsgcy1zcywgaXNfdGFpbnRlZChzcykpOwordCA9IHN0b3JlX2dldChz
aXplb2YodHJlZV9ub2RlKSArIHMtc3MsIHNzKTsKIFVzdHJuY3B5KHQtPm5hbWUsIHNzLCBzLXNz
KTsKIHQtPm5hbWVbcy1zc10gPSAwOwogVXNraXBfd2hpdGVzcGFjZSgmcyk7CkBAIC0zMTIyLDYw
ICszMTI4LDYwIEBACiAKIC8qIExvb3AgdGhyb3VnaCB0aGUgcG9zc2libGUgZmlsZSBuYW1lcyAq
LwogCisvKiBTaG91bGQgbmV2ZXIgYmUgYSB0YWludGVkIGxpc3QgKi8KIHdoaWxlKChmaWxlbmFt
ZSA9IHN0cmluZ19uZXh0aW5saXN0KCZsaXN0LCAmc2VwLCBiaWdfYnVmZmVyLCBiaWdfYnVmZmVy
X3NpemUpKSkKICAgewogCiAgIC8qIEN1dCBvdXQgYWxsIHRoZSBmYW5jeSBwcm9jZXNzaW5nIHVu
bGVzcyBzcGVjaWZpY2FsbHkgd2FudGVkICovCiAKLSAgI2lmIGRlZmluZWQoQ09ORklHVVJFX0ZJ
TEVfVVNFX05PREUpIHx8IGRlZmluZWQoQ09ORklHVVJFX0ZJTEVfVVNFX0VVSUQpCisjaWYgZGVm
aW5lZChDT05GSUdVUkVfRklMRV9VU0VfTk9ERSkgfHwgZGVmaW5lZChDT05GSUdVUkVfRklMRV9V
U0VfRVVJRCkKICAgdXNjaGFyICpzdWZmaXggPSBmaWxlbmFtZSArIFVzdHJsZW4oZmlsZW5hbWUp
OwogCiAgIC8qIFRyeSBmb3IgdGhlIG5vZGUtc3BlY2lmaWMgZmlsZSBpZiBhIG5vZGUgbmFtZSBl
eGlzdHMgKi8KIAotICAjaWZkZWYgQ09ORklHVVJFX0ZJTEVfVVNFX05PREUKKyMgaWZkZWYgQ09O
RklHVVJFX0ZJTEVfVVNFX05PREUKICAgc3RydWN0IHV0c25hbWUgdXRzOwogICBpZiAodW5hbWUo
JnV0cykgPj0gMCkKICAgICB7Ci0gICAgI2lmZGVmIENPTkZJR1VSRV9GSUxFX1VTRV9FVUlECisj
ICBpZmRlZiBDT05GSUdVUkVfRklMRV9VU0VfRVVJRAogICAgIHNwcmludGYoQ1Mgc3VmZml4LCAi
LiVsZC4lLjI1NnMiLCAobG9uZyBpbnQpb3JpZ2luYWxfZXVpZCwgdXRzLm5vZGVuYW1lKTsKLSAg
ICBjb25maWdfZmlsZSA9IFVmb3BlbihmaWxlbmFtZSwgInJiIik7Ci0gICAgaWYgKGNvbmZpZ19m
aWxlID09IE5VTEwpCi0gICAgI2VuZGlmICAvKiBDT05GSUdVUkVfRklMRV9VU0VfRVVJRCAqLwor
ICAgIGlmICghKGNvbmZpZ19maWxlID0gVWZvcGVuKGZpbGVuYW1lLCAicmIiKSkpCisjICBlbmRp
ZiAgLyogQ09ORklHVVJFX0ZJTEVfVVNFX0VVSUQgKi8KICAgICAgIHsKICAgICAgIHNwcmludGYo
Q1Mgc3VmZml4LCAiLiUuMjU2cyIsIHV0cy5ub2RlbmFtZSk7CiAgICAgICBjb25maWdfZmlsZSA9
IFVmb3BlbihmaWxlbmFtZSwgInJiIik7CiAgICAgICB9CiAgICAgfQotICAjZW5kaWYgIC8qIENP
TkZJR1VSRV9GSUxFX1VTRV9OT0RFICovCisjIGVuZGlmICAvKiBDT05GSUdVUkVfRklMRV9VU0Vf
Tk9ERSAqLwogCiAgIC8qIE90aGVyd2lzZSwgdHJ5IHRoZSBnZW5lcmljIG5hbWUsIHBvc3NpYmx5
IHdpdGggdGhlIGV1aWQgYWRkZWQgKi8KIAotICAjaWZkZWYgQ09ORklHVVJFX0ZJTEVfVVNFX0VV
SUQKLSAgaWYgKGNvbmZpZ19maWxlID09IE5VTEwpCisjIGlmZGVmIENPTkZJR1VSRV9GSUxFX1VT
RV9FVUlECisgIGlmICghY29uZmlnX2ZpbGUpCiAgICAgewogICAgIHNwcmludGYoQ1Mgc3VmZml4
LCAiLiVsZCIsIChsb25nIGludClvcmlnaW5hbF9ldWlkKTsKICAgICBjb25maWdfZmlsZSA9IFVm
b3BlbihmaWxlbmFtZSwgInJiIik7CiAgICAgfQotICAjZW5kaWYgIC8qIENPTkZJR1VSRV9GSUxF
X1VTRV9FVUlEICovCisjIGVuZGlmICAvKiBDT05GSUdVUkVfRklMRV9VU0VfRVVJRCAqLwogCiAg
IC8qIEZpbmFsbHksIHRyeSB0aGUgdW5hZG9ybmVkIG5hbWUgKi8KIAotICBpZiAoY29uZmlnX2Zp
bGUgPT0gTlVMTCkKKyAgaWYgKCFjb25maWdfZmlsZSkKICAgICB7CiAgICAgKnN1ZmZpeCA9IDA7
CiAgICAgY29uZmlnX2ZpbGUgPSBVZm9wZW4oZmlsZW5hbWUsICJyYiIpOwogICAgIH0KLSAgI2Vs
c2UgIC8qIGlmIG5laXRoZXIgZGVmaW5lZCAqLworI2Vsc2UgIC8qIGlmIG5laXRoZXIgZGVmaW5l
ZCAqLwogCiAgIC8qIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlIHdoZW4gdGhlIGZhbmN5IHByb2Nl
c3NpbmcgaXMgbm90IGluY2x1ZGVkLiAqLwogCiAgIGNvbmZpZ19maWxlID0gVWZvcGVuKGZpbGVu
YW1lLCAicmIiKTsKLSAgI2VuZGlmCisjZW5kaWYKIAogICAvKiBJZiB0aGUgZmlsZSBkb2VzIG5v
dCBleGlzdCwgY29udGludWUgdG8gdHJ5IGFueSBvdGhlcnMuIEZvciBhbnkgb3RoZXIKICAgZXJy
b3IsIGJyZWFrIG91dCAoYW5kIGRpZSkuICovCiAKLSAgaWYgKGNvbmZpZ19maWxlICE9IE5VTEwg
fHwgZXJybm8gIT0gRU5PRU5UKSBicmVhazsKKyAgaWYgKGNvbmZpZ19maWxlIHx8IGVycm5vICE9
IEVOT0VOVCkgYnJlYWs7CiAgIH0KIAogLyogT24gc3VjY2Vzcywgc2F2ZSB0aGUgbmFtZSBmb3Ig
dmVyaWZpY2F0aW9uOyBjb25maWdfZmlsZW5hbWUgaXMgdXNlZCB3aGVuCkBAIC0zMTk4LDM5ICsz
MjA0LDM3IEBACiAgICAgY29uZmlnX21haW5fZGlyZWN0b3J5ID0gbGFzdF9zbGFzaCA9PSBmaWxl
bmFtZSA/IFVTIi8iIDogc3RyaW5nX2NvcHluKGZpbGVuYW1lLCBsYXN0X3NsYXNoIC0gZmlsZW5h
bWUpOwogICBlbHNlCiAgICAgewotICAgICAgLyogcmVsYXRpdmUgY29uZmlndXJhdGlvbiBmaWxl
IG5hbWU6IHdvcmtpbmcgZGlyICsgLyArIGJhc2VuYW1lKGZpbGVuYW1lKSAqLworICAgIC8qIHJl
bGF0aXZlIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lOiB3b3JraW5nIGRpciArIC8gKyBiYXNlbmFt
ZShmaWxlbmFtZSkgKi8KIAotICAgICAgdXNjaGFyIGJ1ZltQQVRIX01BWF07Ci0gICAgICBnc3Ry
aW5nICogZzsKKyAgICB1c2NoYXIgYnVmW1BBVEhfTUFYXTsKKyAgICBnc3RyaW5nICogZzsKIAot
ICAgICAgaWYgKG9zX2dldGN3ZChidWYsIFBBVEhfTUFYKSA9PSBOVUxMKQotICAgICAgICB7Ci0g
ICAgICAgIHBlcnJvcigiZXhpbTogZ2V0Y3dkIik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJF
KTsKLSAgICAgICAgfQotICAgICAgZyA9IHN0cmluZ19jYXQoTlVMTCwgYnVmKTsKKyAgICBpZiAo
b3NfZ2V0Y3dkKGJ1ZiwgUEFUSF9NQVgpID09IE5VTEwpCisgICAgICB7CisgICAgICBwZXJyb3Io
ImV4aW06IGdldGN3ZCIpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAg
IGcgPSBzdHJpbmdfY2F0KE5VTEwsIGJ1Zik7CiAKLSAgICAgIC8qIElmIHRoZSBkaXIgZG9lcyBu
b3QgZW5kIHdpdGggYSAiLyIsIGFwcGVuZCBvbmUgKi8KLSAgICAgIGlmIChnLT5zW2ctPnB0ci0x
XSAhPSAnLycpCi0gICAgICAgIGcgPSBzdHJpbmdfY2F0bihnLCBVUyIvIiwgMSk7CisgICAgLyog
SWYgdGhlIGRpciBkb2VzIG5vdCBlbmQgd2l0aCBhICIvIiwgYXBwZW5kIG9uZSAqLworICAgIGlm
IChnLT5zW2ctPnB0ci0xXSAhPSAnLycpCisgICAgICBnID0gc3RyaW5nX2NhdG4oZywgVVMiLyIs
IDEpOwogCi0gICAgICAvKiBJZiB0aGUgY29uZmlnIGZpbGUgY29udGFpbnMgYSAiLyIsIGV4dHJh
Y3QgdGhlIGRpcmVjdG9yeSBwYXJ0ICovCi0gICAgICBpZiAobGFzdF9zbGFzaCkKLSAgICAgICAg
ZyA9IHN0cmluZ19jYXRuKGcsIGZpbGVuYW1lLCBsYXN0X3NsYXNoIC0gZmlsZW5hbWUpOworICAg
IC8qIElmIHRoZSBjb25maWcgZmlsZSBjb250YWlucyBhICIvIiwgZXh0cmFjdCB0aGUgZGlyZWN0
b3J5IHBhcnQgKi8KKyAgICBpZiAobGFzdF9zbGFzaCkKKyAgICAgIGcgPSBzdHJpbmdfY2F0bihn
LCBmaWxlbmFtZSwgbGFzdF9zbGFzaCAtIGZpbGVuYW1lKTsKIAotICAgICAgY29uZmlnX21haW5f
ZGlyZWN0b3J5ID0gc3RyaW5nX2Zyb21fZ3N0cmluZyhnKTsKKyAgICBjb25maWdfbWFpbl9kaXJl
Y3RvcnkgPSBzdHJpbmdfZnJvbV9nc3RyaW5nKGcpOwogICAgIH0KICAgY29uZmlnX2RpcmVjdG9y
eSA9IGNvbmZpZ19tYWluX2RpcmVjdG9yeTsKICAgfQogZWxzZQotICB7Ci0gIGlmIChmaWxlbmFt
ZSA9PSBOVUxMKQorICBpZiAoIWZpbGVuYW1lKQogICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxM
T0dfUEFOSUNfRElFLCAibm9uLWV4aXN0ZW50IGNvbmZpZ3VyYXRpb24gZmlsZShzKTogIgogICAg
ICAgIiVzIiwgY29uZmlnX21haW5fZmlsZWxpc3QpOwogICBlbHNlCi0gICAgbG9nX3dyaXRlKDAs
IExPR19NQUlOfExPR19QQU5JQ19ESUUsICIlcyIsIHN0cmluZ19vcGVuX2ZhaWxlZChlcnJubywK
LSAgICAgICJjb25maWd1cmF0aW9uIGZpbGUgJXMiLCBmaWxlbmFtZSkpOwotICB9CisgICAgbG9n
X3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQ19ESUUsICIlcyIsCisgICAgICBzdHJpbmdfb3Bl
bl9mYWlsZWQoImNvbmZpZ3VyYXRpb24gZmlsZSAlcyIsIGZpbGVuYW1lKSk7CiAKIC8qIE5vdywg
b25jZSB3ZSBmb3VuZCBhbmQgb3BlbmVkIG91ciBjb25maWd1cmF0aW9uIGZpbGUsIHdlIGNoYW5n
ZSB0aGUgZGlyZWN0b3J5CiB0byBhIHNhZmUgcGxhY2UuIExhdGVyIHdlIGNoYW5nZSB0byAkc3Bv
b2xfZGlyZWN0b3J5LiAqLwpAQCAtMzI1MCwxOSArMzI1NCwxOSBAQAogICAgIGxvZ193cml0ZSgw
LCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLCAiZmFpbGVkIHRvIHN0YXQgY29uZmlndXJhdGlvbiBm
aWxlICVzIiwKICAgICAgIGJpZ19idWZmZXIpOwogCi0gIGlmICgoc3RhdGJ1Zi5zdF91aWQgIT0g
cm9vdF91aWQgICAgICAgICAgICAgICAgLyogb3duZXIgbm90IHJvb3QgKi8KLSAgICAgICAjaWZk
ZWYgQ09ORklHVVJFX09XTkVSCi0gICAgICAgJiYgc3RhdGJ1Zi5zdF91aWQgIT0gY29uZmlnX3Vp
ZCAgICAgICAgICAgLyogb3duZXIgbm90IHRoZSBzcGVjaWFsIG9uZSAqLwotICAgICAgICNlbmRp
ZgotICAgICAgICAgKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9y
ICovCi0gICAgICAoc3RhdGJ1Zi5zdF9naWQgIT0gcm9vdF9naWQgICAgICAgICAgICAgICAgLyog
Z3JvdXAgbm90IHJvb3QgJiAqLwotICAgICAgICNpZmRlZiBDT05GSUdVUkVfR1JPVVAKLSAgICAg
ICAmJiBzdGF0YnVmLnN0X2dpZCAhPSBjb25maWdfZ2lkICAgICAgICAgICAvKiBncm91cCBub3Qg
dGhlIHNwZWNpYWwgb25lICovCi0gICAgICAgI2VuZGlmCi0gICAgICAgJiYgKHN0YXRidWYuc3Rf
bW9kZSAmIDAyMCkgIT0gMCkgfHwgICAgICAgLyogZ3JvdXAgd3JpdGVhYmxlICAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9yICovCi0gICAg
ICAoKHN0YXRidWYuc3RfbW9kZSAmIDIpICE9IDApKSAgICAgICAgICAgICAgLyogd29ybGQgd3Jp
dGVhYmxlICAqLwotCisgIGlmICggICAgc3RhdGJ1Zi5zdF91aWQgIT0gcm9vdF91aWQJCS8qIG93
bmVyIG5vdCByb290ICovCisjaWZkZWYgQ09ORklHVVJFX09XTkVSCisgICAgICAgJiYgc3RhdGJ1
Zi5zdF91aWQgIT0gY29uZmlnX3VpZAkJLyogb3duZXIgbm90IHRoZSBzcGVjaWFsIG9uZSAqLwor
I2VuZGlmCisgICAgIHx8CQkJCQkJLyogb3IgKi8KKwkgIHN0YXRidWYuc3RfZ2lkICE9IHJvb3Rf
Z2lkCQkvKiBncm91cCBub3Qgcm9vdCAmICovCisjaWZkZWYgQ09ORklHVVJFX0dST1VQCisgICAg
ICAgJiYgc3RhdGJ1Zi5zdF9naWQgIT0gY29uZmlnX2dpZAkJLyogZ3JvdXAgbm90IHRoZSBzcGVj
aWFsIG9uZSAqLworI2VuZGlmCisgICAgICAgJiYgKHN0YXRidWYuc3RfbW9kZSAmIDAyMCkgIT0g
MAkJLyogZ3JvdXAgd3JpdGVhYmxlICAqLworICAgICB8fAkJCQkJCS8qIG9yICovCisgICAgICAg
KHN0YXRidWYuc3RfbW9kZSAmIDIpICE9IDAJCS8qIHdvcmxkIHdyaXRlYWJsZSAgKi8KKyAgICAg
KQogICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLCAiRXhpbSBjb25maWd1
cmF0aW9uIGZpbGUgJXMgaGFzIHRoZSAiCiAgICAgICAid3Jvbmcgb3duZXIsIGdyb3VwLCBvciBt
b2RlIiwgYmlnX2J1ZmZlcik7CiAKQEAgLTMyNzUsNyArMzI3OSw3IEBACiAgIGlmIChzdGF0YnVm
LnN0X3NpemUgPiA4MTkyKQogICAgIHsKICAgICBybWFyayByID0gc3RvcmVfbWFyaygpOwotICAg
IHZvaWQgKiBkdW1teSA9IHN0b3JlX2dldCgoaW50KXN0YXRidWYuc3Rfc2l6ZSwgRkFMU0UpOwor
ICAgIHZvaWQgKiBkdW1teSA9IHN0b3JlX2dldCgoaW50KXN0YXRidWYuc3Rfc2l6ZSwgR0VUX1VO
VEFJTlRFRCk7CiAgICAgc3RvcmVfcmVzZXQocik7CiAgICAgfQogICB9CkBAIC0zMzA5LDExICsz
MzEzLDExIEBACiAgICAgcmVhZF9uYW1lZF9saXN0KCZob3N0bGlzdF9hbmNob3IsICZob3N0bGlz
dF9jb3VudCwKICAgICAgIE1BWF9OQU1FRF9MSVNULCB0KzgsIFVTImhvc3QgbGlzdCIsIGhpZGUp
OwogCi0gIGVsc2UgaWYgKFVzdHJuY21wKHQsIFVTImFkZHJlc3NsaXN0IiwgMTEpID09IDApCisg
IGVsc2UgaWYgKFVzdHJuY21wKHQsICJhZGRyZXNzbGlzdCIsIDExKSA9PSAwKQogICAgIHJlYWRf
bmFtZWRfbGlzdCgmYWRkcmVzc2xpc3RfYW5jaG9yLCAmYWRkcmVzc2xpc3RfY291bnQsCiAgICAg
ICBNQVhfTkFNRURfTElTVCwgdCsxMSwgVVMiYWRkcmVzcyBsaXN0IiwgaGlkZSk7CiAKLSAgZWxz
ZSBpZiAoVXN0cm5jbXAodCwgVVMibG9jYWxwYXJ0bGlzdCIsIDEzKSA9PSAwKQorICBlbHNlIGlm
IChVc3RybmNtcCh0LCAibG9jYWxwYXJ0bGlzdCIsIDEzKSA9PSAwKQogICAgIHJlYWRfbmFtZWRf
bGlzdCgmbG9jYWxwYXJ0bGlzdF9hbmNob3IsICZsb2NhbHBhcnRsaXN0X2NvdW50LAogICAgICAg
TUFYX05BTUVEX0xJU1QsIHQrMTMsIFVTImxvY2FsIHBhcnQgbGlzdCIsIGhpZGUpOwogCkBAIC0z
MzMyLDcgKzMzMzYsNyBAQAogLyogSWYgdGhlIHRpbWV6b25lIHN0cmluZyBpcyBlbXB0eSwgc2V0
IGl0IHRvIE5VTEwsIGltcGx5aW5nIG5vIFRaIHZhcmlhYmxlCiB3YW50ZWQuICovCiAKLWlmICh0
aW1lem9uZV9zdHJpbmcgIT0gTlVMTCAmJiAqdGltZXpvbmVfc3RyaW5nID09IDApIHRpbWV6b25l
X3N0cmluZyA9IE5VTEw7CitpZiAodGltZXpvbmVfc3RyaW5nICYmICEqdGltZXpvbmVfc3RyaW5n
KSB0aW1lem9uZV9zdHJpbmcgPSBOVUxMOwogCiAvKiBUaGUgbWF4IHJldHJ5IGludGVydmFsIG11
c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiAyNCBob3Vycy4gKi8KIApAQCAtMzM1MywxMCArMzM1Nywx
MSBAQAogY2Fub25pemUgaXQuIFNvbWUgcGVvcGxlIGxpa2UgdXBwZXIgY2FzZSBsZXR0ZXJzIGlu
IHRoZWlyIGhvc3QgbmFtZXMsIHNvIHdlCiBkb24ndCBmb3JjZSB0aGUgY2FzZS4gKi8KIAotaWYg
KHByaW1hcnlfaG9zdG5hbWUgPT0gTlVMTCkKK2lmICghcHJpbWFyeV9ob3N0bmFtZSkKICAgewot
ICBjb25zdCB1c2NoYXIgKmhvc3RuYW1lOworICBjb25zdCB1c2NoYXIgKiBob3N0bmFtZTsKICAg
c3RydWN0IHV0c25hbWUgdXRzOworCiAgIGlmICh1bmFtZSgmdXRzKSA8IDApCiAgICAgbG9nX3dy
aXRlKDAsIExPR19NQUlOfExPR19QQU5JQ19ESUUsICJ1bmFtZSgpIGZhaWxlZCB0byB5aWVsZCBo
b3N0IG5hbWUiKTsKICAgaG9zdG5hbWUgPSBVUyB1dHMubm9kZW5hbWU7CkBAIC0zMzY2LDMzICsz
MzcxLDI5IEBACiAgICAgaW50IGFmID0gQUZfSU5FVDsKICAgICBzdHJ1Y3QgaG9zdGVudCAqaG9z
dGRhdGE7CiAKLSAgICAjaWYgSEFWRV9JUFY2Ci0gICAgaWYgKCFkaXNhYmxlX2lwdjYgJiYgKGRu
c19pcHY0X2xvb2t1cCA9PSBOVUxMIHx8Ci0gICAgICAgICBtYXRjaF9pc2lubGlzdChob3N0bmFt
ZSwgQ1VTUyAmZG5zX2lwdjRfbG9va3VwLCAwLCBOVUxMLCBOVUxMLAorI2lmIEhBVkVfSVBWNgor
ICAgIGlmICggICFkaXNhYmxlX2lwdjYKKyAgICAgICAmJiAoICAhZG5zX2lwdjRfbG9va3VwCisJ
ICB8fCBtYXRjaF9pc2lubGlzdChob3N0bmFtZSwgQ1VTUyAmZG5zX2lwdjRfbG9va3VwLCAwLCBO
VUxMLCBOVUxMLAogCSAgICBNQ0xfRE9NQUlOLCBUUlVFLCBOVUxMKSAhPSBPSykpCiAgICAgICBh
ZiA9IEFGX0lORVQ2OwotICAgICNlbHNlCi0gICAgYWYgPSBBRl9JTkVUOwotICAgICNlbmRpZgor
I2VuZGlmCiAKICAgICBmb3IgKDs7KQogICAgICAgewotICAgICAgI2lmIEhBVkVfSVBWNgotICAg
ICAgICAjaWYgSEFWRV9HRVRJUE5PREVCWU5BTUUKKyNpZiBIQVZFX0lQVjYKKyMgaWYgSEFWRV9H
RVRJUE5PREVCWU5BTUUKICAgICAgICAgaW50IGVycm9yX251bTsKICAgICAgICAgaG9zdGRhdGEg
PSBnZXRpcG5vZGVieW5hbWUoQ1MgaG9zdG5hbWUsIGFmLCAwLCAmZXJyb3JfbnVtKTsKICAgICAg
ICAgI2Vsc2UKICAgICAgICAgaG9zdGRhdGEgPSBnZXRob3N0YnluYW1lMihDUyBob3N0bmFtZSwg
YWYpOwotICAgICAgICAjZW5kaWYKLSAgICAgICNlbHNlCisjIGVuZGlmCisjZWxzZQogICAgICAg
aG9zdGRhdGEgPSBnZXRob3N0YnluYW1lKENTIGhvc3RuYW1lKTsKLSAgICAgICNlbmRpZgorI2Vu
ZGlmCiAKLSAgICAgIGlmIChob3N0ZGF0YSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgIGhv
c3RuYW1lID0gVVMgaG9zdGRhdGEtPmhfbmFtZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
KyAgICAgIGlmIChob3N0ZGF0YSkKKyAgICAgICAgeyBob3N0bmFtZSA9IFVTIGhvc3RkYXRhLT5o
X25hbWU7IGJyZWFrOyB9CiAKICAgICAgIGlmIChhZiA9PSBBRl9JTkVUKSBicmVhazsKICAgICAg
IGFmID0gQUZfSU5FVDsKQEAgLTM0MzUsNiArMzQzNiw3IEBACiAgICAgICAiXCIlc1wiOiAlcyIs
IGxvZ19maWxlX3BhdGgsIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSk7CiAKICAgc3MgPSBzOworICAv
KiBzaG91bGQgbmV2ZXIgYmUgYSB0YWludGVkIGxpc3QgKi8KICAgd2hpbGUgKChzc3MgPSBzdHJp
bmdfbmV4dGlubGlzdCgmc3MsICZzZXAsIGJpZ19idWZmZXIsIGJpZ19idWZmZXJfc2l6ZSkpKQog
ICAgIHsKICAgICB1c2NoYXIgKnQ7CkBAIC0zNDc5LDcgKzM0ODEsNyBAQAogCiAvKiBFeHBhbmQg
cGlkX2ZpbGVfcGF0aCAqLwogCi1pZiAoKnBpZF9maWxlX3BhdGggIT0gMCkKK2lmICgqcGlkX2Zp
bGVfcGF0aCkKICAgewogICBpZiAoIShzID0gZXhwYW5kX3N0cmluZyhwaWRfZmlsZV9wYXRoKSkp
CiAgICAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQ19ESUUsICJmYWlsZWQgdG8gZXhw
YW5kIHBpZF9maWxlX3BhdGggIgpAQCAtMzQ4OSw3ICszNDkxLDcgQEAKIAogLyogU2V0IGRlZmF1
bHQgdmFsdWUgb2YgcHJvY2Vzc19sb2dfcGF0aCAqLwogCi1pZiAoIXByb2Nlc3NfbG9nX3BhdGgg
fHwgKnByb2Nlc3NfbG9nX3BhdGggPT0nXDAnKQoraWYgKCFwcm9jZXNzX2xvZ19wYXRoIHx8ICEq
cHJvY2Vzc19sb2dfcGF0aCkKICAgcHJvY2Vzc19sb2dfcGF0aCA9IHN0cmluZ19zcHJpbnRmKCIl
cy9leGltLXByb2Nlc3MuaW5mbyIsIHNwb29sX2RpcmVjdG9yeSk7CiAKIC8qIENvbXBpbGUgdGhl
IHJlZ2V4IGZvciBtYXRjaGluZyBhIFVVQ1Atc3R5bGUgIkZyb21fIiBsaW5lIGluIGFuIGluY29t
aW5nCkBAIC0zNTQxLDcgKzM1NDMsNyBAQAogICAgIGxvZ193cml0ZSgwLCBMT0dfUEFOSUNfRElF
fExPR19DT05GSUcsCiAgICAgICAiZXJyb3IgaW4gZXJyb3JzX3JlcGx5X3RvICglcyk6ICVzIiwg
ZXJyb3JzX3JlcGx5X3RvLCBlcnJtZXNzKTsKIAotICBpZiAoZG9tYWluID09IDApCisgIGlmICgh
ZG9tYWluKQogICAgIGxvZ193cml0ZSgwLCBMT0dfUEFOSUNfRElFfExPR19DT05GSUcsCiAgICAg
ICAiZXJyb3JzX3JlcGx5X3RvICglcykgZG9lcyBub3QgY29udGFpbiBhIGRvbWFpbiIsIGVycm9y
c19yZXBseV90byk7CiAgIH0KQEAgLTM1NDksOCArMzU1MSw3IEBACiAvKiBJZiBzbXRwX2FjY2Vw
dF9xdWV1ZSBvciBzbXRwX2FjY2VwdF9tYXhfcGVyX2hvc3QgaXMgc2V0LCB0aGVuCiBzbXRwX2Fj
Y2VwdF9tYXggbXVzdCBhbHNvIGJlIHNldC4gKi8KIAotaWYgKHNtdHBfYWNjZXB0X21heCA9PSAw
ICYmCi0gICAgKHNtdHBfYWNjZXB0X3F1ZXVlID4gMCB8fCBzbXRwX2FjY2VwdF9tYXhfcGVyX2hv
c3QgIT0gTlVMTCkpCitpZiAoc210cF9hY2NlcHRfbWF4ID09IDAgJiYgKHNtdHBfYWNjZXB0X3F1
ZXVlID4gMCB8fCBzbXRwX2FjY2VwdF9tYXhfcGVyX2hvc3QpKQogICBsb2dfd3JpdGUoMCwgTE9H
X1BBTklDX0RJRXxMT0dfQ09ORklHLAogICAgICJzbXRwX2FjY2VwdF9tYXggbXVzdCBiZSBzZXQg
aWYgc210cF9hY2NlcHRfcXVldWUgb3IgIgogICAgICJzbXRwX2FjY2VwdF9tYXhfcGVyX2hvc3Qg
aXMgc2V0Iik7CkBAIC0zNTcxLDcgKzM1NzIsNyBAQAogICAgICAgICBob3N0X251bWJlcl9zdHJp
bmcsIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSk7CiAgIG4gPSBVc3RydG9sKHMsICZlbmQsIDApOwog
ICB3aGlsZSAoaXNzcGFjZSgqZW5kKSkgZW5kKys7Ci0gIGlmICgqZW5kICE9IDApCisgIGlmICgq
ZW5kKQogICAgIGxvZ193cml0ZSgwLCBMT0dfUEFOSUNfRElFfExPR19DT05GSUcsCiAgICAgICAi
bG9jYWxob3N0X251bWJlciB2YWx1ZSBpcyBub3QgYSBudW1iZXI6ICVzIiwgcyk7CiAgIGlmIChu
ID4gTE9DQUxIT1NUX01BWCkKQEAgLTM2NDgsNyArMzY0OSw3IEBACiAgICAgewogICAgIGludCBs
ZW4gPSBkZC0+b3B0aW9uc19sZW47CiAgICAgZC0+aW5mbyA9IGRkOwotICAgIGQtPm9wdGlvbnNf
YmxvY2sgPSBzdG9yZV9nZXQobGVuLCBGQUxTRSk7CisgICAgZC0+b3B0aW9uc19ibG9jayA9IHN0
b3JlX2dldF9wZXJtKGxlbiwgRkFMU0UpOwogICAgIG1lbWNweShkLT5vcHRpb25zX2Jsb2NrLCBk
ZC0+b3B0aW9uc19ibG9jaywgbGVuKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8ICooZGQtPm9w
dGlvbnNfY291bnQpOyBpKyspCiAgICAgICBkZC0+b3B0aW9uc1tpXS50eXBlICY9IH5vcHRfc2V0
OwpAQCAtMzY2NCw2ICszNjY1LDE2IEBACiAKIAogCitzdGF0aWMgdm9pZAorZHJpdmVyX2luaXRf
ZmluaShkcml2ZXJfaW5zdGFuY2UgKiBkLCBjb25zdCB1c2NoYXIgKiBjbGFzcykKK3sKK2lmICgh
ZC0+ZHJpdmVyX25hbWUpCisgIGxvZ193cml0ZSgwLCBMT0dfUEFOSUNfRElFfExPR19DT05GSUcs
CisgICAgIm5vIGRyaXZlciBkZWZpbmVkIGZvciAlcyBcIiVzXCIiLCBjbGFzcywgZC0+bmFtZSk7
CisoZC0+aW5mby0+aW5pdCkoZCk7Cit9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgSW5pdGlhbGl6ZSBkcml2ZXIg
bGlzdCAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwpAQCAtMzcyNCwxMSArMzczNSw4IEBACiAgICAgewogICAgIGlmIChkKQog
ICAgICAgewotICAgICAgaWYgKCFkLT5kcml2ZXJfbmFtZSkKLSAgICAgICAgbG9nX3dyaXRlKDAs
IExPR19QQU5JQ19ESUV8TE9HX0NPTkZJRywKLSAgICAgICAgICAibm8gZHJpdmVyIGRlZmluZWQg
Zm9yICVzIFwiJXNcIiIsIGNsYXNzLCBkLT5uYW1lKTsKICAgICAgIC8qIHMgaXMgdXNpbmcgYmln
X2J1ZmZlciwgc28gdGhpcyBjYWxsIGhhZCBiZXR0ZXIgbm90ICovCi0gICAgICAoZC0+aW5mby0+
aW5pdCkoZCk7CisgICAgICBkcml2ZXJfaW5pdF9maW5pKGQsIGNsYXNzKTsKICAgICAgIGQgPSBO
VUxMOwogICAgICAgfQogICAgIGlmICghbWFjcm9fcmVhZF9hc3NpZ25tZW50KGJ1ZmZlcikpIGV4
aW1fZXhpdChFWElUX0ZBSUxVUkUpOwpAQCAtMzc0NCwxMiArMzc1Miw3IEBACiAgICAgLyogRmlu
aXNoIG9mZiBpbml0aWFsaXppbmcgdGhlIHByZXZpb3VzIGRyaXZlci4gKi8KIAogICAgIGlmIChk
KQotICAgICAgewotICAgICAgaWYgKCFkLT5kcml2ZXJfbmFtZSkKLSAgICAgICAgbG9nX3dyaXRl
KDAsIExPR19QQU5JQ19ESUV8TE9HX0NPTkZJRywKLSAgICAgICAgICAibm8gZHJpdmVyIGRlZmlu
ZWQgZm9yICVzIFwiJXNcIiIsIGNsYXNzLCBkLT5uYW1lKTsKLSAgICAgIChkLT5pbmZvLT5pbml0
KShkKTsKLSAgICAgIH0KKyAgICAgIGRyaXZlcl9pbml0X2ZpbmkoZCwgY2xhc3MpOwogCiAgICAg
LyogQ2hlY2sgdGhhdCB3ZSBoYXZlbid0IGFscmVhZHkgZ290IGEgZHJpdmVyIG9mIHRoaXMgbmFt
ZSAqLwogCkBAIC0zNzYxLDExICszNzY0LDEzIEBACiAgICAgLyogU2V0IHVwIGEgbmV3IGRyaXZl
ciBpbnN0YW5jZSBkYXRhIGJsb2NrIG9uIHRoZSBjaGFpbiwgd2l0aAogICAgIGl0cyBkZWZhdWx0
IHZhbHVlcyBpbnN0YWxsZWQuICovCiAKLSAgICBkID0gc3RvcmVfZ2V0KGluc3RhbmNlX3NpemUs
IEZBTFNFKTsKKyAgICBkID0gc3RvcmVfZ2V0X3Blcm0oaW5zdGFuY2Vfc2l6ZSwgRkFMU0UpOwog
ICAgIG1lbWNweShkLCBpbnN0YW5jZV9kZWZhdWx0LCBpbnN0YW5jZV9zaXplKTsKICAgICAqcCA9
IGQ7CiAgICAgcCA9ICZkLT5uZXh0OwogICAgIGQtPm5hbWUgPSBzdHJpbmdfY29weShuYW1lKTsK
KyAgICBkLT5zcmNmaWxlID0gY29uZmlnX2ZpbGVuYW1lOworICAgIGQtPnNyY2xpbmUgPSBjb25m
aWdfbGluZW5vOyAKIAogICAgIC8qIENsZWFyIG91dCB0aGUgInNldCIgYml0cyBpbiB0aGUgZ2Vu
ZXJpYyBvcHRpb25zICovCiAKQEAgLTM4MTMsMTIgKzM4MTgsNyBAQAogLyogUnVuIHRoZSBpbml0
aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGZpbmFsIGRyaXZlci4gKi8KIAogaWYgKGQpCi0g
IHsKLSAgaWYgKCFkLT5kcml2ZXJfbmFtZSkKLSAgICBsb2dfd3JpdGUoMCwgTE9HX1BBTklDX0RJ
RXxMT0dfQ09ORklHLAotICAgICAgIm5vIGRyaXZlciBkZWZpbmVkIGZvciAlcyBcIiVzXCIiLCBj
bGFzcywgZC0+bmFtZSk7Ci0gIChkLT5pbmZvLT5pbml0KShkKTsKLSAgfQorICBkcml2ZXJfaW5p
dF9maW5pKGQsIGNsYXNzKTsKIH0KIAogCkBAIC00MDU4LDcgKzQwNTgsNyBAQAogICBjb25zdCB1
c2NoYXIgKnBwOwogICB1c2NoYXIgKmVycm9yOwogCi0gIG5leHQgPSBzdG9yZV9nZXQoc2l6ZW9m
KHJldHJ5X2NvbmZpZyksIEZBTFNFKTsKKyAgbmV4dCA9IHN0b3JlX2dldChzaXplb2YocmV0cnlf
Y29uZmlnKSwgR0VUX1VOVEFJTlRFRCk7CiAgIG5leHQtPm5leHQgPSBOVUxMOwogICAqY2hhaW4g
PSBuZXh0OwogICBjaGFpbiA9ICYobmV4dC0+bmV4dCk7CkBAIC00MTAyLDcgKzQxMDIsNyBAQAog
CiAgIHdoaWxlICgqcCkKICAgICB7Ci0gICAgcmV0cnlfcnVsZSAqcnVsZSA9IHN0b3JlX2dldChz
aXplb2YocmV0cnlfcnVsZSksIEZBTFNFKTsKKyAgICByZXRyeV9ydWxlICogcnVsZSA9IHN0b3Jl
X2dldChzaXplb2YocmV0cnlfcnVsZSksIEdFVF9VTlRBSU5URUQpOwogICAgICpyY2hhaW4gPSBy
dWxlOwogICAgIHJjaGFpbiA9ICYocnVsZS0+bmV4dCk7CiAgICAgcnVsZS0+bmV4dCA9IE5VTEw7
CkBAIC00MTgwLDExICs0MTgwLDEyIEBACiAKICAgZm9yIChhdXRoX2luc3RhbmNlICogYnUgPSBh
dS0+bmV4dDsgYnU7IGJ1ID0gYnUtPm5leHQpCiAgICAgaWYgKHN0cmNtcGljKGF1LT5wdWJsaWNf
bmFtZSwgYnUtPnB1YmxpY19uYW1lKSA9PSAwKQotICAgICAgaWYgKChhdS0+Y2xpZW50ICYmIGJ1
LT5jbGllbnQpIHx8IChhdS0+c2VydmVyICYmIGJ1LT5zZXJ2ZXIpKQorICAgICAgaWYgKCAgYXUt
PmNsaWVudCAmJiBidS0+Y2xpZW50CisJIHx8IGF1LT5zZXJ2ZXIgJiYgYnUtPnNlcnZlcikKICAg
ICAgICAgbG9nX3dyaXRlKDAsIExPR19QQU5JQ19ESUV8TE9HX0NPTkZJRywgInR3byAlcyBhdXRo
ZW50aWNhdG9ycyAiCiAgICAgICAgICAgIiglcyBhbmQgJXMpIGhhdmUgdGhlIHNhbWUgcHVibGlj
IG5hbWUgKCVzKSIsCi0gICAgICAgICAgYXUtPmNsaWVudCA/IFVTImNsaWVudCIgOiBVUyJzZXJ2
ZXIiLCBhdS0+bmFtZSwgYnUtPm5hbWUsCi0gICAgICAgICAgYXUtPnB1YmxpY19uYW1lKTsKKyAg
ICAgICAgICBhdS0+Y2xpZW50ICYmIGJ1LT5jbGllbnQgPyBVUyJjbGllbnQiIDogVVMic2VydmVy
IiwKKwkgIGF1LT5uYW1lLCBidS0+bmFtZSwgYXUtPnB1YmxpY19uYW1lKTsKICNpZm5kZWYgRElT
QUJMRV9QSVBFX0NPTk5FQ1QKICAgbmF1dGhzKys7CiAjZW5kaWYKQEAgLTQxOTUsNiArNDE5Niwx
OCBAQAogfQogCiAKKy8qIEZvciBlcnJvciBtZXNzYWdlcywgYSBzdHJpbmcgZGVzY3JpYmluZyB0
aGUgY29uZmlnIGxvY2F0aW9uIGFzc29jaWF0ZWQKK3dpdGggY3VycmVudCBwcm9jZXNzaW5nLiAg
TlVMTCBpZiB3ZSBhcmUgbm90IGluIGFuIGF1dGhlbnRpY2F0b3IuICovCisKK3VzY2hhciAqCith
dXRoZW50aWNhdG9yX2N1cnJlbnRfbmFtZSh2b2lkKQoreworaWYgKCFhdXRoZW50aWNhdG9yX25h
bWUpIHJldHVybiBOVUxMOworcmV0dXJuIHN0cmluZ19zcHJpbnRmKCIgKGF1dGhlbnRpY2F0b3Ig
JXMsICVzICVkKSIsIGF1dGhlbnRpY2F0b3JfbmFtZSwgZHJpdmVyX3NyY2ZpbGUsIGRyaXZlcl9z
cmNsaW5lKTsKK30KKworCisKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgpAQCAtNDI1MSw3ICs0MjY0LDcgQEAKICAgaWYgKCpwICE9ICc6JyB8
fCBuYW1lWzBdID09IDApCiAgICAgbG9nX3dyaXRlKDAsIExPR19QQU5JQ19ESUV8TE9HX0NPTkZJ
R19JTiwgIm1pc3Npbmcgb3IgbWFsZm9ybWVkIEFDTCBuYW1lIik7CiAKLSAgbm9kZSA9IHN0b3Jl
X2dldChzaXplb2YodHJlZV9ub2RlKSArIFVzdHJsZW4obmFtZSksIGlzX3RhaW50ZWQobmFtZSkp
OworICBub2RlID0gc3RvcmVfZ2V0X3Blcm0oc2l6ZW9mKHRyZWVfbm9kZSkgKyBVc3RybGVuKG5h
bWUpLCBuYW1lKTsKICAgVXN0cmNweShub2RlLT5uYW1lLCBuYW1lKTsKICAgaWYgKCF0cmVlX2lu
c2VydG5vZGUoJmFjbF9hbmNob3IsIG5vZGUpKQogICAgIGxvZ193cml0ZSgwLCBMT0dfUEFOSUNf
RElFfExPR19DT05GSUdfSU4sCkBAIC00Mzk2LDcgKzQ0MDksNyBAQAogc3RhdGljIGNvbmZpZ19s
aW5lX2l0ZW0gKmN1cnJlbnQ7CiBjb25maWdfbGluZV9pdGVtICpuZXh0OwogCi1uZXh0ID0gKGNv
bmZpZ19saW5lX2l0ZW0qKSBzdG9yZV9nZXQoc2l6ZW9mKGNvbmZpZ19saW5lX2l0ZW0pLCBGQUxT
RSk7CituZXh0ID0gKGNvbmZpZ19saW5lX2l0ZW0qKSBzdG9yZV9nZXQoc2l6ZW9mKGNvbmZpZ19s
aW5lX2l0ZW0pLCBHRVRfVU5UQUlOVEVEKTsKIG5leHQtPmxpbmUgPSBzdHJpbmdfY29weShsaW5l
KTsKIG5leHQtPm5leHQgPSBOVUxMOwogCkBAIC00NDEzLDI1ICs0NDI2LDI4IEBACiB7CiBjb25z
dCBpbnQgVFMgPSB0ZXJzZSA/IDAgOiAyOwogaW50IGluZGVudCA9IDA7CitybWFyayByID0gTlVM
TDsKIAotZm9yIChjb25maWdfbGluZV9pdGVtICogaSA9IGNvbmZpZ19saW5lczsgaTsgaSA9IGkt
Pm5leHQpCitmb3IgKGNvbnN0IGNvbmZpZ19saW5lX2l0ZW0gKiBpID0gY29uZmlnX2xpbmVzOyBp
OyBpID0gaS0+bmV4dCkKICAgewotICB1c2NoYXIgKmN1cnJlbnQ7Ci0gIHVzY2hhciAqcDsKKyAg
dXNjaGFyICogY3VycmVudCwgKiBwOworCisgIGlmIChyKSBzdG9yZV9yZXNldChyKTsKKyAgciA9
IHN0b3JlX21hcmsoKTsKIAogICAvKiBza2lwIG92ZXIgdG8gdGhlIGZpcnN0IG5vbi1zcGFjZSAq
LwotICBmb3IgKGN1cnJlbnQgPSBpLT5saW5lOyAqY3VycmVudCAmJiBpc3NwYWNlKCpjdXJyZW50
KTsgKytjdXJyZW50KQorICBmb3IgKGN1cnJlbnQgPSBzdHJpbmdfY29weShpLT5saW5lKTsgKmN1
cnJlbnQgJiYgaXNzcGFjZSgqY3VycmVudCk7ICsrY3VycmVudCkKICAgICA7CiAKLSAgaWYgKCpj
dXJyZW50ID09ICdcMCcpCisgIGlmICghKmN1cnJlbnQpCiAgICAgY29udGludWU7CiAKICAgLyog
Q29sbGFwc2UgcnVucyBvZiBzcGFjZXMuIFdlIHN0b3AgdGhpcyBpZiB3ZSBlbmNvdW50ZXIgb25l
IG9mIHRoZQotICAgKiBmb2xsb3dpbmcgY2hhcmFjdGVyczogIickLCBhcyB0aGlzIG1heSBpbmRp
Y2F0ZSBjYXJlZnVsIGZvcm1hdHRpbmcgKi8KLSAgZm9yIChwID0gY3VycmVudDsgKnA7ICsrcCkK
KyAgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICInJCwgYXMgdGhpcyBtYXkgaW5kaWNhdGUgY2FyZWZ1
bCBmb3JtYXR0aW5nICovCisKKyAgZm9yIChwID0gY3VycmVudDsgKnA7IHArKykgaWYgKGlzc3Bh
Y2UoKnApKQogICAgIHsKICAgICB1c2NoYXIgKm5leHQ7Ci0gICAgaWYgKCFpc3NwYWNlKCpwKSkg
Y29udGludWU7CiAgICAgaWYgKCpwICE9ICcgJykgKnAgPSAnICc7CiAKICAgICBmb3IgKG5leHQg
PSBwOyBpc3NwYWNlKCpuZXh0KTsgKytuZXh0KQpAQCAtNDQ4NSw2ICs0NTAxLDcgQEAKICAgICAv
KiByZXN0IGlzIHB1YmxpYyAqLwogICAgIHByaW50ZigiJSpzJXNcbiIsIGluZGVudCwgIiIsIGN1
cnJlbnQpOwogICB9CitpZiAocikgc3RvcmVfcmVzZXQocik7CiB9CiAKICNlbmRpZgkvKiFNQUNS
T19QUkVERUYqLwpkaWZmIC11ciBleGltLm9yaWcvc3JjL3JlY2VpdmUuYyBleGltL3NyYy9yZWNl
aXZlLmMKLS0tIGV4aW0ub3JpZy9zcmMvcmVjZWl2ZS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAw
MDAwMDAwICswMzAwCisrKyBleGltL3NyYy9yZWNlaXZlLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4w
MDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQg
bWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFp
bmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJy
aWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVy
cyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBh
bmQgZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBDb2RlIGZvciByZWNlaXZpbmcgYSBtZXNzYWdlIGFu
ZCBzZXR0aW5nIHVwIHNwb29sIGZpbGVzLiAqLwpAQCAtNDQsNDIgKzQ0LDcxIEBACiB0aGUgZmls
ZS4gKFdoZW4gU01UUCBpbnB1dCBpcyBvY2N1cnJpbmcsIGRpZmZlcmVudCBmdW5jdGlvbnMgYXJl
IHVzZWQgYnkKIGNoYW5naW5nIHRoZSBwb2ludGVyIHZhcmlhYmxlcy4pICovCiAKLWludAotc3Rk
aW5fZ2V0Yyh1bnNpZ25lZCBsaW0pCi17Ci1pbnQgYyA9IGdldGMoc3RkaW4pOwordXNjaGFyIHN0
ZGluX2J1Zls0MDk2XTsKK3VzY2hhciAqIHN0ZGluX2lucHRyID0gc3RkaW5fYnVmOwordXNjaGFy
ICogc3RkaW5faW5lbmQgPSBzdGRpbl9idWY7CiAKLWlmIChoYWRfZGF0YV90aW1lb3V0KQotICB7
Ci0gIGZwcmludGYoc3RkZXJyLCAiZXhpbTogdGltZWQgb3V0IHdoaWxlIHJlYWRpbmcgLSBtZXNz
YWdlIGFiYW5kb25lZFxuIik7Ci0gIGxvZ193cml0ZShMX2xvc3RfaW5jb21pbmdfY29ubmVjdGlv
biwKLSAgICAgICAgICAgIExPR19NQUlOLCAidGltZWQgb3V0IHdoaWxlIHJlYWRpbmcgbG9jYWwg
bWVzc2FnZSIpOwotICByZWNlaXZlX2JvbWJfb3V0KFVTImRhdGEtdGltZW91dCIsIE5VTEwpOyAg
IC8qIERvZXMgbm90IHJldHVybiAqLwotICB9Ci1pZiAoaGFkX2RhdGFfc2lnaW50KQorc3RhdGlj
IEJPT0wKK3N0ZGluX3JlZmlsbCh2b2lkKQoreworc2l6ZV90IHJjID0gZnJlYWQoc3RkaW5fYnVm
LCAxLCBzaXplb2Yoc3RkaW5fYnVmKSwgc3RkaW4pOworaWYgKHJjIDw9IDApCiAgIHsKLSAgaWYg
KGZpbHRlcl90ZXN0ID09IEZURVNUX05PTkUpCisgIGlmIChoYWRfZGF0YV90aW1lb3V0KQorICAg
IHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImV4aW06IHRpbWVkIG91dCB3aGlsZSByZWFkaW5nIC0g
bWVzc2FnZSBhYmFuZG9uZWRcbiIpOworICAgIGxvZ193cml0ZShMX2xvc3RfaW5jb21pbmdfY29u
bmVjdGlvbiwKKwkgICAgICBMT0dfTUFJTiwgInRpbWVkIG91dCB3aGlsZSByZWFkaW5nIGxvY2Fs
IG1lc3NhZ2UiKTsKKyAgICByZWNlaXZlX2JvbWJfb3V0KFVTImRhdGEtdGltZW91dCIsIE5VTEwp
OyAgIC8qIERvZXMgbm90IHJldHVybiAqLworICAgIH0KKyAgaWYgKGhhZF9kYXRhX3NpZ2ludCkK
ICAgICB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJcbmV4aW06ICVzIHJlY2VpdmVkIC0gbWVzc2Fn
ZSBhYmFuZG9uZWRcbiIsCi0gICAgICBoYWRfZGF0YV9zaWdpbnQgPT0gU0lHVEVSTSA/ICJTSUdU
RVJNIiA6ICJTSUdJTlQiKTsKLSAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU4sICIlcyByZWNlaXZl
ZCB3aGlsZSByZWFkaW5nIGxvY2FsIG1lc3NhZ2UiLAotICAgICAgaGFkX2RhdGFfc2lnaW50ID09
IFNJR1RFUk0gPyAiU0lHVEVSTSIgOiAiU0lHSU5UIik7CisgICAgaWYgKGZpbHRlcl90ZXN0ID09
IEZURVNUX05PTkUpCisgICAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuZXhpbTogJXMg
cmVjZWl2ZWQgLSBtZXNzYWdlIGFiYW5kb25lZFxuIiwKKwloYWRfZGF0YV9zaWdpbnQgPT0gU0lH
VEVSTSA/ICJTSUdURVJNIiA6ICJTSUdJTlQiKTsKKyAgICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJ
TiwgIiVzIHJlY2VpdmVkIHdoaWxlIHJlYWRpbmcgbG9jYWwgbWVzc2FnZSIsCisJaGFkX2RhdGFf
c2lnaW50ID09IFNJR1RFUk0gPyAiU0lHVEVSTSIgOiAiU0lHSU5UIik7CisgICAgICB9CisgICAg
cmVjZWl2ZV9ib21iX291dChVUyJzaWduYWwtZXhpdCIsIE5VTEwpOyAgICAvKiBEb2VzIG5vdCBy
ZXR1cm4gKi8KICAgICB9Ci0gIHJlY2VpdmVfYm9tYl9vdXQoVVMic2lnbmFsLWV4aXQiLCBOVUxM
KTsgICAgLyogRG9lcyBub3QgcmV0dXJuICovCisgIHJldHVybiBGQUxTRTsKICAgfQotcmV0dXJu
IGM7CitzdGRpbl9pbmVuZCA9IHN0ZGluX2J1ZiArIHJjOworc3RkaW5faW5wdHIgPSBzdGRpbl9i
dWY7CityZXR1cm4gVFJVRTsKK30KKworaW50CitzdGRpbl9nZXRjKHVuc2lnbmVkIGxpbSkKK3sK
K2lmIChzdGRpbl9pbnB0ciA+PSBzdGRpbl9pbmVuZCkKKyAgaWYgKCFzdGRpbl9yZWZpbGwoKSkK
KyAgICAgIHJldHVybiBFT0Y7CityZXR1cm4gKnN0ZGluX2lucHRyKys7Cit9CisKKworQk9PTAor
c3RkaW5faGFzYyh2b2lkKQoreworcmV0dXJuIHN0ZGluX2lucHRyIDwgc3RkaW5faW5lbmQ7CiB9
CiAKIGludAogc3RkaW5fdW5nZXRjKGludCBjKQogewotcmV0dXJuIHVuZ2V0YyhjLCBzdGRpbik7
CitpZiAoc3RkaW5faW5wdHIgPD0gc3RkaW5fYnVmKQorICBsb2dfd3JpdGUoMCwgTE9HX01BSU58
TE9HX1BBTklDX0RJRSwgImJ1ZmZlciB1bmRlcmZsb3cgaW4gc3RkaW5fdW5nZXRjIik7CisKKyot
LXN0ZGluX2lucHRyID0gYzsKK3JldHVybiBjOwogfQogCiBpbnQKIHN0ZGluX2Zlb2Yodm9pZCkK
IHsKLXJldHVybiBmZW9mKHN0ZGluKTsKK3JldHVybiBzdGRpbl9oYXNjKCkgPyBGQUxTRSA6IGZl
b2Yoc3RkaW4pOwogfQogCiBpbnQKQEAgLTE3Niw2ICsyMDUsNyBAQAogICBlbXB0eSBpdGVtIGlu
IGEgbGlzdC4gKi8KIAogICBpZiAoKnAgPT0gMCkgcCA9IFVTIjoiOworICAvKiBzaG91bGQgbmV2
ZXIgYmUgYSB0YWludGVkIGxpc3QgKi8KICAgd2hpbGUgKChwYXRoID0gc3RyaW5nX25leHRpbmxp
c3QoJnAsICZzZXAsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKSkKICAgICBpZiAoVXN0cmNtcChw
YXRoLCAic3lzbG9nIikgIT0gMCkKICAgICAgIGJyZWFrOwpAQCAtNDk3LDggKzUyNyw4IEBACiAg
ICAgfQogCiAgIHJlY2lwaWVudHNfbGlzdF9tYXggPSByZWNpcGllbnRzX2xpc3RfbWF4ID8gMipy
ZWNpcGllbnRzX2xpc3RfbWF4IDogNTA7Ci0gIHJlY2lwaWVudHNfbGlzdCA9IHN0b3JlX2dldChy
ZWNpcGllbnRzX2xpc3RfbWF4ICogc2l6ZW9mKHJlY2lwaWVudF9pdGVtKSwgRkFMU0UpOwotICBp
ZiAob2xkbGlzdCAhPSBOVUxMKQorICByZWNpcGllbnRzX2xpc3QgPSBzdG9yZV9nZXQocmVjaXBp
ZW50c19saXN0X21heCAqIHNpemVvZihyZWNpcGllbnRfaXRlbSksIEdFVF9VTlRBSU5URUQpOwor
ICBpZiAob2xkbGlzdCkKICAgICBtZW1jcHkocmVjaXBpZW50c19saXN0LCBvbGRsaXN0LCBvbGRt
YXggKiBzaXplb2YocmVjaXBpZW50X2l0ZW0pKTsKICAgfQogCkBAIC01ODcsMTkgKzYxNywxNSBA
QAogc3RhdGljIHZvaWQKIGxvZ19jbG9zZV9jaGsodm9pZCkKIHsKLWlmICghcmVjZWl2ZV90aW1l
b3V0KQoraWYgKCFyZWNlaXZlX3RpbWVvdXQgJiYgIXJlY2VpdmVfaGFzYygpKQogICB7CiAgIHN0
cnVjdCB0aW1ldmFsIHQ7CiAgIHRpbWVzaW5jZSgmdCwgJnJlY2VpdmVkX3RpbWUpOwogICBpZiAo
dC50dl9zZWMgPiAzMCo2MCkKICAgICBtYWlubG9nX2Nsb3NlKCk7CiAgIGVsc2UKLSAgICB7Ci0g
ICAgZmRfc2V0IHI7Ci0gICAgRkRfWkVSTygmcik7IEZEX1NFVCgwLCAmcik7Ci0gICAgdC50dl9z
ZWMgPSAzMCo2MCAtIHQudHZfc2VjOyB0LnR2X3VzZWMgPSAwOwotICAgIGlmIChzZWxlY3QoMSwg
JnIsIE5VTEwsIE5VTEwsICZ0KSA9PSAwKSBtYWlubG9nX2Nsb3NlKCk7Ci0gICAgfQorICAgIGlm
IChwb2xsX29uZV9mZCgwLCBQT0xMSU4sICgzMCo2MCAtIHQudHZfc2VjKSAqIDEwMDApID09IDAp
CisgICAgICBtYWlubG9nX2Nsb3NlKCk7CiAgIH0KIH0KIApAQCAtNjUzLDExICs2NzksNiBAQAog
ICB7CiAgIGludCBsYXN0X2NoID0gJ1xuJzsKIAotLypYWFggd2UgZG8gYSBnZXR0aW1lb2ZkYXkg
YmVmb3JlIGNoZWNraW5nIGZvciBldmVyeSByZWNlaXZlZCBjaGFyLAotd2hpY2ggaXMgaGFyZGx5
IGNsZXZlci4gIFRoZSBmdW5jdGlvbi1pbmRpcmVjdGlvbiBkb2Vzbid0IGhlbHAsIGJ1dAotYW4g
YWRkaXRpb25hbCBmdW5jdGlvbiB0byBjaGVjayBmb3Igbm9uZW1wdHkgcmVhZCBidWZmZXIgd291
bGQgaGVscC4KLVNlZSBzdGRpbl9nZXRjKCkgLyBzbXRwX2dldGMoKSAvIHRsc19nZXRjKCkgLyBi
ZGF0X2dldGMoKS4gKi8KLQogICBmb3IgKCA7CiAgICAgICAgbG9nX2Nsb3NlX2NoaygpLCAoY2gg
PSAocmVjZWl2ZV9nZXRjKShHRVRDX0JVRkZFUl9VTkxJTUlURUQpKSAhPSBFT0Y7CiAgICAgICAg
bGFzdF9jaCA9IGNoKQpAQCAtOTQ2LDcgKzk2Nyw3IEBACiAqLwogCiBzdGF0aWMgaW50Ci1yZWFk
X21lc3NhZ2VfYmRhdF9zbXRwKEZJTEUgKmZvdXQpCityZWFkX21lc3NhZ2VfYmRhdF9zbXRwKEZJ
TEUgKiBmb3V0KQogewogaW50IGxpbmVsZW5ndGggPSAwLCBjaDsKIGVudW0gQ0hfU1RBVEUgY2hf
c3RhdGUgPSBMRl9TRUVOOwpAQCAtMTA1Miw3ICsxMDczLDcgQEAKIH0KIAogc3RhdGljIGludAot
cmVhZF9tZXNzYWdlX2JkYXRfc210cF93aXJlKEZJTEUgKmZvdXQpCityZWFkX21lc3NhZ2VfYmRh
dF9zbXRwX3dpcmUoRklMRSAqIGZvdXQpCiB7CiBpbnQgY2g7CiAKQEAgLTEyMzUsOSArMTI1Niw4
IEBACiAgICAgY29uc3QgdXNjaGFyICogbGlzdCA9IGFjbF9yZW1vdmVkX2hlYWRlcnM7CiAgICAg
aW50IHNlcCA9ICc6JzsgICAgICAgICAvKiBUaGlzIGlzIHNwZWNpZmllZCBhcyBhIGNvbG9uLXNl
cGFyYXRlZCBsaXN0ICovCiAgICAgdXNjaGFyICpzOwotICAgIHVzY2hhciBidWZmZXJbMTI4XTsK
IAotICAgIHdoaWxlICgocyA9IHN0cmluZ19uZXh0aW5saXN0KCZsaXN0LCAmc2VwLCBidWZmZXIs
IHNpemVvZihidWZmZXIpKSkpCisgICAgd2hpbGUgKChzID0gc3RyaW5nX25leHRpbmxpc3QoJmxp
c3QsICZzZXAsIE5VTEwsIDApKSkKICAgICAgIGlmIChoZWFkZXJfdGVzdG5hbWUoaCwgcywgVXN0
cmxlbihzKSwgRkFMU0UpKQogCXsKIAloLT50eXBlID0gaHR5cGVfb2xkOwpAQCAtMTUyMywxMSAr
MTU0MywxMCBAQAogdm9pZAogcmVjZWl2ZWRfaGVhZGVyX2dlbih2b2lkKQogewotdXNjaGFyICpy
ZWNlaXZlZDsKLXVzY2hhciAqdGltZXN0YW1wOwotaGVhZGVyX2xpbmUgKnJlY2VpdmVkX2hlYWRl
cj0gaGVhZGVyX2xpc3Q7Cit1c2NoYXIgKiByZWNlaXZlZDsKK3VzY2hhciAqIHRpbWVzdGFtcCA9
IGV4cGFuZF9zdHJpbmcoVVMiJHt0b2RfZnVsbH0iKTsKK2hlYWRlcl9saW5lICogcmVjZWl2ZWRf
aGVhZGVyPSBoZWFkZXJfbGlzdDsKIAotdGltZXN0YW1wID0gZXhwYW5kX3N0cmluZyhVUyIke3Rv
ZF9mdWxsfSIpOwogaWYgKHJlY2lwaWVudHNfY291bnQgPT0gMSkgcmVjZWl2ZWRfZm9yID0gcmVj
aXBpZW50c19saXN0WzBdLmFkZHJlc3M7CiByZWNlaXZlZCA9IGV4cGFuZF9zdHJpbmcocmVjZWl2
ZWRfaGVhZGVyX3RleHQpOwogcmVjZWl2ZWRfZm9yID0gTlVMTDsKQEAgLTE1NDYsMTQgKzE1NjUs
MTQgQEAKIHRoZSByZXN1bHQgb2YgdGhlIGV4cGFuc2lvbiBpcyBhbiBlbXB0eSBzdHJpbmcsIHdl
IGxlYXZlIHRoZSBoZWFkZXIgbWFya2VkIGFzCiAib2xkIiBzbyBhcyB0byByZWZyYWluIGZyb20g
YWRkaW5nIGEgUmVjZWl2ZWQgaGVhZGVyLiAqLwogCi1pZiAocmVjZWl2ZWRbMF0gPT0gMCkKK2lm
ICghcmVjZWl2ZWRbMF0pCiAgIHsKICAgcmVjZWl2ZWRfaGVhZGVyLT50ZXh0ID0gc3RyaW5nX3Nw
cmludGYoIlJlY2VpdmVkOiA7ICVzXG4iLCB0aW1lc3RhbXApOwogICByZWNlaXZlZF9oZWFkZXIt
PnR5cGUgPSBodHlwZV9vbGQ7CiAgIH0KIGVsc2UKICAgewotICByZWNlaXZlZF9oZWFkZXItPnRl
eHQgPSBzdHJpbmdfc3ByaW50ZigiJXM7ICVzXG4iLCByZWNlaXZlZCwgdGltZXN0YW1wKTsKKyAg
cmVjZWl2ZWRfaGVhZGVyLT50ZXh0ID0gc3RyaW5nX3NwcmludGYoIiVzO1xuXHQlc1xuIiwgcmVj
ZWl2ZWQsIHRpbWVzdGFtcCk7CiAgIHJlY2VpdmVkX2hlYWRlci0+dHlwZSA9IGh0eXBlX3JlY2Vp
dmVkOwogICB9CiAKQEAgLTE2NjQsMTAgKzE2ODMsOSBAQAogaW50ICBlcnJvcl9yYyA9IGVycm9y
X2hhbmRsaW5nID09IEVSUk9SU19TRU5ERVIKIAk/IGVycm9yc19zZW5kZXJfcmMgOiBFWElUX0ZB
SUxVUkU7CiBpbnQgIGhlYWRlcl9zaXplID0gMjU2OwotaW50ICBzdGFydCwgZW5kLCBkb21haW47
Ci1pbnQgIGlkX3Jlc29sdXRpb24gPSAwOwogaW50ICBoYWRfemVybyA9IDA7CiBpbnQgIHByZXZs
aW5lc19sZW5ndGggPSAwOworY29uc3QgaW50IGlkX3Jlc29sdXRpb24gPSBCQVNFXzYyID09IDYy
ID8gNTAwMCA6IDEwMDAwOwogCiBpbnQgcHRyID0gMDsKIApAQCAtMTcyMSw2ICsxNzM5LDEwIEBA
CiB1c2NoYXIgKnRpbWVzdGFtcDsKIGludCB0c2xlbjsKIAorLyogVGltZSBvZiBjcmVhdGlvbiBv
ZiBtZXNzYWdlX2lkICovCisKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBtZXNzYWdlX2lkX3R2ID0g
eyAwLCAwIH07CisKIAogLyogUmVsZWFzZSBhbnkgb3BlbiBmaWxlcyB0aGF0IG1pZ2h0IGhhdmUg
YmVlbiBjYWNoZWQgd2hpbGUgcHJlcGFyaW5nIHRvCiBhY2NlcHQgdGhlIG1lc3NhZ2UgLSBlLmcu
IGJ5IHZlcmlmeWluZyBhZGRyZXNzZXMgLSBiZWNhdXNlIHJlYWRpbmcgYSBtZXNzYWdlCkBAIC0x
NzM4LDE3ICsxNzYwLDE4IEBACiBoZWFkZXIuIFRlbXBvcmFyaWx5IG1hcmsgaXQgYXMgIm9sZCIs
IGkuZS4gbm90IHRvIGJlIHVzZWQuIFdlIGtlZXAgaGVhZGVyX2xhc3QKIHBvaW50aW5nIHRvIHRo
ZSBlbmQgb2YgdGhlIGNoYWluIHRvIG1ha2UgYWRkaW5nIGhlYWRlcnMgc2ltcGxlLiAqLwogCi1y
ZWNlaXZlZF9oZWFkZXIgPSBoZWFkZXJfbGlzdCA9IGhlYWRlcl9sYXN0ID0gc3RvcmVfZ2V0KHNp
emVvZihoZWFkZXJfbGluZSksIEZBTFNFKTsKK3JlY2VpdmVkX2hlYWRlciA9IGhlYWRlcl9saXN0
ID0gaGVhZGVyX2xhc3QgPSBzdG9yZV9nZXQoc2l6ZW9mKGhlYWRlcl9saW5lKSwgR0VUX1VOVEFJ
TlRFRCk7CiBoZWFkZXJfbGlzdC0+bmV4dCA9IE5VTEw7CiBoZWFkZXJfbGlzdC0+dHlwZSA9IGh0
eXBlX29sZDsKIGhlYWRlcl9saXN0LT50ZXh0ID0gTlVMTDsKIGhlYWRlcl9saXN0LT5zbGVuID0g
MDsKIAotLyogQ29udHJvbCBibG9jayBmb3IgdGhlIG5leHQgaGVhZGVyIHRvIGJlIHJlYWQuICov
CisvKiBDb250cm9sIGJsb2NrIGZvciB0aGUgbmV4dCBoZWFkZXIgdG8gYmUgcmVhZC4KK1RoZSBk
YXRhIGNvbWVzIGZyb20gdGhlIG1lc3NhZ2UsIHNvIGlzIHRhaW50ZWQuICovCiAKIHJlc2V0X3Bv
aW50ID0gc3RvcmVfbWFyaygpOwotbmV4dCA9IHN0b3JlX2dldChzaXplb2YoaGVhZGVyX2xpbmUp
LCBGQUxTRSk7CS8qIG5vdCB0YWludGVkICovCi1uZXh0LT50ZXh0ID0gc3RvcmVfZ2V0KGhlYWRl
cl9zaXplLCBUUlVFKTsJLyogdGFpbnRlZCAqLworbmV4dCA9IHN0b3JlX2dldChzaXplb2YoaGVh
ZGVyX2xpbmUpLCBHRVRfVU5UQUlOVEVEKTsKK25leHQtPnRleHQgPSBzdG9yZV9nZXQoaGVhZGVy
X3NpemUsIEdFVF9UQUlOVEVEKTsKIAogLyogSW5pdGlhbGl6ZSBtZXNzYWdlIGlkIHRvIGJlIG51
bGwgKGluZGljYXRpbmcgbm8gbWVzc2FnZSByZWFkKSwgYW5kIHRoZQogaGVhZGVyIG5hbWVzIGxp
c3QgdG8gYmUgdGhlIG5vcm1hbCBsaXN0LiBJbmRpY2F0ZSB0aGVyZSBpcyBubyBkYXRhIGZpbGUg
b3BlbgpAQCAtMTc4NywxNyArMTgxMCw0MCBAQAogaWYgKHNlbmRlcl9ob3N0X2FkZHJlc3MpIGRt
YXJjX2luaXQoKTsJLyogaW5pdGlhbGl6ZSBsaWJvcGVuZG1hcmMgKi8KICNlbmRpZgogCisvKiBJ
biBTTVRQIHNlc3Npb25zIHdlIG1heSByZWNlaXZlIHNldmVyYWwgbWVzc2FnZXMgaW4gb25lIGNv
bm5lY3Rpb24uIEJlZm9yZQorZWFjaCBzdWJzZXF1ZW50IG9uZSwgd2Ugd2FpdCBmb3IgdGhlIGNs
b2NrIHRvIHRpY2sgYXQgdGhlIGxldmVsIG9mIG1lc3NhZ2UtaWQKK2dyYW51bGFyaXR5LgorVGhp
cyBpcyBzbyB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiB0aW1lK3BpZCBpcyB1bmlxdWUsIGV2ZW4g
b24gc3lzdGVtcyB3aGVyZSB0aGUKK3BpZCBjYW4gYmUgcmUtdXNlZCB3aXRoaW4gb3VyIHRpbWUg
aW50ZXJ2YWwuIFdlIGNhbid0IHNob3J0ZW4gdGhlIGludGVydmFsCit3aXRob3V0IHJlLWRlc2ln
bmluZyB0aGUgbWVzc2FnZS1pZC4gU2VlIGNvbW1lbnRzIGFib3ZlIHdoZXJlIHRoZSBtZXNzYWdl
IGlkIGlzCitjcmVhdGVkLiBUaGlzIGlzIFNvbWV0aGluZyBGb3IgVGhlIEZ1dHVyZS4KK0RvIHRo
aXMgd2FpdCBhbnkgdGltZSB3ZSBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCBhIG1lc3NhZ2UtaWQs
IGV2ZW4gaWYgd2UKK3JlamVjdGVkIHRoZSBtZXNzYWdlLiAgVGhpcyBnaXZlcyB1bmlxdWUgSURz
IGZvciBsb2dnaW5nIGRvbmUgYnkgQUNMcy4KK1RoZSBpbml0aWFsIHRpbWVzdGFtcCBtdXN0IGhh
dmUgYmVlbiBvYnRhaW5lZCB2aWEgZXhpbV9nZXR0aW1lKCkgdG8gYXZvaWQKK2lzc3VlcyBvbiBM
aW51eCB3aXRoIHN1c3BlbmQvcmVzdW1lLiAqLworCitpZiAobWVzc2FnZV9pZF90di50dl9zZWMp
CisgIHsKKyAgbWVzc2FnZV9pZF90di50dl91c2VjID0gKG1lc3NhZ2VfaWRfdHYudHZfdXNlYy9p
ZF9yZXNvbHV0aW9uKSAqIGlkX3Jlc29sdXRpb247CisgIGV4aW1fd2FpdF90aWNrKCZtZXNzYWdl
X2lkX3R2LCBpZF9yZXNvbHV0aW9uKTsKKyAgfQorCiAvKiBSZW1lbWJlciB0aGUgdGltZSBvZiBy
ZWNlcHRpb24uIEV4aW0gdXNlcyB0aW1lK3BpZCBmb3IgdW5pcXVlbmVzcyBvZiBtZXNzYWdlCiBp
ZHMsIGFuZCBmcmFjdGlvbnMgb2YgYSBzZWNvbmQgYXJlIHJlcXVpcmVkLiBTZWUgdGhlIGNvbW1l
bnRzIHRoYXQgcHJlY2VkZSB0aGUKLW1lc3NhZ2UgaWQgY3JlYXRpb24gYmVsb3cuICovCittZXNz
YWdlIGlkIGNyZWF0aW9uIGJlbG93LgorV2UgdXNlIGEgcm91dGluZSB0aGF0IGlmIHBvc3NpYmxl
IHVzZXMgYSBtb25vdG9uaWMgY2xvY2ssIGFuZCBjYW4gYmUgdXNlZCBhZ2FpbgorYWZ0ZXIgcmVj
ZXB0aW9uIGZvciB0aGUgdGljay13YWl0IGV2ZW4gdW5kZXIgdGhlIExpbnV4IG5vbi1Qb3NpeCBi
ZWhhdmlvdXIuICovCiAKLWV4aW1fZ2V0dGltZSgmbWVzc2FnZV9pZF90dik7CitlbHNlCisgIGV4
aW1fZ2V0dGltZSgmbWVzc2FnZV9pZF90dik7CiAKIC8qIEZvciBvdGhlciB1c2VzIG9mIHRoZSBy
ZWNlaXZlZCB0aW1lIHdlIGNhbiBvcGVyYXRlIHdpdGggZ3JhbnVsYXJpdHkgb2Ygb25lCiBzZWNv
bmQsIGFuZCBmb3IgdGhhdCB3ZSB1c2UgdGhlIGdsb2JhbCB2YXJpYWJsZSByZWNlaXZlZF90aW1l
LiBUaGlzIGlzIGZvcgotdGhpbmdzIGxpa2UgdWx0aW1hdGUgbWVzc2FnZSB0aW1lb3V0cy4gKi8K
K3RoaW5ncyBsaWtlIHVsdGltYXRlIG1lc3NhZ2UgdGltZW91dHMuCitGb3IgdGhpcyB3ZSBkbyBu
b3QgY2FyZSBhYm91dCB0aGUgTGludXggc3VzcGVuZC9yZXN1bWUgcHJvYmxlbSwgc28gcmF0aGVy
IHRoYW4KK3VzZSBleGltX2dldHRpbWUoKSBldmVyeXdoZXJlIHdlIHVzZSBhIHBsYWluIGdldHRp
bWVvZmRheSgpIGhlcmUuICovCiAKLXJlY2VpdmVkX3RpbWUgPSBtZXNzYWdlX2lkX3R2OworZ2V0
dGltZW9mZGF5KCZyZWNlaXZlZF90aW1lLCBOVUxMKTsKIAogLyogSWYgU01UUCBpbnB1dCwgc2V0
IHRoZSBzcGVjaWFsIGhhbmRsZXIgZm9yIHRpbWVvdXRzLiBUaGUgYWxhcm0oKSBjYWxscwogaGFw
cGVuIGluIHRoZSBzbXRwX2dldGMoKSBmdW5jdGlvbiB3aGVuIGl0IHJlZmlsbHMgaXRzIGJ1ZmZl
ci4gKi8KQEAgLTE4NDMsMTIgKzE4ODksMTUgQEAKICAgLyogSWYgd2UgaGl0IEVPRiBvbiBhIFNN
VFAgY29ubmVjdGlvbiwgaXQncyBhbiBlcnJvciwgc2luY2UgaW5jb21pbmcKICAgU01UUCBtdXN0
IGhhdmUgYSBjb3JyZWN0ICIuIiB0ZXJtaW5hdG9yLiAqLwogCi0gIGlmIChjaCA9PSBFT0YgJiYg
c210cF9pbnB1dCAvKiAmJiAhc210cF9iYXRjaGVkX2lucHV0ICovKQotICAgIHsKLSAgICBzbXRw
X3JlcGx5ID0gaGFuZGxlX2xvc3RfY29ubmVjdGlvbihVUyIgKGhlYWRlcikiKTsKLSAgICBzbXRw
X3lpZWxkID0gRkFMU0U7Ci0gICAgZ290byBUSURZVVA7ICAgICAgICAgICAgICAgICAgICAgICAv
KiBTa2lwIHRvIGVuZCBvZiBmdW5jdGlvbiAqLwotICAgIH0KKyAgaWYgKHNtdHBfaW5wdXQgLyog
JiYgIXNtdHBfYmF0Y2hlZF9pbnB1dCAqLykKKyAgICBpZiAoY2ggPT0gRU9GKQorICAgICAgewor
ICAgICAgc210cF9yZXBseSA9IGhhbmRsZV9sb3N0X2Nvbm5lY3Rpb24oVVMiIChoZWFkZXIpIik7
CisgICAgICBzbXRwX3lpZWxkID0gRkFMU0U7CisgICAgICBnb3RvIFRJRFlVUDsgICAgICAgICAg
ICAgICAgICAgICAgIC8qIFNraXAgdG8gZW5kIG9mIGZ1bmN0aW9uICovCisgICAgICB9CisgICAg
ZWxzZSBpZiAoY2ggPT0gRVJSKQorICAgICAgZ290byBUSURZVVA7CiAKICAgLyogU2VlIGlmIHdl
IGFyZSBhdCB0aGUgY3VycmVudCBoZWFkZXIncyBzaXplIGxpbWl0IC0gdGhlcmUgbXVzdCBiZSBh
dCBsZWFzdAogICBmb3VyIGJ5dGVzIGxlZnQuIFRoaXMgYWxsb3dzIGZvciB0aGUgbmV3IGNoYXJh
Y3RlciBwbHVzIGEgemVybywgcGx1cyB0d28gZm9yCkBAIC0xODcyLDEwICsxOTIxLDggQEAKICAg
ICAgIGdvdG8gT1ZFUlNJWkU7CiAgICAgaGVhZGVyX3NpemUgKj0gMjsKIAotICAgIC8qIFRoZSBk
YXRhIGNhbWUgZnJvbSB0aGUgbWVzc2FnZSwgc28gaXMgdGFpbnRlZC4gKi8KLQotICAgIGlmICgh
c3RvcmVfZXh0ZW5kKG5leHQtPnRleHQsIFRSVUUsIG9sZHNpemUsIGhlYWRlcl9zaXplKSkKLSAg
ICAgIG5leHQtPnRleHQgPSBzdG9yZV9uZXdibG9jayhuZXh0LT50ZXh0LCBUUlVFLCBoZWFkZXJf
c2l6ZSwgcHRyKTsKKyAgICBpZiAoIXN0b3JlX2V4dGVuZChuZXh0LT50ZXh0LCBvbGRzaXplLCBo
ZWFkZXJfc2l6ZSkpCisgICAgICBuZXh0LT50ZXh0ID0gc3RvcmVfbmV3YmxvY2sobmV4dC0+dGV4
dCwgaGVhZGVyX3NpemUsIHB0cik7CiAgICAgfQogCiAgIC8qIENvcGUgd2l0aCByZWNlaXZpbmcg
YSBiaW5hcnkgemVyby4gVGhlcmUgaXMgZGlzcHV0ZSBhYm91dCB3aGV0aGVyCkBAIC0xODkwLDcg
KzE5MzcsNyBAQAogICB0aG9zZSBmcm9tIGRhdGEgZmlsZXMgdXNlIGp1c3QgTEYuIFRyZWF0IExG
IGluIGxvY2FsIFNNVFAgaW5wdXQgYXMgYQogICB0ZXJtaW5hdG9yIHRvby4gVHJlYXQgRU9GIGFz
IGEgbGluZSB0ZXJtaW5hdG9yIGFsd2F5cy4gKi8KIAotICBpZiAoY2ggPT0gRU9GKSBnb3RvIEVP
TDsKKyAgaWYgKGNoIDwgMCkgZ290byBFT0w7CiAKICAgLyogRlVER0U6IFRoZXJlIGFyZSBzaXRl
cyBvdXQgdGhlcmUgdGhhdCBkb24ndCBzZW5kIENScyBiZWZvcmUgdGhlaXIgTEZzLCBhbmQKICAg
b3RoZXIgTVRBcyBhY2NlcHQgdGhpcy4gV2UgYXJlIHRoZXJlZm9yZSBmb3JjZWQgaW50byB0aGlz
ICJsaWJlcmFsaXNhdGlvbiIKQEAgLTE5MTUsNyArMTk2Miw3IEBACiAgIHByZXZlbnQgZnVydGhl
ciByZWFkaW5nKSwgYW5kIGJyZWFrIG91dCBvZiB0aGUgbG9vcCwgaGF2aW5nIGZyZWVkIHRoZQog
ICBlbXB0eSBoZWFkZXIsIGFuZCBzZXQgbmV4dCA9IE5VTEwgdG8gaW5kaWNhdGUgbm8gZGF0YSBs
aW5lLiAqLwogCi0gIGlmIChwdHIgPT0gMCAmJiBjaCA9PSAnLicgJiYgZi5kb3RfZW5kcykKKyAg
aWYgKGYuZG90X2VuZHMgJiYgcHRyID09IDAgJiYgY2ggPT0gJy4nKQogICAgIHsKICAgICBjaCA9
IChyZWNlaXZlX2dldGMpKEdFVENfQlVGRkVSX1VOTElNSVRFRCk7CiAgICAgaWYgKGNoID09ICdc
cicpCkBAIC0xOTIzLDcgKzE5NzAsNyBAQAogICAgICAgY2ggPSAocmVjZWl2ZV9nZXRjKShHRVRD
X0JVRkZFUl9VTkxJTUlURUQpOwogICAgICAgaWYgKGNoICE9ICdcbicpCiAgICAgICAgIHsKLSAg
ICAgICAgcmVjZWl2ZV91bmdldGMoY2gpOworCWlmIChjaCA+PSAwKSByZWNlaXZlX3VuZ2V0Yyhj
aCk7CiAgICAgICAgIGNoID0gJ1xyJzsgICAgICAgICAgICAgIC8qIFJldmVydCB0byBDUiAqLwog
ICAgICAgICB9CiAgICAgICB9CkBAIC0xOTYxLDcgKzIwMDgsNyBAQAogICAgIC8qIE90aGVyd2lz
ZSwgcHV0IGJhY2sgdGhlIGNoYXJhY3RlciBhZnRlciBDUiwgYW5kIHR1cm4gdGhlIGJhcmUgQ1IK
ICAgICBpbnRvIExGIFNQLiAqLwogCi0gICAgY2ggPSAocmVjZWl2ZV91bmdldGMpKGNoKTsKKyAg
ICBpZiAoY2ggPj0gMCkgKHJlY2VpdmVfdW5nZXRjKShjaCk7CiAgICAgbmV4dC0+dGV4dFtwdHIr
K10gPSAnXG4nOwogICAgIG1lc3NhZ2Vfc2l6ZSsrOwogICAgIGNoID0gJyAnOwpAQCAtMjA0NSw3
ICsyMDkyLDcgQEAKICAgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuIElmIGl0IGlzLCB3ZSBoYXZlIGEg
Y29udGludWF0aW9uIG9mIHRoaXMgaGVhZGVyIGxpbmUuCiAgIFRoZXJlIGlzIGFsd2F5cyBzcGFj
ZSBmb3IgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBhdCB0aGlzIHBvaW50LiAqLwogCi0gIGlmIChj
aCAhPSBFT0YpCisgIGlmIChjaCA+PSAwKQogICAgIHsKICAgICBpbnQgbmV4dGNoID0gKHJlY2Vp
dmVfZ2V0YykoR0VUQ19CVUZGRVJfVU5MSU1JVEVEKTsKICAgICBpZiAobmV4dGNoID09ICcgJyB8
fCBuZXh0Y2ggPT0gJ1x0JykKQEAgLTIwNTUsOCArMjEwMiw5IEBACiAJZ290byBPVkVSU0laRTsK
ICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAvKiBJdGVyYXRlIHRoZSBsb29w
ICovCiAgICAgICB9Ci0gICAgZWxzZSBpZiAobmV4dGNoICE9IEVPRikgKHJlY2VpdmVfdW5nZXRj
KShuZXh0Y2gpOyAgIC8qIEZvciBuZXh0IHRpbWUgKi8KLSAgICBlbHNlIGNoID0gRU9GOyAgICAg
ICAgICAgICAgICAgICAvKiBDYXVzZSBtYWluIGxvb3AgdG8gZXhpdCBhdCBlbmQgKi8KKyAgICBl
bHNlIGlmIChuZXh0Y2ggPj0gMCkJLyogbm90IEVPRiwgRVJSIGV0YyAqLworICAgICAgKHJlY2Vp
dmVfdW5nZXRjKShuZXh0Y2gpOyAgIC8qIEZvciBuZXh0IHRpbWUgKi8KKyAgICBlbHNlIGNoID0g
bmV4dGNoOyAgICAgICAgICAgICAgICAgICAvKiBDYXVzZSBtYWluIGxvb3AgdG8gZXhpdCBhdCBl
bmQgKi8KICAgICB9CiAKICAgLyogV2UgaGF2ZSBnb3QgdG8gdGhlIHJlYWwgbGluZSBlbmQuIFRl
cm1pbmF0ZSB0aGUgc3RyaW5nIGFuZCByZWxlYXNlIHN0b3JlCkBAIC0yMTU4LDcgKzIyMDYsNyBA
QAogCiAgIGVsc2UKICAgICB7Ci0gICAgdXNjaGFyICpwID0gbmV4dC0+dGV4dDsKKyAgICB1c2No
YXIgKiBwID0gbmV4dC0+dGV4dDsKIAogICAgIC8qIElmIG5vdCBhIHZhbGlkIGhlYWRlciBsaW5l
LCBicmVhayBmcm9tIHRoZSBoZWFkZXIgcmVhZGluZyBsb29wLCBsZWF2aW5nCiAgICAgbmV4dCAh
PSBOVUxMLCBpbmRpY2F0aW5nIHRoYXQgaXQgaG9sZHMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGJv
ZHkuICovCkBAIC0yMjU2LDE2ICsyMzA0LDIyIEBACiAgICAgfQogCiAgIC8qIFRoZSBsaW5lIGhh
cyBiZWVuIGhhbmRsZWQuIElmIHdlIGhhdmUgaGl0IEVPRiwgYnJlYWsgb3V0IG9mIHRoZSBsb29w
LAotICBpbmRpY2F0aW5nIG5vIHBlbmRpbmcgZGF0YSBsaW5lLiAqLworICBpbmRpY2F0aW5nIG5v
IHBlbmRpbmcgZGF0YSBsaW5lIGFuZCBubyBtb3JlIGRhdGEgZm9yIHRoZSBtZXNzYWdlICovCiAK
LSAgaWYgKGNoID09IEVPRikgeyBuZXh0ID0gTlVMTDsgYnJlYWs7IH0KKyAgaWYgKGNoIDwgMCkK
KyAgICB7CisgICAgbmV4dCA9IE5VTEw7CisgICAgaWYgKGNoID09IEVPRikJbWVzc2FnZV9lbmRl
ZCA9IEVORF9ET1Q7CisgICAgZWxzZSBpZiAoY2ggPT0gRVJSKSBtZXNzYWdlX2VuZGVkID0gRU5E
X1BST1RPQ09MOworICAgIGJyZWFrOworICAgIH0KIAogICAvKiBTZXQgdXAgZm9yIHRoZSBuZXh0
IGhlYWRlciAqLwogCiAgIHJlc2V0X3BvaW50ID0gc3RvcmVfbWFyaygpOwogICBoZWFkZXJfc2l6
ZSA9IDI1NjsKLSAgbmV4dCA9IHN0b3JlX2dldChzaXplb2YoaGVhZGVyX2xpbmUpLCBGQUxTRSk7
Ci0gIG5leHQtPnRleHQgPSBzdG9yZV9nZXQoaGVhZGVyX3NpemUsIFRSVUUpOworICBuZXh0ID0g
c3RvcmVfZ2V0KHNpemVvZihoZWFkZXJfbGluZSksIEdFVF9VTlRBSU5URUQpOworICBuZXh0LT50
ZXh0ID0gc3RvcmVfZ2V0KGhlYWRlcl9zaXplLCBHRVRfVEFJTlRFRCk7CiAgIHB0ciA9IDA7CiAg
IGhhZF96ZXJvID0gMDsKICAgcHJldmxpbmVzX2xlbmd0aCA9IDA7CkBAIC0yMjg4LDE0ICsyMzQy
LDIxIEBACiAvKiBFbmQgb2YgZmlsZSBvbiBhbnkgU01UUCBjb25uZWN0aW9uIGlzIGFuIGVycm9y
LiBJZiBhbiBpbmNvbWluZyBTTVRQIGNhbGwKIGlzIGRyb3BwZWQgaW1tZWRpYXRlbHkgYWZ0ZXIg
dmFsaWQgaGVhZGVycywgdGhlIG5leHQgdGhpbmcgd2Ugd2lsbCBzZWUgaXMgRU9GLgogV2UgbXVz
dCB0ZXN0IGZvciB0aGlzIHNwZWNpYWxseSwgYXMgZnVydGhlciBkb3duIHRoZSByZWFkaW5nIG9m
IHRoZSBkYXRhIGlzCi1za2lwcGVkIGlmIGFscmVhZHkgYXQgRU9GLiAqLworc2tpcHBlZCBpZiBh
bHJlYWR5IGF0IEVPRi4KK0luIENIVU5LSU5HIG1vZGUsIGEgcHJvdG9jb2wgZXJyb3IgbWFrZXMg
dXMgZ2l2ZSB1cCBvbiB0aGUgbWVzc2FnZS4gKi8KIAotaWYgKHNtdHBfaW5wdXQgJiYgKHJlY2Vp
dmVfZmVvZikoKSkKLSAgewotICBzbXRwX3JlcGx5ID0gaGFuZGxlX2xvc3RfY29ubmVjdGlvbihV
UyIgKGFmdGVyIGhlYWRlcikiKTsKLSAgc210cF95aWVsZCA9IEZBTFNFOwotICBnb3RvIFRJRFlV
UDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgdG8gZW5kIG9mIGZ1bmN0aW9uICovCi0g
IH0KK2lmIChzbXRwX2lucHV0KQorICBpZiAoKHJlY2VpdmVfZmVvZikoKSkKKyAgICB7CisgICAg
c210cF9yZXBseSA9IGhhbmRsZV9sb3N0X2Nvbm5lY3Rpb24oVVMiIChhZnRlciBoZWFkZXIpIik7
CisgICAgc210cF95aWVsZCA9IEZBTFNFOworICAgIGdvdG8gVElEWVVQOwkJCS8qIFNraXAgdG8g
ZW5kIG9mIGZ1bmN0aW9uICovCisgICAgfQorICBlbHNlIGlmIChtZXNzYWdlX2VuZGVkID09IEVO
RF9QUk9UT0NPTCkKKyAgICB7CisgICAgc210cF9yZXBseSA9IFVTIiI7CQkJLyogbm8gcmVwbHkg
bmVlZGVkICovCisgICAgZ290byBUSURZVVA7CisgICAgfQogCiAvKiBJZiB0aGlzIGlzIGEgZmls
dGVyIHRlc3QgcnVuIGFuZCBubyBoZWFkZXJzIHdlcmUgcmVhZCwgb3V0cHV0IGEgd2FybmluZwog
aW4gY2FzZSB0aGVyZSBpcyBhIG1pc3Rha2UgaW4gdGhlIHRlc3QgbWVzc2FnZS4gKi8KQEAgLTI1
NDksNyArMjYxMCw3IEBACiAgICAgICAgIHdoaXRlIHNwYWNlIHRoYXQgZm9sbG93cyB0aGUgbmV3
bGluZSBtdXN0IG5vdCBiZSByZW1vdmVkIC0gaXQgaXMgcGFydAogICAgICAgICBvZiB0aGUgaGVh
ZGVyLiAqLwogCi0gICAgICAgIHBwID0gcmVjaXBpZW50ID0gc3RvcmVfZ2V0KHNzIC0gcyArIDEs
IGlzX3RhaW50ZWQocykpOworICAgICAgICBwcCA9IHJlY2lwaWVudCA9IHN0b3JlX2dldChzcyAt
IHMgKyAxLCBzKTsKICAgICAgICAgZm9yICh1c2NoYXIgKiBwID0gczsgcCA8IHNzOyBwKyspIGlm
ICgqcCAhPSAnXG4nKSAqcHArKyA9ICpwOwogICAgICAgICAqcHAgPSAwOwogCkBAIC0yNTgxLDcg
KzI2NDIsNyBAQAogICAgICAgICBpZiAoIXJlY2lwaWVudCAmJiBVc3RyY21wKGVycm1lc3MsICJl
bXB0eSBhZGRyZXNzIikgIT0gMCkKICAgICAgICAgICB7CiAgICAgICAgICAgaW50IGxlbiA9IFVz
dHJsZW4ocyk7Ci0gICAgICAgICAgZXJyb3JfYmxvY2sgKmIgPSBzdG9yZV9nZXQoc2l6ZW9mKGVy
cm9yX2Jsb2NrKSwgRkFMU0UpOworICAgICAgICAgIGVycm9yX2Jsb2NrICogYiA9IHN0b3JlX2dl
dChzaXplb2YoZXJyb3JfYmxvY2spLCBHRVRfVU5UQUlOVEVEKTsKICAgICAgICAgICB3aGlsZSAo
bGVuID4gMCAmJiBpc3NwYWNlKHNbbGVuLTFdKSkgbGVuLS07CiAgICAgICAgICAgYi0+bmV4dCA9
IE5VTEw7CiAgICAgICAgICAgYi0+dGV4dDEgPSBzdHJpbmdfcHJpbnRpbmcoc3RyaW5nX2NvcHlu
KHMsIGxlbikpOwpAQCAtMjY3OCwyOCArMjczOSwyMCBAQAogVXN0cm5jcHkobWVzc2FnZV9pZCAr
IDcsIHN0cmluZ19iYXNlNjIoKGxvbmcgaW50KWdldHBpZCgpKSwgNik7CiAKIC8qIERlYWwgd2l0
aCB0aGUgY2FzZSB3aGVyZSB0aGUgaG9zdCBudW1iZXIgaXMgc2V0LiBUaGUgdmFsdWUgb2YgdGhl
IG51bWJlciB3YXMKLWNoZWNrZWQgd2hlbiBpdCB3YXMgcmVhZCwgdG8gZW5zdXJlIGl0IGlzbid0
IHRvbyBiaWcuIFRoZSB0aW1pbmcgZ3JhbnVsYXJpdHkgaXMKLWxlZnQgaW4gaWRfcmVzb2x1dGlv
biBzbyB0aGF0IGFuIGFwcHJvcHJpYXRlIHdhaXQgY2FuIGJlIGRvbmUgYWZ0ZXIgcmVjZWl2aW5n
Ci10aGUgbWVzc2FnZSwgaWYgbmVjZXNzYXJ5ICh3ZSBob3BlIGl0IHdvbid0IGJlKS4gKi8KK2No
ZWNrZWQgd2hlbiBpdCB3YXMgcmVhZCwgdG8gZW5zdXJlIGl0IGlzbid0IHRvbyBiaWcuICovCiAK
IGlmIChob3N0X251bWJlcl9zdHJpbmcpCi0gIHsKLSAgaWRfcmVzb2x1dGlvbiA9IEJBU0VfNjIg
PT0gNjIgPyA1MDAwIDogMTAwMDA7CiAgIHNwcmludGYoQ1MobWVzc2FnZV9pZCArIE1FU1NBR0Vf
SURfTEVOR1RIIC0gMyksICItJTJzIiwKICAgICBzdHJpbmdfYmFzZTYyKChsb25nIGludCkoCiAg
ICAgICBob3N0X251bWJlciAqICgxMDAwMDAwL2lkX3Jlc29sdXRpb24pICsKICAgICAgICAgbWVz
c2FnZV9pZF90di50dl91c2VjL2lkX3Jlc29sdXRpb24pKSArIDQpOwotICB9CiAKIC8qIEhvc3Qg
bnVtYmVyIG5vdCBzZXQ6IGZpbmFsIGZpZWxkIGlzIGp1c3QgdGhlIGZyYWN0aW9uYWwgdGltZSBh
dCBhbgogYXBwcm9wcmlhdGUgcmVzb2x1dGlvbi4gKi8KIAogZWxzZQotICB7Ci0gIGlkX3Jlc29s
dXRpb24gPSBCQVNFXzYyID09IDYyID8gNTAwIDogMTAwMDsKICAgc3ByaW50ZihDUyhtZXNzYWdl
X2lkICsgTUVTU0FHRV9JRF9MRU5HVEggLSAzKSwgIi0lMnMiLAogICAgIHN0cmluZ19iYXNlNjIo
KGxvbmcgaW50KShtZXNzYWdlX2lkX3R2LnR2X3VzZWMvaWRfcmVzb2x1dGlvbikpICsgNCk7Ci0g
IH0KIAogLyogQWRkIHRoZSBjdXJyZW50IG1lc3NhZ2UgaWQgb250byB0aGUgY3VycmVudCBwcm9j
ZXNzIGluZm8gc3RyaW5nIGlmCiBpdCB3aWxsIGZpdC4gKi8KQEAgLTI3ODgsNyArMjg0MSw3IEBA
CiAKIGlmIChMT0dHSU5HKHJlY2VpdmVkX3JlY2lwaWVudHMpKQogICB7Ci0gIHJhd19yZWNpcGll
bnRzID0gc3RvcmVfZ2V0KHJlY2lwaWVudHNfY291bnQgKiBzaXplb2YodXNjaGFyICopLCBGQUxT
RSk7CisgIHJhd19yZWNpcGllbnRzID0gc3RvcmVfZ2V0KHJlY2lwaWVudHNfY291bnQgKiBzaXpl
b2YodXNjaGFyICopLCBHRVRfVU5UQUlOVEVEKTsKICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNp
cGllbnRzX2NvdW50OyBpKyspCiAgICAgcmF3X3JlY2lwaWVudHNbaV0gPSBzdHJpbmdfY29weShy
ZWNpcGllbnRzX2xpc3RbaV0uYWRkcmVzcyk7CiAgIHJhd19yZWNpcGllbnRzX2NvdW50ID0gcmVj
aXBpZW50c19jb3VudDsKQEAgLTI3OTgsMTAgKzI4NTEsMTMgQEAKIHJlY2lwaWVudHMgd2lsbCBn
ZXQgaGVyZSBvbmx5IGlmIHRoZSBjb25kaXRpb25zIHdlcmUgcmlnaHQgKGFsbG93X3VucXVhbGlm
aWVkXwogcmVjaXBpZW50IGlzIFRSVUUpLiAqLwogCitERUJVRyhEX3Jld3JpdGUpCisgIHsgZGVi
dWdfcHJpbnRmX2luZGVudCgicXVhbGlmeSAmIHJld3JpdGUgcmVjaXBpZW50cyBsaXN0XG4iKTsg
YWNsX2xldmVsKys7IH0KIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjaXBpZW50c19jb3VudDsgaSsr
KQogICByZWNpcGllbnRzX2xpc3RbaV0uYWRkcmVzcyA9CS8qIGRlY29uc3Qgb2sgYXMgc3JjIHdh
cyBub3QgY29udCAqLwogICAgIFVTIHJld3JpdGVfYWRkcmVzcyhyZWNpcGllbnRzX2xpc3RbaV0u
YWRkcmVzcywgVFJVRSwgVFJVRSwKICAgICAgIGdsb2JhbF9yZXdyaXRlX3J1bGVzLCByZXdyaXRl
X2V4aXN0ZmxhZ3MpOworREVCVUcoRF9yZXdyaXRlKSBhY2xfbGV2ZWwtLTsKIAogLyogSWYgdGhl
cmUgaXMgbm8gRnJvbTogaGVhZGVyLCBnZW5lcmF0ZSBvbmUgZm9yIGxvY2FsICh3aXRob3V0CiBz
dXBwcmVzc19sb2NhbF9maXh1cHMpIG9yIHN1Ym1pc3Npb25fbW9kZSBtZXNzYWdlcy4gSWYgdGhl
cmUgaXMgbm8gc2VuZGVyCkBAIC0yODE1LDcgKzI4NzEsNyBAQAogaWYgKCAgIWZyb21faGVhZGVy
CiAgICAmJiAoKCFzZW5kZXJfaG9zdF9hZGRyZXNzICYmICFmLnN1cHByZXNzX2xvY2FsX2ZpeHVw
cykgfHwgZi5zdWJtaXNzaW9uX21vZGUpKQogICB7Ci0gIHVzY2hhciAqb25hbWUgPSBVUyIiOwor
ICBjb25zdCB1c2NoYXIgKiBvbmFtZSA9IFVTIiI7CiAKICAgLyogVXNlIHRoZSBvcmlnaW5hdG9y
X25hbWUgaWYgdGhpcyBpcyBhIGxvY2FsbHkgc3VibWl0dGVkIG1lc3NhZ2UgYW5kIHRoZQogICBj
YWxsZXIgaXMgbm90IHRydXN0ZWQuIEZvciB0cnVzdGVkIGNhbGxlcnMsIHVzZSBpdCBvbmx5IGlm
IC1GIHdhcyB1c2VkIHRvCkBAIC0yOTczLDYgKzMwMjksOCBAQAogLyogSWYgdGhlcmUgYXJlIGFu
eSByZXdyaXRpbmcgcnVsZXMsIGFwcGx5IHRoZW0gdG8gdGhlIHNlbmRlciBhZGRyZXNzLCB1bmxl
c3MKIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmV3cml0dGVuIGFzIHBhcnQgb2YgdmVyaWZpY2F0aW9u
IGZvciBTTVRQIGlucHV0LiAqLwogCitERUJVRyhEX3Jld3JpdGUpCisgIHsgZGVidWdfcHJpbnRm
KCJnbG9iYWwgcmV3cml0ZSBydWxlc1xuIik7IGFjbF9sZXZlbCsrOyB9CiBpZiAoZ2xvYmFsX3Jl
d3JpdGVfcnVsZXMgJiYgIXNlbmRlcl9hZGRyZXNzX3VucmV3cml0dGVuICYmICpzZW5kZXJfYWRk
cmVzcykKICAgewogICAvKiBkZWNvbnN0IG9rIGFzIHNyYyB3YXMgbm90IGNvbnN0ICovCkBAIC0y
OTgxLDYgKzMwMzksNyBAQAogICBERUJVRyhEX3JlY2VpdmV8RF9yZXdyaXRlKQogICAgIGRlYnVn
X3ByaW50ZigicmV3cml0dGVuIHNlbmRlciA9ICVzXG4iLCBzZW5kZXJfYWRkcmVzcyk7CiAgIH0K
K0RFQlVHKERfcmV3cml0ZSkgYWNsX2xldmVsLS07CiAKIAogLyogVGhlIGhlYWRlcnMgbXVzdCBi
ZSBydW4gdGhyb3VnaCByZXdyaXRlX2hlYWRlcigpLCBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdApA
QCAtMjk5NywxMiArMzA1NiwxMyBAQAogZG9jdW1lbnRlZCBhcyBoYXBwZW5pbmcgKmFmdGVyKiBy
ZWNpcGllbnQgYWRkcmVzc2VzIGFyZSB0YWtlbiBmcm9tIHRoZSBoZWFkZXJzCiBieSB0aGUgLXQg
Y29tbWFuZCBsaW5lIG9wdGlvbi4gQW4gYWRkZWQgU2VuZGVyOiBnZXRzIHJld3JpdHRlbiBoZXJl
LiAqLwogCi1mb3IgKGhlYWRlcl9saW5lICogaCA9IGhlYWRlcl9saXN0LT5uZXh0OyBoOyBoID0g
aC0+bmV4dCkKLSAgewotICBoZWFkZXJfbGluZSAqbmV3aCA9IHJld3JpdGVfaGVhZGVyKGgsIE5V
TEwsIE5VTEwsIGdsb2JhbF9yZXdyaXRlX3J1bGVzLAotICAgIHJld3JpdGVfZXhpc3RmbGFncywg
VFJVRSk7Ci0gIGlmIChuZXdoKSBoID0gbmV3aDsKLSAgfQorREVCVUcoRF9yZXdyaXRlKQorICB7
IGRlYnVnX3ByaW50ZigicmV3cml0ZSBoZWFkZXJzXG4iKTsgYWNsX2xldmVsKys7IH0KK2ZvciAo
aGVhZGVyX2xpbmUgKiBoID0gaGVhZGVyX2xpc3QtPm5leHQsICogbmV3aDsgaDsgaCA9IGgtPm5l
eHQpCisgIGlmICgobmV3aCA9IHJld3JpdGVfaGVhZGVyKGgsIE5VTEwsIE5VTEwsIGdsb2JhbF9y
ZXdyaXRlX3J1bGVzLAorCQkJICAgICAgcmV3cml0ZV9leGlzdGZsYWdzLCBUUlVFKSkpCisgICAg
aCA9IG5ld2g7CitERUJVRyhEX3Jld3JpdGUpIGFjbF9sZXZlbC0tOwogCiAKIC8qIEFuIFJGQyA4
MjIgKHNpYykgbWVzc2FnZSBpcyBub3QgbGVnYWwgdW5sZXNzIGl0IGhhcyBhdCBsZWFzdCBvbmUg
b2YgInRvIiwKQEAgLTMyODIsNyArMzM0Miw3IEBACiAvKiBObyBJL08gZXJyb3JzIHdlcmUgZW5j
b3VudGVyZWQgd2hpbGUgd3JpdGluZyB0aGUgZGF0YSBmaWxlLiAqLwogCiBERUJVRyhEX3JlY2Vp
dmUpIGRlYnVnX3ByaW50ZigiRGF0YSBmaWxlIHdyaXR0ZW4gZm9yIG1lc3NhZ2UgJXNcbiIsIG1l
c3NhZ2VfaWQpOwotaWYgKExPR0dJTkcocmVjZWl2ZV90aW1lKSkgdGltZXNpbmNlKCZyZWNlaXZl
ZF90aW1lX3Rha2VuLCAmcmVjZWl2ZWRfdGltZSk7CitnZXR0aW1lb2ZkYXkoJnJlY2VpdmVkX3Rp
bWVfY29tcGxldGUsIE5VTEwpOwogCiAKIC8qIElmIHRoZXJlIHdlcmUgYW55IGJhZCBhZGRyZXNz
ZXMgZXh0cmFjdGVkIGJ5IC10LCBvciB0aGVyZSB3ZXJlIG5vIHJlY2lwaWVudHMKQEAgLTQwMDQs
NyArNDA2NCw3IEBACiBpZiAoTE9HR0lORyh0bHNfY2lwaGVyKSAmJiB0bHNfaW4uY2lwaGVyKQog
ICB7CiAgIGcgPSBzdHJpbmdfYXBwZW5kKGcsIDIsIFVTIiBYPSIsIHRsc19pbi5jaXBoZXIpOwot
IyBpZmRlZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQorIyBpZm5kZWYgRElTQUJMRV9UTFNfUkVT
VU1FCiAgIGlmIChMT0dHSU5HKHRsc19yZXN1bXB0aW9uKSAmJiB0bHNfaW4ucmVzdW1wdGlvbiAm
IFJFU1VNRV9VU0VEKQogICAgIGcgPSBzdHJpbmdfY2F0bihnLCBVUyIqIiwgMSk7CiAjIGVuZGlm
CkBAIC00MDYwLDcgKzQxMjAsMTEgQEAKICNlbmRpZgogCiBpZiAoTE9HR0lORyhyZWNlaXZlX3Rp
bWUpKQotICBnID0gc3RyaW5nX2FwcGVuZChnLCAyLCBVUyIgUlQ9Iiwgc3RyaW5nX3RpbWVkaWZm
KCZyZWNlaXZlZF90aW1lX3Rha2VuKSk7CisgIHsKKyAgc3RydWN0IHRpbWV2YWwgZGlmZiA9IHJl
Y2VpdmVkX3RpbWVfY29tcGxldGU7CisgIHRpbWVkaWZmKCZkaWZmLCAmcmVjZWl2ZWRfdGltZSk7
CisgIGcgPSBzdHJpbmdfYXBwZW5kKGcsIDIsIFVTIiBSVD0iLCBzdHJpbmdfdGltZWRpZmYoJmRp
ZmYpKTsKKyAgfQogCiBpZiAoKnF1ZXVlX25hbWUpCiAgIGcgPSBzdHJpbmdfYXBwZW5kKGcsIDIs
IFVTIiBRPSIsIHF1ZXVlX25hbWUpOwpAQCAtNDA3Nyw2ICs0MTQxLDggQEAKICAgdXNjaGFyICog
b2xkX2lkOwogICBCT09MIHNhdmVfYWxsb3dfZG9tYWluX2xpdGVyYWxzID0gYWxsb3dfZG9tYWlu
X2xpdGVyYWxzOwogICBhbGxvd19kb21haW5fbGl0ZXJhbHMgPSBUUlVFOworICBpbnQgc3RhcnQs
IGVuZCwgZG9tYWluOworCiAgIG9sZF9pZCA9IHBhcnNlX2V4dHJhY3RfYWRkcmVzcyhVc3RyY2hy
KG1zZ2lkX2hlYWRlci0+dGV4dCwgJzonKSArIDEsCiAgICAgJmVycm1zZywgJnN0YXJ0LCAmZW5k
LCAmZG9tYWluLCBGQUxTRSk7CiAgIGFsbG93X2RvbWFpbl9saXRlcmFscyA9IHNhdmVfYWxsb3df
ZG9tYWluX2xpdGVyYWxzOwpAQCAtNDE2OSw3ICs0MjM1LDcgQEAKIC8qIEJlZm9yZSBzZW5kaW5n
IGFuIFNNVFAgcmVzcG9uc2UgaW4gYSBUQ1AvSVAgc2Vzc2lvbiwgd2UgY2hlY2sgdG8gc2VlIGlm
IHRoZQogY29ubmVjdGlvbiBoYXMgZ29uZSBhd2F5LiBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgaWYg
dGhlcmUgaXMgbm8gdW5jb25zdW1lZCBpbnB1dAogd2FpdGluZyBpbiB0aGUgbG9jYWwgaW5wdXQg
YnVmZmVyLiBXZSBjYW4gdGVzdCBmb3IgdGhpcyBieSBjYWxsaW5nCi1yZWNlaXZlX3NtdHBfYnVm
ZmVyZWQoKS4gUkZDIDI5MjAgKHBpcGVsaW5pbmcpIGV4cGxpY2l0bHkgYWxsb3dzIGZvciBhZGRp
dGlvbmFsCityZWNlaXZlX2hhc2MoKS4gUkZDIDI5MjAgKHBpcGVsaW5pbmcpIGV4cGxpY2l0bHkg
YWxsb3dzIGZvciBhZGRpdGlvbmFsCiBpbnB1dCB0byBiZSBzZW50IGZvbGxvd2luZyB0aGUgZmlu
YWwgZG90LCBzbyB0aGUgcHJlc2VuY2Ugb2YgZm9sbG93aW5nIGlucHV0IGlzCiBub3QgYW4gZXJy
b3IuCiAKQEAgLTQxODQsMjAgKzQyNTAsMTQgQEAKIGNvbm5lY3Rpb24gd2lsbCB2YW5pc2ggYmV0
d2VlbiB0aGUgdGltZSBvZiB0aGlzIHRlc3QgYW5kIHRoZSBzZW5kaW5nIG9mIHRoZQogcmVzcG9u
c2UsIGJ1dCB0aGUgY2hhbmNlIG9mIHRoaXMgaGFwcGVuaW5nIHNob3VsZCBiZSBzbWFsbC4gKi8K
IAotaWYgKHNtdHBfaW5wdXQgJiYgc2VuZGVyX2hvc3RfYWRkcmVzcyAmJiAhZi5zZW5kZXJfaG9z
dF9ub3Rzb2NrZXQgJiYKLSAgICAhcmVjZWl2ZV9zbXRwX2J1ZmZlcmVkKCkpCitpZiAoICBzbXRw
X2lucHV0ICYmIHNlbmRlcl9ob3N0X2FkZHJlc3MgJiYgIWYuc2VuZGVyX2hvc3Rfbm90c29ja2V0
CisgICAmJiAhcmVjZWl2ZV9oYXNjKCkpCiAgIHsKLSAgc3RydWN0IHRpbWV2YWwgdHY7Ci0gIGZk
X3NldCBzZWxlY3RfY2hlY2s7Ci0gIEZEX1pFUk8oJnNlbGVjdF9jaGVjayk7Ci0gIEZEX1NFVChm
aWxlbm8oc210cF9pbiksICZzZWxlY3RfY2hlY2spOwotICB0di50dl9zZWMgPSAwOwotICB0di50
dl91c2VjID0gMDsKLQotICBpZiAoc2VsZWN0KGZpbGVubyhzbXRwX2luKSArIDEsICZzZWxlY3Rf
Y2hlY2ssIE5VTEwsIE5VTEwsICZ0dikgIT0gMCkKKyAgaWYgKHBvbGxfb25lX2ZkKGZpbGVubyhz
bXRwX2luKSwgUE9MTElOLCAwKSAhPSAwKQogICAgIHsKICAgICBpbnQgYyA9IChyZWNlaXZlX2dl
dGMpKEdFVENfQlVGRkVSX1VOTElNSVRFRCk7Ci0gICAgaWYgKGMgIT0gRU9GKSAocmVjZWl2ZV91
bmdldGMpKGMpOyBlbHNlCisgICAgaWYgKGMgIT0gRU9GKSAocmVjZWl2ZV91bmdldGMpKGMpOwor
ICAgIGVsc2UKICAgICAgIHsKICAgICAgIHNtdHBfbm90cXVpdF9leGl0KFVTImNvbm5lY3Rpb24t
bG9zdCIsIE5VTEwsIE5VTEwpOwogICAgICAgc210cF9yZXBseSA9IFVTIiI7ICAgIC8qIE5vIGF0
dGVtcHQgdG8gc2VuZCBhIHJlc3BvbnNlICovCkBAIC00MzE4LDIzICs0Mzc4LDYgQEAKIAogCiBU
SURZVVA6Ci0vKiBJbiBTTVRQIHNlc3Npb25zIHdlIG1heSByZWNlaXZlIHNldmVyYWwgbWVzc2Fn
ZXMgaW4gb25lIGNvbm5lY3Rpb24uIEFmdGVyCi1lYWNoIG9uZSwgd2Ugd2FpdCBmb3IgdGhlIGNs
b2NrIHRvIHRpY2sgYXQgdGhlIGxldmVsIG9mIG1lc3NhZ2UtaWQgZ3JhbnVsYXJpdHkuCi1UaGlz
IGlzIHNvIHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9mIHRpbWUrcGlkIGlzIHVuaXF1ZSwgZXZlbiBv
biBzeXN0ZW1zIHdoZXJlIHRoZQotcGlkIGNhbiBiZSByZS11c2VkIHdpdGhpbiBvdXIgdGltZSBp
bnRlcnZhbC4gV2UgY2FuJ3Qgc2hvcnRlbiB0aGUgaW50ZXJ2YWwKLXdpdGhvdXQgcmUtZGVzaWdu
aW5nIHRoZSBtZXNzYWdlLWlkLiBTZWUgY29tbWVudHMgYWJvdmUgd2hlcmUgdGhlIG1lc3NhZ2Ug
aWQgaXMKLWNyZWF0ZWQuIFRoaXMgaXMgU29tZXRoaW5nIEZvciBUaGUgRnV0dXJlLgotRG8gdGhp
cyB3YWl0IGFueSB0aW1lIHdlIGhhdmUgY3JlYXRlZCBhIG1lc3NhZ2UtaWQsIGV2ZW4gaWYgd2Ug
cmVqZWN0ZWQgdGhlCi1tZXNzYWdlLiAgVGhpcyBnaXZlcyB1bmlxdWUgSURzIGZvciBsb2dnaW5n
IGRvbmUgYnkgQUNMcy4gKi8KLQotaWYgKGlkX3Jlc29sdXRpb24gIT0gMCkKLSAgewotICBtZXNz
YWdlX2lkX3R2LnR2X3VzZWMgPSAobWVzc2FnZV9pZF90di50dl91c2VjL2lkX3Jlc29sdXRpb24p
ICogaWRfcmVzb2x1dGlvbjsKLSAgZXhpbV93YWl0X3RpY2soJm1lc3NhZ2VfaWRfdHYsIGlkX3Jl
c29sdXRpb24pOwotICBpZF9yZXNvbHV0aW9uID0gMDsKLSAgfQotCi0KIHByb2Nlc3NfaW5mb1tw
cm9jZXNzX2luZm9fbGVuXSA9IDA7CQkJLyogUmVtb3ZlIG1lc3NhZ2UgaWQgKi8KIGlmIChzcG9v
bF9kYXRhX2ZpbGUgJiYgY3V0dGhyb3VnaF9kb25lID09IE5PVF9UUklFRCkKICAgewpAQCAtNDM4
NSwxMiArNDQyOCwxNyBAQAogCiAgICAgICBlbHNlIGlmIChjaHVua2luZ19zdGF0ZSA+IENIVU5L
SU5HX09GRkVSRUQpCiAJewotICAgICAgICBzbXRwX3ByaW50ZigiMjUwLSAldSBieXRlIGNodW5r
LCB0b3RhbCAlZFxyXG4yNTAgT0sgaWQ9JXNcclxuIiwgRkFMU0UsCisJLyogSWYgdGhlcmUgaXMg
bW9yZSBpbnB1dCB3YWl0aW5nLCBubyBuZWVkIHRvIGZsdXNoIChwcm9iYWJseSB0aGUgY2xpZW50
CisJcGlwZWxpbmVkIFFVSVQgYWZ0ZXIgZGF0YSkuICBXZSBjaGVjayBvbmx5IHRoZSBpbi1wcm9j
ZXNzIGJ1ZmZlciwgbm90CisJdGhlIHNvY2tldC4gKi8KKworICAgICAgICBzbXRwX3ByaW50Zigi
MjUwLSAldSBieXRlIGNodW5rLCB0b3RhbCAlZFxyXG4yNTAgT0sgaWQ9JXNcclxuIiwKKwkgICAg
cmVjZWl2ZV9oYXNjKCksCiAJICAgIGNodW5raW5nX2RhdGFzaXplLCBtZXNzYWdlX3NpemUrbWVz
c2FnZV9saW5lY291bnQsIG1lc3NhZ2VfaWQpOwogCWNodW5raW5nX3N0YXRlID0gQ0hVTktJTkdf
T0ZGRVJFRDsKIAl9CiAgICAgICBlbHNlCi0gICAgICAgIHNtdHBfcHJpbnRmKCIyNTAgT0sgaWQ9
JXNcclxuIiwgRkFMU0UsIG1lc3NhZ2VfaWQpOworICAgICAgICBzbXRwX3ByaW50ZigiMjUwIE9L
IGlkPSVzXHJcbiIsIHJlY2VpdmVfaGFzYygpLCBtZXNzYWdlX2lkKTsKIAogICAgICAgaWYgKGhv
c3RfY2hlY2tpbmcpCiAgICAgICAgIGZwcmludGYoc3Rkb3V0LApkaWZmIC11ciBleGltLm9yaWcv
c3JjL3JlZ2V4LmMgZXhpbS9zcmMvcmVnZXguYwotLS0gZXhpbS5vcmlnL3NyYy9yZWdleC5jCTIw
MjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9yZWdleC5jCTIw
MjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDkgKzIsMTAgQEAKICogICAg
IEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBDb3B5cmlnaHQg
KGMpIFRvbSBLaXN0bmVyIDx0b21AZHVuY2FudGhyYXgubmV0PiAyMDAzLTIwMTUKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMTYgLSAyMDIyCisgKiBDb3B5cmln
aHQgKGMpIFRvbSBLaXN0bmVyIDx0b21AZHVuY2FudGhyYXgubmV0PiAyMDAzLTIwMTUKICAqIExp
Y2Vuc2U6IEdQTAotICogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDE2IC0g
MjAxOAogICovCiAKIC8qIENvZGUgZm9yIG1hdGNoaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYWdh
aW5zdCBoZWFkZXJzIGFuZCBib2R5LgpAQCAtMTcsNyArMTgsNyBAQAogCiAvKiBTdHJ1Y3R1cmUg
dG8gaG9sZCBhIGxpc3Qgb2YgUmVndWxhciBleHByZXNzaW9ucyAqLwogdHlwZWRlZiBzdHJ1Y3Qg
cGNyZV9saXN0IHsKLSAgcGNyZSAqcmU7CisgIHBjcmUyX2NvZGUgKnJlOwogICB1c2NoYXIgKnBj
cmVfdGV4dDsKICAgc3RydWN0IHBjcmVfbGlzdCAqbmV4dDsKIH0gcGNyZV9saXN0OwpAQCAtMzIs
OCArMzMsNiBAQAogewogaW50IHNlcCA9IDA7CiB1c2NoYXIgKnJlZ2V4X3N0cmluZzsKLWNvbnN0
IGNoYXIgKnBjcmVfZXJyb3I7Ci1pbnQgcGNyZV9lcnJvZmZzZXQ7CiBwY3JlX2xpc3QgKnJlX2xp
c3RfaGVhZCA9IE5VTEw7CiBwY3JlX2xpc3QgKnJpOwogCkBAIC00MSwxOSArNDAsMjMgQEAKIHdo
aWxlICgocmVnZXhfc3RyaW5nID0gc3RyaW5nX25leHRpbmxpc3QoJmxpc3QsICZzZXAsIE5VTEws
IDApKSkKICAgaWYgKHN0cmNtcGljKHJlZ2V4X3N0cmluZywgVVMiZmFsc2UiKSAhPSAwICYmIFVz
dHJjbXAocmVnZXhfc3RyaW5nLCAiMCIpICE9IDApCiAgICAgewotICAgIHBjcmUgKnJlOworICAg
IHBjcmUyX2NvZGUgKiByZTsKKyAgICBpbnQgZXJyOworICAgIFBDUkUyX1NJWkUgcGNyZV9lcnJv
ZmZzZXQ7CiAKICAgICAvKiBjb21waWxlIG91ciByZWd1bGFyIGV4cHJlc3Npb24gKi8KLSAgICBp
ZiAoIShyZSA9IHBjcmVfY29tcGlsZSggQ1MgcmVnZXhfc3RyaW5nLAotCQkgICAgICAgMCwgJnBj
cmVfZXJyb3IsICZwY3JlX2Vycm9mZnNldCwgTlVMTCApKSkKKyAgICBpZiAoIShyZSA9IHBjcmUy
X2NvbXBpbGUoIChQQ1JFMl9TUFRSKSByZWdleF9zdHJpbmcsIFBDUkUyX1pFUk9fVEVSTUlOQVRF
RCwKKwkJICAwLCAmZXJyLCAmcGNyZV9lcnJvZmZzZXQsIHBjcmVfY21wX2N0eCkpKQogICAgICAg
eworICAgICAgdXNjaGFyIGVycmJ1ZlsxMjhdOworICAgICAgcGNyZTJfZ2V0X2Vycm9yX21lc3Nh
Z2UoZXJyLCBlcnJidWYsIHNpemVvZihlcnJidWYpKTsKICAgICAgIGxvZ193cml0ZSgwLCBMT0df
TUFJTiwKLQkgICAicmVnZXggYWNsIGNvbmRpdGlvbiB3YXJuaW5nIC0gZXJyb3IgaW4gcmVnZXgg
JyVzJzogJXMgYXQgb2Zmc2V0ICVkLCBza2lwcGVkLiIsCi0JICAgcmVnZXhfc3RyaW5nLCBwY3Jl
X2Vycm9yLCBwY3JlX2Vycm9mZnNldCk7CisJICAgInJlZ2V4IGFjbCBjb25kaXRpb24gd2Fybmlu
ZyAtIGVycm9yIGluIHJlZ2V4ICclcyc6ICVzIGF0IG9mZnNldCAlbGQsIHNraXBwZWQuIiwKKwkg
ICByZWdleF9zdHJpbmcsIGVycmJ1ZiwgKGxvbmcpcGNyZV9lcnJvZmZzZXQpOwogICAgICAgY29u
dGludWU7CiAgICAgICB9CiAKLSAgICByaSA9IHN0b3JlX2dldChzaXplb2YocGNyZV9saXN0KSwg
RkFMU0UpOworICAgIHJpID0gc3RvcmVfZ2V0KHNpemVvZihwY3JlX2xpc3QpLCBHRVRfVU5UQUlO
VEVEKTsKICAgICByaS0+cmUgPSByZTsKICAgICByaS0+cGNyZV90ZXh0ID0gcmVnZXhfc3RyaW5n
OwogICAgIHJpLT5uZXh0ID0gcmVfbGlzdF9oZWFkOwpAQCAtNjUsMjUgKzY4LDMxIEBACiBzdGF0
aWMgaW50CiBtYXRjaGVyKHBjcmVfbGlzdCAqIHJlX2xpc3RfaGVhZCwgdXNjaGFyICogbGluZWJ1
ZmZlciwgaW50IGxlbikKIHsKLWZvcihwY3JlX2xpc3QgKiByaSA9IHJlX2xpc3RfaGVhZDsgcmk7
IHJpID0gcmktPm5leHQpCitwY3JlMl9tYXRjaF9kYXRhICogbWQgPSBwY3JlMl9tYXRjaF9kYXRh
X2NyZWF0ZShSRUdFWF9WQVJTICsgMSwgcGNyZV9nZW5fY3R4KTsKKworZm9yIChwY3JlX2xpc3Qg
KiByaSA9IHJlX2xpc3RfaGVhZDsgcmk7IHJpID0gcmktPm5leHQpCiAgIHsKLSAgaW50IG92ZWNb
MyooUkVHRVhfVkFSUysxKV07CiAgIGludCBuOwogCiAgIC8qIHRyeSBtYXRjaGVyIG9uIHRoZSBs
aW5lICovCi0gIGlmICgobiA9IHBjcmVfZXhlYyhyaS0+cmUsIE5VTEwsIENTIGxpbmVidWZmZXIs
IGxlbiwgMCwgMCwgb3ZlYywgbmVsZW0ob3ZlYykpKSA+IDApCisgIGlmICgobiA9IHBjcmUyX21h
dGNoKHJpLT5yZSwgKFBDUkUyX1NQVFIpbGluZWJ1ZmZlciwgbGVuLCAwLCAwLCBtZCwgcGNyZV9t
dGNfY3R4KSkgPiAwKQogICAgIHsKICAgICBVc3RybmNweShyZWdleF9tYXRjaF9zdHJpbmdfYnVm
ZmVyLCByaS0+cGNyZV90ZXh0LAogCSAgICAgIHNpemVvZihyZWdleF9tYXRjaF9zdHJpbmdfYnVm
ZmVyKS0xKTsKICAgICByZWdleF9tYXRjaF9zdHJpbmcgPSByZWdleF9tYXRjaF9zdHJpbmdfYnVm
ZmVyOwogCiAgICAgZm9yIChpbnQgbm4gPSAxOyBubiA8IG47IG5uKyspCi0gICAgICByZWdleF92
YXJzW25uLTFdID0KLQlzdHJpbmdfY29weW4obGluZWJ1ZmZlciArIG92ZWNbbm4qMl0sIG92ZWNb
bm4qMisxXSAtIG92ZWNbbm4qMl0pOworICAgICAgeworICAgICAgUENSRTJfVUNIQVIgKiBjc3Ry
OworICAgICAgUENSRTJfU0laRSBjc2xlbjsKKyAgICAgIHBjcmUyX3N1YnN0cmluZ19nZXRfYnlu
dW1iZXIobWQsIG5uLCAmY3N0ciwgJmNzbGVuKTsKKyAgICAgIHJlZ2V4X3ZhcnNbbm4tMV0gPSBD
VVMgY3N0cjsKKyAgICAgIH0KIAogICAgIHJldHVybiBPSzsKICAgICB9CiAgIH0KK3BjcmUyX21h
dGNoX2RhdGFfZnJlZShtZCk7CiByZXR1cm4gRkFJTDsKIH0KIApAQCAtMTI1LDcgKzEzNCw3IEBA
CiAgIHJldHVybiBGQUlMOwkJCS8qIG5vIHJlZ2V4ZXMgLT4gbm90aGluZyB0byBkbyAqLwogCiAv
KiBtYXRjaCBlYWNoIGxpbmUgYWdhaW5zdCBhbGwgcmVnZXhlcyAqLwotbGluZWJ1ZmZlciA9IHN0
b3JlX2dldCgzMjc2NywgVFJVRSk7CS8qIHRhaW50ZWQgKi8KK2xpbmVidWZmZXIgPSBzdG9yZV9n
ZXQoMzI3NjcsIEdFVF9UQUlOVEVEKTsKIHdoaWxlIChmZ2V0cyhDUyBsaW5lYnVmZmVyLCAzMjc2
NywgbWJveF9maWxlKSkKICAgewogICBpZiAoICBtaW1lX3N0cmVhbSAmJiBtaW1lX2N1cnJlbnRf
Ym91bmRhcnkJCS8qIGNoZWNrIGJvdW5kYXJ5ICovCkBAIC0xOTYsNyArMjA1LDcgQEAKICAgfQog
CiAvKiBnZXQgMzJrIG1lbW9yeSwgdGFpbnRlZCAqLwotbWltZV9zdWJqZWN0ID0gc3RvcmVfZ2V0
KDMyNzY3LCBUUlVFKTsKK21pbWVfc3ViamVjdCA9IHN0b3JlX2dldCgzMjc2NywgR0VUX1RBSU5U
RUQpOwogCiBtaW1lX3N1YmplY3RfbGVuID0gZnJlYWQobWltZV9zdWJqZWN0LCAxLCAzMjc2Niwg
Zik7CiAKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9yZXRyeS5jIGV4aW0vc3JjL3JldHJ5LmMKLS0t
IGV4aW0ub3JpZy9zcmMvcmV0cnkuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMw
MAorKysgZXhpbS9zcmMvcmV0cnkuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMw
MApAQCAtMiw4ICsyLDggQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9y
dCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAy
MDIyICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAy
MDE4ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8q
IFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRp
b24uICovCiAKIC8qIEZ1bmN0aW9ucyBjb25jZXJuZWQgd2l0aCByZXRyeWluZyB1bnN1Y2Nlc3Nm
dWwgZGVsaXZlcmllcy4gKi8KQEAgLTEyNywxMSArMTI3LDEwIEBACiB7CiBCT09MIHlpZWxkID0g
RkFMU0U7CiB0aW1lX3Qgbm93ID0gdGltZShOVUxMKTsKLXVzY2hhciAqaG9zdF9rZXksICptZXNz
YWdlX2tleTsKLW9wZW5fZGIgZGJibG9jazsKLW9wZW5fZGIgKmRibV9maWxlOwotdHJlZV9ub2Rl
ICpub2RlOwotZGJkYXRhX3JldHJ5ICpob3N0X3JldHJ5X3JlY29yZCwgKm1lc3NhZ2VfcmV0cnlf
cmVjb3JkOwordXNjaGFyICogaG9zdF9rZXksICogbWVzc2FnZV9rZXk7CitvcGVuX2RiIGRiYmxv
Y2ssICogZGJtX2ZpbGU7Cit0cmVlX25vZGUgKiBub2RlOworZGJkYXRhX3JldHJ5ICogaG9zdF9y
ZXRyeV9yZWNvcmQsICogbWVzc2FnZV9yZXRyeV9yZWNvcmQ7CiAKICpyZXRyeV9ob3N0X2tleSA9
ICpyZXRyeV9tZXNzYWdlX2tleSA9IE5VTEw7CiAKQEAgLTE0NSw5ICsxNDQsOSBAQAogLyogR2Vu
ZXJhdGUgdGhlIGhvc3Qga2V5IGZvciB0aGUgdW51c2FibGUgdHJlZSBhbmQgdGhlIHJldHJ5IGRh
dGFiYXNlLiBFbnN1cmUKIGhvc3QgbmFtZXMgYXJlIGxvd2VyIGNhc2VkICh0aGF0J3Mgd2hhdCAl
UyBkb2VzKS4gKi8KIAotaG9zdF9rZXkgPSBpbmNsdWRlX2lwX2FkZHJlc3M/Ci0gIHN0cmluZ19z
cHJpbnRmKCJUOiVTOiVzJXMiLCBob3N0LT5uYW1lLCBob3N0LT5hZGRyZXNzLCBwb3J0c3RyaW5n
KSA6Ci0gIHN0cmluZ19zcHJpbnRmKCJUOiVTJXMiLCBob3N0LT5uYW1lLCBwb3J0c3RyaW5nKTsK
K2hvc3Rfa2V5ID0gaW5jbHVkZV9pcF9hZGRyZXNzCisgID8gc3RyaW5nX3NwcmludGYoIlQ6JVM6
JXMlcyIsIGhvc3QtPm5hbWUsIGhvc3QtPmFkZHJlc3MsIHBvcnRzdHJpbmcpCisgIDogc3RyaW5n
X3NwcmludGYoIlQ6JVMlcyIsIGhvc3QtPm5hbWUsIHBvcnRzdHJpbmcpOwogCiAvKiBHZW5lcmF0
ZSB0aGUgbWVzc2FnZS1zcGVjaWZpYyBrZXkgKi8KIApAQCAtMjkyLDcgKzI5MSw3IEBACiB2b2lk
CiByZXRyeV9hZGRfaXRlbShhZGRyZXNzX2l0ZW0gKmFkZHIsIHVzY2hhciAqa2V5LCBpbnQgZmxh
Z3MpCiB7Ci1yZXRyeV9pdGVtICpydGkgPSBzdG9yZV9nZXQoc2l6ZW9mKHJldHJ5X2l0ZW0pLCBG
QUxTRSk7CityZXRyeV9pdGVtICogcnRpID0gc3RvcmVfZ2V0KHNpemVvZihyZXRyeV9pdGVtKSwg
R0VUX1VOVEFJTlRFRCk7CiBob3N0X2l0ZW0gKiBob3N0ID0gYWRkci0+aG9zdF91c2VkOwogCiBy
dGktPm5leHQgPSBhZGRyLT5yZXRyaWVzOwpAQCAtNjU1LDcgKzY1NCw3IEBACiAJICA/IFVTIHN0
cmluZ19wcmludGluZyhydGktPm1lc3NhZ2UpCiAJICA6IFVTInVua25vd24gZXJyb3IiOwogICAg
ICAgICBtZXNzYWdlX2xlbmd0aCA9IFVzdHJsZW4obWVzc2FnZSk7Ci0gICAgICAgIGlmIChtZXNz
YWdlX2xlbmd0aCA+IDE1MCkgbWVzc2FnZV9sZW5ndGggPSAxNTA7CisgICAgICAgIGlmIChtZXNz
YWdlX2xlbmd0aCA+IEVYSU1fREJfUkxJTUlUKSBtZXNzYWdlX2xlbmd0aCA9IEVYSU1fREJfUkxJ
TUlUOwogCiAgICAgICAgIC8qIFJlYWQgYSByZXRyeSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2Ug
b3IgY29uc3RydWN0IGEgbmV3IG9uZS4KICAgICAgICAgSWdub3JlIGFuIG9sZCBvbmUgaWYgaXQg
aXMgdG9vIG9sZCBzaW5jZSBpdCB3YXMgbGFzdCB1cGRhdGVkLiAqLwpAQCAtNjY5LDcgKzY2OCw3
IEBACiAgICAgICAgIGlmICghcmV0cnlfcmVjb3JkKQogICAgICAgICAgIHsKICAgICAgICAgICBy
ZXRyeV9yZWNvcmQgPSBzdG9yZV9nZXQoc2l6ZW9mKGRiZGF0YV9yZXRyeSkgKyBtZXNzYWdlX2xl
bmd0aCwKLQkJCQkgICBpc190YWludGVkKG1lc3NhZ2UpKTsKKwkJCQkgICBtZXNzYWdlKTsKICAg
ICAgICAgICBtZXNzYWdlX3NwYWNlID0gbWVzc2FnZV9sZW5ndGg7CiAgICAgICAgICAgcmV0cnlf
cmVjb3JkLT5maXJzdF9mYWlsZWQgPSBub3c7CiAgICAgICAgICAgcmV0cnlfcmVjb3JkLT5sYXN0
X3RyeSA9IG5vdzsKQEAgLTgxNSw3ICs4MTQsNyBAQAogCWlmIChtZXNzYWdlX2xlbmd0aCA+IG1l
c3NhZ2Vfc3BhY2UpCiAJICB7CiAJICBkYmRhdGFfcmV0cnkgKiBuZXdyID0KLQkgICAgc3RvcmVf
Z2V0KHNpemVvZihkYmRhdGFfcmV0cnkpICsgbWVzc2FnZV9sZW5ndGgsIGlzX3RhaW50ZWQobWVz
c2FnZSkpOworCSAgICBzdG9yZV9nZXQoc2l6ZW9mKGRiZGF0YV9yZXRyeSkgKyBtZXNzYWdlX2xl
bmd0aCwgbWVzc2FnZSk7CiAJICBtZW1jcHkobmV3ciwgcmV0cnlfcmVjb3JkLCBzaXplb2YoZGJk
YXRhX3JldHJ5KSk7CiAJICByZXRyeV9yZWNvcmQgPSBuZXdyOwogCSAgfQpkaWZmIC11ciBleGlt
Lm9yaWcvc3JjL3Jld3JpdGUuYyBleGltL3NyYy9yZXdyaXRlLmMKLS0tIGV4aW0ub3JpZy9zcmMv
cmV3cml0ZS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3Ny
Yy9yZXdyaXRlLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsNiAr
Miw3IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAg
KgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAor
LyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxIC0gMjAyMiAqLwogLyog
Q29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwogLyog
U2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlv
bi4gKi8KIApAQCAtMTA5LDExICsxMTAsMTEgQEAKIAogaWYgKHdob2xlKSAqd2hvbGUgPSBGQUxT
RTsKIAotLyogU2NhbiB0aGUgcmV3cml0aW5nIHJ1bGVzICovCisvKiBTY2FuIHRoZSByZXdyaXRp
bmcgcnVsZXMsIGlnbm9yaW5nIGFueSB3aXRob3V0IG1hdGNoaW5nIGZsYWcgKi8KIAogZm9yIChy
ZXdyaXRlX3J1bGUgKiBydWxlID0gcmV3cml0ZV9ydWxlczsKICAgICAgcnVsZSAmJiAhZG9uZTsK
LSAgICAgcnVsZV9udW1iZXIrKywgcnVsZSA9IHJ1bGUtPm5leHQpCisgICAgIHJ1bGVfbnVtYmVy
KyssIHJ1bGUgPSBydWxlLT5uZXh0KSBpZiAocnVsZS0+ZmxhZ3MgJiBmbGFnKQogICB7CiAgIGlu
dCBzdGFydCwgZW5kLCBwZG9tYWluOwogICBpbnQgY291bnQgPSAwOwpAQCAtMTIyLDEwICsxMjMs
NiBAQAogICB1c2NoYXIgKmVycm9yLCAqbmV3OwogICBjb25zdCB1c2NoYXIgKiBuZXdwYXJzZWQ7
CiAKLSAgLyogRW5zdXJlIHRoYXQgdGhlIGZsYWcgbWF0Y2hlcyB0aGUgZmxhZ3MgaW4gdGhlIHJ1
bGUuICovCi0KLSAgaWYgKCEocnVsZS0+ZmxhZ3MgJiBmbGFnKSkgY29udGludWU7Ci0KICAgLyog
Q29tZSBiYWNrIGhlcmUgZm9yIGEgcmVwZWF0IGFmdGVyIGEgc3VjY2Vzc2Z1bCByZXdyaXRlLiBX
ZSBkbyB0aGlzCiAgIG9ubHkgc28gbWFueSB0aW1lcy4gKi8KIApAQCAtNDUzLDEwICs0NTAsMTEg
QEAKIGhlYWRlcl9saW5lICpuZXdoID0gTlVMTDsKIHJtYXJrIGZ1bmN0aW9uX3Jlc2V0X3BvaW50
ID0gc3RvcmVfbWFyaygpOwogdXNjaGFyICpzID0gVXN0cmNocihoLT50ZXh0LCAnOicpICsgMTsK
Kwogd2hpbGUgKGlzc3BhY2UoKnMpKSBzKys7CiAKIERFQlVHKERfcmV3cml0ZSkKLSAgZGVidWdf
cHJpbnRmKCJyZXdyaXRlX29uZV9oZWFkZXI6IHR5cGU9JWM6XG4gICVzIiwgaC0+dHlwZSwgaC0+
dGV4dCk7CisgIGRlYnVnX3ByaW50Zl9pbmRlbnQoInJld3JpdGVfb25lX2hlYWRlcjogdHlwZT0l
YzpcbiAgJXMiLCBoLT50eXBlLCBoLT50ZXh0KTsKIAogZi5wYXJzZV9hbGxvd19ncm91cCA9IFRS
VUU7ICAgICAvKiBBbGxvdyBncm91cCBzeW50YXggKi8KIApAQCAtNDgzLDExICs0ODEsMTAgQEAK
ICAgdGhlIG5leHQgYWRkcmVzcywgc2F2aW5nIHRoZSBzdGFydCBvZiB0aGUgb2xkIG9uZS4gKi8K
IAogICAqc3MgPSAwOwotICByZWNpcGllbnQgPSBwYXJzZV9leHRyYWN0X2FkZHJlc3MocywmZXJy
bWVzcywmc3RhcnQsJmVuZCwmZG9tYWluLEZBTFNFKTsKLQorICByZWNpcGllbnQgPSBwYXJzZV9l
eHRyYWN0X2FkZHJlc3MocywgJmVycm1lc3MsICZzdGFydCwgJmVuZCwgJmRvbWFpbiwgRkFMU0Up
OwogICAqc3MgPSB0ZXJtaW5hdG9yOwogICBzcHJldiA9IHM7Ci0gIHMgPSBzcyArICh0ZXJtaW5h
dG9yPyAxOjApOworICBzID0gc3MgKyAodGVybWluYXRvciA/IDEgOiAwKTsKICAgd2hpbGUgKGlz
c3BhY2UoKnMpKSBzKys7CiAKICAgLyogVGhlcmUgaXNuJ3QgbXVjaCB3ZSBjYW4gZG8gZm9yIHN5
bnRhY3RpYyBkaXNhc3RlcnMgYXQgdGhpcyBzdGFnZS4KQEAgLTQ5NiwzMCArNDkzLDE3IEBACiAg
IGVtcHR5IGFkZHJlc3MsIG92ZXJsb25nIGFkZHJlcy4gU29tZXRpbWVzIHRoZSByZXN1bHQgbWF0
dGVycywgc29tZXRpbWVzIG5vdC4KICAgSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg
Zm9yICphbnkqIGhlYWRlciB3ZSBzZWUuICovCiAKLQogICBpZiAoIXJlY2lwaWVudCkKICAgICB7
Ci0jaWYgMAotICAgIC8qIEZJWE1FOgotICAgIFRoaXMgd2FzKCEpIGFuIGF0dGVtcHQgdGhvIGhh
bmRsZSBlbXB0eSByZXdyaXRzLCBidXQgc2VlbWluZ2x5IGl0Ci0gICAgbmVlZHMgbW9yZSBlZmZv
cnQgdG8gZGVjaWRlIGlmIHRoZSByZXR1cm5lZCBlbXB0eSBhZGRyZXNzIG1hdHRlcnMuCi0gICAg
Tm93IHRoaXMgd2lsbCBub3cgYnJlYWsgdGVzdCA0NzEgYWdhaW4uCi0KLSAgICA0NzEgZmFpbHMg
bm93IGJlY2F1c2UgaXQgdXNlcyBhbiBvdmVybG9uZyBhZGRyZXNzLCBmb3Igd2ljaCBwYXJzZV9l
eHRyYWN0X2FkZHJlc3MoKQotICAgIHJldHVybnMgYW4gZW1wdHkgYWRkcmVzcyAod2hpY2ggd2Fz
IG5vdCBleHBlY3RlZCkuCi0KLSAgICBDaGVja2luZyB0aGUgb3V0cHV0IGFuZCBleGl0IGlmIHJl
d3JpdGVfcnVsZXMgb3Igcm91dGVkX29sZCBhcmUgcHJlc2VudAotICAgIGlzbid0IGEgZ29vZCBp
ZGVhIGVpdGhlcjogSXQncyBlbm91Z2ggdG8gaGF2ZSAqYW55KiByZXdyaXRlIHJ1bGUKLSAgICBp
biB0aGUgY29uZmlndXJhdGlvbiBwbHVzICJUbzogdW5kaXNjbG9zZWQgcmVjcGllbnRzOjsiIHRv
IGV4aXQoKSwgd2hpY2gKLSAgICBpcyBub3Qgd2hhdCB3ZSB3YW50LgotICAgICovCisgICAgLyog
SGFuZGxlIHVucGFyZXNhYmxlIGFkZHJlc3NlcyBpbiB0aGUgaGVhZGVyLiBTbGlnaHRseSB1Z2x5
IGJlY2F1c2UgYQorICAgIG51bGwgb3V0cHV0IGZyb20gdGhlIGV4dHJhY3QgY2FuIGFsc28gcmVz
dWx0IGZyb20gYSBoZWFkZXIgd2l0aG91dCBhbgorICAgIGFkZHJlc3MsICJUbzogdW5kaXNjbG9z
ZWQgcmVjcGllbnRzOjsiIGJlaW5nIHRoZSBjbGFzc2ljIGNhc2UuICovCiAKLSAgICBpZiAocmV3
cml0ZV9ydWxlcyB8fCByb3V0ZWRfb2xkKQorICAgIGlmICgocmV3cml0ZV9ydWxlcyB8fCByb3V0
ZWRfb2xkKSAmJiBVc3RyY21wKGVycm1lc3MsICJlbXB0eSBhZGRyZXNzIikgIT0gMCkKICAgICAg
IHsKICAgICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTiwgInJld3JpdGU6ICVzIiwgZXJybWVzcyk7
CiAgICAgICBleGltX2V4aXQoRVhJVF9GQUlMVVJFKTsKICAgICAgIH0KLSNlbmRpZgogICAgIGxv
b3BfcmVzZXRfcG9pbnQgPSBzdG9yZV9yZXNldChsb29wX3Jlc2V0X3BvaW50KTsKICAgICBjb250
aW51ZTsKICAgICB9CkBAIC01MzQsNyArNTE4LDcgQEAKICAgYXMgYWJjQHh5eiwgd2hpY2ggdGhl
IEROUyBsb29rdXAgdHVybnMgaW50byBhYmNAeHl6LmZvby5jb20pLiBIb3dldmVyLCBpZiBubwog
ICBjaGFuZ2UgaXMgbWFkZSBoZXJlLCBkb24ndCBib3RoZXIgY2Fycnlpbmcgb24uICovCiAKLSAg
aWYgKHJvdXRlZF9vbGQgIT0gTlVMTCkKKyAgaWYgKHJvdXRlZF9vbGQpCiAgICAgewogICAgIGlm
IChkb21haW4gPD0gMCB8fCBzdHJjbXBpYyhyZWNpcGllbnQrZG9tYWluLCByb3V0ZWRfb2xkKSAh
PSAwKSBjb250aW51ZTsKICAgICByZWNpcGllbnRbZG9tYWluLTFdID0gMDsKQEAgLTU3OSw3ICs1
NjMsNyBAQAogICAid2hvbGUiIGZsYWcgc2V0LCBhZGp1c3QgdGhlIHBvaW50ZXJzIHNvIHRoYXQg
dGhlIHdob2xlIGFkZHJlc3MgZ2V0cwogICByZXBsYWNlZCwgZXhjZXB0IHBvc3NpYmx5IGEgZmlu
YWwgXG4uICovCiAKLSAgaWYgKChleGlzdGZsYWdzICYgZmxhZykgIT0gMCkKKyAgaWYgKGV4aXN0
ZmxhZ3MgJiBmbGFnKQogICAgIHsKICAgICBCT09MIHdob2xlOwogICAgIC8qIGRlY29uc3Qgb2sg
YXMgcmVjaXBpZW50IHdhcyBub3Rjb25zdCAqLwpAQCAtNjE5LDcgKzYwMyw3IEBACiAgICAgaW50
IG9sZGxlbiA9IGVuZCAtIHN0YXJ0OwogCiAgICAgaGVhZGVyX2xpbmUgKiBwcmV2ID0gbmV3aCA/
IG5ld2ggOiBoOwotICAgIHVzY2hhciAqIG5ld3QgPSBzdG9yZV9nZXRfcGVybShwcmV2LT5zbGVu
IC0gb2xkbGVuICsgbmV3bGVuICsgNCwgVFJVRSk7CisgICAgdXNjaGFyICogbmV3dCA9IHN0b3Jl
X2dldF9wZXJtKHByZXYtPnNsZW4gLSBvbGRsZW4gKyBuZXdsZW4gKyA0LCBHRVRfVEFJTlRFRCk7
CiAgICAgdXNjaGFyICogbmV3dHN0YXJ0ID0gbmV3dDsKIAogICAgIGludCB0eXBlID0gcHJldi0+
dHlwZTsKQEAgLTY4Myw3ICs2NjcsNyBAQAogCiAgICAgc3RvcmVfcmVzZXQoZnVuY3Rpb25fcmVz
ZXRfcG9pbnQpOwogICAgIGZ1bmN0aW9uX3Jlc2V0X3BvaW50ID0gc3RvcmVfbWFyaygpOwotICAg
IG5ld2ggPSBzdG9yZV9nZXQoc2l6ZW9mKGhlYWRlcl9saW5lKSwgRkFMU0UpOworICAgIG5ld2gg
PSBzdG9yZV9nZXQoc2l6ZW9mKGhlYWRlcl9saW5lKSwgR0VUX1VOVEFJTlRFRCk7CiAgICAgbmV3
aC0+dHlwZSA9IHR5cGU7CiAgICAgbmV3aC0+c2xlbiA9IHNsZW47CiAgICAgbmV3aC0+dGV4dCA9
IHN0cmluZ19jb3B5bihuZXd0c3RhcnQsIHNsZW4pOwpAQCAtNjkxLDcgKzY3NSw3IEBACiAgICAg
LyogU2V0IHVwIGZvciBzY2FubmluZyB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyICovCiAKICAgICBz
ID0gbmV3aC0+dGV4dCArIHJlbWxlbjsKLSAgICBERUJVRyhEX3Jld3JpdGUpIGRlYnVnX3ByaW50
ZigicmVtYWluZGVyOiAlcyIsICgqcyA9PSAwKT8gVVMiXG4iIDogcyk7CisgICAgREVCVUcoRF9y
ZXdyaXRlKSBkZWJ1Z19wcmludGYoInJlbWFpbmRlcjogJXMiLCAqcyA/IHMgOiBVUyJcbiIpOwog
ICAgIH0KICAgfQogCkBAIC03MDEsMTAgKzY4NSwxMCBAQAogLyogSWYgYSByZXdyaXRlIGhhcHBl
bmVkIGFuZCAicmVwbGFjZSIgaXMgdHJ1ZSwgcHV0IHRoZSBuZXcgaGVhZGVyIGludG8gdGhlCiBj
aGFpbiBmb2xsb3dpbmcgdGhlIG9sZCBvbmUsIGFuZCBtYXJrIHRoZSBvbGQgb25lIGFzIHJlcGxh
Y2VkLiAqLwogCi1pZiAobmV3aCAhPSBOVUxMICYmIHJlcGxhY2UpCitpZiAobmV3aCAmJiByZXBs
YWNlKQogICB7CiAgIG5ld2gtPm5leHQgPSBoLT5uZXh0OwotICBpZiAobmV3aC0+bmV4dCA9PSBO
VUxMKSBoZWFkZXJfbGFzdCA9IG5ld2g7CisgIGlmICghbmV3aC0+bmV4dCkgaGVhZGVyX2xhc3Qg
PSBuZXdoOwogICBoLT50eXBlID0gaHR5cGVfb2xkOwogICBoLT5uZXh0ID0gbmV3aDsKICAgfQpk
aWZmIC11ciBleGltLm9yaWcvc3JjL3JmYzIwNDcuYyBleGltL3NyYy9yZmMyMDQ3LmMKLS0tIGV4
aW0ub3JpZy9zcmMvcmZjMjA0Ny5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAw
CisrKyBleGltL3NyYy9yZmMyMDQ3LmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAz
MDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3Bv
cnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0g
MjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0g
MjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCiAv
KiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0
aW9uLiAqLwogCiAvKiBUaGlzIGZpbGUgY29udGFpbnMgYSBmdW5jdGlvbiBmb3IgZGVjb2Rpbmcg
bWVzc2FnZSBoZWFkZXIgbGluZXMgdGhhdCBtYXkKQEAgLTQ3LDcgKzQ3LDcgQEAKIGludCBsZW4g
PSAwOwogdXNjaGFyICpwdHI7CiAKLXB0ciA9ICpwdHJwdHIgPSBzdG9yZV9nZXQoVXN0cmxlbihz
dHJpbmcpICsgMSwgaXNfdGFpbnRlZChzdHJpbmcpKTsgIC8qIE5vIGxvbmdlciB0aGFuIHRoaXMg
Ki8KK3B0ciA9ICpwdHJwdHIgPSBzdG9yZV9nZXQoVXN0cmxlbihzdHJpbmcpICsgMSwgc3RyaW5n
KTsgIC8qIE5vIGxvbmdlciB0aGFuIHRoaXMgKi8KIAogd2hpbGUgKCpzdHJpbmcgIT0gMCkKICAg
ewpAQCAtMTg2LDggKzE4Niw4IEBACiAqLwogCiB1c2NoYXIgKgotcmZjMjA0N19kZWNvZGUyKHVz
Y2hhciAqc3RyaW5nLCBCT09MIGxlbmNoZWNrLCB1c2NoYXIgKnRhcmdldCwgaW50IHplcm92YWws
Ci0gIGludCAqbGVucHRyLCBpbnQgKnNpemVwdHIsIHVzY2hhciAqKmVycm9yKQorcmZjMjA0N19k
ZWNvZGUyKHVzY2hhciAqc3RyaW5nLCBCT09MIGxlbmNoZWNrLCBjb25zdCB1c2NoYXIgKnRhcmdl
dCwKKyAgaW50IHplcm92YWwsIGludCAqbGVucHRyLCBpbnQgKnNpemVwdHIsIHVzY2hhciAqKmVy
cm9yKQogewogaW50IHNpemUgPSBVc3RybGVuKHN0cmluZyk7CiBzaXplX3QgZGxlbjsKQEAgLTIw
OSw3ICsyMDksNyBAQAogdHJhbnNsYXRlZCBpbnRvIGEgbXVsdGlieXRlIGNvZGUgc3VjaCBhcyBV
VEYtOC4gVGhhdCdzIHdoeSB3ZSB1c2UgdGhlIGR5bmFtaWMKIHN0cmluZyBidWlsZGluZyBjb2Rl
LiAqLwogCi15aWVsZCA9IHN0b3JlX2dldChzaXplb2YoZ3N0cmluZykgKyArK3NpemUsIGlzX3Rh
aW50ZWQoc3RyaW5nKSk7Cit5aWVsZCA9IHN0b3JlX2dldChzaXplb2YoZ3N0cmluZykgKyArK3Np
emUsIHN0cmluZyk7CiB5aWVsZC0+c2l6ZSA9IHNpemU7CiB5aWVsZC0+cHRyID0gMDsKIHlpZWxk
LT5zID0gVVMoeWllbGQgKyAxKTsKQEAgLTMzNiw3ICszMzYsNyBAQAogYXJndW1lbnQuICovCiAK
IHVzY2hhciAqCi1yZmMyMDQ3X2RlY29kZSh1c2NoYXIgKnN0cmluZywgQk9PTCBsZW5jaGVjaywg
dXNjaGFyICp0YXJnZXQsIGludCB6ZXJvdmFsLAorcmZjMjA0N19kZWNvZGUodXNjaGFyICpzdHJp
bmcsIEJPT0wgbGVuY2hlY2ssIGNvbnN0IHVzY2hhciAqdGFyZ2V0LCBpbnQgemVyb3ZhbCwKICAg
aW50ICpsZW5wdHIsIHVzY2hhciAqKmVycm9yKQogewogcmV0dXJuIHJmYzIwNDdfZGVjb2RlMihz
dHJpbmcsIGxlbmNoZWNrLCB0YXJnZXQsIHplcm92YWwsIGxlbnB0ciwgTlVMTCwgZXJyb3IpOwpk
aWZmIC11ciBleGltLm9yaWcvc3JjL3JvdXRlLmMgZXhpbS9zcmMvcm91dGUuYwotLS0gZXhpbS5v
cmlnL3NyYy9yb3V0ZS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBl
eGltL3NyYy9yb3V0ZS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0y
LDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50
ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8K
IC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8K
LS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRo
ZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8K
IAogLyogRnVuY3Rpb25zIGNvbmNlcm5lZCB3aXRoIHJvdXRpbmcsIGFuZCB0aGUgbGlzdCBvZiBn
ZW5lcmljIHJvdXRlciBvcHRpb25zLiAqLwpAQCAtMjg4LDcgKzI4OCwxMiBAQAogCiAgIC8qIEJ1
aWxkIGEgaG9zdCBsaXN0IGlmIGZhbGxiYWNrIGhvc3RzIGlzIHNldC4gKi8KIAotICBob3N0X2J1
aWxkX2hvc3RsaXN0KCYoci0+ZmFsbGJhY2tfaG9zdGxpc3QpLCByLT5mYWxsYmFja19ob3N0cywg
RkFMU0UpOworICAgIHsKKyAgICBpbnQgb2xkX3Bvb2wgPSBzdG9yZV9wb29sOworICAgIHN0b3Jl
X3Bvb2wgPSBQT09MX1BFUk07CisgICAgaG9zdF9idWlsZF9ob3N0bGlzdCgmci0+ZmFsbGJhY2tf
aG9zdGxpc3QsIHItPmZhbGxiYWNrX2hvc3RzLCBGQUxTRSk7CisgICAgc3RvcmVfcG9vbCA9IG9s
ZF9wb29sOworICAgIH0KIAogICAvKiBDaGVjayByZWRpcmVjdF9yb3V0ZXIgYW5kIHBhc3Nfcm91
dGVyIGFyZSB2YWxpZCAqLwogCkBAIC02MDcsMTQgKzYxMiwxMyBAQAogQk9PTCB1Z2lkX3NldCA9
IEZBTFNFOwogY29uc3QgdXNjaGFyICpsaXN0cHRyOwogdXNjaGFyICpjaGVjazsKLXVzY2hhciBi
dWZmZXJbMTAyNF07CiAKIGlmICghcykgcmV0dXJuIE9LOwogCiBERUJVRyhEX3JvdXRlKSBkZWJ1
Z19wcmludGYoImNoZWNraW5nIHJlcXVpcmVfZmlsZXNcbiIpOwogCiBsaXN0cHRyID0gczsKLXdo
aWxlICgoY2hlY2sgPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdHB0ciwgJnNlcCwgYnVmZmVyLCBz
aXplb2YoYnVmZmVyKSkpKQord2hpbGUgKChjaGVjayA9IHN0cmluZ19uZXh0aW5saXN0KCZsaXN0
cHRyLCAmc2VwLCBOVUxMLCAwKSkpCiAgIHsKICAgaW50IHJjOwogICBpbnQgZWFjY2VzX2NvZGUg
PSAwOwpAQCAtMTQ5NSw3ICsxNDk5LDcgQEAKIAogICBpZiAoIShub2RlID0gdHJlZV9zZWFyY2go
KnJvb3QsIG5hbWUpKSkKICAgICB7CQkJCS8qIG5hbWUgc2hvdWxkIG5ldmVyIGJlIHRhaW50ZWQg
Ki8KLSAgICBub2RlID0gc3RvcmVfZ2V0KHNpemVvZih0cmVlX25vZGUpICsgVXN0cmxlbihuYW1l
KSwgRkFMU0UpOworICAgIG5vZGUgPSBzdG9yZV9nZXQoc2l6ZW9mKHRyZWVfbm9kZSkgKyBVc3Ry
bGVuKG5hbWUpLCBHRVRfVU5UQUlOVEVEKTsKICAgICBVc3RyY3B5KG5vZGUtPm5hbWUsIG5hbWUp
OwogICAgICh2b2lkKXRyZWVfaW5zZXJ0bm9kZShyb290LCBub2RlKTsKICAgICB9CkBAIC0xNjY2
LDcgKzE2NzAsNyBAQAogCWFkZHItPnByZWZpeF92ID0gc3RyaW5nX2NvcHluKGFkZHItPmxvY2Fs
X3BhcnQsIHZsZW4pOwogCX0KICAgICAgIGVsc2UKLQlhZGRyLT5wcmVmaXggPSBzdHJpbmdfY29w
eW5fdGFpbnQoYWRkci0+bG9jYWxfcGFydCwgcGxlbiwgRkFMU0UpOworCWFkZHItPnByZWZpeCA9
IHN0cmluZ19jb3B5bl90YWludChhZGRyLT5sb2NhbF9wYXJ0LCBwbGVuLCBHRVRfVU5UQUlOVEVE
KTsKICAgICAgIGFkZHItPmxvY2FsX3BhcnQgKz0gcGxlbjsKICAgICAgIERFQlVHKERfcm91dGUp
IGRlYnVnX3ByaW50Zigic3RyaXBwZWQgcHJlZml4ICVzXG4iLCBhZGRyLT5wcmVmaXgpOwogICAg
ICAgfQpAQCAtMTY4OSw3ICsxNjkzLDcgQEAKICAgICAgIGludCBscGxlbiA9IFVzdHJsZW4oYWRk
ci0+bG9jYWxfcGFydCkgLSBzbGVuOwogICAgICAgYWRkci0+c3VmZml4ID0gdmxlbgogCT8gYWRk
ci0+bG9jYWxfcGFydCArIGxwbGVuCi0JOiBzdHJpbmdfY29weV90YWludChhZGRyLT5sb2NhbF9w
YXJ0ICsgbHBsZW4sIHNsZW4pOworCTogc3RyaW5nX2NvcHlfdGFpbnQoYWRkci0+bG9jYWxfcGFy
dCArIGxwbGVuLCBHRVRfVU5UQUlOVEVEKTsKICAgICAgIGFkZHItPnN1ZmZpeF92ID0gYWRkci0+
c3VmZml4ICsgVXN0cmxlbihhZGRyLT5zdWZmaXgpIC0gdmxlbjsKICAgICAgIGFkZHItPmxvY2Fs
X3BhcnQgPSBzdHJpbmdfY29weW4oYWRkci0+bG9jYWxfcGFydCwgbHBsZW4pOwogICAgICAgREVC
VUcoRF9yb3V0ZSkgZGVidWdfcHJpbnRmKCJzdHJpcHBlZCBzdWZmaXggJXNcbiIsIGFkZHItPnN1
ZmZpeCk7CkBAIC0xNzA2LDYgKzE3MTAsOCBAQAogICB0aGUgbG9jYWwgcGFydCBzb3J0ZWQuICov
CiAKICAgcm91dGVyX25hbWUgPSByLT5uYW1lOworICBkcml2ZXJfc3JjZmlsZSA9IHItPnNyY2Zp
bGU7CisgIGRyaXZlcl9zcmNsaW5lID0gci0+c3JjbGluZTsKICAgZGVsaXZlcl9zZXRfZXhwYW5z
aW9ucyhhZGRyKTsKIAogICAvKiBGb3IgY29udmVuaWVuY2UsIHRoZSBwcmUtcm91dGVyIGNoZWNr
cyBhcmUgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiwgd2hpY2gKQEAgLTE3MTMsNyArMTcxOSw3IEBA
CiAKICAgaWYgKChyYyA9IGNoZWNrX3JvdXRlcl9jb25kaXRpb25zKHIsIGFkZHIsIHZlcmlmeSwg
JnB3LCAmZXJyb3IpKSAhPSBPSykKICAgICB7Ci0gICAgcm91dGVyX25hbWUgPSBOVUxMOworICAg
IGRyaXZlcl9zcmNmaWxlID0gcm91dGVyX25hbWUgPSBOVUxMOyBkcml2ZXJfc3JjbGluZSA9IDA7
CiAgICAgaWYgKHJjID09IFNLSVApIGNvbnRpbnVlOwogICAgIGFkZHItPm1lc3NhZ2UgPSBlcnJv
cjsKICAgICB5aWVsZCA9IHJjOwpAQCAtMTc2NCw3ICsxNzcwLDcgQEAKICAgICAgICAgICB7CiAg
ICAgICAgICAgREVCVUcoRF9yb3V0ZSkKICAgICAgICAgICAgIGRlYnVnX3ByaW50ZigiXCJtb3Jl
XCI9ZmFsc2U6IHNraXBwaW5nIHJlbWFpbmluZyByb3V0ZXJzXG4iKTsKLQkgIHJvdXRlcl9uYW1l
ID0gTlVMTDsKKwkgIGRyaXZlcl9zcmNmaWxlID0gcm91dGVyX25hbWUgPSBOVUxMOyBkcml2ZXJf
c3JjbGluZSA9IDA7CiAgICAgICAgICAgciA9IE5VTEw7CiAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgfQpAQCAtMTgxNiw3ICsxODIyLDcgQEAKICAgeWllbGQgPSAoci0+aW5mby0+Y29kZSko
ciwgYWRkciwgcHcsIHZlcmlmeSwgcGFkZHJfbG9jYWwsIHBhZGRyX3JlbW90ZSwKICAgICBhZGRy
X25ldywgYWRkcl9zdWNjZWVkKTsKIAotICByb3V0ZXJfbmFtZSA9IE5VTEw7CisgIGRyaXZlcl9z
cmNmaWxlID0gcm91dGVyX25hbWUgPSBOVUxMOyBkcml2ZXJfc3JjbGluZSA9IDA7CiAKICAgaWYg
KHlpZWxkID09IEZBSUwpCiAgICAgewpAQCAtMjA0NCwxMCArMjA1MCwyMyBAQAogICBhZGRyLT5t
ZXNzYWdlID0gZXhwYW5kX2hpZGVfcGFzc3dvcmRzKGFkZHItPm1lc3NhZ2UpOwogCiBkZWxpdmVy
X3NldF9leHBhbnNpb25zKE5VTEwpOwotcm91dGVyX25hbWUgPSBOVUxMOworZHJpdmVyX3NyY2Zp
bGUgPSByb3V0ZXJfbmFtZSA9IE5VTEw7IGRyaXZlcl9zcmNsaW5lID0gMDsKIGYuZGlzYWJsZV9s
b2dnaW5nID0gRkFMU0U7CiByZXR1cm4geWllbGQ7CiB9CiAKKworCisvKiBGb3IgZXJyb3IgbWVz
c2FnZXMsIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNvbmZpZyBsb2NhdGlvbiBhc3NvY2lhdGVk
Cit3aXRoIGN1cnJlbnQgcHJvY2Vzc2luZy4gIE5VTEwgaWYgd2UgYXJlIG5vdCBpbiBhIHJvdXRl
ci4gKi8KKy8qIE5hbWUgb25seSwgZm9yIG5vdyAqLworCit1c2NoYXIgKgorcm91dGVyX2N1cnJl
bnRfbmFtZSh2b2lkKQoreworaWYgKCFyb3V0ZXJfbmFtZSkgcmV0dXJuIE5VTEw7CityZXR1cm4g
c3RyaW5nX3NwcmludGYoIiAocm91dGVyICVzLCAlcyAlZCkiLCByb3V0ZXJfbmFtZSwgZHJpdmVy
X3NyY2ZpbGUsIGRyaXZlcl9zcmNsaW5lKTsKK30KKwogI2VuZGlmCS8qIU1BQ1JPX1BSRURFRiov
CiAvKiBFbmQgb2Ygcm91dGUuYyAqLwpkaWZmIC11ciBleGltLm9yaWcvc3JjL3JvdXRlcnMvYWNj
ZXB0LmMgZXhpbS9zcmMvcm91dGVycy9hY2NlcHQuYwotLS0gZXhpbS5vcmlnL3NyYy9yb3V0ZXJz
L2FjY2VwdC5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3Ny
Yy9yb3V0ZXJzL2FjY2VwdC5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBA
IC0zLDcgKzMsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KIAogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1
IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICov
CisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIxICovCiAv
KiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0
aW9uLiAqLwogCiAKQEAgLTEwNyw5ICsxMDcsNiBAQAogdXNjaGFyICpyZW1vdmVfaGVhZGVyczsK
IGhlYWRlcl9saW5lICpleHRyYV9oZWFkZXJzOwogCi1hZGRyX25ldyA9IGFkZHJfbmV3OyAgLyog
S2VlcCBwaWNreSBjb21waWxlcnMgaGFwcHkgKi8KLWFkZHJfc3VjY2VlZCA9IGFkZHJfc3VjY2Vl
ZDsKLQogREVCVUcoRF9yb3V0ZSkgZGVidWdfcHJpbnRmKCIlcyByb3V0ZXIgY2FsbGVkIGZvciAl
c1xuICBkb21haW4gPSAlc1xuIiwKICAgcmJsb2NrLT5uYW1lLCBhZGRyLT5hZGRyZXNzLCBhZGRy
LT5kb21haW4pOwogCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvcm91dGVycy9kbnNsb29rdXAuYyBl
eGltL3NyYy9yb3V0ZXJzL2Ruc2xvb2t1cC5jCi0tLSBleGltLm9yaWcvc3JjL3JvdXRlcnMvZG5z
bG9va3VwLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3Jj
L3JvdXRlcnMvZG5zbG9va3VwLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAK
QEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQg
YWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAy
MiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAx
OCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCiAvKiBT
ZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9u
LiAqLwogCiAjaW5jbHVkZSAiLi4vZXhpbS5oIgpAQCAtMTYwLDkgKzE2MCw2IEBACiBjb25zdCB1
c2NoYXIgKmxpc3RwdHI7CiB1c2NoYXIgd2lkZW5fYnVmZmVyWzI1Nl07CiAKLWFkZHJfbmV3ID0g
YWRkcl9uZXc7ICAgICAgICAgIC8qIEtlZXAgcGlja3kgY29tcGlsZXJzIGhhcHB5ICovCi1hZGRy
X3N1Y2NlZWQgPSBhZGRyX3N1Y2NlZWQ7Ci0KIERFQlVHKERfcm91dGUpCiAgIGRlYnVnX3ByaW50
ZigiJXMgcm91dGVyIGNhbGxlZCBmb3IgJXNcbiAgZG9tYWluID0gJXNcbiIsCiAgICAgcmJsb2Nr
LT5uYW1lLCBhZGRyLT5hZGRyZXNzLCBhZGRyLT5kb21haW4pOwpAQCAtMjA3LDYgKzIwNCw3IEBA
CiAgICAmJiAodmVyaWZ5ICE9IHZfc2VuZGVyIHx8ICFvYi0+cmV3cml0ZV9oZWFkZXJzIHx8IGFk
ZHItPnBhcmVudCkpCiAgIHsKICAgbGlzdHB0ciA9IG9iLT53aWRlbl9kb21haW5zOworICAvKiBu
b3QgZXhwYW5kZWQgc28gc2hvdWxkIG5ldmVyIGJlIHRhaW50ZWQgKi8KICAgd2lkZW4gPSBzdHJp
bmdfbmV4dGlubGlzdCgmbGlzdHB0ciwgJndpZGVuX3NlcCwgd2lkZW5fYnVmZmVyLAogICAgIHNp
emVvZih3aWRlbl9idWZmZXIpKTsKIApAQCAtMjM2LDYgKzIzNCw3IEBACiAgIGVsc2UgaWYgKHdp
ZGVuKQogICAgIHsKICAgICBoLm5hbWUgPSBzdHJpbmdfc3ByaW50ZigiJXMuJXMiLCBhZGRyLT5k
b21haW4sIHdpZGVuKTsKKyAgICAvKiBub3QgZXhwYW5kZWQgc28gc2hvdWxkIG5ldmVyIGJlIHRh
aW50ZWQgKi8KICAgICB3aWRlbiA9IHN0cmluZ19uZXh0aW5saXN0KCZsaXN0cHRyLCAmd2lkZW5f
c2VwLCB3aWRlbl9idWZmZXIsCiAgICAgICBzaXplb2Yod2lkZW5fYnVmZmVyKSk7CiAgICAgREVC
VUcoRF9yb3V0ZSkgZGVidWdfcHJpbnRmKCIlcyByb3V0ZXIgd2lkZW5lZCAlcyB0byAlc1xuIiwg
cmJsb2NrLT5uYW1lLApAQCAtNDU3LDcgKzQ1Niw3IEBACiAvKiBHZXQgc3RvcmUgaW4gd2hpY2gg
dG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIGhvc3QgaXRlbSwgY2hhaW5lZCBvbgogdG8gdGhlIGFk
ZHJlc3MuICovCiAKLWFkZHItPmhvc3RfbGlzdCA9IHN0b3JlX2dldChzaXplb2YoaG9zdF9pdGVt
KSwgRkFMU0UpOworYWRkci0+aG9zdF9saXN0ID0gc3RvcmVfZ2V0KHNpemVvZihob3N0X2l0ZW0p
LCBHRVRfVU5UQUlOVEVEKTsKIGFkZHItPmhvc3RfbGlzdFswXSA9IGg7CiAKIC8qIEZpbGwgaW4g
dGhlIHRyYW5zcG9ydCBhbmQgcXVldWUgdGhlIGFkZHJlc3MgZm9yIGRlbGl2ZXJ5LiAqLwpkaWZm
IC11ciBleGltLm9yaWcvc3JjL3JvdXRlcnMvaXBsaXRlcmFsLmMgZXhpbS9zcmMvcm91dGVycy9p
cGxpdGVyYWwuYwotLS0gZXhpbS5vcmlnL3NyYy9yb3V0ZXJzL2lwbGl0ZXJhbC5jCTIwMjMtMDYt
MDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9yb3V0ZXJzL2lwbGl0ZXJh
bC5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAog
KiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHly
aWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdo
dCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdo
dCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElD
RSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogCkBAIC01Nyw3
ICs1Nyw2IEBACiBpcGxpdGVyYWxfcm91dGVyX29wdGlvbnNfYmxvY2sgKm9iID0KICAgKGlwbGl0
ZXJhbF9yb3V0ZXJfb3B0aW9uc19ibG9jayAqKShyYmxvY2stPm9wdGlvbnNfYmxvY2spOwogKi8K
LXJibG9jayA9IHJibG9jazsKIH0KIAogCkBAIC0xMTYsOSArMTE1LDYgQEAKIGludCBsZW4gPSBV
c3RybGVuKGRvbWFpbik7CiBpbnQgcmMsIGlwdjsKIAotYWRkcl9uZXcgPSBhZGRyX25ldzsgICAg
ICAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotYWRkcl9zdWNjZWVkID0gYWRk
cl9zdWNjZWVkOwotCiBERUJVRyhEX3JvdXRlKSBkZWJ1Z19wcmludGYoIiVzIHJvdXRlciBjYWxs
ZWQgZm9yICVzOiBkb21haW4gPSAlc1xuIiwKICAgcmJsb2NrLT5uYW1lLCBhZGRyLT5hZGRyZXNz
LCBhZGRyLT5kb21haW4pOwogCkBAIC0xNTAsNyArMTQ2LDcgQEAKIAogLyogU2V0IHVwIGEgaG9z
dCBpdGVtICovCiAKLWggPSBzdG9yZV9nZXQoc2l6ZW9mKGhvc3RfaXRlbSksIEZBTFNFKTsKK2gg
PSBzdG9yZV9nZXQoc2l6ZW9mKGhvc3RfaXRlbSksIEdFVF9VTlRBSU5URUQpOwogCiBoLT5uZXh0
ID0gTlVMTDsKIGgtPmFkZHJlc3MgPSBzdHJpbmdfY29weShpcCk7CmRpZmYgLXVyIGV4aW0ub3Jp
Zy9zcmMvcm91dGVycy9pcGxvb2t1cC5jIGV4aW0vc3JjL3JvdXRlcnMvaXBsb29rdXAuYwotLS0g
ZXhpbS5vcmlnL3NyYy9yb3V0ZXJzL2lwbG9va3VwLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL3JvdXRlcnMvaXBsb29rdXAuYwkyMDIyLTA2LTIzIDE2
OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4ICsyLDggQEAKICogICAgIEV4aW0gLSBhbiBJ
bnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGlt
IE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkg
b2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1h
aW50YWluZXJzIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMg
b2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIApAQCAtMTYxLDIzICsxNjEsMTggQEAKIHVz
Y2hhciAqaG9zdG5hbWUsICpyZXJvdXRlLCAqZG9tYWluOwogY29uc3QgdXNjaGFyICpsaXN0cHRy
OwogdXNjaGFyIGhvc3RfYnVmZmVyWzI1Nl07Ci1ob3N0X2l0ZW0gKmhvc3QgPSBzdG9yZV9nZXQo
c2l6ZW9mKGhvc3RfaXRlbSksIEZBTFNFKTsKK2hvc3RfaXRlbSAqaG9zdCA9IHN0b3JlX2dldChz
aXplb2YoaG9zdF9pdGVtKSwgR0VUX1VOVEFJTlRFRCk7CiBhZGRyZXNzX2l0ZW0gKm5ld19hZGRy
OwogaXBsb29rdXBfcm91dGVyX29wdGlvbnNfYmxvY2sgKm9iID0KICAgKGlwbG9va3VwX3JvdXRl
cl9vcHRpb25zX2Jsb2NrICopKHJibG9jay0+b3B0aW9uc19ibG9jayk7Ci1jb25zdCBwY3JlICpy
ZSA9IG9iLT5yZV9yZXNwb25zZV9wYXR0ZXJuOworY29uc3QgcGNyZTJfY29kZSAqcmUgPSBvYi0+
cmVfcmVzcG9uc2VfcGF0dGVybjsKIGludCBjb3VudCwgcXVlcnlfbGVuLCByYzsKIGludCBzZXAg
PSAwOwogCi1hZGRyX2xvY2FsID0gYWRkcl9sb2NhbDsgICAgLyogS2VlcCBwaWNreSBjb21waWxl
cnMgaGFwcHkgKi8KLWFkZHJfcmVtb3RlID0gYWRkcl9yZW1vdGU7Ci1hZGRyX3N1Y2NlZWQgPSBh
ZGRyX3N1Y2NlZWQ7Ci1wdyA9IHB3OwotCiBERUJVRyhEX3JvdXRlKSBkZWJ1Z19wcmludGYoIiVz
IHJvdXRlciBjYWxsZWQgZm9yICVzOiBkb21haW4gPSAlc1xuIiwKICAgcmJsb2NrLT5uYW1lLCBh
ZGRyLT5hZGRyZXNzLCBhZGRyLT5kb21haW4pOwogCi1yZXBseSA9IHN0b3JlX2dldCgyNTYsIFRS
VUUpOwkvKiB0YWludGVkIGRhdGEgKi8KK3JlcGx5ID0gc3RvcmVfZ2V0KDI1NiwgR0VUX1RBSU5U
RUQpOwogCiAvKiBCdWlsZCB0aGUgcXVlcnkgc3RyaW5nIHRvIHNlbmQuIElmIG5vdCBleHBsaWNp
dGx5IGdpdmVuLCBhIGRlZmF1bHQgb2YKICJ1c2VyQGRvbWFpbiB1c2VyQGRvbWFpbiIgaXMgdXNl
ZC4gKi8KQEAgLTIwNSw2ICsyMDAsNyBAQAogYmVpbmcgYSBob3N0IGxpc3QuICovCiAKIGxpc3Rw
dHIgPSBvYi0+aG9zdHM7CisvKiBub3QgZXhwYW5kZWQgc28gc2hvdWxkIG5ldmVyIGJlIHRhaW50
ZWQgKi8KIHdoaWxlICgoaG9zdG5hbWUgPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdHB0ciwgJnNl
cCwgaG9zdF9idWZmZXIsCiAgICAgICAgc2l6ZW9mKGhvc3RfYnVmZmVyKSkpKQogICB7CmRpZmYg
LXVyIGV4aW0ub3JpZy9zcmMvcm91dGVycy9pcGxvb2t1cC5oIGV4aW0vc3JjL3JvdXRlcnMvaXBs
b29rdXAuaAotLS0gZXhpbS5vcmlnL3NyYy9yb3V0ZXJzL2lwbG9va3VwLmgJMjAyMy0wNi0wNCAx
NjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL3JvdXRlcnMvaXBsb29rdXAuaAky
MDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMyw2ICszLDcgQEAKICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIENvcHly
aWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMDkgKi8KKy8qIENvcHly
aWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMSAqLwogLyogU2VlIHRoZSBmaWxlIE5P
VElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogCkBAIC0x
Nyw3ICsxOCw3IEBACiAgIHVzY2hhciAqcXVlcnk7CiAgIHVzY2hhciAqcmVzcG9uc2VfcGF0dGVy
bjsKICAgdXNjaGFyICpyZXJvdXRlOwotICBjb25zdCBwY3JlICpyZV9yZXNwb25zZV9wYXR0ZXJu
OworICBjb25zdCBwY3JlMl9jb2RlICpyZV9yZXNwb25zZV9wYXR0ZXJuOwogICBCT09MICBvcHRp
b25hbDsKIH0gaXBsb29rdXBfcm91dGVyX29wdGlvbnNfYmxvY2s7CiAKZGlmZiAtdXIgZXhpbS5v
cmlnL3NyYy9yb3V0ZXJzL21hbnVhbHJvdXRlLmMgZXhpbS9zcmMvcm91dGVycy9tYW51YWxyb3V0
ZS5jCi0tLSBleGltLm9yaWcvc3JjL3JvdXRlcnMvbWFudWFscm91dGUuYwkyMDIzLTA2LTA0IDE2
OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvcm91dGVycy9tYW51YWxyb3V0ZS5j
CTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAg
ICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdo
dCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAo
YykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAo
YykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBm
b3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogCkBAIC0yNDgsOSAr
MjQ4LDYgQEAKIEJPT0wgaW5kaXZpZHVhbF90cmFuc3BvcnRfc2V0ID0gRkFMU0U7CiBCT09MIHJh
bmRvbWl6ZSA9IG9iLT5ob3N0c19yYW5kb21pemU7CiAKLWFkZHJfbmV3ID0gYWRkcl9uZXc7ICAg
ICAgICAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotYWRkcl9zdWNjZWVkID0g
YWRkcl9zdWNjZWVkOwotCiBERUJVRyhEX3JvdXRlKSBkZWJ1Z19wcmludGYoIiVzIHJvdXRlciBj
YWxsZWQgZm9yICVzXG4gIGRvbWFpbiA9ICVzXG4iLAogICByYmxvY2stPm5hbWUsIGFkZHItPmFk
ZHJlc3MsIGFkZHItPmRvbWFpbik7CiAKQEAgLTI2Miw3ICsyNTksNyBAQAogICBpbnQgc2VwID0g
LSgnOycpOyAgICAgICAgICAgICAvKiBEZWZhdWx0IGlzIHNlbWljb2xvbiAqLwogICBsaXN0cHRy
ID0gb2ItPnJvdXRlX2xpc3Q7CiAKLSAgd2hpbGUgKChyb3V0ZV9pdGVtID0gc3RyaW5nX25leHRp
bmxpc3QoJmxpc3RwdHIsICZzZXAsIE5VTEwsIDApKSAhPSBOVUxMKQorICB3aGlsZSAoKHJvdXRl
X2l0ZW0gPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdHB0ciwgJnNlcCwgTlVMTCwgMCkpKQogICAg
IHsKICAgICBpbnQgcmM7CiAKQEAgLTQwMiw3ICszOTksNyBAQAogICBpZiAoaG9zdGxpc3RbMF0p
CiAgICAgewogICAgIGhvc3RfaXRlbSAqaDsKLSAgICBhZGRyLT5ob3N0X2xpc3QgPSBoID0gc3Rv
cmVfZ2V0KHNpemVvZihob3N0X2l0ZW0pLCBGQUxTRSk7CisgICAgYWRkci0+aG9zdF9saXN0ID0g
aCA9IHN0b3JlX2dldChzaXplb2YoaG9zdF9pdGVtKSwgR0VUX1VOVEFJTlRFRCk7CiAgICAgaC0+
bmFtZSA9IHN0cmluZ19jb3B5KGhvc3RsaXN0KTsKICAgICBoLT5hZGRyZXNzID0gTlVMTDsKICAg
ICBoLT5wb3J0ID0gUE9SVF9OT05FOwpAQCAtNDcxLDcgKzQ2OCw3IEBACiBkZWZpbmVkIGZvciB0
aGVzZSBob3N0cy4gSXQgd2lsbCBiZSBhIHJlbW90ZSBvbmUsIGFzIGEgbG9jYWwgdHJhbnNwb3J0
IGlzCiBkZWFsdCB3aXRoIGFib3ZlLiBIb3dldmVyLCB3ZSBkb24ndCBuZWVkIG9uZSBpZiB2ZXJp
Znlpbmcgb25seS4gKi8KIAotaWYgKHRyYW5zcG9ydCA9PSBOVUxMICYmIHZlcmlmeSA9PSB2X25v
bmUpCitpZiAoIXRyYW5zcG9ydCAmJiB2ZXJpZnkgPT0gdl9ub25lKQogICAgIHsKICAgICBsb2df
d3JpdGUoMCwgTE9HX01BSU4sICJFcnJvciBpbiAlcyByb3V0ZXI6IG5vIHRyYW5zcG9ydCBkZWZp
bmVkIiwKICAgICAgIHJibG9jay0+bmFtZSk7CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvcm91dGVy
cy9xdWVyeXByb2dyYW0uYyBleGltL3NyYy9yb3V0ZXJzL3F1ZXJ5cHJvZ3JhbS5jCi0tLSBleGlt
Lm9yaWcvc3JjL3JvdXRlcnMvcXVlcnlwcm9ncmFtLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL3JvdXRlcnMvcXVlcnlwcm9ncmFtLmMJMjAyMi0wNi0y
MyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0g
YW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUg
RXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJz
aXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhp
bSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRp
b25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAjaW5jbHVkZSAiLi4vZXhpbS5oIgpA
QCAtODYsMTMgKzg2LDEzIEBACiAKIC8qIEEgY29tbWFuZCBtdXN0IGJlIGdpdmVuICovCiAKLWlm
IChvYi0+Y29tbWFuZCA9PSBOVUxMKQoraWYgKCFvYi0+Y29tbWFuZCkKICAgbG9nX3dyaXRlKDAs
IExPR19QQU5JQ19ESUV8TE9HX0NPTkZJR19GT1IsICIlcyByb3V0ZXI6XG4gICIKICAgICAiYSBj
b21tYW5kIHNwZWNpZmljYXRpb24gaXMgcmVxdWlyZWQiLCByYmxvY2stPm5hbWUpOwogCiAvKiBB
IHVpZC9naWQgbXVzdCBiZSBzdXBwbGllZCAqLwogCi1pZiAoIW9iLT5jbWRfdWlkX3NldCAmJiBv
Yi0+ZXhwYW5kX2NtZF91aWQgPT0gTlVMTCkKK2lmICghb2ItPmNtZF91aWRfc2V0ICYmICFvYi0+
ZXhwYW5kX2NtZF91aWQpCiAgIGxvZ193cml0ZSgwLCBMT0dfUEFOSUNfRElFfExPR19DT05GSUdf
Rk9SLCAiJXMgcm91dGVyOlxuICAiCiAgICAgImNvbW1hbmRfdXNlciBtdXN0IGJlIHNwZWNpZmll
ZCIsIHJibG9jay0+bmFtZSk7CiB9CkBAIC0yNDIsNDEgKzI0MiwzMSBAQAogICAmYWRkcl9wcm9w
LnJlbW92ZV9oZWFkZXJzKTsKIGlmIChyYyAhPSBPSykgcmV0dXJuIHJjOwogCi0jaWZkZWYgRVhQ
RVJJTUVOVEFMX1NSUwotYWRkcl9wcm9wLnNyc19zZW5kZXIgPSBOVUxMOwotI2VuZGlmCi0KIC8q
IEdldCB0aGUgZml4ZWQgb3IgZXhwYW5kZWQgdWlkIHVuZGVyIHdoaWNoIHRoZSBjb21tYW5kIGlz
IHRvIHJ1bgogKGluaXRpYWxpemF0aW9uIGVuc3VyZXMgdGhhdCBvbmUgb3IgdGhlIG90aGVyIGlz
IHNldCkuICovCiAKLWlmICghb2ItPmNtZF91aWRfc2V0KQotICB7Ci0gIGlmICghcm91dGVfZmlu
ZF9leHBhbmRlZF91c2VyKG9iLT5leHBhbmRfY21kX3VpZCwgcmJsb2NrLT5uYW1lLCBVUyJyb3V0
ZXIiLAotICAgICAgJnVwdywgJnVpZCwgJihhZGRyLT5tZXNzYWdlKSkpCitpZiAoICAhb2ItPmNt
ZF91aWRfc2V0CisgICAmJiAhcm91dGVfZmluZF9leHBhbmRlZF91c2VyKG9iLT5leHBhbmRfY21k
X3VpZCwgcmJsb2NrLT5uYW1lLCBVUyJyb3V0ZXIiLAorCSZ1cHcsICZ1aWQsICYoYWRkci0+bWVz
c2FnZSkpKQogICAgIHJldHVybiBERUZFUjsKLSAgfQogCiAvKiBHZXQgdGhlIGZpeGVkIG9yIGV4
cGFuZGVkIGdpZCwgb3IgdGFrZSB0aGUgZ2lkIGZyb20gdGhlIHBhc3N3ZCBlbnRyeS4gKi8KIAog
aWYgKCFvYi0+Y21kX2dpZF9zZXQpCi0gIHsKLSAgaWYgKG9iLT5leHBhbmRfY21kX2dpZCAhPSBO
VUxMKQorICBpZiAob2ItPmV4cGFuZF9jbWRfZ2lkKQogICAgIHsKICAgICBpZiAocm91dGVfZmlu
ZF9leHBhbmRlZF9ncm91cChvYi0+ZXhwYW5kX2NtZF9naWQsIHJibG9jay0+bmFtZSwKICAgICAg
ICAgVVMicm91dGVyIiwgJmdpZCwgJihhZGRyLT5tZXNzYWdlKSkpCiAgICAgICByZXR1cm4gREVG
RVI7CiAgICAgfQotICBlbHNlIGlmICh1cHcgIT0gTlVMTCkKLSAgICB7CisgIGVsc2UgaWYgKHVw
dykKICAgICBnaWQgPSB1cHctPnB3X2dpZDsKLSAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgYWRk
ci0+bWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJjb21tYW5kX3VzZXIgc2V0IHdpdGhvdXQgY29t
bWFuZF9ncm91cCAiCiAgICAgICAiZm9yICVzIHJvdXRlciIsIHJibG9jay0+bmFtZSk7CiAgICAg
cmV0dXJuIERFRkVSOwogICAgIH0KLSAgfQogCiBERUJVRyhEX3JvdXRlKSBkZWJ1Z19wcmludGYo
InJlcXVpcmVzIHVpZD0lbGQgZ2lkPSVsZCBjdXJyZW50X2RpcmVjdG9yeT0lc1xuIiwKICAgKGxv
bmcgaW50KXVpZCwgKGxvbmcgaW50KWdpZCwgY3VycmVudF9kaXJlY3RvcnkpOwpAQCAtMzAxLDEx
ICsyOTEsMTAgQEAKICAgICBUUlVFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBl
eHBhbmQgdGhlIGFyZ3VtZW50cyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qIG5vdCByZWxldmFudCB3aGVuLi4uICovCiAgICAgTlVMTCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyogbm8gdHJhbnNwb3J0aW5nIGFkZHJlc3MgKi8KKyAgICBGQUxT
RSwJCQkJLyogYXJncyBtdXN0IGJlIHVudGFpbnRlZCAqLwogICAgIFVTInF1ZXJ5cHJvZ3JhbSBy
b3V0ZXIiLCAgICAgICAgICAgIC8qIGZvciBlcnJvciBtZXNzYWdlcyAqLwotICAgICYoYWRkci0+
bWVzc2FnZSkpKSAgICAgICAgICAgICAgICAgIC8qIHdoZXJlIHRvIHB1dCBlcnJvciBtZXNzYWdl
ICovCi0gIHsKKyAgICAmYWRkci0+bWVzc2FnZSkpICAgICAgICAgICAgICAgICAgICAvKiB3aGVy
ZSB0byBwdXQgZXJyb3IgbWVzc2FnZSAqLwogICByZXR1cm4gREVGRVI7Ci0gIH0KIAogLyogQ3Jl
YXRlIHRoZSBjaGlsZCBwcm9jZXNzLCBtYWtpbmcgaXQgYSBncm91cCBsZWFkZXIuICovCiAKQEAg
LTM3Myw4ICszNjIsOCBAQAogcndvcmQgPSBidWZmZXI7CiB3aGlsZSAoaXNzcGFjZSgqcndvcmQp
KSByd29yZCsrOwogcmRhdGEgPSByd29yZDsKLXdoaWxlICgqcmRhdGEgIT0gMCAmJiAhaXNzcGFj
ZSgqcmRhdGEpKSByZGF0YSsrOwotaWYgKCpyZGF0YSAhPSAwKSAqcmRhdGErKyA9IDA7Cit3aGls
ZSAoKnJkYXRhICYmICFpc3NwYWNlKCpyZGF0YSkpIHJkYXRhKys7CitpZiAoKnJkYXRhKSAqcmRh
dGErKyA9IDA7CiAKIC8qIFRoZSB3b3JkIG11c3QgYmUgYSBrbm93biB5aWVsZCBuYW1lLiBJZiBp
dCBpcyAiUkVESVJFQ1QiLCB0aGUgcmVzdCBvZiB0aGUKIGxpbmUgaXMgcmVkaXJlY3Rpb24gZGF0
YSwgYXMgZm9yIGEgLmZvcndhcmQgZmlsZS4gSXQgbWF5IG5vdCBjb250YWluIGZpbHRlcgpAQCAt
NDAyLDcgKzM5MSw3IEBACiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaWV2
ZSBzdWJhZGRyZXNzIG5vdCByZWxldmFudCAqLwogICAgICZ1Z2lkLCAgICAgICAgICAgICAgICAg
ICAgICAgLyogdWlkL2dpZCAoYnV0IG5vdCBzZXQpICovCiAgICAgJmdlbmVyYXRlZCwgICAgICAg
ICAgICAgICAgICAvKiB3aGVyZSB0byBoYW5nIHRoZSByZXN1bHRzICovCi0gICAgJihhZGRyLT5t
ZXNzYWdlKSwgICAgICAgICAgICAvKiB3aGVyZSB0byBwdXQgbWVzc2FnZXMgKi8KKyAgICAmYWRk
ci0+bWVzc2FnZSwgICAgICAgICAgICAgIC8qIHdoZXJlIHRvIHB1dCBtZXNzYWdlcyAqLwogICAg
IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3Qgc2tpcCBzeW50YXggZXJyb3Jz
ICovCiAgICAgJmZpbHRlcnR5cGUsICAgICAgICAgICAgICAgICAvKiBub3QgdXNlZDsgd2lsbCBh
bHdheXMgYmUgRklMVEVSX0ZPUldBUkQgKi8KICAgICBzdHJpbmdfc3ByaW50ZigiJXMgcm91dGVy
IiwgcmJsb2NrLT5uYW1lKSk7CkBAIC00MTQsMjggKzQwMywyOCBAQAogICAgIHJlc3BvbnNlIGFm
dGVyIHZlcmlmeWluZy4gKi8KIAogICAgIGNhc2UgRkZfREVGRVI6Ci0gICAgaWYgKGFkZHItPm1l
c3NhZ2UgPT0gTlVMTCkgYWRkci0+bWVzc2FnZSA9IFVTImZvcmNlZCBkZWZlciI7CisgICAgICBp
ZiAoIWFkZHItPm1lc3NhZ2UpIGFkZHItPm1lc3NhZ2UgPSBVUyJmb3JjZWQgZGVmZXIiOwogICAg
ICAgZWxzZSBhZGRyLT51c2VyX21lc3NhZ2UgPSBhZGRyLT5tZXNzYWdlOwotICAgIHJldHVybiBE
RUZFUjsKKyAgICAgIHJldHVybiBERUZFUjsKIAogICAgIGNhc2UgRkZfRkFJTDoKLSAgICBhZGRf
Z2VuZXJhdGVkKHJibG9jaywgYWRkcl9uZXcsIGFkZHIsIGdlbmVyYXRlZCwgJmFkZHJfcHJvcCk7
Ci0gICAgaWYgKGFkZHItPm1lc3NhZ2UgPT0gTlVMTCkgYWRkci0+bWVzc2FnZSA9IFVTImZvcmNl
ZCByZWplY3Rpb24iOworICAgICAgYWRkX2dlbmVyYXRlZChyYmxvY2ssIGFkZHJfbmV3LCBhZGRy
LCBnZW5lcmF0ZWQsICZhZGRyX3Byb3ApOworICAgICAgaWYgKCFhZGRyLT5tZXNzYWdlKSBhZGRy
LT5tZXNzYWdlID0gVVMiZm9yY2VkIHJlamVjdGlvbiI7CiAgICAgICBlbHNlIGFkZHItPnVzZXJf
bWVzc2FnZSA9IGFkZHItPm1lc3NhZ2U7Ci0gICAgcmV0dXJuIEZBSUw7CisgICAgICByZXR1cm4g
RkFJTDsKIAogICAgIGNhc2UgRkZfREVMSVZFUkVEOgotICAgIGJyZWFrOworICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIEZGX05PVERFTElWRVJFRDogICAgLyogYW4gZW1wdHkgcmVkaXJlY3Rpb24g
bGlzdCBpcyBiYWQgKi8KLSAgICBhZGRyLT5tZXNzYWdlID0gVVMibm8gYWRkcmVzc2VzIHN1cHBs
aWVkIjsKKyAgICAgIGFkZHItPm1lc3NhZ2UgPSBVUyJubyBhZGRyZXNzZXMgc3VwcGxpZWQiOwog
ICAgIC8qIEZhbGwgdGhyb3VnaCAqLwogCiAgICAgY2FzZSBGRl9FUlJPUjoKICAgICBkZWZhdWx0
OgotICAgIGFkZHItPmJhc2ljX2Vycm5vID0gRVJSTk9fQkFEUkVESVJFQ1Q7Ci0gICAgYWRkci0+
bWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJlcnJvciBpbiByZWRpcmVjdCBkYXRhOiAlcyIsIGFk
ZHItPm1lc3NhZ2UpOwotICAgIHJldHVybiBERUZFUjsKKyAgICAgIGFkZHItPmJhc2ljX2Vycm5v
ID0gRVJSTk9fQkFEUkVESVJFQ1Q7CisgICAgICBhZGRyLT5tZXNzYWdlID0gc3RyaW5nX3Nwcmlu
dGYoImVycm9yIGluIHJlZGlyZWN0IGRhdGE6ICVzIiwgYWRkci0+bWVzc2FnZSk7CisgICAgICBy
ZXR1cm4gREVGRVI7CiAgICAgfQogCiAgIC8qIEhhbmRsZSB0aGUgZ2VuZXJhdGVkIGFkZHJlc3Nl
cywgaWYgYW55LiAqLwpAQCAtNDczLDIwICs0NjIsMTUgQEAKICAgfQogCiAvKiBUaGUgY29tbWFu
ZCB5aWVsZGVkICJBQ0NFUFQiLiBUaGUgcmVzdCBvZiB0aGUgc3RyaW5nIGlzIGEgbnVtYmVyIG9m
IGtleWVkCi1maWVsZHMgZnJvbSB3aGljaCB3ZSBjYW4gZmlzaCBvdXQgdmFsdWVzIHVzaW5nIHRo
ZSAiZXh0cmFjdCIgZXhwYW5zaW9uCi1mdW5jdGlvbi4gVG8gdXNlIHRoaXMgZmVhdHVyZSwgd2Ug
bXVzdCBwdXQgdGhlIHN0cmluZyBpbnRvIHRoZSAkdmFsdWUgdmFyaWFibGUsCi1pLmUuIHNldCBs
b29rdXBfdmFsdWUuICovCi0KLWxvb2t1cF92YWx1ZSA9IHJkYXRhOwotcyA9IGV4cGFuZF9zdHJp
bmcoVVMiJHtleHRyYWN0e2RhdGF9eyR2YWx1ZX19Iik7Ci1pZiAoKnMgIT0gMCkgYWRkcl9wcm9w
LmFkZHJlc3NfZGF0YSA9IHN0cmluZ19jb3B5KHMpOworZmllbGRzIGZyb20gd2hpY2ggd2UgY2Fu
IGZpc2ggb3V0IHZhbHVlcyB1c2luZyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgImV4dHJhY3QiCitl
eHBhbnNpb24gZnVuY3Rpb24uICovCiAKLXMgPSBleHBhbmRfc3RyaW5nKFVTIiR7ZXh0cmFjdHt0
cmFuc3BvcnR9eyR2YWx1ZX19Iik7Ci1sb29rdXBfdmFsdWUgPSBOVUxMOworaWYgKChzID0gZXhw
YW5kX2dldGtleWVkKFVTImRhdGEiLCByZGF0YSkpICYmICpzKQorICBhZGRyX3Byb3AuYWRkcmVz
c19kYXRhID0gc3RyaW5nX2NvcHkocyk7CiAKIC8qIElmIHdlIGZvdW5kIGEgdHJhbnNwb3J0IG5h
bWUsIGZpbmQgdGhlIGFjdHVhbCB0cmFuc3BvcnQgKi8KIAotaWYgKCpzICE9IDApCitpZiAoKHMg
PSBleHBhbmRfZ2V0a2V5ZWQoVVMidHJhbnNwb3J0IiwgcmRhdGEpKSAmJiAqcykKICAgewogICB0
cmFuc3BvcnRfaW5zdGFuY2UgKnRyYW5zcG9ydDsKICAgZm9yICh0cmFuc3BvcnQgPSB0cmFuc3Bv
cnRzOyB0cmFuc3BvcnQ7IHRyYW5zcG9ydCA9IHRyYW5zcG9ydC0+bmV4dCkKQEAgLTUwNyw3ICs0
OTEsNyBAQAogCiBlbHNlCiAgIHsKLSAgaWYgKCFyZl9nZXRfdHJhbnNwb3J0KHJibG9jay0+dHJh
bnNwb3J0X25hbWUsICYocmJsb2NrLT50cmFuc3BvcnQpLCBhZGRyLAorICBpZiAoIXJmX2dldF90
cmFuc3BvcnQocmJsb2NrLT50cmFuc3BvcnRfbmFtZSwgJnJibG9jay0+dHJhbnNwb3J0LCBhZGRy
LAogICAgICAgIHJibG9jay0+bmFtZSwgVVMidHJhbnNwb3J0IikpCiAgICAgcmV0dXJuIERFRkVS
OwogICBhZGRyLT50cmFuc3BvcnQgPSByYmxvY2stPnRyYW5zcG9ydDsKQEAgLTUxNSwxNiArNDk5
LDEyIEBACiAKIC8qIFNlZSBpZiBhIGhvc3QgbGlzdCBpcyBnaXZlbiwgYW5kIGlmIHNvLCBsb29r
IHVwIHRoZSBhZGRyZXNzZXMuICovCiAKLWxvb2t1cF92YWx1ZSA9IHJkYXRhOwotcyA9IGV4cGFu
ZF9zdHJpbmcoVVMiJHtleHRyYWN0e2hvc3RzfXskdmFsdWV9fSIpOwotCi1pZiAoKnMgIT0gMCkK
K2lmICgocyA9IGV4cGFuZF9nZXRrZXllZChVUyJob3N0cyIsIHJkYXRhKSkgJiYgKnMpCiAgIHsK
ICAgaW50IGxvb2t1cF90eXBlID0gTEtfREVGQVVMVDsKLSAgdXNjaGFyICpzcyA9IGV4cGFuZF9z
dHJpbmcoVVMiJHtleHRyYWN0e2xvb2t1cH17JHZhbHVlfX0iKTsKLSAgbG9va3VwX3ZhbHVlID0g
TlVMTDsKKyAgdXNjaGFyICogc3MgPSBleHBhbmRfZ2V0a2V5ZWQoVVMibG9va3VwIiwgcmRhdGEp
OwogCi0gIGlmICgqc3MgIT0gMCkKKyAgaWYgKHNzICYmICpzcykKICAgICB7CiAgICAgaWYgKFVz
dHJjbXAoc3MsICJieW5hbWUiKSA9PSAwKSBsb29rdXBfdHlwZSA9IExLX0JZTkFNRTsKICAgICBl
bHNlIGlmIChVc3RyY21wKHNzLCAiYnlkbnMiKSA9PSAwKSBsb29rdXBfdHlwZSA9IExLX0JZRE5T
OwpAQCAtNTUxLDggKzUzMSw3IEBACiAKIC8qIFF1ZXVlIHRoZSBhZGRyZXNzIGZvciBsb2NhbCBv
ciByZW1vdGUgZGVsaXZlcnkuICovCiAKLXJldHVybiByZl9xdWV1ZV9hZGQoYWRkciwgYWRkcl9s
b2NhbCwgYWRkcl9yZW1vdGUsIHJibG9jaywgcHcpPwotICBPSyA6IERFRkVSOworcmV0dXJuIHJm
X3F1ZXVlX2FkZChhZGRyLCBhZGRyX2xvY2FsLCBhZGRyX3JlbW90ZSwgcmJsb2NrLCBwdykgPyBP
SyA6IERFRkVSOwogfQogCiAjZW5kaWYgICAvKiFNQUNST19QUkVERUYqLwpkaWZmIC11ciBleGlt
Lm9yaWcvc3JjL3JvdXRlcnMvcmVkaXJlY3QuYyBleGltL3NyYy9yb3V0ZXJzL3JlZGlyZWN0LmMK
LS0tIGV4aW0ub3JpZy9zcmMvcm91dGVycy9yZWRpcmVjdC5jCTIwMjMtMDYtMDQgMTY6MjI6MDUu
MDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9yb3V0ZXJzL3JlZGlyZWN0LmMJMjAyMi0wNi0y
MyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0g
YW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUg
RXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJz
aXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhp
bSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRp
b25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAKQEAgLTkzLDEzICs5Myw2IEBACiAg
IHsgInNpZXZlX3VzZXJhZGRyZXNzIiwgb3B0X3N0cmluZ3B0ciwJCUxPRkYoc2lldmVfdXNlcmFk
ZHJlc3MpIH0sCiAgIHsgInNpZXZlX3ZhY2F0aW9uX2RpcmVjdG9yeSIsIG9wdF9zdHJpbmdwdHIs
CUxPRkYoc2lldmVfdmFjYXRpb25fZGlyZWN0b3J5KSB9LAogICB7ICJza2lwX3N5bnRheF9lcnJv
cnMiLCBvcHRfYm9vbCwJCUxPRkYoc2tpcF9zeW50YXhfZXJyb3JzKSB9LAotI2lmZGVmIEVYUEVS
SU1FTlRBTF9TUlMKLSAgeyAic3JzIiwgICAgICAgICAgICAgICAgb3B0X3N0cmluZ3B0ciwJTE9G
RihzcnMpIH0sCi0gIHsgInNyc19hbGlhcyIsICAgICAgICAgIG9wdF9zdHJpbmdwdHIsCUxPRkYo
c3JzX2FsaWFzKSB9LAotICB7ICJzcnNfY29uZGl0aW9uIiwgICAgICBvcHRfc3RyaW5ncHRyLAlM
T0ZGKHNyc19jb25kaXRpb24pIH0sCi0gIHsgInNyc19kYmluc2VydCIsICAgICAgIG9wdF9zdHJp
bmdwdHIsCUxPRkYoc3JzX2RiaW5zZXJ0KSB9LAotICB7ICJzcnNfZGJzZWxlY3QiLCAgICAgICBv
cHRfc3RyaW5ncHRyLAlMT0ZGKHNyc19kYnNlbGVjdCkgfSwKLSNlbmRpZgogICB7ICJzeW50YXhf
ZXJyb3JzX3RleHQiLCBvcHRfc3RyaW5ncHRyLAlMT0ZGKHN5bnRheF9lcnJvcnNfdGV4dCkgfSwK
ICAgeyAic3ludGF4X2Vycm9yc190byIsICAgb3B0X3N0cmluZ3B0ciwJTE9GRihzeW50YXhfZXJy
b3JzX3RvKSB9CiB9OwpAQCAtMTQ5LDEzICsxNDIsNiBAQAogICBOVUxMLCAgICAgICAgLyogcXVh
bGlmeV9kb21haW4gKi8KICAgTlVMTCwgICAgICAgIC8qIG93bmVycyAqLwogICBOVUxMLCAgICAg
ICAgLyogb3duZ3JvdXBzICovCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1NSUwotICBOVUxMLCAgICAg
ICAgLyogc3JzICovCi0gIE5VTEwsICAgICAgICAvKiBzcnNfYWxpYXMgKi8KLSAgTlVMTCwgICAg
ICAgIC8qIHNyc19jb25kaXRpb24gKi8KLSAgTlVMTCwgICAgICAgIC8qIHNyc19kYmluc2VydCAq
LwotICBOVUxMLCAgICAgICAgLyogc3JzX2Ric2VsZWN0ICovCi0jZW5kaWYKICAgMDIyLCAgICAg
ICAgIC8qIG1vZGVtYXNrICovCiAgIFJET19SRVdSSVRFIHwgUkRPX1BSRVBFTkRfSE9NRSwgLyog
Yml0X29wdGlvbnMgKi8KICAgRkFMU0UsICAgICAgIC8qIGNoZWNrX2FuY2VzdG9yICovCkBAIC00
MDksMTQgKzM5NSwxNCBAQAogICAgIGlmIChuZXh0LT5hZGRyZXNzWzBdID09ICd8JykKICAgICAg
IHsKICAgICAgIGFkZHJlc3NfcGlwZSA9IG5leHQtPmFkZHJlc3M7Ci0gICAgICBpZiAocmZfZ2V0
X3RyYW5zcG9ydChvYi0+cGlwZV90cmFuc3BvcnRfbmFtZSwgJihvYi0+cGlwZV90cmFuc3BvcnQp
LAorICAgICAgaWYgKHJmX2dldF90cmFuc3BvcnQob2ItPnBpcGVfdHJhbnNwb3J0X25hbWUsICZv
Yi0+cGlwZV90cmFuc3BvcnQsCiAgICAgICAgICAgbmV4dCwgcmJsb2NrLT5uYW1lLCBVUyJwaXBl
X3RyYW5zcG9ydCIpKQogICAgICAgICBuZXh0LT50cmFuc3BvcnQgPSBvYi0+cGlwZV90cmFuc3Bv
cnQ7CiAgICAgICBhZGRyZXNzX3BpcGUgPSBOVUxMOwogICAgICAgfQogICAgIGVsc2UgaWYgKG5l
eHQtPmFkZHJlc3NbMF0gPT0gJz4nKQogICAgICAgewotICAgICAgaWYgKHJmX2dldF90cmFuc3Bv
cnQob2ItPnJlcGx5X3RyYW5zcG9ydF9uYW1lLCAmKG9iLT5yZXBseV90cmFuc3BvcnQpLAorICAg
ICAgaWYgKHJmX2dldF90cmFuc3BvcnQob2ItPnJlcGx5X3RyYW5zcG9ydF9uYW1lLCAmb2ItPnJl
cGx5X3RyYW5zcG9ydCwKICAgICAgICAgICBuZXh0LCByYmxvY2stPm5hbWUsIFVTInJlcGx5X3Ry
YW5zcG9ydCIpKQogICAgICAgICBuZXh0LT50cmFuc3BvcnQgPSBvYi0+cmVwbHlfdHJhbnNwb3J0
OwogICAgICAgfQpAQCAtNDMyLDExICs0MTgsMTAgQEAKICAgICAgICAgICBuZXh0LT50cmFuc3Bv
cnQgPSBvYi0+ZGlyZWN0b3J5X3RyYW5zcG9ydDsKICAgICAgICAgfQogICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgIGlmIChyZl9nZXRfdHJhbnNwb3J0KG9iLT5maWxlX3RyYW5zcG9ydF9u
YW1lLCAmKG9iLT5maWxlX3RyYW5zcG9ydCksCisgICAgICAgIGlmIChyZl9nZXRfdHJhbnNwb3J0
KG9iLT5maWxlX3RyYW5zcG9ydF9uYW1lLCAmb2ItPmZpbGVfdHJhbnNwb3J0LAogICAgICAgICAg
ICAgbmV4dCwgcmJsb2NrLT5uYW1lLCBVUyJmaWxlX3RyYW5zcG9ydCIpKQogICAgICAgICAgIG5l
eHQtPnRyYW5zcG9ydCA9IG9iLT5maWxlX3RyYW5zcG9ydDsKLSAgICAgICAgfQorCiAgICAgICBh
ZGRyZXNzX2ZpbGUgPSBOVUxMOwogICAgICAgfQogICAgIH0KQEAgLTUyOSw5ICs1MTQsNiBAQAog
aW50IGZyYyA9IDA7CiBpbnQgeHJjID0gMDsKIAotYWRkcl9sb2NhbCA9IGFkZHJfbG9jYWw7ICAg
ICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotYWRkcl9yZW1vdGUgPSBhZGRyX3Jl
bW90ZTsKLQogLyogSW5pdGlhbGl6ZSB0aGUgZGF0YSB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBj
aGlsZHJlbiAqLwogCiBhZGRyX3Byb3AuYWRkcmVzc19kYXRhID0gZGVsaXZlcl9hZGRyZXNzX2Rh
dGE7CkBAIC01NDMsOSArNTI1LDYgQEAKIGFkZHJfcHJvcC52YXJpYWJsZXMgPSBOVUxMOwogdHJl
ZV9kdXAoKHRyZWVfbm9kZSAqKikmYWRkcl9wcm9wLnZhcmlhYmxlcywgYWRkci0+cHJvcC52YXJp
YWJsZXMpOwogCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1NSUwotYWRkcl9wcm9wLnNyc19zZW5kZXIg
PSBOVUxMOwotI2VuZGlmCiAjaWZkZWYgU1VQUE9SVF9JMThOCiBhZGRyX3Byb3AudXRmOF9tc2cg
PSBhZGRyLT5wcm9wLnV0ZjhfbXNnOwogYWRkcl9wcm9wLnV0ZjhfZG93bmN2dCA9IGFkZHItPnBy
b3AudXRmOF9kb3duY3Z0OwpAQCAtNTc4LDk1ICs1NTcsNiBAQAogICB1Z2lkLmdpZF9zZXQgPSBU
UlVFOwogICB9CiAKLSNpZmRlZiBFWFBFUklNRU5UQUxfU1JTCi0gIC8qIFBlcmZvcm0gU1JTIG9u
IHJlY2lwaWVudC9yZXR1cm4tcGF0aCBhcyByZXF1aXJlZCAgKi8KLQotICBpZihvYi0+c3JzICE9
IE5VTEwpCi0gIHsKLSAgICBCT09MIHVzZXNycyA9IFRSVUU7Ci0KLSAgICBpZihvYi0+c3JzX2Nv
bmRpdGlvbiAhPSBOVUxMKQotICAgICAgdXNlc3JzID0gZXhwYW5kX2NoZWNrX2NvbmRpdGlvbihv
Yi0+c3JzX2NvbmRpdGlvbiwgInNyc19jb25kaXRpb24gZXhwYW5zaW9uIGZhaWxlZCIsIE5VTEwp
OwotCi0gICAgaWYodXNlc3JzKQotICAgIHsKLSAgICAgIGludCBzcnNfYWN0aW9uID0gMCwgbl9z
cnM7Ci0gICAgICB1c2NoYXIgKnJlczsKLSAgICAgIHVzY2hhciAqdXNlZG9tYWluOwotCi0gICAg
ICAvKiBXaGF0IGFyZSB3ZSBkb2luZz8gKi8KLSAgICAgIGlmKFVzdHJjbXAob2ItPnNycywgImZv
cndhcmQiKSA9PSAwKQotICAgICAgICBzcnNfYWN0aW9uID0gMTsKLSAgICAgIGVsc2UgaWYoVXN0
cmNtcChvYi0+c3JzLCAicmV2ZXJzZWFuZGZvcndhcmQiKSA9PSAwKQotICAgICAgewotICAgICAg
ICBzcnNfYWN0aW9uID0gMzsKLQotICAgICAgICBpZigob2ItPnNyc19kYmluc2VydCA9PSBOVUxM
KSBeIChvYi0+c3JzX2Ric2VsZWN0ID09IE5VTEwpKQotICAgICAgICAgIHJldHVybiBERUZFUjsK
LSAgICAgIH0KLSAgICAgIGVsc2UgaWYoVXN0cmNtcChvYi0+c3JzLCAicmV2ZXJzZSIpID09IDAp
Ci0gICAgICAgIHNyc19hY3Rpb24gPSAyOwotCi0gICAgICAvKiBSZXZlcnNlIFNSUyAqLwotICAg
ICAgaWYoc3JzX2FjdGlvbiAmIDIpCi0gICAgICB7Ci0gICAgICAgIHNyc19vcmlnX3JlY2lwaWVu
dCA9IGFkZHItPmFkZHJlc3M7Ci0KLSAgICAgICAgZXhpbXNyc19pbml0KCk7Ci0gICAgICAgIGlm
KG9iLT5zcnNfZGJzZWxlY3QpCi0gICAgICAgICAgZXhpbXNyc19kYl9zZXQoVFJVRSwgb2ItPnNy
c19kYnNlbGVjdCk7Ci0vKiBDb21tZW50IHRoaXMgb3V0IGZvciBub3cuLi4KLS8vICAgICAgICBl
bHNlCi0vLyAgICAgICAgICBleGltc3JzX2RiX3NldChUUlVFLCBOVUxMKTsKLSovCi0KLSAgICAg
ICAgaWYoKG5fc3JzID0gZXhpbXNyc19yZXZlcnNlKCZyZXMsIGFkZHItPmFkZHJlc3MpKSA9PSBP
SykKLSAgICAgICAgewotICAgICAgICAgIHNyc19yZWNpcGllbnQgPSByZXM7Ci0gICAgICAgICAg
REVCVUcoRF9hbnkpCi0gICAgICAgICAgICBkZWJ1Z19wcmludGYoIlNSUyAocmV2ZXJzZSk6IFJl
Y2lwaWVudCAnJXMnIHJld3JpdHRlbiB0byAnJXMnXG4iLCBzcnNfb3JpZ19yZWNpcGllbnQsIHNy
c19yZWNpcGllbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhpbXNyc19kb25lKCk7Ci0KLSAg
ICAgICAgaWYobl9zcnMgIT0gT0spCi0gICAgICAgICAgcmV0dXJuIG5fc3JzOwotICAgICAgfQot
Ci0gICAgICAvKiBGb3J3YXJkIFNSUyAqLwotICAgICAgLyogTm8gcG9pbnQgaW4gYWN0dWFsbHkg
cGVyZm9ybWluZyBTUlMgaWYgd2UgYXJlIGp1c3QgdmVyaWZ5aW5nIGEgcmVjaXBpZW50ICovCi0g
ICAgICBpZigoc3JzX2FjdGlvbiAmIDEpICYmIHZlcmlmeSA9PSB2X25vbmUgJiYKLSAgICAgICAg
IChzZW5kZXJfYWRkcmVzcyA/IHNlbmRlcl9hZGRyZXNzWzBdICE9IDAgOiBGQUxTRSkpCi0gICAg
ICB7Ci0KLSAgICAgICAgc3JzX29yaWdfc2VuZGVyID0gc2VuZGVyX2FkZHJlc3M7Ci0gICAgICAg
IGV4aW1zcnNfaW5pdCgpOwotICAgICAgICBpZihvYi0+c3JzX2RiaW5zZXJ0KQotICAgICAgICAg
IGV4aW1zcnNfZGJfc2V0KEZBTFNFLCBvYi0+c3JzX2RiaW5zZXJ0KTsKLS8qIENvbW1lbnQgdGhp
cyBvdXQgZm9yIG5vdy4uLgotLy8gICAgICAgIGVsc2UKLS8vICAgICAgICAgIGV4aW1zcnNfZGJf
c2V0KEZBTFNFLCBOVUxMKTsKLSovCi0KLSAgICAgICAgaWYgKCEodXNlZG9tYWluID0gb2ItPnNy
c19hbGlhcyA/IGV4cGFuZF9zdHJpbmcob2ItPnNyc19hbGlhcykgOiBOVUxMKSkKLSAgICAgICAg
ICB1c2Vkb21haW4gPSBzdHJpbmdfY29weShkZWxpdmVyX2RvbWFpbik7Ci0KLSAgICAgICAgaWYo
KG5fc3JzID0gZXhpbXNyc19mb3J3YXJkKCZyZXMsIHNlbmRlcl9hZGRyZXNzLCB1c2Vkb21haW4p
KSA9PSBPSykKLSAgICAgICAgewotICAgICAgICAgIGFkZHJfcHJvcC5zcnNfc2VuZGVyID0gcmVz
OwotICAgICAgICAgIERFQlVHKERfYW55KQotICAgICAgICAgICAgZGVidWdfcHJpbnRmKCJTUlMg
KGZvcndhcmQpOiBTZW5kZXIgJyVzJyByZXdyaXR0ZW4gdG8gJyVzJ1xuIiwgc3JzX29yaWdfc2Vu
ZGVyLCByZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhpbXNyc19kb25lKCk7Ci0KLSAgICAg
ICAgaWYobl9zcnMgIT0gT0spCi0gICAgICAgICAgcmV0dXJuIG5fc3JzOwotICAgICAgfQotICAg
IH0KLSAgfQotI2VuZGlmCi0KIC8qIENhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgaW50ZXJwcmV0cyBy
ZWRpcmVjdGlvbiBkYXRhLCBlaXRoZXIgaW5saW5lIG9yIGZyb20gYQogZmlsZS4gVGhpcyBpcyBh
IHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIHN5c3RlbSBmaWx0ZXIgY2FuIHVzZSBpdC4g
SXQgd2lsbAogcnVuIHRoZSBmdW5jdGlvbiBpbiBhIHN1YnByb2Nlc3MgaWYgbmVjZXNzYXJ5LiBJ
ZiBxdWFsaWZ5X3ByZXNlcnZlX2RvbWFpbiBpcwpAQCAtNjk2LDcgKzU4Niw3IEBACiBmcmMgPSBy
ZGFfaW50ZXJwcmV0KCZyZWRpcmVjdCwgb3B0aW9ucywgb2ItPmluY2x1ZGVfZGlyZWN0b3J5LAog
ICBvYi0+c2lldmVfdmFjYXRpb25fZGlyZWN0b3J5LCBvYi0+c2lldmVfZW5vdGlmeV9tYWlsdG9f
b3duZXIsCiAgIG9iLT5zaWV2ZV91c2VyYWRkcmVzcywgb2ItPnNpZXZlX3N1YmFkZHJlc3MsICZ1
Z2lkLCAmZ2VuZXJhdGVkLAotICAmKGFkZHItPm1lc3NhZ2UpLCBvYi0+c2tpcF9zeW50YXhfZXJy
b3JzPyAmZWJsb2NrIDogTlVMTCwgJmZpbHRlcnR5cGUsCisgICZhZGRyLT5tZXNzYWdlLCBvYi0+
c2tpcF9zeW50YXhfZXJyb3JzPyAmZWJsb2NrIDogTlVMTCwgJmZpbHRlcnR5cGUsCiAgIHN0cmlu
Z19zcHJpbnRmKCIlcyByb3V0ZXIgKHJlY2lwaWVudCBpcyAlcykiLCByYmxvY2stPm5hbWUsIGFk
ZHItPmFkZHJlc3MpKTsKIAogcXVhbGlmeV9kb21haW5fcmVjaXBpZW50ID0gc2F2ZV9xdWFsaWZ5
X2RvbWFpbl9yZWNpcGllbnQ7CkBAIC03MzcsMTUgKzYyNywxMyBAQAogICAgICAgYWRkci0+bWVz
c2FnZSA9IHlpZWxkID09IEZBSUwgPyBVUyJmb3JjZWQgcmVqZWN0aW9uIiA6IFVTImZvcmNlZCBk
ZWZlciI7CiAgICAgZWxzZQogICAgICAgewotICAgICAgaW50IG92ZWN0b3JbM107Ci0gICAgICBp
ZiAob2ItPmZvcmJpZF9zbXRwX2NvZGUgJiYKLQkgIHBjcmVfZXhlYyhyZWdleF9zbXRwX2NvZGUs
IE5VTEwsIENTIGFkZHItPm1lc3NhZ2UsCi0JICAgIFVzdHJsZW4oYWRkci0+bWVzc2FnZSksIDAs
IFBDUkVfRU9QVCwKLQkgICAgb3ZlY3Rvciwgc2l6ZW9mKG92ZWN0b3IpL3NpemVvZihpbnQpKSA+
PSAwKQorICAgICAgdXNjaGFyICogbWF0Y2hlZDsKKyAgICAgIGlmICggIG9iLT5mb3JiaWRfc210
cF9jb2RlCisJICYmIHJlZ2V4X21hdGNoKHJlZ2V4X3NtdHBfY29kZSwgYWRkci0+bWVzc2FnZSwg
LTEsICZtYXRjaGVkKSkKIAl7CiAJREVCVUcoRF9yb3V0ZSkgZGVidWdfcHJpbnRmKCJTTVRQIGNv
ZGUgYXQgc3RhcnQgb2YgZXJyb3IgbWVzc2FnZSAiCiAJICAiaXMgaWdub3JlZCBiZWNhdXNlIGZv
cmJpZF9zbXRwX2NvZGUgaXMgc2V0XG4iKTsKLQlhZGRyLT5tZXNzYWdlICs9IG92ZWN0b3JbMV07
CisJYWRkci0+bWVzc2FnZSArPSBVc3RybGVuKG1hdGNoZWQpOwogCX0KICAgICAgIGFkZHItPnVz
ZXJfbWVzc2FnZSA9IGFkZHItPm1lc3NhZ2U7CiAgICAgICBzZXRmbGFnKGFkZHIsIGFmX3Bhc3Nf
bWVzc2FnZSk7CkBAIC03ODcsNyArNjc1LDcgQEAKIAogICAgIGlmIChmaWx0ZXJ0eXBlICE9IEZJ
TFRFUl9GT1JXQVJEICYmIG9iLT5za2lwX3N5bnRheF9lcnJvcnMpCiAgICAgICB7Ci0gICAgICBl
YmxvY2sgPSBzdG9yZV9nZXQoc2l6ZW9mKGVycm9yX2Jsb2NrKSwgRkFMU0UpOworICAgICAgZWJs
b2NrID0gc3RvcmVfZ2V0KHNpemVvZihlcnJvcl9ibG9jayksIEdFVF9VTlRBSU5URUQpOwogICAg
ICAgZWJsb2NrLT5uZXh0ID0gTlVMTDsKICAgICAgIGVibG9jay0+dGV4dDEgPSBhZGRyLT5tZXNz
YWdlOwogICAgICAgZWJsb2NrLT50ZXh0MiA9IE5VTEw7CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMv
cm91dGVycy9yZWRpcmVjdC5oIGV4aW0vc3JjL3JvdXRlcnMvcmVkaXJlY3QuaAotLS0gZXhpbS5v
cmlnL3NyYy9yb3V0ZXJzL3JlZGlyZWN0LmgJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAg
KzAzMDAKKysrIGV4aW0vc3JjL3JvdXRlcnMvcmVkaXJlY3QuaAkyMDIyLTA2LTIzIDE2OjQxOjEw
LjAwMDAwMDAwMCArMDMwMApAQCAtMiw2ICsyLDcgQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5l
dCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50
YWluZXJzIDIwMjEgLSAyMDIyICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2Ft
YnJpZGdlIDE5OTUgLSAyMDA5ICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRp
b25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCkBAIC0zNCwxNCArMzUsNiBAQAogICB1
aWRfdCAgKm93bmVyczsKICAgZ2lkX3QgICpvd25ncm91cHM7CiAKLSNpZmRlZiBFWFBFUklNRU5U
QUxfU1JTCi0gIHVzY2hhciAqc3JzOwotICB1c2NoYXIgKnNyc19hbGlhczsKLSAgdXNjaGFyICpz
cnNfY29uZGl0aW9uOwotICB1c2NoYXIgKnNyc19kYmluc2VydDsKLSAgdXNjaGFyICpzcnNfZGJz
ZWxlY3Q7Ci0jZW5kaWYKLQogICBpbnQgICBtb2RlbWFzazsKICAgaW50ICAgYml0X29wdGlvbnM7
CiAgIEJPT0wgIGNoZWNrX2FuY2VzdG9yOwpkaWZmIC11ciBleGltLm9yaWcvc3JjL3JvdXRlcnMv
cmZfY2hhbmdlX2RvbWFpbi5jIGV4aW0vc3JjL3JvdXRlcnMvcmZfY2hhbmdlX2RvbWFpbi5jCi0t
LSBleGltLm9yaWcvc3JjL3JvdXRlcnMvcmZfY2hhbmdlX2RvbWFpbi5jCTIwMjMtMDYtMDQgMTY6
MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9yb3V0ZXJzL3JmX2NoYW5nZV9kb21h
aW4uYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw2ICsyLDcgQEAK
ICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5
cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykg
VW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KIC8qIFNlZSB0aGUgZmlsZSBO
T1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKQEAgLTM1
LDkgKzM2LDkgQEAKIHJmX2NoYW5nZV9kb21haW4oYWRkcmVzc19pdGVtICphZGRyLCBjb25zdCB1
c2NoYXIgKmRvbWFpbiwgQk9PTCByZXdyaXRlLAogICBhZGRyZXNzX2l0ZW0gKiphZGRyX25ldykK
IHsKLWFkZHJlc3NfaXRlbSAqcGFyZW50ID0gc3RvcmVfZ2V0KHNpemVvZihhZGRyZXNzX2l0ZW0p
LCBGQUxTRSk7Ci11c2NoYXIgKmF0ID0gVXN0cnJjaHIoYWRkci0+YWRkcmVzcywgJ0AnKTsKLXVz
Y2hhciAqYWRkcmVzcyA9IHN0cmluZ19zcHJpbnRmKCIlLipzQCVzIiwKK2FkZHJlc3NfaXRlbSAq
IHBhcmVudCA9IHN0b3JlX2dldChzaXplb2YoYWRkcmVzc19pdGVtKSwgR0VUX1VOVEFJTlRFRCk7
Cit1c2NoYXIgKiBhdCA9IFVzdHJyY2hyKGFkZHItPmFkZHJlc3MsICdAJyk7Cit1c2NoYXIgKiBh
ZGRyZXNzID0gc3RyaW5nX3NwcmludGYoIiUuKnNAJXMiLAogICAoaW50KShhdCAtIGFkZHItPmFk
ZHJlc3MpLCBhZGRyLT5hZGRyZXNzLCBkb21haW4pOwogCiBERUJVRyhEX3JvdXRlKSBkZWJ1Z19w
cmludGYoImRvbWFpbiBjaGFuZ2VkIHRvICVzXG4iLCBkb21haW4pOwpkaWZmIC11ciBleGltLm9y
aWcvc3JjL3JvdXRlcnMvcmZfZ2V0X211bmdlX2hlYWRlcnMuYyBleGltL3NyYy9yb3V0ZXJzL3Jm
X2dldF9tdW5nZV9oZWFkZXJzLmMKLS0tIGV4aW0ub3JpZy9zcmMvcm91dGVycy9yZl9nZXRfbXVu
Z2VfaGVhZGVycy5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGlt
L3NyYy9yb3V0ZXJzL3JmX2dldF9tdW5nZV9oZWFkZXJzLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4w
MDAwMDAwMDAgKzAzMDAKQEAgLTIsNiArMiw3IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQg
bWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFp
bmVycyAyMDIxIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJy
aWRnZSAxOTk1IC0gMjAxOCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9u
cyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIApAQCAtMzgsMTcgKzM5LDE3IEBACiAgIHsK
ICAgY29uc3QgdXNjaGFyICogbGlzdCA9IHJibG9jay0+ZXh0cmFfaGVhZGVyczsKICAgaW50IHNl
cCA9ICdcbic7Ci0gIHVzY2hhciAqIHM7CisgIHVzY2hhciAqIHMsICogdDsKICAgaW50IHNsZW47
CiAKICAgd2hpbGUgKChzID0gc3RyaW5nX25leHRpbmxpc3QoJmxpc3QsICZzZXAsIE5VTEwsIDAp
KSkKLSAgICBpZiAoIShzID0gZXhwYW5kX3N0cmluZyhzKSkpCisgICAgaWYgKCEocyA9IGV4cGFu
ZF9zdHJpbmcodCA9IHMpKSkKICAgICAgIHsKICAgICAgIGlmICghZi5leHBhbmRfc3RyaW5nX2Zv
cmNlZGZhaWwpCiAJewogCWFkZHItPm1lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigKIAkgICIlcyBy
b3V0ZXIgZmFpbGVkIHRvIGV4cGFuZCBhZGRfaGVhZGVycyBpdGVtIFwiJXNcIjogJXMiLAotCSAg
cmJsb2NrLT5uYW1lLCBzLCBleHBhbmRfc3RyaW5nX21lc3NhZ2UpOworCSAgcmJsb2NrLT5uYW1l
LCB0LCBleHBhbmRfc3RyaW5nX21lc3NhZ2UpOwogCXJldHVybiBERUZFUjsKIAl9CiAgICAgICB9
CkBAIC01OSw3ICs2MCw3IEBACiAgICAgICBzaGFyZWQgd2l0aCBvdGhlciBhZGRyZXNzZXMuIFRo
ZSBvdXRwdXQgZnVuY3Rpb24gb3V0cHV0cyB0aGVtIGluIHJldmVyc2UKICAgICAgIG9yZGVyLiAq
LwogCi0gICAgICBoZWFkZXJfbGluZSAqICBoID0gc3RvcmVfZ2V0KHNpemVvZihoZWFkZXJfbGlu
ZSksIEZBTFNFKTsKKyAgICAgIGhlYWRlcl9saW5lICogIGggPSBzdG9yZV9nZXQoc2l6ZW9mKGhl
YWRlcl9saW5lKSwgR0VUX1VOVEFJTlRFRCk7CiAKICAgICAgIC8qIFdlIHVzZWQgdG8gdXNlIHN0
cmluZ19zcHJpbnRmKCkgdG8gYWRkIHRoZSBuZXdsaW5lIGlmIG5lZWRlZCwgYnV0IHRoYXQKICAg
ICAgIGNhdXNlcyBwcm9ibGVtcyBpZiB0aGUgaGVhZGVyIGxpbmUgaXMgZXhjZWVkaW5nbHkgbG9u
ZyAoZS5nLiBhZGRpbmcKQEAgLTY5LDcgKzcwLDcgQEAKIAloLT50ZXh0ID0gczsKICAgICAgIGVs
c2UKIAl7Ci0JaC0+dGV4dCA9IHN0b3JlX2dldChzbGVuKzIsIGlzX3RhaW50ZWQocykpOworCWgt
PnRleHQgPSBzdG9yZV9nZXQoc2xlbisyLCBzKTsKIAltZW1jcHkoaC0+dGV4dCwgcywgc2xlbik7
CiAJaC0+dGV4dFtzbGVuKytdID0gJ1xuJzsKIAloLT50ZXh0W3NsZW5dID0gMDsKQEAgLTkwLDIw
ICs5MSwyMCBAQAogICB7CiAgIGNvbnN0IHVzY2hhciAqIGxpc3QgPSByYmxvY2stPnJlbW92ZV9o
ZWFkZXJzOwogICBpbnQgc2VwID0gJzonOwotICB1c2NoYXIgKiBzOworICB1c2NoYXIgKiBzLCAq
IHQ7CiAgIGdzdHJpbmcgKiBnID0gTlVMTDsKIAogICBpZiAoKnJlbW92ZV9oZWFkZXJzKQogICAg
IGcgPSBzdHJpbmdfY2F0KE5VTEwsICpyZW1vdmVfaGVhZGVycyk7CiAKICAgd2hpbGUgKChzID0g
c3RyaW5nX25leHRpbmxpc3QoJmxpc3QsICZzZXAsIE5VTEwsIDApKSkKLSAgICBpZiAoIShzID0g
ZXhwYW5kX3N0cmluZyhzKSkpCisgICAgaWYgKCEocyA9IGV4cGFuZF9zdHJpbmcodCA9IHMpKSkK
ICAgICAgIHsKICAgICAgIGlmICghZi5leHBhbmRfc3RyaW5nX2ZvcmNlZGZhaWwpCiAJewogCWFk
ZHItPm1lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigKIAkgICIlcyByb3V0ZXIgZmFpbGVkIHRvIGV4
cGFuZCByZW1vdmVfaGVhZGVycyBpdGVtIFwiJXNcIjogJXMiLAotCSAgcmJsb2NrLT5uYW1lLCBz
LCBleHBhbmRfc3RyaW5nX21lc3NhZ2UpOworCSAgcmJsb2NrLT5uYW1lLCB0LCBleHBhbmRfc3Ry
aW5nX21lc3NhZ2UpOwogCXJldHVybiBERUZFUjsKIAl9CiAgICAgICB9CmRpZmYgLXVyIGV4aW0u
b3JpZy9zcmMvcm91dGVycy9yZl9nZXRfdHJhbnNwb3J0LmMgZXhpbS9zcmMvcm91dGVycy9yZl9n
ZXRfdHJhbnNwb3J0LmMKLS0tIGV4aW0ub3JpZy9zcmMvcm91dGVycy9yZl9nZXRfdHJhbnNwb3J0
LmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL3JvdXRl
cnMvcmZfZ2V0X3RyYW5zcG9ydC5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAw
CkBAIC0yLDYgKzIsNyBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0
IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMSAtIDIw
MjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIw
MDkgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBk
aXN0cmlidXRpb24uICovCiAKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9yb3V0ZXJzL3JmX3F1ZXVl
X2FkZC5jIGV4aW0vc3JjL3JvdXRlcnMvcmZfcXVldWVfYWRkLmMKLS0tIGV4aW0ub3JpZy9zcmMv
cm91dGVycy9yZl9xdWV1ZV9hZGQuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMw
MAorKysgZXhpbS9zcmMvcm91dGVycy9yZl9xdWV1ZV9hZGQuYwkyMDIyLTA2LTIzIDE2OjQxOjEw
LjAwMDAwMDAwMCArMDMwMApAQCAtMyw2ICszLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0
eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0g
TWFpbnRhaW5lcnMgMjAyMSAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9u
cyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogI2luY2x1ZGUgIi4uL2V4aW0uaCIKZGlm
ZiAtdXIgZXhpbS5vcmlnL3NyYy9zZWFyY2guYyBleGltL3NyYy9zZWFyY2guYwotLS0gZXhpbS5v
cmlnL3NyYy9zZWFyY2guYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysg
ZXhpbS9zcmMvc2VhcmNoLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAg
LTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdl
bnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAq
LwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxNSAq
LwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUg
dGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAq
LwogCiAvKiBBIHNldCBvZiBmdW5jdGlvbnMgdG8gc2VhcmNoIGRhdGFiYXNlcyBpbiB2YXJpb3Vz
IGZvcm1hdHMuIEFuIG9wZW4KQEAgLTYzLDExICs2Myw5IEBACiAqLwogCiBpbnQKLXNlYXJjaF9m
aW5kdHlwZShjb25zdCB1c2NoYXIgKm5hbWUsIGludCBsZW4pCitzZWFyY2hfZmluZHR5cGUoY29u
c3QgdXNjaGFyICogbmFtZSwgaW50IGxlbikKIHsKLWludCBib3QgPSAwOwotaW50IHRvcCA9IGxv
b2t1cF9saXN0X2NvdW50Owotd2hpbGUgKHRvcCA+IGJvdCkKK2ZvciAoaW50IGJvdCA9IDAsIHRv
cCA9IGxvb2t1cF9saXN0X2NvdW50OyB0b3AgPiBib3Q7ICkKICAgewogICBpbnQgbWlkID0gKHRv
cCArIGJvdCkvMjsKICAgaW50IGMgPSBVc3RybmNtcChuYW1lLCBsb29rdXBfbGlzdFttaWRdLT5u
YW1lLCBsZW4pOwpAQCAtOTIsNyArOTAsNyBAQAogICBpZiAoYyA+IDApIGJvdCA9IG1pZCArIDE7
IGVsc2UgdG9wID0gbWlkOwogICB9CiAKLXNlYXJjaF9lcnJvcl9tZXNzYWdlID0gc3RyaW5nX3Nw
cmludGYoInVua25vd24gbG9va3VwIHR5cGUgXCIlLipzXCIiLGxlbixuYW1lKTsKK3NlYXJjaF9l
cnJvcl9tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoInVua25vd24gbG9va3VwIHR5cGUgXCIlLipz
XCIiLCBsZW4sIG5hbWUpOwogcmV0dXJuIC0xOwogfQogCkBAIC0yMTcsNiArMjE1LDU1IEBACiB9
CiAKIAorLyogU2V0IHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgdGhyZWUgZGlmZmVyZW50IGtpbmRz
IG9mIGxvb2t1cC4KK0FyZ3VtZW50czoKKyBzZWFyY2hfdHlwZQl0aGUgc2VhcmNoLXR5cGUgY29k
ZQorIHNlYXJjaAkJdGhlIHNlYXJjaC10eXBlIHN0cmluZworIHF1ZXJ5CQlhcmd1bWVudCBmb3Ig
dGhlIHNlYXJjaDsgZmlsZW5hbWUgb3IgcXVlcnkKKyBmbmFtZXAJCXBvaW50ZXIgdG8gcmV0dXJu
IGZpbGVuYW1lCisgb3B0cwkJb3B0aW9ucworCitSZXR1cm46CWtleXF1ZXJ5CXRoZSBzZWFyY2gt
dHlwZSAoZm9yIHNpbmdsZS1rZXkpIG9yIHF1ZXJ5IChmb3IgcXVlcnktdHlwZSkKKyAqLwordXNj
aGFyICoKK3NlYXJjaF9hcmdzKGludCBzZWFyY2hfdHlwZSwgdXNjaGFyICogc2VhcmNoLCB1c2No
YXIgKiBxdWVyeSwgdXNjaGFyICoqIGZuYW1lcCwKKyAgY29uc3QgdXNjaGFyICogb3B0cykKK3sK
K1Vza2lwX3doaXRlc3BhY2UoJnF1ZXJ5KTsKK2lmIChtYWNfaXNsb29rdXAoc2VhcmNoX3R5cGUs
IGxvb2t1cF9hYnNmaWxlcXVlcnkpKQorICB7CQkJCQkvKiBxdWVyeS1zdHlsZSBidXQgd2l0aCBm
aWxlIChzcWxpdGUpICovCisgIGludCBzZXAgPSAnLCc7CisKKyAgLyogQ2hlY2sgb3B0aW9ucyBm
aXJzdCBmb3IgbmV3LXN0eWxlIGZpbGUgc3BlYyAqLworICBpZiAob3B0cykgZm9yICh1c2NoYXIg
KiBzOyBzID0gc3RyaW5nX25leHRpbmxpc3QoJm9wdHMsICZzZXAsIE5VTEwsIDApOyApCisgICAg
aWYgKFVzdHJuY21wKHMsICJmaWxlPSIsIDUpID09IDApCisgICAgICB7CisgICAgICAqZm5hbWVw
ID0gcys1OworICAgICAgcmV0dXJuIHF1ZXJ5OworICAgICAgfQorCisgIC8qIElmIG5vIGZpbGVu
YW1lIGZyb20gb3B0aW9ucywgdXNlIG9sZC10eWxlIHNwYWNlLXNlcCBwcmVmaXggb24gcXVlcnkg
Ki8KKyAgaWYgKCpxdWVyeSA9PSAnLycpCisgICAgeworICAgIHVzY2hhciAqIHMgPSBxdWVyeTsK
KyAgICB3aGlsZSAoKnF1ZXJ5ICYmICFpc3NwYWNlKCpxdWVyeSkpIHF1ZXJ5Kys7CisgICAgKmZu
YW1lcCA9IHN0cmluZ19jb3B5bihzLCBxdWVyeSAtIHMpOworICAgIFVza2lwX3doaXRlc3BhY2Uo
JnF1ZXJ5KTsKKyAgICB9CisgIGVsc2UKKyAgICAqZm5hbWVwID0gTlVMTDsKKyAgcmV0dXJuIHF1
ZXJ5OwkJLyogcmVtYWluZGVyIGFmdGVyIGZpbGUgc2tpcHBlZCAqLworICB9CitpZiAoIW1hY19p
c2xvb2t1cChzZWFyY2hfdHlwZSwgbG9va3VwX3F1ZXJ5c3R5bGUpKQorICB7CQkJCQkvKiBzaW5n
bGUta2V5ICovCisgICpmbmFtZXAgPSBxdWVyeTsKKyAgcmV0dXJuIHNlYXJjaDsJLyogbW9kaWZp
ZXJzIGltcG9ydGFudCBzbyB1c2UgImtleXF1ZXJ5IiBmb3IgdGhlbSAqLworICB9CisqZm5hbWVw
ID0gTlVMTDsJCQkJLyogZWxzZSBxdWVyeS1zdHlsZSAqLworcmV0dXJuIHF1ZXJ5OworfQorCisK
IAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICog
ICAgICAgICAgICAgICBSZWxlYXNlIGNhY2hlZCByZXNvdXJjZXMgICAgICAgICAqCkBAIC00Mjks
OCArNDc2LDggQEAKIAogaWYgKCF0KQogICB7Ci0gIHQgPSBzdG9yZV9nZXQoc2l6ZW9mKHRyZWVf
bm9kZSkgKyBVc3RybGVuKGtleWJ1ZmZlciksIEZBTFNFKTsKLSAgdC0+ZGF0YS5wdHIgPSBjID0g
c3RvcmVfZ2V0KHNpemVvZihzZWFyY2hfY2FjaGUpLCBGQUxTRSk7CisgIHQgPSBzdG9yZV9nZXQo
c2l6ZW9mKHRyZWVfbm9kZSkgKyBVc3RybGVuKGtleWJ1ZmZlciksIEdFVF9VTlRBSU5URUQpOwor
ICB0LT5kYXRhLnB0ciA9IGMgPSBzdG9yZV9nZXQoc2l6ZW9mKHNlYXJjaF9jYWNoZSksIEdFVF9V
TlRBSU5URUQpOwogICBjLT5pdGVtX2NhY2hlID0gTlVMTDsKICAgVXN0cmNweSh0LT5uYW1lLCBr
ZXlidWZmZXIpOwogICB0cmVlX2luc2VydG5vZGUoJnNlYXJjaF90cmVlLCB0KTsKQEAgLTQ2Miw2
ICs1MDksNyBAQAogICAgICAgICAgICAgICAgTlVMTCBmb3IgcXVlcnktc3R5bGUgc2VhcmNoZXMK
ICAga2V5c3RyaW5nICAgIHRoZSBrZXlzdHJpbmcgZm9yIHNpbmdsZS1rZXkrZmlsZSBsb29rdXBz
LCBvcgogICAgICAgICAgICAgICAgdGhlIHF1ZXJ5c3RyaW5nIGZvciBxdWVyeS1zdHlsZSBsb29r
dXBzCisgIGNhY2hlX3JkICAgICBGQUxTRSB0byBhdm9pZCBsb29rdXAgaW4gY2FjaGUgbGF5ZXIK
ICAgb3B0cwkgICAgICAgdHlwZS1zcGVjaWZpYyBvcHRpb25zCiAKIFJldHVybnM6ICAgICAgIGEg
cG9pbnRlciB0byBhIGR5bmFtaWMgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGFuc3dlciwKQEAgLTQ3
Miw3ICs1MjAsNyBAQAogCiBzdGF0aWMgdXNjaGFyICoKIGludGVybmFsX3NlYXJjaF9maW5kKHZv
aWQgKiBoYW5kbGUsIGNvbnN0IHVzY2hhciAqIGZpbGVuYW1lLCB1c2NoYXIgKiBrZXlzdHJpbmcs
Ci0gIGNvbnN0IHVzY2hhciAqIG9wdHMpCisgIEJPT0wgY2FjaGVfcmQsIGNvbnN0IHVzY2hhciAq
IG9wdHMpCiB7CiB0cmVlX25vZGUgKiB0ID0gKHRyZWVfbm9kZSAqKWhhbmRsZTsKIHNlYXJjaF9j
YWNoZSAqIGMgPSAoc2VhcmNoX2NhY2hlICopKHQtPmRhdGEucHRyKTsKQEAgLTUwMSwxMSArNTQ5
LDEzIEBACiBzdG9yZV9wb29sID0gUE9PTF9TRUFSQ0g7CiAKIC8qIExvb2sgdXAgdGhlIGRhdGEg
Zm9yIHRoZSBrZXksIHVubGVzcyBpdCBpcyBhbHJlYWR5IGluIHRoZSBjYWNoZSBmb3IgdGhpcwot
ZmlsZS4gTm8gbmVlZCB0byBjaGVjayBjLT5pdGVtX2NhY2hlIGZvciBOVUxMLCB0cmVlX3NlYXJj
aCB3aWxsIGRvIHNvLiAqLworZmlsZS4gTm8gbmVlZCB0byBjaGVjayBjLT5pdGVtX2NhY2hlIGZv
ciBOVUxMLCB0cmVlX3NlYXJjaCB3aWxsIGRvIHNvLiBDaGVjaword2hldGhlciB3ZSB3YW50IHRv
IHVzZSB0aGUgY2FjaGUgZW50cnkgbGFzdCBzbyB0aGF0IHdlIGNhbiBhbHdheXMgcmVwbGFjZSBp
dC4gKi8KIAogaWYgKCAgKHQgPSB0cmVlX3NlYXJjaChjLT5pdGVtX2NhY2hlLCBrZXlzdHJpbmcp
KQogICAgJiYgKCEoZSA9IHQtPmRhdGEucHRyKS0+ZXhwaXJ5IHx8IGUtPmV4cGlyeSA+IHRpbWUo
TlVMTCkpCiAgICAmJiAoIW9wdHMgJiYgIWUtPm9wdHMgIHx8ICBvcHRzICYmIGUtPm9wdHMgJiYg
VXN0cmNtcChvcHRzLCBlLT5vcHRzKSA9PSAwKQorICAgJiYgY2FjaGVfcmQKICAgICkKICAgeyAv
KiBEYXRhIHdhcyBpbiB0aGUgY2FjaGUgYWxyZWFkeTsgc2V0IHRoZSBwb2ludGVyIGZyb20gdGhl
IHRyZWUgbm9kZSAqLwogICBkYXRhID0gZS0+ZGF0YS5wdHI7CkBAIC01MjIsMTEgKzU3Miw1MyBA
QAogICAgIHsKICAgICBpZiAodCkKICAgICAgIGRlYnVnX3ByaW50Zl9pbmRlbnQoImNhY2hlZCBk
YXRhIGZvdW5kIGJ1dCAlczsgIiwKLQllLT5leHBpcnkgJiYgZS0+ZXhwaXJ5IDw9IHRpbWUoTlVM
TCkgPyAib3V0LW9mLWRhdGUiIDogIndyb25nIG9wdHMiKTsKKwllLT5leHBpcnkgJiYgZS0+ZXhw
aXJ5IDw9IHRpbWUoTlVMTCkgPyAib3V0LW9mLWRhdGUiCisJOiBjYWNoZV9yZCA/ICJ3cm9uZyBv
cHRzIiA6ICJub19yZCBvcHRpb24gc2V0Iik7CiAgICAgZGVidWdfcHJpbnRmX2luZGVudCgiJXMg
bG9va3VwIHJlcXVpcmVkIGZvciAlcyVzJXNcbiIsCiAgICAgICBmaWxlbmFtZSA/IFVTImZpbGUi
IDogVVMiZGF0YWJhc2UiLAogICAgICAga2V5c3RyaW5nLAogICAgICAgZmlsZW5hbWUgPyBVUyJc
biAgaW4gIiA6IFVTIiIsIGZpbGVuYW1lID8gZmlsZW5hbWUgOiBVUyIiKTsKKyAgICBpZiAoIWZp
bGVuYW1lICYmIGlzX3RhaW50ZWQoa2V5c3RyaW5nKSkKKyAgICAgIHsKKyAgICAgIGRlYnVnX3By
aW50Zl9pbmRlbnQoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7CisgICAgICBkZWJ1
Z19wcmludF90YWludChrZXlzdHJpbmcpOworICAgICAgfQorICAgIH0KKworICAvKiBDaGVjayB0
aGF0IHRoZSBxdWVyeSwgZm9yIHF1ZXJ5LXN0eWxlIGxvb2t1cHMsCisgIGlzIGVpdGhlciB1bnRh
aW50ZWQgb3IgcHJvcGVybHkgcXVvdGVkIGZvciB0aGUgbG9va3VwIHR5cGUuCisKKyAgWFhYIFNo
b3VsZCB3ZSB0aGlzIG1vdmUgaW50byBsZl9zcWxwZXJmb3JtKCkgPyAgVGhlIHNlcnZlci10YWlu
dCBjaGVjayBpcyB0aGVyZS4KKyAgKi8KKworICBpZiAoICAhZmlsZW5hbWUgJiYgbG9va3VwX2xp
c3Rbc2VhcmNoX3R5cGVdLT5xdW90ZQorICAgICAmJiBpc190YWludGVkKGtleXN0cmluZykgJiYg
IWlzX3F1b3RlZF9saWtlKGtleXN0cmluZywgc2VhcmNoX3R5cGUpKQorICAgIHsKKyAgICB1c2No
YXIgKiBzID0gYWNsX2N1cnJlbnRfdmVyYigpOworICAgIGlmICghcykgcyA9IGF1dGhlbnRpY2F0
b3JfY3VycmVudF9uYW1lKCk7CS8qIG11c3QgYmUgYmVmb3JlIHRyYW5zcG9ydCAqLworICAgIGlm
ICghcykgcyA9IHRyYW5zcG9ydF9jdXJyZW50X25hbWUoKTsJLyogbXVzdCBiZSBiZWZvcmUgcm91
dGVyICovCisgICAgaWYgKCFzKSBzID0gcm91dGVyX2N1cnJlbnRfbmFtZSgpOwkvKiBHQ0MgPzog
d291bGQgYmUgZ29vZCwgYnV0IG5vdCBpbiBjbGFuZyAqLworICAgIGlmICghcykgcyA9IFVTIiI7
CisjaWZkZWYgZW5mb3JjZV9xdW90ZV9wcm90ZWN0aW9uX25vdHlldAorICAgIHNlYXJjaF9lcnJv
cl9tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoCisgICAgICAidGFpbnRlZCBzZWFyY2ggcXVlcnkg
aXMgbm90IHByb3Blcmx5IHF1b3RlZCVzOiAlcyVzIiwKKyAgICAgIHMsIGtleXN0cmluZyk7Cisg
ICAgZi5zZWFyY2hfZmluZF9kZWZlciA9IFRSVUU7CisjZWxzZQorICAgICB7CisgICAgICBpbnQg
cSA9IHF1b3Rlcl9mb3JfYWRkcmVzcyhrZXlzdHJpbmcpOworICAgICAgLyogSWYgd2UncmUgY2Fs
bGVkIGZyb20gYSB0cmFuc3BvcnQsIG5vIHByaXZzIHRvIG9wZW4gdGhlIHBhbmljbG9nOworICAg
ICAgdGhlIGxvZ2dpbmcgcHVudHMgdG8gdXNpbmcgc3RkZXJyIC0gYW5kIHRoYXQgc2VlbXMgdG8g
c3RvcCB0aGUgZGVidWcKKyAgICAgIHN0cmVhbS4gKi8KKyAgICAgIGxvZ193cml0ZSgwLAorCXRy
YW5zcG9ydF9uYW1lID8gTE9HX01BSU4gOiBMT0dfTUFJTnxMT0dfUEFOSUMsCisJInRhaW50ZWQg
c2VhcmNoIHF1ZXJ5IGlzIG5vdCBwcm9wZXJseSBxdW90ZWQlczogJXMiLCBzLCBrZXlzdHJpbmcp
OworCisgICAgICBERUJVRyhEX2xvb2t1cCkgZGVidWdfcHJpbnRmX2luZGVudCgic2VhcmNoX3R5
cGUgJWQgKCVzKSBxdW90aW5nICVkICglcylcbiIsCisJc2VhcmNoX3R5cGUsIGxvb2t1cF9saXN0
W3NlYXJjaF90eXBlXS0+bmFtZSwKKwlxLCBpc19yZWFsX3F1b3RlcihxKSA/IGxvb2t1cF9saXN0
W3FdLT5uYW1lIDogVVMibm9uZSIpOworICAgICB9CisjZW5kaWYKICAgICB9CiAKICAgLyogQ2Fs
bCB0aGUgY29kZSBmb3IgdGhlIGRpZmZlcmVudCBraW5kcyBvZiBzZWFyY2guIERFRkVSIGlzIGhh
bmRsZWQKQEAgLTUzNCwyMSArNjI2LDI2IEBACiAgIGRpc3Rpbmd1aXNoIGlmIG5lY2Vzc2FyeS4g
Ki8KIAogICBpZiAobG9va3VwX2xpc3Rbc2VhcmNoX3R5cGVdLT5maW5kKGMtPmhhbmRsZSwgZmls
ZW5hbWUsIGtleXN0cmluZywga2V5bGVuZ3RoLAotICAgICAgJmRhdGEsICZzZWFyY2hfZXJyb3Jf
bWVzc2FnZSwgJmRvX2NhY2hlLCBvcHRzKSA9PSBERUZFUikKKwkgICZkYXRhLCAmc2VhcmNoX2Vy
cm9yX21lc3NhZ2UsICZkb19jYWNoZSwgb3B0cykgPT0gREVGRVIpCiAgICAgZi5zZWFyY2hfZmlu
ZF9kZWZlciA9IFRSVUU7CiAKICAgLyogQSByZWNvcmQgdGhhdCBoYXMgYmVlbiBmb3VuZCBpcyBu
b3cgaW4gZGF0YSwgd2hpY2ggaXMgZWl0aGVyIE5VTEwKICAgb3IgcG9pbnRzIHRvIGEgYml0IG9m
IGR5bmFtaWMgc3RvcmUuIENhY2hlIHRoZSByZXN1bHQgb2YgdGhlIGxvb2t1cCBpZgogICBjYWNo
aW5nIGlzIHBlcm1pdHRlZC4gTG9va3VwcyBjYW4gZGlzYWJsZSBjYWNoaW5nLCB3aGVuIHRoZXkg
ZGlkIHNvbWV0aGluZwogICB0aGF0IGNoYW5nZXMgdGhlaXIgZGF0YS4gVGhlIG15c3FsIGFuZCBw
Z3NxbCBsb29rdXBzIGRvIHRoaXMgd2hlbiBhbgotICBVUERBVEUvSU5TRVJUIHF1ZXJ5IHdhcyBl
eGVjdXRlZC4gKi8KKyAgVVBEQVRFL0lOU0VSVCBxdWVyeSB3YXMgZXhlY3V0ZWQuICBMb29rdXBz
IGNhbiBhbHNvIHNldCBhIFRUTCBmb3IgdGhlCisgIGNhY2hlIGVudHJ5OyB0aGUgZG5zZGIgbG9v
a3VwIGRvZXMuCisgIEZpbmFsbHksIHRoZSBjYWxsZXIgY2FuIHJlcXVlc3Qgbm8gY2FjaGluZyBi
eSBzZXR0aW5nIGFuIG9wdGlvbi4gKi8KIAogICBlbHNlIGlmIChkb19jYWNoZSkKICAgICB7Cisg
ICAgREVCVUcoRF9sb29rdXApIGRlYnVnX3ByaW50Zl9pbmRlbnQoIiVzIGNhY2hlIGVudHJ5XG4i
LAorICAgICAgdCA/ICJyZXBsYWNpbmcgb2xkIiA6ICJjcmVhdGluZyBuZXciKTsKICAgICBpZiAo
IXQpCS8qIE5vIGV4aXN0aW5nIGVudHJ5LiAgQ3JlYXRlIG5ldyBvbmUuICovCiAgICAgICB7CiAg
ICAgICBpbnQgbGVuID0ga2V5bGVuZ3RoICsgMTsKLSAgICAgIGUgPSBzdG9yZV9nZXQoc2l6ZW9m
KGV4cGlyaW5nX2RhdGEpICsgc2l6ZW9mKHRyZWVfbm9kZSkgKyBsZW4sIGlzX3RhaW50ZWQoa2V5
c3RyaW5nKSk7CisgICAgICAvKiBUaGUgY2FjaGUgbm9kZSB2YWx1ZSBzaG91bGQgbmV2ZXIgYmUg
ZXhwYW5kZWQgc28gdXNlIHRhaW50ZWQgbWVtICovCisgICAgICBlID0gc3RvcmVfZ2V0KHNpemVv
ZihleHBpcmluZ19kYXRhKSArIHNpemVvZih0cmVlX25vZGUpICsgbGVuLCBHRVRfVEFJTlRFRCk7
CiAgICAgICB0ID0gKHRyZWVfbm9kZSAqKShlKzEpOwogICAgICAgbWVtY3B5KHQtPm5hbWUsIGtl
eXN0cmluZywgbGVuKTsKICAgICAgIHQtPmRhdGEucHRyID0gZTsKQEAgLTU2MSw4ICs2NTgsOCBA
QAogICAgIGUtPmRhdGEucHRyID0gZGF0YTsKICAgICB9CiAKLSAgLyogSWYgY2FjaGluZyB3YXMg
ZGlzYWJsZWQsIGVtcHR5IHRoZSBjYWNoZSB0cmVlLiBXZSBqdXN0IHNldCB0aGUgY2FjaGUKLSAg
cG9pbnRlciB0byBOVUxMIGhlcmUsIGJlY2F1c2Ugd2UgY2Fubm90IHJlbGVhc2UgdGhlIHN0b3Jl
IGF0IHRoaXMgc3RhZ2UuICovCisvKiBJZiBjYWNoaW5nIHdhcyBkaXNhYmxlZCwgZW1wdHkgdGhl
IGNhY2hlIHRyZWUuIFdlIGp1c3Qgc2V0IHRoZSBjYWNoZQorcG9pbnRlciB0byBOVUxMIGhlcmUs
IGJlY2F1c2Ugd2UgY2Fubm90IHJlbGVhc2UgdGhlIHN0b3JlIGF0IHRoaXMgc3RhZ2UuICovCiAK
ICAgZWxzZQogICAgIHsKQEAgLTYyMSw5ICs3MTgsOSBAQAogICBpbnQgcGFydGlhbCwgY29uc3Qg
dXNjaGFyICogYWZmaXgsIGludCBhZmZpeGxlbiwgaW50IHN0YXJmbGFncywKICAgaW50ICogZXhw
YW5kX3NldHVwLCBjb25zdCB1c2NoYXIgKiBvcHRzKQogewotdHJlZV9ub2RlICp0ID0gKHRyZWVf
bm9kZSAqKWhhbmRsZTsKLUJPT0wgc2V0X251bGxfd2lsZCA9IEZBTFNFOwotdXNjaGFyICp5aWVs
ZDsKK3RyZWVfbm9kZSAqIHQgPSAodHJlZV9ub2RlICopaGFuZGxlOworQk9PTCBzZXRfbnVsbF93
aWxkID0gRkFMU0UsIGNhY2hlX3JkID0gVFJVRSwgcmV0X2tleSA9IEZBTFNFOwordXNjaGFyICog
eWllbGQ7CiAKIERFQlVHKERfbG9va3VwKQogICB7CkBAIC02MzYsNiArNzMzLDIzIEBACiAKICAg
fQogCisvKiBQYXJzZSBnbG9iYWwgbG9va3VwIG9wdGlvbnMuIEFsc28sIGNyZWF0ZSBhIG5ldyBv
cHRpb25zIGxpc3Qgd2l0aAordGhlIGdsb2JhbCBvcHRpb25zIGRyb3BwZWQgc28gdGhhdCB0aGUg
Y2FjaGUtbW9kaWZpZXJzIGFyZSBub3QKK3VzZWQgaW4gdGhlIGNhY2hlIGtleS4gKi8KKworaWYg
KG9wdHMpCisgIHsKKyAgaW50IHNlcCA9ICcsJzsKKyAgZ3N0cmluZyAqIGcgPSBOVUxMOworCisg
IGZvciAodXNjaGFyICogZWxlOyBlbGUgPSBzdHJpbmdfbmV4dGlubGlzdCgmb3B0cywgJnNlcCwg
TlVMTCwgMCk7ICkKKyAgICBpZiAoVXN0cmNtcChlbGUsICJyZXQ9a2V5IikgPT0gMCkgcmV0X2tl
eSA9IFRSVUU7CisgICAgZWxzZSBpZiAoVXN0cmNtcChlbGUsICJjYWNoZT1ub19yZCIpID09IDAp
IGNhY2hlX3JkID0gRkFMU0U7CisgICAgZWxzZSBnID0gc3RyaW5nX2FwcGVuZF9saXN0ZWxlKGcs
ICcsJywgZWxlKTsKKworICBvcHRzID0gc3RyaW5nX2Zyb21fZ3N0cmluZyhnKTsKKyAgfQorCiAv
KiBBcnJhbmdlIHRvIHB1dCB0aGlzIGRhdGFiYXNlIGF0IHRoZSB0b3Agb2YgdGhlIExSVSBjaGFp
biBpZiBpdCBpcyBhIHR5cGUKIHRoYXQgb3BlbnMgcmVhbCBmaWxlcy4gKi8KIApAQCAtNjgzLDcg
Kzc5Nyw3IEBACiAvKiBGaXJzdCBvZiBhbGwsIHRyeSB0byBtYXRjaCB0aGUga2V5IHN0cmluZyB2
ZXJiYXRpbS4gSWYgbWF0Y2hlZCBhIGNvbXBsZXRlCiBlbnRyeSBidXQgY291bGQgaGF2ZSBiZWVu
IHBhcnRpYWwsIGZsYWcgdG8gc2V0IHVwIHZhcmlhYmxlcy4gKi8KIAoteWllbGQgPSBpbnRlcm5h
bF9zZWFyY2hfZmluZChoYW5kbGUsIGZpbGVuYW1lLCBrZXlzdHJpbmcsIG9wdHMpOworeWllbGQg
PSBpbnRlcm5hbF9zZWFyY2hfZmluZChoYW5kbGUsIGZpbGVuYW1lLCBrZXlzdHJpbmcsIGNhY2hl
X3JkLCBvcHRzKTsKIGlmIChmLnNlYXJjaF9maW5kX2RlZmVyKSByZXR1cm4gTlVMTDsKIAogaWYg
KHlpZWxkKSB7IGlmIChwYXJ0aWFsID49IDApIHNldF9udWxsX3dpbGQgPSBUUlVFOyB9CkBAIC03
MDQsMTEgKzgxOCwxMSBAQAogICBpZiAoYWZmaXhsZW4gPT0gMCkga2V5c3RyaW5nMiA9IGtleXN0
cmluZzsgZWxzZQogICAgIHsKICAgICBrZXlzdHJpbmcyID0gc3RvcmVfZ2V0KGxlbiArIGFmZml4
bGVuICsgMSwKLQkJCWlzX3RhaW50ZWQoa2V5c3RyaW5nKSB8fCBpc190YWludGVkKGFmZml4KSk7
CisJICBpc190YWludGVkKGtleXN0cmluZykgfHwgaXNfdGFpbnRlZChhZmZpeCkgPyBHRVRfVEFJ
TlRFRCA6IEdFVF9VTlRBSU5URUQpOwogICAgIFVzdHJuY3B5KGtleXN0cmluZzIsIGFmZml4LCBh
ZmZpeGxlbik7CiAgICAgVXN0cmNweShrZXlzdHJpbmcyICsgYWZmaXhsZW4sIGtleXN0cmluZyk7
CiAgICAgREVCVUcoRF9sb29rdXApIGRlYnVnX3ByaW50Zl9pbmRlbnQoInRyeWluZyBwYXJ0aWFs
IG1hdGNoICVzXG4iLCBrZXlzdHJpbmcyKTsKLSAgICB5aWVsZCA9IGludGVybmFsX3NlYXJjaF9m
aW5kKGhhbmRsZSwgZmlsZW5hbWUsIGtleXN0cmluZzIsIG9wdHMpOworICAgIHlpZWxkID0gaW50
ZXJuYWxfc2VhcmNoX2ZpbmQoaGFuZGxlLCBmaWxlbmFtZSwga2V5c3RyaW5nMiwgY2FjaGVfcmQs
IG9wdHMpOwogICAgIGlmIChmLnNlYXJjaF9maW5kX2RlZmVyKSByZXR1cm4gTlVMTDsKICAgICB9
CiAKQEAgLTc0Niw3ICs4NjAsOCBAQAogICAgICAgICB9CiAKICAgICAgIERFQlVHKERfbG9va3Vw
KSBkZWJ1Z19wcmludGZfaW5kZW50KCJ0cnlpbmcgcGFydGlhbCBtYXRjaCAlc1xuIiwga2V5c3Ry
aW5nMyk7Ci0gICAgICB5aWVsZCA9IGludGVybmFsX3NlYXJjaF9maW5kKGhhbmRsZSwgZmlsZW5h
bWUsIGtleXN0cmluZzMsIG9wdHMpOworICAgICAgeWllbGQgPSBpbnRlcm5hbF9zZWFyY2hfZmlu
ZChoYW5kbGUsIGZpbGVuYW1lLCBrZXlzdHJpbmczLAorCQljYWNoZV9yZCwgb3B0cyk7CiAgICAg
ICBpZiAoZi5zZWFyY2hfZmluZF9kZWZlcikgcmV0dXJuIE5VTEw7CiAgICAgICBpZiAoeWllbGQp
CiAgICAgICAgIHsKQEAgLTc4Nyw3ICs5MDIsNyBAQAogICAgICphdGF0ID0gJyonOwogCiAgICAg
REVCVUcoRF9sb29rdXApIGRlYnVnX3ByaW50Zl9pbmRlbnQoInRyeWluZyBkZWZhdWx0IG1hdGNo
ICVzXG4iLCBhdGF0KTsKLSAgICB5aWVsZCA9IGludGVybmFsX3NlYXJjaF9maW5kKGhhbmRsZSwg
ZmlsZW5hbWUsIGF0YXQsIG9wdHMpOworICAgIHlpZWxkID0gaW50ZXJuYWxfc2VhcmNoX2ZpbmQo
aGFuZGxlLCBmaWxlbmFtZSwgYXRhdCwgY2FjaGVfcmQsIG9wdHMpOwogICAgICphdGF0ID0gc2F2
ZWNoYXI7CiAgICAgaWYgKGYuc2VhcmNoX2ZpbmRfZGVmZXIpIHJldHVybiBOVUxMOwogCkBAIC04
MTAsNyArOTI1LDcgQEAKIGlmICgheWllbGQgICYmICBzdGFyZmxhZ3MgJiAoU0VBUkNIX1NUQVJ8
U0VBUkNIX1NUQVJBVCkpCiAgIHsKICAgREVCVUcoRF9sb29rdXApIGRlYnVnX3ByaW50Zl9pbmRl
bnQoInRyeWluZyB0byBtYXRjaCAqXG4iKTsKLSAgeWllbGQgPSBpbnRlcm5hbF9zZWFyY2hfZmlu
ZChoYW5kbGUsIGZpbGVuYW1lLCBVUyIqIiwgb3B0cyk7CisgIHlpZWxkID0gaW50ZXJuYWxfc2Vh
cmNoX2ZpbmQoaGFuZGxlLCBmaWxlbmFtZSwgVVMiKiIsIGNhY2hlX3JkLCBvcHRzKTsKICAgaWYg
KHlpZWxkICYmIGV4cGFuZF9zZXR1cCAmJiAqZXhwYW5kX3NldHVwID49IDApCiAgICAgewogICAg
ICpleHBhbmRfc2V0dXAgKz0gMTsKQEAgLTg0MywxNyArOTU4LDggQEAKIHRoYW4gdGhlIHJlc3Vs
dC4gIFJldHVybiBhIGRlLXRhaW50ZWQgdmVyc2lvbiBvZiB0aGUga2V5IG9uIHRoZSBncm91bmRz
IHRoYXQKIGl0IGhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdGhlIGxvb2t1cC4gKi8KIAotaWYgKHlp
ZWxkICYmIG9wdHMpCi0gIHsKLSAgaW50IHNlcCA9ICcsJzsKLSAgZm9yICh1c2NoYXIgKiBlbGU7
IGVsZSA9IHN0cmluZ19uZXh0aW5saXN0KCZvcHRzLCAmc2VwLCBOVUxMLCAwKTsgKQotICAgIGlm
IChVc3RyY21wKGVsZSwgInJldD1rZXkiKSA9PSAwKQotICAgICAgewotICAgICAgREVCVUcoRF9s
b29rdXApIGRlYnVnX3ByaW50Zl9pbmRlbnQoImxvb2t1cCByZXQ9a2V5OiAlc1xuIiwga2V5c3Ry
aW5nKTsKLSAgICAgIHlpZWxkID0gc3RyaW5nX2NvcHlfdGFpbnQoa2V5c3RyaW5nLCBGQUxTRSk7
Ci0gICAgICBicmVhazsKLSAgICAgIH0KLSAgfQoraWYgKHlpZWxkICYmIHJldF9rZXkpCisgIHlp
ZWxkID0gc3RyaW5nX2NvcHlfdGFpbnQoa2V5c3RyaW5nLCBHRVRfVU5UQUlOVEVEKTsKIAogcmV0
dXJuIHlpZWxkOwogfQpkaWZmIC11ciBleGltLm9yaWcvc3JjL3NpZXZlLmMgZXhpbS9zcmMvc2ll
dmUuYwotLS0gZXhpbS5vcmlnL3NyYy9zaWV2ZS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAw
MDAwICswMzAwCisrKyBleGltL3NyYy9zaWV2ZS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAw
MDAwICswMzAwCkBAIC0yLDggKzIsOSBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwg
dHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCiAKLS8qIENvcHlyaWdodCAoYykgTWljaGFlbCBIYWFyZHQgMjAwMyAt
IDIwMTUKLSAqIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNiAtIDIwMjAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMTYgLSAyMDIyCisg
KiBDb3B5cmlnaHQgKGMpIE1pY2hhZWwgSGFhcmR0IDIwMDMgLSAyMDE1CiAgKiBTZWUgdGhlIGZp
bGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLgogICovCiAK
QEAgLTU0LDcgKzU1LDcgQEAKIAogc3RydWN0IFNpZXZlCiAgIHsKLSAgdXNjaGFyICpmaWx0ZXI7
CisgIGNvbnN0IHVzY2hhciAqZmlsdGVyOwogICBjb25zdCB1c2NoYXIgKnBjOwogICBpbnQgbGlu
ZTsKICAgY29uc3QgdXNjaGFyICplcnJtc2c7CkBAIC03MSw3ICs3Miw3IEBACiAgIGludCByZXF1
aXJlX2Vub3RpZnk7CiAgIHN0cnVjdCBOb3RpZmljYXRpb24gKm5vdGlmaWVkOwogI2VuZGlmCi0g
IHVzY2hhciAqZW5vdGlmeV9tYWlsdG9fb3duZXI7CisgIGNvbnN0IHVzY2hhciAqZW5vdGlmeV9t
YWlsdG9fb3duZXI7CiAjaWZkZWYgU1VCQUREUkVTUwogICBpbnQgcmVxdWlyZV9zdWJhZGRyZXNz
OwogI2VuZGlmCkBAIC03OSw3ICs4MCw3IEBACiAgIGludCByZXF1aXJlX3ZhY2F0aW9uOwogICBp
bnQgdmFjYXRpb25fcmFuOwogI2VuZGlmCi0gIHVzY2hhciAqdmFjYXRpb25fZGlyZWN0b3J5Owor
ICBjb25zdCB1c2NoYXIgKnZhY2F0aW9uX2RpcmVjdG9yeTsKICAgY29uc3QgdXNjaGFyICpzdWJh
ZGRyZXNzOwogICBjb25zdCB1c2NoYXIgKnVzZXJhZGRyZXNzOwogICBpbnQgcmVxdWlyZV9jb3B5
OwpAQCAtMjQ1LDcgKzI0Niw3IEBACiAgICAgZHN0LT5sZW5ndGg9MDsKICAgZWxzZQogICAgIHsK
LSAgICBkc3QtPmNoYXJhY3RlciA9IHN0b3JlX2dldChkc3QtPmxlbmd0aCsxLCBpc190YWludGVk
KHNyYy0+Y2hhcmFjdGVyKSk7IC8qIHBsdXMgb25lIGZvciBcMCAqLworICAgIGRzdC0+Y2hhcmFj
dGVyID0gc3RvcmVfZ2V0KGRzdC0+bGVuZ3RoKzEsIHNyYy0+Y2hhcmFjdGVyKTsgLyogcGx1cyBv
bmUgZm9yIFwwICovCiAgICAgbmV3PWRzdC0+Y2hhcmFjdGVyOwogICAgIH0KICAgZm9yIChjb25z
dCB1c2NoYXIgKiBzdGFydCA9IHNyYy0+Y2hhcmFjdGVyLCAqIGVuZCA9IHN0YXJ0ICsgc3JjLT5s
ZW5ndGg7CkBAIC00NDQsMTYgKzQ0NSwxNiBAQAogICAgICAgICBmaWx0ZXItPmVycm1zZz1VUyJJ
bnZhbGlkIFVSSSBlbmNvZGluZyI7CiAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAg
ICAgbmV3PXN0b3JlX2dldChzaXplb2Yoc3RyaW5nX2l0ZW0pLCBGQUxTRSk7Ci0gICAgICBuZXct
PnRleHQgPSBzdG9yZV9nZXQodG8ubGVuZ3RoKzEsIGlzX3RhaW50ZWQodG8uY2hhcmFjdGVyKSk7
CisgICAgICBuZXcgPSBzdG9yZV9nZXQoc2l6ZW9mKHN0cmluZ19pdGVtKSwgR0VUX1VOVEFJTlRF
RCk7CisgICAgICBuZXctPnRleHQgPSBzdG9yZV9nZXQodG8ubGVuZ3RoKzEsIHRvLmNoYXJhY3Rl
cik7CiAgICAgICBpZiAodG8ubGVuZ3RoKSBtZW1jcHkobmV3LT50ZXh0LCB0by5jaGFyYWN0ZXIs
IHRvLmxlbmd0aCk7Ci0gICAgICBuZXctPnRleHRbdG8ubGVuZ3RoXT0nXDAnOwotICAgICAgbmV3
LT5uZXh0PSpyZWNpcGllbnQ7Ci0gICAgICAqcmVjaXBpZW50PW5ldzsKKyAgICAgIG5ldy0+dGV4
dFt0by5sZW5ndGhdID0gJ1wwJzsKKyAgICAgIG5ldy0+bmV4dCA9ICpyZWNpcGllbnQ7CisgICAg
ICAqcmVjaXBpZW50ID0gbmV3OwogICAgICAgfQogICAgIGVsc2UKICAgICAgIHsKLSAgICAgIGZp
bHRlci0+ZXJybXNnPVVTIk1pc3NpbmcgYWRkci1zcGVjIGluIFVSSSI7CisgICAgICBmaWx0ZXIt
PmVycm1zZyA9IFVTIk1pc3NpbmcgYWRkci1zcGVjIGluIFVSSSI7CiAgICAgICByZXR1cm4gLTE7
CiAgICAgICB9CiAgICAgaWYgKCp1cmk9PSclJykgdXJpKz0zOwpAQCAtNTAyLDggKzUwMyw4IEBA
CiAgICAgICB9CiAgICAgaWYgKGhuYW1lLmxlbmd0aD09MiAmJiBzdHJjbXBpYyhobmFtZS5jaGFy
YWN0ZXIsIFVTInRvIik9PTApCiAgICAgICB7Ci0gICAgICBuZXc9c3RvcmVfZ2V0KHNpemVvZihz
dHJpbmdfaXRlbSksIEZBTFNFKTsKLSAgICAgIG5ldy0+dGV4dCA9IHN0b3JlX2dldChodmFsdWUu
bGVuZ3RoKzEsIGlzX3RhaW50ZWQoaHZhbHVlLmNoYXJhY3RlcikpOworICAgICAgbmV3PXN0b3Jl
X2dldChzaXplb2Yoc3RyaW5nX2l0ZW0pLCBHRVRfVU5UQUlOVEVEKTsKKyAgICAgIG5ldy0+dGV4
dCA9IHN0b3JlX2dldChodmFsdWUubGVuZ3RoKzEsIGh2YWx1ZS5jaGFyYWN0ZXIpOwogICAgICAg
aWYgKGh2YWx1ZS5sZW5ndGgpIG1lbWNweShuZXctPnRleHQsIGh2YWx1ZS5jaGFyYWN0ZXIsIGh2
YWx1ZS5sZW5ndGgpOwogICAgICAgbmV3LT50ZXh0W2h2YWx1ZS5sZW5ndGhdPSdcMCc7CiAgICAg
ICBuZXctPm5leHQ9KnJlY2lwaWVudDsKQEAgLTE3MjksNyArMTczMCw3IEBACiAgICAgICBzdHJ1
Y3QgU3RyaW5nICpuZXc7CiAKICAgICAgIGRhdGFDYXBhY2l0eSA9IGRhdGFDYXBhY2l0eSA/IGRh
dGFDYXBhY2l0eSAqIDIgOiA0OwotICAgICAgbmV3ID0gc3RvcmVfZ2V0KHNpemVvZihzdHJ1Y3Qg
U3RyaW5nKSAqIGRhdGFDYXBhY2l0eSwgRkFMU0UpOworICAgICAgbmV3ID0gc3RvcmVfZ2V0KHNp
emVvZihzdHJ1Y3QgU3RyaW5nKSAqIGRhdGFDYXBhY2l0eSwgR0VUX1VOVEFJTlRFRCk7CiAKICAg
ICAgIGlmIChkKSBtZW1jcHkobmV3LGQsc2l6ZW9mKHN0cnVjdCBTdHJpbmcpKmRhdGFMZW5ndGgp
OwogICAgICAgZCA9IG5ldzsKQEAgLTE3NjcsNyArMTc2OCw3IEBACiAgIH0KIGVsc2UgLyogc2lu
Z2xlIHN0cmluZyAqLwogICB7Ci0gIGlmICghKGQ9c3RvcmVfZ2V0KHNpemVvZihzdHJ1Y3QgU3Ry
aW5nKSoyLCBGQUxTRSkpKQorICBpZiAoIShkPXN0b3JlX2dldChzaXplb2Yoc3RydWN0IFN0cmlu
ZykqMiwgR0VUX1VOVEFJTlRFRCkpKQogICAgIHJldHVybiAtMTsKIAogICBtPXBhcnNlX3N0cmlu
ZyhmaWx0ZXIsJmRbMF0pOwpAQCAtMzA3Myw3ICszMDc0LDcgQEAKICAgICAgICAgaWYgKCFhbHJl
YWR5KQogICAgICAgICAgIC8qIE5ldyBub3RpZmljYXRpb24sIHByb2Nlc3MgaXQgKi8KICAgICAg
ICAgICB7Ci0gICAgICAgICAgc3RydWN0IE5vdGlmaWNhdGlvbiAqIHNlbnQgPSBzdG9yZV9nZXQo
c2l6ZW9mKHN0cnVjdCBOb3RpZmljYXRpb24pLCBGQUxTRSk7CisgICAgICAgICAgc3RydWN0IE5v
dGlmaWNhdGlvbiAqIHNlbnQgPSBzdG9yZV9nZXQoc2l6ZW9mKHN0cnVjdCBOb3RpZmljYXRpb24p
LCBHRVRfVU5UQUlOVEVEKTsKICAgICAgICAgICBzZW50LT5tZXRob2Q9bWV0aG9kOwogICAgICAg
ICAgIHNlbnQtPmltcG9ydGFuY2U9aW1wb3J0YW5jZTsKICAgICAgICAgICBzZW50LT5tZXNzYWdl
PW1lc3NhZ2U7CkBAIC0zMDkzLDkgKzMwOTQsOSBAQAogCQk/IGV4cGFuZF9zdHJpbmcoVVMiJGxv
Y2FsX3BhcnRfcHJlZml4JGxvY2FsX3BhcnQkbG9jYWxfcGFydF9zdWZmaXhAJGRvbWFpbiIpCiAJ
CTogZnJvbS5jaGFyYWN0ZXIpOwogICAgICAgICAgICAgICBmb3IgKHN0cmluZ19pdGVtICogcCA9
IHJlY2lwaWVudDsgcDsgcD1wLT5uZXh0KQotCSAgICAgICAJZnByaW50ZihmLCJUbzogJXNcbiIs
cC0+dGV4dCk7Ci0gICAgICAgICAgICAgIGZwcmludGYoZiwiQXV0by1TdWJtaXR0ZWQ6IGF1dG8t
bm90aWZpZWQ7ICVzXG4iLGZpbHRlci0+ZW5vdGlmeV9tYWlsdG9fb3duZXIpOwotICAgICAgICAg
ICAgICBpZiAoaGVhZGVyLmxlbmd0aD4wKSBmcHJpbnRmKGYsIiVzIixoZWFkZXIuY2hhcmFjdGVy
KTsKKwkgICAgICAgCWZwcmludGYoZiwgIlRvOiAlc1xuIixwLT50ZXh0KTsKKyAgICAgICAgICAg
ICAgZnByaW50ZihmLCAiQXV0by1TdWJtaXR0ZWQ6IGF1dG8tbm90aWZpZWQ7ICVzXG4iLCBmaWx0
ZXItPmVub3RpZnlfbWFpbHRvX293bmVyKTsKKyAgICAgICAgICAgICAgaWYgKGhlYWRlci5sZW5n
dGggPiAwKSBmcHJpbnRmKGYsICIlcyIsIGhlYWRlci5jaGFyYWN0ZXIpOwogICAgICAgICAgICAg
ICBpZiAobWVzc2FnZS5sZW5ndGg9PS0xKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBtZXNzYWdlLmNoYXJhY3Rlcj1VUyJOb3RpZmljYXRpb24iOwpAQCAtMzEwNSw3ICszMTA2
LDcgQEAKIAkJZnByaW50ZihmLCAiU3ViamVjdDogJXNcbiIsIHBhcnNlX3F1b3RlXzIwNDcobWVz
c2FnZS5jaGFyYWN0ZXIsCiAJCSAgbWVzc2FnZS5sZW5ndGgsIFVTInV0Zi04IiwgVFJVRSkpOwog
ICAgICAgICAgICAgICBmcHJpbnRmKGYsIlxuIik7Ci0gICAgICAgICAgICAgIGlmIChib2R5Lmxl
bmd0aD4wKSBmcHJpbnRmKGYsIiVzXG4iLGJvZHkuY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAg
aWYgKGJvZHkubGVuZ3RoID4gMCkgZnByaW50ZihmLCAiJXNcbiIsIGJvZHkuY2hhcmFjdGVyKTsK
ICAgICAgICAgICAgICAgZmZsdXNoKGYpOwogICAgICAgICAgICAgICAodm9pZClmY2xvc2UoZik7
CiAgICAgICAgICAgICAgICh2b2lkKWNoaWxkX2Nsb3NlKHBpZCwgMCk7CkBAIC0zMjEyLDkgKzMy
MTMsOSBAQAogICAgICAgICAgIH0KICAgICAgICAgZm9yIChzdHJ1Y3QgU3RyaW5nICogYSA9IGFk
ZHJlc3NlczsgYS0+bGVuZ3RoICE9IC0xOyArK2EpCiAgICAgICAgICAgewotICAgICAgICAgIHN0
cmluZ19pdGVtICogbmV3ID0gc3RvcmVfZ2V0KHNpemVvZihzdHJpbmdfaXRlbSksIEZBTFNFKTsK
KyAgICAgICAgICBzdHJpbmdfaXRlbSAqIG5ldyA9IHN0b3JlX2dldChzaXplb2Yoc3RyaW5nX2l0
ZW0pLCBHRVRfVU5UQUlOVEVEKTsKIAotICAgICAgICAgIG5ldy0+dGV4dCA9IHN0b3JlX2dldChh
LT5sZW5ndGgrMSwgaXNfdGFpbnRlZChhLT5jaGFyYWN0ZXIpKTsKKyAgICAgICAgICBuZXctPnRl
eHQgPSBzdG9yZV9nZXQoYS0+bGVuZ3RoKzEsIGEtPmNoYXJhY3Rlcik7CiAgICAgICAgICAgaWYg
KGEtPmxlbmd0aCkgbWVtY3B5KG5ldy0+dGV4dCxhLT5jaGFyYWN0ZXIsYS0+bGVuZ3RoKTsKICAg
ICAgICAgICBuZXctPnRleHRbYS0+bGVuZ3RoXT0nXDAnOwogICAgICAgICAgIG5ldy0+bmV4dD1h
bGlhc2VzOwpAQCAtMzMyNyw3ICszMzI4LDcgQEAKICAgICAgICAgICBhZGRyLT5wcm9wLmlnbm9y
ZV9lcnJvciA9IFRSVUU7CiAgICAgICAgICAgYWRkci0+bmV4dCA9ICpnZW5lcmF0ZWQ7CiAgICAg
ICAgICAgKmdlbmVyYXRlZCA9IGFkZHI7Ci0gICAgICAgICAgYWRkci0+cmVwbHkgPSBzdG9yZV9n
ZXQoc2l6ZW9mKHJlcGx5X2l0ZW0pLCBGQUxTRSk7CisgICAgICAgICAgYWRkci0+cmVwbHkgPSBz
dG9yZV9nZXQoc2l6ZW9mKHJlcGx5X2l0ZW0pLCBHRVRfVU5UQUlOVEVEKTsKICAgICAgICAgICBt
ZW1zZXQoYWRkci0+cmVwbHksMCxzaXplb2YocmVwbHlfaXRlbSkpOyAvKiBYWFggKi8KICAgICAg
ICAgICBhZGRyLT5yZXBseS0+dG8gPSBzdHJpbmdfY29weShzZW5kZXJfYWRkcmVzcyk7CiAgICAg
ICAgICAgaWYgKGZyb20ubGVuZ3RoPT0tMSkKQEAgLTM0MjUsNyArMzQyNiw3IEBACiAKIGlmIChw
YXJzZV93aGl0ZShmaWx0ZXIpPT0tMSkgcmV0dXJuIC0xOwogCi1pZiAoZXhlYyAmJiBmaWx0ZXIt
PnZhY2F0aW9uX2RpcmVjdG9yeSAhPSBOVUxMICYmIGZpbHRlcl90ZXN0ID09IEZURVNUX05PTkUp
CitpZiAoZXhlYyAmJiBmaWx0ZXItPnZhY2F0aW9uX2RpcmVjdG9yeSAmJiBmaWx0ZXJfdGVzdCA9
PSBGVEVTVF9OT05FKQogICB7CiAgIERJUiAqb25jZWxvZ2RpcjsKICAgc3RydWN0IGRpcmVudCAq
b25jZWxvZzsKQEAgLTM0NDgsOCArMzQ0OSw4IEBACiAgICAgd2hpbGUgKChvbmNlbG9nID0gcmVh
ZGRpcihvbmNlbG9nZGlyKSkpCiAgICAgICBpZiAoc3RybGVuKG9uY2Vsb2ctPmRfbmFtZSk9PTMy
KQogICAgICAgICB7Ci0gICAgICAgIHVzY2hhciAqcyA9IHN0cmluZ19zcHJpbnRmKCIlcy8lcyIs
ZmlsdGVyLT52YWNhdGlvbl9kaXJlY3Rvcnksb25jZWxvZy0+ZF9uYW1lKTsKLSAgICAgICAgaWYg
KFVzdGF0KHMsJnByb3BlcnRpZXMpPT0wICYmIChwcm9wZXJ0aWVzLnN0X210aW1lK1ZBQ0FUSU9O
X01BWF9EQVlTKjg2NDAwKTxub3cpCisgICAgICAgIHVzY2hhciAqcyA9IHN0cmluZ19zcHJpbnRm
KCIlcy8lcyIsIGZpbHRlci0+dmFjYXRpb25fZGlyZWN0b3J5LCBvbmNlbG9nLT5kX25hbWUpOwor
ICAgICAgICBpZiAoVXN0YXQocywmcHJvcGVydGllcykgPT0gMCAmJiBwcm9wZXJ0aWVzLnN0X210
aW1lK1ZBQ0FUSU9OX01BWF9EQVlTKjg2NDAwIDwgbm93KQogICAgICAgICAgIFV1bmxpbmsocyk7
CiAgICAgICAgIH0KICAgICBjbG9zZWRpcihvbmNlbG9nZGlyKTsKQEAgLTM0ODQsNyArMzQ4NSw3
IEBACiAjaWZkZWYgRU5PVElGWQogICAgIGVsc2UgaWYgKGVxX29jdGV0KGNoZWNrLCZzdHJfZW5v
dGlmeSwwKSkKICAgICAgIHsKLSAgICAgIGlmIChmaWx0ZXItPmVub3RpZnlfbWFpbHRvX293bmVy
ID09IE5VTEwpCisgICAgICBpZiAoIWZpbHRlci0+ZW5vdGlmeV9tYWlsdG9fb3duZXIpCiAgICAg
ICAgIHsKICAgICAgICAgZmlsdGVyLT5lcnJtc2c9Q1VTICJlbm90aWZ5IGRpc2FibGVkIjsKICAg
ICAgICAgcmV0dXJuIC0xOwpAQCAtMzQ5OCw3ICszNDk5LDcgQEAKICNpZmRlZiBWQUNBVElPTgog
ICAgIGVsc2UgaWYgKGVxX29jdGV0KGNoZWNrLCZzdHJfdmFjYXRpb24sMCkpCiAgICAgICB7Ci0g
ICAgICBpZiAoZmlsdGVyX3Rlc3QgPT0gRlRFU1RfTk9ORSAmJiBmaWx0ZXItPnZhY2F0aW9uX2Rp
cmVjdG9yeSA9PSBOVUxMKQorICAgICAgaWYgKGZpbHRlcl90ZXN0ID09IEZURVNUX05PTkUgJiYg
IWZpbHRlci0+dmFjYXRpb25fZGlyZWN0b3J5KQogICAgICAgICB7CiAgICAgICAgIGZpbHRlci0+
ZXJybXNnPUNVUyAidmFjYXRpb24gZGlzYWJsZWQiOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0z
NTU0LDQ0ICszNTU1LDM2IEBACiAqLwogCiBpbnQKLXNpZXZlX2ludGVycHJldCh1c2NoYXIgKmZp
bHRlciwgaW50IG9wdGlvbnMsIHVzY2hhciAqdmFjYXRpb25fZGlyZWN0b3J5LAotICB1c2NoYXIg
KmVub3RpZnlfbWFpbHRvX293bmVyLCB1c2NoYXIgKnVzZXJhZGRyZXNzLCB1c2NoYXIgKnN1YmFk
ZHJlc3MsCi0gIGFkZHJlc3NfaXRlbSAqKmdlbmVyYXRlZCwgdXNjaGFyICoqZXJyb3IpCitzaWV2
ZV9pbnRlcnByZXQoY29uc3QgdXNjaGFyICogZmlsdGVyLCBpbnQgb3B0aW9ucywKKyAgY29uc3Qg
dXNjaGFyICogdmFjYXRpb25fZGlyZWN0b3J5LCBjb25zdCB1c2NoYXIgKiBlbm90aWZ5X21haWx0
b19vd25lciwKKyAgY29uc3QgdXNjaGFyICogdXNlcmFkZHJlc3MsIGNvbnN0IHVzY2hhciAqIHN1
YmFkZHJlc3MsCisgIGFkZHJlc3NfaXRlbSAqKiBnZW5lcmF0ZWQsIHVzY2hhciAqKiBlcnJvcikK
IHsKIHN0cnVjdCBTaWV2ZSBzaWV2ZTsKIGludCByOwotdXNjaGFyICptc2c7Ci0KLW9wdGlvbnMg
PSBvcHRpb25zOyAvKiBLZWVwIHBpY2t5IGNvbXBpbGVycyBoYXBweSAqLwotZXJyb3IgPSBlcnJv
cjsKK3VzY2hhciAqIG1zZzsKIAogREVCVUcoRF9yb3V0ZSkgZGVidWdfcHJpbnRmKCJTaWV2ZTog
c3RhcnQgb2YgcHJvY2Vzc2luZ1xuIik7CiBzaWV2ZS5maWx0ZXIgPSBmaWx0ZXI7CiAKIGlmICgh
dmFjYXRpb25fZGlyZWN0b3J5KQogICBzaWV2ZS52YWNhdGlvbl9kaXJlY3RvcnkgPSBOVUxMOwot
ZWxzZQorZWxzZSBpZiAoIShzaWV2ZS52YWNhdGlvbl9kaXJlY3RvcnkgPSBleHBhbmRfY3N0cmlu
Zyh2YWNhdGlvbl9kaXJlY3RvcnkpKSkKICAgewotICBpZiAoIShzaWV2ZS52YWNhdGlvbl9kaXJl
Y3RvcnkgPSBleHBhbmRfc3RyaW5nKHZhY2F0aW9uX2RpcmVjdG9yeSkpKQotICAgIHsKLSAgICAq
ZXJyb3IgPSBzdHJpbmdfc3ByaW50ZigiZmFpbGVkIHRvIGV4cGFuZCBcIiVzXCIgIgotICAgICAg
IihzaWV2ZV92YWNhdGlvbl9kaXJlY3RvcnkpOiAlcyIsIHZhY2F0aW9uX2RpcmVjdG9yeSwKLSAg
ICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSk7Ci0gICAgcmV0dXJuIEZGX0VSUk9SOwotICAgIH0K
KyAgKmVycm9yID0gc3RyaW5nX3NwcmludGYoImZhaWxlZCB0byBleHBhbmQgXCIlc1wiICIKKyAg
ICAiKHNpZXZlX3ZhY2F0aW9uX2RpcmVjdG9yeSk6ICVzIiwgdmFjYXRpb25fZGlyZWN0b3J5LAor
ICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSk7CisgIHJldHVybiBGRl9FUlJPUjsKICAgfQogCiBp
ZiAoIWVub3RpZnlfbWFpbHRvX293bmVyKQogICBzaWV2ZS5lbm90aWZ5X21haWx0b19vd25lciA9
IE5VTEw7Ci1lbHNlCitlbHNlIGlmICghKHNpZXZlLmVub3RpZnlfbWFpbHRvX293bmVyID0gZXhw
YW5kX2NzdHJpbmcoZW5vdGlmeV9tYWlsdG9fb3duZXIpKSkKICAgewotICBpZiAoIShzaWV2ZS5l
bm90aWZ5X21haWx0b19vd25lciA9IGV4cGFuZF9zdHJpbmcoZW5vdGlmeV9tYWlsdG9fb3duZXIp
KSkKLSAgICB7Ci0gICAgKmVycm9yID0gc3RyaW5nX3NwcmludGYoImZhaWxlZCB0byBleHBhbmQg
XCIlc1wiICIKLSAgICAgICIoc2lldmVfZW5vdGlmeV9tYWlsdG9fb3duZXIpOiAlcyIsIGVub3Rp
ZnlfbWFpbHRvX293bmVyLAotICAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlKTsKLSAgICByZXR1
cm4gRkZfRVJST1I7Ci0gICAgfQorICAqZXJyb3IgPSBzdHJpbmdfc3ByaW50ZigiZmFpbGVkIHRv
IGV4cGFuZCBcIiVzXCIgIgorICAgICIoc2lldmVfZW5vdGlmeV9tYWlsdG9fb3duZXIpOiAlcyIs
IGVub3RpZnlfbWFpbHRvX293bmVyLAorICAgIGV4cGFuZF9zdHJpbmdfbWVzc2FnZSk7CisgIHJl
dHVybiBGRl9FUlJPUjsKICAgfQogCiBzaWV2ZS51c2VyYWRkcmVzcyA9IHVzZXJhZGRyZXNzCkBA
IC0zNTk5LDE0ICszNTkyLDEzIEBACiBzaWV2ZS5zdWJhZGRyZXNzID0gc3ViYWRkcmVzczsKIAog
I2lmZGVmIENPTVBJTEVfU1lOVEFYX0NIRUNLRVIKLWlmIChwYXJzZV9zdGFydCgmc2lldmUsMCxn
ZW5lcmF0ZWQpPT0xKQoraWYgKHBhcnNlX3N0YXJ0KCZzaWV2ZSwgMCwgZ2VuZXJhdGVkKSA9PSAx
KQogI2Vsc2UKLWlmIChwYXJzZV9zdGFydCgmc2lldmUsMSxnZW5lcmF0ZWQpPT0xKQoraWYgKHBh
cnNlX3N0YXJ0KCZzaWV2ZSwgMSwgZ2VuZXJhdGVkKSA9PSAxKQogI2VuZGlmCi0gIHsKICAgaWYg
KHNpZXZlLmtlZXApCiAgICAgewotICAgIGFkZF9hZGRyKGdlbmVyYXRlZCxVUyJpbmJveCIsMSww
LDAsMCk7CisgICAgYWRkX2FkZHIoZ2VuZXJhdGVkLCBVUyJpbmJveCIsIDEsIDAsIDAsIDApOwog
ICAgIG1zZyA9IFVTIkltcGxpY2l0IGtlZXAiOwogICAgIHIgPSBGRl9ERUxJVkVSRUQ7CiAgICAg
fQpAQCAtMzYxNSw3ICszNjA3LDYgQEAKICAgICBtc2cgPSBVUyJObyBpbXBsaWNpdCBrZWVwIjsK
ICAgICByID0gRkZfREVMSVZFUkVEOwogICAgIH0KLSAgfQogZWxzZQogICB7CiAgIG1zZyA9IHN0
cmluZ19zcHJpbnRmKCJTaWV2ZSBlcnJvcjogJXMgaW4gbGluZSAlZCIsc2lldmUuZXJybXNnLHNp
ZXZlLmxpbmUpOwpkaWZmIC11ciBleGltLm9yaWcvc3JjL3NtdHBfaW4uYyBleGltL3NyYy9zbXRw
X2luLmMKLS0tIGV4aW0ub3JpZy9zcmMvc210cF9pbi5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAw
MDAwMDAwICswMzAwCisrKyBleGltL3NyYy9zbXRwX2luLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4w
MDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQg
bWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFp
bmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJy
aWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVy
cyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBh
bmQgZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGFuIGluY29t
aW5nIFNNVFAgY2FsbC4gKi8KQEAgLTEzOSw3ICsxMzksNyBAQAogI2VuZGlmCiAgIEJPT0wgZHNu
X2FkdmVydGlzZWQJCQk6MTsKICAgQk9PTCBlc210cAkJCQk6MTsKLSAgQk9PTCBoZWxvX3JlcXVp
cmVkCQkJOjE7CisgIEJPT0wgaGVsb192ZXJpZnlfcmVxdWlyZWQJCToxOwogICBCT09MIGhlbG9f
dmVyaWZ5CQkJOjE7CiAgIEJPT0wgaGVsb19zZWVuCQkJOjE7CiAgIEJPT0wgaGVsb19hY2NlcHRf
anVuawkJCToxOwpAQCAtMTUzLDcgKzE1Myw3IEBACiAgIEJPT0wgc210cHV0ZjhfYWR2ZXJ0aXNl
ZAkJOjE7CiAjZW5kaWYKIH0gZmwgPSB7Ci0gIC5oZWxvX3JlcXVpcmVkID0gRkFMU0UsCisgIC5o
ZWxvX3ZlcmlmeV9yZXF1aXJlZCA9IEZBTFNFLAogICAuaGVsb192ZXJpZnkgPSBGQUxTRSwKICAg
LnNtdHBfZXhpdF9mdW5jdGlvbl9jYWxsZWQgPSBGQUxTRSwKIH07CkBAIC0yMjcsNyArMjI3LDcg
QEAKIC8qIFRoaXMgbGlzdCBvZiBuYW1lcyBpcyB1c2VkIGZvciBwZXJmb3JtaW5nIHRoZSBzbXRw
X25vX21haWwgbG9nZ2luZyBhY3Rpb24uCiBJdCBtdXN0IGJlIGtlcHQgaW4gc3RlcCB3aXRoIHRo
ZSBTQ0hfeHh4IGVudW1lcmF0aW9ucy4gKi8KIAotc3RhdGljIHVzY2hhciAqc210cF9uYW1lc1td
ID0KK3VzY2hhciAqIHNtdHBfbmFtZXNbXSA9CiAgIHsKICAgVVMiTk9ORSIsIFVTIkFVVEgiLCBV
UyJEQVRBIiwgVVMiQkRBVCIsIFVTIkVITE8iLCBVUyJFVFJOIiwgVVMiRVhQTiIsCiAgIFVTIkhF
TE8iLCBVUyJIRUxQIiwgVVMiTUFJTCIsIFVTIk5PT1AiLCBVUyJRVUlUIiwgVVMiUkNQVCIsIFVT
IlJTRVQiLApAQCAtMzIwLDk4ICszMjAsNiBAQAogc3RhdGljIHZvaWQgc210cF9yc2V0X2hhbmRs
ZXIodm9pZCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCi0qICAgICAgICAgIFJlY2hlY2sgc3luY2hyb25pemF0aW9uICAgICAgICAgICAgICAg
KgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQot
LyogU3luY2hyb25pemF0aW9uIGNoZWNrcyBjYW4gbmV2ZXIgYmUgcGVyZmVjdCBiZWNhdXNlIGEg
cGFja2V0IG1heSBiZSBvbiBpdHMKLXdheSBidXQgbm90IGFycml2ZWQgd2hlbiB0aGUgY2hlY2sg
aXMgZG9uZS4gIE5vcm1hbGx5LCB0aGUgY2hlY2tzIGhhcHBlbiB3aGVuCi1jb21tYW5kcyBhcmUg
cmVhZDogRXhpbSBlbnN1cmVzIHRoYXQgdGhlcmUgaXMgbm8gbW9yZSBpbnB1dCBpbiB0aGUgaW5w
dXQgYnVmZmVyLgotSW4gbm9ybWFsIGNhc2VzLCB0aGUgcmVzcG9uc2UgdG8gdGhlIGNvbW1hbmQg
d2lsbCBiZSBmYXN0LCBhbmQgdGhlcmUgaXMgbm8KLWZ1cnRoZXIgY2hlY2suCi0KLUhvd2V2ZXIs
IGZvciBzb21lIGNvbW1hbmRzIGFuIEFDTCBpcyBydW4sIGFuZCB0aGF0IGNhbiBpbmNsdWRlIGRl
bGF5cy4gSW4gdGhvc2UKLWNhc2VzLCBpdCBpcyB1c2VmdWwgdG8gZG8gYW5vdGhlciBjaGVjayBv
biB0aGUgaW5wdXQganVzdCBiZWZvcmUgc2VuZGluZyB0aGUKLXJlc3BvbnNlLiBUaGlzIGFsc28g
YXBwbGllcyBhdCB0aGUgc3RhcnQgb2YgYSBjb25uZWN0aW9uLiBUaGlzIGZ1bmN0aW9uIGRvZXMK
LXRoYXQgY2hlY2sgYnkgbWVhbnMgb2YgdGhlIHNlbGVjdCgpIGZ1bmN0aW9uLCBhcyBsb25nIGFz
IHRoZSBmYWNpbGl0eSBpcyBub3QKLWRpc2FibGVkIG9yIGluYXBwcm9wcmlhdGUuIEEgZmFpbHVy
ZSBvZiBzZWxlY3QoKSBpcyBpZ25vcmVkLgotCi1XaGVuIHRoZXJlIGlzIHVud2FudGVkIGlucHV0
LCB3ZSByZWFkIGl0IHNvIHRoYXQgaXQgYXBwZWFycyBpbiB0aGUgbG9nIG9mIHRoZQotZXJyb3Iu
Ci0KLUFyZ3VtZW50czogbm9uZQotUmV0dXJuczogICBUUlVFIGlmIGFsbCBpcyB3ZWxsOyBGQUxT
RSBpZiB0aGVyZSBpcyBpbnB1dCBwZW5kaW5nCi0qLwotCi1zdGF0aWMgQk9PTAotd291bGRibG9j
a19yZWFkaW5nKHZvaWQpCi17Ci1pbnQgZmQsIHJjOwotZmRfc2V0IGZkczsKLXN0cnVjdCB0aW1l
dmFsIHR6ZXJvOwotCi0jaWZuZGVmIERJU0FCTEVfVExTCi1pZiAodGxzX2luLmFjdGl2ZS5zb2Nr
ID49IDApCi0gcmV0dXJuICF0bHNfY291bGRfcmVhZCgpOwotI2VuZGlmCi0KLWlmIChzbXRwX2lu
cHRyIDwgc210cF9pbmVuZCkKLSAgcmV0dXJuIEZBTFNFOwotCi1mZCA9IGZpbGVubyhzbXRwX2lu
KTsKLUZEX1pFUk8oJmZkcyk7Ci1GRF9TRVQoZmQsICZmZHMpOwotdHplcm8udHZfc2VjID0gMDsK
LXR6ZXJvLnR2X3VzZWMgPSAwOwotcmMgPSBzZWxlY3QoZmQgKyAxLCAoU0VMRUNUX0FSRzJfVFlQ
RSAqKSZmZHMsIE5VTEwsIE5VTEwsICZ0emVybyk7Ci0KLWlmIChyYyA8PSAwKSByZXR1cm4gVFJV
RTsgICAgIC8qIE5vdCByZWFkeSB0byByZWFkICovCi1yYyA9IHNtdHBfZ2V0YyhHRVRDX0JVRkZF
Ul9VTkxJTUlURUQpOwotaWYgKHJjIDwgMCkgcmV0dXJuIFRSVUU7ICAgICAgLyogRW5kIG9mIGZp
bGUgb3IgZXJyb3IgKi8KLQotc210cF91bmdldGMocmMpOwotcmV0dXJuIEZBTFNFOwotfQotCi1z
dGF0aWMgQk9PTAotY2hlY2tfc3luYyh2b2lkKQotewotaWYgKCFzbXRwX2VuZm9yY2Vfc3luYyB8
fCAhc2VuZGVyX2hvc3RfYWRkcmVzcyB8fCBmLnNlbmRlcl9ob3N0X25vdHNvY2tldCkKLSAgcmV0
dXJuIFRSVUU7Ci0KLXJldHVybiB3b3VsZGJsb2NrX3JlYWRpbmcoKTsKLX0KLQotCi0vKiBJZiB0
aGVyZSdzIGlucHV0IHdhaXRpbmcgKGFuZCB3ZSdyZSBkb2luZyBwaXBlbGluZWluZykgdGhlbiB3
ZSBjYW4gcGlwZWxpbmUKLWEgcmVwb25zZSB3aXRoIHRoZSBvbmUgZm9sbG93aW5nLiAqLwotCi1z
dGF0aWMgQk9PTAotcGlwZWxpbmVfcmVzcG9uc2Uodm9pZCkKLXsKLWlmICggICFzbXRwX2VuZm9y
Y2Vfc3luYyB8fCAhc2VuZGVyX2hvc3RfYWRkcmVzcwotICAgfHwgZi5zZW5kZXJfaG9zdF9ub3Rz
b2NrZXQgfHwgIWYuc210cF9pbl9waXBlbGluaW5nX2FkdmVydGlzZWQpCi0gIHJldHVybiBGQUxT
RTsKLQotaWYgKHdvdWxkYmxvY2tfcmVhZGluZygpKSByZXR1cm4gRkFMU0U7Ci1mLnNtdHBfaW5f
cGlwZWxpbmluZ191c2VkID0gVFJVRTsKLXJldHVybiBUUlVFOwotfQotCi0KLSNpZm5kZWYgRElT
QUJMRV9QSVBFX0NPTk5FQ1QKLXN0YXRpYyBCT09MCi1waXBlbGluZV9jb25uZWN0X3NlbmRzKHZv
aWQpCi17Ci1pZiAoIXNlbmRlcl9ob3N0X2FkZHJlc3MgfHwgZi5zZW5kZXJfaG9zdF9ub3Rzb2Nr
ZXQgfHwgIWZsLnBpcGVfY29ubmVjdF9hY2NlcHRhYmxlKQotICByZXR1cm4gRkFMU0U7Ci0KLWlm
ICh3b3VsZGJsb2NrX3JlYWRpbmcoKSkgcmV0dXJuIEZBTFNFOwotZi5zbXRwX2luX2Vhcmx5X3Bp
cGVfdXNlZCA9IFRSVUU7Ci1yZXR1cm4gVFJVRTsKLX0KLSNlbmRpZgotCi0vKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICBMb2cgaW5j
b21wbGV0ZSB0cmFuc2FjdGlvbnMgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTQzNCw3ICszNDIsNyBAQAogCiBpZiAo
cmVjaXBpZW50c19jb3VudCA+IDApCiAgIHsKLSAgcmF3X3JlY2lwaWVudHMgPSBzdG9yZV9nZXQo
cmVjaXBpZW50c19jb3VudCAqIHNpemVvZih1c2NoYXIgKiksIEZBTFNFKTsKKyAgcmF3X3JlY2lw
aWVudHMgPSBzdG9yZV9nZXQocmVjaXBpZW50c19jb3VudCAqIHNpemVvZih1c2NoYXIgKiksIEdF
VF9VTlRBSU5URUQpOwogICBmb3IgKGludCBpID0gMDsgaSA8IHJlY2lwaWVudHNfY291bnQ7IGkr
KykKICAgICByYXdfcmVjaXBpZW50c1tpXSA9IHJlY2lwaWVudHNfbGlzdFtpXS5hZGRyZXNzOwog
ICByYXdfcmVjaXBpZW50c19jb3VudCA9IHJlY2lwaWVudHNfY291bnQ7CkBAIC00OTMsNiArNDAx
LDI1IEBACiB9CiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNNVFAgaW5wdXQgYnVm
ZmVyIGhhbmRsaW5nLiAgTW9zdCBvZiB0aGVzZSBhcmUgc2ltaWxhciB0byBzdGRpbyByb3V0aW5l
cy4gICovCisKK3N0YXRpYyB2b2lkCitzbXRwX2J1Zl9pbml0KHZvaWQpCit7CisvKiBTZXQgdXAg
dGhlIGJ1ZmZlciBmb3IgaW5wdXR0aW5nIHVzaW5nIGRpcmVjdCByZWFkKCkgY2FsbHMsIGFuZCBh
cnJhbmdlIHRvCitjYWxsIHRoZSBsb2NhbCBmdW5jdGlvbnMgaW5zdGVhZCBvZiB0aGUgc3RhbmRh
cmQgQyBvbmVzLiAgUGxhY2UgYSBOVUwgYXQgdGhlCitlbmQgb2YgdGhlIGJ1ZmZlciB0byBzYWZl
dHktc3RvcCBDLXN0cmluZyByZWFkcyBmcm9tIGl0LiAqLworCitpZiAoIShzbXRwX2luYnVmZmVy
ID0gVVMgbWFsbG9jKElOX0JVRkZFUl9TSVpFKSkpCisgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxM
T0dfUEFOSUNfRElFLCAibWFsbG9jKCkgZmFpbGVkIGZvciBTTVRQIGlucHV0IGJ1ZmZlciIpOwor
c210cF9pbmJ1ZmZlcltJTl9CVUZGRVJfU0laRS0xXSA9ICdcMCc7CisKK3NtdHBfaW5wdHIgPSBz
bXRwX2luZW5kID0gc210cF9pbmJ1ZmZlcjsKK3NtdHBfaGFkX2VvZiA9IHNtdHBfaGFkX2Vycm9y
ID0gMDsKK30KKworCiAKIC8qIFJlZmlsbCB0aGUgYnVmZmVyLCBhbmQgbm90aWZ5IERLSU0gdmVy
aWZpY2F0aW9uIGNvZGUuCiBSZXR1cm4gZmFsc2UgZm9yIGVycm9yIG9yIEVPRi4KQEAgLTUwMiw2
ICs0MjksNyBAQAogc210cF9yZWZpbGwodW5zaWduZWQgbGltKQogewogaW50IHJjLCBzYXZlX2Vy
cm5vOworCiBpZiAoIXNtdHBfb3V0KSByZXR1cm4gRkFMU0U7CiBmZmx1c2goc210cF9vdXQpOwog
aWYgKHNtdHBfcmVjZWl2ZV90aW1lb3V0ID4gMCkgQUxBUk0oc210cF9yZWNlaXZlX3RpbWVvdXQp
OwpAQCAtNTQzLDExICs0NzEsMTggQEAKIHJldHVybiBUUlVFOwogfQogCi0vKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICAgICAgICBTTVRQIHZl
cnNpb24gb2YgZ2V0YygpICAgICAgICAgICAgICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIFRoaXMgZ2V0cyB0aGUgbmV4dCBieXRl
IGZyb20gdGhlIFNNVFAgaW5wdXQgYnVmZmVyLiBJZiB0aGUgYnVmZmVyIGlzIGVtcHR5LAorLyog
Q2hlY2sgaWYgdGhlcmUgaXMgYnVmZmVyZWQgZGF0YSAqLworCitCT09MCitzbXRwX2hhc2Modm9p
ZCkKK3sKK3JldHVybiBzbXRwX2lucHRyIDwgc210cF9pbmVuZDsKK30KKworLyogU01UUCB2ZXJz
aW9uIG9mIGdldGMoKQorCitUaGlzIGdldHMgdGhlIG5leHQgYnl0ZSBmcm9tIHRoZSBTTVRQIGlu
cHV0IGJ1ZmZlci4gSWYgdGhlIGJ1ZmZlciBpcyBlbXB0eSwKIGl0IGZsdXNoZXMgdGhlIG91dHB1
dCwgYW5kIHJlZmlsbHMgdGhlIGJ1ZmZlciwgd2l0aCBhIHRpbWVvdXQuIFRoZSBzaWduYWwKIGhh
bmRsZXIgaXMgc2V0IGFwcHJvcHJpYXRlbHkgYnkgdGhlIGNhbGxpbmcgZnVuY3Rpb24uIFRoaXMg
ZnVuY3Rpb24gaXMgbm90IHVzZWQKIGFmdGVyIGEgY29ubmVjdGlvbiBoYXMgbmVnb3RpYXRlZCBp
dHNlbGYgaW50byBhbiBUTFMvU1NMIHN0YXRlLgpAQCAtNTU5LDIxICs0OTQsMjAgQEAKIGludAog
c210cF9nZXRjKHVuc2lnbmVkIGxpbSkKIHsKLWlmIChzbXRwX2lucHRyID49IHNtdHBfaW5lbmQp
Ci0gIGlmICghc210cF9yZWZpbGwobGltKSkKLSAgICByZXR1cm4gRU9GOworaWYgKCFzbXRwX2hh
c2MoKSAmJiAhc210cF9yZWZpbGwobGltKSkgcmV0dXJuIEVPRjsKIHJldHVybiAqc210cF9pbnB0
cisrOwogfQogCisvKiBHZXQgbWFueSBieXRlcywgcmVmaWxsaW5nIGJ1ZmZlciBpZiBuZWVkZWQg
Ki8KKwogdXNjaGFyICoKIHNtdHBfZ2V0YnVmKHVuc2lnbmVkICogbGVuKQogewogdW5zaWduZWQg
c2l6ZTsKIHVzY2hhciAqIGJ1ZjsKIAotaWYgKHNtdHBfaW5wdHIgPj0gc210cF9pbmVuZCkKLSAg
aWYgKCFzbXRwX3JlZmlsbCgqbGVuKSkKLSAgICB7ICpsZW4gPSAwOyByZXR1cm4gTlVMTDsgfQor
aWYgKCFzbXRwX2hhc2MoKSAmJiAhc210cF9yZWZpbGwoKmxlbikpCisgIHsgKmxlbiA9IDA7IHJl
dHVybiBOVUxMOyB9CiAKIGlmICgoc2l6ZSA9IHNtdHBfaW5lbmQgLSBzbXRwX2lucHRyKSA+ICps
ZW4pIHNpemUgPSAqbGVuOwogYnVmID0gc210cF9pbnB0cjsKQEAgLTU4MiwxNyArNTE2LDE0NiBA
QAogcmV0dXJuIGJ1ZjsKIH0KIAorLyogQ29weSBidWZmZXJlZCBkYXRhIHRvIHRoZSBka2ltIGZl
ZWQuCitDYWxsZWQsIHVubGVzcyBUTFMsIGp1c3QgYmVmb3JlIHN0YXJ0aW5nIHRvIHJlYWQgbWVz
c2FnZSBoZWFkZXJzLiAqLworCiB2b2lkCi1zbXRwX2dldF9jYWNoZSh2b2lkKQorc210cF9nZXRf
Y2FjaGUodW5zaWduZWQgbGltKQogewogI2lmbmRlZiBESVNBQkxFX0RLSU0KIGludCBuID0gc210
cF9pbmVuZCAtIHNtdHBfaW5wdHI7CitpZiAobiA+IGxpbSkKKyAgbiA9IGxpbTsKIGlmIChuID4g
MCkKICAgZGtpbV9leGltX3ZlcmlmeV9mZWVkKHNtdHBfaW5wdHIsIG4pOwogI2VuZGlmCiB9CiAK
IAorLyogU01UUCB2ZXJzaW9uIG9mIHVuZ2V0YygpCitQdXRzIGEgY2hhcmFjdGVyIGJhY2sgaW4g
dGhlIGlucHV0IGJ1ZmZlci4gT25seSBldmVyIGNhbGxlZCBvbmNlLgorCitBcmd1bWVudHM6Cisg
IGNoICAgICAgICAgICB0aGUgY2hhcmFjdGVyCisKK1JldHVybnM6ICAgICAgIHRoZSBjaGFyYWN0
ZXIKKyovCisKK2ludAorc210cF91bmdldGMoaW50IGNoKQoreworaWYgKHNtdHBfaW5wdHIgPD0g
c210cF9pbmJ1ZmZlcikJLyogTkI6IE5PVCBzbXRwX2hhc2MoKSAhICovCisgIGxvZ193cml0ZSgw
LCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLCAiYnVmZmVyIHVuZGVyZmxvdyBpbiBzbXRwX3VuZ2V0
YyIpOworCisqLS1zbXRwX2lucHRyID0gY2g7CityZXR1cm4gY2g7Cit9CisKKworLyogU01UUCB2
ZXJzaW9uIG9mIGZlb2YoKQorVGVzdHMgZm9yIGEgcHJldmlvdXMgRU9GCisKK0FyZ3VtZW50czog
ICAgIG5vbmUKK1JldHVybnM6ICAgICAgIG5vbi16ZXJvIGlmIHRoZSBlb2YgZmxhZyBpcyBzZXQK
KyovCisKK2ludAorc210cF9mZW9mKHZvaWQpCit7CityZXR1cm4gc210cF9oYWRfZW9mOworfQor
CisKKy8qIFNNVFAgdmVyc2lvbiBvZiBmZXJyb3IoKQorVGVzdHMgZm9yIGEgcHJldmlvdXMgcmVh
ZCBlcnJvciwgYW5kIHJldHVybnMgd2l0aCBlcnJubworcmVzdG9yZWQgdG8gd2hhdCBpdCB3YXMg
d2hlbiB0aGUgZXJyb3Igd2FzIGRldGVjdGVkLgorCitBcmd1bWVudHM6ICAgICBub25lCitSZXR1
cm5zOiAgICAgICBub24temVybyBpZiB0aGUgZXJyb3IgZmxhZyBpcyBzZXQKKyovCisKK2ludAor
c210cF9mZXJyb3Iodm9pZCkKK3sKK2Vycm5vID0gc210cF9oYWRfZXJyb3I7CityZXR1cm4gc210
cF9oYWRfZXJyb3I7Cit9CisKKworLyogQ2hlY2sgaWYgYSBnZXRjIHdpbGwgYmxvY2sgb3Igbm90
ICovCisKK3N0YXRpYyBCT09MCitzbXRwX2NvdWxkX2dldGModm9pZCkKK3sKK2ludCBmZCwgcmM7
CitmZF9zZXQgZmRzOworc3RydWN0IHRpbWV2YWwgdHplcm8gPSB7LnR2X3NlYyA9IDAsIC50dl91
c2VjID0gMH07CisKK2lmIChzbXRwX2lucHRyIDwgc210cF9pbmVuZCkKKyAgcmV0dXJuIFRSVUU7
CisKK2ZkID0gZmlsZW5vKHNtdHBfaW4pOworRkRfWkVSTygmZmRzKTsKK0ZEX1NFVChmZCwgJmZk
cyk7CityYyA9IHNlbGVjdChmZCArIDEsIChTRUxFQ1RfQVJHMl9UWVBFICopJmZkcywgTlVMTCwg
TlVMTCwgJnR6ZXJvKTsKKworaWYgKHJjIDw9IDApIHJldHVybiBGQUxTRTsgICAgIC8qIE5vdCBy
ZWFkeSB0byByZWFkICovCityYyA9IHNtdHBfZ2V0YyhHRVRDX0JVRkZFUl9VTkxJTUlURUQpOwor
aWYgKHJjIDwgMCkgcmV0dXJuIEZBTFNFOyAgICAgIC8qIEVuZCBvZiBmaWxlIG9yIGVycm9yICov
CisKK3NtdHBfdW5nZXRjKHJjKTsKK3JldHVybiBUUlVFOworfQorCisKKy8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKgorKiAgICAgICAgICBSZWNoZWNrIHN5bmNocm9uaXphdGlvbiAgICAgICAgICAgICAgICoK
KyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8q
IFN5bmNocm9uaXphdGlvbiBjaGVja3MgY2FuIG5ldmVyIGJlIHBlcmZlY3QgYmVjYXVzZSBhIHBh
Y2tldCBtYXkgYmUgb24gaXRzCit3YXkgYnV0IG5vdCBhcnJpdmVkIHdoZW4gdGhlIGNoZWNrIGlz
IGRvbmUuICBOb3JtYWxseSwgdGhlIGNoZWNrcyBoYXBwZW4gd2hlbgorY29tbWFuZHMgYXJlIHJl
YWQ6IEV4aW0gZW5zdXJlcyB0aGF0IHRoZXJlIGlzIG5vIG1vcmUgaW5wdXQgaW4gdGhlIGlucHV0
IGJ1ZmZlci4KK0luIG5vcm1hbCBjYXNlcywgdGhlIHJlc3BvbnNlIHRvIHRoZSBjb21tYW5kIHdp
bGwgYmUgZmFzdCwgYW5kIHRoZXJlIGlzIG5vCitmdXJ0aGVyIGNoZWNrLgorCitIb3dldmVyLCBm
b3Igc29tZSBjb21tYW5kcyBhbiBBQ0wgaXMgcnVuLCBhbmQgdGhhdCBjYW4gaW5jbHVkZSBkZWxh
eXMuIEluIHRob3NlCitjYXNlcywgaXQgaXMgdXNlZnVsIHRvIGRvIGFub3RoZXIgY2hlY2sgb24g
dGhlIGlucHV0IGp1c3QgYmVmb3JlIHNlbmRpbmcgdGhlCityZXNwb25zZS4gVGhpcyBhbHNvIGFw
cGxpZXMgYXQgdGhlIHN0YXJ0IG9mIGEgY29ubmVjdGlvbi4gVGhpcyBmdW5jdGlvbiBkb2VzCit0
aGF0IGNoZWNrIGJ5IG1lYW5zIG9mIHRoZSBzZWxlY3QoKSBmdW5jdGlvbiwgYXMgbG9uZyBhcyB0
aGUgZmFjaWxpdHkgaXMgbm90CitkaXNhYmxlZCBvciBpbmFwcHJvcHJpYXRlLiBBIGZhaWx1cmUg
b2Ygc2VsZWN0KCkgaXMgaWdub3JlZC4KKworV2hlbiB0aGVyZSBpcyB1bndhbnRlZCBpbnB1dCwg
d2UgcmVhZCBpdCBzbyB0aGF0IGl0IGFwcGVhcnMgaW4gdGhlIGxvZyBvZiB0aGUKK2Vycm9yLgor
CitBcmd1bWVudHM6IG5vbmUKK1JldHVybnM6ICAgVFJVRSBpZiBhbGwgaXMgd2VsbDsgRkFMU0Ug
aWYgdGhlcmUgaXMgaW5wdXQgcGVuZGluZworKi8KKworc3RhdGljIEJPT0wKK3dvdWxkYmxvY2tf
cmVhZGluZyh2b2lkKQoreworI2lmbmRlZiBESVNBQkxFX1RMUworaWYgKHRsc19pbi5hY3RpdmUu
c29jayA+PSAwKQorIHJldHVybiAhdGxzX2NvdWxkX2dldGMoKTsKKyNlbmRpZgorCityZXR1cm4g
IXNtdHBfY291bGRfZ2V0YygpOworfQorCitzdGF0aWMgQk9PTAorY2hlY2tfc3luYyh2b2lkKQor
eworaWYgKCFzbXRwX2VuZm9yY2Vfc3luYyB8fCAhc2VuZGVyX2hvc3RfYWRkcmVzcyB8fCBmLnNl
bmRlcl9ob3N0X25vdHNvY2tldCkKKyAgcmV0dXJuIFRSVUU7CisKK3JldHVybiB3b3VsZGJsb2Nr
X3JlYWRpbmcoKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVmFyaWFudHMg
b2YgdGhlIHNtdHBfKiBpbnB1dCBoYW5kbGluZyBmdW5jdGlvbnMgZm9yIHVzZSBpbiBDSFVOS0lO
RyBtb2RlICovCisKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCiBzdGF0aWMgaW5saW5lIHZv
aWQgYmRhdF9wdXNoX3JlY2VpdmVfZnVuY3Rpb25zKHZvaWQpOwogc3RhdGljIGlubGluZSB2b2lk
IGJkYXRfcG9wX3JlY2VpdmVfZnVuY3Rpb25zKHZvaWQpOwpAQCAtNjYxLDcgKzcyNCw5IEBACiAg
IGlmIChjaHVua2luZ19zdGF0ZSA9PSBDSFVOS0lOR19MQVNUKQogICAgIHsKICNpZm5kZWYgRElT
QUJMRV9ES0lNCisgICAgZGtpbV9jb2xsZWN0X2lucHV0ID0gZGtpbV9zYXZlOwogICAgIGRraW1f
ZXhpbV92ZXJpZnlfZmVlZChOVUxMLCAwKTsJLyogbm90aWZ5IEVPRCAqLworICAgIGRraW1fY29s
bGVjdF9pbnB1dCA9IDA7CiAjZW5kaWYKICAgICByZXR1cm4gRU9EOwogICAgIH0KQEAgLTc0Myw2
ICs4MDgsMTQgQEAKICAgfQogfQogCitCT09MCitiZGF0X2hhc2Modm9pZCkKK3sKK2lmIChjaHVu
a2luZ19kYXRhX2xlZnQgPiAwKQorICByZXR1cm4gbHdyX3JlY2VpdmVfaGFzYygpOworcmV0dXJu
IFRSVUU7Cit9CisKIHVzY2hhciAqCiBiZGF0X2dldGJ1Zih1bnNpZ25lZCAqIGxlbikKIHsKQEAg
LTc2NywxMiArODQwLDggQEAKICAgfQogCiBiZGF0X3BvcF9yZWNlaXZlX2Z1bmN0aW9ucygpOwot
Ci1pZiAoY2h1bmtpbmdfc3RhdGUgIT0gQ0hVTktJTkdfTEFTVCkKLSAgewotICBjaHVua2luZ19z
dGF0ZSA9IENIVU5LSU5HX09GRkVSRUQ7Ci0gIERFQlVHKERfcmVjZWl2ZSkgZGVidWdfcHJpbnRm
KCJjaHVua2luZyBzdGF0ZSAlZFxuIiwgKGludCljaHVua2luZ19zdGF0ZSk7Ci0gIH0KK2NodW5r
aW5nX3N0YXRlID0gQ0hVTktJTkdfT0ZGRVJFRDsKK0RFQlVHKERfcmVjZWl2ZSkgZGVidWdfcHJp
bnRmKCJjaHVua2luZyBzdGF0ZSAlZFxuIiwgKGludCljaHVua2luZ19zdGF0ZSk7CiB9CiAKIApA
QCAtNzgyLDEwICs4NTEsMTEgQEAKIC8qIHB1c2ggdGhlIGN1cnJlbnQgcmVjZWl2ZV8qIGZ1bmN0
aW9uIG9uIHRoZSAic3RhY2siLCBhbmQKIHJlcGxhY2UgdGhlbSBieSBiZGF0X2dldGMoKSwgd2hp
Y2ggaW4gdHVybiB3aWxsIHVzZSB0aGUgbHdyX3JlY2VpdmVfKgogZnVuY3Rpb25zIHRvIGRvIHRo
ZSBkaXJ0eSB3b3JrLiAqLwotaWYgKGx3cl9yZWNlaXZlX2dldGMgPT0gTlVMTCkKK2lmICghbHdy
X3JlY2VpdmVfZ2V0YykKICAgewogICBsd3JfcmVjZWl2ZV9nZXRjID0gcmVjZWl2ZV9nZXRjOwog
ICBsd3JfcmVjZWl2ZV9nZXRidWYgPSByZWNlaXZlX2dldGJ1ZjsKKyAgbHdyX3JlY2VpdmVfaGFz
YyA9IHJlY2VpdmVfaGFzYzsKICAgbHdyX3JlY2VpdmVfdW5nZXRjID0gcmVjZWl2ZV91bmdldGM7
CiAgIH0KIGVsc2UKQEAgLTc5NSw1MCArODY1LDI5IEBACiAKIHJlY2VpdmVfZ2V0YyA9IGJkYXRf
Z2V0YzsKIHJlY2VpdmVfZ2V0YnVmID0gYmRhdF9nZXRidWY7CityZWNlaXZlX2hhc2MgPSBiZGF0
X2hhc2M7CiByZWNlaXZlX3VuZ2V0YyA9IGJkYXRfdW5nZXRjOwogfQogCiBzdGF0aWMgaW5saW5l
IHZvaWQKIGJkYXRfcG9wX3JlY2VpdmVfZnVuY3Rpb25zKHZvaWQpCiB7Ci1pZiAobHdyX3JlY2Vp
dmVfZ2V0YyA9PSBOVUxMKQoraWYgKCFsd3JfcmVjZWl2ZV9nZXRjKQogICB7CiAgIERFQlVHKERf
cmVjZWl2ZSkgZGVidWdfcHJpbnRmKCJjaHVua2luZyBkb3VibGUtcG9wIHJlY2VpdmUgZnVuY3Rp
b25zXG4iKTsKICAgcmV0dXJuOwogICB9CiByZWNlaXZlX2dldGMgPSBsd3JfcmVjZWl2ZV9nZXRj
OwogcmVjZWl2ZV9nZXRidWYgPSBsd3JfcmVjZWl2ZV9nZXRidWY7CityZWNlaXZlX2hhc2MgPSBs
d3JfcmVjZWl2ZV9oYXNjOwogcmVjZWl2ZV91bmdldGMgPSBsd3JfcmVjZWl2ZV91bmdldGM7CiAK
IGx3cl9yZWNlaXZlX2dldGMgPSBOVUxMOwogbHdyX3JlY2VpdmVfZ2V0YnVmID0gTlVMTDsKK2x3
cl9yZWNlaXZlX2hhc2MgPSBOVUxMOwogbHdyX3JlY2VpdmVfdW5nZXRjID0gTlVMTDsKIH0KIAot
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICAg
ICAgICAgU01UUCB2ZXJzaW9uIG9mIHVuZ2V0YygpICAgICAgICAgICAgICAqCi0qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBQdXRzIGEgY2hh
cmFjdGVyIGJhY2sgaW4gdGhlIGlucHV0IGJ1ZmZlci4gT25seSBldmVyCi1jYWxsZWQgb25jZS4K
LQotQXJndW1lbnRzOgotICBjaCAgICAgICAgICAgdGhlIGNoYXJhY3RlcgotCi1SZXR1cm5zOiAg
ICAgICB0aGUgY2hhcmFjdGVyCi0qLwotCi1pbnQKLXNtdHBfdW5nZXRjKGludCBjaCkKLXsKLWlm
IChzbXRwX2lucHRyIDw9IHNtdHBfaW5idWZmZXIpCi0gIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxM
T0dfUEFOSUNfRElFLCAiYnVmZmVyIHVuZGVyZmxvdyBpbiBzbXRwX3VuZ2V0YyIpOwotCi0qLS1z
bXRwX2lucHRyID0gY2g7Ci1yZXR1cm4gY2g7Ci19Ci0KLQogaW50CiBiZGF0X3VuZ2V0YyhpbnQg
Y2gpCiB7CkBAIC04NDksNjIgKzg5OCw3IEBACiAKIAogCi0vKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICAgICAgICBTTVRQIHZlcnNpb24gb2Yg
ZmVvZigpICAgICAgICAgICAgICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLS8qIFRlc3RzIGZvciBhIHByZXZpb3VzIEVPRgotCi1Bcmd1
bWVudHM6ICAgICBub25lCi1SZXR1cm5zOiAgICAgICBub24temVybyBpZiB0aGUgZW9mIGZsYWcg
aXMgc2V0Ci0qLwotCi1pbnQKLXNtdHBfZmVvZih2b2lkKQotewotcmV0dXJuIHNtdHBfaGFkX2Vv
ZjsKLX0KLQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKLSogICAgICAgICAgU01UUCB2ZXJzaW9uIG9mIGZlcnJvcigpICAgICAgICAgICAg
ICAqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot
Ci0vKiBUZXN0cyBmb3IgYSBwcmV2aW91cyByZWFkIGVycm9yLCBhbmQgcmV0dXJucyB3aXRoIGVy
cm5vCi1yZXN0b3JlZCB0byB3aGF0IGl0IHdhcyB3aGVuIHRoZSBlcnJvciB3YXMgZGV0ZWN0ZWQu
Ci0KLUFyZ3VtZW50czogICAgIG5vbmUKLVJldHVybnM6ICAgICAgIG5vbi16ZXJvIGlmIHRoZSBl
cnJvciBmbGFnIGlzIHNldAotKi8KLQotaW50Ci1zbXRwX2ZlcnJvcih2b2lkKQotewotZXJybm8g
PSBzbXRwX2hhZF9lcnJvcjsKLXJldHVybiBzbXRwX2hhZF9lcnJvcjsKLX0KLQotCi0KLS8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgICAgVGVz
dCBmb3IgY2hhcmFjdGVycyBpbiB0aGUgU01UUCBidWZmZXIgICAgKgotKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVXNlZCBhdCB0aGUgZW5k
IG9mIGEgbWVzc2FnZQotCi1Bcmd1bWVudHM6ICAgICBub25lCi1SZXR1cm5zOiAgICAgICBUUlVF
L0ZBTFNFCi0qLwotCi1CT09MCi1zbXRwX2J1ZmZlcmVkKHZvaWQpCi17Ci1yZXR1cm4gc210cF9p
bnB0ciA8IHNtdHBfaW5lbmQ7Ci19Ci0KLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgIFdy
aXRlIGZvcm1hdHRlZCBzdHJpbmcgdG8gU01UUCBjaGFubmVsICAgICAqCkBAIC05NTgsMTUgKzk1
MiwxMiBAQAogeWllbGQgPSAhISBzdHJpbmdfdmZvcm1hdCgmZ3MsIFNWRk1UX1RBSU5UX05PQ0hL
LCBmb3JtYXQsIGFwKTsKIHN0cmluZ19mcm9tX2dzdHJpbmcoJmdzKTsKIAotREVCVUcoRF9yZWNl
aXZlKQotICB7Ci0gIHVzY2hhciAqbXNnX2NvcHksICpjciwgKmVuZDsKLSAgbXNnX2NvcHkgPSBz
dHJpbmdfY29weShncy5zKTsKLSAgZW5kID0gbXNnX2NvcHkgKyBncy5wdHI7Ci0gIHdoaWxlICgo
Y3IgPSBVc3RyY2hyKG1zZ19jb3B5LCAnXHInKSkgIT0gTlVMTCkgICAvKiBsb3NlIENScyAqLwot
ICAgIG1lbW1vdmUoY3IsIGNyICsgMSwgKGVuZC0tKSAtIGNyKTsKLSAgZGVidWdfcHJpbnRmKCJT
TVRQPj4gJXMiLCBtc2dfY29weSk7Ci0gIH0KK0RFQlVHKERfcmVjZWl2ZSkgZm9yIChjb25zdCB1
c2NoYXIgKiB0LCAqIHMgPSBncy5zOworCQkgICAgICBzICYmICh0ID0gVXN0cmNocihzLCAnXHIn
KSk7CisJCSAgICAgIHMgPSB0ICsgMikJCQkJLyogXHJcbiAqLworICAgIGRlYnVnX3ByaW50Zigi
JXMgJS4qc1xuIiwKKwkJICBzID09IGdzLnMgPyAiU01UUD4+IiA6ICIgICAgICAiLAorCQkgIChp
bnQpKHQgLSBzKSwgcyk7CiAKIGlmICgheWllbGQpCiAgIHsKQEAgLTk4Myw3ICs5NzQsNyBAQAog
CiBpZiAoZmwucmNwdF9pbl9wcm9ncmVzcykKICAgewotICBpZiAocmNwdF9zbXRwX3Jlc3BvbnNl
ID09IE5VTEwpCisgIGlmICghcmNwdF9zbXRwX3Jlc3BvbnNlKQogICAgIHJjcHRfc210cF9yZXNw
b25zZSA9IHN0cmluZ19jb3B5KGJpZ19idWZmZXIpOwogICBlbHNlIGlmIChmbC5yY3B0X3NtdHBf
cmVzcG9uc2Vfc2FtZSAmJgogICAgICAgICAgICBVc3RyY21wKHJjcHRfc210cF9yZXNwb25zZSwg
YmlnX2J1ZmZlcikgIT0gMCkKQEAgLTEwMzQsNiArMTAyNSwzNSBAQAogCiAKIAorLyogSWYgdGhl
cmUncyBpbnB1dCB3YWl0aW5nIChhbmQgd2UncmUgZG9pbmcgcGlwZWxpbmVpbmcpIHRoZW4gd2Ug
Y2FuIHBpcGVsaW5lCithIHJlcG9uc2Ugd2l0aCB0aGUgb25lIGZvbGxvd2luZy4gKi8KKworc3Rh
dGljIEJPT0wKK3BpcGVsaW5lX3Jlc3BvbnNlKHZvaWQpCit7CitpZiAoICAhc210cF9lbmZvcmNl
X3N5bmMgfHwgIXNlbmRlcl9ob3N0X2FkZHJlc3MKKyAgIHx8IGYuc2VuZGVyX2hvc3Rfbm90c29j
a2V0IHx8ICFmLnNtdHBfaW5fcGlwZWxpbmluZ19hZHZlcnRpc2VkKQorICByZXR1cm4gRkFMU0U7
CisKK2lmICh3b3VsZGJsb2NrX3JlYWRpbmcoKSkgcmV0dXJuIEZBTFNFOworZi5zbXRwX2luX3Bp
cGVsaW5pbmdfdXNlZCA9IFRSVUU7CityZXR1cm4gVFJVRTsKK30KKworCisjaWZuZGVmIERJU0FC
TEVfUElQRV9DT05ORUNUCitzdGF0aWMgQk9PTAorcGlwZWxpbmVfY29ubmVjdF9zZW5kcyh2b2lk
KQoreworaWYgKCFzZW5kZXJfaG9zdF9hZGRyZXNzIHx8IGYuc2VuZGVyX2hvc3Rfbm90c29ja2V0
IHx8ICFmbC5waXBlX2Nvbm5lY3RfYWNjZXB0YWJsZSkKKyAgcmV0dXJuIEZBTFNFOworCitpZiAo
d291bGRibG9ja19yZWFkaW5nKCkpIHJldHVybiBGQUxTRTsKK2Yuc210cF9pbl9lYXJseV9waXBl
X3VzZWQgPSBUUlVFOworcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYKKwogLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgU01UUCBjb21t
YW5kIHJlYWQgdGltZW91dCAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTA3NCwyNSArMTA5NCw2IEBACiAKICNpZmRl
ZiBTVVBQT1JUX1BST1hZCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgotKiAgICAgUmVzdG9yZSBzb2NrZXQgdGltZW91dCB0byBwcmV2aW91cyB2YWx1
ZSAgICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0vKiBJZiB0aGUgcHJldmlvdXMgdmFsdWUgd2FzIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQsIHJl
c3RvcmUKLWl0IGJlZm9yZSByZXR1cm5pbmcgY29udHJvbCB0byB0aGUgbm9uLXByb3h5IHJvdXRp
bmVzCi0KLUFyZ3VtZW50czogZmQgICAgIC0gRmlsZSBkZXNjcmlwdG9yIGZvciBpbnB1dAotICAg
ICAgICAgICBnZXRfb2sgLSBTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHByZXZpb3VzIHZhbHVlcwot
ICAgICAgICAgICB0dnRtcCAgLSBUaW1lIHN0cnVjdCB3aXRoIHByZXZpb3VzIHZhbHVlcwotICAg
ICAgICAgICB2c2xlbiAgLSBMZW5ndGggb2YgdGltZSBzdHJ1Y3QKLVJldHVybnM6ICAgbm9uZQot
Ki8KLXN0YXRpYyB2b2lkCi1yZXN0b3JlX3NvY2tldF90aW1lb3V0KGludCBmZCwgaW50IGdldF9v
aywgc3RydWN0IHRpbWV2YWwgKiB0dnRtcCwgc29ja2xlbl90IHZzbGVuKQotewotaWYgKGdldF9v
ayA9PSAwKQotICAodm9pZCkgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8s
IENTIHR2dG1wLCB2c2xlbik7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCiAqICAgICAgIENoZWNrIGlmIGhvc3QgaXMgcmVxdWlyZWQgcHJv
eHkgaG9zdCAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KIC8qIFRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGluYm91bmQgaG9zdCB3aWxs
IGJlIGEgcmVndWxhciBzbXRwIGhvc3QKQEAgLTExNjgsNyArMTE2OSw3IEBACiAKIHdoaWxlIChj
YXBhY2l0eSA+IDApCiAgIHsKLSAgZG8geyByZXQgPSByZWN2KGZkLCB0bywgMSwgMCk7IH0gd2hp
bGUgKHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgIGRvIHsgcmV0ID0gcmVhZChmZCwg
dG8sIDEpOyB9IHdoaWxlIChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIgJiYgIWhhZF9jb21t
YW5kX3RpbWVvdXQpOwogICBpZiAocmV0ID09IC0xKQogICAgIHJldHVybiAtMTsKICAgaGF2ZSsr
OwpAQCAtMTI3MiwyMCArMTI3MywxMSBAQAogaW50IGZkID0gZmlsZW5vKHNtdHBfaW4pOwogY29u
c3QgY2hhciB2MnNpZ1sxMl0gPSAiXHgwRFx4MEFceDBEXHgwQVx4MDBceDBEXHgwQVx4NTFceDU1
XHg0OVx4NTRceDBBIjsKIHVzY2hhciAqIGlwdHlwZTsgIC8qIFRvIGRpc3BsYXkgZGVidWcgaW5m
byAqLwotc3RydWN0IHRpbWV2YWwgdHY7Ci1zdHJ1Y3QgdGltZXZhbCB0dnRtcDsKIHNvY2tsZW5f
dCB2c2xlbiA9IHNpemVvZihzdHJ1Y3QgdGltZXZhbCk7CiBCT09MIHlpZWxkID0gRkFMU0U7CiAK
LS8qIFNhdmUgY3VycmVudCBzb2NrZXQgdGltZW91dCB2YWx1ZXMgKi8KLWdldF9vayA9IGdldHNv
Y2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBDUyAmdHZ0bXAsICZ2c2xlbik7Ci0K
LS8qIFByb3h5IFByb3RvY29sIGhvc3QgbXVzdCBzZW5kIGhlYWRlciB3aXRoaW4gYSBzaG9ydCB0
aW1lCi0oZGVmYXVsdCAzIHNlY29uZHMpIG9yIGl0J3MgY29uc2lkZXJlZCBpbnZhbGlkICovCi10
di50dl9zZWMgID0gUFJPWFlfTkVHT1RJQVRJT05fVElNRU9VVF9TRUM7Ci10di50dl91c2VjID0g
UFJPWFlfTkVHT1RJQVRJT05fVElNRU9VVF9VU0VDOwotaWYgKHNldHNvY2tvcHQoZmQsIFNPTF9T
T0NLRVQsIFNPX1JDVlRJTUVPLCBDUyAmdHYsIHNpemVvZih0dikpIDwgMCkKLSAgZ290byBiYWQ7
Citvc19ub25fcmVzdGFydGluZ19zaWduYWwoU0lHQUxSTSwgY29tbWFuZF90aW1lb3V0X2hhbmRs
ZXIpOworQUxBUk0ocHJveHlfcHJvdG9jb2xfdGltZW91dCk7CiAKIGRvCiAgIHsKQEAgLTEyOTMs
OSArMTI4NSw5IEBACiAgIGRvbid0IGRvIGEgUEVFSyBpbnRvIHRoZSBkYXRhLCBhY3R1YWxseSBz
bHVycCB1cCBlbm91Z2ggdG8gYmUKICAgInNhZmUiLiBDYW4ndCB0YWtlIGl0IGFsbCBiZWNhdXNl
IFRMUy1vbi1jb25uZWN0IGNsaWVudHMgZm9sbG93CiAgIGltbWVkaWF0ZWx5IHdpdGggVExTIGhh
bmRzaGFrZS4gKi8KLSAgcmV0ID0gcmVjdihmZCwgJmhkciwgUFJPWFlfSU5JVElBTF9SRUFELCAw
KTsKKyAgcmV0ID0gcmVhZChmZCwgJmhkciwgUFJPWFlfSU5JVElBTF9SRUFEKTsKICAgfQotICB3
aGlsZSAocmV0ID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKyAgd2hpbGUgKHJldCA9PSAtMSAm
JiBlcnJubyA9PSBFSU5UUiAmJiAhaGFkX2NvbW1hbmRfdGltZW91dCk7CiAKIGlmIChyZXQgPT0g
LTEpCiAgIGdvdG8gcHJveHlmYWlsOwpAQCAtMTMwOSw4ICsxMzAxLDggQEAKICAgLyogRmlyc3Qg
Z2V0IHRoZSBsZW5ndGggZmllbGRzLiAqLwogICBkbwogICAgIHsKLSAgICByZXRtb3JlID0gcmVj
dihmZCwgKHVzY2hhciopJmhkciArIHJldCwgUFJPWFlfVjJfSEVBREVSX1NJWkUgLSBQUk9YWV9J
TklUSUFMX1JFQUQsIDApOwotICAgIH0gd2hpbGUgKHJldG1vcmUgPT0gLTEgJiYgZXJybm8gPT0g
RUlOVFIpOworICAgIHJldG1vcmUgPSByZWFkKGZkLCAodXNjaGFyKikmaGRyICsgcmV0LCBQUk9Y
WV9WMl9IRUFERVJfU0laRSAtIFBST1hZX0lOSVRJQUxfUkVBRCk7CisgICAgfSB3aGlsZSAocmV0
bW9yZSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUiAmJiAhaGFkX2NvbW1hbmRfdGltZW91dCk7CiAg
IGlmIChyZXRtb3JlID09IC0xKQogICAgIGdvdG8gcHJveHlmYWlsOwogICByZXQgKz0gcmV0bW9y
ZTsKQEAgLTEzNDYsOCArMTMzOCw4IEBACiAgICAgewogICAgIGRvCiAgICAgICB7Ci0gICAgICBy
ZXRtb3JlID0gcmVjdihmZCwgKHVzY2hhciopJmhkciArIHJldCwgc2l6ZS1yZXQsIDApOwotICAg
ICAgfSB3aGlsZSAocmV0bW9yZSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICByZXRt
b3JlID0gcmVhZChmZCwgKHVzY2hhciopJmhkciArIHJldCwgc2l6ZS1yZXQpOworICAgICAgfSB3
aGlsZSAocmV0bW9yZSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUiAmJiAhaGFkX2NvbW1hbmRfdGlt
ZW91dCk7CiAgICAgaWYgKHJldG1vcmUgPT0gLTEpCiAgICAgICBnb3RvIHByb3h5ZmFpbDsKICAg
ICByZXQgKz0gcmV0bW9yZTsKQEAgLTE1NzUsNyArMTU2Nyw4IEBACiBzaG91bGQgY2F1c2UgYSBz
eW5jaHJvbml6YXRpb24gZmFpbHVyZSAqLwogCiBwcm94eWZhaWw6Ci0gIHJlc3RvcmVfc29ja2V0
X3RpbWVvdXQoZmQsIGdldF9vaywgJnR2dG1wLCB2c2xlbik7CisgIERFQlVHKERfcmVjZWl2ZSkg
aWYgKGhhZF9jb21tYW5kX3RpbWVvdXQpCisgICAgZGVidWdfcHJpbnRmKCJUaW1lb3V0IHdoaWxl
IHJlYWRpbmcgcHJveHkgaGVhZGVyXG4iKTsKIAogYmFkOgogICBpZiAoeWllbGQpCkBAIC0xNTkx
LDYgKzE1ODQsNyBAQAogICAgICAgZGVidWdfcHJpbnRmKCJGYWlsdXJlIHRvIGV4dHJhY3QgcHJv
eGllZCBob3N0LCBvbmx5IFFVSVQgYWxsb3dlZFxuIik7CiAgICAgfQogCitBTEFSTSgwKTsKIHJl
dHVybjsKIH0KICNlbmRpZgpAQCAtMTY4MSwxMiArMTY3NSwxMyBAQAogCXx8IHNtdHBfY21kX2J1
ZmZlcltwLT5sZW5dID09ICcgJwogICAgICApICApCiAgICAgewotICAgIGlmIChzbXRwX2lucHRy
IDwgc210cF9pbmVuZCAmJiAgICAgICAgICAgICAgICAgICAgIC8qIE91dHN0YW5kaW5nIGlucHV0
ICovCi0gICAgICAgIHAtPmNtZCA8IHN5bmNfY21kX2xpbWl0ICYmICAgICAgICAgICAgICAgICAg
ICAgLyogQ29tbWFuZCBzaG91bGQgc3luYyAqLwotICAgICAgICBjaGVja19zeW5jICYmICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGZsYWcgc2V0ICovCi0gICAgICAg
IHNtdHBfZW5mb3JjZV9zeW5jICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2xvYmFs
IGZsYWcgc2V0ICovCi0gICAgICAgIHNlbmRlcl9ob3N0X2FkZHJlc3MgIT0gTlVMTCAmJiAgICAg
ICAgICAgICAgICAgLyogTm90IGxvY2FsIGlucHV0ICovCi0gICAgICAgICFmLnNlbmRlcl9ob3N0
X25vdHNvY2tldCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFsbHkgaXMgYSBzb2NrZXQg
Ki8KKyAgICBpZiAoICAgc210cF9pbnB0ciA8IHNtdHBfaW5lbmQJCS8qIE91dHN0YW5kaW5nIGlu
cHV0ICovCisgICAgICAgJiYgIHAtPmNtZCA8IHN5bmNfY21kX2xpbWl0CQkvKiBDb21tYW5kIHNo
b3VsZCBzeW5jICovCisgICAgICAgJiYgIGNoZWNrX3N5bmMJCQkJLyogTG9jYWwgZmxhZyBzZXQg
Ki8KKyAgICAgICAmJiAgc210cF9lbmZvcmNlX3N5bmMJCQkvKiBHbG9iYWwgZmxhZyBzZXQgKi8K
KyAgICAgICAmJiAgc2VuZGVyX2hvc3RfYWRkcmVzcyAhPSBOVUxMCQkvKiBOb3QgbG9jYWwgaW5w
dXQgKi8KKyAgICAgICAmJiAgIWYuc2VuZGVyX2hvc3Rfbm90c29ja2V0CQkvKiBSZWFsbHkgaXMg
YSBzb2NrZXQgKi8KKyAgICAgICApCiAgICAgICByZXR1cm4gQkFEU1lOX0NNRDsKIAogICAgIC8q
IFRoZSB2YXJpYWJsZXMgJHNtdHBfY29tbWFuZCBhbmQgJHNtdHBfY29tbWFuZF9hcmd1bWVudCBw
b2ludCBpbnRvIHRoZQpAQCAtMTczNSw3ICsxNzMwLDggQEAKICAgICYmIGNoZWNrX3N5bmMJCQkv
KiBMb2NhbCBmbGFnIHNldCAqLwogICAgJiYgc210cF9lbmZvcmNlX3N5bmMJCQkvKiBHbG9iYWwg
ZmxhZyBzZXQgKi8KICAgICYmIHNlbmRlcl9ob3N0X2FkZHJlc3MJCS8qIE5vdCBsb2NhbCBpbnB1
dCAqLwotICAgJiYgIWYuc2VuZGVyX2hvc3Rfbm90c29ja2V0KQkJLyogUmVhbGx5IGlzIGEgc29j
a2V0ICovCisgICAmJiAhZi5zZW5kZXJfaG9zdF9ub3Rzb2NrZXQJCS8qIFJlYWxseSBpcyBhIHNv
Y2tldCAqLworICAgKQogICByZXR1cm4gQkFEU1lOX0NNRDsKIAogcmV0dXJuIE9USEVSX0NNRDsK
QEAgLTE3NjEsNyArMTc1Nyw3IEBACiAqLwogCiB2b2lkCi1zbXRwX2Nsb3NlZG93bih1c2NoYXIg
Km1lc3NhZ2UpCitzbXRwX2Nsb3NlZG93bih1c2NoYXIgKiBtZXNzYWdlKQogewogaWYgKCFzbXRw
X2luIHx8IHNtdHBfYmF0Y2hlZF9pbnB1dCkgcmV0dXJuOwogcmVjZWl2ZV9zd2FsbG93X3NtdHAo
KTsKQEAgLTE3NzMsNiArMTc2OSw3IEBACiAgICAgcmV0dXJuOwogCiAgIGNhc2UgUVVJVF9DTUQ6
CisgICAgZi5zbXRwX2luX3F1aXQgPSBUUlVFOwogICAgIHNtdHBfcHJpbnRmKCIyMjEgJXMgY2xv
c2luZyBjb25uZWN0aW9uXHJcbiIsIEZBTFNFLCBzbXRwX2FjdGl2ZV9ob3N0bmFtZSk7CiAgICAg
bWFjX3NtdHBfZmZsdXNoKCk7CiAgICAgcmV0dXJuOwpAQCAtMTg0MSw3ICsxODM4LDcgQEAKIGlm
IChMT0dHSU5HKHRsc19jaXBoZXIpICYmIHRsc19pbi5jaXBoZXIpCiAgIHsKICAgZyA9IHN0cmlu
Z19hcHBlbmQoZywgMiwgVVMiIFg9IiwgdGxzX2luLmNpcGhlcik7Ci0jaWZkZWYgRVhQRVJJTUVO
VEFMX1RMU19SRVNVTUUKKyNpZm5kZWYgRElTQUJMRV9UTFNfUkVTVU1FCiAgIGlmIChMT0dHSU5H
KHRsc19yZXN1bXB0aW9uKSAmJiB0bHNfaW4ucmVzdW1wdGlvbiAmIFJFU1VNRV9VU0VEKQogICAg
IGcgPSBzdHJpbmdfY2F0bihnLCBVUyIqIiwgMSk7CiAjZW5kaWYKQEAgLTE4NjEsNyArMTg1OCw3
IEBACiBzdGF0aWMgZ3N0cmluZyAqCiBzX2Nvbm5oYWRfbG9nKGdzdHJpbmcgKiBnKQogewotdXNj
aGFyICogc2VwID0gc210cF9jb25uZWN0aW9uX2hhZFtTTVRQX0hCVUZGX1NJWkUtMV0gIT0gU0NI
X05PTkUKK2NvbnN0IHVzY2hhciAqIHNlcCA9IHNtdHBfY29ubmVjdGlvbl9oYWRbU01UUF9IQlVG
Rl9TSVpFLTFdICE9IFNDSF9OT05FCiAgID8gVVMiIEM9Li4uIiA6IFVTIiBDPSI7CiAKIGZvciAo
aW50IGkgPSBzbXRwX2NoX2luZGV4OyBpIDwgU01UUF9IQlVGRl9TSVpFOyBpKyspCkBAIC0xODcw
LDExICsxODY3LDggQEAKICAgICBnID0gc3RyaW5nX2FwcGVuZChnLCAyLCBzZXAsIHNtdHBfbmFt
ZXNbc210cF9jb25uZWN0aW9uX2hhZFtpXV0pOwogICAgIHNlcCA9IFVTIiwiOwogICAgIH0KLWZv
ciAoaW50IGkgPSAwOyBpIDwgc210cF9jaF9pbmRleDsgaSsrKQotICB7Citmb3IgKGludCBpID0g
MDsgaSA8IHNtdHBfY2hfaW5kZXg7IGkrKywgc2VwID0gVVMiLCIpCiAgIGcgPSBzdHJpbmdfYXBw
ZW5kKGcsIDIsIHNlcCwgc210cF9uYW1lc1tzbXRwX2Nvbm5lY3Rpb25faGFkW2ldXSk7Ci0gIHNl
cCA9IFVTIiwiOwotICB9CiByZXR1cm4gZzsKIH0KIApAQCAtMjA5NCwzMCArMjA4OCwzMiBAQAog
ICByYXdfcmVjaXBpZW50c19jb3VudCA9IHJlY2lwaWVudHNfY291bnQgPSByZWNpcGllbnRzX2xp
c3RfbWF4ID0gMDsKIG1lc3NhZ2VfbGluZWNvdW50ID0gMDsKIG1lc3NhZ2Vfc2l6ZSA9IC0xOwor
bWVzc2FnZV9ib2R5ID0gbWVzc2FnZV9ib2R5X2VuZCA9IE5VTEw7CiBhY2xfYWRkZWRfaGVhZGVy
cyA9IE5VTEw7CiBhY2xfcmVtb3ZlZF9oZWFkZXJzID0gTlVMTDsKIGYucXVldWVfb25seV9wb2xp
Y3kgPSBGQUxTRTsKIHJjcHRfc210cF9yZXNwb25zZSA9IE5VTEw7CiBmbC5yY3B0X3NtdHBfcmVz
cG9uc2Vfc2FtZSA9IFRSVUU7CiBmbC5yY3B0X2luX3Byb2dyZXNzID0gRkFMU0U7Ci1mLmRlbGl2
ZXJfZnJlZXplID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FuIGJl
IHNldCBieSBBQ0wgKi8KLWZyZWV6ZV90ZWxsID0gZnJlZXplX3RlbGxfY29uZmlnOyAgICAgICAg
ICAgICAgICAgICAgLyogQ2FuIGJlIHNldCBieSBBQ0wgKi8KLWZha2VfcmVzcG9uc2UgPSBPSzsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FuIGJlIHNldCBieSBBQ0wgKi8K
K2YuZGVsaXZlcl9mcmVlemUgPSBGQUxTRTsJCQkJLyogQ2FuIGJlIHNldCBieSBBQ0wgKi8KK2Zy
ZWV6ZV90ZWxsID0gZnJlZXplX3RlbGxfY29uZmlnOwkJCS8qIENhbiBiZSBzZXQgYnkgQUNMICov
CitmYWtlX3Jlc3BvbnNlID0gT0s7CQkJCQkvKiBDYW4gYmUgc2V0IGJ5IEFDTCAqLwogI2lmZGVm
IFdJVEhfQ09OVEVOVF9TQ0FOCi1mLm5vX21ib3hfdW5zcG9vbCA9IEZBTFNFOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyogQ2FuIGJlIHNldCBieSBBQ0wgKi8KK2Yubm9fbWJveF91bnNw
b29sID0gRkFMU0U7CQkJCS8qIENhbiBiZSBzZXQgYnkgQUNMICovCiAjZW5kaWYKLWYuc3VibWlz
c2lvbl9tb2RlID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYW4gYmUg
c2V0IGJ5IEFDTCAqLworZi5zdWJtaXNzaW9uX21vZGUgPSBGQUxTRTsJCQkJLyogQ2FuIGJlIHNl
dCBieSBBQ0wgKi8KIGYuc3VwcHJlc3NfbG9jYWxfZml4dXBzID0gZi5zdXBwcmVzc19sb2NhbF9m
aXh1cHNfZGVmYXVsdDsgLyogQ2FuIGJlIHNldCBieSBBQ0wgKi8KLWYuYWN0aXZlX2xvY2FsX2Zy
b21fY2hlY2sgPSBsb2NhbF9mcm9tX2NoZWNrOyAgICAgICAgICAvKiBDYW4gYmUgc2V0IGJ5IEFD
TCAqLwotZi5hY3RpdmVfbG9jYWxfc2VuZGVyX3JldGFpbiA9IGxvY2FsX3NlbmRlcl9yZXRhaW47
ICAgIC8qIENhbiBiZSBzZXQgYnkgQUNMICovCitmLmFjdGl2ZV9sb2NhbF9mcm9tX2NoZWNrID0g
bG9jYWxfZnJvbV9jaGVjazsJCS8qIENhbiBiZSBzZXQgYnkgQUNMICovCitmLmFjdGl2ZV9sb2Nh
bF9zZW5kZXJfcmV0YWluID0gbG9jYWxfc2VuZGVyX3JldGFpbjsJLyogQ2FuIGJlIHNldCBieSBB
Q0wgKi8KIHNlbmRpbmdfaXBfYWRkcmVzcyA9IE5VTEw7CiByZXR1cm5fcGF0aCA9IHNlbmRlcl9h
ZGRyZXNzID0gTlVMTDsKIGRlbGl2ZXJfbG9jYWxwYXJ0X2RhdGEgPSBkZWxpdmVyX2RvbWFpbl9k
YXRhID0KIHJlY2lwaWVudF9kYXRhID0gc2VuZGVyX2RhdGEgPSBOVUxMOwkJCS8qIENhbiBiZSBz
ZXQgYnkgQUNMICovCityZWNpcGllbnRfdmVyaWZ5X2ZhaWx1cmUgPSBOVUxMOwogZGVsaXZlcl9s
b2NhbHBhcnRfcGFyZW50ID0gZGVsaXZlcl9sb2NhbHBhcnRfb3JpZyA9IE5VTEw7CiBkZWxpdmVy
X2RvbWFpbl9wYXJlbnQgPSBkZWxpdmVyX2RvbWFpbl9vcmlnID0gTlVMTDsKIGNhbGxvdXRfYWRk
cmVzcyA9IE5VTEw7Ci1zdWJtaXNzaW9uX25hbWUgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIENhbiBiZSBzZXQgYnkgQUNMICovCitzdWJtaXNzaW9uX25hbWUgPSBOVUxM
OwkJCQkJLyogQ2FuIGJlIHNldCBieSBBQ0wgKi8KIHJhd19zZW5kZXIgPSBOVUxMOyAgICAgICAg
ICAgICAgICAgIC8qIEFmdGVyIFNNVFAgcmV3cml0ZSwgYmVmb3JlIHF1YWxpZnlpbmcgKi8KIHNl
bmRlcl9hZGRyZXNzX3VucmV3cml0dGVuID0gTlVMTDsgIC8qIFNldCBvbmx5IGFmdGVyIHZlcmlm
eSByZXdyaXRlICovCiBzZW5kZXJfdmVyaWZpZWRfbGlzdCA9IE5VTEw7ICAgICAgICAvKiBObyBz
ZW5kZXJzIHZlcmlmaWVkICovCkBAIC0yMTcxLDIzICsyMTY3LDcgQEAKIAogYWNsX3Zhcl9tID0g
TlVMTDsKIAotLyogVGhlIG1lc3NhZ2UgYm9keSB2YXJpYWJsZXMgdXNlIG1hbGxvYyBzdG9yZS4g
VGhleSBtYXkgYmUgc2V0IGlmIHRoaXMgaXMKLW5vdCB0aGUgZmlyc3QgbWVzc2FnZSBpbiBhbiBT
TVRQIHNlc3Npb24gYW5kIHRoZSBwcmV2aW91cyBtZXNzYWdlIGNhdXNlZCB0aGVtCi10byBiZSBy
ZWZlcmVuY2VkIGluIGFuIEFDTC4gKi8KLQotaWYgKG1lc3NhZ2VfYm9keSkKLSAgewotICBzdG9y
ZV9mcmVlKG1lc3NhZ2VfYm9keSk7Ci0gIG1lc3NhZ2VfYm9keSA9IE5VTEw7Ci0gIH0KLQotaWYg
KG1lc3NhZ2VfYm9keV9lbmQpCi0gIHsKLSAgc3RvcmVfZnJlZShtZXNzYWdlX2JvZHlfZW5kKTsK
LSAgbWVzc2FnZV9ib2R5X2VuZCA9IE5VTEw7Ci0gIH0KLQotLyogV2FybmluZyBsb2cgbWVzc2Fn
ZXMgYXJlIGFsc28gc2F2ZWQgaW4gbWFsbG9jIHN0b3JlLiBUaGV5IGFyZSBzYXZlZCB0byBhdm9p
ZAorLyogV2FybmluZyBsb2cgbWVzc2FnZXMgYXJlIHNhdmVkIGluIG1hbGxvYyBzdG9yZS4gVGhl
eSBhcmUgc2F2ZWQgdG8gYXZvaWQKIHJlcGV0aXRpb24gaW4gdGhlIHNhbWUgbWVzc2FnZSwgYnV0
IGl0IHNlZW1zIHJpZ2h0IHRvIHJlcGVhdCB0aGVtIGZvciBkaWZmZXJlbnQKIG1lc3NhZ2VzLiAq
LwogCkBAIC0yMTk3LDcgKzIxNzcsMTEgQEAKICAgYWNsX3dhcm5fbG9nZ2VkID0gYWNsX3dhcm5f
bG9nZ2VkLT5uZXh0OwogICBzdG9yZV9mcmVlKHRoaXMpOwogICB9CisKK21lc3NhZ2VfdGlkeXVw
KCk7CiBzdG9yZV9yZXNldChyZXNldF9wb2ludCk7CisKK21lc3NhZ2Vfc3RhcnQoKTsKIHJldHVy
biBzdG9yZV9tYXJrKCk7CiB9CiAKQEAgLTIyNzQsNyArMjI1OCw3IEBACiAKICAgICBjYXNlIE1B
SUxfQ01EOgogICAgICAgc210cF9tYWlsY21kX2NvdW50Kys7ICAgICAgICAgICAgICAvKiBDb3Vu
dCBmb3Igbm8tbWFpbCBsb2cgKi8KLSAgICAgIGlmIChzZW5kZXJfYWRkcmVzcyAhPSBOVUxMKQor
ICAgICAgaWYgKHNlbmRlcl9hZGRyZXNzKQogCS8qIFRoZSBmdW5jdGlvbiBtb2FuX3NtdHBfYmF0
Y2goKSBkb2VzIG5vdCByZXR1cm4uICovCiAJbW9hbl9zbXRwX2JhdGNoKHNtdHBfY21kX2J1ZmZl
ciwgIjUwMyBTZW5kZXIgYWxyZWFkeSBnaXZlbiIpOwogCkBAIC0yNDE3LDggKzI0MDEsOSBAQAog
ICAgICAgYnJlYWs7CiAKIAotICAgIGNhc2UgRU9GX0NNRDoKICAgICBjYXNlIFFVSVRfQ01EOgor
ICAgICAgZi5zbXRwX2luX3F1aXQgPSBUUlVFOworICAgIGNhc2UgRU9GX0NNRDoKICAgICAgIGRv
bmUgPSAyOwogICAgICAgYnJlYWs7CiAKQEAgLTI0NTAsOSArMjQzNSw5IEBACiAKICNpZm5kZWYg
RElTQUJMRV9UTFMKIHN0YXRpYyBCT09MCi1zbXRwX2xvZ190bHNfZmFpbCh1c2NoYXIgKiBlcnJz
dHIpCitzbXRwX2xvZ190bHNfZmFpbChjb25zdCB1c2NoYXIgKiBlcnJzdHIpCiB7Ci11c2NoYXIg
KiBjb25uX2luZm8gPSBzbXRwX2dldF9jb25uZWN0aW9uX2luZm8oKTsKK2NvbnN0IHVzY2hhciAq
IGNvbm5faW5mbyA9IHNtdHBfZ2V0X2Nvbm5lY3Rpb25faW5mbygpOwogCiBpZiAoVXN0cm5jbXAo
Y29ubl9pbmZvLCBVUyJTTVRQICIsIDUpID09IDApIGNvbm5faW5mbyArPSA1OwogLyogSSdkIGxp
a2UgdG8gZ2V0IHNlcGFyYXRlZCBIPSBoZXJlLCBidXQgdG9vIGhhcmQgZm9yIG5vdyAqLwpAQCAt
MjU4MCw3ICsyNTY1LDcgQEAKIAogLyogQWxsb3cgZm9yIHRyYWlsaW5nIDAgaW4gdGhlIGNvbW1h
bmQgYW5kIGRhdGEgYnVmZmVycy4gIFRhaW50ZWQuICovCiAKLXNtdHBfY21kX2J1ZmZlciA9IHN0
b3JlX2dldF9wZXJtKDIqU01UUF9DTURfQlVGRkVSX1NJWkUgKyAyLCBUUlVFKTsKK3NtdHBfY21k
X2J1ZmZlciA9IHN0b3JlX2dldF9wZXJtKDIqU01UUF9DTURfQlVGRkVSX1NJWkUgKyAyLCBHRVRf
VEFJTlRFRCk7CiAKIHNtdHBfY21kX2J1ZmZlclswXSA9IDA7CiBzbXRwX2RhdGFfYnVmZmVyID0g
c210cF9jbWRfYnVmZmVyICsgU01UUF9DTURfQlVGRkVSX1NJWkUgKyAxOwpAQCAtMjYwMSwyNSAr
MjU4NiwyMSBAQAogICAgIChzZW5kZXJfaG9zdF9hZGRyZXNzID8gcHJvdG9jb2xzIDogcHJvdG9j
b2xzX2xvY2FsKSBbcG5vcm1hbF07CiAKIC8qIFNldCB1cCB0aGUgYnVmZmVyIGZvciBpbnB1dHRp
bmcgdXNpbmcgZGlyZWN0IHJlYWQoKSBjYWxscywgYW5kIGFycmFuZ2UgdG8KLWNhbGwgdGhlIGxv
Y2FsIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBDIG9uZXMuICBQbGFjZSBhIE5V
TCBhdCB0aGUKLWVuZCBvZiB0aGUgYnVmZmVyIHRvIHNhZmV0eS1zdG9wIEMtc3RyaW5nIHJlYWRz
IGZyb20gaXQuICovCitjYWxsIHRoZSBsb2NhbCBmdW5jdGlvbnMgaW5zdGVhZCBvZiB0aGUgc3Rh
bmRhcmQgQyBvbmVzLiAqLwogCi1pZiAoIShzbXRwX2luYnVmZmVyID0gVVMgbWFsbG9jKElOX0JV
RkZFUl9TSVpFKSkpCi0gIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLCAibWFs
bG9jKCkgZmFpbGVkIGZvciBTTVRQIGlucHV0IGJ1ZmZlciIpOwotc210cF9pbmJ1ZmZlcltJTl9C
VUZGRVJfU0laRS0xXSA9ICdcMCc7CitzbXRwX2J1Zl9pbml0KCk7CiAKIHJlY2VpdmVfZ2V0YyA9
IHNtdHBfZ2V0YzsKIHJlY2VpdmVfZ2V0YnVmID0gc210cF9nZXRidWY7CiByZWNlaXZlX2dldF9j
YWNoZSA9IHNtdHBfZ2V0X2NhY2hlOworcmVjZWl2ZV9oYXNjID0gc210cF9oYXNjOwogcmVjZWl2
ZV91bmdldGMgPSBzbXRwX3VuZ2V0YzsKIHJlY2VpdmVfZmVvZiA9IHNtdHBfZmVvZjsKIHJlY2Vp
dmVfZmVycm9yID0gc210cF9mZXJyb3I7Ci1yZWNlaXZlX3NtdHBfYnVmZmVyZWQgPSBzbXRwX2J1
ZmZlcmVkOwogbHdyX3JlY2VpdmVfZ2V0YyA9IE5VTEw7CiBsd3JfcmVjZWl2ZV9nZXRidWYgPSBO
VUxMOworbHdyX3JlY2VpdmVfaGFzYyA9IE5VTEw7CiBsd3JfcmVjZWl2ZV91bmdldGMgPSBOVUxM
Owotc210cF9pbnB0ciA9IHNtdHBfaW5lbmQgPSBzbXRwX2luYnVmZmVyOwotc210cF9oYWRfZW9m
ID0gc210cF9oYWRfZXJyb3IgPSAwOwogCiAvKiBTZXQgdXAgdGhlIG1lc3NhZ2Ugc2l6ZSBsaW1p
dDsgdGhpcyBtYXkgYmUgaG9zdC1zcGVjaWZpYyAqLwogCkBAIC0yNjk0LDcgKzI2NzUsNyBAQAog
ICAgIHsKICAgICAjaWYgT1BUU1RZTEUgPT0gMQogICAgIEVYSU1fU09DS0xFTl9UIG9wdGxlbiA9
IHNpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykgKyBNQVhfSVBPUFRMRU47Ci0gICAgc3RydWN0IGlw
X29wdGlvbnMgKmlwb3B0ID0gc3RvcmVfZ2V0KG9wdGxlbiwgRkFMU0UpOworICAgIHN0cnVjdCBp
cF9vcHRpb25zICppcG9wdCA9IHN0b3JlX2dldChvcHRsZW4sIEdFVF9VTlRBSU5URUQpOwogICAg
ICNlbGlmIE9QVFNUWUxFID09IDIKICAgICBzdHJ1Y3QgaXBfb3B0cyBpcG9wdGJsb2NrOwogICAg
IHN0cnVjdCBpcF9vcHRzICppcG9wdCA9ICZpcG9wdGJsb2NrOwpAQCAtMjk3Myw4ICsyOTU0LDgg
QEAKICAgLyogRGV0ZXJtaW5lIHdoZXRoZXIgSEVMTy9FSExPIGlzIHJlcXVpcmVkIGZvciB0aGlz
IGhvc3QuIFRoZSByZXF1aXJlbWVudAogICBjYW4gYmUgaGFyZCBvciBzb2Z0LiAqLwogCi0gIGZs
LmhlbG9fcmVxdWlyZWQgPSB2ZXJpZnlfY2hlY2tfaG9zdCgmaGVsb192ZXJpZnlfaG9zdHMpID09
IE9LOwotICBpZiAoIWZsLmhlbG9fcmVxdWlyZWQpCisgIGZsLmhlbG9fdmVyaWZ5X3JlcXVpcmVk
ID0gdmVyaWZ5X2NoZWNrX2hvc3QoJmhlbG9fdmVyaWZ5X2hvc3RzKSA9PSBPSzsKKyAgaWYgKCFm
bC5oZWxvX3ZlcmlmeV9yZXF1aXJlZCkKICAgICBmbC5oZWxvX3ZlcmlmeSA9IHZlcmlmeV9jaGVj
a19ob3N0KCZoZWxvX3RyeV92ZXJpZnlfaG9zdHMpID09IE9LOwogCiAgIC8qIERldGVybWluZSB3
aGV0aGVyIHRoaXMgaG9zdHMgaXMgcGVybWl0dGVkIHRvIHNlbmQgc3ludGFjdGljIGp1bmsKQEAg
LTI5ODgsNyArMjk2OSw3IEBACiBpZiAoc210cF9iYXRjaGVkX2lucHV0KSByZXR1cm4gVFJVRTsK
IAogLyogSWYgdmFsaWQgUHJveHkgUHJvdG9jb2wgc291cmNlIGlzIGNvbm5lY3RpbmcsIHNldCB1
cCBzZXNzaW9uLgotICogRmFpbHVyZSB3aWxsIG5vdCBhbGxvdyBhbnkgU01UUCBmdW5jdGlvbiBv
dGhlciB0aGFuIFFVSVQuICovCitGYWlsdXJlIHdpbGwgbm90IGFsbG93IGFueSBTTVRQIGZ1bmN0
aW9uIG90aGVyIHRoYW4gUVVJVC4gKi8KIAogI2lmZGVmIFNVUFBPUlRfUFJPWFkKIHByb3h5X3Nl
c3Npb24gPSBGQUxTRTsKQEAgLTI5OTcsMTYgKzI5NzgsMTYgQEAKICAgc2V0dXBfcHJveHlfcHJv
dG9jb2xfaG9zdCgpOwogI2VuZGlmCiAKLSAgLyogU3RhcnQgdXAgVExTIGlmIHRsc19vbl9jb25u
ZWN0IGlzIHNldC4gVGhpcyBpcyBmb3Igc3VwcG9ydGluZyB0aGUgbGVnYWN5Ci0gIHNtdHBzIHBv
cnQgZm9yIHVzZSB3aXRoIG9sZGVyIHN0eWxlIFNTTCBNVEFzLiAqLworLyogU3RhcnQgdXAgVExT
IGlmIHRsc19vbl9jb25uZWN0IGlzIHNldC4gVGhpcyBpcyBmb3Igc3VwcG9ydGluZyB0aGUgbGVn
YWN5CitzbXRwcyBwb3J0IGZvciB1c2Ugd2l0aCBvbGRlciBzdHlsZSBTU0wgTVRBcy4gKi8KIAog
I2lmbmRlZiBESVNBQkxFX1RMUwotICBpZiAodGxzX2luLm9uX2Nvbm5lY3QpCi0gICAgewotICAg
IGlmICh0bHNfc2VydmVyX3N0YXJ0KHRsc19yZXF1aXJlX2NpcGhlcnMsICZ1c2VyX21zZykgIT0g
T0spCi0gICAgICByZXR1cm4gc210cF9sb2dfdGxzX2ZhaWwodXNlcl9tc2cpOwotICAgIGNtZF9s
aXN0W0NNRF9MSVNUX1RMU19BVVRIXS5pc19tYWlsX2NtZCA9IFRSVUU7Ci0gICAgfQoraWYgKHRs
c19pbi5vbl9jb25uZWN0KQorICB7CisgIGlmICh0bHNfc2VydmVyX3N0YXJ0KCZ1c2VyX21zZykg
IT0gT0spCisgICAgcmV0dXJuIHNtdHBfbG9nX3Rsc19mYWlsKHVzZXJfbXNnKTsKKyAgY21kX2xp
c3RbQ01EX0xJU1RfVExTX0FVVEhdLmlzX21haWxfY21kID0gVFJVRTsKKyAgfQogI2VuZGlmCiAK
IC8qIFJ1biB0aGUgY29ubmVjdCBBQ0wgaWYgaXQgZXhpc3RzICovCkBAIC0zMDUyLDcgKzMwMzMs
NyBAQAogCiBwID0gcyArIFVzdHJsZW4ocyk7CiB3aGlsZSAocCA+IHMgJiYgaXNzcGFjZShwWy0x
XSkpIHAtLTsKLSpwID0gMDsKK3MgPSBzdHJpbmdfY29weW4ocywgcC1zKTsKIAogLyogSXQgc2Vl
bXMgdGhhdCBDQzpNYWlsIGlzIGJyYWluZGVhZCwgYW5kIGFzc3VtZXMgdGhhdCB0aGUgZ3JlZXRp
bmcgbWVzc2FnZQogaXMgYWxsIGNvbnRhaW5lZCBpbiBhIHNpbmdsZSBJUCBwYWNrZXQuIFRoZSBv
cmlnaW5hbCBjb2RlIHdyb3RlIG91dCB0aGUKQEAgLTMyMzIsNyArMzIxMyw3IEBACiAKIGlmIChm
bC5yY3B0X2luX3Byb2dyZXNzKQogICB7Ci0gIGlmIChyY3B0X3NtdHBfcmVzcG9uc2UgPT0gTlVM
TCkKKyAgaWYgKCFyY3B0X3NtdHBfcmVzcG9uc2UpCiAgICAgcmNwdF9zbXRwX3Jlc3BvbnNlID0g
c3RyaW5nX2NvcHkobXNnKTsKICAgZWxzZSBpZiAoZmwucmNwdF9zbXRwX3Jlc3BvbnNlX3NhbWUg
JiYKICAgICAgICAgICAgVXN0cmNtcChyY3B0X3NtdHBfcmVzcG9uc2UsIG1zZykgIT0gMCkKQEAg
LTMyNDcsNyArMzIyOCw3IEBACiBmb3IgKDs7KQogICB7CiAgIHVzY2hhciAqbmwgPSBVc3RyY2hy
KG1zZywgJ1xuJyk7Ci0gIGlmIChubCA9PSBOVUxMKQorICBpZiAoIW5sKQogICAgIHsKICAgICBz
bXRwX3ByaW50ZigiJS4zcyVjJS4qcyVzXHJcbiIsICFmaW5hbCwgY29kZSwgZmluYWwgPyAnICc6
Jy0nLCBlc2NsZW4sIGVzYywgbXNnKTsKICAgICByZXR1cm47CkBAIC0zMzAzLDI3ICszMjg0LDI2
IEBACiBzbXRwX21lc3NhZ2VfY29kZSh1c2NoYXIgKipjb2RlLCBpbnQgKmNvZGVsZW4sIHVzY2hh
ciAqKm1zZywgdXNjaGFyICoqbG9nX21zZywKICAgQk9PTCBjaGVja192YWxpZCkKIHsKLWludCBu
OwotaW50IG92ZWN0b3JbM107Cit1c2NoYXIgKiBtYXRjaDsKK2ludCBsZW47CiAKLWlmICghbXNn
IHx8ICEqbXNnKSByZXR1cm47Ci0KLWlmICgobiA9IHBjcmVfZXhlYyhyZWdleF9zbXRwX2NvZGUs
IE5VTEwsIENTICptc2csIFVzdHJsZW4oKm1zZyksIDAsCi0gIFBDUkVfRU9QVCwgb3ZlY3Rvciwg
c2l6ZW9mKG92ZWN0b3IpL3NpemVvZihpbnQpKSkgPCAwKSByZXR1cm47CitpZiAoIW1zZyB8fCAh
Km1zZyB8fCAhcmVnZXhfbWF0Y2gocmVnZXhfc210cF9jb2RlLCAqbXNnLCAtMSwgJm1hdGNoKSkK
KyAgcmV0dXJuOwogCitsZW4gPSBVc3RybGVuKG1hdGNoKTsKIGlmIChjaGVja192YWxpZCAmJiAo
Km1zZylbMF0gIT0gKCpjb2RlKVswXSkKICAgewogICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9H
X1BBTklDLCAiY29uZmlndXJlZCBlcnJvciBjb2RlIHN0YXJ0cyB3aXRoICIKICAgICAiaW5jb3Jy
ZWN0IGRpZ2l0IChleHBlY3RlZCAlYykgaW4gXCIlc1wiIiwgKCpjb2RlKVswXSwgKm1zZyk7Ci0g
IGlmIChsb2dfbXNnICE9IE5VTEwgJiYgKmxvZ19tc2cgPT0gKm1zZykKLSAgICAqbG9nX21zZyA9
IHN0cmluZ19zcHJpbnRmKCIlcyAlcyIsICpjb2RlLCAqbG9nX21zZyArIG92ZWN0b3JbMV0pOwor
ICBpZiAobG9nX21zZyAmJiAqbG9nX21zZyA9PSAqbXNnKQorICAgICpsb2dfbXNnID0gc3RyaW5n
X3NwcmludGYoIiVzICVzIiwgKmNvZGUsICpsb2dfbXNnICsgbGVuKTsKICAgfQogZWxzZQogICB7
CiAgICpjb2RlID0gKm1zZzsKLSAgKmNvZGVsZW4gPSBvdmVjdG9yWzFdOyAgICAvKiBJbmNsdWRl
cyBmaW5hbCBzcGFjZSAqLworICAqY29kZWxlbiA9IGxlbjsgICAgLyogSW5jbHVkZXMgZmluYWwg
c3BhY2UgKi8KICAgfQotKm1zZyArPSBvdmVjdG9yWzFdOyAgICAgICAgIC8qIENob3AgdGhlIGNv
ZGUgb2ZmIHRoZSBtZXNzYWdlICovCisqbXNnICs9IGxlbjsgICAgICAgICAvKiBDaG9wIHRoZSBj
b2RlIG9mZiB0aGUgbWVzc2FnZSAqLwogcmV0dXJuOwogfQogCkBAIC0zMzc0LDE4ICszMzU0LDcg
QEAKIHVzY2hhciAqc210cF9jb2RlOwogdXNjaGFyICpsb2dubDsKIHVzY2hhciAqc2VuZGVyX2lu
Zm8gPSBVUyIiOwotdXNjaGFyICp3aGF0ID0KLSNpZmRlZiBXSVRIX0NPTlRFTlRfU0NBTgotICB3
aGVyZSA9PSBBQ0xfV0hFUkVfTUlNRSA/IFVTImR1cmluZyBNSU1FIEFDTCBjaGVja3MiIDoKLSNl
bmRpZgotICB3aGVyZSA9PSBBQ0xfV0hFUkVfUFJFREFUQSA/IFVTIkRBVEEiIDoKLSAgd2hlcmUg
PT0gQUNMX1dIRVJFX0RBVEEgPyBVUyJhZnRlciBEQVRBIiA6Ci0jaWZuZGVmIERJU0FCTEVfUFJE
UgotICB3aGVyZSA9PSBBQ0xfV0hFUkVfUFJEUiA/IFVTImFmdGVyIERBVEEgUFJEUiIgOgotI2Vu
ZGlmCi0gIHNtdHBfY21kX2RhdGEgPwotICAgIHN0cmluZ19zcHJpbnRmKCIlcyAlcyIsIGFjbF93
aGVyZW5hbWVzW3doZXJlXSwgc210cF9jbWRfZGF0YSkgOgotICAgIHN0cmluZ19zcHJpbnRmKCIl
cyBpbiBcImNvbm5lY3RcIiBBQ0wiLCBhY2xfd2hlcmVuYW1lc1t3aGVyZV0pOwordXNjaGFyICp3
aGF0OwogCiBpZiAoZHJvcCkgcmMgPSBGQUlMOwogCkBAIC0zNDAxLDE5ICszMzcwLDQ1IEBACiB0
aGlzIGlzIHdoYXQgc2hvdWxkIGJlIGxvZ2dlZCwgc28gSSd2ZSBjaGFuZ2VkIHRvIGxvZ2dpbmcg
dGhlIHVucmV3cml0dGVuCiBhZGRyZXNzIHRvIHJldGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5
LiAqLwogCi0jaWZuZGVmIFdJVEhfQ09OVEVOVF9TQ0FOCi1pZiAod2hlcmUgPT0gQUNMX1dIRVJF
X1JDUFQgfHwgd2hlcmUgPT0gQUNMX1dIRVJFX0RBVEEpCi0jZWxzZQotaWYgKHdoZXJlID09IEFD
TF9XSEVSRV9SQ1BUIHx8IHdoZXJlID09IEFDTF9XSEVSRV9EQVRBIHx8IHdoZXJlID09IEFDTF9X
SEVSRV9NSU1FKQorc3dpdGNoICh3aGVyZSkKKyAgeworI2lmZGVmIFdJVEhfQ09OVEVOVF9TQ0FO
CisgIGNhc2UgQUNMX1dIRVJFX01JTUU6CQl3aGF0ID0gVVMiZHVyaW5nIE1JTUUgQUNMIGNoZWNr
cyI7CWJyZWFrOworI2VuZGlmCisgIGNhc2UgQUNMX1dIRVJFX1BSRURBVEE6CXdoYXQgPSBVUyJE
QVRBIjsJCQlicmVhazsKKyAgY2FzZSBBQ0xfV0hFUkVfREFUQToJCXdoYXQgPSBVUyJhZnRlciBE
QVRBIjsJCQlicmVhazsKKyNpZm5kZWYgRElTQUJMRV9QUkRSCisgIGNhc2UgQUNMX1dIRVJFX1BS
RFI6CQl3aGF0ID0gVVMiYWZ0ZXIgREFUQSBQUkRSIjsJCWJyZWFrOwogI2VuZGlmCisgIGRlZmF1
bHQ6CisgICAgeworICAgIHVzY2hhciAqIHBsYWNlID0gc210cF9jbWRfZGF0YSA/IHNtdHBfY21k
X2RhdGEgOiBVUyJpbiBcImNvbm5lY3RcIiBBQ0wiOworICAgIGludCBsaW0gPSAxMDA7CisKKyAg
ICBpZiAod2hlcmUgPT0gQUNMX1dIRVJFX0FVVEgpCS8qIGF2b2lkIGxvZ2dpbmcgYXV0aCBjcmVk
cyAqLworICAgICAgeworICAgICAgdXNjaGFyICogczsKKyAgICAgIGZvciAocyA9IHNtdHBfY21k
X2RhdGE7ICpzICYmICFpc3NwYWNlKCpzKTsgKSBzKys7CisgICAgICBsaW0gPSBzIC0gc210cF9j
bWRfZGF0YTsJLyogYXRvcCBhZnRlciBtZXRob2QgKi8KKyAgICAgIH0KKyAgICB3aGF0ID0gc3Ry
aW5nX3NwcmludGYoIiVzICUuKnMiLCBhY2xfd2hlcmVuYW1lc1t3aGVyZV0sIGxpbSwgcGxhY2Up
OworICAgIH0KKyAgfQorc3dpdGNoICh3aGVyZSkKICAgewotICBzZW5kZXJfaW5mbyA9IHN0cmlu
Z19zcHJpbnRmKCJGPTwlcz4lcyVzJXMlcyAiLAotICAgIHNlbmRlcl9hZGRyZXNzX3VucmV3cml0
dGVuID8gc2VuZGVyX2FkZHJlc3NfdW5yZXdyaXR0ZW4gOiBzZW5kZXJfYWRkcmVzcywKLSAgICBz
ZW5kZXJfaG9zdF9hdXRoZW50aWNhdGVkID8gVVMiIEE9IiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogVVMiIiwKLSAgICBzZW5kZXJfaG9zdF9hdXRoZW50aWNhdGVkID8gc2Vu
ZGVyX2hvc3RfYXV0aGVudGljYXRlZCAgICAgICAgICAgICAgICAgIDogVVMiIiwKLSAgICBzZW5k
ZXJfaG9zdF9hdXRoZW50aWNhdGVkICYmIGF1dGhlbnRpY2F0ZWRfaWQgPyBVUyI6IiAgICAgICAg
ICAgICAgICAgIDogVVMiIiwKLSAgICBzZW5kZXJfaG9zdF9hdXRoZW50aWNhdGVkICYmIGF1dGhl
bnRpY2F0ZWRfaWQgPyBhdXRoZW50aWNhdGVkX2lkICAgICAgIDogVVMiIgotICAgICk7CisgIGNh
c2UgQUNMX1dIRVJFX1JDUFQ6CisgIGNhc2UgQUNMX1dIRVJFX0RBVEE6CisjaWZkZWYgV0lUSF9D
T05URU5UX1NDQU4KKyAgY2FzZSBBQ0xfV0hFUkVfTUlNRToKKyNlbmRpZgorICAgIHNlbmRlcl9p
bmZvID0gc3RyaW5nX3NwcmludGYoIkY9PCVzPiVzJXMlcyVzICIsCisgICAgICBzZW5kZXJfYWRk
cmVzc191bnJld3JpdHRlbiA/IHNlbmRlcl9hZGRyZXNzX3VucmV3cml0dGVuIDogc2VuZGVyX2Fk
ZHJlc3MsCisgICAgICBzZW5kZXJfaG9zdF9hdXRoZW50aWNhdGVkID8gVVMiIEE9IiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVVMiIiwKKyAgICAgIHNlbmRlcl9ob3N0X2F1
dGhlbnRpY2F0ZWQgPyBzZW5kZXJfaG9zdF9hdXRoZW50aWNhdGVkICAgICAgICAgICAgICAgICAg
OiBVUyIiLAorICAgICAgc2VuZGVyX2hvc3RfYXV0aGVudGljYXRlZCAmJiBhdXRoZW50aWNhdGVk
X2lkID8gVVMiOiIgICAgICAgICAgICAgICAgICA6IFVTIiIsCisgICAgICBzZW5kZXJfaG9zdF9h
dXRoZW50aWNhdGVkICYmIGF1dGhlbnRpY2F0ZWRfaWQgPyBhdXRoZW50aWNhdGVkX2lkICAgICAg
IDogVVMiIgorICAgICAgKTsKKyAgYnJlYWs7CiAgIH0KIAogLyogSWYgdGhlcmUncyBiZWVuIGEg
c2VuZGVyIHZlcmlmaWNhdGlvbiBmYWlsdXJlIHdpdGggYSBzcGVjaWZpYyBtZXNzYWdlLCBhbmQK
QEAgLTM3NzUsNiArMzc3MCwxMiBAQAogY29uc3QgdXNjaGFyICpzZXRfaWQgPSBOVUxMOwogaW50
IHJjOwogCisvKiBTZXQgdXAgZ2xvYmFscyBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKworYXV0aGVu
dGljYXRvcl9uYW1lID0gYXUtPm5hbWU7Citkcml2ZXJfc3JjZmlsZSA9IGF1LT5zcmNmaWxlOwor
ZHJpdmVyX3NyY2xpbmUgPSBhdS0+c3JjbGluZTsKKwogLyogUnVuIHRoZSBjaGVja2luZyBjb2Rl
LCBwYXNzaW5nIHRoZSByZW1haW5kZXIgb2YgdGhlIGNvbW1hbmQgbGluZSBhcwogZGF0YS4gSW5p
dGlhbHMgdGhlICRhdXRoPG4+IHZhcmlhYmxlcyBhcyBlbXB0eS4gSW5pdGlhbGl6ZSAkMCBlbXB0
eSBhbmQgc2V0CiBpdCBhcyB0aGUgb25seSBzZXQgbnVtZXJpY2FsIHZhcmlhYmxlLiBUaGUgYXV0
aGVudGljYXRvciBtYXkgc2V0ICRhdXRoPG4+CkBAIC0zNzk1LDYgKzM3OTYsNyBAQAogaWYgKGF1
LT5zZXRfaWQpIHNldF9pZCA9IGV4cGFuZF9zdHJpbmcoYXUtPnNldF9pZCk7CiBleHBhbmRfbm1h
eCA9IC0xOyAgICAgICAgLyogUmVzZXQgbnVtZXJpYyB2YXJpYWJsZXMgKi8KIGZvciAoaW50IGkg
PSAwOyBpIDwgQVVUSF9WQVJTOyBpKyspIGF1dGhfdmFyc1tpXSA9IE5VTEw7ICAgLyogUmVzZXQg
JGF1dGg8bj4gKi8KK2RyaXZlcl9zcmNmaWxlID0gYXV0aGVudGljYXRvcl9uYW1lID0gTlVMTDsg
ZHJpdmVyX3NyY2xpbmUgPSAwOwogCiAvKiBUaGUgdmFsdWUgb2YgYXV0aGVudGljYXRlZF9pZCBp
cyBzdG9yZWQgaW4gdGhlIHNwb29sIGZpbGUgYW5kIHByaW50ZWQgaW4KIGxvZyBsaW5lcy4gSXQg
bXVzdCBub3QgY29udGFpbiBiaW5hcnkgemVyb3Mgb3IgbmV3bGluZSBjaGFyYWN0ZXJzLiBJbgpA
QCAtMzkwNywxNyArMzkwOSwxNiBAQAogc210cF9xdWl0X2hhbmRsZXIodXNjaGFyICoqIHVzZXJf
bXNncCwgdXNjaGFyICoqIGxvZ19tc2dwKQogewogSEFEKFNDSF9RVUlUKTsKK2Yuc210cF9pbl9x
dWl0ID0gVFJVRTsKIGluY29tcGxldGVfdHJhbnNhY3Rpb25fbG9nKFVTIlFVSVQiKTsKLWlmIChh
Y2xfc210cF9xdWl0KQotICB7Ci0gIGludCByYyA9IGFjbF9jaGVjayhBQ0xfV0hFUkVfUVVJVCwg
TlVMTCwgYWNsX3NtdHBfcXVpdCwgdXNlcl9tc2dwLCBsb2dfbXNncCk7Ci0gIGlmIChyYyA9PSBF
UlJPUikKK2lmICggIGFjbF9zbXRwX3F1aXQKKyAgICYmIGFjbF9jaGVjayhBQ0xfV0hFUkVfUVVJ
VCwgTlVMTCwgYWNsX3NtdHBfcXVpdCwgdXNlcl9tc2dwLCBsb2dfbXNncCkKKwk9PSBFUlJPUikK
ICAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAiQUNMIGZvciBRVUlUIHJldHVy
bmVkIEVSUk9SOiAlcyIsCiAgICAgICAqbG9nX21zZ3ApOwotICB9CiAKLSNpZmRlZiBUQ1BfQ09S
SwotKHZvaWQpIHNldHNvY2tvcHQoZmlsZW5vKHNtdHBfb3V0KSwgSVBQUk9UT19UQ1AsIFRDUF9D
T1JLLCBVUyAmb24sIHNpemVvZihvbikpOworI2lmZGVmIEVYSU1fVENQX0NPUksKKyh2b2lkKSBz
ZXRzb2Nrb3B0KGZpbGVubyhzbXRwX291dCksIElQUFJPVE9fVENQLCBFWElNX1RDUF9DT1JLLCBV
UyAmb24sIHNpemVvZihvbikpOwogI2VuZGlmCiAKIGlmICgqdXNlcl9tc2dwKQpAQCAtMzkyNSwx
MiArMzkyNiwyNyBAQAogZWxzZQogICBzbXRwX3ByaW50ZigiMjIxICVzIGNsb3NpbmcgY29ubmVj
dGlvblxyXG4iLCBGQUxTRSwgc210cF9hY3RpdmVfaG9zdG5hbWUpOwogCi0jaWZuZGVmIERJU0FC
TEVfVExTCisjaWZkZWYgU0VSVkVSU0lERV9DTE9TRV9OT1dBSVQKKyMgaWZuZGVmIERJU0FCTEVf
VExTCiB0bHNfY2xvc2UoTlVMTCwgVExTX1NIVVRET1dOX05PV0FJVCk7Ci0jZW5kaWYKKyMgZW5k
aWYKIAogbG9nX3dyaXRlKExfc210cF9jb25uZWN0aW9uLCBMT0dfTUFJTiwgIiVzIGNsb3NlZCBi
eSBRVUlUIiwKICAgc210cF9nZXRfY29ubmVjdGlvbl9pbmZvKCkpOworI2Vsc2UKKworIyBpZm5k
ZWYgRElTQUJMRV9UTFMKK3Rsc19jbG9zZShOVUxMLCBUTFNfU0hVVERPV05fV0FJVCk7CisjIGVu
ZGlmCisKK2xvZ193cml0ZShMX3NtdHBfY29ubmVjdGlvbiwgTE9HX01BSU4sICIlcyBjbG9zZWQg
YnkgUVVJVCIsCisgIHNtdHBfZ2V0X2Nvbm5lY3Rpb25faW5mbygpKTsKKworLyogUGF1c2UsIGhv
cGluZyBjbGllbnQgd2lsbCBGSU4gZmlyc3Qgc28gdGhhdCB0aGV5IGdldCB0aGUgVElNRV9XQUlU
LgorVGhlIHNvY2tldCBzaG91bGQgYmVjb21lIHJlYWRibGUgKHRob3VnaCB3aXRoIG5vIGRhdGEp
ICovCisKKyh2b2lkKSBwb2xsX29uZV9mZChmaWxlbm8oc210cF9pbiksIFBPTExJTiwgMjAwKTsK
KyNlbmRpZgkvKiFTRVJWRVJTSURFX0NMT1NFX05PV0FJVCovCiB9CiAKIApAQCAtMzk0MSw5ICsz
OTU3LDE4IEBACiBpbmNvbXBsZXRlX3RyYW5zYWN0aW9uX2xvZyhVUyJSU0VUIik7CiBzbXRwX3By
aW50ZigiMjUwIFJlc2V0IE9LXHJcbiIsIEZBTFNFKTsKIGNtZF9saXN0W0NNRF9MSVNUX1JTRVRd
LmlzX21haWxfY21kID0gRkFMU0U7CitpZiAoY2h1bmtpbmdfc3RhdGUgPiBDSFVOS0lOR19PRkZF
UkVEKQorICBjaHVua2luZ19zdGF0ZSA9IENIVU5LSU5HX09GRkVSRUQ7CiB9CiAKIAorc3RhdGlj
IGludAorZXhwYW5kX21haWxtYXgoY29uc3QgdXNjaGFyICogcykKK3sKK2lmICghKHMgPSBleHBh
bmRfY3N0cmluZyhzKSkpCisgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUMsICJmYWls
ZWQgdG8gZXhwYW5kIHNtdHBfYWNjZXB0X21heF9wZXJfY29ubmVjdGlvbiIpOworcmV0dXJuICpz
ID8gVWF0b2kocykgOiAwOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgogKiAgICAgICBJbml0aWFsaXplIGZvciBTTVRQIGluY29taW5nIG1l
c3NhZ2UgICAgICoKQEAgLTQwMTcsNiArNDA0MiwxMiBAQAogCiBpZiAoc210cF9iYXRjaGVkX2lu
cHV0KSByZXR1cm4gc210cF9zZXR1cF9iYXRjaF9tc2coKTsKIAorI2lmZGVmIFRDUF9RVUlDS0FD
SworaWYgKHNtdHBfaW4pCQkvKiBBdm9pZCBwdXJlLUFDS3Mgd2hpbGUgaW4gY21kIHBpbmdwb25n
IHBoYXNlICovCisgICh2b2lkKSBzZXRzb2Nrb3B0KGZpbGVubyhzbXRwX2luKSwgSVBQUk9UT19U
Q1AsIFRDUF9RVUlDS0FDSywKKwkgIFVTICZvZmYsIHNpemVvZihvZmYpKTsKKyNlbmRpZgorCiAv
KiBEZWFsIHdpdGggU01UUCBjb21tYW5kcy4gVGhpcyBsb29wIGlzIGV4aXRlZCBieSBzZXR0aW5n
IGRvbmUgdG8gYSBQT1NJVElWRQogdmFsdWUuIFRoZSB2YWx1ZXMgYXJlIDIgbGFyZ2VyIHRoYW4g
dGhlIHJlcXVpcmVkIHlpZWxkIG9mIHRoZSBmdW5jdGlvbi4gKi8KIApAQCAtNDA3NCwxMiArNDEw
NSw2IEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBUQ1BfUVVJQ0tBQ0sKLSAgaWYgKHNtdHBf
aW4pCQkvKiBBdm9pZCBwdXJlLUFDS3Mgd2hpbGUgaW4gY21kIHBpbmdwb25nIHBoYXNlICovCi0g
ICAgKHZvaWQpIHNldHNvY2tvcHQoZmlsZW5vKHNtdHBfaW4pLCBJUFBST1RPX1RDUCwgVENQX1FV
SUNLQUNLLAotCSAgICBVUyAmb2ZmLCBzaXplb2Yob2ZmKSk7Ci0jZW5kaWYKLQogICBzd2l0Y2go
c210cF9yZWFkX2NvbW1hbmQoCiAjaWZuZGVmIERJU0FCTEVfUElQRV9DT05ORUNUCiAJICAhZmwu
cGlwZV9jb25uZWN0X2FjY2VwdGFibGUsCkBAIC00MTQwLDIxICs0MTY1LDE4IEBACiAgICAgICAv
KiBGaW5kIHRoZSBuYW1lIG9mIHRoZSByZXF1ZXN0ZWQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNt
LiAqLwogCiAgICAgICBzID0gc210cF9jbWRfZGF0YTsKLSAgICAgIHdoaWxlICgoYyA9ICpzbXRw
X2NtZF9kYXRhKSAhPSAwICYmICFpc3NwYWNlKGMpKQotCXsKKyAgICAgIGZvciAoOyAoYyA9ICpz
bXRwX2NtZF9kYXRhKSAmJiAhaXNzcGFjZShjKTsgc210cF9jbWRfZGF0YSsrKQogCWlmICghaXNh
bG51bShjKSAmJiBjICE9ICctJyAmJiBjICE9ICdfJykKIAkgIHsKIAkgIGRvbmUgPSBzeW5wcm90
X2Vycm9yKExfc210cF9zeW50YXhfZXJyb3IsIDUwMSwgTlVMTCwKIAkgICAgVVMiaW52YWxpZCBj
aGFyYWN0ZXIgaW4gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIG5hbWUiKTsKIAkgIGdvdG8gQ09N
TUFORF9MT09QOwogCSAgfQotCXNtdHBfY21kX2RhdGErKzsKLQl9CiAKICAgICAgIC8qIElmIG5v
dCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCB3ZSBtdXN0IGJlIGF0IHdoaXRlIHNwYWNlLiBUZXJt
aW5hdGUgdGhlCiAgICAgICBuYW1lIGFuZCBtb3ZlIHRoZSBwb2ludGVyIG9uIHRvIGFueSBkYXRh
IHRoYXQgbWF5IGJlIHByZXNlbnQuICovCiAKLSAgICAgIGlmICgqc210cF9jbWRfZGF0YSAhPSAw
KQorICAgICAgaWYgKCpzbXRwX2NtZF9kYXRhKQogCXsKIAkqc210cF9jbWRfZGF0YSsrID0gMDsK
IAl3aGlsZSAoaXNzcGFjZSgqc210cF9jbWRfZGF0YSkpIHNtdHBfY21kX2RhdGErKzsKQEAgLTQy
NDYsNyArNDI2OCw3IEBACiAgICAgICAvKiBJZiBzZW5kZXJfaG9zdF91bmtub3duIGlzIHRydWUs
IHdlIGhhdmUgZ290IGhlcmUgdmlhIHRoZSAtYnMgaW50ZXJmYWNlLAogICAgICAgbm90IGNhbGxl
ZCBmcm9tIGluZXRkLiBPdGhlcndpc2UsIHdlIGFyZSBydW5uaW5nIGFuIElQIGNvbm5lY3Rpb24g
YW5kIHRoZQogICAgICAgaG9zdCBhZGRyZXNzIHdpbGwgYmUgc2V0LiBJZiB0aGUgaGVsbyBuYW1l
IGlzIHRoZSBwcmltYXJ5IG5hbWUgb2YgdGhpcwotICAgICAgaG9zdCBhbmQgd2UgaGF2ZW4ndCBk
b25lIGEgcmV2ZXJzZSBsb29rdXAsIGZvcmNlIG9uZSBub3cuIElmIGhlbG9fcmVxdWlyZWQKKyAg
ICAgIGhvc3QgYW5kIHdlIGhhdmVuJ3QgZG9uZSBhIHJldmVyc2UgbG9va3VwLCBmb3JjZSBvbmUg
bm93LiBJZiBoZWxvX3ZlcmlmeV9yZXF1aXJlZAogICAgICAgaXMgc2V0LCBlbnN1cmUgdGhhdCB0
aGUgSEVMTyBuYW1lIG1hdGNoZXMgdGhlIGFjdHVhbCBob3N0LiBJZiBoZWxvX3ZlcmlmeQogICAg
ICAgaXMgc2V0LCBkbyB0aGUgc2FtZSBjaGVjaywgYnV0IHNvZnRseS4gKi8KIApAQCAtNDI3NCwx
OSArNDI5NiwxOSBAQAogCSAgdGxzX2luLmFjdGl2ZS5zb2NrID49IDAgPyAiIFRMUyIgOiAiIiwg
aG9zdF9hbmRfaWRlbnQoRkFMU0UpKTsKIAogCS8qIFZlcmlmeSBpZiBjb25maWd1cmVkLiBUaGlz
IGRvZXNuJ3QgZ2l2ZSBtdWNoIHNlY3VyaXR5LCBidXQgaXQgZG9lcwotCW1ha2Ugc29tZSBwZW9w
bGUgaGFwcHkgdG8gYmUgYWJsZSB0byBkbyBpdC4gSWYgaGVsb19yZXF1aXJlZCBpcyBzZXQsCisJ
bWFrZSBzb21lIHBlb3BsZSBoYXBweSB0byBiZSBhYmxlIHRvIGRvIGl0LiBJZiBoZWxvX3Zlcmlm
eV9yZXF1aXJlZCBpcyBzZXQsCiAJKGhvc3QgbWF0Y2hlcyBoZWxvX3ZlcmlmeV9ob3N0cykgZmFp
bHVyZSBmb3JjZXMgcmVqZWN0aW9uLiBJZiBoZWxvX3ZlcmlmeQogCWlzIHNldCAoaG9zdCBtYXRj
aGVzIGhlbG9fdHJ5X3ZlcmlmeV9ob3N0cyksIGl0IGRvZXMgbm90LiBUaGlzIGlzIHBlcmhhcHMK
IAlub3cgb2Jzb2xlc2NlbnQsIHNpbmNlIHRoZSB2ZXJpZmljYXRpb24gY2FuIG5vdyBiZSByZXF1
ZXN0ZWQgc2VsZWN0aXZlbHkKIAlhdCBBQ0wgdGltZS4gKi8KIAogCWYuaGVsb192ZXJpZmllZCA9
IGYuaGVsb192ZXJpZnlfZmFpbGVkID0gc2VuZGVyX2hlbG9fZG5zc2VjID0gRkFMU0U7Ci0JaWYg
KGZsLmhlbG9fcmVxdWlyZWQgfHwgZmwuaGVsb192ZXJpZnkpCisJaWYgKGZsLmhlbG9fdmVyaWZ5
X3JlcXVpcmVkIHx8IGZsLmhlbG9fdmVyaWZ5KQogCSAgewogCSAgQk9PTCB0ZW1wZmFpbCA9ICFz
bXRwX3ZlcmlmeV9oZWxvKCk7CiAJICBpZiAoIWYuaGVsb192ZXJpZmllZCkKIAkgICAgewotCSAg
ICBpZiAoZmwuaGVsb19yZXF1aXJlZCkKKwkgICAgaWYgKGZsLmhlbG9fdmVyaWZ5X3JlcXVpcmVk
KQogCSAgICAgIHsKIAkgICAgICBzbXRwX3ByaW50ZigiJWQgJXMgYXJndW1lbnQgZG9lcyBub3Qg
bWF0Y2ggY2FsbGluZyBob3N0XHJcbiIsIEZBTFNFLAogCQl0ZW1wZmFpbD8gNDUxIDogNTUwLCBo
ZWxsbyk7CkBAIC00MzQyLDExICs0MzY0LDE0IEBACiAgICAgICBmbC5zbXRwdXRmOF9hZHZlcnRp
c2VkID0gRkFMU0U7CiAjZW5kaWYKIAorICAgICAgLyogRXhwYW5kIHRoZSBwZXItY29ubmVjdGlv
biBtZXNzYWdlIGNvdW50IGxpbWl0IG9wdGlvbiAqLworICAgICAgc210cF9tYWlsY21kX21heCA9
IGV4cGFuZF9tYWlsbWF4KHNtdHBfYWNjZXB0X21heF9wZXJfY29ubmVjdGlvbik7CisKICAgICAg
IHNtdHBfY29kZSA9IFVTIjI1MCAiOyAgICAgICAgLyogRGVmYXVsdCByZXNwb25zZSBjb2RlIHBs
dXMgc3BhY2UqLwogICAgICAgaWYgKCF1c2VyX21zZykKIAl7CiAJLyogc2VuZGVyX2hvc3RfbmFt
ZSBiZWxvdyB3aWxsIGJlIHRhaW50ZWQsIHNvIHNhdmUgb24gY29weSB3aGVuIHdlIGhpdCBpdCAq
LwotCWcgPSBzdHJpbmdfZ2V0X3RhaW50ZWQoMjQsIFRSVUUpOworCWcgPSBzdHJpbmdfZ2V0X3Rh
aW50ZWQoMjQsIEdFVF9UQUlOVEVEKTsKIAlnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywgIiUuM3Mg
JXMgSGVsbG8gJXMlcyVzIiwKIAkgIHNtdHBfY29kZSwKIAkgIHNtdHBfYWN0aXZlX2hvc3RuYW1l
LApAQCAtNDQwMSw2ICs0NDI2LDE5IEBACiAJICBnID0gc3RyaW5nX2NhdG4oZywgVVMiLVNJWkVc
clxuIiwgNyk7CiAJICB9CiAKKyNpZmRlZiBFWFBFUklNRU5UQUxfRVNNVFBfTElNSVRTCisJaWYg
KCAgKHNtdHBfbWFpbGNtZF9tYXggPiAwIHx8IHJlY2lwaWVudHNfbWF4KQorCSAgICYmIHZlcmlm
eV9jaGVja19ob3N0KCZsaW1pdHNfYWR2ZXJ0aXNlX2hvc3RzKSA9PSBPSykKKwkgIHsKKwkgIGcg
PSBzdHJpbmdfZm10X2FwcGVuZChnLCAiJS4zcy1MSU1JVFMiLCBzbXRwX2NvZGUpOworCSAgaWYg
KHNtdHBfbWFpbGNtZF9tYXggPiAwKQorCSAgICBnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywgIiBN
QUlMTUFYPSVkIiwgc210cF9tYWlsY21kX21heCk7CisJICBpZiAocmVjaXBpZW50c19tYXgpCisJ
ICAgIGcgPSBzdHJpbmdfZm10X2FwcGVuZChnLCAiIFJDUFRNQVg9JWQiLCByZWNpcGllbnRzX21h
eCk7CisJICBnID0gc3RyaW5nX2NhdG4oZywgVVMiXHJcbiIsIDIpOworCSAgfQorI2VuZGlmCisK
IAkvKiBFeGltIGRvZXMgbm90IGRvIHByb3RvY29sIGNvbnZlcnNpb24gb3IgZGF0YSBjb252ZXJz
aW9uLiBJdCBpcyA4LWJpdAogCWNsZWFuOyBpZiBpdCBoYXMgYW4gOC1iaXQgY2hhcmFjdGVyIGlu
IGl0cyBoYW5kLCBpdCBqdXN0IHNlbmRzIGl0LiBJdAogCWNhbm5vdCB0aGVyZWZvcmUgc3BlY2lm
eSA4QklUTUlNRSBhbmQgcmVtYWluIGNvbnNpc3RlbnQgd2l0aCB0aGUgUkZDcy4KQEAgLTQ1Nzcs
MTkgKzQ2MTUsMTQgQEAKICMgZW5kaWYKICAgICAgIGVsc2UKICNlbmRpZgorCSh2b2lkKSBmd3Jp
dGUoZy0+cywgMSwgZy0+cHRyLCBzbXRwX291dCk7CiAKLQl7Ci0JaW50IGkgPSBmd3JpdGUoZy0+
cywgMSwgZy0+cHRyLCBzbXRwX291dCk7IGkgPSBpOyAvKiBjb21waWxlciBxdWlldGVuaW5nICov
Ci0JfQotICAgICAgREVCVUcoRF9yZWNlaXZlKQotCXsKLQl1c2NoYXIgKmNyOwotCi0JKHZvaWQp
IHN0cmluZ19mcm9tX2dzdHJpbmcoZyk7Ci0Jd2hpbGUgKChjciA9IFVzdHJjaHIoZy0+cywgJ1xy
JykpICE9IE5VTEwpICAgLyogbG9zZSBDUnMgKi8KLQkgIG1lbW1vdmUoY3IsIGNyICsgMSwgKGct
PnB0ci0tKSAtIChjciAtIGctPnMpKTsKLQlkZWJ1Z19wcmludGYoIlNNVFA+PiAlcyIsIGctPnMp
OwotCX0KKyAgICAgIERFQlVHKERfcmVjZWl2ZSkgZm9yIChjb25zdCB1c2NoYXIgKiB0LCAqIHMg
PSBzdHJpbmdfZnJvbV9nc3RyaW5nKGcpOworCQkJICAgIHMgJiYgKHQgPSBVc3RyY2hyKHMsICdc
cicpKTsKKwkJCSAgICBzID0gdCArIDIpCQkJCS8qIFxyXG4gKi8KKwkgIGRlYnVnX3ByaW50Zigi
JXMgJS4qc1xuIiwKKwkJCXMgPT0gZy0+cyA/ICJTTVRQPj4iIDogIiAgICAgICIsCisJCQkoaW50
KSh0IC0gcyksIHMpOwogICAgICAgZmwuaGVsb19zZWVuID0gVFJVRTsKIAogICAgICAgLyogUmVz
ZXQgdGhlIHByb3RvY29sIGFuZCB0aGUgc3RhdGUsIGFiYW5kb25pbmcgYW55IHByZXZpb3VzIG1l
c3NhZ2UuICovCkBAIC00NjE1LDE2ICs0NjQ4LDIxIEBACiAgICAgY2FzZSBNQUlMX0NNRDoKICAg
ICAgIEhBRChTQ0hfTUFJTCk7CiAgICAgICBzbXRwX21haWxjbWRfY291bnQrKzsgICAgICAgICAg
ICAgIC8qIENvdW50IGZvciBsaW1pdCBhbmQgcmF0ZWxpbWl0ICovCisgICAgICBtZXNzYWdlX3N0
YXJ0KCk7CiAgICAgICB3YXNfcmVqX21haWwgPSBUUlVFOyAgICAgICAgICAgICAgIC8qIFJlc2V0
IGlmIGFjY2VwdGVkICovCiAgICAgICBlbnZfbWFpbF90eXBlX3QgKiBtYWlsX2FyZ3M7ICAgICAg
IC8qIFNhbml0eSBjaGVjayAmIHZhbGlkYXRlIGFyZ3MgKi8KIAotICAgICAgaWYgKGZsLmhlbG9f
cmVxdWlyZWQgJiYgIWZsLmhlbG9fc2VlbikKLQl7Ci0Jc210cF9wcmludGYoIjUwMyBIRUxPIG9y
IEVITE8gcmVxdWlyZWRcclxuIiwgRkFMU0UpOwotCWxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0df
UkVKRUNULCAicmVqZWN0ZWQgTUFJTCBmcm9tICVzOiBubyAiCi0JICAiSEVMTy9FSExPIGdpdmVu
IiwgaG9zdF9hbmRfaWRlbnQoRkFMU0UpKTsKLQlicmVhazsKLQl9CisgICAgICBpZiAoIWZsLmhl
bG9fc2VlbikKKwlpZiAoICBmbC5oZWxvX3ZlcmlmeV9yZXF1aXJlZAorCSAgIHx8IHZlcmlmeV9j
aGVja19ob3N0KCZob3N0c19yZXF1aXJlX2hlbG8pID09IE9LKQorCSAgeworCSAgc210cF9wcmlu
dGYoIjUwMyBIRUxPIG9yIEVITE8gcmVxdWlyZWRcclxuIiwgRkFMU0UpOworCSAgbG9nX3dyaXRl
KDAsIExPR19NQUlOfExPR19SRUpFQ1QsICJyZWplY3RlZCBNQUlMIGZyb20gJXM6IG5vICIKKwkg
ICAgIkhFTE8vRUhMTyBnaXZlbiIsIGhvc3RfYW5kX2lkZW50KEZBTFNFKSk7CisJICBicmVhazsK
KwkgIH0KKwllbHNlIGlmIChzbXRwX21haWxjbWRfbWF4IDwgMCkKKwkgIHNtdHBfbWFpbGNtZF9t
YXggPSBleHBhbmRfbWFpbG1heChzbXRwX2FjY2VwdF9tYXhfcGVyX2Nvbm5lY3Rpb24pOwogCiAg
ICAgICBpZiAoc2VuZGVyX2FkZHJlc3MpCiAJewpAQCAtNDY0Myw4ICs0NjgxLDcgQEAKICAgICAg
IC8qIENoZWNrIHRvIHNlZSBpZiB0aGUgbGltaXQgZm9yIG1lc3NhZ2VzIHBlciBjb25uZWN0aW9u
IHdvdWxkIGJlCiAgICAgICBleGNlZWRlZCBieSBhY2NlcHRpbmcgZnVydGhlciBtZXNzYWdlcy4g
Ki8KIAotICAgICAgaWYgKHNtdHBfYWNjZXB0X21heF9wZXJfY29ubmVjdGlvbiA+IDAgJiYKLQkg
IHNtdHBfbWFpbGNtZF9jb3VudCA+IHNtdHBfYWNjZXB0X21heF9wZXJfY29ubmVjdGlvbikKKyAg
ICAgIGlmIChzbXRwX21haWxjbWRfbWF4ID4gMCAmJiBzbXRwX21haWxjbWRfY291bnQgPiBzbXRw
X21haWxjbWRfbWF4KQogCXsKIAlzbXRwX3ByaW50ZigiNDIxIHRvbyBtYW55IG1lc3NhZ2VzIGlu
IHRoaXMgY29ubmVjdGlvblxyXG4iLCBGQUxTRSk7CiAJbG9nX3dyaXRlKDAsIExPR19NQUlOfExP
R19SRUpFQ1QsICJyZWplY3RlZCBNQUlMIGNvbW1hbmQgJXM6IHRvbyBtYW55ICIKQEAgLTUwNDIs
NyArNTA3OSw3IEBACiAgICAgICBjb3VudCB0aGlzIGFzIGEgcHJvdG9jb2wgZXJyb3IuIFJlc2V0
IHdhc19yZWpfbWFpbCBzbyB0aGF0IGZ1cnRoZXIgUkNQVHMKICAgICAgIGdldCB0aGUgc2FtZSB0
cmVhdG1lbnQuICovCiAKLSAgICAgIGlmIChzZW5kZXJfYWRkcmVzcyA9PSBOVUxMKQorICAgICAg
aWYgKCFzZW5kZXJfYWRkcmVzcykKIAl7CiAJaWYgKGYuc210cF9pbl9waXBlbGluaW5nX2FkdmVy
dGlzZWQgJiYgbGFzdF93YXNfcmVqX21haWwpCiAJICB7CkBAIC01MDYxLDcgKzUwOTgsNyBAQAog
CiAgICAgICAvKiBDaGVjayBmb3IgYW4gb3BlcmFuZCAqLwogCi0gICAgICBpZiAoc210cF9jbWRf
ZGF0YVswXSA9PSAwKQorICAgICAgaWYgKCFzbXRwX2NtZF9kYXRhWzBdKQogCXsKIAlkb25lID0g
c3lucHJvdF9lcnJvcihMX3NtdHBfc3ludGF4X2Vycm9yLCA1MDEsIE5VTEwsCiAJICBVUyJSQ1BU
IG11c3QgaGF2ZSBhbiBhZGRyZXNzIG9wZXJhbmQiKTsKQEAgLTUzNTIsNyArNTM4OSw3IEBACiAj
ZW5kaWYKICAgICAgIGlmICghZGlzY2FyZGVkICYmIHJlY2lwaWVudHNfY291bnQgPD0gMCkKIAl7
Ci0JaWYgKGZsLnJjcHRfc210cF9yZXNwb25zZV9zYW1lICYmIHJjcHRfc210cF9yZXNwb25zZSAh
PSBOVUxMKQorCWlmIChmbC5yY3B0X3NtdHBfcmVzcG9uc2Vfc2FtZSAmJiByY3B0X3NtdHBfcmVz
cG9uc2UpCiAJICB7CiAJICB1c2NoYXIgKmNvZGUgPSBVUyI1MDMiOwogCSAgaW50IGxlbiA9IFVz
dHJsZW4ocmNwdF9zbXRwX3Jlc3BvbnNlKTsKQEAgLTU0MDIsNyArNTQzOSw3IEBACiAJQUNMIG1h
eSBoYXZlIGRlbGF5ZWQuICBUbyBoYW5kbGUgY3V0dGhyb3VnaCBkZWxpdmVyeSBlbmZvcmNlIGEg
ZHVtbXkgY2FsbAogCXRvIGdldCB0aGUgREFUQSBjb21tYW5kIHNlbnQuICovCiAKLQlpZiAoYWNs
X3NtdHBfcHJlZGF0YSA9PSBOVUxMICYmIGN1dHRocm91Z2guY2N0eC5zb2NrIDwgMCkKKwlpZiAo
IWFjbF9zbXRwX3ByZWRhdGEgJiYgY3V0dGhyb3VnaC5jY3R4LnNvY2sgPCAwKQogCSAgcmMgPSBP
SzsKIAllbHNlCiAJICB7CkBAIC01NTU1LDcgKzU1OTIsNyBAQAogICAgICAgUGlwZWxpbmluZyBz
eW5jIGNoZWNrcyB3aWxsIG5vcm1hbGx5IGhhdmUgcHJvdGVjdGVkIHVzIHRvbywgdW5sZXNzIGRp
c2FibGVkCiAgICAgICBieSBjb25maWd1cmF0aW9uLiAqLwogCi0gICAgICBpZiAocmVjZWl2ZV9z
bXRwX2J1ZmZlcmVkKCkpCisgICAgICBpZiAocmVjZWl2ZV9oYXNjKCkpCiAJewogCURFQlVHKERf
YW55KQogCSAgZGVidWdfcHJpbnRmKCJOb24tZW1wdHkgaW5wdXQgYnVmZmVyIGFmdGVyIFNUQVJU
VExTOyBuYWl2ZSBhdHRhY2s/XG4iKTsKQEAgLTU1ODIsNyArNTYxOSw3IEBACiAgICAgICBTVEFS
VFRMUyB0aGF0IGRvbid0IGFkZCB0byB0aGUgbm9ubWFpbCBjb21tYW5kIGNvdW50LiAqLwogCiAg
ICAgICBzID0gTlVMTDsKLSAgICAgIGlmICgocmMgPSB0bHNfc2VydmVyX3N0YXJ0KHRsc19yZXF1
aXJlX2NpcGhlcnMsICZzKSkgPT0gT0spCisgICAgICBpZiAoKHJjID0gdGxzX3NlcnZlcl9zdGFy
dCgmcykpID09IE9LKQogCXsKIAlpZiAoIXRsc19yZW1lbWJlcl9lc210cCkKIAkgIGZsLmhlbG9f
c2VlbiA9IGZsLmVzbXRwID0gZmwuYXV0aF9hZHZlcnRpc2VkID0gZi5zbXRwX2luX3BpcGVsaW5p
bmdfYWR2ZXJ0aXNlZCA9IEZBTFNFOwpAQCAtNTY0NCw2ICs1NjgxLDcgQEAKIAlzb21lIHNlbnNl
IGlzIHBlcmhhcHMgInJpZ2h0Ii4gKi8KIAogCWNhc2UgUVVJVF9DTUQ6CisJICBmLnNtdHBfaW5f
cXVpdCA9IFRSVUU7CiAJICB1c2VyX21zZyA9IE5VTEw7CiAJICBpZiAoICBhY2xfc210cF9xdWl0
CiAJICAgICAmJiAoKHJjID0gYWNsX2NoZWNrKEFDTF9XSEVSRV9RVUlULCBOVUxMLCBhY2xfc210
cF9xdWl0LCAmdXNlcl9tc2csCkBAIC01Nzg4LDcgKzU4MjYsNyBAQAogCWV0cm5fY29tbWFuZCA9
IHNtdHBfZXRybl9jb21tYW5kOwogCWRlbGl2ZXJfZG9tYWluID0gc210cF9jbWRfZGF0YTsKIAly
YyA9IHRyYW5zcG9ydF9zZXRfdXBfY29tbWFuZCgmYXJndiwgc210cF9ldHJuX2NvbW1hbmQsIFRS
VUUsIDAsIE5VTEwsCi0JICBVUyJFVFJOIHByb2Nlc3NpbmciLCAmZXJyb3IpOworCSAgRkFMU0Us
IFVTIkVUUk4gcHJvY2Vzc2luZyIsICZlcnJvcik7CiAJZGVsaXZlcl9kb21haW4gPSBOVUxMOwog
CWlmICghcmMpCiAJICB7CkBAIC01ODY1LDYgKzU5MDMsNyBAQAogCSAgewogCSAgREVCVUcoRF9l
eGVjKSBkZWJ1Z19wcmludF9hcmd2KGFyZ3YpOwogCSAgZXhpbV9udWxsc3RkKCk7ICAgICAgICAg
ICAgICAgICAgIC8qIEVuc3VyZSBzdGR7aW4sb3V0LGVycn0gZXhpc3QgKi8KKwkgIC8qIGFyZ3Zb
MF0gc2hvdWxkIGJlIHVudGFpbnRlZCwgZnJvbSBjaGlsZF9leGVjX2V4aW0oKSAqLwogCSAgZXhl
Y3YoQ1MgYXJndlswXSwgKGNoYXIgKmNvbnN0ICopYXJndik7CiAJICBsb2dfd3JpdGUoMCwgTE9H
X01BSU58TE9HX1BBTklDX0RJRSwgImV4ZWMgb2YgXCIlc1wiIChFVFJOKSBmYWlsZWQ6ICVzIiwK
IAkgICAgZXRybl9jb21tYW5kLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNTk5Myw3ICs2MDMyLDYg
QEAKICAgQ09NTUFORF9MT09QOgogICBsYXN0X3dhc19yZWpfbWFpbCA9IHdhc19yZWpfbWFpbDsg
ICAgIC8qIFJlbWVtYmVyIHNvbWUgbGFzdCBjb21tYW5kcyBmb3IgKi8KICAgbGFzdF93YXNfcmNw
dCA9IHdhc19yY3B0OyAgICAgICAgICAgICAvKiBwcm90b2NvbCBlcnJvciBoYW5kbGluZyAqLwot
ICBjb250aW51ZTsKICAgfQogCiByZXR1cm4gZG9uZSAtIDI7ICAvKiBDb252ZXJ0IHlpZWxkIHZh
bHVlcyAqLwpkaWZmIC11ciBleGltLm9yaWcvc3JjL3NtdHBfb3V0LmMgZXhpbS9zcmMvc210cF9v
dXQuYwotLS0gZXhpbS5vcmlnL3NyYy9zbXRwX291dC5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAw
MDAwMDAwICswMzAwCisrKyBleGltL3NyYy9zbXRwX291dC5jCTIwMjItMDYtMjMgMTY6NDE6MTAu
MDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0
IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRh
aW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1i
cmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5l
cnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2Ug
YW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogLyogQSBudW1iZXIgb2YgZnVuY3Rpb25zIGZvciBkcml2
aW5nIG91dGdvaW5nIFNNVFAgY2FsbHMuICovCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgICAg
ICAgICB3aGljaCBjYXNlIHRoZSBmdW5jdGlvbiBkb2VzIG5vdGhpbmcKICAgaG9zdF9hZiAgICBB
Rl9JTkVUIG9yIEFGX0lORVQ2IGZvciB0aGUgb3V0Z29pbmcgSVAgYWRkcmVzcwogICBhZGRyICAg
ICAgIHRoZSBtYWlsIGFkZHJlc3MgYmVpbmcgaGFuZGxlZCAoZm9yIHNldHRpbmcgZXJyb3JzKQot
ICBpbnRlcmZhY2UgIHBvaW50IHRoaXMgdG8gdGhlIGludGVyZmFjZQorICBpbnRlcmZhY2UgIHBv
aW50IHRoaXMgdG8gdGhlIGludGVyZmFjZSBpZiB0aGVyZSBpcyBvbmUgZGVmaW5lZAogICBtc2cg
ICAgICAgIHRvIGFkZCB0byBhbnkgZXJyb3IgbWVzc2FnZQogCiBSZXR1cm5zOiAgICAgVFJVRSBv
biBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlLCB3aXRoIGVycm9yIG1lc3NhZ2UKQEAgLTY3LDEw
ICs2NywxMCBAQAogVXNraXBfd2hpdGVzcGFjZSgmZXhwaW50KTsKIGlmICghKmV4cGludCkgcmV0
dXJuIFRSVUU7CiAKLXdoaWxlICgoaWZhY2UgPSBzdHJpbmdfbmV4dGlubGlzdCgmZXhwaW50LCAm
c2VwLCBiaWdfYnVmZmVyLAotICAgICAgICAgIGJpZ19idWZmZXJfc2l6ZSkpKQord2hpbGUgKChp
ZmFjZSA9IHN0cmluZ19uZXh0aW5saXN0KCZleHBpbnQsICZzZXAsIE5VTEwsIDApKSkKICAgewot
ICBpZiAoc3RyaW5nX2lzX2lwX2FkZHJlc3MoaWZhY2UsIE5VTEwpID09IDApCisgIGludCBpZl9h
ZiA9IHN0cmluZ19pc19pcF9hZGRyZXNzKGlmYWNlLCBOVUxMKTsKKyAgaWYgKGlmX2FmID09IDAp
CiAgICAgewogICAgIGFkZHItPnRyYW5zcG9ydF9yZXR1cm4gPSBQQU5JQzsKICAgICBhZGRyLT5t
ZXNzYWdlID0gc3RyaW5nX3NwcmludGYoIlwiJXNcIiBpcyBub3QgYSB2YWxpZCBJUCAiCkBAIC03
OSwxMSArNzksMTEgQEAKICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gIGlmICgoKFVzdHJj
aHIoaWZhY2UsICc6JykgPT0gTlVMTCk/IEFGX0lORVQ6QUZfSU5FVDYpID09IGhvc3RfYWYpCisg
IGlmICgoaWZfYWYgPT0gNCA/IEFGX0lORVQgOiBBRl9JTkVUNikgPT0gaG9zdF9hZikKICAgICBi
cmVhazsKICAgfQogCi1pZiAoaWZhY2UpICppbnRlcmZhY2UgPSBzdHJpbmdfY29weShpZmFjZSk7
CisqaW50ZXJmYWNlID0gaWZhY2U7CiByZXR1cm4gVFJVRTsKIH0KIApAQCAtMTUzLDI1ICsxNTMs
NDQgQEAKIAogCiAjaWZkZWYgVENQX0ZBU1RPUEVOCisvKiBUcnkgdG8gcmVjb3JkIGlmIFRGTyB3
YXMgYXR0bWVwdGVkIGFuZCBpZiBpdCB3YXMgc3VjY2Vzc2Z1bGx5IHVzZWQuICAqLworCiBzdGF0
aWMgdm9pZAogdGZvX291dF9jaGVjayhpbnQgc29jaykKIHsKK3N0YXRpYyBCT09MIGRvbmVfb25j
ZSA9IEZBTFNFOworCitpZiAoZG9uZV9vbmNlKSByZXR1cm47Citkb25lX29uY2UgPSBUUlVFOwor
CiAjIGlmZGVmIF9fRnJlZUJTRF9fCiBzdHJ1Y3QgdGNwX2luZm8gdGluZm87Ci1pbnQgdmFsOwot
c29ja2xlbl90IGxlbiA9IHNpemVvZih2YWwpOworc29ja2xlbl90IGxlbiA9IHNpemVvZih0aW5m
byk7CisKKy8qIEEgZ2V0c29ja29wdCBUQ1BfRkFTVE9QRU4gdW5mb3J0dW5hdGVseSByZXR1cm5z
ICJ3YXMtdXNlZCIgZm9yIGEgVEZPL1IgYXMKK3dlbGwgYXMgYSBURk8vQy4gIFVzZSB3aGF0IHdl
IGNhbiBvZiB0aGUgTGludXggaGFjayBiZWxvdzsgcmVsaWFiaWxpdHkgaXNzdWVzIGRpdHRvLiAq
Lworc3dpdGNoICh0Y3Bfb3V0X2Zhc3RvcGVuKQorICB7CisgIGNhc2UgVEZPX0FUVEVNUFRFRF9O
T0RBVEE6CisgICAgaWYgKCAgZ2V0c29ja29wdChzb2NrLCBJUFBST1RPX1RDUCwgVENQX0lORk8s
ICZ0aW5mbywgJmxlbikgPT0gMAorICAgICAgICYmIHRpbmZvLnRjcGlfc3RhdGUgPT0gVENQU19T
WU5fU0VOVAorICAgICAgICYmIHRpbmZvLl9fdGNwaV91bmFja2VkID4gMAorICAgICAgICkKKyAg
ICAgIHsKKyAgICAgIERFQlVHKERfdHJhbnNwb3J0fERfdikKKyAgICAgICBkZWJ1Z19wcmludGYo
IlRDUF9GQVNUT1BFTiB0Y3BpX3VuYWNrZWQgJWRcbiIsIHRpbmZvLl9fdGNwaV91bmFja2VkKTsK
KyAgICAgIHRjcF9vdXRfZmFzdG9wZW4gPSBURk9fVVNFRF9OT0RBVEE7CisgICAgICB9CisgICAg
YnJlYWs7CisgIC8qCisgIGNhc2UgVEZPX0FUVEVNUFRFRF9EQVRBOgorICBjYXNlIFRGT19BVFRF
TVBURURfREFUQToKKyAgICAgICBpZiAodGluZm8udGNwaV9vcHRpb25zICYgVENQSV9PUFRfU1lO
X0RBVEEpICAgWFhYIG5vIGVxdXZhbGVudCBhcyBvZiAxMi4yCisgICovCisgIH0KIAotLyogVGhl
IG9ic2VydmFiaWxpdHkgYXMgb2YgMTIuMSBpcyBub3QgdXNlZnVsIGFzIGEgY2xpZW50LCBvbmx5
IHRlbGxpbmcgdXMgdGhhdAotYSBURk8gb3B0aW9uIHdhcyB1c2VkIG9uIFNZTi4gIEl0IGNvdWxk
IGhhdmUgYmVlbiBhIFRGTy1SLCBvciBpZ25vcmVkIGJ5IHRoZQotc2VydmVyLiAqLwotCi0vKgot
aWYgKHRjcF9vdXRfZmFzdG9wZW4gPT0gVEZPX0FUVEVNUFRFRF9OT0RBVEEgfHwgdGNwX291dF9m
YXN0b3BlbiA9PSBURk9fQVRURU1QVEVEX0RBVEEpCi0gIGlmIChnZXRzb2Nrb3B0KHNvY2ssIElQ
UFJPVE9fVENQLCBUQ1BfRkFTVE9QRU4sICZ2YWwsICZsZW4pID09IDAgJiYgdmFsICE9IDApIHt9
Ci0qLwogc3dpdGNoICh0Y3Bfb3V0X2Zhc3RvcGVuKQogICB7Ci0gIGNhc2UgVEZPX0FUVEVNUFRF
RF9OT0RBVEE6CXRjcF9vdXRfZmFzdG9wZW4gPSBURk9fVVNFRF9OT0RBVEE7IGJyZWFrOwogICBj
YXNlIFRGT19BVFRFTVBURURfREFUQToJdGNwX291dF9mYXN0b3BlbiA9IFRGT19VU0VEX0RBVEE7
IGJyZWFrOwogICBkZWZhdWx0OiBicmVhazsgLyogY29tcGlsZXIgcXVpZXRlbmluZyAqLwogICB9
CkBAIC0yMzMsMzUgKzI1MiwyMSBAQAogI2VuZGlmCiAKIAotLyogQXJndW1lbnRzIGFzIGZvciBz
bXRwX2Nvbm5lY3QoKSwgcGx1cwotICBlYXJseV9kYXRhCWlmIG5vbi1OVUxMLCBpZGVubXBvdGVu
dCBkYXRhIHRvIGJlIHNlbnQgLQotCQlwcmVmZXJhYmx5IGluIHRoZSBUQ1AgU1lOIHNlZ21lbnQK
LQotUmV0dXJuczogICAgICBjb25uZWN0ZWQgc29ja2V0IG51bWJlciwgb3IgLTEgd2l0aCBlcnJu
byBzZXQKKy8qIENyZWF0ZSBhbmQgYmluZCBhIHNvY2tldCwgZ2l2ZW4gdGhlIGNvbm5lY3QtYXJn
cy4KK1VwZGF0ZSB0aG9zZSB3aXRoIHRoZSBzdGF0ZS4gIFJldHVybiB0aGUgZmQsIG9yIC0xIHdp
dGggZXJybm8gc2V0LgogKi8KIAogaW50Ci1zbXRwX3NvY2tfY29ubmVjdChob3N0X2l0ZW0gKiBo
b3N0LCBpbnQgaG9zdF9hZiwgaW50IHBvcnQsIHVzY2hhciAqIGludGVyZmFjZSwKLSAgdHJhbnNw
b3J0X2luc3RhbmNlICogdGIsIGludCB0aW1lb3V0LCBjb25zdCBibG9iICogZWFybHlfZGF0YSkK
K3NtdHBfYm91bmRzb2NrKHNtdHBfY29ubmVjdF9hcmdzICogc2MpCiB7Cit0cmFuc3BvcnRfaW5z
dGFuY2UgKiB0YiA9IHNjLT50YmxvY2s7CiBzbXRwX3RyYW5zcG9ydF9vcHRpb25zX2Jsb2NrICog
b2IgPQogICAoc210cF90cmFuc3BvcnRfb3B0aW9uc19ibG9jayAqKXRiLT5vcHRpb25zX2Jsb2Nr
OwogY29uc3QgdXNjaGFyICogZHNjcCA9IG9iLT5kc2NwOwotaW50IGRzY3BfdmFsdWU7Ci1pbnQg
ZHNjcF9sZXZlbDsKLWludCBkc2NwX29wdGlvbjsKLWludCBzb2NrOwotaW50IHNhdmVfZXJybm8g
PSAwOwotY29uc3QgYmxvYiAqIGZhc3RvcGVuX2Jsb2IgPSBOVUxMOworaW50IHNvY2ssIGRzY3Bf
dmFsdWUsIGRzY3BfbGV2ZWwsIGRzY3Bfb3B0aW9uOwogCi0KLSNpZm5kZWYgRElTQUJMRV9FVkVO
VAotZGVsaXZlcl9ob3N0X2FkZHJlc3MgPSBob3N0LT5hZGRyZXNzOwotZGVsaXZlcl9ob3N0X3Bv
cnQgPSBwb3J0OwotaWYgKGV2ZW50X3JhaXNlKHRiLT5ldmVudF9hY3Rpb24sIFVTInRjcDpjb25u
ZWN0IiwgTlVMTCkpIHJldHVybiAtMTsKLSNlbmRpZgotCi1pZiAoKHNvY2sgPSBpcF9zb2NrZXQo
U09DS19TVFJFQU0sIGhvc3RfYWYpKSA8IDApIHJldHVybiAtMTsKK2lmICgoc29jayA9IGlwX3Nv
Y2tldChTT0NLX1NUUkVBTSwgc2MtPmhvc3RfYWYpKSA8IDApCisgIHJldHVybiAtMTsKIAogLyog
U2V0IFRDUF9OT0RFTEFZOyBFeGltIGRvZXMgaXRzIG93biBidWZmZXJpbmcuICovCiAKQEAgLTI3
Miw3ICsyNzcsNyBAQAogLyogU2V0IERTQ1AgdmFsdWUsIGlmIHdlIGNhbi4gRm9yIG5vdywgaWYg
d2UgZmFpbCB0byBzZXQgdGhlIHZhbHVlLCB3ZSBkb24ndAogYm9tYiBvdXQsIGp1c3QgbG9nIGl0
IGFuZCBjb250aW51ZSBpbiBkZWZhdWx0IHRyYWZmaWMgY2xhc3MuICovCiAKLWlmIChkc2NwICYm
IGRzY3BfbG9va3VwKGRzY3AsIGhvc3RfYWYsICZkc2NwX2xldmVsLCAmZHNjcF9vcHRpb24sICZk
c2NwX3ZhbHVlKSkKK2lmIChkc2NwICYmIGRzY3BfbG9va3VwKGRzY3AsIHNjLT5ob3N0X2FmLCAm
ZHNjcF9sZXZlbCwgJmRzY3Bfb3B0aW9uLCAmZHNjcF92YWx1ZSkpCiAgIHsKICAgSERFQlVHKERf
dHJhbnNwb3J0fERfYWNsfERfdikKICAgICBkZWJ1Z19wcmludGZfaW5kZW50KCJEU0NQIFwiJXNc
Ij0leCAiLCBkc2NwLCBkc2NwX3ZhbHVlKTsKQEAgLTI4MSw3ICsyODYsNyBAQAogICAgICAgZGVi
dWdfcHJpbnRmX2luZGVudCgiZmFpbGVkIHRvIHNldCBEU0NQOiAlcyAiLCBzdHJlcnJvcihlcnJu
bykpOwogICAvKiBJZiB0aGUga2VybmVsIHN1cHBvcnRzIElQdjQgYW5kIElQdjYgb24gYW4gSVB2
NiBzb2NrZXQsIHdlIG5lZWQgdG8gc2V0IHRoZQogICBvcHRpb24gZm9yIGJvdGg7IGlnbm9yZSBm
YWlsdXJlcyBoZXJlICovCi0gIGlmIChob3N0X2FmID09IEFGX0lORVQ2ICYmCisgIGlmIChzYy0+
aG9zdF9hZiA9PSBBRl9JTkVUNiAmJgogICAgICAgZHNjcF9sb29rdXAoZHNjcCwgQUZfSU5FVCwg
JmRzY3BfbGV2ZWwsICZkc2NwX29wdGlvbiwgJmRzY3BfdmFsdWUpKQogICAgICh2b2lkKSBzZXRz
b2Nrb3B0KHNvY2ssIGRzY3BfbGV2ZWwsIGRzY3Bfb3B0aW9uLCAmZHNjcF92YWx1ZSwgc2l6ZW9m
KGRzY3BfdmFsdWUpKTsKICAgfQpAQCAtMjg5LDY0ICsyOTQsMTIyIEBACiAvKiBCaW5kIHRvIGEg
c3BlY2lmaWMgaW50ZXJmYWNlIGlmIHJlcXVlc3RlZC4gQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBp
bnRlcmZhY2UKIGlzIHRoZSBzYW1lIHR5cGUgKElQdjQgb3IgSVB2NikgYXMgdGhlIG91dGdvaW5n
IGFkZHJlc3MuICovCiAKLWlmIChpbnRlcmZhY2UgJiYgaXBfYmluZChzb2NrLCBob3N0X2FmLCBp
bnRlcmZhY2UsIDApIDwgMCkKK2lmIChzYy0+aW50ZXJmYWNlKQogICB7Ci0gIHNhdmVfZXJybm8g
PSBlcnJubzsKLSAgSERFQlVHKERfdHJhbnNwb3J0fERfYWNsfERfdikKLSAgICBkZWJ1Z19wcmlu
dGZfaW5kZW50KCJ1bmFibGUgdG8gYmluZCBvdXRnb2luZyBTTVRQIGNhbGwgdG8gJXM6ICVzIiwg
aW50ZXJmYWNlLAotICAgIHN0cmVycm9yKGVycm5vKSk7CisgIHVuaW9uIHNvY2thZGRyXzQ2IGlu
dGVyZmFjZV9zb2NrOworICBFWElNX1NPQ0tMRU5fVCBzaXplID0gc2l6ZW9mKGludGVyZmFjZV9z
b2NrKTsKKworICBpZiAoICBpcF9iaW5kKHNvY2ssIHNjLT5ob3N0X2FmLCBzYy0+aW50ZXJmYWNl
LCAwKSA8IDAKKyAgICAgfHwgZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAm
aW50ZXJmYWNlX3NvY2ssICZzaXplKSA8IDAKKyAgICAgKQorICAgIHsKKyAgICBIREVCVUcoRF90
cmFuc3BvcnR8RF9hY2x8RF92KQorICAgICAgZGVidWdfcHJpbnRmX2luZGVudCgidW5hYmxlIHRv
IGJpbmQgb3V0Z29pbmcgU01UUCBjYWxsIHRvICVzOiAlcyIsIHNjLT5pbnRlcmZhY2UsCisJc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICBjbG9zZShzb2NrKTsKKyAgICByZXR1cm4gLTE7CisgICAgfQor
ICBzZW5kaW5nX2lwX2FkZHJlc3MgPSBob3N0X250b2EoLTEsICZpbnRlcmZhY2Vfc29jaywgTlVM
TCwgJnNlbmRpbmdfcG9ydCk7CiAgIH0KIAorc2MtPnNvY2sgPSBzb2NrOworcmV0dXJuIHNvY2s7
Cit9CisKKworLyogQXJndW1lbnRzOgorICBob3N0ICAgICAgICBob3N0IGl0ZW0gY29udGFpbmlu
ZyBuYW1lIGFuZCBhZGRyZXNzIGFuZCBwb3J0CisgIGhvc3RfYWYgICAgIEFGX0lORVQgb3IgQUZf
SU5FVDYKKyAgcG9ydAkgICAgICBUQ1AgcG9ydCBudW1iZXIKKyAgaW50ZXJmYWNlICAgb3V0Z29p
bmcgaW50ZXJmYWNlIGFkZHJlc3Mgb3IgTlVMTAorICB0YiAgICAgICAgICB0cmFuc3BvcnQKKyAg
dGltZW91dCAgICAgdGltZW91dCB2YWx1ZSBvciAwCisgIGVhcmx5X2RhdGEJaWYgbm9uLU5VTEws
IGlkZW1wb3RlbnQgZGF0YSB0byBiZSBzZW50IC0KKwkJcHJlZmVyYWJseSBpbiB0aGUgVENQIFNZ
TiBzZWdtZW50CisJICAgICAgU3BlY2lhbCBjYXNlOiBub24tTlVMTCBidXQgd2l0aCBOVUxMIGJs
b2IuZGF0YSAtIGNhbGxlciBpcworCSAgICAgIGNsaWVudC1kYXRhLWZpcnN0IChlZy4gVExTLW9u
LWNvbm5lY3QpIGFuZCBhIGxhenktVENQLWNvbm5lY3QgaXMKKwkgICAgICBhY2NlcHRhYmxlLgor
CitSZXR1cm5zOiAgICAgIGNvbm5lY3RlZCBzb2NrZXQgbnVtYmVyLCBvciAtMSB3aXRoIGVycm5v
IHNldAorKi8KKworaW50CitzbXRwX3NvY2tfY29ubmVjdChzbXRwX2Nvbm5lY3RfYXJncyAqIHNj
LCBpbnQgdGltZW91dCwgY29uc3QgYmxvYiAqIGVhcmx5X2RhdGEpCit7CitzbXRwX3RyYW5zcG9y
dF9vcHRpb25zX2Jsb2NrICogb2IgPQorICAoc210cF90cmFuc3BvcnRfb3B0aW9uc19ibG9jayAq
KXNjLT50YmxvY2stPm9wdGlvbnNfYmxvY2s7CitpbnQgc29jazsKK2ludCBzYXZlX2Vycm5vID0g
MDsKK2NvbnN0IGJsb2IgKiBmYXN0b3Blbl9ibG9iID0gTlVMTDsKKworCisjaWZuZGVmIERJU0FC
TEVfRVZFTlQKK2RlbGl2ZXJfaG9zdF9hZGRyZXNzID0gc2MtPmhvc3QtPmFkZHJlc3M7CitkZWxp
dmVyX2hvc3RfcG9ydCA9IHNjLT5ob3N0LT5wb3J0OworaWYgKGV2ZW50X3JhaXNlKHNjLT50Ymxv
Y2stPmV2ZW50X2FjdGlvbiwgVVMidGNwOmNvbm5lY3QiLCBOVUxMLCAmZXJybm8pKSByZXR1cm4g
LTE7CisjZW5kaWYKKworaWYgKCAgKHNvY2sgPSBzYy0+c29jaykgPCAwCisgICAmJiAoc29jayA9
IHNtdHBfYm91bmRzb2NrKHNjKSkgPCAwKQorICBzYXZlX2Vycm5vID0gZXJybm87CitzYy0+c29j
ayA9IC0xOworCiAvKiBDb25uZWN0IHRvIHRoZSByZW1vdGUgaG9zdCwgYW5kIGFkZCBrZWVwYWxp
dmUgdG8gdGhlIHNvY2tldCBiZWZvcmUgcmV0dXJuaW5nCiBpdCwgaWYgcmVxdWVzdGVkLiAgSWYg
dGhlIGJ1aWxkIHN1cHBvcnRzIFRGTywgcmVxdWVzdCBpdCAtIGFuZCBpZiB0aGUgY2FsbGVyCiBy
ZXF1ZXN0ZWQgc29tZSBlYXJseS1kYXRhIHRoZW4gaW5jbHVkZSB0aGF0IGluIHRoZSBURk8gcmVx
dWVzdC4gIElmIHRoZXJlIGlzCiBlYXJseS1kYXRhIGJ1dCBubyBURk8gc3VwcG9ydCwgc2VuZCBp
dCBhZnRlciBjb25uZWN0aW5nLiAqLwogCi1lbHNlCitpZiAoIXNhdmVfZXJybm8pCiAgIHsKICNp
ZmRlZiBUQ1BfRkFTVE9QRU4KLSAgaWYgKHZlcmlmeV9jaGVja19naXZlbl9ob3N0KENVU1MgJm9i
LT5ob3N0c190cnlfZmFzdG9wZW4sIGhvc3QpID09IE9LKQotICAgIGZhc3RvcGVuX2Jsb2IgPSBl
YXJseV9kYXRhID8gZWFybHlfZGF0YSA6ICZ0Y3BfZmFzdG9wZW5fbm9kYXRhOworICAvKiBTZWUg
aWYgVENQIEZhc3QgT3BlbiB1c2FibGUuICBEZWZhdWx0IGlzIGEgdHJhZGl0aW9uYWwgM1dIUyBj
b25uZWN0ICovCisgIGlmICh2ZXJpZnlfY2hlY2tfZ2l2ZW5faG9zdChDVVNTICZvYi0+aG9zdHNf
dHJ5X2Zhc3RvcGVuLCBzYy0+aG9zdCkgPT0gT0spCisgICAgeworICAgIGlmICghZWFybHlfZGF0
YSkKKyAgICAgIGZhc3RvcGVuX2Jsb2IgPSAmdGNwX2Zhc3RvcGVuX25vZGF0YTsJLyogVEZPLCB3
aXRoIG5vIGRhdGEgKi8KKyAgICBlbHNlIGlmIChlYXJseV9kYXRhLT5kYXRhKQorICAgICAgZmFz
dG9wZW5fYmxvYiA9IGVhcmx5X2RhdGE7CQkvKiBURk8sIHdpdGggZGF0YSAqLworIyBpZmRlZiBU
Q1BfRkFTVE9QRU5fQ09OTkVDVAorICAgIGVsc2UKKyAgICAgIHsJCQkJCQkvKiBleHBlY3Rpbmcg
Y2xpZW50IGRhdGEgKi8KKyAgICAgIGRlYnVnX3ByaW50ZigiIHNldCB1cCBsYXp5LWNvbm5lY3Rc
biIpOworICAgICAgc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1RDUCwgVENQX0ZBU1RPUEVOX0NP
Tk5FQ1QsIFVTICZvbiwgc2l6ZW9mKG9uKSk7CisgICAgICAvKiBmYXN0b3Blbl9ibG9iID0gTlVM
TDsJCSBsYXp5IFRGTywgdHJpZ2dlcmVkIGJ5IGRhdGEgd3JpdGUgKi8KKyAgICAgIH0KKyMgZW5k
aWYKKyAgICB9CiAjZW5kaWYKIAotICBpZiAoaXBfY29ubmVjdChzb2NrLCBob3N0X2FmLCBob3N0
LT5hZGRyZXNzLCBwb3J0LCB0aW1lb3V0LCBmYXN0b3Blbl9ibG9iKSA8IDApCisgIGlmIChpcF9j
b25uZWN0KHNvY2ssIHNjLT5ob3N0X2FmLCBzYy0+aG9zdC0+YWRkcmVzcywgc2MtPmhvc3QtPnBv
cnQsIHRpbWVvdXQsIGZhc3RvcGVuX2Jsb2IpIDwgMCkKICAgICBzYXZlX2Vycm5vID0gZXJybm87
CiAgIGVsc2UgaWYgKGVhcmx5X2RhdGEgJiYgIWZhc3RvcGVuX2Jsb2IgJiYgZWFybHlfZGF0YS0+
ZGF0YSAmJiBlYXJseV9kYXRhLT5sZW4pCiAgICAgeworICAgIC8qIFdlIGhhZCBzb21lIGVhcmx5
LWRhdGEgdG8gc2VuZCwgYnV0IGNvdWxkbid0IGRvIFRGTyAqLwogICAgIEhERUJVRyhEX3RyYW5z
cG9ydHxEX2FjbHxEX3YpCiAgICAgICBkZWJ1Z19wcmludGYoInNlbmRpbmcgJWxkIG5vblRGTyBl
YXJseS1kYXRhXG4iLCAobG9uZyllYXJseV9kYXRhLT5sZW4pOwogCi0jaWZkZWYgVENQX1FVSUNL
QUNLCisjaWZkZWYgVENQX1FVSUNLQUNLX25vdGRlZgogICAgICh2b2lkKSBzZXRzb2Nrb3B0KHNv
Y2ssIElQUFJPVE9fVENQLCBUQ1BfUVVJQ0tBQ0ssIFVTICZvZmYsIHNpemVvZihvZmYpKTsKICNl
bmRpZgogICAgIGlmIChzZW5kKHNvY2ssIGVhcmx5X2RhdGEtPmRhdGEsIGVhcmx5X2RhdGEtPmxl
biwgMCkgPCAwKQogICAgICAgc2F2ZV9lcnJubyA9IGVycm5vOwogICAgIH0KKyNpZmRlZiBUQ1Bf
UVVJQ0tBQ0tfbm90ZGVmCisgIC8qIFVuZGVyIFRGTyAod2l0aCBvcGVuc3NsICYgcGlwZS1jb25u
OyB0ZXN0Y2FzZSA0MDY5LCBhcyBvZgorICA1LjEwLjgtMTAwLmZjMzIueDg2XzY0KSB0aGlzIHNl
ZW1zIHRvIGJlIGlub3AuCisgIFBlcmhhcHMgb3ZlcndyaXR0ZW4gd2hlbiB3ZSAoY2xpZW50KSBn
byAtPiBFU1RBQkxJU0hFRCBvbiBzZWVpbmcgdGhlIDNyZC1BQ0s/CisgIEZvciB0aGF0IGNhc2Us
IGFkZGVkIGF0IHNtdHBfcmVhcF9iYW5uZXIoKS4gKi8KKyAgKHZvaWQpIHNldHNvY2tvcHQoc29j
aywgSVBQUk9UT19UQ1AsIFRDUF9RVUlDS0FDSywgVVMgJm9mZiwgc2l6ZW9mKG9mZikpOworI2Vu
ZGlmCiAgIH0KIAotLyogRWl0aGVyIGJpbmQoKSBvciBjb25uZWN0KCkgZmFpbGVkICovCi0KLWlm
IChzYXZlX2Vycm5vICE9IDApCi0gIHsKLSAgSERFQlVHKERfdHJhbnNwb3J0fERfYWNsfERfdikK
LSAgICB7Ci0gICAgZGVidWdfcHJpbnRmX2luZGVudCgiIGZhaWxlZDogJXMiLCBDVXN0cmVycm9y
KHNhdmVfZXJybm8pKTsKLSAgICBpZiAoc2F2ZV9lcnJubyA9PSBFVElNRURPVVQpCi0gICAgICBk
ZWJ1Z19wcmludGYoIiAodGltZW91dD0lcykiLCByZWFkY29uZl9wcmludHRpbWUodGltZW91dCkp
OwotICAgIGRlYnVnX3ByaW50ZigiXG4iKTsKLSAgICB9Ci0gICh2b2lkKWNsb3NlKHNvY2spOwot
ICBlcnJubyA9IHNhdmVfZXJybm87Ci0gIHJldHVybiAtMTsKLSAgfQotCi0vKiBCb3RoIGJpbmQo
KSBhbmQgY29ubmVjdCgpIHN1Y2NlZWRlZCwgYW5kIGFueSBlYXJseS1kYXRhICovCi0KLWVsc2UK
K2lmICghc2F2ZV9lcnJubykKICAgewogICB1bmlvbiBzb2NrYWRkcl80NiBpbnRlcmZhY2Vfc29j
azsKICAgRVhJTV9TT0NLTEVOX1Qgc2l6ZSA9IHNpemVvZihpbnRlcmZhY2Vfc29jayk7CiAKKyAg
LyogQm90aCBiaW5kKCkgYW5kIGNvbm5lY3QoKSBzdWNjZWVkZWQsIGFuZCBhbnkgZWFybHktZGF0
YSAqLworCiAgIEhERUJVRyhEX3RyYW5zcG9ydHxEX2FjbHxEX3YpIGRlYnVnX3ByaW50Zl9pbmRl
bnQoIiBjb25uZWN0ZWRcbiIpOwogICBpZiAoZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2Nr
YWRkciAqKSgmaW50ZXJmYWNlX3NvY2spLCAmc2l6ZSkgPT0gMCkKICAgICBzZW5kaW5nX2lwX2Fk
ZHJlc3MgPSBob3N0X250b2EoLTEsICZpbnRlcmZhY2Vfc29jaywgTlVMTCwgJnNlbmRpbmdfcG9y
dCk7CkBAIC0zNTgsMTIgKzQyMSwyNSBAQAogICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgaWYg
KG9iLT5rZWVwYWxpdmUpIGlwX2tlZXBhbGl2ZShzb2NrLCBob3N0LT5hZGRyZXNzLCBUUlVFKTsK
KyAgaWYgKG9iLT5rZWVwYWxpdmUpIGlwX2tlZXBhbGl2ZShzb2NrLCBzYy0+aG9zdC0+YWRkcmVz
cywgVFJVRSk7CiAjaWZkZWYgVENQX0ZBU1RPUEVOCiAgIHRmb19vdXRfY2hlY2soc29jayk7CiAj
ZW5kaWYKICAgcmV0dXJuIHNvY2s7CiAgIH0KKworLyogRWl0aGVyIGJpbmQoKSBvciBjb25uZWN0
KCkgZmFpbGVkICovCisKK0hERUJVRyhEX3RyYW5zcG9ydHxEX2FjbHxEX3YpCisgIHsKKyAgZGVi
dWdfcHJpbnRmX2luZGVudCgiIGZhaWxlZDogJXMiLCBDVXN0cmVycm9yKHNhdmVfZXJybm8pKTsK
KyAgaWYgKHNhdmVfZXJybm8gPT0gRVRJTUVET1VUKQorICAgIGRlYnVnX3ByaW50ZigiICh0aW1l
b3V0PSVzKSIsIHJlYWRjb25mX3ByaW50dGltZSh0aW1lb3V0KSk7CisgIGRlYnVnX3ByaW50Zigi
XG4iKTsKKyAgfQorKHZvaWQpY2xvc2Uoc29jayk7CitlcnJubyA9IHNhdmVfZXJybm87CityZXR1
cm4gLTE7CiB9CiAKIApAQCAtMzk2LDYgKzQ3Miw5IEBACiBBcmd1bWVudHM6CiAgIHNjCSAgICAg
IGRldGFpbHMgZm9yIG1ha2luZyBjb25uZWN0aW9uOiBob3N0LCBhZiwgaW50ZXJmYWNlLCB0cmFu
c3BvcnQKICAgZWFybHlfZGF0YSAgaWYgbm9uLU5VTEwsIGRhdGEgdG8gYmUgc2VudCAtIHByZWZl
cmFibHkgaW4gdGhlIFRDUCBTWU4gc2VnbWVudAorCSAgICAgIFNwZWNpYWwgY2FzZTogbm9uLU5V
TEwgYnV0IHdpdGggTlVMTCBibG9iLmRhdGEgLSBjYWxsZXIgaXMKKwkgICAgICBjbGllbnQtZGF0
YS1maXJzdCAoZWcuIFRMUy1vbi1jb25uZWN0KSBhbmQgYSBsYXp5LVRDUC1jb25uZWN0IGlzCisJ
ICAgICAgYWNjZXB0YWJsZS4KIAogUmV0dXJuczogICAgICBjb25uZWN0ZWQgc29ja2V0IG51bWJl
ciwgb3IgLTEgd2l0aCBlcnJubyBzZXQKICovCkBAIC00NDgsOCArNTI3LDcgQEAKICAgfQogI2Vu
ZGlmCiAKLXJldHVybiBzbXRwX3NvY2tfY29ubmVjdChzYy0+aG9zdCwgc2MtPmhvc3RfYWYsIHBv
cnQsIHNjLT5pbnRlcmZhY2UsCi0JCQkgIHNjLT50YmxvY2ssIG9iLT5jb25uZWN0X3RpbWVvdXQs
IGVhcmx5X2RhdGEpOworcmV0dXJuIHNtdHBfc29ja19jb25uZWN0KHNjLCBvYi0+Y29ubmVjdF90
aW1lb3V0LCBlYXJseV9kYXRhKTsKIH0KIAogCkBAIC00NzQsMTMgKzU1MiwyMSBAQAogaW50IHJj
OwogaW50IG4gPSBvdXRibG9jay0+cHRyIC0gb3V0YmxvY2stPmJ1ZmZlcjsKIEJPT0wgbW9yZSA9
IG1vZGUgPT0gU0NNRF9NT1JFOworY2xpZW50X2Nvbm5fY3R4ICogY2N0eDsKIAogSERFQlVHKERf
dHJhbnNwb3J0fERfYWNsKSBkZWJ1Z19wcmludGZfaW5kZW50KCJjbWQgYnVmIGZsdXNoICVkIGJ5
dGVzJXNcbiIsIG4sCiAgIG1vcmUgPyAiIChtb3JlIGV4cGVjdGVkKSIgOiAiIik7CiAKK2lmICgh
KGNjdHggPSBvdXRibG9jay0+Y2N0eCkpCisgIHsKKyAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExP
R19QQU5JQywgIm51bGwgY29ubi1jb250ZXh0IHBvaW50ZXIiKTsKKyAgZXJybm8gPSAwOworICBy
ZXR1cm4gRkFMU0U7CisgIH0KKwogI2lmbmRlZiBESVNBQkxFX1RMUwotaWYgKG91dGJsb2NrLT5j
Y3R4LT50bHNfY3R4KQotICByYyA9IHRsc193cml0ZShvdXRibG9jay0+Y2N0eC0+dGxzX2N0eCwg
b3V0YmxvY2stPmJ1ZmZlciwgbiwgbW9yZSk7CitpZiAoY2N0eC0+dGxzX2N0eCkJCS8qWFhYIGhh
dmUgc2VlbiBhIG51bGwgY2N0eCBoZXJlLCBydmZ5IHNlbmRpbmcgUVVJVCwgaGVuY2UgY2hlY2sg
YWJvdmUgKi8KKyAgcmMgPSB0bHNfd3JpdGUoY2N0eC0+dGxzX2N0eCwgb3V0YmxvY2stPmJ1ZmZl
ciwgbiwgbW9yZSk7CiBlbHNlCiAjZW5kaWYKIApAQCAtNDk0LDcgKzU4MCw3IEBACiAgICAgcmVx
dWlyZW1lbnQ6IFRGTyB3aXRoIGRhdGEgY2FuLCBpbiByYXJlIGNhc2VzLCByZXBsYXkgdGhlIGRh
dGEgdG8gdGhlCiAgICAgcmVjZWl2ZXIuICovCiAKLSAgICBpZiAoICAob3V0YmxvY2stPmNjdHgt
PnNvY2sgPSBzbXRwX2Nvbm5lY3Qob3V0YmxvY2stPmNvbm5fYXJncywgJmVhcmx5X2RhdGEpKQor
ICAgIGlmICggIChjY3R4LT5zb2NrID0gc210cF9jb25uZWN0KG91dGJsb2NrLT5jb25uX2FyZ3Ms
ICZlYXJseV9kYXRhKSkKICAgICAgICA8IDApCiAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgb3V0
YmxvY2stPmNvbm5fYXJncyA9IE5VTEw7CkBAIC01MDIsNyArNTg4LDcgQEAKICAgICB9CiAgIGVs
c2UKICAgICB7Ci0gICAgcmMgPSBzZW5kKG91dGJsb2NrLT5jY3R4LT5zb2NrLCBvdXRibG9jay0+
YnVmZmVyLCBuLAorICAgIHJjID0gc2VuZChjY3R4LT5zb2NrLCBvdXRibG9jay0+YnVmZmVyLCBu
LAogI2lmZGVmIE1TR19NT1JFCiAJICAgICAgbW9yZSA/IE1TR19NT1JFIDogMAogI2Vsc2UKQEAg
LTUxNyw3ICs2MDMsNyBAQAogICAgIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1
Zy5jZ2k/aWQ9MTgwMzgwNiAqLwogCiAgICAgaWYgKCFtb3JlKQotICAgICAgc2V0c29ja29wdChv
dXRibG9jay0+Y2N0eC0+c29jaywgSVBQUk9UT19UQ1AsIFRDUF9DT1JLLCAmb2ZmLCBzaXplb2Yo
b2ZmKSk7CisgICAgICBzZXRzb2Nrb3B0KGNjdHgtPnNvY2ssIElQUFJPVE9fVENQLCBUQ1BfQ09S
SywgJm9mZiwgc2l6ZW9mKG9mZikpOwogI2VuZGlmCiAgICAgfQogICB9CkBAIC01MzUsNiArNjIx
LDIyIEBACiAKIAogCisvKiBUaGlzIG1pZ2h0IGJlIGNhbGxlZCBib3RoIGR1ZSB0byBjYWxsb3V0
IGFuZCB0aGVuIGZyb20gZGVsaXZlcnkuCitVc2UgbWVtb3J5IHRoYXQgd2lsbCBub3QgYmUgcmVs
ZWFzZWQgYmV0d2VlbiB0aG9zZSBwaGFzZXMuCisqLworc3RhdGljIHZvaWQKK3NtdHBfZGVidWdf
cmVzcChjb25zdCB1c2NoYXIgKiBidWYpCit7CisjaWZuZGVmIERJU0FCTEVfQ0xJRU5UX0NNRF9M
T0cKK2ludCBvbGRfcG9vbCA9IHN0b3JlX3Bvb2w7CitzdG9yZV9wb29sID0gUE9PTF9QRVJNOwor
Y2xpZW50X2NtZF9sb2cgPSBzdHJpbmdfYXBwZW5kX2xpc3RlbGVfbihjbGllbnRfY21kX2xvZywg
JzonLCBidWYsCisgIGJ1ZlszXSA9PSAnICcgPyAzIDogNCk7CitzdG9yZV9wb29sID0gb2xkX3Bv
b2w7CisjZW5kaWYKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgogKiAgICAgICAgICAgICBXcml0ZSBTTVRQIGNvbW1hbmQgICAgICAgICAg
ICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCkBAIC01NTYsNyArNjU4LDcgQEAKICovCiAKIGludAotc210cF93cml0ZV9jb21tYW5kKHZv
aWQgKiBzeCwgaW50IG1vZGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorc210cF93cml0ZV9j
b21tYW5kKHZvaWQgKiBzeCwgaW50IG1vZGUsIGNvbnN0IGNoYXIgKiBmb3JtYXQsIC4uLikKIHsK
IHNtdHBfb3V0YmxvY2sgKiBvdXRibG9jayA9ICYoKHNtdHBfY29udGV4dCAqKXN4KS0+b3V0Ymxv
Y2s7CiBpbnQgcmMgPSAwOwpAQCAtNjA5LDEwICs3MTEsMTAgQEAKICAgICAgIHdoaWxlICghaXNz
cGFjZSgqcCkpIHArKzsKICAgICAgIHdoaWxlIChpc3NwYWNlKCpwKSkgcCsrOwogICAgICAgfQot
ICAgIHdoaWxlICgqcCAhPSAwKSAqcCsrID0gJyonOworICAgIHdoaWxlICgqcCkgKnArKyA9ICcq
JzsKICAgICB9CiAKLSAgSERFQlVHKERfdHJhbnNwb3J0fERfYWNsfERfdikgZGVidWdfcHJpbnRm
X2luZGVudCgiICBTTVRQPj4gJXNcbiIsIGJpZ19idWZmZXIpOworICBzbXRwX2RlYnVnX2NtZChi
aWdfYnVmZmVyLCBtb2RlKTsKICAgfQogCiBpZiAobW9kZSAhPSBTQ01EX0JVRkZFUikKQEAgLTc1
MCw4ICs4NTIsMTAgQEAKIHVzY2hhciAqIHB0ciA9IGJ1ZmZlcjsKIGludCBjb3VudCA9IDA7CiB0
aW1lX3QgdGltZWxpbWl0ID0gdGltZShOVUxMKSArIHRpbWVvdXQ7CitCT09MIHlpZWxkID0gRkFM
U0U7CiAKIGVycm5vID0gMDsgIC8qIEVuc3VyZSBlcnJubyBzdGFydHMgb3V0IHplcm8gKi8KK2J1
ZmZlclswXSA9ICdcMCc7CiAKICNpZm5kZWYgRElTQUJMRV9QSVBFX0NPTk5FQ1QKIGlmIChzeC0+
cGVuZGluZ19CQU5ORVIgfHwgc3gtPnBlbmRpbmdfRUhMTykKQEAgLTc2MCw5ICs4NjQsOCBAQAog
ICBpZiAoKHJjID0gc210cF9yZWFwX2Vhcmx5X3BpcGUoc3gsICZjb3VudCkpICE9IE9LKQogICAg
IHsKICAgICBERUJVRyhEX3RyYW5zcG9ydCkgZGVidWdfcHJpbnRmKCJmYWlsZWQgcmVhcGluZyBw
aXBlbGluZWQgY21kIHJlc3BvbnNlc3NcbiIpOwotICAgIGJ1ZmZlclswXSA9ICdcMCc7CiAgICAg
aWYgKHJjID09IERFRkVSKSBlcnJubyA9IEVSUk5PX1RMU0ZBSUxVUkU7Ci0gICAgcmV0dXJuIEZB
TFNFOworICAgIGdvdG8gb3V0OwogICAgIH0KICAgfQogI2VuZGlmCkBAIC03OTMsNyArODk2LDcg
QEAKICAgICAgKHB0clszXSAhPSAnLScgJiYgcHRyWzNdICE9ICcgJyAmJiBwdHJbM10gIT0gMCkp
CiAgICAgewogICAgIGVycm5vID0gRVJSTk9fU01UUEZPUk1BVDsgICAgLyogZm9ybWF0IGVycm9y
ICovCi0gICAgcmV0dXJuIEZBTFNFOworICAgIGdvdG8gb3V0OwogICAgIH0KIAogICAvKiBJZiB0
aGUgbGluZSB3ZSBoYXZlIGp1c3QgcmVhZCBpcyBhIHRlcm1pbmFsIGxpbmUsIGxpbmUsIHdlIGFy
ZSBkb25lLgpAQCAtODExLDcgKzkxNCw3IEBACiAgIH0KIAogI2lmZGVmIFRDUF9GQVNUT1BFTgot
ICB0Zm9fb3V0X2NoZWNrKHN4LT5jY3R4LnNvY2spOwordGZvX291dF9jaGVjayhzeC0+Y2N0eC5z
b2NrKTsKICNlbmRpZgogCiAvKiBSZXR1cm4gYSB2YWx1ZSB0aGF0IGRlcGVuZHMgb24gdGhlIFNN
VFAgcmV0dXJuIGNvZGUuIE9uIHNvbWUgc3lzdGVtcyBhCkBAIC04MjEsNyArOTI0LDExIEBACiB0
aW1lb3V0cywgbG9zdCBjb25uZWN0aW9ucywgZXRjLiAqLwogCiBlcnJubyA9IDA7Ci1yZXR1cm4g
YnVmZmVyWzBdID09IG9rZGlnaXQ7Cit5aWVsZCA9IGJ1ZmZlclswXSA9PSBva2RpZ2l0OworCitv
dXQ6CisgIHNtdHBfZGVidWdfcmVzcChidWZmZXIpOworICByZXR1cm4geWllbGQ7CiB9CiAKIC8q
IEVuZCBvZiBzbXRwX291dC5jICovCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvc3BhbS5jIGV4aW0v
c3JjL3NwYW0uYwotLS0gZXhpbS5vcmlnL3NyYy9zcGFtLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4w
MDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL3NwYW0uYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAw
MDAwMDAwMCArMDMwMApAQCAtMiw5ICsyLDEwIEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQg
bWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KIAotLyogQ29weXJpZ2h0IChjKSBUb20gS2lzdG5lciA8dG9t
QGR1bmNhbnRocmF4Lm5ldD4gMjAwMyAtIDIwMTUKKy8qCisgKiBDb3B5cmlnaHQgKGMpIFRoZSBF
eGltIE1haW50YWluZXJzIDIwMTYgLSAyMDIyCisgKiBDb3B5cmlnaHQgKGMpIFRvbSBLaXN0bmVy
IDx0b21AZHVuY2FudGhyYXgubmV0PiAyMDAzIC0gMjAxNQogICogTGljZW5zZTogR1BMCi0gKiBD
b3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMTYgLSAyMDIwCiAgKi8KIAogLyog
Q29kZSBmb3IgY2FsbGluZyBzcGFtYXNzYXNzaW4ncyBzcGFtZC4gQ2FsbGVkIGZyb20gYWNsLmMu
ICovCkBAIC0zNSw3ICszNiw3IEBACiBzcGFtZC0+d2VpZ2h0ID0gU1BBTURfV0VJR0hUOwogc3Bh
bWQtPnRpbWVvdXQgPSBTUEFNRF9USU1FT1VUOwogc3BhbWQtPnJldHJ5ID0gMDsKLXNwYW1kLT5w
cmlvcml0eSA9IDE7CitzcGFtZC0+cHJpb3JpdHkgPSBTUEFNRF9QUklPUklUWTsKIHJldHVybiAw
OwogfQogCkBAIC0xMzksMjEgKzE0MCwxMSBAQAogc3BhbWRfYWRkcmVzc19jb250YWluZXIgKiBz
ZDsKIGxvbmcgd2VpZ2h0czsKIHVuc2lnbmVkIHByaTsKLXN0YXRpYyBCT09MIHNyYW5kb21lZCA9
IEZBTFNFOwogCiAvKiBzcGVlZHVwLCBpZiB3ZSBoYXZlIG9ubHkgMSBzZXJ2ZXIgKi8KIGlmIChu
dW1fc2VydmVycyA9PSAxKQogICByZXR1cm4gKHNwYW1kc1swXS0+aXNfZmFpbGVkID8gLTEgOiAw
KTsKIAotLyogaW5pdCByYW5tb2QgKi8KLWlmICghc3JhbmRvbWVkKQotICB7Ci0gIHN0cnVjdCB0
aW1ldmFsIHR2OwotICBnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKLSAgc3JhbmRvbSgodW5zaWdu
ZWQgaW50KSh0di50dl91c2VjLzEwMDApKTsKLSAgc3JhbmRvbWVkID0gVFJVRTsKLSAgfQotCiAv
KiBzY2FuIGZvciBoaWdoZXN0IHByaSAqLwogZm9yIChwcmkgPSAwLCBpID0gMDsgaSA8IG51bV9z
ZXJ2ZXJzOyBpKyspCiAgIHsKQEAgLTE3MCw3ICsxNjEsNyBAQAogaWYgKHdlaWdodHMgPT0gMCkJ
LyogYWxsIHNlcnZlcnMgZmFpbGVkICovCiAgIHJldHVybiAtMTsKIAotZm9yIChsb25nIHJuZCA9
IHJhbmRvbSgpICUgd2VpZ2h0cywgaSA9IDA7IGkgPCBudW1fc2VydmVyczsgaSsrKQorZm9yIChs
b25nIHJuZCA9IHJhbmRvbV9udW1iZXIod2VpZ2h0cyksIGkgPSAwOyBpIDwgbnVtX3NlcnZlcnM7
IGkrKykKICAgewogICBzZCA9IHNwYW1kc1tpXTsKICAgaWYgKCFzZC0+aXNfZmFpbGVkICYmIHNk
LT5wcmlvcml0eSA9PSBwcmkpCkBAIC0yMDQsMTIgKzE5NSw2IEBACiBpbnQgb3ZlcnJpZGUgPSAw
OwogdGltZV90IHN0YXJ0Owogc2l6ZV90IHJlYWQsIHdyb3RlOwotI2lmbmRlZiBOT19QT0xMX0gK
LXN0cnVjdCBwb2xsZmQgcG9sbGZkOwotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLyogUGF0Y2ggcG9zdGVkIGJ5IEVyaWsgPyBmb3IgT1MgWCAqLwotc3RydWN0IHRpbWV2YWwg
c2VsZWN0X3R2OyAgICAgICAgIC8qIGFuZCBhcHBsaWVkIGJ5IFBIICovCi1mZF9zZXQgc2VsZWN0
X2ZkOwotI2VuZGlmCiB1c2NoYXIgKnNwYW1kX2FkZHJlc3Nfd29yazsKIHNwYW1kX2FkZHJlc3Nf
Y29udGFpbmVyICogc2Q7CiAKQEAgLTIyNCw4ICsyMDksNyBAQAogICB9CiAKIC8qIGlmIHVzZXJu
YW1lIGlzICIwIiBvciAiZmFsc2UiLCBkbyBub3Qgc2NhbiAqLwotaWYgKCAoVXN0cmNtcCh1c2Vy
X25hbWUsIjAiKSA9PSAwKSB8fAotICAgICAoc3RyY21waWModXNlcl9uYW1lLFVTImZhbHNlIikg
PT0gMCkgKQoraWYgKFVzdHJjbXAodXNlcl9uYW1lLCAiMCIpID09IDAgfHwgc3RyY21waWModXNl
cl9uYW1lLCBVUyJmYWxzZSIpID09IDApCiAgIHJldHVybiBGQUlMOwogCiAvKiBpZiB0aGVyZSBp
cyBhbiBhZGRpdGlvbmFsIG9wdGlvbiwgY2hlY2sgaWYgaXQgaXMgInRydWUiICovCkBAIC0yMzQs
MTkgKzIxOCwxNSBAQAogICBvdmVycmlkZSA9IDE7CiAKIC8qIGV4cGFuZCBzcGFtZF9hZGRyZXNz
IGlmIG5lZWRlZCAqLwotaWYgKCpzcGFtZF9hZGRyZXNzID09ICckJykKK2lmICgqc3BhbWRfYWRk
cmVzcyAhPSAnJCcpCisgIHNwYW1kX2FkZHJlc3Nfd29yayA9IHNwYW1kX2FkZHJlc3M7CitlbHNl
IGlmICghKHNwYW1kX2FkZHJlc3Nfd29yayA9IGV4cGFuZF9zdHJpbmcoc3BhbWRfYWRkcmVzcykp
KQogICB7Ci0gIHNwYW1kX2FkZHJlc3Nfd29yayA9IGV4cGFuZF9zdHJpbmcoc3BhbWRfYWRkcmVz
cyk7Ci0gIGlmIChzcGFtZF9hZGRyZXNzX3dvcmsgPT0gTlVMTCkKLSAgICB7Ci0gICAgbG9nX3dy
aXRlKDAsIExPR19NQUlOfExPR19QQU5JQywKLSAgICAgICIlcyBzcGFtZF9hZGRyZXNzIHN0YXJ0
cyB3aXRoICQsIGJ1dCBleHBhbnNpb24gZmFpbGVkOiAlcyIsCi0gICAgICBsb2dsYWJlbCwgZXhw
YW5kX3N0cmluZ19tZXNzYWdlKTsKLSAgICByZXR1cm4gREVGRVI7Ci0gICAgfQorICBsb2dfd3Jp
dGUoMCwgTE9HX01BSU58TE9HX1BBTklDLAorICAgICIlcyBzcGFtZF9hZGRyZXNzIHN0YXJ0cyB3
aXRoICQsIGJ1dCBleHBhbnNpb24gZmFpbGVkOiAlcyIsCisgICAgbG9nbGFiZWwsIGV4cGFuZF9z
dHJpbmdfbWVzc2FnZSk7CisgIHJldHVybiBERUZFUjsKICAgfQotZWxzZQotICBzcGFtZF9hZGRy
ZXNzX3dvcmsgPSBzcGFtZF9hZGRyZXNzOwogCiBERUJVRyhEX2FjbCkgZGVidWdfcHJpbnRmX2lu
ZGVudCgic3BhbWQ6IGFkZHJsaXN0ICclcydcbiIsIHNwYW1kX2FkZHJlc3Nfd29yayk7CiAKQEAg
LTI5MCw3ICsyNzAsNyBAQAogICAgIHVzY2hhciAqIHM7CiAKICAgICBERUJVRyhEX2FjbCkgZGVi
dWdfcHJpbnRmX2luZGVudCgic3BhbWQ6IGFkZHIgZW50cnkgJyVzJ1xuIiwgYWRkcmVzcyk7Ci0g
ICAgc2QgPSBzdG9yZV9nZXQoc2l6ZW9mKHNwYW1kX2FkZHJlc3NfY29udGFpbmVyKSwgRkFMU0Up
OworICAgIHNkID0gc3RvcmVfZ2V0KHNpemVvZihzcGFtZF9hZGRyZXNzX2NvbnRhaW5lciksIEdF
VF9VTlRBSU5URUQpOwogCiAgICAgZm9yIChzdWJsaXN0ID0gYWRkcmVzcywgYXJncyA9IDAsIHNw
YW1kX3BhcmFtX2luaXQoc2QpOwogCSAocyA9IHN0cmluZ19uZXh0aW5saXN0KCZzdWJsaXN0LCAm
c3VibGlzdF9zZXAsIE5VTEwsIDApKTsKQEAgLTQxMCwxOSArMzkwLDE5IEBACiAgIH0KIAogLyog
bm93IHNlbmQgdGhlIGZpbGUgKi8KLS8qIHNwYW1kIHNvbWV0aW1lcyBhY2NlcHRzIGNvbm5lY3Rp
b25zIGJ1dCBkb2Vzbid0IHJlYWQgZGF0YSBvZmYKLSAqIHRoZSBjb25uZWN0aW9uLiAgV2UgbWFr
ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG5vbi1ibG9ja2luZyBzbwotICogdGhhdCB0aGUgd3JpdGUg
d2lsbCBvbmx5IHdyaXRlIHN1ZmZpY2llbnQgZGF0YSB3aXRob3V0IGJsb2NraW5nCi0gKiBhbmQg
d2UgcG9sbCB0aGUgZGVzY3JpcHRvciB0byBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gd3JpdGUgd2l0
aG91dAotICogYmxvY2tpbmcuICBTaG9ydCB3cml0ZXMgYXJlIGdyYWNlZnVsbHkgaGFuZGxlZCBh
bmQgaWYgdGhlIHdob2xlCi0gKiB0cmFuc2FjdGlvbiB0YWtlcyB0b28gbG9uZyBpdCBpcyBhYm9y
dGVkLgotICogTm90ZTogcG9sbCgpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gT1NYIDEwLjIgYW5kIGlz
IHJlcG9ydGVkIHRvIGJlCi0gKiAgICAgICBicm9rZW4gaW4gbW9yZSByZWNlbnQgdmVyc2lvbnMg
KHVwIHRvIDEwLjQpLgorLyogc3BhbWQgc29tZXRpbWVzIGFjY2VwdHMgY29ubmVjdGlvbnMgYnV0
IGRvZXNuJ3QgcmVhZCBkYXRhIG9mZiB0aGUgY29ubmVjdGlvbi4KK1dlIG1ha2UgdGhlIGZpbGUg
ZGVzY3JpcHRvciBub24tYmxvY2tpbmcgc28gdGhhdCB0aGUgd3JpdGUgd2lsbCBvbmx5IHdyaXRl
CitzdWZmaWNpZW50IGRhdGEgd2l0aG91dCBibG9ja2luZyBhbmQgd2UgcG9sbCB0aGUgZGVzY3Jp
cHRvciB0byBtYWtlIHN1cmUgdGhhdCB3ZQorY2FuIHdyaXRlIHdpdGhvdXQgYmxvY2tpbmcuICBT
aG9ydCB3cml0ZXMgYXJlIGdyYWNlZnVsbHkgaGFuZGxlZCBhbmQgaWYgdGhlCit3aG9sZSB0cmFu
c2FjdGlvbiB0YWtlcyB0b28gbG9uZyBpdCBpcyBhYm9ydGVkLgorCitOb3RlOiBwb2xsKCkgaXMg
bm90IHN1cHBvcnRlZCBpbiBPU1ggMTAuMiBhbmQgaXMgcmVwb3J0ZWQgdG8gYmUgYnJva2VuIGlu
IG1vcmUKKyAgICAgIHJlY2VudCB2ZXJzaW9ucyAodXAgdG8gMTAuNCkuIFdvcmthcm91bmQgdXNp
bmcgc2VsZWN0KCkgcmVtb3ZlZCAyMDIxLzExIChqZ2gpLgogICovCi0jaWZuZGVmIE5PX1BPTExf
SAotcG9sbGZkLmZkID0gc3BhbWRfY2N0eC5zb2NrOwotcG9sbGZkLmV2ZW50cyA9IFBPTExPVVQ7
CisjaWZkZWYgTk9fUE9MTF9ICisjIGVycm9yIE5lZWQgcG9sbCgyKSBzdXBwb3J0CiAjZW5kaWYK
KwogKHZvaWQpZmNudGwoc3BhbWRfY2N0eC5zb2NrLCBGX1NFVEZMLCBPX05PTkJMT0NLKTsKIGRv
CiAgIHsKQEAgLTQzMSwxOSArNDExLDcgQEAKICAgICB7CiAgICAgb2Zmc2V0ID0gMDsKIGFnYWlu
OgotI2lmbmRlZiBOT19QT0xMX0gKLSAgICByZXN1bHQgPSBwb2xsKCZwb2xsZmQsIDEsIDEwMDAp
OwotCi0vKiBQYXRjaCBwb3N0ZWQgYnkgRXJpayA/IGZvciBPUyBYIGFuZCBhcHBsaWVkIGJ5IFBI
ICovCi0jZWxzZQotICAgIHNlbGVjdF90di50dl9zZWMgPSAxOwotICAgIHNlbGVjdF90di50dl91
c2VjID0gMDsKLSAgICBGRF9aRVJPKCZzZWxlY3RfZmQpOwotICAgIEZEX1NFVChzcGFtZF9jY3R4
LnNvY2ssICZzZWxlY3RfZmQpOwotICAgIHJlc3VsdCA9IHNlbGVjdChzcGFtZF9jY3R4LnNvY2sr
MSwgTlVMTCwgJnNlbGVjdF9mZCwgTlVMTCwgJnNlbGVjdF90dik7Ci0jZW5kaWYKLS8qIEVuZCBF
cmlrJ3MgcGF0Y2ggKi8KLQorICAgIHJlc3VsdCA9IHBvbGxfb25lX2ZkKHNwYW1kX2NjdHguc29j
aywgUE9MTE9VVCwgMTAwMCk7CiAgICAgaWYgKHJlc3VsdCA9PSAtMSAmJiBlcnJubyA9PSBFSU5U
UikKICAgICAgIGdvdG8gYWdhaW47CiAgICAgZWxzZSBpZiAocmVzdWx0IDwgMSkKZGlmZiAtdXIg
ZXhpbS5vcmlnL3NyYy9zcGFtLmggZXhpbS9zcmMvc3BhbS5oCi0tLSBleGltLm9yaWcvc3JjL3Nw
YW0uaAkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvc3Bh
bS5oCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0zLDYgKzMsNyBAQAog
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyog
Q29weXJpZ2h0IChjKSBUb20gS2lzdG5lciA8dG9tQGR1bmNhbnRocmF4Lm5ldD4gMjAwMyAtIDIw
MTUgKi8KKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMSAqLwogLyog
TGljZW5zZTogR1BMICovCiAKIC8qIHNwYW0gZGVmaW5lcyAqLwpAQCAtMjEsOCArMjIsOSBAQAog
IyBkZWZpbmUgU0hVVF9XUiAxCiAjZW5kaWYKIAotLyogZGVmYXVsdCB3ZWlnaHQgKi8KKy8qIERl
ZmF1bHRzICovCiAjZGVmaW5lIFNQQU1EX1dFSUdIVCAxCisjZGVmaW5lIFNQQU1EX1BSSU9SSVRZ
IDEKIAogdHlwZWRlZiBzdHJ1Y3Qgc3BhbWRfYWRkcmVzc19jb250YWluZXIKIHsKZGlmZiAtdXIg
ZXhpbS5vcmlnL3NyYy9zcGYuYyBleGltL3NyYy9zcGYuYwotLS0gZXhpbS5vcmlnL3NyYy9zcGYu
YwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvc3BmLmMJ
MjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTMsOSArMyw5IEBACiAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBTUEYg
c3VwcG9ydC4KKyAgIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNSAtIDIw
MjIKICAgIENvcHlyaWdodCAoYykgVG9tIEtpc3RuZXIgPHRvbUBkdW5jYW50aHJheC5uZXQ+IDIw
MDQgLSAyMDE0CiAgICBMaWNlbnNlOiBHUEwKLSAgIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFp
bnRhaW5lcnMgMjAxNSAtIDIwMjAKICovCiAKIC8qIENvZGUgZm9yIGNhbGxpbmcgc3BmIGNoZWNr
cyB2aWEgbGlic3BmLWFsdC4gQ2FsbGVkIGZyb20gYWNsLmMuICovCkBAIC0zNCwxNSArMzQsMTcg
QEAKIFNQRl9kbnNfcnJfdCAgKiBzcGZfbnhkb21haW4gPSBOVUxMOwogCiAKLXZvaWQKLXNwZl9s
aWJfdmVyc2lvbl9yZXBvcnQoRklMRSAqIGZwKQorZ3N0cmluZyAqCitzcGZfbGliX3ZlcnNpb25f
cmVwb3J0KGdzdHJpbmcgKiBnKQogewogaW50IG1haiwgbWluLCBwYXRjaDsKKwogU1BGX2dldF9s
aWJfdmVyc2lvbigmbWFqLCAmbWluLCAmcGF0Y2gpOwotZnByaW50ZihmcCwgIkxpYnJhcnkgdmVy
c2lvbjogc3BmMjogQ29tcGlsZTogJWQuJWQuJWRcbiIsCitnID0gc3RyaW5nX2ZtdF9hcHBlbmQo
ZywgIkxpYnJhcnkgdmVyc2lvbjogc3BmMjogQ29tcGlsZTogJWQuJWQuJWRcbiIsCiAJU1BGX0xJ
Ql9WRVJTSU9OX01BSk9SLCBTUEZfTElCX1ZFUlNJT05fTUlOT1IsIFNQRl9MSUJfVkVSU0lPTl9Q
QVRDSCk7Ci1mcHJpbnRmKGZwLCAiICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lOiAlZC4l
ZC4lZFxuIiwKK2cgPSBzdHJpbmdfZm10X2FwcGVuZChnLCAgICAiICAgICAgICAgICAgICAgICAg
ICAgICBSdW50aW1lOiAlZC4lZC4lZFxuIiwKIAkgbWFqLCBtaW4sIHBhdGNoKTsKK3JldHVybiBn
OwogfQogCiAKQEAgLTgwLDYgKzgyLDcgQEAKICAgSERFQlVHKERfaG9zdF9sb29rdXApIGRlYnVn
X3ByaW50ZigiZmFraW5nIE5PX0RBVEEgZm9yIFNQRiBSUig5OSkgbG9va3VwXG4iKTsKICAgc3Jy
LmhlcnJubyA9IE5PX0RBVEE7CiAgIFNQRl9kbnNfcnJfZHVwKCZzcGZyciwgJnNycik7CisgIHN0
b3JlX2ZyZWVfZG5zX2Fuc3dlcihkbnNhKTsKICAgcmV0dXJuIHNwZnJyOwogICB9CiAKQEAgLTEw
MCw2ICsxMDMsNyBAQAogaWYgKGZvdW5kID09IDApCiAgIHsKICAgU1BGX2Ruc19ycl9kdXAoJnNw
ZnJyLCAmc3JyKTsKKyAgc3RvcmVfZnJlZV9kbnNfYW5zd2VyKGRuc2EpOwogICByZXR1cm4gc3Bm
cnI7CiAgIH0KIApAQCAtMTcxLDYgKzE3NSw3IEBACiAKIC8qIHNwZnJyLT5yciBtdXN0IGhhdmUg
YmVlbiBtYWxsb2MoKWQgZm9yIHRoaXMgKi8KIFNQRl9kbnNfcnJfZHVwKCZzcGZyciwgJnNycik7
CitzdG9yZV9mcmVlX2Ruc19hbnN3ZXIoZG5zYSk7CiByZXR1cm4gc3BmcnI7CiB9CiAKQEAgLTI0
OCw3ICsyNTMsNyBAQAogaWYgKCEocyA9IGV4cGFuZF9zdHJpbmcoc3BmX3NtdHBfY29tbWVudF90
ZW1wbGF0ZSkpKQogICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDX0RJRSwgImV4cGFu
c2lvbiBvZiBzcGZfc210cF9jb21tZW50X3RlbXBsYXRlIGZhaWxlZCIpOwogCi1TUEZfc2VydmVy
X3NldF9leHBsYW5hdGlvbihzcGZfc2VydmVyLCBzLCAmc3BmX3Jlc3BvbnNlKTsKK1NQRl9zZXJ2
ZXJfc2V0X2V4cGxhbmF0aW9uKHNwZl9zZXJ2ZXIsIENDUyBzLCAmc3BmX3Jlc3BvbnNlKTsKIGlm
IChTUEZfcmVzcG9uc2VfZXJyY29kZShzcGZfcmVzcG9uc2UpICE9IFNQRl9FX1NVQ0NFU1MpCiAg
IGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLCAiJXMiLCBTUEZfc3RyZXJyb3Io
U1BGX3Jlc3BvbnNlX2VycmNvZGUoc3BmX3Jlc3BvbnNlKSkpOwogCkBAIC00MDIsOCArNDA3LDEy
IEBACiAgIGcgPSBzdHJpbmdfY2F0KGcsIFVTIiAoYmVzdCBndWVzcyByZWNvcmQgZm9yIGRvbWFp
bikiKTsKIAogcyA9IGV4cGFuZF9zdHJpbmcoVVMiJHNlbmRlcl9hZGRyZXNzX2RvbWFpbiIpOwor
aWYgKHMgJiYgKnMpCisgIHJldHVybiBzdHJpbmdfYXBwZW5kKGcsIDIsIFVTIiBzbXRwLm1haWxm
cm9tPSIsIHMpOworCitzID0gc2VuZGVyX2hlbG9fbmFtZTsKIHJldHVybiBzICYmICpzCi0gID8g
c3RyaW5nX2FwcGVuZChnLCAyLCBVUyIgc210cC5tYWlsZnJvbT0iLCBzKQorICA/IHN0cmluZ19h
cHBlbmQoZywgMiwgVVMiIHNtdHAuaGVsbz0iLCBzKQogICA6IHN0cmluZ19jYXQoZywgVVMiIHNt
dHAubWFpbGZyb209PD4iKTsKIH0KIApkaWZmIC11ciBleGltLm9yaWcvc3JjL3NwZi5oIGV4aW0v
c3JjL3NwZi5oCi0tLSBleGltLm9yaWcvc3JjL3NwZi5oCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAw
MDAwMDAwICswMzAwCisrKyBleGltL3NyYy9zcGYuaAkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAw
MDAwMCArMDMwMApAQCAtMyw5ICszLDkgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCiAKIC8qIEV4cGVyaW1lbnRhbCBTUEYgc3VwcG9ydC4KKyAg
IENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNiAtIDIwMjIKICAgIENvcHly
aWdodCAoYykgVG9tIEtpc3RuZXIgPHRvbUBkdW5jYW50aHJheC5uZXQ+IDIwMDQKICAgIExpY2Vu
c2U6IEdQTAotICAgQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDE2IC0gMjAy
MAogKi8KIAogI2lmZGVmIFNVUFBPUlRfU1BGCkBAIC0yNSw3ICsyNSw3IEBACiB9IHNwZl9yZXN1
bHRfaWQ7CiAKIC8qIHByb3RvdHlwZXMgKi8KLXZvaWQgc3BmX2xpYl92ZXJzaW9uX3JlcG9ydChG
SUxFICopOworZ3N0cmluZyAqIHNwZl9saWJfdmVyc2lvbl9yZXBvcnQoZ3N0cmluZyAqKTsKIEJP
T0wgc3BmX2luaXQodm9pZCk7CiBCT09MIHNwZl9jb25uX2luaXQodXNjaGFyICosIHVzY2hhciAq
KTsKIGludCAgc3BmX3Byb2Nlc3MoY29uc3QgdXNjaGFyICoqLCB1c2NoYXIgKiwgaW50KTsKZGlm
ZiAtdXIgZXhpbS5vcmlnL3NyYy9zcG9vbF9pbi5jIGV4aW0vc3JjL3Nwb29sX2luLmMKLS0tIGV4
aW0ub3JpZy9zcmMvc3Bvb2xfaW4uYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMw
MAorKysgZXhpbS9zcmMvc3Bvb2xfaW4uYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCAr
MDMwMApAQCAtMiw4ICsyLDggQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5z
cG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAg
LSAyMDIyICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUg
LSAyMDE4ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8K
IC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmli
dXRpb24uICovCiAKIC8qIEZ1bmN0aW9ucyBmb3IgcmVhZGluZyBzcG9vbCBmaWxlcy4gV2hlbiBj
b21waWxpbmcgZm9yIGEgdXRpbGl0eSAoZXhpbW9uKSwKQEAgLTE4Niw3ICsxODYsNyBAQAogCiBp
ZiAobiA8IDUpIHJldHVybiBGQUxTRTsgICAgLyogbWFsZm9ybWVkIGxpbmUgKi8KIGJ1ZmZlcltu
LTFdID0gMDsgICAgICAgICAgICAvKiBSZW1vdmUgXG4gKi8KLW5vZGUgPSBzdG9yZV9nZXQoc2l6
ZW9mKHRyZWVfbm9kZSkgKyBuIC0gMywgVFJVRSk7CS8qIHJjcHQgbmFtZXMgdGFpbnRlZCAqLwor
bm9kZSA9IHN0b3JlX2dldChzaXplb2YodHJlZV9ub2RlKSArIG4gLSAzLCBHRVRfVEFJTlRFRCk7
CS8qIHJjcHQgbmFtZXMgdGFpbnRlZCAqLwogKmNvbm5lY3QgPSBub2RlOwogVXN0cmNweShub2Rl
LT5uYW1lLCBidWZmZXIgKyAzKTsKIG5vZGUtPmRhdGEucHRyID0gTlVMTDsKQEAgLTMwMCw2ICsz
MDAsOSBAQAogbWVzc2FnZV91dGY4X2Rvd25jb252ZXJ0ID0gMDsKICNlbmRpZgogCisjaWZuZGVm
IENPTVBJTEVfVVRJTElUWQorZGVidWdsb2dfbmFtZVswXSA9ICdcMCc7CisjZW5kaWYKIGRzbl9y
ZXQgPSAwOwogZHNuX2VudmlkID0gTlVMTDsKIH0KQEAgLTQ0Miw3ICs0NDUsNyBAQAogaWYgKG4g
PCAzIHx8IGJpZ19idWZmZXJbMF0gIT0gJzwnIHx8IGJpZ19idWZmZXJbbi0yXSAhPSAnPicpCiAg
IGdvdG8gU1BPT0xfRk9STUFUX0VSUk9SOwogCi1zZW5kZXJfYWRkcmVzcyA9IHN0b3JlX2dldChu
LTIsIFRSVUUpOwkvKiB0YWludGVkICovCitzZW5kZXJfYWRkcmVzcyA9IHN0b3JlX2dldChuLTIs
IEdFVF9UQUlOVEVEKTsKIFVzdHJuY3B5KHNlbmRlcl9hZGRyZXNzLCBiaWdfYnVmZmVyKzEsIG4t
Myk7CiBzZW5kZXJfYWRkcmVzc1tuLTNdID0gMDsKIApAQCAtNDUxLDYgKzQ1NCw4IEBACiBpZiAo
c3NjYW5mKENTIGJpZ19idWZmZXIsIFRJTUVfVF9GTVQgIiAlZCIsICZyZWNlaXZlZF90aW1lLnR2
X3NlYywgJndhcm5pbmdfY291bnQpICE9IDIpCiAgIGdvdG8gU1BPT0xfRk9STUFUX0VSUk9SOwog
cmVjZWl2ZWRfdGltZS50dl91c2VjID0gMDsKK3JlY2VpdmVkX3RpbWVfY29tcGxldGUgPSByZWNl
aXZlZF90aW1lOworCiAKIG1lc3NhZ2VfYWdlID0gdGltZShOVUxMKSAtIHJlY2VpdmVkX3RpbWUu
dHZfc2VjOwogI2lmbmRlZiBDT01QSUxFX1VUSUxJVFkKQEAgLTQ3NywxMSArNDgyLDEzIEBACiB0
aGF0IHdlIGRvbid0IHJlY29nbml6ZS4gT3RoZXJ3aXNlIGl0IHdvdWxkbid0IGJlIHBvc3NpYmxl
IHRvIGJhY2sgb2ZmIGEgbmV3CiB2ZXJzaW9uIHRoYXQgbGVmdCBuZXctc3R5bGUgZmxhZ3Mgd3Jp
dHRlbiBvbiB0aGUgc3Bvb2wuCiAKLUlmIHRoZSBsaW5lIHN0YXJ0cyB3aXRoICItLSIgdGhlIGNv
bnRlbnQgb2YgdGhlIHZhcmlhYmxlIGlzIHRhaW50ZWQuICAqLworSWYgdGhlIGxpbmUgc3RhcnRz
IHdpdGggIi0tIiB0aGUgY29udGVudCBvZiB0aGUgdmFyaWFibGUgaXMgdGFpbnRlZC4KK0lmIHRo
ZSBsaW5lIHN0YXJ0ICItLSg8bG9va3VwdHlwZT4pIiBpdCBpcyBhbHNvIHF1b3RlZCBmb3IgdGhl
IGdpdmVuIDxsb29rdXB0eXBlPi4KKyovCiAKIGZvciAoOzspCiAgIHsKLSAgQk9PTCB0YWludGVk
OworICBjb25zdCB2b2lkICogcHJvdG9fbWVtOwogICB1c2NoYXIgKiB2YXI7CiAgIGNvbnN0IHVz
Y2hhciAqIHA7CiAKQEAgLTQ4OSw4ICs0OTYsMjMgQEAKICAgaWYgKGJpZ19idWZmZXJbMF0gIT0g
Jy0nKSBicmVhazsKICAgYmlnX2J1ZmZlcltVc3RybGVuKGJpZ19idWZmZXIpLTFdID0gMDsKIAot
ICB0YWludGVkID0gYmlnX2J1ZmZlclsxXSA9PSAnLSc7Ci0gIHZhciA9ICBiaWdfYnVmZmVyICsg
KHRhaW50ZWQgPyAyIDogMSk7CisgIHByb3RvX21lbSA9IGJpZ19idWZmZXJbMV0gPT0gJy0nID8g
R0VUX1RBSU5URUQgOiBHRVRfVU5UQUlOVEVEOworICB2YXIgPSAgYmlnX2J1ZmZlciArIChwcm90
b19tZW0gPT0gR0VUX1VOVEFJTlRFRCA/IDEgOiAyKTsKKyAgaWYgKCp2YXIgPT0gJygnKQkJCQkv
KiBtYXJrZXIgZm9yIHF1b3RlZCB2YWx1ZSAqLworICAgIHsKKyAgICB1c2NoYXIgKiBzOworICAg
IGludCBpZHg7CisgICAgZm9yIChzID0gKyt2YXI7ICpzICE9ICcpJzsgKSBzKys7CisjaWZuZGVm
IENPTVBJTEVfVVRJTElUWQorICAgIGlmICgoaWR4ID0gc2VhcmNoX2ZpbmR0eXBlKHZhciwgcyAt
IHZhcikpIDwgMCkKKyAgICAgIHsKKyAgICAgIERFQlVHKERfYW55KSBkZWJ1Z19wcmludGYoIlVu
cmVjb2duaXNlZCBxdW90ZXIgJS4qc1xuIiwgKGludCkocyAtIHZhciksIHZhcisxKTsKKyAgICAg
IGdvdG8gU1BPT0xfRk9STUFUX0VSUk9SOworICAgICAgfQorICAgIHByb3RvX21lbSA9IHN0b3Jl
X2dldF9xdW90ZWQoMSwgR0VUX1RBSU5URUQsIGlkeCk7CisjZW5kaWYgIC8qIENPTVBJTEVfVVRJ
TElUWSAqLworICAgIHZhciA9IHMgKyAxOworICAgIH0KICAgcCA9IHZhciArIDE7CiAKICAgc3dp
dGNoKCp2YXIpCkBAIC01MTQsNyArNTM2LDcgQEAKICAgICAgICAgKGludCkoZW5kcHRyIC0gdmFy
IC0gNSksIHZhciArIDUpOwogICAgICAgaWYgKHNzY2FuZihDUyBlbmRwdHIsICIgJWQiLCAmY291
bnQpICE9IDEpIGdvdG8gU1BPT0xfRk9STUFUX0VSUk9SOwogICAgICAgbm9kZSA9IGFjbF92YXJf
Y3JlYXRlKG5hbWUpOwotICAgICAgbm9kZS0+ZGF0YS5wdHIgPSBzdG9yZV9nZXQoY291bnQgKyAx
LCB0YWludGVkKTsKKyAgICAgIG5vZGUtPmRhdGEucHRyID0gc3RvcmVfZ2V0KGNvdW50ICsgMSwg
cHJvdG9fbWVtKTsKICAgICAgIGlmIChmcmVhZChub2RlLT5kYXRhLnB0ciwgMSwgY291bnQrMSwg
ZnApIDwgY291bnQpIGdvdG8gU1BPT0xfUkVBRF9FUlJPUjsKICAgICAgICgodXNjaGFyKilub2Rl
LT5kYXRhLnB0cilbY291bnRdID0gMDsKICAgICAgIH0KQEAgLTUyNSwxMSArNTQ3LDExIEBACiAg
ICAgICBmLmFsbG93X3VucXVhbGlmaWVkX3NlbmRlciA9IFRSVUU7CiAKICAgICBlbHNlIGlmIChV
c3RybmNtcChwLCAidXRoX2lkIiwgNikgPT0gMCkKLSAgICAgIGF1dGhlbnRpY2F0ZWRfaWQgPSBz
dHJpbmdfY29weV90YWludCh2YXIgKyA4LCB0YWludGVkKTsKKyAgICAgIGF1dGhlbnRpY2F0ZWRf
aWQgPSBzdHJpbmdfY29weV90YWludCh2YXIgKyA4LCBwcm90b19tZW0pOwogICAgIGVsc2UgaWYg
KFVzdHJuY21wKHAsICJ1dGhfc2VuZGVyIiwgMTApID09IDApCi0gICAgICBhdXRoZW50aWNhdGVk
X3NlbmRlciA9IHN0cmluZ19jb3B5X3RhaW50KHZhciArIDEyLCB0YWludGVkKTsKKyAgICAgIGF1
dGhlbnRpY2F0ZWRfc2VuZGVyID0gc3RyaW5nX2NvcHlfdGFpbnQodmFyICsgMTIsIHByb3RvX21l
bSk7CiAgICAgZWxzZSBpZiAoVXN0cm5jbXAocCwgImN0aXZlX2hvc3RuYW1lIiwgMTQpID09IDAp
Ci0gICAgICBzbXRwX2FjdGl2ZV9ob3N0bmFtZSA9IHN0cmluZ19jb3B5X3RhaW50KHZhciArIDE2
LCB0YWludGVkKTsKKyAgICAgIHNtdHBfYWN0aXZlX2hvc3RuYW1lID0gc3RyaW5nX2NvcHlfdGFp
bnQodmFyICsgMTYsIHByb3RvX21lbSk7CiAKICAgICAvKiBGb3IgbG9uZy10ZXJtIGJhY2t3YXJk
IGNvbXBhdGliaWxpdHksIHdlIHJlY29nbml6ZSAiLWFjbCIsIHdoaWNoIHdhcwogICAgIHVzZWQg
YmVmb3JlIHRoZSBudW1iZXIgb2YgQUNMIHZhcmlhYmxlcyBjaGFuZ2VkIGZyb20gMTAgdG8gMjAu
IFRoaXMgd2FzCkBAIC01NTMsNyArNTc1LDcgQEAKICAgICAgIGVsc2UKICAgICAgICAgKHZvaWQp
IHN0cmluZ19mb3JtYXQobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJWMldSIsICdtJywgaW5kZXggLSAx
MCk7CiAgICAgICBub2RlID0gYWNsX3Zhcl9jcmVhdGUobmFtZSk7Ci0gICAgICBub2RlLT5kYXRh
LnB0ciA9IHN0b3JlX2dldChjb3VudCArIDEsIHRhaW50ZWQpOworICAgICAgbm9kZS0+ZGF0YS5w
dHIgPSBzdG9yZV9nZXQoY291bnQgKyAxLCBwcm90b19tZW0pOwogICAgICAgLyogV2Ugc2FuaXR5
LWNoZWNrZWQgdGhlIGNvdW50LCBzbyBkaXNhYmxlIHRoZSBDb3Zlcml0eSBlcnJvciAqLwogICAg
ICAgLyogY292ZXJpdHlbdGFpbnRlZF9kYXRhXSAqLwogICAgICAgaWYgKGZyZWFkKG5vZGUtPmRh
dGEucHRyLCAxLCBjb3VudCsxLCBmcCkgPCBjb3VudCkgZ290byBTUE9PTF9SRUFEX0VSUk9SOwpA
QCAtNTY4LDE4ICs1OTAsMjMgQEAKICAgICAgIGJvZHlfemVyb2NvdW50ID0gVWF0b2kodmFyICsg
MTQpOwogI2lmZGVmIEVYUEVSSU1FTlRBTF9CUklHSFRNQUlMCiAgICAgZWxzZSBpZiAoVXN0cm5j
bXAocCwgIm1pX3ZlcmRpY3RzICIsIDEyKSA9PSAwKQotICAgICAgYm1pX3ZlcmRpY3RzID0gc3Ry
aW5nX2NvcHlfdGFpbnQodmFyICsgMTMsIHRhaW50ZWQpOworICAgICAgYm1pX3ZlcmRpY3RzID0g
c3RyaW5nX2NvcHlfdGFpbnQodmFyICsgMTMsIHByb3RvX21lbSk7CiAjZW5kaWYKICAgICBicmVh
azsKIAogICAgIGNhc2UgJ2QnOgogICAgIGlmIChVc3RyY21wKHAsICJlbGl2ZXJfZmlyc3R0aW1l
IikgPT0gMCkKICAgICAgIGYuZGVsaXZlcl9maXJzdHRpbWUgPSBUUlVFOwotICAgIC8qIENoZWNr
IGlmIHRoZSBkc24gZmxhZ3MgaGF2ZSBiZWVuIHNldCBpbiB0aGUgaGVhZGVyIGZpbGUgKi8KICAg
ICBlbHNlIGlmIChVc3RybmNtcChwLCAic25fcmV0IiwgNikgPT0gMCkKICAgICAgIGRzbl9yZXQ9
IGF0b2koQ1MgdmFyICsgNyk7CiAgICAgZWxzZSBpZiAoVXN0cm5jbXAocCwgInNuX2VudmlkIiwg
OCkgPT0gMCkKLSAgICAgIGRzbl9lbnZpZCA9IHN0cmluZ19jb3B5X3RhaW50KHZhciArIDEwLCB0
YWludGVkKTsKKyAgICAgIGRzbl9lbnZpZCA9IHN0cmluZ19jb3B5X3RhaW50KHZhciArIDEwLCBw
cm90b19tZW0pOworI2lmbmRlZiBDT01QSUxFX1VUSUxJVFkKKyAgICBlbHNlIGlmIChVc3RybmNt
cChwLCAiZWJ1Z19zZWxlY3RvciAiLCAxNCkgPT0gMCkKKyAgICAgIGRlYnVnX3NlbGVjdG9yID0g
c3RydG9sKENTIHZhciArIDE1LCBOVUxMLCAwKTsKKyAgICBlbHNlIGlmIChVc3RybmNtcChwLCAi
ZWJ1Z2xvZ19uYW1lICIsIDEzKSA9PSAwKQorICAgICAgZGVidWdfbG9nZ2luZ19mcm9tX3Nwb29s
KHZhciArIDE0KTsKKyNlbmRpZgogICAgIGJyZWFrOwogCiAgICAgY2FzZSAnZic6CkBAIC01OTcs
MTMgKzYyNCwxMyBAQAogICAgIGVsc2UgaWYgKFVzdHJjbXAocCwgIm9zdF9sb29rdXBfZmFpbGVk
IikgPT0gMCkKICAgICAgIGhvc3RfbG9va3VwX2ZhaWxlZCA9IFRSVUU7CiAgICAgZWxzZSBpZiAo
VXN0cm5jbXAocCwgIm9zdF9hdXRoX3B1Ym5hbWUiLCAxNikgPT0gMCkKLSAgICAgIHNlbmRlcl9o
b3N0X2F1dGhfcHVibmFtZSA9IHN0cmluZ19jb3B5X3RhaW50KHZhciArIDE4LCB0YWludGVkKTsK
KyAgICAgIHNlbmRlcl9ob3N0X2F1dGhfcHVibmFtZSA9IHN0cmluZ19jb3B5X3RhaW50KHZhciAr
IDE4LCBwcm90b19tZW0pOwogICAgIGVsc2UgaWYgKFVzdHJuY21wKHAsICJvc3RfYXV0aCIsIDgp
ID09IDApCi0gICAgICBzZW5kZXJfaG9zdF9hdXRoZW50aWNhdGVkID0gc3RyaW5nX2NvcHlfdGFp
bnQodmFyICsgMTAsIHRhaW50ZWQpOworICAgICAgc2VuZGVyX2hvc3RfYXV0aGVudGljYXRlZCA9
IHN0cmluZ19jb3B5X3RhaW50KHZhciArIDEwLCBwcm90b19tZW0pOwogICAgIGVsc2UgaWYgKFVz
dHJuY21wKHAsICJvc3RfbmFtZSIsIDgpID09IDApCi0gICAgICBzZW5kZXJfaG9zdF9uYW1lID0g
c3RyaW5nX2NvcHlfdGFpbnQodmFyICsgMTAsIHRhaW50ZWQpOworICAgICAgc2VuZGVyX2hvc3Rf
bmFtZSA9IHN0cmluZ19jb3B5X3RhaW50KHZhciArIDEwLCBwcm90b19tZW0pOwogICAgIGVsc2Ug
aWYgKFVzdHJuY21wKHAsICJlbG9fbmFtZSIsIDgpID09IDApCi0gICAgICBzZW5kZXJfaGVsb19u
YW1lID0gc3RyaW5nX2NvcHlfdGFpbnQodmFyICsgMTAsIHRhaW50ZWQpOworICAgICAgc2VuZGVy
X2hlbG9fbmFtZSA9IHN0cmluZ19jb3B5X3RhaW50KHZhciArIDEwLCBwcm90b19tZW0pOwogCiAg
ICAgLyogV2Ugbm93IHJlY29yZCB0aGUgcG9ydCBudW1iZXIgYWZ0ZXIgdGhlIGFkZHJlc3MsIHNl
cGFyYXRlZCBieSBhCiAgICAgZG90LiBGb3IgY29tcGF0aWJpbGl0eSBkdXJpbmcgdXBncmFkaW5n
LCBkbyBub3RoaW5nIGlmIHRoZXJlCkBAIC02MTIsNyArNjM5LDcgQEAKICAgICBlbHNlIGlmIChV
c3RybmNtcChwLCAib3N0X2FkZHJlc3MiLCAxMSkgPT0gMCkKICAgICAgIHsKICAgICAgIHNlbmRl
cl9ob3N0X3BvcnQgPSBob3N0X2FkZHJlc3NfZXh0cmFjdF9wb3J0KHZhciArIDEzKTsKLSAgICAg
IHNlbmRlcl9ob3N0X2FkZHJlc3MgPSBzdHJpbmdfY29weV90YWludCh2YXIgKyAxMywgdGFpbnRl
ZCk7CisgICAgICBzZW5kZXJfaG9zdF9hZGRyZXNzID0gc3RyaW5nX2NvcHlfdGFpbnQodmFyICsg
MTMsIHByb3RvX21lbSk7CiAgICAgICB9CiAgICAgYnJlYWs7CiAKQEAgLTYyMCwxMCArNjQ3LDEw
IEBACiAgICAgaWYgKFVzdHJuY21wKHAsICJudGVyZmFjZV9hZGRyZXNzIiwgMTYpID09IDApCiAg
ICAgICB7CiAgICAgICBpbnRlcmZhY2VfcG9ydCA9IGhvc3RfYWRkcmVzc19leHRyYWN0X3BvcnQo
dmFyICsgMTgpOwotICAgICAgaW50ZXJmYWNlX2FkZHJlc3MgPSBzdHJpbmdfY29weV90YWludCh2
YXIgKyAxOCwgdGFpbnRlZCk7CisgICAgICBpbnRlcmZhY2VfYWRkcmVzcyA9IHN0cmluZ19jb3B5
X3RhaW50KHZhciArIDE4LCBwcm90b19tZW0pOwogICAgICAgfQogICAgIGVsc2UgaWYgKFVzdHJu
Y21wKHAsICJkZW50IiwgNCkgPT0gMCkKLSAgICAgIHNlbmRlcl9pZGVudCA9IHN0cmluZ19jb3B5
X3RhaW50KHZhciArIDYsIHRhaW50ZWQpOworICAgICAgc2VuZGVyX2lkZW50ID0gc3RyaW5nX2Nv
cHlfdGFpbnQodmFyICsgNiwgcHJvdG9fbWVtKTsKICAgICBicmVhazsKIAogICAgIGNhc2UgJ2wn
OgpAQCAtNjMzLDcgKzY2MCw3IEBACiAgICAgICBmLmxvY2FsX2Vycm9yX21lc3NhZ2UgPSBUUlVF
OwogI2lmZGVmIEhBVkVfTE9DQUxfU0NBTgogICAgIGVsc2UgaWYgKFVzdHJuY21wKHAsICJvY2Fs
X3NjYW4gIiwgMTApID09IDApCi0gICAgICBsb2NhbF9zY2FuX2RhdGEgPSBzdHJpbmdfY29weV90
YWludCh2YXIgKyAxMSwgdGFpbnRlZCk7CisgICAgICBsb2NhbF9zY2FuX2RhdGEgPSBzdHJpbmdf
Y29weV90YWludCh2YXIgKyAxMSwgcHJvdG9fbWVtKTsKICNlbmRpZgogICAgIGJyZWFrOwogCkBA
IC02NTAsMTIgKzY3NywyNCBAQAogCiAgICAgY2FzZSAncic6CiAgICAgaWYgKFVzdHJuY21wKHAs
ICJlY2VpdmVkX3Byb3RvY29sIiwgMTYpID09IDApCi0gICAgICByZWNlaXZlZF9wcm90b2NvbCA9
IHN0cmluZ19jb3B5X3RhaW50KHZhciArIDE4LCB0YWludGVkKTsKKyAgICAgIHJlY2VpdmVkX3By
b3RvY29sID0gc3RyaW5nX2NvcHlfdGFpbnQodmFyICsgMTgsIHByb3RvX21lbSk7CiAgICAgZWxz
ZSBpZiAoVXN0cm5jbXAocCwgImVjZWl2ZWRfdGltZV91c2VjIiwgMTcpID09IDApCiAgICAgICB7
CiAgICAgICB1bnNpZ25lZCB1c2VjOwogICAgICAgaWYgKHNzY2FuZihDUyB2YXIgKyAyMCwgIiV1
IiwgJnVzZWMpID09IDEpCisJewogCXJlY2VpdmVkX3RpbWUudHZfdXNlYyA9IHVzZWM7CisJaWYg
KCFyZWNlaXZlZF90aW1lX2NvbXBsZXRlLnR2X3NlYykgcmVjZWl2ZWRfdGltZV9jb21wbGV0ZS50
dl91c2VjID0gdXNlYzsKKwl9CisgICAgICB9CisgICAgZWxzZSBpZiAoVXN0cm5jbXAocCwgImVj
ZWl2ZWRfdGltZV9jb21wbGV0ZSIsIDIxKSA9PSAwKQorICAgICAgeworICAgICAgdW5zaWduZWQg
c2VjLCB1c2VjOworICAgICAgaWYgKHNzY2FuZihDUyB2YXIgKyAyMywgIiV1LiV1IiwgJnNlYywg
JnVzZWMpID09IDIpCisJeworCXJlY2VpdmVkX3RpbWVfY29tcGxldGUudHZfc2VjID0gc2VjOwor
CXJlY2VpdmVkX3RpbWVfY29tcGxldGUudHZfdXNlYyA9IHVzZWM7CisJfQogICAgICAgfQogICAg
IGJyZWFrOwogCkBAIC02NjQsMTEgKzcwMywxMSBAQAogICAgICAgZi5zZW5kZXJfc2V0X3VudHJ1
c3RlZCA9IFRSVUU7CiAjaWZkZWYgV0lUSF9DT05URU5UX1NDQU4KICAgICBlbHNlIGlmIChVc3Ry
bmNtcChwLCAicGFtX2JhciAiLCA4KSA9PSAwKQotICAgICAgc3BhbV9iYXIgPSBzdHJpbmdfY29w
eV90YWludCh2YXIgKyA5LCB0YWludGVkKTsKKyAgICAgIHNwYW1fYmFyID0gc3RyaW5nX2NvcHlf
dGFpbnQodmFyICsgOSwgcHJvdG9fbWVtKTsKICAgICBlbHNlIGlmIChVc3RybmNtcChwLCAicGFt
X3Njb3JlICIsIDEwKSA9PSAwKQotICAgICAgc3BhbV9zY29yZSA9IHN0cmluZ19jb3B5X3RhaW50
KHZhciArIDExLCB0YWludGVkKTsKKyAgICAgIHNwYW1fc2NvcmUgPSBzdHJpbmdfY29weV90YWlu
dCh2YXIgKyAxMSwgcHJvdG9fbWVtKTsKICAgICBlbHNlIGlmIChVc3RybmNtcChwLCAicGFtX3Nj
b3JlX2ludCAiLCAxNCkgPT0gMCkKLSAgICAgIHNwYW1fc2NvcmVfaW50ID0gc3RyaW5nX2NvcHlf
dGFpbnQodmFyICsgMTUsIHRhaW50ZWQpOworICAgICAgc3BhbV9zY29yZV9pbnQgPSBzdHJpbmdf
Y29weV90YWludCh2YXIgKyAxNSwgcHJvdG9fbWVtKTsKICNlbmRpZgogI2lmbmRlZiBDT01QSUxF
X1VUSUxJVFkKICAgICBlbHNlIGlmIChVc3RybmNtcChwLCAicG9vbF9maWxlX3dpcmVmb3JtYXQi
LCAyMCkgPT0gMCkKQEAgLTY4OCw3ICs3MjcsNyBAQAogICAgICAgaWYgKFVzdHJuY21wKHEsICJj
ZXJ0aWZpY2F0ZV92ZXJpZmllZCIsIDIwKSA9PSAwKQogCXRsc19pbi5jZXJ0aWZpY2F0ZV92ZXJp
ZmllZCA9IFRSVUU7CiAgICAgICBlbHNlIGlmIChVc3RybmNtcChxLCAiY2lwaGVyIiwgNikgPT0g
MCkKLQl0bHNfaW4uY2lwaGVyID0gc3RyaW5nX2NvcHlfdGFpbnQocSs3LCB0YWludGVkKTsKKwl0
bHNfaW4uY2lwaGVyID0gc3RyaW5nX2NvcHlfdGFpbnQocSs3LCBwcm90b19tZW0pOwogIyBpZm5k
ZWYgQ09NUElMRV9VVElMSVRZCS8qIHRscyBzdXBwb3J0IGZucyBub3QgYnVpbHQgaW4gKi8KICAg
ICAgIGVsc2UgaWYgKFVzdHJuY21wKHEsICJvdXJjZXJ0IiwgNykgPT0gMCkKIAkodm9pZCkgdGxz
X2ltcG9ydF9jZXJ0KHErOCwgJnRsc19pbi5vdXJjZXJ0KTsKQEAgLTY5NiwxNyArNzM1LDE3IEBA
CiAJKHZvaWQpIHRsc19pbXBvcnRfY2VydChxKzksICZ0bHNfaW4ucGVlcmNlcnQpOwogIyBlbmRp
ZgogICAgICAgZWxzZSBpZiAoVXN0cm5jbXAocSwgInBlZXJkbiIsIDYpID09IDApCi0JdGxzX2lu
LnBlZXJkbiA9IHN0cmluZ191bnByaW50aW5nKHN0cmluZ19jb3B5X3RhaW50KHErNywgdGFpbnRl
ZCkpOworCXRsc19pbi5wZWVyZG4gPSBzdHJpbmdfdW5wcmludGluZyhzdHJpbmdfY29weV90YWlu
dChxKzcsIHByb3RvX21lbSkpOwogICAgICAgZWxzZSBpZiAoVXN0cm5jbXAocSwgInNuaSIsIDMp
ID09IDApCi0JdGxzX2luLnNuaSA9IHN0cmluZ191bnByaW50aW5nKHN0cmluZ19jb3B5X3RhaW50
KHErNCwgdGFpbnRlZCkpOworCXRsc19pbi5zbmkgPSBzdHJpbmdfdW5wcmludGluZyhzdHJpbmdf
Y29weV90YWludChxKzQsIHByb3RvX21lbSkpOwogICAgICAgZWxzZSBpZiAoVXN0cm5jbXAocSwg
Im9jc3AiLCA0KSA9PSAwKQogCXRsc19pbi5vY3NwID0gcVs1XSAtICcwJzsKLSMgaWZkZWYgRVhQ
RVJJTUVOVEFMX1RMU19SRVNVTUUKKyMgaWZuZGVmIERJU0FCTEVfVExTX1JFU1VNRQogICAgICAg
ZWxzZSBpZiAoVXN0cm5jbXAocSwgInJlc3VtcHRpb24iLCAxMCkgPT0gMCkKIAl0bHNfaW4ucmVz
dW1wdGlvbiA9IHFbMTFdIC0gJ0EnOwogIyBlbmRpZgogICAgICAgZWxzZSBpZiAoVXN0cm5jbXAo
cSwgInZlciIsIDMpID09IDApCi0JdGxzX2luLnZlciA9IHN0cmluZ19jb3B5X3RhaW50KHErNCwg
dGFpbnRlZCk7CisJdGxzX2luLnZlciA9IHN0cmluZ19jb3B5X3RhaW50KHErNCwgcHJvdG9fbWVt
KTsKICAgICAgIH0KICAgICBicmVhazsKICNlbmRpZgpAQCAtNzQ1LDExICs3ODQsNyBAQAogICAg
IGdvdG8gU1BPT0xfRk9STUFUX0VSUk9SOwogCiAjaWZuZGVmIENPTVBJTEVfVVRJTElUWQotREVC
VUcoRF9kZWxpdmVyKQotICB7Ci0gIGRlYnVnX3ByaW50ZigiTm9uLXJlY2lwaWVudHM6XG4iKTsK
LSAgZGVidWdfcHJpbnRfdHJlZSh0cmVlX25vbnJlY2lwaWVudHMpOwotICB9CitERUJVRyhEX2Rl
bGl2ZXIpIGRlYnVnX3ByaW50X3RyZWUoIk5vbi1yZWNpcGllbnRzIiwgdHJlZV9ub25yZWNpcGll
bnRzKTsKICNlbmRpZiAgLyogQ09NUElMRV9VVElMSVRZICovCiAKIC8qIEFmdGVyIHJlYWRpbmcg
dGhlIHRyZWUsIHRoZSBuZXh0IGxpbmUgaGFzIG5vdCB5ZXQgYmVlbiByZWFkIGludG8gdGhlCkBA
IC03NjUsNyArODAwLDcgQEAKICNlbmRpZiAgLyogQ09NUElMRV9VVElMSVRZICovCiAKIHJlY2lw
aWVudHNfbGlzdF9tYXggPSByY291bnQ7Ci1yZWNpcGllbnRzX2xpc3QgPSBzdG9yZV9nZXQocmNv
dW50ICogc2l6ZW9mKHJlY2lwaWVudF9pdGVtKSwgRkFMU0UpOworcmVjaXBpZW50c19saXN0ID0g
c3RvcmVfZ2V0KHJjb3VudCAqIHNpemVvZihyZWNpcGllbnRfaXRlbSksIEdFVF9VTlRBSU5URUQp
OwogCiAvKiBXZSBzYW5pdGlzZWQgdGhlIGNvdW50IGFuZCBrbm93IHdlIGhhdmUgZW5vdWdoIG1l
bW9yeSwgc28gZGlzYWJsZQogdGhlIENvdmVyaXR5IGVycm9yIG9uIHJlY2lwaWVudHNfY291bnQg
Ki8KQEAgLTg2NSw3ICs5MDAsNyBAQAogCiAgICAgKHZvaWQpc3NjYW5mKENTIHArMSwgIiVkIiwg
JmZsYWdzKTsKIAotICAgIGlmICgoZmxhZ3MgJiAweDAxKSAhPSAwKSAgICAgIC8qIG9uZV90aW1l
IGRhdGEgZXhpc3RzICovCisgICAgaWYgKGZsYWdzICYgMHgwMSkgICAgICAvKiBvbmVfdGltZSBk
YXRhIGV4aXN0cyAqLwogICAgICAgewogICAgICAgaW50IGxlbjsKICAgICAgIHdoaWxlIChpc2Rp
Z2l0KCooLS1wKSkgfHwgKnAgPT0gJywnIHx8ICpwID09ICctJyk7CkBAIC04NzQsMTIgKzkwOSwx
MiBAQAogICAgICAgaWYgKGxlbiA+IDApCiAgICAgICAgIHsKICAgICAgICAgcCAtPSBsZW47Ci0g
ICAgICAgIGVycm9yc190byA9IHN0cmluZ19jb3B5X3RhaW50KHAsIFRSVUUpOworICAgICAgICBl
cnJvcnNfdG8gPSBzdHJpbmdfY29weV90YWludChwLCBHRVRfVEFJTlRFRCk7CiAgICAgICAgIH0K
ICAgICAgIH0KIAotICAgICooLS1wKSA9IDA7ICAgLyogVGVybWluYXRlIGFkZHJlc3MgKi8KLSAg
ICBpZiAoKGZsYWdzICYgMHgwMikgIT0gMCkgICAgICAvKiBvbmVfdGltZSBkYXRhIGV4aXN0cyAq
LworICAgICotLXAgPSAwOyAgIC8qIFRlcm1pbmF0ZSBhZGRyZXNzICovCisgICAgaWYgKGZsYWdz
ICYgMHgwMikgICAgICAvKiBvbmVfdGltZSBkYXRhIGV4aXN0cyAqLwogICAgICAgewogICAgICAg
aW50IGxlbjsKICAgICAgIHdoaWxlIChpc2RpZ2l0KCooLS1wKSkgfHwgKnAgPT0gJywnIHx8ICpw
ID09ICctJyk7CkBAIC04ODgsMTEgKzkyMywxMSBAQAogICAgICAgaWYgKGxlbiA+IDApCiAgICAg
ICAgIHsKICAgICAgICAgcCAtPSBsZW47Ci0gICAgICAgIG9yY3B0ID0gc3RyaW5nX2NvcHlfdGFp
bnQocCwgVFJVRSk7CisgICAgICAgIG9yY3B0ID0gc3RyaW5nX2NvcHlfdGFpbnQocCwgR0VUX1RB
SU5URUQpOwogICAgICAgICB9CiAgICAgICB9CiAKLSAgICAqKC0tcCkgPSAwOyAgIC8qIFRlcm1p
bmF0ZSBhZGRyZXNzICovCisgICAgKi0tcCA9IDA7ICAgLyogVGVybWluYXRlIGFkZHJlc3MgKi8K
ICAgICB9CiAjaWYgIWRlZmluZWQoQ09NUElMRV9VVElMSVRZKQogICBlbHNlCkBAIC05MDYsNyAr
OTQxLDcgQEAKICAgICAgIGJpZ19idWZmZXIsIGVycm9yc190byk7CiAjZW5kaWYKIAotICByZWNp
cGllbnRzX2xpc3RbcmVjaXBpZW50c19jb3VudF0uYWRkcmVzcyA9IHN0cmluZ19jb3B5X3RhaW50
KGJpZ19idWZmZXIsIFRSVUUpOworICByZWNpcGllbnRzX2xpc3RbcmVjaXBpZW50c19jb3VudF0u
YWRkcmVzcyA9IHN0cmluZ19jb3B5X3RhaW50KGJpZ19idWZmZXIsIEdFVF9UQUlOVEVEKTsKICAg
cmVjaXBpZW50c19saXN0W3JlY2lwaWVudHNfY291bnRdLnBubyA9IHBubzsKICAgcmVjaXBpZW50
c19saXN0W3JlY2lwaWVudHNfY291bnRdLmVycm9yc190byA9IGVycm9yc190bzsKICAgcmVjaXBp
ZW50c19saXN0W3JlY2lwaWVudHNfY291bnRdLm9yY3B0ID0gb3JjcHQ7CkBAIC05MzgsMTEgKzk3
MywxMSBAQAogCiAgIGlmIChyZWFkX2hlYWRlcnMpCiAgICAgewotICAgIGggPSBzdG9yZV9nZXQo
c2l6ZW9mKGhlYWRlcl9saW5lKSwgRkFMU0UpOworICAgIGggPSBzdG9yZV9nZXQoc2l6ZW9mKGhl
YWRlcl9saW5lKSwgR0VUX1VOVEFJTlRFRCk7CiAgICAgaC0+bmV4dCA9IE5VTEw7CiAgICAgaC0+
dHlwZSA9IGZsYWdbMF07CiAgICAgaC0+c2xlbiA9IG47Ci0gICAgaC0+dGV4dCA9IHN0b3JlX2dl
dChuKzEsIFRSVUUpOwkvKiB0YWludGVkICovCisgICAgaC0+dGV4dCA9IHN0b3JlX2dldChuKzEs
IEdFVF9UQUlOVEVEKTsKIAogICAgIGlmIChoLT50eXBlID09IGh0eXBlX3JlY2VpdmVkKSByZWNl
aXZlZF9jb3VudCsrOwogCkBAIC0xMDEzLDYgKzEwNDgsNDcgQEAKIHJldHVybiBpbmhlYWRlcj8g
c3Bvb2xfcmVhZF9oZHJlcnJvciA6IHNwb29sX3JlYWRfZW52ZXJyb3I7CiB9CiAKKworI2lmbmRl
ZiBDT01QSUxFX1VUSUxJVFkKKy8qIFJlYWQgb3V0IGp1c3QgdGhlIChlbnZlbG9wZSkgc2VuZGVy
IHN0cmluZyBmcm9tIHRoZSBzcG9vbCAtSCBmaWxlLgorUmVtb3ZlIHRoZSA8PiB3cmFwIGFuZCBy
ZXR1cm4gaXQgaW4gYWxsb2NhdGVkIHN0b3JlLiAgUmV0dXJuIE5VTEwgb24gZXJyb3IuCisKK1dl
IGFzc3VtZSB0aGF0IG1lc3NhZ2Vfc3ViZGlyIGlzIGFscmVhZHkgc2V0LgorKi8KKwordXNjaGFy
ICoKK3Nwb29sX3NlbmRlcl9mcm9tX21zZ2lkKGNvbnN0IHVzY2hhciAqIGlkKQorewordXNjaGFy
ICogbmFtZSA9IHN0cmluZ19zcHJpbnRmKCIlcy1IIiwgaWQpOworRklMRSAqIGZwOworaW50IG47
Cit1c2NoYXIgKiB5aWVsZCA9IE5VTEw7CisKK2lmICghKGZwID0gVWZvcGVuKHNwb29sX2ZuYW1l
KFVTImlucHV0IiwgbWVzc2FnZV9zdWJkaXIsIG5hbWUsIFVTIiIpLCAicmIiKSkpCisgIHJldHVy
biBOVUxMOworCitERUJVRyhEX2RlbGl2ZXIpIGRlYnVnX3ByaW50Zl9pbmRlbnQoInJlYWRpbmcg
c3Bvb2wgZmlsZSAlc1xuIiwgbmFtZSk7CisKKy8qIFNraXAgdGhlIGxpbmUgd2l0aCB0aGUgY29w
eSBvZiB0aGUgZmlsZW5hbWUsIHRoZW4gdGhlIGxpbmUgd2l0aCBsb2dpbi91aWQvZ2lkLgorUmVh
ZCB0aGUgbmV4dCBsaW5lLCB3aGljaCBzaG91bGQgYmUgdGhlIGVudmVsb3BlIHNlbmRlci4KK0Rv
IGJhc2ljIHZhbGlkYXRpb24gb24gdGhhdC4gKi8KKworaWYgKCAgVWZnZXRzKGJpZ19idWZmZXIs
IGJpZ19idWZmZXJfc2l6ZSwgZnApICE9IE5VTEwKKyAgICYmIFVmZ2V0cyhiaWdfYnVmZmVyLCBi
aWdfYnVmZmVyX3NpemUsIGZwKSAhPSBOVUxMCisgICAmJiBVZmdldHMoYmlnX2J1ZmZlciwgYmln
X2J1ZmZlcl9zaXplLCBmcCkgIT0gTlVMTAorICAgJiYgKG4gPSBVc3RybGVuKGJpZ19idWZmZXIp
KSA+PSAzCisgICAmJiBiaWdfYnVmZmVyWzBdID09ICc8JyAmJiBiaWdfYnVmZmVyW24tMl0gPT0g
Jz4nCisgICApCisgIHsKKyAgeWllbGQgPSBzdG9yZV9nZXQobi0yLCBHRVRfVEFJTlRFRCk7Cisg
IFVzdHJuY3B5KHlpZWxkLCBiaWdfYnVmZmVyKzEsIG4tMyk7CisgIHlpZWxkW24tM10gPSAwOwor
ICB9CitmY2xvc2UoZnApOworcmV0dXJuIHlpZWxkOworfQorI2VuZGlmICAvKiBDT01QSUxFX1VU
SUxJVFkgKi8KKwogLyogdmk6IGF3IGFpIHN3PTIKICovCiAvKiBFbmQgb2Ygc3Bvb2xfaW4uYyAq
LwpkaWZmIC11ciBleGltLm9yaWcvc3JjL3Nwb29sX21ib3guYyBleGltL3NyYy9zcG9vbF9tYm94
LmMKLS0tIGV4aW0ub3JpZy9zcmMvc3Bvb2xfbWJveC5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAw
MDAwMDAwICswMzAwCisrKyBleGltL3NyYy9zcG9vbF9tYm94LmMJMjAyMi0wNi0yMyAxNjo0MTox
MC4wMDAwMDAwMDAgKzAzMDAKQEAgLTQsNyArNCw3IEBACiAKIC8qIENvcHlyaWdodCAoYykgVG9t
IEtpc3RuZXIgPHRvbUBkdW5jYW50aHJheC5uZXQ+IDIwMDMgLSAyMDE1CiAgKiBMaWNlbnNlOiBH
UEwKLSAqIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNiAtIDIwMjAKKyAq
IENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNiAtIDIwMjEKICAqLwogCiAv
KiBDb2RlIGZvciBzZXR0aW5nIHVwIGEgTUJPWCBzdHlsZSBzcG9vbCBmaWxlIGluc2lkZSBhIC9z
Y2FuLzxtc2dpZD4KQEAgLTUzLDggKzUzLDggQEAKICAgdGVtcF9zdHJpbmcgPSBzdHJpbmdfc3By
aW50Zigic2Nhbi8lcyIsIG1lc3NhZ2VfaWQpOwogICBpZiAoIWRpcmVjdG9yeV9tYWtlKHNwb29s
X2RpcmVjdG9yeSwgdGVtcF9zdHJpbmcsIDA3NTAsIEZBTFNFKSkKICAgICB7Ci0gICAgbG9nX3dy
aXRlKDAsIExPR19NQUlOfExPR19QQU5JQywgIiVzIiwgc3RyaW5nX29wZW5fZmFpbGVkKGVycm5v
LAotICAgICAgInNjYW4gZGlyZWN0b3J5ICVzL3NjYW4vJXMiLCBzcG9vbF9kaXJlY3RvcnksIHRl
bXBfc3RyaW5nKSk7CisgICAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQywgIiVzIiwK
KyAgICAgIHN0cmluZ19vcGVuX2ZhaWxlZCgic2NhbiBkaXJlY3RvcnkgJXMvc2Nhbi8lcyIsIHNw
b29sX2RpcmVjdG9yeSwgdGVtcF9zdHJpbmcpKTsKICAgICBnb3RvIE9VVDsKICAgICB9CiAKQEAg
LTYyLDggKzYyLDggQEAKIAogICBpZiAoIShtYm94X2ZpbGUgPSBtb2RlZm9wZW4obWJveF9wYXRo
LCAid2IiLCBTUE9PTF9NT0RFKSkpCiAgICAgewotICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxM
T0dfUEFOSUMsICIlcyIsIHN0cmluZ19vcGVuX2ZhaWxlZChlcnJubywKLSAgICAgICJzY2FuIGZp
bGUgJXMiLCBtYm94X3BhdGgpKTsKKyAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklD
LCAiJXMiLAorICAgICAgc3RyaW5nX29wZW5fZmFpbGVkKCJzY2FuIGZpbGUgJXMiLCBtYm94X3Bh
dGgpKTsKICAgICBnb3RvIE9VVDsKICAgICB9CiAKQEAgLTE4NSw4ICsxODUsOCBAQAogaWYgKCAg
ISh5aWVsZCA9IFVmb3BlbihtYm94X3BhdGgsInJiIikpCiAgICB8fCBmc3RhdChmaWxlbm8oeWll
bGQpLCAmc3RhdGJ1ZikgIT0gMAogICAgKQotICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BB
TklDLCAiJXMiLCBzdHJpbmdfb3Blbl9mYWlsZWQoZXJybm8sCi0gICAgInNjYW4gZmlsZSAlcyIs
IG1ib3hfcGF0aCkpOworICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAiJXMiLAor
ICAgIHN0cmluZ19vcGVuX2ZhaWxlZCggInNjYW4gZmlsZSAlcyIsIG1ib3hfcGF0aCkpOwogZWxz
ZQogICAqbWJveF9maWxlX3NpemUgPSBzdGF0YnVmLnN0X3NpemU7CiAKQEAgLTIxOSwyNSArMjE5
LDI2IEBACiAgICAgewogICAgIGRlYnVnX3ByaW50ZigiVW5hYmxlIHRvIG9wZW5kaXIoJXMpOiAl
c1xuIiwgbWJveF9wYXRoLCBzdHJlcnJvcihlcnJubykpOwogICAgIC8qIEp1c3QgaW4gY2FzZSB3
ZSBzdGlsbCBjYW46ICovCi0gICAgcm1kaXIoQ1MgbWJveF9wYXRoKTsKKyAgICAodm9pZCkgcm1k
aXIoQ1MgbWJveF9wYXRoKTsKICAgICByZXR1cm47CiAgICAgfQogICAvKiBsb29wIHRocnUgZGly
ICYgZGVsZXRlIGVudHJpZXMgKi8KICAgZm9yIChzdHJ1Y3QgZGlyZW50ICplbnRyeTsgZW50cnkg
PSByZWFkZGlyKHRlbXBkaXIpOyApCiAgICAgewogICAgIHVzY2hhciAqbmFtZSA9IFVTIGVudHJ5
LT5kX25hbWU7Ci0gICAgaW50IGR1bW15OwogICAgIGlmIChVc3RyY21wKG5hbWUsIFVTIi4iKSA9
PSAwIHx8IFVzdHJjbXAobmFtZSwgVVMiLi4iKSA9PSAwKSBjb250aW51ZTsKIAogICAgIGZpbGVf
cGF0aCA9IHN0cmluZ19zcHJpbnRmKCIlcy8lcyIsIG1ib3hfcGF0aCwgbmFtZSk7CiAgICAgZGVi
dWdfcHJpbnRmKCJ1bnNwb29sX21ib3goKTogdW5saW5raW5nICclcydcbiIsIGZpbGVfcGF0aCk7
Ci0gICAgZHVtbXkgPSB1bmxpbmsoQ1MgZmlsZV9wYXRoKTsgZHVtbXkgPSBkdW1teTsJLyogY29t
cGlsZXIgcXVpZXRlbmluZyAqLworICAgIGlmICh1bmxpbmsoQ1MgZmlsZV9wYXRoKSAhPSAwKQor
ICAgICAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQywgInVubGluayglcyk6ICVzIiwg
ZmlsZV9wYXRoLCBzdHJlcnJvcihlcnJubykpOwogICAgIH0KIAogICBjbG9zZWRpcih0ZW1wZGly
KTsKIAogICAvKiByZW1vdmUgZGlyZWN0b3J5ICovCi0gIHJtZGlyKENTIG1ib3hfcGF0aCk7Cisg
IGlmIChybWRpcihDUyBtYm94X3BhdGgpICE9IDApCisgICAgbG9nX3dyaXRlKDAsIExPR19NQUlO
fExPR19QQU5JQywgInJtZGlyKCVzKTogJXMiLCBtYm94X3BhdGgsIHN0cmVycm9yKGVycm5vKSk7
CiAgIHN0b3JlX3Jlc2V0KHJlc2V0X3BvaW50KTsKICAgfQogc3Bvb2xfbWJveF9vayA9IDA7CmRp
ZmYgLXVyIGV4aW0ub3JpZy9zcmMvc3Bvb2xfb3V0LmMgZXhpbS9zcmMvc3Bvb2xfb3V0LmMKLS0t
IGV4aW0ub3JpZy9zcmMvc3Bvb2xfb3V0LmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAg
KzAzMDAKKysrIGV4aW0vc3JjL3Nwb29sX291dC5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAw
MDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwg
dHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMg
MjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ug
MTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAy
MCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRp
c3RyaWJ1dGlvbi4gKi8KIAogLyogRnVuY3Rpb25zIGZvciB3cml0aW5nIHNwb29sIGZpbGVzLCBh
bmQgbW92aW5nIHRoZW0gYWJvdXQuICovCkBAIC0xMjAsOCArMTIwLDE0IEBACiBzdGF0aWMgdm9p
ZAogc3Bvb2xfdmFyX3dyaXRlKEZJTEUgKiBmcCwgY29uc3QgdXNjaGFyICogbmFtZSwgY29uc3Qg
dXNjaGFyICogdmFsKQogewotaWYgKGlzX3RhaW50ZWQodmFsKSkgcHV0YygnLScsIGZwKTsKLWZw
cmludGYoZnAsICItJXMgJXNcbiIsIG5hbWUsIHZhbCk7CitwdXRjKCctJywgZnApOworaWYgKGlz
X3RhaW50ZWQodmFsKSkKKyAgeworICBpbnQgcSA9IHF1b3Rlcl9mb3JfYWRkcmVzcyh2YWwpOwor
ICBwdXRjKCctJywgZnApOworICBpZiAoaXNfcmVhbF9xdW90ZXIocSkpIGZwcmludGYoZnAsICIo
JXMpIiwgbG9va3VwX2xpc3RbcV0tPm5hbWUpOworICB9CitmcHJpbnRmKGZwLCAiJXMgJXNcbiIs
IG5hbWUsIHZhbCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCkBAIC0xNzQsNiArMTgwLDggQEAKIGZwcmludGYoZnAsICIlZCAlZFxuIiwg
KGludClyZWNlaXZlZF90aW1lLnR2X3NlYywgd2FybmluZ19jb3VudCk7CiAKIGZwcmludGYoZnAs
ICItcmVjZWl2ZWRfdGltZV91c2VjIC4lMDZkXG4iLCAoaW50KXJlY2VpdmVkX3RpbWUudHZfdXNl
Yyk7CitmcHJpbnRmKGZwLCAiLXJlY2VpdmVkX3RpbWVfY29tcGxldGUgJWQuJTA2ZFxuIiwKKyAg
KGludClyZWNlaXZlZF90aW1lX2NvbXBsZXRlLnR2X3NlYywgKGludClyZWNlaXZlZF90aW1lX2Nv
bXBsZXRlLnR2X3VzZWMpOwogCiAvKiBJZiB0aGVyZSBpcyBpbmZvcm1hdGlvbiBhYm91dCBhIHNl
bmRpbmcgaG9zdCwgcmVtZW1iZXIgaXQuIFRoZSBIRUxPCiBkYXRhIGNhbiBiZSBzZXQgZm9yIGxv
Y2FsIFNNVFAgYXMgd2VsbCBhcyByZW1vdGUuICovCkBAIC0xODMsNyArMTkxLDcgQEAKIGlmIChz
ZW5kZXJfaG9zdF9hZGRyZXNzKQogICB7CiAgIGlmIChpc190YWludGVkKHNlbmRlcl9ob3N0X2Fk
ZHJlc3MpKSBwdXRjKCctJywgZnApOwotICBmcHJpbnRmKGZwLCAiLWhvc3RfYWRkcmVzcyAlcy4l
ZFxuIiwgc2VuZGVyX2hvc3RfYWRkcmVzcywgc2VuZGVyX2hvc3RfcG9ydCk7CisgIGZwcmludGYo
ZnAsICItaG9zdF9hZGRyZXNzIFslc106JWRcbiIsIHNlbmRlcl9ob3N0X2FkZHJlc3MsIHNlbmRl
cl9ob3N0X3BvcnQpOwogICBpZiAoc2VuZGVyX2hvc3RfbmFtZSkKICAgICBzcG9vbF92YXJfd3Jp
dGUoZnAsIFVTImhvc3RfbmFtZSIsIHNlbmRlcl9ob3N0X25hbWUpOwogICB9CkBAIC0xOTcsNyAr
MjA1LDcgQEAKIGlmIChpbnRlcmZhY2VfYWRkcmVzcykKICAgewogICBpZiAoaXNfdGFpbnRlZChp
bnRlcmZhY2VfYWRkcmVzcykpIHB1dGMoJy0nLCBmcCk7Ci0gIGZwcmludGYoZnAsICItaW50ZXJm
YWNlX2FkZHJlc3MgJXMuJWRcbiIsIGludGVyZmFjZV9hZGRyZXNzLCBpbnRlcmZhY2VfcG9ydCk7
CisgIGZwcmludGYoZnAsICItaW50ZXJmYWNlX2FkZHJlc3MgWyVzXTolZFxuIiwgaW50ZXJmYWNl
X2FkZHJlc3MsIGludGVyZmFjZV9wb3J0KTsKICAgfQogCiBpZiAoc210cF9hY3RpdmVfaG9zdG5h
bWUgIT0gcHJpbWFyeV9ob3N0bmFtZSkKQEAgLTIyMiw2ICsyMzAsMTIgQEAKIAogLyogTm93IGFu
eSBvdGhlciBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgcmVtZW1iZXJlZC4gKi8KIAoraWYgKCpkZWJ1
Z2xvZ19uYW1lKQorICB7CisgIGZwcmludGYoZnAsICItZGVidWdfc2VsZWN0b3IgMHgleFxuIiwg
ZGVidWdfc2VsZWN0b3IpOworICBmcHJpbnRmKGZwLCAiLWRlYnVnbG9nX25hbWUgJXNcbiIsIGRl
YnVnbG9nX25hbWUpOworICB9CisKIGlmIChmLnNwb29sX2ZpbGVfd2lyZWZvcm1hdCkKICAgZnBy
aW50ZihmcCwgIi1zcG9vbF9maWxlX3dpcmVmb3JtYXRcbiIpOwogZWxzZQpAQCAtMjc1LDcgKzI4
OSw3IEBACiAgICAgZnByaW50ZihmcCwgIi10bHNfb3VyY2VydCAlc1xuIiwgQ1MgYmlnX2J1ZmZl
cik7CiAgIH0KIGlmICh0bHNfaW4ub2NzcCkJIGZwcmludGYoZnAsICItdGxzX29jc3AgJWRcbiIs
ICAgdGxzX2luLm9jc3ApOwotIyBpZmRlZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQorIyBpZm5k
ZWYgRElTQUJMRV9UTFNfUkVTVU1FCiBmcHJpbnRmKGZwLCAiLXRsc19yZXN1bXB0aW9uICVjXG4i
LCAnQScgKyB0bHNfaW4ucmVzdW1wdGlvbik7CiAjIGVuZGlmCiBpZiAodGxzX2luLnZlcikgc3Bv
b2xfdmFyX3dyaXRlKGZwLCBVUyJ0bHNfdmVyIiwgdGxzX2luLnZlcik7CkBAIC01MjAsNiArNTM0
LDkgQEAKIHsKIHVzY2hhciAqIGRlc3RfcW5hbWUgPSBxdWV1ZV9uYW1lX2Rlc3QgPyBxdWV1ZV9u
YW1lX2Rlc3QgOiBxdWV1ZV9uYW1lOwogCisvKiBTaW5jZSB3ZSBhcmUgd29ya2luZyB3aXRoaW4g
dGhlIHNwb29sLCBkZS10YWludCB0aGUgZGVzdCBxdWV1ZSBuYW1lICovCitkZXN0X3FuYW1lID0g
c3RyaW5nX2NvcHlfdGFpbnQoZGVzdF9xbmFtZSwgR0VUX1VOVEFJTlRFRCk7CisKIC8qIENyZWF0
ZSBhbnkgb3V0cHV0IGRpcmVjdG9yaWVzIHRoYXQgZG8gbm90IGV4aXN0LiAqLwogCiAodm9pZCkg
ZGlyZWN0b3J5X21ha2Uoc3Bvb2xfZGlyZWN0b3J5LArQotC+0LvRjNC60L4g0LIgZXhpbS5vcmln
L3NyYzogc3JzLmMK0KLQvtC70YzQutC+INCyIGV4aW0ub3JpZy9zcmM6IHNycy5oCmRpZmYgLXVy
IGV4aW0ub3JpZy9zcmMvc3RkLWNyeXB0by5jIGV4aW0vc3JjL3N0ZC1jcnlwdG8uYwotLS0gZXhp
bS5vcmlnL3NyYy9zdGQtY3J5cHRvLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAz
MDAKKysrIGV4aW0vc3JjL3N0ZC1jcnlwdG8uYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAw
MCArMDMwMApAQCAtMyw3ICszLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCiAKIC8qIENvcHlyaWdodCAoYykgUGhpbCBQZW5ub2NrIDIwMTIs
IDIwMTYKLSAqIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNyAtIDIwMTgK
KyAqIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAxNyAtIDIwMjEKICAqIEJ1
dCBhbG1vc3QgZXZlcnl0aGluZyBoZXJlIGlzIGZpeGVkIHB1Ymxpc2hlZCBjb25zdGFudHMgZnJv
bSBSRkNzLCBzbyBhbHNvOgogICogQ29weXJpZ2h0IChDKSBUaGUgSW50ZXJuZXQgU29jaWV0eSAo
MjAwMykKICAqIENvcHlyaWdodCAoQykgVGhlIElFVEYgVHJ1c3QgKDIwMDgpCkBAIC05MTQsMTIg
KzkxNCwxMSBAQAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKLS8qCi0gKiBHZW5lcmF0ZWQg
YnkgUGhpbCBhcyBhIG5vbi1zdGFuZGFyZCBvcHRpb24uCi0gKiBvcGVuc3NsIGRocGFyYW0gLTIg
MjA0OAotICogTm8gcHJvdmVuYW5jZSB0byBwcm92ZSBub24tdGFtcGVyaW5nIGF2YWlsYWJsZSwg
YmV5b25kIHRydXN0aW5nIHRoYXQgdGhpcwotICogZGV2ZWxvcGVyIGdlbmVyYXRlZCB0aGlzIGFz
IHN0YXRlZCBhYm92ZS4KLSAqLworLyogR2VuZXJhdGVkIGJ5IFBoaWwgYXMgYSBub24tc3RhbmRh
cmQgb3B0aW9uLgorb3BlbnNzbCBkaHBhcmFtIC0yIDIwNDgKK05vIHByb3ZlbmFuY2UgdG8gcHJv
dmUgbm9uLXRhbXBlcmluZyBhdmFpbGFibGUsIGJleW9uZCB0cnVzdGluZyB0aGF0IHRoaXMKK2Rl
dmVsb3BlciBnZW5lcmF0ZWQgdGhpcyBhcyBzdGF0ZWQgYWJvdmUuICovCisKIAogLyogTWFjT1NY
IDEwLjEwLjUgaW52b2tpbmcgc3lzdGVtIE9wZW5TU0wgMC45Ljh6ZyAqLwogc3RhdGljIGNvbnN0
IGNoYXIgZGhfZXhpbV8yMDE2MDUyOV8xW10gPQpAQCAtOTU3LDY3ICs5NTYsNzUgQEAKIC8qID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0gKi8KIAogc3RydWN0IGRoX2NvbnN0YW50IHsKLSAgY29uc3QgY2hhciAq
bGFiZWw7Ci0gIGNvbnN0IGNoYXIgKnBlbTsKKyAgY29uc3QgY2hhciAqCWxhYmVsOworICBjb25z
dCBjaGFyICoJcGVtOworICBpbnQJCWxvZ2dpbmc7CiB9OwogCisjZGVmaW5lIEVYSU1fREhfUFJJ
TUVfREVGQVVMVCBkaF9leGltXzIwMTYwNTI5XzMKKwogLyogS0VFUCBTT1JURUQgQUxQSEFCRVRJ
Q0FMTFk7Ci0gKiBkdXBsaWNhdGUgUEVNIGFyZSBva2F5LCBpZiB3ZSB3YW50IGFsaWFzZXMsIGJ1
dCBuYW1lcyBtdXN0IGJlIGFscGhhYmV0aWNhbCAqLworZHVwbGljYXRlIFBFTSBhcmUgb2theSwg
aWYgd2Ugd2FudCBhbGlhc2VzLCBidXQgbmFtZXMgbXVzdCBiZSBhbHBoYWJldGljYWwgKi8KKwog
c3RhdGljIHN0cnVjdCBkaF9jb25zdGFudCBkaF9jb25zdGFudHNbXSA9IHsKICAgICAvKiAgbGFi
ZWwJCQlwZW0gKi8KLSAgICB7ICJkZWZhdWx0IiwJCWRoX2V4aW1fMjAxNjA1MjlfMyB9LAotICAg
IHsgImV4aW0uZGV2LjIwMTYwNTI5LjEiLAlkaF9leGltXzIwMTYwNTI5XzEgfSwKLSAgICB7ICJl
eGltLmRldi4yMDE2MDUyOS4yIiwJZGhfZXhpbV8yMDE2MDUyOV8yIH0sCi0gICAgeyAiZXhpbS5k
ZXYuMjAxNjA1MjkuMyIsCWRoX2V4aW1fMjAxNjA1MjlfMyB9LAotICAgIHsgImZmZGhlMjA0OCIs
CQlkaF9mZmRoZTIwNDhfcGVtIH0sCi0gICAgeyAiZmZkaGUzMDcyIiwJCWRoX2ZmZGhlMzA3Ml9w
ZW0gfSwKLSAgICB7ICJmZmRoZTQwOTYiLAkJZGhfZmZkaGU0MDk2X3BlbSB9LAotICAgIHsgImZm
ZGhlNjE0NCIsCQlkaF9mZmRoZTYxNDRfcGVtIH0sCi0gICAgeyAiZmZkaGU4MTkyIiwJCWRoX2Zm
ZGhlODE5Ml9wZW0gfSwKLSAgICB7ICJpa2UxIiwJCQlkaF9pa2VfMV9wZW0gfSwKLSAgICB7ICJp
a2UxNCIsCQkJZGhfaWtlXzE0X3BlbSB9LAotICAgIHsgImlrZTE1IiwJCQlkaF9pa2VfMTVfcGVt
IH0sCi0gICAgeyAiaWtlMTYiLAkJCWRoX2lrZV8xNl9wZW0gfSwKLSAgICB7ICJpa2UxNyIsCQkJ
ZGhfaWtlXzE3X3BlbSB9LAotICAgIHsgImlrZTE4IiwJCQlkaF9pa2VfMThfcGVtIH0sCi0gICAg
eyAiaWtlMiIsCQkJZGhfaWtlXzJfcGVtIH0sCi0gICAgeyAiaWtlMjIiLAkJCWRoX2lrZV8yMl9w
ZW0gfSwKLSAgICB7ICJpa2UyMyIsCQkJZGhfaWtlXzIzX3BlbSB9LAotICAgIHsgImlrZTI0IiwJ
CQlkaF9pa2VfMjRfcGVtIH0sCi0gICAgeyAiaWtlNSIsCQkJZGhfaWtlXzVfcGVtIH0sCisgICAg
eyAiZGVmYXVsdCIsCQlFWElNX0RIX1BSSU1FX0RFRkFVTFQsCTAgfSwKKyAgICB7ICJleGltLmRl
di4yMDE2MDUyOS4xIiwJZGhfZXhpbV8yMDE2MDUyOV8xLAkwIH0sCisgICAgeyAiZXhpbS5kZXYu
MjAxNjA1MjkuMiIsCWRoX2V4aW1fMjAxNjA1MjlfMiwJMCB9LAorICAgIHsgImV4aW0uZGV2LjIw
MTYwNTI5LjMiLAlkaF9leGltXzIwMTYwNTI5XzMsCTAgfSwKKyAgICB7ICJmZmRoZTIwNDgiLAkJ
ZGhfZmZkaGUyMDQ4X3BlbSwJMCB9LAorICAgIHsgImZmZGhlMzA3MiIsCQlkaF9mZmRoZTMwNzJf
cGVtLAkwIH0sCisgICAgeyAiZmZkaGU0MDk2IiwJCWRoX2ZmZGhlNDA5Nl9wZW0sCTAgfSwKKyAg
ICB7ICJmZmRoZTYxNDQiLAkJZGhfZmZkaGU2MTQ0X3BlbSwJMCB9LAorICAgIHsgImZmZGhlODE5
MiIsCQlkaF9mZmRoZTgxOTJfcGVtLAkwIH0sCisgICAgeyAiaWtlMSIsCQkJZGhfaWtlXzFfcGVt
LAkJTE9HX01BSU4gfCBMT0dfUEFOSUMgfSwKKyAgICB7ICJpa2UxNCIsCQkJZGhfaWtlXzE0X3Bl
bSwJCTAgfSwKKyAgICB7ICJpa2UxNSIsCQkJZGhfaWtlXzE1X3BlbSwJCTAgfSwKKyAgICB7ICJp
a2UxNiIsCQkJZGhfaWtlXzE2X3BlbSwJCTAgfSwKKyAgICB7ICJpa2UxNyIsCQkJZGhfaWtlXzE3
X3BlbSwJCTAgfSwKKyAgICB7ICJpa2UxOCIsCQkJZGhfaWtlXzE4X3BlbSwJCTAgfSwKKyAgICB7
ICJpa2UyIiwJCQlkaF9pa2VfMl9wZW0sCQlMT0dfTUFJTiB9LAorICAgIHsgImlrZTIyIiwJCQlk
aF9pa2VfMjJfcGVtLAkJTE9HX01BSU4gfCBMT0dfUEFOSUMgfSwKKyAgICB7ICJpa2UyMyIsCQkJ
ZGhfaWtlXzIzX3BlbSwJCUxPR19NQUlOIH0sCisgICAgeyAiaWtlMjQiLAkJCWRoX2lrZV8yNF9w
ZW0sCQlMT0dfTUFJTiB9LAorICAgIHsgImlrZTUiLAkJCWRoX2lrZV81X3BlbSwJCTAgfSwKIH07
Ci1zdGF0aWMgY29uc3QgaW50IGRoX2NvbnN0YW50c19jb3VudCA9Ci0gIHNpemVvZihkaF9jb25z
dGFudHMpIC8gc2l6ZW9mKHN0cnVjdCBkaF9jb25zdGFudCk7CitzdGF0aWMgY29uc3QgaW50IGRo
X2NvbnN0YW50c19jb3VudCA9IG5lbGVtKGRoX2NvbnN0YW50cyk7CiAKIAogLyogQSBwb2xpY3kg
ZGVjaXNpb247IGluIGFic2VuY2Ugb2YgYW55IG90aGVyIGRhdGEsIHVzZSBhIDIwNDggYml0IHBy
aW1lLAotICogcGljayB0aGUgZmlyc3Qgb25lIGZyb20gdGhlIGxhdGVzdCBSRkMgcHJvdmlkaW5n
IHN1Y2guICovCitwaWNrIHRoZSBmaXJzdCBvbmUgZnJvbSB0aGUgbGF0ZXN0IFJGQyBwcm92aWRp
bmcgc3VjaC4gKi8KKwogY29uc3QgY2hhciAqCiBzdGRfZGhfcHJpbWVfZGVmYXVsdCh2b2lkKQog
ewotICByZXR1cm4gZGhfaWtlXzIzX3BlbTsKK3JldHVybiBFWElNX0RIX1BSSU1FX0RFRkFVTFQ7
CiB9CiAKIAorLyogUmV0dXJuIFBFTSBzdHJpbmcgZm9yIGdpdmVuIG5hbWUgKi8KKwogY29uc3Qg
Y2hhciAqCi1zdGRfZGhfcHJpbWVfbmFtZWQoY29uc3QgdXNjaGFyICpuYW1lKQorc3RkX2RoX3By
aW1lX25hbWVkKGNvbnN0IHVzY2hhciAqIG5hbWUpCiB7Ci0gIGludCBmaXJzdCwgbGFzdDsKLSAg
Y2hhciAqc2VhcmNoX25hbWUgPSBDUyBzdHJpbmdfY29weWxjKFVTIG5hbWUpOwotCi0gIGZpcnN0
ID0gMDsKLSAgbGFzdCA9IGRoX2NvbnN0YW50c19jb3VudDsKLSAgd2hpbGUgKGxhc3QgPiBmaXJz
dCkgewotICAgIGludCBtaWRkbGUgPSAoZmlyc3QgKyBsYXN0KS8yOwotICAgIGludCBjID0gc3Ry
Y21wKHNlYXJjaF9uYW1lLCBkaF9jb25zdGFudHNbbWlkZGxlXS5sYWJlbCk7Ci0gICAgaWYgKGMg
PT0gMCkKLSAgICAgIHJldHVybiBkaF9jb25zdGFudHNbbWlkZGxlXS5wZW07Ci0gICAgZWxzZSBp
ZiAoYyA+IDApCi0gICAgICBmaXJzdCA9IG1pZGRsZSArIDE7Ci0gICAgZWxzZQotICAgICAgbGFz
dCA9IG1pZGRsZTsKK2ZvciAoaW50IGZpcnN0ID0gMCwgbGFzdCA9IGRoX2NvbnN0YW50c19jb3Vu
dDsgbGFzdCA+IGZpcnN0OyApCisgIHsKKyAgaW50IG1pZGRsZSA9IChmaXJzdCArIGxhc3QpLzI7
CisgIHN0cnVjdCBkaF9jb25zdGFudCAqIGRwID0gJmRoX2NvbnN0YW50c1ttaWRkbGVdOworICBp
bnQgYyA9IFVzdHJjbXAobmFtZSwgZHAtPmxhYmVsKTsKKyAgaWYgKGMgPT0gMCkKKyAgICB7Cisg
ICAgaWYgKGRwLT5sb2dnaW5nKQorICAgICAgbG9nX3dyaXRlKDAsIGRwLT5sb2dnaW5nLAorCSJX
QVJOSU5HOiBkZXByZWNhdGVkIERpZmZpZS1IZWxsbWFuIHBhcmFtZXRlciAnJXMnIHVzZWQiLCBk
cC0+bGFiZWwpOworICAgIHJldHVybiBkcC0+cGVtOworICAgIH0KKyAgZWxzZSBpZiAoYyA+IDAp
CisgICAgZmlyc3QgPSBtaWRkbGUgKyAxOworICBlbHNlCisgICAgbGFzdCA9IG1pZGRsZTsKICAg
fQotICByZXR1cm4gTlVMTDsKK3JldHVybiBOVUxMOwogfQogCiAjZW5kaWYgLypESVNBQkxFX1RM
UyovCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvc3RvcmUuYyBleGltL3NyYy9zdG9yZS5jCi0tLSBl
eGltLm9yaWcvc3JjL3N0b3JlLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAK
KysrIGV4aW0vc3JjL3N0b3JlLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAK
QEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQg
YWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBtYWludGFpbmVycyAyMDE5IC0gMjAy
MiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAx
OCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBtYWludGFpbmVycyAyMDE5IC0gMjAyMCAq
LwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3Ry
aWJ1dGlvbi4gKi8KIAogLyogRXhpbSBnZXRzIGFuZCBmcmVlcyBhbGwgaXRzIHN0b3JlIHRocm91
Z2ggdGhlc2UgZnVuY3Rpb25zLiBJbiB0aGUgb3JpZ2luYWwKQEAgLTM3LDExICszNywyMCBAQAog
ICBUaGlzIG1lYW5zIGl0IGNhbiBiZSBmcmVlZCB3aGVuIHNlYXJjaF90aWR5dXAoKSBpcyBjYWxs
ZWQgdG8gY2xvc2UgZG93biBhbGwKICAgdGhlIGxvb2t1cCBjYWNoaW5nLgogCi0uIE9ydGhvZ29u
YWwgdG8gdGhlIHRocmVlIHBvb2wgdHlwZXMsIHRoZXJlIGFyZSB0d28gY2xhc3NlcyBvZiBtZW1v
cnk6IHVudGFpbnRlZAorLSBUaGVyZSBpcyBhbm90aGVyIHBvb2wgKFBPT0xfTUVTU0FHRSkgdXNl
ZCBmb3IgbWVkaXVtLWxpZmV0aW1lIG9iamVjdHM7IHdpdGhpbgorICBhIHNpbmdsZSBtZXNzYWdl
IHRyYW5zYWN0aW9uIGJ1dCBuZWVkZWQgZm9yIGxvbmdlciB0aGFuIHRoZSB1c2Ugb2YgdGhlIG1h
aW4KKyAgcG9vbCBwZXJtaXRzLiAgQ3VycmVudGx5IHRoaXMgbWVhbnMgb25seSByZWNlaXZlLXRp
bWUgREtJTSBpbmZvcm1hdGlvbi4KKworLSBUaGVyZSBpcyBhIGRlZGljYXRlZCBwb29sIGZvciBj
b25maWd1cmF0aW9uIGRhdGEgcmVhZCBmcm9tIHRoZSBjb25maWcgZmlsZShzKS4KKyAgT25jZSBj
b21wbGV0ZSwgaXQgaXMgbWFkZSByZWFkb25seS4KKworLSBUaGVyZSBhcmUgcG9vbHMgZm9yIGVh
Y2ggYWN0aXZlIGNvbWJpbmF0aW9uIG9mIGxvb2t1cC1xdW90aW5nLCBkeW5hbWljYWxseSBjcmVh
dGVkLgorCisuIE9ydGhvZ29uYWwgdG8gdGhlIGZvdXIgbWFpbiBwb29sIHR5cGVzLCB0aGVyZSBh
cmUgdHdvIGNsYXNzZXMgb2YgbWVtb3J5OiB1bnRhaW50ZWQKICAgYW5kIHRhaW50ZWQuICBUaGUg
bGF0dGVyIGlzIHVzZWQgZm9yIHZhbHVlcyBkZXJpdmVkIGZyb20gdW50cnVzdGVkIGlucHV0LCBh
bmQKICAgdGhlIHN0cmluZy1leHBhbnNpb24gbWVjaGFuaXNtIHJlZnVzZXMgdG8gb3BlcmF0ZSBv
biBzdWNoIHZhbHVlcyAob2J2aW91c2x5LAogICBpdCBjYW4gZXhwYW5kIGFuIHVudGFpbnRlZCB2
YWx1ZSB0byByZXR1cm4gYSB0YWludGVkIHJlc3VsdCkuICBUaGUgY2xhc3NlcwotICBhcmUgaW1w
bGVtZW50ZWQgYnkgZHVwbGljYXRpbmcgdGhlIHRocmVlIHBvb2wgdHlwZXMuICBQb29sIHJlc2V0
cyBhcmUgcmVxdWVzdGVkCisgIGFyZSBpbXBsZW1lbnRlZCBieSBkdXBsaWNhdGluZyB0aGUgZm91
ciBwb29sIHR5cGVzLiAgUG9vbCByZXNldHMgYXJlIHJlcXVlc3RlZAogICBhZ2FpbnN0IHRoZSBu
b250YWludGVkIHNpYmxpbmcgYW5kIGFwcGx5IHRvIGJvdGggc2libGluZ3MuCiAKICAgT25seSBt
ZW1vcnkgYmxvY2tzIHJlcXVlc3RlZCBmb3IgdGFpbnRlZCB1c2UgYXJlIHJlZ2FyZGVkIGFzIHRh
aW50ZWQ7IGFueXRoaW5nCkBAIC05Myw2ICsxMDIsMzggQEAKICAgc2l6ZV90IGxlbmd0aDsKIH0g
c3RvcmVibG9jazsKIAorLyogUG9vbCBkZXNjcmlwdG9yIHN0cnVjdCAqLworCit0eXBlZGVmIHN0
cnVjdCBwb29sZGVzYyB7CisgIHN0b3JlYmxvY2sgKgljaGFpbmJhc2U7CQkvKiBsaXN0IG9mIGJs
b2NrcyBpbiBwb29sICovCisgIHN0b3JlYmxvY2sgKgljdXJyZW50X2Jsb2NrOwkJLyogdG9wIGJs
b2NrLCBzdGlsbCB3aXRoIGZyZWUgc3BhY2UgKi8KKyAgdm9pZCAqCW5leHRfeWllbGQ7CQkvKiBu
ZXh0IGFsbG9jYXRpb24gcG9pbnQgKi8KKyAgaW50CQl5aWVsZF9sZW5ndGg7CQkvKiByZW1haW5p
bmcgc3BhY2UgaW4gY3VycmVudCBibG9jayAqLworICB1bnNpZ25lZAlzdG9yZV9ibG9ja19vcmRl
cjsJLyogbG9nMihzaXplKSBibG9jayBhbGxvY2F0aW9uIHNpemUgKi8KKworICAvKiBUaGlzIHZh
cmlhYmxlIGlzIHNldCBieSBzdG9yZV9nZXQoKSB0byBpdHMgeWllbGQsIGFuZCBieSBzdG9yZV9y
ZXNldCgpIHRvCisgIE5VTEwuIFRoaXMgZW5hYmxlcyBzdHJpbmdfY2F0KCkgdG8gb3B0aW1pemUg
aXRzIHN0b3JlIGhhbmRsaW5nIGZvciB2ZXJ5IGxvbmcKKyAgc3RyaW5ncy4gVGhhdCdzIHdoeSB0
aGUgdmFyaWFibGUgaXMgZ2xvYmFsLiAqLworCisgIHZvaWQgKglzdG9yZV9sYXN0X2dldDsKKwor
ICAvKiBUaGVzZSBhcmUgcHVyZWx5IGZvciBzdGF0cy1nYXRoZXJpbmcgKi8KKworICBpbnQJCW5i
eXRlczsKKyAgaW50CQltYXhieXRlczsKKyAgaW50CQluYmxvY2tzOworICBpbnQJCW1heGJsb2Nr
czsKKyAgdW5zaWduZWQJbWF4b3JkZXI7Cit9IHBvb2xkZXNjOworCisvKiBFbmhhbmNlZCBwb29s
IGRlc2NyaXB0b3IgZm9yIHF1b3RlZCBwb29scyAqLworCit0eXBlZGVmIHN0cnVjdCBxdW90ZWRf
cG9vbGRlc2MgeworICBwb29sZGVzYwkJCXBvb2w7CisgIHVuc2lnbmVkCQkJcXVvdGVyOworICBz
dHJ1Y3QgcXVvdGVkX3Bvb2xkZXNjICoJbmV4dDsKK30gcXVvdGVkX3Bvb2xkZXNjOworCiAvKiBK
dXN0IGluIGNhc2Ugd2UgZmluZCBvdXJzZWx2ZXMgb24gYSBzeXN0ZW0gd2hlcmUgdGhlIHN0cnVj
dHVyZSBhYm92ZSBoYXMgYQogbGVuZ3RoIHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGFs
aWdubWVudCwgc2V0IHVwIGEgbWFjcm8gZm9yIHRoZSBwYWRkZWQKIGxlbmd0aC4gKi8KQEAgLTEw
MSwxMCArMTQyLDIxIEBACiAgICgoKHNpemVvZihzdG9yZWJsb2NrKSArIGFsaWdubWVudCAtIDEp
IC8gYWxpZ25tZW50KSAqIGFsaWdubWVudCkKIAogLyogU2l6ZSBvZiBibG9jayB0byBnZXQgZnJv
bSBtYWxsb2MgdG8gY2FydmUgdXAgaW50byBzbWFsbGVyIG9uZXMuIFRoaXMKLW11c3QgYmUgYSBt
dWx0aXBsZSBvZiB0aGUgYWxpZ25tZW50LiBXZSBhc3N1bWUgdGhhdCA4MTkyIGlzIGdvaW5nIHRv
IGJlCi1zdWl0YWJseSBhbGlnbmVkLiAqLworbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBhbGln
bm1lbnQuIFdlIGFzc3VtZSB0aGF0IDQwOTYgaXMgZ29pbmcgdG8gYmUKK3N1aXRhYmx5IGFsaWdu
ZWQuICBEb3VibGUgdGhlIHNpemUgcGVyLXBvb2wgZm9yIGV2ZXJ5IG1hbGxvYywgdG8gbWl0aWdh
dGUKK2NlcnRhaW4gZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrcy4gIERvbid0IGJvdGhlciB0byBk
ZWNyZWFzZSBvbiBibG9jayBmcmVlcy4KK1dlIHdhc3RlIGF2ZXJhZ2UgaGFsZiB0aGUgY3VycmVu
dCBhbGxvYyBzaXplIHBlciBwb29sLiAgVGhpcyBjb3VsZCBiZSBzZXZlcmFsCitodW5kcmVkIGtC
IG5vdywgdnMuIDRrQiB3aXRoIGEgY29uc3RhbnQtc2l6ZSBibG9jayBzaXplLiAgQnV0IHRoZSBz
ZWFyY2ggdGltZQorZm9yIGlzX3RhaW50ZWQoKSwgbGluZWFyIGluIHRoZSBudW1iZXIgb2YgYmxv
Y2tzIGZvciB0aGUgcG9vbCwgaXMgTyhuIGxvZyBuKQorcmF0aGVyIHRoYW4gTyhuXjIpLgorQSB0
ZXN0IG9mIDIwMDAgUkNQVHMgYW5kIGp1c3QgYWNjZXB0IEFDTCBoYWQgMzcwa0IgaW4gMjEgYmxv
Y2tzIGJlZm9yZSwKKzUwNGtCIGluIDYgYmxvY2tzIG5vdywgZm9yIHRoZSB1bnRhaW50ZWQtbWFp
biAobGFyZ2VzdCkgcG9vbC4KK0J1aWxkcyBmb3IgcmVzdHJpY3RlZC1tZW1vcnkgc3lzdGVtIGNh
biBkaXNhYmxlIHRoZSBleHBhbnNpb24gYnkKK2RlZmluaW5nIFJFU1RSSUNURURfTUVNT1JZICov
CisvKlhYWCBzaG91bGQgd2UgYWxsb3cgYW55IGZvciBtYWxsb2MncyBvd24gb3ZlcmhlYWQ/ICBC
dXQgaG93IG11Y2g/ICovCiAKLSNkZWZpbmUgU1RPUkVfQkxPQ0tfU0laRSAoODE5MiAtIEFMSUdO
RURfU0laRU9GX1NUT1JFQkxPQ0spCisvKiAjZGVmaW5lIFJFU1RSSUNURURfTUVNT1JZICovCisj
ZGVmaW5lIFNUT1JFX0JMT0NLX1NJWkUob3JkZXIpICgoMVUgPDwgKG9yZGVyKSkgLSBBTElHTkVE
X1NJWkVPRl9TVE9SRUJMT0NLKQogCiAvKiBWYXJpYWJsZXMgaG9sZGluZyBkYXRhIGZvciB0aGUg
bG9jYWwgcG9vbHMgb2Ygc3RvcmUuIFRoZSBjdXJyZW50IHBvb2wgbnVtYmVyCiBpcyBoZWxkIGlu
IHN0b3JlX3Bvb2wsIHdoaWNoIGlzIGdsb2JhbCBzbyB0aGF0IGl0IGNhbiBiZSBjaGFuZ2VkIGZy
b20gb3V0c2lkZS4KQEAgLTExMywxMSArMTY1LDEzIEBACiAKIGludCBzdG9yZV9wb29sID0gUE9P
TF9NQUlOOwogCi0jZGVmaW5lIE5QT09MUyA2Ci1zdGF0aWMgc3RvcmVibG9jayAqY2hhaW5iYXNl
W05QT09MU107Ci1zdGF0aWMgc3RvcmVibG9jayAqY3VycmVudF9ibG9ja1tOUE9PTFNdOwotc3Rh
dGljIHZvaWQgKm5leHRfeWllbGRbTlBPT0xTXTsKLXN0YXRpYyBpbnQgeWllbGRfbGVuZ3RoW05Q
T09MU10gPSB7IC0xLCAtMSwgLTEsICAtMSwgLTEsIC0xIH07Citwb29sZGVzYyBwYWlyZWRfcG9v
bHNbTl9QQUlSRURfUE9PTFNdOworcXVvdGVkX3Bvb2xkZXNjICogcXVvdGVkX3Bvb2xzID0gTlVM
TDsKKworc3RhdGljIGludCBuX25vbnBvb2xfYmxvY2tzOwkvKiBjdXJyZW50IG51bWJlciBvZiBk
aXJlY3Qgc3RvcmVfbWFsbG9jKCkgYmxvY2tzICovCitzdGF0aWMgaW50IG1heF9ub25wb29sX2Js
b2NrczsKK3N0YXRpYyBpbnQgbWF4X3Bvb2xfbWFsbG9jOwkvKiBtYXggdmFsdWUgZm9yIHBvb2xf
bWFsbG9jICovCitzdGF0aWMgaW50IG1heF9ub25wb29sX21hbGxvYzsJLyogbWF4IHZhbHVlIGZv
ciBub25wb29sX21hbGxvYyAqLwogCiAvKiBwb29sX21hbGxvYyBob2xkcyB0aGUgYW1vdW50IG9m
IG1lbW9yeSB1c2VkIGJ5IHRoZSBzdG9yZSBwb29sczsgdGhpcyBnb2VzIHVwCiBhbmQgZG93biBh
cyBzdG9yZSBpcyByZXNldCBvciByZWxlYXNlZC4gbm9ucG9vbF9tYWxsb2MgaXMgdGhlIHRvdGFs
IGdvdCBieQpAQCAtMTI3LDQ5ICsxODEsMTA1IEBACiBzdGF0aWMgaW50IHBvb2xfbWFsbG9jOwog
c3RhdGljIGludCBub25wb29sX21hbGxvYzsKIAotLyogVGhpcyB2YXJpYWJsZSBpcyBzZXQgYnkg
c3RvcmVfZ2V0KCkgdG8gaXRzIHlpZWxkLCBhbmQgYnkgc3RvcmVfcmVzZXQoKSB0bwotTlVMTC4g
VGhpcyBlbmFibGVzIHN0cmluZ19jYXQoKSB0byBvcHRpbWl6ZSBpdHMgc3RvcmUgaGFuZGxpbmcg
Zm9yIHZlcnkgbG9uZwotc3RyaW5ncy4gVGhhdCdzIHdoeSB0aGUgdmFyaWFibGUgaXMgZ2xvYmFs
LiAqLwotCi12b2lkICpzdG9yZV9sYXN0X2dldFtOUE9PTFNdOwotCi0vKiBUaGVzZSBhcmUgcHVy
ZWx5IGZvciBzdGF0cy1nYXRoZXJpbmcgKi8KLQotc3RhdGljIGludCBuYnl0ZXNbTlBPT0xTXTsJ
LyogY3VycmVudCBieXRlcyBhbGxvY2F0ZWQgKi8KLXN0YXRpYyBpbnQgbWF4Ynl0ZXNbTlBPT0xT
XTsJLyogbWF4IG51bWJlciByZWFjaGVkICovCi1zdGF0aWMgaW50IG5ibG9ja3NbTlBPT0xTXTsJ
LyogY3VycmVudCBudW1iZXIgb2YgYmxvY2tzIGFsbG9jYXRlZCAqLwotc3RhdGljIGludCBtYXhi
bG9ja3NbTlBPT0xTXTsKLXN0YXRpYyBpbnQgbl9ub25wb29sX2Jsb2NrczsJLyogY3VycmVudCBu
dW1iZXIgb2YgZGlyZWN0IHN0b3JlX21hbGxvYygpIGJsb2NrcyAqLwotc3RhdGljIGludCBtYXhf
bm9ucG9vbF9ibG9ja3M7Ci1zdGF0aWMgaW50IG1heF9wb29sX21hbGxvYzsJLyogbWF4IHZhbHVl
IGZvciBwb29sX21hbGxvYyAqLwotc3RhdGljIGludCBtYXhfbm9ucG9vbF9tYWxsb2M7CS8qIG1h
eCB2YWx1ZSBmb3Igbm9ucG9vbF9tYWxsb2MgKi8KLQogCiAjaWZuZGVmIENPTVBJTEVfVVRJTElU
WQotc3RhdGljIGNvbnN0IHVzY2hhciAqIHBvb2x1c2VbTlBPT0xTXSA9IHsKK3N0YXRpYyBjb25z
dCB1c2NoYXIgKiBwb29sdXNlW05fUEFJUkVEX1BPT0xTXSA9IHsKIFtQT09MX01BSU5dID0JCVVT
Im1haW4iLAogW1BPT0xfUEVSTV0gPQkJVVMicGVybSIsCitbUE9PTF9DT05GSUddID0JCVVTImNv
bmZpZyIsCiBbUE9PTF9TRUFSQ0hdID0JCVVTInNlYXJjaCIsCitbUE9PTF9NRVNTQUdFXSA9CVVT
Im1lc3NhZ2UiLAogW1BPT0xfVEFJTlRfTUFJTl0gPQlVUyJtYWluIiwKIFtQT09MX1RBSU5UX1BF
Uk1dID0JVVMicGVybSIsCitbUE9PTF9UQUlOVF9DT05GSUddID0JVVMiY29uZmlnIiwKIFtQT09M
X1RBSU5UX1NFQVJDSF0gPQlVUyJzZWFyY2giLAorW1BPT0xfVEFJTlRfTUVTU0FHRV0gPQlVUyJt
ZXNzYWdlIiwKIH07Ci1zdGF0aWMgY29uc3QgdXNjaGFyICogcG9vbGNsYXNzW05QT09MU10gPSB7
CitzdGF0aWMgY29uc3QgdXNjaGFyICogcG9vbGNsYXNzW05fUEFJUkVEX1BPT0xTXSA9IHsKIFtQ
T09MX01BSU5dID0JCVVTInVudGFpbnRlZCIsCiBbUE9PTF9QRVJNXSA9CQlVUyJ1bnRhaW50ZWQi
LAorW1BPT0xfQ09ORklHXSA9CQlVUyJ1bnRhaW50ZWQiLAogW1BPT0xfU0VBUkNIXSA9CQlVUyJ1
bnRhaW50ZWQiLAorW1BPT0xfTUVTU0FHRV0gPQlVUyJ1bnRhaW50ZWQiLAogW1BPT0xfVEFJTlRf
TUFJTl0gPQlVUyJ0YWludGVkIiwKIFtQT09MX1RBSU5UX1BFUk1dID0JVVMidGFpbnRlZCIsCitb
UE9PTF9UQUlOVF9DT05GSUddID0JVVMidGFpbnRlZCIsCiBbUE9PTF9UQUlOVF9TRUFSQ0hdID0J
VVMidGFpbnRlZCIsCitbUE9PTF9UQUlOVF9NRVNTQUdFXSA9CVVTInRhaW50ZWQiLAogfTsKICNl
bmRpZgogCiAKLXN0YXRpYyB2b2lkICogaW50ZXJuYWxfc3RvcmVfbWFsbG9jKGludCwgY29uc3Qg
Y2hhciAqLCBpbnQpOworc3RhdGljIHZvaWQgKiBpbnRlcm5hbF9zdG9yZV9tYWxsb2Moc2l6ZV90
LCBjb25zdCBjaGFyICosIGludCk7CiBzdGF0aWMgdm9pZCAgIGludGVybmFsX3N0b3JlX2ZyZWUo
dm9pZCAqLCBjb25zdCBjaGFyICosIGludCBsaW5lbnVtYmVyKTsKIAogLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KIAorc3RhdGljIHZvaWQKK3Bvb2xfaW5pdChwb29sZGVzYyAqIHBwKQoreworbWVt
c2V0KHBwLCAwLCBzaXplb2YoKnBwKSk7CitwcC0+eWllbGRfbGVuZ3RoID0gLTE7CitwcC0+c3Rv
cmVfYmxvY2tfb3JkZXIgPSAxMjsgLyogbG9nMihhbGxvY2F0aW9uX3NpemUpIGllLiA0a0IgKi8K
K30KKworLyogSW5pdGlhbGlzYXRpb24sIGZvciB0aGluZ3MgZnJhZ2lsZSB3aXRoIHBhcmFtZXRl
ciBjaGFubmdlcyB3aGVuIHVzaW5nCitzdGF0aWMgaW5pdGlhbGlzZXJzLiAqLworCit2b2lkCitz
dG9yZV9pbml0KHZvaWQpCit7Citmb3IgKHBvb2xkZXNjICogcHAgPSBwYWlyZWRfcG9vbHM7IHBw
IDwgcGFpcmVkX3Bvb2xzICsgTl9QQUlSRURfUE9PTFM7IHBwKyspCisgIHBvb2xfaW5pdChwcCk7
Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBMb2NhdGluZyBlbGVtZW50cyBnaXZl
biBtZW1vcnkgcG9pbnRlciAqLworCitzdGF0aWMgQk9PTAoraXNfcG9pbnRlcl9pbl9ibG9jayhj
b25zdCBzdG9yZWJsb2NrICogYiwgY29uc3Qgdm9pZCAqIHApCit7Cit1c2NoYXIgKiBiYyA9IFVT
IGIgKyBBTElHTkVEX1NJWkVPRl9TVE9SRUJMT0NLOworcmV0dXJuIFVTIHAgPj0gYmMgJiYgVVMg
cCA8IGJjICsgYi0+bGVuZ3RoOworfQorCitzdGF0aWMgcG9vbGRlc2MgKgorcG9vbF9jdXJyZW50
X2Zvcl9wb2ludGVyKGNvbnN0IHZvaWQgKiBwKQoreworc3RvcmVibG9jayAqIGI7CisKK2ZvciAo
cXVvdGVkX3Bvb2xkZXNjICogcXAgPSBxdW90ZWRfcG9vbHM7IHFwOyBxcCA9IHFwLT5uZXh0KQor
ICBpZiAoKGIgPSBxcC0+cG9vbC5jdXJyZW50X2Jsb2NrKSAmJiBpc19wb2ludGVyX2luX2Jsb2Nr
KGIsIHApKQorICAgIHJldHVybiAmcXAtPnBvb2w7CisKK2ZvciAocG9vbGRlc2MgKiBwcCA9IHBh
aXJlZF9wb29sczsgcHAgPCBwYWlyZWRfcG9vbHMgKyBOX1BBSVJFRF9QT09MUzsgcHArKykKKyAg
aWYgKChiID0gcHAtPmN1cnJlbnRfYmxvY2spICYmIGlzX3BvaW50ZXJfaW5fYmxvY2soYiwgcCkp
CisgICAgcmV0dXJuIHBwOworcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBwb29sZGVzYyAqCitw
b29sX2Zvcl9wb2ludGVyKGNvbnN0IHZvaWQgKiBwLCBjb25zdCBjaGFyICogZnVuYywgaW50IGxp
bmVudW1iZXIpCit7Citwb29sZGVzYyAqIHBwOworc3RvcmVibG9jayAqIGI7CisKK2lmICgocHAg
PSBwb29sX2N1cnJlbnRfZm9yX3BvaW50ZXIocCkpKSByZXR1cm4gcHA7CisKK2ZvciAocXVvdGVk
X3Bvb2xkZXNjICogcXAgPSBxdW90ZWRfcG9vbHM7IHFwOyBxcCA9IHFwLT5uZXh0KQorICBmb3Ig
KGIgPSBxcC0+cG9vbC5jaGFpbmJhc2U7IGI7IGIgPSBiLT5uZXh0KQorICAgIGlmIChpc19wb2lu
dGVyX2luX2Jsb2NrKGIsIHApKSByZXR1cm4gJnFwLT5wb29sOworCitmb3IgKHBwID0gcGFpcmVk
X3Bvb2xzOyBwcCA8IHBhaXJlZF9wb29scyArIE5fUEFJUkVEX1BPT0xTOyBwcCsrKQorICBmb3Ig
KGIgPSBwcC0+Y2hhaW5iYXNlOyBiOyBiID0gYi0+bmV4dCkKKyAgICBpZiAoaXNfcG9pbnRlcl9p
bl9ibG9jayhiLCBwKSkgcmV0dXJuIHBwOworCitsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BB
TklDX0RJRSwKKyAgImJhZCBtZW1vcnkgcmVmZXJlbmNlOyBwb29sIG5vdCBmb3VuZCwgYXQgJXMg
JWQiLCBmdW5jLCBsaW5lbnVtYmVyKTsKK3JldHVybiBOVUxMOworfQorCisvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwogLyogVGVzdCBpZiBhIHBvaW50ZXIgcmVmZXJzIHRvIHRhaW50ZWQgbWVtb3J5
LgogCiBTbG93ZXIgdmVyc2lvbiBjaGVjaywgZm9yIHVzZSB3aGVuIHBsYXRmb3JtIGludGVybWl4
ZXMgbWFsbG9jIGFuZCBtbWFwIGFyZWEKQEAgLTE4NCwxOSArMjk0LDI3IEBACiB7CiBzdG9yZWJs
b2NrICogYjsKIAotZm9yIChpbnQgcG9vbCA9IFBPT0xfVEFJTlRfQkFTRTsgcG9vbCA8IG5lbGVt
KGNoYWluYmFzZSk7IHBvb2wrKykKLSAgaWYgKChiID0gY3VycmVudF9ibG9ja1twb29sXSkpCi0g
ICAgewotICAgIHVzY2hhciAqIGJjID0gVVMgYiArIEFMSUdORURfU0laRU9GX1NUT1JFQkxPQ0s7
Ci0gICAgaWYgKFVTIHAgPj0gYmMgJiYgVVMgcCA8IGJjICsgYi0+bGVuZ3RoKSByZXR1cm4gVFJV
RTsKLSAgICB9CitpZiAocCA9PSBHRVRfVU5UQUlOVEVEKSByZXR1cm4gRkFMU0U7CitpZiAocCA9
PSBHRVRfVEFJTlRFRCkgcmV0dXJuIFRSVUU7CisKK2ZvciAocG9vbGRlc2MgKiBwcCA9IHBhaXJl
ZF9wb29scyArIFBPT0xfVEFJTlRfQkFTRTsKKyAgICAgcHAgPCBwYWlyZWRfcG9vbHMgKyBOX1BB
SVJFRF9QT09MUzsgcHArKykKKyAgaWYgKChiID0gcHAtPmN1cnJlbnRfYmxvY2spKQorICAgIGlm
IChpc19wb2ludGVyX2luX2Jsb2NrKGIsIHApKSByZXR1cm4gVFJVRTsKKworZm9yIChxdW90ZWRf
cG9vbGRlc2MgKiBxcCA9IHF1b3RlZF9wb29sczsgcXA7IHFwID0gcXAtPm5leHQpCisgIGlmIChi
ID0gcXAtPnBvb2wuY3VycmVudF9ibG9jaykKKyAgICBpZiAoaXNfcG9pbnRlcl9pbl9ibG9jayhi
LCBwKSkgcmV0dXJuIFRSVUU7CisKK2ZvciAocG9vbGRlc2MgKiBwcCA9IHBhaXJlZF9wb29scyAr
IFBPT0xfVEFJTlRfQkFTRTsKKyAgICAgcHAgPCBwYWlyZWRfcG9vbHMgKyBOX1BBSVJFRF9QT09M
UzsgcHArKykKKyAgZm9yIChiID0gcHAtPmNoYWluYmFzZTsgYjsgYiA9IGItPm5leHQpCisgICAg
aWYgKGlzX3BvaW50ZXJfaW5fYmxvY2soYiwgcCkpIHJldHVybiBUUlVFOworCitmb3IgKHF1b3Rl
ZF9wb29sZGVzYyAqIHFwID0gcXVvdGVkX3Bvb2xzOyBxcDsgcXAgPSBxcC0+bmV4dCkKKyAgZm9y
IChiID0gcXAtPnBvb2wuY2hhaW5iYXNlOyBiOyBiID0gYi0+bmV4dCkKKyAgICBpZiAoaXNfcG9p
bnRlcl9pbl9ibG9jayhiLCBwKSkgcmV0dXJuIFRSVUU7CiAKLWZvciAoaW50IHBvb2wgPSBQT09M
X1RBSU5UX0JBU0U7IHBvb2wgPCBuZWxlbShjaGFpbmJhc2UpOyBwb29sKyspCi0gIGZvciAoYiA9
IGNoYWluYmFzZVtwb29sXTsgYjsgYiA9IGItPm5leHQpCi0gICAgewotICAgIHVzY2hhciAqIGJj
ID0gVVMgYiArIEFMSUdORURfU0laRU9GX1NUT1JFQkxPQ0s7Ci0gICAgaWYgKFVTIHAgPj0gYmMg
JiYgVVMgcCA8IGJjICsgYi0+bGVuZ3RoKSByZXR1cm4gVFJVRTsKLSAgICB9CiByZXR1cm4gRkFM
U0U7CiB9CiAKQEAgLTIwOSwzMCArMzI3LDUxIEBACiB9CiAKIAorI2lmbmRlZiBDT01QSUxFX1VU
SUxJVFkKKy8qIFJldHVybiB0aGUgcG9vbCBmb3IgdGhlIGdpdmVuIHF1b3Rlciwgb3IgbnVsbCAq
LwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgot
KiAgICAgICBHZXQgYSBibG9jayBmcm9tIHRoZSBjdXJyZW50IHBvb2wgICAgICAgICoKLSoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgcG9v
bGRlc2MgKgorcG9vbF9mb3JfcXVvdGVyKHVuc2lnbmVkIHF1b3RlcikKK3sKK2ZvciAocXVvdGVk
X3Bvb2xkZXNjICogcXAgPSBxdW90ZWRfcG9vbHM7IHFwOyBxcCA9IHFwLT5uZXh0KQorICBpZiAo
cXAtPnF1b3RlciA9PSBxdW90ZXIpCisgICAgcmV0dXJuICZxcC0+cG9vbDsKK3JldHVybiBOVUxM
OworfQogCi0vKiBSdW5uaW5nIG91dCBvZiBzdG9yZSBpcyBhIHRvdGFsIGRpc2FzdGVyLiBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCB2aWEgdGhlCi1tYWNybyBzdG9yZV9nZXQoKS4gSXQgcGFzc2Vz
IGJhY2sgYSBibG9jayBvZiBzdG9yZSB3aXRoaW4gdGhlIGN1cnJlbnQgYmlnCi1ibG9jaywgZ2V0
dGluZyBhIG5ldyBvbmUgaWYgbmVjZXNzYXJ5LiBUaGUgYWRkcmVzcyBpcyBzYXZlZCBpbgotc3Rv
cmVfbGFzdF93YXNfZ2V0LgorLyogQWxsb2NhdGUvaW5pdCBhIG5ldyBxdW90ZWQtcG9vbCBhbmQg
cmV0dXJuIHRoZSBwb29sICovCiAKLUFyZ3VtZW50czoKLSAgc2l6ZSAgICAgICAgYW1vdW50IHdh
bnRlZCwgYnl0ZXMKLSAgdGFpbnRlZCAgICAgY2xhc3M6IHNldCB0byB0cnVlIGZvciB1bnRydXN0
ZWQgZGF0YSAoZWcuIGZyb20gc210cCBpbnB1dCkKLSAgZnVuYyAgICAgICAgZnVuY3Rpb24gZnJv
bSB3aGljaCBjYWxsZWQKLSAgbGluZW51bWJlciAgbGluZSBudW1iZXIgaW4gc291cmNlIGZpbGUK
K3N0YXRpYyBwb29sZGVzYyAqCitxdW90ZWRfcG9vbF9uZXcodW5zaWduZWQgcXVvdGVyKQorewor
Ly8gZGVidWdfcHJpbnRmKCJhbGxvY2F0aW5nIHF1b3RlZC1wb29sXG4iKTsKK3F1b3RlZF9wb29s
ZGVzYyAqIHFwID0gc3RvcmVfZ2V0X3Blcm0oc2l6ZW9mKHF1b3RlZF9wb29sZGVzYyksIEdFVF9V
TlRBSU5URUQpOwogCi1SZXR1cm5zOiAgICAgIHBvaW50ZXIgdG8gc3RvcmUgKHBhbmljIG9uIG1h
bGxvYyBmYWlsdXJlKQotKi8KK3Bvb2xfaW5pdCgmcXAtPnBvb2wpOworcXAtPnF1b3RlciA9IHF1
b3RlcjsKK3FwLT5uZXh0ID0gcXVvdGVkX3Bvb2xzOworcXVvdGVkX3Bvb2xzID0gcXA7CityZXR1
cm4gJnFwLT5wb29sOworfQorI2VuZGlmCiAKLXZvaWQgKgotc3RvcmVfZ2V0XzMoaW50IHNpemUs
IEJPT0wgdGFpbnRlZCwgY29uc3QgY2hhciAqZnVuYywgaW50IGxpbmVudW1iZXIpCisKKy8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCit2b2lkCitzdG9yZV93cml0ZXByb3RlY3QoaW50IHBvb2wpCiB7
Ci1pbnQgcG9vbCA9IHRhaW50ZWQgPyBzdG9yZV9wb29sICsgUE9PTF9UQUlOVF9CQVNFIDogc3Rv
cmVfcG9vbDsKKyNpZiAhZGVmaW5lZChDT01QSUxFX1VUSUxJVFkpICYmICFkZWZpbmVkKE1JU1NJ
TkdfUE9TSVhfTUVNQUxJR04pCitmb3IgKHN0b3JlYmxvY2sgKiBiID0gIHBhaXJlZF9wb29sc1tw
b29sXS5jaGFpbmJhc2U7IGI7IGIgPSBiLT5uZXh0KQorICBpZiAobXByb3RlY3QoYiwgQUxJR05F
RF9TSVpFT0ZfU1RPUkVCTE9DSyArIGItPmxlbmd0aCwgUFJPVF9SRUFEKSAhPSAwKQorICAgIERF
QlVHKERfYW55KSBkZWJ1Z19wcmludGYoImNvbmZpZyBibG9jayBtcHJvdGVjdDogKCVkKSAlc1xu
IiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisjZW5kaWYKK30KIAorLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKworc3RhdGljIHZvaWQgKgorcG9vbF9nZXQocG9vbGRlc2MgKiBwcCwgaW50IHNp
emUsIEJPT0wgYWxpZ25fbWVtLCBjb25zdCBjaGFyICogZnVuYywgaW50IGxpbmVudW1iZXIpCit7
CiAvKiBFbnN1cmUgd2UndmUgYmVlbiBhc2tlZCB0byBhbGxvY2F0ZSBtZW1vcnkuCiBBIG5lZ2F0
aXZlIHNpemUgaXMgYSBzaWduIG9mIGEgc2VjdXJpdHkgcHJvYmxlbS4KIEEgemVybyBzaXplIG1p
Z2h0IGJlIGFsc28gc3VzcGVjdCwgYnV0IG91ciBpbnRlcm5hbCB1c2FnZSBkZWxpYmVyYXRlbHkK
QEAgLTI0MSw3ICszODAsNyBAQAogCiBpZiAoc2l6ZSA8IDAgfHwgc2l6ZSA+PSBJTlRfTUFYLzIp
CiAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLAotICAgICAgICAgICAgImJh
ZCBtZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0ZWQgKCVkIGJ5dGVzKSBhdCAlcyAlZCIsCisgICAg
ICAgICAgICAiYmFkIG1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3RlZCAoJWQgYnl0ZXMpIGZyb20g
JXMgJWQiLAogICAgICAgICAgICAgc2l6ZSwgZnVuYywgbGluZW51bWJlcik7CiAKIC8qIFJvdW5k
IHVwIHRoZSBzaXplIHRvIGEgbXVsdGlwbGUgb2YgdGhlIGFsaWdubWVudC4gQWx0aG91Z2ggdGhp
cyBsb29rcyBhCkBAIC0yNTYsMjEgKzM5NSwyMyBAQAogc2l6ZSBpcyBTVE9SRV9CTE9DS19TSVpF
LCBhbmQgd2Ugd291bGQgZXhwZWN0IHRoaXMgdG8gYmUgdGhlIG5vcm0sIHNpbmNlCiB0aGVzZSBm
dW5jdGlvbnMgYXJlIG1vc3RseSBjYWxsZWQgZm9yIHNtYWxsIGFtb3VudHMgb2Ygc3RvcmUuICov
CiAKLWlmIChzaXplID4geWllbGRfbGVuZ3RoW3Bvb2xdKQoraWYgKHNpemUgPiBwcC0+eWllbGRf
bGVuZ3RoKQogICB7Ci0gIGludCBsZW5ndGggPSBzaXplIDw9IFNUT1JFX0JMT0NLX1NJWkUgPyBT
VE9SRV9CTE9DS19TSVpFIDogc2l6ZTsKKyAgaW50IGxlbmd0aCA9IE1BWCgKKwkgIFNUT1JFX0JM
T0NLX1NJWkUocHAtPnN0b3JlX2Jsb2NrX29yZGVyKSAtIEFMSUdORURfU0laRU9GX1NUT1JFQkxP
Q0ssCisJICBzaXplKTsKICAgaW50IG1sZW5ndGggPSBsZW5ndGggKyBBTElHTkVEX1NJWkVPRl9T
VE9SRUJMT0NLOwogICBzdG9yZWJsb2NrICogbmV3YmxvY2s7CiAKICAgLyogU29tZXRpbWVzIHN0
b3JlX3Jlc2V0KCkgbWF5IGxlYXZlIGEgYmxvY2sgZm9yIHVzOyBjaGVjayBpZiB3ZSBjYW4gdXNl
IGl0ICovCiAKLSAgaWYgKCAgKG5ld2Jsb2NrID0gY3VycmVudF9ibG9ja1twb29sXSkKKyAgaWYg
KCAgKG5ld2Jsb2NrID0gcHAtPmN1cnJlbnRfYmxvY2spCiAgICAgICYmIChuZXdibG9jayA9IG5l
d2Jsb2NrLT5uZXh0KQogICAgICAmJiBuZXdibG9jay0+bGVuZ3RoIDwgbGVuZ3RoCiAgICAgICkK
ICAgICB7CiAgICAgLyogR2l2ZSB1cCBvbiB0aGlzIGJsb2NrLCBiZWNhdXNlIGl0J3MgdG9vIHNt
YWxsICovCi0gICAgbmJsb2Nrc1twb29sXS0tOworICAgIHBwLT5uYmxvY2tzLS07CiAgICAgaW50
ZXJuYWxfc3RvcmVfZnJlZShuZXdibG9jaywgZnVuYywgbGluZW51bWJlcik7CiAgICAgbmV3Ymxv
Y2sgPSBOVUxMOwogICAgIH0KQEAgLTI3OSw1NCArNDIwLDEyMyBAQAogCiAgIGlmICghbmV3Ymxv
Y2spCiAgICAgewotICAgIGlmICgobmJ5dGVzW3Bvb2xdICs9IG1sZW5ndGgpID4gbWF4Ynl0ZXNb
cG9vbF0pCi0gICAgICBtYXhieXRlc1twb29sXSA9IG5ieXRlc1twb29sXTsKKyAgICBpZiAoKHBw
LT5uYnl0ZXMgKz0gbWxlbmd0aCkgPiBwcC0+bWF4Ynl0ZXMpCisgICAgICBwcC0+bWF4Ynl0ZXMg
PSBwcC0+bmJ5dGVzOwogICAgIGlmICgocG9vbF9tYWxsb2MgKz0gbWxlbmd0aCkgPiBtYXhfcG9v
bF9tYWxsb2MpCS8qIFVzZWQgaW4gcG9vbHMgKi8KICAgICAgIG1heF9wb29sX21hbGxvYyA9IHBv
b2xfbWFsbG9jOwogICAgIG5vbnBvb2xfbWFsbG9jIC09IG1sZW5ndGg7CQkJLyogRXhjbHVkZSBm
cm9tIG92ZXJhbGwgdG90YWwgKi8KLSAgICBpZiAoKytuYmxvY2tzW3Bvb2xdID4gbWF4YmxvY2tz
W3Bvb2xdKQotICAgICAgbWF4YmxvY2tzW3Bvb2xdID0gbmJsb2Nrc1twb29sXTsKKyAgICBpZiAo
KytwcC0+bmJsb2NrcyA+IHBwLT5tYXhibG9ja3MpCisgICAgICBwcC0+bWF4YmxvY2tzID0gcHAt
Pm5ibG9ja3M7CiAKLSAgICBuZXdibG9jayA9IGludGVybmFsX3N0b3JlX21hbGxvYyhtbGVuZ3Ro
LCBmdW5jLCBsaW5lbnVtYmVyKTsKKyNpZm5kZWYgTUlTU0lOR19QT1NJWF9NRU1BTElHTgorICAg
IGlmIChhbGlnbl9tZW0pCisgICAgICB7CisgICAgICBsb25nIHBnc2l6ZSA9IHN5c2NvbmYoX1ND
X1BBR0VTSVpFKTsKKyAgICAgIGludCBlcnIgPSBwb3NpeF9tZW1hbGlnbigodm9pZCAqKikmbmV3
YmxvY2ssCisJCQkJcGdzaXplLCAobWxlbmd0aCArIHBnc2l6ZSAtIDEpICYgfihwZ3NpemUgLSAx
KSk7CisgICAgICBpZiAoZXJyKQorCWxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNfRElF
LAorCSAgImZhaWxlZCB0byBhbGxvYyAodXNpbmcgcG9zaXhfbWVtYWxpZ24pICVkIGJ5dGVzIG9m
IG1lbW9yeTogJyVzJyIKKwkgICJjYWxsZWQgZnJvbSBsaW5lICVkIGluICVzIiwKKwkgIHNpemUs
IHN0cmVycm9yKGVyciksIGxpbmVudW1iZXIsIGZ1bmMpOworICAgICAgfQorICAgIGVsc2UKKyNl
bmRpZgorICAgICAgbmV3YmxvY2sgPSBpbnRlcm5hbF9zdG9yZV9tYWxsb2MobWxlbmd0aCwgZnVu
YywgbGluZW51bWJlcik7CiAgICAgbmV3YmxvY2stPm5leHQgPSBOVUxMOwogICAgIG5ld2Jsb2Nr
LT5sZW5ndGggPSBsZW5ndGg7CisjaWZuZGVmIFJFU1RSSUNURURfTUVNT1JZCisgICAgaWYgKHBw
LT5zdG9yZV9ibG9ja19vcmRlcisrID4gcHAtPm1heG9yZGVyKQorICAgICAgcHAtPm1heG9yZGVy
ID0gcHAtPnN0b3JlX2Jsb2NrX29yZGVyOworI2VuZGlmCiAKLSAgICBpZiAoIWNoYWluYmFzZVtw
b29sXSkKLSAgICAgIGNoYWluYmFzZVtwb29sXSA9IG5ld2Jsb2NrOworICAgIGlmICghIHBwLT5j
aGFpbmJhc2UpCisgICAgICAgcHAtPmNoYWluYmFzZSA9IG5ld2Jsb2NrOwogICAgIGVsc2UKLSAg
ICAgIGN1cnJlbnRfYmxvY2tbcG9vbF0tPm5leHQgPSBuZXdibG9jazsKKyAgICAgIHBwLT5jdXJy
ZW50X2Jsb2NrLT5uZXh0ID0gbmV3YmxvY2s7CiAgICAgfQogCi0gIGN1cnJlbnRfYmxvY2tbcG9v
bF0gPSBuZXdibG9jazsKLSAgeWllbGRfbGVuZ3RoW3Bvb2xdID0gbmV3YmxvY2stPmxlbmd0aDsK
LSAgbmV4dF95aWVsZFtwb29sXSA9Ci0gICAgKHZvaWQgKikoQ1MgY3VycmVudF9ibG9ja1twb29s
XSArIEFMSUdORURfU0laRU9GX1NUT1JFQkxPQ0spOwotICAodm9pZCkgVkFMR1JJTkRfTUFLRV9N
RU1fTk9BQ0NFU1MobmV4dF95aWVsZFtwb29sXSwgeWllbGRfbGVuZ3RoW3Bvb2xdKTsKKyAgcHAt
PmN1cnJlbnRfYmxvY2sgPSBuZXdibG9jazsKKyAgcHAtPnlpZWxkX2xlbmd0aCA9IG5ld2Jsb2Nr
LT5sZW5ndGg7CisgIHBwLT5uZXh0X3lpZWxkID0KKyAgICAodm9pZCAqKShDUyBwcC0+Y3VycmVu
dF9ibG9jayArIEFMSUdORURfU0laRU9GX1NUT1JFQkxPQ0spOworICAodm9pZCkgVkFMR1JJTkRf
TUFLRV9NRU1fTk9BQ0NFU1MocHAtPm5leHRfeWllbGQsIHBwLT55aWVsZF9sZW5ndGgpOwogICB9
CiAKIC8qIFRoZXJlJ3MgKG5vdykgZW5vdWdoIHJvb20gaW4gdGhlIGN1cnJlbnQgYmxvY2s7IHRo
ZSB5aWVsZCBpcyB0aGUgbmV4dAogcG9pbnRlci4gKi8KIAotc3RvcmVfbGFzdF9nZXRbcG9vbF0g
PSBuZXh0X3lpZWxkW3Bvb2xdOworcHAtPnN0b3JlX2xhc3RfZ2V0ID0gcHAtPm5leHRfeWllbGQ7
CiAKLS8qIEN1dCBvdXQgdGhlIGRlYnVnZ2luZyBzdHVmZiBmb3IgdXRpbGl0aWVzLCBidXQgc3Rv
cCBwaWNreSBjb21waWxlcnMgZnJvbQotZ2l2aW5nIHdhcm5pbmdzLiAqLworKHZvaWQpIFZBTEdS
SU5EX01BS0VfTUVNX1VOREVGSU5FRChwcC0+c3RvcmVfbGFzdF9nZXQsIHNpemUpOworLyogVXBk
YXRlIG5leHQgcG9pbnRlciBhbmQgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gdGhlIGN1cnJlbnQg
YmxvY2suICovCiAKLSNpZmRlZiBDT01QSUxFX1VUSUxJVFkKLWZ1bmMgPSBmdW5jOwotbGluZW51
bWJlciA9IGxpbmVudW1iZXI7Ci0jZWxzZQotREVCVUcoRF9tZW1vcnkpCi0gIGRlYnVnX3ByaW50
ZigiLS0tJWQgR2V0ICU2cCAlNWQgJS0xNHMgJTRkXG4iLCBwb29sLAotICAgIHN0b3JlX2xhc3Rf
Z2V0W3Bvb2xdLCBzaXplLCBmdW5jLCBsaW5lbnVtYmVyKTsKLSNlbmRpZiAgLyogQ09NUElMRV9V
VElMSVRZICovCitwcC0+bmV4dF95aWVsZCA9ICh2b2lkICopKENTIHBwLT5uZXh0X3lpZWxkICsg
c2l6ZSk7CitwcC0+eWllbGRfbGVuZ3RoIC09IHNpemU7CityZXR1cm4gcHAtPnN0b3JlX2xhc3Rf
Z2V0OworfQogCi0odm9pZCkgVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVEKHN0b3JlX2xhc3Rf
Z2V0W3Bvb2xdLCBzaXplKTsKLS8qIFVwZGF0ZSBuZXh0IHBvaW50ZXIgYW5kIG51bWJlciBvZiBi
eXRlcyBsZWZ0IGluIHRoZSBjdXJyZW50IGJsb2NrLiAqLworLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgR2V0IGEgYmxvY2sgZnJvbSB0
aGUgY3VycmVudCBwb29sICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwogCi1uZXh0X3lpZWxkW3Bvb2xdID0gKHZvaWQgKikoQ1MgbmV4
dF95aWVsZFtwb29sXSArIHNpemUpOwoteWllbGRfbGVuZ3RoW3Bvb2xdIC09IHNpemU7Ci1yZXR1
cm4gc3RvcmVfbGFzdF9nZXRbcG9vbF07CisvKiBSdW5uaW5nIG91dCBvZiBzdG9yZSBpcyBhIHRv
dGFsIGRpc2FzdGVyLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB2aWEgdGhlCittYWNybyBzdG9y
ZV9nZXQoKS4gVGhlIGN1cnJlbnQgc3RvcmVfcG9vbCBpcyB1c2VkLCBhZGp1c3RpbmcgZm9yIHRh
aW50LgorSWYgdGhlIHByb3RveXBlIGlzIHF1b3RlZCwgdXNlIGEgcXVvdGVkLXBvb2wuCitSZXR1
cm4gYSBibG9jayBvZiBzdG9yZSB3aXRoaW4gdGhlIGN1cnJlbnQgYmlnIGJsb2NrIG9mIHRoZSBw
b29sLCBnZXR0aW5nIGEgbmV3CitvbmUgaWYgbmVjZXNzYXJ5LiBUaGUgYWRkcmVzcyBpcyBzYXZl
ZCBpbiBzdG9yZV9sYXN0X2dldCBmb3IgdGhlIHBvb2wuCisKK0FyZ3VtZW50czoKKyAgc2l6ZSAg
ICAgICAgYW1vdW50IHdhbnRlZCwgYnl0ZXMKKyAgcHJvdG9fbWVtICAgY2xhc3M6IGdldCBzdG9y
ZSBjb25mb3JtYW50IHRvIHRoaXMKKwkJU3BlY2lhbCB2YWx1ZXM6IDAgZm9yY2VzIHVudGFpbnRl
ZCwgMSBmb3JjZXMgdGFpbnRlZAorICBmdW5jICAgICAgICBmdW5jdGlvbiBmcm9tIHdoaWNoIGNh
bGxlZAorICBsaW5lbnVtYmVyICBsaW5lIG51bWJlciBpbiBzb3VyY2UgZmlsZQorCitSZXR1cm5z
OiAgICAgIHBvaW50ZXIgdG8gc3RvcmUgKHBhbmljIG9uIG1hbGxvYyBmYWlsdXJlKQorKi8KKwor
dm9pZCAqCitzdG9yZV9nZXRfMyhpbnQgc2l6ZSwgY29uc3Qgdm9pZCAqIHByb3RvX21lbSwgY29u
c3QgY2hhciAqIGZ1bmMsIGludCBsaW5lbnVtYmVyKQoreworI2lmbmRlZiBDT01QSUxFX1VUSUxJ
VFkKK2ludCBxdW90ZXIgPSBxdW90ZXJfZm9yX2FkZHJlc3MocHJvdG9fbWVtKTsKKyNlbmRpZgor
cG9vbGRlc2MgKiBwcDsKK3ZvaWQgKiB5aWVsZDsKKworI2lmbmRlZiBDT01QSUxFX1VUSUxJVFkK
K2lmICghaXNfcmVhbF9xdW90ZXIocXVvdGVyKSkKKyNlbmRpZgorICB7CisgIEJPT0wgdGFpbnRl
ZCA9IGlzX3RhaW50ZWQocHJvdG9fbWVtKTsKKyAgaW50IHBvb2wgPSB0YWludGVkID8gc3RvcmVf
cG9vbCArIFBPT0xfVEFJTlRfQkFTRSA6IHN0b3JlX3Bvb2w7CisgIHBwID0gcGFpcmVkX3Bvb2xz
ICsgcG9vbDsKKyAgeWllbGQgPSBwb29sX2dldChwcCwgc2l6ZSwgKHBvb2wgPT0gUE9PTF9DT05G
SUcpLCBmdW5jLCBsaW5lbnVtYmVyKTsKKworICAvKiBDdXQgb3V0IHRoZSBkZWJ1Z2dpbmcgc3R1
ZmYgZm9yIHV0aWxpdGllcywgYnV0IHN0b3AgcGlja3kgY29tcGlsZXJzIGZyb20KKyAgZ2l2aW5n
IHdhcm5pbmdzLiAqLworCisjaWZuZGVmIENPTVBJTEVfVVRJTElUWQorICBERUJVRyhEX21lbW9y
eSkKKyAgICBkZWJ1Z19wcmludGYoIi0tLSVkIEdldCAlNnAgJTVkICUtMTRzICU0ZFxuIiwgcG9v
bCwKKyAgICAgIHBwLT5zdG9yZV9sYXN0X2dldCwgc2l6ZSwgZnVuYywgbGluZW51bWJlcik7Cisj
ZW5kaWYKKyAgfQorI2lmbmRlZiBDT01QSUxFX1VUSUxJVFkKK2Vsc2UKKyAgeworICBERUJVRyhE
X21lbW9yeSkKKyAgICBkZWJ1Z19wcmludGYoImFsbG9jYXRpbmcgcXVvdGVkLWJsb2NrIGZvciBx
dW90ZXIgJXUgKGZyb20gJXMgJWQpXG4iLAorICAgICAgcXVvdGVyLCBmdW5jLCBsaW5lbnVtYmVy
KTsKKyAgaWYgKCEocHAgPSBwb29sX2Zvcl9xdW90ZXIocXVvdGVyKSkpIHBwID0gcXVvdGVkX3Bv
b2xfbmV3KHF1b3Rlcik7CisgIHlpZWxkID0gcG9vbF9nZXQocHAsIHNpemUsIEZBTFNFLCBmdW5j
LCBsaW5lbnVtYmVyKTsKKyAgREVCVUcoRF9tZW1vcnkpCisgICAgZGVidWdfcHJpbnRmKCItLS1R
USBHZXQgJTZwICU1ZCAlLTE0cyAlNGRcbiIsCisgICAgICBwcC0+c3RvcmVfbGFzdF9nZXQsIHNp
emUsIGZ1bmMsIGxpbmVudW1iZXIpOworICB9CisjZW5kaWYKK3JldHVybiB5aWVsZDsKIH0KIAog
CkBAIC0zNDAsNiArNTUwLDcgQEAKIAogQXJndW1lbnRzOgogICBzaXplICAgICAgICBhbW91bnQg
d2FudGVkCisgIHByb3RvX21lbSAgIGNsYXNzOiBnZXQgc3RvcmUgY29uZm9ybWFudCB0byB0aGlz
CiAgIGZ1bmMgICAgICAgIGZ1bmN0aW9uIGZyb20gd2hpY2ggY2FsbGVkCiAgIGxpbmVudW1iZXIg
IGxpbmUgbnVtYmVyIGluIHNvdXJjZSBmaWxlCiAKQEAgLTM0NywxNyArNTU4LDEzMSBAQAogKi8K
IAogdm9pZCAqCi1zdG9yZV9nZXRfcGVybV8zKGludCBzaXplLCBCT09MIHRhaW50ZWQsIGNvbnN0
IGNoYXIgKmZ1bmMsIGludCBsaW5lbnVtYmVyKQorc3RvcmVfZ2V0X3Blcm1fMyhpbnQgc2l6ZSwg
Y29uc3Qgdm9pZCAqIHByb3RvX21lbSwgY29uc3QgY2hhciAqIGZ1bmMsIGludCBsaW5lbnVtYmVy
KQogewotdm9pZCAqeWllbGQ7Cit2b2lkICogeWllbGQ7CiBpbnQgb2xkX3Bvb2wgPSBzdG9yZV9w
b29sOwogc3RvcmVfcG9vbCA9IFBPT0xfUEVSTTsKLXlpZWxkID0gc3RvcmVfZ2V0XzMoc2l6ZSwg
dGFpbnRlZCwgZnVuYywgbGluZW51bWJlcik7Cit5aWVsZCA9IHN0b3JlX2dldF8zKHNpemUsIHBy
b3RvX21lbSwgZnVuYywgbGluZW51bWJlcik7CiBzdG9yZV9wb29sID0gb2xkX3Bvb2w7CiByZXR1
cm4geWllbGQ7CiB9CiAKIAorI2lmbmRlZiBDT01QSUxFX1VUSUxJVFkKKy8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBHZXQgYSBibG9jayBhbm5v
dGF0ZWQgYXMgYmVpbmcgbG9va3VwLXF1b3RlZCAgKgorKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQWxsb2NhdGUgZnJvbSBwb29sIGEgcG9v
bCBjb25zaXN0ZW50IHdpdGggdGhlIHByb3RvX21lbSBhdWdtZW50ZWQgYnkgdGhlCityZXF1ZXN0
ZWQgcXVvdGVyIHR5cGUuCisKK1hYWCBjdXJyZW50bHkgbm90IGhhbmRsaW5nIG1hcmsvcmVsZWFz
ZQorCitBcmdzOglzaXplCQludW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUKKwlxdW90ZXIJCWlk
IGZvciB0aGUgcXVvdGluZyB0eXBlCisJZnVuYwkJY2FsbGVyLCBmb3IgZGVidWcKKwlsaW5lbnVt
YmVyCWNhbGxlciwgZm9yIGRlYnVnCisKK1JldHVybjoJYWxsb2NhdGVkIG1lbW9yeSBibG9jawor
Ki8KKworc3RhdGljIHZvaWQgKgorc3RvcmVfZm9yY2VfZ2V0X3F1b3RlZChpbnQgc2l6ZSwgdW5z
aWduZWQgcXVvdGVyLAorICBjb25zdCBjaGFyICogZnVuYywgaW50IGxpbmVudW1iZXIpCit7Citw
b29sZGVzYyAqIHBwID0gcG9vbF9mb3JfcXVvdGVyKHF1b3Rlcik7Cit2b2lkICogeWllbGQ7CisK
K0RFQlVHKERfbWVtb3J5KQorICBkZWJ1Z19wcmludGYoImFsbG9jYXRpbmcgcXVvdGVkLWJsb2Nr
IGZvciBxdW90ZXIgJXUgKGZyb20gJXMgJWQpXG4iLCBxdW90ZXIsIGZ1bmMsIGxpbmVudW1iZXIp
OworCitpZiAoIXBwKSBwcCA9IHF1b3RlZF9wb29sX25ldyhxdW90ZXIpOworeWllbGQgPSBwb29s
X2dldChwcCwgc2l6ZSwgRkFMU0UsIGZ1bmMsIGxpbmVudW1iZXIpOworCitERUJVRyhEX21lbW9y
eSkKKyAgZGVidWdfcHJpbnRmKCItLS1RUSBHZXQgJTZwICU1ZCAlLTE0cyAlNGRcbiIsCisgICAg
cHAtPnN0b3JlX2xhc3RfZ2V0LCBzaXplLCBmdW5jLCBsaW5lbnVtYmVyKTsKKworcmV0dXJuIHlp
ZWxkOworfQorCisvKiBNYXliZSBnZXQgbWVtb3J5IGZvciB0aGUgc3BlY2lmaWVkIHF1b3Rlciwg
YnV0IG9ubHkgaWYgdGhlCitwcm90b3R5cGUgbWVtb3J5IGlzIHRhaW50ZWQuIE90aGVyd2lzZSwg
Z2V0IHBsYWluIG1lbW9yeS4KKyovCit2b2lkICoKK3N0b3JlX2dldF9xdW90ZWRfMyhpbnQgc2l6
ZSwgY29uc3Qgdm9pZCAqIHByb3RvX21lbSwgdW5zaWduZWQgcXVvdGVyLAorICBjb25zdCBjaGFy
ICogZnVuYywgaW50IGxpbmVudW1iZXIpCit7CisvLyBkZWJ1Z19wcmludGYoInN0b3JlX2dldF9x
dW90ZWRfMzogcXVvdGVyICV1XG4iLCBxdW90ZXIpOworcmV0dXJuIGlzX3RhaW50ZWQocHJvdG9f
bWVtKQorICA/IHN0b3JlX2ZvcmNlX2dldF9xdW90ZWQoc2l6ZSwgcXVvdGVyLCBmdW5jLCBsaW5l
bnVtYmVyKQorICA6IHN0b3JlX2dldF8zKHNpemUsIHByb3RvX21lbSwgZnVuYywgbGluZW51bWJl
cik7Cit9CisKKy8qIFJldHVybiBxdW90ZXIgZm9yIGdpdmVuIGFkZHJlc3MsIG9yIC0xIGlmIG5v
dCBpbiBhIHF1b3RlZC1wb29sLiAqLworaW50CitxdW90ZXJfZm9yX2FkZHJlc3MoY29uc3Qgdm9p
ZCAqIHApCit7Citmb3IgKHF1b3RlZF9wb29sZGVzYyAqIHFwID0gcXVvdGVkX3Bvb2xzOyBxcDsg
cXAgPSBxcC0+bmV4dCkKKyAgeworICBwb29sZGVzYyAqIHBwID0gJnFwLT5wb29sOworICBzdG9y
ZWJsb2NrICogYjsKKworICBpZiAoYiA9IHBwLT5jdXJyZW50X2Jsb2NrKQorICAgIGlmIChpc19w
b2ludGVyX2luX2Jsb2NrKGIsIHApKQorICAgICAgcmV0dXJuIHFwLT5xdW90ZXI7CisKKyAgZm9y
IChiID0gcHAtPmNoYWluYmFzZTsgYjsgYiA9IGItPm5leHQpCisgICAgaWYgKGlzX3BvaW50ZXJf
aW5fYmxvY2soYiwgcCkpCisgICAgICByZXR1cm4gcXAtPnF1b3RlcjsKKyAgfQorcmV0dXJuIC0x
OworfQorCisvKiBSZXR1cm4gVFJVRSBpZmYgdGhlIGdpdmVuIGFkZHJlc3MgaXMgcXVvdGVkIGZv
ciB0aGUgZ2l2ZW4gdHlwZS4KK1RoZXJlIGlzIGV4dHJhIGNvbXBsZXhpdHkgdG8gaGFuZGxlIGxv
b2t1cCBwcm92aWRlcnMgd2l0aCBtdWx0aXBsZQorZmluZCB2YXJpYW50cyBidXQgc2hhcmVkIHF1
b3RlIGZ1bmN0aW9ucy4gKi8KK0JPT0wKK2lzX3F1b3RlZF9saWtlKGNvbnN0IHZvaWQgKiBwLCB1
bnNpZ25lZCBxdW90ZXIpCit7CitpbnQgcHEgPSBxdW90ZXJfZm9yX2FkZHJlc3MocCk7CitCT09M
IHkgPQorICBpc19yZWFsX3F1b3RlcihwcSkgJiYgbG9va3VwX2xpc3RbcHFdLT5xdW90ZSA9PSBs
b29rdXBfbGlzdFtxdW90ZXJdLT5xdW90ZTsKKy8qIGRlYnVnX3ByaW50ZigiaXNfcXVvdGVkKCVw
LCAldSk6ICVjXG4iLCBwLCBxdW90ZXIsIHk/J1QnOidGJyk7ICovCityZXR1cm4geTsKK30KKwor
LyogUmV0dXJuIFRSVUUgaWYgdGhlIHF1b3RlciB2YWx1ZSBpbmRpY2F0ZXMgYW4gYWN0dWFsIHF1
b3RlciAqLworQk9PTAoraXNfcmVhbF9xdW90ZXIoaW50IHF1b3RlcikKK3sKK3JldHVybiBxdW90
ZXIgPj0gMDsKK30KKworLyogUmV0dXJuIFRSVUUgaWYgdGhlICJuZXciIGRhdGEgcmVxdWlyZXMg
dGhhdCB0aGUgIm9sZCIgZGF0YQorYmUgcmVjb3BpZWQgdG8gbmV3LWNsYXNzIG1lbW9yeS4gIFdl
IG9yZGVyIHRoZSBjbGFzc2VzIGFzCisKKyAgMjogdGFpbnRlZCwgbm90IHF1b3RlZAorICAxOiBx
dW90ZWQgKHdoaWNoIGlzIGFsc28gdGFpbnRlZCkKKyAgMDogdW50YWludGVkCisKK0lmIHRoZSAi
bmV3IiBpcyBoaWdoZXItb3JkZXIgdGhhbiB0aGUgIm9sZCIsIHRoZXkgYXJlIG5vdCBjb21wYXRp
YmxlCithbmQgYSBjb3B5IGlzIG5lZWRlZC4gIElmIGJvdGggYXJlIHF1b3RlZCwgYnV0IHRoZSBx
dW90ZXJzIGRpZmZlciwKK25vdCBjb21wYXRpYmxlLiAgT3RoZXJ3aXNlIHRoZXkgYXJlIGNvbXBh
dGlibGUuCisqLworQk9PTAoraXNfaW5jb21wYXRpYmxlX2ZuKGNvbnN0IHZvaWQgKiBvbGQsIGNv
bnN0IHZvaWQgKiBuZXcpCit7CitpbnQgb3EsIG5xOwordW5zaWduZWQgb2ksIG5pOworCituaSA9
IGlzX3JlYWxfcXVvdGVyKG5xID0gcXVvdGVyX2Zvcl9hZGRyZXNzKG5ldykpID8gMSA6IGlzX3Rh
aW50ZWQobmV3KSA/IDIgOiAwOworb2kgPSBpc19yZWFsX3F1b3RlcihvcSA9IHF1b3Rlcl9mb3Jf
YWRkcmVzcyhvbGQpKSA/IDEgOiBpc190YWludGVkKG9sZCkgPyAyIDogMDsKK3JldHVybiBuaSA+
IG9pIHx8IG5pID09IG9pICYmIG5xICE9IG9xOworfQorCisjZW5kaWYJLyohQ09NUElMRV9VVElM
SVRZKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKICogICAgICBFeHRlbmQgYSBibG9jayBpZiBpdCBpcyBhdCB0aGUgdG9wICAgICAgICAqCkBA
IC0zODAsMTMgKzcwNSwxNiBAQAogUmV0dXJuczogICAgIFRSVUUgaWYgdGhlIGJsb2NrIGlzIGF0
IHRoZSB0b3Agb2YgdGhlIHN0YWNrIGFuZCBoYXMgYmVlbgogICAgICAgICAgICAgIGV4dGVuZGVk
OyBGQUxTRSBpZiBpdCBpc24ndCBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgY2Fubm90CiAg
ICAgICAgICAgICAgYmUgZXh0ZW5kZWQKKworWFhYIG5lZWRzIGV4dGVuc2lvbiBmb3IgcXVvdGVk
LXRyYWNraW5nLiAgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIGdsb2JhbCBzdG9yZV9wb29sCitpcyB0
aGUgb25lIHRvIGFsbG9jIGZyb20sIHdoaWNoIGJyZWFrcyB3aXRoIHNlcGFyYXRlZCBwb29scy4K
ICovCiAKIEJPT0wKLXN0b3JlX2V4dGVuZF8zKHZvaWQgKnB0ciwgQk9PTCB0YWludGVkLCBpbnQg
b2xkc2l6ZSwgaW50IG5ld3NpemUsCi0gICBjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZW51bWJl
cikKK3N0b3JlX2V4dGVuZF8zKHZvaWQgKiBwdHIsIGludCBvbGRzaXplLCBpbnQgbmV3c2l6ZSwK
KyAgIGNvbnN0IGNoYXIgKiBmdW5jLCBpbnQgbGluZW51bWJlcikKIHsKLWludCBwb29sID0gdGFp
bnRlZCA/IHN0b3JlX3Bvb2wgKyBQT09MX1RBSU5UX0JBU0UgOiBzdG9yZV9wb29sOworcG9vbGRl
c2MgKiBwcCA9IHBvb2xfZm9yX3BvaW50ZXIocHRyLCBmdW5jLCBsaW5lbnVtYmVyKTsKIGludCBp
bmMgPSBuZXdzaXplIC0gb2xkc2l6ZTsKIGludCByb3VuZGVkX29sZHNpemUgPSBvbGRzaXplOwog
CkBAIC0zOTUsMzQgKzcyMywzOCBAQAogICAgICAgICAgICAgImJhZCBtZW1vcnkgZXh0ZW5zaW9u
IHJlcXVlc3RlZCAoJWQgLT4gJWQgYnl0ZXMpIGF0ICVzICVkIiwKICAgICAgICAgICAgIG9sZHNp
emUsIG5ld3NpemUsIGZ1bmMsIGxpbmVudW1iZXIpOwogCi0vKiBDaGVjayB0aGF0IHRoZSBibG9j
ayBiZWluZyBleHRlbmRlZCB3YXMgYWxyZWFkeSBvZiB0aGUgcmVxdWlyZWQgdGFpbnQgc3RhdHVz
OwotcmVmdXNlIHRvIGV4dGVuZCBpZiBub3QuICovCi0KLWlmIChpc190YWludGVkKHB0cikgIT0g
dGFpbnRlZCkKLSAgcmV0dXJuIEZBTFNFOwotCiBpZiAocm91bmRlZF9vbGRzaXplICUgYWxpZ25t
ZW50ICE9IDApCiAgIHJvdW5kZWRfb2xkc2l6ZSArPSBhbGlnbm1lbnQgLSAocm91bmRlZF9vbGRz
aXplICUgYWxpZ25tZW50KTsKIAotaWYgKENTIHB0ciArIHJvdW5kZWRfb2xkc2l6ZSAhPSBDUyAo
bmV4dF95aWVsZFtwb29sXSkgfHwKLSAgICBpbmMgPiB5aWVsZF9sZW5ndGhbcG9vbF0gKyByb3Vu
ZGVkX29sZHNpemUgLSBvbGRzaXplKQoraWYgKENTIHB0ciArIHJvdW5kZWRfb2xkc2l6ZSAhPSBD
UyAocHAtPm5leHRfeWllbGQpIHx8CisgICAgaW5jID4gcHAtPnlpZWxkX2xlbmd0aCArIHJvdW5k
ZWRfb2xkc2l6ZSAtIG9sZHNpemUpCiAgIHJldHVybiBGQUxTRTsKIAogLyogQ3V0IG91dCB0aGUg
ZGVidWdnaW5nIHN0dWZmIGZvciB1dGlsaXRpZXMsIGJ1dCBzdG9wIHBpY2t5IGNvbXBpbGVycyBm
cm9tCiBnaXZpbmcgd2FybmluZ3MuICovCiAKLSNpZmRlZiBDT01QSUxFX1VUSUxJVFkKLWZ1bmMg
PSBmdW5jOwotbGluZW51bWJlciA9IGxpbmVudW1iZXI7Ci0jZWxzZQorI2lmbmRlZiBDT01QSUxF
X1VUSUxJVFkKIERFQlVHKERfbWVtb3J5KQotICBkZWJ1Z19wcmludGYoIi0tLSVkIEV4dCAlNnAg
JTVkICUtMTRzICU0ZFxuIiwgcG9vbCwgcHRyLCBuZXdzaXplLAotICAgIGZ1bmMsIGxpbmVudW1i
ZXIpOworICB7CisgIHF1b3RlZF9wb29sZGVzYyAqIHFwOworICBmb3IgKHFwID0gcXVvdGVkX3Bv
b2xzOyBxcDsgcXAgPSBxcC0+bmV4dCkKKyAgICBpZiAocHAgPT0gJnFwLT5wb29sKQorICAgICAg
eworICAgICAgZGVidWdfcHJpbnRmKCItLS1RJWQgRXh0ICU2cCAlNWQgJS0xNHMgJTRkXG4iLAor
CShpbnQpKHFwIC0gcXVvdGVkX3Bvb2xzKSwKKwlwdHIsIG5ld3NpemUsIGZ1bmMsIGxpbmVudW1i
ZXIpOworICAgICAgYnJlYWs7CisgICAgICB9CisgIGlmICghcXApCisgICAgZGVidWdfcHJpbnRm
KCItLS0lZCBFeHQgJTZwICU1ZCAlLTE0cyAlNGRcbiIsCisgICAgICAoaW50KShwcCAtIHBhaXJl
ZF9wb29scyksCisgICAgICBwdHIsIG5ld3NpemUsIGZ1bmMsIGxpbmVudW1iZXIpOworICB9CiAj
ZW5kaWYgIC8qIENPTVBJTEVfVVRJTElUWSAqLwogCiBpZiAobmV3c2l6ZSAlIGFsaWdubWVudCAh
PSAwKSBuZXdzaXplICs9IGFsaWdubWVudCAtIChuZXdzaXplICUgYWxpZ25tZW50KTsKLW5leHRf
eWllbGRbcG9vbF0gPSBDUyBwdHIgKyBuZXdzaXplOwoteWllbGRfbGVuZ3RoW3Bvb2xdIC09IG5l
d3NpemUgLSByb3VuZGVkX29sZHNpemU7CitwcC0+bmV4dF95aWVsZCA9IENTIHB0ciArIG5ld3Np
emU7CitwcC0+eWllbGRfbGVuZ3RoIC09IG5ld3NpemUgLSByb3VuZGVkX29sZHNpemU7CiAodm9p
ZCkgVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVEKHB0ciArIG9sZHNpemUsIGluYyk7CiByZXR1
cm4gVFJVRTsKIH0KQEAgLTQzMCw2ICs3NjIsMTQgQEAKIAogCiAKK3N0YXRpYyBCT09MCitpc19w
d3IyX3NpemUoaW50IGxlbikKK3sKK3Vuc2lnbmVkIHggPSBsZW47CityZXR1cm4gKHggJiAoeCAt
IDEpKSA9PSAwOworfQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCiAqICAgIEJhY2sgdXAgdG8gYSBwcmV2aW91cyBwb2ludCBvbiB0aGUgc3Rh
Y2sgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KQEAgLTQzOSw4ICs3NzksMTEgQEAKIG5vdCBjYWxsIHdpdGggYSBwb2ludGVyIHJldHVybmVk
IGJ5IHN0b3JlX2dldCgpLiAgQm90aCB0aGUgdW50YWludGVkIGFuZCB0YWludGVkCiBwb29scyBj
b3JyZXNwb3NkaW5nIHRvIHN0b3JlX3Bvb2wgYXJlIHJlc2V0LgogCitRdW90ZWQgcG9vbHMgYXJl
IG5vdCBoYW5kbGVkLgorCiBBcmd1bWVudHM6Ci0gIHIgICAgICAgICAgIHBsYWNlIHRvIGJhY2sg
dXAgdG8KKyAgcHRyICAgICAgICAgcGxhY2UgdG8gYmFjayB1cCB0bworICBwb29sCSAgICAgIHBv
b2wgaG9sZGluZyB0aGUgcG9pbnRlcgogICBmdW5jICAgICAgICBmdW5jdGlvbiBmcm9tIHdoaWNo
IGNhbGxlZAogICBsaW5lbnVtYmVyICBsaW5lIG51bWJlciBpbiBzb3VyY2UgZmlsZQogCkBAIC00
NTEsMjMgKzc5NCwyNiBAQAogaW50ZXJuYWxfc3RvcmVfcmVzZXQodm9pZCAqIHB0ciwgaW50IHBv
b2wsIGNvbnN0IGNoYXIgKmZ1bmMsIGludCBsaW5lbnVtYmVyKQogewogc3RvcmVibG9jayAqIGJi
Owotc3RvcmVibG9jayAqIGIgPSBjdXJyZW50X2Jsb2NrW3Bvb2xdOworcG9vbGRlc2MgKiBwcCA9
IHBhaXJlZF9wb29scyArIHBvb2w7CitzdG9yZWJsb2NrICogYiA9IHBwLT5jdXJyZW50X2Jsb2Nr
OwogY2hhciAqIGJjID0gQ1MgYiArIEFMSUdORURfU0laRU9GX1NUT1JFQkxPQ0s7CiBpbnQgbmV3
bGVuZ3RoLCBjb3VudDsKICNpZm5kZWYgQ09NUElMRV9VVElMSVRZCiBpbnQgb2xkbWFsbG9jID0g
cG9vbF9tYWxsb2M7CiAjZW5kaWYKIAoraWYgKCFiKSByZXR1cm47CS8qIGV4aW1fZHVtcGRiIGdl
dHMgdGhpcywgYmVjdXNlIGl0IGhhcyBuZXZlciB1c2VkIHRhaW50ZWQgbWVtICovCisKIC8qIExh
c3Qgc3RvcmUgb3BlcmF0aW9uIHdhcyBub3QgYSBnZXQgKi8KIAotc3RvcmVfbGFzdF9nZXRbcG9v
bF0gPSBOVUxMOworcHAtPnN0b3JlX2xhc3RfZ2V0ID0gTlVMTDsKIAogLyogU2VlIGlmIHRoZSBw
bGFjZSBpcyBpbiB0aGUgY3VycmVudCBibG9jayAtIGFzIGl0IG9mdGVuIHdpbGwgYmUuIE90aGVy
d2lzZSwKIHNlYXJjaCBmb3IgdGhlIGJsb2NrIGluIHdoaWNoIGl0IGxpZXMuICovCiAKIGlmIChD
UyBwdHIgPCBiYyB8fCBDUyBwdHIgPiBiYyArIGItPmxlbmd0aCkKICAgewotICBmb3IgKGIgPSBj
aGFpbmJhc2VbcG9vbF07IGI7IGIgPSBiLT5uZXh0KQorICBmb3IgKGIgPSAgcHAtPmNoYWluYmFz
ZTsgYjsgYiA9IGItPm5leHQpCiAgICAgewogICAgIGJjID0gQ1MgYiArIEFMSUdORURfU0laRU9G
X1NUT1JFQkxPQ0s7CiAgICAgaWYgKENTIHB0ciA+PSBiYyAmJiBDUyBwdHIgPD0gYmMgKyBiLT5s
ZW5ndGgpIGJyZWFrOwpAQCAtNDkzLDE5ICs4MzksMTkgQEAKICAgfQogI2VuZGlmCiAodm9pZCkg
VkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MocHRyLCBuZXdsZW5ndGgpOwotbmV4dF95aWVsZFtw
b29sXSA9IENTIHB0ciArIChuZXdsZW5ndGggJSBhbGlnbm1lbnQpOwotY291bnQgPSB5aWVsZF9s
ZW5ndGhbcG9vbF07Ci1jb3VudCA9ICh5aWVsZF9sZW5ndGhbcG9vbF0gPSBuZXdsZW5ndGggLSAo
bmV3bGVuZ3RoICUgYWxpZ25tZW50KSkgLSBjb3VudDsKLWN1cnJlbnRfYmxvY2tbcG9vbF0gPSBi
OworcHAtPm5leHRfeWllbGQgPSBDUyBwdHIgKyAobmV3bGVuZ3RoICUgYWxpZ25tZW50KTsKK2Nv
dW50ID0gcHAtPnlpZWxkX2xlbmd0aDsKK2NvdW50ID0gKHBwLT55aWVsZF9sZW5ndGggPSBuZXds
ZW5ndGggLSAobmV3bGVuZ3RoICUgYWxpZ25tZW50KSkgLSBjb3VudDsKK3BwLT5jdXJyZW50X2Js
b2NrID0gYjsKIAogLyogRnJlZSBhbnkgc3Vic2VxdWVudCBibG9jay4gRG8gTk9UIGZyZWUgdGhl
IGZpcnN0CiBzdWNjZXNzb3IsIGlmIG91ciBjdXJyZW50IGJsb2NrIGhhcyBsZXNzIHRoYW4gMjU2
IGJ5dGVzIGxlZnQuIFRoaXMgc2hvdWxkCiBwcmV2ZW50IHVzIGZyb20gZmxhcHBpbmcgbWVtb3J5
LiBIb3dldmVyLCBrZWVwIHRoaXMgYmxvY2sgb25seSB3aGVuIGl0IGhhcwotdGhlIGRlZmF1bHQg
c2l6ZS4gKi8KK2EgcG93ZXItb2YtdHdvIHNpemUgc28gcHJvYmFibHkgaXMgbm90IGEgY3VzdG9t
IGluZmxhdGVkIG9uZS4gKi8KIAotaWYgKCAgeWllbGRfbGVuZ3RoW3Bvb2xdIDwgU1RPUkVQT09M
X01JTl9TSVpFCitpZiAoICBwcC0+eWllbGRfbGVuZ3RoIDwgU1RPUkVQT09MX01JTl9TSVpFCiAg
ICAmJiBiLT5uZXh0Ci0gICAmJiBiLT5uZXh0LT5sZW5ndGggPT0gU1RPUkVfQkxPQ0tfU0laRSkK
KyAgICYmIGlzX3B3cjJfc2l6ZShiLT5uZXh0LT5sZW5ndGggKyBBTElHTkVEX1NJWkVPRl9TVE9S
RUJMT0NLKSkKICAgewogICBiID0gYi0+bmV4dDsKICNpZm5kZWYgQ09NUElMRV9VVElMSVRZCkBA
IC01MTgsNTYgKzg2NCw2NSBAQAogICB9CiAKIGJiID0gYi0+bmV4dDsKLWItPm5leHQgPSBOVUxM
OworaWYgKHBvb2wgIT0gUE9PTF9DT05GSUcpCisgIGItPm5leHQgPSBOVUxMOwogCiB3aGlsZSAo
KGIgPSBiYikpCiAgIHsKICAgaW50IHNpeiA9IGItPmxlbmd0aCArIEFMSUdORURfU0laRU9GX1NU
T1JFQkxPQ0s7CisKICNpZm5kZWYgQ09NUElMRV9VVElMSVRZCiAgIGlmIChkZWJ1Z19zdG9yZSkK
ICAgICBhc3NlcnRfbm9fdmFyaWFibGVzKGIsIGItPmxlbmd0aCArIEFMSUdORURfU0laRU9GX1NU
T1JFQkxPQ0ssCiAJCQlmdW5jLCBsaW5lbnVtYmVyKTsKICNlbmRpZgogICBiYiA9IGJiLT5uZXh0
OwotICBuYnl0ZXNbcG9vbF0gLT0gc2l6OworICBwcC0+bmJ5dGVzIC09IHNpejsKICAgcG9vbF9t
YWxsb2MgLT0gc2l6OwotICBuYmxvY2tzW3Bvb2xdLS07Ci0gIGludGVybmFsX3N0b3JlX2ZyZWUo
YiwgZnVuYywgbGluZW51bWJlcik7CisgIHBwLT5uYmxvY2tzLS07CisgIGlmIChwb29sICE9IFBP
T0xfQ09ORklHKQorICAgIGludGVybmFsX3N0b3JlX2ZyZWUoYiwgZnVuYywgbGluZW51bWJlcik7
CisKKyNpZm5kZWYgUkVTVFJJQ1RFRF9NRU1PUlkKKyAgaWYgKHBwLT5zdG9yZV9ibG9ja19vcmRl
ciA+IDEzKSBwcC0+c3RvcmVfYmxvY2tfb3JkZXItLTsKKyNlbmRpZgogICB9CiAKIC8qIEN1dCBv
dXQgdGhlIGRlYnVnZ2luZyBzdHVmZiBmb3IgdXRpbGl0aWVzLCBidXQgc3RvcCBwaWNreSBjb21w
aWxlcnMgZnJvbQogZ2l2aW5nIHdhcm5pbmdzLiAqLwogCi0jaWZkZWYgQ09NUElMRV9VVElMSVRZ
Ci1mdW5jID0gZnVuYzsKLWxpbmVudW1iZXIgPSBsaW5lbnVtYmVyOwotI2Vsc2UKKyNpZm5kZWYg
Q09NUElMRV9VVElMSVRZCiBERUJVRyhEX21lbW9yeSkKLSAgZGVidWdfcHJpbnRmKCItLS0lZCBS
c3QgJTZwICU1ZCAlLTE0cyAlNGQgJWRcbiIsIHBvb2wsIHB0ciwKKyAgZGVidWdfcHJpbnRmKCIt
LS0lZCBSc3QgJTZwICU1ZCAlLTE0cyAlNGRcdHBvb2wgJWRcbiIsIHBvb2wsIHB0ciwKICAgICBj
b3VudCArIG9sZG1hbGxvYyAtIHBvb2xfbWFsbG9jLAogICAgIGZ1bmMsIGxpbmVudW1iZXIsIHBv
b2xfbWFsbG9jKTsKICNlbmRpZiAgLyogQ09NUElMRV9VVElMSVRZICovCiB9CiAKIAorLyogQmFj
ayB1cCB0aGUgcG9vbCBwYWlyLCB1bnRhaW50ZWQgYW5kIHRhaW50ZWQsIG9mIHRoZSBzdG9yZV9w
b29sIHNldHRpbmcuCitRdW90ZWQgcG9vbHMgYXJlIG5vdCBoYW5kbGVkLgorKi8KKwogcm1hcmsK
LXN0b3JlX3Jlc2V0XzMocm1hcmsgciwgaW50IHBvb2wsIGNvbnN0IGNoYXIgKmZ1bmMsIGludCBs
aW5lbnVtYmVyKQorc3RvcmVfcmVzZXRfMyhybWFyayByLCBjb25zdCBjaGFyICogZnVuYywgaW50
IGxpbmVudW1iZXIpCiB7CiB2b2lkICoqIHB0ciA9IHI7CiAKLWlmIChwb29sID49IFBPT0xfVEFJ
TlRfQkFTRSkKK2lmIChzdG9yZV9wb29sID49IFBPT0xfVEFJTlRfQkFTRSkKICAgbG9nX3dyaXRl
KDAsIExPR19NQUlOfExPR19QQU5JQ19ESUUsCi0gICAgInN0b3JlX3Jlc2V0IGNhbGxlZCBmb3Ig
cG9vbCAlZDogJXMgJWRcbiIsIHBvb2wsIGZ1bmMsIGxpbmVudW1iZXIpOworICAgICJzdG9yZV9y
ZXNldCBjYWxsZWQgZm9yIHBvb2wgJWQ6ICVzICVkXG4iLCBzdG9yZV9wb29sLCBmdW5jLCBsaW5l
bnVtYmVyKTsKIGlmICghcikKICAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQ19ESUUs
CiAgICAgInN0b3JlX3Jlc2V0IGNhbGxlZCB3aXRoIGJhZCBtYXJrOiAlcyAlZFxuIiwgZnVuYywg
bGluZW51bWJlcik7CiAKLWludGVybmFsX3N0b3JlX3Jlc2V0KCpwdHIsIHBvb2wgKyBQT09MX1RB
SU5UX0JBU0UsIGZ1bmMsIGxpbmVudW1iZXIpOwotaW50ZXJuYWxfc3RvcmVfcmVzZXQocHRyLCAg
cG9vbCwJCSAgIGZ1bmMsIGxpbmVudW1iZXIpOworaW50ZXJuYWxfc3RvcmVfcmVzZXQoKnB0ciwg
c3RvcmVfcG9vbCArIFBPT0xfVEFJTlRfQkFTRSwgZnVuYywgbGluZW51bWJlcik7CitpbnRlcm5h
bF9zdG9yZV9yZXNldChwdHIsICBzdG9yZV9wb29sLAkJICAgZnVuYywgbGluZW51bWJlcik7CiBy
ZXR1cm4gTlVMTDsKIH0KIAogCisvKioqKioqKioqKioqKiovCiAKIC8qIEZyZWUgdGFpbC1lbmQg
dW51c2VkIGFsbG9jYXRpb24uICBUaGlzIGxldHMgdXMgYWxsb2NhdGUgYSBiaWcgY2h1bmsKIGVh
cmx5LCBmb3IgY2FzZXMgd2hlbiB3ZSBvbmx5IGRpc2NvdmVyIGxhdGVyIGhvdyBtdWNoIHdhcyBy
ZWFsbHkgbmVlZGVkLgpAQCAtNTgwLDMyICs5MzUsMjYgQEAKICovCiAKIHZvaWQKLXN0b3JlX3Jl
bGVhc2VfYWJvdmVfMyh2b2lkICpwdHIsIGNvbnN0IGNoYXIgKmZ1bmMsIGludCBsaW5lbnVtYmVy
KQorc3RvcmVfcmVsZWFzZV9hYm92ZV8zKHZvaWQgKiBwdHIsIGNvbnN0IGNoYXIgKiBmdW5jLCBp
bnQgbGluZW51bWJlcikKIHsKK3Bvb2xkZXNjICogcHA7CisKIC8qIFNlYXJjaCBhbGwgcG9vbHMn
ICJjdXJyZW50IiBibG9ja3MuICBJZiBpdCBpc24ndCBvbmUgb2YgdGhvc2UsCiBpZ25vcmUgaXQg
KGl0IHVzdWFsbHkgd2lsbCBiZSkuICovCiAKLWZvciAoaW50IHBvb2wgPSAwOyBwb29sIDwgbmVs
ZW0oY3VycmVudF9ibG9jayk7IHBvb2wrKykKK2lmICgocHAgPSBwb29sX2N1cnJlbnRfZm9yX3Bv
aW50ZXIocHRyKSkpCiAgIHsKLSAgc3RvcmVibG9jayAqIGIgPSBjdXJyZW50X2Jsb2NrW3Bvb2xd
OwotICBjaGFyICogYmM7CisgIHN0b3JlYmxvY2sgKiBiID0gcHAtPmN1cnJlbnRfYmxvY2s7CiAg
IGludCBjb3VudCwgbmV3bGVuZ3RoOwogCi0gIGlmICghYikKLSAgICBjb250aW51ZTsKLQotICBi
YyA9IENTIGIgKyBBTElHTkVEX1NJWkVPRl9TVE9SRUJMT0NLOwotICBpZiAoQ1MgcHRyIDwgYmMg
fHwgQ1MgcHRyID4gYmMgKyBiLT5sZW5ndGgpCi0gICAgY29udGludWU7Ci0KICAgLyogTGFzdCBz
dG9yZSBvcGVyYXRpb24gd2FzIG5vdCBhIGdldCAqLwogCi0gIHN0b3JlX2xhc3RfZ2V0W3Bvb2xd
ID0gTlVMTDsKKyAgcHAtPnN0b3JlX2xhc3RfZ2V0ID0gTlVMTDsKIAogICAvKiBCYWNrIHVwLCBy
b3VuZGluZyB0byB0aGUgYWxpZ25tZW50IGlmIG5lY2Vzc2FyeS4gV2hlbiB0ZXN0aW5nLCBmbGF0
dGVuCiAgIHRoZSByZWxlYXNlZCBtZW1vcnkuICovCiAKLSAgbmV3bGVuZ3RoID0gYmMgKyBiLT5s
ZW5ndGggLSBDUyBwdHI7CisgIG5ld2xlbmd0aCA9IChDUyBiICsgQUxJR05FRF9TSVpFT0ZfU1RP
UkVCTE9DSykgKyBiLT5sZW5ndGggLSBDUyBwdHI7CiAjaWZuZGVmIENPTVBJTEVfVVRJTElUWQog
ICBpZiAoZGVidWdfc3RvcmUpCiAgICAgewpAQCAtNjE4LDIwICs5NjcsMjcgQEAKICAgICB9CiAj
ZW5kaWYKICAgKHZvaWQpIFZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKHB0ciwgbmV3bGVuZ3Ro
KTsKLSAgbmV4dF95aWVsZFtwb29sXSA9IENTIHB0ciArIChuZXdsZW5ndGggJSBhbGlnbm1lbnQp
OwotICBjb3VudCA9IHlpZWxkX2xlbmd0aFtwb29sXTsKLSAgY291bnQgPSAoeWllbGRfbGVuZ3Ro
W3Bvb2xdID0gbmV3bGVuZ3RoIC0gKG5ld2xlbmd0aCAlIGFsaWdubWVudCkpIC0gY291bnQ7Cisg
IHBwLT5uZXh0X3lpZWxkID0gQ1MgcHRyICsgKG5ld2xlbmd0aCAlIGFsaWdubWVudCk7CisgIGNv
dW50ID0gcHAtPnlpZWxkX2xlbmd0aDsKKyAgY291bnQgPSAocHAtPnlpZWxkX2xlbmd0aCA9IG5l
d2xlbmd0aCAtIChuZXdsZW5ndGggJSBhbGlnbm1lbnQpKSAtIGNvdW50OwogCiAgIC8qIEN1dCBv
dXQgdGhlIGRlYnVnZ2luZyBzdHVmZiBmb3IgdXRpbGl0aWVzLCBidXQgc3RvcCBwaWNreSBjb21w
aWxlcnMgZnJvbQogICBnaXZpbmcgd2FybmluZ3MuICovCiAKLSNpZmRlZiBDT01QSUxFX1VUSUxJ
VFkKLSAgZnVuYyA9IGZ1bmM7Ci0gIGxpbmVudW1iZXIgPSBsaW5lbnVtYmVyOwotI2Vsc2UKKyNp
Zm5kZWYgQ09NUElMRV9VVElMSVRZCiAgIERFQlVHKERfbWVtb3J5KQotICAgIGRlYnVnX3ByaW50
ZigiLS0tJWQgUmVsICU2cCAlNWQgJS0xNHMgJTRkICVkXG4iLCBwb29sLCBwdHIsIGNvdW50LAot
ICAgICAgZnVuYywgbGluZW51bWJlciwgcG9vbF9tYWxsb2MpOworICAgIHsKKyAgICBxdW90ZWRf
cG9vbGRlc2MgKiBxcDsKKyAgICBmb3IgKHFwID0gcXVvdGVkX3Bvb2xzOyBxcDsgcXAgPSBxcC0+
bmV4dCkKKyAgICAgIGlmIChwcCA9PSAmcXAtPnBvb2wpCisJZGVidWdfcHJpbnRmKCItLS1RJWQg
UmVsICU2cCAlNWQgJS0xNHMgJTRkXHRwb29sICVkXG4iLAorCSAgKGludCkocXAgLSBxdW90ZWRf
cG9vbHMpLAorCSAgcHRyLCBjb3VudCwgZnVuYywgbGluZW51bWJlciwgcG9vbF9tYWxsb2MpOwor
ICAgIGlmICghcXApCisgICAgICBkZWJ1Z19wcmludGYoIi0tLSVkIFJlbCAlNnAgJTVkICUtMTRz
ICU0ZFx0cG9vbCAlZFxuIiwKKwkoaW50KShwcCAtIHBhaXJlZF9wb29scyksIHB0ciwgY291bnQs
CisJZnVuYywgbGluZW51bWJlciwgcG9vbF9tYWxsb2MpOworICAgIH0KICNlbmRpZgogICByZXR1
cm47CiAgIH0KQEAgLTY0NCwxMCArMTAwMCwxNiBAQAogCiAKIHJtYXJrCi1zdG9yZV9tYXJrXzMo
Y29uc3QgY2hhciAqZnVuYywgaW50IGxpbmVudW1iZXIpCitzdG9yZV9tYXJrXzMoY29uc3QgY2hh
ciAqIGZ1bmMsIGludCBsaW5lbnVtYmVyKQogewogdm9pZCAqKiBwOwogCisjaWZuZGVmIENPTVBJ
TEVfVVRJTElUWQorREVCVUcoRF9tZW1vcnkpCisgIGRlYnVnX3ByaW50ZigiLS0tJWQgTXJrICAg
ICAgICAgICAgICAgICAgICAlLTE0cyAlNGRcdHBvb2wgJWRcbiIsCisgICAgc3RvcmVfcG9vbCwg
ZnVuYywgbGluZW51bWJlciwgcG9vbF9tYWxsb2MpOworI2VuZGlmICAvKiBDT01QSUxFX1VUSUxJ
VFkgKi8KKwogaWYgKHN0b3JlX3Bvb2wgPj0gUE9PTF9UQUlOVF9CQVNFKQogICBsb2dfd3JpdGUo
MCwgTE9HX01BSU58TE9HX1BBTklDX0RJRSwKICAgICAic3RvcmVfbWFyayBjYWxsZWQgZm9yIHBv
b2wgJWQ6ICVzICVkXG4iLCBzdG9yZV9wb29sLCBmdW5jLCBsaW5lbnVtYmVyKTsKQEAgLTY1Nyw4
ICsxMDE5LDggQEAKIFJlc2V0IHVzZXMgdGhlIGNvb2tpZSB0byByZWNvdmVyIHRoZSB0LW1hcmss
IHdpbmRzIGJhY2sgdGhlIHRhaW50ZWQgcG9vbCB3aXRoIGl0CiBhbmQgd2luZHMgYmFjayB0aGUg
dW50YWludGVkIHBvb2wgd2l0aCB0aGUgY29va2llLiAqLwogCi1wID0gc3RvcmVfZ2V0XzMoc2l6
ZW9mKHZvaWQgKiksIEZBTFNFLCBmdW5jLCBsaW5lbnVtYmVyKTsKLSpwID0gc3RvcmVfZ2V0XzMo
MCwgVFJVRSwgZnVuYywgbGluZW51bWJlcik7CitwID0gc3RvcmVfZ2V0XzMoc2l6ZW9mKHZvaWQg
KiksIEdFVF9VTlRBSU5URUQsIGZ1bmMsIGxpbmVudW1iZXIpOworKnAgPSBzdG9yZV9nZXRfMygw
LCBHRVRfVEFJTlRFRCwgZnVuYywgbGluZW51bWJlcik7CiByZXR1cm4gcDsKIH0KIApAQCAtNjc0
LDYgKzEwMzYsNyBAQAogCiBBcmd1bWVudHM6CiAgIGJsb2NrICAgICAgIGJsb2NrIG9mIHN0b3Jl
IHRvIGNvbnNpZGVyCisgIHBwCSAgICAgIHBvb2wgY29udGFpbmluZyB0aGUgYmxvY2sKICAgZnVu
YyAgICAgICAgZnVuY3Rpb24gZnJvbSB3aGljaCBjYWxsZWQKICAgbGluZW51bWJlciAgbGluZSBu
dW1iZXIgaW4gc291cmNlIGZpbGUKIApAQCAtNjgxLDI4ICsxMDQ0LDI1IEBACiAqLwogCiBzdGF0
aWMgdm9pZAotc3RvcmVfcmVsZWFzZV8zKHZvaWQgKiBibG9jaywgaW50IHBvb2wsIGNvbnN0IGNo
YXIgKiBmdW5jLCBpbnQgbGluZW51bWJlcikKK3N0b3JlX3JlbGVhc2VfMyh2b2lkICogYmxvY2ss
IHBvb2xkZXNjICogcHAsIGNvbnN0IGNoYXIgKiBmdW5jLCBpbnQgbGluZW51bWJlcikKIHsKIC8q
IEl0IHdpbGwgbmV2ZXIgYmUgdGhlIGZpcnN0IGJsb2NrLCBzbyBubyBuZWVkIHRvIGNoZWNrIHRo
YXQuICovCiAKLWZvciAoc3RvcmVibG9jayAqIGIgPSBjaGFpbmJhc2VbcG9vbF07IGI7IGIgPSBi
LT5uZXh0KQorZm9yIChzdG9yZWJsb2NrICogYiA9ICBwcC0+Y2hhaW5iYXNlOyBiOyBiID0gYi0+
bmV4dCkKICAgewogICBzdG9yZWJsb2NrICogYmIgPSBiLT5uZXh0OwogICBpZiAoYmIgJiYgQ1Mg
YmxvY2sgPT0gQ1MgYmIgKyBBTElHTkVEX1NJWkVPRl9TVE9SRUJMT0NLKQogICAgIHsKICAgICBp
bnQgc2l6ID0gYmItPmxlbmd0aCArIEFMSUdORURfU0laRU9GX1NUT1JFQkxPQ0s7CiAgICAgYi0+
bmV4dCA9IGJiLT5uZXh0OwotICAgIG5ieXRlc1twb29sXSAtPSBzaXo7CisgICAgcHAtPm5ieXRl
cyAtPSBzaXo7CiAgICAgcG9vbF9tYWxsb2MgLT0gc2l6OwotICAgIG5ibG9ja3NbcG9vbF0tLTsK
KyAgICBwcC0+bmJsb2Nrcy0tOwogCiAgICAgLyogQ3V0IG91dCB0aGUgZGVidWdnaW5nIHN0dWZm
IGZvciB1dGlsaXRpZXMsIGJ1dCBzdG9wIHBpY2t5IGNvbXBpbGVycwogICAgIGZyb20gZ2l2aW5n
IHdhcm5pbmdzLiAqLwogCi0jaWZkZWYgQ09NUElMRV9VVElMSVRZCi0gICAgZnVuYyA9IGZ1bmM7
Ci0gICAgbGluZW51bWJlciA9IGxpbmVudW1iZXI7Ci0jZWxzZQorI2lmbmRlZiBDT01QSUxFX1VU
SUxJVFkKICAgICBERUJVRyhEX21lbW9yeSkKICAgICAgIGRlYnVnX3ByaW50ZigiLVJlbGVhc2Ug
JTZwICUtMjBzICU0ZCAlZFxuIiwgKHZvaWQgKiliYiwgZnVuYywKIAlsaW5lbnVtYmVyLCBwb29s
X21hbGxvYyk7CkBAIC03MTEsNyArMTA3MSw3IEBACiAgICAgICBtZW1zZXQoYmIsIDB4RjAsIGJi
LT5sZW5ndGgrQUxJR05FRF9TSVpFT0ZfU1RPUkVCTE9DSyk7CiAjZW5kaWYgIC8qIENPTVBJTEVf
VVRJTElUWSAqLwogCi0gICAgZnJlZShiYik7CisgICAgaW50ZXJuYWxfc3RvcmVfZnJlZShiYiwg
ZnVuYywgbGluZW51bWJlcik7CiAgICAgcmV0dXJuOwogICAgIH0KICAgfQpAQCAtNzM1LDM1ICsx
MDk1LDMwIEBACiBoYXMgYmVlbiBhbGxvY2F0ZWQgc2luY2UuIElmIHNvLCByZWxlYXNlcyB0aGF0
IGJsb2NrLgogCiBBcmd1bWVudHM6Ci0gIGJsb2NrCi0gIG5ld3NpemUKLSAgbGVuCisgIG9sZGJs
b2NrCisgIG5ld3NpemUJcmVxdWVzdGVkIHNpemUKKyAgbGVuCQljdXJyZW50IHNpemUKIAogUmV0
dXJuczoJbmV3IGxvY2F0aW9uIG9mIGRhdGEKICovCiAKIHZvaWQgKgotc3RvcmVfbmV3YmxvY2tf
Myh2b2lkICogYmxvY2ssIEJPT0wgdGFpbnRlZCwgaW50IG5ld3NpemUsIGludCBsZW4sCitzdG9y
ZV9uZXdibG9ja18zKHZvaWQgKiBvbGRibG9jaywgaW50IG5ld3NpemUsIGludCBsZW4sCiAgIGNv
bnN0IGNoYXIgKiBmdW5jLCBpbnQgbGluZW51bWJlcikKIHsKLWludCBwb29sID0gdGFpbnRlZCA/
IHN0b3JlX3Bvb2wgKyBQT09MX1RBSU5UX0JBU0UgOiBzdG9yZV9wb29sOwotQk9PTCByZWxlYXNl
X29rID0gIXRhaW50ZWQgJiYgc3RvcmVfbGFzdF9nZXRbcG9vbF0gPT0gYmxvY2s7Ci11c2NoYXIg
KiBuZXd0ZXh0OwotCi0jaWYgIWRlZmluZWQoTUFDUk9fUFJFREVGKSAmJiAhZGVmaW5lZChDT01Q
SUxFX1VUSUxJVFkpCi1pZiAoaXNfdGFpbnRlZChibG9jaykgIT0gdGFpbnRlZCkKLSAgZGllX3Rh
aW50ZWQoVVMic3RvcmVfbmV3YmxvY2siLCBDVVMgZnVuYywgbGluZW51bWJlcik7Ci0jZW5kaWYK
K3Bvb2xkZXNjICogcHAgPSBwb29sX2Zvcl9wb2ludGVyKG9sZGJsb2NrLCBmdW5jLCBsaW5lbnVt
YmVyKTsKK0JPT0wgcmVsZWFzZV9vayA9ICFpc190YWludGVkKG9sZGJsb2NrKSAmJiBwcC0+c3Rv
cmVfbGFzdF9nZXQgPT0gb2xkYmxvY2s7CQkvKlhYWCB3aHkgdGFpbnRlZCBub3QgaGFuZGxlZD8g
Ki8KK3VzY2hhciAqIG5ld2Jsb2NrOwogCiBpZiAobGVuIDwgMCB8fCBsZW4gPiBuZXdzaXplKQog
ICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDX0RJRSwKICAgICAgICAgICAgICJiYWQg
bWVtb3J5IGV4dGVuc2lvbiByZXF1ZXN0ZWQgKCVkIC0+ICVkIGJ5dGVzKSBhdCAlcyAlZCIsCiAg
ICAgICAgICAgICBsZW4sIG5ld3NpemUsIGZ1bmMsIGxpbmVudW1iZXIpOwogCi1uZXd0ZXh0ID0g
c3RvcmVfZ2V0KG5ld3NpemUsIHRhaW50ZWQpOwotbWVtY3B5KG5ld3RleHQsIGJsb2NrLCBsZW4p
OwotaWYgKHJlbGVhc2Vfb2spIHN0b3JlX3JlbGVhc2VfMyhibG9jaywgcG9vbCwgZnVuYywgbGlu
ZW51bWJlcik7Ci1yZXR1cm4gKHZvaWQgKiluZXd0ZXh0OworbmV3YmxvY2sgPSBzdG9yZV9nZXQo
bmV3c2l6ZSwgb2xkYmxvY2spOworbWVtY3B5KG5ld2Jsb2NrLCBvbGRibG9jaywgbGVuKTsKK2lm
IChyZWxlYXNlX29rKSBzdG9yZV9yZWxlYXNlXzMob2xkYmxvY2ssIHBwLCBmdW5jLCBsaW5lbnVt
YmVyKTsKK3JldHVybiAodm9pZCAqKW5ld2Jsb2NrOwogfQogCiAKQEAgLTc4NiwzNyArMTE0MSw0
MyBAQAogKi8KIAogc3RhdGljIHZvaWQgKgotaW50ZXJuYWxfc3RvcmVfbWFsbG9jKGludCBzaXpl
LCBjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZSkKK2ludGVybmFsX3N0b3JlX21hbGxvYyhzaXpl
X3Qgc2l6ZSwgY29uc3QgY2hhciAqZnVuYywgaW50IGxpbmUpCiB7CiB2b2lkICogeWllbGQ7CiAK
LWlmIChzaXplIDwgMCB8fCBzaXplID49IElOVF9NQVgvMikKKy8qIENoZWNrIHNwZWNpZmljYWxs
eSBmb3IgYSBwb3NzaWJseSByZXN1bHQgb2YgY29udmVyc2lvbiBmcm9tCithIG5lZ2F0aXZlIGlu
dCwgdG8gdGhlICh1bnNpZ25lZCwgd2lkZXIpIHNpemVfdCAqLworCitpZiAoc2l6ZSA+PSBJTlRf
TUFYLzIpCiAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLAotICAgICAgICAg
ICAgImJhZCBtZW1vcnkgYWxsb2NhdGlvbiByZXF1ZXN0ZWQgKCVkIGJ5dGVzKSBhdCAlcyAlZCIs
Ci0gICAgICAgICAgICBzaXplLCBmdW5jLCBsaW5lKTsKKyAgICAiYmFkIGludGVybmFsX3N0b3Jl
X21hbGxvYyByZXF1ZXN0ICgiIFNJWkVfVF9GTVQgIiBieXRlcykgZnJvbSAlcyAlZCIsCisgICAg
c2l6ZSwgZnVuYywgbGluZSk7CiAKK3NpemUgKz0gc2l6ZW9mKHNpemVfdCk7CS8qIHNwYWNlIHRv
IHN0b3JlIHRoZSBzaXplLCB1c2VkIHVuZGVyIGRlYnVnICovCiBpZiAoc2l6ZSA8IDE2KSBzaXpl
ID0gMTY7CiAKLWlmICghKHlpZWxkID0gbWFsbG9jKChzaXplX3Qpc2l6ZSkpKQotICBsb2dfd3Jp
dGUoMCwgTE9HX01BSU58TE9HX1BBTklDX0RJRSwgImZhaWxlZCB0byBtYWxsb2MgJWQgYnl0ZXMg
b2YgbWVtb3J5OiAiCitpZiAoISh5aWVsZCA9IG1hbGxvYyhzaXplKSkpCisgIGxvZ193cml0ZSgw
LCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLCAiZmFpbGVkIHRvIG1hbGxvYyAiIFNJWkVfVF9GTVQg
IiBieXRlcyBvZiBtZW1vcnk6ICIKICAgICAiY2FsbGVkIGZyb20gbGluZSAlZCBpbiAlcyIsIHNp
emUsIGxpbmUsIGZ1bmMpOwogCisjaWZuZGVmIENPTVBJTEVfVVRJTElUWQorREVCVUcoRF9hbnkp
ICooc2l6ZV90ICopeWllbGQgPSBzaXplOworI2VuZGlmCit5aWVsZCA9IFVTIHlpZWxkICsgc2l6
ZW9mKHNpemVfdCk7CisKIGlmICgobm9ucG9vbF9tYWxsb2MgKz0gc2l6ZSkgPiBtYXhfbm9ucG9v
bF9tYWxsb2MpCiAgIG1heF9ub25wb29sX21hbGxvYyA9IG5vbnBvb2xfbWFsbG9jOwogCiAvKiBD
dXQgb3V0IHRoZSBkZWJ1Z2dpbmcgc3R1ZmYgZm9yIHV0aWxpdGllcywgYnV0IHN0b3AgcGlja3kg
Y29tcGlsZXJzIGZyb20KIGdpdmluZyB3YXJuaW5ncy4gKi8KIAotI2lmZGVmIENPTVBJTEVfVVRJ
TElUWQotZnVuYyA9IGZ1bmM7IGxpbmUgPSBsaW5lOwotI2Vsc2UKLQorI2lmbmRlZiBDT01QSUxF
X1VUSUxJVFkKIC8qIElmIHJ1bm5pbmcgaW4gdGVzdCBoYXJuZXNzLCBzcGVuZCB0aW1lIG1ha2lu
ZyBzdXJlIGFsbCB0aGUgbmV3IHN0b3JlCiBpcyBub3QgZmlsbGVkIHdpdGggemVyb3Mgc28gYXMg
dG8gY2F0Y2ggcHJvYmxlbXMuICovCiAKIGlmIChmLnJ1bm5pbmdfaW5fdGVzdF9oYXJuZXNzKQot
ICBtZW1zZXQoeWllbGQsIDB4RjAsIChzaXplX3Qpc2l6ZSk7Ci1ERUJVRyhEX21lbW9yeSkgZGVi
dWdfcHJpbnRmKCItLU1hbGxvYyAlNnAgJTVkIGJ5dGVzXHQlLTE0cyAlNGRcdHBvb2wgJTVkICBu
b25wb29sICU1ZFxuIiwKKyAgbWVtc2V0KHlpZWxkLCAweEYwLCBzaXplIC0gc2l6ZW9mKHNpemVf
dCkpOworREVCVUcoRF9tZW1vcnkpIGRlYnVnX3ByaW50ZigiLS1NYWxsb2MgJTZwICU1bHUgYnl0
ZXNcdCUtMjBzICU0ZFx0cG9vbCAlNWQgIG5vbnBvb2wgJTVkXG4iLAogICB5aWVsZCwgc2l6ZSwg
ZnVuYywgbGluZSwgcG9vbF9tYWxsb2MsIG5vbnBvb2xfbWFsbG9jKTsKICNlbmRpZiAgLyogQ09N
UElMRV9VVElMSVRZICovCiAKQEAgLTgyNCw3ICsxMTg1LDcgQEAKIH0KIAogdm9pZCAqCi1zdG9y
ZV9tYWxsb2NfMyhpbnQgc2l6ZSwgY29uc3QgY2hhciAqZnVuYywgaW50IGxpbmVudW1iZXIpCitz
dG9yZV9tYWxsb2NfMyhzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZnVuYywgaW50IGxpbmVudW1i
ZXIpCiB7CiBpZiAobl9ub25wb29sX2Jsb2NrcysrID4gbWF4X25vbnBvb2xfYmxvY2tzKQogICBt
YXhfbm9ucG9vbF9ibG9ja3MgPSBuX25vbnBvb2xfYmxvY2tzOwpAQCAtODQ5LDE0ICsxMjEwLDEz
IEBACiBzdGF0aWMgdm9pZAogaW50ZXJuYWxfc3RvcmVfZnJlZSh2b2lkICogYmxvY2ssIGNvbnN0
IGNoYXIgKiBmdW5jLCBpbnQgbGluZW51bWJlcikKIHsKLSNpZmRlZiBDT01QSUxFX1VUSUxJVFkK
LWZ1bmMgPSBmdW5jOwotbGluZW51bWJlciA9IGxpbmVudW1iZXI7Ci0jZWxzZQotREVCVUcoRF9t
ZW1vcnkpCi0gIGRlYnVnX3ByaW50ZigiLS0tLUZyZWUgJTZwICUtMjBzICU0ZFxuIiwgYmxvY2ss
IGZ1bmMsIGxpbmVudW1iZXIpOwotI2VuZGlmICAvKiBDT01QSUxFX1VUSUxJVFkgKi8KLWZyZWUo
YmxvY2spOwordXNjaGFyICogcCA9IFVTIGJsb2NrIC0gc2l6ZW9mKHNpemVfdCk7CisjaWZuZGVm
IENPTVBJTEVfVVRJTElUWQorREVCVUcoRF9hbnkpIG5vbnBvb2xfbWFsbG9jIC09ICooc2l6ZV90
ICopcDsKK0RFQlVHKERfbWVtb3J5KSBkZWJ1Z19wcmludGYoIi0tLS1GcmVlICU2cCAlNWxkIGJ5
dGVzXHQlLTIwcyAlNGRcbiIsCisJCSAgICBibG9jaywgKihzaXplX3QgKilwLCBmdW5jLCBsaW5l
bnVtYmVyKTsKKyNlbmRpZgorZnJlZShwKTsKIH0KIAogdm9pZApAQCAtODc0LDE0ICsxMjM0LDY4
IEBACiAjaWZuZGVmIENPTVBJTEVfVVRJTElUWQogREVCVUcoRF9tZW1vcnkpCiAgeworIGludCBp
OwogIGRlYnVnX3ByaW50ZigiLS0tLUV4aXQgbm9ucG9vbCBtYXg6ICUzZCBrQiBpbiAlZCBibG9j
a3NcbiIsCiAgIChtYXhfbm9ucG9vbF9tYWxsb2MrMTAyMykvMTAyNCwgbWF4X25vbnBvb2xfYmxv
Y2tzKTsKICBkZWJ1Z19wcmludGYoIi0tLS1FeGl0IG5wb29scyAgbWF4OiAlM2Qga0JcbiIsIG1h
eF9wb29sX21hbGxvYy8xMDI0KTsKLSBmb3IgKGludCBpID0gMDsgaSA8IE5QT09MUzsgaSsrKQot
ICBkZWJ1Z19wcmludGYoIi0tLS1FeGl0ICBwb29sICVkIG1heDogJTNkIGtCIGluICVkIGJsb2Nr
c1x0JXMgJXNcbiIsCi0gICAgaSwgbWF4Ynl0ZXNbaV0vMTAyNCwgbWF4YmxvY2tzW2ldLCBwb29s
Y2xhc3NbaV0sIHBvb2x1c2VbaV0pOworCisgZm9yIChpID0gMDsgaSA8IE5fUEFJUkVEX1BPT0xT
OyBpKyspCisgICB7CisgICBwb29sZGVzYyAqIHBwID0gcGFpcmVkX3Bvb2xzICsgaTsKKyAgIGRl
YnVnX3ByaW50ZigiLS0tLUV4aXQgIHBvb2wgJTJkIG1heDogJTNkIGtCIGluICVkIGJsb2NrcyBh
dCBvcmRlciAldVx0JXMgJXNcbiIsCisgICAgaSwgKHBwLT5tYXhieXRlcysxMDIzKS8xMDI0LCBw
cC0+bWF4YmxvY2tzLCBwcC0+bWF4b3JkZXIsCisgICAgcG9vbGNsYXNzW2ldLCBwb29sdXNlW2ld
KTsKKyAgIH0KKyBpID0gMDsKKyBmb3IgKHF1b3RlZF9wb29sZGVzYyAqIHFwID0gcXVvdGVkX3Bv
b2xzOyBxcDsgaSsrLCBxcCA9IHFwLT5uZXh0KQorICAgeworICAgcG9vbGRlc2MgKiBwcCA9ICZx
cC0+cG9vbDsKKyAgIGRlYnVnX3ByaW50ZigiLS0tLUV4aXQgIHBvb2wgUSVkIG1heDogJTNkIGtC
IGluICVkIGJsb2NrcyBhdCBvcmRlciAldVx0dGFpbnRlZCBxdW90ZWQ6JXNcbiIsCisgICAgaSwg
KHBwLT5tYXhieXRlcysxMDIzKS8xMDI0LCBwcC0+bWF4YmxvY2tzLCBwcC0+bWF4b3JkZXIsIGxv
b2t1cF9saXN0W3FwLT5xdW90ZXJdLT5uYW1lKTsKKyAgIH0KICB9CiAjZW5kaWYKIH0KIAorCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLworLyogUGVyLW1lc3NhZ2UgcG9vbCBtYW5hZ2VtZW50ICov
CisKK3N0YXRpYyBybWFyayAgIG1lc3NhZ2VfcmVzZXRfcG9pbnQgICAgPSBOVUxMOworCit2b2lk
CittZXNzYWdlX3N0YXJ0KHZvaWQpCit7CitpbnQgb2xkcG9vbCA9IHN0b3JlX3Bvb2w7CitzdG9y
ZV9wb29sID0gUE9PTF9NRVNTQUdFOworaWYgKCFtZXNzYWdlX3Jlc2V0X3BvaW50KSBtZXNzYWdl
X3Jlc2V0X3BvaW50ID0gc3RvcmVfbWFyaygpOworc3RvcmVfcG9vbCA9IG9sZHBvb2w7Cit9CisK
K3ZvaWQKK21lc3NhZ2VfdGlkeXVwKHZvaWQpCit7CitpbnQgb2xkcG9vbDsKK2lmICghbWVzc2Fn
ZV9yZXNldF9wb2ludCkgcmV0dXJuOworb2xkcG9vbCA9IHN0b3JlX3Bvb2w7CitzdG9yZV9wb29s
ID0gUE9PTF9NRVNTQUdFOworbWVzc2FnZV9yZXNldF9wb2ludCA9IHN0b3JlX3Jlc2V0KG1lc3Nh
Z2VfcmVzZXRfcG9pbnQpOworc3RvcmVfcG9vbCA9IG9sZHBvb2w7Cit9CisKKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvKiBEZWJ1ZyBhbmFseXNpcyBvZiBhZGRyZXNzICovCisKKyNpZm5kZWYg
Q09NUElMRV9VVElMSVRZCit2b2lkCitkZWJ1Z19wcmludF90YWludChjb25zdCB2b2lkICogcCkK
K3sKK2ludCBxID0gcXVvdGVyX2Zvcl9hZGRyZXNzKHApOworaWYgKCFpc190YWludGVkKHApKSBy
ZXR1cm47CitkZWJ1Z19wcmludGYoIih0YWludGVkIik7CitpZiAoaXNfcmVhbF9xdW90ZXIocSkp
IGRlYnVnX3ByaW50ZigiLCBxdW90ZWQ6JXMiLCBsb29rdXBfbGlzdFtxXS0+bmFtZSk7CitkZWJ1
Z19wcmludGYoIilcbiIpOworfQorI2VuZGlmCisKIC8qIEVuZCBvZiBzdG9yZS5jICovCmRpZmYg
LXVyIGV4aW0ub3JpZy9zcmMvc3RvcmUuaCBleGltL3NyYy9zdG9yZS5oCi0tLSBleGltLm9yaWcv
c3JjL3N0b3JlLmgJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0v
c3JjL3N0b3JlLmgJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCAr
Miw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAg
KgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAor
LyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyog
Q29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAwOSAqLwotLyog
Q29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZp
bGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAv
KiBIZWFkZXIgZm9yIEV4aW0ncyBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgKi8KQEAgLTEz
LDE1ICsxMywyOCBAQAogCiAvKiBEZWZpbmUgc3ltYm9scyBmb3IgaWRlbnRpZnlpbmcgdGhlIHN0
b3JlIHBvb2xzLiAqLwogCi1lbnVtIHsgUE9PTF9NQUlOLCAgICAgICBQT09MX1BFUk0sICAgICAg
IFBPT0xfU0VBUkNILAorZW51bSB7IFBPT0xfTUFJTiwKKyAgICAgICBQT09MX1BFUk0sCisgICAg
ICAgUE9PTF9DT05GSUcsCisgICAgICAgUE9PTF9TRUFSQ0gsCisgICAgICAgUE9PTF9NRVNTQUdF
LAorCiAgICAgICAgUE9PTF9UQUlOVF9CQVNFLAotICAgICAgIFBPT0xfVEFJTlRfTUFJTiA9IFBP
T0xfVEFJTlRfQkFTRSwgUE9PTF9UQUlOVF9QRVJNLCBQT09MX1RBSU5UX1NFQVJDSCB9OworCisg
ICAgICAgUE9PTF9UQUlOVF9NQUlOID0gUE9PTF9UQUlOVF9CQVNFLAorICAgICAgIFBPT0xfVEFJ
TlRfUEVSTSwKKyAgICAgICBQT09MX1RBSU5UX0NPTkZJRywKKyAgICAgICBQT09MX1RBSU5UX1NF
QVJDSCwKKyAgICAgICBQT09MX1RBSU5UX01FU1NBR0UsCisKKyAgICAgICBOX1BBSVJFRF9QT09M
UworfTsKIAogLyogVGhpcyB2YXJpYWJsZSAodGhlIG9uZSBmb3IgdGhlIGN1cnJlbnQgcG9vbCkg
aXMgc2V0IGJ5IHN0b3JlX2dldCgpIHRvIGl0cwogeWllbGQsIGFuZCBieSBzdG9yZV9yZXNldCgp
IHRvIE5VTEwuIFRoaXMgYWxsb3dzIHN0cmluZ19jYXQoKSB0byBvcHRpbWl6ZSBpdHMKIHN0b3Jl
IGhhbmRsaW5nLiAqLwogCi1leHRlcm4gdm9pZCAqc3RvcmVfbGFzdF9nZXRbNl07CitleHRlcm4g
dm9pZCAqIHN0b3JlX2xhc3RfZ2V0W107CiAKIC8qIFRoaXMgdmFyaWFibGUgY29udGFpbnMgdGhl
IGN1cnJlbnQgc3RvcmUgcG9vbCBudW1iZXIuICovCiAKQEAgLTMwLDM1ICs0Myw0NiBAQAogLyog
TWFjcm9zIGZvciBjYWxsaW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcyB3aXRoCiB0
cmFjaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcuICovCiAKLSNkZWZpbmUgc3RvcmVfZXh0
ZW5kKGFkZHIsIHRhaW50ZWQsIG9sZCwgbmV3KSBcCi0gIHN0b3JlX2V4dGVuZF8zKGFkZHIsIHRh
aW50ZWQsIG9sZCwgbmV3LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKQorI2RlZmluZSBzdG9yZV9l
eHRlbmQoYWRkciwgb2xkLCBuZXcpIFwKKyAgc3RvcmVfZXh0ZW5kXzMoYWRkciwgb2xkLCBuZXcs
IF9fRlVOQ1RJT05fXywgX19MSU5FX18pCiAKICNkZWZpbmUgc3RvcmVfZnJlZShhZGRyKSBcCiAJ
c3RvcmVfZnJlZV8zKGFkZHIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCiAvKiBzdG9yZV9nZXQg
JiBzdG9yZV9nZXRfcGVybSBhcmUgaW4gbG9jYWxfc2Nhbi5oICovCisjZGVmaW5lIHN0b3JlX2dl
dF9xdW90ZWQoc2l6ZSwgcHJvdG9fbWVtLCBxdW90ZXIpIFwKKwlzdG9yZV9nZXRfcXVvdGVkXzMo
KHNpemUpLCAocHJvdG9fbWVtKSwgKHF1b3RlciksIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCiAj
ZGVmaW5lIHN0b3JlX21hbGxvYyhzaXplKSBcCiAJc3RvcmVfbWFsbG9jXzMoc2l6ZSwgX19GVU5D
VElPTl9fLCBfX0xJTkVfXykKICNkZWZpbmUgc3RvcmVfbWFyayh2b2lkKSBcCiAJc3RvcmVfbWFy
a18zKF9fRlVOQ1RJT05fXywgX19MSU5FX18pCi0jZGVmaW5lIHN0b3JlX25ld2Jsb2NrKGFkZHIs
IHRhaW50ZWQsIG5ld3NpemUsIGRhdGFsZW4pIFwKLQlzdG9yZV9uZXdibG9ja18zKGFkZHIsIHRh
aW50ZWQsIG5ld3NpemUsIGRhdGFsZW4sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCisjZGVmaW5l
IHN0b3JlX25ld2Jsb2NrKG9sZGJsb2NrLCBuZXdzaXplLCBkYXRhbGVuKSBcCisJc3RvcmVfbmV3
YmxvY2tfMyhvbGRibG9jaywgbmV3c2l6ZSwgZGF0YWxlbiwgX19GVU5DVElPTl9fLCBfX0xJTkVf
XykKICNkZWZpbmUgc3RvcmVfcmVsZWFzZV9hYm92ZShhZGRyKSBcCiAJc3RvcmVfcmVsZWFzZV9h
Ym92ZV8zKGFkZHIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCiAjZGVmaW5lIHN0b3JlX3Jlc2V0
KG1hcmspIFwKLQlzdG9yZV9yZXNldF8zKG1hcmssIHN0b3JlX3Bvb2wsIF9fRlVOQ1RJT05fXywg
X19MSU5FX18pCisJc3RvcmVfcmVzZXRfMyhtYXJrLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKQog
CiAKIC8qIFRoZSByZWFsIGZ1bmN0aW9ucyAqLwogdHlwZWRlZiB2b2lkICoqIHJtYXJrOwogCi1l
eHRlcm4gQk9PTCAgICBzdG9yZV9leHRlbmRfMyh2b2lkICosIEJPT0wsIGludCwgaW50LCBjb25z
dCBjaGFyICosIGludCk7CitleHRlcm4gQk9PTCAgICBzdG9yZV9leHRlbmRfMyh2b2lkICosIGlu
dCwgaW50LCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gdm9pZCAgICBzdG9yZV9mcmVlXzMo
dm9pZCAqLCBjb25zdCBjaGFyICosIGludCk7CiAvKiBzdG9yZV9nZXRfMyAmIHN0b3JlX2dldF9w
ZXJtXzMgYXJlIGluIGxvY2FsX3NjYW4uaCAqLwotZXh0ZXJuIHZvaWQgICAqc3RvcmVfbWFsbG9j
XzMoaW50LCBjb25zdCBjaGFyICosIGludCkJCUFMTE9DIEFMTE9DX1NJWkUoMSkgV0FSTl9VTlVT
RURfUkVTVUxUOworZXh0ZXJuIHZvaWQgKiAgc3RvcmVfZ2V0X3F1b3RlZF8zKGludCwgY29uc3Qg
dm9pZCAqLCB1bnNpZ25lZCwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgKiAgc3Rv
cmVfbWFsbG9jXzMoc2l6ZV90LCBjb25zdCBjaGFyICosIGludCkJCUFMTE9DIEFMTE9DX1NJWkUo
MSkgV0FSTl9VTlVTRURfUkVTVUxUOwogZXh0ZXJuIHJtYXJrICAgc3RvcmVfbWFya18zKGNvbnN0
IGNoYXIgKiwgaW50KTsKLWV4dGVybiB2b2lkICAgKnN0b3JlX25ld2Jsb2NrXzModm9pZCAqLCBC
T09MLCBpbnQsIGludCwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgKiAgc3RvcmVf
bmV3YmxvY2tfMyh2b2lkICosIGludCwgaW50LCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4g
dm9pZCAgICBzdG9yZV9yZWxlYXNlX2Fib3ZlXzModm9pZCAqLCBjb25zdCBjaGFyICosIGludCk7
Ci1leHRlcm4gcm1hcmsgICBzdG9yZV9yZXNldF8zKHJtYXJrLCBpbnQsIGNvbnN0IGNoYXIgKiwg
aW50KTsKK2V4dGVybiBybWFyayAgIHN0b3JlX3Jlc2V0XzMocm1hcmssIGNvbnN0IGNoYXIgKiwg
aW50KTsKKworI2RlZmluZSBHRVRfVU5UQUlOVEVECShjb25zdCB2b2lkICopMAorI2RlZmluZSBH
RVRfVEFJTlRFRAkoY29uc3Qgdm9pZCAqKTEKKworZXh0ZXJuIGludAlxdW90ZXJfZm9yX2FkZHJl
c3MoY29uc3Qgdm9pZCAqKTsKK2V4dGVybiBCT09MCWlzX3F1b3RlZF9saWtlKGNvbnN0IHZvaWQg
KiwgdW5zaWduZWQpOworZXh0ZXJuIEJPT0wJaXNfcmVhbF9xdW90ZXIoaW50KTsKK2V4dGVybiB2
b2lkCWRlYnVnX3ByaW50X3RhaW50KGNvbnN0IHZvaWQgKiBwKTsKIAogI2VuZGlmICAvKiBTVE9S
RV9IICovCiAKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy9zdHJpbmcuYyBleGltL3NyYy9zdHJpbmcu
YwotLS0gZXhpbS5vcmlnL3NyYy9zdHJpbmcuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAw
MCArMDMwMAorKysgZXhpbS9zcmMvc3RyaW5nLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAw
MDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0
cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAy
MDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAx
OTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIw
ICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlz
dHJpYnV0aW9uLiAqLwogCiAvKiBNaXNjZWxsYW5lb3VzIHN0cmluZy1oYW5kbGluZyBmdW5jdGlv
bnMuIFNvbWUgYXJlIG5vdCByZXF1aXJlZCBmb3IKQEAgLTI5OCw3ICsyOTgsNyBAQAogY29uc3Qg
dXNjaGFyICp0ID0gczsKIHVzY2hhciAqc3MsICp0dDsKIAotd2hpbGUgKCp0ICE9IDApCit3aGls
ZSAoKnQpCiAgIHsKICAgaW50IGMgPSAqdCsrOwogICBpZiAoICAhbWFjX2lzcHJpbnQoYykKQEAg
LTMxMyw3ICszMTMsNyBAQAogLyogR2V0IGEgbmV3IGJsb2NrIG9mIHN0b3JlIGd1YXJhbnRlZWQg
YmlnIGVub3VnaCB0byBob2xkIHRoZQogZXhwYW5kZWQgc3RyaW5nLiAqLwogCi10dCA9IHNzID0g
c3RvcmVfZ2V0KGxlbmd0aCArIG5vbnByaW50Y291bnQgKiAzICsgMSwgaXNfdGFpbnRlZChzKSk7
Cit0dCA9IHNzID0gc3RvcmVfZ2V0KGxlbmd0aCArIG5vbnByaW50Y291bnQgKiAzICsgMSwgcyk7
CiAKIC8qIENvcHkgZXZlcnl0aGluZywgZXNjYXBpbmcgbm9uIHByaW50ZXJzLiAqLwogCkBAIC0z
NzEsNyArMzcxLDcgQEAKIGlmICghcCkgcmV0dXJuIHM7CiAKIGxlbiA9IFVzdHJsZW4ocykgKyAx
Owotc3MgPSBzdG9yZV9nZXQobGVuLCBpc190YWludGVkKHMpKTsKK3NzID0gc3RvcmVfZ2V0KGxl
biwgcyk7CiAKIHEgPSBzczsKIG9mZiA9IHAgLSBzOwpAQCAtNDI4LDIyICs0MjgsMTggQEAKICov
CiAKIHVzY2hhciAqCi1zdHJpbmdfY29weV9mdW5jdGlvbihjb25zdCB1c2NoYXIgKnMpCitzdHJp
bmdfY29weV9mdW5jdGlvbihjb25zdCB1c2NoYXIgKiBzKQogewotcmV0dXJuIHN0cmluZ19jb3B5
X3RhaW50KHMsIGlzX3RhaW50ZWQocykpOworcmV0dXJuIHN0cmluZ19jb3B5X3RhaW50KHMsIHMp
OwogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBtZW1jcHkoKSBpcyBmYXN0ZXIg
dGhhbiBzdHJjcHkoKS4KLUFzIGFib3ZlLCBidXQgZXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZSBy
ZXN1bHQgdGFpbnQgc3RhdHVzCisvKiBBcyBhYm92ZSwgYnV0IGV4cGxpY2l0bHkgc3BlY2lmeWlu
ZyB0aGUgcmVzdWx0IHRhaW50IHN0YXR1cwogKi8KIAogdXNjaGFyICoKLXN0cmluZ19jb3B5X3Rh
aW50X2Z1bmN0aW9uKGNvbnN0IHVzY2hhciAqIHMsIEJPT0wgdGFpbnRlZCkKK3N0cmluZ19jb3B5
X3RhaW50X2Z1bmN0aW9uKGNvbnN0IHVzY2hhciAqIHMsIGNvbnN0IHZvaWQgKiBwcm90b19tZW0p
CiB7Ci1pbnQgbGVuID0gVXN0cmxlbihzKSArIDE7Ci11c2NoYXIgKnNzID0gc3RvcmVfZ2V0KGxl
biwgdGFpbnRlZCk7Ci1tZW1jcHkoc3MsIHMsIGxlbik7Ci1yZXR1cm4gc3M7CityZXR1cm4gc3Ry
aW5nX2NvcHlfdGFpbnQocywgcHJvdG9fbWVtKTsKIH0KIAogCkBAIC00NjMsMTIgKzQ1OSw5IEBA
CiAqLwogCiB1c2NoYXIgKgotc3RyaW5nX2NvcHluX2Z1bmN0aW9uKGNvbnN0IHVzY2hhciAqcywg
aW50IG4pCitzdHJpbmdfY29weW5fZnVuY3Rpb24oY29uc3QgdXNjaGFyICogcywgaW50IG4pCiB7
Ci11c2NoYXIgKnNzID0gc3RvcmVfZ2V0KG4gKyAxLCBpc190YWludGVkKHMpKTsKLVVzdHJuY3B5
KHNzLCBzLCBuKTsKLXNzW25dID0gMDsKLXJldHVybiBzczsKK3JldHVybiBzdHJpbmdfY29weW4o
cywgbik7CiB9CiAjZW5kaWYKIApAQCAtNDg0LDEwICs0NzcsMTAgQEAKICovCiAKIHVzY2hhciAq
Ci1zdHJpbmdfY29weV9tYWxsb2MoY29uc3QgdXNjaGFyICpzKQorc3RyaW5nX2NvcHlfbWFsbG9j
KGNvbnN0IHVzY2hhciAqIHMpCiB7CiBpbnQgbGVuID0gVXN0cmxlbihzKSArIDE7Ci11c2NoYXIg
KnNzID0gc3RvcmVfbWFsbG9jKGxlbik7Cit1c2NoYXIgKiBzcyA9IHN0b3JlX21hbGxvYyhsZW4p
OwogbWVtY3B5KHNzLCBzLCBsZW4pOwogcmV0dXJuIHNzOwogfQpAQCAtNTA2LDM3ICs0OTksMzcg
QEAKICovCiAKIHVzY2hhciAqCi1zdHJpbmdfc3BsaXRfbWVzc2FnZSh1c2NoYXIgKm1zZykKK3N0
cmluZ19zcGxpdF9tZXNzYWdlKHVzY2hhciAqIG1zZykKIHsKIHVzY2hhciAqcywgKnNzOwogCi1p
ZiAobXNnID09IE5VTEwgfHwgVXN0cmxlbihtc2cpIDw9IDc1KSByZXR1cm4gbXNnOworaWYgKCFt
c2cgfHwgVXN0cmxlbihtc2cpIDw9IDc1KSByZXR1cm4gbXNnOwogcyA9IHNzID0gbXNnID0gc3Ry
aW5nX2NvcHkobXNnKTsKIAogZm9yICg7OykKICAgewogICBpbnQgaSA9IDA7Ci0gIHdoaWxlIChp
IDwgNzUgJiYgKnNzICE9IDAgJiYgKnNzICE9ICdcbicpIHNzKyssIGkrKzsKLSAgaWYgKCpzcyA9
PSAwKSBicmVhazsKKyAgd2hpbGUgKGkgPCA3NSAmJiAqc3MgJiYgKnNzICE9ICdcbicpIHNzKyss
IGkrKzsKKyAgaWYgKCEqc3MpIGJyZWFrOwogICBpZiAoKnNzID09ICdcbicpCiAgICAgcyA9ICsr
c3M7CiAgIGVsc2UKICAgICB7Ci0gICAgdXNjaGFyICp0ID0gc3MgKyAxOwotICAgIHVzY2hhciAq
dHQgPSBOVUxMOworICAgIHVzY2hhciAqIHQgPSBzcyArIDE7CisgICAgdXNjaGFyICogdHQgPSBO
VUxMOwogICAgIHdoaWxlICgtLXQgPiBzICsgMzUpCiAgICAgICB7CiAgICAgICBpZiAoKnQgPT0g
JyAnKQogICAgICAgICB7CiAgICAgICAgIGlmICh0Wy0xXSA9PSAnOicpIHsgdHQgPSB0OyBicmVh
azsgfQotICAgICAgICBpZiAodHQgPT0gTlVMTCkgdHQgPSB0OworICAgICAgICBpZiAoIXR0KSB0
dCA9IHQ7CiAgICAgICAgIH0KICAgICAgIH0KIAotICAgIGlmICh0dCA9PSBOVUxMKSAgICAgICAg
ICAvKiBDYW4ndCBzcGxpdCBiZWhpbmQgLSB0cnkgYWhlYWQgKi8KKyAgICBpZiAoIXR0KSAgICAg
ICAgICAvKiBDYW4ndCBzcGxpdCBiZWhpbmQgLSB0cnkgYWhlYWQgKi8KICAgICAgIHsKICAgICAg
IHQgPSBzcyArIDE7Ci0gICAgICB3aGlsZSAoKnQgIT0gMCkKKyAgICAgIHdoaWxlICgqdCkKICAg
ICAgICAgewogICAgICAgICBpZiAoKnQgPT0gJyAnIHx8ICp0ID09ICdcbicpCiAgICAgICAgICAg
eyB0dCA9IHQ7IGJyZWFrOyB9CkBAIC01NDQsNyArNTM3LDcgQEAKICAgICAgICAgfQogICAgICAg
fQogCi0gICAgaWYgKHR0ID09IE5VTEwpIGJyZWFrOyAgIC8qIENhbid0IGZpbmQgYW55d2hlcmUg
dG8gc3BsaXQgKi8KKyAgICBpZiAoIXR0KSBicmVhazsgICAvKiBDYW4ndCBmaW5kIGFueXdoZXJl
IHRvIHNwbGl0ICovCiAgICAgKnR0ID0gJ1xuJzsKICAgICBzID0gc3MgPSB0dCsxOwogICAgIH0K
QEAgLTU3MiwxMiArNTY1LDEyIEBACiAqLwogCiB1c2NoYXIgKgotc3RyaW5nX2NvcHlfZG5zZG9t
YWluKHVzY2hhciAqcykKK3N0cmluZ19jb3B5X2Ruc2RvbWFpbih1c2NoYXIgKiBzKQogewotdXNj
aGFyICp5aWVsZDsKLXVzY2hhciAqc3MgPSB5aWVsZCA9IHN0b3JlX2dldChVc3RybGVuKHMpICsg
MSwgaXNfdGFpbnRlZChzKSk7Cit1c2NoYXIgKiB5aWVsZDsKK3VzY2hhciAqIHNzID0geWllbGQg
PSBzdG9yZV9nZXQoVXN0cmxlbihzKSArIDEsIEdFVF9UQUlOVEVEKTsJLyogYWx3YXlzIHRyZWF0
IGFzIHRhaW50ZWQgKi8KIAotd2hpbGUgKCpzICE9IDApCit3aGlsZSAoKnMpCiAgIHsKICAgaWYg
KCpzICE9ICdcXCcpCiAgICAgKnNzKysgPSAqcysrOwpAQCAtNTg2LDcgKzU3OSw3IEBACiAgICAg
KnNzKysgPSAoc1sxXSAtICcwJykqMTAwICsgKHNbMl0gLSAnMCcpKjEwICsgc1szXSAtICcwJzsK
ICAgICBzICs9IDQ7CiAgICAgfQotICBlbHNlIGlmICgqKCsrcykgIT0gMCkKKyAgZWxzZSBpZiAo
KisrcykKICAgICAqc3MrKyA9ICpzKys7CiAgIH0KIApAQCAtNjExLDE1ICs2MDQsMTUgQEAKICov
CiAKIHVzY2hhciAqCi1zdHJpbmdfZGVxdW90ZShjb25zdCB1c2NoYXIgKipzcHRyKQorc3RyaW5n
X2RlcXVvdGUoY29uc3QgdXNjaGFyICoqIHNwdHIpCiB7Ci1jb25zdCB1c2NoYXIgKnMgPSAqc3B0
cjsKLXVzY2hhciAqdCwgKnlpZWxkOworY29uc3QgdXNjaGFyICogcyA9ICogc3B0cjsKK3VzY2hh
ciAqIHQsICogeWllbGQ7CiAKIC8qIEZpcnN0IGZpbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nICov
CiAKIGlmICgqcyAhPSAnXCInKQotICB3aGlsZSAoKnMgIT0gMCAmJiAhaXNzcGFjZSgqcykpIHMr
KzsKKyAgd2hpbGUgKCpzICYmICFpc3NwYWNlKCpzKSkgcysrOwogZWxzZQogICB7CiAgIHMrKzsK
QEAgLTYzMywxNyArNjI2LDE3IEBACiAKIC8qIEdldCBlbm91Z2ggc3RvcmUgdG8gY29weSBpbnRv
ICovCiAKLXQgPSB5aWVsZCA9IHN0b3JlX2dldChzIC0gKnNwdHIgKyAxLCBpc190YWludGVkKCpz
cHRyKSk7Cit0ID0geWllbGQgPSBzdG9yZV9nZXQocyAtICpzcHRyICsgMSwgKnNwdHIpOwogcyA9
ICpzcHRyOwogCiAvKiBEbyB0aGUgY29weSAqLwogCiBpZiAoKnMgIT0gJ1wiJykKLSAgd2hpbGUg
KCpzICE9IDAgJiYgIWlzc3BhY2UoKnMpKSAqdCsrID0gKnMrKzsKKyAgd2hpbGUgKCpzICYmICFp
c3NwYWNlKCpzKSkgKnQrKyA9ICpzKys7CiBlbHNlCiAgIHsKICAgcysrOwotICB3aGlsZSAoKnMg
IT0gMCAmJiAqcyAhPSAnXCInKQorICB3aGlsZSAoKnMgJiYgKnMgIT0gJ1wiJykKICAgICB7CiAg
ICAgKnQrKyA9ICpzID09ICdcXCcgPyBzdHJpbmdfaW50ZXJwcmV0X2VzY2FwZSgmcykgOiAqczsK
ICAgICBzKys7CkBAIC02NzEsMTMgKzY2NCwxNSBAQAogQXJndW1lbnRzOgogICBmb3JtYXQgICAg
YSBwcmludGYoKSBmb3JtYXQgLSBkZWxpYmVyYXRlbHkgY2hhciAqIHJhdGhlciB0aGFuIHVzY2hh
ciAqCiAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgd2lsbCBtb3N0IHVzdWFsbHkgYmUgYSBsaXRl
cmFsIHN0cmluZworICBmdW5jCSAgICBjYWxsZXIsIGZvciBkZWJ1ZworICBsaW5lCSAgICBjYWxs
ZXIsIGZvciBkZWJ1ZwogICAuLi4gICAgICAgYXJndW1lbnRzIGZvciBmb3JtYXQKIAogUmV0dXJu
czogICAgcG9pbnRlciB0byBmcmVzaCBwaWVjZSBvZiBzdG9yZSBjb250YWluaW5nIHNwcmludGYn
ZWQgc3RyaW5nCiAqLwogCiB1c2NoYXIgKgotc3RyaW5nX3NwcmludGZfdHJjKGNvbnN0IGNoYXIg
KmZvcm1hdCwgY29uc3QgdXNjaGFyICogZnVuYywgdW5zaWduZWQgbGluZSwgLi4uKQorc3RyaW5n
X3NwcmludGZfdHJjKGNvbnN0IGNoYXIgKiBmb3JtYXQsIGNvbnN0IHVzY2hhciAqIGZ1bmMsIHVu
c2lnbmVkIGxpbmUsIC4uLikKIHsKICNpZmRlZiBDT01QSUxFX1VUSUxJVFkKIHVzY2hhciBidWZm
ZXJbU1RSSU5HX1NQUklOVEZfQlVGRkVSX1NJWkVdOwpAQCAtNzI1LDcgKzcyMCw3IEBACiAqLwog
CiBpbnQKLXN0cm5jbXBpYyhjb25zdCB1c2NoYXIgKnMsIGNvbnN0IHVzY2hhciAqdCwgaW50IG4p
CitzdHJuY21waWMoY29uc3QgdXNjaGFyICogcywgY29uc3QgdXNjaGFyICogdCwgaW50IG4pCiB7
CiB3aGlsZSAobi0tKQogICB7CkBAIC03NDksOSArNzQ0LDkgQEAKICovCiAKIGludAotc3RyY21w
aWMoY29uc3QgdXNjaGFyICpzLCBjb25zdCB1c2NoYXIgKnQpCitzdHJjbXBpYyhjb25zdCB1c2No
YXIgKiBzLCBjb25zdCB1c2NoYXIgKiB0KQogewotd2hpbGUgKCpzICE9IDApCit3aGlsZSAoKnMp
CiAgIHsKICAgaW50IGMgPSB0b2xvd2VyKCpzKyspIC0gdG9sb3dlcigqdCsrKTsKICAgaWYgKGMg
IT0gMCkgcmV0dXJuIGM7CkBAIC03NzUsMTEgKzc3MCwxMSBAQAogUmV0dXJuczogICAgICAgICBw
b2ludGVyIHRvIHN1YnN0cmluZyBpbiBzdHJpbmcsIG9yIE5VTEwgaWYgbm90IGZvdW5kCiAqLwog
Ci11c2NoYXIgKgotc3Ryc3RyaWModXNjaGFyICpzLCB1c2NoYXIgKnQsIEJPT0wgc3BhY2VfZm9s
bG93cykKK2NvbnN0IHVzY2hhciAqCitzdHJzdHJpY19jKGNvbnN0IHVzY2hhciAqIHMsIGNvbnN0
IHVzY2hhciAqIHQsIEJPT0wgc3BhY2VfZm9sbG93cykKIHsKLXVzY2hhciAqcCA9IHQ7Ci11c2No
YXIgKnlpZWxkID0gTlVMTDsKK2NvbnN0IHVzY2hhciAqIHAgPSB0OworY29uc3QgdXNjaGFyICog
eWllbGQgPSBOVUxMOwogaW50IGNsID0gdG9sb3dlcigqcCk7CiBpbnQgY3UgPSB0b3VwcGVyKCpw
KTsKIApAQCAtNzg3LDggKzc4Miw4IEBACiAgIHsKICAgaWYgKCpzID09IGNsIHx8ICpzID09IGN1
KQogICAgIHsKLSAgICBpZiAoeWllbGQgPT0gTlVMTCkgeWllbGQgPSBzOwotICAgIGlmICgqKCsr
cCkgPT0gMCkKKyAgICBpZiAoIXlpZWxkKSB5aWVsZCA9IHM7CisgICAgaWYgKCEqKytwKQogICAg
ICAgewogICAgICAgaWYgKCFzcGFjZV9mb2xsb3dzIHx8IHNbMV0gPT0gJyAnIHx8IHNbMV0gPT0g
J1xuJyApIHJldHVybiB5aWVsZDsKICAgICAgIHlpZWxkID0gTlVMTDsKQEAgLTc5OCw3ICs3OTMs
NyBAQAogICAgIGN1ID0gdG91cHBlcigqcCk7CiAgICAgcysrOwogICAgIH0KLSAgZWxzZSBpZiAo
eWllbGQgIT0gTlVMTCkKKyAgZWxzZSBpZiAoeWllbGQpCiAgICAgewogICAgIHlpZWxkID0gTlVM
TDsKICAgICBwID0gdDsKQEAgLTgxMCw2ICs4MDUsMTEgQEAKIHJldHVybiBOVUxMOwogfQogCit1
c2NoYXIgKgorc3Ryc3RyaWModXNjaGFyICogcywgdXNjaGFyICogdCwgQk9PTCBzcGFjZV9mb2xs
b3dzKQoreworcmV0dXJuIFVTIHN0cnN0cmljX2MocywgdCwgc3BhY2VfZm9sbG93cyk7Cit9CiAK
IAogI2lmZGVmIENPTVBJTEVfVVRJTElUWQpAQCAtODU4LDE4ICs4NTgsMjQgQEAKICAgc2VwYXJh
dG9yICBhIHBvaW50ZXIgdG8gdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgaW4gYW4gaW50IChzZWUg
YWJvdmUpCiAgIGJ1ZmZlciAgICAgd2hlcmUgdG8gcHV0IGEgY29weSBvZiB0aGUgbmV4dCBzdHJp
bmcgaW4gdGhlIGxpc3Q7IG9yCiAgICAgICAgICAgICAgICBOVUxMIGlmIHRoZSBuZXh0IHN0cmlu
ZyBpcyByZXR1cm5lZCBpbiBuZXcgbWVtb3J5CisJICAgICBOb3RlIHRoYXQgaWYgdGhlIGxpc3Qg
aXMgdGFpbnRlZCB0aGVuIGEgcHJvdmlkZWQgYnVmZmVyIG11c3QgYmUKKwkgICAgIGFsc28gKGVs
c2Ugd2UgdHJhcCwgd2l0aCBhIG1lc3NhZ2UgcmVmZXJlbmNpbmcgdGhlIGNhbGxzaXRlKS4KKwkg
ICAgIElmIHdlIGRvIHRoZSBhbGxvY2F0aW9uLCB0YWludCBpcyBoYW5kbGVkIHRoZXJlLgogICBi
dWZsZW4gICAgIHdoZW4gYnVmZmVyIGlzIG5vdCBOVUxMLCB0aGUgc2l6ZSBvZiBidWZmZXI7IG90
aGVyd2lzZSBpZ25vcmVkCiAKKyAgZnVuYwkgICAgIGNhbGxlciwgZm9yIGRlYnVnCisgIGxpbmUJ
ICAgICBjYWxsZXIsIGZvciBkZWJ1ZworCiBSZXR1cm5zOiAgICAgcG9pbnRlciB0byBidWZmZXIs
IGNvbnRhaW5pbmcgdGhlIG5leHQgc3Vic3RyaW5nLAogICAgICAgICAgICAgIG9yIE5VTEwgaWYg
bm8gbW9yZSBzdWJzdHJpbmdzCiAqLwogCiB1c2NoYXIgKgotc3RyaW5nX25leHRpbmxpc3RfdHJj
KGNvbnN0IHVzY2hhciAqKmxpc3RwdHIsIGludCAqc2VwYXJhdG9yLCB1c2NoYXIgKmJ1ZmZlciwg
aW50IGJ1ZmxlbiwKLSBjb25zdCB1c2NoYXIgKiBmdW5jLCBpbnQgbGluZSkKK3N0cmluZ19uZXh0
aW5saXN0X3RyYyhjb25zdCB1c2NoYXIgKiogbGlzdHB0ciwgaW50ICogc2VwYXJhdG9yLCB1c2No
YXIgKiBidWZmZXIsCisgIGludCBidWZsZW4sIGNvbnN0IHVzY2hhciAqIGZ1bmMsIGludCBsaW5l
KQogewogaW50IHNlcCA9ICpzZXBhcmF0b3I7Ci1jb25zdCB1c2NoYXIgKnMgPSAqbGlzdHB0cjsK
K2NvbnN0IHVzY2hhciAqIHMgPSAqbGlzdHB0cjsKIEJPT0wgc2VwX2lzX3NwZWNpYWw7CiAKIGlm
ICghcykgcmV0dXJuIE5VTEw7CkBAIC05MDUsNiArOTExLDcgQEAKIHNlcF9pc19zcGVjaWFsID0g
aXNjbnRybChzZXApOwogCiAvKiBIYW5kbGUgdGhlIGNhc2Ugd2hlbiBhIGJ1ZmZlciBpcyBwcm92
aWRlZC4gKi8KKy8qWFhYIG5lZWQgdG8gYWxzbyBkZWFsIHdpdGggcW91dGVkLXJlcXVpcmVtZW50
cyBtaXNtYXRjaCAqLwogCiBpZiAoYnVmZmVyKQogICB7CkBAIC05MzIsMTQgKzkzOSwxMSBAQAog
ICBzdGFydCBvZiBhIHN0cmluZy4gQXZvaWQgZ2V0dGluZyB3b3JraW5nIG1lbW9yeSBmb3IgYW4g
ZW1wdHkgaXRlbS4gKi8KIAogICBpZiAoKnMgPT0gc2VwKQotICAgIHsKLSAgICBzKys7Ci0gICAg
aWYgKCpzICE9IHNlcCB8fCBzZXBfaXNfc3BlY2lhbCkKKyAgICBpZiAoKisrcyAhPSBzZXAgfHwg
c2VwX2lzX3NwZWNpYWwpCiAgICAgICB7CiAgICAgICAqbGlzdHB0ciA9IHM7CiAgICAgICByZXR1
cm4gc3RyaW5nX2NvcHkoVVMiIik7CiAgICAgICB9Ci0gICAgfQogCiAgIC8qIE5vdCBhbiBlbXB0
eSBzdHJpbmc7IHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIGRhdGEK
ICAgY2hhcmFjdGVyLiAqLwpAQCAtOTUyLDEyICs5NTYsMTUgQEAKICAgICBzID0gc3M7CiAgICAg
aWYgKCEqcyB8fCAqKytzICE9IHNlcCB8fCBzZXBfaXNfc3BlY2lhbCkgYnJlYWs7CiAgICAgfQor
CisgIC8qIFRyaW0gdHJhaWxpbmcgc3BhY2VzIGZyb20gdGhlIHJldHVybmVkIHN0cmluZyAqLwor
CiAgIC8qIHdoaWxlIChnLT5wdHIgPiAwICYmIGlzc3BhY2UoZy0+c1tnLT5wdHItMV0pKSBnLT5w
dHItLTsgKi8KICAgd2hpbGUgKCAgZy0+cHRyID4gMCAmJiBpc3NwYWNlKGctPnNbZy0+cHRyLTFd
KQogCSYmIChnLT5wdHIgPT0gMSB8fCBnLT5zW2ctPnB0ci0yXSAhPSAnXFwnKSApCiAgICAgZy0+
cHRyLS07CiAgIGJ1ZmZlciA9IHN0cmluZ19mcm9tX2dzdHJpbmcoZyk7Ci0gIGdzdHJpbmdfcmVs
ZWFzZV91bnVzZWQoZyk7CisgIGdzdHJpbmdfcmVsZWFzZV91bnVzZWRfdHJjKGcsIENDUyBmdW5j
LCBsaW5lKTsKICAgfQogCiAvKiBVcGRhdGUgdGhlIGN1cnJlbnQgcG9pbnRlciBhbmQgcmV0dXJu
IHRoZSBuZXcgc3RyaW5nICovCkBAIC0xMDgxLDcgKzEwODgsNiBAQAogewogaW50IHAgPSBnLT5w
dHI7CiBpbnQgb2xkc2l6ZSA9IGctPnNpemU7Ci1CT09MIHRhaW50ZWQgPSBpc190YWludGVkKGct
PnMpOwogCiAvKiBNb3N0bHksIHN0cmluZ19jYXQoKSBpcyB1c2VkIHRvIGJ1aWxkIHNtYWxsIHN0
cmluZ3Mgb2YgYSBmZXcgaHVuZHJlZAogY2hhcmFjdGVycyBhdCBtb3N0LiBUaGVyZSBhcmUgdGlt
ZXMsIGhvd2V2ZXIsIHdoZW4gdGhlIHN0cmluZ3MgYXJlIHZlcnkgbXVjaApAQCAtMTExMyw4ICsx
MTE5LDggQEAKIHdhcyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBkeW5hbWljIG1lbW9yeSBzdGFjay4g
VGhpcyBpcyB0aGUgY2FzZSBpZiBpdCBtYXRjaGVzCiBzdG9yZV9sYXN0X2dldC4gKi8KIAotaWYg
KCFzdG9yZV9leHRlbmQoZy0+cywgdGFpbnRlZCwgb2xkc2l6ZSwgZy0+c2l6ZSkpCi0gIGctPnMg
PSBzdG9yZV9uZXdibG9jayhnLT5zLCB0YWludGVkLCBnLT5zaXplLCBwKTsKK2lmICghc3RvcmVf
ZXh0ZW5kKGctPnMsIG9sZHNpemUsIGctPnNpemUpKQorICBnLT5zID0gc3RvcmVfbmV3YmxvY2so
Zy0+cywgZy0+c2l6ZSwgcCk7CiB9CiAKIApAQCAtMTEyOSwzOCArMTEzNSw0OSBAQAogc29tZXRp
bWVzIGNhbGxlZCB0byBleHRyYWN0IHBhcnRzIG9mIG90aGVyIHN0cmluZ3MuCiAKIEFyZ3VtZW50
czoKLSAgc3RyaW5nICAgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIHRoYXQgaXMg
YmVpbmcgYnVpbHQsIG9yIE5VTEwKLSAgICAgICAgICAgICBpZiB0aGlzIGlzIGEgbmV3IHN0cmlu
ZyB0aGF0IGhhcyBubyBjb250ZW50cyB5ZXQKKyAgZwkgICBncm93YWJsZS1zdHJpbmcgdGhhdCBp
cyBiZWluZyBidWlsdCwgb3IgTlVMTCBpZiBub3QgYXNzaWduZWQgeWV0CiAgIHMgICAgICAgIHBv
aW50cyB0byBjaGFyYWN0ZXJzIHRvIGFkZAogICBjb3VudCAgICBjb3VudCBvZiBjaGFyYWN0ZXJz
IHRvIGFkZDsgbXVzdCBub3QgZXhjZWVkIHRoZSBsZW5ndGggb2YgcywgaWYgcwogICAgICAgICAg
ICAgIGlzIGEgQyBzdHJpbmcuCiAKLVJldHVybnM6ICAgcG9pbnRlciB0byB0aGUgc3RhcnQgb2Yg
dGhlIHN0cmluZywgY2hhbmdlZCBpZiBjb3BpZWQgZm9yIGV4cGFuc2lvbi4KK1JldHVybnM6ICAg
Z3Jvd2FibGUgc3RyaW5nLCBjaGFuZ2VkIGlmIGNvcGllZCBmb3IgZXhwYW5zaW9uLgogICAgICAg
ICAgICBOb3RlIHRoYXQgYSBOVUwgaXMgbm90IGFkZGVkLCB0aG91Z2ggc3BhY2UgaXMgbGVmdCBm
b3Igb25lLiBUaGlzIGlzCiAgICAgICAgICAgIGJlY2F1c2Ugc3RyaW5nX2NhdCgpIGlzIG9mdGVu
IGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBidWlsZCB1cCBhCiAgICAgICAgICAgIHN0cmluZyAt
IHRoZXJlJ3Mgbm8gcG9pbnQgYWRkaW5nIHRoZSBOVUwgdGlsbCB0aGUgZW5kLgorCSAgIE5VTEwg
aXMgYSBwb3NzaWJsZSByZXR1cm4uCiAKICovCiAvKiBjb3Zlcml0eVsrYWxsb2NdICovCiAKIGdz
dHJpbmcgKgotc3RyaW5nX2NhdG4oZ3N0cmluZyAqIGcsIGNvbnN0IHVzY2hhciAqcywgaW50IGNv
dW50KQorc3RyaW5nX2NhdG4oZ3N0cmluZyAqIGcsIGNvbnN0IHVzY2hhciAqIHMsIGludCBjb3Vu
dCkKIHsKIGludCBwOwotQk9PTCBzcmN0YWludCA9IGlzX3RhaW50ZWQocyk7CiAKIGlmIChjb3Vu
dCA8IDApCiAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUNfRElFLAogICAgICJpbnRl
cm5hbCBlcnJvciBpbiBzdHJpbmdfY2F0biAoY291bnQgJWQpIiwgY291bnQpOworaWYgKGNvdW50
ID09IDApIHJldHVybiBnOwogCisvKmRlYnVnX3ByaW50Zigic3RyaW5nX2NhdG4gJyUuKnMnXG4i
LCBjb3VudCwgcyk7Ki8KIGlmICghZykKICAgewogICB1bnNpZ25lZCBpbmMgPSBjb3VudCA8IDQw
OTYgPyAxMjcgOiAxMDIzOwotICB1bnNpZ25lZCBzaXplID0gKChjb3VudCArIGluYykgJiAgfmlu
YykgKyAxOwotICBnID0gc3RyaW5nX2dldF90YWludGVkKHNpemUsIHNyY3RhaW50KTsKKyAgdW5z
aWduZWQgc2l6ZSA9ICgoY291bnQgKyBpbmMpICYgIH5pbmMpICsgMTsJLyogcm91bmQgdXAgcmVx
dWVzdGVkIGNvdW50ICovCisgIGcgPSBzdHJpbmdfZ2V0X3RhaW50ZWQoc2l6ZSwgcyk7CisgIH0K
K2Vsc2UgaWYgKCFnLT5zKQkJCS8qIHNob3VsZCBub3QgaGFwcGVuICovCisgIHsKKyAgZy0+cyA9
IHN0cmluZ19jb3B5bihzLCBjb3VudCk7CisgIGctPnB0ciA9IGNvdW50OworICBnLT5zaXplID0g
Y291bnQ7CS8qWFhYIHN1Ym9wdGltYWwqLworICByZXR1cm4gZzsKKyAgfQorZWxzZSBpZiAoaXNf
aW5jb21wYXRpYmxlKGctPnMsIHMpKQorICB7CisvKiBkZWJ1Z19wcmludGYoInJlYnVmIEFcbiIp
OyAqLworICBnc3RyaW5nX3JlYnVmZmVyKGcsIHMpOwogICB9Ci1lbHNlIGlmIChzcmN0YWludCAm
JiAhaXNfdGFpbnRlZChnLT5zKSkKLSAgZ3N0cmluZ19yZWJ1ZmZlcihnKTsKIAogaWYgKGctPnB0
ciA8IDAgfHwgZy0+cHRyID4gZy0+c2l6ZSkKICAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19Q
QU5JQ19ESUUsCkBAIC0xMTgxLDkgKzExOTgsOSBAQAogCiAKIGdzdHJpbmcgKgotc3RyaW5nX2Nh
dChnc3RyaW5nICpzdHJpbmcsIGNvbnN0IHVzY2hhciAqcykKK3N0cmluZ19jYXQoZ3N0cmluZyAq
IGcsIGNvbnN0IHVzY2hhciAqIHMpCiB7Ci1yZXR1cm4gc3RyaW5nX2NhdG4oc3RyaW5nLCBzLCBV
c3RybGVuKHMpKTsKK3JldHVybiBzdHJpbmdfY2F0bihnLCBzLCBVc3RybGVuKHMpKTsKIH0KIAog
CkBAIC0xMTk2LDMwICsxMjEzLDI5IEBACiBJdCBjYWxscyBzdHJpbmdfY2F0KCkgdG8gZG8gdGhl
IGRpcnR5IHdvcmsuCiAKIEFyZ3VtZW50czoKLSAgc3RyaW5nICAgZXhwYW5kaW5nLXN0cmluZyB0
aGF0IGlzIGJlaW5nIGJ1aWx0LCBvciBOVUxMCi0gICAgICAgICAgICAgaWYgdGhpcyBpcyBhIG5l
dyBzdHJpbmcgdGhhdCBoYXMgbm8gY29udGVudHMgeWV0CisgIGcJICAgZ3Jvd2FibGUtc3RyaW5n
IHRoYXQgaXMgYmVpbmcgYnVpbHQsIG9yIE5VTEwgaWYgbm90IHlldCBhc3NpZ25lZAogICBjb3Vu
dCAgICB0aGUgbnVtYmVyIG9mIHN0cmluZ3MgdG8gYXBwZW5kCiAgIC4uLiAgICAgICJjb3VudCIg
dXNjaGFyKiBhcmd1bWVudHMsIHdoaWNoIG11c3QgYmUgdmFsaWQgemVyby10ZXJtaW5hdGVkCiAg
ICAgICAgICAgICAgQyBzdHJpbmdzCiAKLVJldHVybnM6ICAgcG9pbnRlciB0byB0aGUgc3RhcnQg
b2YgdGhlIHN0cmluZywgY2hhbmdlZCBpZiBjb3BpZWQgZm9yIGV4cGFuc2lvbi4KK1JldHVybnM6
ICAgZ3Jvd2FibGUgc3RyaW5nLCBjaGFuZ2VkIGlmIGNvcGllZCBmb3IgZXhwYW5zaW9uLgogICAg
ICAgICAgICBUaGUgc3RyaW5nIGlzIG5vdCB6ZXJvLXRlcm1pbmF0ZWQgLSBzZWUgc3RyaW5nX2Nh
dCgpIGFib3ZlLgogKi8KIAogX19pbmxpbmVfXyBnc3RyaW5nICoKLXN0cmluZ19hcHBlbmQoZ3N0
cmluZyAqc3RyaW5nLCBpbnQgY291bnQsIC4uLikKK3N0cmluZ19hcHBlbmQoZ3N0cmluZyAqIGcs
IGludCBjb3VudCwgLi4uKQogewogdmFfbGlzdCBhcDsKIAogdmFfc3RhcnQoYXAsIGNvdW50KTsK
IHdoaWxlIChjb3VudC0tID4gMCkKICAgewotICB1c2NoYXIgKnQgPSB2YV9hcmcoYXAsIHVzY2hh
ciAqKTsKLSAgc3RyaW5nID0gc3RyaW5nX2NhdChzdHJpbmcsIHQpOworICB1c2NoYXIgKiB0ID0g
dmFfYXJnKGFwLCB1c2NoYXIgKik7CisgIGcgPSBzdHJpbmdfY2F0KGcsIHQpOwogICB9CiB2YV9l
bmQoYXApOwogCi1yZXR1cm4gc3RyaW5nOworcmV0dXJuIGc7CiB9CiAjZW5kaWYKIApAQCAtMTI1
NSw3ICsxMjcxLDcgQEAKIHN0cmluZ19mb3JtYXRfdHJjKHVzY2hhciAqIGJ1ZmZlciwgaW50IGJ1
ZmxlbiwKICAgY29uc3QgdXNjaGFyICogZnVuYywgdW5zaWduZWQgbGluZSwgY29uc3QgY2hhciAq
IGZvcm1hdCwgLi4uKQogewotZ3N0cmluZyBnID0geyAuc2l6ZSA9IGJ1ZmxlbiwgLnB0ciA9IDAs
IC5zID0gYnVmZmVyIH0sICpncDsKK2dzdHJpbmcgZyA9IHsgLnNpemUgPSBidWZsZW4sIC5wdHIg
PSAwLCAucyA9IGJ1ZmZlciB9LCAqIGdwOwogdmFfbGlzdCBhcDsKIHZhX3N0YXJ0KGFwLCBmb3Jt
YXQpOwogZ3AgPSBzdHJpbmdfdmZvcm1hdF90cmMoJmcsIGZ1bmMsIGxpbmUsIFNUUklOR19TUFJJ
TlRGX0JVRkZFUl9TSVpFLApAQCAtMTI5OCwxMyArMTMxNCwxMiBAQAogCiBnc3RyaW5nICoKIHN0
cmluZ192Zm9ybWF0X3RyYyhnc3RyaW5nICogZywgY29uc3QgdXNjaGFyICogZnVuYywgdW5zaWdu
ZWQgbGluZSwKLSAgdW5zaWduZWQgc2l6ZV9saW1pdCwgdW5zaWduZWQgZmxhZ3MsIGNvbnN0IGNo
YXIgKmZvcm1hdCwgdmFfbGlzdCBhcCkKKyAgdW5zaWduZWQgc2l6ZV9saW1pdCwgdW5zaWduZWQg
ZmxhZ3MsIGNvbnN0IGNoYXIgKiBmb3JtYXQsIHZhX2xpc3QgYXApCiB7CiBlbnVtIGx0eXBlcyB7
IExfTk9STUFMPTEsIExfU0hPUlQ9MiwgTF9MT05HPTMsIExfTE9OR0xPTkc9NCwgTF9MT05HRE9V
QkxFPTUsIExfU0laRT02IH07CiAKIGludCB3aWR0aCwgcHJlY2lzaW9uLCBvZmYsIGxpbSwgbmVl
ZDsKIGNvbnN0IGNoYXIgKiBmcCA9IGZvcm1hdDsJLyogRGVsaWJlcmF0ZWx5IG5vdCB1bnNpZ25l
ZCAqLwotQk9PTCBkZXN0X3RhaW50ZWQgPSBGQUxTRTsKIAogc3RyaW5nX2RhdGVzdGFtcF9vZmZz
ZXQgPSAtMTsJLyogRGF0ZXN0YW1wIG5vdCBpbnNlcnRlZCAqLwogc3RyaW5nX2RhdGVzdGFtcF9s
ZW5ndGggPSAwOwkvKiBEYXRlc3RhbXAgbm90IGluc2VydGVkICovCkBAIC0xMzE3LDE2ICsxMzMy
LDE1IEBACiAKIC8qIEVuc3VyZSB3ZSBoYXZlIGEgc3RyaW5nLCB0byBzYXZlIG9uIGNoZWNraW5n
IGxhdGVyICovCiBpZiAoIWcpIGcgPSBzdHJpbmdfZ2V0KDE2KTsKLWVsc2UgaWYgKCEoZmxhZ3Mg
JiBTVkZNVF9UQUlOVF9OT0NISykpIGRlc3RfdGFpbnRlZCA9IGlzX3RhaW50ZWQoZy0+cyk7CiAK
LWlmICghKGZsYWdzICYgU1ZGTVRfVEFJTlRfTk9DSEspICYmICFkZXN0X3RhaW50ZWQgJiYgaXNf
dGFpbnRlZChmb3JtYXQpKQoraWYgKCEoZmxhZ3MgJiBTVkZNVF9UQUlOVF9OT0NISykgJiYgaXNf
aW5jb21wYXRpYmxlKGctPnMsIGZvcm1hdCkpCiAgIHsKICNpZm5kZWYgTUFDUk9fUFJFREVGCiAg
IGlmICghKGZsYWdzICYgU1ZGTVRfUkVCVUZGRVIpKQogICAgIGRpZV90YWludGVkKFVTInN0cmlu
Z192Zm9ybWF0IiwgZnVuYywgbGluZSk7CiAjZW5kaWYKLSAgZ3N0cmluZ19yZWJ1ZmZlcihnKTsK
LSAgZGVzdF90YWludGVkID0gVFJVRTsKKy8qIGRlYnVnX3ByaW50ZigicmVidWYgQlxuIik7ICov
CisgIGdzdHJpbmdfcmVidWZmZXIoZywgZm9ybWF0KTsKICAgfQogI2VuZGlmCS8qIUNPTVBJTEVf
VVRJTElUWSovCiAKQEAgLTEzMzgsNyArMTM1Miw3IEBACiB3aGlsZSAoKmZwKQogICB7CiAgIGlu
dCBsZW5ndGggPSBMX05PUk1BTDsKLSAgaW50ICpucHRyOworICBpbnQgKiBucHRyOwogICBpbnQg
c2xlbjsKICAgY29uc3QgY2hhciAqbnVsbCA9ICJOVUxMIjsJCS8qICkgVGhlc2UgdmFyaWFibGVz
ICovCiAgIGNvbnN0IGNoYXIgKml0ZW1fc3RhcnQsICpzOwkJLyogKSBhcmUgZGVsaWJlcmF0ZWx5
ICovCkBAIC0xNTQ2LDEyICsxNTYwLDEyIEBACiAgICAgICBpZiAoIXMpIHMgPSBudWxsOwogICAg
ICAgc2xlbiA9IFVzdHJsZW4ocyk7CiAKLSAgICAgIGlmICghKGZsYWdzICYgU1ZGTVRfVEFJTlRf
Tk9DSEspICYmICFkZXN0X3RhaW50ZWQgJiYgaXNfdGFpbnRlZChzKSkKKyAgICAgIGlmICghKGZs
YWdzICYgU1ZGTVRfVEFJTlRfTk9DSEspICYmIGlzX2luY29tcGF0aWJsZShnLT5zLCBzKSkKIAlp
ZiAoZmxhZ3MgJiBTVkZNVF9SRUJVRkZFUikKIAkgIHsKLQkgIGdzdHJpbmdfcmVidWZmZXIoZyk7
CisvKiBkZWJ1Z19wcmludGYoIiVzICVkOiB1bnRhaW50ZWQgd29ya2FyZWEsIHRhaW50ZWQgJSVz
IDotIHJlYnVmZmVyXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgKi8KKwkgIGdzdHJpbmdf
cmVidWZmZXIoZywgcyk7CiAJICBncCA9IENTIGctPnMgKyBnLT5wdHI7Ci0JICBkZXN0X3RhaW50
ZWQgPSBUUlVFOwogCSAgfQogI2lmbmRlZiBNQUNST19QUkVERUYKIAllbHNlCkBAIC0xNjQwLDE2
ICsxNjU0LDE3IEBACiAiUGVybWlzc2lvbiBkZW5pZWQiLCByZWFkcyBhbmQgaW5jbHVkZXMgdGhl
IGV1aWQgYW5kIGVnaWQuCiAKIEFyZ3VtZW50czoKLSAgZW5vICAgICAgICAgICB0aGUgdmFsdWUg
b2YgZXJybm8gYWZ0ZXIgdGhlIGZhaWx1cmUKICAgZm9ybWF0ICAgICAgICBhIHRleHQgZm9ybWF0
IHN0cmluZyAtIGRlbGliZXJhdGVseSBub3QgdXNjaGFyICoKKyAgZnVuYwkJY2FsbGVyLCBmb3Ig
ZGVidWcKKyAgbGluZQkJY2FsbGVyLCBmb3IgZGVidWcKICAgLi4uICAgICAgICAgICBhcmd1bWVu
dHMgZm9yIHRoZSBmb3JtYXQgc3RyaW5nCiAKIFJldHVybnM6ICAgICAgICBhIG1lc3NhZ2UsIGlu
IGR5bmFtaWMgc3RvcmUKICovCiAKIHVzY2hhciAqCi1zdHJpbmdfb3Blbl9mYWlsZWRfdHJjKGlu
dCBlbm8sIGNvbnN0IHVzY2hhciAqIGZ1bmMsIHVuc2lnbmVkIGxpbmUsCi0gIGNvbnN0IGNoYXIg
KmZvcm1hdCwgLi4uKQorc3RyaW5nX29wZW5fZmFpbGVkX3RyYyhjb25zdCB1c2NoYXIgKiBmdW5j
LCB1bnNpZ25lZCBsaW5lLAorICBjb25zdCBjaGFyICogZm9ybWF0LCAuLi4pCiB7CiB2YV9saXN0
IGFwOwogZ3N0cmluZyAqIGcgPSBzdHJpbmdfZ2V0KDEwMjQpOwpAQCAtMTY2NCwyMiArMTY3OSwy
NiBAQAogdmFfc3RhcnQoYXAsIGZvcm1hdCk7CiAodm9pZCkgc3RyaW5nX3Zmb3JtYXRfdHJjKGcs
IGZ1bmMsIGxpbmUsIFNUUklOR19TUFJJTlRGX0JVRkZFUl9TSVpFLAogCVNWRk1UX1JFQlVGRkVS
LCBmb3JtYXQsIGFwKTsKLXN0cmluZ19mcm9tX2dzdHJpbmcoZyk7Ci1nc3RyaW5nX3JlbGVhc2Vf
dW51c2VkKGcpOwogdmFfZW5kKGFwKTsKIAotcmV0dXJuIGVubyA9PSBFQUNDRVMKLSAgPyBzdHJp
bmdfc3ByaW50ZigiJXM6ICVzIChldWlkPSVsZCBlZ2lkPSVsZCkiLCBnLT5zLCBzdHJlcnJvcihl
bm8pLAotICAgIChsb25nIGludClnZXRldWlkKCksIChsb25nIGludClnZXRlZ2lkKCkpCi0gIDog
c3RyaW5nX3NwcmludGYoIiVzOiAlcyIsIGctPnMsIHN0cmVycm9yKGVubykpOworZyA9IHN0cmlu
Z19jYXRuKGcsIFVTIjogIiwgMik7CitnID0gc3RyaW5nX2NhdChnLCBVUyBzdHJlcnJvcihlcnJu
bykpOworCitpZiAoZXJybm8gPT0gRUFDQ0VTKQorICB7CisgIGludCBzYXZlX2Vycm5vID0gZXJy
bm87CisgIGcgPSBzdHJpbmdfZm10X2FwcGVuZChnLCAiIChldWlkPSVsZCBlZ2lkPSVsZCkiLAor
ICAgIChsb25nIGludClnZXRldWlkKCksIChsb25nIGludClnZXRlZ2lkKCkpOworICBlcnJubyA9
IHNhdmVfZXJybm87CisgIH0KK2dzdHJpbmdfcmVsZWFzZV91bnVzZWQoZyk7CityZXR1cm4gc3Ry
aW5nX2Zyb21fZ3N0cmluZyhnKTsKIH0KLSNlbmRpZiAgLyogQ09NUElMRV9VVElMSVRZICovCiAK
IAogCiAKIAotI2lmbmRlZiBDT01QSUxFX1VUSUxJVFkKIC8qIHFzb3J0KDMpLCBjdXJyZW50bHkg
dXNlZCB0byBzb3J0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKIGZvciAtYlAgZW52aXJvbm1l
bnQgb3V0cHV0LCBuZWVkcyBhIGZ1bmN0aW9uIHRvIGNvbXBhcmUgdHdvIHBvaW50ZXJzIHRvIHN0
cmluZwogcG9pbnRlcnMuIEhlcmUgaXQgaXMuICovCkBAIC0xNzA2LDYgKzE3MjUsNyBAQAogdXNj
aGFyIGJ1ZmZlclsyNTZdOwogCiBwcmludGYoIlRlc3RpbmcgaXNfaXBfYWRkcmVzc1xuIik7Citz
dG9yZV9pbml0KCk7CiAKIHdoaWxlIChmZ2V0cyhDUyBidWZmZXIsIHNpemVvZihidWZmZXIpLCBz
dGRpbikgIT0gTlVMTCkKICAgewpkaWZmIC11ciBleGltLm9yaWcvc3JjL3N0cnVjdHMuaCBleGlt
L3NyYy9zdHJ1Y3RzLmgKLS0tIGV4aW0ub3JpZy9zcmMvc3RydWN0cy5oCTIwMjMtMDYtMDQgMTY6
MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy9zdHJ1Y3RzLmgJMjAyMi0wNi0yMyAx
Njo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4g
SW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhp
bSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5
IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBN
YWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25z
IG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAKQEAgLTEzMywxMSArMTMzLDE1IEBACiAg
IHVzY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgICAgLyogSW5zdGFuY2UgbmFtZSAqLwogICBz
dHJ1Y3QgZHJpdmVyX2luZm8gKmluZm87ICAgICAgIC8qIFBvaW50cyB0byBpbmZvIGZvciB0aGlz
IGRyaXZlciAqLwogICB2b2lkICAgKm9wdGlvbnNfYmxvY2s7ICAgICAgICAgIC8qIFBvaW50ZXIg
dG8gcHJpdmF0ZSBvcHRpb25zICovCisKICAgdXNjaGFyICpkcml2ZXJfbmFtZTsgICAgICAgICAg
ICAvKiBBbGwgc3RhcnQgd2l0aCB0aGlzIGdlbmVyaWMgb3B0aW9uICovCisgIGNvbnN0IHVzY2hh
ciAqc3JjZmlsZTsJICAvKiBhbmQgY29uZmlnIHNvdXJjZSBpbmZvIGZvciBlcnJvcnMgKi8KKyAg
aW50CSAgc3JjbGluZTsKIH0gZHJpdmVyX2luc3RhbmNlOwogCiB0eXBlZGVmIHN0cnVjdCBkcml2
ZXJfaW5mbyB7CiAgIHVzY2hhciAqZHJpdmVyX25hbWU7ICAgICAgICAgICAgLyogTmFtZSBvZiBk
cml2ZXIgKi8KKwogICBvcHRpb25saXN0ICpvcHRpb25zOyAgICAgICAgICAgIC8qIFRhYmxlIG9m
IHByaXZhdGUgb3B0aW9ucyBuYW1lcyAqLwogICBpbnQgICAgKm9wdGlvbnNfY291bnQ7ICAgICAg
ICAgIC8qIC0+IE51bWJlciBvZiBlbnRyaWVzIGluIHRhYmxlICovCiAgIHZvaWQgICAqb3B0aW9u
c19ibG9jazsgICAgICAgICAgLyogUG9pbnRzIHRvIGRlZmF1bHQgcHJpdmF0ZSBibG9jayAqLwpA
QCAtMTU5LDYgKzE2Myw5IEBACiAgIHN0cnVjdCB0cmFuc3BvcnRfaW5mbyAqaW5mbzsgICAgLyog
SW5mbyBmb3IgdGhpcyBkcml2ZXIgKi8KICAgdm9pZCAqb3B0aW9uc19ibG9jazsgICAgICAgICAg
ICAvKiBQb2ludGVyIHRvIHByaXZhdGUgb3B0aW9ucyAqLwogICB1c2NoYXIgKmRyaXZlcl9uYW1l
OyAgICAgICAgICAgIC8qIE11c3QgYmUgZmlyc3QgKi8KKyAgY29uc3QgdXNjaGFyICpzcmNmaWxl
OworICBpbnQJICBzcmNsaW5lOworCiAgIGludCAgICgqc2V0dXApKCAgICAgICAgICAgICAgICAg
LyogU2V0dXAgZW50cnkgcG9pbnQgKi8KICAgICBzdHJ1Y3QgdHJhbnNwb3J0X2luc3RhbmNlICos
CiAgICAgc3RydWN0IGFkZHJlc3NfaXRlbSAqLApAQCAtMjgzLDYgKzI5MCw4IEBACiAgIHN0cnVj
dCByb3V0ZXJfaW5mbyAqaW5mbzsKICAgdm9pZCAgICpvcHRpb25zX2Jsb2NrOyAgICAgICAgICAv
KiBQb2ludGVyIHRvIHByaXZhdGUgb3B0aW9ucyAqLwogICB1c2NoYXIgKmRyaXZlcl9uYW1lOyAg
ICAgICAgICAgIC8qIE11c3QgYmUgZmlyc3QgKi8KKyAgY29uc3QgdXNjaGFyICpzcmNmaWxlOwor
ICBpbnQJICBzcmNsaW5lOwogCiAgIHVzY2hhciAqYWRkcmVzc19kYXRhOyAgICAgICAgICAgLyog
QXJiaXRyYXJ5IGRhdGEgKi8KICNpZmRlZiBFWFBFUklNRU5UQUxfQlJJR0hUTUFJTApAQCAtNDAw
LDYgKzQwOSw5IEBACiAgIHN0cnVjdCBhdXRoX2luZm8gKmluZm87ICAgICAgICAgLyogUG9pbnRl
ciB0byBkcml2ZXIgaW5mbyBibG9jayAqLwogICB2b2lkICAgKm9wdGlvbnNfYmxvY2s7ICAgICAg
ICAgIC8qIFBvaW50ZXIgdG8gcHJpdmF0ZSBvcHRpb25zICovCiAgIHVzY2hhciAqZHJpdmVyX25h
bWU7ICAgICAgICAgICAgLyogTXVzdCBiZSBmaXJzdCAqLworICBjb25zdCB1c2NoYXIgKnNyY2Zp
bGU7CisgIGludAkgIHNyY2xpbmU7CisKICAgdXNjaGFyICphZHZlcnRpc2VfY29uZGl0aW9uOyAg
ICAvKiBBcmUgd2UgZ29pbmcgdG8gYWR2ZXJ0aXNlIHRoaXM/Ki8KICAgdXNjaGFyICpjbGllbnRf
Y29uZGl0aW9uOyAgICAgICAvKiBTaG91bGQgdGhlIGNsaWVudCB0cnkgdGhpcz8gKi8KICAgdXNj
aGFyICpwdWJsaWNfbmFtZTsgICAgICAgICAgICAvKiBBZHZlcnRpc2VkIG5hbWUgKi8KQEAgLTQz
NSw4ICs0NDcsOCBAQAogICAgIGludCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1h
bmQgdGltZW91dCAqLwogICAgIHVzY2hhciAqLCAgICAgICAgICAgICAgICAgICAgIC8qIGJ1ZmZl
ciBmb3IgcmVhZGluZyByZXNwb25zZSAqLwogICAgIGludCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qIHNpemVvZiBidWZmZXIgKi8KLSAgdm9pZCAoKnZlcnNpb25fcmVwb3J0KSggICAgICAg
ICAvKiBkaWFnbm9zdGljIHZlcnNpb24gcmVwb3J0aW5nICovCi0gICAgRklMRSAqKTsgICAgICAg
ICAgICAgICAgICAgICAgLyogSS9PIHN0cmVhbSB0byBwcmludCB0byAqLworICBnc3RyaW5nICog
KCp2ZXJzaW9uX3JlcG9ydCkoICAgIC8qIGRpYWdub3N0aWMgdmVyc2lvbiByZXBvcnRpbmcgKi8K
KyAgICBnc3RyaW5nICopOyAgICAgICAgICAgICAgICAgICAvKiBzdHJpbmcgdG8gYXBwZW5kIHRv
ICovCiAgIHZvaWQgKCptYWNyb3NfY3JlYXRlKSh2b2lkKTsJICAvKiBmZWF0dXJlLW1hY3JvIGNy
ZWF0aW9uICovCiB9IGF1dGhfaW5mbzsKIApAQCAtNTE4LDkgKzUzMCw2IEBACiAgIHVzY2hhciAq
cmVtb3ZlX2hlYWRlcnM7ICAgICAgICAgLyogbGlzdCBvZiB0aG9zZSB0byByZW1vdmUgKi8KICAg
dm9pZCAgICp2YXJpYWJsZXM7CQkgIC8qIHJvdXRlci12YXNyaWFibGVzICovCiAKLSNpZmRlZiBF
WFBFUklNRU5UQUxfU1JTCi0gIHVzY2hhciAqc3JzX3NlbmRlcjsgICAgICAgICAgICAgLyogQ2hh
bmdlIHJldHVybiBwYXRoIHdoZW4gZGVsaXZlcmluZyAqLwotI2VuZGlmCiAgIEJPT0wgICAgaWdu
b3JlX2Vycm9yOjE7CSAgLyogaWdub3JlIGRlbGl2ZXJ5IGVycm9yICovCiAjaWZkZWYgU1VQUE9S
VF9JMThOCiAgIEJPT0wgICAgdXRmOF9tc2c6MTsJCSAgLyogcmVxdWlyZXMgU01UUFVURjggcHJv
Y2Vzc2luZyAqLwpAQCAtNjI2LDYgKzYzNSw4IEBACiAgICAgQk9PTCBhZl92ZXJpZnlfcm91dGVk
OjE7CQkvKiBmb3IgY2FjaGVkIHNlbmRlciB2ZXJpZnk6IHJvdXRlZCBPSyAqLwogICAgIEJPT0wg
YWZfdmVyaWZ5X2NhbGxvdXQ6MTsJCS8qIGZvciBjYWNoZWQgc2VuZGVyIHZlcmlmeTogY2FsbG91
dCB3YXMgc3BlY2lmaWVkICovCiAgICAgQk9PTCBhZl9pbmNsdWRlX2FmZml4ZXM6MTsJCS8qIGRl
bGl2ZXJlZCB3aXRoIGFmZml4ZXMgaW4gUkNQVCAqLworICAgIEJPT0wgYWZfbmV3X2Nvbm46MTsJ
CQkvKiBkZWxpdmVyZWQgb24gYW4gZnJlc2ggVENQIGNvbm4gKi8KKyAgICBCT09MIGFmX2NvbnRf
Y29ubjoxOwkJLyogZGVsaXZlcmVkICh3aXRoIG5ldyBNQUlMIGNtZCkgb24gYW4gZXhpc3Rpbmcg
VENQIGNvbm4gKi8KICAgICBCT09MIGFmX2NlcnRfdmVyaWZpZWQ6MTsJCS8qIGRlbGl2ZXJlZCB3
aXRoIHZlcmlmaWVkIFRMUyBjZXJ0ICovCiAgICAgQk9PTCBhZl9wYXNzX21lc3NhZ2U6MTsJCS8q
IHBhc3MgbWVzc2FnZSBpbiBib3VuY2VzICovCiAgICAgQk9PTCBhZl9iYWRfcmVwbHk6MTsJCS8q
IGZpbHRlciBjb3VsZCBub3QgZ2VuZXJhdGUgYXV0b3JlcGx5ICovCkBAIC02NDcsNyArNjU4LDcg
QEAKICNpZmRlZiBTVVBQT1JUX0kxOE4KICAgICBCT09MIGFmX3V0ZjhfZG93bmN2dDoxOwkJLyog
ZG93bmNvbnZlcnQgd2FzIGRvbmUgZm9yIGRlbGl2ZXJ5ICovCiAjZW5kaWYKLSNpZmRlZiBFWFBF
UklNRU5UQUxfVExTX1JFU1VNRQorI2lmbmRlZiBESVNBQkxFX1RMU19SRVNVTUUKICAgICBCT09M
IGFmX3Rsc19yZXN1bWU6MTsJCS8qIFRMUyB1c2VkIGEgcmVzdW1lZCBzZXNzaW9uICovCiAjZW5k
aWYKICAgfSBmbGFnczsKQEAgLTgyMCw2ICs4MzEsMTEgQEAKICAgaW50ICAgICAgICAgICAgICAg
ICAgIGhvc3RfYWY7CiAgIHVzY2hhciAqICAgICAgICAgICAgICBpbnRlcmZhY2U7CiAKKyAgaW50
CQkJc29jazsJLyogdXNlZCBmb3IgYSBib3VuZCBidXQgbm90IGNvbm5lY3RlZCBzb2NrZXQgKi8K
KyAgdXNjaGFyICoJCXNlbmRpbmdfaXBfYWRkcmVzczsJLyogdXNlZCBmb3IgVExTIHJlc3VtcHRp
b24gKi8KKyAgY29uc3QgdXNjaGFyICoJaG9zdF9sYnNlcnZlcjsJCS8qIGRpdHRvLCBmb3Igc2Vy
dmVyLWJlaGluZCBMQiAqLworICBCT09MCQkJaGF2ZV9sYnNlcnZlcjoxOwkvKiBob3N0X2xic2Vy
dmVyIGlzIHZhbGlkICovCisKICNpZmRlZiBTVVBQT1JUX0RBTkUKICAgQk9PTCBkYW5lOjE7CQkJ
LyogY29ubmVjdGlvbiBtdXN0IGRvIGRhbmUgKi8KICAgZG5zX2Fuc3dlcgkJdGxzYV9kbnNhOwkv
KiBzdHJpY3RseSwgdGhpcyBzaG91bGQgdXNlIHRhaW50ZWQgbWVtICovCmRpZmYgLXVyIGV4aW0u
b3JpZy9zcmMvdGxzLmMgZXhpbS9zcmMvdGxzLmMKLS0tIGV4aW0ub3JpZy9zcmMvdGxzLmMJMjAy
My0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL3Rscy5jCTIwMjIt
MDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhp
bSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykg
VGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5p
dmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhl
IEV4aW0gTWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29u
ZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogLyogVGhpcyBtb2R1bGUgcHJv
dmlkZXMgVExTIChha2EgU1NMKSBzdXBwb3J0IGZvciBFeGltLiBUaGUgY29kZSBmb3IgT3BlblNT
TCBpcwpAQCAtMjUsNiArMjUsMTEgQEAKICNlbmRpZgogCiAKKy8qIEZvcndhcmQgZGVjbC4gKi8K
K3N0YXRpYyB2b2lkIHRsc19jbGllbnRfcmVzbXB0aW9uX2tleSh0bHNfc3VwcG9ydCAqLCBzbXRw
X2Nvbm5lY3RfYXJncyAqLAorICBzbXRwX3RyYW5zcG9ydF9vcHRpb25zX2Jsb2NrICopOworCisK
ICNpZiBkZWZpbmVkKE1BQ1JPX1BSRURFRikgJiYgIWRlZmluZWQoRElTQUJMRV9UTFMpCiAjIGlu
Y2x1ZGUgIm1hY3JvX3ByZWRlZi5oIgogIyBpZmRlZiBVU0VfR05VVExTCkBAIC0zNiw2ICs0MSwx
OCBAQAogCiAjaWZuZGVmIE1BQ1JPX1BSRURFRgogCitzdGF0aWMgdm9pZCB0bHNfcGVyX2xpYl9k
YWVtb25faW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lkIHRsc19wZXJfbGliX2RhZW1vbl90aWNrKHZv
aWQpOworc3RhdGljIHVuc2lnbmVkICB0bHNfc2VydmVyX2NyZWRzX2luaXQodm9pZCk7CitzdGF0
aWMgdm9pZCB0bHNfc2VydmVyX2NyZWRzX2ludmFsaWRhdGUodm9pZCk7CitzdGF0aWMgdm9pZCB0
bHNfY2xpZW50X2NyZWRzX2luaXQodHJhbnNwb3J0X2luc3RhbmNlICosIEJPT0wpOworc3RhdGlj
IHZvaWQgdGxzX2NsaWVudF9jcmVkc19pbnZhbGlkYXRlKHRyYW5zcG9ydF9pbnN0YW5jZSAqKTsK
K3N0YXRpYyB2b2lkIHRsc19kYWVtb25fY3JlZHNfcmVsb2FkKHZvaWQpOworc3RhdGljIEJPT0wg
b3B0X3NldF9hbmRfbm9leHBhbmQoY29uc3QgdXNjaGFyICopOworc3RhdGljIEJPT0wgb3B0X3Vu
c2V0X29yX25vZXhwYW5kKGNvbnN0IHVzY2hhciAqKTsKKworCisKIC8qIFRoaXMgbW9kdWxlIGlz
IGNvbXBpbGVkIG9ubHkgd2hlbiBpdCBpcyBzcGVjaWZpY2FsbHkgcmVxdWVzdGVkIGluIHRoZQog
YnVpbGQtdGltZSBjb25maWd1cmF0aW9uLiBIb3dldmVyLCBzb21lIGNvbXBpbGVycyBkb24ndCBs
aWtlIGNvbXBpbGluZyBlbXB0eQogbW9kdWxlcywgc28ga2VlcCB0aGVtIGhhcHB5IHdpdGggYSBk
dW1teSB3aGVuIHNraXBwaW5nIHRoZSByZXN0LiBNYWtlIGl0CkBAIC00NSw3ICs2Miw5IEBACiAK
ICNpZmRlZiBESVNBQkxFX1RMUwogc3RhdGljIHZvaWQgZHVtbXkoaW50IHgpIHsgZHVtbXkoeC0x
KTsgfQotI2Vsc2UKKyNlbHNlCS8qIG1vc3Qgb2YgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgKi8KKwor
Y29uc3QgZXhpbV90bHNsaWJfc3RhdGUJbnVsbF90bHNfcHJlbG9hZCA9IHswfTsKIAogLyogU3Rh
dGljIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VkIGZvciBidWZmZXJpbmcgZGF0YSBieSBib3RoIHNl
dHMgb2YKIGZ1bmN0aW9ucyBhbmQgdGhlIGNvbW1vbiBmdW5jdGlvbnMgYmVsb3cuCkBAIC02Miw2
ICs4MSwxMyBAQAogc3RhdGljIEJPT0wgc3NsX3hmZXJfZXJyb3IgPSBGQUxTRTsKICNlbmRpZgog
CisjaWZkZWYgRVhJTV9IQVZFX0tFVkVOVAorIyBkZWZpbmUgS0VWX1NJWkUgMTYJLyogRWlnaHQg
ZmlsZSxkaXIgcGFpcnMgKi8KK3N0YXRpYyBzdHJ1Y3Qga2V2ZW50IGtldltLRVZfU0laRV07Citz
dGF0aWMgaW50IGtldl91c2VkID0gMDsKKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgdGxzX2Ny
ZWRzX2V4cGlyZSA9IDA7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCiAqICAgICAgIEV4cGFuZCBzdHJpbmc7IGdpdmUgZXJyb3Igb24gZmFpbHVy
ZSAgICAgKgpAQCAtOTYsNiArMTIyLDI5OSBAQAogfQogCiAKKyNpZiBkZWZpbmVkKEVYSU1fSEFW
RV9JTk9USUZZKSB8fCBkZWZpbmVkKEVYSU1fSEFWRV9LRVZFTlQpCisvKiBBZGQgdGhlIGRpcmVj
dG9yeSBmb3IgYSBmaWxlbmFtZSB0byB0aGUgaW5vdGlmeSBoYW5kbGUsIGNyZWF0aW5nIHRoYXQg
aWYKK25lZWRlZC4gIFRoaXMgaXMgZW5vdWdoIHRvIHNlZSBjaGFuZ2VzIHRvIGZpbGVzIGluIHRo
YXQgZGlyLgorUmV0dXJuIGJvb2xlYW4gc3VjY2Vzcy4KKworVGhlIHdvcmQgInN5c3RlbSIgZmFp
bHMsIHdoaWNoIGlzIG9uIHRoZSBzYWZlIHNpZGUgYXMgd2UgZG9uJ3Qga25vdyB3aGF0CitkaXJl
Y3RvcnkgaXQgaW1wbGllcyBub3IgaWYgdGhlIFRMUyBsaWJyYXJ5IGhhbmRsZXMgYSB3YXRjaCBm
b3IgdXMuCisKK1RoZSBzdHJpbmcgInN5c3RlbSxjYWNoZSIgaXMgcmVjb2duaXNlZCBhbmQgZXhw
bGljaXRseSBhY2NlcHRlZCB3aXRob3V0CitzZXR0aW5nIGEgd2F0Y2guICBUaGlzIHBlcm1pdHMg
dGhlIHN5c3RlbSBDQSBidW5kbGUgdG8gYmUgY2FjaGVkIGV2ZW4gdGhvdWdoCit3ZSBoYXZlIG5v
IHdheSB0byB0ZWxsIHdoZW4gaXQgZ2V0cyBtb2RpZmllZCBieSBhbiB1cGRhdGUuCitUaGUgY2Fs
bCBjaGFpbiBmb3IgT3BlblNTTCB1c2VzIGEgKHVuZG9jdW1lbnRlZCkgY2FsbCBpbnRvIHRoZSBs
aWJyYXJ5Cit0byBkaXNjb3ZlciB0aGUgYWN0dWFsIGZpbGUuICBXZSBkb24ndCBrbm93IHdoYXQg
R251VExTIHVzZXMuCisKK0EgZnVsbCBzZXQgb2YgY2FjaGluZyBpbmNsdWRpbmcgdGhlIENBcyB0
YWtlcyAzNW1zIG91dHB1dCBvZmYgb2YgdGhlCitzZXJ2ZXIgdGxzX2luaXQoKSAoR251VExTLCBG
ZWRvcmEgMzIsIDIwMTgtY2xhc3MgeDg2XzY0IGxhcHRvcCBoYXJkd2FyZSkuCisqLworc3RhdGlj
IEJPT0wKK3Rsc19zZXRfb25lX3dhdGNoKGNvbnN0IHVzY2hhciAqIGZpbGVuYW1lKQorIyBpZmRl
ZiBFWElNX0hBVkVfSU5PVElGWQorewordXNjaGFyICogczsKKworaWYgKFVzdHJjbXAoZmlsZW5h
bWUsICJzeXN0ZW0sY2FjaGUiKSA9PSAwKSByZXR1cm4gVFJVRTsKKworaWYgKCEocyA9IFVzdHJy
Y2hyKGZpbGVuYW1lLCAnLycpKSkgcmV0dXJuIEZBTFNFOworcyA9IHN0cmluZ19jb3B5bihmaWxl
bmFtZSwgcyAtIGZpbGVuYW1lKTsJLyogbWVtIHJlbGVhc2VkIGJ5IHRsc19zZXRfd2F0Y2ggKi8K
K0RFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIndhdGNoIGRpciAnJXMnXG4iLCBzKTsKKworLypY
WFggdW5jbGVhciB3aGF0IGVmZmVjdCBzeW1saW5rZWQgZmlsZXMgd2lsbCBoYXZlIGZvciBpbm90
aWZ5ICovCisKK2lmIChpbm90aWZ5X2FkZF93YXRjaCh0bHNfd2F0Y2hfZmQsIENDUyBzLAorICAg
ICAgSU5fT05FU0hPVCB8IElOX0NMT1NFX1dSSVRFIHwgSU5fREVMRVRFIHwgSU5fREVMRVRFX1NF
TEYKKyAgICAgIHwgSU5fTU9WRURfRlJPTSB8IElOX01PVkVEX1RPIHwgSU5fTU9WRV9TRUxGKSA+
PSAwKQorICByZXR1cm4gVFJVRTsKK0RFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIm5vdGlmeV9h
ZGRfd2F0Y2g6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworcmV0dXJuIEZBTFNFOworfQorIyBl
bmRpZgorIyBpZmRlZiBFWElNX0hBVkVfS0VWRU5UCit7Cit1c2NoYXIgKiBzLCAqIHQ7CitpbnQg
ZmQxLCBmZDIsIGksIGosIGNudCA9IDA7CitzdHJ1Y3Qgc3RhdCBzYjsKKyNpZmRlZiBPcGVuQlNE
CitzdHJ1Y3Qga2V2ZW50IGtfZHVtbXk7CitzdHJ1Y3QgdGltZXNwZWMgdHMgPSB7MH07CisjZW5k
aWYKKworZXJybm8gPSAwOworaWYgKFVzdHJjbXAoZmlsZW5hbWUsICJzeXN0ZW0sY2FjaGUiKSA9
PSAwKSByZXR1cm4gVFJVRTsKKworZm9yICg7OykKKyAgeworICBpZiAoa2V2X3VzZWQgPiBLRVZf
U0laRS0yKSB7IHMgPSBVUyJvdXQgb2Yga2V2IHNwYWNlIjsgZ290byBiYWQ7IH0KKyAgaWYgKCEo
cyA9IFVzdHJyY2hyKGZpbGVuYW1lLCAnLycpKSkgcmV0dXJuIEZBTFNFOworICBzID0gc3RyaW5n
X2NvcHluKGZpbGVuYW1lLCBzIC0gZmlsZW5hbWUpOwkvKiBtZW0gcmVsZWFzZWQgYnkgdGxzX3Nl
dF93YXRjaCAqLworCisgIC8qIFRoZSBkaXIgb3BlbiB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYSBz
eW1saW5rIG9uIHRoZSBwYXRoLiBGaW5lOyBpdCdzIHRvbworICBtdWNoIGVmZm9ydCB0byBoYW5k
bGUgYWxsIHBvc3NpYmxlIGNhc2VzOyBqdXN0IHJlZnVzZSB0aGUgcHJlbG9hZC4gKi8KKworICBp
ZiAoKGZkMiA9IG9wZW4oQ0NTIHMsIE9fUkRPTkxZIHwgT19OT0ZPTExPVykpIDwgMCkgeyBzID0g
VVMib3BlbiBkaXIiOyBnb3RvIGJhZDsgfQorCisgIGlmICgobHN0YXQoQ0NTIGZpbGVuYW1lLCAm
c2IpKSA8IDApIHsgcyA9IFVTImxzdGF0IjsgZ290byBiYWQ7IH0KKyAgaWYgKCFTX0lTTE5LKHNi
LnN0X21vZGUpKQorICAgIHsKKyAgICBpZiAoKGZkMSA9IG9wZW4oQ0NTIGZpbGVuYW1lLCBPX1JE
T05MWSB8IE9fTk9GT0xMT1cpKSA8IDApCisgICAgICB7IHMgPSBVUyJvcGVuIGZpbGUiOyBnb3Rv
IGJhZDsgfQorICAgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIndhdGNoIGZpbGUgJyVzJzpc
dCVkXG4iLCBmaWxlbmFtZSwgZmQxKTsKKyAgICBFVl9TRVQoJmtldltrZXZfdXNlZCsrXSwKKwko
dWludHB0cl90KWZkMSwKKwlFVkZJTFRfVk5PREUsCisJRVZfQUREIHwgRVZfRU5BQkxFIHwgRVZf
T05FU0hPVCwKKwlOT1RFX0RFTEVURSB8IE5PVEVfV1JJVEUgfCBOT1RFX0VYVEVORAorCXwgTk9U
RV9BVFRSSUIgfCBOT1RFX1JFTkFNRSB8IE5PVEVfUkVWT0tFLAorCTAsCisJTlVMTCk7CisgICAg
Y250Kys7CisgICAgfQorICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJ3YXRjaCBkaXIgICcl
cyc6XHQlZFxuIiwgcywgZmQyKTsKKyAgRVZfU0VUKCZrZXZba2V2X3VzZWQrK10sCisJKHVpbnRw
dHJfdClmZDIsCisJRVZGSUxUX1ZOT0RFLAorCUVWX0FERCB8IEVWX0VOQUJMRSB8IEVWX09ORVNI
T1QsCisJTk9URV9ERUxFVEUgfCBOT1RFX1dSSVRFIHwgTk9URV9FWFRFTkQKKwl8IE5PVEVfQVRU
UklCIHwgTk9URV9SRU5BTUUgfCBOT1RFX1JFVk9LRSwKKwkwLAorCU5VTEwpOworICBjbnQrKzsK
KworICBpZiAoIShTX0lTTE5LKHNiLnN0X21vZGUpKSkgYnJlYWs7CisKKyAgdCA9IHN0b3JlX2dl
dCgxMDI0LCBHRVRfVU5UQUlOVEVEKTsKKyAgVXN0cm5jcHkodCwgcywgMTAyMik7CisgIGogPSBV
c3RybGVuKHMpOworICB0W2orK10gPSAnLyc7CisgIGlmICgoaSA9IHJlYWRsaW5rKENDUyBmaWxl
bmFtZSwgKHZvaWQgKikodCtqKSwgMTAyMy1qKSkgPCAwKSB7IHMgPSBVUyJyZWFkbGluayI7IGdv
dG8gYmFkOyB9CisgIGZpbGVuYW1lID0gdDsKKyAgKih0ICs9IGkraikgPSAnXDAnOworICBzdG9y
ZV9yZWxlYXNlX2Fib3ZlKHQrMSk7CisgIH0KKworI2lmZGVmIE9wZW5CU0QKK2lmIChrZXZlbnQo
dGxzX3dhdGNoX2ZkLCAma2V2W2tldl91c2VkLWNudF0sIGNudCwgJmtfZHVtbXksIDEsICZ0cykg
Pj0gMCkKKyAgcmV0dXJuIFRSVUU7CisjZWxzZQoraWYgKGtldmVudCh0bHNfd2F0Y2hfZmQsICZr
ZXZba2V2X3VzZWQtY250XSwgY250LCBOVUxMLCAwLCBOVUxMKSA+PSAwKQorICByZXR1cm4gVFJV
RTsKKyNlbmRpZgorcyA9IFVTImtldmVudCI7CisKK2JhZDoKK0RFQlVHKERfdGxzKQorICBpZiAo
ZXJybm8pCisgICAgZGVidWdfcHJpbnRmKCIlczogJXM6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIHMs
IHN0cmVycm9yKGVycm5vKSk7CisgIGVsc2UKKyAgICBkZWJ1Z19wcmludGYoIiVzOiAlc1xuIiwg
X19GVU5DVElPTl9fLCBzKTsKK3JldHVybiBGQUxTRTsKK30KKyMgZW5kaWYJLypFWElNX0hBVkVf
S0VWRU5UKi8KKworCisvKiBDcmVhdGUgYW4gaW5vdGlmeSBmYWNpbGl0eSBpZiBuZWVkZWQuCitU
aGVuIHNldCB3YXRjaGVzIG9uIHRoZSBkaXIgY29udGFpbmluZyB0aGUgZ2l2ZW4gZmlsZSBvciAo
b3B0aW9uYWxseSkKK2xpc3Qgb2YgZmlsZXMuICBSZXR1cm4gYm9vbGVhbiBzdWNjZXNzLiAqLwor
CitzdGF0aWMgQk9PTAordGxzX3NldF93YXRjaChjb25zdCB1c2NoYXIgKiBmaWxlbmFtZSwgQk9P
TCBsaXN0KQoreworcm1hcmsgcjsKK0JPT0wgcmMgPSBGQUxTRTsKKworaWYgKCFmaWxlbmFtZSB8
fCAhKmZpbGVuYW1lKSByZXR1cm4gVFJVRTsKK2lmIChVc3RybmNtcChmaWxlbmFtZSwgInN5c3Rl
bSIsIDYpID09IDApIHJldHVybiBUUlVFOworCitERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJ0
bHNfc2V0X3dhdGNoOiAnJXMnXG4iLCBmaWxlbmFtZSk7CisKK2lmICggIHRsc193YXRjaF9mZCA8
IDAKKyMgaWZkZWYgRVhJTV9IQVZFX0lOT1RJRlkKKyAgICYmICh0bHNfd2F0Y2hfZmQgPSBpbm90
aWZ5X2luaXQxKE9fQ0xPRVhFQykpIDwgMAorIyBlbmRpZgorIyBpZmRlZiBFWElNX0hBVkVfS0VW
RU5UCisgICAmJiAodGxzX3dhdGNoX2ZkID0ga3F1ZXVlKCkpIDwgMAorIyBlbmRpZgorICAgKQor
ICAgIHsKKyAgICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJpbm90aWZ5X2luaXQ6ICVzXG4i
LCBzdHJlcnJvcihlcnJubykpOworICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKK3IgPSBzdG9y
ZV9tYXJrKCk7CisKK2lmIChsaXN0KQorICB7CisgIGludCBzZXAgPSAwOworICBmb3IgKHVzY2hh
ciAqIHM7IHMgPSBzdHJpbmdfbmV4dGlubGlzdCgmZmlsZW5hbWUsICZzZXAsIE5VTEwsIDApOyAp
CisgICAgaWYgKCEocmMgPSB0bHNfc2V0X29uZV93YXRjaChzKSkpIGJyZWFrOworICB9CitlbHNl
CisgIHJjID0gdGxzX3NldF9vbmVfd2F0Y2goZmlsZW5hbWUpOworCitzdG9yZV9yZXNldChyKTsK
K2lmICghcmMpIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoInRsc19zZXRfd2F0Y2goKSBmYWls
IG9uICclcyc6ICVzXG4iLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKK3JldHVybiByYzsK
K30KKworCit2b2lkCit0bHNfd2F0Y2hfZGlzY2FyZF9ldmVudChpbnQgZmQpCit7CisjaWZkZWYg
RVhJTV9IQVZFX0lOT1RJRlkKKyh2b2lkKSByZWFkKGZkLCBiaWdfYnVmZmVyLCBiaWdfYnVmZmVy
X3NpemUpOworI2VuZGlmCisjaWZkZWYgRVhJTV9IQVZFX0tFVkVOVAorc3RydWN0IGtldmVudCBr
ZXY7CitzdHJ1Y3QgdGltZXNwZWMgdCA9IHswfTsKKyh2b2lkKSBrZXZlbnQoZmQsIE5VTEwsIDAs
ICZrZXYsIDEsICZ0KTsKKyNlbmRpZgorfQorI2VuZGlmCS8qRVhJTV9IQVZFX0lOT1RJRlkqLwor
CisKK3ZvaWQKK3Rsc19jbGllbnRfY3JlZHNfcmVsb2FkKEJPT0wgd2F0Y2gpCit7Citmb3IodHJh
bnNwb3J0X2luc3RhbmNlICogdCA9IHRyYW5zcG9ydHM7IHQ7IHQgPSB0LT5uZXh0KQorICBpZiAo
VXN0cmNtcCh0LT5kcml2ZXJfbmFtZSwgInNtdHAiKSA9PSAwKQorICAgIHsKKyAgICB0bHNfY2xp
ZW50X2NyZWRzX2ludmFsaWRhdGUodCk7CisgICAgdGxzX2NsaWVudF9jcmVkc19pbml0KHQsIHdh
dGNoKTsKKyAgICB9Cit9CisKKwordm9pZAordGxzX3dhdGNoX2ludmFsaWRhdGUodm9pZCkKK3sK
K2lmICh0bHNfd2F0Y2hfZmQgPCAwKSByZXR1cm47CisKKyNpZmRlZiBFWElNX0hBVkVfS0VWRU5U
CisvKiBDbG9zZSB0aGUgZmlsZXMgd2UgaGFkIG9wZW4gZm9yIGtldmVudCAqLworZm9yIChpbnQg
aSA9IDA7IGkgPCBrZXZfdXNlZDsgaSsrKQorICB7CisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmlu
dGYoImNsb3Npbmcgd2F0Y2ggZmQ6ICVkXG4iLCAoaW50KSBrZXZbaV0uaWRlbnQpOworICAodm9p
ZCkgY2xvc2UoKGludCkga2V2W2ldLmlkZW50KTsKKyAga2V2W2ldLmlkZW50ID0gKHVpbnRwdHJf
dCktMTsKKyAgfQora2V2X3VzZWQgPSAwOworI2VuZGlmCisKK2Nsb3NlKHRsc193YXRjaF9mZCk7
Cit0bHNfd2F0Y2hfZmQgPSAtMTsKK30KKworCitzdGF0aWMgdm9pZAordGxzX2RhZW1vbl9jcmVk
c19yZWxvYWQodm9pZCkKK3sKK3Vuc2lnbmVkIGxpZmV0aW1lOworCisjaWZkZWYgRVhJTV9IQVZF
X0tFVkVOVAordGxzX3dhdGNoX2ludmFsaWRhdGUoKTsKKyNlbmRpZgorCit0bHNfc2VydmVyX2Ny
ZWRzX2ludmFsaWRhdGUoKTsKK3Rsc19jcmVkc19leHBpcmUgPSAobGlmZXRpbWUgPSB0bHNfc2Vy
dmVyX2NyZWRzX2luaXQoKSkKKyAgPyB0aW1lKE5VTEwpICsgbGlmZXRpbWUgOiAwOworCit0bHNf
Y2xpZW50X2NyZWRzX3JlbG9hZChUUlVFKTsKK30KKworCisvKiBVdGlsaXR5IHByZWRpY2F0ZXMg
Zm9yIHVzZSBieSB0aGUgcGVyLWxpYnJhcnkgY29kZSAqLworc3RhdGljIEJPT0wKK29wdF9zZXRf
YW5kX25vZXhwYW5kKGNvbnN0IHVzY2hhciAqIG9wdCkKK3sgcmV0dXJuIG9wdCAmJiAqb3B0ICYm
IFVzdHJjaHIob3B0LCAnJCcpID09IE5VTEw7IH0KKworc3RhdGljIEJPT0wKK29wdF91bnNldF9v
cl9ub2V4cGFuZChjb25zdCB1c2NoYXIgKiBvcHQpCit7IHJldHVybiAhb3B0IHx8IFVzdHJjaHIo
b3B0LCAnJCcpID09IE5VTEw7IH0KKworCisKKy8qIENhbGxlZCBldmVyeSB0aW1lIHJvdW5kIHRo
ZSBkYWVtb24gbG9vcC4KKworSWYgd2UgcmVsb2FkZWQgZmQtd2F0Y2hlciwgcmV0dXJuIHRoZSBv
bGQgd2F0Y2ggZmQKK2hhdmluZyBtb2RpZmllZCB0aGUgZ2xvYmFsIGZvciB0aGUgbmV3IG9uZS4g
T3RoZXJ3aXNlCityZXR1cm4gLTEuCisqLworCitpbnQKK3Rsc19kYWVtb25fdGljayh2b2lkKQor
eworaW50IG9sZF93YXRjaF9mZCA9IHRsc193YXRjaF9mZDsKKwordGxzX3Blcl9saWJfZGFlbW9u
X3RpY2soKTsKKyNpZiBkZWZpbmVkKEVYSU1fSEFWRV9JTk9USUZZKSB8fCBkZWZpbmVkKEVYSU1f
SEFWRV9LRVZFTlQpCitpZiAodGxzX2NyZWRzX2V4cGlyZSAmJiB0aW1lKE5VTEwpID49IHRsc19j
cmVkc19leHBpcmUpCisgIHsKKyAgLyogVGhlIHNlcnZlciBjZXJ0IGlzIGEgc2VsZnNpZ24sIHdp
dGggbGltaXRlZCBsaWZldGltZS4gIER1bXAgaXQgYW5kCisgIGdlbmVyYXRlIGEgbmV3IG9uZS4g
IFJlbG9hZCB0aGUgcmVzdCBvZiB0aGUgY3JlZHMgYWxzbyBhcyB0aGUgbWFjaGluZXJ5CisgIGlz
IGFsbCB0aGVyZS4gKi8KKworICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJzZWxmc2lnbiBj
ZXJ0IHJvdGF0ZVxuIik7CisgIHRsc19jcmVkc19leHBpcmUgPSAwOworICB0bHNfZGFlbW9uX2Ny
ZWRzX3JlbG9hZCgpOworICByZXR1cm4gb2xkX3dhdGNoX2ZkOworICB9CitlbHNlIGlmICh0bHNf
d2F0Y2hfdHJpZ2dlcl90aW1lICYmIHRpbWUoTlVMTCkgPj0gdGxzX3dhdGNoX3RyaWdnZXJfdGlt
ZSArIDUpCisgIHsKKyAgLyogQ2FsbGVkLCBhZnRlciBhIGRlbGF5IGZvciBtdWx0aXBsZSBmaWxl
IG9wcyB0byBnZXQgZG9uZSwgZnJvbQorICB0aGUgZGFlbW9uIHdoZW4gYW55IG9mIHRoZSB3YXRj
aGVzIGFkZGVkIChhYm92ZSkgZmlyZS4KKyAgRHVtcCB0aGUgc2V0IG9mIHdhdGNoZXMgYW5kIGFy
cmFuZ2UgdG8gcmVsb2FkIGNhY2hlZCBjcmVkcyAod2hpY2gKKyAgd2lsbCBzZXQgdXAgbmV3IHdh
dGNoZXMpLiAqLworCisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIndhdGNoIHRyaWdnZXJl
ZFxuIik7CisgIHRsc193YXRjaF90cmlnZ2VyX3RpbWUgPSB0bHNfY3JlZHNfZXhwaXJlID0gMDsK
KyAgdGxzX2RhZW1vbl9jcmVkc19yZWxvYWQoKTsKKyAgcmV0dXJuIG9sZF93YXRjaF9mZDsKKyAg
fQorI2VuZGlmCityZXR1cm4gLTE7Cit9CisKKy8qIENhbGxlZCBvbmNlIGF0IGRhZW1vbiBzdGFy
dHVwICovCisKK3ZvaWQKK3Rsc19kYWVtb25faW5pdCh2b2lkKQorewordGxzX3Blcl9saWJfZGFl
bW9uX2luaXQoKTsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgogKiAgICAgICAgVGltZXpvbmUgZW52aXJvbm1lbnQgZmxpcHBpbmcgICAg
ICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCkBAIC0zNzIsNyArNjkxLDYgQEAKIHJldHVybiBGQUxTRTsKIH0KIAotCiAvKiBFbnZpcm9u
bWVudCBjbGVhbnVwOiBUaGUgR251VExTIGxpYnJhcnkgdXNlcyBTU0xLRVlMT0dGSUxFIGluIHRo
ZSBlbnZpcm9ubWVudAogYW5kIHdyaXRlcyBhIGZpbGUgYnkgdGhhdCBuYW1lLiAgT3VyIE9wZW5T
U0wgY29kZSBkb2VzIHRoZSBzYW1lLCB1c2luZyBrZXlpbmcKIGluZm8gZnJvbSB0aGUgbGlicmFy
eSBBUEkuCkBAIC00NzgsNiArNzk2LDQ1IEBACiAKIAogCitzdGF0aWMgdm9pZAordGxzX2NsaWVu
dF9yZXNtcHRpb25fa2V5KHRsc19zdXBwb3J0ICogdGxzcCwgc210cF9jb25uZWN0X2FyZ3MgKiBj
b25uX2FyZ3MsCisgIHNtdHBfdHJhbnNwb3J0X29wdGlvbnNfYmxvY2sgKiBvYikKK3sKKyNpZm5k
ZWYgRElTQUJMRV9UTFNfUkVTVU1FCitoY3R4ICogaCA9ICZ0bHNwLT5yZXN1bWVfaGN0eDsKK2Js
b2IgYjsKK2dzdHJpbmcgKiBnOworCitERUJVRyhEX3RscykgaWYgKGNvbm5fYXJncy0+aG9zdF9s
YnNlcnZlcikKKyAgZGVidWdfcHJpbnRmKCJUTFM6IGxic2VydmVyICclcydcbiIsIGNvbm5fYXJn
cy0+aG9zdF9sYnNlcnZlcik7CisKKyMgaWZkZWYgRVhJTV9IQVZFX1NIQTIKK2V4aW1fc2hhX2lu
aXQoaCwgSEFTSF9TSEEyXzI1Nik7CisjIGVsc2UKK2V4aW1fc2hhX2luaXQoaCwgSEFTSF9TSEEx
KTsKKyMgZW5kaWYKK2V4aW1fc2hhX3VwZGF0ZV9zdHJpbmcoaCwgY29ubl9hcmdzLT5ob3N0X2xi
c2VydmVyKTsKKyMgaWZkZWYgU1VQUE9SVF9EQU5FCitpZiAoY29ubl9hcmdzLT5kYW5lKQorICBl
eGltX3NoYV91cGRhdGUoaCwgIENVUyAmY29ubl9hcmdzLT50bHNhX2Ruc2EsIHNpemVvZihkbnNf
YW5zd2VyKSk7CisjIGVuZGlmCitleGltX3NoYV91cGRhdGVfc3RyaW5nKGgsIGNvbm5fYXJncy0+
aG9zdC0+YWRkcmVzcyk7CitleGltX3NoYV91cGRhdGUoaCwgICBDVVMgJmNvbm5fYXJncy0+aG9z
dC0+cG9ydCwgc2l6ZW9mKGNvbm5fYXJncy0+aG9zdC0+cG9ydCkpOworZXhpbV9zaGFfdXBkYXRl
X3N0cmluZyhoLCBjb25uX2FyZ3MtPnNlbmRpbmdfaXBfYWRkcmVzcyk7CitleGltX3NoYV91cGRh
dGVfc3RyaW5nKGgsIG9wZW5zc2xfb3B0aW9ucyk7CitleGltX3NoYV91cGRhdGVfc3RyaW5nKGgs
IG9iLT50bHNfcmVxdWlyZV9jaXBoZXJzKTsKK2V4aW1fc2hhX3VwZGF0ZV9zdHJpbmcoaCwgdGxz
cC0+c25pKTsKKyMgaWZkZWYgRVhJTV9IQVZFX0FMUE4KK2V4aW1fc2hhX3VwZGF0ZV9zdHJpbmco
aCwgb2ItPnRsc19hbHBuKTsKKyMgZW5kaWYKK2V4aW1fc2hhX2ZpbmlzaChoLCAmYik7Citmb3Ig
KGcgPSBzdHJpbmdfZ2V0KGIubGVuKjIrMSk7IGIubGVuLS0gPiAwOyApCisgIGcgPSBzdHJpbmdf
Zm10X2FwcGVuZChnLCAiJTAyeCIsICpiLmRhdGErKyk7Cit0bHNwLT5yZXN1bWVfaW5kZXggPSBz
dHJpbmdfZnJvbV9nc3RyaW5nKGcpOworREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiVExTOiBy
ZXN1bWUgc2Vzc2lvbiBpbmRleCAlc1xuIiwgdGxzcC0+cmVzdW1lX2luZGV4KTsKKyNlbmRpZgor
fQorCiAjZW5kaWYJLyohRElTQUJMRV9UTFMqLwogI2VuZGlmCS8qIU1BQ1JPX1BSRURFRiovCiAK
ZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy90bHNjZXJ0LWdudS5jIGV4aW0vc3JjL3Rsc2NlcnQtZ251
LmMKLS0tIGV4aW0ub3JpZy9zcmMvdGxzY2VydC1nbnUuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAw
MDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvdGxzY2VydC1nbnUuYwkyMDIyLTA2LTIzIDE2OjQx
OjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw2ICsyLDcgQEAKICogICAgIEV4aW0gLSBhbiBJbnRl
cm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1h
aW50YWluZXJzIDIwMjEgLSAyMDIyICovCiAvKiBDb3B5cmlnaHQgKGMpIEplcmVteSBIYXJyaXMg
MjAxNCAtIDIwMTggKi8KIAogLyogVGhpcyBmaWxlIHByb3ZpZGVzIFRMUy9TU0wgc3VwcG9ydCBm
b3IgRXhpbSB1c2luZyB0aGUgR251VExTIGxpYnJhcnksCkBAIC0xMTQsNyArMTE1LDcgQEAKIGlm
IChtb2QgJiYgVXN0cmNtcChtb2QsICJpbnQiKSA9PSAwKQogICByZXR1cm4gc3RyaW5nX3Nwcmlu
dGYoIiV1IiwgKHVuc2lnbmVkKXQpOwogCi1jcCA9IHN0b3JlX2dldChsZW4sIEZBTFNFKTsKK2Nw
ID0gc3RvcmVfZ2V0KGxlbiwgR0VUX1VOVEFJTlRFRCk7CiBpZiAoZi50aW1lc3RhbXBzX3V0YykK
ICAgewogICB1c2NoYXIgKiB0eiA9IHRvX3R6KFVTIkdNVDAiKTsKQEAgLTE0OCw3ICsxNDksNyBA
QAogICAgICE9IEdOVVRMU19FX1NIT1JUX01FTU9SWV9CVUZGRVIpCiAgIHJldHVybiBnX2Vycigi
Z2kwIiwgX19GVU5DVElPTl9fLCByZXQpOwogCi1jcCA9IHN0b3JlX2dldChzaXosIFRSVUUpOwor
Y3AgPSBzdG9yZV9nZXQoc2l6LCBHRVRfVEFJTlRFRCk7CiBpZiAoKHJldCA9IGdudXRsc194NTA5
X2NydF9nZXRfaXNzdWVyX2RuKGNlcnQsIENTIGNwLCAmc2l6KSkgPCAwKQogICByZXR1cm4gZ19l
cnIoImdpMSIsIF9fRlVOQ1RJT05fXywgcmV0KTsKIApAQCAtMjAyLDcgKzIwMyw3IEBACiAgICAg
IT0gR05VVExTX0VfU0hPUlRfTUVNT1JZX0JVRkZFUikKICAgcmV0dXJuIGdfZXJyKCJnczAiLCBf
X0ZVTkNUSU9OX18sIHJldCk7CiAKLWNwMSA9IHN0b3JlX2dldChsZW4qNCsxLCBUUlVFKTsKK2Nw
MSA9IHN0b3JlX2dldChsZW4qNCsxLCBHRVRfVEFJTlRFRCk7CiBpZiAoZ251dGxzX3g1MDlfY3J0
X2dldF9zaWduYXR1cmUoKGdudXRsc194NTA5X2NydF90KWNlcnQsIENTIGNwMSwgJmxlbikgIT0g
MCkKICAgcmV0dXJuIGdfZXJyKCJnczEiLCBfX0ZVTkNUSU9OX18sIHJldCk7CiAKQEAgLTIzMiw3
ICsyMzMsNyBAQAogICAgICE9IEdOVVRMU19FX1NIT1JUX01FTU9SWV9CVUZGRVIpCiAgIHJldHVy
biBnX2VycigiZ3MwIiwgX19GVU5DVElPTl9fLCByZXQpOwogCi1jcCA9IHN0b3JlX2dldChzaXos
IFRSVUUpOworY3AgPSBzdG9yZV9nZXQoc2l6LCBHRVRfVEFJTlRFRCk7CiBpZiAoKHJldCA9IGdu
dXRsc194NTA5X2NydF9nZXRfZG4oY2VydCwgQ1MgY3AsICZzaXopKSA8IDApCiAgIHJldHVybiBn
X2VycigiZ3MxIiwgX19GVU5DVElPTl9fLCByZXQpOwogCkBAIC0yNjAsNyArMjYxLDcgQEAKIGlm
IChyZXQgIT0gR05VVExTX0VfU0hPUlRfTUVNT1JZX0JVRkZFUikKICAgcmV0dXJuIGdfZXJyKCJn
ZTAiLCBfX0ZVTkNUSU9OX18sIHJldCk7CiAKLWNwMSA9IHN0b3JlX2dldChzaXoqNCArIDEsIFRS
VUUpOworY3AxID0gc3RvcmVfZ2V0KHNpeio0ICsgMSwgR0VUX1RBSU5URUQpOwogCiByZXQgPSBn
bnV0bHNfeDUwOV9jcnRfZ2V0X2V4dGVuc2lvbl9ieV9vaWQgKChnbnV0bHNfeDUwOV9jcnRfdClj
ZXJ0LAogICBDUyBvaWQsIGlkeCwgQ1MgY3AxLCAmc2l6LCAmY3JpdCk7CkBAIC0yODgsMTMgKzI4
OSwxMyBAQAogdXNjaGFyICogZWxlOwogaW50IG1hdGNoID0gLTE7CiAKLXdoaWxlIChtb2QpCitp
ZiAobW9kKSB3aGlsZSAoKm1vZCkKICAgewogICBpZiAoKm1vZCA9PSAnPicgJiYgKisrbW9kKSBz
ZXAgPSAqbW9kKys7Ci0gIGVsc2UgaWYgKFVzdHJjbXAobW9kLCAiZG5zIik9PTApIHsgbWF0Y2gg
PSBHTlVUTFNfU0FOX0ROU05BTUU7IG1vZCArPSAzOyB9Ci0gIGVsc2UgaWYgKFVzdHJjbXAobW9k
LCAidXJpIik9PTApIHsgbWF0Y2ggPSBHTlVUTFNfU0FOX1VSSTsgbW9kICs9IDM7IH0KLSAgZWxz
ZSBpZiAoVXN0cmNtcChtb2QsICJtYWlsIik9PTApIHsgbWF0Y2ggPSBHTlVUTFNfU0FOX1JGQzgy
Mk5BTUU7IG1vZCArPSA0OyB9Ci0gIGVsc2UgY29udGludWU7CisgIGVsc2UgaWYgKFVzdHJuY21w
KG1vZCwgImRucyIsIDMpPT0wKSB7IG1hdGNoID0gR05VVExTX1NBTl9ETlNOQU1FOyBtb2QgKz0g
MzsgfQorICBlbHNlIGlmIChVc3RybmNtcChtb2QsICJ1cmkiLCAzKT09MCkgeyBtYXRjaCA9IEdO
VVRMU19TQU5fVVJJOyBtb2QgKz0gMzsgfQorICBlbHNlIGlmIChVc3RybmNtcChtb2QsICJtYWls
IiwgNCk9PTApIHsgbWF0Y2ggPSBHTlVUTFNfU0FOX1JGQzgyMk5BTUU7IG1vZCArPSA0OyB9Cisg
IGVsc2UgYnJlYWs7CiAKICAgaWYgKCptb2QrKyAhPSAnLCcpCiAgICAgYnJlYWs7CkBAIC0zMTYs
NyArMzE3LDcgQEAKICAgICAgIHJldHVybiBnX2VycigiZ3MwIiwgX19GVU5DVElPTl9fLCByZXQp
OwogICAgIH0KIAotICBlbGUgPSBzdG9yZV9nZXQoc2l6KzEsIFRSVUUpOworICBlbGUgPSBzdG9y
ZV9nZXQoc2l6KzEsIEdFVF9UQUlOVEVEKTsKICAgaWYgKChyZXQgPSBnbnV0bHNfeDUwOV9jcnRf
Z2V0X3N1YmplY3RfYWx0X25hbWUoCiAgICAgKGdudXRsc194NTA5X2NydF90KWNlcnQsIGluZGV4
LCBlbGUsICZzaXosIE5VTEwpKSA8IDApCiAgICAgcmV0dXJuIGdfZXJyKCJnczEiLCBfX0ZVTkNU
SU9OX18sIHJldCk7CkBAIC0zOTksNyArNDAwLDcgQEAKICAgICAgIHJldHVybiBnX2VycigiZ2Mw
IiwgX19GVU5DVElPTl9fLCByZXQpOwogICAgIH0KIAotICBlbGUgPSBzdG9yZV9nZXQoc2l6LCBU
UlVFKTsKKyAgZWxlID0gc3RvcmVfZ2V0KHNpeiwgR0VUX1RBSU5URUQpOwogICBpZiAoKHJldCA9
IGdudXRsc194NTA5X2NydF9nZXRfY3JsX2Rpc3RfcG9pbnRzKAogICAgICAgKGdudXRsc194NTA5
X2NydF90KWNlcnQsIGluZGV4LCBlbGUsICZzaXosIE5VTEwsIE5VTEwpKSA8IDApCiAgICAgcmV0
dXJuIGdfZXJyKCJnYzEiLCBfX0ZVTkNUSU9OX18sIHJldCk7CkBAIC00MjIsNyArNDIzLDcgQEAK
IAogaWYgKCAgKGZhaWwgPSBnbnV0bHNfeDUwOV9jcnRfZXhwb3J0KChnbnV0bHNfeDUwOV9jcnRf
dCljZXJ0LAogCUdOVVRMU19YNTA5X0ZNVF9ERVIsIGNwLCAmbGVuKSkgIT0gR05VVExTX0VfU0hP
UlRfTUVNT1JZX0JVRkZFUgotICAgfHwgIShjcCA9IHN0b3JlX2dldCgoaW50KWxlbiwgVFJVRSks
IFRSVUUpCS8qIHRhaW50ZWQgKi8KKyAgIHx8ICEoY3AgPSBzdG9yZV9nZXQoKGludClsZW4sIEdF
VF9UQUlOVEVEKSwgVFJVRSkJLyogdGFpbnRlZCAqLwogICAgfHwgKGZhaWwgPSBnbnV0bHNfeDUw
OV9jcnRfZXhwb3J0KChnbnV0bHNfeDUwOV9jcnRfdCljZXJ0LAogICAgICAgICBHTlVUTFNfWDUw
OV9GTVRfREVSLCBjcCwgJmxlbikpCiAgICApCkBAIC00NDcsNyArNDQ4LDcgQEAKICAgICAhPSBH
TlVUTFNfRV9TSE9SVF9NRU1PUllfQlVGRkVSKQogICByZXR1cm4gZ19lcnIoImdmMCIsIF9fRlVO
Q1RJT05fXywgcmV0KTsKIAotY3AgPSBzdG9yZV9nZXQoc2l6KjMrMSwgVFJVRSk7CitjcCA9IHN0
b3JlX2dldChzaXoqMysxLCBHRVRfVEFJTlRFRCk7CiBpZiAoKHJldCA9IGdudXRsc194NTA5X2Ny
dF9nZXRfZmluZ2VycHJpbnQoY2VydCwgYWxnbywgY3AsICZzaXopKSA8IDApCiAgIHJldHVybiBn
X2VycigiZ2YxIiwgX19GVU5DVElPTl9fLCByZXQpOwogCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMv
dGxzY2VydC1vcGVuc3NsLmMgZXhpbS9zcmMvdGxzY2VydC1vcGVuc3NsLmMKLS0tIGV4aW0ub3Jp
Zy9zcmMvdGxzY2VydC1vcGVuc3NsLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAz
MDAKKysrIGV4aW0vc3JjL3Rsc2NlcnQtb3BlbnNzbC5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAw
MDAwMDAwICswMzAwCkBAIC0yLDYgKzIsNyBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1h
aWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5l
cnMgMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBKZXJlbXkgSGFycmlzIDIwMTQgLSAyMDE5ICov
CiAKIC8qIFRoaXMgbW9kdWxlIHByb3ZpZGVzIFRMUyAoYWthIFNTTCkgc3VwcG9ydCBmb3IgRXhp
bSB1c2luZyB0aGUgT3BlblNTTApAQCAtMTcxLDcgKzE3Miw3IEBACiAKICAgICAgIC8qIGNvbnZl
cnQgdG8gc3RyaW5nIGluIG91ciBmb3JtYXQgKi8KICAgICAgIGxlbiA9IDMyOwotICAgICAgcyA9
IHN0b3JlX2dldChsZW4sIEZBTFNFKTsKKyAgICAgIHMgPSBzdG9yZV9nZXQobGVuLCBHRVRfVU5U
QUlOVEVEKTsKICAgICAgIHN0cmZ0aW1lKENTIHMsIChzaXplX3QpbGVuLCAiJWIgJWUgJVQgJVkg
JXoiLCB0bV9wKTsKICAgICAgIH0KICAgICB9CkBAIC0zMzUsNyArMzM2LDcgQEAKIC8qIGJpbmFy
eSBkYXRhLCBERVIgZW5jb2RlZCAqLwogLyoganVzdCBkdW1wIGZvciBub3cgKi8KIGxlbiA9IEJJ
T19nZXRfbWVtX2RhdGEoYnAsICZjcDEpOwotY3AzID0gY3AyID0gc3RvcmVfZ2V0KGxlbiozKzEs
IFRSVUUpOworY3AzID0gY3AyID0gc3RvcmVfZ2V0KGxlbiozKzEsIEdFVF9UQUlOVEVEKTsKIAog
d2hpbGUobGVuKQogICB7CkBAIC01MDIsNyArNTAzLDcgQEAKICAgZXhwYW5kX3N0cmluZ19tZXNz
YWdlID0gVVMidGxzX2NlcnRfZnBydDogb3V0IG9mIG1lbVxuIjsKICAgcmV0dXJuIE5VTEw7CiAg
IH0KLWNwID0gc3RvcmVfZ2V0KG4qMisxLCBUUlVFKTsKK2NwID0gc3RvcmVfZ2V0KG4qMisxLCBH
RVRfVEFJTlRFRCk7CiBmb3IgKGludCBqID0gMDsgaiA8IChpbnQpbjsgaisrKSBzcHJpbnRmKENT
IGNwKzIqaiwgIiUwMlgiLCBtZFtqXSk7CiByZXR1cm4oY3ApOwogfQpkaWZmIC11ciBleGltLm9y
aWcvc3JjL3Rscy1nbnUuYyBleGltL3NyYy90bHMtZ251LmMKLS0tIGV4aW0ub3JpZy9zcmMvdGxz
LWdudS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy90
bHMtZ251LmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsMTEgKzIs
MTAgQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAq
CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisv
KiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIyICovCiAvKiBD
b3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBD
b3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KLS8qIFNlZSB0aGUgZmls
ZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCi0KIC8q
IENvcHlyaWdodCAoYykgUGhpbCBQZW5ub2NrIDIwMTIgKi8KKy8qIFNlZSB0aGUgZmlsZSBOT1RJ
Q0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIC8qIFRoaXMg
ZmlsZSBwcm92aWRlcyBUTFMvU1NMIHN1cHBvcnQgZm9yIEV4aW0gdXNpbmcgdGhlIEdudVRMUyBs
aWJyYXJ5LAogb25lIG9mIHRoZSBhdmFpbGFibGUgc3VwcG9ydGVkIGltcGxlbWVudGF0aW9ucy4g
IFRoaXMgZmlsZSBpcyAjaW5jbHVkZWQgaW50bwpAQCAtOTAsOSArODksNiBAQAogI2lmIEdOVVRM
U19WRVJTSU9OX05VTUJFUiA+PSAweDAzMDUwNiAmJiAhZGVmaW5lZChESVNBQkxFX09DU1ApCiAj
IGRlZmluZSBTVVBQT1JUX1NSVl9PQ1NQX1NUQUNLCiAjZW5kaWYKLSNpZiBHTlVUTFNfVkVSU0lP
Tl9OVU1CRVIgPj0gMHgwMzA2MDAKLSMgZGVmaW5lIEdOVVRMU19BVVRPX0RIUEFSQU1TCi0jZW5k
aWYKICNpZiBHTlVUTFNfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMzA2MDMKICMgZGVmaW5lIEVYSU1f
SEFWRV9UTFMxXzMKICMgZGVmaW5lIFNVUFBPUlRfR05VVExTX0VYVF9SQVdfUEFSU0UKQEAgLTEx
MSw5ICsxMDcsMTcgQEAKICMgZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1RM
U19SRVNVTUUKLSMgaWYgR05VVExTX1ZFUlNJT05fTlVNQkVSIDwgMHgwMzA2MDMKLSMgIGVycm9y
IEdOVVRMUyB2ZXJzaW9uIHRvbyBlYXJseSBmb3Igc2Vzc2lvbi1yZXN1bXB0aW9uCisjaWZuZGVm
IERJU0FCTEVfVExTX1JFU1VNRQorIyBpZiBHTlVUTFNfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMzA2
MDMKKyMgIGRlZmluZSBFWElNX0hBVkVfVExTX1JFU1VNRQorIyBlbHNlCisjICB3YXJuaW5nICJH
bnVUTFMgbGlicmFyeSB2ZXJzaW9uIHRvbyBvbGQ7IHJlc3VtcHRpb24gdW5zdXBwb3J0ZWQiCisj
IGVuZGlmCisjZW5kaWYKKworI2lmIEdOVVRMU19WRVJTSU9OX05VTUJFUiA+PSAweDAzMDIwMAor
IyBpZmRlZiBTVVBQT1JUX0dOVVRMU19FWFRfUkFXX1BBUlNFCisjICBkZWZpbmUgRVhJTV9IQVZF
X0FMUE4KICMgZW5kaWYKICNlbmRpZgogCkBAIC0xMzEsNyArMTM1LDcgQEAKIHZvaWQKIG9wdGlv
bnNfdGxzKHZvaWQpCiB7Ci0jIGlmZGVmIEVYUEVSSU1FTlRBTF9UTFNfUkVTVU1FCisjIGlmbmRl
ZiBESVNBQkxFX1RMU19SRVNVTUUKIGJ1aWx0aW5fbWFjcm9fY3JlYXRlX3ZhcihVUyJfUkVTVU1F
X0RFQ09ERSIsIFJFU1VNRV9ERUNPREVfU1RSSU5HICk7CiAjIGVuZGlmCiAjIGlmZGVmIEVYSU1f
SEFWRV9UTFMxXzMKQEAgLTE0Myw2ICsxNDcsMTIgQEAKICMgaWZkZWYgU1VQUE9SVF9TUlZfT0NT
UF9TVEFDSwogYnVpbHRpbl9tYWNyb19jcmVhdGUoVVMiX0hBVkVfVExTX09DU1BfTElTVCIpOwog
IyBlbmRpZgorI2lmIGRlZmluZWQoRVhJTV9IQVZFX0lOT1RJRlkpIHx8IGRlZmluZWQoRVhJTV9I
QVZFX0tFVkVOVCkKK2J1aWx0aW5fbWFjcm9fY3JlYXRlKFVTIl9IQVZFX1RMU19DQV9DQUNIRSIp
OworIyBlbmRpZgorIyBpZmRlZiBFWElNX0hBVkVfQUxQTgorYnVpbHRpbl9tYWNyb19jcmVhdGUo
VVMiX0hBVkVfVExTX0FMUE4iKTsKKyMgZW5kaWYKIH0KICNlbHNlCiAKQEAgLTE3Niw4ICsxODYs
MTEgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgZXhpbV9nbnV0bHNfc3RhdGUgewogICBnbnV0bHNfc2Vz
c2lvbl90CXNlc3Npb247Ci0gIGdudXRsc19jZXJ0aWZpY2F0ZV9jcmVkZW50aWFsc190IHg1MDlf
Y3JlZDsKLSAgZ251dGxzX3ByaW9yaXR5X3QJcHJpb3JpdHlfY2FjaGU7CisKKyAgZXhpbV90bHNs
aWJfc3RhdGUJbGliX3N0YXRlOworI2RlZmluZSB4NTA5X2NyZWQJCWxpYmRhdGEwCisjZGVmaW5l
IHByaV9jYWNoZQkJbGliZGF0YTEKKwogICBlbnVtIHBlZXJfdmVyaWZ5X3JlcXVpcmVtZW50IHZl
cmlmeV9yZXF1aXJlbWVudDsKICAgaW50CQkJZmRfaW47CiAgIGludAkJCWZkX291dDsKQEAgLTI0
MywxNSArMjU2LDE3IEBACiBYWFggQnV0IHNlZSBnbnV0bHNfc2Vzc2lvbl9nZXRfcHRyKCkKICov
CiAKLXN0YXRpYyBleGltX2dudXRsc19zdGF0ZV9zdCBzdGF0ZV9zZXJ2ZXI7CitzdGF0aWMgZXhp
bV9nbnV0bHNfc3RhdGVfc3Qgc3RhdGVfc2VydmVyID0geworICAvKiBhbGwgZWxlbWVudHMgbm90
IGV4cGxpY2l0bHkgaW50aWFsaXNlZCBoZXJlIGdldCAwL05VTEwvRkFMU0UgKi8KKyAgLmZkX2lu
ID0JCS0xLAorICAuZmRfb3V0ID0JCS0xLAorfTsKIAotI2lmbmRlZiBHTlVUTFNfQVVUT19ESFBB
UkFNUwogLyogZGhfcGFyYW1zIGFyZSBpbml0aWFsaXNlZCBvbmNlIHdpdGhpbiB0aGUgbGlmZXRp
bWUgb2YgYSBwcm9jZXNzIHVzaW5nIFRMUzsKIGlmIHdlIHVzZWQgVExTIGluIGEgbG9uZy1saXZl
ZCBkYWVtb24sIHdlJ2QgaGF2ZSB0byByZWNvbnNpZGVyIHRoaXMuICBCdXQgd2UKIGRvbid0IHdh
bnQgdG8gcmVwZWF0IHRoaXMuICovCiAKIHN0YXRpYyBnbnV0bHNfZGhfcGFyYW1zX3QgZGhfc2Vy
dmVyX3BhcmFtcyA9IE5VTEw7Ci0jZW5kaWYKIAogc3RhdGljIGludCBzc2xfc2Vzc2lvbl90aW1l
b3V0ID0gNzIwMDsJLyogVHdvIGhvdXJzICovCiAKQEAgLTI2NiwxMCArMjgxLDE0IEBACiBzdGF0
aWMgQk9PTCBleGltX3Rlc3RoYXJuZXNzX2Rpc2FibGVfb2NzcF92YWxpZGl0eV9jaGVjayA9IEZB
TFNFOwogI2VuZGlmCiAKLSNpZmRlZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQorI2lmZGVmIEVY
SU1fSEFWRV9BTFBOCitzdGF0aWMgaW50IHNlcnZlcl9zZWVuX2FscG4gPSAtMTsJLyogY291bnQg
b2YgbmFtZXMgKi8KKyNlbmRpZgorI2lmZGVmIEVYSU1fSEFWRV9UTFNfUkVTVU1FCiBzdGF0aWMg
Z251dGxzX2RhdHVtX3Qgc2VydmVyX3Nlc3N0aWNrZXRfa2V5OwogI2VuZGlmCiAKKwogLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCiAvKiBtYWNyb3MgKi8KIApAQCAtMjk2LDcgKzMxNSw3IEBACiAjIGRl
ZmluZSBFWElNX1NFUlZFUl9ESF9CSVRTX1BSRTJfMTIgMTAyNAogI2VuZGlmCiAKLSNkZWZpbmUg
ZXhwYW5kX2NoZWNrX3Rsc3ZhcihWYXJuYW1lLCBlcnJzdHIpIFwKKyNkZWZpbmUgRXhwYW5kX2No
ZWNrX3Rsc3ZhcihWYXJuYW1lLCBlcnJzdHIpIFwKICAgZXhwYW5kX2NoZWNrKHN0YXRlLT5WYXJu
YW1lLCBVUyAjVmFybmFtZSwgJnN0YXRlLT5leHBfIyNWYXJuYW1lLCBlcnJzdHIpCiAKICNpZiBH
TlVUTFNfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMjBjMDAKQEAgLTMxNCw2ICszMzMsOSBAQAogIyBl
bmRpZiAvKiBBVk9JRF9HTlVUTFNfUEtDUzExICovCiAjZW5kaWYKIAorI2lmIEdOVVRMU19WRVJT
SU9OX05VTUJFUiA+PSAweDAzMDQwNAorIyBkZWZpbmUgSEFWRV9HTlVUTFNfUFJGX1JGQzU3MDUK
KyNlbmRpZgogCiAKIApAQCAtMzI2LDM0ICszNDgsMTMgQEAKIAogc3RhdGljIGludCBleGltX3Nu
aV9oYW5kbGluZ19jYihnbnV0bHNfc2Vzc2lvbl90IHNlc3Npb24pOwogCi0jaWZkZWYgRVhQRVJJ
TUVOVEFMX1RMU19SRVNVTUUKKyNpZmRlZiBFWElNX0hBVkVfVExTX1JFU1VNRQogc3RhdGljIGlu
dAogdGxzX3NlcnZlcl90aWNrZXRfY2IoZ251dGxzX3Nlc3Npb25fdCBzZXNzLCB1X2ludCBodHlw
ZSwgdW5zaWduZWQgd2hlbiwKICAgdW5zaWduZWQgaW5jb21pbmcsIGNvbnN0IGdudXRsc19kYXR1
bV90ICogbXNnKTsKICNlbmRpZgogCiAKLS8qIERhZW1vbiBvbmUtdGltZSBpbml0aWFsaXNhdGlv
biAqLwotdm9pZAotdGxzX2RhZW1vbl9pbml0KHZvaWQpCi17Ci0jaWZkZWYgRVhQRVJJTUVOVEFM
X1RMU19SRVNVTUUKLS8qIFdlIGFyZSBkZXBlbmRlbnQgb24gdGhlIEdudVRMUyBpbXBsZW1lbnRh
dGlvbiBvZiB0aGUgU2Vzc2lvbiBUaWNrZXQKLWVuY3J5cHRpb247IGJvdGggdGhlIHN0cmVuZ3Ro
IGFuZCB0aGUga2V5IHJvdGF0aW9uIHBlcmlvZC4gIFdlIGhvcGUgdGhhdAotdGhlIHN0cmVuZ3Ro
IGF0IGxlYXN0IG1hdGNoZXMgdGhhdCBvZiB0aGUgY2lwaGVyc3VpdGUgKGJ1dCBHbnVUTFMgZG9l
cyBub3QKLWRvY3VtZW50IHRoaXMpLiAqLwotCi1zdGF0aWMgQk9PTCBvbmNlID0gRkFMU0U7Ci1p
ZiAob25jZSkgcmV0dXJuOwotb25jZSA9IFRSVUU7Ci1nbnV0bHNfc2Vzc2lvbl90aWNrZXRfa2V5
X2dlbmVyYXRlKCZzZXJ2ZXJfc2Vzc3RpY2tldF9rZXkpOwkvKiA+PSAyLjEwLjAgKi8KLWlmIChm
LnJ1bm5pbmdfaW5fdGVzdF9oYXJuZXNzKSBzc2xfc2Vzc2lvbl90aW1lb3V0ID0gNjsKLSNlbmRp
ZgotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIFN0YXRpYyBmdW5jdGlvbnMgKi8KLQog
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAg
ICAgICAgICAgICBIYW5kbGUgVExTIGVycm9yICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzg3LDEwICszODgs
MTUgQEAKIAogCiBzdGF0aWMgaW50Ci10bHNfZXJyb3JfZ251KGNvbnN0IHVzY2hhciAqcHJlZml4
LCBpbnQgZXJyLCBjb25zdCBob3N0X2l0ZW0gKmhvc3QsCit0bHNfZXJyb3JfZ251KGV4aW1fZ251
dGxzX3N0YXRlX3N0ICogc3RhdGUsIGNvbnN0IHVzY2hhciAqcHJlZml4LCBpbnQgZXJyLAogICB1
c2NoYXIgKiogZXJyc3RyKQogewotcmV0dXJuIHRsc19lcnJvcihwcmVmaXgsIFVTIGdudXRsc19z
dHJlcnJvcihlcnIpLCBob3N0LCBlcnJzdHIpOworcmV0dXJuIHRsc19lcnJvcihwcmVmaXgsCisg
IHN0YXRlICYmIGVyciA9PSBHTlVUTFNfRV9GQVRBTF9BTEVSVF9SRUNFSVZFRAorICA/IFVTIGdu
dXRsc19hbGVydF9nZXRfbmFtZShnbnV0bHNfYWxlcnRfZ2V0KHN0YXRlLT5zZXNzaW9uKSkKKyAg
OiBVUyBnbnV0bHNfc3RyZXJyb3IoZXJyKSwKKyAgc3RhdGUgPyBzdGF0ZS0+aG9zdCA6IE5VTEws
CisgIGVycnN0cik7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQwMSw2ICs0MDcsMTIxIEBACiB9CiAK
IAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBJbml0aWFsaXNhdGlvbiAqLworCisjaWZuZGVm
IERJU0FCTEVfT0NTUAorCitzdGF0aWMgQk9PTAordGxzX2lzX2J1Z2d5X29jc3Aodm9pZCkKK3sK
K2NvbnN0IHVzY2hhciAqIHM7Cit1c2NoYXIgbWFqLCBtaWQsIG1pYzsKKworcyA9IENVUyBnbnV0
bHNfY2hlY2tfdmVyc2lvbihOVUxMKTsKK21haiA9IGF0b2koQ0NTIHMpOworaWYgKG1haiA9PSAz
KQorICB7CisgIHdoaWxlICgqcyAmJiAqcyAhPSAnLicpIHMrKzsKKyAgbWlkID0gYXRvaShDQ1Mg
KytzKTsKKyAgaWYgKG1pZCA8PSAyKQorICAgIHJldHVybiBUUlVFOworICBlbHNlIGlmIChtaWQg
Pj0gNSkKKyAgICByZXR1cm4gRkFMU0U7CisgIGVsc2UKKyAgICB7CisgICAgd2hpbGUgKCpzICYm
ICpzICE9ICcuJykgcysrOworICAgIG1pYyA9IGF0b2koQ0NTICsrcyk7CisgICAgcmV0dXJuIG1p
YyA8PSAobWlkID09IDMgPyAxNiA6IDMpOworICAgIH0KKyAgfQorcmV0dXJuIEZBTFNFOworfQor
CisjZW5kaWYKKworCitzdGF0aWMgaW50Cit0bHNfZ19pbml0KHVzY2hhciAqKiBlcnJzdHIpCit7
CitpbnQgcmM7CitERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJHbnVUTFMgZ2xvYmFsIGluaXQg
cmVxdWlyZWRcbiIpOworCisjaWYgZGVmaW5lZChIQVZFX0dOVVRMU19QS0NTMTEpICYmICFkZWZp
bmVkKEdOVVRMU19BVVRPX1BLQ1MxMV9NQU5VQUwpCisvKiBCeSBkZWZhdWx0LCBnbnV0bHNfZ2xv
YmFsX2luaXQgd2lsbCBpbml0IFBLQ1MxMSBzdXBwb3J0IGluIGF1dG8gbW9kZSwKK3doaWNoIGxv
YWRzIG1vZHVsZXMgZnJvbSBhIGNvbmZpZyBmaWxlLCB3aGljaCBzb3VuZHMgZ29vZCBhbmQgbWF5
IGJlIHdhbnRlZAorYnkgc29tZSBzeXNhZG1pbiwgYnV0IGFsc28gbWVhbnMgaW4gY29tbW9uIGNv
bmZpZ3VyYXRpb25zIHRoYXQgR05PTUUga2V5cmluZworZW52aXJvbm1lbnQgdmFyaWFibGVzIGFy
ZSB1c2VkIGFuZCBzbyBicmVha3MgZm9yIHVzZXJzIGNhbGxpbmcgbWFpbHEuCitUbyBwcmV2ZW50
IHRoaXMsIHdlIGluaXQgUEtDUzExIGZpcnN0LCB3aGljaCBpcyB0aGUgZG9jdW1lbnRlZCBhcHBy
b2FjaC4gKi8KKworaWYgKCFnbnV0bHNfYWxsb3dfYXV0b19wa2NzMTEpCisgIGlmICgocmMgPSBn
bnV0bHNfcGtjczExX2luaXQoR05VVExTX1BLQ1MxMV9GTEFHX01BTlVBTCwgTlVMTCkpKQorICAg
IHJldHVybiB0bHNfZXJyb3JfZ251KE5VTEwsIFVTImdudXRsc19wa2NzMTFfaW5pdCIsIHJjLCBl
cnJzdHIpOworI2VuZGlmCisKKyNpZm5kZWYgR05VVExTX0FVVE9fR0xPQkFMX0lOSVQKK2lmICgo
cmMgPSBnbnV0bHNfZ2xvYmFsX2luaXQoKSkpCisgIHJldHVybiB0bHNfZXJyb3JfZ251KE5VTEws
IFVTImdudXRsc19nbG9iYWxfaW5pdCIsIHJjLCBlcnJzdHIpOworI2VuZGlmCisKKyNpZiBFWElN
X0dOVVRMU19MSUJSQVJZX0xPR19MRVZFTCA+PSAwCitERUJVRyhEX3RscykKKyAgeworICBnbnV0
bHNfZ2xvYmFsX3NldF9sb2dfZnVuY3Rpb24oZXhpbV9nbnV0bHNfbG9nZ2VyX2NiKTsKKyAgLyog
YXJiaXRyYXJpbHkgY2hvc2VuIGxldmVsOyBidW1wIHVwIHRvIDkgZm9yIG1vcmUgKi8KKyAgZ251
dGxzX2dsb2JhbF9zZXRfbG9nX2xldmVsKEVYSU1fR05VVExTX0xJQlJBUllfTE9HX0xFVkVMKTsK
KyAgfQorI2VuZGlmCisKKyNpZm5kZWYgRElTQUJMRV9PQ1NQCitpZiAodGxzX29jc3BfZmlsZSAm
JiAoZ251dGxzX2J1Z2d5X29jc3AgPSB0bHNfaXNfYnVnZ3lfb2NzcCgpKSkKKyAgbG9nX3dyaXRl
KDAsIExPR19NQUlOLCAiT0NTUCB1bnVzYWJsZSB3aXRoIHRoaXMgR251VExTIGxpYnJhcnkgdmVy
c2lvbiIpOworI2VuZGlmCisKK2V4aW1fZ251dGxzX2Jhc2VfaW5pdF9kb25lID0gVFJVRTsKK3Jl
dHVybiBPSzsKK30KKworCisKKy8qIERhZW1vbi1jYWxsIGJlZm9yZSBlYWNoIGNvbm5lY3Rpb24u
ICBOb3RoaW5nIHRvIGRvIGZvciBHbnVUTFMuICovCisKK3N0YXRpYyB2b2lkCit0bHNfcGVyX2xp
Yl9kYWVtb25fdGljayh2b2lkKQoreworfQorCisvKiBEYWVtb24gb25lLXRpbWUgaW5pdGlhbGlz
YXRpb24gKi8KKworc3RhdGljIHZvaWQKK3Rsc19wZXJfbGliX2RhZW1vbl9pbml0KHZvaWQpCit7
Cit1c2NoYXIgKiBkdW1teV9lcnJzdHI7CitzdGF0aWMgQk9PTCBvbmNlID0gRkFMU0U7CisKK2lm
ICghZXhpbV9nbnV0bHNfYmFzZV9pbml0X2RvbmUpCisgIHRsc19nX2luaXQoJmR1bW15X2VycnN0
cik7CisKK2lmICghb25jZSkKKyAgeworICBvbmNlID0gVFJVRTsKKworI2lmZGVmIEVYSU1fSEFW
RV9UTFNfUkVTVU1FCisgIC8qIFdlIGFyZSBkZXBlbmRlbnQgb24gdGhlIEdudVRMUyBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgU2Vzc2lvbiBUaWNrZXQKKyAgZW5jcnlwdGlvbjsgYm90aCB0aGUgc3Ry
ZW5ndGggYW5kIHRoZSBrZXkgcm90YXRpb24gcGVyaW9kLiAgV2UgaG9wZSB0aGF0CisgIHRoZSBz
dHJlbmd0aCBhdCBsZWFzdCBtYXRjaGVzIHRoYXQgb2YgdGhlIGNpcGhlcnN1aXRlIChidXQgR251
VExTIGRvZXMgbm90CisgIGRvY3VtZW50IHRoaXMpLiAqLworCisgIGdudXRsc19zZXNzaW9uX3Rp
Y2tldF9rZXlfZ2VuZXJhdGUoJnNlcnZlcl9zZXNzdGlja2V0X2tleSk7CS8qID49IDIuMTAuMCAq
LworICBpZiAoZi5ydW5uaW5nX2luX3Rlc3RfaGFybmVzcykgc3NsX3Nlc3Npb25fdGltZW91dCA9
IDY7CisjZW5kaWYKKworICB0bHNfZGFlbW9uX2NyZWRzX3JlbG9hZCgpOworICB9Cit9CisKKy8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgogKiAgICBEZWFsIHdpdGggbG9nZ2luZyBlcnJvcnMgZHVyaW5nIEkv
TyAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCkBAIC00MjIsMTEgKzU0MywxNCBAQAogY29uc3QgdXNjaGFyICogbXNnOwogdXNjaGFy
ICogZXJyc3RyOwogCi1pZiAocmMgPT0gR05VVExTX0VfRkFUQUxfQUxFUlRfUkVDRUlWRUQpCi0g
IG1zZyA9IHN0cmluZ19zcHJpbnRmKCJBIFRMUyBmYXRhbCBhbGVydCBoYXMgYmVlbiByZWNlaXZl
ZDogJXMiLAotICAgIFVTIGdudXRsc19hbGVydF9nZXRfbmFtZShnbnV0bHNfYWxlcnRfZ2V0KHN0
YXRlLT5zZXNzaW9uKSkpOwotZWxzZQotICBtc2cgPSBVUyBnbnV0bHNfc3RyZXJyb3IocmMpOwor
bXNnID0gcmMgPT0gR05VVExTX0VfRkFUQUxfQUxFUlRfUkVDRUlWRUQKKyAgPyBzdHJpbmdfc3By
aW50ZigiQSBUTFMgZmF0YWwgYWxlcnQgaGFzIGJlZW4gcmVjZWl2ZWQ6ICVzIiwKKyAgICAgIFVT
IGdudXRsc19hbGVydF9nZXRfbmFtZShnbnV0bHNfYWxlcnRfZ2V0KHN0YXRlLT5zZXNzaW9uKSkp
CisjaWZkZWYgR05VVExTX0VfUFJFTUFUVVJFX1RFUk1JTkFUSU9OCisgIDogcmMgPT0gR05VVExT
X0VfUFJFTUFUVVJFX1RFUk1JTkFUSU9OICYmIGVycm5vCisgID8gc3RyaW5nX3NwcmludGYoIiVz
OiBzeXNjYWxsOiAlcyIsIFVTIGdudXRsc19zdHJlcnJvcihyYyksIHN0cmVycm9yKGVycm5vKSkK
KyNlbmRpZgorICA6IFVTIGdudXRsc19zdHJlcnJvcihyYyk7CiAKICh2b2lkKSB0bHNfZXJyb3Io
d2hlbiwgbXNnLCBzdGF0ZS0+aG9zdCwgJmVycnN0cik7CiAKQEAgLTUwMywxMSArNjI3LDYgQEAK
IHN0YXRpYyB2b2lkCiBleHRyYWN0X2V4aW1fdmFyc19mcm9tX3Rsc19zdGF0ZShleGltX2dudXRs
c19zdGF0ZV9zdCAqIHN0YXRlKQogewotI2lmZGVmIEhBVkVfR05VVExTX1NFU1NJT05fQ0hBTk5F
TF9CSU5ESU5HCi1pbnQgb2xkX3Bvb2w7Ci1pbnQgcmM7Ci1nbnV0bHNfZGF0dW1fdCBjaGFubmVs
OwotI2VuZGlmCiB0bHNfc3VwcG9ydCAqIHRsc3AgPSBzdGF0ZS0+dGxzcDsKIAogdGxzcC0+YWN0
aXZlLnNvY2sgPSBzdGF0ZS0+ZmRfb3V0OwpAQCAtNTI1LDIxICs2NDQsNDAgQEAKIAogdGxzcC0+
Y2hhbm5lbGJpbmRpbmcgPSBOVUxMOwogI2lmZGVmIEhBVkVfR05VVExTX1NFU1NJT05fQ0hBTk5F
TF9CSU5ESU5HCi1jaGFubmVsLmRhdGEgPSBOVUxMOwotY2hhbm5lbC5zaXplID0gMDsKLWlmICgo
cmMgPSBnbnV0bHNfc2Vzc2lvbl9jaGFubmVsX2JpbmRpbmcoc3RhdGUtPnNlc3Npb24sIEdOVVRM
U19DQl9UTFNfVU5JUVVFLCAmY2hhbm5lbCkpKQotICB7IERFQlVHKERfdGxzKSBkZWJ1Z19wcmlu
dGYoIkNoYW5uZWwgYmluZGluZyBlcnJvcjogJXNcbiIsIGdudXRsc19zdHJlcnJvcihyYykpOyB9
Ci1lbHNlCiAgIHsKLSAgLyogRGVjbGFyZSB0aGUgdGFpbnRlZG5lc3Mgb2YgdGhlIGJpbmRpbmcg
aW5mby4gIE9uIHNlcnZlciwgdW50YWludGVkOyBvbgotICBjbGllbnQsIHRhaW50ZWQgLSBiZWlu
ZyB0aGUgRmluaXNoIG1zZyBmcm9tIHRoZSBzZXJ2ZXIuICovCisgIGdudXRsc19kYXR1bV90IGNo
YW5uZWwgPSB7LmRhdGEgPSBOVUxMLCAuc2l6ZSA9IDB9OworICB1c2NoYXIgKiBidWY7CisgIGlu
dCByYzsKIAotICBvbGRfcG9vbCA9IHN0b3JlX3Bvb2w7Ci0gIHN0b3JlX3Bvb2wgPSBQT09MX1BF
Uk07Ci0gIHRsc3AtPmNoYW5uZWxiaW5kaW5nID0gYjY0ZW5jb2RlX3RhaW50KENVUyBjaGFubmVs
LmRhdGEsIChpbnQpY2hhbm5lbC5zaXplLAotCQkJCQkgICEhc3RhdGUtPmhvc3QpOwotICBzdG9y
ZV9wb29sID0gb2xkX3Bvb2w7Ci0gIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIkhhdmUgY2hh
bm5lbCBiaW5kaW5ncyBjYWNoZWQgZm9yIHBvc3NpYmxlIGF1dGggdXNhZ2VcbiIpOworIyBpZmRl
ZiBIQVZFX0dOVVRMU19QUkZfUkZDNTcwNQorICAvKiBPbGRlciBsaWJyYXJpZXMgbWF5IG5vdCBo
YXZlIEdOVVRMU19UTFMxXzMgZGVmaW5lZCEgKi8KKyAgaWYgKGdudXRsc19wcm90b2NvbF9nZXRf
dmVyc2lvbihzdGF0ZS0+c2Vzc2lvbikgPiBHTlVUTFNfVExTMV8yKQorICAgIHsKKyAgICBidWYg
PSBzdG9yZV9nZXQoMzIsIHN0YXRlLT5ob3N0ID8gR0VUX1RBSU5URUQgOiBHRVRfVU5UQUlOVEVE
KTsKKyAgICByYyA9IGdudXRsc19wcmZfcmZjNTcwNShzdGF0ZS0+c2Vzc2lvbiwKKwkJCQkoc2l6
ZV90KTI0LCAgIkVYUE9SVEVSLUNoYW5uZWwtQmluZGluZyIsIChzaXplX3QpMCwgIiIsCisJCQkJ
MzIsIENTIGJ1Zik7CisgICAgY2hhbm5lbC5kYXRhID0gYnVmOworICAgIGNoYW5uZWwuc2l6ZSA9
IDMyOworICAgIH0KKyAgZWxzZQorIyBlbmRpZgorICAgIHJjID0gZ251dGxzX3Nlc3Npb25fY2hh
bm5lbF9iaW5kaW5nKHN0YXRlLT5zZXNzaW9uLCBHTlVUTFNfQ0JfVExTX1VOSVFVRSwgJmNoYW5u
ZWwpOworCisgIGlmIChyYykKKyAgICB7IERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoImV4dHJh
Y3RpbmcgY2hhbm5lbCBiaW5kaW5nOiAlc1xuIiwgZ251dGxzX3N0cmVycm9yKHJjKSk7IH0KKyAg
ZWxzZQorICAgIHsKKyAgICBpbnQgb2xkX3Bvb2wgPSBzdG9yZV9wb29sOworICAgIC8qIERlY2xh
cmUgdGhlIHRhaW50ZWRuZXNzIG9mIHRoZSBiaW5kaW5nIGluZm8uICBPbiBzZXJ2ZXIsIHVudGFp
bnRlZDsgb24KKyAgICBjbGllbnQsIHRhaW50ZWQgLSBiZWluZyB0aGUgRmluaXNoIG1zZyBmcm9t
IHRoZSBzZXJ2ZXIuICovCisKKyAgICBzdG9yZV9wb29sID0gUE9PTF9QRVJNOworICAgIHRsc3At
PmNoYW5uZWxiaW5kaW5nID0gYjY0ZW5jb2RlX3RhaW50KENVUyBjaGFubmVsLmRhdGEsIChpbnQp
Y2hhbm5lbC5zaXplLAorCQkJCQkgICAgc3RhdGUtPmhvc3QgPyBHRVRfVEFJTlRFRCA6IEdFVF9V
TlRBSU5URUQpOworICAgIHN0b3JlX3Bvb2wgPSBvbGRfcG9vbDsKKyAgICBERUJVRyhEX3Rscykg
ZGVidWdfcHJpbnRmKCJIYXZlIGNoYW5uZWwgYmluZGluZ3MgY2FjaGVkIGZvciBwb3NzaWJsZSBh
dXRoIHVzYWdlXG4iKTsKKyAgICB9CiAgIH0KICNlbmRpZgogCkBAIC01NjIsNyArNzAwLDYgQEAK
IAogCiAKLSNpZm5kZWYgR05VVExTX0FVVE9fREhQQVJBTVMKIC8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgU2V0dXAgdXAgREgg
cGFyYW1ldGVycyAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KQEAgLTU4NSw3ICs3MjIsNyBAQAogewogaW50IGZkLCByYzsK
IHVuc2lnbmVkIGludCBkaF9iaXRzOwotZ251dGxzX2RhdHVtX3QgbSA9IHsuZGF0YSA9IE5VTEws
IC5zaXplID0gMH07CitnbnV0bHNfZGF0dW1fdCBtOwogdXNjaGFyIGZpbGVuYW1lX2J1ZltQQVRI
X01BWF07CiB1c2NoYXIgKmZpbGVuYW1lID0gTlVMTDsKIHNpemVfdCBzejsKQEAgLTU5MywxMCAr
NzMwLDEzIEBACiBCT09MIHVzZV9maWxlX2luX3Nwb29sID0gRkFMU0U7CiBob3N0X2l0ZW0gKmhv
c3QgPSBOVUxMOyAvKiBkdW1teSBmb3IgbWFjcm9zICovCiAKLURFQlVHKERfdGxzKSBkZWJ1Z19w
cmludGYoIkluaXRpYWxpc2luZyBHbnVUTFMgc2VydmVyIHBhcmFtcy5cbiIpOworREVCVUcoRF90
bHMpIGRlYnVnX3ByaW50ZigiSW5pdGlhbGlzaW5nIEdudVRMUyBzZXJ2ZXIgcGFyYW1zXG4iKTsK
IAogaWYgKChyYyA9IGdudXRsc19kaF9wYXJhbXNfaW5pdCgmZGhfc2VydmVyX3BhcmFtcykpKQot
ICByZXR1cm4gdGxzX2Vycm9yX2dudShVUyJnbnV0bHNfZGhfcGFyYW1zX2luaXQiLCByYywgaG9z
dCwgZXJyc3RyKTsKKyAgcmV0dXJuIHRsc19lcnJvcl9nbnUoTlVMTCwgVVMiZ251dGxzX2RoX3Bh
cmFtc19pbml0IiwgcmMsIGVycnN0cik7CisKK20uZGF0YSA9IE5VTEw7CittLnNpemUgPSAwOwog
CiBpZiAoIWV4cGFuZF9jaGVjayh0bHNfZGhwYXJhbSwgVVMidGxzX2RocGFyYW0iLCAmZXhwX3Rs
c19kaHBhcmFtLCBlcnJzdHIpKQogICByZXR1cm4gREVGRVI7CkBAIC02MTEsNyArNzUxLDcgQEAK
ICAgdXNlX2ZpbGVfaW5fc3Bvb2wgPSBUUlVFOwogZWxzZSBpZiAoVXN0cmNtcChleHBfdGxzX2Ro
cGFyYW0sICJub25lIikgPT0gMCkKICAgewotICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJS
ZXF1ZXN0ZWQgbm8gREggcGFyYW1ldGVycy5cbiIpOworICBERUJVRyhEX3RscykgZGVidWdfcHJp
bnRmKCJSZXF1ZXN0ZWQgbm8gREggcGFyYW1ldGVyc1xuIik7CiAgIHJldHVybiBPSzsKICAgfQog
ZWxzZSBpZiAoZXhwX3Rsc19kaHBhcmFtWzBdICE9ICcvJykKQEAgLTYyNiw3ICs3NjYsNyBAQAog
aWYgKG0uZGF0YSkKICAgewogICBpZiAoKHJjID0gZ251dGxzX2RoX3BhcmFtc19pbXBvcnRfcGtj
czMoZGhfc2VydmVyX3BhcmFtcywgJm0sIEdOVVRMU19YNTA5X0ZNVF9QRU0pKSkKLSAgICByZXR1
cm4gdGxzX2Vycm9yX2dudShVUyJnbnV0bHNfZGhfcGFyYW1zX2ltcG9ydF9wa2NzMyIsIHJjLCBo
b3N0LCBlcnJzdHIpOworICAgIHJldHVybiB0bHNfZXJyb3JfZ251KE5VTEwsIFVTImdudXRsc19k
aF9wYXJhbXNfaW1wb3J0X3BrY3MzIiwgcmMsIGVycnN0cik7CiAgIERFQlVHKERfdGxzKSBkZWJ1
Z19wcmludGYoIkxvYWRlZCBmaXhlZCBzdGFuZGFyZCBELUggcGFyYW1ldGVyc1xuIik7CiAgIHJl
dHVybiBPSzsKICAgfQpAQCAtNjM4LDEyICs3NzgsMTIgQEAKIGlmICghKGRoX2JpdHMgPSBnbnV0
bHNfc2VjX3BhcmFtX3RvX3BrX2JpdHMoR05VVExTX1BLX0RILCBHTlVUTFNfU0VDX1BBUkFNX05P
Uk1BTCkpKQogICByZXR1cm4gdGxzX2Vycm9yKFVTImdudXRsc19zZWNfcGFyYW1fdG9fcGtfYml0
cygpIGZhaWxlZCIsIE5VTEwsIE5VTEwsIGVycnN0cik7CiBERUJVRyhEX3RscykKLSAgZGVidWdf
cHJpbnRmKCJHbnVUTFMgdGVsbHMgdXMgdGhhdCBmb3IgRC1IIFBLLCBOT1JNQUwgaXMgJWQgYml0
cy5cbiIsCisgIGRlYnVnX3ByaW50ZigiR251VExTIHRlbGxzIHVzIHRoYXQgZm9yIEQtSCBQSywg
Tk9STUFMIGlzICVkIGJpdHNcbiIsCiAgICAgICBkaF9iaXRzKTsKICNlbHNlCiBkaF9iaXRzID0g
RVhJTV9TRVJWRVJfREhfQklUU19QUkUyXzEyOwogREVCVUcoRF90bHMpCi0gIGRlYnVnX3ByaW50
ZigiR251VExTIGxhY2tzIGdudXRsc19zZWNfcGFyYW1fdG9fcGtfYml0cygpLCB1c2luZyAlZCBi
aXRzLlxuIiwKKyAgZGVidWdfcHJpbnRmKCJHbnVUTFMgbGFja3MgZ251dGxzX3NlY19wYXJhbV90
b19wa19iaXRzKCksIHVzaW5nICVkIGJpdHNcbiIsCiAgICAgICBkaF9iaXRzKTsKICNlbmRpZgog
CkBAIC02NTEsNyArNzkxLDcgQEAKIGlmIChkaF9iaXRzID4gdGxzX2RoX21heF9iaXRzKQogICB7
CiAgIERFQlVHKERfdGxzKQotICAgIGRlYnVnX3ByaW50ZigidGxzX2RoX21heF9iaXRzIGNsYW1w
aW5nIG92ZXJyaWRlLCB1c2luZyAlZCBiaXRzIGluc3RlYWQuXG4iLAorICAgIGRlYnVnX3ByaW50
ZigidGxzX2RoX21heF9iaXRzIGNsYW1waW5nIG92ZXJyaWRlLCB1c2luZyAlZCBiaXRzIGluc3Rl
YWRcbiIsCiAgICAgICAgIHRsc19kaF9tYXhfYml0cyk7CiAgIGRoX2JpdHMgPSB0bHNfZGhfbWF4
X2JpdHM7CiAgIH0KQEAgLTcxMCw3ICs4NTAsNyBAQAogICByYyA9IGdudXRsc19kaF9wYXJhbXNf
aW1wb3J0X3BrY3MzKGRoX3NlcnZlcl9wYXJhbXMsICZtLCBHTlVUTFNfWDUwOV9GTVRfUEVNKTsK
ICAgc3RvcmVfZnJlZShtLmRhdGEpOwogICBpZiAocmMpCi0gICAgcmV0dXJuIHRsc19lcnJvcl9n
bnUoVVMiZ251dGxzX2RoX3BhcmFtc19pbXBvcnRfcGtjczMiLCByYywgaG9zdCwgZXJyc3RyKTsK
KyAgICByZXR1cm4gdGxzX2Vycm9yX2dudShOVUxMLCBVUyJnbnV0bHNfZGhfcGFyYW1zX2ltcG9y
dF9wa2NzMyIsIHJjLCBlcnJzdHIpOwogICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJyZWFk
IEQtSCBwYXJhbWV0ZXJzIGZyb20gZmlsZSBcIiVzXCJcbiIsIGZpbGVuYW1lKTsKICAgfQogCkBA
IC03MjQsNyArODY0LDcgQEAKICAgICBkZWJ1Z19wcmludGYoIkQtSCBwYXJhbWV0ZXIgY2FjaGUg
ZmlsZSBcIiVzXCIgZG9lcyBub3QgZXhpc3RcbiIsIGZpbGVuYW1lKTsKICAgfQogZWxzZQotICBy
ZXR1cm4gdGxzX2Vycm9yKHN0cmluZ19vcGVuX2ZhaWxlZChlcnJubywgIlwiJXNcIiBmb3IgcmVh
ZGluZyIsIGZpbGVuYW1lKSwKKyAgcmV0dXJuIHRsc19lcnJvcihzdHJpbmdfb3Blbl9mYWlsZWQo
IlwiJXNcIiBmb3IgcmVhZGluZyIsIGZpbGVuYW1lKSwKICAgICAgIE5VTEwsIE5VTEwsIGVycnN0
cik7CiAKIC8qIElmIHJldCA8IDAsIGVpdGhlciB0aGUgY2FjaGUgZmlsZSBkb2VzIG5vdCBleGlz
dCwgb3IgdGhlIGRhdGEgaXQgY29udGFpbnMKQEAgLTc0MiwxNyArODgyLDE5IEBACiAgICAgcmV0
dXJuIHRsc19lcnJvcihVUyJGaWxlbmFtZSB0b28gbG9uZyB0byBnZW5lcmF0ZSByZXBsYWNlbWVu
dCIsCiAgICAgICAgIGZpbGVuYW1lLCBOVUxMLCBlcnJzdHIpOwogCi0gIHRlbXBfZm4gPSBzdHJp
bmdfY29weShVUyIlcy5YWFhYWFhYIik7CisgIHRlbXBfZm4gPSBzdHJpbmdfY29weShVUyJleGlt
LWRoLlhYWFhYWFgiKTsKICAgaWYgKChmZCA9IG1rc3RlbXAoQ1MgdGVtcF9mbikpIDwgMCkJLyog
bW9kaWZpZXMgdGVtcF9mbiAqLwogICAgIHJldHVybiB0bHNfZXJyb3Jfc3lzKFVTIlVuYWJsZSB0
byBvcGVuIHRlbXAgZmlsZSIsIGVycm5vLCBOVUxMLCBlcnJzdHIpOwogICAodm9pZClleGltX2No
b3duKHRlbXBfZm4sIGV4aW1fdWlkLCBleGltX2dpZCk7ICAgLyogUHJvYmFibHkgbm90IG5lY2Vz
c2FyeSAqLwogCi0gIC8qIEdudVRMUyBvdmVyc2hvb3RzISAgSWYgd2UgYXNrIGZvciAyMjM2LCB3
ZSBtaWdodCBnZXQgMjIzNyBvciBtb3JlLiAgQnV0Ci0gIHRoZXJlJ3Mgbm8gd2F5IHRvIGFzayBH
bnVUTFMgaG93IG1hbnkgYml0cyB0aGVyZSByZWFsbHkgYXJlLiAgV2UgY2FuIGFzawotICBob3cg
bWFueSBiaXRzIHdlcmUgdXNlZCBpbiBhIFRMUyBzZXNzaW9uLCBidXQgdGhhdCdzIGl0ISAgVGhl
IHByaW1lIGl0c2VsZgotICBpcyBoaWRkZW4gYmVoaW5kIHRvbyBtdWNoIGFic3RyYWN0aW9uLiAg
U28gd2UgYXNrIGZvciBsZXNzLCBhbmQgcHJvY2VlZCBvbgotICBhIHdpbmcgYW5kIGEgcHJheWVy
LiAgRmlyc3QgYXR0ZW1wdCwgc3VidHJhY3RlZCAzIGZvciAyMjMzIGFuZCBnb3QgMjI0MC4gICov
Ci0KKyAgLyogR251VExTIG92ZXJzaG9vdHMhCisgICAqIElmIHdlIGFzayBmb3IgMjIzNiwgd2Ug
bWlnaHQgZ2V0IDIyMzcgb3IgbW9yZS4KKyAgICogQnV0IHRoZXJlJ3Mgbm8gd2F5IHRvIGFzayBH
bnVUTFMgaG93IG1hbnkgYml0cyB0aGVyZSByZWFsbHkgYXJlLgorICAgKiBXZSBjYW4gYXNrIGhv
dyBtYW55IGJpdHMgd2VyZSB1c2VkIGluIGEgVExTIHNlc3Npb24sIGJ1dCB0aGF0J3MgaXQhCisg
ICAqIFRoZSBwcmltZSBpdHNlbGYgaXMgaGlkZGVuIGJlaGluZCB0b28gbXVjaCBhYnN0cmFjdGlv
bi4KKyAgICogU28gd2UgYXNrIGZvciBsZXNzLCBhbmQgcHJvY2VlZCBvbiBhIHdpbmcgYW5kIGEg
cHJheWVyLgorICAgKiBGaXJzdCBhdHRlbXB0LCBzdWJ0cmFjdGVkIDMgZm9yIDIyMzMgYW5kIGdv
dCAyMjQwLgorICAgKi8KICAgaWYgKGRoX2JpdHMgPj0gRVhJTV9DTElFTlRfREhfTUlOX0JJVFMg
KyAxMCkKICAgICB7CiAgICAgZGhfYml0c19nZW4gPSBkaF9iaXRzIC0gMTA7CkBAIC03NjUsNyAr
OTA3LDcgQEAKICAgICBkZWJ1Z19wcmludGYoInJlcXVlc3RpbmcgZ2VuZXJhdGlvbiBvZiAlZCBi
aXQgRGlmZmllLUhlbGxtYW4gcHJpbWUgLi4uXG4iLAogICAgICAgICBkaF9iaXRzX2dlbik7CiAg
IGlmICgocmMgPSBnbnV0bHNfZGhfcGFyYW1zX2dlbmVyYXRlMihkaF9zZXJ2ZXJfcGFyYW1zLCBk
aF9iaXRzX2dlbikpKQotICAgIHJldHVybiB0bHNfZXJyb3JfZ251KFVTImdudXRsc19kaF9wYXJh
bXNfZ2VuZXJhdGUyIiwgcmMsIGhvc3QsIGVycnN0cik7CisgICAgcmV0dXJuIHRsc19lcnJvcl9n
bnUoTlVMTCwgVVMiZ251dGxzX2RoX3BhcmFtc19nZW5lcmF0ZTIiLCByYywgZXJyc3RyKTsKIAog
ICAvKiBnbnV0bHNfZGhfcGFyYW1zX2V4cG9ydF9wa2NzMygpIHdpbGwgdGVsbCB1cyB0aGUgZXhh
Y3Qgc2l6ZSwgZXZlcnkgdGltZSwKICAgYW5kIEkgY29uZmlybWVkIHRoYXQgYSBOVUxMIGNhbGwg
dG8gZ2V0IHRoZSBzaXplIGZpcnN0IGlzIGhvdyB0aGUgR251VExTCkBAIC03NzYsOCArOTE4LDgg
QEAKICAgaWYgKCAgKHJjID0gZ251dGxzX2RoX3BhcmFtc19leHBvcnRfcGtjczMoZGhfc2VydmVy
X3BhcmFtcywKIAkJR05VVExTX1g1MDlfRk1UX1BFTSwgbS5kYXRhLCAmc3opKQogICAgICAmJiBy
YyAhPSBHTlVUTFNfRV9TSE9SVF9NRU1PUllfQlVGRkVSKQotICAgIHJldHVybiB0bHNfZXJyb3Jf
Z251KFVTImdudXRsc19kaF9wYXJhbXNfZXhwb3J0X3BrY3MzKE5VTEwpIHNpemluZyIsCi0JICAg
ICAgcmMsIGhvc3QsIGVycnN0cik7CisgICAgcmV0dXJuIHRsc19lcnJvcl9nbnUoTlVMTCwgVVMi
Z251dGxzX2RoX3BhcmFtc19leHBvcnRfcGtjczMoTlVMTCkgc2l6aW5nIiwKKwkgICAgICByYywg
ZXJyc3RyKTsKICAgbS5zaXplID0gc3o7CiAgIGlmICghKG0uZGF0YSA9IHN0b3JlX21hbGxvYyht
LnNpemUpKSkKICAgICByZXR1cm4gdGxzX2Vycm9yX3N5cyhVUyJtZW1vcnkgYWxsb2NhdGlvbiBm
YWlsZWQiLCBlcnJubywgTlVMTCwgZXJyc3RyKTsKQEAgLTc4Nyw3ICs5MjksNyBAQAogICAgICAg
bS5kYXRhLCAmc3opKSkKICAgICB7CiAgICAgc3RvcmVfZnJlZShtLmRhdGEpOwotICAgIHJldHVy
biB0bHNfZXJyb3JfZ251KFVTImdudXRsc19kaF9wYXJhbXNfZXhwb3J0X3BrY3MzKCkgcmVhbCIs
IHJjLCBob3N0LCBlcnJzdHIpOworICAgIHJldHVybiB0bHNfZXJyb3JfZ251KE5VTEwsIFVTImdu
dXRsc19kaF9wYXJhbXNfZXhwb3J0X3BrY3MzKCkgcmVhbCIsIHJjLCBlcnJzdHIpOwogICAgIH0K
ICAgbS5zaXplID0gc3o7IC8qIHNocmluayBieSAxLCBwcm9iYWJseSAqLwogCkBAIC04MTUsMTIg
Kzk1NywxMSBAQAogREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiaW5pdGlhbGl6ZWQgc2VydmVy
IEQtSCBwYXJhbWV0ZXJzXG4iKTsKIHJldHVybiBPSzsKIH0KLSNlbmRpZgogCiAKIAogCi0vKiBD
cmVhdGUgYW5kIGluc3RhbGwgYSBzZWxmc2lnbmVkIGNlcnRpZmljYXRlLCBmb3IgdXNlIGluIHNl
cnZlciBtb2RlICovCisvKiBDcmVhdGUgYW5kIGluc3RhbGwgYSBzZWxmc2lnbmVkIGNlcnRpZmlj
YXRlLCBmb3IgdXNlIGluIHNlcnZlciBtb2RlLiAqLwogCiBzdGF0aWMgaW50CiB0bHNfaW5zdGFs
bF9zZWxmc2lnbihleGltX2dudXRsc19zdGF0ZV9zdCAqIHN0YXRlLCB1c2NoYXIgKiogZXJyc3Ry
KQpAQCAtODM3LDYgKzk3OCw3IEBACiBpZiAoVFJVRSkgZ290byBlcnI7CiAjZW5kaWYKIAorREVC
VUcoRF90bHMpIGRlYnVnX3ByaW50ZigiVExTOiBnZW5lcmF0aW5nIHNlbGZzaWduZWQgc2VydmVy
IGNlcnRcbiIpOwogd2hlcmUgPSBVUyJpbml0aWFsaXNpbmcgcGtleSI7CiBpZiAoKHJjID0gZ251
dGxzX3g1MDlfcHJpdmtleV9pbml0KCZwa2V5KSkpIGdvdG8gZXJyOwogCkBAIC04NjEsNyArMTAw
Myw3IEBACiBpZiAoICAocmMgPSBnbnV0bHNfeDUwOV9jcnRfc2V0X3ZlcnNpb24oY2VydCwgMykp
CiAgICB8fCAocmMgPSBnbnV0bHNfeDUwOV9jcnRfc2V0X3NlcmlhbChjZXJ0LCAmbm93LCBzaXpl
b2Yobm93KSkpCiAgICB8fCAocmMgPSBnbnV0bHNfeDUwOV9jcnRfc2V0X2FjdGl2YXRpb25fdGlt
ZShjZXJ0LCBub3cgPSB0aW1lKE5VTEwpKSkKLSAgIHx8IChyYyA9IGdudXRsc194NTA5X2NydF9z
ZXRfZXhwaXJhdGlvbl90aW1lKGNlcnQsIG5vdyArIDYwICogNjApKSAvKiAxIGhyICovCisgICB8
fCAocmMgPSBnbnV0bHNfeDUwOV9jcnRfc2V0X2V4cGlyYXRpb25fdGltZShjZXJ0LCAobG9uZyky
ICogNjAgKiA2MCkpCS8qIDIgaG91ciAqLwogICAgfHwgKHJjID0gZ251dGxzX3g1MDlfY3J0X3Nl
dF9rZXkoY2VydCwgcGtleSkpCiAKICAgIHx8IChyYyA9IGdudXRsc194NTA5X2NydF9zZXRfZG5f
Ynlfb2lkKGNlcnQsCkBAIC04NzksNyArMTAyMSw4IEBACiAKIHdoZXJlID0gVVMiaW5zdGFsbGlu
ZyBzZWxmc2lnbiBjZXJ0IjsKIAkJCQkJLyogU2luY2U6IDIuNC4wICovCi1pZiAoKHJjID0gZ251
dGxzX2NlcnRpZmljYXRlX3NldF94NTA5X2tleShzdGF0ZS0+eDUwOV9jcmVkLCAmY2VydCwgMSwg
cGtleSkpKQoraWYgKChyYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9rZXkoc3RhdGUt
PmxpYl9zdGF0ZS54NTA5X2NyZWQsCisgICAgJmNlcnQsIDEsIHBrZXkpKSkKICAgZ290byBlcnI7
CiAKIHJjID0gT0s7CkBAIC04OTAsNyArMTAzMyw3IEBACiAgIHJldHVybiByYzsKIAogZXJyOgot
ICByYyA9IHRsc19lcnJvcl9nbnUod2hlcmUsIHJjLCBOVUxMLCBlcnJzdHIpOworICByYyA9IHRs
c19lcnJvcl9nbnUoc3RhdGUsIHdoZXJlLCByYywgZXJyc3RyKTsKICAgZ290byBvdXQ7CiB9CiAK
QEAgLTkwNiwxNCArMTA0OSwxNCBAQAogCiBzdGF0aWMgaW50CiB0bHNfYWRkX2NlcnRmaWxlKGV4
aW1fZ251dGxzX3N0YXRlX3N0ICogc3RhdGUsIGNvbnN0IGhvc3RfaXRlbSAqIGhvc3QsCi0gIHVz
Y2hhciAqIGNlcnRmaWxlLCB1c2NoYXIgKiBrZXlmaWxlLCB1c2NoYXIgKiogZXJyc3RyKQorICBj
b25zdCB1c2NoYXIgKiBjZXJ0ZmlsZSwgY29uc3QgdXNjaGFyICoga2V5ZmlsZSwgdXNjaGFyICoq
IGVycnN0cikKIHsKLWludCByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9rZXlfZmls
ZShzdGF0ZS0+eDUwOV9jcmVkLAotICAgIENTIGNlcnRmaWxlLCBDUyBrZXlmaWxlLCBHTlVUTFNf
WDUwOV9GTVRfUEVNKTsKK2ludCByYyA9IGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9rZXlf
ZmlsZShzdGF0ZS0+bGliX3N0YXRlLng1MDlfY3JlZCwKKyAgICBDQ1MgY2VydGZpbGUsIENDUyBr
ZXlmaWxlLCBHTlVUTFNfWDUwOV9GTVRfUEVNKTsKIGlmIChyYyA8IDApCi0gIHJldHVybiB0bHNf
ZXJyb3JfZ251KAorICByZXR1cm4gdGxzX2Vycm9yX2dudShzdGF0ZSwKICAgICBzdHJpbmdfc3By
aW50ZigiY2VydC9rZXkgc2V0dXA6IGNlcnQ9JXMga2V5PSVzIiwgY2VydGZpbGUsIGtleWZpbGUp
LAotICAgIHJjLCBob3N0LCBlcnJzdHIpOworICAgIHJjLCBlcnJzdHIpOwogcmV0dXJuIC1yYzsK
IH0KIApAQCAtOTQ4LDEzICsxMDkxLDM3IEBACiAvKiBNYWtlIGEgbm90ZSB0aGF0IHdlIHNhdyBh
IHN0YXR1cy1yZXF1ZXN0ICovCiBzdGF0aWMgaW50CiB0bHNfc2VydmVyX2NsaWVudGhlbGxvX2V4
dCh2b2lkICogY3R4LCB1bnNpZ25lZCB0bHNfaWQsCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRh
dGEsIHVuc2lnbmVkIHNpemUpCisgIGNvbnN0IHVzY2hhciAqIGRhdGEsIHVuc2lnbmVkIHNpemUp
CiB7Ci0vKiBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtZXh0ZW5zaW9udHlw
ZS12YWx1ZXMvdGxzLWV4dGVuc2lvbnR5cGUtdmFsdWVzLnhodG1sICovCi1pZiAodGxzX2lkID09
IDUpCS8qIHN0YXR1c19yZXF1ZXN0ICovCi0gIHsKLSAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50
ZigiU2VlbiBzdGF0dXNfcmVxdWVzdCBleHRlbnNpb24gZnJvbSBjbGllbnRcbiIpOwotICB0bHNf
aW4ub2NzcCA9IE9DU1BfTk9UX1JFU1A7CisvKiBUaGUgdmFsdWVzIGZvciB0bHNfaWQgYXJlIGRv
Y3VtZW50ZWQgaGVyZToKK2h0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3Rscy1leHRl
bnNpb250eXBlLXZhbHVlcy90bHMtZXh0ZW5zaW9udHlwZS12YWx1ZXMueGh0bWwgKi8KK3N3aXRj
aCAodGxzX2lkKQorICB7CisgIGNhc2UgNToJLyogU3RhdHVzIFJlcXVlc3QgKi8KKyAgICBERUJV
RyhEX3RscykgZGVidWdfcHJpbnRmKCJTZWVuIHN0YXR1c19yZXF1ZXN0IGV4dGVuc2lvbiBmcm9t
IGNsaWVudFxuIik7CisgICAgdGxzX2luLm9jc3AgPSBPQ1NQX05PVF9SRVNQOworICAgIGJyZWFr
OworI2lmZGVmIEVYSU1fSEFWRV9BTFBOCisgIGNhc2UgMTY6CS8qIEFwcGxpY2F0aW9uIExheWVy
IFByb3RvY29sIE5vdGlmaWNhdGlvbiAqLworICAgIC8qIFRoZSBmb3JtYXQgb2YgImRhdGEiIGhl
cmUgZG9lc24ndCBzZWVtIHRvIGJlIGRvY3VtZW50ZWQsIGJ1dCBhcHBlYXJzCisgICAgdG8gYmUg
YSAyLWJ5dGUgZmllbGQgd2l0aCBhIChyZWR1bmRhbnQsIGdpdmVuIHRoZSAic2l6ZSIgYXJnKSB0
b3RhbCBsZW5ndGgKKyAgICB0aGVuIGEgc2VxdWVuY2Ugb2Ygb25lLWJ5dGUgc2l6ZSB0aGVuIHN0
cmluZyAobm90IG51bC10ZXJtKSBuYW1lcy4gIFRoZQorICAgIGxhdHRlciBpcyBhcyBkZXNjcmli
ZWQgaW4gT3BlblNTTCBkb2N1bWVudGF0aW9uLiAqLworCisgICAgREVCVUcoRF90bHMpIGRlYnVn
X3ByaW50ZigiU2VlbiBBTFBOIGV4dGVuc2lvbiBmcm9tIGNsaWVudCAocz0ldSk6Iiwgc2l6ZSk7
CisgICAgZm9yIChjb25zdCB1c2NoYXIgKiBzID0gZGF0YSsyOyBzLWRhdGEgPCBzaXplLTE7IHMg
Kz0gKnMgKyAxKQorICAgICAgeworICAgICAgc2VydmVyX3NlZW5fYWxwbisrOworICAgICAgREVC
VUcoRF90bHMpIGRlYnVnX3ByaW50ZigiICclLipzJyIsIChpbnQpKnMsIHMrMSk7CisgICAgICB9
CisgICAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiXG4iKTsKKyAgICBpZiAoc2VydmVyX3Nl
ZW5fYWxwbiA+IDEpCisgICAgICB7CisgICAgICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJU
TFM6IHRvbyBtYW55IEFMUE5zIHByZXNlbnRlZCBpbiBoYW5kc2hha2VcbiIpOworICAgICAgcmV0
dXJuIEdOVVRMU19FX05PX0FQUExJQ0FUSU9OX1BST1RPQ09MOworICAgICAgfQorICAgIGJyZWFr
OworI2VuZGlmCiAgIH0KIHJldHVybiAwOwogfQpAQCAtOTcwLDYgKzExMzcsNyBAQAogfQogCiAK
KyMgaWZkZWYgbm90ZGVmX2NyYXNoZXMKIC8qIE1ha2UgYSBub3RlIHRoYXQgd2Ugc2F3IGEgc3Rh
dHVzLXJlc3BvbnNlICovCiBzdGF0aWMgaW50CiB0bHNfc2VydmVyX3NlcnZlcmNlcnRzX2V4dCh2
b2lkICogY3R4LCB1bnNpZ25lZCB0bHNfaWQsCkBAIC05ODUsNiArMTE1Myw3IEBACiAgIH0KIHJl
dHVybiAwOwogfQorIyBlbmRpZgogCiAvKiBDYWxsYmFjayBmb3IgY2VydGlmaWNhdGVzIHBhY2tl
dCwgb24gc2VydmVyLCBpZiB3ZSB0aGluayB3ZSBtaWdodCBzZXJ2ZSBzdGFwbGVkLU9DU1AgKi8K
IHN0YXRpYyBpbnQKQEAgLTk5MiwzMyArMTE2MSwzMyBAQAogICB1bnNpZ25lZCB3aGVuLCB1bnNp
Z25lZCBpbnQgaW5jb21pbmcsIGNvbnN0IGdudXRsc19kYXR1bV90ICogbXNnKQogewogLyogQ2Fs
bCBmbiBmb3IgZWFjaCBleHRlbnNpb24gc2Vlbi4gIDMuNi4zIG9ud2FyZHMgKi8KLSNpZmRlZiBu
b3RkZWYKLS8qWFhYIGNyYXNoZXMgKi8KKyMgaWZkZWYgbm90ZGVmX2NyYXNoZXMKKwkJCQkvKlhY
WCBjcmFzaGVzICovCiByZXR1cm4gZ251dGxzX2V4dF9yYXdfcGFyc2UoTlVMTCwgdGxzX3NlcnZl
cl9zZXJ2ZXJjZXJ0c19leHQsIG1zZywgMCk7Ci0jZW5kaWYKKyMgZW5kaWYKIH0KLSNlbmRpZgor
I2VuZGlmIC8qU1VQUE9SVF9HTlVUTFNfRVhUX1JBV19QQVJTRSovCiAKIC8qWFhYIGluIHRsczEu
MyB0aGUgY2VydC1zdGF0dXMgdHJhdmVsIGFzIGFuIGV4dGVuc2lvbiBuZXh0IHRvIHRoZSBjZXJ0
LCBpbiB0aGUKICAiSGFuZHNoYWtlIFByb3RvY29sOiBDZXJ0aWZpY2F0ZSIgcmVjb3JkLgogU28g
d2UgbmVlZCB0byBzcG90IHRoZSBDZXJ0aWZpY2F0ZSBoYW5kc2hha2UgbWVzc2FnZSwgcGFyc2Ug
aXQgYW5kIHNwb3QgYW55IHN0YXR1c19yZXF1ZXN0IGV4dGVuc2lvbihzKQogCi1UaGlzIGlzIGRp
ZmZlcmVudCB0byB0bHMxLjIgLSB3aGVyZSBpdCBpcyBhIHNlcGFyYXRlIHJlY29yZCAod2lyZXNo
YWtlIHRlcm0pIC8gaGFuZHNoYWtlIG1lc3NhZ2UgKGdudXRscyB0ZXJtKS4KK1RoaXMgaXMgZGlm
ZmVyZW50IHRvIHRsczEuMiAtIHdoZXJlIGl0IGlzIGEgc2VwYXJhdGUgcmVjb3JkICh3aXJlc2hh
cmsgdGVybSkgLyBoYW5kc2hha2UgbWVzc2FnZSAoZ251dGxzIHRlcm0pLgogKi8KIAotI2lmIGRl
ZmluZWQoRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUpIHx8IGRlZmluZWQoU1VQUE9SVF9HTlVUTFNf
RVhUX1JBV19QQVJTRSkKKyNpZiBkZWZpbmVkKEVYSU1fSEFWRV9UTFNfUkVTVU1FKSB8fCBkZWZp
bmVkKFNVUFBPUlRfR05VVExTX0VYVF9SQVdfUEFSU0UpCiAvKiBDYWxsYmFjayBmb3IgY2VydGlm
aWNhdGUtc3RhdHVzLCBvbiBzZXJ2ZXIuIFdlIHNlbnQgc3RhcGxlZCBPQ1NQLiAqLwogc3RhdGlj
IGludAogdGxzX3NlcnZlcl9jZXJ0c3RhdHVzX2NiKGdudXRsc19zZXNzaW9uX3Qgc2Vzc2lvbiwg
dW5zaWduZWQgaW50IGh0eXBlLAogICB1bnNpZ25lZCB3aGVuLCB1bnNpZ25lZCBpbnQgaW5jb21p
bmcsIGNvbnN0IGdudXRsc19kYXR1bV90ICogbXNnKQogewogREVCVUcoRF90bHMpIGRlYnVnX3By
aW50ZigiU2VuZGluZyBjZXJ0aWZpY2F0ZS1zdGF0dXNcbiIpOwkJLypYWFggd2UgZ2V0IHRoaXMg
Zm9yIHRsczEuMiBidXQgbm90IGZvciAxLjMgKi8KLSNpZmRlZiBTVVBQT1JUX1NSVl9PQ1NQX1NU
QUNLCisjIGlmZGVmIFNVUFBPUlRfU1JWX09DU1BfU1RBQ0sKIHRsc19pbi5vY3NwID0gZXhpbV90
ZXN0aGFybmVzc19kaXNhYmxlX29jc3BfdmFsaWRpdHlfY2hlY2sKICAgPyBPQ1NQX1ZGWV9OT1Rf
VFJJRUQgOiBPQ1NQX1ZGSUVEOwkvKiBXZSBrbm93IHRoYXQgR251VExTIHZlcmlmaWVzIHJlc3Bv
bnNlcyAqLwotI2Vsc2UKKyMgZWxzZQogdGxzX2luLm9jc3AgPSBPQ1NQX1ZGWV9OT1RfVFJJRUQ7
Ci0jZW5kaWYKKyMgZW5kaWYKIHJldHVybiAwOwogfQogCkBAIC0xMDM4LDcgKzEyMDcsNyBAQAog
IyBlbmRpZgogICBjYXNlIEdOVVRMU19IQU5EU0hBS0VfQ0VSVElGSUNBVEVfU1RBVFVTOgogICAg
IHJldHVybiB0bHNfc2VydmVyX2NlcnRzdGF0dXNfY2Ioc2VzcywgaHR5cGUsIHdoZW4sIGluY29t
aW5nLCBtc2cpOwotIyBpZmRlZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQorIyBpZmRlZiBFWElN
X0hBVkVfVExTX1JFU1VNRQogICBjYXNlIEdOVVRMU19IQU5EU0hBS0VfTkVXX1NFU1NJT05fVElD
S0VUOgogICAgIHJldHVybiB0bHNfc2VydmVyX3RpY2tldF9jYihzZXNzLCBodHlwZSwgd2hlbiwg
aW5jb21pbmcsIG1zZyk7CiAjIGVuZGlmCkBAIC0xMDYzLDYgKzEyMzIsNTAwIEBACiB9CiAjZW5k
aWYKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
CisqIE9uZS10aW1lIGluaXQgY3JlZGVudGlhbHMgZm9yIHNlcnZlciBhbmQgY2xpZW50ICoKKyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0
aWMgdm9pZAorY3JlZHNfYmFzaWNfaW5pdChnbnV0bHNfY2VydGlmaWNhdGVfY3JlZGVudGlhbHNf
dCB4NTA5X2NyZWQsIEJPT0wgc2VydmVyKQoreworI2lmZGVmIFNVUFBPUlRfU1JWX09DU1BfU1RB
Q0sKK2dudXRsc19jZXJ0aWZpY2F0ZV9zZXRfZmxhZ3MoeDUwOV9jcmVkLCBHTlVUTFNfQ0VSVElG
SUNBVEVfQVBJX1YyKTsKKworIyBpZiAhZGVmaW5lZChESVNBQkxFX09DU1ApICYmIGRlZmluZWQo
U1VQUE9SVF9HTlVUTFNfRVhUX1JBV19QQVJTRSkKK2lmIChzZXJ2ZXIgJiYgdGxzX29jc3BfZmls
ZSkKKyAgeworICBpZiAoZi5ydW5uaW5nX2luX3Rlc3RfaGFybmVzcykKKyAgICB0bHNfc2VydmVy
X3Rlc3RoYXJuZXNzX29jc3BfZmlkZGxlKCk7CisKKyAgaWYgKGV4aW1fdGVzdGhhcm5lc3NfZGlz
YWJsZV9vY3NwX3ZhbGlkaXR5X2NoZWNrKQorICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfZmxh
Z3MoeDUwOV9jcmVkLAorICAgICAgR05VVExTX0NFUlRJRklDQVRFX0FQSV9WMiB8IEdOVVRMU19D
RVJUSUZJQ0FURV9TS0lQX09DU1BfUkVTUE9OU0VfQ0hFQ0spOworICB9CisjIGVuZGlmCisjZW5k
aWYKK0RFQlVHKERfdGxzKQorICBkZWJ1Z19wcmludGYoIlRMUzogYmFzaWMgY3JlZCBpbml0LCAl
c1xuIiwgc2VydmVyID8gInNlcnZlciIgOiAiY2xpZW50Iik7Cit9CisKK3N0YXRpYyBpbnQKK2Ny
ZWRzX2xvYWRfc2VydmVyX2NlcnRzKGV4aW1fZ251dGxzX3N0YXRlX3N0ICogc3RhdGUsIGNvbnN0
IHVzY2hhciAqIGNlcnQsCisgIGNvbnN0IHVzY2hhciAqIHBrZXksIGNvbnN0IHVzY2hhciAqIG9j
c3AsIHVzY2hhciAqKiBlcnJzdHIpCit7Citjb25zdCB1c2NoYXIgKiBjbGlzdCA9IGNlcnQ7Citj
b25zdCB1c2NoYXIgKiBrbGlzdCA9IHBrZXk7Citjb25zdCB1c2NoYXIgKiBvbGlzdDsKK2ludCBj
c2VwID0gMCwga3NlcCA9IDAsIG9zZXAgPSAwLCBjbnQgPSAwLCByYzsKK3VzY2hhciAqIGNmaWxl
LCAqIGtmaWxlLCAqIG9maWxlOworI2lmbmRlZiBESVNBQkxFX09DU1AKKyMgaWZkZWYgU1VQUE9S
VF9HTlVUTFNfRVhUX1JBV19QQVJTRQorZ251dGxzX3g1MDlfY3J0X2ZtdF90IG9jc3BfZm10ID0g
R05VVExTX1g1MDlfRk1UX0RFUjsKKyMgZW5kaWYKKworaWYgKCFleHBhbmRfY2hlY2sob2NzcCwg
VVMidGxzX29jc3BfZmlsZSIsICZvZmlsZSwgZXJyc3RyKSkKKyAgcmV0dXJuIERFRkVSOworb2xp
c3QgPSBvZmlsZTsKKyNlbmRpZgorCit3aGlsZSAoY2ZpbGUgPSBzdHJpbmdfbmV4dGlubGlzdCgm
Y2xpc3QsICZjc2VwLCBOVUxMLCAwKSkKKworICBpZiAoIShrZmlsZSA9IHN0cmluZ19uZXh0aW5s
aXN0KCZrbGlzdCwgJmtzZXAsIE5VTEwsIDApKSkKKyAgICByZXR1cm4gdGxzX2Vycm9yKFVTImNl
cnQva2V5IHNldHVwOiBvdXQgb2Yga2V5cyIsIE5VTEwsIE5VTEwsIGVycnN0cik7CisgIGVsc2Ug
aWYgKChyYyA9IHRsc19hZGRfY2VydGZpbGUoc3RhdGUsIE5VTEwsIGNmaWxlLCBrZmlsZSwgZXJy
c3RyKSkgPiAwKQorICAgIHJldHVybiByYzsKKyAgZWxzZQorICAgIHsKKyAgICBpbnQgZ251dGxz
X2NlcnRfaW5kZXggPSAtcmM7CisgICAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiVExTOiBj
ZXJ0L2tleSAlZCAlcyByZWdpc3RlcmVkXG4iLAorCQkJICAgICAgZ251dGxzX2NlcnRfaW5kZXgs
IGNmaWxlKTsKKworI2lmbmRlZiBESVNBQkxFX09DU1AKKyAgICBpZiAob2NzcCkKKyAgICAgIHsK
KyAgICAgIC8qIFNldCB0aGUgT0NTUCBzdGFwbGluZyBzZXJ2ZXIgaW5mbyAqLworICAgICAgaWYg
KGdudXRsc19idWdneV9vY3NwKQorCXsKKwlERUJVRyhEX3RscykKKwkgIGRlYnVnX3ByaW50Zigi
R251VExTIGxpYnJhcnkgaXMgYnVnZ3kgZm9yIE9DU1A7IGF2b2lkaW5nXG4iKTsKKwl9CisgICAg
ICBlbHNlIGlmICgob2ZpbGUgPSBzdHJpbmdfbmV4dGlubGlzdCgmb2xpc3QsICZvc2VwLCBOVUxM
LCAwKSkpCisJeworCURFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIk9DU1AgcmVzcG9uc2UgZmls
ZSAlZCAgPSAlc1xuIiwKKwkJCQkgIGdudXRsc19jZXJ0X2luZGV4LCBvZmlsZSk7CisjIGlmZGVm
IFNVUFBPUlRfR05VVExTX0VYVF9SQVdfUEFSU0UKKwlpZiAoVXN0cm5jbXAob2ZpbGUsIFVTIlBF
TSAiLCA0KSA9PSAwKQorCSAgeworCSAgb2NzcF9mbXQgPSBHTlVUTFNfWDUwOV9GTVRfUEVNOwor
CSAgb2ZpbGUgKz0gNDsKKwkgIH0KKwllbHNlIGlmIChVc3RybmNtcChvZmlsZSwgVVMiREVSICIs
IDQpID09IDApCisJICB7CisJICBvY3NwX2ZtdCA9IEdOVVRMU19YNTA5X0ZNVF9ERVI7CisJICBv
ZmlsZSArPSA0OworCSAgfQorCisJaWYgICgocmMgPSBnbnV0bHNfY2VydGlmaWNhdGVfc2V0X29j
c3Bfc3RhdHVzX3JlcXVlc3RfZmlsZTIoCisJCSAgc3RhdGUtPmxpYl9zdGF0ZS54NTA5X2NyZWQs
IENDUyBvZmlsZSwgZ251dGxzX2NlcnRfaW5kZXgsCisJCSAgb2NzcF9mbXQpKSA8IDApCisJICBy
ZXR1cm4gdGxzX2Vycm9yX2dudShzdGF0ZSwKKwkJICBVUyJnbnV0bHNfY2VydGlmaWNhdGVfc2V0
X29jc3Bfc3RhdHVzX3JlcXVlc3RfZmlsZTIiLAorCQkgIHJjLCBlcnJzdHIpOworCURFQlVHKERf
dGxzKQorCSAgZGVidWdfcHJpbnRmKCIgJWQgcmVzcG9uc2UlcyBsb2FkZWRcbiIsIHJjLCByYz4x
ID8gInMiOiIiKTsKKworCS8qIEFycmFuZ2UgY2FsbGJhY2tzIGZvciBPQ1NQIHJlcXVlc3Qgb2Jz
ZXJ2YWJpbGl0eSAqLworCisJaWYgKHN0YXRlLT5zZXNzaW9uKQorCSAgZ251dGxzX2hhbmRzaGFr
ZV9zZXRfaG9va19mdW5jdGlvbihzdGF0ZS0+c2Vzc2lvbiwKKwkgICAgR05VVExTX0hBTkRTSEFL
RV9BTlksIEdOVVRMU19IT09LX1BPU1QsIHRsc19zZXJ2ZXJfaG9va19jYik7CisJZWxzZQorCSAg
c3RhdGUtPmxpYl9zdGF0ZS5vY3NwX2hvb2sgPSBUUlVFOworCisKKyMgZWxzZQorIyAgaWYgZGVm
aW5lZChTVVBQT1JUX1NSVl9PQ1NQX1NUQUNLKQorCWlmICgocmMgPSBnbnV0bHNfY2VydGlmaWNh
dGVfc2V0X29jc3Bfc3RhdHVzX3JlcXVlc3RfZnVuY3Rpb24yKAorCQkgICAgIHN0YXRlLT5saWJf
c3RhdGUueDUwOV9jcmVkLCBnbnV0bHNfY2VydF9pbmRleCwKKwkJICAgICBzZXJ2ZXJfb2NzcF9z
dGFwbGluZ19jYiwgb2ZpbGUpKSkKKwkgICAgcmV0dXJuIHRsc19lcnJvcl9nbnUoc3RhdGUsCisJ
CSAgVVMiZ251dGxzX2NlcnRpZmljYXRlX3NldF9vY3NwX3N0YXR1c19yZXF1ZXN0X2Z1bmN0aW9u
MiIsCisJCSAgcmMsIGVycnN0cik7CisJZWxzZQorIyAgZW5kaWYKKwkgIHsKKwkgIGlmIChjbnQr
KyA+IDApCisJICAgIHsKKwkgICAgREVCVUcoRF90bHMpCisJICAgICAgZGVidWdfcHJpbnRmKCJv
b3BzOyBtdWx0aXBsZSBPQ1NQIGZpbGVzIG5vdCBzdXBwb3J0ZWRcbiIpOworCSAgICBicmVhazsK
KwkgICAgfQorCSAgZ251dGxzX2NlcnRpZmljYXRlX3NldF9vY3NwX3N0YXR1c19yZXF1ZXN0X2Z1
bmN0aW9uKAorCSAgICBzdGF0ZS0+bGliX3N0YXRlLng1MDlfY3JlZCwgc2VydmVyX29jc3Bfc3Rh
cGxpbmdfY2IsIG9maWxlKTsKKwkgIH0KKyMgZW5kaWYJLyogU1VQUE9SVF9HTlVUTFNfRVhUX1JB
V19QQVJTRSAqLworCX0KKyAgICAgIGVsc2UKKwlERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJy
YW4gb3V0IG9mIE9DU1AgcmVzcG9uc2UgZmlsZXMgaW4gbGlzdFxuIik7CisgICAgICB9CisjZW5k
aWYgLyogRElTQUJMRV9PQ1NQICovCisgICAgfQorcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQK
K2NyZWRzX2xvYWRfY2xpZW50X2NlcnRzKGV4aW1fZ251dGxzX3N0YXRlX3N0ICogc3RhdGUsIGNv
bnN0IGhvc3RfaXRlbSAqIGhvc3QsCisgIGNvbnN0IHVzY2hhciAqIGNlcnQsIGNvbnN0IHVzY2hh
ciAqIHBrZXksIHVzY2hhciAqKiBlcnJzdHIpCit7CitpbnQgcmMgPSB0bHNfYWRkX2NlcnRmaWxl
KHN0YXRlLCBob3N0LCBjZXJ0LCBwa2V5LCBlcnJzdHIpOworaWYgKHJjID4gMCkgcmV0dXJuIHJj
OworREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiVExTOiBjZXJ0L2tleSByZWdpc3RlcmVkXG4i
KTsKK3JldHVybiAwOworfQorCitzdGF0aWMgaW50CitjcmVkc19sb2FkX2NhYnVuZGxlKGV4aW1f
Z251dGxzX3N0YXRlX3N0ICogc3RhdGUsIGNvbnN0IHVzY2hhciAqIGJ1bmRsZSwKKyAgY29uc3Qg
aG9zdF9pdGVtICogaG9zdCwgdXNjaGFyICoqIGVycnN0cikKK3sKK2ludCBjZXJ0X2NvdW50Owor
c3RydWN0IHN0YXQgc3RhdGJ1ZjsKKworI2lmZGVmIFNVUFBPUlRfU1lTREVGQVVMVF9DQUJVTkRM
RQoraWYgKFVzdHJjbXAoYnVuZGxlLCAic3lzdGVtIikgPT0gMCB8fCBVc3RybmNtcChidW5kbGUs
ICJzeXN0ZW0sIiwgNykgPT0gMCkKKyAgY2VydF9jb3VudCA9IGdudXRsc19jZXJ0aWZpY2F0ZV9z
ZXRfeDUwOV9zeXN0ZW1fdHJ1c3Qoc3RhdGUtPmxpYl9zdGF0ZS54NTA5X2NyZWQpOworZWxzZQor
I2VuZGlmCisgIHsKKyAgaWYgKFVzdGF0KGJ1bmRsZSwgJnN0YXRidWYpIDwgMCkKKyAgICB7Cisg
ICAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQywgImNvdWxkIG5vdCBzdGF0ICclcycg
IgorCSIodGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMpOiAlcyIsIGJ1bmRsZSwgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICByZXR1cm4gREVGRVI7CisgICAgfQorCisjaWZuZGVmIFNVUFBPUlRfQ0FfRElS
CisgIC8qIFRoZSB0ZXN0IHN1aXRlIHBhc3NlcyBpbiAvZGV2L251bGw7IHdlIGNvdWxkIGNoZWNr
IGZvciB0aGF0IHBhdGggZXhwbGljaXRseSwKKyAgYnV0IHdobyBrbm93cyBpZiBzb21lb25lIGhh
cyBzb21lIHdlaXJkIEZJRk8gd2hpY2ggYWx3YXlzIGR1bXBzIHNvbWUgY2VydHMsIG9yCisgIG90
aGVyIHdlaXJkbmVzcy4gIFRoZSB0aGluZyB3ZSByZWFsbHkgd2FudCB0byBjaGVjayBpcyB0aGF0
IGl0J3Mgbm90IGEKKyAgZGlyZWN0b3J5LCBzaW5jZSB3aGlsZSBPcGVuU1NMIHN1cHBvcnRzIHRo
YXQsIEdudVRMUyBkb2VzIG5vdC4KKyAgU28gcy8hU19JU1JFRy9TX0lTRElSLyBhbmQgY2hhbmdl
IHNvbWUgbWVzc2FnaW5nIC4uLiAqLworICBpZiAoU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKQor
ICAgIHsKKyAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLAorCSJ0bHNfdmVyaWZ5
X2NlcnRpZmljYXRlcyBcIiVzXCIgaXMgYSBkaXJlY3RvcnkiLCBidW5kbGUpOworICAgIHJldHVy
biBERUZFUjsKKyAgICB9CisjZW5kaWYKKworICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJ2
ZXJpZnkgY2VydGlmaWNhdGVzID0gJXMgc2l6ZT0iIE9GRl9UX0ZNVCAiXG4iLAorCSAgYnVuZGxl
LCBzdGF0YnVmLnN0X3NpemUpOworCisgIGlmIChzdGF0YnVmLnN0X3NpemUgPT0gMCkKKyAgICB7
CisgICAgREVCVUcoRF90bHMpCisgICAgICBkZWJ1Z19wcmludGYoImNlcnQgZmlsZSBlbXB0eSwg
bm8gY2VydHMsIG5vIHZlcmlmaWNhdGlvbiwgaWdub3JpbmcgYW55IENSTFxuIik7CisgICAgcmV0
dXJuIE9LOworICAgIH0KKworICBjZXJ0X2NvdW50ID0KKworI2lmZGVmIFNVUFBPUlRfQ0FfRElS
CisgICAgKHN0YXRidWYuc3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUgorICAgID8KKyAgICBn
bnV0bHNfY2VydGlmaWNhdGVfc2V0X3g1MDlfdHJ1c3RfZGlyKHN0YXRlLT5saWJfc3RhdGUueDUw
OV9jcmVkLAorICAgICAgQ1MgYnVuZGxlLCBHTlVUTFNfWDUwOV9GTVRfUEVNKQorICAgIDoKKyNl
bmRpZgorICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV90cnVzdF9maWxlKHN0YXRlLT5s
aWJfc3RhdGUueDUwOV9jcmVkLAorICAgICAgQ1MgYnVuZGxlLCBHTlVUTFNfWDUwOV9GTVRfUEVN
KTsKKworI2lmZGVmIFNVUFBPUlRfQ0FfRElSCisgIC8qIE1pbWljIHRoZSBiZWhhdmlvdXIgd2l0
aCBPcGVuU1NMIG9mIG5vdCBhZHZlcnRpc2luZyBhIHVzYWJsZS1jZXJ0IGxpc3QKKyAgd2hlbiB1
c2luZyB0aGUgZGlyZWN0b3J5LW9mLWNlcnRzIGNvbmZpZyBtb2RlbC4gKi8KKworICBpZiAoKHN0
YXRidWYuc3RfbW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUikKKyAgICBpZiAoc3RhdGUtPnNlc3Np
b24pCisgICAgICBnbnV0bHNfY2VydGlmaWNhdGVfc2VuZF94NTA5X3Jkbl9zZXF1ZW5jZShzdGF0
ZS0+c2Vzc2lvbiwgMSk7CisgICAgZWxzZQorICAgICAgc3RhdGUtPmxpYl9zdGF0ZS5jYV9yZG5f
ZW11bGF0ZSA9IFRSVUU7CisjZW5kaWYKKyAgfQorCitpZiAoY2VydF9jb3VudCA8IDApCisgIHJl
dHVybiB0bHNfZXJyb3JfZ251KHN0YXRlLCBVUyJzZXR0aW5nIGNlcnRpZmljYXRlIHRydXN0Iiwg
Y2VydF9jb3VudCwgZXJyc3RyKTsKK0RFQlVHKERfdGxzKQorICBkZWJ1Z19wcmludGYoIkFkZGVk
ICVkIGNlcnRpZmljYXRlIGF1dGhvcml0aWVzXG4iLCBjZXJ0X2NvdW50KTsKKworcmV0dXJuIE9L
OworfQorCisKK3N0YXRpYyBpbnQKK2NyZWRzX2xvYWRfY3JsKGV4aW1fZ251dGxzX3N0YXRlX3N0
ICogc3RhdGUsIGNvbnN0IHVzY2hhciAqIGNybCwgdXNjaGFyICoqIGVycnN0cikKK3sKK2ludCBj
ZXJ0X2NvdW50OworREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigibG9hZGluZyBDUkwgZmlsZSA9
ICVzXG4iLCBjcmwpOworaWYgKChjZXJ0X2NvdW50ID0gZ251dGxzX2NlcnRpZmljYXRlX3NldF94
NTA5X2NybF9maWxlKHN0YXRlLT5saWJfc3RhdGUueDUwOV9jcmVkLAorICAgIENTIGNybCwgR05V
VExTX1g1MDlfRk1UX1BFTSkpIDwgMCkKKyAgcmV0dXJuIHRsc19lcnJvcl9nbnUoc3RhdGUsIFVT
ImdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV9jcmxfZmlsZSIsCisJICAgIGNlcnRfY291bnQs
IGVycnN0cik7CisKK0RFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlByb2Nlc3NlZCAlZCBDUkxz
XG4iLCBjZXJ0X2NvdW50KTsKK3JldHVybiBPSzsKK30KKworCitzdGF0aWMgaW50CitjcmVkc19s
b2FkX3ByaXN0cmluZyhleGltX2dudXRsc19zdGF0ZV9zdCAqIHN0YXRlLCBjb25zdCB1c2NoYXIg
KiBwLAorICBjb25zdCBjaGFyICoqIGVycnBvcykKK3sKK2lmICghcCkKKyAgeworICBwID0gZXhp
bV9kZWZhdWx0X2dudXRsc19wcmlvcml0eTsKKyAgREVCVUcoRF90bHMpCisgICAgZGVidWdfcHJp
bnRmKCJHbnVUTFMgdXNpbmcgZGVmYXVsdCBzZXNzaW9uIGNpcGhlci9wcmlvcml0eSBcIiVzXCJc
biIsIHApOworICB9CityZXR1cm4gZ251dGxzX3ByaW9yaXR5X2luaXQoIChnbnV0bHNfcHJpb3Jp
dHlfdCAqKSAmc3RhdGUtPmxpYl9zdGF0ZS5wcmlfY2FjaGUsCisgIENDUyBwLCBlcnJwb3MpOwor
fQorCitzdGF0aWMgdW5zaWduZWQKK3Rsc19zZXJ2ZXJfY3JlZHNfaW5pdCh2b2lkKQorewordXNj
aGFyICogZHVtbXlfZXJyc3RyOwordW5zaWduZWQgbGlmZXRpbWUgPSAwOworCitzdGF0ZV9zZXJ2
ZXIubGliX3N0YXRlID0gbnVsbF90bHNfcHJlbG9hZDsKK2lmIChnbnV0bHNfY2VydGlmaWNhdGVf
YWxsb2NhdGVfY3JlZGVudGlhbHMoCisgICAgICAoZ251dGxzX2NlcnRpZmljYXRlX2NyZWRlbnRp
YWxzX3QgKikgJnN0YXRlX3NlcnZlci5saWJfc3RhdGUueDUwOV9jcmVkKSkKKyAgeworICBzdGF0
ZV9zZXJ2ZXIubGliX3N0YXRlLng1MDlfY3JlZCA9IE5VTEw7CisgIHJldHVybiBsaWZldGltZTsK
KyAgfQorY3JlZHNfYmFzaWNfaW5pdChzdGF0ZV9zZXJ2ZXIubGliX3N0YXRlLng1MDlfY3JlZCwg
VFJVRSk7CisKKyNpZiBkZWZpbmVkKEVYSU1fSEFWRV9JTk9USUZZKSB8fCBkZWZpbmVkKEVYSU1f
SEFWRV9LRVZFTlQpCisvKiBJZiB0bHNfY2VydGlmaWNhdGUgaGFzIGFueSAkIGluZGljYXRpbmcg
ZXhwYW5zaW9ucywgaXQgaXMgbm90IGdvb2QuCitJZiB0bHNfcHJpdmF0ZWtleSBpcyBzZXQgYnV0
IGhhcyAkLCBub3QgZ29vZC4gIExpa2V3aXNlIGZvciB0bHNfb2NzcF9maWxlLgorSWYgYWxsIGdv
b2QgKGFuZCB0bHNfY2VydGlmaWNhdGUgc2V0KSwgbG9hZCB0aGUgY2VydChzKS4gKi8KKworaWYg
KCAgb3B0X3NldF9hbmRfbm9leHBhbmQodGxzX2NlcnRpZmljYXRlKQorIyBpZm5kZWYgRElTQUJM
RV9PQ1NQCisgICAmJiBvcHRfdW5zZXRfb3Jfbm9leHBhbmQodGxzX29jc3BfZmlsZSkKKyMgZW5k
aWYKKyAgICYmIG9wdF91bnNldF9vcl9ub2V4cGFuZCh0bHNfcHJpdmF0ZWtleSkpCisgIHsKKyAg
LyogU2V0IHdhdGNoZXMgb24gdGhlIGZpbGVuYW1lcy4gIFRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vz
IGRlLWR1cGxpY2F0aW9uCisgIHNvIHdlIGNhbiBqdXN0IGJsaW5kbHkgZG8gdGhlbSBhbGwuCisg
ICovCisKKyAgaWYgKCAgdGxzX3NldF93YXRjaCh0bHNfY2VydGlmaWNhdGUsIFRSVUUpCisjIGlm
bmRlZiBESVNBQkxFX09DU1AKKyAgICAgJiYgdGxzX3NldF93YXRjaCh0bHNfb2NzcF9maWxlLCBU
UlVFKQorIyBlbmRpZgorICAgICAmJiB0bHNfc2V0X3dhdGNoKHRsc19wcml2YXRla2V5LCBUUlVF
KSkKKyAgICB7CisgICAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiVExTOiBwcmVsb2FkaW5n
IHNlcnZlciBjZXJ0c1xuIik7CisgICAgaWYgKGNyZWRzX2xvYWRfc2VydmVyX2NlcnRzKCZzdGF0
ZV9zZXJ2ZXIsIHRsc19jZXJ0aWZpY2F0ZSwKKwkgIHRsc19wcml2YXRla2V5ICYmICp0bHNfcHJp
dmF0ZWtleSA/IHRsc19wcml2YXRla2V5IDogdGxzX2NlcnRpZmljYXRlLAorIyBpZmRlZiBESVNB
QkxFX09DU1AKKwkgIE5VTEwsCisjIGVsc2UKKwkgIHRsc19vY3NwX2ZpbGUsCisjIGVuZGlmCisJ
ICAmZHVtbXlfZXJyc3RyKSA9PSAwKQorICAgICAgc3RhdGVfc2VydmVyLmxpYl9zdGF0ZS5jb25u
X2NlcnRzID0gVFJVRTsKKyAgICB9CisgIH0KK2Vsc2UgaWYgKCAgIXRsc19jZXJ0aWZpY2F0ZSAm
JiAhdGxzX3ByaXZhdGVrZXkKKyMgaWZuZGVmIERJU0FCTEVfT0NTUAorCSYmICF0bHNfb2NzcF9m
aWxlCisjIGVuZGlmCisJKQorICB7CQkvKiBHZW5lcmF0ZSAmIHByZWxvYWQgYSBzZWxmc2lnbmVk
IGNlcnQuIE5vIGZpbGVzIHRvIHdhdGNoLiAqLworICBpZiAoKHRsc19pbnN0YWxsX3NlbGZzaWdu
KCZzdGF0ZV9zZXJ2ZXIsICZkdW1teV9lcnJzdHIpKSA9PSBPSykKKyAgICB7CisgICAgc3RhdGVf
c2VydmVyLmxpYl9zdGF0ZS5jb25uX2NlcnRzID0gVFJVRTsKKyAgICBsaWZldGltZSA9IGYucnVu
bmluZ19pbl90ZXN0X2hhcm5lc3MgPyAyIDogNjAgKiA2MDsJCS8qIDEgaG91ciAqLworICAgIH0K
KyAgfQorZWxzZQorICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJUTFM6IG5vdCBwcmVsb2Fk
aW5nIHNlcnZlciBjZXJ0c1xuIik7CisKKy8qIElmIHRsc192ZXJpZnlfY2VydGlmaWNhdGVzIGlz
IG5vbi1lbXB0eSBhbmQgaGFzIG5vICQsIGxvYWQgQ0FzLgorSWYgbm9uZSB3YXMgY29uZmlndXJl
ZCBhbmQgd2UgY2FuJ3QgaGFuZGxlICJzeXN0ZW0iLCB0cmVhdCBhcyBlbXB0eS4gKi8KKworaWYg
KCAgb3B0X3NldF9hbmRfbm9leHBhbmQodGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMpCisjaWZuZGVm
IFNVUFBPUlRfU1lTREVGQVVMVF9DQUJVTkRMRQorICAgJiYgVXN0cmNtcCh0bHNfdmVyaWZ5X2Nl
cnRpZmljYXRlcywgInN5c3RlbSIpICE9IDAKKyNlbmRpZgorICAgKQorICB7CisgIGlmICh0bHNf
c2V0X3dhdGNoKHRsc192ZXJpZnlfY2VydGlmaWNhdGVzLCBGQUxTRSkpCisgICAgeworICAgIERF
QlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlRMUzogcHJlbG9hZGluZyBDQSBidW5kbGUgZm9yIHNl
cnZlclxuIik7CisgICAgaWYgKGNyZWRzX2xvYWRfY2FidW5kbGUoJnN0YXRlX3NlcnZlciwgdGxz
X3ZlcmlmeV9jZXJ0aWZpY2F0ZXMsCisJCQkgICAgTlVMTCwgJmR1bW15X2VycnN0cikgIT0gT0sp
CisgICAgICByZXR1cm4gbGlmZXRpbWU7CisgICAgc3RhdGVfc2VydmVyLmxpYl9zdGF0ZS5jYWJ1
bmRsZSA9IFRSVUU7CisKKyAgICAvKiBJZiBDQXMgbG9hZGVkIGFuZCB0bHNfY3JsIGlzIG5vbi1l
bXB0eSBhbmQgaGFzIG5vICQsIGxvYWQgaXQgKi8KKworICAgIGlmIChvcHRfc2V0X2FuZF9ub2V4
cGFuZCh0bHNfY3JsKSkKKyAgICAgIHsKKyAgICAgIGlmICh0bHNfc2V0X3dhdGNoKHRsc19jcmws
IEZBTFNFKSkKKwl7CisJREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiVExTOiBwcmVsb2FkaW5n
IENSTCBmb3Igc2VydmVyXG4iKTsKKwlpZiAoY3JlZHNfbG9hZF9jcmwoJnN0YXRlX3NlcnZlciwg
dGxzX2NybCwgJmR1bW15X2VycnN0cikgIT0gT0spCisJICByZXR1cm4gbGlmZXRpbWU7CisJc3Rh
dGVfc2VydmVyLmxpYl9zdGF0ZS5jcmwgPSBUUlVFOworCX0KKyAgICAgIH0KKyAgICBlbHNlCisg
ICAgICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJUTFM6IG5vdCBwcmVsb2FkaW5nIENSTCBm
b3Igc2VydmVyXG4iKTsKKyAgICB9CisgIH0KK2Vsc2UKKyAgREVCVUcoRF90bHMpIGRlYnVnX3By
aW50ZigiVExTOiBub3QgcHJlbG9hZGluZyBDQSBidW5kbGUgZm9yIHNlcnZlclxuIik7CisjZW5k
aWYJLyogRVhJTV9IQVZFX0lOT1RJRlkgKi8KKworLyogSWYgdGxzX3JlcXVpcmVfY2lwaGVycyBp
cyBub24tZW1wdHkgYW5kIGhhcyBubyAkLCBsb2FkIHRoZQorY2lwaGVycyBwcmlvcml0eSBjYWNo
ZS4gIElmIHVuc2V0LCBsb2FkIHdpdGggdGhlIGRlZmF1bHQuCisoc2VydmVyLW9ubHkgYXMgdGhl
IGNsaWVudCBvbmUgZGVwZW5kcyBvbiBub24vREFORSkgKi8KKworaWYgKCF0bHNfcmVxdWlyZV9j
aXBoZXJzIHx8IG9wdF9zZXRfYW5kX25vZXhwYW5kKHRsc19yZXF1aXJlX2NpcGhlcnMpKQorICB7
CisgIGNvbnN0IGNoYXIgKiBkdW1teV9lcnJwb3M7CisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmlu
dGYoIlRMUzogcHJlbG9hZGluZyBjaXBoZXIgbGlzdCBmb3Igc2VydmVyOiAlc1xuIiwKKwkJICB0
bHNfcmVxdWlyZV9jaXBoZXJzKTsKKyAgaWYgKCAgY3JlZHNfbG9hZF9wcmlzdHJpbmcoJnN0YXRl
X3NlcnZlciwgdGxzX3JlcXVpcmVfY2lwaGVycywgJmR1bW15X2VycnBvcykKKyAgICAgPT0gT0sp
CisgICAgc3RhdGVfc2VydmVyLmxpYl9zdGF0ZS5wcmlfc3RyaW5nID0gVFJVRTsKKyAgfQorZWxz
ZQorICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJUTFM6IG5vdCBwcmVsb2FkaW5nIGNpcGhl
ciBsaXN0IGZvciBzZXJ2ZXJcbiIpOworcmV0dXJuIGxpZmV0aW1lOworfQorCisKKy8qIFByZWxv
YWQgd2hhdGV2ZXIgY3JlZHMgYXJlIHN0YXRpYywgb250byBhIHRyYW5zcG9ydC4gIFRoZSBjbGll
bnQgY2FuIHRoZW4KK2p1c3QgY29weSB0aGUgcG9pbnRlciBhcyBpdCBzdGFydHMgdXAuICovCisK
Ky8qWFhYIHRoaXMgaXMgbm90IGNhbGxlZCBmb3IgYSBjbWRsaW5lIHNlbmQuIEJ1dCBvbmUgbmVl
ZGluZyB0byB1c2UgPjEgY29ubiB3b3VsZCBiZW5lZml0LAorYW5kIHRoZXJlIHNlZW1zIGxpdHRs
ZSBkb3duc2lkZS4gKi8KKworc3RhdGljIHZvaWQKK3Rsc19jbGllbnRfY3JlZHNfaW5pdCh0cmFu
c3BvcnRfaW5zdGFuY2UgKiB0LCBCT09MIHdhdGNoKQoreworc210cF90cmFuc3BvcnRfb3B0aW9u
c19ibG9jayAqIG9iID0gdC0+b3B0aW9uc19ibG9jazsKK2V4aW1fZ251dGxzX3N0YXRlX3N0IHRw
dF9kdW1teV9zdGF0ZTsKK2hvc3RfaXRlbSAqIGR1bW15X2hvc3QgPSAoaG9zdF9pdGVtICopMTsK
K3VzY2hhciAqIGR1bW15X2VycnN0cjsKKworaWYgKCAgIWV4aW1fZ251dGxzX2Jhc2VfaW5pdF9k
b25lCisgICAmJiB0bHNfZ19pbml0KCZkdW1teV9lcnJzdHIpICE9IE9LKQorICByZXR1cm47CisK
K29iLT50bHNfcHJlbG9hZCA9IG51bGxfdGxzX3ByZWxvYWQ7CitpZiAoZ251dGxzX2NlcnRpZmlj
YXRlX2FsbG9jYXRlX2NyZWRlbnRpYWxzKAorICAoc3RydWN0IGdudXRsc19jZXJ0aWZpY2F0ZV9j
cmVkZW50aWFsc19zdCAqKikmb2ItPnRsc19wcmVsb2FkLng1MDlfY3JlZCkpCisgIHsKKyAgb2It
PnRsc19wcmVsb2FkLng1MDlfY3JlZCA9IE5VTEw7CisgIHJldHVybjsKKyAgfQorY3JlZHNfYmFz
aWNfaW5pdChvYi0+dGxzX3ByZWxvYWQueDUwOV9jcmVkLCBGQUxTRSk7CisKK3RwdF9kdW1teV9z
dGF0ZS5zZXNzaW9uID0gTlVMTDsKK3RwdF9kdW1teV9zdGF0ZS5saWJfc3RhdGUgPSBvYi0+dGxz
X3ByZWxvYWQ7CisKKyNpZiBkZWZpbmVkKEVYSU1fSEFWRV9JTk9USUZZKSB8fCBkZWZpbmVkKEVY
SU1fSEFWRV9LRVZFTlQpCitpZiAoICBvcHRfc2V0X2FuZF9ub2V4cGFuZChvYi0+dGxzX2NlcnRp
ZmljYXRlKQorICAgJiYgb3B0X3Vuc2V0X29yX25vZXhwYW5kKG9iLT50bHNfcHJpdmF0ZWtleSkp
CisgIHsKKyAgaWYgKCAgIXdhdGNoCisgICAgIHx8ICggIHRsc19zZXRfd2F0Y2gob2ItPnRsc19j
ZXJ0aWZpY2F0ZSwgRkFMU0UpCisJJiYgdGxzX3NldF93YXRjaChvYi0+dGxzX3ByaXZhdGVrZXks
IEZBTFNFKQorICAgICApICApCisgICAgeworICAgIGNvbnN0IHVzY2hhciAqIHBrZXkgPSBvYi0+
dGxzX3ByaXZhdGVrZXk7CisKKyAgICBERUJVRyhEX3RscykKKyAgICAgIGRlYnVnX3ByaW50Zigi
VExTOiBwcmVsb2FkaW5nIGNsaWVudCBjZXJ0cyBmb3IgdHJhbnNwb3J0ICclcydcbiIsIHQtPm5h
bWUpOworCisgICAgLyogVGhlIHN0YXRlLT5saWJfc3RhdGUueDUwOV9jcmVkIGlzIHVzZWQgZm9y
IHRoZSBjZXJ0cyBsb2FkLCBhbmQgaXMgdGhlIHNvbGUKKyAgICBzdHJ1Y3R1cmUgZWxlbWVudCB1
c2VkLiAgU28gd2UgY2FuIHNldCB1cCBhIGR1bW15LiAgVGhlIGhvYXQgYXJnIG9ubHkKKyAgICBz
ZWxlY3RzIGEgcmV0Y29kZSBpbiBjYXNlIG9mIGZhaWwsIHNvIGFueSB2YWx1ZSAqLworCisgICAg
aWYgKGNyZWRzX2xvYWRfY2xpZW50X2NlcnRzKCZ0cHRfZHVtbXlfc3RhdGUsIGR1bW15X2hvc3Qs
CisJICBvYi0+dGxzX2NlcnRpZmljYXRlLCBwa2V5ID8gcGtleSA6IG9iLT50bHNfY2VydGlmaWNh
dGUsCisJICAmZHVtbXlfZXJyc3RyKSA9PSBPSykKKyAgICAgIG9iLT50bHNfcHJlbG9hZC5jb25u
X2NlcnRzID0gVFJVRTsKKyAgICB9CisgIH0KK2Vsc2UKKyAgREVCVUcoRF90bHMpCisgICAgZGVi
dWdfcHJpbnRmKCJUTFM6IG5vdCBwcmVsb2FkaW5nIGNsaWVudCBjZXJ0cywgZm9yIHRyYW5zcG9y
dCAnJXMnXG4iLCB0LT5uYW1lKTsKKworLyogSWYgdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMgaXMg
bm9uLWVtcHR5IGFuZCBoYXMgbm8gJCwgbG9hZCBDQXMuCitJZiBub25lIHdhcyBjb25maWd1cmVk
IGFuZCB3ZSBjYW4ndCBoYW5kbGUgInN5c3RlbSIsIHRyZWF0IGFzIGVtcHR5LiAqLworCitpZiAo
ICBvcHRfc2V0X2FuZF9ub2V4cGFuZChvYi0+dGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMpCisjaWZu
ZGVmIFNVUFBPUlRfU1lTREVGQVVMVF9DQUJVTkRMRQorICAgJiYgVXN0cmNtcChvYi0+dGxzX3Zl
cmlmeV9jZXJ0aWZpY2F0ZXMsICJzeXN0ZW0iKSAhPSAwCisjZW5kaWYKKyAgICkKKyAgeworICBp
ZiAoIXdhdGNoIHx8IHRsc19zZXRfd2F0Y2gob2ItPnRsc192ZXJpZnlfY2VydGlmaWNhdGVzLCBG
QUxTRSkpCisgICAgeworICAgIERFQlVHKERfdGxzKQorICAgICAgZGVidWdfcHJpbnRmKCJUTFM6
IHByZWxvYWRpbmcgQ0EgYnVuZGxlIGZvciB0cmFuc3BvcnQgJyVzJ1xuIiwgdC0+bmFtZSk7Cisg
ICAgaWYgKGNyZWRzX2xvYWRfY2FidW5kbGUoJnRwdF9kdW1teV9zdGF0ZSwgb2ItPnRsc192ZXJp
ZnlfY2VydGlmaWNhdGVzLAorCQkJICAgIGR1bW15X2hvc3QsICZkdW1teV9lcnJzdHIpICE9IE9L
KQorICAgICAgcmV0dXJuOworICAgIG9iLT50bHNfcHJlbG9hZC5jYWJ1bmRsZSA9IFRSVUU7CisK
KyAgICBpZiAob3B0X3NldF9hbmRfbm9leHBhbmQob2ItPnRsc19jcmwpKQorICAgICAgeworICAg
ICAgaWYgKCF3YXRjaCB8fCB0bHNfc2V0X3dhdGNoKG9iLT50bHNfY3JsLCBGQUxTRSkpCisJewor
CURFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlRMUzogcHJlbG9hZGluZyBDUkwgZm9yIHRyYW5z
cG9ydCAnJXMnXG4iLCB0LT5uYW1lKTsKKwlpZiAoY3JlZHNfbG9hZF9jcmwoJnRwdF9kdW1teV9z
dGF0ZSwgb2ItPnRsc19jcmwsICZkdW1teV9lcnJzdHIpICE9IE9LKQorCSAgcmV0dXJuOworCW9i
LT50bHNfcHJlbG9hZC5jcmwgPSBUUlVFOworCX0KKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBE
RUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJUTFM6IG5vdCBwcmVsb2FkaW5nIENSTCwgZm9yIHRy
YW5zcG9ydCAnJXMnXG4iLCB0LT5uYW1lKTsKKyAgICB9CisgIH0KK2Vsc2UKKyAgREVCVUcoRF90
bHMpCisgICAgICBkZWJ1Z19wcmludGYoIlRMUzogbm90IHByZWxvYWRpbmcgQ0EgYnVuZGxlLCBm
b3IgdHJhbnNwb3J0ICclcydcbiIsIHQtPm5hbWUpOworCisvKiBXZSBkbyBub3QgcHJlbG9hZCB0
bHNfcmVxdWlyZV9jaXBoZXJzIHRvIHRvIHRoZSB0cmFuc3BvcnQgYXMgaXQgaW1wbGljaXRseQor
ZGVwZW5kcyBvbiBEQU5FIG9yIHBsYWluIHVzYWdlLiAqLworCisjZW5kaWYKK30KKworCisjaWYg
ZGVmaW5lZChFWElNX0hBVkVfSU5PVElGWSkgfHwgZGVmaW5lZChFWElNX0hBVkVfS0VWRU5UKQor
LyogSW52YWxpZGF0ZSB0aGUgY3JlZHMgY2FjaGVkLCBieSBkcm9wcGluZyB0aGUgY3VycmVudCBv
bmVzLgorQ2FsbCB3aGVuIHdlIG5vdGljZSBvbmUgb2YgdGhlIHNvdXJjZSBmaWxlcyBoYXMgY2hh
bmdlZC4gKi8KKyAKK3N0YXRpYyB2b2lkCit0bHNfc2VydmVyX2NyZWRzX2ludmFsaWRhdGUodm9p
ZCkKK3sKK2lmIChzdGF0ZV9zZXJ2ZXIubGliX3N0YXRlLnByaV9jYWNoZSkKKyAgZ251dGxzX3By
aW9yaXR5X2RlaW5pdChzdGF0ZV9zZXJ2ZXIubGliX3N0YXRlLnByaV9jYWNoZSk7CitzdGF0ZV9z
ZXJ2ZXIubGliX3N0YXRlLnByaV9jYWNoZSA9IE5VTEw7CisKK2lmIChzdGF0ZV9zZXJ2ZXIubGli
X3N0YXRlLng1MDlfY3JlZCkKKyAgZ251dGxzX2NlcnRpZmljYXRlX2ZyZWVfY3JlZGVudGlhbHMo
c3RhdGVfc2VydmVyLmxpYl9zdGF0ZS54NTA5X2NyZWQpOworc3RhdGVfc2VydmVyLmxpYl9zdGF0
ZSA9IG51bGxfdGxzX3ByZWxvYWQ7Cit9CisKKworc3RhdGljIHZvaWQKK3Rsc19jbGllbnRfY3Jl
ZHNfaW52YWxpZGF0ZSh0cmFuc3BvcnRfaW5zdGFuY2UgKiB0KQoreworc210cF90cmFuc3BvcnRf
b3B0aW9uc19ibG9jayAqIG9iID0gdC0+b3B0aW9uc19ibG9jazsKK2lmIChvYi0+dGxzX3ByZWxv
YWQueDUwOV9jcmVkKQorICBnbnV0bHNfY2VydGlmaWNhdGVfZnJlZV9jcmVkZW50aWFscyhvYi0+
dGxzX3ByZWxvYWQueDUwOV9jcmVkKTsKK29iLT50bHNfcHJlbG9hZCA9IG51bGxfdGxzX3ByZWxv
YWQ7Cit9CisjZW5kaWYKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgogKiAgICAgICBWYXJpYWJsZXMgcmUtZXhwYW5kZWQgcG9zdC1TTkkgICAg
ICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCkBAIC0xMDg1LDEzICsxNzQ4LDEyIEBACiBzdGF0aWMgaW50CiB0bHNfZXhwYW5kX3Nlc3Np
b25fZmlsZXMoZXhpbV9nbnV0bHNfc3RhdGVfc3QgKiBzdGF0ZSwgdXNjaGFyICoqIGVycnN0cikK
IHsKLXN0cnVjdCBzdGF0IHN0YXRidWY7CiBpbnQgcmM7CiBjb25zdCBob3N0X2l0ZW0gKmhvc3Qg
PSBzdGF0ZS0+aG9zdDsgIC8qIG1hY3JvIHNob3VsZCBiZSByZWNvbnNpZGVyZWQ/ICovCi11c2No
YXIgKnNhdmVkX3Rsc19jZXJ0aWZpY2F0ZSA9IE5VTEw7Ci11c2NoYXIgKnNhdmVkX3Rsc19wcml2
YXRla2V5ID0gTlVMTDsKLXVzY2hhciAqc2F2ZWRfdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMgPSBO
VUxMOwotdXNjaGFyICpzYXZlZF90bHNfY3JsID0gTlVMTDsKK2NvbnN0IHVzY2hhciAqc2F2ZWRf
dGxzX2NlcnRpZmljYXRlID0gTlVMTDsKK2NvbnN0IHVzY2hhciAqc2F2ZWRfdGxzX3ByaXZhdGVr
ZXkgPSBOVUxMOworY29uc3QgdXNjaGFyICpzYXZlZF90bHNfdmVyaWZ5X2NlcnRpZmljYXRlcyA9
IE5VTEw7Citjb25zdCB1c2NoYXIgKnNhdmVkX3Rsc19jcmwgPSBOVUxMOwogaW50IGNlcnRfY291
bnQ7CiAKIC8qIFdlIGNoZWNrIGZvciB0bHNfc25pICpiZWZvcmUqIGV4cGFuc2lvbi4gKi8KQEAg
LTExMDQsMTEgKzE3NjYsMTEgQEAKIAkgIHx8IFVzdHJzdHIoc3RhdGUtPnRsc19jZXJ0aWZpY2F0
ZSwgVVMidGxzX291dF9zbmkiKQogICAgICAgICkgICkKICAgICAgIHsKLSAgICAgIERFQlVHKERf
dGxzKSBkZWJ1Z19wcmludGYoIldlIHdpbGwgcmUtZXhwYW5kIFRMUyBzZXNzaW9uIGZpbGVzIGlm
IHdlIHJlY2VpdmUgU05JLlxuIik7CisgICAgICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJX
ZSB3aWxsIHJlLWV4cGFuZCBUTFMgc2Vzc2lvbiBmaWxlcyBpZiB3ZSByZWNlaXZlIFNOSVxuIik7
CiAgICAgICBzdGF0ZS0+dHJpZ2dlcl9zbmlfY2hhbmdlcyA9IFRSVUU7CiAgICAgICB9CiAgICAg
fQotICBlbHNlCisgIGVsc2UJLyogU05JIGNhbGxiYWNrIGNhc2UgKi8KICAgICB7CiAgICAgLyog
dXNlZnVsIGZvciBkZWJ1Z2dpbmcgKi8KICAgICBzYXZlZF90bHNfY2VydGlmaWNhdGUgPSBzdGF0
ZS0+ZXhwX3Rsc19jZXJ0aWZpY2F0ZTsKQEAgLTExMTcsMjk0ICsxNzc5LDE2NiBAQAogICAgIHNh
dmVkX3Rsc19jcmwgPSBzdGF0ZS0+ZXhwX3Rsc19jcmw7CiAgICAgfQogCi1pZiAoKHJjID0gZ251
dGxzX2NlcnRpZmljYXRlX2FsbG9jYXRlX2NyZWRlbnRpYWxzKCZzdGF0ZS0+eDUwOV9jcmVkKSkp
Ci0gIHJldHVybiB0bHNfZXJyb3JfZ251KFVTImdudXRsc19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9j
cmVkZW50aWFscyIsCi0JICAgIHJjLCBob3N0LCBlcnJzdHIpOwotCi0jaWZkZWYgU1VQUE9SVF9T
UlZfT0NTUF9TVEFDSwotZ251dGxzX2NlcnRpZmljYXRlX3NldF9mbGFncyhzdGF0ZS0+eDUwOV9j
cmVkLCBHTlVUTFNfQ0VSVElGSUNBVEVfQVBJX1YyKTsKLQotIyBpZiAhZGVmaW5lZChESVNBQkxF
X09DU1ApICYmIGRlZmluZWQoU1VQUE9SVF9HTlVUTFNfRVhUX1JBV19QQVJTRSkKLWlmICghaG9z
dCAmJiB0bHNfb2NzcF9maWxlKQoraWYgKCFzdGF0ZS0+bGliX3N0YXRlLng1MDlfY3JlZCkKICAg
ewotICBpZiAoZi5ydW5uaW5nX2luX3Rlc3RfaGFybmVzcykKLSAgICB0bHNfc2VydmVyX3Rlc3Ro
YXJuZXNzX29jc3BfZmlkZGxlKCk7Ci0KLSAgaWYgKGV4aW1fdGVzdGhhcm5lc3NfZGlzYWJsZV9v
Y3NwX3ZhbGlkaXR5X2NoZWNrKQotICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfZmxhZ3Moc3Rh
dGUtPng1MDlfY3JlZCwKLSAgICAgIEdOVVRMU19DRVJUSUZJQ0FURV9BUElfVjIgfCBHTlVUTFNf
Q0VSVElGSUNBVEVfU0tJUF9PQ1NQX1JFU1BPTlNFX0NIRUNLKTsKKyAgaWYgKChyYyA9IGdudXRs
c19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9jcmVkZW50aWFscygKKwkoZ251dGxzX2NlcnRpZmljYXRl
X2NyZWRlbnRpYWxzX3QgKikgJnN0YXRlLT5saWJfc3RhdGUueDUwOV9jcmVkKSkpCisgICAgcmV0
dXJuIHRsc19lcnJvcl9nbnUoc3RhdGUsIFVTImdudXRsc19jZXJ0aWZpY2F0ZV9hbGxvY2F0ZV9j
cmVkZW50aWFscyIsCisJICAgIHJjLCBlcnJzdHIpOworICBjcmVkc19iYXNpY19pbml0KHN0YXRl
LT5saWJfc3RhdGUueDUwOV9jcmVkLCAhaG9zdCk7CiAgIH0KLSMgZW5kaWYKLSNlbmRpZgogCi0v
KiByZW1lbWJlcjogZXhwYW5kX2NoZWNrX3Rsc3ZhcigpIGlzIGV4cGFuZF9jaGVjaygpIGJ1dCBm
aWRkbGluZyB3aXRoCisKKy8qIHJlbWVtYmVyOiBFeHBhbmRfY2hlY2tfdGxzdmFyKCkgaXMgZXhw
YW5kX2NoZWNrKCkgYnV0IGZpZGRsaW5nIHdpdGgKIHN0YXRlIG1lbWJlcnMsIGFzc3VtaW5nIGNv
bnNpc3RlbnQgbmFtaW5nOyBhbmQgZXhwYW5kX2NoZWNrKCkgcmV0dXJucwogZmFsc2UgaWYgZXhw
YW5zaW9uIGZhaWxlZCwgdW5sZXNzIGV4cGFuc2lvbiB3YXMgZm9yY2VkIHRvIGZhaWwuICovCiAK
IC8qIGNoZWNrIGlmIHdlIGF0IGxlYXN0IGhhdmUgYSBjZXJ0aWZpY2F0ZSwgYmVmb3JlIGRvaW5n
IGV4cGVuc2l2ZQogRC1IIGdlbmVyYXRpb24uICovCiAKLWlmICghZXhwYW5kX2NoZWNrX3Rsc3Zh
cih0bHNfY2VydGlmaWNhdGUsIGVycnN0cikpCi0gIHJldHVybiBERUZFUjsKLQotLyogY2VydGlm
aWNhdGUgaXMgbWFuZGF0b3J5IGluIHNlcnZlciwgb3B0aW9uYWwgaW4gY2xpZW50ICovCi0KLWlm
ICggICFzdGF0ZS0+ZXhwX3Rsc19jZXJ0aWZpY2F0ZQotICAgfHwgISpzdGF0ZS0+ZXhwX3Rsc19j
ZXJ0aWZpY2F0ZQotICAgKQotICBpZiAoIWhvc3QpCi0gICAgcmV0dXJuIHRsc19pbnN0YWxsX3Nl
bGZzaWduKHN0YXRlLCBlcnJzdHIpOwotICBlbHNlCi0gICAgREVCVUcoRF90bHMpIGRlYnVnX3By
aW50ZigiVExTOiBubyBjbGllbnQgY2VydGlmaWNhdGUgc3BlY2lmaWVkOyBva2F5XG4iKTsKLQot
aWYgKHN0YXRlLT50bHNfcHJpdmF0ZWtleSAmJiAhZXhwYW5kX2NoZWNrX3Rsc3Zhcih0bHNfcHJp
dmF0ZWtleSwgZXJyc3RyKSkKLSAgcmV0dXJuIERFRkVSOwotCi0vKiB0bHNfcHJpdmF0ZWtleSBp
cyBvcHRpb25hbCwgZGVmYXVsdGluZyB0byBzYW1lIGZpbGUgYXMgY2VydGlmaWNhdGUgKi8KLQot
aWYgKCFzdGF0ZS0+dGxzX3ByaXZhdGVrZXkgfHwgISpzdGF0ZS0+dGxzX3ByaXZhdGVrZXkpCitp
ZiAoIXN0YXRlLT5saWJfc3RhdGUuY29ubl9jZXJ0cykKICAgewotICBzdGF0ZS0+dGxzX3ByaXZh
dGVrZXkgPSBzdGF0ZS0+dGxzX2NlcnRpZmljYXRlOwotICBzdGF0ZS0+ZXhwX3Rsc19wcml2YXRl
a2V5ID0gc3RhdGUtPmV4cF90bHNfY2VydGlmaWNhdGU7Ci0gIH0KLQorICBpZiAoIUV4cGFuZF9j
aGVja190bHN2YXIodGxzX2NlcnRpZmljYXRlLCBlcnJzdHIpKQorICAgIHJldHVybiBERUZFUjsK
IAotaWYgKHN0YXRlLT5leHBfdGxzX2NlcnRpZmljYXRlICYmICpzdGF0ZS0+ZXhwX3Rsc19jZXJ0
aWZpY2F0ZSkKLSAgewotICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJjZXJ0aWZpY2F0ZSBm
aWxlID0gJXNcbmtleSBmaWxlID0gJXNcbiIsCi0gICAgICBzdGF0ZS0+ZXhwX3Rsc19jZXJ0aWZp
Y2F0ZSwgc3RhdGUtPmV4cF90bHNfcHJpdmF0ZWtleSk7CisgIC8qIGNlcnRpZmljYXRlIGlzIG1h
bmRhdG9yeSBpbiBzZXJ2ZXIsIG9wdGlvbmFsIGluIGNsaWVudCAqLwogCi0gIGlmIChzdGF0ZS0+
cmVjZWl2ZWRfc25pKQotICAgIGlmICggIFVzdHJjbXAoc3RhdGUtPmV4cF90bHNfY2VydGlmaWNh
dGUsIHNhdmVkX3Rsc19jZXJ0aWZpY2F0ZSkgPT0gMAotICAgICAgICYmIFVzdHJjbXAoc3RhdGUt
PmV4cF90bHNfcHJpdmF0ZWtleSwgIHNhdmVkX3Rsc19wcml2YXRla2V5KSAgPT0gMAotICAgICAg
ICkKLSAgICAgIHsKLSAgICAgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlRMUyBTTkk6IGNl
cnQgYW5kIGtleSB1bmNoYW5nZWRcbiIpOwotICAgICAgfQorICBpZiAoICAhc3RhdGUtPmV4cF90
bHNfY2VydGlmaWNhdGUKKyAgICAgfHwgISpzdGF0ZS0+ZXhwX3Rsc19jZXJ0aWZpY2F0ZQorICAg
ICApCisgICAgaWYgKCFob3N0KQorICAgICAgcmV0dXJuIHRsc19pbnN0YWxsX3NlbGZzaWduKHN0
YXRlLCBlcnJzdHIpOwogICAgIGVsc2UKLSAgICAgIHsKLSAgICAgIERFQlVHKERfdGxzKSBkZWJ1
Z19wcmludGYoIlRMUyBTTkk6IGhhdmUgYSBjaGFuZ2VkIGNlcnQva2V5IHBhaXIuXG4iKTsKLSAg
ICAgIH0KLQotICBpZiAoIWhvc3QpCS8qIHNlcnZlciAqLwotICAgIHsKLSAgICBjb25zdCB1c2No
YXIgKiBjbGlzdCA9IHN0YXRlLT5leHBfdGxzX2NlcnRpZmljYXRlOwotICAgIGNvbnN0IHVzY2hh
ciAqIGtsaXN0ID0gc3RhdGUtPmV4cF90bHNfcHJpdmF0ZWtleTsKLSAgICBjb25zdCB1c2NoYXIg
KiBvbGlzdDsKLSAgICBpbnQgY3NlcCA9IDAsIGtzZXAgPSAwLCBvc2VwID0gMCwgY250ID0gMDsK
LSAgICB1c2NoYXIgKiBjZmlsZSwgKiBrZmlsZSwgKiBvZmlsZTsKLSNpZm5kZWYgRElTQUJMRV9P
Q1NQCi0jIGlmZGVmIFNVUFBPUlRfR05VVExTX0VYVF9SQVdfUEFSU0UKLSAgICBnbnV0bHNfeDUw
OV9jcnRfZm10X3Qgb2NzcF9mbXQgPSBHTlVUTFNfWDUwOV9GTVRfREVSOwotIyBlbmRpZgorICAg
ICAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiVExTOiBubyBjbGllbnQgY2VydGlmaWNhdGUg
c3BlY2lmaWVkOyBva2F5XG4iKTsKIAotICAgIGlmICghZXhwYW5kX2NoZWNrKHRsc19vY3NwX2Zp
bGUsIFVTInRsc19vY3NwX2ZpbGUiLCAmb2ZpbGUsIGVycnN0cikpCi0gICAgICByZXR1cm4gREVG
RVI7Ci0gICAgb2xpc3QgPSBvZmlsZTsKLSNlbmRpZgotCi0gICAgd2hpbGUgKGNmaWxlID0gc3Ry
aW5nX25leHRpbmxpc3QoJmNsaXN0LCAmY3NlcCwgTlVMTCwgMCkpCisgIGlmIChzdGF0ZS0+dGxz
X3ByaXZhdGVrZXkgJiYgIUV4cGFuZF9jaGVja190bHN2YXIodGxzX3ByaXZhdGVrZXksIGVycnN0
cikpCisgICAgcmV0dXJuIERFRkVSOwogCi0gICAgICBpZiAoIShrZmlsZSA9IHN0cmluZ19uZXh0
aW5saXN0KCZrbGlzdCwgJmtzZXAsIE5VTEwsIDApKSkKLQlyZXR1cm4gdGxzX2Vycm9yKFVTImNl
cnQva2V5IHNldHVwOiBvdXQgb2Yga2V5cyIsIE5VTEwsIGhvc3QsIGVycnN0cik7Ci0gICAgICBl
bHNlIGlmICgwIDwgKHJjID0gdGxzX2FkZF9jZXJ0ZmlsZShzdGF0ZSwgaG9zdCwgY2ZpbGUsIGtm
aWxlLCBlcnJzdHIpKSkKLQlyZXR1cm4gcmM7Ci0gICAgICBlbHNlCi0JewotCWludCBnbnV0bHNf
Y2VydF9pbmRleCA9IC1yYzsKLQlERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJUTFM6IGNlcnQv
a2V5ICVkICVzIHJlZ2lzdGVyZWRcbiIsCi0JCQkJICBnbnV0bHNfY2VydF9pbmRleCwgY2ZpbGUp
OworICAvKiB0bHNfcHJpdmF0ZWtleSBpcyBvcHRpb25hbCwgZGVmYXVsdGluZyB0byBzYW1lIGZp
bGUgYXMgY2VydGlmaWNhdGUgKi8KIAotI2lmbmRlZiBESVNBQkxFX09DU1AKLQlpZiAodGxzX29j
c3BfZmlsZSkKLQkgIHsKLQkgIC8qIFNldCB0aGUgT0NTUCBzdGFwbGluZyBzZXJ2ZXIgaW5mbyAq
LwotCSAgaWYgKGdudXRsc19idWdneV9vY3NwKQotCSAgICB7Ci0JICAgIERFQlVHKERfdGxzKQot
CSAgICAgIGRlYnVnX3ByaW50ZigiR251VExTIGxpYnJhcnkgaXMgYnVnZ3kgZm9yIE9DU1A7IGF2
b2lkaW5nXG4iKTsKLQkgICAgfQotCSAgZWxzZSBpZiAoKG9maWxlID0gc3RyaW5nX25leHRpbmxp
c3QoJm9saXN0LCAmb3NlcCwgTlVMTCwgMCkpKQotCSAgICB7Ci0JICAgIERFQlVHKERfdGxzKSBk
ZWJ1Z19wcmludGYoIk9DU1AgcmVzcG9uc2UgZmlsZSAlZCAgPSAlc1xuIiwKLQkJCQkgICAgICBn
bnV0bHNfY2VydF9pbmRleCwgb2ZpbGUpOwotIyBpZmRlZiBTVVBQT1JUX0dOVVRMU19FWFRfUkFX
X1BBUlNFCi0JICAgIGlmIChVc3RybmNtcChvZmlsZSwgVVMiUEVNICIsIDQpID09IDApCi0JICAg
ICAgewotCSAgICAgIG9jc3BfZm10ID0gR05VVExTX1g1MDlfRk1UX1BFTTsKLQkgICAgICBvZmls
ZSArPSA0OwotCSAgICAgIH0KLQkgICAgZWxzZSBpZiAoVXN0cm5jbXAob2ZpbGUsIFVTIkRFUiAi
LCA0KSA9PSAwKQotCSAgICAgIHsKLQkgICAgICBvY3NwX2ZtdCA9IEdOVVRMU19YNTA5X0ZNVF9E
RVI7Ci0JICAgICAgb2ZpbGUgKz0gNDsKLQkgICAgICB9Ci0KLQkgICAgaWYgICgocmMgPSBnbnV0
bHNfY2VydGlmaWNhdGVfc2V0X29jc3Bfc3RhdHVzX3JlcXVlc3RfZmlsZTIoCi0JCSAgICAgIHN0
YXRlLT54NTA5X2NyZWQsIENDUyBvZmlsZSwgZ251dGxzX2NlcnRfaW5kZXgsCi0JCSAgICAgIG9j
c3BfZm10KSkgPCAwKQotCSAgICAgIHJldHVybiB0bHNfZXJyb3JfZ251KAotCQkgICAgICBVUyJn
bnV0bHNfY2VydGlmaWNhdGVfc2V0X29jc3Bfc3RhdHVzX3JlcXVlc3RfZmlsZTIiLAotCQkgICAg
ICByYywgaG9zdCwgZXJyc3RyKTsKLQkgICAgREVCVUcoRF90bHMpCi0JICAgICAgZGVidWdfcHJp
bnRmKCIgJWQgcmVzcG9uc2UlcyBsb2FkZWRcbiIsIHJjLCByYz4xID8gInMiOiIiKTsKLQotCSAg
ICAvKiBBcnJhbmdlIGNhbGxiYWNrcyBmb3IgT0NTUCByZXF1ZXN0IG9ic2VydmFiaWxpdHkgKi8K
KyAgaWYgKCFzdGF0ZS0+dGxzX3ByaXZhdGVrZXkgfHwgISpzdGF0ZS0+dGxzX3ByaXZhdGVrZXkp
CisgICAgeworICAgIHN0YXRlLT50bHNfcHJpdmF0ZWtleSA9IHN0YXRlLT50bHNfY2VydGlmaWNh
dGU7CisgICAgc3RhdGUtPmV4cF90bHNfcHJpdmF0ZWtleSA9IHN0YXRlLT5leHBfdGxzX2NlcnRp
ZmljYXRlOworICAgIH0KIAotCSAgICBnbnV0bHNfaGFuZHNoYWtlX3NldF9ob29rX2Z1bmN0aW9u
KHN0YXRlLT5zZXNzaW9uLAotCSAgICAgIEdOVVRMU19IQU5EU0hBS0VfQU5ZLCBHTlVUTFNfSE9P
S19QT1NULCB0bHNfc2VydmVyX2hvb2tfY2IpOworICBpZiAoc3RhdGUtPmV4cF90bHNfY2VydGlm
aWNhdGUgJiYgKnN0YXRlLT5leHBfdGxzX2NlcnRpZmljYXRlKQorICAgIHsKKyAgICBCT09MIGxv
YWQgPSBUUlVFOworICAgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoImNlcnRpZmljYXRlIGZp
bGUgPSAlc1xua2V5IGZpbGUgPSAlc1xuIiwKKwlzdGF0ZS0+ZXhwX3Rsc19jZXJ0aWZpY2F0ZSwg
c3RhdGUtPmV4cF90bHNfcHJpdmF0ZWtleSk7CiAKLSMgZWxzZQotIyAgaWYgZGVmaW5lZChTVVBQ
T1JUX1NSVl9PQ1NQX1NUQUNLKQotCSAgICBpZiAoKHJjID0gZ251dGxzX2NlcnRpZmljYXRlX3Nl
dF9vY3NwX3N0YXR1c19yZXF1ZXN0X2Z1bmN0aW9uMigKLQkJCSBzdGF0ZS0+eDUwOV9jcmVkLCBn
bnV0bHNfY2VydF9pbmRleCwKLQkJCSBzZXJ2ZXJfb2NzcF9zdGFwbGluZ19jYiwgb2ZpbGUpKSkK
LQkJcmV0dXJuIHRsc19lcnJvcl9nbnUoCi0JCSAgICAgIFVTImdudXRsc19jZXJ0aWZpY2F0ZV9z
ZXRfb2NzcF9zdGF0dXNfcmVxdWVzdF9mdW5jdGlvbjIiLAotCQkgICAgICByYywgaG9zdCwgZXJy
c3RyKTsKLQkgICAgZWxzZQotIyAgZW5kaWYKLQkgICAgICB7Ci0JICAgICAgaWYgKGNudCsrID4g
MCkKLQkJewotCQlERUJVRyhEX3RscykKLQkJICBkZWJ1Z19wcmludGYoIm9vcHM7IG11bHRpcGxl
IE9DU1AgZmlsZXMgbm90IHN1cHBvcnRlZFxuIik7Ci0JCWJyZWFrOwotCQl9Ci0JICAgICAgZ251
dGxzX2NlcnRpZmljYXRlX3NldF9vY3NwX3N0YXR1c19yZXF1ZXN0X2Z1bmN0aW9uKAotCQlzdGF0
ZS0+eDUwOV9jcmVkLCBzZXJ2ZXJfb2NzcF9zdGFwbGluZ19jYiwgb2ZpbGUpOwotCSAgICAgIH0K
LSMgZW5kaWYJLyogU1VQUE9SVF9HTlVUTFNfRVhUX1JBV19QQVJTRSAqLwotCSAgICB9Ci0JICBl
bHNlCi0JICAgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoInJhbiBvdXQgb2YgT0NTUCByZXNw
b25zZSBmaWxlcyBpbiBsaXN0XG4iKTsKLQkgIH0KLSNlbmRpZiAvKiBESVNBQkxFX09DU1AgKi8K
KyAgICBpZiAoc3RhdGUtPnJlY2VpdmVkX3NuaSkKKyAgICAgIGlmICggIFVzdHJjbXAoc3RhdGUt
PmV4cF90bHNfY2VydGlmaWNhdGUsIHNhdmVkX3Rsc19jZXJ0aWZpY2F0ZSkgPT0gMAorCSAmJiBV
c3RyY21wKHN0YXRlLT5leHBfdGxzX3ByaXZhdGVrZXksICBzYXZlZF90bHNfcHJpdmF0ZWtleSkg
ID09IDAKKwkgKQorCXsKKwlERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJUTFMgU05JOiBjZXJ0
IGFuZCBrZXkgdW5jaGFuZ2VkXG4iKTsKKwlsb2FkID0gRkFMU0U7CS8qIGF2b2lkIHJlLWxvYWRp
bmcgdGhlIHNhbWUgY2VydHMgKi8KIAl9CisgICAgICBlbHNlCQkvKiB1bmxvYWQgdGhlIHByZS1T
TkkgY2VydHMgYmVmb3JlIGxvYWRpbmcgbmV3IG9uZXMgKi8KKwl7CisJREVCVUcoRF90bHMpIGRl
YnVnX3ByaW50ZigiVExTIFNOSTogaGF2ZSBhIGNoYW5nZWQgY2VydC9rZXkgcGFpclxuIik7CisJ
Z251dGxzX2NlcnRpZmljYXRlX2ZyZWVfa2V5cyhzdGF0ZS0+bGliX3N0YXRlLng1MDlfY3JlZCk7
CisJfQorCisgICAgaWYgKCAgbG9hZAorICAgICAgICYmIChyYyA9IGhvc3QKKwkgID8gY3JlZHNf
bG9hZF9jbGllbnRfY2VydHMoc3RhdGUsIGhvc3QsIHN0YXRlLT5leHBfdGxzX2NlcnRpZmljYXRl
LAorCQkJICAgICAgc3RhdGUtPmV4cF90bHNfcHJpdmF0ZWtleSwgZXJyc3RyKQorCSAgOiBjcmVk
c19sb2FkX3NlcnZlcl9jZXJ0cyhzdGF0ZSwgc3RhdGUtPmV4cF90bHNfY2VydGlmaWNhdGUsCisJ
CQkgICAgICBzdGF0ZS0+ZXhwX3Rsc19wcml2YXRla2V5LAorI2lmZGVmIERJU0FCTEVfT0NTUAor
CQkJICAgICAgTlVMTCwKKyNlbHNlCisJCQkgICAgICB0bHNfb2NzcF9maWxlLAorI2VuZGlmCisJ
CQkgICAgICBlcnJzdHIpCisgICAgICAgKSAgKSByZXR1cm4gcmM7CiAgICAgfQotICBlbHNlCS8q
IGNsaWVudCAqLwotICAgIHsKLSAgICBpZiAoMCA8IChyYyA9IHRsc19hZGRfY2VydGZpbGUoc3Rh
dGUsIGhvc3QsCi0JCXN0YXRlLT5leHBfdGxzX2NlcnRpZmljYXRlLCBzdGF0ZS0+ZXhwX3Rsc19w
cml2YXRla2V5LCBlcnJzdHIpKSkKLSAgICAgIHJldHVybiByYzsKLSAgICBERUJVRyhEX3Rscykg
ZGVidWdfcHJpbnRmKCJUTFM6IGNlcnQva2V5IHJlZ2lzdGVyZWRcbiIpOwotICAgIH0KKyAgfQor
ZWxzZQorICB7CisgIERFQlVHKERfdGxzKQorICAgIGRlYnVnX3ByaW50ZigiJXMgY2VydHMgd2Vy
ZSBwcmVsb2FkZWRcbiIsIGhvc3QgPyAiY2xpZW50IiA6ICJzZXJ2ZXIiKTsKKworICBpZiAoIXN0
YXRlLT50bHNfcHJpdmF0ZWtleSkgc3RhdGUtPnRsc19wcml2YXRla2V5ID0gc3RhdGUtPnRsc19j
ZXJ0aWZpY2F0ZTsKKyAgc3RhdGUtPmV4cF90bHNfY2VydGlmaWNhdGUgPSBVUyBzdGF0ZS0+dGxz
X2NlcnRpZmljYXRlOworICBzdGF0ZS0+ZXhwX3Rsc19wcml2YXRla2V5ID0gVVMgc3RhdGUtPnRs
c19wcml2YXRla2V5OwogCi0gIH0gLyogdGxzX2NlcnRpZmljYXRlICovCisjaWZkZWYgU1VQUE9S
VF9HTlVUTFNfRVhUX1JBV19QQVJTRQorICBpZiAoc3RhdGUtPmxpYl9zdGF0ZS5vY3NwX2hvb2sp
CisgICAgIGdudXRsc19oYW5kc2hha2Vfc2V0X2hvb2tfZnVuY3Rpb24oc3RhdGUtPnNlc3Npb24s
CisgICAgICAgR05VVExTX0hBTkRTSEFLRV9BTlksIEdOVVRMU19IT09LX1BPU1QsIHRsc19zZXJ2
ZXJfaG9va19jYik7CisjZW5kaWYKKyAgfQogCiAKIC8qIFNldCB0aGUgdHJ1c3RlZCBDQXMgZmls
ZSBpZiBvbmUgaXMgcHJvdmlkZWQsIGFuZCB0aGVuIGFkZCB0aGUgQ1JMIGlmIG9uZSBpcwogcHJv
dmlkZWQuIEV4cGVyaW1lbnQgc2hvd3MgdGhhdCwgaWYgdGhlIGNlcnRpZmljYXRlIGZpbGUgaXMg
ZW1wdHksIGFuIHVuaGVscGZ1bAogZXJyb3IgbWVzc2FnZSBpcyBwcm92aWRlZC4gSG93ZXZlciwg
aWYgd2UganVzdCByZWZyYWluIGZyb20gc2V0dGluZyBhbnl0aGluZyB1cAogaW4gdGhhdCBjYXNl
LCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZmFpbHMsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBj
b3JyZWN0Ci1iZWhhdmlvdXIuICovCitiZWhhdmlvdXIuCitJZiBub25lIHdhcyBjb25maWd1cmVk
IGFuZCB3ZSBjYW4ndCBoYW5kbGUgInN5c3RlbSIsIHRyZWF0IGFzIGVtcHR5LiAqLwogCi1pZiAo
c3RhdGUtPnRsc192ZXJpZnlfY2VydGlmaWNhdGVzICYmICpzdGF0ZS0+dGxzX3ZlcmlmeV9jZXJ0
aWZpY2F0ZXMpCitpZiAoIXN0YXRlLT5saWJfc3RhdGUuY2FidW5kbGUpCiAgIHsKLSAgaWYgKCFl
eHBhbmRfY2hlY2tfdGxzdmFyKHRsc192ZXJpZnlfY2VydGlmaWNhdGVzLCBlcnJzdHIpKQotICAg
IHJldHVybiBERUZFUjsKKyAgaWYgKHN0YXRlLT50bHNfdmVyaWZ5X2NlcnRpZmljYXRlcyAmJiAq
c3RhdGUtPnRsc192ZXJpZnlfY2VydGlmaWNhdGVzKQorICAgIHsKKyAgICBpZiAoIUV4cGFuZF9j
aGVja190bHN2YXIodGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMsIGVycnN0cikpCisgICAgICByZXR1
cm4gREVGRVI7CiAjaWZuZGVmIFNVUFBPUlRfU1lTREVGQVVMVF9DQUJVTkRMRQotICBpZiAoVXN0
cmNtcChzdGF0ZS0+ZXhwX3Rsc192ZXJpZnlfY2VydGlmaWNhdGVzLCAic3lzdGVtIikgPT0gMCkK
LSAgICBzdGF0ZS0+ZXhwX3Rsc192ZXJpZnlfY2VydGlmaWNhdGVzID0gTlVMTDsKKyAgICBpZiAo
VXN0cmNtcChzdGF0ZS0+ZXhwX3Rsc192ZXJpZnlfY2VydGlmaWNhdGVzLCAic3lzdGVtIikgPT0g
MCkKKyAgICAgIHN0YXRlLT5leHBfdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMgPSBOVUxMOwogI2Vu
ZGlmCi0gIGlmIChzdGF0ZS0+dGxzX2NybCAmJiAqc3RhdGUtPnRsc19jcmwpCi0gICAgaWYgKCFl
eHBhbmRfY2hlY2tfdGxzdmFyKHRsc19jcmwsIGVycnN0cikpCi0gICAgICByZXR1cm4gREVGRVI7
CisgICAgaWYgKHN0YXRlLT50bHNfY3JsICYmICpzdGF0ZS0+dGxzX2NybCkKKyAgICAgIGlmICgh
RXhwYW5kX2NoZWNrX3Rsc3Zhcih0bHNfY3JsLCBlcnJzdHIpKQorCXJldHVybiBERUZFUjsKIAot
ICBpZiAoIShzdGF0ZS0+ZXhwX3Rsc192ZXJpZnlfY2VydGlmaWNhdGVzICYmCi0gICAgICAgICpz
dGF0ZS0+ZXhwX3Rsc192ZXJpZnlfY2VydGlmaWNhdGVzKSkKKyAgICBpZiAoIShzdGF0ZS0+ZXhw
X3Rsc192ZXJpZnlfY2VydGlmaWNhdGVzICYmCisJICAqc3RhdGUtPmV4cF90bHNfdmVyaWZ5X2Nl
cnRpZmljYXRlcykpCisgICAgICB7CisgICAgICBERUJVRyhEX3RscykKKwlkZWJ1Z19wcmludGYo
IlRMUzogdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMgZXhwYW5kZWQgZW1wdHksIGlnbm9yaW5nXG4i
KTsKKyAgICAgIC8qIFdpdGggbm8gdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMsIHdlIGlnbm9yZSB0
bHNfY3JsIHRvbyAqLworICAgICAgcmV0dXJuIE9LOworICAgICAgfQorICAgIH0KKyAgZWxzZQog
ICAgIHsKICAgICBERUJVRyhEX3RscykKLSAgICAgIGRlYnVnX3ByaW50ZigiVExTOiB0bHNfdmVy
aWZ5X2NlcnRpZmljYXRlcyBleHBhbmRlZCBlbXB0eSwgaWdub3JpbmdcbiIpOwotICAgIC8qIFdp
dGggbm8gdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMsIHdlIGlnbm9yZSB0bHNfY3JsIHRvbyAqLwor
ICAgICAgZGVidWdfcHJpbnRmKCJUTFM6IHRsc192ZXJpZnlfY2VydGlmaWNhdGVzIG5vdCBzZXQg
b3IgZW1wdHksIGlnbm9yaW5nXG4iKTsKICAgICByZXR1cm4gT0s7CiAgICAgfQorICByYyA9IGNy
ZWRzX2xvYWRfY2FidW5kbGUoc3RhdGUsIHN0YXRlLT5leHBfdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0
ZXMsIGhvc3QsIGVycnN0cik7CisgIGlmIChyYyAhPSBPSykgcmV0dXJuIHJjOwogICB9CiBlbHNl
CiAgIHsKICAgREVCVUcoRF90bHMpCi0gICAgZGVidWdfcHJpbnRmKCJUTFM6IHRsc192ZXJpZnlf
Y2VydGlmaWNhdGVzIG5vdCBzZXQgb3IgZW1wdHksIGlnbm9yaW5nXG4iKTsKLSAgcmV0dXJuIE9L
OwotICB9Ci0KLSNpZmRlZiBTVVBQT1JUX1NZU0RFRkFVTFRfQ0FCVU5ETEUKLWlmIChVc3RyY21w
KHN0YXRlLT5leHBfdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMsICJzeXN0ZW0iKSA9PSAwKQotICBj
ZXJ0X2NvdW50ID0gZ251dGxzX2NlcnRpZmljYXRlX3NldF94NTA5X3N5c3RlbV90cnVzdChzdGF0
ZS0+eDUwOV9jcmVkKTsKLWVsc2UKLSNlbmRpZgotICB7Ci0gIGlmIChVc3RhdChzdGF0ZS0+ZXhw
X3Rsc192ZXJpZnlfY2VydGlmaWNhdGVzLCAmc3RhdGJ1ZikgPCAwKQotICAgIHsKLSAgICBsb2df
d3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAiY291bGQgbm90IHN0YXQgJyVzJyAiCi0JIih0
bHNfdmVyaWZ5X2NlcnRpZmljYXRlcyk6ICVzIiwgc3RhdGUtPmV4cF90bHNfdmVyaWZ5X2NlcnRp
ZmljYXRlcywKLQlzdHJlcnJvcihlcnJubykpOwotICAgIHJldHVybiBERUZFUjsKLSAgICB9Ci0K
LSNpZm5kZWYgU1VQUE9SVF9DQV9ESVIKLSAgLyogVGhlIHRlc3Qgc3VpdGUgcGFzc2VzIGluIC9k
ZXYvbnVsbDsgd2UgY291bGQgY2hlY2sgZm9yIHRoYXQgcGF0aCBleHBsaWNpdGx5LAotICBidXQg
d2hvIGtub3dzIGlmIHNvbWVvbmUgaGFzIHNvbWUgd2VpcmQgRklGTyB3aGljaCBhbHdheXMgZHVt
cHMgc29tZSBjZXJ0cywgb3IKLSAgb3RoZXIgd2VpcmRuZXNzLiAgVGhlIHRoaW5nIHdlIHJlYWxs
eSB3YW50IHRvIGNoZWNrIGlzIHRoYXQgaXQncyBub3QgYQotICBkaXJlY3RvcnksIHNpbmNlIHdo
aWxlIE9wZW5TU0wgc3VwcG9ydHMgdGhhdCwgR251VExTIGRvZXMgbm90LgotICBTbyBzLyFTX0lT
UkVHL1NfSVNESVIvIGFuZCBjaGFuZ2Ugc29tZSBtZXNzYWdpbmcgLi4uICovCi0gIGlmIChTX0lT
RElSKHN0YXRidWYuc3RfbW9kZSkpCi0gICAgewotICAgIERFQlVHKERfdGxzKQotICAgICAgZGVi
dWdfcHJpbnRmKCJ2ZXJpZnkgY2VydGlmaWNhdGVzIHBhdGggaXMgYSBkaXI6IFwiJXNcIlxuIiwK
LQkgIHN0YXRlLT5leHBfdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMpOwotICAgIGxvZ193cml0ZSgw
LCBMT0dfTUFJTnxMT0dfUEFOSUMsCi0JInRsc192ZXJpZnlfY2VydGlmaWNhdGVzIFwiJXNcIiBp
cyBhIGRpcmVjdG9yeSIsCi0Jc3RhdGUtPmV4cF90bHNfdmVyaWZ5X2NlcnRpZmljYXRlcyk7Ci0g
ICAgcmV0dXJuIERFRkVSOwotICAgIH0KLSNlbmRpZgotCi0gIERFQlVHKERfdGxzKSBkZWJ1Z19w
cmludGYoInZlcmlmeSBjZXJ0aWZpY2F0ZXMgPSAlcyBzaXplPSIgT0ZGX1RfRk1UICJcbiIsCi0J
ICBzdGF0ZS0+ZXhwX3Rsc192ZXJpZnlfY2VydGlmaWNhdGVzLCBzdGF0YnVmLnN0X3NpemUpOwot
Ci0gIGlmIChzdGF0YnVmLnN0X3NpemUgPT0gMCkKLSAgICB7Ci0gICAgREVCVUcoRF90bHMpCi0g
ICAgICBkZWJ1Z19wcmludGYoImNlcnQgZmlsZSBlbXB0eSwgbm8gY2VydHMsIG5vIHZlcmlmaWNh
dGlvbiwgaWdub3JpbmcgYW55IENSTFxuIik7Ci0gICAgcmV0dXJuIE9LOwotICAgIH0KLQotICBj
ZXJ0X2NvdW50ID0KLQotI2lmZGVmIFNVUFBPUlRfQ0FfRElSCi0gICAgKHN0YXRidWYuc3RfbW9k
ZSAmIFNfSUZNVCkgPT0gU19JRkRJUgotICAgID8KLSAgICBnbnV0bHNfY2VydGlmaWNhdGVfc2V0
X3g1MDlfdHJ1c3RfZGlyKHN0YXRlLT54NTA5X2NyZWQsCi0gICAgICBDUyBzdGF0ZS0+ZXhwX3Rs
c192ZXJpZnlfY2VydGlmaWNhdGVzLCBHTlVUTFNfWDUwOV9GTVRfUEVNKQotICAgIDoKLSNlbmRp
ZgotICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfeDUwOV90cnVzdF9maWxlKHN0YXRlLT54NTA5
X2NyZWQsCi0gICAgICBDUyBzdGF0ZS0+ZXhwX3Rsc192ZXJpZnlfY2VydGlmaWNhdGVzLCBHTlVU
TFNfWDUwOV9GTVRfUEVNKTsKKyAgICBkZWJ1Z19wcmludGYoIiVzIENBIGJ1bmRsZSB3YXMgcHJl
bG9hZGVkXG4iLCBob3N0ID8gImNsaWVudCIgOiAic2VydmVyIik7CisgIHN0YXRlLT5leHBfdGxz
X3ZlcmlmeV9jZXJ0aWZpY2F0ZXMgPSBVUyBzdGF0ZS0+dGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXM7
CiAKICNpZmRlZiBTVVBQT1JUX0NBX0RJUgotICAvKiBNaW1pYyB0aGUgYmVoYXZpb3VyIHdpdGgg
T3BlblNTTCBvZiBub3QgYWR2ZXJ0aXNpbmcgYSB1c2FibGUtY2VydCBsaXN0Ci0gIHdoZW4gdXNp
bmcgdGhlIGRpcmVjdG9yeS1vZi1jZXJ0cyBjb25maWcgbW9kZWwuICovCi0KLSAgaWYgKChzdGF0
YnVmLnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZESVIpCi0gICAgZ251dGxzX2NlcnRpZmljYXRl
X3NlbmRfeDUwOV9yZG5fc2VxdWVuY2Uoc3RhdGUtPnNlc3Npb24sIDEpOworLyogTWltaWMgdGhl
IGJlaGF2aW91ciB3aXRoIE9wZW5TU0wgb2Ygbm90IGFkdmVydGlzaW5nIGEgdXNhYmxlLWNlcnQg
bGlzdAord2hlbiB1c2luZyB0aGUgZGlyZWN0b3J5LW9mLWNlcnRzIGNvbmZpZyBtb2RlbC4gKi8K
KyAgICBpZiAoc3RhdGUtPmxpYl9zdGF0ZS5jYV9yZG5fZW11bGF0ZSkKKyAgICAgIGdudXRsc19j
ZXJ0aWZpY2F0ZV9zZW5kX3g1MDlfcmRuX3NlcXVlbmNlKHN0YXRlLT5zZXNzaW9uLCAxKTsKICNl
bmRpZgogICB9CiAKLWlmIChjZXJ0X2NvdW50IDwgMCkKLSAgcmV0dXJuIHRsc19lcnJvcl9nbnUo
VVMic2V0dGluZyBjZXJ0aWZpY2F0ZSB0cnVzdCIsIGNlcnRfY291bnQsIGhvc3QsIGVycnN0cik7
Ci1ERUJVRyhEX3RscykKLSAgZGVidWdfcHJpbnRmKCJBZGRlZCAlZCBjZXJ0aWZpY2F0ZSBhdXRo
b3JpdGllcy5cbiIsIGNlcnRfY291bnQpOwogCi1pZiAoc3RhdGUtPnRsc19jcmwgJiYgKnN0YXRl
LT50bHNfY3JsICYmCi0gICAgc3RhdGUtPmV4cF90bHNfY3JsICYmICpzdGF0ZS0+ZXhwX3Rsc19j
cmwpCitpZiAoIXN0YXRlLT5saWJfc3RhdGUuY3JsKQogICB7Ci0gIERFQlVHKERfdGxzKSBkZWJ1
Z19wcmludGYoImxvYWRpbmcgQ1JMIGZpbGUgPSAlc1xuIiwgc3RhdGUtPmV4cF90bHNfY3JsKTsK
LSAgaWYgKChjZXJ0X2NvdW50ID0gZ251dGxzX2NlcnRpZmljYXRlX3NldF94NTA5X2NybF9maWxl
KHN0YXRlLT54NTA5X2NyZWQsCi0gICAgICBDUyBzdGF0ZS0+ZXhwX3Rsc19jcmwsIEdOVVRMU19Y
NTA5X0ZNVF9QRU0pKSA8IDApCi0gICAgcmV0dXJuIHRsc19lcnJvcl9nbnUoVVMiZ251dGxzX2Nl
cnRpZmljYXRlX3NldF94NTA5X2NybF9maWxlIiwKLQkgICAgICBjZXJ0X2NvdW50LCBob3N0LCBl
cnJzdHIpOwotCi0gIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlByb2Nlc3NlZCAlZCBDUkxz
LlxuIiwgY2VydF9jb3VudCk7CisgIGlmICggIHN0YXRlLT50bHNfY3JsICYmICpzdGF0ZS0+dGxz
X2NybAorICAgICAmJiBzdGF0ZS0+ZXhwX3Rsc19jcmwgJiYgKnN0YXRlLT5leHBfdGxzX2NybCkK
KyAgICByZXR1cm4gY3JlZHNfbG9hZF9jcmwoc3RhdGUsIHN0YXRlLT5leHBfdGxzX2NybCwgZXJy
c3RyKTsKKyAgfQorZWxzZQorICB7CisgIERFQlVHKERfdGxzKQorICAgICAgZGVidWdfcHJpbnRm
KCIlcyBDUkwgd2FzIHByZWxvYWRlZFxuIiwgaG9zdCA/ICJjbGllbnQiIDogInNlcnZlciIpOwor
ICBzdGF0ZS0+ZXhwX3Rsc19jcmwgPSBVUyBzdGF0ZS0+dGxzX2NybDsKICAgfQogCiByZXR1cm4g
T0s7CkBAIC0xNDM2LDcgKzE5NzAsNiBAQAogaW50IHJjOwogY29uc3QgaG9zdF9pdGVtICpob3N0
ID0gc3RhdGUtPmhvc3Q7ICAvKiBtYWNybyBzaG91bGQgYmUgcmVjb25zaWRlcmVkPyAqLwogCi0j
aWZuZGVmIEdOVVRMU19BVVRPX0RIUEFSQU1TCiAvKiBDcmVhdGUgRC1IIHBhcmFtZXRlcnMsIG9y
IHJlYWQgdGhlbSBmcm9tIHRoZSBjYWNoZSBmaWxlLiBUaGlzIGZ1bmN0aW9uIGRvZXMKIGl0cyBv
d24gU01UUCBlcnJvciBtZXNzYWdpbmcuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgc2VydmVy
LCBUTFMgRC1IIGlnbm9yZXMKIGNsaWVudC1zaWRlIHBhcmFtcy4gKi8KQEAgLTE0NDYsMTYgKzE5
NzksMTYgQEAKICAgaWYgKCFkaF9zZXJ2ZXJfcGFyYW1zKQogICAgIGlmICgocmMgPSBpbml0X3Nl
cnZlcl9kaChlcnJzdHIpKSAhPSBPSykgcmV0dXJuIHJjOwogCi0gIC8qIFVubmVjZXNzYXJ5ICYg
ZGlzY291cmFnZWQgd2l0aCAzLjYuMCBvciBsYXRlciAqLwotICBnbnV0bHNfY2VydGlmaWNhdGVf
c2V0X2RoX3BhcmFtcyhzdGF0ZS0+eDUwOV9jcmVkLCBkaF9zZXJ2ZXJfcGFyYW1zKTsKKyAgLyog
VW5uZWNlc3NhcnkgJiBkaXNjb3VyYWdlZCB3aXRoIDMuNi4wIG9yIGxhdGVyLCBhY2NvcmRpbmcg
dG8gZG9jcy4gIEJ1dCB3aXRob3V0IGl0LAorICBubyBESEUtIGNpcGhlcnMgYXJlIGFkdmVydGlz
ZWQuICovCisgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfZGhfcGFyYW1zKHN0YXRlLT5saWJfc3Rh
dGUueDUwOV9jcmVkLCBkaF9zZXJ2ZXJfcGFyYW1zKTsKICAgfQotI2VuZGlmCiAKIC8qIExpbmsg
dGhlIGNyZWRlbnRpYWxzIHRvIHRoZSBzZXNzaW9uLiAqLwogCiBpZiAoKHJjID0gZ251dGxzX2Ny
ZWRlbnRpYWxzX3NldChzdGF0ZS0+c2Vzc2lvbiwKLQkgICAgR05VVExTX0NSRF9DRVJUSUZJQ0FU
RSwgc3RhdGUtPng1MDlfY3JlZCkpKQotICByZXR1cm4gdGxzX2Vycm9yX2dudShVUyJnbnV0bHNf
Y3JlZGVudGlhbHNfc2V0IiwgcmMsIGhvc3QsIGVycnN0cik7CisJICAgIEdOVVRMU19DUkRfQ0VS
VElGSUNBVEUsIHN0YXRlLT5saWJfc3RhdGUueDUwOV9jcmVkKSkpCisgIHJldHVybiB0bHNfZXJy
b3JfZ251KHN0YXRlLCBVUyJnbnV0bHNfY3JlZGVudGlhbHNfc2V0IiwgcmMsIGVycnN0cik7CiAK
IHJldHVybiBPSzsKIH0KQEAgLTE0NjUsNDcgKzE5OTgsMTIgQEAKICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBESVNBQkxFX09D
U1AKLQotc3RhdGljIEJPT0wKLXRsc19pc19idWdneV9vY3NwKHZvaWQpCi17Ci1jb25zdCB1c2No
YXIgKiBzOwotdXNjaGFyIG1haiwgbWlkLCBtaWM7Ci0KLXMgPSBDVVMgZ251dGxzX2NoZWNrX3Zl
cnNpb24oTlVMTCk7Ci1tYWogPSBhdG9pKENDUyBzKTsKLWlmIChtYWogPT0gMykKLSAgewotICB3
aGlsZSAoKnMgJiYgKnMgIT0gJy4nKSBzKys7Ci0gIG1pZCA9IGF0b2koQ0NTICsrcyk7Ci0gIGlm
IChtaWQgPD0gMikKLSAgICByZXR1cm4gVFJVRTsKLSAgZWxzZSBpZiAobWlkID49IDUpCi0gICAg
cmV0dXJuIEZBTFNFOwotICBlbHNlCi0gICAgewotICAgIHdoaWxlICgqcyAmJiAqcyAhPSAnLicp
IHMrKzsKLSAgICBtaWMgPSBhdG9pKENDUyArK3MpOwotICAgIHJldHVybiBtaWMgPD0gKG1pZCA9
PSAzID8gMTYgOiAzKTsKLSAgICB9Ci0gIH0KLXJldHVybiBGQUxTRTsKLX0KLQotI2VuZGlmCi0K
LQogLyogQ2FsbGVkIGZyb20gYm90aCBzZXJ2ZXIgYW5kIGNsaWVudCBjb2RlLiBJbiB0aGUgY2Fz
ZSBvZiBhIHNlcnZlciwgZXJyb3JzCiBiZWZvcmUgYWN0dWFsIFRMUyBuZWdvdGlhdGlvbiByZXR1
cm4gREVGRVIuCiAKIEFyZ3VtZW50czoKICAgaG9zdCAgICAgICAgICAgIGNvbm5lY3RlZCBob3N0
LCBpZiBjbGllbnQ7IE5VTEwgaWYgc2VydmVyCi0gIGNlcnRpZmljYXRlICAgICBjZXJ0aWZpY2F0
ZSBmaWxlCi0gIHByaXZhdGVrZXkgICAgICBwcml2YXRlIGtleSBmaWxlCi0gIHNuaSAgICAgICAg
ICAgICBUTFMgU05JIHRvIHNlbmQsIHNvbWV0aW1lcyB3aGVuIGNsaWVudDsgZWxzZSBOVUxMCi0g
IGNhcyAgICAgICAgICAgICBDQSBjZXJ0cyBmaWxlCi0gIGNybCAgICAgICAgICAgICBDUkwgZmls
ZQorICBvYgkJICB0cmFucG9ydCBvcHRpb25zIGJsb2NrLCBpZiBjbGllbnQ7IE5VTEwgaWYgc2Vy
dmVyCiAgIHJlcXVpcmVfY2lwaGVycyB0bHNfcmVxdWlyZV9jaXBoZXJzIHNldHRpbmcKICAgY2Fs
bGVyX3N0YXRlICAgIHJldHVybmVkIHN0YXRlLWluZm8gc3RydWN0dXJlCiAgIGVycnN0cgkgIGVy
cm9yIHN0cmluZyBwb2ludGVyCkBAIC0xNTE2LDEyICsyMDE0LDggQEAKIHN0YXRpYyBpbnQKIHRs
c19pbml0KAogICAgIGNvbnN0IGhvc3RfaXRlbSAqaG9zdCwKLSAgICBjb25zdCB1c2NoYXIgKmNl
cnRpZmljYXRlLAotICAgIGNvbnN0IHVzY2hhciAqcHJpdmF0ZWtleSwKLSAgICBjb25zdCB1c2No
YXIgKnNuaSwKLSAgICBjb25zdCB1c2NoYXIgKmNhcywKLSAgICBjb25zdCB1c2NoYXIgKmNybCwK
LSAgICBjb25zdCB1c2NoYXIgKnJlcXVpcmVfY2lwaGVycywKKyAgICBzbXRwX3RyYW5zcG9ydF9v
cHRpb25zX2Jsb2NrICogb2IsCisgICAgY29uc3QgdXNjaGFyICogcmVxdWlyZV9jaXBoZXJzLAog
ICAgIGV4aW1fZ251dGxzX3N0YXRlX3N0ICoqY2FsbGVyX3N0YXRlLAogICAgIHRsc19zdXBwb3J0
ICogdGxzcCwKICAgICB1c2NoYXIgKiogZXJyc3RyKQpAQCAtMTUyOSw4NSArMjAyMyw2MSBAQAog
ZXhpbV9nbnV0bHNfc3RhdGVfc3QgKiBzdGF0ZTsKIGludCByYzsKIHNpemVfdCBzejsKLWNvbnN0
IGNoYXIgKiBlcnJwb3M7Ci1jb25zdCB1c2NoYXIgKiBwOwogCi1pZiAoIWV4aW1fZ251dGxzX2Jh
c2VfaW5pdF9kb25lKQotICB7Ci0gIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIkdudVRMUyBn
bG9iYWwgaW5pdCByZXF1aXJlZC5cbiIpOwotCi0jaWYgZGVmaW5lZChIQVZFX0dOVVRMU19QS0NT
MTEpICYmICFkZWZpbmVkKEdOVVRMU19BVVRPX1BLQ1MxMV9NQU5VQUwpCi0gIC8qIEJ5IGRlZmF1
bHQsIGdudXRsc19nbG9iYWxfaW5pdCB3aWxsIGluaXQgUEtDUzExIHN1cHBvcnQgaW4gYXV0byBt
b2RlLAotICB3aGljaCBsb2FkcyBtb2R1bGVzIGZyb20gYSBjb25maWcgZmlsZSwgd2hpY2ggc291
bmRzIGdvb2QgYW5kIG1heSBiZSB3YW50ZWQKLSAgYnkgc29tZSBzeXNhZG1pbiwgYnV0IGFsc28g
bWVhbnMgaW4gY29tbW9uIGNvbmZpZ3VyYXRpb25zIHRoYXQgR05PTUUga2V5cmluZwotICBlbnZp
cm9ubWVudCB2YXJpYWJsZXMgYXJlIHVzZWQgYW5kIHNvIGJyZWFrcyBmb3IgdXNlcnMgY2FsbGlu
ZyBtYWlscS4KLSAgVG8gcHJldmVudCB0aGlzLCB3ZSBpbml0IFBLQ1MxMSBmaXJzdCwgd2hpY2gg
aXMgdGhlIGRvY3VtZW50ZWQgYXBwcm9hY2guICovCi0gIGlmICghZ251dGxzX2FsbG93X2F1dG9f
cGtjczExKQotICAgIGlmICgocmMgPSBnbnV0bHNfcGtjczExX2luaXQoR05VVExTX1BLQ1MxMV9G
TEFHX01BTlVBTCwgTlVMTCkpKQotICAgICAgcmV0dXJuIHRsc19lcnJvcl9nbnUoVVMiZ251dGxz
X3BrY3MxMV9pbml0IiwgcmMsIGhvc3QsIGVycnN0cik7Ci0jZW5kaWYKLQotI2lmbmRlZiBHTlVU
TFNfQVVUT19HTE9CQUxfSU5JVAotICBpZiAoKHJjID0gZ251dGxzX2dsb2JhbF9pbml0KCkpKQot
ICAgIHJldHVybiB0bHNfZXJyb3JfZ251KFVTImdudXRsc19nbG9iYWxfaW5pdCIsIHJjLCBob3N0
LCBlcnJzdHIpOwotI2VuZGlmCi0KLSNpZiBFWElNX0dOVVRMU19MSUJSQVJZX0xPR19MRVZFTCA+
PSAwCi0gIERFQlVHKERfdGxzKQotICAgIHsKLSAgICBnbnV0bHNfZ2xvYmFsX3NldF9sb2dfZnVu
Y3Rpb24oZXhpbV9nbnV0bHNfbG9nZ2VyX2NiKTsKLSAgICAvKiBhcmJpdHJhcmlseSBjaG9zZW4g
bGV2ZWw7IGJ1bXAgdXAgdG8gOSBmb3IgbW9yZSAqLwotICAgIGdudXRsc19nbG9iYWxfc2V0X2xv
Z19sZXZlbChFWElNX0dOVVRMU19MSUJSQVJZX0xPR19MRVZFTCk7Ci0gICAgfQotI2VuZGlmCi0K
LSNpZm5kZWYgRElTQUJMRV9PQ1NQCi0gIGlmICh0bHNfb2NzcF9maWxlICYmIChnbnV0bHNfYnVn
Z3lfb2NzcCA9IHRsc19pc19idWdneV9vY3NwKCkpKQotICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJ
TiwgIk9DU1AgdW51c2FibGUgd2l0aCB0aGlzIEdudVRMUyBsaWJyYXJ5IHZlcnNpb24iKTsKLSNl
bmRpZgotCi0gIGV4aW1fZ251dGxzX2Jhc2VfaW5pdF9kb25lID0gVFJVRTsKLSAgfQoraWYgKCAg
IWV4aW1fZ251dGxzX2Jhc2VfaW5pdF9kb25lCisgICAmJiAocmMgPSB0bHNfZ19pbml0KGVycnN0
cikpICE9IE9LKQorICByZXR1cm4gcmM7CiAKIGlmIChob3N0KQogICB7CiAgIC8qIEZvciBjbGll
bnQtc2lkZSBzZXNzaW9ucyB3ZSBhbGxvY2F0ZSBhIGNvbnRleHQuIFRoaXMgbGV0cyB1cyBydW4K
ICAgc2V2ZXJhbCBpbiBwYXJhbGxlbC4gKi8KKwogICBpbnQgb2xkX3Bvb2wgPSBzdG9yZV9wb29s
OwogICBzdG9yZV9wb29sID0gUE9PTF9QRVJNOwotICBzdGF0ZSA9IHN0b3JlX2dldChzaXplb2Yo
ZXhpbV9nbnV0bHNfc3RhdGVfc3QpLCBGQUxTRSk7CisgIHN0YXRlID0gc3RvcmVfZ2V0KHNpemVv
ZihleGltX2dudXRsc19zdGF0ZV9zdCksIEdFVF9VTlRBSU5URUQpOwogICBzdG9yZV9wb29sID0g
b2xkX3Bvb2w7CiAKICAgbWVtY3B5KHN0YXRlLCAmZXhpbV9nbnV0bHNfc3RhdGVfaW5pdCwgc2l6
ZW9mKGV4aW1fZ251dGxzX3N0YXRlX2luaXQpKTsKKyAgc3RhdGUtPmxpYl9zdGF0ZSA9IG9iLT50
bHNfcHJlbG9hZDsKICAgc3RhdGUtPnRsc3AgPSB0bHNwOwogICBERUJVRyhEX3RscykgZGVidWdf
cHJpbnRmKCJpbml0aWFsaXNpbmcgR251VExTIGNsaWVudCBzZXNzaW9uXG4iKTsKICAgcmMgPSBn
bnV0bHNfaW5pdCgmc3RhdGUtPnNlc3Npb24sIEdOVVRMU19DTElFTlQpOworCisgIHN0YXRlLT50
bHNfY2VydGlmaWNhdGUgPQlvYi0+dGxzX2NlcnRpZmljYXRlOworICBzdGF0ZS0+dGxzX3ByaXZh
dGVrZXkgPQlvYi0+dGxzX3ByaXZhdGVrZXk7CisgIHN0YXRlLT50bHNfc25pID0JCW9iLT50bHNf
c25pOworICBzdGF0ZS0+dGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMgPSBvYi0+dGxzX3ZlcmlmeV9j
ZXJ0aWZpY2F0ZXM7CisgIHN0YXRlLT50bHNfY3JsID0JCW9iLT50bHNfY3JsOwogICB9CiBlbHNl
CiAgIHsKKyAgLyogU2VydmVyIG9wZXJhdGlvbnMgYWx3YXlzIHVzZSB0aGUgb25lIHN0YXRlX3Nl
cnZlciBjb250ZXh0LiAgSXQgaXMgbm90CisgIHNoYXJlZCBiZWNhdXNlIHdlIGhhdmUgZm9ya2Vk
IGEgZnJlc2ggcHJvY2VzcyBmb3IgZXZlcnkgcmVjZWl2ZS4gIEhvd2V2ZXIgaXQKKyAgY2FuIGdl
dCByZS11c2VkIGZvciBzdWNjZXNzaXZlIFRMUyBzZXNzaW9ucyBvbiBhIHNpbmdsZSBUQ1AgY29u
bmVjdGlvbi4gKi8KKwogICBzdGF0ZSA9ICZzdGF0ZV9zZXJ2ZXI7Ci0gIG1lbWNweShzdGF0ZSwg
JmV4aW1fZ251dGxzX3N0YXRlX2luaXQsIHNpemVvZihleGltX2dudXRsc19zdGF0ZV9pbml0KSk7
CiAgIHN0YXRlLT50bHNwID0gdGxzcDsKICAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiaW5p
dGlhbGlzaW5nIEdudVRMUyBzZXJ2ZXIgc2Vzc2lvblxuIik7CiAgIHJjID0gZ251dGxzX2luaXQo
JnN0YXRlLT5zZXNzaW9uLCBHTlVUTFNfU0VSVkVSKTsKKworICBzdGF0ZS0+dGxzX2NlcnRpZmlj
YXRlID0JdGxzX2NlcnRpZmljYXRlOworICBzdGF0ZS0+dGxzX3ByaXZhdGVrZXkgPQl0bHNfcHJp
dmF0ZWtleTsKKyAgc3RhdGUtPnRsc19zbmkgPQkJTlVMTDsKKyAgc3RhdGUtPnRsc192ZXJpZnlf
Y2VydGlmaWNhdGVzID0gdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXM7CisgIHN0YXRlLT50bHNfY3Js
ID0JCXRsc19jcmw7CiAgIH0KIGlmIChyYykKLSAgcmV0dXJuIHRsc19lcnJvcl9nbnUoVVMiZ251
dGxzX2luaXQiLCByYywgaG9zdCwgZXJyc3RyKTsKKyAgcmV0dXJuIHRsc19lcnJvcl9nbnUoc3Rh
dGUsIFVTImdudXRsc19pbml0IiwgcmMsIGVycnN0cik7CiAKK3N0YXRlLT50bHNfcmVxdWlyZV9j
aXBoZXJzID0JcmVxdWlyZV9jaXBoZXJzOwogc3RhdGUtPmhvc3QgPSBob3N0OwogCi1zdGF0ZS0+
dGxzX2NlcnRpZmljYXRlID0gY2VydGlmaWNhdGU7Ci1zdGF0ZS0+dGxzX3ByaXZhdGVrZXkgPSBw
cml2YXRla2V5Owotc3RhdGUtPnRsc19yZXF1aXJlX2NpcGhlcnMgPSByZXF1aXJlX2NpcGhlcnM7
Ci1zdGF0ZS0+dGxzX3NuaSA9IHNuaTsKLXN0YXRlLT50bHNfdmVyaWZ5X2NlcnRpZmljYXRlcyA9
IGNhczsKLXN0YXRlLT50bHNfY3JsID0gY3JsOwotCiAvKiBUaGlzIGhhbmRsZXMgdGhlIHZhcmlh
YmxlcyB0aGF0IG1pZ2h0IGdldCByZS1leHBhbmRlZCBhZnRlciBUTFMgU05JOwotdGhhdCdzIHRs
c19jZXJ0aWZpY2F0ZSwgdGxzX3ByaXZhdGVrZXksIHRsc192ZXJpZnlfY2VydGlmaWNhdGVzLCB0
bHNfY3JsICovCit0bHNfY2VydGlmaWNhdGUsIHRsc19wcml2YXRla2V5LCB0bHNfdmVyaWZ5X2Nl
cnRpZmljYXRlcywgdGxzX2NybCAqLwogCiBERUJVRyhEX3RscykKLSAgZGVidWdfcHJpbnRmKCJF
eHBhbmRpbmcgdmFyaW91cyBUTFMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBzZXNzaW9uIGNy
ZWRlbnRpYWxzLlxuIik7CisgIGRlYnVnX3ByaW50ZigiRXhwYW5kaW5nIHZhcmlvdXMgVExTIGNv
bmZpZ3VyYXRpb24gb3B0aW9ucyBmb3Igc2Vzc2lvbiBjcmVkZW50aWFsc1xuIik7CiBpZiAoKHJj
ID0gdGxzX2V4cGFuZF9zZXNzaW9uX2ZpbGVzKHN0YXRlLCBlcnJzdHIpKSAhPSBPSykgcmV0dXJu
IHJjOwogCiAvKiBUaGVzZSBhcmUgYWxsIG90aGVyIHBhcnRzIG9mIHRoZSB4NTA5X2NyZWQgaGFu
ZGxpbmcsIHNpbmNlIFNOSSBpbiBHbnVUTFMKQEAgLTE2MTgsNyArMjA4OCw3IEBACiAvKiBzZXQg
U05JIGluIGNsaWVudCwgb25seSAqLwogaWYgKGhvc3QpCiAgIHsKLSAgaWYgKCFleHBhbmRfY2hl
Y2soc25pLCBVUyJ0bHNfb3V0X3NuaSIsICZzdGF0ZS0+dGxzcC0+c25pLCBlcnJzdHIpKQorICBp
ZiAoIWV4cGFuZF9jaGVjayhzdGF0ZS0+dGxzX3NuaSwgVVMidGxzX291dF9zbmkiLCAmc3RhdGUt
PnRsc3AtPnNuaSwgZXJyc3RyKSkKICAgICByZXR1cm4gREVGRVI7CiAgIGlmIChzdGF0ZS0+dGxz
cC0+c25pICYmICpzdGF0ZS0+dGxzcC0+c25pKQogICAgIHsKQEAgLTE2MjcsNDUgKzIwOTcsNTAg
QEAKICAgICBzeiA9IFVzdHJsZW4oc3RhdGUtPnRsc3AtPnNuaSk7CiAgICAgaWYgKChyYyA9IGdu
dXRsc19zZXJ2ZXJfbmFtZV9zZXQoc3RhdGUtPnNlc3Npb24sCiAJICBHTlVUTFNfTkFNRV9ETlMs
IHN0YXRlLT50bHNwLT5zbmksIHN6KSkpCi0gICAgICByZXR1cm4gdGxzX2Vycm9yX2dudShVUyJn
bnV0bHNfc2VydmVyX25hbWVfc2V0IiwgcmMsIGhvc3QsIGVycnN0cik7CisgICAgICByZXR1cm4g
dGxzX2Vycm9yX2dudShzdGF0ZSwgVVMiZ251dGxzX3NlcnZlcl9uYW1lX3NldCIsIHJjLCBlcnJz
dHIpOwogICAgIH0KICAgfQogZWxzZSBpZiAoc3RhdGUtPnRsc19zbmkpCiAgIERFQlVHKERfdGxz
KSBkZWJ1Z19wcmludGYoIioqKiBQUk9CQUJMWSBBIEJVRyAqKiogIiBcCiAgICAgICAiaGF2ZSBh
biBTTkkgc2V0IGZvciBhIHNlcnZlciBbJXNdXG4iLCBzdGF0ZS0+dGxzX3NuaSk7CiAKLS8qIFRo
aXMgaXMgdGhlIHByaW9yaXR5IHN0cmluZyBzdXBwb3J0LAotaHR0cDovL3d3dy5nbnV0bHMub3Jn
L21hbnVhbC9odG1sX25vZGUvUHJpb3JpdHktU3RyaW5ncy5odG1sCi1hbmQgcmVwbGFjZXMgZ251
dGxzX3JlcXVpcmVfa3gsIGdudXRsc19yZXF1aXJlX21hYyAmIGdudXRsc19yZXF1aXJlX3Byb3Rv
Y29scy4KLVRoaXMgd2FzIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUsIGJ1dCBtZWFucyBFeGltIG5v
IGxvbmdlciBuZWVkcyB0byB0cmFjawotYWxsIGFsZ29yaXRobXMgYW5kIHByb3ZpZGUgc3RyaW5n
IGZvcm1zIGZvciB0aGVtLiAqLwotCi1wID0gTlVMTDsKLWlmIChzdGF0ZS0+dGxzX3JlcXVpcmVf
Y2lwaGVycyAmJiAqc3RhdGUtPnRsc19yZXF1aXJlX2NpcGhlcnMpCitpZiAoIXN0YXRlLT5saWJf
c3RhdGUucHJpX3N0cmluZykKICAgewotICBpZiAoIWV4cGFuZF9jaGVja190bHN2YXIodGxzX3Jl
cXVpcmVfY2lwaGVycywgZXJyc3RyKSkKLSAgICByZXR1cm4gREVGRVI7Ci0gIGlmIChzdGF0ZS0+
ZXhwX3Rsc19yZXF1aXJlX2NpcGhlcnMgJiYgKnN0YXRlLT5leHBfdGxzX3JlcXVpcmVfY2lwaGVy
cykKKyAgY29uc3QgdXNjaGFyICogcCA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKiBlcnJwb3M7CisK
KyAgLyogVGhpcyBpcyB0aGUgcHJpb3JpdHkgc3RyaW5nIHN1cHBvcnQsCisgIGh0dHA6Ly93d3cu
Z251dGxzLm9yZy9tYW51YWwvaHRtbF9ub2RlL1ByaW9yaXR5LVN0cmluZ3MuaHRtbAorICBhbmQg
cmVwbGFjZXMgZ251dGxzX3JlcXVpcmVfa3gsIGdudXRsc19yZXF1aXJlX21hYyAmIGdudXRsc19y
ZXF1aXJlX3Byb3RvY29scy4KKyAgVGhpcyB3YXMgYmFja3dhcmRzIGluY29tcGF0aWJsZSwgYnV0
IG1lYW5zIEV4aW0gbm8gbG9uZ2VyIG5lZWRzIHRvIHRyYWNrCisgIGFsbCBhbGdvcml0aG1zIGFu
ZCBwcm92aWRlIHN0cmluZyBmb3JtcyBmb3IgdGhlbS4gKi8KKworICBpZiAoc3RhdGUtPnRsc19y
ZXF1aXJlX2NpcGhlcnMgJiYgKnN0YXRlLT50bHNfcmVxdWlyZV9jaXBoZXJzKQogICAgIHsKLSAg
ICBwID0gc3RhdGUtPmV4cF90bHNfcmVxdWlyZV9jaXBoZXJzOwotICAgIERFQlVHKERfdGxzKSBk
ZWJ1Z19wcmludGYoIkdudVRMUyBzZXNzaW9uIGNpcGhlci9wcmlvcml0eSBcIiVzXCJcbiIsIHAp
OworICAgIGlmICghRXhwYW5kX2NoZWNrX3Rsc3Zhcih0bHNfcmVxdWlyZV9jaXBoZXJzLCBlcnJz
dHIpKQorICAgICAgcmV0dXJuIERFRkVSOworICAgIGlmIChzdGF0ZS0+ZXhwX3Rsc19yZXF1aXJl
X2NpcGhlcnMgJiYgKnN0YXRlLT5leHBfdGxzX3JlcXVpcmVfY2lwaGVycykKKyAgICAgIHsKKyAg
ICAgIHAgPSBzdGF0ZS0+ZXhwX3Rsc19yZXF1aXJlX2NpcGhlcnM7CisgICAgICBERUJVRyhEX3Rs
cykgZGVidWdfcHJpbnRmKCJHbnVUTFMgc2Vzc2lvbiBjaXBoZXIvcHJpb3JpdHkgXCIlc1wiXG4i
LCBwKTsKKyAgICAgIH0KICAgICB9CisKKyAgaWYgKChyYyA9IGNyZWRzX2xvYWRfcHJpc3RyaW5n
KHN0YXRlLCBwLCAmZXJycG9zKSkpCisgICAgcmV0dXJuIHRsc19lcnJvcl9nbnUoc3RhdGUsIHN0
cmluZ19zcHJpbnRmKAorCQkJImdudXRsc19wcmlvcml0eV9pbml0KCVzKSBmYWlsZWQgYXQgb2Zm
c2V0ICVsZCwgXCIlLjZzLi5cIiIsCisJCQlwLCAobG9uZykoZXJycG9zIC0gQ1MgcCksIGVycnBv
cyksCisJCSAgICByYywgZXJyc3RyKTsKICAgfQotaWYgKCFwKQorZWxzZQogICB7Ci0gIHAgPSBl
eGltX2RlZmF1bHRfZ251dGxzX3ByaW9yaXR5OwotICBERUJVRyhEX3RscykKLSAgICBkZWJ1Z19w
cmludGYoIkdudVRMUyB1c2luZyBkZWZhdWx0IHNlc3Npb24gY2lwaGVyL3ByaW9yaXR5IFwiJXNc
IlxuIiwgcCk7CisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoImNpcGhlciBsaXN0IHByZWxv
YWRlZFxuIik7CisgIHN0YXRlLT5leHBfdGxzX3JlcXVpcmVfY2lwaGVycyA9IFVTIHN0YXRlLT50
bHNfcmVxdWlyZV9jaXBoZXJzOwogICB9CiAKLWlmICgocmMgPSBnbnV0bHNfcHJpb3JpdHlfaW5p
dCgmc3RhdGUtPnByaW9yaXR5X2NhY2hlLCBDQ1MgcCwgJmVycnBvcykpKQotICByZXR1cm4gdGxz
X2Vycm9yX2dudShzdHJpbmdfc3ByaW50ZigKLQkJICAgICAgImdudXRsc19wcmlvcml0eV9pbml0
KCVzKSBmYWlsZWQgYXQgb2Zmc2V0ICVsZCwgXCIlLjZzLi5cIiIsCi0JCSAgICAgIHAsIGVycnBv
cyAtIENTIHAsIGVycnBvcyksCi0JCSAgcmMsIGhvc3QsIGVycnN0cik7CiAKLWlmICgocmMgPSBn
bnV0bHNfcHJpb3JpdHlfc2V0KHN0YXRlLT5zZXNzaW9uLCBzdGF0ZS0+cHJpb3JpdHlfY2FjaGUp
KSkKLSAgcmV0dXJuIHRsc19lcnJvcl9nbnUoVVMiZ251dGxzX3ByaW9yaXR5X3NldCIsIHJjLCBo
b3N0LCBlcnJzdHIpOworaWYgKChyYyA9IGdudXRsc19wcmlvcml0eV9zZXQoc3RhdGUtPnNlc3Np
b24sIHN0YXRlLT5saWJfc3RhdGUucHJpX2NhY2hlKSkpCisgIHJldHVybiB0bHNfZXJyb3JfZ251
KHN0YXRlLCBVUyJnbnV0bHNfcHJpb3JpdHlfc2V0IiwgcmMsIGVycnN0cik7CiAKIC8qIFRoaXMg
YWxzbyBzZXRzIHRoZSBzZXJ2ZXIgdGlja2V0IGV4cGlyYXRpb24gdGltZSB0byB0aGUgc2FtZSwg
YW5kCiB0aGUgU1RFSyByb3RhdGlvbiB0aW1lIHRvIDN4LiAqLwpAQCAtMTg2Myw3ICsyMzM4LDcg
QEAKICAgICAgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlRMUzogcGVlciBjZXJ0IHByb2Js
ZW06ICVzOiAlc1xuIiwgXAogCShMYWJlbCksIGdudXRsc19zdHJlcnJvcihyYykpOyBcCiAgICAg
ICBpZiAoc3RhdGUtPnZlcmlmeV9yZXF1aXJlbWVudCA+PSBWRVJJRllfUkVRVUlSRUQpIFwKLQly
ZXR1cm4gdGxzX2Vycm9yX2dudSgoTGFiZWwpLCByYywgc3RhdGUtPmhvc3QsIGVycnN0cik7IFwK
KwlyZXR1cm4gdGxzX2Vycm9yX2dudShzdGF0ZSwgKExhYmVsKSwgcmMsIGVycnN0cik7IFwKICAg
ICAgIHJldHVybiBPSzsgXAogICAgICAgfSBcCiAgICAgfSB3aGlsZSAoMCkKQEAgLTE4ODAsNyAr
MjM1NSw3IEBACiAgIGV4aW1fZ251dGxzX3BlZXJfZXJyKFVTImdldHRpbmcgc2l6ZSBmb3IgY2Vy
dCBETiBmYWlsZWQiKTsKICAgcmV0dXJuIEZBSUw7IC8qIHNob3VsZCBub3QgaGFwcGVuICovCiAg
IH0KLWRuX2J1ZiA9IHN0b3JlX2dldF9wZXJtKHN6LCBUUlVFKTsJLyogdGFpbnRlZCAqLworZG5f
YnVmID0gc3RvcmVfZ2V0X3Blcm0oc3osIEdFVF9UQUlOVEVEKTsKIHJjID0gZ251dGxzX3g1MDlf
Y3J0X2dldF9kbihjcnQsIENTIGRuX2J1ZiwgJnN6KTsKIGV4aW1fZ251dGxzX3BlZXJfZXJyKFVT
ImZhaWxlZCB0byBleHRyYWN0IGNlcnRpZmljYXRlIEROIFtnbnV0bHNfeDUwOV9jcnRfZ2V0X2Ru
KGNlcnQgMCldIik7CiAKQEAgLTE5NjAsOCArMjQzNSw4IEBACiAgICAgICBmb3IgKG5yZWMgPSAw
OyBzdGF0ZS0+ZGFuZV9kYXRhX2xlbltucmVjXTsgKSBucmVjKys7CiAgICAgICBucmVjKys7CiAK
LSAgICAgIGRkID0gc3RvcmVfZ2V0KG5yZWMgKiBzaXplb2YodXNjaGFyICopLCBGQUxTRSk7Ci0g
ICAgICBkZGwgPSBzdG9yZV9nZXQobnJlYyAqIHNpemVvZihpbnQpLCBGQUxTRSk7CisgICAgICBk
ZCA9IHN0b3JlX2dldChucmVjICogc2l6ZW9mKHVzY2hhciAqKSwgR0VUX1VOVEFJTlRFRCk7Cisg
ICAgICBkZGwgPSBzdG9yZV9nZXQobnJlYyAqIHNpemVvZihpbnQpLCBHRVRfVU5UQUlOVEVEKTsK
ICAgICAgIG5yZWMtLTsKIAogICAgICAgaWYgKChyYyA9IGRhbmVfc3RhdGVfaW5pdCgmcywgMCkp
KQpAQCAtMjE5MSw3ICsyNjY2LDcgQEAKICAgewogICBERUJVRyhEX3RscykKICAgICBpZiAocmMg
PT0gR05VVExTX0VfUkVRVUVTVEVEX0RBVEFfTk9UX0FWQUlMQUJMRSkKLSAgICAgIGRlYnVnX3By
aW50ZigiVExTOiBubyBTTkkgcHJlc2VudGVkIGluIGhhbmRzaGFrZS5cbiIpOworICAgICAgZGVi
dWdfcHJpbnRmKCJUTFM6IG5vIFNOSSBwcmVzZW50ZWQgaW4gaGFuZHNoYWtlXG4iKTsKICAgICBl
bHNlCiAgICAgICBkZWJ1Z19wcmludGYoIlRMUyBmYWlsdXJlOiBnbnV0bHNfc2VydmVyX25hbWVf
Z2V0KCk6ICVzIFslZF1cbiIsCiAgICAgICAgIGdudXRsc19zdHJlcnJvcihyYyksIHJjKTsKQEAg
LTIyMDcsNyArMjY4Miw3IEBACiAvKiBXZSBub3cgaGF2ZSBhIFVURi04IHN0cmluZyBpbiBzbmlf
bmFtZSAqLwogb2xkX3Bvb2wgPSBzdG9yZV9wb29sOwogc3RvcmVfcG9vbCA9IFBPT0xfUEVSTTsK
LXN0YXRlLT5yZWNlaXZlZF9zbmkgPSBzdHJpbmdfY29weV90YWludChVUyBzbmlfbmFtZSwgVFJV
RSk7CitzdGF0ZS0+cmVjZWl2ZWRfc25pID0gc3RyaW5nX2NvcHlfdGFpbnQoVVMgc25pX25hbWUs
IEdFVF9UQUlOVEVEKTsKIHN0b3JlX3Bvb2wgPSBvbGRfcG9vbDsKIAogLyogV2Ugc2V0IHRoaXMg
b25lIG5vdyBzbyB0aGF0IHZhcmlhYmxlIGV4cGFuc2lvbnMgYmVsb3cgd2lsbCB3b3JrICovCkBA
IC0yMjY2LDcgKzI3NDEsNyBAQAogCiAgIHN0YXRlLT50bHNwLT5wZWVyY2VydCA9IGNydDsKICAg
aWYgKCh5aWVsZCA9IGV2ZW50X3JhaXNlKHN0YXRlLT5ldmVudF9hY3Rpb24sCi0JICAgICAgVVMi
dGxzOmNlcnQiLCBzdHJpbmdfc3ByaW50ZigiJWQiLCBjZXJ0X2xpc3Rfc2l6ZSkpKSkKKwkgICAg
ICBVUyJ0bHM6Y2VydCIsIHN0cmluZ19zcHJpbnRmKCIlZCIsIGNlcnRfbGlzdF9zaXplKSwgJmVy
cm5vKSkpCiAgICAgewogICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTiwKIAkgICAgICAiU1NMIHZl
cmlmeSBkZW5pZWQgYnkgZXZlbnQtYWN0aW9uOiBkZXB0aD0lZDogJXMiLApAQCAtMjMzMSw3ICsy
ODA2LDcgQEAKIH0KIAogCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUKKyNpZmRlZiBF
WElNX0hBVkVfVExTX1JFU1VNRQogc3RhdGljIGludAogdGxzX3NlcnZlcl90aWNrZXRfY2IoZ251
dGxzX3Nlc3Npb25fdCBzZXNzLCB1X2ludCBodHlwZSwgdW5zaWduZWQgd2hlbiwKICAgdW5zaWdu
ZWQgaW5jb21pbmcsIGNvbnN0IGdudXRsc19kYXR1bV90ICogbXNnKQpAQCAtMjM4Niw3ICsyODYx
LDcyIEBACiAgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlNlc3Npb24gcmVzdW1lZFxuIik7
CiAgIH0KIH0KLSNlbmRpZgorI2VuZGlmCS8qIEVYSU1fSEFWRV9UTFNfUkVTVU1FICovCisKKwor
I2lmZGVmIEVYSU1fSEFWRV9BTFBOCisvKiBFeHBhbmQgYW5kIGNvbnZlcnQgYW4gRXhpbSBsaXN0
IHRvIGEgZ251dGxzX2RhdHVtIGxpc3QuICBGYWxzZSByZXR1cm4gZm9yIGZhaWwuCitOVUxMIHBs
aXN0IHJldHVybiBmb3Igc2lsZW50IG5vLUFMUE4uCisqLworCitzdGF0aWMgQk9PTAordGxzX2Fs
cG5fcGxpc3QodXNjaGFyICoqIHRsc19hbHBuLCBjb25zdCBnbnV0bHNfZGF0dW1fdCAqKiBwbGlz
dCwgdW5zaWduZWQgKiBwbGVuLAorICB1c2NoYXIgKiogZXJyc3RyKQorewordXNjaGFyICogZXhw
X2FscG47CisKK2lmICghZXhwYW5kX2NoZWNrKCp0bHNfYWxwbiwgVVMidGxzX2FscG4iLCAmZXhw
X2FscG4sIGVycnN0cikpCisgIHJldHVybiBGQUxTRTsKKworaWYgKCFleHBfYWxwbikKKyAgewor
ICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJTZXR0aW5nIFRMUyBBTFBOIGZvcmNlZCB0byBm
YWlsLCBub3Qgc2VuZGluZ1xuIik7CisgICpwbGlzdCA9IE5VTEw7CisgIH0KK2Vsc2UKKyAgewor
ICBjb25zdCB1c2NoYXIgKiBsaXN0ID0gZXhwX2FscG47CisgIGludCBzZXAgPSAwOworICB1bnNp
Z25lZCBjbnQgPSAwOworICBnbnV0bHNfZGF0dW1fdCAqIHA7CisgIHVzY2hhciAqIHM7CisKKyAg
d2hpbGUgKHN0cmluZ19uZXh0aW5saXN0KCZsaXN0LCAmc2VwLCBOVUxMLCAwKSkgY250Kys7CisK
KyAgcCA9IHN0b3JlX2dldChzaXplb2YoZ251dGxzX2RhdHVtX3QpICogY250LCBleHBfYWxwbik7
CisgIGxpc3QgPSBleHBfYWxwbjsKKyAgZm9yIChpbnQgaSA9IDA7IHMgPSBzdHJpbmdfbmV4dGlu
bGlzdCgmbGlzdCwgJnNlcCwgTlVMTCwgMCk7IGkrKykKKyAgICB7IHBbaV0uZGF0YSA9IHM7IHBb
aV0uc2l6ZSA9IFVzdHJsZW4ocyk7IH0KKyAgKnBsaXN0ID0gKCpwbGVuID0gY250KSA/IHAgOiBO
VUxMOworICB9CityZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK3Rsc19zZXJ2ZXJfc2V0
X2FjY2VwdGFibGVfYWxwbnMoZXhpbV9nbnV0bHNfc3RhdGVfc3QgKiBzdGF0ZSwgdXNjaGFyICoq
IGVycnN0cikKK3sKK3VzY2hhciAqIGxvY2FsX2FscG4gPSBzdHJpbmdfY29weSh0bHNfYWxwbik7
CitpbnQgcmM7Citjb25zdCBnbnV0bHNfZGF0dW1fdCAqIHBsaXN0OwordW5zaWduZWQgcGxlbjsK
KworaWYgKHRsc19hbHBuX3BsaXN0KCZsb2NhbF9hbHBuLCAmcGxpc3QsICZwbGVuLCBlcnJzdHIp
ICYmIHBsaXN0KQorICB7CisgIC8qIFRoaXMgc2VlbXMgdG8gYmUgb25seSBtYW5kYXRvcnkgaWYg
dGhlIGNsaWVudCBzZW5kcyBhbiBBTFBOIGV4dGVuc2lvbjsKKyAgbm90IHRyeWluZyBBTFBOIGlz
IG9rLiBOZWVkIHRvIGRlY2lkZSBob3cgdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSBtdXN0LWFscG4u
ICovCisKKyAgc2VydmVyX3NlZW5fYWxwbiA9IDA7CisgIGlmICghKHJjID0gZ251dGxzX2FscG5f
c2V0X3Byb3RvY29scyhzdGF0ZS0+c2Vzc2lvbiwgcGxpc3QsIHBsZW4sCisJCQkJCUdOVVRMU19B
TFBOX01BTkRBVE9SWSkpKQorICAgIGdudXRsc19oYW5kc2hha2Vfc2V0X2hvb2tfZnVuY3Rpb24o
c3RhdGUtPnNlc3Npb24sCisgICAgICBHTlVUTFNfSEFORFNIQUtFX0FOWSwgR05VVExTX0hPT0tf
UE9TVCwgdGxzX3NlcnZlcl9ob29rX2NiKTsKKyAgZWxzZQorICAgIERFQlVHKERfdGxzKQorICAg
ICAgZGVidWdfcHJpbnRmKCJzZXR0aW5nIGFscG4gcHJvdG9jb2xzOiAlc1xuIiwgVVMgZ251dGxz
X3N0cmVycm9yKHJjKSk7CisgIH0KK30KKyNlbmRpZgkvKiBFWElNX0hBVkVfQUxQTiAqLworCiAv
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAqLwogCkBAIC0yNDAy
LDcgKzI5NDIsNiBAQAogYSBUTFMgc2Vzc2lvbi4KIAogQXJndW1lbnRzOgotICByZXF1aXJlX2Np
cGhlcnMgIGxpc3Qgb2YgYWxsb3dlZCBjaXBoZXJzIG9yIE5VTEwKICAgZXJyc3RyCSAgIHBvaW50
ZXIgdG8gZXJyb3Igc3RyaW5nCiAKIFJldHVybnM6ICAgICAgICAgICBPSyBvbiBzdWNjZXNzCkBA
IC0yNDEyLDcgKzI5NTEsNyBAQAogKi8KIAogaW50Ci10bHNfc2VydmVyX3N0YXJ0KGNvbnN0IHVz
Y2hhciAqIHJlcXVpcmVfY2lwaGVycywgdXNjaGFyICoqIGVycnN0cikKK3Rsc19zZXJ2ZXJfc3Rh
cnQodXNjaGFyICoqIGVycnN0cikKIHsKIGludCByYzsKIGV4aW1fZ251dGxzX3N0YXRlX3N0ICog
c3RhdGUgPSBOVUxMOwpAQCAtMjQzNiwxNiArMjk3NSwxOSBAQAogICBnZXR0aW1lb2ZkYXkoJnQw
LCBOVUxMKTsKICNlbmRpZgogCi0gIGlmICgocmMgPSB0bHNfaW5pdChOVUxMLCB0bHNfY2VydGlm
aWNhdGUsIHRsc19wcml2YXRla2V5LAotICAgICAgTlVMTCwgdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0
ZXMsIHRsc19jcmwsCi0gICAgICByZXF1aXJlX2NpcGhlcnMsICZzdGF0ZSwgJnRsc19pbiwgZXJy
c3RyKSkgIT0gT0spIHJldHVybiByYzsKKyAgaWYgKChyYyA9IHRsc19pbml0KE5VTEwsIE5VTEws
CisgICAgICB0bHNfcmVxdWlyZV9jaXBoZXJzLCAmc3RhdGUsICZ0bHNfaW4sIGVycnN0cikpICE9
IE9LKSByZXR1cm4gcmM7CiAKICNpZmRlZiBNRUFTVVJFX1RJTUlORwogICByZXBvcnRfdGltZV9z
aW5jZSgmdDAsIFVTInNlcnZlciB0bHNfaW5pdCAoZGVsdGEpIik7CiAjZW5kaWYKICAgfQogCi0j
aWZkZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUKKyNpZmRlZiBFWElNX0hBVkVfQUxQTgordGxz
X3NlcnZlcl9zZXRfYWNjZXB0YWJsZV9hbHBucyhzdGF0ZSwgZXJyc3RyKTsKKyNlbmRpZgorCisj
aWZkZWYgRVhJTV9IQVZFX1RMU19SRVNVTUUKIHRsc19zZXJ2ZXJfcmVzdW1lX3ByZWhhbmRzaGFr
ZShzdGF0ZSk7CiAjZW5kaWYKIApAQCAtMjQ1NSwyMSArMjk5NywyMSBAQAogaWYgKHZlcmlmeV9j
aGVja19ob3N0KCZ0bHNfdmVyaWZ5X2hvc3RzKSA9PSBPSykKICAgewogICBERUJVRyhEX3RscykK
LSAgICBkZWJ1Z19wcmludGYoIlRMUzogYSBjbGllbnQgY2VydGlmaWNhdGUgd2lsbCBiZSByZXF1
aXJlZC5cbiIpOworICAgIGRlYnVnX3ByaW50ZigiVExTOiBhIGNsaWVudCBjZXJ0aWZpY2F0ZSB3
aWxsIGJlIHJlcXVpcmVkXG4iKTsKICAgc3RhdGUtPnZlcmlmeV9yZXF1aXJlbWVudCA9IFZFUklG
WV9SRVFVSVJFRDsKICAgZ251dGxzX2NlcnRpZmljYXRlX3NlcnZlcl9zZXRfcmVxdWVzdChzdGF0
ZS0+c2Vzc2lvbiwgR05VVExTX0NFUlRfUkVRVUlSRSk7CiAgIH0KIGVsc2UgaWYgKHZlcmlmeV9j
aGVja19ob3N0KCZ0bHNfdHJ5X3ZlcmlmeV9ob3N0cykgPT0gT0spCiAgIHsKICAgREVCVUcoRF90
bHMpCi0gICAgZGVidWdfcHJpbnRmKCJUTFM6IGEgY2xpZW50IGNlcnRpZmljYXRlIHdpbGwgYmUg
cmVxdWVzdGVkIGJ1dCBub3QgcmVxdWlyZWQuXG4iKTsKKyAgICBkZWJ1Z19wcmludGYoIlRMUzog
YSBjbGllbnQgY2VydGlmaWNhdGUgd2lsbCBiZSByZXF1ZXN0ZWQgYnV0IG5vdCByZXF1aXJlZFxu
Iik7CiAgIHN0YXRlLT52ZXJpZnlfcmVxdWlyZW1lbnQgPSBWRVJJRllfT1BUSU9OQUw7CiAgIGdu
dXRsc19jZXJ0aWZpY2F0ZV9zZXJ2ZXJfc2V0X3JlcXVlc3Qoc3RhdGUtPnNlc3Npb24sIEdOVVRM
U19DRVJUX1JFUVVFU1QpOwogICB9CiBlbHNlCiAgIHsKICAgREVCVUcoRF90bHMpCi0gICAgZGVi
dWdfcHJpbnRmKCJUTFM6IGEgY2xpZW50IGNlcnRpZmljYXRlIHdpbGwgbm90IGJlIHJlcXVlc3Rl
ZC5cbiIpOworICAgIGRlYnVnX3ByaW50ZigiVExTOiBhIGNsaWVudCBjZXJ0aWZpY2F0ZSB3aWxs
IG5vdCBiZSByZXF1ZXN0ZWRcbiIpOwogICBzdGF0ZS0+dmVyaWZ5X3JlcXVpcmVtZW50ID0gVkVS
SUZZX05PTkU7CiAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXJ2ZXJfc2V0X3JlcXVlc3Qoc3RhdGUt
PnNlc3Npb24sIEdOVVRMU19DRVJUX0lHTk9SRSk7CiAgIH0KQEAgLTI0NzksNyArMzAyMSw3IEBA
CiAgIHsKICAgc3RhdGUtPmV2ZW50X2FjdGlvbiA9IGV2ZW50X2FjdGlvbjsKICAgZ251dGxzX3Nl
c3Npb25fc2V0X3B0cihzdGF0ZS0+c2Vzc2lvbiwgc3RhdGUpOwotICBnbnV0bHNfY2VydGlmaWNh
dGVfc2V0X3ZlcmlmeV9mdW5jdGlvbihzdGF0ZS0+eDUwOV9jcmVkLCB2ZXJpZnlfY2IpOworICBn
bnV0bHNfY2VydGlmaWNhdGVfc2V0X3ZlcmlmeV9mdW5jdGlvbihzdGF0ZS0+bGliX3N0YXRlLng1
MDlfY3JlZCwgdmVyaWZ5X2NiKTsKICAgfQogI2VuZGlmCiAKQEAgLTI1MjIsNiArMzA2NCw5IEBA
CiAKIGlmIChyYyAhPSBHTlVUTFNfRV9TVUNDRVNTKQogICB7CisgIERFQlVHKERfdGxzKSBkZWJ1
Z19wcmludGYoIiBlcnJvciAlZCBmcm9tIGdudXRsc19oYW5kc2hha2U6ICVzXG4iLAorICAgIHJj
LCBnbnV0bHNfc3RyZXJyb3IocmMpKTsKKwogICAvKiBJdCBzZWVtcyB0aGF0LCBleGNlcHQgaW4g
dGhlIGNhc2Ugb2YgYSB0aW1lb3V0LCB3ZSBoYXZlIHRvIGNsb3NlIHRoZQogICBjb25uZWN0aW9u
IHJpZ2h0IGhlcmU7IG90aGVyd2lzZSBpZiB0aGUgb3RoZXIgZW5kIGlzIHJ1bm5pbmcgT3BlblNT
TCBpdCBoYW5ncwogICB1bnRpbCB0aGUgc2VydmVyIHRpbWVzIG91dC4gKi8KQEAgLTI1MjksMTQg
KzMwNzQsMTkgQEAKICAgaWYgKHNpZ2Fscm1fc2VlbikKICAgICB7CiAgICAgdGxzX2Vycm9yKFVT
ImdudXRsc19oYW5kc2hha2UiLCBVUyJ0aW1lZCBvdXQiLCBOVUxMLCBlcnJzdHIpOworI2lmbmRl
ZiBESVNBQkxFX0VWRU5UCisgICAgKHZvaWQpIGV2ZW50X3JhaXNlKGV2ZW50X2FjdGlvbiwgVVMi
dGxzOmZhaWw6Y29ubmVjdCIsICplcnJzdHIsIE5VTEwpOworI2VuZGlmCiAgICAgZ251dGxzX2Ri
X3JlbW92ZV9zZXNzaW9uKHN0YXRlLT5zZXNzaW9uKTsKICAgICB9CiAgIGVsc2UKICAgICB7Ci0g
ICAgdGxzX2Vycm9yX2dudShVUyJnbnV0bHNfaGFuZHNoYWtlIiwgcmMsIE5VTEwsIGVycnN0cik7
CisgICAgdGxzX2Vycm9yX2dudShzdGF0ZSwgVVMiZ251dGxzX2hhbmRzaGFrZSIsIHJjLCBlcnJz
dHIpOworI2lmbmRlZiBESVNBQkxFX0VWRU5UCisgICAgKHZvaWQpIGV2ZW50X3JhaXNlKGV2ZW50
X2FjdGlvbiwgVVMidGxzOmZhaWw6Y29ubmVjdCIsICplcnJzdHIsIE5VTEwpOworI2VuZGlmCiAg
ICAgKHZvaWQpIGdudXRsc19hbGVydF9zZW5kX2FwcHJvcHJpYXRlKHN0YXRlLT5zZXNzaW9uLCBy
Yyk7CiAgICAgZ251dGxzX2RlaW5pdChzdGF0ZS0+c2Vzc2lvbik7Ci0gICAgZ251dGxzX2NlcnRp
ZmljYXRlX2ZyZWVfY3JlZGVudGlhbHMoc3RhdGUtPng1MDlfY3JlZCk7CiAgICAgbWlsbGlzbGVl
cCg1MDApOwogICAgIHNodXRkb3duKHN0YXRlLT5mZF9vdXQsIFNIVVRfV1IpOwogICAgIGZvciAo
aW50IGkgPSAxMDI0OyBmZ2V0YyhzbXRwX2luKSAhPSBFT0YgJiYgaSA+IDA7ICkgaS0tOwkvKiBk
cmFpbiBza3QgKi8KQEAgLTI1NTMsMTIgKzMxMDMsMzkgQEAKICAgdGxzX2luLmV4dF9tYXN0ZXJf
c2VjcmV0ID0gVFJVRTsKICNlbmRpZgogCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUK
KyNpZmRlZiBFWElNX0hBVkVfVExTX1JFU1VNRQogdGxzX3NlcnZlcl9yZXN1bWVfcG9zdGhhbmRz
aGFrZShzdGF0ZSk7CiAjZW5kaWYKIAogREVCVUcoRF90bHMpIHBvc3RfaGFuZHNoYWtlX2RlYnVn
KHN0YXRlKTsKIAorI2lmZGVmIEVYSU1fSEFWRV9BTFBOCitpZiAoc2VydmVyX3NlZW5fYWxwbiA+
IDApCisgIHsKKyAgREVCVUcoRF90bHMpCisgICAgewkJLyogVGhlIGNsaWVudCBvZmZlcmVkIEFM
UE4uICBTZWUgd2hhdCB3YXMgbmVnb3RpYXRlZC4gKi8KKyAgICBnbnV0bHNfZGF0dW1fdCBwID0g
ey5zaXplID0gMH07CisgICAgaW50IHJjID0gZ251dGxzX2FscG5fZ2V0X3NlbGVjdGVkX3Byb3Rv
Y29sKHN0YXRlLT5zZXNzaW9uLCAmcCk7CisgICAgaWYgKCFyYykKKwlkZWJ1Z19wcmludGYoIkFM
UE4gbmVnb3RpYXRlZDogJS4qc1xuIiwgKGludClwLnNpemUsIHAuZGF0YSk7CisgICAgZWxzZQor
CWRlYnVnX3ByaW50ZigiZ2V0dGluZyBhbHBuIHByb3RvY29sOiAlc1xuIiwgVVMgZ251dGxzX3N0
cmVycm9yKHJjKSk7CisKKyAgICB9CisgIH0KK2Vsc2UgaWYgKHNlcnZlcl9zZWVuX2FscG4gPT0g
MCkKKyAgaWYgKHZlcmlmeV9jaGVja19ob3N0KCZob3N0c19yZXF1aXJlX2FscG4pID09IE9LKQor
ICAgIHsKKyAgICBnbnV0bHNfYWxlcnRfc2VuZChzdGF0ZS0+c2Vzc2lvbiwgR05VVExTX0FMX0ZB
VEFMLCBHTlVUTFNfQV9OT19BUFBMSUNBVElPTl9QUk9UT0NPTCk7CisgICAgdGxzX2Vycm9yKFVT
ImhhbmRzaGFrZSIsIFVTIkFMUE4gcmVxdWlyZWQgYnV0IG5vdCBuZWdvdGlhdGVkIiwgTlVMTCwg
ZXJyc3RyKTsKKyAgICByZXR1cm4gRkFJTDsKKyAgICB9CisgIGVsc2UKKyAgICBERUJVRyhEX3Rs
cykgZGVidWdfcHJpbnRmKCJUTFM6IG5vIEFMUE4gcHJlc2VudGVkIGluIGhhbmRzaGFrZVxuIik7
CitlbHNlCisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlRMUzogd2FzIG5vdCB3YXRjaGlu
ZyBmb3IgQUxQTlxuIik7CisjZW5kaWYKKwogLyogVmVyaWZ5IGFmdGVyIHRoZSBmYWN0ICovCiAK
IGlmICghdmVyaWZ5X2NlcnRpZmljYXRlKHN0YXRlLCBlcnJzdHIpKQpAQCAtMjU4NSwxMCArMzE2
MiwxMCBAQAogcmVjZWl2ZV9nZXRjID0gdGxzX2dldGM7CiByZWNlaXZlX2dldGJ1ZiA9IHRsc19n
ZXRidWY7CiByZWNlaXZlX2dldF9jYWNoZSA9IHRsc19nZXRfY2FjaGU7CityZWNlaXZlX2hhc2Mg
PSB0bHNfaGFzYzsKIHJlY2VpdmVfdW5nZXRjID0gdGxzX3VuZ2V0YzsKIHJlY2VpdmVfZmVvZiA9
IHRsc19mZW9mOwogcmVjZWl2ZV9mZXJyb3IgPSB0bHNfZmVycm9yOwotcmVjZWl2ZV9zbXRwX2J1
ZmZlcmVkID0gdGxzX3NtdHBfYnVmZmVyZWQ7CiAKIHJldHVybiBPSzsKIH0KQEAgLTI2MDksNyAr
MzE4Niw3IEBACiAgICAgaG9zdC0+Y2VydG5hbWU7CiAjZW5kaWYKICAgREVCVUcoRF90bHMpCi0g
ICAgZGVidWdfcHJpbnRmKCJUTFM6IHNlcnZlciBjZXJ0IHZlcmlmaWNhdGlvbiBpbmNsdWRlcyBo
b3N0bmFtZTogXCIlc1wiLlxuIiwKKyAgICBkZWJ1Z19wcmludGYoIlRMUzogc2VydmVyIGNlcnQg
dmVyaWZpY2F0aW9uIGluY2x1ZGVzIGhvc3RuYW1lOiBcIiVzXCJcbiIsCiAJCSAgICBzdGF0ZS0+
ZXhwX3Rsc192ZXJpZnlfY2VydF9ob3N0bmFtZXMpOwogICB9CiB9CkBAIC0yNjM4LDggKzMyMTUs
OCBAQAogICAgICByciA9IGRuc19uZXh0X3JyKGRuc2EsICZkbnNzLCBSRVNFVF9ORVhUKQogICAg
ICkgaWYgKHJyLT50eXBlID09IFRfVExTQSkgaSsrOwogCi1kYW5lX2RhdGEgPSBzdG9yZV9nZXQo
aSAqIHNpemVvZih1c2NoYXIgKiksIEZBTFNFKTsKLWRhbmVfZGF0YV9sZW4gPSBzdG9yZV9nZXQo
aSAqIHNpemVvZihpbnQpLCBGQUxTRSk7CitkYW5lX2RhdGEgPSBzdG9yZV9nZXQoaSAqIHNpemVv
Zih1c2NoYXIgKiksIEdFVF9VTlRBSU5URUQpOworZGFuZV9kYXRhX2xlbiA9IHN0b3JlX2dldChp
ICogc2l6ZW9mKGludCksIEdFVF9VTlRBSU5URUQpOwogCiBpID0gMDsKIGZvciAoZG5zX3JlY29y
ZCAqIHJyID0gZG5zX25leHRfcnIoZG5zYSwgJmRuc3MsIFJFU0VUX0FOU1dFUlMpOyBycjsKQEAg
LTI2ODYsNyArMzI2Myw3IEBACiAKIAogCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUK
KyNpZmRlZiBFWElNX0hBVkVfVExTX1JFU1VNRQogLyogT24gdGhlIGNsaWVudCwgZ2V0IGFueSBz
dGFzaGVkIHNlc3Npb24gZm9yIHRoZSBnaXZlbiBJUCBmcm9tIGhpbnRzIGRiCiBhbmQgYXBwbHkg
aXQgdG8gdGhlIHNzbC1jb25uZWN0aW9uIGZvciBhdHRlbXB0ZWQgcmVzdW1wdGlvbi4gIEFsdGhv
dWdoCiB0aGVyZSBpcyBhIGdudXRsc19zZXNzaW9uX3RpY2tldF9lbmFibGVfY2xpZW50KCkgaW50
ZXJmYWNlIGl0IGlzCkBAIC0yNjk3LDI1ICszMjc0LDI4IEBACiAKIHN0YXRpYyB2b2lkCiB0bHNf
cmV0cmlldmVfc2Vzc2lvbih0bHNfc3VwcG9ydCAqIHRsc3AsIGdudXRsc19zZXNzaW9uX3Qgc2Vz
c2lvbiwKLSAgaG9zdF9pdGVtICogaG9zdCwgc210cF90cmFuc3BvcnRfb3B0aW9uc19ibG9jayAq
IG9iKQorICBzbXRwX2Nvbm5lY3RfYXJncyAqIGNvbm5fYXJncywgc210cF90cmFuc3BvcnRfb3B0
aW9uc19ibG9jayAqIG9iKQogewogdGxzcC0+cmVzdW1wdGlvbiA9IFJFU1VNRV9TVVBQT1JURUQ7
Ci1pZiAodmVyaWZ5X2NoZWNrX2dpdmVuX2hvc3QoQ1VTUyAmb2ItPnRsc19yZXN1bXB0aW9uX2hv
c3RzLCBob3N0KSA9PSBPSykKKworaWYgKCFjb25uX2FyZ3MtPmhhdmVfbGJzZXJ2ZXIpCisgIHsg
REVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigicmVzdW1wdGlvbiBub3Qgc3VwcG9ydGVkIG9uIGNv
bnRpbnVlZC1jb25uZWN0aW9uXG4iKTsgfQorZWxzZSBpZiAodmVyaWZ5X2NoZWNrX2dpdmVuX2hv
c3QoQ1VTUyAmb2ItPnRsc19yZXN1bXB0aW9uX2hvc3RzLCBjb25uX2FyZ3MtPmhvc3QpID09IE9L
KQogICB7CiAgIGRiZGF0YV90bHNfc2Vzc2lvbiAqIGR0OwogICBpbnQgbGVuLCByYzsKICAgb3Bl
bl9kYiBkYmJsb2NrLCAqIGRibV9maWxlOwogCi0gIERFQlVHKERfdGxzKQotICAgIGRlYnVnX3By
aW50ZigiY2hlY2sgZm9yIHJlc3VtYWJsZSBzZXNzaW9uIGZvciAlc1xuIiwgaG9zdC0+YWRkcmVz
cyk7CiAgIHRsc3AtPmhvc3RfcmVzdW1hYmxlID0gVFJVRTsKKyAgdGxzX2NsaWVudF9yZXNtcHRp
b25fa2V5KHRsc3AsIGNvbm5fYXJncywgb2IpOworCiAgIHRsc3AtPnJlc3VtcHRpb24gfD0gUkVT
VU1FX0NMSUVOVF9SRVFVRVNURUQ7CiAgIGlmICgoZGJtX2ZpbGUgPSBkYmZuX29wZW4oVVMidGxz
IiwgT19SRE9OTFksICZkYmJsb2NrLCBGQUxTRSwgRkFMU0UpKSkKICAgICB7Ci0gICAgLyogS2V5
IGZvciB0aGUgZGIgaXMgdGhlIElQLiAgV2UnZCBsaWtlIHRvIGZpbHRlciB0aGUgcmV0cmlldmVk
IHNlc3Npb24KLSAgICBmb3IgdGlja2V0IGFkdmlzb3J5IGV4cGlyeSwgYnV0IDMuNi4xIHNlZW1z
IHRvIGdpdmUgbm8gYWNjZXNzIHRvIHRoYXQgKi8KKyAgICAvKiBXZSdkIGxpa2UgdG8gZmlsdGVy
IHRoZSByZXRyaWV2ZWQgc2Vzc2lvbiBmb3IgdGlja2V0IGFkdmlzb3J5IGV4cGlyeSwKKyAgICBi
dXQgMy42LjEgc2VlbXMgdG8gZ2l2ZSBubyBhY2Nlc3MgdG8gdGhhdCAqLwogCi0gICAgaWYgKChk
dCA9IGRiZm5fcmVhZF93aXRoX2xlbmd0aChkYm1fZmlsZSwgaG9zdC0+YWRkcmVzcywgJmxlbikp
KQorICAgIGlmICgoZHQgPSBkYmZuX3JlYWRfd2l0aF9sZW5ndGgoZGJtX2ZpbGUsIHRsc3AtPnJl
c3VtZV9pbmRleCwgJmxlbikpKQogICAgICAgaWYgKCEocmMgPSBnbnV0bHNfc2Vzc2lvbl9zZXRf
ZGF0YShzZXNzaW9uLAogCQkgICAgQ1VTIGR0LT5zZXNzaW9uLCAoc2l6ZV90KWxlbiAtIHNpemVv
ZihkYmRhdGFfdGxzX3Nlc3Npb24pKSkpCiAJewpAQCAtMjc1Miw3ICszMzMyLDcgQEAKICAgICAg
IHsKICAgICAgIG9wZW5fZGIgZGJibG9jaywgKiBkYm1fZmlsZTsKICAgICAgIGludCBkbGVuID0g
c2l6ZW9mKGRiZGF0YV90bHNfc2Vzc2lvbikgKyB0a3Quc2l6ZTsKLSAgICAgIGRiZGF0YV90bHNf
c2Vzc2lvbiAqIGR0ID0gc3RvcmVfZ2V0KGRsZW4sIFRSVUUpOworICAgICAgZGJkYXRhX3Rsc19z
ZXNzaW9uICogZHQgPSBzdG9yZV9nZXQoZGxlbiwgR0VUX1RBSU5URUQpOwogCiAgICAgICBERUJV
RyhEX3RscykgZGVidWdfcHJpbnRmKCJzZXNzaW9uIGRhdGEgc2l6ZSAldVxuIiwgKHVuc2lnbmVk
KXRrdC5zaXplKTsKICAgICAgIG1lbWNweShkdC0+c2Vzc2lvbiwgdGt0LmRhdGEsIHRrdC5zaXpl
KTsKQEAgLTI3NjEsOCArMzM0MSw3IEBACiAgICAgICBpZiAoKGRibV9maWxlID0gZGJmbl9vcGVu
KFVTInRscyIsIE9fUkRXUiwgJmRiYmxvY2ssIEZBTFNFLCBGQUxTRSkpKQogCXsKIAkvKiBrZXkg
Zm9yIHRoZSBkYiBpcyB0aGUgSVAgKi8KLQlkYmZuX2RlbGV0ZShkYm1fZmlsZSwgaG9zdC0+YWRk
cmVzcyk7Ci0JZGJmbl93cml0ZShkYm1fZmlsZSwgaG9zdC0+YWRkcmVzcywgZHQsIGRsZW4pOwor
CWRiZm5fd3JpdGUoZGJtX2ZpbGUsIHRsc3AtPnJlc3VtZV9pbmRleCwgZHQsIGRsZW4pOwogCWRi
Zm5fY2xvc2UoZGJtX2ZpbGUpOwogCiAJREVCVUcoRF90bHMpCkBAIC0yNzk3LDE0ICszMzc2LDE0
IEBACiAKIHN0YXRpYyB2b2lkCiB0bHNfY2xpZW50X3Jlc3VtZV9wcmVoYW5kc2hha2UoZXhpbV9n
bnV0bHNfc3RhdGVfc3QgKiBzdGF0ZSwKLSAgdGxzX3N1cHBvcnQgKiB0bHNwLCBob3N0X2l0ZW0g
KiBob3N0LAorICB0bHNfc3VwcG9ydCAqIHRsc3AsIHNtdHBfY29ubmVjdF9hcmdzICogY29ubl9h
cmdzLAogICBzbXRwX3RyYW5zcG9ydF9vcHRpb25zX2Jsb2NrICogb2IpCiB7CiBnbnV0bHNfc2Vz
c2lvbl9zZXRfcHRyKHN0YXRlLT5zZXNzaW9uLCBzdGF0ZSk7CiBnbnV0bHNfaGFuZHNoYWtlX3Nl
dF9ob29rX2Z1bmN0aW9uKHN0YXRlLT5zZXNzaW9uLAogICBHTlVUTFNfSEFORFNIQUtFX05FV19T
RVNTSU9OX1RJQ0tFVCwgR05VVExTX0hPT0tfUE9TVCwgdGxzX2NsaWVudF90aWNrZXRfY2IpOwog
Ci10bHNfcmV0cmlldmVfc2Vzc2lvbih0bHNwLCBzdGF0ZS0+c2Vzc2lvbiwgaG9zdCwgb2IpOwor
dGxzX3JldHJpZXZlX3Nlc3Npb24odGxzcCwgc3RhdGUtPnNlc3Npb24sIGNvbm5fYXJncywgb2Ip
OwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjgxOSw3ICszMzk4LDcgQEAKIAogdGxzX3NhdmVfc2Vz
c2lvbih0bHNwLCBzdGF0ZS0+c2Vzc2lvbiwgaG9zdCk7CiB9Ci0jZW5kaWYJLyogRVhQRVJJTUVO
VEFMX1RMU19SRVNVTUUgKi8KKyNlbmRpZgkvKiAhRElTQUJMRV9UTFNfUkVTVU1FICovCiAKIAog
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI4
NzAsNyArMzQ0OSw3IEBACiAKIGlmIChjb25uX2FyZ3MtPmRhbmUgJiYgb2ItPmRhbmVfcmVxdWly
ZV90bHNfY2lwaGVycykKICAgewotICAvKiBub3QgdXNpbmcgZXhwYW5kX2NoZWNrX3Rsc3ZhciBi
ZWNhdXNlIG5vdCB5ZXQgaW4gc3RhdGUgKi8KKyAgLyogbm90IHVzaW5nIEV4cGFuZF9jaGVja190
bHN2YXIgYmVjYXVzZSBub3QgeWV0IGluIHN0YXRlICovCiAgIGlmICghZXhwYW5kX2NoZWNrKG9i
LT5kYW5lX3JlcXVpcmVfdGxzX2NpcGhlcnMsIFVTImRhbmVfcmVxdWlyZV90bHNfY2lwaGVycyIs
CiAgICAgICAmY2lwaGVyX2xpc3QsIGVycnN0cikpCiAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMjg4
OCwxNyArMzQ2NywzNiBAQAogICBnZXR0aW1lb2ZkYXkoJnQwLCBOVUxMKTsKICNlbmRpZgogCi0g
IGlmICh0bHNfaW5pdChob3N0LCBvYi0+dGxzX2NlcnRpZmljYXRlLCBvYi0+dGxzX3ByaXZhdGVr
ZXksCi0gICAgICBvYi0+dGxzX3NuaSwgb2ItPnRsc192ZXJpZnlfY2VydGlmaWNhdGVzLCBvYi0+
dGxzX2NybCwKLSAgICAgIGNpcGhlcl9saXN0LCAmc3RhdGUsIHRsc3AsIGVycnN0cikgIT0gT0sp
CisgIGlmICh0bHNfaW5pdChob3N0LCBvYiwgY2lwaGVyX2xpc3QsICZzdGF0ZSwgdGxzcCwgZXJy
c3RyKSAhPSBPSykKICAgICByZXR1cm4gRkFMU0U7CiAKLQogI2lmZGVmIE1FQVNVUkVfVElNSU5H
CiAgIHJlcG9ydF90aW1lX3NpbmNlKCZ0MCwgVVMiY2xpZW50IHRsc19pbml0IChkZWx0YSkiKTsK
ICNlbmRpZgogICB9CiAKK2lmIChvYi0+dGxzX2FscG4pCisjaWZkZWYgRVhJTV9IQVZFX0FMUE4K
KyAgeworICBjb25zdCBnbnV0bHNfZGF0dW1fdCAqIHBsaXN0OworICB1bnNpZ25lZCBwbGVuOwor
CisgIGlmICghdGxzX2FscG5fcGxpc3QoJm9iLT50bHNfYWxwbiwgJnBsaXN0LCAmcGxlbiwgZXJy
c3RyKSkKKyAgICByZXR1cm4gRkFMU0U7CisgIGlmIChwbGlzdCkKKyAgICBpZiAoZ251dGxzX2Fs
cG5fc2V0X3Byb3RvY29scyhzdGF0ZS0+c2Vzc2lvbiwgcGxpc3QsIHBsZW4sIDApICE9IDApCisg
ICAgICB7CisgICAgICB0bHNfZXJyb3IoVVMiYWxwbiBpbml0IiwgTlVMTCwgc3RhdGUtPmhvc3Qs
IGVycnN0cik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgZWxzZQorICAgICAg
REVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiU2V0dGluZyBUTFMgQUxQTiAnJXMnXG4iLCBvYi0+
dGxzX2FscG4pOworICB9CisjZWxzZQorICBsb2dfd3JpdGUoMCwgTE9HX01BSU4sICJBTFBOIHVu
dXNhYmxlIHdpdGggdGhpcyBHbnVUTFMgbGlicmFyeSB2ZXJzaW9uOyBpZ25vcmluZyBcIiVzXCJc
biIsCisgICAgICAgICAgb2ItPnRsc19hbHBuKTsKKyNlbmRpZgorCiAgIHsKICAgaW50IGRoX21p
bl9iaXRzID0gb2ItPnRsc19kaF9taW5fYml0czsKICAgaWYgKGRoX21pbl9iaXRzIDwgRVhJTV9D
TElFTlRfREhfTUlOX01JTl9CSVRTKQpAQCAtMjkyNCw3ICszNTIyLDcgQEAKIGlmIChjb25uX2Fy
Z3MtPmRhbmUgJiYgZGFuZV90bHNhX2xvYWQoc3RhdGUsICZjb25uX2FyZ3MtPnRsc2FfZG5zYSkp
CiAgIHsKICAgREVCVUcoRF90bHMpCi0gICAgZGVidWdfcHJpbnRmKCJUTFM6IHNlcnZlciBjZXJ0
aWZpY2F0ZSBEQU5FIHJlcXVpcmVkLlxuIik7CisgICAgZGVidWdfcHJpbnRmKCJUTFM6IHNlcnZl
ciBjZXJ0aWZpY2F0ZSBEQU5FIHJlcXVpcmVkXG4iKTsKICAgc3RhdGUtPnZlcmlmeV9yZXF1aXJl
bWVudCA9IFZFUklGWV9EQU5FOwogICBnbnV0bHNfY2VydGlmaWNhdGVfc2VydmVyX3NldF9yZXF1
ZXN0KHN0YXRlLT5zZXNzaW9uLCBHTlVUTFNfQ0VSVF9SRVFVSVJFKTsKICAgfQpAQCAtMjkzOSw3
ICszNTM3LDcgQEAKICAgewogICB0bHNfY2xpZW50X3NldHVwX2hvc3RuYW1lX2NoZWNrcyhob3N0
LCBzdGF0ZSwgb2IpOwogICBERUJVRyhEX3RscykKLSAgICBkZWJ1Z19wcmludGYoIlRMUzogc2Vy
dmVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiByZXF1aXJlZC5cbiIpOworICAgIGRlYnVnX3By
aW50ZigiVExTOiBzZXJ2ZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHJlcXVpcmVkXG4iKTsK
ICAgc3RhdGUtPnZlcmlmeV9yZXF1aXJlbWVudCA9IFZFUklGWV9SRVFVSVJFRDsKICAgZ251dGxz
X2NlcnRpZmljYXRlX3NlcnZlcl9zZXRfcmVxdWVzdChzdGF0ZS0+c2Vzc2lvbiwgR05VVExTX0NF
UlRfUkVRVUlSRSk7CiAgIH0KQEAgLTI5NDcsMTQgKzM1NDUsMTQgQEAKICAgewogICB0bHNfY2xp
ZW50X3NldHVwX2hvc3RuYW1lX2NoZWNrcyhob3N0LCBzdGF0ZSwgb2IpOwogICBERUJVRyhEX3Rs
cykKLSAgICBkZWJ1Z19wcmludGYoIlRMUzogc2VydmVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlv
biBvcHRpb25hbC5cbiIpOworICAgIGRlYnVnX3ByaW50ZigiVExTOiBzZXJ2ZXIgY2VydGlmaWNh
dGUgdmVyaWZpY2F0aW9uIG9wdGlvbmFsXG4iKTsKICAgc3RhdGUtPnZlcmlmeV9yZXF1aXJlbWVu
dCA9IFZFUklGWV9PUFRJT05BTDsKICAgZ251dGxzX2NlcnRpZmljYXRlX3NlcnZlcl9zZXRfcmVx
dWVzdChzdGF0ZS0+c2Vzc2lvbiwgR05VVExTX0NFUlRfUkVRVUVTVCk7CiAgIH0KIGVsc2UKICAg
ewogICBERUJVRyhEX3RscykKLSAgICBkZWJ1Z19wcmludGYoIlRMUzogc2VydmVyIGNlcnRpZmlj
YXRlIHZlcmlmaWNhdGlvbiBub3QgcmVxdWlyZWQuXG4iKTsKKyAgICBkZWJ1Z19wcmludGYoIlRM
Uzogc2VydmVyIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBub3QgcmVxdWlyZWRcbiIpOwogICBz
dGF0ZS0+dmVyaWZ5X3JlcXVpcmVtZW50ID0gVkVSSUZZX05PTkU7CiAgIGdudXRsc19jZXJ0aWZp
Y2F0ZV9zZXJ2ZXJfc2V0X3JlcXVlc3Qoc3RhdGUtPnNlc3Npb24sIEdOVVRMU19DRVJUX0lHTk9S
RSk7CiAgIH0KQEAgLTI5NjcsMTUgKzM1NjUsMTUgQEAKICAgaWYgKChyYyA9IGdudXRsc19vY3Nw
X3N0YXR1c19yZXF1ZXN0X2VuYWJsZV9jbGllbnQoc3RhdGUtPnNlc3Npb24sCiAJCSAgICBOVUxM
LCAwLCBOVUxMKSkgIT0gT0spCiAgICAgewotICAgIHRsc19lcnJvcl9nbnUoVVMiY2VydC1zdGF0
dXMtcmVxIiwgcmMsIHN0YXRlLT5ob3N0LCBlcnJzdHIpOworICAgIHRsc19lcnJvcl9nbnUoc3Rh
dGUsIFVTImNlcnQtc3RhdHVzLXJlcSIsIHJjLCBlcnJzdHIpOwogICAgIHJldHVybiBGQUxTRTsK
ICAgICB9CiAgIHRsc3AtPm9jc3AgPSBPQ1NQX05PVF9SRVNQOwogICB9CiAjZW5kaWYKIAotI2lm
ZGVmIEVYUEVSSU1FTlRBTF9UTFNfUkVTVU1FCi10bHNfY2xpZW50X3Jlc3VtZV9wcmVoYW5kc2hh
a2Uoc3RhdGUsIHRsc3AsIGhvc3QsIG9iKTsKKyNpZmRlZiBFWElNX0hBVkVfVExTX1JFU1VNRQor
dGxzX2NsaWVudF9yZXN1bWVfcHJlaGFuZHNoYWtlKHN0YXRlLCB0bHNwLCBjb25uX2FyZ3MsIG9i
KTsKICNlbmRpZgogCiAjaWZuZGVmIERJU0FCTEVfRVZFTlQKQEAgLTI5ODMsNyArMzU4MSw3IEBA
CiAgIHsKICAgc3RhdGUtPmV2ZW50X2FjdGlvbiA9IHRiLT5ldmVudF9hY3Rpb247CiAgIGdudXRs
c19zZXNzaW9uX3NldF9wdHIoc3RhdGUtPnNlc3Npb24sIHN0YXRlKTsKLSAgZ251dGxzX2NlcnRp
ZmljYXRlX3NldF92ZXJpZnlfZnVuY3Rpb24oc3RhdGUtPng1MDlfY3JlZCwgdmVyaWZ5X2NiKTsK
KyAgZ251dGxzX2NlcnRpZmljYXRlX3NldF92ZXJpZnlfZnVuY3Rpb24oc3RhdGUtPmxpYl9zdGF0
ZS54NTA5X2NyZWQsIHZlcmlmeV9jYik7CiAgIH0KICNlbmRpZgogCkBAIC0zMDA5LDcgKzM2MDcs
NyBAQAogICAgIHRsc19lcnJvcihVUyJnbnV0bHNfaGFuZHNoYWtlIiwgVVMidGltZWQgb3V0Iiwg
c3RhdGUtPmhvc3QsIGVycnN0cik7CiAgICAgfQogICBlbHNlCi0gICAgdGxzX2Vycm9yX2dudShV
UyJnbnV0bHNfaGFuZHNoYWtlIiwgcmMsIHN0YXRlLT5ob3N0LCBlcnJzdHIpOworICAgIHRsc19l
cnJvcl9nbnUoc3RhdGUsIFVTImdudXRsc19oYW5kc2hha2UiLCByYywgZXJyc3RyKTsKICAgcmV0
dXJuIEZBTFNFOwogICB9CiAKQEAgLTMwNTQsOSArMzY1Miw5IEBACiAJZ251dGxzX2ZyZWUocHJp
bnRlZC5kYXRhKTsKIAl9CiAgICAgICBlbHNlCi0JKHZvaWQpIHRsc19lcnJvcl9nbnUoVVMib2Nz
cCBkZWNvZGUiLCByYywgc3RhdGUtPmhvc3QsIGVycnN0cik7CisJKHZvaWQpIHRsc19lcnJvcl9n
bnUoc3RhdGUsIFVTIm9jc3AgZGVjb2RlIiwgcmMsIGVycnN0cik7CiAgICAgaWYgKGlkeCA9PSAw
ICYmIHJjKQotICAgICAgKHZvaWQpIHRsc19lcnJvcl9nbnUoVVMib2NzcCBkZWNvZGUiLCByYywg
c3RhdGUtPmhvc3QsIGVycnN0cik7CisgICAgICAodm9pZCkgdGxzX2Vycm9yX2dudShzdGF0ZSwg
VVMib2NzcCBkZWNvZGUiLCByYywgZXJyc3RyKTsKICAgICB9CiAKICAgaWYgKGdudXRsc19vY3Nw
X3N0YXR1c19yZXF1ZXN0X2lzX2NoZWNrZWQoc3RhdGUtPnNlc3Npb24sIDApID09IDApCkBAIC0z
MDc0LDEwICszNjcyLDI4IEBACiAgIH0KICNlbmRpZgogCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1RM
U19SRVNVTUUKKyNpZmRlZiBFWElNX0hBVkVfVExTX1JFU1VNRQogdGxzX2NsaWVudF9yZXN1bWVf
cG9zdGhhbmRzaGFrZShzdGF0ZSwgdGxzcCwgaG9zdCk7CiAjZW5kaWYKIAorI2lmZGVmIEVYSU1f
SEFWRV9BTFBOCitpZiAob2ItPnRsc19hbHBuKQkvKiBXZSByZXF1ZXN0ZWQuIFNlZSB3aGF0IHdh
cyBuZWdvdGlhdGVkLiAqLworICB7CisgIGdudXRsc19kYXR1bV90IHAgPSB7LnNpemUgPSAwfTsK
KworICBpZiAoZ251dGxzX2FscG5fZ2V0X3NlbGVjdGVkX3Byb3RvY29sKHN0YXRlLT5zZXNzaW9u
LCAmcCkgPT0gMCkKKyAgICB7IERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIkFMUE4gbmVnb3Rp
YXRlZDogJyUuKnMnXG4iLCAoaW50KXAuc2l6ZSwgcC5kYXRhKTsgfQorICBlbHNlIGlmICh2ZXJp
ZnlfY2hlY2tfZ2l2ZW5faG9zdChDVVNTICZvYi0+aG9zdHNfcmVxdWlyZV9hbHBuLCBob3N0KSA9
PSBPSykKKyAgICB7CisgICAgZ251dGxzX2FsZXJ0X3NlbmQoc3RhdGUtPnNlc3Npb24sIEdOVVRM
U19BTF9GQVRBTCwgR05VVExTX0FfTk9fQVBQTElDQVRJT05fUFJPVE9DT0wpOworICAgIHRsc19l
cnJvcihVUyJoYW5kc2hha2UiLCBVUyJBTFBOIHJlcXVpcmVkIGJ1dCBub3QgbmVnb3RpYXRlZCIs
IHN0YXRlLT5ob3N0LCBlcnJzdHIpOworICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgIGVsc2UK
KyAgICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJObyBBTFBOIG5lZ290aWF0ZWQiKTsKKyAg
fQorI2VuZGlmCisKIC8qIFNldHMgdmFyaW91cyBFeGltIGV4cGFuc2lvbiB2YXJpYWJsZXM7IG1h
eSBuZWVkIHRvIGFkanVzdCBmb3IgQUNMIGNhbGxvdXRzICovCiAKIGV4dHJhY3RfZXhpbV92YXJz
X2Zyb21fdGxzX3N0YXRlKHN0YXRlKTsKQEAgLTMwODksNiArMzcwNSwyNSBAQAogCiAKIAorLyoK
K0FyZ3VtZW50czoKKyAgY3RfY3R4CWNsaWVudCBUTFMgY29udGV4dCBwb2ludGVyLCBvciBOVUxM
IGZvciB0aGUgb25lIGdsb2JhbCBzZXJ2ZXIgY29udGV4dAorKi8KKwordm9pZAordGxzX3NodXRk
b3duX3dyKHZvaWQgKiBjdF9jdHgpCit7CitleGltX2dudXRsc19zdGF0ZV9zdCAqIHN0YXRlID0g
Y3RfY3R4ID8gY3RfY3R4IDogJnN0YXRlX3NlcnZlcjsKK3Rsc19zdXBwb3J0ICogdGxzcCA9IHN0
YXRlLT50bHNwOworCitpZiAoIXRsc3AgfHwgdGxzcC0+YWN0aXZlLnNvY2sgPCAwKSByZXR1cm47
ICAvKiBUTFMgd2FzIG5vdCBhY3RpdmUgKi8KKwordGxzX3dyaXRlKGN0X2N0eCwgTlVMTCwgMCwg
RkFMU0UpOwkvKiBmbHVzaCB3cml0ZSBidWZmZXIgKi8KKworSERFQlVHKERfdHJhbnNwb3J0fERf
dGxzfERfYWNsfERfdikgZGVidWdfcHJpbnRmX2luZGVudCgiICBTTVRQKFRMUyBzaHV0ZG93bik+
PlxuIik7CitnbnV0bHNfYnllKHN0YXRlLT5zZXNzaW9uLCBHTlVUTFNfU0hVVF9XUik7Cit9CisK
IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAg
ICAgICAgQ2xvc2UgZG93biBhIFRMUyBzZXNzaW9uICAgICAgICAgICAgICAgKgogKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMwOTksMjcgKzM3
MzQsMzkgQEAKIAogQXJndW1lbnRzOgogICBjdF9jdHgJY2xpZW50IGNvbnRleHQgcG9pbnRlciwg
b3IgTlVMTCBmb3IgdGhlIG9uZSBnbG9iYWwgc2VydmVyIGNvbnRleHQKLSAgc2h1dGRvd24JMSBp
ZiBUTFMgY2xvc2UtYWxlcnQgaXMgdG8gYmUgc2VudCwKLQkJMiBpZiBhbHNvIHJlc3BvbnNlIHRv
IGJlIHdhaXRlZCBmb3IKKyAgZG9fc2h1dGRvd24JMCBubyBkYXRhLWZsdXNoIG9yIFRMUyBjbG9z
ZS1hbGVydAorCQkxIGlmIFRMUyBjbG9zZS1hbGVydCBpcyB0byBiZSBzZW50LAorCQkyIGlmIGFs
c28gcmVzcG9uc2UgdG8gYmUgd2FpdGVkIGZvciAoMnMgdGltZW91dCkKIAogUmV0dXJuczogICAg
IG5vdGhpbmcKICovCiAKIHZvaWQKLXRsc19jbG9zZSh2b2lkICogY3RfY3R4LCBpbnQgc2h1dGRv
d24pCit0bHNfY2xvc2Uodm9pZCAqIGN0X2N0eCwgaW50IGRvX3NodXRkb3duKQogewogZXhpbV9n
bnV0bHNfc3RhdGVfc3QgKiBzdGF0ZSA9IGN0X2N0eCA/IGN0X2N0eCA6ICZzdGF0ZV9zZXJ2ZXI7
CiB0bHNfc3VwcG9ydCAqIHRsc3AgPSBzdGF0ZS0+dGxzcDsKIAogaWYgKCF0bHNwIHx8IHRsc3At
PmFjdGl2ZS5zb2NrIDwgMCkgcmV0dXJuOyAgLyogVExTIHdhcyBub3QgYWN0aXZlICovCiAKLWlm
IChzaHV0ZG93bikKK2lmIChkb19zaHV0ZG93bikKICAgewogICBERUJVRyhEX3RscykgZGVidWdf
cHJpbnRmKCJ0bHNfY2xvc2UoKTogc2h1dHRpbmcgZG93biBUTFMlc1xuIiwKLSAgICBzaHV0ZG93
biA+IDEgPyAiICh3aXRoIHJlc3BvbnNlLXdhaXQpIiA6ICIiKTsKKyAgICBkb19zaHV0ZG93biA+
IFRMU19TSFVURE9XTl9OT1dBSVQgPyAiICh3aXRoIHJlc3BvbnNlLXdhaXQpIiA6ICIiKTsKKwor
ICB0bHNfd3JpdGUoY3RfY3R4LCBOVUxMLCAwLCBGQUxTRSk7CS8qIGZsdXNoIHdyaXRlIGJ1ZmZl
ciAqLworCisjaWZkZWYgRVhJTV9UQ1BfQ09SSworICBpZiAoZG9fc2h1dGRvd24gPT0gVExTX1NI
VVRET1dOX1dBSVQpCisgICAgKHZvaWQpIHNldHNvY2tvcHQodGxzcC0+YWN0aXZlLnNvY2ssIElQ
UFJPVE9fVENQLCBFWElNX1RDUF9DT1JLLCBVUyAmb2ZmLCBzaXplb2Yob2ZmKSk7CisjZW5kaWYK
KworICAvKiBUaGUgbGlicmFyeSBzZWVtcyB0byBoYXZlIG5vIHdheSB0byBvbmx5IHdhaXQgZm9y
IGEgcGVlcidzCisgIHNodXRkb3duLCBzbyBoYW5kbGUgdGhlIHNhbWUgYXMgVExTX1NIVVRET1dO
X1dBSVQgKi8KIAogICBBTEFSTSgyKTsKLSAgZ251dGxzX2J5ZShzdGF0ZS0+c2Vzc2lvbiwgc2h1
dGRvd24gPiAxID8gR05VVExTX1NIVVRfUkRXUiA6IEdOVVRMU19TSFVUX1dSKTsKKyAgZ251dGxz
X2J5ZShzdGF0ZS0+c2Vzc2lvbiwKKyAgICAgIGRvX3NodXRkb3duID4gVExTX1NIVVRET1dOX05P
V0FJVCA/IEdOVVRMU19TSFVUX1JEV1IgOiBHTlVUTFNfU0hVVF9XUik7CiAgIEFMQVJNX0NMUigw
KTsKICAgfQogCkBAIC0zMTI4LDE1ICszNzc1LDEzIEBACiAgIHJlY2VpdmVfZ2V0YyA9CXNtdHBf
Z2V0YzsKICAgcmVjZWl2ZV9nZXRidWYgPQlzbXRwX2dldGJ1ZjsKICAgcmVjZWl2ZV9nZXRfY2Fj
aGUgPQlzbXRwX2dldF9jYWNoZTsKKyAgcmVjZWl2ZV9oYXNjID0Jc210cF9oYXNjOwogICByZWNl
aXZlX3VuZ2V0YyA9CXNtdHBfdW5nZXRjOwogICByZWNlaXZlX2Zlb2YgPQlzbXRwX2Zlb2Y7CiAg
IHJlY2VpdmVfZmVycm9yID0Jc210cF9mZXJyb3I7Ci0gIHJlY2VpdmVfc210cF9idWZmZXJlZCA9
IHNtdHBfYnVmZmVyZWQ7CiAgIH0KIAogZ251dGxzX2RlaW5pdChzdGF0ZS0+c2Vzc2lvbik7Ci1n
bnV0bHNfY2VydGlmaWNhdGVfZnJlZV9jcmVkZW50aWFscyhzdGF0ZS0+eDUwOV9jcmVkKTsKLQog
dGxzcC0+YWN0aXZlLnNvY2sgPSAtMTsKIHRsc3AtPmFjdGl2ZS50bHNfY3R4ID0gTlVMTDsKIC8q
IExlYXZlIGJpdHMsIHBlZXJjZXJ0LCBjaXBoZXIsIHBlZXJkbiwgY2VydGlmaWNhdGVfdmVyaWZp
ZWQgc2V0LCBmb3IgbG9nZ2luZyAqLwpAQCAtMzE0NCw3ICszNzg5LDYgQEAKIAogCiBpZiAoc3Rh
dGUtPnhmZXJfYnVmZmVyKSBzdG9yZV9mcmVlKHN0YXRlLT54ZmVyX2J1ZmZlcik7Ci1tZW1jcHko
c3RhdGUsICZleGltX2dudXRsc19zdGF0ZV9pbml0LCBzaXplb2YoZXhpbV9nbnV0bHNfc3RhdGVf
aW5pdCkpOwogfQogCiAKQEAgLTMyNDIsNiArMzg4NiwxMyBAQAogcmV0dXJuIHN0YXRlLT54ZmVy
X2J1ZmZlcltzdGF0ZS0+eGZlcl9idWZmZXJfbHdtKytdOwogfQogCitCT09MCit0bHNfaGFzYyh2
b2lkKQoreworZXhpbV9nbnV0bHNfc3RhdGVfc3QgKiBzdGF0ZSA9ICZzdGF0ZV9zZXJ2ZXI7City
ZXR1cm4gc3RhdGUtPnhmZXJfYnVmZmVyX2x3bSA8IHN0YXRlLT54ZmVyX2J1ZmZlcl9od207Cit9
CisKIHVzY2hhciAqCiB0bHNfZ2V0YnVmKHVuc2lnbmVkICogbGVuKQogewpAQCAtMzI2NiwxMiAr
MzkxNywxNSBAQAogfQogCiAKKy8qIEdldCB1cCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVz
IGZyb20gYW55IGNhY2hlZCBkYXRhLCBhbmQgZmVlZCB0byBka2ltLiAqLwogdm9pZAotdGxzX2dl
dF9jYWNoZSgpCit0bHNfZ2V0X2NhY2hlKHVuc2lnbmVkIGxpbSkKIHsKICNpZm5kZWYgRElTQUJM
RV9ES0lNCiBleGltX2dudXRsc19zdGF0ZV9zdCAqIHN0YXRlID0gJnN0YXRlX3NlcnZlcjsKIGlu
dCBuID0gc3RhdGUtPnhmZXJfYnVmZmVyX2h3bSAtIHN0YXRlLT54ZmVyX2J1ZmZlcl9sd207Citp
ZiAobiA+IGxpbSkKKyAgbiA9IGxpbTsKIGlmIChuID4gMCkKICAgZGtpbV9leGltX3ZlcmlmeV9m
ZWVkKHN0YXRlLT54ZmVyX2J1ZmZlcitzdGF0ZS0+eGZlcl9idWZmZXJfbHdtLCBuKTsKICNlbmRp
ZgpAQCAtMzI3OSwxNSArMzkzMywxMyBAQAogCiAKIEJPT0wKLXRsc19jb3VsZF9yZWFkKHZvaWQp
Cit0bHNfY291bGRfZ2V0Yyh2b2lkKQogewogcmV0dXJuIHN0YXRlX3NlcnZlci54ZmVyX2J1ZmZl
cl9sd20gPCBzdGF0ZV9zZXJ2ZXIueGZlcl9idWZmZXJfaHdtCiAgfHwgZ251dGxzX3JlY29yZF9j
aGVja19wZW5kaW5nKHN0YXRlX3NlcnZlci5zZXNzaW9uKSA+IDA7CiB9CiAKIAotCi0KIC8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAg
IFJlYWQgYnl0ZXMgZnJvbSBUTFMgY2hhbm5lbCAgICAgICAgICAgKgogKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMzOTYsOCArNDA0OCwyNCBA
QAogCiAgIGlmIChvdXRieXRlcyA8IDApCiAgICAgewotICAgIERFQlVHKERfdGxzKSBkZWJ1Z19w
cmludGYoIiVzOiBnbnV0bHNfcmVjb3JkX3NlbmQgZXJyXG4iLCBfX0ZVTkNUSU9OX18pOwotICAg
IHJlY29yZF9pb19lcnJvcihzdGF0ZSwgb3V0Ynl0ZXMsIFVTInNlbmQiLCBOVUxMKTsKKyNpZmRl
ZiBHTlVUTFNfRV9QUkVNQVRVUkVfVEVSTUlOQVRJT04KKyAgICBpZiAoICBvdXRieXRlcyA9PSBH
TlVUTFNfRV9QUkVNQVRVUkVfVEVSTUlOQVRJT04gJiYgZXJybm8gPT0gRUNPTk5SRVNFVAorICAg
ICAgICYmICFjdF9jdHggJiYgZi5zbXRwX2luX3F1aXQKKyAgICAgICApCisgICAgICB7CQkJCQkv
KiBPdXRsb29rLCBkYW1taXQgKi8KKyAgICAgIGlmIChMT0dHSU5HKHByb3RvY29sX2RldGFpbCkp
CisJbG9nX3dyaXRlKDAsIExPR19NQUlOLCAiWyVzXSBhZnRlciBRVUlULCBjbGllbnQgcmVzZXQg
VENQIGJlZm9yZSIKKwkgICIgU01UUCByZXNwb25zZSBhbmQgVExTIGNsb3NlXG4iLCBzZW5kZXJf
aG9zdF9hZGRyZXNzKTsKKyAgICAgIGVsc2UKKwlERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJb
JXNdIFNTTF93cml0ZTogYWZ0ZXIgUVVJVCwiCisJICAiIGNsaWVudCByZXNldCBUQ1AgYmVmb3Jl
IFRMUyBjbG9zZVxuIiwgc2VuZGVyX2hvc3RfYWRkcmVzcyk7CisgICAgICB9CisgICAgZWxzZQor
I2VuZGlmCisgICAgICB7CisgICAgICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCIlczogZ251
dGxzX3JlY29yZF9zZW5kIGVyclxuIiwgX19GVU5DVElPTl9fKTsKKyAgICAgIHJlY29yZF9pb19l
cnJvcihzdGF0ZSwgb3V0Ynl0ZXMsIFVTInNlbmQiLCBOVUxMKTsKKyAgICAgIH0KICAgICByZXR1
cm4gLTE7CiAgICAgfQogICBpZiAob3V0Ynl0ZXMgPT0gMCkKQEAgLTM0ODYsNyArNDE1NCw3IEBA
CiBpID0gZ251dGxzX3JuZChHTlVUTFNfUk5EX05PTkNFLCBzbWFsbGJ1ZiwgbmVlZGVkX2xlbik7
CiBpZiAoaSA8IDApCiAgIHsKLSAgREVCVUcoRF9hbGwpIGRlYnVnX3ByaW50ZigiZ251dGxzX3Ju
ZCgpIGZhaWxlZCwgdXNpbmcgZmFsbGJhY2suXG4iKTsKKyAgREVCVUcoRF9hbGwpIGRlYnVnX3By
aW50ZigiZ251dGxzX3JuZCgpIGZhaWxlZCwgdXNpbmcgZmFsbGJhY2tcbiIpOwogICByZXR1cm4g
dmFndWVseV9yYW5kb21fbnVtYmVyX2ZhbGxiYWNrKG1heCk7CiAgIH0KIHIgPSAwOwpAQCAtMzU3
Miw3ICs0MjQwLDcgQEAKIHJjID0gZ251dGxzX3ByaW9yaXR5X2luaXQoJnByaW9yaXR5X2NhY2hl
LCBDUyBleHBjaXBoZXJzLCAmZXJycG9zKTsKIHZhbGlkYXRlX2NoZWNrX3JjKHN0cmluZ19zcHJp
bnRmKAogICAgICAgImdudXRsc19wcmlvcml0eV9pbml0KCVzKSBmYWlsZWQgYXQgb2Zmc2V0ICVs
ZCwgXCIlLjhzLi5cIiIsCi0gICAgICBleHBjaXBoZXJzLCBlcnJwb3MgLSBDUyBleHBjaXBoZXJz
LCBlcnJwb3MpKTsKKyAgICAgIGV4cGNpcGhlcnMsIChsb25nKShlcnJwb3MgLSBDUyBleHBjaXBo
ZXJzKSwgZXJycG9zKSk7CiAKICN1bmRlZiByZXR1cm5fZGVpbml0CiAjdW5kZWYgdmFsaWRhdGVf
Y2hlY2tfcmMKQEAgLTM1OTIsMTcgKzQyNjAsMTggQEAKIAogLyogU2VlIGEgZGVzY3JpcHRpb24g
aW4gdGxzLW9wZW5zc2wuYyBmb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgZXhpc3RzLgog
Ci1Bcmd1bWVudHM6ICAgYSBGSUxFKiB0byBwcmludCB0aGUgcmVzdWx0cyB0bwotUmV0dXJuczog
ICAgIG5vdGhpbmcKK0FyZ3VtZW50czogICBzdHJpbmcgdG8gYXBwZW5kIHRvCitSZXR1cm5zOiAg
ICAgc3RyaW5nCiAqLwogCi12b2lkCi10bHNfdmVyc2lvbl9yZXBvcnQoRklMRSAqZikKK2dzdHJp
bmcgKgordGxzX3ZlcnNpb25fcmVwb3J0KGdzdHJpbmcgKiBnKQogewotZnByaW50ZihmLCAiTGli
cmFyeSB2ZXJzaW9uOiBHbnVUTFM6IENvbXBpbGU6ICVzXG4iCi0gICAgICAgICAgICIgICAgICAg
ICAgICAgICAgICAgICAgICAgUnVudGltZTogJXNcbiIsCi0gICAgICAgICAgIExJQkdOVVRMU19W
RVJTSU9OLAotICAgICAgICAgICBnbnV0bHNfY2hlY2tfdmVyc2lvbihOVUxMKSk7CityZXR1cm4g
c3RyaW5nX2ZtdF9hcHBlbmQoZywKKyAgICAiTGlicmFyeSB2ZXJzaW9uOiBHbnVUTFM6IENvbXBp
bGU6ICVzXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lOiAlc1xuIiwK
KwkgICAgIExJQkdOVVRMU19WRVJTSU9OLAorCSAgICAgZ251dGxzX2NoZWNrX3ZlcnNpb24oTlVM
TCkpOwogfQogCiAjZW5kaWYJLyohTUFDUk9fUFJFREVGKi8KZGlmZiAtdXIgZXhpbS5vcmlnL3Ny
Yy90bHMtb3BlbnNzbC5jIGV4aW0vc3JjL3Rscy1vcGVuc3NsLmMKLS0tIGV4aW0ub3JpZy9zcmMv
dGxzLW9wZW5zc2wuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhp
bS9zcmMvdGxzLW9wZW5zc2wuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApA
QCAtMiw4ICsyLDggQEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBh
Z2VudCAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwogCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgLSAyMDIy
ICovCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE5
ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjAgKi8KIC8qIFNl
ZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24u
ICovCiAKIC8qIFBvcnRpb25zIENvcHlyaWdodCAoYykgVGhlIE9wZW5TU0wgUHJvamVjdCAxOTk5
ICovCkBAIC04MCw2ICs4MCw3IEBACiAjICBpZm5kZWYgRElTQUJMRV9PQ1NQCiAjICAgZGVmaW5l
IEVYSU1fSEFWRV9PQ1NQCiAjICBlbmRpZgorIyAgZGVmaW5lIEVYSU1fSEFWRV9BTFBOIC8qIGZh
aWwgcmV0IGZyb20gaHNoYWtlLWNiIGlzIGlnbm9yZWQgYnkgTGlicmVTU0wgKi8KICMgZWxzZQog
IyAgZGVmaW5lIEVYSU1fTkVFRF9PUEVOU1NMX0lOSVQKICMgZW5kaWYKQEAgLTg5LDYgKzkwLDEw
IEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2lmIExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4
MzA0MDAwMGZMCisjIGRlZmluZSBFWElNX0hBVkVfT1BFTlNTTF9DSVBIRVJfR0VUX0lECisjZW5k
aWYKKwogI2lmICFkZWZpbmVkKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSKSBcCiAgICAgfHwgTElC
UkVTU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgyMDAxMDAwMEwKICMgaWYgIWRlZmluZWQoT1BFTlNT
TF9OT19FQ0RIKQpAQCAtMTE2LDcgKzEyMSw3IEBACiAjIGRlZmluZSBESVNBQkxFX09DU1AKICNl
bmRpZgogCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUKKyNpZm5kZWYgRElTQUJMRV9U
TFNfUkVTVU1FCiAjIGlmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDAxMDEwMTBMCiAjICBl
cnJvciBPcGVuU1NMIHZlcnNpb24gdG9vIG9sZCBmb3Igc2Vzc2lvbi1yZXN1bXB0aW9uCiAjIGVu
ZGlmCkBAIC0yMjcsMTIgKzIzMiwxNiBAQAogICB7IFVTIm5vX3Rsc3YxIiwgU1NMX09QX05PX1RM
U3YxIH0sCiAjZW5kaWYKICNpZmRlZiBTU0xfT1BfTk9fVExTdjFfMQotI2lmIFNTTF9PUF9OT19U
TFN2MV8xID09IDB4MDAwMDA0MDBMCisjIGlmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDMw
MDAwMDAwTAorIyAgaWYgU1NMX09QX05PX1RMU3YxXzEgPT0gMHgwMDAwMDQwMEwKICAgLyogRXJy
b3IgaW4gY2hvc2VuIHZhbHVlIGluIDEuMC4xYTsgc2VlIGZpcnN0IGl0ZW0gaW4gQ0hBTkdFUyBm
b3IgMS4wLjFiICovCi0jd2FybmluZyBPcGVuU1NMIDEuMC4xYSB1c2VzIGEgYmFkIHZhbHVlIGZv
ciBTU0xfT1BfTk9fVExTdjFfMSwgaWdub3JpbmcKLSNlbHNlCisjICAgd2FybmluZyBPcGVuU1NM
IDEuMC4xYSB1c2VzIGEgYmFkIHZhbHVlIGZvciBTU0xfT1BfTk9fVExTdjFfMSwgaWdub3JpbmcK
KyMgICBkZWZpbmUgTk9fU1NMX09QX05PX1RMU3YxXzEKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlm
bmRlZiBOT19TU0xfT1BfTk9fVExTdjFfMQogICB7IFVTIm5vX3Rsc3YxXzEiLCBTU0xfT1BfTk9f
VExTdjFfMSB9LAotI2VuZGlmCisjIGVuZGlmCiAjZW5kaWYKICNpZmRlZiBTU0xfT1BfTk9fVExT
djFfMgogICB7IFVTIm5vX3Rsc3YxXzIiLCBTU0xfT1BfTk9fVExTdjFfMiB9LApAQCAtMjc0LDYg
KzI4Myw3IEBACiAKICNpZm5kZWYgTUFDUk9fUFJFREVGCiBzdGF0aWMgaW50IGV4aW1fb3BlbnNz
bF9vcHRpb25zX3NpemUgPSBuZWxlbShleGltX29wZW5zc2xfb3B0aW9ucyk7CitzdGF0aWMgbG9u
ZyBpbml0X29wdGlvbnMgPSAwOwogI2VuZGlmCiAKICNpZmRlZiBNQUNST19QUkVERUYKQEAgLTI5
Miw3ICszMDIsNyBAQAogICBidWlsdGluX21hY3JvX2NyZWF0ZShidWYpOwogICB9CiAKLSMgaWZk
ZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUKKyMgaWZuZGVmIERJU0FCTEVfVExTX1JFU1VNRQog
YnVpbHRpbl9tYWNyb19jcmVhdGVfdmFyKFVTIl9SRVNVTUVfREVDT0RFIiwgUkVTVU1FX0RFQ09E
RV9TVFJJTkcgKTsKICMgZW5kaWYKICMgaWZkZWYgU1NMX09QX05PX1RMU3YxXzMKQEAgLTMwNSw2
ICszMTUsOSBAQAogYnVpbHRpbl9tYWNyb19jcmVhdGUoVVMiX0hBVkVfVExTX09DU1AiKTsKIGJ1
aWx0aW5fbWFjcm9fY3JlYXRlKFVTIl9IQVZFX1RMU19PQ1NQX0xJU1QiKTsKICMgZW5kaWYKKyMg
aWZkZWYgRVhJTV9IQVZFX0FMUE4KK2J1aWx0aW5fbWFjcm9fY3JlYXRlKFVTIl9IQVZFX1RMU19B
TFBOIik7CisjIGVuZGlmCiB9CiAjZWxzZQogCkBAIC0zNTAsMTIgKzM2MywxNiBAQAogICBnc3Ry
aW5nICoJY29ya2VkOwogfSBleGltX29wZW5zc2xfY2xpZW50X3Rsc19jdHg7CiAKLXN0YXRpYyBT
U0xfQ1RYICpzZXJ2ZXJfY3R4ID0gTlVMTDsKLXN0YXRpYyBTU0wgICAgICpzZXJ2ZXJfc3NsID0g
TlVMTDsKKworLyogc3RhdGljIFNTTF9DVFggKnNlcnZlcl9jdHggPSBOVUxMOyAqLworLyogc3Rh
dGljIFNTTCAgICAgKnNlcnZlcl9zc2wgPSBOVUxMOyAqLwogCiAjaWZkZWYgRVhJTV9IQVZFX09Q
RU5TU0xfVExTRVhUCiBzdGF0aWMgU1NMX0NUWCAqc2VydmVyX3NuaSA9IE5VTEw7CiAjZW5kaWYK
KyNpZmRlZiBFWElNX0hBVkVfQUxQTgorc3RhdGljIEJPT0wgc2VydmVyX3NlZW5fYWxwbiA9IEZB
TFNFOworI2VuZGlmCiAKIHN0YXRpYyBjaGFyIHNzbF9lcnJzdHJpbmdbMjU2XTsKIApAQCAtMzcx
LDcgKzM4OCwxMSBAQAogICBPQ1NQX1JFU1BPTlNFICoJcmVzcDsKIH0gb2NzcF9yZXNwbGlzdDsK
IAotdHlwZWRlZiBzdHJ1Y3QgdGxzX2V4dF9jdHhfY2IgewordHlwZWRlZiBzdHJ1Y3QgZXhpbV9v
cGVuc3NsX3N0YXRlIHsKKyAgZXhpbV90bHNsaWJfc3RhdGUJbGliX3N0YXRlOworI2RlZmluZSBs
aWJfY3R4CQkJbGliZGF0YTAKKyNkZWZpbmUgbGliX3NzbAkJCWxpYmRhdGExCisKICAgdGxzX3N1
cHBvcnQgKgl0bHNwOwogICB1c2NoYXIgKgljZXJ0aWZpY2F0ZTsKICAgdXNjaGFyICoJcHJpdmF0
ZWtleTsKQEAgLTM5OSwyMiArNDIwLDE5IEBACiAjaWZuZGVmIERJU0FCTEVfRVZFTlQKICAgdXNj
aGFyICoJZXZlbnRfYWN0aW9uOwogI2VuZGlmCi19IHRsc19leHRfY3R4X2NiOworfSBleGltX29w
ZW5zc2xfc3RhdGVfc3Q7CiAKIC8qIHNob3VsZCBmaWd1cmUgb3V0IGEgY2xlYW51cCBvZiBBUEkg
dG8gaGFuZGxlIHN0YXRlIHByZXNlcnZlZCBwZXIKIGltcGxlbWVudGF0aW9uLCBmb3IgdmFyaW91
cyByZWFzb25zLCB3aGljaCBjYW4gYmUgdm9pZCAqIGluIHRoZSBBUElzLgogRm9yIG5vdywgd2Ug
aGFjayBhcm91bmQgaXQuICovCi10bHNfZXh0X2N0eF9jYiAqY2xpZW50X3N0YXRpY19jYmluZm8g
PSBOVUxMOwkvKlhYWCBzaG91bGQgbm90IHVzZSBzdGF0aWM7IG11bHRpcGxlIGNvbmN1cnJlbnQg
Y2xpZW50cyEgKi8KLXRsc19leHRfY3R4X2NiICpzZXJ2ZXJfc3RhdGljX2NiaW5mbyA9IE5VTEw7
CitleGltX29wZW5zc2xfc3RhdGVfc3QgKmNsaWVudF9zdGF0aWNfc3RhdGUgPSBOVUxMOwkvKlhY
WCBzaG91bGQgbm90IHVzZSBzdGF0aWM7IG11bHRpcGxlIGNvbmN1cnJlbnQgY2xpZW50cyEgKi8K
K2V4aW1fb3BlbnNzbF9zdGF0ZV9zdCBzdGF0ZV9zZXJ2ZXIgPSB7LmlzX3NlcnZlciA9IFRSVUV9
OwogCiBzdGF0aWMgaW50Ci1zZXR1cF9jZXJ0cyhTU0xfQ1RYICpzY3R4LCB1c2NoYXIgKmNlcnRz
LCB1c2NoYXIgKmNybCwgaG9zdF9pdGVtICpob3N0LCBCT09MIG9wdGlvbmFsLAotICAgIGludCAo
KmNlcnRfdmZ5X2NiKShpbnQsIFg1MDlfU1RPUkVfQ1RYICopLCB1c2NoYXIgKiogZXJyc3RyICk7
CitzZXR1cF9jZXJ0cyhTU0xfQ1RYICpzY3R4LCB1c2NoYXIgKmNlcnRzLCB1c2NoYXIgKmNybCwg
aG9zdF9pdGVtICpob3N0LAorICAgIHVzY2hhciAqKiBlcnJzdHIgKTsKIAogLyogQ2FsbGJhY2tz
ICovCi0jaWZkZWYgRVhJTV9IQVZFX09QRU5TU0xfVExTRVhUCi1zdGF0aWMgaW50IHRsc19zZXJ2
ZXJuYW1lX2NiKFNTTCAqcywgaW50ICphZCBBUkdfVU5VU0VELCB2b2lkICphcmcpOwotI2VuZGlm
CiAjaWZuZGVmIERJU0FCTEVfT0NTUAogc3RhdGljIGludCB0bHNfc2VydmVyX3N0YXBsaW5nX2Ni
KFNTTCAqcywgdm9pZCAqYXJnKTsKICNlbmRpZgpAQCAtNDIyLDE4ICs0NDAsMjUgQEAKIAogCiAv
KiBEYWVtb24tY2FsbGVkLCBiZWZvcmUgZXZlcnkgY29ubmVjdGlvbiwga2V5IGNyZWF0ZS9yb3Rh
dGUgKi8KLSNpZmRlZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQorI2lmbmRlZiBESVNBQkxFX1RM
U19SRVNVTUUKIHN0YXRpYyB2b2lkIHRrX2luaXQodm9pZCk7CiBzdGF0aWMgaW50IHRsc19leGRh
dGFfaWR4ID0gLTE7CiAjZW5kaWYKIAotdm9pZAotdGxzX2RhZW1vbl9pbml0KHZvaWQpCitzdGF0
aWMgdm9pZAordGxzX3Blcl9saWJfZGFlbW9uX3RpY2sodm9pZCkKIHsKLSNpZmRlZiBFWFBFUklN
RU5UQUxfVExTX1JFU1VNRQorI2lmbmRlZiBESVNBQkxFX1RMU19SRVNVTUUKIHRrX2luaXQoKTsK
ICNlbmRpZgotcmV0dXJuOworfQorCisvKiBDYWxsZWQgb25jZSBhdCBkYWVtb24gc3RhcnR1cCAq
LworCitzdGF0aWMgdm9pZAordGxzX3Blcl9saWJfZGFlbW9uX2luaXQodm9pZCkKK3sKK3Rsc19k
YWVtb25fY3JlZHNfcmVsb2FkKCk7CiB9CiAKIApAQCAtNDc1LDEwICs1MDAsMzEyIEBACiAKIAog
CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyog
R2VuZXJhbCBsaWJyYXJ5IGluaXRhbGlzYXRpb24gICAgICAgICAgICAgICAgICAgKgorKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBC
T09MCitsaWJfcmFuZF9pbml0KHZvaWQgKiBhZGRyKQoreworcmFuZHN0dWZmIHI7CitpZiAoIVJB
TkRfc3RhdHVzKCkpIHJldHVybiBUUlVFOworCitnZXR0aW1lb2ZkYXkoJnIudHYsIE5VTEwpOwor
ci5wID0gZ2V0cGlkKCk7CitSQU5EX3NlZWQoVVMgKCZyKSwgc2l6ZW9mKHIpKTsKK1JBTkRfc2Vl
ZChVUyBiaWdfYnVmZmVyLCBiaWdfYnVmZmVyX3NpemUpOworaWYgKGFkZHIpIFJBTkRfc2VlZChV
UyBhZGRyLCBzaXplb2YoYWRkcikpOworCityZXR1cm4gUkFORF9zdGF0dXMoKTsKK30KKworCitz
dGF0aWMgdm9pZAordGxzX29wZW5zc2xfaW5pdCh2b2lkKQoreworc3RhdGljIEJPT0wgb25jZSA9
IEZBTFNFOworaWYgKG9uY2UpIHJldHVybjsKK29uY2UgPSBUUlVFOworCisjaWZkZWYgRVhJTV9O
RUVEX09QRU5TU0xfSU5JVAorU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncygpOyAgICAgICAgICAvKiBi
YXNpYyBzZXQgdXAgKi8KK09wZW5TU0xfYWRkX3NzbF9hbGdvcml0aG1zKCk7CisjZW5kaWYKKwor
I2lmIGRlZmluZWQoRVhJTV9IQVZFX1NIQTI1NikgJiYgIWRlZmluZWQoT1BFTlNTTF9BVVRPX1NI
QTI1NikKKy8qIFNIQTI1NiBpcyBiZWNvbWluZyBldmVyIG1vcmUgcG9wdWxhci4gVGhpcyBtYWtl
cyBzdXJlIGl0IGdldHMgYWRkZWQgdG8gdGhlCitsaXN0IG9mIGF2YWlsYWJsZSBkaWdlc3RzLiAq
LworRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKKyNlbmRpZgorCisodm9pZCkgbGliX3Jh
bmRfaW5pdChOVUxMKTsKKyh2b2lkKSB0bHNfb3BlbnNzbF9vcHRpb25zX3BhcnNlKG9wZW5zc2xf
b3B0aW9ucywgJmluaXRfb3B0aW9ucyk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICBJbml0aWFsaXpl
IGZvciBESCAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisKKy8qIElmIGRocGFyYW0gaXMgc2V0LCBleHBhbmQgaXQsIGFu
ZCBsb2FkIHVwIHRoZSBwYXJhbWV0ZXJzIGZvciBESCBlbmNyeXB0aW9uLgorU2VydmVyIG9ubHku
CisKK0FyZ3VtZW50czoKKyAgc2N0eCAgICAgIFRoZSBjdXJyZW50IFNTTCBDVFggKGluYm91bmQg
b3Igb3V0Ym91bmQpCisgIGRocGFyYW0gICBESCBwYXJhbWV0ZXIgZmlsZSBvciBmaXhlZCBwYXJh
bWV0ZXIgaWRlbnRpdHkgc3RyaW5nCisgIGVycnN0ciAgICBlcnJvciBzdHJpbmcgcG9pbnRlcgor
CitSZXR1cm5zOiAgICBUUlVFIGlmIE9LIChub3RoaW5nIHRvIHNldCB1cCwgb3Igc2V0dXAgd29y
a2VkKQorKi8KKworc3RhdGljIEJPT0wKK2luaXRfZGgoU1NMX0NUWCAqIHNjdHgsIHVzY2hhciAq
IGRocGFyYW0sIHVzY2hhciAqKiBlcnJzdHIpCit7CitCSU8gKiBiaW87CisjaWYgT1BFTlNTTF9W
RVJTSU9OX05VTUJFUiA8IDB4MzAwMDAwMDBMCitESCAqIGRoOworI2Vsc2UKK0VWUF9QS0VZICog
cGtleTsKKyNlbmRpZgordXNjaGFyICogZGhleHBhbmRlZDsKK2NvbnN0IGNoYXIgKiBwZW07Citp
bnQgZGhfYml0c2l6ZTsKKworaWYgKCFleHBhbmRfY2hlY2soZGhwYXJhbSwgVVMidGxzX2RocGFy
YW0iLCAmZGhleHBhbmRlZCwgZXJyc3RyKSkKKyAgcmV0dXJuIEZBTFNFOworCitpZiAoIWRoZXhw
YW5kZWQgfHwgISpkaGV4cGFuZGVkKQorICBiaW8gPSBCSU9fbmV3X21lbV9idWYoQ1Mgc3RkX2Ro
X3ByaW1lX2RlZmF1bHQoKSwgLTEpOworZWxzZSBpZiAoZGhleHBhbmRlZFswXSA9PSAnLycpCisg
IHsKKyAgaWYgKCEoYmlvID0gQklPX25ld19maWxlKENTIGRoZXhwYW5kZWQsICJyIikpKQorICAg
IHsKKyAgICB0bHNfZXJyb3Ioc3RyaW5nX3NwcmludGYoImNvdWxkIG5vdCByZWFkIGRocGFyYW1z
IGZpbGUgJXMiLCBkaGV4cGFuZGVkKSwKKyAgICAgICAgICBOVUxMLCBVUyBzdHJlcnJvcihlcnJu
byksIGVycnN0cik7CisgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgfQorZWxzZQorICB7Cisg
IGlmIChVc3RyY21wKGRoZXhwYW5kZWQsICJub25lIikgPT0gMCkKKyAgICB7CisgICAgREVCVUco
RF90bHMpIGRlYnVnX3ByaW50ZigiUmVxdWVzdGVkIG5vIERIIHBhcmFtZXRlcnMuXG4iKTsKKyAg
ICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgaWYgKCEocGVtID0gc3RkX2RoX3ByaW1lX25hbWVk
KGRoZXhwYW5kZWQpKSkKKyAgICB7CisgICAgdGxzX2Vycm9yKHN0cmluZ19zcHJpbnRmKCJVbmtu
b3duIHN0YW5kYXJkIERIIHByaW1lIFwiJXNcIiIsIGRoZXhwYW5kZWQpLAorICAgICAgICBOVUxM
LCBVUyBzdHJlcnJvcihlcnJubyksIGVycnN0cik7CisgICAgcmV0dXJuIEZBTFNFOworICAgIH0K
KyAgYmlvID0gQklPX25ld19tZW1fYnVmKENTIHBlbSwgLTEpOworICB9CisKK2lmICghKAorI2lm
IE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDMwMDAwMDAwTAorICAgICAgZGggPSBQRU1fcmVh
ZF9iaW9fREhwYXJhbXMoYmlvLCBOVUxMLCBOVUxMLCBOVUxMKQorI2Vsc2UKKyAgICAgIHBrZXkg
PSBQRU1fcmVhZF9iaW9fUGFyYW1ldGVyc19leChiaW8sIE5VTEwsIE5VTEwsIE5VTEwpCisjZW5k
aWYKKyAgICkgKQorICB7CisgIEJJT19mcmVlKGJpbyk7CisgIHRsc19lcnJvcihzdHJpbmdfc3By
aW50ZigiQ291bGQgbm90IHJlYWQgdGxzX2RocGFyYW1zIFwiJXNcIiIsIGRoZXhwYW5kZWQpLAor
ICAgICAgTlVMTCwgTlVMTCwgZXJyc3RyKTsKKyAgcmV0dXJuIEZBTFNFOworICB9CisKKy8qIG5v
dGU6IG91ciBkZWZhdWx0IGxpbWl0IG9mIDIyMzYgaXMgbm90IGEgbXVsdGlwbGUgb2YgODsgdGhl
IGxpbWl0IGNvbWVzIGZyb20KK2FuIE5TUyBsaW1pdCwgYW5kIHRoZSBHbnVUTFMgQVBJcyBoYW5k
bGUgYml0LXNpemVzIGZpbmUsIHNvIHdlIHdlbnQgd2l0aCAyMjM2LgorQnV0IG9sZGVyIE9wZW5T
U0wgY2FuIG9ubHkgcmVwb3J0IGluIGJ5dGVzIChvY3RldHMpLCBub3QgYml0cy4gIElmIHNvbWVv
bmUgd2FudHMKK3RvIGRhbmNlIGF0IHRoZSBlZGdlLCB0aGVuIHRoZXkgY2FuIHJhaXNlIHRoZSBs
aW1pdCBvciB1c2UgY3VycmVudCBsaWJyYXJpZXMuICovCisKKyNpZiBPUEVOU1NMX1ZFUlNJT05f
TlVNQkVSIDwgMHgzMDAwMDAwMEwKKyMgaWZkZWYgRVhJTV9IQVZFX09QRU5TU0xfREhfQklUUwor
LyogQWRkZWQgaW4gY29tbWl0IDI2Yzc5ZDU2NDFkOyBgZ2l0IGRlc2NyaWJlIC0tY29udGFpbnNg
IHNheXMgT3BlblNTTF8xXzFfMC1wcmUxfjEwMjIKK1RoaXMgcHJlZGF0ZXMgT3BlblNTTF8xXzFf
MCAoYmVmb3JlIGEsIGIsIC4uLikgc28gaXMgaW4gYWxsIDEuMS4wICovCitkaF9iaXRzaXplID0g
REhfYml0cyhkaCk7CisjIGVsc2UKK2RoX2JpdHNpemUgPSA4ICogREhfc2l6ZShkaCk7CisjIGVu
ZGlmCisjZWxzZQkvKiAzLjAuMCArICovCitkaF9iaXRzaXplID0gRVZQX1BLRVlfZ2V0X2JpdHMo
cGtleSk7CisjZW5kaWYKKworLyogRXZlbiBpZiBpdCBpcyBsYXJnZXIsIHdlIHNpbGVudGx5IHJl
dHVybiBzdWNjZXNzIHJhdGhlciB0aGFuIGNhdXNlIHRoaW5ncyB0bworZmFpbCBvdXQsIHNvIHRo
YXQgYSB0b28tbGFyZ2UgREggd2lsbCBub3Qga25vY2sgb3V0IGFsbCBUTFM7IGl0J3MgYSBkZWJh
dGFibGUKK2Nob2ljZS4gIExpa2V3aXNlIGZvciBhIGZhaWxpbmcgYXR0ZW1wdCB0byBzZXQgb25l
LiAqLworCitpZiAoZGhfYml0c2l6ZSA8PSB0bHNfZGhfbWF4X2JpdHMpCisgIHsKKyAgaWYgKAor
I2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDMwMDAwMDAwTAorICAgICAgU1NMX0NUWF9z
ZXRfdG1wX2RoKHNjdHgsIGRoKQorI2Vsc2UKKyAgICAgIFNTTF9DVFhfc2V0MF90bXBfZGhfcGtl
eShzY3R4LCBwa2V5KQorI2VuZGlmCisgICAgICA9PSAwKQorICAgIHsKKyAgICBFUlJfZXJyb3Jf
c3RyaW5nX24oRVJSX2dldF9lcnJvcigpLCBzc2xfZXJyc3RyaW5nLCBzaXplb2Yoc3NsX2VycnN0
cmluZykpOworICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0dfUEFOSUMsICJUTFMgZXJyb3Ig
KEQtSCBwYXJhbSBzZXR0aW5nICclcycpOiAlcyIsCisJZGhleHBhbmRlZCA/IGRoZXhwYW5kZWQg
OiBVUyJkZWZhdWx0Iiwgc3NsX2VycnN0cmluZyk7CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJF
UiA+PSAweDMwMDAwMDAwTAorICAgIC8qIEVWUF9QS0VZX2ZyZWUocGtleSk7ICBjcmFzaGVzICov
CisjZW5kaWYKKyAgICB9CisgIGVsc2UKKyAgICBERUJVRyhEX3RscykKKyAgICAgIGRlYnVnX3By
aW50ZigiRGlmZmllLUhlbGxtYW4gaW5pdGlhbGl6ZWQgZnJvbSAlcyB3aXRoICVkLWJpdCBwcmlt
ZVxuIiwKKwlkaGV4cGFuZGVkID8gZGhleHBhbmRlZCA6IFVTImRlZmF1bHQiLCBkaF9iaXRzaXpl
KTsKKyAgfQorZWxzZQorICBERUJVRyhEX3RscykKKyAgICBkZWJ1Z19wcmludGYoImRocGFyYW1z
ICclcycgJWQgYml0cywgaXMgPiB0bHNfZGhfbWF4X2JpdHMgbGltaXQgb2YgJWRcbiIsCisJZGhl
eHBhbmRlZCA/IGRoZXhwYW5kZWQgOiBVUyJkZWZhdWx0IiwgZGhfYml0c2l6ZSwgdGxzX2RoX21h
eF9iaXRzKTsKKworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDMwMDAwMDAwTAorREhf
ZnJlZShkaCk7CisjZW5kaWYKKy8qIFRoZSBFVlBfUEtFWSBvd25lcnNoaXAgc3RheXMgd2l0aCB0
aGUgY3R4OyBkbyBub3QgZnJlZSBpdCAqLworCitCSU9fZnJlZShiaW8pOworcmV0dXJuIFRSVUU7
Cit9CisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCisqICAgICAgICAgICAgICAgSW5pdGlhbGl6ZSBmb3IgRUNESCAgICAgICAgICAgICAg
KgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwor
LyogTG9hZCBwYXJhbWV0ZXJzIGZvciBFQ0RIIGVuY3J5cHRpb24uICBTZXJ2ZXIgb25seS4KKwor
Rm9yIG5vdywgd2Ugc3RpY2sgdG8gTklTVCBQLTI1NiBiZWNhdXNlOiBpdCdzIHNpbXBsZSBhbmQg
ZWFzeSB0byBjb25maWd1cmU7CitpdCBhdm9pZHMgYW55IHBhdGVudCBpc3N1ZXMgdGhhdCBtaWdo
dCBiaXRlIHJlZGlzdHJpYnV0b3JzOyBkZXNwaXRlIGV2ZW50cyBpbgordGhlIG5ld3MgYW5kIGNv
bmNlcm5zIG92ZXIgY3VydmUgY2hvaWNlcywgd2UncmUgbm90IGNyeXB0b2dyYXBoZXJzLCB3ZSdy
ZSBub3QKK3ByZXRlbmRpbmcgdG8gYmUsIGFuZCB0aGlzIGlzICJnb29kIGVub3VnaCIgdG8gYmUg
YmV0dGVyIHRoYW4gbm8gc3VwcG9ydCwKK3Byb3RlY3RpbmcgYWdhaW5zdCBtb3N0IGFkdmVyc2Fy
aWVzLiAgR2l2ZW4gYW5vdGhlciB5ZWFyIG9yIHR3bywgdGhlcmUgbWlnaHQKK2JlIHN1ZmZpY2ll
bnQgY2xhcml0eSBhYm91dCBhICJyaWdodCIgd2F5IGZvcndhcmQgdG8gbGV0IHVzIG1ha2UgYW4g
aW5mb3JtZWQKK2RlY2lzaW9uLCBpbnN0ZWFkIG9mIGEga25lZS1qZXJrIHJlYWN0aW9uLgorCitM
b25nZXItdGVybSwgd2Ugc2hvdWxkIGxvb2sgYXQgc3VwcG9ydGluZyBib3RoIHZhcmlvdXMgbmFt
ZWQgY3VydmVzIGFuZAorZXh0ZXJuYWwgZmlsZXMgZ2VuZXJhdGVkIHdpdGggIm9wZW5zc2wgZWNw
YXJhbSIsIG11Y2ggYXMgd2UgZG8gZm9yIGluaXRfZGgoKS4KK1dlIHNob3VsZCBhbHNvIHN1cHBv
cnQgIm5vbmUiIGFzIGEgdmFsdWUsIHRvIGV4cGxpY2l0bHkgYXZvaWQgaW5pdGlhbGlzYXRpb24u
CisKK1BhdGNoZXMgd2VsY29tZS4KKworQXJndW1lbnRzOgorICBzY3R4ICAgICAgVGhlIGN1cnJl
bnQgU1NMIENUWCAoaW5ib3VuZCBvciBvdXRib3VuZCkKKyAgZXJyc3RyICAgIGVycm9yIHN0cmlu
ZyBwb2ludGVyCisKK1JldHVybnM6ICAgIFRSVUUgaWYgT0sgKG5vdGhpbmcgdG8gc2V0IHVwLCBv
ciBzZXR1cCB3b3JrZWQpCisqLworCitzdGF0aWMgQk9PTAoraW5pdF9lY2RoKFNTTF9DVFggKiBz
Y3R4LCB1c2NoYXIgKiogZXJyc3RyKQoreworI2lmZGVmIE9QRU5TU0xfTk9fRUNESAorcmV0dXJu
IFRSVUU7CisjZWxzZQorCit1c2NoYXIgKiBleHBfY3VydmU7CitpbnQgbmlkOworQk9PTCBydjsK
KworIyBpZm5kZWYgRVhJTV9IQVZFX0VDREgKK0RFQlVHKERfdGxzKQorICBkZWJ1Z19wcmludGYo
Ik5vIE9wZW5TU0wgQVBJIHRvIGRlZmluZSBFQ0RIIHBhcmFtZXRlcnMsIHNraXBwaW5nXG4iKTsK
K3JldHVybiBUUlVFOworIyBlbHNlCisKK2lmICghZXhwYW5kX2NoZWNrKHRsc19lY2N1cnZlLCBV
UyJ0bHNfZWNjdXJ2ZSIsICZleHBfY3VydmUsIGVycnN0cikpCisgIHJldHVybiBGQUxTRTsKK2lm
ICghZXhwX2N1cnZlIHx8ICEqZXhwX2N1cnZlKQorICByZXR1cm4gVFJVRTsKKworLyogImF1dG8i
IG5lZWRzIHRvIGJlIGhhbmRsZWQgY2FyZWZ1bGx5LgorICogT3BlblNTTCA8ICAxLjAuMjogd2Ug
ZG8gbm90IHNlbGVjdCBhbnl0aGluZywgYnV0IGZhbGxiYWNrIHRvIHByaW1lMjU2djEKKyAqIE9w
ZW5TU0wgPCAgMS4xLjA6IHdlIGhhdmUgdG8gY2FsbCBTU0xfQ1RYX3NldF9lY2RoX2F1dG8KKyAq
ICAgICAgICAgICAgICAgICAgIChvcGVuc3NsL3NzbC5oIGRlZmluZXMgU1NMX0NUUkxfU0VUX0VD
REhfQVVUTykKKyAqIE9wZW5TU0wgPj0gMS4xLjA6IHdlIGRvIG5vdCBzZXQgYW55dGhpbmcsIHRo
ZSBsaWJyYXkgZG9lcyBhdXRvc2VsZWN0aW9uCisgKiAgICAgICAgICAgICAgICAgICBodHRwczov
L2dpdGh1Yi5jb20vb3BlbnNzbC9vcGVuc3NsL2NvbW1pdC9mZTZlZjI0NzJkYjkzM2YwMWI1OWNh
ZDgyYWE5MjU3MzY5MzU5ODRiCisgKi8KK2lmIChVc3RyY21wKGV4cF9jdXJ2ZSwgImF1dG8iKSA9
PSAwKQorICB7CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAwMDIwMDBMCisgIERF
QlVHKERfdGxzKSBkZWJ1Z19wcmludGYoCisgICAgIkVDREggT3BlblNTTCA8IDEuMC4yOiB0ZW1w
IGtleSBwYXJhbWV0ZXIgc2V0dGluZ3M6IG92ZXJyaWRpbmcgXCJhdXRvXCIgd2l0aCBcInByaW1l
MjU2djFcIlxuIik7CisgIGV4cF9jdXJ2ZSA9IFVTInByaW1lMjU2djEiOworI2Vsc2UKKyMgaWYg
ZGVmaW5lZCBTU0xfQ1RSTF9TRVRfRUNESF9BVVRPCisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmlu
dGYoCisgICAgIkVDREggT3BlblNTTCAxLjAuMis6IHRlbXAga2V5IHBhcmFtZXRlciBzZXR0aW5n
czogYXV0b3NlbGVjdGlvblxuIik7CisgIFNTTF9DVFhfc2V0X2VjZGhfYXV0byhzY3R4LCAxKTsK
KyAgcmV0dXJuIFRSVUU7CisjIGVsc2UKKyAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigKKyAg
ICAiRUNESCBPcGVuU1NMIDEuMS4wKzogdGVtcCBrZXkgcGFyYW1ldGVyIHNldHRpbmdzOiBkZWZh
dWx0IHNlbGVjdGlvblxuIik7CisgIHJldHVybiBUUlVFOworIyBlbmRpZgorI2VuZGlmCisgIH0K
KworREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiRUNESDogY3VydmUgJyVzJ1xuIiwgZXhwX2N1
cnZlKTsKK2lmICggIChuaWQgPSBPQkpfc24ybmlkICAgICAgIChDQ1MgZXhwX2N1cnZlKSkgPT0g
TklEX3VuZGVmCisjICAgaWZkZWYgRVhJTV9IQVZFX09QRU5TU0xfRUNfTklTVDJOSUQKKyAgICYm
IChuaWQgPSBFQ19jdXJ2ZV9uaXN0Mm5pZChDQ1MgZXhwX2N1cnZlKSkgPT0gTklEX3VuZGVmCisj
ICAgZW5kaWYKKyAgICkKKyAgeworICB0bHNfZXJyb3Ioc3RyaW5nX3NwcmludGYoIlVua25vd24g
Y3VydmUgbmFtZSB0bHNfZWNjdXJ2ZSAnJXMnIiwgZXhwX2N1cnZlKSwKKyAgICBOVUxMLCBOVUxM
LCBlcnJzdHIpOworICByZXR1cm4gRkFMU0U7CisgIH0KKworIyBpZiBPUEVOU1NMX1ZFUlNJT05f
TlVNQkVSIDwgMHgzMDAwMDAwMEwKKyB7CisgIEVDX0tFWSAqIGVjZGg7CisgIGlmICghKGVjZGgg
PSBFQ19LRVlfbmV3X2J5X2N1cnZlX25hbWUobmlkKSkpCisgICAgeworICAgIHRsc19lcnJvcihV
UyJVbmFibGUgdG8gY3JlYXRlIGVjIGN1cnZlIiwgTlVMTCwgTlVMTCwgZXJyc3RyKTsKKyAgICBy
ZXR1cm4gRkFMU0U7CisgICAgfQorCisgIC8qIFRoZSAidG1wIiBpbiB0aGUgbmFtZSBoZXJlIHJl
ZmVycyB0byBzZXR0aW5nIGEgdGVtcG9yYXJ5IGtleQorICBub3QgdG8gdGhlIHN0YWJpbGl0eSBv
ZiB0aGUgaW50ZXJmYWNlLiAqLworCisgIGlmICgocnYgPSBTU0xfQ1RYX3NldF90bXBfZWNkaChz
Y3R4LCBlY2RoKSA9PSAwKSkKKyAgICB0bHNfZXJyb3Ioc3RyaW5nX3NwcmludGYoIkVycm9yIGVu
YWJsaW5nICclcycgY3VydmUiLCBleHBfY3VydmUpLCBOVUxMLCBOVUxMLCBlcnJzdHIpOworICBl
bHNlCisgICAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiRUNESDogZW5hYmxlZCAnJXMnIGN1
cnZlXG4iLCBleHBfY3VydmUpOworICBFQ19LRVlfZnJlZShlY2RoKTsKKyB9CisKKyNlbHNlCS8q
IHYgMy4wLjAgKyAqLworCitpZiAoKHJ2ID0gU1NMX0NUWF9zZXQxX2dyb3VwcyhzY3R4LCAmbmlk
LCAxKSkgPT0gMCkKKyAgdGxzX2Vycm9yKHN0cmluZ19zcHJpbnRmKCJFcnJvciBlbmFibGluZyAn
JXMnIGdyb3VwIiwgZXhwX2N1cnZlKSwgTlVMTCwgTlVMTCwgZXJyc3RyKTsKK2Vsc2UKKyAgREVC
VUcoRF90bHMpIGRlYnVnX3ByaW50ZigiRUNESDogZW5hYmxlZCAnJXMnIGdyb3VwXG4iLCBleHBf
Y3VydmUpOworCisjZW5kaWYKKworcmV0dXJuICFydjsKKworIyBlbmRpZgkvKkVYSU1fSEFWRV9F
Q0RIKi8KKyNlbmRpZiAvKk9QRU5TU0xfTk9fRUNESCovCit9CisKKworCiAvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICAgICAgQ2FsbGJhY2sg
dG8gZ2VuZXJhdGUgUlNBIGtleSAgICAgICAgICAgICoKKyogICAgICAgIEV4cGFuZCBrZXkgYW5k
IGNlcnQgZmlsZSBzcGVjcyAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwogCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4
MzAwMDAwMDBMCiAvKgogQXJndW1lbnRzOgogICBzICAgICAgICAgIFNTTCBjb25uZWN0aW9uIChu
b3QgdXNlZCkKQEAgLTQ5NiwxNyArODIzLDE2IEBACiBCSUdOVU0gKmJuID0gQk5fbmV3KCk7CiAj
ZW5kaWYKIAotZXhwb3J0ID0gZXhwb3J0OyAgICAgLyogU2h1dCBwaWNreSBjb21waWxlcnMgdXAg
Ki8KIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIkdlbmVyYXRpbmcgJWQgYml0IFJTQSBrZXku
Li5cbiIsIGtleWxlbmd0aCk7CiAKLSNpZmRlZiBFWElNX0hBVkVfUlNBX0dFTktFWV9FWAorIyBp
ZmRlZiBFWElNX0hBVkVfUlNBX0dFTktFWV9FWAogaWYgKCAgIUJOX3NldF93b3JkKGJuLCAodW5z
aWduZWQgbG9uZylSU0FfRjQpCiAgICB8fCAhKHJzYV9rZXkgPSBSU0FfbmV3KCkpCiAgICB8fCAh
UlNBX2dlbmVyYXRlX2tleV9leChyc2Ffa2V5LCBrZXlsZW5ndGgsIGJuLCBOVUxMKQogICAgKQot
I2Vsc2UKKyMgZWxzZQogaWYgKCEocnNhX2tleSA9IFJTQV9nZW5lcmF0ZV9rZXkoa2V5bGVuZ3Ro
LCBSU0FfRjQsIE5VTEwsIE5VTEwpKSkKLSNlbmRpZgorIyBlbmRpZgogCiAgIHsKICAgRVJSX2Vy
cm9yX3N0cmluZ19uKEVSUl9nZXRfZXJyb3IoKSwgc3NsX2VycnN0cmluZywgc2l6ZW9mKHNzbF9l
cnJzdHJpbmcpKTsKQEAgLTUxNiwzMyArODQyLDE1NSBAQAogICB9CiByZXR1cm4gcnNhX2tleTsK
IH0KKyNlbmRpZgkvKiBwcmUtMy4wLjAgKi8KIAogCiAKLS8qIEV4dHJlbWUgZGVidWcKLSNpZm5k
ZWYgRElTQUJMRV9PQ1NQCi12b2lkCi14NTA5X3N0b3JlX2R1bXBfY2VydF9zX25hbWVzKFg1MDlf
U1RPUkUgKiBzdG9yZSkKKy8qIENyZWF0ZSBhbmQgaW5zdGFsbCBhIHNlbGZzaWduZWQgY2VydGlm
aWNhdGUsIGZvciB1c2UgaW4gc2VydmVyIG1vZGUgKi8KKy8qWFhYIHdlIGNvdWxkIGFycmFuZ2Ug
dG8gY2FsbCB0aGlzIGR1cmluZyBwcmVsbyBmb3IgYSBudWxsIHRsc19jZXJ0aWZpY2F0ZSBvcHRp
b24uCitUaGUgbm9ybWFsIGNhY2hlIGludmFsICsgcmVsbyB3aWxsIHN1ZmZpY2UuCitKdXN0IG5l
ZWQgYSB0aW1lciBmb3IgaW52YWwuICovCisKK3N0YXRpYyBpbnQKK3Rsc19pbnN0YWxsX3NlbGZz
aWduKFNTTF9DVFggKiBzY3R4LCB1c2NoYXIgKiogZXJyc3RyKQogewotU1RBQ0tfT0YoWDUwOV9P
QkpFQ1QpICogcm9vdHM9IHN0b3JlLT5vYmpzOwotc3RhdGljIHVzY2hhciBuYW1lWzI1Nl07CitY
NTA5ICogeDUwOSA9IE5VTEw7CitFVlBfUEtFWSAqIHBrZXk7CitYNTA5X05BTUUgKiBuYW1lOwor
dXNjaGFyICogd2hlcmU7CiAKLWZvciAoaW50IGk9IDA7IGkgPCBza19YNTA5X09CSkVDVF9udW0o
cm9vdHMpOyBpKyspCitERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJUTFM6IGdlbmVyYXRpbmcg
c2VsZnNpZ25lZCBzZXJ2ZXIgY2VydFxuIik7Cit3aGVyZSA9IFVTImFsbG9jYXRpbmcgcGtleSI7
CitpZiAoIShwa2V5ID0gRVZQX1BLRVlfbmV3KCkpKQorICBnb3RvIGVycjsKKword2hlcmUgPSBV
UyJhbGxvY2F0aW5nIGNlcnQiOworaWYgKCEoeDUwOSA9IFg1MDlfbmV3KCkpKQorICBnb3RvIGVy
cjsKKword2hlcmUgPSBVUyJnZW5lcmF0aW5nIHBrZXkiOworI2lmIE9QRU5TU0xfVkVSU0lPTl9O
VU1CRVIgPCAweDMwMDAwMDAwTAorIHsKKyAgUlNBICogcnNhOworICBpZiAoIShyc2EgPSByc2Ff
Y2FsbGJhY2soTlVMTCwgMCwgMjA0OCkpKQorICAgIGdvdG8gZXJyOworCisgIHdoZXJlID0gVVMi
YXNzaWduaW5nIHBrZXkiOworICBpZiAoIUVWUF9QS0VZX2Fzc2lnbl9SU0EocGtleSwgcnNhKSkK
KyAgICBnb3RvIGVycjsKKyB9CisjZWxzZQorcGtleSA9IEVWUF9SU0FfZ2VuKDIwNDgpOworI2Vu
ZGlmCisKK1g1MDlfc2V0X3ZlcnNpb24oeDUwOSwgMik7CQkJCS8qIE4rMSAtIHZlcnNpb24gMyAq
LworQVNOMV9JTlRFR0VSX3NldChYNTA5X2dldF9zZXJpYWxOdW1iZXIoeDUwOSksIDEpOworWDUw
OV9nbXRpbWVfYWRqKFg1MDlfZ2V0X25vdEJlZm9yZSh4NTA5KSwgMCk7CitYNTA5X2dtdGltZV9h
ZGooWDUwOV9nZXRfbm90QWZ0ZXIoeDUwOSksIChsb25nKTIgKiA2MCAqIDYwKTsJLyogMiBob3Vy
ICovCitYNTA5X3NldF9wdWJrZXkoeDUwOSwgcGtleSk7CisKK25hbWUgPSBYNTA5X2dldF9zdWJq
ZWN0X25hbWUoeDUwOSk7CitYNTA5X05BTUVfYWRkX2VudHJ5X2J5X3R4dChuYW1lLCAiQyIsCisJ
CQkgIE1CU1RSSU5HX0FTQywgQ1VTICJVSyIsIC0xLCAtMSwgMCk7CitYNTA5X05BTUVfYWRkX2Vu
dHJ5X2J5X3R4dChuYW1lLCAiTyIsCisJCQkgIE1CU1RSSU5HX0FTQywgQ1VTICJFeGltIERldmVs
b3BlcnMiLCAtMSwgLTEsIDApOworWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV90eHQobmFtZSwgIkNO
IiwKKwkJCSAgTUJTVFJJTkdfQVNDLCBDVVMgc210cF9hY3RpdmVfaG9zdG5hbWUsIC0xLCAtMSwg
MCk7CitYNTA5X3NldF9pc3N1ZXJfbmFtZSh4NTA5LCBuYW1lKTsKKword2hlcmUgPSBVUyJzaWdu
aW5nIGNlcnQiOworaWYgKCFYNTA5X3NpZ24oeDUwOSwgcGtleSwgRVZQX21kNSgpKSkKKyAgZ290
byBlcnI7CisKK3doZXJlID0gVVMiaW5zdGFsbGluZyBzZWxmc2lnbiBjZXJ0IjsKK2lmICghU1NM
X0NUWF91c2VfY2VydGlmaWNhdGUoc2N0eCwgeDUwOSkpCisgIGdvdG8gZXJyOworCit3aGVyZSA9
IFVTImluc3RhbGxpbmcgc2VsZnNpZ24ga2V5IjsKK2lmICghU1NMX0NUWF91c2VfUHJpdmF0ZUtl
eShzY3R4LCBwa2V5KSkKKyAgZ290byBlcnI7CisKK3JldHVybiBPSzsKKworZXJyOgorICAodm9p
ZCkgdGxzX2Vycm9yKHdoZXJlLCBOVUxMLCBOVUxMLCBlcnJzdHIpOworICBpZiAoeDUwOSkgWDUw
OV9mcmVlKHg1MDkpOworICBpZiAocGtleSkgRVZQX1BLRVlfZnJlZShwa2V5KTsKKyAgcmV0dXJu
IERFRkVSOworfQorCisKKworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgSW5mb3JtYXRpb24gY2FsbGJhY2sgICAg
ICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisKKy8qIFRoZSBTU0wgbGlicmFyeSBmdW5jdGlvbnMgY2FsbCB0aGlzIGZyb20g
dGltZSB0byB0aW1lIHRvIGluZGljYXRlIHdoYXQgdGhleQorYXJlIGRvaW5nLiBXZSBjb3B5IHRo
ZSBzdHJpbmcgdG8gdGhlIGRlYnVnZ2luZyBvdXRwdXQgd2hlbiBUTFMgZGVidWdnaW5nIGhhcwor
YmVlbiByZXF1ZXN0ZWQuCisKK0FyZ3VtZW50czoKKyAgcyAgICAgICAgIHRoZSBTU0wgY29ubmVj
dGlvbgorICB3aGVyZQorICByZXQKKworUmV0dXJuczogICAgbm90aGluZworKi8KKworc3RhdGlj
IHZvaWQKK2luZm9fY2FsbGJhY2soU1NMICpzLCBpbnQgd2hlcmUsIGludCByZXQpCit7CitERUJV
RyhEX3RscykKICAgewotICBYNTA5X09CSkVDVCAqIHRtcF9vYmo9IHNrX1g1MDlfT0JKRUNUX3Zh
bHVlKHJvb3RzLCBpKTsKLSAgaWYodG1wX29iai0+dHlwZSA9PSBYNTA5X0xVX1g1MDkpCisgIGNv
bnN0IHVzY2hhciAqIHN0cjsKKworICBpZiAod2hlcmUgJiBTU0xfU1RfQ09OTkVDVCkKKyAgICAg
c3RyID0gVVMiU1NMX2Nvbm5lY3QiOworICBlbHNlIGlmICh3aGVyZSAmIFNTTF9TVF9BQ0NFUFQp
CisgICAgIHN0ciA9IFVTIlNTTF9hY2NlcHQiOworICBlbHNlCisgICAgIHN0ciA9IFVTIlNTTCBp
bmZvICh1bmRlZmluZWQpIjsKKworICBpZiAod2hlcmUgJiBTU0xfQ0JfTE9PUCkKKyAgICAgZGVi
dWdfcHJpbnRmKCIlczogJXNcbiIsIHN0ciwgU1NMX3N0YXRlX3N0cmluZ19sb25nKHMpKTsKKyAg
ZWxzZSBpZiAod2hlcmUgJiBTU0xfQ0JfQUxFUlQpCisgICAgZGVidWdfcHJpbnRmKCJTU0wzIGFs
ZXJ0ICVzOiVzOiVzXG4iLAorCSAgc3RyID0gd2hlcmUgJiBTU0xfQ0JfUkVBRCA/IFVTInJlYWQi
IDogVVMid3JpdGUiLAorCSAgU1NMX2FsZXJ0X3R5cGVfc3RyaW5nX2xvbmcocmV0KSwgU1NMX2Fs
ZXJ0X2Rlc2Nfc3RyaW5nX2xvbmcocmV0KSk7CisgIGVsc2UgaWYgKHdoZXJlICYgU1NMX0NCX0VY
SVQpCiAgICAgewotICAgIFg1MDlfTkFNRSAqIHNuID0gWDUwOV9nZXRfc3ViamVjdF9uYW1lKHRt
cF9vYmotPmRhdGEueDUwOSk7Ci0gICAgaWYgKFg1MDlfTkFNRV9vbmVsaW5lKHNuLCBDUyBuYW1l
LCBzaXplb2YobmFtZSkpKQotICAgICAgewotICAgICAgbmFtZVtzaXplb2YobmFtZSktMV0gPSAn
XDAnOwotICAgICAgZGVidWdfcHJpbnRmKCIgJXNcbiIsIG5hbWUpOwotICAgICAgfQorICAgIGlm
IChyZXQgPT0gMCkKKyAgICAgIGRlYnVnX3ByaW50ZigiJXM6IGZhaWxlZCBpbiAlc1xuIiwgc3Ry
LCBTU0xfc3RhdGVfc3RyaW5nX2xvbmcocykpOworICAgIGVsc2UgaWYgKHJldCA8IDApCisgICAg
ICBkZWJ1Z19wcmludGYoIiVzOiBlcnJvciBpbiAlc1xuIiwgc3RyLCBTU0xfc3RhdGVfc3RyaW5n
X2xvbmcocykpOwogICAgIH0KKyAgZWxzZSBpZiAod2hlcmUgJiBTU0xfQ0JfSEFORFNIQUtFX1NU
QVJUKQorICAgICBkZWJ1Z19wcmludGYoIiVzOiBoc2hha2Ugc3RhcnQ6ICVzXG4iLCBzdHIsIFNT
TF9zdGF0ZV9zdHJpbmdfbG9uZyhzKSk7CisgIGVsc2UgaWYgKHdoZXJlICYgU1NMX0NCX0hBTkRT
SEFLRV9ET05FKQorICAgICBkZWJ1Z19wcmludGYoIiVzOiBoc2hha2UgZG9uZTogJXNcbiIsIHN0
ciwgU1NMX3N0YXRlX3N0cmluZ19sb25nKHMpKTsKICAgfQogfQorCisjaWZkZWYgT1BFTlNTTF9I
QVZFX0tFWUxPR19DQgorc3RhdGljIHZvaWQKK2tleWxvZ19jYWxsYmFjayhjb25zdCBTU0wgKnNz
bCwgY29uc3QgY2hhciAqbGluZSkKK3sKK2NoYXIgKiBmaWxlbmFtZTsKK0ZJTEUgKiBmcDsKK0RF
QlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIiUuMjAwc1xuIiwgbGluZSk7CitpZiAoIShmaWxlbmFt
ZSA9IGdldGVudigiU1NMS0VZTE9HRklMRSIpKSkgcmV0dXJuOworaWYgKCEoZnAgPSBmb3Blbihm
aWxlbmFtZSwgImEiKSkpIHJldHVybjsKK2ZwcmludGYoZnAsICIlc1xuIiwgbGluZSk7CitmY2xv
c2UoZnApOworfQogI2VuZGlmCi0qLworCisKKwogCiAKICNpZm5kZWYgRElTQUJMRV9FVkVOVApA
QCAtNTU0LDE0ICsxMDAyLDE0IEBACiB1c2NoYXIgKiB5aWVsZDsKIFg1MDkgKiBvbGRfY2VydDsK
IAotZXYgPSB0bHNwID09ICZ0bHNfb3V0ID8gY2xpZW50X3N0YXRpY19jYmluZm8tPmV2ZW50X2Fj
dGlvbiA6IGV2ZW50X2FjdGlvbjsKK2V2ID0gdGxzcCA9PSAmdGxzX291dCA/IGNsaWVudF9zdGF0
aWNfc3RhdGUtPmV2ZW50X2FjdGlvbiA6IGV2ZW50X2FjdGlvbjsKIGlmIChldikKICAgewogICBE
RUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJ2ZXJpZnlfZXZlbnQ6ICVzICVkXG4iLCB3aGF0LCBk
ZXB0aCk7CiAgIG9sZF9jZXJ0ID0gdGxzcC0+cGVlcmNlcnQ7CiAgIHRsc3AtPnBlZXJjZXJ0ID0g
WDUwOV9kdXAoY2VydCk7CiAgIC8qIE5CIHdlIGRvIG5vdCBib3RoZXIgc2V0dGluZyBwZWVyZG4g
Ki8KLSAgaWYgKCh5aWVsZCA9IGV2ZW50X3JhaXNlKGV2LCBVUyJ0bHM6Y2VydCIsIHN0cmluZ19z
cHJpbnRmKCIlZCIsIGRlcHRoKSkpKQorICBpZiAoKHlpZWxkID0gZXZlbnRfcmFpc2UoZXYsIFVT
InRsczpjZXJ0Iiwgc3RyaW5nX3NwcmludGYoIiVkIiwgZGVwdGgpLCAmZXJybm8pKSkKICAgICB7
CiAgICAgbG9nX3dyaXRlKDAsIExPR19NQUlOLCAiWyVzXSAlcyB2ZXJpZnkgZGVuaWVkIGJ5IGV2
ZW50LWFjdGlvbjogIgogCQkiZGVwdGg9JWQgY2VydD0lczogJXMiLApAQCAtNjYxLDE1ICsxMTA5
LDE1IEBACiAgIHsKICAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiU1NMIHZlcmlmeSBvazog
ZGVwdGg9JWQgU049JXNcbiIsIGRlcHRoLCBkbik7CiAjaWZuZGVmIERJU0FCTEVfT0NTUAotICBp
ZiAodGxzcCA9PSAmdGxzX291dCAmJiBjbGllbnRfc3RhdGljX2NiaW5mby0+dV9vY3NwLmNsaWVu
dC52ZXJpZnlfc3RvcmUpCisgIGlmICh0bHNwID09ICZ0bHNfb3V0ICYmIGNsaWVudF9zdGF0aWNf
c3RhdGUtPnVfb2NzcC5jbGllbnQudmVyaWZ5X3N0b3JlKQogICAgIHsJLyogY2xpZW50LCB3YW50
aW5nIHN0YXBsaW5nICAqLwogICAgIC8qIEFkZCB0aGUgc2VydmVyIGNlcnQncyBzaWduaW5nIGNo
YWluIGFzIHRoZSBvbmUKICAgICBmb3IgdGhlIHZlcmlmaWNhdGlvbiBvZiB0aGUgT0NTUCBzdGFw
bGVkIGluZm9ybWF0aW9uLiAqLwogCi0gICAgaWYgKCFYNTA5X1NUT1JFX2FkZF9jZXJ0KGNsaWVu
dF9zdGF0aWNfY2JpbmZvLT51X29jc3AuY2xpZW50LnZlcmlmeV9zdG9yZSwKKyAgICBpZiAoIVg1
MDlfU1RPUkVfYWRkX2NlcnQoY2xpZW50X3N0YXRpY19zdGF0ZS0+dV9vY3NwLmNsaWVudC52ZXJp
Znlfc3RvcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQpKQogICAgICAgRVJS
X2NsZWFyX2Vycm9yKCk7Ci0gICAgc2tfWDUwOV9wdXNoKGNsaWVudF9zdGF0aWNfY2JpbmZvLT52
ZXJpZnlfc3RhY2ssIGNlcnQpOworICAgIHNrX1g1MDlfcHVzaChjbGllbnRfc3RhdGljX3N0YXRl
LT52ZXJpZnlfc3RhY2ssIGNlcnQpOwogICAgIH0KICNlbmRpZgogI2lmbmRlZiBESVNBQkxFX0VW
RU5UCkBAIC02ODIsNyArMTEzMCw3IEBACiAgIGNvbnN0IHVzY2hhciAqIHZlcmlmeV9jZXJ0X2hv
c3RuYW1lczsKIAogICBpZiAoICB0bHNwID09ICZ0bHNfb3V0Ci0gICAgICYmICgodmVyaWZ5X2Nl
cnRfaG9zdG5hbWVzID0gY2xpZW50X3N0YXRpY19jYmluZm8tPnZlcmlmeV9jZXJ0X2hvc3RuYW1l
cykpKQorICAgICAmJiAoKHZlcmlmeV9jZXJ0X2hvc3RuYW1lcyA9IGNsaWVudF9zdGF0aWNfc3Rh
dGUtPnZlcmlmeV9jZXJ0X2hvc3RuYW1lcykpKQogCS8qIGNsaWVudCwgd2FudGluZyBob3N0bmFt
ZSBjaGVjayAqLwogICAgIHsKIApAQCAtODAyLDE1ICsxMjUwLDE1IEBACiAgIHsKICAgdGxzX291
dC5kYW5lX3ZlcmlmaWVkID0gVFJVRTsKICNpZm5kZWYgRElTQUJMRV9PQ1NQCi0gIGlmIChjbGll
bnRfc3RhdGljX2NiaW5mby0+dV9vY3NwLmNsaWVudC52ZXJpZnlfc3RvcmUpCisgIGlmIChjbGll
bnRfc3RhdGljX3N0YXRlLT51X29jc3AuY2xpZW50LnZlcmlmeV9zdG9yZSkKICAgICB7CS8qIGNs
aWVudCwgd2FudGluZyBzdGFwbGluZyAgKi8KICAgICAvKiBBZGQgdGhlIHNlcnZlciBjZXJ0J3Mg
c2lnbmluZyBjaGFpbiBhcyB0aGUgb25lCiAgICAgZm9yIHRoZSB2ZXJpZmljYXRpb24gb2YgdGhl
IE9DU1Agc3RhcGxlZCBpbmZvcm1hdGlvbi4gKi8KIAotICAgIGlmICghWDUwOV9TVE9SRV9hZGRf
Y2VydChjbGllbnRfc3RhdGljX2NiaW5mby0+dV9vY3NwLmNsaWVudC52ZXJpZnlfc3RvcmUsCisg
ICAgaWYgKCFYNTA5X1NUT1JFX2FkZF9jZXJ0KGNsaWVudF9zdGF0aWNfc3RhdGUtPnVfb2NzcC5j
bGllbnQudmVyaWZ5X3N0b3JlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0KSkK
ICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOwotICAgIHNrX1g1MDlfcHVzaChjbGllbnRfc3RhdGlj
X2NiaW5mby0+dmVyaWZ5X3N0YWNrLCBjZXJ0KTsKKyAgICBza19YNTA5X3B1c2goY2xpZW50X3N0
YXRpY19zdGF0ZS0+dmVyaWZ5X3N0YWNrLCBjZXJ0KTsKICAgICB9CiAjZW5kaWYKICAgfQpAQCAt
ODI4LDQwOSArMTI3Niw2IEBACiAjZW5kaWYJLypTVVBQT1JUX0RBTkUqLwogCiAKLS8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgICAgICAgICBJ
bmZvcm1hdGlvbiBjYWxsYmFjayAgICAgICAgICAgICAgICAgKgotKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhlIFNTTCBsaWJyYXJ5IGZ1
bmN0aW9ucyBjYWxsIHRoaXMgZnJvbSB0aW1lIHRvIHRpbWUgdG8gaW5kaWNhdGUgd2hhdCB0aGV5
Ci1hcmUgZG9pbmcuIFdlIGNvcHkgdGhlIHN0cmluZyB0byB0aGUgZGVidWdnaW5nIG91dHB1dCB3
aGVuIFRMUyBkZWJ1Z2dpbmcgaGFzCi1iZWVuIHJlcXVlc3RlZC4KLQotQXJndW1lbnRzOgotICBz
ICAgICAgICAgdGhlIFNTTCBjb25uZWN0aW9uCi0gIHdoZXJlCi0gIHJldAotCi1SZXR1cm5zOiAg
ICBub3RoaW5nCi0qLwotCi1zdGF0aWMgdm9pZAotaW5mb19jYWxsYmFjayhTU0wgKnMsIGludCB3
aGVyZSwgaW50IHJldCkKLXsKLURFQlVHKERfdGxzKQotICB7Ci0gIGNvbnN0IHVzY2hhciAqIHN0
cjsKLQotICBpZiAod2hlcmUgJiBTU0xfU1RfQ09OTkVDVCkKLSAgICAgc3RyID0gVVMiU1NMX2Nv
bm5lY3QiOwotICBlbHNlIGlmICh3aGVyZSAmIFNTTF9TVF9BQ0NFUFQpCi0gICAgIHN0ciA9IFVT
IlNTTF9hY2NlcHQiOwotICBlbHNlCi0gICAgIHN0ciA9IFVTIlNTTCBpbmZvICh1bmRlZmluZWQp
IjsKLQotICBpZiAod2hlcmUgJiBTU0xfQ0JfTE9PUCkKLSAgICAgZGVidWdfcHJpbnRmKCIlczog
JXNcbiIsIHN0ciwgU1NMX3N0YXRlX3N0cmluZ19sb25nKHMpKTsKLSAgZWxzZSBpZiAod2hlcmUg
JiBTU0xfQ0JfQUxFUlQpCi0gICAgZGVidWdfcHJpbnRmKCJTU0wzIGFsZXJ0ICVzOiVzOiVzXG4i
LAotCSAgc3RyID0gd2hlcmUgJiBTU0xfQ0JfUkVBRCA/IFVTInJlYWQiIDogVVMid3JpdGUiLAot
CSAgU1NMX2FsZXJ0X3R5cGVfc3RyaW5nX2xvbmcocmV0KSwgU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5n
X2xvbmcocmV0KSk7Ci0gIGVsc2UgaWYgKHdoZXJlICYgU1NMX0NCX0VYSVQpCi0gICAgIGlmIChy
ZXQgPT0gMCkKLQlkZWJ1Z19wcmludGYoIiVzOiBmYWlsZWQgaW4gJXNcbiIsIHN0ciwgU1NMX3N0
YXRlX3N0cmluZ19sb25nKHMpKTsKLSAgICAgZWxzZSBpZiAocmV0IDwgMCkKLQlkZWJ1Z19wcmlu
dGYoIiVzOiBlcnJvciBpbiAlc1xuIiwgc3RyLCBTU0xfc3RhdGVfc3RyaW5nX2xvbmcocykpOwot
ICBlbHNlIGlmICh3aGVyZSAmIFNTTF9DQl9IQU5EU0hBS0VfU1RBUlQpCi0gICAgIGRlYnVnX3By
aW50ZigiJXM6IGhzaGFrZSBzdGFydDogJXNcbiIsIHN0ciwgU1NMX3N0YXRlX3N0cmluZ19sb25n
KHMpKTsKLSAgZWxzZSBpZiAod2hlcmUgJiBTU0xfQ0JfSEFORFNIQUtFX0RPTkUpCi0gICAgIGRl
YnVnX3ByaW50ZigiJXM6IGhzaGFrZSBkb25lOiAlc1xuIiwgc3RyLCBTU0xfc3RhdGVfc3RyaW5n
X2xvbmcocykpOwotICB9Ci19Ci0KLSNpZmRlZiBPUEVOU1NMX0hBVkVfS0VZTE9HX0NCCi1zdGF0
aWMgdm9pZAota2V5bG9nX2NhbGxiYWNrKGNvbnN0IFNTTCAqc3NsLCBjb25zdCBjaGFyICpsaW5l
KQotewotY2hhciAqIGZpbGVuYW1lOwotRklMRSAqIGZwOwotREVCVUcoRF90bHMpIGRlYnVnX3By
aW50ZigiJS4yMDBzXG4iLCBsaW5lKTsKLWlmICghKGZpbGVuYW1lID0gZ2V0ZW52KCJTU0xLRVlM
T0dGSUxFIikpKSByZXR1cm47Ci1pZiAoIShmcCA9IGZvcGVuKGZpbGVuYW1lLCAiYSIpKSkgcmV0
dXJuOwotZnByaW50ZihmcCwgIiVzXG4iLCBsaW5lKTsKLWZjbG9zZShmcCk7Ci19Ci0jZW5kaWYK
LQotCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUKLS8qIE1hbmFnZSB0aGUga2V5c2V0
cyB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBzZXNzaW9uIHRpY2tldHMsIG9uIHRoZSBzZXJ2ZXIu
ICovCi0KLXR5cGVkZWYgc3RydWN0IHsJCQkvKiBTZXNzaW9uIHRpY2tldCBlbmNyeXB0aW9uIGtl
eSAqLwotICB1c2NoYXIgCW5hbWVbMTZdOwotCi0gIGNvbnN0IEVWUF9DSVBIRVIgKglhZXNfY2lw
aGVyOwotICB1c2NoYXIJCWFlc19rZXlbMzJdOwkvKiBzaXplIG5lZWRlZCBkZXBlbmRzIG9uIGNp
cGhlci4gYWVzXzEyOCBpbXBsaWVzIDEyOC84ID0gMTY/ICovCi0gIGNvbnN0IEVWUF9NRCAqCWht
YWNfaGFzaDsKLSAgdXNjaGFyCQlobWFjX2tleVsxNl07Ci0gIHRpbWVfdAkJcmVuZXc7Ci0gIHRp
bWVfdAkJZXhwaXJlOwotfSBleGltX3N0ZWs7Ci0KLXN0YXRpYyBleGltX3N0ZWsgZXhpbV90azsJ
LyogY3VycmVudCBrZXkgKi8KLXN0YXRpYyBleGltX3N0ZWsgZXhpbV90a19vbGQ7CS8qIHByZXZp
b3VzIGtleSAqLwotCi1zdGF0aWMgdm9pZAotdGtfaW5pdCh2b2lkKQotewotdGltZV90IHQgPSB0
aW1lKE5VTEwpOwotCi1pZiAoZXhpbV90ay5uYW1lWzBdKQotICB7Ci0gIGlmIChleGltX3RrLnJl
bmV3ID49IHQpIHJldHVybjsKLSAgZXhpbV90a19vbGQgPSBleGltX3RrOwotICB9Ci0KLWlmIChm
LnJ1bm5pbmdfaW5fdGVzdF9oYXJuZXNzKSBzc2xfc2Vzc2lvbl90aW1lb3V0ID0gNjsKLQotREVC
VUcoRF90bHMpIGRlYnVnX3ByaW50ZigiT3BlblNTTDogJXMgU1RFS1xuIiwgZXhpbV90ay5uYW1l
WzBdID8gInJvdGF0aW5nIiA6ICJjcmVhdGluZyIpOwotaWYgKFJBTkRfYnl0ZXMoZXhpbV90ay5h
ZXNfa2V5LCBzaXplb2YoZXhpbV90ay5hZXNfa2V5KSkgPD0gMCkgcmV0dXJuOwotaWYgKFJBTkRf
Ynl0ZXMoZXhpbV90ay5obWFjX2tleSwgc2l6ZW9mKGV4aW1fdGsuaG1hY19rZXkpKSA8PSAwKSBy
ZXR1cm47Ci1pZiAoUkFORF9ieXRlcyhleGltX3RrLm5hbWUrMSwgc2l6ZW9mKGV4aW1fdGsubmFt
ZSktMSkgPD0gMCkgcmV0dXJuOwotCi1leGltX3RrLm5hbWVbMF0gPSAnRSc7Ci1leGltX3RrLmFl
c19jaXBoZXIgPSBFVlBfYWVzXzI1Nl9jYmMoKTsKLWV4aW1fdGsuaG1hY19oYXNoID0gRVZQX3No
YTI1NigpOwotZXhpbV90ay5leHBpcmUgPSB0ICsgc3NsX3Nlc3Npb25fdGltZW91dDsKLWV4aW1f
dGsucmVuZXcgPSB0ICsgc3NsX3Nlc3Npb25fdGltZW91dC8yOwotfQotCi1zdGF0aWMgZXhpbV9z
dGVrICoKLXRrX2N1cnJlbnQodm9pZCkKLXsKLWlmICghZXhpbV90ay5uYW1lWzBdKSByZXR1cm4g
TlVMTDsKLXJldHVybiAmZXhpbV90azsKLX0KLQotc3RhdGljIGV4aW1fc3RlayAqCi10a19maW5k
KGNvbnN0IHVzY2hhciAqIG5hbWUpCi17Ci1yZXR1cm4gbWVtY21wKG5hbWUsIGV4aW1fdGsubmFt
ZSwgc2l6ZW9mKGV4aW1fdGsubmFtZSkpID09IDAgPyAmZXhpbV90awotICA6IG1lbWNtcChuYW1l
LCBleGltX3RrX29sZC5uYW1lLCBzaXplb2YoZXhpbV90a19vbGQubmFtZSkpID09IDAgPyAmZXhp
bV90a19vbGQKLSAgOiBOVUxMOwotfQotCi0vKiBDYWxsYmFjayBmb3Igc2Vzc2lvbiB0aWNrZXRz
LCBvbiBzZXJ2ZXIgKi8KLXN0YXRpYyBpbnQKLXRpY2tldF9rZXlfY2FsbGJhY2soU1NMICogc3Ns
LCB1c2NoYXIga2V5X25hbWVbMTZdLAotICB1c2NoYXIgKiBpdiwgRVZQX0NJUEhFUl9DVFggKiBj
dHgsIEhNQUNfQ1RYICogaGN0eCwgaW50IGVuYykKLXsKLXRsc19zdXBwb3J0ICogdGxzcCA9IHNl
cnZlcl9zdGF0aWNfY2JpbmZvLT50bHNwOwotZXhpbV9zdGVrICoga2V5OwotCi1pZiAoZW5jKQot
ICB7Ci0gIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoInRpY2tldF9rZXlfY2FsbGJhY2s6IGNy
ZWF0ZSBuZXcgc2Vzc2lvblxuIik7Ci0gIHRsc3AtPnJlc3VtcHRpb24gfD0gUkVTVU1FX0NMSUVO
VF9SRVFVRVNURUQ7Ci0KLSAgaWYgKFJBTkRfYnl0ZXMoaXYsIEVWUF9NQVhfSVZfTEVOR1RIKSA8
PSAwKQotICAgIHJldHVybiAtMTsgLyogaW5zdWZmaWNpZW50IHJhbmRvbSAqLwotCi0gIGlmICgh
KGtleSA9IHRrX2N1cnJlbnQoKSkpCS8qIGN1cnJlbnQga2V5IGRvZXNuJ3QgZXhpc3Qgb3IgaXNu
J3QgdmFsaWQgKi8KLSAgICAgcmV0dXJuIDA7CQkJLyoga2V5IGNvdWxkbid0IGJlIGNyZWF0ZWQg
Ki8KLSAgbWVtY3B5KGtleV9uYW1lLCBrZXktPm5hbWUsIDE2KTsKLSAgREVCVUcoRF90bHMpIGRl
YnVnX3ByaW50ZigiU1RFSyBleHBpcmUgIiBUSU1FX1RfRk1UICJcbiIsIGtleS0+ZXhwaXJlIC0g
dGltZShOVUxMKSk7Ci0KLSAgLypYWFggd2lsbCB3YW50IHRoZXNlIGRlcGVuZGVudCBvbiB0aGUg
c3NsIHNlc3Npb24gc3RyZW5ndGggKi8KLSAgSE1BQ19Jbml0X2V4KGhjdHgsIGtleS0+aG1hY19r
ZXksIHNpemVvZihrZXktPmhtYWNfa2V5KSwKLQkJa2V5LT5obWFjX2hhc2gsIE5VTEwpOwotICBF
VlBfRW5jcnlwdEluaXRfZXgoY3R4LCBrZXktPmFlc19jaXBoZXIsIE5VTEwsIGtleS0+YWVzX2tl
eSwgaXYpOwotCi0gIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoInRpY2tldCBjcmVhdGVkXG4i
KTsKLSAgcmV0dXJuIDE7Ci0gIH0KLWVsc2UKLSAgewotICB0aW1lX3Qgbm93ID0gdGltZShOVUxM
KTsKLQotICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJ0aWNrZXRfa2V5X2NhbGxiYWNrOiBy
ZXRyaWV2ZSBzZXNzaW9uXG4iKTsKLSAgdGxzcC0+cmVzdW1wdGlvbiB8PSBSRVNVTUVfQ0xJRU5U
X1NVR0dFU1RFRDsKLQotICBpZiAoIShrZXkgPSB0a19maW5kKGtleV9uYW1lKSkgfHwga2V5LT5l
eHBpcmUgPCBub3cpCi0gICAgewotICAgIERFQlVHKERfdGxzKQotICAgICAgewotICAgICAgZGVi
dWdfcHJpbnRmKCJ0aWNrZXQgbm90IHVzYWJsZSAoJXMpXG4iLCBrZXkgPyAiZXhwaXJlZCIgOiAi
bm90IGZvdW5kIik7Ci0gICAgICBpZiAoa2V5KSBkZWJ1Z19wcmludGYoIlNURUsgZXhwaXJlICIg
VElNRV9UX0ZNVCAiXG4iLCBrZXktPmV4cGlyZSAtIG5vdyk7Ci0gICAgICB9Ci0gICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gIEhNQUNfSW5pdF9leChoY3R4LCBrZXktPmhtYWNfa2V5LCBzaXplb2Yo
a2V5LT5obWFjX2tleSksCi0JCWtleS0+aG1hY19oYXNoLCBOVUxMKTsKLSAgRVZQX0RlY3J5cHRJ
bml0X2V4KGN0eCwga2V5LT5hZXNfY2lwaGVyLCBOVUxMLCBrZXktPmFlc19rZXksIGl2KTsKLQot
ICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJ0aWNrZXQgdXNhYmxlLCBTVEVLIGV4cGlyZSAi
IFRJTUVfVF9GTVQgIlxuIiwga2V5LT5leHBpcmUgLSBub3cpOwotCi0gIC8qIFRoZSB0aWNrZXQg
bGlmZXRpbWUgYW5kIHJlbmV3YWwgYXJlIHRoZSBzYW1lIGFzIHRoZSBTVEVLIGxpZmV0aW1lIGFu
ZAotICByZW5ld2FsLCB3aGljaCBpcyBvdmVyZW50aHVzaWFzdGljLiAgQSBmYWN0b3Igb2YsIHNh
eSwgM3ggbG9uZ2VyIFNURUsgd291bGQKLSAgYmUgYmV0dGVyLiAgVG8gZG8gdGhhdCB3ZSdkIGhh
dmUgdG8gZW5jb2RlIHRpY2tldCBsaWZldGltZSBpbiB0aGUgbmFtZSBhcwotICB3ZSBkb24ndCB5
ZXQgc2VlIHRoZSByZXN0b3JlZCBzZXNzaW9uLiAgQ291bGQgY2hlY2sgcG9zdGhhbmRzaGFrZSBm
b3IgVExTMS4zCi0gIGFuZCB0cmlnZ2VyIGEgbmV3IHRpY2tldCB0aGVuLCBidXQgY2Fubm90IGRv
IHRoYXQgZm9yIFRMUzEuMiAqLwotICByZXR1cm4ga2V5LT5yZW5ldyA8IG5vdyA/IDIgOiAxOwot
ICB9Ci19Ci0jZW5kaWYKLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCi0qICAgICAgICAgICAgICAgIEluaXRpYWxpemUgZm9yIERIICAgICAg
ICAgICAgICAgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KLQotLyogSWYgZGhwYXJhbSBpcyBzZXQsIGV4cGFuZCBpdCwgYW5kIGxvYWQgdXAgdGhl
IHBhcmFtZXRlcnMgZm9yIERIIGVuY3J5cHRpb24uCi0KLUFyZ3VtZW50czoKLSAgc2N0eCAgICAg
IFRoZSBjdXJyZW50IFNTTCBDVFggKGluYm91bmQgb3Igb3V0Ym91bmQpCi0gIGRocGFyYW0gICBE
SCBwYXJhbWV0ZXIgZmlsZSBvciBmaXhlZCBwYXJhbWV0ZXIgaWRlbnRpdHkgc3RyaW5nCi0gIGhv
c3QgICAgICBjb25uZWN0ZWQgaG9zdCwgaWYgY2xpZW50OyBOVUxMIGlmIHNlcnZlcgotICBlcnJz
dHIgICAgZXJyb3Igc3RyaW5nIHBvaW50ZXIKLQotUmV0dXJuczogICAgVFJVRSBpZiBPSyAobm90
aGluZyB0byBzZXQgdXAsIG9yIHNldHVwIHdvcmtlZCkKLSovCi0KLXN0YXRpYyBCT09MCi1pbml0
X2RoKFNTTF9DVFggKnNjdHgsIHVzY2hhciAqZGhwYXJhbSwgY29uc3QgaG9zdF9pdGVtICpob3N0
LCB1c2NoYXIgKiogZXJyc3RyKQotewotQklPICpiaW87Ci1ESCAqZGg7Ci11c2NoYXIgKmRoZXhw
YW5kZWQ7Ci1jb25zdCBjaGFyICpwZW07Ci1pbnQgZGhfYml0c2l6ZTsKLQotaWYgKCFleHBhbmRf
Y2hlY2soZGhwYXJhbSwgVVMidGxzX2RocGFyYW0iLCAmZGhleHBhbmRlZCwgZXJyc3RyKSkKLSAg
cmV0dXJuIEZBTFNFOwotCi1pZiAoIWRoZXhwYW5kZWQgfHwgISpkaGV4cGFuZGVkKQotICBiaW8g
PSBCSU9fbmV3X21lbV9idWYoQ1Mgc3RkX2RoX3ByaW1lX2RlZmF1bHQoKSwgLTEpOwotZWxzZSBp
ZiAoZGhleHBhbmRlZFswXSA9PSAnLycpCi0gIHsKLSAgaWYgKCEoYmlvID0gQklPX25ld19maWxl
KENTIGRoZXhwYW5kZWQsICJyIikpKQotICAgIHsKLSAgICB0bHNfZXJyb3Ioc3RyaW5nX3Nwcmlu
dGYoImNvdWxkIG5vdCByZWFkIGRocGFyYW1zIGZpbGUgJXMiLCBkaGV4cGFuZGVkKSwKLSAgICAg
ICAgICBob3N0LCBVUyBzdHJlcnJvcihlcnJubyksIGVycnN0cik7Ci0gICAgcmV0dXJuIEZBTFNF
OwotICAgIH0KLSAgfQotZWxzZQotICB7Ci0gIGlmIChVc3RyY21wKGRoZXhwYW5kZWQsICJub25l
IikgPT0gMCkKLSAgICB7Ci0gICAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiUmVxdWVzdGVk
IG5vIERIIHBhcmFtZXRlcnMuXG4iKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgaWYg
KCEocGVtID0gc3RkX2RoX3ByaW1lX25hbWVkKGRoZXhwYW5kZWQpKSkKLSAgICB7Ci0gICAgdGxz
X2Vycm9yKHN0cmluZ19zcHJpbnRmKCJVbmtub3duIHN0YW5kYXJkIERIIHByaW1lIFwiJXNcIiIs
IGRoZXhwYW5kZWQpLAotICAgICAgICBob3N0LCBVUyBzdHJlcnJvcihlcnJubyksIGVycnN0cik7
Ci0gICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgYmlvID0gQklPX25ld19tZW1fYnVmKENTIHBl
bSwgLTEpOwotICB9Ci0KLWlmICghKGRoID0gUEVNX3JlYWRfYmlvX0RIcGFyYW1zKGJpbywgTlVM
TCwgTlVMTCwgTlVMTCkpKQotICB7Ci0gIEJJT19mcmVlKGJpbyk7Ci0gIHRsc19lcnJvcihzdHJp
bmdfc3ByaW50ZigiQ291bGQgbm90IHJlYWQgdGxzX2RocGFyYW1zIFwiJXNcIiIsIGRoZXhwYW5k
ZWQpLAotICAgICAgaG9zdCwgTlVMTCwgZXJyc3RyKTsKLSAgcmV0dXJuIEZBTFNFOwotICB9Ci0K
LS8qIG5vdGU6IG91ciBkZWZhdWx0IGxpbWl0IG9mIDIyMzYgaXMgbm90IGEgbXVsdGlwbGUgb2Yg
ODsgdGhlIGxpbWl0IGNvbWVzIGZyb20KLSAqIGFuIE5TUyBsaW1pdCwgYW5kIHRoZSBHbnVUTFMg
QVBJcyBoYW5kbGUgYml0LXNpemVzIGZpbmUsIHNvIHdlIHdlbnQgd2l0aAotICogMjIzNi4gIEJ1
dCBvbGRlciBPcGVuU1NMIGNhbiBvbmx5IHJlcG9ydCBpbiBieXRlcyAob2N0ZXRzKSwgbm90IGJp
dHMuCi0gKiBJZiBzb21lb25lIHdhbnRzIHRvIGRhbmNlIGF0IHRoZSBlZGdlLCB0aGVuIHRoZXkg
Y2FuIHJhaXNlIHRoZSBsaW1pdCBvciB1c2UKLSAqIGN1cnJlbnQgbGlicmFyaWVzLiAqLwotI2lm
ZGVmIEVYSU1fSEFWRV9PUEVOU1NMX0RIX0JJVFMKLS8qIEFkZGVkIGluIGNvbW1pdCAyNmM3OWQ1
NjQxZDsgYGdpdCBkZXNjcmliZSAtLWNvbnRhaW5zYCBzYXlzIE9wZW5TU0xfMV8xXzAtcHJlMX4x
MDIyCi0gKiBUaGlzIHByZWRhdGVzIE9wZW5TU0xfMV8xXzAgKGJlZm9yZSBhLCBiLCAuLi4pIHNv
IGlzIGluIGFsbCAxLjEuMCAqLwotZGhfYml0c2l6ZSA9IERIX2JpdHMoZGgpOwotI2Vsc2UKLWRo
X2JpdHNpemUgPSA4ICogREhfc2l6ZShkaCk7Ci0jZW5kaWYKLQotLyogRXZlbiBpZiBpdCBpcyBs
YXJnZXIsIHdlIHNpbGVudGx5IHJldHVybiBzdWNjZXNzIHJhdGhlciB0aGFuIGNhdXNlIHRoaW5n
cwotICogdG8gZmFpbCBvdXQsIHNvIHRoYXQgYSB0b28tbGFyZ2UgREggd2lsbCBub3Qga25vY2sg
b3V0IGFsbCBUTFM7IGl0J3MgYQotICogZGViYXRhYmxlIGNob2ljZS4gKi8KLWlmIChkaF9iaXRz
aXplID4gdGxzX2RoX21heF9iaXRzKQotICB7Ci0gIERFQlVHKERfdGxzKQotICAgIGRlYnVnX3By
aW50ZigiZGhwYXJhbXMgZmlsZSAlZCBiaXRzLCBpcyA+IHRsc19kaF9tYXhfYml0cyBsaW1pdCBv
ZiAlZFxuIiwKLSAgICAgICAgZGhfYml0c2l6ZSwgdGxzX2RoX21heF9iaXRzKTsKLSAgfQotZWxz
ZQotICB7Ci0gIFNTTF9DVFhfc2V0X3RtcF9kaChzY3R4LCBkaCk7Ci0gIERFQlVHKERfdGxzKQot
ICAgIGRlYnVnX3ByaW50ZigiRGlmZmllLUhlbGxtYW4gaW5pdGlhbGl6ZWQgZnJvbSAlcyB3aXRo
ICVkLWJpdCBwcmltZVxuIiwKLSAgICAgIGRoZXhwYW5kZWQgPyBkaGV4cGFuZGVkIDogVVMiZGVm
YXVsdCIsIGRoX2JpdHNpemUpOwotICB9Ci0KLURIX2ZyZWUoZGgpOwotQklPX2ZyZWUoYmlvKTsK
LQotcmV0dXJuIFRSVUU7Ci19Ci0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCi0qICAgICAgICAgICAgICAgSW5pdGlhbGl6ZSBmb3IgRUNE
SCAgICAgICAgICAgICAgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KLQotLyogTG9hZCBwYXJhbWV0ZXJzIGZvciBFQ0RIIGVuY3J5cHRpb24uCi0K
LUZvciBub3csIHdlIHN0aWNrIHRvIE5JU1QgUC0yNTYgYmVjYXVzZTogaXQncyBzaW1wbGUgYW5k
IGVhc3kgdG8gY29uZmlndXJlOwotaXQgYXZvaWRzIGFueSBwYXRlbnQgaXNzdWVzIHRoYXQgbWln
aHQgYml0ZSByZWRpc3RyaWJ1dG9yczsgZGVzcGl0ZSBldmVudHMgaW4KLXRoZSBuZXdzIGFuZCBj
b25jZXJucyBvdmVyIGN1cnZlIGNob2ljZXMsIHdlJ3JlIG5vdCBjcnlwdG9ncmFwaGVycywgd2Un
cmUgbm90Ci1wcmV0ZW5kaW5nIHRvIGJlLCBhbmQgdGhpcyBpcyAiZ29vZCBlbm91Z2giIHRvIGJl
IGJldHRlciB0aGFuIG5vIHN1cHBvcnQsCi1wcm90ZWN0aW5nIGFnYWluc3QgbW9zdCBhZHZlcnNh
cmllcy4gIEdpdmVuIGFub3RoZXIgeWVhciBvciB0d28sIHRoZXJlIG1pZ2h0Ci1iZSBzdWZmaWNp
ZW50IGNsYXJpdHkgYWJvdXQgYSAicmlnaHQiIHdheSBmb3J3YXJkIHRvIGxldCB1cyBtYWtlIGFu
IGluZm9ybWVkCi1kZWNpc2lvbiwgaW5zdGVhZCBvZiBhIGtuZWUtamVyayByZWFjdGlvbi4KLQot
TG9uZ2VyLXRlcm0sIHdlIHNob3VsZCBsb29rIGF0IHN1cHBvcnRpbmcgYm90aCB2YXJpb3VzIG5h
bWVkIGN1cnZlcyBhbmQKLWV4dGVybmFsIGZpbGVzIGdlbmVyYXRlZCB3aXRoICJvcGVuc3NsIGVj
cGFyYW0iLCBtdWNoIGFzIHdlIGRvIGZvciBpbml0X2RoKCkuCi1XZSBzaG91bGQgYWxzbyBzdXBw
b3J0ICJub25lIiBhcyBhIHZhbHVlLCB0byBleHBsaWNpdGx5IGF2b2lkIGluaXRpYWxpc2F0aW9u
LgotCi1QYXRjaGVzIHdlbGNvbWUuCi0KLUFyZ3VtZW50czoKLSAgc2N0eCAgICAgIFRoZSBjdXJy
ZW50IFNTTCBDVFggKGluYm91bmQgb3Igb3V0Ym91bmQpCi0gIGhvc3QgICAgICBjb25uZWN0ZWQg
aG9zdCwgaWYgY2xpZW50OyBOVUxMIGlmIHNlcnZlcgotICBlcnJzdHIgICAgZXJyb3Igc3RyaW5n
IHBvaW50ZXIKLQotUmV0dXJuczogICAgVFJVRSBpZiBPSyAobm90aGluZyB0byBzZXQgdXAsIG9y
IHNldHVwIHdvcmtlZCkKLSovCi0KLXN0YXRpYyBCT09MCi1pbml0X2VjZGgoU1NMX0NUWCAqIHNj
dHgsIGhvc3RfaXRlbSAqIGhvc3QsIHVzY2hhciAqKiBlcnJzdHIpCi17Ci0jaWZkZWYgT1BFTlNT
TF9OT19FQ0RICi1yZXR1cm4gVFJVRTsKLSNlbHNlCi0KLUVDX0tFWSAqIGVjZGg7Ci11c2NoYXIg
KiBleHBfY3VydmU7Ci1pbnQgbmlkOwotQk9PTCBydjsKLQotaWYgKGhvc3QpCS8qIE5vIEVDREgg
c2V0dXAgZm9yIGNsaWVudHMsIG9ubHkgZm9yIHNlcnZlcnMgKi8KLSAgcmV0dXJuIFRSVUU7Ci0K
LSMgaWZuZGVmIEVYSU1fSEFWRV9FQ0RICi1ERUJVRyhEX3RscykKLSAgZGVidWdfcHJpbnRmKCJO
byBPcGVuU1NMIEFQSSB0byBkZWZpbmUgRUNESCBwYXJhbWV0ZXJzLCBza2lwcGluZ1xuIik7Ci1y
ZXR1cm4gVFJVRTsKLSMgZWxzZQotCi1pZiAoIWV4cGFuZF9jaGVjayh0bHNfZWNjdXJ2ZSwgVVMi
dGxzX2VjY3VydmUiLCAmZXhwX2N1cnZlLCBlcnJzdHIpKQotICByZXR1cm4gRkFMU0U7Ci1pZiAo
IWV4cF9jdXJ2ZSB8fCAhKmV4cF9jdXJ2ZSkKLSAgcmV0dXJuIFRSVUU7Ci0KLS8qICJhdXRvIiBu
ZWVkcyB0byBiZSBoYW5kbGVkIGNhcmVmdWxseS4KLSAqIE9wZW5TU0wgPCAgMS4wLjI6IHdlIGRv
IG5vdCBzZWxlY3QgYW55dGhpbmcsIGJ1dCBmYWxsYmFjayB0byBwcmltZTI1NnYxCi0gKiBPcGVu
U1NMIDwgIDEuMS4wOiB3ZSBoYXZlIHRvIGNhbGwgU1NMX0NUWF9zZXRfZWNkaF9hdXRvCi0gKiAg
ICAgICAgICAgICAgICAgICAob3BlbnNzbC9zc2wuaCBkZWZpbmVzIFNTTF9DVFJMX1NFVF9FQ0RI
X0FVVE8pCi0gKiBPcGVuU1NMID49IDEuMS4wOiB3ZSBkbyBub3Qgc2V0IGFueXRoaW5nLCB0aGUg
bGlicmF5IGRvZXMgYXV0b3NlbGVjdGlvbgotICogICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9n
aXRodWIuY29tL29wZW5zc2wvb3BlbnNzbC9jb21taXQvZmU2ZWYyNDcyZGI5MzNmMDFiNTljYWQ4
MmFhOTI1NzM2OTM1OTg0YgotICovCi1pZiAoVXN0cmNtcChleHBfY3VydmUsICJhdXRvIikgPT0g
MCkKLSAgewotI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDEwMDAyMDAwTAotICBERUJV
RyhEX3RscykgZGVidWdfcHJpbnRmKAotICAgICJFQ0RIIE9wZW5TU0wgPCAxLjAuMjogdGVtcCBr
ZXkgcGFyYW1ldGVyIHNldHRpbmdzOiBvdmVycmlkaW5nIFwiYXV0b1wiIHdpdGggXCJwcmltZTI1
NnYxXCJcbiIpOwotICBleHBfY3VydmUgPSBVUyJwcmltZTI1NnYxIjsKLSNlbHNlCi0jIGlmIGRl
ZmluZWQgU1NMX0NUUkxfU0VUX0VDREhfQVVUTwotICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRm
KAotICAgICJFQ0RIIE9wZW5TU0wgMS4wLjIrIHRlbXAga2V5IHBhcmFtZXRlciBzZXR0aW5nczog
YXV0b3NlbGVjdGlvblxuIik7Ci0gIFNTTF9DVFhfc2V0X2VjZGhfYXV0byhzY3R4LCAxKTsKLSAg
cmV0dXJuIFRSVUU7Ci0jIGVsc2UKLSAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigKLSAgICAi
RUNESCBPcGVuU1NMIDEuMS4wKyB0ZW1wIGtleSBwYXJhbWV0ZXIgc2V0dGluZ3M6IGRlZmF1bHQg
c2VsZWN0aW9uXG4iKTsKLSAgcmV0dXJuIFRSVUU7Ci0jIGVuZGlmCi0jZW5kaWYKLSAgfQotCi1E
RUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJFQ0RIOiBjdXJ2ZSAnJXMnXG4iLCBleHBfY3VydmUp
OwotaWYgKCAgKG5pZCA9IE9CSl9zbjJuaWQgICAgICAgKENDUyBleHBfY3VydmUpKSA9PSBOSURf
dW5kZWYKLSMgICBpZmRlZiBFWElNX0hBVkVfT1BFTlNTTF9FQ19OSVNUMk5JRAotICAgJiYgKG5p
ZCA9IEVDX2N1cnZlX25pc3QybmlkKENDUyBleHBfY3VydmUpKSA9PSBOSURfdW5kZWYKLSMgICBl
bmRpZgotICAgKQotICB7Ci0gIHRsc19lcnJvcihzdHJpbmdfc3ByaW50ZigiVW5rbm93biBjdXJ2
ZSBuYW1lIHRsc19lY2N1cnZlICclcyciLCBleHBfY3VydmUpLAotICAgIGhvc3QsIE5VTEwsIGVy
cnN0cik7Ci0gIHJldHVybiBGQUxTRTsKLSAgfQotCi1pZiAoIShlY2RoID0gRUNfS0VZX25ld19i
eV9jdXJ2ZV9uYW1lKG5pZCkpKQotICB7Ci0gIHRsc19lcnJvcihVUyJVbmFibGUgdG8gY3JlYXRl
IGVjIGN1cnZlIiwgaG9zdCwgTlVMTCwgZXJyc3RyKTsKLSAgcmV0dXJuIEZBTFNFOwotICB9Ci0K
LS8qIFRoZSAidG1wIiBpbiB0aGUgbmFtZSBoZXJlIHJlZmVycyB0byBzZXR0aW5nIGEgdGVtcG9y
YXJ5IGtleQotbm90IHRvIHRoZSBzdGFiaWxpdHkgb2YgdGhlIGludGVyZmFjZS4gKi8KLQotaWYg
KChydiA9IFNTTF9DVFhfc2V0X3RtcF9lY2RoKHNjdHgsIGVjZGgpID09IDApKQotICB0bHNfZXJy
b3Ioc3RyaW5nX3NwcmludGYoIkVycm9yIGVuYWJsaW5nICclcycgY3VydmUiLCBleHBfY3VydmUp
LCBob3N0LCBOVUxMLCBlcnJzdHIpOwotZWxzZQotICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRm
KCJFQ0RIOiBlbmFibGVkICclcycgY3VydmVcbiIsIGV4cF9jdXJ2ZSk7Ci0KLUVDX0tFWV9mcmVl
KGVjZGgpOwotcmV0dXJuICFydjsKLQotIyBlbmRpZgkvKkVYSU1fSEFWRV9FQ0RIKi8KLSNlbmRp
ZiAvKk9QRU5TU0xfTk9fRUNESCovCi19Ci0KLQotCi0KICNpZm5kZWYgRElTQUJMRV9PQ1NQCiAv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAg
ICBMb2FkIE9DU1AgaW5mb3JtYXRpb24gaW50byBzdGF0ZSAgICAgICAgICoKQEAgLTEyNDIsMTYg
KzEyODcsMTQgQEAKIEFTU1VNRVM6IHNpbmdsZSByZXNwb25zZSwgZm9yIHNpbmdsZSBjZXJ0Lgog
CiBBcmd1bWVudHM6Ci0gIHNjdHggICAgICAgICAgICB0aGUgU1NMX0NUWCogdG8gdXBkYXRlCi0g
IGNiaW5mbyAgICAgICAgICB2YXJpb3VzIHBhcnRzIG9mIHNlc3Npb24gc3RhdGUKKyAgc3RhdGUg
ICAgICAgICAgIHZhcmlvdXMgcGFydHMgb2Ygc2Vzc2lvbiBzdGF0ZQogICBmaWxlbmFtZSAgICAg
ICAgdGhlIGZpbGVuYW1lIHB1dGF0aXZlbHkgaG9sZGluZyBhbiBPQ1NQIHJlc3BvbnNlCiAgIGlz
X3BlbQkgIGZpbGUgaXMgUEVNIGZvcm1hdDsgb3RoZXJ3aXNlIGlzIERFUgotCiAqLwogCiBzdGF0
aWMgdm9pZAotb2NzcF9sb2FkX3Jlc3BvbnNlKFNTTF9DVFggKiBzY3R4LCB0bHNfZXh0X2N0eF9j
YiAqIGNiaW5mbywKLSAgY29uc3QgdXNjaGFyICogZmlsZW5hbWUsIEJPT0wgaXNfcGVtKQorb2Nz
cF9sb2FkX3Jlc3BvbnNlKGV4aW1fb3BlbnNzbF9zdGF0ZV9zdCAqIHN0YXRlLCBjb25zdCB1c2No
YXIgKiBmaWxlbmFtZSwKKyAgQk9PTCBpc19wZW0pCiB7CiBCSU8gKiBiaW87CiBPQ1NQX1JFU1BP
TlNFICogcmVzcDsKQEAgLTEyNjUsMTAgKzEzMDgsMTQgQEAKIERFQlVHKERfdGxzKQogICBkZWJ1
Z19wcmludGYoInRsc19vY3NwX2ZpbGUgKCVzKSAgJyVzJ1xuIiwgaXNfcGVtID8gIlBFTSIgOiAi
REVSIiwgZmlsZW5hbWUpOwogCitpZiAoIWZpbGVuYW1lIHx8ICEqZmlsZW5hbWUpIHJldHVybjsK
KworRVJSX2NsZWFyX2Vycm9yKCk7CiBpZiAoIShiaW8gPSBCSU9fbmV3X2ZpbGUoQ1MgZmlsZW5h
bWUsICJyYiIpKSkKICAgewotICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJGYWlsZWQgdG8g
b3BlbiBPQ1NQIHJlc3BvbnNlIGZpbGUgXCIlc1wiXG4iLAotICAgICAgZmlsZW5hbWUpOworICBs
b2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLAorICAgICJGYWlsZWQgdG8gb3BlbiBPQ1NQ
IHJlc3BvbnNlIGZpbGUgXCIlc1wiOiAlLjEwMHMiLAorICAgIGZpbGVuYW1lLCBFUlJfcmVhc29u
X2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCkpKTsKICAgcmV0dXJuOwogICB9CiAKQEAgLTEy
NzksMTEgKzEzMjYsMTAgQEAKICAgbG9uZyBsZW47CiAgIGlmICghUEVNX3JlYWRfYmlvKGJpbywg
JmR1bW15LCAmZHVtbXksICZkYXRhLCAmbGVuKSkKICAgICB7Ci0gICAgREVCVUcoRF90bHMpIGRl
YnVnX3ByaW50ZigiRmFpbGVkIHRvIHJlYWQgUEVNIGZpbGUgXCIlc1wiXG4iLAotCWZpbGVuYW1l
KTsKKyAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAiRmFpbGVkIHRvIHJlYWQg
UEVNIGZpbGUgXCIlc1wiOiAlLjEwMHMiLAorICAgICAgZmlsZW5hbWUsIEVSUl9yZWFzb25fZXJy
b3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSkpOwogICAgIHJldHVybjsKICAgICB9Ci1kZWJ1Z19w
cmludGYoInJlYWQgcGVtIGZpbGVcbiIpOwogICBmcmVlcCA9IGRhdGE7CiAgIHJlc3AgPSBkMmlf
T0NTUF9SRVNQT05TRShOVUxMLCBDVVNTICZkYXRhLCBsZW4pOwogICBPUEVOU1NMX2ZyZWUoZnJl
ZXApOwpAQCAtMTI5NCw3ICsxMzQwLDggQEAKIAogaWYgKCFyZXNwKQogICB7Ci0gIERFQlVHKERf
dGxzKSBkZWJ1Z19wcmludGYoIkVycm9yIHJlYWRpbmcgT0NTUCByZXNwb25zZS5cbiIpOworICBs
b2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAiRXJyb3IgcmVhZGluZyBPQ1NQIHJlc3Bv
bnNlIGZyb20gXCIlc1wiOiAlcyIsCisgICAgICBmaWxlbmFtZSwgRVJSX3JlYXNvbl9lcnJvcl9z
dHJpbmcoRVJSX2dldF9lcnJvcigpKSk7CiAgIHJldHVybjsKICAgfQogCkBAIC0xMzIwLDcgKzEz
NjcsNyBAQAogICBnb3RvIGJhZDsKICAgfQogCi1zayA9IGNiaW5mby0+dmVyaWZ5X3N0YWNrOwor
c2sgPSBzdGF0ZS0+dmVyaWZ5X3N0YWNrOwogdmVyaWZ5X2ZsYWdzID0gT0NTUF9OT1ZFUklGWTsg
LyogY2hlY2sgc2lncywgYnV0IG5vdCBwdXJwb3NlICovCiAKIC8qIE1heSBuZWVkIHRvIGV4cG9z
ZSBhYmlsaXR5IHRvIGFkanVzdCB0aG9zZSBmbGFncz8KQEAgLTEzOTYsMTAgKzE0NDMsMTAgQEAK
IHN1cHBseV9yZXNwb25zZToKICAgLyogQWRkIHRoZSByZXNwIHRvIHRoZSBsaXN0IHVzZWQgYnkg
dGxzX3NlcnZlcl9zdGFwbGluZ19jYigpICovCiAgIHsKLSAgb2NzcF9yZXNwbGlzdCAqKiBvcCA9
ICZjYmluZm8tPnVfb2NzcC5zZXJ2ZXIub2xpc3QsICogb2VudHJ5OworICBvY3NwX3Jlc3BsaXN0
ICoqIG9wID0gJnN0YXRlLT51X29jc3Auc2VydmVyLm9saXN0LCAqIG9lbnRyeTsKICAgd2hpbGUg
KG9lbnRyeSA9ICpvcCkKICAgICBvcCA9ICZvZW50cnktPm5leHQ7Ci0gICpvcCA9IG9lbnRyeSA9
IHN0b3JlX2dldChzaXplb2Yob2NzcF9yZXNwbGlzdCksIEZBTFNFKTsKKyAgKm9wID0gb2VudHJ5
ID0gc3RvcmVfZ2V0KHNpemVvZihvY3NwX3Jlc3BsaXN0KSwgR0VUX1VOVEFJTlRFRCk7CiAgIG9l
bnRyeS0+bmV4dCA9IE5VTEw7CiAgIG9lbnRyeS0+cmVzcCA9IHJlc3A7CiAgIH0KQEAgLTE0MjEs
NyArMTQ2OCw3IEBACiAKIAogc3RhdGljIHZvaWQKLW9jc3BfZnJlZV9yZXNwb25zZV9saXN0KHRs
c19leHRfY3R4X2NiICogY2JpbmZvKQorb2NzcF9mcmVlX3Jlc3BvbnNlX2xpc3QoZXhpbV9vcGVu
c3NsX3N0YXRlX3N0ICogY2JpbmZvKQogewogZm9yIChvY3NwX3Jlc3BsaXN0ICogb2xpc3QgPSBj
YmluZm8tPnVfb2NzcC5zZXJ2ZXIub2xpc3Q7IG9saXN0OwogICAgICBvbGlzdCA9IG9saXN0LT5u
ZXh0KQpAQCAtMTQzMyw3NCArMTQ4MCw5IEBACiAKIAogCi0vKiBDcmVhdGUgYW5kIGluc3RhbGwg
YSBzZWxmc2lnbmVkIGNlcnRpZmljYXRlLCBmb3IgdXNlIGluIHNlcnZlciBtb2RlICovCi0KLXN0
YXRpYyBpbnQKLXRsc19pbnN0YWxsX3NlbGZzaWduKFNTTF9DVFggKiBzY3R4LCB1c2NoYXIgKiog
ZXJyc3RyKQotewotWDUwOSAqIHg1MDkgPSBOVUxMOwotRVZQX1BLRVkgKiBwa2V5OwotUlNBICog
cnNhOwotWDUwOV9OQU1FICogbmFtZTsKLXVzY2hhciAqIHdoZXJlOwotCi13aGVyZSA9IFVTImFs
bG9jYXRpbmcgcGtleSI7Ci1pZiAoIShwa2V5ID0gRVZQX1BLRVlfbmV3KCkpKQotICBnb3RvIGVy
cjsKLQotd2hlcmUgPSBVUyJhbGxvY2F0aW5nIGNlcnQiOwotaWYgKCEoeDUwOSA9IFg1MDlfbmV3
KCkpKQotICBnb3RvIGVycjsKLQotd2hlcmUgPSBVUyJnZW5lcmF0aW5nIHBrZXkiOwotaWYgKCEo
cnNhID0gcnNhX2NhbGxiYWNrKE5VTEwsIDAsIDIwNDgpKSkKLSAgZ290byBlcnI7Ci0KLXdoZXJl
ID0gVVMiYXNzaWduaW5nIHBrZXkiOwotaWYgKCFFVlBfUEtFWV9hc3NpZ25fUlNBKHBrZXksIHJz
YSkpCi0gIGdvdG8gZXJyOwotCi1YNTA5X3NldF92ZXJzaW9uKHg1MDksIDIpOwkJCQkvKiBOKzEg
LSB2ZXJzaW9uIDMgKi8KLUFTTjFfSU5URUdFUl9zZXQoWDUwOV9nZXRfc2VyaWFsTnVtYmVyKHg1
MDkpLCAxKTsKLVg1MDlfZ210aW1lX2FkaihYNTA5X2dldF9ub3RCZWZvcmUoeDUwOSksIDApOwot
WDUwOV9nbXRpbWVfYWRqKFg1MDlfZ2V0X25vdEFmdGVyKHg1MDkpLCAobG9uZyk2MCAqIDYwKTsJ
LyogMSBob3VyICovCi1YNTA5X3NldF9wdWJrZXkoeDUwOSwgcGtleSk7Ci0KLW5hbWUgPSBYNTA5
X2dldF9zdWJqZWN0X25hbWUoeDUwOSk7Ci1YNTA5X05BTUVfYWRkX2VudHJ5X2J5X3R4dChuYW1l
LCAiQyIsCi0JCQkgIE1CU1RSSU5HX0FTQywgQ1VTICJVSyIsIC0xLCAtMSwgMCk7Ci1YNTA5X05B
TUVfYWRkX2VudHJ5X2J5X3R4dChuYW1lLCAiTyIsCi0JCQkgIE1CU1RSSU5HX0FTQywgQ1VTICJF
eGltIERldmVsb3BlcnMiLCAtMSwgLTEsIDApOwotWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV90eHQo
bmFtZSwgIkNOIiwKLQkJCSAgTUJTVFJJTkdfQVNDLCBDVVMgc210cF9hY3RpdmVfaG9zdG5hbWUs
IC0xLCAtMSwgMCk7Ci1YNTA5X3NldF9pc3N1ZXJfbmFtZSh4NTA5LCBuYW1lKTsKLQotd2hlcmUg
PSBVUyJzaWduaW5nIGNlcnQiOwotaWYgKCFYNTA5X3NpZ24oeDUwOSwgcGtleSwgRVZQX21kNSgp
KSkKLSAgZ290byBlcnI7Ci0KLXdoZXJlID0gVVMiaW5zdGFsbGluZyBzZWxmc2lnbiBjZXJ0IjsK
LWlmICghU1NMX0NUWF91c2VfY2VydGlmaWNhdGUoc2N0eCwgeDUwOSkpCi0gIGdvdG8gZXJyOwot
Ci13aGVyZSA9IFVTImluc3RhbGxpbmcgc2VsZnNpZ24ga2V5IjsKLWlmICghU1NMX0NUWF91c2Vf
UHJpdmF0ZUtleShzY3R4LCBwa2V5KSkKLSAgZ290byBlcnI7Ci0KLXJldHVybiBPSzsKLQotZXJy
OgotICAodm9pZCkgdGxzX2Vycm9yKHdoZXJlLCBOVUxMLCBOVUxMLCBlcnJzdHIpOwotICBpZiAo
eDUwOSkgWDUwOV9mcmVlKHg1MDkpOwotICBpZiAocGtleSkgRVZQX1BLRVlfZnJlZShwa2V5KTsK
LSAgcmV0dXJuIERFRkVSOwotfQotCi0KLQogCiBzdGF0aWMgaW50Ci10bHNfYWRkX2NlcnRmaWxl
KFNTTF9DVFggKiBzY3R4LCB0bHNfZXh0X2N0eF9jYiAqIGNiaW5mbywgdXNjaGFyICogZmlsZSwK
K3Rsc19hZGRfY2VydGZpbGUoU1NMX0NUWCAqIHNjdHgsIGV4aW1fb3BlbnNzbF9zdGF0ZV9zdCAq
IGNiaW5mbywgdXNjaGFyICogZmlsZSwKICAgdXNjaGFyICoqIGVycnN0cikKIHsKIERFQlVHKERf
dGxzKSBkZWJ1Z19wcmludGYoInRsc19jZXJ0aWZpY2F0ZSBmaWxlICclcydcbiIsIGZpbGUpOwpA
QCAtMTUxMiw3ICsxNDk0LDcgQEAKIH0KIAogc3RhdGljIGludAotdGxzX2FkZF9wa2V5ZmlsZShT
U0xfQ1RYICogc2N0eCwgdGxzX2V4dF9jdHhfY2IgKiBjYmluZm8sIHVzY2hhciAqIGZpbGUsCit0
bHNfYWRkX3BrZXlmaWxlKFNTTF9DVFggKiBzY3R4LCBleGltX29wZW5zc2xfc3RhdGVfc3QgKiBj
YmluZm8sIHVzY2hhciAqIGZpbGUsCiAgIHVzY2hhciAqKiBlcnJzdHIpCiB7CiBERUJVRyhEX3Rs
cykgZGVidWdfcHJpbnRmKCJ0bHNfcHJpdmF0ZWtleSBmaWxlICAnJXMnXG4iLCBmaWxlKTsKQEAg
LTE1MjMsOSArMTUwNSw3IEBACiB9CiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKLSogICAgICAgIEV4cGFuZCBrZXkgYW5kIGNlcnQgZmlsZSBz
cGVjcyAgICAgICAgICAqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworCiAKIC8qIENhbGxlZCBvbmNlIGR1cmluZyB0bHNfaW5pdCBhbmQgcG9zc2li
bHkgYWdhaW4gZHVyaW5nIFRMUyBzZXR1cCwgZm9yIGEKIG5ldyBjb250ZXh0LCBpZiBTZXJ2ZXIg
TmFtZSBJbmRpY2F0aW9uIHdhcyB1c2VkIGFuZCB0bHNfc25pIHdhcyBzZWVuIGluCkBAIC0xNTMz
LDIxICsxNTEzLDIxIEBACiAKIEFyZ3VtZW50czoKICAgc2N0eCAgICAgICAgICAgIHRoZSBTU0xf
Q1RYKiB0byB1cGRhdGUKLSAgY2JpbmZvICAgICAgICAgIHZhcmlvdXMgcGFydHMgb2Ygc2Vzc2lv
biBzdGF0ZQorICBzdGF0ZSAgICAgICAgICAgdmFyaW91cyBwYXJ0cyBvZiBzZXNzaW9uIHN0YXRl
CiAgIGVycnN0cgkgIGVycm9yIHN0cmluZyBwb2ludGVyCiAKIFJldHVybnM6ICAgICAgICAgIE9L
L0RFRkVSL0ZBSUwKICovCiAKIHN0YXRpYyBpbnQKLXRsc19leHBhbmRfc2Vzc2lvbl9maWxlcyhT
U0xfQ1RYICogc2N0eCwgdGxzX2V4dF9jdHhfY2IgKiBjYmluZm8sCit0bHNfZXhwYW5kX3Nlc3Np
b25fZmlsZXMoU1NMX0NUWCAqIHNjdHgsIGV4aW1fb3BlbnNzbF9zdGF0ZV9zdCAqIHN0YXRlLAog
ICB1c2NoYXIgKiogZXJyc3RyKQogewogdXNjaGFyICogZXhwYW5kZWQ7CiAKLWlmICghY2JpbmZv
LT5jZXJ0aWZpY2F0ZSkKK2lmICghc3RhdGUtPmNlcnRpZmljYXRlKQogICB7Ci0gIGlmICghY2Jp
bmZvLT5pc19zZXJ2ZXIpCQkvKiBjbGllbnQgKi8KKyAgaWYgKCFzdGF0ZS0+aXNfc2VydmVyKQkJ
LyogY2xpZW50ICovCiAgICAgcmV0dXJuIE9LOwogCQkJCQkvKiBzZXJ2ZXIgKi8KICAgaWYgKHRs
c19pbnN0YWxsX3NlbGZzaWduKHNjdHgsIGVycnN0cikgIT0gT0spCkBAIC0xNTU4LDIzICsxNTM4
LDIzIEBACiAgIGludCBlcnI7CiAKICAgaWYgKCAhcmVleHBhbmRfdGxzX2ZpbGVzX2Zvcl9zbmkK
LSAgICAgJiYgKCAgVXN0cnN0cihjYmluZm8tPmNlcnRpZmljYXRlLCBVUyJ0bHNfc25pIikKLQl8
fCBVc3Ryc3RyKGNiaW5mby0+Y2VydGlmaWNhdGUsIFVTInRsc19pbl9zbmkiKQotCXx8IFVzdHJz
dHIoY2JpbmZvLT5jZXJ0aWZpY2F0ZSwgVVMidGxzX291dF9zbmkiKQorICAgICAmJiAoICBVc3Ry
c3RyKHN0YXRlLT5jZXJ0aWZpY2F0ZSwgVVMidGxzX3NuaSIpCisJfHwgVXN0cnN0cihzdGF0ZS0+
Y2VydGlmaWNhdGUsIFVTInRsc19pbl9zbmkiKQorCXx8IFVzdHJzdHIoc3RhdGUtPmNlcnRpZmlj
YXRlLCBVUyJ0bHNfb3V0X3NuaSIpCiAgICAgICkgICkKICAgICByZWV4cGFuZF90bHNfZmlsZXNf
Zm9yX3NuaSA9IFRSVUU7CiAKLSAgaWYgKCFleHBhbmRfY2hlY2soY2JpbmZvLT5jZXJ0aWZpY2F0
ZSwgVVMidGxzX2NlcnRpZmljYXRlIiwgJmV4cGFuZGVkLCBlcnJzdHIpKQorICBpZiAoIWV4cGFu
ZF9jaGVjayhzdGF0ZS0+Y2VydGlmaWNhdGUsIFVTInRsc19jZXJ0aWZpY2F0ZSIsICZleHBhbmRl
ZCwgZXJyc3RyKSkKICAgICByZXR1cm4gREVGRVI7CiAKICAgaWYgKGV4cGFuZGVkKQotICAgIGlm
IChjYmluZm8tPmlzX3NlcnZlcikKKyAgICBpZiAoc3RhdGUtPmlzX3NlcnZlcikKICAgICAgIHsK
ICAgICAgIGNvbnN0IHVzY2hhciAqIGZpbGVfbGlzdCA9IGV4cGFuZGVkOwogICAgICAgaW50IHNl
cCA9IDA7CiAgICAgICB1c2NoYXIgKiBmaWxlOwogI2lmbmRlZiBESVNBQkxFX09DU1AKLSAgICAg
IGNvbnN0IHVzY2hhciAqIG9saXN0ID0gY2JpbmZvLT51X29jc3Auc2VydmVyLmZpbGU7CisgICAg
ICBjb25zdCB1c2NoYXIgKiBvbGlzdCA9IHN0YXRlLT51X29jc3Auc2VydmVyLmZpbGU7CiAgICAg
ICBpbnQgb3NlcCA9IDA7CiAgICAgICB1c2NoYXIgKiBvZmlsZTsKICAgICAgIEJPT0wgZm10X3Bl
bSA9IEZBTFNFOwpAQCAtMTU4NSwyMiArMTU2NSwyMiBAQAogICAgICAgaWYgKG9saXN0ICYmICEq
b2xpc3QpCiAJb2xpc3QgPSBOVUxMOwogCi0gICAgICBpZiAoICBjYmluZm8tPnVfb2NzcC5zZXJ2
ZXIuZmlsZV9leHBhbmRlZCAmJiBvbGlzdAotCSAmJiAoVXN0cmNtcChvbGlzdCwgY2JpbmZvLT51
X29jc3Auc2VydmVyLmZpbGVfZXhwYW5kZWQpID09IDApKQorICAgICAgaWYgKCAgc3RhdGUtPnVf
b2NzcC5zZXJ2ZXIuZmlsZV9leHBhbmRlZCAmJiBvbGlzdAorCSAmJiAoVXN0cmNtcChvbGlzdCwg
c3RhdGUtPnVfb2NzcC5zZXJ2ZXIuZmlsZV9leHBhbmRlZCkgPT0gMCkpCiAJewogCURFQlVHKERf
dGxzKSBkZWJ1Z19wcmludGYoIiAtIHZhbHVlIHVuY2hhbmdlZCwgdXNpbmcgZXhpc3RpbmcgdmFs
dWVzXG4iKTsKIAlvbGlzdCA9IE5VTEw7CiAJfQogICAgICAgZWxzZQogCXsKLQlvY3NwX2ZyZWVf
cmVzcG9uc2VfbGlzdChjYmluZm8pOwotCWNiaW5mby0+dV9vY3NwLnNlcnZlci5maWxlX2V4cGFu
ZGVkID0gb2xpc3Q7CisJb2NzcF9mcmVlX3Jlc3BvbnNlX2xpc3Qoc3RhdGUpOworCXN0YXRlLT51
X29jc3Auc2VydmVyLmZpbGVfZXhwYW5kZWQgPSBvbGlzdDsKIAl9CiAjZW5kaWYKIAogICAgICAg
d2hpbGUgKGZpbGUgPSBzdHJpbmdfbmV4dGlubGlzdCgmZmlsZV9saXN0LCAmc2VwLCBOVUxMLCAw
KSkKIAl7Ci0JaWYgKChlcnIgPSB0bHNfYWRkX2NlcnRmaWxlKHNjdHgsIGNiaW5mbywgZmlsZSwg
ZXJyc3RyKSkpCisJaWYgKChlcnIgPSB0bHNfYWRkX2NlcnRmaWxlKHNjdHgsIHN0YXRlLCBmaWxl
LCBlcnJzdHIpKSkKIAkgIHJldHVybiBlcnI7CiAKICNpZm5kZWYgRElTQUJMRV9PQ1NQCkBAIC0x
NjE3LDcgKzE1OTcsNyBAQAogCSAgICAgIGZtdF9wZW0gPSBGQUxTRTsKIAkgICAgICBvZmlsZSAr
PSA0OwogCSAgICAgIH0KLQkgICAgb2NzcF9sb2FkX3Jlc3BvbnNlKHNjdHgsIGNiaW5mbywgb2Zp
bGUsIGZtdF9wZW0pOworCSAgICBvY3NwX2xvYWRfcmVzcG9uc2Uoc3RhdGUsIG9maWxlLCBmbXRf
cGVtKTsKIAkgICAgfQogCSAgZWxzZQogCSAgICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJy
YW4gb3V0IG9mIG9jc3AgZmlsZSBsaXN0XG4iKTsKQEAgLTE2MjUsMTEgKzE2MDUsMTEgQEAKIAl9
CiAgICAgICB9CiAgICAgZWxzZQkvKiB3b3VsZCB0aGVyZSBldmVyIGJlIGEgbmVlZCBmb3IgbXVs
dGlwbGUgY2xpZW50IGNlcnRzPyAqLwotICAgICAgaWYgKChlcnIgPSB0bHNfYWRkX2NlcnRmaWxl
KHNjdHgsIGNiaW5mbywgZXhwYW5kZWQsIGVycnN0cikpKQorICAgICAgaWYgKChlcnIgPSB0bHNf
YWRkX2NlcnRmaWxlKHNjdHgsIHN0YXRlLCBleHBhbmRlZCwgZXJyc3RyKSkpCiAJcmV0dXJuIGVy
cjsKIAotICBpZiAoICBjYmluZm8tPnByaXZhdGVrZXkKLSAgICAgJiYgIWV4cGFuZF9jaGVjayhj
YmluZm8tPnByaXZhdGVrZXksIFVTInRsc19wcml2YXRla2V5IiwgJmV4cGFuZGVkLCBlcnJzdHIp
KQorICBpZiAoICBzdGF0ZS0+cHJpdmF0ZWtleQorICAgICAmJiAhZXhwYW5kX2NoZWNrKHN0YXRl
LT5wcml2YXRla2V5LCBVUyJ0bHNfcHJpdmF0ZWtleSIsICZleHBhbmRlZCwgZXJyc3RyKSkKICAg
ICByZXR1cm4gREVGRVI7CiAKICAgLyogSWYgZXhwYW5zaW9uIHdhcyBmb3JjZWQgdG8gZmFpbCwg
a2V5X2V4cGFuZGVkIHdpbGwgYmUgTlVMTC4gSWYgdGhlIHJlc3VsdApAQCAtMTYzNywxOCArMTYx
NywxOCBAQAogICBrZXkgaXMgaW4gdGhlIHNhbWUgZmlsZSBhcyB0aGUgY2VydGlmaWNhdGUuICov
CiAKICAgaWYgKGV4cGFuZGVkICYmICpleHBhbmRlZCkKLSAgICBpZiAoY2JpbmZvLT5pc19zZXJ2
ZXIpCisgICAgaWYgKHN0YXRlLT5pc19zZXJ2ZXIpCiAgICAgICB7CiAgICAgICBjb25zdCB1c2No
YXIgKiBmaWxlX2xpc3QgPSBleHBhbmRlZDsKICAgICAgIGludCBzZXAgPSAwOwogICAgICAgdXNj
aGFyICogZmlsZTsKIAogICAgICAgd2hpbGUgKGZpbGUgPSBzdHJpbmdfbmV4dGlubGlzdCgmZmls
ZV9saXN0LCAmc2VwLCBOVUxMLCAwKSkKLQlpZiAoKGVyciA9IHRsc19hZGRfcGtleWZpbGUoc2N0
eCwgY2JpbmZvLCBmaWxlLCBlcnJzdHIpKSkKKwlpZiAoKGVyciA9IHRsc19hZGRfcGtleWZpbGUo
c2N0eCwgc3RhdGUsIGZpbGUsIGVycnN0cikpKQogCSAgcmV0dXJuIGVycjsKICAgICAgIH0KICAg
ICBlbHNlCS8qIHdvdWxkIHRoZXJlIGV2ZXIgYmUgYSBuZWVkIGZvciBtdWx0aXBsZSBjbGllbnQg
Y2VydHM/ICovCi0gICAgICBpZiAoKGVyciA9IHRsc19hZGRfcGtleWZpbGUoc2N0eCwgY2JpbmZv
LCBleHBhbmRlZCwgZXJyc3RyKSkpCisgICAgICBpZiAoKGVyciA9IHRsc19hZGRfcGtleWZpbGUo
c2N0eCwgc3RhdGUsIGV4cGFuZGVkLCBlcnJzdHIpKSkKIAlyZXR1cm4gZXJyOwogICB9CiAKQEAg
LTE2NTgsNiArMTYzOCw1MDQgQEAKIAogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgorKiBPbmUtdGltZSBpbml0IGNyZWRlbnRpYWxzIGZvciBz
ZXJ2ZXIgYW5kIGNsaWVudCAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK25vcm1hbGlzZV9jaXBoZXJzKHVzY2hhciAq
KiBjaXBoZXJzLCBjb25zdCB1c2NoYXIgKiBwcmVfZXhwYW5zaW9uX2NpcGhlcnMpCit7Cit1c2No
YXIgKiBzID0gKmNpcGhlcnM7CisKK2lmICghcyB8fCAhVXN0cmNocihzLCAnXycpKSByZXR1cm47
CS8qIG5vIGNoYW5nZSBuZWVkZWQgKi8KKworaWYgKHMgPT0gcHJlX2V4cGFuc2lvbl9jaXBoZXJz
KQorICBzID0gc3RyaW5nX2NvcHkocyk7CQkJLyogZ2V0IHdyaXRhYmxlIGNvcHkgKi8KKworZm9y
ICh1c2NoYXIgKiB0ID0gczsgKnQ7IHQrKykgaWYgKCp0ID09ICdfJykgKnQgPSAnLSc7CisqY2lw
aGVycyA9IHM7Cit9CisKK3N0YXRpYyBpbnQKK3NlcnZlcl9sb2FkX2NpcGhlcnMoU1NMX0NUWCAq
IGN0eCwgZXhpbV9vcGVuc3NsX3N0YXRlX3N0ICogc3RhdGUsCisgIHVzY2hhciAqIGNpcGhlcnMs
IHVzY2hhciAqKiBlcnJzdHIpCit7CitERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJyZXF1aXJl
ZCBjaXBoZXJzOiAlc1xuIiwgY2lwaGVycyk7CitpZiAoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0
KGN0eCwgQ1MgY2lwaGVycykpCisgIHJldHVybiB0bHNfZXJyb3IoVVMiU1NMX0NUWF9zZXRfY2lw
aGVyX2xpc3QiLCBOVUxMLCBOVUxMLCBlcnJzdHIpOworc3RhdGUtPnNlcnZlcl9jaXBoZXJfbGlz
dCA9IGNpcGhlcnM7CityZXR1cm4gT0s7Cit9CisKKworCitzdGF0aWMgaW50CitsaWJfY3R4X25l
dyhTU0xfQ1RYICoqIGN0eHAsIGhvc3RfaXRlbSAqIGhvc3QsIHVzY2hhciAqKiBlcnJzdHIpCit7
CitTU0xfQ1RYICogY3R4OworI2lmZGVmIEVYSU1fSEFWRV9PUEVOU1NMX1RMU19NRVRIT0QKK2lm
ICghKGN0eCA9IFNTTF9DVFhfbmV3KGhvc3QgPyBUTFNfY2xpZW50X21ldGhvZCgpIDogVExTX3Nl
cnZlcl9tZXRob2QoKSkpKQorI2Vsc2UKK2lmICghKGN0eCA9IFNTTF9DVFhfbmV3KGhvc3QgPyBT
U0x2MjNfY2xpZW50X21ldGhvZCgpIDogU1NMdjIzX3NlcnZlcl9tZXRob2QoKSkpKQorI2VuZGlm
CisgIHJldHVybiB0bHNfZXJyb3IoVVMiU1NMX0NUWF9uZXciLCBob3N0LCBOVUxMLCBlcnJzdHIp
OworCisvKiBTZXQgdXAgdGhlIGluZm9ybWF0aW9uIGNhbGxiYWNrLCB3aGljaCBvdXRwdXRzIGlm
IGRlYnVnZ2luZyBpcyBhdCBhIHN1aXRhYmxlCitsZXZlbC4gKi8KKworREVCVUcoRF90bHMpCisg
IHsKKyAgU1NMX0NUWF9zZXRfaW5mb19jYWxsYmFjayhjdHgsICh2b2lkICgqKSgpKWluZm9fY2Fs
bGJhY2spOworI2lmIGRlZmluZWQoRVhJTV9IQVZFX09QRVNTTF9UUkFDRSkgJiYgIWRlZmluZWQo
T1BFTlNTTF9OT19TU0xfVFJBQ0UpCisgIC8qIHRoaXMgbmVlZHMgYSBkZWJ1ZyBidWlsZCBvZiBP
cGVuU1NMICovCisgIFNTTF9DVFhfc2V0X21zZ19jYWxsYmFjayhjdHgsICh2b2lkICgqKSgpKVNT
TF90cmFjZSk7CisjZW5kaWYKKyNpZmRlZiBPUEVOU1NMX0hBVkVfS0VZTE9HX0NCCisgIFNTTF9D
VFhfc2V0X2tleWxvZ19jYWxsYmFjayhjdHgsICh2b2lkICgqKSgpKWtleWxvZ19jYWxsYmFjayk7
CisjZW5kaWYKKyAgfQorCisvKiBBdXRvbWF0aWNhbGx5IHJlLXRyeSByZWFkcy93cml0ZXMgYWZ0
ZXIgcmVuZWdvdGlhdGlvbi4gKi8KKyh2b2lkKSBTU0xfQ1RYX3NldF9tb2RlKGN0eCwgU1NMX01P
REVfQVVUT19SRVRSWSk7CisqY3R4cCA9IGN0eDsKK3JldHVybiBPSzsKK30KKworCitzdGF0aWMg
dW5zaWduZWQKK3Rsc19zZXJ2ZXJfY3JlZHNfaW5pdCh2b2lkKQoreworU1NMX0NUWCAqIGN0eDsK
K3VzY2hhciAqIGR1bW15X2VycnN0cjsKK3Vuc2lnbmVkIGxpZmV0aW1lID0gMDsKKwordGxzX29w
ZW5zc2xfaW5pdCgpOworCitzdGF0ZV9zZXJ2ZXIubGliX3N0YXRlID0gbnVsbF90bHNfcHJlbG9h
ZDsKKworaWYgKGxpYl9jdHhfbmV3KCZjdHgsIE5VTEwsICZkdW1teV9lcnJzdHIpICE9IE9LKQor
ICByZXR1cm4gMDsKK3N0YXRlX3NlcnZlci5saWJfc3RhdGUubGliX2N0eCA9IGN0eDsKKworLyog
UHJlbG9hZCBESCBwYXJhbXMgYW5kIEVDIGN1cnZlICovCisKK2lmIChvcHRfdW5zZXRfb3Jfbm9l
eHBhbmQodGxzX2RocGFyYW0pKQorICB7CisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlRM
UzogcHJlbG9hZGluZyBESCBwYXJhbXMgZm9yIHNlcnZlclxuIik7CisgIGlmIChpbml0X2RoKGN0
eCwgdGxzX2RocGFyYW0sICZkdW1teV9lcnJzdHIpKQorICAgIHN0YXRlX3NlcnZlci5saWJfc3Rh
dGUuZGggPSBUUlVFOworICB9CitlbHNlCisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlRM
Uzogbm90IHByZWxvYWRpbmcgREggcGFyYW1zIGZvciBzZXJ2ZXJcbiIpOworaWYgKG9wdF91bnNl
dF9vcl9ub2V4cGFuZCh0bHNfZWNjdXJ2ZSkpCisgIHsKKyAgREVCVUcoRF90bHMpIGRlYnVnX3By
aW50ZigiVExTOiBwcmVsb2FkaW5nIEVDREggY3VydmUgZm9yIHNlcnZlclxuIik7CisgIGlmIChp
bml0X2VjZGgoY3R4LCAmZHVtbXlfZXJyc3RyKSkKKyAgICBzdGF0ZV9zZXJ2ZXIubGliX3N0YXRl
LmVjZGggPSBUUlVFOworICB9CitlbHNlCisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlRM
Uzogbm90IHByZWxvYWRpbmcgRUNESCBjdXJ2ZSBmb3Igc2VydmVyXG4iKTsKKworI2lmIGRlZmlu
ZWQoRVhJTV9IQVZFX0lOT1RJRlkpIHx8IGRlZmluZWQoRVhJTV9IQVZFX0tFVkVOVCkKKy8qIElm
IHdlIGNhbiwgcHJlbG9hZCB0aGUgc2VydmVyLXNpZGUgY2VydCwga2V5IGFuZCBvY3NwICovCisK
K2lmICggIG9wdF9zZXRfYW5kX25vZXhwYW5kKHRsc19jZXJ0aWZpY2F0ZSkKKyMgaWZuZGVmIERJ
U0FCTEVfT0NTUAorICAgJiYgb3B0X3Vuc2V0X29yX25vZXhwYW5kKHRsc19vY3NwX2ZpbGUpCisj
ZW5kaWYKKyAgICYmIG9wdF91bnNldF9vcl9ub2V4cGFuZCh0bHNfcHJpdmF0ZWtleSkpCisgIHsK
KyAgLyogU2V0IHdhdGNoZXMgb24gdGhlIGZpbGVuYW1lcy4gIFRoZSBpbXBsZW1lbnRhdGlvbiBk
b2VzIGRlLWR1cGxpY2F0aW9uCisgIHNvIHdlIGNhbiBqdXN0IGJsaW5kbHkgZG8gdGhlbSBhbGwu
ICAqLworCisgIGlmICggIHRsc19zZXRfd2F0Y2godGxzX2NlcnRpZmljYXRlLCBUUlVFKQorIyBp
Zm5kZWYgRElTQUJMRV9PQ1NQCisgICAgICYmIHRsc19zZXRfd2F0Y2godGxzX29jc3BfZmlsZSwg
VFJVRSkKKyNlbmRpZgorICAgICAmJiB0bHNfc2V0X3dhdGNoKHRsc19wcml2YXRla2V5LCBUUlVF
KSkKKyAgICB7CisgICAgc3RhdGVfc2VydmVyLmNlcnRpZmljYXRlID0gdGxzX2NlcnRpZmljYXRl
OworICAgIHN0YXRlX3NlcnZlci5wcml2YXRla2V5ID0gdGxzX3ByaXZhdGVrZXk7CisjaWZuZGVm
IERJU0FCTEVfT0NTUAorICAgIHN0YXRlX3NlcnZlci51X29jc3Auc2VydmVyLmZpbGUgPSB0bHNf
b2NzcF9maWxlOworI2VuZGlmCisKKyAgICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJUTFM6
IHByZWxvYWRpbmcgc2VydmVyIGNlcnRzXG4iKTsKKyAgICBpZiAodGxzX2V4cGFuZF9zZXNzaW9u
X2ZpbGVzKGN0eCwgJnN0YXRlX3NlcnZlciwgJmR1bW15X2VycnN0cikgPT0gT0spCisgICAgICBz
dGF0ZV9zZXJ2ZXIubGliX3N0YXRlLmNvbm5fY2VydHMgPSBUUlVFOworICAgIH0KKyAgfQorZWxz
ZSBpZiAoICAhdGxzX2NlcnRpZmljYXRlICYmICF0bHNfcHJpdmF0ZWtleQorIyBpZm5kZWYgRElT
QUJMRV9PQ1NQCisJJiYgIXRsc19vY3NwX2ZpbGUKKyNlbmRpZgorICAgKQorICB7CQkvKiBHZW5l
cmF0ZSAmIHByZWxvYWQgYSBzZWxmc2lnbmVkIGNlcnQuIE5vIGZpbGVzIHRvIHdhdGNoLiAqLwor
ICBpZiAodGxzX2V4cGFuZF9zZXNzaW9uX2ZpbGVzKGN0eCwgJnN0YXRlX3NlcnZlciwgJmR1bW15
X2VycnN0cikgPT0gT0spCisgICAgeworICAgIHN0YXRlX3NlcnZlci5saWJfc3RhdGUuY29ubl9j
ZXJ0cyA9IFRSVUU7CisgICAgbGlmZXRpbWUgPSBmLnJ1bm5pbmdfaW5fdGVzdF9oYXJuZXNzID8g
MiA6IDYwICogNjA7CQkvKiAxIGhvdXIgKi8KKyAgICB9CisgIH0KK2Vsc2UKKyAgREVCVUcoRF90
bHMpIGRlYnVnX3ByaW50ZigiVExTOiBub3QgcHJlbG9hZGluZyBzZXJ2ZXIgY2VydHNcbiIpOwor
CisKKy8qIElmIHdlIGNhbiwgcHJlbG9hZCB0aGUgQXV0aG9yaXRpZXMgZm9yIGNoZWNraW5nIGNs
aWVudCBjZXJ0cyBhZ2FpbnN0LgorQWN0dWFsIGNob2ljZSB0byBkbyB2ZXJpZnkgaXMgbWFkZSAo
dGxzX3ssdHJ5X312ZXJpZnlfaG9zdHMpCithdCBUTFMgY29ubiBzdGFydHVwICovCisKK2lmICgg
IG9wdF9zZXRfYW5kX25vZXhwYW5kKHRsc192ZXJpZnlfY2VydGlmaWNhdGVzKQorICAgJiYgb3B0
X3Vuc2V0X29yX25vZXhwYW5kKHRsc19jcmwpKQorICB7CisgIC8qIFdhdGNoIHRoZSBkZWZhdWx0
IGRpciBhbHNvIGFzIHRoZXkgYXJlIGFsd2F5cyBpbmNsdWRlZCAqLworCisgIGlmICggIHRsc19z
ZXRfd2F0Y2goQ1VTIFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlKCksIEZBTFNFKQorICAgICAm
JiB0bHNfc2V0X3dhdGNoKHRsc192ZXJpZnlfY2VydGlmaWNhdGVzLCBGQUxTRSkKKyAgICAgJiYg
dGxzX3NldF93YXRjaCh0bHNfY3JsLCBGQUxTRSkpCisgICAgeworICAgIERFQlVHKERfdGxzKSBk
ZWJ1Z19wcmludGYoIlRMUzogcHJlbG9hZGluZyBDQSBidW5kbGUgZm9yIHNlcnZlclxuIik7CisK
KyAgICBpZiAoc2V0dXBfY2VydHMoY3R4LCB0bHNfdmVyaWZ5X2NlcnRpZmljYXRlcywgdGxzX2Ny
bCwgTlVMTCwgJmR1bW15X2VycnN0cikKKwk9PSBPSykKKyAgICAgIHN0YXRlX3NlcnZlci5saWJf
c3RhdGUuY2FidW5kbGUgPSBUUlVFOworICAgIH0KKyAgfQorZWxzZQorICBERUJVRyhEX3Rscykg
ZGVidWdfcHJpbnRmKCJUTFM6IG5vdCBwcmVsb2FkaW5nIENBIGJ1bmRsZSBmb3Igc2VydmVyXG4i
KTsKKyNlbmRpZgkvKiBFWElNX0hBVkVfSU5PVElGWSAqLworCisKKy8qIElmIHdlIGNhbiwgcHJl
bG9hZCB0aGUgY2lwaGVycyBjb250cm9sIHN0cmluZyAqLworCitpZiAob3B0X3NldF9hbmRfbm9l
eHBhbmQodGxzX3JlcXVpcmVfY2lwaGVycykpCisgIHsKKyAgREVCVUcoRF90bHMpIGRlYnVnX3By
aW50ZigiVExTOiBwcmVsb2FkaW5nIGNpcGhlciBsaXN0IGZvciBzZXJ2ZXJcbiIpOworICBub3Jt
YWxpc2VfY2lwaGVycygmdGxzX3JlcXVpcmVfY2lwaGVycywgdGxzX3JlcXVpcmVfY2lwaGVycyk7
CisgIGlmIChzZXJ2ZXJfbG9hZF9jaXBoZXJzKGN0eCwgJnN0YXRlX3NlcnZlciwgdGxzX3JlcXVp
cmVfY2lwaGVycywKKwkJCSAgJmR1bW15X2VycnN0cikgPT0gT0spCisgICAgc3RhdGVfc2VydmVy
LmxpYl9zdGF0ZS5wcmlfc3RyaW5nID0gVFJVRTsKKyAgfQorZWxzZQorICBERUJVRyhEX3Rscykg
ZGVidWdfcHJpbnRmKCJUTFM6IG5vdCBwcmVsb2FkaW5nIGNpcGhlciBsaXN0IGZvciBzZXJ2ZXJc
biIpOworcmV0dXJuIGxpZmV0aW1lOworfQorCisKKworCisvKiBQcmVsb2FkIHdoYXRldmVyIGNy
ZWRzIGFyZSBzdGF0aWMsIG9udG8gYSB0cmFuc3BvcnQuICBUaGUgY2xpZW50IGNhbiB0aGVuCitq
dXN0IGNvcHkgdGhlIHBvaW50ZXIgYXMgaXQgc3RhcnRzIHVwLgorQ2FsbGVkIGZyb20gdGhlIGRh
ZW1vbiBhZnRlciBhIGNhY2hlLWludmFsaWRhdGUgd2l0aCB3YXRjaCBzZXQ7IGNhbGxlZCBmcm9t
CithIHF1ZXVlLXJ1biBzdGFydHVwIHdpdGggd2F0Y2ggY2xlYXIuICovCisKK3N0YXRpYyB2b2lk
Cit0bHNfY2xpZW50X2NyZWRzX2luaXQodHJhbnNwb3J0X2luc3RhbmNlICogdCwgQk9PTCB3YXRj
aCkKK3sKK3NtdHBfdHJhbnNwb3J0X29wdGlvbnNfYmxvY2sgKiBvYiA9IHQtPm9wdGlvbnNfYmxv
Y2s7CitleGltX29wZW5zc2xfc3RhdGVfc3QgdHB0X2R1bW15X3N0YXRlOworaG9zdF9pdGVtICog
ZHVtbXlfaG9zdCA9IChob3N0X2l0ZW0gKikxOwordXNjaGFyICogZHVtbXlfZXJyc3RyOworU1NM
X0NUWCAqIGN0eDsKKwordGxzX29wZW5zc2xfaW5pdCgpOworCitvYi0+dGxzX3ByZWxvYWQgPSBu
dWxsX3Rsc19wcmVsb2FkOworaWYgKGxpYl9jdHhfbmV3KCZjdHgsIGR1bW15X2hvc3QsICZkdW1t
eV9lcnJzdHIpICE9IE9LKQorICByZXR1cm47CitvYi0+dGxzX3ByZWxvYWQubGliX2N0eCA9IGN0
eDsKKwordHB0X2R1bW15X3N0YXRlLmxpYl9zdGF0ZSA9IG9iLT50bHNfcHJlbG9hZDsKKworI2lm
IGRlZmluZWQoRVhJTV9IQVZFX0lOT1RJRlkpIHx8IGRlZmluZWQoRVhJTV9IQVZFX0tFVkVOVCkK
K2lmICggIG9wdF9zZXRfYW5kX25vZXhwYW5kKG9iLT50bHNfY2VydGlmaWNhdGUpCisgICAmJiBv
cHRfdW5zZXRfb3Jfbm9leHBhbmQob2ItPnRsc19wcml2YXRla2V5KSkKKyAgeworICBpZiAoICAh
d2F0Y2gKKyAgICAgfHwgKCAgdGxzX3NldF93YXRjaChvYi0+dGxzX2NlcnRpZmljYXRlLCBGQUxT
RSkKKwkmJiB0bHNfc2V0X3dhdGNoKG9iLT50bHNfcHJpdmF0ZWtleSwgRkFMU0UpCisgICAgICkg
ICkKKyAgICB7CisgICAgdXNjaGFyICogcGtleSA9IG9iLT50bHNfcHJpdmF0ZWtleTsKKworICAg
IERFQlVHKERfdGxzKQorICAgICAgZGVidWdfcHJpbnRmKCJUTFM6IHByZWxvYWRpbmcgY2xpZW50
IGNlcnRzIGZvciB0cmFuc3BvcnQgJyVzJ1xuIix0LT5uYW1lKTsKKworICAgIGlmICggIHRsc19h
ZGRfY2VydGZpbGUoY3R4LCAmdHB0X2R1bW15X3N0YXRlLCBvYi0+dGxzX2NlcnRpZmljYXRlLAor
CQkJCSAgICAmZHVtbXlfZXJyc3RyKSA9PSAwCisgICAgICAgJiYgdGxzX2FkZF9wa2V5ZmlsZShj
dHgsICZ0cHRfZHVtbXlfc3RhdGUsCisJCQkJICAgIHBrZXkgPyBwa2V5IDogb2ItPnRsc19jZXJ0
aWZpY2F0ZSwKKwkJCQkgICAgJmR1bW15X2VycnN0cikgPT0gMAorICAgICAgICkKKyAgICAgIG9i
LT50bHNfcHJlbG9hZC5jb25uX2NlcnRzID0gVFJVRTsKKyAgICB9CisgIH0KK2Vsc2UKKyAgREVC
VUcoRF90bHMpCisgICAgZGVidWdfcHJpbnRmKCJUTFM6IG5vdCBwcmVsb2FkaW5nIGNsaWVudCBj
ZXJ0cywgZm9yIHRyYW5zcG9ydCAnJXMnXG4iLCB0LT5uYW1lKTsKKworCitpZiAoICBvcHRfc2V0
X2FuZF9ub2V4cGFuZChvYi0+dGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMpCisgICAmJiBvcHRfdW5z
ZXRfb3Jfbm9leHBhbmQob2ItPnRsc19jcmwpKQorICB7CisgIGlmICggICF3YXRjaAorICAgICB8
fCAgICB0bHNfc2V0X3dhdGNoKENVUyBYNTA5X2dldF9kZWZhdWx0X2NlcnRfZmlsZSgpLCBGQUxT
RSkKKyAgICAgICAgJiYgdGxzX3NldF93YXRjaChvYi0+dGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMs
IEZBTFNFKQorCSYmIHRsc19zZXRfd2F0Y2gob2ItPnRsc19jcmwsIEZBTFNFKQorICAgICApCisg
ICAgeworICAgIERFQlVHKERfdGxzKQorICAgICAgZGVidWdfcHJpbnRmKCJUTFM6IHByZWxvYWRp
bmcgQ0EgYnVuZGxlIGZvciB0cmFuc3BvcnQgJyVzJ1xuIiwgdC0+bmFtZSk7CisKKyAgICBpZiAo
c2V0dXBfY2VydHMoY3R4LCBvYi0+dGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMsCisJICBvYi0+dGxz
X2NybCwgZHVtbXlfaG9zdCwgJmR1bW15X2VycnN0cikgPT0gT0spCisgICAgICBvYi0+dGxzX3By
ZWxvYWQuY2FidW5kbGUgPSBUUlVFOworICAgIH0KKyAgfQorZWxzZQorICBERUJVRyhEX3RscykK
KyAgICAgIGRlYnVnX3ByaW50ZigiVExTOiBub3QgcHJlbG9hZGluZyBDQSBidW5kbGUsIGZvciB0
cmFuc3BvcnQgJyVzJ1xuIiwgdC0+bmFtZSk7CisKKyNlbmRpZiAvKkVYSU1fSEFWRV9JTk9USUZZ
Ki8KK30KKworCisjaWYgZGVmaW5lZChFWElNX0hBVkVfSU5PVElGWSkgfHwgZGVmaW5lZChFWElN
X0hBVkVfS0VWRU5UKQorLyogSW52YWxpZGF0ZSB0aGUgY3JlZHMgY2FjaGVkLCBieSBkcm9wcGlu
ZyB0aGUgY3VycmVudCBvbmVzLgorQ2FsbCB3aGVuIHdlIG5vdGljZSBvbmUgb2YgdGhlIHNvdXJj
ZSBmaWxlcyBoYXMgY2hhbmdlZC4gKi8KKyAKK3N0YXRpYyB2b2lkCit0bHNfc2VydmVyX2NyZWRz
X2ludmFsaWRhdGUodm9pZCkKK3sKK1NTTF9DVFhfZnJlZShzdGF0ZV9zZXJ2ZXIubGliX3N0YXRl
LmxpYl9jdHgpOworc3RhdGVfc2VydmVyLmxpYl9zdGF0ZSA9IG51bGxfdGxzX3ByZWxvYWQ7Cit9
CisKKworc3RhdGljIHZvaWQKK3Rsc19jbGllbnRfY3JlZHNfaW52YWxpZGF0ZSh0cmFuc3BvcnRf
aW5zdGFuY2UgKiB0KQoreworc210cF90cmFuc3BvcnRfb3B0aW9uc19ibG9jayAqIG9iID0gdC0+
b3B0aW9uc19ibG9jazsKK1NTTF9DVFhfZnJlZShvYi0+dGxzX3ByZWxvYWQubGliX2N0eCk7Citv
Yi0+dGxzX3ByZWxvYWQgPSBudWxsX3Rsc19wcmVsb2FkOworfQorCisjZWxzZQorCitzdGF0aWMg
dm9pZAordGxzX3NlcnZlcl9jcmVkc19pbnZhbGlkYXRlKHZvaWQpCit7IHJldHVybjsgfQorCitz
dGF0aWMgdm9pZAordGxzX2NsaWVudF9jcmVkc19pbnZhbGlkYXRlKHRyYW5zcG9ydF9pbnN0YW5j
ZSAqIHQpCit7IHJldHVybjsgfQorCisjZW5kaWYJLypFWElNX0hBVkVfSU5PVElGWSovCisKKwor
LyogRXh0cmVtZSBkZWJ1ZworI2lmbmRlZiBESVNBQkxFX09DU1AKK3ZvaWQKK3g1MDlfc3RvcmVf
ZHVtcF9jZXJ0X3NfbmFtZXMoWDUwOV9TVE9SRSAqIHN0b3JlKQoreworU1RBQ0tfT0YoWDUwOV9P
QkpFQ1QpICogcm9vdHM9IHN0b3JlLT5vYmpzOworc3RhdGljIHVzY2hhciBuYW1lWzI1Nl07CisK
K2ZvciAoaW50IGk9IDA7IGkgPCBza19YNTA5X09CSkVDVF9udW0ocm9vdHMpOyBpKyspCisgIHsK
KyAgWDUwOV9PQkpFQ1QgKiB0bXBfb2JqPSBza19YNTA5X09CSkVDVF92YWx1ZShyb290cywgaSk7
CisgIGlmKHRtcF9vYmotPnR5cGUgPT0gWDUwOV9MVV9YNTA5KQorICAgIHsKKyAgICBYNTA5X05B
TUUgKiBzbiA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh0bXBfb2JqLT5kYXRhLng1MDkpOworICAg
IGlmIChYNTA5X05BTUVfb25lbGluZShzbiwgQ1MgbmFtZSwgc2l6ZW9mKG5hbWUpKSkKKyAgICAg
IHsKKyAgICAgIG5hbWVbc2l6ZW9mKG5hbWUpLTFdID0gJ1wwJzsKKyAgICAgIGRlYnVnX3ByaW50
ZigiICVzXG4iLCBuYW1lKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKyNlbmRpZgorKi8KKwor
CisjaWZuZGVmIERJU0FCTEVfVExTX1JFU1VNRQorLyogTWFuYWdlIHRoZSBrZXlzZXRzIHVzZWQg
Zm9yIGVuY3J5cHRpbmcgdGhlIHNlc3Npb24gdGlja2V0cywgb24gdGhlIHNlcnZlci4gKi8KKwor
dHlwZWRlZiBzdHJ1Y3QgewkJCS8qIFNlc3Npb24gdGlja2V0IGVuY3J5cHRpb24ga2V5ICovCisg
IHVzY2hhciAJbmFtZVsxNl07CisKKyAgY29uc3QgRVZQX0NJUEhFUiAqCWFlc19jaXBoZXI7Cisg
IHVzY2hhcgkJYWVzX2tleVszMl07CS8qIHNpemUgbmVlZGVkIGRlcGVuZHMgb24gY2lwaGVyLiBh
ZXNfMTI4IGltcGxpZXMgMTI4LzggPSAxNj8gKi8KKyMgaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJF
UiA8IDB4MzAwMDAwMDBMCisgIGNvbnN0IEVWUF9NRCAqCWhtYWNfaGFzaDsKKyMgZWxzZQorICBj
b25zdCB1c2NoYXIgKglobWFjX2hhc2huYW1lOworIyBlbmRpZgorICB1c2NoYXIJCWhtYWNfa2V5
WzE2XTsKKyAgdGltZV90CQlyZW5ldzsKKyAgdGltZV90CQlleHBpcmU7Cit9IGV4aW1fc3RlazsK
Kworc3RhdGljIGV4aW1fc3RlayBleGltX3RrOwkvKiBjdXJyZW50IGtleSAqLworc3RhdGljIGV4
aW1fc3RlayBleGltX3RrX29sZDsJLyogcHJldmlvdXMga2V5ICovCisKK3N0YXRpYyB2b2lkCit0
a19pbml0KHZvaWQpCit7Cit0aW1lX3QgdCA9IHRpbWUoTlVMTCk7CisKK2lmIChleGltX3RrLm5h
bWVbMF0pCisgIHsKKyAgaWYgKGV4aW1fdGsucmVuZXcgPj0gdCkgcmV0dXJuOworICBleGltX3Rr
X29sZCA9IGV4aW1fdGs7CisgIH0KKworaWYgKGYucnVubmluZ19pbl90ZXN0X2hhcm5lc3MpIHNz
bF9zZXNzaW9uX3RpbWVvdXQgPSA2OworCitERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJPcGVu
U1NMOiAlcyBTVEVLXG4iLCBleGltX3RrLm5hbWVbMF0gPyAicm90YXRpbmciIDogImNyZWF0aW5n
Iik7CitpZiAoUkFORF9ieXRlcyhleGltX3RrLmFlc19rZXksIHNpemVvZihleGltX3RrLmFlc19r
ZXkpKSA8PSAwKSByZXR1cm47CitpZiAoUkFORF9ieXRlcyhleGltX3RrLmhtYWNfa2V5LCBzaXpl
b2YoZXhpbV90ay5obWFjX2tleSkpIDw9IDApIHJldHVybjsKK2lmIChSQU5EX2J5dGVzKGV4aW1f
dGsubmFtZSsxLCBzaXplb2YoZXhpbV90ay5uYW1lKS0xKSA8PSAwKSByZXR1cm47CisKK2V4aW1f
dGsubmFtZVswXSA9ICdFJzsKK2V4aW1fdGsuYWVzX2NpcGhlciA9IEVWUF9hZXNfMjU2X2NiYygp
OworIyBpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgzMDAwMDAwMEwKK2V4aW1fdGsuaG1h
Y19oYXNoID0gRVZQX3NoYTI1NigpOworIyBlbHNlCitleGltX3RrLmhtYWNfaGFzaG5hbWUgPSBV
UyAic2hhMjU2IjsKKyMgZW5kaWYKK2V4aW1fdGsuZXhwaXJlID0gdCArIHNzbF9zZXNzaW9uX3Rp
bWVvdXQ7CitleGltX3RrLnJlbmV3ID0gdCArIHNzbF9zZXNzaW9uX3RpbWVvdXQvMjsKK30KKwor
c3RhdGljIGV4aW1fc3RlayAqCit0a19jdXJyZW50KHZvaWQpCit7CitpZiAoIWV4aW1fdGsubmFt
ZVswXSkgcmV0dXJuIE5VTEw7CityZXR1cm4gJmV4aW1fdGs7Cit9CisKK3N0YXRpYyBleGltX3N0
ZWsgKgordGtfZmluZChjb25zdCB1c2NoYXIgKiBuYW1lKQoreworcmV0dXJuIG1lbWNtcChuYW1l
LCBleGltX3RrLm5hbWUsIHNpemVvZihleGltX3RrLm5hbWUpKSA9PSAwID8gJmV4aW1fdGsKKyAg
OiBtZW1jbXAobmFtZSwgZXhpbV90a19vbGQubmFtZSwgc2l6ZW9mKGV4aW1fdGtfb2xkLm5hbWUp
KSA9PSAwID8gJmV4aW1fdGtfb2xkCisgIDogTlVMTDsKK30KKworCitzdGF0aWMgaW50Cit0a19o
bWFjX2luaXQoCisjIGlmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDMwMDAwMDAwTAorICBI
TUFDX0NUWCAqIGhjdHgsCisjZWxzZQorICBFVlBfTUFDX0NUWCAqIGhjdHgsCisjZW5kaWYKKyAg
ZXhpbV9zdGVrICoga2V5CisgICkKK3sKKy8qWFhYIHdpbGwgd2FudCB0aGVzZSBkZXBlbmRlbnQg
b24gdGhlIHNzbCBzZXNzaW9uIHN0cmVuZ3RoICovCisjIGlmIE9QRU5TU0xfVkVSU0lPTl9OVU1C
RVIgPCAweDMwMDAwMDAwTAorICBITUFDX0luaXRfZXgoaGN0eCwga2V5LT5obWFjX2tleSwgc2l6
ZW9mKGtleS0+aG1hY19rZXkpLAorCQlrZXktPmhtYWNfaGFzaCwgTlVMTCk7CisjZWxzZQorIHsK
KyAgT1NTTF9QQVJBTSBwYXJhbXNbM107CisgIHVzY2hhciAqIGhrID0gc3RyaW5nX2NvcHkoa2V5
LT5obWFjX2hhc2huYW1lKTsJLyogbmVlZCBub25jb25zdCAqLworICBwYXJhbXNbMF0gPSBPU1NM
X1BBUkFNX2NvbnN0cnVjdF9vY3RldF9zdHJpbmcoImtleSIsIGtleS0+aG1hY19rZXksIHNpemVv
ZihrZXktPmhtYWNfa2V5KSk7CisgIHBhcmFtc1sxXSA9IE9TU0xfUEFSQU1fY29uc3RydWN0X3V0
Zjhfc3RyaW5nKCJkaWdlc3QiLCBDUyBoaywgMCk7CisgIHBhcmFtc1syXSA9IE9TU0xfUEFSQU1f
Y29uc3RydWN0X2VuZCgpOworICBpZiAoRVZQX01BQ19DVFhfc2V0X3BhcmFtcyhoY3R4LCBwYXJh
bXMpID09IDApCisgICAgeworICAgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIkVWUF9NQUNf
Q1RYX3NldF9wYXJhbXM6ICVzXG4iLAorICAgICAgRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmcoRVJS
X2dldF9lcnJvcigpKSk7CisgICAgcmV0dXJuIDA7IC8qIGVycm9yIGluIG1hYyBpbml0aWFsaXNh
dGlvbiAqLworICAgIH0KK30KKyNlbmRpZgorcmV0dXJuIDE7Cit9CisKKy8qIENhbGxiYWNrIGZv
ciBzZXNzaW9uIHRpY2tldHMsIG9uIHNlcnZlciAqLworc3RhdGljIGludAordGlja2V0X2tleV9j
YWxsYmFjayhTU0wgKiBzc2wsIHVzY2hhciBrZXlfbmFtZVsxNl0sCisgIHVzY2hhciAqIGl2LCBF
VlBfQ0lQSEVSX0NUWCAqIGNfY3R4LAorIyBpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgz
MDAwMDAwMEwKKyAgSE1BQ19DVFggKiBoY3R4LAorI2Vsc2UKKyAgRVZQX01BQ19DVFggKiBoY3R4
LAorI2VuZGlmCisgIGludCBlbmMpCit7Cit0bHNfc3VwcG9ydCAqIHRsc3AgPSBzdGF0ZV9zZXJ2
ZXIudGxzcDsKK2V4aW1fc3RlayAqIGtleTsKKworaWYgKGVuYykKKyAgeworICBERUJVRyhEX3Rs
cykgZGVidWdfcHJpbnRmKCJ0aWNrZXRfa2V5X2NhbGxiYWNrOiBjcmVhdGUgbmV3IHNlc3Npb25c
biIpOworICB0bHNwLT5yZXN1bXB0aW9uIHw9IFJFU1VNRV9DTElFTlRfUkVRVUVTVEVEOworCisg
IGlmIChSQU5EX2J5dGVzKGl2LCBFVlBfTUFYX0lWX0xFTkdUSCkgPD0gMCkKKyAgICByZXR1cm4g
LTE7IC8qIGluc3VmZmljaWVudCByYW5kb20gKi8KKworICBpZiAoIShrZXkgPSB0a19jdXJyZW50
KCkpKQkvKiBjdXJyZW50IGtleSBkb2Vzbid0IGV4aXN0IG9yIGlzbid0IHZhbGlkICovCisgICAg
IHJldHVybiAwOwkJCS8qIGtleSBjb3VsZG4ndCBiZSBjcmVhdGVkICovCisgIG1lbWNweShrZXlf
bmFtZSwga2V5LT5uYW1lLCAxNik7CisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlNURUsg
ZXhwaXJlICIgVElNRV9UX0ZNVCAiXG4iLCBrZXktPmV4cGlyZSAtIHRpbWUoTlVMTCkpOworCisg
IGlmICh0a19obWFjX2luaXQoaGN0eCwga2V5KSA9PSAwKSByZXR1cm4gMDsKKyAgRVZQX0VuY3J5
cHRJbml0X2V4KGNfY3R4LCBrZXktPmFlc19jaXBoZXIsIE5VTEwsIGtleS0+YWVzX2tleSwgaXYp
OworCisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoInRpY2tldCBjcmVhdGVkXG4iKTsKKyAg
cmV0dXJuIDE7CisgIH0KK2Vsc2UKKyAgeworICB0aW1lX3Qgbm93ID0gdGltZShOVUxMKTsKKwor
ICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJ0aWNrZXRfa2V5X2NhbGxiYWNrOiByZXRyaWV2
ZSBzZXNzaW9uXG4iKTsKKyAgdGxzcC0+cmVzdW1wdGlvbiB8PSBSRVNVTUVfQ0xJRU5UX1NVR0dF
U1RFRDsKKworICBpZiAoIShrZXkgPSB0a19maW5kKGtleV9uYW1lKSkgfHwga2V5LT5leHBpcmUg
PCBub3cpCisgICAgeworICAgIERFQlVHKERfdGxzKQorICAgICAgeworICAgICAgZGVidWdfcHJp
bnRmKCJ0aWNrZXQgbm90IHVzYWJsZSAoJXMpXG4iLCBrZXkgPyAiZXhwaXJlZCIgOiAibm90IGZv
dW5kIik7CisgICAgICBpZiAoa2V5KSBkZWJ1Z19wcmludGYoIlNURUsgZXhwaXJlICIgVElNRV9U
X0ZNVCAiXG4iLCBrZXktPmV4cGlyZSAtIG5vdyk7CisgICAgICB9CisgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgIGlmICh0a19obWFjX2luaXQoaGN0eCwga2V5KSA9PSAwKSByZXR1cm4gMDsKKyAg
RVZQX0RlY3J5cHRJbml0X2V4KGNfY3R4LCBrZXktPmFlc19jaXBoZXIsIE5VTEwsIGtleS0+YWVz
X2tleSwgaXYpOworCisgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoInRpY2tldCB1c2FibGUs
IFNURUsgZXhwaXJlICIgVElNRV9UX0ZNVCAiXG4iLCBrZXktPmV4cGlyZSAtIG5vdyk7CisKKyAg
LyogVGhlIHRpY2tldCBsaWZldGltZSBhbmQgcmVuZXdhbCBhcmUgdGhlIHNhbWUgYXMgdGhlIFNU
RUsgbGlmZXRpbWUgYW5kCisgIHJlbmV3YWwsIHdoaWNoIGlzIG92ZXJlbnRodXNpYXN0aWMuICBB
IGZhY3RvciBvZiwgc2F5LCAzeCBsb25nZXIgU1RFSyB3b3VsZAorICBiZSBiZXR0ZXIuICBUbyBk
byB0aGF0IHdlJ2QgaGF2ZSB0byBlbmNvZGUgdGlja2V0IGxpZmV0aW1lIGluIHRoZSBuYW1lIGFz
CisgIHdlIGRvbid0IHlldCBzZWUgdGhlIHJlc3RvcmVkIHNlc3Npb24uICBDb3VsZCBjaGVjayBw
b3N0aGFuZHNoYWtlIGZvciBUTFMxLjMKKyAgYW5kIHRyaWdnZXIgYSBuZXcgdGlja2V0IHRoZW4s
IGJ1dCBjYW5ub3QgZG8gdGhhdCBmb3IgVExTMS4yICovCisgIHJldHVybiBrZXktPnJlbmV3IDwg
bm93ID8gMiA6IDE7CisgIH0KK30KKyNlbmRpZgkvKiAhRElTQUJMRV9UTFNfUkVTVU1FICovCisK
KworCitzdGF0aWMgdm9pZAorc2V0dXBfY2VydF92ZXJpZnkoU1NMX0NUWCAqIGN0eCwgQk9PTCBv
cHRpb25hbCwKKyAgICBpbnQgKCpjZXJ0X3ZmeV9jYikoaW50LCBYNTA5X1NUT1JFX0NUWCAqKSkK
K3sKKy8qIElmIHZlcmlmaWNhdGlvbiBpcyBvcHRpb25hbCwgZG9uJ3QgZmFpbCBpZiBubyBjZXJ0
aWZpY2F0ZSAqLworCitTU0xfQ1RYX3NldF92ZXJpZnkoY3R4LAorICAgIFNTTF9WRVJJRllfUEVF
UiB8IChvcHRpb25hbCA/IDAgOiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSwKKyAg
ICBjZXJ0X3ZmeV9jYik7Cit9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKICogICAgICAgICAgICBDYWxsYmFjayB0byBoYW5kbGUgU05JICAg
ICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwpAQCAtMTY4Myw3ICsyMTYxLDcgQEAKIHRsc19zZXJ2ZXJuYW1lX2NiKFNTTCAqcywg
aW50ICphZCBBUkdfVU5VU0VELCB2b2lkICphcmcpCiB7CiBjb25zdCBjaGFyICpzZXJ2ZXJuYW1l
ID0gU1NMX2dldF9zZXJ2ZXJuYW1lKHMsIFRMU0VYVF9OQU1FVFlQRV9ob3N0X25hbWUpOwotdGxz
X2V4dF9jdHhfY2IgKmNiaW5mbyA9ICh0bHNfZXh0X2N0eF9jYiAqKSBhcmc7CitleGltX29wZW5z
c2xfc3RhdGVfc3QgKnN0YXRlID0gKGV4aW1fb3BlbnNzbF9zdGF0ZV9zdCAqKSBhcmc7CiBpbnQg
cmM7CiBpbnQgb2xkX3Bvb2wgPSBzdG9yZV9wb29sOwogdXNjaGFyICogZHVtbXlfZXJyc3RyOwpA
QCAtMTY5Niw3ICsyMTc0LDcgQEAKIAogLyogTWFrZSB0aGUgZXh0ZW5zaW9uIHZhbHVlIGF2YWls
YWJsZSBmb3IgZXhwYW5zaW9uICovCiBzdG9yZV9wb29sID0gUE9PTF9QRVJNOwotdGxzX2luLnNu
aSA9IHN0cmluZ19jb3B5X3RhaW50KFVTIHNlcnZlcm5hbWUsIFRSVUUpOwordGxzX2luLnNuaSA9
IHN0cmluZ19jb3B5X3RhaW50KFVTIHNlcnZlcm5hbWUsIEdFVF9UQUlOVEVEKTsKIHN0b3JlX3Bv
b2wgPSBvbGRfcG9vbDsKIAogaWYgKCFyZWV4cGFuZF90bHNfZmlsZXNfZm9yX3NuaSkKQEAgLTE3
MDYsNTEgKzIxODQsNTQgQEAKIG5vdCBjb25maWRlbnQgdGhhdCBtZW1jcHkgd291bGRuJ3QgYnJl
YWsgc29tZSBpbnRlcm5hbCByZWZlcmVuY2UgY291bnRpbmcuCiBFc3BlY2lhbGx5IHNpbmNlIHRo
ZXJlJ3MgYSByZWZlcmVuY2VzIHN0cnVjdCBtZW1iZXIsIHdoaWNoIHdvdWxkIGJlIG9mZi4gKi8K
IAotI2lmZGVmIEVYSU1fSEFWRV9PUEVOU1NMX1RMU19NRVRIT0QKLWlmICghKHNlcnZlcl9zbmkg
PSBTU0xfQ1RYX25ldyhUTFNfc2VydmVyX21ldGhvZCgpKSkpCi0jZWxzZQotaWYgKCEoc2VydmVy
X3NuaSA9IFNTTF9DVFhfbmV3KFNTTHYyM19zZXJ2ZXJfbWV0aG9kKCkpKSkKLSNlbmRpZgotICB7
Ci0gIEVSUl9lcnJvcl9zdHJpbmdfbihFUlJfZ2V0X2Vycm9yKCksIHNzbF9lcnJzdHJpbmcsIHNp
emVvZihzc2xfZXJyc3RyaW5nKSk7Ci0gIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlNTTF9D
VFhfbmV3KCkgZmFpbGVkOiAlc1xuIiwgc3NsX2VycnN0cmluZyk7CitpZiAobGliX2N0eF9uZXco
JnNlcnZlcl9zbmksIE5VTEwsICZkdW1teV9lcnJzdHIpICE9IE9LKQogICBnb3RvIGJhZDsKLSAg
fQogCiAvKiBOb3Qgc3VyZSBob3cgbWFueSBvZiB0aGVzZSBhcmUgYWN0dWFsbHkgbmVlZGVkLCBz
aW5jZSBTU0wgb2JqZWN0CiBhbHJlYWR5IGV4aXN0cy4gIE1pZ2h0IGV2ZW4gbmVlZCB0aGlzIHNl
bGZzYW1lIGNhbGxiYWNrLCBmb3IgcmVuZWc/ICovCiAKLVNTTF9DVFhfc2V0X2luZm9fY2FsbGJh
Y2soc2VydmVyX3NuaSwgU1NMX0NUWF9nZXRfaW5mb19jYWxsYmFjayhzZXJ2ZXJfY3R4KSk7Ci1T
U0xfQ1RYX3NldF9tb2RlKHNlcnZlcl9zbmksIFNTTF9DVFhfZ2V0X21vZGUoc2VydmVyX2N0eCkp
OwotU1NMX0NUWF9zZXRfb3B0aW9ucyhzZXJ2ZXJfc25pLCBTU0xfQ1RYX2dldF9vcHRpb25zKHNl
cnZlcl9jdHgpKTsKLVNTTF9DVFhfc2V0X3RpbWVvdXQoc2VydmVyX3NuaSwgU1NMX0NUWF9nZXRf
dGltZW91dChzZXJ2ZXJfY3R4KSk7Ci1TU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxs
YmFjayhzZXJ2ZXJfc25pLCB0bHNfc2VydmVybmFtZV9jYik7Ci1TU0xfQ1RYX3NldF90bHNleHRf
c2VydmVybmFtZV9hcmcoc2VydmVyX3NuaSwgY2JpbmZvKTsKKyAgeworICBTU0xfQ1RYICogY3R4
ID0gc3RhdGVfc2VydmVyLmxpYl9zdGF0ZS5saWJfY3R4OworICBTU0xfQ1RYX3NldF9pbmZvX2Nh
bGxiYWNrKHNlcnZlcl9zbmksIFNTTF9DVFhfZ2V0X2luZm9fY2FsbGJhY2soY3R4KSk7CisgIFNT
TF9DVFhfc2V0X21vZGUoc2VydmVyX3NuaSwgU1NMX0NUWF9nZXRfbW9kZShjdHgpKTsKKyAgU1NM
X0NUWF9zZXRfb3B0aW9ucyhzZXJ2ZXJfc25pLCBTU0xfQ1RYX2dldF9vcHRpb25zKGN0eCkpOwor
ICBTU0xfQ1RYX3NldF90aW1lb3V0KHNlcnZlcl9zbmksIFNTTF9DVFhfZ2V0X3RpbWVvdXQoY3R4
KSk7CisgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlcnZlcl9zbmks
IHRsc19zZXJ2ZXJuYW1lX2NiKTsKKyAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfYXJn
KHNlcnZlcl9zbmksIHN0YXRlKTsKKyAgfQogCi1pZiAoICAhaW5pdF9kaChzZXJ2ZXJfc25pLCBj
YmluZm8tPmRocGFyYW0sIE5VTEwsICZkdW1teV9lcnJzdHIpCi0gICB8fCAhaW5pdF9lY2RoKHNl
cnZlcl9zbmksIE5VTEwsICZkdW1teV9lcnJzdHIpCitpZiAoICAhaW5pdF9kaChzZXJ2ZXJfc25p
LCBzdGF0ZS0+ZGhwYXJhbSwgJmR1bW15X2VycnN0cikKKyAgIHx8ICFpbml0X2VjZGgoc2VydmVy
X3NuaSwgJmR1bW15X2VycnN0cikKICAgICkKICAgZ290byBiYWQ7CiAKLWlmICggIGNiaW5mby0+
c2VydmVyX2NpcGhlcl9saXN0Ci0gICAmJiAhU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Qoc2VydmVy
X3NuaSwgQ1MgY2JpbmZvLT5zZXJ2ZXJfY2lwaGVyX2xpc3QpKQoraWYgKCAgc3RhdGUtPnNlcnZl
cl9jaXBoZXJfbGlzdAorICAgJiYgIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KHNlcnZlcl9zbmks
IENTIHN0YXRlLT5zZXJ2ZXJfY2lwaGVyX2xpc3QpKQogICBnb3RvIGJhZDsKIAogI2lmbmRlZiBE
SVNBQkxFX09DU1AKLWlmIChjYmluZm8tPnVfb2NzcC5zZXJ2ZXIuZmlsZSkKK2lmIChzdGF0ZS0+
dV9vY3NwLnNlcnZlci5maWxlKQogICB7CiAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zdGF0dXNfY2Io
c2VydmVyX3NuaSwgdGxzX3NlcnZlcl9zdGFwbGluZ19jYik7Ci0gIFNTTF9DVFhfc2V0X3Rsc2V4
dF9zdGF0dXNfYXJnKHNlcnZlcl9zbmksIGNiaW5mbyk7CisgIFNTTF9DVFhfc2V0X3Rsc2V4dF9z
dGF0dXNfYXJnKHNlcnZlcl9zbmksIHN0YXRlKTsKICAgfQogI2VuZGlmCiAKLWlmICgocmMgPSBz
ZXR1cF9jZXJ0cyhzZXJ2ZXJfc25pLCB0bHNfdmVyaWZ5X2NlcnRpZmljYXRlcywgdGxzX2NybCwg
TlVMTCwgRkFMU0UsCi0JCSAgICAgIHZlcmlmeV9jYWxsYmFja19zZXJ2ZXIsICZkdW1teV9lcnJz
dHIpKSAhPSBPSykKLSAgZ290byBiYWQ7CisgIHsKKyAgdXNjaGFyICogZXhwY2VydHM7CisgIGlm
ICggICFleHBhbmRfY2hlY2sodGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMsIFVTInRsc192ZXJpZnlf
Y2VydGlmaWNhdGVzIiwKKwkJICAmZXhwY2VydHMsICZkdW1teV9lcnJzdHIpCisgICAgIHx8IChy
YyA9IHNldHVwX2NlcnRzKHNlcnZlcl9zbmksIGV4cGNlcnRzLCB0bHNfY3JsLCBOVUxMLAorCQkJ
JmR1bW15X2VycnN0cikpICE9IE9LKQorICAgIGdvdG8gYmFkOworCisgIGlmIChleHBjZXJ0cyAm
JiAqZXhwY2VydHMpCisgICAgc2V0dXBfY2VydF92ZXJpZnkoc2VydmVyX3NuaSwgRkFMU0UsIHZl
cmlmeV9jYWxsYmFja19zZXJ2ZXIpOworICB9CiAKIC8qIGRvIHRoaXMgYWZ0ZXIgc2V0dXBfY2Vy
dHMsIGJlY2F1c2UgdGhpcyBjYW4gcmVxdWlyZSB0aGUgY2VydHMgZm9yIHZlcmlmeWluZwogT0NT
UCBpbmZvcm1hdGlvbi4gKi8KLWlmICgocmMgPSB0bHNfZXhwYW5kX3Nlc3Npb25fZmlsZXMoc2Vy
dmVyX3NuaSwgY2JpbmZvLCAmZHVtbXlfZXJyc3RyKSkgIT0gT0spCitpZiAoKHJjID0gdGxzX2V4
cGFuZF9zZXNzaW9uX2ZpbGVzKHNlcnZlcl9zbmksIHN0YXRlLCAmZHVtbXlfZXJyc3RyKSkgIT0g
T0spCiAgIGdvdG8gYmFkOwogCiBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJTd2l0Y2hpbmcg
U1NMIGNvbnRleHQuXG4iKTsKQEAgLTE3NjQsNiArMjI0NSw2MSBAQAogCiAKIAorI2lmZGVmIEVY
SU1fSEFWRV9BTFBOCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgorKiAgICAgICAgQ2FsbGJhY2sgdG8gaGFuZGxlIEFMUE4gICAgICAgICAgICAgICAg
ICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK
Ky8qIENhbGxlZCBvbiBzZXJ2ZXIgaWYgdGxzX2FscG4gbm9uYmxhbmsgYWZ0ZXIgZXhwYW5zaW9u
LAord2hlbiBjbGllbnQgb2ZmZXJzIEFMUE4sIGFmdGVyIHRoZSBTTkkgY2FsbGJhY2suCitJZiBz
ZXQgYW5kIG5vdCBtYXRjaGluZyB0aGUgbGlzdCB0aGVuIHdlIGR1bXAgdGhlIGNvbm5lY3Rpb24g
Ki8KKworc3RhdGljIGludAordGxzX3NlcnZlcl9hbHBuX2NiKFNTTCAqc3NsLCBjb25zdCB1c2No
YXIgKiogb3V0LCB1c2NoYXIgKiBvdXRsZW4sCisgIGNvbnN0IHVzY2hhciAqIGluLCB1bnNpZ25l
ZCBpbnQgaW5sZW4sIHZvaWQgKiBhcmcpCit7CitzZXJ2ZXJfc2Vlbl9hbHBuID0gVFJVRTsKK0RF
QlVHKERfdGxzKQorICB7CisgIGRlYnVnX3ByaW50ZigiUmVjZWl2ZWQgVExTIEFMUE4gb2ZmZXI6
Iik7CisgIGZvciAoaW50IHBvcyA9IDAsIHNpejsgcG9zIDwgaW5sZW47IHBvcyArPSBzaXorMSkK
KyAgICB7CisgICAgc2l6ID0gaW5bcG9zXTsKKyAgICBpZiAocG9zICsgMSArIHNpeiA+IGlubGVu
KSBzaXogPSBpbmxlbiAtIHBvcyAtIDE7CisgICAgZGVidWdfcHJpbnRmKCIgJyUuKnMnIiwgc2l6
LCBpbiArIHBvcyArIDEpOworICAgIH0KKyAgZGVidWdfcHJpbnRmKCIuICBPdXIgbGlzdDogJyVz
J1xuIiwgdGxzX2FscG4pOworICB9CisKKy8qIExvb2sgZm9yIGFuIGFjY2VwdGFibGUgQUxQTiAq
LworCitpZiAoICBpbmxlbiA+IDEJCS8qIGF0IGxlYXN0IG9uZSBuYW1lICovCisgICAmJiBpblsw
XSsxID09IGlubGVuCS8qIGZpbGxpbmcgdGhlIHZlY3Rvciwgc28gZXhhY3RseSBvbmUgbmFtZSAq
LworICAgKQorICB7CisgIGNvbnN0IHVzY2hhciAqIGxpc3QgPSB0bHNfYWxwbjsKKyAgaW50IHNl
cCA9IDA7CisgIGZvciAodXNjaGFyICogbmFtZTsgbmFtZSA9IHN0cmluZ19uZXh0aW5saXN0KCZs
aXN0LCAmc2VwLCBOVUxMLCAwKTsgKQorICAgIGlmIChVc3RybmNtcChpbisxLCBuYW1lLCBpblsw
XSkgPT0gMCkKKyAgICAgIHsKKyAgICAgICpvdXQgPSBpbisxOwkJCS8qIHdlIGNoZWNrZWQgZm9y
IGV4YWN0bHkgb25lLCBzbyBjYW4ganVzdCBwb2ludCB0byBpdCAqLworICAgICAgKm91dGxlbiA9
IGlubGVuOworICAgICAgcmV0dXJuIFNTTF9UTFNFWFRfRVJSX09LOwkJLyogdXNlIEFMUE4gKi8K
KyAgICAgIH0KKyAgfQorCisvKiBNb3JlIHRoYW4gb25lIG5hbWUgZnJvbSBjbGlsZW50LCBvciBu
YW1lIGRpZCBub3QgbWF0Y2ggb3VyIGxpc3QuICovCisKKy8qIFRoaXMgd2lsbCBiZSBmYXRhbCB0
byB0aGUgVExTIGNvbm47IHdvdWxkIGJlIG5pY2UgdG8ga2lsbCBUQ1AgYWxzby4KK01heWJlIGFz
IGFuIG9wdGlvbiBpbiBmdXR1cmU7IGZvciBub3cgbGVhdmUgY29udHJvbCB0byB0aGUgY29uZmln
IChtdXN0LXRscykuICovCisKK0RFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlRMUyBBTFBOIHJl
amVjdGVkXG4iKTsKK3JldHVybiBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKK30KKyNlbmRp
ZgkvKiBFWElNX0hBVkVfQUxQTiAqLworCisKKwogI2lmbmRlZiBESVNBQkxFX09DU1AKIAogLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE3ODEs
OCArMjMxNyw4IEBACiBzdGF0aWMgaW50CiB0bHNfc2VydmVyX3N0YXBsaW5nX2NiKFNTTCAqcywg
dm9pZCAqYXJnKQogewotY29uc3QgdGxzX2V4dF9jdHhfY2IgKiBjYmluZm8gPSAodGxzX2V4dF9j
dHhfY2IgKikgYXJnOwotb2NzcF9yZXNwbGlzdCAqIG9saXN0ID0gY2JpbmZvLT51X29jc3Auc2Vy
dmVyLm9saXN0OworY29uc3QgZXhpbV9vcGVuc3NsX3N0YXRlX3N0ICogc3RhdGUgPSBhcmc7Citv
Y3NwX3Jlc3BsaXN0ICogb2xpc3QgPSBzdGF0ZS0+dV9vY3NwLnNlcnZlci5vbGlzdDsKIHVzY2hh
ciAqIHJlc3BvbnNlX2RlcjsJLypYWFggYmxvYiAqLwogaW50IHJlc3BvbnNlX2Rlcl9sZW47CiAK
QEAgLTE3OTksOSArMjMzNSw2IEBACiAgIGNvbnN0IFg1MDkgKiBjZXJ0X3NlbnQgPSBTU0xfZ2V0
X2NlcnRpZmljYXRlKHMpOwogICBjb25zdCBBU04xX0lOVEVHRVIgKiBjZXJ0X3NlcmlhbCA9IFg1
MDlfZ2V0MF9zZXJpYWxOdW1iZXIoY2VydF9zZW50KTsKICAgY29uc3QgQklHTlVNICogY2VydF9i
biA9IEFTTjFfSU5URUdFUl90b19CTihjZXJ0X3NlcmlhbCwgTlVMTCk7Ci0gIGNvbnN0IFg1MDlf
TkFNRSAqIGNlcnRfaXNzdWVyID0gWDUwOV9nZXRfaXNzdWVyX25hbWUoY2VydF9zZW50KTsKLSAg
dXNjaGFyICogY2hhc2g7Ci0gIHVpbnQgY2hhc2hfbGVuOwogCiAgIGZvciAoOyBvbGlzdDsgb2xp
c3QgPSBvbGlzdC0+bmV4dCkKICAgICB7CkBAIC0xODU2LDcgKzIzODksOCBAQAogaWYgKHJlc3Bv
bnNlX2Rlcl9sZW4gPD0gMCkKICAgcmV0dXJuIFNTTF9UTFNFWFRfRVJSX05PQUNLOwogCi1TU0xf
c2V0X3Rsc2V4dF9zdGF0dXNfb2NzcF9yZXNwKHNlcnZlcl9zc2wsIHJlc3BvbnNlX2RlciwgcmVz
cG9uc2VfZGVyX2xlbik7CitTU0xfc2V0X3Rsc2V4dF9zdGF0dXNfb2NzcF9yZXNwKHN0YXRlX3Nl
cnZlci5saWJfc3RhdGUubGliX3NzbCwKKwkJCQlyZXNwb25zZV9kZXIsIHJlc3BvbnNlX2Rlcl9s
ZW4pOwogdGxzX2luLm9jc3AgPSBPQ1NQX1ZGSUVEOwogcmV0dXJuIFNTTF9UTFNFWFRfRVJSX09L
OwogfQpAQCAtMTg3Myw3ICsyNDA3LDcgQEAKIHN0YXRpYyBpbnQKIHRsc19jbGllbnRfc3RhcGxp
bmdfY2IoU1NMICpzLCB2b2lkICphcmcpCiB7Ci10bHNfZXh0X2N0eF9jYiAqIGNiaW5mbyA9IGFy
ZzsKK2V4aW1fb3BlbnNzbF9zdGF0ZV9zdCAqIGNiaW5mbyA9IGFyZzsKIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKiBwOwogaW50IGxlbjsKIE9DU1BfUkVTUE9OU0UgKiByc3A7CkBAIC0xODgzLDggKzI0
MTcsMTIgQEAKIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlJlY2VpdmVkIFRMUyBzdGF0dXMg
Y2FsbGJhY2sgKE9DU1Agc3RhcGxpbmcpOlxuIik7CiBsZW4gPSBTU0xfZ2V0X3Rsc2V4dF9zdGF0
dXNfb2NzcF9yZXNwKHMsICZwKTsKIGlmKCFwKQotIHsKLSAgLyogRXhwZWN0IHRoaXMgd2hlbiB3
ZSByZXF1ZXN0ZWQgb2NzcCBidXQgZ290IG5vbmUgKi8KKyB7CQkJCS8qIEV4cGVjdCB0aGlzIHdo
ZW4gd2UgcmVxdWVzdGVkIG9jc3AgYnV0IGdvdCBub25lICovCisgIGlmIChTU0xfc2Vzc2lvbl9y
ZXVzZWQocykgJiYgdGxzX291dC5vY3NwID09IE9DU1BfVkZJRUQpCisgICAgeworICAgIERFQlVH
KERfdGxzKSBkZWJ1Z19wcmludGYoIiBudWxsLCBidXQgcmVzdW1lZDsgb2NzcCB2Znkgc3RvcmVk
IHdpdGggc2Vzc2lvbiBpcyBnb29kXG4iKTsKKyAgICByZXR1cm4gMTsKKyAgICB9CiAgIGlmIChj
YmluZm8tPnVfb2NzcC5jbGllbnQudmVyaWZ5X3JlcXVpcmVkICYmIExPR0dJTkcodGxzX2NpcGhl
cikpCiAgICAgbG9nX3dyaXRlKDAsIExPR19NQUlOLCAiUmVxdWlyZWQgVExTIGNlcnRpZmljYXRl
IHN0YXR1cyBub3QgcmVjZWl2ZWQiKTsKICAgZWxzZQpAQCAtMTkyNiw3ICsyNDY0LDcgQEAKICAg
ICBTVEFDS19PRihPQ1NQX1NJTkdMRVJFU1ApICogc3Jlc3AgPSBicy0+dGJzUmVzcG9uc2VEYXRh
LT5yZXNwb25zZXM7CiAjZW5kaWYKIAotICAgIERFQlVHKERfdGxzKSBicCA9IEJJT19uZXdfZnAo
ZGVidWdfZmlsZSwgQklPX05PQ0xPU0UpOworICAgIERFQlVHKERfdGxzKSBicCA9IEJJT19uZXco
QklPX3NfbWVtKCkpOwogCiAgICAgLypPQ1NQX1JFU1BPTlNFX3ByaW50KGJwLCByc3AsIDApOyAg
IGV4dHJlbWUgZGVidWc6IHN0YXBsaW5nIGNvbnRlbnQgKi8KIApAQCAtMTk0MSw5ICsyNDc5LDEy
IEBACiAJaWYgKExPR0dJTkcodGxzX2NpcGhlcikpIGxvZ193cml0ZSgwLCBMT0dfTUFJTiwKIAkJ
IlJlY2VpdmVkIFRMUyBjZXJ0IHN0YXR1cyByZXNwb25zZSwgaXRzZWxmIHVudmVyaWZpYWJsZTog
JXMiLAogCQlFUlJfcmVhc29uX2Vycm9yX3N0cmluZyhFUlJfcGVla19lcnJvcigpKSk7Ci0JQklP
X3ByaW50ZihicCwgIk9DU1AgcmVzcG9uc2UgdmVyaWZ5IGZhaWx1cmVcbiIpOwotCUVSUl9wcmlu
dF9lcnJvcnMoYnApOwotCU9DU1BfUkVTUE9OU0VfcHJpbnQoYnAsIHJzcCwgMCk7CisJREVCVUco
RF90bHMpCisJICB7CisJICBCSU9fcHJpbnRmKGJwLCAiT0NTUCByZXNwb25zZSB2ZXJpZnkgZmFp
bHVyZVxuIik7CisJICBFUlJfcHJpbnRfZXJyb3JzKGJwKTsKKwkgIE9DU1BfUkVTUE9OU0VfcHJp
bnQoYnAsIHJzcCwgMCk7CisJICB9CiAJZ290byBmYWlsZWQ7CiAJfQogICAgICAgZWxzZQpAQCAt
MTk4MSwxNCArMjUyMiwxNyBAQAogICAgICAgc3RhdHVzID0gT0NTUF9zaW5nbGVfZ2V0MF9zdGF0
dXMoc2luZ2xlLCAmcmVhc29uLCAmcmV2LAogCQkgICZ0aGlzdXBkLCAmbmV4dHVwZCk7CiAKLSAg
ICAgIERFQlVHKERfdGxzKSB0aW1lX3ByaW50KGJwLCAiVGhpcyBPQ1NQIFVwZGF0ZSIsIHRoaXN1
cGQpOwotICAgICAgREVCVUcoRF90bHMpIGlmKG5leHR1cGQpIHRpbWVfcHJpbnQoYnAsICJOZXh0
IE9DU1AgVXBkYXRlIiwgbmV4dHVwZCk7CisgICAgICBERUJVRyhEX3RscykKKwl7CisJdGltZV9w
cmludChicCwgIlRoaXMgT0NTUCBVcGRhdGUiLCB0aGlzdXBkKTsKKwlpZiAobmV4dHVwZCkgdGlt
ZV9wcmludChicCwgIk5leHQgT0NTUCBVcGRhdGUiLCBuZXh0dXBkKTsKKwl9CiAgICAgICBpZiAo
IU9DU1BfY2hlY2tfdmFsaWRpdHkodGhpc3VwZCwgbmV4dHVwZCwKIAkgICAgRVhJTV9PQ1NQX1NL
RVdfU0VDT05EUywgRVhJTV9PQ1NQX01BWF9BR0UpKQogCXsKIAl0bHNfb3V0Lm9jc3AgPSBPQ1NQ
X0ZBSUxFRDsKIAlERUJVRyhEX3RscykgRVJSX3ByaW50X2Vycm9ycyhicCk7Ci0JbG9nX3dyaXRl
KDAsIExPR19NQUlOLCAiU2VydmVyIE9TQ1AgZGF0ZXMgaW52YWxpZCIpOworCWxvZ193cml0ZSgw
LCBMT0dfTUFJTiwgIk9DU1AgZGF0ZXMgaW52YWxpZCIpOwogCWdvdG8gZmFpbGVkOwogCX0KIApA
QCAtMjAyMSw2ICsyNTY1LDExIEBACiAgICAgdGxzX291dC5vY3NwID0gT0NTUF9GQUlMRUQ7CiAg
ICAgaSA9IGNiaW5mby0+dV9vY3NwLmNsaWVudC52ZXJpZnlfcmVxdWlyZWQgPyAwIDogMTsKICAg
Z29vZDoKKyAgICB7CisgICAgdXNjaGFyICogcyA9IE5VTEw7CisgICAgaW50IGxlbiA9IChpbnQp
IEJJT19nZXRfbWVtX2RhdGEoYnAsIENTUyAmcyk7CisgICAgaWYgKGxlbiA+IDApIGRlYnVnX3By
aW50ZigiJS4qcyIsIGxlbiwgcyk7CisgICAgfQogICAgIEJJT19mcmVlKGJwKTsKICAgfQogCkBA
IC0yMDMzLDk1ICsyNTgyLDY0IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgIEluaXRpYWxpemUgZm9yIFRMUyAgICAgICAg
ICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCi0KLXN0YXRpYyB2b2lkCi10bHNfb3BlbnNzbF9pbml0KHZvaWQpCi17Ci0jaWZkZWYg
RVhJTV9ORUVEX09QRU5TU0xfSU5JVAotU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncygpOyAgICAgICAg
ICAvKiBiYXNpYyBzZXQgdXAgKi8KLU9wZW5TU0xfYWRkX3NzbF9hbGdvcml0aG1zKCk7Ci0jZW5k
aWYKLQotI2lmIGRlZmluZWQoRVhJTV9IQVZFX1NIQTI1NikgJiYgIWRlZmluZWQoT1BFTlNTTF9B
VVRPX1NIQTI1NikKLS8qIFNIQTI1NiBpcyBiZWNvbWluZyBldmVyIG1vcmUgcG9wdWxhci4gVGhp
cyBtYWtlcyBzdXJlIGl0IGdldHMgYWRkZWQgdG8gdGhlCi1saXN0IG9mIGF2YWlsYWJsZSBkaWdl
c3RzLiAqLwotRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKLSNlbmRpZgotfQotCi0KLQog
LyogQ2FsbGVkIGZyb20gYm90aCBzZXJ2ZXIgYW5kIGNsaWVudCBjb2RlLCB0byBkbyBwcmVsaW1p
bmFyeSBpbml0aWFsaXphdGlvbgogb2YgdGhlIGxpYnJhcnkuICBXZSBhbGxvY2F0ZSBhbmQgcmV0
dXJuIGEgY29udGV4dCBzdHJ1Y3R1cmUuCiAKIEFyZ3VtZW50czoKLSAgY3R4cCAgICAgICAgICAg
IHJldHVybmVkIFNTTCBjb250ZXh0CiAgIGhvc3QgICAgICAgICAgICBjb25uZWN0ZWQgaG9zdCwg
aWYgY2xpZW50OyBOVUxMIGlmIHNlcnZlcgotICBkaHBhcmFtICAgICAgICAgREggcGFyYW1ldGVy
IGZpbGUKLSAgY2VydGlmaWNhdGUgICAgIGNlcnRpZmljYXRlIGZpbGUKLSAgcHJpdmF0ZWtleSAg
ICAgIHByaXZhdGUga2V5CisgIG9iCQkgIHRyYW5zcG9ydCBvcHRpb25zIGJsb2NrLCBpZiBjbGll
bnQ7IE5VTEwgaWYgc2VydmVyCiAgIG9jc3BfZmlsZSAgICAgICBmaWxlIG9mIHN0YXBsaW5nIGlu
Zm8gKHNlcnZlcik7IGZsYWcgZm9yIHJlcXVpcmUgb2NzcCAoY2xpZW50KQogICBhZGRyICAgICAg
ICAgICAgYWRkcmVzcyBpZiBjbGllbnQ7IE5VTEwgaWYgc2VydmVyIChmb3Igc29tZSByYW5kb21u
ZXNzKQotICBjYnAgICAgICAgICAgICAgcGxhY2UgdG8gcHV0IGFsbG9jYXRlZCBjYWxsYmFjayBj
b250ZXh0CisgIGNhbGxlcl9zdGF0ZSAgICBwbGFjZSB0byBwdXQgcG9pbnRlciB0byBhbGxvY2F0
ZWQgc3RhdGUtc3RydWN0CiAgIGVycnN0cgkgIGVycm9yIHN0cmluZyBwb2ludGVyCiAKIFJldHVy
bnM6ICAgICAgICAgIE9LL0RFRkVSL0ZBSUwKICovCiAKIHN0YXRpYyBpbnQKLXRsc19pbml0KFNT
TF9DVFggKipjdHhwLCBob3N0X2l0ZW0gKmhvc3QsIHVzY2hhciAqZGhwYXJhbSwgdXNjaGFyICpj
ZXJ0aWZpY2F0ZSwKLSAgdXNjaGFyICpwcml2YXRla2V5LAordGxzX2luaXQoaG9zdF9pdGVtICog
aG9zdCwgc210cF90cmFuc3BvcnRfb3B0aW9uc19ibG9jayAqIG9iLAogI2lmbmRlZiBESVNBQkxF
X09DU1AKICAgdXNjaGFyICpvY3NwX2ZpbGUsCiAjZW5kaWYKLSAgYWRkcmVzc19pdGVtICphZGRy
LCB0bHNfZXh0X2N0eF9jYiAqKiBjYnAsCisgIGFkZHJlc3NfaXRlbSAqYWRkciwgZXhpbV9vcGVu
c3NsX3N0YXRlX3N0ICoqIGNhbGxlcl9zdGF0ZSwKICAgdGxzX3N1cHBvcnQgKiB0bHNwLAogICB1
c2NoYXIgKiogZXJyc3RyKQogewogU1NMX0NUWCAqIGN0eDsKLWxvbmcgaW5pdF9vcHRpb25zOwor
ZXhpbV9vcGVuc3NsX3N0YXRlX3N0ICogc3RhdGU7CiBpbnQgcmM7Ci10bHNfZXh0X2N0eF9jYiAq
IGNiaW5mbzsKIAotY2JpbmZvID0gc3RvcmVfbWFsbG9jKHNpemVvZih0bHNfZXh0X2N0eF9jYikp
OwotY2JpbmZvLT50bHNwID0gdGxzcDsKLWNiaW5mby0+Y2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0
ZTsKLWNiaW5mby0+cHJpdmF0ZWtleSA9IHByaXZhdGVrZXk7Ci1jYmluZm8tPmlzX3NlcnZlciA9
IGhvc3Q9PU5VTEw7Ci0jaWZuZGVmIERJU0FCTEVfT0NTUAotY2JpbmZvLT52ZXJpZnlfc3RhY2sg
PSBOVUxMOwotaWYgKCFob3N0KQoraWYgKGhvc3QpCQkJLyogY2xpZW50ICovCiAgIHsKLSAgY2Jp
bmZvLT51X29jc3Auc2VydmVyLmZpbGUgPSBvY3NwX2ZpbGU7Ci0gIGNiaW5mby0+dV9vY3NwLnNl
cnZlci5maWxlX2V4cGFuZGVkID0gTlVMTDsKLSAgY2JpbmZvLT51X29jc3Auc2VydmVyLm9saXN0
ID0gTlVMTDsKKyAgc3RhdGUgPSBzdG9yZV9tYWxsb2Moc2l6ZW9mKGV4aW1fb3BlbnNzbF9zdGF0
ZV9zdCkpOworICBtZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKyAgc3RhdGUtPmNl
cnRpZmljYXRlID0gb2ItPnRsc19jZXJ0aWZpY2F0ZTsKKyAgc3RhdGUtPnByaXZhdGVrZXkgPSAg
b2ItPnRsc19wcml2YXRla2V5OworICBzdGF0ZS0+aXNfc2VydmVyID0gRkFMU0U7CisgIHN0YXRl
LT5kaHBhcmFtID0gTlVMTDsKKyAgc3RhdGUtPmxpYl9zdGF0ZSA9IG9iLT50bHNfcHJlbG9hZDsK
KyAgfQorZWxzZQkJCQkvKiBzZXJ2ZXIgKi8KKyAgeworICBzdGF0ZSA9ICZzdGF0ZV9zZXJ2ZXI7
CisgIHN0YXRlLT5jZXJ0aWZpY2F0ZSA9IHRsc19jZXJ0aWZpY2F0ZTsKKyAgc3RhdGUtPnByaXZh
dGVrZXkgPSAgdGxzX3ByaXZhdGVrZXk7CisgIHN0YXRlLT5pc19zZXJ2ZXIgPSBUUlVFOworICBz
dGF0ZS0+ZGhwYXJhbSA9IHRsc19kaHBhcmFtOworICBzdGF0ZS0+bGliX3N0YXRlID0gc3RhdGVf
c2VydmVyLmxpYl9zdGF0ZTsKICAgfQotZWxzZQotICBjYmluZm8tPnVfb2NzcC5jbGllbnQudmVy
aWZ5X3N0b3JlID0gTlVMTDsKLSNlbmRpZgotY2JpbmZvLT5kaHBhcmFtID0gZGhwYXJhbTsKLWNi
aW5mby0+c2VydmVyX2NpcGhlcl9saXN0ID0gTlVMTDsKLWNiaW5mby0+aG9zdCA9IGhvc3Q7Ci0j
aWZuZGVmIERJU0FCTEVfRVZFTlQKLWNiaW5mby0+ZXZlbnRfYWN0aW9uID0gTlVMTDsKLSNlbmRp
ZgogCi10bHNfb3BlbnNzbF9pbml0KCk7CitzdGF0ZS0+dGxzcCA9IHRsc3A7CitzdGF0ZS0+aG9z
dCA9IGhvc3Q7CiAKLS8qIENyZWF0ZSBhIGNvbnRleHQuCi1UaGUgT3BlblNTTCBkb2NzIGluIDEu
MC4xYiBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQgdG8gY2xhcmlmeSBUTFMgdmFyaWFudAotbmVnb3Rp
YXRpb24gaW4gdGhlIGRpZmZlcmVudCBtZXRob2RzOyBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhl
IG9ubHkKLSpfe3NlcnZlcixjbGllbnR9X21ldGhvZCB3aGljaCBhbGxvd3MgbmVnb3RpYXRpb24g
aXMgU1NMdjIzLCB3aGljaCBleGlzdHMgZXZlbgotd2hlbiBPcGVuU1NMIGlzIGJ1aWx0IHdpdGhv
dXQgU1NMdjIgc3VwcG9ydC4KLUJ5IGRpc2FibGluZyB3aXRoIG9wZW5zc2xfb3B0aW9ucywgd2Ug
Y2FuIGxldCBhZG1pbnMgcmUtZW5hYmxlIHdpdGggdGhlCi1leGlzdGluZyBrbm9iLiAqLworaWYg
KCFzdGF0ZS0+bGliX3N0YXRlLnByaV9zdHJpbmcpCisgIHN0YXRlLT5zZXJ2ZXJfY2lwaGVyX2xp
c3QgPSBOVUxMOwogCi0jaWZkZWYgRVhJTV9IQVZFX09QRU5TU0xfVExTX01FVEhPRAotaWYgKCEo
Y3R4ID0gU1NMX0NUWF9uZXcoaG9zdCA/IFRMU19jbGllbnRfbWV0aG9kKCkgOiBUTFNfc2VydmVy
X21ldGhvZCgpKSkpCi0jZWxzZQotaWYgKCEoY3R4ID0gU1NMX0NUWF9uZXcoaG9zdCA/IFNTTHYy
M19jbGllbnRfbWV0aG9kKCkgOiBTU0x2MjNfc2VydmVyX21ldGhvZCgpKSkpCisjaWZuZGVmIERJ
U0FCTEVfRVZFTlQKK3N0YXRlLT5ldmVudF9hY3Rpb24gPSBOVUxMOwogI2VuZGlmCi0gIHJldHVy
biB0bHNfZXJyb3IoVVMiU1NMX0NUWF9uZXciLCBob3N0LCBOVUxMLCBlcnJzdHIpOworCit0bHNf
b3BlbnNzbF9pbml0KCk7CiAKIC8qIEl0IHR1cm5zIG91dCB0aGF0IHdlIG5lZWQgdG8gc2VlZCB0
aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgdGhpcyBlYXJseSBpbgogb3JkZXIgdG8gZ2V0IHRo
ZSBmdWxsIGNvbXBsZW1lbnQgb2YgY2lwaGVycyB0byB3b3JrLiBJdCB0b29rIG1lIHJvdWdobHkg
YSBkYXkKQEAgLTIxMjksNDAgKzI2NDcsMTQgQEAKIAogT24gc3lzdGVtcyB0aGF0IGhhdmUgL2Rl
di91cmFuZG9tLCBTU0wgbWF5IGF1dG9tYXRpY2FsbHkgc2VlZCBpdHNlbGYgZnJvbQogdGhlcmUu
IE90aGVyd2lzZSwgd2UgaGF2ZSB0byBtYWtlIHNvbWV0aGluZyB1cCBhcyBiZXN0IHdlIGNhbi4g
RG91YmxlIGNoZWNrCi1hZnRlcndhcmRzLiAqLworYWZ0ZXJ3YXJkcy4KIAotaWYgKCFSQU5EX3N0
YXR1cygpKQotICB7Ci0gIHJhbmRzdHVmZiByOwotICBnZXR0aW1lb2ZkYXkoJnIudHYsIE5VTEwp
OwotICByLnAgPSBnZXRwaWQoKTsKK0FsdGhvdWdoIHdlIGxpa2VseSBjYWxsZWQgdGhpcyBiZWZv
cmUsIGF0IGRhZW1vbiBzdGFydHVwLCB0aGlzIGlzIGEgY2hhbmNlCit0byBtaXggaW4gZnVydGhl
ciB2YXJpYWJsZSBpbmZvICh0aW1lLCBwaWQpIGlmIG5lZWRlZC4gKi8KIAotICBSQU5EX3NlZWQo
VVMgKCZyKSwgc2l6ZW9mKHIpKTsKLSAgUkFORF9zZWVkKFVTIGJpZ19idWZmZXIsIGJpZ19idWZm
ZXJfc2l6ZSk7Ci0gIGlmIChhZGRyICE9IE5VTEwpIFJBTkRfc2VlZChVUyBhZGRyLCBzaXplb2Yo
YWRkcikpOwotCi0gIGlmICghUkFORF9zdGF0dXMoKSkKLSAgICByZXR1cm4gdGxzX2Vycm9yKFVT
IlJBTkRfc3RhdHVzIiwgaG9zdCwKLSAgICAgIFVTInVuYWJsZSB0byBzZWVkIHJhbmRvbSBudW1i
ZXIgZ2VuZXJhdG9yIiwgZXJyc3RyKTsKLSAgfQotCi0vKiBTZXQgdXAgdGhlIGluZm9ybWF0aW9u
IGNhbGxiYWNrLCB3aGljaCBvdXRwdXRzIGlmIGRlYnVnZ2luZyBpcyBhdCBhIHN1aXRhYmxlCi1s
ZXZlbC4gKi8KLQotREVCVUcoRF90bHMpCi0gIHsKLSAgU1NMX0NUWF9zZXRfaW5mb19jYWxsYmFj
ayhjdHgsICh2b2lkICgqKSgpKWluZm9fY2FsbGJhY2spOwotI2lmIGRlZmluZWQoRVhJTV9IQVZF
X09QRVNTTF9UUkFDRSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TU0xfVFJBQ0UpCi0gIC8qIHRo
aXMgbmVlZHMgYSBkZWJ1ZyBidWlsZCBvZiBPcGVuU1NMICovCi0gIFNTTF9DVFhfc2V0X21zZ19j
YWxsYmFjayhjdHgsICh2b2lkICgqKSgpKVNTTF90cmFjZSk7Ci0jZW5kaWYKLSNpZmRlZiBPUEVO
U1NMX0hBVkVfS0VZTE9HX0NCCi0gIFNTTF9DVFhfc2V0X2tleWxvZ19jYWxsYmFjayhjdHgsICh2
b2lkICgqKSgpKWtleWxvZ19jYWxsYmFjayk7Ci0jZW5kaWYKLSAgfQotCi0vKiBBdXRvbWF0aWNh
bGx5IHJlLXRyeSByZWFkcy93cml0ZXMgYWZ0ZXIgcmVuZWdvdGlhdGlvbi4gKi8KLSh2b2lkKSBT
U0xfQ1RYX3NldF9tb2RlKGN0eCwgU1NMX01PREVfQVVUT19SRVRSWSk7CitpZiAoIWxpYl9yYW5k
X2luaXQoYWRkcikpCisgIHJldHVybiB0bHNfZXJyb3IoVVMiUkFORF9zdGF0dXMiLCBob3N0LAor
ICAgIFVTInVuYWJsZSB0byBzZWVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIiwgZXJyc3RyKTsK
IAogLyogQXBwbHkgYWRtaW5pc3RyYXRvci1zdXBwbGllZCB3b3JrLWFyb3VuZHMuCiBIaXN0b3Jp
Y2FsbHkgd2UgYXBwbGllZCBqdXN0IG9uZSByZXF1ZXN0ZWQgb3B0aW9uLApAQCAtMjE3MywxNSAr
MjY2NSwzMSBAQAogTm8gT3BlblNTTCB2ZXJzaW9uIG51bWJlciBjaGVja3M6IHRoZSBvcHRpb25z
IHdlIGFjY2VwdCBkZXBlbmQgdXBvbiB0aGUKIGF2YWlsYWJpbGl0eSBvZiB0aGUgb3B0aW9uIHZh
bHVlIG1hY3JvcyBmcm9tIE9wZW5TU0wuICAqLwogCi1pZiAoIXRsc19vcGVuc3NsX29wdGlvbnNf
cGFyc2Uob3BlbnNzbF9vcHRpb25zLCAmaW5pdF9vcHRpb25zKSkKLSAgcmV0dXJuIHRsc19lcnJv
cihVUyJvcGVuc3NsX29wdGlvbnMgcGFyc2luZyBmYWlsZWQiLCBob3N0LCBOVUxMLCBlcnJzdHIp
OworaWYgKCFpbml0X29wdGlvbnMpCisgIGlmICghdGxzX29wZW5zc2xfb3B0aW9uc19wYXJzZShv
cGVuc3NsX29wdGlvbnMsICZpbml0X29wdGlvbnMpKQorICAgIHJldHVybiB0bHNfZXJyb3IoVVMi
b3BlbnNzbF9vcHRpb25zIHBhcnNpbmcgZmFpbGVkIiwgaG9zdCwgTlVMTCwgZXJyc3RyKTsKKwor
LyogQ3JlYXRlIGEgY29udGV4dC4KK1RoZSBPcGVuU1NMIGRvY3MgaW4gMS4wLjFiIGhhdmUgbm90
IGJlZW4gdXBkYXRlZCB0byBjbGFyaWZ5IFRMUyB2YXJpYW50CituZWdvdGlhdGlvbiBpbiB0aGUg
ZGlmZmVyZW50IG1ldGhvZHM7IGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGUgb25seQorKl97c2Vy
dmVyLGNsaWVudH1fbWV0aG9kIHdoaWNoIGFsbG93cyBuZWdvdGlhdGlvbiBpcyBTU0x2MjMsIHdo
aWNoIGV4aXN0cyBldmVuCit3aGVuIE9wZW5TU0wgaXMgYnVpbHQgd2l0aG91dCBTU0x2MiBzdXBw
b3J0LgorQnkgZGlzYWJsaW5nIHdpdGggb3BlbnNzbF9vcHRpb25zLCB3ZSBjYW4gbGV0IGFkbWlu
cyByZS1lbmFibGUgd2l0aCB0aGUKK2V4aXN0aW5nIGtub2IuICovCiAKLSNpZmRlZiBFWFBFUklN
RU5UQUxfVExTX1JFU1VNRQoraWYgKCEoY3R4ID0gc3RhdGUtPmxpYl9zdGF0ZS5saWJfY3R4KSkK
KyAgeworICBpZiAoKHJjID0gbGliX2N0eF9uZXcoJmN0eCwgaG9zdCwgZXJyc3RyKSkgIT0gT0sp
CisgICAgcmV0dXJuIHJjOworICBzdGF0ZS0+bGliX3N0YXRlLmxpYl9jdHggPSBjdHg7CisgIH0K
KworI2lmbmRlZiBESVNBQkxFX1RMU19SRVNVTUUKIHRsc3AtPnJlc3VtcHRpb24gPSBSRVNVTUVf
U1VQUE9SVEVEOwogI2VuZGlmCiBpZiAoaW5pdF9vcHRpb25zKQogICB7Ci0jaWZkZWYgRVhQRVJJ
TUVOVEFMX1RMU19SRVNVTUUKKyNpZm5kZWYgRElTQUJMRV9UTFNfUkVTVU1FCiAgIC8qIFNob3Vs
ZCB0aGUgc2VydmVyIG9mZmVyIHNlc3Npb24gcmVzdW1wdGlvbj8gKi8KICAgaWYgKCFob3N0ICYm
IHZlcmlmeV9jaGVja19ob3N0KCZ0bHNfcmVzdW1wdGlvbl9ob3N0cykgPT0gT0spCiAgICAgewpA
QCAtMjIxMywyMSArMjcyMSw0NCBAQAogLyogSW5pdGlhbGl6ZSB3aXRoIERIIHBhcmFtZXRlcnMg
aWYgc3VwcGxpZWQgKi8KIC8qIEluaXRpYWxpemUgRUNESCB0ZW1wIGtleSBwYXJhbWV0ZXIgc2Vs
ZWN0aW9uICovCiAKLWlmICggICFpbml0X2RoKGN0eCwgZGhwYXJhbSwgaG9zdCwgZXJyc3RyKQot
ICAgfHwgIWluaXRfZWNkaChjdHgsIGhvc3QsIGVycnN0cikKLSAgICkKLSAgcmV0dXJuIERFRkVS
OworaWYgKCFob3N0KQorICB7CisgIGlmIChzdGF0ZS0+bGliX3N0YXRlLmRoKQorICAgIHsgREVC
VUcoRF90bHMpIGRlYnVnX3ByaW50ZigiVExTOiBESCBwYXJhbXMgd2VyZSBwcmVsb2FkZWRcbiIp
OyB9CisgIGVsc2UKKyAgICBpZiAoIWluaXRfZGgoY3R4LCBzdGF0ZS0+ZGhwYXJhbSwgZXJyc3Ry
KSkgcmV0dXJuIERFRkVSOworCisgIGlmIChzdGF0ZS0+bGliX3N0YXRlLmVjZGgpCisgICAgeyBE
RUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJUTFM6IEVDREggY3VydmUgd2FzIHByZWxvYWRlZFxu
Iik7IH0KKyAgZWxzZQorICAgIGlmICghaW5pdF9lY2RoKGN0eCwgZXJyc3RyKSkgcmV0dXJuIERF
RkVSOworICB9CiAKIC8qIFNldCB1cCBjZXJ0aWZpY2F0ZSBhbmQga2V5IChhbmQgcGVyaGFwcyBP
Q1NQIGluZm8pICovCiAKLWlmICgocmMgPSB0bHNfZXhwYW5kX3Nlc3Npb25fZmlsZXMoY3R4LCBj
YmluZm8sIGVycnN0cikpICE9IE9LKQotICByZXR1cm4gcmM7CitpZiAoc3RhdGUtPmxpYl9zdGF0
ZS5jb25uX2NlcnRzKQorICB7CisgIERFQlVHKERfdGxzKQorICAgIGRlYnVnX3ByaW50ZigiVExT
OiAlcyBjZXJ0cyB3ZXJlIHByZWxvYWRlZFxuIiwgaG9zdCA/ICJjbGllbnQiOiJzZXJ2ZXIiKTsK
KyAgfQorZWxzZQorICB7CisjaWZuZGVmIERJU0FCTEVfT0NTUAorICBpZiAoIWhvc3QpCisgICAg
eworICAgIHN0YXRlLT51X29jc3Auc2VydmVyLmZpbGUgPSBvY3NwX2ZpbGU7CisgICAgc3RhdGUt
PnVfb2NzcC5zZXJ2ZXIuZmlsZV9leHBhbmRlZCA9IE5VTEw7CisgICAgc3RhdGUtPnVfb2NzcC5z
ZXJ2ZXIub2xpc3QgPSBOVUxMOworICAgIH0KKyNlbmRpZgorICBpZiAoKHJjID0gdGxzX2V4cGFu
ZF9zZXNzaW9uX2ZpbGVzKGN0eCwgc3RhdGUsIGVycnN0cikpICE9IE9LKSByZXR1cm4gcmM7Cisg
IH0KIAogLyogSWYgd2UgbmVlZCB0byBoYW5kbGUgU05JIG9yIE9DU1AsIGRvIHNvICovCiAKICNp
ZmRlZiBFWElNX0hBVkVfT1BFTlNTTF9UTFNFWFQKICMgaWZuZGVmIERJU0FCTEVfT0NTUAotICBp
ZiAoIShjYmluZm8tPnZlcmlmeV9zdGFjayA9IHNrX1g1MDlfbmV3X251bGwoKSkpCisgIGlmICgh
KHN0YXRlLT52ZXJpZnlfc3RhY2sgPSBza19YNTA5X25ld19udWxsKCkpKQogICAgIHsKICAgICBE
RUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJmYWlsZWQgdG8gY3JlYXRlIHN0YWNrIGZvciBzdGFw
bGluZyB2ZXJpZnlcbiIpOwogICAgIHJldHVybiBGQUlMOwpAQCAtMjI0MSwzMyArMjc3Miw0OCBA
QAogICB0aGUgb3B0aW9uIGV4aXN0cywgbm90IHdoYXQgdGhlIGN1cnJlbnQgZXhwYW5zaW9uIG1p
Z2h0IGJlLCBhcyBTTkkgbWlnaHQKICAgY2hhbmdlIHRoZSBjZXJ0aWZpY2F0ZSBhbmQgT0NTUCBm
aWxlIGluIHVzZSBiZXR3ZWVuIG5vdyBhbmQgdGhlIHRpbWUgdGhlCiAgIGNhbGxiYWNrIGlzIGlu
dm9rZWQuICovCi0gIGlmIChjYmluZm8tPnVfb2NzcC5zZXJ2ZXIuZmlsZSkKKyAgaWYgKHN0YXRl
LT51X29jc3Auc2VydmVyLmZpbGUpCiAgICAgewogICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zdGF0
dXNfY2IoY3R4LCB0bHNfc2VydmVyX3N0YXBsaW5nX2NiKTsKLSAgICBTU0xfQ1RYX3NldF90bHNl
eHRfc3RhdHVzX2FyZyhjdHgsIGNiaW5mbyk7CisgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3N0YXR1
c19hcmcoY3R4LCBzdGF0ZSk7CiAgICAgfQogIyBlbmRpZgogICAvKiBXZSBhbHdheXMgZG8gdGhp
cywgc28gdGhhdCAkdGxzX3NuaSBpcyBhdmFpbGFibGUgZXZlbiBpZiBub3QgdXNlZCBpbgogICB0
bHNfY2VydGlmaWNhdGUgKi8KICAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJh
Y2soY3R4LCB0bHNfc2VydmVybmFtZV9jYik7Ci0gIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJu
YW1lX2FyZyhjdHgsIGNiaW5mbyk7CisgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2Fy
ZyhjdHgsIHN0YXRlKTsKKworIyBpZmRlZiBFWElNX0hBVkVfQUxQTgorICBpZiAodGxzX2FscG4g
JiYgKnRsc19hbHBuKQorICAgIHsKKyAgICB1c2NoYXIgKiBleHBfYWxwbjsKKyAgICBpZiAoICBl
eHBhbmRfY2hlY2sodGxzX2FscG4sIFVTInRsc19hbHBuIiwgJmV4cF9hbHBuLCBlcnJzdHIpCisg
ICAgICAgJiYgKmV4cF9hbHBuICYmICFpc2JsYW5rKCpleHBfYWxwbikpCisgICAgICB7CisgICAg
ICB0bHNfYWxwbiA9IGV4cF9hbHBuOwkvKiBzdWJwcm9jZXNzIHNvIG9rIHRvIG92ZXJ3cml0ZSAq
LworICAgICAgU1NMX0NUWF9zZXRfYWxwbl9zZWxlY3RfY2IoY3R4LCB0bHNfc2VydmVyX2FscG5f
Y2IsIHN0YXRlKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB0bHNfYWxwbiA9IE5VTEw7Cisg
ICAgfQorIyBlbmRpZgogICB9CiAjIGlmbmRlZiBESVNBQkxFX09DU1AKIGVsc2UJCQkvKiBjbGll
bnQgKi8KICAgaWYob2NzcF9maWxlKQkJLyogd2FudGluZyBzdGFwbGluZyAqLwogICAgIHsKLSAg
ICBpZiAoIShjYmluZm8tPnVfb2NzcC5jbGllbnQudmVyaWZ5X3N0b3JlID0gWDUwOV9TVE9SRV9u
ZXcoKSkpCisgICAgaWYgKCEoc3RhdGUtPnVfb2NzcC5jbGllbnQudmVyaWZ5X3N0b3JlID0gWDUw
OV9TVE9SRV9uZXcoKSkpCiAgICAgICB7CiAgICAgICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRm
KCJmYWlsZWQgdG8gY3JlYXRlIHN0b3JlIGZvciBzdGFwbGluZyB2ZXJpZnlcbiIpOwogICAgICAg
cmV0dXJuIEZBSUw7CiAgICAgICB9CiAgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3N0YXR1c19jYihj
dHgsIHRsc19jbGllbnRfc3RhcGxpbmdfY2IpOwotICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zdGF0
dXNfYXJnKGN0eCwgY2JpbmZvKTsKKyAgICBTU0xfQ1RYX3NldF90bHNleHRfc3RhdHVzX2FyZyhj
dHgsIHN0YXRlKTsKICAgICB9CiAjIGVuZGlmCiAjZW5kaWYKIAotY2JpbmZvLT52ZXJpZnlfY2Vy
dF9ob3N0bmFtZXMgPSBOVUxMOworc3RhdGUtPnZlcmlmeV9jZXJ0X2hvc3RuYW1lcyA9IE5VTEw7
CiAKICNpZmRlZiBFWElNX0hBVkVfRVBIRU1fUlNBX0tFWAogLyogU2V0IHVwIHRoZSBSU0EgY2Fs
bGJhY2sgKi8KQEAgLTIyODAsOCArMjgyNiw3IEBACiBTU0xfQ1RYX3NldF90aW1lb3V0KGN0eCwg
c3NsX3Nlc3Npb25fdGltZW91dCk7CiBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJJbml0aWFs
aXplZCBUTFNcbiIpOwogCi0qY2JwID0gY2JpbmZvOwotKmN0eHAgPSBjdHg7CisqY2FsbGVyX3N0
YXRlID0gc3RhdGU7CiAKIHJldHVybiBPSzsKIH0KQEAgLTI0MDgsMTggKzI5NTMsMjIgQEAKIC8q
IExvYWQgY2VydHMgZnJvbSBmaWxlLCByZXR1cm4gVFJVRSBvbiBzdWNjZXNzICovCiAKIHN0YXRp
YyBCT09MCi1jaGFpbl9mcm9tX3BlbV9maWxlKGNvbnN0IHVzY2hhciAqIGZpbGUsIFNUQUNLX09G
KFg1MDkpICogdmVyaWZ5X3N0YWNrKQorY2hhaW5fZnJvbV9wZW1fZmlsZShjb25zdCB1c2NoYXIg
KiBmaWxlLCBTVEFDS19PRihYNTA5KSAqKiB2cCkKIHsKIEJJTyAqIGJwOwotWDUwOSAqIHg7CitT
VEFDS19PRihYNTA5KSAqIHZlcmlmeV9zdGFjayA9ICp2cDsKIAotd2hpbGUgKHNrX1g1MDlfbnVt
KHZlcmlmeV9zdGFjaykgPiAwKQotICBYNTA5X2ZyZWUoc2tfWDUwOV9wb3AodmVyaWZ5X3N0YWNr
KSk7CitpZiAodmVyaWZ5X3N0YWNrKQorICB3aGlsZSAoc2tfWDUwOV9udW0odmVyaWZ5X3N0YWNr
KSA+IDApCisgICAgWDUwOV9mcmVlKHNrX1g1MDlfcG9wKHZlcmlmeV9zdGFjaykpOworZWxzZQor
ICB2ZXJpZnlfc3RhY2sgPSBza19YNTA5X25ld19udWxsKCk7CiAKIGlmICghKGJwID0gQklPX25l
d19maWxlKENTIGZpbGUsICJyIikpKSByZXR1cm4gRkFMU0U7Ci13aGlsZSAoKHggPSBQRU1fcmVh
ZF9iaW9fWDUwOShicCwgTlVMTCwgMCwgTlVMTCkpKQorZm9yIChYNTA5ICogeDsgeCA9IFBFTV9y
ZWFkX2Jpb19YNTA5KGJwLCBOVUxMLCAwLCBOVUxMKTsgKQogICBza19YNTA5X3B1c2godmVyaWZ5
X3N0YWNrLCB4KTsKIEJJT19mcmVlKGJwKTsKKyp2cCA9IHZlcmlmeV9zdGFjazsKIHJldHVybiBU
UlVFOwogfQogI2VuZGlmCkBAIC0yNDMxLDIwICsyOTgwLDE3IEBACiAKIEFyZ3VtZW50czoKICAg
c2N0eCAgICAgICAgICBTU0xfQ1RYKiB0byBpbml0aWFsaXNlCi0gIGNlcnRzICAgICAgICAgY2Vy
dHMgZmlsZSBvciBOVUxMCisgIGNlcnRzICAgICAgICAgY2VydHMgZmlsZSwgZXhwYW5kZWQKICAg
Y3JsICAgICAgICAgICBDUkwgZmlsZSBvciBOVUxMCiAgIGhvc3QgICAgICAgICAgTlVMTCBpbiBh
IHNlcnZlcjsgdGhlIHJlbW90ZSBob3N0IGluIGEgY2xpZW50Ci0gIG9wdGlvbmFsICAgICAgVFJV
RSBpZiBjYWxsZWQgZnJvbSBhIHNlcnZlciBmb3IgYSBob3N0IGluIHRsc190cnlfdmVyaWZ5X2hv
c3RzOwotICAgICAgICAgICAgICAgIG90aGVyd2lzZSBwYXNzZWQgYXMgRkFMU0UKLSAgY2VydF92
ZnlfY2IJQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbgogICBl
cnJzdHIJZXJyb3Igc3RyaW5nIHBvaW50ZXIKIAogUmV0dXJuczogICAgICAgIE9LL0RFRkVSL0ZB
SUwKICovCiAKIHN0YXRpYyBpbnQKLXNldHVwX2NlcnRzKFNTTF9DVFggKnNjdHgsIHVzY2hhciAq
Y2VydHMsIHVzY2hhciAqY3JsLCBob3N0X2l0ZW0gKmhvc3QsIEJPT0wgb3B0aW9uYWwsCi0gICAg
aW50ICgqY2VydF92ZnlfY2IpKGludCwgWDUwOV9TVE9SRV9DVFggKiksIHVzY2hhciAqKiBlcnJz
dHIpCitzZXR1cF9jZXJ0cyhTU0xfQ1RYICpzY3R4LCB1c2NoYXIgKmNlcnRzLCB1c2NoYXIgKmNy
bCwgaG9zdF9pdGVtICpob3N0LAorICAgIHVzY2hhciAqKiBlcnJzdHIpCiB7CiB1c2NoYXIgKmV4
cGNlcnRzLCAqZXhwY3JsOwogCkBAIC0yNDYwLDcgKzMwMDYsNyBAQAogICBpZiAoIVNTTF9DVFhf
c2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKHNjdHgpKQogICAgIHJldHVybiB0bHNfZXJyb3IoVVMi
U1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMiLCBob3N0LCBOVUxMLCBlcnJzdHIpOwog
Ci0gIGlmIChVc3RyY21wKGV4cGNlcnRzLCAic3lzdGVtIikgIT0gMCkKKyAgaWYgKFVzdHJjbXAo
ZXhwY2VydHMsICJzeXN0ZW0iKSAhPSAwICYmIFVzdHJuY21wKGV4cGNlcnRzLCAic3lzdGVtLCIs
IDcpICE9IDApCiAgICAgewogICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CiAKQEAgLTI0NzcsNiAr
MzAyMywxMyBAQAogCXsgZmlsZSA9IE5VTEw7IGRpciA9IGV4cGNlcnRzOyB9CiAgICAgICBlbHNl
CiAJeworCVNUQUNLX09GKFg1MDkpICogdmVyaWZ5X3N0YWNrID0KKyNpZm5kZWYgRElTQUJMRV9P
Q1NQCisJICAhaG9zdCA/IHN0YXRlX3NlcnZlci52ZXJpZnlfc3RhY2sgOgorI2VuZGlmCisJICBO
VUxMOworCVNUQUNLX09GKFg1MDkpICoqIHZwID0gJnZlcmlmeV9zdGFjazsKKwogCWZpbGUgPSBl
eHBjZXJ0czsgZGlyID0gTlVMTDsKICNpZm5kZWYgRElTQUJMRV9PQ1NQCiAJLyogSW4gdGhlIHNl
cnZlciBpZiB3ZSB3aWxsIGJlIG9mZmVyaW5nIGFuIE9DU1AgcHJvb2YsIGxvYWQgY2hhaW4gZnJv
bQpAQCAtMjQ4NSwxMSArMzAzOCwxMCBAQAogLypYWFggR2xpdGNoISAgIFRoZSBmaWxlIGhlcmUg
aXMgdGxzX3ZlcmlmeV9jZXJ0czogdGhlIGNoYWluIGZvciB2ZXJpZnlpbmcgdGhlIGNsaWVudCBj
ZXJ0LgogVGhpcyBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbmVlZCB0byB2ZXJpZnkgdGhlIE9D
U1AgcHJvb2Ygb2YgdGhlIHNlcnZlciBjZXJ0LgogKi8KLQogCWlmICggICFob3N0CiAJICAgJiYg
c3RhdGJ1Zi5zdF9zaXplID4gMAotCSAgICYmIHNlcnZlcl9zdGF0aWNfY2JpbmZvLT51X29jc3Au
c2VydmVyLmZpbGUKLQkgICAmJiAhY2hhaW5fZnJvbV9wZW1fZmlsZShmaWxlLCBzZXJ2ZXJfc3Rh
dGljX2NiaW5mby0+dmVyaWZ5X3N0YWNrKQorCSAgICYmIHN0YXRlX3NlcnZlci51X29jc3Auc2Vy
dmVyLmZpbGUKKwkgICAmJiAhY2hhaW5fZnJvbV9wZW1fZmlsZShmaWxlLCB2cCkKIAkgICApCiAJ
ICB7CiAJICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9HX1BBTklDLApAQCAtMjUwNiw3ICszMDU4
LDggQEAKIAogICAgICAgaWYgKCAgKCFmaWxlIHx8IHN0YXRidWYuc3Rfc2l6ZSA+IDApCiAgICAg
ICAgICAmJiAhU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc2N0eCwgQ1MgZmlsZSwgQ1Mg
ZGlyKSkKLQlyZXR1cm4gdGxzX2Vycm9yKFVTIlNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25z
IiwgaG9zdCwgTlVMTCwgZXJyc3RyKTsKKwkgIHJldHVybiB0bHNfZXJyb3IoVVMiU1NMX0NUWF9s
b2FkX3ZlcmlmeV9sb2NhdGlvbnMiLAorCQkJICAgIGhvc3QsIE5VTEwsIGVycnN0cik7CiAKICAg
ICAgIC8qIE9uIHRoZSBzZXJ2ZXIgbG9hZCB0aGUgbGlzdCBvZiBDQXMgZm9yIHdoaWNoIHdlIHdp
bGwgYWNjZXB0IGNlcnRzLCBmb3IKICAgICAgIHNlbmRpbmcgdG8gdGhlIGNsaWVudC4gIFRoaXMg
aXMgb25seSBmb3IgdGhlIG9uZS1maWxlCkBAIC0yNTIxLDExICszMDc0LDE1IEBACiAgICAgICBp
ZiAoZmlsZSkKIAl7CiAJU1RBQ0tfT0YoWDUwOV9OQU1FKSAqIG5hbWVzID0gU1NMX2xvYWRfY2xp
ZW50X0NBX2ZpbGUoQ1MgZmlsZSk7CisJaW50IGkgPSBza19YNTA5X05BTUVfbnVtKG5hbWVzKTsK
IAogCWlmICghaG9zdCkgU1NMX0NUWF9zZXRfY2xpZW50X0NBX2xpc3Qoc2N0eCwgbmFtZXMpOwot
CURFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIkFkZGVkICVkIGNlcnRpZmljYXRlIGF1dGhvcml0
aWVzLlxuIiwKLQkJCQkgICAgc2tfWDUwOV9OQU1FX251bShuYW1lcykpOworCURFQlVHKERfdGxz
KSBkZWJ1Z19wcmludGYoIkFkZGVkICVkIGFkZGl0aW9uYWwgY2VydGlmaWNhdGUgYXV0aG9yaXQl
c1xuIiwKKwkJCQkgICAgaSwgaT4xID8gImllcyI6InkiKTsKIAl9CisgICAgICBlbHNlCisJREVC
VUcoRF90bHMpCisJICBkZWJ1Z19wcmludGYoIkFkZGVkIGRpciBmb3IgYWRkaXRpb25hbCBjZXJ0
aWZpY2F0ZSBhdXRob3JpdGllc1xuIik7CiAgICAgICB9CiAgICAgfQogCkBAIC0yNTgxLDEyICsz
MTM4LDYgQEAKICAgICB9CiAKICNlbmRpZiAgLyogT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+IDB4
MDA5MDcwMDBMICovCi0KLSAgLyogSWYgdmVyaWZpY2F0aW9uIGlzIG9wdGlvbmFsLCBkb24ndCBm
YWlsIGlmIG5vIGNlcnRpZmljYXRlICovCi0KLSAgU1NMX0NUWF9zZXRfdmVyaWZ5KHNjdHgsCi0g
ICAgU1NMX1ZFUklGWV9QRUVSIHwgKG9wdGlvbmFsID8gMCA6IFNTTF9WRVJJRllfRkFJTF9JRl9O
T19QRUVSX0NFUlQpLAotICAgIGNlcnRfdmZ5X2NiKTsKICAgfQogCiByZXR1cm4gT0s7CkBAIC0y
NTk0LDE2ICszMTQ1LDI5IEBACiAKIAogCitzdGF0aWMgdm9pZAordGxzX2R1bXBfa2V5bG9nKFNT
TCAqIHNzbCkKK3sKKyNpZmRlZiBFWElNX0hBVkVfT1BFTlNTTF9LRVlMT0cKKyAgQklPICogYnAg
PSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAgdXNjaGFyICogcyA9IE5VTEw7CisgIGludCBsZW47
CisgIFNTTF9TRVNTSU9OX3ByaW50X2tleWxvZyhicCwgU1NMX2dldF9zZXNzaW9uKHNzbCkpOwor
ICBsZW4gPSAoaW50KSBCSU9fZ2V0X21lbV9kYXRhKGJwLCBDU1MgJnMpOworICBpZiAobGVuID4g
MCkgZGVidWdfcHJpbnRmKCIlLipzIiwgbGVuLCBzKTsKKyAgQklPX2ZyZWUoYnApOworI2VuZGlm
Cit9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKICogICAgICAgU3RhcnQgYSBUTFMgc2Vzc2lvbiBpbiBhIHNlcnZlciAgICAgICAgICAqCiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiAvKiBU
aGlzIGlzIGNhbGxlZCB3aGVuIEV4aW0gaXMgcnVubmluZyBhcyBhIHNlcnZlciwgYWZ0ZXIgaGF2
aW5nIHJlY2VpdmVkCiB0aGUgU1RBUlRUTFMgY29tbWFuZC4gSXQgbXVzdCByZXNwb25kIHRvIHRo
YXQgY29tbWFuZCwgYW5kIHRoZW4gbmVnb3RpYXRlCiBhIFRMUyBzZXNzaW9uLgogCiBBcmd1bWVu
dHM6Ci0gIHJlcXVpcmVfY2lwaGVycyAgIGFsbG93ZWQgY2lwaGVycwogICBlcnJzdHIJICAgIHBv
aW50ZXIgdG8gZXJyb3IgbWVzc2FnZQogCiBSZXR1cm5zOiAgICAgICAgICAgIE9LIG9uIHN1Y2Nl
c3MKQEAgLTI2MTMsMTEgKzMxNzcsMTMgQEAKICovCiAKIGludAotdGxzX3NlcnZlcl9zdGFydChj
b25zdCB1c2NoYXIgKiByZXF1aXJlX2NpcGhlcnMsIHVzY2hhciAqKiBlcnJzdHIpCit0bHNfc2Vy
dmVyX3N0YXJ0KHVzY2hhciAqKiBlcnJzdHIpCiB7CiBpbnQgcmM7CiB1c2NoYXIgKiBleHBjaXBo
ZXJzOwotdGxzX2V4dF9jdHhfY2IgKiBjYmluZm87CitleGltX29wZW5zc2xfc3RhdGVfc3QgKiBk
dW1teV9zdGF0ZXA7CitTU0xfQ1RYICogY3R4OworU1NMICogc3NsOwogc3RhdGljIHVzY2hhciBw
ZWVyZG5bMjU2XTsKIAogLyogQ2hlY2sgZm9yIHByZXZpb3VzIGFjdGl2YXRpb24gKi8KQEAgLTI2
MzIsMTYgKzMxOTgsMTMgQEAKIC8qIEluaXRpYWxpemUgdGhlIFNTTCBsaWJyYXJ5LiBJZiBpdCBm
YWlscywgaXQgd2lsbCBhbHJlYWR5IGhhdmUgbG9nZ2VkCiB0aGUgZXJyb3IuICovCiAKLXJjID0g
dGxzX2luaXQoJnNlcnZlcl9jdHgsIE5VTEwsIHRsc19kaHBhcmFtLCB0bHNfY2VydGlmaWNhdGUs
IHRsc19wcml2YXRla2V5LAorcmMgPSB0bHNfaW5pdChOVUxMLCBOVUxMLAogI2lmbmRlZiBESVNB
QkxFX09DU1AKICAgICB0bHNfb2NzcF9maWxlLAogI2VuZGlmCi0gICAgTlVMTCwgJnNlcnZlcl9z
dGF0aWNfY2JpbmZvLCAmdGxzX2luLCBlcnJzdHIpOworICAgIE5VTEwsICZkdW1teV9zdGF0ZXAs
ICZ0bHNfaW4sIGVycnN0cik7CiBpZiAocmMgIT0gT0spIHJldHVybiByYzsKLWNiaW5mbyA9IHNl
cnZlcl9zdGF0aWNfY2JpbmZvOwotCi1pZiAoIWV4cGFuZF9jaGVjayhyZXF1aXJlX2NpcGhlcnMs
IFVTInRsc19yZXF1aXJlX2NpcGhlcnMiLCAmZXhwY2lwaGVycywgZXJyc3RyKSkKLSAgcmV0dXJu
IEZBSUw7CitjdHggPSBzdGF0ZV9zZXJ2ZXIubGliX3N0YXRlLmxpYl9jdHg7CiAKIC8qIEluIE9w
ZW5TU0wsIGNpcGhlciBjb21wb25lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgaHlwaGVucy4gSW4gR251
VExTLCB0aGV5CiB3ZXJlIGhpc3RvcmljYWxseSBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZXMuIFNv
IHRoYXQgSSBjYW4gdXNlIGVpdGhlciBmb3JtIGluIG15CkBAIC0yNjUyLDEzICszMjE1LDE5IEBA
CiBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0OlRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTY6VExT
X0FFU18xMjhfR0NNX1NIQTI1NgogKi8KIAotaWYgKGV4cGNpcGhlcnMpCitpZiAoc3RhdGVfc2Vy
dmVyLmxpYl9zdGF0ZS5wcmlfc3RyaW5nKQorICB7IERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYo
IlRMUzogY2lwaGVyIGxpc3Qgd2FzIHByZWxvYWRlZFxuIik7IH0KK2Vsc2UgCiAgIHsKLSAgZm9y
ICh1c2NoYXIgKiBzID0gZXhwY2lwaGVyczsgKnM7IHMrKyApIGlmICgqcyA9PSAnXycpICpzID0g
Jy0nOwotICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJyZXF1aXJlZCBjaXBoZXJzOiAlc1xu
IiwgZXhwY2lwaGVycyk7Ci0gIGlmICghU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Qoc2VydmVyX2N0
eCwgQ1MgZXhwY2lwaGVycykpCi0gICAgcmV0dXJuIHRsc19lcnJvcihVUyJTU0xfQ1RYX3NldF9j
aXBoZXJfbGlzdCIsIE5VTEwsIE5VTEwsIGVycnN0cik7Ci0gIGNiaW5mby0+c2VydmVyX2NpcGhl
cl9saXN0ID0gZXhwY2lwaGVyczsKKyAgaWYgKCFleHBhbmRfY2hlY2sodGxzX3JlcXVpcmVfY2lw
aGVycywgVVMidGxzX3JlcXVpcmVfY2lwaGVycyIsICZleHBjaXBoZXJzLCBlcnJzdHIpKQorICAg
IHJldHVybiBGQUlMOworCisgIGlmIChleHBjaXBoZXJzKQorICAgIHsKKyAgICBub3JtYWxpc2Vf
Y2lwaGVycygmZXhwY2lwaGVycywgdGxzX3JlcXVpcmVfY2lwaGVycyk7CisgICAgaWYgKChyYyA9
IHNlcnZlcl9sb2FkX2NpcGhlcnMoY3R4LCAmc3RhdGVfc2VydmVyLCBleHBjaXBoZXJzLCBlcnJz
dHIpKSAhPSBPSykKKyAgICAgIHJldHVybiByYzsKKyAgICB9CiAgIH0KIAogLyogSWYgdGhpcyBp
cyBhIGhvc3QgZm9yIHdoaWNoIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBpcyBtYW5kYXRvcnkg
b3IKQEAgLTI2NzEsMzcgKzMyNDAsNTQgQEAKIHNlcnZlcl92ZXJpZnlfY2FsbGJhY2tfY2FsbGVk
ID0gRkFMU0U7CiAKIGlmICh2ZXJpZnlfY2hlY2tfaG9zdCgmdGxzX3ZlcmlmeV9ob3N0cykgPT0g
T0spCi0gIHsKLSAgcmMgPSBzZXR1cF9jZXJ0cyhzZXJ2ZXJfY3R4LCB0bHNfdmVyaWZ5X2NlcnRp
ZmljYXRlcywgdGxzX2NybCwgTlVMTCwKLQkJCUZBTFNFLCB2ZXJpZnlfY2FsbGJhY2tfc2VydmVy
LCBlcnJzdHIpOwotICBpZiAocmMgIT0gT0spIHJldHVybiByYzsKICAgc2VydmVyX3ZlcmlmeV9v
cHRpb25hbCA9IEZBTFNFOwotICB9CiBlbHNlIGlmICh2ZXJpZnlfY2hlY2tfaG9zdCgmdGxzX3Ry
eV92ZXJpZnlfaG9zdHMpID09IE9LKQotICB7Ci0gIHJjID0gc2V0dXBfY2VydHMoc2VydmVyX2N0
eCwgdGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMsIHRsc19jcmwsIE5VTEwsCi0JCQlUUlVFLCB2ZXJp
ZnlfY2FsbGJhY2tfc2VydmVyLCBlcnJzdHIpOwotICBpZiAocmMgIT0gT0spIHJldHVybiByYzsK
ICAgc2VydmVyX3ZlcmlmeV9vcHRpb25hbCA9IFRSVUU7Ci0gIH0KK2Vsc2UKKyAgZ290byBza2lw
X2NlcnRzOworCisgeworICB1c2NoYXIgKiBleHBjZXJ0czsKKyAgaWYgKCFleHBhbmRfY2hlY2so
dGxzX3ZlcmlmeV9jZXJ0aWZpY2F0ZXMsIFVTInRsc192ZXJpZnlfY2VydGlmaWNhdGVzIiwKKwkJ
ICAgICZleHBjZXJ0cywgZXJyc3RyKSkKKyAgICByZXR1cm4gREVGRVI7CisgIERFQlVHKERfdGxz
KSBkZWJ1Z19wcmludGYoInRsc192ZXJpZnlfY2VydGlmaWNhdGVzOiAlc1xuIiwgZXhwY2VydHMp
OworCisgIGlmIChzdGF0ZV9zZXJ2ZXIubGliX3N0YXRlLmNhYnVuZGxlKQorICAgIHsgREVCVUco
RF90bHMpIGRlYnVnX3ByaW50ZigiVExTOiBDQSBidW5kbGUgZm9yIHNlcnZlciB3YXMgcHJlbG9h
ZGVkXG4iKTsgfQorICBlbHNlCisgICAgaWYgKChyYyA9IHNldHVwX2NlcnRzKGN0eCwgZXhwY2Vy
dHMsIHRsc19jcmwsIE5VTEwsIGVycnN0cikpICE9IE9LKQorICAgICAgcmV0dXJuIHJjOworCisg
IGlmIChleHBjZXJ0cyAmJiAqZXhwY2VydHMpCisgICAgc2V0dXBfY2VydF92ZXJpZnkoY3R4LCBz
ZXJ2ZXJfdmVyaWZ5X29wdGlvbmFsLCB2ZXJpZnlfY2FsbGJhY2tfc2VydmVyKTsKKyB9Citza2lw
X2NlcnRzOiA7CiAKLSNpZmRlZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQotU1NMX0NUWF9zZXRf
dGxzZXh0X3RpY2tldF9rZXlfY2Ioc2VydmVyX2N0eCwgdGlja2V0X2tleV9jYWxsYmFjayk7Cisj
aWZuZGVmIERJU0FCTEVfVExTX1JFU1VNRQorIyBpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwg
MHgzMDAwMDAwMEwKK1NTTF9DVFhfc2V0X3Rsc2V4dF90aWNrZXRfa2V5X2NiKGN0eCwgdGlja2V0
X2tleV9jYWxsYmFjayk7CiAvKiBkZXNwaXRlIHdvcmtpbmcsIGFwcGVhcnMgdG8gYWx3YXlzIHJl
dHVybiBmYWlsdXJlLCBzbyBpZ25vcmluZyAqLworIyBlbHNlCitTU0xfQ1RYX3NldF90bHNleHRf
dGlja2V0X2tleV9ldnBfY2IoY3R4LCB0aWNrZXRfa2V5X2NhbGxiYWNrKTsKKy8qIGRlc3BpdGUg
d29ya2luZywgYXBwZWFycyB0byBhbHdheXMgcmV0dXJuIGZhaWx1cmUsIHNvIGlnbm9yaW5nICov
CisjIGVuZGlmCiAjZW5kaWYKKwogI2lmZGVmIE9QRU5TU0xfSEFWRV9OVU1fVElDS0VUUwotIyBp
ZmRlZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQotU1NMX0NUWF9zZXRfbnVtX3RpY2tldHMoc2Vy
dmVyX2N0eCwgdGxzX2luLmhvc3RfcmVzdW1hYmxlID8gMSA6IDApOworIyBpZm5kZWYgRElTQUJM
RV9UTFNfUkVTVU1FCitTU0xfQ1RYX3NldF9udW1fdGlja2V0cyhjdHgsIHRsc19pbi5ob3N0X3Jl
c3VtYWJsZSA/IDEgOiAwKTsKICMgZWxzZQotU1NMX0NUWF9zZXRfbnVtX3RpY2tldHMoc2VydmVy
X2N0eCwgMCk7CS8qIHNlbmQgbm8gVExTMS4zIHN0YXRlZnVsLXRpY2tldHMgKi8KK1NTTF9DVFhf
c2V0X251bV90aWNrZXRzKGN0eCwgMCk7CS8qIHNlbmQgbm8gVExTMS4zIHN0YXRlZnVsLXRpY2tl
dHMgKi8KICMgZW5kaWYKICNlbmRpZgogCiAKIC8qIFByZXBhcmUgZm9yIG5ldyBjb25uZWN0aW9u
ICovCiAKLWlmICghKHNlcnZlcl9zc2wgPSBTU0xfbmV3KHNlcnZlcl9jdHgpKSkKK2lmICghKHNz
bCA9IFNTTF9uZXcoY3R4KSkpCiAgIHJldHVybiB0bHNfZXJyb3IoVVMiU1NMX25ldyIsIE5VTEws
IE5VTEwsIGVycnN0cik7CitzdGF0ZV9zZXJ2ZXIubGliX3N0YXRlLmxpYl9zc2wgPSBzc2w7CiAK
IC8qIFdhcm5pbmc6IHdlIHVzZWQgdG8gU1NMX2NsZWFyKHNzbCkgaGVyZSwgaXQgd2FzIHJlbW92
ZWQuCiAgKgpAQCAtMjcyMiw3ICszMzA4LDcgQEAKIHRoZSByZXNwb25zZS4gT3RoZXIgc210cF9w
cmludGYoKSBjYWxscyBkbyBub3QgbmVlZCBpdCwgYmVjYXVzZSBpbiBub24tVExTCiBtb2RlLCB0
aGUgZmZsdXNoKCkgaGFwcGVucyB3aGVuIHNtdHBfZ2V0YygpIGlzIGNhbGxlZC4gKi8KIAotU1NM
X3NldF9zZXNzaW9uX2lkX2NvbnRleHQoc2VydmVyX3NzbCwgc2lkX2N0eCwgVXN0cmxlbihzaWRf
Y3R4KSk7CitTU0xfc2V0X3Nlc3Npb25faWRfY29udGV4dChzc2wsIHNpZF9jdHgsIFVzdHJsZW4o
c2lkX2N0eCkpOwogaWYgKCF0bHNfaW4ub25fY29ubmVjdCkKICAgewogICBzbXRwX3ByaW50Zigi
MjIwIFRMUyBnbyBhaGVhZFxyXG4iLCBGQUxTRSk7CkBAIC0yNzMyLDIwICszMzE4LDIxIEBACiAv
KiBOb3cgbmVnb3RpYXRlIHRoZSBUTFMgc2Vzc2lvbi4gV2UgcHV0IG91ciBvd24gdGltZXIgb24g
aXQsIHNpbmNlIGl0IHNlZW1zCiB0aGF0IHRoZSBPcGVuU1NMIGxpYnJhcnkgZG9lc24ndC4gKi8K
IAotU1NMX3NldF93ZmQoc2VydmVyX3NzbCwgZmlsZW5vKHNtdHBfb3V0KSk7Ci1TU0xfc2V0X3Jm
ZChzZXJ2ZXJfc3NsLCBmaWxlbm8oc210cF9pbikpOwotU1NMX3NldF9hY2NlcHRfc3RhdGUoc2Vy
dmVyX3NzbCk7CitTU0xfc2V0X3dmZChzc2wsIGZpbGVubyhzbXRwX291dCkpOworU1NMX3NldF9y
ZmQoc3NsLCBmaWxlbm8oc210cF9pbikpOworU1NMX3NldF9hY2NlcHRfc3RhdGUoc3NsKTsKIAog
REVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiQ2FsbGluZyBTU0xfYWNjZXB0XG4iKTsKIAorRVJS
X2NsZWFyX2Vycm9yKCk7CiBzaWdhbHJtX3NlZW4gPSBGQUxTRTsKIGlmIChzbXRwX3JlY2VpdmVf
dGltZW91dCA+IDApIEFMQVJNKHNtdHBfcmVjZWl2ZV90aW1lb3V0KTsKLXJjID0gU1NMX2FjY2Vw
dChzZXJ2ZXJfc3NsKTsKK3JjID0gU1NMX2FjY2VwdChzc2wpOwogQUxBUk1fQ0xSKDApOwogCiBp
ZiAocmMgPD0gMCkKICAgewotICBpbnQgZXJyb3IgPSBTU0xfZ2V0X2Vycm9yKHNlcnZlcl9zc2ws
IHJjKTsKKyAgaW50IGVycm9yID0gU1NMX2dldF9lcnJvcihzc2wsIHJjKTsKICAgc3dpdGNoKGVy
cm9yKQogICAgIHsKICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgpAQCAtMjc1NCw5ICszMzQxLDEx
IEBACiAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46CiAgICAgICBERUJVRyhEX3Rscykg
ZGVidWdfcHJpbnRmKCJHb3QgU1NMX0VSUk9SX1pFUk9fUkVUVVJOXG4iKTsKICAgICAgICh2b2lk
KSB0bHNfZXJyb3IoVVMiU1NMX2FjY2VwdCIsIE5VTEwsIHNpZ2Fscm1fc2VlbiA/IFVTInRpbWVk
IG91dCIgOiBOVUxMLCBlcnJzdHIpOwotCi0gICAgICBpZiAoU1NMX2dldF9zaHV0ZG93bihzZXJ2
ZXJfc3NsKSA9PSBTU0xfUkVDRUlWRURfU0hVVERPV04pCi0JICAgIFNTTF9zaHV0ZG93bihzZXJ2
ZXJfc3NsKTsKKyNpZm5kZWYgRElTQUJMRV9FVkVOVAorICAgICAgKHZvaWQpIGV2ZW50X3JhaXNl
KGV2ZW50X2FjdGlvbiwgVVMidGxzOmZhaWw6Y29ubmVjdCIsICplcnJzdHIsIE5VTEwpOworI2Vu
ZGlmCisgICAgICBpZiAoU1NMX2dldF9zaHV0ZG93bihzc2wpID09IFNTTF9SRUNFSVZFRF9TSFVU
RE9XTikKKwlTU0xfc2h1dGRvd24oc3NsKTsKIAogICAgICAgdGxzX2Nsb3NlKE5VTEwsIFRMU19O
T19TSFVURE9XTik7CiAgICAgICByZXR1cm4gRkFJTDsKQEAgLTI3NjQsMTUgKzMzNTMsMTggQEAK
ICAgICAvKiBIYW5kbGUgZ2VudWluZSBlcnJvcnMgKi8KICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6
CiAgICAgICB7Ci0gICAgICB1c2NoYXIgKiBzID0gVVMiU1NMX2FjY2VwdCI7CisgICAgICB1c2No
YXIgKiBzID0gTlVMTDsKICAgICAgIGludCByID0gRVJSX0dFVF9SRUFTT04oRVJSX3BlZWtfZXJy
b3IoKSk7CiAgICAgICBpZiAoICByID09IFNTTF9SX1dST05HX1ZFUlNJT05fTlVNQkVSCiAjaWZk
ZWYgU1NMX1JfVkVSU0lPTl9UT09fTE9XCiAgICAgICAgICB8fCByID09IFNTTF9SX1ZFUlNJT05f
VE9PX0xPVwogI2VuZGlmCiAgICAgICAgICB8fCByID09IFNTTF9SX1VOS05PV05fUFJPVE9DT0wg
fHwgciA9PSBTU0xfUl9VTlNVUFBPUlRFRF9QUk9UT0NPTCkKLQlzID0gc3RyaW5nX3NwcmludGYo
IiVzICglcykiLCBzLCBTU0xfZ2V0X3ZlcnNpb24oc2VydmVyX3NzbCkpOwotICAgICAgKHZvaWQp
IHRsc19lcnJvcihzLCBOVUxMLCBzaWdhbHJtX3NlZW4gPyBVUyJ0aW1lZCBvdXQiIDogTlVMTCwg
ZXJyc3RyKTsKKwlzID0gc3RyaW5nX3NwcmludGYoIiglcykiLCBTU0xfZ2V0X3ZlcnNpb24oc3Ns
KSk7CisgICAgICAodm9pZCkgdGxzX2Vycm9yKFVTIlNTTF9hY2NlcHQiLCBOVUxMLCBzaWdhbHJt
X3NlZW4gPyBVUyJ0aW1lZCBvdXQiIDogcywgZXJyc3RyKTsKKyNpZm5kZWYgRElTQUJMRV9FVkVO
VAorICAgICAgKHZvaWQpIGV2ZW50X3JhaXNlKGV2ZW50X2FjdGlvbiwgVVMidGxzOmZhaWw6Y29u
bmVjdCIsICplcnJzdHIsIE5VTEwpOworI2VuZGlmCiAgICAgICByZXR1cm4gRkFJTDsKICAgICAg
IH0KIApAQCAtMjc4MywxMSArMzM3NSwyMCBAQAogCWlmICghZXJybm8pCiAJICB7CiAJICAqZXJy
c3RyID0gVVMiU1NMX2FjY2VwdDogVENQIGNvbm5lY3Rpb24gY2xvc2VkIGJ5IHBlZXIiOworI2lm
bmRlZiBESVNBQkxFX0VWRU5UCisJICAodm9pZCkgZXZlbnRfcmFpc2UoZXZlbnRfYWN0aW9uLCBV
UyJ0bHM6ZmFpbDpjb25uZWN0IiwgKmVycnN0ciwgTlVMTCk7CisjZW5kaWYKIAkgIHJldHVybiBG
QUlMOwogCSAgfQogCURFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIiAtIHN5c2NhbGwgJXNcbiIs
IHN0cmVycm9yKGVycm5vKSk7CiAJfQotICAgICAgKHZvaWQpIHRsc19lcnJvcihVUyJTU0xfYWNj
ZXB0IiwgTlVMTCwgc2lnYWxybV9zZWVuID8gVVMidGltZWQgb3V0IiA6IE5VTEwsIGVycnN0cik7
CisgICAgICAodm9pZCkgdGxzX2Vycm9yKFVTIlNTTF9hY2NlcHQiLCBOVUxMLAorCQkgICAgICBz
aWdhbHJtX3NlZW4gPyBVUyJ0aW1lZCBvdXQiCisJCSAgICAgIDogRVJSX3BlZWtfZXJyb3IoKSA/
IE5VTEwgOiBzdHJpbmdfc3ByaW50ZigicmV0ICVkIiwgZXJyb3IpLAorCQkgICAgICBlcnJzdHIp
OworI2lmbmRlZiBESVNBQkxFX0VWRU5UCisgICAgICAodm9pZCkgZXZlbnRfcmFpc2UoZXZlbnRf
YWN0aW9uLCBVUyJ0bHM6ZmFpbDpjb25uZWN0IiwgKmVycnN0ciwgTlVMTCk7CisjZW5kaWYKICAg
ICAgIHJldHVybiBGQUlMOwogICAgIH0KICAgfQpAQCAtMjc5Niw0MyArMzM5Nyw2NCBAQAogRVJS
X2NsZWFyX2Vycm9yKCk7CS8qIEV2ZW4gc3VjY2VzcyBjYW4gbGVhdmUgZXJyb3JzIGluIHRoZSBz
dGFjay4gU2VlbiB3aXRoCiAJCQlhbm9uLWF1dGhlbnRpY2F0aW9uIGNpcGhlcnN1aXRlIG5lZ290
aWF0ZWQuICovCiAKLSNpZmRlZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQotaWYgKFNTTF9zZXNz
aW9uX3JldXNlZChzZXJ2ZXJfc3NsKSkKKyNpZm5kZWYgRElTQUJMRV9UTFNfUkVTVU1FCitpZiAo
U1NMX3Nlc3Npb25fcmV1c2VkKHNzbCkpCiAgIHsKICAgdGxzX2luLnJlc3VtcHRpb24gfD0gUkVT
VU1FX1VTRUQ7CiAgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIlNlc3Npb24gcmV1c2VkXG4i
KTsKICAgfQogI2VuZGlmCiAKKyNpZmRlZiBFWElNX0hBVkVfQUxQTgorLyogSWYgcmVxdWlyZS1h
bHBuLCBjaGVjayBzZXJ2ZXJfc2Vlbl9hbHBuIGhlcmUuICBFbHNlIGFib3J0IFRMUyAqLworaWYg
KCF0bHNfYWxwbiB8fCAhKnRsc19hbHBuKQorICB7IERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYo
IlRMUzogd2FzIG5vdCB3YXRjaGluZyBmb3IgQUxQTlxuIik7IH0KK2Vsc2UgaWYgKCFzZXJ2ZXJf
c2Vlbl9hbHBuKQorICBpZiAodmVyaWZ5X2NoZWNrX2hvc3QoJmhvc3RzX3JlcXVpcmVfYWxwbikg
PT0gT0spCisgICAgeworICAgIC8qIFdlJ2QgbGlrZSB0byBzZW5kIGEgZGVmaW5pdGl2ZSBBbGVy
dCBidXQgT3BlblNTTCBwcm92aWRlcyBubyBmYWNpbGl0eSAqLworICAgIFNTTF9zaHV0ZG93bihz
c2wpOworICAgIHRsc19lcnJvcihVUyJoYW5kc2hha2UiLCBOVUxMLCBVUyJBTFBOIHJlcXVpcmVk
IGJ1dCBub3QgbmVnb3RpYXRlZCIsIGVycnN0cik7CisgICAgcmV0dXJuIEZBSUw7CisgICAgfQor
ICBlbHNlCisgICAgeyBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJUTFM6IG5vIEFMUE4gcHJl
c2VudGVkIGluIGhhbmRzaGFrZVxuIik7IH0KK2Vsc2UgREVCVUcoRF90bHMpCisgIHsKKyAgY29u
c3QgdXNjaGFyICogbmFtZTsKKyAgdW5zaWduZWQgbGVuOworICBTU0xfZ2V0MF9hbHBuX3NlbGVj
dGVkKHNzbCwgJm5hbWUsICZsZW4pOworICBpZiAobGVuICYmIG5hbWUpCisgICAgZGVidWdfcHJp
bnRmKCJBTFBOIG5lZ290aWF0ZWQ6ICclLipzJ1xuIiwgKGludCkqbmFtZSwgbmFtZSsxKTsKKyAg
ZWxzZQorICAgIGRlYnVnX3ByaW50ZigiQUxQTjogbm8gcHJvdG9jb2wgbmVnb3RpYXRlZFxuIik7
CisgIH0KKyNlbmRpZgorCisKIC8qIFRMUyBoYXMgYmVlbiBzZXQgdXAuIFJlY29yZCBkYXRhIGZv
ciB0aGUgY29ubmVjdGlvbiwKIGFkanVzdCB0aGUgaW5wdXQgZnVuY3Rpb25zIHRvIHJlYWQgdmlh
IFRMUywgYW5kIGluaXRpYWxpemUgdGhpbmdzLiAqLwogCiAjaWZkZWYgU1NMX2dldF9leHRtc19z
dXBwb3J0Ci10bHNfaW4uZXh0X21hc3Rlcl9zZWNyZXQgPSBTU0xfZ2V0X2V4dG1zX3N1cHBvcnQo
c2VydmVyX3NzbCkgPT0gMTsKK3Rsc19pbi5leHRfbWFzdGVyX3NlY3JldCA9IFNTTF9nZXRfZXh0
bXNfc3VwcG9ydChzc2wpID09IDE7CiAjZW5kaWYKLXBlZXJfY2VydChzZXJ2ZXJfc3NsLCAmdGxz
X2luLCBwZWVyZG4sIHNpemVvZihwZWVyZG4pKTsKK3BlZXJfY2VydChzc2wsICZ0bHNfaW4sIHBl
ZXJkbiwgc2l6ZW9mKHBlZXJkbikpOwogCi10bHNfaW4udmVyID0gdGxzdmVyX25hbWUoc2VydmVy
X3NzbCk7Ci10bHNfaW4uY2lwaGVyID0gY29uc3RydWN0X2NpcGhlcl9uYW1lKHNlcnZlcl9zc2ws
IHRsc19pbi52ZXIsICZ0bHNfaW4uYml0cyk7Ci10bHNfaW4uY2lwaGVyX3N0ZG5hbWUgPSBjaXBo
ZXJfc3RkbmFtZV9zc2woc2VydmVyX3NzbCk7Cit0bHNfaW4udmVyID0gdGxzdmVyX25hbWUoc3Ns
KTsKK3Rsc19pbi5jaXBoZXIgPSBjb25zdHJ1Y3RfY2lwaGVyX25hbWUoc3NsLCB0bHNfaW4udmVy
LCAmdGxzX2luLmJpdHMpOwordGxzX2luLmNpcGhlcl9zdGRuYW1lID0gY2lwaGVyX3N0ZG5hbWVf
c3NsKHNzbCk7CiAKIERFQlVHKERfdGxzKQogICB7CiAgIHVzY2hhciBidWZbMjA0OF07Ci0gIGlm
IChTU0xfZ2V0X3NoYXJlZF9jaXBoZXJzKHNlcnZlcl9zc2wsIENTIGJ1Ziwgc2l6ZW9mKGJ1Zikp
KQorICBpZiAoU1NMX2dldF9zaGFyZWRfY2lwaGVycyhzc2wsIENTIGJ1Ziwgc2l6ZW9mKGJ1Zikp
KQogICAgIGRlYnVnX3ByaW50ZigiU2hhcmVkIGNpcGhlcnM6ICVzXG4iLCBidWYpOwogCi0jaWZk
ZWYgRVhJTV9IQVZFX09QRU5TU0xfS0VZTE9HCi0gIHsKLSAgQklPICogYnAgPSBCSU9fbmV3X2Zw
KGRlYnVnX2ZpbGUsIEJJT19OT0NMT1NFKTsKLSAgU1NMX1NFU1NJT05fcHJpbnRfa2V5bG9nKGJw
LCBTU0xfZ2V0X3Nlc3Npb24oc2VydmVyX3NzbCkpOwotICBCSU9fZnJlZShicCk7Ci0gIH0KLSNl
bmRpZgorICB0bHNfZHVtcF9rZXlsb2coc3NsKTsKIAogI2lmZGVmIEVYSU1fSEFWRV9TRVNTSU9O
X1RJQ0tFVAogICB7Ci0gIFNTTF9TRVNTSU9OICogc3MgPSBTU0xfZ2V0X3Nlc3Npb24oc2VydmVy
X3NzbCk7CisgIFNTTF9TRVNTSU9OICogc3MgPSBTU0xfZ2V0X3Nlc3Npb24oc3NsKTsKICAgaWYg
KFNTTF9TRVNTSU9OX2hhc190aWNrZXQoc3MpKQkvKiAxLjEuMCAqLwogICAgIGRlYnVnX3ByaW50
ZigiVGhlIHNlc3Npb24gaGFzIGEgdGlja2V0LCBsaWZlICVsdSBzZWNvbmRzXG4iLAogICAgICAg
U1NMX1NFU1NJT05fZ2V0X3RpY2tldF9saWZldGltZV9oaW50KHNzKSk7CkBAIC0yODQyLDcgKzM0
NjQsNyBAQAogCiAvKiBSZWNvcmQgdGhlIGNlcnRpZmljYXRlIHdlIHByZXNlbnRlZCAqLwogICB7
Ci0gIFg1MDkgKiBjcnQgPSBTU0xfZ2V0X2NlcnRpZmljYXRlKHNlcnZlcl9zc2wpOworICBYNTA5
ICogY3J0ID0gU1NMX2dldF9jZXJ0aWZpY2F0ZShzc2wpOwogICB0bHNfaW4ub3VyY2VydCA9IGNy
dCA/IFg1MDlfZHVwKGNydCkgOiBOVUxMOwogICB9CiAKQEAgLTI4NTAsMTIgKzM0NzIsMTIgQEAK
IFNlZSBkZXNjcmlwdGlvbiBpbiBodHRwczovL3BhcXVpZXIueHl6L3Bvc3RncmVzcWwtMi9jaGFu
bmVsLWJpbmRpbmctb3BlbnNzbC8gKi8KICAgewogICB1c2NoYXIgYywgKiBzOwotICBzaXplX3Qg
bGVuID0gU1NMX2dldF9wZWVyX2ZpbmlzaGVkKHNlcnZlcl9zc2wsICZjLCAwKTsKKyAgc2l6ZV90
IGxlbiA9IFNTTF9nZXRfcGVlcl9maW5pc2hlZChzc2wsICZjLCAwKTsKICAgaW50IG9sZF9wb29s
ID0gc3RvcmVfcG9vbDsKIAotICBTU0xfZ2V0X3BlZXJfZmluaXNoZWQoc2VydmVyX3NzbCwgcyA9
IHN0b3JlX2dldCgoaW50KWxlbiwgRkFMU0UpLCBsZW4pOworICBTU0xfZ2V0X3BlZXJfZmluaXNo
ZWQoc3NsLCBzID0gc3RvcmVfZ2V0KChpbnQpbGVuLCBHRVRfVU5UQUlOVEVEKSwgbGVuKTsKICAg
c3RvcmVfcG9vbCA9IFBPT0xfUEVSTTsKLSAgICB0bHNfaW4uY2hhbm5lbGJpbmRpbmcgPSBiNjRl
bmNvZGVfdGFpbnQoQ1VTIHMsIChpbnQpbGVuLCBGQUxTRSk7CisgICAgdGxzX2luLmNoYW5uZWxi
aW5kaW5nID0gYjY0ZW5jb2RlX3RhaW50KENVUyBzLCAoaW50KWxlbiwgR0VUX1VOVEFJTlRFRCk7
CiAgIHN0b3JlX3Bvb2wgPSBvbGRfcG9vbDsKICAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50Zigi
SGF2ZSBjaGFubmVsIGJpbmRpbmdzIGNhY2hlZCBmb3IgcG9zc2libGUgYXV0aCB1c2FnZSAlcFxu
IiwgdGxzX2luLmNoYW5uZWxiaW5kaW5nKTsKICAgfQpAQCAtMjg3MiwxMCArMzQ5NCwxMCBAQAog
cmVjZWl2ZV9nZXRjID0gdGxzX2dldGM7CiByZWNlaXZlX2dldGJ1ZiA9IHRsc19nZXRidWY7CiBy
ZWNlaXZlX2dldF9jYWNoZSA9IHRsc19nZXRfY2FjaGU7CityZWNlaXZlX2hhc2MgPSB0bHNfaGFz
YzsKIHJlY2VpdmVfdW5nZXRjID0gdGxzX3VuZ2V0YzsKIHJlY2VpdmVfZmVvZiA9IHRsc19mZW9m
OwogcmVjZWl2ZV9mZXJyb3IgPSB0bHNfZmVycm9yOwotcmVjZWl2ZV9zbXRwX2J1ZmZlcmVkID0g
dGxzX3NtdHBfYnVmZmVyZWQ7CiAKIHRsc19pbi5hY3RpdmUuc29jayA9IGZpbGVubyhzbXRwX291
dCk7CiB0bHNfaW4uYWN0aXZlLnRsc19jdHggPSBOVUxMOwkvKiBub3QgdXNpbmcgZXhwbGljaXQg
Y3R4IGZvciBzZXJ2ZXItc2lkZSAqLwpAQCAtMjg4NywxNiArMzUwOSwyMSBAQAogCiBzdGF0aWMg
aW50CiB0bHNfY2xpZW50X2Jhc2ljX2N0eF9pbml0KFNTTF9DVFggKiBjdHgsCi0gICAgaG9zdF9p
dGVtICogaG9zdCwgc210cF90cmFuc3BvcnRfb3B0aW9uc19ibG9jayAqIG9iLCB0bHNfZXh0X2N0
eF9jYiAqIGNiaW5mbywKKyAgICBob3N0X2l0ZW0gKiBob3N0LCBzbXRwX3RyYW5zcG9ydF9vcHRp
b25zX2Jsb2NrICogb2IsIGV4aW1fb3BlbnNzbF9zdGF0ZV9zdCAqIHN0YXRlLAogICAgIHVzY2hh
ciAqKiBlcnJzdHIpCiB7CiBpbnQgcmM7Ci0vKiBzdGljayB0byB0aGUgb2xkIGJlaGF2aW91ciBm
b3IgY29tcGF0aWJpbGl0eSBpZiB0bHNfdmVyaWZ5X2NlcnRpZmljYXRlcyBpcwotICAgc2V0IGJ1
dCBib3RoIHRsc192ZXJpZnlfaG9zdHMgYW5kIHRsc190cnlfdmVyaWZ5X2hvc3RzIGlzIG5vdCBz
ZXQuIENoZWNrIG9ubHkKLSAgIHRoZSBzcGVjaWZpZWQgaG9zdCBwYXR0ZXJucyBpZiBvbmUgb2Yg
dGhlbSBpcyBkZWZpbmVkICovCiAKLWlmICggICggICFvYi0+dGxzX3ZlcmlmeV9ob3N0cwotICAg
ICAgJiYgKCFvYi0+dGxzX3RyeV92ZXJpZnlfaG9zdHMgfHwgISpvYi0+dGxzX3RyeV92ZXJpZnlf
aG9zdHMpCisvKiBCYWNrLWNvbXBhdGlibGUgb2xkIGJlaGF2aW91ciBpZiB0bHNfdmVyaWZ5X2Nl
cnRpZmljYXRlcyBpcyBzZXQgYnV0IGJvdGgKK3Rsc192ZXJpZnlfaG9zdHMgYW5kIHRsc190cnlf
dmVyaWZ5X2hvc3RzIGFyZSBub3Qgc2V0LiBDaGVjayBvbmx5IHRoZSBzcGVjaWZpZWQKK2hvc3Qg
cGF0dGVybnMgaWYgb25lIG9mIHRoZW0gaXMgc2V0IHdpdGggY29udGVudC4gKi8KKworaWYgKCAg
KCAgKCAgIW9iLT50bHNfdmVyaWZ5X2hvc3RzIHx8ICFvYi0+dGxzX3ZlcmlmeV9ob3N0cworCSB8
fCBVc3RyY21wKG9iLT50bHNfdHJ5X3ZlcmlmeV9ob3N0cywgIjoiKSA9PSAwCisJICkKKyAgICAg
ICYmICggICFvYi0+dGxzX3RyeV92ZXJpZnlfaG9zdHMgfHwgISpvYi0+dGxzX3RyeV92ZXJpZnlf
aG9zdHMKKwkgfHwgVXN0cmNtcChvYi0+dGxzX3RyeV92ZXJpZnlfaG9zdHMsICI6IikgPT0gMAor
ICAgICAgICAgKQogICAgICAgKQogICAgfHwgdmVyaWZ5X2NoZWNrX2dpdmVuX2hvc3QoQ1VTUyAm
b2ItPnRsc192ZXJpZnlfaG9zdHMsIGhvc3QpID09IE9LCiAgICApCkBAIC0yOTA2LDIxICszNTMz
LDMzIEBACiBlbHNlCiAgIHJldHVybiBPSzsKIAotaWYgKChyYyA9IHNldHVwX2NlcnRzKGN0eCwg
b2ItPnRsc192ZXJpZnlfY2VydGlmaWNhdGVzLAotICAgICAgb2ItPnRsc19jcmwsIGhvc3QsIGNs
aWVudF92ZXJpZnlfb3B0aW9uYWwsIHZlcmlmeV9jYWxsYmFja19jbGllbnQsCi0gICAgICBlcnJz
dHIpKSAhPSBPSykKLSAgcmV0dXJuIHJjOworIHsKKyAgdXNjaGFyICogZXhwY2VydHM7CisgIGlm
ICghZXhwYW5kX2NoZWNrKG9iLT50bHNfdmVyaWZ5X2NlcnRpZmljYXRlcywgVVMidGxzX3Zlcmlm
eV9jZXJ0aWZpY2F0ZXMiLAorCQkgICAgJmV4cGNlcnRzLCBlcnJzdHIpKQorICAgIHJldHVybiBE
RUZFUjsKKyAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigidGxzX3ZlcmlmeV9jZXJ0aWZpY2F0
ZXM6ICVzXG4iLCBleHBjZXJ0cyk7CisKKyAgaWYgKHN0YXRlLT5saWJfc3RhdGUuY2FidW5kbGUp
CisgICAgeyBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJUTFM6IENBIGJ1bmRsZSB3YXMgcHJl
bG9hZGVkXG4iKTsgfQorICBlbHNlCisgICAgaWYgKChyYyA9IHNldHVwX2NlcnRzKGN0eCwgZXhw
Y2VydHMsIG9iLT50bHNfY3JsLCBob3N0LCBlcnJzdHIpKSAhPSBPSykKKyAgICAgIHJldHVybiBy
YzsKKworICBpZiAoZXhwY2VydHMgJiYgKmV4cGNlcnRzKQorICAgIHNldHVwX2NlcnRfdmVyaWZ5
KGN0eCwgY2xpZW50X3ZlcmlmeV9vcHRpb25hbCwgdmVyaWZ5X2NhbGxiYWNrX2NsaWVudCk7Cisg
fQogCiBpZiAodmVyaWZ5X2NoZWNrX2dpdmVuX2hvc3QoQ1VTUyAmb2ItPnRsc192ZXJpZnlfY2Vy
dF9ob3N0bmFtZXMsIGhvc3QpID09IE9LKQogICB7Ci0gIGNiaW5mby0+dmVyaWZ5X2NlcnRfaG9z
dG5hbWVzID0KKyAgc3RhdGUtPnZlcmlmeV9jZXJ0X2hvc3RuYW1lcyA9CiAjaWZkZWYgU1VQUE9S
VF9JMThOCiAgICAgc3RyaW5nX2RvbWFpbl91dGY4X3RvX2FsYWJlbChob3N0LT5jZXJ0bmFtZSwg
TlVMTCk7CiAjZWxzZQogICAgIGhvc3QtPmNlcnRuYW1lOwogI2VuZGlmCiAgIERFQlVHKERfdGxz
KSBkZWJ1Z19wcmludGYoIkNlcnQgaG9zdG5hbWUgdG8gY2hlY2s6IFwiJXNcIlxuIiwKLQkJICAg
IGNiaW5mby0+dmVyaWZ5X2NlcnRfaG9zdG5hbWVzKTsKKwkJICAgIHN0YXRlLT52ZXJpZnlfY2Vy
dF9ob3N0bmFtZXMpOwogICB9CiByZXR1cm4gT0s7CiB9CkBAIC0yOTgzLDI2ICszNjIyLDI2IEBA
CiAKIAogCi0jaWZkZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUKKyNpZm5kZWYgRElTQUJMRV9U
TFNfUkVTVU1FCiAvKiBPbiB0aGUgY2xpZW50LCBnZXQgYW55IHN0YXNoZWQgc2Vzc2lvbiBmb3Ig
dGhlIGdpdmVuIElQIGZyb20gaGludHMgZGIKIGFuZCBhcHBseSBpdCB0byB0aGUgc3NsLWNvbm5l
Y3Rpb24gZm9yIGF0dGVtcHRlZCByZXN1bXB0aW9uLiAqLwogCiBzdGF0aWMgdm9pZAotdGxzX3Jl
dHJpZXZlX3Nlc3Npb24odGxzX3N1cHBvcnQgKiB0bHNwLCBTU0wgKiBzc2wsIGNvbnN0IHVzY2hh
ciAqIGtleSkKK3Rsc19yZXRyaWV2ZV9zZXNzaW9uKHRsc19zdXBwb3J0ICogdGxzcCwgU1NMICog
c3NsKQogewotdGxzcC0+cmVzdW1wdGlvbiB8PSBSRVNVTUVfU1VQUE9SVEVEOwogaWYgKHRsc3At
Pmhvc3RfcmVzdW1hYmxlKQogICB7CisgIGNvbnN0IHVzY2hhciAqIGtleSA9IHRsc3AtPnJlc3Vt
ZV9pbmRleDsKICAgZGJkYXRhX3Rsc19zZXNzaW9uICogZHQ7CiAgIGludCBsZW47CiAgIG9wZW5f
ZGIgZGJibG9jaywgKiBkYm1fZmlsZTsKIAogICB0bHNwLT5yZXN1bXB0aW9uIHw9IFJFU1VNRV9D
TElFTlRfUkVRVUVTVEVEOwotICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJjaGVja2luZyBm
b3IgcmVzdW1hYmxlIHNlc3Npb24gZm9yICVzXG4iLCBrZXkpOworICBERUJVRyhEX3RscykKKyAg
ICBkZWJ1Z19wcmludGYoImNoZWNraW5nIGZvciByZXN1bWFibGUgc2Vzc2lvbiBmb3IgJXNcbiIs
IHRsc3AtPnJlc3VtZV9pbmRleCk7CiAgIGlmICgoZGJtX2ZpbGUgPSBkYmZuX29wZW4oVVMidGxz
IiwgT19SRFdSLCAmZGJibG9jaywgRkFMU0UsIEZBTFNFKSkpCiAgICAgewotICAgIC8qIGtleSBm
b3IgdGhlIGRiIGlzIHRoZSBJUCAqLwotICAgIGlmICgoZHQgPSBkYmZuX3JlYWRfd2l0aF9sZW5n
dGgoZGJtX2ZpbGUsIGtleSwgJmxlbikpKQorICAgIGlmICgoZHQgPSBkYmZuX3JlYWRfd2l0aF9s
ZW5ndGgoZGJtX2ZpbGUsIHRsc3AtPnJlc3VtZV9pbmRleCwgJmxlbikpKQogICAgICAgewogICAg
ICAgU1NMX1NFU1NJT04gKiBzcyA9IE5VTEw7CiAgICAgICBjb25zdCB1c2NoYXIgKiBzZXNzX2Fz
bjEgPSBkdC0+c2Vzc2lvbjsKQEAgLTMwMTcsMzAgKzM2NTYsMzMgQEAKIAkgIGRlYnVnX3ByaW50
ZigiZGVjb2Rpbmcgc2Vzc2lvbjogJXNcbiIsIHNzbF9lcnJzdHJpbmcpOwogCSAgfQogCX0KLSNp
ZmRlZiBFWElNX0hBVkVfU0VTU0lPTl9USUNLRVQKLSAgICAgIGVsc2UgaWYgKCBTU0xfU0VTU0lP
Tl9nZXRfdGlja2V0X2xpZmV0aW1lX2hpbnQoc3MpICsgZHQtPnRpbWVfc3RhbXAKLQkgICAgICAg
PCB0aW1lKE5VTEwpKQorICAgICAgZWxzZQogCXsKLQlERUJVRyhEX3RscykgZGVidWdfcHJpbnRm
KCJzZXNzaW9uIGV4cGlyZWRcbiIpOwotCWRiZm5fZGVsZXRlKGRibV9maWxlLCBrZXkpOwotCX0K
Kwl1bnNpZ25lZCBsb25nIGxpZmV0aW1lID0KKyNpZmRlZiBFWElNX0hBVkVfU0VTU0lPTl9USUNL
RVQKKwkgIFNTTF9TRVNTSU9OX2dldF90aWNrZXRfbGlmZXRpbWVfaGludChzcyk7CisjZWxzZQkJ
CS8qIFVzZSwgZmFpcmx5IGFyYml0cmlsYXJpbHksIHdoYXQgd2UgYXMgc2VydmVyIHdvdWxkICov
CisJICBmLnJ1bm5pbmdfaW5fdGVzdF9oYXJuZXNzID8gNiA6IHNzbF9zZXNzaW9uX3RpbWVvdXQ7
CiAjZW5kaWYKLSAgICAgIGVsc2UgaWYgKCFTU0xfc2V0X3Nlc3Npb24oc3NsLCBzcykpCi0Jewot
CURFQlVHKERfdGxzKQorCWlmIChsaWZldGltZSArIGR0LT50aW1lX3N0YW1wIDwgdGltZShOVUxM
KSkKKwkgIHsKKwkgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoInNlc3Npb24gZXhwaXJlZFxu
Iik7CisJICBkYmZuX2RlbGV0ZShkYm1fZmlsZSwgdGxzcC0+cmVzdW1lX2luZGV4KTsKKwkgIH0K
KwllbHNlIGlmIChTU0xfc2V0X3Nlc3Npb24oc3NsLCBzcykpCisJICB7CisJICBERUJVRyhEX3Rs
cykgZGVidWdfcHJpbnRmKCJnb29kIHNlc3Npb25cbiIpOworCSAgdGxzcC0+cmVzdW1wdGlvbiB8
PSBSRVNVTUVfQ0xJRU5UX1NVR0dFU1RFRDsKKwkgIHRsc3AtPnZlcmlmeV9vdmVycmlkZSA9IGR0
LT52ZXJpZnlfb3ZlcnJpZGU7CisJICB0bHNwLT5vY3NwID0gZHQtPm9jc3A7CisJICB9CisJZWxz
ZSBERUJVRyhEX3RscykKIAkgIHsKIAkgIEVSUl9lcnJvcl9zdHJpbmdfbihFUlJfZ2V0X2Vycm9y
KCksCiAJICAgIHNzbF9lcnJzdHJpbmcsIHNpemVvZihzc2xfZXJyc3RyaW5nKSk7CiAJICBkZWJ1
Z19wcmludGYoImFwcGx5aW5nIHNlc3Npb24gdG8gc3NsOiAlc1xuIiwgc3NsX2VycnN0cmluZyk7
CiAJICB9CiAJfQotICAgICAgZWxzZQotCXsKLQlERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJn
b29kIHNlc3Npb25cbiIpOwotCXRsc3AtPnJlc3VtcHRpb24gfD0gUkVTVU1FX0NMSUVOVF9TVUdH
RVNURUQ7Ci0JdGxzcC0+dmVyaWZ5X292ZXJyaWRlID0gZHQtPnZlcmlmeV9vdmVycmlkZTsKLQl0
bHNwLT5vY3NwID0gZHQtPm9jc3A7Ci0JfQogICAgICAgfQogICAgIGVsc2UKICAgICAgIERFQlVH
KERfdGxzKSBkZWJ1Z19wcmludGYoIm5vIHNlc3Npb24gcmVjb3JkXG4iKTsKQEAgLTMwNTUsNyAr
MzY5Nyw3IEBACiBzdGF0aWMgaW50CiB0bHNfc2F2ZV9zZXNzaW9uX2NiKFNTTCAqIHNzbCwgU1NM
X1NFU1NJT04gKiBzcykKIHsKLXRsc19leHRfY3R4X2NiICogY2JpbmZvID0gU1NMX2dldF9leF9k
YXRhKHNzbCwgdGxzX2V4ZGF0YV9pZHgpOworZXhpbV9vcGVuc3NsX3N0YXRlX3N0ICogY2JpbmZv
ID0gU1NMX2dldF9leF9kYXRhKHNzbCwgdGxzX2V4ZGF0YV9pZHgpOwogdGxzX3N1cHBvcnQgKiB0
bHNwOwogCiBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJ0bHNfc2F2ZV9zZXNzaW9uX2NiXG4i
KTsKQEAgLTMwNjgsNyArMzcxMCw3IEBACiAgIHsKICAgaW50IGxlbiA9IGkyZF9TU0xfU0VTU0lP
TihzcywgTlVMTCk7CiAgIGludCBkbGVuID0gc2l6ZW9mKGRiZGF0YV90bHNfc2Vzc2lvbikgKyBs
ZW47Ci0gIGRiZGF0YV90bHNfc2Vzc2lvbiAqIGR0ID0gc3RvcmVfZ2V0KGRsZW4sIFRSVUUpOwor
ICBkYmRhdGFfdGxzX3Nlc3Npb24gKiBkdCA9IHN0b3JlX2dldChkbGVuLCBHRVRfVEFJTlRFRCk7
CiAgIHVzY2hhciAqIHMgPSBkdC0+c2Vzc2lvbjsKICAgb3Blbl9kYiBkYmJsb2NrLCAqIGRibV9m
aWxlOwogCkBAIC0zMDgxLDkgKzM3MjMsNyBAQAogCiAgIGlmICgoZGJtX2ZpbGUgPSBkYmZuX29w
ZW4oVVMidGxzIiwgT19SRFdSLCAmZGJibG9jaywgRkFMU0UsIEZBTFNFKSkpCiAgICAgewotICAg
IGNvbnN0IHVzY2hhciAqIGtleSA9IGNiaW5mby0+aG9zdC0+YWRkcmVzczsKLSAgICBkYmZuX2Rl
bGV0ZShkYm1fZmlsZSwga2V5KTsKLSAgICBkYmZuX3dyaXRlKGRibV9maWxlLCBrZXksIGR0LCBk
bGVuKTsKKyAgICBkYmZuX3dyaXRlKGRibV9maWxlLCB0bHNwLT5yZXN1bWVfaW5kZXgsIGR0LCBk
bGVuKTsKICAgICBkYmZuX2Nsb3NlKGRibV9maWxlKTsKICAgICBERUJVRyhEX3RscykgZGVidWdf
cHJpbnRmKCJ3cm90ZSBzZXNzaW9uIChsZW4gJXUpIHRvIGRiXG4iLAogCQkgICh1bnNpZ25lZClk
bGVuKTsKQEAgLTMwOTMsMjEgKzM3MzMsMjAgQEAKIH0KIAogCisvKiBDb25zdHJ1Y3QgYSBrZXkg
Zm9yIHNlc3Npb24gREIgbG9va3VwLCBhbmQgc2V0dXAgdGhlIFNTTF9DVFggZm9yIHJlc3VtcHRp
b24gKi8KKwogc3RhdGljIHZvaWQKIHRsc19jbGllbnRfY3R4X3Jlc3VtZV9wcmVoYW5kc2hha2Uo
Ci0gIGV4aW1fb3BlbnNzbF9jbGllbnRfdGxzX2N0eCAqIGV4aW1fY2xpZW50X2N0eCwgdGxzX3N1
cHBvcnQgKiB0bHNwLAotICBzbXRwX3RyYW5zcG9ydF9vcHRpb25zX2Jsb2NrICogb2IsIGhvc3Rf
aXRlbSAqIGhvc3QpCisgIGV4aW1fb3BlbnNzbF9jbGllbnRfdGxzX2N0eCAqIGV4aW1fY2xpZW50
X2N0eCwgc210cF9jb25uZWN0X2FyZ3MgKiBjb25uX2FyZ3MsCisgIHRsc19zdXBwb3J0ICogdGxz
cCwgc210cF90cmFuc3BvcnRfb3B0aW9uc19ibG9jayAqIG9iKQogewotLyogU2hvdWxkIHRoZSBj
bGllbnQgcmVxdWVzdCBhIHNlc3Npb24gcmVzdW1wdGlvbiB0aWNrZXQ/ICovCi1pZiAodmVyaWZ5
X2NoZWNrX2dpdmVuX2hvc3QoQ1VTUyAmb2ItPnRsc19yZXN1bXB0aW9uX2hvc3RzLCBob3N0KSA9
PSBPSykKLSAgewotICB0bHNwLT5ob3N0X3Jlc3VtYWJsZSA9IFRSVUU7Cit0bHNwLT5ob3N0X3Jl
c3VtYWJsZSA9IFRSVUU7Cit0bHNfY2xpZW50X3Jlc21wdGlvbl9rZXkodGxzcCwgY29ubl9hcmdz
LCBvYik7CiAKLSAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKGV4aW1fY2xpZW50X2N0
eC0+Y3R4LAotCVNTTF9TRVNTX0NBQ0hFX0NMSUVOVAotCXwgU1NMX1NFU1NfQ0FDSEVfTk9fSU5U
RVJOQUwgfCBTU0xfU0VTU19DQUNIRV9OT19BVVRPX0NMRUFSKTsKLSAgU1NMX0NUWF9zZXNzX3Nl
dF9uZXdfY2IoZXhpbV9jbGllbnRfY3R4LT5jdHgsIHRsc19zYXZlX3Nlc3Npb25fY2IpOwotICB9
CitTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUoZXhpbV9jbGllbnRfY3R4LT5jdHgsCisg
ICAgICBTU0xfU0VTU19DQUNIRV9DTElFTlQKKyAgICAgIHwgU1NMX1NFU1NfQ0FDSEVfTk9fSU5U
RVJOQUwgfCBTU0xfU0VTU19DQUNIRV9OT19BVVRPX0NMRUFSKTsKK1NTTF9DVFhfc2Vzc19zZXRf
bmV3X2NiKGV4aW1fY2xpZW50X2N0eC0+Y3R4LCB0bHNfc2F2ZV9zZXNzaW9uX2NiKTsKIH0KIAog
c3RhdGljIEJPT0wKQEAgLTMxMjEsMTcgKzM3NjAsMTcgQEAKICAgU1NMX2NsZWFyX29wdGlvbnMo
c3NsLCBTU0xfT1BfTk9fVElDS0VUKTsKIAogICB0bHNfZXhkYXRhX2lkeCA9IFNTTF9nZXRfZXhf
bmV3X2luZGV4KDAsIDAsIDAsIDAsIDApOwotICBpZiAoIVNTTF9zZXRfZXhfZGF0YShzc2wsIHRs
c19leGRhdGFfaWR4LCBjbGllbnRfc3RhdGljX2NiaW5mbykpCisgIGlmICghU1NMX3NldF9leF9k
YXRhKHNzbCwgdGxzX2V4ZGF0YV9pZHgsIGNsaWVudF9zdGF0aWNfc3RhdGUpKQogICAgIHsKICAg
ICB0bHNfZXJyb3IoVVMic2V0IGV4X2RhdGEiLCBob3N0LCBOVUxMLCBlcnJzdHIpOwogICAgIHJl
dHVybiBGQUxTRTsKICAgICB9Ci0gIGRlYnVnX3ByaW50ZigidGxzX2V4ZGF0YV9pZHggJWQgY2Jp
bmZvICVwXG4iLCB0bHNfZXhkYXRhX2lkeCwgY2xpZW50X3N0YXRpY19jYmluZm8pOworICBkZWJ1
Z19wcmludGYoInRsc19leGRhdGFfaWR4ICVkIGNiaW5mbyAlcFxuIiwgdGxzX2V4ZGF0YV9pZHgs
IGNsaWVudF9zdGF0aWNfc3RhdGUpOwogICB9CiAKIHRsc3AtPnJlc3VtcHRpb24gPSBSRVNVTUVf
U1VQUE9SVEVEOwogLyogUGljayB1cCBhIHByZXZpb3VzIHNlc3Npb24sIHNhdmVkIG9uIGFuIG9s
ZCB0aWNrZXQgKi8KLXRsc19yZXRyaWV2ZV9zZXNzaW9uKHRsc3AsIHNzbCwgaG9zdC0+YWRkcmVz
cyk7Cit0bHNfcmV0cmlldmVfc2Vzc2lvbih0bHNwLCBzc2wpOwogcmV0dXJuIFRSVUU7CiB9CiAK
QEAgLTMxNDUsNyArMzc4NCw1MSBAQAogICB0bHNwLT5yZXN1bXB0aW9uIHw9IFJFU1VNRV9VU0VE
OwogICB9CiB9Ci0jZW5kaWYJLyogRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUgKi8KKyNlbmRpZgkv
KiAhRElTQUJMRV9UTFNfUkVTVU1FICovCisKKworI2lmZGVmIEVYSU1fSEFWRV9BTFBOCisvKiBF
eHBhbmQgYW5kIGNvbnZlcnQgYW4gRXhpbSBsaXN0IHRvIGFuIEFMUE4gbGlzdC4gIEZhbHNlIHJl
dHVybiBmb3IgZmFpbC4KK05VTEwgcGxpc3QgcmV0dXJuIGZvciBzaWxlbnQgbm8tQUxQTi4KKwor
T3ZlcndpdGUgdGhlIHBhc3NlZC1pbiBsaXN0IHdpdGggdGhlIGV4cGFuZGVkIHZlcnNpb24uCisq
LworCitzdGF0aWMgQk9PTAordGxzX2FscG5fcGxpc3QodXNjaGFyICoqIHRsc19hbHBuLCBjb25z
dCB1c2NoYXIgKiogcGxpc3QsIHVuc2lnbmVkICogcGxlbiwKKyAgdXNjaGFyICoqIGVycnN0cikK
K3sKK3VzY2hhciAqIGV4cF9hbHBuOworCitpZiAoIWV4cGFuZF9jaGVjaygqdGxzX2FscG4sIFVT
InRsc19hbHBuIiwgJmV4cF9hbHBuLCBlcnJzdHIpKQorICByZXR1cm4gRkFMU0U7CisqdGxzX2Fs
cG4gPSBleHBfYWxwbjsKKworaWYgKCFleHBfYWxwbikKKyAgeworICBERUJVRyhEX3RscykgZGVi
dWdfcHJpbnRmKCJTZXR0aW5nIFRMUyBBTFBOIGZvcmNlZCB0byBmYWlsLCBub3Qgc2VuZGluZ1xu
Iik7CisgICpwbGlzdCA9IE5VTEw7CisgIH0KK2Vsc2UKKyAgeworICAvKiBUaGUgc2VydmVyIGlt
cGxlbWVudGF0aW9uIG9ubHkgYWNjZXB0cyBleGFjdGx5IG9uZSBwcm90b2NvbCBuYW1lCisgIGJ1
dCBpdCdzIGxpdHRsZSBleHRyYSBjb2RlIGNvbXBsZXhpdHkgaW4gdGhlIGNsaWVudC4gKi8KKwor
ICBjb25zdCB1c2NoYXIgKiBsaXN0ID0gZXhwX2FscG47CisgIHVzY2hhciAqIHAgPSBzdG9yZV9n
ZXQoVXN0cmxlbihleHBfYWxwbiksIGV4cF9hbHBuKSwgKiBzLCAqIHQ7CisgIGludCBzZXAgPSAw
OworICB1c2NoYXIgbGVuOworCisgIGZvciAodCA9IHA7IHMgPSBzdHJpbmdfbmV4dGlubGlzdCgm
bGlzdCwgJnNlcCwgTlVMTCwgMCk7IHQgKz0gbGVuKQorICAgIHsKKyAgICAqdCsrID0gbGVuID0g
KHVzY2hhcikgVXN0cmxlbihzKTsKKyAgICBtZW1jcHkodCwgcywgbGVuKTsKKyAgICB9CisgICpw
bGlzdCA9ICgqcGxlbiA9IHQgLSBwKSA/IHAgOiBOVUxMOworICB9CityZXR1cm4gVFJVRTsKK30K
KyNlbmRpZgkvKiBFWElNX0hBVkVfQUxQTiAqLwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMTg2LDcgKzM4NjksNyBAQAogCiByYyA9
IHN0b3JlX3Bvb2w7CiBzdG9yZV9wb29sID0gUE9PTF9QRVJNOwotZXhpbV9jbGllbnRfY3R4ID0g
c3RvcmVfZ2V0KHNpemVvZihleGltX29wZW5zc2xfY2xpZW50X3Rsc19jdHgpLCBGQUxTRSk7Citl
eGltX2NsaWVudF9jdHggPSBzdG9yZV9nZXQoc2l6ZW9mKGV4aW1fb3BlbnNzbF9jbGllbnRfdGxz
X2N0eCksIEdFVF9VTlRBSU5URUQpOwogZXhpbV9jbGllbnRfY3R4LT5jb3JrZWQgPSBOVUxMOwog
c3RvcmVfcG9vbCA9IHJjOwogCkBAIC0zMjIzLDE0ICszOTA2LDE1IEBACiAgIH0KICNlbmRpZgog
Ci1yYyA9IHRsc19pbml0KCZleGltX2NsaWVudF9jdHgtPmN0eCwgaG9zdCwgTlVMTCwKLSAgICBv
Yi0+dGxzX2NlcnRpZmljYXRlLCBvYi0+dGxzX3ByaXZhdGVrZXksCityYyA9IHRsc19pbml0KGhv
c3QsIG9iLAogI2lmbmRlZiBESVNBQkxFX09DU1AKICAgICAodm9pZCAqKShsb25nKXJlcXVlc3Rf
b2NzcCwKICNlbmRpZgotICAgIGNvb2tpZSwgJmNsaWVudF9zdGF0aWNfY2JpbmZvLCB0bHNwLCBl
cnJzdHIpOworICAgIGNvb2tpZSwgJmNsaWVudF9zdGF0aWNfc3RhdGUsIHRsc3AsIGVycnN0cik7
CiBpZiAocmMgIT0gT0spIHJldHVybiBGQUxTRTsKIAorZXhpbV9jbGllbnRfY3R4LT5jdHggPSBj
bGllbnRfc3RhdGljX3N0YXRlLT5saWJfc3RhdGUubGliX2N0eDsKKwogdGxzcC0+Y2VydGlmaWNh
dGVfdmVyaWZpZWQgPSBGQUxTRTsKIGNsaWVudF92ZXJpZnlfY2FsbGJhY2tfY2FsbGVkID0gRkFM
U0U7CiAKQEAgLTMyNDYsMjEgKzM5MzAsMjUgQEAKICAgICByZXR1cm4gRkFMU0U7CiAgIGlmIChl
eHBjaXBoZXJzICYmICpleHBjaXBoZXJzID09ICdcMCcpCiAgICAgZXhwY2lwaGVycyA9IE5VTEw7
CisKKyAgbm9ybWFsaXNlX2NpcGhlcnMoJmV4cGNpcGhlcnMsIG9iLT5kYW5lX3JlcXVpcmVfdGxz
X2NpcGhlcnMpOwogICB9CiAjZW5kaWYKLWlmICghZXhwY2lwaGVycyAmJgotICAgICFleHBhbmRf
Y2hlY2sob2ItPnRsc19yZXF1aXJlX2NpcGhlcnMsIFVTInRsc19yZXF1aXJlX2NpcGhlcnMiLAor
aWYgKCFleHBjaXBoZXJzKQorICB7CisgIGlmICghZXhwYW5kX2NoZWNrKG9iLT50bHNfcmVxdWly
ZV9jaXBoZXJzLCBVUyJ0bHNfcmVxdWlyZV9jaXBoZXJzIiwKICAgICAgICZleHBjaXBoZXJzLCBl
cnJzdHIpKQotICByZXR1cm4gRkFMU0U7CisgICAgcmV0dXJuIEZBTFNFOwogCi0vKiBJbiBPcGVu
U1NMLCBjaXBoZXIgY29tcG9uZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGh5cGhlbnMuIEluIEdudVRM
UywgdGhleQotYXJlIHNlcGFyYXRlZCBieSB1bmRlcnNjb3Jlcy4gU28gdGhhdCBJIGNhbiB1c2Ug
ZWl0aGVyIGZvcm0gaW4gbXkgdGVzdHMsIGFuZAotYWxzbyBmb3IgZ2VuZXJhbCBjb252ZW5pZW5j
ZSwgd2UgdHVybiB1bmRlcnNjb3JlcyBpbnRvIGh5cGhlbnMgaGVyZS4gKi8KKyAgLyogSW4gT3Bl
blNTTCwgY2lwaGVyIGNvbXBvbmVudHMgYXJlIHNlcGFyYXRlZCBieSBoeXBoZW5zLiBJbiBHbnVU
TFMsIHRoZXkKKyAgYXJlIHNlcGFyYXRlZCBieSB1bmRlcnNjb3Jlcy4gU28gdGhhdCBJIGNhbiB1
c2UgZWl0aGVyIGZvcm0gaW4gbXkgdGVzdHMsIGFuZAorICBhbHNvIGZvciBnZW5lcmFsIGNvbnZl
bmllbmNlLCB3ZSB0dXJuIHVuZGVyc2NvcmVzIGludG8gaHlwaGVucyBoZXJlLiAqLworCisgIG5v
cm1hbGlzZV9jaXBoZXJzKCZleHBjaXBoZXJzLCBvYi0+dGxzX3JlcXVpcmVfY2lwaGVycyk7Cisg
IH0KIAogaWYgKGV4cGNpcGhlcnMpCiAgIHsKLSAgdXNjaGFyICpzID0gZXhwY2lwaGVyczsKLSAg
d2hpbGUgKCpzKSB7IGlmICgqcyA9PSAnXycpICpzID0gJy0nOyBzKys7IH0KICAgREVCVUcoRF90
bHMpIGRlYnVnX3ByaW50ZigicmVxdWlyZWQgY2lwaGVyczogJXNcbiIsIGV4cGNpcGhlcnMpOwog
ICBpZiAoIVNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGV4aW1fY2xpZW50X2N0eC0+Y3R4LCBDUyBl
eHBjaXBoZXJzKSkKICAgICB7CkBAIC0zMjkxLDQ3ICszOTc5LDc4IEBACiAKICNlbmRpZgogCi0g
IGlmICh0bHNfY2xpZW50X2Jhc2ljX2N0eF9pbml0KGV4aW1fY2xpZW50X2N0eC0+Y3R4LCBob3N0
LCBvYiwKLQljbGllbnRfc3RhdGljX2NiaW5mbywgZXJyc3RyKSAhPSBPSykKLSAgICByZXR1cm4g
RkFMU0U7Ci0KLSNpZmRlZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQotdGxzX2NsaWVudF9jdHhf
cmVzdW1lX3ByZWhhbmRzaGFrZShleGltX2NsaWVudF9jdHgsIHRsc3AsIG9iLCBob3N0KTsKLSNl
bmRpZgotCi0KLWlmICghKGV4aW1fY2xpZW50X2N0eC0+c3NsID0gU1NMX25ldyhleGltX2NsaWVu
dF9jdHgtPmN0eCkpKQotICB7Ci0gIHRsc19lcnJvcihVUyJTU0xfbmV3IiwgaG9zdCwgTlVMTCwg
ZXJyc3RyKTsKK2lmICh0bHNfY2xpZW50X2Jhc2ljX2N0eF9pbml0KGV4aW1fY2xpZW50X2N0eC0+
Y3R4LCBob3N0LCBvYiwKKyAgICAgIGNsaWVudF9zdGF0aWNfc3RhdGUsIGVycnN0cikgIT0gT0sp
CiAgIHJldHVybiBGQUxTRTsKLSAgfQotU1NMX3NldF9zZXNzaW9uX2lkX2NvbnRleHQoZXhpbV9j
bGllbnRfY3R4LT5zc2wsIHNpZF9jdHgsIFVzdHJsZW4oc2lkX2N0eCkpOwotCi1TU0xfc2V0X2Zk
KGV4aW1fY2xpZW50X2N0eC0+c3NsLCBjY3R4LT5zb2NrKTsKLVNTTF9zZXRfY29ubmVjdF9zdGF0
ZShleGltX2NsaWVudF9jdHgtPnNzbCk7CiAKIGlmIChvYi0+dGxzX3NuaSkKICAgewogICBpZiAo
IWV4cGFuZF9jaGVjayhvYi0+dGxzX3NuaSwgVVMidGxzX3NuaSIsICZ0bHNwLT5zbmksIGVycnN0
cikpCiAgICAgcmV0dXJuIEZBTFNFOwogICBpZiAoIXRsc3AtPnNuaSkKLSAgICB7Ci0gICAgREVC
VUcoRF90bHMpIGRlYnVnX3ByaW50ZigiU2V0dGluZyBUTFMgU05JIGZvcmNlZCB0byBmYWlsLCBu
b3Qgc2VuZGluZ1xuIik7Ci0gICAgfQorICAgIHsgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50Zigi
U2V0dGluZyBUTFMgU05JIGZvcmNlZCB0byBmYWlsLCBub3Qgc2VuZGluZ1xuIik7IH0KICAgZWxz
ZSBpZiAoIVVzdHJsZW4odGxzcC0+c25pKSkKICAgICB0bHNwLT5zbmkgPSBOVUxMOwogICBlbHNl
CiAgICAgewotI2lmZGVmIEVYSU1fSEFWRV9PUEVOU1NMX1RMU0VYVAotICAgIERFQlVHKERfdGxz
KSBkZWJ1Z19wcmludGYoIlNldHRpbmcgVExTIFNOSSBcIiVzXCJcbiIsIHRsc3AtPnNuaSk7Ci0g
ICAgU1NMX3NldF90bHNleHRfaG9zdF9uYW1lKGV4aW1fY2xpZW50X2N0eC0+c3NsLCB0bHNwLT5z
bmkpOwotI2Vsc2UKKyNpZm5kZWYgRVhJTV9IQVZFX09QRU5TU0xfVExTRVhUCiAgICAgbG9nX3dy
aXRlKDAsIExPR19NQUlOLCAiU05JIHVudXNhYmxlIHdpdGggdGhpcyBPcGVuU1NMIGxpYnJhcnkg
dmVyc2lvbjsgaWdub3JpbmcgXCIlc1wiXG4iLAogICAgICAgICAgIHRsc3AtPnNuaSk7CisgICAg
dGxzcC0+c25pID0gTlVMTDsKICNlbmRpZgogICAgIH0KICAgfQogCitpZiAob2ItPnRsc19hbHBu
KQorI2lmZGVmIEVYSU1fSEFWRV9BTFBOCisgIHsKKyAgY29uc3QgdXNjaGFyICogcGxpc3Q7Cisg
IHVuc2lnbmVkIHBsZW47CisKKyAgaWYgKCF0bHNfYWxwbl9wbGlzdCgmb2ItPnRsc19hbHBuLCAm
cGxpc3QsICZwbGVuLCBlcnJzdHIpKQorICAgIHJldHVybiBGQUxTRTsKKyAgaWYgKHBsaXN0KQor
ICAgIGlmIChTU0xfQ1RYX3NldF9hbHBuX3Byb3RvcyhleGltX2NsaWVudF9jdHgtPmN0eCwgcGxp
c3QsIHBsZW4pICE9IDApCisgICAgICB7CisgICAgICB0bHNfZXJyb3IoVVMiYWxwbiBpbml0Iiwg
aG9zdCwgTlVMTCwgZXJyc3RyKTsKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICBl
bHNlCisgICAgICBERUJVRyhEX3RscykgZGVidWdfcHJpbnRmKCJTZXR0aW5nIFRMUyBBTFBOICcl
cydcbiIsIG9iLT50bHNfYWxwbik7CisgIH0KKyNlbHNlCisgIGxvZ193cml0ZSgwLCBMT0dfTUFJ
TiwgIkFMUE4gdW51c2FibGUgd2l0aCB0aGlzIE9wZW5TU0wgbGlicmFyeSB2ZXJzaW9uOyBpZ25v
cmluZyBcIiVzXCJcbiIsCisgICAgICAgICAgb2ItPnRsc19hbHBuKTsKKyNlbmRpZgorCisjaWZu
ZGVmIERJU0FCTEVfVExTX1JFU1VNRQorLypYWFggaGF2ZV9sYnNlcnZlcjogYW5vdGhlciBjbWRs
aW5lIGFyZyBwb3NzaWJseSwgZm9yIGNvbnRpbnVlZC1jb25uLCBidXQgdXNlCit3aWxsIGJlIHZl
cnkgbG93LiAqLworCitpZiAoIWNvbm5fYXJncy0+aGF2ZV9sYnNlcnZlcikJLyogd2FudGVkIGZv
ciB0bHNfY2xpZW50X3Jlc21wdGlvbl9rZXkoKSAqLworICB7IERFQlVHKERfdGxzKSBkZWJ1Z19w
cmludGYoInJlc3VtcHRpb24gbm90IHN1cHBvcnRlZCBvbiBjb250aW51ZWQtY29ubmVjdGlvblxu
Iik7IH0KK2Vsc2UgaWYgKHZlcmlmeV9jaGVja19naXZlbl9ob3N0KENVU1MgJm9iLT50bHNfcmVz
dW1wdGlvbl9ob3N0cywgaG9zdCkgPT0gT0spCisgIHRsc19jbGllbnRfY3R4X3Jlc3VtZV9wcmVo
YW5kc2hha2UoZXhpbV9jbGllbnRfY3R4LCBjb25uX2FyZ3MsIHRsc3AsIG9iKTsKKyNlbmRpZgor
CisKK2lmICghKGV4aW1fY2xpZW50X2N0eC0+c3NsID0gU1NMX25ldyhleGltX2NsaWVudF9jdHgt
PmN0eCkpKQorICB7CisgIHRsc19lcnJvcihVUyJTU0xfbmV3IiwgaG9zdCwgTlVMTCwgZXJyc3Ry
KTsKKyAgcmV0dXJuIEZBTFNFOworICB9CitTU0xfc2V0X3Nlc3Npb25faWRfY29udGV4dChleGlt
X2NsaWVudF9jdHgtPnNzbCwgc2lkX2N0eCwgVXN0cmxlbihzaWRfY3R4KSk7CitTU0xfc2V0X2Zk
KGV4aW1fY2xpZW50X2N0eC0+c3NsLCBjY3R4LT5zb2NrKTsKK1NTTF9zZXRfY29ubmVjdF9zdGF0
ZShleGltX2NsaWVudF9jdHgtPnNzbCk7CisKKyNpZmRlZiBFWElNX0hBVkVfT1BFTlNTTF9UTFNF
WFQKK2lmICh0bHNwLT5zbmkpCisgIHsKKyAgREVCVUcoRF90bHMpIGRlYnVnX3ByaW50ZigiU2V0
dGluZyBUTFMgU05JIFwiJXNcIlxuIiwgdGxzcC0+c25pKTsKKyAgU1NMX3NldF90bHNleHRfaG9z
dF9uYW1lKGV4aW1fY2xpZW50X2N0eC0+c3NsLCB0bHNwLT5zbmkpOworICB9CisjZW5kaWYKKwog
I2lmZGVmIFNVUFBPUlRfREFORQogaWYgKGNvbm5fYXJncy0+ZGFuZSkKICAgaWYgKGRhbmVfdGxz
YV9sb2FkKGV4aW1fY2xpZW50X2N0eC0+c3NsLCBob3N0LCAmY29ubl9hcmdzLT50bHNhX2Ruc2Es
IGVycnN0cikgIT0gT0spCkBAIC0zMzYxLDE5ICs0MDgwLDE5IEBACiBpZiAocmVxdWVzdF9vY3Nw
KQogICB7CiAgIFNTTF9zZXRfdGxzZXh0X3N0YXR1c190eXBlKGV4aW1fY2xpZW50X2N0eC0+c3Ns
LCBUTFNFWFRfU1RBVFVTVFlQRV9vY3NwKTsKLSAgY2xpZW50X3N0YXRpY19jYmluZm8tPnVfb2Nz
cC5jbGllbnQudmVyaWZ5X3JlcXVpcmVkID0gcmVxdWlyZV9vY3NwOworICBjbGllbnRfc3RhdGlj
X3N0YXRlLT51X29jc3AuY2xpZW50LnZlcmlmeV9yZXF1aXJlZCA9IHJlcXVpcmVfb2NzcDsKICAg
dGxzcC0+b2NzcCA9IE9DU1BfTk9UX1JFU1A7CiAgIH0KICNlbmRpZgogCi0jaWZkZWYgRVhQRVJJ
TUVOVEFMX1RMU19SRVNVTUUKKyNpZm5kZWYgRElTQUJMRV9UTFNfUkVTVU1FCiBpZiAoIXRsc19j
bGllbnRfc3NsX3Jlc3VtZV9wcmVoYW5kc2hha2UoZXhpbV9jbGllbnRfY3R4LT5zc2wsIHRsc3As
IGhvc3QsCiAgICAgICBlcnJzdHIpKQogICByZXR1cm4gRkFMU0U7CiAjZW5kaWYKIAogI2lmbmRl
ZiBESVNBQkxFX0VWRU5UCi1jbGllbnRfc3RhdGljX2NiaW5mby0+ZXZlbnRfYWN0aW9uID0gdGIg
PyB0Yi0+ZXZlbnRfYWN0aW9uIDogTlVMTDsKK2NsaWVudF9zdGF0aWNfc3RhdGUtPmV2ZW50X2Fj
dGlvbiA9IHRiID8gdGItPmV2ZW50X2FjdGlvbiA6IE5VTEw7CiAjZW5kaWYKIAogLyogVGhlcmUg
ZG9lc24ndCBzZWVtIHRvIGJlIGEgYnVpbHQtaW4gdGltZW91dCBvbiBjb25uZWN0aW9uLiAqLwpA
QCAtMzM5OCwxOSArNDExNywzMSBAQAogREVCVUcoRF90bHMpCiAgIHsKICAgZGVidWdfcHJpbnRm
KCJTU0xfY29ubmVjdCBzdWNjZWVkZWRcbiIpOwotI2lmZGVmIEVYSU1fSEFWRV9PUEVOU1NMX0tF
WUxPRwotICB7Ci0gIEJJTyAqIGJwID0gQklPX25ld19mcChkZWJ1Z19maWxlLCBCSU9fTk9DTE9T
RSk7Ci0gIFNTTF9TRVNTSU9OX3ByaW50X2tleWxvZyhicCwgU1NMX2dldF9zZXNzaW9uKGV4aW1f
Y2xpZW50X2N0eC0+c3NsKSk7Ci0gIEJJT19mcmVlKGJwKTsKLSAgfQotI2VuZGlmCisgIHRsc19k
dW1wX2tleWxvZyhleGltX2NsaWVudF9jdHgtPnNzbCk7CiAgIH0KIAotI2lmZGVmIEVYUEVSSU1F
TlRBTF9UTFNfUkVTVU1FCisjaWZuZGVmIERJU0FCTEVfVExTX1JFU1VNRQogdGxzX2NsaWVudF9y
ZXN1bWVfcG9zdGhhbmRzaGFrZShleGltX2NsaWVudF9jdHgsIHRsc3ApOwogI2VuZGlmCiAKKyNp
ZmRlZiBFWElNX0hBVkVfQUxQTgoraWYgKG9iLT50bHNfYWxwbikJLyogV2UgcmVxdWVzdGVkLiBT
ZWUgd2hhdCB3YXMgbmVnb3RpYXRlZC4gKi8KKyAgeworICBjb25zdCB1c2NoYXIgKiBuYW1lOwor
ICB1bnNpZ25lZCBsZW47CisKKyAgU1NMX2dldDBfYWxwbl9zZWxlY3RlZChleGltX2NsaWVudF9j
dHgtPnNzbCwgJm5hbWUsICZsZW4pOworICBpZiAobGVuID4gMCkKKyAgICB7IERFQlVHKERfdGxz
KSBkZWJ1Z19wcmludGYoIkFMUE4gbmVnb3RpYXRlZCAldTogJyUuKnMnXG4iLCBsZW4sIChpbnQp
Km5hbWUsIG5hbWUrMSk7IH0KKyAgZWxzZSBpZiAodmVyaWZ5X2NoZWNrX2dpdmVuX2hvc3QoQ1VT
UyAmb2ItPmhvc3RzX3JlcXVpcmVfYWxwbiwgaG9zdCkgPT0gT0spCisgICAgeworICAgIC8qIFdv
dWxkIGxpa2UgdG8gc2VuZCBhIHJlbGV2YW50IGZhdGFsIEFsZXJ0LCBidXQgT3BlblNTTCBoYXMg
bm8gQVBJICovCisgICAgdGxzX2Vycm9yKFVTImhhbmRzaGFrZSIsIGhvc3QsIFVTIkFMUE4gcmVx
dWlyZWQgYnV0IG5vdCBuZWdvdGlhdGVkIiwgZXJyc3RyKTsKKyAgICByZXR1cm4gRkFMU0U7Cisg
ICAgfQorICB9CisjZW5kaWYKKwogI2lmZGVmIFNTTF9nZXRfZXh0bXNfc3VwcG9ydAogdGxzcC0+
ZXh0X21hc3Rlcl9zZWNyZXQgPSBTU0xfZ2V0X2V4dG1zX3N1cHBvcnQoZXhpbV9jbGllbnRfY3R4
LT5zc2wpID09IDE7CiAjZW5kaWYKQEAgLTM0MzMsOSArNDE2NCw5IEBACiAgIHNpemVfdCBsZW4g
PSBTU0xfZ2V0X2ZpbmlzaGVkKGV4aW1fY2xpZW50X2N0eC0+c3NsLCAmYywgMCk7CiAgIGludCBv
bGRfcG9vbCA9IHN0b3JlX3Bvb2w7CiAKLSAgU1NMX2dldF9maW5pc2hlZChleGltX2NsaWVudF9j
dHgtPnNzbCwgcyA9IHN0b3JlX2dldCgoaW50KWxlbiwgVFJVRSksIGxlbik7CisgIFNTTF9nZXRf
ZmluaXNoZWQoZXhpbV9jbGllbnRfY3R4LT5zc2wsIHMgPSBzdG9yZV9nZXQoKGludClsZW4sIEdF
VF9UQUlOVEVEKSwgbGVuKTsKICAgc3RvcmVfcG9vbCA9IFBPT0xfUEVSTTsKLSAgICB0bHNwLT5j
aGFubmVsYmluZGluZyA9IGI2NGVuY29kZV90YWludChDVVMgcywgKGludClsZW4sIFRSVUUpOwor
ICAgIHRsc3AtPmNoYW5uZWxiaW5kaW5nID0gYjY0ZW5jb2RlX3RhaW50KENVUyBzLCAoaW50KWxl
biwgR0VUX1RBSU5URUQpOwogICBzdG9yZV9wb29sID0gb2xkX3Bvb2w7CiAgIERFQlVHKERfdGxz
KSBkZWJ1Z19wcmludGYoIkhhdmUgY2hhbm5lbCBiaW5kaW5ncyBjYWNoZWQgZm9yIHBvc3NpYmxl
IGF1dGggdXNhZ2UgJXAgJXBcbiIsIHRsc3AtPmNoYW5uZWxiaW5kaW5nLCB0bHNwKTsKICAgfQpA
QCAtMzQ1MywxNyArNDE4NCwxOCBAQAogc3RhdGljIEJPT0wKIHRsc19yZWZpbGwodW5zaWduZWQg
bGltKQogeworU1NMICogc3NsID0gc3RhdGVfc2VydmVyLmxpYl9zdGF0ZS5saWJfc3NsOwogaW50
IGVycm9yOwogaW50IGluYnl0ZXM7CiAKLURFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoIkNhbGxp
bmcgU1NMX3JlYWQoJXAsICVwLCAldSlcbiIsIHNlcnZlcl9zc2wsCitERUJVRyhEX3RscykgZGVi
dWdfcHJpbnRmKCJDYWxsaW5nIFNTTF9yZWFkKCVwLCAlcCwgJXUpXG4iLCBzc2wsCiAgIHNzbF94
ZmVyX2J1ZmZlciwgc3NsX3hmZXJfYnVmZmVyX3NpemUpOwogCiBFUlJfY2xlYXJfZXJyb3IoKTsK
IGlmIChzbXRwX3JlY2VpdmVfdGltZW91dCA+IDApIEFMQVJNKHNtdHBfcmVjZWl2ZV90aW1lb3V0
KTsKLWluYnl0ZXMgPSBTU0xfcmVhZChzZXJ2ZXJfc3NsLCBDUyBzc2xfeGZlcl9idWZmZXIsCitp
bmJ5dGVzID0gU1NMX3JlYWQoc3NsLCBDUyBzc2xfeGZlcl9idWZmZXIsCiAJCSAgTUlOKHNzbF94
ZmVyX2J1ZmZlcl9zaXplLCBsaW0pKTsKLWVycm9yID0gU1NMX2dldF9lcnJvcihzZXJ2ZXJfc3Ns
LCBpbmJ5dGVzKTsKK2Vycm9yID0gU1NMX2dldF9lcnJvcihzc2wsIGluYnl0ZXMpOwogaWYgKHNt
dHBfcmVjZWl2ZV90aW1lb3V0ID4gMCkgQUxBUk1fQ0xSKDApOwogCiBpZiAoaGFkX2NvbW1hbmRf
dGltZW91dCkJCS8qIHNldCBieSBzaWduYWwgaGFuZGxlciAqLwpAQCAtMzQ4Nyw4ICs0MjE5LDgg
QEAKICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46CiAgICAgREVCVUcoRF90bHMpIGRlYnVn
X3ByaW50ZigiR290IFNTTF9FUlJPUl9aRVJPX1JFVFVSTlxuIik7CiAKLSAgICBpZiAoU1NMX2dl
dF9zaHV0ZG93bihzZXJ2ZXJfc3NsKSA9PSBTU0xfUkVDRUlWRURfU0hVVERPV04pCi0JICBTU0xf
c2h1dGRvd24oc2VydmVyX3NzbCk7CisgICAgaWYgKFNTTF9nZXRfc2h1dGRvd24oc3NsKSA9PSBT
U0xfUkVDRUlWRURfU0hVVERPV04pCisJICBTU0xfc2h1dGRvd24oc3NsKTsKIAogICAgIHRsc19j
bG9zZShOVUxMLCBUTFNfTk9fU0hVVERPV04pOwogICAgIHJldHVybiBGQUxTRTsKQEAgLTM1NDIs
NiArNDI3NCwxMiBAQAogcmV0dXJuIHNzbF94ZmVyX2J1ZmZlcltzc2xfeGZlcl9idWZmZXJfbHdt
KytdOwogfQogCitCT09MCit0bHNfaGFzYyh2b2lkKQoreworcmV0dXJuIHNzbF94ZmVyX2J1ZmZl
cl9sd20gPCBzc2xfeGZlcl9idWZmZXJfaHdtOworfQorCiB1c2NoYXIgKgogdGxzX2dldGJ1Zih1
bnNpZ25lZCAqIGxlbikKIHsKQEAgLTM1NjYsMTAgKzQzMDQsMTMgQEAKIAogCiB2b2lkCi10bHNf
Z2V0X2NhY2hlKCkKK3Rsc19nZXRfY2FjaGUodW5zaWduZWQgbGltKQogewogI2lmbmRlZiBESVNB
QkxFX0RLSU0KIGludCBuID0gc3NsX3hmZXJfYnVmZmVyX2h3bSAtIHNzbF94ZmVyX2J1ZmZlcl9s
d207CitkZWJ1Z19wcmludGYoInRsc19nZXRfY2FjaGVcbiIpOworaWYgKG4gPiBsaW0pCisgIG4g
PSBsaW07CiBpZiAobiA+IDApCiAgIGRraW1fZXhpbV92ZXJpZnlfZmVlZChzc2xfeGZlcl9idWZm
ZXIrc3NsX3hmZXJfYnVmZmVyX2x3bSwgbik7CiAjZW5kaWYKQEAgLTM1NzcsOSArNDMxOCwxMCBA
QAogCiAKIEJPT0wKLXRsc19jb3VsZF9yZWFkKHZvaWQpCit0bHNfY291bGRfZ2V0Yyh2b2lkKQog
ewotcmV0dXJuIHNzbF94ZmVyX2J1ZmZlcl9sd20gPCBzc2xfeGZlcl9idWZmZXJfaHdtIHx8IFNT
TF9wZW5kaW5nKHNlcnZlcl9zc2wpID4gMDsKK3JldHVybiBzc2xfeGZlcl9idWZmZXJfbHdtIDwg
c3NsX3hmZXJfYnVmZmVyX2h3bQorICAgIHx8IFNTTF9wZW5kaW5nKHN0YXRlX3NlcnZlci5saWJf
c3RhdGUubGliX3NzbCkgPiAwOwogfQogCiAKQEAgLTM2MDIsNyArNDM0NCw4IEBACiBpbnQKIHRs
c19yZWFkKHZvaWQgKiBjdF9jdHgsIHVzY2hhciAqYnVmZiwgc2l6ZV90IGxlbikKIHsKLVNTTCAq
IHNzbCA9IGN0X2N0eCA/ICgoZXhpbV9vcGVuc3NsX2NsaWVudF90bHNfY3R4ICopY3RfY3R4KS0+
c3NsIDogc2VydmVyX3NzbDsKK1NTTCAqIHNzbCA9IGN0X2N0eCA/ICgoZXhpbV9vcGVuc3NsX2Ns
aWVudF90bHNfY3R4ICopY3RfY3R4KS0+c3NsCisJCSAgOiBzdGF0ZV9zZXJ2ZXIubGliX3N0YXRl
LmxpYl9zc2w7CiBpbnQgaW5ieXRlczsKIGludCBlcnJvcjsKIApAQCAtMzY1Miw3ICs0Mzk1LDgg
QEAKIHNpemVfdCBvbGVuID0gbGVuOwogaW50IG91dGJ5dGVzLCBlcnJvcjsKIFNTTCAqIHNzbCA9
IGN0X2N0eAotICA/ICgoZXhpbV9vcGVuc3NsX2NsaWVudF90bHNfY3R4ICopY3RfY3R4KS0+c3Ns
IDogc2VydmVyX3NzbDsKKyAgPyAoKGV4aW1fb3BlbnNzbF9jbGllbnRfdGxzX2N0eCAqKWN0X2N0
eCktPnNzbAorICA6IHN0YXRlX3NlcnZlci5saWJfc3RhdGUubGliX3NzbDsKIHN0YXRpYyBnc3Ry
aW5nICogc2VydmVyX2NvcmtlZCA9IE5VTEw7CiBnc3RyaW5nICoqIGNvcmtlZHAgPSBjdF9jdHgK
ICAgPyAmKChleGltX29wZW5zc2xfY2xpZW50X3Rsc19jdHggKiljdF9jdHgpLT5jb3JrZWQgOiAm
c2VydmVyX2NvcmtlZDsKQEAgLTM2NzEsNyArNDQxNSw3IEBACiBhIHN0b3JlIHJlc2V0IHRoZXJl
LCBzbyB1c2UgUE9PTF9QRVJNLiAqLwogLyogKyBpZiBDSFVOS0lORywgY21kcyBFSExPLE1BSUws
UkNQVChzKSxCREFUICovCiAKLWlmICgobW9yZSB8fCBjb3JrZWQpKQoraWYgKG1vcmUgfHwgY29y
a2VkKQogICB7CiAgIGlmICghbGVuKSBidWZmID0gVVMgJmVycm9yOwkvKiBkdW1teSBqdXN0IHNv
IHRoYXQgc3RyaW5nX2NhdG4gaXMgb2sgKi8KIApAQCAtMzcxNiw5ICs0NDYwLDE2IEBACiAgICAg
ICByZXR1cm4gLTE7CiAKICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgotICAgICAgbG9nX3dy
aXRlKDAsIExPR19NQUlOLCAiU1NMX3dyaXRlOiAoZnJvbSAlcykgc3lzY2FsbDogJXMiLAotCXNl
bmRlcl9mdWxsaG9zdCA/IHNlbmRlcl9mdWxsaG9zdCA6IFVTIjx1bmtub3duPiIsCi0Jc3RyZXJy
b3IoZXJybm8pKTsKKyAgICAgIGlmIChjdF9jdHggfHwgZXJybm8gIT0gRUNPTk5SRVNFVCB8fCAh
Zi5zbXRwX2luX3F1aXQpCisJbG9nX3dyaXRlKDAsIExPR19NQUlOLCAiU1NMX3dyaXRlOiAoZnJv
bSAlcykgc3lzY2FsbDogJXMiLAorCSAgc2VuZGVyX2Z1bGxob3N0ID8gc2VuZGVyX2Z1bGxob3N0
IDogVVMiPHVua25vd24+IiwKKwkgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICBlbHNlIGlmIChM
T0dHSU5HKHByb3RvY29sX2RldGFpbCkpCisJbG9nX3dyaXRlKDAsIExPR19NQUlOLCAiWyVzXSBh
ZnRlciBRVUlULCBjbGllbnQgcmVzZXQgVENQIGJlZm9yZSIKKwkgICIgU01UUCByZXNwb25zZSBh
bmQgVExTIGNsb3NlXG4iLCBzZW5kZXJfaG9zdF9hZGRyZXNzKTsKKyAgICAgIGVsc2UKKwlERUJV
RyhEX3RscykgZGVidWdfcHJpbnRmKCJbJXNdIFNTTF93cml0ZTogYWZ0ZXIgUVVJVCwiCisJICAi
IGNsaWVudCByZXNldCBUQ1AgYmVmb3JlIFRMUyBjbG9zZVxuIiwgc2VuZGVyX2hvc3RfYWRkcmVz
cyk7CiAgICAgICByZXR1cm4gLTE7CiAKICAgICBkZWZhdWx0OgpAQCAtMzczMSw2ICs0NDgyLDMy
IEBACiAKIAogCisvKgorQXJndW1lbnRzOgorICBjdF9jdHgJY2xpZW50IFRMUyBjb250ZXh0IHBv
aW50ZXIsIG9yIE5VTEwgZm9yIHRoZSBvbmUgZ2xvYmFsIHNlcnZlciBjb250ZXh0CisqLworCit2
b2lkCit0bHNfc2h1dGRvd25fd3Iodm9pZCAqIGN0X2N0eCkKK3sKK2V4aW1fb3BlbnNzbF9jbGll
bnRfdGxzX2N0eCAqIG9fY3R4ID0gY3RfY3R4OworU1NMICoqIHNzbHAgPSBvX2N0eCA/ICZvX2N0
eC0+c3NsIDogKFNTTCAqKikgJnN0YXRlX3NlcnZlci5saWJfc3RhdGUubGliX3NzbDsKK2ludCAq
IGZkcCA9IG9fY3R4ID8gJnRsc19vdXQuYWN0aXZlLnNvY2sgOiAmdGxzX2luLmFjdGl2ZS5zb2Nr
OworaW50IHJjOworCitpZiAoKmZkcCA8IDApIHJldHVybjsgIC8qIFRMUyB3YXMgbm90IGFjdGl2
ZSAqLworCit0bHNfd3JpdGUoY3RfY3R4LCBOVUxMLCAwLCBGQUxTRSk7CS8qIGZsdXNoIHdyaXRl
IGJ1ZmZlciAqLworCitIREVCVUcoRF90cmFuc3BvcnR8RF90bHN8RF9hY2x8RF92KSBkZWJ1Z19w
cmludGZfaW5kZW50KCIgIFNNVFAoVExTIHNodXRkb3duKT4+XG4iKTsKK3JjID0gU1NMX3NodXRk
b3duKCpzc2xwKTsKK2lmIChyYyA8IDApIERFQlVHKERfdGxzKQorICB7CisgIEVSUl9lcnJvcl9z
dHJpbmdfbihFUlJfZ2V0X2Vycm9yKCksIHNzbF9lcnJzdHJpbmcsIHNpemVvZihzc2xfZXJyc3Ry
aW5nKSk7CisgIGRlYnVnX3ByaW50ZigiU1NMX3NodXRkb3duOiAlc1xuIiwgc3NsX2VycnN0cmlu
Zyk7CisgIH0KK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKICogICAgICAgICBDbG9zZSBkb3duIGEgVExTIHNlc3Npb24gICAgICAgICAgICAg
ICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpA
QCAtMzc0MSw3ICs0NTE4LDggQEAKIAogQXJndW1lbnRzOgogICBjdF9jdHgJY2xpZW50IFRMUyBj
b250ZXh0IHBvaW50ZXIsIG9yIE5VTEwgZm9yIHRoZSBvbmUgZ2xvYmFsIHNlcnZlciBjb250ZXh0
Ci0gIHNodXRkb3duCTEgaWYgVExTIGNsb3NlLWFsZXJ0IGlzIHRvIGJlIHNlbnQsCisgIGRvX3No
dXRkb3duCTAgbm8gZGF0YS1mbHVzaCBvciBUTFMgY2xvc2UtYWxlcnQKKwkJMSBpZiBUTFMgY2xv
c2UtYWxlcnQgaXMgdG8gYmUgc2VudCwKICAJCTIgaWYgYWxzbyByZXNwb25zZSB0byBiZSB3YWl0
ZWQgZm9yCiAKIFJldHVybnM6ICAgICBub3RoaW5nCkBAIC0zNzUwLDI2ICs0NTI4LDMzIEBACiAq
LwogCiB2b2lkCi10bHNfY2xvc2Uodm9pZCAqIGN0X2N0eCwgaW50IHNodXRkb3duKQordGxzX2Ns
b3NlKHZvaWQgKiBjdF9jdHgsIGludCBkb19zaHV0ZG93bikKIHsKIGV4aW1fb3BlbnNzbF9jbGll
bnRfdGxzX2N0eCAqIG9fY3R4ID0gY3RfY3R4OwotU1NMX0NUWCAqKmN0eHAgPSBvX2N0eCA/ICZv
X2N0eC0+Y3R4IDogJnNlcnZlcl9jdHg7Ci1TU0wgKipzc2xwID0gICAgIG9fY3R4ID8gJm9fY3R4
LT5zc2wgOiAmc2VydmVyX3NzbDsKLWludCAqZmRwID0gb19jdHggPyAmdGxzX291dC5hY3RpdmUu
c29jayA6ICZ0bHNfaW4uYWN0aXZlLnNvY2s7CitTU0wgKiogc3NscCA9IG9fY3R4ID8gJm9fY3R4
LT5zc2wgOiAoU1NMICoqKSAmc3RhdGVfc2VydmVyLmxpYl9zdGF0ZS5saWJfc3NsOworaW50ICog
ZmRwID0gb19jdHggPyAmdGxzX291dC5hY3RpdmUuc29jayA6ICZ0bHNfaW4uYWN0aXZlLnNvY2s7
CiAKIGlmICgqZmRwIDwgMCkgcmV0dXJuOyAgLyogVExTIHdhcyBub3QgYWN0aXZlICovCiAKLWlm
IChzaHV0ZG93bikKK2lmIChkb19zaHV0ZG93biA+IFRMU19OT19TSFVURE9XTikKICAgewogICBp
bnQgcmM7CiAgIERFQlVHKERfdGxzKSBkZWJ1Z19wcmludGYoInRsc19jbG9zZSgpOiBzaHV0dGlu
ZyBkb3duIFRMUyVzXG4iLAotICAgIHNodXRkb3duID4gMSA/ICIgKHdpdGggcmVzcG9uc2Utd2Fp
dCkiIDogIiIpOworICAgIGRvX3NodXRkb3duID4gVExTX1NIVVRET1dOX05PV0FJVCA/ICIgKHdp
dGggcmVzcG9uc2Utd2FpdCkiIDogIiIpOworCisgIHRsc193cml0ZShjdF9jdHgsIE5VTEwsIDAs
IEZBTFNFKTsJLyogZmx1c2ggd3JpdGUgYnVmZmVyICovCiAKLSAgaWYgKCAgKHJjID0gU1NMX3No
dXRkb3duKCpzc2xwKSkgPT0gMAkvKiBzZW5kICJjbG9zZSBub3RpZnkiIGFsZXJ0ICovCi0gICAg
ICYmIHNodXRkb3duID4gMSkKKyAgaWYgKCAgKCAgZG9fc2h1dGRvd24gPj0gVExTX1NIVVRET1dO
X1dPTkxZCisJfHwgKHJjID0gU1NMX3NodXRkb3duKCpzc2xwKSkgPT0gMAkvKiBzZW5kICJjbG9z
ZSBub3RpZnkiIGFsZXJ0ICovCisJKQorICAgICAmJiBkb19zaHV0ZG93biA+IFRMU19TSFVURE9X
Tl9OT1dBSVQKKyAgICAgKQogICAgIHsKKyNpZmRlZiBFWElNX1RDUF9DT1JLCisgICAgKHZvaWQp
IHNldHNvY2tvcHQoKmZkcCwgSVBQUk9UT19UQ1AsIEVYSU1fVENQX0NPUkssIFVTICZvZmYsIHNp
emVvZihvZmYpKTsKKyNlbmRpZgogICAgIEFMQVJNKDIpOwotICAgIHJjID0gU1NMX3NodXRkb3du
KCpzc2xwKTsJCS8qIHdhaXQgZm9yIHJlc3BvbnNlICovCisgICAgcmMgPSBTU0xfc2h1dGRvd24o
KnNzbHApOwkJCS8qIHdhaXQgZm9yIHJlc3BvbnNlICovCiAgICAgQUxBUk1fQ0xSKDApOwogICAg
IH0KIApAQCAtMzc4MywyNSArNDU2OCwyMyBAQAogaWYgKCFvX2N0eCkJCS8qIHNlcnZlciBzaWRl
ICovCiAgIHsKICNpZm5kZWYgRElTQUJMRV9PQ1NQCi0gIHNrX1g1MDlfcG9wX2ZyZWUoc2VydmVy
X3N0YXRpY19jYmluZm8tPnZlcmlmeV9zdGFjaywgWDUwOV9mcmVlKTsKLSAgc2VydmVyX3N0YXRp
Y19jYmluZm8tPnZlcmlmeV9zdGFjayA9IE5VTEw7CisgIHNrX1g1MDlfcG9wX2ZyZWUoc3RhdGVf
c2VydmVyLnZlcmlmeV9zdGFjaywgWDUwOV9mcmVlKTsKKyAgc3RhdGVfc2VydmVyLnZlcmlmeV9z
dGFjayA9IE5VTEw7CiAjZW5kaWYKIAogICByZWNlaXZlX2dldGMgPQlzbXRwX2dldGM7CiAgIHJl
Y2VpdmVfZ2V0YnVmID0Jc210cF9nZXRidWY7CiAgIHJlY2VpdmVfZ2V0X2NhY2hlID0Jc210cF9n
ZXRfY2FjaGU7CisgIHJlY2VpdmVfaGFzYyA9CXNtdHBfaGFzYzsKICAgcmVjZWl2ZV91bmdldGMg
PQlzbXRwX3VuZ2V0YzsKICAgcmVjZWl2ZV9mZW9mID0Jc210cF9mZW9mOwogICByZWNlaXZlX2Zl
cnJvciA9CXNtdHBfZmVycm9yOwotICByZWNlaXZlX3NtdHBfYnVmZmVyZWQgPSBzbXRwX2J1ZmZl
cmVkOwogICB0bHNfaW4uYWN0aXZlLnRsc19jdHggPSBOVUxMOwogICB0bHNfaW4uc25pID0gTlVM
TDsKICAgLyogTGVhdmUgYml0cywgcGVlcmNlcnQsIGNpcGhlciwgcGVlcmRuLCBjZXJ0aWZpY2F0
ZV92ZXJpZmllZCBzZXQsIGZvciBsb2dnaW5nICovCiAgIH0KIAotU1NMX0NUWF9mcmVlKCpjdHhw
KTsKIFNTTF9mcmVlKCpzc2xwKTsKLSpjdHhwID0gTlVMTDsKICpzc2xwID0gTlVMTDsKICpmZHAg
PSAtMTsKIH0KQEAgLTM4MjIsOCArNDYwNSw4IEBACiB1c2NoYXIgKgogdGxzX3ZhbGlkYXRlX3Jl
cXVpcmVfY2lwaGVyKHZvaWQpCiB7Ci1TU0xfQ1RYICpjdHg7Ci11c2NoYXIgKnMsICpleHBjaXBo
ZXJzLCAqZXJyOworU1NMX0NUWCAqIGN0eDsKK3VzY2hhciAqIGV4cGNpcGhlcnMsICogZXJyOwog
CiB0bHNfb3BlbnNzbF9pbml0KCk7CiAKQEAgLTM4MzcsMzQgKzQ2MjAsMjMgQEAKIGlmICghKGV4
cGNpcGhlcnMgJiYgKmV4cGNpcGhlcnMpKQogICByZXR1cm4gTlVMTDsKIAotLyogbm9ybWFsaXNh
dGlvbiByaXBwZWQgZnJvbSBhYm92ZSAqLwotcyA9IGV4cGNpcGhlcnM7Ci13aGlsZSAoKnMgIT0g
MCkgeyBpZiAoKnMgPT0gJ18nKSAqcyA9ICctJzsgcysrOyB9Citub3JtYWxpc2VfY2lwaGVycygm
ZXhwY2lwaGVycywgdGxzX3JlcXVpcmVfY2lwaGVycyk7CiAKIGVyciA9IE5VTEw7Ci0KLSNpZmRl
ZiBFWElNX0hBVkVfT1BFTlNTTF9UTFNfTUVUSE9ECi1pZiAoIShjdHggPSBTU0xfQ1RYX25ldyhU
TFNfc2VydmVyX21ldGhvZCgpKSkpCi0jZWxzZQotaWYgKCEoY3R4ID0gU1NMX0NUWF9uZXcoU1NM
djIzX3NlcnZlcl9tZXRob2QoKSkpKQotI2VuZGlmCitpZiAobGliX2N0eF9uZXcoJmN0eCwgTlVM
TCwgJmVycikgPT0gT0spCiAgIHsKLSAgRVJSX2Vycm9yX3N0cmluZ19uKEVSUl9nZXRfZXJyb3Io
KSwgc3NsX2VycnN0cmluZywgc2l6ZW9mKHNzbF9lcnJzdHJpbmcpKTsKLSAgcmV0dXJuIHN0cmlu
Z19zcHJpbnRmKCJTU0xfQ1RYX25ldygpIGZhaWxlZDogJXMiLCBzc2xfZXJyc3RyaW5nKTsKLSAg
fQorICBERUJVRyhEX3RscykKKyAgICBkZWJ1Z19wcmludGYoInRsc19yZXF1aXJlX2NpcGhlcnMg
ZXhwYW5kcyB0byBcIiVzXCJcbiIsIGV4cGNpcGhlcnMpOwogCi1ERUJVRyhEX3RscykKLSAgZGVi
dWdfcHJpbnRmKCJ0bHNfcmVxdWlyZV9jaXBoZXJzIGV4cGFuZHMgdG8gXCIlc1wiXG4iLCBleHBj
aXBoZXJzKTsKKyAgaWYgKCFTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChjdHgsIENTIGV4cGNpcGhl
cnMpKQorICAgIHsKKyAgICBFUlJfZXJyb3Jfc3RyaW5nX24oRVJSX2dldF9lcnJvcigpLCBzc2xf
ZXJyc3RyaW5nLCBzaXplb2Yoc3NsX2VycnN0cmluZykpOworICAgIGVyciA9IHN0cmluZ19zcHJp
bnRmKCJTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdCglcykgZmFpbGVkOiAlcyIsCisJCQlleHBjaXBo
ZXJzLCBzc2xfZXJyc3RyaW5nKTsKKyAgICB9CiAKLWlmICghU1NMX0NUWF9zZXRfY2lwaGVyX2xp
c3QoY3R4LCBDUyBleHBjaXBoZXJzKSkKLSAgewotICBFUlJfZXJyb3Jfc3RyaW5nX24oRVJSX2dl
dF9lcnJvcigpLCBzc2xfZXJyc3RyaW5nLCBzaXplb2Yoc3NsX2VycnN0cmluZykpOwotICBlcnIg
PSBzdHJpbmdfc3ByaW50ZigiU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoJXMpIGZhaWxlZDogJXMi
LAotCQkgICAgICBleHBjaXBoZXJzLCBzc2xfZXJyc3RyaW5nKTsKKyAgU1NMX0NUWF9mcmVlKGN0
eCk7CiAgIH0KLQotU1NMX0NUWF9mcmVlKGN0eCk7Ci0KIHJldHVybiBlcnI7CiB9CiAKQEAgLTM4
ODYsMjEgKzQ2NTgsMjIgQEAKIHdpbGwgY2hhbmdlLCBzbyB3ZSBjYW4gbW9yZSB1c2VmdWxseSBh
c3Npc3Qgd2l0aCB2ZXJzaW9uIGRpYWdub3NpcyBieSBhbHNvCiByZXBvcnRpbmcgdGhlIGJ1aWxk
IGRhdGUuCiAKLUFyZ3VtZW50czogICBhIEZJTEUqIHRvIHByaW50IHRoZSByZXN1bHRzIHRvCi1S
ZXR1cm5zOiAgICAgbm90aGluZworQXJndW1lbnRzOiAgIHN0cmluZyB0byBhcHBlbmQgdG8KK1Jl
dHVybnM6ICAgICBzdHJpbmcKICovCiAKLXZvaWQKLXRsc192ZXJzaW9uX3JlcG9ydChGSUxFICpm
KQorZ3N0cmluZyAqCit0bHNfdmVyc2lvbl9yZXBvcnQoZ3N0cmluZyAqIGcpCiB7Ci1mcHJpbnRm
KGYsICJMaWJyYXJ5IHZlcnNpb246IE9wZW5TU0w6IENvbXBpbGU6ICVzXG4iCi0gICAgICAgICAg
ICIgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWU6ICVzXG4iCi0gICAgICAgICAgICIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICVzXG4iLAotICAgICAgICAgICBPUEVO
U1NMX1ZFUlNJT05fVEVYVCwKLSAgICAgICAgICAgU1NMZWF5X3ZlcnNpb24oU1NMRUFZX1ZFUlNJ
T04pLAotICAgICAgICAgICBTU0xlYXlfdmVyc2lvbihTU0xFQVlfQlVJTFRfT04pKTsKLS8qIHRo
aXJkIGxpbmUgaXMgMzggY2hhcmFjdGVycyBmb3IgdGhlICVzIGFuZCB0aGUgbGluZSBpcyA3MyBj
aGFycyBsb25nOwotdGhlIE9wZW5TU0wgb3V0cHV0IGluY2x1ZGVzIGEgImJ1aWx0IG9uOiAiIHBy
ZWZpeCBhbHJlYWR5LiAqLworcmV0dXJuIHN0cmluZ19mbXRfYXBwZW5kKGcsCisgICAgIkxpYnJh
cnkgdmVyc2lvbjogT3BlblNTTDogQ29tcGlsZTogJXNcbiIKKyAgICAiICAgICAgICAgICAgICAg
ICAgICAgICAgICBSdW50aW1lOiAlc1xuIgorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6ICVzXG4iLAorCSAgICAgT1BFTlNTTF9WRVJTSU9OX1RFWFQsCisJICAgICBTU0xl
YXlfdmVyc2lvbihTU0xFQVlfVkVSU0lPTiksCisJICAgICBTU0xlYXlfdmVyc2lvbihTU0xFQVlf
QlVJTFRfT04pKTsKKyAgLyogdGhpcmQgbGluZSBpcyAzOCBjaGFyYWN0ZXJzIGZvciB0aGUgJXMg
YW5kIHRoZSBsaW5lIGlzIDczIGNoYXJzIGxvbmc7CisgIHRoZSBPcGVuU1NMIG91dHB1dCBpbmNs
dWRlcyBhICJidWlsdCBvbjogIiBwcmVmaXggYWxyZWFkeS4gKi8KIH0KIAogCkBAIC00MDU0LDcg
KzQ4MjcsNiBAQAogewogbG9uZyByZXN1bHQsIGl0ZW07CiB1c2NoYXIgKiBleHAsICogZW5kOwot
dXNjaGFyIGtlZXBfYzsKIEJPT0wgYWRkaW5nLCBpdGVtX3BhcnNlZDsKIAogLyogU2VydmVyOiBz
ZW5kIG5vICg8PSBUTFMxLjIpIHNlc3Npb24gdGlja2V0cyAqLwpAQCAtNDA5NiwxMSArNDg2OCw4
IEBACiAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KICAgYWRkaW5nID0gKnMrKyA9PSAnKyc7Ci0g
IGZvciAoZW5kID0gczsgKCplbmQgIT0gJ1wwJykgJiYgIWlzc3BhY2UoKmVuZCk7ICsrZW5kKSAv
KiovIDsKLSAga2VlcF9jID0gKmVuZDsKLSAgKmVuZCA9ICdcMCc7Ci0gIGl0ZW1fcGFyc2VkID0g
dGxzX29wZW5zc2xfb25lX29wdGlvbl9wYXJzZShzLCAmaXRlbSk7Ci0gICplbmQgPSBrZWVwX2M7
CisgIGZvciAoZW5kID0gczsgKmVuZCAmJiAhaXNzcGFjZSgqZW5kKTsgKSBlbmQrKzsKKyAgaXRl
bV9wYXJzZWQgPSB0bHNfb3BlbnNzbF9vbmVfb3B0aW9uX3BhcnNlKHN0cmluZ19jb3B5bihzLCBl
bmQtcyksICZpdGVtKTsKICAgaWYgKCFpdGVtX3BhcnNlZCkKICAgICB7CiAgICAgREVCVUcoRF90
bHMpIGRlYnVnX3ByaW50Zigib3BlbnNzbCBvcHRpb24gc2V0dGluZyB1bnJlY29nbmlzZWQ6IFwi
JXNcIlxuIiwgcyk7CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvdHJhbnNwb3J0LmMgZXhpbS9zcmMv
dHJhbnNwb3J0LmMKLS0tIGV4aW0ub3JpZy9zcmMvdHJhbnNwb3J0LmMJMjAyMy0wNi0wNCAxNjoy
MjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL3RyYW5zcG9ydC5jCTIwMjItMDYtMjMg
MTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFu
IEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4
aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0
eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0g
TWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9u
cyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogLyogR2VuZXJhbCBmdW5jdGlvbnMgY29u
Y2VybmVkIHdpdGggdHJhbnNwb3J0YXRpb24sIGFuZCBnZW5lcmljIG9wdGlvbnMgZm9yIGFsbApA
QCAtMjUzLDcgKzI1Myw2IEBACiAKICAgZm9yKDs7KQogICAgIHsKLSAgICBmZF9zZXQgZmRzOwog
ICAgIC8qIFRoaXMgY29kZSBtYWtlcyB1c2Ugb2YgYWxhcm0oKSBpbiBvcmRlciB0byBpbXBsZW1l
bnQgdGhlIHRpbWVvdXQuIFRoaXMKICAgICBpc24ndCBhIHZlcnkgdGlkeSB3YXkgb2YgZG9pbmcg
dGhpbmdzLiBVc2luZyBub24tYmxvY2tpbmcgSS9PIHdpdGggc2VsZWN0KCkKICAgICBwcm92aWRl
cyBhIG5lYXRlciBhcHByb2FjaC4gSG93ZXZlciwgSSBkb24ndCBrbm93IGhvdyB0byBkbyB0aGlz
IHdoZW4gVExTIGlzCkBAIC0yODEsOCArMjgwLDcgQEAKICAgICBpZiAocmMgPj0gMCB8fCBlcnJu
byAhPSBFTk9UQ09OTiB8fCBjb25ucmV0cnkgPD0gMCkKICAgICAgIGJyZWFrOwogCi0gICAgRkRf
WkVSTygmZmRzKTsgRkRfU0VUKGZkLCAmZmRzKTsKLSAgICBzZWxlY3QoZmQrMSwgTlVMTCwgJmZk
cywgTlVMTCwgTlVMTCk7CS8qIGNvdWxkIHNldCB0aW1vdXQ/ICovCisgICAgcG9sbF9vbmVfZmQo
ZmQsIFBPTExPVVQsIC0xKTsJCS8qIGNvdWxkIHNldCB0aW1lb3V0PyByZXR2YWwgY2hlY2s/ICov
CiAgICAgY29ubnJldHJ5LS07CiAgICAgfQogCkBAIC02NTMsNyArNjUxLDcgQEAKIAogZm9yIChw
cHAgPSAqcGRsaXN0OyBwcHA7IHBwcCA9IHBwcC0+bmV4dCkgaWYgKHAgPT0gcHBwLT5wdHIpIHJl
dHVybiBUUlVFOwogCi1wcHAgPSBzdG9yZV9nZXQoc2l6ZW9mKHN0cnVjdCBhY2kpLCBGQUxTRSk7
CitwcHAgPSBzdG9yZV9nZXQoc2l6ZW9mKHN0cnVjdCBhY2kpLCBHRVRfVU5UQUlOVEVEKTsKIHBw
cC0+bmV4dCA9ICpwZGxpc3Q7CiAqcGRsaXN0ID0gcHBwOwogcHBwLT5wdHIgPSBwOwpAQCAtNjc3
LDcgKzY3NSw3IEBACiAKIC8qIFJlbWVtYmVyIHdoYXQgd2UgaGF2ZSBvdXRwdXQsIGFuZCBvdXRw
dXQgaXQuICovCiAKLXBwcCA9IHN0b3JlX2dldChzaXplb2Yoc3RydWN0IGFjaSksIEZBTFNFKTsK
K3BwcCA9IHN0b3JlX2dldChzaXplb2Yoc3RydWN0IGFjaSksIEdFVF9VTlRBSU5URUQpOwogcHBw
LT5uZXh0ID0gKnBwbGlzdDsKICpwcGxpc3QgPSBwcHA7CiBwcHAtPnB0ciA9IHBwOwpAQCAtNzg0
LDcgKzc4Miw3IEBACiAgIC8qIEhlYWRlciByZW1vdmVkICovCiAKICAgZWxzZQotICAgIERFQlVH
KERfdHJhbnNwb3J0KSBkZWJ1Z19wcmludGYoInJlbW92ZWQgaGVhZGVyIGxpbmU6XG4lcy0tLVxu
IiwgaC0+dGV4dCk7CisgICAgREVCVUcoRF90cmFuc3BvcnQpIGRlYnVnX3ByaW50ZigicmVtb3Zl
ZCBoZWFkZXIgbGluZTpcbiAlcy0tLVxuIiwgaC0+dGV4dCk7CiAgIH0KIAogLyogQWRkIG9uIGFu
eSBhZGRyZXNzLXNwZWNpZmljIGhlYWRlcnMuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBhZGRyZXNz
ZXMsCkBAIC04MDAsOCArNzk4LDggQEAKIAogaWYgKGFkZHIpCiAgIHsKLSAgaGVhZGVyX2xpbmUg
KmhwcmV2ID0gYWRkci0+cHJvcC5leHRyYV9oZWFkZXJzOwotICBoZWFkZXJfbGluZSAqaG5leHQs
ICogaDsKKyAgaGVhZGVyX2xpbmUgKiBocHJldiA9IGFkZHItPnByb3AuZXh0cmFfaGVhZGVycywg
KiBobmV4dCwgKiBoOworCiAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQogICAgIGZvciAo
aCA9IGhwcmV2LCBocHJldiA9IE5VTEw7IGg7IGggPSBobmV4dCkKICAgICAgIHsKQEAgLTgxMiw3
ICs4MTAsNyBAQAogCXsKIAlpZiAoIXNlbmRmbih0Y3R4LCBoLT50ZXh0LCBoLT5zbGVuKSkgcmV0
dXJuIEZBTFNFOwogCURFQlVHKERfdHJhbnNwb3J0KQotCSAgZGVidWdfcHJpbnRmKCJhZGRlZCBo
ZWFkZXIgbGluZShzKTpcbiVzLS0tXG4iLCBoLT50ZXh0KTsKKwkgIGRlYnVnX3ByaW50ZigiYWRk
ZWQgaGVhZGVyIGxpbmUocyk6XG4gJXMtLS1cbiIsIGgtPnRleHQpOwogCX0KICAgICAgIH0KICAg
fQpAQCAtODQwLDcgKzgzOCw3IEBACiAJICByZXR1cm4gRkFMU0U7CiAJREVCVUcoRF90cmFuc3Bv
cnQpCiAJICB7Ci0JICBkZWJ1Z19wcmludGYoImFkZGVkIGhlYWRlciBsaW5lOlxuJXMiLCBzKTsK
KwkgIGRlYnVnX3ByaW50ZigiYWRkZWQgaGVhZGVyIGxpbmU6XG4gJXMiLCBzKTsKIAkgIGlmIChz
W2xlbi0xXSAhPSAnXG4nKSBkZWJ1Z19wcmludGYoIlxuIik7CiAJICBkZWJ1Z19wcmludGYoIi0t
LVxuIik7CiAJICB9CkBAIC04ODYsNyArODg0LDcgQEAKIAogQXJndW1lbnRzOgogICB0Y3R4Ci0g
ICAgKGZkLCBtc2cpCQlFaXRoZXIgYW5kIGZkLCB0byB3cml0ZSB0aGUgbWVzc2FnZSB0bywKKyAg
ICAoZmQsIG1zZykJCUVpdGhlciBhbiBmZCwgdG8gd3JpdGUgdGhlIG1lc3NhZ2UgdG8sCiAJCQlv
ciBhIHN0cmluZzogaWYgbnVsbCB3cml0ZSBtZXNzYWdlIHRvIGFsbG9jYXRlZCBzcGFjZQogCQkJ
b3RoZXJ3aXJlIHRha2UgY29udGVudCBhcyBoZWFkZXJzLgogICAgIGFkZHIgICAgICAgICAgICAg
ICAgKGNoYWluIG9mKSBhZGRyZXNzZXMgKGZvciBleHRyYSBoZWFkZXJzKSwgb3IgTlVMTDsKQEAg
LTkwNSw2ICs5MDMsNyBAQAogICAgICAgYWRkX2RlbGl2ZXJ5X2RhdGUgICAgIGlmIFRSVUUsIGFk
ZCBhICJkZWxpdmVyeS1kYXRlIiBoZWFkZXIKICAgICAgIHVzZV9jcmxmICAgICAgICAgICAgICBp
ZiBUUlVFLCB0dXJuIE5MIGludG8gQ1IgTEYKICAgICAgIGVuZF9kb3QgICAgICAgICAgICAgICBp
ZiBUUlVFLCBzZW5kIGEgdGVybWluYXRpbmcgIi4iIGxpbmUgYXQgdGhlIGVuZAorICAgICAgbm9f
Zmx1c2gJCSAgICBpZiBUUlVFLCBkbyBub3QgZmx1c2ggYXQgZW5kCiAgICAgICBub19oZWFkZXJz
ICAgICAgICAgICAgaWYgVFJVRSwgb21pdCB0aGUgaGVhZGVycwogICAgICAgbm9fYm9keSAgICAg
ICAgICAgICAgIGlmIFRSVUUsIG9taXQgdGhlIGJvZHkKICAgICBjaGVja19zdHJpbmcgICAgICAg
ICAgYSBzdHJpbmcgdG8gY2hlY2sgZm9yIGF0IHRoZSBzdGFydCBvZiBsaW5lcywgb3IgTlVMTApA
QCAtMTE1NiwxMyArMTE1NSwxOCBAQAogCiAvKiBJZiByZXF1ZXN0ZWQsIGFkZCBhIHRlcm1pbmF0
aW5nICIuIiBsaW5lIChTTVRQIG91dHB1dCkuICovCiAKLWlmICh0Y3R4LT5vcHRpb25zICYgdG9w
dF9lbmRfZG90ICYmICF3cml0ZV9jaHVuayh0Y3R4LCBVUyIuXG4iLCAyKSkKLSAgcmV0dXJuIEZB
TFNFOworaWYgKHRjdHgtPm9wdGlvbnMgJiB0b3B0X2VuZF9kb3QpCisgIHsKKyAgc210cF9kZWJ1
Z19jbWQoVVMiLiIsIDApOworICBpZiAoIXdyaXRlX2NodW5rKHRjdHgsIFVTIi5cbiIsIDIpKQor
ICAgIHJldHVybiBGQUxTRTsKKyAgfQogCiAvKiBXcml0ZSBvdXQgYW55IHJlbWFpbmluZyBkYXRh
IGluIHRoZSBidWZmZXIgYmVmb3JlIHJldHVybmluZy4gKi8KIAotcmV0dXJuIChsZW4gPSBjaHVu
a19wdHIgLSBkZWxpdmVyX291dF9idWZmZXIpIDw9IDAgfHwKLSAgdHJhbnNwb3J0X3dyaXRlX2Js
b2NrKHRjdHgsIGRlbGl2ZXJfb3V0X2J1ZmZlciwgbGVuLCBGQUxTRSk7CityZXR1cm4gKGxlbiA9
IGNodW5rX3B0ciAtIGRlbGl2ZXJfb3V0X2J1ZmZlcikgPD0gMAorICB8fCB0cmFuc3BvcnRfd3Jp
dGVfYmxvY2sodGN0eCwgZGVsaXZlcl9vdXRfYnVmZmVyLCBsZW4sCisJCQkgICAgISEodGN0eC0+
b3B0aW9ucyAmIHRvcHRfbm9fZmx1c2gpKTsKIH0KIAogCkBAIC0xMjYwLDcgKzEyNjQsNyBAQAog
CiAgIHRjdHgtPnUuZmQgPSBmZF93cml0ZTsKICAgdGN0eC0+Y2hlY2tfc3RyaW5nID0gdGN0eC0+
ZXNjYXBlX3N0cmluZyA9IE5VTEw7Ci0gIHRjdHgtPm9wdGlvbnMgJj0gfih0b3B0X3VzZV9jcmxm
IHwgdG9wdF9lbmRfZG90IHwgdG9wdF91c2VfYmRhdCk7CisgIHRjdHgtPm9wdGlvbnMgJj0gfih0
b3B0X3VzZV9jcmxmIHwgdG9wdF9lbmRfZG90IHwgdG9wdF91c2VfYmRhdCB8IHRvcHRfbm9fZmx1
c2gpOwogCiAgIHJjID0gaW50ZXJuYWxfdHJhbnNwb3J0X3dyaXRlX21lc3NhZ2UodGN0eCwgc2l6
ZV9saW1pdCk7CiAKQEAgLTEzOTYsMTEgKzE0MDAsMTAgQEAKICAgICAgICAgeWllbGQgPSBGQUxT
RTsKIAl9CiAgICAgICBlbHNlIGlmICghb2spCi0gICAgICAgIHsKKyAgICAgICAgewkJLyogVHJ5
IHRvIGRyYWluIHRoZSBwaXBlOyByZWFkIGZhaWxzIGFyZSBkb24ndCBjYXJlICovCiAJaW50IGR1
bW15ID0gcmVhZChwZmRbcGlwZV9yZWFkXSwgKHZvaWQgKikmc2F2ZV9lcnJubywgc2l6ZW9mKGlu
dCkpOwogICAgICAgICBkdW1teSA9IHJlYWQocGZkW3BpcGVfcmVhZF0sICh2b2lkICopJnRjdHgt
PmFkZHItPm1vcmVfZXJybm8sIHNpemVvZihpbnQpKTsKICAgICAgICAgZHVtbXkgPSByZWFkKHBm
ZFtwaXBlX3JlYWRdLCAodm9pZCAqKSZ0Y3R4LT5hZGRyLT5kZWxpdmVyeV90aW1lLCBzaXplb2Yo
c3RydWN0IHRpbWV2YWwpKTsKLQlkdW1teSA9IGR1bW15OwkJLyogY29tcGlsZXIgcXVpZXRlbmlu
ZyAqLwogICAgICAgICB5aWVsZCA9IEZBTFNFOwogICAgICAgICB9CiAgICAgICB9CkBAIC0xNDI3
LDcgKzE0MzAsNyBAQAogICAgICAgICA/ICF3cml0ZV9jaHVuayh0Y3R4LCBVUyIuXG4iLCAyKQog
CTogIXdyaXRlX2NodW5rKHRjdHgsIFVTIlxuLlxuIiwgMykKICAgICAgKSAgKQotICAgIHlpZWxk
ID0gRkFMU0U7CisgICAgeyBzbXRwX2RlYnVnX2NtZChVUyIuIiwgMCk7IHlpZWxkID0gRkFMU0U7
IH0KIAogICAvKiBXcml0ZSBvdXQgYW55IHJlbWFpbmluZyBkYXRhIGluIHRoZSBidWZmZXIuICov
CiAKQEAgLTE1MjIsNyArMTUyNSw3IEBACiAKICAgaWYgKCEoaG9zdF9yZWNvcmQgPSBkYmZuX3Jl
YWQoZGJtX2ZpbGUsIGhvc3QtPm5hbWUpKSkKICAgICB7Ci0gICAgaG9zdF9yZWNvcmQgPSBzdG9y
ZV9nZXQoc2l6ZW9mKGRiZGF0YV93YWl0KSArIE1FU1NBR0VfSURfTEVOR1RILCBGQUxTRSk7Cisg
ICAgaG9zdF9yZWNvcmQgPSBzdG9yZV9nZXQoc2l6ZW9mKGRiZGF0YV93YWl0KSArIE1FU1NBR0Vf
SURfTEVOR1RILCBHRVRfVU5UQUlOVEVEKTsKICAgICBob3N0X3JlY29yZC0+Y291bnQgPSBob3N0
X3JlY29yZC0+c2VxdWVuY2UgPSAwOwogICAgIH0KIApAQCAtMTU3MSw3ICsxNTc0LDcgQEAKICAg
ICB7CiAgICAgc3ByaW50ZihDUyBidWZmZXIsICIlLjIwMHM6JWQiLCBob3N0LT5uYW1lLCBob3N0
X3JlY29yZC0+c2VxdWVuY2UpOwogICAgIGRiZm5fd3JpdGUoZGJtX2ZpbGUsIGJ1ZmZlciwgaG9z
dF9yZWNvcmQsIHNpemVvZihkYmRhdGFfd2FpdCkgKyBob3N0X2xlbmd0aCk7Ci0jaWZkZWYgRVhQ
RVJJTUVOVEFMX1FVRVVFX1JBTVAKKyNpZm5kZWYgRElTQUJMRV9RVUVVRV9SQU1QCiAgICAgaWYg
KGYucXVldWVfMnN0YWdlICYmIHF1ZXVlX2Zhc3RfcmFtcCAmJiAhcXVldWVfcnVuX2luX29yZGVy
KQogICAgICAgcXVldWVfbm90aWZ5X2RhZW1vbihtZXNzYWdlX2lkKTsKICNlbmRpZgpAQCAtMTU4
Niw3ICsxNTg5LDcgQEAKICAgZWxzZQogICAgIHsKICAgICBkYmRhdGFfd2FpdCAqbmV3ciA9Ci0g
ICAgICBzdG9yZV9nZXQoc2l6ZW9mKGRiZGF0YV93YWl0KSArIGhvc3RfbGVuZ3RoICsgTUVTU0FH
RV9JRF9MRU5HVEgsIEZBTFNFKTsKKyAgICAgIHN0b3JlX2dldChzaXplb2YoZGJkYXRhX3dhaXQp
ICsgaG9zdF9sZW5ndGggKyBNRVNTQUdFX0lEX0xFTkdUSCwgR0VUX1VOVEFJTlRFRCk7CiAgICAg
bWVtY3B5KG5ld3IsIGhvc3RfcmVjb3JkLCBzaXplb2YoZGJkYXRhX3dhaXQpICsgaG9zdF9sZW5n
dGgpOwogICAgIGhvc3RfcmVjb3JkID0gbmV3cjsKICAgICB9CkBAIC0xNjAwLDcgKzE2MDMsOCBA
QAogICAvKiBVcGRhdGUgdGhlIGRhdGFiYXNlICovCiAKICAgZGJmbl93cml0ZShkYm1fZmlsZSwg
aG9zdC0+bmFtZSwgaG9zdF9yZWNvcmQsIHNpemVvZihkYmRhdGFfd2FpdCkgKyBob3N0X2xlbmd0
aCk7Ci0gIERFQlVHKERfdHJhbnNwb3J0KSBkZWJ1Z19wcmludGYoImFkZGVkIHRvIGxpc3QgZm9y
ICVzXG4iLCBob3N0LT5uYW1lKTsKKyAgREVCVUcoRF90cmFuc3BvcnQpIGRlYnVnX3ByaW50Zigi
YWRkZWQgJS4qcyB0byBxdWV1ZSBmb3IgJXNcbiIsCisJCQkJICBNRVNTQUdFX0lEX0xFTkdUSCwg
bWVzc2FnZV9pZCwgaG9zdC0+bmFtZSk7CiAgIH0KIAogLyogQWxsIG5vdyBkb25lICovCkBAIC0x
NjI4LDcgKzE2MzIsNiBAQAogICBsb2NhbF9tZXNzYWdlX21heCAgbWF4aW11bSBudW1iZXIgb2Yg
bWVzc2FnZXMgZG93biBvbmUgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBhcyBz
ZXQgYnkgdGhlIGNhbGxlciB0cmFuc3BvcnQKICAgbmV3X21lc3NhZ2VfaWQgICAgIHNldCB0byB0
aGUgbWVzc2FnZSBpZCBvZiBhIHdhaXRpbmcgbWVzc2FnZQotICBtb3JlICAgICAgICAgICAgICAg
c2V0IFRSVUUgaWYgdGhlcmUgYXJlIHlldCBtb3JlIG1lc3NhZ2VzIHdhaXRpbmcKICAgb2ljZl9m
dW5jICAgICAgICAgIGZ1bmN0aW9uIHRvIGNhbGwgdG8gdmFsaWRhdGUgaWYgaXQgaXMgb2sgdG8g
c2VuZAogICAgICAgICAgICAgICAgICAgICAgdG8gdGhpcyBtZXNzYWdlX2lkIGZyb20gdGhlIGN1
cnJlbnQgaW5zdGFuY2UuCiAgIG9pY2ZfZGF0YSAgICAgICAgICBvcGFxdWUgZGF0YSBmb3Igb2lj
Zl9mdW5jCkBAIC0xNjQ0LDcgKzE2NDcsNyBAQAogCiBCT09MCiB0cmFuc3BvcnRfY2hlY2tfd2Fp
dGluZyhjb25zdCB1c2NoYXIgKnRyYW5zcG9ydF9uYW1lLCBjb25zdCB1c2NoYXIgKmhvc3RuYW1l
LAotICBpbnQgbG9jYWxfbWVzc2FnZV9tYXgsIHVzY2hhciAqbmV3X21lc3NhZ2VfaWQsIEJPT0wg
Km1vcmUsIG9pY2Ygb2ljZl9mdW5jLCB2b2lkICpvaWNmX2RhdGEpCisgIGludCBsb2NhbF9tZXNz
YWdlX21heCwgdXNjaGFyICpuZXdfbWVzc2FnZV9pZCwgb2ljZiBvaWNmX2Z1bmMsIHZvaWQgKm9p
Y2ZfZGF0YSkKIHsKIGRiZGF0YV93YWl0ICpob3N0X3JlY29yZDsKIGludCBob3N0X2xlbmd0aDsK
QEAgLTE2NTQsOCArMTY1Nyw2IEBACiBpbnQgICAgICAgICBpOwogc3RydWN0IHN0YXQgc3RhdGJ1
ZjsKIAotKm1vcmUgPSBGQUxTRTsKLQogREVCVUcoRF90cmFuc3BvcnQpCiAgIHsKICAgZGVidWdf
cHJpbnRmKCJ0cmFuc3BvcnRfY2hlY2tfd2FpdGluZyBlbnRlcmVkXG4iKTsKQEAgLTE3MjIsNyAr
MTcyMyw3IEBACiAKICAgLyogY3JlYXRlIGFuIGFycmF5IHRvIHJlYWQgZW50aXJlIG1lc3NhZ2Ug
cXVldWUgaW50byBtZW1vcnkgZm9yIHByb2Nlc3NpbmcgICovCiAKLSAgbXNncSA9IHN0b3JlX2dl
dChzaXplb2YobXNncV90KSAqIGhvc3RfcmVjb3JkLT5jb3VudCwgRkFMU0UpOworICBtc2dxID0g
c3RvcmVfZ2V0KHNpemVvZihtc2dxX3QpICogaG9zdF9yZWNvcmQtPmNvdW50LCBHRVRfVU5UQUlO
VEVEKTsKICAgbXNncV9jb3VudCA9IGhvc3RfcmVjb3JkLT5jb3VudDsKICAgbXNncV9hY3R1YWwg
PSBtc2dxX2NvdW50OwogCkBAIC0xODYwLDkgKzE4NjEsNyBAQAogaWYgKGhvc3RfbGVuZ3RoID4g
MCkKICAgewogICBob3N0X3JlY29yZC0+Y291bnQgPSBob3N0X2xlbmd0aC9NRVNTQUdFX0lEX0xF
TkdUSDsKLQogICBkYmZuX3dyaXRlKGRibV9maWxlLCBob3N0bmFtZSwgaG9zdF9yZWNvcmQsIChp
bnQpc2l6ZW9mKGRiZGF0YV93YWl0KSArIGhvc3RfbGVuZ3RoKTsKLSAgKm1vcmUgPSBUUlVFOwog
ICB9CiAKIGRiZm5fY2xvc2UoZGJtX2ZpbGUpOwpAQCAtMTg4Myw5ICsxODgyLDIxIEBACiB0cmFu
c3BvcnRfZG9fcGFzc19zb2NrZXQoY29uc3QgdXNjaGFyICp0cmFuc3BvcnRfbmFtZSwgY29uc3Qg
dXNjaGFyICpob3N0bmFtZSwKICAgY29uc3QgdXNjaGFyICpob3N0YWRkcmVzcywgdXNjaGFyICpp
ZCwgaW50IHNvY2tldF9mZCkKIHsKLWludCBpID0gMjI7CitpbnQgaSA9IDEzOwogY29uc3QgdXNj
aGFyICoqYXJndjsKIAorI2lmbmRlZiBESVNBQkxFX1RMUworaWYgKHNtdHBfcGVlcl9vcHRpb25z
ICYgT1BUSU9OX1RMUykgaSArPSA2OworI2VuZGlmCisjaWZkZWYgRVhQRVJJTUVOVEFMX0VTTVRQ
X0xJTUlUUworaWYgKGNvbnRpbnVlX2xpbWl0X21haWwgfHwgY29udGludWVfbGltaXRfcmNwdCB8
fCBjb250aW51ZV9saW1pdF9yY3B0ZG9tKQorCQkJCSAgICBpICs9IDQ7CisjZW5kaWYKK2lmIChx
dWV1ZV9ydW5fcGlkICE9IChwaWRfdCkwKQkgICAgaSArPSAzOworI2lmZGVmIFNVUFBPUlRfU09D
S1MKK2lmIChwcm94eV9zZXNzaW9uKQkJICAgIGkgKz0gNTsKKyNlbmRpZgorCiAvKiBTZXQgdXAg
dGhlIGNhbGxpbmcgYXJndW1lbnRzOyB1c2UgdGhlIHN0YW5kYXJkIGZ1bmN0aW9uIGZvciB0aGUg
YmFzaWNzLAogYnV0IHdlIGhhdmUgYSBudW1iZXIgb2YgZXh0cmFzIHRoYXQgbWF5IGJlIGFkZGVk
LiAqLwogCkBAIC0xOTE5LDYgKzE5MzAsMTYgQEAKICAgICBhcmd2W2krK10gPSBVUyItTUNUIjsK
ICNlbmRpZgogCisjaWZkZWYgRVhQRVJJTUVOVEFMX0VTTVRQX0xJTUlUUworaWYgKGNvbnRpbnVl
X2xpbWl0X3JjcHQgfHwgY29udGludWVfbGltaXRfcmNwdGRvbSkKKyAgeworICBhcmd2W2krK10g
PSBVUyItTUNMIjsKKyAgYXJndltpKytdID0gc3RyaW5nX3NwcmludGYoIiV1IiwgY29udGludWVf
bGltaXRfbWFpbCk7CisgIGFyZ3ZbaSsrXSA9IHN0cmluZ19zcHJpbnRmKCIldSIsIGNvbnRpbnVl
X2xpbWl0X3JjcHQpOworICBhcmd2W2krK10gPSBzdHJpbmdfc3ByaW50ZigiJXUiLCBjb250aW51
ZV9saW1pdF9yY3B0ZG9tKTsKKyAgfQorI2VuZGlmCisKIGlmIChxdWV1ZV9ydW5fcGlkICE9IChw
aWRfdCkwKQogICB7CiAgIGFyZ3ZbaSsrXSA9IFVTIi1NQ1EiOwpAQCAtMTkyNiw2ICsxOTQ3LDE3
IEBACiAgIGFyZ3ZbaSsrXSA9IHN0cmluZ19zcHJpbnRmKCIlZCIsIHF1ZXVlX3J1bl9waXBlKTsK
ICAgfQogCisjaWZkZWYgU1VQUE9SVF9TT0NLUworaWYgKHByb3h5X3Nlc3Npb24pCisgIHsKKyAg
YXJndltpKytdID0gVVMiLU1DcCI7CisgIGFyZ3ZbaSsrXSA9IHByb3h5X2xvY2FsX2FkZHJlc3M7
CisgIGFyZ3ZbaSsrXSA9IHN0cmluZ19zcHJpbnRmKCIlZCIsIHByb3h5X2xvY2FsX3BvcnQpOwor
ICBhcmd2W2krK10gPSBwcm94eV9leHRlcm5hbF9hZGRyZXNzOworICBhcmd2W2krK10gPSBzdHJp
bmdfc3ByaW50ZigiJWQiLCBwcm94eV9leHRlcm5hbF9wb3J0KTsKKyAgfQorI2VuZGlmCisKIGFy
Z3ZbaSsrXSA9IFVTIi1NQyI7CiBhcmd2W2krK10gPSBVUyB0cmFuc3BvcnRfbmFtZTsKIGFyZ3Zb
aSsrXSA9IFVTIGhvc3RuYW1lOwpAQCAtMTk0NCw2ICsxOTc2LDcgQEAKIAogREVCVUcoRF9leGVj
KSBkZWJ1Z19wcmludF9hcmd2KGFyZ3YpOwogZXhpbV9udWxsc3RkKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAvKiBFbnN1cmUgc3Rke291dCxlcnJ9IGV4aXN0ICovCisvKiBhcmd2WzBdIHNo
b3VsZCBiZSB1bnRhaW50ZWQsIGZyb20gY2hpbGRfZXhlY19leGltKCkgKi8KIGV4ZWN2KENTIGFy
Z3ZbMF0sIChjaGFyICpjb25zdCAqKWFyZ3YpOwogCiBERUJVRyhEX2FueSkgZGVidWdfcHJpbnRm
KCJleGVjdiBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwpAQCAtMTk2OCwxMyArMjAw
MSwyMyBAQAogCiBCT09MCiB0cmFuc3BvcnRfcGFzc19zb2NrZXQoY29uc3QgdXNjaGFyICp0cmFu
c3BvcnRfbmFtZSwgY29uc3QgdXNjaGFyICpob3N0bmFtZSwKLSAgY29uc3QgdXNjaGFyICpob3N0
YWRkcmVzcywgdXNjaGFyICppZCwgaW50IHNvY2tldF9mZCkKKyAgY29uc3QgdXNjaGFyICpob3N0
YWRkcmVzcywgdXNjaGFyICppZCwgaW50IHNvY2tldF9mZAorI2lmZGVmIEVYUEVSSU1FTlRBTF9F
U01UUF9MSU1JVFMKKyAgLCB1bnNpZ25lZCBwZWVyX2xpbWl0X21haWwsIHVuc2lnbmVkIHBlZXJf
bGltaXRfcmNwdCwgdW5zaWduZWQgcGVlcl9saW1pdF9yY3B0ZG9tCisjZW5kaWYKKyAgKQogewog
cGlkX3QgcGlkOwogaW50IHN0YXR1czsKIAogREVCVUcoRF90cmFuc3BvcnQpIGRlYnVnX3ByaW50
ZigidHJhbnNwb3J0X3Bhc3Nfc29ja2V0IGVudGVyZWRcbiIpOwogCisjaWZkZWYgRVhQRVJJTUVO
VEFMX0VTTVRQX0xJTUlUUworY29udGludWVfbGltaXRfbWFpbCA9IHBlZXJfbGltaXRfbWFpbDsK
K2NvbnRpbnVlX2xpbWl0X3JjcHQgPSBwZWVyX2xpbWl0X3JjcHQ7Citjb250aW51ZV9saW1pdF9y
Y3B0ZG9tID0gcGVlcl9saW1pdF9yY3B0ZG9tOworI2VuZGlmCisKIGlmICgocGlkID0gZXhpbV9m
b3JrKFVTImNvbnRpbnVlZC10cmFuc3BvcnQtaW50ZXJwcm9jIikpID09IDApCiAgIHsKICAgLyog
RGlzY29ubmVjdCBlbnRpcmVseSBmcm9tIHRoZSBwYXJlbnQgcHJvY2Vzcy4gSWYgd2UgYXJlIHJ1
bm5pbmcgaW4gdGhlCkBAIC0yMDEwLDYgKzIwNTMsMzEgQEAKIAogCiAKKy8qIEVuZm9yY2UgYWxs
IGFyZ3MgdW50YWludGVkLCBmb3IgY29uc2lzdGVuY3kgd2l0aCBhIHJvdXRlci1zb3VyY2VkIHBp
cGUKK2NvbW1hbmQsIHdoZXJlIChiZWNhdXNlIHRoZSB3aG9sZSBsaW5lIGlzIHBhc3NlZCBhcyBv
bmUgdG8gdGhlIHRwdCkgYQordGFpbnRlZCBhcmcgdGFpbnRzIHRoZSBleGVjdXRhYmxlIG5hbWUu
ICBJdCdzIHVuY2xlYXIgYWxzbyB0aGF0IGxldHRpbmcgYW4KK2F0dGFja2VyIHN1cHBseSBjb21t
YW5kIGFyZ3VtZW50cyBpcyB3aXNlLiAqLworCitzdGF0aWMgQk9PTAorYXJnX2lzX3RhaW50ZWQo
Y29uc3QgdXNjaGFyICogcywgaW50IGFyZ24sIGFkZHJlc3NfaXRlbSAqIGFkZHIsCisgIGNvbnN0
IHVzY2hhciAqIGV0ZXh0LCB1c2NoYXIgKiogZXJycHRyKQoreworaWYgKGlzX3RhaW50ZWQocykp
CisgIHsKKyAgdXNjaGFyICogbXNnID0gc3RyaW5nX3NwcmludGYoIlRhaW50ZWQgYXJnICVkIGZv
ciAlcyBjb21tYW5kOiAnJXMnIiwKKwkJCQlhcmduLCBldGV4dCwgcyk7CisgIGlmIChhZGRyKQor
ICAgIHsKKyAgICBhZGRyLT50cmFuc3BvcnRfcmV0dXJuID0gRkFJTDsKKyAgICBhZGRyLT5tZXNz
YWdlID0gbXNnOworICAgIH0KKyAgZWxzZSAqZXJycHRyID0gbXNnOworICByZXR1cm4gVFJVRTsK
KyAgfQorcmV0dXJuIEZBTFNFOworfQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgIFNldCB1cCBkaXJlY3QgKG5vbi1zaGVs
bCkgY29tbWFuZCAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KQEAgLTIwMjcsNiArMjA5NSw3IEBACiAgIGV4cGFuZF9mYWlsZWQgICAgICBl
cnJvciB2YWx1ZSB0byBzZXQgaWYgZXhwYW5zaW9uIGZhaWxzOyBub3QgcmVsZXZhbnQgaWYKICAg
ICAgICAgICAgICAgICAgICAgIGFkZHIgPT0gTlVMTAogICBhZGRyICAgICAgICAgICAgICAgY2hh
aW4gb2YgYWRkcmVzc2VzLCBvciBOVUxMCisgIGFsbG93X3RhaW50ZWRfYXJncyBhcyBpdCBzYXlz
OyB1c2VkIGZvciAke3J1bn0KICAgZXRleHQgICAgICAgICAgICAgIHRleHQgZm9yIHVzZSBpbiBl
cnJvciBtZXNzYWdlcwogICBlcnJwdHIgICAgICAgICAgICAgd2hlcmUgdG8gcHV0IGVycm9yIG1l
c3NhZ2UgaWYgYWRkciBpcyBOVUxMOwogICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGl0
IGlzIHB1dCBpbiB0aGUgZmlyc3QgYWRkcmVzcwpAQCAtMjAzNiwxNSArMjEwNSwxMiBAQAogKi8K
IAogQk9PTAotdHJhbnNwb3J0X3NldF91cF9jb21tYW5kKGNvbnN0IHVzY2hhciAqKiphcmd2cHRy
LCB1c2NoYXIgKmNtZCwKLSAgQk9PTCBleHBhbmRfYXJndW1lbnRzLCBpbnQgZXhwYW5kX2ZhaWxl
ZCwgYWRkcmVzc19pdGVtICphZGRyLAotICB1c2NoYXIgKmV0ZXh0LCB1c2NoYXIgKiplcnJwdHIp
Cit0cmFuc3BvcnRfc2V0X3VwX2NvbW1hbmQoY29uc3QgdXNjaGFyICoqKiBhcmd2cHRyLCBjb25z
dCB1c2NoYXIgKiBjbWQsCisgIEJPT0wgZXhwYW5kX2FyZ3VtZW50cywgaW50IGV4cGFuZF9mYWls
ZWQsIGFkZHJlc3NfaXRlbSAqIGFkZHIsCisgIEJPT0wgYWxsb3dfdGFpbnRlZF9hcmdzLCBjb25z
dCB1c2NoYXIgKiBldGV4dCwgdXNjaGFyICoqIGVycnB0cikKIHsKLWNvbnN0IHVzY2hhciAqKmFy
Z3Y7Ci11c2NoYXIgKnMsICpzczsKLWludCBhZGRyZXNzX2NvdW50ID0gMDsKLWludCBhcmdjb3Vu
dCA9IDA7Ci1pbnQgbWF4X2FyZ3M7Citjb25zdCB1c2NoYXIgKiogYXJndiwgKiBzOworaW50IGFk
ZHJlc3NfY291bnQgPSAwLCBhcmdjb3VudCA9IDAsIG1heF9hcmdzOwogCiAvKiBHZXQgc3RvcmUg
aW4gd2hpY2ggdG8gYnVpbGQgYW4gYXJndW1lbnQgbGlzdC4gQ291bnQgdGhlIG51bWJlciBvZiBh
ZGRyZXNzZXMKIHN1cHBsaWVkLCBhbmQgYWxsb3cgZm9yIHRoYXQgbWFueSBhcmd1bWVudHMsIHBs
dXMgYW4gYWRkaXRpb25hbCA2MCwgd2hpY2gKQEAgLTIwNTMsNyArMjExOSw3IEBACiAKIGZvciAo
YWRkcmVzc19pdGVtICogYWQgPSBhZGRyOyBhZDsgYWQgPSBhZC0+bmV4dCkgYWRkcmVzc19jb3Vu
dCsrOwogbWF4X2FyZ3MgPSBhZGRyZXNzX2NvdW50ICsgNjA7Ci0qYXJndnB0ciA9IGFyZ3YgPSBz
dG9yZV9nZXQoKG1heF9hcmdzKzEpKnNpemVvZih1c2NoYXIgKiksIEZBTFNFKTsKKyphcmd2cHRy
ID0gYXJndiA9IHN0b3JlX2dldCgobWF4X2FyZ3MrMSkqc2l6ZW9mKHVzY2hhciAqKSwgR0VUX1VO
VEFJTlRFRCk7CiAKIC8qIFNwbGl0IHRoZSBjb21tYW5kIHVwIGludG8gYXJndW1lbnRzIHRlcm1p
bmF0ZWQgYnkgd2hpdGUgc3BhY2UuIExvc2UKIHRyYWlsaW5nIHNwYWNlIGF0IHRoZSBzdGFydCBh
bmQgZW5kLiBEb3VibGUtcXVvdGVkIGFyZ3VtZW50cyBjYW4gY29udGFpbiBcXCBhbmQKQEAgLTIw
NjEsMzMgKzIxMjcsMzAgQEAKIGFyZ3VtZW50cyBhcmUgdmVyYmF0aW0uIENvcHkgZWFjaCBhcmd1
bWVudCBpbnRvIGEgbmV3IHN0cmluZy4gKi8KIAogcyA9IGNtZDsKLXdoaWxlIChpc3NwYWNlKCpz
KSkgcysrOworVXNraXBfd2hpdGVzcGFjZSgmcyk7CiAKLWZvciAoOyAqcyAhPSAwICYmIGFyZ2Nv
dW50IDwgbWF4X2FyZ3M7IGFyZ2NvdW50KyspCitmb3IgKDsgKnMgJiYgYXJnY291bnQgPCBtYXhf
YXJnczsgYXJnY291bnQrKykKICAgewogICBpZiAoKnMgPT0gJ1wnJykKICAgICB7Ci0gICAgc3Mg
PSBzICsgMTsKLSAgICB3aGlsZSAoKnNzICE9IDAgJiYgKnNzICE9ICdcJycpIHNzKys7Ci0gICAg
YXJndlthcmdjb3VudF0gPSBzcyA9IHN0b3JlX2dldChzcyAtIHMrKywgaXNfdGFpbnRlZChjbWQp
KTsKLSAgICB3aGlsZSAoKnMgIT0gMCAmJiAqcyAhPSAnXCcnKSAqc3MrKyA9ICpzKys7Ci0gICAg
aWYgKCpzICE9IDApIHMrKzsKLSAgICAqc3MrKyA9IDA7CisgICAgaW50IG4gPSBVc3RyY3Nwbigr
K3MsICInIik7CisgICAgYXJndlthcmdjb3VudF0gPSBzdHJpbmdfY29weW4ocywgbik7CisgICAg
aWYgKCoocyArPSBuKSA9PSAnXCcnKSBzKys7CiAgICAgfQogICBlbHNlCiAgICAgYXJndlthcmdj
b3VudF0gPSBzdHJpbmdfZGVxdW90ZShDVVNTICZzKTsKLSAgd2hpbGUgKGlzc3BhY2UoKnMpKSBz
Kys7CisgIFVza2lwX3doaXRlc3BhY2UoJnMpOwogICB9CiAKLWFyZ3ZbYXJnY291bnRdID0gVVMg
MDsKK2FyZ3ZbYXJnY291bnRdID0gTlVMTDsKIAogLyogSWYgKnMgIT0gMCB3ZSBoYXZlIHJ1biBv
dXQgb2YgYXJndW1lbnQgc2xvdHMuICovCiAKLWlmICgqcyAhPSAwKQoraWYgKCpzKQogICB7CiAg
IHVzY2hhciAqbXNnID0gc3RyaW5nX3NwcmludGYoIlRvbyBtYW55IGFyZ3VtZW50cyBpbiBjb21t
YW5kIFwiJXNcIiBpbiAiCiAgICAgIiVzIiwgY21kLCBldGV4dCk7Ci0gIGlmIChhZGRyICE9IE5V
TEwpCisgIGlmIChhZGRyKQogICAgIHsKICAgICBhZGRyLT50cmFuc3BvcnRfcmV0dXJuID0gRkFJ
TDsKICAgICBhZGRyLT5tZXNzYWdlID0gbXNnOwpAQCAtMjEyMSwxNiArMjE4NCwxNCBAQAogCiBp
ZiAoZXhwYW5kX2FyZ3VtZW50cykKICAgewotICBCT09MIGFsbG93X2RvbGxhcl9yZWNpcGllbnRz
ID0gYWRkciAhPSBOVUxMICYmCi0gICAgYWRkci0+cGFyZW50ICE9IE5VTEwgJiYKLSAgICBVc3Ry
Y21wKGFkZHItPnBhcmVudC0+YWRkcmVzcywgInN5c3RlbS1maWx0ZXIiKSA9PSAwOworICBCT09M
IGFsbG93X2RvbGxhcl9yZWNpcGllbnRzID0gYWRkciAmJiBhZGRyLT5wYXJlbnQKKyAgICAmJiBV
c3RyY21wKGFkZHItPnBhcmVudC0+YWRkcmVzcywgInN5c3RlbS1maWx0ZXIiKSA9PSAwOwogCi0g
IGZvciAoaW50IGkgPSAwOyBhcmd2W2ldICE9IFVTIDA7IGkrKykKKyAgZm9yIChpbnQgaSA9IDA7
IGFyZ3ZbaV07IGkrKykKICAgICB7Ci0KICAgICAvKiBIYW5kbGUgc3BlY2lhbCBmdWRnZSBmb3Ig
cGFzc2luZyBhbiBhZGRyZXNzIGxpc3QgKi8KIAotICAgIGlmIChhZGRyICE9IE5VTEwgJiYKKyAg
ICBpZiAoYWRkciAmJgogICAgICAgICAoVXN0cmNtcChhcmd2W2ldLCAiJHBpcGVfYWRkcmVzc2Vz
IikgPT0gMCB8fAogICAgICAgICAgVXN0cmNtcChhcmd2W2ldLCAiJHtwaXBlX2FkZHJlc3Nlc30i
KSA9PSAwKSkKICAgICAgIHsKQEAgLTIxNTEsNiArMjIxMiwxNiBAQAogCiAgICAgICBmb3IgKGFk
ZHJlc3NfaXRlbSAqIGFkID0gYWRkcjsgYWQ7IGFkID0gYWQtPm5leHQpCiAgICAgICAgIHsKKwkv
KiAkcGlwZV9hZGRyZXNzZXMgaXMgc3BlZmljYWxseSBub3QgY2hlY2tlZCBmb3IgdGFpbnQsIGJl
Y2F1c2UgdGhlcmUgaXMKKwlhIHRlc3RjYXNlICgzMjEpIGRlcGVuZGluZyBvbiBpdC4gIEl0J3Mg
dW5jbGVhciBpZiB0aGUgZXhhY3QgdGhpbmcgYmVpbmcKKwlkb25lIHJlYWxseSBuZWVkcyB0byBi
ZSBsZWdpdGltYXRlLCB0aG91Z2ggSSBzdXNwZWN0IGl0IHJlZmxlY3RzIGFuCisJYWN0dWFsIHVz
ZS1jYXNlIHRoYXQgc2hvd2VkIHVwIGEgYnVnLgorCVRoaXMgaXMgYSBob2xlIGluIHRoZSB0YWlu
dC1wcmV0ZWN0aW9uLCBtaXRpZ2F0ZWQgb25seSBpbiB0aGF0CisJc2hlbGwtc3ludGF4IG1ldGFj
aGFycyBjYW5ub3QgYmUgaW5qZWN0ZWQgdmlhIHRoaXMgcm91dGUuICovCisKKwlERUJVRyhEX3Ry
YW5zcG9ydCkgaWYgKGlzX3RhaW50ZWQoYWQtPmFkZHJlc3MpKQorCSAgZGVidWdfcHJpbnRmKCJ0
YWludGVkIGVsZW1lbnQgJyVzJyBmcm9tICRwaXBlX2FkZHJlc3Nlc1xuIiwgYWQtPmFkZHJlc3Mp
OworCiAJYXJndltpKytdID0gYWQtPmFkZHJlc3M7CiAJYXJnY291bnQrKzsKIAl9CkBAIC0yMTYy
LDE0ICsyMjMzLDEzIEBACiAKICAgICAgIC8qIEhhbmRsZSBzcGVjaWFsIGNhc2Ugb2YgJGFkZHJl
c3NfcGlwZSB3aGVuIGFmX2ZvcmNlX2NvbW1hbmQgaXMgc2V0ICovCiAKLSAgICBlbHNlIGlmIChh
ZGRyICE9IE5VTEwgJiYgdGVzdGZsYWcoYWRkcixhZl9mb3JjZV9jb21tYW5kKSAmJgorICAgIGVs
c2UgaWYgKGFkZHIgJiYgdGVzdGZsYWcoYWRkcixhZl9mb3JjZV9jb21tYW5kKSAmJgogICAgICAg
ICAoVXN0cmNtcChhcmd2W2ldLCAiJGFkZHJlc3NfcGlwZSIpID09IDAgfHwKICAgICAgICAgIFVz
dHJjbXAoYXJndltpXSwgIiR7YWRkcmVzc19waXBlfSIpID09IDApKQogICAgICAgewogICAgICAg
aW50IGFkZHJlc3NfcGlwZV9hcmdjb3VudCA9IDA7CiAgICAgICBpbnQgYWRkcmVzc19waXBlX21h
eF9hcmdzOwogICAgICAgdXNjaGFyICoqYWRkcmVzc19waXBlX2FyZ3Y7Ci0gICAgICBCT09MIHRh
aW50ZWQ7CiAKICAgICAgIC8qIFdlIGNhbiBuZXZlciBoYXZlIG1vcmUgdGhlbiB0aGUgYXJndiB3
ZSB3aWxsIGJlIGxvYWRpbmcgaW50byAqLwogICAgICAgYWRkcmVzc19waXBlX21heF9hcmdzID0g
bWF4X2FyZ3MgLSBhcmdjb3VudCArIDE7CkBAIC0yMTc4LDEzICsyMjQ4LDEyIEBACiAgICAgICAg
IGRlYnVnX3ByaW50ZigiYWRkcmVzc19waXBlX21heF9hcmdzPSVkXG4iLCBhZGRyZXNzX3BpcGVf
bWF4X2FyZ3MpOwogCiAgICAgICAvKiBXZSBhbGxvY2F0ZSBhbiBhZGRpdGlvbmFsIGZvciAodXNj
aGFyICopMCAqLwotICAgICAgYWRkcmVzc19waXBlX2FyZ3YgPSBzdG9yZV9nZXQoKGFkZHJlc3Nf
cGlwZV9tYXhfYXJncysxKSpzaXplb2YodXNjaGFyICopLCBGQUxTRSk7CisgICAgICBhZGRyZXNz
X3BpcGVfYXJndiA9IHN0b3JlX2dldCgoYWRkcmVzc19waXBlX21heF9hcmdzKzEpKnNpemVvZih1
c2NoYXIgKiksIEdFVF9VTlRBSU5URUQpOwogCiAgICAgICAvKiArMSBiZWNhdXNlIGFkZHItPmxv
Y2FsX3BhcnRbMF0gPT0gJ3wnIHNpbmNlIGFmX2ZvcmNlX2NvbW1hbmQgaXMgc2V0ICovCiAgICAg
ICBzID0gZXhwYW5kX3N0cmluZyhhZGRyLT5sb2NhbF9wYXJ0ICsgMSk7Ci0gICAgICB0YWludGVk
ID0gaXNfdGFpbnRlZChzKTsKIAotICAgICAgaWYgKHMgPT0gTlVMTCB8fCAqcyA9PSAnXDAnKQor
ICAgICAgaWYgKCFzIHx8ICEqcykKICAgICAgICAgewogICAgICAgICBhZGRyLT50cmFuc3BvcnRf
cmV0dXJuID0gRkFJTDsKICAgICAgICAgYWRkci0+bWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJF
eHBhbnNpb24gb2YgXCIlc1wiICIKQEAgLTIxOTMsMzIgKzIyNjIsMjkgQEAKICAgICAgICAgcmV0
dXJuIEZBTFNFOwogICAgICAgICB9CiAKLSAgICAgIHdoaWxlIChpc3NwYWNlKCpzKSkgcysrOyAv
KiBzdHJpcCBsZWFkaW5nIHNwYWNlICovCisgICAgICBVc2tpcF93aGl0ZXNwYWNlKCZzKTsJCQkv
KiBzdHJpcCBsZWFkaW5nIHNwYWNlICovCiAKLSAgICAgIHdoaWxlICgqcyAhPSAwICYmIGFkZHJl
c3NfcGlwZV9hcmdjb3VudCA8IGFkZHJlc3NfcGlwZV9tYXhfYXJncykKKyAgICAgIHdoaWxlICgq
cyAmJiBhZGRyZXNzX3BpcGVfYXJnY291bnQgPCBhZGRyZXNzX3BpcGVfbWF4X2FyZ3MpCiAgICAg
ICAgIHsKICAgICAgICAgaWYgKCpzID09ICdcJycpCi0gICAgICAgICAgewotICAgICAgICAgIHNz
ID0gcyArIDE7Ci0gICAgICAgICAgd2hpbGUgKCpzcyAhPSAwICYmICpzcyAhPSAnXCcnKSBzcysr
OwotICAgICAgICAgIGFkZHJlc3NfcGlwZV9hcmd2W2FkZHJlc3NfcGlwZV9hcmdjb3VudCsrXSA9
IHNzID0gc3RvcmVfZ2V0KHNzIC0gcysrLCB0YWludGVkKTsKLSAgICAgICAgICB3aGlsZSAoKnMg
IT0gMCAmJiAqcyAhPSAnXCcnKSAqc3MrKyA9ICpzKys7Ci0gICAgICAgICAgaWYgKCpzICE9IDAp
IHMrKzsKLSAgICAgICAgICAqc3MrKyA9IDA7Ci0gICAgICAgICAgfQotICAgICAgICBlbHNlIGFk
ZHJlc3NfcGlwZV9hcmd2W2FkZHJlc3NfcGlwZV9hcmdjb3VudCsrXSA9Ci0JICAgICAgc3RyaW5n
X2NvcHkoc3RyaW5nX2RlcXVvdGUoQ1VTUyAmcykpOwotICAgICAgICB3aGlsZSAoaXNzcGFjZSgq
cykpIHMrKzsgLyogc3RyaXAgc3BhY2UgYWZ0ZXIgYXJnICovCisJICB7CisJICBpbnQgbiA9IFVz
dHJjc3BuKCsrcywgIiciKTsKKwkgIGFyZ3ZbYXJnY291bnRdID0gc3RyaW5nX2NvcHluKHMsIG4p
OworCSAgaWYgKCoocyArPSBuKSA9PSAnXCcnKSBzKys7CisJICB9CisgICAgICAgIGVsc2UKKwkg
IGFkZHJlc3NfcGlwZV9hcmd2W2FkZHJlc3NfcGlwZV9hcmdjb3VudCsrXSA9IHN0cmluZ19kZXF1
b3RlKENVU1MgJnMpOworCVVza2lwX3doaXRlc3BhY2UoJnMpOwkJCS8qIHN0cmlwIHNwYWNlIGFm
dGVyIGFyZyAqLwogICAgICAgICB9CiAKLSAgICAgIGFkZHJlc3NfcGlwZV9hcmd2W2FkZHJlc3Nf
cGlwZV9hcmdjb3VudF0gPSBVUyAwOworICAgICAgYWRkcmVzc19waXBlX2FyZ3ZbYWRkcmVzc19w
aXBlX2FyZ2NvdW50XSA9IE5VTEw7CiAKICAgICAgIC8qIElmICpzICE9IDAgd2UgaGF2ZSBydW4g
b3V0IG9mIGFyZ3VtZW50IHNsb3RzLiAqLwotICAgICAgaWYgKCpzICE9IDApCisgICAgICBpZiAo
KnMpCiAgICAgICAgIHsKICAgICAgICAgdXNjaGFyICptc2cgPSBzdHJpbmdfc3ByaW50ZigiVG9v
IG1hbnkgYXJndW1lbnRzIGluICRhZGRyZXNzX3BpcGUgIgogICAgICAgICAgICJcIiVzXCIgaW4g
JXMiLCBhZGRyLT5sb2NhbF9wYXJ0ICsgMSwgZXRleHQpOwotICAgICAgICBpZiAoYWRkciAhPSBO
VUxMKQorICAgICAgICBpZiAoYWRkcikKICAgICAgICAgICB7CiAgICAgICAgICAgYWRkci0+dHJh
bnNwb3J0X3JldHVybiA9IEZBSUw7CiAgICAgICAgICAgYWRkci0+bWVzc2FnZSA9IG1zZzsKQEAg
LTIyMjgsOCArMjI5NCw5IEBACiAgICAgICAgIH0KIAogICAgICAgLyogYWRkcmVzc19waXBlX2Fy
Z2NvdW50IC0gMQotICAgICAgICogYmVjYXVzZSB3ZSBhcmUgcmVwbGFjaW5nICRhZGRyZXNzX3Bp
cGUgaW4gdGhlIGFyZ3VtZW50IGxpc3QKLSAgICAgICAqIHdpdGggdGhlIGZpcnN0IHRoaW5nIGl0
IGV4cGFuZHMgdG8gKi8KKyAgICAgIGJlY2F1c2Ugd2UgYXJlIHJlcGxhY2luZyAkYWRkcmVzc19w
aXBlIGluIHRoZSBhcmd1bWVudCBsaXN0CisgICAgICB3aXRoIHRoZSBmaXJzdCB0aGluZyBpdCBl
eHBhbmRzIHRvICovCisKICAgICAgIGlmIChhcmdjb3VudCArIGFkZHJlc3NfcGlwZV9hcmdjb3Vu
dCAtIDEgPiBtYXhfYXJncykKICAgICAgICAgewogICAgICAgICBhZGRyLT50cmFuc3BvcnRfcmV0
dXJuID0gRkFJTDsKQEAgLTIyMzksMTIgKzIzMDYsMTIgQEAKICAgICAgICAgfQogCiAgICAgICAv
KiBJZiB3ZSBhcmUgbm90IGp1c3QgYWJsZSB0byByZXBsYWNlIHRoZSBzbG90IHRoYXQgY29udGFp
bmVkCi0gICAgICAgKiAkYWRkcmVzc19waXBlIChhZGRyZXNzX3BpcGVfYXJnY291bnQgPT0gMSkK
LSAgICAgICAqIFdlIGhhdmUgdG8gbW92ZSB0aGUgZXhpc3RpbmcgYXJndiBieSBhZGRyZXNzX3Bp
cGVfYXJnY291bnQgLSAxCi0gICAgICAgKiBWaXN1YWxseSBpZiBhZGRyZXNzX3BpcGVfYXJnY291
bnQgPT0gMjoKLSAgICAgICAqIFthcmd2IDBdW2FyZ3YgMV1bYXJndiAyKCRhZGRyZXNzX3BpcGUp
XVthcmd2IDNdWzBdCi0gICAgICAgKiBbYXJndiAwXVthcmd2IDFdW2FwX2FyZzBdW2FwX2FyZzFd
W29sZCBhcmd2IDNdWzBdCi0gICAgICAgKi8KKyAgICAgICRhZGRyZXNzX3BpcGUgKGFkZHJlc3Nf
cGlwZV9hcmdjb3VudCA9PSAxKQorICAgICAgV2UgaGF2ZSB0byBtb3ZlIHRoZSBleGlzdGluZyBh
cmd2IGJ5IGFkZHJlc3NfcGlwZV9hcmdjb3VudCAtIDEKKyAgICAgIFZpc3VhbGx5IGlmIGFkZHJl
c3NfcGlwZV9hcmdjb3VudCA9PSAyOgorICAgICAgW2FyZ3YgMF1bYXJndiAxXVthcmd2IDIoJGFk
ZHJlc3NfcGlwZSldW2FyZ3YgM11bMF0KKyAgICAgIFthcmd2IDBdW2FyZ3YgMV1bYXBfYXJnMF1b
YXBfYXJnMV1bb2xkIGFyZ3YgM11bMF0gKi8KKwogICAgICAgaWYgKGFkZHJlc3NfcGlwZV9hcmdj
b3VudCA+IDEpCiAgICAgICAgIG1lbW1vdmUoCiAgICAgICAgICAgLyogY3VycmVudCBwb3NpdGlv
biArIGFkZGl0aW9uYWwgYXJncyAqLwpAQCAtMjI1NiwxNSArMjMyMywxNiBAQAogICAgICAgICAp
OwogCiAgICAgICAvKiBOb3cgd2UgZmlsbCBpbiB0aGUgc2xvdHMgd2UganVzdCBtb3ZlZCBhcmd2
IG91dCBvZgotICAgICAgICogW2FyZ3YgMF1bYXJndiAxXVthcmd2IDI9cGlwZWFyZ3ZbMF1dW2Fy
Z3YgMz1waXBlYXJndlsxXV1bb2xkIGFyZ3YgM11bMF0KLSAgICAgICAqLworICAgICAgW2FyZ3Yg
MF1bYXJndiAxXVthcmd2IDI9cGlwZWFyZ3ZbMF1dW2FyZ3YgMz1waXBlYXJndlsxXV1bb2xkIGFy
Z3YgM11bMF0gKi8KKwogICAgICAgZm9yIChpbnQgYWRkcmVzc19waXBlX2kgPSAwOwotICAgICAg
ICAgICBhZGRyZXNzX3BpcGVfYXJndlthZGRyZXNzX3BpcGVfaV0gIT0gVVMgMDsKLSAgICAgICAg
ICAgYWRkcmVzc19waXBlX2krKykKLSAgICAgICAgewotICAgICAgICBhcmd2W2krK10gPSBhZGRy
ZXNzX3BpcGVfYXJndlthZGRyZXNzX3BpcGVfaV07Ci0gICAgICAgIGFyZ2NvdW50Kys7Ci0gICAg
ICAgIH0KKyAgICAgICAgICAgYWRkcmVzc19waXBlX2FyZ3ZbYWRkcmVzc19waXBlX2ldOworICAg
ICAgICAgICBhZGRyZXNzX3BpcGVfaSsrLCBhcmdjb3VudCsrKQorCXsKKyAgICAgICAgdXNjaGFy
ICogcyA9IGFkZHJlc3NfcGlwZV9hcmd2W2FkZHJlc3NfcGlwZV9pXTsKKwlpZiAoYXJnX2lzX3Rh
aW50ZWQocywgaSwgYWRkciwgZXRleHQsIGVycnB0cikpIHJldHVybiBGQUxTRTsKKyAgICAgICAg
YXJndltpKytdID0gczsKKwl9CiAKICAgICAgIC8qIFN1YnRyYWN0IG9uZSBzaW5jZSB3ZSByZXBs
YWNlICRhZGRyZXNzX3BpcGUgKi8KICAgICAgIGFyZ2NvdW50LS07CkBAIC0yMjkzLDYgKzIzNjEs
MTcgQEAKICAgICAgICAgZWxzZSAqZXJycHRyID0gbXNnOwogICAgICAgICByZXR1cm4gRkFMU0U7
CiAgICAgICAgIH0KKworICAgICAgaWYgKCBmLnJ1bm5pbmdfaW5fdGVzdF9oYXJuZXNzICYmIGlz
X3RhaW50ZWQoZXhwYW5kZWRfYXJnKQorCSAmJiBVc3RyY21wKGV0ZXh0LCAicXVlcnlwcm9ncmFt
IHJvdXRlciIpID09IDApCisJewkJCS8qIGhhY2ssIHdvdWxkIGJlIGdvb2QgdG8gbm90IG5lZWQg
aXQgKi8KKwlERUJVRyhEX3RyYW5zcG9ydCkKKwkgIGRlYnVnX3ByaW50ZigiU1BFQ0lGSUMgVEVT
VFNVSVRFIEVYRU1QVElPTjogdGFpbnRlZCBhcmcgJyVzJ1xuIiwKKwkJICAgICAgZXhwYW5kZWRf
YXJnKTsKKwl9CisgICAgICBlbHNlIGlmICggICFhbGxvd190YWludGVkX2FyZ3MKKwkgICAgICAm
JiBhcmdfaXNfdGFpbnRlZChleHBhbmRlZF9hcmcsIGksIGFkZHIsIGV0ZXh0LCBlcnJwdHIpKQor
CXJldHVybiBGQUxTRTsKICAgICAgIGFyZ3ZbaV0gPSBleHBhbmRlZF9hcmc7CiAgICAgICB9CiAg
ICAgfQpAQCAtMjMwMCwxNCArMjM3OSwzMCBAQAogICBERUJVRyhEX3RyYW5zcG9ydCkKICAgICB7
CiAgICAgZGVidWdfcHJpbnRmKCJkaXJlY3QgY29tbWFuZCBhZnRlciBleHBhbnNpb246XG4iKTsK
LSAgICBmb3IgKGludCBpID0gMDsgYXJndltpXSAhPSBVUyAwOyBpKyspCi0gICAgICBkZWJ1Z19w
cmludGYoIiAgYXJndlslZF0gPSAlc1xuIiwgaSwgc3RyaW5nX3ByaW50aW5nKGFyZ3ZbaV0pKTsK
KyAgICBmb3IgKGludCBpID0gMDsgYXJndltpXTsgaSsrKQorICAgICAgeworICAgICAgZGVidWdf
cHJpbnRmKCIgIGFyZ3ZbJWRdID0gJyVzJ1xuIiwgaSwgc3RyaW5nX3ByaW50aW5nKGFyZ3ZbaV0p
KTsKKyAgICAgIGRlYnVnX3ByaW50X3RhaW50KGFyZ3ZbaV0pOworICAgICAgfQogICAgIH0KICAg
fQogCiByZXR1cm4gVFJVRTsKIH0KIAorCisKKy8qIEZvciBlcnJvciBtZXNzYWdlcywgYSBzdHJp
bmcgZGVzY3JpYmluZyB0aGUgY29uZmlnIGxvY2F0aW9uIGFzc29jaWF0ZWQKK3dpdGggY3VycmVu
dCBwcm9jZXNzaW5nLiAgTlVMTCBpZiB3ZSBhcmUgbm90IGluIGEgdHJhbnNwb3J0LiAqLworLyog
TmFtZSBvbmx5LCBmb3Igbm93ICovCisKK3VzY2hhciAqCit0cmFuc3BvcnRfY3VycmVudF9uYW1l
KHZvaWQpCit7CitpZiAoIXRyYW5zcG9ydF9uYW1lKSByZXR1cm4gTlVMTDsKK3JldHVybiBzdHJp
bmdfc3ByaW50ZigiICh0cmFuc3BvcnQgJXMsICVzICVkKSIsIHRyYW5zcG9ydF9uYW1lLCBkcml2
ZXJfc3JjZmlsZSwgZHJpdmVyX3NyY2xpbmUpOworfQorCiAjZW5kaWYJLyohTUFDUk9fUFJFREVG
Ki8KIC8qIHZpOiBhdyBhaSBzdz0yCiAqLwpkaWZmIC11ciBleGltLm9yaWcvc3JjL3RyYW5zcG9y
dHMvYXBwZW5kZmlsZS5jIGV4aW0vc3JjL3RyYW5zcG9ydHMvYXBwZW5kZmlsZS5jCi0tLSBleGlt
Lm9yaWcvc3JjL3RyYW5zcG9ydHMvYXBwZW5kZmlsZS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAw
MDAwMDAwICswMzAwCisrKyBleGltL3NyYy90cmFuc3BvcnRzL2FwcGVuZGZpbGUuYwkyMDIyLTA2
LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw4ICsyLDggQEAKICogICAgIEV4aW0g
LSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBDb3B5cmlnaHQgKGMpIFVu
aXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRo
ZSBFeGltIG1haW50YWluZXJzIDIwMjAgKi8KKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gbWFp
bnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KKy8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBD
YW1icmlkZ2UgMTk5NSAtIDIwMjAgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRp
dGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIApAQCAtMTEyLDcwICsxMTIsMjcg
QEAKIC8qIERlZmF1bHQgcHJpdmF0ZSBvcHRpb25zIGJsb2NrIGZvciB0aGUgYXBwZW5kZmlsZSB0
cmFuc3BvcnQuICovCiAKIGFwcGVuZGZpbGVfdHJhbnNwb3J0X29wdGlvbnNfYmxvY2sgYXBwZW5k
ZmlsZV90cmFuc3BvcnRfb3B0aW9uX2RlZmF1bHRzID0gewotICBOVUxMLCAgICAgICAgICAgLyog
ZmlsZW5hbWUgKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIGRpcm5hbWUgKi8KLSAgVVMicSR7YmFz
ZTYyOiR0b2RfZXBvY2h9LSRpbm9kZSIsIC8qIGRpcmZpbGVuYW1lICovCi0gIE5VTEwsICAgICAg
ICAgICAvKiBtZXNzYWdlX3ByZWZpeCAoZGVmYXVsdCByZXNldCBpbiBpbml0IGlmIG5vdCBic210
cCkgKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIG1lc3NhZ2Vfc3VmZml4IChkaXR0bykgKi8KLSAg
VVMiYW55d2hlcmUiLCAgIC8qIGNyZWF0ZV9maWxlX3N0cmluZyAoc3RyaW5nIHZhbHVlIGZvciBj
cmVhdGVfZmlsZSkgKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIHF1b3RhICovCi0gIE5VTEwsICAg
ICAgICAgICAvKiBxdW90YV9kaXJlY3RvcnkgKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIHF1b3Rh
X2ZpbGVjb3VudCAqLwotICBOVUxMLCAgICAgICAgICAgLyogcXVvdGFfc2l6ZV9yZWdleCAqLwot
ICBOVUxMLCAgICAgICAgICAgLyogcXVvdGFfd2Fybl90aHJlc2hvbGQgKi8KLSAgTlVMTCwgICAg
ICAgICAgIC8qIG1haWxib3hfc2l6ZV9zdHJpbmcgKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIG1h
aWxib3hfZmlsZWNvdW50X3N0cmluZyAqLwotICBOVUxMLCAgICAgICAgICAgLyogZXhwYW5kX21h
aWxkaXJfdXNlX3NpemVfZmlsZSAqLwotICBVUyJeKD86Y3VyfG5ld3xcXC4uKikkIiwgIC8qIG1h
aWxkaXJfZGlyX3JlZ2V4ICovCi0gIE5VTEwsICAgICAgICAgICAvKiBtYWlsZGlyX3RhZyAqLwot
ICBOVUxMLCAgICAgICAgICAgLyogbWFpbGRpcmZvbGRlcl9jcmVhdGVfcmVnZXggKi8KLSAgTlVM
TCwgICAgICAgICAgIC8qIG1haWxzdG9yZV9wcmVmaXggKi8KLSAgTlVMTCwgICAgICAgICAgIC8q
IG1haWxzdG9yZV9zdWZmaXggKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIGNoZWNrX3N0cmluZyAo
ZGVmYXVsdCBjaGFuZ2VkIGZvciBub24tYnNtdHAgZmlsZSkqLwotICBOVUxMLCAgICAgICAgICAg
LyogZXNjYXBlX3N0cmluZyAoZGl0dG8pICovCi0gIE5VTEwsICAgICAgICAgICAvKiBmaWxlX2Zv
cm1hdCAqLwotICAwLCAgICAgICAgICAgICAgLyogcXVvdGFfdmFsdWUgKi8KLSAgMCwgICAgICAg
ICAgICAgIC8qIHF1b3RhX3dhcm5fdGhyZXNob2xkX3ZhbHVlICovCi0gIC0xLCAgICAgICAgICAg
ICAvKiBtYWlsYm94X3NpemVfdmFsdWUgKi8KLSAgLTEsICAgICAgICAgICAgIC8qIG1haWxib3hf
ZmlsZWNvdW50X3ZhbHVlICovCi0gIDAsICAgICAgICAgICAgICAvKiBxdW90YV9maWxlY291bnRf
dmFsdWUgKi8KLSAgQVBQRU5ERklMRV9NT0RFLCAgICAgICAgICAgLyogbW9kZSAqLwotICBBUFBF
TkRGSUxFX0RJUkVDVE9SWV9NT0RFLCAvKiBkaXJtb2RlICovCi0gIEFQUEVOREZJTEVfTE9DS0ZJ
TEVfTU9ERSwgIC8qIGxvY2tmaWxlX21vZGUgKi8KLSAgMzAqNjAsICAgICAgICAgIC8qIGxvY2tm
aWxlX3RpbWVvdXQgKi8KLSAgMCwgICAgICAgICAgICAgIC8qIGxvY2tfZmNudGxfdGltZW91dCAq
LwotICAwLCAgICAgICAgICAgICAgLyogbG9ja19mbG9ja190aW1lb3V0ICovCi0gIDEwLCAgICAg
ICAgICAgICAvKiBsb2NrX3JldHJpZXMgKi8KLSAgIDMsICAgICAgICAgICAgIC8qIGxvY2tfaW50
ZXJ2YWwgKi8KLSAgMTAsICAgICAgICAgICAgIC8qIG1haWxkaXJfcmV0cmllcyAqLwotICBjcmVh
dGVfYW55d2hlcmUsLyogY3JlYXRlX2ZpbGUgKi8KLSAgMCwgICAgICAgICAgICAgIC8qIG9wdGlv
bnMgKi8KLSAgRkFMU0UsICAgICAgICAgIC8qIGFsbG93X2ZpZm8gKi8KLSAgRkFMU0UsICAgICAg
ICAgIC8qIGFsbG93X3N5bWxpbmsgKi8KLSAgRkFMU0UsICAgICAgICAgIC8qIGNoZWNrX2dyb3Vw
ICovCi0gIFRSVUUsICAgICAgICAgICAvKiBjaGVja19vd25lciAqLwotICBUUlVFLCAgICAgICAg
ICAgLyogY3JlYXRlX2RpcmVjdG9yeSAqLwotICBGQUxTRSwgICAgICAgICAgLyogbm90aWZ5X2Nv
bXNhdCAqLwotICBUUlVFLCAgICAgICAgICAgLyogdXNlX2xvY2tmaWxlICovCi0gIEZBTFNFLCAg
ICAgICAgICAvKiBzZXRfdXNlX2xvY2tmaWxlICovCi0gIFRSVUUsICAgICAgICAgICAvKiB1c2Vf
ZmNudGwgKi8KLSAgRkFMU0UsICAgICAgICAgIC8qIHNldF91c2VfZmNudGwgKi8KLSAgRkFMU0Us
ICAgICAgICAgIC8qIHVzZV9mbG9jayAqLwotICBGQUxTRSwgICAgICAgICAgLyogc2V0X3VzZV9m
bG9jayAqLwotICBGQUxTRSwgICAgICAgICAgLyogdXNlX21ieF9sb2NrICovCi0gIEZBTFNFLCAg
ICAgICAgICAvKiBzZXRfdXNlX21ieF9sb2NrICovCi0gIEZBTFNFLCAgICAgICAgICAvKiB1c2Vf
YnNtdHAgKi8KLSAgRkFMU0UsICAgICAgICAgIC8qIHVzZV9jcmxmICovCi0gIEZBTFNFLCAgICAg
ICAgICAvKiBmaWxlX211c3RfZXhpc3QgKi8KLSAgVFJVRSwgICAgICAgICAgIC8qIG1vZGVfZmFp
bF9uYXJyb3dlciAqLwotICBGQUxTRSwgICAgICAgICAgLyogbWFpbGRpcl9mb3JtYXQgKi8KLSAg
RkFMU0UsICAgICAgICAgIC8qIG1haWxkaXJfdXNlX3NpemVfZmlsZSAqLwotICBGQUxTRSwgICAg
ICAgICAgLyogbWFpbHN0b3JlX2Zvcm1hdCAqLwotICBGQUxTRSwgICAgICAgICAgLyogbWJ4X2Zv
cm1hdCAqLwotICBGQUxTRSwgICAgICAgICAgLyogcXVvdGFfd2Fybl90aHJlc2hvbGRfaXNfcGVy
Y2VudCAqLwotICBUUlVFLCAgICAgICAgICAgLyogcXVvdGFfaXNfaW5jbHVzaXZlICovCi0gIEZB
TFNFLCAgICAgICAgICAvKiBxdW90YV9ub19jaGVjayAqLwotICBGQUxTRSAgICAgICAgICAgLyog
cXVvdGFfZmlsZWNvdW50X25vX2NoZWNrICovCisgIC8qIGFsbCBub24tbWVudGlvbmVkIG1lbWJl
cnMgemVyby9udWxsL2ZhbHNlICovCisgIC5kaXJmaWxlbmFtZSA9IFVTInEke2Jhc2U2MjokdG9k
X2Vwb2NofS0kaW5vZGUiLAorICAuY3JlYXRlX2ZpbGVfc3RyaW5nID0gVVMiYW55d2hlcmUiLAor
ICAubWFpbGRpcl9kaXJfcmVnZXggPSBVUyJeKD86Y3VyfG5ld3xcXC4uKikkIiwKKyAgLm1haWxi
b3hfc2l6ZV92YWx1ZSA9IC0xLAorICAubWFpbGJveF9maWxlY291bnRfdmFsdWUgPSAtMSwKKyAg
Lm1vZGUgPSBBUFBFTkRGSUxFX01PREUsCisgIC5kaXJtb2RlID0gQVBQRU5ERklMRV9ESVJFQ1RP
UllfTU9ERSwKKyAgLmxvY2tmaWxlX21vZGUgPSBBUFBFTkRGSUxFX0xPQ0tGSUxFX01PREUsCisg
IC5sb2NrZmlsZV90aW1lb3V0ID0gMzAqNjAsCisgIC5sb2NrX3JldHJpZXMgPSAxMCwKKyAgIC5s
b2NrX2ludGVydmFsID0gMywKKyAgLm1haWxkaXJfcmV0cmllcyA9IDEwLAorICAuY3JlYXRlX2Zp
bGUgPSBjcmVhdGVfYW55d2hlcmUsCisgIC5jaGVja19vd25lciA9IFRSVUUsCisgIC5jcmVhdGVf
ZGlyZWN0b3J5ID0gVFJVRSwKKyAgLm5vdGlmeV9jb21zYXQgPSBGQUxTRSwKKyAgLnVzZV9sb2Nr
ZmlsZSA9IFRSVUUsCisgIC51c2VfZmNudGwgPSBUUlVFLAorICAubW9kZV9mYWlsX25hcnJvd2Vy
ID0gVFJVRSwKKyAgLnF1b3RhX2lzX2luY2x1c2l2ZSA9IFRSVUUsCiB9OwogCiAKQEAgLTIyNiwx
MSArMTgzLDYgQEAKIHVzY2hhciAqcSA9IG9iLT5xdW90YTsKIGRvdWJsZSBkZWZhdWx0X3ZhbHVl
ID0gMC4wOwogCi1hZGRybGlzdCA9IGFkZHJsaXN0OyAgICAvKiBLZWVwIHBpY2t5IGNvbXBpbGVy
cyBoYXBweSAqLwotZHVtbXkgPSBkdW1teTsKLXVpZCA9IHVpZDsKLWdpZCA9IGdpZDsKLQogaWYg
KG9iLT5leHBhbmRfbWFpbGRpcl91c2Vfc2l6ZV9maWxlKQogCW9iLT5tYWlsZGlyX3VzZV9zaXpl
X2ZpbGUgPSBleHBhbmRfY2hlY2tfY29uZGl0aW9uKG9iLT5leHBhbmRfbWFpbGRpcl91c2Vfc2l6
ZV9maWxlLAogCQlVUyJgbWFpbGRpcl91c2Vfc2l6ZV9maWxlYCBpbiB0cmFuc3BvcnQiLCB0Ymxv
Y2stPm5hbWUpOwpAQCAtMjQwLDE3ICsxOTIsMTUgQEAKIAogZm9yIChpbnQgaSA9IDA7IGkgPCA1
OyBpKyspCiAgIHsKLSAgZG91YmxlIGQ7CisgIGRvdWJsZSBkID0gZGVmYXVsdF92YWx1ZTsKICAg
aW50IG5vX2NoZWNrID0gMDsKICAgdXNjaGFyICp3aGljaCA9IE5VTEw7CiAKLSAgaWYgKHEgPT0g
TlVMTCkgZCA9IGRlZmF1bHRfdmFsdWU7Ci0gIGVsc2UKKyAgaWYgKHEpCiAgICAgewotICAgIHVz
Y2hhciAqcmVzdDsKLSAgICB1c2NoYXIgKnMgPSBleHBhbmRfc3RyaW5nKHEpOworICAgIHVzY2hh
ciAqIHJlc3QsICogczsKIAotICAgIGlmICghcykKKyAgICBpZiAoIShzID0gIGV4cGFuZF9zdHJp
bmcocSkpKQogICAgICAgewogICAgICAgKmVycm1zZyA9IHN0cmluZ19zcHJpbnRmKCJFeHBhbnNp
b24gb2YgXCIlc1wiIGluICVzIHRyYW5zcG9ydCBmYWlsZWQ6ICIKICAgICAgICAgIiVzIiwgcSwg
dGJsb2NrLT5uYW1lLCBleHBhbmRfc3RyaW5nX21lc3NhZ2UpOwpAQCAtMzIwLDggKzI3MCw4IEBA
CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgMjoKLSAgICBpZiAoZCA+PSAyLjAqMTAyNC4wKjEw
MjQuMCoxMDI0LjAgJiYgc2l6ZW9mKG9mZl90KSA8PSA0KQotCXdoaWNoID0gVVMicXVvdGFfd2Fy
bl90aHJlc2hvbGQiOworICAgICAgaWYgKGQgPj0gMi4wKjEwMjQuMCoxMDI0LjAqMTAyNC4wICYm
IHNpemVvZihvZmZfdCkgPD0gNCkKKwkgIHdoaWNoID0gVVMicXVvdGFfd2Fybl90aHJlc2hvbGQi
OwogICAgICAgb2ItPnF1b3RhX3dhcm5fdGhyZXNob2xkX3ZhbHVlID0gKG9mZl90KWQ7CiAgICAg
ICBxID0gb2ItPm1haWxib3hfc2l6ZV9zdHJpbmc7CiAgICAgICBkZWZhdWx0X3ZhbHVlID0gLTEu
MDsKQEAgLTM2Nyw2ICszMTcsNyBAQAogewogYXBwZW5kZmlsZV90cmFuc3BvcnRfb3B0aW9uc19i
bG9jayAqb2IgPQogICAoYXBwZW5kZmlsZV90cmFuc3BvcnRfb3B0aW9uc19ibG9jayAqKSh0Ymxv
Y2stPm9wdGlvbnNfYmxvY2spOwordXNjaGFyICogczsKIAogLyogU2V0IHVwIHRoZSBzZXR1cCBl
bnRyeSBwb2ludCwgdG8gYmUgY2FsbGVkIGluIHRoZSBwcml2aWxlZ2VkIHN0YXRlICovCiAKQEAg
LTQ2NSwyMCArNDE2LDE3IEBACiAvKiBJZiAiY3JlYXRlX2ZpbGUiIGlzIHNldCwgY2hlY2sgdGhh
dCBhIHZhbGlkIG9wdGlvbiBpcyBnaXZlbiwgYW5kIHNldCB0aGUKIGludGVnZXIgdmFyaWFibGUu
ICovCiAKLWlmIChvYi0+Y3JlYXRlX2ZpbGVfc3RyaW5nKQoraWYgKChzID0gb2ItPmNyZWF0ZV9m
aWxlX3N0cmluZyApICYmICpzKQogICB7Ci0gIGludCB2YWx1ZSA9IDA7Ci0gIGlmIChVc3RyY21w
KG9iLT5jcmVhdGVfZmlsZV9zdHJpbmcsICJhbnl3aGVyZSIpID09IDApCi0gICAgdmFsdWUgPSBj
cmVhdGVfYW55d2hlcmU7Ci0gIGVsc2UgaWYgKFVzdHJjbXAob2ItPmNyZWF0ZV9maWxlX3N0cmlu
ZywgImJlbG93aG9tZSIpID09IDApCi0gICAgdmFsdWUgPSBjcmVhdGVfYmVsb3dob21lOwotICBl
bHNlIGlmIChVc3RyY21wKG9iLT5jcmVhdGVfZmlsZV9zdHJpbmcsICJpbmhvbWUiKSA9PSAwKQot
ICAgIHZhbHVlID0gY3JlYXRlX2luaG9tZTsKKyAgaW50IHZhbCA9IDA7CisgIGlmIChVc3RyY21w
KHMsICJhbnl3aGVyZSIpID09IDApCQkJdmFsID0gY3JlYXRlX2FueXdoZXJlOworICBlbHNlIGlm
ICgqcyA9PSAnLycgfHwgVXN0cmNtcChzLCAiYmVsb3dob21lIikgPT0gMCkJdmFsID0gY3JlYXRl
X2JlbG93aG9tZTsKKyAgZWxzZSBpZiAoVXN0cmNtcChzLCAiaW5ob21lIikgPT0gMCkJCQl2YWwg
PSBjcmVhdGVfaW5ob21lOwogICBlbHNlCiAgICAgbG9nX3dyaXRlKDAsIExPR19QQU5JQ19ESUV8
TE9HX0NPTkZJRywKLSAgICAgICJpbnZhbGlkIHZhbHVlIGdpdmVuIGZvciBcImZpbGVfY3JlYXRl
XCIgZm9yIHRoZSAlcyB0cmFuc3BvcnQ6ICVzIiwKLSAgICAgICAgdGJsb2NrLT5uYW1lLCBvYi0+
Y3JlYXRlX2ZpbGVfc3RyaW5nKTsKLSAgb2ItPmNyZWF0ZV9maWxlID0gdmFsdWU7CisgICAgICAi
aW52YWxpZCB2YWx1ZSBnaXZlbiBmb3IgXCJjcmVhdGVfZmlsZVwiIGZvciB0aGUgJXMgdHJhbnNw
b3J0OiAnJXMnIiwKKyAgICAgIHRibG9jay0+bmFtZSwgcyk7CisgIG9iLT5jcmVhdGVfZmlsZSA9
IHZhbDsKICAgfQogCiAvKiBJZiBxdW90YV93YXJuX3RocmVzaG9sZCBpcyBzZXQsIHNldCB1cCBk
ZWZhdWx0IGZvciB3YXJuX21lc3NhZ2UuIEl0IG1heQpAQCAtNjQ5LDcgKzU5Nyw4IEBACiAKIC8q
IFNlYXJjaCB0aGUgZm9ybWF0cyBmb3IgYSBtYXRjaCAqLwogCi13aGlsZSAoKHMgPSBzdHJpbmdf
bmV4dGlubGlzdCgmZm9ybWF0LCZzZXAsYmlnX2J1ZmZlcixiaWdfYnVmZmVyX3NpemUpKSkKKy8q
IG5vdCBleHBhbmRlZCBzbyBjYW5ub3QgYmUgdGFpbnRlZCAqLword2hpbGUgKChzID0gc3RyaW5n
X25leHRpbmxpc3QoJmZvcm1hdCwgJnNlcCwgYmlnX2J1ZmZlciwgYmlnX2J1ZmZlcl9zaXplKSkp
CiAgIHsKICAgaW50IHNsZW4gPSBVc3RybGVuKHMpOwogICBCT09MIG1hdGNoID0gbGVuID49IHNs
ZW4gJiYgVXN0cm5jbXAoZGF0YSwgcywgc2xlbikgPT0gMDsKQEAgLTcwMiwxNCArNjUxLDE0IEBA
CiBBcmd1bWVudHM6CiAgIGRpcm5hbWUgICAgICAgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeQog
ICBjb3VudHB0ciAgICAgIHdoZXJlIHRvIGFkZCB0aGUgZmlsZSBjb3VudCAoYmVjYXVzZSB0aGlz
IGZ1bmN0aW9uIHJlY3Vyc2VzKQotICByZWdleCAgICAgICAgIGEgY29tcGlsZWQgcmVnZXggdG8g
Z2V0IHRoZSBzaXplIGZyb20gYSBuYW1lCisgIHJlICAgICAgICAgICAgYSBjb21waWxlZCByZWdl
eCB0byBnZXQgdGhlIHNpemUgZnJvbSBhIG5hbWUKIAogUmV0dXJuczogICAgICAgIHRoZSBzdW0g
b2YgdGhlIHNpemVzIG9mIHRoZSBzdGF0dGFibGUgZmlsZXMKICAgICAgICAgICAgICAgICB6ZXJv
IGlmIHRoZSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZAogKi8KIAogb2ZmX3QKLWNoZWNrX2Rp
cl9zaXplKGNvbnN0IHVzY2hhciAqIGRpcm5hbWUsIGludCAqY291bnRwdHIsIGNvbnN0IHBjcmUg
KnJlZ2V4KQorY2hlY2tfZGlyX3NpemUoY29uc3QgdXNjaGFyICogZGlybmFtZSwgaW50ICogY291
bnRwdHIsIGNvbnN0IHBjcmUyX2NvZGUgKiByZSkKIHsKIERJUiAqZGlyOwogb2ZmX3Qgc3VtID0g
MDsKQEAgLTcyOCwxNCArNjc3LDE4IEBACiAKICAgLyogSWYgdGhlcmUncyBhIHJlZ2V4LCB0cnkg
dG8gZmluZCB0aGUgc2l6ZSB1c2luZyBpdCAqLwogCi0gIGlmIChyZWdleCkKKyAgaWYgKHJlKQog
ICAgIHsKLSAgICBpbnQgb3ZlY3Rvcls2XTsKLSAgICBpZiAocGNyZV9leGVjKHJlZ2V4LCBOVUxM
LCBDUyBuYW1lLCBVc3RybGVuKG5hbWUpLCAwLCAwLCBvdmVjdG9yLDYpID49IDIpCisgICAgcGNy
ZTJfbWF0Y2hfZGF0YSAqIG1kID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUoMiwgcGNyZV9nZW5f
Y3R4KTsKKyAgICBpbnQgcmMgPSBwY3JlMl9tYXRjaChyZSwgKFBDUkUyX1NQVFIpbmFtZSwgUENS
RTJfWkVST19URVJNSU5BVEVELAorCQkJICAwLCAwLCBtZCwgcGNyZV9tdGNfY3R4KTsKKyAgICBQ
Q1JFMl9TSVpFICogb3ZlYyA9IHBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIobWQpOworICAgIGlm
ICggIHJjID49IDAKKyAgICAgICAmJiAocmMgPSBwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudChtZCkp
ID49IDIpCiAgICAgICB7CiAgICAgICB1c2NoYXIgKmVuZHB0cjsKLSAgICAgIG9mZl90IHNpemUg
PSAob2ZmX3QpVXN0cnRvZChuYW1lICsgb3ZlY3RvclsyXSwgJmVuZHB0cik7Ci0gICAgICBpZiAo
ZW5kcHRyID09IG5hbWUgKyBvdmVjdG9yWzNdKQorICAgICAgb2ZmX3Qgc2l6ZSA9IChvZmZfdClV
c3RydG9kKG5hbWUgKyBvdmVjWzJdLCAmZW5kcHRyKTsKKyAgICAgIGlmIChlbmRwdHIgPT0gbmFt
ZSArIG92ZWNbM10pCiAgICAgICAgIHsKICAgICAgICAgc3VtICs9IHNpemU7CiAgICAgICAgIERF
QlVHKERfdHJhbnNwb3J0KQpAQCAtNzYyLDcgKzcxNSw3IEBACiAgICAgaWYgKChzdGF0YnVmLnN0
X21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcpCiAgICAgICBzdW0gKz0gc3RhdGJ1Zi5zdF9zaXpl
IC8gc3RhdGJ1Zi5zdF9ubGluazsKICAgICBlbHNlIGlmICgoc3RhdGJ1Zi5zdF9tb2RlICYgU19J
Rk1UKSA9PSBTX0lGRElSKQotICAgICAgc3VtICs9IGNoZWNrX2Rpcl9zaXplKHBhdGgsICZjb3Vu
dCwgcmVnZXgpOworICAgICAgc3VtICs9IGNoZWNrX2Rpcl9zaXplKHBhdGgsICZjb3VudCwgcmUp
OwogICB9CiAKIGNsb3NlZGlyKGRpcik7CkBAIC05NDAsMjggKzg5MywyOCBAQAogQXJndW1lbnRz
OgogICBmaWxlbmFtZSAgICAgdGhlIGZpbGUgbmFtZQogICBjcmVhdGVfZmlsZSAgdGhlIG9iLT5j
cmVhdGVfZmlsZSBvcHRpb24KKyAgZGVsaXZlcl9kaXIgIHRoZSBkZWxpdmVyeSBkaXJlY3RvcnkK
IAogUmV0dXJuczogICAgICAgVFJVRSBpZiBjcmVhdGlvbiBpcyBwZXJtaXR0ZWQKICovCiAKIHN0
YXRpYyBCT09MCi1jaGVja19jcmVhdGlvbih1c2NoYXIgKmZpbGVuYW1lLCBpbnQgY3JlYXRlX2Zp
bGUpCitjaGVja19jcmVhdGlvbih1c2NoYXIgKmZpbGVuYW1lLCBpbnQgY3JlYXRlX2ZpbGUsIGNv
bnN0IHVzY2hhciAqIGRlbGl2ZXJfZGlyKQogewogQk9PTCB5aWVsZCA9IFRSVUU7CiAKLWlmIChk
ZWxpdmVyX2hvbWUgICYmICBjcmVhdGVfZmlsZSAhPSBjcmVhdGVfYW55d2hlcmUpCitpZiAoZGVs
aXZlcl9kaXIgICYmICBjcmVhdGVfZmlsZSAhPSBjcmVhdGVfYW55d2hlcmUpCiAgIHsKLSAgaW50
IGxlbiA9IFVzdHJsZW4oZGVsaXZlcl9ob21lKTsKKyAgaW50IGxlbiA9IFVzdHJsZW4oZGVsaXZl
cl9kaXIpOwogICB1c2NoYXIgKmZpbGUgPSBmaWxlbmFtZTsKIAogICB3aGlsZSAoZmlsZVswXSA9
PSAnLycgJiYgZmlsZVsxXSA9PSAnLycpIGZpbGUrKzsKLSAgaWYgKFVzdHJuY21wKGZpbGUsIGRl
bGl2ZXJfaG9tZSwgbGVuKSAhPSAwIHx8IGZpbGVbbGVuXSAhPSAnLycgfHwKLSAgICAgICAoIFVz
dHJjaHIoZmlsZStsZW4rMiwgJy8nKSAhPSBOVUxMICYmCi0gICAgICAgICAoCi0gICAgICAgICBj
cmVhdGVfZmlsZSAhPSBjcmVhdGVfYmVsb3dob21lIHx8Ci0gICAgICAgICBVc3Ryc3RyKGZpbGUr
bGVuLCAiLy4uLyIpICE9IE5VTEwKLSAgICAgICAgICkKLSAgICAgICApCisgIGlmICggIFVzdHJu
Y21wKGZpbGUsIGRlbGl2ZXJfZGlyLCBsZW4pICE9IDAKKyAgICAgfHwgZmlsZVtsZW5dICE9ICcv
JworICAgICB8fCAgICBVc3RyY2hyKGZpbGUrbGVuKzIsICcvJykgIT0gTlVMTAorCSYmICggIGNy
ZWF0ZV9maWxlICE9IGNyZWF0ZV9iZWxvd2hvbWUKKwkgICB8fCBVc3Ryc3RyKGZpbGUrbGVuLCAi
Ly4uLyIpICE9IE5VTEwKKwkgICApCiAgICAgICkgeWllbGQgPSBGQUxTRTsKIAogICAvKiBJZiB5
aWVsZCBpcyBUUlVFLCB0aGUgZmlsZSBuYW1lIHN0YXJ0cyB3aXRoIHRoZSBob21lIGRpcmVjdG9y
eSwgYW5kIGRvZXMKQEAgLTk5OSwxMCArOTUyLDEwIEBACiAgICAgaWYgKHJwKQogICAgICAgewog
ICAgICAgdXNjaGFyIGhkYnVmZmVyW1BBVEhfTUFYKzFdOwotICAgICAgdXNjaGFyICpycGggPSBk
ZWxpdmVyX2hvbWU7CisgICAgICBjb25zdCB1c2NoYXIgKiBycGggPSBkZWxpdmVyX2RpcjsKICAg
ICAgIGludCBybGVuID0gVXN0cmxlbihiaWdfYnVmZmVyKTsKIAotICAgICAgaWYgKChycCA9IFVT
IHJlYWxwYXRoKENTIGRlbGl2ZXJfaG9tZSwgQ1MgaGRidWZmZXIpKSkKKyAgICAgIGlmICgocnAg
PSBVUyByZWFscGF0aChDUyBkZWxpdmVyX2RpciwgQ1MgaGRidWZmZXIpKSkKICAgICAgICAgewog
ICAgICAgICBycGggPSBoZGJ1ZmZlcjsKICAgICAgICAgbGVuID0gVXN0cmxlbihycGgpOwpAQCAt
MTAxMyw3ICs5NjYsNyBAQAogICAgICAgICB7CiAgICAgICAgIHlpZWxkID0gRkFMU0U7CiAgICAg
ICAgIERFQlVHKERfdHJhbnNwb3J0KSBkZWJ1Z19wcmludGYoIlJlYWwgcGF0aCBcIiVzXCIgZG9l
cyBub3QgbWF0Y2ggXCIlc1wiXG4iLAotICAgICAgICAgIGJpZ19idWZmZXIsIGRlbGl2ZXJfaG9t
ZSk7CisgICAgICAgICAgYmlnX2J1ZmZlciwgZGVsaXZlcl9kaXIpOwogICAgICAgICB9CiAgICAg
ICB9CiAgICAgfQpAQCAtMTE4Myw2ICsxMTM2LDcgQEAKIGFwcGVuZGZpbGVfdHJhbnNwb3J0X29w
dGlvbnNfYmxvY2sgKm9iID0KICAgKGFwcGVuZGZpbGVfdHJhbnNwb3J0X29wdGlvbnNfYmxvY2sg
KikodGJsb2NrLT5vcHRpb25zX2Jsb2NrKTsKIHN0cnVjdCBzdGF0IHN0YXRidWY7Citjb25zdCB1
c2NoYXIgKiBkZWxpdmVyX2RpcjsKIHVzY2hhciAqZmRuYW1lID0gTlVMTDsKIHVzY2hhciAqZmls
ZW5hbWUgPSBOVUxMOwogdXNjaGFyICpoaXRjaG5hbWUgPSBOVUxMOwpAQCAtMTI4NiwxMiArMTI0
MCw2IEBACiAgICAgZXhwYW5kX3N0cmluZ19tZXNzYWdlKTsKICAgZ290byByZXRfcGFuaWM7CiAg
IH0KLWlmIChpc190YWludGVkKHBhdGgpKQotICB7Ci0gIGFkZHItPm1lc3NhZ2UgPSBzdHJpbmdf
c3ByaW50ZigiVGFpbnRlZCAnJXMnIChmaWxlIG9yIGRpcmVjdG9yeSAiCi0gICAgIm5hbWUgZm9y
ICVzIHRyYW5zcG9ydCkgbm90IHBlcm1pdHRlZCIsIHBhdGgsIHRibG9jay0+bmFtZSk7Ci0gIGdv
dG8gcmV0X3BhbmljOwotICB9CiAKIGlmIChwYXRoWzBdICE9ICcvJykKICAgewpAQCAtMTM2OCw2
ICsxMzE2LDEyIEBACiAgIHJldHVybiBGQUxTRTsKICAgfQogCisvKiBJZiBhbiBhYnNvbHV0ZSBw
YXRoIHdhcyBnaXZlbiBmb3IgY3JlYXRlX2ZpbGUgdGhlIGl0IG92ZXJyaWRlcyBkZWxpdmVyX2hv
bWUKKyhoZXJlKSBhbmQgZGUtdGFpbnRzIHRoZSBmaWxlbmFtZSAoYmVsb3csIGFmdGVyIGNoZWNr
X2NyZWF0aW9uKCkgKi8KKworZGVsaXZlcl9kaXIgPSAqb2ItPmNyZWF0ZV9maWxlX3N0cmluZyA9
PSAnLycKKyAgPyBvYi0+Y3JlYXRlX2ZpbGVfc3RyaW5nIDogZGVsaXZlcl9ob21lOworCiAvKiBI
YW5kbGUgdGhlIGNhc2Ugb2YgYSBmaWxlIG5hbWUuIElmIHRoZSBmaWxlIG5hbWUgaXMgL2Rldi9u
dWxsLCB3ZSBjYW4gc2F2ZQogb3Vyc2VsdmVzIHNvbWUgZWZmb3J0IGFuZCBqdXN0IGdpdmUgYSBz
dWNjZXNzIHJldHVybiByaWdodCBhd2F5LiAqLwogCkBAIC0xMzg0LDEwICsxMzM4LDIwIEBACiAg
ICAgfQogCiAgIC8qIFNldCB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSBvcGVuZWQsIGFuZCB0
aGUgZmlsZSB0byB3aGljaCB0aGUgZGF0YQotICBpcyB3cml0dGVuLCBhbmQgZmluZCBvdXQgaWYg
d2UgYXJlIHBlcm1pdHRlZCB0byBjcmVhdGUgYSBub24tZXhpc3RlbnQgZmlsZS4gKi8KKyAgaXMg
d3JpdHRlbiwgYW5kIGZpbmQgb3V0IGlmIHdlIGFyZSBwZXJtaXR0ZWQgdG8gY3JlYXRlIGEgbm9u
LWV4aXN0ZW50IGZpbGUuCisgIElmIHRoZSBjcmVhdGVfZmlsZSBvcHRpb24gaXMgYW4gYWJzb2x1
dGUgcGF0aCBhbmQgdGhlIGZpbGUgd2FzIHdpdGhpbiBpdCwKKyAgZGUtdGFpbnQuICBDaGFlY2sg
Zm9yIGEgdGFpbnRlZCBwYXRoLiAqLworCisgIGlmICggIChhbGxvd19jcmVhdGlvbl9oZXJlID0g
Y2hlY2tfY3JlYXRpb24ocGF0aCwgb2ItPmNyZWF0ZV9maWxlLCBkZWxpdmVyX2RpcikpCisgICAg
ICYmIG9iLT5jcmVhdGVfZmlsZSA9PSBjcmVhdGVfYmVsb3dob21lKQorICAgIGlmIChpc190YWlu
dGVkKHBhdGgpKQorICAgICAgeworICAgICAgREVCVUcoRF90cmFuc3BvcnQpIGRlYnVnX3ByaW50
ZigiZGUtdGFpbnRpbmcgcGF0aCAnJXMnXG4iLCBwYXRoKTsKKyAgICAgIHBhdGggPSBzdHJpbmdf
Y29weV90YWludChwYXRoLCBHRVRfVU5UQUlOVEVEKTsKKyAgICAgIH0KIAorICBpZiAoaXNfdGFp
bnRlZChwYXRoKSkgZ290byB0YWludGVkX3JldF9wYW5pYzsKICAgZGF0YW5hbWUgPSBmaWxlbmFt
ZSA9IHBhdGg7Ci0gIGFsbG93X2NyZWF0aW9uX2hlcmUgPSBjaGVja19jcmVhdGlvbihmaWxlbmFt
ZSwgb2ItPmNyZWF0ZV9maWxlKTsKIAogICAvKiBJZiBvYi0+Y3JlYXRlX2RpcmVjdG9yeSBpcyBz
ZXQsIGF0dGVtcHQgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcmllcyBpbgogICB3aGljaCB0aGlzIG1h
aWxib3ggbGl2ZXMsIGJ1dCBvbmx5IGlmIHdlIGFyZSBwZXJtaXR0ZWQgdG8gY3JlYXRlIHRoZSBm
aWxlCkBAIC0xMzk3LDE3ICsxMzYxLDE2IEBACiAgIGlmIChvYi0+Y3JlYXRlX2RpcmVjdG9yeSAm
JiBhbGxvd19jcmVhdGlvbl9oZXJlKQogICAgIHsKICAgICB1c2NoYXIgKnAgPSBVc3RycmNocihw
YXRoLCAnLycpOwotICAgICpwID0gJ1wwJzsKLSAgICBpZiAoIWRpcmVjdG9yeV9tYWtlKE5VTEws
IHBhdGgsIG9iLT5kaXJtb2RlLCBGQUxTRSkpCisgICAgcCA9IHN0cmluZ19jb3B5bihwYXRoLCBw
IC0gcGF0aCk7CisgICAgaWYgKCFkaXJlY3RvcnlfbWFrZShOVUxMLCBwLCBvYi0+ZGlybW9kZSwg
RkFMU0UpKQogICAgICAgewogICAgICAgYWRkci0+YmFzaWNfZXJybm8gPSBlcnJubzsKICAgICAg
IGFkZHItPm1lc3NhZ2UgPQogICAgICAgICBzdHJpbmdfc3ByaW50ZigiZmFpbGVkIHRvIGNyZWF0
ZSBkaXJlY3RvcmllcyBmb3IgJXM6ICVzIiwgcGF0aCwKLSAgICAgICAgICBzdHJlcnJvcihlcnJu
bykpOworICAgICAgICAgIGV4aW1fZXJyc3RyKGVycm5vKSk7CiAgICAgICBERUJVRyhEX3RyYW5z
cG9ydCkgZGVidWdfcHJpbnRmKCIlcyB0cmFuc3BvcnQ6ICVzXG4iLCB0YmxvY2stPm5hbWUsIHBh
dGgpOwogICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgfQotICAgICpwID0gJy8nOwogICAgIH0K
IAogICAvKiBJZiBmaWxlX2Zvcm1hdCBpcyBzZXQgd2UgbXVzdCBjaGVjayB0aGF0IGFueSBleGlz
dGluZyBmaWxlIG1hdGNoZXMgb25lIG9mCkBAIC0yMjA0LDEwICsyMTY3LDExIEBACiAKIGVsc2UK
ICAgewotICB1c2NoYXIgKmNoZWNrX3BhdGggPSBwYXRoOyAgICAvKiBEZWZhdWx0IHF1b3RhIGNo
ZWNrIHBhdGggKi8KLSAgY29uc3QgcGNyZSAqcmVnZXggPSBOVUxMOyAgICAgLyogUmVnZXggZm9y
IGZpbGUgc2l6ZSBmcm9tIGZpbGUgbmFtZSAqLworICB1c2NoYXIgKmNoZWNrX3BhdGg7CQkvKiBE
ZWZhdWx0IHF1b3RhIGNoZWNrIHBhdGggKi8KKyAgY29uc3QgcGNyZTJfY29kZSAqIHJlID0gTlVM
TDsgICAgIC8qIFJlZ2V4IGZvciBmaWxlIHNpemUgZnJvbSBmaWxlIG5hbWUgKi8KIAotICBpZiAo
IWNoZWNrX2NyZWF0aW9uKHN0cmluZ19zcHJpbnRmKCIlcy9hbnkiLCBwYXRoKSwgb2ItPmNyZWF0
ZV9maWxlKSkKKyAgaWYgKCFjaGVja19jcmVhdGlvbihzdHJpbmdfc3ByaW50ZigiJXMvYW55Iiwg
cGF0aCksCisJCSAgICAgIG9iLT5jcmVhdGVfZmlsZSwgZGVsaXZlcl9kaXIpKQogICAgIHsKICAg
ICBhZGRyLT5iYXNpY19lcnJubyA9IEVSUk5PX0JBRENSRUFURTsKICAgICBhZGRyLT5tZXNzYWdl
ID0gc3RyaW5nX3NwcmludGYoInRyaWVkIHRvIGNyZWF0ZSBmaWxlIGluICVzLCBidXQgIgpAQCAt
MjIxNSw2ICsyMTc5LDIwIEBACiAgICAgZ290byBSRVRVUk47CiAgICAgfQogCisgIC8qIElmIHRo
ZSBjcmVhdGVfZmlsZSBvcHRpb24gaXMgYW4gYWJzb2x1dGUgcGF0aCBhbmQgdGhlIGZpbGUgd2Fz
IHdpdGhpbgorICBpdCwgZGUtdGFpbnQuIE90aGVyd2lzZSBjaGVjayBmb3IgdGFpbnQuICovCisK
KyAgaWYgKGlzX3RhaW50ZWQocGF0aCkpCisgICAgaWYgKG9iLT5jcmVhdGVfZmlsZSA9PSBjcmVh
dGVfYmVsb3dob21lKQorICAgICAgeworICAgICAgREVCVUcoRF90cmFuc3BvcnQpIGRlYnVnX3By
aW50ZigiZGUtdGFpbnRpbmcgcGF0aCAnJXMnXG4iLCBwYXRoKTsKKyAgICAgIHBhdGggPSBzdHJp
bmdfY29weV90YWludChwYXRoLCBHRVRfVU5UQUlOVEVEKTsKKyAgICAgIH0KKyAgICBlbHNlCisg
ICAgICBnb3RvIHRhaW50ZWRfcmV0X3BhbmljOworCisgIGNoZWNrX3BhdGggPSBwYXRoOworCiAg
ICNpZmRlZiBTVVBQT1JUX01BSUxESVIKICAgLyogRm9yIGEgbWFpbGRpciBkZWxpdmVyeSwgZW5z
dXJlIHRoYXQgYWxsIHRoZSByZWxldmFudCBkaXJlY3RvcmllcyBleGlzdCwKICAgYW5kIGEgbWFp
bGRpcmZvbGRlciBmaWxlIGlmIG5lY2Vzc2FyeS4gKi8KQEAgLTIyMzMsMTggKzIyMTEsMjAgQEAK
IAogICBpZiAob2ItPnF1b3RhX3ZhbHVlID4gMCB8fCBUSFJFU0hPTERfQ0hFQ0sgfHwgb2ItPm1h
aWxkaXJfdXNlX3NpemVfZmlsZSkKICAgICB7Ci0gICAgY29uc3QgdXNjaGFyICplcnJvcjsKLSAg
ICBpbnQgb2Zmc2V0OworICAgIFBDUkUyX1NJWkUgb2Zmc2V0OworICAgIGludCBlcnI7CiAKICAg
ICAvKiBDb21waWxlIHRoZSByZWdleCBpZiB0aGVyZSBpcyBvbmUuICovCiAKICAgICBpZiAob2It
PnF1b3RhX3NpemVfcmVnZXgpCiAgICAgICB7Ci0gICAgICBpZiAoIShyZWdleCA9IHBjcmVfY29t
cGlsZShDUyBvYi0+cXVvdGFfc2l6ZV9yZWdleCwgUENSRV9DT1BULAotCSAgQ0NTUyAmZXJyb3Is
ICZvZmZzZXQsIE5VTEwpKSkKKyAgICAgIGlmICghKHJlID0gcGNyZTJfY29tcGlsZSgoUENSRTJf
U1BUUilvYi0+cXVvdGFfc2l6ZV9yZWdleCwKKwkJICBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsIFBD
UkVfQ09QVCwgJmVyciwgJm9mZnNldCwgcGNyZV9jbXBfY3R4KSkpCiAgICAgICAgIHsKKwl1c2No
YXIgZXJyYnVmWzEyOF07CisJcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoZXJyLCBlcnJidWYsIHNp
emVvZihlcnJidWYpKTsKICAgICAgICAgYWRkci0+bWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJh
cHBlbmRmaWxlOiByZWd1bGFyIGV4cHJlc3Npb24gIgotICAgICAgICAgICJlcnJvcjogJXMgYXQg
b2Zmc2V0ICVkIHdoaWxlIGNvbXBpbGluZyAlcyIsIGVycm9yLCBvZmZzZXQsCisgICAgICAgICAg
ImVycm9yOiAlcyBhdCBvZmZzZXQgJWxkIHdoaWxlIGNvbXBpbGluZyAlcyIsIGVycmJ1ZiwgKGxv
bmcpb2Zmc2V0LAogICAgICAgICAgIG9iLT5xdW90YV9zaXplX3JlZ2V4KTsKICAgICAgICAgcmV0
dXJuIEZBTFNFOwogICAgICAgICB9CkBAIC0yMjg3LDE0ICsyMjY3LDE0IEBACiAgICAgICAgIHsK
ICAgICAgICAgdXNjaGFyICpuZXdfY2hlY2tfcGF0aCA9IHN0cmluZ19jb3B5KGNoZWNrX3BhdGgp
OwogICAgICAgICB1c2NoYXIgKnNsYXNoID0gVXN0cnJjaHIobmV3X2NoZWNrX3BhdGgsICcvJyk7
Ci0gICAgICAgIGlmIChzbGFzaCAhPSBOVUxMKQorICAgICAgICBpZiAoc2xhc2gpCiAgICAgICAg
ICAgewotICAgICAgICAgIGlmIChzbGFzaFsxXSA9PSAwKQorICAgICAgICAgIGlmICghc2xhc2hb
MV0pCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAqc2xhc2ggPSAwOwogICAgICAgICAgICAg
c2xhc2ggPSBVc3RycmNocihuZXdfY2hlY2tfcGF0aCwgJy8nKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICBpZiAoc2xhc2ggIT0gTlVMTCkKKyAgICAgICAgICBpZiAoc2xhc2gpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAqc2xhc2ggPSAwOwogICAgICAgICAgICAgY2hlY2tfcGF0aCA9
IG5ld19jaGVja19wYXRoOwpAQCAtMjMxOSwxOSArMjI5OSwyMSBAQAogICAjaWZkZWYgU1VQUE9S
VF9NQUlMRElSCiAgIGlmIChvYi0+bWFpbGRpcl91c2Vfc2l6ZV9maWxlKQogICAgIHsKLSAgICBj
b25zdCBwY3JlICpkaXJfcmVnZXggPSBOVUxMOwotICAgIGNvbnN0IHVzY2hhciAqZXJyb3I7Ci0g
ICAgaW50IG9mZnNldDsKKyAgICBjb25zdCBwY3JlMl9jb2RlICogZGlyX3JlZ2V4ID0gTlVMTDsK
KyAgICBQQ1JFMl9TSVpFIG9mZnNldDsKKyAgICBpbnQgZXJyOwogCiAgICAgaWYgKG9iLT5tYWls
ZGlyX2Rpcl9yZWdleCkKICAgICAgIHsKICAgICAgIGludCBjaGVja19wYXRoX2xlbiA9IFVzdHJs
ZW4oY2hlY2tfcGF0aCk7CiAKLSAgICAgIGlmICghKGRpcl9yZWdleCA9IHBjcmVfY29tcGlsZShD
UyBvYi0+bWFpbGRpcl9kaXJfcmVnZXgsIFBDUkVfQ09QVCwKLQkgIENDU1MgJmVycm9yLCAmb2Zm
c2V0LCBOVUxMKSkpCisgICAgICBpZiAoIShkaXJfcmVnZXggPSBwY3JlMl9jb21waWxlKChQQ1JF
Ml9TUFRSKW9iLT5tYWlsZGlyX2Rpcl9yZWdleCwKKwkgICAgUENSRTJfWkVST19URVJNSU5BVEVE
LCBQQ1JFX0NPUFQsICZlcnIsICZvZmZzZXQsIHBjcmVfY21wX2N0eCkpKQogICAgICAgICB7CisJ
dXNjaGFyIGVycmJ1ZlsxMjhdOworCXBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKGVyciwgZXJyYnVm
LCBzaXplb2YoZXJyYnVmKSk7CiAgICAgICAgIGFkZHItPm1lc3NhZ2UgPSBzdHJpbmdfc3ByaW50
ZigiYXBwZW5kZmlsZTogcmVndWxhciBleHByZXNzaW9uICIKLSAgICAgICAgICAiZXJyb3I6ICVz
IGF0IG9mZnNldCAlZCB3aGlsZSBjb21waWxpbmcgJXMiLCBlcnJvciwgb2Zmc2V0LAorICAgICAg
ICAgICJlcnJvcjogJXMgYXQgb2Zmc2V0ICVsZCB3aGlsZSBjb21waWxpbmcgJXMiLCBlcnJidWYs
IChsb25nKW9mZnNldCwKICAgICAgICAgICBvYi0+bWFpbGRpcl9kaXJfcmVnZXgpOwogICAgICAg
ICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KQEAgLTIzNDksOCArMjMzMSw4IEBACiAgICAgICAg
IHsKICAgICAgICAgdXNjaGFyICpzID0gcGF0aCArIGNoZWNrX3BhdGhfbGVuOwogICAgICAgICB3
aGlsZSAoKnMgPT0gJy8nKSBzKys7Ci0gICAgICAgIHMgPSAoKnMgPT0gMCkgPyBVUyAibmV3IiA6
IHN0cmluZ19zcHJpbnRmKCIlcy9uZXciLCBzKTsKLSAgICAgICAgaWYgKHBjcmVfZXhlYyhkaXJf
cmVnZXgsIE5VTEwsIENTIHMsIFVzdHJsZW4ocyksIDAsIDAsIE5VTEwsIDApIDwgMCkKKyAgICAg
ICAgcyA9ICpzID8gc3RyaW5nX3NwcmludGYoIiVzL25ldyIsIHMpIDogVVMibmV3IjsKKwlpZiAo
IXJlZ2V4X21hdGNoKGRpcl9yZWdleCwgcywgLTEsIE5VTEwpKQogICAgICAgICAgIHsKICAgICAg
ICAgICBkaXNhYmxlX3F1b3RhID0gVFJVRTsKICAgICAgICAgICBERUJVRyhEX3RyYW5zcG9ydCkg
ZGVidWdfcHJpbnRmKCJkZWxpdmVyeSBkaXJlY3RvcnkgZG9lcyBub3QgbWF0Y2ggIgpAQCAtMjM3
MSw3ICsyMzUzLDcgQEAKICAgICAgIG9mZl90IHNpemU7CiAgICAgICBpbnQgZmlsZWNvdW50Owog
Ci0gICAgICBpZiAoKG1haWxkaXJzaXplX2ZkID0gbWFpbGRpcl9lbnN1cmVfc2l6ZWZpbGUoY2hl
Y2tfcGF0aCwgb2IsIHJlZ2V4LCBkaXJfcmVnZXgsCisgICAgICBpZiAoKG1haWxkaXJzaXplX2Zk
ID0gbWFpbGRpcl9lbnN1cmVfc2l6ZWZpbGUoY2hlY2tfcGF0aCwgb2IsICByZSwgZGlyX3JlZ2V4
LAogCSAgJnNpemUsICZmaWxlY291bnQpKSA9PSAtMSkKICAgICAgICAgewogICAgICAgICBhZGRy
LT5iYXNpY19lcnJubyA9IGVycm5vOwpAQCAtMjM5Niw3ICsyMzc4LDcgQEAKICAqICAgICh2b2lk
KXVubGluayhDUyBzdHJpbmdfc3ByaW50ZigiJXMvbWFpbGRpcnNpemUiLCBjaGVja19wYXRoKSk7
CiAgKiAgICBpZiAoVEhSRVNIT0xEX0NIRUNLKQogICogICAgICBtYWlsYm94X3NpemUgPSBtYWls
ZGlyX2NvbXB1dGVfc2l6ZShjaGVja19wYXRoLCAmbWFpbGJveF9maWxlY291bnQsICZvbGRfbGF0
ZXN0LAotICogICAgICAgIHJlZ2V4LCBkaXJfcmVnZXgsIEZBTFNFKTsKKyAqICAgICAgICAgcmUs
IGRpcl9yZWdleCwgRkFMU0UpOwogICogICAgfQogKi8KIApAQCAtMjQwOCwxNiArMjM5MCwxNyBA
QAogICBjb3VudC4gTm90ZSB0aGF0IG9iLT5xdW90YV9maWxlY291bnRfdmFsdWUgY2Fubm90IGJl
IHNldCB3aXRob3V0CiAgIG9iLT5xdW90YV92YWx1ZSBiZWluZyBzZXQuICovCiAKLSAgaWYgKCFk
aXNhYmxlX3F1b3RhICYmCi0gICAgICAob2ItPnF1b3RhX3ZhbHVlID4gMCB8fCBUSFJFU0hPTERf
Q0hFQ0spICYmCi0gICAgICAobWFpbGJveF9zaXplIDwgMCB8fAotICAgICAgICAobWFpbGJveF9m
aWxlY291bnQgPCAwICYmIG9iLT5xdW90YV9maWxlY291bnRfdmFsdWUgPiAwKSkpCisgIGlmICgg
ICFkaXNhYmxlX3F1b3RhCisgICAgICYmIChvYi0+cXVvdGFfdmFsdWUgPiAwIHx8IFRIUkVTSE9M
RF9DSEVDSykKKyAgICAgJiYgKCAgbWFpbGJveF9zaXplIDwgMAorCXx8IG1haWxib3hfZmlsZWNv
dW50IDwgMCAmJiBvYi0+cXVvdGFfZmlsZWNvdW50X3ZhbHVlID4gMAorICAgICkgICApCiAgICAg
ewogICAgIG9mZl90IHNpemU7CiAgICAgaW50IGZpbGVjb3VudCA9IDA7CiAgICAgREVCVUcoRF90
cmFuc3BvcnQpCiAgICAgICBkZWJ1Z19wcmludGYoInF1b3RhIGNoZWNrcyBvbiBkaXJlY3Rvcnkg
JXNcbiIsIGNoZWNrX3BhdGgpOwotICAgIHNpemUgPSBjaGVja19kaXJfc2l6ZShjaGVja19wYXRo
LCAmZmlsZWNvdW50LCByZWdleCk7CisgICAgc2l6ZSA9IGNoZWNrX2Rpcl9zaXplKGNoZWNrX3Bh
dGgsICZmaWxlY291bnQsICByZSk7CiAgICAgaWYgKG1haWxib3hfc2l6ZSA8IDApIG1haWxib3hf
c2l6ZSA9IHNpemU7CiAgICAgaWYgKG1haWxib3hfZmlsZWNvdW50IDwgMCkgbWFpbGJveF9maWxl
Y291bnQgPSBmaWxlY291bnQ7CiAgICAgfQpAQCAtMjQ4NCw3ICsyNDY3LDcgQEAKICAgICAgIHVz
Y2hhciAqYmFzZW5hbWU7CiAKICAgICAgICh2b2lkKWdldHRpbWVvZmRheSgmbXNnX3R2LCBOVUxM
KTsKLSAgICAgIGJhc2VuYW1lID0gc3RyaW5nX3NwcmludGYoVElNRV9UX0ZNVCAiLkglbHVQIiBQ
SURfVF9GTVQgIi4lcyIsCisgICAgICBiYXNlbmFtZSA9IHN0cmluZ19zcHJpbnRmKFRJTUVfVF9G
TVQgIi5NJWx1UCIgUElEX1RfRk1UICIuJXMiLAogICAgICAgIAltc2dfdHYudHZfc2VjLCBtc2df
dHYudHZfdXNlYywgZ2V0cGlkKCksIHByaW1hcnlfaG9zdG5hbWUpOwogCiAgICAgICBmaWxlbmFt
ZSA9IGRhdGFuYW1lID0gc3RyaW5nX3NwcmludGYoInRtcC8lcyIsIGJhc2VuYW1lKTsKQEAgLTI1
NTYsMTEgKzI1MzksMTIgQEAKICAgICBkYXRhbmFtZSA9IHN0cmluZ19zcHJpbnRmKCIlcy5tc2ci
LCBtYWlsc3RvcmVfYmFzZW5hbWUpOwogCiAgICAgZmQgPSBVb3BlbihmaWxlbmFtZSwgT19XUk9O
TFl8T19DUkVBVHxPX0VYQ0wsIG1vZGUpOwotICAgIGlmIChmZCA8IDAgJiYgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBmYWlsZWQgdG8gb3BlbiwgYW5kICovCi0gICAgICAgIChl
cnJubyAhPSBFTk9FTlQgfHwgICAgICAgICAgICAgICAgICAgICAgIC8qIGVpdGhlciBub3Qgbm9u
LWV4aXN0ICovCi0gICAgICAgICAhb2ItPmNyZWF0ZV9kaXJlY3RvcnkgfHwgICAgICAgICAgICAg
ICAgIC8qIG9yIG5vdCBhbGxvd2VkIHRvIG1ha2UgKi8KLSAgICAgICAgICFkaXJlY3RvcnlfbWFr
ZShOVUxMLCBwYXRoLCBvYi0+ZGlybW9kZSwgRkFMU0UpIHx8ICAvKiBvciBmYWlsZWQgdG8gY3Jl
YXRlIGRpciAqLwotICAgICAgICAgKGZkID0gVW9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZfE9fQ1JF
QVR8T19FWENMLCBtb2RlKSkgPCAwKSkgLyogb3IgdGhlbiBmYWlsZWQgdG8gb3BlbiAqLworICAg
IGlmICggIGZkIDwgMAkJCQkvKiBmYWlsZWQgdG8gb3BlbiwgYW5kICovCisgICAgICAgJiYgKCAg
IGVycm5vICE9IEVOT0VOVAkJCS8qIGVpdGhlciBub3Qgbm9uLWV4aXN0ICovCisJICB8fCAhb2It
PmNyZWF0ZV9kaXJlY3RvcnkJCS8qIG9yIG5vdCBhbGxvd2VkIHRvIG1ha2UgKi8KKwkgIHx8ICFk
aXJlY3RvcnlfbWFrZShOVUxMLCBwYXRoLCBvYi0+ZGlybW9kZSwgRkFMU0UpICAvKiBvciBmYWls
ZWQgdG8gY3JlYXRlIGRpciAqLworCSAgfHwgKGZkID0gVW9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZ
fE9fQ1JFQVR8T19FWENMLCBtb2RlKSkgPCAwIC8qIG9yIHRoZW4gZmFpbGVkIHRvIG9wZW4gKi8K
KyAgICAgICApICApCiAgICAgICB7CiAgICAgICBhZGRyLT5iYXNpY19lcnJubyA9IGVycm5vOwog
ICAgICAgYWRkci0+bWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJ3aGlsZSBjcmVhdGluZyBmaWxl
ICVzIiwgZmlsZW5hbWUpOwpAQCAtMjczOSw2ICsyNzIzLDE4IEBACiAKICAgfQogCitpZiAodmVy
aWZ5X21vZGUpCisgIHsKKyAgYWRkci0+YmFzaWNfZXJybm8gPSBlcnJubzsKKyAgYWRkci0+bWVz
c2FnZSA9IFVTIk92ZXIgcXVvdGEiOworICBhZGRyLT50cmFuc3BvcnRfcmV0dXJuID0geWllbGQ7
CisgIERFQlVHKERfdHJhbnNwb3J0KQorICAgIGRlYnVnX3ByaW50ZigiYXBwZW5kZmlsZSAodmVy
aWZ5KSB5aWVsZHMgJWQgd2l0aCBlcnJubz0lZCBtb3JlX2Vycm5vPSVkXG4iLAorICAgICAgeWll
bGQsIGFkZHItPmJhc2ljX2Vycm5vLCBhZGRyLT5tb3JlX2Vycm5vKTsKKworICBnb3RvIFJFVFVS
TjsKKyAgfQorCiAvKiBJZiB3ZSBhcmUgd3JpdGluZyBpbiBNQlggZm9ybWF0LCB3aGF0IHdlIGFj
dHVhbGx5IGRvIGlzIHRvIHdyaXRlIHRoZSBtZXNzYWdlCiB0byBhIHRlbXBvcmFyeSBmaWxlLCBh
bmQgdGhlbiBjb3B5IGl0IHRvIHRoZSByZWFsIGZpbGUgb25jZSB3ZSBrbm93IGl0cyBzaXplLgog
VGhpcyBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgd2F5IG9mIGdldHRpbmcgdGhlIGNvcnJl
Y3QgbGVuZ3RoIGluIHRoZQpAQCAtMzE5NSw3ICszMTkxLDcgQEAKICAgICAgICAgICB1c2NoYXIg
KmlwdHIgPSBleHBhbmRfc3RyaW5nKG5hbWV0YWcpOwogICAgICAgICAgIGlmIChpcHRyKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgdXNjaGFyICpldGFnID0gc3RvcmVfZ2V0KFVzdHJsZW4o
aXB0cikgKyAyLCBpc190YWludGVkKGlwdHIpKTsKKyAgICAgICAgICAgIHVzY2hhciAqZXRhZyA9
IHN0b3JlX2dldChVc3RybGVuKGlwdHIpICsgMiwgaXB0cik7CiAgICAgICAgICAgICB1c2NoYXIg
Km9wdHIgPSBldGFnOwogICAgICAgICAgICAgZm9yICggOyAqaXB0cjsgaXB0cisrKQogICAgICAg
ICAgICAgICBpZiAobWFjX2lzZ3JhcGgoKmlwdHIpICYmICppcHRyICE9ICcvJykKQEAgLTMzMDks
NiArMzMwNSw5IEBACiAKIHJldHVybiBGQUxTRTsKIAordGFpbnRlZF9yZXRfcGFuaWM6CisgIGFk
ZHItPm1lc3NhZ2UgPSBzdHJpbmdfc3ByaW50ZigiVGFpbnRlZCAnJXMnIChmaWxlIG9yIGRpcmVj
dG9yeSAiCisgICAgICAibmFtZSBmb3IgJXMgdHJhbnNwb3J0KSBub3QgcGVybWl0dGVkIiwgcGF0
aCwgdGJsb2NrLT5uYW1lKTsKIHJldF9wYW5pYzoKICAgYWRkci0+dHJhbnNwb3J0X3JldHVybiA9
IFBBTklDOwogICByZXR1cm4gRkFMU0U7CmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvdHJhbnNwb3J0
cy9hcHBlbmRmaWxlLmggZXhpbS9zcmMvdHJhbnNwb3J0cy9hcHBlbmRmaWxlLmgKLS0tIGV4aW0u
b3JpZy9zcmMvdHJhbnNwb3J0cy9hcHBlbmRmaWxlLmgJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAw
MDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL3RyYW5zcG9ydHMvYXBwZW5kZmlsZS5oCTIwMjItMDYt
MjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0zLDYgKzMsNyBAQAogKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogQ29weXJpZ2h0IChj
KSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLworLyogQ29weXJpZ2h0IChj
KSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIxICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZv
ciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBQcml2YXRlIHN0
cnVjdHVyZSBmb3IgdGhlIHByaXZhdGUgb3B0aW9ucy4gKi8KQEAgLTk0LDYgKzk1LDYgQEAKIAog
LyogRnVuY3Rpb24gdGhhdCBpcyBzaGFyZWQgd2l0aCB0Zl9tYWlsZGlyLmMgKi8KIAotZXh0ZXJu
IG9mZl90ICBjaGVja19kaXJfc2l6ZShjb25zdCB1c2NoYXIgKiwgaW50ICosIGNvbnN0IHBjcmUg
Kik7CitleHRlcm4gb2ZmX3QgIGNoZWNrX2Rpcl9zaXplKGNvbnN0IHVzY2hhciAqLCBpbnQgKiwg
Y29uc3QgcGNyZTJfY29kZSAqKTsKIAogLyogRW5kIG9mIHRyYW5zcG9ydHMvYXBwZW5kZmlsZS5o
ICovCmRpZmYgLXVyIGV4aW0ub3JpZy9zcmMvdHJhbnNwb3J0cy9hdXRvcmVwbHkuYyBleGltL3Ny
Yy90cmFuc3BvcnRzL2F1dG9yZXBseS5jCi0tLSBleGltLm9yaWcvc3JjL3RyYW5zcG9ydHMvYXV0
b3JlcGx5LmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3Jj
L3RyYW5zcG9ydHMvYXV0b3JlcGx5LmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAz
MDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3Bv
cnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0g
MjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0g
MjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCiAv
KiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0
aW9uLiAqLwogCiAKQEAgLTU3LDI3ICs1NywxMSBAQAogI2Vsc2UgICAvKiFNQUNST19QUkVERUYq
LwogCiAKLS8qIERlZmF1bHQgcHJpdmF0ZSBvcHRpb25zIGJsb2NrIGZvciB0aGUgYXV0b3JlcGx5
IHRyYW5zcG9ydC4gKi8KKy8qIERlZmF1bHQgcHJpdmF0ZSBvcHRpb25zIGJsb2NrIGZvciB0aGUg
YXV0b3JlcGx5IHRyYW5zcG9ydC4KK0FsbCBub24tbWVudGlvbmVkIGxlbWVudHMgemVyby9udWxs
L2ZhbHNlLiAqLwogCiBhdXRvcmVwbHlfdHJhbnNwb3J0X29wdGlvbnNfYmxvY2sgYXV0b3JlcGx5
X3RyYW5zcG9ydF9vcHRpb25fZGVmYXVsdHMgPSB7Ci0gIE5VTEwsICAgICAgICAgICAvKiBmcm9t
ICovCi0gIE5VTEwsICAgICAgICAgICAvKiByZXBseV90byAqLwotICBOVUxMLCAgICAgICAgICAg
LyogdG8gKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIGNjICovCi0gIE5VTEwsICAgICAgICAgICAv
KiBiY2MgKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIHN1YmplY3QgKi8KLSAgTlVMTCwgICAgICAg
ICAgIC8qIGhlYWRlcnMgKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIHRleHQgKi8KLSAgTlVMTCwg
ICAgICAgICAgIC8qIGZpbGUgKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIGxvZ2ZpbGUgKi8KLSAg
TlVMTCwgICAgICAgICAgIC8qIG9uY2Vsb2cgKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIG9uY2Vf
cmVwZWF0ICovCi0gIE5VTEwsICAgICAgICAgICAvKiBuZXZlcl9tYWlsICovCi0gIDA2MDAsICAg
ICAgICAgICAvKiBtb2RlICovCi0gIDAsICAgICAgICAgICAgICAvKiBvbmNlX2ZpbGVfc2l6ZSAq
LwotICBGQUxTRSwgICAgICAgICAgLyogZmlsZV9leHBhbmQgKi8KLSAgRkFMU0UsICAgICAgICAg
IC8qIGZpbGVfb3B0aW9uYWwgKi8KLSAgRkFMU0UgICAgICAgICAgIC8qIHJldHVybiBtZXNzYWdl
ICovCisgIC5tb2RlID0gMDYwMCwKIH07CiAKIApAQCAtMTc1LDE4ICsxNTksMjEgQEAKIGxpc3Qu
IEFueSB0aGF0IGFyZSBmb3VuZCBhcmUgcmVtb3ZlZC4KIAogQXJndW1lbnRzOgotICBsaXN0cHRy
ICAgICBwb2ludHMgdG8gdGhlIGxpc3Qgb2YgYWRkcmVzc2VzCisgIGxpc3QgICAgICAgIGxpc3Qg
b2YgYWRkcmVzc2VzIHRvIGJlIGNoZWNrZWQKICAgbmV2ZXJfbWFpbCAgYW4gYWRkcmVzcyBsaXN0
LCBhbHJlYWR5IGV4cGFuZGVkCiAKLVJldHVybnM6ICAgICAgbm90aGluZworUmV0dXJuczogICAg
ICBlZGl0ZWQgcmVwbGFjZW1lbnQgYWRkcmVzcyBsaXN0LCBvciBOVUxMLCBvciBvcmlnaW5hbAog
Ki8KIAotc3RhdGljIHZvaWQKLWNoZWNrX25ldmVyX21haWwodXNjaGFyICoqbGlzdHB0ciwgY29u
c3QgdXNjaGFyICpuZXZlcl9tYWlsKQorc3RhdGljIHVzY2hhciAqCitjaGVja19uZXZlcl9tYWls
KHVzY2hhciAqIGxpc3QsIGNvbnN0IHVzY2hhciAqIG5ldmVyX21haWwpCiB7Ci11c2NoYXIgKnMg
PSAqbGlzdHB0cjsKK3JtYXJrIHJlc2V0X3BvaW50ID0gc3RvcmVfbWFyaygpOwordXNjaGFyICog
bmV3bGlzdCA9IHN0cmluZ19jb3B5KGxpc3QpOwordXNjaGFyICogcyA9IG5ld2xpc3Q7CitCT09M
IGhpdCA9IEZBTFNFOwogCi13aGlsZSAoKnMgIT0gMCkKK3doaWxlICgqcykKICAgewogICB1c2No
YXIgKmVycm9yLCAqbmV4dDsKICAgdXNjaGFyICplID0gcGFyc2VfZmluZF9hZGRyZXNzX2VuZChz
LCBGQUxTRSk7CkBAIC0yMjAsNiArMjA3LDcgQEAKICAgICB7CiAgICAgREVCVUcoRF90cmFuc3Bv
cnQpCiAgICAgICBkZWJ1Z19wcmludGYoImRpc2NhcmRpbmcgcmVjaXBpZW50ICVzIChtYXRjaGVk
IG5ldmVyX21haWwpXG4iLCBuZXh0KTsKKyAgICBoaXQgPSBUUlVFOwogICAgIGlmICh0ZXJtaW5h
dG9yID09ICcsJykgZSsrOwogICAgIG1lbW1vdmUocywgZSwgVXN0cmxlbihlKSArIDEpOwogICAg
IH0KQEAgLTIzMCwxOCArMjE4LDMxIEBACiAgICAgfQogICB9CiAKKy8qIElmIG5vIGFkZHJlc3Nl
cyB3ZXJlIHJlbW92ZWQsIHJldHJpZXZlIHRoZSBtZW1vcnkgdXNlZCBhbmQgcmV0dXJuCit0aGUg
b3JpZ2luYWwuICovCisKK2lmICghaGl0KQorICB7CisgIHN0b3JlX3Jlc2V0KHJlc2V0X3BvaW50
KTsKKyAgcmV0dXJuIGxpc3Q7CisgIH0KKwogLyogQ2hlY2sgdG8gc2VlIGlmIHdlIHJlbW92ZWQg
dGhlIGxhc3QgYWRkcmVzcywgbGVhdmluZyBhIHRlcm1pbmF0aW5nIGNvbW1hCiB0aGF0IG5lZWRz
IHRvIGJlIHJlbW92ZWQgKi8KIAotcyA9ICpsaXN0cHRyICsgVXN0cmxlbigqbGlzdHB0cik7Ci13
aGlsZSAocyA+ICpsaXN0cHRyICYmIChpc3NwYWNlKHNbLTFdKSB8fCBzWy0xXSA9PSAnLCcpKSBz
LS07CitzID0gbmV3bGlzdCArIFVzdHJsZW4obmV3bGlzdCk7Cit3aGlsZSAocyA+IG5ld2xpc3Qg
JiYgKGlzc3BhY2Uoc1stMV0pIHx8IHNbLTFdID09ICcsJykpIHMtLTsKICpzID0gMDsKIAotLyog
Q2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFueSBhZGRyZXNzZXMgbGVmdDsgaWYgbm90LCBzZXQgTlVM
TCAqLworLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFueSBhZGRyZXNzZXMgbGVmdDsgaWYgbm90
LCByZXR1cm4gTlVMTCAqLworCitzID0gbmV3bGlzdDsKK3doaWxlIChzICYmIGlzc3BhY2UoKnMp
KSBzKys7CitpZiAoKnMpCisgIHJldHVybiBuZXdsaXN0OwogCi1zID0gKmxpc3RwdHI7Ci13aGls
ZSAocyAhPSAwICYmIGlzc3BhY2UoKnMpKSBzKys7Ci1pZiAoKnMgPT0gMCkgKmxpc3RwdHIgPSBO
VUxMOworc3RvcmVfcmVzZXQocmVzZXRfcG9pbnQpOworcmV0dXJuIE5VTEw7CiB9CiAKIApAQCAt
MjYzLDcgKzI2NCw3IEBACiBpbnQgY2FjaGVfZmQgPSAtMTsKIGludCBjYWNoZV9zaXplID0gMDsK
IGludCBhZGRfc2l6ZSA9IDA7Ci1FWElNX0RCICpkYm1fZmlsZSA9IE5VTEw7CitFWElNX0RCICog
ZGJtX2ZpbGUgPSBOVUxMOwogQk9PTCBmaWxlX2V4cGFuZCwgcmV0dXJuX21lc3NhZ2U7CiB1c2No
YXIgKmZyb20sICpyZXBseV90bywgKnRvLCAqY2MsICpiY2MsICpzdWJqZWN0LCAqaGVhZGVycywg
KnRleHQsICpmaWxlOwogdXNjaGFyICpsb2dmaWxlLCAqb25jZWxvZzsKQEAgLTM0NSwxNiArMzQ2
LDEzIEBACiAgICAgcmV0dXJuIEZBTFNFOwogCiAgIGlmIChvbmNlcmVwZWF0KQotICAgIHsKLSAg
ICBvbmNlX3JlcGVhdF9zZWMgPSByZWFkY29uZl9yZWFkdGltZShvbmNlcmVwZWF0LCAwLCBGQUxT
RSk7Ci0gICAgaWYgKG9uY2VfcmVwZWF0X3NlYyA8IDApCisgICAgaWYgKChvbmNlX3JlcGVhdF9z
ZWMgPSByZWFkY29uZl9yZWFkdGltZShvbmNlcmVwZWF0LCAwLCBGQUxTRSkpIDwgMCkKICAgICAg
IHsKICAgICAgIGFkZHItPnRyYW5zcG9ydF9yZXR1cm4gPSBGQUlMOwogICAgICAgYWRkci0+bWVz
c2FnZSA9IHN0cmluZ19zcHJpbnRmKCJJbnZhbGlkIHRpbWUgdmFsdWUgXCIlc1wiIGZvciAiCiAg
ICAgICAgICJcIm9uY2VfcmVwZWF0XCIgaW4gJXMgdHJhbnNwb3J0Iiwgb25jZXJlcGVhdCwgdGJs
b2NrLT5uYW1lKTsKICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgIH0KLSAgICB9CiAgIH0KIAog
LyogSWYgdGhlIG5ldmVyX21haWwgb3B0aW9uIGlzIHNldCwgd2UgaGF2ZSB0byBzY2FuIGFsbCB0
aGUgcmVjaXBpZW50cyBhbmQKQEAgLTM3Miw5ICszNzAsOSBAQAogICAgIHJldHVybiBGQUxTRTsK
ICAgICB9CiAKLSAgaWYgKHRvKSBjaGVja19uZXZlcl9tYWlsKCZ0bywgbmV2ZXJfbWFpbCk7Ci0g
IGlmIChjYykgY2hlY2tfbmV2ZXJfbWFpbCgmY2MsIG5ldmVyX21haWwpOwotICBpZiAoYmNjKSBj
aGVja19uZXZlcl9tYWlsKCZiY2MsIG5ldmVyX21haWwpOworICBpZiAodG8pIHRvID0gY2hlY2tf
bmV2ZXJfbWFpbCh0bywgbmV2ZXJfbWFpbCk7CisgIGlmIChjYykgY2MgPSBjaGVja19uZXZlcl9t
YWlsKGNjLCBuZXZlcl9tYWlsKTsKKyAgaWYgKGJjYykgYmNjID0gY2hlY2tfbmV2ZXJfbWFpbChi
Y2MsIG5ldmVyX21haWwpOwogCiAgIGlmICghdG8gJiYgIWNjICYmICFiY2MpCiAgICAgewpAQCAt
NDM5LDcgKzQzNyw3IEBACiAKICAgICBjYWNoZV9zaXplID0gc3RhdGJ1Zi5zdF9zaXplOwogICAg
IGFkZF9zaXplID0gc2l6ZW9mKHRpbWVfdCkgKyBVc3RybGVuKHRvKSArIDE7Ci0gICAgY2FjaGVf
YnVmZiA9IHN0b3JlX2dldChjYWNoZV9zaXplICsgYWRkX3NpemUsIGlzX3RhaW50ZWQob25jZWxv
ZykpOworICAgIGNhY2hlX2J1ZmYgPSBzdG9yZV9nZXQoY2FjaGVfc2l6ZSArIGFkZF9zaXplLCBv
bmNlbG9nKTsKIAogICAgIGlmIChyZWFkKGNhY2hlX2ZkLCBjYWNoZV9idWZmLCBjYWNoZV9zaXpl
KSAhPSBjYWNoZV9zaXplKQogICAgICAgewpAQCAtNDc4LDggKzQ3Niw3IEBACiAKICAgICBkaXJu
YW1lID0gKHMgPSBVc3RycmNocihvbmNlbG9nLCAnLycpKQogICAgICAgPyBzdHJpbmdfY29weW4o
b25jZWxvZywgcyAtIG9uY2Vsb2cpIDogTlVMTDsKLSAgICBFWElNX0RCT1BFTihvbmNlbG9nLCBk
aXJuYW1lLCBPX1JEV1J8T19DUkVBVCwgb2ItPm1vZGUsICZkYm1fZmlsZSk7Ci0gICAgaWYgKCFk
Ym1fZmlsZSkKKyAgICBpZiAoIShkYm1fZmlsZSA9IGV4aW1fZGJvcGVuKG9uY2Vsb2csIGRpcm5h
bWUsIE9fUkRXUnxPX0NSRUFULCBvYi0+bW9kZSkpKQogICAgICAgewogICAgICAgYWRkci0+dHJh
bnNwb3J0X3JldHVybiA9IERFRkVSOwogICAgICAgYWRkci0+YmFzaWNfZXJybm8gPSBlcnJubzsK
QEAgLTQ4OSwxMiArNDg2LDEyIEBACiAgICAgICBnb3RvIEVORF9PRkY7CiAgICAgICB9CiAKLSAg
ICBFWElNX0RBVFVNX0lOSVQoa2V5X2RhdHVtKTsgICAgICAgIC8qIFNvbWUgREJNIGxpYnJhcmll
cyBuZWVkIGRhdHVtcyAqLwotICAgIEVYSU1fREFUVU1fSU5JVChyZXN1bHRfZGF0dW0pOyAgICAg
LyogdG8gYmUgY2xlYXJlZCAqLwotICAgIEVYSU1fREFUVU1fREFUQShrZXlfZGF0dW0pID0gQ1Mg
dG87Ci0gICAgRVhJTV9EQVRVTV9TSVpFKGtleV9kYXR1bSkgPSBVc3RybGVuKHRvKSArIDE7Cisg
ICAgZXhpbV9kYXR1bV9pbml0KCZrZXlfZGF0dW0pOyAgICAgICAgLyogU29tZSBEQk0gbGlicmFy
aWVzIG5lZWQgZGF0dW1zICovCisgICAgZXhpbV9kYXR1bV9pbml0KCZyZXN1bHRfZGF0dW0pOyAg
ICAgLyogdG8gYmUgY2xlYXJlZCAqLworICAgIGV4aW1fZGF0dW1fZGF0YV9zZXQoJmtleV9kYXR1
bSwgKHZvaWQgKikgdG8pOworICAgIGV4aW1fZGF0dW1fc2l6ZV9zZXQoJmtleV9kYXR1bSwgVXN0
cmxlbih0bykgKyAxKTsKIAotICAgIGlmIChFWElNX0RCR0VUKGRibV9maWxlLCBrZXlfZGF0dW0s
IHJlc3VsdF9kYXR1bSkpCisgICAgaWYgKGV4aW1fZGJnZXQoZGJtX2ZpbGUsICZrZXlfZGF0dW0s
ICZyZXN1bHRfZGF0dW0pKQogICAgICAgewogICAgICAgLyogSWYgdGhlIGRhdHVtIHNpemUgaXMg
dGhhdCBvZiBhIGJpbmFyeSB0aW1lLCB3ZSBhcmUgaW4gdGhlIG5ldyB3b3JsZAogICAgICAgd2hl
cmUgbWVzc2FnZXMgYXJlIHNlbnQgcGVyaW9kaWNhbGx5LiBPdGhlcndpc2UgdGhlIGZpbGUgaXMg
YW4gb2xkIG9uZSwKQEAgLTUwMyw4ICs1MDAsOCBAQAogICAgICAgaW50cm9kdWNlZCBhdCBFeGlt
IDMuMDAuIEluIGEgY291cGxlIG9mIHllYXJzJyB0aW1lIHRoZSB0ZXN0IG9uIHRoZSBzaXplCiAg
ICAgICBjYW4gYmUgYWJvbGlzaGVkLiAqLwogCi0gICAgICBpZiAoRVhJTV9EQVRVTV9TSVpFKHJl
c3VsdF9kYXR1bSkgPT0gc2l6ZW9mKHRpbWVfdCkpCi0gICAgICAgIG1lbWNweSgmdGhlbiwgRVhJ
TV9EQVRVTV9EQVRBKHJlc3VsdF9kYXR1bSksIHNpemVvZih0aW1lX3QpKTsKKyAgICAgIGlmIChl
eGltX2RhdHVtX3NpemVfZ2V0KCZyZXN1bHRfZGF0dW0pID09IHNpemVvZih0aW1lX3QpKQorICAg
ICAgICBtZW1jcHkoJnRoZW4sIGV4aW1fZGF0dW1fZGF0YV9nZXQoJnJlc3VsdF9kYXR1bSksIHNp
emVvZih0aW1lX3QpKTsKICAgICAgIGVsc2UKICAgICAgICAgdGhlbiA9IG5vdzsKICAgICAgIH0K
QEAgLTU3Nyw3ICs1NzQsNyBAQAogICBhZGRyLT5tZXNzYWdlID0gc3RyaW5nX3NwcmludGYoIkZh
aWxlZCB0byBjcmVhdGUgY2hpbGQgcHJvY2VzcyB0byBzZW5kICIKICAgICAibWVzc2FnZSBmcm9t
ICVzIHRyYW5zcG9ydDogJXMiLCB0YmxvY2stPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAgIERF
QlVHKERfdHJhbnNwb3J0KSBkZWJ1Z19wcmludGYoIiVzXG4iLCBhZGRyLT5tZXNzYWdlKTsKLSAg
aWYgKGRibV9maWxlKSBFWElNX0RCQ0xPU0UoZGJtX2ZpbGUpOworICBpZiAoZGJtX2ZpbGUpIGV4
aW1fZGJjbG9zZShkYm1fZmlsZSk7CiAgIHJldHVybiBGQUxTRTsKICAgfQogCkBAIC02NDksMTIg
KzY0NiwxMSBAQAogCiBpZiAocmV0dXJuX21lc3NhZ2UpCiAgIHsKLSAgdXNjaGFyICpydWJyaWMg
PSAodGJsb2NrLT5oZWFkZXJzX29ubHkpPwotICAgIFVTIi0tLS0tLSBUaGlzIGlzIGEgY29weSBv
ZiB0aGUgbWVzc2FnZSdzIGhlYWRlciBsaW5lcy5cbiIKLSAgICA6ICh0YmxvY2stPmJvZHlfb25s
eSk/Ci0gICAgVVMiLS0tLS0tIFRoaXMgaXMgYSBjb3B5IG9mIHRoZSBib2R5IG9mIHRoZSBtZXNz
YWdlLCB3aXRob3V0IHRoZSBoZWFkZXJzLlxuIgotICAgIDoKLSAgICBVUyItLS0tLS0gVGhpcyBp
cyBhIGNvcHkgb2YgdGhlIG1lc3NhZ2UsIGluY2x1ZGluZyBhbGwgdGhlIGhlYWRlcnMuXG4iOwor
ICB1c2NoYXIgKnJ1YnJpYyA9IHRibG9jay0+aGVhZGVyc19vbmx5CisgICAgPyBVUyItLS0tLS0g
VGhpcyBpcyBhIGNvcHkgb2YgdGhlIG1lc3NhZ2UncyBoZWFkZXIgbGluZXMuXG4iCisgICAgOiB0
YmxvY2stPmJvZHlfb25seQorICAgID8gVVMiLS0tLS0tIFRoaXMgaXMgYSBjb3B5IG9mIHRoZSBi
b2R5IG9mIHRoZSBtZXNzYWdlLCB3aXRob3V0IHRoZSBoZWFkZXJzLlxuIgorICAgIDogVVMiLS0t
LS0tIFRoaXMgaXMgYSBjb3B5IG9mIHRoZSBtZXNzYWdlLCBpbmNsdWRpbmcgYWxsIHRoZSBoZWFk
ZXJzLlxuIjsKICAgdHJhbnNwb3J0X2N0eCB0Y3R4ID0gewogICAgIC51ID0gey5mZCA9IGZpbGVu
byhmcCl9LAogICAgIC50YmxvY2sgPSB0YmxvY2ssCkBAIC03MzksMTggKzczNSwxOCBAQAogZWxz
ZSBpZiAoZGJtX2ZpbGUpCiAgIHsKICAgRVhJTV9EQVRVTSBrZXlfZGF0dW0sIHZhbHVlX2RhdHVt
OwotICBFWElNX0RBVFVNX0lOSVQoa2V5X2RhdHVtKTsgICAgICAgICAgLyogU29tZSBEQk0gbGli
cmFyaWVzIG5lZWQgdG8gaGF2ZSAqLwotICBFWElNX0RBVFVNX0lOSVQodmFsdWVfZGF0dW0pOyAg
ICAgICAgLyogY2xlYXJlZCBkYXR1bXMuICovCi0gIEVYSU1fREFUVU1fREFUQShrZXlfZGF0dW0p
ID0gQ1MgdG87Ci0gIEVYSU1fREFUVU1fU0laRShrZXlfZGF0dW0pID0gVXN0cmxlbih0bykgKyAx
OworICBleGltX2RhdHVtX2luaXQoJmtleV9kYXR1bSk7ICAgICAgICAgIC8qIFNvbWUgREJNIGxp
YnJhcmllcyBuZWVkIHRvIGhhdmUgKi8KKyAgZXhpbV9kYXR1bV9pbml0KCZ2YWx1ZV9kYXR1bSk7
ICAgICAgICAvKiBjbGVhcmVkIGRhdHVtcy4gKi8KKyAgZXhpbV9kYXR1bV9kYXRhX3NldCgma2V5
X2RhdHVtLCB0byk7CisgIGV4aW1fZGF0dW1fc2l6ZV9zZXQoJmtleV9kYXR1bSwgVXN0cmxlbih0
bykgKyAxKTsKIAogICAvKiBNYW55IE9TIGRlZmluZSB0aGUgZGF0dW0gdmFsdWUsIHNlbnNpYmx5
LCBhcyBhIHZvaWQgKi4gSG93ZXZlciwgdGhlcmUKICAgYXJlIHNvbWUgd2hpY2ggc3RpbGwgaGF2
ZSBjaGFyICouIEJ5IGNhc3RpbmcgdGhpcyBhZGRyZXNzIHRvIGEgY2hhciAqIHdlCiAgIGNhbiBh
dm9pZCB3YXJuaW5nIG1lc3NhZ2VzIGZyb20gdGhlIGNoYXIgKiBzeXN0ZW1zLiAqLwogCi0gIEVY
SU1fREFUVU1fREFUQSh2YWx1ZV9kYXR1bSkgPSBDUyAoJm5vdyk7Ci0gIEVYSU1fREFUVU1fU0la
RSh2YWx1ZV9kYXR1bSkgPSAoaW50KXNpemVvZih0aW1lX3QpOwotICBFWElNX0RCUFVUKGRibV9m
aWxlLCBrZXlfZGF0dW0sIHZhbHVlX2RhdHVtKTsKKyAgZXhpbV9kYXR1bV9kYXRhX3NldCgmdmFs
dWVfZGF0dW0sICZub3cpOworICBleGltX2RhdHVtX3NpemVfc2V0KCZ2YWx1ZV9kYXR1bSwgc2l6
ZW9mKHRpbWVfdCkpOworICBleGltX2RicHV0KGRibV9maWxlLCAma2V5X2RhdHVtLCAmdmFsdWVf
ZGF0dW0pOwogICB9CiAKIC8qIElmIHNlbmRpbmcgZmFpbGVkLCBkZWZlciB0byB0cnkgYWdhaW4g
LSBidXQgaWYgb25jZSBpcyBzZXQgdGhlIG5leHQKQEAgLTgxMyw3ICs4MDksNyBAQAogICB9CiAK
IEVORF9PRkY6Ci1pZiAoZGJtX2ZpbGUpIEVYSU1fREJDTE9TRShkYm1fZmlsZSk7CitpZiAoZGJt
X2ZpbGUpIGV4aW1fZGJjbG9zZShkYm1fZmlsZSk7CiBpZiAoY2FjaGVfZmQgPiAwKSAodm9pZClj
bG9zZShjYWNoZV9mZCk7CiAKIERFQlVHKERfdHJhbnNwb3J0KSBkZWJ1Z19wcmludGYoIiVzIHRy
YW5zcG9ydCBzdWNjZWVkZWRcbiIsIHRibG9jay0+bmFtZSk7CmRpZmYgLXVyIGV4aW0ub3JpZy9z
cmMvdHJhbnNwb3J0cy9sbXRwLmMgZXhpbS9zcmMvdHJhbnNwb3J0cy9sbXRwLmMKLS0tIGV4aW0u
b3JpZy9zcmMvdHJhbnNwb3J0cy9sbXRwLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAg
KzAzMDAKKysrIGV4aW0vc3JjL3RyYW5zcG9ydHMvbG10cC5jCTIwMjItMDYtMjMgMTY6NDE6MTAu
MDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0
IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRh
aW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1i
cmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5l
cnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2Ug
YW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogCkBAIC00ODksOCArNDg5LDggQEAKICAgewogICBERUJV
RyhEX3RyYW5zcG9ydCkgZGVidWdfcHJpbnRmKCJ1c2luZyBjb21tYW5kICVzXG4iLCBvYi0+Y21k
KTsKICAgc3ByaW50ZihDUyBidWZmZXIsICIlLjUwcyB0cmFuc3BvcnQiLCB0YmxvY2stPm5hbWUp
OwotICBpZiAoIXRyYW5zcG9ydF9zZXRfdXBfY29tbWFuZCgmYXJndiwgb2ItPmNtZCwgVFJVRSwg
UEFOSUMsIGFkZHJsaXN0LCBidWZmZXIsCi0gICAgICAgTlVMTCkpCisgIGlmICghdHJhbnNwb3J0
X3NldF91cF9jb21tYW5kKCZhcmd2LCBvYi0+Y21kLCBUUlVFLCBQQU5JQywgYWRkcmxpc3QsIEZB
TFNFLAorCWJ1ZmZlciwgTlVMTCkpCiAgICAgcmV0dXJuIEZBTFNFOwogCiAgIC8qIElmIHRoZSAt
TiBvcHRpb24gaXMgc2V0LCBjYW4ndCBkbyBhbnkgbW9yZS4gUHJlc3VtZSBhbGwgaGFzIGdvbmUg
d2VsbC4gKi8KQEAgLTU1OCwyMyArNTU4LDIzIEBACiAvKiBGaXJzdCB0aGluZyBpcyB0byB3YWl0
IGZvciBhbiBpbml0aWFsIGdyZWV0aW5nLiAqLwogCiBVc3RyY3B5KGJpZ19idWZmZXIsIFVTImlu
aXRpYWwgY29ubmVjdGlvbiIpOwotaWYgKCFsbXRwX3JlYWRfcmVzcG9uc2Uob3V0LCBidWZmZXIs
IHNpemVvZihidWZmZXIpLCAnMicsCi0gIHRpbWVvdXQpKSBnb3RvIFJFU1BPTlNFX0ZBSUxFRDsK
K2lmICghbG10cF9yZWFkX3Jlc3BvbnNlKG91dCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgJzIn
LCB0aW1lb3V0KSkKKyAgZ290byBSRVNQT05TRV9GQUlMRUQ7CiAKIC8qIE5leHQsIHdlIHNlbmQg
YSBMSExPIGNvbW1hbmQsIGFuZCBleHBlY3QgYSBwb3NpdGl2ZSByZXNwb25zZSAqLwogCi1pZiAo
IWxtdHBfd3JpdGVfY29tbWFuZChmZF9pbiwgIiVzICVzXHJcbiIsICJMSExPIiwKLSAgcHJpbWFy
eV9ob3N0bmFtZSkpIGdvdG8gV1JJVEVfRkFJTEVEOworaWYgKCFsbXRwX3dyaXRlX2NvbW1hbmQo
ZmRfaW4sICIlcyAlc1xyXG4iLCAiTEhMTyIsIHByaW1hcnlfaG9zdG5hbWUpKQorICBnb3RvIFdS
SVRFX0ZBSUxFRDsKIAotaWYgKCFsbXRwX3JlYWRfcmVzcG9uc2Uob3V0LCBidWZmZXIsIHNpemVv
ZihidWZmZXIpLCAnMicsCi0gICAgIHRpbWVvdXQpKSBnb3RvIFJFU1BPTlNFX0ZBSUxFRDsKK2lm
ICghbG10cF9yZWFkX3Jlc3BvbnNlKG91dCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgJzInLCB0
aW1lb3V0KSkKKyAgZ290byBSRVNQT05TRV9GQUlMRUQ7CiAKIC8qIElmIHRoZSBpZ25vcmVfcXVv
dGEgb3B0aW9uIGlzIHNldCwgbm90ZSB3aGV0aGVyIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgdGhlCiBJ
R05PUkVRVU9UQSBvcHRpb24sIGFuZCBpZiBzbywgc2V0IGFuIGFwcHJvcHJpYXRlIGFkZGl0aW9u
IGZvciBSQ1BULiAqLwogCiBpZiAob2ItPmlnbm9yZV9xdW90YSkKLSAgaWdxdW90c3RyID0gKHBj
cmVfZXhlYyhyZWdleF9JR05PUkVRVU9UQSwgTlVMTCwgQ1MgYnVmZmVyLAotICAgIFVzdHJsZW4o
Q1MgYnVmZmVyKSwgMCwgUENSRV9FT1BULCBOVUxMLCAwKSA+PSAwKT8gVVMiIElHTk9SRVFVT1RB
IiA6IFVTIiI7CisgIGlncXVvdHN0ciA9IHJlZ2V4X21hdGNoKHJlZ2V4X0lHTk9SRVFVT1RBLCBi
dWZmZXIsIC0xLCBOVUxMKQorICAgID8gVVMiIElHTk9SRVFVT1RBIiA6IFVTIiI7CiAKIC8qIE5v
dyB0aGUgZW52ZWxvcGUgc2VuZGVyICovCiAKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy90cmFuc3Bv
cnRzL3BpcGUuYyBleGltL3NyYy90cmFuc3BvcnRzL3BpcGUuYwotLS0gZXhpbS5vcmlnL3NyYy90
cmFuc3BvcnRzL3BpcGUuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysg
ZXhpbS9zcmMvdHJhbnNwb3J0cy9waXBlLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAg
KzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFu
c3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBtYWludGFpbmVycyAyMDIw
IC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1
IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBtYWludGFpbmVycyAyMDIwICov
CiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJp
YnV0aW9uLiAqLwogCiAKQEAgLTg4LDMxICs4OCwxMyBAQAogLyogRGVmYXVsdCBwcml2YXRlIG9w
dGlvbnMgYmxvY2sgZm9yIHRoZSBwaXBlIHRyYW5zcG9ydC4gKi8KIAogcGlwZV90cmFuc3BvcnRf
b3B0aW9uc19ibG9jayBwaXBlX3RyYW5zcG9ydF9vcHRpb25fZGVmYXVsdHMgPSB7Ci0gIE5VTEws
ICAgICAgICAgICAvKiBjbWQgKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIGFsbG93X2NvbW1hbmRz
ICovCi0gIE5VTEwsICAgICAgICAgICAvKiBlbnZpcm9ubWVudCAqLwotICBVUyIvYmluOi91c3Iv
YmluIiwgIC8qIHBhdGggKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIG1lc3NhZ2VfcHJlZml4IChy
ZXNldCBpbiBpbml0IGlmIG5vdCBic210cCkgKi8KLSAgTlVMTCwgICAgICAgICAgIC8qIG1lc3Nh
Z2Vfc3VmZml4IChkaXR0bykgKi8KLSAgVVMgbWFjX2V4cGFuZGVkX3N0cmluZyhFWF9URU1QRkFJ
TCkgIjoiICAgIC8qIHRlbXBfZXJyb3JzICovCi0gICAgIG1hY19leHBhbmRlZF9zdHJpbmcoRVhf
Q0FOVENSRUFUKSwKLSAgTlVMTCwgICAgICAgICAgIC8qIGNoZWNrX3N0cmluZyAqLwotICBOVUxM
LCAgICAgICAgICAgLyogZXNjYXBlX3N0cmluZyAqLwotICAwMjIsICAgICAgICAgICAgLyogdW1h
c2sgKi8KLSAgMjA0ODAsICAgICAgICAgIC8qIG1heF9vdXRwdXQgKi8KLSAgNjAqNjAsICAgICAg
ICAgIC8qIHRpbWVvdXQgKi8KLSAgMCwgICAgICAgICAgICAgIC8qIG9wdGlvbnMgKi8KLSAgRkFM
U0UsICAgICAgICAgIC8qIGZvcmNlX2NvbW1hbmQgKi8KLSAgRkFMU0UsICAgICAgICAgIC8qIGZy
ZWV6ZV9leGVjX2ZhaWwgKi8KLSAgRkFMU0UsICAgICAgICAgIC8qIGZyZWV6ZV9zaWduYWwgKi8K
LSAgRkFMU0UsICAgICAgICAgIC8qIGlnbm9yZV9zdGF0dXMgKi8KLSAgRkFMU0UsICAgICAgICAg
IC8qIHBlcm1pdF9jb3JlZHVtcCAqLwotICBGQUxTRSwgICAgICAgICAgLyogcmVzdHJpY3RfdG9f
cGF0aCAqLwotICBGQUxTRSwgICAgICAgICAgLyogdGltZW91dF9kZWZlciAqLwotICBGQUxTRSwg
ICAgICAgICAgLyogdXNlX3NoZWxsICovCi0gIEZBTFNFLCAgICAgICAgICAvKiB1c2VfYnNtdHAg
Ki8KLSAgRkFMU0UsICAgICAgICAgIC8qIHVzZV9jbGFzc3Jlc291cmNlcyAqLwotICBGQUxTRSAg
ICAgICAgICAgLyogdXNlX2NybGYgKi8KKyAgLnBhdGggPQlVUyIvYmluOi91c3IvYmluIiwKKyAg
LnRlbXBfZXJyb3JzID0gVVMgbWFjX2V4cGFuZGVkX3N0cmluZyhFWF9URU1QRkFJTCkgIjoiCisJ
CSAgIG1hY19leHBhbmRlZF9zdHJpbmcoRVhfQ0FOVENSRUFUKSwKKyAgLnVtYXNrID0JMDIyLAor
ICAubWF4X291dHB1dCA9IDIwNDgwLAorICAudGltZW91dCA9CTYwKjYwLAorICAvKiBhbGwgb3Ro
ZXJzIG51bGwvemVyby9mYWxzZSAqLwogfTsKIAogCkBAIC0xNDQsMTMgKzEyNiw2IEBACiBwaXBl
X3RyYW5zcG9ydF9vcHRpb25zX2Jsb2NrICpvYiA9CiAgIChwaXBlX3RyYW5zcG9ydF9vcHRpb25z
X2Jsb2NrICopKHRibG9jay0+b3B0aW9uc19ibG9jayk7CiAKLWFkZHJsaXN0ID0gYWRkcmxpc3Q7
ICAvKiBLZWVwIGNvbXBpbGVyIGhhcHB5ICovCi1kdW1teSA9IGR1bW15OwotdWlkID0gdWlkOwot
Z2lkID0gZ2lkOwotZXJybXNnID0gZXJybXNnOwotb2IgPSBvYjsKLQogI2lmZGVmIEhBVkVfU0VU
Q0xBU1NSRVNPVVJDRVMKIGlmIChvYi0+dXNlX2NsYXNzcmVzb3VyY2VzKQogICB7CkBAIC0yODUs
MTIgKzI2MCwxMiBAQAogZHJpdmVyIG9wdGlvbnMuIE9ubHkgb25lIG9mIGJvZHlfb25seSBhbmQg
aGVhZGVyc19vbmx5IGNhbiBiZSBzZXQuICovCiAKIG9iLT5vcHRpb25zIHw9Ci0gICh0YmxvY2st
PmJvZHlfb25seT8gdG9wdF9ub19oZWFkZXJzIDogMCkgfAotICAodGJsb2NrLT5oZWFkZXJzX29u
bHk/IHRvcHRfbm9fYm9keSA6IDApIHwKLSAgKHRibG9jay0+cmV0dXJuX3BhdGhfYWRkPyB0b3B0
X2FkZF9yZXR1cm5fcGF0aCA6IDApIHwKLSAgKHRibG9jay0+ZGVsaXZlcnlfZGF0ZV9hZGQ/IHRv
cHRfYWRkX2RlbGl2ZXJ5X2RhdGUgOiAwKSB8Ci0gICh0YmxvY2stPmVudmVsb3BlX3RvX2FkZD8g
dG9wdF9hZGRfZW52ZWxvcGVfdG8gOiAwKSB8Ci0gIChvYi0+dXNlX2NybGY/IHRvcHRfdXNlX2Ny
bGYgOiAwKTsKKyAgICAodGJsb2NrLT5ib2R5X29ubHkgPyB0b3B0X25vX2hlYWRlcnMgOiAwKQor
ICB8ICh0YmxvY2stPmhlYWRlcnNfb25seSA/IHRvcHRfbm9fYm9keSA6IDApCisgIHwgKHRibG9j
ay0+cmV0dXJuX3BhdGhfYWRkID8gdG9wdF9hZGRfcmV0dXJuX3BhdGggOiAwKQorICB8ICh0Ymxv
Y2stPmRlbGl2ZXJ5X2RhdGVfYWRkID8gdG9wdF9hZGRfZGVsaXZlcnlfZGF0ZSA6IDApCisgIHwg
KHRibG9jay0+ZW52ZWxvcGVfdG9fYWRkID8gdG9wdF9hZGRfZW52ZWxvcGVfdG8gOiAwKQorICB8
IChvYi0+dXNlX2NybGYgPyB0b3B0X3VzZV9jcmxmIDogMCk7CiB9CiAKIApAQCAtMzI5LDcgKzMw
NCw3IEBACiBpcyBpbiB0aGUgYWRkcmVzc2VzKS4gKi8KIAogaWYgKCF0cmFuc3BvcnRfc2V0X3Vw
X2NvbW1hbmQoYXJndnB0ciwgY21kLCBleHBhbmRfYXJndW1lbnRzLCBleHBhbmRfZmFpbCwKLSAg
ICAgIGFkZHIsIHN0cmluZ19zcHJpbnRmKCIlLjUwcyB0cmFuc3BvcnQiLCB0bmFtZSksIE5VTEwp
KQorICAgICAgYWRkciwgRkFMU0UsIHN0cmluZ19zcHJpbnRmKCIlLjUwcyB0cmFuc3BvcnQiLCB0
bmFtZSksIE5VTEwpKQogICByZXR1cm4gRkFMU0U7CiAKIC8qIFBvaW50IHRvIHRoZSBzZXQtdXAg
YXJndW1lbnRzLiAqLwpAQCAtNDQyLDcgKzQxNyw3IEBACiB7CiBjb25zdCB1c2NoYXIgKiphcmd2
OwogCi0qYXJndnB0ciA9IGFyZ3YgPSBzdG9yZV9nZXQoKDQpKnNpemVvZih1c2NoYXIgKiksIEZB
TFNFKTsKKyphcmd2cHRyID0gYXJndiA9IHN0b3JlX2dldCgoNCkqc2l6ZW9mKHVzY2hhciAqKSwg
R0VUX1VOVEFJTlRFRCk7CiAKIGFyZ3ZbMF0gPSBVUyIvYmluL3NoIjsKIGFyZ3ZbMV0gPSBVUyIt
YyI7CkBAIC00NzYsNiArNDUxLDkgQEAKIAogICAgIGZvciAoYWRkcmVzc19pdGVtICogYWQgPSBh
ZGRyOyBhZDsgYWQgPSBhZC0+bmV4dCkKICAgICAgIHsKKyAgICAgIERFQlVHKERfdHJhbnNwb3J0
KSBpZiAoaXNfdGFpbnRlZChhZC0+YWRkcmVzcykpCisJZGVidWdfcHJpbnRmKCJ0YWludGVkIGVs
ZW1lbnQgJyVzJyBmcm9tICRwaXBlX2FkZHJlc3Nlc1xuIiwgYWQtPmFkZHJlc3MpOworCiAgICAg
ICAvKlhYWCBzdHJpbmdfYXBwZW5kX2xpc3RlbGUoKSA/ICovCiAgICAgICBpZiAoYWQgIT0gYWRk
cikgZyA9IHN0cmluZ19jYXRuKGcsIFVTIiAiLCAxKTsKICAgICAgIGcgPSBzdHJpbmdfY2F0KGcs
IGFkLT5hZGRyZXNzKTsKQEAgLTU4OCw5ICs1NjYsOCBAQAogICB9CiAKIC8qIElmIG5vIGNvbW1h
bmQgaGFzIGJlZW4gc3VwcGxpZWQsIHdlIGFyZSBpbiB0cm91YmxlLgotICogV2UgYWxzbyBjaGVj
ayBmb3IgYW4gZW1wdHkgc3RyaW5nIHNpbmNlIGl0IG1heSBiZQotICogY29taW5nIGZyb20gYWRk
ci0+bG9jYWxfcGFydFswXSA9PSAnfCcKLSAqLworV2UgYWxzbyBjaGVjayBmb3IgYW4gZW1wdHkg
c3RyaW5nIHNpbmNlIGl0IG1heSBiZQorY29taW5nIGZyb20gYWRkci0+bG9jYWxfcGFydFswXSA9
PSAnfCcgKi8KIAogaWYgKCFjbWQgfHwgISpjbWQpCiAgIHsKQEAgLTYwMSw2ICs1NzgsNyBAQAog
ICB9CiBpZiAoaXNfdGFpbnRlZChjbWQpKQogICB7CisgIERFQlVHKERfdHJhbnNwb3J0KSBkZWJ1
Z19wcmludGYoImNtZCAnJXMnIGlzIHRhaW50ZWRcbiIsIGNtZCk7CiAgIGFkZHItPm1lc3NhZ2Ug
PSBzdHJpbmdfc3ByaW50ZigiVGFpbnRlZCAnJXMnIChjb21tYW5kICIKICAgICAiZm9yICVzIHRy
YW5zcG9ydCkgbm90IHBlcm1pdHRlZCIsIGNtZCwgdGJsb2NrLT5uYW1lKTsKICAgYWRkci0+dHJh
bnNwb3J0X3JldHVybiA9IFBBTklDOwpAQCAtNjU5LDExICs2MzcsMTIgQEAKIGVudnBbZW52Y291
bnQrK10gPSBzdHJpbmdfc3ByaW50ZigiU0VOREVSPSVzIiwgc2VuZGVyX2FkZHJlc3MpOwogZW52
cFtlbnZjb3VudCsrXSA9IFVTIlNIRUxMPS9iaW4vc2giOwogCi1pZiAoYWRkci0+aG9zdF9saXN0
ICE9IE5VTEwpCitpZiAoYWRkci0+aG9zdF9saXN0KQogICBlbnZwW2VudmNvdW50KytdID0gc3Ry
aW5nX3NwcmludGYoIkhPU1Q9JXMiLCBhZGRyLT5ob3N0X2xpc3QtPm5hbWUpOwogCi1pZiAoZi50
aW1lc3RhbXBzX3V0YykgZW52cFtlbnZjb3VudCsrXSA9IFVTIlRaPVVUQyI7Ci1lbHNlIGlmICh0
aW1lem9uZV9zdHJpbmcgIT0gTlVMTCAmJiB0aW1lem9uZV9zdHJpbmdbMF0gIT0gMCkKK2lmIChm
LnRpbWVzdGFtcHNfdXRjKQorICBlbnZwW2VudmNvdW50KytdID0gVVMiVFo9VVRDIjsKK2Vsc2Ug
aWYgKHRpbWV6b25lX3N0cmluZyAmJiB0aW1lem9uZV9zdHJpbmdbMF0pCiAgIGVudnBbZW52Y291
bnQrK10gPSBzdHJpbmdfc3ByaW50ZigiVFo9JXMiLCB0aW1lem9uZV9zdHJpbmcpOwogCiAvKiBB
ZGQgYW55IHJlcXVlc3RlZCBpdGVtcyAqLwpkaWZmIC11ciBleGltLm9yaWcvc3JjL3RyYW5zcG9y
dHMvcXVldWVmaWxlLmMgZXhpbS9zcmMvdHJhbnNwb3J0cy9xdWV1ZWZpbGUuYwotLS0gZXhpbS5v
cmlnL3NyYy90cmFuc3BvcnRzL3F1ZXVlZmlsZS5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAw
MDAwICswMzAwCisrKyBleGltL3NyYy90cmFuc3BvcnRzL3F1ZXVlZmlsZS5jCTIwMjItMDYtMjMg
MTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC00LDcgKzQsNyBAQAogCiAvKiBDb3B5cmlnaHQg
KGMpIEFuZHJldyBDb2xpbiBLaXNzYSA8YW5kcmV3QHRvcGRvZy56YS5uZXQ+IDIwMTYgKi8KIC8q
IENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMjAxNiAqLwotLyogQ29weXJp
Z2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAxOTk1IC0gMjAyMCAqLworLyogQ29weXJpZ2h0
IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAxOTk1IC0gMjAyMSAqLwogLyogU2VlIHRoZSBmaWxl
IE5PVElDRSBmb3IgY29uZGl0aW9ucyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogCkBA
IC0xNCw2ICsxNCwxMCBAQAogI2lmZGVmIEVYUEVSSU1FTlRBTF9RVUVVRUZJTEUJLyogd2hvbGUg
ZmlsZSAqLwogI2luY2x1ZGUgInF1ZXVlZmlsZS5oIgogCisjaWZuZGVmIEVYSU1fSEFWRV9PUEVO
QVQKKyMgZXJyb3IgcXVldWVmaWxlIHRyYW5zcG9ydCByZXFpcmVzIG9wZW5hdCgpIHN1cHBvcnQK
KyNlbmRpZgorCiAvKiBPcHRpb25zIHNwZWNpZmljIHRvIHRoZSBhcHBlbmRmaWxlIHRyYW5zcG9y
dC4gVGhleSBtdXN0IGJlIGluIGFscGhhYmV0aWMKIG9yZGVyIChub3RlIHRoYXQgIl8iIGNvbWVz
IGJlZm9yZSB0aGUgbG93ZXIgY2FzZSBsZXR0ZXJzKS4gU29tZSBvZiB0aGVtIGFyZQogc3RvcmVk
IGluIHRoZSBwdWJsaWNseSB2aXNpYmxlIGluc3RhbmNlIGJsb2NrIC0gdGhlc2UgYXJlIGZsYWdn
ZWQgd2l0aCB0aGUKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy90cmFuc3BvcnRzL3NtdHAuYyBleGlt
L3NyYy90cmFuc3BvcnRzL3NtdHAuYwotLS0gZXhpbS5vcmlnL3NyYy90cmFuc3BvcnRzL3NtdHAu
YwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvdHJhbnNw
b3J0cy9zbXRwLmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCAr
Miw4IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAg
KgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAor
LyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyog
Q29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyog
Q29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZp
bGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAj
aW5jbHVkZSAiLi4vZXhpbS5oIgpAQCAtNDMsNyArNDMsNyBAQAogICB7ICJkYW5lX3JlcXVpcmVf
dGxzX2NpcGhlcnMiLCBvcHRfc3RyaW5ncHRyLCBMT0ZGKGRhbmVfcmVxdWlyZV90bHNfY2lwaGVy
cykgfSwKICMgZW5kaWYKICAgeyAiZGF0YV90aW1lb3V0IiwgICAgICAgICBvcHRfdGltZSwJICAg
TE9GRihkYXRhX3RpbWVvdXQpIH0sCi0gIHsgImRlbGF5X2FmdGVyX2N1dG9mZiIsIG9wdF9ib29s
LAkgICBMT0ZGKGRlbGF5X2FmdGVyX2N1dG9mZikgfSwKKyAgeyAiZGVsYXlfYWZ0ZXJfY3V0b2Zm
IiwgICBvcHRfYm9vbCwJICAgTE9GRihkZWxheV9hZnRlcl9jdXRvZmYpIH0sCiAjaWZuZGVmIERJ
U0FCTEVfREtJTQogICB7ICJka2ltX2Nhbm9uIiwgb3B0X3N0cmluZ3B0ciwJICAgTE9GRihka2lt
LmRraW1fY2Fub24pIH0sCiAgIHsgImRraW1fZG9tYWluIiwgb3B0X3N0cmluZ3B0ciwJICAgTE9G
Rihka2ltLmRraW1fZG9tYWluKSB9LApAQCAtNjQsNiArNjQsOSBAQAogICB7ICJmaW5hbF90aW1l
b3V0IiwgICAgICAgIG9wdF90aW1lLAkgICBMT0ZGKGZpbmFsX3RpbWVvdXQpIH0sCiAgIHsgImdl
dGhvc3RieW5hbWUiLCAgICAgICAgb3B0X2Jvb2wsCSAgIExPRkYoZ2V0aG9zdGJ5bmFtZSkgfSwK
ICAgeyAiaGVsb19kYXRhIiwgICAgICAgICAgICBvcHRfc3RyaW5ncHRyLCBMT0ZGKGhlbG9fZGF0
YSkgfSwKKyNpZiAhZGVmaW5lZChESVNBQkxFX1RMUykgJiYgIWRlZmluZWQoRElTQUJMRV9UTFNf
UkVTVU1FKQorICB7ICJob3N0X25hbWVfZXh0cmFjdCIsICAgIG9wdF9zdHJpbmdwdHIsIExPRkYo
aG9zdF9uYW1lX2V4dHJhY3QpIH0sCisjIGVuZGlmCiAgIHsgImhvc3RzIiwgICAgICAgICAgICAg
ICAgb3B0X3N0cmluZ3B0ciwgTE9GRihob3N0cykgfSwKICAgeyAiaG9zdHNfYXZvaWRfZXNtdHAi
LCAgICBvcHRfc3RyaW5ncHRyLCBMT0ZGKGhvc3RzX2F2b2lkX2VzbXRwKSB9LAogICB7ICJob3N0
c19hdm9pZF9waXBlbGluaW5nIiwgb3B0X3N0cmluZ3B0ciwgTE9GRihob3N0c19hdm9pZF9waXBl
bGluaW5nKSB9LApAQCAtODQsNiArODcsNyBAQAogI2lmICFkZWZpbmVkKERJU0FCTEVfVExTKSAm
JiAhZGVmaW5lZChESVNBQkxFX09DU1ApCiAgIHsgImhvc3RzX3JlcXVlc3Rfb2NzcCIsICAgb3B0
X3N0cmluZ3B0ciwgTE9GRihob3N0c19yZXF1ZXN0X29jc3ApIH0sCiAjZW5kaWYKKyAgeyAiaG9z
dHNfcmVxdWlyZV9hbHBuIiwgICBvcHRfc3RyaW5ncHRyLCBMT0ZGKGhvc3RzX3JlcXVpcmVfYWxw
bikgfSwKICAgeyAiaG9zdHNfcmVxdWlyZV9hdXRoIiwgICBvcHRfc3RyaW5ncHRyLCBMT0ZGKGhv
c3RzX3JlcXVpcmVfYXV0aCkgfSwKICNpZm5kZWYgRElTQUJMRV9UTFMKICMgaWZkZWYgU1VQUE9S
VF9EQU5FCkBAIC0xMTEsNiArMTE1LDcgQEAKICAgeyAibG10cF9pZ25vcmVfcXVvdGEiLCAgICBv
cHRfYm9vbCwJICAgTE9GRihsbXRwX2lnbm9yZV9xdW90YSkgfSwKICAgeyAibWF4X3JjcHQiLCAg
ICAgICAgICAgICBvcHRfaW50IHwgb3B0X3B1YmxpYywKICAgICAgIE9QVF9PRkYodHJhbnNwb3J0
X2luc3RhbmNlLCBtYXhfYWRkcmVzc2VzKSB9LAorICB7ICJtZXNzYWdlX2xpbmVsZW5ndGhfbGlt
aXQiLCBvcHRfaW50LCAgIExPRkYobWVzc2FnZV9saW5lbGVuZ3RoX2xpbWl0KSB9LAogICB7ICJt
dWx0aV9kb21haW4iLCAgICAgICAgIG9wdF9leHBhbmRfYm9vbCB8IG9wdF9wdWJsaWMsCiAgICAg
ICBPUFRfT0ZGKHRyYW5zcG9ydF9pbnN0YW5jZSwgbXVsdGlfZG9tYWluKSB9LAogICB7ICJwb3J0
IiwgICAgICAgICAgICAgICAgIG9wdF9zdHJpbmdwdHIsIExPRkYocG9ydCkgfSwKQEAgLTEyMiwx
MiArMTI3LDEzIEBACiAgIHsgInNvY2tzX3Byb3h5IiwgICAgICAgICAgb3B0X3N0cmluZ3B0ciwg
TE9GRihzb2Nrc19wcm94eSkgfSwKICNlbmRpZgogI2lmbmRlZiBESVNBQkxFX1RMUworICB7ICJ0
bHNfYWxwbiIsICAgICAgICAgICAgIG9wdF9zdHJpbmdwdHIsIExPRkYodGxzX2FscG4pIH0sCiAg
IHsgInRsc19jZXJ0aWZpY2F0ZSIsICAgICAgb3B0X3N0cmluZ3B0ciwgTE9GRih0bHNfY2VydGlm
aWNhdGUpIH0sCiAgIHsgInRsc19jcmwiLCAgICAgICAgICAgICAgb3B0X3N0cmluZ3B0ciwgTE9G
Rih0bHNfY3JsKSB9LAogICB7ICJ0bHNfZGhfbWluX2JpdHMiLCAgICAgIG9wdF9pbnQsCSAgIExP
RkYodGxzX2RoX21pbl9iaXRzKSB9LAogICB7ICJ0bHNfcHJpdmF0ZWtleSIsICAgICAgIG9wdF9z
dHJpbmdwdHIsIExPRkYodGxzX3ByaXZhdGVrZXkpIH0sCiAgIHsgInRsc19yZXF1aXJlX2NpcGhl
cnMiLCAgb3B0X3N0cmluZ3B0ciwgTE9GRih0bHNfcmVxdWlyZV9jaXBoZXJzKSB9LAotIyBpZmRl
ZiBFWFBFUklNRU5UQUxfVExTX1JFU1VNRQorIyBpZm5kZWYgRElTQUJMRV9UTFNfUkVTVU1FCiAg
IHsgInRsc19yZXN1bXB0aW9uX2hvc3RzIiwgb3B0X3N0cmluZ3B0ciwgTE9GRih0bHNfcmVzdW1w
dGlvbl9ob3N0cykgfSwKICMgZW5kaWYKICAgeyAidGxzX3NuaSIsICAgICAgICAgICAgICBvcHRf
c3RyaW5ncHRyLCBMT0ZGKHRsc19zbmkpIH0sCkBAIC0xNjIsMjMgKzE2OCwxMiBAQAogLyogRGVm
YXVsdCBwcml2YXRlIG9wdGlvbnMgYmxvY2sgZm9yIHRoZSBzbXRwIHRyYW5zcG9ydC4gKi8KIAog
c210cF90cmFuc3BvcnRfb3B0aW9uc19ibG9jayBzbXRwX3RyYW5zcG9ydF9vcHRpb25fZGVmYXVs
dHMgPSB7Ci0gIC5ob3N0cyA9CQkJTlVMTCwKLSAgLmZhbGxiYWNrX2hvc3RzID0JCU5VTEwsCi0g
IC5ob3N0bGlzdCA9CQkJTlVMTCwKLSAgLmZhbGxiYWNrX2hvc3RsaXN0ID0JCU5VTEwsCisgIC8q
IEFsbCBub24tbWVudGlvbmVkIGVsZW1lbnRzIDAvTlVMTC9GQUxTRSAqLwogICAuaGVsb19kYXRh
ID0JCQlVUyIkcHJpbWFyeV9ob3N0bmFtZSIsCi0gIC5pbnRlcmZhY2UgPQkJCU5VTEwsCi0gIC5w
b3J0ID0JCQlOVUxMLAogICAucHJvdG9jb2wgPQkJCVVTInNtdHAiLAotICAuZHNjcCA9CQkJTlVM
TCwKLSAgLnNlcmlhbGl6ZV9ob3N0cyA9CQlOVUxMLAotICAuaG9zdHNfdHJ5X2F1dGggPQkJTlVM
TCwKLSAgLmhvc3RzX3JlcXVpcmVfYXV0aCA9CQlOVUxMLAogICAuaG9zdHNfdHJ5X2NodW5raW5n
ID0JCVVTIioiLAogI2lmZGVmIFNVUFBPUlRfREFORQogICAuaG9zdHNfdHJ5X2RhbmUgPQkJVVMi
KiIsCi0gIC5ob3N0c19yZXF1aXJlX2RhbmUgPQkJTlVMTCwKLSAgLmRhbmVfcmVxdWlyZV90bHNf
Y2lwaGVycyA9CU5VTEwsCiAjZW5kaWYKICAgLmhvc3RzX3RyeV9mYXN0b3BlbiA9CQlVUyIqIiwK
ICNpZm5kZWYgRElTQUJMRV9QUkRSCkBAIC0xODYsMTkgKzE4MSw2IEBACiAjZW5kaWYKICNpZm5k
ZWYgRElTQUJMRV9PQ1NQCiAgIC5ob3N0c19yZXF1ZXN0X29jc3AgPQkJVVMiKiIsICAgICAgICAg
ICAgICAgLyogaG9zdHNfcmVxdWVzdF9vY3NwIChleGNlcHQgdW5kZXIgREFORTsgdGxzX2NsaWVu
dF9zdGFydCgpKSAqLwotICAuaG9zdHNfcmVxdWlyZV9vY3NwID0JCU5VTEwsCi0jZW5kaWYKLSAg
Lmhvc3RzX3JlcXVpcmVfdGxzID0JCU5VTEwsCi0gIC5ob3N0c19hdm9pZF90bHMgPQkJTlVMTCwK
LSAgLmhvc3RzX3ZlcmlmeV9hdm9pZF90bHMgPQlOVUxMLAotICAuaG9zdHNfYXZvaWRfcGlwZWxp
bmluZyA9CU5VTEwsCi0jaWZuZGVmIERJU0FCTEVfUElQRV9DT05ORUNUCi0gIC5ob3N0c19waXBl
X2Nvbm5lY3QgPQkJTlVMTCwKLSNlbmRpZgotICAuaG9zdHNfYXZvaWRfZXNtdHAgPQkJTlVMTCwK
LSNpZm5kZWYgRElTQUJMRV9UTFMKLSAgLmhvc3RzX25vcGFzc190bHMgPQkJTlVMTCwKLSAgLmhv
c3RzX25vcHJveHlfdGxzID0JCU5VTEwsCiAjZW5kaWYKICAgLmNvbW1hbmRfdGltZW91dCA9CQk1
KjYwLAogICAuY29ubmVjdF90aW1lb3V0ID0JCTUqNjAsCkBAIC0yMDcsNjIgKzE4OSwyOSBAQAog
ICAuc2l6ZV9hZGRpdGlvbiA9CQkxMDI0LAogICAuaG9zdHNfbWF4X3RyeSA9CQk1LAogICAuaG9z
dHNfbWF4X3RyeV9oYXJkbGltaXQgPQk1MCwKKyAgLm1lc3NhZ2VfbGluZWxlbmd0aF9saW1pdCA9
CTk5OCwKICAgLmFkZHJlc3NfcmV0cnlfaW5jbHVkZV9zZW5kZXIgPSBUUlVFLAotICAuYWxsb3df
bG9jYWxob3N0ID0JCUZBTFNFLAotICAuYXV0aGVudGljYXRlZF9zZW5kZXJfZm9yY2UgPQlGQUxT
RSwKLSAgLmdldGhvc3RieW5hbWUgPQkJRkFMU0UsCiAgIC5kbnNfcXVhbGlmeV9zaW5nbGUgPQkJ
VFJVRSwKLSAgLmRuc19zZWFyY2hfcGFyZW50cyA9CQlGQUxTRSwKICAgLmRuc3NlYyA9IHsgLnJl
cXVlc3Q9IFVTIioiLCAucmVxdWlyZT1OVUxMIH0sCiAgIC5kZWxheV9hZnRlcl9jdXRvZmYgPQkJ
VFJVRSwKLSAgLmhvc3RzX292ZXJyaWRlID0JCUZBTFNFLAotICAuaG9zdHNfcmFuZG9taXplID0J
CUZBTFNFLAogICAua2VlcGFsaXZlID0JCQlUUlVFLAotICAubG10cF9pZ25vcmVfcXVvdGEgPQkJ
RkFMU0UsCi0gIC5leHBhbmRfcmV0cnlfaW5jbHVkZV9pcF9hZGRyZXNzID0JTlVMTCwKICAgLnJl
dHJ5X2luY2x1ZGVfaXBfYWRkcmVzcyA9CVRSVUUsCi0jaWZkZWYgU1VQUE9SVF9TT0NLUwotICAu
c29ja3NfcHJveHkgPQkJTlVMTCwKLSNlbmRpZgogI2lmbmRlZiBESVNBQkxFX1RMUwotICAudGxz
X2NlcnRpZmljYXRlID0JCU5VTEwsCi0gIC50bHNfY3JsID0JCQlOVUxMLAotICAudGxzX3ByaXZh
dGVrZXkgPQkJTlVMTCwKLSAgLnRsc19yZXF1aXJlX2NpcGhlcnMgPQlOVUxMLAotICAudGxzX3Nu
aSA9CQkJTlVMTCwKICAgLnRsc192ZXJpZnlfY2VydGlmaWNhdGVzID0JVVMic3lzdGVtIiwKICAg
LnRsc19kaF9taW5fYml0cyA9CQlFWElNX0NMSUVOVF9ESF9ERUZBVUxUX01JTl9CSVRTLAogICAu
dGxzX3RlbXBmYWlsX3RyeWNsZWFyID0JVFJVRSwKLSMgaWZkZWYgRVhQRVJJTUVOVEFMX1RMU19S
RVNVTUUKLSAgLnRsc19yZXN1bXB0aW9uX2hvc3RzID0JTlVMTCwKLSMgZW5kaWYKLSAgLnRsc192
ZXJpZnlfaG9zdHMgPQkJTlVMTCwKICAgLnRsc190cnlfdmVyaWZ5X2hvc3RzID0JVVMiKiIsCiAg
IC50bHNfdmVyaWZ5X2NlcnRfaG9zdG5hbWVzID0JVVMiKiIsCisjIGlmbmRlZiBESVNBQkxFX1RM
U19SRVNVTUUKKyAgLmhvc3RfbmFtZV9leHRyYWN0ID0JCVVTIiR7aWYgYW5kIHt7bWF0Y2h7JGhv
c3R9ey5vdXRsb29rLmNvbVxcJH19IHttYXRjaHskaXRlbX17XFxOXjI1MC0oW1xcdy5dKylcXHNc
XE59fX0geyQxfX0iLAorIyBlbmRpZgogI2VuZGlmCiAjaWZkZWYgU1VQUE9SVF9JMThOCiAgIC51
dGY4X2Rvd25jb252ZXJ0ID0JCVVTIi0xIiwKICNlbmRpZgogI2lmbmRlZiBESVNBQkxFX0RLSU0K
ICAuZGtpbSA9Ci0gICB7LmRraW1fZG9tYWluID0JCU5VTEwsCi0gICAgLmRraW1faWRlbnRpdHkg
PQkJTlVMTCwKLSAgICAuZGtpbV9wcml2YXRlX2tleSA9CQlOVUxMLAotICAgIC5ka2ltX3NlbGVj
dG9yID0JCU5VTEwsCi0gICAgLmRraW1fY2Fub24gPQkJTlVMTCwKLSAgICAuZGtpbV9zaWduX2hl
YWRlcnMgPQlOVUxMLAotICAgIC5ka2ltX3N0cmljdCA9CQlOVUxMLAotICAgIC5ka2ltX2hhc2gg
PQkJVVMic2hhMjU2IiwKLSAgICAuZGtpbV90aW1lc3RhbXBzID0JCU5VTEwsCi0gICAgLmRvdF9z
dHVmZmVkID0JCUZBTFNFLAotICAgIC5mb3JjZV9ib2R5aGFzaCA9CQlGQUxTRSwKLSMgaWZkZWYg
RVhQRVJJTUVOVEFMX0FSQwotICAgIC5hcmNfc2lnbnNwZWMgPQkJTlVMTCwKLSMgZW5kaWYKLSAg
ICB9LAotIyBpZmRlZiBFWFBFUklNRU5UQUxfQVJDCi0gIC5hcmNfc2lnbiA9CQkJTlVMTCwKLSMg
ZW5kaWYKKyAgIHsgLmRraW1faGFzaCA9CQlVUyJzaGEyNTYiLCB9LAogI2VuZGlmCiB9OwogCkBA
IC0yOTQsNDMgKzI0MywzOSBAQAogdm9pZAogc210cF9kZWxpdmVyX2luaXQodm9pZCkKIHsKLWlm
ICghcmVnZXhfUElQRUxJTklORykgcmVnZXhfUElQRUxJTklORyA9Ci0gIHJlZ2V4X211c3RfY29t
cGlsZShVUyJcXG4yNTBbXFxzXFwtXVBJUEVMSU5JTkcoXFxzfFxcbnwkKSIsIEZBTFNFLCBUUlVF
KTsKLQotaWYgKCFyZWdleF9TSVpFKSByZWdleF9TSVpFID0KLSAgcmVnZXhfbXVzdF9jb21waWxl
KFVTIlxcbjI1MFtcXHNcXC1dU0laRShcXHN8XFxufCQpIiwgRkFMU0UsIFRSVUUpOwotCi1pZiAo
IXJlZ2V4X0FVVEgpIHJlZ2V4X0FVVEggPQotICByZWdleF9tdXN0X2NvbXBpbGUoQVVUSFNfUkVH
RVgsIEZBTFNFLCBUUlVFKTsKK3N0cnVjdCBsaXN0CisgIHsKKyAgY29uc3QgcGNyZTJfY29kZSAq
KglyZTsKKyAgY29uc3QgdXNjaGFyICoJc3RyaW5nOworICB9IGxpc3RbXSA9CisgIHsKKyAgICB7
ICZyZWdleF9BVVRILAkJQVVUSFNfUkVHRVggfSwKKyAgICB7ICZyZWdleF9DSFVOS0lORywJCVVT
IlxcbjI1MFtcXHNcXC1dQ0hVTktJTkcoXFxzfFxcbnwkKSIgfSwKKyAgICB7ICZyZWdleF9EU04s
CQlVUyJcXG4yNTBbXFxzXFwtXURTTihcXHN8XFxufCQpIiB9LAorICAgIHsgJnJlZ2V4X0lHTk9S
RVFVT1RBLAlVUyJcXG4yNTBbXFxzXFwtXUlHTk9SRVFVT1RBKFxcc3xcXG58JCkiIH0sCisgICAg
eyAmcmVnZXhfUElQRUxJTklORywJVVMiXFxuMjUwW1xcc1xcLV1QSVBFTElOSU5HKFxcc3xcXG58
JCkiIH0sCisgICAgeyAmcmVnZXhfU0laRSwJCVVTIlxcbjI1MFtcXHNcXC1dU0laRShcXHN8XFxu
fCQpIiB9LAogCiAjaWZuZGVmIERJU0FCTEVfVExTCi1pZiAoIXJlZ2V4X1NUQVJUVExTKSByZWdl
eF9TVEFSVFRMUyA9Ci0gIHJlZ2V4X211c3RfY29tcGlsZShVUyJcXG4yNTBbXFxzXFwtXVNUQVJU
VExTKFxcc3xcXG58JCkiLCBGQUxTRSwgVFJVRSk7CisgICAgeyAmcmVnZXhfU1RBUlRUTFMsCQlV
UyJcXG4yNTBbXFxzXFwtXVNUQVJUVExTKFxcc3xcXG58JCkiIH0sCiAjZW5kaWYKLQotaWYgKCFy
ZWdleF9DSFVOS0lORykgcmVnZXhfQ0hVTktJTkcgPQotICByZWdleF9tdXN0X2NvbXBpbGUoVVMi
XFxuMjUwW1xcc1xcLV1DSFVOS0lORyhcXHN8XFxufCQpIiwgRkFMU0UsIFRSVUUpOwotCiAjaWZu
ZGVmIERJU0FCTEVfUFJEUgotaWYgKCFyZWdleF9QUkRSKSByZWdleF9QUkRSID0KLSAgcmVnZXhf
bXVzdF9jb21waWxlKFVTIlxcbjI1MFtcXHNcXC1dUFJEUihcXHN8XFxufCQpIiwgRkFMU0UsIFRS
VUUpOworICAgIHsgJnJlZ2V4X1BSRFIsCQlVUyJcXG4yNTBbXFxzXFwtXVBSRFIoXFxzfFxcbnwk
KSIgfSwKICNlbmRpZgotCiAjaWZkZWYgU1VQUE9SVF9JMThOCi1pZiAoIXJlZ2V4X1VURjgpIHJl
Z2V4X1VURjggPQotICByZWdleF9tdXN0X2NvbXBpbGUoVVMiXFxuMjUwW1xcc1xcLV1TTVRQVVRG
OChcXHN8XFxufCQpIiwgRkFMU0UsIFRSVUUpOworICAgIHsgJnJlZ2V4X1VURjgsCQlVUyJcXG4y
NTBbXFxzXFwtXVNNVFBVVEY4KFxcc3xcXG58JCkiIH0sCiAjZW5kaWYKLQotaWYgKCFyZWdleF9E
U04pIHJlZ2V4X0RTTiAgPQotICByZWdleF9tdXN0X2NvbXBpbGUoVVMiXFxuMjUwW1xcc1xcLV1E
U04oXFxzfFxcbnwkKSIsIEZBTFNFLCBUUlVFKTsKLQotaWYgKCFyZWdleF9JR05PUkVRVU9UQSkg
cmVnZXhfSUdOT1JFUVVPVEEgPQotICByZWdleF9tdXN0X2NvbXBpbGUoVVMiXFxuMjUwW1xcc1xc
LV1JR05PUkVRVU9UQShcXHN8XFxufCQpIiwgRkFMU0UsIFRSVUUpOwotCiAjaWZuZGVmIERJU0FC
TEVfUElQRV9DT05ORUNUCi1pZiAoIXJlZ2V4X0VBUkxZX1BJUEUpIHJlZ2V4X0VBUkxZX1BJUEUg
PQotICByZWdleF9tdXN0X2NvbXBpbGUoVVMiXFxuMjUwW1xcc1xcLV0iIEVBUkxZX1BJUEVfRkVB
VFVSRV9OQU1FICIoXFxzfFxcbnwkKSIsIEZBTFNFLCBUUlVFKTsKKyAgICB7ICZyZWdleF9FQVJM
WV9QSVBFLCAgCVVTIlxcbjI1MFtcXHNcXC1dIiBFQVJMWV9QSVBFX0ZFQVRVUkVfTkFNRSAiKFxc
c3xcXG58JCkiIH0sCisjZW5kaWYKKyNpZmRlZiBFWFBFUklNRU5UQUxfRVNNVFBfTElNSVRTCisg
ICAgeyAmcmVnZXhfTElNSVRTLAkJVVMiXFxuMjUwW1xcc1xcLV1MSU1JVFNcXHMiIH0sCiAjZW5k
aWYKKyAgfTsKKworZm9yIChzdHJ1Y3QgbGlzdCAqIGwgPSBsaXN0OyBsIDwgbGlzdCArIG5lbGVt
KGxpc3QpOyBsKyspCisgIGlmICghKmwtPnJlKQorICAgICpsLT5yZSA9IHJlZ2V4X211c3RfY29t
cGlsZShsLT5zdHJpbmcsIEZBTFNFLCBUUlVFKTsKIH0KIAogCkBAIC0zNjIsMTAgKzMwNyw2IEBA
CiB7CiBzbXRwX3RyYW5zcG9ydF9vcHRpb25zX2Jsb2NrICpvYiA9IFNPQiB0YmxvY2stPm9wdGlv
bnNfYmxvY2s7CiAKLWVycm1zZyA9IGVycm1zZzsgICAgLyogS2VlcCBwaWNreSBjb21waWxlcnMg
aGFwcHkgKi8KLXVpZCA9IHVpZDsKLWdpZCA9IGdpZDsKLQogLyogUGFzcyBiYWNrIG9wdGlvbnMg
aWYgcmVxdWlyZWQuIFRoaXMgaW50ZXJmYWNlIGlzIGdldHRpbmcgdmVyeSBtZXNzeS4gKi8KIAog
aWYgKHRmKQpAQCAtNDExLDYgKzM1Miw3IEBACiBzbXRwX3RyYW5zcG9ydF9pbml0KHRyYW5zcG9y
dF9pbnN0YW5jZSAqdGJsb2NrKQogewogc210cF90cmFuc3BvcnRfb3B0aW9uc19ibG9jayAqb2Ig
PSBTT0IgdGJsb2NrLT5vcHRpb25zX2Jsb2NrOworaW50IG9sZF9wb29sID0gc3RvcmVfcG9vbDsK
IAogLyogUmV0cnlfdXNlX2xvY2FsX3BhcnQgZGVmYXVsdHMgRkFMU0UgaWYgdW5zZXQgKi8KIApA
QCAtNDQxLDEyICszODMsMTQgQEAKIC8qIElmIGhvc3RzX292ZXJyaWRlIGlzIHNldCBhbmQgdGhl
cmUgYXJlIGxvY2FsIGhvc3RzLCBzZXQgdGhlIGdsb2JhbAogZmxhZyB0aGF0IHN0b3BzIHZlcmlm
eSBmcm9tIHNob3dpbmcgcm91dGVyIGhvc3RzLiAqLwogCi1pZiAob2ItPmhvc3RzX292ZXJyaWRl
ICYmIG9iLT5ob3N0cyAhPSBOVUxMKSB0YmxvY2stPm92ZXJyaWRlc19ob3N0cyA9IFRSVUU7Citp
ZiAob2ItPmhvc3RzX292ZXJyaWRlICYmIG9iLT5ob3N0cykgdGJsb2NrLT5vdmVycmlkZXNfaG9z
dHMgPSBUUlVFOwogCiAvKiBJZiB0aGVyZSBhcmUgYW55IGZhbGxiYWNrIGhvc3RzIGxpc3RlZCwg
YnVpbGQgYSBjaGFpbiBvZiBob3N0IGl0ZW1zCiBmb3IgdGhlbSwgYnV0IGRvIG5vdCBkbyBhbnkg
bG9va3VwcyBhdCB0aGlzIHRpbWUuICovCiAKLWhvc3RfYnVpbGRfaG9zdGxpc3QoJihvYi0+ZmFs
bGJhY2tfaG9zdGxpc3QpLCBvYi0+ZmFsbGJhY2tfaG9zdHMsIEZBTFNFKTsKK3N0b3JlX3Bvb2wg
PSBQT09MX1BFUk07Citob3N0X2J1aWxkX2hvc3RsaXN0KCZvYi0+ZmFsbGJhY2tfaG9zdGxpc3Qs
IG9iLT5mYWxsYmFja19ob3N0cywgRkFMU0UpOworc3RvcmVfcG9vbCA9IG9sZF9wb29sOwogfQog
CiAKQEAgLTc0MCw3ICs2ODQsOCBAQAogCTogc3RyaW5nX2NvcHkoYWRkci0+bWVzc2FnZSkKICAg
ICAgIDogYWRkci0+YmFzaWNfZXJybm8gPiAwCiAJPyBzdHJpbmdfY29weShVUyBzdHJlcnJvcihh
ZGRyLT5iYXNpY19lcnJubykpCi0JOiBOVUxMKTsKKwk6IE5VTEwsCisgICAgICBOVUxMKTsKIAog
ZGVsaXZlcl9sb2NhbHBhcnQgPSBzYXZlX2xvY2FsOwogZGVsaXZlcl9kb21haW4gPSAgICBzYXZl
X2RvbWFpbjsKQEAgLTc3Myw3ICs3MTgsMTkgQEAKIHN0YXRpYyBCT09MCiBzbXRwX3JlYXBfYmFu
bmVyKHNtdHBfY29udGV4dCAqIHN4KQogewotQk9PTCBnb29kX3Jlc3BvbnNlID0gc210cF9yZWFk
X3Jlc3BvbnNlKHN4LCBzeC0+YnVmZmVyLCBzaXplb2Yoc3gtPmJ1ZmZlciksCitCT09MIGdvb2Rf
cmVzcG9uc2U7CisjaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoVENQX1FVSUNLQUNL
KQorICB7CS8qIEhhY2sgdG8gZ2V0IFFVSUNLQUNLIGRpc2FibGVkOyBoYXMgdG8gYmUgcmlnaHQg
YWZ0ZXIgM3docywgYW5kIGhhcyB0byBvbi0+b2ZmICovCisgIGludCBzb2NrID0gc3gtPmNjdHgu
c29jazsKKyAgc3RydWN0IHBvbGxmZCBwID0gey5mZCA9IHNvY2ssIC5ldmVudHMgPSBQT0xMT1VU
fTsKKyAgaWYgKHBvbGwoJnAsIDEsIDEwMDApID49IDApCS8qIHJldHZhbCB0ZXN0IHNvbGVseSBm
b3IgY29tcGlsZXIgcXVpdGVuaW5nICovCisgICAgeworICAgICh2b2lkKSBzZXRzb2Nrb3B0KHNv
Y2ssIElQUFJPVE9fVENQLCBUQ1BfUVVJQ0tBQ0ssIFVTICZvbiwgc2l6ZW9mKG9uKSk7CisgICAg
KHZvaWQpIHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19UQ1AsIFRDUF9RVUlDS0FDSywgVVMgJm9m
Ziwgc2l6ZW9mKG9mZikpOworICAgIH0KKyAgfQorI2VuZGlmCitnb29kX3Jlc3BvbnNlID0gc210
cF9yZWFkX3Jlc3BvbnNlKHN4LCBzeC0+YnVmZmVyLCBzaXplb2Yoc3gtPmJ1ZmZlciksCiAgICcy
JywgKFNPQiBzeC0+Y29ubl9hcmdzLm9iKS0+Y29tbWFuZF90aW1lb3V0KTsKICNpZmRlZiBFWFBF
UklNRU5UQUxfRFNOX0lORk8KIHN4LT5zbXRwX2dyZWV0aW5nID0gc3RyaW5nX2NvcHkoc3gtPmJ1
ZmZlcik7CkBAIC04MDEsMTIgKzc1OCwxMTEgQEAKICNlbmRpZgogI2lmbmRlZiBESVNBQkxFX0VW
RU5UCiAodm9pZCkgZXZlbnRfcmFpc2Uoc3gtPmNvbm5fYXJncy50YmxvY2stPmV2ZW50X2FjdGlv
biwKLSAgVVMic210cDplaGxvIiwgc3gtPmJ1ZmZlcik7CisgIFVTInNtdHA6ZWhsbyIsIHN4LT5i
dWZmZXIsIE5VTEwpOwogI2VuZGlmCiByZXR1cm4gVFJVRTsKIH0KIAogCisvKiBHcmFiIGEgc3Ry
aW5nIGRpZmZlcmVudGlhdGluZyBzZXJ2ZXIgYmVoaW5kIGEgbG9hZGJhbGFuY2VyLCBmb3IgVExT
CityZXN1bXB0aW9uIHdoZW4gc3VjaCBzZXJ2ZXJzIGRvIG5vdCBzaGFyZSBhIHNlc3Npb24tY2Fj
aGUgKi8KKworc3RhdGljIHZvaWQKK2VobG9fcmVzcG9uc2VfbGJzZXJ2ZXIoc210cF9jb250ZXh0
ICogc3gsIHNtdHBfdHJhbnNwb3J0X29wdGlvbnNfYmxvY2sgKiBvYikKK3sKKyNpZiAhZGVmaW5l
ZChESVNBQkxFX1RMUykgJiYgIWRlZmluZWQoRElTQUJMRV9UTFNfUkVTVU1FKQorY29uc3QgdXNj
aGFyICogczsKK3VzY2hhciAqIHNhdmVfaXRlbSA9IGl0ZXJhdGVfaXRlbTsKKworaWYgKHN4LT5j
b25uX2FyZ3MuaGF2ZV9sYnNlcnZlcikKKyAgcmV0dXJuOworaXRlcmF0ZV9pdGVtID0gc3gtPmJ1
ZmZlcjsKK3MgPSBleHBhbmRfY3N0cmluZyhvYi0+aG9zdF9uYW1lX2V4dHJhY3QpOworaXRlcmF0
ZV9pdGVtID0gc2F2ZV9pdGVtOworc3gtPmNvbm5fYXJncy5ob3N0X2xic2VydmVyID0gcyAmJiAh
KnMgPyBOVUxMIDogczsKK3N4LT5jb25uX2FyZ3MuaGF2ZV9sYnNlcnZlciA9IFRSVUU7CisjZW5k
aWYKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBFWFBFUklNRU5U
QUxfRVNNVFBfTElNSVRTCisvKiBJZiBUTFMsIG9yIFRMUyBub3Qgb2ZmZXJlZCwgY2FsbGVkIHdp
dGggdGhlIEVITE8gcmVzcG9uc2UgaW4gdGhlIGJ1ZmZlci4KK0NoZWNrIGl0IGZvciBhIExJTUlU
UyBrZXl3b3JkIGFuZCBwYXJzZSB2YWx1ZXMgaW50byB0aGUgc210cCBjb250ZXh0IHN0cnVjdHVy
ZS4KKworV2UgZG9uJ3QgYm90aGVyIHdpdGggcGVlcnMgdGhhdCB3ZSB3b24ndCB0YWxrIFRMUyB0
bywgZXZlbiB0aG91Z2ggdGhleSBjYW4sCitqdXN0IGlnbm9yZSB0aGVpciBMSU1JVFMgYWR2aWNl
IChpZiBhbnkpIGFuZCB0cmVhdCB0aGVtIGFzIGlmIHRoZXkgZG8gbm90LgorVGhpcyBzYXZlcyB1
cyBkZWFsaW5nIHdpdGggYSBkdXBsaWNhdGUgc2V0IG9mIHZhbHVlcy4gKi8KKworc3RhdGljIHZv
aWQKK2VobG9fcmVzcG9uc2VfbGltaXRzX3JlYWQoc210cF9jb250ZXh0ICogc3gpCit7Cit1c2No
YXIgKiBtYXRjaDsKKworLyogbWF0Y2hlcyB1cCB0byBqdXN0IGFmdGVyIHRoZSBmaXJzdCBzcGFj
ZSBhZnRlciB0aGUga2V5d29yZCAqLworCitpZiAocmVnZXhfbWF0Y2gocmVnZXhfTElNSVRTLCBz
eC0+YnVmZmVyLCAtMSwgJm1hdGNoKSkKKyAgZm9yIChjb25zdCB1c2NoYXIgKiBzID0gc3gtPmJ1
ZmZlciArIFVzdHJsZW4obWF0Y2gpOyAqczsgKQorICAgIHsKKyAgICB3aGlsZSAoaXNzcGFjZSgq
cykpIHMrKzsKKyAgICBpZiAoKnMgPT0gJ1xuJykgYnJlYWs7CisKKyAgICBpZiAoc3RybmNtcGlj
KHMsIFVTIk1BSUxNQVg9IiwgOCkgPT0gMCkKKyAgICAgIHsKKyAgICAgIHN4LT5wZWVyX2xpbWl0
X21haWwgPSBhdG9pKENTIChzICs9IDgpKTsKKyAgICAgIHdoaWxlIChpc2RpZ2l0KCpzKSkgcysr
OworICAgICAgfQorICAgIGVsc2UgaWYgKHN0cm5jbXBpYyhzLCBVUyJSQ1BUTUFYPSIsIDgpID09
IDApCisgICAgICB7CisgICAgICBzeC0+cGVlcl9saW1pdF9yY3B0ID0gYXRvaShDUyAocyArPSA4
KSk7CisgICAgICB3aGlsZSAoaXNkaWdpdCgqcykpIHMrKzsKKyAgICAgIH0KKyAgICBlbHNlIGlm
IChzdHJuY21waWMocywgVVMiUkNQVERPTUFJTk1BWD0iLCAxNCkgPT0gMCkKKyAgICAgIHsKKyAg
ICAgIHN4LT5wZWVyX2xpbWl0X3JjcHRkb20gPSBhdG9pKENTIChzICs9IDE0KSk7CisgICAgICB3
aGlsZSAoaXNkaWdpdCgqcykpIHMrKzsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB3aGlsZSAo
KnMgJiYgIWlzc3BhY2UoKnMpKSBzKys7CisgICAgfQorfQorCisvKiBBcHBseSBnaXZlbiB2YWx1
ZXMgdG8gdGhlIGN1cnJlbnQgY29ubmVjdGlvbiAqLworc3RhdGljIHZvaWQKK2VobG9fbGltaXRz
X2FwcGx5KHNtdHBfY29udGV4dCAqIHN4LAorICB1bnNpZ25lZCBsaW1pdF9tYWlsLCB1bnNpZ25l
ZCBsaW1pdF9yY3B0LCB1bnNpZ25lZCBsaW1pdF9yY3B0ZG9tKQoreworaWYgKGxpbWl0X21haWwg
JiYgbGltaXRfbWFpbCA8IHN4LT5tYXhfbWFpbCkgc3gtPm1heF9tYWlsID0gbGltaXRfbWFpbDsK
K2lmIChsaW1pdF9yY3B0ICYmIGxpbWl0X3JjcHQgPCBzeC0+bWF4X3JjcHQpIHN4LT5tYXhfcmNw
dCA9IGxpbWl0X3JjcHQ7CitpZiAobGltaXRfcmNwdGRvbSkKKyAgeworICBERUJVRyhEX3RyYW5z
cG9ydCkgZGVidWdfcHJpbnRmKCJ3aWxsIHRyZWF0IGFzICFtdWx0aV9kb21haW5cbiIpOworICBz
eC0+c2luZ2xlX3JjcHRfZG9tYWluID0gVFJVRTsKKyAgfQorfQorCisvKiBBcHBseSB2YWx1ZXMg
ZnJvbSBFSExPLXJlc3AgdG8gdGhlIGN1cnJlbnQgY29ubmVjdGlvbiAqLworc3RhdGljIHZvaWQK
K2VobG9fcmVzcG9uc2VfbGltaXRzX2FwcGx5KHNtdHBfY29udGV4dCAqIHN4KQoreworZWhsb19s
aW1pdHNfYXBwbHkoc3gsIHN4LT5wZWVyX2xpbWl0X21haWwsIHN4LT5wZWVyX2xpbWl0X3JjcHQs
CisgIHN4LT5wZWVyX2xpbWl0X3JjcHRkb20pOworfQorCisvKiBBcHBseSB2YWx1ZXMgcmVhZCBm
cm9tIGNhY2hlIHRvIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gKi8KK3N0YXRpYyB2b2lkCitlaGxv
X2NhY2hlX2xpbWl0c19hcHBseShzbXRwX2NvbnRleHQgKiBzeCkKK3sKKyMgaWZuZGVmIERJU0FC
TEVfUElQRV9DT05ORUNUCitlaGxvX2xpbWl0c19hcHBseShzeCwgc3gtPmVobG9fcmVzcC5saW1p
dF9tYWlsLCBzeC0+ZWhsb19yZXNwLmxpbWl0X3JjcHQsCisgIHN4LT5laGxvX3Jlc3AubGltaXRf
cmNwdGRvbSk7CisjIGVuZGlmCit9CisjZW5kaWYJLypFWFBFUklNRU5UQUxfRVNNVFBfTElNSVRT
Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmbmRlZiBESVNBQkxFX1BJUEVfQ09O
TkVDVAogc3RhdGljIHVzY2hhciAqCkBAIC04MjAsMTkgKzg3Niw0NSBAQAogICAgIGhvc3QtPnBv
cnQgPT0gUE9SVF9OT05FID8gc3gtPnBvcnQgOiBob3N0LT5wb3J0KTsKIH0KIAorLyogQ2FjaGUg
RUhMTy1yZXNwb25zZSBpbmZvIGZvciB1c2UgYnkgZWFybHktcGlwZS4KK0NhbGxlZAorLSBEdXJp
bmcgYSBub3JtYWwgZmxvdyBvbiBFSExPIHJlc3BvbnNlIChlaXRoZXIgY2xlYXJ0ZXh0IG9yIHVu
ZGVyIFRMUyksCisgIHdoZW4gd2UgYXJlIHdpbGxpbmcgdG8gZG8gUElQRUNPTk5FQ1QgYW5kIGl0
IGlzIG9mZmVyZWQKKy0gRHVyaW5nIGFuIGVhcmx5LXBpcGUgZmxvdyBvbiByZWNlaXZpbmcgdGhl
IGFjdHVhbCBFSExPIHJlc3BvbnNlIGFuZCBub3RpbmcKKyAgZGlzcGFyaXR5IHZlcnN1cyB0aGUg
Y2FjaGVkIGluZm8gdXNlZCwgd2hlbiBQSVBFQ09OTkVDVCBpcyBzdGlsbCBiZWluZyBvZmZlcmVk
CisKK1dlIGFzc3VtZSB0aGF0IHN1aXRhYmxlIHZhbHVlcyBoYXZlIGJlZW4gc2V0IGluIHRoZSBz
eC5laGxvX3Jlc3Agc3RydWN0dXJlIGZvcgorZmVhdHVyZXMgYW5kIGF1dGhzOyB3ZSBoYW5kbGUg
dGhlIGNvcHkgb2YgbGltaXRzLiAqLworCiBzdGF0aWMgdm9pZAotd3JpdGVfZWhsb19jYWNoZV9l
bnRyeShjb25zdCBzbXRwX2NvbnRleHQgKiBzeCkKK3dyaXRlX2VobG9fY2FjaGVfZW50cnkoc210
cF9jb250ZXh0ICogc3gpCiB7CiBvcGVuX2RiIGRiYmxvY2ssICogZGJtX2ZpbGU7CiAKKyMgaWZk
ZWYgRVhQRVJJTUVOVEFMX0VTTVRQX0xJTUlUUworc3gtPmVobG9fcmVzcC5saW1pdF9tYWlsID0g
c3gtPnBlZXJfbGltaXRfbWFpbDsKK3N4LT5laGxvX3Jlc3AubGltaXRfcmNwdCA9IHN4LT5wZWVy
X2xpbWl0X3JjcHQ7CitzeC0+ZWhsb19yZXNwLmxpbWl0X3JjcHRkb20gPSBzeC0+cGVlcl9saW1p
dF9yY3B0ZG9tOworIyBlbmRpZgorCiBpZiAoKGRibV9maWxlID0gZGJmbl9vcGVuKFVTIm1pc2Mi
LCBPX1JEV1IsICZkYmJsb2NrLCBUUlVFLCBUUlVFKSkpCiAgIHsKICAgdXNjaGFyICogZWhsb19y
ZXNwX2tleSA9IGVobG9fY2FjaGVfa2V5KHN4KTsKICAgZGJkYXRhX2VobG9fcmVzcCBlciA9IHsg
LmRhdGEgPSBzeC0+ZWhsb19yZXNwIH07CiAKLSAgSERFQlVHKERfdHJhbnNwb3J0KSBkZWJ1Z19w
cmludGYoIndyaXRpbmcgY2xyICUwNHgvJTA0eCBjcnkgJTA0eC8lMDR4XG4iLAotICAgIHN4LT5l
aGxvX3Jlc3AuY2xlYXJ0ZXh0X2ZlYXR1cmVzLCBzeC0+ZWhsb19yZXNwLmNsZWFydGV4dF9hdXRo
cywKLSAgICBzeC0+ZWhsb19yZXNwLmNyeXB0ZWRfZmVhdHVyZXMsIHN4LT5laGxvX3Jlc3AuY3J5
cHRlZF9hdXRocyk7CisgIEhERUJVRyhEX3RyYW5zcG9ydCkKKyMgaWZkZWYgRVhQRVJJTUVOVEFM
X0VTTVRQX0xJTUlUUworICAgIGlmIChzeC0+ZWhsb19yZXNwLmxpbWl0X21haWwgfHwgc3gtPmVo
bG9fcmVzcC5saW1pdF9yY3B0IHx8IHN4LT5laGxvX3Jlc3AubGltaXRfcmNwdGRvbSkKKyAgICAg
IGRlYnVnX3ByaW50Zigid3JpdGluZyBjbHIgJTA0eC8lMDR4IGNyeSAlMDR4LyUwNHggbGltICUw
NWQvJTA1ZC8lMDVkXG4iLAorCXN4LT5laGxvX3Jlc3AuY2xlYXJ0ZXh0X2ZlYXR1cmVzLCBzeC0+
ZWhsb19yZXNwLmNsZWFydGV4dF9hdXRocywKKwlzeC0+ZWhsb19yZXNwLmNyeXB0ZWRfZmVhdHVy
ZXMsIHN4LT5laGxvX3Jlc3AuY3J5cHRlZF9hdXRocywKKwlzeC0+ZWhsb19yZXNwLmxpbWl0X21h
aWwsIHN4LT5laGxvX3Jlc3AubGltaXRfcmNwdCwKKwlzeC0+ZWhsb19yZXNwLmxpbWl0X3JjcHRk
b20pOworICAgIGVsc2UKKyMgZW5kaWYKKyAgICAgIGRlYnVnX3ByaW50Zigid3JpdGluZyBjbHIg
JTA0eC8lMDR4IGNyeSAlMDR4LyUwNHhcbiIsCisJc3gtPmVobG9fcmVzcC5jbGVhcnRleHRfZmVh
dHVyZXMsIHN4LT5laGxvX3Jlc3AuY2xlYXJ0ZXh0X2F1dGhzLAorCXN4LT5laGxvX3Jlc3AuY3J5
cHRlZF9mZWF0dXJlcywgc3gtPmVobG9fcmVzcC5jcnlwdGVkX2F1dGhzKTsKIAogICBkYmZuX3dy
aXRlKGRibV9maWxlLCBlaGxvX3Jlc3Bfa2V5LCAmZXIsIChpbnQpc2l6ZW9mKGVyKSk7CiAgIGRi
Zm5fY2xvc2UoZGJtX2ZpbGUpOwpAQCAtODY2LDcgKzk0OCw3IEBACiAgIHVzY2hhciAqIGVobG9f
cmVzcF9rZXkgPSBlaGxvX2NhY2hlX2tleShzeCk7CiAgIGRiZGF0YV9laGxvX3Jlc3AgKiBlcjsK
IAotICBpZiAoIShlciA9IGRiZm5fcmVhZChkYm1fZmlsZSwgZWhsb19yZXNwX2tleSkpKQorICBp
ZiAoIShlciA9IGRiZm5fcmVhZF9lbmZvcmNlX2xlbmd0aChkYm1fZmlsZSwgZWhsb19yZXNwX2tl
eSwgc2l6ZW9mKGRiZGF0YV9laGxvX3Jlc3ApKSkpCiAgICAgeyBERUJVRyhEX3RyYW5zcG9ydCkg
ZGVidWdfcHJpbnRmKCJubyBlaGxvLXJlc3AgcmVjb3JkXG4iKTsgfQogICBlbHNlIGlmICh0aW1l
KE5VTEwpIC0gZXItPnRpbWVfc3RhbXAgPiByZXRyeV9kYXRhX2V4cGlyZSkKICAgICB7CkBAIC04
NzcsMTIgKzk1OSwyNiBAQAogICAgIH0KICAgZWxzZQogICAgIHsKKyAgICBERUJVRyhEX3RyYW5z
cG9ydCkKKyMgaWZkZWYgRVhQRVJJTUVOVEFMX0VTTVRQX0xJTUlUUworICAgICAgaWYgKGVyLT5k
YXRhLmxpbWl0X21haWwgfHwgZXItPmRhdGEubGltaXRfcmNwdCB8fCBlci0+ZGF0YS5saW1pdF9y
Y3B0ZG9tKQorCWRlYnVnX3ByaW50ZigiRUhMTyByZXNwb25zZSBiaXRzIGZyb20gY2FjaGU6Igor
CSAgIiBjbGVhcnRleHQgMHglMDR4LzB4JTA0eCBjcnlwdGVkIDB4JTA0eC8weCUwNHggbGltICUw
NWQvJTA1ZC8lMDVkXG4iLAorCSAgZXItPmRhdGEuY2xlYXJ0ZXh0X2ZlYXR1cmVzLCBlci0+ZGF0
YS5jbGVhcnRleHRfYXV0aHMsCisJICBlci0+ZGF0YS5jcnlwdGVkX2ZlYXR1cmVzLCBlci0+ZGF0
YS5jcnlwdGVkX2F1dGhzLAorCSAgZXItPmRhdGEubGltaXRfbWFpbCwgZXItPmRhdGEubGltaXRf
cmNwdCwgZXItPmRhdGEubGltaXRfcmNwdGRvbSk7CisgICAgICBlbHNlCisjIGVuZGlmCisJZGVi
dWdfcHJpbnRmKCJFSExPIHJlc3BvbnNlIGJpdHMgZnJvbSBjYWNoZToiCisJICAiIGNsZWFydGV4
dCAweCUwNHgvMHglMDR4IGNyeXB0ZWQgMHglMDR4LzB4JTA0eFxuIiwKKwkgIGVyLT5kYXRhLmNs
ZWFydGV4dF9mZWF0dXJlcywgZXItPmRhdGEuY2xlYXJ0ZXh0X2F1dGhzLAorCSAgZXItPmRhdGEu
Y3J5cHRlZF9mZWF0dXJlcywgZXItPmRhdGEuY3J5cHRlZF9hdXRocyk7CisKICAgICBzeC0+ZWhs
b19yZXNwID0gZXItPmRhdGE7CisjIGlmZGVmIEVYUEVSSU1FTlRBTF9FU01UUF9MSU1JVFMKKyAg
ICBlaGxvX2NhY2hlX2xpbWl0c19hcHBseShzeCk7CisjIGVuZGlmCiAgICAgZGJmbl9jbG9zZShk
Ym1fZmlsZSk7Ci0gICAgREVCVUcoRF90cmFuc3BvcnQpIGRlYnVnX3ByaW50ZigKLQkiRUhMTyBy
ZXNwb25zZSBiaXRzIGZyb20gY2FjaGU6IGNsZWFydGV4dCAweCUwNHgvMHglMDR4IGNyeXB0ZWQg
MHglMDR4LzB4JTA0eFxuIiwKLQllci0+ZGF0YS5jbGVhcnRleHRfZmVhdHVyZXMsIGVyLT5kYXRh
LmNsZWFydGV4dF9hdXRocywKLQllci0+ZGF0YS5jcnlwdGVkX2ZlYXR1cmVzLCBlci0+ZGF0YS5j
cnlwdGVkX2F1dGhzKTsKICAgICByZXR1cm4gVFJVRTsKICAgICB9CiAgIGRiZm5fY2xvc2UoZGJt
X2ZpbGUpOwpAQCAtOTY4LDYgKzEwNjQsOCBAQAogICAgIGlmICh0bHNfb3V0LmFjdGl2ZS5zb2Nr
ID49IDApIHJjID0gREVGRVI7CiAgICAgZ290byBmYWlsOwogICAgIH0KKyAgLypYWFggRVhQRVJJ
TUVOVEFMX0VTTVRQX0xJTUlUUyA/ICovCisgIGVobG9fcmVzcG9uc2VfbGJzZXJ2ZXIoc3gsIHN4
LT5jb25uX2FyZ3Mub2IpOwogICB9CiAKIGlmIChwZW5kaW5nX0VITE8pCkBAIC05ODQsOCArMTA4
Miw5IEBACiAgICAgZ290byBmYWlsOwogICAgIH0KIAotICAvKiBDb21wYXJlIHRoZSBhY3R1YWwg
RUhMTyByZXNwb25zZSB0byB0aGUgY2FjaGVkIHZhbHVlIHdlIGFzc3VtZWQ7Ci0gIG9uIGRpZmZl
cmVuY2UsIGR1bXAgb3IgcmV3cml0ZSB0aGUgY2FjaGUgYW5kIGFycmFuZ2UgZm9yIGEgcmV0cnku
ICovCisgIC8qIENvbXBhcmUgdGhlIGFjdHVhbCBFSExPIHJlc3BvbnNlIGV4dGVuc2lvbnMgYW5k
IEFVVEggbWV0aG9kcyB0byB0aGUgY2FjaGVkCisgIHZhbHVlIHdlIGFzc3VtZWQ7IG9uIGRpZmZl
cmVuY2UsIGR1bXAgb3IgcmV3cml0ZSB0aGUgY2FjaGUgYW5kIGFycmFuZ2UgZm9yIGEKKyAgcmV0
cnkuICovCiAKICAgYXAgPSB0bHNfb3V0LmFjdGl2ZS5zb2NrIDwgMAogICAgICAgPyAmc3gtPmVo
bG9fcmVzcC5jbGVhcnRleHRfYXV0aHMgOiAmc3gtPmVobG9fcmVzcC5jcnlwdGVkX2F1dGhzOwpA
QCAtOTk1LDYgKzEwOTQsMTAgQEAKIAl8IE9QVElPTl9DSFVOS0lORyB8IE9QVElPTl9QUkRSIHwg
T1BUSU9OX0RTTiB8IE9QVElPTl9QSVBFIHwgT1BUSU9OX1NJWkUKIAl8IE9QVElPTl9VVEY4IHwg
T1BUSU9OX0VBUkxZX1BJUEUKIAkpOworIyBpZmRlZiBFWFBFUklNRU5UQUxfRVNNVFBfTElNSVRT
CisgIGlmICh0bHNfb3V0LmFjdGl2ZS5zb2NrID49IDAgfHwgIShwZWVyX29mZmVyZWQgJiBPUFRJ
T05fVExTKSkKKyAgICBlaGxvX3Jlc3BvbnNlX2xpbWl0c19yZWFkKHN4KTsKKyMgZW5kaWYKICAg
aWYgKCAgcGVlcl9vZmZlcmVkICE9IHN4LT5wZWVyX29mZmVyZWQKICAgICAgfHwgKGF1dGhiaXRz
ID0gc3R1ZHlfZWhsb19hdXRocyhzeCkpICE9ICphcCkKICAgICB7CkBAIC0xMDAyLDE2ICsxMTA1
LDQ0IEBACiAgICAgICBkZWJ1Z19wcmludGYoIkVITE8gJXMgZXh0ZW5zaW9ucyBjaGFuZ2VkLCAw
eCUwNHgvMHglMDR4IC0+IDB4JTA0eC8weCUwNHhcbiIsCiAJCSAgICB0bHNfb3V0LmFjdGl2ZS5z
b2NrIDwgMCA/ICJjbGVhcnRleHQiIDogImNyeXB0ZWQiLAogCQkgICAgc3gtPnBlZXJfb2ZmZXJl
ZCwgKmFwLCBwZWVyX29mZmVyZWQsIGF1dGhiaXRzKTsKLSAgICAqKHRsc19vdXQuYWN0aXZlLnNv
Y2sgPCAwCi0gICAgICA/ICZzeC0+ZWhsb19yZXNwLmNsZWFydGV4dF9mZWF0dXJlcyA6ICZzeC0+
ZWhsb19yZXNwLmNyeXB0ZWRfZmVhdHVyZXMpID0gcGVlcl9vZmZlcmVkOwotICAgICphcCA9IGF1
dGhiaXRzOwogICAgIGlmIChwZWVyX29mZmVyZWQgJiBPUFRJT05fRUFSTFlfUElQRSkKKyAgICAg
IHsKKyAgICAgICoodGxzX291dC5hY3RpdmUuc29jayA8IDAKKwk/ICZzeC0+ZWhsb19yZXNwLmNs
ZWFydGV4dF9mZWF0dXJlcyA6ICZzeC0+ZWhsb19yZXNwLmNyeXB0ZWRfZmVhdHVyZXMpID0KKwkg
IHBlZXJfb2ZmZXJlZDsKKyAgICAgICphcCA9IGF1dGhiaXRzOwogICAgICAgd3JpdGVfZWhsb19j
YWNoZV9lbnRyeShzeCk7CisgICAgICB9CiAgICAgZWxzZQogICAgICAgaW52YWxpZGF0ZV9laGxv
X2NhY2hlX2VudHJ5KHN4KTsKIAogICAgIHJldHVybiBPSzsJCS8qIGp1c3QgY2Fycnkgb24gKi8K
ICAgICB9CisjIGlmZGVmIEVYUEVSSU1FTlRBTF9FU01UUF9MSU1JVFMKKyAgICAvKiBJZiB3ZSBh
cmUgaGFuZGxpbmcgTElNSVRTLCBjb21wYXJlIHRoZSBhY3R1YWwgRUhMTyBMSU1JVFMgdmFsdWVz
IHdpdGggdGhlCisgICAgY2FjaGVkIHZhbHVlcyBhbmQgaW52YWxpZGF0ZSBjYWNoZSBpZiBkaWZm
ZXJlbnQuICBPSyB0byBjYXJyeSBvbiB3aXRoCisgICAgY29ubmVjdCBzaW5jZSB2YWx1ZXMgYXJl
IGFkdmlzb3J5LiAqLworICAgIHsKKyAgICBpZiAoICAodGxzX291dC5hY3RpdmUuc29jayA+PSAw
IHx8ICEocGVlcl9vZmZlcmVkICYgT1BUSU9OX1RMUykpCisgICAgICAgJiYgKCAgc3gtPnBlZXJf
bGltaXRfbWFpbCAhPSBzeC0+ZWhsb19yZXNwLmxpbWl0X21haWwKKyAgICAgICAgICB8fCBzeC0+
cGVlcl9saW1pdF9yY3B0ICE9IHN4LT5laGxvX3Jlc3AubGltaXRfcmNwdAorICAgICAgICAgIHx8
IHN4LT5wZWVyX2xpbWl0X3JjcHRkb20gIT0gc3gtPmVobG9fcmVzcC5saW1pdF9yY3B0ZG9tCisg
ICAgICAgKSAgKQorICAgICAgeworICAgICAgSERFQlVHKERfdHJhbnNwb3J0KQorCXsKKwlkZWJ1
Z19wcmludGYoIkVITE8gTElNSVRTIGNoYW5nZWQ6Iik7CisJaWYgKHN4LT5wZWVyX2xpbWl0X21h
aWwgIT0gc3gtPmVobG9fcmVzcC5saW1pdF9tYWlsKQorCSAgZGVidWdfcHJpbnRmKCIgTUFJTE1B
WCAldSAtPiAldVxuIiwgc3gtPmVobG9fcmVzcC5saW1pdF9tYWlsLCBzeC0+cGVlcl9saW1pdF9t
YWlsKTsKKwllbHNlIGlmIChzeC0+cGVlcl9saW1pdF9yY3B0ICE9IHN4LT5laGxvX3Jlc3AubGlt
aXRfcmNwdCkKKwkgIGRlYnVnX3ByaW50ZigiIFJDUFRNQVggJXUgLT4gJXVcbiIsIHN4LT5laGxv
X3Jlc3AubGltaXRfcmNwdCwgc3gtPnBlZXJfbGltaXRfcmNwdCk7CisJZWxzZQorCSAgZGVidWdf
cHJpbnRmKCIgUkNQVERPTUFJTk1BWCAldSAtPiAldVxuIiwgc3gtPmVobG9fcmVzcC5saW1pdF9y
Y3B0ZG9tLCBzeC0+cGVlcl9saW1pdF9yY3B0ZG9tKTsKKwl9CisgICAgICBpbnZhbGlkYXRlX2Vo
bG9fY2FjaGVfZW50cnkoc3gpOworICAgICAgfQorICAgIH0KKyMgZW5kaWYKICAgfQogcmV0dXJu
IE9LOwogCkBAIC0xMTMzLDcgKzEyNjQsNyBAQAogICAvKiBUaGUgYWRkcmVzcyB3YXMgYWNjZXB0
ZWQgKi8KICAgYWRkci0+aG9zdF91c2VkID0gc3gtPmNvbm5fYXJncy5ob3N0OwogCi0gIERFQlVH
KERfdHJhbnNwb3J0KSBkZWJ1Z19wcmludGYoIiVzIGV4cGVjdCByY3B0XG4iLCBfX0ZVTkNUSU9O
X18pOworICBERUJVRyhEX3RyYW5zcG9ydCkgZGVidWdfcHJpbnRmKCIlcyBleHBlY3QgcmNwdCBm
b3IgJXNcbiIsIF9fRlVOQ1RJT05fXywgYWRkci0+YWRkcmVzcyk7CiAgIGlmIChzbXRwX3JlYWRf
cmVzcG9uc2Uoc3gsIHN4LT5idWZmZXIsIHNpemVvZihzeC0+YnVmZmVyKSwKIAkJCSAgJzInLCBv
Yi0+Y29tbWFuZF90aW1lb3V0KSkKICAgICB7CkBAIC0xMzM0LDEwICsxNDY1LDE3IEBACiBob3N0
X2l0ZW0gKiBob3N0ID0gc3gtPmNvbm5fYXJncy5ob3N0OwkJCS8qIGhvc3QgdG8gZGVsaXZlciB0
byAqLwogaW50IHJjOwogCisvKiBTZXQgdXAgZ2xvYmFscyBmb3IgZXJyb3IgbWVzc2FnZXMgKi8K
KworYXV0aGVudGljYXRvcl9uYW1lID0gYXUtPm5hbWU7Citkcml2ZXJfc3JjZmlsZSA9IGF1LT5z
cmNmaWxlOworZHJpdmVyX3NyY2xpbmUgPSBhdS0+c3JjbGluZTsKKwogc3gtPm91dGJsb2NrLmF1
dGhlbnRpY2F0aW5nID0gVFJVRTsKIHJjID0gKGF1LT5pbmZvLT5jbGllbnRjb2RlKShhdSwgc3gs
IG9iLT5jb21tYW5kX3RpbWVvdXQsCiAJCQkgICAgc3gtPmJ1ZmZlciwgc2l6ZW9mKHN4LT5idWZm
ZXIpKTsKIHN4LT5vdXRibG9jay5hdXRoZW50aWNhdGluZyA9IEZBTFNFOworZHJpdmVyX3NyY2Zp
bGUgPSBhdXRoZW50aWNhdG9yX25hbWUgPSBOVUxMOyBkcml2ZXJfc3JjbGluZSA9IDA7CiBERUJV
RyhEX3RyYW5zcG9ydCkgZGVidWdfcHJpbnRmKCIlcyBhdXRoZW50aWNhdG9yIHlpZWxkZWQgJWRc
biIsIGF1LT5uYW1lLCByYyk7CiAKIC8qIEEgdGVtcG9yYXJ5IGF1dGhlbnRpY2F0aW9uIGZhaWx1
cmUgbXVzdCBob2xkIHVwIGRlbGl2ZXJ5IHRvCkBAIC0xNjg4LDggKzE4MjYsOSBAQAogY3VycmVu
dF9sb2NhbF9pZGVudGl0eSA9CiAgIHNtdHBfbG9jYWxfaWRlbnRpdHkoc19jb21wYXJlLT5jdXJy
ZW50X3NlbmRlcl9hZGRyZXNzLCBzX2NvbXBhcmUtPnRibG9jayk7CiAKLWlmICghKG5ld19zZW5k
ZXJfYWRkcmVzcyA9IGRlbGl2ZXJfZ2V0X3NlbmRlcl9hZGRyZXNzKG1lc3NhZ2VfaWQpKSkKLSAg
ICByZXR1cm4gRkFMU0U7CitpZiAoIShuZXdfc2VuZGVyX2FkZHJlc3MgPSBzcG9vbF9zZW5kZXJf
ZnJvbV9tc2dpZChtZXNzYWdlX2lkKSkpCisgIHJldHVybiBGQUxTRTsKKwogCiBtZXNzYWdlX2xv
Y2FsX2lkZW50aXR5ID0KICAgc210cF9sb2NhbF9pZGVudGl0eShuZXdfc2VuZGVyX2FkZHJlc3Ms
IHNfY29tcGFyZS0+dGJsb2NrKTsKQEAgLTE3MDIsNTcgKzE4NDEsNjUgQEAKIHN0YXRpYyB1bnNp
Z25lZAogZWhsb19yZXNwb25zZSh1c2NoYXIgKiBidWYsIHVuc2lnbmVkIGNoZWNrcykKIHsKLXNp
emVfdCBic2l6ZSA9IFVzdHJsZW4oYnVmKTsKK1BDUkUyX1NJWkUgYnNpemUgPSBVc3RybGVuKGJ1
Zik7CitwY3JlMl9tYXRjaF9kYXRhICogbWQgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSgxLCBw
Y3JlX2dlbl9jdHgpOwogCiAvKiBkZWJ1Z19wcmludGYoIiVzOiBjaGVjayBmb3IgMHglMDR4XG4i
LCBfX0ZVTkNUSU9OX18sIGNoZWNrcyk7ICovCiAKICNpZm5kZWYgRElTQUJMRV9UTFMKIGlmICgg
IGNoZWNrcyAmIE9QVElPTl9UTFMKLSAgICYmIHBjcmVfZXhlYyhyZWdleF9TVEFSVFRMUywgTlVM
TCwgQ1MgYnVmLCBic2l6ZSwgMCwgUENSRV9FT1BULCBOVUxMLCAwKSA8IDApCisgICAmJiBwY3Jl
Ml9tYXRjaChyZWdleF9TVEFSVFRMUywKKwkJICAoUENSRTJfU1BUUilidWYsIGJzaXplLCAwLCBQ
Q1JFX0VPUFQsIG1kLCBwY3JlX210Y19jdHgpIDwgMCkKICNlbmRpZgogICBjaGVja3MgJj0gfk9Q
VElPTl9UTFM7CiAKIGlmICggIGNoZWNrcyAmIE9QVElPTl9JR05RCi0gICAmJiBwY3JlX2V4ZWMo
cmVnZXhfSUdOT1JFUVVPVEEsIE5VTEwsIENTIGJ1ZiwgYnNpemUsIDAsCi0JCVBDUkVfRU9QVCwg
TlVMTCwgMCkgPCAwKQorICAgJiYgcGNyZTJfbWF0Y2gocmVnZXhfSUdOT1JFUVVPVEEsCisJCSAg
KFBDUkUyX1NQVFIpYnVmLCBic2l6ZSwgMCwgUENSRV9FT1BULCBtZCwgcGNyZV9tdGNfY3R4KSA8
IDApCiAgIGNoZWNrcyAmPSB+T1BUSU9OX0lHTlE7CiAKIGlmICggIGNoZWNrcyAmIE9QVElPTl9D
SFVOS0lORwotICAgJiYgcGNyZV9leGVjKHJlZ2V4X0NIVU5LSU5HLCBOVUxMLCBDUyBidWYsIGJz
aXplLCAwLCBQQ1JFX0VPUFQsIE5VTEwsIDApIDwgMCkKKyAgICYmIHBjcmUyX21hdGNoKHJlZ2V4
X0NIVU5LSU5HLAorCQkgIChQQ1JFMl9TUFRSKWJ1ZiwgYnNpemUsIDAsIFBDUkVfRU9QVCwgbWQs
IHBjcmVfbXRjX2N0eCkgPCAwKQogICBjaGVja3MgJj0gfk9QVElPTl9DSFVOS0lORzsKIAogI2lm
bmRlZiBESVNBQkxFX1BSRFIKIGlmICggIGNoZWNrcyAmIE9QVElPTl9QUkRSCi0gICAmJiBwY3Jl
X2V4ZWMocmVnZXhfUFJEUiwgTlVMTCwgQ1MgYnVmLCBic2l6ZSwgMCwgUENSRV9FT1BULCBOVUxM
LCAwKSA8IDApCisgICAmJiBwY3JlMl9tYXRjaChyZWdleF9QUkRSLAorCQkgIChQQ1JFMl9TUFRS
KWJ1ZiwgYnNpemUsIDAsIFBDUkVfRU9QVCwgbWQsIHBjcmVfbXRjX2N0eCkgPCAwKQogI2VuZGlm
CiAgIGNoZWNrcyAmPSB+T1BUSU9OX1BSRFI7CiAKICNpZmRlZiBTVVBQT1JUX0kxOE4KIGlmICgg
IGNoZWNrcyAmIE9QVElPTl9VVEY4Ci0gICAmJiBwY3JlX2V4ZWMocmVnZXhfVVRGOCwgTlVMTCwg
Q1MgYnVmLCBic2l6ZSwgMCwgUENSRV9FT1BULCBOVUxMLCAwKSA8IDApCisgICAmJiBwY3JlMl9t
YXRjaChyZWdleF9VVEY4LAorCQkgIChQQ1JFMl9TUFRSKWJ1ZiwgYnNpemUsIDAsIFBDUkVfRU9Q
VCwgbWQsIHBjcmVfbXRjX2N0eCkgPCAwKQogI2VuZGlmCiAgIGNoZWNrcyAmPSB+T1BUSU9OX1VU
Rjg7CiAKIGlmICggIGNoZWNrcyAmIE9QVElPTl9EU04KLSAgICYmIHBjcmVfZXhlYyhyZWdleF9E
U04sIE5VTEwsIENTIGJ1ZiwgYnNpemUsIDAsIFBDUkVfRU9QVCwgTlVMTCwgMCkgPCAwKQorICAg
JiYgcGNyZTJfbWF0Y2gocmVnZXhfRFNOLAorCQkgIChQQ1JFMl9TUFRSKWJ1ZiwgYnNpemUsIDAs
IFBDUkVfRU9QVCwgbWQsIHBjcmVfbXRjX2N0eCkgPCAwKQogICBjaGVja3MgJj0gfk9QVElPTl9E
U047CiAKIGlmICggIGNoZWNrcyAmIE9QVElPTl9QSVBFCi0gICAmJiBwY3JlX2V4ZWMocmVnZXhf
UElQRUxJTklORywgTlVMTCwgQ1MgYnVmLCBic2l6ZSwgMCwKLQkJUENSRV9FT1BULCBOVUxMLCAw
KSA8IDApCisgICAmJiBwY3JlMl9tYXRjaChyZWdleF9QSVBFTElOSU5HLAorCQkgIChQQ1JFMl9T
UFRSKWJ1ZiwgYnNpemUsIDAsIFBDUkVfRU9QVCwgbWQsIHBjcmVfbXRjX2N0eCkgPCAwKQogICBj
aGVja3MgJj0gfk9QVElPTl9QSVBFOwogCiBpZiAoICBjaGVja3MgJiBPUFRJT05fU0laRQotICAg
JiYgcGNyZV9leGVjKHJlZ2V4X1NJWkUsIE5VTEwsIENTIGJ1ZiwgYnNpemUsIDAsIFBDUkVfRU9Q
VCwgTlVMTCwgMCkgPCAwKQorICAgJiYgcGNyZTJfbWF0Y2gocmVnZXhfU0laRSwKKwkJICAoUENS
RTJfU1BUUilidWYsIGJzaXplLCAwLCBQQ1JFX0VPUFQsIG1kLCBwY3JlX210Y19jdHgpIDwgMCkK
ICAgY2hlY2tzICY9IH5PUFRJT05fU0laRTsKIAogI2lmbmRlZiBESVNBQkxFX1BJUEVfQ09OTkVD
VAogaWYgKCAgY2hlY2tzICYgT1BUSU9OX0VBUkxZX1BJUEUKLSAgICYmIHBjcmVfZXhlYyhyZWdl
eF9FQVJMWV9QSVBFLCBOVUxMLCBDUyBidWYsIGJzaXplLCAwLAotCQlQQ1JFX0VPUFQsIE5VTEws
IDApIDwgMCkKKyAgICYmIHBjcmUyX21hdGNoKHJlZ2V4X0VBUkxZX1BJUEUsCisJCSAgKFBDUkUy
X1NQVFIpYnVmLCBic2l6ZSwgMCwgUENSRV9FT1BULCBtZCwgcGNyZV9tdGNfY3R4KSA8IDApCiAj
ZW5kaWYKICAgY2hlY2tzICY9IH5PUFRJT05fRUFSTFlfUElQRTsKIAorcGNyZTJfbWF0Y2hfZGF0
YV9mcmVlKG1kKTsKIC8qIGRlYnVnX3ByaW50ZigiJXM6IGZvdW5kICAgICAweCUwNHhcbiIsIF9f
RlVOQ1RJT05fXywgY2hlY2tzKTsgKi8KIHJldHVybiBjaGVja3M7CiB9CkBAIC0xODc3LDYgKzIw
MjQsMzYgQEAKIAogCiAKKyNpZmRlZiBTVVBQT1JUX0RBTkUKK3N0YXRpYyBpbnQKK2NoZWNrX2Zv
cmNlX2RhbmVfY29ubihzbXRwX2NvbnRleHQgKiBzeCwgc210cF90cmFuc3BvcnRfb3B0aW9uc19i
bG9jayAqIG9iKQoreworaW50IHJjOworaWYoICBzeC0+ZGFuZV9yZXF1aXJlZAorICB8fCB2ZXJp
ZnlfY2hlY2tfZ2l2ZW5faG9zdChDVVNTICZvYi0+aG9zdHNfdHJ5X2RhbmUsIHN4LT5jb25uX2Fy
Z3MuaG9zdCkgPT0gT0sKKyAgKQorICBzd2l0Y2ggKHJjID0gdGxzYV9sb29rdXAoc3gtPmNvbm5f
YXJncy5ob3N0LCAmc3gtPmNvbm5fYXJncy50bHNhX2Ruc2EsIHN4LT5kYW5lX3JlcXVpcmVkKSkK
KyAgICB7CisgICAgY2FzZSBPSzoJCXN4LT5jb25uX2FyZ3MuZGFuZSA9IFRSVUU7CisJCQlvYi0+
dGxzX3RlbXBmYWlsX3RyeWNsZWFyID0gRkFMU0U7CS8qIGZvcmNlIFRMUyAqLworCQkJb2ItPnRs
c19zbmkgPSBzeC0+Y29ubl9hcmdzLmhvc3QtPm5hbWU7IC8qIGZvcmNlIFNOSSAqLworCQkJYnJl
YWs7CisgICAgY2FzZSBGQUlMX0ZPUkNFRDoJYnJlYWs7CisgICAgZGVmYXVsdDoJCXNldF9lcnJu
b19ub2hvc3Qoc3gtPmFkZHJsaXN0LCBFUlJOT19ETlNERUZFUiwKKwkJCSAgICBzdHJpbmdfc3By
aW50ZigiREFORSBlcnJvcjogdGxzYSBsb29rdXAgJXMiLAorCQkJICAgICAgcmNfdG9fc3RyaW5n
KHJjKSksCisJCQkgICAgcmMsIEZBTFNFLCAmc3gtPmRlbGl2ZXJ5X3N0YXJ0KTsKKyMgaWZuZGVm
IERJU0FCTEVfRVZFTlQKKwkJCSh2b2lkKSBldmVudF9yYWlzZShzeC0+Y29ubl9hcmdzLnRibG9j
ay0+ZXZlbnRfYWN0aW9uLAorCQkJICBVUyJkYW5lOmZhaWwiLCBzeC0+ZGFuZV9yZXF1aXJlZAor
CQkJICAgID8gIFVTImRhbmUtcmVxdWlyZWQiIDogVVMiZG5zc2VjLWludmFsaWQiLAorCQkJICBO
VUxMKTsKKyMgZW5kaWYKKwkJCXJldHVybiByYzsKKyAgICB9CityZXR1cm4gT0s7Cit9CisjZW5k
aWYKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgpAQCAtMTg4NSw3ICsyMDYyLDcgQEAKIAogLyoKIEFyZ3VtZW50czoKLSAgY3R4CQkgIGNvbm5l
Y3Rpb24gY29udGV4dAorICBzeAkJICBjb25uZWN0aW9uIGNvbnRleHQKICAgc3VwcHJlc3NfdGxz
ICAgIGlmIFRSVUUsIGRvbid0IGF0dGVtcHQgYSBUTFMgY29ubmVjdGlvbiAtIHRoaXMgaXMgc2V0
IGZvcgogICAgICAgICAgICAgICAgICAgICBhIHNlY29uZCBhdHRlbXB0IGFmdGVyIFRMUyBpbml0
aWFsaXphdGlvbiBmYWlscwogCkBAIC0xOTA5LDQzICsyMDg2LDMxIEBACiB1c2NoYXIgKiB0bHNf
ZXJyc3RyOwogI2VuZGlmCiAKKy8qIE1hbnkgbGluZXMgb2YgY2xlYXJpbmcgaW5kaXZpZHVhbCBl
bGVtZW50cyBvZiAqc3ggdGhhdCB1c2VkIHRvCitiZSBoZXJlIGhhdmUgYmVlbiByZXBsYWNlZCBi
eSBhIGZ1bGwgbWVtc2V0IHRvIHplcm8gKGRlNDFhZmYwNTEpLgorVGhlcmUgYXJlIHR3byBjYWxs
ZXJzLCB0aGlzIGZpbGUgYW5kIHZlcmlmeS5jIC4gIE5vdyB3ZSBvbmx5IHNldAordXAgbm9uemVy
byBlbGVtZW50cy4gKi8KKwogc3gtPmNvbm5fYXJncy5vYiA9IG9iOwogCiBzeC0+bG10cCA9IHN0
cmNtcGljKG9iLT5wcm90b2NvbCwgVVMibG10cCIpID09IDA7CiBzeC0+c210cHMgPSBzdHJjbXBp
YyhvYi0+cHJvdG9jb2wsIFVTInNtdHBzIikgPT0gMDsKLS8qIHN4LT5vayA9IEZBTFNFOyAqLwog
c3gtPnNlbmRfcnNldCA9IFRSVUU7CiBzeC0+c2VuZF9xdWl0ID0gVFJVRTsKIHN4LT5zZXR0aW5n
X3VwID0gVFJVRTsKIHN4LT5lc210cCA9IFRSVUU7Ci0vKiBzeC0+ZXNtdHBfc2VudCA9IEZBTFNF
OyAqLwotI2lmZGVmIFNVUFBPUlRfSTE4TgotLyogc3gtPnV0ZjhfbmVlZGVkID0gRkFMU0U7ICov
Ci0jZW5kaWYKIHN4LT5kc25fYWxsX2xhc3Rob3AgPSBUUlVFOwogI2lmZGVmIFNVUFBPUlRfREFO
RQotLyogc3gtPmNvbm5fYXJncy5kYW5lID0gRkFMU0U7ICovCiBzeC0+ZGFuZV9yZXF1aXJlZCA9
CiAgIHZlcmlmeV9jaGVja19naXZlbl9ob3N0KENVU1MgJm9iLT5ob3N0c19yZXF1aXJlX2RhbmUs
IHN4LT5jb25uX2FyZ3MuaG9zdCkgPT0gT0s7CiAjZW5kaWYKLSNpZm5kZWYgRElTQUJMRV9QSVBF
X0NPTk5FQ1QKLS8qIHN4LT5lYXJseV9waXBlX2FjdGl2ZSA9IHN4LT5lYXJseV9waXBlX29rID0g
RkFMU0U7ICovCi0vKiBzeC0+ZWhsb19yZXNwLmNsZWFydGV4dF9mZWF0dXJlcyA9IHN4LT5laGxv
X3Jlc3AuY3J5cHRlZF9mZWF0dXJlcyA9IDA7ICovCi0vKiBzeC0+cGVuZGluZ19CQU5ORVIgPSBz
eC0+cGVuZGluZ19FSExPID0gc3gtPnBlbmRpbmdfTUFJTCA9IEZBTFNFOyAqLwotI2VuZGlmCiAK
LWlmICgoc3gtPm1heF9yY3B0ID0gc3gtPmNvbm5fYXJncy50YmxvY2stPm1heF9hZGRyZXNzZXMp
ID09IDApIHN4LT5tYXhfcmNwdCA9IDk5OTk5OTsKLS8qIHN4LT5wZWVyX29mZmVyZWQgPSAwOyAq
LwotLyogc3gtPmF2b2lkX29wdGlvbiA9IDA7ICovCitpZiAoKHN4LT5tYXhfbWFpbCA9IHN4LT5j
b25uX2FyZ3MudGJsb2NrLT5jb25uZWN0aW9uX21heF9tZXNzYWdlcykgPT0gMCkgc3gtPm1heF9t
YWlsID0gOTk5OTk5OworaWYgKChzeC0+bWF4X3JjcHQgPSBzeC0+Y29ubl9hcmdzLnRibG9jay0+
bWF4X2FkZHJlc3NlcykgPT0gMCkgICAgICAgICAgIHN4LT5tYXhfcmNwdCA9IDk5OTk5OTsKIHN4
LT5pZ3F1b3RzdHIgPSBVUyIiOwogaWYgKCFzeC0+aGVsb19kYXRhKSBzeC0+aGVsb19kYXRhID0g
b2ItPmhlbG9fZGF0YTsKLSNpZmRlZiBFWFBFUklNRU5UQUxfRFNOX0lORk8KLS8qIHN4LT5zbXRw
X2dyZWV0aW5nID0gTlVMTDsgKi8KLS8qIHN4LT5oZWxvX3Jlc3BvbnNlID0gTlVMTDsgKi8KLSNl
bmRpZgogCiBzbXRwX2NvbW1hbmQgPSBVUyJpbml0aWFsIGNvbm5lY3Rpb24iOwotLyogc3gtPmJ1
ZmZlclswXSA9ICdcMCc7ICovCiAKIC8qIFNldCB1cCB0aGUgYnVmZmVyIGZvciByZWFkaW5nIFNN
VFAgcmVzcG9uc2UgcGFja2V0cy4gKi8KIApAQCAtMTk1OSw5ICsyMTI0LDYgQEAKIHN4LT5vdXRi
bG9jay5idWZmZXIgPSBzeC0+b3V0YnVmZmVyOwogc3gtPm91dGJsb2NrLmJ1ZmZlcnNpemUgPSBz
aXplb2Yoc3gtPm91dGJ1ZmZlcik7CiBzeC0+b3V0YmxvY2sucHRyID0gc3gtPm91dGJ1ZmZlcjsK
LS8qIHN4LT5vdXRibG9jay5jbWRfY291bnQgPSAwOyAqLwotLyogc3gtPm91dGJsb2NrLmF1dGhl
bnRpY2F0aW5nID0gRkFMU0U7ICovCi0vKiBzeC0+b3V0YmxvY2suY29ubl9hcmdzID0gTlVMTDsg
Ki8KIAogLyogUmVzZXQgdGhlIHBhcmFtZXRlcnMgb2YgYSBUTFMgc2Vzc2lvbi4gKi8KIApAQCAt
MTk3NCw3ICsyMTM2LDcgQEAKIHRsc19vdXQuc25pID0gTlVMTDsKICNlbmRpZgogdGxzX291dC5v
Y3NwID0gT0NTUF9OT1RfUkVROwotI2lmZGVmIEVYUEVSSU1FTlRBTF9UTFNfUkVTVU1FCisjaWZu
ZGVmIERJU0FCTEVfVExTX1JFU1VNRQogdGxzX291dC5yZXN1bXB0aW9uID0gMDsKICNlbmRpZgog
dGxzX291dC52ZXIgPSBOVUxMOwpAQCAtMjAwMywzMiArMjE2NSwxNCBAQAogICBjb25zdCB1c2No
YXIgKiBzbmkgPSBVUyIiOwogCiAjIGlmZGVmIFNVUFBPUlRfREFORQotICAvKiBDaGVjayBpZiB0
aGUgbWVzc2FnZSB3aWxsIGJlIERBTkUtdmVyaWZpZWQ7IGlmIHNvIGZvcmNlIGl0cyBTTkkgKi8K
KyAgLyogQ2hlY2sgaWYgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBEQU5FLXZlcmlmaWVkOyBpZiBzbyBm
b3JjZSBUTFMgYW5kIGl0cyBTTkkgKi8KIAogICB0bHNfb3V0LmRhbmVfdmVyaWZpZWQgPSBGQUxT
RTsKICAgc210cF9wb3J0X2Zvcl9jb25uZWN0KHN4LT5jb25uX2FyZ3MuaG9zdCwgc3gtPnBvcnQp
OwogICBpZiAoICBzeC0+Y29ubl9hcmdzLmhvc3QtPmRuc3NlYyA9PSBEU19ZRVMKLSAgICAgJiYg
KCAgc3gtPmRhbmVfcmVxdWlyZWQKLQl8fCB2ZXJpZnlfY2hlY2tfZ2l2ZW5faG9zdChDVVNTICZv
Yi0+aG9zdHNfdHJ5X2RhbmUsIHN4LT5jb25uX2FyZ3MuaG9zdCkgPT0gT0sKLSAgICAgKSAgKQot
ICAgIHN3aXRjaCAocmMgPSB0bHNhX2xvb2t1cChzeC0+Y29ubl9hcmdzLmhvc3QsICZzeC0+Y29u
bl9hcmdzLnRsc2FfZG5zYSwgc3gtPmRhbmVfcmVxdWlyZWQpKQotICAgICAgewotICAgICAgY2Fz
ZSBPSzoJCXN4LT5jb25uX2FyZ3MuZGFuZSA9IFRSVUU7Ci0JCQlvYi0+dGxzX3RlbXBmYWlsX3Ry
eWNsZWFyID0gRkFMU0U7CS8qIGZvcmNlIFRMUyAqLwotCQkJb2ItPnRsc19zbmkgPSBzeC0+Zmly
c3RfYWRkci0+ZG9tYWluOwkvKiBmb3JjZSBTTkkgKi8KLQkJCWJyZWFrOwotICAgICAgY2FzZSBG
QUlMX0ZPUkNFRDoJYnJlYWs7Ci0gICAgICBkZWZhdWx0OgkJc2V0X2Vycm5vX25vaG9zdChzeC0+
YWRkcmxpc3QsIEVSUk5PX0ROU0RFRkVSLAotCQkJICAgICAgc3RyaW5nX3NwcmludGYoIkRBTkUg
ZXJyb3I6IHRsc2EgbG9va3VwICVzIiwKLQkJCQlyY190b19zdHJpbmcocmMpKSwKLQkJCSAgICAg
IHJjLCBGQUxTRSwgJnN4LT5kZWxpdmVyeV9zdGFydCk7Ci0jICBpZm5kZWYgRElTQUJMRV9FVkVO
VAotCQkJICAgICh2b2lkKSBldmVudF9yYWlzZShzeC0+Y29ubl9hcmdzLnRibG9jay0+ZXZlbnRf
YWN0aW9uLAotCQkJICAgICAgVVMiZGFuZTpmYWlsIiwgc3gtPmRhbmVfcmVxdWlyZWQKLQkJCQk/
ICBVUyJkYW5lLXJlcXVpcmVkIiA6IFVTImRuc3NlYy1pbnZhbGlkIik7Ci0jICBlbmRpZgotCQkJ
ICAgIHJldHVybiByYzsKLSAgICAgIH0KKyAgICAgJiYgKHJjID0gY2hlY2tfZm9yY2VfZGFuZV9j
b25uKHN4LCBvYikpICE9IE9LCisgICAgICkKKyAgICByZXR1cm4gcmM7CiAjIGVuZGlmCiAKICAg
LyogSWYgdGhlIFNOSSBvciB0aGUgREFORSBzdGF0dXMgcmVxdWlyZWQgZm9yIHRoZSBuZXcgbWVz
c2FnZSBkaWZmZXJzIGZyb20gdGhlCkBAIC0yMDU2LDcgKzIyMDAsNyBAQAogICAgIERFQlVHKERf
dHJhbnNwb3J0KQogICAgICAgZGVidWdfcHJpbnRmKCJDbG9zaW5nIHByb3hpZWQtVExTIGNvbm5l
Y3Rpb24gZHVlIHRvIFNOSSBtaXNtYXRjaFxuIik7CiAKLSAgICBIREVCVUcoRF90cmFuc3BvcnR8
RF9hY2x8RF92KSBkZWJ1Z19wcmludGZfaW5kZW50KCIgIFNNVFA+PiBRVUlUXG4iKTsKKyAgICBz
bXRwX2RlYnVnX2NtZChVUyJRVUlUIiwgMCk7CiAgICAgd3JpdGUoMCwgIlFVSVRcclxuIiwgNik7
CiAgICAgY2xvc2UoMCk7CiAgICAgY29udGludWVfaG9zdG5hbWUgPSBjb250aW51ZV9wcm94eV9j
aXBoZXIgPSBOVUxMOwpAQCAtMjA3Nyw2ICsyMjIxLDExIEBACiAgIGlmIChzeC0+dmVyaWZ5KQog
ICAgIEhERUJVRyhEX3ZlcmlmeSkgZGVidWdfcHJpbnRmKCJpbnRlcmZhY2U9JXMgcG9ydD0lZFxu
Iiwgc3gtPmNvbm5fYXJncy5pbnRlcmZhY2UsIHN4LT5wb3J0KTsKIAorICAvKiBBcnJhbmdlIHRv
IHJlcG9ydCB0byBjYWxsaW5nIHByb2Nlc3MgdGhpcyBpcyBhIG5ldyBjb25uZWN0aW9uICovCisK
KyAgY2xlYXJmbGFnKHN4LT5maXJzdF9hZGRyLCBhZl9jb250X2Nvbm4pOworICBzZXRmbGFnKHN4
LT5maXJzdF9hZGRyLCBhZl9uZXdfY29ubik7CisKICAgLyogR2V0IHRoZSBhY3R1YWwgcG9ydCB0
aGUgY29ubmVjdGlvbiB3aWxsIHVzZSwgaW50byBzeC0+Y29ubl9hcmdzLmhvc3QgKi8KIAogICBz
bXRwX3BvcnRfZm9yX2Nvbm5lY3Qoc3gtPmNvbm5fYXJncy5ob3N0LCBzeC0+cG9ydCk7CkBAIC0y
MDkwLDI3ICsyMjM5LDggQEAKICAgICBpZiAoc3gtPmNvbm5fYXJncy5ob3N0LT5kbnNzZWMgPT0g
RFNfWUVTKQogICAgICAgewogICAgICAgaW50IHJjOwotICAgICAgaWYoICBzeC0+ZGFuZV9yZXF1
aXJlZAotCXx8IHZlcmlmeV9jaGVja19naXZlbl9ob3N0KENVU1MgJm9iLT5ob3N0c190cnlfZGFu
ZSwgc3gtPmNvbm5fYXJncy5ob3N0KSA9PSBPSwotCSkKLQlzd2l0Y2ggKHJjID0gdGxzYV9sb29r
dXAoc3gtPmNvbm5fYXJncy5ob3N0LCAmc3gtPmNvbm5fYXJncy50bHNhX2Ruc2EsIHN4LT5kYW5l
X3JlcXVpcmVkKSkKLQkgIHsKLQkgIGNhc2UgT0s6CQlzeC0+Y29ubl9hcmdzLmRhbmUgPSBUUlVF
OwotCQkJCW9iLT50bHNfdGVtcGZhaWxfdHJ5Y2xlYXIgPSBGQUxTRTsJLyogZm9yY2UgVExTICov
Ci0JCQkJb2ItPnRsc19zbmkgPSBzeC0+Zmlyc3RfYWRkci0+ZG9tYWluOwkvKiBmb3JjZSBTTkkg
Ki8KLQkJCQlicmVhazsKLQkgIGNhc2UgRkFJTF9GT1JDRUQ6CWJyZWFrOwotCSAgZGVmYXVsdDoJ
CXNldF9lcnJub19ub2hvc3Qoc3gtPmFkZHJsaXN0LCBFUlJOT19ETlNERUZFUiwKLQkJCQkgIHN0
cmluZ19zcHJpbnRmKCJEQU5FIGVycm9yOiB0bHNhIGxvb2t1cCAlcyIsCi0JCQkJICAgIHJjX3Rv
X3N0cmluZyhyYykpLAotCQkJCSAgcmMsIEZBTFNFLCAmc3gtPmRlbGl2ZXJ5X3N0YXJ0KTsKLSMg
aWZuZGVmIERJU0FCTEVfRVZFTlQKLQkJCQkodm9pZCkgZXZlbnRfcmFpc2Uoc3gtPmNvbm5fYXJn
cy50YmxvY2stPmV2ZW50X2FjdGlvbiwKLQkJCQkgIFVTImRhbmU6ZmFpbCIsIHN4LT5kYW5lX3Jl
cXVpcmVkCi0JCQkJICAgID8gIFVTImRhbmUtcmVxdWlyZWQiIDogVVMiZG5zc2VjLWludmFsaWQi
KTsKLSMgZW5kaWYKLQkJCQlyZXR1cm4gcmM7Ci0JICB9CisgICAgICBpZiAoKHJjID0gY2hlY2tf
Zm9yY2VfZGFuZV9jb25uKHN4LCBvYikpICE9IE9LKQorCXJldHVybiByYzsKICAgICAgIH0KICAg
ICBlbHNlIGlmIChzeC0+ZGFuZV9yZXF1aXJlZCkKICAgICAgIHsKQEAgLTIxMTksNyArMjI0OSw3
IEBACiAJRkFJTCwgRkFMU0UsICZzeC0+ZGVsaXZlcnlfc3RhcnQpOwogIyBpZm5kZWYgRElTQUJM
RV9FVkVOVAogICAgICAgKHZvaWQpIGV2ZW50X3JhaXNlKHN4LT5jb25uX2FyZ3MudGJsb2NrLT5l
dmVudF9hY3Rpb24sCi0JVVMiZGFuZTpmYWlsIiwgVVMiZGFuZS1yZXF1aXJlZCIpOworCVVTImRh
bmU6ZmFpbCIsIFVTImRhbmUtcmVxdWlyZWQiLCBOVUxMKTsKICMgZW5kaWYKICAgICAgIHJldHVy
biBGQUlMOwogICAgICAgfQpAQCAtMjEzMCw3ICsyMjYwLDEzIEBACiAKICAgc3gtPmNjdHgudGxz
X2N0eCA9IE5VTEw7CiAgIHN4LT5pbmJsb2NrLmNjdHggPSBzeC0+b3V0YmxvY2suY2N0eCA9ICZz
eC0+Y2N0eDsKKyNpZmRlZiBFWFBFUklNRU5UQUxfRVNNVFBfTElNSVRTCisgIHN4LT5wZWVyX2xp
bWl0X21haWwgPSBzeC0+cGVlcl9saW1pdF9yY3B0ID0gc3gtPnBlZXJfbGltaXRfcmNwdGRvbSA9
CisjZW5kaWYKICAgc3gtPmF2b2lkX29wdGlvbiA9IHN4LT5wZWVyX29mZmVyZWQgPSBzbXRwX3Bl
ZXJfb3B0aW9ucyA9IDA7CisjaWZuZGVmIERJU0FCTEVfQ0xJRU5UX0NNRF9MT0cKKyAgY2xpZW50
X2NtZF9sb2cgPSBOVUxMOworI2VuZGlmCiAKICNpZm5kZWYgRElTQUJMRV9QSVBFX0NPTk5FQ1QK
ICAgaWYgKCAgdmVyaWZ5X2NoZWNrX2dpdmVuX2hvc3QoQ1VTUyAmb2ItPmhvc3RzX3BpcGVfY29u
bmVjdCwKQEAgLTIxNDAsNiArMjI3Niw3IEBACiAgICAgdGhlIGhlbG8gc3RyaW5nIG1pZ2h0IHVz
ZSBpdCBhdm9pZCBkb2luZyBlYXJseS1waXBlbGluaW5nLiAqLwogCiAgICAgaWYgKCAgIXN4LT5o
ZWxvX2RhdGEKKyAgICAgICB8fCBzeC0+Y29ubl9hcmdzLmludGVyZmFjZQogICAgICAgIHx8ICFV
c3Ryc3RyKHN4LT5oZWxvX2RhdGEsICIkc2VuZGluZ19pcF9hZGRyZXNzIikKICAgICAgICB8fCBV
c3Ryc3RyKHN4LT5oZWxvX2RhdGEsICJkZWY6c2VuZGluZ19pcF9hZGRyZXNzIikKICAgICAgICAp
CkBAIC0yMTQ5LDIxICsyMjg2LDI5IEBACiAJICYmIHN4LT5laGxvX3Jlc3AuY2xlYXJ0ZXh0X2Zl
YXR1cmVzICYgT1BUSU9OX0VBUkxZX1BJUEUpCiAJewogCURFQlVHKERfdHJhbnNwb3J0KQotCSAg
ZGVidWdfcHJpbnRmKCJVc2luZyBjYWNoZWQgY2xlYXJ0ZXh0IFBJUEVfQ09OTkVDVFxuIik7CisJ
ICBkZWJ1Z19wcmludGYoIlVzaW5nIGNhY2hlZCBjbGVhcnRleHQgUElQRUNPTk5FQ1RcbiIpOwog
CXN4LT5lYXJseV9waXBlX2FjdGl2ZSA9IFRSVUU7CiAJc3gtPnBlZXJfb2ZmZXJlZCA9IHN4LT5l
aGxvX3Jlc3AuY2xlYXJ0ZXh0X2ZlYXR1cmVzOwogCX0KICAgICAgIH0KICAgICBlbHNlIERFQlVH
KERfdHJhbnNwb3J0KQotICAgICAgZGVidWdfcHJpbnRmKCJoZWxvIG5lZWRzICRzZW5kaW5nX2lw
X2FkZHJlc3NcbiIpOworICAgICAgZGVidWdfcHJpbnRmKCJoZWxvIG5lZWRzICRzZW5kaW5nX2lw
X2FkZHJlc3M7IGF2b2lkIGVhcmx5LXBpcGVsaW5pbmdcbiIpOwogCiBQSVBFX0NPTk5FQ1RfUkVU
Ulk6CiAgIGlmIChzeC0+ZWFybHlfcGlwZV9hY3RpdmUpCisgICAgewogICAgIHN4LT5vdXRibG9j
ay5jb25uX2FyZ3MgPSAmc3gtPmNvbm5fYXJnczsKKyAgICAodm9pZCkgc210cF9ib3VuZHNvY2so
JnN4LT5jb25uX2FyZ3MpOworICAgIH0KICAgZWxzZQogI2VuZGlmCiAgICAgewotICAgIGlmICgo
c3gtPmNjdHguc29jayA9IHNtdHBfY29ubmVjdCgmc3gtPmNvbm5fYXJncywgTlVMTCkpIDwgMCkK
KyAgICBibG9iIGxhenlfY29ubiA9IHsuZGF0YSA9IE5VTEx9OworICAgIC8qIEZvciBUTFMtY29u
bmVjdCwgYSBURk8gbGF6eS1jb25uZWN0IGlzIHVzZWZ1bCBzaW5jZSB0aGUgQ2xpZW50IEhlbGxv
CisgICAgY2FuIGdvIG9uIHRoZSBUQ1AgU1lOLiAqLworCisgICAgaWYgKChzeC0+Y2N0eC5zb2Nr
ID0gc210cF9jb25uZWN0KCZzeC0+Y29ubl9hcmdzLAorCQkJICAgIHN4LT5zbXRwcyA/ICZsYXp5
X2Nvbm4gOiBOVUxMKSkgPCAwKQogICAgICAgewogICAgICAgc2V0X2Vycm5vX25vaG9zdChzeC0+
YWRkcmxpc3QsCiAJZXJybm8gPT0gRVRJTUVET1VUID8gRVJSTk9fQ09OTkVDVFRJTUVPVVQgOiBl
cnJubywKQEAgLTIxNzIsMTIgKzIzMTcsMTcgQEAKICAgICAgIHN4LT5zZW5kX3F1aXQgPSBGQUxT
RTsKICAgICAgIHJldHVybiBERUZFUjsKICAgICAgIH0KKyNpZmRlZiBUQ1BfUVVJQ0tBQ0sKKyAg
ICAodm9pZCkgc2V0c29ja29wdChzeC0+Y2N0eC5zb2NrLCBJUFBST1RPX1RDUCwgVENQX1FVSUNL
QUNLLCBVUyAmb2ZmLAorCQkJc2l6ZW9mKG9mZikpOworI2VuZGlmCiAgICAgfQogICAvKiBFeHBh
bmQgdGhlIGdyZWV0aW5nIG1lc3NhZ2Ugd2hpbGUgd2FpdGluZyBmb3IgdGhlIGluaXRpYWwgcmVz
cG9uc2UuIChNYWtlcwogICBzZW5zZSBpZiBoZWxvX2RhdGEgY29udGFpbnMgJHtsb29rdXAgZG5z
ZGIgLi4ufSBzdHVmZikuIFRoZSBleHBhbnNpb24gaXMKLSAgZGVsYXllZCB0aWxsIGhlcmUgc28g
dGhhdCAkc2VuZGluZ19pbnRlcmZhY2UgYW5kICRzZW5kaW5nX3BvcnQgYXJlIHNldC4gKi8KLS8q
WFhYIGVhcmx5LXBpcGU6IHRoZXkgc3RpbGwgd2lsbCBub3QgYmUuIElzIHRoZXJlIGFueSB3YXkg
dG8gZmluZCBvdXQgd2hhdCB0aGV5Ci13aWxsIGJlPyAgU29tZWhvdyBJIGRvdWJ0IGl0LiAqLwor
ICBkZWxheWVkIHRpbGwgaGVyZSBzbyB0aGF0ICRzZW5kaW5nX2lwX2FkZHJlc3MgYW5kICRzZW5k
aW5nX3BvcnQgYXJlIHNldC4KKyAgVGhvc2Ugd2lsbCBiZSBrbm93biBldmVuIGZvciBhIFRGTyBs
YXp5LWNvbm5lY3QsIGhhdmluZyBiZWVuIHNldCBieSB0aGUgYmluZCgpLgorICBGb3IgZWFybHkt
cGlwZSwgd2UgYXJlIG9rIGlmIGJpbmRpbmcgdG8gYSBsb2NhbCBpbnRlcmZhY2U7IG90aGVyd2lz
ZSAoaWYKKyAgJHNlbmRpbmdfaXBfYWRkcmVzcyBpcyBzZWVuIGluIGhlbG9fZGF0YSkgd2UgZGlz
YWJsZWQgZWFybHktcGlwZSBhYm92ZS4gKi8KIAogICBpZiAoc3gtPmhlbG9fZGF0YSkKICAgICBp
ZiAoIShzeC0+aGVsb19kYXRhID0gZXhwYW5kX3N0cmluZyhzeC0+aGVsb19kYXRhKSkpCkBAIC0y
MjE3LDEwICsyMzY3LDYgQEAKICAgICBlbHNlCiAjZW5kaWYKICAgICAgIHsKLSNpZmRlZiBUQ1Bf
UVVJQ0tBQ0sKLSAgICAgICh2b2lkKSBzZXRzb2Nrb3B0KHN4LT5jY3R4LnNvY2ssIElQUFJPVE9f
VENQLCBUQ1BfUVVJQ0tBQ0ssIFVTICZvZmYsCi0JCQlzaXplb2Yob2ZmKSk7Ci0jZW5kaWYKICAg
ICAgIGlmICghc210cF9yZWFwX2Jhbm5lcihzeCkpCiAJZ290byBSRVNQT05TRV9GQUlMRUQ7CiAg
ICAgICB9CkBAIC0yMjMwLDcgKzIzNzYsNyBAQAogICAgICAgdXNjaGFyICogczsKICAgICAgIGxv
b2t1cF9kbnNzZWNfYXV0aGVudGljYXRlZCA9IHN4LT5jb25uX2FyZ3MuaG9zdC0+ZG5zc2VjPT1E
U19ZRVMgPyBVUyJ5ZXMiCiAJOiBzeC0+Y29ubl9hcmdzLmhvc3QtPmRuc3NlYz09RFNfTk8gPyBV
UyJubyIgOiBOVUxMOwotICAgICAgcyA9IGV2ZW50X3JhaXNlKHN4LT5jb25uX2FyZ3MudGJsb2Nr
LT5ldmVudF9hY3Rpb24sIFVTInNtdHA6Y29ubmVjdCIsIHN4LT5idWZmZXIpOworICAgICAgcyA9
IGV2ZW50X3JhaXNlKHN4LT5jb25uX2FyZ3MudGJsb2NrLT5ldmVudF9hY3Rpb24sIFVTInNtdHA6
Y29ubmVjdCIsIHN4LT5idWZmZXIsIE5VTEwpOwogICAgICAgaWYgKHMpCiAJewogCXNldF9lcnJu
b19ub2hvc3Qoc3gtPmFkZHJsaXN0LCBFUlJOT19FWFBBTkRGQUlMLApAQCAtMjQwMyw2ICsyNTQ5
LDEzIEBACiAJICApCiAjZW5kaWYKIAkpOworI2lmZGVmIEVYUEVSSU1FTlRBTF9FU01UUF9MSU1J
VFMKKyAgICAgIGlmICh0bHNfb3V0LmFjdGl2ZS5zb2NrID49IDAgfHwgIShzeC0+cGVlcl9vZmZl
cmVkICYgT1BUSU9OX1RMUykpCisJeworCWVobG9fcmVzcG9uc2VfbGltaXRzX3JlYWQoc3gpOwor
CWVobG9fcmVzcG9uc2VfbGltaXRzX2FwcGx5KHN4KTsKKwl9CisjZW5kaWYKICNpZm5kZWYgRElT
QUJMRV9QSVBFX0NPTk5FQ1QKICAgICAgIGlmIChzeC0+ZWFybHlfcGlwZV9vaykKIAl7CkBAIC0y
NDExLDEyICsyNTY0LDEzIEBACiAJaWYgKCAgKHN4LT5wZWVyX29mZmVyZWQgJiAoT1BUSU9OX1BJ
UEUgfCBPUFRJT05fRUFSTFlfUElQRSkpCiAJICAgPT0gKE9QVElPTl9QSVBFIHwgT1BUSU9OX0VB
UkxZX1BJUEUpKQogCSAgewotCSAgREVCVUcoRF90cmFuc3BvcnQpIGRlYnVnX3ByaW50ZigiUElQ
RV9DT05ORUNUIHVzYWJsZSBpbiBmdXR1cmUgZm9yIHRoaXMgSVBcbiIpOworCSAgREVCVUcoRF90
cmFuc3BvcnQpIGRlYnVnX3ByaW50ZigiUElQRUNPTk5FQ1QgdXNhYmxlIGluIGZ1dHVyZSBmb3Ig
dGhpcyBJUFxuIik7CiAJICBzeC0+ZWhsb19yZXNwLmNsZWFydGV4dF9hdXRocyA9IHN0dWR5X2Vo
bG9fYXV0aHMoc3gpOwogCSAgd3JpdGVfZWhsb19jYWNoZV9lbnRyeShzeCk7CiAJICB9CiAJfQog
I2VuZGlmCisgICAgICBlaGxvX3Jlc3BvbnNlX2xic2VydmVyKHN4LCBvYik7CiAgICAgICB9CiAK
ICAgLyogU2V0IHRsc19vZmZlcmVkIGlmIHRoZSByZXNwb25zZSB0byBFSExPIHNwZWNpZmllcyBz
dXBwb3J0IGZvciBTVEFSVFRMUy4gKi8KQEAgLTI0NTcsNiArMjYxMSwxMyBAQAogICBzeC0+aW5i
bG9jay5jY3R4ID0gc3gtPm91dGJsb2NrLmNjdHggPSAmc3gtPmNjdHg7CiAgIHNtdHBfY29tbWFu
ZCA9IGJpZ19idWZmZXI7CiAgIHN4LT5wZWVyX29mZmVyZWQgPSBzbXRwX3BlZXJfb3B0aW9uczsK
KyNpZmRlZiBFWFBFUklNRU5UQUxfRVNNVFBfTElNSVRTCisgIC8qIExpbWl0cyBwYXNzZWQgYnkg
Y21kbGluZSBvdmVyIGV4ZWMuICovCisgIGVobG9fbGltaXRzX2FwcGx5KHN4LAorCQkgICAgc3gt
PnBlZXJfbGltaXRfbWFpbCA9IGNvbnRpbnVlX2xpbWl0X21haWwsCisJCSAgICBzeC0+cGVlcl9s
aW1pdF9yY3B0ID0gY29udGludWVfbGltaXRfcmNwdCwKKwkJICAgIHN4LT5wZWVyX2xpbWl0X3Jj
cHRkb20gPSBjb250aW51ZV9saW1pdF9yY3B0ZG9tKTsKKyNlbmRpZgogICBzeC0+aGVsb19kYXRh
ID0gTlVMTDsJCS8qIGVuc3VyZSB3ZSByZS1leHBhbmQgb2ItPmhlbG9fZGF0YSAqLwogCiAgIC8q
IEZvciBhIGNvbnRpbnVlZCBjb25uZWN0aW9uIHdpdGggVExTIGJlaW5nIHByb3hpZWQgZm9yIHVz
LCBvciBhCkBAIC0yNDk4LDE2ICsyNjU5LDIwIEBACiAKICNpZm5kZWYgRElTQUJMRV9QSVBFX0NP
Tk5FQ1QKICAgLyogSWYgZG9pbmcgZWFybHktcGlwZWxpbmluZyByZWFwIHRoZSBiYW5uZXIgYW5k
IEVITE8tcmVzcG9uc2UgYnV0IGxlYXZlCi0gIHRoZSByZXNwb25zZSBmb3IgdGhlIFNUQVJUVExT
IHdlIGp1c3Qgc2VudCBhbG9uZS4gKi8KKyAgdGhlIHJlc3BvbnNlIGZvciB0aGUgU1RBUlRUTFMg
d2UganVzdCBzZW50IGFsb25lLiAgT24gZmFpbCwgYXNzdW1lIHdyb25nCisgIGNhY2hlZCBjYXBh
YmlsaXR5IGFuZCByZXRyeSB3aXRoIHRoZSBwaXBlbGluaW5nIGRpc2FibGVkLiAqLwogCi0gIGlm
IChzeC0+ZWFybHlfcGlwZV9hY3RpdmUgJiYgc3luY19yZXNwb25zZXMoc3gsIDIsIDApICE9IDAp
CisgIGlmIChzeC0+ZWFybHlfcGlwZV9hY3RpdmUpCiAgICAgewotICAgIEhERUJVRyhEX3RyYW5z
cG9ydCkKLSAgICAgIGRlYnVnX3ByaW50ZigiZmFpbGVkIHJlYXBpbmcgcGlwZWxpbmVkIGNtZCBy
ZXNwb25zZXNcbiIpOwotICAgIGNsb3NlKHN4LT5jY3R4LnNvY2spOwotICAgIHN4LT5jY3R4LnNv
Y2sgPSAtMTsKLSAgICBzeC0+ZWFybHlfcGlwZV9hY3RpdmUgPSBGQUxTRTsKLSAgICBnb3RvIFBJ
UEVfQ09OTkVDVF9SRVRSWTsKKyAgICBpZiAoc3luY19yZXNwb25zZXMoc3gsIDIsIDApICE9IDAp
CisgICAgICB7CisgICAgICBIREVCVUcoRF90cmFuc3BvcnQpCisJZGVidWdfcHJpbnRmKCJmYWls
ZWQgcmVhcGluZyBwaXBlbGluZWQgY21kIHJlc3BvbnNlc1xuIik7CisgICAgICBjbG9zZShzeC0+
Y2N0eC5zb2NrKTsKKyAgICAgIHN4LT5jY3R4LnNvY2sgPSAtMTsKKyAgICAgIHN4LT5lYXJseV9w
aXBlX2FjdGl2ZSA9IEZBTFNFOworICAgICAgZ290byBQSVBFX0NPTk5FQ1RfUkVUUlk7CisgICAg
ICB9CiAgICAgfQogI2VuZGlmCiAKQEAgLTI1MzYsMTQgKzI3MDEsMTMgQEAKICAgZWxzZQogICBU
TFNfTkVHT1RJQVRFOgogICAgIHsKKyAgICBzeC0+Y29ubl9hcmdzLnNlbmRpbmdfaXBfYWRkcmVz
cyA9IHNlbmRpbmdfaXBfYWRkcmVzczsKICAgICBpZiAoIXRsc19jbGllbnRfc3RhcnQoJnN4LT5j
Y3R4LCAmc3gtPmNvbm5fYXJncywgc3gtPmFkZHJsaXN0LCAmdGxzX291dCwgJnRsc19lcnJzdHIp
KQogICAgICAgewogICAgICAgLyogVExTIG5lZ290aWF0aW9uIGZhaWxlZDsgZ2l2ZSBhbiBlcnJv
ci4gRnJvbSBvdXRzaWRlLCB0aGlzIGZ1bmN0aW9uIG1heQogICAgICAgYmUgY2FsbGVkIGFnYWlu
IHRvIHRyeSBpbiBjbGVhciBvbiBhIG5ldyBjb25uZWN0aW9uLCBpZiB0aGUgb3B0aW9ucyBwZXJt
aXQKICAgICAgIGl0IGZvciB0aGlzIGhvc3QuICovCi0jaWZkZWYgVVNFX0dOVVRMUwotICBHTlVU
TFNfQ09OTl9GQUlMRUQ6Ci0jZW5kaWYKKyAgVExTX0NPTk5fRkFJTEVEOgogICAgICAgREVCVUco
RF90bHMpIGRlYnVnX3ByaW50ZigiVExTIHNlc3Npb24gZmFpbDogJXNcbiIsIHRsc19lcnJzdHIp
OwogCiAjIGlmZGVmIFNVUFBPUlRfREFORQpAQCAtMjU1NCw3ICsyNzE4LDcgQEAKIAkgIHN4LT5j
b25uX2FyZ3MuaG9zdC0+bmFtZSwgc3gtPmNvbm5fYXJncy5ob3N0LT5hZGRyZXNzLCB0bHNfZXJy
c3RyKTsKICMgIGlmbmRlZiBESVNBQkxFX0VWRU5UCiAJKHZvaWQpIGV2ZW50X3JhaXNlKHN4LT5j
b25uX2FyZ3MudGJsb2NrLT5ldmVudF9hY3Rpb24sCi0JICBVUyJkYW5lOmZhaWwiLCBVUyJ2YWxp
ZGF0aW9uLWZhaWx1cmUiKTsJLyogY291bGQgZG8gd2l0aCBiZXR0ZXIgZGV0YWlsICovCisJICBV
UyJkYW5lOmZhaWwiLCBVUyJ2YWxpZGF0aW9uLWZhaWx1cmUiLCBOVUxMKTsJLyogY291bGQgZG8g
d2l0aCBiZXR0ZXIgZGV0YWlsICovCiAjICBlbmRpZgogCX0KICMgZW5kaWYKQEAgLTI1NjQsOCAr
MjcyOCwyNSBAQAogICAgICAgc3gtPnNlbmRfcXVpdCA9IEZBTFNFOwogICAgICAgZ290byBUTFNf
RkFJTEVEOwogICAgICAgfQorICAgIHN4LT5zZW5kX3Rsc2Nsb3NlID0gVFJVRTsKKworICAgIC8q
IFRMUyBzZXNzaW9uIGlzIHNldCB1cC4gIENoZWNrIHRoZSBpbmJsb2NrIGZpbGwgbGV2ZWwuICBJ
ZiB0aGVyZSBpcworICAgIGNvbnRlbnQgdGhlbiBhcyB3ZSBoYXZlIG5vdCB5ZXQgZG9uZSBhIHRs
cyByZWFkIGl0IG11c3QgaGF2ZSBhcnJpdmVkIGJlZm9yZQorICAgIHRoZSBUTFMgaGFuZHNoYWtl
LCBpbi1jbGVhci4gIFRoYXQgdmlvbGF0ZXMgdGhlIHN5bmMgcmVxdWlyZW1lbnQgb2YgdGhlCisg
ICAgU1RBUlRUTFMgUkZDLCBzbyBmYWlsLiAqLwogCi0gICAgLyogVExTIHNlc3Npb24gaXMgc2V0
IHVwICovCisgICAgaWYgKHN4LT5pbmJsb2NrLnB0ciAhPSBzeC0+aW5ibG9jay5wdHJlbmQpCisg
ICAgICB7CisgICAgICBERUJVRyhEX3RscykKKwl7CisJaW50IGkgPSBzeC0+aW5ibG9jay5wdHJl
bmQgLSBzeC0+aW5ibG9jay5wdHI7CisJZGVidWdfcHJpbnRmKCJ1bnVzZWQgZGF0YSBpbiBpbnB1
dCBidWZmZXIgYWZ0ZXIgYWNrIGZvciBTVEFSVFRMUzpcbiIKKwkgICInJS4qcyclc1xuIiwKKwkg
IGkgPiAxMDAgPyAxMDAgOiBpLCBzeC0+aW5ibG9jay5wdHIsIGkgPiAxMDAgPyAiLi4uIiA6ICIi
KTsKKwl9CisgICAgICB0bHNfZXJyc3RyID0gVVMic3luY2ggZXJyb3IgYmVmb3JlIGNvbm5lY3Qi
OworICAgICAgZ290byBUTFNfQ09OTl9GQUlMRUQ7CisgICAgICB9CiAKICAgICBzbXRwX3BlZXJf
b3B0aW9uc193cmFwID0gc210cF9wZWVyX29wdGlvbnM7CiAgICAgZm9yIChhZGRyZXNzX2l0ZW0g
KiBhZGRyID0gc3gtPmFkZHJsaXN0OyBhZGRyOyBhZGRyID0gYWRkci0+bmV4dCkKQEAgLTI2MTYs
OSArMjc5NywxNiBAQAogICAgIHN4LT5wZWVyX29mZmVyZWQgPSBzeC0+ZWhsb19yZXNwLmNyeXB0
ZWRfZmVhdHVyZXM7CiAgICAgaWYgKChzeC0+ZWFybHlfcGlwZV9hY3RpdmUgPQogCSAhIShzeC0+
ZWhsb19yZXNwLmNyeXB0ZWRfZmVhdHVyZXMgJiBPUFRJT05fRUFSTFlfUElQRSkpKQotICAgICAg
REVCVUcoRF90cmFuc3BvcnQpIGRlYnVnX3ByaW50ZigiVXNpbmcgY2FjaGVkIGNyeXB0ZWQgUElQ
RV9DT05ORUNUXG4iKTsKKyAgICAgIERFQlVHKERfdHJhbnNwb3J0KSBkZWJ1Z19wcmludGYoIlVz
aW5nIGNhY2hlZCBjcnlwdGVkIFBJUEVDT05ORUNUXG4iKTsKICAgICB9CiAjZW5kaWYKKyNpZmRl
ZiBFWFBFUklNTUVOVEFMX0VTTVRQX0xJTUlUUworICAvKiBBcyB3ZSBhcmUgYWJvdXQgdG8gc2Vu
ZCBhbm90aGVyIEVITE8sIGZvcmdldCBhbnkgTElNSVRTIHJlY2VpdmVkIHNvIGZhci4gKi8KKyAg
c3gtPnBlZXJfbGltaXRfbWFpbCA9IHN4LT5wZWVyX2xpbWl0X3JjcHQgPSBzeC0+cGVlcl9saW1p
dF9yY3B0ZG9tID0gMDsKKyAgaWYgKChzeC0+bWF4X21haWwgPSBzeC0+Y29ubl9hcmdzLnRibG9j
ay0+Y29ubmVjdGlvbl9tYXhfbWVzc2FnZSkgPT0gMCkgc3gtPm1heF9tYWlsID0gOTk5OTk5Owor
ICBpZiAoKHN4LT5tYXhfcmNwdCA9IHN4LT5jb25uX2FyZ3MudGJsb2NrLT5tYXhfYWRkcmVzc2Vz
KSA9PSAwKSAgICAgICAgICBzeC0+bWF4X3JjcHQgPSA5OTk5OTk7CisgIHN4LT5zaW5nbGVfcmNw
dF9kb21haW4gPSBGQUxTRTsKKyNlbmRpZgogCiAgIC8qIEZvciBTTVRQUyB3ZSBuZWVkIHRvIHdh
aXQgZm9yIHRoZSBpbml0aWFsIE9LIHJlc3BvbnNlLiAqLwogICBpZiAoc3gtPnNtdHBzKQpAQCAt
MjY3MCw3ICsyODU4LDcgQEAKICAgICAgIENhbiBpdCBkbyB0aGF0LCB3aXRoIGFsbCB0aGUgZmxl
eGliaWxpdHkgd2UgbmVlZD8gKi8KIAogICAgICAgdGxzX2VycnN0ciA9IFVTImVycm9yIG9uIGZp
cnN0IHJlYWQiOwotICAgICAgZ290byBHTlVUTFNfQ09OTl9GQUlMRUQ7CisgICAgICBnb3RvIFRM
U19DT05OX0ZBSUxFRDsKICAgICAgIH0KICNlbHNlCiAgICAgICBnb3RvIFJFU1BPTlNFX0ZBSUxF
RDsKQEAgLTI2OTgsNyArMjg4Niw4IEBACiAgICAgKHZvaWQpIGV2ZW50X3JhaXNlKHN4LT5jb25u
X2FyZ3MudGJsb2NrLT5ldmVudF9hY3Rpb24sIFVTImRhbmU6ZmFpbCIsCiAgICAgICBzbXRwX3Bl
ZXJfb3B0aW9ucyAmIE9QVElPTl9UTFMKICAgICAgID8gVVMidmFsaWRhdGlvbi1mYWlsdXJlIgkJ
LyogY291bGQgZG8gd2l0aCBiZXR0ZXIgZGV0YWlsICovCi0gICAgICA6IFVTInN0YXJ0dGxzLW5v
dC1zdXBwb3J0ZWQiKTsKKyAgICAgIDogVVMic3RhcnR0bHMtbm90LXN1cHBvcnRlZCIsCisgICAg
ICBOVUxMKTsKICMgZW5kaWYKICAgZ290byBUTFNfRkFJTEVEOwogICB9CkBAIC0yNzA5LDcgKzI4
OTgsNyBAQAogY29udGludWVkIHNlc3Npb24gZG93biBhIHByZXZpb3VzbHktdXNlZCBzb2NrZXQs
IHdlIGhhdmVuJ3QganVzdCBkb25lIEVITE8sIHNvCiB3ZSBza2lwIHRoaXMuICovCiAKLWlmIChj
b250aW51ZV9ob3N0bmFtZSA9PSBOVUxMCitpZiAoICAgIWNvbnRpbnVlX2hvc3RuYW1lCiAjaWZu
ZGVmIERJU0FCTEVfVExTCiAgICAgfHwgdGxzX291dC5hY3RpdmUuc29jayA+PSAwCiAjZW5kaWYK
QEAgLTI3NDgsNiArMjkzNywxNCBAQAogICAgIGlmICh0bHNfb3V0LmFjdGl2ZS5zb2NrID49IDAp
CiAgICAgICBzeC0+ZWhsb19yZXNwLmNyeXB0ZWRfZmVhdHVyZXMgPSBzeC0+cGVlcl9vZmZlcmVk
OwogI2VuZGlmCisKKyNpZmRlZiBFWFBFUklNRU5UQUxfRVNNVFBfTElNSVRTCisgICAgaWYgKHRs
c19vdXQuYWN0aXZlLnNvY2sgPj0gMCB8fCAhKHN4LT5wZWVyX29mZmVyZWQgJiBPUFRJT05fVExT
KSkKKyAgICAgIHsKKyAgICAgIGVobG9fcmVzcG9uc2VfbGltaXRzX3JlYWQoc3gpOworICAgICAg
ZWhsb19yZXNwb25zZV9saW1pdHNfYXBwbHkoc3gpOworICAgICAgfQorI2VuZGlmCiAgICAgfQog
CiAgICAgLyogU2V0IGZvciBJR05PUkVRVU9UQSBpZiB0aGUgcmVzcG9uc2UgdG8gTEhMTyBzcGVj
aWZpZXMgc3VwcG9ydCBhbmQgdGhlCkBAIC0yNzcyLDE4ICsyOTY5LDE4IEBACiAgICAgICBzbXRw
X3BlZXJfb3B0aW9ucyAmIE9QVElPTl9QSVBFID8gIiIgOiAibm90ICIpOwogCiAgICAgaWYgKCAg
c3gtPnBlZXJfb2ZmZXJlZCAmIE9QVElPTl9DSFVOS0lORwotICAgICAgICYmIHZlcmlmeV9jaGVj
a19naXZlbl9ob3N0KENVU1MgJm9iLT5ob3N0c190cnlfY2h1bmtpbmcsIHN4LT5jb25uX2FyZ3Mu
aG9zdCkgIT0gT0spCi0gICAgICBzeC0+cGVlcl9vZmZlcmVkICY9IH5PUFRJT05fQ0hVTktJTkc7
CisgICAgICAgJiYgdmVyaWZ5X2NoZWNrX2dpdmVuX2hvc3QoQ1VTUyAmb2ItPmhvc3RzX3RyeV9j
aHVua2luZywgc3gtPmNvbm5fYXJncy5ob3N0KSA9PSBPSykKKyAgICAgIHNtdHBfcGVlcl9vcHRp
b25zIHw9IE9QVElPTl9DSFVOS0lORzsKIAotICAgIGlmIChzeC0+cGVlcl9vZmZlcmVkICYgT1BU
SU9OX0NIVU5LSU5HKQorICAgIGlmIChzbXRwX3BlZXJfb3B0aW9ucyAmIE9QVElPTl9DSFVOS0lO
RykKICAgICAgIERFQlVHKERfdHJhbnNwb3J0KSBkZWJ1Z19wcmludGYoIkNIVU5LSU5HIHVzYWJs
ZVxuIik7CiAKICNpZm5kZWYgRElTQUJMRV9QUkRSCiAgICAgaWYgKCAgc3gtPnBlZXJfb2ZmZXJl
ZCAmIE9QVElPTl9QUkRSCi0gICAgICAgJiYgdmVyaWZ5X2NoZWNrX2dpdmVuX2hvc3QoQ1VTUyAm
b2ItPmhvc3RzX3RyeV9wcmRyLCBzeC0+Y29ubl9hcmdzLmhvc3QpICE9IE9LKQotICAgICAgc3gt
PnBlZXJfb2ZmZXJlZCAmPSB+T1BUSU9OX1BSRFI7CisgICAgICAgJiYgdmVyaWZ5X2NoZWNrX2dp
dmVuX2hvc3QoQ1VTUyAmb2ItPmhvc3RzX3RyeV9wcmRyLCBzeC0+Y29ubl9hcmdzLmhvc3QpID09
IE9LKQorICAgICAgc210cF9wZWVyX29wdGlvbnMgfD0gT1BUSU9OX1BSRFI7CiAKLSAgICBpZiAo
c3gtPnBlZXJfb2ZmZXJlZCAmIE9QVElPTl9QUkRSKQorICAgIGlmIChzbXRwX3BlZXJfb3B0aW9u
cyAmIE9QVElPTl9QUkRSKQogICAgICAgREVCVUcoRF90cmFuc3BvcnQpIGRlYnVnX3ByaW50Zigi
UFJEUiB1c2FibGVcbiIpOwogI2VuZGlmCiAKQEAgLTI4MDAsNyArMjk5Nyw3IEBACiAgICAgICAg
JiYgKCBzeC0+ZWhsb19yZXNwLmNsZWFydGV4dF9mZWF0dXJlcyB8IHN4LT5laGxvX3Jlc3AuY3J5
cHRlZF9mZWF0dXJlcykKIAkgICYgT1BUSU9OX0VBUkxZX1BJUEUpCiAgICAgICB7Ci0gICAgICBE
RUJVRyhEX3RyYW5zcG9ydCkgZGVidWdfcHJpbnRmKCJQSVBFX0NPTk5FQ1QgdXNhYmxlIGluIGZ1
dHVyZSBmb3IgdGhpcyBJUFxuIik7CisgICAgICBERUJVRyhEX3RyYW5zcG9ydCkgZGVidWdfcHJp
bnRmKCJQSVBFQ09OTkVDVCB1c2FibGUgaW4gZnV0dXJlIGZvciB0aGlzIElQXG4iKTsKICAgICAg
IHN4LT5laGxvX3Jlc3AuY3J5cHRlZF9hdXRocyA9IHN0dWR5X2VobG9fYXV0aHMoc3gpOwogICAg
ICAgd3JpdGVfZWhsb19jYWNoZV9lbnRyeShzeCk7CiAgICAgICB9CkBAIC0yOTE1LDcgKzMxMTIs
NyBAQAogCiAgIFNFTkRfRkFJTEVEOgogICAgIGNvZGUgPSAnNCc7Ci0gICAgbWVzc2FnZSA9IFVT
IHN0cmluZ19zcHJpbnRmKCJzZW5kKCkgdG8gJXMgWyVzXSBmYWlsZWQ6ICVzIiwKKyAgICBtZXNz
YWdlID0gVVMgc3RyaW5nX3NwcmludGYoInNtdHAgc2VuZCB0byAlcyBbJXNdIGZhaWxlZDogJXMi
LAogICAgICAgc3gtPmNvbm5fYXJncy5ob3N0LT5uYW1lLCBzeC0+Y29ubl9hcmdzLmhvc3QtPmFk
ZHJlc3MsIHN0cmVycm9yKGVycm5vKSk7CiAgICAgc3gtPnNlbmRfcXVpdCA9IEZBTFNFOwogICAg
IHlpZWxkID0gREVGRVI7CkBAIC0yOTgxLDcgKzMxNzgsMTEgQEAKICNpZm5kZWYgRElTQUJMRV9U
TFMKIGlmIChzeC0+Y2N0eC50bHNfY3R4KQogICB7Ci0gIHRsc19jbG9zZShzeC0+Y2N0eC50bHNf
Y3R4LCBUTFNfU0hVVERPV05fTk9XQUlUKTsKKyAgaWYgKHN4LT5zZW5kX3Rsc2Nsb3NlKQorICAg
IHsKKyAgICB0bHNfY2xvc2Uoc3gtPmNjdHgudGxzX2N0eCwgVExTX1NIVVRET1dOX05PV0FJVCk7
CisgICAgc3gtPnNlbmRfdGxzY2xvc2UgPSBGQUxTRTsKKyAgICB9CiAgIHN4LT5jY3R4LnRsc19j
dHggPSBOVUxMOwogICB9CiAjZW5kaWYKQEAgLTMwMDQsOSArMzIwNSwxMCBAQAogc3gtPmNjdHgu
c29jayA9IC0xOwogCiAjaWZuZGVmIERJU0FCTEVfRVZFTlQKLSh2b2lkKSBldmVudF9yYWlzZShz
eC0+Y29ubl9hcmdzLnRibG9jay0+ZXZlbnRfYWN0aW9uLCBVUyJ0Y3A6Y2xvc2UiLCBOVUxMKTsK
Kyh2b2lkKSBldmVudF9yYWlzZShzeC0+Y29ubl9hcmdzLnRibG9jay0+ZXZlbnRfYWN0aW9uLCBV
UyJ0Y3A6Y2xvc2UiLCBOVUxMLCBOVUxMKTsKICNlbmRpZgogCitzbXRwX2RlYnVnX2NtZF9yZXBv
cnQoKTsKIGNvbnRpbnVlX3RyYW5zcG9ydCA9IE5VTEw7CiBjb250aW51ZV9ob3N0bmFtZSA9IE5V
TEw7CiByZXR1cm4geWllbGQ7CkBAIC0zMDQ5LDcgKzMyNTEsNyBAQAogcmVxdWVzdCB0aGF0ICov
CiAKIHN4LT5wcmRyX2FjdGl2ZSA9IEZBTFNFOwotaWYgKHN4LT5wZWVyX29mZmVyZWQgJiBPUFRJ
T05fUFJEUikKK2lmIChzbXRwX3BlZXJfb3B0aW9ucyAmIE9QVElPTl9QUkRSKQogICBmb3IgKGFk
ZHJlc3NfaXRlbSAqIGFkZHIgPSBhZGRybGlzdDsgYWRkcjsgYWRkciA9IGFkZHItPm5leHQpCiAg
ICAgaWYgKGFkZHItPnRyYW5zcG9ydF9yZXR1cm4gPT0gUEVORElOR19ERUZFUikKICAgICAgIHsK
QEAgLTMwNzcsNyArMzI3OSw3IEBACiAKIC8qIGNoZWNrIGlmIGFsbCBhZGRyZXNzZXMgaGF2ZSBE
U04tbGFzdGhvcCBmbGFnOyBkbyBub3Qgc2VuZCBSRVQgYW5kIEVOVklEIGlmIHNvICovCiBmb3Ig
KHN4LT5kc25fYWxsX2xhc3Rob3AgPSBUUlVFLCBhZGRyID0gYWRkcmxpc3QsIGFkZHJlc3NfY291
bnQgPSAwOwotICAgICBhZGRyICYmIGFkZHJlc3NfY291bnQgPCBzeC0+bWF4X3JjcHQ7CisgICAg
IGFkZHIgJiYgYWRkcmVzc19jb3VudCA8IHN4LT5tYXhfcmNwdDsJLypYWFggbWF5YmUgYWxzbyB8
fCBzeC0+c2luZ2xlX3JjcHRfZG9tYWluID8gKi8KICAgICAgYWRkciA9IGFkZHItPm5leHQpIGlm
IChhZGRyLT50cmFuc3BvcnRfcmV0dXJuID09IFBFTkRJTkdfREVGRVIpCiAgIHsKICAgYWRkcmVz
c19jb3VudCsrOwpAQCAtMzE2NSw2ICszMzY3LDkgQEAKIHNtdHBfd3JpdGVfbWFpbF9hbmRfcmNw
dF9jbWRzKHNtdHBfY29udGV4dCAqIHN4LCBpbnQgKiB5aWVsZCkKIHsKIGFkZHJlc3NfaXRlbSAq
IGFkZHI7CisjaWZkZWYgRVhQRVJJTUVOVEFMX0VTTVRQX0xJTUlUUworYWRkcmVzc19pdGVtICog
cmVzdGFydF9hZGRyID0gTlVMTDsKKyNlbmRpZgogaW50IGFkZHJlc3NfY291bnQsIHBpcGVfbGlt
aXQ7CiBpbnQgcmM7CiAKQEAgLTMyNDksMTMgKzM0NTQsMzEgQEAKIEZvciB2ZXJpZnkgd2UgZmx1
c2ggdGhlIHBpcGVsaW5lIGFmdGVyIGFueSAodGhlIG9ubHkpIHJjcHQgYWRkcmVzcy4gKi8KIAog
Zm9yIChhZGRyID0gc3gtPmZpcnN0X2FkZHIsIGFkZHJlc3NfY291bnQgPSAwLCBwaXBlX2xpbWl0
ID0gMTAwOwotICAgICBhZGRyICAmJiAgYWRkcmVzc19jb3VudCA8IHN4LT5tYXhfcmNwdDsKKyAg
ICAgYWRkciAmJiAgYWRkcmVzc19jb3VudCA8IHN4LT5tYXhfcmNwdDsKICAgICAgYWRkciA9IGFk
ZHItPm5leHQpIGlmIChhZGRyLT50cmFuc3BvcnRfcmV0dXJuID09IFBFTkRJTkdfREVGRVIpCiAg
IHsKICAgaW50IGNtZHNfc2VudDsKICAgQk9PTCBub19mbHVzaDsKICAgdXNjaGFyICogcmNwdF9h
ZGRyOwogCisjaWZkZWYgRVhQRVJJTUVOVEFMX0VTTVRQX0xJTUlUUworICBpZiAoICBzeC0+c2lu
Z2xlX3JjcHRfZG9tYWluCQkJCQkvKiByZXN0cmljdGlvbiBvbiBkb21haW5zICovCisgICAgICYm
IGFkZHJlc3NfY291bnQgPiAwCQkJCQkvKiBub3QgZmlyc3QgYmVpbmcgc2VudCAqLworICAgICAm
JiBVc3RyY21wKGFkZHItPmRvbWFpbiwgc3gtPmZpcnN0X2FkZHItPmRvbWFpbikgIT0gMAkvKiBk
b20gZGlmZiBmcm9tIGZpcnN0ICovCisgICAgICkKKyAgICB7CisgICAgREVCVUcoRF90cmFuc3Bv
cnQpIGRlYnVnX3ByaW50Zigic2tpcHBpbmcgZGlmZmVyZW50IGRvbWFpbiAlc1xuIiwgYWRkci0+
ZG9tYWluKTsKKworICAgIC8qIEVuc3VyZSB0aGUgc210cC1yZXNwb25zZSByZWFwZXIgZG9lcyBu
b3QgdGhpbmsgdGhlIGFkZHJlc3MgaGFkIGEgUkNQVAorICAgIGNvbW1hbmQgc2VudCBmb3IgaXQu
ICBSZXNldCB0byBQRU5ESU5HX0RFRkVSIGluIHNtdHBfZGVsaXZlcigpLCB3aGVyZSB3ZQorICAg
IGdvdG8gU0VORF9NRVNTQUdFLiAgKi8KKworICAgIGFkZHItPnRyYW5zcG9ydF9yZXR1cm4gPSBT
S0lQOworICAgIGlmICghcmVzdGFydF9hZGRyKSByZXN0YXJ0X2FkZHIgPSBhZGRyOwkvKiBub3Rl
IHJlc3RhcnQgcG9pbnQgKi8KKyAgICBjb250aW51ZTsJCQkJCS8qIHNraXAgdGhpcyBvbmUgKi8K
KyAgICB9CisjZW5kaWYKKwogICBhZGRyLT5kc25fYXdhcmUgPSBzeC0+cGVlcl9vZmZlcmVkICYg
T1BUSU9OX0RTTgogICAgID8gZHNuX3N1cHBvcnRfeWVzIDogZHNuX3N1cHBvcnRfbm87CiAKQEAg
LTMzMjcsNyArMzU1MCwxMSBAQAogICAgIH0KICAgfSAgICAgIC8qIExvb3AgZm9yIG5leHQgYWRk
cmVzcyAqLwogCisjaWZkZWYgRVhQRVJJTUVOVEFMX0VTTVRQX0xJTUlUUworc3gtPm5leHRfYWRk
ciA9IHJlc3RhcnRfYWRkciA/IHJlc3RhcnRfYWRkciA6IGFkZHI7CisjZWxzZQogc3gtPm5leHRf
YWRkciA9IGFkZHI7CisjZW5kaWYKIHJldHVybiAwOwogfQogCkBAIC0zMzQ5LDQwICszNTc2LDM1
IEBACiAgIGJ1ZnNpeglzaXplIG9mIGJ1ZmZlcgogICBwZmQJCXBpcGUgZmlsZWRlc2NyaXB0b3Ig
YXJyYXk7IFswXSBpcyBjb21tcyB0byBwcm94aWVkIHByb2Nlc3MKICAgdGltZW91dAlwZXItcmVh
ZCB0aW1lb3V0LCBzZWNvbmRzCisgIGhvc3QJCWhvc3RuYW1lIG9mIHJlbW90ZQogCiBEb2VzIG5v
dCByZXR1cm4uCiAqLwogCiB2b2lkCiBzbXRwX3Byb3h5X3Rscyh2b2lkICogY3RfY3R4LCB1c2No
YXIgKiBidWYsIHNpemVfdCBic2l6ZSwgaW50ICogcGZkLAotICBpbnQgdGltZW91dCkKKyAgaW50
IHRpbWVvdXQsIGNvbnN0IHVzY2hhciAqIGhvc3QpCiB7Ci1mZF9zZXQgcmZkcywgZWZkczsKLWlu
dCBtYXhfZmQgPSBNQVgocGZkWzBdLCB0bHNfb3V0LmFjdGl2ZS5zb2NrKSArIDE7CitzdHJ1Y3Qg
cG9sbGZkIHBbMl0gPSB7ey5mZCA9IHRsc19vdXQuYWN0aXZlLnNvY2ssIC5ldmVudHMgPSBQT0xM
SU59LAorCQkgICAgICB7LmZkID0gcGZkWzBdLCAuZXZlbnRzID0gUE9MTElOfX07CiBpbnQgcmMs
IGk7CitCT09MIHNlbmRfdGxzX3NodXRkb3duID0gVFJVRTsKIAogY2xvc2UocGZkWzFdKTsKIGlm
ICgocmMgPSBleGltX2ZvcmsoVVMidGxzLXByb3h5IikpKQogICBfZXhpdChyYyA8IDAgPyBFWElU
X0ZBSUxVUkUgOiBFWElUX1NVQ0NFU1MpOwogCi1zZXRfcHJvY2Vzc19pbmZvKCJwcm94eWluZyBU
TFMgY29ubmVjdGlvbiBmb3IgY29udGludWVkIHRyYW5zcG9ydCIpOwotRkRfWkVSTygmcmZkcyk7
Ci1GRF9TRVQodGxzX291dC5hY3RpdmUuc29jaywgJnJmZHMpOwotRkRfU0VUKHBmZFswXSwgJnJm
ZHMpOworc2V0X3Byb2Nlc3NfaW5mbygicHJveHlpbmcgVExTIGNvbm5lY3Rpb24gZm9yIGNvbnRp
bnVlZCB0cmFuc3BvcnQgdG8gJXNcbiIsIGhvc3QpOwogCi1mb3IgKGludCBmZF9iaXRzID0gMzsg
ZmRfYml0czsgKQorZG8KICAgewogICB0aW1lX3QgdGltZV9sZWZ0ID0gdGltZW91dDsKICAgdGlt
ZV90IHRpbWVfc3RhcnQgPSB0aW1lKE5VTEwpOwogCiAgIC8qIHdhaXQgZm9yIGRhdGEgKi8KLSAg
ZWZkcyA9IHJmZHM7CiAgIGRvCiAgICAgewotICAgIHN0cnVjdCB0aW1ldmFsIHR2ID0geyB0aW1l
X2xlZnQsIDAgfTsKLQotICAgIHJjID0gc2VsZWN0KG1heF9mZCwKLSAgICAgIChTRUxFQ1RfQVJH
Ml9UWVBFICopJnJmZHMsIE5VTEwsIChTRUxFQ1RfQVJHMl9UWVBFICopJmVmZHMsICZ0dik7Cisg
ICAgcmMgPSBwb2xsKHAsIDIsIHRpbWVfbGVmdCAqIDEwMDApOwogCiAgICAgaWYgKHJjIDwgMCAm
JiBlcnJubyA9PSBFSU5UUikKICAgICAgIGlmICgodGltZV9sZWZ0IC09IHRpbWUoTlVMTCkgLSB0
aW1lX3N0YXJ0KSA+IDApIGNvbnRpbnVlOwpAQCAtMzM5Myw1MSArMzYxNSw1NiBAQAogICAgICAg
Z290byBkb25lOwogICAgICAgfQogCi0gICAgaWYgKEZEX0lTU0VUKHRsc19vdXQuYWN0aXZlLnNv
Y2ssICZlZmRzKSB8fCBGRF9JU1NFVChwZmRbMF0sICZlZmRzKSkKKyAgICAvKiBGb3IgZXJyb3Jz
IHdoZXJlIG5vdCByZWFkYWJsZSwgYm9tYiBvdXQgKi8KKworICAgIGlmIChwWzBdLnJldmVudHMg
JiBQT0xMRVJSIHx8IHBbMV0ucmV2ZW50cyAmIFBPTExFUlIpCiAgICAgICB7CiAgICAgICBERUJV
RyhEX3RyYW5zcG9ydCkgZGVidWdfcHJpbnRmKCJzZWxlY3Q6IGV4Y2VwdGlvbmFsIGNvbmQgb24g
JXMgZmRcbiIsCi0JRkRfSVNTRVQocGZkWzBdLCAmZWZkcykgPyAicHJveHkiIDogInRscyIpOwot
ICAgICAgZ290byBkb25lOworCXBbMF0ucmV2ZW50cyAmIFBPTExFUlIgPyAidGxzIiA6ICJwcm94
eSIpOworICAgICAgaWYgKCEocFswXS5yZXZlbnRzICYgUE9MTElOIHx8IHBbMV0uZXZlbnRzICYg
UE9MTElOKSkKKwlnb3RvIGRvbmU7CisgICAgICBERUJVRyhEX3RyYW5zcG9ydCkgZGVidWdfcHJp
bnRmKCItIGJ1dCBhbHNvIHJlYWRhYmxlOyBubyBleGl0IHlldFxuIik7CiAgICAgICB9CiAgICAg
fQotICB3aGlsZSAocmMgPCAwIHx8ICEoRkRfSVNTRVQodGxzX291dC5hY3RpdmUuc29jaywgJnJm
ZHMpIHx8IEZEX0lTU0VUKHBmZFswXSwgJnJmZHMpKSk7CisgIHdoaWxlIChyYyA8IDAgfHwgIShw
WzBdLnJldmVudHMgJiBQT0xMSU4gfHwgcFsxXS5yZXZlbnRzICYgUE9MTElOKSk7CiAKICAgLyog
aGFuZGxlIGluYm91bmQgZGF0YSAqLwotICBpZiAoRkRfSVNTRVQodGxzX291dC5hY3RpdmUuc29j
aywgJnJmZHMpKQotICAgIGlmICgocmMgPSB0bHNfcmVhZChjdF9jdHgsIGJ1ZiwgYnNpemUpKSA8
PSAwKQotICAgICAgewotICAgICAgZmRfYml0cyAmPSB+MTsKLSAgICAgIEZEX0NMUih0bHNfb3V0
LmFjdGl2ZS5zb2NrLCAmcmZkcyk7CisgIGlmIChwWzBdLnJldmVudHMgJiBQT0xMSU4pCisgICAg
aWYgKChyYyA9IHRsc19yZWFkKGN0X2N0eCwgYnVmLCBic2l6ZSkpIDw9IDApCS8qIEV4cGVjdCAt
MSBmb3IgRU9GOyAqLworICAgIHsJCQkJICAgIC8qIHRoYXQgcmVhcHMgdGhlIFRMUyBDbG9zZSBO
b3RpZnkgcmVjb3JkICovCisgICAgICBwWzBdLmZkID0gLTE7CiAgICAgICBzaHV0ZG93bihwZmRb
MF0sIFNIVVRfV1IpOwogICAgICAgdGltZW91dCA9IDU7CiAgICAgICB9CiAgICAgZWxzZQotICAg
ICAgewogICAgICAgZm9yIChpbnQgbmJ5dGVzID0gMDsgcmMgLSBuYnl0ZXMgPiAwOyBuYnl0ZXMg
Kz0gaSkKIAlpZiAoKGkgPSB3cml0ZShwZmRbMF0sIGJ1ZiArIG5ieXRlcywgcmMgLSBuYnl0ZXMp
KSA8IDApIGdvdG8gZG9uZTsKLSAgICAgIH0KLSAgZWxzZSBpZiAoZmRfYml0cyAmIDEpCi0gICAg
RkRfU0VUKHRsc19vdXQuYWN0aXZlLnNvY2ssICZyZmRzKTsKIAotICAvKiBoYW5kbGUgb3V0Ym91
bmQgZGF0YSAqLwotICBpZiAoRkRfSVNTRVQocGZkWzBdLCAmcmZkcykpCisgIC8qIEhhbmRsZSBv
dXRib3VuZCBkYXRhLiAgV2UgY2Fubm90IGNvbWJpbmUgcGF5bG9hZCBhbmQgdGhlIFRMUy1jbG9z
ZQorICBkdWUgdG8gdGhlIGxpbWl0YXRpb25zIG9mIHRoZSAocGlwZSkgY2hhbm5lbCBmZWVkaW5n
IHVzLiAgTWF5YmUgdXNlIGEgdW5peC1kb21haW4KKyAgc29ja2V0PyAqLworICBpZiAocFsxXS5y
ZXZlbnRzICYgUE9MTElOKQogICAgIGlmICgocmMgPSByZWFkKHBmZFswXSwgYnVmLCBic2l6ZSkp
IDw9IDApCiAgICAgICB7Ci0gICAgICBmZF9iaXRzID0gMDsKLSAgICAgIHRsc19jbG9zZShjdF9j
dHgsIFRMU19TSFVURE9XTl9OT1dBSVQpOwotICAgICAgY3RfY3R4ID0gTlVMTDsKKyAgICAgIHBb
MV0uZmQgPSAtMTsKKworIyBpZmRlZiBFWElNX1RDUF9DT1JLICAvKiBVc2UgX0NPUksgdG8gZ2V0
IFRMUyBDbG9zZSBOb3RpZnkgaW4gRklOIHNlZ21lbnQgKi8KKyAgICAgICh2b2lkKSBzZXRzb2Nr
b3B0KHRsc19vdXQuYWN0aXZlLnNvY2ssIElQUFJPVE9fVENQLCBFWElNX1RDUF9DT1JLLCBVUyAm
b24sIHNpemVvZihvbikpOworIyBlbmRpZgorICAgICAgdGxzX3NodXRkb3duX3dyKGN0X2N0eCk7
CisgICAgICBzZW5kX3Rsc19zaHV0ZG93biA9IEZBTFNFOworICAgICAgc2h1dGRvd24odGxzX291
dC5hY3RpdmUuc29jaywgU0hVVF9XUik7CiAgICAgICB9CiAgICAgZWxzZQotICAgICAgewogICAg
ICAgZm9yIChpbnQgbmJ5dGVzID0gMDsgcmMgLSBuYnl0ZXMgPiAwOyBuYnl0ZXMgKz0gaSkKIAlp
ZiAoKGkgPSB0bHNfd3JpdGUoY3RfY3R4LCBidWYgKyBuYnl0ZXMsIHJjIC0gbmJ5dGVzLCBGQUxT
RSkpIDwgMCkKIAkgIGdvdG8gZG9uZTsKLSAgICAgIH0KLSAgZWxzZSBpZiAoZmRfYml0cyAmIDIp
Ci0gICAgRkRfU0VUKHBmZFswXSwgJnJmZHMpOwogICB9Cit3aGlsZSAocFswXS5mZCA+PSAwIHx8
IHBbMV0uZmQgPj0gMCk7CiAKIGRvbmU6CisgIGlmIChzZW5kX3Rsc19zaHV0ZG93bikgdGxzX2Ns
b3NlKGN0X2N0eCwgVExTX1NIVVRET1dOX05PV0FJVCk7CisgIGN0X2N0eCA9IE5VTEw7CiAgIHRl
c3RoYXJuZXNzX3BhdXNlX21zKDEwMCk7CS8qIGxldCBsb2dnaW5nIGNvbXBsZXRlICovCiAgIGV4
aW1fZXhpdChFWElUX1NVQ0NFU1MpOwogfQpAQCAtMzUwMywzMSArMzczMCwzNCBAQAogaW50IHNh
dmVfZXJybm87CiBpbnQgcmM7CiAKLUJPT0wgcGFzc19tZXNzYWdlID0gRkFMU0U7CiB1c2NoYXIg
Km1lc3NhZ2UgPSBOVUxMOwogdXNjaGFyIG5ld19tZXNzYWdlX2lkW01FU1NBR0VfSURfTEVOR1RI
ICsgMV07Ci1zbXRwX2NvbnRleHQgKiBzeCA9IHN0b3JlX2dldChzaXplb2YoKnN4KSwgVFJVRSk7
CS8qIHRhaW50ZWQsIGZvciB0aGUgZGF0YSBidWZmZXJzICovCitzbXRwX2NvbnRleHQgKiBzeCA9
IHN0b3JlX2dldChzaXplb2YoKnN4KSwgR0VUX1RBSU5URUQpOwkvKiB0YWludGVkLCBmb3IgdGhl
IGRhdGEgYnVmZmVycyAqLworQk9PTCBwYXNzX21lc3NhZ2UgPSBGQUxTRTsKKyNpZmRlZiBFWFBF
UklNRU5UQUxfRVNNVFBfTElNSVRTCitCT09MIG1haWxfbGltaXQgPSBGQUxTRTsKKyNlbmRpZgog
I2lmZGVmIFNVUFBPUlRfREFORQogQk9PTCBkYW5lX2hlbGQ7CiAjZW5kaWYKK0JPT0wgdGN3X2Rv
bmUgPSBGQUxTRSwgdGN3ID0gRkFMU0U7CiAKLXN1cHByZXNzX3RscyA9IHN1cHByZXNzX3Rsczsg
IC8qIHN0b3AgY29tcGlsZXIgd2FybmluZyB3aGVuIG5vIFRMUyBzdXBwb3J0ICovCiAqbWVzc2Fn
ZV9kZWZlciA9IEZBTFNFOwogCiBtZW1zZXQoc3gsIDAsIHNpemVvZigqc3gpKTsKIHN4LT5hZGRy
bGlzdCA9IGFkZHJsaXN0Owogc3gtPmNvbm5fYXJncy5ob3N0ID0gaG9zdDsKLXN4LT5jb25uX2Fy
Z3MuaG9zdF9hZiA9IGhvc3RfYWYsCitzeC0+Y29ubl9hcmdzLmhvc3RfYWYgPSBob3N0X2FmOwog
c3gtPnBvcnQgPSBkZWZwb3J0Owogc3gtPmNvbm5fYXJncy5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7
CiBzeC0+aGVsb19kYXRhID0gTlVMTDsKIHN4LT5jb25uX2FyZ3MudGJsb2NrID0gdGJsb2NrOwot
Lyogc3gtPnZlcmlmeSA9IEZBTFNFOyAqLworc3gtPmNvbm5fYXJncy5zb2NrID0gLTE7CiBnZXR0
aW1lb2ZkYXkoJnN4LT5kZWxpdmVyeV9zdGFydCwgTlVMTCk7CiBzeC0+c3luY19hZGRyID0gc3gt
PmZpcnN0X2FkZHIgPSBhZGRybGlzdDsKIAorUkVQRUFUX0NPTk46CiAjaWZkZWYgU1VQUE9SVF9E
QU5FCi1EQU5FX0RPTUFJTlM6CiBkYW5lX2hlbGQgPSBGQUxTRTsKICNlbmRpZgogCkBAIC0zNTcy
LDggKzM4MDIsOCBAQAogICB5aWVsZCBFUlJPUi4gKi8KIAogICBpZiAoIXRyYW5zcG9ydF9zZXRf
dXBfY29tbWFuZCgmdHJhbnNwb3J0X2ZpbHRlcl9hcmd2LAotCXRibG9jay0+ZmlsdGVyX2NvbW1h
bmQsIFRSVUUsIERFRkVSLCBhZGRybGlzdCwKLQlzdHJpbmdfc3ByaW50ZigiJS41MHMgdHJhbnNw
b3J0IiwgdGJsb2NrLT5uYW1lKSwgTlVMTCkpCisJdGJsb2NrLT5maWx0ZXJfY29tbWFuZCwgVFJV
RSwgREVGRVIsIGFkZHJsaXN0LCBGQUxTRSwKKwlzdHJpbmdfc3ByaW50ZigiJS41MHMgdHJhbnNw
b3J0IGZpbHRlciIsIHRibG9jay0+bmFtZSksIE5VTEwpKQogICAgIHsKICAgICBzZXRfZXJybm9f
bm9ob3N0KGFkZHJsaXN0LT5uZXh0LCBhZGRybGlzdC0+YmFzaWNfZXJybm8sIGFkZHJsaXN0LT5t
ZXNzYWdlLCBERUZFUiwKICAgICAgIEZBTFNFLCAmc3gtPmRlbGl2ZXJ5X3N0YXJ0KTsKQEAgLTM1
ODQsNyArMzgxNCw3IEBACiAgIGlmICggIHRyYW5zcG9ydF9maWx0ZXJfYXJndgogICAgICAmJiAq
dHJhbnNwb3J0X2ZpbHRlcl9hcmd2CiAgICAgICYmICoqdHJhbnNwb3J0X2ZpbHRlcl9hcmd2Ci0g
ICAgICYmIHN4LT5wZWVyX29mZmVyZWQgJiBPUFRJT05fQ0hVTktJTkcKKyAgICAgJiYgc210cF9w
ZWVyX29wdGlvbnMgJiBPUFRJT05fQ0hVTktJTkcKICNpZm5kZWYgRElTQUJMRV9ES0lNCiAgICAg
LyogV2hlbiBka2ltIHNpZ25pbmcsIGNodW5raW5nIGlzIGhhbmRsZWQgZXZlbiB3aXRoIGEgdHJh
bnNwb3J0LWZpbHRlciAqLwogICAgICAmJiAhKG9iLT5ka2ltLmRraW1fcHJpdmF0ZV9rZXkgJiYg
b2ItPmRraW0uZGtpbV9kb21haW4gJiYgb2ItPmRraW0uZGtpbV9zZWxlY3RvcikKQEAgLTM1OTIs
NyArMzgyMiw3IEBACiAjZW5kaWYKICAgICAgKQogICAgIHsKLSAgICBzeC0+cGVlcl9vZmZlcmVk
ICY9IH5PUFRJT05fQ0hVTktJTkc7CisgICAgc210cF9wZWVyX29wdGlvbnMgJj0gfk9QVElPTl9D
SFVOS0lORzsKICAgICBERUJVRyhEX3RyYW5zcG9ydCkgZGVidWdfcHJpbnRmKCJDSFVOS0lORyBu
b3QgdXNhYmxlIGR1ZSB0byB0cmFuc3BvcnQgZmlsdGVyXG4iKTsKICAgICB9CiAgIH0KQEAgLTM2
NjksNyArMzg5OSw3IEBACiBJZiB1c2luZyBDSFVOS0lORywgZG8gbm90IHNlbmQgYSBCREFUIHVu
dGlsIHdlIGtub3cgaG93IGJpZyBhIGNodW5rIHdlIHdhbnQKIHRvIHNlbmQgaXMuICovCiAKLWlm
ICggICEoc3gtPnBlZXJfb2ZmZXJlZCAmIE9QVElPTl9DSFVOS0lORykKK2lmICggICEoc210cF9w
ZWVyX29wdGlvbnMgJiBPUFRJT05fQ0hVTktJTkcpCiAgICAmJiAoc3gtPm9rIHx8IChwaXBlbGlu
aW5nX2FjdGl2ZSAmJiAhbXVhX3dyYXBwZXIpKSkKICAgewogICBpbnQgY291bnQgPSBzbXRwX3dy
aXRlX2NvbW1hbmQoc3gsIFNDTURfRkxVU0gsICJEQVRBXHJcbiIpOwpAQCAtMzcwNiw3ICszOTM2
LDcgQEAKIChIYXZlbid0IGJlZW4gYWJsZSB0byBtYWtlIGl0IHdvcmsgdXNpbmcgc2VsZWN0KCkg
Zm9yIHdyaXRpbmcgeWV0LikgKi8KIAogaWYgKCAgIXN4LT5vawotICAgJiYgKCEoc3gtPnBlZXJf
b2ZmZXJlZCAmIE9QVElPTl9DSFVOS0lORykgfHwgIXBpcGVsaW5pbmdfYWN0aXZlKSkKKyAgICYm
ICghKHNtdHBfcGVlcl9vcHRpb25zICYgT1BUSU9OX0NIVU5LSU5HKSB8fCAhcGlwZWxpbmluZ19h
Y3RpdmUpKQogICB7CiAgIC8qIFNhdmUgdGhlIGZpcnN0IGFkZHJlc3Mgb2YgdGhlIG5leHQgYmF0
Y2guICovCiAgIHN4LT5maXJzdF9hZGRyID0gc3gtPm5leHRfYWRkcjsKQEAgLTM3MzUsNyArMzk2
NSw3IEBACiAgIG9mIHJlc3BvbnNlcy4gIFRoZSBjYWxsYmFjayBuZWVkcyBhIHdob2xlIGJ1bmNo
IG9mIHN0YXRlIHNvIHNldCB1cAogICBhIHRyYW5zcG9ydC1jb250ZXh0IHN0cnVjdHVyZSB0byBi
ZSBwYXNzZWQgYXJvdW5kLiAqLwogCi0gIGlmIChzeC0+cGVlcl9vZmZlcmVkICYgT1BUSU9OX0NI
VU5LSU5HKQorICBpZiAoc210cF9wZWVyX29wdGlvbnMgJiBPUFRJT05fQ0hVTktJTkcpCiAgICAg
ewogICAgIHRjdHguY2hlY2tfc3RyaW5nID0gdGN0eC5lc2NhcGVfc3RyaW5nID0gTlVMTDsKICAg
ICB0Y3R4Lm9wdGlvbnMgfD0gdG9wdF91c2VfYmRhdDsKQEAgLTM3NjAsMTAgKzM5OTAsMTAgQEAK
ICAgdHJhbnNwb3J0X3dyaXRlX3RpbWVvdXQgPSBvYi0+ZGF0YV90aW1lb3V0OwogICBzbXRwX2Nv
bW1hbmQgPSBVUyJzZW5kaW5nIGRhdGEgYmxvY2siOyAgIC8qIEZvciBlcnJvciBtZXNzYWdlcyAq
LwogICBERUJVRyhEX3RyYW5zcG9ydHxEX3YpCi0gICAgaWYgKHN4LT5wZWVyX29mZmVyZWQgJiBP
UFRJT05fQ0hVTktJTkcpCisgICAgaWYgKHNtdHBfcGVlcl9vcHRpb25zICYgT1BUSU9OX0NIVU5L
SU5HKQogICAgICAgZGVidWdfcHJpbnRmKCIgICAgICAgICB3aWxsIHdyaXRlIG1lc3NhZ2UgdXNp
bmcgQ0hVTktJTkdcbiIpOwogICAgIGVsc2UKLSAgICAgIGRlYnVnX3ByaW50ZigiICBTTVRQPj4g
d3JpdGluZyBtZXNzYWdlIGFuZCB0ZXJtaW5hdGluZyBcIi5cIlxuIik7CisgICAgICBkZWJ1Z19w
cmludGYoIiAgU01UUD4+ICh3cml0aW5nIG1lc3NhZ2UpXG4iKTsKICAgdHJhbnNwb3J0X2NvdW50
ID0gMDsKIAogI2lmbmRlZiBESVNBQkxFX0RLSU0KQEAgLTM4MDAsNiArNDAzMCw0NiBAQAogICBy
ZXBvcnRfdGltZV9zaW5jZSgmdDAsIFVTImRraW1fZXhpbV9zaWduX2luaXQgKGRlbHRhKSIpOwog
IyBlbmRpZgogICB9CisjZW5kaWYKKworICAvKiBTZWUgaWYgd2UgY2FuIHBpcGVsaW5lIFFVSVQu
ICBSZWFzb25zIG5vdCB0byBhcmUKKyAgLSBwaXBlbGluaW5nIG5vdCBhY3RpdmUKKyAgLSBub3Qg
b2sgdG8gc2VuZCBxdWl0CisgIC0gZXJyb3JzIGluIGFtdHAgdHJhbnNhdGlvbiByZXNwb25zZXMK
KyAgLSBtb3JlIGFkZHJzIHRvIHNlbmQgZm9yIHRoaXMgbWVzc2FnZSBvciB0aGlzIGhvc3QKKyAg
LSB0aGlzIG1lc3NhZ2Ugd2FzIGJlaW5nIHJldHJpZWQKKyAgLSBtb3JlIG1lc3NhZ2VzIGZvciB0
aGlzIGhvc3QKKyAgSWYgd2UgY2FuLCB3ZSB3YW50IHRoZSBtZXNzYWdlLXdyaXRlIHRvIG5vdCBm
bHVzaCAodGhlIHRhaWwgZW5kIG9mKSBpdHMgZGF0YSBvdXQuICAqLworCisgIGlmICggIHN4LT5w
aXBlbGluaW5nX3VzZWQKKyAgICAgJiYgKHN4LT5vayAmJiBzeC0+Y29tcGxldGVkX2FkZHIgfHwg
c210cF9wZWVyX29wdGlvbnMgJiBPUFRJT05fQ0hVTktJTkcpCisgICAgICYmIHN4LT5zZW5kX3F1
aXQKKyAgICAgJiYgIShzeC0+Zmlyc3RfYWRkciB8fCBmLmNvbnRpbnVlX21vcmUpCisgICAgICYm
IGYuZGVsaXZlcl9maXJzdHRpbWUKKyAgICAgKQorICAgIHsKKyAgICBzbXRwX2NvbXBhcmVfdCB0
X2NvbXBhcmUgPQorICAgICAgey50YmxvY2sgPSB0YmxvY2ssIC5jdXJyZW50X3NlbmRlcl9hZGRy
ZXNzID0gc2VuZGVyX2FkZHJlc3N9OworCisgICAgdGN3X2RvbmUgPSBUUlVFOworICAgIHRjdyA9
CisjaWZuZGVmIERJU0FCTEVfVExTCisJICAgKCAgdGxzX291dC5hY3RpdmUuc29jayA8IDAgICYm
ICAhY29udGludWVfcHJveHlfY2lwaGVyCisgICAgICAgICAgIHx8IHZlcmlmeV9jaGVja19naXZl
bl9ob3N0KENVU1MgJm9iLT5ob3N0c19ub3Bhc3NfdGxzLCBob3N0KSAhPSBPSworCSAgICkKKyAg
ICAgICAgJiYKKyNlbmRpZgorICAgICAgICAgICB0cmFuc3BvcnRfY2hlY2tfd2FpdGluZyh0Ymxv
Y2stPm5hbWUsIGhvc3QtPm5hbWUsCisgICAgICAgICAgICAgdGJsb2NrLT5jb25uZWN0aW9uX21h
eF9tZXNzYWdlcywgbmV3X21lc3NhZ2VfaWQsCisJICAgICAob2ljZilzbXRwX2FyZV9zYW1lX2lk
ZW50aXRpZXMsICh2b2lkKikmdF9jb21wYXJlKTsKKyAgICBpZiAoIXRjdykKKyAgICAgIHsKKyAg
ICAgIEhERUJVRyhEX3RyYW5zcG9ydCkgZGVidWdfcHJpbnRmKCJ3aWxsIHBpcGVsaW5lIFFVSVRc
biIpOworICAgICAgdGN0eC5vcHRpb25zIHw9IHRvcHRfbm9fZmx1c2g7CisgICAgICB9CisgICAg
fQorCisjaWZuZGVmIERJU0FCTEVfREtJTQogICBzeC0+b2sgPSBka2ltX3RyYW5zcG9ydF93cml0
ZV9tZXNzYWdlKCZ0Y3R4LCAmb2ItPmRraW0sIENVU1MgJm1lc3NhZ2UpOwogI2Vsc2UKICAgc3gt
Pm9rID0gdHJhbnNwb3J0X3dyaXRlX21lc3NhZ2UoJnRjdHgsIDApOwpAQCAtMzgyOCw3ICs0MDk4
LDQ5IEBACiAKICAgc210cF9jb21tYW5kID0gVVMiZW5kIG9mIGRhdGEiOwogCi0gIGlmIChzeC0+
cGVlcl9vZmZlcmVkICYgT1BUSU9OX0NIVU5LSU5HICYmIHN4LT5jbWRfY291bnQgPiAxKQorICAv
KiBJZiB3ZSBjYW4gcGlwZWxpbmUgYSBRVUlUIHdpdGggdGhlIGRhdGEgdGhlbSBzZW5kIGl0IG5v
dy4gIElmIGEgbmV3IG1lc3NhZ2UKKyAgZm9yIHRoaXMgaG9zdCBhcHBlYXJlZCBpbiB0aGUgcXVl
dWUgd2hpbGUgZGF0YSB3YXMgYmVpbmcgc2VudCwgd2Ugd2lsbCBub3Qgc2VlCisgIGl0IGFuZCBp
dCB3aWxsIGhhdmUgdG8gd2FpdCBmb3IgYSBxdWV1ZSBydW4uICBJZiB0aGVyZSB3YXMgb25lIGJ1
dCBhbm90aGVyCisgIHRocmVhZCB0b29rIGl0LCB3ZSBtaWdodCBhdHRlbXB0IHRvIHNlbmQgaXQg
LSBidXQgbG9ja2luZyBvZiBzcG9vbGZpbGVzIHdpbGwKKyAgZGV0ZWN0IHRoYXQuIFVzZSBfTU9S
RSB0byBnZXQgUVVJVCBpbiBGSU4gc2VnbWVudC4gKi8KKworICBpZiAodGN3X2RvbmUgJiYgIXRj
dykKKyAgICB7CisgICAgLypYWFggamdoIDIwMjEvMDMvMTAgZ29vZ2xlIGV0LiBhbCBzY3Jld3Vw
LiAgRywgYXQgbGVhc3QsIHNlbmRzIFRDUCBGSU4gaW4gcmVzcG9uc2UgdG8gVExTCisgICAgY2xv
c2Utbm90aWZ5LiAgVW5kZXIgVExTIDEuMywgdmlvbGF0aW5nIFJGQy4KKyAgICBIb3dldmVyLCBU
TFMgMS4yIGRvZXMgbm90IGhhdmUgaGFsZi1jbG9zZSBzZW1hbnRpY3MuICovCisKKyAgICBpZiAo
ICAgICBzeC0+Y2N0eC50bHNfY3R4CisjaWYgMCAmJiAhZGVmaW5lZChESVNBQkxFX1RMUykKKyAg
ICAgICAgICAmJiBVc3RyY21wKHRsc19vdXQudmVyLCAiVExTMS4zIikgIT0gMAorI2VuZGlmCisg
ICAgICAgfHwgIWYuZGVsaXZlcl9maXJzdHRpbWUKKyAgICAgICApCisgICAgICB7CQkJCS8qIFNl
bmQgUVVJVCBub3cgYW5kIG5vdCBsYXRlciAqLworICAgICAgKHZvaWQpc210cF93cml0ZV9jb21t
YW5kKHN4LCBTQ01EX0ZMVVNILCAiUVVJVFxyXG4iKTsKKyAgICAgIHN4LT5zZW5kX3F1aXQgPSBG
QUxTRTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CQkJCS8qIGFkZCBRVUlUIHRvIHRoZSBv
dXRwdXQgYnVmZmVyICovCisgICAgICAodm9pZClzbXRwX3dyaXRlX2NvbW1hbmQoc3gsIFNDTURf
TU9SRSwgIlFVSVRcclxuIik7CisgICAgICBzeC0+c2VuZF9xdWl0ID0gRkFMU0U7CS8qIGF2b2lk
IHNlbmRpbmcgaXQgbGF0ZXIgKi8KKworI2lmbmRlZiBESVNBQkxFX1RMUworICAgICAgaWYgKHN4
LT5jY3R4LnRsc19jdHggJiYgc3gtPnNlbmRfdGxzY2xvc2UpCS8qIG5lZWQgdG8gc2VuZCBUTFMg
Q2xvc2UgTm90aWZ5ICovCisJeworIyBpZmRlZiBFWElNX1RDUF9DT1JLCQkvKiBVc2UgX0NPUksg
dG8gZ2V0IENsb3NlIE5vdGlmeSBpbiBGSU4gc2VnbWVudCAqLworCSh2b2lkKSBzZXRzb2Nrb3B0
KHN4LT5jY3R4LnNvY2ssIElQUFJPVE9fVENQLCBFWElNX1RDUF9DT1JLLCBVUyAmb24sIHNpemVv
ZihvbikpOworIyBlbmRpZgorCXRsc19zaHV0ZG93bl93cihzeC0+Y2N0eC50bHNfY3R4KTsKKwlz
eC0+c2VuZF90bHNjbG9zZSA9IEZBTFNFOwkvKiBhdm9pZCBsYXRlciByZXBlYXQgKi8KKwl9Cisj
ZW5kaWYKKyAgICAgIEhERUJVRyhEX3RyYW5zcG9ydHxEX2FjbHxEX3YpIGRlYnVnX3ByaW50Zl9p
bmRlbnQoIiAgU01UUChzaHV0ZG93bik+PlxuIik7CisgICAgICBzaHV0ZG93bihzeC0+Y2N0eC5z
b2NrLCBTSFVUX1dSKTsJLyogZmx1c2ggb3V0cHV0IGJ1ZmZlciwgd2l0aCBUQ1AgRklOICovCisg
ICAgICB9CisgICAgfQorCisgIGlmIChzbXRwX3BlZXJfb3B0aW9ucyAmIE9QVElPTl9DSFVOS0lO
RyAmJiBzeC0+Y21kX2NvdW50ID4gMSkKICAgICB7CiAgICAgLyogUmVhcCBhbnkgb3V0c3RhbmRp
bmcgTUFJTCAmIFJDUFQgY29tbWFuZHMsIGJ1dCBub3QgYSBEQVRBLWdvLWFoZWFkICovCiAgICAg
c3dpdGNoKHN5bmNfcmVzcG9uc2VzKHN4LCBzeC0+Y21kX2NvdW50LTEsIDApKQpAQCAtMzkyMCw5
ICs0MjMyLDkgQEAKICAgICAgICAgICAhc3gtPmxtdHAKICAgICAgICApCiAgICAgICB7Ci0gICAg
ICBjb25zdCB1c2NoYXIgKnMgPSBzdHJpbmdfcHJpbnRpbmcoc3gtPmJ1ZmZlcik7CisgICAgICBj
b25zdCB1c2NoYXIgKiBzID0gc3RyaW5nX3ByaW50aW5nKHN4LT5idWZmZXIpOwogICAgICAgLyog
ZGVjb25zdCBjYXN0IG9rIGhlcmUgYXMgc3RyaW5nX3ByaW50aW5nIHdhcyBjaGVja2VkIHRvIGhh
dmUgYWxsb2Mnbidjb3BpZWQgKi8KLSAgICAgIGNvbmYgPSAocyA9PSBzeC0+YnVmZmVyKT8gVVMg
c3RyaW5nX2NvcHkocykgOiBVUyBzOworICAgICAgY29uZiA9IHMgPT0gc3gtPmJ1ZmZlciA/IFVT
IHN0cmluZ19jb3B5KHMpIDogVVMgczsKICAgICAgIH0KIAogICAgIC8qIFByb2Nlc3MgYWxsIHRy
YW5zcG9ydGVkIGFkZHJlc3NlcyAtIGZvciBMTVRQIG9yIFBSRFIsIHJlYWQgYSBzdGF0dXMgZm9y
CkBAIC00MDAxLDcgKzQzMTMsNyBAQAogI2lmbmRlZiBESVNBQkxFX1BSRFIKICAgICAgIGlmIChz
eC0+cHJkcl9hY3RpdmUpIHNldGZsYWcoYWRkciwgYWZfcHJkcl91c2VkKTsKICNlbmRpZgotICAg
ICAgaWYgKHN4LT5wZWVyX29mZmVyZWQgJiBPUFRJT05fQ0hVTktJTkcpIHNldGZsYWcoYWRkciwg
YWZfY2h1bmtpbmdfdXNlZCk7CisgICAgICBpZiAoc210cF9wZWVyX29wdGlvbnMgJiBPUFRJT05f
Q0hVTktJTkcpIHNldGZsYWcoYWRkciwgYWZfY2h1bmtpbmdfdXNlZCk7CiAgICAgICBmbGFnID0g
Jy0nOwogCiAjaWZuZGVmIERJU0FCTEVfUFJEUgpAQCAtNDAxOCw3ICs0MzMwLDcgQEAKICAgICAg
ICAgZWxzZQogICAgICAgICAgIHNwcmludGYoQ1Mgc3gtPmJ1ZmZlciwgIiUuNTAwc1xuIiwgYWRk
ci0+dW5pcXVlKTsKIAotICAgICAgICBERUJVRyhEX2RlbGl2ZXIpIGRlYnVnX3ByaW50ZigiUzpq
b3VybmFsbGluZyAlc1xuIiwgc3gtPmJ1ZmZlcik7CisgICAgICAgIERFQlVHKERfZGVsaXZlcikg
ZGVidWdfcHJpbnRmKCJTOmpvdXJuYWxsaW5nICVzIiwgc3gtPmJ1ZmZlcik7CiAgICAgICAgIGxl
biA9IFVzdHJsZW4oQ1Mgc3gtPmJ1ZmZlcik7CiAgICAgICAgIGlmICh3cml0ZShqb3VybmFsX2Zk
LCBzeC0+YnVmZmVyLCBsZW4pICE9IGxlbikKICAgICAgICAgICBsb2dfd3JpdGUoMCwgTE9HX01B
SU58TE9HX1BBTklDLCAiZmFpbGVkIHRvIHdyaXRlIGpvdXJuYWwgZm9yICIKQEAgLTQwNzIsNiAr
NDM4NCw3IEBACiAJICAgICAgIiVzOiAlcyIsIHN4LT5idWZmZXIsIHN0cmVycm9yKGVycm5vKSk7
CiAJICB9CiAJZWxzZSBpZiAoYWRkci0+dHJhbnNwb3J0X3JldHVybiA9PSBERUZFUikKKwkgIC8q
WFhYIG1hZ2ljIHZhbHVlIC0yID8gbWF5YmUgaG9zdCttZXNzYWdlID8gKi8KIAkgIHJldHJ5X2Fk
ZF9pdGVtKGFkZHIsIGFkZHItPmFkZHJlc3NfcmV0cnlfa2V5LCAtMik7CiAgICAgICB9CiAjZW5k
aWYKQEAgLTQxMDIsNyArNDQxNSw4IEBACiAgICAgewogICAgIHNhdmVfZXJybm8gPSBlcnJubzsK
ICAgICBtZXNzYWdlID0gTlVMTDsKLSAgICBzeC0+c2VuZF9xdWl0ID0gY2hlY2tfcmVzcG9uc2Uo
aG9zdCwgJnNhdmVfZXJybm8sIGFkZHJsaXN0LT5tb3JlX2Vycm5vLAorICAgIC8qIENsZWFyIHNl
bmRfcXVpdCBmbGFnIGlmIG5lZWRlZC4gIERvIG5vdCBzZXQuICovCisgICAgc3gtPnNlbmRfcXVp
dCAmPSBjaGVja19yZXNwb25zZShob3N0LCAmc2F2ZV9lcnJubywgYWRkcmxpc3QtPm1vcmVfZXJy
bm8sCiAgICAgICBzeC0+YnVmZmVyLCAmY29kZSwgJm1lc3NhZ2UsICZwYXNzX21lc3NhZ2UpOwog
ICAgIGdvdG8gRkFJTEVEOwogICAgIH0KQEAgLTQxMTEsNyArNDQyNSw3IEBACiAgICAgewogICAg
IHNhdmVfZXJybm8gPSBlcnJubzsKICAgICBjb2RlID0gJzQnOwotICAgIG1lc3NhZ2UgPSBzdHJp
bmdfc3ByaW50Zigic2VuZCgpIHRvICVzIFslc10gZmFpbGVkOiAlcyIsCisgICAgbWVzc2FnZSA9
IHN0cmluZ19zcHJpbnRmKCJzbXRwIHNlbmQgdG8gJXMgWyVzXSBmYWlsZWQ6ICVzIiwKICAgICAg
IGhvc3QtPm5hbWUsIGhvc3QtPmFkZHJlc3MsIG1lc3NhZ2UgPyBtZXNzYWdlIDogVVMgc3RyZXJy
b3Ioc2F2ZV9lcnJubykpOwogICAgIHN4LT5zZW5kX3F1aXQgPSBGQUxTRTsKICAgICBnb3RvIEZB
SUxFRDsKQEAgLTQxNDcsNiArNDQ2MSwyMiBAQAogCW1lc3NhZ2VfZXJyb3IgPSBVc3RybmNtcChz
bXRwX2NvbW1hbmQsImVuZCAiLDQpID09IDA7CiAJYnJlYWs7CiAKKyNpZm5kZWYgRElTQUJMRV9E
S0lNCisgICAgICBjYXNlIEVBQ0NFUzoKKwkvKiBES0lNIHNpZ25pbmcgZmFpbHVyZTogYXZvaWQg
dGhpbmtpbmcgd2UgcGlwZWxpbmVkIHF1aXQsCisJanVzdCBhYmFuZG9uIHRoZSBtZXNzYWdlIGFu
ZCBjbG9zZSB0aGUgc29ja2V0LiAqLworCisJbWVzc2FnZV9lcnJvciA9IEZBTFNFOworIyBpZm5k
ZWYgRElTQUJMRV9UTFMKKwlpZiAoc3gtPmNjdHgudGxzX2N0eCkKKwkgIHsKKwkgIHRsc19jbG9z
ZShzeC0+Y2N0eC50bHNfY3R4LAorCQkgICAgc3gtPnNlbmRfdGxzY2xvc2UgPyBUTFNfU0hVVERP
V05fV0FJVCA6IFRMU19TSFVURE9XTl9XT05MWSk7CisJICBzeC0+Y2N0eC50bHNfY3R4ID0gTlVM
TDsKKwkgIH0KKyMgZW5kaWYKKwlicmVhazsKKyNlbmRpZgogICAgICAgZGVmYXVsdDoKIAltZXNz
YWdlX2Vycm9yID0gRkFMU0U7CiAJYnJlYWs7CkBAIC00MTg3LDggKzQ1MTcsMTUgQEAKIAogICAg
ICAgICAqbWVzc2FnZV9kZWZlciA9IFRSVUU7CiAgICAgICAgIH0KKyNpZmRlZiBUSU9DT1VUUQor
ICAgICAgREVCVUcoRF90cmFuc3BvcnQpIGlmIChzeC0+Y2N0eC5zb2NrID49IDApCisJeworCWlu
dCBuOworCWlmIChpb2N0bChzeC0+Y2N0eC5zb2NrLCBUSU9DT1VUUSwgJm4pID09IDApCisJICBk
ZWJ1Z19wcmludGYoIiVkIGJ5dGVzIHJlbWFpbiBpbiBzb2NrZXQgb3V0cHV0IGJ1ZmZlclxuIiwg
bik7CisJfQorI2VuZGlmCiAgICAgICB9Ci0KICAgICAvKiBPdGhlcndpc2UsIHdlIGhhdmUgYW4g
SS9PIGVycm9yIG9yIGEgdGltZW91dCBvdGhlciB0aGFuIGFmdGVyIE1BSUwgb3IKICAgICAiLiIs
IG9yIHNvbWUgb3RoZXIgdHJhbnNwb3J0YXRpb24gZXJyb3IuIFdlIGRlZmVyIGFsbCBhZGRyZXNz
ZXMgYW5kIHlpZWxkCiAgICAgREVGRVIsIGV4Y2VwdCBmb3IgdGhlIGNhc2Ugb2YgZmFpbGVkIGFk
ZF9oZWFkZXJzIGV4cGFuc2lvbiwgb3IgYSB0cmFuc3BvcnQKQEAgLTQyNTUsODQgKzQ1OTIsOTkg
QEAKICAgICBzeC0+c2VuZF9yc2V0LCBmLmNvbnRpbnVlX21vcmUsIHlpZWxkLCBzeC0+Zmlyc3Rf
YWRkciA/ICJub3QgIiA6ICIiKTsKIAogaWYgKHN4LT5jb21wbGV0ZWRfYWRkciAmJiBzeC0+b2sg
JiYgc3gtPnNlbmRfcXVpdCkKLSAgewotICBCT09MIG1vcmU7Ci0gIHNtdHBfY29tcGFyZV90IHRf
Y29tcGFyZTsKLQotICB0X2NvbXBhcmUudGJsb2NrID0gdGJsb2NrOwotICB0X2NvbXBhcmUuY3Vy
cmVudF9zZW5kZXJfYWRkcmVzcyA9IHNlbmRlcl9hZGRyZXNzOwotCi0gIGlmICggIHN4LT5maXJz
dF9hZGRyICE9IE5VTEwJCS8qIG1vcmUgYWRkcnMgZm9yIHRoaXMgbWVzc2FnZSAqLwotICAgICB8
fCBmLmNvbnRpbnVlX21vcmUJCQkvKiBtb3JlIGFkZHJzIGZvciBjb25pbnVlZC1ob3N0ICovCi0g
ICAgIHx8ICgKLSNpZm5kZWYgRElTQUJMRV9UTFMKLQkgICAoICB0bHNfb3V0LmFjdGl2ZS5zb2Nr
IDwgMCAgJiYgICFjb250aW51ZV9wcm94eV9jaXBoZXIKLSAgICAgICAgICAgfHwgdmVyaWZ5X2No
ZWNrX2dpdmVuX2hvc3QoQ1VTUyAmb2ItPmhvc3RzX25vcGFzc190bHMsIGhvc3QpICE9IE9LCi0J
ICAgKQotICAgICAgICAmJgorI2lmZGVmIEVYUEVSSU1FTlRBTF9FU01UUF9MSU1JVFMKKyAgaWYg
KG1haWxfbGltaXQgPSBjb250aW51ZV9zZXF1ZW5jZSA+PSBzeC0+bWF4X21haWwpCisgICAgewor
ICAgIERFQlVHKERfdHJhbnNwb3J0KQorICAgICAgZGVidWdfcHJpbnRmKCJyZWFjaGVkIGxpbWl0
ICV1IGZvciBNQUlMcyBwZXIgY29ublxuIiwgc3gtPm1heF9tYWlsKTsKKyAgICB9CisgIGVsc2UK
ICNlbmRpZgotICAgICAgICAgICB0cmFuc3BvcnRfY2hlY2tfd2FpdGluZyh0YmxvY2stPm5hbWUs
IGhvc3QtPm5hbWUsCi0gICAgICAgICAgICAgdGJsb2NrLT5jb25uZWN0aW9uX21heF9tZXNzYWdl
cywgbmV3X21lc3NhZ2VfaWQsICZtb3JlLAotCSAgICAgKG9pY2Ypc210cF9hcmVfc2FtZV9pZGVu
dGl0aWVzLCAodm9pZCopJnRfY29tcGFyZSkKLSAgICAgKSAgKQogICAgIHsKLSAgICB1c2NoYXIg
Km1zZzsKLSAgICBCT09MIHBhc3NfbWVzc2FnZTsKKyAgICBzbXRwX2NvbXBhcmVfdCB0X2NvbXBh
cmUgPQorICAgICAgey50YmxvY2sgPSB0YmxvY2ssIC5jdXJyZW50X3NlbmRlcl9hZGRyZXNzID0g
c2VuZGVyX2FkZHJlc3N9OwogCi0gICAgaWYgKHN4LT5zZW5kX3JzZXQpCi0gICAgICBpZiAoISAo
c3gtPm9rID0gc210cF93cml0ZV9jb21tYW5kKHN4LCBTQ01EX0ZMVVNILCAiUlNFVFxyXG4iKSA+
PSAwKSkKLSAgICAgICAgewotICAgICAgICBtc2cgPSBVUyBzdHJpbmdfc3ByaW50Zigic2VuZCgp
IHRvICVzIFslc10gZmFpbGVkOiAlcyIsIGhvc3QtPm5hbWUsCi0gICAgICAgICAgaG9zdC0+YWRk
cmVzcywgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgc3gtPnNlbmRfcXVpdCA9IEZBTFNFOwot
ICAgICAgICB9Ci0gICAgICBlbHNlIGlmICghIChzeC0+b2sgPSBzbXRwX3JlYWRfcmVzcG9uc2Uo
c3gsIHN4LT5idWZmZXIsIHNpemVvZihzeC0+YnVmZmVyKSwKLQkJICAnMicsIG9iLT5jb21tYW5k
X3RpbWVvdXQpKSkKLSAgICAgICAgewotICAgICAgICBpbnQgY29kZTsKLSAgICAgICAgc3gtPnNl
bmRfcXVpdCA9IGNoZWNrX3Jlc3BvbnNlKGhvc3QsICZlcnJubywgMCwgc3gtPmJ1ZmZlciwgJmNv
ZGUsICZtc2csCi0gICAgICAgICAgJnBhc3NfbWVzc2FnZSk7Ci0gICAgICAgIGlmICghc3gtPnNl
bmRfcXVpdCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgREVCVUcoRF90cmFuc3BvcnQpIGRlYnVn
X3ByaW50ZigiSD0lcyBbJXNdICVzXG4iLAotCSAgICBob3N0LT5uYW1lLCBob3N0LT5hZGRyZXNz
LCBtc2cpOwotICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGlmICggIHN4LT5maXJzdF9hZGRy
CQkJLyogbW9yZSBhZGRycyBmb3IgdGhpcyBtZXNzYWdlICovCisgICAgICAgfHwgZi5jb250aW51
ZV9tb3JlCQkJLyogbW9yZSBhZGRycyBmb3IgY29udGludWVkLWhvc3QgKi8KKyAgICAgICB8fCB0
Y3dfZG9uZSAmJiB0Y3cJCQkvKiBtb3JlIG1lc3NhZ2VzIGZvciBob3N0ICovCisgICAgICAgfHwg
KAorI2lmbmRlZiBESVNBQkxFX1RMUworCSAgICAgKCAgdGxzX291dC5hY3RpdmUuc29jayA8IDAg
ICYmICAhY29udGludWVfcHJveHlfY2lwaGVyCisJICAgICB8fCB2ZXJpZnlfY2hlY2tfZ2l2ZW5f
aG9zdChDVVNTICZvYi0+aG9zdHNfbm9wYXNzX3RscywgaG9zdCkgIT0gT0sKKwkgICAgICkKKwkg
ICYmCisjZW5kaWYKKwkgICAgIHRyYW5zcG9ydF9jaGVja193YWl0aW5nKHRibG9jay0+bmFtZSwg
aG9zdC0+bmFtZSwKKwkgICAgICAgc3gtPm1heF9tYWlsLCBuZXdfbWVzc2FnZV9pZCwKKwkgICAg
ICAgKG9pY2Ypc210cF9hcmVfc2FtZV9pZGVudGl0aWVzLCAodm9pZCopJnRfY29tcGFyZSkKKyAg
ICAgICApICApCisgICAgICB7CisgICAgICB1c2NoYXIgKm1zZzsKKyAgICAgIEJPT0wgcGFzc19t
ZXNzYWdlOwogCi0gICAgLyogRWl0aGVyIFJTRVQgd2FzIG5vdCBuZWVkZWQsIG9yIGl0IHN1Y2Nl
ZWRlZCAqLworICAgICAgaWYgKHN4LT5zZW5kX3JzZXQpCisJaWYgKCEgKHN4LT5vayA9IHNtdHBf
d3JpdGVfY29tbWFuZChzeCwgU0NNRF9GTFVTSCwgIlJTRVRcclxuIikgPj0gMCkpCisJICB7CisJ
ICBtc2cgPSBVUyBzdHJpbmdfc3ByaW50Zigic210cCBzZW5kIHRvICVzIFslc10gZmFpbGVkOiAl
cyIsIGhvc3QtPm5hbWUsCisJICAgIGhvc3QtPmFkZHJlc3MsIHN0cmVycm9yKGVycm5vKSk7CisJ
ICBzeC0+c2VuZF9xdWl0ID0gRkFMU0U7CisJICB9CisJZWxzZSBpZiAoISAoc3gtPm9rID0gc210
cF9yZWFkX3Jlc3BvbnNlKHN4LCBzeC0+YnVmZmVyLCBzaXplb2Yoc3gtPmJ1ZmZlciksCisJCSAg
ICAnMicsIG9iLT5jb21tYW5kX3RpbWVvdXQpKSkKKwkgIHsKKwkgIGludCBjb2RlOworCSAgc3gt
PnNlbmRfcXVpdCA9IGNoZWNrX3Jlc3BvbnNlKGhvc3QsICZlcnJubywgMCwgc3gtPmJ1ZmZlciwg
JmNvZGUsICZtc2csCisJICAgICZwYXNzX21lc3NhZ2UpOworCSAgaWYgKCFzeC0+c2VuZF9xdWl0
KQorCSAgICB7CisJICAgIERFQlVHKERfdHJhbnNwb3J0KSBkZWJ1Z19wcmludGYoIkg9JXMgWyVz
XSAlc1xuIiwKKwkgICAgICBob3N0LT5uYW1lLCBob3N0LT5hZGRyZXNzLCBtc2cpOworCSAgICB9
CisJICB9CiAKLSAgICBpZiAoc3gtPm9rKQotICAgICAgeworICAgICAgLyogRWl0aGVyIFJTRVQg
d2FzIG5vdCBuZWVkZWQsIG9yIGl0IHN1Y2NlZWRlZCAqLworCisgICAgICBpZiAoc3gtPm9rKQor
CXsKICNpZm5kZWYgRElTQUJMRV9UTFMKLSAgICAgIGludCBwZmRbMl07CisJaW50IHBmZFsyXTsK
ICNlbmRpZgotICAgICAgaW50IHNvY2tldF9mZCA9IHN4LT5jY3R4LnNvY2s7Ci0KKwlpbnQgc29j
a2V0X2ZkID0gc3gtPmNjdHguc29jazsKIAotICAgICAgaWYgKHN4LT5maXJzdF9hZGRyICE9IE5V
TEwpCS8qIE1vcmUgYWRkcmVzc2VzIHN0aWxsIHRvIGJlIHNlbnQgKi8KLSAgICAgICAgewkJCQkv
KiAgIGZvciB0aGlzIG1lc3NhZ2UgICAgICAgICAgICAgICovCi0gICAgICAgIGNvbnRpbnVlX3Nl
cXVlbmNlKys7CQkvKiBDYXVzZXMgKiBpbiBsb2dnaW5nICovCi0JcGlwZWxpbmluZ19hY3RpdmUg
PSBzeC0+cGlwZWxpbmluZ191c2VkOyAgICAvKiB3YXMgY2xlYXJlZCBhdCBEQVRBICovCi0gICAg
ICAgIGdvdG8gU0VORF9NRVNTQUdFOwotICAgICAgICB9CisJaWYgKHN4LT5maXJzdF9hZGRyKQkJ
LyogTW9yZSBhZGRyZXNzZXMgc3RpbGwgdG8gYmUgc2VudCAqLworCSAgewkJCQkvKiAgIGZvciB0
aGlzIG1lc3NhZ2UgICAgICAgICAgICAgICovCisjaWZkZWYgRVhQRVJJTUVOVEFMX0VTTVRQX0xJ
TUlUUworCSAgLyogQW55IHRoYXQgd2UgbWFya2VkIGFzIHNraXBwZWQsIHJlc2V0IHRvIGRvIG5v
dyAqLworCSAgZm9yIChhZGRyZXNzX2l0ZW0gKiBhID0gc3gtPmZpcnN0X2FkZHI7IGE7IGEgPSBh
LT5uZXh0KQorCSAgICBpZiAoYS0+dHJhbnNwb3J0X3JldHVybiA9PSBTS0lQKQorCSAgICAgIGEt
PnRyYW5zcG9ydF9yZXR1cm4gPSBQRU5ESU5HX0RFRkVSOworI2VuZGlmCisJICBjb250aW51ZV9z
ZXF1ZW5jZSsrOwkJCQkvKiBmb3IgY29uc2lzdGVuY3kgKi8KKwkgIGNsZWFyZmxhZyhzeC0+Zmly
c3RfYWRkciwgYWZfbmV3X2Nvbm4pOworCSAgc2V0ZmxhZyhzeC0+Zmlyc3RfYWRkciwgYWZfY29u
dF9jb25uKTsJLyogQ2F1c2VzICogaW4gbG9nZ2luZyAqLworCSAgcGlwZWxpbmluZ19hY3RpdmUg
PSBzeC0+cGlwZWxpbmluZ191c2VkOwkvKiB3YXMgY2xlYXJlZCBhdCBEQVRBICovCisJICBnb3Rv
IFNFTkRfTUVTU0FHRTsKKwkgIH0KIAotICAgICAgLyogVW5sZXNzIGNhbGxlciBzYWlkIGl0IGFs
cmVhZHkgaGFzIG1vcmUgbWVzc2FnZXMgbGlzdGVkIGZvciB0aGlzIGhvc3QsCi0gICAgICBwYXNz
IHRoZSBjb25uZWN0aW9uIG9uIHRvIGEgbmV3IEV4aW0gcHJvY2VzcyAoYmVsb3csIHRoZSBjYWxs
IHRvCi0gICAgICB0cmFuc3BvcnRfcGFzc19zb2NrZXQpLiAgSWYgdGhlIGNhbGxlciBoYXMgbW9y
ZSByZWFkeSwganVzdCByZXR1cm4gd2l0aAotICAgICAgdGhlIGNvbm5lY3Rpb24gc3RpbGwgb3Bl
bi4gKi8KKwkvKiBVbmxlc3MgY2FsbGVyIHNhaWQgaXQgYWxyZWFkeSBoYXMgbW9yZSBtZXNzYWdl
cyBsaXN0ZWQgZm9yIHRoaXMgaG9zdCwKKwlwYXNzIHRoZSBjb25uZWN0aW9uIG9uIHRvIGEgbmV3
IEV4aW0gcHJvY2VzcyAoYmVsb3csIHRoZSBjYWxsIHRvCisJdHJhbnNwb3J0X3Bhc3Nfc29ja2V0
KS4gIElmIHRoZSBjYWxsZXIgaGFzIG1vcmUgcmVhZHksIGp1c3QgcmV0dXJuIHdpdGgKKwl0aGUg
Y29ubmVjdGlvbiBzdGlsbCBvcGVuLiAqLwogCiAjaWZuZGVmIERJU0FCTEVfVExTCi0gICAgICBp
ZiAodGxzX291dC5hY3RpdmUuc29jayA+PSAwKQotCWlmICggIGYuY29udGludWVfbW9yZQotCSAg
IHx8IHZlcmlmeV9jaGVja19naXZlbl9ob3N0KENVU1MgJm9iLT5ob3N0c19ub3Byb3h5X3Rscywg
aG9zdCkgPT0gT0spCi0JICB7Ci0JICAvKiBCZWZvcmUgcGFzc2luZyB0aGUgc29ja2V0IG9uLCBv
ciByZXR1cm5pbmcgdG8gY2FsbGVyIHdpdGggaXQgc3RpbGwKLQkgIG9wZW4sIHdlIG11c3Qgc2h1
dCBkb3duIFRMUy4gIE5vdCBhbGwgTVRBcyBhbGxvdyBmb3IgdGhlIGNvbnRpbnVhdGlvbgotCSAg
b2YgdGhlIFNNVFAgc2Vzc2lvbiB3aGVuIFRMUyBpcyBzaHV0IGRvd24uIFdlIHRlc3QgZm9yIHRo
aXMgYnkgc2VuZGluZwotCSAgYSBuZXcgRUhMTy4gSWYgd2UgZG9uJ3QgZ2V0IGEgZ29vZCByZXNw
b25zZSwgd2UgZG9uJ3QgYXR0ZW1wdCB0byBwYXNzCi0JICB0aGUgc29ja2V0IG9uLiAqLwotCi0J
ICB0bHNfY2xvc2Uoc3gtPmNjdHgudGxzX2N0eCwgVExTX1NIVVRET1dOX1dBSVQpOworCWlmICh0
bHNfb3V0LmFjdGl2ZS5zb2NrID49IDApCisJICBpZiAoICBmLmNvbnRpbnVlX21vcmUKKwkgICAg
IHx8IHZlcmlmeV9jaGVja19naXZlbl9ob3N0KENVU1MgJm9iLT5ob3N0c19ub3Byb3h5X3Rscywg
aG9zdCkgPT0gT0spCisJICAgIHsKKwkgICAgLyogQmVmb3JlIHBhc3NpbmcgdGhlIHNvY2tldCBv
biwgb3IgcmV0dXJuaW5nIHRvIGNhbGxlciB3aXRoIGl0IHN0aWxsCisJICAgIG9wZW4sIHdlIG11
c3Qgc2h1dCBkb3duIFRMUy4gIE5vdCBhbGwgTVRBcyBhbGxvdyBmb3IgdGhlIGNvbnRpbnVhdGlv
bgorCSAgICBvZiB0aGUgU01UUCBzZXNzaW9uIHdoZW4gVExTIGlzIHNodXQgZG93bi4gV2UgdGVz
dCBmb3IgdGhpcyBieSBzZW5kaW5nCisJICAgIGEgbmV3IEVITE8uIElmIHdlIGRvbid0IGdldCBh
IGdvb2QgcmVzcG9uc2UsIHdlIGRvbid0IGF0dGVtcHQgdG8gcGFzcworCSAgICB0aGUgc29ja2V0
IG9uLiAqLworCisJICB0bHNfY2xvc2Uoc3gtPmNjdHgudGxzX2N0eCwKKwkgICAgc3gtPnNlbmRf
dGxzY2xvc2UgPyBUTFNfU0hVVERPV05fV0FJVCA6IFRMU19TSFVURE9XTl9XT05MWSk7CisJICBz
eC0+c2VuZF90bHNjbG9zZSA9IEZBTFNFOwogCSAgc3gtPmNjdHgudGxzX2N0eCA9IE5VTEw7CiAJ
ICB0bHNfb3V0LmFjdGl2ZS5zb2NrID0gLTE7CiAJICBzbXRwX3BlZXJfb3B0aW9ucyA9IHNtdHBf
cGVlcl9vcHRpb25zX3dyYXA7CkBAIC00MzQyLDExNiArNDY5NCwxMTAgQEAKIAkgICAgJiYgc210
cF9yZWFkX3Jlc3BvbnNlKHN4LCBzeC0+YnVmZmVyLCBzaXplb2Yoc3gtPmJ1ZmZlciksCiAJCQkJ
ICAgICAgJzInLCBvYi0+Y29tbWFuZF90aW1lb3V0KTsKIAotCSAgaWYgKHN4LT5vayAmJiBmLmNv
bnRpbnVlX21vcmUpCi0JICAgIGdvdG8gVElEWVVQOwkJLyogTW9yZSBhZGRyZXNzZXMgZm9yIGFu
b3RoZXIgcnVuICovCi0JICB9Ci0JZWxzZQotCSAgewotCSAgLyogU2V0IHVwIGEgcGlwZSBmb3Ig
cHJveHlpbmcgVExTIGZvciB0aGUgbmV3IHRyYW5zcG9ydCBwcm9jZXNzICovCi0KLQkgIHNtdHBf
cGVlcl9vcHRpb25zIHw9IE9QVElPTl9UTFM7Ci0JICBpZiAoKHN4LT5vayA9IHNvY2tldHBhaXIo
QUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIHBmZCkgPT0gMCkpCi0JICAgIHNvY2tldF9mZCA9IHBm
ZFsxXTsKKwkgICAgaWYgKHN4LT5vayAmJiBmLmNvbnRpbnVlX21vcmUpCisJICAgICAgZ290byBU
SURZVVA7CQkvKiBNb3JlIGFkZHJlc3NlcyBmb3IgYW5vdGhlciBydW4gKi8KKwkgICAgfQogCSAg
ZWxzZQotCSAgICBzZXRfZXJybm8oc3gtPmZpcnN0X2FkZHIsIGVycm5vLCBVUyJpbnRlcm5hbCBh
bGxvY2F0aW9uIHByb2JsZW0iLAotCQkgICAgREVGRVIsIEZBTFNFLCBob3N0LAorCSAgICB7CisJ
ICAgIC8qIFNldCB1cCBhIHBpcGUgZm9yIHByb3h5aW5nIFRMUyBmb3IgdGhlIG5ldyB0cmFuc3Bv
cnQgcHJvY2VzcyAqLworCisJICAgIHNtdHBfcGVlcl9vcHRpb25zIHw9IE9QVElPTl9UTFM7CisJ
ICAgIGlmICgoc3gtPm9rID0gc29ja2V0cGFpcihBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgcGZk
KSA9PSAwKSkKKwkgICAgICBzb2NrZXRfZmQgPSBwZmRbMV07CisJICAgIGVsc2UKKwkgICAgICBz
ZXRfZXJybm8oc3gtPmZpcnN0X2FkZHIsIGVycm5vLCBVUyJpbnRlcm5hbCBhbGxvY2F0aW9uIHBy
b2JsZW0iLAorCQkgICAgICBERUZFUiwgRkFMU0UsIGhvc3QsCiAjIGlmZGVmIEVYUEVSSU1FTlRB
TF9EU05fSU5GTwotCQkgICAgc3gtPnNtdHBfZ3JlZXRpbmcsIHN4LT5oZWxvX3Jlc3BvbnNlLAor
CQkgICAgICBzeC0+c210cF9ncmVldGluZywgc3gtPmhlbG9fcmVzcG9uc2UsCiAjIGVuZGlmCi0J
CSAgICAmc3gtPmRlbGl2ZXJ5X3N0YXJ0KTsKLQkgIH0KLSAgICAgIGVsc2UKKwkJICAgICAgJnN4
LT5kZWxpdmVyeV9zdGFydCk7CisJICAgIH0KKwllbHNlCiAjZW5kaWYKLQlpZiAoZi5jb250aW51
ZV9tb3JlKQotCSAgZ290byBUSURZVVA7CQkJLyogTW9yZSBhZGRyZXNzZXMgZm9yIGFub3RoZXIg
cnVuICovCi0KLSAgICAgIC8qIElmIHRoZSBzb2NrZXQgaXMgc3VjY2Vzc2Z1bGx5IHBhc3NlZCwg
d2UgbXVzdG4ndCBzZW5kIFFVSVQgKG9yCi0gICAgICBpbmRlZWQgYW55dGhpbmchKSBmcm9tIGhl
cmUuICovCisJICBpZiAoZi5jb250aW51ZV9tb3JlKQorCSAgICBnb3RvIFRJRFlVUDsJCQkvKiBN
b3JlIGFkZHJlc3NlcyBmb3IgYW5vdGhlciBydW4gKi8KIAotLypYWFggRFNOX0lORk86IGFzc3Vt
ZSBsaWtlbHkgdG8gZG8gbmV3IEhFTE87IGJ1dCBmb3IgZ3JlZXQgd2UnbGwgd2FudCB0bwotcHJv
cGFnYXRlIGl0IGZyb20gdGhlIGluaXRpYWwKLSovCi0gICAgICBpZiAoc3gtPm9rICYmIHRyYW5z
cG9ydF9wYXNzX3NvY2tldCh0YmxvY2stPm5hbWUsIGhvc3QtPm5hbWUsCi0JICAgIGhvc3QtPmFk
ZHJlc3MsIG5ld19tZXNzYWdlX2lkLCBzb2NrZXRfZmQpKQotCXsKLSAgICAgICAgc3gtPnNlbmRf
cXVpdCA9IEZBTFNFOworCS8qIElmIHRoZSBzb2NrZXQgaXMgc3VjY2Vzc2Z1bGx5IHBhc3NlZCwg
d2UgbXVzdG4ndCBzZW5kIFFVSVQgKG9yCisJaW5kZWVkIGFueXRoaW5nISkgZnJvbSBoZXJlLiAq
LwogCi0JLyogV2UgaGF2ZSBwYXNzZWQgdGhlIGNsaWVudCBzb2NrZXQgdG8gYSBmcmVzaCB0cmFu
c3BvcnQgcHJvY2Vzcy4KLQlJZiBUTFMgaXMgc3RpbGwgYWN0aXZlLCB3ZSBuZWVkIHRvIHByb3h5
IGl0IGZvciB0aGUgdHJhbnNwb3J0IHdlCi0JanVzdCBwYXNzZWQgdGhlIGJhdG9uIHRvLiAgRm9y
ayBhIGNoaWxkIHRvIHRvIGRvIGl0LCBhbmQgcmV0dXJuIHRvCi0JZ2V0IGxvZ2dpbmcgZG9uZSBh
c2FwLiAgV2hpY2ggd2F5IHRvIHBsYWNlIHRoZSB3b3JrIG1ha2VzIGFzc3VtcHRpb25zCi0JYWJv
dXQgcG9zdC1mb3JrIHByaW9yaXRpc2F0aW9uIHdoaWNoIG1heSBub3QgaG9sZCBvbiBhbGwgcGxh
dGZvcm1zLiAqLwotI2lmbmRlZiBESVNBQkxFX1RMUwotCWlmICh0bHNfb3V0LmFjdGl2ZS5zb2Nr
ID49IDApCisgIC8qWFhYIERTTl9JTkZPOiBhc3N1bWUgbGlrZWx5IHRvIGRvIG5ldyBIRUxPOyBi
dXQgZm9yIGdyZWV0IHdlJ2xsIHdhbnQgdG8KKyAgcHJvcGFnYXRlIGl0IGZyb20gdGhlIGluaXRp
YWwKKyAgKi8KKwlpZiAoc3gtPm9rICYmIHRyYW5zcG9ydF9wYXNzX3NvY2tldCh0YmxvY2stPm5h
bWUsIGhvc3QtPm5hbWUsCisJICAgICAgaG9zdC0+YWRkcmVzcywgbmV3X21lc3NhZ2VfaWQsIHNv
Y2tldF9mZAorI2lmZGVmIEVYUEVSSU1FTlRBTF9FU01UUF9MSU1JVFMKKwkgICAgICAsIHN4LT5w
ZWVyX2xpbWl0X21haWwsIHN4LT5wZWVyX2xpbWl0X3JjcHQsIHN4LT5wZWVyX2xpbWl0X3JjcHRk
b20KKyNlbmRpZgorCSAgICAgICkpCiAJICB7Ci0JICBpbnQgcGlkID0gZXhpbV9mb3JrKFVTInRs
cy1wcm94eS1pbnRlcnByb2MiKTsKLQkgIGlmIChwaWQgPT0gMCkJCS8qIGNoaWxkOyBmb3JrIGFn
YWluIHRvIGRpc2Nvbm5lY3QgdG90YWxseSAqLwotCSAgICB7Ci0JICAgIC8qIGRvZXMgbm90IHJl
dHVybiAqLwotCSAgICBzbXRwX3Byb3h5X3RscyhzeC0+Y2N0eC50bHNfY3R4LCBzeC0+YnVmZmVy
LCBzaXplb2Yoc3gtPmJ1ZmZlciksIHBmZCwKLQkJCSAgICBvYi0+Y29tbWFuZF90aW1lb3V0KTsK
LQkgICAgfQorCSAgc3gtPnNlbmRfcXVpdCA9IEZBTFNFOwogCi0JICBpZiAocGlkID4gMCkJCS8q
IHBhcmVudCAqLworCSAgLyogV2UgaGF2ZSBwYXNzZWQgdGhlIGNsaWVudCBzb2NrZXQgdG8gYSBm
cmVzaCB0cmFuc3BvcnQgcHJvY2Vzcy4KKwkgIElmIFRMUyBpcyBzdGlsbCBhY3RpdmUsIHdlIG5l
ZWQgdG8gcHJveHkgaXQgZm9yIHRoZSB0cmFuc3BvcnQgd2UKKwkgIGp1c3QgcGFzc2VkIHRoZSBi
YXRvbiB0by4gIEZvcmsgYSBjaGlsZCB0byB0byBkbyBpdCwgYW5kIHJldHVybiB0bworCSAgZ2V0
IGxvZ2dpbmcgZG9uZSBhc2FwLiAgV2hpY2ggd2F5IHRvIHBsYWNlIHRoZSB3b3JrIG1ha2VzIGFz
c3VtcHRpb25zCisJICBhYm91dCBwb3N0LWZvcmsgcHJpb3JpdGlzYXRpb24gd2hpY2ggbWF5IG5v
dCBob2xkIG9uIGFsbCBwbGF0Zm9ybXMuICovCisjaWZuZGVmIERJU0FCTEVfVExTCisJICBpZiAo
dGxzX291dC5hY3RpdmUuc29jayA+PSAwKQogCSAgICB7Ci0JICAgIGNsb3NlKHBmZFswXSk7Ci0J
ICAgIC8qIHRpZHkgdGhlIGludGVyLXByb2MgdG8gZGlzY29ubiB0aGUgcHJveHkgcHJvYyAqLwot
CSAgICB3YWl0cGlkKHBpZCwgTlVMTCwgMCk7Ci0JICAgIHRsc19jbG9zZShzeC0+Y2N0eC50bHNf
Y3R4LCBUTFNfTk9fU0hVVERPV04pOwotCSAgICBzeC0+Y2N0eC50bHNfY3R4ID0gTlVMTDsKLQkg
ICAgKHZvaWQpY2xvc2Uoc3gtPmNjdHguc29jayk7Ci0JICAgIHN4LT5jY3R4LnNvY2sgPSAtMTsK
LQkgICAgY29udGludWVfdHJhbnNwb3J0ID0gTlVMTDsKLQkgICAgY29udGludWVfaG9zdG5hbWUg
PSBOVUxMOwotCSAgICBnb3RvIFRJRFlVUDsKKwkgICAgaW50IHBpZCA9IGV4aW1fZm9yayhVUyJ0
bHMtcHJveHktaW50ZXJwcm9jIik7CisJICAgIGlmIChwaWQgPT0gMCkJCS8qIGNoaWxkOyBmb3Jr
IGFnYWluIHRvIGRpc2Nvbm5lY3QgdG90YWxseSAqLworCSAgICAgIHsKKwkgICAgICAvKiBkb2Vz
IG5vdCByZXR1cm4gKi8KKwkgICAgICBzbXRwX3Byb3h5X3RscyhzeC0+Y2N0eC50bHNfY3R4LCBz
eC0+YnVmZmVyLCBzaXplb2Yoc3gtPmJ1ZmZlciksIHBmZCwKKwkJCSAgICAgIG9iLT5jb21tYW5k
X3RpbWVvdXQsIGhvc3QtPm5hbWUpOworCSAgICAgIH0KKworCSAgICBpZiAocGlkID4gMCkJCS8q
IHBhcmVudCAqLworCSAgICAgIHsKKwkgICAgICBjbG9zZShwZmRbMF0pOworCSAgICAgIC8qIHRp
ZHkgdGhlIGludGVyLXByb2MgdG8gZGlzY29ubiB0aGUgcHJveHkgcHJvYyAqLworCSAgICAgIHdh
aXRwaWQocGlkLCBOVUxMLCAwKTsKKwkgICAgICB0bHNfY2xvc2Uoc3gtPmNjdHgudGxzX2N0eCwg
VExTX05PX1NIVVRET1dOKTsKKwkgICAgICBzeC0+Y2N0eC50bHNfY3R4ID0gTlVMTDsKKwkgICAg
ICAodm9pZCljbG9zZShzeC0+Y2N0eC5zb2NrKTsKKwkgICAgICBzeC0+Y2N0eC5zb2NrID0gLTE7
CisJICAgICAgY29udGludWVfdHJhbnNwb3J0ID0gTlVMTDsKKwkgICAgICBjb250aW51ZV9ob3N0
bmFtZSA9IE5VTEw7CisJICAgICAgZ290byBUSURZVVA7CisJICAgICAgfQorCSAgICBsb2dfd3Jp
dGUoMCwgTE9HX1BBTklDX0RJRSwgImZvcmsgZmFpbGVkIik7CiAJICAgIH0KLQkgIGxvZ193cml0
ZSgwLCBMT0dfUEFOSUNfRElFLCAiZm9yayBmYWlsZWQiKTsKLQkgIH0KICNlbmRpZgorCSAgfQog
CX0KLSAgICAgIH0KIAotICAgIC8qIElmIFJTRVQgZmFpbGVkIGFuZCB0aGVyZSBhcmUgYWRkcmVz
c2VzIGxlZnQsIHRoZXkgZ2V0IGRlZmVycmVkLiAqLwotICAgIGVsc2UKLSAgICAgIHNldF9lcnJu
byhzeC0+Zmlyc3RfYWRkciwgZXJybm8sIG1zZywgREVGRVIsIEZBTFNFLCBob3N0LAorICAgICAg
LyogSWYgUlNFVCBmYWlsZWQgYW5kIHRoZXJlIGFyZSBhZGRyZXNzZXMgbGVmdCwgdGhleSBnZXQg
ZGVmZXJyZWQuICovCisgICAgICBlbHNlCisJc2V0X2Vycm5vKHN4LT5maXJzdF9hZGRyLCBlcnJu
bywgbXNnLCBERUZFUiwgRkFMU0UsIGhvc3QsCiAjaWZkZWYgRVhQRVJJTUVOVEFMX0RTTl9JTkZP
Ci0JCSAgc3gtPnNtdHBfZ3JlZXRpbmcsIHN4LT5oZWxvX3Jlc3BvbnNlLAorCQkgICAgc3gtPnNt
dHBfZ3JlZXRpbmcsIHN4LT5oZWxvX3Jlc3BvbnNlLAogI2VuZGlmCi0JCSAgJnN4LT5kZWxpdmVy
eV9zdGFydCk7CisJCSAgICAmc3gtPmRlbGl2ZXJ5X3N0YXJ0KTsKKyAgICAgIH0KICAgICB9Ci0g
IH0KIAogLyogRW5kIG9mZiB0aWRpbHkgd2l0aCBRVUlUIHVubGVzcyB0aGUgY29ubmVjdGlvbiBo
YXMgZGllZCBvciB0aGUgc29ja2V0IGhhcwotYmVlbiBwYXNzZWQgdG8gYW5vdGhlciBwcm9jZXNz
LiBUaGVyZSBoYXMgYmVlbiBkaXNjdXNzaW9uIG9uIHRoZSBuZXQgYWJvdXQgd2hhdAotdG8gZG8g
YWZ0ZXIgc2VuZGluZyBRVUlULiBUaGUgd29yZGluZyBvZiB0aGUgUkZDIHN1Z2dlc3RzIHRoYXQg
aXQgaXMgbmVjZXNzYXJ5Ci10byB3YWl0IGZvciBhIHJlc3BvbnNlLCBidXQgb24gdGhlIG90aGVy
IGhhbmQsIHRoZXJlIGlzbid0IGFueXRoaW5nIG9uZSBjYW4gZG8KLXdpdGggYW4gZXJyb3IgcmVz
cG9uc2UsIG90aGVyIHRoYW4gbG9nIGl0LiBFeGltIHVzZWQgdG8gZG8gdGhhdC4gSG93ZXZlciwK
LWZ1cnRoZXIgZGlzY3Vzc2lvbiBzdWdnZXN0ZWQgdGhhdCBpdCBpcyBwb3NpdGl2ZWx5IGFkdmFu
dGFnZW91cyBub3QgdG8gd2FpdCBmb3IKLXRoZSByZXNwb25zZSwgYnV0IHRvIGNsb3NlIHRoZSBz
ZXNzaW9uIGltbWVkaWF0ZWx5LiBUaGlzIGlzIHN1cHBvc2VkIHRvIG1vdmUKLXRoZSBUQ1AvSVAg
VElNRV9XQUlUIHN0YXRlIGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50LCB0aGVyZWJ5IHJl
bW92aW5nIHNvbWUKLWxvYWQgZnJvbSB0aGUgc2VydmVyLiAoSG9zdHMgdGhhdCBhcmUgYm90aCBz
ZXJ2ZXJzIGFuZCBjbGllbnRzIG1heSBub3Qgc2VlIG11Y2gKLWRpZmZlcmVuY2UsIG9mIGNvdXJz
ZS4pIEZ1cnRoZXIgZGlzY3Vzc2lvbiBpbmRpY2F0ZWQgdGhhdCB0aGlzIHdhcyBzYWZlIHRvIGRv
Ci1vbiBVbml4IHN5c3RlbXMgd2hpY2ggaGF2ZSBkZWNlbnQgaW1wbGVtZW50YXRpb25zIG9mIFRD
UC9JUCB0aGF0IGxlYXZlIHRoZQotY29ubmVjdGlvbiBhcm91bmQgZm9yIGEgd2hpbGUgKFRJTUVf
V0FJVCkgYWZ0ZXIgdGhlIGFwcGxpY2F0aW9uIGhhcyBnb25lIGF3YXkuCi1UaGlzIGVuYWJsZXMg
dGhlIHJlc3BvbnNlIHNlbnQgYnkgdGhlIHNlcnZlciB0byBiZSBwcm9wZXJseSBBQ0tlZCByYXRo
ZXIgdGhhbgotdGltZWQgb3V0LCBhcyBjYW4gaGFwcGVuIG9uIGJyb2tlbiBUQ1AvSVAgaW1wbGVt
ZW50YXRpb25zIG9uIG90aGVyIE9TLgotCi1UaGlzIGNoYW5nZSBpcyBiZWluZyBtYWRlIG9uIDMx
LUp1bC05OC4gQWZ0ZXIgb3ZlciBhIHllYXIgb2YgdHJvdWJsZS1mcmVlCi1vcGVyYXRpb24sIHRo
ZSBvbGQgY29tbWVudGVkLW91dCBjb2RlIHdhcyByZW1vdmVkIG9uIDE3LVNlcC05OS4gKi8KK2Jl
ZW4gcGFzc2VkIHRvIGFub3RoZXIgcHJvY2Vzcy4gKi8KIAogU0VORF9RVUlUOgotI2lmZGVmIFRD
UF9DT1JLCi0odm9pZCkgc2V0c29ja29wdChzeC0+Y2N0eC5zb2NrLCBJUFBST1RPX1RDUCwgVENQ
X0NPUkssIFVTICZvbiwgc2l6ZW9mKG9uKSk7CitpZiAoc3gtPnNlbmRfcXVpdCkKKyAgewkJCS8q
IFVzZSBfTU9SRSB0byBnZXQgUVVJVCBpbiBGSU4gc2VnbWVudCAqLworICAodm9pZClzbXRwX3dy
aXRlX2NvbW1hbmQoc3gsIFNDTURfTU9SRSwgIlFVSVRcclxuIik7CisjaWZuZGVmIERJU0FCTEVf
VExTCisgIGlmIChzeC0+Y2N0eC50bHNfY3R4ICYmIHN4LT5zZW5kX3Rsc2Nsb3NlKQorICAgIHsK
KyMgaWZkZWYgRVhJTV9UQ1BfQ09SSwkvKiBVc2UgX0NPUksgdG8gZ2V0IFRMUyBDbG9zZSBOb3Rp
ZnkgaW4gRklOIHNlZ21lbnQgKi8KKyAgICAodm9pZCkgc2V0c29ja29wdChzeC0+Y2N0eC5zb2Nr
LCBJUFBST1RPX1RDUCwgRVhJTV9UQ1BfQ09SSywgVVMgJm9uLCBzaXplb2Yob24pKTsKKyMgZW5k
aWYKKyAgICB0bHNfc2h1dGRvd25fd3Ioc3gtPmNjdHgudGxzX2N0eCk7CisgICAgc3gtPnNlbmRf
dGxzY2xvc2UgPSBGQUxTRTsKKyAgICB9CiAjZW5kaWYKLWlmIChzeC0+c2VuZF9xdWl0KSAodm9p
ZClzbXRwX3dyaXRlX2NvbW1hbmQoc3gsIFNDTURfRkxVU0gsICJRVUlUXHJcbiIpOworICB9CiAK
IEVORF9PRkY6CiAKLSNpZm5kZWYgRElTQUJMRV9UTFMKLXRsc19jbG9zZShzeC0+Y2N0eC50bHNf
Y3R4LCBUTFNfU0hVVERPV05fTk9XQUlUKTsKLXN4LT5jY3R4LnRsc19jdHggPSBOVUxMOwotI2Vu
ZGlmCi0KIC8qIENsb3NlIHRoZSBzb2NrZXQsIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHZh
bHVlLCBmaXJzdCBzZXR0aW5nCiB3b3JrcyBiZWNhdXNlIHRoZSBOVUxMIHNldHRpbmcgaXMgcGFz
c2VkIGJhY2sgdG8gdGhlIGNhbGxpbmcgcHJvY2VzcywgYW5kCiByZW1vdGVfbWF4X3BhcmFsbGVs
IGlzIGZvcmNlZCB0byAxIHdoZW4gZGVsaXZlcmluZyBvdmVyIGFuIGV4aXN0aW5nIGNvbm5lY3Rp
b24sCkBAIC00NDYyLDIwICs0ODA4LDc0IEBACiBzcGVjaWZpZWQgaW4gdGhlIHRyYW5zcG9ydHMs
IGFuZCB0aGVyZWZvcmUgbm90IHZpc2libGUgYXQgdG9wIGxldmVsLCBpbiB3aGljaAogY2FzZSBj
b250aW51ZV9tb3JlIHdvbid0IGdldCBzZXQuICovCiAKLUhERUJVRyhEX3RyYW5zcG9ydHxEX2Fj
bHxEX3YpIGRlYnVnX3ByaW50Zl9pbmRlbnQoIiAgU01UUChjbG9zZSk+PlxuIik7CiBpZiAoc3gt
PnNlbmRfcXVpdCkKICAgeworICAvKiBUaGlzIGZsdXNoZXMgZGF0YSBxdWV1ZWQgaW4gdGhlIHNv
Y2tldCwgYmVpbmcgdGhlIFFVSVQgYW5kIGFueSBUTFMgQ2xvc2UsCisgIHNlbmRpbmcgdGhlbSBh
bG9uZyB3aXRoIHRoZSBjbGllbnQgRklOIGZsYWcuICBVcyAod2UgaG9wZSkgc2VuZGluZyBGSU4g
Zmlyc3QKKyAgbWVhbnMgd2UgKGNsaWVudCkgdGFrZSB0aGUgVElNRV9XQUlUIHN0YXRlLCBzbyB0
aGUgc2VydmVyICh3aGljaCBsaWtlbHkgaGFzIGEKKyAgaGlnaGVyIGNvbm5lY3Rpb24gcmF0ZSkg
ZG9lcyBub3QgaGF2ZSB0by4gKi8KKworICBIREVCVUcoRF90cmFuc3BvcnR8RF9hY2x8RF92KSBk
ZWJ1Z19wcmludGZfaW5kZW50KCIgIFNNVFAoc2h1dGRvd24pPj5cbiIpOwogICBzaHV0ZG93bihz
eC0+Y2N0eC5zb2NrLCBTSFVUX1dSKTsKLSAgbWlsbGlzbGVlcCgyMCk7Ci0gIHRlc3RoYXJuZXNz
X3BhdXNlX21zKDIwMCk7Ci0gIGlmIChmY250bChzeC0+Y2N0eC5zb2NrLCBGX1NFVEZMLCBPX05P
TkJMT0NLKSA9PSAwKQotICAgIGZvciAoaW50IGkgPSAxNjsgcmVhZChzeC0+Y2N0eC5zb2NrLCBz
eC0+aW5idWZmZXIsIHNpemVvZihzeC0+aW5idWZmZXIpKSA+IDAgJiYgaSA+IDA7KQotICAgICAg
aS0tOwkJCQkvKiBkcmFpbiBzb2NrZXQgKi8KICAgfQorCitpZiAoc3gtPnNlbmRfcXVpdCB8fCB0
Y3dfZG9uZSAmJiAhdGN3KQorICB7CisgIC8qIFdhaXQgZm9yICh3ZSBob3BlKSBhY2sgb2Ygb3Vy
IFFVSVQsIGFuZCBhIHNlcnZlciBGSU4uICBEaXNjYXJkIGFueSBkYXRhCisgIHJlY2VpdmVkLCB0
aGVuIGRpc2NhcmQgdGhlIHNvY2tldC4gIEFueSBwYWNrZXQgcmVjZWl2ZWQgYWZ0ZXIgdGhlbiwg
b3IgcmVjZWl2ZQorICBkYXRhIHN0aWxsIGluIHRoZSBzb2NrZXQsIHdpbGwgZ2V0IGEgUlNUIC0g
aGVuY2UgdGhlIHBhdXNlL2RyYWluLiAqLworCisgIC8qIFJlYXAgdGhlIHJlc3BvbnNlIHRvIFFV
SVQsIHRpbWluZyBvdXQgYWZ0ZXIgb25lIHNlY29uZCAqLworICAodm9pZCkgc210cF9yZWFkX3Jl
c3BvbnNlKHN4LCBzeC0+YnVmZmVyLCBzaXplb2Yoc3gtPmJ1ZmZlciksICcyJywgMSk7CisjaWZu
ZGVmIERJU0FCTEVfVExTCisgIGlmIChzeC0+Y2N0eC50bHNfY3R4KQorICAgIHsKKyAgICBpbnQg
bjsKKworICAgIC8qIFJlYXAgdGhlIFRMUyBDbG9zZSBOb3RpZnkgZnJvbSB0aGUgc2VydmVyLCB0
aW1pbmcgb3V0IGFmdGVyIG9uZSBzZWNvbmQgKi8KKyAgICBzaWdhbHJtX3NlZW4gPSBGQUxTRTsK
KyAgICBBTEFSTSgxKTsKKyAgICBkbworICAgICAgbiA9IHRsc19yZWFkKHN4LT5jY3R4LnRsc19j
dHgsIHN4LT5pbmJ1ZmZlciwgc2l6ZW9mKHN4LT5pbmJ1ZmZlcikpOworICAgIHdoaWxlICghc2ln
YWxybV9zZWVuICYmIG4gPiAwKTsKKyAgICBBTEFSTV9DTFIoMCk7CisKKyAgICBpZiAoc3gtPnNl
bmRfdGxzY2xvc2UpCisgICAgICB7CisjIGlmZGVmIEVYSU1fVENQX0NPUksKKyAgICAgICh2b2lk
KSBzZXRzb2Nrb3B0KHN4LT5jY3R4LnNvY2ssIElQUFJPVE9fVENQLCBFWElNX1RDUF9DT1JLLCBV
UyAmb24sIHNpemVvZihvbikpOworIyBlbmRpZgorICAgICAgdGxzX2Nsb3NlKHN4LT5jY3R4LnRs
c19jdHgsIFRMU19TSFVURE9XTl9XQUlUKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB0bHNf
Y2xvc2Uoc3gtPmNjdHgudGxzX2N0eCwgVExTX1NIVVRET1dOX1dPTkxZKTsKKyAgICBzeC0+Y2N0
eC50bHNfY3R4ID0gTlVMTDsKKyAgICB9CisjZW5kaWYKKworICAvKiBEcmFpbiBhbnkgdHJhaWxp
bmcgZGF0YSBmcm9tIHRoZSBzb2NrZXQgYmVmb3JlIGNsb3NlLCB0byBhdm9pZCBzZW5kaW5nIGEg
UlNUICovCisKKyAgaWYgKCAgcG9sbF9vbmVfZmQoc3gtPmNjdHguc29jaywgUE9MTElOLCAyMCkg
IT0gMAkJLyogMjBtcyAqLworICAgICAmJiBmY250bChzeC0+Y2N0eC5zb2NrLCBGX1NFVEZMLCBP
X05PTkJMT0NLKSA9PSAwKQorICAgIGZvciAoaW50IGkgPSAxNiwgbjsJCQkJCQkvKiBkcmFpbiBz
b2NrZXQgKi8KKwkgKG4gPSByZWFkKHN4LT5jY3R4LnNvY2ssIHN4LT5pbmJ1ZmZlciwgc2l6ZW9m
KHN4LT5pbmJ1ZmZlcikpKSA+IDAgJiYgaSA+IDA7CisJIGktLSkgSERFQlVHKERfdHJhbnNwb3J0
fERfYWNsfERfdikKKyAgICAgIHsKKyAgICAgIGludCBtID0gTUlOKG4sIDY0KTsKKyAgICAgIGRl
YnVnX3ByaW50Zl9pbmRlbnQoIiAgU01UUChkcmFpbiAlZCBieXRlcyk8PCAlLipzXG4iLCBuLCBt
LCBzeC0+aW5idWZmZXIpOworICAgICAgZm9yIChtID0gMDsgbSA8IG47IG0rKykKKwlkZWJ1Z19w
cmludGYoIjB4JTAyeFxuIiwgc3gtPmluYnVmZmVyW21dKTsKKyAgICAgIH0KKyAgfQorSERFQlVH
KERfdHJhbnNwb3J0fERfYWNsfERfdikgZGVidWdfcHJpbnRmX2luZGVudCgiICBTTVRQKGNsb3Nl
KT4+XG4iKTsKICh2b2lkKWNsb3NlKHN4LT5jY3R4LnNvY2spOworc3gtPmNjdHguc29jayA9IC0x
OworY29udGludWVfdHJhbnNwb3J0ID0gTlVMTDsKK2NvbnRpbnVlX2hvc3RuYW1lID0gTlVMTDsK
K3NtdHBfZGVidWdfY21kX3JlcG9ydCgpOwogCiAjaWZuZGVmIERJU0FCTEVfRVZFTlQKLSh2b2lk
KSBldmVudF9yYWlzZSh0YmxvY2stPmV2ZW50X2FjdGlvbiwgVVMidGNwOmNsb3NlIiwgTlVMTCk7
Cisodm9pZCkgZXZlbnRfcmFpc2UodGJsb2NrLT5ldmVudF9hY3Rpb24sIFVTInRjcDpjbG9zZSIs
IE5VTEwsIE5VTEwpOwogI2VuZGlmCiAKICNpZmRlZiBTVVBQT1JUX0RBTkUKQEAgLTQ0OTIsMTUg
KzQ4OTIsMzAgQEAKIAl0byBnZXQgdGhlIGRvbWFpbiBzdHJpbmcgZm9yIFNOSSAqLwogCiAJc3gt
PmZpcnN0X2FkZHIgPSBhOworCWNsZWFyZmxhZyhhLCBhZl9jb250X2Nvbm4pOworCXNldGZsYWco
YSwgYWZfbmV3X2Nvbm4pOwkJLyogY2xlYXIgKiBmcm9tIGxvZ2dpbmcgKi8KIAlERUJVRyhEX3Ry
YW5zcG9ydCkgZGVidWdfcHJpbnRmKCJEQU5FOiBnby1hcm91bmQgZm9yICVzXG4iLCBhLT5kb21h
aW4pOwogCX0KICAgICAgIH0KLSAgZ290byBEQU5FX0RPTUFJTlM7CisgIGNvbnRpbnVlX3NlcXVl
bmNlID0gMTsJCQkvKiBmb3IgY29uc2lzdGVuY3kgKi8KKyAgZ290byBSRVBFQVRfQ09OTjsKKyAg
fQorI2VuZGlmCisKKyNpZmRlZiBFWFBFUklNRU5UQUxfRVNNVFBfTElNSVRTCitpZiAobWFpbF9s
aW1pdCAmJiBzeC0+Zmlyc3RfYWRkcikKKyAgeworICAvKiBSZXNldCB0aGUgc2VxdWVuY2UgY291
bnQgc2luY2Ugd2UgY2xvc2VkIHRoZSBjb25uZWN0aW9uLiAgVGhpcyBpcyBmbGFnZ2VkCisgIG9u
IHRoZSBwaXBlIGJhY2sgdG8gdGhlIGRlbGl2ZXJ5IHByb2Nlc3Mgc28gdGhhdCBhIG5vbi1jb250
aW51ZWQtY29ubiBkZWxpdmVyeQorICBpcyBsb2dnZWQuICovCisKKyAgY29udGludWVfc2VxdWVu
Y2UgPSAxOwkJCS8qIGZvciBjb25zaXN0ZW5jeSAqLworICBjbGVhcmZsYWcoc3gtPmZpcnN0X2Fk
ZHIsIGFmX2NvbnRfY29ubik7CisgIHNldGZsYWcoc3gtPmZpcnN0X2FkZHIsIGFmX25ld19jb25u
KTsJCS8qIGNsZWFyICAqIGZyb20gbG9nZ2luZyAqLworICBnb3RvIFJFUEVBVF9DT05OOwogICB9
CiAjZW5kaWYKIAotY29udGludWVfdHJhbnNwb3J0ID0gTlVMTDsKLWNvbnRpbnVlX2hvc3RuYW1l
ID0gTlVMTDsKIHJldHVybiB5aWVsZDsKIAogVElEWVVQOgpAQCAtNDY2Miw2ICs1MDc3LDIyIEBA
CiAgICAgICBjdXR0aHJvdWdoLmNjdHguc29jayA+PSAwID8gY3V0dGhyb3VnaC5jY3R4LnNvY2sg
OiAwKTsKICAgfQogCisvKiBDaGVjayB0aGUgcmVzdHJpY3Rpb25zIG9uIGxpbmUgbGVuZ3RoICov
CisKK2lmIChtYXhfcmVjZWl2ZWRfbGluZWxlbmd0aCA+IG9iLT5tZXNzYWdlX2xpbmVsZW5ndGhf
bGltaXQpCisgIHsKKyAgc3RydWN0IHRpbWV2YWwgbm93OworICBnZXR0aW1lb2ZkYXkoJm5vdywg
TlVMTCk7CisKKyAgZm9yIChhZGRyZXNzX2l0ZW0gKiBhZGRyID0gYWRkcmxpc3Q7IGFkZHI7IGFk
ZHIgPSBhZGRyLT5uZXh0KQorICAgIGlmIChhZGRyLT50cmFuc3BvcnRfcmV0dXJuID09IERFRkVS
KQorICAgICAgYWRkci0+dHJhbnNwb3J0X3JldHVybiA9IFBFTkRJTkdfREVGRVI7CisKKyAgc2V0
X2Vycm5vX25vaG9zdChhZGRybGlzdCwgRVJSTk9fU01UUEZPUk1BVCwKKyAgICBVUyJtZXNzYWdl
IGhhcyBsaW5lcyB0b28gbG9uZyBmb3IgdHJhbnNwb3J0IiwgRkFJTCwgVFJVRSwgJm5vdyk7Cisg
IGdvdG8gRU5EX1RSQU5TUE9SVDsKKyAgfQorCiAvKiBTZXQgdGhlIGZsYWcgcmVxdWVzdGluZyB0
aGF0IHRoZXNlIGhvc3RzIGJlIGFkZGVkIHRvIHRoZSB3YWl0aW5nCiBkYXRhYmFzZSBpZiB0aGUg
ZGVsaXZlcnkgZmFpbHMgdGVtcG9yYXJpbHkgb3IgaWYgd2UgYXJlIHJ1bm5pbmcgd2l0aAogcXVl
dWVfc210cCBvciBhIDItc3RhZ2UgcXVldWUgcnVuLiBUaGlzIGdldHMgdW5zZXQgZm9yIGNlcnRh
aW4KQEAgLTQ2OTksNyArNTEzMCw3IEBACiAgICAgewogICAgIHVzY2hhciAqcyA9IG9iLT5ob3N0
czsKIAotICAgIGlmIChVc3RyY2hyKHMsICckJykgIT0gTlVMTCkKKyAgICBpZiAoVXN0cmNocihz
LCAnJCcpKQogICAgICAgewogICAgICAgaWYgKCEoZXhwYW5kZWRfaG9zdHMgPSBleHBhbmRfc3Ry
aW5nKHMpKSkKICAgICAgICAgewpAQCAtNTA0Nyw3ICs1NDc4LDcgQEAKICAgICBiZWNhdXNlIGNv
bm5lY3Rpb25zIHRvIHRoZSBzYW1lIGhvc3QgZnJvbSBhIGRpZmZlcmVudCBpbnRlcmZhY2Ugc2hv
dWxkIGJlCiAgICAgdHJlYXRlZCBzZXBhcmF0ZWx5LiAqLwogCi0gICAgaG9zdF9hZiA9IFVzdHJj
aHIoaG9zdC0+YWRkcmVzcywgJzonKSA9PSBOVUxMID8gQUZfSU5FVCA6IEFGX0lORVQ2OworICAg
IGhvc3RfYWYgPSBVc3RyY2hyKGhvc3QtPmFkZHJlc3MsICc6JykgPyBBRl9JTkVUNiA6IEFGX0lO
RVQ7CiAgICAgICB7CiAgICAgICB1c2NoYXIgKiBzID0gb2ItPmludGVyZmFjZTsKICAgICAgIGlm
IChzICYmICpzKQpAQCAtNTIxNiw3ICs1NjQ3LDcgQEAKIAogICAgICAgaWYgKGV4cGFuZGVkX2hv
c3RzKQogCXsKLQl0aG9zdCA9IHN0b3JlX2dldChzaXplb2YoaG9zdF9pdGVtKSwgRkFMU0UpOwor
CXRob3N0ID0gc3RvcmVfZ2V0KHNpemVvZihob3N0X2l0ZW0pLCBHRVRfVU5UQUlOVEVEKTsKIAkq
dGhvc3QgPSAqaG9zdDsKIAl0aG9zdC0+bmFtZSA9IHN0cmluZ19jb3B5KGhvc3QtPm5hbWUpOwog
CXRob3N0LT5hZGRyZXNzID0gc3RyaW5nX2NvcHkoaG9zdC0+YWRkcmVzcyk7CmRpZmYgLXVyIGV4
aW0ub3JpZy9zcmMvdHJhbnNwb3J0cy9zbXRwLmggZXhpbS9zcmMvdHJhbnNwb3J0cy9zbXRwLmgK
LS0tIGV4aW0ub3JpZy9zcmMvdHJhbnNwb3J0cy9zbXRwLmgJMjAyMy0wNi0wNCAxNjoyMjowNS4w
MDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL3RyYW5zcG9ydHMvc210cC5oCTIwMjItMDYtMjMg
MTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0yLDggKzIsOCBAQAogKiAgICAgRXhpbSAtIGFu
IEludGVybmV0IG1haWwgdHJhbnNwb3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4
aW0gTWFpbnRhaW5lcnMgMjAyMCAtIDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0
eSBvZiBDYW1icmlkZ2UgMTk5NSAtIDIwMTggKi8KLS8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0g
TWFpbnRhaW5lcnMgMjAyMCAqLwogLyogU2VlIHRoZSBmaWxlIE5PVElDRSBmb3IgY29uZGl0aW9u
cyBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4gKi8KIAogI2RlZmluZSBERUxJVkVSX0JVRkZFUl9T
SVpFIDQwOTYKQEAgLTEzLDk2ICsxMywxMjMgQEAKICNkZWZpbmUgUEVORElOR19PSyAgICAgIChQ
RU5ESU5HICsgT0spCiAKIAorI2lmbmRlZiBESVNBQkxFX1RMUworLyogRmxhZ3Mgc3RydWN0dXJl
IGZvciB2YWxpZGl0eSBvZiBUTFMgY29uZmlndXJhdGlvbiAqLworCit0eXBlZGVmIHN0cnVjdCB7
CisgIEJPT0wgY29ubl9jZXJ0czoxOwkJLyogY2VydGlmaWNhdGVzIGV0Yy4gbG9hZGVkICovCisg
IEJPT0wgY2FidW5kbGU6MTsJCS8qIENBIGNlcnRpZmljYXRlcyBsb2FkZWQgKi8KKyAgQk9PTCBj
cmw6MTsJCQkvKiBDUkwgbG9hZGVkICovCisgIEJPT0wgcHJpX3N0cmluZzoxOwkJLyogY2lwaGVy
IHByaW9yaXR5LXN0cmluZyBjYWNoZSBsb2FkZWQgKi8KKyAgQk9PTCBkaDoxOwkJCS8qIERpZmZp
ZS1IZWxtYW4gcGFyYW1zIGxvYWRlZCAqLworICBCT09MIGVjZGg6MTsJCQkvKiBFQyBEaWZmaWUt
SGVsbWFuIHBhcmFtcyBsb2FkZWQgKi8KKworICBCT09MIGNhX3Jkbl9lbXVsYXRlOjE7CS8qIGRv
IG5vdCBhZHZlcnRpc2UgdXNhYmxlLWNlcnQgbGlzdCAqLworICBCT09MIG9jc3BfaG9vazoxOwkJ
LyogbmVlZCBoc2hha2UgY2FsbGJhY2sgb24gc2Vzc2lvbiAqLworCisgIHZvaWQgKiBsaWJkYXRh
MDsJCS8qIGxpYnJhcnktZGVwZW5kZW50IHByZWxvYWRlZCBkYXRhICovCisgIHZvaWQgKiBsaWJk
YXRhMTsJCS8qIGxpYnJhcnktZGVwZW5kZW50IHByZWxvYWRlZCBkYXRhICovCit9IGV4aW1fdGxz
bGliX3N0YXRlOworI2VuZGlmCisKKwogLyogUHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yIHRoZSBwcml2
YXRlIG9wdGlvbnMgYW5kIG90aGVyIHByaXZhdGUgZGF0YS4gKi8KIAogdHlwZWRlZiBzdHJ1Y3Qg
ewotICB1c2NoYXIgKmhvc3RzOwotICB1c2NoYXIgKmZhbGxiYWNrX2hvc3RzOwotICBob3N0X2l0
ZW0gKmhvc3RsaXN0OwotICBob3N0X2l0ZW0gKmZhbGxiYWNrX2hvc3RsaXN0OwotICB1c2NoYXIg
KmF1dGhlbnRpY2F0ZWRfc2VuZGVyOwotICB1c2NoYXIgKmhlbG9fZGF0YTsKLSAgdXNjaGFyICpp
bnRlcmZhY2U7Ci0gIHVzY2hhciAqcG9ydDsKLSAgdXNjaGFyICpwcm90b2NvbDsKLSAgdXNjaGFy
ICpkc2NwOwotICB1c2NoYXIgKnNlcmlhbGl6ZV9ob3N0czsKLSAgdXNjaGFyICpob3N0c190cnlf
YXV0aDsKLSAgdXNjaGFyICpob3N0c19yZXF1aXJlX2F1dGg7Ci0gIHVzY2hhciAqaG9zdHNfdHJ5
X2NodW5raW5nOworICB1c2NoYXIJKmhvc3RzOworICB1c2NoYXIJKmZhbGxiYWNrX2hvc3RzOwor
ICBob3N0X2l0ZW0JKmhvc3RsaXN0OworICBob3N0X2l0ZW0JKmZhbGxiYWNrX2hvc3RsaXN0Owor
ICB1c2NoYXIJKmF1dGhlbnRpY2F0ZWRfc2VuZGVyOworICB1c2NoYXIJKmhlbG9fZGF0YTsKKyAg
dXNjaGFyCSppbnRlcmZhY2U7CisgIHVzY2hhcgkqcG9ydDsKKyAgdXNjaGFyCSpwcm90b2NvbDsK
KyAgdXNjaGFyCSpkc2NwOworICB1c2NoYXIJKnNlcmlhbGl6ZV9ob3N0czsKKyAgdXNjaGFyCSpo
b3N0c190cnlfYXV0aDsKKyAgdXNjaGFyCSpob3N0c19yZXF1aXJlX2FscG47CisgIHVzY2hhcgkq
aG9zdHNfcmVxdWlyZV9hdXRoOworICB1c2NoYXIJKmhvc3RzX3RyeV9jaHVua2luZzsKICNpZmRl
ZiBTVVBQT1JUX0RBTkUKLSAgdXNjaGFyICpob3N0c190cnlfZGFuZTsKLSAgdXNjaGFyICpob3N0
c19yZXF1aXJlX2RhbmU7Ci0gIHVzY2hhciAqZGFuZV9yZXF1aXJlX3Rsc19jaXBoZXJzOworICB1
c2NoYXIJKmhvc3RzX3RyeV9kYW5lOworICB1c2NoYXIJKmhvc3RzX3JlcXVpcmVfZGFuZTsKKyAg
dXNjaGFyCSpkYW5lX3JlcXVpcmVfdGxzX2NpcGhlcnM7CiAjZW5kaWYKLSAgdXNjaGFyICpob3N0
c190cnlfZmFzdG9wZW47CisgIHVzY2hhcgkqaG9zdHNfdHJ5X2Zhc3RvcGVuOwogI2lmbmRlZiBE
SVNBQkxFX1BSRFIKLSAgdXNjaGFyICpob3N0c190cnlfcHJkcjsKKyAgdXNjaGFyCSpob3N0c190
cnlfcHJkcjsKICNlbmRpZgogI2lmbmRlZiBESVNBQkxFX09DU1AKLSAgdXNjaGFyICpob3N0c19y
ZXF1ZXN0X29jc3A7Ci0gIHVzY2hhciAqaG9zdHNfcmVxdWlyZV9vY3NwOworICB1c2NoYXIJKmhv
c3RzX3JlcXVlc3Rfb2NzcDsKKyAgdXNjaGFyCSpob3N0c19yZXF1aXJlX29jc3A7CiAjZW5kaWYK
LSAgdXNjaGFyICpob3N0c19yZXF1aXJlX3RsczsKLSAgdXNjaGFyICpob3N0c19hdm9pZF90bHM7
Ci0gIHVzY2hhciAqaG9zdHNfdmVyaWZ5X2F2b2lkX3RsczsKLSAgdXNjaGFyICpob3N0c19hdm9p
ZF9waXBlbGluaW5nOworICB1c2NoYXIJKmhvc3RzX3JlcXVpcmVfdGxzOworICB1c2NoYXIJKmhv
c3RzX2F2b2lkX3RsczsKKyAgdXNjaGFyCSpob3N0c192ZXJpZnlfYXZvaWRfdGxzOworICB1c2No
YXIJKmhvc3RzX2F2b2lkX3BpcGVsaW5pbmc7CiAjaWZuZGVmIERJU0FCTEVfUElQRV9DT05ORUNU
Ci0gIHVzY2hhciAqaG9zdHNfcGlwZV9jb25uZWN0OworICB1c2NoYXIJKmhvc3RzX3BpcGVfY29u
bmVjdDsKICNlbmRpZgotICB1c2NoYXIgKmhvc3RzX2F2b2lkX2VzbXRwOworICB1c2NoYXIJKmhv
c3RzX2F2b2lkX2VzbXRwOwogI2lmbmRlZiBESVNBQkxFX1RMUwotICB1c2NoYXIgKmhvc3RzX25v
cGFzc190bHM7Ci0gIHVzY2hhciAqaG9zdHNfbm9wcm94eV90bHM7CisgIHVzY2hhcgkqaG9zdHNf
bm9wYXNzX3RsczsKKyAgdXNjaGFyCSpob3N0c19ub3Byb3h5X3RsczsKICNlbmRpZgotICBpbnQg
ICAgIGNvbW1hbmRfdGltZW91dDsKLSAgaW50ICAgICBjb25uZWN0X3RpbWVvdXQ7Ci0gIGludCAg
ICAgZGF0YV90aW1lb3V0OwotICBpbnQgICAgIGZpbmFsX3RpbWVvdXQ7Ci0gIGludCAgICAgc2l6
ZV9hZGRpdGlvbjsKLSAgaW50ICAgICBob3N0c19tYXhfdHJ5OwotICBpbnQgICAgIGhvc3RzX21h
eF90cnlfaGFyZGxpbWl0OwotICBCT09MICAgIGFkZHJlc3NfcmV0cnlfaW5jbHVkZV9zZW5kZXI7
Ci0gIEJPT0wgICAgYWxsb3dfbG9jYWxob3N0OwotICBCT09MICAgIGF1dGhlbnRpY2F0ZWRfc2Vu
ZGVyX2ZvcmNlOwotICBCT09MICAgIGdldGhvc3RieW5hbWU7Ci0gIEJPT0wgICAgZG5zX3F1YWxp
Znlfc2luZ2xlOwotICBCT09MICAgIGRuc19zZWFyY2hfcGFyZW50czsKKyAgaW50CQljb21tYW5k
X3RpbWVvdXQ7CisgIGludAkJY29ubmVjdF90aW1lb3V0OworICBpbnQJCWRhdGFfdGltZW91dDsK
KyAgaW50CQlmaW5hbF90aW1lb3V0OworICBpbnQJCXNpemVfYWRkaXRpb247CisgIGludAkJaG9z
dHNfbWF4X3RyeTsKKyAgaW50CQlob3N0c19tYXhfdHJ5X2hhcmRsaW1pdDsKKyAgaW50CQltZXNz
YWdlX2xpbmVsZW5ndGhfbGltaXQ7CisgIEJPT0wJCWFkZHJlc3NfcmV0cnlfaW5jbHVkZV9zZW5k
ZXI7CisgIEJPT0wJCWFsbG93X2xvY2FsaG9zdDsKKyAgQk9PTAkJYXV0aGVudGljYXRlZF9zZW5k
ZXJfZm9yY2U7CisgIEJPT0wJCWdldGhvc3RieW5hbWU7CisgIEJPT0wJCWRuc19xdWFsaWZ5X3Np
bmdsZTsKKyAgQk9PTAkJZG5zX3NlYXJjaF9wYXJlbnRzOwogICBkbnNzZWNfZG9tYWlucyBkbnNz
ZWM7Ci0gIEJPT0wgICAgZGVsYXlfYWZ0ZXJfY3V0b2ZmOwotICBCT09MICAgIGhvc3RzX292ZXJy
aWRlOwotICBCT09MICAgIGhvc3RzX3JhbmRvbWl6ZTsKLSAgQk9PTCAgICBrZWVwYWxpdmU7Ci0g
IEJPT0wgICAgbG10cF9pZ25vcmVfcXVvdGE7Ci0gIHVzY2hhciAqZXhwYW5kX3JldHJ5X2luY2x1
ZGVfaXBfYWRkcmVzczsKLSAgQk9PTCAgICByZXRyeV9pbmNsdWRlX2lwX2FkZHJlc3M7CisgIEJP
T0wJCWRlbGF5X2FmdGVyX2N1dG9mZjsKKyAgQk9PTAkJaG9zdHNfb3ZlcnJpZGU7CisgIEJPT0wJ
CWhvc3RzX3JhbmRvbWl6ZTsKKyAgQk9PTAkJa2VlcGFsaXZlOworICBCT09MCQlsbXRwX2lnbm9y
ZV9xdW90YTsKKyAgdXNjaGFyCSpleHBhbmRfcmV0cnlfaW5jbHVkZV9pcF9hZGRyZXNzOworICBC
T09MCQlyZXRyeV9pbmNsdWRlX2lwX2FkZHJlc3M7CiAjaWZkZWYgU1VQUE9SVF9TT0NLUwotICB1
c2NoYXIgKnNvY2tzX3Byb3h5OworICB1c2NoYXIJKnNvY2tzX3Byb3h5OwogI2VuZGlmCiAjaWZu
ZGVmIERJU0FCTEVfVExTCi0gIHVzY2hhciAqdGxzX2NlcnRpZmljYXRlOwotICB1c2NoYXIgKnRs
c19jcmw7Ci0gIHVzY2hhciAqdGxzX3ByaXZhdGVrZXk7Ci0gIHVzY2hhciAqdGxzX3JlcXVpcmVf
Y2lwaGVyczsKLSMgaWZkZWYgRVhQRVJJTUVOVEFMX1RMU19SRVNVTUUKLSAgdXNjaGFyICp0bHNf
cmVzdW1wdGlvbl9ob3N0czsKKyAgdXNjaGFyCSp0bHNfYWxwbjsKKyAgdXNjaGFyCSp0bHNfY2Vy
dGlmaWNhdGU7CisgIHVzY2hhcgkqdGxzX2NybDsKKyAgdXNjaGFyCSp0bHNfcHJpdmF0ZWtleTsK
KyAgdXNjaGFyCSp0bHNfcmVxdWlyZV9jaXBoZXJzOworIyBpZm5kZWYgRElTQUJMRV9UTFNfUkVT
VU1FCisgIHVzY2hhcgkqaG9zdF9uYW1lX2V4dHJhY3Q7CisgIHVzY2hhcgkqdGxzX3Jlc3VtcHRp
b25faG9zdHM7CiAjIGVuZGlmCi0gIGNvbnN0IHVzY2hhciAqdGxzX3NuaTsKLSAgdXNjaGFyICp0
bHNfdmVyaWZ5X2NlcnRpZmljYXRlczsKLSAgaW50ICAgICB0bHNfZGhfbWluX2JpdHM7Ci0gIEJP
T0wgICAgdGxzX3RlbXBmYWlsX3RyeWNsZWFyOwotICB1c2NoYXIgKnRsc192ZXJpZnlfaG9zdHM7
Ci0gIHVzY2hhciAqdGxzX3RyeV92ZXJpZnlfaG9zdHM7Ci0gIHVzY2hhciAqdGxzX3ZlcmlmeV9j
ZXJ0X2hvc3RuYW1lczsKKyAgY29uc3QgdXNjaGFyCSp0bHNfc25pOworICB1c2NoYXIJKnRsc192
ZXJpZnlfY2VydGlmaWNhdGVzOworICBpbnQJCXRsc19kaF9taW5fYml0czsKKyAgQk9PTAkJdGxz
X3RlbXBmYWlsX3RyeWNsZWFyOworICB1c2NoYXIJKnRsc192ZXJpZnlfaG9zdHM7CisgIHVzY2hh
cgkqdGxzX3RyeV92ZXJpZnlfaG9zdHM7CisgIHVzY2hhcgkqdGxzX3ZlcmlmeV9jZXJ0X2hvc3Ru
YW1lczsKICNlbmRpZgogI2lmZGVmIFNVUFBPUlRfSTE4TgotICB1c2NoYXIgKnV0ZjhfZG93bmNv
bnZlcnQ7CisgIHVzY2hhcgkqdXRmOF9kb3duY29udmVydDsKICNlbmRpZgogI2lmbmRlZiBESVNB
QkxFX0RLSU0KICAgc3RydWN0IG9iX2RraW0gZGtpbTsKICNlbmRpZgogI2lmZGVmIEVYUEVSSU1F
TlRBTF9BUkMKLSAgdXNjaGFyICphcmNfc2lnbjsKKyAgdXNjaGFyCSphcmNfc2lnbjsKKyNlbmRp
ZgorI2lmbmRlZiBESVNBQkxFX1RMUworICBleGltX3Rsc2xpYl9zdGF0ZSB0bHNfcHJlbG9hZDsK
ICNlbmRpZgogfSBzbXRwX3RyYW5zcG9ydF9vcHRpb25zX2Jsb2NrOwogCkBAIC0xNDcsMTQgKzE3
NCwyNSBAQAogICBCT09MIHBlbmRpbmdfQkRBVDoxOwogICBCT09MIFJDUFRfNDUyOjE7CiAgIEJP
T0wgZ29vZF9SQ1BUOjE7CisjaWZkZWYgRVhQRVJJTUVOVEFMX0VTTVRQX0xJTUlUUworICBCT09M
IHNpbmdsZV9yY3B0X2RvbWFpbjoxOworI2VuZGlmCiAgIEJPT0wgY29tcGxldGVkX2FkZHI6MTsK
ICAgQk9PTCBzZW5kX3JzZXQ6MTsKICAgQk9PTCBzZW5kX3F1aXQ6MTsKKyAgQk9PTCBzZW5kX3Rs
c2Nsb3NlOjE7CisKKyAgdW5zaWduZWQJcGVlcl9vZmZlcmVkOworI2lmZGVmIEVYUEVSSU1FTlRB
TF9FU01UUF9MSU1JVFMKKyAgdW5zaWduZWQJcGVlcl9saW1pdF9tYWlsOworICB1bnNpZ25lZAlw
ZWVyX2xpbWl0X3JjcHQ7CisgIHVuc2lnbmVkCXBlZXJfbGltaXRfcmNwdGRvbTsKKyNlbmRpZgog
CisgIHVuc2lnbmVkCW1heF9tYWlsOwogICBpbnQJCW1heF9yY3B0OwogICBpbnQJCWNtZF9jb3Vu
dDsKIAotICB1bnNpZ25lZAlwZWVyX29mZmVyZWQ7CiAgIHVuc2lnbmVkCWF2b2lkX29wdGlvbjsK
ICAgdXNjaGFyICoJaWdxdW90c3RyOwogICB1c2NoYXIgKgloZWxvX2RhdGE7CkBAIC0xNjMsNiAr
MjAxLDExIEBACiAgIHVzY2hhciAqCWhlbG9fcmVzcG9uc2U7CiAjZW5kaWYKICNpZm5kZWYgRElT
QUJMRV9QSVBFX0NPTk5FQ1QKKyAgLyogSW5mbyBhYm91dCB0aGUgRUhMTyByZXNwb25zZSBzdG9y
ZWQgdG8gLyByZXRyaWV2ZWQgZnJvbSBjYWNoZS4gIFdoZW4KKyAgb3BlcmF0aW5nIGVhcmx5LXBp
cGUsIHdlIHVzZSB0aGUgY2FjaGVkIHZhbHVlcy4gIEZvciBlYWNoIG9mIHBsYWludGV4dCBhbmQK
KyAgY3J5cHRlZCB3ZSBzdG9yZSBiaXRtYXBzIGZvciBFU01UUCBmZWF0dXJlcyBhbmQgQVVUSCBt
ZXRob2RzLiAgSWYgdGhlIExJTUlUUworICBleHRlbnNpb24gaXMgYnVpbHQgYW5kIHVzYWJsZSB0
aGVtIGF0IGxlYXN0IG9uZSBvZiB0aGUgbGltaXRzIHZhbHVlcyBjYWNoZWQKKyAgaXMgbm9uemVy
bywgYW5kIHdlIHVzZSB0aGUgdmFsdWVzIHRvIGNvbnN0cmFpbiB0aGUgY29ubmVjdGlvbi4gKi8K
ICAgZWhsb19yZXNwX3ByZWNpcwllaGxvX3Jlc3A7CiAjZW5kaWYKIApkaWZmIC11ciBleGltLm9y
aWcvc3JjL3RyYW5zcG9ydHMvc210cF9zb2Nrcy5jIGV4aW0vc3JjL3RyYW5zcG9ydHMvc210cF9z
b2Nrcy5jCi0tLSBleGltLm9yaWcvc3JjL3RyYW5zcG9ydHMvc210cF9zb2Nrcy5jCTIwMjMtMDYt
MDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGltL3NyYy90cmFuc3BvcnRzL3NtdHBf
c29ja3MuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMiw2ICsyLDcg
QEAKICogICAgIEV4aW0gLSBhbiBJbnRlcm5ldCBtYWlsIHRyYW5zcG9ydCBhZ2VudCAgICAqCiAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBD
b3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjEgLSAyMDIyICovCiAvKiBDb3B5
cmlnaHQgKGMpIEplcmVteSBIYXJyaXMgMjAxNSAtIDIwMTggKi8KIC8qIFNlZSB0aGUgZmlsZSBO
T1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKQEAgLTE2
MCwyMCArMTYxLDEwIEBACiBzb2Nrc19vcHRzICogbGltID0gJnByb3hpZXNbbnByb3hpZXNdOwog
bG9uZyBybmQsIHdlaWdodHM7CiB1bnNpZ25lZCBwcmk7Ci1zdGF0aWMgQk9PTCBzcmFuZG9tZWQg
PSBGQUxTRTsKIAogaWYgKG5wcm94aWVzID09IDEpCQkvKiBzaG9ydGN1dCwgaWYgd2UgaGF2ZSBv
bmx5IDEgc2VydmVyICovCiAgIHJldHVybiAocHJveGllc1swXS5pc19mYWlsZWQgPyAtMSA6IDAp
OwogCi0vKiBpbml0IHJhbmRvbSAqLwotaWYgKCFzcmFuZG9tZWQpCi0gIHsKLSAgc3RydWN0IHRp
bWV2YWwgdHY7Ci0gIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwotICBzcmFuZG9tKCh1bnNpZ25l
ZCBpbnQpKHR2LnR2X3VzZWMvMTAwMCkpOwotICBzcmFuZG9tZWQgPSBUUlVFOwotICB9Ci0KIC8q
IHNjYW4gZm9yIGhpZ2hlc3QgcHJpICovCiBmb3IgKHByaSA9IDAsIHNkID0gcHJveGllczsgc2Qg
PCBsaW07IHNkKyspCiAgIGlmICghc2QtPmlzX2ZhaWxlZCAmJiBzZC0+cHJpb3JpdHkgPiBwcmkp
CkBAIC0xODYsNyArMTc3LDcgQEAKIGlmICh3ZWlnaHRzID09IDApICAgICAgIC8qIGFsbCBzZXJ2
ZXJzIGZhaWxlZCAqLwogICByZXR1cm4gLTE7CiAKLWZvciAocm5kID0gcmFuZG9tKCkgJSB3ZWln
aHRzLCBpID0gMDsgaSA8IG5wcm94aWVzOyBpKyspCitmb3IgKHJuZCA9IHJhbmRvbV9udW1iZXIo
d2VpZ2h0cyksIGkgPSAwOyBpIDwgbnByb3hpZXM7IGkrKykKICAgewogICBzZCA9ICZwcm94aWVz
W2ldOwogICBpZiAoIXNkLT5pc19mYWlsZWQgJiYgc2QtPnByaW9yaXR5ID09IHByaSkKQEAgLTIz
MCw3ICsyMjEsNyBAQAogdXNjaGFyIGJ1ZlsyNF07CiBzb2Nrc19vcHRzIHByb3hpZXNbMzJdOwkJ
CS8qIG1heCAjcHJveGllcyBoYW5kbGVkICovCiB1bnNpZ25lZCBucHJveGllczsKLXNvY2tzX29w
dHMgKiBzb2I7Citzb2Nrc19vcHRzICogc29iID0gTlVMTDsKIHVuc2lnbmVkIHNpemU7CiBibG9i
IGVhcmx5X2RhdGE7CiAKQEAgLTI2Nyw2ICsyNTgsNyBAQAogICB3aGlsZSAoKG9wdGlvbiA9IHN0
cmluZ19uZXh0aW5saXN0KCZwcm94eV9zcGVjLCAmc3Vic2VwLCBOVUxMLCAwKSkpCiAgICAgc29j
a3Nfb3B0aW9uKHNvYiwgb3B0aW9uKTsKICAgfQoraWYgKCFzb2IpIHJldHVybiAtMTsKIAogLyog
U2V0IHVwIHRoZSBzb2NrcyBwcm90b2NvbCBtZXRob2Qtc2VsZWN0aW9uIG1lc3NhZ2UsCiBmb3Ig
c2VuZGluZyBvbiBjb25uZWN0aW9uICovCkBAIC0yODIsNyArMjc0LDcgQEAKICAgewogICBpbnQg
aWR4OwogICBob3N0X2l0ZW0gcHJveHk7Ci0gIGludCBwcm94eV9hZjsKKyAgc210cF9jb25uZWN0
X2FyZ3Mgc2MgPSB7LnNvY2sgPSAtMX07CiAKICAgaWYgKChpZHggPSBzb2Nrc19nZXRfcHJveHko
cHJveGllcywgbnByb3hpZXMpKSA8IDApCiAgICAgewpAQCAtMjk0LDExICsyODYsMTYgQEAKIAog
ICAvKiBib2RnZSB1cCBhIGhvc3Qgc3RydWN0IGZvciB0aGUgcHJveHkgKi8KICAgcHJveHkuYWRk
cmVzcyA9IHByb3h5Lm5hbWUgPSBzb2ItPnByb3h5X2hvc3Q7Ci0gIHByb3h5X2FmID0gVXN0cmNo
cihzb2ItPnByb3h5X2hvc3QsICc6JykgPyBBRl9JTkVUNiA6IEFGX0lORVQ7CisgIHByb3h5LnBv
cnQgPSBzb2ItPnBvcnQ7CisKKyAgc2MudGJsb2NrID0gdGI7CisgIHNjLm9iID0gb2I7CisgIHNj
Lmhvc3QgPSAmcHJveHk7CisgIHNjLmhvc3RfYWYgPSBVc3RyY2hyKHNvYi0+cHJveHlfaG9zdCwg
JzonKSA/IEFGX0lORVQ2IDogQUZfSU5FVDsKKyAgc2MuaW50ZXJmYWNlID0gaW50ZXJmYWNlOwog
CiAgIC8qWFhYIHdlIHRydXN0IHRoYXQgdGhlIG1ldGhvZC1zZWxlY3QgY29tbWFuZCBpcyBpZGVt
cG90ZW50ICovCi0gIGlmICgoZmQgPSBzbXRwX3NvY2tfY29ubmVjdCgmcHJveHksIHByb3h5X2Fm
LCBzb2ItPnBvcnQsCi0JICAgICAgaW50ZXJmYWNlLCB0Yiwgc29iLT50aW1lb3V0LCAmZWFybHlf
ZGF0YSkpID49IDApCisgIGlmICgoZmQgPSBzbXRwX3NvY2tfY29ubmVjdCgmc2MsIHNvYi0+dGlt
ZW91dCwgJmVhcmx5X2RhdGEpKSA+PSAwKQogICAgIHsKICAgICBwcm94eV9sb2NhbF9hZGRyZXNz
ID0gc3RyaW5nX2NvcHkocHJveHkuYWRkcmVzcyk7CiAgICAgcHJveHlfbG9jYWxfcG9ydCA9IHNv
Yi0+cG9ydDsKQEAgLTMzMCw3ICszMjcsNyBAQAogICAgKQogICBnb3RvIHByb3h5X2VycjsKIAot
ICB7CisgewogICB1bmlvbiBzb2NrYWRkcl80NiBzaW47CiAgICh2b2lkKSBpcF9hZGRyKCZzaW4s
IGhvc3RfYWYsIGhvc3QtPmFkZHJlc3MsIHBvcnQpOwogCkBAIC0zNTMsNyArMzUwLDcgQEAKICAg
ICAgICZzaW4udjQuc2luX3BvcnQsIHNpemVvZihzaW4udjQuc2luX3BvcnQpKTsKICAgICBzaXpl
ID0gNCtzaXplb2Yoc2luLnY0LnNpbl9hZGRyLnNfYWRkcikrc2l6ZW9mKHNpbi52NC5zaW5fcG9y
dCk7CiAgICAgfQotICB9CisgfQogCiBzdGF0ZSA9IFVTImNvbm5lY3QiOwogSERFQlVHKERfdHJh
bnNwb3J0fERfYWNsfERfdikKZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy90cmFuc3BvcnRzL3RmX21h
aWxkaXIuYyBleGltL3NyYy90cmFuc3BvcnRzL3RmX21haWxkaXIuYwotLS0gZXhpbS5vcmlnL3Ny
Yy90cmFuc3BvcnRzL3RmX21haWxkaXIuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCAr
MDMwMAorKysgZXhpbS9zcmMvdHJhbnNwb3J0cy90Zl9tYWlsZGlyLmMJMjAyMi0wNi0yMyAxNjo0
MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTMsNyArMyw3IEBACiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZl
cnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAyMDE4ICovCi0vKiBDb3B5cmlnaHQgKGMpIFRoZSBF
eGltIE1haW50YWluZXJzIDIwMjAgKi8KKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRh
aW5lcnMgMjAyMCAtIDIwMjEgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlv
bnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKIC8qIEZ1bmN0aW9ucyBpbiBzdXBwb3J0
IG9mIHRoZSB1c2Ugb2YgbWFpbGRpcnNpemUgZmlsZXMgZm9yIGhhbmRsaW5nIHF1b3RhcyBpbgpA
QCAtMTQwLDI0ICsxNDAsMjYgQEAKIC8qIElmIHRoZSBiYXNpYyBwYXRoIG1hdGNoZXMgbWFpbGRp
cmZvbGRlcl9jcmVhdGVfcmVnZXgsIHdlIGFyZSBkZWFsaW5nIHdpdGgKIGEgc3ViZm9sZGVyLCBh
bmQgc2hvdWxkIGVuc3VyZSB0aGF0IGEgbWFpbGRpcmZvbGRlciBmaWxlIGV4aXN0cy4gKi8KIAot
aWYgKG1haWxkaXJmb2xkZXJfY3JlYXRlX3JlZ2V4ICE9IE5VTEwpCitpZiAobWFpbGRpcmZvbGRl
cl9jcmVhdGVfcmVnZXgpCiAgIHsKLSAgY29uc3QgdXNjaGFyICplcnJvcjsKLSAgaW50IG9mZnNl
dDsKLSAgY29uc3QgcGNyZSAqcmVnZXg7CisgIGludCBlcnI7CisgIFBDUkUyX1NJWkUgb2Zmc2V0
OworICBjb25zdCBwY3JlMl9jb2RlICogcmU7CiAKICAgREVCVUcoRF90cmFuc3BvcnQpIGRlYnVn
X3ByaW50ZigiY2hlY2tpbmcgZm9yIG1haWxkaXJmb2xkZXIgcmVxdWlyZW1lbnRcbiIpOwogCi0g
IGlmICghKHJlZ2V4ID0gcGNyZV9jb21waWxlKENTIG1haWxkaXJmb2xkZXJfY3JlYXRlX3JlZ2V4
LCBQQ1JFX0NPUFQsCi0gICAgQ0NTUyAmZXJyb3IsICZvZmZzZXQsIE5VTEwpKSkKKyAgaWYgKCEo
cmUgPSBwY3JlMl9jb21waWxlKChQQ1JFMl9TUFRSKW1haWxkaXJmb2xkZXJfY3JlYXRlX3JlZ2V4
LAorCSAgICAgIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCwgUENSRV9DT1BULCAmZXJyLCAmb2Zmc2V0
LCBwY3JlX2NtcF9jdHgpKSkKICAgICB7CisgICAgdXNjaGFyIGVycmJ1ZlsxMjhdOworICAgIHBj
cmUyX2dldF9lcnJvcl9tZXNzYWdlKGVyciwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CiAgICAg
YWRkci0+bWVzc2FnZSA9IHN0cmluZ19zcHJpbnRmKCJhcHBlbmRmaWxlOiByZWd1bGFyIGV4cHJl
c3Npb24gIgotICAgICAgImVycm9yOiAlcyBhdCBvZmZzZXQgJWQgd2hpbGUgY29tcGlsaW5nICVz
IiwgZXJyb3IsIG9mZnNldCwKKyAgICAgICJlcnJvcjogJXMgYXQgb2Zmc2V0ICVsZCB3aGlsZSBj
b21waWxpbmcgJXMiLCBlcnJidWYsIChsb25nKW9mZnNldCwKICAgICAgIG1haWxkaXJmb2xkZXJf
Y3JlYXRlX3JlZ2V4KTsKICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gIGlmIChwY3JlX2V4
ZWMocmVnZXgsIE5VTEwsIENTIHBhdGgsIFVzdHJsZW4ocGF0aCksIDAsIDAsIE5VTEwsIDApID49
IDApCisgIGlmIChyZWdleF9tYXRjaChyZSwgcGF0aCwgLTEsIE5VTEwpKQogICAgIHsKICAgICB1
c2NoYXIgKmZuYW1lID0gc3RyaW5nX3NwcmludGYoIiVzL21haWxkaXJmb2xkZXIiLCBwYXRoKTsK
ICAgICBpZiAoVXN0YXQoZm5hbWUsICZzdGF0YnVmKSA9PSAwKQpAQCAtMjUwLDcgKzI1Miw3IEBA
CiAKIG9mZl90CiBtYWlsZGlyX2NvbXB1dGVfc2l6ZSh1c2NoYXIgKnBhdGgsIGludCAqZmlsZWNv
dW50LCB0aW1lX3QgKmxhdGVzdCwKLSAgY29uc3QgcGNyZSAqcmVnZXgsIGNvbnN0IHBjcmUgKmRp
cl9yZWdleCwgQk9PTCB0aW1lc3RhbXBfb25seSkKKyAgY29uc3QgcGNyZTJfY29kZSAqcmVnZXgs
IGNvbnN0IHBjcmUyX2NvZGUgKmRpcl9yZWdleCwgQk9PTCB0aW1lc3RhbXBfb25seSkKIHsKIERJ
UiAqZGlyOwogb2ZmX3Qgc3VtID0gMDsKQEAgLTI2OSw4ICsyNzEsNyBAQAogICBzY2FuLiBXZSBk
byB0aGUgcmVnZXggbWF0Y2ggZmlyc3QsIGJlY2F1c2UgdGhhdCBhdm9pZHMgYSBzdGF0KCkgZm9y
IG5hbWVzCiAgIHdlIGFyZW4ndCBpbnRlcmVzdGVkIGluLiAqLwogCi0gIGlmIChkaXJfcmVnZXgg
IT0gTlVMTCAmJgotICAgICAgcGNyZV9leGVjKGRpcl9yZWdleCwgTlVMTCwgQ1MgbmFtZSwgVXN0
cmxlbihuYW1lKSwgMCwgMCwgTlVMTCwgMCkgPCAwKQorICBpZiAoZGlyX3JlZ2V4ICYmICFyZWdl
eF9tYXRjaChkaXJfcmVnZXgsIG5hbWUsIC0xLCBOVUxMKSkKICAgICB7CiAgICAgREVCVUcoRF90
cmFuc3BvcnQpCiAgICAgICBkZWJ1Z19wcmludGYoInNraXBwaW5nICVzLyVzOiBkaXJfcmVnZXgg
ZG9lcyBub3QgbWF0Y2hcbiIsIHBhdGgsIG5hbWUpOwpAQCAtMzU4LDcgKzM1OSw3IEBACiAKIGlu
dAogbWFpbGRpcl9lbnN1cmVfc2l6ZWZpbGUodXNjaGFyICpwYXRoLCBhcHBlbmRmaWxlX3RyYW5z
cG9ydF9vcHRpb25zX2Jsb2NrICpvYiwKLSAgY29uc3QgcGNyZSAqcmVnZXgsIGNvbnN0IHBjcmUg
KmRpcl9yZWdleCwgb2ZmX3QgKnJldHVybmVkX3NpemUsCisgIGNvbnN0IHBjcmUyX2NvZGUgKnJl
Z2V4LCBjb25zdCBwY3JlMl9jb2RlICpkaXJfcmVnZXgsIG9mZl90ICpyZXR1cm5lZF9zaXplLAog
ICBpbnQgKnJldHVybmVkX2ZpbGVjb3VudCkKIHsKIGludCBjb3VudCwgZmQ7CmRpZmYgLXVyIGV4
aW0ub3JpZy9zcmMvdHJhbnNwb3J0cy90Zl9tYWlsZGlyLmggZXhpbS9zcmMvdHJhbnNwb3J0cy90
Zl9tYWlsZGlyLmgKLS0tIGV4aW0ub3JpZy9zcmMvdHJhbnNwb3J0cy90Zl9tYWlsZGlyLmgJMjAy
My0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4aW0vc3JjL3RyYW5zcG9ydHMv
dGZfbWFpbGRpci5oCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICswMzAwCkBAIC0zLDE4
ICszLDE5IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwogCiAvKiBDb3B5cmlnaHQgKGMpIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIDE5OTUgLSAy
MDA5ICovCisvKiBDb3B5cmlnaHQgKGMpIFRoZSBFeGltIE1haW50YWluZXJzIDIwMjEgKi8KIC8q
IFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRp
b24uICovCiAKIC8qIEhlYWRlciBmaWxlIGZvciB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQg
dG8gc3VwcG9ydCB0aGUgdXNlIG9mCiBtYWlsZGlyc2l6ZSBmaWxlcyBmb3IgcXVvdGEgaGFuZGxp
bmcgaW4gbWFpbGRpciBkaXJlY3Rvcmllcy4gKi8KIAotZXh0ZXJuIG9mZl90ICBtYWlsZGlyX2Nv
bXB1dGVfc2l6ZSh1c2NoYXIgKiwgaW50ICosIHRpbWVfdCAqLCBjb25zdCBwY3JlICosCi0gICAg
ICAgICAgICAgICAgY29uc3QgcGNyZSAqLCBCT09MKTsKK2V4dGVybiBvZmZfdCAgbWFpbGRpcl9j
b21wdXRlX3NpemUodXNjaGFyICosIGludCAqLCB0aW1lX3QgKiwgY29uc3QgcGNyZTJfY29kZSAq
LAorICAgICAgICAgICAgICAgIGNvbnN0IHBjcmUyX2NvZGUgKiwgQk9PTCk7CiBleHRlcm4gQk9P
TCAgIG1haWxkaXJfZW5zdXJlX2RpcmVjdG9yaWVzKHVzY2hhciAqLCBhZGRyZXNzX2l0ZW0gKiwg
Qk9PTCwgaW50LAogICAgICAgICAgICAgICAgIHVzY2hhciAqKTsKIGV4dGVybiBpbnQgICAgbWFp
bGRpcl9lbnN1cmVfc2l6ZWZpbGUodXNjaGFyICosCi0gICAgICAgICAgICAgICAgYXBwZW5kZmls
ZV90cmFuc3BvcnRfb3B0aW9uc19ibG9jayAqLCBjb25zdCBwY3JlICosCi0gICAgICAgICAgICAg
ICAgY29uc3QgcGNyZSAqLCBvZmZfdCAqLCBpbnQgKik7CisgICAgICAgICAgICAgICAgYXBwZW5k
ZmlsZV90cmFuc3BvcnRfb3B0aW9uc19ibG9jayAqLCBjb25zdCBwY3JlMl9jb2RlICosCisgICAg
ICAgICAgICAgICAgY29uc3QgcGNyZTJfY29kZSAqLCBvZmZfdCAqLCBpbnQgKik7CiBleHRlcm4g
dm9pZCAgIG1haWxkaXJfcmVjb3JkX2xlbmd0aChpbnQsIGludCk7CiAKIC8qIEVuZCBvZiB0Zl9t
YWlsZGlyLmggKi8KZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy90cmVlLmMgZXhpbS9zcmMvdHJlZS5j
Ci0tLSBleGltLm9yaWcvc3JjL3RyZWUuYwkyMDIzLTA2LTA0IDE2OjIyOjA1LjAwMDAwMDAwMCAr
MDMwMAorKysgZXhpbS9zcmMvdHJlZS5jCTIwMjItMDYtMjMgMTY6NDE6MTAuMDAwMDAwMDAwICsw
MzAwCkBAIC0yLDYgKzIsNyBAQAogKiAgICAgRXhpbSAtIGFuIEludGVybmV0IG1haWwgdHJhbnNw
b3J0IGFnZW50ICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCiAKKy8qIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMSAt
IDIwMjIgKi8KIC8qIENvcHlyaWdodCAoYykgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UgMTk5NSAt
IDIwMTUgKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJQ0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFu
ZCBkaXN0cmlidXRpb24uICovCiAKQEAgLTMwLDcgKzMxLDcgQEAKIHRyZWVfYWRkX25vbnJlY2lw
aWVudChjb25zdCB1c2NoYXIgKnMpCiB7CiBybWFyayBycG9pbnQgPSBzdG9yZV9tYXJrKCk7Ci10
cmVlX25vZGUgKm5vZGUgPSBzdG9yZV9nZXQoc2l6ZW9mKHRyZWVfbm9kZSkgKyBVc3RybGVuKHMp
LCBpc190YWludGVkKHMpKTsKK3RyZWVfbm9kZSAqIG5vZGUgPSBzdG9yZV9nZXQoc2l6ZW9mKHRy
ZWVfbm9kZSkgKyBVc3RybGVuKHMpLCBzKTsKIFVzdHJjcHkobm9kZS0+bmFtZSwgcyk7CiBub2Rl
LT5kYXRhLnB0ciA9IE5VTEw7CiBpZiAoIXRyZWVfaW5zZXJ0bm9kZSgmdHJlZV9ub25yZWNpcGll
bnRzLCBub2RlKSkgc3RvcmVfcmVzZXQocnBvaW50KTsKQEAgLTU1LDcgKzU2LDcgQEAKIHRyZWVf
YWRkX2R1cGxpY2F0ZShjb25zdCB1c2NoYXIgKnMsIGFkZHJlc3NfaXRlbSAqYWRkcikKIHsKIHJt
YXJrIHJwb2ludCA9IHN0b3JlX21hcmsoKTsKLXRyZWVfbm9kZSAqbm9kZSA9IHN0b3JlX2dldChz
aXplb2YodHJlZV9ub2RlKSArIFVzdHJsZW4ocyksIGlzX3RhaW50ZWQocykpOwordHJlZV9ub2Rl
ICogbm9kZSA9IHN0b3JlX2dldChzaXplb2YodHJlZV9ub2RlKSArIFVzdHJsZW4ocyksIHMpOwog
VXN0cmNweShub2RlLT5uYW1lLCBzKTsKIG5vZGUtPmRhdGEucHRyID0gYWRkcjsKIGlmICghdHJl
ZV9pbnNlcnRub2RlKCZ0cmVlX2R1cGxpY2F0ZXMsIG5vZGUpKSBzdG9yZV9yZXNldChycG9pbnQp
OwpAQCAtODEsNyArODIsNyBAQAogdXNjaGFyIHNbMjU2XTsKIHNwcmludGYoQ1MgcywgIlQ6JS4y
MDBzOiVzIiwgaC0+bmFtZSwgaC0+YWRkcmVzcyk7CiBub2RlID0gc3RvcmVfZ2V0KHNpemVvZih0
cmVlX25vZGUpICsgVXN0cmxlbihzKSwKLQkJCWlzX3RhaW50ZWQoaC0+bmFtZSkgfHwgaXNfdGFp
bnRlZChoLT5hZGRyZXNzKSk7CisJICAgIGlzX3RhaW50ZWQoaC0+bmFtZSkgfHwgaXNfdGFpbnRl
ZChoLT5hZGRyZXNzKSA/IEdFVF9UQUlOVEVEIDogR0VUX1VOVEFJTlRFRCk7CiBVc3RyY3B5KG5v
ZGUtPm5hbWUsIHMpOwogbm9kZS0+ZGF0YS52YWwgPSBoLT53aHk7CiBpZiAoaC0+c3RhdHVzID09
IGhzdGF0dXNfdW51c2FibGVfZXhwaXJlZCkgbm9kZS0+ZGF0YS52YWwgKz0gMjU2OwpAQCAtMzcz
LDcgKzM3NCw3IEBACiB0cmVlX2FkZF92YXIodXNjaGFyICogbmFtZSwgdXNjaGFyICogdmFsLCB2
b2lkICogY3R4KQogewogdHJlZV9ub2RlICoqIHJvb3QgPSBjdHg7Ci10cmVlX25vZGUgKiBub2Rl
ID0gc3RvcmVfZ2V0KHNpemVvZih0cmVlX25vZGUpICsgVXN0cmxlbihuYW1lKSwgaXNfdGFpbnRl
ZChuYW1lKSk7Cit0cmVlX25vZGUgKiBub2RlID0gc3RvcmVfZ2V0KHNpemVvZih0cmVlX25vZGUp
ICsgVXN0cmxlbihuYW1lKSwgbmFtZSk7CiBVc3RyY3B5KG5vZGUtPm5hbWUsIG5hbWUpOwogbm9k
ZS0+ZGF0YS5wdHIgPSB2YWw7CiAodm9pZCkgdHJlZV9pbnNlcnRub2RlKHJvb3QsIG5vZGUpOwpk
aWZmIC11ciBleGltLm9yaWcvc3JjL3V0ZjguYyBleGltL3NyYy91dGY4LmMKLS0tIGV4aW0ub3Jp
Zy9zcmMvdXRmOC5jCTIwMjMtMDYtMDQgMTY6MjI6MDUuMDAwMDAwMDAwICswMzAwCisrKyBleGlt
L3NyYy91dGY4LmMJMjAyMi0wNi0yMyAxNjo0MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsNiAr
Miw3IEBACiAqICAgICBFeGltIC0gYW4gSW50ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAg
KgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAor
LyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWludGFpbmVycyAyMDIyICovCiAvKiBDb3B5cmln
aHQgKGMpIEplcmVteSBIYXJyaXMgMjAxNSAtIDIwMTggKi8KIC8qIFNlZSB0aGUgZmlsZSBOT1RJ
Q0UgZm9yIGNvbmRpdGlvbnMgb2YgdXNlIGFuZCBkaXN0cmlidXRpb24uICovCiAKQEAgLTEzMyw3
ICsxMzQsNyBAQAogdXNjaGFyICoKIHN0cmluZ19sb2NhbHBhcnRfdXRmOF90b19hbGFiZWwoY29u
c3QgdXNjaGFyICogdXRmOCwgdXNjaGFyICoqIGVycikKIHsKLXNpemVfdCB1Y3M0X2xlbjsKK3Np
emVfdCB1Y3M0X2xlbiA9IDA7CiBwdW55Y29kZV91aW50ICogcDsKIHNpemVfdCBwX2xlbjsKIHVz
Y2hhciAqIHJlczsKQEAgLTE0Miw4ICsxNDMsMTMgQEAKIGlmICghc3RyaW5nX2lzX3V0ZjgodXRm
OCkpIHJldHVybiBzdHJpbmdfY29weSh1dGY4KTsKIAogcCA9IChwdW55Y29kZV91aW50ICopIHN0
cmluZ3ByZXBfdXRmOF90b191Y3M0KENDUyB1dGY4LCAtMSwgJnVjczRfbGVuKTsKK2lmICghcCB8
fCAhdWNzNF9sZW4pCisgIHsKKyAgaWYgKGVycikgKmVyciA9IFVTImxfdTJhOiBiYWQgVVRGLTgg
aW5wdXQiOworICByZXR1cm4gTlVMTDsKKyAgfQogcF9sZW4gPSB1Y3M0X2xlbio0OwkvKiB0aGlz
IG11bHRpcGxpZXIgaXMgcHVyZSBndWVzc3dvcmsgKi8KLXJlcyA9IHN0b3JlX2dldChwX2xlbis1
LCBpc190YWludGVkKHV0ZjgpKTsKK3JlcyA9IHN0b3JlX2dldChwX2xlbis1LCB1dGY4KTsKIAog
cmVzWzBdID0gJ3gnOyByZXNbMV0gPSAnbic7IHJlc1syXSA9IHJlc1szXSA9ICctJzsKIApAQCAt
MTcyLDcgKzE3OCw3IEBACiBERUJVRyhEX2V4cGFuZCkgZGVidWdfcHJpbnRmKCJsX2EydTogJyVz
J1xuIiwgYWxhYmVsKTsKIGFsYWJlbCArPSA0OwogcF9sZW4gPSBVc3RybGVuKGFsYWJlbCk7Ci1w
ID0gc3RvcmVfZ2V0KChwX2xlbisxKSAqIHNpemVvZigqcCksIGlzX3RhaW50ZWQoYWxhYmVsKSk7
CitwID0gc3RvcmVfZ2V0KChwX2xlbisxKSAqIHNpemVvZigqcCksIGFsYWJlbCk7CiAKIGlmICgo
cmMgPSBwdW55Y29kZV9kZWNvZGUocF9sZW4sIENDUyBhbGFiZWwsICZwX2xlbiwgcCwgTlVMTCkp
ICE9IFBVTllDT0RFX1NVQ0NFU1MpCiAgIHsKQEAgLTI0MCwyOCArMjQ2LDI5IEBACiAKIC8qIFNl
ZSBhIGRlc2NyaXB0aW9uIGluIHRscy1vcGVuc3NsLmMgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHdo
eSB0aGlzIGV4aXN0cy4KIAotQXJndW1lbnRzOiAgIGEgRklMRSogdG8gcHJpbnQgdGhlIHJlc3Vs
dHMgdG8KLVJldHVybnM6ICAgICBub3RoaW5nCitBcmd1bWVudHM6ICAgc3RyaW5nIHRvIGFwcGVu
ZCB0bworUmV0dXJuczogICAgIHN0cmluZwogKi8KIAotdm9pZAotdXRmOF92ZXJzaW9uX3JlcG9y
dChGSUxFICpmKQorZ3N0cmluZyAqCit1dGY4X3ZlcnNpb25fcmVwb3J0KGdzdHJpbmcgKiBnKQog
ewogI2lmZGVmIFNVUFBPUlRfSTE4Tl8yMDA4Ci1mcHJpbnRmKGYsICJMaWJyYXJ5IHZlcnNpb246
IElETjI6IENvbXBpbGU6ICVzXG4iCitnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywgIkxpYnJhcnkg
dmVyc2lvbjogSUROMjogQ29tcGlsZTogJXNcbiIKICAgICAgICAgICAgIiAgICAgICAgICAgICAg
ICAgICAgICAgUnVudGltZTogJXNcbiIsCiAJSUROMl9WRVJTSU9OLAogCWlkbjJfY2hlY2tfdmVy
c2lvbihOVUxMKSk7Ci1mcHJpbnRmKGYsICJMaWJyYXJ5IHZlcnNpb246IFN0cmluZ3ByZXA6IENv
bXBpbGU6ICVzXG4iCitnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywgIkxpYnJhcnkgdmVyc2lvbjog
U3RyaW5ncHJlcDogQ29tcGlsZTogJXNcbiIKICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUnVudGltZTogJXNcbiIsCiAJU1RSSU5HUFJFUF9WRVJTSU9OLAogCXN0cmlu
Z3ByZXBfY2hlY2tfdmVyc2lvbihOVUxMKSk7CiAjZWxzZQotZnByaW50ZihmLCAiTGlicmFyeSB2
ZXJzaW9uOiBJRE46IENvbXBpbGU6ICVzXG4iCitnID0gc3RyaW5nX2ZtdF9hcHBlbmQoZywgIkxp
YnJhcnkgdmVyc2lvbjogSUROOiBDb21waWxlOiAlc1xuIgogICAgICAgICAgICAiICAgICAgICAg
ICAgICAgICAgICAgIFJ1bnRpbWU6ICVzXG4iLAogCVNUUklOR1BSRVBfVkVSU0lPTiwKIAlzdHJp
bmdwcmVwX2NoZWNrX3ZlcnNpb24oTlVMTCkpOwogI2VuZGlmCityZXR1cm4gZzsKIH0KIAogI2Vu
ZGlmCS8qIHdob2xlIGZpbGUgKi8KZGlmZiAtdXIgZXhpbS5vcmlnL3NyYy92ZXJpZnkuYyBleGlt
L3NyYy92ZXJpZnkuYwotLS0gZXhpbS5vcmlnL3NyYy92ZXJpZnkuYwkyMDIzLTA2LTA0IDE2OjIy
OjA1LjAwMDAwMDAwMCArMDMwMAorKysgZXhpbS9zcmMvdmVyaWZ5LmMJMjAyMi0wNi0yMyAxNjo0
MToxMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIsOCArMiw4IEBACiAqICAgICBFeGltIC0gYW4gSW50
ZXJuZXQgbWFpbCB0cmFuc3BvcnQgYWdlbnQgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBN
YWludGFpbmVycyAyMDIwIC0gMjAyMiAqLwogLyogQ29weXJpZ2h0IChjKSBVbml2ZXJzaXR5IG9m
IENhbWJyaWRnZSAxOTk1IC0gMjAxOCAqLwotLyogQ29weXJpZ2h0IChjKSBUaGUgRXhpbSBNYWlu
dGFpbmVycyAyMDIwICovCiAvKiBTZWUgdGhlIGZpbGUgTk9USUNFIGZvciBjb25kaXRpb25zIG9m
IHVzZSBhbmQgZGlzdHJpYnV0aW9uLiAqLwogCiAvKiBGdW5jdGlvbnMgY29uY2VybmVkIHdpdGgg
dmVyaWZ5aW5nIHRoaW5ncy4gVGhlIG9yaWdpbmFsIGNvZGUgZm9yIGNhbGxvdXQKQEAgLTE5LDI3
ICsxOSw2IEBACiB1c2NoYXIgY3RidWZmZXJbODE5Ml07CiAKIAotLyogU3RydWN0dXJlIGZvciBj
YWNoaW5nIEROU0JMIGxvb2t1cHMgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgZG5zYmxfY2FjaGVfYmxv
Y2sgewotICB0aW1lX3QgZXhwaXJ5OwotICBkbnNfYWRkcmVzcyAqcmhzOwotICB1c2NoYXIgKnRl
eHQ7Ci0gIGludCByYzsKLSAgQk9PTCB0ZXh0X3NldDsKLX0gZG5zYmxfY2FjaGVfYmxvY2s7Ci0K
LQotLyogQW5jaG9yIGZvciBETlNCTCBjYWNoZSAqLwotCi1zdGF0aWMgdHJlZV9ub2RlICpkbnNi
bF9jYWNoZSA9IE5VTEw7Ci0KLQotLyogQml0cyBmb3IgbWF0Y2hfdHlwZSBpbiBvbmVfY2hlY2tf
ZG5zYmwoKSAqLwotCi0jZGVmaW5lIE1UX05PVCAxCi0jZGVmaW5lIE1UX0FMTCAyCi0KIHN0YXRp
YyB1c2NoYXIgY3V0dGhyb3VnaF9yZXNwb25zZShjbGllbnRfY29ubl9jdHggKiwgY2hhciwgdXNj
aGFyICoqLCBpbnQpOwogCiAKQEAgLTcxLDcgKzUwLDcgQEAKIAogaWYgKCEoY2FjaGVfcmVjb3Jk
ID0gZGJmbl9yZWFkX3dpdGhfbGVuZ3RoKGRibV9maWxlLCBrZXksICZsZW5ndGgpKSkKICAgewot
ICBIREVCVUcoRF92ZXJpZnkpIGRlYnVnX3ByaW50ZigiY2FsbG91dCBjYWNoZTogbm8gJXMgcmVj
b3JkIGZvdW5kIGZvciAlc1xuIiwgdHlwZSwga2V5KTsKKyAgSERFQlVHKERfdmVyaWZ5KSBkZWJ1
Z19wcmludGZfaW5kZW50KCJjYWxsb3V0IGNhY2hlOiBubyAlcyByZWNvcmQgZm91bmQgZm9yICVz
XG4iLCB0eXBlLCBrZXkpOwogICByZXR1cm4gTlVMTDsKICAgfQogCkBAIC04NSw3ICs2NCw3IEBA
CiAKIGlmIChub3cgLSBjYWNoZV9yZWNvcmQtPnRpbWVfc3RhbXAgPiBleHBpcmUpCiAgIHsKLSAg
SERFQlVHKERfdmVyaWZ5KSBkZWJ1Z19wcmludGYoImNhbGxvdXQgY2FjaGU6ICVzIHJlY29yZCBl
eHBpcmVkIGZvciAlc1xuIiwgdHlwZSwga2V5KTsKKyAgSERFQlVHKERfdmVyaWZ5KSBkZWJ1Z19w
cmludGZfaW5kZW50KCJjYWxsb3V0IGNhY2hlOiAlcyByZWNvcmQgZXhwaXJlZCBmb3IgJXNcbiIs
IHR5cGUsIGtleSk7CiAgIHJldHVybiBOVUxMOwogICB9CiAKQEAgLTk5LDcgKzc4LDcgQEAKICAg
ewogICBpZiAobGVuZ3RoID09IHNpemVvZihkYmRhdGFfY2FsbG91dF9jYWNoZV9vYnMpKQogICAg
IHsKLSAgICBkYmRhdGFfY2FsbG91dF9jYWNoZSAqbmV3ID0gc3RvcmVfZ2V0KHNpemVvZihkYmRh
dGFfY2FsbG91dF9jYWNoZSksIEZBTFNFKTsKKyAgICBkYmRhdGFfY2FsbG91dF9jYWNoZSAqIG5l
dyA9IHN0b3JlX2dldChzaXplb2YoZGJkYXRhX2NhbGxvdXRfY2FjaGUpLCBHRVRfVU5UQUlOVEVE
KTsKICAgICBtZW1jcHkobmV3LCBjYWNoZV9yZWNvcmQsIGxlbmd0aCk7CiAgICAgbmV3LT5wb3N0
bWFzdGVyX3N0YW1wID0gbmV3LT5yYW5kb21fc3RhbXAgPSBuZXctPnRpbWVfc3RhbXA7CiAgICAg
Y2FjaGVfcmVjb3JkID0gbmV3OwpAQCAtMTEyLDcgKzkxLDcgQEAKICAgICBjYWNoZV9yZWNvcmQt
PnJhbmRvbV9yZXN1bHQgPSBjY2FjaGVfdW5rbm93bjsKICAgfQogCi1IREVCVUcoRF92ZXJpZnkp
IGRlYnVnX3ByaW50ZigiY2FsbG91dCBjYWNoZTogZm91bmQgJXMgcmVjb3JkIGZvciAlc1xuIiwg
dHlwZSwga2V5KTsKK0hERUJVRyhEX3ZlcmlmeSkgZGVidWdfcHJpbnRmX2luZGVudCgiY2FsbG91
dCBjYWNoZTogZm91bmQgJXMgcmVjb3JkIGZvciAlc1xuIiwgdHlwZSwga2V5KTsKIHJldHVybiBj
YWNoZV9yZWNvcmQ7CiB9CiAKQEAgLTEzNCwxNiArMTEzLDE2IEBACiBvcGVuX2RiIGRiYmxvY2s7
CiBvcGVuX2RiICpkYm1fZmlsZSA9IE5VTEw7CiAKLS8qIE9wZW4gdGhlIGNhbGxvdXQgY2FjaGUg
ZGF0YWJhc2UsIGl0IGl0IGV4aXN0cywgZm9yIHJlYWRpbmcgb25seSBhdCB0aGlzCisvKiBPcGVu
IHRoZSBjYWxsb3V0IGNhY2hlIGRhdGFiYXNlLCBpZiBpdCBleGlzdHMsIGZvciByZWFkaW5nIG9u
bHkgYXQgdGhpcwogc3RhZ2UsIHVubGVzcyBjYWNoaW5nIGhhcyBiZWVuIGRpc2FibGVkLiAqLwog
CiBpZiAob3B0aW9ucyAmIHZvcHRfY2FsbG91dF9ub19jYWNoZSkKICAgewotICBIREVCVUcoRF92
ZXJpZnkpIGRlYnVnX3ByaW50ZigiY2FsbG91dCBjYWNoZTogZGlzYWJsZWQgYnkgbm9fY2FjaGVc
biIpOworICBIREVCVUcoRF92ZXJpZnkpIGRlYnVnX3ByaW50Zl9pbmRlbnQoImNhbGxvdXQgY2Fj
aGU6IGRpc2FibGVkIGJ5IG5vX2NhY2hlXG4iKTsKICAgfQogZWxzZSBpZiAoIShkYm1fZmlsZSA9
IGRiZm5fb3BlbihVUyJjYWxsb3V0IiwgT19SRFdSLCAmZGJibG9jaywgRkFMU0UsIFRSVUUpKSkK
ICAgewotICBIREVCVUcoRF92ZXJpZnkpIGRlYnVnX3ByaW50ZigiY2FsbG91dCBjYWNoZTogbm90
IGF2YWlsYWJsZVxuIik7CisgIEhERUJVRyhEX3ZlcmlmeSkgZGVidWdfcHJpbnRmX2luZGVudCgi
Y2FsbG91dCBjYWNoZTogbm90IGF2YWlsYWJsZVxuIik7CiAgIH0KIGVsc2UKICAgewpAQCAtMTc0
LDcgKzE1Myw3IEBACiAgICAgICAgfHwgKmZyb21fYWRkcmVzcyA9PSAwICYmIGNhY2hlX3JlY29y
ZC0+cmVzdWx0ID09IGNjYWNoZV9yZWplY3RfbWZudWxsKQogICAgICAgewogICAgICAgSERFQlVH
KERfdmVyaWZ5KQotCWRlYnVnX3ByaW50ZigiY2FsbG91dCBjYWNoZTogZG9tYWluIGdhdmUgaW5p
dGlhbCByZWplY3Rpb24sIG9yICIKKwlkZWJ1Z19wcmludGZfaW5kZW50KCJjYWxsb3V0IGNhY2hl
OiBkb21haW4gZ2F2ZSBpbml0aWFsIHJlamVjdGlvbiwgb3IgIgogCSAgImRvZXMgbm90IGFjY2Vw
dCBIRUxPIG9yIE1BSUwgRlJPTTo8PlxuIik7CiAgICAgICBzZXRmbGFnKGFkZHIsIGFmX3Zlcmlm
eV9uc2ZhaWwpOwogICAgICAgYWRkci0+dXNlcl9tZXNzYWdlID0gVVMiKHJlc3VsdCBvZiBhbiBl
YXJsaWVyIGNhbGxvdXQgcmV1c2VkKS4iOwpAQCAtMTk1LDE0ICsxNzQsMTQgQEAKICAgICAgIHsK
ICAgICAgIGNhc2UgY2NhY2hlX2FjY2VwdDoKIAlIREVCVUcoRF92ZXJpZnkpCi0JICBkZWJ1Z19w
cmludGYoImNhbGxvdXQgY2FjaGU6IGRvbWFpbiBhY2NlcHRzIHJhbmRvbSBhZGRyZXNzZXNcbiIp
OworCSAgZGVidWdfcHJpbnRmX2luZGVudCgiY2FsbG91dCBjYWNoZTogZG9tYWluIGFjY2VwdHMg
cmFuZG9tIGFkZHJlc3Nlc1xuIik7CiAJKmZhaWx1cmVfcHRyID0gVVMicmFuZG9tIjsKIAlkYmZu
X2Nsb3NlKGRibV9maWxlKTsKIAlyZXR1cm4gVFJVRTsgICAgIC8qIERlZmF1bHQgeWllbGQgaXMg
T0sgKi8KIAogICAgICAgY2FzZSBjY2FjaGVfcmVqZWN0OgogCUhERUJVRyhEX3ZlcmlmeSkKLQkg
IGRlYnVnX3ByaW50ZigiY2FsbG91dCBjYWNoZTogZG9tYWluIHJlamVjdHMgcmFuZG9tIGFkZHJl
c3Nlc1xuIik7CisJICBkZWJ1Z19wcmludGZfaW5kZW50KCJjYWxsb3V0IGNhY2hlOiBkb21haW4g
cmVqZWN0cyByYW5kb20gYWRkcmVzc2VzXG4iKTsKIAkqb3B0X3B0ciA9IG9wdGlvbnMgJiB+dm9w
dF9jYWxsb3V0X3JhbmRvbTsKIAluZXdfZG9tYWluX3JlY29yZC0+cmFuZG9tX3Jlc3VsdCA9IGNj
YWNoZV9yZWplY3Q7CiAJbmV3X2RvbWFpbl9yZWNvcmQtPnJhbmRvbV9zdGFtcCA9IGNhY2hlX3Jl
Y29yZC0+cmFuZG9tX3N0YW1wOwpAQCAtMjEwLDcgKzE4OSw3IEBACiAKICAgICAgIGRlZmF1bHQ6
CiAJSERFQlVHKERfdmVyaWZ5KQotCSAgZGVidWdfcHJpbnRmKCJjYWxsb3V0IGNhY2hlOiBuZWVk
IHRvIGNoZWNrIHJhbmRvbSBhZGRyZXNzIGhhbmRsaW5nICIKKwkgIGRlYnVnX3ByaW50Zl9pbmRl
bnQoImNhbGxvdXQgY2FjaGU6IG5lZWQgdG8gY2hlY2sgcmFuZG9tIGFkZHJlc3MgaGFuZGxpbmcg
IgogCSAgICAiKG5vdCBjYWNoZWQgb3IgY2FjaGUgZXhwaXJlZClcbiIpOwogCWRiZm5fY2xvc2Uo
ZGJtX2ZpbGUpOwogCXJldHVybiBGQUxTRTsKQEAgLTIyNyw3ICsyMDYsNyBAQAogCXsKIAlzZXRm
bGFnKGFkZHIsIGFmX3ZlcmlmeV9wbWZhaWwpOwogCUhERUJVRyhEX3ZlcmlmeSkKLQkgIGRlYnVn
X3ByaW50ZigiY2FsbG91dCBjYWNoZTogZG9tYWluIGRvZXMgbm90IGFjY2VwdCAiCisJICBkZWJ1
Z19wcmludGZfaW5kZW50KCJjYWxsb3V0IGNhY2hlOiBkb21haW4gZG9lcyBub3QgYWNjZXB0ICIK
IAkgICAgIlJDUFQgVE86PHBvc3RtYXN0ZXJAZG9tYWluPlxuIik7CiAJKnlpZWxkID0gRkFJTDsK
IAkqZmFpbHVyZV9wdHIgPSBVUyJwb3N0bWFzdGVyIjsKQEAgLTIzOSw3ICsyMTgsNyBAQAogICAg
ICAgaWYgKGNhY2hlX3JlY29yZC0+cG9zdG1hc3Rlcl9yZXN1bHQgPT0gY2NhY2hlX3Vua25vd24p
CiAJewogCUhERUJVRyhEX3ZlcmlmeSkKLQkgIGRlYnVnX3ByaW50ZigiY2FsbG91dCBjYWNoZTog
bmVlZCB0byBjaGVjayBSQ1BUICIKKwkgIGRlYnVnX3ByaW50Zl9pbmRlbnQoImNhbGxvdXQgY2Fj
aGU6IG5lZWQgdG8gY2hlY2sgUkNQVCAiCiAJICAgICJUTzo8cG9zdG1hc3RlckBkb21haW4+IChu
b3QgY2FjaGVkIG9yIGNhY2hlIGV4cGlyZWQpXG4iKTsKIAlkYmZuX2Nsb3NlKGRibV9maWxlKTsK
IAlyZXR1cm4gRkFMU0U7CkBAIC0yNTAsNyArMjI5LDcgQEAKICAgICAgIHRoYXQgdGhlIHZhbHVl
IGluIHRoZSBjYWNoZSByZWNvcmQgaXMgcHJlc2VydmVkICh3aXRoIGl0cyBvbGQgdGltZXN0YW1w
KS4KICAgICAgICovCiAKLSAgICAgIEhERUJVRyhEX3ZlcmlmeSkgZGVidWdfcHJpbnRmKCJjYWxs
b3V0IGNhY2hlOiBkb21haW4gYWNjZXB0cyBSQ1BUICIKKyAgICAgIEhERUJVRyhEX3ZlcmlmeSkg
ZGVidWdfcHJpbnRmX2luZGVudCgiY2FsbG91dCBjYWNoZTogZG9tYWluIGFjY2VwdHMgUkNQVCAi
CiAJIlRPOjxwb3N0bWFzdGVyQGRvbWFpbj5cbiIpOwogICAgICAgKnBtX3B0ciA9IE5VTEw7CiAg
ICAgICBuZXdfZG9tYWluX3JlY29yZC0+cG9zdG1hc3Rlcl9yZXN1bHQgPSBjY2FjaGVfYWNjZXB0
OwpAQCAtMjc0LDEyICsyNTMsMTIgQEAKICAgaWYgKGNhY2hlX2FkZHJlc3NfcmVjb3JkLT5yZXN1
bHQgPT0gY2NhY2hlX2FjY2VwdCkKICAgICB7CiAgICAgSERFQlVHKERfdmVyaWZ5KQotICAgICAg
ZGVidWdfcHJpbnRmKCJjYWxsb3V0IGNhY2hlOiBhZGRyZXNzIHJlY29yZCBpcyBwb3NpdGl2ZVxu
Iik7CisgICAgICBkZWJ1Z19wcmludGZfaW5kZW50KCJjYWxsb3V0IGNhY2hlOiBhZGRyZXNzIHJl
Y29yZCBpcyBwb3NpdGl2ZVxuIik7CiAgICAgfQogICBlbHNlCiAgICAgewogICAgIEhERUJVRyhE
X3ZlcmlmeSkKLSAgICAgIGRlYnVnX3ByaW50ZigiY2FsbG91dCBjYWNoZTogYWRkcmVzcyByZWNv
cmQgaXMgbmVnYXRpdmVcbiIpOworICAgICAgZGVidWdfcHJpbnRmX2luZGVudCgiY2FsbG91dCBj
YWNoZTogYWRkcmVzcyByZWNvcmQgaXMgbmVnYXRpdmVcbiIpOwogICAgIGFkZHItPnVzZXJfbWVz
c2FnZSA9IFVTIlByZXZpb3VzIChjYWNoZWQpIGNhbGxvdXQgdmVyaWZpY2F0aW9uIGZhaWx1cmUi
OwogICAgICpmYWlsdXJlX3B0ciA9IFVTInJlY2lwaWVudCI7CiAgICAgKnlpZWxkID0gRkFJTDsK
QEAgLTMxNiwxMyArMjk1LDEzIEBACiBpZiAoZG9tX3JlYy0+cmVzdWx0ICE9IGNjYWNoZV91bmtu
b3duKQogICBpZiAoIShkYm1fZmlsZSA9IGRiZm5fb3BlbihVUyJjYWxsb3V0IiwgT19SRFdSfE9f
Q1JFQVQsICZkYmJsb2NrLCBGQUxTRSwgVFJVRSkpKQogICAgIHsKLSAgICBIREVCVUcoRF92ZXJp
ZnkpIGRlYnVnX3ByaW50ZigiY2FsbG91dCBjYWNoZTogbm90IGF2YWlsYWJsZVxuIik7CisgICAg
SERFQlVHKERfdmVyaWZ5KSBkZWJ1Z19wcmludGZfaW5kZW50KCJjYWxsb3V0IGNhY2hlOiBub3Qg
YXZhaWxhYmxlXG4iKTsKICAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgKHZvaWQpZGJmbl93cml0
ZShkYm1fZmlsZSwgZG9tYWluLCBkb21fcmVjLAogICAgICAgKGludClzaXplb2YoZGJkYXRhX2Nh
bGxvdXRfY2FjaGUpKTsKLSAgICBIREVCVUcoRF92ZXJpZnkpIGRlYnVnX3ByaW50Zigid3JvdGUg
Y2FsbG91dCBjYWNoZSBkb21haW4gcmVjb3JkIGZvciAlczpcbiIKKyAgICBIREVCVUcoRF92ZXJp
ZnkpIGRlYnVnX3ByaW50Zl9pbmRlbnQoIndyb3RlIGNhbGxvdXQgY2FjaGUgZG9tYWluIHJlY29y
ZCBmb3IgJXM6XG4iCiAgICAgICAiICByZXN1bHQ9JWQgcG9zdG1hc3Rlcj0lZCByYW5kb209JWRc
biIsCiAgICAgICBkb21haW4sCiAgICAgICBkb21fcmVjLT5yZXN1bHQsCkBAIC0zMzksMTMgKzMx
OCwxMyBAQAogICAgIGRibV9maWxlID0gZGJmbl9vcGVuKFVTImNhbGxvdXQiLCBPX1JEV1J8T19D
UkVBVCwgJmRiYmxvY2ssIEZBTFNFLCBUUlVFKTsKICAgaWYgKCFkYm1fZmlsZSkKICAgICB7Ci0g
ICAgSERFQlVHKERfdmVyaWZ5KSBkZWJ1Z19wcmludGYoIm5vIGNhbGxvdXQgY2FjaGUgYXZhaWxh
YmxlXG4iKTsKKyAgICBIREVCVUcoRF92ZXJpZnkpIGRlYnVnX3ByaW50Zl9pbmRlbnQoIm5vIGNh
bGxvdXQgY2FjaGUgYXZhaWxhYmxlXG4iKTsKICAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgKHZv
aWQpZGJmbl93cml0ZShkYm1fZmlsZSwgYWRkcmVzc19rZXksIGFkZHJfcmVjLAogICAgICAgKGlu
dClzaXplb2YoZGJkYXRhX2NhbGxvdXRfY2FjaGVfYWRkcmVzcykpOwotICAgIEhERUJVRyhEX3Zl
cmlmeSkgZGVidWdfcHJpbnRmKCJ3cm90ZSAlcyBjYWxsb3V0IGNhY2hlIGFkZHJlc3MgcmVjb3Jk
IGZvciAlc1xuIiwKKyAgICBIREVCVUcoRF92ZXJpZnkpIGRlYnVnX3ByaW50Zl9pbmRlbnQoIndy
b3RlICVzIGNhbGxvdXQgY2FjaGUgYWRkcmVzcyByZWNvcmQgZm9yICVzXG4iLAogICAgICAgYWRk
cl9yZWMtPnJlc3VsdCA9PSBjY2FjaGVfYWNjZXB0ID8gInBvc2l0aXZlIiA6ICJuZWdhdGl2ZSIs
CiAgICAgICBhZGRyZXNzX2tleSk7CiAgICAgfQpAQCAtNDIxLDcgKzQwMCw3IEBACiAKIAlpZiAo
ZG9uZSkKIAkgIHsKLQkgIGFkZHJlc3NfaXRlbSAqIG5hID0gc3RvcmVfZ2V0KHNpemVvZihhZGRy
ZXNzX2l0ZW0pLCBGQUxTRSk7CisJICBhZGRyZXNzX2l0ZW0gKiBuYSA9IHN0b3JlX2dldChzaXpl
b2YoYWRkcmVzc19pdGVtKSwgR0VUX1VOVEFJTlRFRCk7CiAJICAqbmEgPSBjdXR0aHJvdWdoLmFk
ZHI7CiAJICBjdXR0aHJvdWdoLmFkZHIgPSAqYWRkcjsKIAkgIGN1dHRocm91Z2guYWRkci5ob3N0
X3VzZWQgPSAmY3V0dGhyb3VnaC5ob3N0OwpAQCAtNDY2LDYgKzQ0NSwyMSBAQAogfQogCiAKKwor
CisvKiBBIHJjcHQgY2FsbG91dCwgb3IgY2FjaGVkIHJlY29yZCBvZiBvbmUsIHZlcmlmaWVkIHRo
ZSBhZGRyZXNzLgorU2V0ICRkb21haW5fZGF0YSBhbmQgJGxvY2FsX3BhcnRfZGF0YSB0byBkZXRh
aW50ZWQgdmVyc2lvbnMuCisqLworc3RhdGljIHZvaWQKK2NhbGxvdXRfdmVyaWZpZWRfcmNwdChj
b25zdCBhZGRyZXNzX2l0ZW0gKiBhZGRyKQoreworYWRkcmVzc19pdGVtIGEgPSB7LmFkZHJlc3Mg
PSBhZGRyLT5hZGRyZXNzfTsKK2lmIChkZWxpdmVyX3NwbGl0X2FkZHJlc3MoJmEpICE9IE9LKSBy
ZXR1cm47CitkZWxpdmVyX2xvY2FscGFydF9kYXRhID0gc3RyaW5nX2NvcHlfdGFpbnQoYS5sb2Nh
bF9wYXJ0LCBHRVRfVU5UQUlOVEVEKTsKK2RlbGl2ZXJfZG9tYWluX2RhdGEgPSAgICBzdHJpbmdf
Y29weV90YWludChhLmRvbWFpbiwgICAgIEdFVF9VTlRBSU5URUQpOworfQorCisKIC8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgRG8gY2Fs
bG91dCB2ZXJpZmljYXRpb24gZm9yIGFuIGFkZHJlc3MgICAgKgogKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTU2OCw2ICs1NjIsNyBAQAogICB7
CiAgIEhERUJVRyhEX3ZlcmlmeSkgZGVidWdfcHJpbnRmKCJjYW5ub3QgY2FsbG91dCB2aWEgbnVs
bCB0cmFuc3BvcnRcbiIpOwogICB9CisKIGVsc2UgaWYgKFVzdHJjbXAoYWRkci0+dHJhbnNwb3J0
LT5kcml2ZXJfbmFtZSwgInNtdHAiKSAhPSAwKQogICBsb2dfd3JpdGUoMCwgTE9HX01BSU58TE9H
X1BBTklDfExPR19DT05GSUdfRk9SLCAiY2FsbG91dCB0cmFuc3BvcnQgJyVzJzogJXMgaXMgbm9u
LXNtdHAiLAogICAgIGFkZHItPnRyYW5zcG9ydC0+bmFtZSwgYWRkci0+dHJhbnNwb3J0LT5kcml2
ZXJfbmFtZSk7CkBAIC02NzEsNyArNjY2LDcgQEAKICAgICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJ
TnxMT0dfUEFOSUMsICI8JXM+OiAlcyIsIGFkZHItPmFkZHJlc3MsCiAgICAgICAgIGFkZHItPm1l
c3NhZ2UpOwogCi0gICAgaWYgKCFzeCkgc3ggPSBzdG9yZV9nZXQoc2l6ZW9mKCpzeCksIFRSVUUp
OwkvKiB0YWludGVkIGJ1ZmZlcnMgKi8KKyAgICBpZiAoIXN4KSBzeCA9IHN0b3JlX2dldChzaXpl
b2YoKnN4KSwgR0VUX1RBSU5URUQpOwkvKiB0YWludGVkIGJ1ZmZlcnMgKi8KICAgICBtZW1zZXQo
c3gsIDAsIHNpemVvZigqc3gpKTsKIAogICAgIHN4LT5hZGRybGlzdCA9IHN4LT5maXJzdF9hZGRy
ID0gYWRkcjsKQEAgLTY4MSw2ICs2NzYsNyBAQAogICAgIHN4LT5jb25uX2FyZ3MuaW50ZXJmYWNl
ID0gaW50ZXJmYWNlOwogICAgIHN4LT5oZWxvX2RhdGEgPSB0Zi0+aGVsb19kYXRhOwogICAgIHN4
LT5jb25uX2FyZ3MudGJsb2NrID0gYWRkci0+dHJhbnNwb3J0OworICAgIHN4LT5jb25uX2FyZ3Mu
c29jayA9IC0xOwogICAgIHN4LT52ZXJpZnkgPSBUUlVFOwogCiB0bHNfcmV0cnlfY29ubmVjdGlv
bjoKQEAgLTgzNSw3ICs4MzEsNyBAQAogCSAgICBzeC0+Y2N0eC5zb2NrID0gLTE7CiAjaWZuZGVm
IERJU0FCTEVfRVZFTlQKIAkgICAgKHZvaWQpIGV2ZW50X3JhaXNlKGFkZHItPnRyYW5zcG9ydC0+
ZXZlbnRfYWN0aW9uLAotCQkJICAgICAgVVMidGNwOmNsb3NlIiwgTlVMTCk7CisJCQkgICAgICBV
UyJ0Y3A6Y2xvc2UiLCBOVUxMLCBOVUxMKTsKICNlbmRpZgogCSAgICBhZGRyLT5hZGRyZXNzID0g
bWFpbl9hZGRyZXNzOwogCSAgICBhZGRyLT50cmFuc3BvcnRfcmV0dXJuID0gUEVORElOR19ERUZF
UjsKQEAgLTExMTYsNyArMTExMiw3IEBACiAgICAgICBmb3IgKGFkZHJlc3NfaXRlbSAqIGNhZGRy
ID0gJmN1dHRocm91Z2guYWRkciwgKiBwYXJlbnQgPSBhZGRyLT5wYXJlbnQ7CiAJICAgcGFyZW50
OwogCSAgIGNhZGRyID0gY2FkZHItPnBhcmVudCwgcGFyZW50ID0gcGFyZW50LT5wYXJlbnQpCi0g
ICAgICAgICooY2FkZHItPnBhcmVudCA9IHN0b3JlX2dldChzaXplb2YoYWRkcmVzc19pdGVtKSwg
RkFMU0UpKSA9ICpwYXJlbnQ7CisgICAgICAgICooY2FkZHItPnBhcmVudCA9IHN0b3JlX2dldChz
aXplb2YoYWRkcmVzc19pdGVtKSwgR0VUX1VOVEFJTlRFRCkpID0gKnBhcmVudDsKIAogICAgICAg
Y3RjdHgub3V0YmxvY2suYnVmZmVyID0gY3RidWZmZXI7CiAgICAgICBjdGN0eC5vdXRibG9jay5i
dWZmZXJzaXplID0gc2l6ZW9mKGN0YnVmZmVyKTsKQEAgLTExNDYsOCArMTE0Miw5IEBACiAJSERF
QlVHKERfdHJhbnNwb3J0fERfYWNsfERfdikgZGVidWdfcHJpbnRmX2luZGVudCgiICBTTVRQKGNs
b3NlKT4+XG4iKTsKIAkodm9pZCljbG9zZShzeC0+Y2N0eC5zb2NrKTsKIAlzeC0+Y2N0eC5zb2Nr
ID0gLTE7CisJc210cF9kZWJ1Z19jbWRfcmVwb3J0KCk7CiAjaWZuZGVmIERJU0FCTEVfRVZFTlQK
LQkodm9pZCkgZXZlbnRfcmFpc2UoYWRkci0+dHJhbnNwb3J0LT5ldmVudF9hY3Rpb24sIFVTInRj
cDpjbG9zZSIsIE5VTEwpOworCSh2b2lkKSBldmVudF9yYWlzZShhZGRyLT50cmFuc3BvcnQtPmV2
ZW50X2FjdGlvbiwgVVMidGNwOmNsb3NlIiwgTlVMTCwgTlVMTCk7CiAjZW5kaWYKIAl9CiAgICAg
ICB9CkBAIC0xMzY2LDcgKzEzNjMsNyBAQAogaWYoY3V0dGhyb3VnaC5jY3R4LnNvY2sgPCAwIHx8
IGN1dHRocm91Z2guY2FsbG91dF9ob2xkX29ubHkpCiAgIHJldHVybiBGQUxTRTsKIAotSERFQlVH
KERfdHJhbnNwb3J0fERfYWNsfERfdikgZGVidWdfcHJpbnRmX2luZGVudCgiICBTTVRQPj4gREFU
QVxuIik7CitzbXRwX2RlYnVnX2NtZChVUyJEQVRBIiwgMCk7CiBjdXR0aHJvdWdoX3B1dHMoVVMi
REFUQVxyXG4iLCA2KTsKIGN1dHRocm91Z2hfZmx1c2hfc2VuZCgpOwogCkBAIC0xNDM0LDcgKzE0
MzEsNyBAQAogICAqLwogICBjbGllbnRfY29ubl9jdHggdG1wX2N0eCA9IGN1dHRocm91Z2guY2N0
eDsKICAgY3RjdHgub3V0YmxvY2sucHRyID0gY3RidWZmZXI7Ci0gIEhERUJVRyhEX3RyYW5zcG9y
dHxEX2FjbHxEX3YpIGRlYnVnX3ByaW50Zl9pbmRlbnQoIiAgU01UUD4+IFFVSVRcbiIpOworICBz
bXRwX2RlYnVnX2NtZChVUyJRVUlUIiwgMCk7CiAgIF9jdXR0aHJvdWdoX3B1dHMoVVMiUVVJVFxy
XG4iLCA2KTsJLyogYXZvaWQgcmVjdXJzaW9uICovCiAgIF9jdXR0aHJvdWdoX2ZsdXNoX3NlbmQo
KTsKICAgY3V0dGhyb3VnaC5jY3R4LnNvY2sgPSAtMTsJCS8qIGF2b2lkIHJlY3Vyc2lvbiB2aWEg
cmVhZCB0aW1lb3V0ICovCkBAIC0xNDUzLDYgKzE0NTAsNyBAQAogI2VuZGlmCiAgIEhERUJVRyhE
X3RyYW5zcG9ydHxEX2FjbHxEX3YpIGRlYnVnX3ByaW50Zl9pbmRlbnQoIiAgU01UUChjbG9zZSk+
PlxuIik7CiAgICh2b2lkKWNsb3NlKGZkKTsKKyAgc210cF9kZWJ1Z19jbWRfcmVwb3J0KCk7CiAg
IEhERUJVRyhEX2FjbCkgZGVidWdfcHJpbnRmX2luZGVudCgiLS0tLS0tLS0tLS0gY3V0dGhyb3Vn
aCBzaHV0ZG93biAoJXMpIC0tLS0tLS0tLS0tLVxuIiwgd2h5KTsKICAgfQogY3RjdHgub3V0Ymxv
Y2sucHRyID0gY3RidWZmZXI7CkBAIC0xNjEyLDcgKzE2MTAsNyBAQAogQXJndW1lbnRzOgogICB2
YWRkciAgICAgICAgICAgIGNvbnRhaW5zIHRoZSBhZGRyZXNzIHRvIHZlcmlmeTsgdGhlIG5leHQg
ZmllbGQgaW4gdGhpcyBibG9jawogICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSBOVUxMCi0g
IGYgICAgICAgICAgICAgICAgaWYgbm90IE5VTEwsIHdyaXRlIHRoZSByZXN1bHQgdG8gdGhpcyBm
aWxlCisgIGZwICAgICAgICAgICAgICAgaWYgbm90IE5VTEwsIHdyaXRlIHRoZSByZXN1bHQgdG8g
dGhpcyBmaWxlCiAgIG9wdGlvbnMgICAgICAgICAgdmFyaW91cyBvcHRpb24gYml0czoKICAgICAg
ICAgICAgICAgICAgICAgIHZvcHRfZmFrZV9zZW5kZXIgPT4gdGhpcyBzZW5kZXIgdmVyaWZ5IGlz
IG5vdCBmb3IgdGhlIHJlYWwKICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGVyIChpdCB3YXMg
dmVyaWZ5PXNlbmRlcj14eHh4IG9yIGFuIGFkZHJlc3MgZnJvbSBhCkBAIC0xNjYzLDkgKzE2NjEs
OSBAQAogQk9PTCBzdWNjZXNzX29uX3JlZGlyZWN0ID0gKG9wdGlvbnMgJiB2b3B0X3N1Y2Nlc3Nf
b25fcmVkaXJlY3QpICE9IDA7CiBpbnQgaTsKIGludCB5aWVsZCA9IE9LOwotaW50IHZlcmlmeV90
eXBlID0gZXhwbj8gdl9leHBuIDoKLSAgIGYuYWRkcmVzc190ZXN0X21vZGU/IHZfbm9uZSA6Ci0g
ICAgICAgICAgb3B0aW9ucyAmIHZvcHRfaXNfcmVjaXBpZW50PyB2X3JlY2lwaWVudCA6IHZfc2Vu
ZGVyOworaW50IHZlcmlmeV90eXBlID0gZXhwbiA/IHZfZXhwbiA6CisgICBmLmFkZHJlc3NfdGVz
dF9tb2RlID8gdl9ub25lIDoKKyAgICAgICAgICBvcHRpb25zICYgdm9wdF9pc19yZWNpcGllbnQg
PyB2X3JlY2lwaWVudCA6IHZfc2VuZGVyOwogYWRkcmVzc19pdGVtICphZGRyX2xpc3Q7CiBhZGRy
ZXNzX2l0ZW0gKmFkZHJfbmV3ID0gTlVMTDsKIGFkZHJlc3NfaXRlbSAqYWRkcl9yZW1vdGUgPSBO
VUxMOwpAQCAtMTg0OCw2ICsxODQ2LDggQEAKIAogICBpZiAocmMgPT0gT0spCiAgICAgeworICAg
IEJPT0wgbG9jYWxfdmVyaWZ5ID0gRkFMU0U7CisKICAgICBpZiAocm91dGVkKSAqcm91dGVkID0g
VFJVRTsKICAgICBpZiAoY2FsbG91dCA+IDApCiAgICAgICB7CkBAIC0xODc0LDcyICsxODc0LDc2
IEBACiAgICAgICB0cmFuc3BvcnQncyBvcHRpb25zLCBzbyBhcyB0byBtaW1pYyB3aGF0IHdvdWxk
IGhhcHBlbiBpZiB3ZSB3ZXJlIHJlYWxseQogICAgICAgc2VuZGluZyBhIG1lc3NhZ2UgdG8gdGhp
cyBhZGRyZXNzLiAqLwogCi0gICAgICBpZiAoKHRwID0gYWRkci0+dHJhbnNwb3J0KSAmJiAhdHAt
PmluZm8tPmxvY2FsKQotICAgICAgICB7Ci0gICAgICAgICh2b2lkKSh0cC0+c2V0dXApKHRwLCBh
ZGRyLCAmdGYsIDAsIDAsIE5VTEwpOworICAgICAgaWYgKCh0cCA9IGFkZHItPnRyYW5zcG9ydCkp
CisJaWYgKCF0cC0+aW5mby0+bG9jYWwpCisJICB7CisJICAodm9pZCkodHAtPnNldHVwKSh0cCwg
YWRkciwgJnRmLCAwLCAwLCBOVUxMKTsKIAotICAgICAgICAvKiBJZiB0aGUgdHJhbnNwb3J0IGhh
cyBob3N0cyBhbmQgdGhlIHJvdXRlciBkb2VzIG5vdCwgb3IgaWYgdGhlCi0gICAgICAgIHRyYW5z
cG9ydCBpcyBjb25maWd1cmVkIHRvIG92ZXJyaWRlIHRoZSByb3V0ZXIncyBob3N0cywgd2UgbXVz
dCBidWlsZCBhCi0gICAgICAgIGhvc3QgbGlzdCBvZiB0aGUgdHJhbnNwb3J0J3MgaG9zdHMsIGFu
ZCBmaW5kIHRoZSBJUCBhZGRyZXNzZXMgKi8KKwkgIC8qIElmIHRoZSB0cmFuc3BvcnQgaGFzIGhv
c3RzIGFuZCB0aGUgcm91dGVyIGRvZXMgbm90LCBvciBpZiB0aGUKKwkgIHRyYW5zcG9ydCBpcyBj
b25maWd1cmVkIHRvIG92ZXJyaWRlIHRoZSByb3V0ZXIncyBob3N0cywgd2UgbXVzdCBidWlsZCBh
CisJICBob3N0IGxpc3Qgb2YgdGhlIHRyYW5zcG9ydCdzIGhvc3RzLCBhbmQgZmluZCB0aGUgSVAg
YWRkcmVzc2VzICovCiAKLSAgICAgICAgaWYgKHRmLmhvc3RzICYmICghaG9zdF9saXN0IHx8IHRm
Lmhvc3RzX292ZXJyaWRlKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgdXNjaGFyICpzOwotICAg
ICAgICAgIGNvbnN0IHVzY2hhciAqc2F2ZV9kZWxpdmVyX2RvbWFpbiA9IGRlbGl2ZXJfZG9tYWlu
OwotICAgICAgICAgIHVzY2hhciAqc2F2ZV9kZWxpdmVyX2xvY2FscGFydCA9IGRlbGl2ZXJfbG9j
YWxwYXJ0OwotCi0gICAgICAgICAgaG9zdF9saXN0ID0gTlVMTDsgICAgLyogSWdub3JlIHRoZSBy
b3V0ZXIncyBob3N0cyAqLwotCi0gICAgICAgICAgZGVsaXZlcl9kb21haW4gPSBhZGRyLT5kb21h
aW47Ci0gICAgICAgICAgZGVsaXZlcl9sb2NhbHBhcnQgPSBhZGRyLT5sb2NhbF9wYXJ0OwotICAg
ICAgICAgIHMgPSBleHBhbmRfc3RyaW5nKHRmLmhvc3RzKTsKLSAgICAgICAgICBkZWxpdmVyX2Rv
bWFpbiA9IHNhdmVfZGVsaXZlcl9kb21haW47Ci0gICAgICAgICAgZGVsaXZlcl9sb2NhbHBhcnQg
PSBzYXZlX2RlbGl2ZXJfbG9jYWxwYXJ0OwotCi0gICAgICAgICAgaWYgKCFzKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgbG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQywgImZhaWxl
ZCB0byBleHBhbmQgbGlzdCBvZiBob3N0cyAiCi0gICAgICAgICAgICAgICJcIiVzXCIgaW4gJXMg
dHJhbnNwb3J0IGZvciBjYWxsb3V0OiAlcyIsIHRmLmhvc3RzLAotICAgICAgICAgICAgICB0cC0+
bmFtZSwgZXhwYW5kX3N0cmluZ19tZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgZmxhZ3M7Ci0gICAgICAgICAgICBo
b3N0X2J1aWxkX2hvc3RsaXN0KCZob3N0X2xpc3QsIHMsIHRmLmhvc3RzX3JhbmRvbWl6ZSk7Ci0K
LSAgICAgICAgICAgIC8qIEp1c3QgaWdub3JlIGZhaWx1cmVzIHRvIGZpbmQgYSBob3N0IGFkZHJl
c3MuIElmIHdlIGRvbid0IG1hbmFnZQotICAgICAgICAgICAgdG8gZmluZCBhbnkgYWRkcmVzc2Vz
LCB0aGUgY2FsbG91dCB3aWxsIGRlZmVyLiBOb3RlIHRoYXQgbW9yZSB0aGFuCi0gICAgICAgICAg
ICBvbmUgYWRkcmVzcyBtYXkgYmUgZm91bmQgZm9yIGEgc2luZ2xlIGhvc3QsIHdoaWNoIHdpbGwg
cmVzdWx0IGluCi0gICAgICAgICAgICBhZGRpdGlvbmFsIGhvc3QgaXRlbXMgYmVpbmcgaW5zZXJ0
ZWQgaW50byB0aGUgY2hhaW4uIEhlbmNlIHdlIG11c3QKLSAgICAgICAgICAgIHNhdmUgdGhlIG5l
eHQgaG9zdCBmaXJzdC4gKi8KLQotICAgICAgICAgICAgZmxhZ3MgPSBIT1NUX0ZJTkRfQllfQSB8
IEhPU1RfRklORF9CWV9BQUFBOwotICAgICAgICAgICAgaWYgKHRmLnF1YWxpZnlfc2luZ2xlKSBm
bGFncyB8PSBIT1NUX0ZJTkRfUVVBTElGWV9TSU5HTEU7Ci0gICAgICAgICAgICBpZiAodGYuc2Vh
cmNoX3BhcmVudHMpIGZsYWdzIHw9IEhPU1RfRklORF9TRUFSQ0hfUEFSRU5UUzsKLQotICAgICAg
ICAgICAgZm9yIChob3N0X2l0ZW0gKiBob3N0ID0gaG9zdF9saXN0LCAqIG5leHRob3N0OyBob3N0
OyBob3N0ID0gbmV4dGhvc3QpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmV4dGhv
c3QgPSBob3N0LT5uZXh0OwotICAgICAgICAgICAgICBpZiAodGYuZ2V0aG9zdGJ5bmFtZSB8fAot
ICAgICAgICAgICAgICAgICAgc3RyaW5nX2lzX2lwX2FkZHJlc3MoaG9zdC0+bmFtZSwgTlVMTCkg
IT0gMCkKLSAgICAgICAgICAgICAgICAodm9pZClob3N0X2ZpbmRfYnluYW1lKGhvc3QsIE5VTEws
IGZsYWdzLCBOVUxMLCBUUlVFKTsKLSAgICAgICAgICAgICAgZWxzZQorCSAgaWYgKHRmLmhvc3Rz
ICYmICghaG9zdF9saXN0IHx8IHRmLmhvc3RzX292ZXJyaWRlKSkKKwkgICAgeworCSAgICB1c2No
YXIgKnM7CisJICAgIGNvbnN0IHVzY2hhciAqc2F2ZV9kZWxpdmVyX2RvbWFpbiA9IGRlbGl2ZXJf
ZG9tYWluOworCSAgICB1c2NoYXIgKnNhdmVfZGVsaXZlcl9sb2NhbHBhcnQgPSBkZWxpdmVyX2xv
Y2FscGFydDsKKworCSAgICBob3N0X2xpc3QgPSBOVUxMOyAgICAvKiBJZ25vcmUgdGhlIHJvdXRl
cidzIGhvc3RzICovCisKKwkgICAgZGVsaXZlcl9kb21haW4gPSBhZGRyLT5kb21haW47CisJICAg
IGRlbGl2ZXJfbG9jYWxwYXJ0ID0gYWRkci0+bG9jYWxfcGFydDsKKwkgICAgcyA9IGV4cGFuZF9z
dHJpbmcodGYuaG9zdHMpOworCSAgICBkZWxpdmVyX2RvbWFpbiA9IHNhdmVfZGVsaXZlcl9kb21h
aW47CisJICAgIGRlbGl2ZXJfbG9jYWxwYXJ0ID0gc2F2ZV9kZWxpdmVyX2xvY2FscGFydDsKKwor
CSAgICBpZiAoIXMpCisJICAgICAgeworCSAgICAgIGxvZ193cml0ZSgwLCBMT0dfTUFJTnxMT0df
UEFOSUMsICJmYWlsZWQgdG8gZXhwYW5kIGxpc3Qgb2YgaG9zdHMgIgorCQkiXCIlc1wiIGluICVz
IHRyYW5zcG9ydCBmb3IgY2FsbG91dDogJXMiLCB0Zi5ob3N0cywKKwkJdHAtPm5hbWUsIGV4cGFu
ZF9zdHJpbmdfbWVzc2FnZSk7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCSAgICAg
IGludCBmbGFnczsKKwkgICAgICBob3N0X2J1aWxkX2hvc3RsaXN0KCZob3N0X2xpc3QsIHMsIHRm
Lmhvc3RzX3JhbmRvbWl6ZSk7CisKKwkgICAgICAvKiBKdXN0IGlnbm9yZSBmYWlsdXJlcyB0byBm
aW5kIGEgaG9zdCBhZGRyZXNzLiBJZiB3ZSBkb24ndCBtYW5hZ2UKKwkgICAgICB0byBmaW5kIGFu
eSBhZGRyZXNzZXMsIHRoZSBjYWxsb3V0IHdpbGwgZGVmZXIuIE5vdGUgdGhhdCBtb3JlIHRoYW4K
KwkgICAgICBvbmUgYWRkcmVzcyBtYXkgYmUgZm91bmQgZm9yIGEgc2luZ2xlIGhvc3QsIHdoaWNo
IHdpbGwgcmVzdWx0IGluCisJICAgICAgYWRkaXRpb25hbCBob3N0IGl0ZW1zIGJlaW5nIGluc2Vy
dGVkIGludG8gdGhlIGNoYWluLiBIZW5jZSB3ZSBtdXN0CisJICAgICAgc2F2ZSB0aGUgbmV4dCBo
b3N0IGZpcnN0LiAqLworCisJICAgICAgZmxhZ3MgPSBIT1NUX0ZJTkRfQllfQSB8IEhPU1RfRklO
RF9CWV9BQUFBOworCSAgICAgIGlmICh0Zi5xdWFsaWZ5X3NpbmdsZSkgZmxhZ3MgfD0gSE9TVF9G
SU5EX1FVQUxJRllfU0lOR0xFOworCSAgICAgIGlmICh0Zi5zZWFyY2hfcGFyZW50cykgZmxhZ3Mg
fD0gSE9TVF9GSU5EX1NFQVJDSF9QQVJFTlRTOworCisJICAgICAgZm9yIChob3N0X2l0ZW0gKiBo
b3N0ID0gaG9zdF9saXN0LCAqIG5leHRob3N0OyBob3N0OyBob3N0ID0gbmV4dGhvc3QpCiAJCXsK
LQkJY29uc3QgZG5zc2VjX2RvbWFpbnMgKiBkc3AgPSBOVUxMOwotCQlpZiAoVXN0cmNtcCh0cC0+
ZHJpdmVyX25hbWUsICJzbXRwIikgPT0gMCkKKwkJbmV4dGhvc3QgPSBob3N0LT5uZXh0OworCQlp
ZiAodGYuZ2V0aG9zdGJ5bmFtZSB8fAorCQkgICAgc3RyaW5nX2lzX2lwX2FkZHJlc3MoaG9zdC0+
bmFtZSwgTlVMTCkgIT0gMCkKKwkJICAodm9pZClob3N0X2ZpbmRfYnluYW1lKGhvc3QsIE5VTEws
IGZsYWdzLCBOVUxMLCBUUlVFKTsKKwkJZWxzZQogCQkgIHsKLQkJICBzbXRwX3RyYW5zcG9ydF9v
cHRpb25zX2Jsb2NrICogb2IgPQotCQkgICAgICAoc210cF90cmFuc3BvcnRfb3B0aW9uc19ibG9j
ayAqKSB0cC0+b3B0aW9uc19ibG9jazsKLQkJICBkc3AgPSAmb2ItPmRuc3NlYzsKLQkJICB9CisJ
CSAgY29uc3QgZG5zc2VjX2RvbWFpbnMgKiBkc3AgPSBOVUxMOworCQkgIGlmIChVc3RyY21wKHRw
LT5kcml2ZXJfbmFtZSwgInNtdHAiKSA9PSAwKQorCQkgICAgeworCQkgICAgc210cF90cmFuc3Bv
cnRfb3B0aW9uc19ibG9jayAqIG9iID0KKwkJCShzbXRwX3RyYW5zcG9ydF9vcHRpb25zX2Jsb2Nr
ICopIHRwLT5vcHRpb25zX2Jsb2NrOworCQkgICAgZHNwID0gJm9iLT5kbnNzZWM7CisJCSAgICB9
CiAKLSAgICAgICAgICAgICAgICAodm9pZCkgaG9zdF9maW5kX2J5ZG5zKGhvc3QsIE5VTEwsIGZs
YWdzLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkgIGRzcCwgTlVMTCwgTlVMTCk7CisJCSAgKHZvaWQp
IGhvc3RfZmluZF9ieWRucyhob3N0LCBOVUxMLCBmbGFncywgTlVMTCwgTlVMTCwgTlVMTCwKKwkJ
ICAgIGRzcCwgTlVMTCwgTlVMTCk7CisJCSAgfQogCQl9Ci0gICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgICB9CisJICAgIH0KKwkgIH0K
KwllbHNlIGlmICggIG9wdGlvbnMgJiB2b3B0X3F1b3RhCisJCSYmIFVzdHJjbXAodHAtPmRyaXZl
cl9uYW1lLCAiYXBwZW5kZmlsZSIpID09IDApCisJICBsb2NhbF92ZXJpZnkgPSBUUlVFOwogCiAg
ICAgICAvKiBDYW4gb25seSBkbyBhIGNhbGxvdXQgaWYgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgaG9z
dCEgSWYgdGhlIGNhbGxvdXQKICAgICAgIGZhaWxzLCBpdCB3aWxsIGhhdmUgc2V0ICR7c2VuZGVy
LHJlY2lwaWVudH1fdmVyaWZ5X2ZhaWx1cmUuICovCkBAIC0xOTYzLDEzICsxOTY3LDI1IEBACiAj
aWZuZGVmIERJU0FCTEVfVExTCiAJICBkZWxpdmVyX3NldF9leHBhbnNpb25zKE5VTEwpOwogI2Vu
ZGlmCisJICBpZiAoICBvcHRpb25zICYgdm9wdF9pc19yZWNpcGllbnQKKwkgICAgICYmIHJjID09
IE9LCisJCQkgLyogc2V0IHRvICJyYW5kb20iLCB3aXRoIE9LLCBmb3IgYW4gYWNjZXB0ZWQgcmFu
ZG9tICovCisJICAgICAmJiAhcmVjaXBpZW50X3ZlcmlmeV9mYWlsdXJlCisJICAgICApCisJICAg
IGNhbGxvdXRfdmVyaWZpZWRfcmNwdChhZGRyKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KKyAg
ICAgIGVsc2UgaWYgKGxvY2FsX3ZlcmlmeSkKKwl7CisgICAgICAgIEhERUJVRyhEX3ZlcmlmeSkg
ZGVidWdfcHJpbnRmKCJBdHRlbXB0aW5nIHF1b3RhIHZlcmlmaWNhdGlvblxuIik7CisKKwlkZWxp
dmVyX3NldF9leHBhbnNpb25zKGFkZHIpOworCWRlbGl2ZXJfbG9jYWwoYWRkciwgVFJVRSk7CisJ
cmMgPSBhZGRyLT50cmFuc3BvcnRfcmV0dXJuOworCX0KICAgICAgIGVsc2UKLSAgICAgICAgewog
ICAgICAgICBIREVCVUcoRF92ZXJpZnkpIGRlYnVnX3ByaW50ZigiQ2Fubm90IGRvIGNhbGxvdXQ6
IG5laXRoZXIgcm91dGVyIG5vciAiCiAgICAgICAgICAgInRyYW5zcG9ydCBwcm92aWRlZCBhIGhv
c3QgbGlzdCwgb3IgdHJhbnNwb3J0IGlzIG5vdCBzbXRwXG4iKTsKLSAgICAgICAgfQogICAgICAg
fQogICAgIH0KIApAQCAtMjE1OCwxMCArMjE3NCw2IEBACiAgICAgYWRkcl9saXN0ID0gYWRkci0+
bmV4dDsKIAogICAgIGZwcmludGYoZnAsICIlcyIsIENTIGFkZHItPmFkZHJlc3MpOwotI2lmZGVm
IEVYUEVSSU1FTlRBTF9TUlMKLSAgICBpZihhZGRyLT5wcm9wLnNyc19zZW5kZXIpCi0gICAgICBm
cHJpbnRmKGZwLCAiICAgIFtzcnMgPSAlc10iLCBhZGRyLT5wcm9wLnNyc19zZW5kZXIpOwotI2Vu
ZGlmCiAKICAgICAvKiBJZiB0aGUgYWRkcmVzcyBpcyBhIGR1cGxpY2F0ZSwgc2hvdyBzb21ldGhp
bmcgYWJvdXQgaXQuICovCiAKQEAgLTI4ODQsMjggKzI4OTYsMjcgQEAKICovCiAKIGludAotY2hl
Y2tfaG9zdCh2b2lkICphcmcsIGNvbnN0IHVzY2hhciAqc3MsIGNvbnN0IHVzY2hhciAqKnZhbHVl
cHRyLCB1c2NoYXIgKiplcnJvcikKK2NoZWNrX2hvc3Qodm9pZCAqIGFyZywgY29uc3QgdXNjaGFy
ICogc3MsIGNvbnN0IHVzY2hhciAqKiB2YWx1ZXB0ciwgdXNjaGFyICoqIGVycm9yKQogewotY2hl
Y2tfaG9zdF9ibG9jayAqY2IgPSAoY2hlY2tfaG9zdF9ibG9jayAqKWFyZzsKK2NoZWNrX2hvc3Rf
YmxvY2sgKiBjYiA9IChjaGVja19ob3N0X2Jsb2NrICopYXJnOwogaW50IG1sZW4gPSAtMTsKIGlu
dCBtYXNrb2Zmc2V0OwotQk9PTCBpcGxvb2t1cCA9IEZBTFNFOwotQk9PTCBpc3F1ZXJ5ID0gRkFM
U0U7Ci1CT09MIGlzaXBvbmx5ID0gY2ItPmhvc3RfbmFtZSAhPSBOVUxMICYmIGNiLT5ob3N0X25h
bWVbMF0gPT0gMDsKLWNvbnN0IHVzY2hhciAqdDsKK0JPT0wgaXBsb29rdXAgPSBGQUxTRSwgaXNx
dWVyeSA9IEZBTFNFOworQk9PTCBpc2lwb25seSA9IGNiLT5ob3N0X25hbWUgJiYgIWNiLT5ob3N0
X25hbWVbMF07Citjb25zdCB1c2NoYXIgKiB0OwogdXNjaGFyICogc2VtaWNvbG9uLCAqIGVuZG5h
bWUsICogb3B0czsKLXVzY2hhciAqKmFsaWFzZXM7Cit1c2NoYXIgKiogYWxpYXNlczsKIAogLyog
T3B0aW1pemUgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlbiB0aGUgcGF0dGVybiBpcyAiKiIuICov
CiAKLWlmICgqc3MgPT0gJyonICYmIHNzWzFdID09IDApIHJldHVybiBPSzsKK2lmICgqc3MgPT0g
JyonICYmICFzc1sxXSkgcmV0dXJuIE9LOwogCiAvKiBJZiB0aGUgcGF0dGVybiBpcyBlbXB0eSwg
aXQgbWF0Y2hlcyBvbmx5IGluIHRoZSBjYXNlIHdoZW4gdGhlcmUgaXMgbm8gaG9zdCAtCiB0aGlz
IGNhbiBvY2N1ciBpbiBBQ0wgY2hlY2tpbmcgZm9yIFNNVFAgaW5wdXQgdXNpbmcgdGhlIC1icyBv
cHRpb24uIEluIHRoaXMKIHNpdHVhdGlvbiwgdGhlIGhvc3QgYWRkcmVzcyBpcyB0aGUgZW1wdHkg
c3RyaW5nLiAqLwogCi1pZiAoY2ItPmhvc3RfYWRkcmVzc1swXSA9PSAwKSByZXR1cm4gKCpzcyA9
PSAwKT8gT0sgOiBGQUlMOwotaWYgKCpzcyA9PSAwKSByZXR1cm4gRkFJTDsKK2lmICghY2ItPmhv
c3RfYWRkcmVzc1swXSkgcmV0dXJuICpzcyA/IEZBSUwgOiBPSzsKK2lmICghKnNzKSByZXR1cm4g
RkFJTDsKIAogLyogSWYgdGhlIHBhdHRlcm4gaXMgcHJlY2lzZWx5ICJAIiB0aGVuIG1hdGNoIGFn
YWluc3QgdGhlIHByaW1hcnkgaG9zdCBuYW1lLAogcHJvdmlkZWQgdGhhdCBob3N0IG5hbWUgbWF0
Y2hpbmcgaXMgcGVybWl0dGVkOyBpZiBpdCdzICJAW10iIG1hdGNoIGFnYWluc3QgdGhlCkBAIC0y
OTQyLDcgKzI5NTMsNyBAQAogZG90cykuICovCiAKIGZvciAodCA9IHNzOyBpc2RpZ2l0KCp0KSB8
fCAqdCA9PSAnLic7ICkgdCsrOwotaWYgKCp0ID09IDAgfHwgKCp0ID09ICcvJyAmJiB0ICE9IHNz
KSkKK2lmICghKnQgIHx8ICgqdCA9PSAnLycgJiYgdCAhPSBzcykpCiAgIHsKICAgKmVycm9yID0g
VVMibWFsZm9ybWVkIElQdjQgYWRkcmVzcyBvciBhZGRyZXNzIG1hc2siOwogICByZXR1cm4gRVJS
T1I7CkBAIC0zMzU0LDU3MyArMzM2NSwyNDYgQEAKIAogCiAKLS8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgICAgICAgIFBlcmZvcm0gYSBzaW5n
bGUgZG5zYmwgbG9va3VwICAgICAgICAgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB2
ZXJpZnlfY2hlY2tfZG5zYmwoKSBiZWxvdy4gSXQgaXMgYWxzbyBjYWxsZWQKLXJlY3Vyc2l2ZWx5
IGZyb20gd2l0aGluIGl0c2VsZiB3aGVuIGRvbWFpbiBhbmQgZG9tYWluX3R4dCBhcmUgZGlmZmVy
ZW50Ci1wb2ludGVycywgaW4gb3JkZXIgdG8gZ2V0IHRoZSBUWFQgcmVjb3JkIGZyb20gdGhlIGFs
dGVybmF0ZSBkb21haW4uCi0KLUFyZ3VtZW50czoKLSAgZG9tYWluICAgICAgICAgdGhlIG91dGVy
IGRuc2JsIGRvbWFpbgotICBkb21haW5fdHh0ICAgICBhbHRlcm5hdGUgZG9tYWluIHRvIGxvb2t1
cCBUWFQgcmVjb3JkIG9uIHN1Y2Nlc3M7IHdoZW4gdGhlCi0gICAgICAgICAgICAgICAgICAgc2Ft
ZSBkb21haW4gaXMgdG8gYmUgdXNlZCwgZG9tYWluX3R4dCA9PSBkb21haW4gKHRoYXQgaXMsCi0g
ICAgICAgICAgICAgICAgICAgdGhlIHBvaW50ZXJzIG11c3QgYmUgaWRlbnRpY2FsLCBub3QganVz
dCB0aGUgdGV4dCkKLSAga2V5ZG9tYWluICAgICAgdGhlIGN1cnJlbnQga2V5ZG9tYWluIChmb3Ig
ZGVidWcgbWVzc2FnZSkKLSAgcHJlcGVuZCAgICAgICAgc3ViZG9tYWluIHRvIGxvb2t1cCAobGlr
ZSBrZXlkb21haW4sIGJ1dAotICAgICAgICAgICAgICAgICAgIHJldmVyc2VkIGlmIElQIGFkZHJl
c3MpCi0gIGlwbGlzdCAgICAgICAgIHRoZSBsaXN0IG9mIG1hdGNoaW5nIElQIGFkZHJlc3Nlcywg
b3IgTlVMTCBmb3IgImFueSIKLSAgYml0bWFzayAgICAgICAgdHJ1ZSBpZiBiaXRtYXNrIG1hdGNo
aW5nIGlzIHdhbnRlZAotICBtYXRjaF90eXBlICAgICBjb25kaXRpb24gZm9yICdzdWNjZWVkJyBy
ZXN1bHQKLSAgICAgICAgICAgICAgICAgICAwID0+IEFueSBSUiBpbiBpcGxpc3QgICAgICg9KQot
ICAgICAgICAgICAgICAgICAgIDEgPT4gTm8gUlIgaW4gaXBsaXN0ICAgICAgKCE9KQotICAgICAg
ICAgICAgICAgICAgIDIgPT4gQWxsIFJScyBpbiBpcGxpc3QgICAgKD09KQotICAgICAgICAgICAg
ICAgICAgIDMgPT4gU29tZSBSUnMgbm90IGluIGlwbGlzdCAoIT09KQotICAgICAgICAgICAgICAg
ICAgIHRoZSB0d28gYml0cyBhcmUgZGVmaW5lZCBhcyBNVF9OT1QgYW5kIE1UX0FMTAotICBkZWZl
cl9yZXR1cm4gICB3aGF0IHRvIHJldHVybiBmb3IgYSBkZWZlcgotCi1SZXR1cm5zOiAgICAgICAg
IE9LIGlmIGxvb2t1cCBzdWNjZWVkZWQKLSAgICAgICAgICAgICAgICAgRkFJTCBpZiBub3QKKy8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFZl
cmlmeSBhIGxvY2FsIHVzZXIgYWNjb3VudCBmb3IgcXVvdGEgc3VmZmljaWVuY3kKKyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBy
ZWFsIHdvcmssIGRvbmUgdmlhIGEgcmUtZXhlYyBmb3IgcHJpdnMsIGNhbGxzCitkb3duIHRvIHRo
ZSB0cmFuc3BvcnQgZm9yIHRoZSBxdW90YSBjaGVjay4KKworUm91dGUgYW5kIHRyYW5zcG9ydCAo
aW4gcmVjaXBpZW50LXZlcmlmeSBtb2RlKSB0aGUKK2dpdmVuIHJlY2lwaWVudC4gCisKK0Egcm91
dGluZyByZXN1bHQgaW5kaWNhdGluZyBhbnkgdHJhbnNwb3J0IHR5cGUgb3RoZXIgdGhhbiBhcHBl
bmRmaWxlCityZXN1bHRzIGluIGEgZmFpbC4KKworUmV0dXJuLCBvbiBzdGRvdXQsIGEgcmVzdWx0
IHN0cmluZyBjb250YWluaW5nOgorLSBoaWdobGV2ZWwgcmVzdWx0IGNvZGUgKE9LLCBERUZFUiwg
RkFJTCkKKy0gZXJybm8KKy0gd2hlcmUgc3RyaW5nCistIG1lc3NhZ2Ugc3RyaW5nCiAqLwogCi1z
dGF0aWMgaW50Ci1vbmVfY2hlY2tfZG5zYmwodXNjaGFyICpkb21haW4sIHVzY2hhciAqZG9tYWlu
X3R4dCwgdXNjaGFyICprZXlkb21haW4sCi0gIHVzY2hhciAqcHJlcGVuZCwgdXNjaGFyICppcGxp
c3QsIEJPT0wgYml0bWFzaywgaW50IG1hdGNoX3R5cGUsCi0gIGludCBkZWZlcl9yZXR1cm4pCit2
b2lkCit2ZXJpZnlfcXVvdGEodXNjaGFyICogYWRkcmVzcykKIHsKLWRuc19hbnN3ZXIgKiBkbnNh
ID0gc3RvcmVfZ2V0X2Ruc19hbnN3ZXIoKTsKLWRuc19zY2FuIGRuc3M7Ci10cmVlX25vZGUgKnQ7
Ci1kbnNibF9jYWNoZV9ibG9jayAqY2I7Ci1pbnQgb2xkX3Bvb2wgPSBzdG9yZV9wb29sOwotdXNj
aGFyICogcXVlcnk7Ci1pbnQgcWxlbjsKLQotLyogQ29uc3RydWN0IHRoZSBzcGVjaWZpYyBxdWVy
eSBkb21haW5uYW1lICovCi0KLXF1ZXJ5ID0gc3RyaW5nX3NwcmludGYoIiVzLiVzIiwgcHJlcGVu
ZCwgZG9tYWluKTsKLWlmICgocWxlbiA9IFVzdHJsZW4ocXVlcnkpKSA+PSAyNTYpCi0gIHsKLSAg
bG9nX3dyaXRlKDAsIExPR19NQUlOfExPR19QQU5JQywgImRuc2xpc3QgcXVlcnkgaXMgdG9vIGxv
bmcgIgotICAgICIoaWdub3JlZCk6ICVzLi4uIiwgcXVlcnkpOwotICByZXR1cm4gRkFJTDsKLSAg
fQorYWRkcmVzc19pdGVtIHZhZGRyID0gey5hZGRyZXNzID0gYWRkcmVzc307CitCT09MIHJvdXRl
ZDsKK3VzY2hhciAqIG1zZyA9IFVTIlwwIjsKK2ludCByYywgbGVuID0gMTsKIAotLyogTG9vayBm
b3IgdGhpcyBxdWVyeSBpbiB0aGUgY2FjaGUuICovCi0KLWlmICggICh0ID0gdHJlZV9zZWFyY2go
ZG5zYmxfY2FjaGUsIHF1ZXJ5KSkKLSAgICYmIChjYiA9IHQtPmRhdGEucHRyKS0+ZXhwaXJ5ID4g
dGltZShOVUxMKQotICAgKQotCi0vKiBQcmV2aW91cyBsb29rdXAgd2FzIGNhY2hlZCAqLwotCi0g
IHsKLSAgSERFQlVHKERfZG5zYmwpIGRlYnVnX3ByaW50ZigiZG5zbGlzdHM6IHVzaW5nIHJlc3Vs
dCBvZiBwcmV2aW91cyBsb29rdXBcbiIpOwotICB9Ci0KLS8qIElmIG5vdCBjYWNoZWQgZnJvbSBh
IHByZXZpb3VzIGxvb2t1cCwgd2UgbXVzdCBkbyBhIEROUyBsb29rdXAsIGFuZAotY2FjaGUgdGhl
IHJlc3VsdCBpbiBwZXJtYW5lbnQgbWVtb3J5LiAqLwotCi1lbHNlCitpZiAoKHJjID0gdmVyaWZ5
X2FkZHJlc3MoJnZhZGRyLCBOVUxMLCB2b3B0X2lzX3JlY2lwaWVudCB8IHZvcHRfcXVvdGEsCisg
ICAgMSwgMCwgMCwgTlVMTCwgTlVMTCwgJnJvdXRlZCkpICE9IE9LKQogICB7Ci0gIHVpbnQgdHRs
ID0gMzYwMDsJLyogbWF4IFRUTCBmb3IgcG9zaXRpdmUgY2FjaGUgZW50cmllcyAqLwotCi0gIHN0
b3JlX3Bvb2wgPSBQT09MX1BFUk07Ci0KLSAgaWYgKHQpCisgIHVzY2hhciAqIHdoZXJlID0gcmVj
aXBpZW50X3ZlcmlmeV9mYWlsdXJlOworICBtc2cgPSBhY2xfdmVyaWZ5X21lc3NhZ2UgPyBhY2xf
dmVyaWZ5X21lc3NhZ2UgOiB2YWRkci5tZXNzYWdlOworICBpZiAoIW1zZykgbXNnID0gVVMiIjsK
KyAgaWYgKHJjID09IERFRkVSICYmIHZhZGRyLmJhc2ljX2Vycm5vID09IEVSUk5PX0VYSU1RVU9U
QSkKICAgICB7Ci0gICAgSERFQlVHKERfZG5zYmwpIGRlYnVnX3ByaW50ZigiY2FjaGVkIGRhdGEg
Zm91bmQgYnV0IHBhc3QgdmFsaWQgdGltZTsgIik7Ci0gICAgfQotCi0gIGVsc2UKLSAgICB7CS8q
IFNldCB1cCBhIHRyZWUgZW50cnkgdG8gY2FjaGUgdGhlIGxvb2t1cCAqLwotICAgIHQgPSBzdG9y
ZV9nZXQoc2l6ZW9mKHRyZWVfbm9kZSkgKyBxbGVuICsgMSArIDEsIGlzX3RhaW50ZWQocXVlcnkp
KTsKLSAgICBVc3RyY3B5KHQtPm5hbWUsIHF1ZXJ5KTsKLSAgICB0LT5kYXRhLnB0ciA9IGNiID0g
c3RvcmVfZ2V0KHNpemVvZihkbnNibF9jYWNoZV9ibG9jayksIEZBTFNFKTsKLSAgICAodm9pZCl0
cmVlX2luc2VydG5vZGUoJmRuc2JsX2NhY2hlLCB0KTsKLSAgICB9Ci0KLSAgLyogRG8gdGhlIERO
UyBsb29rdXAgLiAqLwotCi0gIEhERUJVRyhEX2Ruc2JsKSBkZWJ1Z19wcmludGYoIm5ldyBETlMg
bG9va3VwIGZvciAlc1xuIiwgcXVlcnkpOwotICBjYi0+cmMgPSBkbnNfYmFzaWNfbG9va3VwKGRu
c2EsIHF1ZXJ5LCBUX0EpOwotICBjYi0+dGV4dF9zZXQgPSBGQUxTRTsKLSAgY2ItPnRleHQgPSBO
VUxMOwotICBjYi0+cmhzID0gTlVMTDsKLQotICAvKiBJZiB0aGUgbG9va3VwIHN1Y2NlZWRlZCwg
Y2FjaGUgdGhlIFJIUyBhZGRyZXNzLiBUaGUgY29kZSBhbGxvd3MgZm9yCi0gIG1vcmUgdGhhbiBv
bmUgYWRkcmVzcyAtIHRoaXMgd2FzIGZvciBjb21wbGV0ZSBnZW5lcmFsaXR5IGFuZCB0aGUgcG9z
c2libGUKLSAgdXNlIG9mIEE2IHJlY29yZHMuIEhvd2V2ZXIsIEE2IHJlY29yZHMgYXJlIG5vIGxv
bmdlciBzdXBwb3J0ZWQuIExlYXZlIHRoZSBjb2RlCi0gIGhlcmUsIGp1c3QgaW4gY2FzZS4KLQot
ICBRdWl0ZSBhcGFydCBmcm9tIG9uZSBBNiBSUiBnZW5lcmF0aW5nIG11bHRpcGxlIGFkZHJlc3Nl
cywgdGhlcmUgYXJlIEROUwotICBsaXN0cyB0aGF0IHJldHVybiBtb3JlIHRoYW4gb25lIEEgcmVj
b3JkLCBzbyB3ZSBtdXN0IGhhbmRsZSBtdWx0aXBsZQotICBhZGRyZXNzZXMgZ2VuZXJhdGVkIGlu
IHRoYXQgd2F5IGFzIHdlbGwuCi0KLSAgTWFyayB0aGUgY2FjaGUgZW50cnkgd2l0aCB0aGUgIm5v
dyIgcGx1cyB0aGUgbWluaW11bSBvZiB0aGUgYWRkcmVzcyBUVExzLAotICBvciB0aGUgUkZDIDIz
MDggbmVnYXRpdmUtY2FjaGUgdmFsdWUgZnJvbSB0aGUgU09BIGlmIG5vbmUgd2VyZSBmb3VuZC4g
Ki8KLQotICBzd2l0Y2ggKGNiLT5yYykKLSAgICB7Ci0gICAgY2FzZSBETlNfU1VDQ0VFRDoKLSAg
ICAgIHsKLSAgICAgIGRuc19hZGRyZXNzICoqIGFkZHJwID0gJmNiLT5yaHM7Ci0gICAgICBkbnNf
YWRkcmVzcyAqIGRhOwotICAgICAgZm9yIChkbnNfcmVjb3JkICogcnIgPSBkbnNfbmV4dF9ycihk
bnNhLCAmZG5zcywgUkVTRVRfQU5TV0VSUyk7IHJyOwotCSAgIHJyID0gZG5zX25leHRfcnIoZG5z
YSwgJmRuc3MsIFJFU0VUX05FWFQpKQotCWlmIChyci0+dHlwZSA9PSBUX0EgJiYgKGRhID0gZG5z
X2FkZHJlc3NfZnJvbV9ycihkbnNhLCBycikpKQotCSAgewotCSAgKmFkZHJwID0gZGE7Ci0JICB3
aGlsZSAoZGEtPm5leHQpIGRhID0gZGEtPm5leHQ7Ci0JICBhZGRycCA9ICZkYS0+bmV4dDsKLQkg
IGlmICh0dGwgPiByci0+dHRsKSB0dGwgPSByci0+dHRsOwotCSAgfQotCi0gICAgICBpZiAoY2It
PnJocykKLQl7Ci0JY2ItPmV4cGlyeSA9IHRpbWUoTlVMTCkgKyB0dGw7Ci0JYnJlYWs7Ci0JfQot
Ci0gICAgICAvKiBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgQSByZWNvcmRzLCBjaGFuZ2UgdGhlIHJl
dHVybiBjb2RlLiBUaGlzIGNhbgotICAgICAgaGFwcGVuIHdoZW4gdGhlcmUgaXMgYSBDTkFNRSBy
ZWNvcmQgYnV0IHRoZXJlIGFyZSBubyBBIHJlY29yZHMgZm9yIHdoYXQKLSAgICAgIGl0IHBvaW50
cyB0by4gKi8KLQotICAgICAgY2ItPnJjID0gRE5TX05PREFUQTsKLSAgICAgIH0KLSAgICAgIC8q
RkFMTFRIUk9VR0gqLwotCi0gICAgY2FzZSBETlNfTk9NQVRDSDoKLSAgICBjYXNlIEROU19OT0RB
VEE6Ci0gICAgICB7Ci0gICAgICAvKiBBbHRob3VnaCB0aGVyZSBhbHJlYWR5IGlzIGEgbmVnLWNh
Y2hlIGxheWVyIG1haW50YWluZWQgYnkKLSAgICAgIGRuc19iYXNpY19sb29rdXAoKSwgd2UgaGF2
ZSBhIGRuc2xpc3QgY2FjaGUgZW50cnkgYWxsb2NhdGVkIGFuZAotICAgICAgdHJlZS1pbnNlcnRl
ZC4gU28gd2UgbWF5IGFzIHdlbGwgdXNlIGl0LiAqLwotCi0gICAgICB0aW1lX3Qgc29hX25lZ3R0
bCA9IGRuc19leHBpcmVfZnJvbV9zb2EoZG5zYSwgVF9BKTsKLSAgICAgIGNiLT5leHBpcnkgPSBz
b2FfbmVndHRsID8gc29hX25lZ3R0bCA6IHRpbWUoTlVMTCkgKyB0dGw7Ci0gICAgICBicmVhazsK
LSAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICBjYi0+ZXhwaXJ5ID0gdGltZShOVUxMKSAr
IHR0bDsKLSAgICAgIGJyZWFrOworICAgIHJjID0gRkFJTDsJCQkJCS8qIERFRkVSIC0+IEZBSUwg
Ki8KKyAgICB3aGVyZSA9IFVTInF1b3RhIjsKKyAgICB2YWRkci5iYXNpY19lcnJubyA9IDA7CiAg
ICAgfQorICBlbHNlIGlmICghd2hlcmUpIHdoZXJlID0gVVMiIjsKIAotICBzdG9yZV9wb29sID0g
b2xkX3Bvb2w7Ci0gIEhERUJVRyhEX2Ruc2JsKSBkZWJ1Z19wcmludGYoImRuc2xpc3RzOiB3cm90
ZSBjYWNoZSBlbnRyeSwgdHRsPSVkXG4iLAotICAgIChpbnQpKGNiLT5leHBpcnkgLSB0aW1lKE5V
TEwpKSk7CisgIGxlbiA9IDUgKyBVc3RybGVuKG1zZykgKyAxICsgVXN0cmxlbih3aGVyZSk7Cisg
IG1zZyA9IHN0cmluZ19zcHJpbnRmKCIlYyVjJWMlYyVjJXMlYyVzIiwgKHVzY2hhcilyYywKKyAg
ICAodmFkZHIuYmFzaWNfZXJybm8gPj4gMjQpICYgMHhmZiwgKHZhZGRyLmJhc2ljX2Vycm5vID4+
IDE2KSAmIDB4ZmYsCisgICAgKHZhZGRyLmJhc2ljX2Vycm5vID4+IDgpICYgMHhmZiwgdmFkZHIu
YmFzaWNfZXJybm8gJiAweGZmLAorICAgIHdoZXJlLCAnXDAnLCBtc2cpOwogICB9CiAKLS8qIFdl
IG5vdyBoYXZlIHRoZSByZXN1bHQgb2YgdGhlIEROUyBsb29rdXAsIGVpdGhlciBuZXdseSBkb25l
LCBvciBjYWNoZWQKLWZyb20gYSBwcmV2aW91cyBjYWxsLiBJZiB0aGUgbG9va3VwIHN1Y2NlZWRl
ZCwgY2hlY2sgYWdhaW5zdCB0aGUgYWRkcmVzcwotbGlzdCBpZiB0aGVyZSBpcyBvbmUuIFRoaXMg
bWF5IGJlIGEgcG9zaXRpdmUgZXF1YWxpdHkgbGlzdCAoaW50cm9kdWNlZCBieQotIj0iKSwgYSBu
ZWdhdGl2ZSBlcXVhbGl0eSBsaXN0IChpbnRyb2R1Y2VkIGJ5ICIhPSIpLCBhIHBvc2l0aXZlIGJp
dG1hc2sKLWxpc3QgKGludHJvZHVjZWQgYnkgIiYiKSwgb3IgYSBuZWdhdGl2ZSBiaXRtYXNrIGxp
c3QgKGludHJvZHVjZWQgYnkgIiEmIikuKi8KLQotaWYgKGNiLT5yYyA9PSBETlNfU1VDQ0VFRCkK
LSAgewotICBkbnNfYWRkcmVzcyAqIGRhID0gTlVMTDsKLSAgdXNjaGFyICphZGRsaXN0ID0gY2It
PnJocy0+YWRkcmVzczsKLQotICAvKiBGb3IgQSBhbmQgQUFBQSByZWNvcmRzLCB0aGVyZSBtYXkg
YmUgbXVsdGlwbGUgYWRkcmVzc2VzIGZyb20gbXVsdGlwbGUKLSAgcmVjb3Jkcy4gRm9yIEE2IHJl
Y29yZHMgKGN1cnJlbnRseSBub3QgZXhwZWN0ZWQgdG8gYmUgdXNlZCkgdGhlcmUgbWF5IGJlCi0g
IG11bHRpcGxlIGFkZHJlc3NlcyBmcm9tIGEgc2luZ2xlIHJlY29yZC4gKi8KLQotICBmb3IgKGRh
ID0gY2ItPnJocy0+bmV4dDsgZGE7IGRhID0gZGEtPm5leHQpCi0gICAgYWRkbGlzdCA9IHN0cmlu
Z19zcHJpbnRmKCIlcywgJXMiLCBhZGRsaXN0LCBkYS0+YWRkcmVzcyk7Ci0KLSAgSERFQlVHKERf
ZG5zYmwpIGRlYnVnX3ByaW50ZigiRE5TIGxvb2t1cCBmb3IgJXMgc3VjY2VlZGVkICh5aWVsZGlu
ZyAlcylcbiIsCi0gICAgcXVlcnksIGFkZGxpc3QpOwotCi0gIC8qIEFkZHJlc3MgbGlzdCBjaGVj
azsgdGhpcyBjYW4gYmUgZWl0aGVyIGZvciBlcXVhbGl0eSwgb3IgdmlhIGEgYml0bWFzay4KLSAg
SW4gdGhlIGxhdHRlciBjYXNlLCBhbGwgdGhlIGJpdHMgbXVzdCBtYXRjaC4gKi8KLQotICBpZiAo
aXBsaXN0KQotICAgIHsKLSAgICBmb3IgKGRhID0gY2ItPnJoczsgZGE7IGRhID0gZGEtPm5leHQp
Ci0gICAgICB7Ci0gICAgICBpbnQgaXBzZXAgPSAnLCc7Ci0gICAgICBjb25zdCB1c2NoYXIgKnB0
ciA9IGlwbGlzdDsKLSAgICAgIHVzY2hhciAqcmVzOwotCi0gICAgICAvKiBIYW5kbGUgZXhhY3Qg
bWF0Y2hpbmcgKi8KLQotICAgICAgaWYgKCFiaXRtYXNrKQotCXsKLSAgICAgICAgd2hpbGUgKChy
ZXMgPSBzdHJpbmdfbmV4dGlubGlzdCgmcHRyLCAmaXBzZXAsIE5VTEwsIDApKSkKLSAgICAgICAg
ICBpZiAoVXN0cmNtcChDUyBkYS0+YWRkcmVzcywgcmVzKSA9PSAwKQotCSAgICBicmVhazsKLQl9
Ci0KLSAgICAgIC8qIEhhbmRsZSBiaXRtYXNrIG1hdGNoaW5nICovCi0KLSAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICBpbnQgYWRkcmVzc1s0XTsKLSAgICAgICAgaW50IG1hc2sgPSAwOwot
Ci0gICAgICAgIC8qIEF0IHByZXNlbnQsIGFsbCBrbm93biBETlMgYmxvY2tpbmcgbGlzdHMgdXNl
IEEgcmVjb3Jkcywgd2l0aAotICAgICAgICBJUHY0IGFkZHJlc3NlcyBvbiB0aGUgUkhTIGVuY29k
aW5nIHRoZSBpbmZvcm1hdGlvbiB0aGV5IHJldHVybi4gSQotICAgICAgICB3b25kZXIgaWYgdGhp
cyB3aWxsIGxpbmdlciBvbiBhcyB0aGUgbGFzdCB2ZXN0aWdlIG9mIElQdjQgd2hlbiBJUHY2Ci0g
ICAgICAgIGlzIHViaXF1aXRvdXM/IEFueXdheSwgZm9yIG5vdyB3ZSB1c2UgcGFyYW5vaWEgY29k
ZSB0byBjb21wbGV0ZWx5Ci0gICAgICAgIGlnbm9yZSBJUHY2IGFkZHJlc3Nlcy4gVGhlIGRlZmF1
bHQgbWFzayBpcyAwLCB3aGljaCBhbHdheXMgbWF0Y2hlcy4KLSAgICAgICAgV2UgY2hhbmdlIHRo
aXMgb25seSBmb3IgSVB2NCBhZGRyZXNzZXMgaW4gdGhlIGxpc3QuICovCi0KLSAgICAgICAgaWYg
KGhvc3RfYXRvbihkYS0+YWRkcmVzcywgYWRkcmVzcykgPT0gMSkgbWFzayA9IGFkZHJlc3NbMF07
Ci0KLSAgICAgICAgLyogU2NhbiB0aGUgcmV0dXJuZWQgYWRkcmVzc2VzLCBza2lwcGluZyBhbnkg
dGhhdCBhcmUgSVB2NiAqLwotCi0gICAgICAgIHdoaWxlICgocmVzID0gc3RyaW5nX25leHRpbmxp
c3QoJnB0ciwgJmlwc2VwLCBOVUxMLCAwKSkpCi0gICAgICAgICAgewotICAgICAgICAgIGlmICho
b3N0X2F0b24ocmVzLCBhZGRyZXNzKSAhPSAxKSBjb250aW51ZTsKLSAgICAgICAgICBpZiAoKGFk
ZHJlc3NbMF0gJiBtYXNrKSA9PSBhZGRyZXNzWzBdKSBicmVhazsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgLyogSWYgZWl0aGVyCi0KLSAgICAgICAgIChhKSBBbiBJUCBhZGRyZXNz
IGluIGFuIGFueSAoJz0nKSBsaXN0IG1hdGNoZWQsIG9yCi0gICAgICAgICAoYikgTm8gSVAgYWRk
cmVzcyBpbiBhbiBhbGwgKCc9PScpIGxpc3QgbWF0Y2hlZAotCi0gICAgICB0aGVuIHdlJ3JlIGRv
bmUgc2VhcmNoaW5nLiAqLwotCi0gICAgICBpZiAoKChtYXRjaF90eXBlICYgTVRfQUxMKSAhPSAw
KSA9PSAocmVzID09IE5VTEwpKSBicmVhazsKLSAgICAgIH0KLQotICAgIC8qIElmIGRhID09IE5V
TEwsIGVpdGhlcgorREVCVUcoRF92ZXJpZnkpIGRlYnVnX3ByaW50Zl9pbmRlbnQoInZlcmlmeV9x
dW90YTogbGVuICVkXG4iLCBsZW4pOword3JpdGUoMSwgbXNnLCBsZW4pOworcmV0dXJuOworfQog
Ci0gICAgICAgKGEpIE5vIElQIGFkZHJlc3MgaW4gYW4gYW55ICgnPScpIGxpc3QgbWF0Y2hlZCwg
b3IKLSAgICAgICAoYikgQW4gSVAgYWRkcmVzcyBpbiBhbiBhbGwgKCc9PScpIGxpc3QgZGlkbid0
IG1hdGNoCiAKLSAgICBzbyBiZWhhdmUgYXMgaWYgdGhlIEROU0JMIGxvb2t1cCBoYWQgbm90IHN1
Y2NlZWRlZCwgaS5lLiB0aGUgaG9zdCBpcyBub3Qgb24KLSAgICB0aGUgbGlzdC4gKi8KKy8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCiAKLSAgICBpZiAoKG1hdGNoX3R5cGUgPT0gTVRfTk9UIHx8IG1h
dGNoX3R5cGUgPT0gTVRfQUxMKSAhPSAoZGEgPT0gTlVMTCkpCi0gICAgICB7Ci0gICAgICBIREVC
VUcoRF9kbnNibCkKLSAgICAgICAgewotICAgICAgICB1c2NoYXIgKnJlcyA9IE5VTEw7Ci0gICAg
ICAgIHN3aXRjaChtYXRjaF90eXBlKQotICAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIDA6Ci0J
ICAgIHJlcyA9IFVTIndhcyBubyBtYXRjaCI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgTVRfTk9U
OgotCSAgICByZXMgPSBVUyJ3YXMgYW4gZXhjbHVkZSBtYXRjaCI7IGJyZWFrOwotICAgICAgICAg
IGNhc2UgTVRfQUxMOgotCSAgICByZXMgPSBVUyJ3YXMgYW4gSVAgYWRkcmVzcyB0aGF0IGRpZCBu
b3QgbWF0Y2giOyBicmVhazsKLSAgICAgICAgICBjYXNlIE1UX05PVHxNVF9BTEw6Ci0JICAgIHJl
cyA9IFVTIndlcmUgbm8gSVAgYWRkcmVzc2VzIHRoYXQgZGlkIG5vdCBtYXRjaCI7IGJyZWFrOwot
ICAgICAgICAgIH0KLSAgICAgICAgZGVidWdfcHJpbnRmKCI9PiBidXQgd2UgYXJlIG5vdCBhY2Nl
cHRpbmcgdGhpcyBibG9jayBjbGFzcyBiZWNhdXNlXG4iKTsKLSAgICAgICAgZGVidWdfcHJpbnRm
KCI9PiB0aGVyZSAlcyBmb3IgJXMlYyVzXG4iLAotICAgICAgICAgIHJlcywKLSAgICAgICAgICAo
KG1hdGNoX3R5cGUgJiBNVF9BTEwpID09IDApPyAiIiA6ICI9IiwKLSAgICAgICAgICBiaXRtYXNr
PyAnJicgOiAnPScsIGlwbGlzdCk7Ci0gICAgICAgIH0KLSAgICAgIHJldHVybiBGQUlMOwotICAg
ICAgfQotICAgIH0KLQotICAvKiBFaXRoZXIgdGhlcmUgd2FzIG5vIElQIGxpc3QsIG9yIHRoZSBy
ZWNvcmQgbWF0Y2hlZCwgaW1wbHlpbmcgdGhhdCB0aGUKLSAgZG9tYWluIGlzIG9uIHRoZSBsaXN0
LiBXZSBub3cgd2FudCB0byBmaW5kIGEgY29ycmVzcG9uZGluZyBUWFQgcmVjb3JkLiBJZiBhbgot
ICBhbHRlcm5hdGUgZG9tYWluIGlzIHNwZWNpZmllZCBmb3IgdGhlIFRYVCByZWNvcmQsIGNhbGwg
dGhpcyBmdW5jdGlvbgotICByZWN1cnNpdmVseSB0byBsb29rIHRoYXQgdXA7IHRoaXMgaGFzIHRo
ZSBzaWRlIGVmZmVjdCBvZiByZS1jaGVja2luZyB0aGF0Ci0gIHRoZXJlIGlzIGluZGVlZCBhbiBB
IHJlY29yZCBhdCB0aGUgYWx0ZXJuYXRlIGRvbWFpbi4gKi8KLQotICBpZiAoZG9tYWluX3R4dCAh
PSBkb21haW4pCi0gICAgcmV0dXJuIG9uZV9jaGVja19kbnNibChkb21haW5fdHh0LCBkb21haW5f
dHh0LCBrZXlkb21haW4sIHByZXBlbmQsIE5VTEwsCi0gICAgICBGQUxTRSwgbWF0Y2hfdHlwZSwg
ZGVmZXJfcmV0dXJuKTsKLQotICAvKiBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUgZG9tYWluLCBs
b29rIHVwIGEgVFhUIHJlY29yZCBpbiB0aGUgbWFpbiBkb21haW4KLSAgaWYgaXQgaGFzIG5vdCBw
cmV2aW91c2x5IGJlZW4gY2FjaGVkLiAqLwotCi0gIGlmICghY2ItPnRleHRfc2V0KQotICAgIHsK
LSAgICBjYi0+dGV4dF9zZXQgPSBUUlVFOwotICAgIGlmIChkbnNfYmFzaWNfbG9va3VwKGRuc2Es
IHF1ZXJ5LCBUX1RYVCkgPT0gRE5TX1NVQ0NFRUQpCi0gICAgICBmb3IgKGRuc19yZWNvcmQgKiBy
ciA9IGRuc19uZXh0X3JyKGRuc2EsICZkbnNzLCBSRVNFVF9BTlNXRVJTKTsgcnI7Ci0gICAgICAg
ICAgIHJyID0gZG5zX25leHRfcnIoZG5zYSwgJmRuc3MsIFJFU0VUX05FWFQpKQotICAgICAgICBp
ZiAocnItPnR5cGUgPT0gVF9UWFQpCi0JICB7Ci0JICBpbnQgbGVuID0gKHJyLT5kYXRhKVswXTsK
LQkgIGlmIChsZW4gPiA1MTEpIGxlbiA9IDEyNzsKLQkgIHN0b3JlX3Bvb2wgPSBQT09MX1BFUk07
Ci0JICBjYi0+dGV4dCA9IHN0cmluZ19zcHJpbnRmKCIlLipzIiwgbGVuLCBDVVMgKHJyLT5kYXRh
KzEpKTsKLQkgIHN0b3JlX3Bvb2wgPSBvbGRfcG9vbDsKLQkgIGJyZWFrOwotCSAgfQotICAgIH0K
LQotICBkbnNsaXN0X3ZhbHVlID0gYWRkbGlzdDsKLSAgZG5zbGlzdF90ZXh0ID0gY2ItPnRleHQ7
Ci0gIHJldHVybiBPSzsKLSAgfQorLyogUXVvdGEgY2FjaGUgbG9va3VwLiAgV2UgdXNlIHRoZSBj
YWxsb3V0IGhpbnRzIGRiIGFsc28gZm9yIHRoZSBxdW90YSBjYWNoZS4KK1JldHVybiBUUlVFIGlm
IGEgbm9uZXhwaXJlZCByZWNvcmQgd2FzIGZvdW5kLCBoYXZpbmcgZmlsbGVkIGluIHRoZSB5aWVs
ZAorYXJndW1lbnQuCisqLwogCi0vKiBUaGVyZSB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIEROUyBs
b29rdXAgKi8KK3N0YXRpYyBCT09MCitjYWNoZWRfcXVvdGFfbG9va3VwKGNvbnN0IHVzY2hhciAq
IHJjcHQsIGludCAqIHlpZWxkLAorICBpbnQgcG9zX2NhY2hlLCBpbnQgbmVnX2NhY2hlKQorewor
b3Blbl9kYiBkYmJsb2NrLCAqZGJtX2ZpbGUgPSBOVUxMOworZGJkYXRhX2NhbGxvdXRfY2FjaGVf
YWRkcmVzcyAqIGNhY2hlX2FkZHJlc3NfcmVjb3JkOwogCi1pZiAoY2ItPnJjICE9IEROU19OT01B
VENIICYmIGNiLT5yYyAhPSBETlNfTk9EQVRBKQoraWYgKCFwb3NfY2FjaGUgJiYgIW5lZ19jYWNo
ZSkKKyAgcmV0dXJuIEZBTFNFOworaWYgKCEoZGJtX2ZpbGUgPSBkYmZuX29wZW4oVVMiY2FsbG91
dCIsIE9fUkRXUiwgJmRiYmxvY2ssIEZBTFNFLCBUUlVFKSkpCiAgIHsKLSAgbG9nX3dyaXRlKExf
ZG5zbGlzdF9kZWZlciwgTE9HX01BSU4sCi0gICAgIkROUyBsaXN0IGxvb2t1cCBkZWZlciAocHJv
YmFibHkgdGltZW91dCkgZm9yICVzOiAlcyIsIHF1ZXJ5LAotICAgIChkZWZlcl9yZXR1cm4gPT0g
T0spPyAgIFVTImFzc3VtZWQgaW4gbGlzdCIgOgotICAgIChkZWZlcl9yZXR1cm4gPT0gRkFJTCk/
IFVTImFzc3VtZWQgbm90IGluIGxpc3QiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
UyJyZXR1cm5lZCBERUZFUiIpOwotICByZXR1cm4gZGVmZXJfcmV0dXJuOworICBIREVCVUcoRF92
ZXJpZnkpIGRlYnVnX3ByaW50Zl9pbmRlbnQoInF1b3RhIGNhY2hlOiBub3QgYXZhaWxhYmxlXG4i
KTsKKyAgcmV0dXJuIEZBTFNFOwogICB9Ci0KLS8qIE5vIGVudHJ5IHdhcyBmb3VuZCBpbiB0aGUg
RE5TOyBjb250aW51ZSBmb3IgbmV4dCBkb21haW4gKi8KLQotSERFQlVHKERfZG5zYmwpCitpZiAo
IShjYWNoZV9hZGRyZXNzX3JlY29yZCA9IChkYmRhdGFfY2FsbG91dF9jYWNoZV9hZGRyZXNzICop
CisgICAgZ2V0X2NhbGxvdXRfY2FjaGVfcmVjb3JkKGRibV9maWxlLCByY3B0LCBVUyJhZGRyZXNz
IiwKKyAgICAgIHBvc19jYWNoZSwgbmVnX2NhY2hlKSkpCiAgIHsKLSAgZGVidWdfcHJpbnRmKCJE
TlMgbG9va3VwIGZvciAlcyBmYWlsZWRcbiIsIHF1ZXJ5KTsKLSAgZGVidWdfcHJpbnRmKCI9PiB0
aGF0IG1lYW5zICVzIGlzIG5vdCBsaXN0ZWQgYXQgJXNcbiIsCi0gICAgIGtleWRvbWFpbiwgZG9t
YWluKTsKKyAgZGJmbl9jbG9zZShkYm1fZmlsZSk7CisgIHJldHVybiBGQUxTRTsKICAgfQotCi1y
ZXR1cm4gRkFJTDsKK2lmIChjYWNoZV9hZGRyZXNzX3JlY29yZC0+cmVzdWx0ID09IGNjYWNoZV9h
Y2NlcHQpCisgICp5aWVsZCA9IE9LOworZGJmbl9jbG9zZShkYm1fZmlsZSk7CityZXR1cm4gVFJV
RTsKIH0KIAorLyogUXVvdGEgY2FjaGUgd3JpdGUgKi8KIAorc3RhdGljIHZvaWQKK2NhY2hlX3F1
b3RhX3dyaXRlKGNvbnN0IHVzY2hhciAqIHJjcHQsIGludCB5aWVsZCwgaW50IHBvc19jYWNoZSwg
aW50IG5lZ19jYWNoZSkKK3sKK29wZW5fZGIgZGJibG9jaywgKmRibV9maWxlID0gTlVMTDsKK2Ri
ZGF0YV9jYWxsb3V0X2NhY2hlX2FkZHJlc3MgY2FjaGVfYWRkcmVzc19yZWNvcmQ7CiAKK2lmICgh
cG9zX2NhY2hlICYmICFuZWdfY2FjaGUpCisgIHJldHVybjsKK2lmICghKGRibV9maWxlID0gZGJm
bl9vcGVuKFVTImNhbGxvdXQiLCBPX1JEV1J8T19DUkVBVCwgJmRiYmxvY2ssIEZBTFNFLCBUUlVF
KSkpCisgIHsKKyAgSERFQlVHKERfdmVyaWZ5KSBkZWJ1Z19wcmludGZfaW5kZW50KCJxdW90YSBj
YWNoZTogbm90IGF2YWlsYWJsZVxuIik7CisgIHJldHVybjsKKyAgfQogCi0vKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgICAgICAgQ2hlY2sgaG9z
dCBhZ2FpbnN0IEROUyBibGFjayBsaXN0cyAgICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgZnVuY3Rpb24gcnVucyBjaGVj
a3MgYWdhaW5zdCBhIGxpc3Qgb2YgRE5TIGJsYWNrIGxpc3RzLCB1bnRpbCBvbmUKLW1hdGNoZXMu
IEVhY2ggaXRlbSBvbiB0aGUgbGlzdCBjYW4gYmUgb2YgdGhlIGZvcm0KLQotICBkb21haW49aXAt
YWRkcmVzcy9rZXkKLQotVGhlIGRvbWFpbiBpcyB0aGUgcmlnaHQtbW9zdCBkb21haW4gdGhhdCBp
cyB1c2VkIGZvciB0aGUgcXVlcnksIGZvciBleGFtcGxlLAotYmxhY2tob2xlcy5tYWlsLWFidXNl
Lm9yZy4gSWYgdGhlIElQIGFkZHJlc3MgaXMgcHJlc2VudCwgdGhlcmUgaXMgYSBtYXRjaCBvbmx5
Ci1pZiB0aGUgRE5TIGxvb2t1cCByZXR1cm5zIGEgbWF0Y2hpbmcgSVAgYWRkcmVzcy4gU2V2ZXJh
bCBhZGRyZXNzZXMgbWF5IGJlCi1naXZlbiwgY29tbWEtc2VwYXJhdGVkLCBmb3IgZXhhbXBsZTog
eC55Lno9MTI3LjAuMC4xLDEyNy4wLjAuMi4KLQotSWYgbm8ga2V5IGlzIGdpdmVuLCB3aGF0IGlz
IGxvb2tlZCB1cCBpbiB0aGUgZG9tYWluIGlzIHRoZSBpbnZlcnRlZCBJUCBhZGRyZXNzCi1vZiB0
aGUgY3VycmVudCBjbGllbnQgaG9zdC4gSWYgYSBrZXkgaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgdG8g
Y29uc3RydWN0IHRoZQotZG9tYWluIGZvciB0aGUgbG9va3VwLiBGb3IgZXhhbXBsZToKLQotICBk
c24ucmZjLWlnbm9yYW50Lm9yZy8kc2VuZGVyX2FkZHJlc3NfZG9tYWluCi0KLUFmdGVyIGZpbmRp
bmcgYSBtYXRjaCBpbiB0aGUgRE5TLCB0aGUgZG9tYWluIGlzIHBsYWNlZCBpbiAkZG5zbGlzdF9k
b21haW4sIGFuZAotdGhlbiB3ZSBjaGVjayBmb3IgYSBUWFQgcmVjb3JkIGZvciBhbiBlcnJvciBt
ZXNzYWdlLCBhbmQgaWYgZm91bmQsIHNhdmUgaXRzCi12YWx1ZSBpbiAkZG5zbGlzdF90ZXh0LiBX
ZSBhbHNvIGNhY2hlIGV2ZXJ5dGhpbmcgaW4gYSB0cmVlLCB0byBvcHRpbWl6ZQotbXVsdGlwbGUg
bG9va3Vwcy4KK2NhY2hlX2FkZHJlc3NfcmVjb3JkLnJlc3VsdCA9IHlpZWxkID09IE9LID8gY2Nh
Y2hlX2FjY2VwdCA6IGNjYWNoZV9yZWplY3Q7CiAKLVRoZSBUWFQgcmVjb3JkIGlzIG5vcm1hbGx5
IGxvb2tlZCB1cCBpbiB0aGUgc2FtZSBkb21haW4gYXMgdGhlIEEgcmVjb3JkLCBidXQKLXdoZW4g
bWFueSBsaXN0cyBhcmUgY29tYmluZWQgaW4gYSBzaW5nbGUgRE5TIGRvbWFpbiwgdGhpcyB3aWxs
IG5vdCBiZSBhIHZlcnkKLXNwZWNpZmljIG1lc3NhZ2UuIEl0IGlzIHBvc3NpYmxlIHRvIHNwZWNp
ZnkgYSBkaWZmZXJlbnQgZG9tYWluIGZvciBsb29raW5nIHVwCi1UWFQgcmVjb3JkczsgdGhpcyBp
cyBnaXZlbiBiZWZvcmUgdGhlIG1haW4gZG9tYWluLCBjb21tYS1zZXBhcmF0ZWQuIEZvcgotZXhh
bXBsZToKKyh2b2lkKWRiZm5fd3JpdGUoZGJtX2ZpbGUsIHJjcHQsICZjYWNoZV9hZGRyZXNzX3Jl
Y29yZCwKKwkoaW50KXNpemVvZihkYmRhdGFfY2FsbG91dF9jYWNoZV9hZGRyZXNzKSk7CitIREVC
VUcoRF92ZXJpZnkpIGRlYnVnX3ByaW50Zl9pbmRlbnQoIndyb3RlICVzIHF1b3RhIGNhY2hlIHJl
Y29yZCBmb3IgJXNcbiIsCisgICAgICB5aWVsZCA9PSBPSyA/ICJwb3NpdGl2ZSIgOiAibmVnYXRp
dmUiLCByY3B0KTsKIAotICBkbnNsaXN0cyA9IGh0dHAuZG5zYmwuc29yYnMubmV0LGRuc2JsLnNv
cmJzLm5ldD0xMjcuMC4wLjIgOiBcCi0gICAgICAgICAgICAgc29ja3MuZG5zYmwuc29yYnMubmV0
LGRuc2JsLnNvcmJzLm5ldD0xMjcuMC4wLjMKK2RiZm5fY2xvc2UoZGJtX2ZpbGUpOworcmV0dXJu
OworfQogCi1UaGUgY2FjaGluZyBlbnN1cmVzIHRoYXQgb25seSBvbmUgbG9va3VwIGluIGRuc2Js
LnNvcmJzLm5ldCBpcyBkb25lLgogCi1Ob3RlOiBhbiBhZGRyZXNzIGZvciB0ZXN0aW5nIFJCTCBp
cyAxOTIuMjAzLjE3OC4zOQotTm90ZTogYW4gYWRkcmVzcyBmb3IgdGVzdGluZyBEVUwgaXMgMTky
LjIwMy4xNzguNAotTm90ZTogYSBkb21haW4gZm9yIHRlc3RpbmcgUkZDSSBpcyBleGFtcGxlLnRs
ZC5kc24ucmZjLWlnbm9yYW50Lm9yZworLyogVG8gZXZhbHVhdGUgYSBsb2NhbCB1c2VyJ3MgcXVv
dGEsIHN0YXJ0aW5nIGluIEFDTCwgd2UgbmVlZCB0bworZm9yayAmIGV4ZWMgdG8gcmVnYWluIHBy
aXZpbGVnZXMsIHRvIHRoYXQgd2UgY2FuIGNoYW5nZSB0byB0aGUgdXNlcidzCitpZGVudGl0eSBm
b3IgYWNjZXNzIHRvIHRoZWlyIGZpbGVzLgogCiBBcmd1bWVudHM6Ci0gIHdoZXJlICAgICAgICB0
aGUgYWNsIHR5cGUKLSAgbGlzdHB0ciAgICAgIHRoZSBkb21haW4vYWRkcmVzcy9kYXRhIGxpc3QK
LSAgbG9nX21zZ3B0ciAgIGxvZyBtZXNzYWdlIG9uIGVycm9yCi0KLVJldHVybnM6ICAgIE9LICAg
ICAgc3VjY2Vzc2Z1bCBsb29rdXAgKGkuZS4gdGhlIGFkZHJlc3MgaXMgb24gdGhlIGxpc3QpLCBv
cgotICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cCBkZWZlcnJlZCBhZnRlciAraW5jbHVkZV91
bmtub3duCi0gICAgICAgICAgICBGQUlMICAgIG5hbWUgbm90IGZvdW5kLCBvciBubyBkYXRhIGZv
dW5kIGZvciB0aGUgZ2l2ZW4gdHlwZSwgb3IKLSAgICAgICAgICAgICAgICAgICAgICBsb29rdXAg
ZGVmZXJyZWQgYWZ0ZXIgK2V4Y2x1ZGVfdW5rbm93biAoZGVmYXVsdCkKLSAgICAgICAgICAgIERF
RkVSICAgbG9va3VwIGZhaWx1cmUsIGlmICtkZWZlcl91bmtub3duIHdhcyBzZXQKKyByY3B0CQlS
ZWNpcGllbnQgYWNjb3VudAorIHBvc19jYWNoZQlOdW1iZXIgb2Ygc2Vjb25kcyB0byBjYWNoZSBh
IHBvc2l0aXZlIHJlc3VsdCAoZGVsaXZlcnkKKyAJCXRvIGJlIGFjY2VwdGVkKS4gIFplcm8gdG8g
ZGlzYWJsZSBjYWNoaW5nLgorIG5lZ19jYWNoZQlOdW1iZXIgb2Ygc2Vjb25kcyB0byBjYWNoZSBh
IG5lZ2F0aXZlIHJlc3VsdC4gIFplcm8gdG8gZGlzYWJsZS4KKyBtc2cJCVBvaW50ZXIgdG8gcmVz
dWx0IHN0cmluZyBwb2ludGVyCisKK1JldHVybjoJCU9LL0RFRkVSL0ZBSUwgY29kZQogKi8KIAog
aW50Ci12ZXJpZnlfY2hlY2tfZG5zYmwoaW50IHdoZXJlLCBjb25zdCB1c2NoYXIgKiogbGlzdHB0
ciwgdXNjaGFyICoqIGxvZ19tc2dwdHIpCit2ZXJpZnlfcXVvdGFfY2FsbChjb25zdCB1c2NoYXIg
KiByY3B0LCBpbnQgcG9zX2NhY2hlLCBpbnQgbmVnX2NhY2hlLAorICB1c2NoYXIgKiogbXNnKQog
ewotaW50IHNlcCA9IDA7Ci1pbnQgZGVmZXJfcmV0dXJuID0gRkFJTDsKLWNvbnN0IHVzY2hhciAq
bGlzdCA9ICpsaXN0cHRyOwotdXNjaGFyICpkb21haW47Ci11c2NoYXIgcmV2YWRkWzEyOF07ICAg
ICAgICAvKiBMb25nIGVub3VnaCBmb3IgSVB2NiBhZGRyZXNzICovCi0KLS8qIEluZGljYXRlIHRo
YXQgdGhlIGludmVydGVkIElQIGFkZHJlc3MgaXMgbm90IHlldCBzZXQgdXAgKi8KLQotcmV2YWRk
WzBdID0gMDsKK2ludCBwZmRbMl0sIHBpZCwgc2F2ZV9lcnJubywgeWllbGQgPSBGQUlMOwordm9p
ZCAoKm9sZHNpZ25hbCkoaW50KTsKK2NvbnN0IHVzY2hhciAqIHdoZXJlID0gVVMic29ja2V0cGFp
ciI7CiAKLS8qIEluIGNhc2UgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgRE5TIHJlc29sdmVy
IGlzIGJlaW5nIHVzZWQuICovCisqbXNnID0gTlVMTDsKIAotZG5zX2luaXQoRkFMU0UsIEZBTFNF
LCBGQUxTRSk7CS8qWFhYIGRuc3NlYz8gKi8KLQotLyogTG9vcCB0aHJvdWdoIGFsbCB0aGUgZG9t
YWlucyBzdXBwbGllZCwgdW50aWwgc29tZXRoaW5nIG1hdGNoZXMgKi8KLQotd2hpbGUgKChkb21h
aW4gPSBzdHJpbmdfbmV4dGlubGlzdCgmbGlzdCwgJnNlcCwgTlVMTCwgMCkpKQoraWYgKGNhY2hl
ZF9xdW90YV9sb29rdXAocmNwdCwgJnlpZWxkLCBwb3NfY2FjaGUsIG5lZ19jYWNoZSkpCiAgIHsK
LSAgaW50IHJjOwotICBCT09MIGJpdG1hc2sgPSBGQUxTRTsKLSAgaW50IG1hdGNoX3R5cGUgPSAw
OwotICB1c2NoYXIgKmRvbWFpbl90eHQ7Ci0gIHVzY2hhciAqY29tbWE7Ci0gIHVzY2hhciAqaXBs
aXN0OwotICB1c2NoYXIgKmtleTsKLQotICBIREVCVUcoRF9kbnNibCkgZGVidWdfcHJpbnRmKCJk
bnNsaXN0cyBjaGVjazogJXNcbiIsIGRvbWFpbik7Ci0KLSAgLyogRGVhbCB3aXRoIHNwZWNpYWwg
dmFsdWVzIHRoYXQgY2hhbmdlIHRoZSBiZWhhdmlvdXIgb24gZGVmZXIgKi8KLQotICBpZiAoZG9t
YWluWzBdID09ICcrJykKLSAgICB7Ci0gICAgaWYgICAgICAoc3RyY21waWMoZG9tYWluLCBVUyIr
aW5jbHVkZV91bmtub3duIikgPT0gMCkgZGVmZXJfcmV0dXJuID0gT0s7Ci0gICAgZWxzZSBpZiAo
c3RyY21waWMoZG9tYWluLCBVUyIrZXhjbHVkZV91bmtub3duIikgPT0gMCkgZGVmZXJfcmV0dXJu
ID0gRkFJTDsKLSAgICBlbHNlIGlmIChzdHJjbXBpYyhkb21haW4sIFVTIitkZWZlcl91bmtub3du
IikgPT0gMCkgICBkZWZlcl9yZXR1cm4gPSBERUZFUjsKLSAgICBlbHNlCi0gICAgICBsb2dfd3Jp
dGUoMCwgTE9HX01BSU58TE9HX1BBTklDLCAidW5rbm93biBpdGVtIGluIGRuc2xpc3QgKGlnbm9y
ZWQpOiAlcyIsCi0gICAgICAgIGRvbWFpbik7Ci0gICAgY29udGludWU7Ci0gICAgfQotCi0gIC8q
IFNlZSBpZiB0aGVyZSdzIGV4cGxpY2l0IGRhdGEgdG8gYmUgbG9va2VkIHVwICovCi0KLSAgaWYg
KChrZXkgPSBVc3RyY2hyKGRvbWFpbiwgJy8nKSkpICprZXkrKyA9IDA7Ci0KLSAgLyogU2VlIGlm
IHRoZXJlJ3MgYSBsaXN0IG9mIGFkZHJlc3NlcyBzdXBwbGllZCBhZnRlciB0aGUgZG9tYWluIG5h
bWUuIFRoaXMgaXMKLSAgaW50cm9kdWNlZCBieSBhbiA9IG9yIGEgJiBjaGFyYWN0ZXI7IGlmIHBy
ZWNlZGVkIGJ5ID0gd2UgcmVxdWlyZSBhbGwgbWF0Y2hlcwotICBhbmQgaWYgcHJlY2VkZWQgYnkg
ISB3ZSBpbnZlcnQgdGhlIHJlc3VsdC4gKi8KLQotICBpZiAoIShpcGxpc3QgPSBVc3RyY2hyKGRv
bWFpbiwgJz0nKSkpCisgIEhERUJVRyhEX3ZlcmlmeSkgZGVidWdfcHJpbnRmX2luZGVudCgicXVv
dGEgY2FjaGU6IGFkZHJlc3MgcmVjb3JkIGlzICVzXG4iLAorICAgIHlpZWxkID09IE9LID8gInBv
c2l0aXZlIiA6ICJuZWdhdGl2ZSIpOworICBpZiAoeWllbGQgIT0gT0spCiAgICAgewotICAgIGJp
dG1hc2sgPSBUUlVFOwotICAgIGlwbGlzdCA9IFVzdHJjaHIoZG9tYWluLCAnJicpOwotICAgIH0K
LQotICBpZiAoaXBsaXN0KQkJCQkgICAgICAgLyogRm91bmQgZWl0aGVyID0gb3IgJiAqLwotICAg
IHsKLSAgICBpZiAoaXBsaXN0ID4gZG9tYWluICYmIGlwbGlzdFstMV0gPT0gJyEnKSAgLyogSGFu
ZGxlIHByZWNlZGluZyAhICovCi0gICAgICB7Ci0gICAgICBtYXRjaF90eXBlIHw9IE1UX05PVDsK
LSAgICAgIGlwbGlzdFstMV0gPSAwOwotICAgICAgfQotCi0gICAgKmlwbGlzdCsrID0gMDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSBkb21haW4sIG1vdmUgb24gKi8K
LQotICAgIC8qIElmIHdlIGZvdW5kID0gKGJpdG1hc2sgPT0gRkFMU0UpLCBjaGVjayBmb3IgPT0g
b3IgPSYgKi8KLQotICAgIGlmICghYml0bWFzayAmJiAoKmlwbGlzdCA9PSAnPScgfHwgKmlwbGlz
dCA9PSAnJicpKQotICAgICAgewotICAgICAgYml0bWFzayA9ICppcGxpc3QrKyA9PSAnJic7Ci0g
ICAgICBtYXRjaF90eXBlIHw9IE1UX0FMTDsKLSAgICAgIH0KLSAgICB9Ci0KLQotICAvKiBJZiB0
aGVyZSBpcyBhIGNvbW1hIGluIHRoZSBkb21haW4sIGl0IGluZGljYXRlcyB0aGF0IGEgc2Vjb25k
IGRvbWFpbiBmb3IKLSAgbG9va2luZyB1cCBUWFQgcmVjb3JkcyBpcyBwcm92aWRlZCwgYmVmb3Jl
IHRoZSBtYWluIGRvbWFpbi4gT3RoZXJ3aXNlIHdlIG11c3QKLSAgc2V0IGRvbWFpbl90eHQgPT0g
ZG9tYWluLiAqLwotCi0gIGRvbWFpbl90eHQgPSBkb21haW47Ci0gIGlmICgoY29tbWEgPSBVc3Ry
Y2hyKGRvbWFpbiwgJywnKSkpCi0gICAgewotICAgICpjb21tYSsrID0gMDsKLSAgICBkb21haW4g
PSBjb21tYTsKKyAgICByZWNpcGllbnRfdmVyaWZ5X2ZhaWx1cmUgPSBVUyJxdW90YSI7CisgICAg
YWNsX3ZlcmlmeV9tZXNzYWdlID0gKm1zZyA9CisgICAgICBVUyJQcmV2aW91cyAoY2FjaGVkKSBx
dW90YSB2ZXJpZmljYXRpb24gZmFpbHVyZSI7CiAgICAgfQorICByZXR1cm4geWllbGQ7CisgIH0K
IAotICAvKiBDaGVjayB0aGF0IHdoYXQgd2UgaGF2ZSBsZWZ0IGlzIGEgc2Vuc2libGUgZG9tYWlu
IG5hbWUuIFRoZXJlIGlzIG5vIHJlYXNvbgotICB3aHkgdGhlc2UgZG9tYWlucyBzaG91bGQgaW4g
ZmFjdCB1c2UgdGhlIHNhbWUgc3ludGF4IGFzIGhvc3RzIGFuZCBlbWFpbAotICBkb21haW5zLCBi
dXQgaW4gcHJhY3RpY2UgdGhleSBzZWVtIHRvLiBIb3dldmVyLCB0aGVyZSBpcyBsaXR0bGUgcG9p
bnQgaW4KLSAgYWN0dWFsbHkgY2F1c2luZyBhbiBlcnJvciBoZXJlLCBiZWNhdXNlIHRoYXQgd291
bGQgbm8gZG91YnQgaG9sZCB1cCBpbmNvbWluZwotICBtYWlsLiBJbnN0ZWFkLCBJJ2xsIGp1c3Qg
bG9nIGl0LiAqLworaWYgKHBpcGUocGZkKSAhPSAwKQorICBnb3RvIGZhaWw7CiAKLSAgZm9yICh1
c2NoYXIgKiBzID0gZG9tYWluOyAqczsgcysrKQotICAgIGlmICghaXNhbG51bSgqcykgJiYgKnMg
IT0gJy0nICYmICpzICE9ICcuJyAmJiAqcyAhPSAnXycpCi0gICAgICB7Ci0gICAgICBsb2dfd3Jp
dGUoMCwgTE9HX01BSU4sICJkbnNsaXN0cyBkb21haW4gXCIlc1wiIGNvbnRhaW5zICIKLSAgICAg
ICAgInN0cmFuZ2UgY2hhcmFjdGVycyAtIGlzIHRoaXMgcmlnaHQ/IiwgZG9tYWluKTsKLSAgICAg
IGJyZWFrOwotICAgICAgfQord2hlcmUgPSBVUyJmb3JrIjsKK29sZHNpZ25hbCA9IHNpZ25hbChT
SUdDSExELCBTSUdfREZMKTsKK2lmICgocGlkID0gZXhpbV9mb3JrKFVTInF1b3RhLXZlcmlmeSIp
KSA8IDApCisgIHsKKyAgc2F2ZV9lcnJubyA9IGVycm5vOworICBjbG9zZShwZmRbcGlwZV93cml0
ZV0pOworICBjbG9zZShwZmRbcGlwZV9yZWFkXSk7CisgIGVycm5vID0gc2F2ZV9lcnJubzsKKyAg
Z290byBmYWlsOworICB9CiAKLSAgLyogQ2hlY2sgdGhlIGFsdGVybmF0ZSBkb21haW4gaWYgcHJl
c2VudCAqLworaWYgKHBpZCA9PSAwKQkJLyogY2hpbGQgKi8KKyAgeworICBjbG9zZShwZmRbcGlw
ZV9yZWFkXSk7CisgIGZvcmNlX2ZkKHBmZFtwaXBlX3dyaXRlXSwgMSk7CQkvKiBzdGRvdXQgdG8g
cGlwZSAqLworICBjbG9zZShwZmRbcGlwZV93cml0ZV0pOworICBkdXAyKDEsIDApOworICBpZiAo
ZGVidWdfZmQgPiAwKSBmb3JjZV9mZChkZWJ1Z19mZCwgMik7CiAKLSAgaWYgKGRvbWFpbl90eHQg
IT0gZG9tYWluKSBmb3IgKHVzY2hhciAqIHMgPSBkb21haW5fdHh0OyAqczsgcysrKQotICAgIGlm
ICghaXNhbG51bSgqcykgJiYgKnMgIT0gJy0nICYmICpzICE9ICcuJyAmJiAqcyAhPSAnXycpCi0g
ICAgICB7Ci0gICAgICBsb2dfd3JpdGUoMCwgTE9HX01BSU4sICJkbnNsaXN0cyBkb21haW4gXCIl
c1wiIGNvbnRhaW5zICIKLSAgICAgICAgInN0cmFuZ2UgY2hhcmFjdGVycyAtIGlzIHRoaXMgcmln
aHQ/IiwgZG9tYWluX3R4dCk7Ci0gICAgICBicmVhazsKLSAgICAgIH0KKyAgY2hpbGRfZXhlY19l
eGltKENFRV9FWEVDX0VYSVQsIEZBTFNFLCBOVUxMLCBGQUxTRSwgMywKKyAgICBVUyItTUNxIiwg
c3RyaW5nX3NwcmludGYoIiVkIiwgbWVzc2FnZV9zaXplKSwgcmNwdCk7CisgIC8qTk9UUkVBQ0hF
RCovCisgIH0KIAotICAvKiBJZiB0aGVyZSBpcyBubyBrZXkgc3RyaW5nLCBjb25zdHJ1Y3QgdGhl
IHF1ZXJ5IGJ5IGFkZGluZyB0aGUgZG9tYWluIG5hbWUKLSAgb250byB0aGUgaW52ZXJ0ZWQgaG9z
dCBhZGRyZXNzLCBhbmQgcGVyZm9ybSBhIHNpbmdsZSBETlMgbG9va3VwLiAqLworc2F2ZV9lcnJu
byA9IGVycm5vOworY2xvc2UocGZkW3BpcGVfd3JpdGVdKTsKIAotICBpZiAoIWtleSkKLSAgICB7
Ci0gICAgaWYgKHdoZXJlID09IEFDTF9XSEVSRV9OT1RTTVRQX1NUQVJUIHx8IHdoZXJlID09IEFD
TF9XSEVSRV9OT1RTTVRQKQotICAgICAgewotICAgICAgKmxvZ19tc2dwdHIgPSBzdHJpbmdfc3By
aW50ZgotCSgiY2Fubm90IHRlc3QgYXV0by1rZXllZCBkbnNsaXN0cyBjb25kaXRpb24gaW4gJXMg
QUNMIiwKLQkgIGFjbF93aGVyZW5hbWVzW3doZXJlXSk7Ci0gICAgICByZXR1cm4gRVJST1I7Ci0g
ICAgICB9Ci0gICAgaWYgKCFzZW5kZXJfaG9zdF9hZGRyZXNzKSByZXR1cm4gRkFJTDsgICAgLyog
Y2FuIG5ldmVyIG1hdGNoICovCi0gICAgaWYgKHJldmFkZFswXSA9PSAwKSBpbnZlcnRfYWRkcmVz
cyhyZXZhZGQsIHNlbmRlcl9ob3N0X2FkZHJlc3MpOwotICAgIHJjID0gb25lX2NoZWNrX2Ruc2Js
KGRvbWFpbiwgZG9tYWluX3R4dCwgc2VuZGVyX2hvc3RfYWRkcmVzcywgcmV2YWRkLAotICAgICAg
aXBsaXN0LCBiaXRtYXNrLCBtYXRjaF90eXBlLCBkZWZlcl9yZXR1cm4pOwotICAgIGlmIChyYyA9
PSBPSykKLSAgICAgIHsKLSAgICAgIGRuc2xpc3RfZG9tYWluID0gc3RyaW5nX2NvcHkoZG9tYWlu
X3R4dCk7Ci0gICAgICBkbnNsaXN0X21hdGNoZWQgPSBzdHJpbmdfY29weShzZW5kZXJfaG9zdF9h
ZGRyZXNzKTsKLSAgICAgIEhERUJVRyhEX2Ruc2JsKSBkZWJ1Z19wcmludGYoIj0+IHRoYXQgbWVh
bnMgJXMgaXMgbGlzdGVkIGF0ICVzXG4iLAotICAgICAgICBzZW5kZXJfaG9zdF9hZGRyZXNzLCBk
bnNsaXN0X2RvbWFpbik7Ci0gICAgICB9Ci0gICAgaWYgKHJjICE9IEZBSUwpIHJldHVybiByYzsg
ICAgIC8qIE9LIG9yIERFRkVSICovCitpZiAocGlkIDwgMCkKKyAgeworICBERUJVRyhEX3Zlcmlm
eSkgZGVidWdfcHJpbnRmX2luZGVudCgiIGZvcms6ICVzXG4iLCBzdHJlcnJvcihzYXZlX2Vycm5v
KSk7CisgIH0KK2Vsc2UKKyAgeworICB1c2NoYXIgYnVmWzEyOF07CisgIGludCBuID0gcmVhZChw
ZmRbcGlwZV9yZWFkXSwgYnVmLCBzaXplb2YoYnVmKSk7CisgIGludCBzdGF0dXM7CisKKyAgd2Fp
dHBpZChwaWQsICZzdGF0dXMsIDApOworICBpZiAoc3RhdHVzID09IDApCisgICAgeworICAgIHVz
Y2hhciAqIHM7CisKKyAgICBpZiAobiA+IDApIHlpZWxkID0gYnVmWzBdOworICAgIGlmIChuID4g
NCkKKyAgICAgIHNhdmVfZXJybm8gPSAoYnVmWzFdIDw8IDI0KSB8IChidWZbMl0gPDwgMTYpIHwg
KGJ1ZlszXSA8PCA4KSB8IGJ1Zls0XTsKKyAgICBpZiAoKHJlY2lwaWVudF92ZXJpZnlfZmFpbHVy
ZSA9IG4gPiA1CisJPyBzdHJpbmdfY29weW5fdGFpbnQoYnVmKzUsIG4tNSwgR0VUX1VOVEFJTlRF
RCkgOiBOVUxMKSkKKyAgICAgIHsKKyAgICAgIGludCBtOworICAgICAgcyA9IGJ1ZiArIDUgKyBV
c3RybGVuKHJlY2lwaWVudF92ZXJpZnlfZmFpbHVyZSkgKyAxOworICAgICAgbSA9IG4gLSAocyAt
IGJ1Zik7CisgICAgICBhY2xfdmVyaWZ5X21lc3NhZ2UgPSAqbXNnID0KKwltID4gMCA/IHN0cmlu
Z19jb3B5bl90YWludChzLCBtLCBHRVRfVU5UQUlOVEVEKSA6IE5VTEw7CisgICAgICB9CisKKyAg
ICBERUJVRyhEX3ZlcmlmeSkgZGVidWdfcHJpbnRmX2luZGVudCgidmVyaWZ5IGNhbGwgcmVzcG9u
c2U6IgorICAgICAgIiBsZW4gJWQgeWllbGQgJXMgZXJybm8gJyVzJyB3aGVyZSAnJXMnIG1zZyAn
JXMnXG4iLAorICAgICAgbiwgcmNfbmFtZXNbeWllbGRdLCBzdHJlcnJvcihzYXZlX2Vycm5vKSwg
cmVjaXBpZW50X3ZlcmlmeV9mYWlsdXJlLCAqbXNnKTsKKworICAgIGlmICggIHlpZWxkID09IE9L
CisgICAgICAgfHwgc2F2ZV9lcnJubyA9PSAwICYmIFVzdHJjbXAocmVjaXBpZW50X3ZlcmlmeV9m
YWlsdXJlLCAicXVvdGEiKSA9PSAwKQorICAgICAgY2FjaGVfcXVvdGFfd3JpdGUocmNwdCwgeWll
bGQsIHBvc19jYWNoZSwgbmVnX2NhY2hlKTsKKyAgICBlbHNlIERFQlVHKERfdmVyaWZ5KQorICAg
ICAgZGVidWdfcHJpbnRmX2luZGVudCgicmVzdWx0IG5vdCBjYWNoZWFibGVcbiIpOwogICAgIH0K
LQotICAvKiBJZiB0aGVyZSBpcyBhIGtleSBzdHJpbmcsIGl0IGNhbiBiZSBhIGxpc3Qgb2YgZG9t
YWlucyBvciBJUCBhZGRyZXNzZXMgdG8KLSAgYmUgY29uY2F0ZW5hdGVkIHdpdGggdGhlIG1haW4g
ZG9tYWluLiAqLwotCiAgIGVsc2UKICAgICB7Ci0gICAgaW50IGtleXNlcCA9IDA7Ci0gICAgQk9P
TCBkZWZlciA9IEZBTFNFOwotICAgIHVzY2hhciAqa2V5ZG9tYWluOwotICAgIHVzY2hhciBrZXly
ZXZhZGRbMTI4XTsKLQotICAgIHdoaWxlICgoa2V5ZG9tYWluID0gc3RyaW5nX25leHRpbmxpc3Qo
Q1VTUyAma2V5LCAma2V5c2VwLCBOVUxMLCAwKSkpCi0gICAgICB7Ci0gICAgICB1c2NoYXIgKnBy
ZXBlbmQgPSBrZXlkb21haW47Ci0KLSAgICAgIGlmIChzdHJpbmdfaXNfaXBfYWRkcmVzcyhrZXlk
b21haW4sIE5VTEwpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgaW52ZXJ0X2FkZHJlc3Moa2V5
cmV2YWRkLCBrZXlkb21haW4pOwotICAgICAgICBwcmVwZW5kID0ga2V5cmV2YWRkOwotICAgICAg
ICB9Ci0KLSAgICAgIHJjID0gb25lX2NoZWNrX2Ruc2JsKGRvbWFpbiwgZG9tYWluX3R4dCwga2V5
ZG9tYWluLCBwcmVwZW5kLCBpcGxpc3QsCi0gICAgICAgIGJpdG1hc2ssIG1hdGNoX3R5cGUsIGRl
ZmVyX3JldHVybik7Ci0gICAgICBpZiAocmMgPT0gT0spCi0gICAgICAgIHsKLSAgICAgICAgZG5z
bGlzdF9kb21haW4gPSBzdHJpbmdfY29weShkb21haW5fdHh0KTsKLSAgICAgICAgZG5zbGlzdF9t
YXRjaGVkID0gc3RyaW5nX2NvcHkoa2V5ZG9tYWluKTsKLSAgICAgICAgSERFQlVHKERfZG5zYmwp
IGRlYnVnX3ByaW50ZigiPT4gdGhhdCBtZWFucyAlcyBpcyBsaXN0ZWQgYXQgJXNcbiIsCi0gICAg
ICAgICAga2V5ZG9tYWluLCBkbnNsaXN0X2RvbWFpbik7Ci0gICAgICAgIHJldHVybiBPSzsKLSAg
ICAgICAgfQotCi0gICAgICAvKiBJZiB0aGUgbG9va3VwIGRlZmVycmVkLCByZW1lbWJlciB0aGlz
IGZhY3QuIFdlIGtlZXAgdHJ5aW5nIHRoZSByZXN0Ci0gICAgICBvZiB0aGUgbGlzdCB0byBzZWUg
aWYgd2UgZ2V0IGEgdXNlZnVsIHJlc3VsdCwgYW5kIGlmIHdlIGRvbid0LCB3ZSByZXR1cm4KLSAg
ICAgIERFRkVSIGF0IHRoZSBlbmQuICovCi0KLSAgICAgIGlmIChyYyA9PSBERUZFUikgZGVmZXIg
PSBUUlVFOwotICAgICAgfSAgICAvKiBjb250aW51ZSB3aXRoIG5leHQga2V5c3RyaW5nIGRvbWFp
bi9hZGRyZXNzICovCi0KLSAgICBpZiAoZGVmZXIpIHJldHVybiBERUZFUjsKKyAgICBERUJVRyhE
X3ZlcmlmeSkKKyAgICAgIGRlYnVnX3ByaW50Zl9pbmRlbnQoInZlcmlmeSBjYWxsIHJlc3BvbnNl
OiB3YWl0cGlkIHN0YXR1cyAweCUwNHhcbiIsIHN0YXR1cyk7CiAgICAgfQotICB9ICAgICAgICAv
KiBjb250aW51ZSB3aXRoIG5leHQgZG5zZGIgb3V0ZXIgZG9tYWluICovCisgIH0KIAotcmV0dXJu
IEZBSUw7CitjbG9zZShwZmRbcGlwZV9yZWFkXSk7CitzaWduYWwoU0lHQ0hMRCwgb2xkc2lnbmFs
KTsKK2Vycm5vID0gc2F2ZV9lcnJubzsKK3JldHVybiB5aWVsZDsKKworZmFpbDoKK0RFQlVHKERf
dmVyaWZ5KSBkZWJ1Z19wcmludGZfaW5kZW50KCJ2ZXJpZnlfcXVvdGFfY2FsbCBmYWlsIGluICVz
XG4iLCB3aGVyZSk7CityZXR1cm4geWllbGQ7CiB9CiAKKwogLyogdmk6IGF3IGFpIHN3PTIKICov
CiAvKiBFbmQgb2YgdmVyaWZ5LmMgKi8K0KLQvtC70YzQutC+INCyIGV4aW0vc3JjOiB2ZXJzaW9u
LmgK0KLQvtC70YzQutC+INCyIGV4aW0vc3JjOiB2ZXJzaW9uLnNoCmRpZmYgLXVyIGV4aW0ub3Jp
Zy91dGlsL2dlbl9wa2NzMy5jIGV4aW0vdXRpbC9nZW5fcGtjczMuYwotLS0gZXhpbS5vcmlnL3V0
aWwvZ2VuX3BrY3MzLmMJMjAyMy0wNi0wNCAxNjoyMjowNS4wMDAwMDAwMDAgKzAzMDAKKysrIGV4
aW0vdXRpbC9nZW5fcGtjczMuYwkyMDIyLTA2LTIzIDE2OjQxOjEwLjAwMDAwMDAwMCArMDMwMApA
QCAtMSw0ICsxLDUgQEAKIC8qIENvcHlyaWdodCAoQykgMjAxMiwyMDE2IFBoaWwgUGVubm9jay4K
KyAqIENvcHlyaWdodCAoYykgVGhlIEV4aW0gTWFpbnRhaW5lcnMgMjAyMQogICogVGhpcyBpcyBk
aXN0cmlidXRlZCBhcyBwYXJ0IG9mIEV4aW0gYW5kIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCiAg
KiBTZWUgdGhlIGZpbGUgIk5PVElDRSIgZm9yIG1vcmUgZGV0YWlscy4KICAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13373</attachid>
            <date>2023-06-04 16:47:10 +0300</date>
            <delta_ts>2023-06-04 17:14:27 +0300</delta_ts>
            <desc>Патч для spec-файла</desc>
            <filename>exim-update-spec.patch</filename>
            <type>text/plain</type>
            <size>522</size>
            <attacher name="Danil Nazarov">idaniel959</attacher>
            
              <data encoding="base64">LS0tIC9ob21lL2RhbnlhL0Rvd25sb2Fkcy9leGltLnNwZWMJMjAyMy0wNS0yOCAxOToyNzo0MC42
MzI4NzExNDQgKzAzMDAKKysrIC9ob21lL2RhbnlhL1JQTS9TUEVDL2V4aW0uc3BlYwkyMDIzLTA1
LTI4IDE5OjI2OjE4LjUxNzU0OTI2OCArMDMwMApAQCAtMSw1ICsxLDUgQEAKIE5hbWU6IGV4aW0K
LVZlcnNpb246IDQuOTQuMgorVmVyc2lvbjogNC45NgogUmVsZWFzZTogYWx0MgogU3VtbWFyeTog
RXhpbSBNVEEKIEdyb3VwOiBOZXR3b3JraW5nL01haWwKQEAgLTIzNCw2ICsyMzQsOSBAQAogJWRv
YyBSZWFkbWUucG9kIHZtYWlsLWRvdmVjb3QudHh0CiAKICVjaGFuZ2Vsb2cKKyogU3VuIE1heSAy
OCAyMDIzIERhbmlsIE5hemFyb3YgPGlkYW5pZWw5NTlAeWFuZGV4LnJ1PiA0Ljk2LWFsdDIKKy0g
dXBkYXRlIHRwIDQuOTYKKwogKiBGcmkgSnVuIDAzIDIwMjIgR3JlbWxpbiBmcm9tIEtyZW1saW4g
PGdyZW1saW5AYWx0bGludXgub3JnPiA0Ljk0LjItYWx0MgogLSBhZGQgTERBUCBzdXBwb3J0ICgj
NDI5MjcpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13374</attachid>
            <date>2023-06-04 17:14:27 +0300</date>
            <delta_ts>2023-06-04 17:15:54 +0300</delta_ts>
            <desc>Патч для spec-файла</desc>
            <filename>exim-update-spec.patch</filename>
            <type>text/plain</type>
            <size>522</size>
            <attacher name="Danil Nazarov">idaniel959</attacher>
            
              <data encoding="base64">LS0tIC9ob21lL2RhbnlhL0Rvd25sb2Fkcy9leGltLnNwZWMJMjAyMy0wNS0yOCAxOToyNzo0MC42
MzI4NzExNDQgKzAzMDAKKysrIC9ob21lL2RhbnlhL1JQTS9TUEVDL2V4aW0uc3BlYwkyMDIzLTA1
LTI4IDE5OjI2OjE4LjUxNzU0OTI2OCArMDMwMApAQCAtMSw1ICsxLDUgQEAKIE5hbWU6IGV4aW0K
LVZlcnNpb246IDQuOTQuMgorVmVyc2lvbjogNC45NgogUmVsZWFzZTogYWx0MgogU3VtbWFyeTog
RXhpbSBNVEEKIEdyb3VwOiBOZXR3b3JraW5nL01haWwKQEAgLTIzNCw2ICsyMzQsOSBAQAogJWRv
YyBSZWFkbWUucG9kIHZtYWlsLWRvdmVjb3QudHh0CiAKICVjaGFuZ2Vsb2cKKyogU3VuIE1heSAy
OCAyMDIzIERhbmlsIE5hemFyb3YgPGlkYW5pZWw5NTlAeWFuZGV4LnJ1PiA0Ljk2LWFsdDIKKy0g
dXBkYXRlIHRwIDQuOTYKKwogKiBGcmkgSnVuIDAzIDIwMjIgR3JlbWxpbiBmcm9tIEtyZW1saW4g
PGdyZW1saW5AYWx0bGludXgub3JnPiA0Ljk0LjItYWx0MgogLSBhZGQgTERBUCBzdXBwb3J0ICgj
NDI5MjcpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13375</attachid>
            <date>2023-06-04 17:15:54 +0300</date>
            <delta_ts>2023-06-04 17:15:54 +0300</delta_ts>
            <desc>Патч для spec-файла</desc>
            <filename>exim-update-spec.patch</filename>
            <type>text/plain</type>
            <size>484</size>
            <attacher name="Danil Nazarov">idaniel959</attacher>
            
              <data encoding="base64">LS0tIGV4aW0uc3BlYy5vcmlnCTIwMjMtMDUtMjggMDA6MzE6NDQuOTM4Nzk1NDc5ICswMzAwCisr
KyBleGltLnNwZWMJMjAyMy0wNi0wNCAxNzoxMDo1OC40NTg4MTcyNjYgKzAzMDAKQEAgLTEsNSAr
MSw1IEBACiBOYW1lOiBleGltCi1WZXJzaW9uOiA0Ljk0LjIKK1ZlcnNpb246IDQuOTYKIFJlbGVh
c2U6IGFsdDIKIFN1bW1hcnk6IEV4aW0gTVRBCiBHcm91cDogTmV0d29ya2luZy9NYWlsCkBAIC0y
MzQsNiArMjM0LDkgQEAKICVkb2MgUmVhZG1lLnBvZCB2bWFpbC1kb3ZlY290LnR4dAogCiAlY2hh
bmdlbG9nCisqIFN1biBNYXkgMjggMjAyMyBEYW5pbCBOYXphcm92IDxpZGFuaWVsOTU5QHlhbmRl
eC5ydT4gNC45Ni1hbHQyCistIHVwZGF0ZSB0byA0Ljk2CisKICogRnJpIEp1biAwMyAyMDIyIEdy
ZW1saW4gZnJvbSBLcmVtbGluIDxncmVtbGluQGFsdGxpbnV4Lm9yZz4gNC45NC4yLWFsdDIKIC0g
YWRkIExEQVAgc3VwcG9ydCAoIzQyOTI3KQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>