<?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>177765</bug_id>
          
          <creation_ts>2017-10-02 12:53:48 -0700</creation_ts>
          <short_desc>Make pertinent AccessCases watch the poly proto watchpoint</short_desc>
          <delta_ts>2017-10-04 19:48:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1355418</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-02 12:53:48 -0700</bug_when>
    <thetext>What will happen today is each individual IC will figure out if the prototype watchpoint should have fired on its own. And they may or may not clear their pre-poly-prototype contents. It&apos;s probably more efficient for all of them to clear their data. This is a good follow up to the poly prototype patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356658</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-04 14:04:48 -0700</bug_when>
    <thetext>Starting this now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356717</commentid>
    <comment_count>2</comment_count>
      <attachid>322740</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-04 16:41:19 -0700</bug_when>
    <thetext>Created attachment 322740
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356719</commentid>
    <comment_count>3</comment_count>
      <attachid>322740</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-04 16:42:20 -0700</bug_when>
    <thetext>Comment on attachment 322740
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=322740&amp;action=review

&gt; Source/JavaScriptCore/jit/Repatch.cpp:169
&gt; +static InlineCacheAction tryCacheGetByID(ExecState* exec, JSValue baseValue, const Identifier&amp; propertyName, const PropertySlot&amp; slot, StructureStubInfo&amp; stubInfo, GetByIDKind kind)

The diff for this file was not generated well. The only thing I&apos;m doing here is moving where we acquire the lock in more so we don&apos;t call fireWatchpointsAndClearStubIfNeeded with the lock held.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356762</commentid>
    <comment_count>4</comment_count>
      <attachid>322740</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-10-04 17:57:59 -0700</bug_when>
    <thetext>Comment on attachment 322740
patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356792</commentid>
    <comment_count>5</comment_count>
      <attachid>322740</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-04 19:48:03 -0700</bug_when>
    <thetext>Comment on attachment 322740
patch

Clearing flags on attachment: 322740

Committed r222891: &lt;http://trac.webkit.org/changeset/222891&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356793</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-04 19:48:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356794</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-04 19:48:41 -0700</bug_when>
    <thetext>&lt;rdar://problem/34826781&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322740</attachid>
            <date>2017-10-04 16:41:19 -0700</date>
            <delta_ts>2017-10-04 19:48:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>60926</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjI4ODYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE3LTEwLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIE1ha2UgcGVydGluZW50IEFjY2Vzc0Nhc2VzIHdhdGNoIHRoZSBwb2x5
