<?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>156647</bug_id>
          
          <creation_ts>2016-04-15 15:58:30 -0700</creation_ts>
          <short_desc>iTunes crashing JavaScriptCore.dll</short_desc>
          <delta_ts>2019-05-03 19:21:06 -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>
          <dependson>156708</dependson>
    
    <dependson>156748</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>nehaganoda</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1184254</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-15 15:58:30 -0700</bug_when>
    <thetext>For Windows we create thread specific API built upon the TLS APIs in Windows.  The thread specific key code for windows does not call any destructor when the key is destroyed.  Instead the thread specific key destructors are called from the function ThreadSpecificThreadExit() and it is called from wtfThreadEntryPoint() right before the thread exits.

The problem here is that wtfThreadEntryPoint() is only called for threads created by WTF typically via JavaScriptCore or WebKit.  The crash happens when a thread created by some other means calls into JavaScript and gets added to the list of threads that MachineThread tracks AND that thread later exits.  In that case, the thread specific key destructor MachineThread::removeThread() will never be called by the &quot;foreign&quot; thread.  MachineThread tries to manage a thread, including walking its stack, but the thread no longer exists.

The fix is to change the WTF ThreadSpecific wrappers to use FLS, which does of a callback when the fiber exits.  Since we don&apos;t support multiple fibers, there will be only one fiber per thread.  This makes FLS work just like TLS for our purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184255</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-15 15:58:49 -0700</bug_when>
    <thetext>rdar://problem/25435085</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184260</commentid>
    <comment_count>2</comment_count>
      <attachid>276522</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-15 16:31:54 -0700</bug_when>
    <thetext>Created attachment 276522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184265</commentid>
    <comment_count>3</comment_count>
      <attachid>276522</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-15 16:42:02 -0700</bug_when>
    <thetext>Comment on attachment 276522
Patch

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

&gt; Source/WTF/ChangeLog:21
&gt; +        The fix is to change from using TLS to using FLS (Fiber Local Storage).  Although
&gt; +        Windows allows multiple fibers per thread, WebKit is not designed to work with a
&gt; +        multiple fibers per thread.  When ther is only one fiber per thread, FLS works just
&gt; +        like TLS, but it has the destroy callback.

Let&apos;s double-check that our clients only use one fiber per thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184267</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-15 16:47:06 -0700</bug_when>
    <thetext>See for example https://bugs.webkit.org/show_bug.cgi?id=102411.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184276</commentid>
    <comment_count>5</comment_count>
      <attachid>276528</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-15 17:10:56 -0700</bug_when>
    <thetext>Created attachment 276528
Patch - Fixed cast issue I didn&apos;t see with VS 2015 Express</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184284</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-15 17:28:06 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 276522 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=276522&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:21
&gt; &gt; +        The fix is to change from using TLS to using FLS (Fiber Local Storage).  Although
&gt; &gt; +        Windows allows multiple fibers per thread, WebKit is not designed to work with a
&gt; &gt; +        multiple fibers per thread.  When ther is only one fiber per thread, FLS works just
&gt; &gt; +        like TLS, but it has the destroy callback.
&gt; 
&gt; Let&apos;s double-check that our clients only use one fiber per thread.

I check with the iTunes team and they only use one fiber per thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184287</commentid>
    <comment_count>7</comment_count>
      <attachid>276531</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-15 17:37:47 -0700</bug_when>
    <thetext>Created attachment 276531
Patch - Fixed the other cast that the EWS bot didn&apos;t catch the first time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184324</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-15 21:52:04 -0700</bug_when>
    <thetext>Committed r199621: &lt;http://trac.webkit.org/changeset/199621&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184329</commentid>
    <comment_count>9</comment_count>
      <attachid>276531</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-15 22:35:52 -0700</bug_when>
    <thetext>Comment on attachment 276531
Patch - Fixed the other cast that the EWS bot didn&apos;t catch the first time

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

&gt; Source/WTF/wtf/ThreadSpecific.h:170
&gt; +    DWORD flsKey = FlsAlloc(reinterpret_cast&lt;PFLS_CALLBACK_FUNCTION&gt;(destructor));

Is this reinterpret_cast safe? If so, why?

&gt; Source/WTF/wtf/ThreadSpecific.h:196
&gt; +    DWORD flsKey = FlsAlloc(reinterpret_cast&lt;PFLS_CALLBACK_FUNCTION&gt;(destroy));

Same question.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184330</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-15 22:37:59 -0700</bug_when>
    <thetext>Apparently Geoff already reviewed this, but it was still set to review? for some reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184676</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-04-18 08:23:23 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Committed r199621: &lt;http://trac.webkit.org/changeset/199621&gt;

It made 50+ tests crash/timeout on Apple Windows bots:
https://build.webkit.org/builders/Apple%20Win%207%20Release%20%28Tests%29/builds/57479</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184716</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-18 10:23:30 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 156708</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184766</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-18 12:23:43 -0700</bug_when>
    <thetext>It appears that at least some of the test crashes are due to running out of FLS indices.  We require one for every ThreadSpecificKey and according to online documentation, it looks like there are only 128 per process.  I&apos;m looking into how we can reduce the number of keys to fix this issue.

There may be other reasons for the test timeouts / crashes.  I&apos;ll check after trying this first fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184906</commentid>
    <comment_count>14</comment_count>
      <attachid>276691</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-18 21:48:56 -0700</bug_when>
    <thetext>Created attachment 276691
Updated Patch - Reduced number of ThreadSpecific values in JSC

I fixed the running out of FLS keys crash with this patch, however I wasn&apos;t able to reproduce all of the crashes seen on the build bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184907</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-18 21:49:52 -0700</bug_when>
    <thetext>Attachment 276691 did not pass style-queue:


ERROR: LayoutTests/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
ERROR: LayoutTests/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
ERROR: LayoutTests/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
ERROR: LayoutTests/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
WARNING: Not running on native Windows.
Total errors found: 4 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>1184909</commentid>
    <comment_count>16</comment_count>
      <attachid>276692</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-18 21:54:32 -0700</bug_when>
    <thetext>Created attachment 276692
Removed tab characters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184933</commentid>
    <comment_count>17</comment_count>
      <attachid>276692</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-18 23:32:58 -0700</bug_when>
    <thetext>Comment on attachment 276692
Removed tab characters

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

r=me

&gt; Source/WTF/ChangeLog:14
&gt; +        This mechanism was put in place for Windos because we layer the WTF::ThreadSpecific

Typo: Windows

&gt; Source/WTF/ChangeLog:20
&gt; +        multiple fibers per thread.  When ther is only one fiber per thread, FLS works just

Typo: there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185020</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-19 07:11:01 -0700</bug_when>
    <thetext>Committed r199726: &lt;http://trac.webkit.org/changeset/199726&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185037</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-19 09:24:54 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 156748</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185045</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-19 09:31:29 -0700</bug_when>
    <thetext>The WebKit bots build and test 32 bits.  I had been building and testing 64 bits.  Rolled out the latest change.  Building 32 bits now and will test after that is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185265</commentid>
    <comment_count>21</comment_count>
      <attachid>276786</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-19 18:15:43 -0700</bug_when>
    <thetext>Created attachment 276786
Patch with fixes for 32 bit Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185308</commentid>
    <comment_count>22</comment_count>
      <attachid>276786</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-19 19:59:18 -0700</bug_when>
    <thetext>Comment on attachment 276786
Patch with fixes for 32 bit Windows

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

&gt; Source/WTF/ChangeLog:14
&gt; +        This mechanism was put in place for Windos because we layer the WTF::ThreadSpecific

still have typo: /Windos/Windows/.

&gt; Source/WTF/ChangeLog:16
&gt; +        a thread exiting callback the way that pthread_create_key.

I think you meant to say &quot;that pthread_create_key has.&quot;

&gt; Source/WTF/ChangeLog:20
&gt; +        multiple fibers per thread.  When ther is only one fiber per thread, FLS works just

typo: /ther/there/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185337</commentid>
    <comment_count>23</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-04-19 22:13:10 -0700</bug_when>
    <thetext>Committed r199762: &lt;http://trac.webkit.org/changeset/199762&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276522</attachid>
            <date>2016-04-15 16:31:54 -0700</date>
            <delta_ts>2016-04-15 17:10:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>156647.patch</filename>
            <type>text/plain</type>
            <size>10945</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTk2MTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA0LTE1ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGlUdW5lcyBjcmFzaGluZyBKYXZhU2NyaXB0Q29y
ZS5kbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NjY0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElm
IGEgdGhyZWFkIHdhcyBjcmVhdGVkIHdpdGhvdXQgdXNpbmcgdGhlIFdURiB0aHJlYWQgYXBpcyBh
bmQgdGhhdCB0aHJlYWQgdXNlcworICAgICAgICBhIEphdmFTY3JpcHQgVk0gYW5kIHRoYXQgdGhy
ZWFkIGV4aXRzIHdpdGggdGhlIFZNIHN0aWxsIGFyb3VuZCwgSlNDIHdvbid0IGtub3cKKyAgICAg
ICAgdGhhdCB0aGUgdGhyZWFkIGhhcyBleGl0ZWQuICBDdXJyZW50bHksIHdlIHVzZSBUaHJlYWRT
cGVjaWZpY1RocmVhZEV4aXQoKSB0bworICAgICAgICBjbGVhbiB1cCBhbnkgdGhyZWFkIHNwZWNp
ZmljIGtleXMuICBDbGVhbmluZyB1cCB0aGVzZSBrZXlzIGlzIGhvdyBKU0MgaXMKKyAgICAgICAg
bm90aWZpZWQgb2YgYSB0aHJlYWQgZXhpdC4gIFdlIG9ubHkgY2FsbCBUaHJlYWRTcGVjaWZpY1Ro
cmVhZEV4aXQoKSBmcm9tCisgICAgICAgIHd0ZlRocmVhZEVudHJ5UG9pbnQoKSB3aGVuIHRoZSB0
aHJlYWQgZW50cnkgcG9pbnQgZnVuY3Rpb24gcmV0dXJucy4KKyAgICAgICAgVGhpcyBtZWNoYW5p
c20gd2FzIHB1dCBpbiBwbGFjZSBmb3IgV2luZG9zIGJlY2F1c2Ugd2UgbGF5ZXIgdGhlIFdURjo6
VGhyZWFkU3BlY2lmaWMKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBvbiB0b3Agb2YgVExTIChUaHJl
YWQgTG9jYWwgU3RvcmFnZSksIGJ1dCBUTFMgZG9lc24ndCBoYXZlCisgICAgICAgIGEgdGhyZWFk
IGV4aXRpbmcgY2FsbGJhY2sgdGhlIHdheSB0aGF0IHB0aHJlYWRfY3JlYXRlX2tleS4KKworICAg
ICAgICBUaGUgZml4IGlzIHRvIGNoYW5nZSBmcm9tIHVzaW5nIFRMUyB0byB1c2luZyBGTFMgKEZp
YmVyIExvY2FsIFN0b3JhZ2UpLiAgQWx0aG91Z2gKKyAgICAgICAgV2luZG93cyBhbGxvd3MgbXVs
dGlwbGUgZmliZXJzIHBlciB0aHJlYWQsIFdlYktpdCBpcyBub3QgZGVzaWduZWQgdG8gd29yayB3
aXRoIGEKKyAgICAgICAgbXVsdGlwbGUgZmliZXJzIHBlciB0aHJlYWQuICBXaGVuIHRoZXIgaXMg
b25seSBvbmUgZmliZXIgcGVyIHRocmVhZCwgRkxTIHdvcmtzIGp1c3QKKyAgICAgICAgbGlrZSBU
TFMsIGJ1dCBpdCBoYXMgdGhlIGRlc3Ryb3kgY2FsbGJhY2suCisKKyAgICAgICAgSSByZXN0cnVj
dHVyZWQgdGhlIFdpbmRvd3MgdmVyc2lvbiBvZiBXVEY6OlRocmVhZFNwZWNpZmljIHRvIGJlIGFs
bW9zdCB0aGUgc2FtZQorICAgICAgICBhcyB0aGUgcHRocmVhZCB2ZXJzaW9uLgorICAgICAgICAK
KyAgICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWMuaDoKKyAgICAgICAgKFdURjo6dGhyZWFkU3Bl
Y2lmaWNLZXlDcmVhdGUpOgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVjaWZpY0tleURlbGV0ZSk6
CisgICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0KToKKyAgICAgICAgKFdURjo6dGhyZWFk
U3BlY2lmaWNHZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6VGhyZWFkU3Bl
Y2lmaWMpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6flRocmVhZFNwZWNpZmlj
KToKKyAgICAgICAgKFdURjo6VGhyZWFkU3BlY2lmaWM8VD46OmdldCk6CisgICAgICAgIChXVEY6
OlRocmVhZFNwZWNpZmljPFQ+OjpzZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxU
Pjo6ZGVzdHJveSk6CisgICAgICAgIFJlc3RydWN0dXJlZCB0byB1c2UgRkxTLiAgUmVuYW1lZCBU
TFMqIHRvIEZMUyouCisKKyAgICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3BwOgorICAg
ICAgICAoV1RGOjpmbHNLZXlDb3VudCk6CisgICAgICAgIChXVEY6OmZsc0tleXMpOgorICAgICAg
ICBSZW5hbWVkIGZyb20gdGxzS2V5KigpIHRvIGZsc0tleSooKS4KKworICAgICAgICAoV1RGOjpk
ZXN0cnVjdG9yc0xpc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXN0cnVjdG9yc011dGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleTo6UGxh
dGZvcm1UaHJlYWRTcGVjaWZpY0tleSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBsYXRmb3Jt
VGhyZWFkU3BlY2lmaWNLZXk6On5QbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleTo6c2V0VmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5Ojp2YWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk6OmNhbGxEZXN0
cnVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGxzS2V5Q291bnQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjp0bHNLZXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkU3Bl
Y2lmaWNLZXlDcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVjaWZpY0tl
eURlbGV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkU3BlY2lmaWNHZXQpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpUaHJlYWRTcGVjaWZpY1RocmVhZEV4aXQpOiBEZWxldGVkLgorCisgICAgICAgICog
d3RmL1RocmVhZGluZ1dpbi5jcHA6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQp
OiBFbGltaW5hdGVkIGNhbGwgdG8gVGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0LgorCiAyMDE2LTA0
LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUG9seW1vcnBo
aWNBY2Nlc3Mgc2hvdWxkIGJ1ZmZlciBBY2Nlc3NDYXNlcyBiZWZvcmUgcmVnZW5lcmF0aW5nCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgJKHJldmlzaW9uIDE5OTYxNCkKKysrIFNvdXJjZS9X
VEYvd3RmL1RocmVhZFNwZWNpZmljLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDYgQEAg
cHJpdmF0ZToKIAogICAgICAgICBUKiB2YWx1ZTsKICAgICAgICAgVGhyZWFkU3BlY2lmaWM8VD4q
IG93bmVyOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lk
Kik7Ci0jZW5kaWYKICAgICB9OwogCiAjaWYgVVNFKFBUSFJFQURTKQpAQCAtMTU4LDQ3ICsxNTUs
NjQgQEAgaW5saW5lIHZvaWQgVGhyZWFkU3BlY2lmaWM8VD46OnNldChUKiBwdAogCiAjZWxpZiBP
UyhXSU5ET1dTKQogCi0vLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgVExTIGtleXMgdGhhdCBjYW4g
YmUgY3JlYXRlZC4gRm9yIHNpbXBsaWZpY2F0aW9uLCB3ZSBhc3N1bWUgdGhhdDoKKy8vIFRoZSBt
YXhpbXVtIG51bWJlciBvZiBGTFMga2V5cyB0aGF0IGNhbiBiZSBjcmVhdGVkLiBGb3Igc2ltcGxp
ZmljYXRpb24sIHdlIGFzc3VtZSB0aGF0OgogLy8gMSkgT25jZSB0aGUgaW5zdGFuY2Ugb2YgVGhy
ZWFkU3BlY2lmaWM8PiBpcyBjcmVhdGVkLCBpdCB3aWxsIG5vdCBiZSBkZXN0cnVjdGVkIHVudGls
IHRoZSBwcm9ncmFtIGRpZXMuCiAvLyAyKSBXZSBkbyBub3QgbmVlZCB0byBob2xkIG1hbnkgaW5z
dGFuY2VzIG9mIFRocmVhZFNwZWNpZmljPD4gZGF0YS4gVGhpcyBmaXhlZCBudW1iZXIgc2hvdWxk
IGJlIGZhciBlbm91Z2guCi1jb25zdCBpbnQga01heFRsc0tleVNpemUgPSAyNTY7Citjb25zdCBp
bnQga01heEZsc0tleVNpemUgPSAxMDA7CisKK1dURl9FWFBPUlRfUFJJVkFURSBsb25nJiBmbHNL
ZXlDb3VudCgpOworV1RGX0VYUE9SVF9QUklWQVRFIERXT1JEKiBmbHNLZXlzKCk7CiAKLVdURl9F
WFBPUlRfUFJJVkFURSBsb25nJiB0bHNLZXlDb3VudCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIERX
T1JEKiB0bHNLZXlzKCk7Cit0eXBlZGVmIERXT1JEIFRocmVhZFNwZWNpZmljS2V5OwogCi1jbGFz
cyBQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5OwotdHlwZWRlZiBQbGF0Zm9ybVRocmVhZFNwZWNp
ZmljS2V5KiBUaHJlYWRTcGVjaWZpY0tleTsKK2lubGluZSB2b2lkIHRocmVhZFNwZWNpZmljS2V5
Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5KiBrZXksIHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lkICop
KQoreworICAgIERXT1JEIGZsc0tleSA9IEZsc0FsbG9jKHN0YXRpY19jYXN0PFBGTFNfQ0FMTEJB
Q0tfRlVOQ1RJT04+KGRlc3RydWN0b3IpKTsKKyAgICBpZiAoZmxzS2V5ID09IEZMU19PVVRfT0Zf
SU5ERVhFUykKKyAgICAgICAgQ1JBU0goKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhy
ZWFkU3BlY2lmaWNLZXlDcmVhdGUoVGhyZWFkU3BlY2lmaWNLZXkqLCB2b2lkICgqKSh2b2lkICop
KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKFRocmVh
ZFNwZWNpZmljS2V5KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHRocmVhZFNwZWNpZmljU2V0
KFRocmVhZFNwZWNpZmljS2V5LCB2b2lkKik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdGhy
ZWFkU3BlY2lmaWNHZXQoVGhyZWFkU3BlY2lmaWNLZXkpOworICAgICprZXkgPSBmbHNLZXk7Cit9
CisKK2lubGluZSB2b2lkIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKFRocmVhZFNwZWNpZmljS2V5
IGtleSkKK3sKKyAgICBGbHNGcmVlKGtleSk7Cit9CisKK2lubGluZSB2b2lkIHRocmVhZFNwZWNp
ZmljU2V0KFRocmVhZFNwZWNpZmljS2V5IGtleSwgdm9pZCogZGF0YSkKK3sKKyAgICBGbHNTZXRW
YWx1ZShrZXksIGRhdGEpOworfQorCitpbmxpbmUgdm9pZCogdGhyZWFkU3BlY2lmaWNHZXQoVGhy
ZWFkU3BlY2lmaWNLZXkga2V5KQoreworICAgIHJldHVybiBGbHNHZXRWYWx1ZShrZXkpOworfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFRocmVhZFNwZWNpZmljPFQ+OjpUaHJlYWRT
cGVjaWZpYygpCiAgICAgOiBtX2luZGV4KC0xKQogewotICAgIERXT1JEIHRsc0tleSA9IFRsc0Fs
bG9jKCk7Ci0gICAgaWYgKHRsc0tleSA9PSBUTFNfT1VUX09GX0lOREVYRVMpCisgICAgRFdPUkQg
ZmxzS2V5ID0gRmxzQWxsb2MoZGVzdHJveSk7CisgICAgaWYgKGZsc0tleSA9PSBGTFNfT1VUX09G
X0lOREVYRVMpCiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBtX2luZGV4ID0gSW50ZXJsb2NrZWRJ
bmNyZW1lbnQoJnRsc0tleUNvdW50KCkpIC0gMTsKLSAgICBpZiAobV9pbmRleCA+PSBrTWF4VGxz
S2V5U2l6ZSkKKyAgICBtX2luZGV4ID0gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJmZsc0tleUNvdW50
KCkpIC0gMTsKKyAgICBpZiAobV9pbmRleCA+PSBrTWF4RmxzS2V5U2l6ZSkKICAgICAgICAgQ1JB
U0goKTsKLSAgICB0bHNLZXlzKClbbV9pbmRleF0gPSB0bHNLZXk7CisgICAgZmxzS2V5cygpW21f
aW5kZXhdID0gZmxzS2V5OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFRocmVh
ZFNwZWNpZmljPFQ+Ojp+VGhyZWFkU3BlY2lmaWMoKQogewotICAgIC8vIERvZXMgbm90IGludm9r
ZSBkZXN0cnVjdG9yIGZ1bmN0aW9ucy4gVGhleSB3aWxsIGJlIGNhbGxlZCBmcm9tIFRocmVhZFNw
ZWNpZmljVGhyZWFkRXhpdCB3aGVuIHRoZSB0aHJlYWQgaXMgZGV0YWNoZWQuCi0gICAgVGxzRnJl
ZSh0bHNLZXlzKClbbV9pbmRleF0pOworICAgIEZsc0ZyZWUoZmxzS2V5cygpW21faW5kZXhdKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUKiBUaHJlYWRTcGVjaWZpYzxUPjo6
Z2V0KCkKIHsKLSAgICBEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8RGF0YSo+KFRsc0dldFZhbHVl
KHRsc0tleXMoKVttX2luZGV4XSkpOworICAgIERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxEYXRh
Kj4oRmxzR2V0VmFsdWUoZmxzS2V5cygpW21faW5kZXhdKSk7CiAgICAgcmV0dXJuIGRhdGEgPyBk
YXRhLT52YWx1ZSA6IDA7CiB9CiAKQEAgLTIwNyw4ICsyMjEsNyBAQCBpbmxpbmUgdm9pZCBUaHJl
YWRTcGVjaWZpYzxUPjo6c2V0KFQqIHB0CiB7CiAgICAgQVNTRVJUKCFnZXQoKSk7CiAgICAgRGF0
YSogZGF0YSA9IG5ldyBEYXRhKHB0ciwgdGhpcyk7Ci0gICAgZGF0YS0+ZGVzdHJ1Y3RvciA9ICZU
aHJlYWRTcGVjaWZpYzxUPjo6ZGVzdHJveTsKLSAgICBUbHNTZXRWYWx1ZSh0bHNLZXlzKClbbV9p
bmRleF0sIGRhdGEpOworICAgIEZsc1NldFZhbHVlKGZsc0tleXMoKVttX2luZGV4XSwgZGF0YSk7
CiB9CiAKICNlbHNlCkBAIC0yMzIsNyArMjQ1LDcgQEAgaW5saW5lIHZvaWQgVGhyZWFkU3BlY2lm
aWM8VD46OmRlc3Ryb3kodgogI2lmIFVTRShQVEhSRUFEUykKICAgICBwdGhyZWFkX3NldHNwZWNp
ZmljKGRhdGEtPm93bmVyLT5tX2tleSwgMCk7CiAjZWxpZiBPUyhXSU5ET1dTKQotICAgIFRsc1Nl
dFZhbHVlKHRsc0tleXMoKVtkYXRhLT5vd25lci0+bV9pbmRleF0sIDApOworICAgIEZsc1NldFZh
bHVlKGZsc0tleXMoKVtkYXRhLT5vd25lci0+bV9pbmRleF0sIDApOwogI2Vsc2UKICNlcnJvciBU
aHJlYWRTcGVjaWZpYyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0uCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpY1dpbi5jcHAJKHJldmlzaW9uIDE5OTYx
NCkKKysrIFNvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQsMTE3ICsyNCwyMiBAQAogCiAjaWYgT1MoV0lORE9XUykKIAotI2luY2x1ZGUgIlN0
ZExpYkV4dHJhcy5oIgotI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRl
IDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgotCiAjaWYgIVVTRShQVEhSRUFEUykKIAogbmFtZXNw
YWNlIFdURiB7CiAKLXN0YXRpYyBEb3VibHlMaW5rZWRMaXN0PFBsYXRmb3JtVGhyZWFkU3BlY2lm
aWNLZXk+JiBkZXN0cnVjdG9yc0xpc3QoKQotewotICAgIHN0YXRpYyBEb3VibHlMaW5rZWRMaXN0
PFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk+IHN0YXRpY0xpc3Q7Ci0gICAgcmV0dXJuIHN0YXRp
Y0xpc3Q7Ci19Ci0KLXN0YXRpYyBNdXRleCYgZGVzdHJ1Y3RvcnNNdXRleCgpCi17Ci0gICAgc3Rh
dGljIE11dGV4IHN0YXRpY011dGV4OwotICAgIHJldHVybiBzdGF0aWNNdXRleDsKLX0KLQotY2xh
c3MgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSA6IHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9k
ZTxQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5PiB7Ci1wdWJsaWM6Ci0gICAgZnJpZW5kIGNsYXNz
IERvdWJseUxpbmtlZExpc3ROb2RlPFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk+OwotCi0gICAg
UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSh2b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCAqKSkKLSAg
ICAgICAgOiBtX2Rlc3RydWN0b3IoZGVzdHJ1Y3RvcikKLSAgICB7Ci0gICAgICAgIG1fdGxzS2V5
ID0gVGxzQWxsb2MoKTsKLSAgICAgICAgaWYgKG1fdGxzS2V5ID09IFRMU19PVVRfT0ZfSU5ERVhF
UykKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgfQotCi0gICAgflBsYXRmb3JtVGhyZWFkU3Bl
Y2lmaWNLZXkoKQotICAgIHsKLSAgICAgICAgVGxzRnJlZShtX3Rsc0tleSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBzZXRWYWx1ZSh2b2lkKiBkYXRhKSB7IFRsc1NldFZhbHVlKG1fdGxzS2V5LCBkYXRh
KTsgfQotICAgIHZvaWQqIHZhbHVlKCkgeyByZXR1cm4gVGxzR2V0VmFsdWUobV90bHNLZXkpOyB9
Ci0KLSAgICB2b2lkIGNhbGxEZXN0cnVjdG9yKCkKLSAgICB7Ci0gICAgICAgaWYgKHZvaWQqIGRh
dGEgPSB2YWx1ZSgpKQotICAgICAgICAgICAgbV9kZXN0cnVjdG9yKGRhdGEpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICB2b2lkICgqbV9kZXN0cnVjdG9yKSh2b2lkICopOwotICAgIERXT1JEIG1f
dGxzS2V5OwotICAgIFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkqIG1fcHJldjsKLSAgICBQbGF0
Zm9ybVRocmVhZFNwZWNpZmljS2V5KiBtX25leHQ7Ci19OwotCi1sb25nJiB0bHNLZXlDb3VudCgp
Citsb25nJiBmbHNLZXlDb3VudCgpCiB7CiAgICAgc3RhdGljIGxvbmcgY291bnQ7CiAgICAgcmV0
dXJuIGNvdW50OwogfQogCi1EV09SRCogdGxzS2V5cygpCitEV09SRCogZmxzS2V5cygpCiB7Ci0g
ICAgc3RhdGljIERXT1JEIGtleXNba01heFRsc0tleVNpemVdOworICAgIHN0YXRpYyBEV09SRCBr
ZXlzW2tNYXhGbHNLZXlTaXplXTsKICAgICByZXR1cm4ga2V5czsKIH0KIAotdm9pZCB0aHJlYWRT
cGVjaWZpY0tleUNyZWF0ZShUaHJlYWRTcGVjaWZpY0tleSoga2V5LCB2b2lkICgqZGVzdHJ1Y3Rv
cikodm9pZCAqKSkKLXsKLSAgICAvLyBVc2UgdGhlIG9yaWdpbmFsIG1hbGxvYygpIGluc3RlYWQg
b2YgZmFzdE1hbGxvYygpIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGluIEZhc3RNYWxsb2MgY29kZS4K
LSAgICAqa2V5ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSo+KDo6bWFs
bG9jKHNpemVvZihQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KSkpOwotICAgIG5ldyAoKmtleSkg
UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleShkZXN0cnVjdG9yKTsKLQotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihkZXN0cnVjdG9yc011dGV4KCkpOwotICAgIGRlc3RydWN0b3JzTGlzdCgpLnB1c2go
KmtleSk7Ci19Ci0KLXZvaWQgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUoVGhyZWFkU3BlY2lmaWNL
ZXkga2V5KQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihkZXN0cnVjdG9yc011dGV4KCkpOwot
ICAgIGRlc3RydWN0b3JzTGlzdCgpLnJlbW92ZShrZXkpOwotICAgIGtleS0+flBsYXRmb3JtVGhy
ZWFkU3BlY2lmaWNLZXkoKTsKLSAgICA6OmZyZWUoa2V5KTsKLX0KLQotdm9pZCB0aHJlYWRTcGVj
aWZpY1NldChUaHJlYWRTcGVjaWZpY0tleSBrZXksIHZvaWQqIGRhdGEpCi17Ci0gICAga2V5LT5z
ZXRWYWx1ZShkYXRhKTsKLX0KLQotdm9pZCogdGhyZWFkU3BlY2lmaWNHZXQoVGhyZWFkU3BlY2lm
aWNLZXkga2V5KQotewotICAgIHJldHVybiBrZXktPnZhbHVlKCk7Ci19Ci0KLXZvaWQgVGhyZWFk
U3BlY2lmaWNUaHJlYWRFeGl0KCkKLXsKLSAgICBmb3IgKGxvbmcgaSA9IDA7IGkgPCB0bHNLZXlD
b3VudCgpOyBpKyspIHsKLSAgICAgICAgLy8gVGhlIGxheW91dCBvZiBUaHJlYWRTcGVjaWZpYzxU
Pjo6RGF0YSBkb2VzIG5vdCBkZXBlbmQgb24gVC4gU28gd2UgYXJlIHNhZmUgdG8gZG8gdGhlIHN0
YXRpYyBjYXN0IHRvIFRocmVhZFNwZWNpZmljPGludD4gaW4gb3JkZXIgdG8gYWNjZXNzIGl0cyBk
YXRhIG1lbWJlci4KLSAgICAgICAgVGhyZWFkU3BlY2lmaWM8aW50Pjo6RGF0YSogZGF0YSA9IHN0
YXRpY19jYXN0PFRocmVhZFNwZWNpZmljPGludD46OkRhdGEqPihUbHNHZXRWYWx1ZSh0bHNLZXlz
KClbaV0pKTsKLSAgICAgICAgaWYgKGRhdGEpCi0gICAgICAgICAgICBkYXRhLT5kZXN0cnVjdG9y
KGRhdGEpOwotICAgIH0KLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihkZXN0cnVjdG9yc011dGV4
KCkpOwotICAgIFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkqIGtleSA9IGRlc3RydWN0b3JzTGlz
dCgpLmhlYWQoKTsKLSAgICB3aGlsZSAoa2V5KSB7Ci0gICAgICAgIFBsYXRmb3JtVGhyZWFkU3Bl
Y2lmaWNLZXkqIG5leHRLZXkgPSBrZXktPm5leHQoKTsKLSAgICAgICAga2V5LT5jYWxsRGVzdHJ1
Y3RvcigpOwotICAgICAgICBrZXkgPSBuZXh0S2V5OwotICAgIH0KLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV1RGCiAKICNlbmRpZiAvLyAhVVNFKFBUSFJFQURTKQpJbmRleDogU291cmNlL1dURi93dGYv
VGhyZWFkaW5nV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdX
aW4uY3BwCShyZXZpc2lvbiAxOTk2MTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTAgKzEwMiw2IEBACiAjaW5jbHVkZSA8d3RmL1Jh
bmRvbU51bWJlclNlZWQuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCi0jaWYg
IVVTRShQVEhSRUFEUykgJiYgT1MoV0lORE9XUykKLSNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5o
IgotI2VuZGlmCi0KICNpZiBIQVZFKEVSUk5PX0gpCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNlbmRp
ZgpAQCAtMTk5LDExICsxOTUsNiBAQCBzdGF0aWMgdW5zaWduZWQgX19zdGRjYWxsIHd0ZlRocmVh
ZEVudHJ5CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4gaW52
b2NhdGlvbihzdGF0aWNfY2FzdDxUaHJlYWRGdW5jdGlvbkludm9jYXRpb24qPihwYXJhbSkpOwog
ICAgIGludm9jYXRpb24tPmZ1bmN0aW9uKGludm9jYXRpb24tPmRhdGEpOwogCi0jaWYgIVVTRShQ
VEhSRUFEUykgJiYgT1MoV0lORE9XUykKLSAgICAvLyBEbyB0aGUgVExTIGNsZWFudXAuCi0gICAg
VGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0KCk7Ci0jZW5kaWYKLQogICAgIHJldHVybiAwOwogfQog
Cg==
</data>
<flag name="review"
          id="300809"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276528</attachid>
            <date>2016-04-15 17:10:56 -0700</date>
            <delta_ts>2016-04-15 17:37:47 -0700</delta_ts>
            <desc>Patch - Fixed cast issue I didn&apos;t see with VS 2015 Express</desc>
            <filename>156647-2.patch</filename>
            <type>text/plain</type>
            <size>10950</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTk2MTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA0LTE1ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGlUdW5lcyBjcmFzaGluZyBKYXZhU2NyaXB0Q29y
