<?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>181545</bug_id>
          
          <creation_ts>2018-01-11 11:11:49 -0800</creation_ts>
          <short_desc>Move ExitProfile to UnlinkedCodeBlock so it can be shared amongst CodeBlocks backed by the same UnlinkedCodeBlock</short_desc>
          <delta_ts>2018-04-30 09:19:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1388316</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-11 11:11:49 -0800</bug_when>
    <thetext>This will follow the theme of putting other optimization information on UnlinkedCodeBlock. This allows the unlinked code cache to remember OSR exit data. Obviously this can make some programs worse: if the same exact code is run in a different way. However, it&apos;s probably a solid heuristic in practice, since the same code tends to run in similar ways, and do similar things. Doing this appears to be a 1% speedup on Speedometer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388611</commentid>
    <comment_count>1</comment_count>
      <attachid>331152</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-11 18:21:03 -0800</bug_when>
    <thetext>Created attachment 331152
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388614</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-11 18:23:35 -0800</bug_when>
    <thetext>Attachment 331152 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/DFGExitProfile.h:178:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/DFGExitProfile.h:179:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/DFGExitProfile.h:181:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 3 in 15 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>1388961</commentid>
    <comment_count>3</comment_count>
      <attachid>331236</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-12 14:41:26 -0800</bug_when>
    <thetext>Created attachment 331236
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388965</commentid>
    <comment_count>4</comment_count>
      <attachid>331236</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-01-12 14:46:01 -0800</bug_when>
    <thetext>Comment on attachment 331236
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389010</commentid>
    <comment_count>5</comment_count>
      <attachid>331236</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-12 16:36:42 -0800</bug_when>
    <thetext>Comment on attachment 331236
patch

Clearing flags on attachment: 331236

Committed r226928: &lt;https://trac.webkit.org/changeset/226928&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389011</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-12 16:36:43 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389012</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-12 16:37:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/36486548&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389211</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-14 11:41:14 -0800</bug_when>
    <thetext>This broke the CLOOP build. Fixing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1389212</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-14 11:44:00 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #8)
&gt; This broke the CLOOP build. Fixing now.

Fixed CLOOP build in:
https://trac.webkit.org/changeset/226942/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418933</commentid>
    <comment_count>10</comment_count>
      <attachid>331236</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-29 16:44:54 -0700</bug_when>
    <thetext>Comment on attachment 331236
patch

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