IHByb3RvIHdhdGNocG9pbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3Nzc2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3BvbHktcHJvdG8tYW5kLW5vbi1wb2x5LXByb3Rv
LXNhbWUtaWMuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGZvby5DKToK
KyAgICAgICAgKGZvbyk6CisgICAgICAgICh2YWxpZGF0ZSk6CisgICAgICAgICogc3RyZXNzL3Bv
bHktcHJvdG8tY2xlYXItc3R1Yi5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAg
ICAoZm9vLkMpOgorICAgICAgICAoZm9vKToKKwogMjAxNy0xMC0wNCAgUnlhbiBIYWRkYWQgIDxy
eWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgZmFpbHVyZSBleHBlY3RhdGlv
biBmb3IgYXN5bmMtZnVuYy1kZWNsLWRzdHItb2JqLWlkLXB1dC11bnJlc29sdmFibGUtbm8tc3Ry
aWN0LmpzLgpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcG9seS1wcm90by1hbmQtbm9u
LXBvbHktcHJvdG8tc2FtZS1pYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9wb2x5LXByb3RvLWFuZC1ub24tcG9seS1wcm90by1zYW1lLWljLmpzCShub25leGlzdGVu
dCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3BvbHktcHJvdG8tYW5kLW5vbi1wb2x5LXBy
b3RvLXNhbWUtaWMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTEgQEAKK2Z1bmN0aW9u
IGFzc2VydChiLCBtKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJh
ZDoiICsgbSk7Cit9CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICBjbGFzcyBDIHsKKyAgICAgICAg
Y29uc3RydWN0b3IoKSB7CisgICAgICAgICAgICB0aGlzLnAwID0gMAorICAgICAgICAgICAgdGhp
cy5wMSA9IDEKKyAgICAgICAgICAgIHRoaXMucDIgPSAyCisgICAgICAgICAgICB0aGlzLnAzID0g
MworICAgICAgICAgICAgdGhpcy5wNCA9IDQKKyAgICAgICAgICAgIHRoaXMucDUgPSA1CisgICAg
ICAgICAgICB0aGlzLnA2ID0gNgorICAgICAgICAgICAgdGhpcy5wNyA9IDcKKyAgICAgICAgICAg
IHRoaXMucDggPSA4CisgICAgICAgICAgICB0aGlzLnA5ID0gOQorICAgICAgICAgICAgdGhpcy5w
MTAgPSAxMAorICAgICAgICAgICAgdGhpcy5wMTEgPSAxMQorICAgICAgICAgICAgdGhpcy5wMTIg
PSAxMgorICAgICAgICAgICAgdGhpcy5wMTMgPSAxMworICAgICAgICAgICAgdGhpcy5wMTQgPSAx
NAorICAgICAgICAgICAgdGhpcy5wMTUgPSAxNQorICAgICAgICAgICAgdGhpcy5wMTYgPSAxNgor
ICAgICAgICAgICAgdGhpcy5wMTcgPSAxNworICAgICAgICAgICAgdGhpcy5wMTggPSAxOAorICAg
ICAgICAgICAgdGhpcy5wMTkgPSAxOQorICAgICAgICAgICAgdGhpcy5wMjAgPSAyMAorICAgICAg
ICAgICAgdGhpcy5wMjEgPSAyMQorICAgICAgICAgICAgdGhpcy5wMjIgPSAyMgorICAgICAgICAg
ICAgdGhpcy5wMjMgPSAyMworICAgICAgICAgICAgdGhpcy5wMjQgPSAyNAorICAgICAgICAgICAg
dGhpcy5wMjUgPSAyNQorICAgICAgICAgICAgdGhpcy5wMjYgPSAyNgorICAgICAgICAgICAgdGhp
cy5wMjcgPSAyNworICAgICAgICAgICAgdGhpcy5wMjggPSAyOAorICAgICAgICAgICAgdGhpcy5w
MjkgPSAyOQorICAgICAgICAgICAgdGhpcy5wMzAgPSAzMAorICAgICAgICAgICAgdGhpcy5wMzEg
PSAzMQorICAgICAgICAgICAgdGhpcy5wMzIgPSAzMgorICAgICAgICAgICAgdGhpcy5wMzMgPSAz
MworICAgICAgICAgICAgdGhpcy5wMzQgPSAzNAorICAgICAgICAgICAgdGhpcy5wMzUgPSAzNQor
ICAgICAgICAgICAgdGhpcy5wMzYgPSAzNgorICAgICAgICAgICAgdGhpcy5wMzcgPSAzNworICAg
ICAgICAgICAgdGhpcy5wMzggPSAzOAorICAgICAgICAgICAgdGhpcy5wMzkgPSAzOQorICAgICAg
ICB9CisgICAgfTsKKworICAgIHJldHVybiBuZXcgQzsKK30KKworbGV0IGl0ZW1zID0gW107Citm
b3IgKGxldCBpID0gMDsgaSA8IDE1OyArK2kpIHsKKyAgICBpdGVtcy5wdXNoKGZvbygpKTsKK30K
KworZnVuY3Rpb24gdmFsaWRhdGUoKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5s
ZW5ndGg7ICsraSkgeworICAgICAgICBpdGVtID0gaXRlbXNbaV07CisgICAgICAgIGFzc2VydChp
dGVtLnAwID09PSAwKQorICAgICAgICBhc3NlcnQoaXRlbS5wMSA9PT0gMSkKKyAgICAgICAgYXNz
ZXJ0KGl0ZW0ucDIgPT09IDIpCisgICAgICAgIGFzc2VydChpdGVtLnAzID09PSAzKQorICAgICAg
ICBhc3NlcnQoaXRlbS5wNCA9PT0gNCkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDUgPT09IDUpCisg
ICAgICAgIGFzc2VydChpdGVtLnA2ID09PSA2KQorICAgICAgICBhc3NlcnQoaXRlbS5wNyA9PT0g
NykKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDggPT09IDgpCisgICAgICAgIGFzc2VydChpdGVtLnA5
ID09PSA5KQorICAgICAgICBhc3NlcnQoaXRlbS5wMTAgPT09IDEwKQorICAgICAgICBhc3NlcnQo
aXRlbS5wMTEgPT09IDExKQorICAgICAgICBhc3NlcnQoaXRlbS5wMTIgPT09IDEyKQorICAgICAg
ICBhc3NlcnQoaXRlbS5wMTMgPT09IDEzKQorICAgICAgICBhc3NlcnQoaXRlbS5wMTQgPT09IDE0
KQorICAgICAgICBhc3NlcnQoaXRlbS5wMTUgPT09IDE1KQorICAgICAgICBhc3NlcnQoaXRlbS5w
MTYgPT09IDE2KQorICAgICAgICBhc3NlcnQoaXRlbS5wMTcgPT09IDE3KQorICAgICAgICBhc3Nl
cnQoaXRlbS5wMTggPT09IDE4KQorICAgICAgICBhc3NlcnQoaXRlbS5wMTkgPT09IDE5KQorICAg
ICAgICBhc3NlcnQoaXRlbS5wMjAgPT09IDIwKQorICAgICAgICBhc3NlcnQoaXRlbS5wMjEgPT09
IDIxKQorICAgICAgICBhc3NlcnQoaXRlbS5wMjIgPT09IDIyKQorICAgICAgICBhc3NlcnQoaXRl
bS5wMjMgPT09IDIzKQorICAgICAgICBhc3NlcnQoaXRlbS5wMjQgPT09IDI0KQorICAgICAgICBh
c3NlcnQoaXRlbS5wMjUgPT09IDI1KQorICAgICAgICBhc3NlcnQoaXRlbS5wMjYgPT09IDI2KQor
ICAgICAgICBhc3NlcnQoaXRlbS5wMjcgPT09IDI3KQorICAgICAgICBhc3NlcnQoaXRlbS5wMjgg
PT09IDI4KQorICAgICAgICBhc3NlcnQoaXRlbS5wMjkgPT09IDI5KQorICAgICAgICBhc3NlcnQo
aXRlbS5wMzAgPT09IDMwKQorICAgICAgICBhc3NlcnQoaXRlbS5wMzEgPT09IDMxKQorICAgICAg
ICBhc3NlcnQoaXRlbS5wMzIgPT09IDMyKQorICAgICAgICBhc3NlcnQoaXRlbS5wMzMgPT09IDMz
KQorICAgICAgICBhc3NlcnQoaXRlbS5wMzQgPT09IDM0KQorICAgICAgICBhc3NlcnQoaXRlbS5w
MzUgPT09IDM1KQorICAgICAgICBhc3NlcnQoaXRlbS5wMzYgPT09IDM2KQorICAgICAgICBhc3Nl
cnQoaXRlbS5wMzcgPT09IDM3KQorICAgICAgICBhc3NlcnQoaXRlbS5wMzggPT09IDM4KQorICAg
ICAgICBhc3NlcnQoaXRlbS5wMzkgPT09IDM5KQorICAgIH0KK30KKworbGV0IHN0YXJ0ID0gRGF0
ZS5ub3coKTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICB2YWxpZGF0ZSgp
OworCitpZiAoZmFsc2UpCisgICAgcHJpbnQoRGF0ZS5ub3coKSAtIHN0YXJ0KTsKSW5kZXg6IEpT
VGVzdHMvc3RyZXNzL3BvbHktcHJvdG8tY2xlYXItc3R1Yi5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL3N0cmVzcy9wb2x5LXByb3RvLWNsZWFyLXN0dWIuanMJKG5vbmV4aXN0ZW50KQorKysgSlNU
ZXN0cy9zdHJlc3MvcG9seS1wcm90by1jbGVhci1zdHViLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAxIEBACitmdW5jdGlvbiBhc3NlcnQoYiwgbSkgeworICAgIGlmICghYikKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJCYWQ6IiArIG0pOworfQorCitmdW5jdGlvbiBmb28oKSB7Cisg
ICAgY2xhc3MgQyB7CisgICAgICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgICAgICAgdGhpcy5w
MCA9IDAKKyAgICAgICAgICAgIHRoaXMucDEgPSAxCisgICAgICAgICAgICB0aGlzLnAyID0gMgor
ICAgICAgICAgICAgdGhpcy5wMyA9IDMKKyAgICAgICAgICAgIHRoaXMucDQgPSA0CisgICAgICAg
ICAgICB0aGlzLnA1ID0gNQorICAgICAgICAgICAgdGhpcy5wNiA9IDYKKyAgICAgICAgICAgIHRo
aXMucDcgPSA3CisgICAgICAgICAgICB0aGlzLnA4ID0gOAorICAgICAgICAgICAgdGhpcy5wOSA9
IDkKKyAgICAgICAgICAgIHRoaXMucDEwID0gMTAKKyAgICAgICAgICAgIHRoaXMucDExID0gMTEK
KyAgICAgICAgICAgIHRoaXMucDEyID0gMTIKKyAgICAgICAgICAgIHRoaXMucDEzID0gMTMKKyAg
ICAgICAgICAgIHRoaXMucDE0ID0gMTQKKyAgICAgICAgICAgIHRoaXMucDE1ID0gMTUKKyAgICAg
ICAgICAgIHRoaXMucDE2ID0gMTYKKyAgICAgICAgICAgIHRoaXMucDE3ID0gMTcKKyAgICAgICAg
ICAgIHRoaXMucDE4ID0gMTgKKyAgICAgICAgICAgIHRoaXMucDE5ID0gMTkKKyAgICAgICAgICAg
IHRoaXMucDIwID0gMjAKKyAgICAgICAgICAgIHRoaXMucDIxID0gMjEKKyAgICAgICAgICAgIHRo
aXMucDIyID0gMjIKKyAgICAgICAgICAgIHRoaXMucDIzID0gMjMKKyAgICAgICAgICAgIHRoaXMu
cDI0ID0gMjQKKyAgICAgICAgICAgIHRoaXMucDI1ID0gMjUKKyAgICAgICAgICAgIHRoaXMucDI2
ID0gMjYKKyAgICAgICAgICAgIHRoaXMucDI3ID0gMjcKKyAgICAgICAgICAgIHRoaXMucDI4ID0g
MjgKKyAgICAgICAgICAgIHRoaXMucDI5ID0gMjkKKyAgICAgICAgICAgIHRoaXMucDMwID0gMzAK
KyAgICAgICAgICAgIHRoaXMucDMxID0gMzEKKyAgICAgICAgICAgIHRoaXMucDMyID0gMzIKKyAg
ICAgICAgICAgIHRoaXMucDMzID0gMzMKKyAgICAgICAgICAgIHRoaXMucDM0ID0gMzQKKyAgICAg
ICAgICAgIHRoaXMucDM1ID0gMzUKKyAgICAgICAgICAgIHRoaXMucDM2ID0gMzYKKyAgICAgICAg
ICAgIHRoaXMucDM3ID0gMzcKKyAgICAgICAgICAgIHRoaXMucDM4ID0gMzgKKyAgICAgICAgICAg
IHRoaXMucDM5ID0gMzkKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgaXRlbSA9IG5ldyBD
OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7ICsraSkgeworICAgICAgICBhc3NlcnQoaXRl
bS5wMCA9PT0gMCkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDEgPT09IDEpCisgICAgICAgIGFzc2Vy
dChpdGVtLnAyID09PSAyKQorICAgICAgICBhc3NlcnQoaXRlbS5wMyA9PT0gMykKKyAgICAgICAg
YXNzZXJ0KGl0ZW0ucDQgPT09IDQpCisgICAgICAgIGFzc2VydChpdGVtLnA1ID09PSA1KQorICAg
ICAgICBhc3NlcnQoaXRlbS5wNiA9PT0gNikKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDcgPT09IDcp
CisgICAgICAgIGFzc2VydChpdGVtLnA4ID09PSA4KQorICAgICAgICBhc3NlcnQoaXRlbS5wOSA9
PT0gOSkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDEwID09PSAxMCkKKyAgICAgICAgYXNzZXJ0KGl0
ZW0ucDExID09PSAxMSkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDEyID09PSAxMikKKyAgICAgICAg
YXNzZXJ0KGl0ZW0ucDEzID09PSAxMykKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDE0ID09PSAxNCkK
KyAgICAgICAgYXNzZXJ0KGl0ZW0ucDE1ID09PSAxNSkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDE2
ID09PSAxNikKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDE3ID09PSAxNykKKyAgICAgICAgYXNzZXJ0
KGl0ZW0ucDE4ID09PSAxOCkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDE5ID09PSAxOSkKKyAgICAg
ICAgYXNzZXJ0KGl0ZW0ucDIwID09PSAyMCkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDIxID09PSAy
MSkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDIyID09PSAyMikKKyAgICAgICAgYXNzZXJ0KGl0ZW0u
cDIzID09PSAyMykKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDI0ID09PSAyNCkKKyAgICAgICAgYXNz
ZXJ0KGl0ZW0ucDI1ID09PSAyNSkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDI2ID09PSAyNikKKyAg
ICAgICAgYXNzZXJ0KGl0ZW0ucDI3ID09PSAyNykKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDI4ID09
PSAyOCkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDI5ID09PSAyOSkKKyAgICAgICAgYXNzZXJ0KGl0
ZW0ucDMwID09PSAzMCkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDMxID09PSAzMSkKKyAgICAgICAg
YXNzZXJ0KGl0ZW0ucDMyID09PSAzMikKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDMzID09PSAzMykK
KyAgICAgICAgYXNzZXJ0KGl0ZW0ucDM0ID09PSAzNCkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDM1
ID09PSAzNSkKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDM2ID09PSAzNikKKyAgICAgICAgYXNzZXJ0
KGl0ZW0ucDM3ID09PSAzNykKKyAgICAgICAgYXNzZXJ0KGl0ZW0ucDM4ID09PSAzOCkKKyAgICAg
ICAgYXNzZXJ0KGl0ZW0ucDM5ID09PSAzOSkKKyAgICB9Cit9CisKK2xldCBzdGFydCA9IERhdGUu
bm93KCk7Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICBmb28oKTsKK2lmIChm
YWxzZSkKKyAgICBwcmludChEYXRlLm5vdygpIC0gc3RhcnQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMjI4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTctMTAtMDQgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBwZXJ0aW5lbnQgQWNj
ZXNzQ2FzZXMgd2F0Y2ggdGhlIHBvbHkgcHJvdG8gd2F0Y2hwb2ludAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NzY1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBpdCBzbyB0
aGF0IHN0dWJzIHRoYXQgZW5jb3VudGVyIGEgc3RydWN0dXJlIHdpdGggYQorICAgICAgICB2YWxp
ZCBwb2x5IHByb3RvIHdhdGNocG9pbnQgd2lsbCB3YXRjaCB0aGUgcG9seSBwcm90byB3YXRjaHBv
aW50LiBUaGlzCisgICAgICAgIGVuc3VyZXMgdGhhdCBpZiB0aGUgd2F0Y2hwb2ludCBpcyBmaXJl
ZCwgdGhlIHN0dWIgd2lsbCBiZSBjbGVhcmVkCisgICAgICAgIGFuZCBoYXZlIGEgY2hhbmNlIHRv
IHJlZ2VuZXJhdGUuIEluIGFuIGlkZWFsIHdvcmxkLCB0aGlzIHdpbGwgbGVhZAorICAgICAgICB0
byB0aGUgc3R1YiBnZW5lcmF0aW5nIGJldHRlciBjb2RlIHNpbmNlIGl0IG1heSBuZXZlciBlbmNv
dW50ZXIgdGhlCisgICAgICAgIG5vbi1wb2x5IHByb3RvIHN0cnVjdHVyZSBhZ2Fpbi4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBmaXhlcyBhIGJ1ZyBpbiB0aGUgb3JpZ2luYWwg
cG9seSBwcm90byBjb2RlIHdoZXJlCisgICAgICAgIEkgYWNjaWRlbnRhbGx5IGhhZCBhIGNvbmRp
dGlvbiBpbnZlcnRlZC4gVGhlIGJhZCBjb2RlIGNhdXNlZCBhCisgICAgICAgIHN0dWIgdGhhdCBj
b250aW51YWxseSBjYWNoZWQgdHdvIHN0cnVjdHVyZXMgd2hpY2ggYXJlIHN0cnVjdHVyYWxseQor
ICAgICAgICBlcXVpdmFsZW50IGJ1dCB3aXRoIGRpZmZlcmVudCBwcm90b3R5cGUgb2JqZWN0cyB0
byBhbHdheXMgY2xlYXIgaXRzZWxmLgorICAgICAgICBUaGUgY29kZSBzaG91bGQgaGF2ZSBiZWVu
IHdyaXR0ZW4gZGlmZmVyZW50bHkuIEl0IHNob3VsZCBoYXZlIG9ubHkKKyAgICAgICAgY2xlYXJl
ZCBpZiB0aGUgcG9seSBwcm90byB3YXRjaHBvaW50ICp3YXMgbm90KiBmaXJlZC4gVGhlIGNvZGUK
KyAgICAgICAgYWNjaWRlbnRhbGx5IGNsZWFyZWQgb25seSBpZiBzdHViICp3YXMqIGZpcmVkLgor
CisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmNvbW1pdCk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6YWRkQ2FzZXMpOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5oOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpzaG91bGRSZXNldFN0
dWJBbmRGaXJlV2F0Y2hwb2ludHMgY29uc3QpOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0OjphZGRXYXRjaHBvaW50VG9GaXJlKToKKyAgICAgICAgKEpTQzo6QWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdDo6ZmlyZVdhdGNocG9pbnRzKToKKyAgICAgICAgKEpTQzo6QWNjZXNzR2Vu
ZXJhdGlvblJlc3VsdDo6c2hvdWxkUmVzZXRTdHViIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1Yklu
Zm86OnJlc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgIChK
U0M6OklubGluZVdhdGNocG9pbnRTZXQ6OmluZmxhdGUpOgorICAgICAgICAqIGppdC9SZXBhdGNo
LmNwcDoKKyAgICAgICAgKEpTQzo6ZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQp
OgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXBhdGNo
R2V0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6
OnJlcGF0Y2hQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVJbik6CisgICAgICAgIChK
U0M6OnJlcGF0Y2hJbik6CisgICAgICAgIChKU0M6OnRyeVJlcGF0Y2hJbik6IERlbGV0ZWQuCisK
IDIwMTctMTAtMDQgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFdURjogVXBkYXRlIHN0ZDo6ZXhwZWN0ZWQgdG8gbWF0Y2ggY3VycmVudCBwcm9wb3NhbApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkocmV2
aXNpb24gMjIyODc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsOCArMTM2LDkgQEAgVmVjdG9yPFdhdGNocG9p
bnRTZXQqLCAyPiBBY2Nlc3NDYXNlOjpjbwogICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUgPT0g
UHJpbW9yZGlhbCB8fCBtX3N0YXRlID09IENvbW1pdHRlZCk7CiAKICAgICBWZWN0b3I8V2F0Y2hw
b2ludFNldCosIDI+IHJlc3VsdDsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0
cnVjdHVyZSgpOwogCi0gICAgaWYgKChzdHJ1Y3R1cmUoKSAmJiBzdHJ1Y3R1cmUoKS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgIGlmICgoc3RydWN0dXJlICYmIHN0cnVjdHVy
ZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQogICAgICAgICB8fCBtX2NvbmRpdGlv
blNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAgfHwgKG1fcG9seVBy
b3RvQWNjZXNzQ2hhaW4gJiYgbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbi0+bmVlZEltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCh2bS5lbnN1cmVXYXRjaHBv
aW50U2V0Rm9ySW1wdXJlUHJvcGVydHkoaWRlbnQpKTsKQEAgLTE0NSw2ICsxNDYsMTQgQEAgVmVj
dG9yPFdhdGNocG9pbnRTZXQqLCAyPiBBY2Nlc3NDYXNlOjpjbwogICAgIGlmIChhZGRpdGlvbmFs
U2V0KCkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoYWRkaXRpb25hbFNldCgpKTsKIAorICAgIGlm
IChzdHJ1Y3R1cmUKKyAgICAgICAgJiYgc3RydWN0dXJlLT5oYXNSYXJlRGF0YSgpCisgICAgICAg
ICYmIHN0cnVjdHVyZS0+cmFyZURhdGEoKS0+aGFzU2hhcmVkUG9seVByb3RvV2F0Y2hwb2ludCgp
CisgICAgICAgICYmIHN0cnVjdHVyZS0+cmFyZURhdGEoKS0+c2hhcmVkUG9seVByb3RvV2F0Y2hw
b2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBz
dHJ1Y3R1cmUtPnJhcmVEYXRhKCktPnNoYXJlZFBvbHlQcm90b1dhdGNocG9pbnQoKS0+aW5mbGF0
ZSgpOworICAgICAgICByZXN1bHQuYXBwZW5kKHNldCk7CisgICAgfQorCiAgICAgbV9zdGF0ZSA9
IENvbW1pdHRlZDsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9u
IDIyMjg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OSwxOSArMjU5LDE4IEBAIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3MKICAgICAgICAgcmV0dXJuIEFjY2Vzc0dlbmVy
YXRpb25SZXN1bHQ6Ok1hZGVOb0NoYW5nZXM7CiAKICAgICBib29sIHNob3VsZFJlc2V0ID0gZmFs
c2U7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXNldFJlc3VsdChBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0OjpSZXNldFN0dWJBbmRGaXJlV2F0Y2hwb2ludHMpOwogICAgIGF1dG8gY29uc2lk
ZXJQb2x5UHJvdG9SZXNldCA9IFsmXSAoU3RydWN0dXJlKiBhLCBTdHJ1Y3R1cmUqIGIpIHsKICAg
ICAgICAgaWYgKFN0cnVjdHVyZTo6c2hvdWxkQ29udmVydFRvUG9seVByb3RvKGEsIGIpKSB7CiAg
ICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBvbmx5IHJlc2V0IGlmIHRoaXMgaXMgb3VyIGZpcnN0
IHRpbWUgaW52YWxpZGF0aW5nIHRoaXMgd2F0Y2hwb2ludC4KLSAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcHJvYmFibHkgaGF2ZSBhbGwgdGhhdCBjYW4gd2F0Y2ggZm9yIHRoZSBwb2x5
IHByb3RvCi0gICAgICAgICAgICAvLyB3YXRjaHBvaW50IGRvIGl0LiBUaGlzIHdpbGwgYWxsb3cg
c3R1YnMgdG8gY2xlYXIgb3V0IHRoZWlyIG5vbi1wb2x5LXByb3RvCi0gICAgICAgICAgICAvLyBJ
QyBjYXNlcy4gVGhpcyBpcyBsaWtlbHkgdG8gYmUgZmFzdGVyIGlmIHlvdSBidWlsZCB1cCBhIGJ1
bmNoIG9mIElDcywgdGhlbgotICAgICAgICAgICAgLy8gdHJpZ2dlciBwb2x5IHByb3RvLCB0aGVu
IG9ubHkgYWNjZXNzIHBvbHkgcHJvdG8gb2JqZWN0cy4gSWYgd2UgZG8gdGhpcywgd2UnbGwKLSAg
ICAgICAgICAgIC8vIG5lZWQgdGhpcyBjb2RlIGJlbG93IHRvIGRlbGF5IGZpcmluZyB0aGUgd2F0
Y2hwb2ludCBzaW5jZSBpdCBtaWdodCBjYXVzZQotICAgICAgICAgICAgLy8gdXMgdG8gZGVhbGxv
Y2F0ZSBvdXJzZWx2ZXM6Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc3NzY1CisgICAgICAgICAgICAvLyBUaGUgcmVhc29uIHdlIGRvbid0
IGltbWVkaWF0ZWx5IGZpcmUgdGhpcyB3YXRjaHBvaW50IGlzIHRoYXQgd2UgbWF5IGJlIGFscmVh
ZHkKKyAgICAgICAgICAgIC8vIHdhdGNoaW5nIHRoZSBwb2x5IHByb3RvIHdhdGNocG9pbnQsIHdo
aWNoIGlmIGZpcmVkLCB3b3VsZCBkZXN0cm95IHVzLiBXZSBsZXQKKyAgICAgICAgICAgIC8vIHRo
ZSBwZXJzb24gaGFuZGxpbmcgdGhlIHJlc3VsdCB0byBkbyBhIGRlbGF5ZWQgZmlyZS4KICAgICAg
ICAgICAgIEFTU0VSVChhLT5yYXJlRGF0YSgpLT5zaGFyZWRQb2x5UHJvdG9XYXRjaHBvaW50KCku
Z2V0KCkgPT0gYi0+cmFyZURhdGEoKS0+c2hhcmVkUG9seVByb3RvV2F0Y2hwb2ludCgpLmdldCgp
KTsKLSAgICAgICAgICAgIHNob3VsZFJlc2V0IHw9IGEtPnJhcmVEYXRhKCktPnNoYXJlZFBvbHlQ
cm90b1dhdGNocG9pbnQoKS0+aGFzQmVlbkludmFsaWRhdGVkKCk7IAotICAgICAgICAgICAgYS0+
cmFyZURhdGEoKS0+c2hhcmVkUG9seVByb3RvV2F0Y2hwb2ludCgpLT5pbnZhbGlkYXRlKHZtLCBT
dHJpbmdGaXJlRGV0YWlsKCJEZXRlY3RlZCBwb2x5IHByb3RvIG9wdGltaXphdGlvbiBvcHBvcnR1
bml0eS4iKSk7CisgICAgICAgICAgICBpZiAoYS0+cmFyZURhdGEoKS0+c2hhcmVkUG9seVByb3Rv
V2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIHNob3VsZFJl
c2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXNldFJlc3VsdC5hZGRXYXRjaHBvaW50VG9G
aXJlKCphLT5yYXJlRGF0YSgpLT5zaGFyZWRQb2x5UHJvdG9XYXRjaHBvaW50KCksIFN0cmluZ0Zp
cmVEZXRhaWwoIkRldGVjdGVkIHBvbHkgcHJvdG8gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LiIp
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH07CiAKQEAgLTI5MSw3ICsyOTAsNyBA
QCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgfQogCiAgICAg
aWYgKHNob3VsZFJlc2V0KQotICAgICAgICByZXR1cm4gQWNjZXNzR2VuZXJhdGlvblJlc3VsdDo6
UmVzZXRTdHViOworICAgICAgICByZXR1cm4gcmVzZXRSZXN1bHQ7CiAKICAgICAvLyBOb3cgYWRk
IHRoaW5ncyB0byB0aGUgbmV3IGxpc3QuIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCB3ZSB3aWxs
IHN0aWxsIGhhdmUgb2xkIGNhc2VzIHRoYXQKICAgICAvLyBtYXkgYmUgcmVwbGFjZWQgYnkgdGhl
IG5ldyBvbmVzLiBUaGF0J3MgZmluZS4gV2Ugd2lsbCBzb3J0IHRoYXQgb3V0IHdoZW4gd2UgcmVn
ZW5lcmF0ZS4KQEAgLTYyNSw4ICs2MjQsOCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQWNjCiAgICAgY2FzZSBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpHZW5lcmF0ZWRG
aW5hbENvZGU6CiAgICAgICAgIG91dC5wcmludCgiR2VuZXJhdGVkRmluYWxDb2RlIik7CiAgICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQ6OlJlc2V0U3R1YjoK
LSAgICAgICAgb3V0LnByaW50KCJSZXNldFN0dWIiKTsKKyAgICBjYXNlIEFjY2Vzc0dlbmVyYXRp
b25SZXN1bHQ6OlJlc2V0U3R1YkFuZEZpcmVXYXRjaHBvaW50czoKKyAgICAgICAgb3V0LnByaW50
KCJSZXNldFN0dWJBbmRGaXJlV2F0Y2hwb2ludHMiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyMjI4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTIg
KzUzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgQnVmZmVyZWQsCiAgICAgICAgIEdlbmVyYXRlZE5l
d0NvZGUsCiAgICAgICAgIEdlbmVyYXRlZEZpbmFsQ29kZSwgLy8gR2VuZXJhdGVkIHNvIG11Y2gg
Y29kZSB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gZ2VuZXJhdGUgY29kZSBhZ2Fpbi4KLSAgICAgICAg
UmVzZXRTdHViIC8vIFdlIGZvdW5kIG91dCBzb21lIGRhdGEgdGhhdCBtYWtlcyB1cyB3YW50IHRv
IHN0YXJ0IG92ZXIgZnJlc2ggd2l0aCB0aGlzIHN0dWIuIEN1cnJlbnRseSwgdGhpcyBoYXBwZW5z
IHdoZW4gd2UgZGV0ZWN0IHBvbHkgcHJvdG8uCisgICAgICAgIFJlc2V0U3R1YkFuZEZpcmVXYXRj
aHBvaW50cyAvLyBXZSBmb3VuZCBvdXQgc29tZSBkYXRhIHRoYXQgbWFrZXMgdXMgd2FudCB0byBz
dGFydCBvdmVyIGZyZXNoIHdpdGggdGhpcyBzdHViLiBDdXJyZW50bHksIHRoaXMgaGFwcGVucyB3
aGVuIHdlIGRldGVjdCBwb2x5IHByb3RvLgogICAgIH07CiAgICAgCi0gICAgQWNjZXNzR2VuZXJh
dGlvblJlc3VsdCgpCi0gICAgewotICAgIH0KKworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQo
KSA9IGRlZmF1bHQ7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdChBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0JiYpID0gZGVmYXVsdDsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0JiBvcGVyYXRv
cj0oQWNjZXNzR2VuZXJhdGlvblJlc3VsdCYmKSA9IGRlZmF1bHQ7CiAgICAgCiAgICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdChLaW5kIGtpbmQpCiAgICAgICAgIDogbV9raW5kKGtpbmQpCkBAIC05
OSw3ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBidWZmZXJlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZCA9PSBCdWZmZXJlZDsgfQogICAgIGJvb2wgZ2VuZXJhdGVkTmV3Q29kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZCA9PSBHZW5lcmF0ZWROZXdDb2RlOyB9CiAgICAgYm9vbCBnZW5lcmF0
ZWRGaW5hbENvZGUoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gR2VuZXJhdGVkRmluYWxDb2Rl
OyB9Ci0gICAgYm9vbCBzaG91bGRSZXNldFN0dWIoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0g
UmVzZXRTdHViOyB9CisgICAgYm9vbCBzaG91bGRSZXNldFN0dWJBbmRGaXJlV2F0Y2hwb2ludHMo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gUmVzZXRTdHViQW5kRmlyZVdhdGNocG9pbnRzOyB9
CiAgICAgCiAgICAgLy8gSWYgd2UgZ2F2ZSB1cCBvbiB0aGlzIGF0dGVtcHQgdG8gZ2VuZXJhdGUg
Y29kZSwgb3IgaWYgd2UgZ2VuZXJhdGVkIHRoZSAiZmluYWwiIGNvZGUsIHRoZW4gd2UKICAgICAv
LyBzaG91bGQgZ2l2ZSB1cCBhZnRlciB0aGlzLgpAQCAtMTA4LDEwICsxMDksMjIgQEAgcHVibGlj
OgogICAgIGJvb2wgZ2VuZXJhdGVkU29tZUNvZGUoKSBjb25zdCB7IHJldHVybiBnZW5lcmF0ZWRO
ZXdDb2RlKCkgfHwgZ2VuZXJhdGVkRmluYWxDb2RlKCk7IH0KICAgICAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHZvaWQgYWRkV2F0Y2hwb2ludFRvRmlyZShJbmxp
bmVXYXRjaHBvaW50U2V0JiBzZXQsIFN0cmluZ0ZpcmVEZXRhaWwgZGV0YWlsKQorICAgIHsKKyAg
ICAgICAgbV93YXRjaHBvaW50c1RvRmlyZS5hcHBlbmQoc3RkOjpwYWlyPElubGluZVdhdGNocG9p
bnRTZXQmLCBTdHJpbmdGaXJlRGV0YWlsPihzZXQsIGRldGFpbCkpOworICAgIH0KKyAgICB2b2lk
IGZpcmVXYXRjaHBvaW50cyhWTSYgdm0pCisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09
IFJlc2V0U3R1YkFuZEZpcmVXYXRjaHBvaW50cyk7CisgICAgICAgIGZvciAoYXV0byYgcGFpciA6
IG1fd2F0Y2hwb2ludHNUb0ZpcmUpCisgICAgICAgICAgICBwYWlyLmZpcnN0LmludmFsaWRhdGUo
dm0sIHBhaXIuc2Vjb25kKTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIEtpbmQgbV9raW5k
OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGU7CisgICAgVmVjdG9yPHN0ZDo6cGFp
cjxJbmxpbmVXYXRjaHBvaW50U2V0JiwgU3RyaW5nRmlyZURldGFpbD4+IG1fd2F0Y2hwb2ludHNU
b0ZpcmU7CiB9OwogCiBjbGFzcyBQb2x5bW9ycGhpY0FjY2VzcyB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJl
dmlzaW9uIDIyMjg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMCArMTMxLDggQEAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAgICAgICBpZiAoU3RydWN0dXJl
U3R1YkluZm9JbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkhhZCBzdHVi
LCByZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CiAKLSAgICAgICAgaWYgKHJlc3VsdC5zaG91bGRS
ZXNldFN0dWIoKSkgewotICAgICAgICAgICAgcmVzZXQoY29kZUJsb2NrKTsKKyAgICAgICAgaWYg
KHJlc3VsdC5zaG91bGRSZXNldFN0dWJBbmRGaXJlV2F0Y2hwb2ludHMoKSkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KIAogICAgICAgICBpZiAoIXJlc3VsdC5idWZmZXJl
ZCgpKSB7CiAgICAgICAgICAgICBidWZmZXJlZFN0cnVjdHVyZXMuY2xlYXIoKTsKQEAgLTE1Nywx
MCArMTU1LDggQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbwogICAg
ICAgICBpZiAoU3RydWN0dXJlU3R1YkluZm9JbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAg
IGRhdGFMb2coIkNyZWF0ZWQgc3R1YiwgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOwogCi0gICAg
ICAgIGlmIChyZXN1bHQuc2hvdWxkUmVzZXRTdHViKCkpIHsKLSAgICAgICAgICAgIHJlc2V0KGNv
ZGVCbG9jayk7CisgICAgICAgIGlmIChyZXN1bHQuc2hvdWxkUmVzZXRTdHViQW5kRmlyZVdhdGNo
cG9pbnRzKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9CiAKICAgICAg
ICAgaWYgKCFyZXN1bHQuYnVmZmVyZWQoKSkgewogICAgICAgICAgICAgYnVmZmVyZWRTdHJ1Y3R1
cmVzLmNsZWFyKCk7CkBAIC0yMTIsMTAgKzIwOCwxMCBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IFN0cnVjdHVyZVN0dWJJbmZvCiB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICAgICBidWZmZXJlZFN0cnVjdHVyZXMuY2xlYXIoKTsKLSAgICAK
KwogICAgIGlmIChjYWNoZVR5cGUgPT0gQ2FjaGVUeXBlOjpVbnNldCkKICAgICAgICAgcmV0dXJu
OwotICAgIAorCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAvLyBU
aGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBHQyBkZXN0cnVjdG9yIGNhbGxzLCBzbyB3ZSBkb24ndCB0
cnkgdG8gZG8gYSBmdWxsIGR1bXAKICAgICAgICAgLy8gb2YgdGhlIENvZGVCbG9jay4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24g
MjIyODc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzc4LDYgKzM3OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm4gZmF0KCktPmlzQmVpbmdXYXRjaGVkKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CisKKyAgICAvLyBXZSBleHBvc2UgdGhpcyBiZWNhdXNlIHNvbWV0aW1lcyBhIGNsaWVudCBr
bm93cyBpdHMgYWJvdXQgdG8gc3RhcnQKKyAgICAvLyB3YXRjaGluZyB0aGlzIElubGluZVdhdGNo
cG9pbnRTZXQsIGhlbmNlIGl0J2xsIGJlY29tZSBpbmZsYXRlZCByZWdhcmRsZXNzLgorICAgIC8v
IFN1Y2ggY2xpZW50cyBtYXkgZmluZCBpdCB1c2VmdWwgdG8gaGF2ZSBhIFdhdGNocG9pbnRTZXQq
IHBvaW50ZXIsIGZvciBleGFtcGxlLAorICAgIC8vIGlmIHRoZXkgY29sbGVjdCBhIFZlY3RvciBv
ZiBXYXRjaHBvaW50U2V0Ki4KKyAgICBXYXRjaHBvaW50U2V0KiBpbmZsYXRlKCkKKyAgICB7Cisg
ICAgICAgIGlmIChMSUtFTFkoaXNGYXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmF0KCk7Cisg
ICAgICAgIHJldHVybiBpbmZsYXRlU2xvdygpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAg
c3RhdGljIGNvbnN0IHVpbnRwdHJfdCBJc1RoaW5GbGFnICAgICAgICA9IDE7CkBAIC00MTgsMTMg
KzQyOSw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYXQobV9kYXRhKTsKICAgICB9CiAg
ICAgCi0gICAgV2F0Y2hwb2ludFNldCogaW5mbGF0ZSgpCi0gICAgewotICAgICAgICBpZiAoTElL
RUxZKGlzRmF0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhdCgpOwotICAgICAgICByZXR1cm4g
aW5mbGF0ZVNsb3coKTsKLSAgICB9Ci0gICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgV2F0Y2hw
b2ludFNldCogaW5mbGF0ZVNsb3coKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWVG
YXQoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2
aXNpb24gMjIyODc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCwxNCBAQCBzdGF0aWMgYm9vbCBmb3JjZUlDRmFp
bHVyZShFeGVjU3RhdGUqKQogI2VuZGlmCiB9CiAKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQg
ZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQoVk0mIHZtLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIENvZGVCbG9jayogY29kZUJsb2NrLCBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0JiByZXN1bHQpCit7CisgICAgaWYgKHJlc3VsdC5zaG91bGRSZXNldFN0dWJBbmRGaXJlV2F0
Y2hwb2ludHMoKSkgeworICAgICAgICByZXN1bHQuZmlyZVdhdGNocG9pbnRzKHZtKTsKKyAgICAg
ICAgc3R1YkluZm8ucmVzZXQoY29kZUJsb2NrKTsKKyAgICB9Cit9CisKIGlubGluZSBGdW5jdGlv
blB0ciBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oR2V0QnlJREtpbmQga2lu
ZCkKIHsKICAgICBpZiAoa2luZCA9PSBHZXRCeUlES2luZDo6Tm9ybWFsKQpAQCAtMTU4LDIwNyAr
MTY2LDIxNCBAQCBpbmxpbmUgRnVuY3Rpb25QdHIgYXBwcm9wcmlhdGVHZW5lcmljR2V0CiAgICAg
cmV0dXJuIG9wZXJhdGlvblRyeUdldEJ5SWQ7CiB9CiAKLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlv
biB0cnlDYWNoZUdldEJ5SUQoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIs
IEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIEdldEJ5SURLaW5kIGtpbmQpCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5SURLaW5kIGtpbmQpCiB7Ci0gICAgaWYgKGZvcmNl
SUNGYWlsdXJlKGV4ZWMpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAKLSAg
ICAvLyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgotICAgIGlm
ICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOworICAgIHsKKyAgICAgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBl
eGVjLT52bSgpLmhlYXApOwogCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpIHsKLSAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAg
ICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAg
ICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCi0gICAgICAgICAgICAg
ICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nh
c3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSkpKSB7CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShl
eGVjKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAg
ICAgLy8gRklYTUU6IENhY2hlIHByb3BlcnR5IGFjY2VzcyBmb3IgaW1tZWRpYXRlcy4KKyAgICAg
ICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKIAotICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGlu
ZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihi
YXNlVmFsdWUpKTsKLSAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewot
ICAgICAgICAgICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBz
dHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRC
eUlkRnVuY3Rpb24oa2luZCkpOwotICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJy
YXlMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKworICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBpZiAo
cHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkgeworICAgICAgICAgICAg
aWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZv
LmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAgICAgICAgICAgICAgICYmIHNs
b3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKKyAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5l
QWNjZXNzOjppc0NhY2hlYWJsZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+
KGJhc2VWYWx1ZSkpKSB7CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2Rl
SW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0dWJJbmZvLCBqc0Nh
c3Q8SlNBcnJheSo+KGJhc2VWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBw
cm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpCisgICAgICAgICAgICAgICAgbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTdHJp
bmdMZW5ndGgpOworICAgICAgICAgICAgZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRzKiBhcmd1bWVu
dHMgPSBqc0R5bmFtaWNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlVmFsdWUpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBvdmVycmlkZXMsIHRoZW4gd2UgY2FuIGhh
bmRsZSB0aGlzIGFzIGEgbm9ybWFsIHByb3BlcnR5IGxvYWQhIEd1YXJkaW5nCisgICAgICAgICAg
ICAgICAgLy8gdGhpcyB3aXRoIHN1Y2ggYSBjaGVjayBlbmFibGVzIHVzIHRvIGFkZCBhbiBJQyBj
YXNlIGZvciB0aGF0IGxvYWQgaWYgbmVlZGVkLgorICAgICAgICAgICAgICAgIGlmICghYXJndW1l
bnRzLT5vdmVycm9kZVRoaW5ncygpKQorICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRpcmVjdEFyZ3VtZW50
c0xlbmd0aCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFNjb3BlZEFyZ3VtZW50cyogYXJndW1l
bnRzID0ganNEeW5hbWljQ2FzdDxTY29wZWRBcmd1bWVudHMqPih2bSwgYmFzZVZhbHVlKSkgewor
ICAgICAgICAgICAgICAgIC8vIERpdHRvLgorICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRz
LT5vdmVycm9kZVRoaW5ncygpKQorICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNjb3BlZEFyZ3VtZW50c0xl
bmd0aCk7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxlbmd0
aCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpKQotICAgICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNl
OjpTdHJpbmdMZW5ndGgpOwotICAgICAgICBlbHNlIGlmIChEaXJlY3RBcmd1bWVudHMqIGFyZ3Vt
ZW50cyA9IGpzRHluYW1pY0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4odm0sIGJhc2VWYWx1ZSkpIHsK
LSAgICAgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgb3ZlcnJpZGVzLCB0aGVuIHdlIGNhbiBoYW5k
bGUgdGhpcyBhcyBhIG5vcm1hbCBwcm9wZXJ0eSBsb2FkISBHdWFyZGluZwotICAgICAgICAgICAg
Ly8gdGhpcyB3aXRoIHN1Y2ggYSBjaGVjayBlbmFibGVzIHVzIHRvIGFkZCBhbiBJQyBjYXNlIGZv
ciB0aGF0IGxvYWQgaWYgbmVlZGVkLgotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPm92ZXJy
b2RlVGhpbmdzKCkpCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0
ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEaXJlY3RBcmd1bWVudHNMZW5ndGgpOwotICAg
ICAgICB9IGVsc2UgaWYgKFNjb3BlZEFyZ3VtZW50cyogYXJndW1lbnRzID0ganNEeW5hbWljQ2Fz
dDxTY29wZWRBcmd1bWVudHMqPih2bSwgYmFzZVZhbHVlKSkgewotICAgICAgICAgICAgLy8gRGl0
dG8uCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkKLSAgICAg
ICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFj
Y2Vzc0Nhc2U6OlNjb3BlZEFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgIGlmICghcHJvcGVydHlO
YW1lLmlzU3ltYm9sKCkgJiYgaXNKU01vZHVsZU5hbWVzcGFjZU9iamVjdChiYXNlVmFsdWUpICYm
ICFzbG90LmlzVW5zZXQoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbW9kdWxlTmFtZXNwYWNl
U2xvdCA9IHNsb3QubW9kdWxlTmFtZXNwYWNlU2xvdCgpKQorICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywganND
YXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oYmFzZVZhbHVlKSwgbW9kdWxlTmFtZXNwYWNl
U2xvdC0+ZW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNjb3Bl
T2Zmc2V0KSk7CiAgICAgICAgIH0KLSAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5ld0Nh
c2UpIHsKKyAgICAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5z
ZXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAotICAgIGlmICgh
cHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgaXNKU01vZHVsZU5hbWVzcGFjZU9iamVjdChiYXNl
VmFsdWUpICYmICFzbG90LmlzVW5zZXQoKSkgewotICAgICAgICBpZiAoYXV0byBtb2R1bGVOYW1l
c3BhY2VTbG90ID0gc2xvdC5tb2R1bGVOYW1lc3BhY2VTbG90KCkpCi0gICAgICAgICAgICBuZXdD
YXNlID0gTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGpz
Q2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGJhc2VWYWx1ZSksIG1vZHVsZU5hbWVzcGFj
ZVNsb3QtPmVudmlyb25tZW50LCBTY29wZU9mZnNldChtb2R1bGVOYW1lc3BhY2VTbG90LT5zY29w
ZU9mZnNldCkpOwotICAgIH0KLSAgICAKLSAgICBpZiAoIW5ld0Nhc2UpIHsKLSAgICAgICAgaWYg
KCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVl
LmFzQ2VsbCgpOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+
c3RydWN0dXJlKHZtKTsKIAotICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25k
aXRpb25TZXQ7Ci0gICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7
CisgICAgICAgICAgICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Cisg
ICAgICAgICAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRh
cmdldCgpOworICAgICAgICAgICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwor
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworICAg
ICAgICAgICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZt
LCBiYXNlQ2VsbCk7CisgICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQor
ICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247CiAKLSAgICAgICAgYm9vbCBsb2FkVGFyZ2V0
RnJvbVByb3h5ID0gZmFsc2U7Ci0gICAgICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVG
b3J3YXJkaW5nUHJveHlUeXBlKSB7Ci0gICAgICAgICAgICBiYXNlVmFsdWUgPSBqc0Nhc3Q8SlNQ
cm94eSo+KGJhc2VDZWxsKS0+dGFyZ2V0KCk7Ci0gICAgICAgICAgICBiYXNlQ2VsbCA9IGJhc2VW
YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1
cmUodm0pOwotICAgICAgICAgICAgbG9hZFRhcmdldEZyb21Qcm94eSA9IHRydWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZt
LCBiYXNlQ2VsbCk7Ci0gICAgICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAg
ICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNz
LgotICAgICAgICBpZiAoc3R1YkluZm8uY2FjaGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKLSAg
ICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICAgICAmJiBzbG90
LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCi0gICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50
U2V0KCkKLSAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKQotICAgICAgICAgICAgJiYgIWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLQotICAgICAg
ICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNl
bGZQcm9wZXJ0eUFjY2VzcyhzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKLSAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAg
ICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0
Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1
bmN0aW9uKGtpbmQpKTsKLSAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYo
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAvLyBPcHRpbWl6ZSBzZWxm
IGFjY2Vzcy4KKyAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUgPT0gQ2FjaGVUeXBl
OjpVbnNldAorICAgICAgICAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCisgICAg
ICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZQorICAgICAgICAgICAg
ICAgICYmICFzbG90LndhdGNocG9pbnRTZXQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1
cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKQorICAgICAgICAgICAgICAgICYmICFs
b2FkVGFyZ2V0RnJvbVByb3h5KSB7CisKKyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENv
ZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKHN0dWJJ
bmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGlm
IChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNF
dmVudDo6R2V0QnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgcHJvcGVydHlO
YW1lKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3Bl
cnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xv
d1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9u
KGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGNv
ZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKIAotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQg
OiBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsK
IAotICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VW
YWx1ZSkgewotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQ
cm9wZXJ0eUNhY2hpbmcoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KyAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSB8fCBzbG90LnNsb3RCYXNlKCkgIT0gYmFz
ZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVk
QmVmb3JlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVy
ZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4oYmFzZUNlbGwpKTsKKyAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQorICAgICAgICAg
ICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuZ2V0T3du
UHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UoKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgc3RydWN0dXJlLT5m
bGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4oYmFzZUNlbGwp
KTsKLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpICYmIHN0
cnVjdHVyZS0+dHlwZUluZm8oKS5nZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5
QWJzZW5jZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAg
ICAgICAgICAgIGJvb2wgdXNlc1BvbHlQcm90bzsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGVB
Y2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjpjcmVhdGUoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBiYXNlQ2VsbCwgc2xvdCwgdXNlc1BvbHlQcm90byk7CisgICAgICAgICAg
ICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikgeworICAgICAgICAgICAgICAgICAgICAv
LyBJdCdzIGludmFsaWQgdG8gYWNjZXNzIHRoaXMgcHJvdG90eXBlIHByb3BlcnR5LgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGJvb2wgdXNlc1BvbHlQcm90bzsKLSAgICAgICAgICAgIHByb3RvdHlwZUFj
Y2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OmNyZWF0ZShleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGJhc2VDZWxsLCBzbG90LCB1c2VzUG9seVByb3RvKTsKLSAgICAgICAgICAg
IGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pIHsKLSAgICAgICAgICAgICAgICAvLyBJdCdzIGlu
dmFsaWQgdG8gYWNjZXNzIHRoaXMgcHJvdG90eXBlIHByb3BlcnR5LgotICAgICAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICghdXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgorICAgICAg
ICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CiAKLSAgICAgICAg
ICAgIGlmICghdXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCBpbnN0ZWFkIGZvciBmYXN0ZXIgYWNjZXNzZXMuCi0gICAg
ICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAgICAgICAg
ICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZS5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9j
aywgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkgewotICAgICAgICAgICAgICAgICAg
ICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCi0gICAg
ICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3Bl
cnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3Ry
dWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAg
ICAgICAgICAgICBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90
LmNhY2hlZE9mZnNldCgpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBvZmZzZXQgPSBz
bG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hlZE9mZnNldCgpOwotICAg
ICAgICB9CisgICAgICAgICAgICBKU0Z1bmN0aW9uKiBnZXR0ZXIgPSBudWxscHRyOworICAgICAg
ICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICBnZXR0
ZXIgPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgc2xvdC5nZXR0ZXJTZXR0ZXIoKS0+
Z2V0dGVyKCkpOwogCi0gICAgICAgIEpTRnVuY3Rpb24qIGdldHRlciA9IG51bGxwdHI7Ci0gICAg
ICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCi0gICAgICAgICAgICBnZXR0ZXIgPSBq
c0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgc2xvdC5nZXR0ZXJTZXR0ZXIoKS0+Z2V0dGVy
KCkpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9t
QXR0cmlidXRlOwotICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmIHNsb3Qu
ZG9tQXR0cmlidXRlKCkpCi0gICAgICAgICAgICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0dHJp
YnV0ZSgpOwotCi0gICAgICAgIGlmIChraW5kID09IEdldEJ5SURLaW5kOjpUcnkpIHsKLSAgICAg
ICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsKLSAgICAgICAgICAgIGlmIChzbG90
LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6
TG9hZDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgpKQotICAgICAgICAgICAg
ICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpNaXNzOwotICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5p
c0NhY2hlYWJsZUdldHRlcigpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpH
ZXRHZXR0ZXI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8RE9NQXR0cmlidXRl
QW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlOworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFi
bGVDdXN0b20oKSAmJiBzbG90LmRvbUF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgICAgIGRvbUF0
dHJpYnV0ZSA9IHNsb3QuZG9tQXR0cmlidXRlKCk7CiAKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBQ
cm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgdHlwZSwgb2Zmc2V0LCBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBv
aW50U2V0KCksIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgfSBlbHNl
IGlmICghbG9hZFRhcmdldEZyb21Qcm94eSAmJiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNj
ZXNzQ2FzZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcihnZXR0ZXIsIHN0cnVjdHVyZSkgJiYgIXBy
b3RvdHlwZUFjY2Vzc0NoYWluKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1h
a2UgdGhpcyB3b3JrIHdpdGggcG9seSBwcm90bywgYnV0IGZvciBvdXIgb3duIHNhbml0eSwgd2Ug
cHJvYmFibHkKLSAgICAgICAgICAgIC8vIHdhbnQgdG8gZG8gYSBwb2ludGVyIGNoZWNrIG9uIHRo
ZSBhY3R1YWwgZ2V0dGVyLiBBIGdvb2QgdGltZSB0byBtYWtlIHRoaXMgd29yayB3b3VsZAotICAg
ICAgICAgICAgLy8gYmUgd2hlbiB3ZSBjYW4gaW5oZXJpdCBmcm9tIGJ1aWx0aW4gdHlwZXMgaW4g
cG9seSBwcm90byBmYXNoaW9uOgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NzMxOAotICAgICAgICAgICAgbmV3Q2FzZSA9IEludHJpbnNp
Y0dldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBzbG90LmNhY2hlZE9mZnNl
dCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgZ2V0dGVyKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSB8fCBzbG90LmlzVW5zZXQo
KSkgewotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVh
dGUodm0sIGNvZGVCbG9jaywgc2xvdC5pc1Vuc2V0KCkgPyBBY2Nlc3NDYXNlOjpNaXNzIDogQWNj
ZXNzQ2FzZTo6TG9hZCwKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIFdU
Rk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUlES2luZDo6VHJ5KSB7CiAgICAgICAgICAgICAgICAg
QWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOwotICAgICAgICAgICAgICAgIGlmIChzbG90Lmlz
Q2FjaGVhYmxlR2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNl
OjpHZXR0ZXI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpCi0gICAgICAgICAgICAgICAgICAgIHR5
cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlcjsKKyAgICAgICAgICAgICAgICBp
ZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBB
Y2Nlc3NDYXNlOjpMb2FkOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsb3QuaXNVbnNldCgp
KQorICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6TWlzczsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCisgICAgICAgICAgICAg
ICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXRHZXR0ZXI7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0
ZXI7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAK
LSAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUlES2luZDo6V2l0aFRoaXMgJiYgdHlw
ZSA9PSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRyaWJ1dGUpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAg
IG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgdHlw
ZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwg
c2xvdC53YXRjaHBvaW50U2V0KCksIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIWxvYWRUYXJnZXRGcm9tUHJveHkgJiYgZ2V0dGVyICYmIElu
dHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNhbkVtaXRJbnRyaW5zaWNHZXR0ZXIoZ2V0dGVyLCBz
dHJ1Y3R1cmUpICYmICFwcm90b3R5cGVBY2Nlc3NDaGFpbikgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIHdvcmsgd2l0aCBwb2x5IHByb3RvLCBidXQgZm9y
IG91ciBvd24gc2FuaXR5LCB3ZSBwcm9iYWJseQorICAgICAgICAgICAgICAgIC8vIHdhbnQgdG8g
ZG8gYSBwb2ludGVyIGNoZWNrIG9uIHRoZSBhY3R1YWwgZ2V0dGVyLiBBIGdvb2QgdGltZSB0byBt
YWtlIHRoaXMgd29yayB3b3VsZAorICAgICAgICAgICAgICAgIC8vIGJlIHdoZW4gd2UgY2FuIGlu
aGVyaXQgZnJvbSBidWlsdGluIHR5cGVzIGluIHBvbHkgcHJvdG8gZmFzaGlvbjoKKyAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MzE4
CisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgZ2V0dGVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
aWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpIHx8IHNsb3QuaXNVbnNldCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNv
ZGVCbG9jaywgc2xvdC5pc1Vuc2V0KCkgPyBBY2Nlc3NDYXNlOjpNaXNzIDogQWNjZXNzQ2FzZTo6
TG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRp
b25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBXVEZNb3Zl
KHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOworICAgICAgICAgICAg
ICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldHRlcjsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNz
b3IpCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNj
ZXNzb3JHZXR0ZXI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZUdldHRlcjsKIAotICAgICAgICAg
ICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAg
ICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCi0gICAgICAgICAgICAgICAgICAgIHNsb3Qu
d2F0Y2hwb2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LmN1c3RvbUdl
dHRlcigpIDogbnVsbHB0ciwKLSAgICAgICAgICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0ciwKLSAgICAgICAgICAgICAgICAgICAg
ZG9tQXR0cmlidXRlLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChraW5kID09IEdldEJ5SURLaW5kOjpXaXRoVGhpcyAmJiB0eXBlID09IEFj
Y2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyICYmIGRvbUF0dHJpYnV0ZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAg
ICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29u
ZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAg
c2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSA/IHNsb3QuY3Vz
dG9tR2V0dGVyKCkgOiBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC5pc0Nh
Y2hlYWJsZUN1c3RvbSgpID8gc2xvdC5zbG90QmFzZSgpIDogbnVsbHB0ciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRvbUF0dHJpYnV0ZSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikp
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KIAot
ICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZEFkZEFjY2Vzc0Nhc2UsIGJhc2VWYWx1ZS5jbGFz
c0luZm9Pck51bGwodm0pLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50
OjpHZXRCeUlkQWRkQWNjZXNzQ2FzZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIHBy
b3BlcnR5TmFtZSkpOwogCi0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQgPSBzdHVi
SW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIFdURk1v
dmUobmV3Q2FzZSkpOworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxv
Y2tlciwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOwogCi0gICAg
aWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgIExPR19JQygoSUNFdmVu
dDo6R2V0QnlJZFJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSks
IHByb3BlcnR5TmFtZSkpOwotICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
LmNvZGUoKSk7Ci0gICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOworICAgICAgICBpZiAocmVzdWx0
LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0
QnlJZFJlcGxhY2VXaXRoSnVtcCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIHByb3Bl
cnR5TmFtZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuY29kZSgpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChz
dHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CiAg
ICAgfQotICAgIAorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0s
IHN0dWJJbmZvLCBleGVjLT5jb2RlQmxvY2soKSwgcmVzdWx0KTsKKwogICAgIHJldHVybiByZXN1
bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwog
fQogCiB2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5SURLaW5kIGtpbmQpCiB7CiAg
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIEdDU2Fm
ZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhl
Yy0+dm0oKS5oZWFwKTsKICAgICAKLSAgICBpZiAodHJ5Q2FjaGVHZXRCeUlEKGxvY2tlciwgZXhl
YywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZl
VXBPbkNhY2hlKQorICAgIGlmICh0cnlDYWNoZUdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKQogICAgICAg
ICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLnNs
b3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW5jdGlvbihr
aW5kKSk7CiB9CiAKQEAgLTM4NiwyNDAgKzQwMSwyNTMgQEAgc3RhdGljIFZfSklUT3BlcmF0aW9u
X0VTc2lKSkkgYXBwcm9wcmlhdAogICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0
T3B0aW1pemU7CiB9CiAKLXN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQo
Y29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQog
ewotICAgIGlmIChmb3JjZUlDRmFpbHVyZShleGVjKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQg
cmVzdWx0OworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihl
eGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwogCi0gICAgaWYgKCFi
YXNlVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgIAot
ICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmICFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0KLSAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwotICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUu
YXNDZWxsKCk7CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShleGVjKSkKKyAgICAgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKIAotICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNl
VmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7Ci0gICAgICAgIGlmIChzbG90LnR5cGUo
KSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5nUHJvcGVydHkpIHsKLSAgICAgICAgICAgIHN0
cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKKyAgICAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3R1YkluZm8uY2Fj
aGVUeXBlID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nl
c3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShzdHViSW5mbywgc2xvdC5jYWNoZWRP
ZmZzZXQoKSkKLSAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KCkKLSAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5pbmZlcnJlZFR5
cGVGb3IoaWRlbnQuaW1wbCgpKSkgewotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJv
cGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwot
ICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlJZFNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQpKTsKLSAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0
Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9w
cmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKGNvZGVCbG9jaywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAg
IGlmICghc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmICFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkg
JiYgIXNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwogCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHN0cnVj
dHVyZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC50eXBlKCkg
PT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CisgICAgICAgIGlmICghc3RydWN0dXJl
LT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKIAotICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOworICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpOwogCi0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSkgewotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc0JlZW5GbGF0dGVuZWRC
ZWZvcmUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAg
ICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwganND
YXN0PEpTT2JqZWN0Kj4oYmFzZVZhbHVlKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChz
bG90LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7CisgICAg
ICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGluZ1Byb3Bl
cnR5KSB7CisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFj
ZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAg
ICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6Y2FuR2VuZXJhdGVTZWxmUHJvcGVydHlSZXBs
YWNlKHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAm
JiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgIXN0cnVjdHVyZS0+aW5mZXJyZWRUeXBlRm9yKGlkZW50LmltcGwoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVk
Q29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0
dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
LCBpZGVudCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlh
dGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZShjb2RlQmxvY2ssIHN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlOjphZGRQ
cm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KAotICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwgMCwgb2Zmc2V0KTsKLSAgICAg
ICAgICAgIGlmICghbmV3U3RydWN0dXJlIHx8ICFuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
KyAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxv
Y2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2UsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHN0cnVjdHVyZSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUo
KSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKIAotICAgICAgICAgICAgQVNTRVJU
KG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBB
U1NFUlQoIW5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwotICAgICAgICAgICAgQVNTRVJU
KG5ld1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47
Ci0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0g
ICAgICAgICAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKLSAgICAgICAgICAgICAgICBi
b29sIHVzZXNQb2x5UHJvdG87Ci0gICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4g
PSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6Y3JlYXRlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgYmFzZUNlbGwsIG51bGxwdHIsIHVzZXNQb2x5UHJvdG8pOwotICAgICAgICAgICAgICAgIGlm
ICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBp
bnZhbGlkIHRvIGFjY2VzcyB0aGlzIHByb3RvdHlwZSBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAg
ICBpZiAoIXN0cnVjdHVyZS0+aXNPYmplY3QoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYg
KCF1c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0No
YWluID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlz
cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBuZXdT
dHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxh
dHRlbmVkQmVmb3JlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0
cnVjdHVyZSh2bSwganNDYXN0PEpTT2JqZWN0Kj4oYmFzZVZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
OjpjcmVhdGUodm0sIGNvZGVCbG9jaywgb2Zmc2V0LCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVh
YmxlU2V0dGVyKCkpIHsKLSAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewot
ICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVB
Y2Nlc3NDaGFpbjsKLQotICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkg
ewotICAgICAgICAgICAgICAgIGJvb2wgdXNlc1BvbHlQcm90bzsKLSAgICAgICAgICAgICAgICBw
cm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjpjcmVhdGUoZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCksIHVzZXNQb2x5UHJv
dG8pOwotICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gSXQncyBpbnZhbGlkIHRvIGFjY2VzcyB0aGlzIHByb3RvdHlwZSBw
cm9wZXJ0eS4KKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPQorICAgICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJy
ZW50bHkoCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSwg
MCwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSB8fCAhbmV3U3Ry
dWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGlmICghdXNlc1BvbHlQcm90bykgewotICAgICAgICAgICAgICAgICAgICBwcm90b3R5
cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNl
dCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5
cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2Nr
LCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
QVNTRVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCFuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+
IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBO
b3REaXJlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VzUG9seVByb3RvOworICAg
ICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0No
YWluOjpjcmVhdGUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBiYXNlQ2VsbCwgbnVsbHB0
ciwgdXNlc1BvbHlQcm90byk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNj
ZXNzQ2hhaW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgaW52YWxpZCB0byBh
Y2Nlc3MgdGhpcyBwcm90b3R5cGUgcHJvcGVydHkuCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmICghdXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAgICAg
cHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAg
ICAgICAgIHZtLCBjb2RlQmxvY2ssIHNsb3QuaXNDdXN0b21BY2Nlc3NvcigpID8gQWNjZXNzQ2Fz
ZTo6Q3VzdG9tQWNjZXNzb3JTZXR0ZXIgOiBBY2Nlc3NDYXNlOjpDdXN0b21WYWx1ZVNldHRlciwg
c3RydWN0dXJlLCBpbnZhbGlkT2Zmc2V0LAotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCwg
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbiksIHNsb3QuY3VzdG9tU2V0dGVyKCksIHNsb3Qu
YmFzZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQb2x5
UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNjZXNzQ2hhaW47Ci0gICAgICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgICAg
IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgb2Zmc2V0LCBzdHJ1
Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vz
c0NoYWluKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkgeworICAgICAgICAgICAg
aWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgeworICAgICAgICAgICAgICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsKKyAgICAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworCisg
ICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICBib29sIHVzZXNQb2x5UHJvdG87CisgICAgICAgICAgICAgICAgICAgIHByb3Rv
dHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OmNyZWF0ZShleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGJhc2VDZWxsLCBzbG90LmJhc2UoKSwgdXNlc1BvbHlQcm90byk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgaW52YWxpZCB0byBhY2Nlc3MgdGhpcyBwcm90b3R5
cGUgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoc2xvdC5iYXNlKCkg
IT0gYmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCB1c2VzUG9seVByb3RvOwotICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46
OmNyZWF0ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGJhc2VDZWxsLCBzbG90LmJhc2Uo
KSwgdXNlc1BvbHlQcm90byk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3ND
aGFpbikgewotICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGludmFsaWQgdG8gYWNjZXNzIHRo
aXMgcHJvdG90eXBlIHByb3BlcnR5LgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VzUG9seVByb3RvKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUs
IHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCF1c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uU2V0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29u
ZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50Lmlt
cGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRl
KAorICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNz
b3IoKSA/IEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3Vz
dG9tVmFsdWVTZXR0ZXIsIHN0cnVjdHVyZSwgaW52YWxpZE9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSwgc2xvdC5j
dXN0b21TZXR0ZXIoKSwgc2xvdC5iYXNlKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAg
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5
cGVBY2Nlc3NDaGFpbjsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
bG90LmNhY2hlZE9mZnNldCgpOworCisgICAgICAgICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9
IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBib29sIHVzZXNQb2x5UHJvdG87Cisg
ICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNz
Q2hhaW46OmNyZWF0ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGJhc2VDZWxsLCBzbG90
LmJhc2UoKSwgdXNlc1BvbHlQcm90byk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90
eXBlQWNjZXNzQ2hhaW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgaW52YWxp
ZCB0byBhY2Nlc3MgdGhpcyBwcm90b3R5cGUgcHJvcGVydHkuCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGlmICghdXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAgICAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uU2V0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwg
aWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09
IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9mZnNldCA9
PSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKSk7CiAgICAgICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nh
c2U6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2Fz
ZTo6U2V0dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3Rv
dHlwZUFjY2Vzc0NoYWluKSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5ld0Nhc2Ug
PSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgdm0sIGNv
ZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9u
U2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CiAgICAgICAgIH0KLSAgICB9CiAK
LSAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRBZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCkpOwotICAgIAotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGNvZGVCbG9jaywgaWRlbnQsIFdU
Rk1vdmUobmV3Q2FzZSkpOwotICAgIAotICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUo
KSkgewotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5SWRSZXBsYWNlV2l0aEp1bXAsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6
UHV0QnlJZEFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAg
ICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAg
cmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGNvZGVCbG9jaywgaWRlbnQs
IFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNv
ZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkUmVwbGFjZVdpdGhK
dW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKIAotICAgICAgICBJbmxpbmVB
Y2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsKHJlc3Vs
dC5jb2RlKCkpKTsKKyAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChz
dHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CiAg
ICAgfQotICAgIAorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0s
IHN0dWJJbmZvLCBleGVjLT5jb2RlQmxvY2soKSwgcmVzdWx0KTsKKwogICAgIHJldHVybiByZXN1
bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwog
fQogCiB2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFs
dWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZv
LCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoZXhlYy0+
Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAKLSAgICBpZiAodHJ5
Q2FjaGVQdXRCeUlEKGxvY2tlciwgZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCisgICAgaWYg
KHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKICAgICAgICAgZnRs
VGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5zbG93UGF0
aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwg
cHV0S2luZCkpOwogfQogCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAot
ICAgIGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCitzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFz
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsCiAgICAgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgaWYg
KGZvcmNlSUNGYWlsdXJlKGV4ZWMpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAg
ICAKLSAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkgfHwgKCF3YXNGb3VuZCAmJiAhYmFzZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGVGb3JBYnNlbmNlKCkpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKLSAgICAKLSAgICBpZiAod2FzRm91bmQpIHsKLSAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVh
YmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICB9Ci0gICAgCi0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJl
KHZtKTsKLSAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHBy
b3RvdHlwZUFjY2Vzc0NoYWluOwotICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKLSAgICBpZiAod2FzRm91bmQpIHsKLSAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2Uo
KSAhPSBiYXNlKSB7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7
CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2Nr
KCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJl
KGV4ZWMpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAg
ICAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkgfHwgKCF3YXNGb3VuZCAmJiAhYmFzZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNB
cmVDYWNoZWFibGVGb3JBYnNlbmNlKCkpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgIAorICAgICAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgICAgIGlmICgh
c2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4
ZWMtPmNvZGVCbG9jaygpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0
cnVjdHVyZSh2bSk7CisgICAgICAgIAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UG9seVByb3Rv
QWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgIGlmICh3YXNGb3VuZCkgeworICAg
ICAgICAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlKSB7CisgICAgICAgICAgICAgICAg
Ym9vbCB1c2VzUG9seVByb3RvOworICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWlu
ID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OmNyZWF0ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGJhc2UsIHNsb3QsIHVzZXNQb2x5UHJvdG8pOworICAgICAgICAgICAgICAgIGlmICghcHJv
dG90eXBlQWNjZXNzQ2hhaW4pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBpbnZhbGlk
IHRvIGFjY2VzcyB0aGlzIHByb3RvdHlwZSBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICghdXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nl
c3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCks
IGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgYm9vbCB1c2VzUG9seVByb3RvOwogICAgICAgICAgICAg
cHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6Y3JlYXRlKGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgYmFzZSwgc2xvdCwgdXNlc1BvbHlQcm90byk7CiAgICAg
ICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKSB7CiAgICAgICAgICAgICAgICAgLy8g
SXQncyBpbnZhbGlkIHRvIGFjY2VzcyB0aGlzIHByb3RvdHlwZSBwcm9wZXJ0eS4KICAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgaWYgKCF1c2VzUG9seVByb3RvKSB7CiAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNz
Q2hhaW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICB2
bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1w
bCgpKTsKKyAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm9wZXJ0eU1pc3MoCisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMs
IHN0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGJvb2wgdXNlc1BvbHlQcm90bzsKLSAgICAgICAgcHJvdG90eXBl
QWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6Y3JlYXRlKGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgYmFzZSwgc2xvdCwgdXNlc1BvbHlQcm90byk7Ci0gICAgICAgIGlmICgh
cHJvdG90eXBlQWNjZXNzQ2hhaW4pIHsKLSAgICAgICAgICAgIC8vIEl0J3MgaW52YWxpZCB0byBh
Y2Nlc3MgdGhpcyBwcm90b3R5cGUgcHJvcGVydHkuCisgICAgICAgIGlmICghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCF1c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICBwcm90b3R5cGVB
Y2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCi0gICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9j
aywgZXhlYywgc3RydWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpZGVudCkpOwogCi0gICAgTE9HX0lDKChJQ0V2ZW50OjpJbkFkZEFjY2Vz
c0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vz
c0Nhc2U6OkluTWlzcywgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIFdU
Rk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICB2bSwgY29kZUJs
b2NrLCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBp
bnZhbGlkT2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgV1RGTW92ZShwcm90b3R5cGVB
Y2Nlc3NDaGFpbikpOworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxv
Y2tlciwgY29kZUJsb2NrLCBpZGVudCwgV1RGTW92ZShuZXdDYXNlKSk7CiAKLSAgICBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBj
b2RlQmxvY2ssIGlkZW50LCBXVEZNb3ZlKG5ld0Nhc2UpKTsKLSAgICAKLSAgICBpZiAocmVzdWx0
LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxh
Y2VXaXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKLSAgICAgICAgCi0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICBpZiAocmVzdWx0
LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5S
ZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwogCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcCgKLSAgICAgICAgICAgIHN0dWJJbmZvLnBh
dGNoYWJsZUp1bXBGb3JJbigpLAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwocmVzdWx0
LmNvZGUoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKAorICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoYWJsZUp1bXBGb3JJbigpLAorICAgICAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHJlc3VsdC5jb2RlKCkpKTsKKyAgICAgICAgfQogICAgIH0K
KworICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywg
ZXhlYy0+Y29kZUJsb2NrKCksIHJlc3VsdCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdC5zaG91
bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7CiB9CkBAIC02
MjksOCArNjU3LDcgQEAgdm9pZCByZXBhdGNoSW4oCiAgICAgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKLSAg
ICBpZiAodHJ5UmVwYXRjaEluKGxvY2tlciwgZXhlYywgYmFzZSwgaWRlbnQsIHdhc0ZvdW5kLCBz
bG90LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKKyAgICBpZiAodHJ5Q2FjaGVJbihleGVj
LCBiYXNlLCBpZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hl
KQogICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0
dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIG9wZXJhdGlvbkluKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>