<?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>202763</bug_id>
          
          <creation_ts>2019-10-09 13:13:22 -0700</creation_ts>
          <short_desc>[WinCairo] Move remote communication handling from RemoteInspectorServer to RemoteInspector.</short_desc>
          <delta_ts>2019-10-10 14:21:23 -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>Platform</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="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>basuke</cc>
    
    <cc>chris.reid</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1578361</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2019-10-09 13:13:22 -0700</bug_when>
    <thetext>Because RemoteInspector now exists in UIProcess, the old method which communicate with RemoteInspector in WebProcess and RemoteInspectorServer in UIProcess was meaningless or even bad. Remove this complex implementation and move communication handling from RemoteInspectorServer to directly RemoteInspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578394</commentid>
    <comment_count>1</comment_count>
      <attachid>380568</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2019-10-09 14:49:00 -0700</bug_when>
    <thetext>Created attachment 380568
PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578403</commentid>
    <comment_count>2</comment_count>
      <attachid>380575</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2019-10-09 15:02:00 -0700</bug_when>
    <thetext>Created attachment 380575
PATCH

style fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578486</commentid>
    <comment_count>3</comment_count>
      <attachid>380575</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-10-09 18:23:06 -0700</bug_when>
    <thetext>Comment on attachment 380575
PATCH

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

&gt; Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorServer.cpp:32
&gt; +

Nit: You don&apos;t need a newline here (since it&apos;s RemoteInspectorMessageParser.h, not RemoteInspectorServer.h).

&gt; Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorServer.h:49
&gt; +    void didClose(ConnectionID) override { };

Nit: No semicolon needed.

&gt; Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp:106
&gt; +#if PLATFORM(PLAYSTATION) || PLATFORM(WIN)

Maybe this should be USE(GENERIC_EVENT_LOOP) || USE(WINDOWS_EVENT_LOOP) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578823</commentid>
    <comment_count>4</comment_count>
      <attachid>380575</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2019-10-10 13:32:08 -0700</bug_when>
    <thetext>Comment on attachment 380575
PATCH

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

&gt;&gt; Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorServer.h:49
&gt;&gt; +    void didClose(ConnectionID) override { };
&gt; 
&gt; Nit: No semicolon needed.

Wow. Yes. It should be handled by style-checker!

&gt;&gt; Source/JavaScriptCore/inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp:106
&gt;&gt; +#if PLATFORM(PLAYSTATION) || PLATFORM(WIN)
&gt; 
&gt; Maybe this should be USE(GENERIC_EVENT_LOOP) || USE(WINDOWS_EVENT_LOOP) ?

That&apos;s right. Actually it is handle if every port has RunLoop::iterate() like WebCore::EventLoop::cycle()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578825</commentid>
    <comment_count>5</comment_count>
      <attachid>380676</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2019-10-10 13:33:44 -0700</bug_when>
    <thetext>Created attachment 380676
PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578847</commentid>
    <comment_count>6</comment_count>
      <attachid>380676</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-10 14:20:19 -0700</bug_when>
    <thetext>Comment on attachment 380676
PATCH

Clearing flags on attachment: 380676

Committed r250988: &lt;https://trac.webkit.org/changeset/250988&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578848</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-10 14:20:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578851</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-10 14:21:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/56169349&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380568</attachid>
            <date>2019-10-09 14:49:00 -0700</date>
            <delta_ts>2019-10-09 15:02:00 -0700</delta_ts>
            <desc>PATCH</desc>
            <filename>bug-202763.diff</filename>
            <type>text/plain</type>
            <size>42167</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGJmZTMxOWY2ZDQ1Li5jNGNjZTJmYmU0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTktMTAtMDkgIEJhc3Vr
ZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb10g
TW92ZSByZW1vdGUgY29tbXVuaWNhdGlvbiBoYW5kbGluZyBmcm9tIFJlbW90ZUluc3BlY3RvclNl
cnZlciB0byBSZW1vdGVJbnNwZWN0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDI3NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBCZWNhdXNlIFJlbW90ZUluc3BlY3RvciBub3cgZXhpc3RzIGluIFVJ
UHJvY2VzcywgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiB3aGljaCBjb21tdW5pY2F0ZSB3aXRoIFJl
bW90ZUluc3BlY3RvcgorICAgICAgICBpbiBXZWJQcm9jZXNzIGFuZCBSZW1vdGVJbnNwZWN0b3JT
ZXJ2ZXIgaW4gVUlQcm9jZXNzIHdhcyBtZWFuaW5nbGVzcyBvciBldmVuIGJhZC4gUmVtb3ZlIHRo
aXMgY29tcGxleAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBhbmQgbW92ZSBjb21tdW5pY2F0aW9u
IGhhbmRsaW5nIGZyb20gUmVtb3RlSW5zcGVjdG9yU2VydmVyIHRvIFJlbW90ZUluc3BlY3RvciBh
bmQgY29tbXVuaWNhdGUKKyAgICAgICAgZWFjaCBvdGhlciBkaXJlY3RseS4KKworICAgICAgICAq
IGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmg6CisgICAgICAgICogaW5zcGVjdG9y
L3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rv
clNlcnZlci5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6
flJlbW90ZUluc3BlY3RvclNlcnZlcik6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3RvclNlcnZlcjo6c3RhcnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JT
ZXJ2ZXI6OmRpZEFjY2VwdCk6CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yU2VydmVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yU29ja2V0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yOjpjb25uZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpk
aWRDbG9zZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2VuZFdlYklu
c3BlY3RvckV2ZW50KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzdGFy
dCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c3RvcEludGVybmFsKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpwdXNoTGlzdGluZ3NOb3cpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnB1c2hMaXN0aW5nc1Nvb24pOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9SZW1vdGUp
OgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldHVwKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvVGFyZ2V0KToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpiYWNrZW5kQ29tbWFuZHMgY29uc3QpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OmRpc3BhdGNoTWFwKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzZXR1cEluc3BlY3RvckNsaWVudCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2V0dXBUYXJnZXQpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OmZyb250ZW5kRGlkQ2xvc2UpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRw
b2ludC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBv
aW50Ojp+UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQpOgorICAgICAgICAoSW5zcGVjdG9y
OjpSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6bGlzdGVuSW5ldCk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50Ojppc0xpc3RlbmluZyk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50Ojp3b3JrZXJU
aHJlYWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2lu
dDo6Z2VuZXJhdGVDb25uZWN0aW9uSUQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNw
ZWN0b3JTb2NrZXRFbmRwb2ludDo6bWFrZUNvbm5lY3Rpb24pOgorICAgICAgICAoSW5zcGVjdG9y
OjpSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6Y3JlYXRlQ2xpZW50KToKKyAgICAgICAg
KEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmNyZWF0ZUxpc3RlbmVy
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6Omlu
dmFsaWRhdGVMaXN0ZW5lcik6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNv
Y2tldEVuZHBvaW50OjpnZXRQb3J0IGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3Rl
SW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmFjY2VwdEluZXRTb2NrZXRJZkVuYWJsZWQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBv
aW50Lmg6CisKIDIwMTktMTAtMDkgIEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdh
bGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBmb3Igbm9uLXVuaWZpZWQg
YnVpbGRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1v
dGUvUmVtb3RlSW5zcGVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Jl
bW90ZS9SZW1vdGVJbnNwZWN0b3IuaAppbmRleCAyMDdjMTg2NjRiNC4uZmIwOTM3OWRlNjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUlu
c3BlY3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1Jl
bW90ZUluc3BlY3Rvci5oCkBAIC01Nyw3ICs1Nyw2IEBAIHR5cGVkZWYgc3RydWN0IF9HREJ1c0lu
dGVyZmFjZVZUYWJsZSBHREJ1c0ludGVyZmFjZVZUYWJsZTsKICNpbmNsdWRlICJSZW1vdGVDb25u
ZWN0aW9uVG9UYXJnZXQuaCIKICNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xp
ZW50LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC0xNTAsOCArMTQ5LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJn
ZXQoVGFyZ2V0SUQsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwogI2VuZGlmCiAjaWYgVVNFKElOU1BF
Q1RPUl9TT0NLRVRfU0VSVkVSKQotICAgIHN0YXRpYyB2b2lkIHNldENvbm5lY3Rpb25JZGVudGlm
aWVyKFBsYXRmb3JtU29ja2V0VHlwZSk7Ci0gICAgc3RhdGljIHZvaWQgc2V0U2VydmVyUG9ydCh1
aW50MTZfdCk7CisgICAgdm9pZCByZXF1ZXN0QXV0b21hdGlvblNlc3Npb24oU3RyaW5nJiYgc2Vz
c2lvbklELCBjb25zdCBDbGllbnQ6OlNlc3Npb25DYXBhYmlsaXRpZXMmKTsKKworICAgIGJvb2wg
aXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhIW1fY2xpZW50Q29ubmVjdGlvbjsgfQorICAg
IHZvaWQgY29ubmVjdChDb25uZWN0aW9uSUQpOworCisgICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFu
ZHNQYXRoKGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzUGF0aCkgeyBtX2JhY2tlbmRDb21t
YW5kc1BhdGggPSBiYWNrZW5kQ29tbWFuZHNQYXRoOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAg
LTIxNCwxMCArMjE3LDEyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNlbmRXZWJJbnNwZWN0b3JF
dmVudChjb25zdCBTdHJpbmcmKTsKIAotICAgIHZvaWQgcmVjZWl2ZWRHZXRUYXJnZXRMaXN0TWVz
c2FnZShjb25zdCBFdmVudCYpOwotICAgIHZvaWQgcmVjZWl2ZWRTZXR1cE1lc3NhZ2UoY29uc3Qg
RXZlbnQmKTsKLSAgICB2b2lkIHJlY2VpdmVkRGF0YU1lc3NhZ2UoY29uc3QgRXZlbnQmKTsKLSAg
ICB2b2lkIHJlY2VpdmVkQ2xvc2VNZXNzYWdlKGNvbnN0IEV2ZW50Jik7CisgICAgdm9pZCBzZXR1
cEluc3BlY3RvckNsaWVudChjb25zdCBFdmVudCYpOworICAgIHZvaWQgc2V0dXBUYXJnZXQoY29u
c3QgRXZlbnQmKTsKKyAgICB2b2lkIGZyb250ZW5kRGlkQ2xvc2UoY29uc3QgRXZlbnQmKTsKKyAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IEV2ZW50Jik7CisKKyAgICBTdHJpbmcg
YmFja2VuZENvbW1hbmRzKCkgY29uc3Q7CiAjZW5kaWYKICAgICBzdGF0aWMgYm9vbCBzdGFydEVu
YWJsZWQ7CiAKQEAgLTI0MCw5ICsyNDUsMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgVVNF
KElOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSKQotICAgIHN0YXRpYyBQbGF0Zm9ybVNvY2tldFR5cGUg
c19jb25uZWN0aW9uSWRlbnRpZmllcjsKLSAgICBzdGF0aWMgdWludDE2X3Qgc19zZXJ2ZXJQb3J0
OwotICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gbV9jbGllbnRJRDsKKyAgICAvLyBDb25uZWN0
aW9uIGZyb20gUmVtb3RlSW5zcGVjdG9yQ2xpZW50IG9yIFdlYkRyaXZlci4KKyAgICBPcHRpb25h
bDxDb25uZWN0aW9uSUQ+IG1fY2xpZW50Q29ubmVjdGlvbjsKKyAgICBib29sIG1fcmVhZHlUb1B1
c2hMaXN0aW5ncyB7IGZhbHNlIH07CisKKyAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNQYXRo
OwogI2VuZGlmCiAKICAgICBSZW1vdGVJbnNwZWN0b3I6OkNsaWVudCogbV9jbGllbnQgeyBudWxs
cHRyIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90
ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVj
dGlvbkNsaWVudC5jcHAKaW5kZXggNTdlOTBhNGY3OWQuLjA2NTJlMTI3MDhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3Bw
CkBAIC00NiwxMiArNDYsNiBAQCBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IFJlbW90ZUluc3BlY3Rv
ckNvbm5lY3Rpb25DbGllbnQ6OmNvbm5lY3RJbmV0KGNvbnN0IGNoYXIqCiAgICAgcmV0dXJuIGVu
ZHBvaW50LmNvbm5lY3RJbmV0KHNlcnZlckFkZHIsIHNlcnZlclBvcnQsICp0aGlzKTsKIH0KIAot
T3B0aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50Ojps
aXN0ZW5JbmV0KGNvbnN0IGNoYXIqIGFkZHJlc3MsIHVpbnQxNl90IHBvcnQpCi17Ci0gICAgYXV0
byYgZW5kcG9pbnQgPSBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50Ojpz
aW5nbGV0b24oKTsKLSAgICByZXR1cm4gZW5kcG9pbnQubGlzdGVuSW5ldChhZGRyZXNzLCBwb3J0
LCAqdGhpcyk7Ci19Ci0KIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVjdG9yQ29u
bmVjdGlvbkNsaWVudDo6Y3JlYXRlQ2xpZW50KFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQpCiB7
CiAgICAgYXV0byYgZW5kcG9pbnQgPSBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVu
ZHBvaW50OjpzaW5nbGV0b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oCmluZGV4IDMwMzY1OWU3ZjE5Li40YmQxNThkMzE3MSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0
L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudC5oCkBAIC00MywxMiArNDMsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJlbW90ZUlu
c3BlY3RvckNvbm5lY3Rpb25DbGllbnQoKTsKIAogICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4g
Y29ubmVjdEluZXQoY29uc3QgY2hhciogc2VydmVyQWRkciwgdWludDE2X3Qgc2VydmVyUG9ydCk7
Ci0gICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBsaXN0ZW5JbmV0KGNvbnN0IGNoYXIqIGFkZHJl
c3MsIHVpbnQxNl90IHBvcnQpOwogICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gY3JlYXRlQ2xp
ZW50KFBsYXRmb3JtU29ja2V0VHlwZSk7CiAgICAgdm9pZCBzZW5kKENvbm5lY3Rpb25JRCwgY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90KTsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZShDb25uZWN0
aW9uSUQsIFZlY3Rvcjx1aW50OF90PiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEFjY2VwdChD
b25uZWN0aW9uSUQsIENvbm5lY3Rpb25JRCwgU29ja2V0OjpEb21haW4pIG92ZXJyaWRlIHsgfQog
CiAgICAgc3RydWN0IEV2ZW50IHsKICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yU2VydmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVt
b3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuY3BwCmluZGV4IGZmYmMyYmViMzAyLi44
YTlhNmNhN2RjZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9y
ZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5j
cHAKQEAgLTI5LDI1MSArMjksNDIgQEAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKIAog
I2luY2x1ZGUgIlJlbW90ZUluc3BlY3Rvck1lc3NhZ2VQYXJzZXIuaCIKLSNpbmNsdWRlIDx3dGYv
RmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCi1PcHRpb25hbDxQbGF0Zm9ybVNvY2tldFR5cGU+IFJlbW90ZUluc3BlY3Rv
clNlcnZlcjo6Y29ubmVjdCgpCi17Ci0gICAgaWYgKGF1dG8gc29ja2V0cyA9IFNvY2tldDo6Y3Jl
YXRlUGFpcigpKSB7Ci0gICAgICAgIGlmIChhdXRvIGlkID0gY3JlYXRlQ2xpZW50KHNvY2tldHMt
PmF0KDApKSkgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2Nr
KTsKLSAgICAgICAgICAgIG1faW5zcGVjdG9yQ29ubmVjdGlvbnMuYXBwZW5kKGlkLnZhbHVlKCkp
OwotCi0gICAgICAgICAgICByZXR1cm4gc29ja2V0cy0+YXQoMSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1PcHRpb25hbDx1aW50MTZfdD4gUmVt
b3RlSW5zcGVjdG9yU2VydmVyOjpsaXN0ZW5Gb3JUYXJnZXRzKCkKLXsKLSAgICBpZiAobV9pbnNw
ZWN0b3JMaXN0ZW5lcikgewotICAgICAgICBMT0dfRVJST1IoIkluc3BlY3RvciBzZXJ2ZXIgaXMg
YWxyZWFkeSBsaXN0ZW5pbmcgZm9yIHRhcmdldHMuIik7Ci0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gY29ubmVjdGlvbiA9IGxpc3RlbkluZXQoIjEy
Ny4wLjAuMSIsIDApKSB7Ci0gICAgICAgIG1faW5zcGVjdG9yTGlzdGVuZXIgPSBjb25uZWN0aW9u
OwotCi0gICAgICAgIGF1dG8mIGVuZHBvaW50ID0gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9p
bnQ6OnNpbmdsZXRvbigpOwotICAgICAgICByZXR1cm4gZW5kcG9pbnQuZ2V0UG9ydCgqY29ubmVj
dGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBSZW1v
dGVJbnNwZWN0b3JTZXJ2ZXI6OmRpZEFjY2VwdChDb25uZWN0aW9uSUQgYWNjZXB0ZWRJRCwgQ29u
bmVjdGlvbklEIGxpc3RlbmVySUQsIFNvY2tldDo6RG9tYWluIHR5cGUpCi17Ci0gICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAodHlwZSA9PSBTb2NrZXQ6OkRvbWFpbjo6TG9j
YWwgfHwgKG1faW5zcGVjdG9yTGlzdGVuZXIgJiYgbGlzdGVuZXJJRCA9PSAqbV9pbnNwZWN0b3JM
aXN0ZW5lcikpIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsK
LSAgICAgICAgbV9pbnNwZWN0b3JDb25uZWN0aW9ucy5hcHBlbmQoYWNjZXB0ZWRJRCk7Ci0gICAg
fSBlbHNlIGlmICh0eXBlID09IFNvY2tldDo6RG9tYWluOjpOZXR3b3JrKSB7Ci0gICAgICAgIGlm
IChtX2NsaWVudENvbm5lY3Rpb24pIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW5zcGVjdG9y
IHNlcnZlciBjYW4gYWNjZXB0IG9ubHkgMSBjbGllbnQiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBtX2NsaWVudENvbm5lY3Rpb24gPSBhY2NlcHRlZElEOwotICAg
IH0KLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmRpZENsb3NlKENvbm5lY3Rpb25J
RCBpZCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChpZCA9PSBt
X2NsaWVudENvbm5lY3Rpb24pIHsKLSAgICAgICAgLy8gQ29ubmVjdGlvbiBmcm9tIHRoZSByZW1v
dGUgY2xpZW50IGNsb3NlZC4KLSAgICAgICAgY2xpZW50Q29ubmVjdGlvbkNsb3NlZCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ29ubmVjdGlvbiBmcm9tIFdlYlByb2Nlc3Mg
Y2xvc2VkLgotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgaWRdIHsKLSAgICAg
ICAgY29ubmVjdGlvbkNsb3NlZChpZCk7Ci0gICAgfSk7Ci19Ci0KLUhhc2hNYXA8U3RyaW5nLCBS
ZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpDYWxsSGFuZGxlcj4mIFJlbW90ZUluc3Bl
Y3RvclNlcnZlcjo6ZGlzcGF0Y2hNYXAoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxI
YXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+PiBkaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5n
LCBDYWxsSGFuZGxlcj4oewotICAgICAgICB7ICJTZXRUYXJnZXRMaXN0Il9zLCBzdGF0aWNfY2Fz
dDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0VGFyZ2V0TGlzdCkgfSwK
LSAgICAgICAgeyAiU2V0dXBJbnNwZWN0b3JDbGllbnQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5k
bGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cEluc3BlY3RvckNsaWVudCkgfSwKLSAg
ICAgICAgeyAiU2V0dXAiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVj
dG9yU2VydmVyOjpzZXR1cCkgfSwKLSAgICAgICAgeyAiRnJvbnRlbmREaWRDbG9zZSJfcywgc3Rh
dGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmNsb3NlKSB9LAot
ICAgICAgICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5k
bGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpIH0sCi0g
ICAgICAgIHsgIlNlbmRNZXNzYWdlVG9CYWNrZW5kIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxl
cj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQpIH0sCi0gICAg
fSk7Ci0KLSAgICByZXR1cm4gZGlzcGF0Y2hNYXA7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9y
U2VydmVyOjpzZW5kV2ViSW5zcGVjdG9yRXZlbnQoQ29ubmVjdGlvbklEIGlkLCBjb25zdCBTdHJp
bmcmIGV2ZW50KQotewotICAgIGNvbnN0IENTdHJpbmcgbWVzc2FnZSA9IGV2ZW50LnV0ZjgoKTsK
LSAgICBzZW5kKGlkLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtZXNzYWdlLmRh
dGEoKSksIG1lc3NhZ2UubGVuZ3RoKCkpOwotfQotCiBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXImIFJl
bW90ZUluc3BlY3RvclNlcnZlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8UmVtb3RlSW5zcGVjdG9yU2VydmVyPiBzZXJ2ZXI7CiAgICAgcmV0dXJuIHNlcnZlcjsK
IH0KIAotYm9vbCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnN0YXJ0KGNvbnN0IGNoYXIqIGFkZHJl
c3MsIHVpbnQxNl90IHBvcnQpCi17Ci0gICAgbV9zZXJ2ZXIgPSBsaXN0ZW5JbmV0KGFkZHJlc3Ms
IHBvcnQpOwotICAgIHJldHVybiBpc1J1bm5pbmcoKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0
b3JTZXJ2ZXI6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fY2xpZW50Q29ubmVjdGlvbiB8fCAhZXZl
bnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0YXJnZXRMaXN0RXZlbnQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHRhcmdldExpc3RFdmVudC0+c2V0U3RyaW5n
KCJldmVudCJfcywgIlNldFRhcmdldExpc3QiX3MpOwotICAgIHRhcmdldExpc3RFdmVudC0+c2V0
SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBldmVudC5jbGllbnRJRCk7Ci0gICAgdGFyZ2V0TGlz
dEV2ZW50LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGV2ZW50Lm1lc3NhZ2UudmFsdWUoKSk7Ci0g
ICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KG1fY2xpZW50Q29ubmVjdGlvbi52YWx1ZSgpLCB0YXJn
ZXRMaXN0RXZlbnQtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JT
ZXJ2ZXI6OnNldHVwSW5zcGVjdG9yQ2xpZW50KGNvbnN0IEV2ZW50JikKK1JlbW90ZUluc3BlY3Rv
clNlcnZlcjo6flJlbW90ZUluc3BlY3RvclNlcnZlcigpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgIGF1dG8gYmFja2VuZENvbW1hbmRzRXZlbnQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGJhY2tlbmRDb21tYW5kc0V2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9z
LCAiQmFja2VuZENvbW1hbmRzIl9zKTsKLSAgICBiYWNrZW5kQ29tbWFuZHNFdmVudC0+c2V0U3Ry
aW5nKCJtZXNzYWdlIl9zLCBiYWNrZW5kQ29tbWFuZHMoKSk7Ci0gICAgc2VuZFdlYkluc3BlY3Rv
ckV2ZW50KG1fY2xpZW50Q29ubmVjdGlvbi52YWx1ZSgpLCBiYWNrZW5kQ29tbWFuZHNFdmVudC0+
dG9KU09OU3RyaW5nKCkpOwotCi0gICAgYXV0byBzZXR1cEV2ZW50ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBzZXR1cEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiR2V0VGFyZ2V0
TGlzdCJfcyk7Ci0KLSAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25uZWN0aW9uc0xvY2spOwotICAg
IGZvciAoYXV0byBjb25uZWN0aW9uIDogbV9pbnNwZWN0b3JDb25uZWN0aW9ucykKLSAgICAgICAg
c2VuZFdlYkluc3BlY3RvckV2ZW50KGNvbm5lY3Rpb24sIHNldHVwRXZlbnQtPnRvSlNPTlN0cmlu
ZygpKTsKKyAgICBhdXRvJiBlbmRwb2ludCA9IEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29j
a2V0RW5kcG9pbnQ6OnNpbmdsZXRvbigpOworICAgIGVuZHBvaW50LmludmFsaWRhdGVMaXN0ZW5l
cigqdGhpcyk7CiB9CiAKLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cChjb25zdCBF
dmVudCYgZXZlbnQpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICgh
ZXZlbnQudGFyZ2V0SUQgfHwgIWV2ZW50LmNvbm5lY3Rpb25JRCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9pbnNwZWN0aW9uVGFyZ2V0cy5hZGQoc3RkOjptYWtlX3BhaXIoZXZlbnQuY29ubmVj
dGlvbklELnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpKTsKLQotICAgIGF1dG8gc2V0
dXBFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgc2V0dXBFdmVudC0+c2V0U3Ry
aW5nKCJldmVudCJfcywgIlNldHVwIl9zKTsKLSAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJ0
YXJnZXRJRCJfcywgZXZlbnQudGFyZ2V0SUQudmFsdWUoKSk7Ci0gICAgc2VuZFdlYkluc3BlY3Rv
ckV2ZW50KGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgpLCBzZXR1cEV2ZW50LT50b0pTT05TdHJp
bmcoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kQ2xvc2VFdmVudChD
b25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgYXV0byBjbG9zZUV2ZW50ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBjbG9zZUV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiRnJvbnRl
bmREaWRDbG9zZSJfcyk7Ci0gICAgY2xvc2VFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3Ms
IHRhcmdldElEKTsKLSAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29ubmVjdGlvbklELCBjbG9z
ZUV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVy
OjpjbG9zZShjb25zdCBFdmVudCYgZXZlbnQpCitib29sIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6
c3RhcnQoY29uc3QgY2hhciogYWRkcmVzcywgdWludDE2X3QgcG9ydCkKIHsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgc2VuZENsb3NlRXZlbnQoZXZlbnQuY29ubmVjdGlvbklE
LnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpOwotICAgIG1faW5zcGVjdGlvblRhcmdl
dHMucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgpLCBldmVu
dC50YXJnZXRJRC52YWx1ZSgpKSk7CisgICAgYXV0byYgZW5kcG9pbnQgPSBJbnNwZWN0b3I6OlJl
bW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpzaW5nbGV0b24oKTsKKyAgICBtX3NlcnZlciA9
IGVuZHBvaW50Lmxpc3RlbkluZXQoYWRkcmVzcywgcG9ydCwgKnRoaXMsIFJlbW90ZUluc3BlY3Rv
cjo6c2luZ2xldG9uKCkpOworICAgIHJldHVybiBpc1J1bm5pbmcoKTsKIH0KIAotdm9pZCBSZW1v
dGVJbnNwZWN0b3JTZXJ2ZXI6OmNsaWVudENvbm5lY3Rpb25DbG9zZWQoKQorYm9vbCBSZW1vdGVJ
bnNwZWN0b3JTZXJ2ZXI6OmRpZEFjY2VwdChDb25uZWN0aW9uSUQgYWNjZXB0ZWRJRCwgQ29ubmVj
dGlvbklELCBTb2NrZXQ6OkRvbWFpbikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
IAotICAgIG1fY2xpZW50Q29ubmVjdGlvbiA9IFdURjo6bnVsbG9wdDsKLQotICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbdGhpc10gewotICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25u
ZWN0aW9uc0xvY2spOwotICAgICAgICBmb3IgKGF1dG8gY29ubmVjdGlvblRhcmdldFBhaXIgOiBt
X2luc3BlY3Rpb25UYXJnZXRzKQotICAgICAgICAgICAgc2VuZENsb3NlRXZlbnQoY29ubmVjdGlv
blRhcmdldFBhaXIuZmlyc3QsIGNvbm5lY3Rpb25UYXJnZXRQYWlyLnNlY29uZCk7Ci0gICAgICAg
IG1faW5zcGVjdGlvblRhcmdldHMuY2xlYXIoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZW1vdGVJ
bnNwZWN0b3JTZXJ2ZXI6OmNvbm5lY3Rpb25DbG9zZWQoQ29ubmVjdGlvbklEIGNsaWVudElEKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBMb2NrSG9sZGVyIGxvY2sobV9j
b25uZWN0aW9uc0xvY2spOwotICAgIGlmIChtX2luc3BlY3RvckNvbm5lY3Rpb25zLnJlbW92ZUZp
cnN0KGNsaWVudElEKSAmJiBtX2NsaWVudENvbm5lY3Rpb24pIHsKLSAgICAgICAgYXV0byBjbG9z
ZWRFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGNsb3NlZEV2ZW50LT5z
ZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0VGFyZ2V0TGlzdCJfcyk7Ci0gICAgICAgIGNsb3NlZEV2
ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNsaWVudElEKTsKLSAgICAgICAgYXV0
byB0YXJnZXRMaXN0ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICBjbG9zZWRFdmVu
dC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB0YXJnZXRMaXN0LT50b0pTT05TdHJpbmcoKSk7Ci0g
ICAgICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChtX2NsaWVudENvbm5lY3Rpb24udmFsdWUoKSwg
Y2xvc2VkRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlSW5z
cGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBFdmVudCYgZXZlbnQpCi17
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghZXZlbnQuY29ubmVjdGlv
bklEIHx8ICFldmVudC50YXJnZXRJRCB8fCAhZXZlbnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byBzZW5kRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHNl
bmRFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNlbmRNZXNzYWdlVG9UYXJnZXQiX3MpOwot
ICAgIHNlbmRFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIGV2ZW50LnRhcmdldElELnZh
bHVlKCkpOwotICAgIHNlbmRFdmVudC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBldmVudC5tZXNz
YWdlLnZhbHVlKCkpOwotICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChldmVudC5jb25uZWN0aW9u
SUQudmFsdWUoKSwgc2VuZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
SW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQmIGV2ZW50
KQotewotICAgIGlmICghbV9jbGllbnRDb25uZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFldmVudC50YXJnZXRJRCB8fCAh
ZXZlbnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBzZW5kRXZlbnQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHNlbmRFdmVudC0+c2V0U3RyaW5nKCJldmVudCJf
cywgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcyk7Ci0gICAgc2VuZEV2ZW50LT5zZXRJbnRlZ2Vy
KCJ0YXJnZXRJRCJfcywgZXZlbnQudGFyZ2V0SUQudmFsdWUoKSk7Ci0gICAgc2VuZEV2ZW50LT5z
ZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGV2ZW50LmNsaWVudElEKTsKLSAgICBzZW5kRXZl
bnQtPnNldFN0cmluZygibWVzc2FnZSJfcywgZXZlbnQubWVzc2FnZS52YWx1ZSgpKTsKLSAgICBz
ZW5kV2ViSW5zcGVjdG9yRXZlbnQobV9jbGllbnRDb25uZWN0aW9uLnZhbHVlKCksIHNlbmRFdmVu
dC0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1TdHJpbmcgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpi
YWNrZW5kQ29tbWFuZHMoKSBjb25zdAotewotICAgIGlmIChtX2JhY2tlbmRDb21tYW5kc1BhdGgu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShtX2JhY2tlbmRDb21tYW5kc1BhdGgsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6UmVhZCk7Ci0gICAgaWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGhhbmRs
ZSkpCi0gICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byYgaW5zcGVjdG9yID0gUmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoaW5zcGVjdG9yLmlzQ29ubmVjdGVkKCkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJSZW1vdGVJbnNwZWN0b3IgY2FuIGFjY2VwdCBvbmx5IDEgY2xp
ZW50Iik7CiAKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlm
IChGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYW5kbGUsIHNpemUpKSB7Ci0gICAgICAgIFZlY3Rv
cjxMQ2hhcj4gYnVmZmVyKHNpemUpOwotICAgICAgICBpZiAoRmlsZVN5c3RlbTo6cmVhZEZyb21G
aWxlKGhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyLmRhdGEoKSksIHNpemUp
ID09IHNpemUpCi0gICAgICAgICAgICByZXN1bHQgPSBTdHJpbmc6OmFkb3B0KFdURk1vdmUoYnVm
ZmVyKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgRmlsZVN5c3RlbTo6Y2xv
c2VGaWxlKGhhbmRsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpbnNwZWN0b3IuY29ubmVj
dChhY2NlcHRlZElEKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90
ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmgKaW5kZXggMDkx
ZDk4OGY5YzIuLmRjMmY5ZThiYzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rv
clNlcnZlci5oCkBAIC0yOCw2NiArMjgsMjcgQEAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKIAogI2luY2x1ZGUgIlJlbW90ZUluc3BlY3Rvci5oIgotCi0jaW5jbHVkZSAiUmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgIlJl
bW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmgiCiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci1jbGFzcyBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yQ29u
bmVjdGlvbkNsaWVudCB7CitjbGFzcyBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIgZmluYWwgOiBwdWJs
aWMgUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6Okxpc3RlbmVyIHsKIHB1YmxpYzoKKyAg
ICB+UmVtb3RlSW5zcGVjdG9yU2VydmVyKCk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgUmVtb3RlSW5zcGVjdG9yU2VydmVyJiBzaW5nbGV0b24oKTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgc3RhcnQoY29uc3QgY2hhciogYWRkcmVzcywgdWludDE2X3QgcG9ydCk7CiAg
ICAgYm9vbCBpc1J1bm5pbmcoKSBjb25zdCB7IHJldHVybiAhIW1fc2VydmVyOyB9CiAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBPcHRpb25hbDx1aW50MTZfdD4gbGlzdGVuRm9yVGFyZ2V0cygpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFBsYXRmb3JtU29ja2V0VHlwZT4gY29ubmVj
dCgpOwotCi0gICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHNQYXRoKGNvbnN0IFN0cmluZyYgYmFj
a2VuZENvbW1hbmRzUGF0aCkgeyBtX2JhY2tlbmRDb21tYW5kc1BhdGggPSBiYWNrZW5kQ29tbWFu
ZHNQYXRoOyB9Ci0KIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFJl
bW90ZUluc3BlY3RvclNlcnZlcj47CiAgICAgUmVtb3RlSW5zcGVjdG9yU2VydmVyKCkgeyBTb2Nr
ZXQ6OmluaXQoKTsgfQogCi0gICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKENvbm5lY3Rpb25JRCk7
Ci0KLSAgICB2b2lkIHNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmKTsKLSAgICB2b2lkIHNldHVw
SW5zcGVjdG9yQ2xpZW50KGNvbnN0IEV2ZW50Jik7Ci0gICAgdm9pZCBzZXR1cChjb25zdCBFdmVu
dCYpOwotICAgIHZvaWQgY2xvc2UoY29uc3QgRXZlbnQmKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdl
VG9Gcm9udGVuZChjb25zdCBFdmVudCYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQo
Y29uc3QgRXZlbnQmKTsKLQotICAgIHZvaWQgc2VuZENsb3NlRXZlbnQoQ29ubmVjdGlvbklELCBU
YXJnZXRJRCk7Ci0gICAgdm9pZCBjbGllbnRDb25uZWN0aW9uQ2xvc2VkKCk7Ci0KLSAgICB2b2lk
IGRpZEFjY2VwdChDb25uZWN0aW9uSUQgYWNjZXB0ZWRJRCwgQ29ubmVjdGlvbklEIGxpc3RlbmVy
SUQsIFNvY2tldDo6RG9tYWluKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZENsb3NlKENvbm5lY3Rp
b25JRCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNlbmRXZWJJbnNwZWN0b3JFdmVudChDb25uZWN0
aW9uSUQsIGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGJhY2tlbmRDb21tYW5kcygpIGNv
bnN0OwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiYgZGlzcGF0Y2hNYXAoKSBv
dmVycmlkZTsKLQotICAgIEhhc2hTZXQ8c3RkOjpwYWlyPENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQ+
PiBtX2luc3BlY3Rpb25UYXJnZXRzOworICAgIGJvb2wgZGlkQWNjZXB0KENvbm5lY3Rpb25JRCBh
Y2NlcHRlZElELCBDb25uZWN0aW9uSUQgbGlzdGVuZXJJRCwgU29ja2V0OjpEb21haW4pIG92ZXJy
aWRlOworICAgIHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSBvdmVycmlkZSB7IH07CiAKICAg
ICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IG1fc2VydmVyOwotCi0gICAgLy8gQ29ubmVjdGlvbnMg
dG8gdGhlIFdlYlByb2Nlc3MuCi0gICAgVmVjdG9yPENvbm5lY3Rpb25JRD4gbV9pbnNwZWN0b3JD
b25uZWN0aW9uczsKLSAgICBMb2NrIG1fY29ubmVjdGlvbnNMb2NrOwotCi0gICAgLy8gTGlzdGVu
ZXIgZm9yIHRhcmdldHMuCi0gICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBtX2luc3BlY3Rvckxp
c3RlbmVyOwotCi0gICAgLy8gQ29ubmVjdGlvbiBmcm9tIFJlbW90ZUluc3BlY3RvckNsaWVudC4K
LSAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IG1fY2xpZW50Q29ubmVjdGlvbjsKLQotICAgIFN0
cmluZyBtX2JhY2tlbmRDb21tYW5kc1BhdGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5jcHAKaW5kZXggNGI4
YmY5OTY2NmMuLmVlYjVmYzQxOThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yU29ja2V0LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlJlbW90ZUF1dG9tYXRp
b25UYXJnZXQuaCIKICNpbmNsdWRlICJSZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQuaCIKICNpbmNs
dWRlICJSZW1vdGVJbnNwZWN0aW9uVGFyZ2V0LmgiCisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0u
aD4KICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC0zOCw5ICszOSw2IEBACiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi1QbGF0Zm9ybVNvY2tldFR5cGUgUmVtb3RlSW5zcGVj
dG9yOjpzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID0gSU5WQUxJRF9TT0NLRVRfVkFMVUU7Ci11aW50
MTZfdCBSZW1vdGVJbnNwZWN0b3I6OnNfc2VydmVyUG9ydCA9IDA7Ci0KIFJlbW90ZUluc3BlY3Rv
ciYgUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxSZW1vdGVJbnNwZWN0b3I+IHNoYXJlZDsKQEAgLTUzLDU1ICs1MSw0MyBAQCBSZW1vdGVJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvcigpCiAgICAgc3RhcnQoKTsKIH0KIAotdm9pZCBSZW1v
dGVJbnNwZWN0b3I6OmRpZENsb3NlKENvbm5lY3Rpb25JRCBpZCkKK3ZvaWQgUmVtb3RlSW5zcGVj
dG9yOjpjb25uZWN0KENvbm5lY3Rpb25JRCBpZCkKIHsKLSAgICBpZiAoaWQgIT0gbV9jbGllbnRJ
RC52YWx1ZSgpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFpc0Nvbm5lY3RlZCgpKTsK
IAotICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbPV0gewotICAgICAgICBMb2NrSG9s
ZGVyIGxvY2sobV9tdXRleCk7Ci0gICAgICAgIHN0b3BJbnRlcm5hbChTdG9wU291cmNlOjpBUEkp
OwotICAgIH0pOworICAgIG1fY2xpZW50Q29ubmVjdGlvbiA9IGlkOworICAgIHN0YXJ0KCk7CiB9
CiAKLUhhc2hNYXA8U3RyaW5nLCBSZW1vdGVJbnNwZWN0b3I6OkNhbGxIYW5kbGVyPiYgUmVtb3Rl
SW5zcGVjdG9yOjpkaXNwYXRjaE1hcCgpCit2b2lkIFJlbW90ZUluc3BlY3Rvcjo6ZGlkQ2xvc2Uo
Q29ubmVjdGlvbklEKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmlu
ZywgQ2FsbEhhbmRsZXI+PiBtZXRob2RzID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPih7
Ci0gICAgICAgIHsgIkdldFRhcmdldExpc3QiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigm
UmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZEdldFRhcmdldExpc3RNZXNzYWdlKSB9LAotICAgICAg
ICB7ICJTZXR1cCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3I6
OnJlY2VpdmVkU2V0dXBNZXNzYWdlKSB9LAotICAgICAgICB7ICJTZW5kTWVzc2FnZVRvVGFyZ2V0
Il9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRE
YXRhTWVzc2FnZSkgfSwKLSAgICAgICAgeyAiRnJvbnRlbmREaWRDbG9zZSJfcywgc3RhdGljX2Nh
c3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3I6OnJlY2VpdmVkQ2xvc2VNZXNzYWdlKSB9
LAotICAgIH0pOworICAgIEFTU0VSVChpc0Nvbm5lY3RlZCgpKTsKIAotICAgIHJldHVybiBtZXRo
b2RzOworICAgIG1fY2xpZW50Q29ubmVjdGlvbiA9IFdURjo6bnVsbG9wdDsKKworICAgIFJ1bkxv
b3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbPV0geworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9t
dXRleCk7CisgICAgICAgIHN0b3BJbnRlcm5hbChTdG9wU291cmNlOjpBUEkpOworICAgIH0pOwog
fQogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZFdlYkluc3BlY3RvckV2ZW50KGNvbnN0IFN0
cmluZyYgZXZlbnQpCiB7Ci0gICAgaWYgKCFtX2NsaWVudElEKQorICAgIGlmICghbV9jbGllbnRD
b25uZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBDU3RyaW5nIG1lc3NhZ2Ug
PSBldmVudC51dGY4KCk7Ci0gICAgc2VuZChtX2NsaWVudElELnZhbHVlKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2FnZS5sZW5ndGgoKSk7
CisgICAgc2VuZChtX2NsaWVudENvbm5lY3Rpb24udmFsdWUoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4obWVzc2FnZS5kYXRhKCkpLCBtZXNzYWdlLmxlbmd0aCgpKTsKIH0KIAog
dm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0YXJ0KCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9t
dXRleCk7CiAKLSAgICBpZiAobV9lbmFibGVkIHx8IChzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID09
IElOVkFMSURfU09DS0VUX1ZBTFVFICYmICFzX3NlcnZlclBvcnQpKQorICAgIGlmIChtX2VuYWJs
ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZW5hYmxlZCA9IHRydWU7Ci0KLSAgICBpZiAo
c19jb25uZWN0aW9uSWRlbnRpZmllciAhPSBJTlZBTElEX1NPQ0tFVF9WQUxVRSkgewotICAgICAg
ICBtX2NsaWVudElEID0gY3JlYXRlQ2xpZW50KHNfY29ubmVjdGlvbklkZW50aWZpZXIpOwotICAg
ICAgICBzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID0gSU5WQUxJRF9TT0NLRVRfVkFMVUU7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fY2xpZW50SUQgPSBjb25uZWN0SW5ldCgiMTI3LjAuMC4xIiwgc19z
ZXJ2ZXJQb3J0KTsKLQotICAgIGlmICghbV90YXJnZXRNYXAuaXNFbXB0eSgpKQotICAgICAgICBw
dXNoTGlzdGluZ3NTb29uKCk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzdG9wSW50ZXJu
YWwoU3RvcFNvdXJjZSkKQEAgLTExMSw2ICs5Nyw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpz
dG9wSW50ZXJuYWwoU3RvcFNvdXJjZSkKIAogICAgIG1fZW5hYmxlZCA9IGZhbHNlOwogICAgIG1f
cHVzaFNjaGVkdWxlZCA9IGZhbHNlOworICAgIG1fcmVhZHlUb1B1c2hMaXN0aW5ncyA9IGZhbHNl
OwogCiAgICAgZm9yIChhdXRvIHRhcmdldENvbm5lY3Rpb24gOiBtX3RhcmdldENvbm5lY3Rpb25N
YXAudmFsdWVzKCkpCiAgICAgICAgIHRhcmdldENvbm5lY3Rpb24tPmNsb3NlKCk7CkBAIC0xMTks
NyArMTA2LDYgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3BJbnRlcm5hbChTdG9wU291cmNl
KQogICAgIHVwZGF0ZUhhc0FjdGl2ZURlYnVnU2Vzc2lvbigpOwogCiAgICAgbV9hdXRvbWF0aWNJ
bnNwZWN0aW9uUGF1c2VkID0gZmFsc2U7Ci0gICAgbV9jbGllbnRJRCA9IFdURjo6bnVsbG9wdDsK
IH0KIAogVGFyZ2V0TGlzdGluZyBSZW1vdGVJbnNwZWN0b3I6Omxpc3RpbmdGb3JJbnNwZWN0aW9u
VGFyZ2V0KGNvbnN0IFJlbW90ZUluc3BlY3Rpb25UYXJnZXQmIHRhcmdldCkgY29uc3QKQEAgLTE1
NCw3ICsxNDAsNyBAQCBUYXJnZXRMaXN0aW5nIFJlbW90ZUluc3BlY3Rvcjo6bGlzdGluZ0ZvckF1
dG9tYXRpb25UYXJnZXQoY29uc3QgUmVtb3RlQXV0b21hdGlvbgogCiB2b2lkIFJlbW90ZUluc3Bl
Y3Rvcjo6cHVzaExpc3RpbmdzTm93KCkKIHsKLSAgICBpZiAoIW1fY2xpZW50SUQpCisgICAgaWYg
KCFpc0Nvbm5lY3RlZCgpIHx8ICFtX3JlYWR5VG9QdXNoTGlzdGluZ3MpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fcHVzaFNjaGVkdWxlZCA9IGZhbHNlOwpAQCAtMTY2LDEyICsxNTIsMTQgQEAg
dm9pZCBSZW1vdGVJbnNwZWN0b3I6OnB1c2hMaXN0aW5nc05vdygpCiAgICAgYXV0byBqc29uRXZl
bnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25FdmVudC0+c2V0U3RyaW5nKCJl
dmVudCJfcywgIlNldFRhcmdldExpc3QiX3MpOwogICAgIGpzb25FdmVudC0+c2V0U3RyaW5nKCJt
ZXNzYWdlIl9zLCB0YXJnZXRMaXN0SlNPTi0+dG9KU09OU3RyaW5nKCkpOworICAgIGpzb25FdmVu
dC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBtX2NsaWVudENvbm5lY3Rpb24udmFsdWUo
KSk7CisgICAganNvbkV2ZW50LT5zZXRCb29sZWFuKCJyZW1vdGVBdXRvbWF0aW9uQWxsb3dlZCJf
cywgbV9jbGllbnRDYXBhYmlsaXRpZXMgJiYgbV9jbGllbnRDYXBhYmlsaXRpZXMtPnJlbW90ZUF1
dG9tYXRpb25BbGxvd2VkKTsKICAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoanNvbkV2ZW50LT50
b0pTT05TdHJpbmcoKSk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpwdXNoTGlzdGluZ3NT
b29uKCkKIHsKLSAgICBpZiAoIW1fY2xpZW50SUQpCisgICAgaWYgKCFpc0Nvbm5lY3RlZCgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9wdXNoU2NoZWR1bGVkKQpAQCAtMTkyLDUyICsx
ODAsMTA2IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZW5kQXV0b21hdGljSW5zcGVjdGlvbkNh
bmRpZGF0ZU1lc3NhZ2UoKQogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZE1lc3NhZ2VUb1Jl
bW90ZShUYXJnZXRJRCB0YXJnZXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7
Ci0gICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOwotICAgIGlmICghbV9jbGllbnRJRCkKKyAg
ICBpZiAoIW1fY2xpZW50Q29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBz
ZW5kTWVzc2FnZUV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBzZW5kTWVzc2Fn
ZUV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SWRlbnRpZmllcik7CiAgICAg
c2VuZE1lc3NhZ2VFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNlbmRNZXNzYWdlVG9Gcm9u
dGVuZCJfcyk7CisgICAgc2VuZE1lc3NhZ2VFdmVudC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklE
Il9zLCBtX2NsaWVudENvbm5lY3Rpb24udmFsdWUoKSk7CiAgICAgc2VuZE1lc3NhZ2VFdmVudC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBtZXNzYWdlKTsKICAgICBzZW5kV2ViSW5zcGVjdG9yRXZl
bnQoc2VuZE1lc3NhZ2VFdmVudC0+dG9KU09OU3RyaW5nKCkpOwogfQogCi12b2lkIFJlbW90ZUlu
c3BlY3Rvcjo6cmVjZWl2ZWRHZXRUYXJnZXRMaXN0TWVzc2FnZShjb25zdCBFdmVudCYpCit2b2lk
IFJlbW90ZUluc3BlY3Rvcjo6c2V0dXAoVGFyZ2V0SUQgdGFyZ2V0SWRlbnRpZmllcikKIHsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldCog
dGFyZ2V0OworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOworICAgICAg
ICB0YXJnZXQgPSBtX3RhcmdldE1hcC5nZXQodGFyZ2V0SWRlbnRpZmllcik7CisgICAgICAgIGlm
ICghdGFyZ2V0KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gY29ubmVj
dGlvblRvVGFyZ2V0ID0gYWRvcHRSZWYoKm5ldyBSZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQoKnRh
cmdldCkpOworICAgIEFTU0VSVChpczxSZW1vdGVJbnNwZWN0aW9uVGFyZ2V0Pih0YXJnZXQpIHx8
IGlzPFJlbW90ZUF1dG9tYXRpb25UYXJnZXQ+KHRhcmdldCkpOworICAgIGlmICghY29ubmVjdGlv
blRvVGFyZ2V0LT5zZXR1cCgpKSB7CisgICAgICAgIGNvbm5lY3Rpb25Ub1RhcmdldC0+Y2xvc2Uo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4
KTsKLSAgICBwdXNoTGlzdGluZ3NOb3coKTsKKyAgICBtX3RhcmdldENvbm5lY3Rpb25NYXAuc2V0
KHRhcmdldElkZW50aWZpZXIsIFdURk1vdmUoY29ubmVjdGlvblRvVGFyZ2V0KSk7CisKKyAgICB1
cGRhdGVIYXNBY3RpdmVEZWJ1Z1Nlc3Npb24oKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3I6
OnNlbmRNZXNzYWdlVG9UYXJnZXQoVGFyZ2V0SUQgdGFyZ2V0SWRlbnRpZmllciwgY29uc3QgY2hh
ciogbWVzc2FnZSkKK3sKKyAgICBpZiAoYXV0byBjb25uZWN0aW9uVG9UYXJnZXQgPSBtX3Rhcmdl
dENvbm5lY3Rpb25NYXAuZ2V0KHRhcmdldElkZW50aWZpZXIpKQorICAgICAgICBjb25uZWN0aW9u
VG9UYXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXQoU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKSk7
Cit9CisKK1N0cmluZyBSZW1vdGVJbnNwZWN0b3I6OmJhY2tlbmRDb21tYW5kcygpIGNvbnN0Cit7
CisgICAgaWYgKG1fYmFja2VuZENvbW1hbmRzUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBhdXRvIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKG1fYmFja2Vu
ZENvbW1hbmRzUGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICBpZiAo
IUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIFN0cmluZyByZXN1bHQ7CisgICAgbG9uZyBsb25nIHNpemU7CisgICAgaWYgKEZpbGVT
eXN0ZW06OmdldEZpbGVTaXplKGhhbmRsZSwgc2l6ZSkpIHsKKyAgICAgICAgVmVjdG9yPExDaGFy
PiBidWZmZXIoc2l6ZSk7CisgICAgICAgIGlmIChGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoaGFu
ZGxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIuZGF0YSgpKSwgc2l6ZSkgPT0gc2l6
ZSkKKyAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsK
KyAgICB9CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworLy8gUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudCBoYW5kbGVycwor
CitIYXNoTWFwPFN0cmluZywgUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6Q2FsbEhh
bmRsZXI+JiBSZW1vdGVJbnNwZWN0b3I6OmRpc3BhdGNoTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPj4gbWV0aG9kcyA9IEhhc2hN
YXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4oeworICAgICAgICB7ICJTZXR1cEluc3BlY3RvckNsaWVu
dCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3I6OnNldHVwSW5z
cGVjdG9yQ2xpZW50KSB9LAorICAgICAgICB7ICJTZXR1cCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhh
bmRsZXI+KCZSZW1vdGVJbnNwZWN0b3I6OnNldHVwVGFyZ2V0KSB9LAorICAgICAgICB7ICJGcm9u
dGVuZERpZENsb3NlIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3Rv
cjo6ZnJvbnRlbmREaWRDbG9zZSkgfSwKKyAgICAgICAgeyAiU2VuZE1lc3NhZ2VUb0JhY2tlbmQi
X3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yOjpzZW5kTWVzc2Fn
ZVRvQmFja2VuZCkgfSwKKyAgICB9KTsKKworICAgIHJldHVybiBtZXRob2RzOwogfQogCi12b2lk
IFJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRTZXR1cE1lc3NhZ2UoY29uc3QgRXZlbnQmIGV2ZW50
KQordm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNldHVwSW5zcGVjdG9yQ2xpZW50KGNvbnN0IEV2ZW50
JikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKGV2ZW50LnRhcmdl
dElEKQotICAgICAgICBzZXR1cChldmVudC50YXJnZXRJRC52YWx1ZSgpKTsKKyAgICBhdXRvIGJh
Y2tlbmRDb21tYW5kc0V2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBiYWNrZW5k
Q29tbWFuZHNFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIkJhY2tlbmRDb21tYW5kcyJfcyk7
CisgICAgYmFja2VuZENvbW1hbmRzRXZlbnQtPnNldFN0cmluZygibWVzc2FnZSJfcywgYmFja2Vu
ZENvbW1hbmRzKCkpOworICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChiYWNrZW5kQ29tbWFuZHNF
dmVudC0+dG9KU09OU3RyaW5nKCkpOworCisgICAgbV9yZWFkeVRvUHVzaExpc3RpbmdzID0gdHJ1
ZTsKKworICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4KTsKKyAgICBwdXNoTGlzdGluZ3NOb3co
KTsKIH0KIAotdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnJlY2VpdmVkRGF0YU1lc3NhZ2UoY29uc3Qg
RXZlbnQmIGV2ZW50KQordm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNldHVwVGFyZ2V0KGNvbnN0IEV2
ZW50JiBldmVudCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKCFl
dmVudC50YXJnZXRJRCB8fCAhZXZlbnQubWVzc2FnZSkKKyAgICBpZiAoIWV2ZW50LnRhcmdldElE
IHx8ICFldmVudC5jb25uZWN0aW9uSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxS
ZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQ+IGNvbm5lY3Rpb25Ub1RhcmdldDsKLSAgICB7Ci0gICAg
ICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4KTsKLSAgICAgICAgY29ubmVjdGlvblRvVGFyZ2V0
ID0gbV90YXJnZXRDb25uZWN0aW9uTWFwLmdldChldmVudC50YXJnZXRJRC52YWx1ZSgpKTsKLSAg
ICAgICAgaWYgKCFjb25uZWN0aW9uVG9UYXJnZXQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgY29ubmVjdGlvblRvVGFyZ2V0LT5zZW5kTWVzc2FnZVRvVGFyZ2V0KGV2ZW50Lm1l
c3NhZ2UudmFsdWUoKSk7CisgICAgc2V0dXAoZXZlbnQudGFyZ2V0SUQudmFsdWUoKSk7CiB9CiAK
LXZvaWQgUmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZENsb3NlTWVzc2FnZShjb25zdCBFdmVudCYg
ZXZlbnQpCit2b2lkIFJlbW90ZUluc3BlY3Rvcjo6ZnJvbnRlbmREaWRDbG9zZShjb25zdCBFdmVu
dCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtMjU5LDQzICsz
MDEsMjIgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnJlY2VpdmVkQ2xvc2VNZXNzYWdlKGNvbnN0
IEV2ZW50JiBldmVudCkKICAgICAgICAgY29ubmVjdGlvblRvVGFyZ2V0LT5jbG9zZSgpOwogfQog
Ci12b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0dXAoVGFyZ2V0SUQgdGFyZ2V0SWRlbnRpZmllcikK
K3ZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBFdmVudCYg
ZXZlbnQpCiB7Ci0gICAgUmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0KiB0YXJnZXQ7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFl
dmVudC50YXJnZXRJRCB8fCAhZXZlbnQubWVzc2FnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UmVmUHRyPFJlbW90ZUNvbm5lY3Rpb25Ub1RhcmdldD4gY29ubmVjdGlvblRvVGFyZ2V0OwogICAg
IHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOwotICAgICAgICB0YXJnZXQgPSBt
X3RhcmdldE1hcC5nZXQodGFyZ2V0SWRlbnRpZmllcik7Ci0gICAgICAgIGlmICghdGFyZ2V0KQor
ICAgICAgICBjb25uZWN0aW9uVG9UYXJnZXQgPSBtX3RhcmdldENvbm5lY3Rpb25NYXAuZ2V0KGV2
ZW50LnRhcmdldElELnZhbHVlKCkpOworICAgICAgICBpZiAoIWNvbm5lY3Rpb25Ub1RhcmdldCkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNvbm5lY3Rpb25Ub1Rhcmdl
dCA9IGFkb3B0UmVmKCpuZXcgUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0KCp0YXJnZXQpKTsKLSAg
ICBBU1NFUlQoaXM8UmVtb3RlSW5zcGVjdGlvblRhcmdldD4odGFyZ2V0KSB8fCBpczxSZW1vdGVB
dXRvbWF0aW9uVGFyZ2V0Pih0YXJnZXQpKTsKLSAgICBpZiAoIWNvbm5lY3Rpb25Ub1RhcmdldC0+
c2V0dXAoKSkgewotICAgICAgICBjb25uZWN0aW9uVG9UYXJnZXQtPmNsb3NlKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBMb2NrSG9sZGVyIGxvY2sobV9tdXRleCk7Ci0gICAgbV90
YXJnZXRDb25uZWN0aW9uTWFwLnNldCh0YXJnZXRJZGVudGlmaWVyLCBXVEZNb3ZlKGNvbm5lY3Rp
b25Ub1RhcmdldCkpOwotCi0gICAgdXBkYXRlSGFzQWN0aXZlRGVidWdTZXNzaW9uKCk7Ci19Ci0K
LXZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvVGFyZ2V0KFRhcmdldElEIHRhcmdl
dElkZW50aWZpZXIsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKGF1dG8gY29ubmVj
dGlvblRvVGFyZ2V0ID0gbV90YXJnZXRDb25uZWN0aW9uTWFwLmdldCh0YXJnZXRJZGVudGlmaWVy
KSkKLSAgICAgICAgY29ubmVjdGlvblRvVGFyZ2V0LT5zZW5kTWVzc2FnZVRvVGFyZ2V0KFN0cmlu
Zzo6ZnJvbVVURjgobWVzc2FnZSkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0Q29u
bmVjdGlvbklkZW50aWZpZXIoUGxhdGZvcm1Tb2NrZXRUeXBlIGNvbm5lY3Rpb25JZGVudGlmaWVy
KQotewotICAgIFJlbW90ZUluc3BlY3Rvcjo6c19jb25uZWN0aW9uSWRlbnRpZmllciA9IGNvbm5l
Y3Rpb25JZGVudGlmaWVyOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0U2VydmVyUG9y
dCh1aW50MTZfdCBwb3J0KQotewotICAgIFJlbW90ZUluc3BlY3Rvcjo6c19zZXJ2ZXJQb3J0ID0g
cG9ydDsKKyAgICBjb25uZWN0aW9uVG9UYXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXQoZXZlbnQu
bWVzc2FnZS52YWx1ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmNwcAppbmRl
eCA3OThkM2IzMDZkNi4uODQ2NGQ3MjU0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2lu
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0
L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTY0LDYgKzY1
LDggQEAgUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6On5SZW1vdGVJbnNwZWN0b3JTb2Nr
ZXRFbmRwb2ludCgpCiAgICAgU29ja2V0OjpjbG9zZShtX3dha2V1cFJlY2VpdmVTb2NrZXQpOwog
ICAgIGZvciAoY29uc3QgYXV0byYgY29ubmVjdGlvbiA6IG1fY29ubmVjdGlvbnMudmFsdWVzKCkp
CiAgICAgICAgIFNvY2tldDo6Y2xvc2UoY29ubmVjdGlvbi0+c29ja2V0KTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGNvbm5lY3Rpb24gOiBtX2xpc3RlbmVycy52YWx1ZXMoKSkKKyAgICAgICAgU29j
a2V0OjpjbG9zZShjb25uZWN0aW9uLT5zb2NrZXQpOwogfQogCiB2b2lkIFJlbW90ZUluc3BlY3Rv
clNvY2tldEVuZHBvaW50Ojp3YWtldXBXb3JrZXJUaHJlYWQoKQpAQCAtNzksMTAgKzgyLDEwIEBA
IE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmNv
bm5lY3RJbmV0KGNvbnN0IGNoYXIqIHNlCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAot
T3B0aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6bGlz
dGVuSW5ldChjb25zdCBjaGFyKiBhZGRyZXNzLCB1aW50MTZfdCBwb3J0LCBDbGllbnQmIGNsaWVu
dCkKK09wdGlvbmFsPENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6
Omxpc3RlbkluZXQoY29uc3QgY2hhciogYWRkcmVzcywgdWludDE2X3QgcG9ydCwgTGlzdGVuZXIm
IGxpc3RlbmVyLCBDbGllbnQmIGNsaWVudCkKIHsKICAgICBpZiAoYXV0byBzb2NrZXQgPSBTb2Nr
ZXQ6Omxpc3RlbihhZGRyZXNzLCBwb3J0KSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNsaWVudCgq
c29ja2V0LCBjbGllbnQpOworICAgICAgICByZXR1cm4gY3JlYXRlTGlzdGVuZXIoKnNvY2tldCwg
bGlzdGVuZXIsIGNsaWVudCk7CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtOTAs
OCArOTMsOCBAQCBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IFJlbW90ZUluc3BlY3RvclNvY2tldEVu
ZHBvaW50OjpsaXN0ZW5JbmV0KGNvbnN0IGNoYXIqIGFkZAogYm9vbCBSZW1vdGVJbnNwZWN0b3JT
b2NrZXRFbmRwb2ludDo6aXNMaXN0ZW5pbmcoQ29ubmVjdGlvbklEIGlkKQogewogICAgIExvY2tI
b2xkZXIgbG9jayhtX2Nvbm5lY3Rpb25zTG9jayk7Ci0gICAgaWYgKGNvbnN0IGF1dG8mIGNvbm5l
Y3Rpb24gPSBtX2Nvbm5lY3Rpb25zLmdldChpZCkpCi0gICAgICAgIHJldHVybiBTb2NrZXQ6Omlz
TGlzdGVuaW5nKGNvbm5lY3Rpb24tPnNvY2tldCk7CisgICAgaWYgKG1fbGlzdGVuZXJzLmNvbnRh
aW5zKGlkKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBA
IC0xMDAsNiArMTAzLDEwIEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6Ondv
cmtlclRocmVhZCgpCiAgICAgUG9sbGluZ0Rlc2NyaXB0b3Igd2FrZXVwID0gU29ja2V0OjpwcmVw
YXJlUG9sbGluZyhtX3dha2V1cFJlY2VpdmVTb2NrZXQpOwogCiAgICAgd2hpbGUgKCFtX3Nob3Vs
ZEFib3J0V29ya2VyVGhyZWFkKSB7CisjaWYgUExBVEZPUk0oUExBWVNUQVRJT04pIHx8IFBMQVRG
T1JNKFdJTikKKyAgICAgICAgUnVuTG9vcDo6aXRlcmF0ZSgpOworI2VuZGlmCisKICAgICAgICAg
VmVjdG9yPFBvbGxpbmdEZXNjcmlwdG9yPiBwb2xsZmRzOwogICAgICAgICBWZWN0b3I8Q29ubmVj
dGlvbklEPiBpZHM7CiAgICAgICAgIHsKQEAgLTEwOCw2ICsxMTUsMTAgQEAgdm9pZCBSZW1vdGVJ
bnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6d29ya2VyVGhyZWFkKCkKICAgICAgICAgICAgICAgICBw
b2xsZmRzLmFwcGVuZChjb25uZWN0aW9uLnZhbHVlLT5wb2xsKTsKICAgICAgICAgICAgICAgICBp
ZHMuYXBwZW5kKGNvbm5lY3Rpb24ua2V5KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgY29ubmVjdGlvbiA6IG1fbGlzdGVuZXJzKSB7CisgICAgICAgICAgICAg
ICAgcG9sbGZkcy5hcHBlbmQoY29ubmVjdGlvbi52YWx1ZS0+cG9sbCk7CisgICAgICAgICAgICAg
ICAgaWRzLmFwcGVuZChjb25uZWN0aW9uLmtleSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgcG9sbGZkcy5hcHBlbmQod2FrZXVwKTsKIApAQCAtMTIzLDQxICsxMzQsNzYgQEAg
dm9pZCBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6d29ya2VyVGhyZWFkKCkKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAg
IGF1dG8gaWQgPSBpZHNbaV07CiAKLSAgICAgICAgICAgIGlmIChTb2NrZXQ6OmlzUmVhZGFibGUo
cG9sbGZkc1tpXSkgJiYgaXNMaXN0ZW5pbmcoaWQpKQotICAgICAgICAgICAgICAgIGFjY2VwdElu
ZXRTb2NrZXRJZkVuYWJsZWQoaWQpOwotICAgICAgICAgICAgZWxzZSBpZiAoU29ja2V0Ojppc1Jl
YWRhYmxlKHBvbGxmZHNbaV0pKQotICAgICAgICAgICAgICAgIHJlY3ZJZkVuYWJsZWQoaWQpOwot
ICAgICAgICAgICAgZWxzZSBpZiAoU29ja2V0Ojppc1dyaXRhYmxlKHBvbGxmZHNbaV0pKQorICAg
ICAgICAgICAgaWYgKFNvY2tldDo6aXNSZWFkYWJsZShwb2xsZmRzW2ldKSkgeworICAgICAgICAg
ICAgICAgIGlmIChpc0xpc3RlbmluZyhpZCkpCisgICAgICAgICAgICAgICAgICAgIGFjY2VwdElu
ZXRTb2NrZXRJZkVuYWJsZWQoaWQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgcmVjdklmRW5hYmxlZChpZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFNvY2tl
dDo6aXNXcml0YWJsZShwb2xsZmRzW2ldKSkKICAgICAgICAgICAgICAgICBzZW5kSWZFbmFibGVk
KGlkKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1v
dGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6Y3JlYXRlQ2xpZW50KFBsYXRmb3JtU29ja2V0VHlw
ZSBzb2NrZXQsIENsaWVudCYgY2xpZW50KQorQ29ubmVjdGlvbklEIFJlbW90ZUluc3BlY3RvclNv
Y2tldEVuZHBvaW50OjpnZW5lcmF0ZUNvbm5lY3Rpb25JRCgpCiB7Ci0gICAgaWYgKCFTb2NrZXQ6
OmlzVmFsaWQoc29ja2V0KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIExv
Y2tIb2xkZXIgbG9jayhtX2Nvbm5lY3Rpb25zTG9jayk7CisgICAgQVNTRVJUKG1fY29ubmVjdGlv
bnNMb2NrLmlzTG9ja2VkKCkpOwogCiAgICAgQ29ubmVjdGlvbklEIGlkOwogICAgIGRvIHsKICAg
ICAgICAgaWQgPSBjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpOwotICAgIH0gd2hpbGUg
KCFpZCB8fCBtX2Nvbm5lY3Rpb25zLmNvbnRhaW5zKGlkKSk7CisgICAgfSB3aGlsZSAoIWlkIHx8
IG1fY29ubmVjdGlvbnMuY29udGFpbnMoaWQpIHx8IG1fbGlzdGVuZXJzLmNvbnRhaW5zKGlkKSk7
CisKKyAgICByZXR1cm4gaWQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JT
b2NrZXRFbmRwb2ludDo6Q29ubmVjdGlvbj4gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6
Om1ha2VDb25uZWN0aW9uKFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQsIENsaWVudCYgY2xpZW50
KQoreworICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25zTG9jay5pc0xvY2tlZCgpKTsKIAogICAgIFNv
Y2tldDo6c2V0dXAoc29ja2V0KTsKIAotICAgIGF1dG8gY29ubmVjdGlvbiA9IG1ha2VVbmlxdWU8
Q29ubmVjdGlvbj4oY2xpZW50KTsKKyAgICBhdXRvIGNvbm5lY3Rpb24gPSBzdGQ6Om1ha2VfdW5p
cXVlPENvbm5lY3Rpb24+KGNsaWVudCk7CiAKLSAgICBjb25uZWN0aW9uLT5pZCA9IGlkOworICAg
IGNvbm5lY3Rpb24tPmlkID0gZ2VuZXJhdGVDb25uZWN0aW9uSUQoKTsKICAgICBjb25uZWN0aW9u
LT5wb2xsID0gU29ja2V0OjpwcmVwYXJlUG9sbGluZyhzb2NrZXQpOwogICAgIGNvbm5lY3Rpb24t
PnNvY2tldCA9IHNvY2tldDsKKworICAgIHJldHVybiBjb25uZWN0aW9uOworfQorCitPcHRpb25h
bDxDb25uZWN0aW9uSUQ+IFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpjcmVhdGVDbGll
bnQoUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCwgQ2xpZW50JiBjbGllbnQpCit7CisgICAgaWYg
KCFTb2NrZXQ6OmlzVmFsaWQoc29ja2V0KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIExvY2tIb2xkZXIgbG9jayhtX2Nvbm5lY3Rpb25zTG9jayk7CisgICAgYXV0byBjb25u
ZWN0aW9uID0gbWFrZUNvbm5lY3Rpb24oc29ja2V0LCBjbGllbnQpOworICAgIGF1dG8gaWQgPSBj
b25uZWN0aW9uLT5pZDsKICAgICBtX2Nvbm5lY3Rpb25zLmFkZChpZCwgV1RGTW92ZShjb25uZWN0
aW9uKSk7CiAgICAgd2FrZXVwV29ya2VyVGhyZWFkKCk7CiAKICAgICByZXR1cm4gaWQ7CiB9CiAK
K09wdGlvbmFsPENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmNy
ZWF0ZUxpc3RlbmVyKFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQsIExpc3RlbmVyJiBsaXN0ZW5l
ciwgQ2xpZW50JiBjbGllbnQpCit7CisgICAgaWYgKCFTb2NrZXQ6OmlzVmFsaWQoc29ja2V0KSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIExvY2tIb2xkZXIgbG9jayhtX2Nv
bm5lY3Rpb25zTG9jayk7CisKKyAgICBTb2NrZXQ6OnNldHVwKHNvY2tldCk7CisKKyAgICBhdXRv
IGNvbm5lY3Rpb24gPSBtYWtlQ29ubmVjdGlvbihzb2NrZXQsIGNsaWVudCk7CisgICAgYXV0byBp
ZCA9IGNvbm5lY3Rpb24tPmlkOworICAgIGNvbm5lY3Rpb24tPmxpc3RlbmVyID0gJmxpc3RlbmVy
OworICAgIG1fbGlzdGVuZXJzLmFkZChpZCwgV1RGTW92ZShjb25uZWN0aW9uKSk7CisgICAgd2Fr
ZXVwV29ya2VyVGhyZWFkKCk7CisKKyAgICByZXR1cm4gaWQ7Cit9CisKIHZvaWQgUmVtb3RlSW5z
cGVjdG9yU29ja2V0RW5kcG9pbnQ6OmludmFsaWRhdGVDbGllbnQoQ2xpZW50JiBjbGllbnQpCiB7
CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsKQEAgLTE3Myw5ICsyMTks
MjYgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6aW52YWxpZGF0ZUNsaWVu
dChDbGllbnQmIGNsaWVudCkKICAgICB9KTsKIH0KIAordm9pZCBSZW1vdGVJbnNwZWN0b3JTb2Nr
ZXRFbmRwb2ludDo6aW52YWxpZGF0ZUxpc3RlbmVyKExpc3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAg
ICBMb2NrSG9sZGVyIGxvY2sobV9jb25uZWN0aW9uc0xvY2spOworICAgIG1fbGlzdGVuZXJzLnJl
bW92ZUlmKFsmbGlzdGVuZXJdKGF1dG8mIGtleVZhbHVlKSB7CisgICAgICAgIGNvbnN0IGF1dG8m
IGNvbm5lY3Rpb24gPSBrZXlWYWx1ZS52YWx1ZTsKKworICAgICAgICBpZiAoY29ubmVjdGlvbi0+
bGlzdGVuZXIgPT0gJmxpc3RlbmVyKSB7CisgICAgICAgICAgICBTb2NrZXQ6OmNsb3NlKGNvbm5l
Y3Rpb24tPnNvY2tldCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9KTsKK30KKwogT3B0aW9uYWw8dWludDE2X3Q+IFJl
bW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpnZXRQb3J0KENvbm5lY3Rpb25JRCBpZCkgY29u
c3QKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25uZWN0aW9uc0xvY2spOworICAgIGlmIChj
b25zdCBhdXRvJiBjb25uZWN0aW9uID0gbV9saXN0ZW5lcnMuZ2V0KGlkKSkKKyAgICAgICAgcmV0
dXJuIFNvY2tldDo6Z2V0UG9ydChjb25uZWN0aW9uLT5zb2NrZXQpOwogICAgIGlmIChjb25zdCBh
dXRvJiBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9ucy5nZXQoaWQpKQogICAgICAgICByZXR1cm4g
U29ja2V0OjpnZXRQb3J0KGNvbm5lY3Rpb24tPnNvY2tldCk7CiAKQEAgLTI1NCwxNyArMzE3LDE4
IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OnNlbmQoQ29ubmVjdGlvbklE
IGlkLCBjb25zdCB1aW50OF90KiBkYXRhLCBzCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yU29ja2V0
RW5kcG9pbnQ6OmFjY2VwdEluZXRTb2NrZXRJZkVuYWJsZWQoQ29ubmVjdGlvbklEIGlkKQogewot
ICAgIGlmICghaXNMaXN0ZW5pbmcoaWQpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGlz
TGlzdGVuaW5nKGlkKSk7CiAKICAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25uZWN0aW9uc0xvY2sp
OwotICAgIGlmIChjb25zdCBhdXRvJiBjb25uZWN0aW9uID0gbV9jb25uZWN0aW9ucy5nZXQoaWQp
KSB7CisgICAgaWYgKGNvbnN0IGF1dG8mIGNvbm5lY3Rpb24gPSBtX2xpc3RlbmVycy5nZXQoaWQp
KSB7CiAgICAgICAgIGlmIChhdXRvIHNvY2tldCA9IFNvY2tldDo6YWNjZXB0KGNvbm5lY3Rpb24t
PnNvY2tldCkpIHsKICAgICAgICAgICAgIC8vIE5lZWQgdG8gdW5sb2NrIGJlZm9yZSBjYWxsaW5n
IGNyZWF0ZUNsaWVudCBhcyBpdCBhbHNvIGF0dGVtcHRzIHRvIGxvY2suCiAgICAgICAgICAgICBs
b2NrLnVubG9ja0Vhcmx5KCk7CiAgICAgICAgICAgICBpZiAoYXV0byBuZXdJRCA9IGNyZWF0ZUNs
aWVudCgqc29ja2V0LCBjb25uZWN0aW9uLT5jbGllbnQpKSB7Ci0gICAgICAgICAgICAgICAgY29u
bmVjdGlvbi0+Y2xpZW50LmRpZEFjY2VwdChuZXdJRC52YWx1ZSgpLCBpZCwgU29ja2V0OjpEb21h
aW46Ok5ldHdvcmspOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBp
ZiAoY29ubmVjdGlvbi0+bGlzdGVuZXItPmRpZEFjY2VwdChuZXdJRC52YWx1ZSgpLCBjb25uZWN0
aW9uLT5pZCwgU29ja2V0OjpEb21haW46Ok5ldHdvcmspKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rpb25zLnJlbW92ZShpZCk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIFNvY2tldDo6Y2xvc2UoKnNvY2tldCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludC5oCmluZGV4IGYx
ODYyNDRlNWM2Li4zZTQ5YTU1ZThjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90
ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmgKQEAgLTQ0LDcgKzQ0LDEyIEBAIHB1YmxpYzoKICAg
ICBjbGFzcyBDbGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmUoQ29ubmVjdGlvbklELCBWZWN0b3I8dWludDhfdD4mJikgPSAwOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkQWNjZXB0KENvbm5lY3Rpb25JRCBhY2NlcHRlZElELCBDb25uZWN0aW9uSUQg
bGlzdGVuZXJJRCwgU29ja2V0OjpEb21haW4pID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZENsb3NlKENvbm5lY3Rpb25JRCkgPSAwOworICAgIH07CisKKyAgICBjbGFzcyBMaXN0ZW5lciB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgZGlkQWNjZXB0KENvbm5lY3Rpb25J
RCBhY2NlcHRlZElELCBDb25uZWN0aW9uSUQgbGlzdGVuZXJJRCwgU29ja2V0OjpEb21haW4pID0g
MDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKENvbm5lY3Rpb25JRCkgPSAwOwogICAg
IH07CiAKQEAgLTU0LDEyICs1OSwxNCBAQCBwdWJsaWM6CiAgICAgflJlbW90ZUluc3BlY3RvclNv
Y2tldEVuZHBvaW50KCk7CiAKICAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IGNvbm5lY3RJbmV0
KGNvbnN0IGNoYXIqIHNlcnZlckFkZHIsIHVpbnQxNl90IHNlcnZlclBvcnQsIENsaWVudCYpOwot
ICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gbGlzdGVuSW5ldChjb25zdCBjaGFyKiBhZGRyZXNz
LCB1aW50MTZfdCBwb3J0LCBDbGllbnQmKTsKKyAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IGxp
c3RlbkluZXQoY29uc3QgY2hhciogYWRkcmVzcywgdWludDE2X3QgcG9ydCwgTGlzdGVuZXImLCBD
bGllbnQmKTsKICAgICB2b2lkIGludmFsaWRhdGVDbGllbnQoQ2xpZW50Jik7CisgICAgdm9pZCBp
bnZhbGlkYXRlTGlzdGVuZXIoTGlzdGVuZXImKTsKIAogICAgIHZvaWQgc2VuZChDb25uZWN0aW9u
SUQsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCk7CiAKICAgICBPcHRpb25hbDxDb25uZWN0
aW9uSUQ+IGNyZWF0ZUNsaWVudChQbGF0Zm9ybVNvY2tldFR5cGUsIENsaWVudCYpOworICAgIE9w
dGlvbmFsPENvbm5lY3Rpb25JRD4gY3JlYXRlTGlzdGVuZXIoUGxhdGZvcm1Tb2NrZXRUeXBlLCBM
aXN0ZW5lciYsIENsaWVudCYpOwogCiAgICAgT3B0aW9uYWw8dWludDE2X3Q+IGdldFBvcnQoQ29u
bmVjdGlvbklEKSBjb25zdDsKIApAQCAtNzYsOCArODMsMTIgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBQbGF0Zm9ybVNvY2tldFR5cGUgc29ja2V0IHsgSU5WQUxJRF9TT0NLRVRfVkFMVUUgfTsKICAg
ICAgICAgUG9sbGluZ0Rlc2NyaXB0b3IgcG9sbDsKICAgICAgICAgQ2xpZW50JiBjbGllbnQ7Cisg
ICAgICAgIExpc3RlbmVyKiBsaXN0ZW5lciB7IH07CiAgICAgfTsKIAorICAgIENvbm5lY3Rpb25J
RCBnZW5lcmF0ZUNvbm5lY3Rpb25JRCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb25uZWN0aW9u
PiBtYWtlQ29ubmVjdGlvbihQbGF0Zm9ybVNvY2tldFR5cGUsIENsaWVudCYpOworCiAgICAgdm9p
ZCByZWN2SWZFbmFibGVkKENvbm5lY3Rpb25JRCk7CiAgICAgdm9pZCBzZW5kSWZFbmFibGVkKENv
bm5lY3Rpb25JRCk7CiAgICAgdm9pZCB3b3JrZXJUaHJlYWQoKTsKQEAgLTg3LDYgKzk4LDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgbXV0YWJsZSBMb2NrIG1fY29ubmVjdGlvbnNMb2NrOwogICAgIEhh
c2hNYXA8Q29ubmVjdGlvbklELCBzdGQ6OnVuaXF1ZV9wdHI8Q29ubmVjdGlvbj4+IG1fY29ubmVj
dGlvbnM7CisgICAgSGFzaE1hcDxDb25uZWN0aW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxDb25uZWN0
aW9uPj4gbV9saXN0ZW5lcnM7CiAKICAgICBQbGF0Zm9ybVNvY2tldFR5cGUgbV93YWtldXBTZW5k
U29ja2V0IHsgSU5WQUxJRF9TT0NLRVRfVkFMVUUgfTsKICAgICBQbGF0Zm9ybVNvY2tldFR5cGUg
bV93YWtldXBSZWNlaXZlU29ja2V0IHsgSU5WQUxJRF9TT0NLRVRfVkFMVUUgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggYjI4ZmNiNmJiMDkuLmVkYzY3M2VmZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDE5LTEwLTA5ICBCYXN1a2UgU3V6dWtpICA8QmFzdWtlLlN1enVraUBzb255LmNvbT4KKworICAg
ICAgICBbV2luQ2Fpcm9dIE1vdmUgcmVtb3RlIGNvbW11bmljYXRpb24gaGFuZGxpbmcgZnJvbSBS
ZW1vdGVJbnNwZWN0b3JTZXJ2ZXIgdG8gUmVtb3RlSW5zcGVjdG9yLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzYzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGRlbGV0ZWQgbWV0aG9kIGlu
dm9jYXRpb25zLgorCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5j
cHA6CisgICAgICAgIChXZWJLaXQ6OmluaXRpYWxpemVSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKToKKwog
MjAxOS0xMC0wOSAgeW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVtb3ZlIHRlc3RSdW5uZXIuc2V0V2ViUlRDVW5pZmllZFBsYW5FbmFibGVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1Bvb2xXaW4uY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNwcAppbmRleCA3ZmEw
ODBiNGY2MS4uMThmOWU5MzkzMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
d2luL1dlYlByb2Nlc3NQb29sV2luLmNwcApAQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgdm9pZCBp
bml0aWFsaXplUmVtb3RlSW5zcGVjdG9yU2VydmVyKFN0cmluZ1ZpZXcgYWRkcmVzcykKICAgICBp
ZiAoIXBvcnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVj
dG9yU2VydmVyOjpzaW5nbGV0b24oKS5zZXRCYWNrZW5kQ29tbWFuZHNQYXRoKGJhY2tlbmRDb21t
YW5kc1BhdGgoKSk7CisgICAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigp
LnNldEJhY2tlbmRDb21tYW5kc1BhdGgoYmFja2VuZENvbW1hbmRzUGF0aCgpKTsKICAgICBJbnNw
ZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2luZ2xldG9uKCkuc3RhcnQoaG9zdC51dGY4
KCkuZGF0YSgpLCBwb3J0LnZhbHVlKCkpOwogfQogI2VuZGlmCkBAIC03MywxMSArNzMsOCBAQCBz
dGF0aWMgdm9pZCBpbml0aWFsaXplUmVtb3RlSW5zcGVjdG9yU2VydmVyKFN0cmluZ1ZpZXcgYWRk
cmVzcykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiAjaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgaWYgKGNvbnN0IGNoYXIqIGFkZHJlc3MgPSBn
ZXRlbnYoIldFQktJVF9JTlNQRUNUT1JfU0VSVkVSIikpIHsKKyAgICBpZiAoY29uc3QgY2hhciog
YWRkcmVzcyA9IGdldGVudigiV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIiKSkKICAgICAgICAgaW5p
dGlhbGl6ZVJlbW90ZUluc3BlY3RvclNlcnZlcihhZGRyZXNzKTsKLSAgICAgICAgYXV0byBwb3J0
ID0gSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNpbmdsZXRvbigpLmxpc3RlbkZv
clRhcmdldHMoKTsKLSAgICAgICAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldFNlcnZl
clBvcnQocG9ydC52YWx1ZU9yKDApKTsKLSAgICB9CiAjZW5kaWYKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380575</attachid>
            <date>2019-10-09 15:02:00 -0700</date>
            <delta_ts>2019-10-10 13:33:44 -0700</delta_ts>
            <desc>PATCH</desc>
            <filename>bug-202763.diff</filename>
            <type>text/plain</type>
            <size>42166</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGJmZTMxOWY2ZDQ1Li5jNGNjZTJmYmU0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTktMTAtMDkgIEJhc3Vr
ZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb10g
TW92ZSByZW1vdGUgY29tbXVuaWNhdGlvbiBoYW5kbGluZyBmcm9tIFJlbW90ZUluc3BlY3RvclNl
cnZlciB0byBSZW1vdGVJbnNwZWN0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDI3NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBCZWNhdXNlIFJlbW90ZUluc3BlY3RvciBub3cgZXhpc3RzIGluIFVJ
UHJvY2VzcywgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiB3aGljaCBjb21tdW5pY2F0ZSB3aXRoIFJl
bW90ZUluc3BlY3RvcgorICAgICAgICBpbiBXZWJQcm9jZXNzIGFuZCBSZW1vdGVJbnNwZWN0b3JT
ZXJ2ZXIgaW4gVUlQcm9jZXNzIHdhcyBtZWFuaW5nbGVzcyBvciBldmVuIGJhZC4gUmVtb3ZlIHRo
aXMgY29tcGxleAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBhbmQgbW92ZSBjb21tdW5pY2F0aW9u
IGhhbmRsaW5nIGZyb20gUmVtb3RlSW5zcGVjdG9yU2VydmVyIHRvIFJlbW90ZUluc3BlY3RvciBh
bmQgY29tbXVuaWNhdGUKKyAgICAgICAgZWFjaCBvdGhlciBkaXJlY3RseS4KKworICAgICAgICAq
IGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmg6CisgICAgICAgICogaW5zcGVjdG9y
L3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rv
clNlcnZlci5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6
flJlbW90ZUluc3BlY3RvclNlcnZlcik6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3RvclNlcnZlcjo6c3RhcnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JT
ZXJ2ZXI6OmRpZEFjY2VwdCk6CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yU2VydmVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yU29ja2V0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yOjpjb25uZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpk
aWRDbG9zZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2VuZFdlYklu
c3BlY3RvckV2ZW50KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzdGFy
dCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c3RvcEludGVybmFsKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpwdXNoTGlzdGluZ3NOb3cpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnB1c2hMaXN0aW5nc1Nvb24pOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9SZW1vdGUp
OgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldHVwKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvVGFyZ2V0KToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpiYWNrZW5kQ29tbWFuZHMgY29uc3QpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OmRpc3BhdGNoTWFwKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzZXR1cEluc3BlY3RvckNsaWVudCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2V0dXBUYXJnZXQpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OmZyb250ZW5kRGlkQ2xvc2UpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRw
b2ludC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBv
aW50Ojp+UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQpOgorICAgICAgICAoSW5zcGVjdG9y
OjpSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6bGlzdGVuSW5ldCk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50Ojppc0xpc3RlbmluZyk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50Ojp3b3JrZXJU
aHJlYWQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2lu
dDo6Z2VuZXJhdGVDb25uZWN0aW9uSUQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNw
ZWN0b3JTb2NrZXRFbmRwb2ludDo6bWFrZUNvbm5lY3Rpb24pOgorICAgICAgICAoSW5zcGVjdG9y
OjpSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6Y3JlYXRlQ2xpZW50KToKKyAgICAgICAg
KEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmNyZWF0ZUxpc3RlbmVy
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6Omlu
dmFsaWRhdGVMaXN0ZW5lcik6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNv
Y2tldEVuZHBvaW50OjpnZXRQb3J0IGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3Rl
SW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmFjY2VwdEluZXRTb2NrZXRJZkVuYWJsZWQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBv
aW50Lmg6CisKIDIwMTktMTAtMDkgIEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdh
bGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBmb3Igbm9uLXVuaWZpZWQg
YnVpbGRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1v
dGUvUmVtb3RlSW5zcGVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Jl
bW90ZS9SZW1vdGVJbnNwZWN0b3IuaAppbmRleCAyMDdjMTg2NjRiNC4uZmIwOTM3OWRlNjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUlu
c3BlY3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1Jl
bW90ZUluc3BlY3Rvci5oCkBAIC01Nyw3ICs1Nyw2IEBAIHR5cGVkZWYgc3RydWN0IF9HREJ1c0lu
dGVyZmFjZVZUYWJsZSBHREJ1c0ludGVyZmFjZVZUYWJsZTsKICNpbmNsdWRlICJSZW1vdGVDb25u
ZWN0aW9uVG9UYXJnZXQuaCIKICNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xp
ZW50LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC0xNTAsOCArMTQ5LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJn
ZXQoVGFyZ2V0SUQsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwogI2VuZGlmCiAjaWYgVVNFKElOU1BF
Q1RPUl9TT0NLRVRfU0VSVkVSKQotICAgIHN0YXRpYyB2b2lkIHNldENvbm5lY3Rpb25JZGVudGlm
aWVyKFBsYXRmb3JtU29ja2V0VHlwZSk7Ci0gICAgc3RhdGljIHZvaWQgc2V0U2VydmVyUG9ydCh1
aW50MTZfdCk7CisgICAgdm9pZCByZXF1ZXN0QXV0b21hdGlvblNlc3Npb24oU3RyaW5nJiYgc2Vz
c2lvbklELCBjb25zdCBDbGllbnQ6OlNlc3Npb25DYXBhYmlsaXRpZXMmKTsKKworICAgIGJvb2wg
aXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhIW1fY2xpZW50Q29ubmVjdGlvbjsgfQorICAg
IHZvaWQgY29ubmVjdChDb25uZWN0aW9uSUQpOworCisgICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFu
ZHNQYXRoKGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzUGF0aCkgeyBtX2JhY2tlbmRDb21t
YW5kc1BhdGggPSBiYWNrZW5kQ29tbWFuZHNQYXRoOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAg
LTIxNCwxMCArMjE3LDEyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNlbmRXZWJJbnNwZWN0b3JF
dmVudChjb25zdCBTdHJpbmcmKTsKIAotICAgIHZvaWQgcmVjZWl2ZWRHZXRUYXJnZXRMaXN0TWVz
c2FnZShjb25zdCBFdmVudCYpOwotICAgIHZvaWQgcmVjZWl2ZWRTZXR1cE1lc3NhZ2UoY29uc3Qg
RXZlbnQmKTsKLSAgICB2b2lkIHJlY2VpdmVkRGF0YU1lc3NhZ2UoY29uc3QgRXZlbnQmKTsKLSAg
ICB2b2lkIHJlY2VpdmVkQ2xvc2VNZXNzYWdlKGNvbnN0IEV2ZW50Jik7CisgICAgdm9pZCBzZXR1
cEluc3BlY3RvckNsaWVudChjb25zdCBFdmVudCYpOworICAgIHZvaWQgc2V0dXBUYXJnZXQoY29u
c3QgRXZlbnQmKTsKKyAgICB2b2lkIGZyb250ZW5kRGlkQ2xvc2UoY29uc3QgRXZlbnQmKTsKKyAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IEV2ZW50Jik7CisKKyAgICBTdHJpbmcg
YmFja2VuZENvbW1hbmRzKCkgY29uc3Q7CiAjZW5kaWYKICAgICBzdGF0aWMgYm9vbCBzdGFydEVu
YWJsZWQ7CiAKQEAgLTI0MCw5ICsyNDUsMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgVVNF
KElOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSKQotICAgIHN0YXRpYyBQbGF0Zm9ybVNvY2tldFR5cGUg
c19jb25uZWN0aW9uSWRlbnRpZmllcjsKLSAgICBzdGF0aWMgdWludDE2X3Qgc19zZXJ2ZXJQb3J0
OwotICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gbV9jbGllbnRJRDsKKyAgICAvLyBDb25uZWN0
aW9uIGZyb20gUmVtb3RlSW5zcGVjdG9yQ2xpZW50IG9yIFdlYkRyaXZlci4KKyAgICBPcHRpb25h
bDxDb25uZWN0aW9uSUQ+IG1fY2xpZW50Q29ubmVjdGlvbjsKKyAgICBib29sIG1fcmVhZHlUb1B1
c2hMaXN0aW5ncyB7IGZhbHNlIH07CisKKyAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNQYXRo
OwogI2VuZGlmCiAKICAgICBSZW1vdGVJbnNwZWN0b3I6OkNsaWVudCogbV9jbGllbnQgeyBudWxs
cHRyIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90
ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVj
dGlvbkNsaWVudC5jcHAKaW5kZXggNTdlOTBhNGY3OWQuLjA2NTJlMTI3MDhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3Bw
CkBAIC00NiwxMiArNDYsNiBAQCBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IFJlbW90ZUluc3BlY3Rv
ckNvbm5lY3Rpb25DbGllbnQ6OmNvbm5lY3RJbmV0KGNvbnN0IGNoYXIqCiAgICAgcmV0dXJuIGVu
ZHBvaW50LmNvbm5lY3RJbmV0KHNlcnZlckFkZHIsIHNlcnZlclBvcnQsICp0aGlzKTsKIH0KIAot
T3B0aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50Ojps
aXN0ZW5JbmV0KGNvbnN0IGNoYXIqIGFkZHJlc3MsIHVpbnQxNl90IHBvcnQpCi17Ci0gICAgYXV0
byYgZW5kcG9pbnQgPSBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50Ojpz
aW5nbGV0b24oKTsKLSAgICByZXR1cm4gZW5kcG9pbnQubGlzdGVuSW5ldChhZGRyZXNzLCBwb3J0
LCAqdGhpcyk7Ci19Ci0KIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVjdG9yQ29u
bmVjdGlvbkNsaWVudDo6Y3JlYXRlQ2xpZW50KFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQpCiB7
CiAgICAgYXV0byYgZW5kcG9pbnQgPSBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVu
ZHBvaW50OjpzaW5nbGV0b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oCmluZGV4IDMwMzY1OWU3ZjE5Li40YmQxNThkMzE3MSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0
L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudC5oCkBAIC00MywxMiArNDMsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJlbW90ZUlu
c3BlY3RvckNvbm5lY3Rpb25DbGllbnQoKTsKIAogICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4g
Y29ubmVjdEluZXQoY29uc3QgY2hhciogc2VydmVyQWRkciwgdWludDE2X3Qgc2VydmVyUG9ydCk7
Ci0gICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBsaXN0ZW5JbmV0KGNvbnN0IGNoYXIqIGFkZHJl
c3MsIHVpbnQxNl90IHBvcnQpOwogICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gY3JlYXRlQ2xp
ZW50KFBsYXRmb3JtU29ja2V0VHlwZSk7CiAgICAgdm9pZCBzZW5kKENvbm5lY3Rpb25JRCwgY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90KTsKIAogICAgIHZvaWQgZGlkUmVjZWl2ZShDb25uZWN0
aW9uSUQsIFZlY3Rvcjx1aW50OF90PiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZEFjY2VwdChD
b25uZWN0aW9uSUQsIENvbm5lY3Rpb25JRCwgU29ja2V0OjpEb21haW4pIG92ZXJyaWRlIHsgfQog
CiAgICAgc3RydWN0IEV2ZW50IHsKICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yU2VydmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVt
b3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTZXJ2ZXIuY3BwCmluZGV4IGZmYmMyYmViMzAyLi44
YTlhNmNhN2RjZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9y
ZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5j
cHAKQEAgLTI5LDI1MSArMjksNDIgQEAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKIAog
I2luY2x1ZGUgIlJlbW90ZUluc3BlY3Rvck1lc3NhZ2VQYXJzZXIuaCIKLSNpbmNsdWRlIDx3dGYv
RmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisKICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCi1PcHRpb25hbDxQbGF0Zm9ybVNvY2tldFR5cGU+IFJlbW90ZUluc3BlY3Rv
clNlcnZlcjo6Y29ubmVjdCgpCi17Ci0gICAgaWYgKGF1dG8gc29ja2V0cyA9IFNvY2tldDo6Y3Jl
YXRlUGFpcigpKSB7Ci0gICAgICAgIGlmIChhdXRvIGlkID0gY3JlYXRlQ2xpZW50KHNvY2tldHMt
PmF0KDApKSkgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2Nr
KTsKLSAgICAgICAgICAgIG1faW5zcGVjdG9yQ29ubmVjdGlvbnMuYXBwZW5kKGlkLnZhbHVlKCkp
OwotCi0gICAgICAgICAgICByZXR1cm4gc29ja2V0cy0+YXQoMSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1PcHRpb25hbDx1aW50MTZfdD4gUmVt
b3RlSW5zcGVjdG9yU2VydmVyOjpsaXN0ZW5Gb3JUYXJnZXRzKCkKLXsKLSAgICBpZiAobV9pbnNw
ZWN0b3JMaXN0ZW5lcikgewotICAgICAgICBMT0dfRVJST1IoIkluc3BlY3RvciBzZXJ2ZXIgaXMg
YWxyZWFkeSBsaXN0ZW5pbmcgZm9yIHRhcmdldHMuIik7Ci0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gY29ubmVjdGlvbiA9IGxpc3RlbkluZXQoIjEy
Ny4wLjAuMSIsIDApKSB7Ci0gICAgICAgIG1faW5zcGVjdG9yTGlzdGVuZXIgPSBjb25uZWN0aW9u
OwotCi0gICAgICAgIGF1dG8mIGVuZHBvaW50ID0gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9p
bnQ6OnNpbmdsZXRvbigpOwotICAgICAgICByZXR1cm4gZW5kcG9pbnQuZ2V0UG9ydCgqY29ubmVj
dGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBSZW1v
dGVJbnNwZWN0b3JTZXJ2ZXI6OmRpZEFjY2VwdChDb25uZWN0aW9uSUQgYWNjZXB0ZWRJRCwgQ29u
bmVjdGlvbklEIGxpc3RlbmVySUQsIFNvY2tldDo6RG9tYWluIHR5cGUpCi17Ci0gICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAodHlwZSA9PSBTb2NrZXQ6OkRvbWFpbjo6TG9j
YWwgfHwgKG1faW5zcGVjdG9yTGlzdGVuZXIgJiYgbGlzdGVuZXJJRCA9PSAqbV9pbnNwZWN0b3JM
aXN0ZW5lcikpIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsK
LSAgICAgICAgbV9pbnNwZWN0b3JDb25uZWN0aW9ucy5hcHBlbmQoYWNjZXB0ZWRJRCk7Ci0gICAg
fSBlbHNlIGlmICh0eXBlID09IFNvY2tldDo6RG9tYWluOjpOZXR3b3JrKSB7Ci0gICAgICAgIGlm
IChtX2NsaWVudENvbm5lY3Rpb24pIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW5zcGVjdG9y
IHNlcnZlciBjYW4gYWNjZXB0IG9ubHkgMSBjbGllbnQiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBtX2NsaWVudENvbm5lY3Rpb24gPSBhY2NlcHRlZElEOwotICAg
IH0KLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmRpZENsb3NlKENvbm5lY3Rpb25J
RCBpZCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChpZCA9PSBt
X2NsaWVudENvbm5lY3Rpb24pIHsKLSAgICAgICAgLy8gQ29ubmVjdGlvbiBmcm9tIHRoZSByZW1v
dGUgY2xpZW50IGNsb3NlZC4KLSAgICAgICAgY2xpZW50Q29ubmVjdGlvbkNsb3NlZCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ29ubmVjdGlvbiBmcm9tIFdlYlByb2Nlc3Mg
Y2xvc2VkLgotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgaWRdIHsKLSAgICAg
ICAgY29ubmVjdGlvbkNsb3NlZChpZCk7Ci0gICAgfSk7Ci19Ci0KLUhhc2hNYXA8U3RyaW5nLCBS
ZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpDYWxsSGFuZGxlcj4mIFJlbW90ZUluc3Bl
Y3RvclNlcnZlcjo6ZGlzcGF0Y2hNYXAoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxI
YXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+PiBkaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5n
LCBDYWxsSGFuZGxlcj4oewotICAgICAgICB7ICJTZXRUYXJnZXRMaXN0Il9zLCBzdGF0aWNfY2Fz
dDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0VGFyZ2V0TGlzdCkgfSwK
LSAgICAgICAgeyAiU2V0dXBJbnNwZWN0b3JDbGllbnQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5k
bGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cEluc3BlY3RvckNsaWVudCkgfSwKLSAg
ICAgICAgeyAiU2V0dXAiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVj
dG9yU2VydmVyOjpzZXR1cCkgfSwKLSAgICAgICAgeyAiRnJvbnRlbmREaWRDbG9zZSJfcywgc3Rh
dGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmNsb3NlKSB9LAot
ICAgICAgICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5k
bGVyPigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpIH0sCi0g
ICAgICAgIHsgIlNlbmRNZXNzYWdlVG9CYWNrZW5kIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxl
cj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQpIH0sCi0gICAg
fSk7Ci0KLSAgICByZXR1cm4gZGlzcGF0Y2hNYXA7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9y
U2VydmVyOjpzZW5kV2ViSW5zcGVjdG9yRXZlbnQoQ29ubmVjdGlvbklEIGlkLCBjb25zdCBTdHJp
bmcmIGV2ZW50KQotewotICAgIGNvbnN0IENTdHJpbmcgbWVzc2FnZSA9IGV2ZW50LnV0ZjgoKTsK
LSAgICBzZW5kKGlkLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtZXNzYWdlLmRh
dGEoKSksIG1lc3NhZ2UubGVuZ3RoKCkpOwotfQotCiBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXImIFJl
bW90ZUluc3BlY3RvclNlcnZlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8UmVtb3RlSW5zcGVjdG9yU2VydmVyPiBzZXJ2ZXI7CiAgICAgcmV0dXJuIHNlcnZlcjsK
IH0KIAotYm9vbCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnN0YXJ0KGNvbnN0IGNoYXIqIGFkZHJl
c3MsIHVpbnQxNl90IHBvcnQpCi17Ci0gICAgbV9zZXJ2ZXIgPSBsaXN0ZW5JbmV0KGFkZHJlc3Ms
IHBvcnQpOwotICAgIHJldHVybiBpc1J1bm5pbmcoKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0
b3JTZXJ2ZXI6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fY2xpZW50Q29ubmVjdGlvbiB8fCAhZXZl
bnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0YXJnZXRMaXN0RXZlbnQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHRhcmdldExpc3RFdmVudC0+c2V0U3RyaW5n
KCJldmVudCJfcywgIlNldFRhcmdldExpc3QiX3MpOwotICAgIHRhcmdldExpc3RFdmVudC0+c2V0
SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBldmVudC5jbGllbnRJRCk7Ci0gICAgdGFyZ2V0TGlz
dEV2ZW50LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGV2ZW50Lm1lc3NhZ2UudmFsdWUoKSk7Ci0g
ICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KG1fY2xpZW50Q29ubmVjdGlvbi52YWx1ZSgpLCB0YXJn
ZXRMaXN0RXZlbnQtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JT
ZXJ2ZXI6OnNldHVwSW5zcGVjdG9yQ2xpZW50KGNvbnN0IEV2ZW50JikKK1JlbW90ZUluc3BlY3Rv
clNlcnZlcjo6flJlbW90ZUluc3BlY3RvclNlcnZlcigpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgIGF1dG8gYmFja2VuZENvbW1hbmRzRXZlbnQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGJhY2tlbmRDb21tYW5kc0V2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9z
LCAiQmFja2VuZENvbW1hbmRzIl9zKTsKLSAgICBiYWNrZW5kQ29tbWFuZHNFdmVudC0+c2V0U3Ry
aW5nKCJtZXNzYWdlIl9zLCBiYWNrZW5kQ29tbWFuZHMoKSk7Ci0gICAgc2VuZFdlYkluc3BlY3Rv
ckV2ZW50KG1fY2xpZW50Q29ubmVjdGlvbi52YWx1ZSgpLCBiYWNrZW5kQ29tbWFuZHNFdmVudC0+
dG9KU09OU3RyaW5nKCkpOwotCi0gICAgYXV0byBzZXR1cEV2ZW50ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBzZXR1cEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiR2V0VGFyZ2V0
TGlzdCJfcyk7Ci0KLSAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25uZWN0aW9uc0xvY2spOwotICAg
IGZvciAoYXV0byBjb25uZWN0aW9uIDogbV9pbnNwZWN0b3JDb25uZWN0aW9ucykKLSAgICAgICAg
c2VuZFdlYkluc3BlY3RvckV2ZW50KGNvbm5lY3Rpb24sIHNldHVwRXZlbnQtPnRvSlNPTlN0cmlu
ZygpKTsKKyAgICBhdXRvJiBlbmRwb2ludCA9IEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29j
a2V0RW5kcG9pbnQ6OnNpbmdsZXRvbigpOworICAgIGVuZHBvaW50LmludmFsaWRhdGVMaXN0ZW5l
cigqdGhpcyk7CiB9CiAKLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cChjb25zdCBF
dmVudCYgZXZlbnQpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICgh
ZXZlbnQudGFyZ2V0SUQgfHwgIWV2ZW50LmNvbm5lY3Rpb25JRCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9pbnNwZWN0aW9uVGFyZ2V0cy5hZGQoc3RkOjptYWtlX3BhaXIoZXZlbnQuY29ubmVj
dGlvbklELnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpKTsKLQotICAgIGF1dG8gc2V0
dXBFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgc2V0dXBFdmVudC0+c2V0U3Ry
aW5nKCJldmVudCJfcywgIlNldHVwIl9zKTsKLSAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJ0
YXJnZXRJRCJfcywgZXZlbnQudGFyZ2V0SUQudmFsdWUoKSk7Ci0gICAgc2VuZFdlYkluc3BlY3Rv
ckV2ZW50KGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgpLCBzZXR1cEV2ZW50LT50b0pTT05TdHJp
bmcoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kQ2xvc2VFdmVudChD
b25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgYXV0byBjbG9zZUV2ZW50ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBjbG9zZUV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiRnJvbnRl
bmREaWRDbG9zZSJfcyk7Ci0gICAgY2xvc2VFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3Ms
IHRhcmdldElEKTsKLSAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29ubmVjdGlvbklELCBjbG9z
ZUV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVy
OjpjbG9zZShjb25zdCBFdmVudCYgZXZlbnQpCitib29sIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6
c3RhcnQoY29uc3QgY2hhciogYWRkcmVzcywgdWludDE2X3QgcG9ydCkKIHsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgc2VuZENsb3NlRXZlbnQoZXZlbnQuY29ubmVjdGlvbklE
LnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpOwotICAgIG1faW5zcGVjdGlvblRhcmdl
dHMucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgpLCBldmVu
dC50YXJnZXRJRC52YWx1ZSgpKSk7CisgICAgYXV0byYgZW5kcG9pbnQgPSBJbnNwZWN0b3I6OlJl
bW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpzaW5nbGV0b24oKTsKKyAgICBtX3NlcnZlciA9
IGVuZHBvaW50Lmxpc3RlbkluZXQoYWRkcmVzcywgcG9ydCwgKnRoaXMsIFJlbW90ZUluc3BlY3Rv
cjo6c2luZ2xldG9uKCkpOworICAgIHJldHVybiBpc1J1bm5pbmcoKTsKIH0KIAotdm9pZCBSZW1v
dGVJbnNwZWN0b3JTZXJ2ZXI6OmNsaWVudENvbm5lY3Rpb25DbG9zZWQoKQorYm9vbCBSZW1vdGVJ
bnNwZWN0b3JTZXJ2ZXI6OmRpZEFjY2VwdChDb25uZWN0aW9uSUQgYWNjZXB0ZWRJRCwgQ29ubmVj
dGlvbklELCBTb2NrZXQ6OkRvbWFpbikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
IAotICAgIG1fY2xpZW50Q29ubmVjdGlvbiA9IFdURjo6bnVsbG9wdDsKLQotICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbdGhpc10gewotICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25u
ZWN0aW9uc0xvY2spOwotICAgICAgICBmb3IgKGF1dG8gY29ubmVjdGlvblRhcmdldFBhaXIgOiBt
X2luc3BlY3Rpb25UYXJnZXRzKQotICAgICAgICAgICAgc2VuZENsb3NlRXZlbnQoY29ubmVjdGlv
blRhcmdldFBhaXIuZmlyc3QsIGNvbm5lY3Rpb25UYXJnZXRQYWlyLnNlY29uZCk7Ci0gICAgICAg
IG1faW5zcGVjdGlvblRhcmdldHMuY2xlYXIoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZW1vdGVJ
bnNwZWN0b3JTZXJ2ZXI6OmNvbm5lY3Rpb25DbG9zZWQoQ29ubmVjdGlvbklEIGNsaWVudElEKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBMb2NrSG9sZGVyIGxvY2sobV9j
b25uZWN0aW9uc0xvY2spOwotICAgIGlmIChtX2luc3BlY3RvckNvbm5lY3Rpb25zLnJlbW92ZUZp
cnN0KGNsaWVudElEKSAmJiBtX2NsaWVudENvbm5lY3Rpb24pIHsKLSAgICAgICAgYXV0byBjbG9z
ZWRFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGNsb3NlZEV2ZW50LT5z
ZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0VGFyZ2V0TGlzdCJfcyk7Ci0gICAgICAgIGNsb3NlZEV2
ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNsaWVudElEKTsKLSAgICAgICAgYXV0
byB0YXJnZXRMaXN0ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICBjbG9zZWRFdmVu
dC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB0YXJnZXRMaXN0LT50b0pTT05TdHJpbmcoKSk7Ci0g
ICAgICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChtX2NsaWVudENvbm5lY3Rpb24udmFsdWUoKSwg
Y2xvc2VkRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlSW5z
cGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBFdmVudCYgZXZlbnQpCi17
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghZXZlbnQuY29ubmVjdGlv
bklEIHx8ICFldmVudC50YXJnZXRJRCB8fCAhZXZlbnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byBzZW5kRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHNl
bmRFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNlbmRNZXNzYWdlVG9UYXJnZXQiX3MpOwot
ICAgIHNlbmRFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIGV2ZW50LnRhcmdldElELnZh
bHVlKCkpOwotICAgIHNlbmRFdmVudC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBldmVudC5tZXNz
YWdlLnZhbHVlKCkpOwotICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChldmVudC5jb25uZWN0aW9u
SUQudmFsdWUoKSwgc2VuZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
SW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQmIGV2ZW50
KQotewotICAgIGlmICghbV9jbGllbnRDb25uZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFldmVudC50YXJnZXRJRCB8fCAh
ZXZlbnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBzZW5kRXZlbnQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHNlbmRFdmVudC0+c2V0U3RyaW5nKCJldmVudCJf
cywgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcyk7Ci0gICAgc2VuZEV2ZW50LT5zZXRJbnRlZ2Vy
KCJ0YXJnZXRJRCJfcywgZXZlbnQudGFyZ2V0SUQudmFsdWUoKSk7Ci0gICAgc2VuZEV2ZW50LT5z
ZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGV2ZW50LmNsaWVudElEKTsKLSAgICBzZW5kRXZl
bnQtPnNldFN0cmluZygibWVzc2FnZSJfcywgZXZlbnQubWVzc2FnZS52YWx1ZSgpKTsKLSAgICBz
ZW5kV2ViSW5zcGVjdG9yRXZlbnQobV9jbGllbnRDb25uZWN0aW9uLnZhbHVlKCksIHNlbmRFdmVu
dC0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1TdHJpbmcgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpi
YWNrZW5kQ29tbWFuZHMoKSBjb25zdAotewotICAgIGlmIChtX2JhY2tlbmRDb21tYW5kc1BhdGgu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byBoYW5kbGUgPSBGaWxl
U3lzdGVtOjpvcGVuRmlsZShtX2JhY2tlbmRDb21tYW5kc1BhdGgsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6UmVhZCk7Ci0gICAgaWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGhhbmRs
ZSkpCi0gICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byYgaW5zcGVjdG9yID0gUmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoaW5zcGVjdG9yLmlzQ29ubmVjdGVkKCkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJSZW1vdGVJbnNwZWN0b3IgY2FuIGFjY2VwdCBvbmx5IDEgY2xp
ZW50Iik7CiAKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlm
IChGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYW5kbGUsIHNpemUpKSB7Ci0gICAgICAgIFZlY3Rv
cjxMQ2hhcj4gYnVmZmVyKHNpemUpOwotICAgICAgICBpZiAoRmlsZVN5c3RlbTo6cmVhZEZyb21G
aWxlKGhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyLmRhdGEoKSksIHNpemUp
ID09IHNpemUpCi0gICAgICAgICAgICByZXN1bHQgPSBTdHJpbmc6OmFkb3B0KFdURk1vdmUoYnVm
ZmVyKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgRmlsZVN5c3RlbTo6Y2xv
c2VGaWxlKGhhbmRsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpbnNwZWN0b3IuY29ubmVj
dChhY2NlcHRlZElEKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90
ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmgKaW5kZXggMDkx
ZDk4OGY5YzIuLmRjMmY5ZThiYzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3Rv
clNlcnZlci5oCkBAIC0yOCw2NiArMjgsMjcgQEAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKIAogI2luY2x1ZGUgIlJlbW90ZUluc3BlY3Rvci5oIgotCi0jaW5jbHVkZSAiUmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgIlJl
bW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmgiCiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci1jbGFzcyBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yQ29u
bmVjdGlvbkNsaWVudCB7CitjbGFzcyBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIgZmluYWwgOiBwdWJs
aWMgUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6Okxpc3RlbmVyIHsKIHB1YmxpYzoKKyAg
ICB+UmVtb3RlSW5zcGVjdG9yU2VydmVyKCk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgUmVtb3RlSW5zcGVjdG9yU2VydmVyJiBzaW5nbGV0b24oKTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgc3RhcnQoY29uc3QgY2hhciogYWRkcmVzcywgdWludDE2X3QgcG9ydCk7CiAg
ICAgYm9vbCBpc1J1bm5pbmcoKSBjb25zdCB7IHJldHVybiAhIW1fc2VydmVyOyB9CiAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBPcHRpb25hbDx1aW50MTZfdD4gbGlzdGVuRm9yVGFyZ2V0cygpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFBsYXRmb3JtU29ja2V0VHlwZT4gY29ubmVj
dCgpOwotCi0gICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHNQYXRoKGNvbnN0IFN0cmluZyYgYmFj
a2VuZENvbW1hbmRzUGF0aCkgeyBtX2JhY2tlbmRDb21tYW5kc1BhdGggPSBiYWNrZW5kQ29tbWFu
ZHNQYXRoOyB9Ci0KIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFJl
bW90ZUluc3BlY3RvclNlcnZlcj47CiAgICAgUmVtb3RlSW5zcGVjdG9yU2VydmVyKCkgeyBTb2Nr
ZXQ6OmluaXQoKTsgfQogCi0gICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKENvbm5lY3Rpb25JRCk7
Ci0KLSAgICB2b2lkIHNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmKTsKLSAgICB2b2lkIHNldHVw
SW5zcGVjdG9yQ2xpZW50KGNvbnN0IEV2ZW50Jik7Ci0gICAgdm9pZCBzZXR1cChjb25zdCBFdmVu
dCYpOwotICAgIHZvaWQgY2xvc2UoY29uc3QgRXZlbnQmKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdl
VG9Gcm9udGVuZChjb25zdCBFdmVudCYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQo
Y29uc3QgRXZlbnQmKTsKLQotICAgIHZvaWQgc2VuZENsb3NlRXZlbnQoQ29ubmVjdGlvbklELCBU
YXJnZXRJRCk7Ci0gICAgdm9pZCBjbGllbnRDb25uZWN0aW9uQ2xvc2VkKCk7Ci0KLSAgICB2b2lk
IGRpZEFjY2VwdChDb25uZWN0aW9uSUQgYWNjZXB0ZWRJRCwgQ29ubmVjdGlvbklEIGxpc3RlbmVy
SUQsIFNvY2tldDo6RG9tYWluKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZENsb3NlKENvbm5lY3Rp
b25JRCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNlbmRXZWJJbnNwZWN0b3JFdmVudChDb25uZWN0
aW9uSUQsIGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGJhY2tlbmRDb21tYW5kcygpIGNv
bnN0OwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiYgZGlzcGF0Y2hNYXAoKSBv
dmVycmlkZTsKLQotICAgIEhhc2hTZXQ8c3RkOjpwYWlyPENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQ+
PiBtX2luc3BlY3Rpb25UYXJnZXRzOworICAgIGJvb2wgZGlkQWNjZXB0KENvbm5lY3Rpb25JRCBh
Y2NlcHRlZElELCBDb25uZWN0aW9uSUQgbGlzdGVuZXJJRCwgU29ja2V0OjpEb21haW4pIG92ZXJy
aWRlOworICAgIHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSBvdmVycmlkZSB7IH07CiAKICAg
ICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IG1fc2VydmVyOwotCi0gICAgLy8gQ29ubmVjdGlvbnMg
dG8gdGhlIFdlYlByb2Nlc3MuCi0gICAgVmVjdG9yPENvbm5lY3Rpb25JRD4gbV9pbnNwZWN0b3JD
b25uZWN0aW9uczsKLSAgICBMb2NrIG1fY29ubmVjdGlvbnNMb2NrOwotCi0gICAgLy8gTGlzdGVu
ZXIgZm9yIHRhcmdldHMuCi0gICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBtX2luc3BlY3Rvckxp
c3RlbmVyOwotCi0gICAgLy8gQ29ubmVjdGlvbiBmcm9tIFJlbW90ZUluc3BlY3RvckNsaWVudC4K
LSAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IG1fY2xpZW50Q29ubmVjdGlvbjsKLQotICAgIFN0
cmluZyBtX2JhY2tlbmRDb21tYW5kc1BhdGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5jcHAKaW5kZXggNGI4
YmY5OTY2NmMuLmVlYjVmYzQxOThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yU29ja2V0LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlJlbW90ZUF1dG9tYXRp
b25UYXJnZXQuaCIKICNpbmNsdWRlICJSZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQuaCIKICNpbmNs
dWRlICJSZW1vdGVJbnNwZWN0aW9uVGFyZ2V0LmgiCisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0u
aD4KICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC0zOCw5ICszOSw2IEBACiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi1QbGF0Zm9ybVNvY2tldFR5cGUgUmVtb3RlSW5zcGVj
dG9yOjpzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID0gSU5WQUxJRF9TT0NLRVRfVkFMVUU7Ci11aW50
MTZfdCBSZW1vdGVJbnNwZWN0b3I6OnNfc2VydmVyUG9ydCA9IDA7Ci0KIFJlbW90ZUluc3BlY3Rv
ciYgUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxSZW1vdGVJbnNwZWN0b3I+IHNoYXJlZDsKQEAgLTUzLDU1ICs1MSw0MyBAQCBSZW1vdGVJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvcigpCiAgICAgc3RhcnQoKTsKIH0KIAotdm9pZCBSZW1v
dGVJbnNwZWN0b3I6OmRpZENsb3NlKENvbm5lY3Rpb25JRCBpZCkKK3ZvaWQgUmVtb3RlSW5zcGVj
dG9yOjpjb25uZWN0KENvbm5lY3Rpb25JRCBpZCkKIHsKLSAgICBpZiAoaWQgIT0gbV9jbGllbnRJ
RC52YWx1ZSgpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFpc0Nvbm5lY3RlZCgpKTsK
IAotICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbPV0gewotICAgICAgICBMb2NrSG9s
ZGVyIGxvY2sobV9tdXRleCk7Ci0gICAgICAgIHN0b3BJbnRlcm5hbChTdG9wU291cmNlOjpBUEkp
OwotICAgIH0pOworICAgIG1fY2xpZW50Q29ubmVjdGlvbiA9IGlkOworICAgIHN0YXJ0KCk7CiB9
CiAKLUhhc2hNYXA8U3RyaW5nLCBSZW1vdGVJbnNwZWN0b3I6OkNhbGxIYW5kbGVyPiYgUmVtb3Rl
SW5zcGVjdG9yOjpkaXNwYXRjaE1hcCgpCit2b2lkIFJlbW90ZUluc3BlY3Rvcjo6ZGlkQ2xvc2Uo
Q29ubmVjdGlvbklEKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmlu
ZywgQ2FsbEhhbmRsZXI+PiBtZXRob2RzID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPih7
Ci0gICAgICAgIHsgIkdldFRhcmdldExpc3QiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigm
UmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZEdldFRhcmdldExpc3RNZXNzYWdlKSB9LAotICAgICAg
ICB7ICJTZXR1cCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3I6
OnJlY2VpdmVkU2V0dXBNZXNzYWdlKSB9LAotICAgICAgICB7ICJTZW5kTWVzc2FnZVRvVGFyZ2V0
Il9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRE
YXRhTWVzc2FnZSkgfSwKLSAgICAgICAgeyAiRnJvbnRlbmREaWRDbG9zZSJfcywgc3RhdGljX2Nh
c3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3I6OnJlY2VpdmVkQ2xvc2VNZXNzYWdlKSB9
LAotICAgIH0pOworICAgIEFTU0VSVChpc0Nvbm5lY3RlZCgpKTsKIAotICAgIHJldHVybiBtZXRo
b2RzOworICAgIG1fY2xpZW50Q29ubmVjdGlvbiA9IFdURjo6bnVsbG9wdDsKKworICAgIFJ1bkxv
b3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbPV0geworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9t
dXRleCk7CisgICAgICAgIHN0b3BJbnRlcm5hbChTdG9wU291cmNlOjpBUEkpOworICAgIH0pOwog
fQogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZFdlYkluc3BlY3RvckV2ZW50KGNvbnN0IFN0
cmluZyYgZXZlbnQpCiB7Ci0gICAgaWYgKCFtX2NsaWVudElEKQorICAgIGlmICghbV9jbGllbnRD
b25uZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBDU3RyaW5nIG1lc3NhZ2Ug
PSBldmVudC51dGY4KCk7Ci0gICAgc2VuZChtX2NsaWVudElELnZhbHVlKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2FnZS5sZW5ndGgoKSk7
CisgICAgc2VuZChtX2NsaWVudENvbm5lY3Rpb24udmFsdWUoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4obWVzc2FnZS5kYXRhKCkpLCBtZXNzYWdlLmxlbmd0aCgpKTsKIH0KIAog
dm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0YXJ0KCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2sobV9t
dXRleCk7CiAKLSAgICBpZiAobV9lbmFibGVkIHx8IChzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID09
IElOVkFMSURfU09DS0VUX1ZBTFVFICYmICFzX3NlcnZlclBvcnQpKQorICAgIGlmIChtX2VuYWJs
ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZW5hYmxlZCA9IHRydWU7Ci0KLSAgICBpZiAo
c19jb25uZWN0aW9uSWRlbnRpZmllciAhPSBJTlZBTElEX1NPQ0tFVF9WQUxVRSkgewotICAgICAg
ICBtX2NsaWVudElEID0gY3JlYXRlQ2xpZW50KHNfY29ubmVjdGlvbklkZW50aWZpZXIpOwotICAg
ICAgICBzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID0gSU5WQUxJRF9TT0NLRVRfVkFMVUU7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fY2xpZW50SUQgPSBjb25uZWN0SW5ldCgiMTI3LjAuMC4xIiwgc19z
ZXJ2ZXJQb3J0KTsKLQotICAgIGlmICghbV90YXJnZXRNYXAuaXNFbXB0eSgpKQotICAgICAgICBw
dXNoTGlzdGluZ3NTb29uKCk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzdG9wSW50ZXJu
YWwoU3RvcFNvdXJjZSkKQEAgLTExMSw2ICs5Nyw3IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpz
dG9wSW50ZXJuYWwoU3RvcFNvdXJjZSkKIAogICAgIG1fZW5hYmxlZCA9IGZhbHNlOwogICAgIG1f
cHVzaFNjaGVkdWxlZCA9IGZhbHNlOworICAgIG1fcmVhZHlUb1B1c2hMaXN0aW5ncyA9IGZhbHNl
OwogCiAgICAgZm9yIChhdXRvIHRhcmdldENvbm5lY3Rpb24gOiBtX3RhcmdldENvbm5lY3Rpb25N
YXAudmFsdWVzKCkpCiAgICAgICAgIHRhcmdldENvbm5lY3Rpb24tPmNsb3NlKCk7CkBAIC0xMTks
NyArMTA2LDYgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3BJbnRlcm5hbChTdG9wU291cmNl
KQogICAgIHVwZGF0ZUhhc0FjdGl2ZURlYnVnU2Vzc2lvbigpOwogCiAgICAgbV9hdXRvbWF0aWNJ
bnNwZWN0aW9uUGF1c2VkID0gZmFsc2U7Ci0gICAgbV9jbGllbnRJRCA9IFdURjo6bnVsbG9wdDsK
IH0KIAogVGFyZ2V0TGlzdGluZyBSZW1vdGVJbnNwZWN0b3I6Omxpc3RpbmdGb3JJbnNwZWN0aW9u
VGFyZ2V0KGNvbnN0IFJlbW90ZUluc3BlY3Rpb25UYXJnZXQmIHRhcmdldCkgY29uc3QKQEAgLTE1
NCw3ICsxNDAsNyBAQCBUYXJnZXRMaXN0aW5nIFJlbW90ZUluc3BlY3Rvcjo6bGlzdGluZ0ZvckF1
dG9tYXRpb25UYXJnZXQoY29uc3QgUmVtb3RlQXV0b21hdGlvbgogCiB2b2lkIFJlbW90ZUluc3Bl
Y3Rvcjo6cHVzaExpc3RpbmdzTm93KCkKIHsKLSAgICBpZiAoIW1fY2xpZW50SUQpCisgICAgaWYg
KCFpc0Nvbm5lY3RlZCgpIHx8ICFtX3JlYWR5VG9QdXNoTGlzdGluZ3MpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fcHVzaFNjaGVkdWxlZCA9IGZhbHNlOwpAQCAtMTY2LDEyICsxNTIsMTQgQEAg
dm9pZCBSZW1vdGVJbnNwZWN0b3I6OnB1c2hMaXN0aW5nc05vdygpCiAgICAgYXV0byBqc29uRXZl
bnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25FdmVudC0+c2V0U3RyaW5nKCJl
dmVudCJfcywgIlNldFRhcmdldExpc3QiX3MpOwogICAgIGpzb25FdmVudC0+c2V0U3RyaW5nKCJt
ZXNzYWdlIl9zLCB0YXJnZXRMaXN0SlNPTi0+dG9KU09OU3RyaW5nKCkpOworICAgIGpzb25FdmVu
dC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBtX2NsaWVudENvbm5lY3Rpb24udmFsdWUo
KSk7CisgICAganNvbkV2ZW50LT5zZXRCb29sZWFuKCJyZW1vdGVBdXRvbWF0aW9uQWxsb3dlZCJf
cywgbV9jbGllbnRDYXBhYmlsaXRpZXMgJiYgbV9jbGllbnRDYXBhYmlsaXRpZXMtPnJlbW90ZUF1
dG9tYXRpb25BbGxvd2VkKTsKICAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoanNvbkV2ZW50LT50
b0pTT05TdHJpbmcoKSk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpwdXNoTGlzdGluZ3NT
b29uKCkKIHsKLSAgICBpZiAoIW1fY2xpZW50SUQpCisgICAgaWYgKCFpc0Nvbm5lY3RlZCgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9wdXNoU2NoZWR1bGVkKQpAQCAtMTkyLDUyICsx
ODAsMTA2IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZW5kQXV0b21hdGljSW5zcGVjdGlvbkNh
bmRpZGF0ZU1lc3NhZ2UoKQogCiB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2VuZE1lc3NhZ2VUb1Jl
bW90ZShUYXJnZXRJRCB0YXJnZXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7
Ci0gICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOwotICAgIGlmICghbV9jbGllbnRJRCkKKyAg
ICBpZiAoIW1fY2xpZW50Q29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBz
ZW5kTWVzc2FnZUV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBzZW5kTWVzc2Fn
ZUV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SWRlbnRpZmllcik7CiAgICAg
c2VuZE1lc3NhZ2VFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNlbmRNZXNzYWdlVG9Gcm9u
dGVuZCJfcyk7CisgICAgc2VuZE1lc3NhZ2VFdmVudC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklE
Il9zLCBtX2NsaWVudENvbm5lY3Rpb24udmFsdWUoKSk7CiAgICAgc2VuZE1lc3NhZ2VFdmVudC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBtZXNzYWdlKTsKICAgICBzZW5kV2ViSW5zcGVjdG9yRXZl
bnQoc2VuZE1lc3NhZ2VFdmVudC0+dG9KU09OU3RyaW5nKCkpOwogfQogCi12b2lkIFJlbW90ZUlu
c3BlY3Rvcjo6cmVjZWl2ZWRHZXRUYXJnZXRMaXN0TWVzc2FnZShjb25zdCBFdmVudCYpCit2b2lk
IFJlbW90ZUluc3BlY3Rvcjo6c2V0dXAoVGFyZ2V0SUQgdGFyZ2V0SWRlbnRpZmllcikKIHsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldCog
dGFyZ2V0OworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOworICAgICAg
ICB0YXJnZXQgPSBtX3RhcmdldE1hcC5nZXQodGFyZ2V0SWRlbnRpZmllcik7CisgICAgICAgIGlm
ICghdGFyZ2V0KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gY29ubmVj
dGlvblRvVGFyZ2V0ID0gYWRvcHRSZWYoKm5ldyBSZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQoKnRh
cmdldCkpOworICAgIEFTU0VSVChpczxSZW1vdGVJbnNwZWN0aW9uVGFyZ2V0Pih0YXJnZXQpIHx8
IGlzPFJlbW90ZUF1dG9tYXRpb25UYXJnZXQ+KHRhcmdldCkpOworICAgIGlmICghY29ubmVjdGlv
blRvVGFyZ2V0LT5zZXR1cCgpKSB7CisgICAgICAgIGNvbm5lY3Rpb25Ub1RhcmdldC0+Y2xvc2Uo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4
KTsKLSAgICBwdXNoTGlzdGluZ3NOb3coKTsKKyAgICBtX3RhcmdldENvbm5lY3Rpb25NYXAuc2V0
KHRhcmdldElkZW50aWZpZXIsIFdURk1vdmUoY29ubmVjdGlvblRvVGFyZ2V0KSk7CisKKyAgICB1
cGRhdGVIYXNBY3RpdmVEZWJ1Z1Nlc3Npb24oKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3I6
OnNlbmRNZXNzYWdlVG9UYXJnZXQoVGFyZ2V0SUQgdGFyZ2V0SWRlbnRpZmllciwgY29uc3QgY2hh
ciogbWVzc2FnZSkKK3sKKyAgICBpZiAoYXV0byBjb25uZWN0aW9uVG9UYXJnZXQgPSBtX3Rhcmdl
dENvbm5lY3Rpb25NYXAuZ2V0KHRhcmdldElkZW50aWZpZXIpKQorICAgICAgICBjb25uZWN0aW9u
VG9UYXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXQoU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKSk7
Cit9CisKK1N0cmluZyBSZW1vdGVJbnNwZWN0b3I6OmJhY2tlbmRDb21tYW5kcygpIGNvbnN0Cit7
CisgICAgaWYgKG1fYmFja2VuZENvbW1hbmRzUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBhdXRvIGhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKG1fYmFja2Vu
ZENvbW1hbmRzUGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKKyAgICBpZiAo
IUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIFN0cmluZyByZXN1bHQ7CisgICAgbG9uZyBsb25nIHNpemU7CisgICAgaWYgKEZpbGVT
eXN0ZW06OmdldEZpbGVTaXplKGhhbmRsZSwgc2l6ZSkpIHsKKyAgICAgICAgVmVjdG9yPExDaGFy
PiBidWZmZXIoc2l6ZSk7CisgICAgICAgIGlmIChGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoaGFu
ZGxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIuZGF0YSgpKSwgc2l6ZSkgPT0gc2l6
ZSkKKyAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsK
KyAgICB9CisgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGhhbmRsZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworLy8gUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudCBoYW5kbGVycwor
CitIYXNoTWFwPFN0cmluZywgUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6Q2FsbEhh
bmRsZXI+JiBSZW1vdGVJbnNwZWN0b3I6OmRpc3BhdGNoTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPj4gbWV0aG9kcyA9IEhhc2hN
YXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4oeworICAgICAgICB7ICJTZXR1cEluc3BlY3RvckNsaWVu
dCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3I6OnNldHVwSW5z
cGVjdG9yQ2xpZW50KSB9LAorICAgICAgICB7ICJTZXR1cCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhh
bmRsZXI+KCZSZW1vdGVJbnNwZWN0b3I6OnNldHVwVGFyZ2V0KSB9LAorICAgICAgICB7ICJGcm9u
dGVuZERpZENsb3NlIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3Rv
cjo6ZnJvbnRlbmREaWRDbG9zZSkgfSwKKyAgICAgICAgeyAiU2VuZE1lc3NhZ2VUb0JhY2tlbmQi
X3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yOjpzZW5kTWVzc2Fn
ZVRvQmFja2VuZCkgfSwKKyAgICB9KTsKKworICAgIHJldHVybiBtZXRob2RzOwogfQogCi12b2lk
IFJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRTZXR1cE1lc3NhZ2UoY29uc3QgRXZlbnQmIGV2ZW50
KQordm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNldHVwSW5zcGVjdG9yQ2xpZW50KGNvbnN0IEV2ZW50
JikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKGV2ZW50LnRhcmdl
dElEKQotICAgICAgICBzZXR1cChldmVudC50YXJnZXRJRC52YWx1ZSgpKTsKKyAgICBhdXRvIGJh
Y2tlbmRDb21tYW5kc0V2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBiYWNrZW5k
Q29tbWFuZHNFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIkJhY2tlbmRDb21tYW5kcyJfcyk7
CisgICAgYmFja2VuZENvbW1hbmRzRXZlbnQtPnNldFN0cmluZygibWVzc2FnZSJfcywgYmFja2Vu
ZENvbW1hbmRzKCkpOworICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChiYWNrZW5kQ29tbWFuZHNF
dmVudC0+dG9KU09OU3RyaW5nKCkpOworCisgICAgbV9yZWFkeVRvUHVzaExpc3RpbmdzID0gdHJ1
ZTsKKworICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4KTsKKyAgICBwdXNoTGlzdGluZ3NOb3co
KTsKIH0KIAotdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnJlY2VpdmVkRGF0YU1lc3NhZ2UoY29uc3Qg
RXZlbnQmIGV2ZW50KQordm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNldHVwVGFyZ2V0KGNvbnN0IEV2
ZW50JiBldmVudCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKCFl
dmVudC50YXJnZXRJRCB8fCAhZXZlbnQubWVzc2FnZSkKKyAgICBpZiAoIWV2ZW50LnRhcmdldElE
IHx8ICFldmVudC5jb25uZWN0aW9uSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxS
ZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQ+IGNvbm5lY3Rpb25Ub1RhcmdldDsKLSAgICB7Ci0gICAg
ICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4KTsKLSAgICAgICAgY29ubmVjdGlvblRvVGFyZ2V0
ID0gbV90YXJnZXRDb25uZWN0aW9uTWFwLmdldChldmVudC50YXJnZXRJRC52YWx1ZSgpKTsKLSAg
ICAgICAgaWYgKCFjb25uZWN0aW9uVG9UYXJnZXQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgY29ubmVjdGlvblRvVGFyZ2V0LT5zZW5kTWVzc2FnZVRvVGFyZ2V0KGV2ZW50Lm1l
c3NhZ2UudmFsdWUoKSk7CisgICAgc2V0dXAoZXZlbnQudGFyZ2V0SUQudmFsdWUoKSk7CiB9CiAK
LXZvaWQgUmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZENsb3NlTWVzc2FnZShjb25zdCBFdmVudCYg
ZXZlbnQpCit2b2lkIFJlbW90ZUluc3BlY3Rvcjo6ZnJvbnRlbmREaWRDbG9zZShjb25zdCBFdmVu
dCYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtMjU5LDQzICsz
MDEsMjIgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnJlY2VpdmVkQ2xvc2VNZXNzYWdlKGNvbnN0
IEV2ZW50JiBldmVudCkKICAgICAgICAgY29ubmVjdGlvblRvVGFyZ2V0LT5jbG9zZSgpOwogfQog
Ci12b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0dXAoVGFyZ2V0SUQgdGFyZ2V0SWRlbnRpZmllcikK
K3ZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBFdmVudCYg
ZXZlbnQpCiB7Ci0gICAgUmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0KiB0YXJnZXQ7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFl
dmVudC50YXJnZXRJRCB8fCAhZXZlbnQubWVzc2FnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UmVmUHRyPFJlbW90ZUNvbm5lY3Rpb25Ub1RhcmdldD4gY29ubmVjdGlvblRvVGFyZ2V0OwogICAg
IHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOwotICAgICAgICB0YXJnZXQgPSBt
X3RhcmdldE1hcC5nZXQodGFyZ2V0SWRlbnRpZmllcik7Ci0gICAgICAgIGlmICghdGFyZ2V0KQor
ICAgICAgICBjb25uZWN0aW9uVG9UYXJnZXQgPSBtX3RhcmdldENvbm5lY3Rpb25NYXAuZ2V0KGV2
ZW50LnRhcmdldElELnZhbHVlKCkpOworICAgICAgICBpZiAoIWNvbm5lY3Rpb25Ub1RhcmdldCkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGNvbm5lY3Rpb25Ub1Rhcmdl
dCA9IGFkb3B0UmVmKCpuZXcgUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0KCp0YXJnZXQpKTsKLSAg
ICBBU1NFUlQoaXM8UmVtb3RlSW5zcGVjdGlvblRhcmdldD4odGFyZ2V0KSB8fCBpczxSZW1vdGVB
dXRvbWF0aW9uVGFyZ2V0Pih0YXJnZXQpKTsKLSAgICBpZiAoIWNvbm5lY3Rpb25Ub1RhcmdldC0+
c2V0dXAoKSkgewotICAgICAgICBjb25uZWN0aW9uVG9UYXJnZXQtPmNsb3NlKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBMb2NrSG9sZGVyIGxvY2sobV9tdXRleCk7Ci0gICAgbV90
YXJnZXRDb25uZWN0aW9uTWFwLnNldCh0YXJnZXRJZGVudGlmaWVyLCBXVEZNb3ZlKGNvbm5lY3Rp
b25Ub1RhcmdldCkpOwotCi0gICAgdXBkYXRlSGFzQWN0aXZlRGVidWdTZXNzaW9uKCk7Ci19Ci0K
LXZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvVGFyZ2V0KFRhcmdldElEIHRhcmdl
dElkZW50aWZpZXIsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKGF1dG8gY29ubmVj
dGlvblRvVGFyZ2V0ID0gbV90YXJnZXRDb25uZWN0aW9uTWFwLmdldCh0YXJnZXRJZGVudGlmaWVy
KSkKLSAgICAgICAgY29ubmVjdGlvblRvVGFyZ2V0LT5zZW5kTWVzc2FnZVRvVGFyZ2V0KFN0cmlu
Zzo6ZnJvbVVURjgobWVzc2FnZSkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0Q29u
bmVjdGlvbklkZW50aWZpZXIoUGxhdGZvcm1Tb2NrZXRUeXBlIGNvbm5lY3Rpb25JZGVudGlmaWVy
KQotewotICAgIFJlbW90ZUluc3BlY3Rvcjo6c19jb25uZWN0aW9uSWRlbnRpZmllciA9IGNvbm5l
Y3Rpb25JZGVudGlmaWVyOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0U2VydmVyUG9y
dCh1aW50MTZfdCBwb3J0KQotewotICAgIFJlbW90ZUluc3BlY3Rvcjo6c19zZXJ2ZXJQb3J0ID0g
cG9ydDsKKyAgICBjb25uZWN0aW9uVG9UYXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXQoZXZlbnQu
bWVzc2FnZS52YWx1ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmNwcAppbmRl
eCA3OThkM2IzMDZkNi4uZmY5Y2Q4N2NmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2lu
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0
L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTY0LDYgKzY1
LDggQEAgUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6On5SZW1vdGVJbnNwZWN0b3JTb2Nr
ZXRFbmRwb2ludCgpCiAgICAgU29ja2V0OjpjbG9zZShtX3dha2V1cFJlY2VpdmVTb2NrZXQpOwog
ICAgIGZvciAoY29uc3QgYXV0byYgY29ubmVjdGlvbiA6IG1fY29ubmVjdGlvbnMudmFsdWVzKCkp
CiAgICAgICAgIFNvY2tldDo6Y2xvc2UoY29ubmVjdGlvbi0+c29ja2V0KTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGNvbm5lY3Rpb24gOiBtX2xpc3RlbmVycy52YWx1ZXMoKSkKKyAgICAgICAgU29j
a2V0OjpjbG9zZShjb25uZWN0aW9uLT5zb2NrZXQpOwogfQogCiB2b2lkIFJlbW90ZUluc3BlY3Rv
clNvY2tldEVuZHBvaW50Ojp3YWtldXBXb3JrZXJUaHJlYWQoKQpAQCAtNzksMTAgKzgyLDEwIEBA
IE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmNv
bm5lY3RJbmV0KGNvbnN0IGNoYXIqIHNlCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAot
T3B0aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6bGlz
dGVuSW5ldChjb25zdCBjaGFyKiBhZGRyZXNzLCB1aW50MTZfdCBwb3J0LCBDbGllbnQmIGNsaWVu
dCkKK09wdGlvbmFsPENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6
Omxpc3RlbkluZXQoY29uc3QgY2hhciogYWRkcmVzcywgdWludDE2X3QgcG9ydCwgTGlzdGVuZXIm
IGxpc3RlbmVyLCBDbGllbnQmIGNsaWVudCkKIHsKICAgICBpZiAoYXV0byBzb2NrZXQgPSBTb2Nr
ZXQ6Omxpc3RlbihhZGRyZXNzLCBwb3J0KSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNsaWVudCgq
c29ja2V0LCBjbGllbnQpOworICAgICAgICByZXR1cm4gY3JlYXRlTGlzdGVuZXIoKnNvY2tldCwg
bGlzdGVuZXIsIGNsaWVudCk7CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtOTAs
OCArOTMsOCBAQCBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IFJlbW90ZUluc3BlY3RvclNvY2tldEVu
ZHBvaW50OjpsaXN0ZW5JbmV0KGNvbnN0IGNoYXIqIGFkZAogYm9vbCBSZW1vdGVJbnNwZWN0b3JT
b2NrZXRFbmRwb2ludDo6aXNMaXN0ZW5pbmcoQ29ubmVjdGlvbklEIGlkKQogewogICAgIExvY2tI
b2xkZXIgbG9jayhtX2Nvbm5lY3Rpb25zTG9jayk7Ci0gICAgaWYgKGNvbnN0IGF1dG8mIGNvbm5l
Y3Rpb24gPSBtX2Nvbm5lY3Rpb25zLmdldChpZCkpCi0gICAgICAgIHJldHVybiBTb2NrZXQ6Omlz
TGlzdGVuaW5nKGNvbm5lY3Rpb24tPnNvY2tldCk7CisgICAgaWYgKG1fbGlzdGVuZXJzLmNvbnRh
aW5zKGlkKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBA
IC0xMDAsNiArMTAzLDEwIEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6Ondv
cmtlclRocmVhZCgpCiAgICAgUG9sbGluZ0Rlc2NyaXB0b3Igd2FrZXVwID0gU29ja2V0OjpwcmVw
YXJlUG9sbGluZyhtX3dha2V1cFJlY2VpdmVTb2NrZXQpOwogCiAgICAgd2hpbGUgKCFtX3Nob3Vs
ZEFib3J0V29ya2VyVGhyZWFkKSB7CisjaWYgUExBVEZPUk0oUExBWVNUQVRJT04pIHx8IFBMQVRG
T1JNKFdJTikKKyAgICAgICAgUnVuTG9vcDo6aXRlcmF0ZSgpOworI2VuZGlmCisKICAgICAgICAg
VmVjdG9yPFBvbGxpbmdEZXNjcmlwdG9yPiBwb2xsZmRzOwogICAgICAgICBWZWN0b3I8Q29ubmVj
dGlvbklEPiBpZHM7CiAgICAgICAgIHsKQEAgLTEwOCw2ICsxMTUsMTAgQEAgdm9pZCBSZW1vdGVJ
bnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6d29ya2VyVGhyZWFkKCkKICAgICAgICAgICAgICAgICBw
b2xsZmRzLmFwcGVuZChjb25uZWN0aW9uLnZhbHVlLT5wb2xsKTsKICAgICAgICAgICAgICAgICBp
ZHMuYXBwZW5kKGNvbm5lY3Rpb24ua2V5KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgY29ubmVjdGlvbiA6IG1fbGlzdGVuZXJzKSB7CisgICAgICAgICAgICAg
ICAgcG9sbGZkcy5hcHBlbmQoY29ubmVjdGlvbi52YWx1ZS0+cG9sbCk7CisgICAgICAgICAgICAg
ICAgaWRzLmFwcGVuZChjb25uZWN0aW9uLmtleSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgcG9sbGZkcy5hcHBlbmQod2FrZXVwKTsKIApAQCAtMTIzLDQxICsxMzQsNzYgQEAg
dm9pZCBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6d29ya2VyVGhyZWFkKCkKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAg
IGF1dG8gaWQgPSBpZHNbaV07CiAKLSAgICAgICAgICAgIGlmIChTb2NrZXQ6OmlzUmVhZGFibGUo
cG9sbGZkc1tpXSkgJiYgaXNMaXN0ZW5pbmcoaWQpKQotICAgICAgICAgICAgICAgIGFjY2VwdElu
ZXRTb2NrZXRJZkVuYWJsZWQoaWQpOwotICAgICAgICAgICAgZWxzZSBpZiAoU29ja2V0Ojppc1Jl
YWRhYmxlKHBvbGxmZHNbaV0pKQotICAgICAgICAgICAgICAgIHJlY3ZJZkVuYWJsZWQoaWQpOwot
ICAgICAgICAgICAgZWxzZSBpZiAoU29ja2V0Ojppc1dyaXRhYmxlKHBvbGxmZHNbaV0pKQorICAg
ICAgICAgICAgaWYgKFNvY2tldDo6aXNSZWFkYWJsZShwb2xsZmRzW2ldKSkgeworICAgICAgICAg
ICAgICAgIGlmIChpc0xpc3RlbmluZyhpZCkpCisgICAgICAgICAgICAgICAgICAgIGFjY2VwdElu
ZXRTb2NrZXRJZkVuYWJsZWQoaWQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgcmVjdklmRW5hYmxlZChpZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFNvY2tl
dDo6aXNXcml0YWJsZShwb2xsZmRzW2ldKSkKICAgICAgICAgICAgICAgICBzZW5kSWZFbmFibGVk
KGlkKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1v
dGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6Y3JlYXRlQ2xpZW50KFBsYXRmb3JtU29ja2V0VHlw
ZSBzb2NrZXQsIENsaWVudCYgY2xpZW50KQorQ29ubmVjdGlvbklEIFJlbW90ZUluc3BlY3RvclNv
Y2tldEVuZHBvaW50OjpnZW5lcmF0ZUNvbm5lY3Rpb25JRCgpCiB7Ci0gICAgaWYgKCFTb2NrZXQ6
OmlzVmFsaWQoc29ja2V0KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIExv
Y2tIb2xkZXIgbG9jayhtX2Nvbm5lY3Rpb25zTG9jayk7CisgICAgQVNTRVJUKG1fY29ubmVjdGlv
bnNMb2NrLmlzTG9ja2VkKCkpOwogCiAgICAgQ29ubmVjdGlvbklEIGlkOwogICAgIGRvIHsKICAg
ICAgICAgaWQgPSBjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpOwotICAgIH0gd2hpbGUg
KCFpZCB8fCBtX2Nvbm5lY3Rpb25zLmNvbnRhaW5zKGlkKSk7CisgICAgfSB3aGlsZSAoIWlkIHx8
IG1fY29ubmVjdGlvbnMuY29udGFpbnMoaWQpIHx8IG1fbGlzdGVuZXJzLmNvbnRhaW5zKGlkKSk7
CisKKyAgICByZXR1cm4gaWQ7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JT
b2NrZXRFbmRwb2ludDo6Q29ubmVjdGlvbj4gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6
Om1ha2VDb25uZWN0aW9uKFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQsIENsaWVudCYgY2xpZW50
KQoreworICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25zTG9jay5pc0xvY2tlZCgpKTsKIAogICAgIFNv
Y2tldDo6c2V0dXAoc29ja2V0KTsKIAotICAgIGF1dG8gY29ubmVjdGlvbiA9IG1ha2VVbmlxdWU8
Q29ubmVjdGlvbj4oY2xpZW50KTsKKyAgICBhdXRvIGNvbm5lY3Rpb24gPSBXVEY6Om1ha2VVbmlx
dWU8Q29ubmVjdGlvbj4oY2xpZW50KTsKIAotICAgIGNvbm5lY3Rpb24tPmlkID0gaWQ7CisgICAg
Y29ubmVjdGlvbi0+aWQgPSBnZW5lcmF0ZUNvbm5lY3Rpb25JRCgpOwogICAgIGNvbm5lY3Rpb24t
PnBvbGwgPSBTb2NrZXQ6OnByZXBhcmVQb2xsaW5nKHNvY2tldCk7CiAgICAgY29ubmVjdGlvbi0+
c29ja2V0ID0gc29ja2V0OworCisgICAgcmV0dXJuIGNvbm5lY3Rpb247Cit9CisKK09wdGlvbmFs
PENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmNyZWF0ZUNsaWVu
dChQbGF0Zm9ybVNvY2tldFR5cGUgc29ja2V0LCBDbGllbnQmIGNsaWVudCkKK3sKKyAgICBpZiAo
IVNvY2tldDo6aXNWYWxpZChzb2NrZXQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsKKyAgICBhdXRvIGNvbm5l
Y3Rpb24gPSBtYWtlQ29ubmVjdGlvbihzb2NrZXQsIGNsaWVudCk7CisgICAgYXV0byBpZCA9IGNv
bm5lY3Rpb24tPmlkOwogICAgIG1fY29ubmVjdGlvbnMuYWRkKGlkLCBXVEZNb3ZlKGNvbm5lY3Rp
b24pKTsKICAgICB3YWtldXBXb3JrZXJUaHJlYWQoKTsKIAogICAgIHJldHVybiBpZDsKIH0KIAor
T3B0aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6Y3Jl
YXRlTGlzdGVuZXIoUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCwgTGlzdGVuZXImIGxpc3RlbmVy
LCBDbGllbnQmIGNsaWVudCkKK3sKKyAgICBpZiAoIVNvY2tldDo6aXNWYWxpZChzb2NrZXQpKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgTG9ja0hvbGRlciBsb2NrKG1fY29u
bmVjdGlvbnNMb2NrKTsKKworICAgIFNvY2tldDo6c2V0dXAoc29ja2V0KTsKKworICAgIGF1dG8g
Y29ubmVjdGlvbiA9IG1ha2VDb25uZWN0aW9uKHNvY2tldCwgY2xpZW50KTsKKyAgICBhdXRvIGlk
ID0gY29ubmVjdGlvbi0+aWQ7CisgICAgY29ubmVjdGlvbi0+bGlzdGVuZXIgPSAmbGlzdGVuZXI7
CisgICAgbV9saXN0ZW5lcnMuYWRkKGlkLCBXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKKyAgICB3YWtl
dXBXb3JrZXJUaHJlYWQoKTsKKworICAgIHJldHVybiBpZDsKK30KKwogdm9pZCBSZW1vdGVJbnNw
ZWN0b3JTb2NrZXRFbmRwb2ludDo6aW52YWxpZGF0ZUNsaWVudChDbGllbnQmIGNsaWVudCkKIHsK
ICAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25uZWN0aW9uc0xvY2spOwpAQCAtMTczLDkgKzIxOSwy
NiBAQCB2b2lkIFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjppbnZhbGlkYXRlQ2xpZW50
KENsaWVudCYgY2xpZW50KQogICAgIH0pOwogfQogCit2b2lkIFJlbW90ZUluc3BlY3RvclNvY2tl
dEVuZHBvaW50OjppbnZhbGlkYXRlTGlzdGVuZXIoTGlzdGVuZXImIGxpc3RlbmVyKQoreworICAg
IExvY2tIb2xkZXIgbG9jayhtX2Nvbm5lY3Rpb25zTG9jayk7CisgICAgbV9saXN0ZW5lcnMucmVt
b3ZlSWYoWyZsaXN0ZW5lcl0oYXV0byYga2V5VmFsdWUpIHsKKyAgICAgICAgY29uc3QgYXV0byYg
Y29ubmVjdGlvbiA9IGtleVZhbHVlLnZhbHVlOworCisgICAgICAgIGlmIChjb25uZWN0aW9uLT5s
aXN0ZW5lciA9PSAmbGlzdGVuZXIpIHsKKyAgICAgICAgICAgIFNvY2tldDo6Y2xvc2UoY29ubmVj
dGlvbi0+c29ja2V0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0pOworfQorCiBPcHRpb25hbDx1aW50MTZfdD4gUmVt
b3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmdldFBvcnQoQ29ubmVjdGlvbklEIGlkKSBjb25z
dAogewogICAgIExvY2tIb2xkZXIgbG9jayhtX2Nvbm5lY3Rpb25zTG9jayk7CisgICAgaWYgKGNv
bnN0IGF1dG8mIGNvbm5lY3Rpb24gPSBtX2xpc3RlbmVycy5nZXQoaWQpKQorICAgICAgICByZXR1
cm4gU29ja2V0OjpnZXRQb3J0KGNvbm5lY3Rpb24tPnNvY2tldCk7CiAgICAgaWYgKGNvbnN0IGF1
dG8mIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb25zLmdldChpZCkpCiAgICAgICAgIHJldHVybiBT
b2NrZXQ6OmdldFBvcnQoY29ubmVjdGlvbi0+c29ja2V0KTsKIApAQCAtMjU0LDE3ICszMTcsMTgg
QEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6c2VuZChDb25uZWN0aW9uSUQg
aWQsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHMKIAogdm9pZCBSZW1vdGVJbnNwZWN0b3JTb2NrZXRF
bmRwb2ludDo6YWNjZXB0SW5ldFNvY2tldElmRW5hYmxlZChDb25uZWN0aW9uSUQgaWQpCiB7Ci0g
ICAgaWYgKCFpc0xpc3RlbmluZyhpZCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoaXNM
aXN0ZW5pbmcoaWQpKTsKIAogICAgIExvY2tIb2xkZXIgbG9jayhtX2Nvbm5lY3Rpb25zTG9jayk7
Ci0gICAgaWYgKGNvbnN0IGF1dG8mIGNvbm5lY3Rpb24gPSBtX2Nvbm5lY3Rpb25zLmdldChpZCkp
IHsKKyAgICBpZiAoY29uc3QgYXV0byYgY29ubmVjdGlvbiA9IG1fbGlzdGVuZXJzLmdldChpZCkp
IHsKICAgICAgICAgaWYgKGF1dG8gc29ja2V0ID0gU29ja2V0OjphY2NlcHQoY29ubmVjdGlvbi0+
c29ja2V0KSkgewogICAgICAgICAgICAgLy8gTmVlZCB0byB1bmxvY2sgYmVmb3JlIGNhbGxpbmcg
Y3JlYXRlQ2xpZW50IGFzIGl0IGFsc28gYXR0ZW1wdHMgdG8gbG9jay4KICAgICAgICAgICAgIGxv
Y2sudW5sb2NrRWFybHkoKTsKICAgICAgICAgICAgIGlmIChhdXRvIG5ld0lEID0gY3JlYXRlQ2xp
ZW50KCpzb2NrZXQsIGNvbm5lY3Rpb24tPmNsaWVudCkpIHsKLSAgICAgICAgICAgICAgICBjb25u
ZWN0aW9uLT5jbGllbnQuZGlkQWNjZXB0KG5ld0lELnZhbHVlKCksIGlkLCBTb2NrZXQ6OkRvbWFp
bjo6TmV0d29yayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlm
IChjb25uZWN0aW9uLT5saXN0ZW5lci0+ZGlkQWNjZXB0KG5ld0lELnZhbHVlKCksIGNvbm5lY3Rp
b24tPmlkLCBTb2NrZXQ6OkRvbWFpbjo6TmV0d29yaykpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgICAgIG1fY29ubmVjdGlvbnMucmVtb3ZlKGlkKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgU29ja2V0OjpjbG9zZSgqc29ja2V0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JTb2NrZXRFbmRwb2ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmgKaW5kZXggZjE4
NjI0NGU1YzYuLjNlNDlhNTVlOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuaApAQCAtNDQsNyArNDQsMTIgQEAgcHVibGljOgogICAg
IGNsYXNzIENsaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZShDb25uZWN0aW9uSUQsIFZlY3Rvcjx1aW50OF90PiYmKSA9IDA7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRBY2NlcHQoQ29ubmVjdGlvbklEIGFjY2VwdGVkSUQsIENvbm5lY3Rpb25JRCBs
aXN0ZW5lcklELCBTb2NrZXQ6OkRvbWFpbikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2xvc2UoQ29ubmVjdGlvbklEKSA9IDA7CisgICAgfTsKKworICAgIGNsYXNzIExpc3RlbmVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCBkaWRBY2NlcHQoQ29ubmVjdGlvbklE
IGFjY2VwdGVkSUQsIENvbm5lY3Rpb25JRCBsaXN0ZW5lcklELCBTb2NrZXQ6OkRvbWFpbikgPSAw
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSA9IDA7CiAgICAg
fTsKIApAQCAtNTQsMTIgKzU5LDE0IEBAIHB1YmxpYzoKICAgICB+UmVtb3RlSW5zcGVjdG9yU29j
a2V0RW5kcG9pbnQoKTsKIAogICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gY29ubmVjdEluZXQo
Y29uc3QgY2hhciogc2VydmVyQWRkciwgdWludDE2X3Qgc2VydmVyUG9ydCwgQ2xpZW50Jik7Ci0g
ICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBsaXN0ZW5JbmV0KGNvbnN0IGNoYXIqIGFkZHJlc3Ms
IHVpbnQxNl90IHBvcnQsIENsaWVudCYpOworICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gbGlz
dGVuSW5ldChjb25zdCBjaGFyKiBhZGRyZXNzLCB1aW50MTZfdCBwb3J0LCBMaXN0ZW5lciYsIENs
aWVudCYpOwogICAgIHZvaWQgaW52YWxpZGF0ZUNsaWVudChDbGllbnQmKTsKKyAgICB2b2lkIGlu
dmFsaWRhdGVMaXN0ZW5lcihMaXN0ZW5lciYpOwogCiAgICAgdm9pZCBzZW5kKENvbm5lY3Rpb25J
RCwgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90KTsKIAogICAgIE9wdGlvbmFsPENvbm5lY3Rp
b25JRD4gY3JlYXRlQ2xpZW50KFBsYXRmb3JtU29ja2V0VHlwZSwgQ2xpZW50Jik7CisgICAgT3B0
aW9uYWw8Q29ubmVjdGlvbklEPiBjcmVhdGVMaXN0ZW5lcihQbGF0Zm9ybVNvY2tldFR5cGUsIExp
c3RlbmVyJiwgQ2xpZW50Jik7CiAKICAgICBPcHRpb25hbDx1aW50MTZfdD4gZ2V0UG9ydChDb25u
ZWN0aW9uSUQpIGNvbnN0OwogCkBAIC03Niw4ICs4MywxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQgeyBJTlZBTElEX1NPQ0tFVF9WQUxVRSB9OwogICAg
ICAgICBQb2xsaW5nRGVzY3JpcHRvciBwb2xsOwogICAgICAgICBDbGllbnQmIGNsaWVudDsKKyAg
ICAgICAgTGlzdGVuZXIqIGxpc3RlbmVyIHsgfTsKICAgICB9OwogCisgICAgQ29ubmVjdGlvbklE
IGdlbmVyYXRlQ29ubmVjdGlvbklEKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbm5lY3Rpb24+
IG1ha2VDb25uZWN0aW9uKFBsYXRmb3JtU29ja2V0VHlwZSwgQ2xpZW50Jik7CisKICAgICB2b2lk
IHJlY3ZJZkVuYWJsZWQoQ29ubmVjdGlvbklEKTsKICAgICB2b2lkIHNlbmRJZkVuYWJsZWQoQ29u
bmVjdGlvbklEKTsKICAgICB2b2lkIHdvcmtlclRocmVhZCgpOwpAQCAtODcsNiArOTgsNyBAQCBw
cm90ZWN0ZWQ6CiAKICAgICBtdXRhYmxlIExvY2sgbV9jb25uZWN0aW9uc0xvY2s7CiAgICAgSGFz
aE1hcDxDb25uZWN0aW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxDb25uZWN0aW9uPj4gbV9jb25uZWN0
aW9uczsKKyAgICBIYXNoTWFwPENvbm5lY3Rpb25JRCwgc3RkOjp1bmlxdWVfcHRyPENvbm5lY3Rp
b24+PiBtX2xpc3RlbmVyczsKIAogICAgIFBsYXRmb3JtU29ja2V0VHlwZSBtX3dha2V1cFNlbmRT
b2NrZXQgeyBJTlZBTElEX1NPQ0tFVF9WQUxVRSB9OwogICAgIFBsYXRmb3JtU29ja2V0VHlwZSBt
X3dha2V1cFJlY2VpdmVTb2NrZXQgeyBJTlZBTElEX1NPQ0tFVF9WQUxVRSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCBiMjhmY2I2YmIwOS4uZWRjNjczZWZkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTktMTAtMDkgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgorCisgICAg
ICAgIFtXaW5DYWlyb10gTW92ZSByZW1vdGUgY29tbXVuaWNhdGlvbiBoYW5kbGluZyBmcm9tIFJl
bW90ZUluc3BlY3RvclNlcnZlciB0byBSZW1vdGVJbnNwZWN0b3IuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI3NjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgZGVsZXRlZCBtZXRob2QgaW52
b2NhdGlvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6aW5pdGlhbGl6ZVJlbW90ZUluc3BlY3RvclNlcnZlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorCiAy
MDE5LTEwLTA5ICB5b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgdGVzdFJ1bm5lci5zZXRXZWJSVENVbmlmaWVkUGxhbkVuYWJsZWQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1Bvb2xXaW4uY3BwCmluZGV4IDdmYTA4
MGI0ZjYxLi4xOGY5ZTkzOTMyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
d2luL1dlYlByb2Nlc3NQb29sV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93
aW4vV2ViUHJvY2Vzc1Bvb2xXaW4uY3BwCkBAIC02NSw3ICs2NSw3IEBAIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIoU3RyaW5nVmlldyBhZGRyZXNzKQogICAgIGlm
ICghcG9ydCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0
b3JTZXJ2ZXI6OnNpbmdsZXRvbigpLnNldEJhY2tlbmRDb21tYW5kc1BhdGgoYmFja2VuZENvbW1h
bmRzUGF0aCgpKTsKKyAgICBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCku
c2V0QmFja2VuZENvbW1hbmRzUGF0aChiYWNrZW5kQ29tbWFuZHNQYXRoKCkpOwogICAgIEluc3Bl
Y3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzaW5nbGV0b24oKS5zdGFydChob3N0LnV0Zjgo
KS5kYXRhKCksIHBvcnQudmFsdWUoKSk7CiB9CiAjZW5kaWYKQEAgLTczLDExICs3Myw4IEBAIHN0
YXRpYyB2b2lkIGluaXRpYWxpemVSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIoU3RyaW5nVmlldyBhZGRy
ZXNzKQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsKICNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBpZiAoY29uc3QgY2hhciogYWRkcmVzcyA9IGdl
dGVudigiV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIiKSkgeworICAgIGlmIChjb25zdCBjaGFyKiBh
ZGRyZXNzID0gZ2V0ZW52KCJXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIpKQogICAgICAgICBpbml0
aWFsaXplUmVtb3RlSW5zcGVjdG9yU2VydmVyKGFkZHJlc3MpOwotICAgICAgICBhdXRvIHBvcnQg
PSBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2luZ2xldG9uKCkubGlzdGVuRm9y
VGFyZ2V0cygpOwotICAgICAgICBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2V0U2VydmVy
UG9ydChwb3J0LnZhbHVlT3IoMCkpOwotICAgIH0KICNlbmRpZgogfQogCg==
</data>
<flag name="review"
          id="396324"
          type_id="1"
          status="+"
          setter="ross.kirsling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380676</attachid>
            <date>2019-10-10 13:33:44 -0700</date>
            <delta_ts>2019-10-10 14:20:19 -0700</delta_ts>
            <desc>PATCH</desc>
            <filename>bug-202763.diff</filename>
            <type>text/plain</type>
            <size>42113</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGJmZTMxOWY2ZDQ1Li4wMDMxZmFhOTc3YiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTktMTAtMDkgIEJhc3Vr
ZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWlyb10g
TW92ZSByZW1vdGUgY29tbXVuaWNhdGlvbiBoYW5kbGluZyBmcm9tIFJlbW90ZUluc3BlY3RvclNl
cnZlciB0byBSZW1vdGVJbnNwZWN0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDI3NjMKKworICAgICAgICBSZXZpZXdlZCBieSBSb3NzIEtpcnNs
aW5nLgorCisgICAgICAgIEJlY2F1c2UgUmVtb3RlSW5zcGVjdG9yIG5vdyBleGlzdHMgaW4gVUlQ
cm9jZXNzLCB0aGUgb2xkIGltcGxlbWVudGF0aW9uIHdoaWNoIGNvbW11bmljYXRlIHdpdGggUmVt
b3RlSW5zcGVjdG9yCisgICAgICAgIGluIFdlYlByb2Nlc3MgYW5kIFJlbW90ZUluc3BlY3RvclNl
cnZlciBpbiBVSVByb2Nlc3Mgd2FzIG1lYW5pbmdsZXNzIG9yIGV2ZW4gYmFkLiBSZW1vdmUgdGhp
cyBjb21wbGV4CisgICAgICAgIGltcGxlbWVudGF0aW9uIGFuZCBtb3ZlIGNvbW11bmljYXRpb24g
aGFuZGxpbmcgZnJvbSBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIgdG8gUmVtb3RlSW5zcGVjdG9yIGFu
ZCBjb21tdW5pY2F0ZQorICAgICAgICBlYWNoIG90aGVyIGRpcmVjdGx5LgorCisgICAgICAgICog
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
cmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xp
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9y
U2VydmVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU2VydmVyOjp+
UmVtb3RlSW5zcGVjdG9yU2VydmVyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVj
dG9yU2VydmVyOjpzdGFydCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNl
cnZlcjo6ZGlkQWNjZXB0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JTZXJ2ZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JTb2NrZXQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNw
ZWN0b3I6OmNvbm5lY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OmRp
ZENsb3NlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzZW5kV2ViSW5z
cGVjdG9yRXZlbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnN0YXJ0
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzdG9wSW50ZXJuYWwpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnB1c2hMaXN0aW5nc05vdyk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdzU29vbik6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2VuZE1lc3NhZ2VUb1JlbW90ZSk6
CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2V0dXApOgorICAgICAgICAo
SW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9UYXJnZXQpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OmJhY2tlbmRDb21tYW5kcyBjb25zdCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6ZGlzcGF0Y2hNYXApOgorICAgICAg
ICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldHVwSW5zcGVjdG9yQ2xpZW50KToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzZXR1cFRhcmdldCk6CisgICAgICAg
IChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6ZnJvbnRlbmREaWRDbG9zZSk6CisgICAgICAg
IChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBv
aW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9p
bnQ6On5SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludCk6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpsaXN0ZW5JbmV0KToKKyAgICAgICAgKElu
c3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmlzTGlzdGVuaW5nKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OndvcmtlclRo
cmVhZCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50
OjpnZW5lcmF0ZUNvbm5lY3Rpb25JRCk6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3RvclNvY2tldEVuZHBvaW50OjptYWtlQ29ubmVjdGlvbik6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpjcmVhdGVDbGllbnQpOgorICAgICAgICAo
SW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6Y3JlYXRlTGlzdGVuZXIp
OgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6aW52
YWxpZGF0ZUxpc3RlbmVyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29j
a2V0RW5kcG9pbnQ6OmdldFBvcnQgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJ
bnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6YWNjZXB0SW5ldFNvY2tldElmRW5hYmxlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9p
bnQuaDoKKwogMjAxOS0xMC0wOSAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGZvciBub24tdW5pZmllZCBi
dWlsZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90
ZS9SZW1vdGVJbnNwZWN0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVt
b3RlL1JlbW90ZUluc3BlY3Rvci5oCmluZGV4IDIwN2MxODY2NGI0Li5mYjA5Mzc5ZGU2NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5z
cGVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVt
b3RlSW5zcGVjdG9yLmgKQEAgLTU3LDcgKzU3LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dEQnVzSW50
ZXJmYWNlVlRhYmxlIEdEQnVzSW50ZXJmYWNlVlRhYmxlOwogI2luY2x1ZGUgIlJlbW90ZUNvbm5l
Y3Rpb25Ub1RhcmdldC5oIgogI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGll
bnQuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
QEAgLTE1MCw4ICsxNDksMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1Rhcmdl
dChUYXJnZXRJRCwgY29uc3QgY2hhciogbWVzc2FnZSk7CiAjZW5kaWYKICNpZiBVU0UoSU5TUEVD
VE9SX1NPQ0tFVF9TRVJWRVIpCi0gICAgc3RhdGljIHZvaWQgc2V0Q29ubmVjdGlvbklkZW50aWZp
ZXIoUGxhdGZvcm1Tb2NrZXRUeXBlKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTZXJ2ZXJQb3J0KHVp
bnQxNl90KTsKKyAgICB2b2lkIHJlcXVlc3RBdXRvbWF0aW9uU2Vzc2lvbihTdHJpbmcmJiBzZXNz
aW9uSUQsIGNvbnN0IENsaWVudDo6U2Vzc2lvbkNhcGFiaWxpdGllcyYpOworCisgICAgYm9vbCBp
c0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9jbGllbnRDb25uZWN0aW9uOyB9CisgICAg
dm9pZCBjb25uZWN0KENvbm5lY3Rpb25JRCk7CisKKyAgICB2b2lkIHNldEJhY2tlbmRDb21tYW5k
c1BhdGgoY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNQYXRoKSB7IG1fYmFja2VuZENvbW1h
bmRzUGF0aCA9IGJhY2tlbmRDb21tYW5kc1BhdGg7IH0KICNlbmRpZgogCiBwcml2YXRlOgpAQCAt
MjE0LDEwICsyMTcsMTIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2VuZFdlYkluc3BlY3RvckV2
ZW50KGNvbnN0IFN0cmluZyYpOwogCi0gICAgdm9pZCByZWNlaXZlZEdldFRhcmdldExpc3RNZXNz
YWdlKGNvbnN0IEV2ZW50Jik7Ci0gICAgdm9pZCByZWNlaXZlZFNldHVwTWVzc2FnZShjb25zdCBF
dmVudCYpOwotICAgIHZvaWQgcmVjZWl2ZWREYXRhTWVzc2FnZShjb25zdCBFdmVudCYpOwotICAg
IHZvaWQgcmVjZWl2ZWRDbG9zZU1lc3NhZ2UoY29uc3QgRXZlbnQmKTsKKyAgICB2b2lkIHNldHVw
SW5zcGVjdG9yQ2xpZW50KGNvbnN0IEV2ZW50Jik7CisgICAgdm9pZCBzZXR1cFRhcmdldChjb25z
dCBFdmVudCYpOworICAgIHZvaWQgZnJvbnRlbmREaWRDbG9zZShjb25zdCBFdmVudCYpOworICAg
IHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgRXZlbnQmKTsKKworICAgIFN0cmluZyBi
YWNrZW5kQ29tbWFuZHMoKSBjb25zdDsKICNlbmRpZgogICAgIHN0YXRpYyBib29sIHN0YXJ0RW5h
YmxlZDsKIApAQCAtMjQwLDkgKzI0NSwxMSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBVU0Uo
SU5TUEVDVE9SX1NPQ0tFVF9TRVJWRVIpCi0gICAgc3RhdGljIFBsYXRmb3JtU29ja2V0VHlwZSBz
X2Nvbm5lY3Rpb25JZGVudGlmaWVyOwotICAgIHN0YXRpYyB1aW50MTZfdCBzX3NlcnZlclBvcnQ7
Ci0gICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBtX2NsaWVudElEOworICAgIC8vIENvbm5lY3Rp
b24gZnJvbSBSZW1vdGVJbnNwZWN0b3JDbGllbnQgb3IgV2ViRHJpdmVyLgorICAgIE9wdGlvbmFs
PENvbm5lY3Rpb25JRD4gbV9jbGllbnRDb25uZWN0aW9uOworICAgIGJvb2wgbV9yZWFkeVRvUHVz
aExpc3RpbmdzIHsgZmFsc2UgfTsKKworICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1BhdGg7
CiAjZW5kaWYKIAogICAgIFJlbW90ZUluc3BlY3Rvcjo6Q2xpZW50KiBtX2NsaWVudCB7IG51bGxw
dHIgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3Rl
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0
aW9uQ2xpZW50LmNwcAppbmRleCA1N2U5MGE0Zjc5ZC4uMDY1MmUxMjcwOGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNw
ZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAK
QEAgLTQ2LDEyICs0Niw2IEBAIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVjdG9y
Q29ubmVjdGlvbkNsaWVudDo6Y29ubmVjdEluZXQoY29uc3QgY2hhcioKICAgICByZXR1cm4gZW5k
cG9pbnQuY29ubmVjdEluZXQoc2VydmVyQWRkciwgc2VydmVyUG9ydCwgKnRoaXMpOwogfQogCi1P
cHRpb25hbDxDb25uZWN0aW9uSUQ+IFJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQ6Omxp
c3RlbkluZXQoY29uc3QgY2hhciogYWRkcmVzcywgdWludDE2X3QgcG9ydCkKLXsKLSAgICBhdXRv
JiBlbmRwb2ludCA9IEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OnNp
bmdsZXRvbigpOwotICAgIHJldHVybiBlbmRwb2ludC5saXN0ZW5JbmV0KGFkZHJlc3MsIHBvcnQs
ICp0aGlzKTsKLX0KLQogT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1vdGVJbnNwZWN0b3JDb25u
ZWN0aW9uQ2xpZW50OjpjcmVhdGVDbGllbnQoUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCkKIHsK
ICAgICBhdXRvJiBlbmRwb2ludCA9IEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5k
cG9pbnQ6OnNpbmdsZXRvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNw
ZWN0b3JDb25uZWN0aW9uQ2xpZW50LmgKaW5kZXggMzAzNjU5ZTdmMTkuLjRiZDE1OGQzMTcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xp
ZW50LmgKQEAgLTQzLDEyICs0MywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+UmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbkNsaWVudCgpOwogCiAgICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBj
b25uZWN0SW5ldChjb25zdCBjaGFyKiBzZXJ2ZXJBZGRyLCB1aW50MTZfdCBzZXJ2ZXJQb3J0KTsK
LSAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IGxpc3RlbkluZXQoY29uc3QgY2hhciogYWRkcmVz
cywgdWludDE2X3QgcG9ydCk7CiAgICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBjcmVhdGVDbGll
bnQoUGxhdGZvcm1Tb2NrZXRUeXBlKTsKICAgICB2b2lkIHNlbmQoQ29ubmVjdGlvbklELCBjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QpOwogCiAgICAgdm9pZCBkaWRSZWNlaXZlKENvbm5lY3Rp
b25JRCwgVmVjdG9yPHVpbnQ4X3Q+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkQWNjZXB0KENv
bm5lY3Rpb25JRCwgQ29ubmVjdGlvbklELCBTb2NrZXQ6OkRvbWFpbikgb3ZlcnJpZGUgeyB9CiAK
ICAgICBzdHJ1Y3QgRXZlbnQgewogICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JTZXJ2ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1v
dGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNlcnZlci5jcHAKaW5kZXggZmZiYzJiZWIzMDIuLmYz
YTBjNTQyOWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Jl
bW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmNw
cApAQCAtMjksMjUxICsyOSw0MSBAQAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQogCiAj
aW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yTWVzc2FnZVBhcnNlci5oIgotI2luY2x1ZGUgPHd0Zi9G
aWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCi1PcHRpb25hbDxQbGF0Zm9ybVNvY2tldFR5cGU+IFJlbW90ZUluc3BlY3RvclNl
cnZlcjo6Y29ubmVjdCgpCi17Ci0gICAgaWYgKGF1dG8gc29ja2V0cyA9IFNvY2tldDo6Y3JlYXRl
UGFpcigpKSB7Ci0gICAgICAgIGlmIChhdXRvIGlkID0gY3JlYXRlQ2xpZW50KHNvY2tldHMtPmF0
KDApKSkgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsK
LSAgICAgICAgICAgIG1faW5zcGVjdG9yQ29ubmVjdGlvbnMuYXBwZW5kKGlkLnZhbHVlKCkpOwot
Ci0gICAgICAgICAgICByZXR1cm4gc29ja2V0cy0+YXQoMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1PcHRpb25hbDx1aW50MTZfdD4gUmVtb3Rl
SW5zcGVjdG9yU2VydmVyOjpsaXN0ZW5Gb3JUYXJnZXRzKCkKLXsKLSAgICBpZiAobV9pbnNwZWN0
b3JMaXN0ZW5lcikgewotICAgICAgICBMT0dfRVJST1IoIkluc3BlY3RvciBzZXJ2ZXIgaXMgYWxy
ZWFkeSBsaXN0ZW5pbmcgZm9yIHRhcmdldHMuIik7Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gY29ubmVjdGlvbiA9IGxpc3RlbkluZXQoIjEyNy4w
LjAuMSIsIDApKSB7Ci0gICAgICAgIG1faW5zcGVjdG9yTGlzdGVuZXIgPSBjb25uZWN0aW9uOwot
Ci0gICAgICAgIGF1dG8mIGVuZHBvaW50ID0gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6
OnNpbmdsZXRvbigpOwotICAgICAgICByZXR1cm4gZW5kcG9pbnQuZ2V0UG9ydCgqY29ubmVjdGlv
bik7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBSZW1vdGVJ
bnNwZWN0b3JTZXJ2ZXI6OmRpZEFjY2VwdChDb25uZWN0aW9uSUQgYWNjZXB0ZWRJRCwgQ29ubmVj
dGlvbklEIGxpc3RlbmVySUQsIFNvY2tldDo6RG9tYWluIHR5cGUpCi17Ci0gICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAodHlwZSA9PSBTb2NrZXQ6OkRvbWFpbjo6TG9jYWwg
fHwgKG1faW5zcGVjdG9yTGlzdGVuZXIgJiYgbGlzdGVuZXJJRCA9PSAqbV9pbnNwZWN0b3JMaXN0
ZW5lcikpIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsKLSAg
ICAgICAgbV9pbnNwZWN0b3JDb25uZWN0aW9ucy5hcHBlbmQoYWNjZXB0ZWRJRCk7Ci0gICAgfSBl
bHNlIGlmICh0eXBlID09IFNvY2tldDo6RG9tYWluOjpOZXR3b3JrKSB7Ci0gICAgICAgIGlmICht
X2NsaWVudENvbm5lY3Rpb24pIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW5zcGVjdG9yIHNl
cnZlciBjYW4gYWNjZXB0IG9ubHkgMSBjbGllbnQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBtX2NsaWVudENvbm5lY3Rpb24gPSBhY2NlcHRlZElEOwotICAgIH0K
LX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmRpZENsb3NlKENvbm5lY3Rpb25JRCBp
ZCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChpZCA9PSBtX2Ns
aWVudENvbm5lY3Rpb24pIHsKLSAgICAgICAgLy8gQ29ubmVjdGlvbiBmcm9tIHRoZSByZW1vdGUg
Y2xpZW50IGNsb3NlZC4KLSAgICAgICAgY2xpZW50Q29ubmVjdGlvbkNsb3NlZCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ29ubmVjdGlvbiBmcm9tIFdlYlByb2Nlc3MgY2xv
c2VkLgotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgaWRdIHsKLSAgICAgICAg
Y29ubmVjdGlvbkNsb3NlZChpZCk7Ci0gICAgfSk7Ci19Ci0KLUhhc2hNYXA8U3RyaW5nLCBSZW1v
dGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpDYWxsSGFuZGxlcj4mIFJlbW90ZUluc3BlY3Rv
clNlcnZlcjo6ZGlzcGF0Y2hNYXAoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNo
TWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+PiBkaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBD
YWxsSGFuZGxlcj4oewotICAgICAgICB7ICJTZXRUYXJnZXRMaXN0Il9zLCBzdGF0aWNfY2FzdDxD
YWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2V0VGFyZ2V0TGlzdCkgfSwKLSAg
ICAgICAgeyAiU2V0dXBJbnNwZWN0b3JDbGllbnQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVy
PigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cEluc3BlY3RvckNsaWVudCkgfSwKLSAgICAg
ICAgeyAiU2V0dXAiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9y
U2VydmVyOjpzZXR1cCkgfSwKLSAgICAgICAgeyAiRnJvbnRlbmREaWRDbG9zZSJfcywgc3RhdGlj
X2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OmNsb3NlKSB9LAotICAg
ICAgICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVy
PigmUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpIH0sCi0gICAg
ICAgIHsgIlNlbmRNZXNzYWdlVG9CYWNrZW5kIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4o
JlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQpIH0sCi0gICAgfSk7
Ci0KLSAgICByZXR1cm4gZGlzcGF0Y2hNYXA7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2Vy
dmVyOjpzZW5kV2ViSW5zcGVjdG9yRXZlbnQoQ29ubmVjdGlvbklEIGlkLCBjb25zdCBTdHJpbmcm
IGV2ZW50KQotewotICAgIGNvbnN0IENTdHJpbmcgbWVzc2FnZSA9IGV2ZW50LnV0ZjgoKTsKLSAg
ICBzZW5kKGlkLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtZXNzYWdlLmRhdGEo
KSksIG1lc3NhZ2UubGVuZ3RoKCkpOwotfQotCiBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXImIFJlbW90
ZUluc3BlY3RvclNlcnZlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmVtb3RlSW5zcGVjdG9yU2VydmVyPiBzZXJ2ZXI7CiAgICAgcmV0dXJuIHNlcnZlcjsKIH0K
IAotYm9vbCBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnN0YXJ0KGNvbnN0IGNoYXIqIGFkZHJlc3Ms
IHVpbnQxNl90IHBvcnQpCi17Ci0gICAgbV9zZXJ2ZXIgPSBsaXN0ZW5JbmV0KGFkZHJlc3MsIHBv
cnQpOwotICAgIHJldHVybiBpc1J1bm5pbmcoKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JT
ZXJ2ZXI6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQorUmVtb3RlSW5zcGVjdG9y
U2VydmVyOjp+UmVtb3RlSW5zcGVjdG9yU2VydmVyKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotCi0gICAgaWYgKCFtX2NsaWVudENvbm5lY3Rpb24gfHwgIWV2ZW50Lm1lc3NhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gdGFyZ2V0TGlzdEV2ZW50ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICB0YXJnZXRMaXN0RXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3Ms
ICJTZXRUYXJnZXRMaXN0Il9zKTsKLSAgICB0YXJnZXRMaXN0RXZlbnQtPnNldEludGVnZXIoImNv
bm5lY3Rpb25JRCJfcywgZXZlbnQuY2xpZW50SUQpOwotICAgIHRhcmdldExpc3RFdmVudC0+c2V0
U3RyaW5nKCJtZXNzYWdlIl9zLCBldmVudC5tZXNzYWdlLnZhbHVlKCkpOwotICAgIHNlbmRXZWJJ
bnNwZWN0b3JFdmVudChtX2NsaWVudENvbm5lY3Rpb24udmFsdWUoKSwgdGFyZ2V0TGlzdEV2ZW50
LT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byYgZW5kcG9pbnQgPSBJbnNwZWN0b3I6OlJlbW90
ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpzaW5nbGV0b24oKTsKKyAgICBlbmRwb2ludC5pbnZh
bGlkYXRlTGlzdGVuZXIoKnRoaXMpOwogfQogCi12b2lkIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6
c2V0dXBJbnNwZWN0b3JDbGllbnQoY29uc3QgRXZlbnQmKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICBhdXRvIGJhY2tlbmRDb21tYW5kc0V2ZW50ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBiYWNrZW5kQ29tbWFuZHNFdmVudC0+c2V0U3RyaW5nKCJldmVudCJf
cywgIkJhY2tlbmRDb21tYW5kcyJfcyk7Ci0gICAgYmFja2VuZENvbW1hbmRzRXZlbnQtPnNldFN0
cmluZygibWVzc2FnZSJfcywgYmFja2VuZENvbW1hbmRzKCkpOwotICAgIHNlbmRXZWJJbnNwZWN0
b3JFdmVudChtX2NsaWVudENvbm5lY3Rpb24udmFsdWUoKSwgYmFja2VuZENvbW1hbmRzRXZlbnQt
PnRvSlNPTlN0cmluZygpKTsKLQotICAgIGF1dG8gc2V0dXBFdmVudCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgc2V0dXBFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIkdldFRhcmdl
dExpc3QiX3MpOwotCi0gICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsKLSAg
ICBmb3IgKGF1dG8gY29ubmVjdGlvbiA6IG1faW5zcGVjdG9yQ29ubmVjdGlvbnMpCi0gICAgICAg
IHNlbmRXZWJJbnNwZWN0b3JFdmVudChjb25uZWN0aW9uLCBzZXR1cEV2ZW50LT50b0pTT05TdHJp
bmcoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZXR1cChjb25zdCBFdmVu
dCYgZXZlbnQpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghZXZl
bnQudGFyZ2V0SUQgfHwgIWV2ZW50LmNvbm5lY3Rpb25JRCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9pbnNwZWN0aW9uVGFyZ2V0cy5hZGQoc3RkOjptYWtlX3BhaXIoZXZlbnQuY29ubmVjdGlv
bklELnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpKTsKLQotICAgIGF1dG8gc2V0dXBF
dmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgc2V0dXBFdmVudC0+c2V0U3RyaW5n
KCJldmVudCJfcywgIlNldHVwIl9zKTsKLSAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJn
ZXRJRCJfcywgZXZlbnQudGFyZ2V0SUQudmFsdWUoKSk7Ci0gICAgc2VuZFdlYkluc3BlY3RvckV2
ZW50KGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgpLCBzZXR1cEV2ZW50LT50b0pTT05TdHJpbmco
KSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpzZW5kQ2xvc2VFdmVudChDb25u
ZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgYXV0byBjbG9zZUV2ZW50ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBjbG9zZUV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiRnJvbnRlbmRE
aWRDbG9zZSJfcyk7Ci0gICAgY2xvc2VFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRh
cmdldElEKTsKLSAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29ubmVjdGlvbklELCBjbG9zZUV2
ZW50LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpj
bG9zZShjb25zdCBFdmVudCYgZXZlbnQpCitib29sIFJlbW90ZUluc3BlY3RvclNlcnZlcjo6c3Rh
cnQoY29uc3QgY2hhciogYWRkcmVzcywgdWludDE2X3QgcG9ydCkKIHsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgc2VuZENsb3NlRXZlbnQoZXZlbnQuY29ubmVjdGlvbklELnZh
bHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpOwotICAgIG1faW5zcGVjdGlvblRhcmdldHMu
cmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgpLCBldmVudC50
YXJnZXRJRC52YWx1ZSgpKSk7CisgICAgYXV0byYgZW5kcG9pbnQgPSBJbnNwZWN0b3I6OlJlbW90
ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpzaW5nbGV0b24oKTsKKyAgICBtX3NlcnZlciA9IGVu
ZHBvaW50Lmxpc3RlbkluZXQoYWRkcmVzcywgcG9ydCwgKnRoaXMsIFJlbW90ZUluc3BlY3Rvcjo6
c2luZ2xldG9uKCkpOworICAgIHJldHVybiBpc1J1bm5pbmcoKTsKIH0KIAotdm9pZCBSZW1vdGVJ
bnNwZWN0b3JTZXJ2ZXI6OmNsaWVudENvbm5lY3Rpb25DbG9zZWQoKQorYm9vbCBSZW1vdGVJbnNw
ZWN0b3JTZXJ2ZXI6OmRpZEFjY2VwdChDb25uZWN0aW9uSUQgYWNjZXB0ZWRJRCwgQ29ubmVjdGlv
bklELCBTb2NrZXQ6OkRvbWFpbikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAot
ICAgIG1fY2xpZW50Q29ubmVjdGlvbiA9IFdURjo6bnVsbG9wdDsKLQotICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbdGhpc10gewotICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25uZWN0
aW9uc0xvY2spOwotICAgICAgICBmb3IgKGF1dG8gY29ubmVjdGlvblRhcmdldFBhaXIgOiBtX2lu
c3BlY3Rpb25UYXJnZXRzKQotICAgICAgICAgICAgc2VuZENsb3NlRXZlbnQoY29ubmVjdGlvblRh
cmdldFBhaXIuZmlyc3QsIGNvbm5lY3Rpb25UYXJnZXRQYWlyLnNlY29uZCk7Ci0gICAgICAgIG1f
aW5zcGVjdGlvblRhcmdldHMuY2xlYXIoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZW1vdGVJbnNw
ZWN0b3JTZXJ2ZXI6OmNvbm5lY3Rpb25DbG9zZWQoQ29ubmVjdGlvbklEIGNsaWVudElEKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25u
ZWN0aW9uc0xvY2spOwotICAgIGlmIChtX2luc3BlY3RvckNvbm5lY3Rpb25zLnJlbW92ZUZpcnN0
KGNsaWVudElEKSAmJiBtX2NsaWVudENvbm5lY3Rpb24pIHsKLSAgICAgICAgYXV0byBjbG9zZWRF
dmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIGNsb3NlZEV2ZW50LT5zZXRT
dHJpbmcoImV2ZW50Il9zLCAiU2V0VGFyZ2V0TGlzdCJfcyk7Ci0gICAgICAgIGNsb3NlZEV2ZW50
LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNsaWVudElEKTsKLSAgICAgICAgYXV0byB0
YXJnZXRMaXN0ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwotICAgICAgICBjbG9zZWRFdmVudC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB0YXJnZXRMaXN0LT50b0pTT05TdHJpbmcoKSk7Ci0gICAg
ICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChtX2NsaWVudENvbm5lY3Rpb24udmFsdWUoKSwgY2xv
c2VkRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVj
dG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBFdmVudCYgZXZlbnQpCi17Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklE
IHx8ICFldmVudC50YXJnZXRJRCB8fCAhZXZlbnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byBzZW5kRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHNlbmRF
dmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNlbmRNZXNzYWdlVG9UYXJnZXQiX3MpOwotICAg
IHNlbmRFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIGV2ZW50LnRhcmdldElELnZhbHVl
KCkpOwotICAgIHNlbmRFdmVudC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBldmVudC5tZXNzYWdl
LnZhbHVlKCkpOwotICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChldmVudC5jb25uZWN0aW9uSUQu
dmFsdWUoKSwgc2VuZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5z
cGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQmIGV2ZW50KQot
ewotICAgIGlmICghbV9jbGllbnRDb25uZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFldmVudC50YXJnZXRJRCB8fCAhZXZl
bnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBzZW5kRXZlbnQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHNlbmRFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywg
IlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcyk7Ci0gICAgc2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJ0
YXJnZXRJRCJfcywgZXZlbnQudGFyZ2V0SUQudmFsdWUoKSk7Ci0gICAgc2VuZEV2ZW50LT5zZXRJ
bnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGV2ZW50LmNsaWVudElEKTsKLSAgICBzZW5kRXZlbnQt
PnNldFN0cmluZygibWVzc2FnZSJfcywgZXZlbnQubWVzc2FnZS52YWx1ZSgpKTsKLSAgICBzZW5k
V2ViSW5zcGVjdG9yRXZlbnQobV9jbGllbnRDb25uZWN0aW9uLnZhbHVlKCksIHNlbmRFdmVudC0+
dG9KU09OU3RyaW5nKCkpOwotfQotCi1TdHJpbmcgUmVtb3RlSW5zcGVjdG9yU2VydmVyOjpiYWNr
ZW5kQ29tbWFuZHMoKSBjb25zdAotewotICAgIGlmIChtX2JhY2tlbmRDb21tYW5kc1BhdGguaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byBoYW5kbGUgPSBGaWxlU3lz
dGVtOjpvcGVuRmlsZShtX2JhY2tlbmRDb21tYW5kc1BhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVu
TW9kZTo6UmVhZCk7Ci0gICAgaWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlkKGhhbmRsZSkp
Ci0gICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byYgaW5zcGVjdG9yID0gUmVtb3RlSW5zcGVj
dG9yOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoaW5zcGVjdG9yLmlzQ29ubmVjdGVkKCkpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJSZW1vdGVJbnNwZWN0b3IgY2FuIGFjY2VwdCBvbmx5IDEgY2xpZW50
Iik7CiAKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmIChG
aWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShoYW5kbGUsIHNpemUpKSB7Ci0gICAgICAgIFZlY3RvcjxM
Q2hhcj4gYnVmZmVyKHNpemUpOwotICAgICAgICBpZiAoRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxl
KGhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyLmRhdGEoKSksIHNpemUpID09
IHNpemUpCi0gICAgICAgICAgICByZXN1bHQgPSBTdHJpbmc6OmFkb3B0KFdURk1vdmUoYnVmZmVy
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgRmlsZVN5c3RlbTo6Y2xvc2VG
aWxlKGhhbmRsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpbnNwZWN0b3IuY29ubmVjdChh
Y2NlcHRlZElEKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmgKaW5kZXggMDkxZDk4
OGY5YzIuLjhjMjE1MGIyOTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU2VydmVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNl
cnZlci5oCkBAIC0yOCw2NiArMjgsMjcgQEAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
IAogI2luY2x1ZGUgIlJlbW90ZUluc3BlY3Rvci5oIgotCi0jaW5jbHVkZSAiUmVtb3RlSW5zcGVj
dG9yQ29ubmVjdGlvbkNsaWVudC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgIlJlbW90
ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmgiCiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi1j
bGFzcyBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yQ29ubmVj
dGlvbkNsaWVudCB7CitjbGFzcyBSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIgZmluYWwgOiBwdWJsaWMg
UmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6Okxpc3RlbmVyIHsKIHB1YmxpYzoKKyAgICB+
UmVtb3RlSW5zcGVjdG9yU2VydmVyKCk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
UmVtb3RlSW5zcGVjdG9yU2VydmVyJiBzaW5nbGV0b24oKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgc3RhcnQoY29uc3QgY2hhciogYWRkcmVzcywgdWludDE2X3QgcG9ydCk7CiAgICAg
Ym9vbCBpc1J1bm5pbmcoKSBjb25zdCB7IHJldHVybiAhIW1fc2VydmVyOyB9CiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBPcHRpb25hbDx1aW50MTZfdD4gbGlzdGVuRm9yVGFyZ2V0cygpOwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIE9wdGlvbmFsPFBsYXRmb3JtU29ja2V0VHlwZT4gY29ubmVjdCgp
OwotCi0gICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHNQYXRoKGNvbnN0IFN0cmluZyYgYmFja2Vu
ZENvbW1hbmRzUGF0aCkgeyBtX2JhY2tlbmRDb21tYW5kc1BhdGggPSBiYWNrZW5kQ29tbWFuZHNQ
YXRoOyB9Ci0KIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFJlbW90
ZUluc3BlY3RvclNlcnZlcj47CiAgICAgUmVtb3RlSW5zcGVjdG9yU2VydmVyKCkgeyBTb2NrZXQ6
OmluaXQoKTsgfQogCi0gICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKENvbm5lY3Rpb25JRCk7Ci0K
LSAgICB2b2lkIHNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmKTsKLSAgICB2b2lkIHNldHVwSW5z
cGVjdG9yQ2xpZW50KGNvbnN0IEV2ZW50Jik7Ci0gICAgdm9pZCBzZXR1cChjb25zdCBFdmVudCYp
OwotICAgIHZvaWQgY2xvc2UoY29uc3QgRXZlbnQmKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9G
cm9udGVuZChjb25zdCBFdmVudCYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29u
c3QgRXZlbnQmKTsKLQotICAgIHZvaWQgc2VuZENsb3NlRXZlbnQoQ29ubmVjdGlvbklELCBUYXJn
ZXRJRCk7Ci0gICAgdm9pZCBjbGllbnRDb25uZWN0aW9uQ2xvc2VkKCk7Ci0KLSAgICB2b2lkIGRp
ZEFjY2VwdChDb25uZWN0aW9uSUQgYWNjZXB0ZWRJRCwgQ29ubmVjdGlvbklEIGxpc3RlbmVySUQs
IFNvY2tldDo6RG9tYWluKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZENsb3NlKENvbm5lY3Rpb25J
RCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNlbmRXZWJJbnNwZWN0b3JFdmVudChDb25uZWN0aW9u
SUQsIGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGJhY2tlbmRDb21tYW5kcygpIGNvbnN0
OwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiYgZGlzcGF0Y2hNYXAoKSBvdmVy
cmlkZTsKLQotICAgIEhhc2hTZXQ8c3RkOjpwYWlyPENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQ+PiBt
X2luc3BlY3Rpb25UYXJnZXRzOworICAgIGJvb2wgZGlkQWNjZXB0KENvbm5lY3Rpb25JRCBhY2Nl
cHRlZElELCBDb25uZWN0aW9uSUQgbGlzdGVuZXJJRCwgU29ja2V0OjpEb21haW4pIG92ZXJyaWRl
OworICAgIHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSBvdmVycmlkZSB7IH0KIAogICAgIE9w
dGlvbmFsPENvbm5lY3Rpb25JRD4gbV9zZXJ2ZXI7Ci0KLSAgICAvLyBDb25uZWN0aW9ucyB0byB0
aGUgV2ViUHJvY2Vzcy4KLSAgICBWZWN0b3I8Q29ubmVjdGlvbklEPiBtX2luc3BlY3RvckNvbm5l
Y3Rpb25zOwotICAgIExvY2sgbV9jb25uZWN0aW9uc0xvY2s7Ci0KLSAgICAvLyBMaXN0ZW5lciBm
b3IgdGFyZ2V0cy4KLSAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IG1faW5zcGVjdG9yTGlzdGVu
ZXI7Ci0KLSAgICAvLyBDb25uZWN0aW9uIGZyb20gUmVtb3RlSW5zcGVjdG9yQ2xpZW50LgotICAg
IE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gbV9jbGllbnRDb25uZWN0aW9uOwotCi0gICAgU3RyaW5n
IG1fYmFja2VuZENvbW1hbmRzUGF0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0
L1JlbW90ZUluc3BlY3RvclNvY2tldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0LmNwcAppbmRleCA0YjhiZjk5
NjY2Yy4uZWViNWZjNDE5OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JT
b2NrZXQuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiUmVtb3RlQXV0b21hdGlvblRh
cmdldC5oIgogI2luY2x1ZGUgIlJlbW90ZUNvbm5lY3Rpb25Ub1RhcmdldC5oIgogI2luY2x1ZGUg
IlJlbW90ZUluc3BlY3Rpb25UYXJnZXQuaCIKKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgog
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTM4LDkgKzM5LDYgQEAKIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLVBsYXRmb3JtU29ja2V0VHlwZSBSZW1vdGVJbnNwZWN0b3I6
OnNfY29ubmVjdGlvbklkZW50aWZpZXIgPSBJTlZBTElEX1NPQ0tFVF9WQUxVRTsKLXVpbnQxNl90
IFJlbW90ZUluc3BlY3Rvcjo6c19zZXJ2ZXJQb3J0ID0gMDsKLQogUmVtb3RlSW5zcGVjdG9yJiBS
ZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFJlbW90ZUluc3BlY3Rvcj4gc2hhcmVkOwpAQCAtNTMsNTUgKzUxLDQzIEBAIFJlbW90ZUluc3Bl
Y3Rvcjo6UmVtb3RlSW5zcGVjdG9yKCkKICAgICBzdGFydCgpOwogfQogCi12b2lkIFJlbW90ZUlu
c3BlY3Rvcjo6ZGlkQ2xvc2UoQ29ubmVjdGlvbklEIGlkKQordm9pZCBSZW1vdGVJbnNwZWN0b3I6
OmNvbm5lY3QoQ29ubmVjdGlvbklEIGlkKQogewotICAgIGlmIChpZCAhPSBtX2NsaWVudElELnZh
bHVlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIWlzQ29ubmVjdGVkKCkpOwogCi0g
ICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFs9XSB7Ci0gICAgICAgIExvY2tIb2xkZXIg
bG9jayhtX211dGV4KTsKLSAgICAgICAgc3RvcEludGVybmFsKFN0b3BTb3VyY2U6OkFQSSk7Ci0g
ICAgfSk7CisgICAgbV9jbGllbnRDb25uZWN0aW9uID0gaWQ7CisgICAgc3RhcnQoKTsKIH0KIAot
SGFzaE1hcDxTdHJpbmcsIFJlbW90ZUluc3BlY3Rvcjo6Q2FsbEhhbmRsZXI+JiBSZW1vdGVJbnNw
ZWN0b3I6OmRpc3BhdGNoTWFwKCkKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yOjpkaWRDbG9zZShDb25u
ZWN0aW9uSUQpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBD
YWxsSGFuZGxlcj4+IG1ldGhvZHMgPSBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+KHsKLSAg
ICAgICAgeyAiR2V0VGFyZ2V0TGlzdCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1v
dGVJbnNwZWN0b3I6OnJlY2VpdmVkR2V0VGFyZ2V0TGlzdE1lc3NhZ2UpIH0sCi0gICAgICAgIHsg
IlNldHVwIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3Rvcjo6cmVj
ZWl2ZWRTZXR1cE1lc3NhZ2UpIH0sCi0gICAgICAgIHsgIlNlbmRNZXNzYWdlVG9UYXJnZXQiX3Ms
IHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yOjpyZWNlaXZlZERhdGFN
ZXNzYWdlKSB9LAotICAgICAgICB7ICJGcm9udGVuZERpZENsb3NlIl9zLCBzdGF0aWNfY2FzdDxD
YWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRDbG9zZU1lc3NhZ2UpIH0sCi0g
ICAgfSk7CisgICAgQVNTRVJUKGlzQ29ubmVjdGVkKCkpOwogCi0gICAgcmV0dXJuIG1ldGhvZHM7
CisgICAgbV9jbGllbnRDb25uZWN0aW9uID0gV1RGOjpudWxsb3B0OworCisgICAgUnVuTG9vcDo6
Y3VycmVudCgpLmRpc3BhdGNoKFs9XSB7CisgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4
KTsKKyAgICAgICAgc3RvcEludGVybmFsKFN0b3BTb3VyY2U6OkFQSSk7CisgICAgfSk7CiB9CiAK
IHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29uc3QgU3RyaW5n
JiBldmVudCkKIHsKLSAgICBpZiAoIW1fY2xpZW50SUQpCisgICAgaWYgKCFtX2NsaWVudENvbm5l
Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IENTdHJpbmcgbWVzc2FnZSA9IGV2
ZW50LnV0ZjgoKTsKLSAgICBzZW5kKG1fY2xpZW50SUQudmFsdWUoKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4obWVzc2FnZS5kYXRhKCkpLCBtZXNzYWdlLmxlbmd0aCgpKTsKKyAg
ICBzZW5kKG1fY2xpZW50Q29ubmVjdGlvbi52YWx1ZSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihtZXNzYWdlLmRhdGEoKSksIG1lc3NhZ2UubGVuZ3RoKCkpOwogfQogCiB2b2lk
IFJlbW90ZUluc3BlY3Rvcjo6c3RhcnQoKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4
KTsKIAotICAgIGlmIChtX2VuYWJsZWQgfHwgKHNfY29ubmVjdGlvbklkZW50aWZpZXIgPT0gSU5W
QUxJRF9TT0NLRVRfVkFMVUUgJiYgIXNfc2VydmVyUG9ydCkpCisgICAgaWYgKG1fZW5hYmxlZCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKLQotICAgIGlmIChzX2Nv
bm5lY3Rpb25JZGVudGlmaWVyICE9IElOVkFMSURfU09DS0VUX1ZBTFVFKSB7Ci0gICAgICAgIG1f
Y2xpZW50SUQgPSBjcmVhdGVDbGllbnQoc19jb25uZWN0aW9uSWRlbnRpZmllcik7Ci0gICAgICAg
IHNfY29ubmVjdGlvbklkZW50aWZpZXIgPSBJTlZBTElEX1NPQ0tFVF9WQUxVRTsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9jbGllbnRJRCA9IGNvbm5lY3RJbmV0KCIxMjcuMC4wLjEiLCBzX3NlcnZl
clBvcnQpOwotCi0gICAgaWYgKCFtX3RhcmdldE1hcC5pc0VtcHR5KCkpCi0gICAgICAgIHB1c2hM
aXN0aW5nc1Nvb24oKTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3BJbnRlcm5hbChT
dG9wU291cmNlKQpAQCAtMTExLDYgKzk3LDcgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnN0b3BJ
bnRlcm5hbChTdG9wU291cmNlKQogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiAgICAgbV9wdXNo
U2NoZWR1bGVkID0gZmFsc2U7CisgICAgbV9yZWFkeVRvUHVzaExpc3RpbmdzID0gZmFsc2U7CiAK
ICAgICBmb3IgKGF1dG8gdGFyZ2V0Q29ubmVjdGlvbiA6IG1fdGFyZ2V0Q29ubmVjdGlvbk1hcC52
YWx1ZXMoKSkKICAgICAgICAgdGFyZ2V0Q29ubmVjdGlvbi0+Y2xvc2UoKTsKQEAgLTExOSw3ICsx
MDYsNiBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c3RvcEludGVybmFsKFN0b3BTb3VyY2UpCiAg
ICAgdXBkYXRlSGFzQWN0aXZlRGVidWdTZXNzaW9uKCk7CiAKICAgICBtX2F1dG9tYXRpY0luc3Bl
Y3Rpb25QYXVzZWQgPSBmYWxzZTsKLSAgICBtX2NsaWVudElEID0gV1RGOjpudWxsb3B0OwogfQog
CiBUYXJnZXRMaXN0aW5nIFJlbW90ZUluc3BlY3Rvcjo6bGlzdGluZ0Zvckluc3BlY3Rpb25UYXJn
ZXQoY29uc3QgUmVtb3RlSW5zcGVjdGlvblRhcmdldCYgdGFyZ2V0KSBjb25zdApAQCAtMTU0LDcg
KzE0MCw3IEBAIFRhcmdldExpc3RpbmcgUmVtb3RlSW5zcGVjdG9yOjpsaXN0aW5nRm9yQXV0b21h
dGlvblRhcmdldChjb25zdCBSZW1vdGVBdXRvbWF0aW9uCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9y
OjpwdXNoTGlzdGluZ3NOb3coKQogewotICAgIGlmICghbV9jbGllbnRJRCkKKyAgICBpZiAoIWlz
Q29ubmVjdGVkKCkgfHwgIW1fcmVhZHlUb1B1c2hMaXN0aW5ncykKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9wdXNoU2NoZWR1bGVkID0gZmFsc2U7CkBAIC0xNjYsMTIgKzE1MiwxNCBAQCB2b2lk
IFJlbW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdzTm93KCkKICAgICBhdXRvIGpzb25FdmVudCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbkV2ZW50LT5zZXRTdHJpbmcoImV2ZW50
Il9zLCAiU2V0VGFyZ2V0TGlzdCJfcyk7CiAgICAganNvbkV2ZW50LT5zZXRTdHJpbmcoIm1lc3Nh
Z2UiX3MsIHRhcmdldExpc3RKU09OLT50b0pTT05TdHJpbmcoKSk7CisgICAganNvbkV2ZW50LT5z
ZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIG1fY2xpZW50Q29ubmVjdGlvbi52YWx1ZSgpKTsK
KyAgICBqc29uRXZlbnQtPnNldEJvb2xlYW4oInJlbW90ZUF1dG9tYXRpb25BbGxvd2VkIl9zLCBt
X2NsaWVudENhcGFiaWxpdGllcyAmJiBtX2NsaWVudENhcGFiaWxpdGllcy0+cmVtb3RlQXV0b21h
dGlvbkFsbG93ZWQpOwogICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChqc29uRXZlbnQtPnRvSlNP
TlN0cmluZygpKTsKIH0KIAogdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnB1c2hMaXN0aW5nc1Nvb24o
KQogewotICAgIGlmICghbV9jbGllbnRJRCkKKyAgICBpZiAoIWlzQ29ubmVjdGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChtX3B1c2hTY2hlZHVsZWQpCkBAIC0xOTIsNTIgKzE4MCwx
MDYgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3I6OnNlbmRBdXRvbWF0aWNJbnNwZWN0aW9uQ2FuZGlk
YXRlTWVzc2FnZSgpCiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvUmVtb3Rl
KFRhcmdldElEIHRhcmdldElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAg
ICBMb2NrSG9sZGVyIGxvY2sobV9tdXRleCk7Ci0gICAgaWYgKCFtX2NsaWVudElEKQorICAgIGlm
ICghbV9jbGllbnRDb25uZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNlbmRN
ZXNzYWdlRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHNlbmRNZXNzYWdlRXZl
bnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJZGVudGlmaWVyKTsKICAgICBzZW5k
TWVzc2FnZUV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5k
Il9zKTsKKyAgICBzZW5kTWVzc2FnZUV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3Ms
IG1fY2xpZW50Q29ubmVjdGlvbi52YWx1ZSgpKTsKICAgICBzZW5kTWVzc2FnZUV2ZW50LT5zZXRT
dHJpbmcoIm1lc3NhZ2UiX3MsIG1lc3NhZ2UpOwogICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChz
ZW5kTWVzc2FnZUV2ZW50LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgUmVtb3RlSW5zcGVj
dG9yOjpyZWNlaXZlZEdldFRhcmdldExpc3RNZXNzYWdlKGNvbnN0IEV2ZW50JikKK3ZvaWQgUmVt
b3RlSW5zcGVjdG9yOjpzZXR1cChUYXJnZXRJRCB0YXJnZXRJZGVudGlmaWVyKQogewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgUmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0KiB0YXJn
ZXQ7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9tdXRleCk7CisgICAgICAgIHRh
cmdldCA9IG1fdGFyZ2V0TWFwLmdldCh0YXJnZXRJZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCF0
YXJnZXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBjb25uZWN0aW9u
VG9UYXJnZXQgPSBhZG9wdFJlZigqbmV3IFJlbW90ZUNvbm5lY3Rpb25Ub1RhcmdldCgqdGFyZ2V0
KSk7CisgICAgQVNTRVJUKGlzPFJlbW90ZUluc3BlY3Rpb25UYXJnZXQ+KHRhcmdldCkgfHwgaXM8
UmVtb3RlQXV0b21hdGlvblRhcmdldD4odGFyZ2V0KSk7CisgICAgaWYgKCFjb25uZWN0aW9uVG9U
YXJnZXQtPnNldHVwKCkpIHsKKyAgICAgICAgY29ubmVjdGlvblRvVGFyZ2V0LT5jbG9zZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOwot
ICAgIHB1c2hMaXN0aW5nc05vdygpOworICAgIG1fdGFyZ2V0Q29ubmVjdGlvbk1hcC5zZXQodGFy
Z2V0SWRlbnRpZmllciwgV1RGTW92ZShjb25uZWN0aW9uVG9UYXJnZXQpKTsKKworICAgIHVwZGF0
ZUhhc0FjdGl2ZURlYnVnU2Vzc2lvbigpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2Vu
ZE1lc3NhZ2VUb1RhcmdldChUYXJnZXRJRCB0YXJnZXRJZGVudGlmaWVyLCBjb25zdCBjaGFyKiBt
ZXNzYWdlKQoreworICAgIGlmIChhdXRvIGNvbm5lY3Rpb25Ub1RhcmdldCA9IG1fdGFyZ2V0Q29u
bmVjdGlvbk1hcC5nZXQodGFyZ2V0SWRlbnRpZmllcikpCisgICAgICAgIGNvbm5lY3Rpb25Ub1Rh
cmdldC0+c2VuZE1lc3NhZ2VUb1RhcmdldChTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpKTsKK30K
KworU3RyaW5nIFJlbW90ZUluc3BlY3Rvcjo6YmFja2VuZENvbW1hbmRzKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9iYWNrZW5kQ29tbWFuZHNQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGF1dG8gaGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUobV9iYWNrZW5kQ29t
bWFuZHNQYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OlJlYWQpOworICAgIGlmICghRmls
ZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChoYW5kbGUpKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgU3RyaW5nIHJlc3VsdDsKKyAgICBsb25nIGxvbmcgc2l6ZTsKKyAgICBpZiAoRmlsZVN5c3Rl
bTo6Z2V0RmlsZVNpemUoaGFuZGxlLCBzaXplKSkgeworICAgICAgICBWZWN0b3I8TENoYXI+IGJ1
ZmZlcihzaXplKTsKKyAgICAgICAgaWYgKEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShoYW5kbGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlci5kYXRhKCkpLCBzaXplKSA9PSBzaXplKQor
ICAgICAgICAgICAgcmVzdWx0ID0gU3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpOworICAg
IH0KKyAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoaGFuZGxlKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisvLyBSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50IGhhbmRsZXJzCisKK0hh
c2hNYXA8U3RyaW5nLCBSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpDYWxsSGFuZGxl
cj4mIFJlbW90ZUluc3BlY3Rvcjo6ZGlzcGF0Y2hNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+PiBtZXRob2RzID0gSGFzaE1hcDxT
dHJpbmcsIENhbGxIYW5kbGVyPih7CisgICAgICAgIHsgIlNldHVwSW5zcGVjdG9yQ2xpZW50Il9z
LCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3Rvcjo6c2V0dXBJbnNwZWN0
b3JDbGllbnQpIH0sCisgICAgICAgIHsgIlNldHVwIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxl
cj4oJlJlbW90ZUluc3BlY3Rvcjo6c2V0dXBUYXJnZXQpIH0sCisgICAgICAgIHsgIkZyb250ZW5k
RGlkQ2xvc2UiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yOjpm
cm9udGVuZERpZENsb3NlKSB9LAorICAgICAgICB7ICJTZW5kTWVzc2FnZVRvQmFja2VuZCJfcywg
c3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9C
YWNrZW5kKSB9LAorICAgIH0pOworCisgICAgcmV0dXJuIG1ldGhvZHM7CiB9CiAKLXZvaWQgUmVt
b3RlSW5zcGVjdG9yOjpyZWNlaXZlZFNldHVwTWVzc2FnZShjb25zdCBFdmVudCYgZXZlbnQpCit2
b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0dXBJbnNwZWN0b3JDbGllbnQoY29uc3QgRXZlbnQmKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBpZiAoZXZlbnQudGFyZ2V0SUQp
Ci0gICAgICAgIHNldHVwKGV2ZW50LnRhcmdldElELnZhbHVlKCkpOworICAgIGF1dG8gYmFja2Vu
ZENvbW1hbmRzRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGJhY2tlbmRDb21t
YW5kc0V2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiQmFja2VuZENvbW1hbmRzIl9zKTsKKyAg
ICBiYWNrZW5kQ29tbWFuZHNFdmVudC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBiYWNrZW5kQ29t
bWFuZHMoKSk7CisgICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KGJhY2tlbmRDb21tYW5kc0V2ZW50
LT50b0pTT05TdHJpbmcoKSk7CisKKyAgICBtX3JlYWR5VG9QdXNoTGlzdGluZ3MgPSB0cnVlOwor
CisgICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOworICAgIHB1c2hMaXN0aW5nc05vdygpOwog
fQogCi12b2lkIFJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWREYXRhTWVzc2FnZShjb25zdCBFdmVu
dCYgZXZlbnQpCit2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c2V0dXBUYXJnZXQoY29uc3QgRXZlbnQm
IGV2ZW50KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBpZiAoIWV2ZW50
LnRhcmdldElEIHx8ICFldmVudC5tZXNzYWdlKQorICAgIGlmICghZXZlbnQudGFyZ2V0SUQgfHwg
IWV2ZW50LmNvbm5lY3Rpb25JRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJlbW90
ZUNvbm5lY3Rpb25Ub1RhcmdldD4gY29ubmVjdGlvblRvVGFyZ2V0OwotICAgIHsKLSAgICAgICAg
TG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOwotICAgICAgICBjb25uZWN0aW9uVG9UYXJnZXQgPSBt
X3RhcmdldENvbm5lY3Rpb25NYXAuZ2V0KGV2ZW50LnRhcmdldElELnZhbHVlKCkpOwotICAgICAg
ICBpZiAoIWNvbm5lY3Rpb25Ub1RhcmdldCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBjb25uZWN0aW9uVG9UYXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXQoZXZlbnQubWVzc2Fn
ZS52YWx1ZSgpKTsKKyAgICBzZXR1cChldmVudC50YXJnZXRJRC52YWx1ZSgpKTsKIH0KIAotdm9p
ZCBSZW1vdGVJbnNwZWN0b3I6OnJlY2VpdmVkQ2xvc2VNZXNzYWdlKGNvbnN0IEV2ZW50JiBldmVu
dCkKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yOjpmcm9udGVuZERpZENsb3NlKGNvbnN0IEV2ZW50JiBl
dmVudCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNTksNDMgKzMwMSwy
MiBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6cmVjZWl2ZWRDbG9zZU1lc3NhZ2UoY29uc3QgRXZl
bnQmIGV2ZW50KQogICAgICAgICBjb25uZWN0aW9uVG9UYXJnZXQtPmNsb3NlKCk7CiB9CiAKLXZv
aWQgUmVtb3RlSW5zcGVjdG9yOjpzZXR1cChUYXJnZXRJRCB0YXJnZXRJZGVudGlmaWVyKQordm9p
ZCBSZW1vdGVJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IEV2ZW50JiBldmVu
dCkKIHsKLSAgICBSZW1vdGVDb250cm9sbGFibGVUYXJnZXQqIHRhcmdldDsKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFldmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50
LnRhcmdldElEIHx8ICFldmVudC5tZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQ
dHI8UmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0PiBjb25uZWN0aW9uVG9UYXJnZXQ7CiAgICAgewog
ICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9tdXRleCk7Ci0gICAgICAgIHRhcmdldCA9IG1fdGFy
Z2V0TWFwLmdldCh0YXJnZXRJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKCF0YXJnZXQpCisgICAg
ICAgIGNvbm5lY3Rpb25Ub1RhcmdldCA9IG1fdGFyZ2V0Q29ubmVjdGlvbk1hcC5nZXQoZXZlbnQu
dGFyZ2V0SUQudmFsdWUoKSk7CisgICAgICAgIGlmICghY29ubmVjdGlvblRvVGFyZ2V0KQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gY29ubmVjdGlvblRvVGFyZ2V0ID0g
YWRvcHRSZWYoKm5ldyBSZW1vdGVDb25uZWN0aW9uVG9UYXJnZXQoKnRhcmdldCkpOwotICAgIEFT
U0VSVChpczxSZW1vdGVJbnNwZWN0aW9uVGFyZ2V0Pih0YXJnZXQpIHx8IGlzPFJlbW90ZUF1dG9t
YXRpb25UYXJnZXQ+KHRhcmdldCkpOwotICAgIGlmICghY29ubmVjdGlvblRvVGFyZ2V0LT5zZXR1
cCgpKSB7Ci0gICAgICAgIGNvbm5lY3Rpb25Ub1RhcmdldC0+Y2xvc2UoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIExvY2tIb2xkZXIgbG9jayhtX211dGV4KTsKLSAgICBtX3Rhcmdl
dENvbm5lY3Rpb25NYXAuc2V0KHRhcmdldElkZW50aWZpZXIsIFdURk1vdmUoY29ubmVjdGlvblRv
VGFyZ2V0KSk7Ci0KLSAgICB1cGRhdGVIYXNBY3RpdmVEZWJ1Z1Nlc3Npb24oKTsKLX0KLQotdm9p
ZCBSZW1vdGVJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9UYXJnZXQoVGFyZ2V0SUQgdGFyZ2V0SWRl
bnRpZmllciwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBpZiAoYXV0byBjb25uZWN0aW9u
VG9UYXJnZXQgPSBtX3RhcmdldENvbm5lY3Rpb25NYXAuZ2V0KHRhcmdldElkZW50aWZpZXIpKQot
ICAgICAgICBjb25uZWN0aW9uVG9UYXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXQoU3RyaW5nOjpm
cm9tVVRGOChtZXNzYWdlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZXRDb25uZWN0
aW9uSWRlbnRpZmllcihQbGF0Zm9ybVNvY2tldFR5cGUgY29ubmVjdGlvbklkZW50aWZpZXIpCi17
Ci0gICAgUmVtb3RlSW5zcGVjdG9yOjpzX2Nvbm5lY3Rpb25JZGVudGlmaWVyID0gY29ubmVjdGlv
bklkZW50aWZpZXI7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yOjpzZXRTZXJ2ZXJQb3J0KHVp
bnQxNl90IHBvcnQpCi17Ci0gICAgUmVtb3RlSW5zcGVjdG9yOjpzX3NlcnZlclBvcnQgPSBwb3J0
OworICAgIGNvbm5lY3Rpb25Ub1RhcmdldC0+c2VuZE1lc3NhZ2VUb1RhcmdldChldmVudC5tZXNz
YWdlLnZhbHVlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNw
ZWN0b3JTb2NrZXRFbmRwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuY3BwCmluZGV4IDc5
OGQzYjMwNmQ2Li5lYWNjMzJkOWQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNs
dWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNjQsNiArNjUsOCBA
QCBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6flJlbW90ZUluc3BlY3RvclNvY2tldEVu
ZHBvaW50KCkKICAgICBTb2NrZXQ6OmNsb3NlKG1fd2FrZXVwUmVjZWl2ZVNvY2tldCk7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBjb25uZWN0aW9uIDogbV9jb25uZWN0aW9ucy52YWx1ZXMoKSkKICAg
ICAgICAgU29ja2V0OjpjbG9zZShjb25uZWN0aW9uLT5zb2NrZXQpOworICAgIGZvciAoY29uc3Qg
YXV0byYgY29ubmVjdGlvbiA6IG1fbGlzdGVuZXJzLnZhbHVlcygpKQorICAgICAgICBTb2NrZXQ6
OmNsb3NlKGNvbm5lY3Rpb24tPnNvY2tldCk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yU29j
a2V0RW5kcG9pbnQ6Ondha2V1cFdvcmtlclRocmVhZCgpCkBAIC03OSwxMCArODIsMTAgQEAgT3B0
aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6Y29ubmVj
dEluZXQoY29uc3QgY2hhciogc2UKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1PcHRp
b25hbDxDb25uZWN0aW9uSUQ+IFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpsaXN0ZW5J
bmV0KGNvbnN0IGNoYXIqIGFkZHJlc3MsIHVpbnQxNl90IHBvcnQsIENsaWVudCYgY2xpZW50KQor
T3B0aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6bGlz
dGVuSW5ldChjb25zdCBjaGFyKiBhZGRyZXNzLCB1aW50MTZfdCBwb3J0LCBMaXN0ZW5lciYgbGlz
dGVuZXIsIENsaWVudCYgY2xpZW50KQogewogICAgIGlmIChhdXRvIHNvY2tldCA9IFNvY2tldDo6
bGlzdGVuKGFkZHJlc3MsIHBvcnQpKQotICAgICAgICByZXR1cm4gY3JlYXRlQ2xpZW50KCpzb2Nr
ZXQsIGNsaWVudCk7CisgICAgICAgIHJldHVybiBjcmVhdGVMaXN0ZW5lcigqc29ja2V0LCBsaXN0
ZW5lciwgY2xpZW50KTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC05MCw4ICs5
Myw4IEBAIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9p
bnQ6Omxpc3RlbkluZXQoY29uc3QgY2hhciogYWRkCiBib29sIFJlbW90ZUluc3BlY3RvclNvY2tl
dEVuZHBvaW50Ojppc0xpc3RlbmluZyhDb25uZWN0aW9uSUQgaWQpCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsKLSAgICBpZiAoY29uc3QgYXV0byYgY29ubmVjdGlv
biA9IG1fY29ubmVjdGlvbnMuZ2V0KGlkKSkKLSAgICAgICAgcmV0dXJuIFNvY2tldDo6aXNMaXN0
ZW5pbmcoY29ubmVjdGlvbi0+c29ja2V0KTsKKyAgICBpZiAobV9saXN0ZW5lcnMuY29udGFpbnMo
aWQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEw
MCw2ICsxMDMsMTAgQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6d29ya2Vy
VGhyZWFkKCkKICAgICBQb2xsaW5nRGVzY3JpcHRvciB3YWtldXAgPSBTb2NrZXQ6OnByZXBhcmVQ
b2xsaW5nKG1fd2FrZXVwUmVjZWl2ZVNvY2tldCk7CiAKICAgICB3aGlsZSAoIW1fc2hvdWxkQWJv
cnRXb3JrZXJUaHJlYWQpIHsKKyNpZiBVU0UoR0VORVJJQ19FVkVOVF9MT09QKSB8fCBVU0UoV0lO
RE9XU19FVkVOVF9MT09QKQorICAgICAgICBSdW5Mb29wOjppdGVyYXRlKCk7CisjZW5kaWYKKwog
ICAgICAgICBWZWN0b3I8UG9sbGluZ0Rlc2NyaXB0b3I+IHBvbGxmZHM7CiAgICAgICAgIFZlY3Rv
cjxDb25uZWN0aW9uSUQ+IGlkczsKICAgICAgICAgewpAQCAtMTA4LDYgKzExNSwxMCBAQCB2b2lk
IFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50Ojp3b3JrZXJUaHJlYWQoKQogICAgICAgICAg
ICAgICAgIHBvbGxmZHMuYXBwZW5kKGNvbm5lY3Rpb24udmFsdWUtPnBvbGwpOwogICAgICAgICAg
ICAgICAgIGlkcy5hcHBlbmQoY29ubmVjdGlvbi5rZXkpOwogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBjb25uZWN0aW9uIDogbV9saXN0ZW5lcnMpIHsKKyAgICAg
ICAgICAgICAgICBwb2xsZmRzLmFwcGVuZChjb25uZWN0aW9uLnZhbHVlLT5wb2xsKTsKKyAgICAg
ICAgICAgICAgICBpZHMuYXBwZW5kKGNvbm5lY3Rpb24ua2V5KTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBwb2xsZmRzLmFwcGVuZCh3YWtldXApOwogCkBAIC0xMjMsNDEgKzEz
NCw3NiBAQCB2b2lkIFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50Ojp3b3JrZXJUaHJlYWQo
KQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkcy5zaXplKCk7IGkrKykgewogICAg
ICAgICAgICAgYXV0byBpZCA9IGlkc1tpXTsKIAotICAgICAgICAgICAgaWYgKFNvY2tldDo6aXNS
ZWFkYWJsZShwb2xsZmRzW2ldKSAmJiBpc0xpc3RlbmluZyhpZCkpCi0gICAgICAgICAgICAgICAg
YWNjZXB0SW5ldFNvY2tldElmRW5hYmxlZChpZCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChTb2Nr
ZXQ6OmlzUmVhZGFibGUocG9sbGZkc1tpXSkpCi0gICAgICAgICAgICAgICAgcmVjdklmRW5hYmxl
ZChpZCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChTb2NrZXQ6OmlzV3JpdGFibGUocG9sbGZkc1tp
XSkpCisgICAgICAgICAgICBpZiAoU29ja2V0Ojppc1JlYWRhYmxlKHBvbGxmZHNbaV0pKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzTGlzdGVuaW5nKGlkKSkKKyAgICAgICAgICAgICAgICAgICAg
YWNjZXB0SW5ldFNvY2tldElmRW5hYmxlZChpZCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICByZWN2SWZFbmFibGVkKGlkKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoU29ja2V0Ojppc1dyaXRhYmxlKHBvbGxmZHNbaV0pKQogICAgICAgICAgICAgICAgIHNlbmRJ
ZkVuYWJsZWQoaWQpOwogICAgICAgICB9CiAgICAgfQogfQogCi1PcHRpb25hbDxDb25uZWN0aW9u
SUQ+IFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpjcmVhdGVDbGllbnQoUGxhdGZvcm1T
b2NrZXRUeXBlIHNvY2tldCwgQ2xpZW50JiBjbGllbnQpCitDb25uZWN0aW9uSUQgUmVtb3RlSW5z
cGVjdG9yU29ja2V0RW5kcG9pbnQ6OmdlbmVyYXRlQ29ubmVjdGlvbklEKCkKIHsKLSAgICBpZiAo
IVNvY2tldDo6aXNWYWxpZChzb2NrZXQpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsKKyAgICBBU1NFUlQobV9j
b25uZWN0aW9uc0xvY2suaXNMb2NrZWQoKSk7CiAKICAgICBDb25uZWN0aW9uSUQgaWQ7CiAgICAg
ZG8gewogICAgICAgICBpZCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCk7Ci0gICAg
fSB3aGlsZSAoIWlkIHx8IG1fY29ubmVjdGlvbnMuY29udGFpbnMoaWQpKTsKKyAgICB9IHdoaWxl
ICghaWQgfHwgbV9jb25uZWN0aW9ucy5jb250YWlucyhpZCkgfHwgbV9saXN0ZW5lcnMuY29udGFp
bnMoaWQpKTsKKworICAgIHJldHVybiBpZDsKK30KKworc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUlu
c3BlY3RvclNvY2tldEVuZHBvaW50OjpDb25uZWN0aW9uPiBSZW1vdGVJbnNwZWN0b3JTb2NrZXRF
bmRwb2ludDo6bWFrZUNvbm5lY3Rpb24oUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCwgQ2xpZW50
JiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY29ubmVjdGlvbnNMb2NrLmlzTG9ja2VkKCkpOwog
CiAgICAgU29ja2V0OjpzZXR1cChzb2NrZXQpOwogCiAgICAgYXV0byBjb25uZWN0aW9uID0gbWFr
ZVVuaXF1ZTxDb25uZWN0aW9uPihjbGllbnQpOwogCi0gICAgY29ubmVjdGlvbi0+aWQgPSBpZDsK
KyAgICBjb25uZWN0aW9uLT5pZCA9IGdlbmVyYXRlQ29ubmVjdGlvbklEKCk7CiAgICAgY29ubmVj
dGlvbi0+cG9sbCA9IFNvY2tldDo6cHJlcGFyZVBvbGxpbmcoc29ja2V0KTsKICAgICBjb25uZWN0
aW9uLT5zb2NrZXQgPSBzb2NrZXQ7CisKKyAgICByZXR1cm4gY29ubmVjdGlvbjsKK30KKworT3B0
aW9uYWw8Q29ubmVjdGlvbklEPiBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6Y3JlYXRl
Q2xpZW50KFBsYXRmb3JtU29ja2V0VHlwZSBzb2NrZXQsIENsaWVudCYgY2xpZW50KQoreworICAg
IGlmICghU29ja2V0Ojppc1ZhbGlkKHNvY2tldCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICBMb2NrSG9sZGVyIGxvY2sobV9jb25uZWN0aW9uc0xvY2spOworICAgIGF1dG8g
Y29ubmVjdGlvbiA9IG1ha2VDb25uZWN0aW9uKHNvY2tldCwgY2xpZW50KTsKKyAgICBhdXRvIGlk
ID0gY29ubmVjdGlvbi0+aWQ7CiAgICAgbV9jb25uZWN0aW9ucy5hZGQoaWQsIFdURk1vdmUoY29u
bmVjdGlvbikpOwogICAgIHdha2V1cFdvcmtlclRocmVhZCgpOwogCiAgICAgcmV0dXJuIGlkOwog
fQogCitPcHRpb25hbDxDb25uZWN0aW9uSUQ+IFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50
OjpjcmVhdGVMaXN0ZW5lcihQbGF0Zm9ybVNvY2tldFR5cGUgc29ja2V0LCBMaXN0ZW5lciYgbGlz
dGVuZXIsIENsaWVudCYgY2xpZW50KQoreworICAgIGlmICghU29ja2V0Ojppc1ZhbGlkKHNvY2tl
dCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBMb2NrSG9sZGVyIGxvY2so
bV9jb25uZWN0aW9uc0xvY2spOworCisgICAgU29ja2V0OjpzZXR1cChzb2NrZXQpOworCisgICAg
YXV0byBjb25uZWN0aW9uID0gbWFrZUNvbm5lY3Rpb24oc29ja2V0LCBjbGllbnQpOworICAgIGF1
dG8gaWQgPSBjb25uZWN0aW9uLT5pZDsKKyAgICBjb25uZWN0aW9uLT5saXN0ZW5lciA9ICZsaXN0
ZW5lcjsKKyAgICBtX2xpc3RlbmVycy5hZGQoaWQsIFdURk1vdmUoY29ubmVjdGlvbikpOworICAg
IHdha2V1cFdvcmtlclRocmVhZCgpOworCisgICAgcmV0dXJuIGlkOworfQorCiB2b2lkIFJlbW90
ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjppbnZhbGlkYXRlQ2xpZW50KENsaWVudCYgY2xpZW50
KQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX2Nvbm5lY3Rpb25zTG9jayk7CkBAIC0xNzMsOSAr
MjE5LDI2IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQ6OmludmFsaWRhdGVD
bGllbnQoQ2xpZW50JiBjbGllbnQpCiAgICAgfSk7CiB9CiAKK3ZvaWQgUmVtb3RlSW5zcGVjdG9y
U29ja2V0RW5kcG9pbnQ6OmludmFsaWRhdGVMaXN0ZW5lcihMaXN0ZW5lciYgbGlzdGVuZXIpCit7
CisgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsKKyAgICBtX2xpc3RlbmVy
cy5yZW1vdmVJZihbJmxpc3RlbmVyXShhdXRvJiBrZXlWYWx1ZSkgeworICAgICAgICBjb25zdCBh
dXRvJiBjb25uZWN0aW9uID0ga2V5VmFsdWUudmFsdWU7CisKKyAgICAgICAgaWYgKGNvbm5lY3Rp
b24tPmxpc3RlbmVyID09ICZsaXN0ZW5lcikgeworICAgICAgICAgICAgU29ja2V0OjpjbG9zZShj
b25uZWN0aW9uLT5zb2NrZXQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7Cit9CisKIE9wdGlvbmFsPHVpbnQxNl90
PiBSZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludDo6Z2V0UG9ydChDb25uZWN0aW9uSUQgaWQp
IGNvbnN0CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNMb2NrKTsKKyAgICBp
ZiAoY29uc3QgYXV0byYgY29ubmVjdGlvbiA9IG1fbGlzdGVuZXJzLmdldChpZCkpCisgICAgICAg
IHJldHVybiBTb2NrZXQ6OmdldFBvcnQoY29ubmVjdGlvbi0+c29ja2V0KTsKICAgICBpZiAoY29u
c3QgYXV0byYgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbnMuZ2V0KGlkKSkKICAgICAgICAgcmV0
dXJuIFNvY2tldDo6Z2V0UG9ydChjb25uZWN0aW9uLT5zb2NrZXQpOwogCkBAIC0yNTQsMTcgKzMx
NywxOCBAQCB2b2lkIFJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50OjpzZW5kKENvbm5lY3Rp
b25JRCBpZCwgY29uc3QgdWludDhfdCogZGF0YSwgcwogCiB2b2lkIFJlbW90ZUluc3BlY3RvclNv
Y2tldEVuZHBvaW50OjphY2NlcHRJbmV0U29ja2V0SWZFbmFibGVkKENvbm5lY3Rpb25JRCBpZCkK
IHsKLSAgICBpZiAoIWlzTGlzdGVuaW5nKGlkKSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VS
VChpc0xpc3RlbmluZyhpZCkpOwogCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fY29ubmVjdGlvbnNM
b2NrKTsKLSAgICBpZiAoY29uc3QgYXV0byYgY29ubmVjdGlvbiA9IG1fY29ubmVjdGlvbnMuZ2V0
KGlkKSkgeworICAgIGlmIChjb25zdCBhdXRvJiBjb25uZWN0aW9uID0gbV9saXN0ZW5lcnMuZ2V0
KGlkKSkgewogICAgICAgICBpZiAoYXV0byBzb2NrZXQgPSBTb2NrZXQ6OmFjY2VwdChjb25uZWN0
aW9uLT5zb2NrZXQpKSB7CiAgICAgICAgICAgICAvLyBOZWVkIHRvIHVubG9jayBiZWZvcmUgY2Fs
bGluZyBjcmVhdGVDbGllbnQgYXMgaXQgYWxzbyBhdHRlbXB0cyB0byBsb2NrLgogICAgICAgICAg
ICAgbG9jay51bmxvY2tFYXJseSgpOwogICAgICAgICAgICAgaWYgKGF1dG8gbmV3SUQgPSBjcmVh
dGVDbGllbnQoKnNvY2tldCwgY29ubmVjdGlvbi0+Y2xpZW50KSkgewotICAgICAgICAgICAgICAg
IGNvbm5lY3Rpb24tPmNsaWVudC5kaWRBY2NlcHQobmV3SUQudmFsdWUoKSwgaWQsIFNvY2tldDo6
RG9tYWluOjpOZXR3b3JrKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgaWYgKGNvbm5lY3Rpb24tPmxpc3RlbmVyLT5kaWRBY2NlcHQobmV3SUQudmFsdWUoKSwgY29u
bmVjdGlvbi0+aWQsIFNvY2tldDo6RG9tYWluOjpOZXR3b3JrKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgbV9jb25uZWN0aW9ucy5yZW1vdmUoaWQpOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBTb2NrZXQ6OmNsb3NlKCpzb2NrZXQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1Jl
bW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0RW5kcG9pbnQuaAppbmRl
eCBmMTg2MjQ0ZTVjNi4uM2U0OWE1NWU4YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2lu
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JTb2NrZXRFbmRwb2ludC5oCkBAIC00NCw3ICs0NCwxMiBAQCBwdWJsaWM6
CiAgICAgY2xhc3MgQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlKENvbm5lY3Rpb25JRCwgVmVjdG9yPHVpbnQ4X3Q+JiYpID0gMDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRpZEFjY2VwdChDb25uZWN0aW9uSUQgYWNjZXB0ZWRJRCwgQ29ubmVjdGlv
bklEIGxpc3RlbmVySUQsIFNvY2tldDo6RG9tYWluKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRDbG9zZShDb25uZWN0aW9uSUQpID0gMDsKKyAgICB9OworCisgICAgY2xhc3MgTGlzdGVu
ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGRpZEFjY2VwdChDb25uZWN0
aW9uSUQgYWNjZXB0ZWRJRCwgQ29ubmVjdGlvbklEIGxpc3RlbmVySUQsIFNvY2tldDo6RG9tYWlu
KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZShDb25uZWN0aW9uSUQpID0gMDsK
ICAgICB9OwogCkBAIC01NCwxMiArNTksMTQgQEAgcHVibGljOgogICAgIH5SZW1vdGVJbnNwZWN0
b3JTb2NrZXRFbmRwb2ludCgpOwogCiAgICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBjb25uZWN0
SW5ldChjb25zdCBjaGFyKiBzZXJ2ZXJBZGRyLCB1aW50MTZfdCBzZXJ2ZXJQb3J0LCBDbGllbnQm
KTsKLSAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IGxpc3RlbkluZXQoY29uc3QgY2hhciogYWRk
cmVzcywgdWludDE2X3QgcG9ydCwgQ2xpZW50Jik7CisgICAgT3B0aW9uYWw8Q29ubmVjdGlvbklE
PiBsaXN0ZW5JbmV0KGNvbnN0IGNoYXIqIGFkZHJlc3MsIHVpbnQxNl90IHBvcnQsIExpc3RlbmVy
JiwgQ2xpZW50Jik7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2xpZW50KENsaWVudCYpOworICAgIHZv
aWQgaW52YWxpZGF0ZUxpc3RlbmVyKExpc3RlbmVyJik7CiAKICAgICB2b2lkIHNlbmQoQ29ubmVj
dGlvbklELCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QpOwogCiAgICAgT3B0aW9uYWw8Q29u
bmVjdGlvbklEPiBjcmVhdGVDbGllbnQoUGxhdGZvcm1Tb2NrZXRUeXBlLCBDbGllbnQmKTsKKyAg
ICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IGNyZWF0ZUxpc3RlbmVyKFBsYXRmb3JtU29ja2V0VHlw
ZSwgTGlzdGVuZXImLCBDbGllbnQmKTsKIAogICAgIE9wdGlvbmFsPHVpbnQxNl90PiBnZXRQb3J0
KENvbm5lY3Rpb25JRCkgY29uc3Q7CiAKQEAgLTc2LDggKzgzLDEyIEBAIHByb3RlY3RlZDoKICAg
ICAgICAgUGxhdGZvcm1Tb2NrZXRUeXBlIHNvY2tldCB7IElOVkFMSURfU09DS0VUX1ZBTFVFIH07
CiAgICAgICAgIFBvbGxpbmdEZXNjcmlwdG9yIHBvbGw7CiAgICAgICAgIENsaWVudCYgY2xpZW50
OworICAgICAgICBMaXN0ZW5lciogbGlzdGVuZXIgeyB9OwogICAgIH07CiAKKyAgICBDb25uZWN0
aW9uSUQgZ2VuZXJhdGVDb25uZWN0aW9uSUQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29ubmVj
dGlvbj4gbWFrZUNvbm5lY3Rpb24oUGxhdGZvcm1Tb2NrZXRUeXBlLCBDbGllbnQmKTsKKwogICAg
IHZvaWQgcmVjdklmRW5hYmxlZChDb25uZWN0aW9uSUQpOwogICAgIHZvaWQgc2VuZElmRW5hYmxl
ZChDb25uZWN0aW9uSUQpOwogICAgIHZvaWQgd29ya2VyVGhyZWFkKCk7CkBAIC04Nyw2ICs5OCw3
IEBAIHByb3RlY3RlZDoKIAogICAgIG11dGFibGUgTG9jayBtX2Nvbm5lY3Rpb25zTG9jazsKICAg
ICBIYXNoTWFwPENvbm5lY3Rpb25JRCwgc3RkOjp1bmlxdWVfcHRyPENvbm5lY3Rpb24+PiBtX2Nv
bm5lY3Rpb25zOworICAgIEhhc2hNYXA8Q29ubmVjdGlvbklELCBzdGQ6OnVuaXF1ZV9wdHI8Q29u
bmVjdGlvbj4+IG1fbGlzdGVuZXJzOwogCiAgICAgUGxhdGZvcm1Tb2NrZXRUeXBlIG1fd2FrZXVw
U2VuZFNvY2tldCB7IElOVkFMSURfU09DS0VUX1ZBTFVFIH07CiAgICAgUGxhdGZvcm1Tb2NrZXRU
eXBlIG1fd2FrZXVwUmVjZWl2ZVNvY2tldCB7IElOVkFMSURfU09DS0VUX1ZBTFVFIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IGIyOGZjYjZiYjA5Li4wMWMxYTAwODA1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAxOS0xMC0wOSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29ueS5jb20+CisK
KyAgICAgICAgW1dpbkNhaXJvXSBNb3ZlIHJlbW90ZSBjb21tdW5pY2F0aW9uIGhhbmRsaW5nIGZy
b20gUmVtb3RlSW5zcGVjdG9yU2VydmVyIHRvIFJlbW90ZUluc3BlY3Rvci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjc2MworCisgICAgICAgIFJl
dmlld2VkIGJ5IFJvc3MgS2lyc2xpbmcuCisKKyAgICAgICAgUmVtb3ZlIGRlbGV0ZWQgbWV0aG9k
IGludm9jYXRpb25zLgorCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdp
bi5jcHA6CisgICAgICAgIChXZWJLaXQ6OmluaXRpYWxpemVSZW1vdGVJbnNwZWN0b3JTZXJ2ZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKToK
KwogMjAxOS0xMC0wOSAgeW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHRlc3RSdW5uZXIuc2V0V2ViUlRDVW5pZmllZFBsYW5FbmFibGVkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1Bvb2xXaW4uY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNwcAppbmRleCA3
ZmEwODBiNGY2MS4uMThmOWU5MzkzMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNwcApAQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplUmVtb3RlSW5zcGVjdG9yU2VydmVyKFN0cmluZ1ZpZXcgYWRkcmVzcykKICAg
ICBpZiAoIXBvcnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yU2VydmVyOjpzaW5nbGV0b24oKS5zZXRCYWNrZW5kQ29tbWFuZHNQYXRoKGJhY2tlbmRD
b21tYW5kc1BhdGgoKSk7CisgICAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRv
bigpLnNldEJhY2tlbmRDb21tYW5kc1BhdGgoYmFja2VuZENvbW1hbmRzUGF0aCgpKTsKICAgICBJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNlcnZlcjo6c2luZ2xldG9uKCkuc3RhcnQoaG9zdC51
dGY4KCkuZGF0YSgpLCBwb3J0LnZhbHVlKCkpOwogfQogI2VuZGlmCkBAIC03MywxMSArNzMsOCBA
QCBzdGF0aWMgdm9pZCBpbml0aWFsaXplUmVtb3RlSW5zcGVjdG9yU2VydmVyKFN0cmluZ1ZpZXcg
YWRkcmVzcykKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiAj
aWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgaWYgKGNvbnN0IGNoYXIqIGFkZHJlc3Mg
PSBnZXRlbnYoIldFQktJVF9JTlNQRUNUT1JfU0VSVkVSIikpIHsKKyAgICBpZiAoY29uc3QgY2hh
ciogYWRkcmVzcyA9IGdldGVudigiV0VCS0lUX0lOU1BFQ1RPUl9TRVJWRVIiKSkKICAgICAgICAg
aW5pdGlhbGl6ZVJlbW90ZUluc3BlY3RvclNlcnZlcihhZGRyZXNzKTsKLSAgICAgICAgYXV0byBw
b3J0ID0gSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JTZXJ2ZXI6OnNpbmdsZXRvbigpLmxpc3Rl
bkZvclRhcmdldHMoKTsKLSAgICAgICAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNldFNl
cnZlclBvcnQocG9ydC52YWx1ZU9yKDApKTsKLSAgICB9CiAjZW5kaWYKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>