<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>69435</bug_id>
          
          <creation_ts>2011-10-05 09:37:43 -0700</creation_ts>
          <short_desc>remove WTF_CHANGES define, as it is always 1</short_desc>
          <delta_ts>2015-06-29 02:33:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Andy Wingo">wingo</reporter>
          <assigned_to name="Csaba Osztrogonác">ossy</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mrowe</cc>
    
    <cc>msaboff</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>478431</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-10-05 09:37:43 -0700</bug_when>
    <thetext>Hello,

I was looking through WTF today and found the WTF_CHANGES define which is always 1.  It seems that at some point some modifications were made to the malloc implementation, and the new code was under the WTF_CHANGES flag.  At some point things switched around so that old code was under #ifndef WTF_CHANGES.  That old code does not appear to be used on any platform.

This patch to be attached removes the define and related unused code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478442</commentid>
    <comment_count>1</comment_count>
      <attachid>109812</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-10-05 09:49:37 -0700</bug_when>
    <thetext>Created attachment 109812
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478444</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-05 09:51:51 -0700</bug_when>
    <thetext>Attachment 109812 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/wtf/FastMalloc.cpp:3225:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478448</commentid>
    <comment_count>3</comment_count>
      <attachid>109812</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-05 09:54:36 -0700</bug_when>
    <thetext>Comment on attachment 109812
Patch

We created this define to help us track the original version of TCMalloc. We should not remove it just because it’s always 1. If it has outlived its usefulness we could remove it, but that decision should be made by whoever is merging in new versions of TCMalloc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478466</commentid>
    <comment_count>4</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-10-05 10:13:58 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 109812 [details])
&gt; We created this define to help us track the original version of TCMalloc. We should not remove it just because it’s always 1. If it has outlived its usefulness we could remove it, but that decision should be made by whoever is merging in new versions of TCMalloc.

Thank you for the review, Darin.  The define is poorly named, however, and I wonder if it really needs to make it all the way out to JavaScriptCore/config.h.  Also not all changes to tcmalloc are guarded by this flag.

Do you think that there is something worth doing here or should we close this bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480964</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-10-10 08:06:04 -0700</bug_when>
    <thetext>Adding Darin to cc to close.  (I am new to WebKit, so if this is the wrong thing to do, please let me know.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481147</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-10 14:13:52 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; The define is poorly named, however

I agree.

&gt; I wonder if it really needs to make it all the way out to JavaScriptCore/config.h.

I think it’s inconvenient that it’s there. It would be nice if it wasn’t.

&gt; Also not all changes to tcmalloc are guarded by this flag.

Also a good point.

&gt; Do you think that there is something worth doing here or should we close this bug?

I think it’s worth finding out if we are getting any value from having our changes wrapped in #if now. If we’re not, it might be nice to reduce the noise and complexity by removing this.

I think the real question is who would know the answer to that. Who has recently dealt with comparing with the “real” TCMalloc or importing a new version of it into our source tree? I cc’d a few people who might know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485005</commentid>
    <comment_count>7</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2011-10-17 02:07:06 -0700</bug_when>
    <thetext>Thanks for the reply, Darin.

(In reply to comment #6)
&gt; I think it’s worth finding out if we are getting any value from having our changes wrapped in #if now. If we’re not, it might be nice to reduce the noise and complexity by removing this.
&gt; 
&gt; I think the real question is who would know the answer to that. Who has recently dealt with comparing with the “real” TCMalloc or importing a new version of it into our source tree? I cc’d a few people who might know.

A kind ping to those people on CC for input.

Andy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485214</commentid>
    <comment_count>8</comment_count>
      <attachid>109812</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-17 09:31:32 -0700</bug_when>
    <thetext>Comment on attachment 109812
Patch

Clearing review flag for now. Not sure we want to do this. Whoever is working on merging changes in from TCMalloc could help us decide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981529</commentid>
    <comment_count>9</comment_count>
      <attachid>224395</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-02-17 10:45:03 -0800</bug_when>
    <thetext>Created attachment 224395
Patch

Updated patch for EWS. I&apos;m going to send a mail to webkit-dev soon if we need it or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981530</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-17 10:45:49 -0800</bug_when>
    <thetext>Attachment 224395 did not pass style-queue:


ERROR: Source/WTF/wtf/FastMalloc.cpp:3738:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/FastMalloc.cpp:3809:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/FastMalloc.cpp:3873:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981880</commentid>
    <comment_count>11</comment_count>
      <attachid>224492</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-02-18 04:09:59 -0800</bug_when>
    <thetext>Created attachment 224492
Patch

new patch for EWS - Mac buildfix included and updated to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981884</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-18 04:18:29 -0800</bug_when>
    <thetext>Attachment 224492 did not pass style-queue:


ERROR: Source/WTF/wtf/FastMalloc.cpp:3738:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/FastMalloc.cpp:3809:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/FastMalloc.cpp:3868:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105358</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-06-29 02:33:13 -0700</bug_when>
    <thetext>TCMalloc was removed from trunk with WTF_CHANGES define too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109812</attachid>
            <date>2011-10-05 09:49:37 -0700</date>
            <delta_ts>2014-02-17 10:44:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69435-20111005184935.patch</filename>
            <type>text/plain</type>
            <size>44252</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2ODIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDE5
NGJiZDM0N2IzMDQ0NjU2Yzc0MGQ4ZGJjYWUwYTM2MTU4YjNlZTMuLjc0YzU3NTE5OGE4NzBiMWYx
ZDM3YjZjMmY1NzhiMWU5NTkxY2FiMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDMyIEBACisyMDExLTEwLTA1ICBBbmR5IFdpbmdvICA8d2luZ29AaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZW1vdmUgV1RGX0NIQU5HRVMgZGVmaW5lLCBhcyBpdCBpcyBhbHdheXMgMQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk0MzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbmZpZy5oOgor
ICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNwcDoKKyAgICAgICAgKFdURjo6SW5pdFNpemVDbGFz
c2VzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OlJldHVybmVkQnl0ZXMpOgor
ICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6ZW51bWVyYXRlRnJl
ZU9iamVjdHMpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6ZW51bWVyYXRl
RnJlZU9iamVjdHMpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0Ojpl
bnVtZXJhdGVGcmVlT2JqZWN0cyk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hl
OjpJbml0TW9kdWxlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRU
U0QpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1N0YXRzOjpUQ01hbGxvY0d1YXJkOjpUQ01hbGxv
Y0d1YXJkKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NTdGF0czo6ZG9fbWFsbG9jKToKKyAgICAg
ICAgKFdURjo6VENNYWxsb2NTdGF0czo6bWFsbG9jKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NT
dGF0czo6Y2FsbG9jKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NTdGF0czo6cmVhbGxvYyk6Cisg
ICAgICAgICogd3RmL1RDUGFja2VkQ2FjaGUuaDoKKyAgICAgICAgKiB3dGYvVENQYWdlTWFwLmg6
CisgICAgICAgIChUQ01hbGxvY19QYWdlTWFwMjo6dmlzaXRBbGxvY2F0aW9ucyk6CisgICAgICAg
IChUQ01hbGxvY19QYWdlTWFwMzo6dmlzaXRBbGxvY2F0aW9ucyk6CisgICAgICAgICogd3RmL1RD
U3lzdGVtQWxsb2MuY3BwOgorICAgICAgICAoVENNYWxsb2NfU3lzdGVtQWxsb2MpOiBSZW1vdmUg
dGhlIGRlZmluaXRpb24gb2YgV1RGX0NIQU5HRVMgdG8gMQorICAgICAgICBhbmQgYXNzb2NpYXRl
ZCAjaWZkZWZzLCByZW1vdmluZyB1bnVzZWQgY29kZS4KKwogMjAxMS0xMC0wNCAgS2VudCBUYW11
cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW50cm9kdWNlIGZlYXR1cmUgZmxh
Z3MgZm9yIGluY29tcGxldGUgaW5wdXQgdHlwZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9jb25maWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAppbmRleCA4
NTM2Y2NjYWFjNmVmMjg2NTNkMGMwODExNTVjYjAwNDA2ZDM2YjAwLi4yN2M0NTNhMzQwODMyNTUw
ZDU3ODY3M2ViOTEwYTkwMWEyNDFiMzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvY29uZmlnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCkBAIC05OSw4
ICs5OSw2IEBACiAvKiBGSVhNRTogaWYgYWxsIHBsYXRmb3JtcyBoYXZlIHRoZXNlLCBkbyB0aGV5
IHJlYWxseSBuZWVkICNkZWZpbmVzPyAqLwogI2RlZmluZSBIQVZFX1NURElOVF9IIDEKIAotI2Rl
ZmluZSBXVEZfQ0hBTkdFUyAxCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogI3VuZGVmIG5ldwogI3Vu
ZGVmIGRlbGV0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFs
bG9jLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAKaW5kZXgg
ZjEzZDU0Y2UzYmRlYjI3YzgxMWMxMGJhNzRkZThlZTI1NjY1YzMwNy4uOGEzOGI5ZTA5NmVkODBl
OTA3YzVkNThiZWYzNzQ3YzYwNDU3MzcwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9GYXN0TWFsbG9jLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zh
c3RNYWxsb2MuY3BwCkBAIC04OCwxMCArODgsOCBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogCiAj
aWZuZGVmIE5PX1RDTUFMTE9DX1NBTVBMRVMKLSNpZmRlZiBXVEZfQ0hBTkdFUwogI2RlZmluZSBO
T19UQ01BTExPQ19TQU1QTEVTCiAjZW5kaWYKLSNlbmRpZgogCiAjaWYgIShkZWZpbmVkKFVTRV9T
WVNURU1fTUFMTE9DKSAmJiBVU0VfU1lTVEVNX01BTExPQykgJiYgZGVmaW5lZChOREVCVUcpCiAj
ZGVmaW5lIEZPUkNFX1NZU1RFTV9NQUxMT0MgMApAQCAtNDM0LDggKzQzMiw2IEBAIGV4dGVybiAi
QyIgY29uc3QgaW50IGpzY29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rpb24gPSAwOwogI2luY2x1
ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgogCi0jaWZkZWYgV1RGX0NIQU5HRVMKLQogI2lmIE9TKERB
UldJTikKICNpbmNsdWRlICJNYWxsb2Nab25lU3VwcG9ydC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CkBAIC01MzksMTkgKzUzNSw2IEBAIHByaXZhdGU6CiAKICNlbmRpZgogCi0jZW5kaWYK
LQotI2lmbmRlZiBXVEZfQ0hBTkdFUwotLy8gVGhpcyAjaWZkZWYgc2hvdWxkIGFsbW9zdCBuZXZl
ciBiZSBzZXQuICBTZXQgTk9fVENNQUxMT0NfU0FNUExFUyBpZgotLy8geW91J3JlIHBvcnRpbmcg
dG8gYSBzeXN0ZW0gd2hlcmUgeW91IHJlYWxseSBjYW4ndCBnZXQgYSBzdGFja3RyYWNlLgotI2lm
ZGVmIE5PX1RDTUFMTE9DX1NBTVBMRVMKLS8vIFdlIHVzZSAjZGVmaW5lIHNvIGNvZGUgY29tcGls
ZXMgZXZlbiBpZiB5b3UgI2luY2x1ZGUgc3RhY2t0cmFjZS5oIHNvbWVob3cuCi0jIGRlZmluZSBH
ZXRTdGFja1RyYWNlKHN0YWNrLCBkZXB0aCwgc2tpcCkgICgwKQotI2Vsc2UKLSMgaW5jbHVkZSA8
Z29vZ2xlL3N0YWNrdHJhY2UuaD4KLSNlbmRpZgotI2VuZGlmCi0KIC8vIEV2ZW4gaWYgd2UgaGF2
ZSBzdXBwb3J0IGZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbiB0aGUgY29tcGlsZXIKIC8vIGFu
ZCBsaW5rZXIsIHRoZSBPUyBtYXkgbm90IHN1cHBvcnQgaXQuICBXZSBuZWVkIHRvIGNoZWNrIHRo
YXQgYXQKIC8vIHJ1bnRpbWUuICBSaWdodCBub3csIHdlIGhhdmUgdG8ga2VlcCBhIG1hbnVhbCBz
ZXQgb2YgImJhZCIgT1Nlcy4KQEAgLTk1NCwyNCArOTM3LDYgQEAgc3RhdGljIHZvaWQgSW5pdFNp
emVDbGFzc2VzKCkgewogICAgIG51bV9vYmplY3RzX3RvX21vdmVbY2xdID0gTnVtTW92ZVNpemUo
Qnl0ZVNpemVGb3JDbGFzcyhjbCkpOwogICB9CiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgaWYg
KGZhbHNlKSB7Ci0gICAgLy8gRHVtcCBjbGFzcyBzaXplcyBhbmQgbWF4aW11bSBleHRlcm5hbCB3
YXN0YWdlIHBlciBzaXplIGNsYXNzCi0gICAgZm9yIChzaXplX3QgY2wgPSAxOyBjbCAgPCBrTnVt
Q2xhc3NlczsgKytjbCkgewotICAgICAgY29uc3QgaW50IGFsbG9jX3NpemUgPSBjbGFzc190b19w
YWdlc1tjbF0gPDwga1BhZ2VTaGlmdDsKLSAgICAgIGNvbnN0IGludCBhbGxvY19vYmpzID0gYWxs
b2Nfc2l6ZSAvIGNsYXNzX3RvX3NpemVbY2xdOwotICAgICAgY29uc3QgaW50IG1pbl91c2VkID0g
KGNsYXNzX3RvX3NpemVbY2wtMV0gKyAxKSAqIGFsbG9jX29ianM7Ci0gICAgICBjb25zdCBpbnQg
bWF4X3dhc3RlID0gYWxsb2Nfc2l6ZSAtIG1pbl91c2VkOwotICAgICAgTUVTU0FHRSgiU0MgJTNk
IFsgJThkIC4uICU4ZCBdIGZyb20gJThkIDsgJTIuMGYlJSBtYXh3YXN0ZVxuIiwKLSAgICAgICAg
ICAgICAgaW50KGNsKSwKLSAgICAgICAgICAgICAgaW50KGNsYXNzX3RvX3NpemVbY2wtMV0gKyAx
KSwKLSAgICAgICAgICAgICAgaW50KGNsYXNzX3RvX3NpemVbY2xdKSwKLSAgICAgICAgICAgICAg
aW50KGNsYXNzX3RvX3BhZ2VzW2NsXSA8PCBrUGFnZVNoaWZ0KSwKLSAgICAgICAgICAgICAgbWF4
X3dhc3RlICogMTAwLjAgLyBhbGxvY19zaXplCi0gICAgICAgICAgICAgICk7Ci0gICAgfQotICB9
Ci0jZW5kaWYKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA1Niw3ICsxMDIxLDcgQEAg
Y2xhc3MgUGFnZUhlYXBBbGxvY2F0b3IgewogCiAgIGludCBpbnVzZSgpIGNvbnN0IHsgcmV0dXJu
IGludXNlXzsgfQogCi0jaWYgZGVmaW5lZChXVEZfQ0hBTkdFUykgJiYgT1MoREFSV0lOKQorI2lm
IE9TKERBUldJTikKICAgdGVtcGxhdGUgPGNsYXNzIFJlY29yZGVyPgogICB2b2lkIHJlY29yZEFk
bWluaXN0cmF0aXZlUmVnaW9ucyhSZWNvcmRlciYgcmVjb3JkZXIsIGNvbnN0IFJlbW90ZU1lbW9y
eVJlYWRlciYgcmVhZGVyKQogICB7CkBAIC0xMjM0LDcgKzExOTksNiBAQCB0ZW1wbGF0ZSA8aW50
IEJJVFM+IGNsYXNzIE1hcFNlbGVjdG9yIHsKICAgdHlwZWRlZiBQYWNrZWRDYWNoZTxCSVRTLCB1
aW50NjRfdD4gQ2FjaGVUeXBlOwogfTsKIAotI2lmIGRlZmluZWQoV1RGX0NIQU5HRVMpCiAjaWYg
Q1BVKFg4Nl82NCkKIC8vIE9uIGFsbCBrbm93biBYODYtNjQgcGxhdGZvcm1zLCB0aGUgdXBwZXIg
MTYgYml0cyBhcmUgYWx3YXlzIHVudXNlZCBhbmQgdGhlcmVmb3JlIAogLy8gY2FuIGJlIGV4Y2x1
ZGVkIGZyb20gdGhlIFBhZ2VNYXAga2V5LgpAQCAtMTI1MSw3ICsxMjE1LDYgQEAgdGVtcGxhdGUg
PD4gY2xhc3MgTWFwU2VsZWN0b3I8NjQ+IHsKICAgdHlwZWRlZiBUQ01hbGxvY19QYWdlTWFwMzw2
NCAtIGtQYWdlU2hpZnQgLSBrQml0c1VudXNlZE9uNjRCaXQ+IFR5cGU7CiAgIHR5cGVkZWYgUGFj
a2VkQ2FjaGU8NjQsIHVpbnQ2NF90PiBDYWNoZVR5cGU7CiB9OwotI2VuZGlmCiAKIC8vIEEgdHdv
LWxldmVsIG1hcCBmb3IgMzItYml0IG1hY2hpbmVzCiB0ZW1wbGF0ZSA8PiBjbGFzcyBNYXBTZWxl
Y3RvcjwzMj4gewpAQCAtMTMzNCw3ICsxMjk3LDYgQEAgY2xhc3MgVENNYWxsb2NfUGFnZUhlYXAg
ewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNwYW4qPihwYWdlbWFwXy5nZXQocCkpOwog
ICB9CiAKLSNpZmRlZiBXVEZfQ0hBTkdFUwogICBpbmxpbmUgU3BhbiogR2V0RGVzY3JpcHRvckVu
c3VyZVNhZmUoUGFnZUlEIHApCiAgIHsKICAgICAgIHBhZ2VtYXBfLkVuc3VyZShwLCAxKTsKQEAg
LTEzNDIsMTIgKzEzMDQsNiBAQCBjbGFzcyBUQ01hbGxvY19QYWdlSGVhcCB7CiAgIH0KICAgICAK
ICAgc2l6ZV90IFJldHVybmVkQnl0ZXMoKSBjb25zdDsKLSNlbmRpZgotCi0gIC8vIER1bXAgc3Rh
dGUgdG8gc3RkZXJyCi0jaWZuZGVmIFdURl9DSEFOR0VTCi0gIHZvaWQgRHVtcChUQ01hbGxvY19Q
cmludGVyKiBvdXQpOwotI2VuZGlmCiAKICAgLy8gUmV0dXJuIG51bWJlciBvZiBieXRlcyBhbGxv
Y2F0ZWQgZnJvbSBzeXN0ZW0KICAgaW5saW5lIHVpbnQ2NF90IFN5c3RlbUJ5dGVzKCkgY29uc3Qg
eyByZXR1cm4gc3lzdGVtX2J5dGVzXzsgfQpAQCAtMTQ0NCw3ICsxNDAwLDcgQEAgY2xhc3MgVENN
YWxsb2NfUGFnZUhlYXAgewogICAvLyBJbmRleCBvZiBsYXN0IGZyZWUgbGlzdCB3ZSBzY2F2ZW5n
ZWQKICAgc2l6ZV90IHNjYXZlbmdlX2luZGV4XzsKICAgCi0jaWYgZGVmaW5lZChXVEZfQ0hBTkdF
UykgJiYgT1MoREFSV0lOKQorI2lmIE9TKERBUldJTikKICAgZnJpZW5kIGNsYXNzIEZhc3RNYWxs
b2Nab25lOwogI2VuZGlmCiAKQEAgLTE5ODYsNyArMTk0Miw2IEBAIHZvaWQgVENNYWxsb2NfUGFn
ZUhlYXA6OlJlZ2lzdGVyU2l6ZUNsYXNzKFNwYW4qIHNwYW4sIHNpemVfdCBzYykgewogICB9CiB9
CiAgICAgCi0jaWZkZWYgV1RGX0NIQU5HRVMKIHNpemVfdCBUQ01hbGxvY19QYWdlSGVhcDo6UmV0
dXJuZWRCeXRlcygpIGNvbnN0IHsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICBmb3IgKHVu
c2lnbmVkIHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspIHsKQEAgLTE5OTksNzQgKzE5NTQsNiBA
QCBzaXplX3QgVENNYWxsb2NfUGFnZUhlYXA6OlJldHVybmVkQnl0ZXMoKSBjb25zdCB7CiAgICAg
ICAgIHJlc3VsdCArPSBzLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsKICAgICByZXR1cm4gcmVzdWx0
OwogfQotI2VuZGlmCi0KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0YXRpYyBkb3VibGUgUGFnZXNU
b01CKHVpbnQ2NF90IHBhZ2VzKSB7Ci0gIHJldHVybiAocGFnZXMgPDwga1BhZ2VTaGlmdCkgLyAx
MDQ4NTc2LjA7Ci19Ci0KLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OkR1bXAoVENNYWxsb2NfUHJp
bnRlciogb3V0KSB7Ci0gIGludCBub25lbXB0eV9zaXplcyA9IDA7Ci0gIGZvciAoaW50IHMgPSAw
OyBzIDwga01heFBhZ2VzOyBzKyspIHsKLSAgICBpZiAoIURMTF9Jc0VtcHR5KCZmcmVlX1tzXS5u
b3JtYWwpIHx8ICFETExfSXNFbXB0eSgmZnJlZV9bc10ucmV0dXJuZWQpKSB7Ci0gICAgICBub25l
bXB0eV9zaXplcysrOwotICAgIH0KLSAgfQotICBvdXQtPnByaW50ZigiLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgb3V0LT5wcmludGYoIlBh
Z2VIZWFwOiAlZCBzaXplczsgJTYuMWYgTUIgZnJlZVxuIiwKLSAgICAgICAgICAgICAgbm9uZW1w
dHlfc2l6ZXMsIFBhZ2VzVG9NQihmcmVlX3BhZ2VzXykpOwotICBvdXQtPnByaW50ZigiLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgdWludDY0
X3QgdG90YWxfbm9ybWFsID0gMDsKLSAgdWludDY0X3QgdG90YWxfcmV0dXJuZWQgPSAwOwotICBm
b3IgKGludCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7Ci0gICAgY29uc3QgaW50IG5fbGVu
Z3RoID0gRExMX0xlbmd0aCgmZnJlZV9bc10ubm9ybWFsKTsKLSAgICBjb25zdCBpbnQgcl9sZW5n
dGggPSBETExfTGVuZ3RoKCZmcmVlX1tzXS5yZXR1cm5lZCk7Ci0gICAgaWYgKG5fbGVuZ3RoICsg
cl9sZW5ndGggPiAwKSB7Ci0gICAgICB1aW50NjRfdCBuX3BhZ2VzID0gcyAqIG5fbGVuZ3RoOwot
ICAgICAgdWludDY0X3Qgcl9wYWdlcyA9IHMgKiByX2xlbmd0aDsKLSAgICAgIHRvdGFsX25vcm1h
bCArPSBuX3BhZ2VzOwotICAgICAgdG90YWxfcmV0dXJuZWQgKz0gcl9wYWdlczsKLSAgICAgIG91
dC0+cHJpbnRmKCIlNnUgcGFnZXMgKiAlNnUgc3BhbnMgfiAlNi4xZiBNQjsgJTYuMWYgTUIgY3Vt
IgotICAgICAgICAgICAgICAgICAgIjsgdW5tYXBwZWQ6ICU2LjFmIE1COyAlNi4xZiBNQiBjdW1c
biIsCi0gICAgICAgICAgICAgICAgICBzLAotICAgICAgICAgICAgICAgICAgKG5fbGVuZ3RoICsg
cl9sZW5ndGgpLAotICAgICAgICAgICAgICAgICAgUGFnZXNUb01CKG5fcGFnZXMgKyByX3BhZ2Vz
KSwKLSAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQih0b3RhbF9ub3JtYWwgKyB0b3RhbF9yZXR1
cm5lZCksCi0gICAgICAgICAgICAgICAgICBQYWdlc1RvTUIocl9wYWdlcyksCi0gICAgICAgICAg
ICAgICAgICBQYWdlc1RvTUIodG90YWxfcmV0dXJuZWQpKTsKLSAgICB9Ci0gIH0KLQotICB1aW50
NjRfdCBuX3BhZ2VzID0gMDsKLSAgdWludDY0X3Qgcl9wYWdlcyA9IDA7Ci0gIGludCBuX3NwYW5z
ID0gMDsKLSAgaW50IHJfc3BhbnMgPSAwOwotICBvdXQtPnByaW50ZigiTm9ybWFsIGxhcmdlIHNw
YW5zOlxuIik7Ci0gIGZvciAoU3BhbiogcyA9IGxhcmdlXy5ub3JtYWwubmV4dDsgcyAhPSAmbGFy
Z2VfLm5vcm1hbDsgcyA9IHMtPm5leHQpIHsKLSAgICBvdXQtPnByaW50ZigiICAgWyAlNiIgUFJJ
dVMgIiBwYWdlcyBdICU2LjFmIE1CXG4iLAotICAgICAgICAgICAgICAgIHMtPmxlbmd0aCwgUGFn
ZXNUb01CKHMtPmxlbmd0aCkpOwotICAgIG5fcGFnZXMgKz0gcy0+bGVuZ3RoOwotICAgIG5fc3Bh
bnMrKzsKLSAgfQotICBvdXQtPnByaW50ZigiVW5tYXBwZWQgbGFyZ2Ugc3BhbnM6XG4iKTsKLSAg
Zm9yIChTcGFuKiBzID0gbGFyZ2VfLnJldHVybmVkLm5leHQ7IHMgIT0gJmxhcmdlXy5yZXR1cm5l
ZDsgcyA9IHMtPm5leHQpIHsKLSAgICBvdXQtPnByaW50ZigiICAgWyAlNiIgUFJJdVMgIiBwYWdl
cyBdICU2LjFmIE1CXG4iLAotICAgICAgICAgICAgICAgIHMtPmxlbmd0aCwgUGFnZXNUb01CKHMt
Pmxlbmd0aCkpOwotICAgIHJfcGFnZXMgKz0gcy0+bGVuZ3RoOwotICAgIHJfc3BhbnMrKzsKLSAg
fQotICB0b3RhbF9ub3JtYWwgKz0gbl9wYWdlczsKLSAgdG90YWxfcmV0dXJuZWQgKz0gcl9wYWdl
czsKLSAgb3V0LT5wcmludGYoIj4yNTUgICBsYXJnZSAqICU2dSBzcGFucyB+ICU2LjFmIE1COyAl
Ni4xZiBNQiBjdW0iCi0gICAgICAgICAgICAgICI7IHVubWFwcGVkOiAlNi4xZiBNQjsgJTYuMWYg
TUIgY3VtXG4iLAotICAgICAgICAgICAgICAobl9zcGFucyArIHJfc3BhbnMpLAotICAgICAgICAg
ICAgICBQYWdlc1RvTUIobl9wYWdlcyArIHJfcGFnZXMpLAotICAgICAgICAgICAgICBQYWdlc1Rv
TUIodG90YWxfbm9ybWFsICsgdG90YWxfcmV0dXJuZWQpLAotICAgICAgICAgICAgICBQYWdlc1Rv
TUIocl9wYWdlcyksCi0gICAgICAgICAgICAgIFBhZ2VzVG9NQih0b3RhbF9yZXR1cm5lZCkpOwot
fQotI2VuZGlmCiAKIGJvb2wgVENNYWxsb2NfUGFnZUhlYXA6Okdyb3dIZWFwKExlbmd0aCBuKSB7
CiAgIEFTU0VSVChrTWF4UGFnZXMgPj0ga01pblN5c3RlbUFsbG9jKTsKQEAgLTIyNTQsMTQgKzIx
NDEsMTIgQEAgY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGVfRnJlZUxpc3QgewogICAgIHJldHVy
biBTTExfUG9wKCZsaXN0Xyk7CiAgIH0KIAotI2lmZGVmIFdURl9DSEFOR0VTCiAgIHRlbXBsYXRl
IDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KICAgdm9pZCBlbnVtZXJhdGVGcmVlT2JqZWN0
cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFkZXIpCiAgIHsKICAgICAgIGZvciAo
dm9pZCogbmV4dE9iamVjdCA9IGxpc3RfOyBuZXh0T2JqZWN0OyBuZXh0T2JqZWN0ID0gcmVhZGVy
Lm5leHRFbnRyeUluTGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4obmV4dE9iamVj
dCkpKQogICAgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKICAgfQotI2VuZGlmCiB9
OwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzMzAsMTQgKzIyMTUsMTIgQEAgY2xhc3MgVENNYWxsb2Nf
VGhyZWFkQ2FjaGUgewogICBzdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgIEJlY29tZUlkbGUo
KTsKICAgc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICBSZWNvbXB1dGVUaHJlYWRDYWNoZVNp
emUoKTsKIAotI2lmZGVmIFdURl9DSEFOR0VTCiAgIHRlbXBsYXRlIDxjbGFzcyBGaW5kZXIsIGNs
YXNzIFJlYWRlcj4KICAgdm9pZCBlbnVtZXJhdGVGcmVlT2JqZWN0cyhGaW5kZXImIGZpbmRlciwg
Y29uc3QgUmVhZGVyJiByZWFkZXIpCiAgIHsKICAgICAgIGZvciAodW5zaWduZWQgc2l6ZUNsYXNz
ID0gMDsgc2l6ZUNsYXNzIDwga051bUNsYXNzZXM7IHNpemVDbGFzcysrKQogICAgICAgICAgIGxp
c3RfW3NpemVDbGFzc10uZW51bWVyYXRlRnJlZU9iamVjdHMoZmluZGVyLCByZWFkZXIpOwogICB9
Ci0jZW5kaWYKIH07CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjM2OSw3ICsyMjUyLDYgQEAgY2xhc3Mg
VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCB7CiAgICAgcmV0dXJuIHVzZWRfc2xvdHNfICogbnVt
X29iamVjdHNfdG9fbW92ZVtzaXplX2NsYXNzX107CiAgIH0KIAotI2lmZGVmIFdURl9DSEFOR0VT
CiAgIHRlbXBsYXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KICAgdm9pZCBlbnVtZXJh
dGVGcmVlT2JqZWN0cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFkZXIsIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3QqIHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkKICAgewpAQCAtMjM4
Nyw3ICsyMjY5LDYgQEAgY2xhc3MgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCB7CiAgICAgICAg
IGZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKICAgICB9CiAgIH0KLSNlbmRpZgogCiAgcHJpdmF0
ZToKICAgLy8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKQEAgLTMwNTgsOSArMjkzOSw3IEBAIHZv
aWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUoKSB7CiAgIC8vIG9iamVjdCBkZWNs
YXJlZCBiZWxvdy4KICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CiAgIGlmICgh
cGhpbml0ZWQpIHsKLSNpZmRlZiBXVEZfQ0hBTkdFUwogICAgIEluaXRUU0QoKTsKLSNlbmRpZgog
ICAgIEluaXRTaXplQ2xhc3NlcygpOwogICAgIHRocmVhZGhlYXBfYWxsb2NhdG9yLkluaXQoKTsK
ICAgICBzcGFuX2FsbG9jYXRvci5Jbml0KCk7CkBAIC0zMDczLDcgKzI5NTIsNyBAQCB2b2lkIFRD
TWFsbG9jX1RocmVhZENhY2hlOjpJbml0TW9kdWxlKCkgewogICAgIH0KICAgICBwYWdlaGVhcC0+
aW5pdCgpOwogICAgIHBoaW5pdGVkID0gMTsKLSNpZiBkZWZpbmVkKFdURl9DSEFOR0VTKSAmJiBP
UyhEQVJXSU4pCisjaWYgT1MoREFSV0lOKQogICAgIEZhc3RNYWxsb2Nab25lOjppbml0KCk7CiAj
ZW5kaWYKICAgfQpAQCAtMzE0MSwxMSArMzAyMCw3IEBAIHZvaWQgVENNYWxsb2NfVGhyZWFkQ2Fj
aGU6OkluaXRUU0QoKSB7CiAgIHB0aHJlYWRfdCB6ZXJvOwogICBtZW1zZXQoJnplcm8sIDAsIHNp
emVvZih6ZXJvKSk7CiAjZW5kaWYKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgU3BpbkxvY2tIb2xk
ZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0jZWxzZQogICBBU1NFUlQocGFnZWhlYXBfbG9jay5Jc0hl
bGQoKSk7Ci0jZW5kaWYKICAgZm9yIChUQ01hbGxvY19UaHJlYWRDYWNoZSogaCA9IHRocmVhZF9o
ZWFwczsgaCAhPSBOVUxMOyBoID0gaC0+bmV4dF8pIHsKICNpZiBPUyhXSU5ET1dTKQogICAgIGlm
IChoLT50aWRfID09IDApIHsKQEAgLTMyOTEsMjQzICszMTY2LDYgQEAgc3RydWN0IFRDTWFsbG9j
U3RhdHMgewogICB1aW50NjRfdCBtZXRhZGF0YV9ieXRlczsgICAgICAvLyBCeXRlcyBhbGxvY2Vk
IGZvciBtZXRhZGF0YQogfTsKIAotI2lmbmRlZiBXVEZfQ0hBTkdFUwotLy8gR2V0IHN0YXRzIGlu
dG8gInIiLiAgQWxzbyBnZXQgcGVyLXNpemUtY2xhc3MgY291bnRzIGlmIGNsYXNzX2NvdW50ICE9
IE5VTEwKLXN0YXRpYyB2b2lkIEV4dHJhY3RTdGF0cyhUQ01hbGxvY1N0YXRzKiByLCB1aW50NjRf
dCogY2xhc3NfY291bnQpIHsKLSAgci0+Y2VudHJhbF9ieXRlcyA9IDA7Ci0gIHItPnRyYW5zZmVy
X2J5dGVzID0gMDsKLSAgZm9yIChpbnQgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7
Ci0gICAgY29uc3QgaW50IGxlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLmxlbmd0aCgpOwotICAg
IGNvbnN0IGludCB0Y19sZW5ndGggPSBjZW50cmFsX2NhY2hlW2NsXS50Y19sZW5ndGgoKTsKLSAg
ICByLT5jZW50cmFsX2J5dGVzICs9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihCeXRlU2l6ZUZvckNs
YXNzKGNsKSkgKiBsZW5ndGg7Ci0gICAgci0+dHJhbnNmZXJfYnl0ZXMgKz0KLSAgICAgIHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihCeXRlU2l6ZUZvckNsYXNzKGNsKSkgKiB0Y19sZW5ndGg7Ci0gICAg
aWYgKGNsYXNzX2NvdW50KSBjbGFzc19jb3VudFtjbF0gPSBsZW5ndGggKyB0Y19sZW5ndGg7Ci0g
IH0KLQotICAvLyBBZGQgc3RhdHMgZnJvbSBwZXItdGhyZWFkIGhlYXBzCi0gIHItPnRocmVhZF9i
eXRlcyA9IDA7Ci0gIHsgLy8gc2NvcGUKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9s
b2NrKTsKLSAgICBmb3IgKFRDTWFsbG9jX1RocmVhZENhY2hlKiBoID0gdGhyZWFkX2hlYXBzOyBo
ICE9IE5VTEw7IGggPSBoLT5uZXh0XykgewotICAgICAgci0+dGhyZWFkX2J5dGVzICs9IGgtPlNp
emUoKTsKLSAgICAgIGlmIChjbGFzc19jb3VudCkgewotICAgICAgICBmb3IgKHNpemVfdCBjbCA9
IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICAgICAgICBjbGFzc19jb3VudFtjbF0g
Kz0gaC0+ZnJlZWxpc3RfbGVuZ3RoKGNsKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAg
fQotCi0gIHsgLy9zY29wZQotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwot
ICAgIHItPnN5c3RlbV9ieXRlcyA9IHBhZ2VoZWFwLT5TeXN0ZW1CeXRlcygpOwotICAgIHItPm1l
dGFkYXRhX2J5dGVzID0gbWV0YWRhdGFfc3lzdGVtX2J5dGVzOwotICAgIHItPnBhZ2VoZWFwX2J5
dGVzID0gcGFnZWhlYXAtPkZyZWVCeXRlcygpOwotICB9Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBX
VEZfQ0hBTkdFUwotLy8gV1JJVEUgc3RhdHMgdG8gIm91dCIKLXN0YXRpYyB2b2lkIER1bXBTdGF0
cyhUQ01hbGxvY19QcmludGVyKiBvdXQsIGludCBsZXZlbCkgewotICBUQ01hbGxvY1N0YXRzIHN0
YXRzOwotICB1aW50NjRfdCBjbGFzc19jb3VudFtrTnVtQ2xhc3Nlc107Ci0gIEV4dHJhY3RTdGF0
cygmc3RhdHMsIChsZXZlbCA+PSAyID8gY2xhc3NfY291bnQgOiBOVUxMKSk7Ci0KLSAgaWYgKGxl
dmVsID49IDIpIHsKLSAgICBvdXQtPnByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgICB1aW50NjRfdCBjdW11bGF0aXZlID0gMDsK
LSAgICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICAgIGlm
IChjbGFzc19jb3VudFtjbF0gPiAwKSB7Ci0gICAgICAgIHVpbnQ2NF90IGNsYXNzX2J5dGVzID0g
Y2xhc3NfY291bnRbY2xdICogQnl0ZVNpemVGb3JDbGFzcyhjbCk7Ci0gICAgICAgIGN1bXVsYXRp
dmUgKz0gY2xhc3NfYnl0ZXM7Ci0gICAgICAgIG91dC0+cHJpbnRmKCJjbGFzcyAlM2QgWyAlOCIg
UFJJdVMgIiBieXRlcyBdIDogIgotICAgICAgICAgICAgICAgICIlOCIgUFJJdTY0ICIgb2Jqczsg
JTUuMWYgTUI7ICU1LjFmIGN1bSBNQlxuIiwKLSAgICAgICAgICAgICAgICBjbCwgQnl0ZVNpemVG
b3JDbGFzcyhjbCksCi0gICAgICAgICAgICAgICAgY2xhc3NfY291bnRbY2xdLAotICAgICAgICAg
ICAgICAgIGNsYXNzX2J5dGVzIC8gMTA0ODU3Ni4wLAotICAgICAgICAgICAgICAgIGN1bXVsYXRp
dmUgLyAxMDQ4NTc2LjApOwotICAgICAgfQotICAgIH0KLQotICAgIFNwaW5Mb2NrSG9sZGVyIGgo
JnBhZ2VoZWFwX2xvY2spOwotICAgIHBhZ2VoZWFwLT5EdW1wKG91dCk7Ci0gIH0KLQotICBjb25z
dCB1aW50NjRfdCBieXRlc19pbl91c2UgPSBzdGF0cy5zeXN0ZW1fYnl0ZXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5wYWdlaGVhcF9ieXRlcwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLmNlbnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLSBzdGF0cy50cmFuc2Zlcl9ieXRlcwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtIHN0YXRzLnRocmVhZF9ieXRlczsKLQotICBvdXQtPnByaW50Zigi
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0gICAg
ICAgICAgICAgICJNQUxMT0M6ICUxMiIgUFJJdTY0ICIgSGVhcCBzaXplXG4iCi0gICAgICAgICAg
ICAgICJNQUxMT0M6ICUxMiIgUFJJdTY0ICIgQnl0ZXMgaW4gdXNlIGJ5IGFwcGxpY2F0aW9uXG4i
Ci0gICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIgUFJJdTY0ICIgQnl0ZXMgZnJlZSBpbiBwYWdl
IGhlYXBcbiIKLSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVl
IGluIGNlbnRyYWwgY2FjaGVcbiIKLSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQg
IiBCeXRlcyBmcmVlIGluIHRyYW5zZmVyIGNhY2hlXG4iCi0gICAgICAgICAgICAgICJNQUxMT0M6
ICUxMiIgUFJJdTY0ICIgQnl0ZXMgZnJlZSBpbiB0aHJlYWQgY2FjaGVzXG4iCi0gICAgICAgICAg
ICAgICJNQUxMT0M6ICUxMiIgUFJJdTY0ICIgU3BhbnMgaW4gdXNlXG4iCi0gICAgICAgICAgICAg
ICJNQUxMT0M6ICUxMiIgUFJJdTY0ICIgVGhyZWFkIGhlYXBzIGluIHVzZVxuIgotICAgICAgICAg
ICAgICAiTUFMTE9DOiAlMTIiIFBSSXU2NCAiIE1ldGFkYXRhIGFsbG9jYXRlZFxuIgotICAgICAg
ICAgICAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
XG4iLAotICAgICAgICAgICAgICBzdGF0cy5zeXN0ZW1fYnl0ZXMsCi0gICAgICAgICAgICAgIGJ5
dGVzX2luX3VzZSwKLSAgICAgICAgICAgICAgc3RhdHMucGFnZWhlYXBfYnl0ZXMsCi0gICAgICAg
ICAgICAgIHN0YXRzLmNlbnRyYWxfYnl0ZXMsCi0gICAgICAgICAgICAgIHN0YXRzLnRyYW5zZmVy
X2J5dGVzLAotICAgICAgICAgICAgICBzdGF0cy50aHJlYWRfYnl0ZXMsCi0gICAgICAgICAgICAg
IHVpbnQ2NF90KHNwYW5fYWxsb2NhdG9yLmludXNlKCkpLAotICAgICAgICAgICAgICB1aW50NjRf
dCh0aHJlYWRoZWFwX2FsbG9jYXRvci5pbnVzZSgpKSwKLSAgICAgICAgICAgICAgc3RhdHMubWV0
YWRhdGFfYnl0ZXMpOwotfQotCi1zdGF0aWMgdm9pZCBQcmludFN0YXRzKGludCBsZXZlbCkgewot
ICBjb25zdCBpbnQga0J1ZmZlclNpemUgPSAxNiA8PCAxMDsKLSAgY2hhciogYnVmZmVyID0gbmV3
IGNoYXJba0J1ZmZlclNpemVdOwotICBUQ01hbGxvY19QcmludGVyIHByaW50ZXIoYnVmZmVyLCBr
QnVmZmVyU2l6ZSk7Ci0gIER1bXBTdGF0cygmcHJpbnRlciwgbGV2ZWwpOwotICB3cml0ZShTVERF
UlJfRklMRU5PLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKLSAgZGVsZXRlW10gYnVmZmVyOwot
fQotCi1zdGF0aWMgdm9pZCoqIER1bXBTdGFja1RyYWNlcygpIHsKLSAgLy8gQ291bnQgaG93IG11
Y2ggc3BhY2Ugd2UgbmVlZAotICBpbnQgbmVlZGVkX3Nsb3RzID0gMDsKLSAgewotICAgIFNwaW5M
b2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAgIGZvciAoU3BhbiogcyA9IHNhbXBsZWRf
b2JqZWN0cy5uZXh0OyBzICE9ICZzYW1wbGVkX29iamVjdHM7IHMgPSBzLT5uZXh0KSB7Ci0gICAg
ICBTdGFja1RyYWNlKiBzdGFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHMtPm9i
amVjdHMpOwotICAgICAgbmVlZGVkX3Nsb3RzICs9IDMgKyBzdGFjay0+ZGVwdGg7Ci0gICAgfQot
ICAgIG5lZWRlZF9zbG90cyArPSAxMDA7ICAgICAgICAgICAgLy8gU2xvcCBpbiBjYXNlIHNhbXBs
ZSBncm93cwotICAgIG5lZWRlZF9zbG90cyArPSBuZWVkZWRfc2xvdHMvODsgLy8gQW4gZXh0cmEg
MTIuNSUgc2xvcAotICB9Ci0KLSAgdm9pZCoqIHJlc3VsdCA9IG5ldyB2b2lkKltuZWVkZWRfc2xv
dHNdOwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICBNRVNTQUdFKCJ0Y21hbGxvYzogY291
bGQgbm90IGFsbG9jYXRlICVkIHNsb3RzIGZvciBzdGFjayB0cmFjZXNcbiIsCi0gICAgICAgICAg
ICBuZWVkZWRfc2xvdHMpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgU3BpbkxvY2tIb2xk
ZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gIGludCB1c2VkX3Nsb3RzID0gMDsKLSAgZm9yIChTcGFu
KiBzID0gc2FtcGxlZF9vYmplY3RzLm5leHQ7IHMgIT0gJnNhbXBsZWRfb2JqZWN0czsgcyA9IHMt
Pm5leHQpIHsKLSAgICBBU1NFUlQodXNlZF9zbG90cyA8IG5lZWRlZF9zbG90cyk7ICAvLyBOZWVk
IHRvIGxlYXZlIHJvb20gZm9yIHRlcm1pbmF0b3IKLSAgICBTdGFja1RyYWNlKiBzdGFjayA9IHJl
aW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHMtPm9iamVjdHMpOwotICAgIGlmICh1c2VkX3Ns
b3RzICsgMyArIHN0YWNrLT5kZXB0aCA+PSBuZWVkZWRfc2xvdHMpIHsKLSAgICAgIC8vIE5vIG1v
cmUgcm9vbQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmVzdWx0W3VzZWRfc2xvdHMrMF0g
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsKLSAg
ICByZXN1bHRbdXNlZF9zbG90cysxXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNrLT5z
aXplKTsKLSAgICByZXN1bHRbdXNlZF9zbG90cysyXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHN0YWNrLT5kZXB0aCk7Ci0gICAgZm9yIChpbnQgZCA9IDA7IGQgPCBzdGFjay0+ZGVwdGg7IGQr
KykgewotICAgICAgcmVzdWx0W3VzZWRfc2xvdHMrMytkXSA9IHN0YWNrLT5zdGFja1tkXTsKLSAg
ICB9Ci0gICAgdXNlZF9zbG90cyArPSAzICsgc3RhY2stPmRlcHRoOwotICB9Ci0gIHJlc3VsdFt1
c2VkX3Nsb3RzXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oMCkpOwotICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLSNpZm5kZWYgV1RGX0NIQU5H
RVMKLQotLy8gVENNYWxsb2MncyBzdXBwb3J0IGZvciBleHRyYSBtYWxsb2MgaW50ZXJmYWNlcwot
Y2xhc3MgVENNYWxsb2NJbXBsZW1lbnRhdGlvbiA6IHB1YmxpYyBNYWxsb2NFeHRlbnNpb24gewot
IHB1YmxpYzoKLSAgdmlydHVhbCB2b2lkIEdldFN0YXRzKGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZl
cl9sZW5ndGgpIHsKLSAgICBBU1NFUlQoYnVmZmVyX2xlbmd0aCA+IDApOwotICAgIFRDTWFsbG9j
X1ByaW50ZXIgcHJpbnRlcihidWZmZXIsIGJ1ZmZlcl9sZW5ndGgpOwotCi0gICAgLy8gUHJpbnQg
bGV2ZWwgb25lIHN0YXRzIHVubGVzcyBsb3RzIG9mIHNwYWNlIGlzIGF2YWlsYWJsZQotICAgIGlm
IChidWZmZXJfbGVuZ3RoIDwgMTAwMDApIHsKLSAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMik7Ci0gICAgfQotICB9
Ci0KLSAgdmlydHVhbCB2b2lkKiogUmVhZFN0YWNrVHJhY2VzKCkgewotICAgIHJldHVybiBEdW1w
U3RhY2tUcmFjZXMoKTsKLSAgfQotCi0gIHZpcnR1YWwgYm9vbCBHZXROdW1lcmljUHJvcGVydHko
Y29uc3QgY2hhciogbmFtZSwgc2l6ZV90KiB2YWx1ZSkgewotICAgIEFTU0VSVChuYW1lICE9IE5V
TEwpOwotCi0gICAgaWYgKHN0cmNtcChuYW1lLCAiZ2VuZXJpYy5jdXJyZW50X2FsbG9jYXRlZF9i
eXRlcyIpID09IDApIHsKLSAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7Ci0gICAgICBFeHRyYWN0
U3RhdHMoJnN0YXRzLCBOVUxMKTsKLSAgICAgICp2YWx1ZSA9IHN0YXRzLnN5c3RlbV9ieXRlcwot
ICAgICAgICAgICAgICAgLSBzdGF0cy50aHJlYWRfYnl0ZXMKLSAgICAgICAgICAgICAgIC0gc3Rh
dHMuY2VudHJhbF9ieXRlcwotICAgICAgICAgICAgICAgLSBzdGF0cy5wYWdlaGVhcF9ieXRlczsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAobmFtZSwgImdlbmVy
aWMuaGVhcF9zaXplIikgPT0gMCkgewotICAgICAgVENNYWxsb2NTdGF0cyBzdGF0czsKLSAgICAg
IEV4dHJhY3RTdGF0cygmc3RhdHMsIE5VTEwpOwotICAgICAgKnZhbHVlID0gc3RhdHMuc3lzdGVt
X2J5dGVzOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcChuYW1l
LCAidGNtYWxsb2Muc2xhY2tfYnl0ZXMiKSA9PSAwKSB7Ci0gICAgICAvLyBXZSBhc3N1bWUgdGhh
dCBieXRlcyBpbiB0aGUgcGFnZSBoZWFwIGFyZSBub3QgZnJhZ21lbnRlZCB0b28KLSAgICAgIC8v
IGJhZGx5LCBhbmQgYXJlIHRoZXJlZm9yZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uCi0gICAg
ICBTcGluTG9ja0hvbGRlciBsKCZwYWdlaGVhcF9sb2NrKTsKLSAgICAgICp2YWx1ZSA9IHBhZ2Vo
ZWFwLT5GcmVlQnl0ZXMoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChz
dHJjbXAobmFtZSwgInRjbWFsbG9jLm1heF90b3RhbF90aHJlYWRfY2FjaGVfYnl0ZXMiKSA9PSAw
KSB7Ci0gICAgICBTcGluTG9ja0hvbGRlciBsKCZwYWdlaGVhcF9sb2NrKTsKLSAgICAgICp2YWx1
ZSA9IG92ZXJhbGxfdGhyZWFkX2NhY2hlX3NpemU7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5jdXJyZW50X3RvdGFsX3RocmVhZF9j
YWNoZV9ieXRlcyIpID09IDApIHsKLSAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7Ci0gICAgICBF
eHRyYWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsKLSAgICAgICp2YWx1ZSA9IHN0YXRzLnRocmVhZF9i
eXRlczsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0gIHZpcnR1YWwgYm9vbCBTZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwg
c2l6ZV90IHZhbHVlKSB7Ci0gICAgQVNTRVJUKG5hbWUgIT0gTlVMTCk7Ci0KLSAgICBpZiAoc3Ry
Y21wKG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikgPT0gMCkg
ewotICAgICAgLy8gQ2xpcCB0aGUgdmFsdWUgdG8gYSByZWFzb25hYmxlIHJhbmdlCi0gICAgICBp
ZiAodmFsdWUgPCBrTWluVGhyZWFkQ2FjaGVTaXplKSB2YWx1ZSA9IGtNaW5UaHJlYWRDYWNoZVNp
emU7Ci0gICAgICBpZiAodmFsdWUgPiAoMTw8MzApKSB2YWx1ZSA9ICgxPDwzMCk7ICAgICAvLyBM
aW1pdCB0byAxR0IKLQotICAgICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0g
ICAgICBvdmVyYWxsX3RocmVhZF9jYWNoZV9zaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1
ZSk7Ci0gICAgICBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UmVjb21wdXRlVGhyZWFkQ2FjaGVTaXpl
KCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LQotICB2aXJ0dWFsIHZvaWQgTWFya1RocmVhZElkbGUoKSB7Ci0gICAgVENNYWxsb2NfVGhyZWFk
Q2FjaGU6OkJlY29tZUlkbGUoKTsKLSAgfQotCi0gIHZpcnR1YWwgdm9pZCBSZWxlYXNlRnJlZU1l
bW9yeSgpIHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBwYWdl
aGVhcC0+UmVsZWFzZUZyZWVQYWdlcygpOwotICB9Ci19OwotI2VuZGlmCi0KIC8vIFRoZSBjb25z
dHJ1Y3RvciBhbGxvY2F0ZXMgYW4gb2JqZWN0IHRvIGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9u
CiAvLyBydW5zIGJlZm9yZSBtYWluKCksIGFuZCB0aGVyZWZvcmUgd2UgZG8gbm90IGhhdmUgYSBj
aGFuY2UgdG8gYmVjb21lCiAvLyBtdWx0aS10aHJlYWRlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24u
ICBXZSBhbHNvIGNyZWF0ZSB0aGUgVFNEIGtleQpAQCAtMzU0OCw3NSArMzE4NiwxOCBAQCBjbGFz
cyBUQ01hbGxvY0d1YXJkIHsKICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBrZXJuZWwgYWxzbyBz
dXBwb3J0cyBUTFMgKG5lZWRzIHRvIGhhcHBlbiBhdCBydW50aW1lKQogICAgIENoZWNrSWZLZXJu
ZWxTdXBwb3J0c1RMUygpOwogI2VuZGlmCi0jaWZuZGVmIFdURl9DSEFOR0VTCi0jaWZkZWYgV0lO
MzIgICAgICAgICAgICAgICAgICAgIC8vIHBhdGNoIHRoZSB3aW5kb3dzIFZpcnR1YWxBbGxvYywg
ZXRjLgotICAgIFBhdGNoV2luZG93c0Z1bmN0aW9ucygpOyAgICAvLyBkZWZpbmVkIGluIHdpbmRv
d3MvcGF0Y2hfZnVuY3Rpb25zLmNjCi0jZW5kaWYKLSNlbmRpZgogICAgIGZyZWUobWFsbG9jKDEp
KTsKICAgICBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdFRTRCgpOwogICAgIGZyZWUobWFsbG9j
KDEpKTsKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgICBNYWxsb2NFeHRlbnNpb246OlJlZ2lzdGVy
KG5ldyBUQ01hbGxvY0ltcGxlbWVudGF0aW9uKTsKLSNlbmRpZgogICB9CiAKLSNpZm5kZWYgV1RG
X0NIQU5HRVMKLSAgflRDTWFsbG9jR3VhcmQoKSB7Ci0gICAgY29uc3QgY2hhciogZW52ID0gZ2V0
ZW52KCJNQUxMT0NTVEFUUyIpOwotICAgIGlmIChlbnYgIT0gTlVMTCkgewotICAgICAgaW50IGxl
dmVsID0gYXRvaShlbnYpOwotICAgICAgaWYgKGxldmVsIDwgMSkgbGV2ZWwgPSAxOwotICAgICAg
UHJpbnRTdGF0cyhsZXZlbCk7Ci0gICAgfQotI2lmZGVmIFdJTjMyCi0gICAgVW5wYXRjaFdpbmRv
d3NGdW5jdGlvbnMoKTsKLSNlbmRpZgotICB9Ci0jZW5kaWYKIH07CiAKLSNpZm5kZWYgV1RGX0NI
QU5HRVMKLXN0YXRpYyBUQ01hbGxvY0d1YXJkIG1vZHVsZV9lbnRlcl9leGl0X2hvb2s7Ci0jZW5k
aWYKLQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEhlbHBlcnMgZm9yIHRoZSBleHBvcnRlZCByb3V0aW5l
cyBiZWxvdwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLQotc3RhdGljIFNw
YW4qIERvU2FtcGxlZEFsbG9jYXRpb24oc2l6ZV90IHNpemUpIHsKLQotICAvLyBHcmFiIHRoZSBz
dGFjayB0cmFjZSBvdXRzaWRlIHRoZSBoZWFwIGxvY2sKLSAgU3RhY2tUcmFjZSB0bXA7Ci0gIHRt
cC5kZXB0aCA9IEdldFN0YWNrVHJhY2UodG1wLnN0YWNrLCBrTWF4U3RhY2tEZXB0aCwgMSk7Ci0g
IHRtcC5zaXplID0gc2l6ZTsKLQotICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsK
LSAgLy8gQWxsb2NhdGUgc3BhbgotICBTcGFuICpzcGFuID0gcGFnZWhlYXAtPk5ldyhwYWdlcyhz
aXplID09IDAgPyAxIDogc2l6ZSkpOwotICBpZiAoc3BhbiA9PSBOVUxMKSB7Ci0gICAgcmV0dXJu
IE5VTEw7Ci0gIH0KLQotICAvLyBBbGxvY2F0ZSBzdGFjayB0cmFjZQotICBTdGFja1RyYWNlICpz
dGFjayA9IHN0YWNrdHJhY2VfYWxsb2NhdG9yLk5ldygpOwotICBpZiAoc3RhY2sgPT0gTlVMTCkg
ewotICAgIC8vIFNhbXBsaW5nIGZhaWxlZCBiZWNhdXNlIG9mIGxhY2sgb2YgbWVtb3J5Ci0gICAg
cmV0dXJuIHNwYW47Ci0gIH0KLQotICAqc3RhY2sgPSB0bXA7Ci0gIHNwYW4tPnNhbXBsZSA9IDE7
Ci0gIHNwYW4tPm9iamVjdHMgPSBzdGFjazsKLSAgRExMX1ByZXBlbmQoJnNhbXBsZWRfb2JqZWN0
cywgc3Bhbik7Ci0KLSAgcmV0dXJuIHNwYW47Ci19Ci0jZW5kaWYKLQogc3RhdGljIGlubGluZSBi
b29sIENoZWNrQ2FjaGVkU2l6ZUNsYXNzKHZvaWQgKnB0cikgewogICBQYWdlSUQgcCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpID4+IGtQYWdlU2hpZnQ7CiAgIHNpemVfdCBjYWNo
ZWRfdmFsdWUgPSBwYWdlaGVhcC0+R2V0U2l6ZUNsYXNzSWZDYWNoZWQocCk7CkBAIC0zNjM3LDI2
ICszMjE4LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCogU3BhblRvTWFsbG9jUmVzdWx0KFNwYW4g
KnNwYW4pIHsKICAgICAgIENoZWNrZWRNYWxsb2NSZXN1bHQocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oc3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCkpOwogfQogCi0jaWZkZWYgV1RGX0NIQU5HRVMK
IHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgotI2VuZGlmCiBzdGF0aWMgQUxXQVlTX0lO
TElORSB2b2lkKiBkb19tYWxsb2Moc2l6ZV90IHNpemUpIHsKICAgdm9pZCogcmV0ID0gTlVMTDsK
IAotI2lmZGVmIFdURl9DSEFOR0VTCi0gICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKLSNlbmRp
ZgorICBBU1NFUlQoIWlzRm9yYmlkZGVuKCkpOwogCiAgIC8vIFRoZSBmb2xsb3dpbmcgY2FsbCBm
b3JjZXMgbW9kdWxlIGluaXRpYWxpemF0aW9uCiAgIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFw
ID0gVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCk7Ci0jaWZuZGVmIFdURl9DSEFOR0VT
Ci0gIGlmICgoRkxBR1NfdGNtYWxsb2Nfc2FtcGxlX3BhcmFtZXRlciA+IDApICYmIGhlYXAtPlNh
bXBsZUFsbG9jYXRpb24oc2l6ZSkpIHsKLSAgICBTcGFuKiBzcGFuID0gRG9TYW1wbGVkQWxsb2Nh
dGlvbihzaXplKTsKLSAgICBpZiAoc3BhbiAhPSBOVUxMKSB7Ci0gICAgICByZXQgPSBTcGFuVG9N
YWxsb2NSZXN1bHQoc3Bhbik7Ci0gICAgfQotICB9IGVsc2UKLSNlbmRpZgogICBpZiAoc2l6ZSA+
IGtNYXhTaXplKSB7CiAgICAgLy8gVXNlIHBhZ2UtbGV2ZWwgYWxsb2NhdG9yCiAgICAgU3Bpbkxv
Y2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CkBAIC0zNjcwLDEyICszMjM5LDggQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgdm9pZCogZG9fbWFsbG9jKHNpemVfdCBzaXplKSB7CiAgICAgcmV0ID0g
Q2hlY2tlZE1hbGxvY1Jlc3VsdChoZWFwLT5BbGxvY2F0ZShzaXplKSk7CiAgIH0KICAgaWYgKCFy
ZXQpIHsKLSNpZmRlZiBXVEZfQ0hBTkdFUwogICAgIGlmIChjcmFzaE9uRmFpbHVyZSkgLy8gVGhp
cyBicmFuY2ggc2hvdWxkIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyLgogICAgICAg
ICBDUkFTSCgpOwotI2Vsc2UKLSAgICBlcnJubyA9IEVOT01FTTsKLSNlbmRpZgogICB9CiAgIHJl
dHVybiByZXQ7CiB9CkBAIC0zNzE5LDg2ICszMjg0LDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
dm9pZCBkb19mcmVlKHZvaWQqIHB0cikgewogICB9CiB9CiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMK
LS8vIEZvciB1c2UgYnkgZXhwb3J0ZWQgcm91dGluZXMgYmVsb3cgdGhhdCB3YW50IHNwZWNpZmlj
IGFsaWdubWVudHMKLS8vCi0vLyBOb3RlOiB0aGlzIGNvZGUgY2FuIGJlIHNsb3csIGFuZCBjYW4g
c2lnbmlmaWNhbnRseSBmcmFnbWVudCBtZW1vcnkuCi0vLyBUaGUgZXhwZWN0YXRpb24gaXMgdGhh
dCBtZW1hbGlnbi9wb3NpeF9tZW1hbGlnbi92YWxsb2MvcHZhbGxvYyB3aWxsCi0vLyBub3QgYmUg
aW52b2tlZCB2ZXJ5IG9mdGVuLiAgVGhpcyByZXF1aXJlbWVudCBzaW1wbGlmaWVzIG91cgotLy8g
aW1wbGVtZW50YXRpb24gYW5kIGFsbG93cyB1cyB0byB0dW5lIGZvciBleHBlY3RlZCBhbGxvY2F0
aW9uCi0vLyBwYXR0ZXJucy4KLXN0YXRpYyB2b2lkKiBkb19tZW1hbGlnbihzaXplX3QgYWxpZ24s
IHNpemVfdCBzaXplKSB7Ci0gIEFTU0VSVCgoYWxpZ24gJiAoYWxpZ24gLSAxKSkgPT0gMCk7Ci0g
IEFTU0VSVChhbGlnbiA+IDApOwotICBpZiAocGFnZWhlYXAgPT0gTlVMTCkgVENNYWxsb2NfVGhy
ZWFkQ2FjaGU6OkluaXRNb2R1bGUoKTsKLQotICAvLyBBbGxvY2F0ZSBhdCBsZWFzdCBvbmUgYnl0
ZSB0byBhdm9pZCBib3VuZGFyeSBjb25kaXRpb25zIGJlbG93Ci0gIGlmIChzaXplID09IDApIHNp
emUgPSAxOwotCi0gIGlmIChzaXplIDw9IGtNYXhTaXplICYmIGFsaWduIDwga1BhZ2VTaXplKSB7
Ci0gICAgLy8gU2VhcmNoIHRocm91Z2ggYWNjZXB0YWJsZSBzaXplIGNsYXNzZXMgbG9va2luZyBm
b3Igb25lIHdpdGgKLSAgICAvLyBlbm91Z2ggYWxpZ25tZW50LiAgVGhpcyBkZXBlbmRzIG9uIHRo
ZSBmYWN0IHRoYXQKLSAgICAvLyBJbml0U2l6ZUNsYXNzZXMoKSBjdXJyZW50bHkgcHJvZHVjZXMg
c2V2ZXJhbCBzaXplIGNsYXNzZXMgdGhhdAotICAgIC8vIGFyZSBhbGlnbmVkIGF0IHBvd2VycyBv
ZiB0d28uICBXZSB3aWxsIHdhc3RlIHRpbWUgYW5kIHNwYWNlIGlmCi0gICAgLy8gd2UgbWlzcyBp
biB0aGUgc2l6ZSBjbGFzcyBhcnJheSwgYnV0IHRoYXQgaXMgZGVlbWVkIGFjY2VwdGFibGUKLSAg
ICAvLyBzaW5jZSBtZW1hbGlnbigpIHNob3VsZCBiZSB1c2VkIHJhcmVseS4KLSAgICBzaXplX3Qg
Y2wgPSBTaXplQ2xhc3Moc2l6ZSk7Ci0gICAgd2hpbGUgKGNsIDwga051bUNsYXNzZXMgJiYgKChj
bGFzc190b19zaXplW2NsXSAmIChhbGlnbiAtIDEpKSAhPSAwKSkgewotICAgICAgY2wrKzsKLSAg
ICB9Ci0gICAgaWYgKGNsIDwga051bUNsYXNzZXMpIHsKLSAgICAgIFRDTWFsbG9jX1RocmVhZENh
Y2hlKiBoZWFwID0gVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCk7Ci0gICAgICByZXR1
cm4gQ2hlY2tlZE1hbGxvY1Jlc3VsdChoZWFwLT5BbGxvY2F0ZShjbGFzc190b19zaXplW2NsXSkp
OwotICAgIH0KLSAgfQotCi0gIC8vIFdlIHdpbGwgYWxsb2NhdGUgZGlyZWN0bHkgZnJvbSB0aGUg
cGFnZSBoZWFwCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotCi0gIGlmIChh
bGlnbiA8PSBrUGFnZVNpemUpIHsKLSAgICAvLyBBbnkgcGFnZS1sZXZlbCBhbGxvY2F0aW9uIHdp
bGwgYmUgZmluZQotICAgIC8vIFRPRE86IFdlIGNvdWxkIHB1dCB0aGUgcmVzdCBvZiB0aGlzIHBh
Z2UgaW4gdGhlIGFwcHJvcHJpYXRlCi0gICAgLy8gVE9ETzogY2FjaGUgYnV0IGl0IGRvZXMgbm90
IHNlZW0gd29ydGggaXQuCi0gICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6
ZSkpOwotICAgIHJldHVybiBzcGFuID09IE5VTEwgPyBOVUxMIDogU3BhblRvTWFsbG9jUmVzdWx0
KHNwYW4pOwotICB9Ci0KLSAgLy8gQWxsb2NhdGUgZXh0cmEgcGFnZXMgYW5kIGNhcnZlIG9mZiBh
biBhbGlnbmVkIHBvcnRpb24KLSAgY29uc3QgTGVuZ3RoIGFsbG9jID0gcGFnZXMoc2l6ZSArIGFs
aWduKTsKLSAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcoYWxsb2MpOwotICBpZiAoc3BhbiA9
PSBOVUxMKSByZXR1cm4gTlVMTDsKLQotICAvLyBTa2lwIHN0YXJ0aW5nIHBvcnRpb24gc28gdGhh
dCB3ZSBlbmQgdXAgYWxpZ25lZAotICBMZW5ndGggc2tpcCA9IDA7Ci0gIHdoaWxlICgoKChzcGFu
LT5zdGFydCtza2lwKSA8PCBrUGFnZVNoaWZ0KSAmIChhbGlnbiAtIDEpKSAhPSAwKSB7Ci0gICAg
c2tpcCsrOwotICB9Ci0gIEFTU0VSVChza2lwIDwgYWxsb2MpOwotICBpZiAoc2tpcCA+IDApIHsK
LSAgICBTcGFuKiByZXN0ID0gcGFnZWhlYXAtPlNwbGl0KHNwYW4sIHNraXApOwotICAgIHBhZ2Vo
ZWFwLT5EZWxldGUoc3Bhbik7Ci0gICAgc3BhbiA9IHJlc3Q7Ci0gIH0KLQotICAvLyBTa2lwIHRy
YWlsaW5nIHBvcnRpb24gdGhhdCB3ZSBkbyBub3QgbmVlZCB0byByZXR1cm4KLSAgY29uc3QgTGVu
Z3RoIG5lZWRlZCA9IHBhZ2VzKHNpemUpOwotICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID49IG5lZWRl
ZCk7Ci0gIGlmIChzcGFuLT5sZW5ndGggPiBuZWVkZWQpIHsKLSAgICBTcGFuKiB0cmFpbGVyID0g
cGFnZWhlYXAtPlNwbGl0KHNwYW4sIG5lZWRlZCk7Ci0gICAgcGFnZWhlYXAtPkRlbGV0ZSh0cmFp
bGVyKTsKLSAgfQotICByZXR1cm4gU3BhblRvTWFsbG9jUmVzdWx0KHNwYW4pOwotfQotI2VuZGlm
Ci0KIC8vIEhlbHBlcnMgZm9yIHVzZSBieSBleHBvcnRlZCByb3V0aW5lcyBiZWxvdzoKIAotI2lm
bmRlZiBXVEZfQ0hBTkdFUwotc3RhdGljIGlubGluZSB2b2lkIGRvX21hbGxvY19zdGF0cygpIHsK
LSAgUHJpbnRTdGF0cygxKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIGludCBkb19tYWxs
b3B0KGludCwgaW50KSB7CiAgIHJldHVybiAxOyAgICAgLy8gSW5kaWNhdGVzIGVycm9yCiB9CkBA
IC0zODM4LDkgKzMzMjUsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtYWxsaW5mbyBkb19tYWxs
aW5mbygpIHsKIC8vICAgICAgICAgaGVhcC1jaGVja2VyLmNjIGRlcGVuZHMgb24gdGhpcyB0byBz
dGFydCBhIHN0YWNrIHRyYWNlIGZyb20KIC8vICAgICAgICAgdGhlIGNhbGwgdG8gdGhlIChkZSlh
bGxvY2F0aW9uIGZ1bmN0aW9uLgogCi0jaWZuZGVmIFdURl9DSEFOR0VTCi1leHRlcm4gIkMiIAot
I2Vsc2UKICNkZWZpbmUgZG9fbWFsbG9jIGRvX21hbGxvYzxjcmFzaE9uRmFpbHVyZT4KIAogdGVt
cGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CkBAIC0zODU4LDcgKzMzNDIsNiBAQCBUcnlNYWxs
b2NSZXR1cm5WYWx1ZSB0cnlGYXN0TWFsbG9jKHNpemVfdCBzaXplKQogCiB0ZW1wbGF0ZSA8Ym9v
bCBjcmFzaE9uRmFpbHVyZT4KIEFMV0FZU19JTkxJTkUKLSNlbmRpZgogdm9pZCogbWFsbG9jKHNp
emVfdCBzaXplKSB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICBpZiAo
c3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIEludGVybmFsOjpWYWxpZGF0aW9u
QnVmZmVyU2l6ZSA8PSBzaXplKSAgLy8gSWYgb3ZlcmZsb3cgd291bGQgb2NjdXIuLi4KQEAgLTM4
NzgsMjAgKzMzNjEsMTAgQEAgdm9pZCogbWFsbG9jKHNpemVfdCBzaXplKSB7CiAgICAgdm9pZCog
cmVzdWx0ID0gZG9fbWFsbG9jKHNpemUpOwogI2VuZGlmCiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMK
LSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotI2VuZGlmCiAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLWV4dGVybiAiQyIgCi0jZW5k
aWYKIHZvaWQgZnJlZSh2b2lkKiBwdHIpIHsKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgTWFsbG9j
SG9vazo6SW52b2tlRGVsZXRlSG9vayhwdHIpOwotI2VuZGlmCi0KICNpZiBFTkFCTEUoV1RGX01B
TExPQ19WQUxJREFUSU9OKQogICAgIGlmICghcHRyKQogICAgICAgICByZXR1cm47CkBAIC0zOTA1
LDkgKzMzNzgsNiBAQCB2b2lkIGZyZWUodm9pZCogcHRyKSB7CiAjZW5kaWYKIH0KIAotI2lmbmRl
ZiBXVEZfQ0hBTkdFUwotZXh0ZXJuICJDIiAKLSNlbHNlCiB0ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9u
RmFpbHVyZT4KIEFMV0FZU19JTkxJTkUgdm9pZCogY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKIApA
QCAtMzkzMSw3ICszNDAxLDYgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhz
aXplX3Qgbiwgc2l6ZV90IGVsZW1fc2l6ZSkKIAogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1
cmU+CiBBTFdBWVNfSU5MSU5FCi0jZW5kaWYKIHZvaWQqIGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90
IGVsZW1fc2l6ZSkgewogICBzaXplX3QgdG90YWxCeXRlcyA9IG4gKiBlbGVtX3NpemU7CiAgICAg
CkBAIC0zOTUzLDI4ICszNDIyLDkgQEAgdm9pZCogY2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxl
bV9zaXplKSB7CiAgICAgfQogI2VuZGlmCiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgTWFsbG9j
SG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHRvdGFsQnl0ZXMpOwotI2VuZGlmCiAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLS8vIFNpbmNlIGNmcmVlIGlzbid0IHVzZWQgYW55d2hlcmUsIHdlIGRv
bid0IGNvbXBpbGUgaXQgaW4uCi0jaWZuZGVmIFdURl9DSEFOR0VTCi0jaWZuZGVmIFdURl9DSEFO
R0VTCi1leHRlcm4gIkMiIAotI2VuZGlmCi12b2lkIGNmcmVlKHZvaWQqIHB0cikgewotI2lmbmRl
ZiBXVEZfQ0hBTkdFUwotICAgIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2socHRyKTsKLSNl
bmRpZgotICBkb19mcmVlKHB0cik7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBXVEZfQ0hBTkdFUwot
ZXh0ZXJuICJDIiAKLSNlbHNlCiB0ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4KIEFMV0FZ
U19JTkxJTkUgdm9pZCogcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKIApAQCAtNDAwNCwyMyArMzQ1
NCwxNiBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0UmVhbGxvYyh2b2lkKiBvbGRfcHRy
LCBzaXplX3QgbmV3X3NpemUpCiAKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgogQUxX
QVlTX0lOTElORQotI2VuZGlmCiB2b2lkKiByZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNpemVfdCBu
ZXdfc2l6ZSkgewogICBpZiAob2xkX3B0ciA9PSBOVUxMKSB7CiAjaWYgRU5BQkxFKFdURl9NQUxM
T0NfVkFMSURBVElPTikKICAgICB2b2lkKiByZXN1bHQgPSBtYWxsb2M8Y3Jhc2hPbkZhaWx1cmU+
KG5ld19zaXplKTsKICNlbHNlCiAgICAgdm9pZCogcmVzdWx0ID0gZG9fbWFsbG9jKG5ld19zaXpl
KTsKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJl
c3VsdCwgbmV3X3NpemUpOwotI2VuZGlmCiAjZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogICB9
CiAgIGlmIChuZXdfc2l6ZSA9PSAwKSB7Ci0jaWZuZGVmIFdURl9DSEFOR0VTCi0gICAgTWFsbG9j
SG9vazo6SW52b2tlRGVsZXRlSG9vayhvbGRfcHRyKTsKLSNlbmRpZgogICAgIGZyZWUob2xkX3B0
cik7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KQEAgLTQwNjAsMTMgKzM1MDMsNyBAQCB2b2lkKiBy
ZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNpemVfdCBuZXdfc2l6ZSkgewogICAgIGlmIChuZXdfcHRy
ID09IE5VTEwpIHsKICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSNpZm5kZWYgV1RGX0NIQU5H
RVMKLSAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKG5ld19wdHIsIG5ld19zaXplKTsKLSNl
bmRpZgogICAgIG1lbWNweShuZXdfcHRyLCBvbGRfcHRyLCAoKG9sZF9zaXplIDwgbmV3X3NpemUp
ID8gb2xkX3NpemUgOiBuZXdfc2l6ZSkpOwotI2lmbmRlZiBXVEZfQ0hBTkdFUwotICAgIE1hbGxv
Y0hvb2s6Okludm9rZURlbGV0ZUhvb2sob2xkX3B0cik7Ci0jZW5kaWYKICAgICAvLyBXZSBjb3Vs
ZCB1c2UgYSB2YXJpYW50IG9mIGRvX2ZyZWUoKSB0aGF0IGxldmVyYWdlcyB0aGUgZmFjdAogICAg
IC8vIHRoYXQgd2UgYWxyZWFkeSBrbm93IHRoZSBzaXplY2xhc3Mgb2Ygb2xkX3B0ci4gIFRoZSBi
ZW5lZml0CiAgICAgLy8gd291bGQgYmUgc21hbGwsIHNvIGRvbid0IGJvdGhlci4KQEAgLTQwODUs
MjI0ICszNTIyLDggQEAgdm9pZCogcmVhbGxvYyh2b2lkKiBvbGRfcHRyLCBzaXplX3QgbmV3X3Np
emUpIHsKICAgfQogfQogCi0jaWZkZWYgV1RGX0NIQU5HRVMKICN1bmRlZiBkb19tYWxsb2MKLSNl
bHNlCi0KLXN0YXRpYyBTcGluTG9jayBzZXRfbmV3X2hhbmRsZXJfbG9jayA9IFNQSU5MT0NLX0lO
SVRJQUxJWkVSOwotCi1zdGF0aWMgaW5saW5lIHZvaWQqIGNwcF9hbGxvYyhzaXplX3Qgc2l6ZSwg
Ym9vbCBub3Rocm93KSB7Ci0gIGZvciAoOzspIHsKLSAgICB2b2lkKiBwID0gZG9fbWFsbG9jKHNp
emUpOwotI2lmZGVmIFBSRUFOU0lORVcKLSAgICByZXR1cm4gcDsKLSNlbHNlCi0gICAgaWYgKHAg
PT0gTlVMTCkgeyAgLy8gYWxsb2NhdGlvbiBmYWlsZWQKLSAgICAgIC8vIEdldCB0aGUgY3VycmVu
dCBuZXcgaGFuZGxlci4gIE5COiB0aGlzIGZ1bmN0aW9uIGlzIG5vdAotICAgICAgLy8gdGhyZWFk
LXNhZmUuICBXZSBtYWtlIGEgZmVlYmxlIHN0YWIgYXQgbWFraW5nIGl0IHNvIGhlcmUsIGJ1dAot
ICAgICAgLy8gdGhpcyBsb2NrIG9ubHkgcHJvdGVjdHMgYWdhaW5zdCB0Y21hbGxvYyBpbnRlcmZl
cmluZyB3aXRoCi0gICAgICAvLyBpdHNlbGYsIG5vdCB3aXRoIG90aGVyIGxpYnJhcmllcyBjYWxs
aW5nIHNldF9uZXdfaGFuZGxlci4KLSAgICAgIHN0ZDo6bmV3X2hhbmRsZXIgbmg7Ci0gICAgICB7
Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnNldF9uZXdfaGFuZGxlcl9sb2NrKTsKLSAgICAg
ICAgbmggPSBzdGQ6OnNldF9uZXdfaGFuZGxlcigwKTsKLSAgICAgICAgKHZvaWQpIHN0ZDo6c2V0
X25ld19oYW5kbGVyKG5oKTsKLSAgICAgIH0KLSAgICAgIC8vIElmIG5vIG5ld19oYW5kbGVyIGlz
IGVzdGFibGlzaGVkLCB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuCi0gICAgICBpZiAoIW5oKSB7Ci0g
ICAgICAgIGlmIChub3Rocm93KSByZXR1cm4gMDsKLSAgICAgICAgdGhyb3cgc3RkOjpiYWRfYWxs
b2MoKTsKLSAgICAgIH0KLSAgICAgIC8vIE90aGVyd2lzZSwgdHJ5IHRoZSBuZXdfaGFuZGxlci4g
IElmIGl0IHJldHVybnMsIHJldHJ5IHRoZQotICAgICAgLy8gYWxsb2NhdGlvbi4gIElmIGl0IHRo
cm93cyBzdGQ6OmJhZF9hbGxvYywgZmFpbCB0aGUgYWxsb2NhdGlvbi4KLSAgICAgIC8vIGlmIGl0
IHRocm93cyBzb21ldGhpbmcgZWxzZSwgZG9uJ3QgaW50ZXJmZXJlLgotICAgICAgdHJ5IHsKLSAg
ICAgICAgKCpuaCkoKTsKLSAgICAgIH0gY2F0Y2ggKGNvbnN0IHN0ZDo6YmFkX2FsbG9jJikgewot
ICAgICAgICBpZiAoIW5vdGhyb3cpIHRocm93OwotICAgICAgICByZXR1cm4gcDsKLSAgICAgIH0K
LSAgICB9IGVsc2UgeyAgLy8gYWxsb2NhdGlvbiBzdWNjZXNzCi0gICAgICByZXR1cm4gcDsKLSAg
ICB9Ci0jZW5kaWYKLSAgfQotfQotCi0jaWYgRU5BQkxFKEdMT0JBTF9GQVNUTUFMTE9DX05FVykK
LQotdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKSB7Ci0gIHZvaWQqIHAgPSBjcHBfYWxs
b2Moc2l6ZSwgZmFsc2UpOwotICAvLyBXZSBrZWVwIHRoaXMgbmV4dCBpbnN0cnVjdGlvbiBvdXQg
b2YgY3BwX2FsbG9jIGZvciBhIHJlYXNvbjogd2hlbgotICAvLyBpdCdzIGluLCBhbmQgbmV3IGp1
c3QgY2FsbHMgY3BwX2FsbG9jLCB0aGUgb3B0aW1pemVyIG1heSBmb2xkIHRoZQotICAvLyBuZXcg
Y2FsbCBpbnRvIGNwcF9hbGxvYywgd2hpY2ggbWVzc2VzIHVwIG91ciB3aG9sZSBzZWN0aW9uLWJh
c2VkCi0gIC8vIHN0YWNrdHJhY2luZyAoc2VlIEFUVFJJQlVURV9TRUNUSU9OLCBhYm92ZSkuICBU
aGlzIGVuc3VyZXMgY3BwX2FsbG9jCi0gIC8vIGlzbid0IHRoZSBsYXN0IHRoaW5nIHRoaXMgZm4g
Y2FsbHMsIGFuZCBwcmV2ZW50cyB0aGUgZm9sZGluZy4KLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3
SG9vayhwLCBzaXplKTsKLSAgcmV0dXJuIHA7Ci19Ci0KLXZvaWQqIG9wZXJhdG9yIG5ldyhzaXpl
X3Qgc2l6ZSwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSBfX1RIUk9XIHsKLSAgdm9pZCogcCA9IGNw
cF9hbGxvYyhzaXplLCB0cnVlKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXpl
KTsKLSAgcmV0dXJuIHA7Ci19Ci0KLXZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHApIF9fVEhS
T1cgewotICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHApOwotICBkb19mcmVlKHApOwot
fQotCi12b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp
IF9fVEhST1cgewotICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHApOwotICBkb19mcmVl
KHApOwotfQotCi12b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSkgewotICB2b2lkKiBw
ID0gY3BwX2FsbG9jKHNpemUsIGZhbHNlKTsKLSAgLy8gV2Uga2VlcCB0aGlzIG5leHQgaW5zdHJ1
Y3Rpb24gb3V0IG9mIGNwcF9hbGxvYyBmb3IgYSByZWFzb246IHdoZW4KLSAgLy8gaXQncyBpbiwg
YW5kIG5ldyBqdXN0IGNhbGxzIGNwcF9hbGxvYywgdGhlIG9wdGltaXplciBtYXkgZm9sZCB0aGUK
LSAgLy8gbmV3IGNhbGwgaW50byBjcHBfYWxsb2MsIHdoaWNoIG1lc3NlcyB1cCBvdXIgd2hvbGUg
c2VjdGlvbi1iYXNlZAotICAvLyBzdGFja3RyYWNpbmcgKHNlZSBBVFRSSUJVVEVfU0VDVElPTiwg
YWJvdmUpLiAgVGhpcyBlbnN1cmVzIGNwcF9hbGxvYwotICAvLyBpc24ndCB0aGUgbGFzdCB0aGlu
ZyB0aGlzIGZuIGNhbGxzLCBhbmQgcHJldmVudHMgdGhlIGZvbGRpbmcuCi0gIE1hbGxvY0hvb2s6
Okludm9rZU5ld0hvb2socCwgc2l6ZSk7Ci0gIHJldHVybiBwOwotfQotCi12b2lkKiBvcGVyYXRv
ciBuZXdbXShzaXplX3Qgc2l6ZSwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSBfX1RIUk9XIHsKLSAg
dm9pZCogcCA9IGNwcF9hbGxvYyhzaXplLCB0cnVlKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3
SG9vayhwLCBzaXplKTsKLSAgcmV0dXJuIHA7Ci19Ci0KLXZvaWQgb3BlcmF0b3IgZGVsZXRlW10o
dm9pZCogcCkgX19USFJPVyB7Ci0gIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2socCk7Ci0g
IGRvX2ZyZWUocCk7Ci19Ci0KLXZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCwgY29uc3Qg
c3RkOjpub3Rocm93X3QmKSBfX1RIUk9XIHsKLSAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9v
ayhwKTsKLSAgZG9fZnJlZShwKTsKLX0KLQotI2VuZGlmCi0KLWV4dGVybiAiQyIgdm9pZCogbWVt
YWxpZ24oc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0gIHZvaWQqIHJlc3Vs
dCA9IGRvX21lbWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9v
ayhyZXN1bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1leHRlcm4gIkMiIGludCBw
b3NpeF9tZW1hbGlnbih2b2lkKiogcmVzdWx0X3B0ciwgc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6
ZSkKLSAgICBfX1RIUk9XIHsKLSAgaWYgKCgoYWxpZ24gJSBzaXplb2Yodm9pZCopKSAhPSAwKSB8
fAotICAgICAgKChhbGlnbiAmIChhbGlnbiAtIDEpKSAhPSAwKSB8fAotICAgICAgKGFsaWduID09
IDApKSB7Ci0gICAgcmV0dXJuIEVJTlZBTDsKLSAgfQotCi0gIHZvaWQqIHJlc3VsdCA9IGRvX21l
bWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQs
IHNpemUpOwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICByZXR1cm4gRU5PTUVNOwotICB9
IGVsc2UgewotICAgICpyZXN1bHRfcHRyID0gcmVzdWx0OwotICAgIHJldHVybiAwOwotICB9Ci19
Ci0KLXN0YXRpYyBzaXplX3QgcGFnZXNpemUgPSAwOwotCi1leHRlcm4gIkMiIHZvaWQqIHZhbGxv
YyhzaXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0gIC8vIEFsbG9jYXRlIHBhZ2UtYWxpZ25lZCBvYmpl
Y3Qgb2YgbGVuZ3RoID49IHNpemUgYnl0ZXMKLSAgaWYgKHBhZ2VzaXplID09IDApIHBhZ2VzaXpl
ID0gZ2V0cGFnZXNpemUoKTsKLSAgdm9pZCogcmVzdWx0ID0gZG9fbWVtYWxpZ24ocGFnZXNpemUs
IHNpemUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7Ci0gIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWV4dGVybiAiQyIgdm9pZCogcHZhbGxvYyhzaXplX3Qgc2l6ZSkg
X19USFJPVyB7Ci0gIC8vIFJvdW5kIHVwIHNpemUgdG8gYSBtdWx0aXBsZSBvZiBwYWdlc2l6ZQot
ICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwotICBzaXplID0g
KHNpemUgKyBwYWdlc2l6ZSAtIDEpICYgfihwYWdlc2l6ZSAtIDEpOwotICB2b2lkKiByZXN1bHQg
PSBkb19tZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7Ci0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hv
b2socmVzdWx0LCBzaXplKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZXh0ZXJuICJDIiB2b2lk
IG1hbGxvY19zdGF0cyh2b2lkKSB7Ci0gIGRvX21hbGxvY19zdGF0cygpOwotfQotCi1leHRlcm4g
IkMiIGludCBtYWxsb3B0KGludCBjbWQsIGludCB2YWx1ZSkgewotICByZXR1cm4gZG9fbWFsbG9w
dChjbWQsIHZhbHVlKTsKLX0KLQotI2lmZGVmIEhBVkVfU1RSVUNUX01BTExJTkZPCi1leHRlcm4g
IkMiIHN0cnVjdCBtYWxsaW5mbyBtYWxsaW5mbyh2b2lkKSB7Ci0gIHJldHVybiBkb19tYWxsaW5m
bygpOwotfQotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU29tZSBsaWJyYXJ5IHJvdXRpbmVz
IG9uIFJlZEhhdCA5IGFsbG9jYXRlIG1lbW9yeSB1c2luZyBtYWxsb2MoKQotLy8gYW5kIGZyZWUg
aXQgdXNpbmcgX19saWJjX2ZyZWUoKSAob3IgdmljZS12ZXJzYSkuICBTaW5jZSB3ZSBwcm92aWRl
Ci0vLyBvdXIgb3duIGltcGxlbWVudGF0aW9ucyBvZiBtYWxsb2MvZnJlZSwgd2UgbmVlZCB0byBt
YWtlIHN1cmUgdGhhdAotLy8gdGhlIF9fbGliY19YWFggdmFyaWFudHMgKGRlZmluZWQgYXMgcGFy
dCBvZiBnbGliYykgYWxzbyBwb2ludCB0bwotLy8gdGhlIHNhbWUgaW1wbGVtZW50YXRpb25zLgot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSNpZiBkZWZpbmVkKF9fR0xJQkNfXykKLWV4dGVybiAiQyIgewotI2lm
IENPTVBJTEVSKEdDQykgJiYgIWRlZmluZWQoX19NQUNIX18pICYmIGRlZmluZWQoSEFWRV9fX0FU
VFJJQlVURV9fKQotICAvLyBQb3RlbnRpYWxseSBmYXN0ZXIgdmFyaWFudHMgdGhhdCB1c2UgdGhl
IGdjYyBhbGlhcyBleHRlbnNpb24uCi0gIC8vIE1hY2gtTyAoRGFyd2luKSBkb2VzIG5vdCBzdXBw
b3J0IHdlYWsgYWxpYXNlcywgaGVuY2UgdGhlIF9fTUFDSF9fIGNoZWNrLgotIyBkZWZpbmUgQUxJ
QVMoeCkgX19hdHRyaWJ1dGVfXyAoKHdlYWssIGFsaWFzICh4KSkpCi0gIHZvaWQqIF9fbGliY19t
YWxsb2Moc2l6ZV90IHNpemUpICAgICAgICAgICAgICBBTElBUygibWFsbG9jIik7Ci0gIHZvaWQg
IF9fbGliY19mcmVlKHZvaWQqIHB0cikgICAgICAgICAgICAgICAgICBBTElBUygiZnJlZSIpOwot
ICB2b2lkKiBfX2xpYmNfcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSAgQUxJQVMoInJl
YWxsb2MiKTsKLSAgdm9pZCogX19saWJjX2NhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IHNpemUpICAg
IEFMSUFTKCJjYWxsb2MiKTsKLSAgdm9pZCAgX19saWJjX2NmcmVlKHZvaWQqIHB0cikgICAgICAg
ICAgICAgICAgIEFMSUFTKCJjZnJlZSIpOwotICB2b2lkKiBfX2xpYmNfbWVtYWxpZ24oc2l6ZV90
IGFsaWduLCBzaXplX3QgcykgQUxJQVMoIm1lbWFsaWduIik7Ci0gIHZvaWQqIF9fbGliY192YWxs
b2Moc2l6ZV90IHNpemUpICAgICAgICAgICAgICBBTElBUygidmFsbG9jIik7Ci0gIHZvaWQqIF9f
bGliY19wdmFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAgICBBTElBUygicHZhbGxvYyIpOwot
ICBpbnQgX19wb3NpeF9tZW1hbGlnbih2b2lkKiogciwgc2l6ZV90IGEsIHNpemVfdCBzKSBBTElB
UygicG9zaXhfbWVtYWxpZ24iKTsKLSMgdW5kZWYgQUxJQVMKLSMgZWxzZSAgIC8qIG5vdCBfX0dO
VUNfXyAqLwotICAvLyBQb3J0YWJsZSB3cmFwcGVycwotICB2b2lkKiBfX2xpYmNfbWFsbG9jKHNp
emVfdCBzaXplKSAgICAgICAgICAgICAgeyByZXR1cm4gbWFsbG9jKHNpemUpOyAgICAgICB9Ci0g
IHZvaWQgIF9fbGliY19mcmVlKHZvaWQqIHB0cikgICAgICAgICAgICAgICAgICB7IGZyZWUocHRy
KTsgICAgICAgICAgICAgICAgIH0KLSAgdm9pZCogX19saWJjX3JlYWxsb2Modm9pZCogcHRyLCBz
aXplX3Qgc2l6ZSkgIHsgcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsgfQotICB2b2lkKiBfX2xp
YmNfY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZSkgICAgeyByZXR1cm4gY2FsbG9jKG4sIHNp
emUpOyAgICB9Ci0gIHZvaWQgIF9fbGliY19jZnJlZSh2b2lkKiBwdHIpICAgICAgICAgICAgICAg
ICB7IGNmcmVlKHB0cik7ICAgICAgICAgICAgICAgIH0KLSAgdm9pZCogX19saWJjX21lbWFsaWdu
KHNpemVfdCBhbGlnbiwgc2l6ZV90IHMpIHsgcmV0dXJuIG1lbWFsaWduKGFsaWduLCBzKTsgfQot
ICB2b2lkKiBfX2xpYmNfdmFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAgICAgeyByZXR1cm4g
dmFsbG9jKHNpemUpOyAgICAgICB9Ci0gIHZvaWQqIF9fbGliY19wdmFsbG9jKHNpemVfdCBzaXpl
KSAgICAgICAgICAgICB7IHJldHVybiBwdmFsbG9jKHNpemUpOyAgICAgIH0KLSAgaW50IF9fcG9z
aXhfbWVtYWxpZ24odm9pZCoqIHIsIHNpemVfdCBhLCBzaXplX3QgcykgewotICAgIHJldHVybiBw
b3NpeF9tZW1hbGlnbihyLCBhLCBzKTsKLSAgfQotIyBlbmRpZiAgLyogX19HTlVDX18gKi8KLX0K
LSNlbmRpZiAgIC8qIF9fR0xJQkNfXyAqLwotCi0vLyBPdmVycmlkZSBfX2xpYmNfbWVtYWxpZ24g
aW4gbGliYyBvbiBsaW51eCBib3hlcyBzcGVjaWFsbHkuCi0vLyBUaGV5IGhhdmUgYSBidWcgaW4g
bGliYyB0aGF0IGNhdXNlcyB0aGVtIHRvICh2ZXJ5IHJhcmVseSkgYWxsb2NhdGUKLS8vIHdpdGgg
X19saWJjX21lbWFsaWduKCkgeWV0IGRlYWxsb2NhdGUgd2l0aCBmcmVlKCkgYW5kIHRoZQotLy8g
ZGVmaW5pdGlvbnMgYWJvdmUgZG9uJ3QgY2F0Y2ggaXQuCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGFu
IGV4Y2VwdGlvbiB0byB0aGUgcnVsZSBvZiBjYWxsaW5nIE1hbGxvY0hvb2sgbWV0aG9kCi0vLyBm
cm9tIHRoZSBzdGFjayBmcmFtZSBvZiB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbjsKLS8vIGhlYXAt
Y2hlY2tlciBoYW5kbGVzIHRoaXMgc3BlY2lhbCBjYXNlIGV4cGxpY2l0bHkuCi1zdGF0aWMgdm9p
ZCAqTWVtYWxpZ25PdmVycmlkZShzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplLCBjb25zdCB2b2lk
ICpjYWxsZXIpCi0gICAgX19USFJPVyB7Ci0gIHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKGFs
aWduLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwot
ICByZXR1cm4gcmVzdWx0OwotfQotdm9pZCAqKCpfX21lbWFsaWduX2hvb2spKHNpemVfdCwgc2l6
ZV90LCBjb25zdCB2b2lkICopID0gTWVtYWxpZ25PdmVycmlkZTsKLQotI2VuZGlmCiAKLSNpZmRl
ZiBXVEZfQ0hBTkdFUwogdm9pZCByZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkoKQogewogICAg
IC8vIEZsdXNoIGZyZWUgcGFnZXMgaW4gdGhlIGN1cnJlbnQgdGhyZWFkIGNhY2hlIGJhY2sgdG8g
dGhlIHBhZ2UgaGVhcC4KQEAgLTQ2ODcsNiArMzkwOCw1IEBAIHZvaWQgRmFzdE1hbGxvY1pvbmU6
OmluaXQoKQogI2VuZGlmIC8vIE9TKERBUldJTikKIAogfSAvLyBuYW1lc3BhY2UgV1RGCi0jZW5k
aWYgLy8gV1RGX0NIQU5HRVMKIAogI2VuZGlmIC8vIEZPUkNFX1NZU1RFTV9NQUxMT0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVENQYWNrZWRDYWNoZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9UQ1BhY2tlZENhY2hlLmgKaW5kZXggMDQ2NGY4ZmRjMmNmOTM3
ZjljNTljY2ZjNDg5YjM0YmQ4ZGRjY2NhNS4uNjM0NDYzN2U0NWFhMjczZGM1NzgyMzFkYWYwZTJm
YWJlN2Q5Mzk0NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UQ1BhY2tl
ZENhY2hlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UQ1BhY2tlZENhY2hlLmgK
QEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMDcsIEdvb2dsZSBJbmMuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDcsIDIwMTEsIEdvb2dsZSBJbmMuCiAvLyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTExLDExICsxMTEsNiBAQAogI2lmbmRlZiBUQ01B
TExPQ19QQUNLRURfQ0FDSEVfSU5MX0hfXwogI2RlZmluZSBUQ01BTExPQ19QQUNLRURfQ0FDSEVf
SU5MX0hfXwogCi0jaWZuZGVmIFdURl9DSEFOR0VTCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVz
LmgiICAvLyBmb3IgQ09NUElMRV9BU1NFUlQKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIgICAg
IC8vIGZvciBEQ0hFQ0sKLSNlbmRpZgotCiAjaWZuZGVmIERDSEVDS19FUQogI2RlZmluZSBEQ0hF
Q0tfRVEodmFsMSwgdmFsMikgQVNTRVJUKCh2YWwxKSA9PSAodmFsMikpCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVENQYWdlTWFwLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1RDUGFnZU1hcC5oCmluZGV4IDk5YmRjNDAwZTcyOTlhODFlZGQxMzA2
ZTY4ZGE4Mjc2OWYwOWFiMGMuLjJhMDg3YTRkZDIyNTFjNTBiNzRkNWRkMDg5OTM5NGQ1ZjFmZGU4
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVENQYWdlTWFwLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UQ1BhZ2VNYXAuaApAQCAtMSw0ICsxLDQgQEAK
LS8vIENvcHlyaWdodCAoYykgMjAwNSwgR29vZ2xlIEluYy4KKy8vIENvcHlyaWdodCAoYykgMjAw
NSwgMjAxMSwgR29vZ2xlIEluYy4KIC8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyAKIC8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtMTYxLDcgKzE2MSw2IEBAIGNsYXNzIFRDTWFsbG9jX1BhZ2VNYXAyIHsKICAg
ICBFbnN1cmUoMCwgMSA8PCBCSVRTKTsKICAgfQogCi0jaWZkZWYgV1RGX0NIQU5HRVMKICAgdGVt
cGxhdGU8Y2xhc3MgVmlzaXRvciwgY2xhc3MgTWVtb3J5UmVhZGVyPgogICB2b2lkIHZpc2l0VmFs
dWVzKFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IE1lbW9yeVJlYWRlciYgcmVhZGVyKQogICB7CkBA
IC0xODIsNyArMTgxLDYgQEAgY2xhc3MgVENNYWxsb2NfUGFnZU1hcDIgewogICAgICAgICB2aXNp
dG9yLnZpc2l0KHJvb3RfW2ldLCBzaXplb2YoTGVhZikpOwogICAgIH0KICAgfQotI2VuZGlmCiB9
OwogCiAvLyBUaHJlZS1sZXZlbCByYWRpeCB0cmVlCkBAIC0yNzEsNyArMjY5LDYgQEAgY2xhc3Mg
VENNYWxsb2NfUGFnZU1hcDMgewogICB2b2lkIFByZWFsbG9jYXRlTW9yZU1lbW9yeSgpIHsKICAg
fQogCi0jaWZkZWYgV1RGX0NIQU5HRVMKICAgdGVtcGxhdGU8Y2xhc3MgVmlzaXRvciwgY2xhc3Mg
TWVtb3J5UmVhZGVyPgogICB2b2lkIHZpc2l0VmFsdWVzKFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IE1lbW9yeVJlYWRlciYgcmVhZGVyKSB7CiAgICAgTm9kZSogcm9vdCA9IHJlYWRlcihyb290Xyk7
CkBAIC0zMTAsNyArMzA3LDYgQEAgY2xhc3MgVENNYWxsb2NfUGFnZU1hcDMgewogICAgICAgfQog
ICAgIH0KICAgfQotI2VuZGlmCiB9OwogCiAjZW5kaWYgIC8vIFRDTUFMTE9DX1BBR0VNQVBfSF9f
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1RDU3lzdGVtQWxsb2MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UQ1N5c3RlbUFsbG9jLmNwcAppbmRleCAxY2Q4
OWU2MzE4MjA5YTFlOWIxMWEwY2NmYzEzNDIyNzRiMTFmZjFkLi4yYzAwNTg4OWJjOGJkMDhkYmFm
NDRhMGY2M2Q0NDg5OGUxOWEzN2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1RDU3lzdGVtQWxsb2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVENT
eXN0ZW1BbGxvYy5jcHAKQEAgLTc2LDEzICs3Niw2IEBAIHN0YXRpYyBzaXplX3QgcGFnZXNpemUg
PSAwOwogCiAvLyBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCiAvLwotLy8gaWYgdXNlX2Rldm1l
bSBpcyB0cnVlLCBlaXRoZXIgdXNlX3Nicmsgb3IgdXNlX21tYXAgbXVzdCBhbHNvIGJlIHRydWUu
Ci0vLyBGb3IgMi4yIGtlcm5lbHMsIGl0IGxvb2tzIGxpa2UgdGhlIHNicmsgYWRkcmVzcyBzcGFj
ZSAoNTAwTUJpc2gpIGFuZAotLy8gdGhlIG1tYXAgYWRkcmVzcyBzcGFjZSAoMTMwME1CaXNoKSBh
cmUgZGlzam9pbnQsIHNvIHdlIG5lZWQgYm90aCBhbGxvY2F0b3JzCi0vLyB0byBnZXQgYXMgbXVj
aCB2aXJ0dWFsIG1lbW9yeSBhcyBwb3NzaWJsZS4KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0YXRp
YyBib29sIHVzZV9kZXZtZW0gPSBmYWxzZTsKLSNlbmRpZgogCiAjaWYgSEFWRShTQlJLKQogc3Rh
dGljIGJvb2wgdXNlX3NicmsgPSBmYWxzZTsKQEAgLTEwMiwxNyArOTUsOCBAQCBzdGF0aWMgYm9v
bCBzYnJrX2ZhaWx1cmUgPSBmYWxzZTsKIHN0YXRpYyBib29sIG1tYXBfZmFpbHVyZSA9IGZhbHNl
Owogc3RhdGljIGJvb2wgVmlydHVhbEFsbG9jX2ZhaWx1cmUgPSBmYWxzZTsKIAotI2lmbmRlZiBX
VEZfQ0hBTkdFUwotREVGSU5FX2ludDMyKG1hbGxvY19kZXZtZW1fc3RhcnQsIDAsCi0gICAgICAg
ICAgICAgIlBoeXNpY2FsIG1lbW9yeSBzdGFydGluZyBsb2NhdGlvbiBpbiBNQiBmb3IgL2Rldi9t
ZW0gYWxsb2NhdGlvbi4iCi0gICAgICAgICAgICAgIiAgU2V0dGluZyB0aGlzIHRvIDAgZGlzYWJs
ZXMgL2Rldi9tZW0gYWxsb2NhdGlvbiIpOwotREVGSU5FX2ludDMyKG1hbGxvY19kZXZtZW1fbGlt
aXQsIDAsCi0gICAgICAgICAgICAgIlBoeXNpY2FsIG1lbW9yeSBsaW1pdCBsb2NhdGlvbiBpbiBN
QiBmb3IgL2Rldi9tZW0gYWxsb2NhdGlvbi4iCi0gICAgICAgICAgICAgIiAgU2V0dGluZyB0aGlz
IHRvIDAgbWVhbnMgbm8gbGltaXQuIik7Ci0jZWxzZQogc3RhdGljIGNvbnN0IGludDMyX3QgRkxB
R1NfbWFsbG9jX2Rldm1lbV9zdGFydCA9IDA7CiBzdGF0aWMgY29uc3QgaW50MzJfdCBGTEFHU19t
YWxsb2NfZGV2bWVtX2xpbWl0ID0gMDsKLSNlbmRpZgogCiAjaWYgSEFWRShTQlJLKQogCkBAIC0y
NjAsODQgKzI0NCw2IEBAIHN0YXRpYyB2b2lkKiBUcnlWaXJ0dWFsQWxsb2Moc2l6ZV90IHNpemUs
IHNpemVfdCAqYWN0dWFsX3NpemUsIHNpemVfdCBhbGlnbm1lbnQpCiAKICNlbmRpZiAvKiBIQVZF
KE1NQVApICovCiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0YXRpYyB2b2lkKiBUcnlEZXZNZW0o
c2l6ZV90IHNpemUsIHNpemVfdCAqYWN0dWFsX3NpemUsIHNpemVfdCBhbGlnbm1lbnQpIHsKLSAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgc3RhdGljIG9mZl90IHBoeXNtZW1f
YmFzZTsgIC8vIG5leHQgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgdG8gYWxsb2NhdGUKLSAgc3Rh
dGljIG9mZl90IHBoeXNtZW1fbGltaXQ7IC8vIG1heGltdW0gcGh5c2ljYWwgYWRkcmVzcyBhbGxv
d2VkCi0gIHN0YXRpYyBpbnQgcGh5c21lbV9mZDsgICAgICAvLyBmaWxlIGRlc2NyaXB0b3IgZm9y
IC9kZXYvbWVtCi0gIAotICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgdXNlIC9kZXYvbWVtIGFsbG9j
YXRpb24uICBOb3RlIHRoYXQgaXQgbWF5IHRha2UKLSAgLy8gYSB3aGlsZSB0byBnZXQgdGhpcyBm
bGFnIGluaXRpYWxpemVkLCBzbyBtZWFud2hpbGUgd2UgZmFsbCBiYWNrIHRvCi0gIC8vIHRoZSBu
ZXh0IGFsbG9jYXRvci4gIChJdCBsb29rcyBsaWtlIDdNQiBnZXRzIGFsbG9jYXRlZCBiZWZvcmUK
LSAgLy8gdGhpcyBmbGFnIGdldHMgaW5pdGlhbGl6ZWQgLWtoci4pCi0gIGlmIChGTEFHU19tYWxs
b2NfZGV2bWVtX3N0YXJ0ID09IDApIHsKLSAgICAvLyBOT1RFOiBub3QgYSBkZXZtZW1fZmFpbHVy
ZSAtIHdlJ2QgbGlrZSBUQ01hbGxvY19TeXN0ZW1BbGxvYyB0bwotICAgIC8vIHRyeSB1cyBhZ2Fp
biBuZXh0IHRpbWUuCi0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgCi0gIGlmICghaW5pdGlhbGl6
ZWQpIHsKLSAgICBwaHlzbWVtX2ZkID0gb3BlbigiL2Rldi9tZW0iLCBPX1JEV1IpOwotICAgIGlm
IChwaHlzbWVtX2ZkIDwgMCkgewotICAgICAgZGV2bWVtX2ZhaWx1cmUgPSB0cnVlOwotICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHBoeXNtZW1fYmFzZSA9IEZMQUdTX21hbGxvY19kZXZt
ZW1fc3RhcnQqMTAyNExMKjEwMjRMTDsKLSAgICBwaHlzbWVtX2xpbWl0ID0gRkxBR1NfbWFsbG9j
X2Rldm1lbV9saW1pdCoxMDI0TEwqMTAyNExMOwotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
fQotICAKLSAgLy8gRW5mb3JjZSBwYWdlIGFsaWdubWVudAotICBpZiAocGFnZXNpemUgPT0gMCkg
cGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwotICBpZiAoYWxpZ25tZW50IDwgcGFnZXNpemUpIGFs
aWdubWVudCA9IHBhZ2VzaXplOwotICBzaXplID0gKChzaXplICsgYWxpZ25tZW50IC0gMSkgLyBh
bGlnbm1lbnQpICogYWxpZ25tZW50OwotICAgIAotICAvLyBjb3VsZCB0aGVvcmV0aWNhbGx5IHJl
dHVybiB0aGUgImV4dHJhIiBieXRlcyBoZXJlLCBidXQgdGhpcwotICAvLyBpcyBzaW1wbGUgYW5k
IGNvcnJlY3QuCi0gIGlmIChhY3R1YWxfc2l6ZSkKLSAgICAqYWN0dWFsX3NpemUgPSBzaXplOwot
ICAgIAotICAvLyBBc2sgZm9yIGV4dHJhIG1lbW9yeSBpZiBhbGlnbm1lbnQgPiBwYWdlc2l6ZQot
ICBzaXplX3QgZXh0cmEgPSAwOwotICBpZiAoYWxpZ25tZW50ID4gcGFnZXNpemUpIHsKLSAgICBl
eHRyYSA9IGFsaWdubWVudCAtIHBhZ2VzaXplOwotICB9Ci0gIAotICAvLyBjaGVjayB0byBzZWUg
aWYgd2UgaGF2ZSBhbnkgbWVtb3J5IGxlZnQKLSAgaWYgKHBoeXNtZW1fbGltaXQgIT0gMCAmJiBw
aHlzbWVtX2Jhc2UgKyBzaXplICsgZXh0cmEgPiBwaHlzbWVtX2xpbWl0KSB7Ci0gICAgZGV2bWVt
X2ZhaWx1cmUgPSB0cnVlOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHZvaWQgKnJlc3VsdCA9
IG1tYXAoMCwgc2l6ZSArIGV4dHJhLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAotICAgICAgICAg
ICAgICAgICAgICAgIE1BUF9TSEFSRUQsIHBoeXNtZW1fZmQsIHBoeXNtZW1fYmFzZSk7Ci0gIGlm
IChyZXN1bHQgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oTUFQX0ZBSUxFRCkpIHsKLSAgICBk
ZXZtZW1fZmFpbHVyZSA9IHRydWU7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgdWludHB0cl90
IHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyZXN1bHQpOwotICAKLSAgLy8gQWRq
dXN0IHRoZSByZXR1cm4gbWVtb3J5IHNvIGl0IGlzIGFsaWduZWQKLSAgc2l6ZV90IGFkanVzdCA9
IDA7Ci0gIGlmICgocHRyICYgKGFsaWdubWVudCAtIDEpKSAhPSAwKSB7Ci0gICAgYWRqdXN0ID0g
YWxpZ25tZW50IC0gKHB0ciAmIChhbGlnbm1lbnQgLSAxKSk7Ci0gIH0KLSAgCi0gIC8vIFJldHVy
biB0aGUgdW51c2VkIHZpcnR1YWwgbWVtb3J5IHRvIHRoZSBzeXN0ZW0KLSAgaWYgKGFkanVzdCA+
IDApIHsKLSAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKSwgYWRqdXN0KTsK
LSAgfQotICBpZiAoYWRqdXN0IDwgZXh0cmEpIHsKLSAgICBtdW5tYXAocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocHRyICsgYWRqdXN0ICsgc2l6ZSksIGV4dHJhIC0gYWRqdXN0KTsKLSAgfQotICAK
LSAgcHRyICs9IGFkanVzdDsKLSAgcGh5c21lbV9iYXNlICs9IGFkanVzdCArIHNpemU7Ci0gIAot
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKTsKLX0KLSNlbmRpZgotCiB2b2lk
KiBUQ01hbGxvY19TeXN0ZW1BbGxvYyhzaXplX3Qgc2l6ZSwgc2l6ZV90ICphY3R1YWxfc2l6ZSwg
c2l6ZV90IGFsaWdubWVudCkgewogICAvLyBEaXNjYXJkIHJlcXVlc3RzIHRoYXQgb3ZlcmZsb3cK
ICAgaWYgKHNpemUgKyBhbGlnbm1lbnQgPCBzaXplKSByZXR1cm4gTlVMTDsKQEAgLTM1MSwxMyAr
MjU3LDYgQEAgdm9pZCogVENNYWxsb2NfU3lzdGVtQWxsb2Moc2l6ZV90IHNpemUsIHNpemVfdCAq
YWN0dWFsX3NpemUsIHNpemVfdCBhbGlnbm1lbnQpIHsKICAgLy8gbW9yZSB0cnlpbmcgYWxsIGFs
bG9jYXRvcnMgZXZlbiBpZiB0aGV5IGZhaWxlZCBiZWZvcmUuCiAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMjsgaSsrKSB7CiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgICBpZiAodXNlX2Rldm1lbSAm
JiAhZGV2bWVtX2ZhaWx1cmUpIHsKLSAgICAgIHZvaWQqIHJlc3VsdCA9IFRyeURldk1lbShzaXpl
LCBhY3R1YWxfc2l6ZSwgYWxpZ25tZW50KTsKLSAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0jZW5kaWYKLSAgICAKICNpZiBIQVZFKFNCUkspCiAgICAgaWYg
KHVzZV9zYnJrICYmICFzYnJrX2ZhaWx1cmUpIHsKICAgICAgIHZvaWQqIHJlc3VsdCA9IFRyeVNi
cmsoc2l6ZSwgYWN0dWFsX3NpemUsIGFsaWdubWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDM0NjljZDMz
MDNkMjliNzNiZmVmMmMyNmQ4Mjc1NGQyNTc2MDg4NS4uNWJmNzk5NGZjN2Q4YWNjNjM1ZGFiYWQx
NWRjNmMxNzIwZmU2OTFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTEwLTA1
ICBBbmR5IFdpbmdvICA8d2luZ29AaWdhbGlhLmNvbT4KKworICAgICAgICBSZW1vdmUgV1RGX0NI
QU5HRVMgZGVmaW5lLCBhcyBpdCBpcyBhbHdheXMgMQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk0MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbmZpZy5oOiBSZW1vdmUgV1RGX0NIQU5HRVMgZGVm
aW5lLCBhcyBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorCiAyMDExLTEwLTA0ICBLZW50IFRhbXVy
YSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgTm9kZTo6d2lsbEJsdXIo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29uZmlnLmggYi9Tb3VyY2UvV2ViQ29yZS9j
b25maWcuaAppbmRleCA4Y2E3Yzc4ZGRmYjRhNTQ4NGZkNGVhM2M2NGU1ODMxZjczZTQzMDU4Li5k
MjYxMjQ0ZGUzN2JjYTZkNjhkMTQ3MDdmOWViNDYwOGQ2NzMwNDM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jb25maWcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb25maWcuaApAQCAtMTc1
LDExICsxNzUsNiBAQAogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAKLS8vIENocm9taXVtIHVz
ZXMgdGhpcyBmaWxlIGluc3RlYWQgb2YgSmF2YVNjcmlwdENvcmUvY29uZmlnLmggdG8gY29tcGls
ZQotLy8gSmF2YVNjcmlwdENvcmUvd3RmIChjaHJvbWl1bSBkb2Vzbid0IGNvbXBpbGUgdGhlIHJl
c3Qgb2YgSlNDKS4gVGhlcmVmb3JlLAotLy8gdGhpcyBkZWZpbmUgaXMgcmVxdWlyZWQuCi0jZGVm
aW5lIFdURl9DSEFOR0VTIDEKLQogI2RlZmluZSBXVEZfVVNFX0dPT0dMRVVSTCAxCiAKICNpZiAh
ZGVmaW5lZChXVEZfVVNFX1Y4KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224395</attachid>
            <date>2014-02-17 10:45:03 -0800</date>
            <delta_ts>2014-02-18 03:40:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69435-20140217194500.patch</filename>
            <type>text/plain</type>
            <size>44483</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0MjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NGQ4MGI4MDcyZTJkMTJlY2M1M2FhNDFhOWVlZWM4MmZhZTM3MjdjLi44YzUxNWM0ZjkxYTg3MWQy
NjRmMDNlZDJkZjE1ZTBkOGRmNThkNTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxNC0wMi0xNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQu
b3JnPgorCisgICAgICAgIHJlbW92ZSBXVEZfQ0hBTkdFUyBkZWZpbmUsIGFzIGl0IGlzIGFsd2F5
cyAxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJhc2Vk
IG9uIHRoZSBwYXRjaCBieSBBbmR5IFdpbmdvIDx3aW5nb0BpZ2FsaWEuY29tPgorCisgICAgICAg
ICogY29uZmlnLmg6CisKIDIwMTQtMDItMTcgIETDoW5pZWwgQsOhdHlhaSAgPGRiYXR5YWkudS1z
emVnZWRAcGFydG5lci5zYW1zdW5nLmNvbT4KIAogICAgICAgICBGaXggdGhlIENMb29wIGJ1aWxk
IGFmdGVyIHIxNjM3NjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKaW5kZXggYjQ2OGYyOGNmMTAzYjFiNzg3MGMwMzAzZDVhYjRlMDdmZjQy
Yjc4Ny4uY2M0MGExNjFjNjMyNjEzNWViY2UwNjIzMDc3OThmZDlhYzI1MGZmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxNC0wMi0xNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQu
b3JnPgorCisgICAgICAgIHJlbW92ZSBXVEZfQ0hBTkdFUyBkZWZpbmUsIGFzIGl0IGlzIGFsd2F5
cyAxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJhc2Vk
IG9uIHRoZSBwYXRjaCBieSBBbmR5IFdpbmdvIDx3aW5nb0BpZ2FsaWEuY29tPgorCisgICAgICAg
ICogY29uZmlnLmg6CisgICAgICAgICogd3RmL0Zhc3RNYWxsb2MuY3BwOgorICAgICAgICAoV1RG
OjpJbml0U2l6ZUNsYXNzZXMpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVM
aXN0OjplbnVtZXJhdGVGcmVlT2JqZWN0cyk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1BhZ2VI
ZWFwOjpSZXR1cm5lZEJ5dGVzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NfVGhyZWFkQ2FjaGVf
RnJlZUxpc3Q6OmVudW1lcmF0ZUZyZWVPYmplY3RzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2Nf
VGhyZWFkQ2FjaGU6OmVudW1lcmF0ZUZyZWVPYmplY3RzKToKKyAgICAgICAgKFdURjo6VENNYWxs
b2NfVGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJl
YWRDYWNoZTo6SW5pdFRTRCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpD
cmVhdGVDYWNoZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKiB3dGYvVENQYWNrZWRDYWNoZS5oOgor
ICAgICAgICAqIHd0Zi9UQ1BhZ2VNYXAuaDoKKyAgICAgICAgKFRDTWFsbG9jX1BhZ2VNYXAyOjp2
aXNpdEFsbG9jYXRpb25zKToKKyAgICAgICAgKFRDTWFsbG9jX1BhZ2VNYXAzOjp2aXNpdEFsbG9j
YXRpb25zKToKKyAgICAgICAgKiB3dGYvVENTeXN0ZW1BbGxvYy5jcHA6CisgICAgICAgIChUQ01h
bGxvY19TeXN0ZW1BbGxvYyk6CisKIDIwMTQtMDItMTcgIFJ5YW4gTG9ydGllICA8ZGVzcnRAZGVz
cnQuY2E+CiAKICAgICAgICAgRW5hYmxlIERGR19KSVQgb24gRnJlZUJTRApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Nv
bmZpZy5oCmluZGV4IGJlZWJlYzY1N2I1YzE4ZTk0OTQzODE5ZjdmMGI3MjgyZWFiMDdjYzIuLmJi
YzJmZTZlYzJkNDU5ZjI0YTdlMjdhMzE3MDc3NzA5YjAxNmZlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29u
ZmlnLmgKQEAgLTUyLDggKzUyLDYgQEAKIAogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKLSNkZWZp
bmUgV1RGX0NIQU5HRVMgMQotCiAjaWZkZWYgX19jcGx1c3BsdXMKICN1bmRlZiBuZXcKICN1bmRl
ZiBkZWxldGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvY29uZmlnLmggYi9Tb3VyY2UvV1RGL2Nv
bmZpZy5oCmluZGV4IDg0NzYzMjg3NzYwMzZiNTFlOTk1YWExM2VkYzllOTY4NGRhNTM5YTUuLjUw
MGE5YTZiYzg0N2FiOTIwZGEzYmIxZDdjMjIzNmE1NjEzN2QyMjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvY29uZmlnLmgKKysrIGIvU291cmNlL1dURi9jb25maWcuaApAQCAtNDksOCArNDksNiBA
QAogCiAjZW5kaWYKIAotI2RlZmluZSBXVEZfQ0hBTkdFUyAxCi0KICNpZmRlZiBfX2NwbHVzcGx1
cwogI3VuZGVmIG5ldwogI3VuZGVmIGRlbGV0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
RmFzdE1hbGxvYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAppbmRleCBkY2Yw
OTM3YjYyZjBhYjczOGRiMGZiOTQwMzBlZjYwYzY1YmYwMGMwLi5mYWZlODAyOTFkMzhkNTQzZWYz
NjVkNzU2ZjNiNzBlOTAzNmZlMjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFs
bG9jLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcApAQCAtOTUsMTAgKzk1
LDggQEAKICNlbmRpZgogCiAjaWZuZGVmIE5PX1RDTUFMTE9DX1NBTVBMRVMKLSNpZmRlZiBXVEZf
Q0hBTkdFUwogI2RlZmluZSBOT19UQ01BTExPQ19TQU1QTEVTCiAjZW5kaWYKLSNlbmRpZgogCiAj
aWYgIShkZWZpbmVkKFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0VfU1lTVEVNX01BTExPQykgJiYg
ZGVmaW5lZChOREVCVUcpCiAjZGVmaW5lIEZPUkNFX1NZU1RFTV9NQUxMT0MgMApAQCAtNDQ5LDgg
KzQ0Nyw2IEBAIGV4dGVybiAiQyIgV1RGX0VYUE9SVF9QUklWQVRFIGNvbnN0IGludCBqc2NvcmVf
ZmFzdG1hbGxvY19pbnRyb3NwZWN0aW9uID0gMDsKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5k
aWYKIAotI2lmZGVmIFdURl9DSEFOR0VTCi0KICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00NzQsNyArNDcwLDYgQEAg
ZXh0ZXJuICJDIiBXVEZfRVhQT1JUX1BSSVZBVEUgY29uc3QgaW50IGpzY29yZV9mYXN0bWFsbG9j
X2ludHJvc3BlY3Rpb24gPSAwOwogCiAjaWZuZGVmIFBSSXVTCiAjZGVmaW5lIFBSSXVTICJ6dSIK
LSNlbmRpZgogCiAvLyBDYWxsaW5nIHB0aHJlYWRfZ2V0c3BlY2lmaWMgdGhyb3VnaCBhIGdsb2Jh
bCBmdW5jdGlvbiBwb2ludGVyIGlzIGZhc3RlciB0aGFuIGEgbm9ybWFsCiAvLyBjYWxsIHRvIHRo
ZSBmdW5jdGlvbiBvbiBNYWMgT1MgWCwgYW5kIGl0J3MgdXNlZCBpbiBwZXJmb3JtYW5jZS1jcml0
aWNhbCBjb2RlLiBTbyB3ZQpAQCAtMTAyMCwyNSArMTAxNSw2IEBAIHN0YXRpYyB2b2lkIEluaXRT
aXplQ2xhc3NlcygpIHsKICAgZm9yIChzaXplX3QgY2wgPSAxOyBjbCAgPCBrTnVtQ2xhc3Nlczsg
KytjbCkgewogICAgIG51bV9vYmplY3RzX3RvX21vdmVbY2xdID0gTnVtTW92ZVNpemUoQnl0ZVNp
emVGb3JDbGFzcyhjbCkpOwogICB9Ci0KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgaWYgKGZhbHNl
KSB7Ci0gICAgLy8gRHVtcCBjbGFzcyBzaXplcyBhbmQgbWF4aW11bSBleHRlcm5hbCB3YXN0YWdl
IHBlciBzaXplIGNsYXNzCi0gICAgZm9yIChzaXplX3QgY2wgPSAxOyBjbCAgPCBrTnVtQ2xhc3Nl
czsgKytjbCkgewotICAgICAgY29uc3QgaW50IGFsbG9jX3NpemUgPSBjbGFzc190b19wYWdlc1tj
bF0gPDwga1BhZ2VTaGlmdDsKLSAgICAgIGNvbnN0IGludCBhbGxvY19vYmpzID0gYWxsb2Nfc2l6
ZSAvIGNsYXNzX3RvX3NpemVbY2xdOwotICAgICAgY29uc3QgaW50IG1pbl91c2VkID0gKGNsYXNz
X3RvX3NpemVbY2wtMV0gKyAxKSAqIGFsbG9jX29ianM7Ci0gICAgICBjb25zdCBpbnQgbWF4X3dh
c3RlID0gYWxsb2Nfc2l6ZSAtIG1pbl91c2VkOwotICAgICAgTUVTU0FHRSgiU0MgJTNkIFsgJThk
IC4uICU4ZCBdIGZyb20gJThkIDsgJTIuMGYlJSBtYXh3YXN0ZVxuIiwKLSAgICAgICAgICAgICAg
aW50KGNsKSwKLSAgICAgICAgICAgICAgaW50KGNsYXNzX3RvX3NpemVbY2wtMV0gKyAxKSwKLSAg
ICAgICAgICAgICAgaW50KGNsYXNzX3RvX3NpemVbY2xdKSwKLSAgICAgICAgICAgICAgaW50KGNs
YXNzX3RvX3BhZ2VzW2NsXSA8PCBrUGFnZVNoaWZ0KSwKLSAgICAgICAgICAgICAgbWF4X3dhc3Rl
ICogMTAwLjAgLyBhbGxvY19zaXplCi0gICAgICAgICAgICAgICk7Ci0gICAgfQotICB9Ci0jZW5k
aWYKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA1Niw3ICsxMDMyLDcgQEAgc3RhdGlj
IHZvaWQqIE1ldGFEYXRhQWxsb2Moc2l6ZV90IGJ5dGVzKSB7CiAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLSNpZiBkZWZpbmVkKFdURl9DSEFOR0VTKSAmJiBPUyhEQVJXSU4pCisjaWYgT1MoREFSV0lO
KQogY2xhc3MgUmVtb3RlTWVtb3J5UmVhZGVyOwogI2VuZGlmCiAKQEAgLTExMzEsNyArMTEwNyw3
IEBAIGNsYXNzIFBhZ2VIZWFwQWxsb2NhdG9yIHsKIAogICBpbnQgaW51c2UoKSBjb25zdCB7IHJl
dHVybiBpbnVzZV87IH0KIAotI2lmIGRlZmluZWQoV1RGX0NIQU5HRVMpICYmIE9TKERBUldJTikK
KyNpZiBPUyhEQVJXSU4pCiAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZWNvcmRlcj4KICAgdm9pZCBy
ZWNvcmRBZG1pbmlzdHJhdGl2ZVJlZ2lvbnMoUmVjb3JkZXImLCBjb25zdCBSZW1vdGVNZW1vcnlS
ZWFkZXImKTsKICNlbmRpZgpAQCAtMTMzNyw3ICsxMzEzLDYgQEAgY2xhc3MgVENNYWxsb2NfQ2Vu
dHJhbF9GcmVlTGlzdCB7CiAgICAgcmV0dXJuIHVzZWRfc2xvdHNfICogbnVtX29iamVjdHNfdG9f
bW92ZVtzaXplX2NsYXNzX107CiAgIH0KIAotI2lmZGVmIFdURl9DSEFOR0VTCiAgIHRlbXBsYXRl
IDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KICAgdm9pZCBlbnVtZXJhdGVGcmVlT2JqZWN0
cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFkZXIsIFRDTWFsbG9jX0NlbnRyYWxf
RnJlZUxpc3QqIHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkKICAgewpAQCAtMTM2Niw3ICsxMzQxLDYg
QEAgY2xhc3MgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCB7CiAgICAgICAgIGZpbmRlci52aXNp
dChlbnRyeS52YWx1ZSgpKTsKICAgICB9CiAgIH0KLSNlbmRpZgogCiAgIHVpbnRwdHJfdCBlbnRy
b3B5KCkgY29uc3QgeyByZXR1cm4gZW50cm9weV87IH0KICBwcml2YXRlOgpAQCAtMTU3MSwxNyAr
MTU0NSw2IEBAIGJvb2wgTWFsbG9jSG9vazo6c3RhY2tMb2dnaW5nRW5hYmxlZCA9IGZhbHNlOwog
CiAjZW5kaWYKIAotI2lmbmRlZiBXVEZfQ0hBTkdFUwotLy8gVGhpcyAjaWZkZWYgc2hvdWxkIGFs
bW9zdCBuZXZlciBiZSBzZXQuICBTZXQgTk9fVENNQUxMT0NfU0FNUExFUyBpZgotLy8geW91J3Jl
IHBvcnRpbmcgdG8gYSBzeXN0ZW0gd2hlcmUgeW91IHJlYWxseSBjYW4ndCBnZXQgYSBzdGFja3Ry
YWNlLgotI2lmZGVmIE5PX1RDTUFMTE9DX1NBTVBMRVMKLS8vIFdlIHVzZSAjZGVmaW5lIHNvIGNv
ZGUgY29tcGlsZXMgZXZlbiBpZiB5b3UgI2luY2x1ZGUgc3RhY2t0cmFjZS5oIHNvbWVob3cuCi0j
IGRlZmluZSBHZXRTdGFja1RyYWNlKHN0YWNrLCBkZXB0aCwgc2tpcCkgICgwKQotI2Vsc2UKLSMg
aW5jbHVkZSA8Z29vZ2xlL3N0YWNrdHJhY2UuaD4KLSNlbmRpZgotI2VuZGlmCi0KIC8vIEV2ZW4g
aWYgd2UgaGF2ZSBzdXBwb3J0IGZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbiB0aGUgY29tcGls
ZXIKIC8vIGFuZCBsaW5rZXIsIHRoZSBPUyBtYXkgbm90IHN1cHBvcnQgaXQuICBXZSBuZWVkIHRv
IGNoZWNrIHRoYXQgYXQKIC8vIHJ1bnRpbWUuICBSaWdodCBub3csIHdlIGhhdmUgdG8ga2VlcCBh
IG1hbnVhbCBzZXQgb2YgImJhZCIgT1Nlcy4KQEAgLTE2NTcsNyArMTYyMCw2IEBAIHRlbXBsYXRl
IDxpbnQgQklUUz4gY2xhc3MgTWFwU2VsZWN0b3IgewogICB0eXBlZGVmIFBhY2tlZENhY2hlPEJJ
VFMsIHVpbnQ2NF90PiBDYWNoZVR5cGU7CiB9OwogCi0jaWYgZGVmaW5lZChXVEZfQ0hBTkdFUykK
ICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCiAvLyBPbiBhbGwga25vd24gWDg2LTY0IHBs
YXRmb3JtcywgdGhlIHVwcGVyIDE2IGJpdHMgYXJlIGFsd2F5cyB1bnVzZWQgYW5kIHRoZXJlZm9y
ZSAKIC8vIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBQYWdlTWFwIGtleS4KQEAgLTE2NzQsNyAr
MTYzNiw2IEBAIHRlbXBsYXRlIDw+IGNsYXNzIE1hcFNlbGVjdG9yPDY0PiB7CiAgIHR5cGVkZWYg
VENNYWxsb2NfUGFnZU1hcDM8NjQgLSBrUGFnZVNoaWZ0IC0ga0JpdHNVbnVzZWRPbjY0Qml0PiBU
eXBlOwogICB0eXBlZGVmIFBhY2tlZENhY2hlPDY0LCB1aW50NjRfdD4gQ2FjaGVUeXBlOwogfTsK
LSNlbmRpZgogCiAvLyBBIHR3by1sZXZlbCBtYXAgZm9yIDMyLWJpdCBtYWNoaW5lcwogdGVtcGxh
dGUgPD4gY2xhc3MgTWFwU2VsZWN0b3I8MzI+IHsKQEAgLTE3NTcsNyArMTcxOCw2IEBAIGNsYXNz
IFRDTWFsbG9jX1BhZ2VIZWFwIHsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTcGFuKj4o
cGFnZW1hcF8uZ2V0KHApKTsKICAgfQogCi0jaWZkZWYgV1RGX0NIQU5HRVMKICAgaW5saW5lIFNw
YW4qIEdldERlc2NyaXB0b3JFbnN1cmVTYWZlKFBhZ2VJRCBwKQogICB7CiAgICAgICBwYWdlbWFw
Xy5FbnN1cmUocCwgMSk7CkBAIC0xNzY1LDEyICsxNzI1LDYgQEAgY2xhc3MgVENNYWxsb2NfUGFn
ZUhlYXAgewogICB9CiAgICAgCiAgIHNpemVfdCBSZXR1cm5lZEJ5dGVzKCkgY29uc3Q7Ci0jZW5k
aWYKLQotICAvLyBEdW1wIHN0YXRlIHRvIHN0ZGVycgotI2lmbmRlZiBXVEZfQ0hBTkdFUwotICB2
b2lkIER1bXAoVENNYWxsb2NfUHJpbnRlciogb3V0KTsKLSNlbmRpZgogCiAgIC8vIFJldHVybiBu
dW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCiAgIGlubGluZSB1aW50NjRfdCBT
eXN0ZW1CeXRlcygpIGNvbnN0IHsgcmV0dXJuIHN5c3RlbV9ieXRlc187IH0KQEAgLTE4NzAsNyAr
MTgyNCw3IEBAIGNsYXNzIFRDTWFsbG9jX1BhZ2VIZWFwIHsKICAgLy8gSW5kZXggb2YgbGFzdCBm
cmVlIGxpc3Qgd2Ugc2NhdmVuZ2VkCiAgIHNpemVfdCBzY2F2ZW5nZV9pbmRleF87CiAgIAotI2lm
IGRlZmluZWQoV1RGX0NIQU5HRVMpICYmIE9TKERBUldJTikKKyNpZiBPUyhEQVJXSU4pCiAgIGZy
aWVuZCBjbGFzcyBGYXN0TWFsbG9jWm9uZTsKICNlbmRpZgogCkBAIC0yNDI2LDcgKzIzODAsNiBA
QCB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpSZWdpc3RlclNpemVDbGFzcyhTcGFuKiBzcGFuLCBz
aXplX3Qgc2MpIHsKICAgfQogfQogICAgIAotI2lmZGVmIFdURl9DSEFOR0VTCiBzaXplX3QgVENN
YWxsb2NfUGFnZUhlYXA6OlJldHVybmVkQnl0ZXMoKSBjb25zdCB7CiAgICAgc2l6ZV90IHJlc3Vs
dCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7CkBA
IC0yNDM5LDc0ICsyMzkyLDYgQEAgc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpSZXR1cm5lZEJ5
dGVzKCkgY29uc3QgewogICAgICAgICByZXN1bHQgKz0gcy0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQ7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLSNlbmRpZgotCi0jaWZuZGVmIFdURl9DSEFOR0VTCi1z
dGF0aWMgZG91YmxlIFBhZ2VzVG9NQih1aW50NjRfdCBwYWdlcykgewotICByZXR1cm4gKHBhZ2Vz
IDw8IGtQYWdlU2hpZnQpIC8gMTA0ODU3Ni4wOwotfQotCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFw
OjpEdW1wKFRDTWFsbG9jX1ByaW50ZXIqIG91dCkgewotICBpbnQgbm9uZW1wdHlfc2l6ZXMgPSAw
OwotICBmb3IgKGludCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7Ci0gICAgaWYgKCFETExf
SXNFbXB0eSgmZnJlZV9bc10ubm9ybWFsKSB8fCAhRExMX0lzRW1wdHkoJmZyZWVfW3NdLnJldHVy
bmVkKSkgewotICAgICAgbm9uZW1wdHlfc2l6ZXMrKzsKLSAgICB9Ci0gIH0KLSAgb3V0LT5wcmlu
dGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7
Ci0gIG91dC0+cHJpbnRmKCJQYWdlSGVhcDogJWQgc2l6ZXM7ICU2LjFmIE1CIGZyZWVcbiIsCi0g
ICAgICAgICAgICAgIG5vbmVtcHR5X3NpemVzLCBQYWdlc1RvTUIoZnJlZV9wYWdlc18pKTsKLSAg
b3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIik7Ci0gIHVpbnQ2NF90IHRvdGFsX25vcm1hbCA9IDA7Ci0gIHVpbnQ2NF90IHRvdGFs
X3JldHVybmVkID0gMDsKLSAgZm9yIChpbnQgcyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykgewot
ICAgIGNvbnN0IGludCBuX2xlbmd0aCA9IERMTF9MZW5ndGgoJmZyZWVfW3NdLm5vcm1hbCk7Ci0g
ICAgY29uc3QgaW50IHJfbGVuZ3RoID0gRExMX0xlbmd0aCgmZnJlZV9bc10ucmV0dXJuZWQpOwot
ICAgIGlmIChuX2xlbmd0aCArIHJfbGVuZ3RoID4gMCkgewotICAgICAgdWludDY0X3Qgbl9wYWdl
cyA9IHMgKiBuX2xlbmd0aDsKLSAgICAgIHVpbnQ2NF90IHJfcGFnZXMgPSBzICogcl9sZW5ndGg7
Ci0gICAgICB0b3RhbF9ub3JtYWwgKz0gbl9wYWdlczsKLSAgICAgIHRvdGFsX3JldHVybmVkICs9
IHJfcGFnZXM7Ci0gICAgICBvdXQtPnByaW50ZigiJTZ1IHBhZ2VzICogJTZ1IHNwYW5zIH4gJTYu
MWYgTUI7ICU2LjFmIE1CIGN1bSIKLSAgICAgICAgICAgICAgICAgICI7IHVubWFwcGVkOiAlNi4x
ZiBNQjsgJTYuMWYgTUIgY3VtXG4iLAotICAgICAgICAgICAgICAgICAgcywKLSAgICAgICAgICAg
ICAgICAgIChuX2xlbmd0aCArIHJfbGVuZ3RoKSwKLSAgICAgICAgICAgICAgICAgIFBhZ2VzVG9N
QihuX3BhZ2VzICsgcl9wYWdlcyksCi0gICAgICAgICAgICAgICAgICBQYWdlc1RvTUIodG90YWxf
bm9ybWFsICsgdG90YWxfcmV0dXJuZWQpLAotICAgICAgICAgICAgICAgICAgUGFnZXNUb01CKHJf
cGFnZXMpLAotICAgICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsX3JldHVybmVkKSk7Ci0g
ICAgfQotICB9Ci0KLSAgdWludDY0X3Qgbl9wYWdlcyA9IDA7Ci0gIHVpbnQ2NF90IHJfcGFnZXMg
PSAwOwotICBpbnQgbl9zcGFucyA9IDA7Ci0gIGludCByX3NwYW5zID0gMDsKLSAgb3V0LT5wcmlu
dGYoIk5vcm1hbCBsYXJnZSBzcGFuczpcbiIpOwotICBmb3IgKFNwYW4qIHMgPSBsYXJnZV8ubm9y
bWFsLm5leHQ7IHMgIT0gJmxhcmdlXy5ub3JtYWw7IHMgPSBzLT5uZXh0KSB7Ci0gICAgb3V0LT5w
cmludGYoIiAgIFsgJTYiIFBSSXVTICIgcGFnZXMgXSAlNi4xZiBNQlxuIiwKLSAgICAgICAgICAg
ICAgICBzLT5sZW5ndGgsIFBhZ2VzVG9NQihzLT5sZW5ndGgpKTsKLSAgICBuX3BhZ2VzICs9IHMt
Pmxlbmd0aDsKLSAgICBuX3NwYW5zKys7Ci0gIH0KLSAgb3V0LT5wcmludGYoIlVubWFwcGVkIGxh
cmdlIHNwYW5zOlxuIik7Ci0gIGZvciAoU3BhbiogcyA9IGxhcmdlXy5yZXR1cm5lZC5uZXh0OyBz
ICE9ICZsYXJnZV8ucmV0dXJuZWQ7IHMgPSBzLT5uZXh0KSB7Ci0gICAgb3V0LT5wcmludGYoIiAg
IFsgJTYiIFBSSXVTICIgcGFnZXMgXSAlNi4xZiBNQlxuIiwKLSAgICAgICAgICAgICAgICBzLT5s
ZW5ndGgsIFBhZ2VzVG9NQihzLT5sZW5ndGgpKTsKLSAgICByX3BhZ2VzICs9IHMtPmxlbmd0aDsK
LSAgICByX3NwYW5zKys7Ci0gIH0KLSAgdG90YWxfbm9ybWFsICs9IG5fcGFnZXM7Ci0gIHRvdGFs
X3JldHVybmVkICs9IHJfcGFnZXM7Ci0gIG91dC0+cHJpbnRmKCI+MjU1ICAgbGFyZ2UgKiAlNnUg
c3BhbnMgfiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtIgotICAgICAgICAgICAgICAiOyB1bm1hcHBl
ZDogJTYuMWYgTUI7ICU2LjFmIE1CIGN1bVxuIiwKLSAgICAgICAgICAgICAgKG5fc3BhbnMgKyBy
X3NwYW5zKSwKLSAgICAgICAgICAgICAgUGFnZXNUb01CKG5fcGFnZXMgKyByX3BhZ2VzKSwKLSAg
ICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsX25vcm1hbCArIHRvdGFsX3JldHVybmVkKSwKLSAg
ICAgICAgICAgICAgUGFnZXNUb01CKHJfcGFnZXMpLAotICAgICAgICAgICAgICBQYWdlc1RvTUIo
dG90YWxfcmV0dXJuZWQpKTsKLX0KLSNlbmRpZgogCiBib29sIFRDTWFsbG9jX1BhZ2VIZWFwOjpH
cm93SGVhcChMZW5ndGggbikgewogICBBU1NFUlQoa01heFBhZ2VzID49IGtNaW5TeXN0ZW1BbGxv
Yyk7CkBAIC0yNzEyLDE0ICsyNTk3LDEyIEBAIGNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hlX0Zy
ZWVMaXN0IHsKICAgICAgICAgfQogICAgIH0KIAotI2lmZGVmIFdURl9DSEFOR0VTCiAgIHRlbXBs
YXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KICAgdm9pZCBlbnVtZXJhdGVGcmVlT2Jq
ZWN0cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFkZXIpCiAgIHsKICAgICAgIGZv
ciAoSGFyZGVuZWRTTEwgbmV4dE9iamVjdCA9IGxpc3RfOyBuZXh0T2JqZWN0OyBuZXh0T2JqZWN0
LnNldFZhbHVlKHJlYWRlci5uZXh0RW50cnlJbkhhcmRlbmVkTGlua2VkTGlzdChyZWludGVycHJl
dF9jYXN0PHZvaWQqKj4obmV4dE9iamVjdC52YWx1ZSgpKSwgZW50cm9weV8pKSkKICAgICAgICAg
ICBmaW5kZXIudmlzaXQobmV4dE9iamVjdC52YWx1ZSgpKTsKICAgfQotI2VuZGlmCiB9OwogCiAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KQEAgLTI3OTAsMTQgKzI2NzMsMTIgQEAgY2xhc3MgVENNYWxsb2NfVGhyZWFk
Q2FjaGUgewogICBzdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgIEJlY29tZUlkbGUoKTsKICAg
c3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICBSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsK
IAotI2lmZGVmIFdURl9DSEFOR0VTCiAgIHRlbXBsYXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJl
YWRlcj4KICAgdm9pZCBlbnVtZXJhdGVGcmVlT2JqZWN0cyhGaW5kZXImIGZpbmRlciwgY29uc3Qg
UmVhZGVyJiByZWFkZXIpCiAgIHsKICAgICAgIGZvciAodW5zaWduZWQgc2l6ZUNsYXNzID0gMDsg
c2l6ZUNsYXNzIDwga051bUNsYXNzZXM7IHNpemVDbGFzcysrKQogICAgICAgICAgIGxpc3RfW3Np
emVDbGFzc10uZW51bWVyYXRlRnJlZU9iamVjdHMoZmluZGVyLCByZWFkZXIpOwogICB9Ci0jZW5k
aWYKIH07CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzQ0NCw5ICszMzI1LDcgQEAgdm9pZCBUQ01hbGxv
Y19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSgpIHsKICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhl
YXBfbG9jayk7CiAgIGlmICghcGhpbml0ZWQpIHsKICAgICB1aW50cHRyX3QgZW50cm9weSA9IEhB
UkRFTklOR19FTlRST1BZOwotI2lmZGVmIFdURl9DSEFOR0VTCiAgICAgSW5pdFRTRCgpOwotI2Vu
ZGlmCiAgICAgSW5pdFNpemVDbGFzc2VzKCk7CiAgICAgdGhyZWFkaGVhcF9hbGxvY2F0b3IuSW5p
dChlbnRyb3B5KTsKICAgICBzcGFuX2FsbG9jYXRvci5Jbml0KGVudHJvcHkpOwpAQCAtMzQ1OSw3
ICszMzM4LDcgQEAgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSgpIHsKICAg
ICB9CiAgICAgcGFnZWhlYXAtPmluaXQoKTsKICAgICBwaGluaXRlZCA9IDE7Ci0jaWYgZGVmaW5l
ZChXVEZfQ0hBTkdFUykgJiYgT1MoREFSV0lOKQorI2lmIE9TKERBUldJTikKICAgICBNYWxsb2NI
b29rOjppbml0KCk7CiAgICAgRmFzdE1hbGxvY1pvbmU6OmluaXQoKTsKICNlbmRpZgpAQCAtMzUy
NSwxMSArMzQwNCw3IEBAIHZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRUU0QoKSB7CiAg
IHB0aHJlYWRfdCB6ZXJvOwogICBtZW1zZXQoJnplcm8sIDAsIHNpemVvZih6ZXJvKSk7CiAjZW5k
aWYKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9j
ayk7Ci0jZWxzZQogICBBU1NFUlQocGFnZWhlYXBfbG9jay5Jc0hlbGQoKSk7Ci0jZW5kaWYKICAg
Zm9yIChUQ01hbGxvY19UaHJlYWRDYWNoZSogaCA9IHRocmVhZF9oZWFwczsgaCAhPSBOVUxMOyBo
ID0gaC0+bmV4dF8pIHsKICNpZiBPUyhXSU5ET1dTKQogICAgIGlmIChoLT50aWRfID09IDApIHsK
QEAgLTM2NzUsMjQzICszNTUwLDYgQEAgc3RydWN0IFRDTWFsbG9jU3RhdHMgewogICB1aW50NjRf
dCBtZXRhZGF0YV9ieXRlczsgICAgICAvLyBCeXRlcyBhbGxvY2VkIGZvciBtZXRhZGF0YQogfTsK
IAotI2lmbmRlZiBXVEZfQ0hBTkdFUwotLy8gR2V0IHN0YXRzIGludG8gInIiLiAgQWxzbyBnZXQg
cGVyLXNpemUtY2xhc3MgY291bnRzIGlmIGNsYXNzX2NvdW50ICE9IE5VTEwKLXN0YXRpYyB2b2lk
IEV4dHJhY3RTdGF0cyhUQ01hbGxvY1N0YXRzKiByLCB1aW50NjRfdCogY2xhc3NfY291bnQpIHsK
LSAgci0+Y2VudHJhbF9ieXRlcyA9IDA7Ci0gIHItPnRyYW5zZmVyX2J5dGVzID0gMDsKLSAgZm9y
IChpbnQgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgY29uc3QgaW50IGxl
bmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLmxlbmd0aCgpOwotICAgIGNvbnN0IGludCB0Y19sZW5n
dGggPSBjZW50cmFsX2NhY2hlW2NsXS50Y19sZW5ndGgoKTsKLSAgICByLT5jZW50cmFsX2J5dGVz
ICs9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihCeXRlU2l6ZUZvckNsYXNzKGNsKSkgKiBsZW5ndGg7
Ci0gICAgci0+dHJhbnNmZXJfYnl0ZXMgKz0KLSAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihC
eXRlU2l6ZUZvckNsYXNzKGNsKSkgKiB0Y19sZW5ndGg7Ci0gICAgaWYgKGNsYXNzX2NvdW50KSBj
bGFzc19jb3VudFtjbF0gPSBsZW5ndGggKyB0Y19sZW5ndGg7Ci0gIH0KLQotICAvLyBBZGQgc3Rh
dHMgZnJvbSBwZXItdGhyZWFkIGhlYXBzCi0gIHItPnRocmVhZF9ieXRlcyA9IDA7Ci0gIHsgLy8g
c2NvcGUKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBmb3IgKFRD
TWFsbG9jX1RocmVhZENhY2hlKiBoID0gdGhyZWFkX2hlYXBzOyBoICE9IE5VTEw7IGggPSBoLT5u
ZXh0XykgewotICAgICAgci0+dGhyZWFkX2J5dGVzICs9IGgtPlNpemUoKTsKLSAgICAgIGlmIChj
bGFzc19jb3VudCkgewotICAgICAgICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNsYXNz
ZXM7ICsrY2wpIHsKLSAgICAgICAgICBjbGFzc19jb3VudFtjbF0gKz0gaC0+ZnJlZWxpc3RfbGVu
Z3RoKGNsKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHsgLy9zY29wZQot
ICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAgIHItPnN5c3RlbV9ieXRl
cyA9IHBhZ2VoZWFwLT5TeXN0ZW1CeXRlcygpOwotICAgIHItPm1ldGFkYXRhX2J5dGVzID0gbWV0
YWRhdGFfc3lzdGVtX2J5dGVzOwotICAgIHItPnBhZ2VoZWFwX2J5dGVzID0gcGFnZWhlYXAtPkZy
ZWVCeXRlcygpOwotICB9Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBXVEZfQ0hBTkdFUwotLy8gV1JJ
VEUgc3RhdHMgdG8gIm91dCIKLXN0YXRpYyB2b2lkIER1bXBTdGF0cyhUQ01hbGxvY19QcmludGVy
KiBvdXQsIGludCBsZXZlbCkgewotICBUQ01hbGxvY1N0YXRzIHN0YXRzOwotICB1aW50NjRfdCBj
bGFzc19jb3VudFtrTnVtQ2xhc3Nlc107Ci0gIEV4dHJhY3RTdGF0cygmc3RhdHMsIChsZXZlbCA+
PSAyID8gY2xhc3NfY291bnQgOiBOVUxMKSk7Ci0KLSAgaWYgKGxldmVsID49IDIpIHsKLSAgICBv
dXQtPnByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tXG4iKTsKLSAgICB1aW50NjRfdCBjdW11bGF0aXZlID0gMDsKLSAgICBmb3IgKGludCBjbCA9
IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICAgIGlmIChjbGFzc19jb3VudFtjbF0g
PiAwKSB7Ci0gICAgICAgIHVpbnQ2NF90IGNsYXNzX2J5dGVzID0gY2xhc3NfY291bnRbY2xdICog
Qnl0ZVNpemVGb3JDbGFzcyhjbCk7Ci0gICAgICAgIGN1bXVsYXRpdmUgKz0gY2xhc3NfYnl0ZXM7
Ci0gICAgICAgIG91dC0+cHJpbnRmKCJjbGFzcyAlM2QgWyAlOCIgUFJJdVMgIiBieXRlcyBdIDog
IgotICAgICAgICAgICAgICAgICIlOCIgUFJJdTY0ICIgb2JqczsgJTUuMWYgTUI7ICU1LjFmIGN1
bSBNQlxuIiwKLSAgICAgICAgICAgICAgICBjbCwgQnl0ZVNpemVGb3JDbGFzcyhjbCksCi0gICAg
ICAgICAgICAgICAgY2xhc3NfY291bnRbY2xdLAotICAgICAgICAgICAgICAgIGNsYXNzX2J5dGVz
IC8gMTA0ODU3Ni4wLAotICAgICAgICAgICAgICAgIGN1bXVsYXRpdmUgLyAxMDQ4NTc2LjApOwot
ICAgICAgfQotICAgIH0KLQotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwot
ICAgIHBhZ2VoZWFwLT5EdW1wKG91dCk7Ci0gIH0KLQotICBjb25zdCB1aW50NjRfdCBieXRlc19p
bl91c2UgPSBzdGF0cy5zeXN0ZW1fYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLSBzdGF0cy5wYWdlaGVhcF9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtIHN0YXRzLmNlbnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LSBzdGF0cy50cmFuc2Zlcl9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
IHN0YXRzLnRocmVhZF9ieXRlczsKLQotICBvdXQtPnByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0gICAgICAgICAgICAgICJNQUxMT0M6
ICUxMiIgUFJJdTY0ICIgSGVhcCBzaXplXG4iCi0gICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIg
UFJJdTY0ICIgQnl0ZXMgaW4gdXNlIGJ5IGFwcGxpY2F0aW9uXG4iCi0gICAgICAgICAgICAgICJN
QUxMT0M6ICUxMiIgUFJJdTY0ICIgQnl0ZXMgZnJlZSBpbiBwYWdlIGhlYXBcbiIKLSAgICAgICAg
ICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVlIGluIGNlbnRyYWwgY2FjaGVc
biIKLSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVlIGluIHRy
YW5zZmVyIGNhY2hlXG4iCi0gICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIgUFJJdTY0ICIgQnl0
ZXMgZnJlZSBpbiB0aHJlYWQgY2FjaGVzXG4iCi0gICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIg
UFJJdTY0ICIgU3BhbnMgaW4gdXNlXG4iCi0gICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIgUFJJ
dTY0ICIgVGhyZWFkIGhlYXBzIGluIHVzZVxuIgotICAgICAgICAgICAgICAiTUFMTE9DOiAlMTIi
IFBSSXU2NCAiIE1ldGFkYXRhIGFsbG9jYXRlZFxuIgotICAgICAgICAgICAgICAiLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLAotICAgICAgICAgICAg
ICBzdGF0cy5zeXN0ZW1fYnl0ZXMsCi0gICAgICAgICAgICAgIGJ5dGVzX2luX3VzZSwKLSAgICAg
ICAgICAgICAgc3RhdHMucGFnZWhlYXBfYnl0ZXMsCi0gICAgICAgICAgICAgIHN0YXRzLmNlbnRy
YWxfYnl0ZXMsCi0gICAgICAgICAgICAgIHN0YXRzLnRyYW5zZmVyX2J5dGVzLAotICAgICAgICAg
ICAgICBzdGF0cy50aHJlYWRfYnl0ZXMsCi0gICAgICAgICAgICAgIHVpbnQ2NF90KHNwYW5fYWxs
b2NhdG9yLmludXNlKCkpLAotICAgICAgICAgICAgICB1aW50NjRfdCh0aHJlYWRoZWFwX2FsbG9j
YXRvci5pbnVzZSgpKSwKLSAgICAgICAgICAgICAgc3RhdHMubWV0YWRhdGFfYnl0ZXMpOwotfQot
Ci1zdGF0aWMgdm9pZCBQcmludFN0YXRzKGludCBsZXZlbCkgewotICBjb25zdCBpbnQga0J1ZmZl
clNpemUgPSAxNiA8PCAxMDsKLSAgY2hhciogYnVmZmVyID0gbmV3IGNoYXJba0J1ZmZlclNpemVd
OwotICBUQ01hbGxvY19QcmludGVyIHByaW50ZXIoYnVmZmVyLCBrQnVmZmVyU2l6ZSk7Ci0gIER1
bXBTdGF0cygmcHJpbnRlciwgbGV2ZWwpOwotICB3cml0ZShTVERFUlJfRklMRU5PLCBidWZmZXIs
IHN0cmxlbihidWZmZXIpKTsKLSAgZGVsZXRlW10gYnVmZmVyOwotfQotCi1zdGF0aWMgdm9pZCoq
IER1bXBTdGFja1RyYWNlcygpIHsKLSAgLy8gQ291bnQgaG93IG11Y2ggc3BhY2Ugd2UgbmVlZAot
ICBpbnQgbmVlZGVkX3Nsb3RzID0gMDsKLSAgewotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2Vo
ZWFwX2xvY2spOwotICAgIGZvciAoU3BhbiogcyA9IHNhbXBsZWRfb2JqZWN0cy5uZXh0OyBzICE9
ICZzYW1wbGVkX29iamVjdHM7IHMgPSBzLT5uZXh0KSB7Ci0gICAgICBTdGFja1RyYWNlKiBzdGFj
ayA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHMtPm9iamVjdHMpOwotICAgICAgbmVl
ZGVkX3Nsb3RzICs9IDMgKyBzdGFjay0+ZGVwdGg7Ci0gICAgfQotICAgIG5lZWRlZF9zbG90cyAr
PSAxMDA7ICAgICAgICAgICAgLy8gU2xvcCBpbiBjYXNlIHNhbXBsZSBncm93cwotICAgIG5lZWRl
ZF9zbG90cyArPSBuZWVkZWRfc2xvdHMvODsgLy8gQW4gZXh0cmEgMTIuNSUgc2xvcAotICB9Ci0K
LSAgdm9pZCoqIHJlc3VsdCA9IG5ldyB2b2lkKltuZWVkZWRfc2xvdHNdOwotICBpZiAocmVzdWx0
ID09IE5VTEwpIHsKLSAgICBNRVNTQUdFKCJ0Y21hbGxvYzogY291bGQgbm90IGFsbG9jYXRlICVk
IHNsb3RzIGZvciBzdGFjayB0cmFjZXNcbiIsCi0gICAgICAgICAgICBuZWVkZWRfc2xvdHMpOwot
ICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9j
ayk7Ci0gIGludCB1c2VkX3Nsb3RzID0gMDsKLSAgZm9yIChTcGFuKiBzID0gc2FtcGxlZF9vYmpl
Y3RzLm5leHQ7IHMgIT0gJnNhbXBsZWRfb2JqZWN0czsgcyA9IHMtPm5leHQpIHsKLSAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih1c2VkX3Nsb3RzIDwgbmVlZGVkX3Nsb3RzKTsg
Ly8gTmVlZCB0byBsZWF2ZSByb29tIGZvciB0ZXJtaW5hdG9yCi0gICAgU3RhY2tUcmFjZSogc3Rh
Y2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzLT5vYmplY3RzKTsKLSAgICBpZiAo
dXNlZF9zbG90cyArIDMgKyBzdGFjay0+ZGVwdGggPj0gbmVlZGVkX3Nsb3RzKSB7Ci0gICAgICAv
LyBObyBtb3JlIHJvb20KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJlc3VsdFt1c2VkX3Ns
b3RzKzBdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pigx
KSk7Ci0gICAgcmVzdWx0W3VzZWRfc2xvdHMrMV0gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihz
dGFjay0+c2l6ZSk7Ci0gICAgcmVzdWx0W3VzZWRfc2xvdHMrMl0gPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdGFjay0+ZGVwdGgpOwotICAgIGZvciAoaW50IGQgPSAwOyBkIDwgc3RhY2stPmRl
cHRoOyBkKyspIHsKLSAgICAgIHJlc3VsdFt1c2VkX3Nsb3RzKzMrZF0gPSBzdGFjay0+c3RhY2tb
ZF07Ci0gICAgfQotICAgIHVzZWRfc2xvdHMgKz0gMyArIHN0YWNrLT5kZXB0aDsKLSAgfQotICBy
ZXN1bHRbdXNlZF9zbG90c10gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KDApKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi0jaWZuZGVmIFdU
Rl9DSEFOR0VTCi0KLS8vIFRDTWFsbG9jJ3Mgc3VwcG9ydCBmb3IgZXh0cmEgbWFsbG9jIGludGVy
ZmFjZXMKLWNsYXNzIFRDTWFsbG9jSW1wbGVtZW50YXRpb24gOiBwdWJsaWMgTWFsbG9jRXh0ZW5z
aW9uIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgdm9pZCBHZXRTdGF0cyhjaGFyKiBidWZmZXIsIGlu
dCBidWZmZXJfbGVuZ3RoKSB7Ci0gICAgQVNTRVJUKGJ1ZmZlcl9sZW5ndGggPiAwKTsKLSAgICBU
Q01hbGxvY19QcmludGVyIHByaW50ZXIoYnVmZmVyLCBidWZmZXJfbGVuZ3RoKTsKLQotICAgIC8v
IFByaW50IGxldmVsIG9uZSBzdGF0cyB1bmxlc3MgbG90cyBvZiBzcGFjZSBpcyBhdmFpbGFibGUK
LSAgICBpZiAoYnVmZmVyX2xlbmd0aCA8IDEwMDAwKSB7Ci0gICAgICBEdW1wU3RhdHMoJnByaW50
ZXIsIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICBEdW1wU3RhdHMoJnByaW50ZXIsIDIpOwotICAg
IH0KLSAgfQotCi0gIHZpcnR1YWwgdm9pZCoqIFJlYWRTdGFja1RyYWNlcygpIHsKLSAgICByZXR1
cm4gRHVtcFN0YWNrVHJhY2VzKCk7Ci0gIH0KLQotICB2aXJ0dWFsIGJvb2wgR2V0TnVtZXJpY1By
b3BlcnR5KGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCogdmFsdWUpIHsKLSAgICBBU1NFUlQobmFt
ZSAhPSBOVUxMKTsKLQotICAgIGlmIChzdHJjbXAobmFtZSwgImdlbmVyaWMuY3VycmVudF9hbGxv
Y2F0ZWRfYnl0ZXMiKSA9PSAwKSB7Ci0gICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOwotICAgICAg
RXh0cmFjdFN0YXRzKCZzdGF0cywgTlVMTCk7Ci0gICAgICAqdmFsdWUgPSBzdGF0cy5zeXN0ZW1f
Ynl0ZXMKLSAgICAgICAgICAgICAgIC0gc3RhdHMudGhyZWFkX2J5dGVzCi0gICAgICAgICAgICAg
ICAtIHN0YXRzLmNlbnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBf
Ynl0ZXM7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUs
ICJnZW5lcmljLmhlYXBfc2l6ZSIpID09IDApIHsKLSAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7
Ci0gICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsKLSAgICAgICp2YWx1ZSA9IHN0YXRz
LnN5c3RlbV9ieXRlczsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChzdHJj
bXAobmFtZSwgInRjbWFsbG9jLnNsYWNrX2J5dGVzIikgPT0gMCkgewotICAgICAgLy8gV2UgYXNz
dW1lIHRoYXQgYnl0ZXMgaW4gdGhlIHBhZ2UgaGVhcCBhcmUgbm90IGZyYWdtZW50ZWQgdG9vCi0g
ICAgICAvLyBiYWRseSwgYW5kIGFyZSB0aGVyZWZvcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9u
LgotICAgICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgICAqdmFsdWUg
PSBwYWdlaGVhcC0+RnJlZUJ5dGVzKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVz
IikgPT0gMCkgewotICAgICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAg
ICAqdmFsdWUgPSBvdmVyYWxsX3RocmVhZF9jYWNoZV9zaXplOwotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2MuY3VycmVudF90b3RhbF90
aHJlYWRfY2FjaGVfYnl0ZXMiKSA9PSAwKSB7Ci0gICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOwot
ICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgTlVMTCk7Ci0gICAgICAqdmFsdWUgPSBzdGF0cy50
aHJlYWRfYnl0ZXM7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLQotICB2aXJ0dWFsIGJvb2wgU2V0TnVtZXJpY1Byb3BlcnR5KGNvbnN0IGNoYXIq
IG5hbWUsIHNpemVfdCB2YWx1ZSkgewotICAgIEFTU0VSVChuYW1lICE9IE5VTEwpOwotCi0gICAg
aWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2MubWF4X3RvdGFsX3RocmVhZF9jYWNoZV9ieXRlcyIp
ID09IDApIHsKLSAgICAgIC8vIENsaXAgdGhlIHZhbHVlIHRvIGEgcmVhc29uYWJsZSByYW5nZQot
ICAgICAgaWYgKHZhbHVlIDwga01pblRocmVhZENhY2hlU2l6ZSkgdmFsdWUgPSBrTWluVGhyZWFk
Q2FjaGVTaXplOwotICAgICAgaWYgKHZhbHVlID4gKDE8PDMwKSkgdmFsdWUgPSAoMTw8MzApOyAg
ICAgLy8gTGltaXQgdG8gMUdCCi0KLSAgICAgIFNwaW5Mb2NrSG9sZGVyIGwoJnBhZ2VoZWFwX2xv
Y2spOwotICAgICAgb3ZlcmFsbF90aHJlYWRfY2FjaGVfc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVf
dD4odmFsdWUpOwotICAgICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRocmVhZENh
Y2hlU2l6ZSgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotICB9Ci0KLSAgdmlydHVhbCB2b2lkIE1hcmtUaHJlYWRJZGxlKCkgewotICAgIFRDTWFsbG9j
X1RocmVhZENhY2hlOjpCZWNvbWVJZGxlKCk7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgUmVsZWFz
ZUZyZWVNZW1vcnkoKSB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0g
ICAgcGFnZWhlYXAtPlJlbGVhc2VGcmVlUGFnZXMoKTsKLSAgfQotfTsKLSNlbmRpZgotCiAvLyBU
aGUgY29uc3RydWN0b3IgYWxsb2NhdGVzIGFuIG9iamVjdCB0byBlbnN1cmUgdGhhdCBpbml0aWFs
aXphdGlvbgogLy8gcnVucyBiZWZvcmUgbWFpbigpLCBhbmQgdGhlcmVmb3JlIHdlIGRvIG5vdCBo
YXZlIGEgY2hhbmNlIHRvIGJlY29tZQogLy8gbXVsdGktdGhyZWFkZWQgYmVmb3JlIGluaXRpYWxp
emF0aW9uLiAgV2UgYWxzbyBjcmVhdGUgdGhlIFRTRCBrZXkKQEAgLTM5MzIsNzUgKzM1NzAsMTYg
QEAgY2xhc3MgVENNYWxsb2NHdWFyZCB7CiAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUga2VybmVs
IGFsc28gc3VwcG9ydHMgVExTIChuZWVkcyB0byBoYXBwZW4gYXQgcnVudGltZSkKICAgICBDaGVj
a0lmS2VybmVsU3VwcG9ydHNUTFMoKTsKICNlbmRpZgotI2lmbmRlZiBXVEZfQ0hBTkdFUwotI2lm
ZGVmIFdJTjMyICAgICAgICAgICAgICAgICAgICAvLyBwYXRjaCB0aGUgd2luZG93cyBWaXJ0dWFs
QWxsb2MsIGV0Yy4KLSAgICBQYXRjaFdpbmRvd3NGdW5jdGlvbnMoKTsgICAgLy8gZGVmaW5lZCBp
biB3aW5kb3dzL3BhdGNoX2Z1bmN0aW9ucy5jYwotI2VuZGlmCi0jZW5kaWYKICAgICBmcmVlKG1h
bGxvYygxKSk7CiAgICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRUU0QoKTsKICAgICBmcmVl
KG1hbGxvYygxKSk7Ci0jaWZuZGVmIFdURl9DSEFOR0VTCi0gICAgTWFsbG9jRXh0ZW5zaW9uOjpS
ZWdpc3RlcihuZXcgVENNYWxsb2NJbXBsZW1lbnRhdGlvbik7Ci0jZW5kaWYKICAgfQotCi0jaWZu
ZGVmIFdURl9DSEFOR0VTCi0gIH5UQ01hbGxvY0d1YXJkKCkgewotICAgIGNvbnN0IGNoYXIqIGVu
diA9IGdldGVudigiTUFMTE9DU1RBVFMiKTsKLSAgICBpZiAoZW52ICE9IE5VTEwpIHsKLSAgICAg
IGludCBsZXZlbCA9IGF0b2koZW52KTsKLSAgICAgIGlmIChsZXZlbCA8IDEpIGxldmVsID0gMTsK
LSAgICAgIFByaW50U3RhdHMobGV2ZWwpOwotICAgIH0KLSNpZmRlZiBXSU4zMgotICAgIFVucGF0
Y2hXaW5kb3dzRnVuY3Rpb25zKCk7Ci0jZW5kaWYKLSAgfQotI2VuZGlmCiB9OwogCi0jaWZuZGVm
IFdURl9DSEFOR0VTCi1zdGF0aWMgVENNYWxsb2NHdWFyZCBtb2R1bGVfZW50ZXJfZXhpdF9ob29r
OwotI2VuZGlmCi0KLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBIZWxwZXJzIGZvciB0aGUgZXhwb3J0ZWQg
cm91dGluZXMgYmVsb3cKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jaWZuZGVmIFdURl9DSEFOR0VTCi0KLXN0
YXRpYyBTcGFuKiBEb1NhbXBsZWRBbGxvY2F0aW9uKHNpemVfdCBzaXplKSB7Ci0KLSAgLy8gR3Jh
YiB0aGUgc3RhY2sgdHJhY2Ugb3V0c2lkZSB0aGUgaGVhcCBsb2NrCi0gIFN0YWNrVHJhY2UgdG1w
OwotICB0bXAuZGVwdGggPSBHZXRTdGFja1RyYWNlKHRtcC5zdGFjaywga01heFN0YWNrRGVwdGgs
IDEpOwotICB0bXAuc2l6ZSA9IHNpemU7Ci0KLSAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBf
bG9jayk7Ci0gIC8vIEFsbG9jYXRlIHNwYW4KLSAgU3BhbiAqc3BhbiA9IHBhZ2VoZWFwLT5OZXco
cGFnZXMoc2l6ZSA9PSAwID8gMSA6IHNpemUpKTsKLSAgaWYgKHNwYW4gPT0gTlVMTCkgewotICAg
IHJldHVybiBOVUxMOwotICB9Ci0KLSAgLy8gQWxsb2NhdGUgc3RhY2sgdHJhY2UKLSAgU3RhY2tU
cmFjZSAqc3RhY2sgPSBzdGFja3RyYWNlX2FsbG9jYXRvci5OZXcoKTsKLSAgaWYgKHN0YWNrID09
IE5VTEwpIHsKLSAgICAvLyBTYW1wbGluZyBmYWlsZWQgYmVjYXVzZSBvZiBsYWNrIG9mIG1lbW9y
eQotICAgIHJldHVybiBzcGFuOwotICB9Ci0KLSAgKnN0YWNrID0gdG1wOwotICBzcGFuLT5zYW1w
bGUgPSAxOwotICBzcGFuLT5vYmplY3RzID0gc3RhY2s7Ci0gIERMTF9QcmVwZW5kKCZzYW1wbGVk
X29iamVjdHMsIHNwYW4pOwotCi0gIHJldHVybiBzcGFuOwotfQotI2VuZGlmCi0KICNpZiAhQVNT
RVJUX0RJU0FCTEVECiBzdGF0aWMgaW5saW5lIGJvb2wgQ2hlY2tDYWNoZWRTaXplQ2xhc3Modm9p
ZCAqcHRyKSB7CiAgIFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikg
Pj4ga1BhZ2VTaGlmdDsKQEAgLTQwMjQsMjYgKzM2MDMsMTQgQEAgc3RhdGljIGlubGluZSB2b2lk
KiBTcGFuVG9NYWxsb2NSZXN1bHQoU3BhbiAqc3BhbikgewogICByZXR1cm4gQ2hlY2tlZE1hbGxv
Y1Jlc3VsdChyZXN1bHQpOwogfQogCi0jaWZkZWYgV1RGX0NIQU5HRVMKIHRlbXBsYXRlIDxib29s
IGNyYXNoT25GYWlsdXJlPgotI2VuZGlmCiBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkKiBkb19t
YWxsb2Moc2l6ZV90IHNpemUpIHsKICAgdm9pZCogcmV0ID0gTlVMTDsKIAotI2lmZGVmIFdURl9D
SEFOR0VTCiAgICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKLSNlbmRpZgogCiAgIC8vIFRoZSBm
b2xsb3dpbmcgY2FsbCBmb3JjZXMgbW9kdWxlIGluaXRpYWxpemF0aW9uCiAgIFRDTWFsbG9jX1Ro
cmVhZENhY2hlKiBoZWFwID0gVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCk7Ci0jaWZu
ZGVmIFdURl9DSEFOR0VTCi0gIGlmICgoRkxBR1NfdGNtYWxsb2Nfc2FtcGxlX3BhcmFtZXRlciA+
IDApICYmIGhlYXAtPlNhbXBsZUFsbG9jYXRpb24oc2l6ZSkpIHsKLSAgICBTcGFuKiBzcGFuID0g
RG9TYW1wbGVkQWxsb2NhdGlvbihzaXplKTsKLSAgICBpZiAoc3BhbiAhPSBOVUxMKSB7Ci0gICAg
ICByZXQgPSBTcGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7Ci0gICAgfQotICB9IGVsc2UKLSNlbmRp
ZgogICBpZiAoc2l6ZSA+IGtNYXhTaXplKSB7CiAgICAgLy8gVXNlIHBhZ2UtbGV2ZWwgYWxsb2Nh
dG9yCiAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CkBAIC00MDU3LDEyICsz
NjI0LDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCogZG9fbWFsbG9jKHNpemVfdCBzaXpl
KSB7CiAgICAgcmV0ID0gQ2hlY2tlZE1hbGxvY1Jlc3VsdChoZWFwLT5BbGxvY2F0ZShzaXplKSk7
CiAgIH0KICAgaWYgKCFyZXQpIHsKLSNpZmRlZiBXVEZfQ0hBTkdFUwogICAgIGlmIChjcmFzaE9u
RmFpbHVyZSkgLy8gVGhpcyBicmFuY2ggc2hvdWxkIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNv
bXBpbGVyLgogICAgICAgICBDUkFTSCgpOwotI2Vsc2UKLSAgICBlcnJubyA9IEVOT01FTTsKLSNl
bmRpZgogICB9CiAgIHJldHVybiByZXQ7CiB9CkBAIC00MTA5LDkwICszNjcyLDggQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgdm9pZCBkb19mcmVlKHZvaWQqIHB0cikgewogICB9CiB9CiAKLSNpZm5k
ZWYgV1RGX0NIQU5HRVMKLS8vIEZvciB1c2UgYnkgZXhwb3J0ZWQgcm91dGluZXMgYmVsb3cgdGhh
dCB3YW50IHNwZWNpZmljIGFsaWdubWVudHMKLS8vCi0vLyBOb3RlOiB0aGlzIGNvZGUgY2FuIGJl
IHNsb3csIGFuZCBjYW4gc2lnbmlmaWNhbnRseSBmcmFnbWVudCBtZW1vcnkuCi0vLyBUaGUgZXhw
ZWN0YXRpb24gaXMgdGhhdCBtZW1hbGlnbi9wb3NpeF9tZW1hbGlnbi92YWxsb2MvcHZhbGxvYyB3
aWxsCi0vLyBub3QgYmUgaW52b2tlZCB2ZXJ5IG9mdGVuLiAgVGhpcyByZXF1aXJlbWVudCBzaW1w
bGlmaWVzIG91cgotLy8gaW1wbGVtZW50YXRpb24gYW5kIGFsbG93cyB1cyB0byB0dW5lIGZvciBl
eHBlY3RlZCBhbGxvY2F0aW9uCi0vLyBwYXR0ZXJucy4KLXN0YXRpYyB2b2lkKiBkb19tZW1hbGln
bihzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKSB7Ci0gIEFTU0VSVCgoYWxpZ24gJiAoYWxpZ24g
LSAxKSkgPT0gMCk7Ci0gIEFTU0VSVChhbGlnbiA+IDApOwotICBpZiAocGFnZWhlYXAgPT0gTlVM
TCkgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUoKTsKLQotICAvLyBBbGxvY2F0ZSBh
dCBsZWFzdCBvbmUgYnl0ZSB0byBhdm9pZCBib3VuZGFyeSBjb25kaXRpb25zIGJlbG93Ci0gIGlm
IChzaXplID09IDApIHNpemUgPSAxOwotCi0gIGlmIChzaXplIDw9IGtNYXhTaXplICYmIGFsaWdu
IDwga1BhZ2VTaXplKSB7Ci0gICAgLy8gU2VhcmNoIHRocm91Z2ggYWNjZXB0YWJsZSBzaXplIGNs
YXNzZXMgbG9va2luZyBmb3Igb25lIHdpdGgKLSAgICAvLyBlbm91Z2ggYWxpZ25tZW50LiAgVGhp
cyBkZXBlbmRzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAvLyBJbml0U2l6ZUNsYXNzZXMoKSBjdXJy
ZW50bHkgcHJvZHVjZXMgc2V2ZXJhbCBzaXplIGNsYXNzZXMgdGhhdAotICAgIC8vIGFyZSBhbGln
bmVkIGF0IHBvd2VycyBvZiB0d28uICBXZSB3aWxsIHdhc3RlIHRpbWUgYW5kIHNwYWNlIGlmCi0g
ICAgLy8gd2UgbWlzcyBpbiB0aGUgc2l6ZSBjbGFzcyBhcnJheSwgYnV0IHRoYXQgaXMgZGVlbWVk
IGFjY2VwdGFibGUKLSAgICAvLyBzaW5jZSBtZW1hbGlnbigpIHNob3VsZCBiZSB1c2VkIHJhcmVs
eS4KLSAgICBzaXplX3QgY2wgPSBTaXplQ2xhc3Moc2l6ZSk7Ci0gICAgd2hpbGUgKGNsIDwga051
bUNsYXNzZXMgJiYgKChjbGFzc190b19zaXplW2NsXSAmIChhbGlnbiAtIDEpKSAhPSAwKSkgewot
ICAgICAgY2wrKzsKLSAgICB9Ci0gICAgaWYgKGNsIDwga051bUNsYXNzZXMpIHsKLSAgICAgIFRD
TWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hl
KCk7Ci0gICAgICByZXR1cm4gQ2hlY2tlZE1hbGxvY1Jlc3VsdChoZWFwLT5BbGxvY2F0ZShjbGFz
c190b19zaXplW2NsXSkpOwotICAgIH0KLSAgfQotCi0gIC8vIFdlIHdpbGwgYWxsb2NhdGUgZGly
ZWN0bHkgZnJvbSB0aGUgcGFnZSBoZWFwCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xv
Y2spOwotCi0gIGlmIChhbGlnbiA8PSBrUGFnZVNpemUpIHsKLSAgICAvLyBBbnkgcGFnZS1sZXZl
bCBhbGxvY2F0aW9uIHdpbGwgYmUgZmluZQotICAgIC8vIFRPRE86IFdlIGNvdWxkIHB1dCB0aGUg
cmVzdCBvZiB0aGlzIHBhZ2UgaW4gdGhlIGFwcHJvcHJpYXRlCi0gICAgLy8gVE9ETzogY2FjaGUg
YnV0IGl0IGRvZXMgbm90IHNlZW0gd29ydGggaXQuCi0gICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFw
LT5OZXcocGFnZXMoc2l6ZSkpOwotICAgIHJldHVybiBzcGFuID09IE5VTEwgPyBOVUxMIDogU3Bh
blRvTWFsbG9jUmVzdWx0KHNwYW4pOwotICB9Ci0KLSAgLy8gQWxsb2NhdGUgZXh0cmEgcGFnZXMg
YW5kIGNhcnZlIG9mZiBhbiBhbGlnbmVkIHBvcnRpb24KLSAgY29uc3QgTGVuZ3RoIGFsbG9jID0g
cGFnZXMoc2l6ZSArIGFsaWduKTsKLSAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcoYWxsb2Mp
OwotICBpZiAoc3BhbiA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQotICAvLyBTa2lwIHN0YXJ0aW5n
IHBvcnRpb24gc28gdGhhdCB3ZSBlbmQgdXAgYWxpZ25lZAotICBMZW5ndGggc2tpcCA9IDA7Ci0g
IHdoaWxlICgoKChzcGFuLT5zdGFydCtza2lwKSA8PCBrUGFnZVNoaWZ0KSAmIChhbGlnbiAtIDEp
KSAhPSAwKSB7Ci0gICAgc2tpcCsrOwotICB9Ci0gIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKHNraXAgPCBhbGxvYyk7Ci0gIGlmIChza2lwID4gMCkgewotICAgIFNwYW4qIHJlc3Qg
PSBwYWdlaGVhcC0+U3BsaXQoc3Bhbiwgc2tpcCk7Ci0gICAgcGFnZWhlYXAtPkRlbGV0ZShzcGFu
KTsKLSAgICBzcGFuID0gcmVzdDsKLSAgfQotCi0gIC8vIFNraXAgdHJhaWxpbmcgcG9ydGlvbiB0
aGF0IHdlIGRvIG5vdCBuZWVkIHRvIHJldHVybgotICBjb25zdCBMZW5ndGggbmVlZGVkID0gcGFn
ZXMoc2l6ZSk7Ci0gIEFTU0VSVChzcGFuLT5sZW5ndGggPj0gbmVlZGVkKTsKLSAgaWYgKHNwYW4t
Pmxlbmd0aCA+IG5lZWRlZCkgewotICAgIFNwYW4qIHRyYWlsZXIgPSBwYWdlaGVhcC0+U3BsaXQo
c3BhbiwgbmVlZGVkKTsKLSAgICBwYWdlaGVhcC0+RGVsZXRlKHRyYWlsZXIpOwotICB9Ci0gIHJl
dHVybiBTcGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7Ci19Ci0jZW5kaWYKLQogLy8gSGVscGVycyBm
b3IgdXNlIGJ5IGV4cG9ydGVkIHJvdXRpbmVzIGJlbG93OgogCi0jaWZuZGVmIFdURl9DSEFOR0VT
Ci1zdGF0aWMgaW5saW5lIHZvaWQgZG9fbWFsbG9jX3N0YXRzKCkgewotICBQcmludFN0YXRzKDEp
OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkb19tYWxsb3B0KGludCwgaW50KSB7Ci0gIHJldHVy
biAxOyAgICAgLy8gSW5kaWNhdGVzIGVycm9yCi19Ci0jZW5kaWYKLQogI2lmZGVmIEhBVkVfU1RS
VUNUX01BTExJTkZPICAvLyBtYWxsaW5mbyBpc24ndCBkZWZpbmVkIG9uIGZyZWVic2QsIGZvciBp
bnN0YW5jZQogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFsbGluZm8gZG9fbWFsbGluZm8oKSB7CiAg
IFRDTWFsbG9jU3RhdHMgc3RhdHM7CkBAIC00MjI4LDkgKzM3MDksNiBAQCBzdGF0aWMgaW5saW5l
IHN0cnVjdCBtYWxsaW5mbyBkb19tYWxsaW5mbygpIHsKIC8vICAgICAgICAgaGVhcC1jaGVja2Vy
LmNjIGRlcGVuZHMgb24gdGhpcyB0byBzdGFydCBhIHN0YWNrIHRyYWNlIGZyb20KIC8vICAgICAg
ICAgdGhlIGNhbGwgdG8gdGhlIChkZSlhbGxvY2F0aW9uIGZ1bmN0aW9uLgogCi0jaWZuZGVmIFdU
Rl9DSEFOR0VTCi1leHRlcm4gIkMiIAotI2Vsc2UKICNkZWZpbmUgZG9fbWFsbG9jIGRvX21hbGxv
YzxjcmFzaE9uRmFpbHVyZT4KIAogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CkBAIC00
MjU3LDkgKzM3MzUsNyBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0TWFsbG9jKHNpemVf
dCBzaXplKQogfQogCiB0ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4KLUFMV0FZU19JTkxJ
TkUKLSNlbmRpZgotdm9pZCogbWFsbG9jKHNpemVfdCBzaXplKSB7CitBTFdBWVNfSU5MSU5FIHZv
aWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSkgewogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJ
T04pCiAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBJbnRlcm5h
bDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUgPD0gc2l6ZSkgIC8vIElmIG92ZXJmbG93IHdvdWxkIG9j
Y3VyLi4uCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDI4Miw5ICszNzU4LDYgQEAgdm9pZCogbWFs
bG9jKHNpemVfdCBzaXplKSB7CiAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNpZm5kZWYgV1RGX0NI
QU5HRVMKLWV4dGVybiAiQyIgCi0jZW5kaWYKIHZvaWQgZnJlZSh2b2lkKiBwdHIpIHsKICNpZiBF
TkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQogICAgIGRhdGFMb2dGKCJmYXN0RnJlZSBmcmVlaW5n
ICVwLlxuIiwgcHRyKTsKQEAgLTQzMDUsOSArMzc3OCw2IEBAIHZvaWQgZnJlZSh2b2lkKiBwdHIp
IHsKICNlbmRpZgogfQogCi0jaWZuZGVmIFdURl9DSEFOR0VTCi1leHRlcm4gIkMiIAotI2Vsc2UK
IHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgogQUxXQVlTX0lOTElORSB2b2lkKiBjYWxs
b2Moc2l6ZV90LCBzaXplX3QpOwogCkBAIC00MzM2LDkgKzM4MDYsNyBAQCBUcnlNYWxsb2NSZXR1
cm5WYWx1ZSB0cnlGYXN0Q2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxlbV9zaXplKQogfQogCiB0
ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4KLUFMV0FZU19JTkxJTkUKLSNlbmRpZgotdm9p
ZCogY2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxlbV9zaXplKSB7CitBTFdBWVNfSU5MSU5FIHZv
aWQqIGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1fc2l6ZSkgewogICBzaXplX3QgdG90YWxC
eXRlcyA9IG4gKiBlbGVtX3NpemU7CiAgICAgCiAgIC8vIFByb3RlY3QgYWdhaW5zdCBvdmVyZmxv
dwpAQCAtNDM2NCwyMSArMzgzMiwxMCBAQCB2b2lkKiBjYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBl
bGVtX3NpemUpIHsKIH0KIAogLy8gU2luY2UgY2ZyZWUgaXNuJ3QgdXNlZCBhbnl3aGVyZSwgd2Ug
ZG9uJ3QgY29tcGlsZSBpdCBpbi4KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSNpZm5kZWYgV1RGX0NI
QU5HRVMKLWV4dGVybiAiQyIgCi0jZW5kaWYKIHZvaWQgY2ZyZWUodm9pZCogcHRyKSB7Ci0jaWZu
ZGVmIFdURl9DSEFOR0VTCi0gICAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9vayhwdHIpOwot
I2VuZGlmCiAgIGRvX2ZyZWUocHRyKTsKIH0KLSNlbmRpZgogCi0jaWZuZGVmIFdURl9DSEFOR0VT
Ci1leHRlcm4gIkMiIAotI2Vsc2UKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgogQUxX
QVlTX0lOTElORSB2b2lkKiByZWFsbG9jKHZvaWQqLCBzaXplX3QpOwogCkBAIC00NDEzLDkgKzM4
NzAsNyBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0UmVhbGxvYyh2b2lkKiBvbGRfcHRy
LCBzaXplX3QgbmV3X3NpemUpCiB9CiAKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgot
QUxXQVlTX0lOTElORQotI2VuZGlmCi12b2lkKiByZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNpemVf
dCBuZXdfc2l6ZSkgeworQUxXQVlTX0lOTElORSB2b2lkKiByZWFsbG9jKHZvaWQqIG9sZF9wdHIs
IHNpemVfdCBuZXdfc2l6ZSkgewogICBpZiAob2xkX3B0ciA9PSBOVUxMKSB7CiAjaWYgRU5BQkxF
KFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICB2b2lkKiByZXN1bHQgPSBtYWxsb2M8Y3Jhc2hP
bkZhaWx1cmU+KG5ld19zaXplKTsKQEAgLTQ0ODcsMjI0ICszOTQyLDggQEAgdm9pZCogcmVhbGxv
Yyh2b2lkKiBvbGRfcHRyLCBzaXplX3QgbmV3X3NpemUpIHsKICAgfQogfQogCi0jaWZkZWYgV1RG
X0NIQU5HRVMKICN1bmRlZiBkb19tYWxsb2MKLSNlbHNlCi0KLXN0YXRpYyBTcGluTG9jayBzZXRf
bmV3X2hhbmRsZXJfbG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOwotCi1zdGF0aWMgaW5saW5l
IHZvaWQqIGNwcF9hbGxvYyhzaXplX3Qgc2l6ZSwgYm9vbCBub3Rocm93KSB7Ci0gIGZvciAoOzsp
IHsKLSAgICB2b2lkKiBwID0gZG9fbWFsbG9jKHNpemUpOwotI2lmZGVmIFBSRUFOU0lORVcKLSAg
ICByZXR1cm4gcDsKLSNlbHNlCi0gICAgaWYgKHAgPT0gTlVMTCkgeyAgLy8gYWxsb2NhdGlvbiBm
YWlsZWQKLSAgICAgIC8vIEdldCB0aGUgY3VycmVudCBuZXcgaGFuZGxlci4gIE5COiB0aGlzIGZ1
bmN0aW9uIGlzIG5vdAotICAgICAgLy8gdGhyZWFkLXNhZmUuICBXZSBtYWtlIGEgZmVlYmxlIHN0
YWIgYXQgbWFraW5nIGl0IHNvIGhlcmUsIGJ1dAotICAgICAgLy8gdGhpcyBsb2NrIG9ubHkgcHJv
dGVjdHMgYWdhaW5zdCB0Y21hbGxvYyBpbnRlcmZlcmluZyB3aXRoCi0gICAgICAvLyBpdHNlbGYs
IG5vdCB3aXRoIG90aGVyIGxpYnJhcmllcyBjYWxsaW5nIHNldF9uZXdfaGFuZGxlci4KLSAgICAg
IHN0ZDo6bmV3X2hhbmRsZXIgbmg7Ci0gICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgo
JnNldF9uZXdfaGFuZGxlcl9sb2NrKTsKLSAgICAgICAgbmggPSBzdGQ6OnNldF9uZXdfaGFuZGxl
cigwKTsKLSAgICAgICAgKHZvaWQpIHN0ZDo6c2V0X25ld19oYW5kbGVyKG5oKTsKLSAgICAgIH0K
LSAgICAgIC8vIElmIG5vIG5ld19oYW5kbGVyIGlzIGVzdGFibGlzaGVkLCB0aGUgYWxsb2NhdGlv
biBmYWlsZWQuCi0gICAgICBpZiAoIW5oKSB7Ci0gICAgICAgIGlmIChub3Rocm93KSByZXR1cm4g
MDsKLSAgICAgICAgdGhyb3cgc3RkOjpiYWRfYWxsb2MoKTsKLSAgICAgIH0KLSAgICAgIC8vIE90
aGVyd2lzZSwgdHJ5IHRoZSBuZXdfaGFuZGxlci4gIElmIGl0IHJldHVybnMsIHJldHJ5IHRoZQot
ICAgICAgLy8gYWxsb2NhdGlvbi4gIElmIGl0IHRocm93cyBzdGQ6OmJhZF9hbGxvYywgZmFpbCB0
aGUgYWxsb2NhdGlvbi4KLSAgICAgIC8vIGlmIGl0IHRocm93cyBzb21ldGhpbmcgZWxzZSwgZG9u
J3QgaW50ZXJmZXJlLgotICAgICAgdHJ5IHsKLSAgICAgICAgKCpuaCkoKTsKLSAgICAgIH0gY2F0
Y2ggKGNvbnN0IHN0ZDo6YmFkX2FsbG9jJikgewotICAgICAgICBpZiAoIW5vdGhyb3cpIHRocm93
OwotICAgICAgICByZXR1cm4gcDsKLSAgICAgIH0KLSAgICB9IGVsc2UgeyAgLy8gYWxsb2NhdGlv
biBzdWNjZXNzCi0gICAgICByZXR1cm4gcDsKLSAgICB9Ci0jZW5kaWYKLSAgfQotfQotCi0jaWYg
RU5BQkxFKEdMT0JBTF9GQVNUTUFMTE9DX05FVykKLQotdm9pZCogb3BlcmF0b3IgbmV3KHNpemVf
dCBzaXplKSB7Ci0gIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgZmFsc2UpOwotICAvLyBXZSBr
ZWVwIHRoaXMgbmV4dCBpbnN0cnVjdGlvbiBvdXQgb2YgY3BwX2FsbG9jIGZvciBhIHJlYXNvbjog
d2hlbgotICAvLyBpdCdzIGluLCBhbmQgbmV3IGp1c3QgY2FsbHMgY3BwX2FsbG9jLCB0aGUgb3B0
aW1pemVyIG1heSBmb2xkIHRoZQotICAvLyBuZXcgY2FsbCBpbnRvIGNwcF9hbGxvYywgd2hpY2gg
bWVzc2VzIHVwIG91ciB3aG9sZSBzZWN0aW9uLWJhc2VkCi0gIC8vIHN0YWNrdHJhY2luZyAoc2Vl
IEFUVFJJQlVURV9TRUNUSU9OLCBhYm92ZSkuICBUaGlzIGVuc3VyZXMgY3BwX2FsbG9jCi0gIC8v
IGlzbid0IHRoZSBsYXN0IHRoaW5nIHRoaXMgZm4gY2FsbHMsIGFuZCBwcmV2ZW50cyB0aGUgZm9s
ZGluZy4KLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXplKTsKLSAgcmV0dXJuIHA7
Ci19Ci0KLXZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgY29uc3Qgc3RkOjpub3Rocm93
X3QmKSBfX1RIUk9XIHsKLSAgdm9pZCogcCA9IGNwcF9hbGxvYyhzaXplLCB0cnVlKTsKLSAgTWFs
bG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXplKTsKLSAgcmV0dXJuIHA7Ci19Ci0KLXZvaWQg
b3BlcmF0b3IgZGVsZXRlKHZvaWQqIHApIF9fVEhST1cgewotICBNYWxsb2NIb29rOjpJbnZva2VE
ZWxldGVIb29rKHApOwotICBkb19mcmVlKHApOwotfQotCi12b2lkIG9wZXJhdG9yIGRlbGV0ZSh2
b2lkKiBwLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIF9fVEhST1cgewotICBNYWxsb2NIb29rOjpJ
bnZva2VEZWxldGVIb29rKHApOwotICBkb19mcmVlKHApOwotfQotCi12b2lkKiBvcGVyYXRvciBu
ZXdbXShzaXplX3Qgc2l6ZSkgewotICB2b2lkKiBwID0gY3BwX2FsbG9jKHNpemUsIGZhbHNlKTsK
LSAgLy8gV2Uga2VlcCB0aGlzIG5leHQgaW5zdHJ1Y3Rpb24gb3V0IG9mIGNwcF9hbGxvYyBmb3Ig
YSByZWFzb246IHdoZW4KLSAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNhbGxzIGNwcF9hbGxv
YywgdGhlIG9wdGltaXplciBtYXkgZm9sZCB0aGUKLSAgLy8gbmV3IGNhbGwgaW50byBjcHBfYWxs
b2MsIHdoaWNoIG1lc3NlcyB1cCBvdXIgd2hvbGUgc2VjdGlvbi1iYXNlZAotICAvLyBzdGFja3Ry
YWNpbmcgKHNlZSBBVFRSSUJVVEVfU0VDVElPTiwgYWJvdmUpLiAgVGhpcyBlbnN1cmVzIGNwcF9h
bGxvYwotICAvLyBpc24ndCB0aGUgbGFzdCB0aGluZyB0aGlzIGZuIGNhbGxzLCBhbmQgcHJldmVu
dHMgdGhlIGZvbGRpbmcuCi0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6ZSk7Ci0g
IHJldHVybiBwOwotfQotCi12b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSwgY29uc3Qg
c3RkOjpub3Rocm93X3QmKSBfX1RIUk9XIHsKLSAgdm9pZCogcCA9IGNwcF9hbGxvYyhzaXplLCB0
cnVlKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXplKTsKLSAgcmV0dXJuIHA7
Ci19Ci0KLXZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCkgX19USFJPVyB7Ci0gIE1hbGxv
Y0hvb2s6Okludm9rZURlbGV0ZUhvb2socCk7Ci0gIGRvX2ZyZWUocCk7Ci19Ci0KLXZvaWQgb3Bl
cmF0b3IgZGVsZXRlW10odm9pZCogcCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSBfX1RIUk9XIHsK
LSAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9vayhwKTsKLSAgZG9fZnJlZShwKTsKLX0KLQot
I2VuZGlmCi0KLWV4dGVybiAiQyIgdm9pZCogbWVtYWxpZ24oc2l6ZV90IGFsaWduLCBzaXplX3Qg
c2l6ZSkgX19USFJPVyB7Ci0gIHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKGFsaWduLCBzaXpl
KTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotICByZXR1cm4g
cmVzdWx0OwotfQotCi1leHRlcm4gIkMiIGludCBwb3NpeF9tZW1hbGlnbih2b2lkKiogcmVzdWx0
X3B0ciwgc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSkKLSAgICBfX1RIUk9XIHsKLSAgaWYgKCgo
YWxpZ24gJSBzaXplb2Yodm9pZCopKSAhPSAwKSB8fAotICAgICAgKChhbGlnbiAmIChhbGlnbiAt
IDEpKSAhPSAwKSB8fAotICAgICAgKGFsaWduID09IDApKSB7Ci0gICAgcmV0dXJuIEVJTlZBTDsK
LSAgfQotCi0gIHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFs
bG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotICBpZiAocmVzdWx0ID09IE5V
TEwpIHsKLSAgICByZXR1cm4gRU5PTUVNOwotICB9IGVsc2UgewotICAgICpyZXN1bHRfcHRyID0g
cmVzdWx0OwotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLXN0YXRpYyBzaXplX3QgcGFnZXNpemUg
PSAwOwotCi1leHRlcm4gIkMiIHZvaWQqIHZhbGxvYyhzaXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0g
IC8vIEFsbG9jYXRlIHBhZ2UtYWxpZ25lZCBvYmplY3Qgb2YgbGVuZ3RoID49IHNpemUgYnl0ZXMK
LSAgaWYgKHBhZ2VzaXplID09IDApIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKLSAgdm9pZCog
cmVzdWx0ID0gZG9fbWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOwotICBNYWxsb2NIb29rOjpJbnZv
a2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWV4dGVybiAi
QyIgdm9pZCogcHZhbGxvYyhzaXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0gIC8vIFJvdW5kIHVwIHNp
emUgdG8gYSBtdWx0aXBsZSBvZiBwYWdlc2l6ZQotICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNp
emUgPSBnZXRwYWdlc2l6ZSgpOwotICBzaXplID0gKHNpemUgKyBwYWdlc2l6ZSAtIDEpICYgfihw
YWdlc2l6ZSAtIDEpOwotICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihwYWdlc2l6ZSwgc2l6
ZSk7Ci0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKLSAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotZXh0ZXJuICJDIiB2b2lkIG1hbGxvY19zdGF0cyh2b2lkKSB7Ci0gIGRv
X21hbGxvY19zdGF0cygpOwotfQotCi1leHRlcm4gIkMiIGludCBtYWxsb3B0KGludCBjbWQsIGlu
dCB2YWx1ZSkgewotICByZXR1cm4gZG9fbWFsbG9wdChjbWQsIHZhbHVlKTsKLX0KLQotI2lmZGVm
IEhBVkVfU1RSVUNUX01BTExJTkZPCi1leHRlcm4gIkMiIHN0cnVjdCBtYWxsaW5mbyBtYWxsaW5m
byh2b2lkKSB7Ci0gIHJldHVybiBkb19tYWxsaW5mbygpOwotfQotI2VuZGlmCi0KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8gU29tZSBsaWJyYXJ5IHJvdXRpbmVzIG9uIFJlZEhhdCA5IGFsbG9jYXRlIG1lbW9y
eSB1c2luZyBtYWxsb2MoKQotLy8gYW5kIGZyZWUgaXQgdXNpbmcgX19saWJjX2ZyZWUoKSAob3Ig
dmljZS12ZXJzYSkuICBTaW5jZSB3ZSBwcm92aWRlCi0vLyBvdXIgb3duIGltcGxlbWVudGF0aW9u
cyBvZiBtYWxsb2MvZnJlZSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAotLy8gdGhlIF9fbGli
Y19YWFggdmFyaWFudHMgKGRlZmluZWQgYXMgcGFydCBvZiBnbGliYykgYWxzbyBwb2ludCB0bwot
Ly8gdGhlIHNhbWUgaW1wbGVtZW50YXRpb25zLgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiBkZWZpbmVk
KF9fR0xJQkNfXykKLWV4dGVybiAiQyIgewotI2lmIENPTVBJTEVSKEdDQykgJiYgIWRlZmluZWQo
X19NQUNIX18pICYmIGRlZmluZWQoSEFWRV9fX0FUVFJJQlVURV9fKQotICAvLyBQb3RlbnRpYWxs
eSBmYXN0ZXIgdmFyaWFudHMgdGhhdCB1c2UgdGhlIGdjYyBhbGlhcyBleHRlbnNpb24uCi0gIC8v
IE1hY2gtTyAoRGFyd2luKSBkb2VzIG5vdCBzdXBwb3J0IHdlYWsgYWxpYXNlcywgaGVuY2UgdGhl
IF9fTUFDSF9fIGNoZWNrLgotIyBkZWZpbmUgQUxJQVMoeCkgX19hdHRyaWJ1dGVfXyAoKHdlYWss
IGFsaWFzICh4KSkpCi0gIHZvaWQqIF9fbGliY19tYWxsb2Moc2l6ZV90IHNpemUpICAgICAgICAg
ICAgICBBTElBUygibWFsbG9jIik7Ci0gIHZvaWQgIF9fbGliY19mcmVlKHZvaWQqIHB0cikgICAg
ICAgICAgICAgICAgICBBTElBUygiZnJlZSIpOwotICB2b2lkKiBfX2xpYmNfcmVhbGxvYyh2b2lk
KiBwdHIsIHNpemVfdCBzaXplKSAgQUxJQVMoInJlYWxsb2MiKTsKLSAgdm9pZCogX19saWJjX2Nh
bGxvYyhzaXplX3Qgbiwgc2l6ZV90IHNpemUpICAgIEFMSUFTKCJjYWxsb2MiKTsKLSAgdm9pZCAg
X19saWJjX2NmcmVlKHZvaWQqIHB0cikgICAgICAgICAgICAgICAgIEFMSUFTKCJjZnJlZSIpOwot
ICB2b2lkKiBfX2xpYmNfbWVtYWxpZ24oc2l6ZV90IGFsaWduLCBzaXplX3QgcykgQUxJQVMoIm1l
bWFsaWduIik7Ci0gIHZvaWQqIF9fbGliY192YWxsb2Moc2l6ZV90IHNpemUpICAgICAgICAgICAg
ICBBTElBUygidmFsbG9jIik7Ci0gIHZvaWQqIF9fbGliY19wdmFsbG9jKHNpemVfdCBzaXplKSAg
ICAgICAgICAgICBBTElBUygicHZhbGxvYyIpOwotICBpbnQgX19wb3NpeF9tZW1hbGlnbih2b2lk
Kiogciwgc2l6ZV90IGEsIHNpemVfdCBzKSBBTElBUygicG9zaXhfbWVtYWxpZ24iKTsKLSMgdW5k
ZWYgQUxJQVMKLSMgZWxzZSAgIC8qIG5vdCBfX0dOVUNfXyAqLwotICAvLyBQb3J0YWJsZSB3cmFw
cGVycwotICB2b2lkKiBfX2xpYmNfbWFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAgICAgeyBy
ZXR1cm4gbWFsbG9jKHNpemUpOyAgICAgICB9Ci0gIHZvaWQgIF9fbGliY19mcmVlKHZvaWQqIHB0
cikgICAgICAgICAgICAgICAgICB7IGZyZWUocHRyKTsgICAgICAgICAgICAgICAgIH0KLSAgdm9p
ZCogX19saWJjX3JlYWxsb2Modm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgIHsgcmV0dXJuIHJlYWxs
b2MocHRyLCBzaXplKTsgfQotICB2b2lkKiBfX2xpYmNfY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qg
c2l6ZSkgICAgeyByZXR1cm4gY2FsbG9jKG4sIHNpemUpOyAgICB9Ci0gIHZvaWQgIF9fbGliY19j
ZnJlZSh2b2lkKiBwdHIpICAgICAgICAgICAgICAgICB7IGNmcmVlKHB0cik7ICAgICAgICAgICAg
ICAgIH0KLSAgdm9pZCogX19saWJjX21lbWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90IHMpIHsg
cmV0dXJuIG1lbWFsaWduKGFsaWduLCBzKTsgfQotICB2b2lkKiBfX2xpYmNfdmFsbG9jKHNpemVf
dCBzaXplKSAgICAgICAgICAgICAgeyByZXR1cm4gdmFsbG9jKHNpemUpOyAgICAgICB9Ci0gIHZv
aWQqIF9fbGliY19wdmFsbG9jKHNpemVfdCBzaXplKSAgICAgICAgICAgICB7IHJldHVybiBwdmFs
bG9jKHNpemUpOyAgICAgIH0KLSAgaW50IF9fcG9zaXhfbWVtYWxpZ24odm9pZCoqIHIsIHNpemVf
dCBhLCBzaXplX3QgcykgewotICAgIHJldHVybiBwb3NpeF9tZW1hbGlnbihyLCBhLCBzKTsKLSAg
fQotIyBlbmRpZiAgLyogX19HTlVDX18gKi8KLX0KLSNlbmRpZiAgIC8qIF9fR0xJQkNfXyAqLwot
Ci0vLyBPdmVycmlkZSBfX2xpYmNfbWVtYWxpZ24gaW4gbGliYyBvbiBsaW51eCBib3hlcyBzcGVj
aWFsbHkuCi0vLyBUaGV5IGhhdmUgYSBidWcgaW4gbGliYyB0aGF0IGNhdXNlcyB0aGVtIHRvICh2
ZXJ5IHJhcmVseSkgYWxsb2NhdGUKLS8vIHdpdGggX19saWJjX21lbWFsaWduKCkgeWV0IGRlYWxs
b2NhdGUgd2l0aCBmcmVlKCkgYW5kIHRoZQotLy8gZGVmaW5pdGlvbnMgYWJvdmUgZG9uJ3QgY2F0
Y2ggaXQuCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGUgcnVsZSBvZiBj
YWxsaW5nIE1hbGxvY0hvb2sgbWV0aG9kCi0vLyBmcm9tIHRoZSBzdGFjayBmcmFtZSBvZiB0aGUg
YWxsb2NhdGlvbiBmdW5jdGlvbjsKLS8vIGhlYXAtY2hlY2tlciBoYW5kbGVzIHRoaXMgc3BlY2lh
bCBjYXNlIGV4cGxpY2l0bHkuCi1zdGF0aWMgdm9pZCAqTWVtYWxpZ25PdmVycmlkZShzaXplX3Qg
YWxpZ24sIHNpemVfdCBzaXplLCBjb25zdCB2b2lkICpjYWxsZXIpCi0gICAgX19USFJPVyB7Ci0g
IHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6
SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0OwotfQotdm9pZCAq
KCpfX21lbWFsaWduX2hvb2spKHNpemVfdCwgc2l6ZV90LCBjb25zdCB2b2lkICopID0gTWVtYWxp
Z25PdmVycmlkZTsKLQotI2VuZGlmCiAKLSNpZmRlZiBXVEZfQ0hBTkdFUwogdm9pZCByZWxlYXNl
RmFzdE1hbGxvY0ZyZWVNZW1vcnkoKQogewogICAgIC8vIEZsdXNoIGZyZWUgcGFnZXMgaW4gdGhl
IGN1cnJlbnQgdGhyZWFkIGNhY2hlIGJhY2sgdG8gdGhlIHBhZ2UgaGVhcC4KQEAgLTUxMzEsNiAr
NDM3MCw1IEBAIHZvaWQgRmFzdE1hbGxvY1pvbmU6OmluaXQoKQogI2VuZGlmIC8vIE9TKERBUldJ
TikKIAogfSAvLyBuYW1lc3BhY2UgV1RGCi0jZW5kaWYgLy8gV1RGX0NIQU5HRVMKIAogI2VuZGlm
IC8vIEZPUkNFX1NZU1RFTV9NQUxMT0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RDUGFj
a2VkQ2FjaGUuaCBiL1NvdXJjZS9XVEYvd3RmL1RDUGFja2VkQ2FjaGUuaAppbmRleCAwNDY0Zjhm
ZGMyY2Y5MzdmOWM1OWNjZmM0ODliMzRiZDhkZGNjY2E1Li4yZWExMDgwYjM5MTljNTI5YzNiYzI5
OTM4MzFhYzcxYWMzYzI0M2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UQ1BhY2tlZENh
Y2hlLmgKKysrIGIvU291cmNlL1dURi93dGYvVENQYWNrZWRDYWNoZS5oCkBAIC0xMTEsMTEgKzEx
MSw2IEBACiAjaWZuZGVmIFRDTUFMTE9DX1BBQ0tFRF9DQUNIRV9JTkxfSF9fCiAjZGVmaW5lIFRD
TUFMTE9DX1BBQ0tFRF9DQUNIRV9JTkxfSF9fCiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSNpbmNs
dWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIgIC8vIGZvciBDT01QSUxFX0FTU0VSVAotI2luY2x1ZGUg
ImJhc2UvbG9nZ2luZy5oIiAgICAgLy8gZm9yIERDSEVDSwotI2VuZGlmCi0KICNpZm5kZWYgRENI
RUNLX0VRCiAjZGVmaW5lIERDSEVDS19FUSh2YWwxLCB2YWwyKSBBU1NFUlQoKHZhbDEpID09ICh2
YWwyKSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVENQYWdlTWFwLmggYi9T
b3VyY2UvV1RGL3d0Zi9UQ1BhZ2VNYXAuaAppbmRleCA5NDAxNmE2YzY2YmJhYTcxYzc0MDhiZTg3
Y2RiNWY0YTNlMGZjYTI2Li5jNjgxMzUxOGYxZDk5MzQ5MWJhYjYwMWU0YTM0MWZkNGI4MGZjMmUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UQ1BhZ2VNYXAuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9UQ1BhZ2VNYXAuaApAQCAtMTU0LDcgKzE1NCw2IEBAIGNsYXNzIFRDTWFsbG9jX1BhZ2VN
YXAyIHsKICAgICBFbnN1cmUoMCwgMSA8PCBCSVRTKTsKICAgfQogCi0jaWZkZWYgV1RGX0NIQU5H
RVMKICAgdGVtcGxhdGU8Y2xhc3MgVmlzaXRvciwgY2xhc3MgTWVtb3J5UmVhZGVyPgogICB2b2lk
IHZpc2l0VmFsdWVzKFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IE1lbW9yeVJlYWRlciYgcmVhZGVy
KQogICB7CkBAIC0xOTQsNyArMTkzLDYgQEAgY2xhc3MgVENNYWxsb2NfUGFnZU1hcDIgewogICAg
ICAgICB2aXNpdG9yLnZpc2l0KHJvb3RfW2ldLCBzaXplb2YoTGVhZikpOwogICAgIH0KICAgfQot
I2VuZGlmCiB9OwogCiAvLyBUaHJlZS1sZXZlbCByYWRpeCB0cmVlCkBAIC0yODMsNyArMjgxLDYg
QEAgY2xhc3MgVENNYWxsb2NfUGFnZU1hcDMgewogICB2b2lkIFByZWFsbG9jYXRlTW9yZU1lbW9y
eSgpIHsKICAgfQogCi0jaWZkZWYgV1RGX0NIQU5HRVMKICAgdGVtcGxhdGU8Y2xhc3MgVmlzaXRv
ciwgY2xhc3MgTWVtb3J5UmVhZGVyPgogICB2b2lkIHZpc2l0VmFsdWVzKFZpc2l0b3ImIHZpc2l0
b3IsIGNvbnN0IE1lbW9yeVJlYWRlciYgcmVhZGVyKSB7CiAgICAgY29uc3QgTnVtYmVyIGludGVy
bWVkaWF0ZUluZGV4TWFzayA9IChJTlRFUklPUl9MRU5HVEggLSAxKSA8PCBMRUFGX0JJVFM7CkBA
IC0zNTUsNyArMzUyLDYgQEAgY2xhc3MgVENNYWxsb2NfUGFnZU1hcDMgewogICAgICAgfQogICAg
IH0KICAgfQotI2VuZGlmCiB9OwogCiAjZW5kaWYgIC8vIFRDTUFMTE9DX1BBR0VNQVBfSF9fCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UQ1N5c3RlbUFsbG9jLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL1RDU3lzdGVtQWxsb2MuY3BwCmluZGV4IDhmNWMwNTI1ZTRmMjQ5MjAwZmFjNmExMzFiNjhl
OGMyMDgzMTI3MGQuLjVhZmE4Yjc0NzZlMWI5MWZjOTRmMWM2NDc0Y2Y2NmQyMzZmNmMwYTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RDU3lzdGVtQWxsb2MuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1RDU3lzdGVtQWxsb2MuY3BwCkBAIC03MywxMCArNzMsNiBAQCBzdGF0aWMgc2l6ZV90
IHBhZ2VzaXplID0gMDsKIC8vIEZvciAyLjIga2VybmVscywgaXQgbG9va3MgbGlrZSB0aGUgc2Jy
ayBhZGRyZXNzIHNwYWNlICg1MDBNQmlzaCkgYW5kCiAvLyB0aGUgbW1hcCBhZGRyZXNzIHNwYWNl
ICgxMzAwTUJpc2gpIGFyZSBkaXNqb2ludCwgc28gd2UgbmVlZCBib3RoIGFsbG9jYXRvcnMKIC8v
IHRvIGdldCBhcyBtdWNoIHZpcnR1YWwgbWVtb3J5IGFzIHBvc3NpYmxlLgotI2lmbmRlZiBXVEZf
Q0hBTkdFUwotc3RhdGljIGJvb2wgdXNlX2Rldm1lbSA9IGZhbHNlOwotc3RhdGljIGJvb2wgdXNl
X3NicmsgPSBmYWxzZTsKLSNlbmRpZgogCiAjaWYgSEFWRShNTUFQKQogc3RhdGljIGJvb2wgdXNl
X21tYXAgPSB0cnVlOwpAQCAtOTIsNTkgKzg4LDYgQEAgc3RhdGljIGJvb2wgc2Jya19mYWlsdXJl
ID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBtbWFwX2ZhaWx1cmUgPSBmYWxzZTsKIHN0YXRpYyBib29s
IFZpcnR1YWxBbGxvY19mYWlsdXJlID0gZmFsc2U7CiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLURF
RklORV9pbnQzMihtYWxsb2NfZGV2bWVtX3N0YXJ0LCAwLAotICAgICAgICAgICAgICJQaHlzaWNh
bCBtZW1vcnkgc3RhcnRpbmcgbG9jYXRpb24gaW4gTUIgZm9yIC9kZXYvbWVtIGFsbG9jYXRpb24u
IgotICAgICAgICAgICAgICIgIFNldHRpbmcgdGhpcyB0byAwIGRpc2FibGVzIC9kZXYvbWVtIGFs
bG9jYXRpb24iKTsKLURFRklORV9pbnQzMihtYWxsb2NfZGV2bWVtX2xpbWl0LCAwLAotICAgICAg
ICAgICAgICJQaHlzaWNhbCBtZW1vcnkgbGltaXQgbG9jYXRpb24gaW4gTUIgZm9yIC9kZXYvbWVt
IGFsbG9jYXRpb24uIgotICAgICAgICAgICAgICIgIFNldHRpbmcgdGhpcyB0byAwIG1lYW5zIG5v
IGxpbWl0LiIpOwotI2VuZGlmCi0KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLQotc3RhdGljIHZvaWQq
IFRyeVNicmsoc2l6ZV90IHNpemUsIHNpemVfdCAqYWN0dWFsX3NpemUsIHNpemVfdCBhbGlnbm1l
bnQpIHsKLSAgc2l6ZSA9ICgoc2l6ZSArIGFsaWdubWVudCAtIDEpIC8gYWxpZ25tZW50KSAqIGFs
aWdubWVudDsKLSAgCi0gIC8vIGNvdWxkIHRoZW9yZXRpY2FsbHkgcmV0dXJuIHRoZSAiZXh0cmEi
IGJ5dGVzIGhlcmUsIGJ1dCB0aGlzCi0gIC8vIGlzIHNpbXBsZSBhbmQgY29ycmVjdC4KLSAgaWYg
KGFjdHVhbF9zaXplKSAKLSAgICAqYWN0dWFsX3NpemUgPSBzaXplOwotICAgIAotICB2b2lkKiBy
ZXN1bHQgPSBzYnJrKHNpemUpOwotICBpZiAocmVzdWx0ID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KC0xKSkgewotICAgIHNicmtfZmFpbHVyZSA9IHRydWU7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLQotICAvLyBJcyBpdCBhbGlnbmVkPwotICB1aW50cHRyX3QgcHRyID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHJlc3VsdCk7Ci0gIGlmICgocHRyICYgKGFsaWdubWVudC0xKSkgPT0g
MCkgIHJldHVybiByZXN1bHQ7Ci0KLSAgLy8gVHJ5IHRvIGdldCBtb3JlIG1lbW9yeSBmb3IgYWxp
Z25tZW50Ci0gIHNpemVfdCBleHRyYSA9IGFsaWdubWVudCAtIChwdHIgJiAoYWxpZ25tZW50LTEp
KTsKLSAgdm9pZCogcjIgPSBzYnJrKGV4dHJhKTsKLSAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihyMikgPT0gKHB0ciArIHNpemUpKSB7Ci0gICAgLy8gQ29udGlndW91cyB3aXRoIHBy
ZXZpb3VzIHJlc3VsdAotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihwdHIgKyBl
eHRyYSk7Ci0gIH0KLQotICAvLyBHaXZlIHVwIGFuZCBhc2sgZm9yICJzaXplICsgYWxpZ25tZW50
IC0gMSIgYnl0ZXMgc28KLSAgLy8gdGhhdCB3ZSBjYW4gZmluZCBhbiBhbGlnbmVkIHJlZ2lvbiB3
aXRoaW4gaXQuCi0gIHJlc3VsdCA9IHNicmsoc2l6ZSArIGFsaWdubWVudCAtIDEpOwotICBpZiAo
cmVzdWx0ID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkgewotICAgIHNicmtfZmFpbHVy
ZSA9IHRydWU7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgcHRyID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KHJlc3VsdCk7Ci0gIGlmICgocHRyICYgKGFsaWdubWVudC0xKSkgIT0gMCkg
ewotICAgIHB0ciArPSBhbGlnbm1lbnQgLSAocHRyICYgKGFsaWdubWVudC0xKSk7Ci0gIH0KLSAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0cik7Ci19Ci0KLSNlbmRpZiAvKiBpZm5k
ZWYoV1RGX0NIQU5HRVMpICovCi0KICNpZiBIQVZFKE1NQVApCiAKIHN0YXRpYyB2b2lkKiBUcnlN
bWFwKHNpemVfdCBzaXplLCBzaXplX3QgKmFjdHVhbF9zaXplLCBzaXplX3QgYWxpZ25tZW50KSB7
CkBAIC0yNTAsODQgKzE5Myw2IEBAIHN0YXRpYyB2b2lkKiBUcnlWaXJ0dWFsQWxsb2Moc2l6ZV90
IHNpemUsIHNpemVfdCAqYWN0dWFsX3NpemUsIHNpemVfdCBhbGlnbm1lbnQpCiAKICNlbmRpZiAv
KiBIQVZFKE1NQVApICovCiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0YXRpYyB2b2lkKiBUcnlE
ZXZNZW0oc2l6ZV90IHNpemUsIHNpemVfdCAqYWN0dWFsX3NpemUsIHNpemVfdCBhbGlnbm1lbnQp
IHsKLSAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgc3RhdGljIG9mZl90IHBo
eXNtZW1fYmFzZTsgIC8vIG5leHQgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgdG8gYWxsb2NhdGUK
LSAgc3RhdGljIG9mZl90IHBoeXNtZW1fbGltaXQ7IC8vIG1heGltdW0gcGh5c2ljYWwgYWRkcmVz
cyBhbGxvd2VkCi0gIHN0YXRpYyBpbnQgcGh5c21lbV9mZDsgICAgICAvLyBmaWxlIGRlc2NyaXB0
b3IgZm9yIC9kZXYvbWVtCi0gIAotICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgdXNlIC9kZXYvbWVt
IGFsbG9jYXRpb24uICBOb3RlIHRoYXQgaXQgbWF5IHRha2UKLSAgLy8gYSB3aGlsZSB0byBnZXQg
dGhpcyBmbGFnIGluaXRpYWxpemVkLCBzbyBtZWFud2hpbGUgd2UgZmFsbCBiYWNrIHRvCi0gIC8v
IHRoZSBuZXh0IGFsbG9jYXRvci4gIChJdCBsb29rcyBsaWtlIDdNQiBnZXRzIGFsbG9jYXRlZCBi
ZWZvcmUKLSAgLy8gdGhpcyBmbGFnIGdldHMgaW5pdGlhbGl6ZWQgLWtoci4pCi0gIGlmIChGTEFH
U19tYWxsb2NfZGV2bWVtX3N0YXJ0ID09IDApIHsKLSAgICAvLyBOT1RFOiBub3QgYSBkZXZtZW1f
ZmFpbHVyZSAtIHdlJ2QgbGlrZSBUQ01hbGxvY19TeXN0ZW1BbGxvYyB0bwotICAgIC8vIHRyeSB1
cyBhZ2FpbiBuZXh0IHRpbWUuCi0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgCi0gIGlmICghaW5p
dGlhbGl6ZWQpIHsKLSAgICBwaHlzbWVtX2ZkID0gb3BlbigiL2Rldi9tZW0iLCBPX1JEV1IpOwot
ICAgIGlmIChwaHlzbWVtX2ZkIDwgMCkgewotICAgICAgZGV2bWVtX2ZhaWx1cmUgPSB0cnVlOwot
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHBoeXNtZW1fYmFzZSA9IEZMQUdTX21hbGxv
Y19kZXZtZW1fc3RhcnQqMTAyNExMKjEwMjRMTDsKLSAgICBwaHlzbWVtX2xpbWl0ID0gRkxBR1Nf
bWFsbG9jX2Rldm1lbV9saW1pdCoxMDI0TEwqMTAyNExMOwotICAgIGluaXRpYWxpemVkID0gdHJ1
ZTsKLSAgfQotICAKLSAgLy8gRW5mb3JjZSBwYWdlIGFsaWdubWVudAotICBpZiAocGFnZXNpemUg
PT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwotICBpZiAoYWxpZ25tZW50IDwgcGFnZXNp
emUpIGFsaWdubWVudCA9IHBhZ2VzaXplOwotICBzaXplID0gKChzaXplICsgYWxpZ25tZW50IC0g
MSkgLyBhbGlnbm1lbnQpICogYWxpZ25tZW50OwotICAgIAotICAvLyBjb3VsZCB0aGVvcmV0aWNh
bGx5IHJldHVybiB0aGUgImV4dHJhIiBieXRlcyBoZXJlLCBidXQgdGhpcwotICAvLyBpcyBzaW1w
bGUgYW5kIGNvcnJlY3QuCi0gIGlmIChhY3R1YWxfc2l6ZSkKLSAgICAqYWN0dWFsX3NpemUgPSBz
aXplOwotICAgIAotICAvLyBBc2sgZm9yIGV4dHJhIG1lbW9yeSBpZiBhbGlnbm1lbnQgPiBwYWdl
c2l6ZQotICBzaXplX3QgZXh0cmEgPSAwOwotICBpZiAoYWxpZ25tZW50ID4gcGFnZXNpemUpIHsK
LSAgICBleHRyYSA9IGFsaWdubWVudCAtIHBhZ2VzaXplOwotICB9Ci0gIAotICAvLyBjaGVjayB0
byBzZWUgaWYgd2UgaGF2ZSBhbnkgbWVtb3J5IGxlZnQKLSAgaWYgKHBoeXNtZW1fbGltaXQgIT0g
MCAmJiBwaHlzbWVtX2Jhc2UgKyBzaXplICsgZXh0cmEgPiBwaHlzbWVtX2xpbWl0KSB7Ci0gICAg
ZGV2bWVtX2ZhaWx1cmUgPSB0cnVlOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHZvaWQgKnJl
c3VsdCA9IG1tYXAoMCwgc2l6ZSArIGV4dHJhLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAotICAg
ICAgICAgICAgICAgICAgICAgIE1BUF9TSEFSRUQsIHBoeXNtZW1fZmQsIHBoeXNtZW1fYmFzZSk7
Ci0gIGlmIChyZXN1bHQgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oTUFQX0ZBSUxFRCkpIHsK
LSAgICBkZXZtZW1fZmFpbHVyZSA9IHRydWU7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgdWlu
dHB0cl90IHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyZXN1bHQpOwotICAKLSAg
Ly8gQWRqdXN0IHRoZSByZXR1cm4gbWVtb3J5IHNvIGl0IGlzIGFsaWduZWQKLSAgc2l6ZV90IGFk
anVzdCA9IDA7Ci0gIGlmICgocHRyICYgKGFsaWdubWVudCAtIDEpKSAhPSAwKSB7Ci0gICAgYWRq
dXN0ID0gYWxpZ25tZW50IC0gKHB0ciAmIChhbGlnbm1lbnQgLSAxKSk7Ci0gIH0KLSAgCi0gIC8v
IFJldHVybiB0aGUgdW51c2VkIHZpcnR1YWwgbWVtb3J5IHRvIHRoZSBzeXN0ZW0KLSAgaWYgKGFk
anVzdCA+IDApIHsKLSAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKSwgYWRq
dXN0KTsKLSAgfQotICBpZiAoYWRqdXN0IDwgZXh0cmEpIHsKLSAgICBtdW5tYXAocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocHRyICsgYWRqdXN0ICsgc2l6ZSksIGV4dHJhIC0gYWRqdXN0KTsKLSAg
fQotICAKLSAgcHRyICs9IGFkanVzdDsKLSAgcGh5c21lbV9iYXNlICs9IGFkanVzdCArIHNpemU7
Ci0gIAotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKTsKLX0KLSNlbmRpZgot
CiB2b2lkKiBUQ01hbGxvY19TeXN0ZW1BbGxvYyhzaXplX3Qgc2l6ZSwgc2l6ZV90ICphY3R1YWxf
c2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgewogICAvLyBEaXNjYXJkIHJlcXVlc3RzIHRoYXQgb3Zl
cmZsb3cKICAgaWYgKHNpemUgKyBhbGlnbm1lbnQgPCBzaXplKSByZXR1cm4gTlVMTDsKQEAgLTM0
MSwxOCArMjA2LDYgQEAgdm9pZCogVENNYWxsb2NfU3lzdGVtQWxsb2Moc2l6ZV90IHNpemUsIHNp
emVfdCAqYWN0dWFsX3NpemUsIHNpemVfdCBhbGlnbm1lbnQpIHsKICAgLy8gbW9yZSB0cnlpbmcg
YWxsIGFsbG9jYXRvcnMgZXZlbiBpZiB0aGV5IGZhaWxlZCBiZWZvcmUuCiAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMjsgaSsrKSB7CiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgICBpZiAodXNlX2Rl
dm1lbSAmJiAhZGV2bWVtX2ZhaWx1cmUpIHsKLSAgICAgIHZvaWQqIHJlc3VsdCA9IFRyeURldk1l
bShzaXplLCBhY3R1YWxfc2l6ZSwgYWxpZ25tZW50KTsKLSAgICAgIGlmIChyZXN1bHQgIT0gTlVM
TCkgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHVzZV9zYnJrICYmICFzYnJr
X2ZhaWx1cmUpIHsKLSAgICAgIHZvaWQqIHJlc3VsdCA9IFRyeVNicmsoc2l6ZSwgYWN0dWFsX3Np
emUsIGFsaWdubWVudCk7Ci0gICAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotI2VuZGlmCi0KICNpZiBIQVZFKE1NQVApICAgIAogICAgIGlmICh1c2VfbW1hcCAm
JiAhbW1hcF9mYWlsdXJlKSB7CiAgICAgICB2b2lkKiByZXN1bHQgPSBUcnlNbWFwKHNpemUsIGFj
dHVhbF9zaXplLCBhbGlnbm1lbnQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224492</attachid>
            <date>2014-02-18 04:09:59 -0800</date>
            <delta_ts>2014-02-18 04:09:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69435-20140218130957.patch</filename>
            <type>text/plain</type>
            <size>42673</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0Mjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
YTE0NzFhNjlmYmU4ZTdjY2FmOWUzODM3NWU5Y2NjODVjMTIxYzk0Li5iZjFmYzRlNTUwN2U3M2Ey
YjQzMzU5ZGM3YTM5ZDNlMjVjZjlhYTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxNC0wMi0xOCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQu
b3JnPgorCisgICAgICAgIHJlbW92ZSBXVEZfQ0hBTkdFUyBkZWZpbmUsIGFzIGl0IGlzIGFsd2F5
cyAxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJhc2Vk
IG9uIHRoZSBwYXRjaCBieSBBbmR5IFdpbmdvIDx3aW5nb0BpZ2FsaWEuY29tPgorCisgICAgICAg
ICogY29uZmlnLmg6CisKIDIwMTQtMDItMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBNb3JlIEFSTSBGVEwgZ2x1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAzZTRhMmExMmM5YjUzNDFiOGZm
ZDJlYmE1MGQ0MmNiYmY3MTgzNDAzLi5jNDFlNzY0N2RjYmY3ZjQ2YjkzMDE2YjBlOTExYTYyMGZk
YTFhZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE0LTAyLTE4ICBDc2FiYSBPc3p0cm9nb27D
oWMgIDxvc3N5QHdlYmtpdC5vcmc+CisKKyAgICAgICAgcmVtb3ZlIFdURl9DSEFOR0VTIGRlZmlu
ZSwgYXMgaXQgaXMgYWx3YXlzIDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY5NDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQmFzZWQgb24gdGhlIHBhdGNoIGJ5IEFuZHkgV2luZ28gPHdpbmdvQGlnYWxp
YS5jb20+CisKKyAgICAgICAgKiBjb25maWcuaDoKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5j
cHA6CisgICAgICAgIChXVEY6OkluaXRTaXplQ2xhc3Nlcyk6CisgICAgICAgIChXVEY6OlRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3Q6OmVudW1lcmF0ZUZyZWVPYmplY3RzKToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NfUGFnZUhlYXA6OlJldHVybmVkQnl0ZXMpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6ZW51bWVyYXRlRnJlZU9iamVjdHMpOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6ZW51bWVyYXRlRnJlZU9iamVjdHMpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSk6CisgICAgICAgIChX
VEY6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0VFNEKToKKyAgICAgICAgKFdURjo6VENNYWxs
b2NfVGhyZWFkQ2FjaGU6OkNyZWF0ZUNhY2hlSWZOZWNlc3NhcnkpOgorICAgICAgICAqIHd0Zi9U
Q1BhY2tlZENhY2hlLmg6CisgICAgICAgICogd3RmL1RDUGFnZU1hcC5oOgorICAgICAgICAoVENN
YWxsb2NfUGFnZU1hcDI6OnZpc2l0QWxsb2NhdGlvbnMpOgorICAgICAgICAoVENNYWxsb2NfUGFn
ZU1hcDM6OnZpc2l0QWxsb2NhdGlvbnMpOgorICAgICAgICAqIHd0Zi9UQ1N5c3RlbUFsbG9jLmNw
cDoKKyAgICAgICAgKFRDTWFsbG9jX1N5c3RlbUFsbG9jKToKKwogMjAxNC0wMi0xNyAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE1vcmUgQVJNIEZUTCBnbHVlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvY29uZmlnLmgKaW5kZXggYmVlYmVjNjU3YjVjMThlOTQ5NDM4MTlmN2YwYjcyODJl
YWIwN2NjMi4uYmJjMmZlNmVjMmQ0NTlmMjRhN2UyN2EzMTcwNzc3MDliMDE2ZmUwYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9jb25maWcuaApAQCAtNTIsOCArNTIsNiBAQAogCiAjZW5kaWYgLy8gT1MoV0lORE9X
UykKIAotI2RlZmluZSBXVEZfQ0hBTkdFUyAxCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogI3VuZGVm
IG5ldwogI3VuZGVmIGRlbGV0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9jb25maWcuaCBiL1Nv
dXJjZS9XVEYvY29uZmlnLmgKaW5kZXggODQ3NjMyODc3NjAzNmI1MWU5OTVhYTEzZWRjOWU5Njg0
ZGE1MzlhNS4uNTAwYTlhNmJjODQ3YWI5MjBkYTNiYjFkN2MyMjM2YTU2MTM3ZDIyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9jb25maWcuaAorKysgYi9Tb3VyY2UvV1RGL2NvbmZpZy5oCkBAIC00
OSw4ICs0OSw2IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIFdURl9DSEFOR0VTIDEKLQogI2lmZGVm
IF9fY3BsdXNwbHVzCiAjdW5kZWYgbmV3CiAjdW5kZWYgZGVsZXRlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3Bw
CmluZGV4IGVjNzFiODE0M2IxZGJjMDMzMWVlMzg0NjE3M2IyZDlmNTQ2MGE1NTAuLmEzMmVjZTFi
NzUyYmQ4MDVhY2EyOTQ4ZGRkYzNiZGY2OGE4YzM1MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0Zhc3RNYWxsb2MuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCkBA
IC05NSwxMCArOTUsOCBAQAogI2VuZGlmCiAKICNpZm5kZWYgTk9fVENNQUxMT0NfU0FNUExFUwot
I2lmZGVmIFdURl9DSEFOR0VTCiAjZGVmaW5lIE5PX1RDTUFMTE9DX1NBTVBMRVMKICNlbmRpZgot
I2VuZGlmCiAKICNpZiAhKGRlZmluZWQoVVNFX1NZU1RFTV9NQUxMT0MpICYmIFVTRV9TWVNURU1f
TUFMTE9DKSAmJiBkZWZpbmVkKE5ERUJVRykKICNkZWZpbmUgRk9SQ0VfU1lTVEVNX01BTExPQyAw
CkBAIC00NDksOCArNDQ3LDYgQEAgZXh0ZXJuICJDIiBXVEZfRVhQT1JUX1BSSVZBVEUgY29uc3Qg
aW50IGpzY29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rpb24gPSAwOwogI2luY2x1ZGUgPHdpbmRv
d3MuaD4KICNlbmRpZgogCi0jaWZkZWYgV1RGX0NIQU5HRVMKLQogI2lmIE9TKERBUldJTikKICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ3NCw3
ICs0NzAsNiBAQCBleHRlcm4gIkMiIFdURl9FWFBPUlRfUFJJVkFURSBjb25zdCBpbnQganNjb3Jl
X2Zhc3RtYWxsb2NfaW50cm9zcGVjdGlvbiA9IDA7CiAKICNpZm5kZWYgUFJJdVMKICNkZWZpbmUg
UFJJdVMgInp1IgotI2VuZGlmCiAKIC8vIENhbGxpbmcgcHRocmVhZF9nZXRzcGVjaWZpYyB0aHJv
dWdoIGEgZ2xvYmFsIGZ1bmN0aW9uIHBvaW50ZXIgaXMgZmFzdGVyIHRoYW4gYSBub3JtYWwKIC8v
IGNhbGwgdG8gdGhlIGZ1bmN0aW9uIG9uIE1hYyBPUyBYLCBhbmQgaXQncyB1c2VkIGluIHBlcmZv
cm1hbmNlLWNyaXRpY2FsIGNvZGUuIFNvIHdlCkBAIC0xMDIwLDI1ICsxMDE1LDYgQEAgc3RhdGlj
IHZvaWQgSW5pdFNpemVDbGFzc2VzKCkgewogICBmb3IgKHNpemVfdCBjbCA9IDE7IGNsICA8IGtO
dW1DbGFzc2VzOyArK2NsKSB7CiAgICAgbnVtX29iamVjdHNfdG9fbW92ZVtjbF0gPSBOdW1Nb3Zl
U2l6ZShCeXRlU2l6ZUZvckNsYXNzKGNsKSk7CiAgIH0KLQotI2lmbmRlZiBXVEZfQ0hBTkdFUwot
ICBpZiAoZmFsc2UpIHsKLSAgICAvLyBEdW1wIGNsYXNzIHNpemVzIGFuZCBtYXhpbXVtIGV4dGVy
bmFsIHdhc3RhZ2UgcGVyIHNpemUgY2xhc3MKLSAgICBmb3IgKHNpemVfdCBjbCA9IDE7IGNsICA8
IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgICBjb25zdCBpbnQgYWxsb2Nfc2l6ZSA9IGNsYXNz
X3RvX3BhZ2VzW2NsXSA8PCBrUGFnZVNoaWZ0OwotICAgICAgY29uc3QgaW50IGFsbG9jX29ianMg
PSBhbGxvY19zaXplIC8gY2xhc3NfdG9fc2l6ZVtjbF07Ci0gICAgICBjb25zdCBpbnQgbWluX3Vz
ZWQgPSAoY2xhc3NfdG9fc2l6ZVtjbC0xXSArIDEpICogYWxsb2Nfb2JqczsKLSAgICAgIGNvbnN0
IGludCBtYXhfd2FzdGUgPSBhbGxvY19zaXplIC0gbWluX3VzZWQ7Ci0gICAgICBNRVNTQUdFKCJT
QyAlM2QgWyAlOGQgLi4gJThkIF0gZnJvbSAlOGQgOyAlMi4wZiUlIG1heHdhc3RlXG4iLAotICAg
ICAgICAgICAgICBpbnQoY2wpLAotICAgICAgICAgICAgICBpbnQoY2xhc3NfdG9fc2l6ZVtjbC0x
XSArIDEpLAotICAgICAgICAgICAgICBpbnQoY2xhc3NfdG9fc2l6ZVtjbF0pLAotICAgICAgICAg
ICAgICBpbnQoY2xhc3NfdG9fcGFnZXNbY2xdIDw8IGtQYWdlU2hpZnQpLAotICAgICAgICAgICAg
ICBtYXhfd2FzdGUgKiAxMDAuMCAvIGFsbG9jX3NpemUKLSAgICAgICAgICAgICAgKTsKLSAgICB9
Ci0gIH0KLSNlbmRpZgogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDU2LDcgKzEwMzIs
NyBAQCBzdGF0aWMgdm9pZCogTWV0YURhdGFBbGxvYyhzaXplX3QgYnl0ZXMpIHsKICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotI2lmIGRlZmluZWQoV1RGX0NIQU5HRVMpICYmIE9TKERBUldJTikKKyNp
ZiBPUyhEQVJXSU4pCiBjbGFzcyBSZW1vdGVNZW1vcnlSZWFkZXI7CiAjZW5kaWYKIApAQCAtMTEz
MSw3ICsxMTA3LDcgQEAgY2xhc3MgUGFnZUhlYXBBbGxvY2F0b3IgewogCiAgIGludCBpbnVzZSgp
IGNvbnN0IHsgcmV0dXJuIGludXNlXzsgfQogCi0jaWYgZGVmaW5lZChXVEZfQ0hBTkdFUykgJiYg
T1MoREFSV0lOKQorI2lmIE9TKERBUldJTikKICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlY29yZGVy
PgogICB2b2lkIHJlY29yZEFkbWluaXN0cmF0aXZlUmVnaW9ucyhSZWNvcmRlciYsIGNvbnN0IFJl
bW90ZU1lbW9yeVJlYWRlciYpOwogI2VuZGlmCkBAIC0xMzM3LDcgKzEzMTMsNiBAQCBjbGFzcyBU
Q01hbGxvY19DZW50cmFsX0ZyZWVMaXN0IHsKICAgICByZXR1cm4gdXNlZF9zbG90c18gKiBudW1f
b2JqZWN0c190b19tb3ZlW3NpemVfY2xhc3NfXTsKICAgfQogCi0jaWZkZWYgV1RGX0NIQU5HRVMK
ICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgogICB2b2lkIGVudW1lcmF0
ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJlYWRlciwgVENNYWxs
b2NfQ2VudHJhbF9GcmVlTGlzdCogcmVtb3RlQ2VudHJhbEZyZWVMaXN0KQogICB7CkBAIC0xMzY2
LDcgKzEzNDEsNiBAQCBjbGFzcyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0IHsKICAgICAgICAg
ZmluZGVyLnZpc2l0KGVudHJ5LnZhbHVlKCkpOwogICAgIH0KICAgfQotI2VuZGlmCiAKICAgdWlu
dHB0cl90IGVudHJvcHkoKSBjb25zdCB7IHJldHVybiBlbnRyb3B5XzsgfQogIHByaXZhdGU6CkBA
IC0xNTcxLDE3ICsxNTQ1LDYgQEAgYm9vbCBNYWxsb2NIb29rOjpzdGFja0xvZ2dpbmdFbmFibGVk
ID0gZmFsc2U7CiAKICNlbmRpZgogCi0jaWZuZGVmIFdURl9DSEFOR0VTCi0vLyBUaGlzICNpZmRl
ZiBzaG91bGQgYWxtb3N0IG5ldmVyIGJlIHNldC4gIFNldCBOT19UQ01BTExPQ19TQU1QTEVTIGlm
Ci0vLyB5b3UncmUgcG9ydGluZyB0byBhIHN5c3RlbSB3aGVyZSB5b3UgcmVhbGx5IGNhbid0IGdl
dCBhIHN0YWNrdHJhY2UuCi0jaWZkZWYgTk9fVENNQUxMT0NfU0FNUExFUwotLy8gV2UgdXNlICNk
ZWZpbmUgc28gY29kZSBjb21waWxlcyBldmVuIGlmIHlvdSAjaW5jbHVkZSBzdGFja3RyYWNlLmgg
c29tZWhvdy4KLSMgZGVmaW5lIEdldFN0YWNrVHJhY2Uoc3RhY2ssIGRlcHRoLCBza2lwKSAgKDAp
Ci0jZWxzZQotIyBpbmNsdWRlIDxnb29nbGUvc3RhY2t0cmFjZS5oPgotI2VuZGlmCi0jZW5kaWYK
LQogLy8gRXZlbiBpZiB3ZSBoYXZlIHN1cHBvcnQgZm9yIHRocmVhZC1sb2NhbCBzdG9yYWdlIGlu
IHRoZSBjb21waWxlcgogLy8gYW5kIGxpbmtlciwgdGhlIE9TIG1heSBub3Qgc3VwcG9ydCBpdC4g
IFdlIG5lZWQgdG8gY2hlY2sgdGhhdCBhdAogLy8gcnVudGltZS4gIFJpZ2h0IG5vdywgd2UgaGF2
ZSB0byBrZWVwIGEgbWFudWFsIHNldCBvZiAiYmFkIiBPU2VzLgpAQCAtMTY1Nyw3ICsxNjIwLDYg
QEAgdGVtcGxhdGUgPGludCBCSVRTPiBjbGFzcyBNYXBTZWxlY3RvciB7CiAgIHR5cGVkZWYgUGFj
a2VkQ2FjaGU8QklUUywgdWludDY0X3Q+IENhY2hlVHlwZTsKIH07CiAKLSNpZiBkZWZpbmVkKFdU
Rl9DSEFOR0VTKQogI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKIC8vIE9uIGFsbCBrbm93
biBYODYtNjQgcGxhdGZvcm1zLCB0aGUgdXBwZXIgMTYgYml0cyBhcmUgYWx3YXlzIHVudXNlZCBh
bmQgdGhlcmVmb3JlIAogLy8gY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIFBhZ2VNYXAga2V5LgpA
QCAtMTY3NCw3ICsxNjM2LDYgQEAgdGVtcGxhdGUgPD4gY2xhc3MgTWFwU2VsZWN0b3I8NjQ+IHsK
ICAgdHlwZWRlZiBUQ01hbGxvY19QYWdlTWFwMzw2NCAtIGtQYWdlU2hpZnQgLSBrQml0c1VudXNl
ZE9uNjRCaXQ+IFR5cGU7CiAgIHR5cGVkZWYgUGFja2VkQ2FjaGU8NjQsIHVpbnQ2NF90PiBDYWNo
ZVR5cGU7CiB9OwotI2VuZGlmCiAKIC8vIEEgdHdvLWxldmVsIG1hcCBmb3IgMzItYml0IG1hY2hp
bmVzCiB0ZW1wbGF0ZSA8PiBjbGFzcyBNYXBTZWxlY3RvcjwzMj4gewpAQCAtMTc1Nyw3ICsxNzE4
LDYgQEAgY2xhc3MgVENNYWxsb2NfUGFnZUhlYXAgewogICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PFNwYW4qPihwYWdlbWFwXy5nZXQocCkpOwogICB9CiAKLSNpZmRlZiBXVEZfQ0hBTkdFUwog
ICBpbmxpbmUgU3BhbiogR2V0RGVzY3JpcHRvckVuc3VyZVNhZmUoUGFnZUlEIHApCiAgIHsKICAg
ICAgIHBhZ2VtYXBfLkVuc3VyZShwLCAxKTsKQEAgLTE3NjUsMTIgKzE3MjUsNiBAQCBjbGFzcyBU
Q01hbGxvY19QYWdlSGVhcCB7CiAgIH0KICAgICAKICAgc2l6ZV90IFJldHVybmVkQnl0ZXMoKSBj
b25zdDsKLSNlbmRpZgotCi0gIC8vIER1bXAgc3RhdGUgdG8gc3RkZXJyCi0jaWZuZGVmIFdURl9D
SEFOR0VTCi0gIHZvaWQgRHVtcChUQ01hbGxvY19QcmludGVyKiBvdXQpOwotI2VuZGlmCiAKICAg
Ly8gUmV0dXJuIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KICAgaW5saW5l
IHVpbnQ2NF90IFN5c3RlbUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gc3lzdGVtX2J5dGVzXzsgfQpA
QCAtMTg3MCw3ICsxODI0LDcgQEAgY2xhc3MgVENNYWxsb2NfUGFnZUhlYXAgewogICAvLyBJbmRl
eCBvZiBsYXN0IGZyZWUgbGlzdCB3ZSBzY2F2ZW5nZWQKICAgc2l6ZV90IHNjYXZlbmdlX2luZGV4
XzsKICAgCi0jaWYgZGVmaW5lZChXVEZfQ0hBTkdFUykgJiYgT1MoREFSV0lOKQorI2lmIE9TKERB
UldJTikKICAgZnJpZW5kIGNsYXNzIEZhc3RNYWxsb2Nab25lOwogI2VuZGlmCiAKQEAgLTI0MjYs
NyArMjM4MCw2IEBAIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OlJlZ2lzdGVyU2l6ZUNsYXNzKFNw
YW4qIHNwYW4sIHNpemVfdCBzYykgewogICB9CiB9CiAgICAgCi0jaWZkZWYgV1RGX0NIQU5HRVMK
IHNpemVfdCBUQ01hbGxvY19QYWdlSGVhcDo6UmV0dXJuZWRCeXRlcygpIGNvbnN0IHsKICAgICBz
aXplX3QgcmVzdWx0ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIHMgPSAwOyBzIDwga01heFBhZ2Vz
OyBzKyspIHsKQEAgLTI0MzksNzQgKzIzOTIsNiBAQCBzaXplX3QgVENNYWxsb2NfUGFnZUhlYXA6
OlJldHVybmVkQnl0ZXMoKSBjb25zdCB7CiAgICAgICAgIHJlc3VsdCArPSBzLT5sZW5ndGggPDwg
a1BhZ2VTaGlmdDsKICAgICByZXR1cm4gcmVzdWx0OwogfQotI2VuZGlmCi0KLSNpZm5kZWYgV1RG
X0NIQU5HRVMKLXN0YXRpYyBkb3VibGUgUGFnZXNUb01CKHVpbnQ2NF90IHBhZ2VzKSB7Ci0gIHJl
dHVybiAocGFnZXMgPDwga1BhZ2VTaGlmdCkgLyAxMDQ4NTc2LjA7Ci19Ci0KLXZvaWQgVENNYWxs
b2NfUGFnZUhlYXA6OkR1bXAoVENNYWxsb2NfUHJpbnRlciogb3V0KSB7Ci0gIGludCBub25lbXB0
eV9zaXplcyA9IDA7Ci0gIGZvciAoaW50IHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspIHsKLSAg
ICBpZiAoIURMTF9Jc0VtcHR5KCZmcmVlX1tzXS5ub3JtYWwpIHx8ICFETExfSXNFbXB0eSgmZnJl
ZV9bc10ucmV0dXJuZWQpKSB7Ci0gICAgICBub25lbXB0eV9zaXplcysrOwotICAgIH0KLSAgfQot
ICBvdXQtPnByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tXG4iKTsKLSAgb3V0LT5wcmludGYoIlBhZ2VIZWFwOiAlZCBzaXplczsgJTYuMWYgTUIg
ZnJlZVxuIiwKLSAgICAgICAgICAgICAgbm9uZW1wdHlfc2l6ZXMsIFBhZ2VzVG9NQihmcmVlX3Bh
Z2VzXykpOwotICBvdXQtPnByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgdWludDY0X3QgdG90YWxfbm9ybWFsID0gMDsKLSAgdWlu
dDY0X3QgdG90YWxfcmV0dXJuZWQgPSAwOwotICBmb3IgKGludCBzID0gMDsgcyA8IGtNYXhQYWdl
czsgcysrKSB7Ci0gICAgY29uc3QgaW50IG5fbGVuZ3RoID0gRExMX0xlbmd0aCgmZnJlZV9bc10u
bm9ybWFsKTsKLSAgICBjb25zdCBpbnQgcl9sZW5ndGggPSBETExfTGVuZ3RoKCZmcmVlX1tzXS5y
ZXR1cm5lZCk7Ci0gICAgaWYgKG5fbGVuZ3RoICsgcl9sZW5ndGggPiAwKSB7Ci0gICAgICB1aW50
NjRfdCBuX3BhZ2VzID0gcyAqIG5fbGVuZ3RoOwotICAgICAgdWludDY0X3Qgcl9wYWdlcyA9IHMg
KiByX2xlbmd0aDsKLSAgICAgIHRvdGFsX25vcm1hbCArPSBuX3BhZ2VzOwotICAgICAgdG90YWxf
cmV0dXJuZWQgKz0gcl9wYWdlczsKLSAgICAgIG91dC0+cHJpbnRmKCIlNnUgcGFnZXMgKiAlNnUg
c3BhbnMgfiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtIgotICAgICAgICAgICAgICAgICAgIjsgdW5t
YXBwZWQ6ICU2LjFmIE1COyAlNi4xZiBNQiBjdW1cbiIsCi0gICAgICAgICAgICAgICAgICBzLAot
ICAgICAgICAgICAgICAgICAgKG5fbGVuZ3RoICsgcl9sZW5ndGgpLAotICAgICAgICAgICAgICAg
ICAgUGFnZXNUb01CKG5fcGFnZXMgKyByX3BhZ2VzKSwKLSAgICAgICAgICAgICAgICAgIFBhZ2Vz
VG9NQih0b3RhbF9ub3JtYWwgKyB0b3RhbF9yZXR1cm5lZCksCi0gICAgICAgICAgICAgICAgICBQ
YWdlc1RvTUIocl9wYWdlcyksCi0gICAgICAgICAgICAgICAgICBQYWdlc1RvTUIodG90YWxfcmV0
dXJuZWQpKTsKLSAgICB9Ci0gIH0KLQotICB1aW50NjRfdCBuX3BhZ2VzID0gMDsKLSAgdWludDY0
X3Qgcl9wYWdlcyA9IDA7Ci0gIGludCBuX3NwYW5zID0gMDsKLSAgaW50IHJfc3BhbnMgPSAwOwot
ICBvdXQtPnByaW50ZigiTm9ybWFsIGxhcmdlIHNwYW5zOlxuIik7Ci0gIGZvciAoU3BhbiogcyA9
IGxhcmdlXy5ub3JtYWwubmV4dDsgcyAhPSAmbGFyZ2VfLm5vcm1hbDsgcyA9IHMtPm5leHQpIHsK
LSAgICBvdXQtPnByaW50ZigiICAgWyAlNiIgUFJJdVMgIiBwYWdlcyBdICU2LjFmIE1CXG4iLAot
ICAgICAgICAgICAgICAgIHMtPmxlbmd0aCwgUGFnZXNUb01CKHMtPmxlbmd0aCkpOwotICAgIG5f
cGFnZXMgKz0gcy0+bGVuZ3RoOwotICAgIG5fc3BhbnMrKzsKLSAgfQotICBvdXQtPnByaW50Zigi
VW5tYXBwZWQgbGFyZ2Ugc3BhbnM6XG4iKTsKLSAgZm9yIChTcGFuKiBzID0gbGFyZ2VfLnJldHVy
bmVkLm5leHQ7IHMgIT0gJmxhcmdlXy5yZXR1cm5lZDsgcyA9IHMtPm5leHQpIHsKLSAgICBvdXQt
PnByaW50ZigiICAgWyAlNiIgUFJJdVMgIiBwYWdlcyBdICU2LjFmIE1CXG4iLAotICAgICAgICAg
ICAgICAgIHMtPmxlbmd0aCwgUGFnZXNUb01CKHMtPmxlbmd0aCkpOwotICAgIHJfcGFnZXMgKz0g
cy0+bGVuZ3RoOwotICAgIHJfc3BhbnMrKzsKLSAgfQotICB0b3RhbF9ub3JtYWwgKz0gbl9wYWdl
czsKLSAgdG90YWxfcmV0dXJuZWQgKz0gcl9wYWdlczsKLSAgb3V0LT5wcmludGYoIj4yNTUgICBs
YXJnZSAqICU2dSBzcGFucyB+ICU2LjFmIE1COyAlNi4xZiBNQiBjdW0iCi0gICAgICAgICAgICAg
ICI7IHVubWFwcGVkOiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtXG4iLAotICAgICAgICAgICAgICAo
bl9zcGFucyArIHJfc3BhbnMpLAotICAgICAgICAgICAgICBQYWdlc1RvTUIobl9wYWdlcyArIHJf
cGFnZXMpLAotICAgICAgICAgICAgICBQYWdlc1RvTUIodG90YWxfbm9ybWFsICsgdG90YWxfcmV0
dXJuZWQpLAotICAgICAgICAgICAgICBQYWdlc1RvTUIocl9wYWdlcyksCi0gICAgICAgICAgICAg
IFBhZ2VzVG9NQih0b3RhbF9yZXR1cm5lZCkpOwotfQotI2VuZGlmCiAKIGJvb2wgVENNYWxsb2Nf
UGFnZUhlYXA6Okdyb3dIZWFwKExlbmd0aCBuKSB7CiAgIEFTU0VSVChrTWF4UGFnZXMgPj0ga01p
blN5c3RlbUFsbG9jKTsKQEAgLTI3MTIsMTQgKzI1OTcsMTIgQEAgY2xhc3MgVENNYWxsb2NfVGhy
ZWFkQ2FjaGVfRnJlZUxpc3QgewogICAgICAgICB9CiAgICAgfQogCi0jaWZkZWYgV1RGX0NIQU5H
RVMKICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgogICB2b2lkIGVudW1l
cmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJlYWRlcikKICAg
ewogICAgICAgZm9yIChIYXJkZW5lZFNMTCBuZXh0T2JqZWN0ID0gbGlzdF87IG5leHRPYmplY3Q7
IG5leHRPYmplY3Quc2V0VmFsdWUocmVhZGVyLm5leHRFbnRyeUluSGFyZGVuZWRMaW5rZWRMaXN0
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0LnZhbHVlKCkpLCBlbnRyb3B5Xykp
KQogICAgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0LnZhbHVlKCkpOwogICB9Ci0jZW5k
aWYKIH07CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjc5MCwxNCArMjY3MywxMiBAQCBjbGFzcyBUQ01h
bGxvY19UaHJlYWRDYWNoZSB7CiAgIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgQmVjb21l
SWRsZSgpOwogICBzdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgIFJlY29tcHV0ZVRocmVhZENh
Y2hlU2l6ZSgpOwogCi0jaWZkZWYgV1RGX0NIQU5HRVMKICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRl
ciwgY2xhc3MgUmVhZGVyPgogICB2b2lkIGVudW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmlu
ZGVyLCBjb25zdCBSZWFkZXImIHJlYWRlcikKICAgewogICAgICAgZm9yICh1bnNpZ25lZCBzaXpl
Q2xhc3MgPSAwOyBzaXplQ2xhc3MgPCBrTnVtQ2xhc3Nlczsgc2l6ZUNsYXNzKyspCiAgICAgICAg
ICAgbGlzdF9bc2l6ZUNsYXNzXS5lbnVtZXJhdGVGcmVlT2JqZWN0cyhmaW5kZXIsIHJlYWRlcik7
CiAgIH0KLSNlbmRpZgogfTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNDQ0LDkgKzMzMjUsNyBAQCB2
b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0TW9kdWxlKCkgewogICBTcGluTG9ja0hvbGRl
ciBoKCZwYWdlaGVhcF9sb2NrKTsKICAgaWYgKCFwaGluaXRlZCkgewogICAgIHVpbnRwdHJfdCBl
bnRyb3B5ID0gSEFSREVOSU5HX0VOVFJPUFk7Ci0jaWZkZWYgV1RGX0NIQU5HRVMKICAgICBJbml0
VFNEKCk7Ci0jZW5kaWYKICAgICBJbml0U2l6ZUNsYXNzZXMoKTsKICAgICB0aHJlYWRoZWFwX2Fs
bG9jYXRvci5Jbml0KGVudHJvcHkpOwogICAgIHNwYW5fYWxsb2NhdG9yLkluaXQoZW50cm9weSk7
CkBAIC0zNDU5LDcgKzMzMzgsNyBAQCB2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0TW9k
dWxlKCkgewogICAgIH0KICAgICBwYWdlaGVhcC0+aW5pdCgpOwogICAgIHBoaW5pdGVkID0gMTsK
LSNpZiBkZWZpbmVkKFdURl9DSEFOR0VTKSAmJiBPUyhEQVJXSU4pCisjaWYgT1MoREFSV0lOKQog
ICAgIE1hbGxvY0hvb2s6OmluaXQoKTsKICAgICBGYXN0TWFsbG9jWm9uZTo6aW5pdCgpOwogI2Vu
ZGlmCkBAIC0zNTI1LDExICszNDA0LDcgQEAgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5p
dFRTRCgpIHsKICAgcHRocmVhZF90IHplcm87CiAgIG1lbXNldCgmemVybywgMCwgc2l6ZW9mKHpl
cm8pKTsKICNlbmRpZgotI2lmbmRlZiBXVEZfQ0hBTkdFUwotICBTcGluTG9ja0hvbGRlciBoKCZw
YWdlaGVhcF9sb2NrKTsKLSNlbHNlCiAgIEFTU0VSVChwYWdlaGVhcF9sb2NrLklzSGVsZCgpKTsK
LSNlbmRpZgogICBmb3IgKFRDTWFsbG9jX1RocmVhZENhY2hlKiBoID0gdGhyZWFkX2hlYXBzOyBo
ICE9IE5VTEw7IGggPSBoLT5uZXh0XykgewogI2lmIE9TKFdJTkRPV1MpCiAgICAgaWYgKGgtPnRp
ZF8gPT0gMCkgewpAQCAtMzY3NSwyNDMgKzM1NTAsNiBAQCBzdHJ1Y3QgVENNYWxsb2NTdGF0cyB7
CiAgIHVpbnQ2NF90IG1ldGFkYXRhX2J5dGVzOyAgICAgIC8vIEJ5dGVzIGFsbG9jZWQgZm9yIG1l
dGFkYXRhCiB9OwogCi0jaWZuZGVmIFdURl9DSEFOR0VTCi0vLyBHZXQgc3RhdHMgaW50byAiciIu
ICBBbHNvIGdldCBwZXItc2l6ZS1jbGFzcyBjb3VudHMgaWYgY2xhc3NfY291bnQgIT0gTlVMTAot
c3RhdGljIHZvaWQgRXh0cmFjdFN0YXRzKFRDTWFsbG9jU3RhdHMqIHIsIHVpbnQ2NF90KiBjbGFz
c19jb3VudCkgewotICByLT5jZW50cmFsX2J5dGVzID0gMDsKLSAgci0+dHJhbnNmZXJfYnl0ZXMg
PSAwOwotICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICBj
b25zdCBpbnQgbGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0ubGVuZ3RoKCk7Ci0gICAgY29uc3Qg
aW50IHRjX2xlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLnRjX2xlbmd0aCgpOwotICAgIHItPmNl
bnRyYWxfYnl0ZXMgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wp
KSAqIGxlbmd0aDsKLSAgICByLT50cmFuc2Zlcl9ieXRlcyArPQotICAgICAgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKSAqIHRjX2xlbmd0aDsKLSAgICBpZiAoY2xh
c3NfY291bnQpIGNsYXNzX2NvdW50W2NsXSA9IGxlbmd0aCArIHRjX2xlbmd0aDsKLSAgfQotCi0g
IC8vIEFkZCBzdGF0cyBmcm9tIHBlci10aHJlYWQgaGVhcHMKLSAgci0+dGhyZWFkX2J5dGVzID0g
MDsKLSAgeyAvLyBzY29wZQotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwot
ICAgIGZvciAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGggPSB0aHJlYWRfaGVhcHM7IGggIT0gTlVM
TDsgaCA9IGgtPm5leHRfKSB7Ci0gICAgICByLT50aHJlYWRfYnl0ZXMgKz0gaC0+U2l6ZSgpOwot
ICAgICAgaWYgKGNsYXNzX2NvdW50KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNsID0gMDsgY2wg
PCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgICAgIGNsYXNzX2NvdW50W2NsXSArPSBoLT5m
cmVlbGlzdF9sZW5ndGgoY2wpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
eyAvL3Njb3BlCi0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgci0+
c3lzdGVtX2J5dGVzID0gcGFnZWhlYXAtPlN5c3RlbUJ5dGVzKCk7Ci0gICAgci0+bWV0YWRhdGFf
Ynl0ZXMgPSBtZXRhZGF0YV9zeXN0ZW1fYnl0ZXM7Ci0gICAgci0+cGFnZWhlYXBfYnl0ZXMgPSBw
YWdlaGVhcC0+RnJlZUJ5dGVzKCk7Ci0gIH0KLX0KLSNlbmRpZgotCi0jaWZuZGVmIFdURl9DSEFO
R0VTCi0vLyBXUklURSBzdGF0cyB0byAib3V0Igotc3RhdGljIHZvaWQgRHVtcFN0YXRzKFRDTWFs
bG9jX1ByaW50ZXIqIG91dCwgaW50IGxldmVsKSB7Ci0gIFRDTWFsbG9jU3RhdHMgc3RhdHM7Ci0g
IHVpbnQ2NF90IGNsYXNzX2NvdW50W2tOdW1DbGFzc2VzXTsKLSAgRXh0cmFjdFN0YXRzKCZzdGF0
cywgKGxldmVsID49IDIgPyBjbGFzc19jb3VudCA6IE5VTEwpKTsKLQotICBpZiAobGV2ZWwgPj0g
MikgewotICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS1cbiIpOwotICAgIHVpbnQ2NF90IGN1bXVsYXRpdmUgPSAwOwotICAgIGZv
ciAoaW50IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgaWYgKGNsYXNz
X2NvdW50W2NsXSA+IDApIHsKLSAgICAgICAgdWludDY0X3QgY2xhc3NfYnl0ZXMgPSBjbGFzc19j
b3VudFtjbF0gKiBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKLSAgICAgICAgY3VtdWxhdGl2ZSArPSBj
bGFzc19ieXRlczsKLSAgICAgICAgb3V0LT5wcmludGYoImNsYXNzICUzZCBbICU4IiBQUkl1UyAi
IGJ5dGVzIF0gOiAiCi0gICAgICAgICAgICAgICAgIiU4IiBQUkl1NjQgIiBvYmpzOyAlNS4xZiBN
QjsgJTUuMWYgY3VtIE1CXG4iLAotICAgICAgICAgICAgICAgIGNsLCBCeXRlU2l6ZUZvckNsYXNz
KGNsKSwKLSAgICAgICAgICAgICAgICBjbGFzc19jb3VudFtjbF0sCi0gICAgICAgICAgICAgICAg
Y2xhc3NfYnl0ZXMgLyAxMDQ4NTc2LjAsCi0gICAgICAgICAgICAgICAgY3VtdWxhdGl2ZSAvIDEw
NDg1NzYuMCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhl
YXBfbG9jayk7Ci0gICAgcGFnZWhlYXAtPkR1bXAob3V0KTsKLSAgfQotCi0gIGNvbnN0IHVpbnQ2
NF90IGJ5dGVzX2luX3VzZSA9IHN0YXRzLnN5c3RlbV9ieXRlcwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtIHN0YXRzLnBhZ2VoZWFwX2J5dGVzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtIHN0YXRzLnRyYW5zZmVyX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0gc3RhdHMudGhyZWFkX2J5dGVzOwotCi0gIG91dC0+cHJpbnRmKCItLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKLSAgICAgICAgICAg
ICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBIZWFwIHNpemVcbiIKLSAgICAgICAgICAgICAgIk1B
TExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBpbiB1c2UgYnkgYXBwbGljYXRpb25cbiIKLSAgICAg
ICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVlIGluIHBhZ2UgaGVhcFxu
IgotICAgICAgICAgICAgICAiTUFMTE9DOiAlMTIiIFBSSXU2NCAiIEJ5dGVzIGZyZWUgaW4gY2Vu
dHJhbCBjYWNoZVxuIgotICAgICAgICAgICAgICAiTUFMTE9DOiAlMTIiIFBSSXU2NCAiIEJ5dGVz
IGZyZWUgaW4gdHJhbnNmZXIgY2FjaGVcbiIKLSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQ
Ukl1NjQgIiBCeXRlcyBmcmVlIGluIHRocmVhZCBjYWNoZXNcbiIKLSAgICAgICAgICAgICAgIk1B
TExPQzogJTEyIiBQUkl1NjQgIiBTcGFucyBpbiB1c2VcbiIKLSAgICAgICAgICAgICAgIk1BTExP
QzogJTEyIiBQUkl1NjQgIiBUaHJlYWQgaGVhcHMgaW4gdXNlXG4iCi0gICAgICAgICAgICAgICJN
QUxMT0M6ICUxMiIgUFJJdTY0ICIgTWV0YWRhdGEgYWxsb2NhdGVkXG4iCi0gICAgICAgICAgICAg
ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCi0g
ICAgICAgICAgICAgIHN0YXRzLnN5c3RlbV9ieXRlcywKLSAgICAgICAgICAgICAgYnl0ZXNfaW5f
dXNlLAotICAgICAgICAgICAgICBzdGF0cy5wYWdlaGVhcF9ieXRlcywKLSAgICAgICAgICAgICAg
c3RhdHMuY2VudHJhbF9ieXRlcywKLSAgICAgICAgICAgICAgc3RhdHMudHJhbnNmZXJfYnl0ZXMs
Ci0gICAgICAgICAgICAgIHN0YXRzLnRocmVhZF9ieXRlcywKLSAgICAgICAgICAgICAgdWludDY0
X3Qoc3Bhbl9hbGxvY2F0b3IuaW51c2UoKSksCi0gICAgICAgICAgICAgIHVpbnQ2NF90KHRocmVh
ZGhlYXBfYWxsb2NhdG9yLmludXNlKCkpLAotICAgICAgICAgICAgICBzdGF0cy5tZXRhZGF0YV9i
eXRlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIFByaW50U3RhdHMoaW50IGxldmVsKSB7Ci0gIGNvbnN0
IGludCBrQnVmZmVyU2l6ZSA9IDE2IDw8IDEwOwotICBjaGFyKiBidWZmZXIgPSBuZXcgY2hhcltr
QnVmZmVyU2l6ZV07Ci0gIFRDTWFsbG9jX1ByaW50ZXIgcHJpbnRlcihidWZmZXIsIGtCdWZmZXJT
aXplKTsKLSAgRHVtcFN0YXRzKCZwcmludGVyLCBsZXZlbCk7Ci0gIHdyaXRlKFNUREVSUl9GSUxF
Tk8sIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOwotICBkZWxldGVbXSBidWZmZXI7Ci19Ci0KLXN0
YXRpYyB2b2lkKiogRHVtcFN0YWNrVHJhY2VzKCkgewotICAvLyBDb3VudCBob3cgbXVjaCBzcGFj
ZSB3ZSBuZWVkCi0gIGludCBuZWVkZWRfc2xvdHMgPSAwOwotICB7Ci0gICAgU3BpbkxvY2tIb2xk
ZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgZm9yIChTcGFuKiBzID0gc2FtcGxlZF9vYmplY3Rz
Lm5leHQ7IHMgIT0gJnNhbXBsZWRfb2JqZWN0czsgcyA9IHMtPm5leHQpIHsKLSAgICAgIFN0YWNr
VHJhY2UqIHN0YWNrID0gcmVpbnRlcnByZXRfY2FzdDxTdGFja1RyYWNlKj4ocy0+b2JqZWN0cyk7
Ci0gICAgICBuZWVkZWRfc2xvdHMgKz0gMyArIHN0YWNrLT5kZXB0aDsKLSAgICB9Ci0gICAgbmVl
ZGVkX3Nsb3RzICs9IDEwMDsgICAgICAgICAgICAvLyBTbG9wIGluIGNhc2Ugc2FtcGxlIGdyb3dz
Ci0gICAgbmVlZGVkX3Nsb3RzICs9IG5lZWRlZF9zbG90cy84OyAvLyBBbiBleHRyYSAxMi41JSBz
bG9wCi0gIH0KLQotICB2b2lkKiogcmVzdWx0ID0gbmV3IHZvaWQqW25lZWRlZF9zbG90c107Ci0g
IGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgIE1FU1NBR0UoInRjbWFsbG9jOiBjb3VsZCBub3Qg
YWxsb2NhdGUgJWQgc2xvdHMgZm9yIHN0YWNrIHRyYWNlc1xuIiwKLSAgICAgICAgICAgIG5lZWRl
ZF9zbG90cyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBTcGluTG9ja0hvbGRlciBoKCZw
YWdlaGVhcF9sb2NrKTsKLSAgaW50IHVzZWRfc2xvdHMgPSAwOwotICBmb3IgKFNwYW4qIHMgPSBz
YW1wbGVkX29iamVjdHMubmV4dDsgcyAhPSAmc2FtcGxlZF9vYmplY3RzOyBzID0gcy0+bmV4dCkg
ewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHVzZWRfc2xvdHMgPCBuZWVk
ZWRfc2xvdHMpOyAvLyBOZWVkIHRvIGxlYXZlIHJvb20gZm9yIHRlcm1pbmF0b3IKLSAgICBTdGFj
a1RyYWNlKiBzdGFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHMtPm9iamVjdHMp
OwotICAgIGlmICh1c2VkX3Nsb3RzICsgMyArIHN0YWNrLT5kZXB0aCA+PSBuZWVkZWRfc2xvdHMp
IHsKLSAgICAgIC8vIE5vIG1vcmUgcm9vbQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmVz
dWx0W3VzZWRfc2xvdHMrMF0gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KDEpKTsKLSAgICByZXN1bHRbdXNlZF9zbG90cysxXSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHN0YWNrLT5zaXplKTsKLSAgICByZXN1bHRbdXNlZF9zbG90cysyXSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNrLT5kZXB0aCk7Ci0gICAgZm9yIChpbnQgZCA9IDA7IGQg
PCBzdGFjay0+ZGVwdGg7IGQrKykgewotICAgICAgcmVzdWx0W3VzZWRfc2xvdHMrMytkXSA9IHN0
YWNrLT5zdGFja1tkXTsKLSAgICB9Ci0gICAgdXNlZF9zbG90cyArPSAzICsgc3RhY2stPmRlcHRo
OwotICB9Ci0gIHJlc3VsdFt1c2VkX3Nsb3RzXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4oMCkpOwotICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0K
LSNpZm5kZWYgV1RGX0NIQU5HRVMKLQotLy8gVENNYWxsb2MncyBzdXBwb3J0IGZvciBleHRyYSBt
YWxsb2MgaW50ZXJmYWNlcwotY2xhc3MgVENNYWxsb2NJbXBsZW1lbnRhdGlvbiA6IHB1YmxpYyBN
YWxsb2NFeHRlbnNpb24gewotIHB1YmxpYzoKLSAgdmlydHVhbCB2b2lkIEdldFN0YXRzKGNoYXIq
IGJ1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgpIHsKLSAgICBBU1NFUlQoYnVmZmVyX2xlbmd0aCA+
IDApOwotICAgIFRDTWFsbG9jX1ByaW50ZXIgcHJpbnRlcihidWZmZXIsIGJ1ZmZlcl9sZW5ndGgp
OwotCi0gICAgLy8gUHJpbnQgbGV2ZWwgb25lIHN0YXRzIHVubGVzcyBsb3RzIG9mIHNwYWNlIGlz
IGF2YWlsYWJsZQotICAgIGlmIChidWZmZXJfbGVuZ3RoIDwgMTAwMDApIHsKLSAgICAgIER1bXBT
dGF0cygmcHJpbnRlciwgMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIER1bXBTdGF0cygmcHJpbnRl
ciwgMik7Ci0gICAgfQotICB9Ci0KLSAgdmlydHVhbCB2b2lkKiogUmVhZFN0YWNrVHJhY2VzKCkg
ewotICAgIHJldHVybiBEdW1wU3RhY2tUcmFjZXMoKTsKLSAgfQotCi0gIHZpcnR1YWwgYm9vbCBH
ZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90KiB2YWx1ZSkgewotICAg
IEFTU0VSVChuYW1lICE9IE5VTEwpOwotCi0gICAgaWYgKHN0cmNtcChuYW1lLCAiZ2VuZXJpYy5j
dXJyZW50X2FsbG9jYXRlZF9ieXRlcyIpID09IDApIHsKLSAgICAgIFRDTWFsbG9jU3RhdHMgc3Rh
dHM7Ci0gICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsKLSAgICAgICp2YWx1ZSA9IHN0
YXRzLnN5c3RlbV9ieXRlcwotICAgICAgICAgICAgICAgLSBzdGF0cy50aHJlYWRfYnl0ZXMKLSAg
ICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcwotICAgICAgICAgICAgICAgLSBzdGF0
cy5wYWdlaGVhcF9ieXRlczsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChz
dHJjbXAobmFtZSwgImdlbmVyaWMuaGVhcF9zaXplIikgPT0gMCkgewotICAgICAgVENNYWxsb2NT
dGF0cyBzdGF0czsKLSAgICAgIEV4dHJhY3RTdGF0cygmc3RhdHMsIE5VTEwpOwotICAgICAgKnZh
bHVlID0gc3RhdHMuc3lzdGVtX2J5dGVzOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2Muc2xhY2tfYnl0ZXMiKSA9PSAwKSB7Ci0gICAg
ICAvLyBXZSBhc3N1bWUgdGhhdCBieXRlcyBpbiB0aGUgcGFnZSBoZWFwIGFyZSBub3QgZnJhZ21l
bnRlZCB0b28KLSAgICAgIC8vIGJhZGx5LCBhbmQgYXJlIHRoZXJlZm9yZSBhdmFpbGFibGUgZm9y
IGFsbG9jYXRpb24uCi0gICAgICBTcGluTG9ja0hvbGRlciBsKCZwYWdlaGVhcF9sb2NrKTsKLSAg
ICAgICp2YWx1ZSA9IHBhZ2VoZWFwLT5GcmVlQnl0ZXMoKTsKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChzdHJjbXAobmFtZSwgInRjbWFsbG9jLm1heF90b3RhbF90aHJlYWRf
Y2FjaGVfYnl0ZXMiKSA9PSAwKSB7Ci0gICAgICBTcGluTG9ja0hvbGRlciBsKCZwYWdlaGVhcF9s
b2NrKTsKLSAgICAgICp2YWx1ZSA9IG92ZXJhbGxfdGhyZWFkX2NhY2hlX3NpemU7Ci0gICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5jdXJy
ZW50X3RvdGFsX3RocmVhZF9jYWNoZV9ieXRlcyIpID09IDApIHsKLSAgICAgIFRDTWFsbG9jU3Rh
dHMgc3RhdHM7Ci0gICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsKLSAgICAgICp2YWx1
ZSA9IHN0YXRzLnRocmVhZF9ieXRlczsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHZpcnR1YWwgYm9vbCBTZXROdW1lcmljUHJvcGVydHko
Y29uc3QgY2hhciogbmFtZSwgc2l6ZV90IHZhbHVlKSB7Ci0gICAgQVNTRVJUKG5hbWUgIT0gTlVM
TCk7Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2Nh
Y2hlX2J5dGVzIikgPT0gMCkgewotICAgICAgLy8gQ2xpcCB0aGUgdmFsdWUgdG8gYSByZWFzb25h
YmxlIHJhbmdlCi0gICAgICBpZiAodmFsdWUgPCBrTWluVGhyZWFkQ2FjaGVTaXplKSB2YWx1ZSA9
IGtNaW5UaHJlYWRDYWNoZVNpemU7Ci0gICAgICBpZiAodmFsdWUgPiAoMTw8MzApKSB2YWx1ZSA9
ICgxPDwzMCk7ICAgICAvLyBMaW1pdCB0byAxR0IKLQotICAgICAgU3BpbkxvY2tIb2xkZXIgbCgm
cGFnZWhlYXBfbG9jayk7Ci0gICAgICBvdmVyYWxsX3RocmVhZF9jYWNoZV9zaXplID0gc3RhdGlj
X2Nhc3Q8c2l6ZV90Pih2YWx1ZSk7Ci0gICAgICBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UmVjb21w
dXRlVGhyZWFkQ2FjaGVTaXplKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgTWFya1RocmVhZElkbGUoKSB7Ci0g
ICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkJlY29tZUlkbGUoKTsKLSAgfQotCi0gIHZpcnR1YWwg
dm9pZCBSZWxlYXNlRnJlZU1lbW9yeSgpIHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVh
cF9sb2NrKTsKLSAgICBwYWdlaGVhcC0+UmVsZWFzZUZyZWVQYWdlcygpOwotICB9Ci19OwotI2Vu
ZGlmCi0KIC8vIFRoZSBjb25zdHJ1Y3RvciBhbGxvY2F0ZXMgYW4gb2JqZWN0IHRvIGVuc3VyZSB0
aGF0IGluaXRpYWxpemF0aW9uCiAvLyBydW5zIGJlZm9yZSBtYWluKCksIGFuZCB0aGVyZWZvcmUg
d2UgZG8gbm90IGhhdmUgYSBjaGFuY2UgdG8gYmVjb21lCiAvLyBtdWx0aS10aHJlYWRlZCBiZWZv
cmUgaW5pdGlhbGl6YXRpb24uICBXZSBhbHNvIGNyZWF0ZSB0aGUgVFNEIGtleQpAQCAtMzkzMiw3
NSArMzU3MCwxNiBAQCBjbGFzcyBUQ01hbGxvY0d1YXJkIHsKICAgICAvLyBDaGVjayB3aGV0aGVy
IHRoZSBrZXJuZWwgYWxzbyBzdXBwb3J0cyBUTFMgKG5lZWRzIHRvIGhhcHBlbiBhdCBydW50aW1l
KQogICAgIENoZWNrSWZLZXJuZWxTdXBwb3J0c1RMUygpOwogI2VuZGlmCi0jaWZuZGVmIFdURl9D
SEFOR0VTCi0jaWZkZWYgV0lOMzIgICAgICAgICAgICAgICAgICAgIC8vIHBhdGNoIHRoZSB3aW5k
b3dzIFZpcnR1YWxBbGxvYywgZXRjLgotICAgIFBhdGNoV2luZG93c0Z1bmN0aW9ucygpOyAgICAv
LyBkZWZpbmVkIGluIHdpbmRvd3MvcGF0Y2hfZnVuY3Rpb25zLmNjCi0jZW5kaWYKLSNlbmRpZgog
ICAgIGZyZWUobWFsbG9jKDEpKTsKICAgICBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdFRTRCgp
OwogICAgIGZyZWUobWFsbG9jKDEpKTsKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgICBNYWxsb2NF
eHRlbnNpb246OlJlZ2lzdGVyKG5ldyBUQ01hbGxvY0ltcGxlbWVudGF0aW9uKTsKLSNlbmRpZgot
ICB9Ci0KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgflRDTWFsbG9jR3VhcmQoKSB7Ci0gICAgY29u
c3QgY2hhciogZW52ID0gZ2V0ZW52KCJNQUxMT0NTVEFUUyIpOwotICAgIGlmIChlbnYgIT0gTlVM
TCkgewotICAgICAgaW50IGxldmVsID0gYXRvaShlbnYpOwotICAgICAgaWYgKGxldmVsIDwgMSkg
bGV2ZWwgPSAxOwotICAgICAgUHJpbnRTdGF0cyhsZXZlbCk7Ci0gICAgfQotI2lmZGVmIFdJTjMy
Ci0gICAgVW5wYXRjaFdpbmRvd3NGdW5jdGlvbnMoKTsKLSNlbmRpZgogICB9Ci0jZW5kaWYKIH07
CiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0YXRpYyBUQ01hbGxvY0d1YXJkIG1vZHVsZV9lbnRl
cl9leGl0X2hvb2s7Ci0jZW5kaWYKLQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEhlbHBlcnMgZm9yIHRo
ZSBleHBvcnRlZCByb3V0aW5lcyBiZWxvdwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZm5kZWYgV1RGX0NI
QU5HRVMKLQotc3RhdGljIFNwYW4qIERvU2FtcGxlZEFsbG9jYXRpb24oc2l6ZV90IHNpemUpIHsK
LQotICAvLyBHcmFiIHRoZSBzdGFjayB0cmFjZSBvdXRzaWRlIHRoZSBoZWFwIGxvY2sKLSAgU3Rh
Y2tUcmFjZSB0bXA7Ci0gIHRtcC5kZXB0aCA9IEdldFN0YWNrVHJhY2UodG1wLnN0YWNrLCBrTWF4
U3RhY2tEZXB0aCwgMSk7Ci0gIHRtcC5zaXplID0gc2l6ZTsKLQotICBTcGluTG9ja0hvbGRlciBo
KCZwYWdlaGVhcF9sb2NrKTsKLSAgLy8gQWxsb2NhdGUgc3BhbgotICBTcGFuICpzcGFuID0gcGFn
ZWhlYXAtPk5ldyhwYWdlcyhzaXplID09IDAgPyAxIDogc2l6ZSkpOwotICBpZiAoc3BhbiA9PSBO
VUxMKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAvLyBBbGxvY2F0ZSBzdGFjayB0cmFj
ZQotICBTdGFja1RyYWNlICpzdGFjayA9IHN0YWNrdHJhY2VfYWxsb2NhdG9yLk5ldygpOwotICBp
ZiAoc3RhY2sgPT0gTlVMTCkgewotICAgIC8vIFNhbXBsaW5nIGZhaWxlZCBiZWNhdXNlIG9mIGxh
Y2sgb2YgbWVtb3J5Ci0gICAgcmV0dXJuIHNwYW47Ci0gIH0KLQotICAqc3RhY2sgPSB0bXA7Ci0g
IHNwYW4tPnNhbXBsZSA9IDE7Ci0gIHNwYW4tPm9iamVjdHMgPSBzdGFjazsKLSAgRExMX1ByZXBl
bmQoJnNhbXBsZWRfb2JqZWN0cywgc3Bhbik7Ci0KLSAgcmV0dXJuIHNwYW47Ci19Ci0jZW5kaWYK
LQogI2lmICFBU1NFUlRfRElTQUJMRUQKIHN0YXRpYyBpbmxpbmUgYm9vbCBDaGVja0NhY2hlZFNp
emVDbGFzcyh2b2lkICpwdHIpIHsKICAgUGFnZUlEIHAgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0OwpAQCAtNDAyNCwyNiArMzYwMywxNCBAQCBzdGF0aWMg
aW5saW5lIHZvaWQqIFNwYW5Ub01hbGxvY1Jlc3VsdChTcGFuICpzcGFuKSB7CiAgIHJldHVybiBD
aGVja2VkTWFsbG9jUmVzdWx0KHJlc3VsdCk7CiB9CiAKLSNpZmRlZiBXVEZfQ0hBTkdFUwogdGVt
cGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+Ci0jZW5kaWYKIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQqIGRvX21hbGxvYyhzaXplX3Qgc2l6ZSkgewogICB2b2lkKiByZXQgPSBOVUxMOwogCi0j
aWZkZWYgV1RGX0NIQU5HRVMKICAgICBBU1NFUlQoIWlzRm9yYmlkZGVuKCkpOwotI2VuZGlmCiAK
ICAgLy8gVGhlIGZvbGxvd2luZyBjYWxsIGZvcmNlcyBtb2R1bGUgaW5pdGlhbGl6YXRpb24KICAg
VENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0Q2Fj
aGUoKTsKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgaWYgKChGTEFHU190Y21hbGxvY19zYW1wbGVf
cGFyYW1ldGVyID4gMCkgJiYgaGVhcC0+U2FtcGxlQWxsb2NhdGlvbihzaXplKSkgewotICAgIFNw
YW4qIHNwYW4gPSBEb1NhbXBsZWRBbGxvY2F0aW9uKHNpemUpOwotICAgIGlmIChzcGFuICE9IE5V
TEwpIHsKLSAgICAgIHJldCA9IFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKLSAgICB9Ci0gIH0g
ZWxzZQotI2VuZGlmCiAgIGlmIChzaXplID4ga01heFNpemUpIHsKICAgICAvLyBVc2UgcGFnZS1s
ZXZlbCBhbGxvY2F0b3IKICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKQEAg
LTQwNTcsMTIgKzM2MjQsOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkKiBkb19tYWxsb2Mo
c2l6ZV90IHNpemUpIHsKICAgICByZXQgPSBDaGVja2VkTWFsbG9jUmVzdWx0KGhlYXAtPkFsbG9j
YXRlKHNpemUpKTsKICAgfQogICBpZiAoIXJldCkgewotI2lmZGVmIFdURl9DSEFOR0VTCiAgICAg
aWYgKGNyYXNoT25GYWlsdXJlKSAvLyBUaGlzIGJyYW5jaCBzaG91bGQgYmUgb3B0aW1pemVkIG91
dCBieSB0aGUgY29tcGlsZXIuCiAgICAgICAgIENSQVNIKCk7Ci0jZWxzZQotICAgIGVycm5vID0g
RU5PTUVNOwotI2VuZGlmCiAgIH0KICAgcmV0dXJuIHJldDsKIH0KQEAgLTQxMDksOTAgKzM2NzIs
OCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGRvX2ZyZWUodm9pZCogcHRyKSB7CiAgIH0K
IH0KIAotI2lmbmRlZiBXVEZfQ0hBTkdFUwotLy8gRm9yIHVzZSBieSBleHBvcnRlZCByb3V0aW5l
cyBiZWxvdyB0aGF0IHdhbnQgc3BlY2lmaWMgYWxpZ25tZW50cwotLy8KLS8vIE5vdGU6IHRoaXMg
Y29kZSBjYW4gYmUgc2xvdywgYW5kIGNhbiBzaWduaWZpY2FudGx5IGZyYWdtZW50IG1lbW9yeS4K
LS8vIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IG1lbWFsaWduL3Bvc2l4X21lbWFsaWduL3ZhbGxv
Yy9wdmFsbG9jIHdpbGwKLS8vIG5vdCBiZSBpbnZva2VkIHZlcnkgb2Z0ZW4uICBUaGlzIHJlcXVp
cmVtZW50IHNpbXBsaWZpZXMgb3VyCi0vLyBpbXBsZW1lbnRhdGlvbiBhbmQgYWxsb3dzIHVzIHRv
IHR1bmUgZm9yIGV4cGVjdGVkIGFsbG9jYXRpb24KLS8vIHBhdHRlcm5zLgotc3RhdGljIHZvaWQq
IGRvX21lbWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpIHsKLSAgQVNTRVJUKChhbGln
biAmIChhbGlnbiAtIDEpKSA9PSAwKTsKLSAgQVNTRVJUKGFsaWduID4gMCk7Ci0gIGlmIChwYWdl
aGVhcCA9PSBOVUxMKSBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSgpOwotCi0gIC8v
IEFsbG9jYXRlIGF0IGxlYXN0IG9uZSBieXRlIHRvIGF2b2lkIGJvdW5kYXJ5IGNvbmRpdGlvbnMg
YmVsb3cKLSAgaWYgKHNpemUgPT0gMCkgc2l6ZSA9IDE7Ci0KLSAgaWYgKHNpemUgPD0ga01heFNp
emUgJiYgYWxpZ24gPCBrUGFnZVNpemUpIHsKLSAgICAvLyBTZWFyY2ggdGhyb3VnaCBhY2NlcHRh
YmxlIHNpemUgY2xhc3NlcyBsb29raW5nIGZvciBvbmUgd2l0aAotICAgIC8vIGVub3VnaCBhbGln
bm1lbnQuICBUaGlzIGRlcGVuZHMgb24gdGhlIGZhY3QgdGhhdAotICAgIC8vIEluaXRTaXplQ2xh
c3NlcygpIGN1cnJlbnRseSBwcm9kdWNlcyBzZXZlcmFsIHNpemUgY2xhc3NlcyB0aGF0Ci0gICAg
Ly8gYXJlIGFsaWduZWQgYXQgcG93ZXJzIG9mIHR3by4gIFdlIHdpbGwgd2FzdGUgdGltZSBhbmQg
c3BhY2UgaWYKLSAgICAvLyB3ZSBtaXNzIGluIHRoZSBzaXplIGNsYXNzIGFycmF5LCBidXQgdGhh
dCBpcyBkZWVtZWQgYWNjZXB0YWJsZQotICAgIC8vIHNpbmNlIG1lbWFsaWduKCkgc2hvdWxkIGJl
IHVzZWQgcmFyZWx5LgotICAgIHNpemVfdCBjbCA9IFNpemVDbGFzcyhzaXplKTsKLSAgICB3aGls
ZSAoY2wgPCBrTnVtQ2xhc3NlcyAmJiAoKGNsYXNzX3RvX3NpemVbY2xdICYgKGFsaWduIC0gMSkp
ICE9IDApKSB7Ci0gICAgICBjbCsrOwotICAgIH0KLSAgICBpZiAoY2wgPCBrTnVtQ2xhc3Nlcykg
ewotICAgICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBUQ01hbGxvY19UaHJlYWRDYWNo
ZTo6R2V0Q2FjaGUoKTsKLSAgICAgIHJldHVybiBDaGVja2VkTWFsbG9jUmVzdWx0KGhlYXAtPkFs
bG9jYXRlKGNsYXNzX3RvX3NpemVbY2xdKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gV2Ugd2lsbCBh
bGxvY2F0ZSBkaXJlY3RseSBmcm9tIHRoZSBwYWdlIGhlYXAKLSAgU3BpbkxvY2tIb2xkZXIgaCgm
cGFnZWhlYXBfbG9jayk7Ci0KLSAgaWYgKGFsaWduIDw9IGtQYWdlU2l6ZSkgewotICAgIC8vIEFu
eSBwYWdlLWxldmVsIGFsbG9jYXRpb24gd2lsbCBiZSBmaW5lCi0gICAgLy8gVE9ETzogV2UgY291
bGQgcHV0IHRoZSByZXN0IG9mIHRoaXMgcGFnZSBpbiB0aGUgYXBwcm9wcmlhdGUKLSAgICAvLyBU
T0RPOiBjYWNoZSBidXQgaXQgZG9lcyBub3Qgc2VlbSB3b3J0aCBpdC4KLSAgICBTcGFuKiBzcGFu
ID0gcGFnZWhlYXAtPk5ldyhwYWdlcyhzaXplKSk7Ci0gICAgcmV0dXJuIHNwYW4gPT0gTlVMTCA/
IE5VTEwgOiBTcGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7Ci0gIH0KLQotICAvLyBBbGxvY2F0ZSBl
eHRyYSBwYWdlcyBhbmQgY2FydmUgb2ZmIGFuIGFsaWduZWQgcG9ydGlvbgotICBjb25zdCBMZW5n
dGggYWxsb2MgPSBwYWdlcyhzaXplICsgYWxpZ24pOwotICBTcGFuKiBzcGFuID0gcGFnZWhlYXAt
Pk5ldyhhbGxvYyk7Ci0gIGlmIChzcGFuID09IE5VTEwpIHJldHVybiBOVUxMOwotCi0gIC8vIFNr
aXAgc3RhcnRpbmcgcG9ydGlvbiBzbyB0aGF0IHdlIGVuZCB1cCBhbGlnbmVkCi0gIExlbmd0aCBz
a2lwID0gMDsKLSAgd2hpbGUgKCgoKHNwYW4tPnN0YXJ0K3NraXApIDw8IGtQYWdlU2hpZnQpICYg
KGFsaWduIC0gMSkpICE9IDApIHsKLSAgICBza2lwKys7Ci0gIH0KLSAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oc2tpcCA8IGFsbG9jKTsKLSAgaWYgKHNraXAgPiAwKSB7Ci0gICAg
U3BhbiogcmVzdCA9IHBhZ2VoZWFwLT5TcGxpdChzcGFuLCBza2lwKTsKLSAgICBwYWdlaGVhcC0+
RGVsZXRlKHNwYW4pOwotICAgIHNwYW4gPSByZXN0OwotICB9Ci0KLSAgLy8gU2tpcCB0cmFpbGlu
ZyBwb3J0aW9uIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gcmV0dXJuCi0gIGNvbnN0IExlbmd0aCBu
ZWVkZWQgPSBwYWdlcyhzaXplKTsKLSAgQVNTRVJUKHNwYW4tPmxlbmd0aCA+PSBuZWVkZWQpOwot
ICBpZiAoc3Bhbi0+bGVuZ3RoID4gbmVlZGVkKSB7Ci0gICAgU3BhbiogdHJhaWxlciA9IHBhZ2Vo
ZWFwLT5TcGxpdChzcGFuLCBuZWVkZWQpOwotICAgIHBhZ2VoZWFwLT5EZWxldGUodHJhaWxlcik7
Ci0gIH0KLSAgcmV0dXJuIFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKLX0KLSNlbmRpZgotCiAv
LyBIZWxwZXJzIGZvciB1c2UgYnkgZXhwb3J0ZWQgcm91dGluZXMgYmVsb3c6CiAKLSNpZm5kZWYg
V1RGX0NIQU5HRVMKLXN0YXRpYyBpbmxpbmUgdm9pZCBkb19tYWxsb2Nfc3RhdHMoKSB7Ci0gIFBy
aW50U3RhdHMoMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRvX21hbGxvcHQoaW50LCBpbnQp
IHsKLSAgcmV0dXJuIDE7ICAgICAvLyBJbmRpY2F0ZXMgZXJyb3IKLX0KLSNlbmRpZgotCiAjaWZk
ZWYgSEFWRV9TVFJVQ1RfTUFMTElORk8gIC8vIG1hbGxpbmZvIGlzbid0IGRlZmluZWQgb24gZnJl
ZWJzZCwgZm9yIGluc3RhbmNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtYWxsaW5mbyBkb19tYWxs
aW5mbygpIHsKICAgVENNYWxsb2NTdGF0cyBzdGF0czsKQEAgLTQyMjgsOSArMzcwOSw2IEBAIHN0
YXRpYyBpbmxpbmUgc3RydWN0IG1hbGxpbmZvIGRvX21hbGxpbmZvKCkgewogLy8gICAgICAgICBo
ZWFwLWNoZWNrZXIuY2MgZGVwZW5kcyBvbiB0aGlzIHRvIHN0YXJ0IGEgc3RhY2sgdHJhY2UgZnJv
bQogLy8gICAgICAgICB0aGUgY2FsbCB0byB0aGUgKGRlKWFsbG9jYXRpb24gZnVuY3Rpb24uCiAK
LSNpZm5kZWYgV1RGX0NIQU5HRVMKLWV4dGVybiAiQyIgCi0jZWxzZQogI2RlZmluZSBkb19tYWxs
b2MgZG9fbWFsbG9jPGNyYXNoT25GYWlsdXJlPgogCiB0ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9uRmFp
bHVyZT4KQEAgLTQyNTcsOSArMzczNSw3IEBAIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RN
YWxsb2Moc2l6ZV90IHNpemUpCiB9CiAKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgot
QUxXQVlTX0lOTElORQotI2VuZGlmCi12b2lkKiBtYWxsb2Moc2l6ZV90IHNpemUpIHsKK0FMV0FZ
U19JTkxJTkUgdm9pZCogbWFsbG9jKHNpemVfdCBzaXplKSB7CiAjaWYgRU5BQkxFKFdURl9NQUxM
T0NfVkFMSURBVElPTikKICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSAtIEludGVybmFsOjpWYWxpZGF0aW9uQnVmZmVyU2l6ZSA8PSBzaXplKSAgLy8gSWYgb3ZlcmZs
b3cgd291bGQgb2NjdXIuLi4KICAgICAgICAgcmV0dXJuIDA7CkBAIC00MjgyLDkgKzM3NTgsNiBA
QCB2b2lkKiBtYWxsb2Moc2l6ZV90IHNpemUpIHsKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lm
bmRlZiBXVEZfQ0hBTkdFUwotZXh0ZXJuICJDIiAKLSNlbmRpZgogdm9pZCBmcmVlKHZvaWQqIHB0
cikgewogI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCiAgICAgZGF0YUxvZ0YoImZhc3RG
cmVlIGZyZWVpbmcgJXAuXG4iLCBwdHIpOwpAQCAtNDMwNSw5ICszNzc4LDYgQEAgdm9pZCBmcmVl
KHZvaWQqIHB0cikgewogI2VuZGlmCiB9CiAKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLWV4dGVybiAi
QyIgCi0jZWxzZQogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdBWVNfSU5MSU5F
IHZvaWQqIGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CiAKQEAgLTQzMzYsOSArMzgwNiw3IEBAIFRy
eU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtX3Np
emUpCiB9CiAKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgotQUxXQVlTX0lOTElORQot
I2VuZGlmCi12b2lkKiBjYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUpIHsKK0FMV0FZ
U19JTkxJTkUgdm9pZCogY2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxlbV9zaXplKSB7CiAgIHNp
emVfdCB0b3RhbEJ5dGVzID0gbiAqIGVsZW1fc2l6ZTsKICAgICAKICAgLy8gUHJvdGVjdCBhZ2Fp
bnN0IG92ZXJmbG93CkBAIC00MzYzLDIyICszODMxLDYgQEAgdm9pZCogY2FsbG9jKHNpemVfdCBu
LCBzaXplX3QgZWxlbV9zaXplKSB7CiAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS8vIFNpbmNlIGNm
cmVlIGlzbid0IHVzZWQgYW55d2hlcmUsIHdlIGRvbid0IGNvbXBpbGUgaXQgaW4uCi0jaWZuZGVm
IFdURl9DSEFOR0VTCi0jaWZuZGVmIFdURl9DSEFOR0VTCi1leHRlcm4gIkMiIAotI2VuZGlmCi12
b2lkIGNmcmVlKHZvaWQqIHB0cikgewotI2lmbmRlZiBXVEZfQ0hBTkdFUwotICAgIE1hbGxvY0hv
b2s6Okludm9rZURlbGV0ZUhvb2socHRyKTsKLSNlbmRpZgotICBkb19mcmVlKHB0cik7Ci19Ci0j
ZW5kaWYKLQotI2lmbmRlZiBXVEZfQ0hBTkdFUwotZXh0ZXJuICJDIiAKLSNlbHNlCiB0ZW1wbGF0
ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4KIEFMV0FZU19JTkxJTkUgdm9pZCogcmVhbGxvYyh2b2lk
Kiwgc2l6ZV90KTsKIApAQCAtNDQxMyw5ICszODY1LDcgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUg
dHJ5RmFzdFJlYWxsb2Modm9pZCogb2xkX3B0ciwgc2l6ZV90IG5ld19zaXplKQogfQogCiB0ZW1w
bGF0ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4KLUFMV0FZU19JTkxJTkUKLSNlbmRpZgotdm9pZCog
cmVhbGxvYyh2b2lkKiBvbGRfcHRyLCBzaXplX3QgbmV3X3NpemUpIHsKK0FMV0FZU19JTkxJTkUg
dm9pZCogcmVhbGxvYyh2b2lkKiBvbGRfcHRyLCBzaXplX3QgbmV3X3NpemUpIHsKICAgaWYgKG9s
ZF9wdHIgPT0gTlVMTCkgewogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCiAgICAg
dm9pZCogcmVzdWx0ID0gbWFsbG9jPGNyYXNoT25GYWlsdXJlPihuZXdfc2l6ZSk7CkBAIC00NDg3
LDE2NiArMzkzNyw4IEBAIHZvaWQqIHJlYWxsb2Modm9pZCogb2xkX3B0ciwgc2l6ZV90IG5ld19z
aXplKSB7CiAgIH0KIH0KIAotI2lmZGVmIFdURl9DSEFOR0VTCiAjdW5kZWYgZG9fbWFsbG9jCi0j
ZWxzZQotCi1zdGF0aWMgU3BpbkxvY2sgc2V0X25ld19oYW5kbGVyX2xvY2sgPSBTUElOTE9DS19J
TklUSUFMSVpFUjsKLQotc3RhdGljIGlubGluZSB2b2lkKiBjcHBfYWxsb2Moc2l6ZV90IHNpemUs
IGJvb2wgbm90aHJvdykgewotICBmb3IgKDs7KSB7Ci0gICAgdm9pZCogcCA9IGRvX21hbGxvYyhz
aXplKTsKLSNpZmRlZiBQUkVBTlNJTkVXCi0gICAgcmV0dXJuIHA7Ci0jZWxzZQotICAgIGlmIChw
ID09IE5VTEwpIHsgIC8vIGFsbG9jYXRpb24gZmFpbGVkCi0gICAgICAvLyBHZXQgdGhlIGN1cnJl
bnQgbmV3IGhhbmRsZXIuICBOQjogdGhpcyBmdW5jdGlvbiBpcyBub3QKLSAgICAgIC8vIHRocmVh
ZC1zYWZlLiAgV2UgbWFrZSBhIGZlZWJsZSBzdGFiIGF0IG1ha2luZyBpdCBzbyBoZXJlLCBidXQK
LSAgICAgIC8vIHRoaXMgbG9jayBvbmx5IHByb3RlY3RzIGFnYWluc3QgdGNtYWxsb2MgaW50ZXJm
ZXJpbmcgd2l0aAotICAgICAgLy8gaXRzZWxmLCBub3Qgd2l0aCBvdGhlciBsaWJyYXJpZXMgY2Fs
bGluZyBzZXRfbmV3X2hhbmRsZXIuCi0gICAgICBzdGQ6Om5ld19oYW5kbGVyIG5oOwotICAgICAg
ewotICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZzZXRfbmV3X2hhbmRsZXJfbG9jayk7Ci0gICAg
ICAgIG5oID0gc3RkOjpzZXRfbmV3X2hhbmRsZXIoMCk7Ci0gICAgICAgICh2b2lkKSBzdGQ6OnNl
dF9uZXdfaGFuZGxlcihuaCk7Ci0gICAgICB9Ci0gICAgICAvLyBJZiBubyBuZXdfaGFuZGxlciBp
cyBlc3RhYmxpc2hlZCwgdGhlIGFsbG9jYXRpb24gZmFpbGVkLgotICAgICAgaWYgKCFuaCkgewot
ICAgICAgICBpZiAobm90aHJvdykgcmV0dXJuIDA7Ci0gICAgICAgIHRocm93IHN0ZDo6YmFkX2Fs
bG9jKCk7Ci0gICAgICB9Ci0gICAgICAvLyBPdGhlcndpc2UsIHRyeSB0aGUgbmV3X2hhbmRsZXIu
ICBJZiBpdCByZXR1cm5zLCByZXRyeSB0aGUKLSAgICAgIC8vIGFsbG9jYXRpb24uICBJZiBpdCB0
aHJvd3Mgc3RkOjpiYWRfYWxsb2MsIGZhaWwgdGhlIGFsbG9jYXRpb24uCi0gICAgICAvLyBpZiBp
dCB0aHJvd3Mgc29tZXRoaW5nIGVsc2UsIGRvbid0IGludGVyZmVyZS4KLSAgICAgIHRyeSB7Ci0g
ICAgICAgICgqbmgpKCk7Ci0gICAgICB9IGNhdGNoIChjb25zdCBzdGQ6OmJhZF9hbGxvYyYpIHsK
LSAgICAgICAgaWYgKCFub3Rocm93KSB0aHJvdzsKLSAgICAgICAgcmV0dXJuIHA7Ci0gICAgICB9
Ci0gICAgfSBlbHNlIHsgIC8vIGFsbG9jYXRpb24gc3VjY2VzcwotICAgICAgcmV0dXJuIHA7Ci0g
ICAgfQotI2VuZGlmCi0gIH0KLX0KLQotZXh0ZXJuICJDIiB2b2lkKiBtZW1hbGlnbihzaXplX3Qg
YWxpZ24sIHNpemVfdCBzaXplKSBfX1RIUk9XIHsKLSAgdm9pZCogcmVzdWx0ID0gZG9fbWVtYWxp
Z24oYWxpZ24sIHNpemUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6
ZSk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWV4dGVybiAiQyIgaW50IHBvc2l4X21lbWFsaWdu
KHZvaWQqKiByZXN1bHRfcHRyLCBzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKQotICAgIF9fVEhS
T1cgewotICBpZiAoKChhbGlnbiAlIHNpemVvZih2b2lkKikpICE9IDApIHx8Ci0gICAgICAoKGFs
aWduICYgKGFsaWduIC0gMSkpICE9IDApIHx8Ci0gICAgICAoYWxpZ24gPT0gMCkpIHsKLSAgICBy
ZXR1cm4gRUlOVkFMOwotICB9Ci0KLSAgdm9pZCogcmVzdWx0ID0gZG9fbWVtYWxpZ24oYWxpZ24s
IHNpemUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7Ci0gIGlm
IChyZXN1bHQgPT0gTlVMTCkgewotICAgIHJldHVybiBFTk9NRU07Ci0gIH0gZWxzZSB7Ci0gICAg
KnJlc3VsdF9wdHIgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotc3RhdGljIHNp
emVfdCBwYWdlc2l6ZSA9IDA7Ci0KLWV4dGVybiAiQyIgdm9pZCogdmFsbG9jKHNpemVfdCBzaXpl
KSBfX1RIUk9XIHsKLSAgLy8gQWxsb2NhdGUgcGFnZS1hbGlnbmVkIG9iamVjdCBvZiBsZW5ndGgg
Pj0gc2l6ZSBieXRlcwotICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6
ZSgpOwotICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7Ci0gIE1h
bGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKLSAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotZXh0ZXJuICJDIiB2b2lkKiBwdmFsbG9jKHNpemVfdCBzaXplKSBfX1RIUk9XIHsKLSAg
Ly8gUm91bmQgdXAgc2l6ZSB0byBhIG11bHRpcGxlIG9mIHBhZ2VzaXplCi0gIGlmIChwYWdlc2l6
ZSA9PSAwKSBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0gIHNpemUgPSAoc2l6ZSArIHBhZ2Vz
aXplIC0gMSkgJiB+KHBhZ2VzaXplIC0gMSk7Ci0gIHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWdu
KHBhZ2VzaXplLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNp
emUpOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1leHRlcm4gIkMiIHZvaWQgbWFsbG9jX3N0YXRz
KHZvaWQpIHsKLSAgZG9fbWFsbG9jX3N0YXRzKCk7Ci19Ci0KLWV4dGVybiAiQyIgaW50IG1hbGxv
cHQoaW50IGNtZCwgaW50IHZhbHVlKSB7Ci0gIHJldHVybiBkb19tYWxsb3B0KGNtZCwgdmFsdWUp
OwotfQotCi0jaWZkZWYgSEFWRV9TVFJVQ1RfTUFMTElORk8KLWV4dGVybiAiQyIgc3RydWN0IG1h
bGxpbmZvIG1hbGxpbmZvKHZvaWQpIHsKLSAgcmV0dXJuIGRvX21hbGxpbmZvKCk7Ci19Ci0jZW5k
aWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTb21lIGxpYnJhcnkgcm91dGluZXMgb24gUmVkSGF0IDkg
YWxsb2NhdGUgbWVtb3J5IHVzaW5nIG1hbGxvYygpCi0vLyBhbmQgZnJlZSBpdCB1c2luZyBfX2xp
YmNfZnJlZSgpIChvciB2aWNlLXZlcnNhKS4gIFNpbmNlIHdlIHByb3ZpZGUKLS8vIG91ciBvd24g
aW1wbGVtZW50YXRpb25zIG9mIG1hbGxvYy9mcmVlLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0
Ci0vLyB0aGUgX19saWJjX1hYWCB2YXJpYW50cyAoZGVmaW5lZCBhcyBwYXJ0IG9mIGdsaWJjKSBh
bHNvIHBvaW50IHRvCi0vLyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbnMuCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotI2lmIGRlZmluZWQoX19HTElCQ19fKQotZXh0ZXJuICJDIiB7Ci0jaWYgQ09NUElMRVIoR0ND
KSAmJiAhZGVmaW5lZChfX01BQ0hfXykgJiYgZGVmaW5lZChIQVZFX19fQVRUUklCVVRFX18pCi0g
IC8vIFBvdGVudGlhbGx5IGZhc3RlciB2YXJpYW50cyB0aGF0IHVzZSB0aGUgZ2NjIGFsaWFzIGV4
dGVuc2lvbi4KLSAgLy8gTWFjaC1PIChEYXJ3aW4pIGRvZXMgbm90IHN1cHBvcnQgd2VhayBhbGlh
c2VzLCBoZW5jZSB0aGUgX19NQUNIX18gY2hlY2suCi0jIGRlZmluZSBBTElBUyh4KSBfX2F0dHJp
YnV0ZV9fICgod2VhaywgYWxpYXMgKHgpKSkKLSAgdm9pZCogX19saWJjX21hbGxvYyhzaXplX3Qg
c2l6ZSkgICAgICAgICAgICAgIEFMSUFTKCJtYWxsb2MiKTsKLSAgdm9pZCAgX19saWJjX2ZyZWUo
dm9pZCogcHRyKSAgICAgICAgICAgICAgICAgIEFMSUFTKCJmcmVlIik7Ci0gIHZvaWQqIF9fbGli
Y19yZWFsbG9jKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpICBBTElBUygicmVhbGxvYyIpOwotICB2
b2lkKiBfX2xpYmNfY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZSkgICAgQUxJQVMoImNhbGxv
YyIpOwotICB2b2lkICBfX2xpYmNfY2ZyZWUodm9pZCogcHRyKSAgICAgICAgICAgICAgICAgQUxJ
QVMoImNmcmVlIik7Ci0gIHZvaWQqIF9fbGliY19tZW1hbGlnbihzaXplX3QgYWxpZ24sIHNpemVf
dCBzKSBBTElBUygibWVtYWxpZ24iKTsKLSAgdm9pZCogX19saWJjX3ZhbGxvYyhzaXplX3Qgc2l6
ZSkgICAgICAgICAgICAgIEFMSUFTKCJ2YWxsb2MiKTsKLSAgdm9pZCogX19saWJjX3B2YWxsb2Mo
c2l6ZV90IHNpemUpICAgICAgICAgICAgIEFMSUFTKCJwdmFsbG9jIik7Ci0gIGludCBfX3Bvc2l4
X21lbWFsaWduKHZvaWQqKiByLCBzaXplX3QgYSwgc2l6ZV90IHMpIEFMSUFTKCJwb3NpeF9tZW1h
bGlnbiIpOwotIyB1bmRlZiBBTElBUwotIyBlbHNlICAgLyogbm90IF9fR05VQ19fICovCi0gIC8v
IFBvcnRhYmxlIHdyYXBwZXJzCi0gIHZvaWQqIF9fbGliY19tYWxsb2Moc2l6ZV90IHNpemUpICAg
ICAgICAgICAgICB7IHJldHVybiBtYWxsb2Moc2l6ZSk7ICAgICAgIH0KLSAgdm9pZCAgX19saWJj
X2ZyZWUodm9pZCogcHRyKSAgICAgICAgICAgICAgICAgIHsgZnJlZShwdHIpOyAgICAgICAgICAg
ICAgICAgfQotICB2b2lkKiBfX2xpYmNfcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSAg
eyByZXR1cm4gcmVhbGxvYyhwdHIsIHNpemUpOyB9Ci0gIHZvaWQqIF9fbGliY19jYWxsb2Moc2l6
ZV90IG4sIHNpemVfdCBzaXplKSAgICB7IHJldHVybiBjYWxsb2Mobiwgc2l6ZSk7ICAgIH0KLSAg
dm9pZCAgX19saWJjX2NmcmVlKHZvaWQqIHB0cikgICAgICAgICAgICAgICAgIHsgY2ZyZWUocHRy
KTsgICAgICAgICAgICAgICAgfQotICB2b2lkKiBfX2xpYmNfbWVtYWxpZ24oc2l6ZV90IGFsaWdu
LCBzaXplX3QgcykgeyByZXR1cm4gbWVtYWxpZ24oYWxpZ24sIHMpOyB9Ci0gIHZvaWQqIF9fbGli
Y192YWxsb2Moc2l6ZV90IHNpemUpICAgICAgICAgICAgICB7IHJldHVybiB2YWxsb2Moc2l6ZSk7
ICAgICAgIH0KLSAgdm9pZCogX19saWJjX3B2YWxsb2Moc2l6ZV90IHNpemUpICAgICAgICAgICAg
IHsgcmV0dXJuIHB2YWxsb2Moc2l6ZSk7ICAgICAgfQotICBpbnQgX19wb3NpeF9tZW1hbGlnbih2
b2lkKiogciwgc2l6ZV90IGEsIHNpemVfdCBzKSB7Ci0gICAgcmV0dXJuIHBvc2l4X21lbWFsaWdu
KHIsIGEsIHMpOwotICB9Ci0jIGVuZGlmICAvKiBfX0dOVUNfXyAqLwotfQotI2VuZGlmICAgLyog
X19HTElCQ19fICovCi0KLS8vIE92ZXJyaWRlIF9fbGliY19tZW1hbGlnbiBpbiBsaWJjIG9uIGxp
bnV4IGJveGVzIHNwZWNpYWxseS4KLS8vIFRoZXkgaGF2ZSBhIGJ1ZyBpbiBsaWJjIHRoYXQgY2F1
c2VzIHRoZW0gdG8gKHZlcnkgcmFyZWx5KSBhbGxvY2F0ZQotLy8gd2l0aCBfX2xpYmNfbWVtYWxp
Z24oKSB5ZXQgZGVhbGxvY2F0ZSB3aXRoIGZyZWUoKSBhbmQgdGhlCi0vLyBkZWZpbml0aW9ucyBh
Ym92ZSBkb24ndCBjYXRjaCBpdC4KLS8vIFRoaXMgZnVuY3Rpb24gaXMgYW4gZXhjZXB0aW9uIHRv
IHRoZSBydWxlIG9mIGNhbGxpbmcgTWFsbG9jSG9vayBtZXRob2QKLS8vIGZyb20gdGhlIHN0YWNr
IGZyYW1lIG9mIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uOwotLy8gaGVhcC1jaGVja2VyIGhhbmRs
ZXMgdGhpcyBzcGVjaWFsIGNhc2UgZXhwbGljaXRseS4KLXN0YXRpYyB2b2lkICpNZW1hbGlnbk92
ZXJyaWRlKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUsIGNvbnN0IHZvaWQgKmNhbGxlcikKLSAg
ICBfX1RIUk9XIHsKLSAgdm9pZCogcmVzdWx0ID0gZG9fbWVtYWxpZ24oYWxpZ24sIHNpemUpOwot
ICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7Ci0gIHJldHVybiByZXN1
bHQ7Ci19Ci12b2lkICooKl9fbWVtYWxpZ25faG9vaykoc2l6ZV90LCBzaXplX3QsIGNvbnN0IHZv
aWQgKikgPSBNZW1hbGlnbk92ZXJyaWRlOwotCi0jZW5kaWYKIAotI2lmZGVmIFdURl9DSEFOR0VT
CiB2b2lkIHJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeSgpCiB7CiAgICAgLy8gRmx1c2ggZnJl
ZSBwYWdlcyBpbiB0aGUgY3VycmVudCB0aHJlYWQgY2FjaGUgYmFjayB0byB0aGUgcGFnZSBoZWFw
LgpAQCAtNTA3Myw2ICs0MzY1LDUgQEAgdm9pZCBGYXN0TWFsbG9jWm9uZTo6aW5pdCgpCiAjZW5k
aWYgLy8gT1MoREFSV0lOKQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKLSNlbmRpZiAvLyBXVEZfQ0hB
TkdFUwogCiAjZW5kaWYgLy8gRk9SQ0VfU1lTVEVNX01BTExPQwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVENQYWNrZWRDYWNoZS5oIGIvU291cmNlL1dURi93dGYvVENQYWNrZWRDYWNoZS5o
CmluZGV4IDA0NjRmOGZkYzJjZjkzN2Y5YzU5Y2NmYzQ4OWIzNGJkOGRkY2NjYTUuLjJlYTEwODBi
MzkxOWM1MjljM2JjMjk5MzgzMWFjNzFhYzNjMjQzYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1RDUGFja2VkQ2FjaGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UQ1BhY2tlZENhY2hlLmgK
QEAgLTExMSwxMSArMTExLDYgQEAKICNpZm5kZWYgVENNQUxMT0NfUEFDS0VEX0NBQ0hFX0lOTF9I
X18KICNkZWZpbmUgVENNQUxMT0NfUEFDS0VEX0NBQ0hFX0lOTF9IX18KIAotI2lmbmRlZiBXVEZf
Q0hBTkdFUwotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIiAgLy8gZm9yIENPTVBJTEVfQVNT
RVJUCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiICAgICAvLyBmb3IgRENIRUNLCi0jZW5kaWYK
LQogI2lmbmRlZiBEQ0hFQ0tfRVEKICNkZWZpbmUgRENIRUNLX0VRKHZhbDEsIHZhbDIpIEFTU0VS
VCgodmFsMSkgPT0gKHZhbDIpKQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9U
Q1BhZ2VNYXAuaCBiL1NvdXJjZS9XVEYvd3RmL1RDUGFnZU1hcC5oCmluZGV4IDk0MDE2YTZjNjZi
YmFhNzFjNzQwOGJlODdjZGI1ZjRhM2UwZmNhMjYuLmM2ODEzNTE4ZjFkOTkzNDkxYmFiNjAxZTRh
MzQxZmQ0YjgwZmMyZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RDUGFnZU1hcC5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RDUGFnZU1hcC5oCkBAIC0xNTQsNyArMTU0LDYgQEAgY2xhc3Mg
VENNYWxsb2NfUGFnZU1hcDIgewogICAgIEVuc3VyZSgwLCAxIDw8IEJJVFMpOwogICB9CiAKLSNp
ZmRlZiBXVEZfQ0hBTkdFUwogICB0ZW1wbGF0ZTxjbGFzcyBWaXNpdG9yLCBjbGFzcyBNZW1vcnlS
ZWFkZXI+CiAgIHZvaWQgdmlzaXRWYWx1ZXMoVmlzaXRvciYgdmlzaXRvciwgY29uc3QgTWVtb3J5
UmVhZGVyJiByZWFkZXIpCiAgIHsKQEAgLTE5NCw3ICsxOTMsNiBAQCBjbGFzcyBUQ01hbGxvY19Q
YWdlTWFwMiB7CiAgICAgICAgIHZpc2l0b3IudmlzaXQocm9vdF9baV0sIHNpemVvZihMZWFmKSk7
CiAgICAgfQogICB9Ci0jZW5kaWYKIH07CiAKIC8vIFRocmVlLWxldmVsIHJhZGl4IHRyZWUKQEAg
LTI4Myw3ICsyODEsNiBAQCBjbGFzcyBUQ01hbGxvY19QYWdlTWFwMyB7CiAgIHZvaWQgUHJlYWxs
b2NhdGVNb3JlTWVtb3J5KCkgewogICB9CiAKLSNpZmRlZiBXVEZfQ0hBTkdFUwogICB0ZW1wbGF0
ZTxjbGFzcyBWaXNpdG9yLCBjbGFzcyBNZW1vcnlSZWFkZXI+CiAgIHZvaWQgdmlzaXRWYWx1ZXMo
VmlzaXRvciYgdmlzaXRvciwgY29uc3QgTWVtb3J5UmVhZGVyJiByZWFkZXIpIHsKICAgICBjb25z
dCBOdW1iZXIgaW50ZXJtZWRpYXRlSW5kZXhNYXNrID0gKElOVEVSSU9SX0xFTkdUSCAtIDEpIDw8
IExFQUZfQklUUzsKQEAgLTM1NSw3ICszNTIsNiBAQCBjbGFzcyBUQ01hbGxvY19QYWdlTWFwMyB7
CiAgICAgICB9CiAgICAgfQogICB9Ci0jZW5kaWYKIH07CiAKICNlbmRpZiAgLy8gVENNQUxMT0Nf
UEFHRU1BUF9IX18KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RDU3lzdGVtQWxsb2MuY3Bw
IGIvU291cmNlL1dURi93dGYvVENTeXN0ZW1BbGxvYy5jcHAKaW5kZXggOGY1YzA1MjVlNGYyNDky
MDBmYWM2YTEzMWI2OGU4YzIwODMxMjcwZC4uNWFmYThiNzQ3NmUxYjkxZmM5NGYxYzY0NzRjZjY2
ZDIzNmY2YzBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVENTeXN0ZW1BbGxvYy5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvVENTeXN0ZW1BbGxvYy5jcHAKQEAgLTczLDEwICs3Myw2IEBA
IHN0YXRpYyBzaXplX3QgcGFnZXNpemUgPSAwOwogLy8gRm9yIDIuMiBrZXJuZWxzLCBpdCBsb29r
cyBsaWtlIHRoZSBzYnJrIGFkZHJlc3Mgc3BhY2UgKDUwME1CaXNoKSBhbmQKIC8vIHRoZSBtbWFw
IGFkZHJlc3Mgc3BhY2UgKDEzMDBNQmlzaCkgYXJlIGRpc2pvaW50LCBzbyB3ZSBuZWVkIGJvdGgg
YWxsb2NhdG9ycwogLy8gdG8gZ2V0IGFzIG11Y2ggdmlydHVhbCBtZW1vcnkgYXMgcG9zc2libGUu
Ci0jaWZuZGVmIFdURl9DSEFOR0VTCi1zdGF0aWMgYm9vbCB1c2VfZGV2bWVtID0gZmFsc2U7Ci1z
dGF0aWMgYm9vbCB1c2Vfc2JyayA9IGZhbHNlOwotI2VuZGlmCiAKICNpZiBIQVZFKE1NQVApCiBz
dGF0aWMgYm9vbCB1c2VfbW1hcCA9IHRydWU7CkBAIC05Miw1OSArODgsNiBAQCBzdGF0aWMgYm9v
bCBzYnJrX2ZhaWx1cmUgPSBmYWxzZTsKIHN0YXRpYyBib29sIG1tYXBfZmFpbHVyZSA9IGZhbHNl
Owogc3RhdGljIGJvb2wgVmlydHVhbEFsbG9jX2ZhaWx1cmUgPSBmYWxzZTsKIAotI2lmbmRlZiBX
VEZfQ0hBTkdFUwotREVGSU5FX2ludDMyKG1hbGxvY19kZXZtZW1fc3RhcnQsIDAsCi0gICAgICAg
ICAgICAgIlBoeXNpY2FsIG1lbW9yeSBzdGFydGluZyBsb2NhdGlvbiBpbiBNQiBmb3IgL2Rldi9t
ZW0gYWxsb2NhdGlvbi4iCi0gICAgICAgICAgICAgIiAgU2V0dGluZyB0aGlzIHRvIDAgZGlzYWJs
ZXMgL2Rldi9tZW0gYWxsb2NhdGlvbiIpOwotREVGSU5FX2ludDMyKG1hbGxvY19kZXZtZW1fbGlt
aXQsIDAsCi0gICAgICAgICAgICAgIlBoeXNpY2FsIG1lbW9yeSBsaW1pdCBsb2NhdGlvbiBpbiBN
QiBmb3IgL2Rldi9tZW0gYWxsb2NhdGlvbi4iCi0gICAgICAgICAgICAgIiAgU2V0dGluZyB0aGlz
IHRvIDAgbWVhbnMgbm8gbGltaXQuIik7Ci0jZW5kaWYKLQotI2lmbmRlZiBXVEZfQ0hBTkdFUwot
Ci1zdGF0aWMgdm9pZCogVHJ5U2JyayhzaXplX3Qgc2l6ZSwgc2l6ZV90ICphY3R1YWxfc2l6ZSwg
c2l6ZV90IGFsaWdubWVudCkgewotICBzaXplID0gKChzaXplICsgYWxpZ25tZW50IC0gMSkgLyBh
bGlnbm1lbnQpICogYWxpZ25tZW50OwotICAKLSAgLy8gY291bGQgdGhlb3JldGljYWxseSByZXR1
cm4gdGhlICJleHRyYSIgYnl0ZXMgaGVyZSwgYnV0IHRoaXMKLSAgLy8gaXMgc2ltcGxlIGFuZCBj
b3JyZWN0LgotICBpZiAoYWN0dWFsX3NpemUpIAotICAgICphY3R1YWxfc2l6ZSA9IHNpemU7Ci0g
ICAgCi0gIHZvaWQqIHJlc3VsdCA9IHNicmsoc2l6ZSk7Ci0gIGlmIChyZXN1bHQgPT0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oLTEpKSB7Ci0gICAgc2Jya19mYWlsdXJlID0gdHJ1ZTsKLSAgICBy
ZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8vIElzIGl0IGFsaWduZWQ/Ci0gIHVpbnRwdHJfdCBwdHIg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmVzdWx0KTsKLSAgaWYgKChwdHIgJiAoYWxp
Z25tZW50LTEpKSA9PSAwKSAgcmV0dXJuIHJlc3VsdDsKLQotICAvLyBUcnkgdG8gZ2V0IG1vcmUg
bWVtb3J5IGZvciBhbGlnbm1lbnQKLSAgc2l6ZV90IGV4dHJhID0gYWxpZ25tZW50IC0gKHB0ciAm
IChhbGlnbm1lbnQtMSkpOwotICB2b2lkKiByMiA9IHNicmsoZXh0cmEpOwotICBpZiAocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHIyKSA9PSAocHRyICsgc2l6ZSkpIHsKLSAgICAvLyBDb250
aWd1b3VzIHdpdGggcHJldmlvdXMgcmVzdWx0Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHB0ciArIGV4dHJhKTsKLSAgfQotCi0gIC8vIEdpdmUgdXAgYW5kIGFzayBmb3IgInNp
emUgKyBhbGlnbm1lbnQgLSAxIiBieXRlcyBzbwotICAvLyB0aGF0IHdlIGNhbiBmaW5kIGFuIGFs
aWduZWQgcmVnaW9uIHdpdGhpbiBpdC4KLSAgcmVzdWx0ID0gc2JyayhzaXplICsgYWxpZ25tZW50
IC0gMSk7Ci0gIGlmIChyZXN1bHQgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSB7Ci0g
ICAgc2Jya19mYWlsdXJlID0gdHJ1ZTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBwdHIgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmVzdWx0KTsKLSAgaWYgKChwdHIgJiAoYWxpZ25t
ZW50LTEpKSAhPSAwKSB7Ci0gICAgcHRyICs9IGFsaWdubWVudCAtIChwdHIgJiAoYWxpZ25tZW50
LTEpKTsKLSAgfQotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKTsKLX0KLQot
I2VuZGlmIC8qIGlmbmRlZihXVEZfQ0hBTkdFUykgKi8KLQogI2lmIEhBVkUoTU1BUCkKIAogc3Rh
dGljIHZvaWQqIFRyeU1tYXAoc2l6ZV90IHNpemUsIHNpemVfdCAqYWN0dWFsX3NpemUsIHNpemVf
dCBhbGlnbm1lbnQpIHsKQEAgLTI1MCw4NCArMTkzLDYgQEAgc3RhdGljIHZvaWQqIFRyeVZpcnR1
YWxBbGxvYyhzaXplX3Qgc2l6ZSwgc2l6ZV90ICphY3R1YWxfc2l6ZSwgc2l6ZV90IGFsaWdubWVu
dCkKIAogI2VuZGlmIC8qIEhBVkUoTU1BUCkgKi8KIAotI2lmbmRlZiBXVEZfQ0hBTkdFUwotc3Rh
dGljIHZvaWQqIFRyeURldk1lbShzaXplX3Qgc2l6ZSwgc2l6ZV90ICphY3R1YWxfc2l6ZSwgc2l6
ZV90IGFsaWdubWVudCkgewotICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICBz
dGF0aWMgb2ZmX3QgcGh5c21lbV9iYXNlOyAgLy8gbmV4dCBwaHlzaWNhbCBtZW1vcnkgYWRkcmVz
cyB0byBhbGxvY2F0ZQotICBzdGF0aWMgb2ZmX3QgcGh5c21lbV9saW1pdDsgLy8gbWF4aW11bSBw
aHlzaWNhbCBhZGRyZXNzIGFsbG93ZWQKLSAgc3RhdGljIGludCBwaHlzbWVtX2ZkOyAgICAgIC8v
IGZpbGUgZGVzY3JpcHRvciBmb3IgL2Rldi9tZW0KLSAgCi0gIC8vIENoZWNrIGlmIHdlIHNob3Vs
ZCB1c2UgL2Rldi9tZW0gYWxsb2NhdGlvbi4gIE5vdGUgdGhhdCBpdCBtYXkgdGFrZQotICAvLyBh
IHdoaWxlIHRvIGdldCB0aGlzIGZsYWcgaW5pdGlhbGl6ZWQsIHNvIG1lYW53aGlsZSB3ZSBmYWxs
IGJhY2sgdG8KLSAgLy8gdGhlIG5leHQgYWxsb2NhdG9yLiAgKEl0IGxvb2tzIGxpa2UgN01CIGdl
dHMgYWxsb2NhdGVkIGJlZm9yZQotICAvLyB0aGlzIGZsYWcgZ2V0cyBpbml0aWFsaXplZCAta2hy
LikKLSAgaWYgKEZMQUdTX21hbGxvY19kZXZtZW1fc3RhcnQgPT0gMCkgewotICAgIC8vIE5PVEU6
IG5vdCBhIGRldm1lbV9mYWlsdXJlIC0gd2UnZCBsaWtlIFRDTWFsbG9jX1N5c3RlbUFsbG9jIHRv
Ci0gICAgLy8gdHJ5IHVzIGFnYWluIG5leHQgdGltZS4KLSAgICByZXR1cm4gTlVMTDsKLSAgfQot
ICAKLSAgaWYgKCFpbml0aWFsaXplZCkgewotICAgIHBoeXNtZW1fZmQgPSBvcGVuKCIvZGV2L21l
bSIsIE9fUkRXUik7Ci0gICAgaWYgKHBoeXNtZW1fZmQgPCAwKSB7Ci0gICAgICBkZXZtZW1fZmFp
bHVyZSA9IHRydWU7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcGh5c21lbV9iYXNl
ID0gRkxBR1NfbWFsbG9jX2Rldm1lbV9zdGFydCoxMDI0TEwqMTAyNExMOwotICAgIHBoeXNtZW1f
bGltaXQgPSBGTEFHU19tYWxsb2NfZGV2bWVtX2xpbWl0KjEwMjRMTCoxMDI0TEw7Ci0gICAgaW5p
dGlhbGl6ZWQgPSB0cnVlOwotICB9Ci0gIAotICAvLyBFbmZvcmNlIHBhZ2UgYWxpZ25tZW50Ci0g
IGlmIChwYWdlc2l6ZSA9PSAwKSBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0gIGlmIChhbGln
bm1lbnQgPCBwYWdlc2l6ZSkgYWxpZ25tZW50ID0gcGFnZXNpemU7Ci0gIHNpemUgPSAoKHNpemUg
KyBhbGlnbm1lbnQgLSAxKSAvIGFsaWdubWVudCkgKiBhbGlnbm1lbnQ7Ci0gICAgCi0gIC8vIGNv
dWxkIHRoZW9yZXRpY2FsbHkgcmV0dXJuIHRoZSAiZXh0cmEiIGJ5dGVzIGhlcmUsIGJ1dCB0aGlz
Ci0gIC8vIGlzIHNpbXBsZSBhbmQgY29ycmVjdC4KLSAgaWYgKGFjdHVhbF9zaXplKQotICAgICph
Y3R1YWxfc2l6ZSA9IHNpemU7Ci0gICAgCi0gIC8vIEFzayBmb3IgZXh0cmEgbWVtb3J5IGlmIGFs
aWdubWVudCA+IHBhZ2VzaXplCi0gIHNpemVfdCBleHRyYSA9IDA7Ci0gIGlmIChhbGlnbm1lbnQg
PiBwYWdlc2l6ZSkgewotICAgIGV4dHJhID0gYWxpZ25tZW50IC0gcGFnZXNpemU7Ci0gIH0KLSAg
Ci0gIC8vIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGFueSBtZW1vcnkgbGVmdAotICBpZiAocGh5
c21lbV9saW1pdCAhPSAwICYmIHBoeXNtZW1fYmFzZSArIHNpemUgKyBleHRyYSA+IHBoeXNtZW1f
bGltaXQpIHsKLSAgICBkZXZtZW1fZmFpbHVyZSA9IHRydWU7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLSAgdm9pZCAqcmVzdWx0ID0gbW1hcCgwLCBzaXplICsgZXh0cmEsIFBST1RfUkVBRCB8IFBS
T1RfV1JJVEUsCi0gICAgICAgICAgICAgICAgICAgICAgTUFQX1NIQVJFRCwgcGh5c21lbV9mZCwg
cGh5c21lbV9iYXNlKTsKLSAgaWYgKHJlc3VsdCA9PSByZWludGVycHJldF9jYXN0PHZvaWQqPihN
QVBfRkFJTEVEKSkgewotICAgIGRldm1lbV9mYWlsdXJlID0gdHJ1ZTsKLSAgICByZXR1cm4gTlVM
TDsKLSAgfQotICB1aW50cHRyX3QgcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJl
c3VsdCk7Ci0gIAotICAvLyBBZGp1c3QgdGhlIHJldHVybiBtZW1vcnkgc28gaXQgaXMgYWxpZ25l
ZAotICBzaXplX3QgYWRqdXN0ID0gMDsKLSAgaWYgKChwdHIgJiAoYWxpZ25tZW50IC0gMSkpICE9
IDApIHsKLSAgICBhZGp1c3QgPSBhbGlnbm1lbnQgLSAocHRyICYgKGFsaWdubWVudCAtIDEpKTsK
LSAgfQotICAKLSAgLy8gUmV0dXJuIHRoZSB1bnVzZWQgdmlydHVhbCBtZW1vcnkgdG8gdGhlIHN5
c3RlbQotICBpZiAoYWRqdXN0ID4gMCkgewotICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PHZv
aWQqPihwdHIpLCBhZGp1c3QpOwotICB9Ci0gIGlmIChhZGp1c3QgPCBleHRyYSkgewotICAgIG11
bm1hcChyZWludGVycHJldF9jYXN0PHZvaWQqPihwdHIgKyBhZGp1c3QgKyBzaXplKSwgZXh0cmEg
LSBhZGp1c3QpOwotICB9Ci0gIAotICBwdHIgKz0gYWRqdXN0OwotICBwaHlzbWVtX2Jhc2UgKz0g
YWRqdXN0ICsgc2l6ZTsKLSAgCi0gIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihwdHIp
OwotfQotI2VuZGlmCi0KIHZvaWQqIFRDTWFsbG9jX1N5c3RlbUFsbG9jKHNpemVfdCBzaXplLCBz
aXplX3QgKmFjdHVhbF9zaXplLCBzaXplX3QgYWxpZ25tZW50KSB7CiAgIC8vIERpc2NhcmQgcmVx
dWVzdHMgdGhhdCBvdmVyZmxvdwogICBpZiAoc2l6ZSArIGFsaWdubWVudCA8IHNpemUpIHJldHVy
biBOVUxMOwpAQCAtMzQxLDE4ICsyMDYsNiBAQCB2b2lkKiBUQ01hbGxvY19TeXN0ZW1BbGxvYyhz
aXplX3Qgc2l6ZSwgc2l6ZV90ICphY3R1YWxfc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgewogICAv
LyBtb3JlIHRyeWluZyBhbGwgYWxsb2NhdG9ycyBldmVuIGlmIHRoZXkgZmFpbGVkIGJlZm9yZS4K
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKIAotI2lmbmRlZiBXVEZfQ0hBTkdFUwot
ICAgIGlmICh1c2VfZGV2bWVtICYmICFkZXZtZW1fZmFpbHVyZSkgewotICAgICAgdm9pZCogcmVz
dWx0ID0gVHJ5RGV2TWVtKHNpemUsIGFjdHVhbF9zaXplLCBhbGlnbm1lbnQpOwotICAgICAgaWYg
KHJlc3VsdCAhPSBOVUxMKSByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBpZiAodXNl
X3NicmsgJiYgIXNicmtfZmFpbHVyZSkgewotICAgICAgdm9pZCogcmVzdWx0ID0gVHJ5U2Jyayhz
aXplLCBhY3R1YWxfc2l6ZSwgYWxpZ25tZW50KTsKLSAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jZW5kaWYKLQogI2lmIEhBVkUoTU1BUCkgICAgCiAgICAg
aWYgKHVzZV9tbWFwICYmICFtbWFwX2ZhaWx1cmUpIHsKICAgICAgIHZvaWQqIHJlc3VsdCA9IFRy
eU1tYXAoc2l6ZSwgYWN0dWFsX3NpemUsIGFsaWdubWVudCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>