<?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>41252</bug_id>
          
          <creation_ts>2010-06-26 10:14:10 -0700</creation_ts>
          <short_desc>Support for keys and in-memory storage for IndexedDB</short_desc>
          <delta_ts>2010-07-05 07:37:01 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41250</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>andreip</cc>
    
    <cc>bulach</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dumi</cc>
    
    <cc>japhet</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>243394</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-26 10:14:10 -0700</bug_when>
    <thetext>Support for keys and in-memory storage for IndexedDB</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243399</commentid>
    <comment_count>1</comment_count>
      <attachid>59840</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-26 10:35:37 -0700</bug_when>
    <thetext>Created attachment 59840
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243400</commentid>
    <comment_count>2</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-26 10:37:01 -0700</bug_when>
    <thetext>Just the IDBKey/IDBKeyTree parts of the other patch.  This takes pretty much all of the meat out of the other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243402</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-26 10:39:54 -0700</bug_when>
    <thetext>Attachment 59840 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/v8/custom/V8IDBKeyCustom.cpp:31:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/bindings/v8/custom/V8IDBKeyCustom.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/custom/V8IDBKeyCustom.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/storage/IDBKeyTree.h:70:  get_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:71:  set_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:72:  get_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:73:  set_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:74:  get_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:75:  set_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:79:  compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:80:  compare_key_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:81:  compare_node_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:106:  IDBKeyTree::AVLTreeAbstractor::compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:176:  converted_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 14 in 27 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>243404</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-26 11:13:10 -0700</bug_when>
    <thetext>Attachment 59840 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3289781</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243708</commentid>
    <comment_count>5</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-06-28 08:21:47 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Just the IDBKey/IDBKeyTree parts of the other patch.  This takes pretty much all of the meat out of the other.


apparently as a non-reviewer I can&apos;t comment directly on the patch, let me see how it goes from here.. let me know if you need more context:


 76 private:
 77     IDBKey();
 78     explicit IDBKey(int32_t);
 79     explicit IDBKey(const String&amp;);
 80 
 81     Type m_type;
 82     String m_string;
 83     int32_t m_number;
note:
js/SerializedScriptValue.h stores as a double.
on the embedder side, DictionaryValue explicitly differentiates as &quot;real&quot; and &quot;integer&quot;.

having as &quot;number&quot; seems a bit misleading.



 46     // Pointer is into the active tree, so don&apos;t use it after mutating the tree.
 47     typedef Vector&lt;RefPtr&lt;ValueType&gt;, 1&gt; ValueVector;
 48     ValueVector* get(PassRefPtr&lt;IDBKey&gt; key);
