<?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>185329</bug_id>
          
          <creation_ts>2018-05-04 15:43:17 -0700</creation_ts>
          <short_desc>Make a compact version of VariableEnvironment that UnlinkedFunctionExecutable stores and hash-cons these compact environments as we make them</short_desc>
          <delta_ts>2018-05-07 21:18:32 -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>joepeck</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>1420917</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-04 15:43:17 -0700</bug_when>
    <thetext>....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421063</commentid>
    <comment_count>1</comment_count>
      <attachid>339653</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-05 11:29:03 -0700</bug_when>
    <thetext>Created attachment 339653
WIP

seems to work, just need to clean up a few things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421065</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-05 11:31:13 -0700</bug_when>
    <thetext>Attachment 339653 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/VM.cpp:145:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 7 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>1421069</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-05 12:32:23 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #1)
&gt; Created attachment 339653 [details]
&gt; WIP
&gt; 
&gt; seems to work, just need to clean up a few things.

Seems to be a 50-60MB improvement on the workload I am testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421497</commentid>
    <comment_count>4</comment_count>
      <attachid>339765</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-07 16:35:22 -0700</bug_when>
    <thetext>Created attachment 339765
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421501</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-07 16:38:33 -0700</bug_when>
    <thetext>Attachment 339765 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/VM.cpp:145:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 7 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>1421505</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-07 16:41:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/39961536&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421524</commentid>
    <comment_count>7</comment_count>
      <attachid>339765</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-05-07 17:03:27 -0700</bug_when>
    <thetext>Comment on attachment 339765
patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        use space to represent and UnlinkedFunctionExecutable&apos;s parent TDZ variables.

*an*

&gt; Source/JavaScriptCore/parser/VariableEnvironment.cpp:101
&gt; +    m_isEverythingCaptured = env.isEverythingCaptured();

Change this to a member initializer list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421546</commentid>
    <comment_count>8</comment_count>
      <attachid>339765</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-05-07 17:25:22 -0700</bug_when>
    <thetext>Comment on attachment 339765
patch

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

&gt; Source/JavaScriptCore/parser/VariableEnvironment.h:205
&gt; +        WTF_MAKE_NONCOPYABLE(Handle); // If we wanted to make this copyable, we&apos;d need to do a hashtable lookup and bump the refcount.

/refcount/refCount/?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421595</commentid>
    <comment_count>9</comment_count>
      <attachid>339788</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-07 19:24:21 -0700</bug_when>
    <thetext>Created attachment 339788
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421618</commentid>
    <comment_count>10</comment_count>
      <attachid>339788</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-05-07 21:18:30 -0700</bug_when>
    <thetext>Comment on attachment 339788
patch for landing

Clearing flags on attachment: 339788

Committed r231477: &lt;https://trac.webkit.org/changeset/231477&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421619</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-05-07 21:18:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339653</attachid>
            <date>2018-05-05 11:29:03 -0700</date>
            <delta_ts>2018-05-07 16:35:22 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>13862</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjMxMzU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsOCBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogZ2VuZXJhCiAKICAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1
bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUs
IEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT51c2VzRXZhbCgpLCBmdW5jdGlvbi0+aXNTdHJpY3RN
b2RlKCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCwgZnVuY3Rpb25LaW5kID09IFVubGlua2Vk
QnVpbHRpbkZ1bmN0aW9uLCBleGVjdXRhYmxlLT5jb25zdHJ1Y3RvcktpbmQoKSwgc2NyaXB0TW9k
ZSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIHBhcnNlTW9kZSwgZXhlY3V0YWJsZS0+ZGVy
aXZlZENvbnRleHRUeXBlKCksIGZhbHNlLCBpc0NsYXNzQ29udGV4dCwgRXZhbENvbnRleHRUeXBl
OjpGdW5jdGlvbkV2YWxDb250ZXh0KSwgZGVidWdnZXJNb2RlKTsKIAotICAgIGVycm9yID0gQnl0
ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKHZtLCBmdW5jdGlvbi5nZXQoKSwgc291cmNlLCByZXN1
bHQsIGRlYnVnZ2VyTW9kZSwgZXhlY3V0YWJsZS0+cGFyZW50U2NvcGVURFpWYXJpYWJsZXMoKSk7
CisgICAgVmFyaWFibGVFbnZpcm9ubWVudCBwYXJlbnRTY29wZVREWlZhcmlhYmxlcyA9IGV4ZWN1
dGFibGUtPnBhcmVudFNjb3BlVERaVmFyaWFibGVzKCk7CisgICAgZXJyb3IgPSBCeXRlY29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGUodm0sIGZ1bmN0aW9uLmdldCgpLCBzb3VyY2UsIHJlc3VsdCwgZGVi
dWdnZXJNb2RlLCAmcGFyZW50U2NvcGVURFpWYXJpYWJsZXMpOwogCiAgICAgaWYgKGVycm9yLmlz
VmFsaWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDQsNiArMTA1LDcgQEAgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuYwogICAgICwgbV9pbmZlcnJlZE5h
bWUobm9kZS0+aW5mZXJyZWROYW1lKCkpCiAgICAgLCBtX3BhcmVudFNvdXJjZU92ZXJyaWRlKFdU
Rk1vdmUocGFyZW50U291cmNlT3ZlcnJpZGUpKQogICAgICwgbV9jbGFzc1NvdXJjZShub2RlLT5j
bGFzc1NvdXJjZSgpKQorICAgICwgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcyh2bS0+bV9jb21w
YWN0VmFyaWFibGVNYXAtPmdldChwYXJlbnRTY29wZVREWlZhcmlhYmxlcykpCiB7CiAgICAgLy8g
TWFrZSBzdXJlIHRoZXNlIGJpdGZpZWxkcyBhcmUgYWRlcXVhdGVseSB3aWRlLgogICAgIEFTU0VS
VChtX2NvbnN0cnVjdEFiaWxpdHkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvbnN0cnVjdEFi
aWxpdHkpKTsKQEAgLTExMiw4ICsxMTQsNiBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
VW5saW5rZWRGdW5jCiAgICAgQVNTRVJUKG1fc2NyaXB0TW9kZSA9PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc2NyaXB0TW9kZSkpOwogICAgIEFTU0VSVChtX3N1cGVyQmluZGluZyA9PSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obm9kZS0+c3VwZXJCaW5kaW5nKCkpKTsKICAgICBBU1NFUlQobV9kZXJp
dmVkQ29udGV4dFR5cGUgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlcml2ZWRDb250ZXh0VHlw
ZSkpOwotCi0gICAgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcy5zd2FwKHBhcmVudFNjb3BlVERa
VmFyaWFibGVzKTsKIH0KIAogdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjMx
MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAg
ICAgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q29uc3RydWN0QWJpbGl0eT4obV9jb25zdHJ1Y3RBYmlsaXR5KTsgfQogICAgIEpT
UGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAgICAgYm9vbCBpc0NsYXNzQ29u
c3RydWN0b3JGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0cnVjdG9yS2luZCgpICE9IENv
bnN0cnVjdG9yS2luZDo6Tm9uZTsgfQotICAgIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBh
cmVudFNjb3BlVERaVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gJm1fcGFyZW50U2NvcGVURFpW
YXJpYWJsZXM7IH0KKyAgICBWYXJpYWJsZUVudmlyb25tZW50IHBhcmVudFNjb3BlVERaVmFyaWFi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlcy5lbnZpcm9ubWVu
dCgpLnRvVmFyaWFibGVFbnZpcm9ubWVudCgpOyB9CiAgICAgCiAgICAgYm9vbCBpc0Fycm93RnVu
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBpc0Fycm93RnVuY3Rpb25QYXJzZU1vZGUocGFyc2VNb2Rl
KCkpOyB9CiAKQEAgLTE3Niw3ICsxNzYsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3NvdXJj
ZVVSTERpcmVjdGl2ZTsKICAgICBTdHJpbmcgbV9zb3VyY2VNYXBwaW5nVVJMRGlyZWN0aXZlOwog
Ci0gICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzOworICAg
IENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7CiAK
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52
aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
VmFyaWFibGVFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDIzMTM1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk2LDQgKzk2LDgzIEBAIHZvaWQgVmFyaWFibGVFbnZpcm9ubWVudDo6bWFya1ZhcmlhYmxl
QXMKICAgICBmaW5kUmVzdWx0LT52YWx1ZS5zZXRJc0V4cG9ydGVkKCk7CiB9CiAKK0NvbXBhY3RW
YXJpYWJsZUVudmlyb25tZW50OjpDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudChjb25zdCBWYXJp
YWJsZUVudmlyb25tZW50JiBlbnYpCit7CisgICAgbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZCA9IGVu
di5pc0V2ZXJ5dGhpbmdDYXB0dXJlZCgpOworICAgIG1fdmFyaWFibGVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoZW52LnNpemUoKSk7CisgICAgbV92YXJpYWJsZU1ldGFkYXRhLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoZW52LnNpemUoKSk7CisgICAgbV9oYXNoID0gMDsKKyAgICBmb3IgKGF1dG8m
IHBhaXIgOiBlbnYpIHsKKyAgICAgICAgbV92YXJpYWJsZXMuYXBwZW5kKHBhaXIua2V5KTsKKyAg
ICAgICAgbV9oYXNoIF49IHBhaXIua2V5LT5oYXNoKCk7CisgICAgICAgIG1fdmFyaWFibGVNZXRh
ZGF0YS5hcHBlbmQocGFpci52YWx1ZSk7CisgICAgICAgIG1faGFzaCArPSBwYWlyLnZhbHVlLmJp
dHMoKTsKKyAgICB9CisKKyAgICAvLyBPT1BTOiBzb3J0IHRoaXMgdmVjdG9yLgorCisgICAgaWYg
KG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQpCisgICAgICAgIG1faGFzaCAqPSAyOworfQorCitib29s
IENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50OjpvcGVyYXRvcj09KGNvbnN0IENvbXBhY3RWYXJp
YWJsZUVudmlyb25tZW50JiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9pc0V2ZXJ5dGhpbmdD
YXB0dXJlZCAhPSBvdGhlci5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1fdmFyaWFibGVzICE9IG90aGVyLm1fdmFyaWFibGVzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgLy8gT09QUzogYWRkID09IGZvciBWYXJpYWJsZUVudmlyb25t
ZW50RW50cnkKKyAgICBpZiAobV92YXJpYWJsZU1ldGFkYXRhLnNpemUoKSAhPSBvdGhlci5tX3Zh
cmlhYmxlTWV0YWRhdGEuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFyaWFibGVNZXRhZGF0YS5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAobV92YXJpYWJsZU1ldGFkYXRhW2ldLmJpdHMoKSAhPSBvdGhlci5tX3ZhcmlhYmxl
TWV0YWRhdGFbaV0uYml0cygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworVmFyaWFibGVFbnZpcm9ubWVudCBDb21wYWN0VmFyaWFibGVF
bnZpcm9ubWVudDo6dG9WYXJpYWJsZUVudmlyb25tZW50KCkgY29uc3QKK3sKKyAgICBWYXJpYWJs
ZUVudmlyb25tZW50IHJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFi
bGVzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQuYWRkKG1fdmFyaWFibGVzW2ldKS5pdGVy
YXRvci0+dmFsdWUgPSBtX3ZhcmlhYmxlTWV0YWRhdGFbaV07CisKKyAgICBpZiAobV9pc0V2ZXJ5
dGhpbmdDYXB0dXJlZCkKKyAgICAgICAgcmVzdWx0Lm1hcmtBbGxWYXJpYWJsZXNBc0NhcHR1cmVk
KCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRs
ZSBDb21wYWN0VmFyaWFibGVNYXA6OmdldChjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnYp
Cit7CisgICAgYXV0byogZW52aXJvbm1lbnQgPSBuZXcgQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1l
bnQoZW52KTsKKyAgICBDb21wYWN0VmFyaWFibGVNYXBLZXkga2V5IHsgKmVudmlyb25tZW50IH07
CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX21hcC5hZGQoa2V5LCAxKTsKKyAgICBpZiAoYWRkUmVz
dWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRs
ZSgqZW52aXJvbm1lbnQsICp0aGlzKTsKKworICAgIGRlbGV0ZSBlbnZpcm9ubWVudDsKKyAgICAr
K2FkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgcmV0dXJuIENvbXBhY3RWYXJpYWJsZU1h
cDo6SGFuZGxlKGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5LmVudmlyb25tZW50KCksICp0aGlzKTsK
K30KKworQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGU6On5IYW5kbGUoKQoreworICAgIGlmICgh
bV9tYXApIHsKKyAgICAgICAgQVNTRVJUKCFtX2Vudmlyb25tZW50KTsKKyAgICAgICAgLy8gVGhp
cyBoYXBwZW5zIGlmIHdlIHdlcmUgbW92ZWQuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2Vudmlyb25tZW50KTsKKyAgICBhdXRvIGl0ZXIgPSBtX21hcC0+
bV9tYXAuZmluZChDb21wYWN0VmFyaWFibGVNYXBLZXkoKm1fZW52aXJvbm1lbnQpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChpdGVyICE9IG1fbWFwLT5tX21hcC5lbmQoKSk7CisgICAgLS1pdGVyLT52
YWx1ZTsKKyAgICBpZiAoIWl0ZXItPnZhbHVlKSB7CisgICAgICAgIENvbXBhY3RWYXJpYWJsZUVu
dmlyb25tZW50KiBlbnZpcm9ubWVudCA9ICZpdGVyLT5rZXkuZW52aXJvbm1lbnQoKTsKKyAgICAg
ICAgbV9tYXAtPm1fbWFwLnJlbW92ZShpdGVyKTsKKyAgICAgICAgZmFzdEZyZWUoZW52aXJvbm1l
bnQpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24g
MjMxMzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25t
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDggQEAgcHVibGljOgogCiAgICAgQUxX
QVlTX0lOTElORSB2b2lkIGNsZWFySXNWYXIoKSB7IG1fYml0cyAmPSB+SXNWYXI7IH0KIAorICAg
IHVpbnQxNl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7IH0KKwogcHJpdmF0ZToKICAg
ICBlbnVtIFRyYWl0cyA6IHVpbnQxNl90IHsKICAgICAgICAgSXNDYXB0dXJlZCA9IDEgPDwgMCwK
QEAgLTgwLDE0ICs4MiwxMSBAQCBjbGFzcyBWYXJpYWJsZUVudmlyb25tZW50IHsKIHByaXZhdGU6
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIFZhcmlhYmxl
RW52aXJvbm1lbnRFbnRyeSwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVu
aXF1ZWRTdHJpbmdJbXBsPj4sIFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeUhhc2hUcmFpdHM+IE1h
cDsKIHB1YmxpYzoKLSAgICBWYXJpYWJsZUVudmlyb25tZW50KCkKLSAgICB7IH0KLSAgICBWYXJp
YWJsZUVudmlyb25tZW50KFZhcmlhYmxlRW52aXJvbm1lbnQmJiBvdGhlcikKLSAgICAgICAgOiBt
X21hcChXVEZNb3ZlKG90aGVyLm1fbWFwKSkKLSAgICAgICAgLCBtX2lzRXZlcnl0aGluZ0NhcHR1
cmVkKG90aGVyLm1faXNFdmVyeXRoaW5nQ2FwdHVyZWQpCi0gICAgeyB9Ci0gICAgVmFyaWFibGVF
bnZpcm9ubWVudChjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JikgPSBkZWZhdWx0OworICAgIFZh
cmlhYmxlRW52aXJvbm1lbnQoKSA9IGRlZmF1bHQ7CisgICAgVmFyaWFibGVFbnZpcm9ubWVudChW
YXJpYWJsZUVudmlyb25tZW50JiYgb3RoZXIpID0gZGVmYXVsdDsKKyAgICBWYXJpYWJsZUVudmly
b25tZW50KGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmKSA9IGRlZmF1bHQ7IC8vIE9PUFM6IHRy
eSB0byByZW1vdmUgdGhpcyBpZiBwb3NzaWJsZS4KICAgICBWYXJpYWJsZUVudmlyb25tZW50JiBv
cGVyYXRvcj0oY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYpID0gZGVmYXVsdDsKKyAgICBWYXJp
YWJsZUVudmlyb25tZW50JiBvcGVyYXRvcj0oVmFyaWFibGVFbnZpcm9ubWVudCYmKSA9IGRlZmF1
bHQ7CiAKICAgICBBTFdBWVNfSU5MSU5FIE1hcDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBt
X21hcC5iZWdpbigpOyB9CiAgICAgQUxXQVlTX0lOTElORSBNYXA6Oml0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIG1fbWFwLmVuZCgpOyB9CkBAIC0xMDksOSArMTA4LDExOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBtYXJrVmFyaWFibGVBc0ltcG9ydGVkKGNvbnN0IFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1w
bD4mIGlkZW50aWZpZXIpOwogICAgIHZvaWQgbWFya1ZhcmlhYmxlQXNFeHBvcnRlZChjb25zdCBS
ZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+JiBpZGVudGlmaWVyKTsKIAorICAgIGJvb2wgaXNFdmVy
eXRoaW5nQ2FwdHVyZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkOyB9
CisKIHByaXZhdGU6CiAgICAgTWFwIG1fbWFwOwogICAgIGJvb2wgbV9pc0V2ZXJ5dGhpbmdDYXB0
dXJlZCB7IGZhbHNlIH07CiB9OwogCitjbGFzcyBDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQpOworcHVibGljOgorICAgIENvbXBhY3RWYXJpYWJs
ZUVudmlyb25tZW50KGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmKTsKKyAgICBWYXJpYWJsZUVu
dmlyb25tZW50IHRvVmFyaWFibGVFbnZpcm9ubWVudCgpIGNvbnN0OworCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50JikgY29uc3Q7CisgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQorCitwcml2YXRlOgorICAgIFZl
Y3RvcjxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+PiBtX3ZhcmlhYmxlczsKKyAgICBWZWN0b3I8
VmFyaWFibGVFbnZpcm9ubWVudEVudHJ5PiBtX3ZhcmlhYmxlTWV0YWRhdGE7CisgICAgdW5zaWdu
ZWQgbV9oYXNoOworICAgIGJvb2wgbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKK307CisKK3N0cnVj
dCBDb21wYWN0VmFyaWFibGVNYXBLZXkgeworICAgIENvbXBhY3RWYXJpYWJsZU1hcEtleShDb21w
YWN0VmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQpCisgICAgICAgIDogbV9lbnZpcm9u
bWVudCgmZW52aXJvbm1lbnQpCisgICAgeyB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBDb21wYWN0VmFyaWFibGVNYXBLZXkmIGtleSkgeyByZXR1cm4ga2V5Lm1fZW52aXJvbm1l
bnQtPmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENvbXBhY3RWYXJpYWJs
ZU1hcEtleSYgYSwgY29uc3QgQ29tcGFjdFZhcmlhYmxlTWFwS2V5JiBiKSB7IHJldHVybiAqYS5t
X2Vudmlyb25tZW50ID09ICpiLm1fZW52aXJvbm1lbnQ7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIHN0YXRpYyB2b2lk
IG1ha2VEZWxldGVkVmFsdWUoQ29tcGFjdFZhcmlhYmxlTWFwS2V5JiBoYW5kbGUpCisgICAgewor
ICAgICAgICBoYW5kbGUubV9lbnZpcm9ubWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29tcGFjdFZh
cmlhYmxlRW52aXJvbm1lbnQqPigxKTsKKyAgICB9CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lbnZpcm9ubWVudCA9PSBy
ZWludGVycHJldF9jYXN0PENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50Kj4oMSk7CisgICAgfQor
ICAgIGJvb2wgaXNIYXNoVGFibGVFbXB0eVZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhbV9lbnZpcm9ubWVudDsKKyAgICB9CisKKyAgICBDb21wYWN0VmFyaWFibGVFbnZpcm9u
bWVudCYgZW52aXJvbm1lbnQoKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNIYXNoVGFi
bGVFbXB0eVZhbHVlKCkpOworICAgICAgICByZXR1cm4gKm1fZW52aXJvbm1lbnQ7CisgICAgfQor
Citwcml2YXRlOgorICAgIENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50KiBtX2Vudmlyb25tZW50
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxKU0M6OkNvbXBhY3RWYXJpYWJsZU1hcEtleT4geworICAgIHVzaW5nIEhhc2ggPSBK
U0M6OkNvbXBhY3RWYXJpYWJsZU1hcEtleTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8SlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXk+IDogR2VuZXJpY0hhc2hUcmFpdHM8SlND
OjpDb21wYWN0VmFyaWFibGVNYXBLZXk+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZh
bHVlSXNaZXJvID0gdHJ1ZTsKKworICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1
ZShKU0M6OkNvbXBhY3RWYXJpYWJsZU1hcEtleSYga2V5KSB7IEpTQzo6Q29tcGFjdFZhcmlhYmxl
TWFwS2V5OjptYWtlRGVsZXRlZFZhbHVlKGtleSk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0
ZWRWYWx1ZShKU0M6OkNvbXBhY3RWYXJpYWJsZU1hcEtleSBrZXkpIHsgcmV0dXJuIGtleS5pc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJc0Vt
cHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKEpT
Qzo6Q29tcGFjdFZhcmlhYmxlTWFwS2V5IGtleSkgeyByZXR1cm4ga2V5LmlzSGFzaFRhYmxlRW1w
dHlWYWx1ZSgpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIENvbXBhY3RWYXJpYWJsZU1hcCA6IHB1YmxpYyBSZWZDb3VudGVkPENvbXBhY3RW
YXJpYWJsZU1hcD4geworcHVibGljOgorICAgIGNsYXNzIEhhbmRsZSB7CisgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEhhbmRsZSk7IC8vIElmIHdlIHdhbnRlZCB0aGlzLCB3ZSdkIG5lZWQg
dG8gZG8gYSBoYXNodGFibGUgbG9va3VwIGFuZCBidW1wIHRoZSByZWZjb3VudC4KKyAgICBwdWJs
aWM6CisgICAgICAgIEhhbmRsZShDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1l
bnQsIENvbXBhY3RWYXJpYWJsZU1hcCYgbWFwKQorICAgICAgICAgICAgOiBtX2Vudmlyb25tZW50
KCZlbnZpcm9ubWVudCkKKyAgICAgICAgICAgICwgbV9tYXAoJm1hcCkKKyAgICAgICAgeyB9Cisg
ICAgICAgIEhhbmRsZShIYW5kbGUmJiBvdGhlcikKKyAgICAgICAgICAgIDogbV9lbnZpcm9ubWVu
dChvdGhlci5tX2Vudmlyb25tZW50KQorICAgICAgICAgICAgLCBtX21hcChXVEZNb3ZlKG90aGVy
Lm1fbWFwKSkKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFtX2Vudmly
b25tZW50ID09ICEhbV9tYXApOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW90aGVyLm1f
bWFwKTsKKyAgICAgICAgICAgIG90aGVyLm1fZW52aXJvbm1lbnQgPSBudWxscHRyOworICAgICAg
ICB9CisgICAgICAgIH5IYW5kbGUoKTsKKworICAgICAgICBjb25zdCBDb21wYWN0VmFyaWFibGVF
bnZpcm9ubWVudCYgZW52aXJvbm1lbnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gKm1fZW52aXJvbm1lbnQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50KiBtX2Vudmlyb25tZW50OworICAgICAgICBSZWZQ
dHI8Q29tcGFjdFZhcmlhYmxlTWFwPiBtX21hcDsKKyAgICB9OworcHVibGljOgorICAgIEhhbmRs
ZSBnZXQoY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYpOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBIYW5kbGU7CisgICAgSGFzaE1hcDxDb21wYWN0VmFyaWFibGVNYXBLZXksIHVuc2ln
bmVkPiBtX21hcDsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjMxMzU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDcgQEAK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIK
ICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZhcmlhYmxlRW52aXJv
bm1lbnQuaCIKICNpbmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKICNpbmNsdWRlICJWTUluc3BlY3Rv
ci5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlzdC5oIgpAQCAtMzMzLDYgKzMzNCw3IEBAIFZNOjpW
TShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGludGVycHJldGVyKDAp
CiAgICAgLCBlbnRyeVNjb3BlKDApCiAgICAgLCBtX3JlZ0V4cENhY2hlKG5ldyBSZWdFeHBDYWNo
ZSh0aGlzKSkKKyAgICAsIG1fY29tcGFjdFZhcmlhYmxlTWFwKGFkb3B0UmVmKCoobmV3IENvbXBh
Y3RWYXJpYWJsZU1hcCkpKQogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICAsIG1fcnRU
cmFjZUxpc3QobmV3IFJUVHJhY2VMaXN0KCkpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjMxMzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIGNsYXNzIEJ5
dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2Fj
aGU7CiBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKK2NsYXNzIENvbXBhY3RWYXJpYWJsZU1hcDsK
IGNsYXNzIEN1c3RvbUdldHRlclNldHRlcjsKIGNsYXNzIERPTUF0dHJpYnV0ZUdldHRlclNldHRl
cjsKIGNsYXNzIEV4ZWNTdGF0ZTsKQEAgLTcwOSw2ICs3MTAsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZWxlYXNlUmVnRXhwUGF0dGVybkNvbnRleEJ1ZmZlcigpOwogI2VuZGlmCiAKKyAgICBSZWY8
Q29tcGFjdFZhcmlhYmxlTWFwPiBtX2NvbXBhY3RWYXJpYWJsZU1hcDsKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxIYXNPd25Qcm9wZXJ0eUNhY2hlPiBtX2hhc093blByb3BlcnR5Q2FjaGU7CiAgICAg
QUxXQVlTX0lOTElORSBIYXNPd25Qcm9wZXJ0eUNhY2hlKiBoYXNPd25Qcm9wZXJ0eUNhY2hlKCkg
eyByZXR1cm4gbV9oYXNPd25Qcm9wZXJ0eUNhY2hlLmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakMubW0JKHJldmlzaW9uIDIzMTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyMjAsNyArMzIyMCwxMCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnNldFNob3VsZERpc2FibGVTbGVlcChib29sIGZsYWcpCiB7CiAjaWYg
UExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikgJiYgIUVOQUJMRShNSU5J
TUFMX1NJTVVMQVRPUikKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAgICBb
bV9hdlBsYXllciBfc2V0UHJldmVudHNTbGVlcER1cmluZ1ZpZGVvUGxheWJhY2s6ZmxhZ107Cisj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShmbGFn
KTsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339765</attachid>
            <date>2018-05-07 16:35:22 -0700</date>
            <delta_ts>2018-05-07 19:24:21 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>17455</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxNDYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDE4LTA1LTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgYSBjb21wYWN0IHZlcnNpb24gb2YgVmFyaWFibGVFbnZpcm9ubWVudCB0aGF0IFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlIHN0b3JlcyBhbmQgaGFzaC1jb25zIHRoZXNlIGNvbXBhY3Qg
