<?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>111707</bug_id>
          
          <creation_ts>2013-03-07 03:41:31 -0800</creation_ts>
          <short_desc>REGRESSION(r145059): webkit build break(Requested by tasak on #webkit).</short_desc>
          <delta_ts>2013-03-07 03:51:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          <blocked>109916</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="WebKit Review Bot">webkit.review.bot</assigned_to>
          <cc>koivisto</cc>
    
    <cc>tasak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>849936</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-07 03:41:31 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/145059 broke the build:
crash webkit build (Requested by tasak on #webkit).

This is an automatic bug report generated by the sheriff-bot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests case pain.

&quot;Only you can prevent forest fires.&quot; -- Smokey the Bear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849938</commentid>
    <comment_count>1</comment_count>
      <attachid>191963</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-07 03:42:02 -0800</bug_when>
    <thetext>Created attachment 191963
ROLLOUT of r145059

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849941</commentid>
    <comment_count>2</comment_count>
      <attachid>191963</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-07 03:51:38 -0800</bug_when>
    <thetext>Comment on attachment 191963
ROLLOUT of r145059

Clearing flags on attachment: 191963

Committed r145061: &lt;http://trac.webkit.org/changeset/145061&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849942</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-07 03:51:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191963</attachid>
            <date>2013-03-07 03:42:02 -0800</date>
            <delta_ts>2013-03-07 03:51:38 -0800</delta_ts>
            <desc>ROLLOUT of r145059</desc>
            <filename>bug-111707-20130307113806.patch</filename>
            <type>text/plain</type>
            <size>101528</size>
            <attacher name="WebKit Review Bot">webkit.review.bot</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MDU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2Q5YjQzYjMxZmJkOTM5
NDM1MzY3NjQxNzM2ZjQ3YTlkODE0MjE2Mi4uOWY5MWEwZmNhMmRmM2Y0ZTgwMjVmYjVjZWZhOTNm
ODY5ZjQzMzEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDEzLTAzLTA3ICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KKworICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMTQ1MDU5LgorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3Jn
L2NoYW5nZXNldC8xNDUwNTkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMTcwNworCisgICAgICAgIGNyYXNoIHdlYmtpdCBidWlsZCAoUmVxdWVzdGVk
IGJ5IHRhc2FrIG9uICN3ZWJraXQpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogY3NzL0NTU0FsbEluT25lLmNwcDoKKyAgICAgICAgKiBjc3MvRG9j
dW1lbnRSdWxlU2V0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dEaXN0cmlidXRlZFJ1
bGVzOjpjb2xsZWN0TWF0Y2hSZXF1ZXN0cyk6CisgICAgICAgICogY3NzL0RvY3VtZW50UnVsZVNl
dHMuaDoKKyAgICAgICAgKiBjc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oOiBSZW1vdmVkLgorICAgICAgICAq
IGNzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogY3NzL1BhZ2VS
dWxlQ29sbGVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bGVmdFRvUmlnaHREZWNsYXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVuc3VyZVJ1bGVMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjbGVhcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRNYXRjaGVkUHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKE1hdGNoaW5nVUFSdWxlc1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGNoaW5nVUFS
dWxlc1Njb3BlOjpNYXRjaGluZ1VBUnVsZXNTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXRj
aGluZ1VBUnVsZXNTY29wZTo6fk1hdGNoaW5nVUFSdWxlc1Njb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Y29tcGFyZVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnNvcnRNYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0
Y2hBbGxSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aW5p
dEZvclN0eWxlUmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHls
ZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpwc2V1ZG9TdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBzZXVk
b1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnJ1bGVNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVn
aW9uU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZVBhZ2VSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpjaGVja1BhZ2VTZWxlY3RvckNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6aXNGaXJzdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFn
ZU5hbWUpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpNYXRjaFJlcXVlc3Q6Ok1hdGNoUmVxdWVzdCk6CisgICAgICAgIChNYXRjaFJlcXVlc3QpOgor
ICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgIChNYXRjaFJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnRha2VSdWxlTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0U2FtZU9yaWdpbk9u
bHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmlzU2FtZU9yaWdp
bk9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnBzZXVkb1N0
eWxlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6bW9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6bWF0Y2hlZFJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjphZGRNYXRjaGVkUnVsZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNTU0FnZW50Ojp3aWxsTWF0Y2hSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW5z
cGVjdG9yQ1NTQWdlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGVJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGUpOgorCiAyMDEzLTAzLTA3ICBUYWthc2hp
IFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbUmVmYWN0b3JpbmddIElt
cGxlbWVudCBSdWxlQ29sbGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDBmMmZkY2E1ZDNk
OTcxYzJlZWQwY2IyN2NjMjEzYzdhNDljYzdkMDUuLmRlNThhMmE2MDI3NjJjZWUyNTVhODBmNTMw
ZDk3MzkwYmM5MmJiMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDcwLDcgKzEwNzAsNiBA
QCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL0NTU1ZhbHVlUG9vbC5jcHAKICAgICBjc3Mv
RE9NV2luZG93Q1NTLmNwcAogICAgIGNzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcAotICAgIGNzcy9F
bGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKICAgICBjc3MvRm9udEZlYXR1cmVWYWx1ZS5jcHAKICAg
ICBjc3MvRm9udFZhbHVlLmNwcAogICAgIGNzcy9JbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNwcApA
QCAtMTA4Myw3ICsxMDgyLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9NZWRpYVF1
ZXJ5TGlzdC5jcHAKICAgICBjc3MvTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKICAgICBjc3Mv
TWVkaWFRdWVyeU1hdGNoZXIuY3BwCi0gICAgY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAogICAg
IGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCiAgICAgY3NzL1JHQkNvbG9y
LmNwcAogICAgIGNzcy9SdWxlRmVhdHVyZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCA1NzJlOGM1NjAyNWZlNjM0MzM3NWJjOTdmNDc5ZDlhNWIyNDgzNDM3Li45ZjQ1NmZkZGRk
NjY4N2YxZGMyNjg3ZmNlMTk4ZDVmODExN2ExNDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTI2NjAsOCArMjY2MCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvY3NzL0Rhc2hib2FyZFJlZ2lvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvRG9j
dW1lbnRSdWxlU2V0cy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRz
LmggXAotCVNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAgXAotCVNv
dXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9jc3MvRm9udEZlYXR1cmVWYWx1ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmVh
dHVyZVZhbHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250VmFsdWUuY3BwIFwKQEAgLTI2
ODYsOCArMjY4NCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlNYXRjaGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmgg
XAotCVNvdXJjZS9XZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUGFp
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bi5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCmluZGV4IDYzMTJjMGU0ZmJkNDE5ZGVmOWM4MTkxZGJhMjQ4Yjk0YTll
OGMxZjAuLjFiNjU1ZmJlMDU0MGRiNDNmYTFiYTg1ZTI1ZWVlZGI1N2M2MDc2NzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtMzA1LDcgKzMwNSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIGNzcy9DU1NWYWx1ZVBv
b2wuY3BwIFwKICAgICBjc3MvRE9NV2luZG93Q1NTLmNwcCBcCiAgICAgY3NzL0RvY3VtZW50UnVs
ZVNldHMuY3BwIFwKLSAgICBjc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwIFwKICAgICBjc3Mv
Rm9udEZlYXR1cmVWYWx1ZS5jcHAgXAogICAgIGNzcy9Gb250VmFsdWUuY3BwIFwKICAgICBjc3Mv
SW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jcHAgXApAQCAtMzE4LDcgKzMxNyw2IEBAIFNPVVJDRVMg
Kz0gXAogICAgIGNzcy9NZWRpYVF1ZXJ5TGlzdC5jcHAgXAogICAgIGNzcy9NZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmNwcCBcCiAgICAgY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcCBcCi0gICAgY3Nz
L1BhZ2VSdWxlQ29sbGVjdG9yLmNwcCBcCiAgICAgY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbi5jcHAgXAogICAgIGNzcy9SR0JDb2xvci5jcHAgXAogICAgIGNzcy9SdWxlRmVhdHVy
ZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFlZmQ0OWYxOGM5ODMyYzhkODhkNmI4MjY4NjI4
ODM0NzhhNDkzMWMuLmZjYzFkYmUzYmQ0YTJjZmM2Y2MyZWI5ZTdhNzU1ZjM5NDE5OTVjM2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTE2NTEsOCArMTY1MSw2IEBACiAgICAgICAgICAgICAnY3NzL0Rh
c2hib2FyZFJlZ2lvbi5oJywKICAgICAgICAgICAgICdjc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAn
LAogICAgICAgICAgICAgJ2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmgnLAotICAgICAgICAgICAgJ2Nz
cy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAnLAotICAgICAgICAgICAgJ2Nzcy9FbGVtZW50UnVs
ZUNvbGxlY3Rvci5oJywKICAgICAgICAgICAgICdjc3MvRm9udEZlYXR1cmVWYWx1ZS5jcHAnLAog
ICAgICAgICAgICAgJ2Nzcy9Gb250RmVhdHVyZVZhbHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9G
b250VmFsdWUuY3BwJywKQEAgLTE2NzYsOCArMTY3NCw2IEBACiAgICAgICAgICAgICAnY3NzL01l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAnY3NzL01lZGlhUXVlcnlNYXRj
aGVyLmNwcCcsCiAgICAgICAgICAgICAnY3NzL01lZGlhUXVlcnlNYXRjaGVyLmgnLAotICAgICAg
ICAgICAgJ2Nzcy9QYWdlUnVsZUNvbGxlY3Rvci5jcHAnLAotICAgICAgICAgICAgJ2Nzcy9QYWdl
UnVsZUNvbGxlY3Rvci5oJywKICAgICAgICAgICAgICdjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbi5oJywKICAgICAgICAgICAgICdjc3MvUkdCQ29sb3IuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0Yjk2Y2E3
MzIyNTAxOWNhNDYyNzg0MGZjY2I2YzVjZDRmNzM1ODkzLi43Yzk5M2MyNmU5Njk2ZmEwN2E1NjRj
YjAxOWMyY2RmNThlNWE1N2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NTUwLDEwICs2NTUwLDYgQEAKIAkJRkJENkFGOEIx
NUVGMjVFNTAwOEI3MTEwIC8qIENTU0Jhc2ljU2hhcGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCRDZBRjg2MTVFRjIxRDQwMDhCNzExMCAvKiBD
U1NCYXNpY1NoYXBlcy5jcHAgKi87IH07CiAJCUZCRDZBRjhDMTVFRjI2MDQwMDhCNzExMCAvKiBC
YXNpY1NoYXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkJENkFGODMxNUVGMjFBMzAwOEI3MTEwIC8qIEJhc2ljU2hhcGVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkJENkFGOEQxNUVGMjYwQTAw
OEI3MTEwIC8qIEJhc2ljU2hhcGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZCRDZBRjgyMTVFRjIxQTMwMDhCNzExMCAvKiBCYXNpY1NoYXBlcy5j
cHAgKi87IH07Ci0JCUZCREI2MTlCMTZENjAzMkEwMEJCMzM5NCAvKiBFbGVtZW50UnVsZUNvbGxl
Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QkRCNjE5QTE2RDYwMzJBMDBCQjMzOTQgLyogRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwICovOyB9
OwotCQlGQkRCNjE5RDE2RDYwMzQ2MDBCQjMzOTQgLyogUGFnZVJ1bGVDb2xsZWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkJEQjYxOUMxNkQ2
MDM0NjAwQkIzMzk0IC8qIFBhZ2VSdWxlQ29sbGVjdG9yLmNwcCAqLzsgfTsKLQkJRkJEQjYxOUYx
NkQ2MDM2NTAwQkIzMzk0IC8qIEVsZW1lbnRSdWxlQ29sbGVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQkRCNjE5RTE2RDYwMzY1MDBCQjMzOTQg
LyogRWxlbWVudFJ1bGVDb2xsZWN0b3IuaCAqLzsgfTsKLQkJRkJEQjYxQTExNkQ2MDM3RTAwQkIz
Mzk0IC8qIFBhZ2VSdWxlQ29sbGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQkRCNjFBMDE2RDYwMzdFMDBCQjMzOTQgLyogUGFnZVJ1bGVDb2xs
ZWN0b3IuaCAqLzsgfTsKIAkJRkJGODkwNDUxNjlFOUYxRjAwNTJEODZFIC8qIENTU0dyb3VwaW5n
UnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QkY4OTA0NDE2OUU5RjFGMDA1MkQ4NkUgLyogQ1NTR3JvdXBpbmdSdWxlLmNwcCAqLzsgfTsKIAkJ
RkM1NEQwNTcxNkE3NjczMTAwNTc1RTREIC8qIENTU1N1cHBvcnRzUnVsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkM2M0JEQjExNjdBQUJBQzAwRjkz
ODBGIC8qIENTU1N1cHBvcnRzUnVsZS5oICovOyB9OwogCQlGQzU0RDA1ODE2QTc2NzZFMDA1NzVF
NEQgLyogSlNDU1NTdXBwb3J0c1J1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZDODQ4MDJFMTY3QUI0NDQwMDhDRDEwMCAvKiBKU0NTU1N1cHBvcnRz
UnVsZS5oICovOyB9OwpAQCAtMTQzMDQsMTAgKzE0MzAwLDYgQEAKIAkJRkJENkFGODUxNUVGMjFE
NDAwOEI3MTEwIC8qIEJhc2ljU2hhcGVGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQmFzaWNTaGFwZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGQkQ2QUY4NjE1RUYyMUQ0MDA4QjcxMTAgLyogQ1NTQmFzaWNTaGFwZXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQmFzaWNTaGFwZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQkQ2QUY4NzE1RUYyMUQ0MDA4QjcxMTAgLyog
Q1NTQmFzaWNTaGFwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQmFz
aWNTaGFwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkJEQjYxOUExNkQ2MDMy
QTAwQkIzMzk0IC8qIEVsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRkJEQjYxOUMxNkQ2MDM0NjAwQkIzMzk0IC8qIFBhZ2VSdWxlQ29s
bGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VSdWxl
Q29sbGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkJEQjYxOUUxNkQ2
MDM2NTAwQkIzMzk0IC8qIEVsZW1lbnRSdWxlQ29sbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRSdWxlQ29sbGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUZCREI2MUEwMTZENjAzN0UwMEJCMzM5NCAvKiBQYWdlUnVsZUNvbGxlY3Rv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlUnVsZUNvbGxlY3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQkY4OTA0NDE2OUU5RjFGMDA1MkQ4NkUg
LyogQ1NTR3JvdXBpbmdSdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU0dyb3VwaW5nUnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZD
NjNCREIwMTY3QUFCQUMwMEY5MzgwRiAvKiBDU1NTdXBwb3J0c1J1bGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTU3VwcG9ydHNSdWxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkM2M0JEQjExNjdBQUJBQzAwRjkzODBGIC8qIENTU1N1cHBv
cnRzUnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTdXBwb3J0c1J1
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMTM0LDggKzIyMTI2LDYgQEAK
IAkJCQlGQzlBMEY3MTE2NDA5NENGMDAzRDZCOEQgLyogRE9NV2luZG93Q1NTLmNwcCAqLywKIAkJ
CQlGQzlBMEY3MjE2NDA5NENGMDAzRDZCOEQgLyogRE9NV2luZG93Q1NTLmggKi8sCiAJCQkJRkM5
QTBGNzMxNjQwOTRDRjAwM0Q2QjhEIC8qIERPTVdpbmRvd0NTUy5pZGwgKi8sCi0JCQkJRkJEQjYx
OUUxNkQ2MDM2NTAwQkIzMzk0IC8qIEVsZW1lbnRSdWxlQ29sbGVjdG9yLmggKi8sCi0JCQkJRkJE
QjYxOUExNkQ2MDMyQTAwQkIzMzk0IC8qIEVsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcCAqLywKIAkJ
CQk0QTZFOUZDMjEzQzE3RDFEMDA0NkE3RjggLyogRm9udEZlYXR1cmVWYWx1ZS5oICovLAogCQkJ
CUE4MEU2Q0M3MEExOTg5Q0EwMDdGQjhDNSAvKiBGb250VmFsdWUuY3BwICovLAogCQkJCUE4MEU2
Q0MzMEExOTg5Q0EwMDdGQjhDNSAvKiBGb250VmFsdWUuaCAqLywKQEAgLTIyMTcxLDggKzIyMTYx
LDYgQEAKIAkJCQlEM0E5NEEzNTEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3RMaXN0
ZW5lci5pZGwgKi8sCiAJCQkJRDNBQTEwRjExMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlN
YXRjaGVyLmNwcCAqLywKIAkJCQlEM0FBMTBGMjEyM0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVy
eU1hdGNoZXIuaCAqLywKLQkJCQlGQkRCNjFBMDE2RDYwMzdFMDBCQjMzOTQgLyogUGFnZVJ1bGVD
b2xsZWN0b3IuaCAqLywKLQkJCQlGQkRCNjE5QzE2RDYwMzQ2MDBCQjMzOTQgLyogUGFnZVJ1bGVD
b2xsZWN0b3IuY3BwICovLAogCQkJCUE4MEU2Q0QxMEExOTg5Q0EwMDdGQjhDNSAvKiBQYWlyLmgg
Ki8sCiAJCQkJMzE4OUU2REIxNkIyMTAzNTAwMzg2RUEzIC8qIHBsdWdJbnMuY3NzICovLAogCQkJ
CUU0QkJFRDBDMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b24uY3BwICovLApAQCAtMjY3MDQsOCArMjY2OTIsNiBAQAogCQkJCTdFNjZFMjM0MTZENkVCNkMw
MEY3RTdGRiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3RUEzMEY2QTE2REZGRTc1MDAyNTdEMEIgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
LmggaW4gSGVhZGVycyAqLywKICAJCQkJMkQ4Mjg3RjcxNkU0QTAzODAwODZCRDAwIC8qIEhpdFRl
c3RMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkJEQjYxOUYxNkQ2MDM2NTAwQkIzMzk0
IC8qIEVsZW1lbnRSdWxlQ29sbGVjdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlGQkRCNjFBMTE2
RDYwMzdFMDBCQjMzOTQgLyogUGFnZVJ1bGVDb2xsZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
Mjk5MDksOCArMjk4OTUsNiBAQAogCQkJCTdFNjZFMjMzMTZENkVCNkMwMEY3RTdGRiAvKiBXZWJH
TENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFQTMwRjY5MTZE
RkZFNzUwMDI1N0QwQiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAgCQkJCTJEODI4N0Y2MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkJEQjYxOUIxNkQ2MDMyQTAwQkIzMzk0IC8qIEVsZW1l
bnRSdWxlQ29sbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZCREI2MTlEMTZENjAzNDYw
MEJCMzM5NCAvKiBQYWdlUnVsZUNvbGxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4IDc4ZTc1MjAyOTA4Yzc0OGFlMDkzYjdkN2E2YTg4ODU4
NDkwOThlNjAuLjkxM2VmZGM2OTljMTMwM2RmN2Q3M2Q5MzliMDk5ZmQxODhiMjBiNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcApAQCAtNzEsOSArNzEsNyBAQAogI2luY2x1ZGUgIkNT
U1ZhbHVlUG9vbC5jcHAiCiAjaW5jbHVkZSAiRE9NV2luZG93Q1NTLmNwcCIKICNpbmNsdWRlICJE
b2N1bWVudFJ1bGVTZXRzLmNwcCIKLSNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jcHAiCi0jaW5jbHVkZSAiUGFnZVJ1
bGVDb2xsZWN0b3IuY3BwIgogI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmNwcCIKICNpbmNsdWRlICJS
dWxlU2V0LmNwcCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5jcHAiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAKaW5kZXggMGZmODFiMTdhYjAyNGMzY2Vi
ODljOTIwZDQ5NzdlMjcyOGY2OGI5My4uYTg1YzFhNzU0MTlmNjcxNTgzZGM0NmE0Yjc3NzYyM2Jj
OTdlMzQzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcApAQCAtNTMs
NyArNTMsNyBAQCB2b2lkIFNoYWRvd0Rpc3RyaWJ1dGVkUnVsZXM6OmFkZFJ1bGUoU3R5bGVSdWxl
KiBydWxlLCBzaXplX3Qgc2VsZWN0b3JJbmRleCwgQ29udAogdm9pZCBTaGFkb3dEaXN0cmlidXRl
ZFJ1bGVzOjpjb2xsZWN0TWF0Y2hSZXF1ZXN0cyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBWZWN0
b3I8TWF0Y2hSZXF1ZXN0PiYgbWF0Y2hSZXF1ZXN0cykKIHsKICAgICBmb3IgKFNoYWRvd0Rpc3Ry
aWJ1dGVkUnVsZVNldE1hcDo6aXRlcmF0b3IgaXQgPSBtX3NoYWRvd0Rpc3RyaWJ1dGVkUnVsZVNl
dE1hcC5iZWdpbigpOyBpdCAhPSBtX3NoYWRvd0Rpc3RyaWJ1dGVkUnVsZVNldE1hcC5lbmQoKTsg
KytpdCkKLSAgICAgICAgbWF0Y2hSZXF1ZXN0cy5hcHBlbmQoTWF0Y2hSZXF1ZXN0KGl0LT52YWx1
ZS5nZXQoKSwgaW5jbHVkZUVtcHR5UnVsZXMsIGl0LT5rZXkpKTsKKyAgICAgICAgbWF0Y2hSZXF1
ZXN0cy5hcHBlbmQoTWF0Y2hSZXF1ZXN0KGl0LT52YWx1ZS5nZXQoKSwgaW5jbHVkZUVtcHR5UnVs
ZXMsIGl0LT5rZXksIFNlbGVjdG9yQ2hlY2tlcjo6Q3Jvc3Nlc0JvdW5kYXJ5KSk7CiB9CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmgKaW5kZXggOGM0YmRiODgwMTlm
YjcxYTU4N2Y2Zjc0OGZjZTQwOTAzODk2NmY3OC4uMTNjNGVlNTg2ZWE5Yjg2ZjFjYTQ5ZTU1N2Nl
YmQzYzkxOTU5OTc5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVs
ZVNldHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5oCkBAIC00
Nyw3ICs0Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgc2l6ZV90
IHNlbGVjdG9ySW5kZXgsIENvbnRhaW5lck5vZGUqIHNjb3BlLCBBZGRSdWxlRmxhZ3MpOwogICAg
IHZvaWQgY29sbGVjdE1hdGNoUmVxdWVzdHMoYm9vbCBpbmNsdWRlRW1wdHlSdWxlcywgVmVjdG9y
PE1hdGNoUmVxdWVzdD4mKTsKICAgICB2b2lkIGNsZWFyKCkgeyBtX3NoYWRvd0Rpc3RyaWJ1dGVk
UnVsZVNldE1hcC5jbGVhcigpOyB9Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9zaGFkb3dEaXN0cmlidXRlZFJ1bGVTZXRNYXAuaXNFbXB0eSgpOyB9CiBwcml2YXRlOgogICAg
IHR5cGVkZWYgSGFzaE1hcDxjb25zdCBDb250YWluZXJOb2RlKiwgT3duUHRyPFJ1bGVTZXQ+ID4g
U2hhZG93RGlzdHJpYnV0ZWRSdWxlU2V0TWFwOwogICAgIFNoYWRvd0Rpc3RyaWJ1dGVkUnVsZVNl
dE1hcCBtX3NoYWRvd0Rpc3RyaWJ1dGVkUnVsZVNldE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
RWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
Nzc2MDBmYmE3NTY1N2E0N2Y1NTg4ZmM1OGJhMDQ3NGYwYmQ1MWU4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50
UnVsZUNvbGxlY3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MDggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29t
KQotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5p
Y2tzaGFua3MuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKLSAqIENvcHly
aWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29s
bGVjdG9yLmgiCi0KLSNpbmNsdWRlICJDU1NEZWZhdWx0U3R5bGVTaGVldHMuaCIKLSNpbmNsdWRl
ICJDU1NSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKLSNpbmNsdWRlICJDU1NTZWxl
Y3Rvci5oIgotI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgotI2luY2x1ZGUgIkNTU1ZhbHVl
S2V5d29yZHMuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclJl
Z2lvbi5oIgotI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTZWxlY3RvckNoZWNr
ZXJGYXN0UGF0aC5oIgotI2luY2x1ZGUgIlNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmgiCi0j
aW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgotI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIK
LQotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpCi17
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4sIGxlZnRU
b1JpZ2h0RGVjbCwgKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpKSk7Ci0gICAgaWYgKGxlZnRU
b1JpZ2h0RGVjbC0+aXNFbXB0eSgpKQotICAgICAgICBsZWZ0VG9SaWdodERlY2wtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZUx0cik7Ci0gICAgcmV0dXJuIGxlZnRU
b1JpZ2h0RGVjbC5nZXQoKTsKLX0KLQotc3RhdGljIFN0eWxlUHJvcGVydHlTZXQqIHJpZ2h0VG9M
ZWZ0RGVjbGFyYXRpb24oKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPFN0eWxl
UHJvcGVydHlTZXQ+LCByaWdodFRvTGVmdERlY2wsIChTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUo
KSkpOwotICAgIGlmIChyaWdodFRvTGVmdERlY2wtPmlzRW1wdHkoKSkKLSAgICAgICAgcmlnaHRU
b0xlZnREZWNsLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVSdGwp
OwotICAgIHJldHVybiByaWdodFRvTGVmdERlY2wuZ2V0KCk7Ci19Ci0KLVN0eWxlUmVzb2x2ZXI6
Ok1hdGNoUmVzdWx0JiBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hlZFJlc3VsdCgpCi17Ci0g
ICAgQVNTRVJUKG1fbW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKLSAg
ICByZXR1cm4gbV9yZXN1bHQ7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IEVsZW1lbnRS
dWxlQ29sbGVjdG9yOjptYXRjaGVkUnVsZUxpc3QoKQotewotICAgIEFTU0VSVChtX21vZGUgPT0g
U2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpOwotICAgIHJldHVybiBtX3J1bGVMaXN0
LnJlbGVhc2UoKTsKLX0KLQotaW5saW5lIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmFkZE1h
dGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKQotewotICAgIGlmICghbV9tYXRjaGVkUnVs
ZXMpCi0gICAgICAgIG1fbWF0Y2hlZFJ1bGVzID0gYWRvcHRQdHIobmV3IFZlY3Rvcjxjb25zdCBS
dWxlRGF0YSosIDMyPik7Ci0gICAgbV9tYXRjaGVkUnVsZXMtPmFwcGVuZChydWxlKTsKLX0KLQot
aW5saW5lIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNsZWFyTWF0Y2hlZFJ1bGVzKCkKLXsK
LSAgICBpZiAoIW1fbWF0Y2hlZFJ1bGVzKQotICAgICAgICByZXR1cm47Ci0gICAgbV9tYXRjaGVk
UnVsZXMtPmNsZWFyKCk7Ci19Ci0KLWlubGluZSBTdGF0aWNDU1NSdWxlTGlzdCogRWxlbWVudFJ1
bGVDb2xsZWN0b3I6OmVuc3VyZVJ1bGVMaXN0KCkKLXsKLSAgICBpZiAoIW1fcnVsZUxpc3QpCi0g
ICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgcmV0
dXJuIG1fcnVsZUxpc3QuZ2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIEVsZW1lbnRSdWxlQ29sbGVj
dG9yOjphZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHBy
b3BlcnR5U2V0LCBib29sIGlzQ2FjaGVhYmxlKQotewotICAgIGlmICghcHJvcGVydHlTZXQpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX3Jlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSBtX3Jl
c3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7Ci0gICAgaWYgKG1fcmVzdWx0LnJhbmdlcy5m
aXJzdEF1dGhvclJ1bGUgPT0gLTEpCi0gICAgICAgIG1fcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhv
clJ1bGUgPSBtX3Jlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGU7Ci0gICAgbV9yZXN1bHQuYWRk
TWF0Y2hlZFByb3BlcnRpZXMocHJvcGVydHlTZXQpOwotICAgIGlmICghaXNDYWNoZWFibGUpCi0g
ICAgICAgIG1fcmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7Ci19Ci0KLXZvaWQgRWxlbWVudFJ1
bGVDb2xsZWN0b3I6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0
Y2hSZXF1ZXN0LCBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKLXsKLSAgICBB
U1NFUlQobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQpOwotICAgIEFTU0VSVChtX3N0YXRlLmVsZW1lbnQo
KSk7Ci0KLSAgICBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwot
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCk7Ci0gICAgY29uc3QgU3R5bGVk
RWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKTsKLSAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKLSAg
ICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkgewotICAgICAgICBBU1NFUlQoc3R5bGVkRWxlbWVu
dCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVs
ZVNldC0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSksIG1hdGNoUmVx
dWVzdCwgcnVsZVJhbmdlKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAg
aWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVkb1J1bGVzKCksIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKLSNlbmRpZgotICAgIC8vIENoZWNrIHdoZXRoZXIgb3RoZXIg
dHlwZXMgb2YgcnVsZXMgYXJlIGFwcGxpY2FibGUgaW4gdGhlIGN1cnJlbnQgdHJlZSBzY29wZS4g
Q3JpdGVyaWEgZm9yIHRoaXM6Ci0gICAgLy8gYSkgaXQncyBhIFVBIHJ1bGUKLSAgICAvLyBiKSB0
aGUgdHJlZSBzY29wZSBhbGxvd3MgYXV0aG9yIHJ1bGVzCi0gICAgLy8gYykgdGhlIHJ1bGVzIGNv
bWVzIGZyb20gYSBzY29wZWQgc3R5bGUgc2hlZXQgd2l0aGluIHRoZSBzYW1lIHRyZWUgc2NvcGUK
LSAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IGVsZW1lbnQtPnRyZWVTY29wZSgpOwotICAgIGlm
ICghbV9tYXRjaGluZ1VBUnVsZXMKLSAgICAgICAgJiYgIXRyZWVTY29wZS0+YXBwbHlBdXRob3JT
dHlsZXMoKQotICAgICAgICAmJiAoIW1hdGNoUmVxdWVzdC5zY29wZSB8fCBtYXRjaFJlcXVlc3Qu
c2NvcGUtPnRyZWVTY29wZSgpICE9IHRyZWVTY29wZSkKLSAgICAgICAgJiYgbV9iZWhhdmlvckF0
Qm91bmRhcnkgPT0gU2VsZWN0b3JDaGVja2VyOjpEb2VzTm90Q3Jvc3NCb3VuZGFyeSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQs
IGNsYXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKLSAgICAv
LyB0aGVuIHNvcnQgdGhlIGJ1ZmZlci4KLSAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSkKLSAgICAg
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5pZFJ1
bGVzKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0
LCBydWxlUmFuZ2UpOwotICAgIGlmIChzdHlsZWRFbGVtZW50ICYmIHN0eWxlZEVsZW1lbnQtPmhh
c0NsYXNzKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHlsZWRFbGVtZW50
LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmNsYXNzUnVsZXMoc3R5bGVkRWxlbWVu
dC0+Y2xhc3NOYW1lcygpW2ldLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAg
ICB9Ci0KLSAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+bGlua1BzZXVkb0NsYXNzUnVsZXMo
KSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGlmIChTZWxlY3RvckNoZWNrZXI6Om1h
dGNoZXNGb2N1c1BzZXVkb0NsYXNzKGVsZW1lbnQpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygp
LCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JM
aXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT50YWdSdWxlcyhlbGVtZW50LT5sb2NhbE5hbWUoKS5p
bXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVs
ZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT51bml2ZXJzYWxSdWxlcygpLCBtYXRjaFJl
cXVlc3QsIHJ1bGVSYW5nZSk7Ci19Ci0KLXZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0
LCBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKLXsKLSAgICBpZiAoIW1fcmVn
aW9uRm9yU3R5bGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1h
dGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3Jl
Z2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yOwotICAgICAgICBpZiAoY2hl
Y2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1f
cmVnaW9uRm9yU3R5bGluZy0+bm9kZSgpKSkpIHsKLSAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lv
blJ1bGVzID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNl
dHMuYXQoaSkucnVsZVNldC5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChyZWdpb25SdWxlcyk7
Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocmVnaW9uUnVs
ZXMsIG1hdGNoUmVxdWVzdC5pbmNsdWRlRW1wdHlSdWxlcywgbWF0Y2hSZXF1ZXN0LnNjb3BlKSwg
cnVsZVJhbmdlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBFbGVtZW50UnVsZUNvbGxl
Y3Rvcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKCkKLXsKLSAgICBjb25zdCBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotCi0gICAgaWYgKCFtX21hdGNoZWRSdWxl
cyB8fCBtX21hdGNoZWRSdWxlcy0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBz
b3J0TWF0Y2hlZFJ1bGVzKCk7Ci0KLSAgICBWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4mIG1h
dGNoZWRSdWxlcyA9ICptX21hdGNoZWRSdWxlczsKLSAgICBpZiAobV9tb2RlID09IFNlbGVjdG9y
Q2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtYXRjaGVkUnVsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBlbnN1cmVSdWxlTGlz
dCgpLT5ydWxlcygpLmFwcGVuZChtYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+Y3JlYXRlQ1NTT01X
cmFwcGVyKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gTm93IHRyYW5zZmVy
IHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xhcmF0aW9u
cy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsr
KSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpICYmIG1hdGNoZWRSdWxlc1tpXS0+Y29udGFp
bnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRVbmlxdWUoKTsKLSAgICAgICAgbV9yZXN1bHQuYWRkTWF0Y2hlZFByb3BlcnRpZXMobWF0
Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgbWF0Y2hlZFJ1bGVzW2ldLT5ydWxl
KCksIG1hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgpLCBtYXRjaGVkUnVsZXNbaV0tPnBy
b3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgRWxlbWVudFJ1bGVDb2xs
ZWN0b3I6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKLXsK
LSNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKLSAgICBpZiAo
IW1fc2NvcGVSZXNvbHZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWF0Y2ggc2NvcGVk
IGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVi
dWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KLSAgICBpZiAobV9zY29wZVJlc29sdmVy
LT5oYXNTY29wZWRTdHlsZXMoKSAmJiBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVN0YWNrQ29uc2lz
dGVuY3kobV9zdGF0ZS5lbGVtZW50KCkpKSB7Ci0gICAgICAgIGJvb2wgYXBwbHlBdXRob3JTdHls
ZXMgPSBtX3N0YXRlLmVsZW1lbnQoKS0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7
Ci0gICAgICAgIGJvb2wgZG9jdW1lbnRTY29wZSA9IHRydWU7Ci0gICAgICAgIHVuc2lnbmVkIHNj
b3BlU2l6ZSA9IG1fc2NvcGVSZXNvbHZlci0+c3RhY2tTaXplKCk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzY29wZVNpemU7ICsraSkgewotICAgICAgICAgICAgY2xlYXJNYXRj
aGVkUnVsZXMoKTsKLSAgICAgICAgICAgIG1fcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9
IG1fcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7Ci0KLSAgICAgICAgICAgIGNv
bnN0IFN0eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2
ZXItPnN0YWNrRnJhbWVBdChpKTsKLSAgICAgICAgICAgIGRvY3VtZW50U2NvcGUgPSBkb2N1bWVu
dFNjb3BlICYmICFmcmFtZS5tX3Njb3BlLT5pc0luU2hhZG93VHJlZSgpOwotICAgICAgICAgICAg
aWYgKGRvY3VtZW50U2NvcGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWFwcGx5QXV0aG9yU3R5
bGVzKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXItPm1hdGNoZXNTdHlsZUJvdW5k
cyhmcmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KGZyYW1lLm1fcnVsZVNldCwg
aW5jbHVkZUVtcHR5UnVsZXMsIGZyYW1lLm1fc2NvcGUpOwotICAgICAgICAgICAgU3R5bGVSZXNv
bHZlcjo6UnVsZVJhbmdlIHJ1bGVSYW5nZSA9IG1fcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFu
Z2UoKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVs
ZVJhbmdlKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICAgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbWF0Y2hIb3N0UnVsZXMoaW5jbHVkZUVt
cHR5UnVsZXMpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOwot
I2VuZGlmCi19Ci0KLXZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoSG9zdFJ1bGVzKGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpCi17Ci0jaWYgRU5BQkxFKFNIQURPV19ET00pCi0gICAgQVNT
RVJUKG1fc2NvcGVSZXNvbHZlcik7Ci0KLSAgICBjbGVhck1hdGNoZWRSdWxlcygpOwotICAgIG1f
cmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IG1fcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
LnNpemUoKSAtIDE7Ci0KLSAgICBWZWN0b3I8UnVsZVNldCo+IG1hdGNoZWRSdWxlczsKLSAgICBt
X3Njb3BlUmVzb2x2ZXItPm1hdGNoSG9zdFJ1bGVzKG1fc3RhdGUuZWxlbWVudCgpLCBtYXRjaGVk
UnVsZXMpOwotICAgIGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1p
KSB7Ci0gICAgICAgIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSBydWxlUmFuZ2UgPSBtX3Jlc3Vs
dC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7Ci0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
KE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1f
c3RhdGUuZWxlbWVudCgpKSwgcnVsZVJhbmdlKTsKLSAgICB9Ci0gICAgc29ydEFuZFRyYW5zZmVy
TWF0Y2hlZFJ1bGVzKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxl
cyk7Ci0jZW5kaWYKLX0KLQotI2lmIEVOQUJMRShTSEFET1dfRE9NKQotaW5saW5lIHZvaWQgRWxl
bWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoU2hhZG93RGlzdHJpYnV0ZWRSdWxlcyhib29sIGluY2x1
ZGVFbXB0eVJ1bGVzLCBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmIHJ1bGVSYW5nZSkKLXsKLSAg
ICBpZiAobV9ydWxlU2V0cy5zaGFkb3dEaXN0cmlidXRlZFJ1bGVzKCkuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2FuVXNlRmFzdFJlamVj
dChtX2NhblVzZUZhc3RSZWplY3QsIGZhbHNlKTsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8U2VsZWN0
b3JDaGVja2VyOjpCZWhhdmlvckF0Qm91bmRhcnk+IGJlaGF2aW9yQXRCb3VuZGFyeShtX2JlaGF2
aW9yQXRCb3VuZGFyeSwgU2VsZWN0b3JDaGVja2VyOjpDcm9zc2VzQm91bmRhcnkpOwotCi0gICAg
VmVjdG9yPE1hdGNoUmVxdWVzdD4gbWF0Y2hSZXF1ZXN0czsKLSAgICBtX3J1bGVTZXRzLnNoYWRv
d0Rpc3RyaWJ1dGVkUnVsZXMoKS5jb2xsZWN0TWF0Y2hSZXF1ZXN0cyhpbmNsdWRlRW1wdHlSdWxl
cywgbWF0Y2hSZXF1ZXN0cyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaFJlcXVl
c3RzLnNpemUoKTsgKytpKQotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVl
c3RzW2ldLCBydWxlUmFuZ2UpOwotfQotI2VuZGlmCi0KLXZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0
b3I6Om1hdGNoQXV0aG9yUnVsZXMoYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKLXsKLSAgICBjbGVh
ck1hdGNoZWRSdWxlcygpOwotICAgIG1fcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IG1f
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7Ci0KLSAgICBpZiAoIW1fc3RhdGUu
ZWxlbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXRjaCBnbG9iYWwgYXV0aG9y
IHJ1bGVzLgotICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9ydWxlU2V0cy5hdXRob3JT
dHlsZSgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdl
IHJ1bGVSYW5nZSA9IG1fcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotI2lmIEVOQUJM
RShTSEFET1dfRE9NKQotICAgIG1hdGNoU2hhZG93RGlzdHJpYnV0ZWRSdWxlcyhpbmNsdWRlRW1w
dHlSdWxlcywgcnVsZVJhbmdlKTsKLSNlbmRpZgotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcygpOwotCi0gICAgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhpbmNsdWRlRW1wdHlSdWxlcyk7
Ci19Ci0KLXZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6Om1hdGNoVXNlclJ1bGVzKGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpCi17Ci0gICAgaWYgKCFtX3J1bGVTZXRzLnVzZXJTdHlsZSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgY2xlYXJNYXRjaGVkUnVsZXMoKTsKLQotICAgIG1fcmVz
dWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUgPSBtX3Jlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxOwotICAgIE1hdGNoUmVxdWVzdCBtYXRjaFJlcXVlc3QobV9ydWxlU2V0cy51c2VyU3R5
bGUoKSwgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSBy
dWxlUmFuZ2UgPSBtX3Jlc3VsdC5yYW5nZXMudXNlclJ1bGVSYW5nZSgpOwotICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0ZvclJlZ2lvbihtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0KLSAgICBzb3J0QW5k
VHJhbnNmZXJNYXRjaGVkUnVsZXMoKTsKLX0KLQotdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6
bWF0Y2hVQVJ1bGVzKCkKLXsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gc2NvcGUobV9tYXRj
aGluZ1VBUnVsZXMsIHRydWUpOwotCi0gICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0
aGUgdXNlciBhZ2VudCBzaGVldC4KLSAgICBpZiAoQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpzaW1w
bGVEZWZhdWx0U3R5bGVTaGVldCkKLSAgICAgICAgbV9yZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxz
ZTsKLSAgICBSdWxlU2V0KiB1c2VyQWdlbnRTdHlsZVNoZWV0ID0gbV9pc1ByaW50U3R5bGUKLSAg
ICAgICAgPyBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRQcmludFN0eWxlIDogQ1NTRGVm
YXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0U3R5bGU7Ci0gICAgbWF0Y2hVQVJ1bGVzKHVzZXJBZ2Vu
dFN0eWxlU2hlZXQpOwotCi0gICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZy
b20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgotICAgIGlmIChkb2N1bWVudCgpLT5pblF1
aXJrc01vZGUoKSkKLSAgICAgICAgbWF0Y2hVQVJ1bGVzKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6
ZGVmYXVsdFF1aXJrc1N0eWxlKTsKLQotICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBzb3Vy
Y2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSksIHRo
ZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCi0gICAg
aWYgKGRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKQotICAgICAgICBtYXRjaFVBUnVsZXMoQ1NT
RGVmYXVsdFN0eWxlU2hlZXRzOjp2aWV3U291cmNlU3R5bGUoKSk7Ci19Ci0KLXZvaWQgRWxlbWVu
dFJ1bGVDb2xsZWN0b3I6Om1hdGNoVUFSdWxlcyhSdWxlU2V0KiBydWxlcykKLXsKLSAgICBjbGVh
ck1hdGNoZWRSdWxlcygpOwotICAgIAotICAgIG1fcmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlID0g
bV9yZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKLSAgICBTdHlsZVJlc29sdmVy
OjpSdWxlUmFuZ2UgcnVsZVJhbmdlID0gbV9yZXN1bHQucmFuZ2VzLlVBUnVsZVJhbmdlKCk7Ci0g
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVzKSwgcnVsZVJhbmdlKTsK
LQotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcygpOwotfQotCi1pbmxpbmUgYm9vbCBF
bGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRh
LCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pCi17
Ci0gICAgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLQotICAg
IGlmIChydWxlRGF0YS5oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSkgewotICAgICAgICAvLyBX
ZSBrbm93IHRoaXMgc2VsZWN0b3IgZG9lcyBub3QgaW5jbHVkZSBhbnkgcHNldWRvIGVsZW1lbnRz
LgotICAgICAgICBpZiAobV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQgIT0gTk9QU0VVRE8p
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIFdlIGtub3cgYSBzdWZmaWNp
ZW50bHkgc2ltcGxlIHNpbmdsZSBwYXJ0IHNlbGVjdG9yIG1hdGNoZXMgc2ltcGx5IGJlY2F1c2Ug
d2UgZm91bmQgaXQgZnJvbSB0aGUgcnVsZSBoYXNoLgotICAgICAgICAvLyBUaGlzIGlzIGxpbWl0
ZWQgdG8gSFRNTCBvbmx5IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIG5hbWVzcGFjZS4K
LSAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFz
ZWRPblJ1bGVIYXNoKCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgIGlmICghcnVsZURhdGEuaGFzTXVsdGlwYXJ0U2VsZWN0b3IoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVsZURhdGEuc2Vs
ZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnICYmICFTZWxlY3RvckNoZWNrZXI6
OnRhZ01hdGNoZXMoc3RhdGUuZWxlbWVudCgpLCBydWxlRGF0YS5zZWxlY3RvcigpLT50YWdRTmFt
ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgU2VsZWN0b3JDaGVja2Vy
RmFzdFBhdGggc2VsZWN0b3JDaGVja2VyRmFzdFBhdGgocnVsZURhdGEuc2VsZWN0b3IoKSwgc3Rh
dGUuZWxlbWVudCgpKTsKLSAgICAgICAgaWYgKCFzZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5tYXRj
aGVzUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICByZXR1cm4gc2VsZWN0b3JDaGVja2VyRmFzdFBhdGgubWF0Y2hlcygpOwot
ICAgIH0KLQotICAgIC8vIFNsb3cgcGF0aC4KLSAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JD
aGVja2VyKGRvY3VtZW50KCksIG1fbW9kZSk7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCBjb250ZXh0KHJ1bGVEYXRhLnNlbGVjdG9yKCksIHN0YXRlLmVsZW1l
bnQoKSwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hFbmFibGVkKTsKLSAgICBjb250ZXh0
LmVsZW1lbnRTdHlsZSA9IHN0YXRlLnN0eWxlKCk7Ci0gICAgY29udGV4dC5zY29wZSA9IHNjb3Bl
OwotICAgIGNvbnRleHQucHNldWRvSWQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZDsK
LSAgICBjb250ZXh0LnNjcm9sbGJhciA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9sbGJhcjsK
LSAgICBjb250ZXh0LnNjcm9sbGJhclBhcnQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5zY3JvbGxi
YXJQYXJ0OwotICAgIGNvbnRleHQuYmVoYXZpb3JBdEJvdW5kYXJ5ID0gbV9iZWhhdmlvckF0Qm91
bmRhcnk7Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaCBtYXRjaCA9IHNlbGVjdG9yQ2hlY2tl
ci5tYXRjaChjb250ZXh0LCBkeW5hbWljUHNldWRvLCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRl
Z3koKSk7Ci0gICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVz
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcHNldWRvU3R5bGVSZXF1ZXN0LnBz
ZXVkb0lkICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkICE9IGR5
bmFtaWNQc2V1ZG8pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNo
UmVxdWVzdCwgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdlJiBydWxlUmFuZ2UpCi17Ci0gICAgaWYg
KCFydWxlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlID0gbV9zdGF0ZTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy0+c2l6ZSgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgY29u
c3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVsZXMtPmF0KGkpOwotICAgICAgICBpZiAobV9jYW5V
c2VGYXN0UmVqZWN0ICYmIG1fc2VsZWN0b3JGaWx0ZXIuZmFzdFJlamVjdFNlbGVjdG9yPFJ1bGVE
YXRhOjptYXhpbXVtSWRlbnRpZmllckNvdW50PihydWxlRGF0YS5kZXNjZW5kYW50U2VsZWN0b3JJ
ZGVudGlmaWVySGFzaGVzKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgU3R5
bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwotICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0
Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUsIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVycywgZG9jdW1l
bnQoKS0+c3R5bGVTaGVldENvbGxlY3Rpb24oKSk7Ci0gICAgICAgIFBzZXVkb0lkIGR5bmFtaWNQ
c2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAgaWYgKHJ1bGVNYXRjaGVzKHJ1bGVEYXRhLCBtYXRj
aFJlcXVlc3Quc2NvcGUsIGR5bmFtaWNQc2V1ZG8pKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUg
cnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5v
bi1kZWJ1ZyBtb2RlLgotICAgICAgICAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVy
dGllcyA9IHJ1bGUtPnByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIGlmICghcHJvcGVydGllcyB8
fCAocHJvcGVydGllcy0+aXNFbXB0eSgpICYmICFtYXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVs
ZXMpKSB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRj
aFJ1bGUoY29va2llLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAvLyBGSVhNRTogRXhwb3NpbmcgdGhlIG5vbi1zdGFuZGFyZCBn
ZXRNYXRjaGVkQ1NTUnVsZXMgQVBJIHRvIHdlYiBpcyB0aGUgb25seSByZWFzb24gdGhpcyBpcyBu
ZWVkZWQuCi0gICAgICAgICAgICBpZiAobV9zYW1lT3JpZ2luT25seSAmJiAhcnVsZURhdGEuaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYXRj
aGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVkbyBiaXQgaWYKLSAgICAgICAgICAgIC8vIHdl
IHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVudC4KLSAgICAgICAgICAgIGlmIChk
eW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lk
ID09IE5PUFNFVURPKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBTZWxlY3RvckNo
ZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewotICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChkeW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQpCi0gICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc1BzZXVkb1N0eWxlKGR5bmFtaWNQc2V1ZG8pOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBVcGRhdGUgb3VyIGZpcnN0
L2xhc3QgcnVsZSBpbmRpY2VzIGluIHRoZSBtYXRjaGVkIHJ1bGVzIGFycmF5LgotICAgICAgICAg
ICAgICAgICsrcnVsZVJhbmdlLmxhc3RSdWxlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHJ1
bGVSYW5nZS5maXJzdFJ1bGVJbmRleCA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgcnVsZVJh
bmdlLmZpcnN0UnVsZUluZGV4ID0gcnVsZVJhbmdlLmxhc3RSdWxlSW5kZXg7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCi0g
ICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFJ1bGUoJnJ1bGVEYXRhKTsKLSAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIHRydWUpOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hSdWxlKGNvb2tpZSwgZmFsc2Up
OwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxl
RGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKLXsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0
eTEgPSByMS0+c3BlY2lmaWNpdHkoKTsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTIgPSByMi0+
c3BlY2lmaWNpdHkoKTsKLSAgICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIp
ID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNp
ZmljaXR5MjsKLX0KLQotdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6c29ydE1hdGNoZWRSdWxl
cygpCi17Ci0gICAgQVNTRVJUKG1fbWF0Y2hlZFJ1bGVzKTsKLSAgICBzdGQ6OnNvcnQobV9tYXRj
aGVkUnVsZXMtPmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLT5lbmQoKSwgY29tcGFyZVJ1bGVzKTsK
LX0KLQotdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6bWF0Y2hBbGxSdWxlcyhib29sIG1hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcywgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpCi17Ci0gICAg
bWF0Y2hVQVJ1bGVzKCk7Ci0KLSAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4K
LSAgICBpZiAobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICBtYXRjaFVzZXJSdWxl
cyhmYWxzZSk7Ci0KLSAgICAvLyBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmly
c3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzIG1hcHBlZCBmcm9tIEhUTUwuCi0gICAg
aWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpKSB7Ci0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMobV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKCkpOwotCi0gICAgICAgIC8vIE5vdyB3ZSBjaGVjayBhZGRpdGlvbmFsIG1hcHBlZCBkZWNs
YXJhdGlvbnMuCi0gICAgICAgIC8vIFRhYmxlcyBhbmQgdGFibGUgY2VsbHMgc2hhcmUgYW4gYWRk
aXRpb25hbCBtYXBwZWQgcnVsZSB0aGF0IG11c3QgYmUgYXBwbGllZAotICAgICAgICAvLyBhZnRl
ciBhbGwgYXR0cmlidXRlcywgc2luY2UgdGhlaXIgbWFwcGVkIHN0eWxlIGRlcGVuZHMgb24gdGhl
IHZhbHVlcyBvZiBtdWx0aXBsZSBhdHRyaWJ1dGVzLgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGUoKSk7Ci0KLSAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVudCgp
LT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGJvb2wgaXNBdXRvOwotICAgICAgICAg
ICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0YXRlLnN0
eWxlZEVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0
byk7Ci0gICAgICAgICAgICBpZiAoaXNBdXRvKQotICAgICAgICAgICAgICAgIG1fcmVzdWx0LmFk
ZE1hdGNoZWRQcm9wZXJ0aWVzKHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmlnaHREZWNs
YXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgotICAg
IGlmIChtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgIG1hdGNoQXV0aG9yUnVsZXMo
ZmFsc2UpOwotCi0gICAgLy8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgot
ICAgIGlmIChtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50
KCkgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCkpIHsKLSAgICAgICAg
Ly8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJsZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIENTU09N
IHdyYXBwZXIuCi0gICAgICAgIC8vIEZJWE1FOiBNZWRpYSBjb250cm9sIHNoYWRvdyB0cmVlcyBz
ZWVtIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBjYWNoaW5nLgotICAgICAgICBib29sIGlzSW5saW5l
U3R5bGVDYWNoZWFibGUgPSAhbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCkt
PmlzTXV0YWJsZSgpICYmICFtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNJblNoYWRvd1RyZWUo
KTsKLSAgICAgICAgLy8gRklYTUU6IENvbnN0aWZ5LgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLCBpc0lubGlu
ZVN0eWxlQ2FjaGVhYmxlKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIC8vIE5vdyBj
aGVjayBTTUlMIGFuaW1hdGlvbiBvdmVycmlkZSBzdHlsZS4KLSAgICBpZiAoaW5jbHVkZVNNSUxQ
cm9wZXJ0aWVzICYmIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0YXRlLnN0eWxlZEVs
ZW1lbnQoKSAmJiBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpCi0gICAg
ICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1f
c3RhdGUuc3R5bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZh
bHNlIC8qIGlzQ2FjaGVhYmxlICovKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVT
TUlMUHJvcGVydGllcyk7Ci0jZW5kaWYKLX0KLQotYm9vbCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6
aGFzQW55TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiBydWxlU2V0KQotewotICAgIGNsZWFyTWF0Y2hl
ZFJ1bGVzKCk7Ci0KLSAgICBtX21vZGUgPSBTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlczsK
LSAgICBpbnQgZmlyc3RSdWxlSW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwotICAgIFN0
eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSBydWxlUmFuZ2UoZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxl
SW5kZXgpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChydWxlU2V0KSwg
cnVsZVJhbmdlKTsKLQotICAgIHJldHVybiBtX21hdGNoZWRSdWxlcyAmJiAhbV9tYXRjaGVkUnVs
ZXMtPmlzRW1wdHkoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTg3NTg0ZjlhMzA2M2NhNjU4MmVjMGYxMTVjNjE5NTEwMjIwYzViZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBFbGVtZW50
UnVsZUNvbGxlY3Rvcl9oCi0jZGVmaW5lIEVsZW1lbnRSdWxlQ29sbGVjdG9yX2gKLQotI2luY2x1
ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKLSNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIK
LSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NS
dWxlTGlzdDsKLWNsYXNzIERvY3VtZW50UnVsZVNldHM7Ci1jbGFzcyBSZW5kZXJSZWdpb247Ci1j
bGFzcyBSdWxlRGF0YTsKLWNsYXNzIFJ1bGVTZXQ7Ci1jbGFzcyBTZWxlY3RvckZpbHRlcjsKLWNs
YXNzIFN0eWxlU2NvcGVSZXNvbHZlcjsKLWNsYXNzIFN0YXRpY0NTU1J1bGVMaXN0OwotCi1jbGFz
cyBFbGVtZW50UnVsZUNvbGxlY3RvciB7Ci1wdWJsaWM6Ci0gICAgRWxlbWVudFJ1bGVDb2xsZWN0
b3IoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlKQotICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9ydWxlU2V0
cyhzdHlsZVJlc29sdmVyLT5ydWxlU2V0cygpKQotICAgICAgICAsIG1fc2VsZWN0b3JGaWx0ZXIo
c3R5bGVSZXNvbHZlci0+c2VsZWN0b3JGaWx0ZXIoKSkKLSAgICAgICAgLCBtX2luc3BlY3RvckNT
U09NV3JhcHBlcnMoc3R5bGVSZXNvbHZlci0+aW5zcGVjdG9yQ1NTT01XcmFwcGVycygpKQotICAg
ICAgICAsIG1fc2NvcGVSZXNvbHZlcihzdHlsZVJlc29sdmVyLT5zY29wZVJlc29sdmVyKCkpCi0g
ICAgICAgICwgbV9pc1ByaW50U3R5bGUoZmFsc2UpCi0gICAgICAgICwgbV9yZWdpb25Gb3JTdHls
aW5nKDApCi0gICAgICAgICwgbV9wc2V1ZG9TdHlsZVJlcXVlc3QoTk9QU0VVRE8pCi0gICAgICAg
ICwgbV9zYW1lT3JpZ2luT25seShmYWxzZSkKLSAgICAgICAgLCBtX21vZGUoU2VsZWN0b3JDaGVj
a2VyOjpSZXNvbHZpbmdTdHlsZSkKLSAgICAgICAgLCBtX2NhblVzZUZhc3RSZWplY3QobV9zZWxl
Y3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChzdGF0ZS5wYXJlbnROb2RlKCkpKQot
ICAgICAgICAsIG1fYmVoYXZpb3JBdEJvdW5kYXJ5KFNlbGVjdG9yQ2hlY2tlcjo6RG9lc05vdENy
b3NzQm91bmRhcnkpCi0gICAgICAgICwgbV9tYXRjaGluZ1VBUnVsZXMoZmFsc2UpIHsgfQotCi0g
ICAgdm9pZCBtYXRjaEFsbFJ1bGVzKGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzLCBib29s
IGluY2x1ZGVTTUlMUHJvcGVydGllcyk7Ci0gICAgdm9pZCBtYXRjaFVBUnVsZXMoKTsKLSAgICB2
b2lkIG1hdGNoQXV0aG9yUnVsZXMoYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9pZCBt
YXRjaFVzZXJSdWxlcyhib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLQotICAgIHZvaWQgc2V0TW9k
ZShTZWxlY3RvckNoZWNrZXI6Ok1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9Ci0gICAgdm9p
ZCBzZXRQc2V1ZG9TdHlsZVJlcXVlc3QoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiByZXF1ZXN0
KSB7IG1fcHNldWRvU3R5bGVSZXF1ZXN0ID0gcmVxdWVzdDsgfQotICAgIHZvaWQgc2V0U2FtZU9y
aWdpbk9ubHkoYm9vbCBmKSB7IG1fc2FtZU9yaWdpbk9ubHkgPSBmOyB9IAotICAgIHZvaWQgc2V0
UmVnaW9uRm9yU3R5bGluZyhSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcpIHsgbV9yZWdp
b25Gb3JTdHlsaW5nID0gcmVnaW9uRm9yU3R5bGluZzsgfQotICAgIHZvaWQgc2V0TWVkaXVtKGNv
bnN0IE1lZGlhUXVlcnlFdmFsdWF0b3IqIG1lZGl1bSkgeyBtX2lzUHJpbnRTdHlsZSA9IG1lZGl1
bS0+bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQiKTsgfQotCi0gICAgYm9vbCBoYXNBbnlN
YXRjaGluZ1J1bGVzKFJ1bGVTZXQqKTsKLQotICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0
JiBtYXRjaGVkUmVzdWx0KCk7Ci0gICAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1
bGVMaXN0KCk7Ci0KLXByaXZhdGU6Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgeyByZXR1cm4g
bV9zdGF0ZS5kb2N1bWVudCgpOyB9Ci0gICAgdm9pZCBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVz
KGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqLCBib29sIGlzQ2FjaGVhYmxlID0gdHJ1ZSk7Ci0KLSNp
ZiBFTkFCTEUoU0hBRE9XX0RPTSkKLSAgICB2b2lkIG1hdGNoVUFSdWxlcyhSdWxlU2V0Kik7Ci0g
ICAgdm9pZCBtYXRjaFNoYWRvd0Rpc3RyaWJ1dGVkUnVsZXMoYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cywgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdlJik7Ci0gICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhv
clJ1bGVzKGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMo
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0jZW5kaWYKLQotICAgIHZvaWQgY29sbGVjdE1hdGNo
aW5nUnVsZXMoY29uc3QgTWF0Y2hSZXF1ZXN0JiwgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdlJik7
Ci0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVl
c3QmLCBTdHlsZVJlc29sdmVyOjpSdWxlUmFuZ2UmKTsKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgY29uc3QgTWF0Y2hSZXF1ZXN0
JiwgU3R5bGVSZXNvbHZlcjo6UnVsZVJhbmdlJik7Ci0gICAgYm9vbCBydWxlTWF0Y2hlcyhjb25z
dCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYpOwotCi0g
ICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRj
aGVkUnVsZXMoKTsKLQotICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUoY29uc3QgUnVsZURhdGEqKTsK
LSAgICB2b2lkIGNsZWFyTWF0Y2hlZFJ1bGVzKCk7Ci0KLSAgICBTdGF0aWNDU1NSdWxlTGlzdCog
ZW5zdXJlUnVsZUxpc3QoKTsKLSAgICAgICAgCi1wcml2YXRlOgotICAgIGNvbnN0IFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBtX3N0YXRlOwotICAgIERvY3VtZW50UnVsZVNldHMmIG1fcnVsZVNldHM7
Ci0gICAgU2VsZWN0b3JGaWx0ZXImIG1fc2VsZWN0b3JGaWx0ZXI7Ci0gICAgSW5zcGVjdG9yQ1NT
T01XcmFwcGVycyYgbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOwotICAgIFN0eWxlU2NvcGVSZXNv
bHZlciogbV9zY29wZVJlc29sdmVyOwotCi0gICAgYm9vbCBtX2lzUHJpbnRTdHlsZTsKLSAgICBS
ZW5kZXJSZWdpb24qIG1fcmVnaW9uRm9yU3R5bGluZzsKLSAgICBQc2V1ZG9TdHlsZVJlcXVlc3Qg
bV9wc2V1ZG9TdHlsZVJlcXVlc3Q7Ci0gICAgYm9vbCBtX3NhbWVPcmlnaW5Pbmx5OwotICAgIFNl
bGVjdG9yQ2hlY2tlcjo6TW9kZSBtX21vZGU7Ci0gICAgYm9vbCBtX2NhblVzZUZhc3RSZWplY3Q7
Ci0gICAgU2VsZWN0b3JDaGVja2VyOjpCZWhhdmlvckF0Qm91bmRhcnkgbV9iZWhhdmlvckF0Qm91
bmRhcnk7Ci0gICAgYm9vbCBtX21hdGNoaW5nVUFSdWxlczsKLQotICAgIE93blB0cjxWZWN0b3I8
Y29uc3QgUnVsZURhdGEqLCAzMj4gPiBtX21hdGNoZWRSdWxlczsKLQotICAgIC8vIE91dHB1dC4K
LSAgICBSZWZQdHI8U3RhdGljQ1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3Q7Ci0gICAgU3R5bGVSZXNv
bHZlcjo6TWF0Y2hSZXN1bHQgbV9yZXN1bHQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFbGVtZW50UnVsZUNvbGxlY3Rvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1Bh
Z2VSdWxlQ29sbGVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc2NmU3
NjgzNDRmNTZjYjk4NjlmY2M3YTBhMTljNDY2NWM1MDc4MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFnZVJ1bGVDb2xs
ZWN0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykg
MjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtz
LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYWdlUnVsZUNvbGxlY3Rvci5oIgot
Ci0jaW5jbHVkZSAiQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9w
ZXJ0eVNldC5oIgotI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUGFnZVJ1bGVzKGNvbnN0IFN0eWxlUnVsZVBh
Z2UqIHIxLCBjb25zdCBTdHlsZVJ1bGVQYWdlKiByMikKLXsKLSAgICByZXR1cm4gcjEtPnNlbGVj
dG9yKCktPnNwZWNpZmljaXR5KCkgPCByMi0+c2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKTsKLX0K
LQotYm9vbCBQYWdlUnVsZUNvbGxlY3Rvcjo6aXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25z
dAotewotICAgIGJvb2wgaXNGaXJzdFBhZ2VMZWZ0ID0gZmFsc2U7Ci0gICAgaWYgKCFtX3N0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICBp
c0ZpcnN0UGFnZUxlZnQgPSB0cnVlOwotCi0gICAgcmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJz
dFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7Ci19Ci0KLWJvb2wgUGFnZVJ1bGVDb2xsZWN0b3I6Omlz
Rmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEluIGNhc2Ug
b2YgZm9yY2VkIGxlZnQvcmlnaHQgcGFnZSwgcGFnZSBhdCBpbmRleCAxIChub3QgMCkgY2FuIGJl
IHRoZSBmaXJzdCBwYWdlLgotICAgIHJldHVybiAoIXBhZ2VJbmRleCk7Ci19Ci0KLVN0cmluZyBQ
YWdlUnVsZUNvbGxlY3Rvcjo6cGFnZU5hbWUoaW50IC8qIHBhZ2VJbmRleCAqLykgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHBhZ2UgaW5kZXggdG8gcGFnZSBuYW1lIG1hcHBpbmcu
Ci0gICAgcmV0dXJuICIiOwotfQotCi12b2lkIFBhZ2VSdWxlQ29sbGVjdG9yOjptYXRjaEFsbFBh
Z2VSdWxlcyhpbnQgcGFnZUluZGV4KQotewotICAgIGNvbnN0IGJvb2wgaXNMZWZ0ID0gaXNMZWZ0
UGFnZShwYWdlSW5kZXgpOwotICAgIGNvbnN0IGJvb2wgaXNGaXJzdCA9IGlzRmlyc3RQYWdlKHBh
Z2VJbmRleCk7Ci0gICAgY29uc3QgU3RyaW5nIHBhZ2UgPSBwYWdlTmFtZShwYWdlSW5kZXgpOwot
ICAgIAotICAgIG1hdGNoUGFnZVJ1bGVzKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFBy
aW50U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbWF0Y2hQYWdlUnVsZXMobV9y
dWxlU2V0cy51c2VyU3R5bGUoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKLSAgICAvLyBPbmx5
IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBw
ZXIgdGhlIEhUTUw1IHNwZWMuCi0gICAgbWF0Y2hQYWdlUnVsZXMobV9ydWxlU2V0cy5hdXRob3JT
dHlsZSgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotfQotCi12b2lkIFBhZ2VSdWxlQ29sbGVj
dG9yOjptYXRjaFBhZ2VSdWxlcyhSdWxlU2V0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29s
IGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQotewotICAgIGlmICghcnVsZXMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4gbWF0Y2hlZFBh
Z2VSdWxlczsKLSAgICBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QobWF0Y2hlZFBhZ2VSdWxlcywgcnVs
ZXMtPnBhZ2VSdWxlcygpLCBpc0xlZnRQYWdlLCBpc0ZpcnN0UGFnZSwgcGFnZU5hbWUpOwotICAg
IGlmIChtYXRjaGVkUGFnZVJ1bGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3RkOjpzdGFibGVfc29ydChtYXRjaGVkUGFnZVJ1bGVzLmJlZ2luKCksIG1hdGNoZWRQYWdlUnVs
ZXMuZW5kKCksIGNvbXBhcmVQYWdlUnVsZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1hdGNoZWRQYWdlUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1fcmVzdWx0LmFkZE1h
dGNoZWRQcm9wZXJ0aWVzKG1hdGNoZWRQYWdlUnVsZXNbaV0tPnByb3BlcnRpZXMoKSk7Ci19Ci0K
LXN0YXRpYyBib29sIGNoZWNrUGFnZVNlbGVjdG9yQ29tcG9uZW50cyhjb25zdCBDU1NTZWxlY3Rv
ciogc2VsZWN0b3IsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3Ry
aW5nJiBwYWdlTmFtZSkKLXsKLSAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBjb21wb25lbnQg
PSBzZWxlY3RvcjsgY29tcG9uZW50OyBjb21wb25lbnQgPSBjb21wb25lbnQtPnRhZ0hpc3Rvcnko
KSkgewotICAgICAgICBpZiAoY29tcG9uZW50LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpUYWcp
IHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gY29tcG9uZW50
LT50YWdRTmFtZSgpLmxvY2FsTmFtZSgpOwotICAgICAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSBz
dGFyQXRvbSAmJiBsb2NhbE5hbWUgIT0gcGFnZU5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgcHNl
dWRvVHlwZSA9IGNvbXBvbmVudC0+cHNldWRvVHlwZSgpOwotICAgICAgICBpZiAoKHBzZXVkb1R5
cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0xlZnRQYWdlICYmICFpc0xlZnRQYWdlKQotICAgICAg
ICAgICAgfHwgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1JpZ2h0UGFnZSAmJiBp
c0xlZnRQYWdlKQotICAgICAgICAgICAgfHwgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0ZpcnN0UGFnZSAmJiAhaXNGaXJzdFBhZ2UpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgUGFnZVJ1bGVDb2xsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVS
dWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHJ1
bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFn
ZU5hbWUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIFN0eWxlUnVsZVBhZ2UqIHJ1bGUgPSBydWxlc1tpXTsKLQotICAgICAgICBp
ZiAoIWNoZWNrUGFnZVNlbGVjdG9yQ29tcG9uZW50cyhydWxlLT5zZWxlY3RvcigpLCBpc0xlZnRQ
YWdlLCBpc0ZpcnN0UGFnZSwgcGFnZU5hbWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdu
b3JlIGl0LgotICAgICAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVs
ZS0+cHJvcGVydGllcygpOwotICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwgcHJvcGVydGllcy0+
aXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gQWRkIHRoaXMg
cnVsZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgICAgICBtYXRjaGVkUnVsZXMu
YXBwZW5kKHJ1bGUpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1BhZ2VSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvUGFnZVJ1bGVDb2xsZWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGY1YzI5YTdkNWVmOTM3ZTEwNDcxYzk4NTY3NmYyMTYzMTMxOTE4ZS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFn
ZVJ1bGVDb2xsZWN0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFBhZ2VSdWxlQ29s
bGVjdG9yX2gKLSNkZWZpbmUgUGFnZVJ1bGVDb2xsZWN0b3JfaAotCi0jaW5jbHVkZSAiRG9jdW1l
bnRSdWxlU2V0cy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIFN0eWxlUnVsZVBhZ2U7Ci0KLWNsYXNzIFBhZ2VSdWxlQ29sbGVjdG9yIHsKLXB1
YmxpYzoKLSAgICBQYWdlUnVsZUNvbGxlY3RvcihTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUs
IERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzKQotICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0g
ICAgICAgICwgbV9ydWxlU2V0cyhydWxlU2V0cykgeyB9Ci0KLSAgICB2b2lkIG1hdGNoQWxsUGFn
ZVJ1bGVzKGludCBwYWdlSW5kZXgpOwotICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0JiBt
YXRjaGVkUmVzdWx0KCkgeyByZXR1cm4gbV9yZXN1bHQ7IH0KLQotcHJpdmF0ZToKLSAgICBib29s
IGlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JpZ2h0UGFnZShp
bnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShwYWdlSW5kZXgpOyB9Ci0g
ICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLSAgICBTdHJpbmcgcGFn
ZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0KLSAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzKFJ1
bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0
cmluZyYgcGFnZU5hbWUpOwotICAgIHZvaWQgbWF0Y2hQYWdlUnVsZXNGb3JMaXN0KFZlY3RvcjxT
dHlsZVJ1bGVQYWdlKj4mIG1hdGNoZWRSdWxlcywgY29uc3QgVmVjdG9yPFN0eWxlUnVsZVBhZ2Uq
PiYgcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5n
JiBwYWdlTmFtZSk7Ci0KLSAgICBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgbV9zdGF0ZTsK
LSAgICBEb2N1bWVudFJ1bGVTZXRzJiBtX3J1bGVTZXRzOwotCi0gICAgU3R5bGVSZXNvbHZlcjo6
TWF0Y2hSZXN1bHQgbV9yZXN1bHQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBQYWdlUnVsZUNvbGxlY3Rvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAKaW5kZXggZjg0MWM4NGNlY2MzYWIxZWU0NDkxNzY5NDM0OTMxZDcwNmQ5MGVjZC4uMzhiYTgz
OThjMDkxZTY4M2NlMmVlZWQ4OGJkNmUxMGQzMWNlZDU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcApAQCAtNTksNyArNTksNiBAQAogI2luY2x1ZGUgIkNvdW50ZXJDb250ZW50
LmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1
ZGUgIkVsZW1lbnRTaGFkb3cuaCIKICNpbmNsdWRlICJGb250RmVhdHVyZVZhbHVlLmgiCiAjaW5j
bHVkZSAiRm9udFZhbHVlLmgiCkBAIC04Nyw3ICs4Niw2IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRl
clN0eWxlLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUGFnZVJ1bGVDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJQYWlyLmgi
CiAjaW5jbHVkZSAiUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJR
dW90ZXNEYXRhLmgiCkBAIC0xMDksNiArMTA3LDcgQEAKICNpbmNsdWRlICJTaGFkb3dEYXRhLmgi
CiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNoYWRvd1ZhbHVlLmgiCisjaW5j
bHVkZSAiU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCIKICNpbmNsdWRlICJTa2V3VHJhbnNm
b3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5
bGVDYWNoZWRJbWFnZS5oIgpAQCAtMjExLDYgKzIxMCwzMCBAQCBpZiAoaXNJbml0aWFsKSB7IFwK
IAogUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAK
K3N0YXRpYyBTdHlsZVByb3BlcnR5U2V0KiBsZWZ0VG9SaWdodERlY2xhcmF0aW9uKCkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiwgbGVmdFRvUmln
aHREZWNsLCAoU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCkpKTsKKyAgICBpZiAobGVmdFRvUmln
aHREZWNsLT5pc0VtcHR5KCkpCisgICAgICAgIGxlZnRUb1JpZ2h0RGVjbC0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlTHRyKTsKKyAgICByZXR1cm4gbGVmdFRvUmln
aHREZWNsLmdldCgpOworfQorCitzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xlZnRE
ZWNsYXJhdGlvbigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8U3R5bGVQcm9w
ZXJ0eVNldD4sIHJpZ2h0VG9MZWZ0RGVjbCwgKFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpKSk7
CisgICAgaWYgKHJpZ2h0VG9MZWZ0RGVjbC0+aXNFbXB0eSgpKQorICAgICAgICByaWdodFRvTGVm
dERlY2wtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZVJ0bCk7Cisg
ICAgcmV0dXJuIHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKTsKK30KKworCitpbmxpbmUgU3RhdGljQ1NT
UnVsZUxpc3QqIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbnN1cmVSdWxlTGlzdCgpCit7CisgICAg
aWYgKCFtX3J1bGVMaXN0KQorICAgICAgICBtX3J1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxpc3Q6
OmNyZWF0ZSgpOworICAgIHJldHVybiBtX3J1bGVMaXN0LmdldCgpOworfQorCiBpbmxpbmUgdm9p
ZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKIHsKICAg
ICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKQEAgLTIyOCw2
ICsyNTEsOCBAQCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2xlYXIoKQogICAg
IG1fcGFyZW50U3R5bGUgPSAwOwogICAgIG1fcGFyZW50Tm9kZSA9IDA7CiAgICAgbV9yZWdpb25G
b3JTdHlsaW5nID0gMDsKKyAgICBtX3J1bGVMaXN0ID0gMDsKKyAgICBtX21hdGNoZWRSdWxlcy5j
bGVhcigpOwogICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOwogI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKICAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0gZmFsc2U7CkBAIC0yMzcs
MTYgKzI2Miw2IEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjbGVhcigpCiAj
ZW5kaWYKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFBy
b3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiBy
dWxlLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVy
dHlXaGl0ZWxpc3RUeXBlKQotewotICAgIG1hdGNoZWRQcm9wZXJ0aWVzLmdyb3cobWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpICsgMSk7Ci0gICAgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRp
ZXMmIG5ld1Byb3BlcnRpZXMgPSBtYXRjaGVkUHJvcGVydGllcy5sYXN0KCk7Ci0gICAgbmV3UHJv
cGVydGllcy5wcm9wZXJ0aWVzID0gY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4ocHJvcGVy
dGllcyk7Ci0gICAgbmV3UHJvcGVydGllcy5saW5rTWF0Y2hUeXBlID0gbGlua01hdGNoVHlwZTsK
LSAgICBuZXdQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUgPSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGU7
Ci0gICAgbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsKLX0KLQogU3R5bGVSZXNvbHZlcjo6U3R5
bGVSZXNvbHZlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5
bGVzKQogICAgIDogbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dl
ZXAoMCkKICAgICAsIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIodGhpcywgJlN0
eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSkKQEAgLTM5MCw2ICs0MDUs
MTgyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKFRp
bWVyPFN0eWxlUmVzb2x2ZXI+KikKICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlv
bnNTaW5jZUxhc3RTd2VlcCA9IDA7CiB9CiAKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkTWF0Y2hl
ZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBTdHlsZVByb3BlcnR5
U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUs
IFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCit7CisgICAgbWF0
Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuZ3JvdyhtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVy
dGllcy5zaXplKCkgKyAxKTsKKyAgICBNYXRjaGVkUHJvcGVydGllcyYgbmV3UHJvcGVydGllcyA9
IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmxhc3QoKTsKKyAgICBuZXdQcm9wZXJ0aWVz
LnByb3BlcnRpZXMgPSBjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPihwcm9wZXJ0aWVzKTsK
KyAgICBuZXdQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hUeXBlOworICAgIG5l
d1Byb3BlcnRpZXMud2hpdGVsaXN0VHlwZSA9IHByb3BlcnR5V2hpdGVsaXN0VHlwZTsKKyAgICBt
YXRjaFJlc3VsdC5tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOworfQorCitpbmxpbmUgdm9pZCBT
dHlsZVJlc29sdmVyOjphZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiByZXN1
bHQsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5U2V0LCBib29sIGlzQ2FjaGVhYmxl
KQoreworICAgIGlmICghcHJvcGVydHlTZXQpCisgICAgICAgIHJldHVybjsKKyAgICByZXN1bHQu
cmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsK
KyAgICBpZiAocmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUgPT0gLTEpCisgICAgICAgIHJl
c3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlID0gcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZTsKKyAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHByb3BlcnR5U2V0KTsKKyAgICBp
ZiAoIWlzQ2FjaGVhYmxlKQorICAgICAgICByZXN1bHQuaXNDYWNoZWFibGUgPSBmYWxzZTsKK30K
KworY2xhc3MgTWF0Y2hpbmdVQVJ1bGVzU2NvcGUgeworcHVibGljOgorICAgIE1hdGNoaW5nVUFS
dWxlc1Njb3BlKCk7CisgICAgfk1hdGNoaW5nVUFSdWxlc1Njb3BlKCk7CisKKyAgICBzdGF0aWMg
Ym9vbCBpc01hdGNoaW5nVUFSdWxlcygpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIG1f
bWF0Y2hpbmdVQVJ1bGVzOworfTsKKworTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6Ok1hdGNoaW5nVUFS
dWxlc1Njb3BlKCkKK3sKKyAgICBBU1NFUlQoIW1fbWF0Y2hpbmdVQVJ1bGVzKTsKKyAgICBtX21h
dGNoaW5nVUFSdWxlcyA9IHRydWU7Cit9CisKK01hdGNoaW5nVUFSdWxlc1Njb3BlOjp+TWF0Y2hp
bmdVQVJ1bGVzU2NvcGUoKQoreworICAgIG1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7Cit9CisK
K2lubGluZSBib29sIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCit7
CisgICAgcmV0dXJuIG1fbWF0Y2hpbmdVQVJ1bGVzOworfQorCitib29sIE1hdGNoaW5nVUFSdWxl
c1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOworCit2b2lkIFN0eWxlUmVzb2x2ZXI6
OmNvbGxlY3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBS
dWxlUmFuZ2UmIHJ1bGVSYW5nZSkKK3sKKyAgICBBU1NFUlQobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQp
OworICAgIEFTU0VSVChtX3N0YXRlLmVsZW1lbnQoKSk7CisKKyAgICBTdGF0ZSYgc3RhdGUgPSBt
X3N0YXRlOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCk7CisgICAgY29u
c3QgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKTsK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gZWxlbWVudC0+c2hhZG93UHNldWRv
SWQoKTsKKyAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkgeworICAgICAgICBBU1NFUlQoc3R5
bGVkRWxlbWVudCk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJl
cXVlc3QucnVsZVNldC0+c2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKHBzZXVkb0lkLmltcGwoKSks
IG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisgICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpKQorICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVkb1J1bGVz
KCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyNlbmRpZgorICAgIC8vIENoZWNrIHdoZXRo
ZXIgb3RoZXIgdHlwZXMgb2YgcnVsZXMgYXJlIGFwcGxpY2FibGUgaW4gdGhlIGN1cnJlbnQgdHJl
ZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6CisgICAgLy8gYSkgaXQncyBhIFVBIHJ1bGUKKyAg
ICAvLyBiKSB0aGUgdHJlZSBzY29wZSBhbGxvd3MgYXV0aG9yIHJ1bGVzCisgICAgLy8gYykgdGhl
IHJ1bGVzIGNvbWVzIGZyb20gYSBzY29wZWQgc3R5bGUgc2hlZXQgd2l0aGluIHRoZSBzYW1lIHRy
ZWUgc2NvcGUKKyAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9IGVsZW1lbnQtPnRyZWVTY29wZSgp
OworICAgIGlmICghTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKKyAg
ICAgICAgJiYgIXRyZWVTY29wZS0+YXBwbHlBdXRob3JTdHlsZXMoKQorICAgICAgICAmJiAoIW1h
dGNoUmVxdWVzdC5zY29wZSB8fCBtYXRjaFJlcXVlc3Quc2NvcGUtPnRyZWVTY29wZSgpICE9IHRy
ZWVTY29wZSkKKyAgICAgICAgJiYgbWF0Y2hSZXF1ZXN0LmJlaGF2aW9yQXRCb3VuZGFyeSA9PSBT
ZWxlY3RvckNoZWNrZXI6OkRvZXNOb3RDcm9zc0JvdW5kYXJ5KQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBXZSBuZWVkIHRvIGNvbGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywg
YW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbnRvIGEgYnVmZmVyIGFuZAorICAgIC8vIHRoZW4gc29ydCB0
aGUgYnVmZmVyLgorICAgIGlmIChlbGVtZW50LT5oYXNJRCgpKQorICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmlkUnVsZXMoZWxlbWVudC0+
aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7
CisgICAgaWYgKHN0eWxlZEVsZW1lbnQgJiYgc3R5bGVkRWxlbWVudC0+aGFzQ2xhc3MoKSkgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMo
KS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCht
YXRjaFJlcXVlc3QucnVsZVNldC0+Y2xhc3NSdWxlcyhzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVz
KClbaV0uaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIH0KKworICAgIGlm
IChlbGVtZW50LT5pc0xpbmsoKSkKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVl
c3QsIHJ1bGVSYW5nZSk7CisgICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlc0ZvY3VzUHNl
dWRvQ2xhc3MoZWxlbWVudCkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCht
YXRjaFJlcXVlc3QucnVsZVNldC0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIG1hdGNoUmVxdWVz
dCwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1
ZXN0LnJ1bGVTZXQtPnRhZ1J1bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJh
bmdlKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJl
Z2lvbihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFu
Z2UpCit7CisgICAgaWYgKCFtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lv
blNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3Rv
ciA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0
KGkpLnNlbGVjdG9yOworICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxl
Y3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZygpLT5u
b2RlKCkpKSkgeworICAgICAgICAgICAgUnVsZVNldCogcmVnaW9uUnVsZXMgPSBtYXRjaFJlcXVl
c3QucnVsZVNldC0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0Lmdl
dCgpOworICAgICAgICAgICAgQVNTRVJUKHJlZ2lvblJ1bGVzKTsKKyAgICAgICAgICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChyZWdpb25SdWxlcywgbWF0Y2hSZXF1ZXN0Lmlu
Y2x1ZGVFbXB0eVJ1bGVzLCBtYXRjaFJlcXVlc3Quc2NvcGUpLCBydWxlUmFuZ2UpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNo
ZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQoreworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7CisgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+JiBtYXRjaGVkUnVsZXMgPSBzdGF0
ZS5tYXRjaGVkUnVsZXMoKTsKKyAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc29ydE1hdGNoZWRSdWxlcygpOworCisgICAgaWYgKHN0YXRlLm1v
ZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFJ1bGVzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgc3RhdGUuZW5zdXJlUnVsZUxpc3QoKS0+cnVsZXMoKS5hcHBlbmQobWF0Y2hlZFJ1bGVzW2ld
LT5ydWxlKCktPmNyZWF0ZUNTU09NV3JhcHBlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBv
dXIgbGlzdCBvZiBkZWNsYXJhdGlvbnMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1h
dGNoZWRSdWxlcy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKSAmJiBt
YXRjaGVkUnVsZXNbaV0tPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgIGFkZE1hdGNoZWRQ
cm9wZXJ0aWVzKHJlc3VsdCwgbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPnByb3BlcnRpZXMoKSwg
bWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCksIG1hdGNoZWRSdWxlc1tpXS0+bGlua01hdGNoVHlwZSgp
LCBtYXRjaGVkUnVsZXNbaV0tPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVOQUJMRShTVFlMRV9TQ09Q
RUQpIHx8IEVOQUJMRShTSEFET1dfRE9NKQorICAgIGlmICghbV9zY29wZVJlc29sdmVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZl
cnNpbmcgdGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNv
bnNpc3RlbnQpLgorICAgIGlmIChtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpICYm
IG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShtX3N0YXRlLmVsZW1lbnQo
KSkpIHsKKyAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9IG1fc3RhdGUuZWxlbWVudCgp
LT50cmVlU2NvcGUoKS0+YXBwbHlBdXRob3JTdHlsZXMoKTsKKyAgICAgICAgYm9vbCBkb2N1bWVu
dFNjb3BlID0gdHJ1ZTsKKyAgICAgICAgdW5zaWduZWQgc2NvcGVTaXplID0gbV9zY29wZVJlc29s
dmVyLT5zdGFja1NpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjb3Bl
U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7
CisgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CisKKyAgICAgICAgICAgIGNvbnN0IFN0eWxlU2NvcGVS
ZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0YWNrRnJhbWVB
dChpKTsKKyAgICAgICAgICAgIGRvY3VtZW50U2NvcGUgPSBkb2N1bWVudFNjb3BlICYmICFmcmFt
ZS5tX3Njb3BlLT5pc0luU2hhZG93VHJlZSgpOworICAgICAgICAgICAgaWYgKGRvY3VtZW50U2Nv
cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWFwcGx5QXV0aG9yU3R5bGVzKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXItPm1hdGNoZXNTdHlsZUJvdW5kcyhmcmFtZSkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBN
YXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KGZyYW1lLm1fcnVsZVNldCwgaW5jbHVkZUVtcHR5UnVs
ZXMsIGZyYW1lLm1fc2NvcGUpOworICAgICAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJl
c3VsdC5yYW5nZXMuYXV0aG9yUnVsZVJhbmdlKCk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlcyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbihtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgICAg
ICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIG1hdGNoSG9zdFJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBVTlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5
UnVsZXMpOworI2VuZGlmCit9CisKIGlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hh
cmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQogewogI2lmIEVOQUJMRShTSEFET1dfRE9N
KQpAQCAtMzk5LDYgKzU5MCwxOTcgQEAgaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVT
aGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpCiAjZW5kaWYKIH0KIAordm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIEFTU0VSVChtX3Nj
b3BlUmVzb2x2ZXIpOworCisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOworICAg
IHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMTsKKworICAgIFZlY3RvcjxSdWxlU2V0Kj4gbWF0Y2hlZFJ1bGVzOworICAgIG1f
c2NvcGVSZXNvbHZlci0+bWF0Y2hIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KCksIG1hdGNoZWRS
dWxlcyk7CisgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkp
IHsKKyAgICAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuYXV0aG9yUnVs
ZVJhbmdlKCk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChtYXRj
aGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1fc3RhdGUuZWxlbWVudCgpKSwg
cnVsZVJhbmdlKTsKKyAgICB9CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3Vs
dCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIFVOVVNFRF9QQVJBTShp
bmNsdWRlRW1wdHlSdWxlcyk7CisjZW5kaWYKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
Cit7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOworICAgIHJlc3VsdC5yYW5n
ZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsK
KworICAgIGlmICghbV9zdGF0ZS5lbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMuCisgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVz
dChtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBSdWxl
UmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKKyAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworI2lmIEVO
QUJMRShTSEFET1dfRE9NKQorICAgIFZlY3RvcjxNYXRjaFJlcXVlc3Q+IG1hdGNoUmVxdWVzdHM7
CisgICAgbV9ydWxlU2V0cy5zaGFkb3dEaXN0cmlidXRlZFJ1bGVzKCkuY29sbGVjdE1hdGNoUmVx
dWVzdHMoaW5jbHVkZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdHMpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbWF0Y2hSZXF1ZXN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0c1tpXSwgcnVsZVJhbmdlKTsKKyNlbmRpZgorCisgICAg
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CisKKyAgICBtYXRjaFNjb3BlZEF1
dGhvclJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworfQorCit2b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpCit7CisgICAgaWYgKCFtX3J1bGVTZXRzLnVzZXJTdHlsZSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOworCisgICAg
cmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6
ZSgpIC0gMTsKKyAgICBNYXRjaFJlcXVlc3QgbWF0Y2hSZXF1ZXN0KG1fcnVsZVNldHMudXNlclN0
eWxlKCksIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVz
dWx0LnJhbmdlcy51c2VyUnVsZVJhbmdlKCk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0
Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9u
KG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcyhyZXN1bHQpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0LCBSdWxlU2V0KiBydWxlcykKK3sKKyAgICBtX3N0YXRlLm1hdGNoZWRS
dWxlcygpLmNsZWFyKCk7CisgICAgCisgICAgcmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlID0gcmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CisgICAgUnVsZVJhbmdlIHJ1bGVSYW5n
ZSA9IHJlc3VsdC5yYW5nZXMuVUFSdWxlUmFuZ2UoKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
cyhNYXRjaFJlcXVlc3QocnVsZXMpLCBydWxlUmFuZ2UpOworCisgICAgc29ydEFuZFRyYW5zZmVy
TWF0Y2hlZFJ1bGVzKHJlc3VsdCk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjb25zdCBN
YXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCit7CisgICAg
aWYgKCFydWxlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0
ZTsKKyAgICAvLyBJbiBzb21lIGNhc2VzIHdlIG1heSBlbmQgdXAgbG9va2luZyB1cCBzdHlsZSBm
b3IgcmFuZG9tIGVsZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgYSByZWN1cnNpdmUgdHJlZSByZXNv
bHZlLgorICAgIC8vIEFuY2VzdG9yIGlkZW50aWZpZXIgZmlsdGVyIHdvbid0IGJlIHVwLXRvLWRh
dGUgaW4gdGhhdCBjYXNlIGFuZCB3ZSBjYW4ndCB1c2UgdGhlIGZhc3QgcGF0aC4KKyAgICBib29s
IGNhblVzZUZhc3RSZWplY3QgPSBtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0
ZW50KHN0YXRlLnBhcmVudE5vZGUoKSkgJiYgbWF0Y2hSZXF1ZXN0LmJlaGF2aW9yQXRCb3VuZGFy
eSA9PSBTZWxlY3RvckNoZWNrZXI6OkRvZXNOb3RDcm9zc0JvdW5kYXJ5OworCisgICAgdW5zaWdu
ZWQgc2l6ZSA9IHJ1bGVzLT5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICBjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEgPSBydWxlcy0+YXQo
aSk7CisgICAgICAgIGlmIChjYW5Vc2VGYXN0UmVqZWN0ICYmIG1fc2VsZWN0b3JGaWx0ZXIuZmFz
dFJlamVjdFNlbGVjdG9yPFJ1bGVEYXRhOjptYXhpbXVtSWRlbnRpZmllckNvdW50PihydWxlRGF0
YS5kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOworICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOworICAg
ICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgICAgIGlmIChydWxl
TWF0Y2hlcyhydWxlRGF0YSwgbWF0Y2hSZXF1ZXN0LnNjb3BlLCBkeW5hbWljUHNldWRvLCBtYXRj
aFJlcXVlc3QuYmVoYXZpb3JBdEJvdW5kYXJ5KSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHJ1
bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24t
ZGVidWcgbW9kZS4KKyAgICAgICAgICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRp
ZXMgPSBydWxlLT5wcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwg
KHByb3BlcnRpZXMtPmlzRW1wdHkoKSAmJiAhbWF0Y2hSZXF1ZXN0LmluY2x1ZGVFbXB0eVJ1bGVz
KSkgeworICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTWF0Y2hS
dWxlKGNvb2tpZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gRklYTUU6IEV4cG9zaW5nIHRoZSBub24tc3RhbmRhcmQgZ2V0
TWF0Y2hlZENTU1J1bGVzIEFQSSB0byB3ZWIgaXMgdGhlIG9ubHkgcmVhc29uIHRoaXMgaXMgbmVl
ZGVkLgorICAgICAgICAgICAgaWYgKHN0YXRlLmlzU2FtZU9yaWdpbk9ubHkoKSAmJiAhcnVsZURh
dGEuaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpKSB7CisgICAgICAgICAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB3ZSdy
ZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVkbyBiaXQgaWYKKyAgICAgICAgICAg
IC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVudC4KKyAgICAgICAgICAg
IGlmIChkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIHN0YXRlLnBzZXVkb1N0eWxlUmVxdWVz
dCgpLnBzZXVkb0lkID09IE5PUFNFVURPKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLm1v
ZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgeworICAgICAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIGZh
bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChkeW5hbWljUHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURP
SUQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc1BzZXVkb1N0eWxl
KGR5bmFtaWNQc2V1ZG8pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBVcGRhdGUgb3VyIGZpcnN0L2xhc3QgcnVsZSBpbmRpY2VzIGluIHRoZSBtYXRjaGVkIHJ1bGVz
IGFycmF5LgorICAgICAgICAgICAgICAgICsrcnVsZVJhbmdlLmxhc3RSdWxlSW5kZXg7CisgICAg
ICAgICAgICAgICAgaWYgKHJ1bGVSYW5nZS5maXJzdFJ1bGVJbmRleCA9PSAtMSkKKyAgICAgICAg
ICAgICAgICAgICAgcnVsZVJhbmdlLmZpcnN0UnVsZUluZGV4ID0gcnVsZVJhbmdlLmxhc3RSdWxl
SW5kZXg7CisKKyAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBydWxlIHRvIG91ciBsaXN0IG9m
IG1hdGNoZWQgcnVsZXMuCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5hZGRNYXRjaGVkUnVsZSgm
cnVsZURhdGEpOworICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
TWF0Y2hSdWxlKGNvb2tpZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRNYXRjaFJ1bGUoY29va2llLCBmYWxzZSk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgY29tcGFyZVJ1bGVzKGNvbnN0IFJ1bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIyKQor
eworICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5MSA9IHIxLT5zcGVjaWZpY2l0eSgpOworICAgIHVu
c2lnbmVkIHNwZWNpZmljaXR5MiA9IHIyLT5zcGVjaWZpY2l0eSgpOworICAgIHJldHVybiAoc3Bl
Y2lmaWNpdHkxID09IHNwZWNpZmljaXR5MikgPyByMS0+cG9zaXRpb24oKSA8IHIyLT5wb3NpdGlv
bigpIDogc3BlY2lmaWNpdHkxIDwgc3BlY2lmaWNpdHkyOworfQorCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OnNvcnRNYXRjaGVkUnVsZXMoKQoreworICAgIHN0ZDo6c29ydChtX3N0YXRlLm1hdGNoZWRS
dWxlcygpLmJlZ2luKCksIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuZW5kKCksIGNvbXBhcmVSdWxl
cyk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0LCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcykKK3sKKyAgICBtYXRjaFVBUnVsZXMo
cmVzdWx0KTsKKworICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgorICAgIGlm
IChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICAgICAgbWF0Y2hVc2VyUnVsZXMocmVz
dWx0LCBmYWxzZSk7CisKKyAgICAvLyBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcg
Zmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzIG1hcHBlZCBmcm9tIEhUTUwuCisg
ICAgaWYgKG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpKSB7CisgICAgICAgIGFkZEVsZW1lbnRTdHls
ZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGUoKSk7CisKKyAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9uYWwg
bWFwcGVkIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxscyBz
aGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCisgICAg
ICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUgZGVw
ZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0ZXMuCisgICAgICAgIGFkZEVs
ZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRk
aXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworCisgICAgICAgIGlmIChtX3N0
YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgICAgICBib29s
IGlzQXV0bzsKKyAgICAgICAgICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IHRvSFRN
TEVsZW1lbnQobV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGly
QXV0b0F0dHJpYnV0ZShpc0F1dG8pOworICAgICAgICAgICAgaWYgKGlzQXV0bykKKyAgICAgICAg
ICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIHRleHREaXJlY3Rpb24gPT0gTFRS
ID8gbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9y
IHNoZWV0cyBuZXh0LgorICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICAg
ICAgbWF0Y2hBdXRob3JSdWxlcyhyZXN1bHQsIGZhbHNlKTsKKworICAgIC8vIE5vdyBjaGVjayBv
dXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KKyAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50
KCktPmlubGluZVN0eWxlKCkpIHsKKyAgICAgICAgLy8gSW5saW5lIHN0eWxlIGlzIGltbXV0YWJs
ZSBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCisgICAgICAgIC8vIEZJWE1F
OiBNZWRpYSBjb250cm9sIHNoYWRvdyB0cmVlcyBzZWVtIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCBj
YWNoaW5nLgorICAgICAgICBib29sIGlzSW5saW5lU3R5bGVDYWNoZWFibGUgPSAhbV9zdGF0ZS5z
dHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCktPmlzTXV0YWJsZSgpICYmICFtX3N0YXRlLnN0
eWxlZEVsZW1lbnQoKS0+aXNJblNoYWRvd1RyZWUoKTsKKyAgICAgICAgLy8gRklYTUU6IENvbnN0
aWZ5LgorICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5z
dHlsZWRFbGVtZW50KCktPmlubGluZVN0eWxlKCksIGlzSW5saW5lU3R5bGVDYWNoZWFibGUpOwor
ICAgIH0KKworI2lmIEVOQUJMRShTVkcpCisgICAgLy8gTm93IGNoZWNrIFNNSUwgYW5pbWF0aW9u
IG92ZXJyaWRlIHN0eWxlLgorICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0
ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICBhZGRFbGVtZW50U3R5
bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5
bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlz
Q2FjaGVhYmxlICovKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTTUlMUHJvcGVy
dGllcyk7CisjZW5kaWYKK30KKwogYm9vbCBTdHlsZVJlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0
ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMpIGNvbnN0CiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFtZXMuc2l6ZSgpOyArK2kpIHsKQEAg
LTQyNiw4ICs4MDgsOSBAQCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0RWxlbWVudChF
bGVtZW50KiBlKQogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6U3RhdGU6
OmluaXRGb3JTdHlsZVJlc29sdmUoRG9jdW1lbnQqIGRvY3VtZW50LCBFbGVtZW50KiBlLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZykKK2lu
bGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0Rm9yU3R5bGVSZXNvbHZlKERvY3Vt
ZW50KiBkb2N1bWVudCwgRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25z
dCBQc2V1ZG9TdHlsZVJlcXVlc3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgUmVuZGVyUmVnaW9uKiBy
ZWdpb25Gb3JTdHlsaW5nKQogeworICAgIG1fcHNldWRvU3R5bGVSZXF1ZXN0ID0gcHNldWRvU3R5
bGVSZXF1ZXN0OwogICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZvclN0eWxpbmc7CiAK
ICAgICBpZiAoZSkgewpAQCAtNDQ5LDYgKzgzMiw3IEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjppbml0Rm9yU3R5bGVSZXNvbHZlKERvY3VtZW50KiBkb2N1bWVudCwgRWxlbWVu
CiAKICAgICBtX3N0eWxlID0gMDsKICAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIo
KTsKKyAgICBtX3J1bGVMaXN0ID0gMDsKICAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwogfQogCkBA
IC01MTYsOSArOTAwLDE3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlk
YXRlTWF0Y2hlc1J1bGVTZXQoUnVsZVNldCogcnVsZVNldCkKIHsKICAgICBpZiAoIXJ1bGVTZXQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxl
Y3Rvcih0aGlzLCBtX3N0YXRlKTsKLSAgICByZXR1cm4gY29sbGVjdG9yLmhhc0FueU1hdGNoaW5n
UnVsZXMocnVsZVNldCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOworCisg
ICAgbV9zdGF0ZS5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKKyAgICBp
bnQgZmlyc3RSdWxlSW5kZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOworICAgIFJ1bGVSYW5n
ZSBydWxlUmFuZ2UoZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOworICAgIGNvbGxlY3RN
YXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVzdChydWxlU2V0KSwgcnVsZVJhbmdlKTsKKyAgICBtX3N0
YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpSZXNvbHZpbmdTdHlsZSk7CisgICAgaWYgKG1f
c3RhdGUubWF0Y2hlZFJ1bGVzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOworICAgIHJldHVybiB0cnVlOwogfQog
CiBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVt
ZW50KiBlbGVtZW50KSBjb25zdApAQCAtNzg2LDYgKzExNzgsMjYgQEAgUmVuZGVyU3R5bGUqIFN0
eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICByZXR1cm4gc2hhcmVFbGVtZW50
LT5yZW5kZXJTdHlsZSgpOwogfQogCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhN
YXRjaFJlc3VsdCYgcmVzdWx0KQoreworICAgIE1hdGNoaW5nVUFSdWxlc1Njb3BlIHNjb3BlOwor
CisgICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4K
KyAgICBpZiAoQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCkK
KyAgICAgICAgcmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CisgICAgUnVsZVNldCogdXNlckFn
ZW50U3R5bGVTaGVldCA9IG1fbWVkaXVtLT5tZWRpYVR5cGVNYXRjaFNwZWNpZmljKCJwcmludCIp
CisgICAgICAgID8gQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0UHJpbnRTdHlsZSA6IENT
U0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFN0eWxlOworICAgIG1hdGNoVUFSdWxlcyhyZXN1
bHQsIHVzZXJBZ2VudFN0eWxlU2hlZXQpOworCisgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1h
dGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgorICAgIGlmIChkb2N1
bWVudCgpLT5pblF1aXJrc01vZGUoKSkKKyAgICAgICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdCwgQ1NT
RGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0UXVpcmtzU3R5bGUpOworCisgICAgLy8gSWYgZG9j
dW1lbnQgdXNlcyB2aWV3IHNvdXJjZSBzdHlsZXMgKGluIHZpZXcgc291cmNlIG1vZGUgb3IgaW4g
eG1sIHZpZXdlciBtb2RlKSwgdGhlbiB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJj
ZSBzdHlsZSBzaGVldC4KKyAgICBpZiAoZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCkpCisgICAg
ICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6dmlld1NvdXJj
ZVN0eWxlKCkpOworfQorCiBzdGF0aWMgdm9pZCBzZXRTdHlsZXNGb3JQYWdpbmF0aW9uTW9kZShQ
YWdpbmF0aW9uOjpNb2RlIHBhZ2luYXRpb25Nb2RlLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAg
ICAgaWYgKHBhZ2luYXRpb25Nb2RlID09IFBhZ2luYXRpb246OlVucGFnaW5hdGVkKQpAQCAtOTgz
LDcgKzEzOTUsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHls
ZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogCiAgICAgU3RhdGUmIHN0YXRl
ID0gbV9zdGF0ZTsKICAgICBpbml0RWxlbWVudChlbGVtZW50KTsKLSAgICBzdGF0ZS5pbml0Rm9y
U3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQsIHJlZ2lvbkZv
clN0eWxpbmcpOworICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZWxl
bWVudCwgZGVmYXVsdFBhcmVudCwgTk9QU0VVRE8sIHJlZ2lvbkZvclN0eWxpbmcpOwogICAgIGlm
IChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0YXRlLmRpc3RyaWJ1
dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHls
ZSA9IGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgICAgIGlmIChzaGFyZWRTdHlsZSkKQEAgLTEw
MjUsMTYgKzE0MzcsMTMgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKICAgICBpZiAobmVlZHND
b2xsZWN0aW9uKQogICAgICAgICBtX3J1bGVTZXRzLmNvbGxlY3RGZWF0dXJlcyhkb2N1bWVudCgp
LT5pc1ZpZXdTb3VyY2UoKSwgbV9zY29wZVJlc29sdmVyLmdldCgpKTsKIAotICAgIEVsZW1lbnRS
dWxlQ29sbGVjdG9yIGNvbGxlY3Rvcih0aGlzLCBzdGF0ZSk7Ci0gICAgY29sbGVjdG9yLnNldFJl
Z2lvbkZvclN0eWxpbmcocmVnaW9uRm9yU3R5bGluZyk7Ci0gICAgY29sbGVjdG9yLnNldE1lZGl1
bShtX21lZGl1bS5nZXQoKSk7Ci0KKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKICAgICBp
ZiAobWF0Y2hpbmdCZWhhdmlvciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykKLSAgICAgICAg
Y29sbGVjdG9yLm1hdGNoVUFSdWxlcygpOworICAgICAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1
bHQpOwogICAgIGVsc2UKLSAgICAgICAgY29sbGVjdG9yLm1hdGNoQWxsUnVsZXMobV9tYXRjaEF1
dGhvckFuZFVzZXJTdHlsZXMsIG1hdGNoaW5nQmVoYXZpb3IgIT0gTWF0Y2hBbGxSdWxlc0V4Y2x1
ZGluZ1NNSUwpOworICAgICAgICBtYXRjaEFsbFJ1bGVzKG1hdGNoUmVzdWx0LCBtYXRjaGluZ0Jl
aGF2aW9yICE9IE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKTsKIAotICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXMoY29sbGVjdG9yLm1hdGNoZWRSZXN1bHQoKSwgZWxlbWVudCk7CisgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllcyhtYXRjaFJlc3VsdCwgZWxlbWVudCk7CiAKICAgICAvLyBDbGVh
biB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1v
bmcgb3RoZXIgZml4dXBzKS4KICAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5wYXJlbnRTdHlsZSgpLCBlbGVtZW50KTsKQEAgLTEwNTEsNyArMTQ2MCw3IEBAIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3Qg
UmVuZGVyU3R5bGUqIGVsZW1lCiB7CiAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OwogICAgIGlmIChr
ZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAgICByZXN1bHQuYWRkTWF0Y2hlZFByb3BlcnRp
ZXMoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSk7CisgICAgICAgIGFkZE1hdGNoZWRQcm9wZXJ0aWVz
KHJlc3VsdCwga2V5ZnJhbWUtPnByb3BlcnRpZXMoKSk7CiAKICAgICBBU1NFUlQoIW1fc3RhdGUu
c3R5bGUoKSk7CiAKQEAgLTExNzUsNyArMTU4NCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBjb25zdCBQ
CiAKICAgICBpbml0RWxlbWVudChlKTsKIAotICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUo
ZG9jdW1lbnQoKSwgZSwgcGFyZW50U3R5bGUpOworICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29s
dmUoZG9jdW1lbnQoKSwgZSwgcGFyZW50U3R5bGUsIHBzZXVkb1N0eWxlUmVxdWVzdCk7CiAgICAg
c3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKICAgICBzdGF0ZS5zdHlsZSgp
LT5pbmhlcml0RnJvbShtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogCkBAIC0xMTgzLDIyICsxNTky
LDIwIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxl
Rm9yRWxlbWVudChFbGVtZW50KiBlLCBjb25zdCBQCiAgICAgLy8gdGhvc2UgcnVsZXMuCiAKICAg
ICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9yIHJ1bGVzLgotICAgIEVsZW1lbnRSdWxlQ29s
bGVjdG9yIGNvbGxlY3Rvcih0aGlzLCBzdGF0ZSk7Ci0gICAgY29sbGVjdG9yLnNldFBzZXVkb1N0
eWxlUmVxdWVzdChwc2V1ZG9TdHlsZVJlcXVlc3QpOwotICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0o
bV9tZWRpdW0uZ2V0KCkpOwotICAgIGNvbGxlY3Rvci5tYXRjaFVBUnVsZXMoKTsKKyAgICBNYXRj
aFJlc3VsdCBtYXRjaFJlc3VsdDsKKyAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOwogCiAg
ICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7Ci0gICAgICAgIGNvbGxlY3Rvci5t
YXRjaFVzZXJSdWxlcyhmYWxzZSk7Ci0gICAgICAgIGNvbGxlY3Rvci5tYXRjaEF1dGhvclJ1bGVz
KGZhbHNlKTsKKyAgICAgICAgbWF0Y2hVc2VyUnVsZXMobWF0Y2hSZXN1bHQsIGZhbHNlKTsKKyAg
ICAgICAgbWF0Y2hBdXRob3JSdWxlcyhtYXRjaFJlc3VsdCwgZmFsc2UpOwogICAgIH0KIAotICAg
IGlmIChjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLm1hdGNoZWRQcm9wZXJ0aWVzLmlzRW1wdHko
KSkKKyAgICBpZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIHN0YXRlLnN0eWxlKCktPnNldFN0eWxlVHlwZShwc2V1ZG9T
dHlsZVJlcXVlc3QucHNldWRvSWQpOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb2xs
ZWN0b3IubWF0Y2hlZFJlc3VsdCgpLCBlKTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1h
dGNoUmVzdWx0LCBlKTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNw
bGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgogICAgIGFkanVz
dFJlbmRlclN0eWxlKHN0YXRlLnN0eWxlKCksIG1fc3RhdGUucGFyZW50U3R5bGUoKSwgMCk7CkBA
IC0xMjE5LDEyICsxNjI2LDE3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1fc3RhdGUuc2V0U3R5bGUoUmVu
ZGVyU3R5bGU6OmNyZWF0ZSgpKTsKICAgICBtX3N0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKG1f
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKIAotICAgIFBhZ2VSdWxlQ29sbGVjdG9yIGNvbGxl
Y3RvcihtX3N0YXRlLCBtX3J1bGVTZXRzKTsKLSAgICBjb2xsZWN0b3IubWF0Y2hBbGxQYWdlUnVs
ZXMocGFnZUluZGV4KTsKKyAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVmdFBhZ2UocGFnZUlu
ZGV4KTsKKyAgICBjb25zdCBib29sIGlzRmlyc3QgPSBpc0ZpcnN0UGFnZShwYWdlSW5kZXgpOwor
ICAgIGNvbnN0IFN0cmluZyBwYWdlID0gcGFnZU5hbWUocGFnZUluZGV4KTsKKyAgICAKKyAgICBN
YXRjaFJlc3VsdCByZXN1bHQ7CisgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0LCBDU1NEZWZhdWx0
U3R5bGVTaGVldHM6OmRlZmF1bHRQcmludFN0eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwor
ICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9ydWxlU2V0cy51c2VyU3R5bGUoKSwgaXNMZWZ0
LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9y
IFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCisgICAgbWF0
Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCksIGlzTGVmdCwgaXNG
aXJzdCwgcGFnZSk7CiAgICAgbV9zdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAgICAgYm9v
bCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7Ci0KLSAgICBNYXRjaFJlc3VsdCYgcmVzdWx0ID0gY29s
bGVjdG9yLm1hdGNoZWRSZXN1bHQoKTsKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHJlc3VsdCwgZmFsc2Us
IDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsK
ICNlbmRpZgpAQCAtMTY1MSwzMSArMjA2Myw4OSBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBT
dHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBQcwog
ICAgIGlmICghZSB8fCAhZS0+ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgaW5pdEVsZW1lbnQoZSk7Ci0gICAgbV9zdGF0ZS5pbml0
Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUsIDApOworICAgIG1fc3RhdGUuc2V0TW9kZShT
ZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAKLSAgICBFbGVtZW50UnVsZUNvbGxl
Y3RvciBjb2xsZWN0b3IodGhpcywgbV9zdGF0ZSk7Ci0gICAgY29sbGVjdG9yLnNldE1vZGUoU2Vs
ZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpOwotICAgIGNvbGxlY3Rvci5zZXRQc2V1ZG9T
dHlsZVJlcXVlc3QoUHNldWRvU3R5bGVSZXF1ZXN0KHBzZXVkb0lkKSk7Ci0gICAgY29sbGVjdG9y
LnNldE1lZGl1bShtX21lZGl1bS5nZXQoKSk7CisgICAgaW5pdEVsZW1lbnQoZSk7CisgICAgbV9z
dGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUsIDAsIHBzZXVkb0lkKTsKIAor
ICAgIE1hdGNoUmVzdWx0IGR1bW15OwogICAgIGlmIChydWxlc1RvSW5jbHVkZSAmIFVBQW5kVXNl
ckNTU1J1bGVzKSB7CiAgICAgICAgIC8vIEZpcnN0IHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHVz
ZXIgYWdlbnQgc2hlZXQuCi0gICAgICAgIGNvbGxlY3Rvci5tYXRjaFVBUnVsZXMoKTsKKyAgICAg
ICAgbWF0Y2hVQVJ1bGVzKGR1bW15KTsKIAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBz
aGVldCBydWxlcy4KICAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAg
ICAgICAgICAgY29sbGVjdG9yLm1hdGNoVXNlclJ1bGVzKHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlD
U1NSdWxlcyk7CisgICAgICAgICAgICBtYXRjaFVzZXJSdWxlcyhkdW1teSwgcnVsZXNUb0luY2x1
ZGUgJiBFbXB0eUNTU1J1bGVzKTsKICAgICB9CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAg
IGNvbGxlY3Rvci5zZXRTYW1lT3JpZ2luT25seSghKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmln
aW5DU1NSdWxlcykpOworICAgICAgICBtX3N0YXRlLnNldFNhbWVPcmlnaW5Pbmx5KCEocnVsZXNU
b0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKSk7CiAKICAgICAgICAgLy8gQ2hlY2sgdGhl
IHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCi0gICAgICAgIGNvbGxlY3Rvci5tYXRjaEF1dGhvclJ1
bGVzKHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAgIG1hdGNoQXV0aG9y
UnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisKKyAgICAgICAg
bV9zdGF0ZS5zZXRTYW1lT3JpZ2luT25seShmYWxzZSk7CisgICAgfQorCisgICAgbV9zdGF0ZS5z
ZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpOworCisgICAgcmV0dXJuIG1f
c3RhdGUudGFrZVJ1bGVMaXN0KCk7Cit9CisKK2lubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnJ1
bGVNYXRjaGVzKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBTZWxlY3RvckNoZWNrZXI6OkJlaGF2aW9y
QXRCb3VuZGFyeSBiZWhhdmlvckF0Qm91bmRhcnkpCit7CisgICAgU3RhdGUmIHN0YXRlID0gbV9z
dGF0ZTsKKworICAgIGlmIChydWxlRGF0YS5oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKSkgewor
ICAgICAgICAvLyBXZSBrbm93IHRoaXMgc2VsZWN0b3IgZG9lcyBub3QgaW5jbHVkZSBhbnkgcHNl
dWRvIGVsZW1lbnRzLgorICAgICAgICBpZiAoc3RhdGUucHNldWRvU3R5bGVSZXF1ZXN0KCkucHNl
dWRvSWQgIT0gTk9QU0VVRE8pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8v
IFdlIGtub3cgYSBzdWZmaWNpZW50bHkgc2ltcGxlIHNpbmdsZSBwYXJ0IHNlbGVjdG9yIG1hdGNo
ZXMgc2ltcGx5IGJlY2F1c2Ugd2UgZm91bmQgaXQgZnJvbSB0aGUgcnVsZSBoYXNoLgorICAgICAg
ICAvLyBUaGlzIGlzIGxpbWl0ZWQgdG8gSFRNTCBvbmx5IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hl
Y2sgdGhlIG5hbWVzcGFjZS4KKyAgICAgICAgaWYgKHJ1bGVEYXRhLmhhc1JpZ2h0bW9zdFNlbGVj
dG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc0hU
TUxFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmICghcnVsZURhdGEuaGFzTXVsdGlwYXJ0U2Vs
ZWN0b3IoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocnVsZURhdGEuc2VsZWN0b3IoKS0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnICYm
ICFTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoc3RhdGUuZWxlbWVudCgpLCBydWxlRGF0YS5z
ZWxlY3RvcigpLT50YWdRTmFtZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgU2VsZWN0b3JDaGVja2VyRmFzdFBhdGggc2VsZWN0b3JDaGVja2VyRmFzdFBhdGgocnVsZURh
dGEuc2VsZWN0b3IoKSwgc3RhdGUuZWxlbWVudCgpKTsKKyAgICAgICAgaWYgKCFzZWxlY3RvckNo
ZWNrZXJGYXN0UGF0aC5tYXRjaGVzUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gc2VsZWN0b3JDaGVja2VyRmFz
dFBhdGgubWF0Y2hlcygpOwogICAgIH0KIAotICAgIHJldHVybiBjb2xsZWN0b3IubWF0Y2hlZFJ1
bGVMaXN0KCk7CisgICAgLy8gU2xvdyBwYXRoLgorICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3Rv
ckNoZWNrZXIoZG9jdW1lbnQoKSwgc3RhdGUubW9kZSgpKTsKKyAgICBTZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNvbnRleHQocnVsZURhdGEuc2VsZWN0b3IoKSwgc3Rh
dGUuZWxlbWVudCgpLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOworICAg
IGNvbnRleHQuZWxlbWVudFN0eWxlID0gc3RhdGUuc3R5bGUoKTsKKyAgICBjb250ZXh0LnNjb3Bl
ID0gc2NvcGU7CisgICAgY29udGV4dC5wc2V1ZG9JZCA9IHN0YXRlLnBzZXVkb1N0eWxlUmVxdWVz
dCgpLnBzZXVkb0lkOworICAgIGNvbnRleHQuc2Nyb2xsYmFyID0gc3RhdGUucHNldWRvU3R5bGVS
ZXF1ZXN0KCkuc2Nyb2xsYmFyOworICAgIGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9IHN0YXRlLnBz
ZXVkb1N0eWxlUmVxdWVzdCgpLnNjcm9sbGJhclBhcnQ7CisgICAgY29udGV4dC5iZWhhdmlvckF0
Qm91bmRhcnkgPSBiZWhhdmlvckF0Qm91bmRhcnk7CisgICAgU2VsZWN0b3JDaGVja2VyOjpNYXRj
aCBtYXRjaCA9IHNlbGVjdG9yQ2hlY2tlci5tYXRjaChjb250ZXh0LCBkeW5hbWljUHNldWRvLCBE
T01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3koKSk7CisgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9y
Q2hlY2tlcjo6U2VsZWN0b3JNYXRjaGVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KHN0YXRlLnBzZXVkb1N0eWxlUmVxdWVzdCgpLnBzZXVkb0lkICE9IE5PUFNFVURPICYmIHN0YXRl
LnBzZXVkb1N0eWxlUmVxdWVzdCgpLnBzZXVkb0lkICE9IGR5bmFtaWNQc2V1ZG8pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHlsZVJlc29sdmVy
OjpjaGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3Rvciwg
RWxlbWVudCogcmVnaW9uRWxlbWVudCkKK3sKKyAgICBpZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFy
ZWdpb25FbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTZWxlY3RvckNoZWNr
ZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KCksIG1fc3RhdGUubW9kZSgpKTsKKyAgICBmb3Ig
KGNvbnN0IENTU1NlbGVjdG9yKiBzID0gcmVnaW9uU2VsZWN0b3I7IHM7IHMgPSBDU1NTZWxlY3Rv
ckxpc3Q6Om5leHQocykpIHsKKyAgICAgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNr
aW5nQ29udGV4dCBzZWxlY3RvckNoZWNraW5nQ29udGV4dChzLCByZWdpb25FbGVtZW50LCBTZWxl
Y3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVkKTsKKyAgICAgICAgUHNldWRvSWQgaWdu
b3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2Vy
Lm1hdGNoKHNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0LCBpZ25vcmVEeW5hbWljUHNldWRvLCBET01T
aWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3koKSkgPT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1h
dGNoZXMpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5NTQsNiArMjQy
NCw4NiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3Qg
TWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIGFkZFRvTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpLCBjYWNoZUhhc2gsIG1h
dGNoUmVzdWx0KTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVQYWdlUnVsZXMoY29u
c3QgU3R5bGVSdWxlUGFnZSogcjEsIGNvbnN0IFN0eWxlUnVsZVBhZ2UqIHIyKQoreworICAgIHJl
dHVybiByMS0+c2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKSA8IHIyLT5zZWxlY3RvcigpLT5zcGVj
aWZpY2l0eSgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzKE1hdGNo
UmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNG
aXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCit7CisgICAgaWYgKCFydWxlcykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiBtYXRjaGVkUGFnZVJ1
bGVzOworICAgIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChtYXRjaGVkUGFnZVJ1bGVzLCBydWxlcy0+
cGFnZVJ1bGVzKCksIGlzTGVmdFBhZ2UsIGlzRmlyc3RQYWdlLCBwYWdlTmFtZSk7CisgICAgaWYg
KG1hdGNoZWRQYWdlUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6
OnN0YWJsZV9zb3J0KG1hdGNoZWRQYWdlUnVsZXMuYmVnaW4oKSwgbWF0Y2hlZFBhZ2VSdWxlcy5l
bmQoKSwgY29tcGFyZVBhZ2VSdWxlcyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bWF0Y2hlZFBhZ2VSdWxlcy5zaXplKCk7IGkrKykKKyAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRp
ZXMocmVzdWx0LCBtYXRjaGVkUGFnZVJ1bGVzW2ldLT5wcm9wZXJ0aWVzKCkpOworfQorCitzdGF0
aWMgYm9vbCBjaGVja1BhZ2VTZWxlY3RvckNvbXBvbmVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYg
cGFnZU5hbWUpCit7CisgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogY29tcG9uZW50ID0gc2Vs
ZWN0b3I7IGNvbXBvbmVudDsgY29tcG9uZW50ID0gY29tcG9uZW50LT50YWdIaXN0b3J5KCkpIHsK
KyAgICAgICAgaWYgKGNvbXBvbmVudC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6VGFnKSB7Cisg
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IGNvbXBvbmVudC0+dGFn
UU5hbWUoKS5sb2NhbE5hbWUoKTsKKyAgICAgICAgICAgIGlmIChsb2NhbE5hbWUgIT0gc3RhckF0
b20gJiYgbG9jYWxOYW1lICE9IHBhZ2VOYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHBzZXVkb1R5
cGUgPSBjb21wb25lbnQtPnBzZXVkb1R5cGUoKTsKKyAgICAgICAgaWYgKChwc2V1ZG9UeXBlID09
IENTU1NlbGVjdG9yOjpQc2V1ZG9MZWZ0UGFnZSAmJiAhaXNMZWZ0UGFnZSkKKyAgICAgICAgICAg
IHx8IChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9SaWdodFBhZ2UgJiYgaXNMZWZ0
UGFnZSkKKyAgICAgICAgICAgIHx8IChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9G
aXJzdFBhZ2UgJiYgIWlzRmlyc3RQYWdlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+
JiBtYXRjaGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHJ1bGVzLCBib29s
IGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFN0eWxlUnVsZVBhZ2UqIHJ1bGUgPSBydWxlc1tpXTsKKworICAgICAgICBpZiAoIWNoZWNr
UGFnZVNlbGVjdG9yQ29tcG9uZW50cyhydWxlLT5zZWxlY3RvcigpLCBpc0xlZnRQYWdlLCBpc0Zp
cnN0UGFnZSwgcGFnZU5hbWUpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8g
SWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0Lgor
ICAgICAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVy
dGllcygpOworICAgICAgICBpZiAoIXByb3BlcnRpZXMgfHwgcHJvcGVydGllcy0+aXNFbXB0eSgp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gQWRkIHRoaXMgcnVsZSB0byBv
dXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVzLgorICAgICAgICBtYXRjaGVkUnVsZXMuYXBwZW5kKHJ1
bGUpOworICAgIH0KK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjppc0xlZnRQYWdlKGludCBwYWdl
SW5kZXgpIGNvbnN0Cit7CisgICAgYm9vbCBpc0ZpcnN0UGFnZUxlZnQgPSBmYWxzZTsKKyAgICBp
ZiAoIW1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkp
CisgICAgICAgIGlzRmlyc3RQYWdlTGVmdCA9IHRydWU7CisKKyAgICByZXR1cm4gKHBhZ2VJbmRl
eCArIChpc0ZpcnN0UGFnZUxlZnQgPyAxIDogMCkpICUgMjsKK30KKworYm9vbCBTdHlsZVJlc29s
dmVyOjppc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBJ
biBjYXNlIG9mIGZvcmNlZCBsZWZ0L3JpZ2h0IHBhZ2UsIHBhZ2UgYXQgaW5kZXggMSAobm90IDAp
IGNhbiBiZSB0aGUgZmlyc3QgcGFnZS4KKyAgICByZXR1cm4gKCFwYWdlSW5kZXgpOworfQorCitT
dHJpbmcgU3R5bGVSZXNvbHZlcjo6cGFnZU5hbWUoaW50IC8qIHBhZ2VJbmRleCAqLykgY29uc3QK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHBhZ2UgaW5kZXggdG8gcGFnZSBuYW1lIG1hcHBp
bmcuCisgICAgcmV0dXJuICIiOworfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUq
IHN0eWxlKQogewogICAgIGluaXRFbGVtZW50KDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmgKaW5kZXggNDcyMDExOWRkOWJlZjc4NjlkMGI4NGQ3MWY1MzBiODYyMGM1YjM3Ny4uNDJjOTVj
OTFmZDg0ZTNmMmEzYmFlNjYxMTE1MTI0NjJlOGYwMjM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5oCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNp
bmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5oIgot
I2luY2x1ZGUgIlNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVJ
bmhlcml0ZWREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSAiVmlld3BvcnRTdHlsZVJlc29sdmVyLmgiCkBAIC0xNTcsMTAgKzE1NiwxMiBAQCBwdWJsaWM6
CiAgICAgTWF0Y2hSZXF1ZXN0KFJ1bGVTZXQqIHJ1bGVTZXQsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMgPSBmYWxzZSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSAwLCBTZWxlY3RvckNoZWNr
ZXI6OkJlaGF2aW9yQXRCb3VuZGFyeSBiZWhhdmlvckF0Qm91bmRhcnkgPSBTZWxlY3RvckNoZWNr
ZXI6OkRvZXNOb3RDcm9zc0JvdW5kYXJ5KQogICAgICAgICA6IHJ1bGVTZXQocnVsZVNldCkKICAg
ICAgICAgLCBpbmNsdWRlRW1wdHlSdWxlcyhpbmNsdWRlRW1wdHlSdWxlcykKLSAgICAgICAgLCBz
Y29wZShzY29wZSkgeyB9CisgICAgICAgICwgc2NvcGUoc2NvcGUpCisgICAgICAgICwgYmVoYXZp
b3JBdEJvdW5kYXJ5KGJlaGF2aW9yQXRCb3VuZGFyeSkgeyB9CiAgICAgY29uc3QgUnVsZVNldCog
cnVsZVNldDsKICAgICBjb25zdCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzOwogICAgIGNvbnN0IENv
bnRhaW5lck5vZGUqIHNjb3BlOworICAgIGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6QmVoYXZpb3JB
dEJvdW5kYXJ5IGJlaGF2aW9yQXRCb3VuZGFyeTsKIH07CiAKIC8vIFRoaXMgY2xhc3Mgc2VsZWN0
cyBhIFJlbmRlclN0eWxlIGZvciBhIGdpdmVuIGVsZW1lbnQgYmFzZWQgb24gYSBjb2xsZWN0aW9u
IG9mIHN0eWxlc2hlZXRzLgpAQCAtMjA2LDcgKzIwNyw2IEBAIHB1YmxpYzoKIAogICAgIERvY3Vt
ZW50UnVsZVNldHMmIHJ1bGVTZXRzKCkgeyByZXR1cm4gbV9ydWxlU2V0czsgfQogICAgIGNvbnN0
IERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlU2V0czsg
fQotICAgIFNlbGVjdG9yRmlsdGVyJiBzZWxlY3RvckZpbHRlcigpIHsgcmV0dXJuIG1fc2VsZWN0
b3JGaWx0ZXI7IH0KIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1df
RE9NKQogICAgIFN0eWxlU2NvcGVSZXNvbHZlciogZW5zdXJlU2NvcGVSZXNvbHZlcigpCkBAIC0z
MjUsNiArMzI1LDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbG9hZFBlbmRpbmdSZXNvdXJjZXMo
KTsKIAorcHJpdmF0ZToKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0
IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZh
bWlseSBoYXMgY2hhbmdlZC4gLWR3aAorICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hh
bmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNo
ZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7
CisgICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7CisKKyAgICB2b2lkIGFkanVzdFJl
bmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUsIEVsZW1lbnQqKTsKKwogICAgIHN0cnVjdCBSdWxlUmFuZ2UgewogICAgICAgICBSdWxl
UmFuZ2UoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KTogZmlyc3RSdWxl
SW5kZXgoZmlyc3RSdWxlSW5kZXgpLCBsYXN0UnVsZUluZGV4KGxhc3RSdWxlSW5kZXgpIHsgfQog
ICAgICAgICBpbnQmIGZpcnN0UnVsZUluZGV4OwpAQCAtMzY2LDIyICszNzQsMzAgQEAgcHVibGlj
OgogICAgICAgICBWZWN0b3I8U3R5bGVSdWxlKiwgNjQ+IG1hdGNoZWRSdWxlczsKICAgICAgICAg
TWF0Y2hSYW5nZXMgcmFuZ2VzOwogICAgICAgICBib29sIGlzQ2FjaGVhYmxlOwotCi0gICAgICAg
IHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVy
dGllcywgU3R5bGVSdWxlKiA9IDAsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBTZWxlY3RvckNo
ZWNrZXI6Ok1hdGNoQWxsLCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdoaXRlbGlz
dE5vbmUpOwogICAgIH07CiAKLXByaXZhdGU6Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1
cCB0aGUgZGVmYXVsdCBmb250IHNpemUgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdl
bmVyaWMgZm9udCBmYW1pbHkgaGFzIGNoYW5nZWQuIC1kd2gKLSAgICB2b2lkIGNoZWNrRm9yR2Vu
ZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7
Ci0gICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpOwotICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOworICAgIHN0
YXRpYyB2b2lkIGFkZE1hdGNoZWRQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgY29uc3QgU3R5bGVQ
cm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiA9IDAsIHVuc2lnbmVkIGxpbmtNYXRj
aFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsLCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUg
PSBQcm9wZXJ0eVdoaXRlbGlzdE5vbmUpOworICAgIHZvaWQgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhNYXRjaFJlc3VsdCYsIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqLCBib29sIGlzQ2FjaGVh
YmxlID0gdHJ1ZSk7CiAKLSAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBz
dHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQqKTsKKyAgICB2
b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGll
cyk7CisgICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNo
VUFSdWxlcyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqKTsKKyAgICB2b2lkIG1hdGNoQXV0aG9yUnVs
ZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNo
VXNlclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9p
ZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcyk7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVk
ZUVtcHR5UnVsZXMpOworCisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRj
aFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
UmVnaW9uKGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOworICAgIHZvaWQgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBjb25zdCBNYXRj
aFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKIAogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNv
bnN0IFJ1bGVEYXRhJikgY29uc3Q7CisgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAg
dm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKIAorICAgIGJv
b2wgcnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSwgUHNldWRvSWQmLCBTZWxlY3RvckNoZWNrZXI6OkJlaGF2aW9yQXRCb3VuZGFyeSA9IFNlbGVj
dG9yQ2hlY2tlcjo6RG9lc05vdENyb3NzQm91bmRhcnkpOworICAgIGJvb2wgY2hlY2tSZWdpb25T
ZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciogcmVnaW9uU2VsZWN0b3IsIEVsZW1lbnQqIHJlZ2lv
bkVsZW1lbnQpOwogICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJl
c3VsdCYsIGNvbnN0IEVsZW1lbnQqKTsKLQogICAgIGVudW0gU3R5bGVBcHBsaWNhdGlvblBhc3Mg
ewogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgICAgICBWYXJpYWJsZURlZmluaXRpb25z
LApAQCAtNDMwLDkgKzQ0NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9wYXJlbnRTdHlsZSgw
KQogICAgICAgICAsIG1fcm9vdEVsZW1lbnRTdHlsZSgwKQogICAgICAgICAsIG1fcmVnaW9uRm9y
U3R5bGluZygwKQorICAgICAgICAsIG1fc2FtZU9yaWdpbk9ubHkoZmFsc2UpCisgICAgICAgICwg
bV9wc2V1ZG9TdHlsZVJlcXVlc3QoTk9QU0VVRE8pCiAgICAgICAgICwgbV9lbGVtZW50TGlua1N0
YXRlKE5vdEluc2lkZUxpbmspCiAgICAgICAgICwgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9p
bnQoZmFsc2UpCiAgICAgICAgICwgbV9lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoZmFsc2Up
CisgICAgICAgICwgbV9tb2RlKFNlbGVjdG9yQ2hlY2tlcjo6UmVzb2x2aW5nU3R5bGUpCiAgICAg
ICAgICwgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSkKICAgICAgICAgLCBtX2Fw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpCiAjaWYgRU5BQkxFKENTU19TSEFE
RVJTKQpAQCAtNDQ1LDcgKzQ2NCw3IEBAIHB1YmxpYzoKIAogICAgIHB1YmxpYzoKICAgICAgICAg
dm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7Ci0gICAgICAgIHZvaWQgaW5pdEZvclN0eWxlUmVz
b2x2ZShEb2N1bWVudCosIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBS
ZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKKyAgICAgICAgdm9pZCBpbml0Rm9y
U3R5bGVSZXNvbHZlKERvY3VtZW50KiwgRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSA9IDAsIGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYgPSBQc2V1ZG9TdHlsZVJlcXVlc3QoTk9Q
U0VVRE8pLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKICAgICAgICAgdm9p
ZCBjbGVhcigpOwogCiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsgfQpAQCAtNDU1LDE3ICs0NzQsMjUgQEAgcHVibGljOgog
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgp
OyB9CiAgICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHRha2VTdHlsZSgpIHsgcmV0dXJu
IG1fc3R5bGUucmVsZWFzZSgpOyB9CiAKKyAgICAgICAgU3RhdGljQ1NTUnVsZUxpc3QqIGVuc3Vy
ZVJ1bGVMaXN0KCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHRha2VSdWxlTGlz
dCgpIHsgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOyB9CisKICAgICAgICAgY29uc3QgQ29u
dGFpbmVyTm9kZSogcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQog
ICAgICAgICB2b2lkIHNldFBhcmVudFN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgeyBt
X3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7IH0KICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQogICAgICAgICBSZW5kZXJT
dHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHls
ZTsgfQogCiAgICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnaW9uRm9yU3R5bGluZzsgfQorICAgICAgICB2b2lkIHNldFNhbWVP
cmlnaW5Pbmx5KGJvb2wgaXNTYW1lT3JpZ2luT25seSkgeyBtX3NhbWVPcmlnaW5Pbmx5ID0gaXNT
YW1lT3JpZ2luT25seTsgfQorICAgICAgICBib29sIGlzU2FtZU9yaWdpbk9ubHkoKSBjb25zdCB7
IHJldHVybiBtX3NhbWVPcmlnaW5Pbmx5OyB9CisgICAgICAgIGNvbnN0IFBzZXVkb1N0eWxlUmVx
dWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9wc2V1ZG9TdHlsZVJl
cXVlc3Q7IH0KICAgICAgICAgRUluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQogICAgICAgICBib29sIGRpc3RyaWJ1dGVkVG9J
bnNlcnRpb25Qb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBv
aW50OyB9CiAgICAgICAgIHZvaWQgc2V0RWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKGJvb2wg
aXNBZmZlY3RlZCkgeyBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyA9IGlzQWZmZWN0ZWQ7
IH0KICAgICAgICAgYm9vbCBlbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoKSBjb25zdCB7IHJl
dHVybiBtX2VsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlczsgfQotCisgICAgICAgIHZvaWQgc2V0
TW9kZShTZWxlY3RvckNoZWNrZXI6Ok1vZGUgbW9kZSkgeyBtX21vZGUgPSBtb2RlOyB9CisgICAg
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9
CisgICAgICAgIAogICAgICAgICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShi
b29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBpc0FwcGx5OyB9
CiAgICAgICAgIHZvaWQgc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShib29sIGlz
QXBwbHkpIHsgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gaXNBcHBseTsgfQog
ICAgICAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOyB9CkBAIC00OTksOCArNTI2LDkgQEAgcHVi
bGljOgogICAgICAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsg
fQogICAgICAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9y
aWVudGF0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFRleHRPcmllbnRhdGlvbih0
ZXh0T3JpZW50YXRpb24pOyB9CiAKLSAgICAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKSBjb25z
dCB7IHJldHVybiBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsgfQotCisg
ICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiYgbWF0Y2hlZFJ1bGVzKCkgeyByZXR1
cm4gbV9tYXRjaGVkUnVsZXM7IH0KKyAgICAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBS
dWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KKyAgICAgICAg
CiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUUoYnVnIDEwODU2Myk6IHRvIG1ha2UgaXQg
ZWFzaWVyIHRvIHJldmlldywgdGhlc2UgbWVtYmVyCiAgICAgICAgIC8vIHZhcmlhYmxlcyBhcmUg
cHVibGljLiBIb3dldmVyIHdlIHNob3VsZCBhZGQgbWV0aG9kcyB0byBhY2Nlc3MKQEAgLTUxMSwx
NiArNTM5LDI0IEBAIHB1YmxpYzoKICAgICAgICAgQ29udGFpbmVyTm9kZSogbV9wYXJlbnROb2Rl
OwogICAgICAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZTsKICAgICAgICAgUmVuZGVyU3R5
bGUqIG1fcm9vdEVsZW1lbnRTdHlsZTsKLQotICAgICAgICAvLyBSZXF1aXJlZCB0byBBU1NFUlQg
aW4gYXBwbHlQcm9wZXJ0aWVzLgotICAgICAgICBSZW5kZXJSZWdpb24qIG1fcmVnaW9uRm9yU3R5
bGluZzsKICAgICAgICAgCisgICAgICAgIFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5n
OworICAgICAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7CisgICAgICAgIFBzZXVkb1N0eWxlUmVx
dWVzdCBtX3BzZXVkb1N0eWxlUmVxdWVzdDsKKwogICAgICAgICBFSW5zaWRlTGluayBtX2VsZW1l
bnRMaW5rU3RhdGU7CiAKICAgICAgICAgYm9vbCBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2lu
dDsKIAogICAgICAgICBib29sIG1fZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzOwogCisgICAg
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSBtX21vZGU7CisKKyAgICAgICAgLy8gQSBidWZmZXIg
dXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwKKyAg
ICAgICAgLy8gYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZvciBtZXJnZSBzb3J0aW5nLgor
ICAgICAgICBWZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7CisgICAg
ICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKKwogICAgICAgICBib29s
IG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOwogICAgICAgICBib29sIG1fYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKIApAQCAtNjU5LDIxICs2OTUsNiBAQCBpbmxpbmUgYm9v
bCBTdHlsZVJlc29sdmVyOjpoYXNTZWxlY3RvckZvcklkKGNvbnN0IEF0b21pY1N0cmluZyYgaWRW
YWx1ZSkgY29uc3QKICAgICByZXR1cm4gbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMu
Y29udGFpbnMoaWRWYWx1ZS5pbXBsKCkpOwogfQogCi1pbmxpbmUgYm9vbCBjaGVja1JlZ2lvblNl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9u
RWxlbWVudCkKLXsKLSAgICBpZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVj
a2VyKHJlZ2lvbkVsZW1lbnQtPmRvY3VtZW50KCksIFNlbGVjdG9yQ2hlY2tlcjo6UXVlcnlpbmdS
dWxlcyk7Ci0gICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9yOyBz
OyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKSB7Ci0gICAgICAgIFNlbGVjdG9yQ2hlY2tl
cjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQocywgcmVn
aW9uRWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNhYmxlZCk7Ci0gICAg
ICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAgaWYg
KHNlbGVjdG9yQ2hlY2tlci5tYXRjaChzZWxlY3RvckNoZWNraW5nQ29udGV4dCwgaWdub3JlRHlu
YW1pY1BzZXVkbywgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5KCkpID09IFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JNYXRjaGVzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gU3R5bGVSZXNvbHZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmNwcAppbmRleCAzZDk2YjcwMzI2MWEzNGExN2U4YmVkMjllOGUzZjNmZjEyMzA5
MmNiLi45MzRkMDlkMTFhYmVlNzJlNWQwMTE4NDM0MmMwYzc4NDFhZDljZTAxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTk1OCwxMSAr
OTU4LDExIEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlPiBJ
bnNwZWN0b3JDU1NBZ2VudDo6c3RvcFNlbGVjdG9yUHJvCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUoU3R5bGVS
dWxlKiBydWxlLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJz
LCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKiBzdHlsZVNoZWV0Q29sbGVjdGlvbikKK3Zv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUoU3R5bGVSdWxlKiBydWxlLCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogewogLy8gICAgcHJpbnRmKCJJbnNwZWN0b3JDU1NB
Z2VudDo6d2lsbE1hdGNoUnVsZSAlc1xuIiwgcnVsZS0+c2VsZWN0b3JMaXN0KCkuc2VsZWN0b3Jz
VGV4dCgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGlmIChtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUp
Ci0gICAgICAgIG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZS0+c3RhcnRTZWxlY3RvcihpbnNwZWN0
b3JDU1NPTVdyYXBwZXJzLmdldFdyYXBwZXJGb3JSdWxlSW5TaGVldHMocnVsZSwgc3R5bGVTaGVl
dENvbGxlY3Rpb24pKTsKKyAgICAgICAgbV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLT5zdGFydFNl
bGVjdG9yKHN0eWxlUmVzb2x2ZXItPmluc3BlY3RvckNTU09NV3JhcHBlcnMoKS5nZXRXcmFwcGVy
Rm9yUnVsZUluU2hlZXRzKHJ1bGUsIHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPnN0eWxlU2hl
ZXRDb2xsZWN0aW9uKCkpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkTWF0Y2hS
dWxlKGJvb2wgbWF0Y2hlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmgKaW5kZXggNDBmODgyMGUyYTI3OWFiNWU2OGFmOTBkODA2NDQ2YTJiZTU4N2RhMi4u
MTQzZTQ1NGFhOTZiMDE2ODE5ODAzMTUxMGZmNTk3MzhhZjBmZWUxNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTQ3LDkgKzQ3LDcgQEAgY2xh
c3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU1N0eWxlUnVsZTsKIGNsYXNzIENTU1N0
eWxlU2hlZXQ7CiBjbGFzcyBEb2N1bWVudDsKLWNsYXNzIERvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb247CiBjbGFzcyBFbGVtZW50OwotY2xhc3MgSW5zcGVjdG9yQ1NTT01XcmFwcGVyczsKIGNs
YXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNz
IE5hbWVOb2RlTWFwOwpAQCAtMTI3LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc3RvcFNlbGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6
OkNTUzo6U2VsZWN0b3JQcm9maWxlPiYpOwogCiAgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpTZWxlY3RvclByb2ZpbGU+IHN0b3BTZWxlY3RvclByb2ZpbGVySW1wbChFcnJvclN0cmlu
ZyosIGJvb2wgbmVlZFByb2ZpbGUpOwotICAgIHZvaWQgd2lsbE1hdGNoUnVsZShTdHlsZVJ1bGUq
LCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiwgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiop
OworICAgIHZvaWQgd2lsbE1hdGNoUnVsZShTdHlsZVJ1bGUqLCBTdHlsZVJlc29sdmVyKik7CiAg
ICAgdm9pZCBkaWRNYXRjaFJ1bGUoYm9vbCk7CiAgICAgdm9pZCB3aWxsUHJvY2Vzc1J1bGUoU3R5
bGVSdWxlKiwgU3R5bGVSZXNvbHZlciopOwogICAgIHZvaWQgZGlkUHJvY2Vzc1J1bGUoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5jcHAKaW5kZXggMTFiNzRkODAxYWQ0MTU0ZjE5YjBhMjgxOTYwMTdlNjI4NjFiNjYwYS4uZDQ1
YmZmOTU4NTViZjY0MWNiZTQzYjRiMzczN2U4NWFkNmVkNTVlMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTU5
MCwxMSArNTkwLDExIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY2hlZHVs
ZVN0eWxlUmVjYWxjdWxhdGlvbkltcGwoSW5zdHJ1bWVudGluZ0FnCiAgICAgICAgIHJlc291cmNl
QWdlbnQtPmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKGRvY3VtZW50KTsKIH0KIAotSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bE1hdGNoUnVsZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
U3R5bGVSdWxlKiBydWxlLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdy
YXBwZXJzLCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKiBzaGVldENvbGxlY3Rpb24pCitJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsTWF0Y2hSdWxlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBTdHlsZVJ1bGUqIHJ1bGUsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiB7CiAgICAg
SW5zcGVjdG9yQ1NTQWdlbnQqIGNzc0FnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVj
dG9yQ1NTQWdlbnQoKTsKICAgICBpZiAoY3NzQWdlbnQpIHsKLSAgICAgICAgY3NzQWdlbnQtPndp
bGxNYXRjaFJ1bGUocnVsZSwgaW5zcGVjdG9yQ1NTT01XcmFwcGVycywgc2hlZXRDb2xsZWN0aW9u
KTsKKyAgICAgICAgY3NzQWdlbnQtPndpbGxNYXRjaFJ1bGUocnVsZSwgc3R5bGVSZXNvbHZlcik7
CiAgICAgICAgIHJldHVybiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUoaW5zdHJ1bWVu
dGluZ0FnZW50cywgMSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKaW5kZXggMDA4MzA3OTQwNzZmYmEwMGI4NjBl
NTJiYzZkNDhiMTZlNDU5OGE1YS4uOTU3OGI2MDUxYzYyNGFkNzllNmI2MGE5MDdmYWQwYmFhYmMx
MTc4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaApAQCAtNjEsMTIgKzYxLDEwIEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3Mg
RWxlbWVudDsKIGNsYXNzIEV2ZW50Q29udGV4dDsKIGNsYXNzIERvY3VtZW50TG9hZGVyOwotY2xh
c3MgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjsKIGNsYXNzIERldmljZU9yaWVudGF0aW9u
RGF0YTsKIGNsYXNzIEdlb2xvY2F0aW9uUG9zaXRpb247CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CiBjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDsKLWNsYXNzIEluc3BlY3RvckNTU09NV3JhcHBlcnM7
CiBjbGFzcyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb247CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKQEAgLTE3Niw3ICsxNzQsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsUmVj
YWxjdWxhdGVTdHlsZShEb2N1bWVudCopOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2FsY3VsYXRl
U3R5bGUoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAgICAgc3RhdGlj
IHZvaWQgZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24oRG9jdW1lbnQqKTsKLSAgICBzdGF0
aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxNYXRjaFJ1bGUoRG9jdW1lbnQq
LCBTdHlsZVJ1bGUqLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiwgRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbiopOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
d2lsbE1hdGNoUnVsZShEb2N1bWVudCosIFN0eWxlUnVsZSosIFN0eWxlUmVzb2x2ZXIqKTsKICAg
ICBzdGF0aWMgdm9pZCBkaWRNYXRjaFJ1bGUoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llJiwgYm9vbCBtYXRjaGVkKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIHdpbGxQcm9jZXNzUnVsZShEb2N1bWVudCosIFN0eWxlUnVsZSosIFN0eWxlUmVz
b2x2ZXIqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRQcm9jZXNzUnVsZShjb25zdCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUmKTsKQEAgLTM3Nyw3ICszNzUsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbFJlY2FsY3VsYXRlU3R5
bGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBGcmFtZSopOwogICAgIHN0YXRpYyB2b2lkIGRp
ZFJlY2FsY3VsYXRlU3R5bGVJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSYpOwogICAgIHN0YXRpYyB2b2lkIGRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uSW1wbChJ
bnN0cnVtZW50aW5nQWdlbnRzKiwgRG9jdW1lbnQqKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIHdpbGxNYXRjaFJ1bGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
LCBTdHlsZVJ1bGUqLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiwgRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbiopOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
d2lsbE1hdGNoUnVsZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFN0eWxlUnVsZSosIFN0eWxl
UmVzb2x2ZXIqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRNYXRjaFJ1bGVJbXBsKGNvbnN0IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYsIGJvb2wgbWF0Y2hlZCk7CiAgICAgc3RhdGljIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsUHJvY2Vzc1J1bGVJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMqLCBTdHlsZVJ1bGUqLCBTdHlsZVJlc29sdmVyKik7CiAgICAgc3RhdGljIHZv
aWQgZGlkUHJvY2Vzc1J1bGVJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSYpOwpAQCAtMTE4MCwxNyArMTE3OCwxNiBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKERvY3VtZW50KiBkbwogI2Vu
ZGlmCiB9CiAKLWlubGluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVS
dWxlKiBydWxlLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJz
LCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKiBzdHlsZVNoZWV0Q29sbGVjdGlvbikKK2lu
bGluZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsTWF0Y2hSdWxlKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVSdWxlKiBydWxlLCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAg
ICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSgpKTsKICAgICBpZiAoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cyA9IGluc3RydW1lbnRpbmdBZ2VudHNGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIHJl
dHVybiB3aWxsTWF0Y2hSdWxlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBydWxlLCBpbnNwZWN0
b3JDU1NPTVdyYXBwZXJzLCBzdHlsZVNoZWV0Q29sbGVjdGlvbik7CisgICAgICAgIHJldHVybiB3
aWxsTWF0Y2hSdWxlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBydWxlLCBzdHlsZVJlc29sdmVy
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKICAgICBVTlVTRURfUEFSQU0o
cnVsZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGluc3BlY3RvckNTU09NV3JhcHBlcnMpOwotICAgIFVO
VVNFRF9QQVJBTShzdHlsZVNoZWV0Q29sbGVjdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHN0eWxl
UmVzb2x2ZXIpOwogI2VuZGlmCiAgICAgcmV0dXJuIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSgpOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>