ZS5kbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NjY0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElm
IGEgdGhyZWFkIHdhcyBjcmVhdGVkIHdpdGhvdXQgdXNpbmcgdGhlIFdURiB0aHJlYWQgYXBpcyBh
bmQgdGhhdCB0aHJlYWQgdXNlcworICAgICAgICBhIEphdmFTY3JpcHQgVk0gYW5kIHRoYXQgdGhy
ZWFkIGV4aXRzIHdpdGggdGhlIFZNIHN0aWxsIGFyb3VuZCwgSlNDIHdvbid0IGtub3cKKyAgICAg
ICAgdGhhdCB0aGUgdGhyZWFkIGhhcyBleGl0ZWQuICBDdXJyZW50bHksIHdlIHVzZSBUaHJlYWRT
cGVjaWZpY1RocmVhZEV4aXQoKSB0bworICAgICAgICBjbGVhbiB1cCBhbnkgdGhyZWFkIHNwZWNp
ZmljIGtleXMuICBDbGVhbmluZyB1cCB0aGVzZSBrZXlzIGlzIGhvdyBKU0MgaXMKKyAgICAgICAg
bm90aWZpZWQgb2YgYSB0aHJlYWQgZXhpdC4gIFdlIG9ubHkgY2FsbCBUaHJlYWRTcGVjaWZpY1Ro
cmVhZEV4aXQoKSBmcm9tCisgICAgICAgIHd0ZlRocmVhZEVudHJ5UG9pbnQoKSB3aGVuIHRoZSB0
aHJlYWQgZW50cnkgcG9pbnQgZnVuY3Rpb24gcmV0dXJucy4KKyAgICAgICAgVGhpcyBtZWNoYW5p
c20gd2FzIHB1dCBpbiBwbGFjZSBmb3IgV2luZG9zIGJlY2F1c2Ugd2UgbGF5ZXIgdGhlIFdURjo6
VGhyZWFkU3BlY2lmaWMKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBvbiB0b3Agb2YgVExTIChUaHJl
YWQgTG9jYWwgU3RvcmFnZSksIGJ1dCBUTFMgZG9lc24ndCBoYXZlCisgICAgICAgIGEgdGhyZWFk
IGV4aXRpbmcgY2FsbGJhY2sgdGhlIHdheSB0aGF0IHB0aHJlYWRfY3JlYXRlX2tleS4KKworICAg
ICAgICBUaGUgZml4IGlzIHRvIGNoYW5nZSBmcm9tIHVzaW5nIFRMUyB0byB1c2luZyBGTFMgKEZp
YmVyIExvY2FsIFN0b3JhZ2UpLiAgQWx0aG91Z2gKKyAgICAgICAgV2luZG93cyBhbGxvd3MgbXVs
dGlwbGUgZmliZXJzIHBlciB0aHJlYWQsIFdlYktpdCBpcyBub3QgZGVzaWduZWQgdG8gd29yayB3
aXRoIGEKKyAgICAgICAgbXVsdGlwbGUgZmliZXJzIHBlciB0aHJlYWQuICBXaGVuIHRoZXIgaXMg
b25seSBvbmUgZmliZXIgcGVyIHRocmVhZCwgRkxTIHdvcmtzIGp1c3QKKyAgICAgICAgbGlrZSBU
TFMsIGJ1dCBpdCBoYXMgdGhlIGRlc3Ryb3kgY2FsbGJhY2suCisKKyAgICAgICAgSSByZXN0cnVj
dHVyZWQgdGhlIFdpbmRvd3MgdmVyc2lvbiBvZiBXVEY6OlRocmVhZFNwZWNpZmljIHRvIGJlIGFs
bW9zdCB0aGUgc2FtZQorICAgICAgICBhcyB0aGUgcHRocmVhZCB2ZXJzaW9uLgorICAgICAgICAK
KyAgICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWMuaDoKKyAgICAgICAgKFdURjo6dGhyZWFkU3Bl
Y2lmaWNLZXlDcmVhdGUpOgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVjaWZpY0tleURlbGV0ZSk6
CisgICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0KToKKyAgICAgICAgKFdURjo6dGhyZWFk
U3BlY2lmaWNHZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6VGhyZWFkU3Bl
Y2lmaWMpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6flRocmVhZFNwZWNpZmlj
KToKKyAgICAgICAgKFdURjo6VGhyZWFkU3BlY2lmaWM8VD46OmdldCk6CisgICAgICAgIChXVEY6
OlRocmVhZFNwZWNpZmljPFQ+OjpzZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxU
Pjo6ZGVzdHJveSk6CisgICAgICAgIFJlc3RydWN0dXJlZCB0byB1c2UgRkxTLiAgUmVuYW1lZCBU
TFMqIHRvIEZMUyouCisKKyAgICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3BwOgorICAg
ICAgICAoV1RGOjpmbHNLZXlDb3VudCk6CisgICAgICAgIChXVEY6OmZsc0tleXMpOgorICAgICAg
ICBSZW5hbWVkIGZyb20gdGxzS2V5KigpIHRvIGZsc0tleSooKS4KKworICAgICAgICAoV1RGOjpk
ZXN0cnVjdG9yc0xpc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXN0cnVjdG9yc011dGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleTo6UGxh
dGZvcm1UaHJlYWRTcGVjaWZpY0tleSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBsYXRmb3Jt
VGhyZWFkU3BlY2lmaWNLZXk6On5QbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleTo6c2V0VmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5Ojp2YWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk6OmNhbGxEZXN0
cnVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGxzS2V5Q291bnQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjp0bHNLZXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkU3Bl
Y2lmaWNLZXlDcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVjaWZpY0tl
eURlbGV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkU3BlY2lmaWNHZXQpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpUaHJlYWRTcGVjaWZpY1RocmVhZEV4aXQpOiBEZWxldGVkLgorCisgICAgICAgICog
d3RmL1RocmVhZGluZ1dpbi5jcHA6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQp
OiBFbGltaW5hdGVkIGNhbGwgdG8gVGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0LgorCiAyMDE2LTA0
LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUG9seW1vcnBo
aWNBY2Nlc3Mgc2hvdWxkIGJ1ZmZlciBBY2Nlc3NDYXNlcyBiZWZvcmUgcmVnZW5lcmF0aW5nCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgJKHJldmlzaW9uIDE5OTYxNCkKKysrIFNvdXJjZS9X
VEYvd3RmL1RocmVhZFNwZWNpZmljLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDYgQEAg
cHJpdmF0ZToKIAogICAgICAgICBUKiB2YWx1ZTsKICAgICAgICAgVGhyZWFkU3BlY2lmaWM8VD4q
IG93bmVyOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lk
Kik7Ci0jZW5kaWYKICAgICB9OwogCiAjaWYgVVNFKFBUSFJFQURTKQpAQCAtMTU4LDQ3ICsxNTUs
NjQgQEAgaW5saW5lIHZvaWQgVGhyZWFkU3BlY2lmaWM8VD46OnNldChUKiBwdAogCiAjZWxpZiBP
UyhXSU5ET1dTKQogCi0vLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgVExTIGtleXMgdGhhdCBjYW4g
YmUgY3JlYXRlZC4gRm9yIHNpbXBsaWZpY2F0aW9uLCB3ZSBhc3N1bWUgdGhhdDoKKy8vIFRoZSBt
YXhpbXVtIG51bWJlciBvZiBGTFMga2V5cyB0aGF0IGNhbiBiZSBjcmVhdGVkLiBGb3Igc2ltcGxp
ZmljYXRpb24sIHdlIGFzc3VtZSB0aGF0OgogLy8gMSkgT25jZSB0aGUgaW5zdGFuY2Ugb2YgVGhy
ZWFkU3BlY2lmaWM8PiBpcyBjcmVhdGVkLCBpdCB3aWxsIG5vdCBiZSBkZXN0cnVjdGVkIHVudGls
IHRoZSBwcm9ncmFtIGRpZXMuCiAvLyAyKSBXZSBkbyBub3QgbmVlZCB0byBob2xkIG1hbnkgaW5z
dGFuY2VzIG9mIFRocmVhZFNwZWNpZmljPD4gZGF0YS4gVGhpcyBmaXhlZCBudW1iZXIgc2hvdWxk
IGJlIGZhciBlbm91Z2guCi1jb25zdCBpbnQga01heFRsc0tleVNpemUgPSAyNTY7Citjb25zdCBp
bnQga01heEZsc0tleVNpemUgPSAxMDA7CisKK1dURl9FWFBPUlRfUFJJVkFURSBsb25nJiBmbHNL
ZXlDb3VudCgpOworV1RGX0VYUE9SVF9QUklWQVRFIERXT1JEKiBmbHNLZXlzKCk7CiAKLVdURl9F
WFBPUlRfUFJJVkFURSBsb25nJiB0bHNLZXlDb3VudCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIERX
T1JEKiB0bHNLZXlzKCk7Cit0eXBlZGVmIERXT1JEIFRocmVhZFNwZWNpZmljS2V5OwogCi1jbGFz
cyBQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5OwotdHlwZWRlZiBQbGF0Zm9ybVRocmVhZFNwZWNp
ZmljS2V5KiBUaHJlYWRTcGVjaWZpY0tleTsKK2lubGluZSB2b2lkIHRocmVhZFNwZWNpZmljS2V5
Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5KiBrZXksIHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lkICop
KQoreworICAgIERXT1JEIGZsc0tleSA9IEZsc0FsbG9jKHJlaW50ZXJwcmV0X2Nhc3Q8UEZMU19D
QUxMQkFDS19GVU5DVElPTj4oZGVzdHJ1Y3RvcikpOworICAgIGlmIChmbHNLZXkgPT0gRkxTX09V
VF9PRl9JTkRFWEVTKQorICAgICAgICBDUkFTSCgpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZShUaHJlYWRTcGVjaWZpY0tleSosIHZvaWQgKCopKHZv
aWQgKikpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUo
VGhyZWFkU3BlY2lmaWNLZXkpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyZWFkU3BlY2lm
aWNTZXQoVGhyZWFkU3BlY2lmaWNLZXksIHZvaWQqKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lk
KiB0aHJlYWRTcGVjaWZpY0dldChUaHJlYWRTcGVjaWZpY0tleSk7CisgICAgKmtleSA9IGZsc0tl
eTsKK30KKworaW5saW5lIHZvaWQgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUoVGhyZWFkU3BlY2lm
aWNLZXkga2V5KQoreworICAgIEZsc0ZyZWUoa2V5KTsKK30KKworaW5saW5lIHZvaWQgdGhyZWFk
U3BlY2lmaWNTZXQoVGhyZWFkU3BlY2lmaWNLZXkga2V5LCB2b2lkKiBkYXRhKQoreworICAgIEZs
c1NldFZhbHVlKGtleSwgZGF0YSk7Cit9CisKK2lubGluZSB2b2lkKiB0aHJlYWRTcGVjaWZpY0dl
dChUaHJlYWRTcGVjaWZpY0tleSBrZXkpCit7CisgICAgcmV0dXJuIEZsc0dldFZhbHVlKGtleSk7
Cit9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVGhyZWFkU3BlY2lmaWM8VD46OlRo
cmVhZFNwZWNpZmljKCkKICAgICA6IG1faW5kZXgoLTEpCiB7Ci0gICAgRFdPUkQgdGxzS2V5ID0g
VGxzQWxsb2MoKTsKLSAgICBpZiAodGxzS2V5ID09IFRMU19PVVRfT0ZfSU5ERVhFUykKKyAgICBE
V09SRCBmbHNLZXkgPSBGbHNBbGxvYyhkZXN0cm95KTsKKyAgICBpZiAoZmxzS2V5ID09IEZMU19P
VVRfT0ZfSU5ERVhFUykKICAgICAgICAgQ1JBU0goKTsKIAotICAgIG1faW5kZXggPSBJbnRlcmxv
Y2tlZEluY3JlbWVudCgmdGxzS2V5Q291bnQoKSkgLSAxOwotICAgIGlmIChtX2luZGV4ID49IGtN
YXhUbHNLZXlTaXplKQorICAgIG1faW5kZXggPSBJbnRlcmxvY2tlZEluY3JlbWVudCgmZmxzS2V5
Q291bnQoKSkgLSAxOworICAgIGlmIChtX2luZGV4ID49IGtNYXhGbHNLZXlTaXplKQogICAgICAg
ICBDUkFTSCgpOwotICAgIHRsc0tleXMoKVttX2luZGV4XSA9IHRsc0tleTsKKyAgICBmbHNLZXlz
KClbbV9pbmRleF0gPSBmbHNLZXk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUg
VGhyZWFkU3BlY2lmaWM8VD46On5UaHJlYWRTcGVjaWZpYygpCiB7Ci0gICAgLy8gRG9lcyBub3Qg
aW52b2tlIGRlc3RydWN0b3IgZnVuY3Rpb25zLiBUaGV5IHdpbGwgYmUgY2FsbGVkIGZyb20gVGhy
ZWFkU3BlY2lmaWNUaHJlYWRFeGl0IHdoZW4gdGhlIHRocmVhZCBpcyBkZXRhY2hlZC4KLSAgICBU
bHNGcmVlKHRsc0tleXMoKVttX2luZGV4XSk7CisgICAgRmxzRnJlZShmbHNLZXlzKClbbV9pbmRl
eF0pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQqIFRocmVhZFNwZWNpZmlj
PFQ+OjpnZXQoKQogewotICAgIERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4oVGxzR2V0
VmFsdWUodGxzS2V5cygpW21faW5kZXhdKSk7CisgICAgRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0
PERhdGEqPihGbHNHZXRWYWx1ZShmbHNLZXlzKClbbV9pbmRleF0pKTsKICAgICByZXR1cm4gZGF0
YSA/IGRhdGEtPnZhbHVlIDogMDsKIH0KIApAQCAtMjA3LDggKzIyMSw3IEBAIGlubGluZSB2b2lk
IFRocmVhZFNwZWNpZmljPFQ+OjpzZXQoVCogcHQKIHsKICAgICBBU1NFUlQoIWdldCgpKTsKICAg
ICBEYXRhKiBkYXRhID0gbmV3IERhdGEocHRyLCB0aGlzKTsKLSAgICBkYXRhLT5kZXN0cnVjdG9y
ID0gJlRocmVhZFNwZWNpZmljPFQ+OjpkZXN0cm95OwotICAgIFRsc1NldFZhbHVlKHRsc0tleXMo
KVttX2luZGV4XSwgZGF0YSk7CisgICAgRmxzU2V0VmFsdWUoZmxzS2V5cygpW21faW5kZXhdLCBk
YXRhKTsKIH0KIAogI2Vsc2UKQEAgLTIzMiw3ICsyNDUsNyBAQCBpbmxpbmUgdm9pZCBUaHJlYWRT
cGVjaWZpYzxUPjo6ZGVzdHJveSh2CiAjaWYgVVNFKFBUSFJFQURTKQogICAgIHB0aHJlYWRfc2V0
c3BlY2lmaWMoZGF0YS0+b3duZXItPm1fa2V5LCAwKTsKICNlbGlmIE9TKFdJTkRPV1MpCi0gICAg
VGxzU2V0VmFsdWUodGxzS2V5cygpW2RhdGEtPm93bmVyLT5tX2luZGV4XSwgMCk7CisgICAgRmxz
U2V0VmFsdWUoZmxzS2V5cygpW2RhdGEtPm93bmVyLT5tX2luZGV4XSwgMCk7CiAjZWxzZQogI2Vy
cm9yIFRocmVhZFNwZWNpZmljIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwbGF0Zm9ybS4K
ICNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljV2luLmNwcAkocmV2aXNpb24g
MTk5NjE0KQorKysgU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCwxMTcgKzI0LDIyIEBACiAKICNpZiBPUyhXSU5ET1dTKQogCi0jaW5jbHVk
ZSAiU3RkTGliRXh0cmFzLmgiCi0jaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZlcy5oIgotI2lu
Y2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+Ci0KICNpZiAhVVNFKFBUSFJFQURTKQogCiBu
YW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIERvdWJseUxpbmtlZExpc3Q8UGxhdGZvcm1UaHJlYWRT
cGVjaWZpY0tleT4mIGRlc3RydWN0b3JzTGlzdCgpCi17Ci0gICAgc3RhdGljIERvdWJseUxpbmtl
ZExpc3Q8UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleT4gc3RhdGljTGlzdDsKLSAgICByZXR1cm4g
c3RhdGljTGlzdDsKLX0KLQotc3RhdGljIE11dGV4JiBkZXN0cnVjdG9yc011dGV4KCkKLXsKLSAg
ICBzdGF0aWMgTXV0ZXggc3RhdGljTXV0ZXg7Ci0gICAgcmV0dXJuIHN0YXRpY011dGV4OwotfQot
Ci1jbGFzcyBQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5IDogcHVibGljIERvdWJseUxpbmtlZExp
c3ROb2RlPFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk+IHsKLXB1YmxpYzoKLSAgICBmcmllbmQg
Y2xhc3MgRG91Ymx5TGlua2VkTGlzdE5vZGU8UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleT47Ci0K
LSAgICBQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lkICop
KQotICAgICAgICA6IG1fZGVzdHJ1Y3RvcihkZXN0cnVjdG9yKQotICAgIHsKLSAgICAgICAgbV90
bHNLZXkgPSBUbHNBbGxvYygpOwotICAgICAgICBpZiAobV90bHNLZXkgPT0gVExTX09VVF9PRl9J
TkRFWEVTKQotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0KLSAgICB+UGxhdGZvcm1UaHJl
YWRTcGVjaWZpY0tleSgpCi0gICAgewotICAgICAgICBUbHNGcmVlKG1fdGxzS2V5KTsKLSAgICB9
Ci0KLSAgICB2b2lkIHNldFZhbHVlKHZvaWQqIGRhdGEpIHsgVGxzU2V0VmFsdWUobV90bHNLZXks
IGRhdGEpOyB9Ci0gICAgdm9pZCogdmFsdWUoKSB7IHJldHVybiBUbHNHZXRWYWx1ZShtX3Rsc0tl
eSk7IH0KLQotICAgIHZvaWQgY2FsbERlc3RydWN0b3IoKQotICAgIHsKLSAgICAgICBpZiAodm9p
ZCogZGF0YSA9IHZhbHVlKCkpCi0gICAgICAgICAgICBtX2Rlc3RydWN0b3IoZGF0YSk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIHZvaWQgKCptX2Rlc3RydWN0b3IpKHZvaWQgKik7Ci0gICAgRFdP
UkQgbV90bHNLZXk7Ci0gICAgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSogbV9wcmV2OwotICAg
IFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkqIG1fbmV4dDsKLX07Ci0KLWxvbmcmIHRsc0tleUNv
dW50KCkKK2xvbmcmIGZsc0tleUNvdW50KCkKIHsKICAgICBzdGF0aWMgbG9uZyBjb3VudDsKICAg
ICByZXR1cm4gY291bnQ7CiB9CiAKLURXT1JEKiB0bHNLZXlzKCkKK0RXT1JEKiBmbHNLZXlzKCkK
IHsKLSAgICBzdGF0aWMgRFdPUkQga2V5c1trTWF4VGxzS2V5U2l6ZV07CisgICAgc3RhdGljIERX
T1JEIGtleXNba01heEZsc0tleVNpemVdOwogICAgIHJldHVybiBrZXlzOwogfQogCi12b2lkIHRo
cmVhZFNwZWNpZmljS2V5Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5KiBrZXksIHZvaWQgKCpkZXN0
cnVjdG9yKSh2b2lkICopKQotewotICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgbWFsbG9jKCkgaW5z
dGVhZCBvZiBmYXN0TWFsbG9jKCkgdG8gdXNlIHRoaXMgZnVuY3Rpb24gaW4gRmFzdE1hbGxvYyBj
b2RlLgotICAgICprZXkgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5Kj4o
OjptYWxsb2Moc2l6ZW9mKFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkpKSk7Ci0gICAgbmV3ICgq
a2V5KSBQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KGRlc3RydWN0b3IpOwotCi0gICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKGRlc3RydWN0b3JzTXV0ZXgoKSk7Ci0gICAgZGVzdHJ1Y3RvcnNMaXN0KCku
cHVzaCgqa2V5KTsKLX0KLQotdm9pZCB0aHJlYWRTcGVjaWZpY0tleURlbGV0ZShUaHJlYWRTcGVj
aWZpY0tleSBrZXkpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGRlc3RydWN0b3JzTXV0ZXgo
KSk7Ci0gICAgZGVzdHJ1Y3RvcnNMaXN0KCkucmVtb3ZlKGtleSk7Ci0gICAga2V5LT5+UGxhdGZv
cm1UaHJlYWRTcGVjaWZpY0tleSgpOwotICAgIDo6ZnJlZShrZXkpOwotfQotCi12b2lkIHRocmVh
ZFNwZWNpZmljU2V0KFRocmVhZFNwZWNpZmljS2V5IGtleSwgdm9pZCogZGF0YSkKLXsKLSAgICBr
ZXktPnNldFZhbHVlKGRhdGEpOwotfQotCi12b2lkKiB0aHJlYWRTcGVjaWZpY0dldChUaHJlYWRT
cGVjaWZpY0tleSBrZXkpCi17Ci0gICAgcmV0dXJuIGtleS0+dmFsdWUoKTsKLX0KLQotdm9pZCBU
aHJlYWRTcGVjaWZpY1RocmVhZEV4aXQoKQotewotICAgIGZvciAobG9uZyBpID0gMDsgaSA8IHRs
c0tleUNvdW50KCk7IGkrKykgewotICAgICAgICAvLyBUaGUgbGF5b3V0IG9mIFRocmVhZFNwZWNp
ZmljPFQ+OjpEYXRhIGRvZXMgbm90IGRlcGVuZCBvbiBULiBTbyB3ZSBhcmUgc2FmZSB0byBkbyB0
aGUgc3RhdGljIGNhc3QgdG8gVGhyZWFkU3BlY2lmaWM8aW50PiBpbiBvcmRlciB0byBhY2Nlc3Mg
aXRzIGRhdGEgbWVtYmVyLgotICAgICAgICBUaHJlYWRTcGVjaWZpYzxpbnQ+OjpEYXRhKiBkYXRh
ID0gc3RhdGljX2Nhc3Q8VGhyZWFkU3BlY2lmaWM8aW50Pjo6RGF0YSo+KFRsc0dldFZhbHVlKHRs
c0tleXMoKVtpXSkpOwotICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIGRhdGEtPmRlc3Ry
dWN0b3IoZGF0YSk7Ci0gICAgfQotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGRlc3RydWN0b3Jz
TXV0ZXgoKSk7Ci0gICAgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSoga2V5ID0gZGVzdHJ1Y3Rv
cnNMaXN0KCkuaGVhZCgpOwotICAgIHdoaWxlIChrZXkpIHsKLSAgICAgICAgUGxhdGZvcm1UaHJl
YWRTcGVjaWZpY0tleSogbmV4dEtleSA9IGtleS0+bmV4dCgpOwotICAgICAgICBrZXktPmNhbGxE
ZXN0cnVjdG9yKCk7Ci0gICAgICAgIGtleSA9IG5leHRLZXk7Ci0gICAgfQotfQotCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vICFVU0UoUFRIUkVBRFMpCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZ1dpbi5jcHAJKHJldmlzaW9uIDE5OTYxNCkKKysrIFNvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Z1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMCArMTAyLDYgQEAKICNpbmNsdWRlIDx3
dGYvUmFuZG9tTnVtYmVyU2VlZC5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAK
LSNpZiAhVVNFKFBUSFJFQURTKSAmJiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgIlRocmVhZFNwZWNp
ZmljLmgiCi0jZW5kaWYKLQogI2lmIEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5oPgog
I2VuZGlmCkBAIC0xOTksMTEgKzE5NSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3Rm
VGhyZWFkRW50cnkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
PiBpbnZvY2F0aW9uKHN0YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFt
KSk7CiAgICAgaW52b2NhdGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7CiAKLSNpZiAh
VVNFKFBUSFJFQURTKSAmJiBPUyhXSU5ET1dTKQotICAgIC8vIERvIHRoZSBUTFMgY2xlYW51cC4K
LSAgICBUaHJlYWRTcGVjaWZpY1RocmVhZEV4aXQoKTsKLSNlbmRpZgotCiAgICAgcmV0dXJuIDA7
CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276531</attachid>
            <date>2016-04-15 17:37:47 -0700</date>
            <delta_ts>2016-04-18 21:48:56 -0700</delta_ts>
            <desc>Patch - Fixed the other cast that the EWS bot didn&apos;t catch the first time</desc>
            <filename>156647-3.patch</filename>
            <type>text/plain</type>
            <size>10992</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTk2MTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA0LTE1ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIGlUdW5lcyBjcmFzaGluZyBKYXZhU2NyaXB0Q29y