&gt; Source/JavaScriptCore/dfg/DFGLICMPhase.cpp:284
&gt; -            &amp;&amp; m_graph.baselineCodeBlockFor(originalOrigin.semantic)-&gt;hasExitSite(FrequentExitSite(HoistingFailed))) {
&gt; +            &amp;&amp; m_graph.hasExitSite(originalOrigin.semantic, HoistingFailed)) {

This introduced a licm-dragons regression because you should have called hasGlobalExitSite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418942</commentid>
    <comment_count>11</comment_count>
      <attachid>331236</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-04-29 21:06:52 -0700</bug_when>
    <thetext>Comment on attachment 331236
patch

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

B

&gt;&gt; Source/JavaScriptCore/dfg/DFGLICMPhase.cpp:284
&gt;&gt; +            &amp;&amp; m_graph.hasExitSite(originalOrigin.semantic, HoistingFailed)) {
&gt; 
&gt; This introduced a licm-dragons regression because you should have called hasGlobalExitSite.

How is this different than what was here before?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418955</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-29 23:28:37 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #11)
&gt; Comment on attachment 331236 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=331236&amp;action=review
&gt; 
&gt; B
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/dfg/DFGLICMPhase.cpp:284
&gt; &gt;&gt; +            &amp;&amp; m_graph.hasExitSite(originalOrigin.semantic, HoistingFailed)) {
&gt; &gt; 
&gt; &gt; This introduced a licm-dragons regression because you should have called hasGlobalExitSite.
&gt; 
&gt; How is this different than what was here before?

Global exit sites don’t store the bytecode index.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418989</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-04-30 09:18:47 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #12)
&gt; (In reply to Saam Barati from comment #11)
&gt; &gt; Comment on attachment 331236 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=331236&amp;action=review
&gt; &gt; 
&gt; &gt; B
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/JavaScriptCore/dfg/DFGLICMPhase.cpp:284
&gt; &gt; &gt;&gt; +            &amp;&amp; m_graph.hasExitSite(originalOrigin.semantic, HoistingFailed)) {
&gt; &gt; &gt; 
&gt; &gt; &gt; This introduced a licm-dragons regression because you should have called hasGlobalExitSite.
&gt; &gt; 
&gt; &gt; How is this different than what was here before?
&gt; 
&gt; Global exit sites don’t store the bytecode index.

I understand that. But the code wasn’t using global exit site before my change either...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418990</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-04-30 09:19:33 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #13)
&gt; (In reply to Filip Pizlo from comment #12)
&gt; &gt; (In reply to Saam Barati from comment #11)
&gt; &gt; &gt; Comment on attachment 331236 [details]
&gt; &gt; &gt; patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=331236&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; B
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Source/JavaScriptCore/dfg/DFGLICMPhase.cpp:284
&gt; &gt; &gt; &gt;&gt; +            &amp;&amp; m_graph.hasExitSite(originalOrigin.semantic, HoistingFailed)) {
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This introduced a licm-dragons regression because you should have called hasGlobalExitSite.
&gt; &gt; &gt; 
&gt; &gt; &gt; How is this different than what was here before?
&gt; &gt; 
&gt; &gt; Global exit sites don’t store the bytecode index.
&gt; 
&gt; I understand that. But the code wasn’t using global exit site before my
&gt; change either...

Oh wait. Yeah it was. I see</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331152</attachid>
            <date>2018-01-11 18:21:03 -0800</date>
            <delta_ts>2018-01-12 14:41:26 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>25624</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcAkocmV2aXNpb24gMjI2ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBA
IHZvaWQgQnl0ZWNvZGVEdW1wZXI8Q29kZUJsb2NrPjo6ZHVtcFByb2YKICAgICB9CiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKLSAgICBWZWN0b3I8REZHOjpGcmVxdWVudEV4aXRTaXRlPiBleGl0U2l0
ZXMgPSBibG9jaygpLT5leGl0UHJvZmlsZSgpLmV4aXRTaXRlc0Zvcihsb2NhdGlvbik7CisgICAg
VmVjdG9yPERGRzo6RnJlcXVlbnRFeGl0U2l0ZT4gZXhpdFNpdGVzID0gYmxvY2soKS0+dW5saW5r
ZWRDb2RlQmxvY2soKS0+ZXhpdFByb2ZpbGUoKS5leGl0U2l0ZXNGb3IobG9jYXRpb24pOwogICAg
IGlmICghZXhpdFNpdGVzLmlzRW1wdHkoKSkgewogICAgICAgICBvdXQucHJpbnQoIiAhISBmcmVx
dWVudCBleGl0czogIik7CiAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2
aXNpb24gMjI2ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDEyICs1NCwxMiBAQCBDYWxsTGlua1N0
YXR1czo6Q2FsbExpbmtTdGF0dXMoSlNWYWx1ZSB2CiAgICAgbV92YXJpYW50cy5hcHBlbmQoQ2Fs
bFZhcmlhbnQodmFsdWUuYXNDZWxsKCkpKTsKIH0KIAotQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIs
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK0NhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJl
bnRKU0xvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKIHsKICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAgVU5VU0VEX1BB
UkFNKGJ5dGVjb2RlSW5kZXgpOwogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChwcm9maWxl
ZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29k
ZUluZGV4LCBCYWRDZWxsKSkpIHsKKyAgICBpZiAocHJvZmlsZWRCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKS0+aGFzRXhpdFNpdGUoREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgs
IEJhZENlbGwpKSkgewogICAgICAgICAvLyBXZSBjb3VsZCBmb3JjZSB0aGlzIHRvIGJlIGEgY2xv
c3VyZSBjYWxsLCBidXQgaW5zdGVhZCB3ZSdsbCBqdXN0IGFzc3VtZSB0aGF0IGl0CiAgICAgICAg
IC8vIHRha2VzIHNsb3cgcGF0aC4KICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKQEAg
LTg3LDcgKzg3LDcgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwog
ICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKICAgICBVTlVTRURfUEFSQU0obWFwKTsK
ICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhID0gY29t
cHV0ZUV4aXRTaXRlRGF0YShsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwor
ICAgIEV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGEgPSBjb21wdXRlRXhpdFNpdGVEYXRhKHByb2Zp
bGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKTsKICAgICBpZiAoIWNh
bGxMaW5rSW5mbykgewpAQCAtMTAyLDE3ICsxMDIsMTggQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVGbwogI2VuZGlmCiB9CiAKLUNhbGxMaW5rU3RhdHVzOjpFeGl0U2l0
ZURhdGEgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoCi0gICAgY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKK0NhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KQogewogICAgIEV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGE7Ci0g
ICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCisgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IHByb2ZpbGVkQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisKICAgICBleGl0U2l0ZURhdGEudGFr
ZXNTbG93UGF0aCA9Ci0gICAgICAgIHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwg
REZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZFR5cGUpKQotICAgICAgICB8
fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0
ZShieXRlY29kZUluZGV4LCBCYWRFeGVjdXRhYmxlKSk7CisgICAgICAgIGNvZGVCbG9jay0+aGFz
RXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFk
VHlwZSkpCisgICAgICAgIHx8IGNvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZy
ZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkRXhlY3V0YWJsZSkpOwogICAgIGV4aXRT
aXRlRGF0YS5iYWRGdW5jdGlvbiA9Ci0gICAgICAgIHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRl
KGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENlbGwpKTsK
KyAgICAgICAgY29kZUJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0
U2l0ZShieXRlY29kZUluZGV4LCBCYWRDZWxsKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShs
b2NrZXIpOwogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKQEAgLTI3NSwxMiArMjc2
LDcgQEAgdm9pZCBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZURGR1N0YXR1c2VzKAogICAgICAgICAv
LyBJbmxpbmVDYWxsRnJhbWVzLgogICAgICAgICBDb2RlQmxvY2sqIGN1cnJlbnRCYXNlbGluZSA9
CiAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJs
b2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKLSAgICAgICAgRXhpdFNpdGVEYXRh
IGV4aXRTaXRlRGF0YTsKLSAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjdXJyZW50QmFzZWxpbmUtPm1fbG9jayk7Ci0gICAgICAgICAgICBleGl0U2l0ZURh
dGEgPSBjb21wdXRlRXhpdFNpdGVEYXRhKAotICAgICAgICAgICAgICAgIGxvY2tlciwgY3VycmVu
dEJhc2VsaW5lLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICB9CisgICAgICAg
IEV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGEgPSBjb21wdXRlRXhpdFNpdGVEYXRhKGN1cnJlbnRC
YXNlbGluZSwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAgICAgCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoZGZnQ29kZUJsb2NrLT5tX2xv
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmgJKHJldmlzaW9uIDIyNjgyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua1N0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsNyArNjcsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGJvb2wgdGFrZXNTbG93UGF0aCB7IGZhbHNlIH07CiAgICAgICAgIGJv
b2wgYmFkRnVuY3Rpb24geyBmYWxzZSB9OwogICAgIH07Ci0gICAgc3RhdGljIEV4aXRTaXRlRGF0
YSBjb21wdXRlRXhpdFNpdGVEYXRhKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9j
ayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgIHN0YXRpYyBFeGl0U2l0ZURhdGEgY29t
cHV0ZUV4aXRTaXRlRGF0YShDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAg
ICAKICNpZiBFTkFCTEUoSklUKQogICAgIC8vIENvbXB1dGVzIHRoZSBzdGF0dXMgYXNzdW1pbmcg
dGhhdCB3ZSBuZXZlciB0b29rIHNsb3cgcGF0aCBhbmQgbmV2ZXIgcHJldmlvdXNseQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjI2
ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQu
aCIKICNpbmNsdWRlICJDb25jdXJyZW50SlNMb2NrLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgi
Ci0jaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKICNpbmNsdWRlICJEaXJlY3RFdmFsQ29kZUNh
Y2hlLmgiCiAjaW5jbHVkZSAiRXZhbEV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJFeGVjdXRpb25D
b3VudGVyLmgiCkBAIC01MTIsMjUgKzUxMSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNv
ZGVPcmlnaW5zKClbaW5kZXguYml0cygpXTsKICAgICB9CiAKLSAgICBib29sIGFkZEZyZXF1ZW50
RXhpdFNpdGUoY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwotICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBtX2V4aXRQ
cm9maWxlLmFkZChsb2NrZXIsIHRoaXMsIHNpdGUpOwotICAgIH0KLQotICAgIGJvb2wgaGFzRXhp
dFNpdGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERGRzo6RnJlcXVl
bnRFeGl0U2l0ZSYgc2l0ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2V4aXRQcm9m
aWxlLmhhc0V4aXRTaXRlKGxvY2tlciwgc2l0ZSk7Ci0gICAgfQotICAgIGJvb2wgaGFzRXhpdFNp
dGUoY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICByZXR1cm4gaGFz
RXhpdFNpdGUobG9ja2VyLCBzaXRlKTsKLSAgICB9Ci0KLSAgICBERkc6OkV4aXRQcm9maWxlJiBl
eGl0UHJvZmlsZSgpIHsgcmV0dXJuIG1fZXhpdFByb2ZpbGU7IH0KLQogICAgIENvbXByZXNzZWRM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlciYgbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX2xhenlPcGVyYW5kVmFsdWVQcm9maWxlczsKQEAgLTEw
MTksNyArOTk5LDYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBUaGlz
IGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJv
ZmlsZWQgY29kZSBibG9jawogICAgIC8vIGZvciBERkcgY29kZSBibG9ja3MuCi0gICAgREZHOjpF
eGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwogICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZUhvbGRlciBtX2xhenlPcGVyYW5kVmFsdWVQcm9maWxlczsKICNlbmRpZgogICAgIFJl
ZkNvdW50ZWRBcnJheTxWYWx1ZVByb2ZpbGU+IG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUu
Y3BwCShyZXZpc2lvbiAyMjY4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
REZHRXhpdFByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwzMiArNDEsMzUgQEAgdm9p
ZCBGcmVxdWVudEV4aXRTaXRlOjpkdW1wKFByaW50U3RyZWFtJgogRXhpdFByb2ZpbGU6OkV4aXRQ
cm9maWxlKCkgeyB9CiBFeGl0UHJvZmlsZTo6fkV4aXRQcm9maWxlKCkgeyB9CiAKLWJvb2wgRXhp
dFByb2ZpbGU6OmFkZChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIG93bmVy
LCBjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQorYm9vbCBFeGl0UHJvZmlsZTo6YWRkKENv
ZGVCbG9jayogb3duZXIsIGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpCiB7CisgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihvd25lci0+dW5saW5rZWRDb2RlQmxvY2soKS0+bV9sb2Nr
KTsKICAgICBBU1NFUlQoc2l0ZS5qaXRUeXBlKCkgIT0gRXhpdEZyb21Bbnl0aGluZyk7CiAKICAg
ICBDT0RFQkxPQ0tfTE9HX0VWRU5UKG93bmVyLCAiZnJlcXVlbnRFeGl0IiwgKHNpdGUpKTsKICAg
ICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUV4aXRQcm9maWxlKCkpCiAgICAgICAgIGRhdGFM
b2cocG9pbnRlckR1bXAob3duZXIpLCAiOiBBZGRpbmcgZXhpdCBzaXRlOiAiLCBzaXRlLCAiXG4i
KTsKKworICAgIEV4aXRQcm9maWxlJiBwcm9maWxlID0gb3duZXItPnVubGlua2VkQ29kZUJsb2Nr
KCktPmV4aXRQcm9maWxlKCk7CiAgICAgCiAgICAgLy8gSWYgd2UndmUgbmV2ZXIgc2VlbiBhbnkg
ZnJlcXVlbnQgZXhpdHMgdGhlbiBjcmVhdGUgdGhlIGxpc3QgYW5kIHB1dCB0aGlzIHNpdGUKICAg
ICAvLyBpbnRvIGl0LgotICAgIGlmICghbV9mcmVxdWVudEV4aXRTaXRlcykgewotICAgICAgICBt
X2ZyZXF1ZW50RXhpdFNpdGVzID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8RnJlcXVlbnRFeGl0
U2l0ZT4+KCk7Ci0gICAgICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmFwcGVuZChzaXRlKTsKKyAg
ICBpZiAoIXByb2ZpbGUubV9mcmVxdWVudEV4aXRTaXRlcykgeworICAgICAgICBwcm9maWxlLm1f
ZnJlcXVlbnRFeGl0U2l0ZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPFZlY3RvcjxGcmVxdWVudEV4aXRT
aXRlPj4oKTsKKyAgICAgICAgcHJvZmlsZS5tX2ZyZXF1ZW50RXhpdFNpdGVzLT5hcHBlbmQoc2l0
ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICAvLyBEb24ndCBhZGQg
aXQgaWYgaXQncyBhbHJlYWR5IHRoZXJlLiBUaGlzIGlzIE8obiksIGJ1dCB0aGF0J3MgT0ssIGJl
Y2F1c2Ugd2UKICAgICAvLyBrbm93IHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBwbGFjZXMgd2hl
cmUgY29kZSBleGl0cyB0ZW5kcyB0byBub3QgYmUgbGFyZ2UsCiAgICAgLy8gYW5kIHRoaXMgY29k
ZSBpcyBvbmx5IHVzZWQgd2hlbiByZWNvbXBpbGF0aW9uIGlzIHRyaWdnZXJlZC4KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmF0KGkpID09IHNpdGUpCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGUubV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKHByb2ZpbGUubV9mcmVxdWVudEV4aXRTaXRlcy0+YXQoaSkg
PT0gc2l0ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgbV9m
cmVxdWVudEV4aXRTaXRlcy0+YXBwZW5kKHNpdGUpOworICAgIHByb2ZpbGUubV9mcmVxdWVudEV4
aXRTaXRlcy0+YXBwZW5kKHNpdGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDAsOCAr
MTAzLDEwIEBAIGJvb2wgRXhpdFByb2ZpbGU6Omhhc0V4aXRTaXRlKGNvbnN0IENvbmMKIFF1ZXJ5
YWJsZUV4aXRQcm9maWxlOjpRdWVyeWFibGVFeGl0UHJvZmlsZSgpIHsgfQogUXVlcnlhYmxlRXhp
dFByb2ZpbGU6On5RdWVyeWFibGVFeGl0UHJvZmlsZSgpIHsgfQogCi12b2lkIFF1ZXJ5YWJsZUV4
aXRQcm9maWxlOjppbml0aWFsaXplKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEV4
aXRQcm9maWxlJiBwcm9maWxlKQordm9pZCBRdWVyeWFibGVFeGl0UHJvZmlsZTo6aW5pdGlhbGl6
ZShVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgIGNvbnN0IEV4aXRQcm9maWxlJiBwcm9m
aWxlID0gY29kZUJsb2NrLT5leGl0UHJvZmlsZSgpOwogICAgIGlmICghcHJvZmlsZS5tX2ZyZXF1
ZW50RXhpdFNpdGVzKQogICAgICAgICByZXR1cm47CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAkocmV2aXNpb24gMjI2ODI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAgLy8gYmUgY2FsbGVk
IGEgZml4ZWQgbnVtYmVyIG9mIHRpbWVzIHBlciByZWNvbXBpbGF0aW9uLiBSZWNvbXBpbGF0aW9u
IGlzCiAgICAgLy8gcmFyZSB0byBiZWdpbiB3aXRoLCBhbmQgaW1wbGllcyBkb2luZyBPKG4pIG9w
ZXJhdGlvbnMgb24gdGhlIENvZGVCbG9jawogICAgIC8vIGFueXdheS4KLSAgICBib29sIGFkZChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIG93bmVyLCBjb25zdCBGcmVxdWVu
dEV4aXRTaXRlJik7CisgICAgc3RhdGljIGJvb2wgYWRkKENvZGVCbG9jayosIGNvbnN0IEZyZXF1
ZW50RXhpdFNpdGUmKTsKICAgICAKICAgICAvLyBHZXQgdGhlIGZyZXF1ZW50IGV4aXQgc2l0ZXMg
Zm9yIGEgYnl0ZWNvZGUgaW5kZXguIFRoaXMgaXMgTyhuKSwgYW5kIGlzCiAgICAgLy8gbWVhbnQg
dG8gb25seSBiZSB1c2VkIGZyb20gZGVidWdnaW5nL3Byb2ZpbGluZyBjb2RlLgpAQCAtMTc1LDEw
ICsxNzUsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGhhc0V4aXRTaXRlKGxv
Y2tlciwgRnJlcXVlbnRFeGl0U2l0ZShraW5kKSk7CiAgICAgfQotICAgIGJvb2wgaGFzRXhpdFNp
dGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIEV4aXRLaW5kIGtpbmQpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaGFzRXhpdFNp
dGUobG9ja2VyLCBGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIGtpbmQpKTsKLSAgICB9
CisgICAgLy9ib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2Vy
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBFeGl0S2luZCBraW5kKSBjb25zdAorICAgIC8vewor
ICAgIC8vICAgIHJldHVybiBoYXNFeGl0U2l0ZShsb2NrZXIsIEZyZXF1ZW50RXhpdFNpdGUoYnl0
ZWNvZGVJbmRleCwga2luZCkpOworICAgIC8vfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgUXVlcnlhYmxlRXhpdFByb2ZpbGU7CkBAIC0xOTEsNyArMTkxLDcgQEAgcHVibGljOgog
ICAgIFF1ZXJ5YWJsZUV4aXRQcm9maWxlKCk7CiAgICAgflF1ZXJ5YWJsZUV4aXRQcm9maWxlKCk7
CiAgICAgCi0gICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNv
bnN0IEV4aXRQcm9maWxlJik7CisgICAgdm9pZCBpbml0aWFsaXplKFVubGlua2VkQ29kZUJsb2Nr
Kik7CiAKICAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIHNpdGUp
IGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMjI2ODI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUs
MTAgKzY1LDEyIEBAIGJvb2wgR2V0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCAKIH0K
IAogI2lmIEVOQUJMRShERkdfSklUKQotYm9vbCBHZXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorYm9vbCBHZXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0
ZShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Ci0g
ICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVu
dEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlKSkKLSAgICAgICAgfHwgcHJvZmlsZWRC
bG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJ
bmRleCwgQmFkQ29uc3RhbnRDYWNoZSkpOworICAgIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBwcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgIHJldHVybiBjb2RlQmxvY2st
Pmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgs
IEJhZENhY2hlKSkKKyAgICAgICAgfHwgY29kZUJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERG
Rzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDb25zdGFudENhY2hlKSk7CiB9
CiAjZW5kaWYKIApAQCAtMTE5LDEwICsxMjEsMTAgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIHJlc3VsdCA9IGNvbXB1
dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAogICAgICAgICBsb2NrZXIsIHBy
b2ZpbGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSksIHVpZCwKLSAg
ICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEobG9ja2VyLCBwcm9maWxl
ZEJsb2NrLCBieXRlY29kZUluZGV4KSk7CisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RXhpdFNpdGVEYXRhKHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKTsKICAgICAKICAgICBp
ZiAoIXJlc3VsdC50YWtlc1Nsb3dQYXRoKCkKLSAgICAgICAgJiYgaGFzRXhpdFNpdGUobG9ja2Vy
LCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KSkKKyAgICAgICAgJiYgaGFzRXhpdFNpdGUo
cHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkpCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3Rh
dHVzKHJlc3VsdC5tYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCwgdHJ1
ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShtYXApOwpAQCAtMTM5LDkgKzE0MSw5IEBAIEdl
dEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKIHsKICAgICBHZXRCeUlkU3Rh
dHVzIHJlc3VsdCA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0
U2l0ZUZlZWRiYWNrKAogICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1
aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSk7CisgICAgICAgIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCkpOwogCi0gICAgaWYgKCFyZXN1bHQudGFrZXNTbG93UGF0aCgpICYmIEdl
dEJ5SWRTdGF0dXM6Omhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KSkKKyAgICBpZiAoIXJlc3VsdC50YWtlc1Nsb3dQYXRoKCkgJiYgR2V0
QnlJZFN0YXR1czo6aGFzRXhpdFNpdGUocHJvZmlsZWRCbG9jaywgY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KSkKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMocmVzdWx0Lm1ha2VzQ2FsbHMo
KSA/IEdldEJ5SWRTdGF0dXM6Ok1ha2VzQ2FsbHMgOiBHZXRCeUlkU3RhdHVzOjpUYWtlc1Nsb3dQ
YXRoLCB0cnVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMzI4LDcgKzMzMCw3IEBAIEdl
dEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgewogICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwog
ICAgICAgICAgICAgZXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0
ZURhdGEoCi0gICAgICAgICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEdldEJ5SWRT
dGF0dXMgcmVzdWx0OwpAQCAtMzQxLDExICszNDMsOCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIGlmIChyZXN1bHQudGFrZXNTbG93UGF0aCgpKQog
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKLSAgICAgICAgewotICAgICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAg
ICAgICAgaWYgKGhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoLCB0cnVlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoaGFzRXhpdFNpdGUocHJv
ZmlsZWRCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSkKKyAgICAgICAgICAgIHJldHVy
biBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIHRydWUpOwogICAgICAgICAKICAgICAgICAg
aWYgKHJlc3VsdC5pc1NldCgpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkocmV2aXNp
b24gMjI2ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTksNyArMTE5LDcgQEAgcHVibGljOgog
ICAgIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBzdGF0aWMgYm9vbCBoYXNF
eGl0U2l0ZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KTsKKyAgICBzdGF0aWMgYm9vbCBoYXNFeGl0U2l0ZShDb2RlQmxvY2sqLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICNlbmRpZgogI2lmIEVOQUJMRShKSVQpCiAgICAgR2V0
QnlJZFN0YXR1cyhjb25zdCBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlJik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAyMjY4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSwxMSArNTUsMTIgQEAgYm9vbCBQdXRCeUlk
U3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IAogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCi1i
b29sIFB1dEJ5SWRTdGF0dXM6Omhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYg
bG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
Citib29sIFB1dEJ5SWRTdGF0dXM6Omhhc0V4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKLSAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+
aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwg
QmFkQ2FjaGUpKQotICAgICAgICB8fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIs
IERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDb25zdGFudENhY2hlKSk7
Ci0gICAgCisgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHByb2ZpbGVkQmxvY2st
PnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jayk7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9ja2Vy
LCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUpKQorICAgICAg
ICB8fCBjb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRl
KGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50Q2FjaGUpKTsKIH0KICNlbmRpZgogCkBAIC0xMTcs
MTMgKzExOCwxMyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAg
ICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwogICAgIFVOVVNFRF9QQVJBTSh1aWQpOwog
I2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChoYXNFeGl0U2l0ZShsb2NrZXIsIHByb2ZpbGVk
QmxvY2ssIGJ5dGVjb2RlSW5kZXgpKQorICAgIGlmIChoYXNFeGl0U2l0ZShwcm9maWxlZEJsb2Nr
LCBieXRlY29kZUluZGV4KSkKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CiAgICAgCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChD
b2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKTsKICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNv
bXB1dGVGb3JTdHViSW5mbygKICAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBzdHViSW5m
bywgdWlkLAotICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShsb2Nr
ZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkpOwog
ICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxl
ZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwogICAgIApAQCAtMTM5LDcgKzE0MCw3IEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKIHsKICAgICByZXR1cm4gY29t
cHV0ZUZvclN0dWJJbmZvKAogICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJbmZv
LCB1aWQsCi0gICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGxvY2tl
ciwgYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSk7CisgICAgICAgIENh
bGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGJhc2VsaW5lQmxvY2ssIGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCkpOwogfQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mbygKQEAgLTI2NywxMyArMjY4LDEzIEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAo
ZGZnQmxvY2spIHsKKyAgICAgICAgaWYgKGhhc0V4aXRTaXRlKGJhc2VsaW5lQmxvY2ssIGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBleGl0
U2l0ZURhdGE7CiAgICAgICAgIHsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoYmFzZWxpbmVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIGlmIChoYXNFeGl0U2l0ZShs
b2NrZXIsIGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAg
ICBleGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YSgKLSAg
ICAgICAgICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgICAgICAgICAgYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIFB1dEJ5SWRTdGF0dXMg
cmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5oCShyZXZpc2lvbiAyMjY4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk1LDcgKzk1
LDcgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBz
dGF0aWMgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICBzdGF0aWMgYm9vbCBoYXNFeGl0U2l0
ZShDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICNlbmRpZgogI2lmIEVOQUJM
RShKSVQpCiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAyMjY4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIyLDEyICs0
MjIsMTEgQEAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBVbmxpbmtlZENvZGVCbAogewogICAg
IFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSA9PSB0aGlzKTsK
IAotCiAgICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgaWYgKCFtX2xp
dmVuZXNzKSB7CiAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIGNoYW5jZSB0d28gY29tcGlsZXIg
dGhyZWFkcyByYWNlZCB0byB0aGUgc2xvdyBwYXRoLgotICAgICAgICAgICAgLy8gV2UgZGVmZW5k
IGFnYWluc3QgY29tcHV0aW5nIGxpdmVuZXNzIHR3aWNlLgorICAgICAgICAgICAgLy8gV2UgbXVz
dCBkZWZlbmQgYWdhaW5zdCBjb21wdXRpbmcgbGl2ZW5lc3MgdHdpY2UuCiAgICAgICAgICAgICBt
X2xpdmVuZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+KGNv
ZGVCbG9jayk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjI2ODI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVu
dGlvbnMuaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxl
LmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkhhbmRsZXJJ
bmZvLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgpAQCAtMzgzLDYgKzM4NCwyMSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBsaXZlbmVzc0FuYWx5c2lzU2xvdyhjb2RlQmxvY2spOwogICAg
IH0KIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KGxvY2tlciwgc2l0ZSk7CisgICAgfQorCisgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBERkc6
OkZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShsb2NrZXIsIHNp
dGUpOworICAgIH0KKworICAgIERGRzo6RXhpdFByb2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1
cm4gbV9leGl0UHJvZmlsZTsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENv
ZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYs
IERlYnVnZ2VyTW9kZSk7CiAgICAgflVubGlua2VkQ29kZUJsb2NrKCk7CkBAIC00MTksNiArNDM1
LDEwIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc291cmNlVVJMRGlyZWN0aXZlOwogICAgIFN0
cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CisjZW5kaWYKKwogICAgIHVuc2ln
bmVkIG1fdXNlc0V2YWwgOiAxOwogICAgIHVuc2lnbmVkIG1faXNTdHJpY3RNb2RlIDogMTsKICAg
ICB1bnNpZ25lZCBtX2lzQ29uc3RydWN0b3IgOiAxOwpAQCAtNDM2LDcgKzQ1Niw5IEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CiAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47
CiAKLSAgICBMb2NrIG1fbG9jazsKK3B1YmxpYzoKKyAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9j
azsKK3ByaXZhdGU6CiAgICAgVHJpU3RhdGUgbV9kaWRPcHRpbWl6ZTsKICAgICBTb3VyY2VQYXJz
ZU1vZGUgbV9wYXJzZU1vZGU7CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMjI2ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzOTEsOSArNjM5MSwxMCBAQCBCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgLCBtX2NhbGxlcihieXRlQ29kZVBh
cnNlci0+bV9pbmxpbmVTdGFja1RvcCkKIHsKICAgICB7CisgICAgICAgIG1fZXhpdFByb2ZpbGUu
aW5pdGlhbGl6ZShtX3Byb2ZpbGVkQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworCiAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwog
ICAgICAgICBtX2xhenlPcGVyYW5kcy5pbml0aWFsaXplKGxvY2tlciwgbV9wcm9maWxlZEJsb2Nr
LT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMoKSk7Ci0gICAgICAgIG1fZXhpdFByb2ZpbGUuaW5p
dGlhbGl6ZShsb2NrZXIsIHByb2ZpbGVkQmxvY2stPmV4aXRQcm9maWxlKCkpOwogICAgICAgICAK
ICAgICAgICAgLy8gV2UgZG8gdGhpcyB3aGlsZSBob2xkaW5nIHRoZSBsb2NrIGJlY2F1c2Ugd2Ug
d2FudCB0byBlbmNvdXJhZ2UgU3RydWN0dXJlU3R1YkluZm8ncwogICAgICAgICAvLyB0byBiZSBw
b3RlbnRpYWxseSBhZGRlZCB0byBvcGVyYXRpb25zIGFuZCBiZWNhdXNlIHRoZSBwcm9maWxlZCBi
bG9jayBjb3VsZCBiZSBpbiB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDIyNjgyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDEyICs0NjksMTIgQEAgcHVibGljOgogICAgIAog
ICAgIGJvb2wgaGFzR2xvYmFsRXhpdFNpdGUoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwg
RXhpdEtpbmQgZXhpdEtpbmQpCiAgICAgewotICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoY29kZU9yaWdpbiktPmhhc0V4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoZXhpdEtpbmQp
KTsKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT51bmxp
bmtlZENvZGVCbG9jaygpLT5oYXNFeGl0U2l0ZShGcmVxdWVudEV4aXRTaXRlKGV4aXRLaW5kKSk7
CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29kZU9yaWdpbiYgY29k
ZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQpCiAgICAgewotICAgICAgICByZXR1cm4gYmFzZWxp
bmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbiktPmhhc0V4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUo
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBleGl0S2luZCkpOworICAgICAgICByZXR1cm4gYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbiktPnVubGlua2VkQ29kZUJsb2NrKCktPmhhc0V4
aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBleGl0S2lu
ZCkpOwogICAgIH0KICAgICAKICAgICBib29sIGhhc0V4aXRTaXRlKE5vZGUqIG5vZGUsIEV4aXRL
aW5kIGV4aXRLaW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBo
YXNlLmNwcAkocmV2aXNpb24gMjI2ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMSUNNUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICYmICFtX2dyYXBoLm1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMt
PmRvbWluYXRlc0VxdWl2YWxlbnRseShkYXRhLnByZUhlYWRlciwgZnJvbUJsb2NrKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChhZGRzQmxpbmRTcGVjdWxhdGlvbgotICAgICAgICAgICAgJiYgbV9n
cmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihvcmlnaW5hbE9yaWdpbi5zZW1hbnRpYyktPmhhc0V4
aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoSG9pc3RpbmdGYWlsZWQpKSkgeworICAgICAgICAgICAg
JiYgbV9ncmFwaC5oYXNFeGl0U2l0ZShvcmlnaW5hbE9yaWdpbi5zZW1hbnRpYywgSG9pc3RpbmdG
YWlsZWQpKSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGRh
dGFMb2coCiAgICAgICAgICAgICAgICAgICAgICIgICAgTm90IGhvaXN0aW5nICIsIG5vZGUsICIg
YmVjYXVzZSBpdCBtYXkgZXhpdCBhbmQgdGhlIHByZS1oZWFkZXIgKCIsCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkocmV2aXNpb24gMjI2ODI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRp
bmdBc0ZyZXF1ZQogICAgICAgICAgICAgc2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUoSG9pc3RpbmdG
YWlsZWQsIGppdFR5cGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzaXRlID0gRnJlcXVl
bnRFeGl0U2l0ZShtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4LCBtX2tp
bmQsIGppdFR5cGUpOwotICAgICAgICBzb3VyY2VQcm9maWxlZENvZGVCbG9jay0+YWRkRnJlcXVl
bnRFeGl0U2l0ZShzaXRlKTsKKyAgICAgICAgRXhpdFByb2ZpbGU6OmFkZChzb3VyY2VQcm9maWxl
ZENvZGVCbG9jaywgc2l0ZSk7CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331236</attachid>
            <date>2018-01-12 14:41:26 -0800</date>
            <delta_ts>2018-01-12 16:36:42 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>28582</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI2OTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBA
CisyMDE4LTAxLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE1vdmUgRXhpdFByb2ZpbGUgdG8gVW5saW5rZWRDb2RlQmxvY2sgc28gaXQgY2FuIGJlIHNoYXJl
ZCBhbW9uZ3N0IENvZGVCbG9ja3MgYmFja2VkIGJ5IHRoZSBzYW1lIFVubGlua2VkQ29kZUJsb2Nr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE1NDUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGZvbGxvd3MgdGhlIHRoZW1lIG9mIHB1dHRpbmcgb3B0aW1pemF0aW9uIHByb2ZpbGluZyBp
bmZvcm1hdGlvbiBvbgorICAgICAgICBVbmxpbmtlZENvZGVCbG9jay4gVGhpcyBhbGxvd3MgdGhl
IHVubGlua2VkIGNvZGUgY2FjaGUgdG8gcmVtZW1iZXIgT1NSIGV4aXQgZGF0YS4KKyAgICAgICAg
VGhpcyBvZnRlbiBsZWFkcyB0byB0aGUgZmlyc3QgY29tcGlsZSBvZiBhIENvZGVCbG9jaywgYmFj
a2VkIGJ5IGFuIFVubGlua2VkQ29kZUJsb2NrCisgICAgICAgIHB1bGxlZCBmcm9tIHRoZSBjb2Rl
IGNhY2hlLCBtYWtpbmcgYmV0dGVyIGNvbXBpbGF0aW9uIGRlY2lzaW9ucywgdXN1YWxseQorICAg
ICAgICByZXN1bHRpbmcgaW4gZmV3ZXIgZXhpdHMsIGFuZCBmZXdlciByZWNvbXBpbGF0aW9ucy4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSAxJSBTcGVlZG9tZXRlciBwcm9ncmVzc2lvbiBp
biBteSB0ZXN0aW5nLgorCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OjpkdW1wUHJvZmlsZXNGb3JC
eXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZURGR1N0YXR1c2VzKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0
YXR1cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmFkZEZyZXF1ZW50RXhpdFNpdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Omhhc0V4aXRTaXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpleGl0UHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvREZHRXhp
dFByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkV4aXRQcm9maWxlOjphZGQpOgorICAg
ICAgICAoSlNDOjpERkc6OlF1ZXJ5YWJsZUV4aXRQcm9maWxlOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpERkc6OkV4aXRQ
cm9maWxlOjpoYXNFeGl0U2l0ZSBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6Omhhc0V4aXRTaXRlKToKKyAg
ICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6Okdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZSk6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaDoK
KyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdyk6CisgICAgICAgICogYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6Omhhc0V4aXRTaXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
Omhhc0V4aXRTaXRlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmV4aXRQcm9m
aWxlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
aGFzR2xvYmFsRXhpdFNpdGUpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpoYXNFeGl0U2l0
ZSk6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
TElDTVBoYXNlOjphdHRlbXB0SG9pc3QpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVx
dWVudEV4aXRTaXRlU2xvdyk6CisKIDIwMTgtMDEtMTIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUgY2FuIGJlIGluY29ycmVjdGx5IHN1
YnN1bWVkIGJ5IENoZWNrU3RydWN0dXJlT3JFbXB0eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCShyZXZpc2lvbiAyMjY4MjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBCeXRlY29kZUR1bXBlcjxDb2Rl
QmxvY2s+OjpkdW1wUHJvZgogICAgIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIFZlY3Rv
cjxERkc6OkZyZXF1ZW50RXhpdFNpdGU+IGV4aXRTaXRlcyA9IGJsb2NrKCktPmV4aXRQcm9maWxl
KCkuZXhpdFNpdGVzRm9yKGxvY2F0aW9uKTsKKyAgICBWZWN0b3I8REZHOjpGcmVxdWVudEV4aXRT
aXRlPiBleGl0U2l0ZXMgPSBibG9jaygpLT51bmxpbmtlZENvZGVCbG9jaygpLT5leGl0UHJvZmls
ZSgpLmV4aXRTaXRlc0Zvcihsb2NhdGlvbik7CiAgICAgaWYgKCFleGl0U2l0ZXMuaXNFbXB0eSgp
KSB7CiAgICAgICAgIG91dC5wcmludCgiICEhIGZyZXF1ZW50IGV4aXRzOiAiKTsKICAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCShyZXZpc2lvbiAyMjY4MjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTQsMTIgKzU0LDEyIEBAIENhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1cyhKU1Zh
bHVlIHYKICAgICBtX3ZhcmlhbnRzLmFwcGVuZChDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSkp
OwogfQogCi1DYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAgIFVOVVNFRF9QQVJB
TShwcm9maWxlZEJsb2NrKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CiAjaWYg
RU5BQkxFKERGR19KSVQpCi0gICAgaWYgKHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tl
ciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENlbGwpKSkgeworICAg
IGlmIChwcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5oYXNFeGl0U2l0ZShERkc6
OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2VsbCkpKSB7CiAgICAgICAgIC8v
IFdlIGNvdWxkIGZvcmNlIHRoaXMgdG8gYmUgYSBjbG9zdXJlIGNhbGwsIGJ1dCBpbnN0ZWFkIHdl
J2xsIGp1c3QgYXNzdW1lIHRoYXQgaXQKICAgICAgICAgLy8gdGFrZXMgc2xvdyBwYXRoLgogICAg
ICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwpAQCAtODcsNyArODcsNyBAQCBDYWxsTGlua1N0
YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2Rl
SW5kZXgpOwogICAgIFVOVVNFRF9QQVJBTShtYXApOwogI2lmIEVOQUJMRShERkdfSklUKQotICAg
IEV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGEgPSBjb21wdXRlRXhpdFNpdGVEYXRhKGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgRXhpdFNpdGVEYXRhIGV4aXRTaXRl
RGF0YSA9IGNvbXB1dGVFeGl0U2l0ZURhdGEocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7
CiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBtYXAuZ2V0KENvZGVPcmln
aW4oYnl0ZWNvZGVJbmRleCkpOwogICAgIGlmICghY2FsbExpbmtJbmZvKSB7CkBAIC0xMDIsMTcg
KzEwMiwxOCBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAjZW5k
aWYKIH0KIAotQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUV4aXRTaXRlRGF0YSgKLSAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0
YShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAg
ICAgRXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YTsKLSAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkK
KyAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0gcHJvZmlsZWRCbG9jay0+dW5saW5r
ZWRDb2RlQmxvY2soKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKTsKKwogICAgIGV4aXRTaXRlRGF0YS50YWtlc1Nsb3dQYXRoID0KLSAgICAgICAgcHJv
ZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0
ZWNvZGVJbmRleCwgQmFkVHlwZSkpCi0gICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRT
aXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZEV4ZWN1
dGFibGUpKTsKKyAgICAgICAgY29kZUJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJl
cXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRUeXBlKSkKKyAgICAgICAgfHwgY29kZUJs
b2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUlu
ZGV4LCBCYWRFeGVjdXRhYmxlKSk7CiAgICAgZXhpdFNpdGVEYXRhLmJhZEZ1bmN0aW9uID0KLSAg
ICAgICAgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhp
dFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2VsbCkpOworICAgICAgICBjb2RlQmxvY2stPmhhc0V4
aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENl
bGwpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxvY2tlcik7CiAgICAgVU5VU0VEX1BBUkFN
KHByb2ZpbGVkQmxvY2spOwpAQCAtMjc1LDEyICsyNzYsNyBAQCB2b2lkIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlREZHU3RhdHVzZXMoCiAgICAgICAgIC8vIElubGluZUNhbGxGcmFtZXMuCiAgICAg
ICAgIENvZGVCbG9jayogY3VycmVudEJhc2VsaW5lID0KICAgICAgICAgICAgIGJhc2VsaW5lQ29k
ZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVD
b2RlQmxvY2spOwotICAgICAgICBFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhOwotICAgICAgICB7
Ci0gICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGN1cnJlbnRCYXNlbGluZS0+
bV9sb2NrKTsKLSAgICAgICAgICAgIGV4aXRTaXRlRGF0YSA9IGNvbXB1dGVFeGl0U2l0ZURhdGEo
Ci0gICAgICAgICAgICAgICAgbG9ja2VyLCBjdXJyZW50QmFzZWxpbmUsIGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KKyAgICAgICAgRXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0
YSA9IGNvbXB1dGVFeGl0U2l0ZURhdGEoY3VycmVudEJhc2VsaW5lLCBjb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgewogICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihkZmdDb2RlQmxvY2stPm1fbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMjI2ODI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCB0YWtl
c1Nsb3dQYXRoIHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBiYWRGdW5jdGlvbiB7IGZhbHNlIH07
CiAgICAgfTsKLSAgICBzdGF0aWMgRXhpdFNpdGVEYXRhIGNvbXB1dGVFeGl0U2l0ZURhdGEoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7CisgICAgc3RhdGljIEV4aXRTaXRlRGF0YSBjb21wdXRlRXhpdFNpdGVEYXRhKENvZGVCbG9j
ayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAg
Ly8gQ29tcHV0ZXMgdGhlIHN0YXR1cyBhc3N1bWluZyB0aGF0IHdlIG5ldmVyIHRvb2sgc2xvdyBw
YXRoIGFuZCBuZXZlciBwcmV2aW91c2x5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyMjY4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYg
QEAKICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRK
U0xvY2suaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKLSNpbmNsdWRlICJERkdFeGl0UHJvZmls
ZS5oIgogI2luY2x1ZGUgIkRpcmVjdEV2YWxDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJFdmFsRXhl
Y3V0YWJsZS5oIgogI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKQEAgLTUxMiwyNSArNTEx
LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29kZU9yaWdpbnMoKVtpbmRleC5iaXRzKCld
OwogICAgIH0KIAotICAgIGJvb2wgYWRkRnJlcXVlbnRFeGl0U2l0ZShjb25zdCBERkc6OkZyZXF1
ZW50RXhpdFNpdGUmIHNpdGUpCi0gICAgewotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoaml0VHlwZSgpKSk7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
bV9sb2NrKTsKLSAgICAgICAgcmV0dXJuIG1fZXhpdFByb2ZpbGUuYWRkKGxvY2tlciwgdGhpcywg
c2l0ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImIGxvY2tlciwgY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobG9ja2VyLCBz
aXRlKTsKLSAgICB9Ci0gICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBERkc6OkZyZXF1ZW50RXhp
dFNpdGUmIHNpdGUpIGNvbnN0Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7Ci0gICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOwot
ICAgIH0KLQotICAgIERGRzo6RXhpdFByb2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1cm4gbV9l
eGl0UHJvZmlsZTsgfQotCiAgICAgQ29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9s
ZGVyJiBsYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzOwpAQCAtMTAxOSw3ICs5OTksNiBAQCBwcml2YXRlOgog
I2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gbm9uLURGRyBj
b2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9maWxlZCBjb2RlIGJsb2NrCiAgICAgLy8g
Zm9yIERGRyBjb2RlIGJsb2Nrcy4KLSAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7
CiAgICAgQ29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyIG1fbGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVzOwogI2VuZGlmCiAgICAgUmVmQ291bnRlZEFycmF5PFZhbHVlUHJvZmls
ZT4gbV9hcmd1bWVudFZhbHVlUHJvZmlsZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAJKHJldmlzaW9uIDIyNjgyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDMyICs0MSwzNSBAQCB2b2lkIEZyZXF1ZW50RXhpdFNpdGU6OmR1bXAo
UHJpbnRTdHJlYW0mCiBFeGl0UHJvZmlsZTo6RXhpdFByb2ZpbGUoKSB7IH0KIEV4aXRQcm9maWxl
Ojp+RXhpdFByb2ZpbGUoKSB7IH0KIAotYm9vbCBFeGl0UHJvZmlsZTo6YWRkKGNvbnN0IENvbmN1
cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogb3duZXIsIGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUm
IHNpdGUpCitib29sIEV4aXRQcm9maWxlOjphZGQoQ29kZUJsb2NrKiBvd25lciwgY29uc3QgRnJl
cXVlbnRFeGl0U2l0ZSYgc2l0ZSkKIHsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG93
bmVyLT51bmxpbmtlZENvZGVCbG9jaygpLT5tX2xvY2spOwogICAgIEFTU0VSVChzaXRlLmppdFR5
cGUoKSAhPSBFeGl0RnJvbUFueXRoaW5nKTsKIAogICAgIENPREVCTE9DS19MT0dfRVZFTlQob3du
ZXIsICJmcmVxdWVudEV4aXQiLCAoc2l0ZSkpOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlRXhpdFByb2ZpbGUoKSkKICAgICAgICAgZGF0YUxvZyhwb2ludGVyRHVtcChvd25lciksICI6
IEFkZGluZyBleGl0IHNpdGU6ICIsIHNpdGUsICJcbiIpOworCisgICAgRXhpdFByb2ZpbGUmIHBy
b2ZpbGUgPSBvd25lci0+dW5saW5rZWRDb2RlQmxvY2soKS0+ZXhpdFByb2ZpbGUoKTsKICAgICAK
ICAgICAvLyBJZiB3ZSd2ZSBuZXZlciBzZWVuIGFueSBmcmVxdWVudCBleGl0cyB0aGVuIGNyZWF0
ZSB0aGUgbGlzdCBhbmQgcHV0IHRoaXMgc2l0ZQogICAgIC8vIGludG8gaXQuCi0gICAgaWYgKCFt
X2ZyZXF1ZW50RXhpdFNpdGVzKSB7Ci0gICAgICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMgPSBzdGQ6
Om1ha2VfdW5pcXVlPFZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPj4oKTsKLSAgICAgICAgbV9mcmVx
dWVudEV4aXRTaXRlcy0+YXBwZW5kKHNpdGUpOworICAgIGlmICghcHJvZmlsZS5tX2ZyZXF1ZW50
RXhpdFNpdGVzKSB7CisgICAgICAgIHByb2ZpbGUubV9mcmVxdWVudEV4aXRTaXRlcyA9IHN0ZDo6
bWFrZV91bmlxdWU8VmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+PigpOworICAgICAgICBwcm9maWxl
Lm1fZnJlcXVlbnRFeGl0U2l0ZXMtPmFwcGVuZChzaXRlKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIAogICAgIC8vIERvbid0IGFkZCBpdCBpZiBpdCdzIGFscmVhZHkgdGhlcmUu
IFRoaXMgaXMgTyhuKSwgYnV0IHRoYXQncyBPSywgYmVjYXVzZSB3ZQogICAgIC8vIGtub3cgdGhh
dCB0aGUgdG90YWwgbnVtYmVyIG9mIHBsYWNlcyB3aGVyZSBjb2RlIGV4aXRzIHRlbmRzIHRvIG5v
dCBiZSBsYXJnZSwKICAgICAvLyBhbmQgdGhpcyBjb2RlIGlzIG9ubHkgdXNlZCB3aGVuIHJlY29t
cGlsYXRpb24gaXMgdHJpZ2dlcmVkLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Zy
ZXF1ZW50RXhpdFNpdGVzLT5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9mcmVxdWVudEV4
aXRTaXRlcy0+YXQoaSkgPT0gc2l0ZSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJv
ZmlsZS5tX2ZyZXF1ZW50RXhpdFNpdGVzLT5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJv
ZmlsZS5tX2ZyZXF1ZW50RXhpdFNpdGVzLT5hdChpKSA9PSBzaXRlKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hcHBlbmQo
c2l0ZSk7CisgICAgcHJvZmlsZS5tX2ZyZXF1ZW50RXhpdFNpdGVzLT5hcHBlbmQoc2l0ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwMCw4ICsxMDMsMTAgQEAgYm9vbCBFeGl0UHJvZmls
ZTo6aGFzRXhpdFNpdGUoY29uc3QgQ29uYwogUXVlcnlhYmxlRXhpdFByb2ZpbGU6OlF1ZXJ5YWJs
ZUV4aXRQcm9maWxlKCkgeyB9CiBRdWVyeWFibGVFeGl0UHJvZmlsZTo6flF1ZXJ5YWJsZUV4aXRQ
cm9maWxlKCkgeyB9CiAKLXZvaWQgUXVlcnlhYmxlRXhpdFByb2ZpbGU6OmluaXRpYWxpemUoY29u
c3QgQ29uY3VycmVudEpTTG9ja2VyJiwgY29uc3QgRXhpdFByb2ZpbGUmIHByb2ZpbGUpCit2b2lk
IFF1ZXJ5YWJsZUV4aXRQcm9maWxlOjppbml0aWFsaXplKFVubGlua2VkQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGVCbG9jaykKIHsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHVubGlua2Vk
Q29kZUJsb2NrLT5tX2xvY2spOworICAgIGNvbnN0IEV4aXRQcm9maWxlJiBwcm9maWxlID0gdW5s
aW5rZWRDb2RlQmxvY2stPmV4aXRQcm9maWxlKCk7CiAgICAgaWYgKCFwcm9maWxlLm1fZnJlcXVl
bnRFeGl0U2l0ZXMpCiAgICAgICAgIHJldHVybjsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCShyZXZpc2lvbiAyMjY4MjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBAIHB1YmxpYzoKICAgICAvLyBiZSBjYWxsZWQg
YSBmaXhlZCBudW1iZXIgb2YgdGltZXMgcGVyIHJlY29tcGlsYXRpb24uIFJlY29tcGlsYXRpb24g
aXMKICAgICAvLyByYXJlIHRvIGJlZ2luIHdpdGgsIGFuZCBpbXBsaWVzIGRvaW5nIE8obikgb3Bl
cmF0aW9ucyBvbiB0aGUgQ29kZUJsb2NrCiAgICAgLy8gYW55d2F5LgotICAgIGJvb2wgYWRkKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogb3duZXIsIGNvbnN0IEZyZXF1ZW50
RXhpdFNpdGUmKTsKKyAgICBzdGF0aWMgYm9vbCBhZGQoQ29kZUJsb2NrKiwgY29uc3QgRnJlcXVl
bnRFeGl0U2l0ZSYpOwogICAgIAogICAgIC8vIEdldCB0aGUgZnJlcXVlbnQgZXhpdCBzaXRlcyBm
b3IgYSBieXRlY29kZSBpbmRleC4gVGhpcyBpcyBPKG4pLCBhbmQgaXMKICAgICAvLyBtZWFudCB0
byBvbmx5IGJlIHVzZWQgZnJvbSBkZWJ1Z2dpbmcvcHJvZmlsaW5nIGNvZGUuCkBAIC0xNzUsMTAg
KzE3NSw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShsb2Nr
ZXIsIEZyZXF1ZW50RXhpdFNpdGUoa2luZCkpOwogICAgIH0KLSAgICBib29sIGhhc0V4aXRTaXRl
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9ja2VyLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
LCBFeGl0S2luZCBraW5kKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0V4aXRTaXRl
KGxvY2tlciwgRnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBraW5kKSk7Ci0gICAgfQog
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUXVlcnlhYmxlRXhpdFByb2ZpbGU7CkBA
IC0xOTEsNyArMTg3LDcgQEAgcHVibGljOgogICAgIFF1ZXJ5YWJsZUV4aXRQcm9maWxlKCk7CiAg
ICAgflF1ZXJ5YWJsZUV4aXRQcm9maWxlKCk7CiAgICAgCi0gICAgdm9pZCBpbml0aWFsaXplKGNv
bnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIGNvbnN0IEV4aXRQcm9maWxlJik7CisgICAgdm9pZCBp
bml0aWFsaXplKFVubGlua2VkQ29kZUJsb2NrKik7CiAKICAgICBib29sIGhhc0V4aXRTaXRlKGNv
bnN0IEZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24g
MjI2ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjUsMTAgKzY1LDEyIEBAIGJvb2wgR2V0QnlJZFN0YXR1
czo6YXBwZW5kVmFyaWFudChjb25zdCAKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQotYm9vbCBH
ZXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tl
ciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorYm9v
bCBHZXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPmhhc0V4
aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENh
Y2hlKSkKLSAgICAgICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6
OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ29uc3RhbnRDYWNoZSkpOworICAg
IFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IHByb2ZpbGVkQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCk7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih1bmxpbmtl
ZENvZGVCbG9jay0+bV9sb2NrKTsKKyAgICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2stPmhhc0V4
aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENh
Y2hlKSkKKyAgICAgICAgfHwgdW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwg
REZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50Q2FjaGUpKTsK
IH0KICNlbmRpZgogCkBAIC0xMTksMTAgKzEyMSwxMCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgcmVzdWx0ID0gY29t
cHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgIGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKSwgdWlkLAot
ICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShsb2NrZXIsIHByb2Zp
bGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVFeGl0U2l0ZURhdGEocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkpOwogICAgIAogICAg
IGlmICghcmVzdWx0LnRha2VzU2xvd1BhdGgoKQotICAgICAgICAmJiBoYXNFeGl0U2l0ZShsb2Nr
ZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKQorICAgICAgICAmJiBoYXNFeGl0U2l0
ZShwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KSkKICAgICAgICAgcmV0dXJuIEdldEJ5SWRT
dGF0dXMocmVzdWx0Lm1ha2VzQ2FsbHMoKSA/IE1ha2VzQ2FsbHMgOiBUYWtlc1Nsb3dQYXRoLCB0
cnVlKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG1hcCk7CkBAIC0xMzksOSArMTQxLDkgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogewogICAgIEdldEJ5SWRT
dGF0dXMgcmVzdWx0ID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4
aXRTaXRlRmVlZGJhY2soCiAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8s
IHVpZCwKLSAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEobG9ja2Vy
LCBwcm9maWxlZEJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEocHJvZmlsZWRCbG9jaywgY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KSk7CiAKLSAgICBpZiAoIXJlc3VsdC50YWtlc1Nsb3dQYXRoKCkgJiYg
R2V0QnlJZFN0YXR1czo6aGFzRXhpdFNpdGUobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpKQorICAgIGlmICghcmVzdWx0LnRha2VzU2xvd1BhdGgoKSAmJiBH
ZXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShwcm9maWxlZEJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhyZXN1bHQubWFrZXNDYWxs
cygpID8gR2V0QnlJZFN0YXR1czo6TWFrZXNDYWxscyA6IEdldEJ5SWRTdGF0dXM6OlRha2VzU2xv
d1BhdGgsIHRydWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0zMjgsNyArMzMwLDcgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICB7CiAgICAg
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7
CiAgICAgICAgICAgICBleGl0U2l0ZURhdGEgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRT
aXRlRGF0YSgKLSAgICAgICAgICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgR2V0QnlJ
ZFN0YXR1cyByZXN1bHQ7CkBAIC0zNDEsMTEgKzM0Myw4IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgaWYgKHJlc3VsdC50YWtlc1Nsb3dQYXRoKCkp
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIAotICAgICAgICB7Ci0gICAgICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgICAgICBpZiAoaGFzRXhpdFNpdGUobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgsIHRydWUpOwotICAgICAgICB9CisgICAgICAgIGlmIChoYXNFeGl0U2l0ZShw
cm9maWxlZEJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKQorICAgICAgICAgICAgcmV0
dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAocmVzdWx0LmlzU2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZp
c2lvbiAyMjY4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOSw3ICsxMTksNyBAQCBwdWJsaWM6
CiAgICAgCiBwcml2YXRlOgogI2lmIEVOQUJMRShERkdfSklUKQotICAgIHN0YXRpYyBib29sIGhh
c0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayosIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpOworICAgIHN0YXRpYyBib29sIGhhc0V4aXRTaXRlKENvZGVCbG9jayos
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogI2VuZGlmCiAjaWYgRU5BQkxFKEpJVCkKICAgICBH
ZXRCeUlkU3RhdHVzKGNvbnN0IE1vZHVsZU5hbWVzcGFjZUFjY2Vzc0Nhc2UmKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJl
dmlzaW9uIDIyNjgyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDExICs1NSwxMiBAQCBib29sIFB1dEJ5
SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgCiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
LWJvb2wgUHV0QnlJZFN0YXR1czo6aGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpTTG9ja2Vy
JiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKK2Jvb2wgUHV0QnlJZFN0YXR1czo6aGFzRXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewotICAgIHJldHVybiBwcm9maWxlZEJsb2Nr
LT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4
LCBCYWRDYWNoZSkpCi0gICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tl
ciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50Q2FjaGUp
KTsKLSAgICAKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBwcm9m
aWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIodW5saW5rZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAgcmV0dXJuIHVubGlua2VkQ29k
ZUJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29k
ZUluZGV4LCBCYWRDYWNoZSkpCisgICAgICAgIHx8IHVubGlua2VkQ29kZUJsb2NrLT5oYXNFeGl0
U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDb25z
dGFudENhY2hlKSk7CiB9CiAjZW5kaWYKIApAQCAtMTE3LDEzICsxMTgsMTMgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIFVOVVNFRF9QQVJBTShieXRlY29k
ZUluZGV4KTsKICAgICBVTlVTRURfUEFSQU0odWlkKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICBpZiAoaGFzRXhpdFNpdGUobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KSkK
KyAgICBpZiAoaGFzRXhpdFNpdGUocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkpCiAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAogICAgIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4
KSk7CiAgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8oCiAgICAg
ICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIHVpZCwKLSAgICAgICAgQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRl
Y29kZUluZGV4KSk7CisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRh
KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwg
dWlkKTsKICAgICAKQEAgLTEzOSw3ICsxNDAsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiB7CiAgICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKICAgICAg
ICAgbG9ja2VyLCBiYXNlbGluZUJsb2NrLCBzdHViSW5mbywgdWlkLAotICAgICAgICBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCkpOworICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4
aXRTaXRlRGF0YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKTsKIH0K
IAogUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCkBAIC0y
NjcsMTMgKzI2OCwxMyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
CiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKGRmZ0Jsb2NrKSB7CisgICAgICAgIGlm
IChoYXNFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKQor
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAg
IENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhOwogICAgICAgICB7CiAg
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGJhc2VsaW5lQmxvY2stPm1fbG9j
ayk7Ci0gICAgICAgICAgICBpZiAoaGFzRXhpdFNpdGUobG9ja2VyLCBiYXNlbGluZUJsb2NrLCBj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKQotICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgZXhpdFNpdGVEYXRhID0gQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoCi0gICAgICAgICAgICAgICAgbG9ja2VyLCBi
YXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAg
IGJhc2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMjI2
ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICAKIHBy
aXZhdGU6CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgc3RhdGljIGJvb2wgaGFzRXhpdFNpdGUo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCk7CisgICAgc3RhdGljIGJvb2wgaGFzRXhpdFNpdGUoQ29kZUJsb2NrKiwgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUKQogICAgIHN0YXRpYyBQdXRC
eUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjI2
ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyMiwxMiArNDIyLDExIEBAIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcyYgVW5saW5rZWRDb2RlQmwKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxv
Y2stPnVubGlua2VkQ29kZUJsb2NrKCkgPT0gdGhpcyk7CiAKLQogICAgIHsKLSAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGlmICghbV9saXZlbmVzcykgewogICAgICAgICAgICAg
Ly8gVGhlcmUgaXMgYSBjaGFuY2UgdHdvIGNvbXBpbGVyIHRocmVhZHMgcmFjZWQgdG8gdGhlIHNs
b3cgcGF0aC4KLSAgICAgICAgICAgIC8vIFdlIGRlZmVuZCBhZ2FpbnN0IGNvbXB1dGluZyBsaXZl
bmVzcyB0d2ljZS4KKyAgICAgICAgICAgIC8vIEdyYWJiaW5nIHRoZSBsb2NrIGFib3ZlIGRlZmVu
ZHMgYWdhaW5zdCBjb21wdXRpbmcgbGl2ZW5lc3MgdHdpY2UuCiAgICAgICAgICAgICBtX2xpdmVu
ZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+KGNvZGVCbG9j
ayk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjI2ODI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMu
aCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCiAj
aW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgi
CiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgpAQCAtMzgzLDYgKzM4NCwyMSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBsaXZlbmVzc0FuYWx5c2lzU2xvdyhjb2RlQmxvY2spOwogICAgIH0KIAor
I2lmIEVOQUJMRShERkdfSklUKQorICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJiBsb2NrZXIsIGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKGxvY2tl
ciwgc2l0ZSk7CisgICAgfQorCisgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBERkc6OkZyZXF1
ZW50RXhpdFNpdGUmIHNpdGUpCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShsb2NrZXIsIHNpdGUpOwor
ICAgIH0KKworICAgIERGRzo6RXhpdFByb2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1cm4gbV9l
eGl0UHJvZmlsZTsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9j
ayhWTSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIERlYnVn
Z2VyTW9kZSk7CiAgICAgflVubGlua2VkQ29kZUJsb2NrKCk7CkBAIC00MTksNiArNDM1LDEwIEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc291cmNlVVJMRGlyZWN0aXZlOwogICAgIFN0cmluZyBt
X3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBE
Rkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CisjZW5kaWYKKwogICAgIHVuc2lnbmVkIG1f
dXNlc0V2YWwgOiAxOwogICAgIHVuc2lnbmVkIG1faXNTdHJpY3RNb2RlIDogMTsKICAgICB1bnNp
Z25lZCBtX2lzQ29uc3RydWN0b3IgOiAxOwpAQCAtNDM2LDcgKzQ1Niw5IEBAIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbV9saW5lQ291bnQ7CiAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAKLSAg
ICBMb2NrIG1fbG9jazsKK3B1YmxpYzoKKyAgICBDb25jdXJyZW50SlNMb2NrIG1fbG9jazsKK3By
aXZhdGU6CiAgICAgVHJpU3RhdGUgbV9kaWRPcHRpbWl6ZTsKICAgICBTb3VyY2VQYXJzZU1vZGUg
bV9wYXJzZU1vZGU7CiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MjI2ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzOTEsOSArNjM5MSwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6
SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgLCBtX2NhbGxlcihieXRlQ29kZVBhcnNlci0+
bV9pbmxpbmVTdGFja1RvcCkKIHsKICAgICB7CisgICAgICAgIG1fZXhpdFByb2ZpbGUuaW5pdGlh
bGl6ZShtX3Byb2ZpbGVkQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkpOworCiAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAg
ICBtX2xhenlPcGVyYW5kcy5pbml0aWFsaXplKGxvY2tlciwgbV9wcm9maWxlZEJsb2NrLT5sYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZXMoKSk7Ci0gICAgICAgIG1fZXhpdFByb2ZpbGUuaW5pdGlhbGl6
ZShsb2NrZXIsIHByb2ZpbGVkQmxvY2stPmV4aXRQcm9maWxlKCkpOwogICAgICAgICAKICAgICAg
ICAgLy8gV2UgZG8gdGhpcyB3aGlsZSBob2xkaW5nIHRoZSBsb2NrIGJlY2F1c2Ugd2Ugd2FudCB0
byBlbmNvdXJhZ2UgU3RydWN0dXJlU3R1YkluZm8ncwogICAgICAgICAvLyB0byBiZSBwb3RlbnRp
YWxseSBhZGRlZCB0byBvcGVyYXRpb25zIGFuZCBiZWNhdXNlIHRoZSBwcm9maWxlZCBibG9jayBj
b3VsZCBiZSBpbiB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDIyNjgyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtNDY5LDEyICs0NjksMTIgQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgaGFzR2xvYmFsRXhpdFNpdGUoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgRXhpdEtp
bmQgZXhpdEtpbmQpCiAgICAgewotICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Io
Y29kZU9yaWdpbiktPmhhc0V4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoZXhpdEtpbmQpKTsKKyAg
ICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT51bmxpbmtlZENv
ZGVCbG9jaygpLT5oYXNFeGl0U2l0ZShGcmVxdWVudEV4aXRTaXRlKGV4aXRLaW5kKSk7CiAgICAg
fQogICAgIAogICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdp
biwgRXhpdEtpbmQgZXhpdEtpbmQpCiAgICAgewotICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2Rl
QmxvY2tGb3IoY29kZU9yaWdpbiktPmhhc0V4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4LCBleGl0S2luZCkpOworICAgICAgICByZXR1cm4gYmFzZWxpbmVD
b2RlQmxvY2tGb3IoY29kZU9yaWdpbiktPnVubGlua2VkQ29kZUJsb2NrKCktPmhhc0V4aXRTaXRl
KEZyZXF1ZW50RXhpdFNpdGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBleGl0S2luZCkpOwog
ICAgIH0KICAgICAKICAgICBib29sIGhhc0V4aXRTaXRlKE5vZGUqIG5vZGUsIEV4aXRLaW5kIGV4
aXRLaW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNw
cAkocmV2aXNpb24gMjI2ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNN
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICYmICFtX2dyYXBoLm1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMtPmRvbWlu
YXRlc0VxdWl2YWxlbnRseShkYXRhLnByZUhlYWRlciwgZnJvbUJsb2NrKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChhZGRzQmxpbmRTcGVjdWxhdGlvbgotICAgICAgICAgICAgJiYgbV9ncmFwaC5i
YXNlbGluZUNvZGVCbG9ja0ZvcihvcmlnaW5hbE9yaWdpbi5zZW1hbnRpYyktPmhhc0V4aXRTaXRl
KEZyZXF1ZW50RXhpdFNpdGUoSG9pc3RpbmdGYWlsZWQpKSkgeworICAgICAgICAgICAgJiYgbV9n
cmFwaC5oYXNFeGl0U2l0ZShvcmlnaW5hbE9yaWdpbi5zZW1hbnRpYywgSG9pc3RpbmdGYWlsZWQp
KSB7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgIGRhdGFMb2co
CiAgICAgICAgICAgICAgICAgICAgICIgICAgTm90IGhvaXN0aW5nICIsIG5vZGUsICIgYmVjYXVz
ZSBpdCBtYXkgZXhpdCBhbmQgdGhlIHByZS1oZWFkZXIgKCIsCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkocmV2aXNpb24gMjI2ODI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0Zy
ZXF1ZQogICAgICAgICAgICAgc2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUoSG9pc3RpbmdGYWlsZWQs
IGppdFR5cGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzaXRlID0gRnJlcXVlbnRFeGl0
U2l0ZShtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4LCBtX2tpbmQsIGpp
dFR5cGUpOwotICAgICAgICBzb3VyY2VQcm9maWxlZENvZGVCbG9jay0+YWRkRnJlcXVlbnRFeGl0
U2l0ZShzaXRlKTsKKyAgICAgICAgRXhpdFByb2ZpbGU6OmFkZChzb3VyY2VQcm9maWxlZENvZGVC
bG9jaywgc2l0ZSk7CiAgICAgfQogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>