ZW52aXJvbm1lbnRzIGFzIHdlIG1ha2UgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MzI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSSB3YXMgbWFkZSBhd2FyZSBvZiBhIG1lbW9yeSBnb29mIGlu
c2lkZSBvZiBKU0Mgd2hlcmUgd2Ugd291bGQgaW5lZmZpY2llbnRseQorICAgICAgICB1c2Ugc3Bh
Y2UgdG8gcmVwcmVzZW50IGFuZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSdzIHBhcmVudCBU
RFogdmFyaWFibGVzLgorICAgICAgICAKKyAgICAgICAgV2UgZGlkIHR3byB0aGluZ3MgYmFkbHk6
CisgICAgICAgIDEuIFdlIHVzZWQgYSBIYXNoTWFwIGluc3RlYWQgb2YgYSBWZWN0b3IgdG8gcmVw
cmVzZW50IHRoZSBlbnZpcm9ubWVudC4gSGF2aW5nCisgICAgICAgIGEgSGFzaE1hcCBpcyB1c2Vm
dWwgd2hlbiBsb29raW5nIHRoaW5ncyB1cCB3aGVuIGdlbmVyYXRpbmcgYnl0ZWNvZGUsIGJ1dCBp
dCdzCisgICAgICAgIHNwYWNlIGluZWZmaWNpZW50LiBCZWNhdXNlIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlcyBsaXZlIGEgbG9uZyB0aW1lIGJlY2F1c2UKKyAgICAgICAgb2YgdGhlIGNvZGUg
Y2FjaGUsIHdlIHNob3VsZCBoYXZlIHRoZW0gc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiBlZmZpY2ll
bnRseQorICAgICAgICBpbnNpZGUgb2YgYSBWZWN0b3IuCisgICAgICAgIAorICAgICAgICAyLiBX
ZSBkaWRuJ3QgaGFzaC1jb25zIHRoZXNlIGVudmlyb25tZW50cyB0b2dldGhlci4gSWYgeW91IHRo
aW5rIGFib3V0IGhvdworICAgICAgICBzb21lIHByb2dyYW1zIGFyZSBzdHJ1Y3R1cmVkLCBoYXNo
LWNvbnNpbmcgdGhlc2UgdG9nZXRoZXIgaXMgaHVnZWx5IHByb2ZpdGFibGUuCisgICAgICAgIENv
bnNpZGVyIHNvbWUgY29kZSBsaWtlIHRoaXM6CisgICAgICAgIGBgYAorICAgICAgICBjb25zdC9s
ZXQgVl8xID0gLi4uOworICAgICAgICBjb25zdC9sZXQgVl8yID0gLi4uOworICAgICAgICAuLi4K
KyAgICAgICAgY29uc3QvbGV0IFZfbiA9IC4uLjsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9u
IGZfMSgpIHsgLi4uIH07CisgICAgICAgIGZ1bmN0aW9uIGZfMigpIHsgLi4uIH07CisgICAgICAg
IC4uLgorICAgICAgICBmdW5jdGlvbiBmX24oKSB7IC4uLiB9OworICAgICAgICBgYGAKKyAgICAg
ICAgCisgICAgICAgIEVhY2ggZl9pIHdvdWxkIHN0b3JlIGFuIGlkZW50aWNhbCBoYXNoIG1hcCBm
b3IgaXRzIHBhcmVudCBURFogdmFyaWFibGVzCisgICAgICAgIGNvbnNpc3Rpbmcgb2Yge1ZfMSwg
Li4uLCBWX259LiBUaGlzIHdhcyBpbmNyZWRpYmx5IGR1bWIuIFdpdGggaGFzaC1jb25zaW5nLAor
ICAgICAgICBlYWNoIGZfaSBqdXN0IGhvbGRzIG9udG8gYSByZWZlcmVuY2UgdG8gdGhlIGVudmly
b25tZW50LgorICAgICAgICAKKyAgICAgICAgSSBiZW5jaG1hcmtlZCB0aGlzIGNoYW5nZSBhZ2Fp
bnN0IGFuIGFwcCB0aGF0IG1hZGUgaGVhdnkgdXNlIG9mIHRoZQorICAgICAgICBhYm92ZSBjb2Rl
IHBhdHRlcm4gYW5kIGl0IHJlZHVjZWQgaXRzIHBlYWsgbWVtb3J5IGZvb3RwcmludCBmcm9tIH4y
MjBNQgorICAgICAgICB0byB+MTYwTUIuCisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
OjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUuaDoKKyAgICAgICAgKiBwYXJzZXIvVmFyaWFibGVFbnZpcm9u
bWVudC5jcHA6CisgICAgICAgIChKU0M6OkNvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50OjpDb21w
YWN0VmFyaWFibGVFbnZpcm9ubWVudCk6CisgICAgICAgIChKU0M6OkNvbXBhY3RWYXJpYWJsZUVu
dmlyb25tZW50OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29tcGFjdFZhcmlh
YmxlRW52aXJvbm1lbnQ6OnRvVmFyaWFibGVFbnZpcm9ubWVudCBjb25zdCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RWYXJpYWJsZU1hcDo6Z2V0KToKKyAgICAgICAgKEpTQzo6Q29tcGFjdFZhcmlh
YmxlTWFwOjpIYW5kbGU6On5IYW5kbGUpOgorICAgICAgICAqIHBhcnNlci9WYXJpYWJsZUVudmly
b25tZW50Lmg6CisgICAgICAgIChKU0M6OlZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeTo6Yml0cyBj
b25zdCk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeTo6b3BlcmF0b3I9
PSBjb25zdCk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlRW52aXJvbm1lbnQ6OmlzRXZlcnl0aGlu
Z0NhcHR1cmVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1l
bnQ6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXk6OkNv
bXBhY3RWYXJpYWJsZU1hcEtleSk6CisgICAgICAgIChKU0M6OkNvbXBhY3RWYXJpYWJsZU1hcEtl
eTo6aGFzaCk6CisgICAgICAgIChKU0M6OkNvbXBhY3RWYXJpYWJsZU1hcEtleTo6ZXF1YWwpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXk6Om1ha2VEZWxldGVkVmFsdWUpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29tcGFjdFZhcmlhYmxlTWFwS2V5Ojppc0hhc2hU
YWJsZUVtcHR5VmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpDb21wYWN0VmFyaWFibGVNYXBL
ZXk6OmVudmlyb25tZW50KToKKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxKU0M6OkNvbXBhY3RW
YXJpYWJsZU1hcEtleT46OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6Okhh
c2hUcmFpdHM8SlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXk+Ojppc0RlbGV0ZWRWYWx1ZSk6Cisg
ICAgICAgIChXVEY6Okhhc2hUcmFpdHM8SlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXk+Ojppc0Vt
cHR5VmFsdWUpOgorICAgICAgICAoSlNDOjpDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZTo6SGFu
ZGxlKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGU6OmVudmlyb25t
ZW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVFbnZpcm9ubWVudDo6VmFyaWFibGVF
bnZpcm9ubWVudCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAg
IChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE4LTA1LTA3ICBB
bmR5IFZhbldhZ29uZXIgIDxhbmR5QHZhbndhZ29uZXIuZmFtaWx5PgogCiAgICAgICAgIFJlbW92
ZSBkZWZ1bmN0IGVtYWlsIGFkZHJlc3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gMjMxMzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsOCBA
QCBzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhCiAKICAgICBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQgPSBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpj
cmVhdGUoJnZtLCBGdW5jdGlvbkNvZGUsIEV4ZWN1dGFibGVJbmZvKGZ1bmN0aW9uLT51c2VzRXZh
bCgpLCBmdW5jdGlvbi0+aXNTdHJpY3RNb2RlKCksIGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCwg
ZnVuY3Rpb25LaW5kID09IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uLCBleGVjdXRhYmxlLT5jb25z
dHJ1Y3RvcktpbmQoKSwgc2NyaXB0TW9kZSwgZXhlY3V0YWJsZS0+c3VwZXJCaW5kaW5nKCksIHBh
cnNlTW9kZSwgZXhlY3V0YWJsZS0+ZGVyaXZlZENvbnRleHRUeXBlKCksIGZhbHNlLCBpc0NsYXNz
Q29udGV4dCwgRXZhbENvbnRleHRUeXBlOjpGdW5jdGlvbkV2YWxDb250ZXh0KSwgZGVidWdnZXJN
b2RlKTsKIAotICAgIGVycm9yID0gQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKHZtLCBmdW5j
dGlvbi5nZXQoKSwgc291cmNlLCByZXN1bHQsIGRlYnVnZ2VyTW9kZSwgZXhlY3V0YWJsZS0+cGFy
ZW50U2NvcGVURFpWYXJpYWJsZXMoKSk7CisgICAgVmFyaWFibGVFbnZpcm9ubWVudCBwYXJlbnRT
Y29wZVREWlZhcmlhYmxlcyA9IGV4ZWN1dGFibGUtPnBhcmVudFNjb3BlVERaVmFyaWFibGVzKCk7
CisgICAgZXJyb3IgPSBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUodm0sIGZ1bmN0aW9uLmdl
dCgpLCBzb3VyY2UsIHJlc3VsdCwgZGVidWdnZXJNb2RlLCAmcGFyZW50U2NvcGVURFpWYXJpYWJs
ZXMpOwogCiAgICAgaWYgKGVycm9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC0xMDQsNiArMTA1LDcgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2Vk
RnVuYwogICAgICwgbV9pbmZlcnJlZE5hbWUobm9kZS0+aW5mZXJyZWROYW1lKCkpCiAgICAgLCBt
X3BhcmVudFNvdXJjZU92ZXJyaWRlKFdURk1vdmUocGFyZW50U291cmNlT3ZlcnJpZGUpKQogICAg
ICwgbV9jbGFzc1NvdXJjZShub2RlLT5jbGFzc1NvdXJjZSgpKQorICAgICwgbV9wYXJlbnRTY29w
ZVREWlZhcmlhYmxlcyh2bS0+bV9jb21wYWN0VmFyaWFibGVNYXAtPmdldChwYXJlbnRTY29wZVRE
WlZhcmlhYmxlcykpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoZXNlIGJpdGZpZWxkcyBhcmUgYWRl
cXVhdGVseSB3aWRlLgogICAgIEFTU0VSVChtX2NvbnN0cnVjdEFiaWxpdHkgPT0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNvbnN0cnVjdEFiaWxpdHkpKTsKQEAgLTExMiw4ICsxMTQsNiBAQCBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jCiAgICAgQVNTRVJUKG1fc2NyaXB0
TW9kZSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2NyaXB0TW9kZSkpOwogICAgIEFTU0VSVCht
X3N1cGVyQmluZGluZyA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm9kZS0+c3VwZXJCaW5kaW5n
KCkpKTsKICAgICBBU1NFUlQobV9kZXJpdmVkQ29udGV4dFR5cGUgPT0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGRlcml2ZWRDb250ZXh0VHlwZSkpOwotCi0gICAgbV9wYXJlbnRTY29wZVREWlZhcmlh
Ymxlcy5zd2FwKHBhcmVudFNjb3BlVERaVmFyaWFibGVzKTsKIH0KIAogdm9pZCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUuaAkocmV2aXNpb24gMjMxMzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Nyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgQ29uc3RydWN0QWJpbGl0eSBjb25zdHJ1Y3RBYmls
aXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29uc3RydWN0QWJpbGl0eT4obV9jb25z
dHJ1Y3RBYmlsaXR5KTsgfQogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUp
OyB9CiAgICAgYm9vbCBpc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGNvbnN0cnVjdG9yS2luZCgpICE9IENvbnN0cnVjdG9yS2luZDo6Tm9uZTsgfQotICAgIGNvbnN0
IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlVERaVmFyaWFibGVzKCkgY29uc3QgeyBy
ZXR1cm4gJm1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7IH0KKyAgICBWYXJpYWJsZUVudmlyb25t
ZW50IHBhcmVudFNjb3BlVERaVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTY29w
ZVREWlZhcmlhYmxlcy5lbnZpcm9ubWVudCgpLnRvVmFyaWFibGVFbnZpcm9ubWVudCgpOyB9CiAg
ICAgCiAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBpc0Fycm93RnVu
Y3Rpb25QYXJzZU1vZGUocGFyc2VNb2RlKCkpOyB9CiAKQEAgLTE3Niw3ICsxNzYsNyBAQCBwcml2
YXRlOgogICAgIFN0cmluZyBtX3NvdXJjZVVSTERpcmVjdGl2ZTsKICAgICBTdHJpbmcgbV9zb3Vy
Y2VNYXBwaW5nVVJMRGlyZWN0aXZlOwogCi0gICAgVmFyaWFibGVFbnZpcm9ubWVudCBtX3BhcmVu
dFNjb3BlVERaVmFyaWFibGVzOworICAgIENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlIG1fcGFy
ZW50U2NvcGVURFpWYXJpYWJsZXM7CiAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9u
IDIzMTM5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9u
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDQgKzk2LDkxIEBAIHZvaWQgVmFyaWFibGVF
bnZpcm9ubWVudDo6bWFya1ZhcmlhYmxlQXMKICAgICBmaW5kUmVzdWx0LT52YWx1ZS5zZXRJc0V4
cG9ydGVkKCk7CiB9CiAKK0NvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50OjpDb21wYWN0VmFyaWFi
bGVFbnZpcm9ubWVudChjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnYpCit7CisgICAgbV9p
c0V2ZXJ5dGhpbmdDYXB0dXJlZCA9IGVudi5pc0V2ZXJ5dGhpbmdDYXB0dXJlZCgpOworICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8VW5pcXVlZFN0cmluZ0ltcGwqLCBWYXJpYWJsZUVudmlyb25tZW50RW50
cnk+LCAzMj4gc29ydGVkRW50cmllczsKKyAgICBzb3J0ZWRFbnRyaWVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoZW52LnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBwYWlyIDogZW52KQorICAgICAg
ICBzb3J0ZWRFbnRyaWVzLmFwcGVuZCh7IHBhaXIua2V5LmdldCgpLCBwYWlyLnZhbHVlIH0pOwor
CisgICAgc3RkOjpzb3J0KHNvcnRlZEVudHJpZXMuYmVnaW4oKSwgc29ydGVkRW50cmllcy5lbmQo
KSwgW10gKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKKyAgICAgICAgcmV0dXJuIGEu
Zmlyc3QgPCBiLmZpcnN0OworICAgIH0pOworCisgICAgbV9oYXNoID0gMDsKKyAgICBtX3Zhcmlh
Ymxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvcnRlZEVudHJpZXMuc2l6ZSgpKTsKKyAgICBt
X3ZhcmlhYmxlTWV0YWRhdGEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzb3J0ZWRFbnRyaWVzLnNp
emUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogc29ydGVkRW50cmllcykgeworICAg
ICAgICBtX3ZhcmlhYmxlcy5hcHBlbmQocGFpci5maXJzdCk7CisgICAgICAgIG1fdmFyaWFibGVN
ZXRhZGF0YS5hcHBlbmQocGFpci5zZWNvbmQpOworICAgICAgICBtX2hhc2ggXj0gcGFpci5maXJz
dC0+aGFzaCgpOworICAgICAgICBtX2hhc2ggKz0gcGFpci5zZWNvbmQuYml0cygpOworICAgIH0K
KworICAgIGlmIChtX2lzRXZlcnl0aGluZ0NhcHR1cmVkKQorICAgICAgICBtX2hhc2ggKj0gMjsK
K30KKworYm9vbCBDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudDo6b3BlcmF0b3I9PShjb25zdCBD
b21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKHRoaXMg
PT0gJm90aGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV9pc0V2ZXJ5dGhpbmdD
YXB0dXJlZCAhPSBvdGhlci5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1fdmFyaWFibGVzICE9IG90aGVyLm1fdmFyaWFibGVzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdmFyaWFibGVNZXRhZGF0YSAhPSBvdGhlci5tX3Zh
cmlhYmxlTWV0YWRhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworVmFyaWFibGVFbnZpcm9ubWVudCBDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudDo6dG9W
YXJpYWJsZUVudmlyb25tZW50KCkgY29uc3QKK3sKKyAgICBWYXJpYWJsZUVudmlyb25tZW50IHJl
c3VsdDsKKyAgICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgpID09IG1fdmFyaWFibGVNZXRhZGF0
YS5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSByZXN1bHQuYWRkKG1fdmFyaWFibGVz
W2ldKTsKKyAgICAgICAgQVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1fdmFyaWFibGVNZXRhZGF0YVtpXTsKKyAgICB9CisK
KyAgICBpZiAobV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZCkKKyAgICAgICAgcmVzdWx0Lm1hcmtBbGxW
YXJpYWJsZXNBc0NhcHR1cmVkKCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb21wYWN0
VmFyaWFibGVNYXA6OkhhbmRsZSBDb21wYWN0VmFyaWFibGVNYXA6OmdldChjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50JiBlbnYpCit7CisgICAgYXV0byogZW52aXJvbm1lbnQgPSBuZXcgQ29tcGFj
dFZhcmlhYmxlRW52aXJvbm1lbnQoZW52KTsKKyAgICBDb21wYWN0VmFyaWFibGVNYXBLZXkga2V5
IHsgKmVudmlyb25tZW50IH07CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX21hcC5hZGQoa2V5LCAx
KTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBDb21wYWN0
VmFyaWFibGVNYXA6OkhhbmRsZSgqZW52aXJvbm1lbnQsICp0aGlzKTsKKworICAgIGRlbGV0ZSBl
bnZpcm9ubWVudDsKKyAgICArK2FkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgcmV0dXJu
IENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlKGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5LmVudmly
b25tZW50KCksICp0aGlzKTsKK30KKworQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGU6On5IYW5k
bGUoKQoreworICAgIGlmICghbV9tYXApIHsKKyAgICAgICAgQVNTRVJUKCFtX2Vudmlyb25tZW50
KTsKKyAgICAgICAgLy8gVGhpcyBoYXBwZW5zIGlmIHdlIHdlcmUgbW92ZWQgaW50byBhIGRpZmZl
cmVudCBoYW5kbGUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2Vudmlyb25tZW50KTsKKyAgICBhdXRvIGl0ZXIgPSBtX21hcC0+bV9tYXAuZmluZChDb21w
YWN0VmFyaWFibGVNYXBLZXkgeyAqbV9lbnZpcm9ubWVudCB9KTsKKyAgICBSRUxFQVNFX0FTU0VS
VChpdGVyICE9IG1fbWFwLT5tX21hcC5lbmQoKSk7CisgICAgLS1pdGVyLT52YWx1ZTsKKyAgICBp
ZiAoIWl0ZXItPnZhbHVlKSB7CisgICAgICAgIEFTU0VSVChtX2Vudmlyb25tZW50ID09ICZpdGVy
LT5rZXkuZW52aXJvbm1lbnQoKSk7CisgICAgICAgIG1fbWFwLT5tX21hcC5yZW1vdmUoaXRlcik7
CisgICAgICAgIGZhc3RGcmVlKG1fZW52aXJvbm1lbnQpOworICAgIH0KK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52
aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Zh
cmlhYmxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjMxMzk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDYgKzU2LDEzIEBAIHB1YmxpYzoKIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhcklzVmFy
KCkgeyBtX2JpdHMgJj0gfklzVmFyOyB9CiAKKyAgICB1aW50MTZfdCBiaXRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9iaXRzOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFyaWFibGVFbnZp
cm9ubWVudEVudHJ5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JpdHMg
PT0gb3RoZXIubV9iaXRzOworICAgIH0KKwogcHJpdmF0ZToKICAgICBlbnVtIFRyYWl0cyA6IHVp
bnQxNl90IHsKICAgICAgICAgSXNDYXB0dXJlZCA9IDEgPDwgMCwKQEAgLTgwLDE0ICs4NywxMSBA
QCBjbGFzcyBWYXJpYWJsZUVudmlyb25tZW50IHsKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNo
TWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeSwg
SWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4s
IFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeUhhc2hUcmFpdHM+IE1hcDsKIHB1YmxpYzoKLSAgICBW
YXJpYWJsZUVudmlyb25tZW50KCkKLSAgICB7IH0KLSAgICBWYXJpYWJsZUVudmlyb25tZW50KFZh
cmlhYmxlRW52aXJvbm1lbnQmJiBvdGhlcikKLSAgICAgICAgOiBtX21hcChXVEZNb3ZlKG90aGVy
Lm1fbWFwKSkKLSAgICAgICAgLCBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkKG90aGVyLm1faXNFdmVy
eXRoaW5nQ2FwdHVyZWQpCi0gICAgeyB9CisgICAgVmFyaWFibGVFbnZpcm9ubWVudCgpID0gZGVm
YXVsdDsKKyAgICBWYXJpYWJsZUVudmlyb25tZW50KFZhcmlhYmxlRW52aXJvbm1lbnQmJiBvdGhl
cikgPSBkZWZhdWx0OwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQoY29uc3QgVmFyaWFibGVFbnZp
cm9ubWVudCYpID0gZGVmYXVsdDsKICAgICBWYXJpYWJsZUVudmlyb25tZW50JiBvcGVyYXRvcj0o
Y29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYpID0gZGVmYXVsdDsKKyAgICBWYXJpYWJsZUVudmly
b25tZW50JiBvcGVyYXRvcj0oVmFyaWFibGVFbnZpcm9ubWVudCYmKSA9IGRlZmF1bHQ7CiAKICAg
ICBBTFdBWVNfSU5MSU5FIE1hcDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdp
bigpOyB9CiAgICAgQUxXQVlTX0lOTElORSBNYXA6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1f
bWFwLmVuZCgpOyB9CkBAIC0xMDksOSArMTEzLDEyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJr
VmFyaWFibGVBc0ltcG9ydGVkKGNvbnN0IFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4mIGlkZW50
aWZpZXIpOwogICAgIHZvaWQgbWFya1ZhcmlhYmxlQXNFeHBvcnRlZChjb25zdCBSZWZQdHI8VW5p
cXVlZFN0cmluZ0ltcGw+JiBpZGVudGlmaWVyKTsKIAorICAgIGJvb2wgaXNFdmVyeXRoaW5nQ2Fw
dHVyZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRXZlcnl0aGluZ0NhcHR1cmVkOyB9CisKIHByaXZh
dGU6CiAgICAgTWFwIG1fbWFwOwogICAgIGJvb2wgbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZCB7IGZh
bHNlIH07CiB9OwogCitjbGFzcyBDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcGFjdFZh
cmlhYmxlRW52aXJvbm1lbnQpOworcHVibGljOgorICAgIENvbXBhY3RWYXJpYWJsZUVudmlyb25t
ZW50KGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmKTsKKyAgICBWYXJpYWJsZUVudmlyb25tZW50
IHRvVmFyaWFibGVFbnZpcm9ubWVudCgpIGNvbnN0OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50JikgY29uc3Q7CisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxSZWZQ
dHI8VW5pcXVlZFN0cmluZ0ltcGw+PiBtX3ZhcmlhYmxlczsKKyAgICBWZWN0b3I8VmFyaWFibGVF
bnZpcm9ubWVudEVudHJ5PiBtX3ZhcmlhYmxlTWV0YWRhdGE7CisgICAgdW5zaWduZWQgbV9oYXNo
OworICAgIGJvb2wgbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZDsKK307CisKK3N0cnVjdCBDb21wYWN0
VmFyaWFibGVNYXBLZXkgeworICAgIENvbXBhY3RWYXJpYWJsZU1hcEtleSgpCisgICAgICAgIDog
bV9lbnZpcm9ubWVudChudWxscHRyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSGFzaFRhYmxl
RW1wdHlWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBDb21wYWN0VmFyaWFibGVNYXBLZXkoQ29tcGFj
dFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50KQorICAgICAgICA6IG1fZW52aXJvbm1l
bnQoJmVudmlyb25tZW50KQorICAgIHsgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgQ29tcGFjdFZhcmlhYmxlTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5tX2Vudmlyb25tZW50
LT5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb21wYWN0VmFyaWFibGVN
YXBLZXkmIGEsIGNvbnN0IENvbXBhY3RWYXJpYWJsZU1hcEtleSYgYikgeyByZXR1cm4gKmEubV9l
bnZpcm9ubWVudCA9PSAqYi5tX2Vudmlyb25tZW50OyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgdm9pZCBt
YWtlRGVsZXRlZFZhbHVlKENvbXBhY3RWYXJpYWJsZU1hcEtleSYga2V5KQorICAgIHsKKyAgICAg
ICAga2V5Lm1fZW52aXJvbm1lbnQgPSByZWludGVycHJldF9jYXN0PENvbXBhY3RWYXJpYWJsZUVu
dmlyb25tZW50Kj4oMSk7CisgICAgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW52aXJvbm1lbnQgPT0gcmVpbnRlcnBy
ZXRfY2FzdDxDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCo+KDEpOworICAgIH0KKyAgICBib29s
IGlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1f
ZW52aXJvbm1lbnQ7CisgICAgfQorCisgICAgQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQmIGVu
dmlyb25tZW50KCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzSGFzaFRhYmxlRW1wdHlW
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuICptX2Vudmlyb25tZW50OworICAgIH0KKworcHJpdmF0
ZToKKyAgICBDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCogbV9lbnZpcm9ubWVudDsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8
SlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXk+IHsKKyAgICB1c2luZyBIYXNoID0gSlNDOjpDb21w
YWN0VmFyaWFibGVNYXBLZXk7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpT
Qzo6Q29tcGFjdFZhcmlhYmxlTWFwS2V5PiA6IEdlbmVyaWNIYXNoVHJhaXRzPEpTQzo6Q29tcGFj
dFZhcmlhYmxlTWFwS2V5PiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVy
byA9IHRydWU7CisgICAgc3RhdGljIEpTQzo6Q29tcGFjdFZhcmlhYmxlTWFwS2V5IGVtcHR5VmFs
dWUoKSB7IHJldHVybiBKU0M6OkNvbXBhY3RWYXJpYWJsZU1hcEtleSgpOyB9CisKKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgc3RhdGlj
IGJvb2wgaXNFbXB0eVZhbHVlKEpTQzo6Q29tcGFjdFZhcmlhYmxlTWFwS2V5IGtleSkgeyByZXR1
cm4ga2V5LmlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpOyB9CisKKyAgICBzdGF0aWMgdm9pZCBjb25z
dHJ1Y3REZWxldGVkVmFsdWUoSlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXkmIGtleSkgeyBKU0M6
OkNvbXBhY3RWYXJpYWJsZU1hcEtleTo6bWFrZURlbGV0ZWRWYWx1ZShrZXkpOyB9CisgICAgc3Rh
dGljIGJvb2wgaXNEZWxldGVkVmFsdWUoSlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXkga2V5KSB7
IHJldHVybiBrZXkuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb21wYWN0VmFyaWFibGVNYXAg
OiBwdWJsaWMgUmVmQ291bnRlZDxDb21wYWN0VmFyaWFibGVNYXA+IHsKK3B1YmxpYzoKKyAgICBj
bGFzcyBIYW5kbGUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIYW5kbGUpOyAvLyBJ
ZiB3ZSB3YW50ZWQgdG8gbWFrZSB0aGlzIGNvcHlhYmxlLCB3ZSdkIG5lZWQgdG8gZG8gYSBoYXNo
dGFibGUgbG9va3VwIGFuZCBidW1wIHRoZSByZWZjb3VudC4KKyAgICBwdWJsaWM6CisgICAgICAg
IEhhbmRsZShDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQsIENvbXBhY3RW
YXJpYWJsZU1hcCYgbWFwKQorICAgICAgICAgICAgOiBtX2Vudmlyb25tZW50KCZlbnZpcm9ubWVu
dCkKKyAgICAgICAgICAgICwgbV9tYXAoJm1hcCkKKyAgICAgICAgeyB9CisgICAgICAgIEhhbmRs
ZShIYW5kbGUmJiBvdGhlcikKKyAgICAgICAgICAgIDogbV9lbnZpcm9ubWVudChvdGhlci5tX2Vu
dmlyb25tZW50KQorICAgICAgICAgICAgLCBtX21hcChXVEZNb3ZlKG90aGVyLm1fbWFwKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFtX2Vudmlyb25tZW50ID09ICEh
bV9tYXApOworICAgICAgICAgICAgQVNTRVJUKCFvdGhlci5tX21hcCk7CisgICAgICAgICAgICBv
dGhlci5tX2Vudmlyb25tZW50ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB+SGFuZGxl
KCk7CisKKyAgICAgICAgY29uc3QgQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25t
ZW50KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICptX2Vudmlyb25tZW50
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBDb21wYWN0VmFyaWFibGVFbnZp
cm9ubWVudCogbV9lbnZpcm9ubWVudDsKKyAgICAgICAgUmVmUHRyPENvbXBhY3RWYXJpYWJsZU1h
cD4gbV9tYXA7CisgICAgfTsKKworICAgIEhhbmRsZSBnZXQoY29uc3QgVmFyaWFibGVFbnZpcm9u
bWVudCYpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBIYW5kbGU7CisgICAgSGFzaE1h
cDxDb21wYWN0VmFyaWFibGVNYXBLZXksIHVuc2lnbmVkPiBtX21hcDsKK307CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNp
b24gMjMxMzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDcgQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIlZhcmlhYmxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJWTUVudHJ5
U2NvcGUuaCIKICNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgogI2luY2x1ZGUgIldhc21Xb3JrbGlz
dC5oIgpAQCAtMzMzLDYgKzMzNCw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBo
ZWFwVHlwZSkKICAgICAsIGludGVycHJldGVyKDApCiAgICAgLCBlbnRyeVNjb3BlKDApCiAgICAg
LCBtX3JlZ0V4cENhY2hlKG5ldyBSZWdFeHBDYWNoZSh0aGlzKSkKKyAgICAsIG1fY29tcGFjdFZh
cmlhYmxlTWFwKGFkb3B0UmVmKCoobmV3IENvbXBhY3RWYXJpYWJsZU1hcCkpKQogI2lmIEVOQUJM
RShSRUdFWFBfVFJBQ0lORykKICAgICAsIG1fcnRUcmFjZUxpc3QobmV3IFJUVHJhY2VMaXN0KCkp
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjMx
Mzk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtMTAyLDYgKzEwMiw3IEBAIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBj
bGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBDb21tb25JZGVudGlmaWVy
czsKK2NsYXNzIENvbXBhY3RWYXJpYWJsZU1hcDsKIGNsYXNzIEN1c3RvbUdldHRlclNldHRlcjsK
IGNsYXNzIERPTUF0dHJpYnV0ZUdldHRlclNldHRlcjsKIGNsYXNzIEV4ZWNTdGF0ZTsKQEAgLTcw
OSw2ICs3MTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWxlYXNlUmVnRXhwUGF0dGVybkNvbnRl
eEJ1ZmZlcigpOwogI2VuZGlmCiAKKyAgICBSZWY8Q29tcGFjdFZhcmlhYmxlTWFwPiBtX2NvbXBh
Y3RWYXJpYWJsZU1hcDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXNPd25Qcm9wZXJ0eUNhY2hl
PiBtX2hhc093blByb3BlcnR5Q2FjaGU7CiAgICAgQUxXQVlTX0lOTElORSBIYXNPd25Qcm9wZXJ0
eUNhY2hlKiBoYXNPd25Qcm9wZXJ0eUNhY2hlKCkgeyByZXR1cm4gbV9oYXNPd25Qcm9wZXJ0eUNh
Y2hlLmdldCgpOyB9Cg==
</data>
<flag name="review"
          id="358002"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339788</attachid>
            <date>2018-05-07 19:24:21 -0700</date>
            <delta_ts>2018-05-07 21:18:30 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>17615</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxNDc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDE4LTA1LTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgYSBjb21wYWN0IHZlcnNpb24gb2YgVmFyaWFibGVFbnZpcm9ubWVudCB0aGF0IFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlIHN0b3JlcyBhbmQgaGFzaC1jb25zIHRoZXNlIGNvbXBhY3Qg