ZS5kbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NjY0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElm
IGEgdGhyZWFkIHdhcyBjcmVhdGVkIHdpdGhvdXQgdXNpbmcgdGhlIFdURiB0aHJlYWQgYXBpcyBh
bmQgdGhhdCB0aHJlYWQgdXNlcworICAgICAgICBhIEphdmFTY3JpcHQgVk0gYW5kIHRoYXQgdGhy
ZWFkIGV4aXRzIHdpdGggdGhlIFZNIHN0aWxsIGFyb3VuZCwgSlNDIHdvbid0IGtub3cKKyAgICAg
ICAgdGhhdCB0aGUgdGhyZWFkIGhhcyBleGl0ZWQuICBDdXJyZW50bHksIHdlIHVzZSBUaHJlYWRT
cGVjaWZpY1RocmVhZEV4aXQoKSB0bworICAgICAgICBjbGVhbiB1cCBhbnkgdGhyZWFkIHNwZWNp
ZmljIGtleXMuICBDbGVhbmluZyB1cCB0aGVzZSBrZXlzIGlzIGhvdyBKU0MgaXMKKyAgICAgICAg
bm90aWZpZWQgb2YgYSB0aHJlYWQgZXhpdC4gIFdlIG9ubHkgY2FsbCBUaHJlYWRTcGVjaWZpY1Ro
cmVhZEV4aXQoKSBmcm9tCisgICAgICAgIHd0ZlRocmVhZEVudHJ5UG9pbnQoKSB3aGVuIHRoZSB0
aHJlYWQgZW50cnkgcG9pbnQgZnVuY3Rpb24gcmV0dXJucy4KKyAgICAgICAgVGhpcyBtZWNoYW5p
c20gd2FzIHB1dCBpbiBwbGFjZSBmb3IgV2luZG9zIGJlY2F1c2Ugd2UgbGF5ZXIgdGhlIFdURjo6
VGhyZWFkU3BlY2lmaWMKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBvbiB0b3Agb2YgVExTIChUaHJl
YWQgTG9jYWwgU3RvcmFnZSksIGJ1dCBUTFMgZG9lc24ndCBoYXZlCisgICAgICAgIGEgdGhyZWFk
IGV4aXRpbmcgY2FsbGJhY2sgdGhlIHdheSB0aGF0IHB0aHJlYWRfY3JlYXRlX2tleS4KKworICAg
ICAgICBUaGUgZml4IGlzIHRvIGNoYW5nZSBmcm9tIHVzaW5nIFRMUyB0byB1c2luZyBGTFMgKEZp
YmVyIExvY2FsIFN0b3JhZ2UpLiAgQWx0aG91Z2gKKyAgICAgICAgV2luZG93cyBhbGxvd3MgbXVs
dGlwbGUgZmliZXJzIHBlciB0aHJlYWQsIFdlYktpdCBpcyBub3QgZGVzaWduZWQgdG8gd29yayB3
aXRoIGEKKyAgICAgICAgbXVsdGlwbGUgZmliZXJzIHBlciB0aHJlYWQuICBXaGVuIHRoZXIgaXMg
b25seSBvbmUgZmliZXIgcGVyIHRocmVhZCwgRkxTIHdvcmtzIGp1c3QKKyAgICAgICAgbGlrZSBU
TFMsIGJ1dCBpdCBoYXMgdGhlIGRlc3Ryb3kgY2FsbGJhY2suCisKKyAgICAgICAgSSByZXN0cnVj
dHVyZWQgdGhlIFdpbmRvd3MgdmVyc2lvbiBvZiBXVEY6OlRocmVhZFNwZWNpZmljIHRvIGJlIGFs
bW9zdCB0aGUgc2FtZQorICAgICAgICBhcyB0aGUgcHRocmVhZCB2ZXJzaW9uLgorICAgICAgICAK
KyAgICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWMuaDoKKyAgICAgICAgKFdURjo6dGhyZWFkU3Bl
Y2lmaWNLZXlDcmVhdGUpOgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVjaWZpY0tleURlbGV0ZSk6
CisgICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0KToKKyAgICAgICAgKFdURjo6dGhyZWFk
U3BlY2lmaWNHZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6VGhyZWFkU3Bl
Y2lmaWMpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6flRocmVhZFNwZWNpZmlj
KToKKyAgICAgICAgKFdURjo6VGhyZWFkU3BlY2lmaWM8VD46OmdldCk6CisgICAgICAgIChXVEY6
OlRocmVhZFNwZWNpZmljPFQ+OjpzZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxU
Pjo6ZGVzdHJveSk6CisgICAgICAgIFJlc3RydWN0dXJlZCB0byB1c2UgRkxTLiAgUmVuYW1lZCBU
TFMqIHRvIEZMUyouCisKKyAgICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3BwOgorICAg
ICAgICAoV1RGOjpmbHNLZXlDb3VudCk6CisgICAgICAgIChXVEY6OmZsc0tleXMpOgorICAgICAg
ICBSZW5hbWVkIGZyb20gdGxzS2V5KigpIHRvIGZsc0tleSooKS4KKworICAgICAgICAoV1RGOjpk
ZXN0cnVjdG9yc0xpc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXN0cnVjdG9yc011dGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleTo6UGxh
dGZvcm1UaHJlYWRTcGVjaWZpY0tleSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBsYXRmb3Jt
VGhyZWFkU3BlY2lmaWNLZXk6On5QbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleTo6c2V0VmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5Ojp2YWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk6OmNhbGxEZXN0
cnVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGxzS2V5Q291bnQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjp0bHNLZXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkU3Bl
Y2lmaWNLZXlDcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVjaWZpY0tl
eURlbGV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkU3BlY2lmaWNHZXQpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpUaHJlYWRTcGVjaWZpY1RocmVhZEV4aXQpOiBEZWxldGVkLgorCisgICAgICAgICog
d3RmL1RocmVhZGluZ1dpbi5jcHA6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQp
OiBFbGltaW5hdGVkIGNhbGwgdG8gVGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0LgorCiAyMDE2LTA0
LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUG9seW1vcnBo
aWNBY2Nlc3Mgc2hvdWxkIGJ1ZmZlciBBY2Nlc3NDYXNlcyBiZWZvcmUgcmVnZW5lcmF0aW5nCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljLmgJKHJldmlzaW9uIDE5OTYxNCkKKysrIFNvdXJjZS9X
VEYvd3RmL1RocmVhZFNwZWNpZmljLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDYgQEAg
cHJpdmF0ZToKIAogICAgICAgICBUKiB2YWx1ZTsKICAgICAgICAgVGhyZWFkU3BlY2lmaWM8VD4q
IG93bmVyOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lk
Kik7Ci0jZW5kaWYKICAgICB9OwogCiAjaWYgVVNFKFBUSFJFQURTKQpAQCAtMTU4LDQ3ICsxNTUs
NjQgQEAgaW5saW5lIHZvaWQgVGhyZWFkU3BlY2lmaWM8VD46OnNldChUKiBwdAogCiAjZWxpZiBP
UyhXSU5ET1dTKQogCi0vLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgVExTIGtleXMgdGhhdCBjYW4g
YmUgY3JlYXRlZC4gRm9yIHNpbXBsaWZpY2F0aW9uLCB3ZSBhc3N1bWUgdGhhdDoKKy8vIFRoZSBt
YXhpbXVtIG51bWJlciBvZiBGTFMga2V5cyB0aGF0IGNhbiBiZSBjcmVhdGVkLiBGb3Igc2ltcGxp
ZmljYXRpb24sIHdlIGFzc3VtZSB0aGF0OgogLy8gMSkgT25jZSB0aGUgaW5zdGFuY2Ugb2YgVGhy
ZWFkU3BlY2lmaWM8PiBpcyBjcmVhdGVkLCBpdCB3aWxsIG5vdCBiZSBkZXN0cnVjdGVkIHVudGls
IHRoZSBwcm9ncmFtIGRpZXMuCiAvLyAyKSBXZSBkbyBub3QgbmVlZCB0byBob2xkIG1hbnkgaW5z
dGFuY2VzIG9mIFRocmVhZFNwZWNpZmljPD4gZGF0YS4gVGhpcyBmaXhlZCBudW1iZXIgc2hvdWxk
IGJlIGZhciBlbm91Z2guCi1jb25zdCBpbnQga01heFRsc0tleVNpemUgPSAyNTY7Citjb25zdCBp
bnQga01heEZsc0tleVNpemUgPSAxMDA7CisKK1dURl9FWFBPUlRfUFJJVkFURSBsb25nJiBmbHNL
ZXlDb3VudCgpOworV1RGX0VYUE9SVF9QUklWQVRFIERXT1JEKiBmbHNLZXlzKCk7CiAKLVdURl9F
WFBPUlRfUFJJVkFURSBsb25nJiB0bHNLZXlDb3VudCgpOwotV1RGX0VYUE9SVF9QUklWQVRFIERX
T1JEKiB0bHNLZXlzKCk7Cit0eXBlZGVmIERXT1JEIFRocmVhZFNwZWNpZmljS2V5OwogCi1jbGFz
cyBQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5OwotdHlwZWRlZiBQbGF0Zm9ybVRocmVhZFNwZWNp
ZmljS2V5KiBUaHJlYWRTcGVjaWZpY0tleTsKK2lubGluZSB2b2lkIHRocmVhZFNwZWNpZmljS2V5
Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5KiBrZXksIHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lkICop
KQoreworICAgIERXT1JEIGZsc0tleSA9IEZsc0FsbG9jKHJlaW50ZXJwcmV0X2Nhc3Q8UEZMU19D
QUxMQkFDS19GVU5DVElPTj4oZGVzdHJ1Y3RvcikpOworICAgIGlmIChmbHNLZXkgPT0gRkxTX09V
VF9PRl9JTkRFWEVTKQorICAgICAgICBDUkFTSCgpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZShUaHJlYWRTcGVjaWZpY0tleSosIHZvaWQgKCopKHZv
aWQgKikpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUo
VGhyZWFkU3BlY2lmaWNLZXkpOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyZWFkU3BlY2lm
aWNTZXQoVGhyZWFkU3BlY2lmaWNLZXksIHZvaWQqKTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lk
KiB0aHJlYWRTcGVjaWZpY0dldChUaHJlYWRTcGVjaWZpY0tleSk7CisgICAgKmtleSA9IGZsc0tl
eTsKK30KKworaW5saW5lIHZvaWQgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUoVGhyZWFkU3BlY2lm
aWNLZXkga2V5KQoreworICAgIEZsc0ZyZWUoa2V5KTsKK30KKworaW5saW5lIHZvaWQgdGhyZWFk
U3BlY2lmaWNTZXQoVGhyZWFkU3BlY2lmaWNLZXkga2V5LCB2b2lkKiBkYXRhKQoreworICAgIEZs
c1NldFZhbHVlKGtleSwgZGF0YSk7Cit9CisKK2lubGluZSB2b2lkKiB0aHJlYWRTcGVjaWZpY0dl
dChUaHJlYWRTcGVjaWZpY0tleSBrZXkpCit7CisgICAgcmV0dXJuIEZsc0dldFZhbHVlKGtleSk7
Cit9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVGhyZWFkU3BlY2lmaWM8VD46OlRo
cmVhZFNwZWNpZmljKCkKICAgICA6IG1faW5kZXgoLTEpCiB7Ci0gICAgRFdPUkQgdGxzS2V5ID0g
VGxzQWxsb2MoKTsKLSAgICBpZiAodGxzS2V5ID09IFRMU19PVVRfT0ZfSU5ERVhFUykKKyAgICBE
V09SRCBmbHNLZXkgPSBGbHNBbGxvYyhyZWludGVycHJldF9jYXN0PFBGTFNfQ0FMTEJBQ0tfRlVO
Q1RJT04+KGRlc3Ryb3kpKTsKKyAgICBpZiAoZmxzS2V5ID09IEZMU19PVVRfT0ZfSU5ERVhFUykK
ICAgICAgICAgQ1JBU0goKTsKIAotICAgIG1faW5kZXggPSBJbnRlcmxvY2tlZEluY3JlbWVudCgm
dGxzS2V5Q291bnQoKSkgLSAxOwotICAgIGlmIChtX2luZGV4ID49IGtNYXhUbHNLZXlTaXplKQor
ICAgIG1faW5kZXggPSBJbnRlcmxvY2tlZEluY3JlbWVudCgmZmxzS2V5Q291bnQoKSkgLSAxOwor
ICAgIGlmIChtX2luZGV4ID49IGtNYXhGbHNLZXlTaXplKQogICAgICAgICBDUkFTSCgpOwotICAg
IHRsc0tleXMoKVttX2luZGV4XSA9IHRsc0tleTsKKyAgICBmbHNLZXlzKClbbV9pbmRleF0gPSBm
bHNLZXk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVGhyZWFkU3BlY2lmaWM8
VD46On5UaHJlYWRTcGVjaWZpYygpCiB7Ci0gICAgLy8gRG9lcyBub3QgaW52b2tlIGRlc3RydWN0
b3IgZnVuY3Rpb25zLiBUaGV5IHdpbGwgYmUgY2FsbGVkIGZyb20gVGhyZWFkU3BlY2lmaWNUaHJl
YWRFeGl0IHdoZW4gdGhlIHRocmVhZCBpcyBkZXRhY2hlZC4KLSAgICBUbHNGcmVlKHRsc0tleXMo
KVttX2luZGV4XSk7CisgICAgRmxzRnJlZShmbHNLZXlzKClbbV9pbmRleF0pOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFQqIFRocmVhZFNwZWNpZmljPFQ+OjpnZXQoKQogewot
ICAgIERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4oVGxzR2V0VmFsdWUodGxzS2V5cygp
W21faW5kZXhdKSk7CisgICAgRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihGbHNHZXRW
YWx1ZShmbHNLZXlzKClbbV9pbmRleF0pKTsKICAgICByZXR1cm4gZGF0YSA/IGRhdGEtPnZhbHVl
IDogMDsKIH0KIApAQCAtMjA3LDggKzIyMSw3IEBAIGlubGluZSB2b2lkIFRocmVhZFNwZWNpZmlj
PFQ+OjpzZXQoVCogcHQKIHsKICAgICBBU1NFUlQoIWdldCgpKTsKICAgICBEYXRhKiBkYXRhID0g
bmV3IERhdGEocHRyLCB0aGlzKTsKLSAgICBkYXRhLT5kZXN0cnVjdG9yID0gJlRocmVhZFNwZWNp
ZmljPFQ+OjpkZXN0cm95OwotICAgIFRsc1NldFZhbHVlKHRsc0tleXMoKVttX2luZGV4XSwgZGF0
YSk7CisgICAgRmxzU2V0VmFsdWUoZmxzS2V5cygpW21faW5kZXhdLCBkYXRhKTsKIH0KIAogI2Vs
c2UKQEAgLTIzMiw3ICsyNDUsNyBAQCBpbmxpbmUgdm9pZCBUaHJlYWRTcGVjaWZpYzxUPjo6ZGVz
dHJveSh2CiAjaWYgVVNFKFBUSFJFQURTKQogICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoZGF0YS0+
b3duZXItPm1fa2V5LCAwKTsKICNlbGlmIE9TKFdJTkRPV1MpCi0gICAgVGxzU2V0VmFsdWUodGxz
S2V5cygpW2RhdGEtPm93bmVyLT5tX2luZGV4XSwgMCk7CisgICAgRmxzU2V0VmFsdWUoZmxzS2V5
cygpW2RhdGEtPm93bmVyLT5tX2luZGV4XSwgMCk7CiAjZWxzZQogI2Vycm9yIFRocmVhZFNwZWNp
ZmljIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwbGF0Zm9ybS4KICNlbmRpZgpJbmRleDog
U291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1RocmVhZFNwZWNpZmljV2luLmNwcAkocmV2aXNpb24gMTk5NjE0KQorKysgU291
cmNlL1dURi93dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwx
MTcgKzI0LDIyIEBACiAKICNpZiBPUyhXSU5ET1dTKQogCi0jaW5jbHVkZSAiU3RkTGliRXh0cmFz
LmgiCi0jaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZlcy5oIgotI2luY2x1ZGUgPHd0Zi9Eb3Vi
bHlMaW5rZWRMaXN0Lmg+Ci0KICNpZiAhVVNFKFBUSFJFQURTKQogCiBuYW1lc3BhY2UgV1RGIHsK
IAotc3RhdGljIERvdWJseUxpbmtlZExpc3Q8UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleT4mIGRl
c3RydWN0b3JzTGlzdCgpCi17Ci0gICAgc3RhdGljIERvdWJseUxpbmtlZExpc3Q8UGxhdGZvcm1U
aHJlYWRTcGVjaWZpY0tleT4gc3RhdGljTGlzdDsKLSAgICByZXR1cm4gc3RhdGljTGlzdDsKLX0K
LQotc3RhdGljIE11dGV4JiBkZXN0cnVjdG9yc011dGV4KCkKLXsKLSAgICBzdGF0aWMgTXV0ZXgg
c3RhdGljTXV0ZXg7Ci0gICAgcmV0dXJuIHN0YXRpY011dGV4OwotfQotCi1jbGFzcyBQbGF0Zm9y
bVRocmVhZFNwZWNpZmljS2V5IDogcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFBsYXRmb3Jt
VGhyZWFkU3BlY2lmaWNLZXk+IHsKLXB1YmxpYzoKLSAgICBmcmllbmQgY2xhc3MgRG91Ymx5TGlu
a2VkTGlzdE5vZGU8UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleT47Ci0KLSAgICBQbGF0Zm9ybVRo
cmVhZFNwZWNpZmljS2V5KHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lkICopKQotICAgICAgICA6IG1f
ZGVzdHJ1Y3RvcihkZXN0cnVjdG9yKQotICAgIHsKLSAgICAgICAgbV90bHNLZXkgPSBUbHNBbGxv
YygpOwotICAgICAgICBpZiAobV90bHNLZXkgPT0gVExTX09VVF9PRl9JTkRFWEVTKQotICAgICAg
ICAgICAgQ1JBU0goKTsKLSAgICB9Ci0KLSAgICB+UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSgp
Ci0gICAgewotICAgICAgICBUbHNGcmVlKG1fdGxzS2V5KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNl
dFZhbHVlKHZvaWQqIGRhdGEpIHsgVGxzU2V0VmFsdWUobV90bHNLZXksIGRhdGEpOyB9Ci0gICAg
dm9pZCogdmFsdWUoKSB7IHJldHVybiBUbHNHZXRWYWx1ZShtX3Rsc0tleSk7IH0KLQotICAgIHZv
aWQgY2FsbERlc3RydWN0b3IoKQotICAgIHsKLSAgICAgICBpZiAodm9pZCogZGF0YSA9IHZhbHVl
KCkpCi0gICAgICAgICAgICBtX2Rlc3RydWN0b3IoZGF0YSk7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHZvaWQgKCptX2Rlc3RydWN0b3IpKHZvaWQgKik7Ci0gICAgRFdPUkQgbV90bHNLZXk7Ci0g
ICAgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSogbV9wcmV2OwotICAgIFBsYXRmb3JtVGhyZWFk
U3BlY2lmaWNLZXkqIG1fbmV4dDsKLX07Ci0KLWxvbmcmIHRsc0tleUNvdW50KCkKK2xvbmcmIGZs
c0tleUNvdW50KCkKIHsKICAgICBzdGF0aWMgbG9uZyBjb3VudDsKICAgICByZXR1cm4gY291bnQ7
CiB9CiAKLURXT1JEKiB0bHNLZXlzKCkKK0RXT1JEKiBmbHNLZXlzKCkKIHsKLSAgICBzdGF0aWMg
RFdPUkQga2V5c1trTWF4VGxzS2V5U2l6ZV07CisgICAgc3RhdGljIERXT1JEIGtleXNba01heEZs
c0tleVNpemVdOwogICAgIHJldHVybiBrZXlzOwogfQogCi12b2lkIHRocmVhZFNwZWNpZmljS2V5
Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5KiBrZXksIHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lkICop
KQotewotICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgbWFsbG9jKCkgaW5zdGVhZCBvZiBmYXN0TWFs
bG9jKCkgdG8gdXNlIHRoaXMgZnVuY3Rpb24gaW4gRmFzdE1hbGxvYyBjb2RlLgotICAgICprZXkg
PSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5Kj4oOjptYWxsb2Moc2l6ZW9m
KFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkpKSk7Ci0gICAgbmV3ICgqa2V5KSBQbGF0Zm9ybVRo
cmVhZFNwZWNpZmljS2V5KGRlc3RydWN0b3IpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGRl
c3RydWN0b3JzTXV0ZXgoKSk7Ci0gICAgZGVzdHJ1Y3RvcnNMaXN0KCkucHVzaCgqa2V5KTsKLX0K
LQotdm9pZCB0aHJlYWRTcGVjaWZpY0tleURlbGV0ZShUaHJlYWRTcGVjaWZpY0tleSBrZXkpCi17
Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGRlc3RydWN0b3JzTXV0ZXgoKSk7Ci0gICAgZGVzdHJ1
Y3RvcnNMaXN0KCkucmVtb3ZlKGtleSk7Ci0gICAga2V5LT5+UGxhdGZvcm1UaHJlYWRTcGVjaWZp
Y0tleSgpOwotICAgIDo6ZnJlZShrZXkpOwotfQotCi12b2lkIHRocmVhZFNwZWNpZmljU2V0KFRo
cmVhZFNwZWNpZmljS2V5IGtleSwgdm9pZCogZGF0YSkKLXsKLSAgICBrZXktPnNldFZhbHVlKGRh
dGEpOwotfQotCi12b2lkKiB0aHJlYWRTcGVjaWZpY0dldChUaHJlYWRTcGVjaWZpY0tleSBrZXkp
Ci17Ci0gICAgcmV0dXJuIGtleS0+dmFsdWUoKTsKLX0KLQotdm9pZCBUaHJlYWRTcGVjaWZpY1Ro
cmVhZEV4aXQoKQotewotICAgIGZvciAobG9uZyBpID0gMDsgaSA8IHRsc0tleUNvdW50KCk7IGkr
KykgewotICAgICAgICAvLyBUaGUgbGF5b3V0IG9mIFRocmVhZFNwZWNpZmljPFQ+OjpEYXRhIGRv
ZXMgbm90IGRlcGVuZCBvbiBULiBTbyB3ZSBhcmUgc2FmZSB0byBkbyB0aGUgc3RhdGljIGNhc3Qg
dG8gVGhyZWFkU3BlY2lmaWM8aW50PiBpbiBvcmRlciB0byBhY2Nlc3MgaXRzIGRhdGEgbWVtYmVy
LgotICAgICAgICBUaHJlYWRTcGVjaWZpYzxpbnQ+OjpEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8
VGhyZWFkU3BlY2lmaWM8aW50Pjo6RGF0YSo+KFRsc0dldFZhbHVlKHRsc0tleXMoKVtpXSkpOwot
ICAgICAgICBpZiAoZGF0YSkKLSAgICAgICAgICAgIGRhdGEtPmRlc3RydWN0b3IoZGF0YSk7Ci0g
ICAgfQotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGRlc3RydWN0b3JzTXV0ZXgoKSk7Ci0gICAg
UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSoga2V5ID0gZGVzdHJ1Y3RvcnNMaXN0KCkuaGVhZCgp
OwotICAgIHdoaWxlIChrZXkpIHsKLSAgICAgICAgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSog
bmV4dEtleSA9IGtleS0+bmV4dCgpOwotICAgICAgICBrZXktPmNhbGxEZXN0cnVjdG9yKCk7Ci0g
ICAgICAgIGtleSA9IG5leHRLZXk7Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
I2VuZGlmIC8vICFVU0UoUFRIUkVBRFMpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAJKHJl
dmlzaW9uIDE5OTYxNCkKKysrIFNvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMiwxMCArMTAyLDYgQEAKICNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVy
U2VlZC5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAKLSNpZiAhVVNFKFBUSFJF
QURTKSAmJiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCi0jZW5kaWYK
LQogI2lmIEhBVkUoRVJSTk9fSCkKICNpbmNsdWRlIDxlcnJuby5oPgogI2VuZGlmCkBAIC0xOTks
MTEgKzE5NSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd3RmVGhyZWFkRW50cnkKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uPiBpbnZvY2F0aW9uKHN0
YXRpY19jYXN0PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbio+KHBhcmFtKSk7CiAgICAgaW52b2Nh
dGlvbi0+ZnVuY3Rpb24oaW52b2NhdGlvbi0+ZGF0YSk7CiAKLSNpZiAhVVNFKFBUSFJFQURTKSAm
JiBPUyhXSU5ET1dTKQotICAgIC8vIERvIHRoZSBUTFMgY2xlYW51cC4KLSAgICBUaHJlYWRTcGVj
aWZpY1RocmVhZEV4aXQoKTsKLSNlbmRpZgotCiAgICAgcmV0dXJuIDA7CiB9CiAK
</data>
<flag name="review"
          id="300818"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276691</attachid>
            <date>2016-04-18 21:48:56 -0700</date>
            <delta_ts>2016-04-18 21:54:32 -0700</delta_ts>
            <desc>Updated Patch - Reduced number of ThreadSpecific values in JSC</desc>
            <filename>156647-4.patch</filename>
            <type>text/plain</type>
            <size>17131</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5Njk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE2LTA0LTE4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIGlUdW5lcyBjcmFzaGluZyBKYXZhU2NyaXB0Q29yZS5kbGwKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjY0NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdpdmVuIHRoYXQgdGhlcmUgdGhlcmUgYXJl
