<?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>187968</bug_id>
          
          <creation_ts>2018-07-24 12:26:40 -0700</creation_ts>
          <short_desc>Refactoring: make DFG::Plan a class.</short_desc>
          <delta_ts>2018-07-24 16:15:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</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>1444782</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-07-24 12:26:40 -0700</bug_when>
    <thetext>Let&apos;s make all the fields private, and provide accessor methods for them.  This makes it easier to reason about how these fields are used and modified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444793</commentid>
    <comment_count>1</comment_count>
      <attachid>345702</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-07-24 12:40:18 -0700</bug_when>
    <thetext>Created attachment 345702
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444794</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-07-24 12:42:17 -0700</bug_when>
    <thetext>Attachment 345702 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:139:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:140:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:141:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:142:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:143:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:144:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:145:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:146:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:147:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:148:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:149:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:224:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 12 in 39 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444797</commentid>
    <comment_count>3</comment_count>
      <attachid>345702</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-07-24 12:48:27 -0700</bug_when>
    <thetext>Comment on attachment 345702
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:574
&gt; +                if (!isFTL(m_graph.m_plan.mode()))

might be nice to have a function like:

bool Plan::isFTL()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444817</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-07-24 13:33:20 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; Comment on attachment 345702 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=345702&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:574
&gt; &gt; +                if (!isFTL(m_graph.m_plan.mode()))
&gt; 
&gt; might be nice to have a function like:
&gt; 
&gt; bool Plan::isFTL()

Good suggestion.  I&apos;ll make the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444852</commentid>
    <comment_count>5</comment_count>
      <attachid>345717</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-07-24 15:03:29 -0700</bug_when>
    <thetext>Created attachment 345717
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444854</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-07-24 15:05:27 -0700</bug_when>
    <thetext>Attachment 345717 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:139:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:140:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:141:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:142:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:143:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:144:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:145:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:146:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:147:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:148:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:149:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:224:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 12 in 40 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444873</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-07-24 16:14:44 -0700</bug_when>
    <thetext>Landed in r234178: &lt;http://trac.webkit.org/r234178&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444874</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-24 16:15:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/42560897&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345702</attachid>
            <date>2018-07-24 12:40:18 -0700</date>
            <delta_ts>2018-07-24 15:03:29 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-187968.patch</filename>
            <type>text/plain</type>
            <size>99304</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjM0MTYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NiBA