ZW52aXJvbm1lbnRzIGFzIHdlIG1ha2UgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MzI5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zOTk2
MTUzNj4KKworICAgICAgICBSZXZpZXdlZCBieSBNaWNoYWVsIFNhYm9mZi4KKworICAgICAgICBJ
IHdhcyBtYWRlIGF3YXJlIG9mIGEgbWVtb3J5IGdvb2YgaW5zaWRlIG9mIEpTQyB3aGVyZSB3ZSB3
b3VsZCBpbmVmZmljaWVudGx5CisgICAgICAgIHVzZSBzcGFjZSB0byByZXByZXNlbnQgYW4gVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUncyBwYXJlbnQgVERaIHZhcmlhYmxlcy4KKyAgICAgICAg
CisgICAgICAgIFdlIGRpZCB0d28gdGhpbmdzIGJhZGx5OgorICAgICAgICAxLiBXZSB1c2VkIGEg
SGFzaE1hcCBpbnN0ZWFkIG9mIGEgVmVjdG9yIHRvIHJlcHJlc2VudCB0aGUgZW52aXJvbm1lbnQu
IEhhdmluZworICAgICAgICBhIEhhc2hNYXAgaXMgdXNlZnVsIHdoZW4gbG9va2luZyB0aGluZ3Mg
dXAgd2hlbiBnZW5lcmF0aW5nIGJ5dGVjb2RlLCBidXQgaXQncworICAgICAgICBzcGFjZSBpbmVm
ZmljaWVudC4gQmVjYXVzZSBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZXMgbGl2ZSBhIGxvbmcg
dGltZSBiZWNhdXNlCisgICAgICAgIG9mIHRoZSBjb2RlIGNhY2hlLCB3ZSBzaG91bGQgaGF2ZSB0
aGVtIHN0b3JlIHRoaXMgaW5mb3JtYXRpb24gZWZmaWNpZW50bHkKKyAgICAgICAgaW5zaWRlIG9m
IGEgVmVjdG9yLgorICAgICAgICAKKyAgICAgICAgMi4gV2UgZGlkbid0IGhhc2gtY29ucyB0aGVz
ZSBlbnZpcm9ubWVudHMgdG9nZXRoZXIuIElmIHlvdSB0aGluayBhYm91dCBob3cKKyAgICAgICAg
c29tZSBwcm9ncmFtcyBhcmUgc3RydWN0dXJlZCwgaGFzaC1jb25zaW5nIHRoZXNlIHRvZ2V0aGVy
IGlzIGh1Z2VseSBwcm9maXRhYmxlLgorICAgICAgICBDb25zaWRlciBzb21lIGNvZGUgbGlrZSB0
aGlzOgorICAgICAgICBgYGAKKyAgICAgICAgY29uc3QvbGV0IFZfMSA9IC4uLjsKKyAgICAgICAg
Y29uc3QvbGV0IFZfMiA9IC4uLjsKKyAgICAgICAgLi4uCisgICAgICAgIGNvbnN0L2xldCBWX24g
PSAuLi47CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBmXzEoKSB7IC4uLiB9OworICAgICAg
ICBmdW5jdGlvbiBmXzIoKSB7IC4uLiB9OworICAgICAgICAuLi4KKyAgICAgICAgZnVuY3Rpb24g
Zl9uKCkgeyAuLi4gfTsKKyAgICAgICAgYGBgCisgICAgICAgIAorICAgICAgICBFYWNoIGZfaSB3
b3VsZCBzdG9yZSBhbiBpZGVudGljYWwgaGFzaCBtYXAgZm9yIGl0cyBwYXJlbnQgVERaIHZhcmlh
YmxlcworICAgICAgICBjb25zaXN0aW5nIG9mIHtWXzEsIC4uLiwgVl9ufS4gVGhpcyB3YXMgaW5j
cmVkaWJseSBkdW1iLiBXaXRoIGhhc2gtY29uc2luZywKKyAgICAgICAgZWFjaCBmX2kganVzdCBo
b2xkcyBvbnRvIGEgcmVmZXJlbmNlIHRvIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgCisgICAg
ICAgIEkgYmVuY2htYXJrZWQgdGhpcyBjaGFuZ2UgYWdhaW5zdCBhbiBhcHAgdGhhdCBtYWRlIGhl
YXZ5IHVzZSBvZiB0aGUKKyAgICAgICAgYWJvdmUgY29kZSBwYXR0ZXJuIGFuZCBpdCByZWR1Y2Vk
IGl0cyBwZWFrIG1lbW9yeSBmb290cHJpbnQgZnJvbSB+MjIwTUIKKyAgICAgICAgdG8gfjE2ME1C
LgorCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgor
ICAgICAgICAoSlNDOjpnZW5lcmF0ZVVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmg6
CisgICAgICAgICogcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlND
OjpDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudDo6Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQp
OgorICAgICAgICAoSlNDOjpDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudDo6b3BlcmF0b3I9PSBj
b25zdCk6CisgICAgICAgIChKU0M6OkNvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50Ojp0b1Zhcmlh
YmxlRW52aXJvbm1lbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpDb21wYWN0VmFyaWFibGVNYXA6
OmdldCk6CisgICAgICAgIChKU0M6OkNvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlOjp+SGFuZGxl
KToKKyAgICAgICAgKiBwYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oOgorICAgICAgICAoSlND
OjpWYXJpYWJsZUVudmlyb25tZW50RW50cnk6OmJpdHMgY29uc3QpOgorICAgICAgICAoSlNDOjpW
YXJpYWJsZUVudmlyb25tZW50RW50cnk6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlND
OjpWYXJpYWJsZUVudmlyb25tZW50Ojppc0V2ZXJ5dGhpbmdDYXB0dXJlZCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkNvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50OjpoYXNoIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdFZhcmlhYmxlTWFwS2V5OjpDb21wYWN0VmFyaWFibGVNYXBLZXkpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXk6Omhhc2gpOgorICAgICAgICAoSlND
OjpDb21wYWN0VmFyaWFibGVNYXBLZXk6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdFZh
cmlhYmxlTWFwS2V5OjptYWtlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdFZh
cmlhYmxlTWFwS2V5Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RWYXJpYWJsZU1hcEtleTo6aXNIYXNoVGFibGVFbXB0eVZhbHVlIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6Q29tcGFjdFZhcmlhYmxlTWFwS2V5OjplbnZpcm9ubWVudCk6CisgICAg
ICAgIChXVEY6Okhhc2hUcmFpdHM8SlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXk+OjplbXB0eVZh
bHVlKToKKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxKU0M6OkNvbXBhY3RWYXJpYWJsZU1hcEtl
eT46OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8SlNDOjpDb21wYWN0
VmFyaWFibGVNYXBLZXk+Ojpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpI
YXNoVHJhaXRzPEpTQzo6Q29tcGFjdFZhcmlhYmxlTWFwS2V5Pjo6aXNEZWxldGVkVmFsdWUpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZTo6SGFuZGxlKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGU6OmVudmlyb25tZW50IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6VmFyaWFibGVFbnZpcm9ubWVudDo6VmFyaWFibGVFbnZpcm9ubWVudCk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE4LTA1LTA2ICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtERkddW01JUFNdIFNpbXBsaWZ5
IERGRyBjb2RlIGJ5IGluY3JlYXNpbmcgTUlQUyB0ZW1wb3JhcnkgcmVnaXN0ZXJzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDIzMTM5NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDcgKzY4LDggQEAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2sqIGdlbmVyYQogCiAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRh
YmxlSW5mbyhmdW5jdGlvbi0+dXNlc0V2YWwoKSwgZnVuY3Rpb24tPmlzU3RyaWN0TW9kZSgpLCBr
aW5kID09IENvZGVGb3JDb25zdHJ1Y3QsIGZ1bmN0aW9uS2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5G
dW5jdGlvbiwgZXhlY3V0YWJsZS0+Y29uc3RydWN0b3JLaW5kKCksIHNjcmlwdE1vZGUsIGV4ZWN1
dGFibGUtPnN1cGVyQmluZGluZygpLCBwYXJzZU1vZGUsIGV4ZWN1dGFibGUtPmRlcml2ZWRDb250
ZXh0VHlwZSgpLCBmYWxzZSwgaXNDbGFzc0NvbnRleHQsIEV2YWxDb250ZXh0VHlwZTo6RnVuY3Rp
b25FdmFsQ29udGV4dCksIGRlYnVnZ2VyTW9kZSk7CiAKLSAgICBlcnJvciA9IEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZSh2bSwgZnVuY3Rpb24uZ2V0KCksIHNvdXJjZSwgcmVzdWx0LCBkZWJ1
Z2dlck1vZGUsIGV4ZWN1dGFibGUtPnBhcmVudFNjb3BlVERaVmFyaWFibGVzKCkpOworICAgIFZh
cmlhYmxlRW52aXJvbm1lbnQgcGFyZW50U2NvcGVURFpWYXJpYWJsZXMgPSBleGVjdXRhYmxlLT5w
YXJlbnRTY29wZVREWlZhcmlhYmxlcygpOworICAgIGVycm9yID0gQnl0ZWNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlKHZtLCBmdW5jdGlvbi5nZXQoKSwgc291cmNlLCByZXN1bHQsIGRlYnVnZ2VyTW9k
ZSwgJnBhcmVudFNjb3BlVERaVmFyaWFibGVzKTsKIAogICAgIGlmIChlcnJvci5pc1ZhbGlkKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTA0LDYgKzEwNSw3IEBAIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmMKICAgICAsIG1faW5mZXJyZWROYW1lKG5vZGUt
PmluZmVycmVkTmFtZSgpKQogICAgICwgbV9wYXJlbnRTb3VyY2VPdmVycmlkZShXVEZNb3ZlKHBh
cmVudFNvdXJjZU92ZXJyaWRlKSkKICAgICAsIG1fY2xhc3NTb3VyY2Uobm9kZS0+Y2xhc3NTb3Vy
Y2UoKSkKKyAgICAsIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXModm0tPm1fY29tcGFjdFZhcmlh
YmxlTWFwLT5nZXQocGFyZW50U2NvcGVURFpWYXJpYWJsZXMpKQogewogICAgIC8vIE1ha2Ugc3Vy
ZSB0aGVzZSBiaXRmaWVsZHMgYXJlIGFkZXF1YXRlbHkgd2lkZS4KICAgICBBU1NFUlQobV9jb25z
dHJ1Y3RBYmlsaXR5ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb25zdHJ1Y3RBYmlsaXR5KSk7
CkBAIC0xMTIsOCArMTE0LDYgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2Vk
RnVuYwogICAgIEFTU0VSVChtX3NjcmlwdE1vZGUgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNj
cmlwdE1vZGUpKTsKICAgICBBU1NFUlQobV9zdXBlckJpbmRpbmcgPT0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG5vZGUtPnN1cGVyQmluZGluZygpKSk7CiAgICAgQVNTRVJUKG1fZGVyaXZlZENvbnRl
eHRUeXBlID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZXJpdmVkQ29udGV4dFR5cGUpKTsKLQot
ICAgIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXMuc3dhcChwYXJlbnRTY29wZVREWlZhcmlhYmxl
cyk7CiB9CiAKIHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDIzMTM5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgcHVibGljOgogICAgIENvbnN0
cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PENvbnN0cnVjdEFiaWxpdHk+KG1fY29uc3RydWN0QWJpbGl0eSk7IH0KICAgICBKU1BhcnNlclNj
cmlwdE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEpTUGFyc2Vy
U2NyaXB0TW9kZT4obV9zY3JpcHRNb2RlKTsgfQogICAgIGJvb2wgaXNDbGFzc0NvbnN0cnVjdG9y
RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBjb25zdHJ1Y3RvcktpbmQoKSAhPSBDb25zdHJ1Y3Rv
cktpbmQ6Ok5vbmU7IH0KLSAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiBwYXJlbnRTY29w
ZVREWlZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuICZtX3BhcmVudFNjb3BlVERaVmFyaWFibGVz
OyB9CisgICAgVmFyaWFibGVFbnZpcm9ubWVudCBwYXJlbnRTY29wZVREWlZhcmlhYmxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXMuZW52aXJvbm1lbnQoKS50b1Zh
cmlhYmxlRW52aXJvbm1lbnQoKTsgfQogICAgIAogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gaXNBcnJvd0Z1bmN0aW9uUGFyc2VNb2RlKHBhcnNlTW9kZSgpKTsgfQog
CkBAIC0xNzYsNyArMTc2LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9zb3VyY2VVUkxEaXJl
Y3RpdmU7CiAgICAgU3RyaW5nIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsKIAotICAgIFZh
cmlhYmxlRW52aXJvbm1lbnQgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxlczsKKyAgICBDb21wYWN0
VmFyaWFibGVNYXA6OkhhbmRsZSBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzOwogCiBwcm90ZWN0
ZWQ6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxl
RW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyMzEzOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw0
ICs5Niw5MSBAQCB2b2lkIFZhcmlhYmxlRW52aXJvbm1lbnQ6Om1hcmtWYXJpYWJsZUFzCiAgICAg
ZmluZFJlc3VsdC0+dmFsdWUuc2V0SXNFeHBvcnRlZCgpOwogfQogCitDb21wYWN0VmFyaWFibGVF
bnZpcm9ubWVudDo6Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQoY29uc3QgVmFyaWFibGVFbnZp
cm9ubWVudCYgZW52KQorICAgIDogbV9pc0V2ZXJ5dGhpbmdDYXB0dXJlZChlbnYuaXNFdmVyeXRo
aW5nQ2FwdHVyZWQoKSkKK3sKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFVuaXF1ZWRTdHJpbmdJbXBs
KiwgVmFyaWFibGVFbnZpcm9ubWVudEVudHJ5PiwgMzI+IHNvcnRlZEVudHJpZXM7CisgICAgc29y
dGVkRW50cmllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGVudi5zaXplKCkpOworICAgIGZvciAo
YXV0byYgcGFpciA6IGVudikKKyAgICAgICAgc29ydGVkRW50cmllcy5hcHBlbmQoeyBwYWlyLmtl
eS5nZXQoKSwgcGFpci52YWx1ZSB9KTsKKworICAgIHN0ZDo6c29ydChzb3J0ZWRFbnRyaWVzLmJl
Z2luKCksIHNvcnRlZEVudHJpZXMuZW5kKCksIFtdIChjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRv
JiBiKSB7CisgICAgICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKKyAgICB9KTsKKworICAg
IG1faGFzaCA9IDA7CisgICAgbV92YXJpYWJsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzb3J0
ZWRFbnRyaWVzLnNpemUoKSk7CisgICAgbV92YXJpYWJsZU1ldGFkYXRhLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc29ydGVkRW50cmllcy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgcGFp
ciA6IHNvcnRlZEVudHJpZXMpIHsKKyAgICAgICAgbV92YXJpYWJsZXMuYXBwZW5kKHBhaXIuZmly
c3QpOworICAgICAgICBtX3ZhcmlhYmxlTWV0YWRhdGEuYXBwZW5kKHBhaXIuc2Vjb25kKTsKKyAg
ICAgICAgbV9oYXNoIF49IHBhaXIuZmlyc3QtPmhhc2goKTsKKyAgICAgICAgbV9oYXNoICs9IHBh
aXIuc2Vjb25kLmJpdHMoKTsKKyAgICB9CisKKyAgICBpZiAobV9pc0V2ZXJ5dGhpbmdDYXB0dXJl
ZCkKKyAgICAgICAgbV9oYXNoICo9IDI7Cit9CisKK2Jvb2wgQ29tcGFjdFZhcmlhYmxlRW52aXJv
bm1lbnQ6Om9wZXJhdG9yPT0oY29uc3QgQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQmIG90aGVy
KSBjb25zdAoreworICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQgIT0gb3RoZXIubV9pc0V2ZXJ5dGhpbmdD
YXB0dXJlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3ZhcmlhYmxlcyAhPSBv
dGhlci5tX3ZhcmlhYmxlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Zhcmlh
YmxlTWV0YWRhdGEgIT0gb3RoZXIubV92YXJpYWJsZU1ldGFkYXRhKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZhcmlhYmxlRW52aXJvbm1lbnQgQ29tcGFj
dFZhcmlhYmxlRW52aXJvbm1lbnQ6OnRvVmFyaWFibGVFbnZpcm9ubWVudCgpIGNvbnN0Cit7Cisg
ICAgVmFyaWFibGVFbnZpcm9ubWVudCByZXN1bHQ7CisgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNp
emUoKSA9PSBtX3ZhcmlhYmxlTWV0YWRhdGEuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0
ID0gcmVzdWx0LmFkZChtX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgIEFTU0VSVChhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtX3Zhcmlh
YmxlTWV0YWRhdGFbaV07CisgICAgfQorCisgICAgaWYgKG1faXNFdmVyeXRoaW5nQ2FwdHVyZWQp
CisgICAgICAgIHJlc3VsdC5tYXJrQWxsVmFyaWFibGVzQXNDYXB0dXJlZCgpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUgQ29tcGFjdFZhcmlh
YmxlTWFwOjpnZXQoY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZW52KQoreworICAgIGF1dG8q
IGVudmlyb25tZW50ID0gbmV3IENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50KGVudik7CisgICAg
Q29tcGFjdFZhcmlhYmxlTWFwS2V5IGtleSB7ICplbnZpcm9ubWVudCB9OworICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMSk7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5
KQorICAgICAgICByZXR1cm4gQ29tcGFjdFZhcmlhYmxlTWFwOjpIYW5kbGUoKmVudmlyb25tZW50
LCAqdGhpcyk7CisKKyAgICBkZWxldGUgZW52aXJvbm1lbnQ7CisgICAgKythZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOworICAgIHJldHVybiBDb21wYWN0VmFyaWFibGVNYXA6OkhhbmRsZShhZGRS
ZXN1bHQuaXRlcmF0b3ItPmtleS5lbnZpcm9ubWVudCgpLCAqdGhpcyk7Cit9CisKK0NvbXBhY3RW
YXJpYWJsZU1hcDo6SGFuZGxlOjp+SGFuZGxlKCkKK3sKKyAgICBpZiAoIW1fbWFwKSB7CisgICAg
ICAgIEFTU0VSVCghbV9lbnZpcm9ubWVudCk7CisgICAgICAgIC8vIFRoaXMgaGFwcGVucyBpZiB3
ZSB3ZXJlIG1vdmVkIGludG8gYSBkaWZmZXJlbnQgaGFuZGxlLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobV9lbnZpcm9ubWVudCk7CisgICAgYXV0byBpdGVy
ID0gbV9tYXAtPm1fbWFwLmZpbmQoQ29tcGFjdFZhcmlhYmxlTWFwS2V5IHsgKm1fZW52aXJvbm1l
bnQgfSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSBtX21hcC0+bV9tYXAuZW5kKCkpOwor
ICAgIC0taXRlci0+dmFsdWU7CisgICAgaWYgKCFpdGVyLT52YWx1ZSkgeworICAgICAgICBBU1NF
UlQobV9lbnZpcm9ubWVudCA9PSAmaXRlci0+a2V5LmVudmlyb25tZW50KCkpOworICAgICAgICBt
X21hcC0+bV9tYXAucmVtb3ZlKGl0ZXIpOworICAgICAgICBmYXN0RnJlZShtX2Vudmlyb25tZW50
KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmgJKHJldmlzaW9uIDIz
MTM5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxMyBAQCBwdWJsaWM6CiAKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgY2xlYXJJc1ZhcigpIHsgbV9iaXRzICY9IH5Jc1ZhcjsgfQogCisgICAg
dWludDE2X3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeSYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9iaXRzID09IG90aGVyLm1fYml0czsKKyAgICB9CisKIHByaXZh
dGU6CiAgICAgZW51bSBUcmFpdHMgOiB1aW50MTZfdCB7CiAgICAgICAgIElzQ2FwdHVyZWQgPSAx
IDw8IDAsCkBAIC04MCwxNCArODcsMTEgQEAgY2xhc3MgVmFyaWFibGVFbnZpcm9ubWVudCB7CiBw
cml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LCBW
YXJpYWJsZUVudmlyb25tZW50RW50cnksIElkZW50aWZpZXJSZXBIYXNoLCBIYXNoVHJhaXRzPFJl
ZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4+LCBWYXJpYWJsZUVudmlyb25tZW50RW50cnlIYXNoVHJh
aXRzPiBNYXA7CiBwdWJsaWM6Ci0gICAgVmFyaWFibGVFbnZpcm9ubWVudCgpCi0gICAgeyB9Ci0g
ICAgVmFyaWFibGVFbnZpcm9ubWVudChWYXJpYWJsZUVudmlyb25tZW50JiYgb3RoZXIpCi0gICAg
ICAgIDogbV9tYXAoV1RGTW92ZShvdGhlci5tX21hcCkpCi0gICAgICAgICwgbV9pc0V2ZXJ5dGhp
bmdDYXB0dXJlZChvdGhlci5tX2lzRXZlcnl0aGluZ0NhcHR1cmVkKQotICAgIHsgfQorICAgIFZh
cmlhYmxlRW52aXJvbm1lbnQoKSA9IGRlZmF1bHQ7CisgICAgVmFyaWFibGVFbnZpcm9ubWVudChW
YXJpYWJsZUVudmlyb25tZW50JiYgb3RoZXIpID0gZGVmYXVsdDsKICAgICBWYXJpYWJsZUVudmly
b25tZW50KGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmKSA9IGRlZmF1bHQ7CiAgICAgVmFyaWFi
bGVFbnZpcm9ubWVudCYgb3BlcmF0b3I9KGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmKSA9IGRl
ZmF1bHQ7CisgICAgVmFyaWFibGVFbnZpcm9ubWVudCYgb3BlcmF0b3I9KFZhcmlhYmxlRW52aXJv
bm1lbnQmJikgPSBkZWZhdWx0OwogCiAgICAgQUxXQVlTX0lOTElORSBNYXA6Oml0ZXJhdG9yIGJl
Z2luKCkgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQogICAgIEFMV0FZU19JTkxJTkUgTWFwOjpp
dGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQpAQCAtMTA5LDkgKzExMywxMjYg
QEAgcHVibGljOgogICAgIHZvaWQgbWFya1ZhcmlhYmxlQXNJbXBvcnRlZChjb25zdCBSZWZQdHI8
VW5pcXVlZFN0cmluZ0ltcGw+JiBpZGVudGlmaWVyKTsKICAgICB2b2lkIG1hcmtWYXJpYWJsZUFz
RXhwb3J0ZWQoY29uc3QgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPiYgaWRlbnRpZmllcik7CiAK
KyAgICBib29sIGlzRXZlcnl0aGluZ0NhcHR1cmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0V2ZXJ5
dGhpbmdDYXB0dXJlZDsgfQorCiBwcml2YXRlOgogICAgIE1hcCBtX21hcDsKICAgICBib29sIG1f
aXNFdmVyeXRoaW5nQ2FwdHVyZWQgeyBmYWxzZSB9OwogfTsKIAorY2xhc3MgQ29tcGFjdFZhcmlh
YmxlRW52aXJvbm1lbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50KTsKK3B1YmxpYzoKKyAg
ICBDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudChjb25zdCBWYXJpYWJsZUVudmlyb25tZW50Jik7
CisgICAgVmFyaWFibGVFbnZpcm9ubWVudCB0b1ZhcmlhYmxlRW52aXJvbm1lbnQoKSBjb25zdDsK
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCYp
IGNvbnN0OworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX2hhc2g7IH0KKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBsPj4gbV92YXJpYWJs
ZXM7CisgICAgVmVjdG9yPFZhcmlhYmxlRW52aXJvbm1lbnRFbnRyeT4gbV92YXJpYWJsZU1ldGFk
YXRhOworICAgIHVuc2lnbmVkIG1faGFzaDsKKyAgICBib29sIG1faXNFdmVyeXRoaW5nQ2FwdHVy
ZWQ7Cit9OworCitzdHJ1Y3QgQ29tcGFjdFZhcmlhYmxlTWFwS2V5IHsKKyAgICBDb21wYWN0VmFy
aWFibGVNYXBLZXkoKQorICAgICAgICA6IG1fZW52aXJvbm1lbnQobnVsbHB0cikKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0hhc2hUYWJsZUVtcHR5VmFsdWUoKSk7CisgICAgfQorCisgICAgQ29t
cGFjdFZhcmlhYmxlTWFwS2V5KENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50JiBlbnZpcm9ubWVu
dCkKKyAgICAgICAgOiBtX2Vudmlyb25tZW50KCZlbnZpcm9ubWVudCkKKyAgICB7IH0KKworICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENvbXBhY3RWYXJpYWJsZU1hcEtleSYga2V5KSB7
IHJldHVybiBrZXkubV9lbnZpcm9ubWVudC0+aGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgQ29tcGFjdFZhcmlhYmxlTWFwS2V5JiBhLCBjb25zdCBDb21wYWN0VmFyaWFibGVN
YXBLZXkmIGIpIHsgcmV0dXJuICphLm1fZW52aXJvbm1lbnQgPT0gKmIubV9lbnZpcm9ubWVudDsg
fQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
ZmFsc2U7CisgICAgc3RhdGljIHZvaWQgbWFrZURlbGV0ZWRWYWx1ZShDb21wYWN0VmFyaWFibGVN
YXBLZXkmIGtleSkKKyAgICB7CisgICAgICAgIGtleS5tX2Vudmlyb25tZW50ID0gcmVpbnRlcnBy
ZXRfY2FzdDxDb21wYWN0VmFyaWFibGVFbnZpcm9ubWVudCo+KDEpOworICAgIH0KKyAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2Vudmlyb25tZW50ID09IHJlaW50ZXJwcmV0X2Nhc3Q8Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1l
bnQqPigxKTsKKyAgICB9CisgICAgYm9vbCBpc0hhc2hUYWJsZUVtcHR5VmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Vudmlyb25tZW50OworICAgIH0KKworICAgIENvbXBh
Y3RWYXJpYWJsZUVudmlyb25tZW50JiBlbnZpcm9ubWVudCgpCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCghaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc0hhc2hUYWJsZUVtcHR5VmFsdWUoKSk7CisgICAgICAgIHJldHVybiAqbV9lbnZp
cm9ubWVudDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1l
bnQqIG1fZW52aXJvbm1lbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBs
YXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6Q29tcGFjdFZhcmlhYmxlTWFwS2V5PiB7Cisg
ICAgdXNpbmcgSGFzaCA9IEpTQzo6Q29tcGFjdFZhcmlhYmxlTWFwS2V5OworfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkNvbXBhY3RWYXJpYWJsZU1hcEtleT4gOiBHZW5l
cmljSGFzaFRyYWl0czxKU0M6OkNvbXBhY3RWYXJpYWJsZU1hcEtleT4geworICAgIHN0YXRpYyBj
b25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIHN0YXRpYyBKU0M6OkNvbXBh
Y3RWYXJpYWJsZU1hcEtleSBlbXB0eVZhbHVlKCkgeyByZXR1cm4gSlNDOjpDb21wYWN0VmFyaWFi
bGVNYXBLZXkoKTsgfQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVu
Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShKU0M6OkNvbXBhY3RW
YXJpYWJsZU1hcEtleSBrZXkpIHsgcmV0dXJuIGtleS5pc0hhc2hUYWJsZUVtcHR5VmFsdWUoKTsg
fQorCisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEpTQzo6Q29tcGFjdFZh
cmlhYmxlTWFwS2V5JiBrZXkpIHsgSlNDOjpDb21wYWN0VmFyaWFibGVNYXBLZXk6Om1ha2VEZWxl
dGVkVmFsdWUoa2V5KTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKEpTQzo6Q29t
cGFjdFZhcmlhYmxlTWFwS2V5IGtleSkgeyByZXR1cm4ga2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCk7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQ29tcGFjdFZhcmlhYmxlTWFwIDogcHVibGljIFJlZkNvdW50ZWQ8Q29tcGFjdFZhcmlh
YmxlTWFwPiB7CitwdWJsaWM6CisgICAgY2xhc3MgSGFuZGxlIHsKKyAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSGFuZGxlKTsgLy8gSWYgd2Ugd2FudGVkIHRvIG1ha2UgdGhpcyBjb3B5YWJs
ZSwgd2UnZCBuZWVkIHRvIGRvIGEgaGFzaHRhYmxlIGxvb2t1cCBhbmQgYnVtcCB0aGUgcmVmZXJl
bmNlIGNvdW50IG9mIHRoZSBtYXAgZW50cnkuCisgICAgcHVibGljOgorICAgICAgICBIYW5kbGUo
Q29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50LCBDb21wYWN0VmFyaWFibGVN
YXAmIG1hcCkKKyAgICAgICAgICAgIDogbV9lbnZpcm9ubWVudCgmZW52aXJvbm1lbnQpCisgICAg
ICAgICAgICAsIG1fbWFwKCZtYXApCisgICAgICAgIHsgfQorICAgICAgICBIYW5kbGUoSGFuZGxl
JiYgb3RoZXIpCisgICAgICAgICAgICA6IG1fZW52aXJvbm1lbnQob3RoZXIubV9lbnZpcm9ubWVu
dCkKKyAgICAgICAgICAgICwgbV9tYXAoV1RGTW92ZShvdGhlci5tX21hcCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9lbnZpcm9ubWVudCA9PSAhIW1fbWFwKTsK
KyAgICAgICAgICAgIEFTU0VSVCghb3RoZXIubV9tYXApOworICAgICAgICAgICAgb3RoZXIubV9l
bnZpcm9ubWVudCA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgfkhhbmRsZSgpOworCisg
ICAgICAgIGNvbnN0IENvbXBhY3RWYXJpYWJsZUVudmlyb25tZW50JiBlbnZpcm9ubWVudCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqbV9lbnZpcm9ubWVudDsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ29tcGFjdFZhcmlhYmxlRW52aXJvbm1lbnQq
IG1fZW52aXJvbm1lbnQ7CisgICAgICAgIFJlZlB0cjxDb21wYWN0VmFyaWFibGVNYXA+IG1fbWFw
OworICAgIH07CisKKyAgICBIYW5kbGUgZ2V0KGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmKTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSGFuZGxlOworICAgIEhhc2hNYXA8Q29tcGFj
dFZhcmlhYmxlTWFwS2V5LCB1bnNpZ25lZD4gbV9tYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIzMTM5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ0LDYgKzE0NCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKICNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgorI2luY2x1
ZGUgIlZhcmlhYmxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNp
bmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKQEAgLTMz
Myw2ICszMzQsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAg
ICAgLCBpbnRlcnByZXRlcigwKQogICAgICwgZW50cnlTY29wZSgwKQogICAgICwgbV9yZWdFeHBD
YWNoZShuZXcgUmVnRXhwQ2FjaGUodGhpcykpCisgICAgLCBtX2NvbXBhY3RWYXJpYWJsZU1hcChh
ZG9wdFJlZigqKG5ldyBDb21wYWN0VmFyaWFibGVNYXApKSkKICNpZiBFTkFCTEUoUkVHRVhQX1RS
QUNJTkcpCiAgICAgLCBtX3J0VHJhY2VMaXN0KG5ldyBSVFRyYWNlTGlzdCgpKQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIzMTM5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2
ICsxMDIsNyBAQCBjbGFzcyBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OwogY2xhc3MgQ29kZUJs
b2NrOwogY2xhc3MgQ29kZUNhY2hlOwogY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CitjbGFzcyBD
b21wYWN0VmFyaWFibGVNYXA7CiBjbGFzcyBDdXN0b21HZXR0ZXJTZXR0ZXI7CiBjbGFzcyBET01B
dHRyaWJ1dGVHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFeGVjU3RhdGU7CkBAIC03MDksNiArNzEwLDcg
QEAgcHVibGljOgogICAgIHZvaWQgcmVsZWFzZVJlZ0V4cFBhdHRlcm5Db250ZXhCdWZmZXIoKTsK
ICNlbmRpZgogCisgICAgUmVmPENvbXBhY3RWYXJpYWJsZU1hcD4gbV9jb21wYWN0VmFyaWFibGVN
YXA7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGFzT3duUHJvcGVydHlDYWNoZT4gbV9oYXNPd25Q
cm9wZXJ0eUNhY2hlOwogICAgIEFMV0FZU19JTkxJTkUgSGFzT3duUHJvcGVydHlDYWNoZSogaGFz
T3duUHJvcGVydHlDYWNoZSgpIHsgcmV0dXJuIG1faGFzT3duUHJvcGVydHlDYWNoZS5nZXQoKTsg
fQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>