IG9ubHkgMTI4IEZMUyBpbmRpY2VzIGNvbXBhcmVkIHRvIG92ZXIgYSAxMDAwIGZvciBUTFMsIEkK
KyAgICAgICAgZWxpbWluYXRlZCB0aGUgdGhyZWFkIHNwZWNpZmljIG1fdGhyZWFkU3BlY2lmaWNG
b3JUaHJlYWQgYW5kIGluc3RlYWQgd2UgbG9vayBmb3IgdGhlCisgICAgICAgIGN1cnJlbnQgdGhy
ZWFkIGluIG1fcmVnaXN0ZXJlZFRocmVhZHMgbGlzdCB3aGVuIHdlIG5lZWQgaXQuICBJbiBtb3N0
IGNhc2VzIHRoZXJlCisgICAgICAgIHdpbGwgb25seSBiZSBvbmUgdGhyZWFkLgorCisgICAgICAg
ICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhy
ZWFkczo6TWFjaGluZVRocmVhZHMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6fk1h
Y2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRU
aHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGluZVRocmVhZEZvckN1
cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFk
KToKKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorCiAyMDE2LTA0LTE4ICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBBVlguCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtl
ci5jcHAJKHJldmlzaW9uIDE5OTY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
Y2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MiwxNCArMTkyLDEyIEBA
IHN0YXRpYyBpbmxpbmUgUGxhdGZvcm1UaHJlYWQgZ2V0Q3VycmVudFAKIE1hY2hpbmVUaHJlYWRz
OjpNYWNoaW5lVGhyZWFkcyhIZWFwKiBoZWFwKQogICAgIDogbV9yZWdpc3RlcmVkVGhyZWFkcygw
KQogICAgICwgbV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzKDApCi0gICAgLCBtX3Ro
cmVhZFNwZWNpZmljRm9yVGhyZWFkKDApCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICwgbV9o
ZWFwKGhlYXApCiAjZW5kaWYKIHsKICAgICBVTlVTRURfUEFSQU0oaGVhcCk7CiAgICAgdGhyZWFk
U3BlY2lmaWNLZXlDcmVhdGUoJm1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcywgcmVt
b3ZlVGhyZWFkKTsKLSAgICB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZSgmbV90aHJlYWRTcGVjaWZp
Y0ZvclRocmVhZCwgbnVsbHB0cik7CiAgICAgYWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyKCku
YWRkKHRoaXMpOwogfQogCkBAIC0yMDcsNyArMjA1LDYgQEAgTWFjaGluZVRocmVhZHM6On5NYWNo
aW5lVGhyZWFkcygpCiB7CiAgICAgYWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyKCkucmVtb3Zl
KHRoaXMpOwogICAgIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lmaWNGb3JN
YWNoaW5lVGhyZWFkcyk7Ci0gICAgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUobV90aHJlYWRTcGVj
aWZpY0ZvclRocmVhZCk7CiAKICAgICBMb2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJlYWRzTG9jayht
X3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwogICAgIGZvciAoVGhyZWFkKiB0ID0gbV9yZWdpc3Rl
cmVkVGhyZWFkczsgdDspIHsKQEAgLTIzNCwxOCArMjMxLDYgQEAgYm9vbCBNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpvcGVyYXRvcj09KAogI2VuZGlmCiB9CiAKLSNpZm5kZWYgTkRFQlVHCi1zdGF0
aWMgYm9vbCBpc1RocmVhZEluTGlzdChUaHJlYWQqIGxpc3RIZWFkLCBUaHJlYWQqIHRhcmdldCkK
LXsKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbGlzdEhlYWQ7IHRocmVhZDsgdGhyZWFkID0g
dGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICh0aHJlYWQgPT0gdGFyZ2V0KQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0K
IHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogewogICAgIEFTU0VSVCgh
bV9oZWFwLT52bSgpLT5oYXNFeGNsdXNpdmVUaHJlYWQoKSB8fCBtX2hlYXAtPnZtKCktPmV4Y2x1
c2l2ZVRocmVhZCgpID09IHN0ZDo6dGhpc190aHJlYWQ6OmdldF9pZCgpKTsKQEAgLTI1NCwxNSAr
MjM5LDEyIEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRl
eCk7CiAgICAgICAgIEFTU0VSVCh0aHJlYWRTcGVjaWZpY0dldChtX3RocmVhZFNwZWNpZmljRm9y
TWFjaGluZVRocmVhZHMpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQodGhyZWFkU3BlY2lmaWNH
ZXQobV90aHJlYWRTcGVjaWZpY0ZvclRocmVhZCkpOwotICAgICAgICBBU1NFUlQoaXNUaHJlYWRJ
bkxpc3QobV9yZWdpc3RlcmVkVGhyZWFkcywgc3RhdGljX2Nhc3Q8VGhyZWFkKj4odGhyZWFkU3Bl
Y2lmaWNHZXQobV90aHJlYWRTcGVjaWZpY0ZvclRocmVhZCkpKSk7CiAjZW5kaWYKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjcmVhdGVGb3JD
dXJyZW50VGhyZWFkKCk7CiAgICAgdGhyZWFkU3BlY2lmaWNTZXQobV90aHJlYWRTcGVjaWZpY0Zv
ck1hY2hpbmVUaHJlYWRzLCB0aGlzKTsKLSAgICB0aHJlYWRTcGVjaWZpY1NldChtX3RocmVhZFNw
ZWNpZmljRm9yVGhyZWFkLCB0aHJlYWQpOwogCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0
ZXJlZFRocmVhZHNNdXRleCk7CiAKQEAgLTI3MiwxNCArMjU0LDE1IEBAIHZvaWQgTWFjaGluZVRo
cmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogCiBUaHJlYWQqIE1hY2hpbmVUaHJlYWRzOjptYWNo
aW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpCiB7Ci0gICAgVGhyZWFkKiByZXN1bHQgPSBzdGF0
aWNfY2FzdDxUaHJlYWQqPih0aHJlYWRTcGVjaWZpY0dldChtX3RocmVhZFNwZWNpZmljRm9yVGhy
ZWFkKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSNpZm5kZWYgTkRFQlVHCiAgICAg
TG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7Ci0gICAgQVNTRVJUKGlz
VGhyZWFkSW5MaXN0KG1fcmVnaXN0ZXJlZFRocmVhZHMsIHJlc3VsdCkpOwotI2VuZGlmCisgICAg
UGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1UaHJlYWQgPSBnZXRDdXJyZW50UGxhdGZvcm1UaHJlYWQo
KTsKKyAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFk
OyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKCp0aHJlYWQgPT0gcGxhdGZv
cm1UaHJlYWQpCisgICAgICAgICAgICByZXR1cm4gdGhyZWFkOworICAgIH0KIAotICAgIHJldHVy
biByZXN1bHQ7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAogdm9pZCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkKHZvaWQqIHAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJr
ZXIuaAkocmV2aXNpb24gMTk5NjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNiBAQCBwcml2
YXRlOgogICAgIExvY2sgbV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OwogICAgIFRocmVhZCogbV9y
ZWdpc3RlcmVkVGhyZWFkczsKICAgICBXVEY6OlRocmVhZFNwZWNpZmljS2V5IG1fdGhyZWFkU3Bl
Y2lmaWNGb3JNYWNoaW5lVGhyZWFkczsKLSAgICBXVEY6OlRocmVhZFNwZWNpZmljS2V5IG1fdGhy
ZWFkU3BlY2lmaWNGb3JUaHJlYWQ7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIEhlYXAqIG1f
aGVhcDsKICNlbmRpZgpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTY4MikKKysrIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTYtMDQtMTggIE1pY2hh
ZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgaVR1bmVzIGNyYXNoaW5n
IEphdmFTY3JpcHRDb3JlLmRsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2NjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSWYgYSB0aHJlYWQgd2FzIGNyZWF0ZWQgd2l0aG91dCB1c2luZyB0aGUgV1RG
IHRocmVhZCBhcGlzIGFuZCB0aGF0IHRocmVhZCB1c2VzCisgICAgICAgIGEgSmF2YVNjcmlwdCBW
TSBhbmQgdGhhdCB0aHJlYWQgZXhpdHMgd2l0aCB0aGUgVk0gc3RpbGwgYXJvdW5kLCBKU0Mgd29u
J3Qga25vdworICAgICAgICB0aGF0IHRoZSB0aHJlYWQgaGFzIGV4aXRlZC4gIEN1cnJlbnRseSwg
d2UgdXNlIFRocmVhZFNwZWNpZmljVGhyZWFkRXhpdCgpIHRvCisgICAgICAgIGNsZWFuIHVwIGFu
eSB0aHJlYWQgc3BlY2lmaWMga2V5cy4gIENsZWFuaW5nIHVwIHRoZXNlIGtleXMgaXMgaG93IEpT
QyBpcworICAgICAgICBub3RpZmllZCBvZiBhIHRocmVhZCBleGl0LiAgV2Ugb25seSBjYWxsIFRo
cmVhZFNwZWNpZmljVGhyZWFkRXhpdCgpIGZyb20KKyAgICAgICAgd3RmVGhyZWFkRW50cnlQb2lu
dCgpIHdoZW4gdGhlIHRocmVhZCBlbnRyeSBwb2ludCBmdW5jdGlvbiByZXR1cm5zLgorICAgICAg
ICBUaGlzIG1lY2hhbmlzbSB3YXMgcHV0IGluIHBsYWNlIGZvciBXaW5kb3MgYmVjYXVzZSB3ZSBs
YXllciB0aGUgV1RGOjpUaHJlYWRTcGVjaWZpYworICAgICAgICBmdW5jdGlvbmFsaXR5IG9uIHRv
cCBvZiBUTFMgKFRocmVhZCBMb2NhbCBTdG9yYWdlKSwgYnV0IFRMUyBkb2Vzbid0IGhhdmUKKyAg
ICAgICAgYSB0aHJlYWQgZXhpdGluZyBjYWxsYmFjayB0aGUgd2F5IHRoYXQgcHRocmVhZF9jcmVh
dGVfa2V5LgorCisgICAgICAgIFRoZSBmaXggaXMgdG8gY2hhbmdlIGZyb20gdXNpbmcgVExTIHRv
IHVzaW5nIEZMUyAoRmliZXIgTG9jYWwgU3RvcmFnZSkuICBBbHRob3VnaAorICAgICAgICBXaW5k
b3dzIGFsbG93cyBtdWx0aXBsZSBmaWJlcnMgcGVyIHRocmVhZCwgV2ViS2l0IGlzIG5vdCBkZXNp
Z25lZCB0byB3b3JrIHdpdGggYQorICAgICAgICBtdWx0aXBsZSBmaWJlcnMgcGVyIHRocmVhZC4g
IFdoZW4gdGhlciBpcyBvbmx5IG9uZSBmaWJlciBwZXIgdGhyZWFkLCBGTFMgd29ya3MganVzdAor
ICAgICAgICBsaWtlIFRMUywgYnV0IGl0IGhhcyB0aGUgZGVzdHJveSBjYWxsYmFjay4KKworICAg
ICAgICBJIHJlc3RydWN0dXJlZCB0aGUgV2luZG93cyB2ZXJzaW9uIG9mIFdURjo6VGhyZWFkU3Bl
Y2lmaWMgdG8gYmUgYWxtb3N0IHRoZSBzYW1lCisgICAgICAgIGFzIHRoZSBwdGhyZWFkIHZlcnNp
b24uCisKKyAgICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWMuaDoKKyAgICAgICAgKFdURjo6dGhy
ZWFkU3BlY2lmaWNLZXlDcmVhdGUpOgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVjaWZpY0tleURl
bGV0ZSk6CisgICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0KToKKyAgICAgICAgKFdURjo6
dGhyZWFkU3BlY2lmaWNHZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6VGhy
ZWFkU3BlY2lmaWMpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6flRocmVhZFNw
ZWNpZmljKToKKyAgICAgICAgKFdURjo6VGhyZWFkU3BlY2lmaWM8VD46OmdldCk6CisgICAgICAg
IChXVEY6OlRocmVhZFNwZWNpZmljPFQ+OjpzZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVj
aWZpYzxUPjo6ZGVzdHJveSk6CisgICAgICAgIFJlc3RydWN0dXJlZCB0byB1c2UgRkxTLiAgUmVu
YW1lZCBUTFMqIHRvIEZMUyouCisKKyAgICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3Bw
OgorICAgICAgICAoV1RGOjpmbHNLZXlDb3VudCk6CisgICAgICAgIChXVEY6OmZsc0tleXMpOgor
ICAgICAgICBSZW5hbWVkIGZyb20gdGxzS2V5KigpIHRvIGZsc0tleSooKS4KKworICAgICAgICAo
V1RGOjpkZXN0cnVjdG9yc0xpc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXN0cnVjdG9y
c011dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tl
eTo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBs
YXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk6On5QbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleTo6c2V0VmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5Ojp2YWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk6OmNh
bGxEZXN0cnVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGxzS2V5Q291bnQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjp0bHNLZXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhy
ZWFkU3BlY2lmaWNLZXlDcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVj
aWZpY0tleURlbGV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkU3BlY2lmaWNHZXQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpY1RocmVhZEV4aXQpOiBEZWxldGVkLgorCisgICAg
ICAgICogd3RmL1RocmVhZGluZ1dpbi5jcHA6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5
UG9pbnQpOiBFbGltaW5hdGVkIGNhbGwgdG8gVGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0LgorCiAy
MDE2LTA0LTE4ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTk5NjIxLgpJbmRleDogU291cmNlL1dURi93
dGYvVGhyZWFkU3BlY2lmaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRT
cGVjaWZpYy5oCShyZXZpc2lvbiAxOTk2ODIpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVj
aWZpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw2IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgVCogdmFsdWU7CiAgICAgICAgIFRocmVhZFNwZWNpZmljPFQ+KiBvd25lcjsKLSNpZiBPUyhX
SU5ET1dTKQotICAgICAgICB2b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCopOwotI2VuZGlmCiAgICAg
fTsKIAogI2lmIFVTRShQVEhSRUFEUykKQEAgLTE1OCw0NyArMTU1LDY0IEBAIGlubGluZSB2b2lk
IFRocmVhZFNwZWNpZmljPFQ+OjpzZXQoVCogcHQKIAogI2VsaWYgT1MoV0lORE9XUykKIAotLy8g
VGhlIG1heGltdW0gbnVtYmVyIG9mIFRMUyBrZXlzIHRoYXQgY2FuIGJlIGNyZWF0ZWQuIEZvciBz
aW1wbGlmaWNhdGlvbiwgd2UgYXNzdW1lIHRoYXQ6CisvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Yg
RkxTIGtleXMgdGhhdCBjYW4gYmUgY3JlYXRlZC4gRm9yIHNpbXBsaWZpY2F0aW9uLCB3ZSBhc3N1
bWUgdGhhdDoKIC8vIDEpIE9uY2UgdGhlIGluc3RhbmNlIG9mIFRocmVhZFNwZWNpZmljPD4gaXMg
Y3JlYXRlZCwgaXQgd2lsbCBub3QgYmUgZGVzdHJ1Y3RlZCB1bnRpbCB0aGUgcHJvZ3JhbSBkaWVz
LgogLy8gMikgV2UgZG8gbm90IG5lZWQgdG8gaG9sZCBtYW55IGluc3RhbmNlcyBvZiBUaHJlYWRT
cGVjaWZpYzw+IGRhdGEuIFRoaXMgZml4ZWQgbnVtYmVyIHNob3VsZCBiZSBmYXIgZW5vdWdoLgot
Y29uc3QgaW50IGtNYXhUbHNLZXlTaXplID0gMjU2OworY29uc3QgaW50IGtNYXhGbHNLZXlTaXpl
ID0gMTI4OworCitXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyYgZmxzS2V5Q291bnQoKTsKK1dURl9F
WFBPUlRfUFJJVkFURSBEV09SRCogZmxzS2V5cygpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgbG9u
ZyYgdGxzS2V5Q291bnQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSBEV09SRCogdGxzS2V5cygpOwor
dHlwZWRlZiBEV09SRCBUaHJlYWRTcGVjaWZpY0tleTsKIAotY2xhc3MgUGxhdGZvcm1UaHJlYWRT
cGVjaWZpY0tleTsKLXR5cGVkZWYgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSogVGhyZWFkU3Bl
Y2lmaWNLZXk7CitpbmxpbmUgdm9pZCB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZShUaHJlYWRTcGVj
aWZpY0tleSoga2V5LCB2b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCAqKSkKK3sKKyAgICBEV09SRCBm
bHNLZXkgPSBGbHNBbGxvYyhyZWludGVycHJldF9jYXN0PFBGTFNfQ0FMTEJBQ0tfRlVOQ1RJT04+
KGRlc3RydWN0b3IpKTsKKyAgICBpZiAoZmxzS2V5ID09IEZMU19PVVRfT0ZfSU5ERVhFUykKKyAg
ICAgICAgQ1JBU0goKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyZWFkU3BlY2lmaWNL
ZXlDcmVhdGUoVGhyZWFkU3BlY2lmaWNLZXkqLCB2b2lkICgqKSh2b2lkICopKTsKLVdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKFRocmVhZFNwZWNpZmljS2V5
KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHRocmVhZFNwZWNpZmljU2V0KFRocmVhZFNwZWNp
ZmljS2V5LCB2b2lkKik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdGhyZWFkU3BlY2lmaWNH
ZXQoVGhyZWFkU3BlY2lmaWNLZXkpOworICAgICprZXkgPSBmbHNLZXk7Cit9CisKK2lubGluZSB2
b2lkIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKFRocmVhZFNwZWNpZmljS2V5IGtleSkKK3sKKyAg
ICBGbHNGcmVlKGtleSk7Cit9CisKK2lubGluZSB2b2lkIHRocmVhZFNwZWNpZmljU2V0KFRocmVh
ZFNwZWNpZmljS2V5IGtleSwgdm9pZCogZGF0YSkKK3sKKyAgICBGbHNTZXRWYWx1ZShrZXksIGRh
dGEpOworfQorCitpbmxpbmUgdm9pZCogdGhyZWFkU3BlY2lmaWNHZXQoVGhyZWFkU3BlY2lmaWNL
ZXkga2V5KQoreworICAgIHJldHVybiBGbHNHZXRWYWx1ZShrZXkpOworfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogaW5saW5lIFRocmVhZFNwZWNpZmljPFQ+OjpUaHJlYWRTcGVjaWZpYygpCiAg
ICAgOiBtX2luZGV4KC0xKQogewotICAgIERXT1JEIHRsc0tleSA9IFRsc0FsbG9jKCk7Ci0gICAg
aWYgKHRsc0tleSA9PSBUTFNfT1VUX09GX0lOREVYRVMpCisgICAgRFdPUkQgZmxzS2V5ID0gRmxz
QWxsb2MocmVpbnRlcnByZXRfY2FzdDxQRkxTX0NBTExCQUNLX0ZVTkNUSU9OPihkZXN0cm95KSk7
CisgICAgaWYgKGZsc0tleSA9PSBGTFNfT1VUX09GX0lOREVYRVMpCiAgICAgICAgIENSQVNIKCk7
CiAKLSAgICBtX2luZGV4ID0gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJnRsc0tleUNvdW50KCkpIC0g
MTsKLSAgICBpZiAobV9pbmRleCA+PSBrTWF4VGxzS2V5U2l6ZSkKKyAgICBtX2luZGV4ID0gSW50
ZXJsb2NrZWRJbmNyZW1lbnQoJmZsc0tleUNvdW50KCkpIC0gMTsKKyAgICBpZiAobV9pbmRleCA+
PSBrTWF4RmxzS2V5U2l6ZSkKICAgICAgICAgQ1JBU0goKTsKLSAgICB0bHNLZXlzKClbbV9pbmRl
eF0gPSB0bHNLZXk7CisgICAgZmxzS2V5cygpW21faW5kZXhdID0gZmxzS2V5OwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFRocmVhZFNwZWNpZmljPFQ+Ojp+VGhyZWFkU3BlY2lm
aWMoKQogewotICAgIC8vIERvZXMgbm90IGludm9rZSBkZXN0cnVjdG9yIGZ1bmN0aW9ucy4gVGhl
eSB3aWxsIGJlIGNhbGxlZCBmcm9tIFRocmVhZFNwZWNpZmljVGhyZWFkRXhpdCB3aGVuIHRoZSB0
aHJlYWQgaXMgZGV0YWNoZWQuCi0gICAgVGxzRnJlZSh0bHNLZXlzKClbbV9pbmRleF0pOworICAg
IEZsc0ZyZWUoZmxzS2V5cygpW21faW5kZXhdKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
IGlubGluZSBUKiBUaHJlYWRTcGVjaWZpYzxUPjo6Z2V0KCkKIHsKLSAgICBEYXRhKiBkYXRhID0g
c3RhdGljX2Nhc3Q8RGF0YSo+KFRsc0dldFZhbHVlKHRsc0tleXMoKVttX2luZGV4XSkpOworICAg
IERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4oRmxzR2V0VmFsdWUoZmxzS2V5cygpW21f
aW5kZXhdKSk7CiAgICAgcmV0dXJuIGRhdGEgPyBkYXRhLT52YWx1ZSA6IDA7CiB9CiAKQEAgLTIw
Nyw4ICsyMjEsNyBAQCBpbmxpbmUgdm9pZCBUaHJlYWRTcGVjaWZpYzxUPjo6c2V0KFQqIHB0CiB7
CiAgICAgQVNTRVJUKCFnZXQoKSk7CiAgICAgRGF0YSogZGF0YSA9IG5ldyBEYXRhKHB0ciwgdGhp
cyk7Ci0gICAgZGF0YS0+ZGVzdHJ1Y3RvciA9ICZUaHJlYWRTcGVjaWZpYzxUPjo6ZGVzdHJveTsK
LSAgICBUbHNTZXRWYWx1ZSh0bHNLZXlzKClbbV9pbmRleF0sIGRhdGEpOworICAgIEZsc1NldFZh
bHVlKGZsc0tleXMoKVttX2luZGV4XSwgZGF0YSk7CiB9CiAKICNlbHNlCkBAIC0yMzIsNyArMjQ1
LDcgQEAgaW5saW5lIHZvaWQgVGhyZWFkU3BlY2lmaWM8VD46OmRlc3Ryb3kodgogI2lmIFVTRShQ
VEhSRUFEUykKICAgICBwdGhyZWFkX3NldHNwZWNpZmljKGRhdGEtPm93bmVyLT5tX2tleSwgMCk7
CiAjZWxpZiBPUyhXSU5ET1dTKQotICAgIFRsc1NldFZhbHVlKHRsc0tleXMoKVtkYXRhLT5vd25l
ci0+bV9pbmRleF0sIDApOworICAgIEZsc1NldFZhbHVlKGZsc0tleXMoKVtkYXRhLT5vd25lci0+
bV9pbmRleF0sIDApOwogI2Vsc2UKICNlcnJvciBUaHJlYWRTcGVjaWZpYyBpcyBub3QgaW1wbGVt
ZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0uCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Ro
cmVhZFNwZWNpZmljV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRT
cGVjaWZpY1dpbi5jcHAJKHJldmlzaW9uIDE5OTY4MikKKysrIFNvdXJjZS9XVEYvd3RmL1RocmVh
ZFNwZWNpZmljV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTE3ICsyNCwyMiBAQAogCiAj
aWYgT1MoV0lORE9XUykKIAotI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgotI2luY2x1ZGUgIlRo
cmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgot
CiAjaWYgIVVTRShQVEhSRUFEUykKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRpYyBEb3VibHlM
aW5rZWRMaXN0PFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk+JiBkZXN0cnVjdG9yc0xpc3QoKQot
ewotICAgIHN0YXRpYyBEb3VibHlMaW5rZWRMaXN0PFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk+
IHN0YXRpY0xpc3Q7Ci0gICAgcmV0dXJuIHN0YXRpY0xpc3Q7Ci19Ci0KLXN0YXRpYyBNdXRleCYg
ZGVzdHJ1Y3RvcnNNdXRleCgpCi17Ci0gICAgc3RhdGljIE11dGV4IHN0YXRpY011dGV4OwotICAg
IHJldHVybiBzdGF0aWNNdXRleDsKLX0KLQotY2xhc3MgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tl
eSA6IHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5
PiB7Ci1wdWJsaWM6Ci0gICAgZnJpZW5kIGNsYXNzIERvdWJseUxpbmtlZExpc3ROb2RlPFBsYXRm
b3JtVGhyZWFkU3BlY2lmaWNLZXk+OwotCi0gICAgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSh2
b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCAqKSkKLSAgICAgICAgOiBtX2Rlc3RydWN0b3IoZGVzdHJ1
Y3RvcikKLSAgICB7Ci0gICAgICAgIG1fdGxzS2V5ID0gVGxzQWxsb2MoKTsKLSAgICAgICAgaWYg
KG1fdGxzS2V5ID09IFRMU19PVVRfT0ZfSU5ERVhFUykKLSAgICAgICAgICAgIENSQVNIKCk7Ci0g
ICAgfQotCi0gICAgflBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkoKQotICAgIHsKLSAgICAgICAg
VGxzRnJlZShtX3Rsc0tleSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRWYWx1ZSh2b2lkKiBkYXRh
KSB7IFRsc1NldFZhbHVlKG1fdGxzS2V5LCBkYXRhKTsgfQotICAgIHZvaWQqIHZhbHVlKCkgeyBy
ZXR1cm4gVGxzR2V0VmFsdWUobV90bHNLZXkpOyB9Ci0KLSAgICB2b2lkIGNhbGxEZXN0cnVjdG9y
KCkKLSAgICB7Ci0gICAgICAgaWYgKHZvaWQqIGRhdGEgPSB2YWx1ZSgpKQotICAgICAgICAgICAg
bV9kZXN0cnVjdG9yKGRhdGEpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2b2lkICgqbV9kZXN0
cnVjdG9yKSh2b2lkICopOwotICAgIERXT1JEIG1fdGxzS2V5OwotICAgIFBsYXRmb3JtVGhyZWFk
U3BlY2lmaWNLZXkqIG1fcHJldjsKLSAgICBQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KiBtX25l
eHQ7Ci19OwotCi1sb25nJiB0bHNLZXlDb3VudCgpCitsb25nJiBmbHNLZXlDb3VudCgpCiB7CiAg
ICAgc3RhdGljIGxvbmcgY291bnQ7CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1EV09SRCogdGxz
S2V5cygpCitEV09SRCogZmxzS2V5cygpCiB7Ci0gICAgc3RhdGljIERXT1JEIGtleXNba01heFRs
c0tleVNpemVdOworICAgIHN0YXRpYyBEV09SRCBrZXlzW2tNYXhGbHNLZXlTaXplXTsKICAgICBy
ZXR1cm4ga2V5czsKIH0KIAotdm9pZCB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZShUaHJlYWRTcGVj
aWZpY0tleSoga2V5LCB2b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCAqKSkKLXsKLSAgICAvLyBVc2Ug
dGhlIG9yaWdpbmFsIG1hbGxvYygpIGluc3RlYWQgb2YgZmFzdE1hbGxvYygpIHRvIHVzZSB0aGlz
IGZ1bmN0aW9uIGluIEZhc3RNYWxsb2MgY29kZS4KLSAgICAqa2V5ID0gc3RhdGljX2Nhc3Q8UGxh
dGZvcm1UaHJlYWRTcGVjaWZpY0tleSo+KDo6bWFsbG9jKHNpemVvZihQbGF0Zm9ybVRocmVhZFNw
ZWNpZmljS2V5KSkpOwotICAgIG5ldyAoKmtleSkgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleShk
ZXN0cnVjdG9yKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihkZXN0cnVjdG9yc011dGV4KCkp
OwotICAgIGRlc3RydWN0b3JzTGlzdCgpLnB1c2goKmtleSk7Ci19Ci0KLXZvaWQgdGhyZWFkU3Bl
Y2lmaWNLZXlEZWxldGUoVGhyZWFkU3BlY2lmaWNLZXkga2V5KQotewotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihkZXN0cnVjdG9yc011dGV4KCkpOwotICAgIGRlc3RydWN0b3JzTGlzdCgpLnJlbW92
ZShrZXkpOwotICAgIGtleS0+flBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkoKTsKLSAgICA6OmZy
ZWUoa2V5KTsKLX0KLQotdm9pZCB0aHJlYWRTcGVjaWZpY1NldChUaHJlYWRTcGVjaWZpY0tleSBr
ZXksIHZvaWQqIGRhdGEpCi17Ci0gICAga2V5LT5zZXRWYWx1ZShkYXRhKTsKLX0KLQotdm9pZCog
dGhyZWFkU3BlY2lmaWNHZXQoVGhyZWFkU3BlY2lmaWNLZXkga2V5KQotewotICAgIHJldHVybiBr
ZXktPnZhbHVlKCk7Ci19Ci0KLXZvaWQgVGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0KCkKLXsKLSAg
ICBmb3IgKGxvbmcgaSA9IDA7IGkgPCB0bHNLZXlDb3VudCgpOyBpKyspIHsKLSAgICAgICAgLy8g
VGhlIGxheW91dCBvZiBUaHJlYWRTcGVjaWZpYzxUPjo6RGF0YSBkb2VzIG5vdCBkZXBlbmQgb24g
VC4gU28gd2UgYXJlIHNhZmUgdG8gZG8gdGhlIHN0YXRpYyBjYXN0IHRvIFRocmVhZFNwZWNpZmlj
PGludD4gaW4gb3JkZXIgdG8gYWNjZXNzIGl0cyBkYXRhIG1lbWJlci4KLSAgICAgICAgVGhyZWFk
U3BlY2lmaWM8aW50Pjo6RGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZFNwZWNpZmljPGlu
dD46OkRhdGEqPihUbHNHZXRWYWx1ZSh0bHNLZXlzKClbaV0pKTsKLSAgICAgICAgaWYgKGRhdGEp
Ci0gICAgICAgICAgICBkYXRhLT5kZXN0cnVjdG9yKGRhdGEpOwotICAgIH0KLQotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihkZXN0cnVjdG9yc011dGV4KCkpOwotICAgIFBsYXRmb3JtVGhyZWFkU3Bl
Y2lmaWNLZXkqIGtleSA9IGRlc3RydWN0b3JzTGlzdCgpLmhlYWQoKTsKLSAgICB3aGlsZSAoa2V5
KSB7Ci0gICAgICAgIFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkqIG5leHRLZXkgPSBrZXktPm5l
eHQoKTsKLSAgICAgICAga2V5LT5jYWxsRGVzdHJ1Y3RvcigpOwotICAgICAgICBrZXkgPSBuZXh0
S2V5OwotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyAhVVNFKFBU
SFJFQURTKQpJbmRleDogU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCShyZXZpc2lvbiAxOTk2ODIpCisr
KyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
MTAgKzEwMiw2IEBACiAjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlclNlZWQuaD4KICNpbmNsdWRl
IDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCi0jaWYgIVVTRShQVEhSRUFEUykgJiYgT1MoV0lORE9X
UykKLSNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgotI2VuZGlmCi0KICNpZiBIQVZFKEVSUk5P
X0gpCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNlbmRpZgpAQCAtMTk5LDExICsxOTUsNiBAQCBzdGF0
aWMgdW5zaWduZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVudHJ5CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4gaW52b2NhdGlvbihzdGF0aWNfY2FzdDxUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24qPihwYXJhbSkpOwogICAgIGludm9jYXRpb24tPmZ1bmN0aW9uKGlu
dm9jYXRpb24tPmRhdGEpOwogCi0jaWYgIVVTRShQVEhSRUFEUykgJiYgT1MoV0lORE9XUykKLSAg
ICAvLyBEbyB0aGUgVExTIGNsZWFudXAuCi0gICAgVGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0KCk7
Ci0jZW5kaWYKLQogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTk2ODIp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBA
QAorMjAxNi0wNC0xOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBpVHVuZXMgY3Jhc2hpbmcgSmF2YVNjcmlwdENvcmUuZGxsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY2NDcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCURpc2FibGVkIGZhc3Qvd29ya2Vycy9kZWRpY2F0ZWQt
d29ya2VyLWxpZmVjeWNsZS5odG1sIGFzIGl0IGNyZWF0ZXMKKwltb3JlIHdvcmtlcnMgdGhhdCB3
ZSBoYXZlIFRocmVhZFNwZWNpZmljIGtleXMuICBXZSBuZWVkIGF0IGxlYXN0IG9uZQorCWtleSBw
ZXIgSlNDIFZNIHdlIGNyZWF0ZS4gIEkgZGlkbid0IHdhbnQgdG8gd2Vha2VuIHRoZSB0ZXN0IGZv
ciBvdGhlcgorCXBsYXRmb3Jtcy4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9UZXN0RXhwZWN0
YXRpb25zOgorCiAyMDE2LTA0LTE4ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIENTUDogUmVtb3ZlIHN0dWJzIGZvciBkeW5hbWljYWxseS1hZGRlZCBmYXZp
Y29ucyAodmlhIGxpbmsgcmVsPSJpY29uIikKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dp
bi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dp
bi9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAxOTk2ODIpCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNDM3LDYgKzQzNywx
MCBAQCBzdG9yYWdlL3N0b3JhZ2VxdW90YS1xdWVyeS11c2FnZS5odG1sIFsKIHN0b3JhZ2Uvc3Rv
cmFnZXF1b3RhLXJlcXVlc3QtcXVvdGEuaHRtbCBbIFNraXAgXQogZmFzdC93b3JrZXJzL3dvcmtl
ci1zdG9yYWdlcXVvdGEtcXVlcnktdXNhZ2UuaHRtbCBbIFNraXAgXQogCisjIFRoZSBudW1iZXIg
b2Ygd29ya2VycyBpbiB0aGlzIHRlc3QgZXhjZWVkcyB0aGUgbnVtYmVyIG9mCisjIFRocmVhZFNw
ZWNpZmljVmFsdWVzIHdlIGhhdmUgb24gV2luZG93cy4KK2Zhc3Qvd29ya2Vycy9kZWRpY2F0ZWQt
d29ya2VyLWxpZmVjeWNsZS5odG1sIFsgU2tpcCBdIAorCiAjIFRlc3RzIHRoYXQgcmVxdWlyZSBF
TkFCTEUoRE9XTkxPQURfQVRUUklCVVRFKS4KIGZhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50L2Fu
Y2hvci1ub2Rvd25sb2FkLmh0bWwgWyBTa2lwIF0KIGZhc3QvZG9tL0hUTUxBbmNob3JFbGVtZW50
L2FuY2hvci1kb3dubG9hZC5odG1sIFsgU2tpcCBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276692</attachid>
            <date>2016-04-18 21:54:32 -0700</date>
            <delta_ts>2016-04-19 18:15:43 -0700</delta_ts>
            <desc>Removed tab characters</desc>
            <filename>156647-4.patch</filename>
            <type>text/plain</type>
            <size>17159</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5Njk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE2LTA0LTE4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIGlUdW5lcyBjcmFzaGluZyBKYXZhU2NyaXB0Q29yZS5kbGwKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjY0NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdpdmVuIHRoYXQgdGhlcmUgdGhlcmUgYXJl