hmm.. does this need to be a *? does the caller need to modify it? it seems it&apos;d be safer to just copy the vector and return a passrefptr?
or is this needed to check for null, i.e., a key without value?



 106 int IDBKeyTree&lt;ValueType&gt;::AVLTreeAbstractor::compare_key_key(key va, key vb)
 107 {
 108     if (va-&gt;type() != va-&gt;type())
 109         return va-&gt;type() - vb-&gt;type();
is a left and b right? wouldn&apos;t it be vb - va?


 114     case IDBKey::NumberType:
 115         return va-&gt;number() - va-&gt;number();
either va - vb, or vb - va..


 124 template &lt;typename ValueType&gt;
 125 typename IDBKeyTree&lt;ValueType&gt;::ValueVector* IDBKeyTree&lt;ValueType&gt;::get(PassRefPtr&lt;IDBKey&gt; key)
this non-const get seems dangerous..


 135 void IDBKeyTree&lt;ValueType&gt;::insert(PassRefPtr&lt;IDBKey&gt; prpKey, PassRefPtr&lt;ValueType&gt; value)
 136 {
 137     RefPtr&lt;IDBKey&gt; key = prpKey;
 138     TreeNode* node = m_tree.search(key.get());
 139     if (!node) {
 140         node = new TreeNode();
does this zero-initialize node? if not, perhaps it should at least for &quot;less, greater and balanceFactor&quot; members.. either here or even better as an explicit ctor for TreeNode..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243990</commentid>
    <comment_count>6</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-28 17:22:58 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #2)
&gt; &gt; Just the IDBKey/IDBKeyTree parts of the other patch.  This takes pretty much all of the meat out of the other.
&gt; 
&gt; 
&gt; apparently as a non-reviewer I can&apos;t comment directly on the patch, let me see how it goes from here.. let me know if you need more context:
&gt; 
&gt; 
&gt;  76 private:
&gt;  77     IDBKey();
&gt;  78     explicit IDBKey(int32_t);
&gt;  79     explicit IDBKey(const String&amp;);
&gt;  80 
&gt;  81     Type m_type;
&gt;  82     String m_string;
&gt;  83     int32_t m_number;
&gt; note:
&gt; js/SerializedScriptValue.h stores as a double.
&gt; on the embedder side, DictionaryValue explicitly differentiates as &quot;real&quot; and &quot;integer&quot;.
&gt; 
&gt; having as &quot;number&quot; seems a bit misleading.

Well, it&apos;s a &quot;number&quot; from the point of view of IndexedDB which actually specs it to be a long long (so I guess I should have included a fixme that int32 is not good enough long term).  I guess I could change it to m_longLong or m_integer, but I&apos;m not sure we gain much.  But I don&apos;t really care, so tell me what you think it should be named.


&gt;  46     // Pointer is into the active tree, so don&apos;t use it after mutating the tree.
&gt;  47     typedef Vector&lt;RefPtr&lt;ValueType&gt;, 1&gt; ValueVector;
&gt;  48     ValueVector* get(PassRefPtr&lt;IDBKey&gt; key);
&gt; hmm.. does this need to be a *? does the caller need to modify it? it seems it&apos;d be safer to just copy the vector and return a passrefptr?
&gt; or is this needed to check for null, i.e., a key without value?

Sure, it&apos;d be safer, but it&apos;d be _much_ slower.  Not only would it copy, but we&apos;d cycle through a ref increment and decrement for each one.  And we&apos;d do that any time we&apos;re getting or setting a value.

Instead of getting bogged down on this, I just removed all the code for handling non-unique keys since it&apos;s not used yet and the code was only half written anyway.


&gt;  106 int IDBKeyTree&lt;ValueType&gt;::AVLTreeAbstractor::compare_key_key(key va, key vb)
&gt;  107 {
&gt;  108     if (va-&gt;type() != va-&gt;type())
&gt;  109         return va-&gt;type() - vb-&gt;type();
&gt; is a left and b right? wouldn&apos;t it be vb - va?

Hm.  I just copied what AVLTreeAbstractorForFreeList had.  Without digging through the code, I&apos;m not sure which is right.  But it also won&apos;t matter until we have cursors working.  When we do, we can write a layout test to verify it&apos;s doing the right thing in terms of sorting.  I&apos;ve changed it to vb - va for now.


&gt;  114     case IDBKey::NumberType:
&gt;  115         return va-&gt;number() - va-&gt;number();
&gt; either va - vb, or vb - va..

Ha...yeah...good call.


&gt;  124 template &lt;typename ValueType&gt;
&gt;  125 typename IDBKeyTree&lt;ValueType&gt;::ValueVector* IDBKeyTree&lt;ValueType&gt;::get(PassRefPtr&lt;IDBKey&gt; key)
&gt; this non-const get seems dangerous..

Changed.


&gt;  135 void IDBKeyTree&lt;ValueType&gt;::insert(PassRefPtr&lt;IDBKey&gt; prpKey, PassRefPtr&lt;ValueType&gt; value)
&gt;  136 {
&gt;  137     RefPtr&lt;IDBKey&gt; key = prpKey;
&gt;  138     TreeNode* node = m_tree.search(key.get());
&gt;  139     if (!node) {
&gt;  140         node = new TreeNode();
&gt; does this zero-initialize node? if not, perhaps it should at least for &quot;less, greater and balanceFactor&quot; members.. either here or even better as an explicit ctor for TreeNode..

Those are all completely owned by AVLTree and it zeros them out first thing when we add the node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244111</commentid>
    <comment_count>7</comment_count>
      <attachid>59988</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-28 22:56:03 -0700</bug_when>
    <thetext>Created attachment 59988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244113</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-28 22:58:59 -0700</bug_when>
    <thetext>Attachment 59988 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/v8/custom/V8IDBKeyCustom.cpp:31:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/bindings/v8/custom/V8IDBKeyCustom.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/custom/V8IDBKeyCustom.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/storage/IDBKeyTree.h:65:  get_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:66:  set_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:67:  get_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:68:  set_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:69:  get_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:70:  set_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:74:  compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:75:  compare_key_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:76:  compare_node_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:101:  IDBKeyTree::AVLTreeAbstractor::compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:186:  converted_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 14 in 27 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>244132</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-29 00:04:00 -0700</bug_when>
    <thetext>Attachment 59988 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3356038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244175</commentid>
    <comment_count>10</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-06-29 03:14:06 -0700</bug_when>
    <thetext>looks good, some comments:

- we should set on one license text to use, right now we have various flavors (see js/IDBBindingUtilities.cpp vs s/JSIDBKeyCustom.cpp)


&gt; storage/IDBKey.h
&gt; // In order of lest to more precident.

Did you really mean &quot;lest&quot;? And what does &quot;precident&quot; mean?

&gt; storage/IDBKeyTree.h
&gt; class IDBKeyTree 

Is &apos;add()&apos; missing? Add a FIXME?

&gt; get(PassRefPtr&lt;IDBKey&gt; prpKey)

Why is this taking a PassRefPtr? We don&apos;t transfer ownership and all we do with it is to transder it to a RefPtr and call get() on it. Can&apos;t we just take the raw pointer instead? Same question for the return type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244509</commentid>
    <comment_count>11</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-29 14:59:58 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; looks good, some comments:
&gt; 
&gt; - we should set on one license text to use, right now we have various flavors (see js/IDBBindingUtilities.cpp vs s/JSIDBKeyCustom.cpp)
&gt; 
&gt; 
&gt; &gt; storage/IDBKey.h
&gt; &gt; // In order of lest to more precident.
&gt; 
&gt; Did you really mean &quot;lest&quot;? And what does &quot;precident&quot; mean?

Will clean up.

&gt; &gt; storage/IDBKeyTree.h
&gt; &gt; class IDBKeyTree 
&gt; 
&gt; Is &apos;add()&apos; missing? Add a FIXME?

Will do.

&gt; &gt; get(PassRefPtr&lt;IDBKey&gt; prpKey)
&gt; 
&gt; Why is this taking a PassRefPtr? We don&apos;t transfer ownership and all we do with it is to transder it to a RefPtr and call get() on it. Can&apos;t we just take the raw pointer instead? Same question for the return type.

I&apos;ll try to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244519</commentid>
    <comment_count>12</comment_count>
      <attachid>59988</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-29 15:14:39 -0700</bug_when>
    <thetext>Comment on attachment 59988
Patch

Couple of very minor nits, but otherwise the bindings look good.


&gt; +
&gt; +#ifndef IDBBindingUtilities_h
&gt; +#define IDBBindingUtilities_h
&gt; +
&gt; +#include &quot;ScriptValue.h&quot;
&gt; +#include &lt;wtf/PassRefPtr.h&gt;

I don&apos;t see any reason why ScriptValue.h is needed here?

&gt; +
&gt; +#if ENABLE(INDEXED_DATABASE)
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +class IDBKey;
&gt; +
&gt; +PassRefPtr&lt;IDBKey&gt; createIDBKeyFromValue(JSC::ExecState* exec, JSC::JSValue value);

Omit &apos;exec&apos; and &apos;value&apos;.


&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &lt;v8.h&gt;
&gt; +#include &lt;wtf/PassRefPtr.h&gt;

Is PlatformString.h needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245142</commentid>
    <comment_count>13</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-01 00:00:13 -0700</bug_when>
    <thetext>&gt; (In reply to comment #10)
&gt; &gt; &gt; storage/IDBKeyTree.h
&gt; &gt; &gt; class IDBKeyTree 
&gt; &gt; 
&gt; &gt; Is &apos;add()&apos; missing? Add a FIXME?

Er...no.  Distinguishing between the spec&apos;s add/put is done at a higher level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245147</commentid>
    <comment_count>14</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-01 00:07:28 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 59988 [details])
&gt; Couple of very minor nits, but otherwise the bindings look good.
&gt; 
&gt; 
&gt; &gt; +
&gt; &gt; +#ifndef IDBBindingUtilities_h
&gt; &gt; +#define IDBBindingUtilities_h
&gt; &gt; +
&gt; &gt; +#include &quot;ScriptValue.h&quot;
&gt; &gt; +#include &lt;wtf/PassRefPtr.h&gt;
&gt; 
&gt; I don&apos;t see any reason why ScriptValue.h is needed here?

I need something for the JSC:: stuff below.  What&apos;s better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245149</commentid>
    <comment_count>15</comment_count>
      <attachid>60207</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-01 00:18:32 -0700</bug_when>
    <thetext>Created attachment 60207
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245150</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-01 00:19:51 -0700</bug_when>
    <thetext>Attachment 60207 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/v8/custom/V8IDBKeyCustom.cpp:31:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/bindings/v8/custom/V8IDBKeyCustom.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/custom/V8IDBKeyCustom.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/storage/IDBKeyTree.h:65:  get_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:66:  set_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:67:  get_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:68:  set_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:69:  get_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:70:  set_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:74:  compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:75:  compare_key_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:76:  compare_node_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/storage/IDBKeyTree.h:101:  IDBKeyTree::AVLTreeAbstractor::compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:186:  converted_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 14 in 27 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>245207</commentid>
    <comment_count>17</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-07-01 02:00:48 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; looks good, some comments:
&gt; &gt; 
&gt; &gt; - we should set on one license text to use, right now we have various flavors (see js/IDBBindingUtilities.cpp vs s/JSIDBKeyCustom.cpp)
&gt; &gt; 
&gt; &gt; 
&gt; &gt; &gt; storage/IDBKey.h
&gt; &gt; &gt; // In order of lest to more precident.
&gt; &gt; 
&gt; &gt; Did you really mean &quot;lest&quot;? And what does &quot;precident&quot; mean?
&gt; 

I still think that &quot;precident&quot; is not an English word :) Did you mean precedence?  And should the attribute be &quot;highest&quot; instead of &quot;most&quot;?

&gt; 
&gt; &gt; &gt; get(PassRefPtr&lt;IDBKey&gt; prpKey)
&gt; &gt; 
&gt; &gt; Why is this taking a PassRefPtr? We don&apos;t transfer ownership and all we do with it is to transder it to a RefPtr and call get() on it. Can&apos;t we just take the raw pointer instead? Same question for the return type.
&gt; 
&gt; I&apos;ll try to do that.

I looked at the latest patch but the above comment wasn&apos;t addressed. Any reason why not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245215</commentid>
    <comment_count>18</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-07-01 02:13:41 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; looks good, some comments:
&gt; &gt; &gt; 
&gt; &gt; &gt; - we should set on one license text to use, right now we have various flavors (see js/IDBBindingUtilities.cpp vs s/JSIDBKeyCustom.cpp)
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; storage/IDBKey.h
&gt; &gt; &gt; &gt; // In order of lest to more precident.
&gt; &gt; &gt; 
&gt; &gt; &gt; Did you really mean &quot;lest&quot;? And what does &quot;precident&quot; mean?
&gt; &gt; 
&gt; 
&gt; I still think that &quot;precident&quot; is not an English word :) Did you mean precedence?  And should the attribute be &quot;highest&quot; instead of &quot;most&quot;?
&gt; 
&gt; &gt; 
&gt; &gt; &gt; &gt; get(PassRefPtr&lt;IDBKey&gt; prpKey)
&gt; &gt; &gt; 
&gt; &gt; &gt; Why is this taking a PassRefPtr? We don&apos;t transfer ownership and all we do with it is to transder it to a RefPtr and call get() on it. Can&apos;t we just take the raw pointer instead? Same question for the return type.
&gt; &gt; 
&gt; &gt; I&apos;ll try to do that.
&gt; 
&gt; I looked at the latest patch but the above comment wasn&apos;t addressed. Any reason why not?

Ah, I noticed in the other patch that you said 

&gt; &quot;It&apos;s probably possible, but probably best for a second patch (this one is already so big).&quot;. 

Fair enough, but I still think you should at least change the Tree class interface to use raw pointers. That&apos;s a small change and can be done in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245289</commentid>
    <comment_count>19</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-01 06:00:38 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; looks good, some comments:
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; - we should set on one license text to use, right now we have various flavors (see js/IDBBindingUtilities.cpp vs s/JSIDBKeyCustom.cpp)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; storage/IDBKey.h
&gt; &gt; &gt; &gt; &gt; // In order of lest to more precident.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Did you really mean &quot;lest&quot;? And what does &quot;precident&quot; mean?
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; I still think that &quot;precident&quot; is not an English word :) Did you mean precedence?  And should the attribute be &quot;highest&quot; instead of &quot;most&quot;?

I should have spell checked, but this is what I meant: http://en.wikipedia.org/wiki/Precedent  I don&apos;t really care though.  I&apos;ll make it highest precedence.

&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; get(PassRefPtr&lt;IDBKey&gt; prpKey)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Why is this taking a PassRefPtr? We don&apos;t transfer ownership and all we do with it is to transder it to a RefPtr and call get() on it. Can&apos;t we just take the raw pointer instead? Same question for the return type.
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;ll try to do that.
&gt; &gt; 
&gt; &gt; I looked at the latest patch but the above comment wasn&apos;t addressed. Any reason why not?
&gt; 
&gt; Ah, I noticed in the other patch that you said 
&gt; 
&gt; &gt; &quot;It&apos;s probably possible, but probably best for a second patch (this one is already so big).&quot;. 
&gt; 
&gt; Fair enough, but I still think you should at least change the Tree class interface to use raw pointers. That&apos;s a small change and can be done in this patch.

k</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245330</commentid>
    <comment_count>20</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-01 07:19:11 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (In reply to comment #17)
&gt; &gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; looks good, some comments:
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; - we should set on one license text to use, right now we have various flavors (see js/IDBBindingUtilities.cpp vs s/JSIDBKeyCustom.cpp)
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; storage/IDBKey.h
&gt; &gt; &gt; &gt; &gt; &gt; // In order of lest to more precident.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Did you really mean &quot;lest&quot;? And what does &quot;precident&quot; mean?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; I still think that &quot;precident&quot; is not an English word :) Did you mean precedence?  And should the attribute be &quot;highest&quot; instead of &quot;most&quot;?
&gt; 
&gt; I should have spell checked, but this is what I meant: http://en.wikipedia.org/wiki/Precedent  I don&apos;t really care though.  I&apos;ll make it highest precedence.
&gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; get(PassRefPtr&lt;IDBKey&gt; prpKey)
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Why is this taking a PassRefPtr? We don&apos;t transfer ownership and all we do with it is to transder it to a RefPtr and call get() on it. Can&apos;t we just take the raw pointer instead? Same question for the return type.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I&apos;ll try to do that.
&gt; &gt; &gt; 
&gt; &gt; &gt; I looked at the latest patch but the above comment wasn&apos;t addressed. Any reason why not?
&gt; &gt; 
&gt; &gt; Ah, I noticed in the other patch that you said 
&gt; &gt; 
&gt; &gt; &gt; &quot;It&apos;s probably possible, but probably best for a second patch (this one is already so big).&quot;. 
&gt; &gt; 
&gt; &gt; Fair enough, but I still think you should at least change the Tree class interface to use raw pointers. That&apos;s a small change and can be done in this patch.
&gt; 
&gt; k

I&apos;ve spent some time trying to do the full PassRefPtr -&gt; * change but it has a large cascading effect and it looks like the change will be massive as I predicted.  I will change the IDBKeyTree.h to use *&apos;s and fix that comment upon landing though (or on the next cycle).

Can someone please review 41252 and 41250 today though?  And if it&apos;s close, can you give me a r+ so I can land?  I promise I&apos;ll do any follow up patches necessary, but most of what&apos;s coming up at this point are really just nits and every time I get an r- it means that I have to wait another day before the next round.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245677</commentid>
    <comment_count>21</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-01 17:33:48 -0700</bug_when>
    <thetext>Adding another potential reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245749</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-01 21:47:03 -0700</bug_when>
    <thetext>Attachment 60207 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3371130</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245825</commentid>
    <comment_count>23</comment_count>
      <attachid>60207</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-02 01:44:43 -0700</bug_when>
    <thetext>Comment on attachment 60207
Patch

WebCore/bindings/js/IDBBindingUtilities.cpp:29
 +  #include &quot;IDBKey.h&quot;
should probably be inside #if ENABLE(INDEXED_DATABASE)

WebCore/bindings/js/IDBBindingUtilities.h:30
 +  #include &lt;wtf/PassRefPtr.h&gt;
move inside #if ENABLE(INDEXED_DATABASE). also, i think it&apos;s better to use #include &lt;wtf/Forward.h&gt; for PassRefPtr, RefPtr, OwnPtr, etc. in header files.

WebCore/bindings/v8/IDBBindingUtilities.cpp:30
 +  #include &quot;V8Binding.h&quot;
move these 2 #includes inside #if ENABLE(INDEXED_DATABASE)

WebCore/bindings/v8/IDBBindingUtilities.h:30
 +  #include &lt;wtf/PassRefPtr.h&gt;
move inside ENABLE(INDEXED_DATABASE) + &lt;wtf/Forward.h&gt;

WebCore/storage/IDBKey.cpp:29
 +  #include &quot;SerializedScriptValue.h&quot;
move inside ENABLE(INDEXED_DB)

WebCore/storage/IDBKey.cpp:40
 +  IDBKey::IDBKey(int32_t number)
are types like int32_t allowed in webcore? maybe use &apos;unsigned long&apos; instead?

WebCore/storage/IDBKey.h:32
 +  #include &lt;wtf/RefPtr.h&gt;
move inside ENABLE(INDEXED_DB)
WebCore/storage/IDBKey.h:83
 +      int32_t m_number;
int32_t --&gt; unsigned long?

WebCore/storage/IDBKey.idl:32
 +          // This space is intentionally left blank.
maybe a short explanation why it&apos;s blank? or FIXME if you&apos;ll add something here later?

WebCore/storage/IDBKeyTree.h:31
 +  #include &lt;wtf/Vector.h&gt;
move inside ENABLE(INDEXED_DB)

WebCore/storage/IDBKeyTree.h:46
 +      PassRefPtr&lt;ValueType&gt; get(PassRefPtr&lt;IDBKey&gt; key);
do we really want PassRefPtr&lt;&gt; as an argument here? since it&apos;s a getter, it seems like the caller might want to hold on to &apos;key&apos;.

WebCore/storage/IDBKeyTree.h:63
 +          typedef IDBKey* key;
s/handle/Handle/, s/size/Size/, s/key/Key/ ?

WebCore/storage/IDBKeyTree.h:96
 +          delete *iter;
should m_tree rather be a tree of RefPtr&lt;&gt; or some other &quot;smart&quot; pointer type that would automatically destroy the object? then your destructor could look have one single statement: m_tree.purge().

WebCore/storage/IDBKeyTree.h:130
 +  
remove one empty line.

WebCore/storage/IDBKeyTree.h:150
 +          delete node;
can the manual deletion be avoided?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245831</commentid>
    <comment_count>24</comment_count>
      <attachid>60207</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-02 01:51:29 -0700</bug_when>
    <thetext>Comment on attachment 60207
Patch

r=me. it&apos;s new code that isn&apos;t used by anybody yet and there&apos;s probably no need to keep you blocked on minor comments. however, please address as many comments as possible before landing, and please upload a follow up patch if some things are left unaddressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245832</commentid>
    <comment_count>25</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-02 01:55:21 -0700</bug_when>
    <thetext>I believe everything except the comment update and changing some pass ref ptr&apos;s to * in IDBKeyTree.h are in.  And that I plan to fix on landing.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246640</commentid>
    <comment_count>26</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-05 07:36:36 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; int32_t --&gt; unsigned long?

The bindings give us a 32 bit int, so I think it&apos;s probably best to just leave it as is.

&gt; WebCore/storage/IDBKey.idl:32
&gt;  +          // This space is intentionally left blank.
&gt; maybe a short explanation why it&apos;s blank? or FIXME if you&apos;ll add something here later?

The implementation is complete.  And it doesn&apos;t have any methods.  I guess I could put a comment, but I don&apos;t see what good it&apos;d do because if someone wanted to modify this IDL they&apos;d really need to understand all of the code and it&apos;d be really easy for the comment to go stale.

&gt; WebCore/storage/IDBKeyTree.h:46
&gt;  +      PassRefPtr&lt;ValueType&gt; get(PassRefPtr&lt;IDBKey&gt; key);
&gt; do we really want PassRefPtr&lt;&gt; as an argument here? since it&apos;s a getter, it seems like the caller might want to hold on to &apos;key&apos;.

This is what Andrei wanted me to do as well.  :-)

&gt; WebCore/storage/IDBKeyTree.h:63
&gt;  +          typedef IDBKey* key;
&gt; s/handle/Handle/, s/size/Size/, s/key/Key/ ?

This is defined by the AVLTree class which, for some reason, doesn&apos;t follow WebKit&apos;s style.

&gt; WebCore/storage/IDBKeyTree.h:96
&gt;  +          delete *iter;
&gt; should m_tree rather be a tree of RefPtr&lt;&gt; or some other &quot;smart&quot; pointer type that would automatically destroy the object? then your destructor could look have one single statement: m_tree.purge().

Maybe we can try to do this in the future but it definitely wouldn&apos;t be easy and/or would cause a lot of RefPtr thrashing.  My feeling is that the allocation and deallocation logic is pretty clearly paired and the objects being allocated aren&apos;t passed outside of the AVLTree, so it should be OK.  (Normally I&apos;m against any sort of manual memory allocation.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246641</commentid>
    <comment_count>27</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-05 07:37:01 -0700</bug_when>
    <thetext>this was landed...if we need to do anything more, lets do it in 41250</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59840</attachid>
            <date>2010-06-26 10:35:37 -0700</date>
            <delta_ts>2010-06-28 22:55:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41252-20100626183534.patch</filename>
            <type>text/plain</type>
            <size>48544</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA5OTk1NGE1Zjc0MTMyZjM4OWFlMzFlMzAwMzExODRhYTA2NjgxYjEyLi40
NjM5N2I1YmExMTg1ODdiNDRiOGRjZTU3NzJmNmViNmJmYzBjOWEzIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTAtMDYtMjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Vw
cG9ydCBmb3Iga2V5cyBhbmQgaW4tbWVtb3J5IHN0b3JhZ2UgZm9yIEluZGV4ZWREQgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEyNTIKKworICAgICAg
ICBTZXQgdGhlIHJvbGUgdG8gUHJpdmF0ZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTAtMDYtMjUgIEplZHJ6ZWogTm93YWNraSAg
PGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24g
SGF1c21hbm4uCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxOGQ2YjgzODYwYzgxNzA1MGYxMGU4NDM3ZDVi
ZDA1MmI0NzczNmQ2Li40NWQ5NzY0MTdjMDk1NjEwN2Y3YWIwYTc2YzU2ZjdhMjRlNzgzNzU1IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTM0OSw3ICszNDksNyBAQAogCQlCQzE4QzNFNzBFMTZGNUNEMDBC
MzQ0NjAgLyogQXJyYXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY2OTJBODRFMDI1NTU5N0QwMUZGNjBGNyAvKiBBcnJheVByb3RvdHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJD
MThDM0U5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBU0NJSUNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzhDNEY2OTBDQTA2QkM3MDBEOTMxMEEgLyog
QVNDSUlDVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUJDMThDM0VBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBBc3NlcnRpb25zLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUUyMTdCNzA4RTdFRUNDMDAy
M0U1RjYgLyogQXNzZXJ0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUJDMThDM0VCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBBVkxUcmVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUE1OTYzNzBERTNF
MUMzMDBDMTdFMzcgLyogQVZMVHJlZS5oICovOyB9OworCQlCQzE4QzNFQjBFMTZGNUNEMDBCMzQ0
NjAgLyogQVZMVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFBNTk2MzcwREUzRTFDMzAwQzE3RTM3IC8qIEFWTFRyZWUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzNFQzBFMTZGNUNEMDBC
MzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8qIEJvb2xlYW5PYmplY3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4
QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxs
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDMThDM0YwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb2xsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBODYyQUEwRDdFQkI3RDAwMUVDNkFBIC8q
IENvbGxhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggN2M2MzYxZTE1MmQyMTI4YWQwMWFkMGQ1MWZiOTEzZDZmYzc4NmU2Ny4uY2UxZTg3MGE3ZmQz
Mzc3NzllYzJhMWY0NmIxMDliOGU2Yjk3NTZlMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NiBAQAorMjAxMC0wNi0yNiAg
SmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdXBwb3J0IGZvciBrZXlzIGFuZCBpbi1tZW1v
cnkgc3RvcmFnZSBmb3IgSW5kZXhlZERCCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MTI1MgorCisgICAgICAgIEl0J2xsIHRha2Ugc29tZSB0aW1lIHRv
IGdldCBkYXRhIHBlcnNpc3RlbmNlIHdvcmtpbmcgZm9yIEluZGV4ZWREQiwKKyAgICAgICAgc28g
dW50aWwgdGhlbiwgd2UnbGwganVzdCBzdG9yZSBldmVyeXRoaW5nIGluIGFuIGluIG1lbW9yeSB0
cmVlLgorICAgICAgICBUaGUgdHJlZSB1c2VzIFdURjo6QVZMVHJlZSBhbmQgaXMgYSB0ZW1wbGF0
ZSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5CisgICAgICAgIG9iamVjdCBzdG9yZXMgKElEQktl
eSAtPiBTZXJpYWxpemVkU2NyaXB0VmFsdWUpIGFuZCBpbmRleGVzIChJREJLZXkgLT4KKyAgICAg
ICAgSURCS2V5KS4gIFRoaXMgY2xhc3Mgd2lsbCBiZSB1c2VkIGluIGEgc3Vic2VxdWVudCBwYXRj
aC4KKworICAgICAgICBBbHNvIGFkZCBhbiBJREJLZXkgdHlwZSB0aGF0IHJlcHJlc2VudHMgb25l
IG9mIHRoZXNlIGtleXMuICBXZSB1c2UgYQorICAgICAgICBjdXN0b20gdG9KUyBmdW5jdGlvbiBp
biBhIHdheSBzaW1pbGFyIHRvIElEQkFueSB0byBjb252ZXJ0IGZyb20gV2ViQ29yZQorICAgICAg
ICB0byBhIEpTIHZhbHVlLiAgRm9yIGNvbnZlcnRpbmcgdGhlIG90aGVyIHdheSwgd2UgaGF2ZSB0
byB0ZWFjaCB0aGUgY29kZQorICAgICAgICBnZW5lcmF0b3JzIHdoYXQgdG8gZG8gKHVuZm9ydHVu
YXRlbHkpLiAgVGhpcyBpcyBkb25lIGluIGEgd2F5IHNpbWlsYXIKKyAgICAgICAgdG8gc2VyaWFs
aXplZCBzY3JpcHQgdmFsdWUuICBVbmxpa2Ugc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUsIElEQktl
eSBpcworICAgICAgICBpbiBXZWJDb3JlIGFuZCBvbmx5IGEgaGVscGVyIGZ1bmN0aW9uIGlzIEpT
IGVuZ2luZSBzcGVjaWZpYy4KKworICAgICAgICBUaGlzIGNvZGUgaXMgbm90IGFjY2Vzc2FibGUg
ZnJvbSBsYXlvdXQgdGVzdHMuICAoV2lsbCBmaXggaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMjUwKSAgVGhlIGJpbmRpbmdzIHRlc3RzCisgICAg
ICAgIHNob3cgdXMgdGhhdCB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdzIGFyZSB3aGF0IHdlIGV4cGVj
dC4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9BVkxUcmVlLmg6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0lEQktleUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RP
Ymo6OmlkYktleSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE9iai5jcHA6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9rZXkpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmou
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbklkYktleSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmou
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tOgor
ICAgICAgICAoLVtET01UZXN0T2JqIGlkYktleTpdKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OmlkYktl
eUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogYmluZGluZ3Mvdjgv
SURCQmluZGluZ1V0aWxpdGllcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
SURCS2V5RnJvbVZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0
aWVzLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQktleUN1c3Rv
bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogc3RvcmFn
ZS9JREJDYWxsYmFja3MuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQktleS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpJREJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURC
S2V5Ojp+SURCS2V5KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQktleS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQktleTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXk6OnN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6Om51bWJlcik6CisgICAg
ICAgICogc3RvcmFnZS9JREJLZXkuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQktl
eVRyZWUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJLZXlUcmVlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5VHJlZTo6QVZMVHJlZUFic3RyYWN0b3I6OmdldF9sZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVRyZWU6OkFWTFRyZWVBYnN0cmFjdG9yOjpzZXRf
bGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6
Z2V0X2dyZWF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5VHJlZTo6QVZMVHJlZUFic3Ry
YWN0b3I6OnNldF9ncmVhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVRyZWU6OkFWTFRy
ZWVBYnN0cmFjdG9yOjpnZXRfYmFsYW5jZV9mYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
S2V5VHJlZTo6QVZMVHJlZUFic3RyYWN0b3I6OnNldF9iYWxhbmNlX2ZhY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6bnVsbCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29tcGFyZV9rZXlfbm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29t
cGFyZV9ub2RlX25vZGUpOgorICAgICAgICAoV2ViQ29yZTo6OjpJREJLZXlUcmVlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ojo6fklEQktleVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6OjpBVkxUcmVl
QWJzdHJhY3Rvcjo6Y29tcGFyZV9rZXlfa2V5KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Z2V0KToK
KyAgICAgICAgKFdlYkNvcmU6Ojo6aW5zZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6cmVtb3Zl
KToKKwogMjAxMC0wNi0yNSAgRXZhbiBTdGFkZSAgPGVzdGFkZUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvQVZMVHJlZS5oIGIvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvQVZMVHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1MWI3ZjdjZTU0NThjMDFjMWEyNzM3NWU5NTMxZmVi
MTdhODcyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9BVkxUcmVlLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0FWTFRyZWVf
aAorI2RlZmluZSBXZWJDb3JlX0ZXRF9BVkxUcmVlX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9BVkxUcmVlLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhYTIzNzAxNjJkYjZiNmY1ODgxNzQyYzI3MjgxZjBlMTEw
MTI5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiSURCS2V5Lmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUoKTsKKyAgICBpZiAodmFsdWUuaXNJbnQzMigp
KQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodmFsdWUudG9JbnQzMihleGVjKSk7Cisg
ICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZSh1
c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGRhdGVzLgorICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jYmQxYTNhN2RiZjI3NjI2NTA5YTE1NzQzZTAyMDBmNDVmNDNmNWFiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAg
LTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCQmluZGluZ1V0aWxpdGllc19oCisjZGVm
aW5lIElEQkJpbmRpbmdVdGlsaXRpZXNfaAorCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5OworCitQYXNzUmVmUHRyPElE
QktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpT
VmFsdWUgdmFsdWUpOworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2VuZGlmIC8vIElEQkJpbmRpbmdVdGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
S2V5Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OGM5MzE1OGExNzFhYmY0ZTNmZTIyMzAyMWQ2ZGM1
NDYxYjc0Mjg1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktl
eUN1c3RvbS5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNp
bmNsdWRlICJKU0lEQktleS5oIgorCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgor
I2luY2x1ZGUgIklEQktleS5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0pTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgSURCS2V5KiBrZXkpCit7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiBqc051
bGwoKTsKKworICAgIHN3aXRjaCAoa2V5LT50eXBlKCkpIHsKKyAgICBjYXNlIElEQktleTo6TnVs
bFR5cGU6CisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBjYXNlIElEQktleTo6TnVtYmVy
VHlwZToKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGtleS0+bnVtYmVyKCkpOworICAg
IGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgorICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
a2V5LT5zdHJpbmcoKSk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlcy4KKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRl
eCA0ZTJlOTExOTQ0N2YzYjA0ZTA5MzUwOTdkOTYxZWZjNmJlMDllZGI0Li45ZjE0YjI2ZGFjOWM1
MjFjNGUzZTMzYWMzNjZlMmEzMzI1MTM4ZDUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTIyNTksNiArMjI1OSw3IEBAIG15ICVuYXRpdmVUeXBl
ID0gKAogICAgICJET01PYmplY3QiID0+ICJTY3JpcHRWYWx1ZSIsCiAgICAgIk5vZGVGaWx0ZXIi
ID0+ICJSZWZQdHI8Tm9kZUZpbHRlcj4iLAogICAgICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiID0+
ICJSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiIsCisgICAgIklEQktleSIgPT4gIlJlZlB0
cjxJREJLZXk+IiwKICAgICAiU1ZHQW5nbGUiID0+ICJTVkdBbmdsZSIsCiAgICAgIlNWR0xlbmd0
aCIgPT4gIlNWR0xlbmd0aCIsCiAgICAgIlNWR01hdHJpeCIgPT4gIkFmZmluZVRyYW5zZm9ybSIs
CkBAIC0yMzI2LDYgKzIzMjcsMTIgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgICAgICByZXR1
cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0K
IAorICAgIGlmICgkdHlwZSBlcSAiSURCS2V5IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJJ
REJCaW5kaW5nVXRpbGl0aWVzLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IklEQktl
eS5oIn0gPSAxOworICAgICAgICByZXR1cm4gImNyZWF0ZUlEQktleUZyb21WYWx1ZShleGVjLCAk
dmFsdWUpIjsKKyAgICB9CisKICAgICAkaW1wbEluY2x1ZGVzeyJGbG9hdFBvaW50LmgifSA9IDEg
aWYgJHR5cGUgZXEgIlNWR1BvaW50IjsKICAgICAkaW1wbEluY2x1ZGVzeyJGbG9hdFJlY3QuaCJ9
ID0gMSBpZiAkdHlwZSBlcSAiU1ZHUmVjdCI7CiAgICAgJGltcGxJbmNsdWRlc3siSFRNTE9wdGlv
bkVsZW1lbnQuaCJ9ID0gMSBpZiAkdHlwZSBlcSAiSFRNTE9wdGlvbkVsZW1lbnQiOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggZTI0OWNhYWEzZGFh
ZDM5ZmI1N2ZkZDA2MTc3ZDM5NWY3MmI1MTdhMS4uMWFlMGY4ZmMyZDcxNmVmYzJjMGM3YTM5YzJh
YmY5ZGVmMTgzNjExNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCkBAIC0yNzQ4LDYgKzI3NDgsOCBAQCBzdWIgR2V0TmF0aXZlVHlwZQogCiAgICAgcmV0
dXJuICJSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiIgaWYgJHR5cGUgZXEgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSI7CiAKKyAgICByZXR1cm4gIlJlZlB0cjxJREJLZXk+IiBpZiAkdHlwZSBl
cSAiSURCS2V5IjsKKwogICAgICMgbmVjZXNzYXJ5IGFzIHJlc29sdmVycyBjb3VsZCBiZSBjb25z
dHJ1Y3RlZCBvbiBmbHkuCiAgICAgcmV0dXJuICJSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiIgaWYg
JHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciI7CiAKQEAgLTI4MjksNiArMjgzMSwxMiBAQCBzdWIg
SlNWYWx1ZVRvTmF0aXZlCiAKICAgICBkaWUgIlVuZXhwZWN0ZWQgU2VyaWFsaXplZFNjcmlwdFZh
bHVlIiBpZiAkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKIAorICAgIGlmICgkdHlw
ZSBlcSAiSURCS2V5IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJJREJCaW5kaW5nVXRpbGl0
aWVzLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IklEQktleS5oIn0gPSAxOworICAg
ICAgICByZXR1cm4gImNyZWF0ZUlEQktleUZyb21WYWx1ZSgkdmFsdWUpIjsKKyAgICB9CisKICAg
ICBpZiAoJHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siU2Ny
aXB0VmFsdWUuaCJ9ID0gMTsKICAgICAgICAgcmV0dXJuICJTY3JpcHRWYWx1ZSgkdmFsdWUpIjsK
QEAgLTI5ODUsNyArMjk5Myw4IEBAIG15ICVub25fd3JhcHBlcl90eXBlcyA9ICgKICAgICAnRE9N
T2JqZWN0JyA9PiAxLAogICAgICdFdmVudFRhcmdldCcgPT4gMSwKICAgICAnTm9kZUZpbHRlcicg
PT4gMSwKLSAgICAnRXZlbnRMaXN0ZW5lcicgPT4gMQorICAgICdFdmVudExpc3RlbmVyJyA9PiAx
LAorICAgICdJREJLZXknID0+IDEKICk7CiAKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCmluZGV4IDY1YmM5ZjM2ZWUzNmUyNDI1
ZTQ2NGU3MGEwZDYwZGJmNTM0OWQzYTUuLmVlOGFmY2ZjNjBmYTA1MDk5MzIzYmE1NjA5NmI5NGU3
Y2VkMWU0ZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5jcHAKQEAgLTIzLDkgKzIzLDExIEBACiAKICNpbmNsdWRlICJBdG9taWNT
dHJpbmcuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSAiVGVzdE9iai5oIgorI2luY2x1ZGUgIldlYkRPTUlEQktleS5oIgogI2luY2x1ZGUgIldl
YkRPTVN0cmluZy5oIgogI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKICNpbmNsdWRl
ICJXZWJOYXRpdmVFdmVudExpc3RlbmVyLmgiCkBAIC01NDksNiArNTUxLDE0IEBAIHZvaWQgV2Vi
RE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXpl
ZEFyZykKICAgICBpbXBsKCktPnNlcmlhbGl6ZWRWYWx1ZShXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsKIH0KIAor
dm9pZCBXZWJET01UZXN0T2JqOjppZGJLZXkoY29uc3QgV2ViRE9NSURCS2V5JiBrZXkpCit7Cisg
ICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+aWRiS2V5KHRv
V2ViQ29yZShrZXkpKTsKK30KKwogdm9pZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0
aW9uKCkKIHsKICAgICBpZiAoIWltcGwoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCmluZGV4IDMzYmM3ZmJhNTliMjNiZjBiMzkwNzMw
NjIwMzhiNTU1ZTgyMzBmNTcuLmNkZDQ3ZWQwMjMyNjI1NDllZGVmZDA0MTc2MzViZDhhNWM5Y2Ni
YjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RPYmouaApAQCAtMzEsNiArMzEsNyBAQCBjbGFzcyBUZXN0T2JqOwogfTsKIAogY2xhc3MgV2Vi
RE9NRXZlbnRMaXN0ZW5lcjsKK2NsYXNzIFdlYkRPTUlEQktleTsKIGNsYXNzIFdlYkRPTVN0cmlu
ZzsKIGNsYXNzIFdlYkRPTVRlc3RPYmo7CiAKQEAgLTEwMSw2ICsxMDIsNyBAQCBwdWJsaWM6CiAg
ICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKGNvbnN0IFdlYkRPTVN0
cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOwogICAgIFdlYkRPTVRl
c3RPYmogbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhjb25zdCBXZWJET01TdHJp
bmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKICAgICB2b2lkIHNlcmlh
bGl6ZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpOworICAgIHZvaWQg
aWRiS2V5KGNvbnN0IFdlYkRPTUlEQktleSYga2V5KTsKICAgICB2b2lkIG1ldGhvZFdpdGhFeGNl
cHRpb24oKTsKICAgICB2b2lkIGN1c3RvbU1ldGhvZCgpOwogICAgIHZvaWQgY3VzdG9tTWV0aG9k
V2l0aEFyZ3MoaW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdl
YkRPTVRlc3RPYmomIG9iakFyZyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAppbmRleCBlZmIzNjJiYmEz
ZWVkZDNmM2ExYThiNGU3YjRlNWU2NzAzMjcwMDY5Li4xODRiMjg2YWU5MmUwN2VhNDU4YzExMTY2
ZmRjZGU5NTg3MjA2ZDk0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKQEAgLTI4LDYgKzI4LDggQEAK
ICNpbmNsdWRlICJUZXN0T2JqLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIndlYmtpdC9X
ZWJLaXRET01JREJLZXkuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NSURCS2V5UHJpdmF0
ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0T2JqLmgiCkBAIC0xNjYsNiArMTY4LDE3
IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkCiB9CiAKIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9v
YmpfaWRiX2tleShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01JREJLZXkqICBrZXkp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGtleSk7Cisg
ICAgV2ViQ29yZTo6SURCS2V5ICogY29udmVydGVkX2tleSA9IFdlYktpdDo6Y29yZShrZXkpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX2tleSk7CisgICAgaXRlbS0+aWRiS2V5KGNv
bnZlcnRlZF9rZXkpOworfQorCit2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKIHsKICAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAppbmRleCA4ZGNkOGMzMWUz
MzYzYmU3MjQ4YTM3NWI1OTcyYTUxNjk3MDBjMzk3Li42MWMzZDk1YmQ3YjZmYTk5MDYzM2E5NWQ1
ZjRmMzFiNmQ2ODBjMGY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaApAQCAtNzQsNiArNzQsOSBAQCBXRUJL
SVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxp
emVkX2FyZyk7CiAKIFdFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9pZGJfa2V5
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTUlEQktleSogIGtleSk7CisKK1dFQktJ
VF9BUEkgdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb24oV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpOwogCiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDM2MDc4MmQ4NjhmNWFk
YjAxMWVjNzMzODA2ZjQyMGExMDNhYTI1ZjUuLjMxYTNmNzBhY2UyMDJiZDhlMzdhZjcwZWEwY2Fj
MzMwM2M5ZTliMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcApAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgogCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgor
I2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIkpTVGVzdE9iai5oIgogI2luY2x1ZGUgIkpTbG9nLmgiCkBAIC0xNDQsNyArMTQ2LDcgQEAg
Ym9vbCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnQKICNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRv
cikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90
eXBlVGFibGVWYWx1ZXNbMzBdID0KK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RP
YmpQcm90b3R5cGVUYWJsZVZhbHVlc1szMV0gPQogewogICAgIHsgInZvaWRNZXRob2QiLCBEb250
RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4o
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKSwgKGludHB0cl90KTAgVEhVTktf
R0VORVJBVE9SKDApIH0sCiAgICAgeyAidm9pZE1ldGhvZFdpdGhBcmdzIiwgRG9udERlbGV0ZSB8
IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhVTktf
R0VORVJBVE9SKDApIH0sCkBAIC0xNTUsNiArMTU3LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMwXSA9CiAgICAgeyAibWV0aG9k
VGhhdFJlcXVpcmVzQWxsQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0
YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFRoYXRSZXF1aXJlc0FsbEFyZ3MpLCAoaW50cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkgfSwK
ICAgICB7ICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiwgRG9udERlbGV0ZSB8
IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyksIChp
bnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgInNlcmlhbGl6ZWRWYWx1ZSIs
IERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZSksIChpbnRwdHJf
dCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgImlkYktleSIsIERvbnREZWxldGUgfCBG
dW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbklkYktleSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9
LAogICAgIHsgIm1ldGhvZFdpdGhFeGNlcHRpb24iLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDAp
IH0sCiAgICAgeyAiY3VzdG9tTWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q3VzdG9tTWV0aG9kKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAi
Y3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0
b21NZXRob2RXaXRoQXJncyksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LApAQCAt
MTc5LDcgKzE4Miw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90
b3R5cGVUYWJsZVZhbHVlc1szMF0gPQogfTsKIAogI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgotc3Rh
dGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxl
ID0geyA2OSwgNjMsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CitzdGF0aWMg
SlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7
IDEzMCwgMTI3LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OwogY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9ialByb3RvdHlwZSIs
IDAsICZKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSwgMCB9OwogCiBKU09iamVjdCogSlNUZXN0T2Jq
UHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKQEAgLTc5Nyw2ICs4MDAsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVjU3RhdGUKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSWRiS2V5KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAg
ICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCkpOworCisgICAgaW1wLT5pZGJLZXkoa2V5KTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
CmluZGV4IDNiMjFjODU2MDFjMGEzN2I3Y2RmZmYxZWU1ZmEzNjE0MTI4YTQ2NzAuLjRkZWEzZDIz
ZTlkZWIxYjRjYTQ4ZmZmNzdiYmMxNmVjOTgyMTZiZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC05NSw2ICs5NSw3IEBAIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhv
ZFdpdGhBcmdzKEpTCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKEpTQzo6RXhlY1N0YXRl
Kik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpTQzo6RXhlY1N0YXRl
Kik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleShKU0M6
OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJn
cyhKU0M6OkV4ZWNTdGF0ZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RPYmouaAppbmRleCBkODg2MmRhMTVlYWM0ZTgxYTJlYjExYWJlYTNhMDVkMzNm
YjJjMWJiLi5kMzhkZWNlM2VkZjQ4MmY1NTIyNjJiN2UzZDI2MzBiZjRhOWM0ODZkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaWYgV0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZF
UlNJT05fTEFURVNUCiAKK0BjbGFzcyBET01JREJLZXk7CiBAY2xhc3MgRE9NVGVzdE9iajsKIEBj
bGFzcyBET01sb2c7CiBAY2xhc3MgTlNTdHJpbmc7CkBAIC05OSw2ICsxMDAsNyBAQAogLSAoRE9N
VGVzdE9iaiAqKW1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3M6KE5TU3RyaW5nICopc3RyQXJnIG9i
akFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKIC0gKERPTVRlc3RPYmogKiltZXRob2RUaGF0UmVx
dWlyZXNBbGxBcmdzQW5kVGhyb3dzOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RP
YmogKilvYmpBcmc7CiAtICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZTooTlNTdHJpbmcgKilzZXJpYWxp
emVkQXJnOworLSAodm9pZClpZGJLZXk6KERPTUlEQktleSAqKWtleTsKIC0gKHZvaWQpbWV0aG9k
V2l0aEV4Y2VwdGlvbjsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kOwogLSAodm9pZCljdXN0b21NZXRo
b2RXaXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzoo
RE9NVGVzdE9iaiAqKW9iakFyZzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbQppbmRleCA5YmJiZjE0NGI3ZWU2OWZiOTZhNDBmNDE0OWQ4MDU5
NGNlZjdkZmI4Li5kNzFjYjA1MjIxYTg1MzAwOTdjMDg4NGJjOTM1MjM2YmQ4Njk0NDYxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0K
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCkBA
IC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJET01DU1NSdWxlSW50ZXJuYWwuaCIKICNpbXBvcnQg
IkRPTUNTU1ZhbHVlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKKyNp
bXBvcnQgIkRPTUlEQktleUludGVybmFsLmgiCiAjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIK
ICNpbXBvcnQgIkRPTVN0eWxlU2hlZXRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NVGVzdE9iaklu
dGVybmFsLmgiCkBAIC00MCw2ICs0MSw3IEBACiAjaW1wb3J0ICJFdmVudExpc3RlbmVyLmgiCiAj
aW1wb3J0ICJFeGNlcHRpb25IYW5kbGVycy5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCisjaW1w
b3J0ICJJREJLZXkuaCIKICNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2ltcG9y
dCAiS1VSTC5oIgogI2ltcG9ydCAiT2JqQ0V2ZW50TGlzdGVuZXIuaCIKQEAgLTQ1MSw2ICs0NTMs
MTIgQEAKICAgICBJTVBMLT5zZXJpYWxpemVkVmFsdWUoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSk7CiB9CiAKKy0g
KHZvaWQpaWRiS2V5OihET01JREJLZXkgKilrZXkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+aWRiS2V5KGNvcmUoa2V5KSk7Cit9CisKIC0g
KHZvaWQpbWV0aG9kV2l0aEV4Y2VwdGlvbgogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwK
aW5kZXggZWY0ZGIxMDZmMDc0NjZmODQyNTk0MTRkODlkOWQwNDlmNjk4NDIyMi4uMzQ2NzExNjdh
NTQ4ZDdmMzk2YjU2MWYzZDQwOTFmYzk5ZDkzMzM3YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTYzLDYgKzYzLDcgQEAgbW9kdWxlIHRlc3QgewogICAg
ICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgdm9pZCBzZXJpYWxpemVk
VmFsdWUoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRBcmcpOworICAgICAgICB2
b2lkIGlkYktleShpbiBJREJLZXkga2V5KTsKIAogICAgICAgICAvLyBFeGNlcHRpb25zCiAgICAg
ICAgIHZvaWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigpIHJhaXNlcyhET01FeGNlcHRpb24pOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggNGE1
NGFlMzQwOTUzNzQwNDliY2ExZTIxOTU2YWM4ZDM4ZGViMzE2Zi4uMWFkOGE0MTZiODNjZTlhOTdj
OTg3NGZlNDIxMDNhZTRjZjM1NzRkNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC0yMyw2ICsyMyw4IEBACiAKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSURCQmluZGlu
Z1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTU3Myw2ICs1NzUsMTUgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KIAorc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpZGJLZXlDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaWRiS2V5Iik7CisgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBS
ZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoYXJnc1swXSk7CisgICAg
aW1wLT5pZGJLZXkoa2V5KTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9
CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVz
dE9iai5tZXRob2RXaXRoRXhjZXB0aW9uIik7CkBAIC05NDcsNiArOTU4LDcgQEAgc3RhdGljIGNv
bnN0IEJhdGNoZWRDYWxsYmFjayBUZXN0T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJpbnRNZXRo
b2QiLCBUZXN0T2JqSW50ZXJuYWw6OmludE1ldGhvZENhbGxiYWNrfSwKICAgICB7Im9iak1ldGhv
ZCIsIFRlc3RPYmpJbnRlcm5hbDo6b2JqTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsic2VyaWFsaXpl
ZFZhbHVlIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVDYWxsYmFja30sCisgICAg
eyJpZGJLZXkiLCBUZXN0T2JqSW50ZXJuYWw6OmlkYktleUNhbGxiYWNrfSwKICAgICB7Im1ldGhv
ZFdpdGhFeGNlcHRpb24iLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhFeGNlcHRpb25DYWxs
YmFja30sCiAgICAgeyJjdXN0b21NZXRob2QiLCBWOFRlc3RPYmo6OmN1c3RvbU1ldGhvZENhbGxi
YWNrfSwKICAgICB7ImN1c3RvbU1ldGhvZFdpdGhBcmdzIiwgVjhUZXN0T2JqOjpjdXN0b21NZXRo
b2RXaXRoQXJnc0NhbGxiYWNrfSwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvSURC
QmluZGluZ1V0aWxpdGllcy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmOTc3ZTBlZDNhOTIzN2U3NWRiNGFhZWMzMmUyMTcxMTkx
N2QzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiSURCS2V5Lmgi
CisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5
RnJvbVZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUt
PklzTnVsbCgpKQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUoKTsKKyAgICBpZiAodmFs
dWUtPklzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlKHZhbHVlLT5JbnQz
MlZhbHVlKCkpOworICAgIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIElE
QktleTo6Y3JlYXRlKHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodmFsdWUpKTsKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGRhdGVzLgorICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5k
aW5nVXRpbGl0aWVzLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iN2M4NDcwYzY3OGMyYjZkMGQyMzUzYTdhMDA1NjI3ZmFkZWU3ODQwCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVz
LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCQmluZGluZ1V0aWxpdGllc19o
CisjZGVmaW5lIElEQkJpbmRpbmdVdGlsaXRpZXNfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBJREJLZXk7CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjg6
OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKKyNlbmRpZiAvLyBJREJCaW5kaW5nVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCS2V5Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SURCS2V5Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWZhNTVmNzNj
YmFjODk5ZjIyOWIyMWM5YTU1MTNlYjMxYmEzZjRkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJLZXlDdXN0b20uY3BwCkBAIC0wLDAgKzEsNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisjaW5jbHVkZSAiVjhJREJBbnkuaCIKKworI2luY2x1
ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChJREJLZXkqIGtleSkKK3sKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJu
IHY4OjpOdWxsKCk7CisKKyAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CisgICAgY2FzZSBJREJL
ZXk6Ok51bGxUeXBlOgorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICBjYXNlIElEQktl
eTo6TnVtYmVyVHlwZToKKyAgICAgICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoa2V5LT5udW1i
ZXIoKSk7CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6CisgICAgICAgIHJldHVybiB2OFN0
cmluZyhrZXktPnN0cmluZygpKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGVzLgorICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5o
IGIvV2ViQ29yZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5oCmluZGV4IGM5MGFjYzU4ZjlmM2M3MmNk
MWZhN2ZmNDk0M2IxNTZiNWNiNGJlYjguLjM3ZmRjNDZlMDk5Y2VjNjUzMDk0ZmExMjY5ODgzZTNh
Njk4ZjA5OWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFja3MuaAorKysg
Yi9XZWJDb3JlL3N0b3JhZ2UvSURCQ2FsbGJhY2tzLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNpbmNs
dWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQk9iamVj
dFN0b3JlLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQ4LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBvblN1Y2Nlc3MoKSA9IDA7IC8vIEZvciAibnVsbCIuCiAgICAgdmlydHVhbCB2b2lkIG9u
U3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlPikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJJbmRleD4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nl
c3MoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb25T
dWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPikgPSAwOwogfTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktl
eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2UyYjkyM2FiOGMyYmI3OTY3YWE3ZTNlMDk4ODM5M2RkOTRhYTQ3
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5Lmgi
CisKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQktleTo6SURCS2V5KCkK
KyAgICA6IG1fdHlwZShOdWxsVHlwZSkKK3sKK30KKworSURCS2V5OjpJREJLZXkoaW50MzJfdCBu
dW1iZXIpCisgICAgOiBtX3R5cGUoTnVtYmVyVHlwZSkKKyAgICAsIG1fbnVtYmVyKG51bWJlcikK
K3sKK30KKworSURCS2V5OjpJREJLZXkoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgOiBtX3R5
cGUoU3RyaW5nVHlwZSkKKyAgICAsIG1fc3RyaW5nKHN0cmluZykKK3sKK30KKworSURCS2V5Ojp+
SURCS2V5KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42YzJlMDBlN2JlOGFmMWU5N2Q5M2M3NjI2N2JlNzM1ZGY2ZDlmZDdiCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oCkBAIC0wLDAgKzEsOTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIElEQktleV9oCisjZGVmaW5lIElEQktleV9oCisKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTog
QWRkIGRhdGVzLgorY2xhc3MgSURCS2V5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCS2V5PiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7CisgICAgfQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQktleT4gY3JlYXRlKGludDMyX3QgbnVtYmVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJLZXkobnVtYmVyKSk7CisgICAgfQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQktleT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJLZXkoc3RyaW5nKSk7CisgICAgfQorICAgIH5J
REJLZXkoKTsKKworICAgIC8vIEluIG9yZGVyIG9mIGxlc3QgdG8gbW9yZSBwcmVjaWRlbnQuCisg
ICAgZW51bSBUeXBlIHsKKyAgICAgICAgTnVsbFR5cGUgPSAwLAorICAgICAgICBTdHJpbmdUeXBl
LAorICAgICAgICBOdW1iZXJUeXBlCisgICAgfTsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQorCisgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBTdHJpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJu
IG1fc3RyaW5nOworICAgIH0KKworICAgIGludDMyX3QgbnVtYmVyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gTnVtYmVyVHlwZSk7CisgICAgICAgIHJldHVybiBtX251
bWJlcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSURCS2V5KCk7CisgICAgZXhwbGljaXQgSURC
S2V5KGludDMyX3QpOworICAgIGV4cGxpY2l0IElEQktleShjb25zdCBTdHJpbmcmKTsKKworICAg
IFR5cGUgbV90eXBlOworICAgIFN0cmluZyBtX3N0cmluZzsKKyAgICBpbnQzMl90IG1fbnVtYmVy
OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRp
ZiAvLyBJREJLZXlfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5pZGwgYi9X
ZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDk5NWYzM2VjYmMwZGMyM2Ey
ODZmYWM1MmQwNjNiNjU1ODk0YWFjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdl
L0lEQktleS5pZGwKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKwor
ICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisg
ICAgICAgIEN1c3RvbVRvSlMKKyAgICBdIElEQktleSB7CisgICAgICAgIC8vIFRoaXMgc3BhY2Ug
aXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rLgorICAgIH07Cit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3N0b3JhZ2UvSURCS2V5VHJlZS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVRyZWUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45NzA1NWQxZWU2ZWFjZGQ1ZjRjZjhhYjVhYTk0ZTI3MWUyOTJhZjNiCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVRyZWUuaApAQCAtMCwwICsxLDE2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSURCS2V5VHJlZV9oCisjZGVmaW5lIElEQktleVRyZWVfaAor
CisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlPgorY2xhc3MgSURC
S2V5VHJlZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQktleVRyZWU8VmFsdWVUeXBlPiA+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlUcmVlPiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJLZXlUcmVlKCkpOworICAgIH0KKyAgICB+
SURCS2V5VHJlZSgpOworCisgICAgLy8gUG9pbnRlciBpcyBpbnRvIHRoZSBhY3RpdmUgdHJlZSwg
c28gZG9uJ3QgdXNlIGl0IGFmdGVyIG11dGF0aW5nIHRoZSB0cmVlLgorICAgIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxWYWx1ZVR5cGU+LCAxPiBWYWx1ZVZlY3RvcjsKKyAgICBWYWx1ZVZlY3Rvciog
Z2V0KFBhc3NSZWZQdHI8SURCS2V5PiBrZXkpOworCisgICAgdm9pZCBpbnNlcnQoUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxWYWx1ZVR5cGU+IHZhbHVlKTsKKworICAgIC8vIElm
IHZhbHVlIGlzICEwLCBpdCBtdXN0IG1hdGNoIGFzIHdlbGwuIFRoaXMgaXMgdXNlZnVsIGZvciB3
aGVuIGtleXMgYXJlIG5vbi11bmlxdWUgYnV0IHBvaW50IHRvd2FyZHMgdW5pcXVlIHZhbHVlcy4K
KyAgICB2b2lkIHJlbW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFZhbHVl
VHlwZT4gdmFsdWUgPSAwKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgVHJlZU5vZGUgeworICAg
ICAgICBWYWx1ZVZlY3RvciB2YWx1ZTsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5OworCisg
ICAgICAgIFRyZWVOb2RlKiBsZXNzOworICAgICAgICBUcmVlTm9kZSogZ3JlYXRlcjsKKyAgICAg
ICAgaW50IGJhbGFuY2VGYWN0b3I7CisgICAgfTsKKworICAgIHN0cnVjdCBBVkxUcmVlQWJzdHJh
Y3RvciB7CisgICAgICAgIHR5cGVkZWYgVHJlZU5vZGUqIGhhbmRsZTsKKyAgICAgICAgdHlwZWRl
ZiBzaXplX3Qgc2l6ZTsKKyAgICAgICAgdHlwZWRlZiBJREJLZXkqIGtleTsKKworICAgICAgICBo
YW5kbGUgZ2V0X2xlc3MoaGFuZGxlIGgpIHsgcmV0dXJuIGgtPmxlc3M7IH0KKyAgICAgICAgdm9p
ZCBzZXRfbGVzcyhoYW5kbGUgaCwgaGFuZGxlIGxoKSB7IGgtPmxlc3MgPSBsaDsgfQorICAgICAg
ICBoYW5kbGUgZ2V0X2dyZWF0ZXIoaGFuZGxlIGgpIHsgcmV0dXJuIGgtPmdyZWF0ZXI7IH0KKyAg
ICAgICAgdm9pZCBzZXRfZ3JlYXRlcihoYW5kbGUgaCwgaGFuZGxlIGdoKSB7IGgtPmdyZWF0ZXIg
PSBnaDsgfQorICAgICAgICBpbnQgZ2V0X2JhbGFuY2VfZmFjdG9yKGhhbmRsZSBoKSB7IHJldHVy
biBoLT5iYWxhbmNlRmFjdG9yOyB9CisgICAgICAgIHZvaWQgc2V0X2JhbGFuY2VfZmFjdG9yKGhh
bmRsZSBoLCBpbnQgYmYpIHsgaC0+YmFsYW5jZUZhY3RvciA9IGJmOyB9CisKKyAgICAgICAgc3Rh
dGljIGhhbmRsZSBudWxsKCkgeyByZXR1cm4gMDsgfQorCisgICAgICAgIGludCBjb21wYXJlX2tl
eV9rZXkoa2V5IHZhLCBrZXkgdmIpOworICAgICAgICBpbnQgY29tcGFyZV9rZXlfbm9kZShrZXkg
aywgaGFuZGxlIGgpIHsgcmV0dXJuIGNvbXBhcmVfa2V5X2tleShrLCBoLT5rZXkuZ2V0KCkpOyB9
CisgICAgICAgIGludCBjb21wYXJlX25vZGVfbm9kZShoYW5kbGUgaDEsIGhhbmRsZSBoMikgeyBy
ZXR1cm4gY29tcGFyZV9rZXlfa2V5KGgxLT5rZXkuZ2V0KCksIGgyLT5rZXkuZ2V0KCkpOyB9Cisg
ICAgfTsKKworICAgIElEQktleVRyZWUoKTsKKworICAgIHR5cGVkZWYgV1RGOjpBVkxUcmVlPEFW
TFRyZWVBYnN0cmFjdG9yPiBUcmVlVHlwZTsKKyAgICBUcmVlVHlwZSBtX3RyZWU7Cit9OworCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlPgorSURCS2V5VHJlZTxWYWx1ZVR5cGU+OjpJREJL
ZXlUcmVlKCkKK3sKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZT4KK0lEQktleVRy
ZWU8VmFsdWVUeXBlPjo6fklEQktleVRyZWUoKQoreworICAgIHR5cGVuYW1lIFRyZWVUeXBlOjpJ
dGVyYXRvciBpdGVyOworICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdChtX3RyZWUpOworICAgIGZv
ciAoOyAqaXRlcjsgKytpdGVyKQorICAgICAgICBkZWxldGUgKml0ZXI7CisgICAgbV90cmVlLnB1
cmdlKCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGU+CitpbnQgSURCS2V5VHJl
ZTxWYWx1ZVR5cGU+OjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29tcGFyZV9rZXlfa2V5KGtleSB2YSwg
a2V5IHZiKQoreworICAgIGlmICh2YS0+dHlwZSgpICE9IHZhLT50eXBlKCkpCisgICAgICAgIHJl
dHVybiB2YS0+dHlwZSgpIC0gdmItPnR5cGUoKTsKKworICAgIHN3aXRjaCAodmEtPnR5cGUoKSkg
eworICAgIGNhc2UgSURCS2V5OjpOdWxsVHlwZToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2Fz
ZSBJREJLZXk6Ok51bWJlclR5cGU6CisgICAgICAgIHJldHVybiB2YS0+bnVtYmVyKCkgLSB2YS0+
bnVtYmVyKCk7CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6CisgICAgICAgIHJldHVybiBj
b2RlUG9pbnRDb21wYXJlKHZhLT5zdHJpbmcoKSwgdmItPnN0cmluZygpKTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlPgordHlwZW5hbWUgSURCS2V5VHJl
ZTxWYWx1ZVR5cGU+OjpWYWx1ZVZlY3RvciogSURCS2V5VHJlZTxWYWx1ZVR5cGU+OjpnZXQoUGFz
c1JlZlB0cjxJREJLZXk+IGtleSkKK3sKKyAgICBUcmVlTm9kZSogbm9kZSA9IG1fdHJlZS5zZWFy
Y2goa2V5LmdldCgpKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiAmbm9kZS0+dmFsdWU7Cit9CisKKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZT4K
K3ZvaWQgSURCS2V5VHJlZTxWYWx1ZVR5cGU+OjppbnNlcnQoUGFzc1JlZlB0cjxJREJLZXk+IHBy
cEtleSwgUGFzc1JlZlB0cjxWYWx1ZVR5cGU+IHZhbHVlKQoreworICAgIFJlZlB0cjxJREJLZXk+
IGtleSA9IHBycEtleTsKKyAgICBUcmVlTm9kZSogbm9kZSA9IG1fdHJlZS5zZWFyY2goa2V5Lmdl
dCgpKTsKKyAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgbm9kZSA9IG5ldyBUcmVlTm9kZSgpOwor
ICAgICAgICBub2RlLT5rZXkgPSBrZXkucmVsZWFzZSgpOworICAgICAgICBtX3RyZWUuaW5zZXJ0
KG5vZGUpOworICAgIH0KKyAgICBub2RlLT52YWx1ZS5hcHBlbmQodmFsdWUpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlPgordm9pZCBJREJLZXlUcmVlPFZhbHVlVHlwZT46OnJl
bW92ZShQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPFZhbHVlVHlwZT4gcHJw
VmFsdWUpCit7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworICAgIFJlZlB0cjxW
YWx1ZVR5cGU+IHZhbHVlID0gcHJwVmFsdWU7CisKKyAgICAvLyBGSVhNRTogV2UgZG9uJ3QgcHJv
cGVybHkgaGFuZGxlIHRoaXMgY2FzZSB5ZXQuCisgICAgQVNTRVJUKCF2YWx1ZSk7CisKKyAgICBU
cmVlTm9kZSogbm9kZSA9IG1fdHJlZS5yZW1vdmUoa2V5LmdldCgpKTsKKyAgICBpZiAobm9kZSkK
KyAgICAgICAgZGVsZXRlIG5vZGU7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCS2V5VHJlZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59988</attachid>
            <date>2010-06-28 22:56:03 -0700</date>
            <delta_ts>2010-07-01 00:18:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41252-20100629155600.patch</filename>
            <type>text/plain</type>
            <size>48169</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA5OTk1NGE1Zjc0MTMyZjM4OWFlMzFlMzAwMzExODRhYTA2NjgxYjEyLi40
NjM5N2I1YmExMTg1ODdiNDRiOGRjZTU3NzJmNmViNmJmYzBjOWEzIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTAtMDYtMjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Vw
cG9ydCBmb3Iga2V5cyBhbmQgaW4tbWVtb3J5IHN0b3JhZ2UgZm9yIEluZGV4ZWREQgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEyNTIKKworICAgICAg
ICBTZXQgdGhlIHJvbGUgdG8gUHJpdmF0ZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTAtMDYtMjUgIEplZHJ6ZWogTm93YWNraSAg
PGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24g
SGF1c21hbm4uCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxOGQ2YjgzODYwYzgxNzA1MGYxMGU4NDM3ZDVi
ZDA1MmI0NzczNmQ2Li40NWQ5NzY0MTdjMDk1NjEwN2Y3YWIwYTc2YzU2ZjdhMjRlNzgzNzU1IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTM0OSw3ICszNDksNyBAQAogCQlCQzE4QzNFNzBFMTZGNUNEMDBC
MzQ0NjAgLyogQXJyYXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY2OTJBODRFMDI1NTU5N0QwMUZGNjBGNyAvKiBBcnJheVByb3RvdHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJD
MThDM0U5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBU0NJSUNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzhDNEY2OTBDQTA2QkM3MDBEOTMxMEEgLyog
QVNDSUlDVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUJDMThDM0VBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBBc3NlcnRpb25zLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUUyMTdCNzA4RTdFRUNDMDAy
M0U1RjYgLyogQXNzZXJ0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUJDMThDM0VCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBBVkxUcmVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUE1OTYzNzBERTNF
MUMzMDBDMTdFMzcgLyogQVZMVHJlZS5oICovOyB9OworCQlCQzE4QzNFQjBFMTZGNUNEMDBCMzQ0
NjAgLyogQVZMVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFBNTk2MzcwREUzRTFDMzAwQzE3RTM3IC8qIEFWTFRyZWUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzNFQzBFMTZGNUNEMDBC
MzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8qIEJvb2xlYW5PYmplY3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4
QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxs
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDMThDM0YwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb2xsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBODYyQUEwRDdFQkI3RDAwMUVDNkFBIC8q
IENvbGxhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggN2M2MzYxZTE1MmQyMTI4YWQwMWFkMGQ1MWZiOTEzZDZmYzc4NmU2Ny4uY2UxZTg3MGE3ZmQz
Mzc3NzllYzJhMWY0NmIxMDliOGU2Yjk3NTZlMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NiBAQAorMjAxMC0wNi0yNiAg
SmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdXBwb3J0IGZvciBrZXlzIGFuZCBpbi1tZW1v
cnkgc3RvcmFnZSBmb3IgSW5kZXhlZERCCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MTI1MgorCisgICAgICAgIEl0J2xsIHRha2Ugc29tZSB0aW1lIHRv
IGdldCBkYXRhIHBlcnNpc3RlbmNlIHdvcmtpbmcgZm9yIEluZGV4ZWREQiwKKyAgICAgICAgc28g
dW50aWwgdGhlbiwgd2UnbGwganVzdCBzdG9yZSBldmVyeXRoaW5nIGluIGFuIGluIG1lbW9yeSB0
cmVlLgorICAgICAgICBUaGUgdHJlZSB1c2VzIFdURjo6QVZMVHJlZSBhbmQgaXMgYSB0ZW1wbGF0
ZSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5CisgICAgICAgIG9iamVjdCBzdG9yZXMgKElEQktl
eSAtPiBTZXJpYWxpemVkU2NyaXB0VmFsdWUpIGFuZCBpbmRleGVzIChJREJLZXkgLT4KKyAgICAg
ICAgSURCS2V5KS4gIFRoaXMgY2xhc3Mgd2lsbCBiZSB1c2VkIGluIGEgc3Vic2VxdWVudCBwYXRj
aC4KKworICAgICAgICBBbHNvIGFkZCBhbiBJREJLZXkgdHlwZSB0aGF0IHJlcHJlc2VudHMgb25l
IG9mIHRoZXNlIGtleXMuICBXZSB1c2UgYQorICAgICAgICBjdXN0b20gdG9KUyBmdW5jdGlvbiBp
biBhIHdheSBzaW1pbGFyIHRvIElEQkFueSB0byBjb252ZXJ0IGZyb20gV2ViQ29yZQorICAgICAg
ICB0byBhIEpTIHZhbHVlLiAgRm9yIGNvbnZlcnRpbmcgdGhlIG90aGVyIHdheSwgd2UgaGF2ZSB0
byB0ZWFjaCB0aGUgY29kZQorICAgICAgICBnZW5lcmF0b3JzIHdoYXQgdG8gZG8gKHVuZm9ydHVu
YXRlbHkpLiAgVGhpcyBpcyBkb25lIGluIGEgd2F5IHNpbWlsYXIKKyAgICAgICAgdG8gc2VyaWFs
aXplZCBzY3JpcHQgdmFsdWUuICBVbmxpa2Ugc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUsIElEQktl
eSBpcworICAgICAgICBpbiBXZWJDb3JlIGFuZCBvbmx5IGEgaGVscGVyIGZ1bmN0aW9uIGlzIEpT
IGVuZ2luZSBzcGVjaWZpYy4KKworICAgICAgICBUaGlzIGNvZGUgaXMgbm90IGFjY2Vzc2FibGUg
ZnJvbSBsYXlvdXQgdGVzdHMuICAoV2lsbCBmaXggaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMjUwKSAgVGhlIGJpbmRpbmdzIHRlc3RzCisgICAg
ICAgIHNob3cgdXMgdGhhdCB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdzIGFyZSB3aGF0IHdlIGV4cGVj
dC4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9BVkxUcmVlLmg6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0lEQktleUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RP
Ymo6OmlkYktleSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE9iai5jcHA6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9rZXkpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmou
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbklkYktleSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmou
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tOgor
ICAgICAgICAoLVtET01UZXN0T2JqIGlkYktleTpdKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OmlkYktl
eUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogYmluZGluZ3Mvdjgv
SURCQmluZGluZ1V0aWxpdGllcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
SURCS2V5RnJvbVZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0
aWVzLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQktleUN1c3Rv
bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogc3RvcmFn
ZS9JREJDYWxsYmFja3MuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQktleS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpJREJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURC
S2V5Ojp+SURCS2V5KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQktleS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQktleTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXk6OnN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6Om51bWJlcik6CisgICAg
ICAgICogc3RvcmFnZS9JREJLZXkuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQktl
eVRyZWUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJLZXlUcmVlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5VHJlZTo6QVZMVHJlZUFic3RyYWN0b3I6OmdldF9sZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVRyZWU6OkFWTFRyZWVBYnN0cmFjdG9yOjpzZXRf
bGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6
Z2V0X2dyZWF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5VHJlZTo6QVZMVHJlZUFic3Ry
YWN0b3I6OnNldF9ncmVhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVRyZWU6OkFWTFRy
ZWVBYnN0cmFjdG9yOjpnZXRfYmFsYW5jZV9mYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
S2V5VHJlZTo6QVZMVHJlZUFic3RyYWN0b3I6OnNldF9iYWxhbmNlX2ZhY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6bnVsbCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29tcGFyZV9rZXlfbm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29t
cGFyZV9ub2RlX25vZGUpOgorICAgICAgICAoV2ViQ29yZTo6OjpJREJLZXlUcmVlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ojo6fklEQktleVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6OjpBVkxUcmVl
QWJzdHJhY3Rvcjo6Y29tcGFyZV9rZXlfa2V5KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Z2V0KToK
KyAgICAgICAgKFdlYkNvcmU6Ojo6aW5zZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6cmVtb3Zl
KToKKwogMjAxMC0wNi0yNSAgRXZhbiBTdGFkZSAgPGVzdGFkZUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvQVZMVHJlZS5oIGIvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvQVZMVHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1MWI3ZjdjZTU0NThjMDFjMWEyNzM3NWU5NTMxZmVi
MTdhODcyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9BVkxUcmVlLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0FWTFRyZWVf
aAorI2RlZmluZSBXZWJDb3JlX0ZXRF9BVkxUcmVlX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9BVkxUcmVlLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhYTIzNzAxNjJkYjZiNmY1ODgxNzQyYzI3MjgxZjBlMTEw
MTI5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiSURCS2V5Lmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUoKTsKKyAgICBpZiAodmFsdWUuaXNJbnQzMigp
KQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodmFsdWUudG9JbnQzMihleGVjKSk7Cisg
ICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZSh1
c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGRhdGVzLgorICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jYmQxYTNhN2RiZjI3NjI2NTA5YTE1NzQzZTAyMDBmNDVmNDNmNWFiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAg
LTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCQmluZGluZ1V0aWxpdGllc19oCisjZGVm
aW5lIElEQkJpbmRpbmdVdGlsaXRpZXNfaAorCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5OworCitQYXNzUmVmUHRyPElE
QktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpT
VmFsdWUgdmFsdWUpOworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2VuZGlmIC8vIElEQkJpbmRpbmdVdGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
S2V5Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OGM5MzE1OGExNzFhYmY0ZTNmZTIyMzAyMWQ2ZGM1
NDYxYjc0Mjg1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktl
eUN1c3RvbS5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNp
bmNsdWRlICJKU0lEQktleS5oIgorCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgor
I2luY2x1ZGUgIklEQktleS5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0pTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgSURCS2V5KiBrZXkpCit7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiBqc051
bGwoKTsKKworICAgIHN3aXRjaCAoa2V5LT50eXBlKCkpIHsKKyAgICBjYXNlIElEQktleTo6TnVs
bFR5cGU6CisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBjYXNlIElEQktleTo6TnVtYmVy
VHlwZToKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGtleS0+bnVtYmVyKCkpOworICAg
IGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgorICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
a2V5LT5zdHJpbmcoKSk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlcy4KKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRl
eCA0ZTJlOTExOTQ0N2YzYjA0ZTA5MzUwOTdkOTYxZWZjNmJlMDllZGI0Li45ZjE0YjI2ZGFjOWM1
MjFjNGUzZTMzYWMzNjZlMmEzMzI1MTM4ZDUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTIyNTksNiArMjI1OSw3IEBAIG15ICVuYXRpdmVUeXBl
ID0gKAogICAgICJET01PYmplY3QiID0+ICJTY3JpcHRWYWx1ZSIsCiAgICAgIk5vZGVGaWx0ZXIi
ID0+ICJSZWZQdHI8Tm9kZUZpbHRlcj4iLAogICAgICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiID0+
ICJSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiIsCisgICAgIklEQktleSIgPT4gIlJlZlB0
cjxJREJLZXk+IiwKICAgICAiU1ZHQW5nbGUiID0+ICJTVkdBbmdsZSIsCiAgICAgIlNWR0xlbmd0
aCIgPT4gIlNWR0xlbmd0aCIsCiAgICAgIlNWR01hdHJpeCIgPT4gIkFmZmluZVRyYW5zZm9ybSIs
CkBAIC0yMzI2LDYgKzIzMjcsMTIgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgICAgICByZXR1
cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0K
IAorICAgIGlmICgkdHlwZSBlcSAiSURCS2V5IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJJ
REJCaW5kaW5nVXRpbGl0aWVzLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IklEQktl
eS5oIn0gPSAxOworICAgICAgICByZXR1cm4gImNyZWF0ZUlEQktleUZyb21WYWx1ZShleGVjLCAk
dmFsdWUpIjsKKyAgICB9CisKICAgICAkaW1wbEluY2x1ZGVzeyJGbG9hdFBvaW50LmgifSA9IDEg
aWYgJHR5cGUgZXEgIlNWR1BvaW50IjsKICAgICAkaW1wbEluY2x1ZGVzeyJGbG9hdFJlY3QuaCJ9
ID0gMSBpZiAkdHlwZSBlcSAiU1ZHUmVjdCI7CiAgICAgJGltcGxJbmNsdWRlc3siSFRNTE9wdGlv
bkVsZW1lbnQuaCJ9ID0gMSBpZiAkdHlwZSBlcSAiSFRNTE9wdGlvbkVsZW1lbnQiOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggZTI0OWNhYWEzZGFh
ZDM5ZmI1N2ZkZDA2MTc3ZDM5NWY3MmI1MTdhMS4uMWFlMGY4ZmMyZDcxNmVmYzJjMGM3YTM5YzJh
YmY5ZGVmMTgzNjExNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCkBAIC0yNzQ4LDYgKzI3NDgsOCBAQCBzdWIgR2V0TmF0aXZlVHlwZQogCiAgICAgcmV0
dXJuICJSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiIgaWYgJHR5cGUgZXEgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSI7CiAKKyAgICByZXR1cm4gIlJlZlB0cjxJREJLZXk+IiBpZiAkdHlwZSBl
cSAiSURCS2V5IjsKKwogICAgICMgbmVjZXNzYXJ5IGFzIHJlc29sdmVycyBjb3VsZCBiZSBjb25z
dHJ1Y3RlZCBvbiBmbHkuCiAgICAgcmV0dXJuICJSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiIgaWYg
JHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciI7CiAKQEAgLTI4MjksNiArMjgzMSwxMiBAQCBzdWIg
SlNWYWx1ZVRvTmF0aXZlCiAKICAgICBkaWUgIlVuZXhwZWN0ZWQgU2VyaWFsaXplZFNjcmlwdFZh
bHVlIiBpZiAkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKIAorICAgIGlmICgkdHlw
ZSBlcSAiSURCS2V5IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJJREJCaW5kaW5nVXRpbGl0
aWVzLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IklEQktleS5oIn0gPSAxOworICAg
ICAgICByZXR1cm4gImNyZWF0ZUlEQktleUZyb21WYWx1ZSgkdmFsdWUpIjsKKyAgICB9CisKICAg
ICBpZiAoJHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siU2Ny
aXB0VmFsdWUuaCJ9ID0gMTsKICAgICAgICAgcmV0dXJuICJTY3JpcHRWYWx1ZSgkdmFsdWUpIjsK
QEAgLTI5ODUsNyArMjk5Myw4IEBAIG15ICVub25fd3JhcHBlcl90eXBlcyA9ICgKICAgICAnRE9N
T2JqZWN0JyA9PiAxLAogICAgICdFdmVudFRhcmdldCcgPT4gMSwKICAgICAnTm9kZUZpbHRlcicg
PT4gMSwKLSAgICAnRXZlbnRMaXN0ZW5lcicgPT4gMQorICAgICdFdmVudExpc3RlbmVyJyA9PiAx
LAorICAgICdJREJLZXknID0+IDEKICk7CiAKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCmluZGV4IDY1YmM5ZjM2ZWUzNmUyNDI1
ZTQ2NGU3MGEwZDYwZGJmNTM0OWQzYTUuLmVlOGFmY2ZjNjBmYTA1MDk5MzIzYmE1NjA5NmI5NGU3
Y2VkMWU0ZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5jcHAKQEAgLTIzLDkgKzIzLDExIEBACiAKICNpbmNsdWRlICJBdG9taWNT
dHJpbmcuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSAiVGVzdE9iai5oIgorI2luY2x1ZGUgIldlYkRPTUlEQktleS5oIgogI2luY2x1ZGUgIldl
YkRPTVN0cmluZy5oIgogI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKICNpbmNsdWRl
ICJXZWJOYXRpdmVFdmVudExpc3RlbmVyLmgiCkBAIC01NDksNiArNTUxLDE0IEBAIHZvaWQgV2Vi
RE9NVGVzdE9iajo6c2VyaWFsaXplZFZhbHVlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXpl
ZEFyZykKICAgICBpbXBsKCktPnNlcmlhbGl6ZWRWYWx1ZShXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShXZWJDb3JlOjpTdHJpbmcoc2VyaWFsaXplZEFyZykpKTsKIH0KIAor
dm9pZCBXZWJET01UZXN0T2JqOjppZGJLZXkoY29uc3QgV2ViRE9NSURCS2V5JiBrZXkpCit7Cisg
ICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+aWRiS2V5KHRv
V2ViQ29yZShrZXkpKTsKK30KKwogdm9pZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0
aW9uKCkKIHsKICAgICBpZiAoIWltcGwoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCmluZGV4IDMzYmM3ZmJhNTliMjNiZjBiMzkwNzMw
NjIwMzhiNTU1ZTgyMzBmNTcuLmNkZDQ3ZWQwMjMyNjI1NDllZGVmZDA0MTc2MzViZDhhNWM5Y2Ni
YjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RPYmouaApAQCAtMzEsNiArMzEsNyBAQCBjbGFzcyBUZXN0T2JqOwogfTsKIAogY2xhc3MgV2Vi
RE9NRXZlbnRMaXN0ZW5lcjsKK2NsYXNzIFdlYkRPTUlEQktleTsKIGNsYXNzIFdlYkRPTVN0cmlu
ZzsKIGNsYXNzIFdlYkRPTVRlc3RPYmo7CiAKQEAgLTEwMSw2ICsxMDIsNyBAQCBwdWJsaWM6CiAg
ICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKGNvbnN0IFdlYkRPTVN0
cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOwogICAgIFdlYkRPTVRl
c3RPYmogbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhjb25zdCBXZWJET01TdHJp
bmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKICAgICB2b2lkIHNlcmlh
bGl6ZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpOworICAgIHZvaWQg
aWRiS2V5KGNvbnN0IFdlYkRPTUlEQktleSYga2V5KTsKICAgICB2b2lkIG1ldGhvZFdpdGhFeGNl
cHRpb24oKTsKICAgICB2b2lkIGN1c3RvbU1ldGhvZCgpOwogICAgIHZvaWQgY3VzdG9tTWV0aG9k
V2l0aEFyZ3MoaW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdl
YkRPTVRlc3RPYmomIG9iakFyZyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAppbmRleCBlZmIzNjJiYmEz
ZWVkZDNmM2ExYThiNGU3YjRlNWU2NzAzMjcwMDY5Li4xODRiMjg2YWU5MmUwN2VhNDU4YzExMTY2
ZmRjZGU5NTg3MjA2ZDk0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKQEAgLTI4LDYgKzI4LDggQEAK
ICNpbmNsdWRlICJUZXN0T2JqLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NQmluZGluZy5oIgogI2lu
Y2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIndlYmtpdC9X
ZWJLaXRET01JREJLZXkuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NSURCS2V5UHJpdmF0
ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0T2JqLmgiCkBAIC0xNjYsNiArMTY4LDE3
IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkCiB9CiAKIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9v
YmpfaWRiX2tleShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01JREJLZXkqICBrZXkp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGtleSk7Cisg
ICAgV2ViQ29yZTo6SURCS2V5ICogY29udmVydGVkX2tleSA9IFdlYktpdDo6Y29yZShrZXkpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX2tleSk7CisgICAgaXRlbS0+aWRiS2V5KGNv
bnZlcnRlZF9rZXkpOworfQorCit2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKIHsKICAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAppbmRleCA4ZGNkOGMzMWUz
MzYzYmU3MjQ4YTM3NWI1OTcyYTUxNjk3MDBjMzk3Li42MWMzZDk1YmQ3YjZmYTk5MDYzM2E5NWQ1
ZjRmMzFiNmQ2ODBjMGY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaApAQCAtNzQsNiArNzQsOSBAQCBXRUJL
SVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqICBzZXJpYWxp
emVkX2FyZyk7CiAKIFdFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9pZGJfa2V5
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTUlEQktleSogIGtleSk7CisKK1dFQktJ
VF9BUEkgdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb24oV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpOwogCiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDM2MDc4MmQ4NjhmNWFk
YjAxMWVjNzMzODA2ZjQyMGExMDNhYTI1ZjUuLjMxYTNmNzBhY2UyMDJiZDhlMzdhZjcwZWEwY2Fj
MzMwM2M5ZTliMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcApAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgogCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgor
I2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIkpTVGVzdE9iai5oIgogI2luY2x1ZGUgIkpTbG9nLmgiCkBAIC0xNDQsNyArMTQ2LDcgQEAg
Ym9vbCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnQKICNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRv
cikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90
eXBlVGFibGVWYWx1ZXNbMzBdID0KK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RP
YmpQcm90b3R5cGVUYWJsZVZhbHVlc1szMV0gPQogewogICAgIHsgInZvaWRNZXRob2QiLCBEb250
RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4o
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kKSwgKGludHB0cl90KTAgVEhVTktf
R0VORVJBVE9SKDApIH0sCiAgICAgeyAidm9pZE1ldGhvZFdpdGhBcmdzIiwgRG9udERlbGV0ZSB8
IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhVTktf
R0VORVJBVE9SKDApIH0sCkBAIC0xNTUsNiArMTU3LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzMwXSA9CiAgICAgeyAibWV0aG9k
VGhhdFJlcXVpcmVzQWxsQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0
YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFRoYXRSZXF1aXJlc0FsbEFyZ3MpLCAoaW50cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkgfSwK
ICAgICB7ICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiwgRG9udERlbGV0ZSB8
IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyksIChp
bnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgInNlcmlhbGl6ZWRWYWx1ZSIs
IERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZSksIChpbnRwdHJf
dCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgImlkYktleSIsIERvbnREZWxldGUgfCBG
dW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbklkYktleSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9
LAogICAgIHsgIm1ldGhvZFdpdGhFeGNlcHRpb24iLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDAp
IH0sCiAgICAgeyAiY3VzdG9tTWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
Q3VzdG9tTWV0aG9kKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAi
Y3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0
b21NZXRob2RXaXRoQXJncyksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigwKSB9LApAQCAt
MTc5LDcgKzE4Miw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90
b3R5cGVUYWJsZVZhbHVlc1szMF0gPQogfTsKIAogI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgotc3Rh
dGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxl
ID0geyA2OSwgNjMsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CitzdGF0aWMg
SlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7
IDEzMCwgMTI3LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OwogY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9ialByb3RvdHlwZSIs
IDAsICZKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSwgMCB9OwogCiBKU09iamVjdCogSlNUZXN0T2Jq
UHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKQEAgLTc5Nyw2ICs4MDAsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShFeGVjU3RhdGUKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSWRiS2V5KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAg
ICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCkpOworCisgICAgaW1wLT5pZGJLZXkoa2V5KTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
CmluZGV4IDNiMjFjODU2MDFjMGEzN2I3Y2RmZmYxZWU1ZmEzNjE0MTI4YTQ2NzAuLjRkZWEzZDIz
ZTlkZWIxYjRjYTQ4ZmZmNzdiYmMxNmVjOTgyMTZiZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC05NSw2ICs5NSw3IEBAIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhv
ZFdpdGhBcmdzKEpTCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzKEpTQzo6RXhlY1N0YXRl
Kik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpTQzo6RXhlY1N0YXRl
Kik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleShKU0M6
OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJn
cyhKU0M6OkV4ZWNTdGF0ZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RPYmouaAppbmRleCBkODg2MmRhMTVlYWM0ZTgxYTJlYjExYWJlYTNhMDVkMzNm
YjJjMWJiLi5kMzhkZWNlM2VkZjQ4MmY1NTIyNjJiN2UzZDI2MzBiZjRhOWM0ODZkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaWYgV0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZF
UlNJT05fTEFURVNUCiAKK0BjbGFzcyBET01JREJLZXk7CiBAY2xhc3MgRE9NVGVzdE9iajsKIEBj
bGFzcyBET01sb2c7CiBAY2xhc3MgTlNTdHJpbmc7CkBAIC05OSw2ICsxMDAsNyBAQAogLSAoRE9N
VGVzdE9iaiAqKW1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3M6KE5TU3RyaW5nICopc3RyQXJnIG9i
akFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKIC0gKERPTVRlc3RPYmogKiltZXRob2RUaGF0UmVx
dWlyZXNBbGxBcmdzQW5kVGhyb3dzOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RP
YmogKilvYmpBcmc7CiAtICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZTooTlNTdHJpbmcgKilzZXJpYWxp
emVkQXJnOworLSAodm9pZClpZGJLZXk6KERPTUlEQktleSAqKWtleTsKIC0gKHZvaWQpbWV0aG9k
V2l0aEV4Y2VwdGlvbjsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kOwogLSAodm9pZCljdXN0b21NZXRo
b2RXaXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzoo
RE9NVGVzdE9iaiAqKW9iakFyZzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbQppbmRleCA5YmJiZjE0NGI3ZWU2OWZiOTZhNDBmNDE0OWQ4MDU5
NGNlZjdkZmI4Li5kNzFjYjA1MjIxYTg1MzAwOTdjMDg4NGJjOTM1MjM2YmQ4Njk0NDYxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0K
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCkBA
IC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJET01DU1NSdWxlSW50ZXJuYWwuaCIKICNpbXBvcnQg
IkRPTUNTU1ZhbHVlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKKyNp
bXBvcnQgIkRPTUlEQktleUludGVybmFsLmgiCiAjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIK
ICNpbXBvcnQgIkRPTVN0eWxlU2hlZXRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NVGVzdE9iaklu
dGVybmFsLmgiCkBAIC00MCw2ICs0MSw3IEBACiAjaW1wb3J0ICJFdmVudExpc3RlbmVyLmgiCiAj
aW1wb3J0ICJFeGNlcHRpb25IYW5kbGVycy5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCisjaW1w
b3J0ICJJREJLZXkuaCIKICNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2ltcG9y
dCAiS1VSTC5oIgogI2ltcG9ydCAiT2JqQ0V2ZW50TGlzdGVuZXIuaCIKQEAgLTQ1MSw2ICs0NTMs
MTIgQEAKICAgICBJTVBMLT5zZXJpYWxpemVkVmFsdWUoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSk7CiB9CiAKKy0g
KHZvaWQpaWRiS2V5OihET01JREJLZXkgKilrZXkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+aWRiS2V5KGNvcmUoa2V5KSk7Cit9CisKIC0g
KHZvaWQpbWV0aG9kV2l0aEV4Y2VwdGlvbgogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwK
aW5kZXggZWY0ZGIxMDZmMDc0NjZmODQyNTk0MTRkODlkOWQwNDlmNjk4NDIyMi4uMzQ2NzExNjdh
NTQ4ZDdmMzk2YjU2MWYzZDQwOTFmYzk5ZDkzMzM3YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTYzLDYgKzYzLDcgQEAgbW9kdWxlIHRlc3QgewogICAg
ICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgdm9pZCBzZXJpYWxpemVk
VmFsdWUoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRBcmcpOworICAgICAgICB2
b2lkIGlkYktleShpbiBJREJLZXkga2V5KTsKIAogICAgICAgICAvLyBFeGNlcHRpb25zCiAgICAg
ICAgIHZvaWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigpIHJhaXNlcyhET01FeGNlcHRpb24pOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggNGE1
NGFlMzQwOTUzNzQwNDliY2ExZTIxOTU2YWM4ZDM4ZGViMzE2Zi4uMWFkOGE0MTZiODNjZTlhOTdj
OTg3NGZlNDIxMDNhZTRjZjM1NzRkNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC0yMyw2ICsyMyw4IEBACiAKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSURCQmluZGlu
Z1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTU3Myw2ICs1NzUsMTUgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBzZXJpYWxpemVkVmFsdWVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KIAorc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpZGJLZXlDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaWRiS2V5Iik7CisgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBS
ZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoYXJnc1swXSk7CisgICAg
aW1wLT5pZGJLZXkoa2V5KTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9
CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVz
dE9iai5tZXRob2RXaXRoRXhjZXB0aW9uIik7CkBAIC05NDcsNiArOTU4LDcgQEAgc3RhdGljIGNv
bnN0IEJhdGNoZWRDYWxsYmFjayBUZXN0T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJpbnRNZXRo
b2QiLCBUZXN0T2JqSW50ZXJuYWw6OmludE1ldGhvZENhbGxiYWNrfSwKICAgICB7Im9iak1ldGhv
ZCIsIFRlc3RPYmpJbnRlcm5hbDo6b2JqTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsic2VyaWFsaXpl
ZFZhbHVlIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVDYWxsYmFja30sCisgICAg
eyJpZGJLZXkiLCBUZXN0T2JqSW50ZXJuYWw6OmlkYktleUNhbGxiYWNrfSwKICAgICB7Im1ldGhv
ZFdpdGhFeGNlcHRpb24iLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhFeGNlcHRpb25DYWxs
YmFja30sCiAgICAgeyJjdXN0b21NZXRob2QiLCBWOFRlc3RPYmo6OmN1c3RvbU1ldGhvZENhbGxi
YWNrfSwKICAgICB7ImN1c3RvbU1ldGhvZFdpdGhBcmdzIiwgVjhUZXN0T2JqOjpjdXN0b21NZXRo
b2RXaXRoQXJnc0NhbGxiYWNrfSwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvSURC
QmluZGluZ1V0aWxpdGllcy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmOTc3ZTBlZDNhOTIzN2U3NWRiNGFhZWMzMmUyMTcxMTkx
N2QzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiSURCS2V5Lmgi
CisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5
RnJvbVZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUt
PklzTnVsbCgpKQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUoKTsKKyAgICBpZiAodmFs
dWUtPklzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlKHZhbHVlLT5JbnQz
MlZhbHVlKCkpOworICAgIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIElE
QktleTo6Y3JlYXRlKHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodmFsdWUpKTsKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGRhdGVzLgorICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5k
aW5nVXRpbGl0aWVzLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iN2M4NDcwYzY3OGMyYjZkMGQyMzUzYTdhMDA1NjI3ZmFkZWU3ODQwCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVz
LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCQmluZGluZ1V0aWxpdGllc19o
CisjZGVmaW5lIElEQkJpbmRpbmdVdGlsaXRpZXNfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBJREJLZXk7CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjg6
OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKKyNlbmRpZiAvLyBJREJCaW5kaW5nVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCS2V5Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SURCS2V5Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWZhNTVmNzNj
YmFjODk5ZjIyOWIyMWM5YTU1MTNlYjMxYmEzZjRkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJLZXlDdXN0b20uY3BwCkBAIC0wLDAgKzEsNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisjaW5jbHVkZSAiVjhJREJBbnkuaCIKKworI2luY2x1
ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChJREJLZXkqIGtleSkKK3sKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJu
IHY4OjpOdWxsKCk7CisKKyAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CisgICAgY2FzZSBJREJL
ZXk6Ok51bGxUeXBlOgorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICBjYXNlIElEQktl
eTo6TnVtYmVyVHlwZToKKyAgICAgICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoa2V5LT5udW1i
ZXIoKSk7CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6CisgICAgICAgIHJldHVybiB2OFN0
cmluZyhrZXktPnN0cmluZygpKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGVzLgorICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5o
IGIvV2ViQ29yZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5oCmluZGV4IGM5MGFjYzU4ZjlmM2M3MmNk
MWZhN2ZmNDk0M2IxNTZiNWNiNGJlYjguLjM3ZmRjNDZlMDk5Y2VjNjUzMDk0ZmExMjY5ODgzZTNh
Njk4ZjA5OWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFja3MuaAorKysg
Yi9XZWJDb3JlL3N0b3JhZ2UvSURCQ2FsbGJhY2tzLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNpbmNs
dWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQk9iamVj
dFN0b3JlLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQ4LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBvblN1Y2Nlc3MoKSA9IDA7IC8vIEZvciAibnVsbCIuCiAgICAgdmlydHVhbCB2b2lkIG9u
U3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlPikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJJbmRleD4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25T
dWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nl
c3MoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb25T
dWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPikgPSAwOwogfTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktl
eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2UyYjkyM2FiOGMyYmI3OTY3YWE3ZTNlMDk4ODM5M2RkOTRhYTQ3
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5Lmgi
CisKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQktleTo6SURCS2V5KCkK
KyAgICA6IG1fdHlwZShOdWxsVHlwZSkKK3sKK30KKworSURCS2V5OjpJREJLZXkoaW50MzJfdCBu
dW1iZXIpCisgICAgOiBtX3R5cGUoTnVtYmVyVHlwZSkKKyAgICAsIG1fbnVtYmVyKG51bWJlcikK
K3sKK30KKworSURCS2V5OjpJREJLZXkoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgOiBtX3R5
cGUoU3RyaW5nVHlwZSkKKyAgICAsIG1fc3RyaW5nKHN0cmluZykKK3sKK30KKworSURCS2V5Ojp+
SURCS2V5KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42YzJlMDBlN2JlOGFmMWU5N2Q5M2M3NjI2N2JlNzM1ZGY2ZDlmZDdiCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oCkBAIC0wLDAgKzEsOTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIElEQktleV9oCisjZGVmaW5lIElEQktleV9oCisKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTog
QWRkIGRhdGVzLgorY2xhc3MgSURCS2V5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCS2V5PiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJLZXkoKSk7CisgICAgfQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQktleT4gY3JlYXRlKGludDMyX3QgbnVtYmVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJLZXkobnVtYmVyKSk7CisgICAgfQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQktleT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJLZXkoc3RyaW5nKSk7CisgICAgfQorICAgIH5J
REJLZXkoKTsKKworICAgIC8vIEluIG9yZGVyIG9mIGxlc3QgdG8gbW9yZSBwcmVjaWRlbnQuCisg
ICAgZW51bSBUeXBlIHsKKyAgICAgICAgTnVsbFR5cGUgPSAwLAorICAgICAgICBTdHJpbmdUeXBl
LAorICAgICAgICBOdW1iZXJUeXBlCisgICAgfTsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQorCisgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBTdHJpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJu
IG1fc3RyaW5nOworICAgIH0KKworICAgIGludDMyX3QgbnVtYmVyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gTnVtYmVyVHlwZSk7CisgICAgICAgIHJldHVybiBtX251
bWJlcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSURCS2V5KCk7CisgICAgZXhwbGljaXQgSURC
S2V5KGludDMyX3QpOworICAgIGV4cGxpY2l0IElEQktleShjb25zdCBTdHJpbmcmKTsKKworICAg
IFR5cGUgbV90eXBlOworICAgIFN0cmluZyBtX3N0cmluZzsKKyAgICBpbnQzMl90IG1fbnVtYmVy
OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRp
ZiAvLyBJREJLZXlfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5pZGwgYi9X
ZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDk5NWYzM2VjYmMwZGMyM2Ey
ODZmYWM1MmQwNjNiNjU1ODk0YWFjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdl
L0lEQktleS5pZGwKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBzdG9yYWdlIHsKKwor
ICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisg
ICAgICAgIEN1c3RvbVRvSlMKKyAgICBdIElEQktleSB7CisgICAgICAgIC8vIFRoaXMgc3BhY2Ug
aXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rLgorICAgIH07Cit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3N0b3JhZ2UvSURCS2V5VHJlZS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVRyZWUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wZTM5ZTc3ODY3ZjE4YzRiYTYwYmEwMjkzMTcwZjJhZTc4NjZjYWJiCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVRyZWUuaApAQCAtMCwwICsxLDE1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSURCS2V5VHJlZV9oCisjZGVmaW5lIElEQktleVRyZWVfaAor
CisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlPgorY2xhc3MgSURC
S2V5VHJlZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQktleVRyZWU8VmFsdWVUeXBlPiA+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlUcmVlPiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJLZXlUcmVlKCkpOworICAgIH0KKyAgICB+
SURCS2V5VHJlZSgpOworCisgICAgUGFzc1JlZlB0cjxWYWx1ZVR5cGU+IGdldChQYXNzUmVmUHRy
PElEQktleT4ga2V5KTsKKyAgICB2b2lkIHB1dChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNz
UmVmUHRyPFZhbHVlVHlwZT4gdmFsdWUpOworICAgIHZvaWQgcmVtb3ZlKFBhc3NSZWZQdHI8SURC
S2V5PiBrZXkpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBUcmVlTm9kZSB7CisgICAgICAgIFJl
ZlB0cjxWYWx1ZVR5cGU+IHZhbHVlOworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXk7CisKKyAg
ICAgICAgVHJlZU5vZGUqIGxlc3M7CisgICAgICAgIFRyZWVOb2RlKiBncmVhdGVyOworICAgICAg
ICBpbnQgYmFsYW5jZUZhY3RvcjsKKyAgICB9OworCisgICAgc3RydWN0IEFWTFRyZWVBYnN0cmFj
dG9yIHsKKyAgICAgICAgdHlwZWRlZiBUcmVlTm9kZSogaGFuZGxlOworICAgICAgICB0eXBlZGVm
IHNpemVfdCBzaXplOworICAgICAgICB0eXBlZGVmIElEQktleSoga2V5OworCisgICAgICAgIGhh
bmRsZSBnZXRfbGVzcyhoYW5kbGUgaCkgeyByZXR1cm4gaC0+bGVzczsgfQorICAgICAgICB2b2lk
IHNldF9sZXNzKGhhbmRsZSBoLCBoYW5kbGUgbGgpIHsgaC0+bGVzcyA9IGxoOyB9CisgICAgICAg
IGhhbmRsZSBnZXRfZ3JlYXRlcihoYW5kbGUgaCkgeyByZXR1cm4gaC0+Z3JlYXRlcjsgfQorICAg
ICAgICB2b2lkIHNldF9ncmVhdGVyKGhhbmRsZSBoLCBoYW5kbGUgZ2gpIHsgaC0+Z3JlYXRlciA9
IGdoOyB9CisgICAgICAgIGludCBnZXRfYmFsYW5jZV9mYWN0b3IoaGFuZGxlIGgpIHsgcmV0dXJu
IGgtPmJhbGFuY2VGYWN0b3I7IH0KKyAgICAgICAgdm9pZCBzZXRfYmFsYW5jZV9mYWN0b3IoaGFu
ZGxlIGgsIGludCBiZikgeyBoLT5iYWxhbmNlRmFjdG9yID0gYmY7IH0KKworICAgICAgICBzdGF0
aWMgaGFuZGxlIG51bGwoKSB7IHJldHVybiAwOyB9CisKKyAgICAgICAgaW50IGNvbXBhcmVfa2V5
X2tleShrZXkgdmEsIGtleSB2Yik7CisgICAgICAgIGludCBjb21wYXJlX2tleV9ub2RlKGtleSBr
LCBoYW5kbGUgaCkgeyByZXR1cm4gY29tcGFyZV9rZXlfa2V5KGssIGgtPmtleS5nZXQoKSk7IH0K
KyAgICAgICAgaW50IGNvbXBhcmVfbm9kZV9ub2RlKGhhbmRsZSBoMSwgaGFuZGxlIGgyKSB7IHJl
dHVybiBjb21wYXJlX2tleV9rZXkoaDEtPmtleS5nZXQoKSwgaDItPmtleS5nZXQoKSk7IH0KKyAg
ICB9OworCisgICAgSURCS2V5VHJlZSgpOworCisgICAgdHlwZWRlZiBXVEY6OkFWTFRyZWU8QVZM
VHJlZUFic3RyYWN0b3I+IFRyZWVUeXBlOworICAgIFRyZWVUeXBlIG1fdHJlZTsKK307CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGU+CitJREJLZXlUcmVlPFZhbHVlVHlwZT46OklEQktl
eVRyZWUoKQoreworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlPgorSURCS2V5VHJl
ZTxWYWx1ZVR5cGU+Ojp+SURCS2V5VHJlZSgpCit7CisgICAgdHlwZW5hbWUgVHJlZVR5cGU6Okl0
ZXJhdG9yIGl0ZXI7CisgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KG1fdHJlZSk7CisgICAgZm9y
ICg7ICppdGVyOyArK2l0ZXIpCisgICAgICAgIGRlbGV0ZSAqaXRlcjsKKyAgICBtX3RyZWUucHVy
Z2UoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZT4KK2ludCBJREJLZXlUcmVl
PFZhbHVlVHlwZT46OkFWTFRyZWVBYnN0cmFjdG9yOjpjb21wYXJlX2tleV9rZXkoa2V5IHZhLCBr
ZXkgdmIpCit7CisgICAgaWYgKHZhLT50eXBlKCkgIT0gdmItPnR5cGUoKSkKKyAgICAgICAgcmV0
dXJuIHZiLT50eXBlKCkgLSB2YS0+dHlwZSgpOworCisgICAgc3dpdGNoICh2YS0+dHlwZSgpKSB7
CisgICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNl
IElEQktleTo6TnVtYmVyVHlwZToKKyAgICAgICAgcmV0dXJuIHZiLT5udW1iZXIoKSAtIHZhLT5u
dW1iZXIoKTsKKyAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIGNv
ZGVQb2ludENvbXBhcmUodmEtPnN0cmluZygpLCB2Yi0+c3RyaW5nKCkpOworICAgIC8vIEZJWE1F
OiBIYW5kbGUgZGF0ZXMuICBPaCwgYW5kIHRlc3QgdGhpcyB0aG9yb3VnaGx5LgorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGU+CitQYXNzUmVmUHRyPFZhbHVl
VHlwZT4gSURCS2V5VHJlZTxWYWx1ZVR5cGU+OjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtl
eSkKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CisgICAgVHJlZU5vZGUqIG5v
ZGUgPSBtX3RyZWUuc2VhcmNoKGtleS5nZXQoKSk7CisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbm9kZS0+dmFsdWU7Cit9CisKKwordGVtcGxhdGUgPHR5cGVu
YW1lIFZhbHVlVHlwZT4KK3ZvaWQgSURCS2V5VHJlZTxWYWx1ZVR5cGU+OjpwdXQoUGFzc1JlZlB0
cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxWYWx1ZVR5cGU+IHZhbHVlKQoreworICAgIFJl
ZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBUcmVlTm9kZSogbm9kZSA9IG1fdHJlZS5z
ZWFyY2goa2V5LmdldCgpKTsKKyAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgbm9kZSA9IG5ldyBU
cmVlTm9kZSgpOworICAgICAgICBub2RlLT5rZXkgPSBrZXkucmVsZWFzZSgpOworICAgICAgICBt
X3RyZWUuaW5zZXJ0KG5vZGUpOworICAgIH0KKyAgICBub2RlLT52YWx1ZSA9IHZhbHVlOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlPgordm9pZCBJREJLZXlUcmVlPFZhbHVlVHlw
ZT46OnJlbW92ZShQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5KQoreworICAgIFJlZlB0cjxJREJL
ZXk+IGtleSA9IHBycEtleTsKKyAgICBUcmVlTm9kZSogbm9kZSA9IG1fdHJlZS5yZW1vdmUoa2V5
LmdldCgpKTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAgZGVsZXRlIG5vZGU7Cit9CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURCS2V5VHJl
ZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60207</attachid>
            <date>2010-07-01 00:18:32 -0700</date>
            <delta_ts>2010-07-02 01:51:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41252-20100701171828.patch</filename>
            <type>text/plain</type>
            <size>48161</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA5OTk1NGE1Zjc0MTMyZjM4OWFlMzFlMzAwMzExODRhYTA2NjgxYjEyLi40
NjM5N2I1YmExMTg1ODdiNDRiOGRjZTU3NzJmNmViNmJmYzBjOWEzIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTAtMDYtMjYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Vw
cG9ydCBmb3Iga2V5cyBhbmQgaW4tbWVtb3J5IHN0b3JhZ2UgZm9yIEluZGV4ZWREQgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEyNTIKKworICAgICAg
ICBTZXQgdGhlIHJvbGUgdG8gUHJpdmF0ZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTAtMDYtMjUgIEplZHJ6ZWogTm93YWNraSAg
PGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24g
SGF1c21hbm4uCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxOGQ2YjgzODYwYzgxNzA1MGYxMGU4NDM3ZDVi
ZDA1MmI0NzczNmQ2Li40NWQ5NzY0MTdjMDk1NjEwN2Y3YWIwYTc2YzU2ZjdhMjRlNzgzNzU1IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTM0OSw3ICszNDksNyBAQAogCQlCQzE4QzNFNzBFMTZGNUNEMDBC
MzQ0NjAgLyogQXJyYXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY2OTJBODRFMDI1NTU5N0QwMUZGNjBGNyAvKiBBcnJheVByb3RvdHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJD
MThDM0U5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBU0NJSUNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzhDNEY2OTBDQTA2QkM3MDBEOTMxMEEgLyog
QVNDSUlDVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUJDMThDM0VBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBBc3NlcnRpb25zLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUUyMTdCNzA4RTdFRUNDMDAy
M0U1RjYgLyogQXNzZXJ0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUJDMThDM0VCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBBVkxUcmVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUE1OTYzNzBERTNF
MUMzMDBDMTdFMzcgLyogQVZMVHJlZS5oICovOyB9OworCQlCQzE4QzNFQjBFMTZGNUNEMDBCMzQ0
NjAgLyogQVZMVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFBNTk2MzcwREUzRTFDMzAwQzE3RTM3IC8qIEFWTFRyZWUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzNFQzBFMTZGNUNEMDBC
MzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8qIEJvb2xlYW5PYmplY3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4
QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxs
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDMThDM0YwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb2xsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBODYyQUEwRDdFQkI3RDAwMUVDNkFBIC8q
IENvbGxhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggN2M2MzYxZTE1MmQyMTI4YWQwMWFkMGQ1MWZiOTEzZDZmYzc4NmU2Ny4uY2UxZTg3MGE3ZmQz
Mzc3NzllYzJhMWY0NmIxMDliOGU2Yjk3NTZlMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NiBAQAorMjAxMC0wNi0yNiAg
SmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdXBwb3J0IGZvciBrZXlzIGFuZCBpbi1tZW1v
cnkgc3RvcmFnZSBmb3IgSW5kZXhlZERCCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MTI1MgorCisgICAgICAgIEl0J2xsIHRha2Ugc29tZSB0aW1lIHRv
IGdldCBkYXRhIHBlcnNpc3RlbmNlIHdvcmtpbmcgZm9yIEluZGV4ZWREQiwKKyAgICAgICAgc28g
dW50aWwgdGhlbiwgd2UnbGwganVzdCBzdG9yZSBldmVyeXRoaW5nIGluIGFuIGluIG1lbW9yeSB0
cmVlLgorICAgICAgICBUaGUgdHJlZSB1c2VzIFdURjo6QVZMVHJlZSBhbmQgaXMgYSB0ZW1wbGF0
ZSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5CisgICAgICAgIG9iamVjdCBzdG9yZXMgKElEQktl
eSAtPiBTZXJpYWxpemVkU2NyaXB0VmFsdWUpIGFuZCBpbmRleGVzIChJREJLZXkgLT4KKyAgICAg
ICAgSURCS2V5KS4gIFRoaXMgY2xhc3Mgd2lsbCBiZSB1c2VkIGluIGEgc3Vic2VxdWVudCBwYXRj
aC4KKworICAgICAgICBBbHNvIGFkZCBhbiBJREJLZXkgdHlwZSB0aGF0IHJlcHJlc2VudHMgb25l
IG9mIHRoZXNlIGtleXMuICBXZSB1c2UgYQorICAgICAgICBjdXN0b20gdG9KUyBmdW5jdGlvbiBp
biBhIHdheSBzaW1pbGFyIHRvIElEQkFueSB0byBjb252ZXJ0IGZyb20gV2ViQ29yZQorICAgICAg
ICB0byBhIEpTIHZhbHVlLiAgRm9yIGNvbnZlcnRpbmcgdGhlIG90aGVyIHdheSwgd2UgaGF2ZSB0
byB0ZWFjaCB0aGUgY29kZQorICAgICAgICBnZW5lcmF0b3JzIHdoYXQgdG8gZG8gKHVuZm9ydHVu
YXRlbHkpLiAgVGhpcyBpcyBkb25lIGluIGEgd2F5IHNpbWlsYXIKKyAgICAgICAgdG8gc2VyaWFs
aXplZCBzY3JpcHQgdmFsdWUuICBVbmxpa2Ugc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUsIElEQktl
eSBpcworICAgICAgICBpbiBXZWJDb3JlIGFuZCBvbmx5IGEgaGVscGVyIGZ1bmN0aW9uIGlzIEpT
IGVuZ2luZSBzcGVjaWZpYy4KKworICAgICAgICBUaGlzIGNvZGUgaXMgbm90IGFjY2Vzc2FibGUg
ZnJvbSBsYXlvdXQgdGVzdHMuICAoV2lsbCBmaXggaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMjUwKSAgVGhlIGJpbmRpbmdzIHRlc3RzCisgICAg
ICAgIHNob3cgdXMgdGhhdCB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdzIGFyZSB3aGF0IHdlIGV4cGVj
dC4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9BVkxUcmVlLmg6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0lEQktleUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RP
Ymo6OmlkYktleSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE9iai5jcHA6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9rZXkpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmou
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbklkYktleSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmou
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tOgor
ICAgICAgICAoLVtET01UZXN0T2JqIGlkYktleTpdKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OmlkYktl
eUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogYmluZGluZ3Mvdjgv
SURCQmluZGluZ1V0aWxpdGllcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
SURCS2V5RnJvbVZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0
aWVzLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQktleUN1c3Rv
bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogc3RvcmFn
ZS9JREJDYWxsYmFja3MuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQktleS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpJREJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURC
S2V5Ojp+SURCS2V5KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQktleS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQktleTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXk6OnN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6Om51bWJlcik6CisgICAg
ICAgICogc3RvcmFnZS9JREJLZXkuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL0lEQktl
eVRyZWUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJLZXlUcmVlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5VHJlZTo6QVZMVHJlZUFic3RyYWN0b3I6OmdldF9sZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVRyZWU6OkFWTFRyZWVBYnN0cmFjdG9yOjpzZXRf
bGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6
Z2V0X2dyZWF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5VHJlZTo6QVZMVHJlZUFic3Ry
YWN0b3I6OnNldF9ncmVhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVRyZWU6OkFWTFRy
ZWVBYnN0cmFjdG9yOjpnZXRfYmFsYW5jZV9mYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
S2V5VHJlZTo6QVZMVHJlZUFic3RyYWN0b3I6OnNldF9iYWxhbmNlX2ZhY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6bnVsbCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29tcGFyZV9rZXlfbm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlUcmVlOjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29t
cGFyZV9ub2RlX25vZGUpOgorICAgICAgICAoV2ViQ29yZTo6OjpJREJLZXlUcmVlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ojo6fklEQktleVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6OjpBVkxUcmVl
QWJzdHJhY3Rvcjo6Y29tcGFyZV9rZXlfa2V5KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Z2V0KToK
KyAgICAgICAgKFdlYkNvcmU6Ojo6aW5zZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6cmVtb3Zl
KToKKwogMjAxMC0wNi0yNSAgRXZhbiBTdGFkZSAgPGVzdGFkZUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvQVZMVHJlZS5oIGIvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvQVZMVHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1MWI3ZjdjZTU0NThjMDFjMWEyNzM3NWU5NTMxZmVi
MTdhODcyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9BVkxUcmVlLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0FWTFRyZWVf
aAorI2RlZmluZSBXZWJDb3JlX0ZXRF9BVkxUcmVlX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9BVkxUcmVlLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhYTIzNzAxNjJkYjZiNmY1ODgxNzQyYzI3MjgxZjBlMTEw
MTI5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiSURCS2V5Lmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUoKTsKKyAgICBpZiAodmFsdWUuaXNJbnQzMigp
KQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodmFsdWUudG9JbnQzMihleGVjKSk7Cisg
ICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZSh1
c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGRhdGVzLgorICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wYTJmYjc5MDk3NzRkMTRlYjkzNjUwYmI2ZGFkOTJhMWQ0MDFkMmRjCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAg
LTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCQmluZGluZ1V0aWxpdGllc19oCisjZGVm
aW5lIElEQkJpbmRpbmdVdGlsaXRpZXNfaAorCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5OworCitQYXNzUmVmUHRyPElE
QktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
KTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAv
LyBJREJCaW5kaW5nVXRpbGl0aWVzX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJLZXlDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOThjOTMxNThhMTcxYWJmNGUzZmUyMjMwMjFkNmRjNTQ2MWI3NDI4NQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3Bw
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisjaW5jbHVkZSAiSlNJ
REJLZXkuaCIKKworI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJ
REJLZXkuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIElEQktl
eSoga2V5KQoreworICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisKKyAg
ICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CisgICAgY2FzZSBJREJLZXk6Ok51bGxUeXBlOgorICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6CisgICAg
ICAgIHJldHVybiBqc051bWJlcihleGVjLCBrZXktPm51bWJlcigpKTsKKyAgICBjYXNlIElEQktl
eTo6U3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIGtleS0+c3RyaW5n
KCkpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZGF0ZXMuCisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggNGUyZTkxMTk0
NDdmM2IwNGUwOTM1MDk3ZDk2MWVmYzZiZTA5ZWRiNC4uOWYxNGIyNmRhYzljNTIxYzRlM2UzM2Fj
MzY2ZTJhMzMyNTEzOGQ1MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCkBAIC0yMjU5LDYgKzIyNTksNyBAQCBteSAlbmF0aXZlVHlwZSA9ICgKICAgICAi
RE9NT2JqZWN0IiA9PiAiU2NyaXB0VmFsdWUiLAogICAgICJOb2RlRmlsdGVyIiA9PiAiUmVmUHRy
PE5vZGVGaWx0ZXI+IiwKICAgICAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiA9PiAiUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4iLAorICAgICJJREJLZXkiID0+ICJSZWZQdHI8SURCS2V5PiIs
CiAgICAgIlNWR0FuZ2xlIiA9PiAiU1ZHQW5nbGUiLAogICAgICJTVkdMZW5ndGgiID0+ICJTVkdM
ZW5ndGgiLAogICAgICJTVkdNYXRyaXgiID0+ICJBZmZpbmVUcmFuc2Zvcm0iLApAQCAtMjMyNiw2
ICsyMzI3LDEyIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgcmV0dXJuICJTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCAkdmFsdWUpIjsKICAgICB9CiAKKyAgICBpZiAo
JHR5cGUgZXEgIklEQktleSIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siSURCQmluZGluZ1V0
aWxpdGllcy5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJJREJLZXkuaCJ9ID0gMTsK
KyAgICAgICAgcmV0dXJuICJjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgJHZhbHVlKSI7Cisg
ICAgfQorCiAgICAgJGltcGxJbmNsdWRlc3siRmxvYXRQb2ludC5oIn0gPSAxIGlmICR0eXBlIGVx
ICJTVkdQb2ludCI7CiAgICAgJGltcGxJbmNsdWRlc3siRmxvYXRSZWN0LmgifSA9IDEgaWYgJHR5
cGUgZXEgIlNWR1JlY3QiOwogICAgICRpbXBsSW5jbHVkZXN7IkhUTUxPcHRpb25FbGVtZW50Lmgi
fSA9IDEgaWYgJHR5cGUgZXEgIkhUTUxPcHRpb25FbGVtZW50IjsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IGUyNDljYWFhM2RhYWQzOWZiNTdmZGQw
NjE3N2QzOTVmNzJiNTE3YTEuLjFhZTBmOGZjMmQ3MTZlZmMyYzBjN2EzOWMyYWJmOWRlZjE4MzYx
MTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAt
Mjc0OCw2ICsyNzQ4LDggQEAgc3ViIEdldE5hdGl2ZVR5cGUKIAogICAgIHJldHVybiAiUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4iIGlmICR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUiOwogCisgICAgcmV0dXJuICJSZWZQdHI8SURCS2V5PiIgaWYgJHR5cGUgZXEgIklEQktleSI7
CisKICAgICAjIG5lY2Vzc2FyeSBhcyByZXNvbHZlcnMgY291bGQgYmUgY29uc3RydWN0ZWQgb24g
Zmx5LgogICAgIHJldHVybiAiUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4iIGlmICR0eXBlIGVxICJY
UGF0aE5TUmVzb2x2ZXIiOwogCkBAIC0yODI5LDYgKzI4MzEsMTIgQEAgc3ViIEpTVmFsdWVUb05h
dGl2ZQogCiAgICAgZGllICJVbmV4cGVjdGVkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgaWYgJHR5
cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSI7CiAKKyAgICBpZiAoJHR5cGUgZXEgIklEQktl
eSIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siSURCQmluZGluZ1V0aWxpdGllcy5oIn0gPSAx
OworICAgICAgICAkaW1wbEluY2x1ZGVzeyJJREJLZXkuaCJ9ID0gMTsKKyAgICAgICAgcmV0dXJu
ICJjcmVhdGVJREJLZXlGcm9tVmFsdWUoJHZhbHVlKSI7CisgICAgfQorCiAgICAgaWYgKCR0eXBl
IGVxICJET01PYmplY3QiKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlNjcmlwdFZhbHVlLmgi
fSA9IDE7CiAgICAgICAgIHJldHVybiAiU2NyaXB0VmFsdWUoJHZhbHVlKSI7CkBAIC0yOTg1LDcg
KzI5OTMsOCBAQCBteSAlbm9uX3dyYXBwZXJfdHlwZXMgPSAoCiAgICAgJ0RPTU9iamVjdCcgPT4g
MSwKICAgICAnRXZlbnRUYXJnZXQnID0+IDEsCiAgICAgJ05vZGVGaWx0ZXInID0+IDEsCi0gICAg
J0V2ZW50TGlzdGVuZXInID0+IDEKKyAgICAnRXZlbnRMaXN0ZW5lcicgPT4gMSwKKyAgICAnSURC
S2V5JyA9PiAxCiApOwogCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0T2JqLmNwcAppbmRleCA2NWJjOWYzNmVlMzZlMjQyNWU0NjRlNzBhMGQ2
MGRiZjUzNDlkM2E1Li5lZThhZmNmYzYwZmEwNTA5OTMyM2JhNTYwOTZiOTRlN2NlZDFlNGQwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9i
ai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RP
YmouY3BwCkBAIC0yMyw5ICsyMywxMSBAQAogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRlc3RP
YmouaCIKKyNpbmNsdWRlICJXZWJET01JREJLZXkuaCIKICNpbmNsdWRlICJXZWJET01TdHJpbmcu
aCIKICNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2ViTmF0aXZl
RXZlbnRMaXN0ZW5lci5oIgpAQCAtNTQ5LDYgKzU1MSwxNCBAQCB2b2lkIFdlYkRPTVRlc3RPYmo6
OnNlcmlhbGl6ZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmIHNlcmlhbGl6ZWRBcmcpCiAgICAg
aW1wbCgpLT5zZXJpYWxpemVkVmFsdWUoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoV2ViQ29yZTo6U3RyaW5nKHNlcmlhbGl6ZWRBcmcpKSk7CiB9CiAKK3ZvaWQgV2ViRE9N
VGVzdE9iajo6aWRiS2V5KGNvbnN0IFdlYkRPTUlEQktleSYga2V5KQoreworICAgIGlmICghaW1w
bCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPmlkYktleSh0b1dlYkNvcmUoa2V5
KSk7Cit9CisKIHZvaWQgV2ViRE9NVGVzdE9iajo6bWV0aG9kV2l0aEV4Y2VwdGlvbigpCiB7CiAg
ICAgaWYgKCFpbXBsKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQ
L1dlYkRPTVRlc3RPYmouaAppbmRleCAzM2JjN2ZiYTU5YjIzYmYwYjM5MDczMDYyMDM4YjU1NWU4
MjMwZjU3Li5jZGQ0N2VkMDIzMjYyNTQ5ZWRlZmQwNDE3NjM1YmQ4YTVjOWNjYmI0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKQEAg
LTMxLDYgKzMxLDcgQEAgY2xhc3MgVGVzdE9iajsKIH07CiAKIGNsYXNzIFdlYkRPTUV2ZW50TGlz
dGVuZXI7CitjbGFzcyBXZWJET01JREJLZXk7CiBjbGFzcyBXZWJET01TdHJpbmc7CiBjbGFzcyBX
ZWJET01UZXN0T2JqOwogCkBAIC0xMDEsNiArMTAyLDcgQEAgcHVibGljOgogICAgIFdlYkRPTVRl
c3RPYmogbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyhjb25zdCBXZWJET01TdHJpbmcmIHN0ckFy
ZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKICAgICBXZWJET01UZXN0T2JqIG1ldGhv
ZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcs
IGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CiAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWUo
Y29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKKyAgICB2b2lkIGlkYktleShjb25z
dCBXZWJET01JREJLZXkmIGtleSk7CiAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCk7CiAg
ICAgdm9pZCBjdXN0b21NZXRob2QoKTsKICAgICB2b2lkIGN1c3RvbU1ldGhvZFdpdGhBcmdzKGlu
dCBpbnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2Jq
JiBvYmpBcmcpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKaW5kZXggZWZiMzYyYmJhM2VlZGQzZjNhMWE4
YjRlN2I0ZTVlNjcwMzI3MDA2OS4uMTg0YjI4NmFlOTJlMDdlYTQ1OGMxMTE2NmZkY2RlOTU4NzIw
NmQ5NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAi
VGVzdE9iai5oIgogI2luY2x1ZGUgIldlYktpdERPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJnb2Jq
ZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NSURC
S2V5LmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUlEQktleVByaXZhdGUuaCIKICNpbmNs
dWRlICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAi
d2Via2l0L1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVByaXZhdGUuaCIKICNpbmNsdWRl
ICJ3ZWJraXQvV2ViS2l0RE9NVGVzdE9iai5oIgpAQCAtMTY2LDYgKzE2OCwxNyBAQCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2Vi
S2l0RE9NU2VyaWFsaXplZAogfQogCiB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9rZXko
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NSURCS2V5KiAga2V5KQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChrZXkpOworICAgIFdlYkNvcmU6
OklEQktleSAqIGNvbnZlcnRlZF9rZXkgPSBXZWJLaXQ6OmNvcmUoa2V5KTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKGNvbnZlcnRlZF9rZXkpOworICAgIGl0ZW0tPmlkYktleShjb252ZXJ0ZWRfa2V5
KTsKK30KKwordm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb24o
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCiB7CiAgICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKaW5kZXggOGRjZDhjMzFlMzM2M2JlNzI0OGEz
NzViNTk3MmE1MTY5NzAwYzM5Ny4uNjFjM2Q5NWJkN2I2ZmE5OTA2MzNhOTVkNWY0ZjMxYjZkNjgw
YzBmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0T2JqLmgKQEAgLTc0LDYgKzc0LDkgQEAgV0VCS0lUX0FQSSB2b2lk
CiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiAgc2VyaWFsaXplZF9hcmcpOwog
CiBXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBXZWJLaXRET01JREJLZXkqICBrZXkpOworCitXRUJLSVRfQVBJIHZvaWQK
IHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKTsKIAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCAzNjA3ODJkODY4ZjVhZGIwMTFlYzczMzgw
NmY0MjBhMTAzYWEyNWY1Li4zMWEzZjcwYWNlMjAyYmQ4ZTM3YWY3MGVhMGNhYzMzMDNjOWU5YjE3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
QEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKIAogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJ
REJLZXkuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJKU1Rlc3RP
YmouaCIKICNpbmNsdWRlICJKU2xvZy5oIgpAQCAtMTQ0LDcgKzE0Niw3IEBAIGJvb2wgSlNUZXN0
T2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50CiAjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCiAjZW5kaWYK
IAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFs
dWVzWzMwXSA9CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBl
VGFibGVWYWx1ZXNbMzFdID0KIHsKICAgICB7ICJ2b2lkTWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1
bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZCksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigw
KSB9LAogICAgIHsgInZvaWRNZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyksIChpbnRwdHJfdCkzIFRIVU5LX0dFTkVSQVRPUigw
KSB9LApAQCAtMTU1LDYgKzE1Nyw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1szMF0gPQogICAgIHsgIm1ldGhvZFRoYXRSZXF1aXJl
c0FsbEFyZ3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxO
YXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWly
ZXNBbGxBcmdzKSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0
aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MpLCAoaW50cHRyX3QpMiBU
SFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJzZXJpYWxpemVkVmFsdWUiLCBEb250RGVsZXRl
IHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUpLCAoaW50cHRyX3QpMSBUSFVOS19H
RU5FUkFUT1IoMCkgfSwKKyAgICB7ICJpZGJLZXkiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChp
bnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25JZGJLZXkpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJt
ZXRob2RXaXRoRXhjZXB0aW9uIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEV4Y2VwdGlvbiksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsg
ImN1c3RvbU1ldGhvZCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19j
YXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhv
ZCksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImN1c3RvbU1ldGhv
ZFdpdGhBcmdzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0
aEFyZ3MpLCAoaW50cHRyX3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTE3OSw3ICsxODIs
NyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVW
YWx1ZXNbMzBdID0KIH07CiAKICN1bmRlZiBUSFVOS19HRU5FUkFUT1IKLXN0YXRpYyBKU0NfQ09O
U1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgNjksIDYz
LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9Oworc3RhdGljIEpTQ19DT05TVF9I
QVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAxMzAsIDEyNywg
SlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rl
c3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmpQcm90b3R5cGUiLCAwLCAmSlNUZXN0
T2JqUHJvdG90eXBlVGFibGUsIDAgfTsKIAogSlNPYmplY3QqIEpTVGVzdE9ialByb3RvdHlwZTo6
c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC03
OTcsNiArODAwLDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoRXhlY1N0YXRlCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleShFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgaWYg
KCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVzdE9iaiog
aW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgUmVm
UHRyPElEQktleT4ga2V5ID0gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKKworICAgIGltcC0+aWRiS2V5KGtleSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAppbmRleCAzYjIx
Yzg1NjAxYzBhMzdiN2NkZmZmMWVlNWZhMzYxNDEyOGE0NjcwLi40ZGVhM2QyM2U5ZGViMWI0Y2E0
OGZmZjc3YmJjMTZlYzk4MjE2YmQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouaApAQCAtOTUsNiArOTUsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJncyhK
UwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2Vy
aWFsaXplZFZhbHVlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JZGJLZXkoSlNDOjpFeGVjU3RhdGUq
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1l
dGhvZChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MoSlNDOjpFeGVj
U3RhdGUqKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
T2JqLmgKaW5kZXggZDg4NjJkYTE1ZWFjNGU4MWEyZWIxMWFiZWEzYTA1ZDMzZmIyYzFiYi4uZDM4
ZGVjZTNlZGY0ODJmNTUyMjYyYjdlM2QyNjMwYmY0YTljNDg2ZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVT
VAogCitAY2xhc3MgRE9NSURCS2V5OwogQGNsYXNzIERPTVRlc3RPYmo7CiBAY2xhc3MgRE9NbG9n
OwogQGNsYXNzIE5TU3RyaW5nOwpAQCAtOTksNiArMTAwLDcgQEAKIC0gKERPTVRlc3RPYmogKilt
ZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRl
c3RPYmogKilvYmpBcmc7CiAtIChET01UZXN0T2JqICopbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJn
c0FuZFRocm93czooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJn
OwogLSAodm9pZClzZXJpYWxpemVkVmFsdWU6KE5TU3RyaW5nICopc2VyaWFsaXplZEFyZzsKKy0g
KHZvaWQpaWRiS2V5OihET01JREJLZXkgKilrZXk7CiAtICh2b2lkKW1ldGhvZFdpdGhFeGNlcHRp
b247CiAtICh2b2lkKWN1c3RvbU1ldGhvZDsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kV2l0aEFyZ3M6
KGludClpbnRBcmcgc3RyQXJnOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmog
KilvYmpBcmc7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RPYmoubW0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPYmoubW0KaW5kZXggOWJiYmYxNDRiN2VlNjlmYjk2YTQwZjQxNDlkODA1OTRjZWY3ZGZiOC4u
ZDcxY2IwNTIyMWE4NTMwMDk3YzA4ODRiYzkzNTIzNmJkODY5NDQ2MSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQpAQCAtMzMsNiArMzMs
NyBAQAogI2ltcG9ydCAiRE9NQ1NTUnVsZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01DU1NWYWx1
ZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCisjaW1wb3J0ICJET01J
REJLZXlJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCiAjaW1wb3J0ICJE
T01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVRlc3RPYmpJbnRlcm5hbC5oIgpA
QCAtNDAsNiArNDEsNyBAQAogI2ltcG9ydCAiRXZlbnRMaXN0ZW5lci5oIgogI2ltcG9ydCAiRXhj
ZXB0aW9uSGFuZGxlcnMuaCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgorI2ltcG9ydCAiSURCS2V5
LmgiCiAjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbXBvcnQgIktVUkwuaCIK
ICNpbXBvcnQgIk9iakNFdmVudExpc3RlbmVyLmgiCkBAIC00NTEsNiArNDUzLDEyIEBACiAgICAg
SU1QTC0+c2VyaWFsaXplZFZhbHVlKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKFdlYkNvcmU6OlN0cmluZyhzZXJpYWxpemVkQXJnKSkpOwogfQogCistICh2b2lkKWlkYktl
eTooRE9NSURCS2V5ICopa2V5Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIElNUEwtPmlkYktleShjb3JlKGtleSkpOworfQorCiAtICh2b2lkKW1ldGhv
ZFdpdGhFeGNlcHRpb24KIHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlk
bCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCmluZGV4IGVmNGRi
MTA2ZjA3NDY2Zjg0MjU5NDE0ZDg5ZDlkMDQ5ZjY5ODQyMjIuLjM0NjcxMTY3YTU0OGQ3ZjM5NmI1
NjFmM2Q0MDkxZmM5OWQ5MzMzN2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPYmouaWRsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RPYmouaWRsCkBAIC02Myw2ICs2Myw3IEBAIG1vZHVsZSB0ZXN0IHsKICAgICAgICAgICAgIHJh
aXNlcyhET01FeGNlcHRpb24pOwogCiAgICAgICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGluIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJnKTsKKyAgICAgICAgdm9pZCBpZGJLZXko
aW4gSURCS2V5IGtleSk7CiAKICAgICAgICAgLy8gRXhjZXB0aW9ucwogICAgICAgICB2b2lkIG1l
dGhvZFdpdGhFeGNlcHRpb24oKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDRhNTRhZTM0MDk1Mzc0
MDQ5YmNhMWUyMTk1NmFjOGQzOGRlYjMxNmYuLjFhZDhhNDE2YjgzY2U5YTk3Yzk4NzRmZTQyMTAz
YWU0Y2YzNTc0ZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcApAQCAtMjMsNiArMjMsOCBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCkBAIC01NzMsNiArNTc1LDE1IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gc2VyaWFsaXplZFZhbHVlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
ICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gaWRiS2V5Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
K3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmlkYktleSIpOworICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgUmVmUHRyPElEQktl
eT4ga2V5ID0gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGFyZ3NbMF0pOworICAgIGltcC0+aWRiS2V5
KGtleSk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhFeGNlcHRpb25DYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9k
V2l0aEV4Y2VwdGlvbiIpOwpAQCAtOTQ3LDYgKzk1OCw3IEBAIHN0YXRpYyBjb25zdCBCYXRjaGVk
Q2FsbGJhY2sgVGVzdE9iakNhbGxiYWNrc1tdID0gewogICAgIHsiaW50TWV0aG9kIiwgVGVzdE9i
akludGVybmFsOjppbnRNZXRob2RDYWxsYmFja30sCiAgICAgeyJvYmpNZXRob2QiLCBUZXN0T2Jq
SW50ZXJuYWw6Om9iak1ldGhvZENhbGxiYWNrfSwKICAgICB7InNlcmlhbGl6ZWRWYWx1ZSIsIFRl
c3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlQ2FsbGJhY2t9LAorICAgIHsiaWRiS2V5Iiwg
VGVzdE9iakludGVybmFsOjppZGJLZXlDYWxsYmFja30sCiAgICAgeyJtZXRob2RXaXRoRXhjZXB0
aW9uIiwgVGVzdE9iakludGVybmFsOjptZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGJhY2t9LAogICAg
IHsiY3VzdG9tTWV0aG9kIiwgVjhUZXN0T2JqOjpjdXN0b21NZXRob2RDYWxsYmFja30sCiAgICAg
eyJjdXN0b21NZXRob2RXaXRoQXJncyIsIFY4VGVzdE9iajo6Y3VzdG9tTWV0aG9kV2l0aEFyZ3ND
YWxsYmFja30sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yZjk3N2UwZWQzYTkyMzdlNzVkYjRhYWVjMzJlMjE3MTE5MTdkMzk5Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKworI2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUg
IlY4QmluZGluZy5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlKCk7CisgICAgaWYgKHZhbHVlLT5Jc0ludDMy
KCkpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZSh2YWx1ZS0+SW50MzJWYWx1ZSgpKTsK
KyAgICBpZiAodmFsdWUtPklzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0
ZSh2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHZhbHVlKSk7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBkYXRlcy4KKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGll
cy5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDRlNWMyOTBhZDk0NWU4NDc5NzYwMzI0M2Y1NTUyYzkzODQ1Nzk1MQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkJpbmRpbmdVdGlsaXRpZXNfaAorI2RlZmluZSBJ
REJCaW5kaW5nVXRpbGl0aWVzX2gKKworI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIElEQktleTsKKworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlE
QktleUZyb21WYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQkJpbmRpbmdVdGlsaXRpZXNf
aApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJLZXlDdXN0b20u
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJLZXlDdXN0b20uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjJhZmE1NWY3M2NiYWM4OTlmMjI5YjIxYzlhNTUxM2ViMzFiYTNmNGQKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQktleUN1c3RvbS5jcHAK
QEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpbmNsdWRlICJWOElE
QkFueS5oIgorCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklE
QktleS5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KElEQktleSoga2V5KQoreworICAgIGlmICgha2V5
KQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKworICAgIHN3aXRjaCAoa2V5LT50eXBlKCkp
IHsKKyAgICBjYXNlIElEQktleTo6TnVsbFR5cGU6CisgICAgICAgIHJldHVybiB2ODo6TnVsbCgp
OworICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgorICAgICAgICByZXR1cm4gdjg6OkludGVn
ZXI6Ok5ldyhrZXktPm51bWJlcigpKTsKKyAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKKyAg
ICAgICAgcmV0dXJuIHY4U3RyaW5nKGtleS0+c3RyaW5nKCkpOworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgZGF0ZXMuCisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCQ2FsbGJhY2tzLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCQ2FsbGJhY2tzLmgKaW5kZXgg
YzkwYWNjNThmOWYzYzcyY2QxZmE3ZmY0OTQzYjE1NmI1Y2I0YmViOC4uMzdmZGM0NmUwOTljZWM2
NTMwOTRmYTEyNjk4ODNlM2E2OThmMDk5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lE
QkNhbGxiYWNrcy5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFja3MuaApAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VFcnJvci5oIgogI2luY2x1ZGUgIklEQkluZGV4LmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCiAj
aW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNDgsNiArNDksNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcygpID0gMDsgLy8gRm9yICJudWxsIi4KICAg
ICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+KSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkluZGV4PikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
KSA9IDA7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAgYi9XZWJD
b3JlL3N0b3JhZ2UvSURCS2V5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZTJiOTIzYWI4YzJiYjc5NjdhYTdl
M2UwOTg4MzkzZGQ5NGFhNDc2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lE
QktleS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJREJLZXkuaCIKKworI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SURCS2V5OjpJREJLZXkoKQorICAgIDogbV90eXBlKE51bGxUeXBlKQoreworfQorCitJREJLZXk6
OklEQktleShpbnQzMl90IG51bWJlcikKKyAgICA6IG1fdHlwZShOdW1iZXJUeXBlKQorICAgICwg
bV9udW1iZXIobnVtYmVyKQoreworfQorCitJREJLZXk6OklEQktleShjb25zdCBTdHJpbmcmIHN0
cmluZykKKyAgICA6IG1fdHlwZShTdHJpbmdUeXBlKQorICAgICwgbV9zdHJpbmcoc3RyaW5nKQor
eworfQorCitJREJLZXk6On5JREJLZXkoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oIGIvV2ViQ29y
ZS9zdG9yYWdlL0lEQktleS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzYjEyY2UwNTYzOTYzNDdkZDExZWUwOWRl
M2YyMGRkZmViMGJjNTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5
LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCS2V5X2gKKyNkZWZpbmUgSURC
S2V5X2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIEZJWE1FOiBBZGQgZGF0ZXMuCitjbGFzcyBJREJLZXkgOiBwdWJsaWMgUmVmQ291
bnRlZDxJREJLZXk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNy
ZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQktleSgpKTsKKyAg
ICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGUoaW50MzJfdCBudW1iZXIp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQktleShudW1iZXIpKTsKKyAg
ICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQktleShzdHJpbmcp
KTsKKyAgICB9CisgICAgfklEQktleSgpOworCisgICAgLy8gSW4gb3JkZXIgb2YgdGhlIGxlYXN0
IHRvIHRoZSBtb3N0IHByZWNpZGVudCBpbiB0ZXJtcyBvZiBzb3J0IG9yZGVyLgorICAgIGVudW0g
VHlwZSB7CisgICAgICAgIE51bGxUeXBlID0gMCwKKyAgICAgICAgU3RyaW5nVHlwZSwKKyAgICAg
ICAgTnVtYmVyVHlwZQorICAgIH07CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KKworICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3R5cGUgPT0gU3RyaW5nVHlwZSk7CisgICAgICAgIHJldHVybiBtX3N0cmlu
ZzsKKyAgICB9CisKKyAgICBpbnQzMl90IG51bWJlcigpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQobV90eXBlID09IE51bWJlclR5cGUpOworICAgICAgICByZXR1cm4gbV9udW1iZXI7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIElEQktleSgpOworICAgIGV4cGxpY2l0IElEQktleShpbnQz
Ml90KTsKKyAgICBleHBsaWNpdCBJREJLZXkoY29uc3QgU3RyaW5nJik7CisKKyAgICBUeXBlIG1f
dHlwZTsKKyAgICBTdHJpbmcgbV9zdHJpbmc7CisgICAgaW50MzJfdCBtX251bWJlcjsKK307CisK
K30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjZW5kaWYgLy8gSURC
S2V5X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaWRsIGIvV2ViQ29yZS9z
dG9yYWdlL0lEQktleS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQ5OTVmMzNlY2JjMGRjMjNhMjg2ZmFjNTJk
MDYzYjY1NTg5NGFhYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXku
aWRsCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRl
cmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgICAgICBD
dXN0b21Ub0pTCisgICAgXSBJREJLZXkgeworICAgICAgICAvLyBUaGlzIHNwYWNlIGlzIGludGVu
dGlvbmFsbHkgbGVmdCBibGFuay4KKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9y
YWdlL0lEQktleVRyZWUuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlUcmVlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGUzOWU3Nzg2N2YxOGM0YmE2MGJhMDI5MzE3MGYyYWU3ODY2Y2FiYgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlUcmVlLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIElEQktleVRyZWVfaAorI2RlZmluZSBJREJLZXlUcmVlX2gKKworI2luY2x1
ZGUgIklEQktleS5oIgorI2luY2x1ZGUgPHd0Zi9BVkxUcmVlLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZT4KK2NsYXNzIElEQktleVRyZWUg
OiBwdWJsaWMgUmVmQ291bnRlZDxJREJLZXlUcmVlPFZhbHVlVHlwZT4gPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5VHJlZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCS2V5VHJlZSgpKTsKKyAgICB9CisgICAgfklEQktleVRy
ZWUoKTsKKworICAgIFBhc3NSZWZQdHI8VmFsdWVUeXBlPiBnZXQoUGFzc1JlZlB0cjxJREJLZXk+
IGtleSk7CisgICAgdm9pZCBwdXQoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxW
YWx1ZVR5cGU+IHZhbHVlKTsKKyAgICB2b2lkIHJlbW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5
KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgVHJlZU5vZGUgeworICAgICAgICBSZWZQdHI8VmFs
dWVUeXBlPiB2YWx1ZTsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5OworCisgICAgICAgIFRy
ZWVOb2RlKiBsZXNzOworICAgICAgICBUcmVlTm9kZSogZ3JlYXRlcjsKKyAgICAgICAgaW50IGJh
bGFuY2VGYWN0b3I7CisgICAgfTsKKworICAgIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvciB7Cisg
ICAgICAgIHR5cGVkZWYgVHJlZU5vZGUqIGhhbmRsZTsKKyAgICAgICAgdHlwZWRlZiBzaXplX3Qg
c2l6ZTsKKyAgICAgICAgdHlwZWRlZiBJREJLZXkqIGtleTsKKworICAgICAgICBoYW5kbGUgZ2V0
X2xlc3MoaGFuZGxlIGgpIHsgcmV0dXJuIGgtPmxlc3M7IH0KKyAgICAgICAgdm9pZCBzZXRfbGVz
cyhoYW5kbGUgaCwgaGFuZGxlIGxoKSB7IGgtPmxlc3MgPSBsaDsgfQorICAgICAgICBoYW5kbGUg
Z2V0X2dyZWF0ZXIoaGFuZGxlIGgpIHsgcmV0dXJuIGgtPmdyZWF0ZXI7IH0KKyAgICAgICAgdm9p
ZCBzZXRfZ3JlYXRlcihoYW5kbGUgaCwgaGFuZGxlIGdoKSB7IGgtPmdyZWF0ZXIgPSBnaDsgfQor
ICAgICAgICBpbnQgZ2V0X2JhbGFuY2VfZmFjdG9yKGhhbmRsZSBoKSB7IHJldHVybiBoLT5iYWxh
bmNlRmFjdG9yOyB9CisgICAgICAgIHZvaWQgc2V0X2JhbGFuY2VfZmFjdG9yKGhhbmRsZSBoLCBp
bnQgYmYpIHsgaC0+YmFsYW5jZUZhY3RvciA9IGJmOyB9CisKKyAgICAgICAgc3RhdGljIGhhbmRs
ZSBudWxsKCkgeyByZXR1cm4gMDsgfQorCisgICAgICAgIGludCBjb21wYXJlX2tleV9rZXkoa2V5
IHZhLCBrZXkgdmIpOworICAgICAgICBpbnQgY29tcGFyZV9rZXlfbm9kZShrZXkgaywgaGFuZGxl
IGgpIHsgcmV0dXJuIGNvbXBhcmVfa2V5X2tleShrLCBoLT5rZXkuZ2V0KCkpOyB9CisgICAgICAg
IGludCBjb21wYXJlX25vZGVfbm9kZShoYW5kbGUgaDEsIGhhbmRsZSBoMikgeyByZXR1cm4gY29t
cGFyZV9rZXlfa2V5KGgxLT5rZXkuZ2V0KCksIGgyLT5rZXkuZ2V0KCkpOyB9CisgICAgfTsKKwor
ICAgIElEQktleVRyZWUoKTsKKworICAgIHR5cGVkZWYgV1RGOjpBVkxUcmVlPEFWTFRyZWVBYnN0
cmFjdG9yPiBUcmVlVHlwZTsKKyAgICBUcmVlVHlwZSBtX3RyZWU7Cit9OworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVmFsdWVUeXBlPgorSURCS2V5VHJlZTxWYWx1ZVR5cGU+OjpJREJLZXlUcmVlKCkK
K3sKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFZhbHVlVHlwZT4KK0lEQktleVRyZWU8VmFsdWVU
eXBlPjo6fklEQktleVRyZWUoKQoreworICAgIHR5cGVuYW1lIFRyZWVUeXBlOjpJdGVyYXRvciBp
dGVyOworICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdChtX3RyZWUpOworICAgIGZvciAoOyAqaXRl
cjsgKytpdGVyKQorICAgICAgICBkZWxldGUgKml0ZXI7CisgICAgbV90cmVlLnB1cmdlKCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1ZVR5cGU+CitpbnQgSURCS2V5VHJlZTxWYWx1ZVR5
cGU+OjpBVkxUcmVlQWJzdHJhY3Rvcjo6Y29tcGFyZV9rZXlfa2V5KGtleSB2YSwga2V5IHZiKQor
eworICAgIGlmICh2YS0+dHlwZSgpICE9IHZiLT50eXBlKCkpCisgICAgICAgIHJldHVybiB2Yi0+
dHlwZSgpIC0gdmEtPnR5cGUoKTsKKworICAgIHN3aXRjaCAodmEtPnR5cGUoKSkgeworICAgIGNh
c2UgSURCS2V5OjpOdWxsVHlwZToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBJREJLZXk6
Ok51bWJlclR5cGU6CisgICAgICAgIHJldHVybiB2Yi0+bnVtYmVyKCkgLSB2YS0+bnVtYmVyKCk7
CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6CisgICAgICAgIHJldHVybiBjb2RlUG9pbnRD
b21wYXJlKHZhLT5zdHJpbmcoKSwgdmItPnN0cmluZygpKTsKKyAgICAvLyBGSVhNRTogSGFuZGxl
IGRhdGVzLiAgT2gsIGFuZCB0ZXN0IHRoaXMgdGhvcm91Z2hseS4KKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlPgorUGFzc1JlZlB0cjxWYWx1ZVR5cGU+IElE
QktleVRyZWU8VmFsdWVUeXBlPjo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXkpCit7Cisg
ICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworICAgIFRyZWVOb2RlKiBub2RlID0gbV90
cmVlLnNlYXJjaChrZXkuZ2V0KCkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG5vZGUtPnZhbHVlOworfQorCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWYWx1
ZVR5cGU+Cit2b2lkIElEQktleVRyZWU8VmFsdWVUeXBlPjo6cHV0KFBhc3NSZWZQdHI8SURCS2V5
PiBwcnBLZXksIFBhc3NSZWZQdHI8VmFsdWVUeXBlPiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8SURC
S2V5PiBrZXkgPSBwcnBLZXk7CisgICAgVHJlZU5vZGUqIG5vZGUgPSBtX3RyZWUuc2VhcmNoKGtl
eS5nZXQoKSk7CisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIG5vZGUgPSBuZXcgVHJlZU5vZGUo
KTsKKyAgICAgICAgbm9kZS0+a2V5ID0ga2V5LnJlbGVhc2UoKTsKKyAgICAgICAgbV90cmVlLmlu
c2VydChub2RlKTsKKyAgICB9CisgICAgbm9kZS0+dmFsdWUgPSB2YWx1ZTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFZhbHVlVHlwZT4KK3ZvaWQgSURCS2V5VHJlZTxWYWx1ZVR5cGU+OjpyZW1v
dmUoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSkKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkg
PSBwcnBLZXk7CisgICAgVHJlZU5vZGUqIG5vZGUgPSBtX3RyZWUucmVtb3ZlKGtleS5nZXQoKSk7
CisgICAgaWYgKG5vZGUpCisgICAgICAgIGRlbGV0ZSBub2RlOworfQorCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8vIElEQktleVRyZWVfaAo=
</data>
<flag name="review"
          id="47561"
          type_id="1"
          status="+"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>