QAorMjAxOC0wNy0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3Jpbmc6IG1ha2UgREZHOjpQbGFuIGEgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODc5NjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGFsbCB0aGUgREZH
OjpQbGFuIGZpZWxkcyBwcml2YXRlLCBhbmQgcHJvdmlkZSBhY2Nlc3NvciBtZXRob2RzCisgICAg
ICAgIGZvciB0aGVtLiAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVhc29uIGFib3V0IGhvdyB0
aGVzZSBmaWVsZHMgYXJlIHVzZWQgYW5kCisgICAgICAgIG1vZGlmaWVkLgorCisgICAgICAgICog
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpY0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVET01KSVRHZXR0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVNb2R1bGVOYW1lc3BhY2VMb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZBUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6Omlu
amVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNp
dGlvbik6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9s
ZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0ZpbmFs
aXplci5oOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmZpeHVwQ29tcGFyZVN0cmljdEVxQW5kU2FtZVZhbHVlKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OndhdGNoQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6aW5mZXJyZWRUeXBlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cmVxdWlyZWRS
ZWdpc3RlckNvdW50Rm9yRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnJlZ2lzdGVy
RnJvemVuVmFsdWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cmVnaXN0ZXJTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckFuZFdhdGNoU3RydWN0dXJl
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFzc2VydElzUmVnaXN0ZXJl
ZCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aWRlbnRpZmllcnMpOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp3YXRjaHBvaW50cyk6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SklUQ29t
cGlsZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmRpc2Fzc2VtYmxlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkV2Vha1JlZmVyZW5jZSk6CisgICAgICAgICog
ZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVy
OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9u
KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAqIGRmZy9ERkdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGhhc2U6OmJlZ2luUGhh
c2UpOgorICAgICAgICAqIGRmZy9ERkdQaGFzZS5oOgorICAgICAgICAoSlNDOjpERkc6OnJ1bkFu
ZExvZyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OlBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXB1dGVDb21waWxlVGltZXMg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnJlcG9ydENvbXBpbGVUaW1lcyBjb25z
dCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAg
KEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjppc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnJlYWxseUFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6bm90aWZ5Q29tcGlsaW5nKToKKyAgICAgICAg
KEpTQzo6REZHOjpQbGFuOjpub3RpZnlSZWFkeSk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6
ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmtleSk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmZpbmFsaXplSW5HQyk6CisgICAgICAg
IChKU0M6OkRGRzo6UGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MpOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OmNhbmNlbCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2xlYW5NdXN0
SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6UGxhbjo6Y2FuVGllclVwQW5kT1NSRW50ZXIgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OnZtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpj
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1vZGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46Om9zckVudHJ5Qnl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRGRzo6UGxhbjo6bXVzdEhhbmRsZVZhbHVlcyBjb25zdCk6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6dGhyZWFkRGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6
Y29tcGlsYXRpb24gY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmZpbmFsaXplciBj
b25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6c2V0RmluYWxpemVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpQbGFuOjppbmxpbmVDYWxsRnJhbWVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
REZHOjpQbGFuOjp3YXRjaHBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6aWRlbnRp
ZmllcnMpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OndlYWtSZWZlcmVuY2VzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQbGFuOjp0cmFuc2l0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6cmVjb3JkZWRTdGF0dXNlcyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6d2lsbFRyeVRv
VGllclVwIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpzZXRXaWxsVHJ5VG9UaWVy
VXApOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnRpZXJVcEluTG9vcEhpZXJhcmNoeSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UGxhbjo6dGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXMpOgorICAg
ICAgICAoSlNDOjpERkc6OlBsYW46OnN0YWdlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQ
bGFuOjpjYWxsYmFjayBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6c2V0Q2FsbGJh
Y2spOgorICAgICAgICAqIGRmZy9ERkdQbGFuSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MpOgorICAgICAgICAqIGRmZy9ERkdQcmVjaXNl
TG9jYWxDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJl
cml6ZUFkYXB0b3I6OnJlYWRUb3ApOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHU2FmZXBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTYWZlcG9pbnQ6OlNhZmVwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50
Ojp+U2FmZXBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OmJlZ2luKToKKyAg
ICAgICAgKiBkZmcvREZHU2FmZXBvaW50Lmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6VHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaXNvbmVkUG9pbnRlcik6CisgICAgICAgICogZGZnL0RGR1N0YWNrTGF5
b3V0UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAq
IGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpUaWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lz
dGluZ1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JFbnRyaWVzKToKKyAgICAgICAgKiBk
ZmcvREZHV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0Ojppc0FjdGl2
ZUZvclZNIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Y29tcGlsYXRpb25T
dGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9y
Vk1BcmVSZWFkeSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5
UGxhbnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVh
ZHlQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6dmlzaXRXZWFrUmVm
ZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyk6
CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9y
Vk0pOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6CisgICAgICAgICogZnRsL0ZU
TENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0
bC9GVExGYWlsLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpmYWlsKToKKyAgICAgICAgKiBmdGwv
RlRMSklURmluYWxpemVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZp
bmFsaXplQ29tbW9uKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YnVpbGRFeGl0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWRkV2Vha1JlZmVyZW5j
ZSk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTdGF0
ZTo6U3RhdGUpOgorCiAyMDE4LTA3LTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
IAogICAgICAgICBQbGFjYXRlIGV4Y2VwdGlvbiBjaGVjayB2ZXJpZmljYXRpb24gYWZ0ZXIgcmVj
ZW50IGNoYW5nZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMzQxNjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzOTUsOCArMzM5NSw4IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5t
ZXJnZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxIHx8IGlzRlRM
KG1fZ3JhcGgubV9wbGFuLm1vZGUpKQorCisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1W
YXJpYW50cygpID09IDEgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSgpKSkKICAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNp
b24gMjM0MTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzgsOCArMTIzOCw4IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnMKICAgICAvLyBJZiB3ZSBoYXZlIHByb2ZpbGluZyBp
bmZvcm1hdGlvbiBhYm91dCB0aGlzIGNhbGwsIGFuZCBpdCBkaWQgbm90IGJlaGF2ZSB0b28gcG9s
eW1vcnBoaWNhbGx5LAogICAgIC8vIHdlIG1heSBiZSBhYmxlIHRvIGlubGluZSBpdCwgb3IgaW4g
dGhlIGNhc2Ugb2YgcmVjdXJzaXZlIHRhaWwgY2FsbHMgdHVybiBpdCBpbnRvIGEganVtcC4KICAg
ICBpZiAoY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewotICAgICAgICBhZGRUb0dyYXBo
KEZpbHRlckNhbGxMaW5rU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0
dXNlcy5hZGRDYWxsTGlua1N0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBjYWxsTGlua1N0YXR1
cykpLCBjYWxsVGFyZ2V0KTsKLSAgICAgICAgCisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyQ2Fs
bExpbmtTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
Q2FsbExpbmtTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgY2FsbExpbmtTdGF0dXMpKSwgY2Fs
bFRhcmdldCk7CisKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCA9IHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgYXV0byBv
cHRpbWl6YXRpb25SZXN1bHQgPSBoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNh
bGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgdGhpc0FyZ3VtZW50LAogICAgICAgICAgICAg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG1fY3VycmVudEluZGV4ICsgaW5zdHJ1Y3Rpb25T
aXplLCBvcCwga2luZCwgcHJlZGljdGlvbik7CkBAIC0xMjgzLDggKzEyODMsOCBAQCBCeXRlQ29k
ZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzCiAgICAgVkVSQk9TRV9MT0coIiAgICBW
YXJhcmdzIGNhbGwgbGluayBzdGF0dXMgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwg
Y2FsbExpbmtTdGF0dXMsICJcbiIpOwogICAgIAogICAgIGlmIChjYWxsTGlua1N0YXR1cy5jYW5P
cHRpbWl6ZSgpKSB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyQ2FsbExpbmtTdGF0dXMsIE9w
SW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzLmFkZENhbGxMaW5rU3RhdHVzKGN1
cnJlbnRDb2RlT3JpZ2luKCksIGNhbGxMaW5rU3RhdHVzKSksIGNhbGxUYXJnZXQpOwotICAgICAg
ICAKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJDYWxsTGlua1N0YXR1cywgT3BJbmZvKG1fZ3Jh
cGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRDYWxsTGlua1N0YXR1cyhjdXJyZW50Q29k
ZU9yaWdpbigpLCBjYWxsTGlua1N0YXR1cykpLCBjYWxsVGFyZ2V0KTsKKwogICAgICAgICBpZiAo
aGFuZGxlVmFyYXJnc0lubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwKICAgICAgICAgICAgIGNh
bGxMaW5rU3RhdHVzLCBmaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSwgVmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50cyksCiAgICAgICAgICAgICBmaXJzdFZhckFyZ09mZnNldCwg
b3AsCkBAIC0xOTE1LDcgKzE5MTUsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlv
blJlc3VsdCBCCiAgICAgLy8gdGhlIERGRy4gQW5kIGJ5IHBvbHl2YXJpYW50IHByb2ZpbGluZyB3
ZSBtZWFuIHBvbHl2YXJpYW50IHByb2ZpbGluZyBvZiAqdGhpcyogY2FsbC4gTm90ZSB0aGF0CiAg
ICAgLy8gd2UgY291bGQgaW1wcm92ZSB0aGF0IGFzcGVjdCBvZiB0aGlzIGJ5IGRvaW5nIHBvbHlt
b3JwaGljIGlubGluaW5nIGJ1dCBoYXZpbmcgdGhlIHByb2ZpbGluZwogICAgIC8vIGFsc28uCi0g
ICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6dXNlUG9seW1v
cnBoaWNDYWxsSW5saW5pbmcoKSkgeworICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9k
ZSgpKSB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcoKSkgewogICAgICAg
ICBWRVJCT1NFX0xPRygiQmFpbGluZyBpbmxpbmluZyAoaGFyZCkuXG5TdGFjazogIiwgY3VycmVu
dENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgICAgIHJldHVybiBDYWxsT3B0aW1pemF0aW9uUmVz
dWx0OjpEaWROb3RoaW5nOwogICAgIH0KQEAgLTI4MDcsNyArMjgwNyw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwKIAogICAgIGNhc2UgRlRMVHJ1ZUludHJpbnNp
YzogewogICAgICAgICBpbnNlcnRDaGVja3MoKTsKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwganNDb25zdGFudChqc0Jvb2xlYW4oaXNGVEwobV9ncmFwaC5tX3Bs
YW4ubW9kZSkpKSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCks
IGpzQ29uc3RhbnQoanNCb29sZWFuKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSkpKSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCkBAIC0yODIxLDcgKzI4MjEsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgY2FzZSBJc0Zp
bmFsVGllckludHJpbnNpYzogewogICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwKLSAgICAgICAgICAgIGpzQ29uc3RhbnQo
anNCb29sZWFuKE9wdGlvbnM6OnVzZUZUTEpJVCgpID8gaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9k
ZSkgOiB0cnVlKSkpOworICAgICAgICAgICAganNDb25zdGFudChqc0Jvb2xlYW4oT3B0aW9uczo6
dXNlRlRMSklUKCkgPyBpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKCkpIDogdHJ1ZSkpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKQEAgLTMxNjcsNyArMzE2Nyw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwKICAgICBjYXNlIENQVUNw
dWlkSW50cmluc2ljOgogICAgIGNhc2UgQ1BVUGF1c2VJbnRyaW5zaWM6IHsKICNpZiBDUFUoWDg2
XzY0KQotICAgICAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQorICAgICAgICBp
ZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGluc2VydENoZWNrcygpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KHJlc3VsdE9wZXJhbmQpLApAQCAtMzMzNSw3ICszMzM1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlRE9NSklUR2V0dGVyKAogICAgIGFkZFRvR3JhcGgoQ2hlY2tTdWJDbGFzcywgT3BJ
bmZvKGRvbUF0dHJpYnV0ZS5jbGFzc0luZm8pLCB0aGlzTm9kZSk7CiAgICAgCiAgICAgYm9vbCB3
YXNTZWVuSW5KSVQgPSB0cnVlOwotICAgIGFkZFRvR3JhcGgoRmlsdGVyR2V0QnlJZFN0YXR1cywg
T3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMuYWRkR2V0QnlJZFN0YXR1cyhj
dXJyZW50Q29kZU9yaWdpbigpLCBHZXRCeUlkU3RhdHVzKEdldEJ5SWRTdGF0dXM6OkN1c3RvbSwg
d2FzU2VlbkluSklULCB2YXJpYW50KSkpLCB0aGlzTm9kZSk7CisgICAgYWRkVG9HcmFwaChGaWx0
ZXJHZXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygp
LmFkZEdldEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgR2V0QnlJZFN0YXR1cyhHZXRC
eUlkU3RhdHVzOjpDdXN0b20sIHdhc1NlZW5JbkpJVCwgdmFyaWFudCkpKSwgdGhpc05vZGUpOwog
CiAgICAgQ2FsbERPTUdldHRlckRhdGEqIGNhbGxET01HZXR0ZXJEYXRhID0gbV9ncmFwaC5tX2Nh
bGxET01HZXR0ZXJEYXRhLmFkZCgpOwogICAgIGNhbGxET01HZXR0ZXJEYXRhLT5jdXN0b21BY2Nl
c3NvckdldHRlciA9IHZhcmlhbnQuY3VzdG9tQWNjZXNzb3JHZXR0ZXIoKTsKQEAgLTMzNjcsOCAr
MzM2Nyw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1vZHVsZU5hbWVzcGEKICAgICBp
ZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgQmFkQ2VsbCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhZGRUb0dyYXBoKENo
ZWNrQ2VsbCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGdldEJ5SWQubW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KCkpKSwgRWRnZShiYXNlLCBDZWxsVXNlKSk7Ci0gICAgCi0gICAgYWRkVG9HcmFwaChGaWx0
ZXJHZXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcy5h
ZGRHZXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIGdldEJ5SWQpKSwgYmFzZSk7CisK
KyAgICBhZGRUb0dyYXBoKEZpbHRlckdldEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxh
bi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkR2V0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBnZXRCeUlkKSksIGJhc2UpOwogCiAgICAgLy8gSWRlYWxseSB3ZSB3b3VsZG4ndCBoYXZlIHRv
IGRvIHRoaXMgUGhhbnRvbS4gQnV0OgogICAgIC8vCkBAIC00MDI5LDE2ICs0MDI5LDE2IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgLy8gR2V0QnlJZFN0YXR1cy4g
VGhhdCBtZWFucyB0aGF0IHRoZSBjb25zdGFudCBmb2xkZXIgYWxzbyBuZWVkcyB0byBkbyB0aGUg
c2FtZSEKICAgICAKICAgICBpZiAoZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewot
ICAgICAgICBpZiAoZ2V0QnlJZFN0YXR1cy5tYWtlc0NhbGxzKCkgfHwgIWlzRlRMKG1fZ3JhcGgu
bV9wbGFuLm1vZGUpCisgICAgICAgIGlmIChnZXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSB8fCAh
aXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSgpKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6OnVz
ZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQogICAgICAgICAgICAgfHwgZ2V0QnlJZFN0YXR1
cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xp
c3RTaXplKCkpIHsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25P
cGVyYW5kKSwKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVu
dGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyR2V0
QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMuYWRkR2V0
QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBnZXRCeUlkU3RhdHVzKSksIGJhc2UpOwot
ICAgICAgICAKKworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlckdldEJ5SWRTdGF0dXMsIE9wSW5m
byhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkR2V0QnlJZFN0YXR1cyhjdXJy
ZW50Q29kZU9yaWdpbigpLCBnZXRCeUlkU3RhdHVzKSksIGJhc2UpOworCiAgICAgICAgIFZlY3Rv
cjxNdWx0aUdldEJ5T2Zmc2V0Q2FzZSwgMj4gY2FzZXM7CiAgICAgICAgIAogICAgICAgICAvLyAx
KSBFbWl0IHByb3RvdHlwZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBhbGwgY2hhaW5zLiBUaGlzIGNv
dWxkIHNvcnQgb2YgbWF5YmUgbm90IGJlCkBAIC00MDgxLDggKzQwODEsOCBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
YWRkVG9HcmFwaChGaWx0ZXJHZXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVj
b3JkZWRTdGF0dXNlcy5hZGRHZXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIGdldEJ5
SWRTdGF0dXMpKSwgYmFzZSk7Ci0gICAgCisgICAgYWRkVG9HcmFwaChGaWx0ZXJHZXRCeUlkU3Rh
dHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZEdldEJ5SWRT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgZ2V0QnlJZFN0YXR1cykpLCBiYXNlKTsKKwogICAg
IEFTU0VSVChnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CiAgICAgR2V0QnlJZFZh
cmlhbnQgdmFyaWFudCA9IGdldEJ5SWRTdGF0dXNbMF07CiAgICAgCkBAIC00MTc1LDcgKzQxNzUs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIH0KICAgICAKICAg
ICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIWlz
RlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8IHB1dEJ5SWRTdGF0dXMubWFrZXNDYWxscygpCisg
ICAgICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSgpKSB8fCBwdXRCeUlkU3RhdHVz
Lm1ha2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3JwaGljQWNj
ZXNzSW5saW5pbmcoKQogICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygp
ID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKICAg
ICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRC
eUlkU3RhdHVzLCBpc0RpcmVjdCk7CkBAIC00MTk1LDggKzQxOTUsOCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAKICAgICAgICAgaWYgKFVOTElLRUxZKG1f
Z3JhcGguY29tcGlsYXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCkt
Pm5vdGljZUlubGluZWRQdXRCeUlkKCk7Ci0gICAgICAgIAotICAgICAgICBhZGRUb0dyYXBoKEZp
bHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2Vz
LmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBi
YXNlKTsKKworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyht
X2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50
Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOwogCiAgICAgICAgIGZvciAoY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCkpIHsK
ICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUodmFyaWFudC5yZXF1aXJl
ZFR5cGUoKSk7CkBAIC00MjE4LDggKzQyMTgsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRCeUlkKAogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkpIHsKICAgICBjYXNl
IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0
QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMuYWRkUHV0
QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOwot
ICAgICAgICAKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVu
dENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKwogICAgICAgICBzdG9yZShi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9ncmFwaC5jb21waWxh
dGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwpAQCAtNDIyNyw4ICs0MjI3LDggQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAgCiAgICAgY2FzZSBQ
dXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1
dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzLmFkZFB1
dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsK
LSAgICAgICAgCisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZv
KG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKGN1cnJl
bnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisKICAgICAgICAgYWRkVG9H
cmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlh
bnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5j
b25kaXRpb25TZXQoKSkpIHsKICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZp
ZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CkBAIC00Mjk2LDggKzQy
OTYsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0dGVyOiB7Ci0gICAgICAgIGFkZFRvR3Jh
cGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3Rh
dHVzZXMuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVz
KSksIGJhc2UpOwotICAgICAgICAKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3Rh
dHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKwogICAg
ICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQoU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRp
Zmllck51bWJlciwgdmFyaWFudCk7CiAgICAgICAgIGlmICghbG9hZGVkVmFsdWUpIHsKICAgICAg
ICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlk
U3RhdHVzLCBpc0RpcmVjdCk7CkBAIC01NjQ4LDcgKzU2NDgsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Y2F0Y2gpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX3BsYW4u
bW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
cGxhbi5tb2RlKCkgPT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CiAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY2F0Y2gpOwogICAgICAgICAgICAgfQogCkBAIC02NDk1LDggKzY0OTUsOCBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGFsbE9LKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoRmlsdGVySW5CeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVj
b3JkZWRTdGF0dXNlcy5hZGRJbkJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgc3RhdHVz
KSksIGJhc2UpOwotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChGaWx0ZXJJbkJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRl
ZFN0YXR1c2VzKCkuYWRkSW5CeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHN0YXR1cykp
LCBiYXNlKTsKKwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBtYXRjaCA9IGFkZFRvR3JhcGgo
TWF0Y2hTdHJ1Y3R1cmUsIE9wSW5mbyhkYXRhKSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIG1h
dGNoKTsKICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5fYnlfaWQpOwpAQCAt
NjY5OSw4ICs2Njk5LDggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGlu
ZQogICAgICAgICAvLyBJbmxpbmUgY2FzZS4KICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAhPSBi
eXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2spOwogICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZy
YW1lU3RhcnQuaXNWYWxpZCgpKTsKLSAgICAgICAgCi0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1l
ID0gYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV9wbGFuLmlubGluZUNhbGxGcmFtZXMtPmFkZCgp
OworCisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgu
bV9wbGFuLmlubGluZUNhbGxGcmFtZXMoKS0+YWRkKCk7CiAgICAgICAgIG1fb3B0aW1pemVkQ29u
dGV4dC5pbmxpbmVDYWxsRnJhbWUgPSBtX2lubGluZUNhbGxGcmFtZTsKIAogICAgICAgICAvLyBU
aGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFscmVhZHkgaGF2ZSBh
IGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQpAQCAtNjc3Niw3ICs2Nzc2LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgIH0KICAgICAKICAgICBpZiAoVU5MSUtF
TFkoT3B0aW9uczo6ZHVtcFNvdXJjZUF0REZHVGltZSgpKSkgewotICAgICAgICBWZWN0b3I8RGVm
ZXJyZWRTb3VyY2VEdW1wPiYgZGVmZXJyZWRTb3VyY2VEdW1wID0gbV9ncmFwaC5tX3BsYW4uY2Fs
bGJhY2stPmVuc3VyZURlZmVycmVkU291cmNlRHVtcCgpOworICAgICAgICBWZWN0b3I8RGVmZXJy
ZWRTb3VyY2VEdW1wPiYgZGVmZXJyZWRTb3VyY2VEdW1wID0gbV9ncmFwaC5tX3BsYW4uY2FsbGJh
Y2soKS0+ZW5zdXJlRGVmZXJyZWRTb3VyY2VEdW1wKCk7CiAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUoKSkgewogICAgICAgICAgICAgRGVmZXJyZWRTb3VyY2VEdW1wIGR1bXAoY29kZUJsb2Nr
LT5iYXNlbGluZVZlcnNpb24oKSwgbV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCwgaW5saW5l
Q2FsbEZyYW1lKCktPmRpcmVjdENhbGxlcik7CiAgICAgICAgICAgICBkZWZlcnJlZFNvdXJjZUR1
bXAuYXBwZW5kKGR1bXApOwpAQCAtNjg3MCw3ICs2ODcwLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2UoKQogICAgIGlmIChtX2hhc0FueUZvcmNlT1NSRXhpdHMpIHsKICAgICAgICAgQmxv
Y2tTZXQgYmxvY2tzVG9JZ25vcmU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGlmIChibG9jay0+
aXNPU1JUYXJnZXQgJiYgYmxvY2stPmJ5dGVjb2RlQmVnaW4gPT0gbV9ncmFwaC5tX3BsYW4ub3Ny
RW50cnlCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoYmxvY2stPmlzT1NSVGFyZ2V0
ICYmIGJsb2NrLT5ieXRlY29kZUJlZ2luID09IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNv
ZGVJbmRleCgpKSB7CiAgICAgICAgICAgICAgICAgYmxvY2tzVG9JZ25vcmUuYWRkKGJsb2NrKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAyMzQxNjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsOCArNTcsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fcmVmQ291bnRT
dGF0ZSA9PSBFdmVyeXRoaW5nSXNMaXZlKTsKICAgICAgICAgCiAgICAgICAgIG1fY291bnQgPSAw
OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fdmVyYm9zZSAmJiAhc2hvdWxkRHVtcEdyYXBoQXRF
YWNoUGhhc2UobV9ncmFwaC5tX3BsYW4ubW9kZSkpIHsKKworICAgICAgICBpZiAobV92ZXJib3Nl
ICYmICFzaG91bGREdW1wR3JhcGhBdEVhY2hQaGFzZShtX2dyYXBoLm1fcGxhbi5tb2RlKCkpKSB7
CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgQ0ZBOlxuIik7CiAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChibG9j
ay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgp
CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IG1fZ3JhcGgubV9w
bGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSByZWNvcmQgdGhhdCB0
aGUgYmxvY2sgbmVlZHMgc29tZSBPU1Igc3R1ZmYsIGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHlldC4g
V2Ugd2FudCB0bwpAQCAtMTU2LDkgKzE1NiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZGF0
YUxvZygiICAgRm91bmQgbXVzdC1oYW5kbGUgYmxvY2s6ICIsICpibG9jaywgIlxuIik7CiAgICAg
ICAgIAogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgICAgICBpbnQgb3BlcmFuZCA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMub3Bl
cmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgubV9w
bGFuLm11c3RIYW5kbGVWYWx1ZXNbaV07CisgICAgICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+
JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5k
ZXgoaSk7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsK
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQo
b3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgICAgICBpZiAo
bV92ZXJib3NlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgJKHJldmlzaW9uIDIzNDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNyArNTIwLDcgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3Vt
ZW50czoKICAgICAgICAgLy8gREZHIGJhY2tlbmQgcmVxdWlyZXMgdGhhdCB0aGUgbG9jYWxzIHRo
YXQgdGhpcyByZWFkcyBhcmUgZmx1c2hlZC4gRlRMIGJhY2tlbmQgY2FuIGhhbmRsZSB0aG9zZQog
ICAgICAgICAvLyBsb2NhbHMgYmVpbmcgcHJvbW90ZWQuCi0gICAgICAgIGlmICghaXNGVEwoZ3Jh
cGgubV9wbGFuLm1vZGUpKQorICAgICAgICBpZiAoIWlzRlRMKGdyYXBoLm1fcGxhbi5tb2RlKCkp
KQogICAgICAgICAgICAgcmVhZChTdGFjayk7CiAgICAgICAgIAogICAgICAgICAvLyBFdmVuIHRo
b3VnaCBpdCdzIHBoYW50b20sIGl0IHN0aWxsIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBvbmUgY2Fu
J3QgYmUgcmVwbGFjZWQgd2l0aCBhbm90aGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAyMzQxNjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIs
NyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgQ29tbW9u
RGF0YTo6bm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihQbGFuJiBwbGFuLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgTm9kZSogbm9kZSkKIHsKLSAgICBwbGFuLnRyYW5zaXRpb25zLmFk
ZExhemlseSgKKyAgICBwbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KAogICAgICAgICBjb2Rl
QmxvY2ssCiAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwK
ICAgICAgICAgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy5nZXQoKSwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAyMzQxNjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIG5hbWVzcGFjZSBE
RkcgewogCiBzdHJ1Y3QgTm9kZTsKLXN0cnVjdCBQbGFuOworY2xhc3MgUGxhbjsKIAogLy8gQ29t
bW9uRGF0YSBob2xkcyB0aGUgc2V0IG9mIGRhdGEgdGhhdCBib3RoIERGRyBhbmQgRlRMIGNvZGUg
YmxvY2tzIG5lZWQgdG8ga25vdwogLy8gYWJvdXQgdGhlbXNlbHZlcy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CShyZXZpc2lvbiAyMzQxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgYXV0byBhZGRGaWx0ZXJTdGF0dXMgPSBbJl0gKCkgewog
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVyR2V0QnlJZFN0YXR1
cywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
bV9wbGFuLnJlY29yZGVkU3RhdHVzZXMuYWRkR2V0QnlJZFN0YXR1cyhub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIHN0YXR1cykpLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
bV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRHZXRCeUlkU3RhdHVzKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkKSk7
CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAKQEAgLTU3MCw4ICs1NzAsOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCisKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSkpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZEZp
bHRlclN0YXR1cygpOwpAQCAtNjE3LDggKzYxNyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5udW1WYXJpYW50
cygpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZh
cmlhbnRzKCkgPiAxICYmICFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKKworICAgICAgICAg
ICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA+IDEgJiYgIWlzRlRMKG1fZ3JhcGgubV9w
bGFuLm1vZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwpAQCAtNjUwLDE1ICs2NTAsMTUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBGaWx0ZXJQdXRCeUlkU3RhdHVzLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAg
IE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzLmFkZFB1dEJ5SWRTdGF0dXMo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKKyAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAgICAgICAgICAgIEVkZ2Uo
Y2hpbGQpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51
bVZhcmlhbnRzKCkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlPZmZzZXQo
aW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHN0YXR1c1swXSwgaWRlbnRpZmllck51bWJl
cik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNGVEwobV9ncmFwaC5tX3BsYW4u
bW9kZSkpOworCisgICAgICAgICAgICAgICAgQVNTRVJUKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1v
ZGUoKSkpOwogCiAgICAgICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBt
X2dyYXBoLm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7CiAgICAgICAgICAgICAgICAgZGF0
YS0+dmFyaWFudHMgPSBzdGF0dXMudmFyaWFudHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDIzNDE2MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSw4
IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAKICAgICBSZWY8
UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAogICAgICAgICAqbmV3IFBsYW4oY29kZUJsb2NrLCBwcm9m
aWxlZERGR0NvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxl
VmFsdWVzKSk7Ci0gICAgCi0gICAgcGxhbi0+Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsK
KworICAgIHBsYW4tPnNldENhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoT3B0
aW9uczo6dXNlQ29uY3VycmVudEpJVCgpKSB7CiAgICAgICAgIFdvcmtsaXN0JiB3b3JrbGlzdCA9
IGVuc3VyZUdsb2JhbFdvcmtsaXN0Rm9yKG1vZGUpOwogICAgICAgICBpZiAobG9nQ29tcGlsYXRp
b25DaGFuZ2VzKG1vZGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaW5h
bGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFs
aXplci5oCShyZXZpc2lvbiAyMzQxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotc3RydWN0IFBsYW47CitjbGFzcyBQbGFuOwogCiBj
bGFzcyBGaW5hbGl6ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZpbmFsaXplcik7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMzQxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTA3LDcgKzkw
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbnMuCiAgICAgICAg
ICAgICAgICAgaWYgKCFjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKQogICAgICAgICAgICAg
ICAgICAgICAmJiAhY2hpbGQtPnNob3VsZFNwZWN1bGF0ZUFueUludCgpCi0gICAgICAgICAgICAg
ICAgICAgICYmICEoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlck9yQm9vbGVhbigpICYmIGlz
RlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIShjaGls
ZC0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyT3JCb29sZWFuKCkgJiYgaXNGVEwobV9ncmFwaC5tX3Bs
YW4ubW9kZSgpKSkpCiAgICAgICAgICAgICAgICAgICAgIGJhZE5ld3MgPSB0cnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCkBAIC05MzAsNyArOTMwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlQW55SW50KCkpCiAgICAg
ICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50NTJSZXBVc2U+KGNoaWxkKTsKICAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPnNo
b3VsZFNwZWN1bGF0ZU51bWJlck9yQm9vbGVhbigpICYmIGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1v
ZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPnNob3VsZFNw
ZWN1bGF0ZU51bWJlck9yQm9vbGVhbigpICYmIGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSkp
OwogICAgICAgICAgICAgICAgICAgICBmaXhEb3VibGVPckJvb2xlYW5FZGdlKGNoaWxkKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zNDk3LDcgKzM0OTcsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ29tcGFyZVN0cmlj
dEVxKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiAoKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49IDcp
IHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRT
cGVjdWxhdGVTdHJpbmcoKSAmJiAoKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49IDcpIHx8
IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSkpKSB7CiAgICAgICAgICAgICBmaXhFZGdlPFN0
cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+
KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KENvbXBhcmVTdHJpY3RFcSk7CkBAIC0zNTY5LDEyICszNTY5LDEyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDb21wYXJlU3RyaWN0RXEpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgKChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+
PSA4KSB8fCBpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiAoKEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzID49IDgpIHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSkpKSB7CiAgICAg
ICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ29tcGFyZVN0cmljdEVxKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPnNob3VsZFNw
ZWN1bGF0ZVN0cmluZygpICYmICgoR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPj0gOCkgfHwg
aXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIo
KS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgKChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
cyA+PSA4KSB8fCBpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKCkpKSkgewogICAgICAgICAgICAg
Zml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKENvbXBhcmVTdHJpY3RFcSk7CiAgICAgICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjM0
MTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBkZmdPcE5hbWVzW10g
PSB7CiBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuKQogICAgIDogbV92bSh2bSkKICAg
ICAsIG1fcGxhbihwbGFuKQotICAgICwgbV9jb2RlQmxvY2sobV9wbGFuLmNvZGVCbG9jaykKKyAg
ICAsIG1fY29kZUJsb2NrKG1fcGxhbi5jb2RlQmxvY2soKSkKICAgICAsIG1fcHJvZmlsZWRCbG9j
ayhtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKICAgICAsIG1fc3NhQ0ZHKHN0ZDo6bWFrZV91
bmlxdWU8U1NBQ0ZHPigqdGhpcykpCiAgICAgLCBtX25leHRNYWNoaW5lTG9jYWwoMCkKQEAgLTEw
MjIsMTQgKzEwMjIsMTUgQEAgYm9vbCBHcmFwaDo6d2F0Y2hDb25kaXRpb24oY29uc3QgT2JqZWN0
UAogewogICAgIGlmICgha2V5LmlzV2F0Y2hhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3QoKSk7
CisKKyAgICBEZXNpcmVkV2Vha1JlZmVyZW5jZXMmIHdlYWtSZWZlcmVuY2VzID0gbV9wbGFuLndl
YWtSZWZlcmVuY2VzKCk7CisgICAgd2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGtleS5vYmplY3Qo
KSk7CiAgICAgaWYgKGtleS5oYXNQcm90b3R5cGUoKSkKLSAgICAgICAgbV9wbGFuLndlYWtSZWZl
cmVuY2VzLmFkZExhemlseShrZXkucHJvdG90eXBlKCkpOworICAgICAgICB3ZWFrUmVmZXJlbmNl
cy5hZGRMYXppbHkoa2V5LnByb3RvdHlwZSgpKTsKICAgICBpZiAoa2V5Lmhhc1JlcXVpcmVkVmFs
dWUoKSkKLSAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucmVxdWly
ZWRWYWx1ZSgpKTsKLSAgICAKLSAgICBtX3BsYW4ud2F0Y2hwb2ludHMuYWRkTGF6aWx5KGtleSk7
CisgICAgICAgIHdlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucmVxdWlyZWRWYWx1ZSgpKTsK
KworICAgIG1fcGxhbi53YXRjaHBvaW50cygpLmFkZExhemlseShrZXkpOwogCiAgICAgaWYgKGtl
eS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKQogICAgICAgICBtX3NhZmVU
b0xvYWQuYWRkKHN0ZDo6bWFrZV9wYWlyKGtleS5vYmplY3QoKSwga2V5Lm9mZnNldCgpKSk7CkBA
IC0xMDc2LDEyICsxMDc3LDEyIEBAIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciBHcmFwaDo6aW5m
ZXJyZWQKICAgICAKICAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwgdHlwZURlc2NyaXB0b3Ip
OwogCi0gICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseSh0eXBlT2JqZWN0KTsKKyAg
ICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5hZGRMYXppbHkodHlwZU9iamVjdCk7CiAgICAgcmVn
aXN0ZXJJbmZlcnJlZFR5cGUodHlwZURlc2NyaXB0b3IpOwogCiAgICAgLy8gTm90ZSB0aGF0IHdl
IG1heSBhbHJlYWR5IGJlIHdhdGNoaW5nIHRoaXMgZGVzaXJlZCBpbmZlcnJlZCB0eXBlLCBiZWNh
dXNlIG11bHRpcGxlIHN0cnVjdHVyZXMgbWF5CiAgICAgLy8gcG9pbnQgdG8gdGhlIHNhbWUgSW5m
ZXJyZWRUeXBlIGluc3RhbmNlLgotICAgIG1fcGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoRGVz
aXJlZEluZmVycmVkVHlwZSh0eXBlT2JqZWN0LCB0eXBlRGVzY3JpcHRvcikpOworICAgIG1fcGxh
bi53YXRjaHBvaW50cygpLmFkZExhemlseShEZXNpcmVkSW5mZXJyZWRUeXBlKHR5cGVPYmplY3Qs
IHR5cGVEZXNjcmlwdG9yKSk7CiAKICAgICByZXR1cm4gdHlwZURlc2NyaXB0b3I7CiB9CkBAIC0x
MjI2LDcgKzEyMjcsNyBAQCB1bnNpZ25lZCBHcmFwaDo6c3RhY2tQb2ludGVyT2Zmc2V0KCkKIHVu
c2lnbmVkIEdyYXBoOjpyZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkKIHsKICAgICB1bnNp
Z25lZCBjb3VudCA9IEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKG1fcHJvZmlsZWRCbG9jayk7
Ci0gICAgZm9yIChJbmxpbmVDYWxsRnJhbWVTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW4uaW5s
aW5lQ2FsbEZyYW1lcy0+YmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKKyAgICBmb3IgKElubGlu
ZUNhbGxGcmFtZVNldDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbi5pbmxpbmVDYWxsRnJhbWVzKCkt
PmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gKml0ZXI7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAg
ICAgdW5zaWduZWQgcmVxdWlyZWRDb3VudCA9IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxICsgSklUOjpmcmFtZVJlZ2lzdGVyQ291bnRG
b3IoY29kZUJsb2NrKTsKQEAgLTE0MjYsMTEgKzE0MjcsMTEgQEAgdm9pZCBHcmFwaDo6cmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAg
ICBBU1NFUlQodmFsdWUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgQVNTRVJUKG1fcGxhbi53ZWFr
UmVmZXJlbmNlcy5jb250YWlucyh2YWx1ZS0+c3RydWN0dXJlKCkpKTsKLSAgICAgICAgCisgICAg
ICAgIEFTU0VSVChtX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5jb250YWlucyh2YWx1ZS0+c3RydWN0
dXJlKCkpKTsKKwogICAgICAgICBzd2l0Y2ggKHZhbHVlLT5zdHJlbmd0aCgpKSB7CiAgICAgICAg
IGNhc2UgV2Vha1ZhbHVlOiB7Ci0gICAgICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRk
TGF6aWx5KHZhbHVlLT52YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICAgICAgICAgIG1fcGxhbi53ZWFr
UmVmZXJlbmNlcygpLmFkZExhemlseSh2YWx1ZS0+dmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFN0cm9uZ1ZhbHVlOiB7CkBAIC0x
NTAzLDggKzE1MDQsOCBAQCB2b2lkIEdyYXBoOjpjb252ZXJ0VG9TdHJvbmdDb25zdGFudChOb2Rl
CiAKIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgR3JhcGg6OnJlZ2lzdGVyU3RydWN0dXJlKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVSZWdpc3RyYXRpb25SZXN1bHQmIHJlc3VsdCkKIHsKLSAg
ICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KHN0cnVjdHVyZSk7Ci0gICAgaWYgKG1f
cGxhbi53YXRjaHBvaW50cy5jb25zaWRlcihzdHJ1Y3R1cmUpKQorICAgIG1fcGxhbi53ZWFrUmVm
ZXJlbmNlcygpLmFkZExhemlseShzdHJ1Y3R1cmUpOworICAgIGlmIChtX3BsYW4ud2F0Y2hwb2lu
dHMoKS5jb25zaWRlcihzdHJ1Y3R1cmUpKQogICAgICAgICByZXN1bHQgPSBTdHJ1Y3R1cmVSZWdp
c3RlcmVkQW5kV2F0Y2hlZDsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IFN0cnVjdHVyZVJl
Z2lzdGVyZWROb3JtYWxseTsKQEAgLTE1MTMsOCArMTUxNCw4IEBAIFJlZ2lzdGVyZWRTdHJ1Y3R1
cmUgR3JhcGg6OnJlZ2lzdGVyU3RydWMKIAogdm9pZCBHcmFwaDo6cmVnaXN0ZXJBbmRXYXRjaFN0
cnVjdHVyZVRyYW5zaXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgbV9wbGFuLndl
YWtSZWZlcmVuY2VzLmFkZExhemlseShzdHJ1Y3R1cmUpOwotICAgIG1fcGxhbi53YXRjaHBvaW50
cy5hZGRMYXppbHkoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICBt
X3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5hZGRMYXppbHkoc3RydWN0dXJlKTsKKyAgICBtX3BsYW4u
d2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dCgpKTsKIH0KIAogdm9pZCBHcmFwaDo6YXNzZXJ0SXNSZWdpc3RlcmVkKFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQpAQCAtMTUyMiw5ICsxNTIzLDkgQEAgdm9pZCBHcmFwaDo6YXNzZXJ0SXNSZWdpc3Rl
cmVkKFN0cnVjdHVyZQogICAgIC8vIEl0J3MgY29udmVuaWVudCB0byBiZSBhYmxlIHRvIGNhbGwg
dGhpcyB3aXRoIGEgbWF5YmUtbnVsbCBzdHJ1Y3R1cmUuCiAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAg
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBERkdfQVNTRVJUKCp0aGlzLCBudWxscHRyLCBtX3Bs
YW4ud2Vha1JlZmVyZW5jZXMuY29udGFpbnMoc3RydWN0dXJlKSk7Ci0gICAgCisKKyAgICBERkdf
QVNTRVJUKCp0aGlzLCBudWxscHRyLCBtX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5jb250YWlucyhz
dHJ1Y3R1cmUpKTsKKwogICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKHdhdGNocG9pbnRzKCkuaXNXYXRjaGVkKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAyMzQxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03ODAsMTIgKzc4MCwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIElubGluZVdhdGNocG9pbnRTZXQmIHNldCA9IGdsb2JhbE9iamVjdC0+bnVtYmVy
VG9TdHJpbmdXYXRjaHBvaW50KCk7CiAgICAgICAgIHJldHVybiBpc1dhdGNoaW5nR2xvYmFsT2Jq
ZWN0V2F0Y2hwb2ludChnbG9iYWxPYmplY3QsIHNldCk7CiAgICAgfQotICAgIAotICAgIFByb2Zp
bGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBtX3BsYW4uY29tcGlsYXRp
b24uZ2V0KCk7IH0KLSAgICAKLSAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkg
eyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9Ci0gICAgRGVzaXJlZFdhdGNocG9pbnRzJiB3
YXRjaHBvaW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50czsgfQotICAgIAorCisgICAg
UHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21w
aWxhdGlvbigpOyB9CisKKyAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyBy
ZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzKCk7IH0KKyAgICBEZXNpcmVkV2F0Y2hwb2ludHMmIHdh
dGNocG9pbnRzKCkgeyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzKCk7IH0KKwogICAgIC8vIFJl
dHVybnMgZmFsc2UgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGludmFsaWQgb3IgdW53YXRjaGFibGUu
IElmIHRoaXMgaXMgYSBQcmVzZW5jZSBjb25kaXRpb24sCiAgICAgLy8gdGhpcyBhbHNvIG1ha2Vz
IGl0IGNoZWFwIHRvIHF1ZXJ5IGlmIHRoZSBjb25kaXRpb24gaG9sZHMuIEFsc28gbWFrZXMgc3Vy
ZSB0aGF0IHRoZSBHQyBrbm93cwogICAgIC8vIHdoYXQncyBnb2luZyBvbi4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMzQx
NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBKSVRDb21waWxlcjo6SklUQ29tcGlsZXIoR3Jh
cGgmIGRmZykKICAgICBpZiAoVU5MSUtFTFkoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgbV9n
cmFwaC5tX3ZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxEaXNhc3NlbWJsZXI+KGRmZyk7CiAjaWYgRU5BQkxFKEZUTF9K
SVQpCi0gICAgbV9qaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkgPSBXVEZNb3ZlKG1fZ3Jh
cGgubV9wbGFuLnRpZXJVcEluTG9vcEhpZXJhcmNoeSk7Ci0gICAgZm9yICh1bnNpZ25lZCB0aWVy
VXBCeXRlY29kZSA6IG1fZ3JhcGgubV9wbGFuLnRpZXJVcEFuZE9TUkVudGVyQnl0ZWNvZGVzKQor
ICAgIG1faml0Q29kZS0+dGllclVwSW5Mb29wSGllcmFyY2h5ID0gV1RGTW92ZShtX2dyYXBoLm1f
cGxhbi50aWVyVXBJbkxvb3BIaWVyYXJjaHkoKSk7CisgICAgZm9yICh1bnNpZ25lZCB0aWVyVXBC
eXRlY29kZSA6IG1fZ3JhcGgubV9wbGFuLnRpZXJVcEFuZE9TUkVudGVyQnl0ZWNvZGVzKCkpCiAg
ICAgICAgIG1faml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5hZGQodGllclVwQnl0ZWNvZGUs
IEpJVENvZGU6OlRyaWdnZXJSZWFzb246OkRvbnRUcmlnZ2VyKTsKICNlbmRpZgogfQpAQCAtMTky
LDkgKzE5Miw5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAg
ICBtX2ppdENvZGUtPmNvbW1vbi5mcmFtZVJlZ2lzdGVyQ291bnQgPSBtX2dyYXBoLmZyYW1lUmVn
aXN0ZXJDb3VudCgpOwogICAgIG1faml0Q29kZS0+Y29tbW9uLnJlcXVpcmVkUmVnaXN0ZXJDb3Vu
dEZvckV4aXQgPSBtX2dyYXBoLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKTsKIAotICAg
IGlmICghbV9ncmFwaC5tX3BsYW4uaW5saW5lQ2FsbEZyYW1lcy0+aXNFbXB0eSgpKQotICAgICAg
ICBtX2ppdENvZGUtPmNvbW1vbi5pbmxpbmVDYWxsRnJhbWVzID0gbV9ncmFwaC5tX3BsYW4uaW5s
aW5lQ2FsbEZyYW1lczsKLSAgICAKKyAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlubGluZUNhbGxG
cmFtZXMoKS0+aXNFbXB0eSgpKQorICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5pbmxpbmVDYWxs
RnJhbWVzID0gbV9ncmFwaC5tX3BsYW4uaW5saW5lQ2FsbEZyYW1lcygpOworCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICBtX2ppdENvZGUtPmNvbW1vbi5kb3VibGVDb25zdGFudHMgPSBXVEZN
b3ZlKG1fZ3JhcGgubV9kb3VibGVDb25zdGFudHMpOwogI2VuZGlmCkBAIC00MDYsNyArNDA2LDcg
QEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAKICAgICBhdXRvIGxpbmtCdWZmZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KCp0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKICAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkg
ewotICAgICAgICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZh
aWxlZEZpbmFsaXplcj4obV9ncmFwaC5tX3BsYW4pOworICAgICAgICBtX2dyYXBoLm1fcGxhbi5z
ZXRGaW5hbGl6ZXIoc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KG1fZ3JhcGgubV9w
bGFuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC00MTcsOSArNDE3LDkgQEAg
dm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgY29kZUJsb2NrKCktPnNocmlua1RvRml0
KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAKICAgICBkaXNhc3NlbWJsZSgqbGlua0J1ZmZlcik7
Ci0gICAgCi0gICAgbV9ncmFwaC5tX3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxK
SVRGaW5hbGl6ZXI+KAotICAgICAgICBtX2dyYXBoLm1fcGxhbiwgbV9qaXRDb2RlLnJlbGVhc2VO
b25OdWxsKCksIFdURk1vdmUobGlua0J1ZmZlcikpOworCisgICAgbV9ncmFwaC5tX3BsYW4uc2V0
RmluYWxpemVyKHN0ZDo6bWFrZV91bmlxdWU8SklURmluYWxpemVyPigKKyAgICAgICAgbV9ncmFw
aC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGxpbmtCdWZmZXIp
KSk7CiB9CiAKIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCkBAIC01MTEsNyAr
NTExLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKICAgICAvLyA9PT0g
TGluayA9PT0KICAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZm
ZXI+KCp0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAo
bGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAgICAgICBtX2dyYXBoLm1fcGxh
bi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZhaWxlZEZpbmFsaXplcj4obV9ncmFwaC5t
X3BsYW4pOworICAgICAgICBtX2dyYXBoLm1fcGxhbi5zZXRGaW5hbGl6ZXIoc3RkOjptYWtlX3Vu
aXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KG1fZ3JhcGgubV9wbGFuKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgbGluaygqbGlua0J1ZmZlcik7CkBAIC01MjcsOCArNTI3LDggQEAgdm9pZCBK
SVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8
SlNFbnRyeVB0clRhZz4oYXJpdHlDaGVjayk7CiAKLSAgICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEpJVEZpbmFsaXplcj4oCi0gICAgICAgIG1fZ3JhcGgubV9w
bGFuLCBtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShsaW5rQnVmZmVyKSwgd2l0
aEFyaXR5Q2hlY2spOworICAgIG1fZ3JhcGgubV9wbGFuLnNldEZpbmFsaXplcihzdGQ6Om1ha2Vf
dW5pcXVlPEpJVEZpbmFsaXplcj4oCisgICAgICAgIG1fZ3JhcGgubV9wbGFuLCBtX2ppdENvZGUu
cmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShsaW5rQnVmZmVyKSwgd2l0aEFyaXR5Q2hlY2spKTsK
IH0KIAogdm9pZCBKSVRDb21waWxlcjo6ZGlzYXNzZW1ibGUoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikKQEAgLTUzNyw5ICs1MzcsOSBAQCB2b2lkIEpJVENvbXBpbGVyOjpkaXNhc3NlbWJsZShMaW5r
QnVmZmVyCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1wKGxpbmtCdWZmZXIpOwogICAgICAg
ICBsaW5rQnVmZmVyLmRpZEFscmVhZHlEaXNhc3NlbWJsZSgpOwogICAgIH0KLSAgICAKLSAgICBp
ZiAoVU5MSUtFTFkobV9ncmFwaC5tX3BsYW4uY29tcGlsYXRpb24pKQotICAgICAgICBtX2Rpc2Fz
c2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2dyYXBoLm1fcGxhbi5jb21waWxhdGlvbi5nZXQo
KSwgbGlua0J1ZmZlcik7CisKKyAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5tX3BsYW4uY29tcGls
YXRpb24oKSkpCisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fZ3Jh
cGgubV9wbGFuLmNvbXBpbGF0aW9uKCksIGxpbmtCdWZmZXIpOwogfQogCiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgJKHJldmlzaW9uIDIzNDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJnZXQpCiAgICAgewotICAg
ICAgICBtX2dyYXBoLm1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkodGFyZ2V0KTsKKyAg
ICAgICAgbV9ncmFwaC5tX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5hZGRMYXppbHkodGFyZ2V0KTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlcyhjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZVNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
RmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDIzNDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2
LDExIEBAIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIAogYm9vbCBKSVRGaW5hbGl6
ZXI6OmZpbmFsaXplKCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRh
Zz4gY29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsIEpTRW50cnlQdHJU
YWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSk7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBGSU5BTElaRV9ERkdfQ09E
RSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRv
Q1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrKCksIEpJVENvZGU6
OkRGR0pJVCkpLmRhdGEoKSk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihjb2Rl
UmVmLCBjb2RlUmVmLmNvZGUoKSk7Ci0gICAgCi0gICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklU
Q29kZShtX2ppdENvZGUuY29weVJlZigpKTsKLSAgICAKKworICAgIG1fcGxhbi5jb2RlQmxvY2so
KS0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigpKTsKKwogICAgIGZpbmFsaXplQ29tbW9u
KCk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC03MCwxMCArNzAsMTAgQEAgYm9vbCBKSVRG
aW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dp
dGhBcml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsKICAgICBtX2ppdENvZGUtPmluaXRpYWxpemVD
b2RlUmVmKAotICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5
UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklU
VHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpKS5kYXRhKCkpLAorICAgICAg
ICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJ
VCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29k
ZUJsb2NrKCksIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSksCiAgICAgICAgIG1fd2l0aEFyaXR5
Q2hlY2spOwotICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLmNvcHlS
ZWYoKSk7Ci0gICAgCisgICAgbV9wbGFuLmNvZGVCbG9jaygpLT5zZXRKSVRDb2RlKG1faml0Q29k
ZS5jb3B5UmVmKCkpOworCiAgICAgZmluYWxpemVDb21tb24oKTsKICAgICAKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTgyLDE4ICs4MiwxOCBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5j
dGlvbigpCiB2b2lkIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24oKQogewogICAgIC8vIFNv
bWUgSklUIGZpbmFsaXplcnMgbWF5IGhhdmUgYWRkZWQgbW9yZSBjb25zdGFudHMuIFNocmluay10
by1maXQgdGhvc2UgdGhpbmdzIG5vdy4KLSAgICBtX3BsYW4uY29kZUJsb2NrLT5jb25zdGFudHMo
KS5zaHJpbmtUb0ZpdCgpOwotICAgIG1fcGxhbi5jb2RlQmxvY2stPmNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbigpLnNocmlua1RvRml0KCk7Ci0gICAgCisgICAgbV9wbGFuLmNvZGVC
bG9jaygpLT5jb25zdGFudHMoKS5zaHJpbmtUb0ZpdCgpOworICAgIG1fcGxhbi5jb2RlQmxvY2so
KS0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hyaW5rVG9GaXQoKTsKKwog
I2lmIEVOQUJMRShGVExfSklUKQotICAgIG1faml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcCht
X3BsYW4uY29kZUJsb2NrKTsKKyAgICBtX2ppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAobV9w
bGFuLmNvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLSAgICAKLSAgICBp
ZiAoVU5MSUtFTFkobV9wbGFuLmNvbXBpbGF0aW9uKSkKLSAgICAgICAgbV9wbGFuLnZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcGxhbi5jb2RlQmxvY2ssICptX3Bs
YW4uY29tcGlsYXRpb24pOwotICAgIAotICAgIGlmICghbV9wbGFuLndpbGxUcnlUb1RpZXJVcCkK
LSAgICAgICAgbV9wbGFuLmNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uID0gdHJ1ZTsKKworICAgIGlmIChVTkxJS0VMWShtX3BsYW4uY29tcGlsYXRp
b24oKSkpCisgICAgICAgIG1fcGxhbi52bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENv
bXBpbGF0aW9uKG1fcGxhbi5jb2RlQmxvY2soKSwgKm1fcGxhbi5jb21waWxhdGlvbigpKTsKKwor
ICAgIGlmICghbV9wbGFuLndpbGxUcnlUb1RpZXJVcCgpKQorICAgICAgICBtX3BsYW4uY29kZUJs
b2NrKCktPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbiA9IHRydWU7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAyMzQxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDEwICs0
NywxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0gRlRMRm9yT1NS
RW50cnlNb2RlKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhy
ZWFkZWRDUFMpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1f
Z3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAgICAgICB1bnNpZ25lZCBi
eXRlY29kZUluZGV4ID0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KCk7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBSRUxFQVNFX0FT
U0VSVChieXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAkocmV2aXNpb24gMjM0MTYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUs
OCArNDUsOCBAQCB2b2lkIFBoYXNlOjpiZWdpblBoYXNlKCkKICAgICAgICAgbV9ncmFwaC5kdW1w
KG91dCk7CiAgICAgICAgIG1fZ3JhcGhEdW1wQmVmb3JlUGhhc2UgPSBvdXQudG9DU3RyaW5nKCk7
CiAgICAgfQotICAgIAotICAgIGlmICghc2hvdWxkRHVtcEdyYXBoQXRFYWNoUGhhc2UobV9ncmFw
aC5tX3BsYW4ubW9kZSkpCisKKyAgICBpZiAoIXNob3VsZER1bXBHcmFwaEF0RWFjaFBoYXNlKG1f
Z3JhcGgubV9wbGFuLm1vZGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBkYXRhTG9n
KCJCZWdpbm5pbmcgREZHIHBoYXNlICIsIG1fbmFtZSwgIi5cbiIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24gMjM0MTYwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBA
IGJvb2wgcnVuQW5kTG9nKFBoYXNlVHlwZSYgcGhhc2UpCiAgICAgCiAgICAgYm9vbCByZXN1bHQg
PSBwaGFzZS5ydW4oKTsKIAotICAgIGlmIChyZXN1bHQgJiYgbG9nQ29tcGlsYXRpb25DaGFuZ2Vz
KHBoYXNlLmdyYXBoKCkubV9wbGFuLm1vZGUpKQorICAgIGlmIChyZXN1bHQgJiYgbG9nQ29tcGls
YXRpb25DaGFuZ2VzKHBoYXNlLmdyYXBoKCkubV9wbGFuLm1vZGUoKSkpCiAgICAgICAgIGRhdGFM
b2dGKCJQaGFzZSAlcyBjaGFuZ2VkIHRoZSBJUi5cbiIsIHBoYXNlLm5hbWUoKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
cmV2aXNpb24gMjM0MTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIG5hbWVzcGFjZSB7CiB2b2lkIGR1
bXBBbmRWZXJpZnlHcmFwaChHcmFwaCYgZ3JhcGgsIGNvbnN0IGNoYXIqIHRleHQsIGJvb2wgZm9y
Y2VEdW1wID0gZmFsc2UpCiB7CiAgICAgR3JhcGhEdW1wTW9kZSBtb2RlRm9yRmluYWxWYWxpZGF0
ZSA9IER1bXBHcmFwaDsKLSAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZChncmFwaC5t
X3BsYW4ubW9kZSkgfHwgZm9yY2VEdW1wKSB7CisgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoZ3JhcGgubV9wbGFuLm1vZGUoKSkgfHwgZm9yY2VEdW1wKSB7CiAgICAgICAgIGRhdGFM
b2codGV4dCwgIlxuIik7CiAgICAgICAgIGdyYXBoLmR1bXAoKTsKICAgICAgICAgbW9kZUZvckZp
bmFsVmFsaWRhdGUgPSBEb250RHVtcEdyYXBoOwpAQCAtMTM2LDE5ICsxMzYsMTkgQEAgUHJvZmls
ZXI6OkNvbXBpbGF0aW9uS2luZCBwcm9maWxlckNvbXBpbAogUGxhbjo6UGxhbihDb2RlQmxvY2sq
IHBhc3NlZENvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywKICAgICBD
b21waWxhdGlvbk1vZGUgbW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAogICAg
IGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQotICAgIDogdm0ocGFz
c2VkQ29kZUJsb2NrLT52bSgpKQotICAgICwgY29kZUJsb2NrKHBhc3NlZENvZGVCbG9jaykKLSAg
ICAsIHByb2ZpbGVkREZHQ29kZUJsb2NrKHByb2ZpbGVkREZHQ29kZUJsb2NrKQotICAgICwgbW9k
ZShtb2RlKQotICAgICwgb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCkKLSAgICAsIG11c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKLSAgICAsIGNvbXBp
bGF0aW9uKFVOTElLRUxZKHZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpID8gYWRvcHRSZWYobmV3
IFByb2ZpbGVyOjpDb21waWxhdGlvbih2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVC
eXRlY29kZXNGb3IoY29kZUJsb2NrKSwgcHJvZmlsZXJDb21waWxhdGlvbktpbmRGb3JNb2RlKG1v
ZGUpKSkgOiBudWxscHRyKQotICAgICwgaW5saW5lQ2FsbEZyYW1lcyhhZG9wdFJlZihuZXcgSW5s
aW5lQ2FsbEZyYW1lU2V0KCkpKQotICAgICwgaWRlbnRpZmllcnMoY29kZUJsb2NrKQotICAgICwg
d2Vha1JlZmVyZW5jZXMoY29kZUJsb2NrKQotICAgICwgc3RhZ2UoUHJlcGFyaW5nKQorICAgIDog
bV92bShwYXNzZWRDb2RlQmxvY2stPnZtKCkpCisgICAgLCBtX2NvZGVCbG9jayhwYXNzZWRDb2Rl
QmxvY2spCisgICAgLCBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKHByb2ZpbGVkREZHQ29kZUJsb2Nr
KQorICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZh
bHVlcykKKyAgICAsIG1fY29tcGlsYXRpb24oVU5MSUtFTFkobV92bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyKSA/IGFkb3B0UmVmKG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24obV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2RlQmxvY2spLCBwcm9maWxl
ckNvbXBpbGF0aW9uS2luZEZvck1vZGUobW9kZSkpKSA6IG51bGxwdHIpCisgICAgLCBtX2lubGlu
ZUNhbGxGcmFtZXMoYWRvcHRSZWYobmV3IElubGluZUNhbGxGcmFtZVNldCgpKSkKKyAgICAsIG1f
aWRlbnRpZmllcnMobV9jb2RlQmxvY2spCisgICAgLCBtX3dlYWtSZWZlcmVuY2VzKG1fY29kZUJs
b2NrKQorICAgICwgbV9zdGFnZShQcmVwYXJpbmcpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlKCkpOwogfQogCiBQbGFuOjp+UGxhbigp
CkBAIC0xNTksNDMgKzE1OSw0MyBAQCBib29sIFBsYW46OmNvbXB1dGVDb21waWxlVGltZXMoKSBj
b25zdAogewogICAgIHJldHVybiByZXBvcnRDb21waWxlVGltZXMoKQogICAgICAgICB8fCBPcHRp
b25zOjpyZXBvcnRUb3RhbENvbXBpbGVUaW1lcygpCi0gICAgICAgIHx8ICh2bSAmJiB2bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyKTsKKyAgICAgICAgfHwgKG1fdm0gJiYgbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyKTsKIH0KIAogYm9vbCBQbGFuOjpyZXBvcnRDb21waWxlVGltZXMoKSBjb25z
dAogewogICAgIHJldHVybiBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKQogICAgICAgICB8
fCBPcHRpb25zOjpyZXBvcnRERkdDb21waWxlVGltZXMoKQotICAgICAgICB8fCAoT3B0aW9uczo6
cmVwb3J0RlRMQ29tcGlsZVRpbWVzKCkgJiYgaXNGVEwobW9kZSkpOworICAgICAgICB8fCAoT3B0
aW9uczo6cmVwb3J0RlRMQ29tcGlsZVRpbWVzKCkgJiYgaXNGVEwobV9tb2RlKSk7CiB9CiAKIHZv
aWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKFRocmVhZERhdGEqIHRocmVhZERhdGEpCiB7Ci0gICAg
dGhpcy0+dGhyZWFkRGF0YSA9IHRocmVhZERhdGE7Ci0gICAgCisgICAgbV90aHJlYWREYXRhID0g
dGhyZWFkRGF0YTsKKwogICAgIE1vbm90b25pY1RpbWUgYmVmb3JlIHsgfTsKICAgICBDU3RyaW5n
IGNvZGVCbG9ja05hbWU7CiAgICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMoKSkp
CiAgICAgICAgIGJlZm9yZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIGlmIChVTkxJS0VM
WShyZXBvcnRDb21waWxlVGltZXMoKSkpCi0gICAgICAgIGNvZGVCbG9ja05hbWUgPSB0b0NTdHJp
bmcoKmNvZGVCbG9jayk7Ci0gICAgCisgICAgICAgIGNvZGVCbG9ja05hbWUgPSB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKTsKKwogICAgIENvbXBpbGF0aW9uU2NvcGUgY29tcGlsYXRpb25TY29wZTsK
IAotICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMobW9kZSkgfHwgT3B0aW9uczo6bG9nUGhh
c2VUaW1lcygpKQotICAgICAgICBkYXRhTG9nKCJERkcoUGxhbikgY29tcGlsaW5nICIsICpjb2Rl
QmxvY2ssICIgd2l0aCAiLCBtb2RlLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOworICAgIGlmIChsb2dDb21waWxhdGlv
bkNoYW5nZXMobV9tb2RlKSB8fCBPcHRpb25zOjpsb2dQaGFzZVRpbWVzKCkpCisgICAgICAgIGRh
dGFMb2coIkRGRyhQbGFuKSBjb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiIHdpdGggIiwgbV9t
b2RlLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgbV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQ291bnQoKSwgIlxuIik7CiAKICAgICBDb21waWxhdGlvblBhdGggcGF0aCA9IGNvbXBpbGVJ
blRocmVhZEltcGwoKTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKHBhdGggPT0gQ2FuY2VsUGF0aCB8
fCBmaW5hbGl6ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKChwYXRoID09IENhbmNlbFBhdGgpID09
IChzdGFnZSA9PSBDYW5jZWxsZWQpKTsKLSAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChwYXRoID09
IENhbmNlbFBhdGggfHwgbV9maW5hbGl6ZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKChwYXRoID09
IENhbmNlbFBhdGgpID09IChtX3N0YWdlID09IENhbmNlbGxlZCkpOworCiAgICAgTW9ub3Rvbmlj
VGltZSBhZnRlciB7IH07CiAgICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMoKSkp
IHsKICAgICAgICAgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICAKICAgICAgICAg
aWYgKE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkpIHsKLSAgICAgICAgICAgIGlm
IChpc0ZUTChtb2RlKSkgeworICAgICAgICAgICAgaWYgKGlzRlRMKG1fbW9kZSkpIHsKICAgICAg
ICAgICAgICAgICB0b3RhbEZUTENvbXBpbGVUaW1lICs9IGFmdGVyIC0gYmVmb3JlOwogICAgICAg
ICAgICAgICAgIHRvdGFsRlRMREZHQ29tcGlsZVRpbWUgKz0gbV90aW1lQmVmb3JlRlRMIC0gYmVm
b3JlOwogICAgICAgICAgICAgICAgIHRvdGFsRlRMQjNDb21waWxlVGltZSArPSBhZnRlciAtIG1f
dGltZUJlZm9yZUZUTDsKQEAgLTIyMSwxNCArMjIxLDE0IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUlu
VGhyZWFkKFRocmVhZERhdGEqIHQKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmIChjb2RlQmxvY2spIHsgLy8gY29kZUJs
b2NrIHdpbGwgYmUgbnVsbCBpZiB0aGUgY29tcGlsYXRpb24gd2FzIGNhbmNlbGxlZC4KKyAgICBp
ZiAobV9jb2RlQmxvY2spIHsgLy8gbV9jb2RlQmxvY2sgd2lsbCBiZSBudWxsIGlmIHRoZSBjb21w
aWxhdGlvbiB3YXMgY2FuY2VsbGVkLgogICAgICAgICBpZiAocGF0aCA9PSBGVExQYXRoKQotICAg
ICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJmdGxDb21waWxlIiwgKCJ0
b29rICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgKERGRzogIiwgKG1f
dGltZUJlZm9yZUZUTCAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIsIEIzOiAiLCAoYWZ0ZXIg
LSBtX3RpbWVCZWZvcmVGVEwpLm1pbGxpc2Vjb25kcygpLCAiKSB3aXRoICIsIHBhdGhOYW1lKSk7
CisgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZnRsQ29tcGls
ZSIsICgidG9vayAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zIChERkc6
ICIsIChtX3RpbWVCZWZvcmVGVEwgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiLCBCMzogIiwg
KGFmdGVyIC0gbV90aW1lQmVmb3JlRlRMKS5taWxsaXNlY29uZHMoKSwgIikgd2l0aCAiLCBwYXRo
TmFtZSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNv
ZGVCbG9jaywgImRmZ0NvbXBpbGUiLCAoInRvb2sgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNl
Y29uZHMoKSwgIiBtcyB3aXRoICIsIHBhdGhOYW1lKSk7CisgICAgICAgICAgICBDT0RFQkxPQ0tf
TE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGZnQ29tcGlsZSIsICgidG9vayAiLCAoYWZ0ZXIgLSBi
ZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zIHdpdGggIiwgcGF0aE5hbWUpKTsKICAgICB9CiAg
ICAgaWYgKFVOTElLRUxZKHJlcG9ydENvbXBpbGVUaW1lcygpKSkgewotICAgICAgICBkYXRhTG9n
KCJPcHRpbWl6ZWQgIiwgY29kZUJsb2NrTmFtZSwgIiB1c2luZyAiLCBtb2RlLCAiIHdpdGggIiwg
cGF0aE5hbWUsICIgaW50byAiLCBmaW5hbGl6ZXIgPyBmaW5hbGl6ZXItPmNvZGVTaXplKCkgOiAw
LCAiIGJ5dGVzIGluICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMiKTsK
KyAgICAgICAgZGF0YUxvZygiT3B0aW1pemVkICIsIGNvZGVCbG9ja05hbWUsICIgdXNpbmcgIiwg
bV9tb2RlLCAiIHdpdGggIiwgcGF0aE5hbWUsICIgaW50byAiLCBtX2ZpbmFsaXplciA/IG1fZmlu
YWxpemVyLT5jb2RlU2l6ZSgpIDogMCwgIiBieXRlcyBpbiAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1p
bGxpc2Vjb25kcygpLCAiIG1zIik7CiAgICAgICAgIGlmIChwYXRoID09IEZUTFBhdGgpCiAgICAg
ICAgICAgICBkYXRhTG9nKCIgKERGRzogIiwgKG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZSkubWls
bGlzZWNvbmRzKCksICIsIEIzOiAiLCAoYWZ0ZXIgLSBtX3RpbWVCZWZvcmVGVEwpLm1pbGxpc2Vj
b25kcygpLCAiKSIpOwogICAgICAgICBkYXRhTG9nKCIuXG4iKTsKQEAgLTIzOCwxNyArMjM4LDE3
IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKFRocmVhZERhdGEqIHQKIFBsYW46OkNvbXBp
bGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKCkKIHsKICAgICBjbGVhbk11c3RI
YW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOwotICAgIAotICAgIGlmICh2ZXJib3NlQ29tcGlsYXRp
b25FbmFibGVkKG1vZGUpICYmIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCAhPSBVSU5UX01BWCkgewor
CisgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQobV9tb2RlKSAmJiBtX29zckVudHJ5
Qnl0ZWNvZGVJbmRleCAhPSBVSU5UX01BWCkgewogICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAg
ICAgICBkYXRhTG9nKCJDb21waWxlciBtdXN0IGhhbmRsZSBPU1IgZW50cnkgZnJvbSBiYyMiLCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgsICIgd2l0aCB2YWx1ZXM6ICIsIG11c3RIYW5kbGVWYWx1ZXMs
ICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxlciBtdXN0IGhhbmRsZSBPU1IgZW50cnkg
ZnJvbSBiYyMiLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCwgIiB3aXRoIHZhbHVlczogIiwgbV9t
dXN0SGFuZGxlVmFsdWVzLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygiXG4iKTsKICAgICB9Ci0g
ICAgCi0gICAgR3JhcGggZGZnKCp2bSwgKnRoaXMpOworCisgICAgR3JhcGggZGZnKCptX3ZtLCAq
dGhpcyk7CiAgICAgcGFyc2UoZGZnKTsKIAotICAgIGNvZGVCbG9jay0+c2V0Q2FsbGVlU2F2ZVJl
Z2lzdGVycyhSZWdpc3RlclNldDo6ZGZnQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nv
ZGVCbG9jay0+c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhSZWdpc3RlclNldDo6ZGZnQ2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKIAogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCkBAIC0yNzAsNyAr
MjcwLDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIC8v
IGluIHRoZSBDb2RlQmxvY2suIFRoaXMgaXMgYSBnb29kIHRpbWUgdG8gcGVyZm9ybSBhbiBlYXJs
eSBzaHJpbmssIHdoaWNoIGlzIG1vcmUKICAgICAvLyBwb3dlcmZ1bCB0aGFuIGEgbGF0ZSBvbmUu
IEl0J3Mgc2FmZSB0byBkbyBzbyBiZWNhdXNlIHdlIGhhdmVuJ3QgZ2VuZXJhdGVkIGFueSBjb2Rl
CiAgICAgLy8gdGhhdCByZWZlcmVuY2VzIGFueSBvZiB0aGUgdGFibGVzIGRpcmVjdGx5LCB5ZXQu
Ci0gICAgY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkVhcmx5U2hyaW5rKTsKKyAg
ICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpFYXJseVNocmluayk7CiAKICAg
ICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKQEAgLTI5
MCwxMSArMjkwLDExIEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIK
ICAgICBSVU5fUEhBU0UocGVyZm9ybVByZWRpY3Rpb25JbmplY3Rpb24pOwogICAgIAogICAgIFJV
Tl9QSEFTRShwZXJmb3JtU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uKTsKLSAgICAKLSAg
ICBpZiAobW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKKworICAgIGlmIChtX21vZGUgPT0g
RlRMRm9yT1NSRW50cnlNb2RlKSB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGVyZm9ybU9TUkVu
dHJ5cG9pbnRDcmVhdGlvbihkZmcpOwogICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAg
ICAgZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KCp0aGlzKTsK
KyAgICAgICAgICAgIG1fZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6
ZXI+KCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBGYWlsUGF0aDsKICAgICAgICAgfQogICAg
ICAgICBSVU5fUEhBU0UocGVyZm9ybUNQU1JldGhyZWFkaW5nKTsKQEAgLTMwOCw5ICszMDgsOSBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgUlVOX1BIQVNF
KHBlcmZvcm1GaXh1cCk7CiAgICAgUlVOX1BIQVNFKHBlcmZvcm1JbnZhbGlkYXRpb25Qb2ludElu
amVjdGlvbik7CiAgICAgUlVOX1BIQVNFKHBlcmZvcm1UeXBlQ2hlY2tIb2lzdGluZyk7Ci0gICAg
CisKICAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnROb3RDb252ZXJnZWQ7Ci0gICAg
CisKICAgICAvLyBGb3Igbm93IHdlJ3JlIGJhY2sgdG8gYXZvaWRpbmcgYSBmaXhwb2ludC4gTm90
ZSB0aGF0IHdlJ3ZlIHBpbmctcG9uZ2VkIG9uIHRoaXMgZGVjaXNpb24KICAgICAvLyBtYW55IHRp
bWVzLiBGb3IgbWF4aW11bSB0aHJvdWdocHV0LCBpdCdzIGJlc3QgdG8gZml4cG9pbnQuIEJ1dCB0
aGUgdGhyb3VnaHB1dCBiZW5lZml0IGlzCiAgICAgLy8gc21hbGwgYW5kIG5vdCBsaWtlbHkgdG8g
c2hvdyB1cCBpbiBGVEwgYW55d2F5LiBPbiB0aGUgb3RoZXIgaGFuZCwgbm90IGZpeHBvaW50aW5n
IG1lYW5zCkBAIC0zMzEsNyArMzMxLDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNv
bXBpbGVJblRocgogICAgICAgICB2YWxpZGF0ZShkZmcpOwogICAgIAogICAgIFJVTl9QSEFTRShw
ZXJmb3JtQ1BTUmV0aHJlYWRpbmcpOwotICAgIGlmICghaXNGVEwobW9kZSkpIHsKKyAgICBpZiAo
IWlzRlRMKG1fbW9kZSkpIHsKICAgICAgICAgLy8gT25seSBydW4gdGhpcyBpZiB3ZSdyZSBub3Qg
RlRMaW5nLCBiZWNhdXNlIGN1cnJlbnRseSBmb3IgYSBMb2FkVmFyYXJncyB0aGF0IGlzIGZvcndh
cmRhYmxlIGFuZAogICAgICAgICAvLyBpbiBhIG5vbi12YXJhcmdzIGlubGluZWQgY2FsbCBmcmFt
ZSwgdGhpcyB3aWxsIGdlbmVyYXRlIEZvcndhcmRWYXJhcmdzIHdoaWxlIHRoZSBGVEwKICAgICAg
ICAgLy8gQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSB3aWxsIGNyZWF0ZSBhIHNlcXVlbmNlIG9m
IEdldFN0YWNrK1B1dFN0YWNrcy4gVGhlIEdldFN0YWNrK1B1dFN0YWNrCkBAIC0zNjUsMTAgKzM2
NSwxMCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAg
IGRmZy5lbnN1cmVDUFNOYXR1cmFsTG9vcHMoKTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICBzd2l0Y2ggKG1fbW9kZSkgewogICAgIGNhc2UgREZHTW9kZTogewogICAgICAgICBk
ZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7Ci0gICAgCisKICAgICAgICAg
UlVOX1BIQVNFKHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbik7CiAKICAgICAgICAgUlVOX1BI
QVNFKHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKTsKQEAgLTM4Myw3ICszODMsNyBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGR1bXBB
bmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBhZnRlciBvcHRpbWl6YXRpb246Iik7CiAgICAgICAg
IAogICAgICAgICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChkZmcpOwotICAgICAgICBpZiAoY29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgaWYgKG1fY29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgICAgIGRhdGFGbG93SklU
LmNvbXBpbGVGdW5jdGlvbigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkYXRhRmxvd0pJ
VC5jb21waWxlKCk7CkBAIC0zOTUsNyArMzk1LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBs
YW46OmNvbXBpbGVJblRocgogICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOiB7CiAjaWYgRU5B
QkxFKEZUTF9KSVQpCiAgICAgICAgIGlmIChGVEw6OmNhbkNvbXBpbGUoZGZnKSA9PSBGVEw6OkNh
bm5vdENvbXBpbGUpIHsKLSAgICAgICAgICAgIGZpbmFsaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8
RmFpbGVkRmluYWxpemVyPigqdGhpcyk7CisgICAgICAgICAgICBtX2ZpbmFsaXplciA9IHN0ZDo6
bWFrZV91bmlxdWU8RmFpbGVkRmluYWxpemVyPigqdGhpcyk7CiAgICAgICAgICAgICByZXR1cm4g
RmFpbFBhdGg7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00NTQsMTEgKzQ1NCwxMSBAQCBQbGFu
OjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIFJVTl9QSEFTRShw
ZXJmb3JtQ2xlYW5VcCk7CiAgICAgICAgIFJVTl9QSEFTRShwZXJmb3JtSW50ZWdlckNoZWNrQ29t
YmluaW5nKTsKICAgICAgICAgUlVOX1BIQVNFKHBlcmZvcm1HbG9iYWxDU0UpOwotICAgICAgICAK
KwogICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIG5vdCBhbGxvd2VkIHRvIGRvIGFueSBm
dXJ0aGVyIGNvZGUgbW90aW9uIGJlY2F1c2Ugb3VyIHJlYXNvbmluZwogICAgICAgICAvLyBhYm91
dCBjb2RlIG1vdGlvbiBhc3N1bWVzIHRoYXQgaXQncyBPSyB0byBpbnNlcnQgR0MgcG9pbnRzIGlu
IHJhbmRvbSBwbGFjZXMuCiAgICAgICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludENv
bnZlcmdlZDsKLSAgICAgICAgCisKICAgICAgICAgUlVOX1BIQVNFKHBlcmZvcm1MaXZlbmVzc0Fu
YWx5c2lzKTsKICAgICAgICAgUlVOX1BIQVNFKHBlcmZvcm1DRkEpOwogICAgICAgICBSVU5fUEhB
U0UocGVyZm9ybUdsb2JhbFN0b3JlQmFycmllckluc2VydGlvbik7CkBAIC00NzMsMTEgKzQ3Mywx
MSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIFJV
Tl9QSEFTRShwZXJmb3JtV2F0Y2hwb2ludENvbGxlY3Rpb24pOwogICAgICAgICAKICAgICAgICAg
aWYgKEZUTDo6Y2FuQ29tcGlsZShkZmcpID09IEZUTDo6Q2Fubm90Q29tcGlsZSkgewotICAgICAg
ICAgICAgZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KCp0aGlz
KTsKKyAgICAgICAgICAgIG1fZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5h
bGl6ZXI+KCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBGYWlsUGF0aDsKICAgICAgICAgfQog
Ci0gICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBqdXN0IGJlZm9yZSBGVEwg
bG93ZXJpbmc6Iiwgc2hvdWxkRHVtcERpc2Fzc2VtYmx5KG1vZGUpKTsKKyAgICAgICAgZHVtcEFu
ZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiLCBzaG91
bGREdW1wRGlzYXNzZW1ibHkobV9tb2RlKSk7CiAKICAgICAgICAgLy8gRmxhc2ggYSBzYWZlcG9p
bnQgaW4gY2FzZSB0aGUgR0Mgd2FudHMgc29tZSBhY3Rpb24uCiAgICAgICAgIFNhZmVwb2ludDo6
UmVzdWx0IHNhZmVwb2ludFJlc3VsdDsKQEAgLTUzNiw5NSArNTM2LDk1IEBAIFBsYW46OkNvbXBp
bGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKIAogYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQo
KQogewotICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCk7CisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IG1fY29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpOwogICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdCBuZWNlc3NhcnkuIFRoZXJlJ3Mg
bm8gd2F5IGZvciB0aGUgYmFzZWxpbmUKICAgICAvLyBjb2RlIHRvIGJlIHJlcGxhY2VkIGR1cmlu
ZyBhIGNvbXBpbGF0aW9uLCBleGNlcHQgaWYgd2UgZGVsZXRlIHRoZSBwbGFuLCBpbiB3aGljaAog
ICAgIC8vIGNhc2Ugd2Ugd291bGRuJ3QgYmUgaGVyZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNzA3Ci0gICAgaWYgKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSAhPSByZXBsYWNlbWVudC0+YmFzZWxpbmVWZXJzaW9uKCkpCisgICAgaWYgKG1fY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpICE9IHJlcGxhY2VtZW50LT5iYXNlbGluZVZlcnNpb24oKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghd2F0Y2hwb2ludHMuYXJlU3RpbGxWYWxp
ZCgpKQorICAgIGlmICghbV93YXRjaHBvaW50cy5hcmVTdGlsbFZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBQbGFuOjpyZWFsbHlBZGQo
Q29tbW9uRGF0YSogY29tbW9uRGF0YSkKIHsKLSAgICB3YXRjaHBvaW50cy5yZWFsbHlBZGQoY29k
ZUJsb2NrLCAqY29tbW9uRGF0YSk7Ci0gICAgaWRlbnRpZmllcnMucmVhbGx5QWRkKCp2bSwgY29t
bW9uRGF0YSk7Ci0gICAgd2Vha1JlZmVyZW5jZXMucmVhbGx5QWRkKCp2bSwgY29tbW9uRGF0YSk7
Ci0gICAgdHJhbnNpdGlvbnMucmVhbGx5QWRkKCp2bSwgY29tbW9uRGF0YSk7Ci0gICAgY29tbW9u
RGF0YS0+cmVjb3JkZWRTdGF0dXNlcyA9IFdURk1vdmUocmVjb3JkZWRTdGF0dXNlcyk7CisgICAg
bV93YXRjaHBvaW50cy5yZWFsbHlBZGQobV9jb2RlQmxvY2ssICpjb21tb25EYXRhKTsKKyAgICBt
X2lkZW50aWZpZXJzLnJlYWxseUFkZCgqbV92bSwgY29tbW9uRGF0YSk7CisgICAgbV93ZWFrUmVm
ZXJlbmNlcy5yZWFsbHlBZGQoKm1fdm0sIGNvbW1vbkRhdGEpOworICAgIG1fdHJhbnNpdGlvbnMu
cmVhbGx5QWRkKCptX3ZtLCBjb21tb25EYXRhKTsKKyAgICBjb21tb25EYXRhLT5yZWNvcmRlZFN0
YXR1c2VzID0gV1RGTW92ZShtX3JlY29yZGVkU3RhdHVzZXMpOwogfQogCiB2b2lkIFBsYW46Om5v
dGlmeUNvbXBpbGluZygpCiB7Ci0gICAgc3RhZ2UgPSBDb21waWxpbmc7CisgICAgbV9zdGFnZSA9
IENvbXBpbGluZzsKIH0KIAogdm9pZCBQbGFuOjpub3RpZnlSZWFkeSgpCiB7Ci0gICAgY2FsbGJh
Y2stPmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShjb2RlQmxvY2ssIHBy
b2ZpbGVkREZHQ29kZUJsb2NrKTsKLSAgICBzdGFnZSA9IFJlYWR5OworICAgIG1fY2FsbGJhY2st
PmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShtX2NvZGVCbG9jaywgbV9w
cm9maWxlZERGR0NvZGVCbG9jayk7CisgICAgbV9zdGFnZSA9IFJlYWR5OwogfQogCiBDb21waWxh
dGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpCiB7CiAg
ICAgLy8gV2Ugd2lsbCBlc3RhYmxpc2ggbmV3IHJlZmVyZW5jZXMgZnJvbSB0aGUgY29kZSBibG9j
ayB0byB0aGluZ3MuIFNvLCB3ZSBuZWVkIGEgYmFycmllci4KLSAgICB2bS0+aGVhcC53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKLSAgICAKKyAgICBtX3ZtLT5oZWFwLndyaXRlQmFycmllcihtX2Nv
ZGVCbG9jayk7CisKICAgICBpZiAoIWlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIENPREVCTE9D
S19MT0dfRVZFTlQoY29kZUJsb2NrLCAiZGZnRmluYWxpemUiLCAoImludmFsaWRhdGVkIikpOwor
ICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGZnRmluYWxpemUiLCAo
ImludmFsaWRhdGVkIikpOwogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlkYXRlZDsK
ICAgICB9CiAKICAgICBib29sIHJlc3VsdDsKLSAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgcmVzdWx0ID0gZmluYWxpemVyLT5maW5hbGl6ZUZ1
bmN0aW9uKCk7CisgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkKKyAgICAgICAgcmVzdWx0ID0gbV9maW5hbGl6ZXItPmZpbmFsaXplRnVuY3Rpb24oKTsKICAg
ICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGZpbmFsaXplci0+ZmluYWxpemUoKTsKLSAgICAKKyAg
ICAgICAgcmVzdWx0ID0gbV9maW5hbGl6ZXItPmZpbmFsaXplKCk7CisKICAgICBpZiAoIXJlc3Vs
dCkgewotICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRmZ0ZpbmFsaXpl
IiwgKCJmYWlsZWQiKSk7CisgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ss
ICJkZmdGaW5hbGl6ZSIsICgiZmFpbGVkIikpOwogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25G
YWlsZWQ7CiAgICAgfQotICAgIAotICAgIHJlYWxseUFkZChjb2RlQmxvY2stPmppdENvZGUoKS0+
ZGZnQ29tbW9uKCkpOwotICAgIAorCisgICAgcmVhbGx5QWRkKG1fY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZ0NvbW1vbigpKTsKKwogICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7CiAgICAg
ICAgIFRyYWNrZWRSZWZlcmVuY2VzIHRyYWNrZWRSZWZlcmVuY2VzOwotICAgICAgICAKLSAgICAg
ICAgZm9yIChXcml0ZUJhcnJpZXI8SlNDZWxsPiYgcmVmZXJlbmNlIDogY29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT53ZWFrUmVmZXJlbmNlcykKKworICAgICAgICBmb3IgKFdyaXRl
QmFycmllcjxKU0NlbGw+JiByZWZlcmVuY2UgOiBtX2NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+d2Vha1JlZmVyZW5jZXMpCiAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5h
ZGQocmVmZXJlbmNlLmdldCgpKTsKLSAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiYgcmVmZXJlbmNlIDogY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT53ZWFrU3Ry
dWN0dXJlUmVmZXJlbmNlcykKKyAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiYg
cmVmZXJlbmNlIDogbV9jb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPndlYWtTdHJ1
Y3R1cmVSZWZlcmVuY2VzKQogICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKHJlZmVy
ZW5jZS5nZXQoKSk7Ci0gICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFu
dCA6IGNvZGVCbG9jay0+Y29uc3RhbnRzKCkpCisgICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFVu
a25vd24+JiBjb25zdGFudCA6IG1fY29kZUJsb2NrLT5jb25zdGFudHMoKSkKICAgICAgICAgICAg
IHRyYWNrZWRSZWZlcmVuY2VzLmFkZChjb25zdGFudC5nZXQoKSk7CiAKLSAgICAgICAgZm9yIChh
dXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZyYW1lcykgeworICAgICAgICBmb3Ig
KGF1dG8qIGlubGluZUNhbGxGcmFtZSA6ICptX2lubGluZUNhbGxGcmFtZXMpIHsKICAgICAgICAg
ICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKICAg
ICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5l
Q29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBDaGVj
ayB0aGF0IGFueSBvdGhlciByZWZlcmVuY2VzIHRoYXQgd2UgaGF2ZSBhbnl3aGVyZSBpbiB0aGUg
SklUQ29kZSBhcmUgYWxzbwogICAgICAgICAvLyB0cmFja2VkIGVpdGhlciBzdHJvbmdseSBvciB3
ZWFrbHkuCi0gICAgICAgIGNvZGVCbG9jay0+aml0Q29kZSgpLT52YWxpZGF0ZVJlZmVyZW5jZXMo
dHJhY2tlZFJlZmVyZW5jZXMpOworICAgICAgICBtX2NvZGVCbG9jay0+aml0Q29kZSgpLT52YWxp
ZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOwogICAgIH0KLSAgICAKLSAgICBDT0RF
QkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRmZ0ZpbmFsaXplIiwgKCJzdWNjZWVkZWQiKSk7
CisKKyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGZnRmluYWxpemUiLCAo
InN1Y2NlZWRlZCIpKTsKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQogCiB2
b2lkIFBsYW46OmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2soKQogewotICAgIGNhbGxiYWNrLT5j
b21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIGZp
bmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkpOworICAgIG1fY2FsbGJhY2stPmNvbXBp
bGF0aW9uRGlkQ29tcGxldGUobV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRERkdDb2RlQmxvY2ssIGZp
bmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkpOwogfQogCiBDb21waWxhdGlvbktleSBQ
bGFuOjprZXkoKQogewotICAgIHJldHVybiBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCksIG1vZGUpOworICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0KIAogdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5k
VmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTYzMyw4MiArNjMzLDgyIEBA
IHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4KICAgICAgICAgcmV0dXJu
OwogCiAgICAgY2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZChtdXN0SGFuZGxlVmFsdWVzW2ldKTsKLSAgICAKLSAgICByZWNv
cmRlZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspCisgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWQobV9tdXN0SGFuZGxlVmFsdWVzW2ldKTsKKworICAgIG1fcmVjb3JkZWRTdGF0
dXNlcy5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWQoY29kZUJsb2NrKTsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSk7Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChwcm9maWxlZERG
R0NvZGVCbG9jayk7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9jayk7
CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSk7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3Byb2ZpbGVkREZHQ29kZUJsb2Nr
KTsKIAotICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7Ci0gICAgICAgIGZvciAoYXV0byogaW5s
aW5lQ2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMpIHsKKyAgICBpZiAobV9pbmxpbmVDYWxs
RnJhbWVzKSB7CisgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKm1faW5saW5l
Q2FsbEZyYW1lcykgewogICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+YmFzZWxp
bmVDb2RlQmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHdlYWtSZWZlcmVuY2VzLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAg
dHJhbnNpdGlvbnMudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICBtX3dlYWtSZWZlcmVuY2Vz
LnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgbV90cmFuc2l0aW9ucy52aXNpdENoaWxkcmVu
KHZpc2l0b3IpOwogfQogCiB2b2lkIFBsYW46OmZpbmFsaXplSW5HQygpCiB7Ci0gICAgcmVjb3Jk
ZWRTdGF0dXNlcy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygpOworICAgIG1fcmVjb3JkZWRTdGF0
dXNlcy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygpOwogfQogCiBib29sIFBsYW46OmlzS25vd25U
b0JlTGl2ZUR1cmluZ0dDKCkKIHsKLSAgICBpZiAoc3RhZ2UgPT0gQ2FuY2VsbGVkKQorICAgIGlm
IChtX3N0YWdlID09IENhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
SGVhcDo6aXNNYXJrZWQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgaWYgKCFI
ZWFwOjppc01hcmtlZChtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFIZWFwOjppc01hcmtlZChjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCkpKQorICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCEhcHJvZmlsZWRERkdDb2RlQmxv
Y2sgJiYgIUhlYXA6OmlzTWFya2VkKHByb2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAgICBpZiAoISFt
X3Byb2ZpbGVkREZHQ29kZUJsb2NrICYmICFIZWFwOjppc01hcmtlZChtX3Byb2ZpbGVkREZHQ29k
ZUJsb2NrKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2
b2lkIFBsYW46OmNhbmNlbCgpCiB7Ci0gICAgdm0gPSBudWxscHRyOwotICAgIGNvZGVCbG9jayA9
IG51bGxwdHI7Ci0gICAgcHJvZmlsZWRERkdDb2RlQmxvY2sgPSBudWxscHRyOwotICAgIG11c3RI
YW5kbGVWYWx1ZXMuY2xlYXIoKTsKLSAgICBjb21waWxhdGlvbiA9IG51bGxwdHI7Ci0gICAgZmlu
YWxpemVyID0gbnVsbHB0cjsKLSAgICBpbmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0cjsKLSAgICB3
YXRjaHBvaW50cyA9IERlc2lyZWRXYXRjaHBvaW50cygpOwotICAgIGlkZW50aWZpZXJzID0gRGVz
aXJlZElkZW50aWZpZXJzKCk7Ci0gICAgd2Vha1JlZmVyZW5jZXMgPSBEZXNpcmVkV2Vha1JlZmVy
ZW5jZXMoKTsKLSAgICB0cmFuc2l0aW9ucyA9IERlc2lyZWRUcmFuc2l0aW9ucygpOwotICAgIGNh
bGxiYWNrID0gbnVsbHB0cjsKLSAgICBzdGFnZSA9IENhbmNlbGxlZDsKKyAgICBtX3ZtID0gbnVs
bHB0cjsKKyAgICBtX2NvZGVCbG9jayA9IG51bGxwdHI7CisgICAgbV9wcm9maWxlZERGR0NvZGVC
bG9jayA9IG51bGxwdHI7CisgICAgbV9tdXN0SGFuZGxlVmFsdWVzLmNsZWFyKCk7CisgICAgbV9j
b21waWxhdGlvbiA9IG51bGxwdHI7CisgICAgbV9maW5hbGl6ZXIgPSBudWxscHRyOworICAgIG1f
aW5saW5lQ2FsbEZyYW1lcyA9IG51bGxwdHI7CisgICAgbV93YXRjaHBvaW50cyA9IERlc2lyZWRX
YXRjaHBvaW50cygpOworICAgIG1faWRlbnRpZmllcnMgPSBEZXNpcmVkSWRlbnRpZmllcnMoKTsK
KyAgICBtX3dlYWtSZWZlcmVuY2VzID0gRGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7CisgICAgbV90
cmFuc2l0aW9ucyA9IERlc2lyZWRUcmFuc2l0aW9ucygpOworICAgIG1fY2FsbGJhY2sgPSBudWxs
cHRyOworICAgIG1fc3RhZ2UgPSBDYW5jZWxsZWQ7CiB9CiAKIHZvaWQgUGxhbjo6Y2xlYW5NdXN0
SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG11c3RI
YW5kbGVWYWx1ZUNsZWFuaW5nTG9jayk7Ci0gICAgCi0gICAgaWYgKCFtdXN0SGFuZGxlVmFsdWVz
TWF5SW5jbHVkZUdhcmJhZ2UpCisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXN0SGFuZGxlVmFs
dWVDbGVhbmluZ0xvY2spOworCisgICAgaWYgKCFtX211c3RIYW5kbGVWYWx1ZXNNYXlJbmNsdWRl
R2FyYmFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG11c3RIYW5kbGVWYWx1ZXNNYXlJ
bmNsdWRlR2FyYmFnZSA9IGZhbHNlOwotICAgIAotICAgIGlmICghY29kZUJsb2NrKQorCisgICAg
bV9tdXN0SGFuZGxlVmFsdWVzTWF5SW5jbHVkZUdhcmJhZ2UgPSBmYWxzZTsKKworICAgIGlmICgh
bV9jb2RlQmxvY2spCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIW11c3RIYW5kbGVW
YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKSkKKworICAgIGlmICghbV9tdXN0SGFuZGxlVmFsdWVzLm51
bWJlck9mTG9jYWxzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGFs
dGVybmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIEZhc3RCaXRWZWN0b3Ig
bGl2ZW5lc3MgPSBhbHRlcm5hdGl2ZS0+bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5m
b0F0Qnl0ZWNvZGVPZmZzZXQoYWx0ZXJuYXRpdmUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0g
ICAgCi0gICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IG11c3RIYW5kbGVWYWx1ZXMubnVtYmVyT2ZM
b2NhbHMoKTsgbG9jYWwtLTspIHsKKworICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBtX2Nv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBGYXN0Qml0VmVjdG9yIGxpdmVuZXNzID0gYWx0
ZXJuYXRpdmUtPmxpdmVuZXNzQW5hbHlzaXMoKS5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zm
c2V0KGFsdGVybmF0aXZlLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGxvY2FsID0gbV9tdXN0SGFuZGxlVmFsdWVzLm51bWJlck9mTG9jYWxzKCk7IGxvY2Fs
LS07KSB7CiAgICAgICAgIGlmICghbGl2ZW5lc3NbbG9jYWxdKQotICAgICAgICAgICAgbXVzdEhh
bmRsZVZhbHVlcy5sb2NhbChsb2NhbCkgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgbV9t
dXN0SGFuZGxlVmFsdWVzLmxvY2FsKGxvY2FsKSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjM0MTYwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDcgKzUxLDggQEAgY2xhc3MgVGhyZWFkRGF0YTsKIAogI2lmIEVOQUJMRShERkdfSklUKQog
Ci1zdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CitjbGFz
cyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKK3B1YmxpYzoKICAg
ICBQbGFuKAogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja1RvQ29tcGlsZSwgQ29kZUJsb2Nr
KiBwcm9maWxlZERGR0NvZGVCbG9jaywKICAgICAgICAgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25l
ZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCkBAIC03Niw0NyArNzcsNDIgQEAgc3RydWN0IFBsYW4g
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIHZvaWQgZmluYWxpemVJbkdDKCk7CiAg
ICAgdm9pZCBjYW5jZWwoKTsKIAotICAgIGJvb2wgY2FuVGllclVwQW5kT1NSRW50ZXIoKSBjb25z
dCB7IHJldHVybiAhdGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXMuaXNFbXB0eSgpOyB9Ci0gICAg
CisgICAgYm9vbCBjYW5UaWVyVXBBbmRPU1JFbnRlcigpIGNvbnN0IHsgcmV0dXJuICFtX3RpZXJV
cEFuZE9TUkVudGVyQnl0ZWNvZGVzLmlzRW1wdHkoKTsgfQorCiAgICAgdm9pZCBjbGVhbk11c3RI
YW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOwotICAgIAotICAgIC8vIFdhcm5pbmc6IHByZXR0eSBt
dWNoIGFsbCBvZiB0aGUgcG9pbnRlciBmaWVsZHMgaW4gdGhpcyBvYmplY3QgZ2V0IG51bGxlZCBi
eSBjYW5jZWwoKS4gU28sIGlmCi0gICAgLy8geW91J3JlIHdyaXRpbmcgY29kZSB0aGF0IGlzIGNh
bGxhYmxlIG9uIHRoZSBjYW5jZWwgcGF0aCwgYmUgc3VyZSB0byBudWxsIGNoZWNrIGV2ZXJ5dGhp
bmchCi0gICAgCi0gICAgVk0qIHZtOwogCi0gICAgLy8gVGhlc2UgY2FuIGJlIHJhdyBwb2ludGVy
cyBiZWNhdXNlIHdlIHZpc2l0IHRoZW0gZHVyaW5nIGV2ZXJ5IEdDIGluIGNoZWNrTGl2ZW5lc3NB
bmRWaXNpdENoaWxkcmVuLgotICAgIENvZGVCbG9jayogY29kZUJsb2NrOwotICAgIENvZGVCbG9j
ayogcHJvZmlsZWRERkdDb2RlQmxvY2s7CisgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92
bTsgfQogCi0gICAgQ29tcGlsYXRpb25Nb2RlIG1vZGU7Ci0gICAgY29uc3QgdW5zaWduZWQgb3Ny
RW50cnlCeXRlY29kZUluZGV4OwotICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1
ZXM7Ci0gICAgYm9vbCBtdXN0SGFuZGxlVmFsdWVzTWF5SW5jbHVkZUdhcmJhZ2UgeyB0cnVlIH07
Ci0gICAgTG9jayBtdXN0SGFuZGxlVmFsdWVDbGVhbmluZ0xvY2s7Ci0gICAgCi0gICAgVGhyZWFk
RGF0YSogdGhyZWFkRGF0YTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1f
Y29kZUJsb2NrOyB9CiAKLSAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxh
dGlvbjsKKyAgICBDb21waWxhdGlvbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsg
fQorICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3NyRW50cnlCeXRlY29kZUluZGV4OyB9CisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11
c3RIYW5kbGVWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX211c3RIYW5kbGVWYWx1ZXM7IH0KIAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxGaW5hbGl6ZXI+IGZpbmFsaXplcjsKLSAgICAKLSAgICBSZWZQ
dHI8SW5saW5lQ2FsbEZyYW1lU2V0PiBpbmxpbmVDYWxsRnJhbWVzOwotICAgIERlc2lyZWRXYXRj
aHBvaW50cyB3YXRjaHBvaW50czsKLSAgICBEZXNpcmVkSWRlbnRpZmllcnMgaWRlbnRpZmllcnM7
Ci0gICAgRGVzaXJlZFdlYWtSZWZlcmVuY2VzIHdlYWtSZWZlcmVuY2VzOwotICAgIERlc2lyZWRU
cmFuc2l0aW9ucyB0cmFuc2l0aW9uczsKLSAgICBSZWNvcmRlZFN0YXR1c2VzIHJlY29yZGVkU3Rh
dHVzZXM7Ci0gICAgCi0gICAgYm9vbCB3aWxsVHJ5VG9UaWVyVXAgeyBmYWxzZSB9OworICAgIFRo
cmVhZERhdGEqIHRocmVhZERhdGEoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZERhdGE7IH0KKyAg
ICBQcm9maWxlcjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9j
b21waWxhdGlvbi5nZXQoKTsgfQorCisgICAgRmluYWxpemVyKiBmaW5hbGl6ZXIoKSBjb25zdCB7
IHJldHVybiBtX2ZpbmFsaXplci5nZXQoKTsgfQorICAgIHZvaWQgc2V0RmluYWxpemVyKHN0ZDo6
dW5pcXVlX3B0cjxGaW5hbGl6ZXI+JiYgZmluYWxpemVyKSB7IG1fZmluYWxpemVyID0gV1RGTW92
ZShmaW5hbGl6ZXIpOyB9CiAKLSAgICBIYXNoTWFwPHVuc2lnbmVkLCBWZWN0b3I8dW5zaWduZWQ+
PiB0aWVyVXBJbkxvb3BIaWVyYXJjaHk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiB0aWVyVXBBbmRP
U1JFbnRlckJ5dGVjb2RlczsKKyAgICBSZWZQdHI8SW5saW5lQ2FsbEZyYW1lU2V0PiBpbmxpbmVD
YWxsRnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDYWxsRnJhbWVzOyB9CisgICAgRGVz
aXJlZFdhdGNocG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1fd2F0Y2hwb2ludHM7IH0K
KyAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9pZGVudGlm
aWVyczsgfQorICAgIERlc2lyZWRXZWFrUmVmZXJlbmNlcyYgd2Vha1JlZmVyZW5jZXMoKSB7IHJl
dHVybiBtX3dlYWtSZWZlcmVuY2VzOyB9CisgICAgRGVzaXJlZFRyYW5zaXRpb25zJiB0cmFuc2l0
aW9ucygpIHsgcmV0dXJuIG1fdHJhbnNpdGlvbnM7IH0KKyAgICBSZWNvcmRlZFN0YXR1c2VzJiBy
ZWNvcmRlZFN0YXR1c2VzKCkgeyByZXR1cm4gbV9yZWNvcmRlZFN0YXR1c2VzOyB9CisKKyAgICBi
b29sIHdpbGxUcnlUb1RpZXJVcCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbFRyeVRvVGllclVwOyB9
CisgICAgdm9pZCBzZXRXaWxsVHJ5VG9UaWVyVXAoYm9vbCB3aWxsVHJ5VG9UaWVyVXApIHsgbV93
aWxsVHJ5VG9UaWVyVXAgPSB3aWxsVHJ5VG9UaWVyVXA7IH0KKworICAgIEhhc2hNYXA8dW5zaWdu
ZWQsIFZlY3Rvcjx1bnNpZ25lZD4+JiB0aWVyVXBJbkxvb3BIaWVyYXJjaHkoKSB7IHJldHVybiBt
X3RpZXJVcEluTG9vcEhpZXJhcmNoeTsgfQorICAgIFZlY3Rvcjx1bnNpZ25lZD4mIHRpZXJVcEFu
ZE9TUkVudGVyQnl0ZWNvZGVzKCkgeyByZXR1cm4gbV90aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2Rl
czsgfQogCiAgICAgZW51bSBTdGFnZSB7IFByZXBhcmluZywgQ29tcGlsaW5nLCBSZWFkeSwgQ2Fu
Y2VsbGVkIH07Ci0gICAgU3RhZ2Ugc3RhZ2U7CisgICAgU3RhZ2Ugc3RhZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3N0YWdlOyB9CiAKLSAgICBSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
PiBjYWxsYmFjazsKKyAgICBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sqIGNhbGxiYWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsYmFjay5nZXQoKTsgfQorICAgIHZvaWQgc2V0Q2FsbGJhY2so
UmVmPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykgeyBtX2NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayk7IH0KIAogcHJpdmF0ZToKICAgICBib29sIGNvbXB1dGVDb21w
aWxlVGltZXMoKSBjb25zdDsKQEAgLTEyOCw2ICsxMjQsNDMgQEAgcHJpdmF0ZToKICAgICBib29s
IGlzU3RpbGxWYWxpZCgpOwogICAgIHZvaWQgcmVhbGx5QWRkKENvbW1vbkRhdGEqKTsKIAorICAg
IC8vIFdhcm5pbmc6IHByZXR0eSBtdWNoIGFsbCBvZiB0aGUgcG9pbnRlciBmaWVsZHMgaW4gdGhp
cyBvYmplY3QgZ2V0IG51bGxlZCBieSBjYW5jZWwoKS4gU28sIGlmCisgICAgLy8geW91J3JlIHdy
aXRpbmcgY29kZSB0aGF0IGlzIGNhbGxhYmxlIG9uIHRoZSBjYW5jZWwgcGF0aCwgYmUgc3VyZSB0
byBudWxsIGNoZWNrIGV2ZXJ5dGhpbmchCisKKyAgICBWTSogbV92bTsKKworICAgIC8vIFRoZXNl
IGNhbiBiZSByYXcgcG9pbnRlcnMgYmVjYXVzZSB3ZSB2aXNpdCB0aGVtIGR1cmluZyBldmVyeSBH
QyBpbiBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbi4KKyAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOworICAgIENvZGVCbG9jayogbV9wcm9maWxlZERGR0NvZGVCbG9jazsKKworICAgIENv
bXBpbGF0aW9uTW9kZSBtX21vZGU7CisgICAgY29uc3QgdW5zaWduZWQgbV9vc3JFbnRyeUJ5dGVj
b2RlSW5kZXg7CisgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbV9tdXN0SGFuZGxlVmFsdWVzOworICAg
IGJvb2wgbV9tdXN0SGFuZGxlVmFsdWVzTWF5SW5jbHVkZUdhcmJhZ2UgeyB0cnVlIH07CisgICAg
TG9jayBtX211c3RIYW5kbGVWYWx1ZUNsZWFuaW5nTG9jazsKKworICAgIFRocmVhZERhdGEqIG1f
dGhyZWFkRGF0YTsKKworICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IG1fY29tcGls
YXRpb247CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmluYWxpemVyPiBtX2ZpbmFsaXplcjsKKwor
ICAgIFJlZlB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IG1faW5saW5lQ2FsbEZyYW1lczsKKyAgICBE
ZXNpcmVkV2F0Y2hwb2ludHMgbV93YXRjaHBvaW50czsKKyAgICBEZXNpcmVkSWRlbnRpZmllcnMg
bV9pZGVudGlmaWVyczsKKyAgICBEZXNpcmVkV2Vha1JlZmVyZW5jZXMgbV93ZWFrUmVmZXJlbmNl
czsKKyAgICBEZXNpcmVkVHJhbnNpdGlvbnMgbV90cmFuc2l0aW9uczsKKyAgICBSZWNvcmRlZFN0
YXR1c2VzIG1fcmVjb3JkZWRTdGF0dXNlczsKKworICAgIGJvb2wgbV93aWxsVHJ5VG9UaWVyVXAg
eyBmYWxzZSB9OworCisgICAgSGFzaE1hcDx1bnNpZ25lZCwgVmVjdG9yPHVuc2lnbmVkPj4gbV90
aWVyVXBJbkxvb3BIaWVyYXJjaHk7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3RpZXJVcEFuZE9T
UkVudGVyQnl0ZWNvZGVzOworCisgICAgU3RhZ2UgbV9zdGFnZTsKKworICAgIFJlZlB0cjxEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2s7CisKICAgICBNb25vdG9uaWNUaW1l
IG1fdGltZUJlZm9yZUZUTDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW5JbmxpbmVzLmgJKHJldmlzaW9uIDIzNDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSwxMCArNDEsMTAgQEAg
dm9pZCBQbGFuOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKGNvbnN0IAogICAgIC8vIGFuIGV4cGxp
Y2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhh
dAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgog
Ci0gICAgZnVuYyhjb2RlQmxvY2spOwotICAgIGZ1bmMoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKLSAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIGZ1bmMocHJvZmlsZWRE
RkdDb2RlQmxvY2spOworICAgIGZ1bmMobV9jb2RlQmxvY2spOworICAgIGZ1bmMobV9jb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkpOworICAgIGlmIChtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKQorICAg
ICAgICBmdW5jKG1fcHJvZmlsZWRERkdDb2RlQmxvY2spOwogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2Nh
bENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMjM0MTYwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OSw4ICsxNzksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGlzUGhhbnRvbU5vZGUgJiYgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCisK
KyAgICAgICAgICAgIGlmIChpc1BoYW50b21Ob2RlICYmIGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1v
ZGUoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChpc0ZvcndhcmRpbmdOb2RlICYmIG1fbm9kZS0+aGFzQXJndW1lbnRzQ2hpbGQoKSAmJiBt
X25vZGUtPmFyZ3VtZW50c0NoaWxkKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDIzNDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVj
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCwxNiArNjgsMTcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJn
ZXQpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoYmxvY2stPmJ5
dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KQorICAg
ICAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IG1fZ3JhcGgubV9wbGFuLm9zckVu
dHJ5Qnl0ZWNvZGVJbmRleCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1f
cGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgICAgIGNv
bnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4u
bXVzdEhhbmRsZVZhbHVlcygpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
dXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaW50IG9wZXJh
bmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwog
ICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpOwog
ICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAotICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fcGxhbi5tdXN0
SGFuZGxlVmFsdWVzW2ldKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKG11c3RIYW5kbGVWYWx1ZXNbaV0pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBvaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAJ
KHJldmlzaW9uIDIzNDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZXBv
aW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcgKzQ3LDcgQEAgYm9vbCBTYWZlcG9pbnQ6
OlJlc3VsdDo6ZGlkR2V0Q2FuY2VsbGVkKAogfQogCiBTYWZlcG9pbnQ6OlNhZmVwb2ludChQbGFu
JiBwbGFuLCBSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1fdm0ocGxhbi52bSkKKyAgICA6IG1fdm0o
cGxhbi52bSgpKQogICAgICwgbV9wbGFuKHBsYW4pCiAgICAgLCBtX2RpZENhbGxCZWdpbihmYWxz
ZSkKICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKQEAgLTYwLDcgKzYwLDcgQEAgU2FmZXBvaW50OjpT
YWZlcG9pbnQoUGxhbiYgcGxhbiwgUmVzdWx0JgogU2FmZXBvaW50Ojp+U2FmZXBvaW50KCkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVChtX2RpZENhbGxCZWdpbik7Ci0gICAgaWYgKFRocmVhZERhdGEq
IGRhdGEgPSBtX3BsYW4udGhyZWFkRGF0YSkgeworICAgIGlmIChUaHJlYWREYXRhKiBkYXRhID0g
bV9wbGFuLnRocmVhZERhdGEoKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChkYXRhLT5tX3Nh
ZmVwb2ludCA9PSB0aGlzKTsKICAgICAgICAgZGF0YS0+bV9yaWdodFRvUnVuLmxvY2soKTsKICAg
ICAgICAgZGF0YS0+bV9zYWZlcG9pbnQgPSBudWxscHRyOwpAQCAtNzcsNyArNzcsNyBAQCB2b2lk
IFNhZmVwb2ludDo6YmVnaW4oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RpZENhbGxCZWdp
bik7CiAgICAgbV9kaWRDYWxsQmVnaW4gPSB0cnVlOwotICAgIGlmIChUaHJlYWREYXRhKiBkYXRh
ID0gbV9wbGFuLnRocmVhZERhdGEpIHsKKyAgICBpZiAoVGhyZWFkRGF0YSogZGF0YSA9IG1fcGxh
bi50aHJlYWREYXRhKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWRhdGEtPm1fc2FmZXBv
aW50KTsKICAgICAgICAgZGF0YS0+bV9zYWZlcG9pbnQgPSB0aGlzOwogICAgICAgICBkYXRhLT5t
X3JpZ2h0VG9SdW4udW5sb2NrRmFpcmx5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZXBvaW50LmgJKHJldmlzaW9uIDIzNDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZXBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAg
Y2xhc3MgVk07CiAKIG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBQbGFuOwogY2xhc3MgU2Nhbm5h
YmxlOwotc3RydWN0IFBsYW47CiAKIGNsYXNzIFNhZmVwb2ludCB7CiBwdWJsaWM6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAyMzQxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxNCArMTQ1LDE0IEBAIHB1YmxpYzoKIAogICAgICAg
ICBzdGF0aWMgVHJ1c3RlZEltbVB0ciB3ZWFrUG9pbnRlcihHcmFwaCYgZ3JhcGgsIEpTQ2VsbCog
Y2VsbCkKICAgICAgICAgeyAgICAgCi0gICAgICAgICAgICBncmFwaC5tX3BsYW4ud2Vha1JlZmVy
ZW5jZXMuYWRkTGF6aWx5KGNlbGwpOworICAgICAgICAgICAgZ3JhcGgubV9wbGFuLndlYWtSZWZl
cmVuY2VzKCkuYWRkTGF6aWx5KGNlbGwpOwogICAgICAgICAgICAgcmV0dXJuIFRydXN0ZWRJbW1Q
dHIoYml0d2lzZV9jYXN0PHNpemVfdD4oY2VsbCkpOwogICAgICAgICB9CiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5PgogICAgICAgICBzdGF0aWMgVHJ1c3RlZEltbVB0ciB3ZWFrUG9p
c29uZWRQb2ludGVyKEdyYXBoJiBncmFwaCwgSlNDZWxsKiBjZWxsKQogICAgICAgICB7ICAgICAK
LSAgICAgICAgICAgIGdyYXBoLm1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoY2VsbCk7
CisgICAgICAgICAgICBncmFwaC5tX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5hZGRMYXppbHkoY2Vs
bCk7CiAgICAgICAgICAgICByZXR1cm4gVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8c2l6ZV90
PihjZWxsKSBeIEtleTo6a2V5KCkpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkocmV2aXNpb24gMjM0
MTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMyw4ICsxMDMsOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKElubGluZUNhbGxGcmFtZVNldDo6aXRlcmF0b3IgaXRlciA9IG1fZ3JhcGgubV9wbGFu
LmlubGluZUNhbGxGcmFtZXMtPmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisKKyAgICAgICAg
Zm9yIChJbmxpbmVDYWxsRnJhbWVTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fcGxhbi5p
bmxpbmVDYWxsRnJhbWVzKCktPmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9ICppdGVyOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMzQxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjIs
OSArOTIyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoOjpwYXJh
bWV0ZXJTbG90c0ZvckFyZ0NvdW50KG51bUFsbG9jYXRlZEFyZ3MpKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGgubV9w
bGFuLnJlY29yZGVkU3RhdHVzZXMuYWRkQ2FsbExpbmtTdGF0dXMobV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIENhbGxMaW5rU3RhdHVzKGNhbGxWYXJpYW50KSk7Ci0gICAgICAgICAgICAKKworICAg
ICAgICAgICAgbV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZENhbGxMaW5rU3Rh
dHVzKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLCBDYWxsTGlua1N0YXR1cyhjYWxsVmFyaWFudCkp
OworCiAgICAgICAgICAgICBtX25vZGUtPmNvbnZlcnRUb0RpcmVjdENhbGwobV9ncmFwaC5mcmVl
emUoZXhlY3V0YWJsZSkpOwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMzQxNjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsOCArNjEsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBydW4oKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3BsYW4u
bW9kZSA9PSBERkdNb2RlKTsKLSAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3Jh
cGgubV9wbGFuLm1vZGUoKSA9PSBERkdNb2RlKTsKKwogICAgICAgICBpZiAoIU9wdGlvbnM6OnVz
ZUZUTEpJVCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKQEAgLTExMCw3
ICsxMTAsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4ID0gb3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgaWYg
KGNhbk9TUkVudGVyKQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50aWVyVXBB
bmRPU1JFbnRlckJ5dGVjb2Rlcy5hcHBlbmQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9wbGFuLnRpZXJVcEFuZE9TUkVudGVyQnl0ZWNvZGVzKCkuYXBwZW5k
KGJ5dGVjb2RlSW5kZXgpOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IE5hdHVyYWxMb29w
KiBsb29wID0gbmF0dXJhbExvb3BzLmlubmVyTW9zdExvb3BPZihibG9jaykpIHsKICAgICAgICAg
ICAgICAgICAgICAgTG9vcEhpbnREZXNjcmlwdG9yIGRlc2NyaXB0b3I7CkBAIC0xNDcsOSArMTQ3
LDkgQEAgcHVibGljOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIXRpZXJVcENh
bmRpZGF0ZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRpZXJV
cEluTG9vcEhpZXJhcmNoeS5hZGQoZW50cnkua2V5LCBXVEZNb3ZlKHRpZXJVcENhbmRpZGF0ZXMp
KTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50aWVyVXBJbkxvb3BIaWVyYXJjaHko
KS5hZGQoZW50cnkua2V5LCBXVEZNb3ZlKHRpZXJVcENhbmRpZGF0ZXMpKTsKICAgICAgICAgfQot
ICAgICAgICBtX2dyYXBoLm1fcGxhbi53aWxsVHJ5VG9UaWVyVXAgPSB0cnVlOworICAgICAgICBt
X2dyYXBoLm1fcGxhbi5zZXRXaWxsVHJ5VG9UaWVyVXAodHJ1ZSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDIzNDE2MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQyLDEwICs0NDIsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAgICAgaWYgKCFibG9j
ay0+aXNPU1JUYXJnZXQpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBp
ZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29k
ZUluZGV4KQorICAgICAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IG1fZ3JhcGgu
bV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fcGxhbi5tdXN0
SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG9wZXJhbmQg
PSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAg
ICAgICAgICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9n
cmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcygpOworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5k
KG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC00NTUsNyArNDU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKCFUeXBlQ2hlY2s6OmlzVmFsaWRU
b0hvaXN0KGl0ZXItPnZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1
ZXNbaV07CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG11c3RIYW5kbGVWYWx1ZXNb
aV07CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkgfHwgVHlw
ZUNoZWNrOjppc0NvbnRyYXZlbmVkQnlWYWx1ZShpdGVyLT52YWx1ZSwgdmFsdWUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIFR5cGVDaGVjazo6ZGlzYWJsZUhvaXN0aW5nKGl0ZXItPnZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjM0MTYwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw3ICs2
Niw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBQb2xs
UmVzdWx0OjpTdG9wOwogICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcGxhbi0+
c3RhZ2UgPT0gUGxhbjo6UHJlcGFyaW5nKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9wbGFu
LT5zdGFnZSgpID09IFBsYW46OlByZXBhcmluZyk7CiAgICAgICAgIG1fd29ya2xpc3QubV9udW1i
ZXJPZkFjdGl2ZVRocmVhZHMrKzsKICAgICAgICAgcmV0dXJuIFBvbGxSZXN1bHQ6Oldvcms7CiAg
ICAgfQpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9kYXRhLm1fcmlnaHRUb1J1bik7CiAgICAgICAgIHsKICAgICAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKCptX3dvcmtsaXN0Lm1fbG9jayk7Ci0gICAgICAgICAgICBpZiAobV9wbGFu
LT5zdGFnZSA9PSBQbGFuOjpDYW5jZWxsZWQpCisgICAgICAgICAgICBpZiAobV9wbGFuLT5zdGFn
ZSgpID09IFBsYW46OkNhbmNlbGxlZCkKICAgICAgICAgICAgICAgICByZXR1cm4gV29ya1Jlc3Vs
dDo6Q29udGludWU7CiAgICAgICAgICAgICBtX3BsYW4tPm5vdGlmeUNvbXBpbGluZygpOwogICAg
ICAgICB9CkBAIC0xMDksMTMgKzEwOSwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBkYXRh
TG9nKG1fd29ya2xpc3QsICI6IENvbXBpbGluZyAiLCBtX3BsYW4tPmtleSgpLCAiIGFzeW5jaHJv
bm91c2x5XG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gd2F5IGZvciB0aGUg
R0MgdG8gYmUgc2FmZXBvaW50aW5nIHNpbmNlIHdlIG93biByaWdodFRvUnVuLgotICAgICAgICBp
ZiAobV9wbGFuLT52bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CisgICAgICAgIGlmIChtX3Bs
YW4tPnZtKCktPmhlYXAud29ybGRJc1N0b3BwZWQoKSkgewogICAgICAgICAgICAgZGF0YUxvZygi
SGVhcCBpcyBzdG9wZWQgYnV0IGhlcmUgd2UgYXJlISAoMSlcbiIpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICBtX3BsYW4tPmNv
bXBpbGVJblRocmVhZCgmbV9kYXRhKTsKLSAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UgIT0gUGxh
bjo6Q2FuY2VsbGVkKSB7Ci0gICAgICAgICAgICBpZiAobV9wbGFuLT52bS0+aGVhcC53b3JsZElz
U3RvcHBlZCgpKSB7CisgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlKCkgIT0gUGxhbjo6Q2FuY2Vs
bGVkKSB7CisgICAgICAgICAgICBpZiAobV9wbGFuLT52bSgpLT5oZWFwLndvcmxkSXNTdG9wcGVk
KCkpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJIZWFwIGlzIHN0b3BwZWQgYnV0IGhlcmUg
d2UgYXJlISAoMilcbiIpOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICB9CkBAIC0xMjMsNyArMTIzLDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICAKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fd29ya2xp
c3QubV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlID09IFBsYW46OkNhbmNl
bGxlZCkKKyAgICAgICAgICAgIGlmIChtX3BsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q2FuY2VsbGVk
KQogICAgICAgICAgICAgICAgIHJldHVybiBXb3JrUmVzdWx0OjpDb250aW51ZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9wbGFuLT5ub3RpZnlSZWFkeSgpOwpAQCAtMTM0LDggKzEzNCw4
IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAg
bV93b3JrbGlzdC5tX3JlYWR5UGxhbnMuYXBwZW5kKG1fcGxhbik7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BsYW4tPnZtLT5oZWFwLndvcmxkSXNTdG9wcGVk
KCkpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wbGFuLT52bSgpLT5oZWFwLndv
cmxkSXNTdG9wcGVkKCkpOwogICAgICAgICAgICAgbV93b3JrbGlzdC5tX3BsYW5Db21waWxlZC5u
b3RpZnlBbGwoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIyMyw3ICsyMjMsNyBAQCBib29s
IFdvcmtsaXN0Ojppc0FjdGl2ZUZvclZNKFZNJiB2bSkgY29uCiAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoKm1fbG9jayk7CiAgICAgUGxhbk1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbGFucy5l
bmQoKTsKICAgICBmb3IgKFBsYW5NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT52
bSA9PSAmdm0pCisgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+dm0oKSA9PSAmdm0pCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQ4LDcgKzI0
OCw3IEBAIFdvcmtsaXN0OjpTdGF0ZSBXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGEKICAgICBQbGFu
TWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5maW5kKGtleSk7CiAgICAgaWYgKGl0ZXIgPT0g
bV9wbGFucy5lbmQoKSkKICAgICAgICAgcmV0dXJuIE5vdEtub3duOwotICAgIHJldHVybiBpdGVy
LT52YWx1ZS0+c3RhZ2UgPT0gUGxhbjo6UmVhZHkgPyBDb21waWxlZCA6IENvbXBpbGluZzsKKyAg
ICByZXR1cm4gaXRlci0+dmFsdWUtPnN0YWdlKCkgPT0gUGxhbjo6UmVhZHkgPyBDb21waWxlZCA6
IENvbXBpbGluZzsKIH0KIAogdm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxhbnNGb3JWTUFy
ZVJlYWR5KFZNJiB2bSkKQEAgLTI3OCw5ICsyNzgsOSBAQCB2b2lkIFdvcmtsaXN0Ojp3YWl0VW50
aWxBbGxQbGFuc0ZvclZNQXJlCiAgICAgICAgIGJvb2wgYWxsQXJlQ29tcGlsZWQgPSB0cnVlOwog
ICAgICAgICBQbGFuTWFwOjppdGVyYXRvciBlbmQgPSBtX3BsYW5zLmVuZCgpOwogICAgICAgICBm
b3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+dm0gIT0gJnZtKQorICAg
ICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLT52bSgpICE9ICZ2bSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+c3RhZ2UgIT0gUGxhbjo6UmVh
ZHkpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS0+c3RhZ2UoKSAhPSBQbGFuOjpSZWFk
eSkgewogICAgICAgICAgICAgICAgIGFsbEFyZUNvbXBpbGVkID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yOTksOSArMjk5LDkgQEAgdm9pZCBXb3Jr
bGlzdDo6cmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKAogICAgIExvY2tIb2xkZXIgbG9ja2VyKCpt
X2xvY2spOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWFkeVBsYW5zLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9yZWFkeVBsYW5zW2ldOwotICAg
ICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0p
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHBsYW4tPnN0YWdlICE9IFBsYW46
OlJlYWR5KQorICAgICAgICBpZiAocGxhbi0+c3RhZ2UoKSAhPSBQbGFuOjpSZWFkeSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBteVJlYWR5UGxhbnMuYXBwZW5kKHBsYW4pOwogICAg
ICAgICBtX3JlYWR5UGxhbnNbaS0tXSA9IG1fcmVhZHlQbGFucy5sYXN0KCk7CkBAIC0zMzEsOSAr
MzMxLDkgQEAgV29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYQogICAgICAg
ICAKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkpCiAgICAg
ICAgICAgICBkYXRhTG9nKCp0aGlzLCAiOiBDb21wbGV0aW5nICIsIGN1cnJlbnRLZXksICJcbiIp
OwotICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UgPT0gUGxhbjo6
UmVhZHkpOwotICAgICAgICAKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChwbGFuLT5zdGFnZSgp
ID09IFBsYW46OlJlYWR5KTsKKwogICAgICAgICBwbGFuLT5maW5hbGl6ZUFuZE5vdGlmeUNhbGxi
YWNrKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoY3VycmVudEtleSA9PSByZXF1ZXN0ZWRLZXkp
CkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJlbmNlcyhT
bG90VgogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICAgICAgZm9yIChQ
bGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMu
ZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdl
dCgpOwotICAgICAgICAgICAgaWYgKHBsYW4tPnZtICE9IHZtKQorICAgICAgICAgICAgaWYgKHBs
YW4tPnZtKCkgIT0gdm0pCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBw
bGFuLT5jaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKICAgICAgICAgfQpA
QCAtNDAxLDEzICs0MDEsMTMgQEAgdm9pZCBXb3JrbGlzdDo6cmVtb3ZlRGVhZFBsYW5zKFZNJiB2
bSkKICAgICAgICAgSGFzaFNldDxDb21waWxhdGlvbktleT4gZGVhZFBsYW5LZXlzOwogICAgICAg
ICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0g
bV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+
dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAg
ICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgaWYgKHBsYW4tPmlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpIHsKICAgICAgICAg
ICAgICAgICBwbGFuLT5maW5hbGl6ZUluR0MoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlICE9
IFBsYW46OkNhbmNlbGxlZCk7IC8vIFNob3VsZCBub3QgYmUgY2FuY2VsbGVkLCB5ZXQuCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChwbGFuLT5zdGFnZSgpICE9IFBsYW46OkNhbmNlbGxlZCk7
IC8vIFNob3VsZCBub3QgYmUgY2FuY2VsbGVkLCB5ZXQuCiAgICAgICAgICAgICBBU1NFUlQoIWRl
YWRQbGFuS2V5cy5jb250YWlucyhwbGFuLT5rZXkoKSkpOwogICAgICAgICAgICAgZGVhZFBsYW5L
ZXlzLmFkZChwbGFuLT5rZXkoKSk7CiAgICAgICAgIH0KQEAgLTQxNywxMiArNDE3LDEyIEBAIHZv
aWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgICAgICAgICBEZXF1ZTxS
ZWZQdHI8UGxhbj4+IG5ld1F1ZXVlOwogICAgICAgICAgICAgd2hpbGUgKCFtX3F1ZXVlLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gbV9xdWV1ZS50YWtl
Rmlyc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAocGxhbi0+c3RhZ2UgIT0gUGxhbjo6Q2FuY2Vs
bGVkKQorICAgICAgICAgICAgICAgIGlmIChwbGFuLT5zdGFnZSgpICE9IFBsYW46OkNhbmNlbGxl
ZCkKICAgICAgICAgICAgICAgICAgICAgbmV3UXVldWUuYXBwZW5kKHBsYW4pOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgbV9xdWV1ZS5zd2FwKG5ld1F1ZXVlKTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3JlYWR5UGxhbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBpZiAobV9yZWFkeVBsYW5zW2ldLT5zdGFnZSAhPSBQbGFuOjpDYW5jZWxsZWQp
CisgICAgICAgICAgICAgICAgaWYgKG1fcmVhZHlQbGFuc1tpXS0+c3RhZ2UoKSAhPSBQbGFuOjpD
YW5jZWxsZWQpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IG1fcmVhZHlQbGFuc1tpLS1dID0gbV9yZWFkeVBsYW5zLmxhc3QoKTsKICAgICAgICAgICAgICAg
ICBtX3JlYWR5UGxhbnMucmVtb3ZlTGFzdCgpOwpAQCAtNDUxLDkgKzQ1MSw5IEBAIHZvaWQgV29y
a2xpc3Q6OnJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm8KICAgICBWZWN0b3I8UmVmUHRyPFBsYW4+
PiBkZWFkUGxhbnM7CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcGxhbnMpIHsKICAgICAgICAg
UGxhbiogcGxhbiA9IGVudHJ5LnZhbHVlLmdldCgpOwotICAgICAgICBpZiAocGxhbi0+dm0gIT0g
JnZtKQorICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKHBsYW4tPnN0YWdlID09IFBsYW46OkNvbXBpbGluZykKKyAgICAgICAg
aWYgKHBsYW4tPnN0YWdlKCkgPT0gUGxhbjo6Q29tcGlsaW5nKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIGRlYWRQbGFuS2V5cy5hZGQocGxhbi0+a2V5KCkpOwogICAgICAgICBkZWFk
UGxhbnMuYXBwZW5kKHBsYW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0SW5saW5lcy5oCShyZXZpc2lvbiAyMzQxNjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcgKzQ3
LDcgQEAgdm9pZCBXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhWTQogICAgIExvY2tI
b2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9
IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAg
ICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAgICAgICBpZiAocGxhbi0+dm0g
IT0gJnZtKQorICAgICAgICBpZiAocGxhbi0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgcGxhbi0+aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhmdW5jKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9u
IDIzNDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRl
LCBTYWZlcG9pbnQ6OlJlCiAgICAgaWYgKEIzOjpBaXI6OkRpc2Fzc2VtYmxlciogZGlzYXNzZW1i
bGVyID0gc3RhdGUucHJvYy0+Y29kZSgpLmRpc2Fzc2VtYmxlcigpKSB7CiAgICAgICAgIFByaW50
U3RyZWFtJiBvdXQgPSBXVEY6OmRhdGFGaWxlKCk7CiAKLSAgICAgICAgb3V0LnByaW50KCJHZW5l
cmF0ZWQgIiwgc3RhdGUuZ3JhcGgubV9wbGFuLm1vZGUsICIgY29kZSBmb3IgIiwgQ29kZUJsb2Nr
V2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCksICIs
IGluc3RydWN0aW9uIGNvdW50ID0gIiwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2stPmluc3RydWN0
aW9uQ291bnQoKSwgIjpcbiIpOworICAgICAgICBvdXQucHJpbnQoIkdlbmVyYXRlZCAiLCBzdGF0
ZS5ncmFwaC5tX3BsYW4ubW9kZSgpLCAiIGNvZGUgZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBl
KHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiLCBpbnN0cnVjdGlv
biBjb3VudCA9ICIsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCks
ICI6XG4iKTsKIAogICAgICAgICBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyID0gKnN0YXRlLmZpbmFs
aXplci0+YjNDb2RlTGlua0J1ZmZlcjsKICAgICAgICAgQjM6OlZhbHVlKiBjdXJyZW50QjNWYWx1
ZSA9IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZhaWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRmFpbC5jcHAJKHJl
dmlzaW9uIDIzNDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRmFpbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogCiB2b2lk
IGZhaWwoU3RhdGUmIHN0YXRlKQogewotICAgIHN0YXRlLmdyYXBoLm1fcGxhbi5maW5hbGl6ZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPEZhaWxlZEZpbmFsaXplcj4oc3RhdGUuZ3JhcGgubV9wbGFuKTsK
KyAgICBzdGF0ZS5ncmFwaC5tX3BsYW4uc2V0RmluYWxpemVyKHN0ZDo6bWFrZV91bmlxdWU8RmFp
bGVkRmluYWxpemVyPihzdGF0ZS5ncmFwaC5tX3BsYW4pKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmlu
YWxpemVyLmNwcAkocmV2aXNpb24gMjM0MTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwyMSArNzUsMjEgQEAg
Ym9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKCkKICAgICAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYjNDb2RlUmVmID0KICAgICAgICAgRklOQUxJWkVf
Q09ERV9JRihkdW1wRGlzYXNzZW1ibHksICpiM0NvZGVMaW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFn
LAotICAgICAgICAgICAgIkZUTCBCMyBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tX
aXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpOwor
ICAgICAgICAgICAgIkZUTCBCMyBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRo
SklUVHlwZShtX3BsYW4uY29kZUJsb2NrKCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSk7CiAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gYXJpdHlDaGVja0NvZGVS
ZWYgPSBlbnRyeXBvaW50TGlua0J1ZmZlcgogICAgICAgICA/IEZJTkFMSVpFX0NPREVfSUYoZHVt
cERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZmZXIsIEpTRW50cnlQdHJUYWcsCi0gICAg
ICAgICAgICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNv
ZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9j
aywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikKKyAgICAgICAgICAgICJGVEwg
ZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBCMyBnZW5lcmF0ZWQgY29kZSBhdCAlcCIsIHRv
Q1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrKCksIEpJVENvZGU6
OkZUTEpJVCkpLmRhdGEoKSwgZnVuY3Rpb24pCiAgICAgICAgIDogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpTRW50cnlQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoYjNDb2RlUmVmLmNv
ZGUoKSk7CiAKICAgICBqaXRDb2RlLT5pbml0aWFsaXplQjNDb2RlKGIzQ29kZVJlZik7CiAgICAg
aml0Q29kZS0+aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KGFyaXR5Q2hlY2tDb2RlUmVm
KTsKIAotICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUoKmppdENvZGUpOworICAgIG1f
cGxhbi5jb2RlQmxvY2soKS0+c2V0SklUQ29kZSgqaml0Q29kZSk7CisKKyAgICBpZiAoVU5MSUtF
TFkobV9wbGFuLmNvbXBpbGF0aW9uKCkpKQorICAgICAgICBtX3BsYW4udm0oKS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3BsYW4uY29kZUJsb2NrKCksICptX3BsYW4u
Y29tcGlsYXRpb24oKSk7CiAKLSAgICBpZiAoVU5MSUtFTFkobV9wbGFuLmNvbXBpbGF0aW9uKSkK
LSAgICAgICAgbV9wbGFuLnZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9u
KG1fcGxhbi5jb2RlQmxvY2ssICptX3BsYW4uY29tcGlsYXRpb24pOwotICAgIAogICAgIHJldHVy
biB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJl
dmlzaW9uIDIzNDE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDkgKzUzLDkgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkK
IAogICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0
ID0gZ3JhcGgucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpOwogICAgIAotICAgIGlmICgh
Z3JhcGgubV9wbGFuLmlubGluZUNhbGxGcmFtZXMtPmlzRW1wdHkoKSkKLSAgICAgICAgc3RhdGUu
aml0Q29kZS0+Y29tbW9uLmlubGluZUNhbGxGcmFtZXMgPSBncmFwaC5tX3BsYW4uaW5saW5lQ2Fs
bEZyYW1lczsKLSAgICAKKyAgICBpZiAoIWdyYXBoLm1fcGxhbi5pbmxpbmVDYWxsRnJhbWVzKCkt
PmlzRW1wdHkoKSkKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLmlubGluZUNhbGxGcmFt
ZXMgPSBncmFwaC5tX3BsYW4uaW5saW5lQ2FsbEZyYW1lcygpOworCiAgICAgZ3JhcGgucmVnaXN0
ZXJGcm96ZW5WYWx1ZXMoKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0
aGF0IHdlIHVzZSB0aGlzIGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQpAQCAtMTI1LDgg
KzEyNSw4IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIAogICAgICAgICBzdGF0
ZS5qaXRDb2RlLT5jb21tb24uY29tcGlsYXRpb24gPSBjb21waWxhdGlvbjsKICAgICB9Ci0gICAg
Ci0gICAgc3dpdGNoIChncmFwaC5tX3BsYW4ubW9kZSkgeworCisgICAgc3dpdGNoIChncmFwaC5t
X3BsYW4ubW9kZSgpKSB7CiAgICAgY2FzZSBGVExNb2RlOiB7CiAgICAgICAgIGJvb2wgcmVxdWly
ZXNBcml0eUZpeHVwID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgIT0gMTsKICAgICAgICAg
aWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0
eUZpeHVwKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCShyZXZpc2lvbiAyMzQxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2NjksNyArNjY2OSw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJh
c2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uLCB2YXJpYW50LmtpbmQoKSk7Ci0gICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMuYWRkTGF6aWx5KAorICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KAogICAgICAgICAg
ICAgICAgICAgICBjb2RlQmxvY2soKSwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdp
bk93bmVyKCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAKQEAg
LTE2MTA4LDggKzE2MTA4LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBh
dmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV07CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpCi0g
ICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3BsYW4ubW9kZSAhPSBGVExGb3JPU1JFbnRyeU1v
ZGUpIHsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fcGxh
bi5tb2RlKCkgIT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CisKICAgICAgICAgICAgICAgICBpZiAo
YXZhaWxhYmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFs
UmVnaXN0ZXIob3BlcmFuZCksIGV4aXRPcmlnaW4pKQogICAgICAgICAgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkxpdmUgYnl0ZWNvZGUgbG9jYWwgbm90
IGF2YWlsYWJsZTogb3BlcmFuZCA9ICIsIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgIiwgYXZh
aWxhYmlsaXR5ID0gIiwgYXZhaWxhYmlsaXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5k
YXRhKCkpOwogICAgICAgICAgICAgfQpAQCAtMTYzODQsNyArMTYzODQsNyBAQCBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICB7Ci0g
ICAgICAgIG1fZ3JhcGgubV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseSh0YXJnZXQpOwor
ICAgICAgICBtX2dyYXBoLm1fcGxhbi53ZWFrUmVmZXJlbmNlcygpLmFkZExhemlseSh0YXJnZXQp
OwogICAgIH0KIAogICAgIExWYWx1ZSBsb2FkU3RydWN0dXJlKExWYWx1ZSB2YWx1ZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAyMzQxNjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogU3RhdGU6OlN0YXRlKEdyYXBo
JiBncmFwaCkKICAgICA6IGdyYXBoKGdyYXBoKQogewotICAgIHN3aXRjaCAoZ3JhcGgubV9wbGFu
Lm1vZGUpIHsKKyAgICBzd2l0Y2ggKGdyYXBoLm1fcGxhbi5tb2RlKCkpIHsKICAgICBjYXNlIEZU
TE1vZGU6IHsKICAgICAgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpOwogICAg
ICAgICBicmVhazsKQEAgLTUxLDcgKzUxLDcgQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkK
ICAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZTogewogICAgICAgICBSZWZQdHI8Rm9yT1NSRW50
cnlKSVRDb2RlPiBjb2RlID0gYWRvcHRSZWYobmV3IEZvck9TUkVudHJ5SklUQ29kZSgpKTsKICAg
ICAgICAgY29kZS0+aW5pdGlhbGl6ZUVudHJ5QnVmZmVyKGdyYXBoLm1fdm0sIGdyYXBoLm1fcHJv
ZmlsZWRCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCkpOwotICAgICAgICBjb2RlLT5zZXRCeXRlY29k
ZUluZGV4KGdyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBjb2Rl
LT5zZXRCeXRlY29kZUluZGV4KGdyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgoKSk7
CiAgICAgICAgIGppdENvZGUgPSBjb2RlOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC02MCw4
ICs2MCw4IEBAIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGdyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEpJVEZp
bmFsaXplcj4oZ3JhcGgubV9wbGFuKTsKLSAgICBmaW5hbGl6ZXIgPSBzdGF0aWNfY2FzdDxKSVRG
aW5hbGl6ZXIqPihncmFwaC5tX3BsYW4uZmluYWxpemVyLmdldCgpKTsKKyAgICBncmFwaC5tX3Bs
YW4uc2V0RmluYWxpemVyKHN0ZDo6bWFrZV91bmlxdWU8SklURmluYWxpemVyPihncmFwaC5tX3Bs
YW4pKTsKKyAgICBmaW5hbGl6ZXIgPSBzdGF0aWNfY2FzdDxKSVRGaW5hbGl6ZXIqPihncmFwaC5t
X3BsYW4uZmluYWxpemVyKCkpOwogCiAgICAgcHJvYyA9IHN0ZDo6bWFrZV91bmlxdWU8UHJvY2Vk
dXJlPigpOwogCg==
</data>
<flag name="review"
          id="363617"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345717</attachid>
            <date>2018-07-24 15:03:29 -0700</date>
            <delta_ts>2018-07-24 15:03:29 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-187968b.patch</filename>
            <type>text/plain</type>
            <size>100085</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjM0MTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NiBA