IG9ubHkgMTI4IEZMUyBpbmRpY2VzIGNvbXBhcmVkIHRvIG92ZXIgYSAxMDAwIGZvciBUTFMsIEkK
KyAgICAgICAgZWxpbWluYXRlZCB0aGUgdGhyZWFkIHNwZWNpZmljIG1fdGhyZWFkU3BlY2lmaWNG
b3JUaHJlYWQgYW5kIGluc3RlYWQgd2UgbG9vayBmb3IgdGhlCisgICAgICAgIGN1cnJlbnQgdGhy
ZWFkIGluIG1fcmVnaXN0ZXJlZFRocmVhZHMgbGlzdCB3aGVuIHdlIG5lZWQgaXQuICBJbiBtb3N0
IGNhc2VzIHRoZXJlCisgICAgICAgIHdpbGwgb25seSBiZSBvbmUgdGhyZWFkLgorCisgICAgICAg
ICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhy
ZWFkczo6TWFjaGluZVRocmVhZHMpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6fk1h
Y2hpbmVUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRU
aHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6bWFjaGluZVRocmVhZEZvckN1
cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFk
KToKKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5oOgorCiAyMDE2LTA0LTE4ICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBBVlguCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtl
ci5jcHAJKHJldmlzaW9uIDE5OTY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
Y2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MiwxNCArMTkyLDEyIEBA
IHN0YXRpYyBpbmxpbmUgUGxhdGZvcm1UaHJlYWQgZ2V0Q3VycmVudFAKIE1hY2hpbmVUaHJlYWRz
OjpNYWNoaW5lVGhyZWFkcyhIZWFwKiBoZWFwKQogICAgIDogbV9yZWdpc3RlcmVkVGhyZWFkcygw
KQogICAgICwgbV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzKDApCi0gICAgLCBtX3Ro
cmVhZFNwZWNpZmljRm9yVGhyZWFkKDApCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICwgbV9o
ZWFwKGhlYXApCiAjZW5kaWYKIHsKICAgICBVTlVTRURfUEFSQU0oaGVhcCk7CiAgICAgdGhyZWFk
U3BlY2lmaWNLZXlDcmVhdGUoJm1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcywgcmVt
b3ZlVGhyZWFkKTsKLSAgICB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZSgmbV90aHJlYWRTcGVjaWZp
Y0ZvclRocmVhZCwgbnVsbHB0cik7CiAgICAgYWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyKCku
YWRkKHRoaXMpOwogfQogCkBAIC0yMDcsNyArMjA1LDYgQEAgTWFjaGluZVRocmVhZHM6On5NYWNo
aW5lVGhyZWFkcygpCiB7CiAgICAgYWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2VyKCkucmVtb3Zl
KHRoaXMpOwogICAgIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lmaWNGb3JN
YWNoaW5lVGhyZWFkcyk7Ci0gICAgdGhyZWFkU3BlY2lmaWNLZXlEZWxldGUobV90aHJlYWRTcGVj
aWZpY0ZvclRocmVhZCk7CiAKICAgICBMb2NrSG9sZGVyIHJlZ2lzdGVyZWRUaHJlYWRzTG9jayht
X3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwogICAgIGZvciAoVGhyZWFkKiB0ID0gbV9yZWdpc3Rl
cmVkVGhyZWFkczsgdDspIHsKQEAgLTIzNCwxOCArMjMxLDYgQEAgYm9vbCBNYWNoaW5lVGhyZWFk
czo6VGhyZWFkOjpvcGVyYXRvcj09KAogI2VuZGlmCiB9CiAKLSNpZm5kZWYgTkRFQlVHCi1zdGF0
aWMgYm9vbCBpc1RocmVhZEluTGlzdChUaHJlYWQqIGxpc3RIZWFkLCBUaHJlYWQqIHRhcmdldCkK
LXsKLSAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbGlzdEhlYWQ7IHRocmVhZDsgdGhyZWFkID0g
dGhyZWFkLT5uZXh0KSB7Ci0gICAgICAgIGlmICh0aHJlYWQgPT0gdGFyZ2V0KQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0K
IHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogewogICAgIEFTU0VSVCgh
bV9oZWFwLT52bSgpLT5oYXNFeGNsdXNpdmVUaHJlYWQoKSB8fCBtX2hlYXAtPnZtKCktPmV4Y2x1
c2l2ZVRocmVhZCgpID09IHN0ZDo6dGhpc190aHJlYWQ6OmdldF9pZCgpKTsKQEAgLTI1NCwxNSAr
MjM5LDEyIEBAIHZvaWQgTWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRl
eCk7CiAgICAgICAgIEFTU0VSVCh0aHJlYWRTcGVjaWZpY0dldChtX3RocmVhZFNwZWNpZmljRm9y
TWFjaGluZVRocmVhZHMpID09IHRoaXMpOwotICAgICAgICBBU1NFUlQodGhyZWFkU3BlY2lmaWNH
ZXQobV90aHJlYWRTcGVjaWZpY0ZvclRocmVhZCkpOwotICAgICAgICBBU1NFUlQoaXNUaHJlYWRJ
bkxpc3QobV9yZWdpc3RlcmVkVGhyZWFkcywgc3RhdGljX2Nhc3Q8VGhyZWFkKj4odGhyZWFkU3Bl
Y2lmaWNHZXQobV90aHJlYWRTcGVjaWZpY0ZvclRocmVhZCkpKSk7CiAjZW5kaWYKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjcmVhdGVGb3JD
dXJyZW50VGhyZWFkKCk7CiAgICAgdGhyZWFkU3BlY2lmaWNTZXQobV90aHJlYWRTcGVjaWZpY0Zv
ck1hY2hpbmVUaHJlYWRzLCB0aGlzKTsKLSAgICB0aHJlYWRTcGVjaWZpY1NldChtX3RocmVhZFNw
ZWNpZmljRm9yVGhyZWFkLCB0aHJlYWQpOwogCiAgICAgTG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0
ZXJlZFRocmVhZHNNdXRleCk7CiAKQEAgLTI3MiwxNCArMjU0LDE1IEBAIHZvaWQgTWFjaGluZVRo
cmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQoKQogCiBUaHJlYWQqIE1hY2hpbmVUaHJlYWRzOjptYWNo
aW5lVGhyZWFkRm9yQ3VycmVudFRocmVhZCgpCiB7Ci0gICAgVGhyZWFkKiByZXN1bHQgPSBzdGF0
aWNfY2FzdDxUaHJlYWQqPih0aHJlYWRTcGVjaWZpY0dldChtX3RocmVhZFNwZWNpZmljRm9yVGhy
ZWFkKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKLSNpZm5kZWYgTkRFQlVHCiAgICAg
TG9ja0hvbGRlciBsb2NrKG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7Ci0gICAgQVNTRVJUKGlz
VGhyZWFkSW5MaXN0KG1fcmVnaXN0ZXJlZFRocmVhZHMsIHJlc3VsdCkpOwotI2VuZGlmCisgICAg
UGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1UaHJlYWQgPSBnZXRDdXJyZW50UGxhdGZvcm1UaHJlYWQo
KTsKKyAgICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFk
OyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpIHsKKyAgICAgICAgaWYgKCp0aHJlYWQgPT0gcGxhdGZv
cm1UaHJlYWQpCisgICAgICAgICAgICByZXR1cm4gdGhyZWFkOworICAgIH0KIAotICAgIHJldHVy
biByZXN1bHQ7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAogdm9pZCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkKHZvaWQqIHAp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJr
ZXIuaAkocmV2aXNpb24gMTk5NjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNiBAQCBwcml2
YXRlOgogICAgIExvY2sgbV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OwogICAgIFRocmVhZCogbV9y
ZWdpc3RlcmVkVGhyZWFkczsKICAgICBXVEY6OlRocmVhZFNwZWNpZmljS2V5IG1fdGhyZWFkU3Bl
Y2lmaWNGb3JNYWNoaW5lVGhyZWFkczsKLSAgICBXVEY6OlRocmVhZFNwZWNpZmljS2V5IG1fdGhy
ZWFkU3BlY2lmaWNGb3JUaHJlYWQ7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIEhlYXAqIG1f
aGVhcDsKICNlbmRpZgpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTY4MikKKysrIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTYtMDQtMTggIE1pY2hh
ZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgaVR1bmVzIGNyYXNoaW5n
IEphdmFTY3JpcHRDb3JlLmRsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2NjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSWYgYSB0aHJlYWQgd2FzIGNyZWF0ZWQgd2l0aG91dCB1c2luZyB0aGUgV1RG
IHRocmVhZCBhcGlzIGFuZCB0aGF0IHRocmVhZCB1c2VzCisgICAgICAgIGEgSmF2YVNjcmlwdCBW
TSBhbmQgdGhhdCB0aHJlYWQgZXhpdHMgd2l0aCB0aGUgVk0gc3RpbGwgYXJvdW5kLCBKU0Mgd29u
J3Qga25vdworICAgICAgICB0aGF0IHRoZSB0aHJlYWQgaGFzIGV4aXRlZC4gIEN1cnJlbnRseSwg
d2UgdXNlIFRocmVhZFNwZWNpZmljVGhyZWFkRXhpdCgpIHRvCisgICAgICAgIGNsZWFuIHVwIGFu
eSB0aHJlYWQgc3BlY2lmaWMga2V5cy4gIENsZWFuaW5nIHVwIHRoZXNlIGtleXMgaXMgaG93IEpT
QyBpcworICAgICAgICBub3RpZmllZCBvZiBhIHRocmVhZCBleGl0LiAgV2Ugb25seSBjYWxsIFRo
cmVhZFNwZWNpZmljVGhyZWFkRXhpdCgpIGZyb20KKyAgICAgICAgd3RmVGhyZWFkRW50cnlQb2lu
dCgpIHdoZW4gdGhlIHRocmVhZCBlbnRyeSBwb2ludCBmdW5jdGlvbiByZXR1cm5zLgorICAgICAg
ICBUaGlzIG1lY2hhbmlzbSB3YXMgcHV0IGluIHBsYWNlIGZvciBXaW5kb3MgYmVjYXVzZSB3ZSBs
YXllciB0aGUgV1RGOjpUaHJlYWRTcGVjaWZpYworICAgICAgICBmdW5jdGlvbmFsaXR5IG9uIHRv
cCBvZiBUTFMgKFRocmVhZCBMb2NhbCBTdG9yYWdlKSwgYnV0IFRMUyBkb2Vzbid0IGhhdmUKKyAg
ICAgICAgYSB0aHJlYWQgZXhpdGluZyBjYWxsYmFjayB0aGUgd2F5IHRoYXQgcHRocmVhZF9jcmVh
dGVfa2V5LgorCisgICAgICAgIFRoZSBmaXggaXMgdG8gY2hhbmdlIGZyb20gdXNpbmcgVExTIHRv
IHVzaW5nIEZMUyAoRmliZXIgTG9jYWwgU3RvcmFnZSkuICBBbHRob3VnaAorICAgICAgICBXaW5k
b3dzIGFsbG93cyBtdWx0aXBsZSBmaWJlcnMgcGVyIHRocmVhZCwgV2ViS2l0IGlzIG5vdCBkZXNp
Z25lZCB0byB3b3JrIHdpdGggYQorICAgICAgICBtdWx0aXBsZSBmaWJlcnMgcGVyIHRocmVhZC4g
IFdoZW4gdGhlciBpcyBvbmx5IG9uZSBmaWJlciBwZXIgdGhyZWFkLCBGTFMgd29ya3MganVzdAor
ICAgICAgICBsaWtlIFRMUywgYnV0IGl0IGhhcyB0aGUgZGVzdHJveSBjYWxsYmFjay4KKworICAg
ICAgICBJIHJlc3RydWN0dXJlZCB0aGUgV2luZG93cyB2ZXJzaW9uIG9mIFdURjo6VGhyZWFkU3Bl
Y2lmaWMgdG8gYmUgYWxtb3N0IHRoZSBzYW1lCisgICAgICAgIGFzIHRoZSBwdGhyZWFkIHZlcnNp
b24uCisKKyAgICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWMuaDoKKyAgICAgICAgKFdURjo6dGhy
ZWFkU3BlY2lmaWNLZXlDcmVhdGUpOgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVjaWZpY0tleURl
bGV0ZSk6CisgICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0KToKKyAgICAgICAgKFdURjo6
dGhyZWFkU3BlY2lmaWNHZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6VGhy
ZWFkU3BlY2lmaWMpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6flRocmVhZFNw
ZWNpZmljKToKKyAgICAgICAgKFdURjo6VGhyZWFkU3BlY2lmaWM8VD46OmdldCk6CisgICAgICAg
IChXVEY6OlRocmVhZFNwZWNpZmljPFQ+OjpzZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVj
aWZpYzxUPjo6ZGVzdHJveSk6CisgICAgICAgIFJlc3RydWN0dXJlZCB0byB1c2UgRkxTLiAgUmVu
YW1lZCBUTFMqIHRvIEZMUyouCisKKyAgICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3Bw
OgorICAgICAgICAoV1RGOjpmbHNLZXlDb3VudCk6CisgICAgICAgIChXVEY6OmZsc0tleXMpOgor
ICAgICAgICBSZW5hbWVkIGZyb20gdGxzS2V5KigpIHRvIGZsc0tleSooKS4KKworICAgICAgICAo
V1RGOjpkZXN0cnVjdG9yc0xpc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXN0cnVjdG9y
c011dGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tl
eTo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBs
YXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk6On5QbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleTo6c2V0VmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5Ojp2YWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk6OmNh
bGxEZXN0cnVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGxzS2V5Q291bnQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjp0bHNLZXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhy
ZWFkU3BlY2lmaWNLZXlDcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVj
aWZpY0tleURlbGV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkU3BlY2lmaWNHZXQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpY1RocmVhZEV4aXQpOiBEZWxldGVkLgorCisgICAg
ICAgICogd3RmL1RocmVhZGluZ1dpbi5jcHA6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5
UG9pbnQpOiBFbGltaW5hdGVkIGNhbGwgdG8gVGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0LgorCiAy
MDE2LTA0LTE4ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTk5NjIxLgpJbmRleDogU291cmNlL1dURi93
dGYvVGhyZWFkU3BlY2lmaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRT
cGVjaWZpYy5oCShyZXZpc2lvbiAxOTk2ODIpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVj
aWZpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw2IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgVCogdmFsdWU7CiAgICAgICAgIFRocmVhZFNwZWNpZmljPFQ+KiBvd25lcjsKLSNpZiBPUyhX
SU5ET1dTKQotICAgICAgICB2b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCopOwotI2VuZGlmCiAgICAg
fTsKIAogI2lmIFVTRShQVEhSRUFEUykKQEAgLTE1OCw0NyArMTU1LDY0IEBAIGlubGluZSB2b2lk
IFRocmVhZFNwZWNpZmljPFQ+OjpzZXQoVCogcHQKIAogI2VsaWYgT1MoV0lORE9XUykKIAotLy8g
VGhlIG1heGltdW0gbnVtYmVyIG9mIFRMUyBrZXlzIHRoYXQgY2FuIGJlIGNyZWF0ZWQuIEZvciBz
aW1wbGlmaWNhdGlvbiwgd2UgYXNzdW1lIHRoYXQ6CisvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Yg
RkxTIGtleXMgdGhhdCBjYW4gYmUgY3JlYXRlZC4gRm9yIHNpbXBsaWZpY2F0aW9uLCB3ZSBhc3N1
bWUgdGhhdDoKIC8vIDEpIE9uY2UgdGhlIGluc3RhbmNlIG9mIFRocmVhZFNwZWNpZmljPD4gaXMg
Y3JlYXRlZCwgaXQgd2lsbCBub3QgYmUgZGVzdHJ1Y3RlZCB1bnRpbCB0aGUgcHJvZ3JhbSBkaWVz
LgogLy8gMikgV2UgZG8gbm90IG5lZWQgdG8gaG9sZCBtYW55IGluc3RhbmNlcyBvZiBUaHJlYWRT
cGVjaWZpYzw+IGRhdGEuIFRoaXMgZml4ZWQgbnVtYmVyIHNob3VsZCBiZSBmYXIgZW5vdWdoLgot
Y29uc3QgaW50IGtNYXhUbHNLZXlTaXplID0gMjU2OworY29uc3QgaW50IGtNYXhGbHNLZXlTaXpl
ID0gMTI4OworCitXVEZfRVhQT1JUX1BSSVZBVEUgbG9uZyYgZmxzS2V5Q291bnQoKTsKK1dURl9F
WFBPUlRfUFJJVkFURSBEV09SRCogZmxzS2V5cygpOwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgbG9u
ZyYgdGxzS2V5Q291bnQoKTsKLVdURl9FWFBPUlRfUFJJVkFURSBEV09SRCogdGxzS2V5cygpOwor
dHlwZWRlZiBEV09SRCBUaHJlYWRTcGVjaWZpY0tleTsKIAotY2xhc3MgUGxhdGZvcm1UaHJlYWRT
cGVjaWZpY0tleTsKLXR5cGVkZWYgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSogVGhyZWFkU3Bl
Y2lmaWNLZXk7CitpbmxpbmUgdm9pZCB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZShUaHJlYWRTcGVj
aWZpY0tleSoga2V5LCB2b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCAqKSkKK3sKKyAgICBEV09SRCBm
bHNLZXkgPSBGbHNBbGxvYyhyZWludGVycHJldF9jYXN0PFBGTFNfQ0FMTEJBQ0tfRlVOQ1RJT04+
KGRlc3RydWN0b3IpKTsKKyAgICBpZiAoZmxzS2V5ID09IEZMU19PVVRfT0ZfSU5ERVhFUykKKyAg
ICAgICAgQ1JBU0goKTsKIAotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyZWFkU3BlY2lmaWNL
ZXlDcmVhdGUoVGhyZWFkU3BlY2lmaWNLZXkqLCB2b2lkICgqKSh2b2lkICopKTsKLVdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKFRocmVhZFNwZWNpZmljS2V5
KTsKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHRocmVhZFNwZWNpZmljU2V0KFRocmVhZFNwZWNp
ZmljS2V5LCB2b2lkKik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdGhyZWFkU3BlY2lmaWNH
ZXQoVGhyZWFkU3BlY2lmaWNLZXkpOworICAgICprZXkgPSBmbHNLZXk7Cit9CisKK2lubGluZSB2
b2lkIHRocmVhZFNwZWNpZmljS2V5RGVsZXRlKFRocmVhZFNwZWNpZmljS2V5IGtleSkKK3sKKyAg
ICBGbHNGcmVlKGtleSk7Cit9CisKK2lubGluZSB2b2lkIHRocmVhZFNwZWNpZmljU2V0KFRocmVh
ZFNwZWNpZmljS2V5IGtleSwgdm9pZCogZGF0YSkKK3sKKyAgICBGbHNTZXRWYWx1ZShrZXksIGRh
dGEpOworfQorCitpbmxpbmUgdm9pZCogdGhyZWFkU3BlY2lmaWNHZXQoVGhyZWFkU3BlY2lmaWNL
ZXkga2V5KQoreworICAgIHJldHVybiBGbHNHZXRWYWx1ZShrZXkpOworfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogaW5saW5lIFRocmVhZFNwZWNpZmljPFQ+OjpUaHJlYWRTcGVjaWZpYygpCiAg
ICAgOiBtX2luZGV4KC0xKQogewotICAgIERXT1JEIHRsc0tleSA9IFRsc0FsbG9jKCk7Ci0gICAg
aWYgKHRsc0tleSA9PSBUTFNfT1VUX09GX0lOREVYRVMpCisgICAgRFdPUkQgZmxzS2V5ID0gRmxz
QWxsb2MocmVpbnRlcnByZXRfY2FzdDxQRkxTX0NBTExCQUNLX0ZVTkNUSU9OPihkZXN0cm95KSk7
CisgICAgaWYgKGZsc0tleSA9PSBGTFNfT1VUX09GX0lOREVYRVMpCiAgICAgICAgIENSQVNIKCk7
CiAKLSAgICBtX2luZGV4ID0gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJnRsc0tleUNvdW50KCkpIC0g
MTsKLSAgICBpZiAobV9pbmRleCA+PSBrTWF4VGxzS2V5U2l6ZSkKKyAgICBtX2luZGV4ID0gSW50
ZXJsb2NrZWRJbmNyZW1lbnQoJmZsc0tleUNvdW50KCkpIC0gMTsKKyAgICBpZiAobV9pbmRleCA+
PSBrTWF4RmxzS2V5U2l6ZSkKICAgICAgICAgQ1JBU0goKTsKLSAgICB0bHNLZXlzKClbbV9pbmRl
eF0gPSB0bHNLZXk7CisgICAgZmxzS2V5cygpW21faW5kZXhdID0gZmxzS2V5OwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFRocmVhZFNwZWNpZmljPFQ+Ojp+VGhyZWFkU3BlY2lm
aWMoKQogewotICAgIC8vIERvZXMgbm90IGludm9rZSBkZXN0cnVjdG9yIGZ1bmN0aW9ucy4gVGhl
eSB3aWxsIGJlIGNhbGxlZCBmcm9tIFRocmVhZFNwZWNpZmljVGhyZWFkRXhpdCB3aGVuIHRoZSB0
aHJlYWQgaXMgZGV0YWNoZWQuCi0gICAgVGxzRnJlZSh0bHNLZXlzKClbbV9pbmRleF0pOworICAg
IEZsc0ZyZWUoZmxzS2V5cygpW21faW5kZXhdKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
IGlubGluZSBUKiBUaHJlYWRTcGVjaWZpYzxUPjo6Z2V0KCkKIHsKLSAgICBEYXRhKiBkYXRhID0g
c3RhdGljX2Nhc3Q8RGF0YSo+KFRsc0dldFZhbHVlKHRsc0tleXMoKVttX2luZGV4XSkpOworICAg
IERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4oRmxzR2V0VmFsdWUoZmxzS2V5cygpW21f
aW5kZXhdKSk7CiAgICAgcmV0dXJuIGRhdGEgPyBkYXRhLT52YWx1ZSA6IDA7CiB9CiAKQEAgLTIw
Nyw4ICsyMjEsNyBAQCBpbmxpbmUgdm9pZCBUaHJlYWRTcGVjaWZpYzxUPjo6c2V0KFQqIHB0CiB7
CiAgICAgQVNTRVJUKCFnZXQoKSk7CiAgICAgRGF0YSogZGF0YSA9IG5ldyBEYXRhKHB0ciwgdGhp
cyk7Ci0gICAgZGF0YS0+ZGVzdHJ1Y3RvciA9ICZUaHJlYWRTcGVjaWZpYzxUPjo6ZGVzdHJveTsK
LSAgICBUbHNTZXRWYWx1ZSh0bHNLZXlzKClbbV9pbmRleF0sIGRhdGEpOworICAgIEZsc1NldFZh
bHVlKGZsc0tleXMoKVttX2luZGV4XSwgZGF0YSk7CiB9CiAKICNlbHNlCkBAIC0yMzIsNyArMjQ1
LDcgQEAgaW5saW5lIHZvaWQgVGhyZWFkU3BlY2lmaWM8VD46OmRlc3Ryb3kodgogI2lmIFVTRShQ
VEhSRUFEUykKICAgICBwdGhyZWFkX3NldHNwZWNpZmljKGRhdGEtPm93bmVyLT5tX2tleSwgMCk7
CiAjZWxpZiBPUyhXSU5ET1dTKQotICAgIFRsc1NldFZhbHVlKHRsc0tleXMoKVtkYXRhLT5vd25l
ci0+bV9pbmRleF0sIDApOworICAgIEZsc1NldFZhbHVlKGZsc0tleXMoKVtkYXRhLT5vd25lci0+
bV9pbmRleF0sIDApOwogI2Vsc2UKICNlcnJvciBUaHJlYWRTcGVjaWZpYyBpcyBub3QgaW1wbGVt
ZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0uCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Ro
cmVhZFNwZWNpZmljV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRT
cGVjaWZpY1dpbi5jcHAJKHJldmlzaW9uIDE5OTY4MikKKysrIFNvdXJjZS9XVEYvd3RmL1RocmVh
ZFNwZWNpZmljV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTE3ICsyNCwyMiBAQAogCiAj
aWYgT1MoV0lORE9XUykKIAotI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgotI2luY2x1ZGUgIlRo
cmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgot
CiAjaWYgIVVTRShQVEhSRUFEUykKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRpYyBEb3VibHlM
aW5rZWRMaXN0PFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk+JiBkZXN0cnVjdG9yc0xpc3QoKQot
ewotICAgIHN0YXRpYyBEb3VibHlMaW5rZWRMaXN0PFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk+
IHN0YXRpY0xpc3Q7Ci0gICAgcmV0dXJuIHN0YXRpY0xpc3Q7Ci19Ci0KLXN0YXRpYyBNdXRleCYg
ZGVzdHJ1Y3RvcnNNdXRleCgpCi17Ci0gICAgc3RhdGljIE11dGV4IHN0YXRpY011dGV4OwotICAg
IHJldHVybiBzdGF0aWNNdXRleDsKLX0KLQotY2xhc3MgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tl
eSA6IHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5
PiB7Ci1wdWJsaWM6Ci0gICAgZnJpZW5kIGNsYXNzIERvdWJseUxpbmtlZExpc3ROb2RlPFBsYXRm
b3JtVGhyZWFkU3BlY2lmaWNLZXk+OwotCi0gICAgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSh2
b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCAqKSkKLSAgICAgICAgOiBtX2Rlc3RydWN0b3IoZGVzdHJ1
Y3RvcikKLSAgICB7Ci0gICAgICAgIG1fdGxzS2V5ID0gVGxzQWxsb2MoKTsKLSAgICAgICAgaWYg
KG1fdGxzS2V5ID09IFRMU19PVVRfT0ZfSU5ERVhFUykKLSAgICAgICAgICAgIENSQVNIKCk7Ci0g
ICAgfQotCi0gICAgflBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkoKQotICAgIHsKLSAgICAgICAg
VGxzRnJlZShtX3Rsc0tleSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRWYWx1ZSh2b2lkKiBkYXRh
KSB7IFRsc1NldFZhbHVlKG1fdGxzS2V5LCBkYXRhKTsgfQotICAgIHZvaWQqIHZhbHVlKCkgeyBy
ZXR1cm4gVGxzR2V0VmFsdWUobV90bHNLZXkpOyB9Ci0KLSAgICB2b2lkIGNhbGxEZXN0cnVjdG9y
KCkKLSAgICB7Ci0gICAgICAgaWYgKHZvaWQqIGRhdGEgPSB2YWx1ZSgpKQotICAgICAgICAgICAg
bV9kZXN0cnVjdG9yKGRhdGEpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2b2lkICgqbV9kZXN0
cnVjdG9yKSh2b2lkICopOwotICAgIERXT1JEIG1fdGxzS2V5OwotICAgIFBsYXRmb3JtVGhyZWFk
U3BlY2lmaWNLZXkqIG1fcHJldjsKLSAgICBQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KiBtX25l
eHQ7Ci19OwotCi1sb25nJiB0bHNLZXlDb3VudCgpCitsb25nJiBmbHNLZXlDb3VudCgpCiB7CiAg
ICAgc3RhdGljIGxvbmcgY291bnQ7CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1EV09SRCogdGxz
S2V5cygpCitEV09SRCogZmxzS2V5cygpCiB7Ci0gICAgc3RhdGljIERXT1JEIGtleXNba01heFRs
c0tleVNpemVdOworICAgIHN0YXRpYyBEV09SRCBrZXlzW2tNYXhGbHNLZXlTaXplXTsKICAgICBy
ZXR1cm4ga2V5czsKIH0KIAotdm9pZCB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZShUaHJlYWRTcGVj
aWZpY0tleSoga2V5LCB2b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCAqKSkKLXsKLSAgICAvLyBVc2Ug
dGhlIG9yaWdpbmFsIG1hbGxvYygpIGluc3RlYWQgb2YgZmFzdE1hbGxvYygpIHRvIHVzZSB0aGlz
IGZ1bmN0aW9uIGluIEZhc3RNYWxsb2MgY29kZS4KLSAgICAqa2V5ID0gc3RhdGljX2Nhc3Q8UGxh
dGZvcm1UaHJlYWRTcGVjaWZpY0tleSo+KDo6bWFsbG9jKHNpemVvZihQbGF0Zm9ybVRocmVhZFNw
ZWNpZmljS2V5KSkpOwotICAgIG5ldyAoKmtleSkgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleShk
ZXN0cnVjdG9yKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihkZXN0cnVjdG9yc011dGV4KCkp
OwotICAgIGRlc3RydWN0b3JzTGlzdCgpLnB1c2goKmtleSk7Ci19Ci0KLXZvaWQgdGhyZWFkU3Bl
Y2lmaWNLZXlEZWxldGUoVGhyZWFkU3BlY2lmaWNLZXkga2V5KQotewotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihkZXN0cnVjdG9yc011dGV4KCkpOwotICAgIGRlc3RydWN0b3JzTGlzdCgpLnJlbW92
ZShrZXkpOwotICAgIGtleS0+flBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkoKTsKLSAgICA6OmZy
ZWUoa2V5KTsKLX0KLQotdm9pZCB0aHJlYWRTcGVjaWZpY1NldChUaHJlYWRTcGVjaWZpY0tleSBr
ZXksIHZvaWQqIGRhdGEpCi17Ci0gICAga2V5LT5zZXRWYWx1ZShkYXRhKTsKLX0KLQotdm9pZCog
dGhyZWFkU3BlY2lmaWNHZXQoVGhyZWFkU3BlY2lmaWNLZXkga2V5KQotewotICAgIHJldHVybiBr
ZXktPnZhbHVlKCk7Ci19Ci0KLXZvaWQgVGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0KCkKLXsKLSAg
ICBmb3IgKGxvbmcgaSA9IDA7IGkgPCB0bHNLZXlDb3VudCgpOyBpKyspIHsKLSAgICAgICAgLy8g
VGhlIGxheW91dCBvZiBUaHJlYWRTcGVjaWZpYzxUPjo6RGF0YSBkb2VzIG5vdCBkZXBlbmQgb24g
VC4gU28gd2UgYXJlIHNhZmUgdG8gZG8gdGhlIHN0YXRpYyBjYXN0IHRvIFRocmVhZFNwZWNpZmlj
PGludD4gaW4gb3JkZXIgdG8gYWNjZXNzIGl0cyBkYXRhIG1lbWJlci4KLSAgICAgICAgVGhyZWFk
U3BlY2lmaWM8aW50Pjo6RGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZFNwZWNpZmljPGlu
dD46OkRhdGEqPihUbHNHZXRWYWx1ZSh0bHNLZXlzKClbaV0pKTsKLSAgICAgICAgaWYgKGRhdGEp
Ci0gICAgICAgICAgICBkYXRhLT5kZXN0cnVjdG9yKGRhdGEpOwotICAgIH0KLQotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihkZXN0cnVjdG9yc011dGV4KCkpOwotICAgIFBsYXRmb3JtVGhyZWFkU3Bl
Y2lmaWNLZXkqIGtleSA9IGRlc3RydWN0b3JzTGlzdCgpLmhlYWQoKTsKLSAgICB3aGlsZSAoa2V5
KSB7Ci0gICAgICAgIFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkqIG5leHRLZXkgPSBrZXktPm5l
eHQoKTsKLSAgICAgICAga2V5LT5jYWxsRGVzdHJ1Y3RvcigpOwotICAgICAgICBrZXkgPSBuZXh0
S2V5OwotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyAhVVNFKFBU
SFJFQURTKQpJbmRleDogU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCShyZXZpc2lvbiAxOTk2ODIpCisr
KyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
MTAgKzEwMiw2IEBACiAjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlclNlZWQuaD4KICNpbmNsdWRl
IDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCi0jaWYgIVVTRShQVEhSRUFEUykgJiYgT1MoV0lORE9X
UykKLSNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgotI2VuZGlmCi0KICNpZiBIQVZFKEVSUk5P
X0gpCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNlbmRpZgpAQCAtMTk5LDExICsxOTUsNiBAQCBzdGF0
aWMgdW5zaWduZWQgX19zdGRjYWxsIHd0ZlRocmVhZEVudHJ5CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbj4gaW52b2NhdGlvbihzdGF0aWNfY2FzdDxUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24qPihwYXJhbSkpOwogICAgIGludm9jYXRpb24tPmZ1bmN0aW9uKGlu
dm9jYXRpb24tPmRhdGEpOwogCi0jaWYgIVVTRShQVEhSRUFEUykgJiYgT1MoV0lORE9XUykKLSAg
ICAvLyBEbyB0aGUgVExTIGNsZWFudXAuCi0gICAgVGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0KCk7
Ci0jZW5kaWYKLQogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTk2ODIp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBA
QAorMjAxNi0wNC0xOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBpVHVuZXMgY3Jhc2hpbmcgSmF2YVNjcmlwdENvcmUuZGxsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY2NDcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEaXNhYmxlZCBmYXN0L3dvcmtlcnMvZGVk
aWNhdGVkLXdvcmtlci1saWZlY3ljbGUuaHRtbCBhcyBpdCBjcmVhdGVzCisgICAgICAgIG1vcmUg
d29ya2VycyB0aGF0IHdlIGhhdmUgVGhyZWFkU3BlY2lmaWMga2V5cy4gIFdlIG5lZWQgYXQgbGVh
c3Qgb25lCisgICAgICAgIGtleSBwZXIgSlNDIFZNIHdlIGNyZWF0ZS4gIEkgZGlkbid0IHdhbnQg
dG8gd2Vha2VuIHRoZSB0ZXN0IGZvciBvdGhlcgorICAgICAgICBwbGF0Zm9ybXMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxNi0wNC0xOCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBDU1A6IFJlbW92ZSBzdHVi
cyBmb3IgZHluYW1pY2FsbHktYWRkZWQgZmF2aWNvbnMgKHZpYSBsaW5rIHJlbD0iaWNvbiIpCklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24g
MTk5NjgyKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMJKHdv
cmtpbmcgY29weSkKQEAgLTQzNyw2ICs0MzcsMTAgQEAgc3RvcmFnZS9zdG9yYWdlcXVvdGEtcXVl
cnktdXNhZ2UuaHRtbCBbCiBzdG9yYWdlL3N0b3JhZ2VxdW90YS1yZXF1ZXN0LXF1b3RhLmh0bWwg
WyBTa2lwIF0KIGZhc3Qvd29ya2Vycy93b3JrZXItc3RvcmFnZXF1b3RhLXF1ZXJ5LXVzYWdlLmh0
bWwgWyBTa2lwIF0KIAorIyBUaGUgbnVtYmVyIG9mIHdvcmtlcnMgaW4gdGhpcyB0ZXN0IGV4Y2Vl
ZHMgdGhlIG51bWJlciBvZgorIyBUaHJlYWRTcGVjaWZpY1ZhbHVlcyB3ZSBoYXZlIG9uIFdpbmRv
d3MuCitmYXN0L3dvcmtlcnMvZGVkaWNhdGVkLXdvcmtlci1saWZlY3ljbGUuaHRtbCBbIFNraXAg
XSAKKwogIyBUZXN0cyB0aGF0IHJlcXVpcmUgRU5BQkxFKERPV05MT0FEX0FUVFJJQlVURSkuCiBm
YXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9hZC5odG1sIFsgU2tpcCBd
CiBmYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxvYWQuaHRtbCBbIFNraXAg
XQo=
</data>
<flag name="review"
          id="300964"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276786</attachid>
            <date>2016-04-19 18:15:43 -0700</date>
            <delta_ts>2016-04-19 18:32:58 -0700</delta_ts>
            <desc>Patch with fixes for 32 bit Windows</desc>
            <filename>156647-5.patch</filename>
            <type>text/plain</type>
            <size>19568</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5NzQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBA
CisyMDE2LTA0LTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIGlUdW5lcyBjcmFzaGluZyBKYXZhU2NyaXB0Q29yZS5kbGwKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjY0NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdpdmVuIHRoYXQgdGhlcmUgdGhlcmUgYXJl
IG9ubHkgMTI4IEZMUyBpbmRpY2VzIGNvbXBhcmVkIHRvIG92ZXIgYSAxMDAwIGZvciBUTFMsCisg
ICAgICAgIEkgZWxpbWluYXRlZCB0aGUgdGhyZWFkIHNwZWNpZmljIG1fdGhyZWFkU3BlY2lmaWNG
b3JUaHJlYWQgYW5kIGluc3RlYWQgd2UgbG9vaworICAgICAgICBmb3IgdGhlIGN1cnJlbnQgdGhy
ZWFkIGluIG1fcmVnaXN0ZXJlZFRocmVhZHMgbGlzdCB3aGVuIHdlIG5lZWQgaXQuCisgICAgICAg
IEluIG1vc3QgY2FzZXMgdGhlcmUgd2lsbCBvbmx5IGJlIG9uZSB0aHJlYWQuCisKKyAgICAgICAg
QWRkZWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgdG8gc2lnbmF0dXJlIG9mIFRocmVhZFNwZWNpZmlj
IHJlbW92ZSBjYWxsYmFja3MKKyAgICAgICAgdG8gc2V0IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24g
Y29ycmVjdGx5IGZvciBXaW5kb3dzIDMyIGJpdC4KKworICAgICAgICAqIGhlYXAvTWFjaGluZVN0
YWNrTWFya2VyLmNwcDoKKyAgICAgICAgKEpTQzo6QWN0aXZlTWFjaGluZVRocmVhZHNNYW5hZ2Vy
OjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZHMp
OgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6fk1hY2hpbmVUaHJlYWRzKToKKyAgICAg
ICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OmFkZEN1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6bWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQpOgorICAgICAg
ICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKiBoZWFwL01h
Y2hpbmVTdGFja01hcmtlci5oOgorCiAyMDE2LTA0LTE4ICBPbGl2ZXIgSHVudCAgPG9saXZlckBh
cHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIHNlcGFyYXRlZCBoZWFwIGJ5IGRlZmF1bHQgb24g
aW9zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFj
a01hcmtlci5jcHAJKHJldmlzaW9uIDE5OTc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2V0LmFkZChtYWNoaW5lVGhyZWFkcyk7CiAgICAgfQog
Ci0gICAgdm9pZCByZW1vdmUoTWFjaGluZVRocmVhZHMqIG1hY2hpbmVUaHJlYWRzKQorICAgIHZv
aWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgcmVtb3ZlKE1hY2hpbmVUaHJlYWRzKiBtYWNoaW5lVGhy
ZWFkcykKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbWFuYWdlckxvY2sobV9sb2NrKTsKICAg
ICAgICAgYXV0byByZWNvcmRlZE1hY2hpbmVUaHJlYWRzID0gbV9zZXQudGFrZShtYWNoaW5lVGhy
ZWFkcyk7CkBAIC0xOTIsMTQgKzE5MiwxMiBAQCBzdGF0aWMgaW5saW5lIFBsYXRmb3JtVGhyZWFk
IGdldEN1cnJlbnRQCiBNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZHMoSGVhcCogaGVhcCkK
ICAgICA6IG1fcmVnaXN0ZXJlZFRocmVhZHMoMCkKICAgICAsIG1fdGhyZWFkU3BlY2lmaWNGb3JN
YWNoaW5lVGhyZWFkcygwKQotICAgICwgbV90aHJlYWRTcGVjaWZpY0ZvclRocmVhZCgwKQogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICAsIG1faGVhcChoZWFwKQogI2VuZGlmCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGhlYXApOwogICAgIHRocmVhZFNwZWNpZmljS2V5Q3JlYXRlKCZtX3RocmVhZFNw
ZWNpZmljRm9yTWFjaGluZVRocmVhZHMsIHJlbW92ZVRocmVhZCk7Ci0gICAgdGhyZWFkU3BlY2lm
aWNLZXlDcmVhdGUoJm1fdGhyZWFkU3BlY2lmaWNGb3JUaHJlYWQsIG51bGxwdHIpOwogICAgIGFj
dGl2ZU1hY2hpbmVUaHJlYWRzTWFuYWdlcigpLmFkZCh0aGlzKTsKIH0KIApAQCAtMjA3LDcgKzIw
NSw2IEBAIE1hY2hpbmVUaHJlYWRzOjp+TWFjaGluZVRocmVhZHMoKQogewogICAgIGFjdGl2ZU1h
Y2hpbmVUaHJlYWRzTWFuYWdlcigpLnJlbW92ZSh0aGlzKTsKICAgICB0aHJlYWRTcGVjaWZpY0tl
eURlbGV0ZShtX3RocmVhZFNwZWNpZmljRm9yTWFjaGluZVRocmVhZHMpOwotICAgIHRocmVhZFNw
ZWNpZmljS2V5RGVsZXRlKG1fdGhyZWFkU3BlY2lmaWNGb3JUaHJlYWQpOwogCiAgICAgTG9ja0hv
bGRlciByZWdpc3RlcmVkVGhyZWFkc0xvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKICAg
ICBmb3IgKFRocmVhZCogdCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHQ7KSB7CkBAIC0yMzQsMTgg
KzIzMSw2IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OlRocmVhZDo6b3BlcmF0b3I9PSgKICNlbmRp
ZgogfQogCi0jaWZuZGVmIE5ERUJVRwotc3RhdGljIGJvb2wgaXNUaHJlYWRJbkxpc3QoVGhyZWFk
KiBsaXN0SGVhZCwgVGhyZWFkKiB0YXJnZXQpCi17Ci0gICAgZm9yIChUaHJlYWQqIHRocmVhZCA9
IGxpc3RIZWFkOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkgewotICAgICAgICBpZiAo
dGhyZWFkID09IHRhcmdldCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCiB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJy
ZW50VGhyZWFkKCkKIHsKICAgICBBU1NFUlQoIW1faGVhcC0+dm0oKS0+aGFzRXhjbHVzaXZlVGhy
ZWFkKCkgfHwgbV9oZWFwLT52bSgpLT5leGNsdXNpdmVUaHJlYWQoKSA9PSBzdGQ6OnRoaXNfdGhy
ZWFkOjpnZXRfaWQoKSk7CkBAIC0yNTQsMTUgKzIzOSwxMiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRz
OjphZGRDdXJyZW50VGhyZWFkKCkKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIExvY2tIb2xkZXIg
bG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwogICAgICAgICBBU1NFUlQodGhyZWFkU3Bl
Y2lmaWNHZXQobV90aHJlYWRTcGVjaWZpY0Zvck1hY2hpbmVUaHJlYWRzKSA9PSB0aGlzKTsKLSAg
ICAgICAgQVNTRVJUKHRocmVhZFNwZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JUaHJlYWQp
KTsKLSAgICAgICAgQVNTRVJUKGlzVGhyZWFkSW5MaXN0KG1fcmVnaXN0ZXJlZFRocmVhZHMsIHN0
YXRpY19jYXN0PFRocmVhZCo+KHRocmVhZFNwZWNpZmljR2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JU
aHJlYWQpKSkpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBUaHJlYWQq
IHRocmVhZCA9IFRocmVhZDo6Y3JlYXRlRm9yQ3VycmVudFRocmVhZCgpOwogICAgIHRocmVhZFNw
ZWNpZmljU2V0KG1fdGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkcywgdGhpcyk7Ci0gICAg
dGhyZWFkU3BlY2lmaWNTZXQobV90aHJlYWRTcGVjaWZpY0ZvclRocmVhZCwgdGhyZWFkKTsKIAog
ICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwogCkBAIC0yNzIs
MTcgKzI1NCwxOCBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjphZGRDdXJyZW50VGhyZWFkKCkKIAog
VGhyZWFkKiBNYWNoaW5lVGhyZWFkczo6bWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKQog
ewotICAgIFRocmVhZCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VGhyZWFkKj4odGhyZWFkU3BlY2lm
aWNHZXQobV90aHJlYWRTcGVjaWZpY0ZvclRocmVhZCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJl
c3VsdCk7Ci0jaWZuZGVmIE5ERUJVRwogICAgIExvY2tIb2xkZXIgbG9jayhtX3JlZ2lzdGVyZWRU
aHJlYWRzTXV0ZXgpOwotICAgIEFTU0VSVChpc1RocmVhZEluTGlzdChtX3JlZ2lzdGVyZWRUaHJl
YWRzLCByZXN1bHQpKTsKLSNlbmRpZgorICAgIFBsYXRmb3JtVGhyZWFkIHBsYXRmb3JtVGhyZWFk
ID0gZ2V0Q3VycmVudFBsYXRmb3JtVGhyZWFkKCk7CisgICAgZm9yIChUaHJlYWQqIHRocmVhZCA9
IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KSB7Cisg
ICAgICAgIGlmICgqdGhyZWFkID09IHBsYXRmb3JtVGhyZWFkKQorICAgICAgICAgICAgcmV0dXJu
IHRocmVhZDsKKyAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgTWFjaGluZVRo
cmVhZHM6OnJlbW92ZVRocmVhZCh2b2lkKiBwKQordm9pZCBUSFJFQURfU1BFQ0lGSUNfQ0FMTCBN
YWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkKHZvaWQqIHApCiB7CiAgICAgYXV0byYgbWFuYWdl
ciA9IGFjdGl2ZU1hY2hpbmVUaHJlYWRzTWFuYWdlcigpOwogICAgIEFjdGl2ZU1hY2hpbmVUaHJl
YWRzTWFuYWdlcjo6TG9ja2VyIGxvY2sobWFuYWdlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkocmV2aXNpb24gMTk5NzQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJ5Q29weU90
aGVyVGhyZWFkU3RhY2soVGhyZWFkKiwgdm9pZCosIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90Kik7
CiAgICAgYm9vbCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoTG9ja0hvbGRlciYsIHZvaWQqLCBz
aXplX3QgY2FwYWNpdHksIHNpemVfdCopOwogCi0gICAgc3RhdGljIHZvaWQgcmVtb3ZlVGhyZWFk
KHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBUSFJFQURfU1BFQ0lGSUNfQ0FMTCByZW1vdmVUaHJl
YWQodm9pZCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGxhdGZvcm1UaHJlYWQ+CiAgICAg
dm9pZCByZW1vdmVUaHJlYWRJZkZvdW5kKFBsYXRmb3JtVGhyZWFkKTsKQEAgLTE1OSw3ICsxNTks
NiBAQCBwcml2YXRlOgogICAgIExvY2sgbV9yZWdpc3RlcmVkVGhyZWFkc011dGV4OwogICAgIFRo
cmVhZCogbV9yZWdpc3RlcmVkVGhyZWFkczsKICAgICBXVEY6OlRocmVhZFNwZWNpZmljS2V5IG1f
dGhyZWFkU3BlY2lmaWNGb3JNYWNoaW5lVGhyZWFkczsKLSAgICBXVEY6OlRocmVhZFNwZWNpZmlj
S2V5IG1fdGhyZWFkU3BlY2lmaWNGb3JUaHJlYWQ7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAg
IEhlYXAqIG1faGVhcDsKICNlbmRpZgpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTc0NCkKKysrIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTYtMDQt
MTkgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgaVR1bmVz
IGNyYXNoaW5nIEphdmFTY3JpcHRDb3JlLmRsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSWYgYSB0aHJlYWQgd2FzIGNyZWF0ZWQgd2l0aG91dCB1c2lu
ZyB0aGUgV1RGIHRocmVhZCBhcGlzIGFuZCB0aGF0IHRocmVhZCB1c2VzCisgICAgICAgIGEgSmF2
YVNjcmlwdCBWTSBhbmQgdGhhdCB0aHJlYWQgZXhpdHMgd2l0aCB0aGUgVk0gc3RpbGwgYXJvdW5k
LCBKU0Mgd29uJ3Qga25vdworICAgICAgICB0aGF0IHRoZSB0aHJlYWQgaGFzIGV4aXRlZC4gIEN1
cnJlbnRseSwgd2UgdXNlIFRocmVhZFNwZWNpZmljVGhyZWFkRXhpdCgpIHRvCisgICAgICAgIGNs
ZWFuIHVwIGFueSB0aHJlYWQgc3BlY2lmaWMga2V5cy4gIENsZWFuaW5nIHVwIHRoZXNlIGtleXMg
aXMgaG93IEpTQyBpcworICAgICAgICBub3RpZmllZCBvZiBhIHRocmVhZCBleGl0LiAgV2Ugb25s
eSBjYWxsIFRocmVhZFNwZWNpZmljVGhyZWFkRXhpdCgpIGZyb20KKyAgICAgICAgd3RmVGhyZWFk
RW50cnlQb2ludCgpIHdoZW4gdGhlIHRocmVhZCBlbnRyeSBwb2ludCBmdW5jdGlvbiByZXR1cm5z
LgorICAgICAgICBUaGlzIG1lY2hhbmlzbSB3YXMgcHV0IGluIHBsYWNlIGZvciBXaW5kb3MgYmVj
YXVzZSB3ZSBsYXllciB0aGUgV1RGOjpUaHJlYWRTcGVjaWZpYworICAgICAgICBmdW5jdGlvbmFs
aXR5IG9uIHRvcCBvZiBUTFMgKFRocmVhZCBMb2NhbCBTdG9yYWdlKSwgYnV0IFRMUyBkb2Vzbid0
IGhhdmUKKyAgICAgICAgYSB0aHJlYWQgZXhpdGluZyBjYWxsYmFjayB0aGUgd2F5IHRoYXQgcHRo
cmVhZF9jcmVhdGVfa2V5LgorCisgICAgICAgIFRoZSBmaXggaXMgdG8gY2hhbmdlIGZyb20gdXNp
bmcgVExTIHRvIHVzaW5nIEZMUyAoRmliZXIgTG9jYWwgU3RvcmFnZSkuICBBbHRob3VnaAorICAg
ICAgICBXaW5kb3dzIGFsbG93cyBtdWx0aXBsZSBmaWJlcnMgcGVyIHRocmVhZCwgV2ViS2l0IGlz
IG5vdCBkZXNpZ25lZCB0byB3b3JrIHdpdGggYQorICAgICAgICBtdWx0aXBsZSBmaWJlcnMgcGVy
IHRocmVhZC4gIFdoZW4gdGhlciBpcyBvbmx5IG9uZSBmaWJlciBwZXIgdGhyZWFkLCBGTFMgd29y
a3MganVzdAorICAgICAgICBsaWtlIFRMUywgYnV0IGl0IGhhcyB0aGUgZGVzdHJveSBjYWxsYmFj
ay4KKworICAgICAgICBJIHJlc3RydWN0dXJlZCB0aGUgV2luZG93cyB2ZXJzaW9uIG9mIFdURjo6
VGhyZWFkU3BlY2lmaWMgdG8gYmUgYWxtb3N0IHRoZSBzYW1lCisgICAgICAgIGFzIHRoZSBwdGhy
ZWFkIHZlcnNpb24uICBBZGRlZCBUSFJFQURfU1BFQ0lGSUNfQ0FMTCB0byBzZXQgdGhlIGNvcnJl
Y3QKKyAgICAgICAgY2FsbGluZyBjb252ZW5jdGlvbiBmb3IgV2luZG93cyAzMiBiaXQuCisKKyAg
ICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWMuaDoKKyAgICAgICAgKFdURjo6dGhyZWFkU3BlY2lm
aWNLZXlDcmVhdGUpOgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVjaWZpY0tleURlbGV0ZSk6Cisg
ICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0KToKKyAgICAgICAgKFdURjo6dGhyZWFkU3Bl
Y2lmaWNHZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6VGhyZWFkU3BlY2lm
aWMpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6flRocmVhZFNwZWNpZmljKToK
KyAgICAgICAgKFdURjo6VGhyZWFkU3BlY2lmaWM8VD46OmdldCk6CisgICAgICAgIChXVEY6OlRo
cmVhZFNwZWNpZmljPFQ+OjpzZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRTcGVjaWZpYzxUPjo6
ZGVzdHJveSk6CisgICAgICAgIFJlc3RydWN0dXJlZCB0byB1c2UgRkxTLiAgUmVuYW1lZCBUTFMq
IHRvIEZMUyouCisKKyAgICAgICAgKiB3dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3BwOgorICAgICAg
ICAoV1RGOjpmbHNLZXlDb3VudCk6CisgICAgICAgIChXVEY6OmZsc0tleXMpOgorICAgICAgICBS
ZW5hbWVkIGZyb20gdGxzS2V5KigpIHRvIGZsc0tleSooKS4KKworICAgICAgICAoV1RGOjpkZXN0
cnVjdG9yc0xpc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXN0cnVjdG9yc011dGV4KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleTo6UGxhdGZv
cm1UaHJlYWRTcGVjaWZpY0tleSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBsYXRmb3JtVGhy
ZWFkU3BlY2lmaWNLZXk6On5QbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleTo6c2V0VmFsdWUpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5Ojp2YWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk6OmNhbGxEZXN0cnVj
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGxzS2V5Q291bnQpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjp0bHNLZXlzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dGhyZWFkU3BlY2lm
aWNLZXlDcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp0aHJlYWRTcGVjaWZpY0tleURl
bGV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnRocmVhZFNwZWNpZmljU2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6dGhyZWFkU3BlY2lmaWNHZXQpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpUaHJlYWRTcGVjaWZpY1RocmVhZEV4aXQpOiBEZWxldGVkLgorCisgICAgICAgICogd3Rm
L1RocmVhZGluZ1dpbi5jcHA6CisgICAgICAgIChXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQpOiBF
bGltaW5hdGVkIGNhbGwgdG8gVGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0LgorCiAyMDE2LTA0LTE5
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTk5NzI2LgpJbmRleDogU291cmNlL1dURi93dGYvVGhyZWFk
U3BlY2lmaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5o
CShyZXZpc2lvbiAxOTk3NDQpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVjaWZpYy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MywxMCArNTMsMTAgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLSNp
ZiBPUyhXSU5ET1dTKQotLy8gVGhyZWFkU3BlY2lmaWNUaHJlYWRFeGl0IHNob3VsZCBiZSBjYWxs
ZWQgZWFjaCB0aW1lIHdoZW4gYSB0aHJlYWQgaXMgZGV0YWNoZWQuCi0vLyBUaGlzIGlzIGRvbmUg
YXV0b21hdGljYWxseSBmb3IgdGhyZWFkcyBjcmVhdGVkIHdpdGggV1RGOjpjcmVhdGVUaHJlYWQu
Ci12b2lkIFRocmVhZFNwZWNpZmljVGhyZWFkRXhpdCgpOworI2lmIE9TKFdJTkRPV1MpICYmIENQ
VShYODYpCisjZGVmaW5lIFRIUkVBRF9TUEVDSUZJQ19DQUxMIF9fc3RkY2FsbAorI2Vsc2UKKyNk
ZWZpbmUgVEhSRUFEX1NQRUNJRklDX0NBTEwKICNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjbGFzcyBUaHJlYWRTcGVjaWZpYyB7CkBAIC03MywxMCArNzMsNiBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogcHJpdmF0ZToKLSNpZiBPUyhXSU5ET1dTKQotICAgIGZyaWVuZCB2b2lkIFRocmVhZFNw
ZWNpZmljVGhyZWFkRXhpdCgpOwotI2VuZGlmCi0KICAgICAvLyBOb3QgaW1wbGVtZW50ZWQuIEl0
J3MgdGVjaG5pY2FsbHkgcG9zc2libGUgdG8gZGVzdHJveSBhIHRocmVhZCBzcGVjaWZpYyBrZXks
IGJ1dCBvbmUgd291bGQgbmVlZAogICAgIC8vIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCB2YWx1ZXMg
aGF2ZSBiZWVuIGRlc3Ryb3llZCBhbHJlYWR5ICh1c3VhbGx5LCB0aGF0IGFsbCB0aHJlYWRzIHRo
YXQgdXNlZCBpdAogICAgIC8vIGhhdmUgZXhpdGVkKS4gSXQncyB1bmxpa2VseSB0aGF0IGFueSB1
c2VyIG9mIHRoaXMgY2FsbCB3aWxsIGJlIGluIHRoYXQgc2l0dWF0aW9uIC0gYW5kIGhhdmluZwpA
QCAtODUsNyArODEsNyBAQCBwcml2YXRlOgogCiAgICAgVCogZ2V0KCk7CiAgICAgdm9pZCBzZXQo
VCopOwotICAgIHZvaWQgc3RhdGljIGRlc3Ryb3kodm9pZCogcHRyKTsKKyAgICB2b2lkIHN0YXRp
YyBUSFJFQURfU1BFQ0lGSUNfQ0FMTCBkZXN0cm95KHZvaWQqIHB0cik7CiAKICAgICBzdHJ1Y3Qg
RGF0YSB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGEpOwpAQCAtOTQsOSArOTAs
NiBAQCBwcml2YXRlOgogCiAgICAgICAgIFQqIHZhbHVlOwogICAgICAgICBUaHJlYWRTcGVjaWZp
YzxUPiogb3duZXI7Ci0jaWYgT1MoV0lORE9XUykKLSAgICAgICAgdm9pZCAoKmRlc3RydWN0b3Ip
KHZvaWQqKTsKLSNlbmRpZgogICAgIH07CiAKICNpZiBVU0UoUFRIUkVBRFMpCkBAIC0xNTgsNDcg
KzE1MSw2NCBAQCBpbmxpbmUgdm9pZCBUaHJlYWRTcGVjaWZpYzxUPjo6c2V0KFQqIHB0CiAKICNl
bGlmIE9TKFdJTkRPV1MpCiAKLS8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBUTFMga2V5cyB0aGF0
IGNhbiBiZSBjcmVhdGVkLiBGb3Igc2ltcGxpZmljYXRpb24sIHdlIGFzc3VtZSB0aGF0OgorLy8g
VGhlIG1heGltdW0gbnVtYmVyIG9mIEZMUyBrZXlzIHRoYXQgY2FuIGJlIGNyZWF0ZWQuIEZvciBz
aW1wbGlmaWNhdGlvbiwgd2UgYXNzdW1lIHRoYXQ6CiAvLyAxKSBPbmNlIHRoZSBpbnN0YW5jZSBv
ZiBUaHJlYWRTcGVjaWZpYzw+IGlzIGNyZWF0ZWQsIGl0IHdpbGwgbm90IGJlIGRlc3RydWN0ZWQg
dW50aWwgdGhlIHByb2dyYW0gZGllcy4KIC8vIDIpIFdlIGRvIG5vdCBuZWVkIHRvIGhvbGQgbWFu
eSBpbnN0YW5jZXMgb2YgVGhyZWFkU3BlY2lmaWM8PiBkYXRhLiBUaGlzIGZpeGVkIG51bWJlciBz
aG91bGQgYmUgZmFyIGVub3VnaC4KLWNvbnN0IGludCBrTWF4VGxzS2V5U2l6ZSA9IDI1NjsKK2Nv
bnN0IGludCBrTWF4RmxzS2V5U2l6ZSA9IDEyODsKKworV1RGX0VYUE9SVF9QUklWQVRFIGxvbmcm
IGZsc0tleUNvdW50KCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgRFdPUkQqIGZsc0tleXMoKTsKIAot
V1RGX0VYUE9SVF9QUklWQVRFIGxvbmcmIHRsc0tleUNvdW50KCk7Ci1XVEZfRVhQT1JUX1BSSVZB
VEUgRFdPUkQqIHRsc0tleXMoKTsKK3R5cGVkZWYgRFdPUkQgVGhyZWFkU3BlY2lmaWNLZXk7CiAK
LWNsYXNzIFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXk7Ci10eXBlZGVmIFBsYXRmb3JtVGhyZWFk
U3BlY2lmaWNLZXkqIFRocmVhZFNwZWNpZmljS2V5OworaW5saW5lIHZvaWQgdGhyZWFkU3BlY2lm
aWNLZXlDcmVhdGUoVGhyZWFkU3BlY2lmaWNLZXkqIGtleSwgdm9pZCAoVEhSRUFEX1NQRUNJRklD
X0NBTEwgKmRlc3RydWN0b3IpKHZvaWQgKikpCit7CisgICAgRFdPUkQgZmxzS2V5ID0gRmxzQWxs
b2MoZGVzdHJ1Y3Rvcik7CisgICAgaWYgKGZsc0tleSA9PSBGTFNfT1VUX09GX0lOREVYRVMpCisg
ICAgICAgIENSQVNIKCk7CiAKLVdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHRocmVhZFNwZWNpZmlj
S2V5Q3JlYXRlKFRocmVhZFNwZWNpZmljS2V5Kiwgdm9pZCAoKikodm9pZCAqKSk7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB0aHJlYWRTcGVjaWZpY0tleURlbGV0ZShUaHJlYWRTcGVjaWZpY0tl
eSk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB0aHJlYWRTcGVjaWZpY1NldChUaHJlYWRTcGVj
aWZpY0tleSwgdm9pZCopOwotV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRocmVhZFNwZWNpZmlj
R2V0KFRocmVhZFNwZWNpZmljS2V5KTsKKyAgICAqa2V5ID0gZmxzS2V5OworfQorCitpbmxpbmUg
dm9pZCB0aHJlYWRTcGVjaWZpY0tleURlbGV0ZShUaHJlYWRTcGVjaWZpY0tleSBrZXkpCit7Cisg
ICAgRmxzRnJlZShrZXkpOworfQorCitpbmxpbmUgdm9pZCB0aHJlYWRTcGVjaWZpY1NldChUaHJl
YWRTcGVjaWZpY0tleSBrZXksIHZvaWQqIGRhdGEpCit7CisgICAgRmxzU2V0VmFsdWUoa2V5LCBk
YXRhKTsKK30KKworaW5saW5lIHZvaWQqIHRocmVhZFNwZWNpZmljR2V0KFRocmVhZFNwZWNpZmlj
S2V5IGtleSkKK3sKKyAgICByZXR1cm4gRmxzR2V0VmFsdWUoa2V5KTsKK30KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KIGlubGluZSBUaHJlYWRTcGVjaWZpYzxUPjo6VGhyZWFkU3BlY2lmaWMoKQog
ICAgIDogbV9pbmRleCgtMSkKIHsKLSAgICBEV09SRCB0bHNLZXkgPSBUbHNBbGxvYygpOwotICAg
IGlmICh0bHNLZXkgPT0gVExTX09VVF9PRl9JTkRFWEVTKQorICAgIERXT1JEIGZsc0tleSA9IEZs
c0FsbG9jKGRlc3Ryb3kpOworICAgIGlmIChmbHNLZXkgPT0gRkxTX09VVF9PRl9JTkRFWEVTKQog
ICAgICAgICBDUkFTSCgpOwogCi0gICAgbV9pbmRleCA9IEludGVybG9ja2VkSW5jcmVtZW50KCZ0
bHNLZXlDb3VudCgpKSAtIDE7Ci0gICAgaWYgKG1faW5kZXggPj0ga01heFRsc0tleVNpemUpCisg
ICAgbV9pbmRleCA9IEludGVybG9ja2VkSW5jcmVtZW50KCZmbHNLZXlDb3VudCgpKSAtIDE7Cisg
ICAgaWYgKG1faW5kZXggPj0ga01heEZsc0tleVNpemUpCiAgICAgICAgIENSQVNIKCk7Ci0gICAg
dGxzS2V5cygpW21faW5kZXhdID0gdGxzS2V5OworICAgIGZsc0tleXMoKVttX2luZGV4XSA9IGZs
c0tleTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBUaHJlYWRTcGVjaWZpYzxU
Pjo6flRocmVhZFNwZWNpZmljKCkKIHsKLSAgICAvLyBEb2VzIG5vdCBpbnZva2UgZGVzdHJ1Y3Rv
ciBmdW5jdGlvbnMuIFRoZXkgd2lsbCBiZSBjYWxsZWQgZnJvbSBUaHJlYWRTcGVjaWZpY1RocmVh
ZEV4aXQgd2hlbiB0aGUgdGhyZWFkIGlzIGRldGFjaGVkLgotICAgIFRsc0ZyZWUodGxzS2V5cygp
W21faW5kZXhdKTsKKyAgICBGbHNGcmVlKGZsc0tleXMoKVttX2luZGV4XSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgVCogVGhyZWFkU3BlY2lmaWM8VD46OmdldCgpCiB7Ci0g
ICAgRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PERhdGEqPihUbHNHZXRWYWx1ZSh0bHNLZXlzKClb
bV9pbmRleF0pKTsKKyAgICBEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8RGF0YSo+KEZsc0dldFZh
bHVlKGZsc0tleXMoKVttX2luZGV4XSkpOwogICAgIHJldHVybiBkYXRhID8gZGF0YS0+dmFsdWUg
OiAwOwogfQogCkBAIC0yMDcsOCArMjE3LDcgQEAgaW5saW5lIHZvaWQgVGhyZWFkU3BlY2lmaWM8
VD46OnNldChUKiBwdAogewogICAgIEFTU0VSVCghZ2V0KCkpOwogICAgIERhdGEqIGRhdGEgPSBu
ZXcgRGF0YShwdHIsIHRoaXMpOwotICAgIGRhdGEtPmRlc3RydWN0b3IgPSAmVGhyZWFkU3BlY2lm
aWM8VD46OmRlc3Ryb3k7Ci0gICAgVGxzU2V0VmFsdWUodGxzS2V5cygpW21faW5kZXhdLCBkYXRh
KTsKKyAgICBGbHNTZXRWYWx1ZShmbHNLZXlzKClbbV9pbmRleF0sIGRhdGEpOwogfQogCiAjZWxz
ZQpAQCAtMjE2LDcgKzIyNSw3IEBAIGlubGluZSB2b2lkIFRocmVhZFNwZWNpZmljPFQ+OjpzZXQo
VCogcHQKICNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHZvaWQgVGhyZWFk
U3BlY2lmaWM8VD46OmRlc3Ryb3kodm9pZCogcHRyKQoraW5saW5lIHZvaWQgVEhSRUFEX1NQRUNJ
RklDX0NBTEwgVGhyZWFkU3BlY2lmaWM8VD46OmRlc3Ryb3kodm9pZCogcHRyKQogewogICAgIERh
dGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4ocHRyKTsKIApAQCAtMjMyLDcgKzI0MSw3IEBA
IGlubGluZSB2b2lkIFRocmVhZFNwZWNpZmljPFQ+OjpkZXN0cm95KHYKICNpZiBVU0UoUFRIUkVB
RFMpCiAgICAgcHRocmVhZF9zZXRzcGVjaWZpYyhkYXRhLT5vd25lci0+bV9rZXksIDApOwogI2Vs
aWYgT1MoV0lORE9XUykKLSAgICBUbHNTZXRWYWx1ZSh0bHNLZXlzKClbZGF0YS0+b3duZXItPm1f
aW5kZXhdLCAwKTsKKyAgICBGbHNTZXRWYWx1ZShmbHNLZXlzKClbZGF0YS0+b3duZXItPm1faW5k
ZXhdLCAwKTsKICNlbHNlCiAjZXJyb3IgVGhyZWFkU3BlY2lmaWMgaXMgbm90IGltcGxlbWVudGVk
IGZvciB0aGlzIHBsYXRmb3JtLgogI2VuZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRT
cGVjaWZpY1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkU3BlY2lm
aWNXaW4uY3BwCShyZXZpc2lvbiAxOTk3NDQpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRTcGVj
aWZpY1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExNyArMjQsMjIgQEAKIAogI2lmIE9T
KFdJTkRPV1MpCiAKLSNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKLSNpbmNsdWRlICJUaHJlYWRp
bmdQcmltaXRpdmVzLmgiCi0jaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KLQogI2lm
ICFVU0UoUFRIUkVBRFMpCiAKIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgRG91Ymx5TGlua2Vk
TGlzdDxQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5PiYgZGVzdHJ1Y3RvcnNMaXN0KCkKLXsKLSAg
ICBzdGF0aWMgRG91Ymx5TGlua2VkTGlzdDxQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5PiBzdGF0
aWNMaXN0OwotICAgIHJldHVybiBzdGF0aWNMaXN0OwotfQotCi1zdGF0aWMgTXV0ZXgmIGRlc3Ry
dWN0b3JzTXV0ZXgoKQotewotICAgIHN0YXRpYyBNdXRleCBzdGF0aWNNdXRleDsKLSAgICByZXR1
cm4gc3RhdGljTXV0ZXg7Ci19Ci0KLWNsYXNzIFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkgOiBw
dWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8UGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleT4gewot
cHVibGljOgotICAgIGZyaWVuZCBjbGFzcyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxQbGF0Zm9ybVRo
cmVhZFNwZWNpZmljS2V5PjsKLQotICAgIFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkodm9pZCAo
KmRlc3RydWN0b3IpKHZvaWQgKikpCi0gICAgICAgIDogbV9kZXN0cnVjdG9yKGRlc3RydWN0b3Ip
Ci0gICAgewotICAgICAgICBtX3Rsc0tleSA9IFRsc0FsbG9jKCk7Ci0gICAgICAgIGlmIChtX3Rs
c0tleSA9PSBUTFNfT1VUX09GX0lOREVYRVMpCi0gICAgICAgICAgICBDUkFTSCgpOwotICAgIH0K
LQotICAgIH5QbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KCkKLSAgICB7Ci0gICAgICAgIFRsc0Zy
ZWUobV90bHNLZXkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0VmFsdWUodm9pZCogZGF0YSkgeyBU
bHNTZXRWYWx1ZShtX3Rsc0tleSwgZGF0YSk7IH0KLSAgICB2b2lkKiB2YWx1ZSgpIHsgcmV0dXJu
IFRsc0dldFZhbHVlKG1fdGxzS2V5KTsgfQotCi0gICAgdm9pZCBjYWxsRGVzdHJ1Y3RvcigpCi0g
ICAgewotICAgICAgIGlmICh2b2lkKiBkYXRhID0gdmFsdWUoKSkKLSAgICAgICAgICAgIG1fZGVz
dHJ1Y3RvcihkYXRhKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCAoKm1fZGVzdHJ1Y3Rv
cikodm9pZCAqKTsKLSAgICBEV09SRCBtX3Rsc0tleTsKLSAgICBQbGF0Zm9ybVRocmVhZFNwZWNp
ZmljS2V5KiBtX3ByZXY7Ci0gICAgUGxhdGZvcm1UaHJlYWRTcGVjaWZpY0tleSogbV9uZXh0Owot
fTsKLQotbG9uZyYgdGxzS2V5Q291bnQoKQorbG9uZyYgZmxzS2V5Q291bnQoKQogewogICAgIHN0
YXRpYyBsb25nIGNvdW50OwogICAgIHJldHVybiBjb3VudDsKIH0KIAotRFdPUkQqIHRsc0tleXMo
KQorRFdPUkQqIGZsc0tleXMoKQogewotICAgIHN0YXRpYyBEV09SRCBrZXlzW2tNYXhUbHNLZXlT
aXplXTsKKyAgICBzdGF0aWMgRFdPUkQga2V5c1trTWF4RmxzS2V5U2l6ZV07CiAgICAgcmV0dXJu
IGtleXM7CiB9CiAKLXZvaWQgdGhyZWFkU3BlY2lmaWNLZXlDcmVhdGUoVGhyZWFkU3BlY2lmaWNL
ZXkqIGtleSwgdm9pZCAoKmRlc3RydWN0b3IpKHZvaWQgKikpCi17Ci0gICAgLy8gVXNlIHRoZSBv
cmlnaW5hbCBtYWxsb2MoKSBpbnN0ZWFkIG9mIGZhc3RNYWxsb2MoKSB0byB1c2UgdGhpcyBmdW5j
dGlvbiBpbiBGYXN0TWFsbG9jIGNvZGUuCi0gICAgKmtleSA9IHN0YXRpY19jYXN0PFBsYXRmb3Jt
VGhyZWFkU3BlY2lmaWNLZXkqPig6Om1hbGxvYyhzaXplb2YoUGxhdGZvcm1UaHJlYWRTcGVjaWZp
Y0tleSkpKTsKLSAgICBuZXcgKCprZXkpIFBsYXRmb3JtVGhyZWFkU3BlY2lmaWNLZXkoZGVzdHJ1
Y3Rvcik7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIoZGVzdHJ1Y3RvcnNNdXRleCgpKTsKLSAg
ICBkZXN0cnVjdG9yc0xpc3QoKS5wdXNoKCprZXkpOwotfQotCi12b2lkIHRocmVhZFNwZWNpZmlj
S2V5RGVsZXRlKFRocmVhZFNwZWNpZmljS2V5IGtleSkKLXsKLSAgICBNdXRleExvY2tlciBsb2Nr
ZXIoZGVzdHJ1Y3RvcnNNdXRleCgpKTsKLSAgICBkZXN0cnVjdG9yc0xpc3QoKS5yZW1vdmUoa2V5
KTsKLSAgICBrZXktPn5QbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KCk7Ci0gICAgOjpmcmVlKGtl
eSk7Ci19Ci0KLXZvaWQgdGhyZWFkU3BlY2lmaWNTZXQoVGhyZWFkU3BlY2lmaWNLZXkga2V5LCB2
b2lkKiBkYXRhKQotewotICAgIGtleS0+c2V0VmFsdWUoZGF0YSk7Ci19Ci0KLXZvaWQqIHRocmVh
ZFNwZWNpZmljR2V0KFRocmVhZFNwZWNpZmljS2V5IGtleSkKLXsKLSAgICByZXR1cm4ga2V5LT52
YWx1ZSgpOwotfQotCi12b2lkIFRocmVhZFNwZWNpZmljVGhyZWFkRXhpdCgpCi17Ci0gICAgZm9y
IChsb25nIGkgPSAwOyBpIDwgdGxzS2V5Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgIC8vIFRoZSBs
YXlvdXQgb2YgVGhyZWFkU3BlY2lmaWM8VD46OkRhdGEgZG9lcyBub3QgZGVwZW5kIG9uIFQuIFNv
IHdlIGFyZSBzYWZlIHRvIGRvIHRoZSBzdGF0aWMgY2FzdCB0byBUaHJlYWRTcGVjaWZpYzxpbnQ+
IGluIG9yZGVyIHRvIGFjY2VzcyBpdHMgZGF0YSBtZW1iZXIuCi0gICAgICAgIFRocmVhZFNwZWNp
ZmljPGludD46OkRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWRTcGVjaWZpYzxpbnQ+OjpE
YXRhKj4oVGxzR2V0VmFsdWUodGxzS2V5cygpW2ldKSk7Ci0gICAgICAgIGlmIChkYXRhKQotICAg
ICAgICAgICAgZGF0YS0+ZGVzdHJ1Y3RvcihkYXRhKTsKLSAgICB9Ci0KLSAgICBNdXRleExvY2tl
ciBsb2NrZXIoZGVzdHJ1Y3RvcnNNdXRleCgpKTsKLSAgICBQbGF0Zm9ybVRocmVhZFNwZWNpZmlj
S2V5KiBrZXkgPSBkZXN0cnVjdG9yc0xpc3QoKS5oZWFkKCk7Ci0gICAgd2hpbGUgKGtleSkgewot
ICAgICAgICBQbGF0Zm9ybVRocmVhZFNwZWNpZmljS2V5KiBuZXh0S2V5ID0ga2V5LT5uZXh0KCk7
Ci0gICAgICAgIGtleS0+Y2FsbERlc3RydWN0b3IoKTsKLSAgICAgICAga2V5ID0gbmV4dEtleTsK
LSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gIVVTRShQVEhSRUFE
UykKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAkocmV2aXNpb24gMTk5NzQ0KQorKysgU291
cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDEwICsx
MDIsNiBAQAogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXJTZWVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1dURlRocmVhZERhdGEuaD4KIAotI2lmICFVU0UoUFRIUkVBRFMpICYmIE9TKFdJTkRPV1MpCi0j
aW5jbHVkZSAiVGhyZWFkU3BlY2lmaWMuaCIKLSNlbmRpZgotCiAjaWYgSEFWRShFUlJOT19IKQog
I2luY2x1ZGUgPGVycm5vLmg+CiAjZW5kaWYKQEAgLTE5OSwxMSArMTk1LDYgQEAgc3RhdGljIHVu
c2lnbmVkIF9fc3RkY2FsbCB3dGZUaHJlYWRFbnRyeQogICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24+IGludm9jYXRpb24oc3RhdGljX2Nhc3Q8VGhyZWFkRnVuY3Rp
b25JbnZvY2F0aW9uKj4ocGFyYW0pKTsKICAgICBpbnZvY2F0aW9uLT5mdW5jdGlvbihpbnZvY2F0
aW9uLT5kYXRhKTsKIAotI2lmICFVU0UoUFRIUkVBRFMpICYmIE9TKFdJTkRPV1MpCi0gICAgLy8g
RG8gdGhlIFRMUyBjbGVhbnVwLgotICAgIFRocmVhZFNwZWNpZmljVGhyZWFkRXhpdCgpOwotI2Vu
ZGlmCi0KICAgICByZXR1cm4gMDsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5NzQ0KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MTYtMDQtMTkgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAg
aVR1bmVzIGNyYXNoaW5nIEphdmFTY3JpcHRDb3JlLmRsbAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NjQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlzYWJsZWQgZmFzdC93b3JrZXJzL2RlZGljYXRl
ZC13b3JrZXItbGlmZWN5Y2xlLmh0bWwgYXMgaXQgY3JlYXRlcworICAgICAgICBtb3JlIHdvcmtl
cnMgdGhhdCB3ZSBoYXZlIFRocmVhZFNwZWNpZmljIGtleXMuICBXZSBuZWVkIGF0IGxlYXN0IG9u
ZQorICAgICAgICBrZXkgcGVyIEpTQyBWTSB3ZSBjcmVhdGUuICBJIGRpZG4ndCB3YW50IHRvIHdl
YWtlbiB0aGUgdGVzdCBmb3Igb3RoZXIKKyAgICAgICAgcGxhdGZvcm1zLgorCisgICAgICAgICog
cGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTYtMDQtMTkgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZWJhc2UgdGVzdCBh
ZnRlciByMTk5NzM4CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0
aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0
aW9ucwkocmV2aXNpb24gMTk5NzQ0KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RF
eHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTQzNyw2ICs0MzcsMTAgQEAgc3RvcmFnZS9z
dG9yYWdlcXVvdGEtcXVlcnktdXNhZ2UuaHRtbCBbCiBzdG9yYWdlL3N0b3JhZ2VxdW90YS1yZXF1
ZXN0LXF1b3RhLmh0bWwgWyBTa2lwIF0KIGZhc3Qvd29ya2Vycy93b3JrZXItc3RvcmFnZXF1b3Rh
LXF1ZXJ5LXVzYWdlLmh0bWwgWyBTa2lwIF0KIAorIyBUaGUgbnVtYmVyIG9mIHdvcmtlcnMgaW4g
dGhpcyB0ZXN0IGV4Y2VlZHMgdGhlIG51bWJlciBvZgorIyBUaHJlYWRTcGVjaWZpY1ZhbHVlcyB3
ZSBoYXZlIG9uIFdpbmRvd3MuCitmYXN0L3dvcmtlcnMvZGVkaWNhdGVkLXdvcmtlci1saWZlY3lj
bGUuaHRtbCBbIFNraXAgXSAKKwogIyBUZXN0cyB0aGF0IHJlcXVpcmUgRU5BQkxFKERPV05MT0FE
X0FUVFJJQlVURSkuCiBmYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3Itbm9kb3dubG9h
ZC5odG1sIFsgU2tpcCBdCiBmYXN0L2RvbS9IVE1MQW5jaG9yRWxlbWVudC9hbmNob3ItZG93bmxv
YWQuaHRtbCBbIFNraXAgXQo=
</data>
<flag name="review"
          id="301057"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>