QAorMjAxOC0wNy0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3Jpbmc6IG1ha2UgREZHOjpQbGFuIGEgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODc5NjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBTYWFtIEJhcmF0aS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGFsbCB0aGUgREZHOjpQ
bGFuIGZpZWxkcyBwcml2YXRlLCBhbmQgcHJvdmlkZSBhY2Nlc3NvciBtZXRob2RzCisgICAgICAg
IGZvciB0aGVtLiAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gcmVhc29uIGFib3V0IGhvdyB0aGVz
ZSBmaWVsZHMgYXJlIHVzZWQgYW5kCisgICAgICAgIG1vZGlmaWVkLgorCisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAg
ICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlVmFyYXJnc0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpY0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVET01KSVRHZXR0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVNb2R1bGVOYW1lc3BhY2VMb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3Rh
Y2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Q0ZBUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OmluamVj
dE9TUik6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6bm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlv
bik6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKiBkZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGlu
Z1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICogZGZnL0RGR0ZpbmFsaXpl
ci5oOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6
OmZpeHVwQ29tcGFyZVN0cmljdEVxQW5kU2FtZVZhbHVlKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OndhdGNoQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
aW5mZXJyZWRUeXBlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cmVxdWlyZWRSZWdp
c3RlckNvdW50Rm9yRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnJlZ2lzdGVyRnJv
emVuVmFsdWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cmVnaXN0ZXJTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpyZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJh
bnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFzc2VydElzUmVnaXN0ZXJlZCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNv
bXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aWRlbnRpZmllcnMpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjp3YXRjaHBvaW50cyk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SklUQ29tcGls
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmRpc2Fzc2VtYmxlKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkV2Vha1JlZmVyZW5jZSk6CisgICAgICAgICogZGZn
L0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpm
aW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKToK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAq
IGRmZy9ERkdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGhhc2U6OmJlZ2luUGhhc2Up
OgorICAgICAgICAqIGRmZy9ERkdQaGFzZS5oOgorICAgICAgICAoSlNDOjpERkc6OnJ1bkFuZExv
Zyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OlBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXB1dGVDb21waWxlVGltZXMgY29u
c3QpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnJlcG9ydENvbXBpbGVUaW1lcyBjb25zdCk6
CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
bGFuOjppc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnJlYWxseUFkZCk6
CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6bm90aWZ5Q29tcGlsaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQbGFuOjpub3RpZnlSZWFkeSk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Zmlu
YWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Omtl
eSk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmZpbmFsaXplSW5HQyk6CisgICAgICAgIChK
U0M6OkRGRzo6UGxhbjo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MpOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmNhbmNlbCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2xlYW5NdXN0SGFu
ZGxlVmFsdWVzSWZOZWNlc3NhcnkpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAg
IChKU0M6OkRGRzo6UGxhbjo6Y2FuVGllclVwQW5kT1NSRW50ZXIgY29uc3QpOgorICAgICAgICAo
SlNDOjpERkc6OlBsYW46OnZtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1vZGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpERkc6OlBsYW46Om9zckVudHJ5Qnl0ZWNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChK
U0M6OkRGRzo6UGxhbjo6bXVzdEhhbmRsZVZhbHVlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6UGxhbjo6dGhyZWFkRGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29t
cGlsYXRpb24gY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmZpbmFsaXplciBjb25z
dCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6c2V0RmluYWxpemVyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQbGFuOjppbmxpbmVDYWxsRnJhbWVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjp3YXRjaHBvaW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6aWRlbnRpZmll
cnMpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OndlYWtSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6REZHOjpQbGFuOjp0cmFuc2l0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6
cmVjb3JkZWRTdGF0dXNlcyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6d2lsbFRyeVRvVGll
clVwIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpzZXRXaWxsVHJ5VG9UaWVyVXAp
OgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OnRpZXJVcEluTG9vcEhpZXJhcmNoeSk6CisgICAg
ICAgIChKU0M6OkRGRzo6UGxhbjo6dGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXMpOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OnN0YWdlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
OjpjYWxsYmFjayBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6c2V0Q2FsbGJhY2sp
OgorICAgICAgICAqIGRmZy9ERkdQbGFuSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MpOgorICAgICAgICAqIGRmZy9ERkdQcmVjaXNlTG9j
YWxDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZUFkYXB0b3I6OnJlYWRUb3ApOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6
cnVuKToKKyAgICAgICAgKiBkZmcvREZHU2FmZXBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTYWZlcG9pbnQ6OlNhZmVwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZXBvaW50Ojp+
U2FmZXBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlcG9pbnQ6OmJlZ2luKToKKyAgICAg
ICAgKiBkZmcvREZHU2FmZXBvaW50Lmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6VHJ1c3RlZElt
bVB0cjo6d2Vha1BvaXNvbmVkUG9pbnRlcik6CisgICAgICAgICogZGZnL0RGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrTGF5b3V0UGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpU
aWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlOjpkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JFbnRyaWVzKToKKyAgICAgICAgKiBkZmcv
REZHV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0Ojppc0FjdGl2ZUZv
clZNIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Y29tcGlsYXRpb25TdGF0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1B
cmVSZWFkeSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxh
bnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQ
bGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6dmlzaXRXZWFrUmVmZXJl
bmNlcyk6CisgICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbW92ZU5vbkNvbXBpbGluZ1BsYW5zRm9yVk0p
OgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpXb3JrbGlzdDo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyk6CisgICAgICAgICogZnRsL0ZUTENv
bXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9G
VExGYWlsLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpmYWlsKToKKyAgICAgICAgKiBmdGwvRlRM
SklURmluYWxpemVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFs
aXplQ29tbW9uKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YnVpbGRFeGl0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWRkV2Vha1JlZmVyZW5jZSk6
CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTdGF0ZTo6
U3RhdGUpOgorCiAyMDE4LTA3LTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBQbGFjYXRlIGV4Y2VwdGlvbiBjaGVjayB2ZXJpZmljYXRpb24gYWZ0ZXIgcmVjZW50
IGNoYW5nZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMzQxNzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzOTUsOCArMzM5NSw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5tZXJn
ZSgqbV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxIHx8IGlzRlRMKG1f
Z3JhcGgubV9wbGFuLm1vZGUpKQorCisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJp
YW50cygpID09IDEgfHwgbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSkKICAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBkaWRGb2xkQ2xvYmJlcldvcmxkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjM0MTcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMzgsOCArMTIzOCw4IEBAIEJ5dGVDb2RlUGFyc2VyOjpUZXJtaW5h
bGl0eSBCeXRlQ29kZVBhcnMKICAgICAvLyBJZiB3ZSBoYXZlIHByb2ZpbGluZyBpbmZvcm1hdGlv
biBhYm91dCB0aGlzIGNhbGwsIGFuZCBpdCBkaWQgbm90IGJlaGF2ZSB0b28gcG9seW1vcnBoaWNh
bGx5LAogICAgIC8vIHdlIG1heSBiZSBhYmxlIHRvIGlubGluZSBpdCwgb3IgaW4gdGhlIGNhc2Ug
b2YgcmVjdXJzaXZlIHRhaWwgY2FsbHMgdHVybiBpdCBpbnRvIGEganVtcC4KICAgICBpZiAoY2Fs
bExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewotICAgICAgICBhZGRUb0dyYXBoKEZpbHRlckNh
bGxMaW5rU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcy5hZGRD
YWxsTGlua1N0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBjYWxsTGlua1N0YXR1cykpLCBjYWxs
VGFyZ2V0KTsKLSAgICAgICAgCisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyQ2FsbExpbmtTdGF0
dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkQ2FsbExpbmtT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgY2FsbExpbmtTdGF0dXMpKSwgY2FsbFRhcmdldCk7
CisKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KTsKICAgICAgICAgYXV0byBvcHRpbWl6YXRp
b25SZXN1bHQgPSBoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxMaW5rU3Rh
dHVzLCByZWdpc3Rlck9mZnNldCwgdGhpc0FyZ3VtZW50LAogICAgICAgICAgICAgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIG1fY3VycmVudEluZGV4ICsgaW5zdHJ1Y3Rpb25TaXplLCBvcCwg
a2luZCwgcHJlZGljdGlvbik7CkBAIC0xMjgzLDggKzEyODMsOCBAQCBCeXRlQ29kZVBhcnNlcjo6
VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzCiAgICAgVkVSQk9TRV9MT0coIiAgICBWYXJhcmdzIGNh
bGwgbGluayBzdGF0dXMgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwgY2FsbExpbmtT
dGF0dXMsICJcbiIpOwogICAgIAogICAgIGlmIChjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgp
KSB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyQ2FsbExpbmtTdGF0dXMsIE9wSW5mbyhtX2dy
YXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzLmFkZENhbGxMaW5rU3RhdHVzKGN1cnJlbnRDb2Rl
T3JpZ2luKCksIGNhbGxMaW5rU3RhdHVzKSksIGNhbGxUYXJnZXQpOwotICAgICAgICAKKyAgICAg
ICAgYWRkVG9HcmFwaChGaWx0ZXJDYWxsTGlua1N0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFu
LnJlY29yZGVkU3RhdHVzZXMoKS5hZGRDYWxsTGlua1N0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigp
LCBjYWxsTGlua1N0YXR1cykpLCBjYWxsVGFyZ2V0KTsKKwogICAgICAgICBpZiAoaGFuZGxlVmFy
YXJnc0lubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwKICAgICAgICAgICAgIGNhbGxMaW5rU3Rh
dHVzLCBmaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSwgVmlydHVhbFJlZ2lz
dGVyKGFyZ3VtZW50cyksCiAgICAgICAgICAgICBmaXJzdFZhckFyZ09mZnNldCwgb3AsCkBAIC0x
OTE1LDcgKzE5MTUsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBC
CiAgICAgLy8gdGhlIERGRy4gQW5kIGJ5IHBvbHl2YXJpYW50IHByb2ZpbGluZyB3ZSBtZWFuIHBv
bHl2YXJpYW50IHByb2ZpbGluZyBvZiAqdGhpcyogY2FsbC4gTm90ZSB0aGF0CiAgICAgLy8gd2Ug
Y291bGQgaW1wcm92ZSB0aGF0IGFzcGVjdCBvZiB0aGlzIGJ5IGRvaW5nIHBvbHltb3JwaGljIGlu
bGluaW5nIGJ1dCBoYXZpbmcgdGhlIHByb2ZpbGluZwogICAgIC8vIGFsc28uCi0gICAgaWYgKCFp
c0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSB8fCAhT3B0aW9uczo6dXNlUG9seW1vcnBoaWNDYWxs
SW5saW5pbmcoKSkgeworICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCAhT3B0aW9u
czo6dXNlUG9seW1vcnBoaWNDYWxsSW5saW5pbmcoKSkgewogICAgICAgICBWRVJCT1NFX0xPRygi
QmFpbGluZyBpbmxpbmluZyAoaGFyZCkuXG5TdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwg
IlxuIik7CiAgICAgICAgIHJldHVybiBDYWxsT3B0aW1pemF0aW9uUmVzdWx0OjpEaWROb3RoaW5n
OwogICAgIH0KQEAgLTI4MDcsNyArMjgwNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUludHJpbnNpY0NhbGwKIAogICAgIGNhc2UgRlRMVHJ1ZUludHJpbnNpYzogewogICAgICAgICBp
bnNlcnRDaGVja3MoKTsKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5k
KSwganNDb25zdGFudChqc0Jvb2xlYW4oaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpKSk7Cisg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGpzQ29uc3RhbnQoanNC
b29sZWFuKG1fZ3JhcGgubV9wbGFuLmlzRlRMKCkpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAgICAgCkBAIC0yODIxLDcgKzI4MjEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgY2FzZSBJc0ZpbmFsVGllckludHJpbnNpYzogewog
ICAgICAgICBpbnNlcnRDaGVja3MoKTsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRPcGVyYW5kKSwKLSAgICAgICAgICAgIGpzQ29uc3RhbnQoanNCb29sZWFuKE9wdGlvbnM6OnVz
ZUZUTEpJVCgpID8gaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgOiB0cnVlKSkpOworICAgICAg
ICAgICAganNDb25zdGFudChqc0Jvb2xlYW4oT3B0aW9uczo6dXNlRlRMSklUKCkgPyBtX2dyYXBo
Lm1fcGxhbi5pc0ZUTCgpIDogdHJ1ZSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgICAgICAKQEAgLTMxNjcsNyArMzE2Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUludHJpbnNpY0NhbGwKICAgICBjYXNlIENQVUNwdWlkSW50cmluc2ljOgogICAgIGNhc2UgQ1BV
UGF1c2VJbnRyaW5zaWM6IHsKICNpZiBDUFUoWDg2XzY0KQotICAgICAgICBpZiAoIWlzRlRMKG1f
Z3JhcGgubV9wbGFuLm1vZGUpKQorICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGluc2VydENoZWNrcygpOwogICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLApAQCAtMzMzNSw3ICszMzM1
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlRE9NSklUR2V0dGVyKAogICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdWJDbGFzcywgT3BJbmZvKGRvbUF0dHJpYnV0ZS5jbGFzc0luZm8pLCB0aGlz
Tm9kZSk7CiAgICAgCiAgICAgYm9vbCB3YXNTZWVuSW5KSVQgPSB0cnVlOwotICAgIGFkZFRvR3Jh
cGgoRmlsdGVyR2V0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3Rh
dHVzZXMuYWRkR2V0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBHZXRCeUlkU3RhdHVz
KEdldEJ5SWRTdGF0dXM6OkN1c3RvbSwgd2FzU2VlbkluSklULCB2YXJpYW50KSkpLCB0aGlzTm9k
ZSk7CisgICAgYWRkVG9HcmFwaChGaWx0ZXJHZXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5t
X3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZEdldEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmln
aW4oKSwgR2V0QnlJZFN0YXR1cyhHZXRCeUlkU3RhdHVzOjpDdXN0b20sIHdhc1NlZW5JbkpJVCwg
dmFyaWFudCkpKSwgdGhpc05vZGUpOwogCiAgICAgQ2FsbERPTUdldHRlckRhdGEqIGNhbGxET01H
ZXR0ZXJEYXRhID0gbV9ncmFwaC5tX2NhbGxET01HZXR0ZXJEYXRhLmFkZCgpOwogICAgIGNhbGxE
T01HZXR0ZXJEYXRhLT5jdXN0b21BY2Nlc3NvckdldHRlciA9IHZhcmlhbnQuY3VzdG9tQWNjZXNz
b3JHZXR0ZXIoKTsKQEAgLTMzNjcsOCArMzM2Nyw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZU1vZHVsZU5hbWVzcGEKICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2VsbCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBhZGRUb0dyYXBoKENoZWNrQ2VsbCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGdl
dEJ5SWQubW9kdWxlTmFtZXNwYWNlT2JqZWN0KCkpKSwgRWRnZShiYXNlLCBDZWxsVXNlKSk7Ci0g
ICAgCi0gICAgYWRkVG9HcmFwaChGaWx0ZXJHZXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5t
X3BsYW4ucmVjb3JkZWRTdGF0dXNlcy5hZGRHZXRCeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2lu
KCksIGdldEJ5SWQpKSwgYmFzZSk7CisKKyAgICBhZGRUb0dyYXBoKEZpbHRlckdldEJ5SWRTdGF0
dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkR2V0QnlJZFN0
YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBnZXRCeUlkKSksIGJhc2UpOwogCiAgICAgLy8gSWRl
YWxseSB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMgUGhhbnRvbS4gQnV0OgogICAgIC8vCkBA
IC00MDI5LDE2ICs0MDI5LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQo
CiAgICAgLy8gR2V0QnlJZFN0YXR1cy4gVGhhdCBtZWFucyB0aGF0IHRoZSBjb25zdGFudCBmb2xk
ZXIgYWxzbyBuZWVkcyB0byBkbyB0aGUgc2FtZSEKICAgICAKICAgICBpZiAoZ2V0QnlJZFN0YXR1
cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoZ2V0QnlJZFN0YXR1cy5tYWtlc0Nh
bGxzKCkgfHwgIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpCisgICAgICAgIGlmIChnZXRCeUlk
U3RhdHVzLm1ha2VzQ2FsbHMoKSB8fCAhbV9ncmFwaC5tX3BsYW4uaXNGVEwoKQogICAgICAgICAg
ICAgfHwgIU9wdGlvbnM6OnVzZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQogICAgICAgICAg
ICAgfHwgZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBo
aWNBY2Nlc3NJbmxpbmluZ0xpc3RTaXplKCkpIHsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKGdl
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNl
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGFk
ZFRvR3JhcGgoRmlsdGVyR2V0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29y
ZGVkU3RhdHVzZXMuYWRkR2V0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBnZXRCeUlk
U3RhdHVzKSksIGJhc2UpOwotICAgICAgICAKKworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlckdl
dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRk
R2V0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBnZXRCeUlkU3RhdHVzKSksIGJhc2Up
OworCiAgICAgICAgIFZlY3RvcjxNdWx0aUdldEJ5T2Zmc2V0Q2FzZSwgMj4gY2FzZXM7CiAgICAg
ICAgIAogICAgICAgICAvLyAxKSBFbWl0IHByb3RvdHlwZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBh
bGwgY2hhaW5zLiBUaGlzIGNvdWxkIHNvcnQgb2YgbWF5YmUgbm90IGJlCkBAIC00MDgxLDggKzQw
ODEsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYWRkVG9HcmFwaChGaWx0ZXJHZXRCeUlkU3RhdHVzLCBPcEluZm8o
bV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcy5hZGRHZXRCeUlkU3RhdHVzKGN1cnJlbnRD
b2RlT3JpZ2luKCksIGdldEJ5SWRTdGF0dXMpKSwgYmFzZSk7Ci0gICAgCisgICAgYWRkVG9HcmFw
aChGaWx0ZXJHZXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0
dXNlcygpLmFkZEdldEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgZ2V0QnlJZFN0YXR1
cykpLCBiYXNlKTsKKwogICAgIEFTU0VSVChnZXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0g
MSk7CiAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGdldEJ5SWRTdGF0dXNbMF07CiAgICAg
CkBAIC00MTc1LDcgKzQxNzUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlk
KAogICAgIH0KICAgICAKICAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkg
ewotICAgICAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8IHB1dEJ5SWRTdGF0
dXMubWFrZXNDYWxscygpCisgICAgICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSB8fCBw
dXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKQogICAgICAgICAgICAgfHwgIU9wdGlvbnM6OnVzZVBv
bHltb3JwaGljQWNjZXNzSW5saW5pbmcoKQogICAgICAgICAgICAgfHwgcHV0QnlJZFN0YXR1cy5u
dW1WYXJpYW50cygpID4gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZ0xpc3RT
aXplKCkpIHsKICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIs
IHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CkBAIC00MTk1LDggKzQxOTUsOCBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAKICAgICAgICAgaWYg
KFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24oKSkpCiAgICAgICAgICAgICBtX2dyYXBoLmNv
bXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Ci0gICAgICAgIAotICAgICAgICBh
ZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNv
cmRlZFN0YXR1c2VzLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJ
ZFN0YXR1cykpLCBiYXNlKTsKKworICAgICAgICBhZGRUb0dyYXBoKEZpbHRlclB1dEJ5SWRTdGF0
dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkUHV0QnlJZFN0
YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVzKSksIGJhc2UpOwogCiAgICAg
ICAgIGZvciAoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBwdXRCeUlkU3RhdHVzLnZh
cmlhbnRzKCkpIHsKICAgICAgICAgICAgIG1fZ3JhcGgucmVnaXN0ZXJJbmZlcnJlZFR5cGUodmFy
aWFudC5yZXF1aXJlZFR5cGUoKSk7CkBAIC00MjE4LDggKzQyMTgsOCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIAogICAgIHN3aXRjaCAodmFyaWFudC5raW5kKCkp
IHsKICAgICBjYXNlIFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlOiB7Ci0gICAgICAgIGFkZFRvR3Jh
cGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3Rh
dHVzZXMuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBwdXRCeUlkU3RhdHVz
KSksIGJhc2UpOwotICAgICAgICAKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJQdXRCeUlkU3Rh
dHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZFB1dEJ5SWRT
dGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBiYXNlKTsKKwogICAg
ICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50LCB2YWx1ZSk7CiAgICAg
ICAgIGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQogICAgICAgICAgICAgbV9n
cmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOwpAQCAtNDIyNyw4ICs0
MjI3LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICB9CiAgICAg
CiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbjogewotICAgICAgICBhZGRUb0dy
YXBoKEZpbHRlclB1dEJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0
YXR1c2VzLmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1
cykpLCBiYXNlKTsKLSAgICAgICAgCisgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0
YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlk
U3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCksIHB1dEJ5SWRTdGF0dXMpKSwgYmFzZSk7CisKICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIGlmICghY2hl
Y2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkpIHsKICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CkBA
IC00Mjk2LDggKzQyOTYsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeUlkVmFyaWFudDo6U2V0dGVyOiB7Ci0gICAg
ICAgIGFkZFRvR3JhcGgoRmlsdGVyUHV0QnlJZFN0YXR1cywgT3BJbmZvKG1fZ3JhcGgubV9wbGFu
LnJlY29yZGVkU3RhdHVzZXMuYWRkUHV0QnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBw
dXRCeUlkU3RhdHVzKSksIGJhc2UpOwotICAgICAgICAKKyAgICAgICAgYWRkVG9HcmFwaChGaWx0
ZXJQdXRCeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygp
LmFkZFB1dEJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgcHV0QnlJZFN0YXR1cykpLCBi
YXNlKTsKKwogICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGxvYWQoU3BlY0NlbGxPdGhlciwg
YmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudCk7CiAgICAgICAgIGlmICghbG9hZGVkVmFs
dWUpIHsKICAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CkBAIC01NjQ4LDcgKzU2NDgsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY2F0Y2gpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAobV9n
cmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKKyAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fcGxhbi5tb2RlKCkgPT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CiAgICAgICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gpOwogICAgICAgICAgICAgfQogCkBAIC02NDk1
LDggKzY0OTUsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGFsbE9LKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoRmlsdGVySW5CeUlkU3RhdHVzLCBPcEluZm8obV9ncmFw
aC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcy5hZGRJbkJ5SWRTdGF0dXMoY3VycmVudENvZGVPcmln
aW4oKSwgc3RhdHVzKSksIGJhc2UpOwotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJJbkJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1f
cGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkSW5CeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2lu
KCksIHN0YXR1cykpLCBiYXNlKTsKKwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBtYXRjaCA9
IGFkZFRvR3JhcGgoTWF0Y2hTdHJ1Y3R1cmUsIE9wSW5mbyhkYXRhKSwgYmFzZSk7CiAgICAgICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCksIG1hdGNoKTsKICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5f
YnlfaWQpOwpAQCAtNjY5OSw4ICs2Njk5LDggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZQogICAgICAgICAvLyBJbmxpbmUgY2FzZS4KICAgICAgICAgQVNTRVJUKGNv
ZGVCbG9jayAhPSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2spOwogICAgICAgICBBU1NFUlQo
aW5saW5lQ2FsbEZyYW1lU3RhcnQuaXNWYWxpZCgpKTsKLSAgICAgICAgCi0gICAgICAgIG1faW5s
aW5lQ2FsbEZyYW1lID0gYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV9wbGFuLmlubGluZUNhbGxG
cmFtZXMtPmFkZCgpOworCisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gYnl0ZUNvZGVQYXJz
ZXItPm1fZ3JhcGgubV9wbGFuLmlubGluZUNhbGxGcmFtZXMoKS0+YWRkKCk7CiAgICAgICAgIG1f
b3B0aW1pemVkQ29udGV4dC5pbmxpbmVDYWxsRnJhbWUgPSBtX2lubGluZUNhbGxGcmFtZTsKIAog
ICAgICAgICAvLyBUaGUgb3duZXIgaXMgdGhlIG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFs
cmVhZHkgaGF2ZSBhIGJhcnJpZXIgb24gdGhhdCB3aGVuIHRoZQpAQCAtNjc3Niw3ICs2Nzc2LDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgIH0KICAgICAKICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcFNvdXJjZUF0REZHVGltZSgpKSkgewotICAgICAg
ICBWZWN0b3I8RGVmZXJyZWRTb3VyY2VEdW1wPiYgZGVmZXJyZWRTb3VyY2VEdW1wID0gbV9ncmFw
aC5tX3BsYW4uY2FsbGJhY2stPmVuc3VyZURlZmVycmVkU291cmNlRHVtcCgpOworICAgICAgICBW
ZWN0b3I8RGVmZXJyZWRTb3VyY2VEdW1wPiYgZGVmZXJyZWRTb3VyY2VEdW1wID0gbV9ncmFwaC5t
X3BsYW4uY2FsbGJhY2soKS0+ZW5zdXJlRGVmZXJyZWRTb3VyY2VEdW1wKCk7CiAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICAgICAgRGVmZXJyZWRTb3VyY2VEdW1wIGR1
bXAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgbV9jb2RlQmxvY2ssIEpJVENvZGU6OkRG
R0pJVCwgaW5saW5lQ2FsbEZyYW1lKCktPmRpcmVjdENhbGxlcik7CiAgICAgICAgICAgICBkZWZl
cnJlZFNvdXJjZUR1bXAuYXBwZW5kKGR1bXApOwpAQCAtNjg3MCw3ICs2ODcwLDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIGlmIChtX2hhc0FueUZvcmNlT1NSRXhpdHMpIHsK
ICAgICAgICAgQmxvY2tTZXQgYmxvY2tzVG9JZ25vcmU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAg
IGlmIChibG9jay0+aXNPU1JUYXJnZXQgJiYgYmxvY2stPmJ5dGVjb2RlQmVnaW4gPT0gbV9ncmFw
aC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoYmxvY2st
PmlzT1NSVGFyZ2V0ICYmIGJsb2NrLT5ieXRlY29kZUJlZ2luID09IG1fZ3JhcGgubV9wbGFuLm9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCgpKSB7CiAgICAgICAgICAgICAgICAgYmxvY2tzVG9JZ25vcmUu
YWRkKGJsb2NrKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAyMzQx
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBo
Lm1fcmVmQ291bnRTdGF0ZSA9PSBFdmVyeXRoaW5nSXNMaXZlKTsKICAgICAgICAgCiAgICAgICAg
IG1fY291bnQgPSAwOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fdmVyYm9zZSAmJiAhc2hvdWxk
RHVtcEdyYXBoQXRFYWNoUGhhc2UobV9ncmFwaC5tX3BsYW4ubW9kZSkpIHsKKworICAgICAgICBp
ZiAobV92ZXJib3NlICYmICFzaG91bGREdW1wR3JhcGhBdEVhY2hQaGFzZShtX2dyYXBoLm1fcGxh
bi5tb2RlKCkpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgQ0ZBOlxuIik7
CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODgsNyArODgsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+
aXNPU1JUYXJnZXQpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5
dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9
IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCgpKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBy
ZWNvcmQgdGhhdCB0aGUgYmxvY2sgbmVlZHMgc29tZSBPU1Igc3R1ZmYsIGJ1dCB3ZSBkb24ndCBk
byB0aGF0IHlldC4gV2Ugd2FudCB0bwpAQCAtMTU2LDkgKzE1NiwxMCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgZGF0YUxvZygiICAgRm91bmQgbXVzdC1oYW5kbGUgYmxvY2s6ICIsICpibG9jaywg
IlxuIik7CiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5k
bGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV07CisgICAgICAgIGNvbnN0IE9wZXJh
bmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRs
ZVZhbHVlcygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5v
cGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbXVzdEhhbmRs
ZVZhbHVlc1tpXTsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAg
ICAgICAgICBpZiAobV92ZXJib3NlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIzNDE3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNyArNTIwLDcgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgUGhhbnRv
bUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgLy8gREZHIGJhY2tlbmQgcmVxdWlyZXMgdGhhdCB0
aGUgbG9jYWxzIHRoYXQgdGhpcyByZWFkcyBhcmUgZmx1c2hlZC4gRlRMIGJhY2tlbmQgY2FuIGhh
bmRsZSB0aG9zZQogICAgICAgICAvLyBsb2NhbHMgYmVpbmcgcHJvbW90ZWQuCi0gICAgICAgIGlm
ICghaXNGVEwoZ3JhcGgubV9wbGFuLm1vZGUpKQorICAgICAgICBpZiAoIWdyYXBoLm1fcGxhbi5p
c0ZUTCgpKQogICAgICAgICAgICAgcmVhZChTdGFjayk7CiAgICAgICAgIAogICAgICAgICAvLyBF
dmVuIHRob3VnaCBpdCdzIHBoYW50b20sIGl0IHN0aWxsIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBv
bmUgY2FuJ3QgYmUgcmVwbGFjZWQgd2l0aCBhbm90aGVyLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAyMzQxNzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQg
Q29tbW9uRGF0YTo6bm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihQbGFuJiBwbGFu
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZSogbm9kZSkKIHsKLSAgICBwbGFuLnRyYW5zaXRp
b25zLmFkZExhemlseSgKKyAgICBwbGFuLnRyYW5zaXRpb25zKCkuYWRkTGF6aWx5KAogICAgICAg
ICBjb2RlQmxvY2ssCiAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3du
ZXIoKSwKICAgICAgICAgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy5nZXQoKSwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAyMzQx
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKIG5hbWVz
cGFjZSBERkcgewogCiBzdHJ1Y3QgTm9kZTsKLXN0cnVjdCBQbGFuOworY2xhc3MgUGxhbjsKIAog
Ly8gQ29tbW9uRGF0YSBob2xkcyB0aGUgc2V0IG9mIGRhdGEgdGhhdCBib3RoIERGRyBhbmQgRlRM
IGNvZGUgYmxvY2tzIG5lZWQgdG8ga25vdwogLy8gYWJvdXQgdGhlbXNlbHZlcy4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAyMzQxNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYXV0byBhZGRGaWx0ZXJTdGF0dXMgPSBbJl0g
KCkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRmlsdGVyR2V0QnlJ
ZFN0YXR1cywgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1f
Z3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMuYWRkR2V0QnlJZFN0YXR1cyhub2RlLT5vcmln
aW4uc2VtYW50aWMsIHN0YXR1cykpLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1f
Z3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRHZXRCeUlkU3RhdHVzKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGNo
aWxkKSk7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAKQEAgLTU3MCw4ICs1
NzAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCisK
KyAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubV9wbGFuLmlzRlRMKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZEZp
bHRlclN0YXR1cygpOwpAQCAtNjE3LDggKzYxNyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5udW1WYXJpYW50
cygpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZh
cmlhbnRzKCkgPiAxICYmICFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKKworICAgICAgICAg
ICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSA+IDEgJiYgIW1fZ3JhcGgubV9wbGFuLmlz
RlRMKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwpAQCAtNjUwLDE1ICs2NTAsMTUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAogICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGaWx0
ZXJQdXRCeUlkU3RhdHVzLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgIE9wSW5m
byhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1c2VzLmFkZFB1dEJ5SWRTdGF0dXMobm9kZS0+
b3JpZ2luLnNlbWFudGljLCBzdGF0dXMpKSwKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1f
Z3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRQdXRCeUlkU3RhdHVzKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgc3RhdHVzKSksCiAgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQp
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlh
bnRzKCkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJ
bkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHN0YXR1c1swXSwgaWRlbnRpZmllck51bWJlcik7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkp
OworCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9wbGFuLmlzRlRMKCkpOwogCiAg
ICAgICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVs
dGlQdXRCeU9mZnNldERhdGEuYWRkKCk7CiAgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMg
PSBzdGF0dXMudmFyaWFudHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAJKHJldmlzaW9uIDIzNDE3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSw4IEBAIHN0YXRpYyBD
b21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAKICAgICBSZWY8UGxhbj4gcGxhbiA9
IGFkb3B0UmVmKAogICAgICAgICAqbmV3IFBsYW4oY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVC
bG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKSk7Ci0g
ICAgCi0gICAgcGxhbi0+Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKKworICAgIHBsYW4t
PnNldENhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoT3B0aW9uczo6dXNlQ29u
Y3VycmVudEpJVCgpKSB7CiAgICAgICAgIFdvcmtsaXN0JiB3b3JrbGlzdCA9IGVuc3VyZUdsb2Jh
bFdvcmtsaXN0Rm9yKG1vZGUpOwogICAgICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKG1v
ZGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaW5hbGl6ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5oCShyZXZp
c2lvbiAyMzQxNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAotc3RydWN0IFBsYW47CitjbGFzcyBQbGFuOwogCiBjbGFzcyBGaW5hbGl6
ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZpbmFsaXplcik7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAyMzQxNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTA3LDcgKzkwNyw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbnMuCiAgICAgICAgICAgICAgICAgaWYg
KCFjaGlsZC0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKQogICAgICAgICAgICAgICAgICAgICAmJiAh
Y2hpbGQtPnNob3VsZFNwZWN1bGF0ZUFueUludCgpCi0gICAgICAgICAgICAgICAgICAgICYmICEo
Y2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlck9yQm9vbGVhbigpICYmIGlzRlRMKG1fZ3JhcGgu
bV9wbGFuLm1vZGUpKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIShjaGlsZC0+c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyT3JCb29sZWFuKCkgJiYgbV9ncmFwaC5tX3BsYW4uaXNGVEwoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGJhZE5ld3MgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC05MzAsNyArOTMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBlbHNlIGlm
IChjaGlsZC0+c2hvdWxkU3BlY3VsYXRlQW55SW50KCkpCiAgICAgICAgICAgICAgICAgICAgIGZp
eEVkZ2U8SW50NTJSZXBVc2U+KGNoaWxkKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJl
ck9yQm9vbGVhbigpICYmIGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hpbGQtPnNob3VsZFNwZWN1bGF0ZU51bWJlck9yQm9v
bGVhbigpICYmIG1fZ3JhcGgubV9wbGFuLmlzRlRMKCkpOwogICAgICAgICAgICAgICAgICAgICBm
aXhEb3VibGVPckJvb2xlYW5FZGdlKGNoaWxkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CkBAIC0zNDk3LDcgKzM0OTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbm9kZS0+
c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ29tcGFyZVN0cmljdEVxKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZVN0cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiAo
KEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49IDcpIHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFu
Lm1vZGUpKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0
cmluZygpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiAoKEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49IDcpIHx8IG1fZ3JhcGgubV9wbGFuLmlzRlRMKCkp
KSB7CiAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENvbXBhcmVTdHJpY3RFcSk7CkBAIC0zNTY5LDEy
ICszNTY5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhDb21wYXJlU3RyaWN0RXEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgKChH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA4KSB8fCBpc0ZUTChtX2dyYXBoLm1fcGxhbi5t
b2RlKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJp
bmcoKSAmJiAoKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID49IDgpIHx8IG1fZ3JhcGgubV9w
bGFuLmlzRlRMKCkpKSB7CiAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ29tcGFyZVN0
cmljdEVxKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpICYmICgoR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnMgPj0gOCkgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpKSB7CisgICAg
ICAgIGlmIChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgKChHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyA+PSA4KSB8fCBtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpKSkg
ewogICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAg
ICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENvbXBhcmVTdHJpY3RFcSk7CiAgICAg
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkocmV2aXNpb24gMjM0MTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBjb25zdCBjaGFy
KiBkZmdPcE5hbWVzW10gPSB7CiBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuKQogICAg
IDogbV92bSh2bSkKICAgICAsIG1fcGxhbihwbGFuKQotICAgICwgbV9jb2RlQmxvY2sobV9wbGFu
LmNvZGVCbG9jaykKKyAgICAsIG1fY29kZUJsb2NrKG1fcGxhbi5jb2RlQmxvY2soKSkKICAgICAs
IG1fcHJvZmlsZWRCbG9jayhtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKICAgICAsIG1fc3Nh
Q0ZHKHN0ZDo6bWFrZV91bmlxdWU8U1NBQ0ZHPigqdGhpcykpCiAgICAgLCBtX25leHRNYWNoaW5l
TG9jYWwoMCkKQEAgLTEwMjIsMTQgKzEwMjIsMTUgQEAgYm9vbCBHcmFwaDo6d2F0Y2hDb25kaXRp
b24oY29uc3QgT2JqZWN0UAogewogICAgIGlmICgha2V5LmlzV2F0Y2hhYmxlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5
KGtleS5vYmplY3QoKSk7CisKKyAgICBEZXNpcmVkV2Vha1JlZmVyZW5jZXMmIHdlYWtSZWZlcmVu
Y2VzID0gbV9wbGFuLndlYWtSZWZlcmVuY2VzKCk7CisgICAgd2Vha1JlZmVyZW5jZXMuYWRkTGF6
aWx5KGtleS5vYmplY3QoKSk7CiAgICAgaWYgKGtleS5oYXNQcm90b3R5cGUoKSkKLSAgICAgICAg
bV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucHJvdG90eXBlKCkpOworICAgICAg
ICB3ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkoa2V5LnByb3RvdHlwZSgpKTsKICAgICBpZiAoa2V5
Lmhhc1JlcXVpcmVkVmFsdWUoKSkKLSAgICAgICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExh
emlseShrZXkucmVxdWlyZWRWYWx1ZSgpKTsKLSAgICAKLSAgICBtX3BsYW4ud2F0Y2hwb2ludHMu
YWRkTGF6aWx5KGtleSk7CisgICAgICAgIHdlYWtSZWZlcmVuY2VzLmFkZExhemlseShrZXkucmVx
dWlyZWRWYWx1ZSgpKTsKKworICAgIG1fcGxhbi53YXRjaHBvaW50cygpLmFkZExhemlseShrZXkp
OwogCiAgICAgaWYgKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlKQog
ICAgICAgICBtX3NhZmVUb0xvYWQuYWRkKHN0ZDo6bWFrZV9wYWlyKGtleS5vYmplY3QoKSwga2V5
Lm9mZnNldCgpKSk7CkBAIC0xMDc2LDEyICsxMDc3LDEyIEBAIEluZmVycmVkVHlwZTo6RGVzY3Jp
cHRvciBHcmFwaDo6aW5mZXJyZWQKICAgICAKICAgICBtX2luZmVycmVkVHlwZXMuYWRkKGtleSwg
dHlwZURlc2NyaXB0b3IpOwogCi0gICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseSh0
eXBlT2JqZWN0KTsKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5hZGRMYXppbHkodHlwZU9i
amVjdCk7CiAgICAgcmVnaXN0ZXJJbmZlcnJlZFR5cGUodHlwZURlc2NyaXB0b3IpOwogCiAgICAg
Ly8gTm90ZSB0aGF0IHdlIG1heSBhbHJlYWR5IGJlIHdhdGNoaW5nIHRoaXMgZGVzaXJlZCBpbmZl
cnJlZCB0eXBlLCBiZWNhdXNlIG11bHRpcGxlIHN0cnVjdHVyZXMgbWF5CiAgICAgLy8gcG9pbnQg
dG8gdGhlIHNhbWUgSW5mZXJyZWRUeXBlIGluc3RhbmNlLgotICAgIG1fcGxhbi53YXRjaHBvaW50
cy5hZGRMYXppbHkoRGVzaXJlZEluZmVycmVkVHlwZSh0eXBlT2JqZWN0LCB0eXBlRGVzY3JpcHRv
cikpOworICAgIG1fcGxhbi53YXRjaHBvaW50cygpLmFkZExhemlseShEZXNpcmVkSW5mZXJyZWRU
eXBlKHR5cGVPYmplY3QsIHR5cGVEZXNjcmlwdG9yKSk7CiAKICAgICByZXR1cm4gdHlwZURlc2Ny
aXB0b3I7CiB9CkBAIC0xMjI2LDcgKzEyMjcsNyBAQCB1bnNpZ25lZCBHcmFwaDo6c3RhY2tQb2lu
dGVyT2Zmc2V0KCkKIHVuc2lnbmVkIEdyYXBoOjpyZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0
KCkKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IEpJVDo6ZnJhbWVSZWdpc3RlckNvdW50Rm9yKG1f
cHJvZmlsZWRCbG9jayk7Ci0gICAgZm9yIChJbmxpbmVDYWxsRnJhbWVTZXQ6Oml0ZXJhdG9yIGl0
ZXIgPSBtX3BsYW4uaW5saW5lQ2FsbEZyYW1lcy0+YmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsK
KyAgICBmb3IgKElubGluZUNhbGxGcmFtZVNldDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbi5pbmxp
bmVDYWxsRnJhbWVzKCktPmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gKml0ZXI7CiAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgdW5zaWduZWQgcmVxdWlyZWRDb3VudCA9IFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxICsgSklUOjpmcmFt
ZVJlZ2lzdGVyQ291bnRGb3IoY29kZUJsb2NrKTsKQEAgLTE0MjYsMTEgKzE0MjcsMTEgQEAgdm9p
ZCBHcmFwaDo6cmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQodmFsdWUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgQVNT
RVJUKG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5jb250YWlucyh2YWx1ZS0+c3RydWN0dXJlKCkpKTsK
LSAgICAgICAgCisgICAgICAgIEFTU0VSVChtX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5jb250YWlu
cyh2YWx1ZS0+c3RydWN0dXJlKCkpKTsKKwogICAgICAgICBzd2l0Y2ggKHZhbHVlLT5zdHJlbmd0
aCgpKSB7CiAgICAgICAgIGNhc2UgV2Vha1ZhbHVlOiB7Ci0gICAgICAgICAgICBtX3BsYW4ud2Vh
a1JlZmVyZW5jZXMuYWRkTGF6aWx5KHZhbHVlLT52YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICAgICAg
ICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcygpLmFkZExhemlseSh2YWx1ZS0+dmFsdWUoKS5hc0Nl
bGwoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFN0cm9u
Z1ZhbHVlOiB7CkBAIC0xNTAzLDggKzE1MDQsOCBAQCB2b2lkIEdyYXBoOjpjb252ZXJ0VG9TdHJv
bmdDb25zdGFudChOb2RlCiAKIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgR3JhcGg6OnJlZ2lzdGVyU3Ry
dWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVSZWdpc3RyYXRpb25SZXN1bHQm
IHJlc3VsdCkKIHsKLSAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KHN0cnVjdHVy
ZSk7Ci0gICAgaWYgKG1fcGxhbi53YXRjaHBvaW50cy5jb25zaWRlcihzdHJ1Y3R1cmUpKQorICAg
IG1fcGxhbi53ZWFrUmVmZXJlbmNlcygpLmFkZExhemlseShzdHJ1Y3R1cmUpOworICAgIGlmICht
X3BsYW4ud2F0Y2hwb2ludHMoKS5jb25zaWRlcihzdHJ1Y3R1cmUpKQogICAgICAgICByZXN1bHQg
PSBTdHJ1Y3R1cmVSZWdpc3RlcmVkQW5kV2F0Y2hlZDsKICAgICBlbHNlCiAgICAgICAgIHJlc3Vs
dCA9IFN0cnVjdHVyZVJlZ2lzdGVyZWROb3JtYWxseTsKQEAgLTE1MTMsOCArMTUxNCw4IEBAIFJl
Z2lzdGVyZWRTdHJ1Y3R1cmUgR3JhcGg6OnJlZ2lzdGVyU3RydWMKIAogdm9pZCBHcmFwaDo6cmVn
aXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5zaXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7
Ci0gICAgbV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseShzdHJ1Y3R1cmUpOwotICAgIG1f
cGxhbi53YXRjaHBvaW50cy5hZGRMYXppbHkoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldCgpKTsKKyAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5hZGRMYXppbHkoc3RydWN0dXJl
KTsKKyAgICBtX3BsYW4ud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc3RydWN0dXJlLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldCgpKTsKIH0KIAogdm9pZCBHcmFwaDo6YXNzZXJ0SXNSZWdpc3RlcmVk
KFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtMTUyMiw5ICsxNTIzLDkgQEAgdm9pZCBHcmFwaDo6
YXNzZXJ0SXNSZWdpc3RlcmVkKFN0cnVjdHVyZQogICAgIC8vIEl0J3MgY29udmVuaWVudCB0byBi
ZSBhYmxlIHRvIGNhbGwgdGhpcyB3aXRoIGEgbWF5YmUtbnVsbCBzdHJ1Y3R1cmUuCiAgICAgaWYg
KCFzdHJ1Y3R1cmUpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBERkdfQVNTRVJUKCp0aGlz
LCBudWxscHRyLCBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuY29udGFpbnMoc3RydWN0dXJlKSk7Ci0g
ICAgCisKKyAgICBERkdfQVNTRVJUKCp0aGlzLCBudWxscHRyLCBtX3BsYW4ud2Vha1JlZmVyZW5j
ZXMoKS5jb250YWlucyhzdHJ1Y3R1cmUpKTsKKwogICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91
bGRXYXRjaCgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHdhdGNocG9pbnRzKCkuaXNXYXRj
aGVkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyMzQxNzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03ODAsMTIgKzc4
MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIElubGluZVdhdGNocG9pbnRTZXQmIHNldCA9IGdsb2Jh
bE9iamVjdC0+bnVtYmVyVG9TdHJpbmdXYXRjaHBvaW50KCk7CiAgICAgICAgIHJldHVybiBpc1dh
dGNoaW5nR2xvYmFsT2JqZWN0V2F0Y2hwb2ludChnbG9iYWxPYmplY3QsIHNldCk7CiAgICAgfQot
ICAgIAotICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKSB7IHJldHVybiBt
X3BsYW4uY29tcGlsYXRpb24uZ2V0KCk7IH0KLSAgICAKLSAgICBEZXNpcmVkSWRlbnRpZmllcnMm
IGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzOyB9Ci0gICAgRGVzaXJl
ZFdhdGNocG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50czsg
fQotICAgIAorCisgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIHsgcmV0
dXJuIG1fcGxhbi5jb21waWxhdGlvbigpOyB9CisKKyAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlk
ZW50aWZpZXJzKCkgeyByZXR1cm4gbV9wbGFuLmlkZW50aWZpZXJzKCk7IH0KKyAgICBEZXNpcmVk
V2F0Y2hwb2ludHMmIHdhdGNocG9pbnRzKCkgeyByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzKCk7
IH0KKwogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIGtleSBpcyBhbHJlYWR5IGludmFsaWQg
b3IgdW53YXRjaGFibGUuIElmIHRoaXMgaXMgYSBQcmVzZW5jZSBjb25kaXRpb24sCiAgICAgLy8g
dGhpcyBhbHNvIG1ha2VzIGl0IGNoZWFwIHRvIHF1ZXJ5IGlmIHRoZSBjb25kaXRpb24gaG9sZHMu
IEFsc28gbWFrZXMgc3VyZSB0aGF0IHRoZSBHQyBrbm93cwogICAgIC8vIHdoYXQncyBnb2luZyBv
bi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CShyZXZpc2lvbiAyMzQxNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBKSVRDb21waWxlcjo6
SklUQ29tcGlsZXIoR3JhcGgmIGRmZykKICAgICBpZiAoVU5MSUtFTFkoc2hvdWxkRHVtcERpc2Fz
c2VtYmx5KCkgfHwgbV9ncmFwaC5tX3ZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikpCiAgICAgICAg
IG1fZGlzYXNzZW1ibGVyID0gc3RkOjptYWtlX3VuaXF1ZTxEaXNhc3NlbWJsZXI+KGRmZyk7CiAj
aWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgbV9qaXRDb2RlLT50aWVyVXBJbkxvb3BIaWVyYXJjaHkg
PSBXVEZNb3ZlKG1fZ3JhcGgubV9wbGFuLnRpZXJVcEluTG9vcEhpZXJhcmNoeSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCB0aWVyVXBCeXRlY29kZSA6IG1fZ3JhcGgubV9wbGFuLnRpZXJVcEFuZE9TUkVu
dGVyQnl0ZWNvZGVzKQorICAgIG1faml0Q29kZS0+dGllclVwSW5Mb29wSGllcmFyY2h5ID0gV1RG
TW92ZShtX2dyYXBoLm1fcGxhbi50aWVyVXBJbkxvb3BIaWVyYXJjaHkoKSk7CisgICAgZm9yICh1
bnNpZ25lZCB0aWVyVXBCeXRlY29kZSA6IG1fZ3JhcGgubV9wbGFuLnRpZXJVcEFuZE9TUkVudGVy
Qnl0ZWNvZGVzKCkpCiAgICAgICAgIG1faml0Q29kZS0+dGllclVwRW50cnlUcmlnZ2Vycy5hZGQo
dGllclVwQnl0ZWNvZGUsIEpJVENvZGU6OlRyaWdnZXJSZWFzb246OkRvbnRUcmlnZ2VyKTsKICNl
bmRpZgogfQpAQCAtMTkyLDkgKzE5Miw5IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1
ZmZlciYgbGlua0IKICAgICBtX2ppdENvZGUtPmNvbW1vbi5mcmFtZVJlZ2lzdGVyQ291bnQgPSBt
X2dyYXBoLmZyYW1lUmVnaXN0ZXJDb3VudCgpOwogICAgIG1faml0Q29kZS0+Y29tbW9uLnJlcXVp
cmVkUmVnaXN0ZXJDb3VudEZvckV4aXQgPSBtX2dyYXBoLnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZv
ckV4aXQoKTsKIAotICAgIGlmICghbV9ncmFwaC5tX3BsYW4uaW5saW5lQ2FsbEZyYW1lcy0+aXNF
bXB0eSgpKQotICAgICAgICBtX2ppdENvZGUtPmNvbW1vbi5pbmxpbmVDYWxsRnJhbWVzID0gbV9n
cmFwaC5tX3BsYW4uaW5saW5lQ2FsbEZyYW1lczsKLSAgICAKKyAgICBpZiAoIW1fZ3JhcGgubV9w
bGFuLmlubGluZUNhbGxGcmFtZXMoKS0+aXNFbXB0eSgpKQorICAgICAgICBtX2ppdENvZGUtPmNv
bW1vbi5pbmxpbmVDYWxsRnJhbWVzID0gbV9ncmFwaC5tX3BsYW4uaW5saW5lQ2FsbEZyYW1lcygp
OworCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBtX2ppdENvZGUtPmNvbW1vbi5kb3VibGVD
b25zdGFudHMgPSBXVEZNb3ZlKG1fZ3JhcGgubV9kb3VibGVDb25zdGFudHMpOwogI2VuZGlmCkBA
IC00MDYsNyArNDA2LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAKICAgICBhdXRv
IGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KCp0aGlzLCBtX2NvZGVC
bG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFp
bFRvQWxsb2NhdGUoKSkgewotICAgICAgICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPEZhaWxlZEZpbmFsaXplcj4obV9ncmFwaC5tX3BsYW4pOworICAgICAgICBt
X2dyYXBoLm1fcGxhbi5zZXRGaW5hbGl6ZXIoc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6
ZXI+KG1fZ3JhcGgubV9wbGFuKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC00
MTcsOSArNDE3LDkgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgY29kZUJsb2Nr
KCktPnNocmlua1RvRml0KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAKICAgICBkaXNhc3NlbWJs
ZSgqbGlua0J1ZmZlcik7Ci0gICAgCi0gICAgbV9ncmFwaC5tX3BsYW4uZmluYWxpemVyID0gc3Rk
OjptYWtlX3VuaXF1ZTxKSVRGaW5hbGl6ZXI+KAotICAgICAgICBtX2dyYXBoLm1fcGxhbiwgbV9q
aXRDb2RlLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUobGlua0J1ZmZlcikpOworCisgICAgbV9n
cmFwaC5tX3BsYW4uc2V0RmluYWxpemVyKHN0ZDo6bWFrZV91bmlxdWU8SklURmluYWxpemVyPigK
KyAgICAgICAgbV9ncmFwaC5tX3BsYW4sIG1faml0Q29kZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZN
b3ZlKGxpbmtCdWZmZXIpKSk7CiB9CiAKIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlv
bigpCkBAIC01MTEsNyArNTExLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9u
KCkKICAgICAvLyA9PT0gTGluayA9PT0KICAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPExpbmtCdWZmZXI+KCp0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKICAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAgICAg
ICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZhaWxlZEZpbmFs
aXplcj4obV9ncmFwaC5tX3BsYW4pOworICAgICAgICBtX2dyYXBoLm1fcGxhbi5zZXRGaW5hbGl6
ZXIoc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KG1fZ3JhcGgubV9wbGFuKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbGluaygqbGlua0J1ZmZlcik7CkBAIC01MjcsOCAr
NTI3LDggQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKCkKIAogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiB3aXRoQXJpdHlDaGVjayA9IGxpbmtCdWZm
ZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oYXJpdHlDaGVjayk7CiAKLSAgICBtX2dyYXBo
Lm1fcGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEpJVEZpbmFsaXplcj4oCi0gICAg
ICAgIG1fZ3JhcGgubV9wbGFuLCBtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShs
aW5rQnVmZmVyKSwgd2l0aEFyaXR5Q2hlY2spOworICAgIG1fZ3JhcGgubV9wbGFuLnNldEZpbmFs
aXplcihzdGQ6Om1ha2VfdW5pcXVlPEpJVEZpbmFsaXplcj4oCisgICAgICAgIG1fZ3JhcGgubV9w
bGFuLCBtX2ppdENvZGUucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShsaW5rQnVmZmVyKSwgd2l0
aEFyaXR5Q2hlY2spKTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6ZGlzYXNzZW1ibGUoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikKQEAgLTUzNyw5ICs1MzcsOSBAQCB2b2lkIEpJVENvbXBpbGVyOjpk
aXNhc3NlbWJsZShMaW5rQnVmZmVyCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1wKGxpbmtC
dWZmZXIpOwogICAgICAgICBsaW5rQnVmZmVyLmRpZEFscmVhZHlEaXNhc3NlbWJsZSgpOwogICAg
IH0KLSAgICAKLSAgICBpZiAoVU5MSUtFTFkobV9ncmFwaC5tX3BsYW4uY29tcGlsYXRpb24pKQot
ICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0VG9Qcm9maWxlcihtX2dyYXBoLm1fcGxhbi5j
b21waWxhdGlvbi5nZXQoKSwgbGlua0J1ZmZlcik7CisKKyAgICBpZiAoVU5MSUtFTFkobV9ncmFw
aC5tX3BsYW4uY29tcGlsYXRpb24oKSkpCisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRU
b1Byb2ZpbGVyKG1fZ3JhcGgubV9wbGFuLmNvbXBpbGF0aW9uKCksIGxpbmtCdWZmZXIpOwogfQog
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDIzNDE3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJn
ZXQpCiAgICAgewotICAgICAgICBtX2dyYXBoLm1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXpp
bHkodGFyZ2V0KTsKKyAgICAgICAgbV9ncmFwaC5tX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5hZGRM
YXppbHkodGFyZ2V0KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlcyhj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDIzNDE3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTYsMTEgKzU2LDExIEBAIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIAog
Ym9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SlNFbnRyeVB0clRhZz4gY29kZVJlZiA9IEZJTkFMSVpFX0RGR19DT0RFKCptX2xpbmtCdWZm
ZXIsIEpTRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEo
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGNvZGVSZWYgPSBG
SU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBj
b2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJs
b2NrKCksIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFs
aXplQ29kZVJlZihjb2RlUmVmLCBjb2RlUmVmLmNvZGUoKSk7Ci0gICAgCi0gICAgbV9wbGFuLmNv
ZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigpKTsKLSAgICAKKworICAgIG1f
cGxhbi5jb2RlQmxvY2soKS0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigpKTsKKwogICAg
IGZpbmFsaXplQ29tbW9uKCk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC03MCwxMCArNzAs
MTAgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3dpdGhBcml0eUNoZWNrLmlzRW1wdHlWYWx1ZSgpKTsKICAgICBtX2ppdENv
ZGUtPmluaXRpYWxpemVDb2RlUmVmKAotICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5r
QnVmZmVyLCBKU0VudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpKS5k
YXRhKCkpLAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBKU0VudHJ5
UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklU
VHlwZShtX3BsYW4uY29kZUJsb2NrKCksIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSksCiAgICAg
ICAgIG1fd2l0aEFyaXR5Q2hlY2spOwotICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUo
bV9qaXRDb2RlLmNvcHlSZWYoKSk7Ci0gICAgCisgICAgbV9wbGFuLmNvZGVCbG9jaygpLT5zZXRK
SVRDb2RlKG1faml0Q29kZS5jb3B5UmVmKCkpOworCiAgICAgZmluYWxpemVDb21tb24oKTsKICAg
ICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgyLDE4ICs4MiwxOCBAQCBib29sIEpJVEZpbmFsaXpl
cjo6ZmluYWxpemVGdW5jdGlvbigpCiB2b2lkIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24o
KQogewogICAgIC8vIFNvbWUgSklUIGZpbmFsaXplcnMgbWF5IGhhdmUgYWRkZWQgbW9yZSBjb25z
dGFudHMuIFNocmluay10by1maXQgdGhvc2UgdGhpbmdzIG5vdy4KLSAgICBtX3BsYW4uY29kZUJs
b2NrLT5jb25zdGFudHMoKS5zaHJpbmtUb0ZpdCgpOwotICAgIG1fcGxhbi5jb2RlQmxvY2stPmNv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpLnNocmlua1RvRml0KCk7Ci0gICAgCisg
ICAgbV9wbGFuLmNvZGVCbG9jaygpLT5jb25zdGFudHMoKS5zaHJpbmtUb0ZpdCgpOworICAgIG1f
cGxhbi5jb2RlQmxvY2soKS0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkuc2hy
aW5rVG9GaXQoKTsKKwogI2lmIEVOQUJMRShGVExfSklUKQotICAgIG1faml0Q29kZS0+b3B0aW1p
emVBZnRlcldhcm1VcChtX3BsYW4uY29kZUJsb2NrKTsKKyAgICBtX2ppdENvZGUtPm9wdGltaXpl
QWZ0ZXJXYXJtVXAobV9wbGFuLmNvZGVCbG9jaygpKTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKLSAgICAKLSAgICBpZiAoVU5MSUtFTFkobV9wbGFuLmNvbXBpbGF0aW9uKSkKLSAgICAgICAg
bV9wbGFuLnZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcGxhbi5j
b2RlQmxvY2ssICptX3BsYW4uY29tcGlsYXRpb24pOwotICAgIAotICAgIGlmICghbV9wbGFuLndp
bGxUcnlUb1RpZXJVcCkKLSAgICAgICAgbV9wbGFuLmNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uID0gdHJ1ZTsKKworICAgIGlmIChVTkxJS0VMWSht
X3BsYW4uY29tcGlsYXRpb24oKSkpCisgICAgICAgIG1fcGxhbi52bSgpLT5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcGxhbi5jb2RlQmxvY2soKSwgKm1fcGxhbi5jb21w
aWxhdGlvbigpKTsKKworICAgIGlmICghbV9wbGFuLndpbGxUcnlUb1RpZXJVcCgpKQorICAgICAg
ICBtX3BsYW4uY29kZUJsb2NrKCktPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21w
aWxhdGlvbiA9IHRydWU7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMzQxNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ3LDEwICs0NywxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAg
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JP
U1JFbnRyeU1vZGUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fcGxhbi5tb2Rl
KCkgPT0gRlRMRm9yT1NSRW50cnlNb2RlKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFw
aC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKKworICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRl
Y29kZUluZGV4KCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXgpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAkocmV2aXNpb24gMjM0
MTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDUsOCArNDUsOCBAQCB2b2lkIFBoYXNlOjpiZWdpblBoYXNlKCkKICAgICAg
ICAgbV9ncmFwaC5kdW1wKG91dCk7CiAgICAgICAgIG1fZ3JhcGhEdW1wQmVmb3JlUGhhc2UgPSBv
dXQudG9DU3RyaW5nKCk7CiAgICAgfQotICAgIAotICAgIGlmICghc2hvdWxkRHVtcEdyYXBoQXRF
YWNoUGhhc2UobV9ncmFwaC5tX3BsYW4ubW9kZSkpCisKKyAgICBpZiAoIXNob3VsZER1bXBHcmFw
aEF0RWFjaFBoYXNlKG1fZ3JhcGgubV9wbGFuLm1vZGUoKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBkYXRhTG9nKCJCZWdpbm5pbmcgREZHIHBoYXNlICIsIG1fbmFtZSwgIi5cbiIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24gMjM0MTczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MSw3ICs4MSw3IEBAIGJvb2wgcnVuQW5kTG9nKFBoYXNlVHlwZSYgcGhhc2UpCiAgICAgCiAg
ICAgYm9vbCByZXN1bHQgPSBwaGFzZS5ydW4oKTsKIAotICAgIGlmIChyZXN1bHQgJiYgbG9nQ29t
cGlsYXRpb25DaGFuZ2VzKHBoYXNlLmdyYXBoKCkubV9wbGFuLm1vZGUpKQorICAgIGlmIChyZXN1
bHQgJiYgbG9nQ29tcGlsYXRpb25DaGFuZ2VzKHBoYXNlLmdyYXBoKCkubV9wbGFuLm1vZGUoKSkp
CiAgICAgICAgIGRhdGFMb2dGKCJQaGFzZSAlcyBjaGFuZ2VkIHRoZSBJUi5cbiIsIHBoYXNlLm5h
bWUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjM0MTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIG5hbWVz
cGFjZSB7CiB2b2lkIGR1bXBBbmRWZXJpZnlHcmFwaChHcmFwaCYgZ3JhcGgsIGNvbnN0IGNoYXIq
IHRleHQsIGJvb2wgZm9yY2VEdW1wID0gZmFsc2UpCiB7CiAgICAgR3JhcGhEdW1wTW9kZSBtb2Rl
Rm9yRmluYWxWYWxpZGF0ZSA9IER1bXBHcmFwaDsKLSAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZChncmFwaC5tX3BsYW4ubW9kZSkgfHwgZm9yY2VEdW1wKSB7CisgICAgaWYgKHZlcmJv
c2VDb21waWxhdGlvbkVuYWJsZWQoZ3JhcGgubV9wbGFuLm1vZGUoKSkgfHwgZm9yY2VEdW1wKSB7
CiAgICAgICAgIGRhdGFMb2codGV4dCwgIlxuIik7CiAgICAgICAgIGdyYXBoLmR1bXAoKTsKICAg
ICAgICAgbW9kZUZvckZpbmFsVmFsaWRhdGUgPSBEb250RHVtcEdyYXBoOwpAQCAtMTM2LDE5ICsx
MzYsMTkgQEAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uS2luZCBwcm9maWxlckNvbXBpbAogUGxhbjo6
UGxhbihDb2RlQmxvY2sqIHBhc3NlZENvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0Nv
ZGVCbG9jaywKICAgICBDb21waWxhdGlvbk1vZGUgbW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRl
Y29kZUluZGV4LAogICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVz
KQotICAgIDogdm0ocGFzc2VkQ29kZUJsb2NrLT52bSgpKQotICAgICwgY29kZUJsb2NrKHBhc3Nl
ZENvZGVCbG9jaykKLSAgICAsIHByb2ZpbGVkREZHQ29kZUJsb2NrKHByb2ZpbGVkREZHQ29kZUJs
b2NrKQotICAgICwgbW9kZShtb2RlKQotICAgICwgb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVu
dHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAsIG11c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVl
cykKLSAgICAsIGNvbXBpbGF0aW9uKFVOTElLRUxZKHZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIp
ID8gYWRvcHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbih2bS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IoY29kZUJsb2NrKSwgcHJvZmlsZXJDb21waWxhdGlv
bktpbmRGb3JNb2RlKG1vZGUpKSkgOiBudWxscHRyKQotICAgICwgaW5saW5lQ2FsbEZyYW1lcyhh
ZG9wdFJlZihuZXcgSW5saW5lQ2FsbEZyYW1lU2V0KCkpKQotICAgICwgaWRlbnRpZmllcnMoY29k
ZUJsb2NrKQotICAgICwgd2Vha1JlZmVyZW5jZXMoY29kZUJsb2NrKQotICAgICwgc3RhZ2UoUHJl
cGFyaW5nKQorICAgIDogbV92bShwYXNzZWRDb2RlQmxvY2stPnZtKCkpCisgICAgLCBtX2NvZGVC
bG9jayhwYXNzZWRDb2RlQmxvY2spCisgICAgLCBtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKHByb2Zp
bGVkREZHQ29kZUJsb2NrKQorICAgICwgbV9tb2RlKG1vZGUpCisgICAgLCBtX29zckVudHJ5Qnl0
ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgLCBtX211c3RIYW5kbGVWYWx1
ZXMobXVzdEhhbmRsZVZhbHVlcykKKyAgICAsIG1fY29tcGlsYXRpb24oVU5MSUtFTFkobV92bS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyKSA/IGFkb3B0UmVmKG5ldyBQcm9maWxlcjo6Q29tcGlsYXRp
b24obV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IobV9jb2Rl
QmxvY2spLCBwcm9maWxlckNvbXBpbGF0aW9uS2luZEZvck1vZGUobW9kZSkpKSA6IG51bGxwdHIp
CisgICAgLCBtX2lubGluZUNhbGxGcmFtZXMoYWRvcHRSZWYobmV3IElubGluZUNhbGxGcmFtZVNl
dCgpKSkKKyAgICAsIG1faWRlbnRpZmllcnMobV9jb2RlQmxvY2spCisgICAgLCBtX3dlYWtSZWZl
cmVuY2VzKG1fY29kZUJsb2NrKQorICAgICwgbV9zdGFnZShQcmVwYXJpbmcpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlKCkpOwogfQog
CiBQbGFuOjp+UGxhbigpCkBAIC0xNTksNDMgKzE1OSw0MyBAQCBib29sIFBsYW46OmNvbXB1dGVD
b21waWxlVGltZXMoKSBjb25zdAogewogICAgIHJldHVybiByZXBvcnRDb21waWxlVGltZXMoKQog
ICAgICAgICB8fCBPcHRpb25zOjpyZXBvcnRUb3RhbENvbXBpbGVUaW1lcygpCi0gICAgICAgIHx8
ICh2bSAmJiB2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKTsKKyAgICAgICAgfHwgKG1fdm0gJiYg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKTsKIH0KIAogYm9vbCBQbGFuOjpyZXBvcnRDb21w
aWxlVGltZXMoKSBjb25zdAogewogICAgIHJldHVybiBPcHRpb25zOjpyZXBvcnRDb21waWxlVGlt
ZXMoKQogICAgICAgICB8fCBPcHRpb25zOjpyZXBvcnRERkdDb21waWxlVGltZXMoKQotICAgICAg
ICB8fCAoT3B0aW9uczo6cmVwb3J0RlRMQ29tcGlsZVRpbWVzKCkgJiYgaXNGVEwobW9kZSkpOwor
ICAgICAgICB8fCAoT3B0aW9uczo6cmVwb3J0RlRMQ29tcGlsZVRpbWVzKCkgJiYgaXNGVEwoKSk7
CiB9CiAKIHZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKFRocmVhZERhdGEqIHRocmVhZERhdGEp
CiB7Ci0gICAgdGhpcy0+dGhyZWFkRGF0YSA9IHRocmVhZERhdGE7Ci0gICAgCisgICAgbV90aHJl
YWREYXRhID0gdGhyZWFkRGF0YTsKKwogICAgIE1vbm90b25pY1RpbWUgYmVmb3JlIHsgfTsKICAg
ICBDU3RyaW5nIGNvZGVCbG9ja05hbWU7CiAgICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxl
VGltZXMoKSkpCiAgICAgICAgIGJlZm9yZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIGlm
IChVTkxJS0VMWShyZXBvcnRDb21waWxlVGltZXMoKSkpCi0gICAgICAgIGNvZGVCbG9ja05hbWUg
PSB0b0NTdHJpbmcoKmNvZGVCbG9jayk7Ci0gICAgCisgICAgICAgIGNvZGVCbG9ja05hbWUgPSB0
b0NTdHJpbmcoKm1fY29kZUJsb2NrKTsKKwogICAgIENvbXBpbGF0aW9uU2NvcGUgY29tcGlsYXRp
b25TY29wZTsKIAotICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMobW9kZSkgfHwgT3B0aW9u
czo6bG9nUGhhc2VUaW1lcygpKQotICAgICAgICBkYXRhTG9nKCJERkcoUGxhbikgY29tcGlsaW5n
ICIsICpjb2RlQmxvY2ssICIgd2l0aCAiLCBtb2RlLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25z
ID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOworICAgIGlmIChsb2dD
b21waWxhdGlvbkNoYW5nZXMobV9tb2RlKSB8fCBPcHRpb25zOjpsb2dQaGFzZVRpbWVzKCkpCisg
ICAgICAgIGRhdGFMb2coIkRGRyhQbGFuKSBjb21waWxpbmcgIiwgKm1fY29kZUJsb2NrLCAiIHdp
dGggIiwgbV9tb2RlLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CiAKICAgICBDb21waWxhdGlvblBhdGggcGF0aCA9
IGNvbXBpbGVJblRocmVhZEltcGwoKTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKHBhdGggPT0gQ2Fu
Y2VsUGF0aCB8fCBmaW5hbGl6ZXIpOwotICAgIFJFTEVBU0VfQVNTRVJUKChwYXRoID09IENhbmNl
bFBhdGgpID09IChzdGFnZSA9PSBDYW5jZWxsZWQpKTsKLSAgICAKKyAgICBSRUxFQVNFX0FTU0VS
VChwYXRoID09IENhbmNlbFBhdGggfHwgbV9maW5hbGl6ZXIpOworICAgIFJFTEVBU0VfQVNTRVJU
KChwYXRoID09IENhbmNlbFBhdGgpID09IChtX3N0YWdlID09IENhbmNlbGxlZCkpOworCiAgICAg
TW9ub3RvbmljVGltZSBhZnRlciB7IH07CiAgICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxl
VGltZXMoKSkpIHsKICAgICAgICAgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICAK
ICAgICAgICAgaWYgKE9wdGlvbnM6OnJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzKCkpIHsKLSAgICAg
ICAgICAgIGlmIChpc0ZUTChtb2RlKSkgeworICAgICAgICAgICAgaWYgKGlzRlRMKCkpIHsKICAg
ICAgICAgICAgICAgICB0b3RhbEZUTENvbXBpbGVUaW1lICs9IGFmdGVyIC0gYmVmb3JlOwogICAg
ICAgICAgICAgICAgIHRvdGFsRlRMREZHQ29tcGlsZVRpbWUgKz0gbV90aW1lQmVmb3JlRlRMIC0g
YmVmb3JlOwogICAgICAgICAgICAgICAgIHRvdGFsRlRMQjNDb21waWxlVGltZSArPSBhZnRlciAt
IG1fdGltZUJlZm9yZUZUTDsKQEAgLTIyMSwxNCArMjIxLDE0IEBAIHZvaWQgUGxhbjo6Y29tcGls
ZUluVGhyZWFkKFRocmVhZERhdGEqIHQKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmIChjb2RlQmxvY2spIHsgLy8gY29k
ZUJsb2NrIHdpbGwgYmUgbnVsbCBpZiB0aGUgY29tcGlsYXRpb24gd2FzIGNhbmNlbGxlZC4KKyAg
ICBpZiAobV9jb2RlQmxvY2spIHsgLy8gbV9jb2RlQmxvY2sgd2lsbCBiZSBudWxsIGlmIHRoZSBj
b21waWxhdGlvbiB3YXMgY2FuY2VsbGVkLgogICAgICAgICBpZiAocGF0aCA9PSBGVExQYXRoKQot
ICAgICAgICAgICAgQ09ERUJMT0NLX0xPR19FVkVOVChjb2RlQmxvY2ssICJmdGxDb21waWxlIiwg
KCJ0b29rICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgKERGRzogIiwg
KG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIsIEIzOiAiLCAoYWZ0
ZXIgLSBtX3RpbWVCZWZvcmVGVEwpLm1pbGxpc2Vjb25kcygpLCAiKSB3aXRoICIsIHBhdGhOYW1l
KSk7CisgICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZnRsQ29t
cGlsZSIsICgidG9vayAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zIChE
Rkc6ICIsIChtX3RpbWVCZWZvcmVGVEwgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiLCBCMzog
IiwgKGFmdGVyIC0gbV90aW1lQmVmb3JlRlRMKS5taWxsaXNlY29uZHMoKSwgIikgd2l0aCAiLCBw
YXRoTmFtZSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5U
KGNvZGVCbG9jaywgImRmZ0NvbXBpbGUiLCAoInRvb2sgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxs
aXNlY29uZHMoKSwgIiBtcyB3aXRoICIsIHBhdGhOYW1lKSk7CisgICAgICAgICAgICBDT0RFQkxP
Q0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGZnQ29tcGlsZSIsICgidG9vayAiLCAoYWZ0ZXIg
LSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zIHdpdGggIiwgcGF0aE5hbWUpKTsKICAgICB9
CiAgICAgaWYgKFVOTElLRUxZKHJlcG9ydENvbXBpbGVUaW1lcygpKSkgewotICAgICAgICBkYXRh
TG9nKCJPcHRpbWl6ZWQgIiwgY29kZUJsb2NrTmFtZSwgIiB1c2luZyAiLCBtb2RlLCAiIHdpdGgg
IiwgcGF0aE5hbWUsICIgaW50byAiLCBmaW5hbGl6ZXIgPyBmaW5hbGl6ZXItPmNvZGVTaXplKCkg
OiAwLCAiIGJ5dGVzIGluICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMi
KTsKKyAgICAgICAgZGF0YUxvZygiT3B0aW1pemVkICIsIGNvZGVCbG9ja05hbWUsICIgdXNpbmcg
IiwgbV9tb2RlLCAiIHdpdGggIiwgcGF0aE5hbWUsICIgaW50byAiLCBtX2ZpbmFsaXplciA/IG1f
ZmluYWxpemVyLT5jb2RlU2l6ZSgpIDogMCwgIiBieXRlcyBpbiAiLCAoYWZ0ZXIgLSBiZWZvcmUp
Lm1pbGxpc2Vjb25kcygpLCAiIG1zIik7CiAgICAgICAgIGlmIChwYXRoID09IEZUTFBhdGgpCiAg
ICAgICAgICAgICBkYXRhTG9nKCIgKERGRzogIiwgKG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZSku
bWlsbGlzZWNvbmRzKCksICIsIEIzOiAiLCAoYWZ0ZXIgLSBtX3RpbWVCZWZvcmVGVEwpLm1pbGxp
c2Vjb25kcygpLCAiKSIpOwogICAgICAgICBkYXRhTG9nKCIuXG4iKTsKQEAgLTIzOCwxNyArMjM4
LDE3IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKFRocmVhZERhdGEqIHQKIFBsYW46OkNv
bXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKCkKIHsKICAgICBjbGVhbk11
c3RIYW5kbGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOwotICAgIAotICAgIGlmICh2ZXJib3NlQ29tcGls
YXRpb25FbmFibGVkKG1vZGUpICYmIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCAhPSBVSU5UX01BWCkg
eworCisgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQobV9tb2RlKSAmJiBtX29zckVu
dHJ5Qnl0ZWNvZGVJbmRleCAhPSBVSU5UX01BWCkgewogICAgICAgICBkYXRhTG9nKCJcbiIpOwot
ICAgICAgICBkYXRhTG9nKCJDb21waWxlciBtdXN0IGhhbmRsZSBPU1IgZW50cnkgZnJvbSBiYyMi
LCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsICIgd2l0aCB2YWx1ZXM6ICIsIG11c3RIYW5kbGVWYWx1
ZXMsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb21waWxlciBtdXN0IGhhbmRsZSBPU1IgZW50
cnkgZnJvbSBiYyMiLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCwgIiB3aXRoIHZhbHVlczogIiwg
bV9tdXN0SGFuZGxlVmFsdWVzLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygiXG4iKTsKICAgICB9
Ci0gICAgCi0gICAgR3JhcGggZGZnKCp2bSwgKnRoaXMpOworCisgICAgR3JhcGggZGZnKCptX3Zt
LCAqdGhpcyk7CiAgICAgcGFyc2UoZGZnKTsKIAotICAgIGNvZGVCbG9jay0+c2V0Q2FsbGVlU2F2
ZVJlZ2lzdGVycyhSZWdpc3RlclNldDo6ZGZnQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBt
X2NvZGVCbG9jay0+c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhSZWdpc3RlclNldDo6ZGZnQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKIAogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCkBAIC0yNzAs
NyArMjcwLDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAg
IC8vIGluIHRoZSBDb2RlQmxvY2suIFRoaXMgaXMgYSBnb29kIHRpbWUgdG8gcGVyZm9ybSBhbiBl
YXJseSBzaHJpbmssIHdoaWNoIGlzIG1vcmUKICAgICAvLyBwb3dlcmZ1bCB0aGFuIGEgbGF0ZSBv
bmUuIEl0J3Mgc2FmZSB0byBkbyBzbyBiZWNhdXNlIHdlIGhhdmVuJ3QgZ2VuZXJhdGVkIGFueSBj
b2RlCiAgICAgLy8gdGhhdCByZWZlcmVuY2VzIGFueSBvZiB0aGUgdGFibGVzIGRpcmVjdGx5LCB5
ZXQuCi0gICAgY29kZUJsb2NrLT5zaHJpbmtUb0ZpdChDb2RlQmxvY2s6OkVhcmx5U2hyaW5rKTsK
KyAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpFYXJseVNocmluayk7CiAK
ICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKQEAg
LTI5MCwxMSArMjkwLDExIEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5U
aHIKICAgICBSVU5fUEhBU0UocGVyZm9ybVByZWRpY3Rpb25JbmplY3Rpb24pOwogICAgIAogICAg
IFJVTl9QSEFTRShwZXJmb3JtU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uKTsKLSAgICAK
LSAgICBpZiAobW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKKworICAgIGlmIChtX21vZGUg
PT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGVyZm9ybU9T
UkVudHJ5cG9pbnRDcmVhdGlvbihkZmcpOwogICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAg
ICAgICAgZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KCp0aGlz
KTsKKyAgICAgICAgICAgIG1fZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5h
bGl6ZXI+KCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBGYWlsUGF0aDsKICAgICAgICAgfQog
ICAgICAgICBSVU5fUEhBU0UocGVyZm9ybUNQU1JldGhyZWFkaW5nKTsKQEAgLTMwOCw5ICszMDgs
OSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgUlVOX1BI
QVNFKHBlcmZvcm1GaXh1cCk7CiAgICAgUlVOX1BIQVNFKHBlcmZvcm1JbnZhbGlkYXRpb25Qb2lu
dEluamVjdGlvbik7CiAgICAgUlVOX1BIQVNFKHBlcmZvcm1UeXBlQ2hlY2tIb2lzdGluZyk7Ci0g
ICAgCisKICAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnROb3RDb252ZXJnZWQ7Ci0g
ICAgCisKICAgICAvLyBGb3Igbm93IHdlJ3JlIGJhY2sgdG8gYXZvaWRpbmcgYSBmaXhwb2ludC4g
Tm90ZSB0aGF0IHdlJ3ZlIHBpbmctcG9uZ2VkIG9uIHRoaXMgZGVjaXNpb24KICAgICAvLyBtYW55
IHRpbWVzLiBGb3IgbWF4aW11bSB0aHJvdWdocHV0LCBpdCdzIGJlc3QgdG8gZml4cG9pbnQuIEJ1
dCB0aGUgdGhyb3VnaHB1dCBiZW5lZml0IGlzCiAgICAgLy8gc21hbGwgYW5kIG5vdCBsaWtlbHkg
dG8gc2hvdyB1cCBpbiBGVEwgYW55d2F5LiBPbiB0aGUgb3RoZXIgaGFuZCwgbm90IGZpeHBvaW50
aW5nIG1lYW5zCkBAIC0zMzEsNyArMzMxLDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46
OmNvbXBpbGVJblRocgogICAgICAgICB2YWxpZGF0ZShkZmcpOwogICAgIAogICAgIFJVTl9QSEFT
RShwZXJmb3JtQ1BTUmV0aHJlYWRpbmcpOwotICAgIGlmICghaXNGVEwobW9kZSkpIHsKKyAgICBp
ZiAoIWlzRlRMKCkpIHsKICAgICAgICAgLy8gT25seSBydW4gdGhpcyBpZiB3ZSdyZSBub3QgRlRM
aW5nLCBiZWNhdXNlIGN1cnJlbnRseSBmb3IgYSBMb2FkVmFyYXJncyB0aGF0IGlzIGZvcndhcmRh
YmxlIGFuZAogICAgICAgICAvLyBpbiBhIG5vbi12YXJhcmdzIGlubGluZWQgY2FsbCBmcmFtZSwg
dGhpcyB3aWxsIGdlbmVyYXRlIEZvcndhcmRWYXJhcmdzIHdoaWxlIHRoZSBGVEwKICAgICAgICAg
Ly8gQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZSB3aWxsIGNyZWF0ZSBhIHNlcXVlbmNlIG9mIEdl
dFN0YWNrK1B1dFN0YWNrcy4gVGhlIEdldFN0YWNrK1B1dFN0YWNrCkBAIC0zNjUsMTAgKzM2NSwx
MCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGRm
Zy5lbnN1cmVDUFNOYXR1cmFsTG9vcHMoKTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICBzd2l0Y2ggKG1fbW9kZSkgewogICAgIGNhc2UgREZHTW9kZTogewogICAgICAgICBkZmcu
bV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7Ci0gICAgCisKICAgICAgICAgUlVO
X1BIQVNFKHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbik7CiAKICAgICAgICAgUlVOX1BIQVNF
KHBlcmZvcm1GYXN0U3RvcmVCYXJyaWVySW5zZXJ0aW9uKTsKQEAgLTM4Myw3ICszODMsNyBAQCBQ
bGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGR1bXBBbmRW
ZXJpZnlHcmFwaChkZmcsICJHcmFwaCBhZnRlciBvcHRpbWl6YXRpb246Iik7CiAgICAgICAgIAog
ICAgICAgICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChkZmcpOwotICAgICAgICBpZiAoY29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgaWYgKG1fY29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgICAgIGRhdGFGbG93SklULmNv
bXBpbGVGdW5jdGlvbigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkYXRhRmxvd0pJVC5j
b21waWxlKCk7CkBAIC0zOTUsNyArMzk1LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46
OmNvbXBpbGVJblRocgogICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOiB7CiAjaWYgRU5BQkxF
KEZUTF9KSVQpCiAgICAgICAgIGlmIChGVEw6OmNhbkNvbXBpbGUoZGZnKSA9PSBGVEw6OkNhbm5v
dENvbXBpbGUpIHsKLSAgICAgICAgICAgIGZpbmFsaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8RmFp
bGVkRmluYWxpemVyPigqdGhpcyk7CisgICAgICAgICAgICBtX2ZpbmFsaXplciA9IHN0ZDo6bWFr
ZV91bmlxdWU8RmFpbGVkRmluYWxpemVyPigqdGhpcyk7CiAgICAgICAgICAgICByZXR1cm4gRmFp
bFBhdGg7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00NTQsMTEgKzQ1NCwxMSBAQCBQbGFuOjpD
b21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIFJVTl9QSEFTRShwZXJm
b3JtQ2xlYW5VcCk7CiAgICAgICAgIFJVTl9QSEFTRShwZXJmb3JtSW50ZWdlckNoZWNrQ29tYmlu
aW5nKTsKICAgICAgICAgUlVOX1BIQVNFKHBlcmZvcm1HbG9iYWxDU0UpOwotICAgICAgICAKKwog
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIG5vdCBhbGxvd2VkIHRvIGRvIGFueSBmdXJ0
aGVyIGNvZGUgbW90aW9uIGJlY2F1c2Ugb3VyIHJlYXNvbmluZwogICAgICAgICAvLyBhYm91dCBj
b2RlIG1vdGlvbiBhc3N1bWVzIHRoYXQgaXQncyBPSyB0byBpbnNlcnQgR0MgcG9pbnRzIGluIHJh
bmRvbSBwbGFjZXMuCiAgICAgICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludENvbnZl
cmdlZDsKLSAgICAgICAgCisKICAgICAgICAgUlVOX1BIQVNFKHBlcmZvcm1MaXZlbmVzc0FuYWx5
c2lzKTsKICAgICAgICAgUlVOX1BIQVNFKHBlcmZvcm1DRkEpOwogICAgICAgICBSVU5fUEhBU0Uo
cGVyZm9ybUdsb2JhbFN0b3JlQmFycmllckluc2VydGlvbik7CkBAIC00NzMsMTEgKzQ3MywxMSBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIFJVTl9Q
SEFTRShwZXJmb3JtV2F0Y2hwb2ludENvbGxlY3Rpb24pOwogICAgICAgICAKICAgICAgICAgaWYg
KEZUTDo6Y2FuQ29tcGlsZShkZmcpID09IEZUTDo6Q2Fubm90Q29tcGlsZSkgewotICAgICAgICAg
ICAgZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KCp0aGlzKTsK
KyAgICAgICAgICAgIG1fZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6
ZXI+KCp0aGlzKTsKICAgICAgICAgICAgIHJldHVybiBGYWlsUGF0aDsKICAgICAgICAgfQogCi0g
ICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBqdXN0IGJlZm9yZSBGVEwgbG93
ZXJpbmc6Iiwgc2hvdWxkRHVtcERpc2Fzc2VtYmx5KG1vZGUpKTsKKyAgICAgICAgZHVtcEFuZFZl
cmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBsb3dlcmluZzoiLCBzaG91bGRE
dW1wRGlzYXNzZW1ibHkobV9tb2RlKSk7CiAKICAgICAgICAgLy8gRmxhc2ggYSBzYWZlcG9pbnQg
aW4gY2FzZSB0aGUgR0Mgd2FudHMgc29tZSBhY3Rpb24uCiAgICAgICAgIFNhZmVwb2ludDo6UmVz
dWx0IHNhZmVwb2ludFJlc3VsdDsKQEAgLTUzNiw5NSArNTM2LDk1IEBAIFBsYW46OkNvbXBpbGF0
aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKIAogYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQoKQog
ewotICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7
CisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudCA9IG1fY29kZUJsb2NrLT5yZXBsYWNlbWVudCgp
OwogICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdCBuZWNlc3NhcnkuIFRoZXJlJ3Mgbm8g
d2F5IGZvciB0aGUgYmFzZWxpbmUKICAgICAvLyBjb2RlIHRvIGJlIHJlcGxhY2VkIGR1cmluZyBh
IGNvbXBpbGF0aW9uLCBleGNlcHQgaWYgd2UgZGVsZXRlIHRoZSBwbGFuLCBpbiB3aGljaAogICAg
IC8vIGNhc2Ugd2Ugd291bGRuJ3QgYmUgaGVyZS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNzA3Ci0gICAgaWYgKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSAhPSByZXBsYWNlbWVudC0+YmFzZWxpbmVWZXJzaW9uKCkpCisgICAgaWYgKG1fY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpICE9IHJlcGxhY2VtZW50LT5iYXNlbGluZVZlcnNpb24oKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghd2F0Y2hwb2ludHMuYXJlU3RpbGxWYWxpZCgp
KQorICAgIGlmICghbV93YXRjaHBvaW50cy5hcmVTdGlsbFZhbGlkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBQbGFuOjpyZWFsbHlBZGQoQ29t
bW9uRGF0YSogY29tbW9uRGF0YSkKIHsKLSAgICB3YXRjaHBvaW50cy5yZWFsbHlBZGQoY29kZUJs
b2NrLCAqY29tbW9uRGF0YSk7Ci0gICAgaWRlbnRpZmllcnMucmVhbGx5QWRkKCp2bSwgY29tbW9u
RGF0YSk7Ci0gICAgd2Vha1JlZmVyZW5jZXMucmVhbGx5QWRkKCp2bSwgY29tbW9uRGF0YSk7Ci0g
ICAgdHJhbnNpdGlvbnMucmVhbGx5QWRkKCp2bSwgY29tbW9uRGF0YSk7Ci0gICAgY29tbW9uRGF0
YS0+cmVjb3JkZWRTdGF0dXNlcyA9IFdURk1vdmUocmVjb3JkZWRTdGF0dXNlcyk7CisgICAgbV93
YXRjaHBvaW50cy5yZWFsbHlBZGQobV9jb2RlQmxvY2ssICpjb21tb25EYXRhKTsKKyAgICBtX2lk
ZW50aWZpZXJzLnJlYWxseUFkZCgqbV92bSwgY29tbW9uRGF0YSk7CisgICAgbV93ZWFrUmVmZXJl
bmNlcy5yZWFsbHlBZGQoKm1fdm0sIGNvbW1vbkRhdGEpOworICAgIG1fdHJhbnNpdGlvbnMucmVh
bGx5QWRkKCptX3ZtLCBjb21tb25EYXRhKTsKKyAgICBjb21tb25EYXRhLT5yZWNvcmRlZFN0YXR1
c2VzID0gV1RGTW92ZShtX3JlY29yZGVkU3RhdHVzZXMpOwogfQogCiB2b2lkIFBsYW46Om5vdGlm
eUNvbXBpbGluZygpCiB7Ci0gICAgc3RhZ2UgPSBDb21waWxpbmc7CisgICAgbV9zdGFnZSA9IENv
bXBpbGluZzsKIH0KIAogdm9pZCBQbGFuOjpub3RpZnlSZWFkeSgpCiB7Ci0gICAgY2FsbGJhY2st
PmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShjb2RlQmxvY2ssIHByb2Zp
bGVkREZHQ29kZUJsb2NrKTsKLSAgICBzdGFnZSA9IFJlYWR5OworICAgIG1fY2FsbGJhY2stPmNv
bXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShtX2NvZGVCbG9jaywgbV9wcm9m
aWxlZERGR0NvZGVCbG9jayk7CisgICAgbV9zdGFnZSA9IFJlYWR5OwogfQogCiBDb21waWxhdGlv
blJlc3VsdCBQbGFuOjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpCiB7CiAgICAg
Ly8gV2Ugd2lsbCBlc3RhYmxpc2ggbmV3IHJlZmVyZW5jZXMgZnJvbSB0aGUgY29kZSBibG9jayB0
byB0aGluZ3MuIFNvLCB3ZSBuZWVkIGEgYmFycmllci4KLSAgICB2bS0+aGVhcC53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrKTsKLSAgICAKKyAgICBtX3ZtLT5oZWFwLndyaXRlQmFycmllcihtX2NvZGVC
bG9jayk7CisKICAgICBpZiAoIWlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgIENPREVCTE9DS19M
T0dfRVZFTlQoY29kZUJsb2NrLCAiZGZnRmluYWxpemUiLCAoImludmFsaWRhdGVkIikpOworICAg
ICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGZnRmluYWxpemUiLCAoImlu
dmFsaWRhdGVkIikpOwogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlkYXRlZDsKICAg
ICB9CiAKICAgICBib29sIHJlc3VsdDsKLSAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSkKLSAgICAgICAgcmVzdWx0ID0gZmluYWxpemVyLT5maW5hbGl6ZUZ1bmN0
aW9uKCk7CisgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkK
KyAgICAgICAgcmVzdWx0ID0gbV9maW5hbGl6ZXItPmZpbmFsaXplRnVuY3Rpb24oKTsKICAgICBl
bHNlCi0gICAgICAgIHJlc3VsdCA9IGZpbmFsaXplci0+ZmluYWxpemUoKTsKLSAgICAKKyAgICAg
ICAgcmVzdWx0ID0gbV9maW5hbGl6ZXItPmZpbmFsaXplKCk7CisKICAgICBpZiAoIXJlc3VsdCkg
ewotICAgICAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRmZ0ZpbmFsaXplIiwg
KCJmYWlsZWQiKSk7CisgICAgICAgIENPREVCTE9DS19MT0dfRVZFTlQobV9jb2RlQmxvY2ssICJk
ZmdGaW5hbGl6ZSIsICgiZmFpbGVkIikpOwogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWls
ZWQ7CiAgICAgfQotICAgIAotICAgIHJlYWxseUFkZChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZn
Q29tbW9uKCkpOwotICAgIAorCisgICAgcmVhbGx5QWRkKG1fY29kZUJsb2NrLT5qaXRDb2RlKCkt
PmRmZ0NvbW1vbigpKTsKKwogICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAg
IFRyYWNrZWRSZWZlcmVuY2VzIHRyYWNrZWRSZWZlcmVuY2VzOwotICAgICAgICAKLSAgICAgICAg
Zm9yIChXcml0ZUJhcnJpZXI8SlNDZWxsPiYgcmVmZXJlbmNlIDogY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT53ZWFrUmVmZXJlbmNlcykKKworICAgICAgICBmb3IgKFdyaXRlQmFy
cmllcjxKU0NlbGw+JiByZWZlcmVuY2UgOiBtX2NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21t
b24oKS0+d2Vha1JlZmVyZW5jZXMpCiAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5hZGQo
cmVmZXJlbmNlLmdldCgpKTsKLSAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiYg
cmVmZXJlbmNlIDogY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT53ZWFrU3RydWN0
dXJlUmVmZXJlbmNlcykKKyAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiYgcmVm
ZXJlbmNlIDogbV9jb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPndlYWtTdHJ1Y3R1
cmVSZWZlcmVuY2VzKQogICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKHJlZmVyZW5j
ZS5nZXQoKSk7Ci0gICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudCA6
IGNvZGVCbG9jay0+Y29uc3RhbnRzKCkpCisgICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudCA6IG1fY29kZUJsb2NrLT5jb25zdGFudHMoKSkKICAgICAgICAgICAgIHRy
YWNrZWRSZWZlcmVuY2VzLmFkZChjb25zdGFudC5nZXQoKSk7CiAKLSAgICAgICAgZm9yIChhdXRv
KiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZyYW1lcykgeworICAgICAgICBmb3IgKGF1
dG8qIGlubGluZUNhbGxGcmFtZSA6ICptX2lubGluZUNhbGxGcmFtZXMpIHsKICAgICAgICAgICAg
IEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKICAgICAg
ICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29k
ZUJsb2NrLmdldCgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBDaGVjayB0
aGF0IGFueSBvdGhlciByZWZlcmVuY2VzIHRoYXQgd2UgaGF2ZSBhbnl3aGVyZSBpbiB0aGUgSklU
Q29kZSBhcmUgYWxzbwogICAgICAgICAvLyB0cmFja2VkIGVpdGhlciBzdHJvbmdseSBvciB3ZWFr
bHkuCi0gICAgICAgIGNvZGVCbG9jay0+aml0Q29kZSgpLT52YWxpZGF0ZVJlZmVyZW5jZXModHJh
Y2tlZFJlZmVyZW5jZXMpOworICAgICAgICBtX2NvZGVCbG9jay0+aml0Q29kZSgpLT52YWxpZGF0
ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOwogICAgIH0KLSAgICAKLSAgICBDT0RFQkxP
Q0tfTE9HX0VWRU5UKGNvZGVCbG9jaywgImRmZ0ZpbmFsaXplIiwgKCJzdWNjZWVkZWQiKSk7CisK
KyAgICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG1fY29kZUJsb2NrLCAiZGZnRmluYWxpemUiLCAoInN1
Y2NlZWRlZCIpKTsKICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQogCiB2b2lk
IFBsYW46OmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2soKQogewotICAgIGNhbGxiYWNrLT5jb21w
aWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIGZpbmFs
aXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkpOworICAgIG1fY2FsbGJhY2stPmNvbXBpbGF0
aW9uRGlkQ29tcGxldGUobV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRERkdDb2RlQmxvY2ssIGZpbmFs
aXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkpOwogfQogCiBDb21waWxhdGlvbktleSBQbGFu
OjprZXkoKQogewotICAgIHJldHVybiBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCksIG1vZGUpOworICAgIHJldHVybiBDb21waWxhdGlvbktleShtX2NvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSwgbV9tb2RlKTsKIH0KIAogdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTYzMyw4MiArNjMzLDgyIEBAIHZv
aWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4KICAgICAgICAgcmV0dXJuOwog
CiAgICAgY2xlYW5NdXN0SGFuZGxlVmFsdWVzSWZOZWNlc3NhcnkoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZChtdXN0SGFuZGxlVmFsdWVzW2ldKTsKLSAgICAKLSAgICByZWNvcmRl
ZFN0YXR1c2VzLm1hcmtJZkNoZWFwKHZpc2l0b3IpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1f
bXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspCisgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWQobV9tdXN0SGFuZGxlVmFsdWVzW2ldKTsKKworICAgIG1fcmVjb3JkZWRTdGF0dXNl
cy5tYXJrSWZDaGVhcCh2aXNpdG9yKTsKIAotICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWQo
Y29kZUJsb2NrKTsKLSAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKSk7Ci0gICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChwcm9maWxlZERGR0Nv
ZGVCbG9jayk7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9jayk7Cisg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7
CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKTsK
IAotICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7Ci0gICAgICAgIGZvciAoYXV0byogaW5saW5l
Q2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMpIHsKKyAgICBpZiAobV9pbmxpbmVDYWxsRnJh
bWVzKSB7CisgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKm1faW5saW5lQ2Fs
bEZyYW1lcykgewogICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVD
b2RlQmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZChp
bmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIHdlYWtSZWZlcmVuY2VzLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci0gICAgdHJh
bnNpdGlvbnMudmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICBtX3dlYWtSZWZlcmVuY2VzLnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgbV90cmFuc2l0aW9ucy52aXNpdENoaWxkcmVuKHZp
c2l0b3IpOwogfQogCiB2b2lkIFBsYW46OmZpbmFsaXplSW5HQygpCiB7Ci0gICAgcmVjb3JkZWRT
dGF0dXNlcy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygpOworICAgIG1fcmVjb3JkZWRTdGF0dXNl
cy5maW5hbGl6ZVdpdGhvdXREZWxldGluZygpOwogfQogCiBib29sIFBsYW46OmlzS25vd25Ub0Jl
TGl2ZUR1cmluZ0dDKCkKIHsKLSAgICBpZiAoc3RhZ2UgPT0gQ2FuY2VsbGVkKQorICAgIGlmICht
X3N0YWdlID09IENhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghSGVh
cDo6aXNNYXJrZWQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpCisgICAgaWYgKCFIZWFw
Ojppc01hcmtlZChtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFIZWFwOjppc01hcmtlZChjb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpKQorICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCEhcHJvZmlsZWRERkdDb2RlQmxvY2sg
JiYgIUhlYXA6OmlzTWFya2VkKHByb2ZpbGVkREZHQ29kZUJsb2NrKSkKKyAgICBpZiAoISFtX3By
b2ZpbGVkREZHQ29kZUJsb2NrICYmICFIZWFwOjppc01hcmtlZChtX3Byb2ZpbGVkREZHQ29kZUJs
b2NrKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lk
IFBsYW46OmNhbmNlbCgpCiB7Ci0gICAgdm0gPSBudWxscHRyOwotICAgIGNvZGVCbG9jayA9IG51
bGxwdHI7Ci0gICAgcHJvZmlsZWRERkdDb2RlQmxvY2sgPSBudWxscHRyOwotICAgIG11c3RIYW5k
bGVWYWx1ZXMuY2xlYXIoKTsKLSAgICBjb21waWxhdGlvbiA9IG51bGxwdHI7Ci0gICAgZmluYWxp
emVyID0gbnVsbHB0cjsKLSAgICBpbmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0cjsKLSAgICB3YXRj
aHBvaW50cyA9IERlc2lyZWRXYXRjaHBvaW50cygpOwotICAgIGlkZW50aWZpZXJzID0gRGVzaXJl
ZElkZW50aWZpZXJzKCk7Ci0gICAgd2Vha1JlZmVyZW5jZXMgPSBEZXNpcmVkV2Vha1JlZmVyZW5j
ZXMoKTsKLSAgICB0cmFuc2l0aW9ucyA9IERlc2lyZWRUcmFuc2l0aW9ucygpOwotICAgIGNhbGxi
YWNrID0gbnVsbHB0cjsKLSAgICBzdGFnZSA9IENhbmNlbGxlZDsKKyAgICBtX3ZtID0gbnVsbHB0
cjsKKyAgICBtX2NvZGVCbG9jayA9IG51bGxwdHI7CisgICAgbV9wcm9maWxlZERGR0NvZGVCbG9j
ayA9IG51bGxwdHI7CisgICAgbV9tdXN0SGFuZGxlVmFsdWVzLmNsZWFyKCk7CisgICAgbV9jb21w
aWxhdGlvbiA9IG51bGxwdHI7CisgICAgbV9maW5hbGl6ZXIgPSBudWxscHRyOworICAgIG1faW5s
aW5lQ2FsbEZyYW1lcyA9IG51bGxwdHI7CisgICAgbV93YXRjaHBvaW50cyA9IERlc2lyZWRXYXRj
aHBvaW50cygpOworICAgIG1faWRlbnRpZmllcnMgPSBEZXNpcmVkSWRlbnRpZmllcnMoKTsKKyAg
ICBtX3dlYWtSZWZlcmVuY2VzID0gRGVzaXJlZFdlYWtSZWZlcmVuY2VzKCk7CisgICAgbV90cmFu
c2l0aW9ucyA9IERlc2lyZWRUcmFuc2l0aW9ucygpOworICAgIG1fY2FsbGJhY2sgPSBudWxscHRy
OworICAgIG1fc3RhZ2UgPSBDYW5jZWxsZWQ7CiB9CiAKIHZvaWQgUGxhbjo6Y2xlYW5NdXN0SGFu
ZGxlVmFsdWVzSWZOZWNlc3NhcnkoKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG11c3RIYW5k
bGVWYWx1ZUNsZWFuaW5nTG9jayk7Ci0gICAgCi0gICAgaWYgKCFtdXN0SGFuZGxlVmFsdWVzTWF5
SW5jbHVkZUdhcmJhZ2UpCisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXN0SGFuZGxlVmFsdWVD
bGVhbmluZ0xvY2spOworCisgICAgaWYgKCFtX211c3RIYW5kbGVWYWx1ZXNNYXlJbmNsdWRlR2Fy
YmFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG11c3RIYW5kbGVWYWx1ZXNNYXlJbmNs
dWRlR2FyYmFnZSA9IGZhbHNlOwotICAgIAotICAgIGlmICghY29kZUJsb2NrKQorCisgICAgbV9t
dXN0SGFuZGxlVmFsdWVzTWF5SW5jbHVkZUdhcmJhZ2UgPSBmYWxzZTsKKworICAgIGlmICghbV9j
b2RlQmxvY2spCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIW11c3RIYW5kbGVWYWx1
ZXMubnVtYmVyT2ZMb2NhbHMoKSkKKworICAgIGlmICghbV9tdXN0SGFuZGxlVmFsdWVzLm51bWJl
ck9mTG9jYWxzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGFsdGVy
bmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIEZhc3RCaXRWZWN0b3IgbGl2
ZW5lc3MgPSBhbHRlcm5hdGl2ZS0+bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0
Qnl0ZWNvZGVPZmZzZXQoYWx0ZXJuYXRpdmUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCk7Ci0gICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IG11c3RIYW5kbGVWYWx1ZXMubnVtYmVyT2ZMb2Nh
bHMoKTsgbG9jYWwtLTspIHsKKworICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBtX2NvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBGYXN0Qml0VmVjdG9yIGxpdmVuZXNzID0gYWx0ZXJu
YXRpdmUtPmxpdmVuZXNzQW5hbHlzaXMoKS5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0
KGFsdGVybmF0aXZlLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGxvY2FsID0gbV9tdXN0SGFuZGxlVmFsdWVzLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsLS07
KSB7CiAgICAgICAgIGlmICghbGl2ZW5lc3NbbG9jYWxdKQotICAgICAgICAgICAgbXVzdEhhbmRs
ZVZhbHVlcy5sb2NhbChsb2NhbCkgPSBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgbV9tdXN0
SGFuZGxlVmFsdWVzLmxvY2FsKGxvY2FsKSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjM0MTczKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDcgKzUxLDggQEAgY2xhc3MgVGhyZWFkRGF0YTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi1z
dHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CitjbGFzcyBQ
bGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKK3B1YmxpYzoKICAgICBQ
bGFuKAogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9ja1RvQ29tcGlsZSwgQ29kZUJsb2NrKiBw
cm9maWxlZERGR0NvZGVCbG9jaywKICAgICAgICAgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgsCkBAIC03Niw0NyArNzcsNDMgQEAgc3RydWN0IFBsYW4gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIHZvaWQgZmluYWxpemVJbkdDKCk7CiAgICAg
dm9pZCBjYW5jZWwoKTsKIAotICAgIGJvb2wgY2FuVGllclVwQW5kT1NSRW50ZXIoKSBjb25zdCB7
IHJldHVybiAhdGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXMuaXNFbXB0eSgpOyB9Ci0gICAgCisg
ICAgYm9vbCBjYW5UaWVyVXBBbmRPU1JFbnRlcigpIGNvbnN0IHsgcmV0dXJuICFtX3RpZXJVcEFu
ZE9TUkVudGVyQnl0ZWNvZGVzLmlzRW1wdHkoKTsgfQorCiAgICAgdm9pZCBjbGVhbk11c3RIYW5k
bGVWYWx1ZXNJZk5lY2Vzc2FyeSgpOwotICAgIAotICAgIC8vIFdhcm5pbmc6IHByZXR0eSBtdWNo
IGFsbCBvZiB0aGUgcG9pbnRlciBmaWVsZHMgaW4gdGhpcyBvYmplY3QgZ2V0IG51bGxlZCBieSBj
YW5jZWwoKS4gU28sIGlmCi0gICAgLy8geW91J3JlIHdyaXRpbmcgY29kZSB0aGF0IGlzIGNhbGxh
YmxlIG9uIHRoZSBjYW5jZWwgcGF0aCwgYmUgc3VyZSB0byBudWxsIGNoZWNrIGV2ZXJ5dGhpbmch
Ci0gICAgCi0gICAgVk0qIHZtOwogCi0gICAgLy8gVGhlc2UgY2FuIGJlIHJhdyBwb2ludGVycyBi
ZWNhdXNlIHdlIHZpc2l0IHRoZW0gZHVyaW5nIGV2ZXJ5IEdDIGluIGNoZWNrTGl2ZW5lc3NBbmRW
aXNpdENoaWxkcmVuLgotICAgIENvZGVCbG9jayogY29kZUJsb2NrOwotICAgIENvZGVCbG9jayog
cHJvZmlsZWRERkdDb2RlQmxvY2s7CisgICAgVk0qIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsg
fQogCi0gICAgQ29tcGlsYXRpb25Nb2RlIG1vZGU7Ci0gICAgY29uc3QgdW5zaWduZWQgb3NyRW50
cnlCeXRlY29kZUluZGV4OwotICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXM7
Ci0gICAgYm9vbCBtdXN0SGFuZGxlVmFsdWVzTWF5SW5jbHVkZUdhcmJhZ2UgeyB0cnVlIH07Ci0g
ICAgTG9jayBtdXN0SGFuZGxlVmFsdWVDbGVhbmluZ0xvY2s7Ci0gICAgCi0gICAgVGhyZWFkRGF0
YSogdGhyZWFkRGF0YTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29k
ZUJsb2NrOyB9CiAKLSAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlv
bjsKKyAgICBib29sIGlzRlRMKCkgY29uc3QgeyByZXR1cm4gREZHOjppc0ZUTChtX21vZGUpOyB9
CisgICAgQ29tcGlsYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAg
ICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX29zckVu
dHJ5Qnl0ZWNvZGVJbmRleDsgfQorICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFu
ZGxlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9tdXN0SGFuZGxlVmFsdWVzOyB9CiAKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8RmluYWxpemVyPiBmaW5hbGl6ZXI7Ci0gICAgCi0gICAgUmVmUHRyPElu
bGluZUNhbGxGcmFtZVNldD4gaW5saW5lQ2FsbEZyYW1lczsKLSAgICBEZXNpcmVkV2F0Y2hwb2lu
dHMgd2F0Y2hwb2ludHM7Ci0gICAgRGVzaXJlZElkZW50aWZpZXJzIGlkZW50aWZpZXJzOwotICAg
IERlc2lyZWRXZWFrUmVmZXJlbmNlcyB3ZWFrUmVmZXJlbmNlczsKLSAgICBEZXNpcmVkVHJhbnNp
dGlvbnMgdHJhbnNpdGlvbnM7Ci0gICAgUmVjb3JkZWRTdGF0dXNlcyByZWNvcmRlZFN0YXR1c2Vz
OwotICAgIAotICAgIGJvb2wgd2lsbFRyeVRvVGllclVwIHsgZmFsc2UgfTsKKyAgICBUaHJlYWRE
YXRhKiB0aHJlYWREYXRhKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWREYXRhOyB9CisgICAgUHJv
ZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGls
YXRpb24uZ2V0KCk7IH0KKworICAgIEZpbmFsaXplciogZmluYWxpemVyKCkgY29uc3QgeyByZXR1
cm4gbV9maW5hbGl6ZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEZpbmFsaXplcihzdGQ6OnVuaXF1
ZV9wdHI8RmluYWxpemVyPiYmIGZpbmFsaXplcikgeyBtX2ZpbmFsaXplciA9IFdURk1vdmUoZmlu
YWxpemVyKTsgfQogCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgVmVjdG9yPHVuc2lnbmVkPj4gdGll
clVwSW5Mb29wSGllcmFyY2h5OwotICAgIFZlY3Rvcjx1bnNpZ25lZD4gdGllclVwQW5kT1NSRW50
ZXJCeXRlY29kZXM7CisgICAgUmVmUHRyPElubGluZUNhbGxGcmFtZVNldD4gaW5saW5lQ2FsbEZy
YW1lcygpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ2FsbEZyYW1lczsgfQorICAgIERlc2lyZWRX
YXRjaHBvaW50cyYgd2F0Y2hwb2ludHMoKSB7IHJldHVybiBtX3dhdGNocG9pbnRzOyB9CisgICAg
RGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlmaWVycygpIHsgcmV0dXJuIG1faWRlbnRpZmllcnM7
IH0KKyAgICBEZXNpcmVkV2Vha1JlZmVyZW5jZXMmIHdlYWtSZWZlcmVuY2VzKCkgeyByZXR1cm4g
bV93ZWFrUmVmZXJlbmNlczsgfQorICAgIERlc2lyZWRUcmFuc2l0aW9ucyYgdHJhbnNpdGlvbnMo
KSB7IHJldHVybiBtX3RyYW5zaXRpb25zOyB9CisgICAgUmVjb3JkZWRTdGF0dXNlcyYgcmVjb3Jk
ZWRTdGF0dXNlcygpIHsgcmV0dXJuIG1fcmVjb3JkZWRTdGF0dXNlczsgfQorCisgICAgYm9vbCB3
aWxsVHJ5VG9UaWVyVXAoKSBjb25zdCB7IHJldHVybiBtX3dpbGxUcnlUb1RpZXJVcDsgfQorICAg
IHZvaWQgc2V0V2lsbFRyeVRvVGllclVwKGJvb2wgd2lsbFRyeVRvVGllclVwKSB7IG1fd2lsbFRy
eVRvVGllclVwID0gd2lsbFRyeVRvVGllclVwOyB9CisKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBW
ZWN0b3I8dW5zaWduZWQ+PiYgdGllclVwSW5Mb29wSGllcmFyY2h5KCkgeyByZXR1cm4gbV90aWVy
VXBJbkxvb3BIaWVyYXJjaHk7IH0KKyAgICBWZWN0b3I8dW5zaWduZWQ+JiB0aWVyVXBBbmRPU1JF
bnRlckJ5dGVjb2RlcygpIHsgcmV0dXJuIG1fdGllclVwQW5kT1NSRW50ZXJCeXRlY29kZXM7IH0K
IAogICAgIGVudW0gU3RhZ2UgeyBQcmVwYXJpbmcsIENvbXBpbGluZywgUmVhZHksIENhbmNlbGxl
ZCB9OwotICAgIFN0YWdlIHN0YWdlOworICAgIFN0YWdlIHN0YWdlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGFnZTsgfQogCi0gICAgUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2Fs
bGJhY2s7CisgICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKiBjYWxsYmFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fY2FsbGJhY2suZ2V0KCk7IH0KKyAgICB2b2lkIHNldENhbGxiYWNrKFJlZjxE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spIHsgbV9jYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spOyB9CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjb21wdXRlQ29tcGlsZVRp
bWVzKCkgY29uc3Q7CkBAIC0xMjgsNiArMTI1LDQzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1N0
aWxsVmFsaWQoKTsKICAgICB2b2lkIHJlYWxseUFkZChDb21tb25EYXRhKik7CiAKKyAgICAvLyBX
YXJuaW5nOiBwcmV0dHkgbXVjaCBhbGwgb2YgdGhlIHBvaW50ZXIgZmllbGRzIGluIHRoaXMgb2Jq
ZWN0IGdldCBudWxsZWQgYnkgY2FuY2VsKCkuIFNvLCBpZgorICAgIC8vIHlvdSdyZSB3cml0aW5n
IGNvZGUgdGhhdCBpcyBjYWxsYWJsZSBvbiB0aGUgY2FuY2VsIHBhdGgsIGJlIHN1cmUgdG8gbnVs
bCBjaGVjayBldmVyeXRoaW5nIQorCisgICAgVk0qIG1fdm07CisKKyAgICAvLyBUaGVzZSBjYW4g
YmUgcmF3IHBvaW50ZXJzIGJlY2F1c2Ugd2UgdmlzaXQgdGhlbSBkdXJpbmcgZXZlcnkgR0MgaW4g
Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4uCisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKKyAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRERkdDb2RlQmxvY2s7CisKKyAgICBDb21waWxh
dGlvbk1vZGUgbV9tb2RlOworICAgIGNvbnN0IHVuc2lnbmVkIG1fb3NyRW50cnlCeXRlY29kZUlu
ZGV4OworICAgIE9wZXJhbmRzPEpTVmFsdWU+IG1fbXVzdEhhbmRsZVZhbHVlczsKKyAgICBib29s
IG1fbXVzdEhhbmRsZVZhbHVlc01heUluY2x1ZGVHYXJiYWdlIHsgdHJ1ZSB9OworICAgIExvY2sg
bV9tdXN0SGFuZGxlVmFsdWVDbGVhbmluZ0xvY2s7CisKKyAgICBUaHJlYWREYXRhKiBtX3RocmVh
ZERhdGE7CisKKyAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBtX2NvbXBpbGF0aW9u
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEZpbmFsaXplcj4gbV9maW5hbGl6ZXI7CisKKyAgICBS
ZWZQdHI8SW5saW5lQ2FsbEZyYW1lU2V0PiBtX2lubGluZUNhbGxGcmFtZXM7CisgICAgRGVzaXJl
ZFdhdGNocG9pbnRzIG1fd2F0Y2hwb2ludHM7CisgICAgRGVzaXJlZElkZW50aWZpZXJzIG1faWRl
bnRpZmllcnM7CisgICAgRGVzaXJlZFdlYWtSZWZlcmVuY2VzIG1fd2Vha1JlZmVyZW5jZXM7Cisg
ICAgRGVzaXJlZFRyYW5zaXRpb25zIG1fdHJhbnNpdGlvbnM7CisgICAgUmVjb3JkZWRTdGF0dXNl
cyBtX3JlY29yZGVkU3RhdHVzZXM7CisKKyAgICBib29sIG1fd2lsbFRyeVRvVGllclVwIHsgZmFs
c2UgfTsKKworICAgIEhhc2hNYXA8dW5zaWduZWQsIFZlY3Rvcjx1bnNpZ25lZD4+IG1fdGllclVw
SW5Mb29wSGllcmFyY2h5OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV90aWVyVXBBbmRPU1JFbnRl
ckJ5dGVjb2RlczsKKworICAgIFN0YWdlIG1fc3RhZ2U7CisKKyAgICBSZWZQdHI8RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrOworCiAgICAgTW9ub3RvbmljVGltZSBtX3Rp
bWVCZWZvcmVGVEw7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW5JbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuSW5saW5lcy5oCShyZXZpc2lvbiAyMzQxNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW5JbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsMTAgKzQxLDEwIEBAIHZvaWQg
UGxhbjo6aXRlcmF0ZUNvZGVCbG9ja3NGb3JHQyhjb25zdCAKICAgICAvLyBhbiBleHBsaWNpdCBi
YXJyaWVyLiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKICAg
ICAvLyBhbGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KIAotICAg
IGZ1bmMoY29kZUJsb2NrKTsKLSAgICBmdW5jKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0g
ICAgaWYgKHByb2ZpbGVkREZHQ29kZUJsb2NrKQotICAgICAgICBmdW5jKHByb2ZpbGVkREZHQ29k
ZUJsb2NrKTsKKyAgICBmdW5jKG1fY29kZUJsb2NrKTsKKyAgICBmdW5jKG1fY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKTsKKyAgICBpZiAobV9wcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAg
ZnVuYyhtX3Byb2ZpbGVkREZHQ29kZUJsb2NrKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9i
YmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIzNDE3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzksOCArMTc5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChpc1BoYW50b21Ob2RlICYmIGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQorCisgICAg
ICAgICAgICBpZiAoaXNQaGFudG9tTm9kZSAmJiBtX2dyYXBoLm1fcGxhbi5pc0ZUTCgpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaXNGb3J3
YXJkaW5nTm9kZSAmJiBtX25vZGUtPmhhc0FyZ3VtZW50c0NoaWxkKCkgJiYgbV9ub2RlLT5hcmd1
bWVudHNDaGlsZCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMzQxNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjgsMTYgKzY4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2lu
ICE9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIGlm
IChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhh
bmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBjb25zdCBPcGVyYW5k
czxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVW
YWx1ZXMoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZh
bHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhh
bmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5hY2Nlc3Nlc1N0YWNrKG1fZ3JhcGgpKTsKICAgICAgICAgICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdCgKLSAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVl
c1tpXSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtdXN0SGFu
ZGxlVmFsdWVzW2ldKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlcG9pbnQuY3BwCShyZXZpc2lvbiAy
MzQxNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVwb2ludC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0Nyw3IEBAIGJvb2wgU2FmZXBvaW50OjpSZXN1bHQ6OmRp
ZEdldENhbmNlbGxlZCgKIH0KIAogU2FmZXBvaW50OjpTYWZlcG9pbnQoUGxhbiYgcGxhbiwgUmVz
dWx0JiByZXN1bHQpCi0gICAgOiBtX3ZtKHBsYW4udm0pCisgICAgOiBtX3ZtKHBsYW4udm0oKSkK
ICAgICAsIG1fcGxhbihwbGFuKQogICAgICwgbV9kaWRDYWxsQmVnaW4oZmFsc2UpCiAgICAgLCBt
X3Jlc3VsdChyZXN1bHQpCkBAIC02MCw3ICs2MCw3IEBAIFNhZmVwb2ludDo6U2FmZXBvaW50KFBs
YW4mIHBsYW4sIFJlc3VsdCYKIFNhZmVwb2ludDo6flNhZmVwb2ludCgpCiB7CiAgICAgUkVMRUFT
RV9BU1NFUlQobV9kaWRDYWxsQmVnaW4pOwotICAgIGlmIChUaHJlYWREYXRhKiBkYXRhID0gbV9w
bGFuLnRocmVhZERhdGEpIHsKKyAgICBpZiAoVGhyZWFkRGF0YSogZGF0YSA9IG1fcGxhbi50aHJl
YWREYXRhKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS0+bV9zYWZlcG9pbnQgPT0g
dGhpcyk7CiAgICAgICAgIGRhdGEtPm1fcmlnaHRUb1J1bi5sb2NrKCk7CiAgICAgICAgIGRhdGEt
Pm1fc2FmZXBvaW50ID0gbnVsbHB0cjsKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBTYWZlcG9pbnQ6
OmJlZ2luKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9kaWRDYWxsQmVnaW4pOwogICAgIG1f
ZGlkQ2FsbEJlZ2luID0gdHJ1ZTsKLSAgICBpZiAoVGhyZWFkRGF0YSogZGF0YSA9IG1fcGxhbi50
aHJlYWREYXRhKSB7CisgICAgaWYgKFRocmVhZERhdGEqIGRhdGEgPSBtX3BsYW4udGhyZWFkRGF0
YSgpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhLT5tX3NhZmVwb2ludCk7CiAgICAg
ICAgIGRhdGEtPm1fc2FmZXBvaW50ID0gdGhpczsKICAgICAgICAgZGF0YS0+bV9yaWdodFRvUnVu
LnVubG9ja0ZhaXJseSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
cG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVw
b2ludC5oCShyZXZpc2lvbiAyMzQxNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIGNsYXNzIFZNOwog
CiBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgUGxhbjsKIGNsYXNzIFNjYW5uYWJsZTsKLXN0cnVj
dCBQbGFuOwogCiBjbGFzcyBTYWZlcG9pbnQgewogcHVibGljOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjM0MTczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDUsMTQgKzE0NSwxNCBAQCBwdWJsaWM6CiAKICAgICAgICAgc3RhdGljIFRy
dXN0ZWRJbW1QdHIgd2Vha1BvaW50ZXIoR3JhcGgmIGdyYXBoLCBKU0NlbGwqIGNlbGwpCiAgICAg
ICAgIHsgICAgIAotICAgICAgICAgICAgZ3JhcGgubV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExh
emlseShjZWxsKTsKKyAgICAgICAgICAgIGdyYXBoLm1fcGxhbi53ZWFrUmVmZXJlbmNlcygpLmFk
ZExhemlseShjZWxsKTsKICAgICAgICAgICAgIHJldHVybiBUcnVzdGVkSW1tUHRyKGJpdHdpc2Vf
Y2FzdDxzaXplX3Q+KGNlbGwpKTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEtleT4KICAgICAgICAgc3RhdGljIFRydXN0ZWRJbW1QdHIgd2Vha1BvaXNvbmVkUG9pbnRl
cihHcmFwaCYgZ3JhcGgsIEpTQ2VsbCogY2VsbCkKICAgICAgICAgeyAgICAgCi0gICAgICAgICAg
ICBncmFwaC5tX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KGNlbGwpOworICAgICAgICAg
ICAgZ3JhcGgubV9wbGFuLndlYWtSZWZlcmVuY2VzKCkuYWRkTGF6aWx5KGNlbGwpOwogICAgICAg
ICAgICAgcmV0dXJuIFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHNpemVfdD4oY2VsbCkgXiBL
ZXk6OmtleSgpKTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHJldmlzaW9uIDIzNDE3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMDMsOCArMTAzLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChJbmxp
bmVDYWxsRnJhbWVTZXQ6Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fcGxhbi5pbmxpbmVDYWxs
RnJhbWVzLT5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworCisgICAgICAgIGZvciAoSW5saW5l
Q2FsbEZyYW1lU2V0OjppdGVyYXRvciBpdGVyID0gbV9ncmFwaC5tX3BsYW4uaW5saW5lQ2FsbEZy
YW1lcygpLT5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSAqaXRlcjsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMjM0MTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJl
bmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIyLDkgKzkyMiw5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaDo6cGFyYW1ldGVyU2xvdHNG
b3JBcmdDb3VudChudW1BbGxvY2F0ZWRBcmdzKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi5yZWNvcmRl
ZFN0YXR1c2VzLmFkZENhbGxMaW5rU3RhdHVzKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLCBDYWxs
TGlua1N0YXR1cyhjYWxsVmFyaWFudCkpOwotICAgICAgICAgICAgCisKKyAgICAgICAgICAgIG1f
Z3JhcGgubV9wbGFuLnJlY29yZGVkU3RhdHVzZXMoKS5hZGRDYWxsTGlua1N0YXR1cyhtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgQ2FsbExpbmtTdGF0dXMoY2FsbFZhcmlhbnQpKTsKKwogICAgICAg
ICAgICAgbV9ub2RlLT5jb252ZXJ0VG9EaXJlY3RDYWxsKG1fZ3JhcGguZnJlZXplKGV4ZWN1dGFi
bGUpKTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjM0MTczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTYxLDggKzYxLDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkK
ICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gREZH
TW9kZSk7Ci0gICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fcGxhbi5t
b2RlKCkgPT0gREZHTW9kZSk7CisKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VGVExKSVQoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCkBAIC0xMTAsNyArMTEwLDcgQEAg
cHVibGljOgogCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4OwogICAgICAgICAgICAgICAgIGlmIChjYW5PU1JFbnRl
cikKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udGllclVwQW5kT1NSRW50ZXJC
eXRlY29kZXMuYXBwZW5kKGJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fcGxhbi50aWVyVXBBbmRPU1JFbnRlckJ5dGVjb2RlcygpLmFwcGVuZChieXRlY29kZUlu
ZGV4KTsKIAogICAgICAgICAgICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IG5h
dHVyYWxMb29wcy5pbm5lck1vc3RMb29wT2YoYmxvY2spKSB7CiAgICAgICAgICAgICAgICAgICAg
IExvb3BIaW50RGVzY3JpcHRvciBkZXNjcmlwdG9yOwpAQCAtMTQ3LDkgKzE0Nyw5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCF0aWVyVXBDYW5kaWRhdGVzLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50aWVyVXBJbkxvb3BIaWVy
YXJjaHkuYWRkKGVudHJ5LmtleSwgV1RGTW92ZSh0aWVyVXBDYW5kaWRhdGVzKSk7CisgICAgICAg
ICAgICAgICAgbV9ncmFwaC5tX3BsYW4udGllclVwSW5Mb29wSGllcmFyY2h5KCkuYWRkKGVudHJ5
LmtleSwgV1RGTW92ZSh0aWVyVXBDYW5kaWRhdGVzKSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9n
cmFwaC5tX3BsYW4ud2lsbFRyeVRvVGllclVwID0gdHJ1ZTsKKyAgICAgICAgbV9ncmFwaC5tX3Bs
YW4uc2V0V2lsbFRyeVRvVGllclVwKHRydWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbHNl
IC8vIEVOQUJMRShGVExfSklUKQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVD
aGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMzQxNzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ0MiwxMCArNDQyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NF
UlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFy
Z2V0KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGJsb2NrLT5i
eXRlY29kZUJlZ2luICE9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAg
ICAgICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5vc3JF
bnRyeUJ5dGVjb2RlSW5kZXgoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVl
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5t
X3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBj
b25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFu
Lm11c3RIYW5kbGVWYWx1ZXMoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGludCBvcGVy
YW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtNDU1LDcgKzQ1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIGlmICghVHlwZUNoZWNrOjppc1ZhbGlkVG9Ib2lzdChpdGVy
LT52YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ldOworICAg
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAg
ICAgICAgICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpIHx8IFR5cGVDaGVjazo6aXND
b250cmF2ZW5lZEJ5VmFsdWUoaXRlci0+dmFsdWUsIHZhbHVlKSkgewogICAgICAgICAgICAgICAg
ICAgICBUeXBlQ2hlY2s6OmRpc2FibGVIb2lzdGluZyhpdGVyLT52YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAJKHJldmlzaW9uIDIzNDE3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsNyArNjYsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6U3Rv
cDsKICAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3BsYW4tPnN0YWdlID09IFBs
YW46OlByZXBhcmluZyk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcGxhbi0+c3RhZ2UoKSA9
PSBQbGFuOjpQcmVwYXJpbmcpOwogICAgICAgICBtX3dvcmtsaXN0Lm1fbnVtYmVyT2ZBY3RpdmVU
aHJlYWRzKys7CiAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXb3JrOwogICAgIH0KQEAgLTEw
MCw3ICsxMDAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZGF0
YS5tX3JpZ2h0VG9SdW4pOwogICAgICAgICB7CiAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cigqbV93b3JrbGlzdC5tX2xvY2spOwotICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UgPT0g
UGxhbjo6Q2FuY2VsbGVkKQorICAgICAgICAgICAgaWYgKG1fcGxhbi0+c3RhZ2UoKSA9PSBQbGFu
OjpDYW5jZWxsZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVl
OwogICAgICAgICAgICAgbV9wbGFuLT5ub3RpZnlDb21waWxpbmcoKTsKICAgICAgICAgfQpAQCAt
MTA5LDEzICsxMDksMTMgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgZGF0YUxvZyhtX3dvcmts
aXN0LCAiOiBDb21waWxpbmcgIiwgbV9wbGFuLT5rZXkoKSwgIiBhc3luY2hyb25vdXNseVxuIik7
CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSdzIG5vIHdheSBmb3IgdGhlIEdDIHRvIGJlIHNh
ZmVwb2ludGluZyBzaW5jZSB3ZSBvd24gcmlnaHRUb1J1bi4KLSAgICAgICAgaWYgKG1fcGxhbi0+
dm0tPmhlYXAud29ybGRJc1N0b3BwZWQoKSkgeworICAgICAgICBpZiAobV9wbGFuLT52bSgpLT5o
ZWFwLndvcmxkSXNTdG9wcGVkKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkhlYXAgaXMgc3Rv
cGVkIGJ1dCBoZXJlIHdlIGFyZSEgKDEpXG4iKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9wbGFuLT5jb21waWxlSW5UaHJl
YWQoJm1fZGF0YSk7Ci0gICAgICAgIGlmIChtX3BsYW4tPnN0YWdlICE9IFBsYW46OkNhbmNlbGxl
ZCkgewotICAgICAgICAgICAgaWYgKG1fcGxhbi0+dm0tPmhlYXAud29ybGRJc1N0b3BwZWQoKSkg
eworICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSgpICE9IFBsYW46OkNhbmNlbGxlZCkgeworICAg
ICAgICAgICAgaWYgKG1fcGxhbi0+dm0oKS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKSB7CiAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiSGVhcCBpcyBzdG9wcGVkIGJ1dCBoZXJlIHdlIGFyZSEgKDIp
XG4iKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgfQpAQCAtMTIzLDcgKzEyMyw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgCiAgICAg
ICAgIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX3dvcmtsaXN0Lm1fbG9jayk7
Ci0gICAgICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSA9PSBQbGFuOjpDYW5jZWxsZWQpCisgICAg
ICAgICAgICBpZiAobV9wbGFuLT5zdGFnZSgpID09IFBsYW46OkNhbmNlbGxlZCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1fcGxhbi0+bm90aWZ5UmVhZHkoKTsKQEAgLTEzNCw4ICsxMzQsOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fd29ya2xpc3Qu
bV9yZWFkeVBsYW5zLmFwcGVuZChtX3BsYW4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9wbGFuLT52bS0+aGVhcC53b3JsZElzU3RvcHBlZCgpKTsKKworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcGxhbi0+dm0oKS0+aGVhcC53b3JsZElzU3RvcHBl
ZCgpKTsKICAgICAgICAgICAgIG1fd29ya2xpc3QubV9wbGFuQ29tcGlsZWQubm90aWZ5QWxsKCk7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMjMsNyArMjIzLDcgQEAgYm9vbCBXb3JrbGlzdDo6
aXNBY3RpdmVGb3JWTShWTSYgdm0pIGNvbgogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2sp
OwogICAgIFBsYW5NYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGxhbnMuZW5kKCk7CiAgICAg
Zm9yIChQbGFuTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT52YWx1ZS0+dm0gPT0gJnZtKQor
ICAgICAgICBpZiAoaXRlci0+dmFsdWUtPnZtKCkgPT0gJnZtKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTI0OCw3ICsyNDgsNyBAQCBXb3Jr
bGlzdDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBpbGF0aW9uU3RhCiAgICAgUGxhbk1hcDo6aXRlcmF0
b3IgaXRlciA9IG1fcGxhbnMuZmluZChrZXkpOwogICAgIGlmIChpdGVyID09IG1fcGxhbnMuZW5k
KCkpCiAgICAgICAgIHJldHVybiBOb3RLbm93bjsKLSAgICByZXR1cm4gaXRlci0+dmFsdWUtPnN0
YWdlID09IFBsYW46OlJlYWR5ID8gQ29tcGlsZWQgOiBDb21waWxpbmc7CisgICAgcmV0dXJuIGl0
ZXItPnZhbHVlLT5zdGFnZSgpID09IFBsYW46OlJlYWR5ID8gQ29tcGlsZWQgOiBDb21waWxpbmc7
CiB9CiAKIHZvaWQgV29ya2xpc3Q6OndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYg
dm0pCkBAIC0yNzgsOSArMjc4LDkgQEAgdm9pZCBXb3JrbGlzdDo6d2FpdFVudGlsQWxsUGxhbnNG
b3JWTUFyZQogICAgICAgICBib29sIGFsbEFyZUNvbXBpbGVkID0gdHJ1ZTsKICAgICAgICAgUGxh
bk1hcDo6aXRlcmF0b3IgZW5kID0gbV9wbGFucy5lbmQoKTsKICAgICAgICAgZm9yIChQbGFuTWFw
OjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
Ci0gICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUtPnZtICE9ICZ2bSkKKyAgICAgICAgICAgIGlm
IChpdGVyLT52YWx1ZS0+dm0oKSAhPSAmdm0pCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUtPnN0YWdlICE9IFBsYW46OlJlYWR5KSB7CisgICAg
ICAgICAgICBpZiAoaXRlci0+dmFsdWUtPnN0YWdlKCkgIT0gUGxhbjo6UmVhZHkpIHsKICAgICAg
ICAgICAgICAgICBhbGxBcmVDb21waWxlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQpAQCAtMjk5LDkgKzI5OSw5IEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92
ZUFsbFJlYWR5UGxhbnNGb3JWTSgKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVhZHlQbGFucy5zaXplKCk7ICsraSkgewogICAg
ICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1fcmVhZHlQbGFuc1tpXTsKLSAgICAgICAgaWYgKHBs
YW4tPnZtICE9ICZ2bSkKKyAgICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGlmIChwbGFuLT5zdGFnZSAhPSBQbGFuOjpSZWFkeSkKKyAg
ICAgICAgaWYgKHBsYW4tPnN0YWdlKCkgIT0gUGxhbjo6UmVhZHkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgbXlSZWFkeVBsYW5zLmFwcGVuZChwbGFuKTsKICAgICAgICAgbV9yZWFk
eVBsYW5zW2ktLV0gPSBtX3JlYWR5UGxhbnMubGFzdCgpOwpAQCAtMzMxLDkgKzMzMSw5IEBAIFdv
cmtsaXN0OjpTdGF0ZSBXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWEKICAgICAgICAgCiAgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb25RdWV1ZSgpKQogICAgICAgICAgICAgZGF0
YUxvZygqdGhpcywgIjogQ29tcGxldGluZyAiLCBjdXJyZW50S2V5LCAiXG4iKTsKLSAgICAgICAg
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPnN0YWdlID09IFBsYW46OlJlYWR5KTsKLSAg
ICAgICAgCisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UoKSA9PSBQbGFuOjpS
ZWFkeSk7CisKICAgICAgICAgcGxhbi0+ZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGN1cnJlbnRLZXkgPT0gcmVxdWVzdGVkS2V5KQpAQCAtMzc3LDcg
KzM3Nyw3IEBAIHZvaWQgV29ya2xpc3Q6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFYKICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIGZvciAoUGxhbk1hcDo6aXRl
cmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0
ZXIpIHsKICAgICAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAg
ICAgICAgIGlmIChwbGFuLT52bSAhPSB2bSkKKyAgICAgICAgICAgIGlmIChwbGFuLT52bSgpICE9
IHZtKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgcGxhbi0+Y2hlY2tM
aXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CiAgICAgICAgIH0KQEAgLTQwMSwxMyAr
NDAxLDEzIEBAIHZvaWQgV29ya2xpc3Q6OnJlbW92ZURlYWRQbGFucyhWTSYgdm0pCiAgICAgICAg
IEhhc2hTZXQ8Q29tcGlsYXRpb25LZXk+IGRlYWRQbGFuS2V5czsKICAgICAgICAgZm9yIChQbGFu
TWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5k
KCk7ICsraXRlcikgewogICAgICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OwotICAgICAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAgICAgICAgICAgIGlmIChwbGFu
LT52bSgpICE9ICZ2bSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlm
IChwbGFuLT5pc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKSB7CiAgICAgICAgICAgICAgICAgcGxh
bi0+ZmluYWxpemVJbkdDKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwbGFuLT5zdGFnZSAhPSBQbGFuOjpDYW5j
ZWxsZWQpOyAvLyBTaG91bGQgbm90IGJlIGNhbmNlbGxlZCwgeWV0LgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocGxhbi0+c3RhZ2UoKSAhPSBQbGFuOjpDYW5jZWxsZWQpOyAvLyBTaG91bGQg
bm90IGJlIGNhbmNlbGxlZCwgeWV0LgogICAgICAgICAgICAgQVNTRVJUKCFkZWFkUGxhbktleXMu
Y29udGFpbnMocGxhbi0+a2V5KCkpKTsKICAgICAgICAgICAgIGRlYWRQbGFuS2V5cy5hZGQocGxh
bi0+a2V5KCkpOwogICAgICAgICB9CkBAIC00MTcsMTIgKzQxNywxMiBAQCB2b2lkIFdvcmtsaXN0
OjpyZW1vdmVEZWFkUGxhbnMoVk0mIHZtKQogICAgICAgICAgICAgRGVxdWU8UmVmUHRyPFBsYW4+
PiBuZXdRdWV1ZTsKICAgICAgICAgICAgIHdoaWxlICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IG1fcXVldWUudGFrZUZpcnN0KCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHBsYW4tPnN0YWdlICE9IFBsYW46OkNhbmNlbGxlZCkKKyAgICAg
ICAgICAgICAgICBpZiAocGxhbi0+c3RhZ2UoKSAhPSBQbGFuOjpDYW5jZWxsZWQpCiAgICAgICAg
ICAgICAgICAgICAgIG5ld1F1ZXVlLmFwcGVuZChwbGFuKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIG1fcXVldWUuc3dhcChuZXdRdWV1ZSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9yZWFkeVBsYW5zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fcmVhZHlQbGFuc1tpXS0+c3RhZ2UgIT0gUGxhbjo6Q2FuY2VsbGVkKQorICAgICAgICAg
ICAgICAgIGlmIChtX3JlYWR5UGxhbnNbaV0tPnN0YWdlKCkgIT0gUGxhbjo6Q2FuY2VsbGVkKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBtX3JlYWR5UGxh
bnNbaS0tXSA9IG1fcmVhZHlQbGFucy5sYXN0KCk7CiAgICAgICAgICAgICAgICAgbV9yZWFkeVBs
YW5zLnJlbW92ZUxhc3QoKTsKQEAgLTQ1MSw5ICs0NTEsOSBAQCB2b2lkIFdvcmtsaXN0OjpyZW1v
dmVOb25Db21waWxpbmdQbGFuc0ZvCiAgICAgVmVjdG9yPFJlZlB0cjxQbGFuPj4gZGVhZFBsYW5z
OwogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3BsYW5zKSB7CiAgICAgICAgIFBsYW4qIHBsYW4g
PSBlbnRyeS52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAgICAg
ICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmIChwbGFuLT5zdGFnZSA9PSBQbGFuOjpDb21waWxpbmcpCisgICAgICAgIGlmIChwbGFuLT5z
dGFnZSgpID09IFBsYW46OkNvbXBpbGluZykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBkZWFkUGxhbktleXMuYWRkKHBsYW4tPmtleSgpKTsKICAgICAgICAgZGVhZFBsYW5zLmFwcGVu
ZChwbGFuKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3RJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dElubGluZXMuaAkocmV2aXNpb24gMjM0MTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQg
V29ya2xpc3Q6Oml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoVk0KICAgICBMb2NrSG9sZGVyIGxvY2tl
cigqbV9sb2NrKTsKICAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJl
Z2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFBsYW4qIHBs
YW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAg
ICAgICAgaWYgKHBsYW4tPnZtKCkgIT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIHBsYW4tPml0ZXJhdGVDb2RlQmxvY2tzRm9yR0MoZnVuYyk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyMzQxNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50
OjpSZQogICAgIGlmIChCMzo6QWlyOjpEaXNhc3NlbWJsZXIqIGRpc2Fzc2VtYmxlciA9IHN0YXRl
LnByb2MtPmNvZGUoKS5kaXNhc3NlbWJsZXIoKSkgewogICAgICAgICBQcmludFN0cmVhbSYgb3V0
ID0gV1RGOjpkYXRhRmlsZSgpOwogCi0gICAgICAgIG91dC5wcmludCgiR2VuZXJhdGVkICIsIHN0
YXRlLmdyYXBoLm1fcGxhbi5tb2RlLCAiIGNvZGUgZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBl
KHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiLCBpbnN0cnVjdGlv
biBjb3VudCA9ICIsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCks
ICI6XG4iKTsKKyAgICAgICAgb3V0LnByaW50KCJHZW5lcmF0ZWQgIiwgc3RhdGUuZ3JhcGgubV9w
bGFuLm1vZGUoKSwgIiBjb2RlIGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFw
aC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwgIiwgaW5zdHJ1Y3Rpb24gY291bnQgPSAi
LCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiOlxuIik7CiAK
ICAgICAgICAgTGlua0J1ZmZlciYgbGlua0J1ZmZlciA9ICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29k
ZUxpbmtCdWZmZXI7CiAgICAgICAgIEIzOjpWYWx1ZSogY3VycmVudEIzVmFsdWUgPSBudWxscHRy
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGYWlsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZhaWwuY3BwCShyZXZpc2lvbiAyMzQx
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZhaWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIERGRzsKIAogdm9pZCBmYWlsKFN0YXRl
JiBzdGF0ZSkKIHsKLSAgICBzdGF0ZS5ncmFwaC5tX3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtl
X3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KHN0YXRlLmdyYXBoLm1fcGxhbik7CisgICAgc3RhdGUu
Z3JhcGgubV9wbGFuLnNldEZpbmFsaXplcihzdGQ6Om1ha2VfdW5pcXVlPEZhaWxlZEZpbmFsaXpl
cj4oc3RhdGUuZ3JhcGgubV9wbGFuKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJ
KHJldmlzaW9uIDIzNDE3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmlu
YWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsMjEgKzc1LDIxIEBAIGJvb2wgSklURmlu
YWxpemVyOjpmaW5hbGl6ZUNvbW1vbigpCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpTRW50cnlQdHJUYWc+IGIzQ29kZVJlZiA9CiAgICAgICAgIEZJTkFMSVpFX0NPREVfSUYoZHVt
cERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1ZmZlciwgSlNFbnRyeVB0clRhZywKLSAgICAgICAg
ICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9w
bGFuLmNvZGVCbG9jaygpLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpOwogCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGFyaXR5Q2hlY2tDb2RlUmVmID0gZW50cnlw
b2ludExpbmtCdWZmZXIKICAgICAgICAgPyBGSU5BTElaRV9DT0RFX0lGKGR1bXBEaXNhc3NlbWJs
eSwgKmVudHJ5cG9pbnRMaW5rQnVmZmVyLCBKU0VudHJ5UHRyVGFnLAotICAgICAgICAgICAgIkZU
TCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIEIzIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6
OkZUTEpJVCkpLmRhdGEoKSwgZnVuY3Rpb24pCisgICAgICAgICAgICAiRlRMIGVudHJ5cG9pbnQg
dGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaygpLCBKSVRDb2RlOjpGVExKSVQpKS5k
YXRhKCksIGZ1bmN0aW9uKQogICAgICAgICA6IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5
UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGIzQ29kZVJlZi5jb2RlKCkpOwogCiAg
ICAgaml0Q29kZS0+aW5pdGlhbGl6ZUIzQ29kZShiM0NvZGVSZWYpOwogICAgIGppdENvZGUtPmlu
aXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludChhcml0eUNoZWNrQ29kZVJlZik7CiAKLSAgICBt
X3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKCpqaXRDb2RlKTsKKyAgICBtX3BsYW4uY29kZUJs
b2NrKCktPnNldEpJVENvZGUoKmppdENvZGUpOworCisgICAgaWYgKFVOTElLRUxZKG1fcGxhbi5j
b21waWxhdGlvbigpKSkKKyAgICAgICAgbV9wbGFuLnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxl
ci0+YWRkQ29tcGlsYXRpb24obV9wbGFuLmNvZGVCbG9jaygpLCAqbV9wbGFuLmNvbXBpbGF0aW9u
KCkpOwogCi0gICAgaWYgKFVOTElLRUxZKG1fcGxhbi5jb21waWxhdGlvbikpCi0gICAgICAgIG1f
cGxhbi52bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3BsYW4uY29k
ZUJsb2NrLCAqbV9wbGFuLmNvbXBpbGF0aW9uKTsKLSAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAyMzQx
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw5ICs1Myw5IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICBzdGF0
ZS5qaXRDb2RlLT5jb21tb24ucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCA9IGdyYXBoLnJl
cXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKTsKICAgICAKLSAgICBpZiAoIWdyYXBoLm1fcGxh
bi5pbmxpbmVDYWxsRnJhbWVzLT5pc0VtcHR5KCkpCi0gICAgICAgIHN0YXRlLmppdENvZGUtPmNv
bW1vbi5pbmxpbmVDYWxsRnJhbWVzID0gZ3JhcGgubV9wbGFuLmlubGluZUNhbGxGcmFtZXM7Ci0g
ICAgCisgICAgaWYgKCFncmFwaC5tX3BsYW4uaW5saW5lQ2FsbEZyYW1lcygpLT5pc0VtcHR5KCkp
CisgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5pbmxpbmVDYWxsRnJhbWVzID0gZ3JhcGgu
bV9wbGFuLmlubGluZUNhbGxGcmFtZXMoKTsKKwogICAgIGdyYXBoLnJlZ2lzdGVyRnJvemVuVmFs
dWVzKCk7CiAKICAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1c2Ug
dGhpcyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKQEAgLTEyNSw4ICsxMjUsOCBAQCB2
b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAKICAgICAgICAgc3RhdGUuaml0Q29kZS0+
Y29tbW9uLmNvbXBpbGF0aW9uID0gY29tcGlsYXRpb247CiAgICAgfQotICAgIAotICAgIHN3aXRj
aCAoZ3JhcGgubV9wbGFuLm1vZGUpIHsKKworICAgIHN3aXRjaCAoZ3JhcGgubV9wbGFuLm1vZGUo
KSkgewogICAgIGNhc2UgRlRMTW9kZTogewogICAgICAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1
cCA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpICE9IDE7CiAgICAgICAgIGlmIChjb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
cmV2aXNpb24gMjM0MTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjY5LDcgKzY2NjksNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBz
LkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6VHJhbnNpdGlvbiwgdmFyaWFudC5raW5kKCkpOwotICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV9wbGFuLnRyYW5zaXRpb25zLmFkZExhemlseSgKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fcGxhbi50cmFuc2l0aW9ucygpLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAg
Y29kZUJsb2NrKCksIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAog
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwg
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgCkBAIC0xNjEwOCw4ICsx
NjEwOCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5
ID0gYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKQotICAgICAgICAgICAg
ICAgICYmIG1fZ3JhcGgubV9wbGFuLm1vZGUgIT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7Ci0gICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3BsYW4ubW9kZSgpICE9
IEZUTEZvck9TUkVudHJ5TW9kZSkgeworCiAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0
eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLCBleGl0T3JpZ2luKSkKICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJMaXZlIGJ5dGVjb2RlIGxvY2FsIG5vdCBhdmFpbGFibGU6
IG9wZXJhbmQgPSAiLCBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksICIsIGF2YWlsYWJpbGl0eSA9
ICIsIGF2YWlsYWJpbGl0eSwgIiwgb3JpZ2luID0gIiwgZXhpdE9yaWdpbikuZGF0YSgpKTsKICAg
ICAgICAgICAgIH0KQEAgLTE2Mzg0LDcgKzE2Mzg0LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJnZXQpCiAgICAgewotICAgICAgICBtX2dy
YXBoLm1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkodGFyZ2V0KTsKKyAgICAgICAgbV9n
cmFwaC5tX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5hZGRMYXppbHkodGFyZ2V0KTsKICAgICB9CiAK
ICAgICBMVmFsdWUgbG9hZFN0cnVjdHVyZShMVmFsdWUgdmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDIzNDE3MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDks
NyBAQCBwdWJsaWM6CiAKICAgICBMVmFsdWUgd2Vha1BvaW50ZXIoREZHOjpHcmFwaCYgZ3JhcGgs
IEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChncmFwaC5tX3BsYW4ud2Vha1Jl
ZmVyZW5jZXMuY29udGFpbnMoY2VsbCkpOworICAgICAgICBBU1NFUlQoZ3JhcGgubV9wbGFuLndl
YWtSZWZlcmVuY2VzKCkuY29udGFpbnMoY2VsbCkpOwogCiAgICAgICAgIHJldHVybiBjb25zdElu
dFB0cihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGNlbGwpKTsKICAgICB9CkBAIC0xMTcsNyArMTE3
LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleT4KICAgICBMVmFsdWUgd2Vh
a1BvaXNvbmVkUG9pbnRlcihERkc6OkdyYXBoJiBncmFwaCwgSlNDZWxsKiBjZWxsKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKGdyYXBoLm1fcGxhbi53ZWFrUmVmZXJlbmNlcy5jb250YWlucyhjZWxs
KSk7CisgICAgICAgIEFTU0VSVChncmFwaC5tX3BsYW4ud2Vha1JlZmVyZW5jZXMoKS5jb250YWlu
cyhjZWxsKSk7CiAKICAgICAgICAgcmV0dXJuIGNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oY2VsbCkgXiBLZXk6OmtleSgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFN0YXRlLmNwcAkocmV2aXNpb24gMjM0MTczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIERGRzsKIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBn
cmFwaChncmFwaCkKIHsKLSAgICBzd2l0Y2ggKGdyYXBoLm1fcGxhbi5tb2RlKSB7CisgICAgc3dp
dGNoIChncmFwaC5tX3BsYW4ubW9kZSgpKSB7CiAgICAgY2FzZSBGVExNb2RlOiB7CiAgICAgICAg
IGppdENvZGUgPSBhZG9wdFJlZihuZXcgSklUQ29kZSgpKTsKICAgICAgICAgYnJlYWs7CkBAIC01
MSw3ICs1MSw3IEBAIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgY2FzZSBGVExGb3JP
U1JFbnRyeU1vZGU6IHsKICAgICAgICAgUmVmUHRyPEZvck9TUkVudHJ5SklUQ29kZT4gY29kZSA9
IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUoKSk7CiAgICAgICAgIGNvZGUtPmluaXRp
YWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3ZtLCBncmFwaC5tX3Byb2ZpbGVkQmxvY2stPm51bUNh
bGxlZUxvY2FscygpKTsKLSAgICAgICAgY29kZS0+c2V0Qnl0ZWNvZGVJbmRleChncmFwaC5tX3Bs
YW4ub3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgY29kZS0+c2V0Qnl0ZWNvZGVJbmRl
eChncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KCkpOwogICAgICAgICBqaXRDb2Rl
ID0gY29kZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjAsOCArNjAsOCBAQCBTdGF0ZTo6
U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBncmFwaC5t
X3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxKSVRGaW5hbGl6ZXI+KGdyYXBoLm1f
cGxhbik7Ci0gICAgZmluYWxpemVyID0gc3RhdGljX2Nhc3Q8SklURmluYWxpemVyKj4oZ3JhcGgu
bV9wbGFuLmZpbmFsaXplci5nZXQoKSk7CisgICAgZ3JhcGgubV9wbGFuLnNldEZpbmFsaXplcihz
dGQ6Om1ha2VfdW5pcXVlPEpJVEZpbmFsaXplcj4oZ3JhcGgubV9wbGFuKSk7CisgICAgZmluYWxp
emVyID0gc3RhdGljX2Nhc3Q8SklURmluYWxpemVyKj4oZ3JhcGgubV9wbGFuLmZpbmFsaXplcigp
KTsKIAogICAgIHByb2MgPSBzdGQ6Om1ha2VfdW5pcXVlPFByb2NlZHVyZT4oKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>