<?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>48510</bug_id>
          
          <creation_ts>2010-10-28 04:48:08 -0700</creation_ts>
          <short_desc>[GTK] Implement WebEventFactory, WebErrors classes for WebKit2</short_desc>
          <delta_ts>2011-02-25 17:15:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>52805</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Amruth Raj">amruthraj</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>alex</cc>
    
    <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>kbalazs</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ravi.kasibhatla</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>300994</commentid>
    <comment_count>0</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-10-28 04:48:08 -0700</bug_when>
    <thetext>Implementing WebEventFactory, WebErrors, Module, WebPage, WebContext, NativeKeyboardEvent classes on WebKit2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301715</commentid>
    <comment_count>1</comment_count>
      <attachid>72324</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-10-29 06:23:16 -0700</bug_when>
    <thetext>Created attachment 72324
Implements WebEventFactory, WebErrors, Module, WebPage, WebContext, NativeKeyboardEvent classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301744</commentid>
    <comment_count>2</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-10-29 07:15:25 -0700</bug_when>
    <thetext>Adding myself to the CC list for this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303419</commentid>
    <comment_count>3</comment_count>
      <attachid>72684</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-11-02 09:43:51 -0700</bug_when>
    <thetext>Created attachment 72684
WebEventFactory and WebErrors class implementation for GTK port

WebEventFactory and WebErrors class implementation for GTK port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303421</commentid>
    <comment_count>4</comment_count>
      <attachid>72685</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-11-02 09:45:02 -0700</bug_when>
    <thetext>Created attachment 72685
Few other important classes implementation for WebKit2 GTK port

Contains implementation for few other important classes like NativeWebKeyboardEvent, Module, WebContext etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330761</commentid>
    <comment_count>5</comment_count>
      <attachid>78235</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-07 07:22:02 -0800</bug_when>
    <thetext>Created attachment 78235
WebEventFactory and WebErrors class implementation for GTK port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330762</commentid>
    <comment_count>6</comment_count>
      <attachid>78236</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-07 07:22:44 -0800</bug_when>
    <thetext>Created attachment 78236
Few other important classes implementation for WebKit2 GTK port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332976</commentid>
    <comment_count>7</comment_count>
      <attachid>78236</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-12 02:25:12 -0800</bug_when>
    <thetext>Comment on attachment 78236
Few other important classes implementation for WebKit2 GTK port

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

I think you could split the patch into different independent pieces.

&gt; WebKit2/ChangeLog:9
&gt; +        * Platform/Module.h:
&gt; +        * Platform/gtk/ModuleGtk.cpp: Added. Initial code using dlopen/dlclose calls (UNIX_X11 specific).

We should use GModule instead since it&apos;s portable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333538</commentid>
    <comment_count>8</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-12 21:40:55 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 78236 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78236&amp;action=review
&gt; 
&gt; I think you could split the patch into different independent pieces.
The patch has majorly stubbed implementations except for WebPageGtk.cpp. Do you want us split WebPageGtk.cpp to separate patch &amp; keep rest of the files as separate patch?
&gt; 
&gt; &gt; WebKit2/ChangeLog:9
&gt; &gt; +        * Platform/Module.h:
&gt; &gt; +        * Platform/gtk/ModuleGtk.cpp: Added. Initial code using dlopen/dlclose calls (UNIX_X11 specific).
&gt; 
&gt; We should use GModule instead since it&apos;s portable.
We will address this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333568</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-12 23:33:41 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 78236 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78236&amp;action=review
&gt; &gt; 
&gt; &gt; I think you could split the patch into different independent pieces.
&gt; The patch has majorly stubbed implementations except for WebPageGtk.cpp. Do you want us split WebPageGtk.cpp to separate patch &amp; keep rest of the files as separate patch?

The point of having different patches, is that a reviewer can r+ one patch and r- all others, for example,  making the review process easier for you too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334508</commentid>
    <comment_count>10</comment_count>
      <attachid>78978</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-14 12:27:01 -0800</bug_when>
    <thetext>Created attachment 78978
Module implementation using GModule

Implemented Module class for WebKit2 GTK port using GModule and split the patch to 3 separate parts for review convenience.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334511</commentid>
    <comment_count>11</comment_count>
      <attachid>78980</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-14 12:28:50 -0800</bug_when>
    <thetext>Created attachment 78980
NativeWebKeyboard and WebContext class implementation for WebKit2 GTK

Implemented NativeWebKeyboardEvent &amp; WebContext classes for WebKit2 GTK port. Split the patch to separate parts for review convenience.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334514</commentid>
    <comment_count>12</comment_count>
      <attachid>78981</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-14 12:30:03 -0800</bug_when>
    <thetext>Created attachment 78981
WebPageGtk implementation for WebKit2 GTK

Implemented WebPage class for WebKit2 GTK port. Split the patch to separate part for review convenience.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348335</commentid>
    <comment_count>13</comment_count>
      <attachid>78978</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-09 09:57:43 -0800</bug_when>
    <thetext>Comment on attachment 78978
Module implementation using GModule

Already landed http://trac.webkit.org/changeset/78072</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348511</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-09 13:23:24 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78074 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348999</commentid>
    <comment_count>15</comment_count>
      <attachid>78980</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-10 05:57:53 -0800</bug_when>
    <thetext>Comment on attachment 78980
NativeWebKeyboard and WebContext class implementation for WebKit2 GTK

Updated version uploaded to the bug 54199</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349239</commentid>
    <comment_count>16</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-10 11:47:42 -0800</bug_when>
    <thetext>Added new bugs to handle the other patches, so I&apos;ve renamed the bug before uploading the patch for event factory and errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349240</commentid>
    <comment_count>17</comment_count>
      <attachid>82016</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-10 11:49:03 -0800</bug_when>
    <thetext>Created attachment 82016
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349669</commentid>
    <comment_count>18</comment_count>
      <attachid>82016</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-02-11 00:10:42 -0800</bug_when>
    <thetext>Comment on attachment 82016
Proposed patch

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

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:40
&gt; +static inline GdkPoint positionForEvent(GdkEventAny* event)

We don&apos;t need this, we can use gdk_event_get_coords()

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:67
&gt; +static inline GdkPoint globalPositionForEvent(GdkEventAny* event)

We don&apos;t need this either, we can use gdk_event_get_root_coords()

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:113
&gt; +    switch (event-&gt;type) {
&gt; +    case GDK_BUTTON_PRESS:
&gt; +        sClickCount = 1;
&gt; +        break;
&gt; +    case GDK_2BUTTON_PRESS:
&gt; +        sClickCount = 2;
&gt; +        break;
&gt; +    case GDK_3BUTTON_PRESS:
&gt; +        sClickCount = 3;
&gt; +        break;
&gt; +    case GDK_MOTION_NOTIFY:
&gt; +    case GDK_BUTTON_RELEASE:
&gt; +        sClickCount = 0;
&gt; +        break;
&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();

I would return the click count for every case instead of using a variable

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:114
&gt; +    };

There&apos;s ; there

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:143
&gt; +    case GDK_MOTION_NOTIFY:
&gt; +        motion = (GdkEventMotion*) event;

You can avoid all the casts here by using event-&gt;motion.state passing GdkEvent * instead of GdkEventAny to this function

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:156
&gt; +    case GDK_BUTTON_PRESS:
&gt; +    case GDK_2BUTTON_PRESS:
&gt; +    case GDK_3BUTTON_PRESS:
&gt; +    case GDK_BUTTON_RELEASE:
&gt; +        bEvent = (GdkEventButton *)event;

Same here using event-&gt;button.button

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:174
&gt; +    guint timestamp = 0;

why not using event-&gt;time (you could use gdk_event_get_time()) instead of 0?

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:180
&gt; +    GdkPoint globalPosition = globalPositionForEvent((GdkEventAny *)event);

event is already GdkEventAny, that cast is redundant. I recommend using GdkEvent instead of GdkEventAny anyway.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:257
&gt; +    if ((state &amp; GDK_SHIFT_MASK) || (state == GDK_KEY_3270_BackTab))

That&apos;s wrong, GDK_KEY_3270_BackTab is a keyval, not a state. I think we could use a single funcion modifiersForEvent() that receives an event instead of a state. Then gdk_event_get_state() and if event is a key press then check whether event-&gt;keyval is GDK_KEY_3270_BackTab</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349776</commentid>
    <comment_count>19</comment_count>
      <attachid>82016</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-11 07:48:56 -0800</bug_when>
    <thetext>Comment on attachment 82016
Proposed patch

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

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:33
&gt; +

No newline needed here.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:111
&gt; +    int sClickCount = 0;
&gt; +
&gt; +    switch (event-&gt;type) {
&gt; +    case GDK_BUTTON_PRESS:
&gt; +        sClickCount = 1;
&gt; +        break;
&gt; +    case GDK_2BUTTON_PRESS:
&gt; +        sClickCount = 2;
&gt; +        break;
&gt; +    case GDK_3BUTTON_PRESS:
&gt; +        sClickCount = 3;
&gt; +        break;
&gt; +    case GDK_MOTION_NOTIFY:
&gt; +    case GDK_BUTTON_RELEASE:
&gt; +        sClickCount = 0;
&gt; +        break;

This code is very suspicious. We need to support click counts higher than 3 and also to detect up front situations where GDK is sending both a GDK_BUTTON_PRESS followed closely by a GDK_3BUTTON_PRESS/GDK_2BUTTON_PRESS. See the code in webkitwebview.cpp to do this. My guess is that we&apos;ll need similar code in the widget and to pass in the click count manually.

Please don&apos;t use Hungarian notation (sClickCount).

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:139
&gt; +    GdkEventButton* bEvent;

Please do not abbreviate. Use buttonEvent or eventButton.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.h:32
&gt; +#include &lt;gdk/gdk.h&gt;

Please use typedefs instead of including gdk.h here.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.h:37
&gt; +    public:

No indentation needed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349806</commentid>
    <comment_count>20</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-11 09:27:01 -0800</bug_when>
    <thetext>Thanks for both reviews, I&apos;ll check the remarks.

(In reply to comment #19)
&gt; &gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:111
&gt; &gt; +    int sClickCount = 0;
&gt; &gt; +
&gt; &gt; +    switch (event-&gt;type) {
&gt; &gt; +    case GDK_BUTTON_PRESS:
&gt; &gt; +        sClickCount = 1;
&gt; &gt; +        break;
&gt; &gt; +    case GDK_2BUTTON_PRESS:
&gt; &gt; +        sClickCount = 2;
&gt; &gt; +        break;
&gt; &gt; +    case GDK_3BUTTON_PRESS:
&gt; &gt; +        sClickCount = 3;
&gt; &gt; +        break;
&gt; &gt; +    case GDK_MOTION_NOTIFY:
&gt; &gt; +    case GDK_BUTTON_RELEASE:
&gt; &gt; +        sClickCount = 0;
&gt; &gt; +        break;
&gt; 
&gt; This code is very suspicious. We need to support click counts higher than 3 and also to detect up front situations where GDK is sending both a GDK_BUTTON_PRESS followed closely by a GDK_3BUTTON_PRESS/GDK_2BUTTON_PRESS. See the code in webkitwebview.cpp to do this. My guess is that we&apos;ll need similar code in the widget and to pass in the click count manually.

We have a quite similar code already working in WebCore in MouseEventGtk.cpp. I&apos;ll check if it could cause any issue. Basic click combination at least work for the tests I did (except right click and menu popup)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351326</commentid>
    <comment_count>21</comment_count>
      <attachid>82468</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-15 09:04:39 -0800</bug_when>
    <thetext>Created attachment 82468
Proposed patch

Thanks for the reviews, I&apos;ve added all the comments and other issues I&apos;ve spotted. Regarding the click count we had the same code to generate the events in webkit1. Basically this should be used inside the widget event handler to generate the webkit platform event that we are going to pass to webcore, so in theory we could add the code we have in the widget in the same place for webkit2. I guess this starts to be a proper first version but still things to check and finish.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351360</commentid>
    <comment_count>22</comment_count>
      <attachid>82468</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-15 09:44:35 -0800</bug_when>
    <thetext>Comment on attachment 82468
Proposed patch

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

&gt; Source/WebCore/platform/PlatformKeyboardEvent.h:182
&gt; +        static String keyIdentifierForGdkKeyCode(guint keyCode);
&gt; +        static int windowsKeyCodeForKeyEvent(unsigned int keycode);
&gt; +        static String singleCharacterString(guint val);

I&apos;d remove the argument names here. Shouldn&apos;t windowsKeyCodeForKeyEvent be called windowsKeyCodeForKeyCode?

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:34
&gt; +#include &quot;WindowsKeyboardCodes.h&quot;
&gt; +
&gt; +#include &lt;gdk/gdk.h&gt;

Please remove this extra newline.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:78
&gt; +    if ((state &amp; GDK_SHIFT_MASK)
&gt; +        || ((event-&gt;type == GDK_KEY_PRESS || event-&gt;type == GDK_KEY_RELEASE) &amp;&amp; (reinterpret_cast&lt;GdkEventKey*&gt;(event)-&gt;keyval == GDK_KEY_3270_BackTab)))
&gt; +        modifiers |= WebEvent::ShiftKey;

Why do we special case BackTab?  Instead of casting to a GdkEventKey, it&apos;s better to use event-&gt;key.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:163
&gt; +    float deltaX = 0;
&gt; +    float deltaY = 0;

Why have a pair of floats and a FloatSize? It would make more sense just to keep a FloatSize and fiddle that.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:165
&gt; +    float wheelTicksX = 0;
&gt; +    float wheelTicksY = 0;

You should be able to remove these, seee below.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:166
&gt; +    float scrollbarPixelsPerLine = 40;

This should be static const and there should be a comment explaining where it comes from, since it&apos;s a magic number. I&apos;d move it down closer to where it&apos;s used to. There&apos;s no need to declare all the variables at the beginning of the method.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:187
&gt; +        deltaY = delta;
&gt; +        break;
&gt; +    case GDK_SCROLL_DOWN:
&gt; +        deltaY = -delta;
&gt; +        break;
&gt; +    case GDK_SCROLL_LEFT:
&gt; +        deltaX = delta;
&gt; +        break;
&gt; +    case GDK_SCROLL_RIGHT:
&gt; +        deltaX = -delta;
&gt; +        break;

If delta is always 1, it&apos;s much clearer just to say 1 or -1. Even better, just say eventDelta = FloatSize(1, 0); etc.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:195
&gt; +    FloatSize eventWheelTicks(wheelTicksX, wheelTicksY);

Why not just move this definition above where you adjust deltaX and deltaY so that you can dispense with wheelTicks{X,Y}?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp:47
&gt; +#define WebURLErrorDomain   &quot;URLErrorDomain&quot;
&gt; +
&gt; +enum {
&gt; +    WebURLErrorUnknown =                         -1,
&gt; +    WebURLErrorCancelled =                       -999,
&gt; +    WebURLErrorBadURL =                          -1000,
&gt; +    WebURLErrorTimedOut =                        -1001,
&gt; +    WebURLErrorUnsupportedURL =                  -1002,
&gt; +    WebURLErrorCannotFindHost =                  -1003,
&gt; +    WebURLErrorCannotConnectToHost =             -1004,
&gt; +    WebURLErrorNetworkConnectionLost =           -1005,

I believe this file has totally changed since this patch was written. You should now be calling WebError::webKitErrorDomain and Windows and Mac do not define all these enums.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352020</commentid>
    <comment_count>23</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-16 06:16:09 -0800</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #22)
&gt; (From update of attachment 82468 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82468&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:78
&gt; &gt; +    if ((state &amp; GDK_SHIFT_MASK)
&gt; &gt; +        || ((event-&gt;type == GDK_KEY_PRESS || event-&gt;type == GDK_KEY_RELEASE) &amp;&amp; (reinterpret_cast&lt;GdkEventKey*&gt;(event)-&gt;keyval == GDK_KEY_3270_BackTab)))
&gt; &gt; +        modifiers |= WebEvent::ShiftKey;
&gt; 
&gt; Why do we special case BackTab?  Instead of casting to a GdkEventKey, it&apos;s better to use event-&gt;key.
&gt;

I did not check the code when reviewing, apparently it was the bug 51587 that added that code to the original file this code comes from.

&gt; &gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:163
&gt; &gt; +    float deltaX = 0;
&gt; &gt; +    float deltaY = 0;
&gt; 
&gt; Why have a pair of floats and a FloatSize? It would make more sense just to keep a FloatSize and fiddle that.
&gt; 

I agree, I&apos;ll change this code.

&gt; &gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:165
&gt; &gt; +    float wheelTicksX = 0;
&gt; &gt; +    float wheelTicksY = 0;
&gt; 
&gt; You should be able to remove these, seee below.
&gt; 
&gt; &gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:166
&gt; &gt; +    float scrollbarPixelsPerLine = 40;
&gt; 
&gt; This should be static const and there should be a comment explaining where it comes from, since it&apos;s a magic number. I&apos;d move it down closer to where it&apos;s used to. There&apos;s no need to declare all the variables at the beginning of the method.
&gt; 
&gt; &gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:187
&gt; &gt; +        deltaY = delta;
&gt; &gt; +        break;
&gt; &gt; +    case GDK_SCROLL_DOWN:
&gt; &gt; +        deltaY = -delta;
&gt; &gt; +        break;
&gt; &gt; +    case GDK_SCROLL_LEFT:
&gt; &gt; +        deltaX = delta;
&gt; &gt; +        break;
&gt; &gt; +    case GDK_SCROLL_RIGHT:
&gt; &gt; +        deltaX = -delta;
&gt; &gt; +        break;
&gt; 
&gt; If delta is always 1, it&apos;s much clearer just to say 1 or -1. Even better, just say eventDelta = FloatSize(1, 0); etc.
&gt; 
&gt; &gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:195
&gt; &gt; +    FloatSize eventWheelTicks(wheelTicksX, wheelTicksY);
&gt; 
&gt; Why not just move this definition above where you adjust deltaX and deltaY so that you can dispense with wheelTicks{X,Y}?
&gt;

I agree, I&apos;m going to review it. This code comes from the old WheelEventEvent, I guess that is the reason for most of the decisions there.

&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp:47
&gt; &gt; +#define WebURLErrorDomain   &quot;URLErrorDomain&quot;
&gt; &gt; +
&gt; &gt; +enum {
&gt; &gt; +    WebURLErrorUnknown =                         -1,
&gt; &gt; +    WebURLErrorCancelled =                       -999,
&gt; &gt; +    WebURLErrorBadURL =                          -1000,
&gt; &gt; +    WebURLErrorTimedOut =                        -1001,
&gt; &gt; +    WebURLErrorUnsupportedURL =                  -1002,
&gt; &gt; +    WebURLErrorCannotFindHost =                  -1003,
&gt; &gt; +    WebURLErrorCannotConnectToHost =             -1004,
&gt; &gt; +    WebURLErrorNetworkConnectionLost =           -1005,
&gt; 
&gt; I believe this file has totally changed since this patch was written. You should now be calling WebError::webKitErrorDomain and Windows and Mac do not define all these enums.

Yep, good point.

Thanks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352429</commentid>
    <comment_count>24</comment_count>
      <attachid>82715</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-16 16:04:43 -0800</bug_when>
    <thetext>Created attachment 82715
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352431</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-16 16:09:54 -0800</bug_when>
    <thetext>Attachment 82715 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 8 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>352433</commentid>
    <comment_count>26</comment_count>
      <attachid>82717</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-16 16:12:09 -0800</bug_when>
    <thetext>Created attachment 82717
Proposed patch

Fixed style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352437</commentid>
    <comment_count>27</comment_count>
      <attachid>82715</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-16 16:19:07 -0800</bug_when>
    <thetext>Comment on attachment 82715
Proposed patch

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

Sorry. There were many things that I missed in my previous review. Below are some suggestions.

&gt; Source/WebCore/platform/PlatformKeyboardEvent.h:182
&gt; +        static String keyIdentifierForGdkKeyCode(guint);
&gt; +        static int windowsKeyCodeForKeyCode(unsigned int);
&gt; +        static String singleCharacterString(guint);

Sorry that I missed this before! For consistency, the second should probably be windowsKeyCodeForGdkKeyCode(guint) and the third should probably be singleCharacterStringForGdkKeyCode.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:44
&gt; +static inline int clickCount(GdkEvent* event)
&gt; +{
&gt; +    switch (event-&gt;type) {
&gt; +    case GDK_BUTTON_PRESS:

Please open a bug for proper click counting and link to the bug here with a FIXME.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:61
&gt; +    ASSERT_NOT_REACHED();

Might as well put this in the default case above.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:72
&gt; +    if (!gdk_event_get_state(event, &amp;state))
&gt; +        ASSERT_NOT_REACHED();

Why not just ASSERT(gdk_event_get_state(event, &amp;state)) ?

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:78
&gt; +    if ((state &amp; GDK_SHIFT_MASK)
&gt; +        || ((event-&gt;type == GDK_KEY_PRESS || event-&gt;type == GDK_KEY_RELEASE) &amp;&amp; (event-&gt;key.keyval == GDK_KEY_3270_BackTab)))
&gt; +        modifiers |= WebEvent::ShiftKey;

Still probably should put a comment here explaining where this comes from / why it&apos;s needed.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:121
&gt; +    double timestamp = gdk_event_get_time(event);

No need to cache the timestamp, just call this when you use it.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:124
&gt; +    WebMouseEvent::Button button = buttonForEvent(event);

Ditto.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:129
&gt; +    IntPoint position(x, y);

Ditto.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:130
&gt; +    IntPoint globalPosition(xRoot, yRoot);

Ditto.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:131
&gt; +    int clickcount = clickCount(event);

Ditto.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:146
&gt; +    default :

No space after default.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:155
&gt; +    WebWheelEvent::Granularity granularity = WebWheelEvent::ScrollByPixelWheelEvent;

No need to cache this.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:157
&gt; +    unsigned timestamp = gdk_event_get_time(reinterpret_cast&lt;GdkEvent*&gt;(event));

Ditto.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:162
&gt; +    IntPoint position(x, y);

Ditto.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:163
&gt; +    IntPoint globalPosition(xRoot, yRoot);

Ditto.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:164
&gt; +    WebEvent::Modifiers modifiers = modifiersForEvent(reinterpret_cast&lt;GdkEvent*&gt;(event));

Ditto.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:179
&gt; +    case GDK_SCROLL_RIGHT:
&gt; +        wheelTicks = FloatSize(-1, 0);
&gt; +        break;

This should also have a case default: with ASSERT_NOT_REACHED();

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:182
&gt; +    // FIXME: retrieve the user setting for the number of lines to scroll on each wheel event

Please open a bug for this issue and link to the bug here.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:184
&gt; +    FloatSize delta(wheelTicks.width()*step, wheelTicks.height()*step);

Need spaces around the asterisks here.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:199
&gt; +    bool isKeypad = event-&gt;keyval &gt;= GDK_KEY_KP_Space &amp;&amp; event-&gt;keyval &lt;= GDK_KEY_KP_9;

I&apos;d like to see this split out into a static function isKeyCodeFromKeyPad or something like that.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:205
&gt; +    return WebKeyboardEvent(type, text, unmodifiedText, keyIdentifier, windowsVirtualKeyCode, nativeVirtualKeyCode, macCharCode,
&gt; +                            autoRepeat, isKeypad, isSystemKey, modifiers, timestamp);

Instead of caching all these things locally, I think it makes sense to just split them out here, like so:

 return WebKeyboardEvent((event-&gt;type == GDK_KEY_RELEASE) ? WebEvent::KeyUp : WebEvent::KeyDown,
                                                    PlatformKeyboardEvent::singleCharacterString(event-&gt;keyval),
                                                    PlatformKeyboardEvent::singleCharacterString(event-&gt;keyval),
                                                    PlatformKeyboardEvent::keyIdentifierForGdkKeyCode(event-&gt;keyval),
                                                    PlatformKeyboardEvent::windowsKeyCodeForKeyCode(event-&gt;keyval),
                                                    static_cast&lt;int&gt;(event-&gt;keyval),
                                                    0 /* macCharCode */,
                                                    ... etc...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352679</commentid>
    <comment_count>28</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-17 01:29:12 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 82715 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82715&amp;action=review
&gt; 
&gt; Sorry. There were many things that I missed in my previous review. Below are some suggestions.
&gt; 

No worries :), I was thinking that maybe we should apply other solution to this code, when you added the first comments improving the parts of the code that comes from webkit1 (PlatformMouseEvent, PlatformKeyboardEvent, etc.) it started to feel weird that we do not fix the code there. Initially I discarded it because creating a object just to create another one does not seem a good option (I guess that was the idea of the first implementation of this patch considering other ports are also copying the code) but I now think improving the code here a leaving the other code duplicated there seems worse.

So I&apos;m going to try that option and check what we could have, in that case we can open new bugs improving the old code and add patches there. Does this solution sound good?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352864</commentid>
    <comment_count>29</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-17 07:30:46 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; (From update of attachment 82715 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82715&amp;action=review
&gt; &gt; 
&gt; &gt; Sorry. There were many things that I missed in my previous review. Below are some suggestions.
&gt; &gt; 
&gt; 
&gt; No worries :), I was thinking that maybe we should apply other solution to this code, when you added the first comments improving the parts of the code that comes from webkit1 (PlatformMouseEvent, PlatformKeyboardEvent, etc.) it started to feel weird that we do not fix the code there. Initially I discarded it because creating a object just to create another one does not seem a good option (I guess that was the idea of the first implementation of this patch considering other ports are also copying the code) but I now think improving the code here a leaving the other code duplicated there seems worse.
&gt; 
&gt; So I&apos;m going to try that option and check what we could have, in that case we can open new bugs improving the old code and add patches there. Does this solution sound good?

Sure. Some of the things we use in WebKit1 could be abstracted up into WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352938</commentid>
    <comment_count>30</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-17 08:44:58 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; 
&gt; &gt; So I&apos;m going to try that option and check what we could have, in that case we can open new bugs improving the old code and add patches there. Does this solution sound good?
&gt; 
&gt; Sure. Some of the things we use in WebKit1 could be abstracted up into WebCore.

I&apos;ve checked current situation with the events and it is not natural to use the platform events because we have enums redefined in webkit2, so it seems it would require a bigger patch to allow the use of the platformfooevents as webevents, but not sure how complex it could be, does anyone know about this? I&apos;ve added other Apple people that could know about it.

So now without more information I think it is easier to finish the first support for gtk using a solution like the one we are implementing and leave the use of platformfooevents for other more general patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355116</commentid>
    <comment_count>31</comment_count>
      <attachid>83283</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-22 01:13:37 -0800</bug_when>
    <thetext>Created attachment 83283
Proposed patch

I think all of the points are updated. I got rid of the 3270 keyval check, it is not clear when someone using that kind of terminal wants to have the Shift pressed also. I also added a new clickCount parameter and added the code to calculate it to the webview patch that I&apos;m going to upload to the other bug, that way we do not use the count of the event but the one we have in our widget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355274</commentid>
    <comment_count>32</comment_count>
      <attachid>83283</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-22 08:00:49 -0800</bug_when>
    <thetext>Comment on attachment 83283
Proposed patch

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

Great! I have a few consistency nits below.

&gt; Source/WebCore/platform/PlatformKeyboardEvent.h:182
&gt; +        static String keyIdentifierForGdkKeyCode(guint);
&gt; +        static int windowsKeyCodeForGdkKeyCode(unsigned int);
&gt; +        static String singleCharacterString(guint);

Please use either allk &quot;guint&quot; here or all &quot;unsigned int&quot; or all &quot;unsigned.&quot; Change singleCharacterString to singleCharacterStringForGdkKeyCode for consistency.

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:42
&gt; +static inline bool isKeyCodeFromKeyPad(unsigned keyval)

Just for consistency, I think this should be isGdkKeyCodeFromKeyPad(&lt;guint or unsigned int or unsigned&gt; keyCode)

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:122
&gt; +    return WebMouseEvent(type, buttonForEvent(event), IntPoint(x, y), IntPoint(xRoot, yRoot), 0 /* deltaX */, 0 /* delta Y*/,
&gt; +                         0 /*deltaZ */, currentClickCount, static_cast&lt;WebEvent::Modifiers&gt;(0), gdk_event_get_time(event));

Pretty nitful here, but I think it makes sense to break this up to one or two per line for readability. :)

&gt; Source/WebKit2/Shared/gtk/WebEventFactory.cpp:169
&gt; +    return WebKeyboardEvent((event-&gt;type == GDK_KEY_RELEASE) ? WebEvent::KeyUp : WebEvent::KeyDown,
&gt; +                            PlatformKeyboardEvent::singleCharacterString(event-&gt;keyval),
&gt; +                            PlatformKeyboardEvent::singleCharacterString(event-&gt;keyval),
&gt; +                            PlatformKeyboardEvent::keyIdentifierForGdkKeyCode(event-&gt;keyval),
&gt; +                            PlatformKeyboardEvent::windowsKeyCodeForGdkKeyCode(event-&gt;keyval),
&gt; +                            static_cast&lt;int&gt;(event-&gt;keyval), 0 /* macCharCode */, false /* isAutoRepeat */,
&gt; +                            isKeyCodeFromKeyPad(event-&gt;keyval), false /* isSystemKey */,
&gt; +                            modifiersForEvent(reinterpret_cast&lt;GdkEvent*&gt;(event)),
&gt; +                            gdk_event_get_time(reinterpret_cast&lt;GdkEvent*&gt;(event)));

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357113</commentid>
    <comment_count>33</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-24 09:43:04 -0800</bug_when>
    <thetext>Landed http://trac.webkit.org/changeset/79581

One less to go :), thanks for the help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358288</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-25 17:15:28 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/79711 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72324</attachid>
            <date>2010-10-29 06:23:16 -0700</date>
            <delta_ts>2010-11-02 09:47:43 -0700</delta_ts>
            <desc>Implements WebEventFactory, WebErrors, Module, WebPage, WebContext, NativeKeyboardEvent classes</desc>
            <filename>EventFactory.diff</filename>
            <type>text/plain</type>
            <size>54787</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ZWE5ZmY5OS4uZWE4OTAyYyAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMC0xMC0yOCAgQW1ydXRoIFJhaiAg
PGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIEthc2liaGF0bGEgPHJhdmkua2FzaWJo
YXRsYUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYkV2ZW50RmFjdG9yeSwgV2ViRXJyb3JzLCBN
b2R1bGUsIFdlYlBhZ2UsIFdlYkNvbnRleHQsICBOYXRpdmVLZXlib2FyZEV2ZW50IGNsYXNzZXMg
Zm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ4NTEwCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBQbGF0Zm9y
bS9Nb2R1bGUuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNwcDogQWRkZWQu
IEluaXRpYWwgY29kZSB1c2luZyBkbG9wZW4vZGxjbG9zZSBjYWxscyAoVU5JWF9YMTEgc3BlY2lm
aWMpLgorICAgICAgICAoV2ViS2l0OjpNb2R1bGU6OmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpN
b2R1bGU6OnVubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok1vZHVsZTo6cGxhdGZvcm1GdW5jdGlv
blBvaW50ZXIpOgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50Lmg6Cisg
ICAgICAgICogU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcDogQWRkZWQu
IFN0dWJiZWQgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBwb3J0LiBZZXQgdG8gaW1wbGVtZW50Lgor
ICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHA6IEFkZGVk
LiBHVEsgaW1wbGVtZW50YXRpb24gZm9yIFdlYk1vdXNlRXZlbnQsIFdlYldoZWVsRXZlbnQsIFdl
YktleWJvYXJkRXZlbnQuCisgICAgICAgIChXZWJLaXQ6OnBvc2l0aW9uRm9yRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpnbG9iYWxQb3NpdGlvbkZvckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
Y2xpY2tDb3VudCk6CisgICAgICAgIChXZWJLaXQ6Om1vZGlmaWVyc0ZvckV2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6YnV0dG9uRm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZh
Y3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZh
Y3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjprZXlJZGVudGlm
aWVyRm9yR2RrS2V5Q29kZSk6CisgICAgICAgIChXZWJLaXQ6OndpbmRvd3NLZXlDb2RlRm9yS2V5
RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAg
ICAoV2ViS2l0Ojptb2RpZmllcnNGb3JDdXJyZW50S2V5U3RhdGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHA6IEFkZGVkLiBTdHViYmVkIGltcGxlbWVudGF0
aW9uIGZvciBHVEsgcG9ydC4gWWV0IHRvIGltcGxlbWVudC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGV4dDo6YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHA6IEFkZGVkLiBTdHViYmVk
IGltcGxlbWVudGF0aW9uIGZvciBHVEsgcG9ydC4gWWV0IHRvIGltcGxlbWVudC4KKyAgICAgICAg
KFdlYktpdDo6Y2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpibG9ja2VkRXJyb3Ip
OgorICAgICAgICAoV2ViS2l0OjpjYW5ub3RTaG93VVJMRXJyb3IpOgorICAgICAgICAoV2ViS2l0
OjppbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OmNhbm5v
dFNob3dNSU1FVHlwZUVycm9yKToKKyAgICAgICAgKFdlYktpdDo6ZmlsZURvZXNOb3RFeGlzdEVy
cm9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwOiBB
ZGRlZC4gSW1wbGVtZW50YXRpb24gZm9yIGludGVycHJldGluZyBrZXkgZXZlbnRzLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwbGF0Zm9ybVByZWZlcmVuY2VzRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6aW50ZXJwcmV0S2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpzY3JvbGwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGVmYXVsdEJlaGF2aW9yRm9yS2V5
RXZlbnQpOgorCiAyMDEwLTEwLTI4ICBBbXJ1dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNv
bT4gYW5kIFJhdmkgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtIGIvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA3NjBmOWJlLi4z
ZmQ0NjU2IDEwMDY0NAotLS0gYS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYktpdDIv
R05VbWFrZWZpbGUuYW0KQEAgLTQzLDE2ICs0MywyMyBAQCB3ZWJraXQyZ3RrX3N0YXRpY19oX2Fw
aSArPSBcCiAJJChzcmNkaXIpL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQ
cml2YXRlLmgKIAogd2Via2l0Mmd0a19zb3VyY2VzICs9IFwKKwlXZWJLaXQyL1BsYXRmb3JtL2d0
ay9Nb2R1bGVHdGsuY3BwIFwKIAlXZWJLaXQyL1BsYXRmb3JtL2d0ay9TaGFyZWRNZW1vcnlHdGsu
Y3BwIFwKIAlXZWJLaXQyL1NoYXJlZC9ndGsvQmFja2luZ1N0b3JlR3RrLmNwcCBcCisJV2ViS2l0
Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwIFwKKwlXZWJLaXQyL1No
YXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5oIFwKIAlXZWJLaXQyL1NoYXJlZC9n
dGsvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCBcCiAJV2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0
ZUNodW5rLmggXAogCVdlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJndW1lbnRDb2RlcnNHdGsu
Y3BwIFwKKwlXZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcCBcCiAJV2ViS2l0
Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oIFwKKwlXZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViQ29udGV4dEd0ay5jcHAgXAogCVdlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdp
bkluZm9TdG9yZUd0ay5jcHAgXAogCVdlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9n
dGsvSW5qZWN0ZWRCdW5kbGVHdGsuY3BwIFwKIAlXZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9ndGsvTmV0c2NhcGVQbHVnaW5HdGsuY3BwIFwKLQlXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAorCVdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcCBcCisJV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
LmggXAorCVdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAogCiB3
ZWJraXQyX3NvdXJjZXMgKz0gXAogCVdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENv
ZGVyLmggXApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuaCBiL1dlYktpdDIv
UGxhdGZvcm0vTW9kdWxlLmgKaW5kZXggMDgyNWJmNi4uOWVkNTlkNCAxMDA2NDQKLS0tIGEvV2Vi
S2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuaAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL01vZHVsZS5oCkBA
IC02MSw2ICs2MSw4IEBAIHByaXZhdGU6CiAgICAgSE1PRFVMRSBtX21vZHVsZTsKICNlbGlmIFBM
QVRGT1JNKFFUKQogICAgIFFMaWJyYXJ5IG1fbGliOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAg
IHZvaWQgKm1faGFuZGxlOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQyL1BsYXRm
b3JtL2d0ay9Nb2R1bGVHdGsuY3BwIGIvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDFkMDA0Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNwcApAQCAtMCwwICsxLDUw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIk1vZHVsZS5o
IgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ1N0cmluZy5oPgorI2luY2x1ZGUgPGRsZmNu
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIE1vZHVsZTo6bG9hZCgpCit7CisgICAg
bV9oYW5kbGUgPSBkbG9wZW4obV9wYXRoLnV0ZjgoKS5kYXRhKCksIFJUTERfTk9XKTsKKyAgICBy
ZXR1cm4gIW1faGFuZGxlOworfQorCit2b2lkIE1vZHVsZTo6dW5sb2FkKCkKK3sKKyAgICBkbGNs
b3NlKG1faGFuZGxlKTsKK30KKwordm9pZCogTW9kdWxlOjpwbGF0Zm9ybUZ1bmN0aW9uUG9pbnRl
cihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRsc3ltKG1f
aGFuZGxlLCBmdW5jdGlvbk5hbWUpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJLaXQyL1NoYXJl
ZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmggYi9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXli
b2FyZEV2ZW50LmgKaW5kZXggMjQ3MWVlYS4uNTIyNzk4NiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9T
aGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCisrKyBiL1dlYktpdDIvU2hhcmVkL05hdGl2
ZVdlYktleWJvYXJkRXZlbnQuaApAQCAtNTEsNiArNTEsOCBAQCBwdWJsaWM6CiAgICAgTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudChIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKICNl
bGlmIFBMQVRGT1JNKFFUKQogICAgIGV4cGxpY2l0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoUUtl
eUV2ZW50Kik7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dChHZGtFdmVudEtleSopOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQg
YS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAgYi9XZWJL
aXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlMGNkNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcApAQCAtMCwwICsxLDM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIk5hdGl2ZVdl
YktleWJvYXJkRXZlbnQuaCIKKworI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9h
cmRFdmVudChHZGtFdmVudEtleSogZXZlbnQpCisgICAgOiBXZWJLZXlib2FyZEV2ZW50KFdlYkV2
ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChldmVudCkpCisgICAgLCBtX25hdGl2
ZUV2ZW50KCpldmVudCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcCBiL1dlYktpdDIvU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM0NjIxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5LmNwcApAQCAtMCwwICsxLDc2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg
KGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCisKKyNpbmNsdWRlICJXaW5kb3dz
S2V5Ym9hcmRDb2Rlcy5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdkay9n
ZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgaW5saW5lIEdka1Bv
aW50IHBvc2l0aW9uRm9yRXZlbnQoR2RrRXZlbnRBbnkqIGV2ZW50KQoreworICAgIEdka1BvaW50
IHBvaW50OworICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTIHx8IGV2ZW50
LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkgeworICAgICAgICBwb2ludC54ID0gKGdpbnQp
KChHZGtFdmVudEJ1dHRvbiAqKWV2ZW50KS0+eDsKKyAgICAgICAgcG9pbnQueSA9IChnaW50KSgo
R2RrRXZlbnRCdXR0b24gKilldmVudCktPnk7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9
PSBHREtfTU9USU9OX05PVElGWSkgeworICAgICAgICBwb2ludC54ID0gKGdpbnQpKChHZGtFdmVu
dE1vdGlvbiAqKWV2ZW50KS0+eDsKKyAgICAgICAgcG9pbnQueSA9IChnaW50KSgoR2RrRXZlbnRN
b3Rpb24gKilldmVudCktPnk7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfU0NS
T0xMKSB7CisgICAgICAgIHBvaW50LnggPSAoZ2ludCkoKEdka0V2ZW50U2Nyb2xsICopZXZlbnQp
LT54OworICAgICAgICBwb2ludC55ID0gKGdpbnQpKChHZGtFdmVudFNjcm9sbCAqKWV2ZW50KS0+
eTsKKyAgICB9CisKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgR2RrUG9p
bnQgZ2xvYmFsUG9zaXRpb25Gb3JFdmVudChHZGtFdmVudEFueSogZXZlbnQpCit7CisgICAgR2Rr
UG9pbnQgcG9pbnQ7CisgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUFJFU1MgfHwg
ZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9SRUxFQVNFKSB7CisgICAgICAgIHBvaW50LnggPSAo
KEdka0V2ZW50QnV0dG9uICopZXZlbnQpLT54X3Jvb3Q7CisgICAgICAgIHBvaW50LnkgPSAoKEdk
a0V2ZW50QnV0dG9uICopZXZlbnQpLT55X3Jvb3Q7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlw
ZSA9PSBHREtfTU9USU9OX05PVElGWSkgeworICAgICAgICBwb2ludC54ID0gKChHZGtFdmVudE1v
dGlvbiAqKWV2ZW50KS0+eF9yb290OyAKKyAgICAgICAgcG9pbnQueSA9ICgoR2RrRXZlbnRNb3Rp
b24gKilldmVudCktPnlfcm9vdDsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES19T
Q1JPTEwpIHsKKyAgICAgICAgcG9pbnQueCA9ICgoR2RrRXZlbnRTY3JvbGwgKilldmVudCktPnhf
cm9vdDsKKyAgICAgICAgcG9pbnQueSA9ICgoR2RrRXZlbnRTY3JvbGwgKilldmVudCktPnlfcm9v
dDsKKyAgICB9CisKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQg
Y2xpY2tDb3VudChHZGtFdmVudEFueSogZXZlbnQpCit7CisgICAgaW50IHNDbGlja0NvdW50ID0g
MDsKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNT
OgorICAgICAgICBzQ2xpY2tDb3VudCA9IDE7CisgICAgICAgIGJyZWFrOyAKKyAgICBjYXNlIEdE
S18yQlVUVE9OX1BSRVNTOgorICAgICAgICBzQ2xpY2tDb3VudCA9IDI7CisgICAgICAgIGJyZWFr
OyAKKyAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgorICAgICAgICBzQ2xpY2tDb3VudCA9IDM7
CisgICAgICAgIGJyZWFrOyAKKyAgICBjYXNlIEdES19NT1RJT05fTk9USUZZOgorICAgIGNhc2Ug
R0RLX0JVVFRPTl9SRUxFQVNFOgorICAgICAgICBzQ2xpY2tDb3VudCA9IDA7CisgICAgICAgIGJy
ZWFrOyAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
OworICAgIHJldHVybiBzQ2xpY2tDb3VudDsKK30KKworc3RhdGljIGlubGluZSBXZWJFdmVudDo6
TW9kaWZpZXJzIG1vZGlmaWVyc0ZvckV2ZW50KGd1aW50IHN0YXRlKQoreworICAgIHVuc2lnbmVk
IG1vZGlmaWVycyA9IDA7CisgICAgaWYgKHN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKyAgICAg
ICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpDb250cm9sS2V5OworICAgIGlmIChzdGF0ZSAmIEdE
S19TSElGVF9NQVNLKQorICAgICAgICBtb2RpZmllcnMgfD0gV2ViRXZlbnQ6OlNoaWZ0S2V5Owor
ICAgIGlmIChzdGF0ZSAmIEdES19NT0QxX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJF
dmVudDo6QWx0S2V5OworICAgIGlmIChzdGF0ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1v
ZGlmaWVycyB8PSBXZWJFdmVudDo6TWV0YUtleTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
RXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJzKTsKK30KKworc3RhdGljIGlubGluZSBXZWJNb3Vz
ZUV2ZW50OjpCdXR0b24gYnV0dG9uRm9yRXZlbnQoR2RrRXZlbnRBbnkgKmV2ZW50KQoreworICAg
IHVuc2lnbmVkIGJ1dHRvbiA9IDA7CisgICAgR2RrRXZlbnRNb3Rpb24qIG1vdGlvbjsKKyAgICBH
ZGtFdmVudEJ1dHRvbiogYkV2ZW50OworICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKyAgICBj
YXNlIEdES19NT1RJT05fTk9USUZZOgorICAgICAgICBtb3Rpb24gPSAoR2RrRXZlbnRNb3Rpb24q
KSBldmVudDsKKyAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6Tm9CdXR0b247CisgICAg
ICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjFfTUFTSykKKyAgICAgICAgICAgIGJ1
dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b247CisgICAgICAgIGVsc2UgaWYgKG1vdGlv
bi0+c3RhdGUgJiBHREtfQlVUVE9OMl9NQVNLKQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91
c2VFdmVudDo6TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmIChtb3Rpb24tPnN0YXRlICYg
R0RLX0JVVFRPTjNfTUFTSykKKyAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OlJp
Z2h0QnV0dG9uOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoK
KyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6
CisgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6CisgICAgICAgIGJFdmVudCA9IChHZGtFdmVu
dEJ1dHRvbiAqKWV2ZW50OworICAgICAgICBpZiAoYkV2ZW50LT5idXR0b24gPT0gMSkKKyAgICAg
ICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b247CisgICAgICAgIGVsc2Ug
aWYgKGJFdmVudC0+YnV0dG9uID09IDIpCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2
ZW50OjpNaWRkbGVCdXR0b247CisgICAgICAgIGVsc2UgaWYgKGJFdmVudC0+YnV0dG9uID09IDMp
CisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfTsgICAgICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJNb3VzZUV2ZW50OjpCdXR0
b24+KGJ1dHRvbik7Cit9CisgIAorCitXZWJNb3VzZUV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViTW91c2VFdmVudChHZGtFdmVudEFueSAqZXZlbnQpCit7CisgICAgZ3VpbnQgdGltZXN0
YW1wID0gMDsgCisgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2Fz
dDxXZWJFdmVudDo6TW9kaWZpZXJzPigwKTsKKyAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gYnV0
dG9uID0gYnV0dG9uRm9yRXZlbnQoZXZlbnQpOworICAgIEdka1BvaW50IHBvc2l0aW9uID0gcG9z
aXRpb25Gb3JFdmVudChldmVudCk7CisgICAgR2RrUG9pbnQgZ2xvYmFsUG9zaXRpb24gPSBnbG9i
YWxQb3NpdGlvbkZvckV2ZW50KChHZGtFdmVudEFueSAqKWV2ZW50KTsKKyAgICBpbnQgY2xpY2tj
b3VudCA9IGNsaWNrQ291bnQoZXZlbnQpOworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUgPSBzdGF0
aWNfY2FzdDxXZWJFdmVudDo6VHlwZT4oMCk7CisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgewor
ICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6CisgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91
c2VNb3ZlOworICAgICAgICB0aW1lc3RhbXAgPSAoKEdka0V2ZW50TW90aW9uICopZXZlbnQpLT50
aW1lOworICAgICAgICBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudCgoKEdka0V2ZW50TW90
aW9uICopZXZlbnQpLT5zdGF0ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RLX0JVVFRP
Tl9QUkVTUzoKKyAgICAgICAgdGltZXN0YW1wID0gKChHZGtFdmVudEJ1dHRvbiAqKWV2ZW50KS0+
dGltZTsKKyAgICAgICAgbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoKChHZGtFdmVudEJ1
dHRvbiAqKWV2ZW50KS0+c3RhdGUpOworICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlRG93
bjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6CisgICAgICAg
IHRpbWVzdGFtcCA9ICgoR2RrRXZlbnRCdXR0b24gKilldmVudCktPnRpbWU7CisgICAgICAgIG1v
ZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KCgoR2RrRXZlbnRCdXR0b24gKilldmVudCktPnN0
YXRlKTsKKyAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpNb3VzZVVwOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0IDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgaW50IHBvc2l0aW9uWCA9IHBvc2l0aW9uLng7CisgICAgaW50IHBvc2l0aW9uWSA9IHBvc2l0
aW9uLnk7CisgICAgaW50IGdsb2JhbFBvc2l0aW9uWCA9IGdsb2JhbFBvc2l0aW9uLng7CisgICAg
aW50IGdsb2JhbFBvc2l0aW9uWSA9IGdsb2JhbFBvc2l0aW9uLnk7CisKKyAgICByZXR1cm4gV2Vi
TW91c2VFdmVudCh0eXBlLCBidXR0b24sIHBvc2l0aW9uWCwgcG9zaXRpb25ZLCBnbG9iYWxQb3Np
dGlvblgsIGdsb2JhbFBvc2l0aW9uWSwgMCwgMCwgMCwgY2xpY2tjb3VudCwgbW9kaWZpZXJzLCB0
aW1lc3RhbXApOworfQorCitXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2Vi
V2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCAqZXZlbnQpCit7CisgICAgV2ViV2hlZWxFdmVudDo6
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkgID0gV2ViV2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdo
ZWVsRXZlbnQ7CisKKyAgICBkb3VibGUgdGltZXN0YW1wID0gZXZlbnQtPnRpbWU7IAorCisgICAg
ZmxvYXQgZGVsdGFYID0gMDsKKyAgICBmbG9hdCBkZWx0YVkgPSAwOworICAgIGZsb2F0IHdoZWVs
VGlja3NYID0gMDsKKyAgICBmbG9hdCB3aGVlbFRpY2tzWSA9IDA7CisKKyAgICAvLyBUYWtlbiBm
cm9tIFdlYkNvcmUgU2Nyb2xsQmFyIAorICAgIGZsb2F0IHNjcm9sbGJhclBpeGVsc1BlckxpbmUg
PSA0MC4wZjsKKyAgICBmbG9hdCBkZWx0YSA9IDE7CisgICAgR2RrUG9pbnQgcG9zaXRpb24gPSBw
b3NpdGlvbkZvckV2ZW50KChHZGtFdmVudEFueSAqKWV2ZW50KTsKKyAgICBHZGtQb2ludCBnbG9i
YWxQb3NpdGlvbiA9IGdsb2JhbFBvc2l0aW9uRm9yRXZlbnQoKEdka0V2ZW50QW55ICopZXZlbnQp
OworICAgIGludCBwb3NpdGlvblggPSBwb3NpdGlvbi54OworICAgIGludCBwb3NpdGlvblkgPSBw
b3NpdGlvbi55OworICAgIGludCBnbG9iYWxQb3NpdGlvblggPSBnbG9iYWxQb3NpdGlvbi54Owor
ICAgIGludCBnbG9iYWxQb3NpdGlvblkgPSBnbG9iYWxQb3NpdGlvbi55OworICAgIFdlYkV2ZW50
OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQtPnN0YXRlKTsK
KyAgICBzd2l0Y2ggKGV2ZW50LT5kaXJlY3Rpb24pIHsKKyAgICAKKyAgICBjYXNlIEdES19TQ1JP
TExfVVA6CisgICAgICAgIGRlbHRhWSA9IGRlbHRhOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdES19TQ1JPTExfRE9XTjoKKyAgICAgICAgZGVsdGFZID0gLWRlbHRhOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdES19TQ1JPTExfTEVGVDoKKyAgICAgICAgZGVsdGFYID0gZGVsdGE7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RLX1NDUk9MTF9SSUdIVDoKKyAgICAgICAgZGVsdGFY
ID0gLWRlbHRhOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB3aGVlbFRpY2tzWCA9IGRl
bHRhWDsKKyAgICB3aGVlbFRpY2tzWSA9IGRlbHRhWTsgCisgICAgZGVsdGFYICo9IHNjcm9sbGJh
clBpeGVsc1BlckxpbmU7CisgICAgZGVsdGFZICo9IHNjcm9sbGJhclBpeGVsc1BlckxpbmU7Cisg
ICAgCisgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBwb3NpdGlvblgs
IHBvc2l0aW9uWSwgZ2xvYmFsUG9zaXRpb25YLCBnbG9iYWxQb3NpdGlvblksIGRlbHRhWCwgZGVs
dGFZLCB3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1ksIGdyYW51bGFyaXR5LCBtb2RpZmllcnMsIHRp
bWVzdGFtcCk7Cit9CisKKy8vIFRha2VuIGZyb20gS2V5RXZlbnRHdGsuY3BwCitzdGF0aWMgU3Ry
aW5nIGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGd1aW50IGtleUNvZGUpCit7CisgICAgc3dp
dGNoIChrZXlDb2RlKSB7CisgICAgY2FzZSBHREtfTWVudToKKyAgICBjYXNlIEdES19BbHRfTDoK
KyAgICBjYXNlIEdES19BbHRfUjoKKyAgICAgICAgcmV0dXJuICJBbHQiOworICAgIGNhc2UgR0RL
X0NsZWFyOgorICAgICAgICByZXR1cm4gIkNsZWFyIjsKKyAgICBjYXNlIEdES19Eb3duOgorICAg
ICAgICByZXR1cm4gIkRvd24iOworICAgICAgICAvLyAiRW5kIgorICAgIGNhc2UgR0RLX0VuZDoK
KyAgICAgICAgcmV0dXJuICJFbmQiOworICAgICAgICAvLyAiRW50ZXIiCisgICAgY2FzZSBHREtf
SVNPX0VudGVyOgorICAgIGNhc2UgR0RLX0tQX0VudGVyOgorICAgIGNhc2UgR0RLX1JldHVybjoK
KyAgICAgICAgcmV0dXJuICJFbnRlciI7CisgICAgY2FzZSBHREtfRXhlY3V0ZToKKyAgICAgICAg
cmV0dXJuICJFeGVjdXRlIjsKKyAgICBjYXNlIEdES19GMToKKyAgICAgICAgcmV0dXJuICJGMSI7
CisgICAgY2FzZSBHREtfRjI6CisgICAgICAgIHJldHVybiAiRjIiOworICAgIGNhc2UgR0RLX0Yz
OgorICAgICAgICByZXR1cm4gIkYzIjsKKyAgICBjYXNlIEdES19GNDoKKyAgICAgICAgcmV0dXJu
ICJGNCI7CisgICAgY2FzZSBHREtfRjU6CisgICAgICAgIHJldHVybiAiRjUiOworICAgIGNhc2Ug
R0RLX0Y2OgorICAgICAgICByZXR1cm4gIkY2IjsKKyAgICBjYXNlIEdES19GNzoKKyAgICAgICAg
cmV0dXJuICJGNyI7CisgICAgY2FzZSBHREtfRjg6CisgICAgICAgIHJldHVybiAiRjgiOworICAg
IGNhc2UgR0RLX0Y5OgorICAgICAgICByZXR1cm4gIkY5IjsKKyAgICBjYXNlIEdES19GMTA6Cisg
ICAgICAgIHJldHVybiAiRjEwIjsKKyAgICBjYXNlIEdES19GMTE6CisgICAgICAgIHJldHVybiAi
RjExIjsKKyAgICBjYXNlIEdES19GMTI6CisgICAgICAgIHJldHVybiAiRjEyIjsKKyAgICBjYXNl
IEdES19GMTM6CisgICAgICAgIHJldHVybiAiRjEzIjsKKyAgICBjYXNlIEdES19GMTQ6CisgICAg
ICAgIHJldHVybiAiRjE0IjsKKyAgICBjYXNlIEdES19GMTU6CisgICAgICAgIHJldHVybiAiRjE1
IjsKKyAgICBjYXNlIEdES19GMTY6CisgICAgICAgIHJldHVybiAiRjE2IjsKKyAgICBjYXNlIEdE
S19GMTc6CisgICAgICAgIHJldHVybiAiRjE3IjsKKyAgICBjYXNlIEdES19GMTg6CisgICAgICAg
IHJldHVybiAiRjE4IjsKKyAgICBjYXNlIEdES19GMTk6CisgICAgICAgIHJldHVybiAiRjE5IjsK
KyAgICBjYXNlIEdES19GMjA6CisgICAgICAgIHJldHVybiAiRjIwIjsKKyAgICBjYXNlIEdES19G
MjE6CisgICAgICAgIHJldHVybiAiRjIxIjsKKyAgICBjYXNlIEdES19GMjI6CisgICAgICAgIHJl
dHVybiAiRjIyIjsKKyAgICBjYXNlIEdES19GMjM6CisgICAgICAgIHJldHVybiAiRjIzIjsKKyAg
ICBjYXNlIEdES19GMjQ6CisgICAgICAgIHJldHVybiAiRjI0IjsKKyAgICBjYXNlIEdES19IZWxw
OgorICAgICAgICByZXR1cm4gIkhlbHAiOworICAgIGNhc2UgR0RLX0hvbWU6CisgICAgICAgIHJl
dHVybiAiSG9tZSI7CisgICAgY2FzZSBHREtfSW5zZXJ0OgorICAgICAgICByZXR1cm4gIkluc2Vy
dCI7CisgICAgY2FzZSBHREtfTGVmdDoKKyAgICAgICAgcmV0dXJuICJMZWZ0IjsKKyAgICBjYXNl
IEdES19QYWdlX0Rvd246CisgICAgICAgIHJldHVybiAiUGFnZURvd24iOworICAgIGNhc2UgR0RL
X1BhZ2VfVXA6CisgICAgICAgIHJldHVybiAiUGFnZVVwIjsKKyAgICBjYXNlIEdES19QYXVzZToK
KyAgICAgICAgcmV0dXJuICJQYXVzZSI7CisgICAgY2FzZSBHREtfMzI3MF9QcmludFNjcmVlbjoK
KyAgICAgICAgcmV0dXJuICJQcmludFNjcmVlbiI7CisgICAgY2FzZSBHREtfUmlnaHQ6CisgICAg
ICAgIHJldHVybiAiUmlnaHQiOworICAgIGNhc2UgR0RLX1NlbGVjdDoKKyAgICAgICAgcmV0dXJu
ICJTZWxlY3QiOworICAgIGNhc2UgR0RLX1VwOgorICAgICAgICByZXR1cm4gIlVwIjsKKyAgICAg
ICAgLy8gU3RhbmRhcmQgc2F5cyB0aGF0IERFTCBiZWNvbWVzIFUrMDA3Ri4KKyAgICBjYXNlIEdE
S19EZWxldGU6CisgICAgICAgIHJldHVybiAiVSswMDdGIjsKKyAgICBjYXNlIEdES19CYWNrU3Bh
Y2U6CisgICAgICAgIHJldHVybiAiVSswMDA4IjsKKyAgICBjYXNlIEdES19JU09fTGVmdF9UYWI6
CisgICAgY2FzZSBHREtfMzI3MF9CYWNrVGFiOgorICAgIGNhc2UgR0RLX1RhYjoKKyAgICAgICAg
cmV0dXJuICJVKzAwMDkiOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZv
cm1hdCgiVSslMDRYIiwgZ2RrX2tleXZhbF90b191bmljb2RlKGdka19rZXl2YWxfdG9fdXBwZXIo
a2V5Q29kZSkpKTsKKyAgICB9Cit9CisKKy8vIFRha2VuIGZyb20gS2V5RXZlbnRHdGsuY3BwCitz
dGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQodW5zaWduZWQgaW50IGtleWNvZGUp
Cit7CisgICAgc3dpdGNoIChrZXljb2RlKSB7CisgICAgY2FzZSBHREtfS1BfMDoKKyAgICAgICAg
cmV0dXJuIFZLX05VTVBBRDA7IC8vICg2MCkgTnVtZXJpYyBrZXlwYWQgMCBrZXkKKyAgICBjYXNl
IEdES19LUF8xOgorICAgICAgICByZXR1cm4gVktfTlVNUEFEMTsgLy8gKDYxKSBOdW1lcmljIGtl
eXBhZCAxIGtleQorICAgIGNhc2UgR0RLX0tQXzI6CisgICAgICAgIHJldHVybiBWS19OVU1QQUQy
OyAvLyAoNjIpIE51bWVyaWMga2V5cGFkIDIga2V5CisgICAgY2FzZSBHREtfS1BfMzoKKyAgICAg
ICAgcmV0dXJuIFZLX05VTVBBRDM7IC8vICg2MykgTnVtZXJpYyBrZXlwYWQgMyBrZXkKKyAgICBj
YXNlIEdES19LUF80OgorICAgICAgICByZXR1cm4gVktfTlVNUEFENDsgLy8gKDY0KSBOdW1lcmlj
IGtleXBhZCA0IGtleQorICAgIGNhc2UgR0RLX0tQXzU6CisgICAgICAgIHJldHVybiBWS19OVU1Q
QUQ1OyAvLyAoNjUpIE51bWVyaWMga2V5cGFkIDUga2V5CisgICAgY2FzZSBHREtfS1BfNjoKKyAg
ICAgICAgcmV0dXJuIFZLX05VTVBBRDY7IC8vICg2NikgTnVtZXJpYyBrZXlwYWQgNiBrZXkKKyAg
ICBjYXNlIEdES19LUF83OgorICAgICAgICByZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1l
cmljIGtleXBhZCA3IGtleQorICAgIGNhc2UgR0RLX0tQXzg6CisgICAgICAgIHJldHVybiBWS19O
VU1QQUQ4OyAvLyAoNjgpIE51bWVyaWMga2V5cGFkIDgga2V5CisgICAgY2FzZSBHREtfS1BfOToK
KyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDk7IC8vICg2OSkgTnVtZXJpYyBrZXlwYWQgOSBrZXkK
KyAgICBjYXNlIEdES19LUF9NdWx0aXBseToKKyAgICAgICAgcmV0dXJuIFZLX01VTFRJUExZOyAv
LyAoNkEpIE11bHRpcGx5IGtleQorICAgIGNhc2UgR0RLX0tQX0FkZDoKKyAgICAgICAgcmV0dXJu
IFZLX0FERDsgLy8gKDZCKSBBZGQga2V5CisgICAgY2FzZSBHREtfS1BfU3VidHJhY3Q6CisgICAg
ICAgIHJldHVybiBWS19TVUJUUkFDVDsgLy8gKDZEKSBTdWJ0cmFjdCBrZXkKKyAgICBjYXNlIEdE
S19LUF9EZWNpbWFsOgorICAgICAgICByZXR1cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNpbWFs
IGtleQorICAgIGNhc2UgR0RLX0tQX0RpdmlkZToKKyAgICAgICAgcmV0dXJuIFZLX0RJVklERTsg
Ly8gKDZGKSBEaXZpZGUga2V5CisKKyAgICBjYXNlIEdES19LUF9QYWdlX1VwOgorICAgICAgICBy
ZXR1cm4gVktfUFJJT1I7IC8vICgyMSkgUEFHRSBVUCBrZXkKKyAgICBjYXNlIEdES19LUF9QYWdl
X0Rvd246CisgICAgICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkKKyAg
ICBjYXNlIEdES19LUF9FbmQ6CisgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtl
eQorICAgIGNhc2UgR0RLX0tQX0hvbWU6CisgICAgICAgIHJldHVybiBWS19IT01FOyAvLyAoMjQp
IEhPTUUga2V5CisgICAgY2FzZSBHREtfS1BfTGVmdDoKKyAgICAgICAgcmV0dXJuIFZLX0xFRlQ7
IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKKyAgICBjYXNlIEdES19LUF9VcDoKKyAgICAgICAgcmV0
dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQorICAgIGNhc2UgR0RLX0tQX1JpZ2h0Ogor
ICAgICAgICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cga2V5CisgICAgY2Fz
ZSBHREtfS1BfRG93bjoKKyAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJP
VyBrZXkKKworICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKKyAgICAgICAgcmV0dXJuIFZLX0JBQ0s7
IC8vICgwOCkgQkFDS1NQQUNFIGtleQorICAgIGNhc2UgR0RLX0lTT19MZWZ0X1RhYjoKKyAgICBj
YXNlIEdES18zMjcwX0JhY2tUYWI6CisgICAgY2FzZSBHREtfVGFiOgorICAgICAgICByZXR1cm4g
VktfVEFCOyAvLyAoMDkpIFRBQiBrZXkKKyAgICBjYXNlIEdES19DbGVhcjoKKyAgICAgICAgcmV0
dXJuIFZLX0NMRUFSOyAvLyAoMEMpIENMRUFSIGtleQorICAgIGNhc2UgR0RLX0lTT19FbnRlcjoK
KyAgICBjYXNlIEdES19LUF9FbnRlcjoKKyAgICBjYXNlIEdES19SZXR1cm46CisgICAgICAgIHJl
dHVybiBWS19SRVRVUk47IC8vICgwRCkgUmV0dXJuIGtleQorICAgIGNhc2UgR0RLX1NoaWZ0X0w6
CisgICAgY2FzZSBHREtfU2hpZnRfUjoKKyAgICAgICAgcmV0dXJuIFZLX1NISUZUOyAvLyAoMTAp
IFNISUZUIGtleQorICAgIGNhc2UgR0RLX0NvbnRyb2xfTDoKKyAgICBjYXNlIEdES19Db250cm9s
X1I6CisgICAgICAgIHJldHVybiBWS19DT05UUk9MOyAvLyAoMTEpIENUUkwga2V5CisgICAgY2Fz
ZSBHREtfTWVudToKKyAgICAgICAgcmV0dXJuIFZLX0FQUFM7IC8vICg1RCkgQXBwbGljYXRpb25z
IGtleSAoTmF0dXJhbCBrZXlib2FyZCkKKyAgICBjYXNlIEdES19BbHRfTDoKKyAgICBjYXNlIEdE
S19BbHRfUjoKKyAgICAgICAgcmV0dXJuIFZLX01FTlU7IC8vICgxMikgQUxUIGtleQorCisgICAg
Y2FzZSBHREtfUGF1c2U6CisgICAgICAgIHJldHVybiBWS19QQVVTRTsgLy8gKDEzKSBQQVVTRSBr
ZXkKKyAgICBjYXNlIEdES19DYXBzX0xvY2s6CisgICAgICAgIHJldHVybiBWS19DQVBJVEFMOyAv
LyAoMTQpIENBUFMgTE9DSyBrZXkKKyAgICBjYXNlIEdES19LYW5hX0xvY2s6CisgICAgY2FzZSBH
REtfS2FuYV9TaGlmdDoKKyAgICAgICAgcmV0dXJuIFZLX0tBTkE7IC8vICgxNSkgSW5wdXQgTWV0
aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUKKyAgICBjYXNlIEdES19IYW5ndWw6CisgICAgICAg
IHJldHVybiBWS19IQU5HVUw7IC8vIFZLX0hBTkdVTCAoMTUpIElNRSBIYW5ndWwgbW9kZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZLX0ZJTkFMICgxOCkgSU1FIGZpbmFsIG1vZGUK
KyAgICBjYXNlIEdES19IYW5ndWxfSGFuamE6CisgICAgICAgIHJldHVybiBWS19IQU5KQTsgLy8g
KDE5KSBJTUUgSGFuamEgbW9kZQorICAgIGNhc2UgR0RLX0thbmppOgorICAgICAgICByZXR1cm4g
VktfS0FOSkk7IC8vICgxOSkgSU1FIEthbmppIG1vZGUKKyAgICBjYXNlIEdES19Fc2NhcGU6Cisg
ICAgICAgIHJldHVybiBWS19FU0NBUEU7IC8vICgxQikgRVNDIGtleQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBWS19DT05WRVJUICgxQykgSU1FIGNvbnZlcnQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVktfTk9OQ09OVkVSVCAoMUQpIElNRSBub25jb252ZXJ0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFZLX0FDQ0VQVCAoMUUpIElNRSBhY2NlcHQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVktfTU9ERUNIQU5HRSAoMUYpIElNRSBtb2RlIGNoYW5nZSBy
ZXF1ZXN0CisgICAgY2FzZSBHREtfc3BhY2U6CisgICAgICAgIHJldHVybiBWS19TUEFDRTsgLy8g
KDIwKSBTUEFDRUJBUgorICAgIGNhc2UgR0RLX1BhZ2VfVXA6CisgICAgICAgIHJldHVybiBWS19Q
UklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQorICAgIGNhc2UgR0RLX1BhZ2VfRG93bjoKKyAgICAg
ICAgcmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFHRSBET1dOIGtleQorICAgIGNhc2UgR0RLX0Vu
ZDoKKyAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIzKSBFTkQga2V5CisgICAgY2FzZSBHREtf
SG9tZToKKyAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKKyAgICBjYXNl
IEdES19MZWZ0OgorICAgICAgICByZXR1cm4gVktfTEVGVDsgLy8gKDI1KSBMRUZUIEFSUk9XIGtl
eQorICAgIGNhc2UgR0RLX1VwOgorICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikgVVAgQVJS
T1cga2V5CisgICAgY2FzZSBHREtfUmlnaHQ6CisgICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8g
KDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICBjYXNlIEdES19Eb3duOgorICAgICAgICByZXR1cm4g
VktfRE9XTjsgLy8gKDI4KSBET1dOIEFSUk9XIGtleQorICAgIGNhc2UgR0RLX1NlbGVjdDoKKyAg
ICAgICAgcmV0dXJuIFZLX1NFTEVDVDsgLy8gKDI5KSBTRUxFQ1Qga2V5CisgICAgY2FzZSBHREtf
UHJpbnQ6CisgICAgICAgIHJldHVybiBWS19QUklOVDsgLy8gKDJBKSBQUklOVCBrZXkKKyAgICBj
YXNlIEdES19FeGVjdXRlOgorICAgICAgICByZXR1cm4gVktfRVhFQ1VURTsgLy8gKDJCKSBFWEVD
VVRFIGtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHVubm8gb24gdGhpcworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSBHREtfUHJpbnRTY3JlZW46CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gVktfU05BUFNIT1Q7IC8vICgyQykgUFJJTlQg
U0NSRUVOIGtleQorICAgIGNhc2UgR0RLX0luc2VydDoKKyAgICAgICAgcmV0dXJuIFZLX0lOU0VS
VDsgLy8gKDJEKSBJTlMga2V5CisgICAgY2FzZSBHREtfRGVsZXRlOgorICAgICAgICByZXR1cm4g
VktfREVMRVRFOyAvLyAoMkUpIERFTCBrZXkKKyAgICBjYXNlIEdES19IZWxwOgorICAgICAgICBy
ZXR1cm4gVktfSEVMUDsgLy8gKDJGKSBIRUxQIGtleQorICAgIGNhc2UgR0RLXzA6CisgICAgY2Fz
ZSBHREtfcGFyZW5yaWdodDoKKyAgICAgICAgcmV0dXJuIFZLXzA7IC8vICgzMCkgMCkga2V5Cisg
ICAgY2FzZSBHREtfMToKKyAgICBjYXNlIEdES19leGNsYW06CisgICAgICAgIHJldHVybiBWS18x
OyAvLyAoMzEpIDEgISBrZXkKKyAgICBjYXNlIEdES18yOgorICAgIGNhc2UgR0RLX2F0OgorICAg
ICAgICByZXR1cm4gVktfMjsgLy8gKDMyKSAyICYga2V5CisgICAgY2FzZSBHREtfMzoKKyAgICBj
YXNlIEdES19udW1iZXJzaWduOgorICAgICAgICByZXR1cm4gVktfMzsgLy8gY2FzZSAnMyc6IGNh
c2UgJyMnOworICAgIGNhc2UgR0RLXzQ6CisgICAgY2FzZSBHREtfZG9sbGFyOiAvLyAoMzQpIDQg
a2V5ICckJzsKKyAgICAgICAgcmV0dXJuIFZLXzQ7CisgICAgY2FzZSBHREtfNToKKyAgICBjYXNl
IEdES19wZXJjZW50OgorICAgICAgICByZXR1cm4gVktfNTsgLy8gKDM1KSA1IGtleSAgJyUnCisg
ICAgY2FzZSBHREtfNjoKKyAgICBjYXNlIEdES19hc2NpaWNpcmN1bToKKyAgICAgICAgcmV0dXJu
IFZLXzY7IC8vICAoMzYpIDYga2V5ICAnXicKKyAgICBjYXNlIEdES183OgorICAgIGNhc2UgR0RL
X2FtcGVyc2FuZDoKKyAgICAgICAgcmV0dXJuIFZLXzc7IC8vICAoMzcpIDcga2V5ICBjYXNlICcm
JworICAgIGNhc2UgR0RLXzg6CisgICAgY2FzZSBHREtfYXN0ZXJpc2s6CisgICAgICAgIHJldHVy
biBWS184OyAvLyAgKDM4KSA4IGtleSAgJyonCisgICAgY2FzZSBHREtfOToKKyAgICBjYXNlIEdE
S19wYXJlbmxlZnQ6CisgICAgICAgIHJldHVybiBWS185OyAvLyAgKDM5KSA5IGtleSAnKCcKKyAg
ICBjYXNlIEdES19hOgorICAgIGNhc2UgR0RLX0E6CisgICAgICAgIHJldHVybiBWS19BOyAvLyAg
KDQxKSBBIGtleSBjYXNlICdhJzogY2FzZSAnQSc6IHJldHVybiAweDQxOworICAgIGNhc2UgR0RL
X2I6CisgICAgY2FzZSBHREtfQjoKKyAgICAgICAgcmV0dXJuIFZLX0I7IC8vICAoNDIpIEIga2V5
IGNhc2UgJ2InOiBjYXNlICdCJzogcmV0dXJuIDB4NDI7CisgICAgY2FzZSBHREtfYzoKKyAgICBj
YXNlIEdES19DOgorICAgICAgICByZXR1cm4gVktfQzsgLy8gICg0MykgQyBrZXkgY2FzZSAnYyc6
IGNhc2UgJ0MnOiByZXR1cm4gMHg0MzsKKyAgICBjYXNlIEdES19kOgorICAgIGNhc2UgR0RLX0Q6
CisgICAgICAgIHJldHVybiBWS19EOyAvLyAgKDQ0KSBEIGtleSBjYXNlICdkJzogY2FzZSAnRCc6
IHJldHVybiAweDQ0OworICAgIGNhc2UgR0RLX2U6CisgICAgY2FzZSBHREtfRToKKyAgICAgICAg
cmV0dXJuIFZLX0U7IC8vICAoNDUpIEUga2V5IGNhc2UgJ2UnOiBjYXNlICdFJzogcmV0dXJuIDB4
NDU7CisgICAgY2FzZSBHREtfZjoKKyAgICBjYXNlIEdES19GOgorICAgICAgICByZXR1cm4gVktf
RjsgLy8gICg0NikgRiBrZXkgY2FzZSAnZic6IGNhc2UgJ0YnOiByZXR1cm4gMHg0NjsKKyAgICBj
YXNlIEdES19nOgorICAgIGNhc2UgR0RLX0c6CisgICAgICAgIHJldHVybiBWS19HOyAvLyAgKDQ3
KSBHIGtleSBjYXNlICdnJzogY2FzZSAnRyc6IHJldHVybiAweDQ3OworICAgIGNhc2UgR0RLX2g6
CisgICAgY2FzZSBHREtfSDoKKyAgICAgICAgcmV0dXJuIFZLX0g7IC8vICAoNDgpIEgga2V5IGNh
c2UgJ2gnOiBjYXNlICdIJzogcmV0dXJuIDB4NDg7CisgICAgY2FzZSBHREtfaToKKyAgICBjYXNl
IEdES19JOgorICAgICAgICByZXR1cm4gVktfSTsgLy8gICg0OSkgSSBrZXkgY2FzZSAnaSc6IGNh
c2UgJ0knOiByZXR1cm4gMHg0OTsKKyAgICBjYXNlIEdES19qOgorICAgIGNhc2UgR0RLX0o6Cisg
ICAgICAgIHJldHVybiBWS19KOyAvLyAgKDRBKSBKIGtleSBjYXNlICdqJzogY2FzZSAnSic6IHJl
dHVybiAweDRBOworICAgIGNhc2UgR0RLX2s6CisgICAgY2FzZSBHREtfSzoKKyAgICAgICAgcmV0
dXJuIFZLX0s7IC8vICAoNEIpIEsga2V5IGNhc2UgJ2snOiBjYXNlICdLJzogcmV0dXJuIDB4NEI7
CisgICAgY2FzZSBHREtfbDoKKyAgICBjYXNlIEdES19MOgorICAgICAgICByZXR1cm4gVktfTDsg
Ly8gICg0QykgTCBrZXkgY2FzZSAnbCc6IGNhc2UgJ0wnOiByZXR1cm4gMHg0QzsKKyAgICBjYXNl
IEdES19tOgorICAgIGNhc2UgR0RLX006CisgICAgICAgIHJldHVybiBWS19NOyAvLyAgKDREKSBN
IGtleSBjYXNlICdtJzogY2FzZSAnTSc6IHJldHVybiAweDREOworICAgIGNhc2UgR0RLX246Cisg
ICAgY2FzZSBHREtfTjoKKyAgICAgICAgcmV0dXJuIFZLX047IC8vICAoNEUpIE4ga2V5IGNhc2Ug
J24nOiBjYXNlICdOJzogcmV0dXJuIDB4NEU7CisgICAgY2FzZSBHREtfbzoKKyAgICBjYXNlIEdE
S19POgorICAgICAgICByZXR1cm4gVktfTzsgLy8gICg0RikgTyBrZXkgY2FzZSAnbyc6IGNhc2Ug
J08nOiByZXR1cm4gMHg0RjsKKyAgICBjYXNlIEdES19wOgorICAgIGNhc2UgR0RLX1A6CisgICAg
ICAgIHJldHVybiBWS19QOyAvLyAgKDUwKSBQIGtleSBjYXNlICdwJzogY2FzZSAnUCc6IHJldHVy
biAweDUwOworICAgIGNhc2UgR0RLX3E6CisgICAgY2FzZSBHREtfUToKKyAgICAgICAgcmV0dXJu
IFZLX1E7IC8vICAoNTEpIFEga2V5IGNhc2UgJ3EnOiBjYXNlICdRJzogcmV0dXJuIDB4NTE7Cisg
ICAgY2FzZSBHREtfcjoKKyAgICBjYXNlIEdES19SOgorICAgICAgICByZXR1cm4gVktfUjsgLy8g
ICg1MikgUiBrZXkgY2FzZSAncic6IGNhc2UgJ1InOiByZXR1cm4gMHg1MjsKKyAgICBjYXNlIEdE
S19zOgorICAgIGNhc2UgR0RLX1M6CisgICAgICAgIHJldHVybiBWS19TOyAvLyAgKDUzKSBTIGtl
eSBjYXNlICdzJzogY2FzZSAnUyc6IHJldHVybiAweDUzOworICAgIGNhc2UgR0RLX3Q6CisgICAg
Y2FzZSBHREtfVDoKKyAgICAgICAgcmV0dXJuIFZLX1Q7IC8vICAoNTQpIFQga2V5IGNhc2UgJ3Qn
OiBjYXNlICdUJzogcmV0dXJuIDB4NTQ7CisgICAgY2FzZSBHREtfdToKKyAgICBjYXNlIEdES19V
OgorICAgICAgICByZXR1cm4gVktfVTsgLy8gICg1NSkgVSBrZXkgY2FzZSAndSc6IGNhc2UgJ1Un
OiByZXR1cm4gMHg1NTsKKyAgICBjYXNlIEdES192OgorICAgIGNhc2UgR0RLX1Y6CisgICAgICAg
IHJldHVybiBWS19WOyAvLyAgKDU2KSBWIGtleSBjYXNlICd2JzogY2FzZSAnVic6IHJldHVybiAw
eDU2OworICAgIGNhc2UgR0RLX3c6CisgICAgY2FzZSBHREtfVzoKKyAgICAgICAgcmV0dXJuIFZL
X1c7IC8vICAoNTcpIFcga2V5IGNhc2UgJ3cnOiBjYXNlICdXJzogcmV0dXJuIDB4NTc7CisgICAg
Y2FzZSBHREtfeDoKKyAgICBjYXNlIEdES19YOgorICAgICAgICByZXR1cm4gVktfWDsgLy8gICg1
OCkgWCBrZXkgY2FzZSAneCc6IGNhc2UgJ1gnOiByZXR1cm4gMHg1ODsKKyAgICBjYXNlIEdES195
OgorICAgIGNhc2UgR0RLX1k6CisgICAgICAgIHJldHVybiBWS19ZOyAvLyAgKDU5KSBZIGtleSBj
YXNlICd5JzogY2FzZSAnWSc6IHJldHVybiAweDU5OworICAgIGNhc2UgR0RLX3o6CisgICAgY2Fz
ZSBHREtfWjoKKyAgICAgICAgcmV0dXJuIFZLX1o7IC8vICAoNUEpIFoga2V5IGNhc2UgJ3onOiBj
YXNlICdaJzogcmV0dXJuIDB4NUE7CisgICAgY2FzZSBHREtfTWV0YV9MOgorICAgICAgICByZXR1
cm4gVktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0dXJhbCBr
ZXlib2FyZCkKKyAgICBjYXNlIEdES19NZXRhX1I6CisgICAgICAgIHJldHVybiBWS19SV0lOOyAv
LyAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChOYXR1cmFsIGtleWJvYXJkKQorICAgICAgICAvLyBW
S19TTEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQorICAgICAgICAvLyBWS19TRVBBUkFUT1Ig
KDZDKSBTZXBhcmF0b3Iga2V5CisgICAgICAgIC8vIFZLX1NVQlRSQUNUICg2RCkgU3VidHJhY3Qg
a2V5CisgICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQorICAgICAgICAvLyBW
S19ESVZJREUgKDZGKSBEaXZpZGUga2V5CisgICAgICAgIC8vIGhhbmRsZWQgYnkga2V5IGNvZGUg
YWJvdmUKKworICAgIGNhc2UgR0RLX051bV9Mb2NrOgorICAgICAgICByZXR1cm4gVktfTlVNTE9D
SzsgLy8gKDkwKSBOVU0gTE9DSyBrZXkKKworICAgIGNhc2UgR0RLX1Njcm9sbF9Mb2NrOgorICAg
ICAgICByZXR1cm4gVktfU0NST0xMOyAvLyAoOTEpIFNDUk9MTCBMT0NLIGtleQorCisgICAgICAg
IC8vIFZLX0xTSElGVCAoQTApIExlZnQgU0hJRlQga2V5CisgICAgICAgIC8vIFZLX1JTSElGVCAo
QTEpIFJpZ2h0IFNISUZUIGtleQorICAgICAgICAvLyBWS19MQ09OVFJPTCAoQTIpIExlZnQgQ09O
VFJPTCBrZXkKKyAgICAgICAgLy8gVktfUkNPTlRST0wgKEEzKSBSaWdodCBDT05UUk9MIGtleQor
ICAgICAgICAvLyBWS19MTUVOVSAoQTQpIExlZnQgTUVOVSBrZXkKKyAgICAgICAgLy8gVktfUk1F
TlUgKEE1KSBSaWdodCBNRU5VIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX0JBQ0sgKEE2KSBX
aW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBrZXkKKyAgICAgICAgLy8gVktfQlJPV1NFUl9G
T1JXQVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZvcndhcmQga2V5CisgICAgICAg
IC8vIFZLX0JST1dTRVJfUkVGUkVTSCAoQTgpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBSZWZy
ZXNoIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgU3RvcCBrZXkKKyAgICAgICAgLy8gVktfQlJPV1NFUl9TRUFSQ0ggKEFBKSBXaW5k
b3dzIDIwMDAvWFA6IEJyb3dzZXIgU2VhcmNoIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX0ZB
Vk9SSVRFUyAoQUIpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGYXZvcml0ZXMga2V5CisgICAg
ICAgIC8vIFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdGFy
dCBhbmQgSG9tZSBrZXkKKyAgICAgICAgLy8gVktfVk9MVU1FX01VVEUgKEFEKSBXaW5kb3dzIDIw
MDAvWFA6IFZvbHVtZSBNdXRlIGtleQorICAgICAgICAvLyBWS19WT0xVTUVfRE9XTiAoQUUpIFdp
bmRvd3MgMjAwMC9YUDogVm9sdW1lIERvd24ga2V5CisgICAgICAgIC8vIFZLX1ZPTFVNRV9VUCAo
QUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQorICAgICAgICAvLyBWS19NRURJQV9O
RVhUX1RSQUNLIChCMCkgV2luZG93cyAyMDAwL1hQOiBOZXh0IFRyYWNrIGtleQorICAgICAgICAv
LyBWS19NRURJQV9QUkVWX1RSQUNLIChCMSkgV2luZG93cyAyMDAwL1hQOiBQcmV2aW91cyBUcmFj
ayBrZXkKKyAgICAgICAgLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDogU3Rv
cCBNZWRpYSBrZXkKKyAgICAgICAgLy8gVktfTUVESUFfUExBWV9QQVVTRSAoQjMpIFdpbmRvd3Mg
MjAwMC9YUDogUGxheS9QYXVzZSBNZWRpYSBrZXkKKyAgICAgICAgLy8gVktfTEFVTkNIX01BSUwg
KEI0KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IE1haWwga2V5CisgICAgICAgIC8vIFZLX0xBVU5D
SF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKKyAg
ICAgICAgLy8gVktfTEFVTkNIX0FQUDEgKEI2KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxp
Y2F0aW9uIDEga2V5CisgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAyIChCNykgV2luZG93cyAyMDAw
L1hQOiBTdGFydCBBcHBsaWNhdGlvbiAyIGtleQorCisgICAgICAgIC8vIFZLX09FTV8xIChCQSkg
VXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2Fy
ZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6
JyBrZXkKKyAgICBjYXNlIEdES19zZW1pY29sb246CisgICAgY2FzZSBHREtfY29sb246CisgICAg
ICAgIHJldHVybiBWS19PRU1fMTsgLy8gY2FzZSAnOyc6IGNhc2UgJzonOiByZXR1cm4gMHhCQTsK
KyAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291
bnRyeS9yZWdpb24sIHRoZSAnKycga2V5CisgICAgY2FzZSBHREtfcGx1czoKKyAgICBjYXNlIEdE
S19lcXVhbDoKKyAgICAgICAgcmV0dXJuIFZLX09FTV9QTFVTOyAvLyBjYXNlICc9JzogY2FzZSAn
Kyc6IHJldHVybiAweEJCOworICAgICAgICAvLyBWS19PRU1fQ09NTUEgKEJDKSBXaW5kb3dzIDIw
MDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLCcga2V5CisgICAgY2FzZSBHREtf
Y29tbWE6CisgICAgY2FzZSBHREtfbGVzczoKKyAgICAgICAgcmV0dXJuIFZLX09FTV9DT01NQTsg
Ly8gY2FzZSAnLCc6IGNhc2UgJzwnOiByZXR1cm4gMHhCQzsKKyAgICAgICAgLy8gVktfT0VNX01J
TlVTIChCRCkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy0n
IGtleQorICAgIGNhc2UgR0RLX21pbnVzOgorICAgIGNhc2UgR0RLX3VuZGVyc2NvcmU6CisgICAg
ICAgIHJldHVybiBWS19PRU1fTUlOVVM7IC8vIGNhc2UgJy0nOiBjYXNlICdfJzogcmV0dXJuIDB4
QkQ7CisgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBh
bnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5CisgICAgY2FzZSBHREtfcGVyaW9kOgorICAg
IGNhc2UgR0RLX2dyZWF0ZXI6CisgICAgICAgIHJldHVybiBWS19PRU1fUEVSSU9EOyAvLyBjYXNl
ICcuJzogY2FzZSAnPic6IHJldHVybiAweEJFOworICAgICAgICAvLyBWS19PRU1fMiAoQkYpIFVz
ZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQu
IFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICcvPycg
a2V5CisgICAgY2FzZSBHREtfc2xhc2g6CisgICAgY2FzZSBHREtfcXVlc3Rpb246CisgICAgICAg
IHJldHVybiBWS19PRU1fMjsgLy8gY2FzZSAnLyc6IGNhc2UgJz8nOiByZXR1cm4gMHhCRjsKKyAg
ICAgICAgLy8gVktfT0VNXzMgKEMwKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7
IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3Rh
bmRhcmQga2V5Ym9hcmQsIHRoZSAnYH4nIGtleQorICAgIGNhc2UgR0RLX2FzY2lpdGlsZGU6Cisg
ICAgY2FzZSBHREtfcXVvdGVsZWZ0OgorICAgICAgICByZXR1cm4gVktfT0VNXzM7IC8vIGNhc2Ug
J2AnOiBjYXNlICd+JzogcmV0dXJuIDB4QzA7CisgICAgICAgIC8vIFZLX09FTV80IChEQikgVXNl
ZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4g
V2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1t7JyBr
ZXkKKyAgICBjYXNlIEdES19icmFja2V0bGVmdDoKKyAgICBjYXNlIEdES19icmFjZWxlZnQ6Cisg
ICAgICAgIHJldHVybiBWS19PRU1fNDsgLy8gY2FzZSAnWyc6IGNhc2UgJ3snOiByZXR1cm4gMHhE
QjsKKyAgICAgICAgLy8gVktfT0VNXzUgKERDKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJh
Y3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUg
VVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXHwnIGtleQorICAgIGNhc2UgR0RLX2JhY2tzbGFz
aDoKKyAgICBjYXNlIEdES19iYXI6CisgICAgICAgIHJldHVybiBWS19PRU1fNTsgLy8gY2FzZSAn
XFwnOiBjYXNlICd8JzogcmV0dXJuIDB4REM7CisgICAgICAgIC8vIFZLX09FTV82IChERCkgVXNl
ZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4g
V2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ119JyBr
ZXkKKyAgICBjYXNlIEdES19icmFja2V0cmlnaHQ6CisgICAgY2FzZSBHREtfYnJhY2VyaWdodDoK
KyAgICAgICAgcmV0dXJuIFZLX09FTV82OyAvLyBjYXNlICddJzogY2FzZSAnfSc6IHJldHVybiAw
eEREOworICAgICAgICAvLyBWS19PRU1fNyAoREUpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hh
cmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRo
ZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdzaW5nbGUtcXVvdGUvZG91YmxlLXF1b3RlJyBr
ZXkKKyAgICBjYXNlIEdES19xdW90ZXJpZ2h0OgorICAgIGNhc2UgR0RLX3F1b3RlZGJsOgorICAg
ICAgICByZXR1cm4gVktfT0VNXzc7IC8vIGNhc2UgJ1wnJzogY2FzZSAnIic6IHJldHVybiAweERF
OworICAgICAgICAvLyBWS19PRU1fOCAoREYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFj
dGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuCisgICAgICAgIC8vIFZLX09FTV8xMDIgKEUy
KSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkgb3IgdGhlIGJh
Y2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKKyAgICAgICAgLy8gVktfUFJP
Q0VTU0tFWSAoRTUpIFdpbmRvd3MgOTUvOTgvTWUsIFdpbmRvd3MgTlQgNC4wLCBXaW5kb3dzIDIw
MDAvWFA6IElNRSBQUk9DRVNTIGtleQorICAgICAgICAvLyBWS19QQUNLRVQgKEU3KSBXaW5kb3dz
IDIwMDAvWFA6IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJhY3RlcnMgYXMgaWYgdGhleSB3ZXJl
IGtleXN0cm9rZXMuIFRoZSBWS19QQUNLRVQga2V5IGlzIHRoZSBsb3cgd29yZCBvZiBhIDMyLWJp
dCBWaXJ0dWFsIEtleSB2YWx1ZSB1c2VkIGZvciBub24ta2V5Ym9hcmQgaW5wdXQgbWV0aG9kcy4g
Rm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBSZW1hcmsgaW4gS0VZQkRJTlBVVCxTZW5kSW5wdXQs
IFdNX0tFWURPV04sIGFuZCBXTV9LRVlVUAorICAgICAgICAvLyBWS19BVFROIChGNikgQXR0biBr
ZXkKKyAgICAgICAgLy8gVktfQ1JTRUwgKEY3KSBDclNlbCBrZXkKKyAgICAgICAgLy8gVktfRVhT
RUwgKEY4KSBFeFNlbCBrZXkKKyAgICAgICAgLy8gVktfRVJFT0YgKEY5KSBFcmFzZSBFT0Yga2V5
CisgICAgICAgIC8vIFZLX1BMQVkgKEZBKSBQbGF5IGtleQorICAgICAgICAvLyBWS19aT09NIChG
QikgWm9vbSBrZXkKKyAgICAgICAgLy8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQgZm9yIGZ1dHVy
ZSB1c2UKKyAgICAgICAgLy8gVktfUEExIChGRCkgUEExIGtleQorICAgICAgICAvLyBWS19PRU1f
Q0xFQVIgKEZFKSBDbGVhciBrZXkKKyAgICBjYXNlIEdES19GMToKKyAgICBjYXNlIEdES19GMjoK
KyAgICBjYXNlIEdES19GMzoKKyAgICBjYXNlIEdES19GNDoKKyAgICBjYXNlIEdES19GNToKKyAg
ICBjYXNlIEdES19GNjoKKyAgICBjYXNlIEdES19GNzoKKyAgICBjYXNlIEdES19GODoKKyAgICBj
YXNlIEdES19GOToKKyAgICBjYXNlIEdES19GMTA6CisgICAgY2FzZSBHREtfRjExOgorICAgIGNh
c2UgR0RLX0YxMjoKKyAgICBjYXNlIEdES19GMTM6CisgICAgY2FzZSBHREtfRjE0OgorICAgIGNh
c2UgR0RLX0YxNToKKyAgICBjYXNlIEdES19GMTY6CisgICAgY2FzZSBHREtfRjE3OgorICAgIGNh
c2UgR0RLX0YxODoKKyAgICBjYXNlIEdES19GMTk6CisgICAgY2FzZSBHREtfRjIwOgorICAgIGNh
c2UgR0RLX0YyMToKKyAgICBjYXNlIEdES19GMjI6CisgICAgY2FzZSBHREtfRjIzOgorICAgIGNh
c2UgR0RLX0YyNDoKKyAgICAgICAgcmV0dXJuIFZLX0YxICsgKGtleWNvZGUgLSBHREtfRjEpOwor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCit9CisKKy8vIFRha2Vu
IGZyb20gS2V5RXZlbnRHdGsuY3BwCitzdGF0aWMgU3RyaW5nIHNpbmdsZUNoYXJhY3RlclN0cmlu
ZyhndWludCB2YWwpCit7CisgICAgc3dpdGNoICh2YWwpIHsKKyAgICBjYXNlIEdES19JU09fRW50
ZXI6CisgICAgY2FzZSBHREtfS1BfRW50ZXI6CisgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAg
ICByZXR1cm4gU3RyaW5nKCJcciIpOworICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKKyAgICAgICAg
cmV0dXJuIFN0cmluZygiXHg4Iik7CisgICAgY2FzZSBHREtfVGFiOgorICAgICAgICByZXR1cm4g
U3RyaW5nKCJcdCIpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGd1bmljaGFyIGMgPSBnZGtfa2V5
dmFsX3RvX3VuaWNvZGUodmFsKTsKKyAgICAgICAgZ2xvbmcgbndjOworICAgICAgICBndW5pY2hh
cjIqIHVjaGFyMTYgPSBnX3VjczRfdG9fdXRmMTYoJmMsIDEsIDAsICZud2MsIDApOworCisgICAg
ICAgIFN0cmluZyByZXRWYWw7CisgICAgICAgIGlmICh1Y2hhcjE2KQorICAgICAgICAgICAgcmV0
VmFsID0gU3RyaW5nKChVQ2hhciopdWNoYXIxNiwgbndjKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmV0VmFsID0gU3RyaW5nKCk7CisKKyAgICAgICAgZ19mcmVlKHVjaGFyMTYpOworCisg
ICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIFdlYkV2ZW50
OjpNb2RpZmllcnMgbW9kaWZpZXJzRm9yQ3VycmVudEtleVN0YXRlKGd1aW50IHN0YXRlKQorewor
ICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKHN0YXRlICYgR0RLX0NPTlRST0xf
TUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpDb250cm9sS2V5OworICAgIGlm
ICgoc3RhdGUgJiBHREtfU0hJRlRfTUFTSykgfHwgKHN0YXRlID09IEdES18zMjcwX0JhY2tUYWIp
KQorICAgICAgICBtb2RpZmllcnMgfD0gV2ViRXZlbnQ6OlNoaWZ0S2V5OworICAgIGlmIChzdGF0
ZSAmIEdES19NT0QxX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6QWx0S2V5
OworICAgIGlmIChzdGF0ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBX
ZWJFdmVudDo6TWV0YUtleTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlm
aWVycz4obW9kaWZpZXJzKTsKKworfQorCitXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9y
eTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgV2Vi
RXZlbnQ6OlR5cGUgdHlwZSAgICAgICAgICAgICA9IChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JF
TEVBU0UpID8gV2ViRXZlbnQ6OktleVVwIDogV2ViRXZlbnQ6OktleURvd247IAorICAgIFN0cmlu
ZyB0ZXh0ICAgICAgICAgICAgICAgICAgICAgPSBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXZlbnQt
PmtleXZhbCk7CisgICAgU3RyaW5nIHVubW9kaWZpZWRUZXh0ICAgICAgICAgICA9IHNpbmdsZUNo
YXJhY3RlclN0cmluZyhldmVudC0+a2V5dmFsKTsKKyAgICBTdHJpbmcga2V5SWRlbnRpZmllciAg
ICAgICAgICAgID0ga2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoZXZlbnQtPmtleXZhbCk7Cisg
ICAgaW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSAgICAgICA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5
RXZlbnQoZXZlbnQtPmtleXZhbCk7CisgICAgaW50IG5hdGl2ZVZpcnR1YWxLZXlDb2RlICAgICAg
ICA9IHN0YXRpY19jYXN0PGludD4oZXZlbnQtPmtleXZhbCk7CisgICAgYm9vbCBhdXRvUmVwZWF0
ICAgICAgICAgICAgICAgICA9IGZhbHNlOyAKKyAgICBib29sIGlzS2V5cGFkICAgICAgICAgICAg
ICAgICAgID0gZXZlbnQtPmtleXZhbCA+PSBHREtfS1BfU3BhY2UgJiYgZXZlbnQtPmtleXZhbCA8
PSBHREtfS1BfOTsKKyAgICBib29sIGlzU3lzdGVtS2V5ICAgICAgICAgICAgICAgID0gZmFsc2U7
CisgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgICA9IG1vZGlmaWVyc0ZvckN1cnJl
bnRLZXlTdGF0ZShldmVudC0+c3RhdGUpOworICAgIGRvdWJsZSB0aW1lc3RhbXAgICAgICAgICAg
ICAgICAgID0gZXZlbnQtPnRpbWU7CisgICAgcmV0dXJuIFdlYktleWJvYXJkRXZlbnQodHlwZSwg
dGV4dCwgdW5tb2RpZmllZFRleHQsIGtleUlkZW50aWZpZXIsIHdpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSwgbmF0aXZlVmlydHVhbEtleUNvZGUsIGF1dG9SZXBlYXQsIGlzS2V5cGFkLCBpc1N5c3RlbUtl
eSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAgYi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
Q29udGV4dEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhNDA4
ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3Rr
LmNwcApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJXZWJDb250ZXh0LmgiCisKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXVEY6OlN0cmluZyBXZWJDb250ZXh0OjphcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkKK3sK
KyAgICByZXR1cm4gV2ViQ29yZTo6Y2FjaGVTdG9yYWdlKCkuY2FjaGVEaXJlY3RvcnkoKTsKK30K
Kwordm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3Jz
R3RrLmNwcCBiL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3Jz
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWI5ODE5Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJF
cnJvcnNHdGsuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAo
YykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgIldlYkVycm9ycy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjZGVmaW5l
IFdlYlVSTEVycm9yRG9tYWluICAgIlVSTEVycm9yRG9tYWluIgorCitlbnVtIHsKKyAgICBXZWJV
UkxFcnJvclVua25vd24gPSAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICBXZWJVUkxF
cnJvckNhbmNlbGxlZCA9ICAgICAgICAgICAgICAgICAgICAgICAtOTk5LAorICAgIFdlYlVSTEVy
cm9yQmFkVVJMID0gICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDAwLAorICAgIFdlYlVSTEVy
cm9yVGltZWRPdXQgPSAgICAgICAgICAgICAgICAgICAgICAgIC0xMDAxLAorICAgIFdlYlVSTEVy
cm9yVW5zdXBwb3J0ZWRVUkwgPSAgICAgICAgICAgICAgICAgIC0xMDAyLAorICAgIFdlYlVSTEVy
cm9yQ2Fubm90RmluZEhvc3QgPSAgICAgICAgICAgICAgICAgIC0xMDAzLAorICAgIFdlYlVSTEVy
cm9yQ2Fubm90Q29ubmVjdFRvSG9zdCA9ICAgICAgICAgICAgIC0xMDA0LAorICAgIFdlYlVSTEVy
cm9yTmV0d29ya0Nvbm5lY3Rpb25Mb3N0ID0gICAgICAgICAgIC0xMDA1LAorICAgIFdlYlVSTEVy
cm9yRE5TTG9va3VwRmFpbGVkID0gICAgICAgICAgICAgICAgIC0xMDA2LAorICAgIFdlYlVSTEVy
cm9ySFRUUFRvb01hbnlSZWRpcmVjdHMgPSAgICAgICAgICAgIC0xMDA3LAorICAgIFdlYlVSTEVy
cm9yUmVzb3VyY2VVbmF2YWlsYWJsZSA9ICAgICAgICAgICAgIC0xMDA4LAorICAgIFdlYlVSTEVy
cm9yTm90Q29ubmVjdGVkVG9JbnRlcm5ldCA9ICAgICAgICAgIC0xMDA5LAorICAgIFdlYlVSTEVy
cm9yUmVkaXJlY3RUb05vbkV4aXN0ZW50TG9jYXRpb24gPSAgIC0xMDEwLAorICAgIFdlYlVSTEVy
cm9yQmFkU2VydmVyUmVzcG9uc2UgPSAgICAgICAgICAgICAgIC0xMDExLAorICAgIFdlYlVSTEVy
cm9yVXNlckNhbmNlbGxlZEF1dGhlbnRpY2F0aW9uID0gICAgIC0xMDEyLAorICAgIFdlYlVSTEVy
cm9yVXNlckF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSAgICAgIC0xMDEzLAorICAgIFdlYlVSTEVy
cm9yWmVyb0J5dGVSZXNvdXJjZSA9ICAgICAgICAgICAgICAgIC0xMDE0LAorICAgIFdlYlVSTEVy
cm9yRmlsZURvZXNOb3RFeGlzdCA9ICAgICAgICAgICAgICAgIC0xMTAwLAorICAgIFdlYlVSTEVy
cm9yRmlsZUlzRGlyZWN0b3J5ID0gICAgICAgICAgICAgICAgIC0xMTAxLAorICAgIFdlYlVSTEVy
cm9yTm9QZXJtaXNzaW9uc1RvUmVhZEZpbGUgPSAgICAgICAgIC0xMTAyLAorICAgIFdlYlVSTEVy
cm9yU2VjdXJlQ29ubmVjdGlvbkZhaWxlZCA9ICAgICAgICAgIC0xMjAwLAorICAgIFdlYlVSTEVy
cm9yU2VydmVyQ2VydGlmaWNhdGVIYXNCYWREYXRlID0gICAgIC0xMjAxLAorICAgIFdlYlVSTEVy
cm9yU2VydmVyQ2VydGlmaWNhdGVVbnRydXN0ZWQgPSAgICAgIC0xMjAyLAorICAgIFdlYlVSTEVy
cm9yU2VydmVyQ2VydGlmaWNhdGVIYXNVbmtub3duUm9vdCA9IC0xMjAzLAorICAgIFdlYlVSTEVy
cm9yU2VydmVyQ2VydGlmaWNhdGVOb3RZZXRWYWxpZCA9ICAgIC0xMjA0LAorICAgIFdlYlVSTEVy
cm9yQ2xpZW50Q2VydGlmaWNhdGVSZWplY3RlZCA9ICAgICAgIC0xMjA1LAorICAgIFdlYlVSTEVy
cm9yQ2xpZW50Q2VydGlmaWNhdGVSZXF1aXJlZCA9ICAgICAgIC0xMjA2LAorICAgIFdlYlVSTEVy
cm9yQ2Fubm90TG9hZEZyb21OZXR3b3JrID0gICAgICAgICAgIC0yMDAwLAorCisgICAgLy8gRG93
bmxvYWQgYW5kIGZpbGUgSS9PIGVycm9ycworICAgIFdlYlVSTEVycm9yQ2Fubm90Q3JlYXRlRmls
ZSA9ICAgICAgICAgICAgICAgIC0zMDAwLAorICAgIFdlYlVSTEVycm9yQ2Fubm90T3BlbkZpbGUg
PSAgICAgICAgICAgICAgICAgIC0zMDAxLAorICAgIFdlYlVSTEVycm9yQ2Fubm90Q2xvc2VGaWxl
ID0gICAgICAgICAgICAgICAgIC0zMDAyLAorICAgIFdlYlVSTEVycm9yQ2Fubm90V3JpdGVUb0Zp
bGUgPSAgICAgICAgICAgICAgIC0zMDAzLAorICAgIFdlYlVSTEVycm9yQ2Fubm90UmVtb3ZlRmls
ZSA9ICAgICAgICAgICAgICAgIC0zMDA0LAorICAgIFdlYlVSTEVycm9yQ2Fubm90TW92ZUZpbGUg
PSAgICAgICAgICAgICAgICAgIC0zMDA1LAorICAgIFdlYlVSTEVycm9yRG93bmxvYWREZWNvZGlu
Z0ZhaWxlZE1pZFN0cmVhbSA9IC0zMDA2LAorICAgIFdlYlVSTEVycm9yRG93bmxvYWREZWNvZGlu
Z0ZhaWxlZFRvQ29tcGxldGUgPS0zMDA3LAorfTsKKworI2RlZmluZSBXZWJLaXRFcnJvckRvbWFp
biAgICJXZWJLaXRFcnJvckRvbWFpbiIKKworZW51bSB7CisgICAgV2ViS2l0RXJyb3JDYW5ub3RT
aG93TUlNRVR5cGUgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwLAorICAgIFdlYktp
dEVycm9yQ2Fubm90U2hvd1VSTCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEw
MSwKKyAgICBXZWJLaXRFcnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2UgPSAg
ICAgICAgICAgICAxMDIsCisgICAgV2ViS2l0RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCA9
ICAgICAgICAgICAgICAgICAgICAgICAgMTAzLAorfTsKKworZW51bSB7CisgICAgV2ViS2l0RXJy
b3JDYW5ub3RGaW5kUGx1Z0luID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwLAor
ICAgIFdlYktpdEVycm9yQ2Fubm90TG9hZFBsdWdJbiA9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDIwMSwKKyAgICBXZWJLaXRFcnJvckphdmFVbmF2YWlsYWJsZSA9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAyMDIsCit9OworCitlbnVtIHsKKyAgICBXZWJLaXRFcnJvckdl
b2xvY2F0aW9uTG9jYXRpb25Vbmtub3duICA9ICAgICAgICAgICAgICAgICAgICAzMDAsCit9Owor
CisjZGVmaW5lIFdlYktpdEVycm9yTUlNRVR5cGVLZXkgICAiV2ViS2l0RXJyb3JNSU1FVHlwZUtl
eSIKKyNkZWZpbmUgV2ViS2l0RXJyb3JQbHVnSW5OYW1lS2V5ICAgIldlYktpdEVycm9yUGx1Z0lu
TmFtZUtleSIKKyNkZWZpbmUgV2ViS2l0RXJyb3JQbHVnSW5QYWdlVVJMU3RyaW5nS2V5ICAgIldl
YktpdEVycm9yUGx1Z0luUGFnZVVSTFN0cmluZ0tleSIKKworI2RlZmluZSBXZWJQT1NJWEVycm9y
RG9tYWluICAgIk5TUE9TSVhFcnJvckRvbWFpbiIKKyNkZWZpbmUgV2ViUE9TSVhFcnJvckVDT05O
UkVTRVQgNTQKKworUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoU3RyaW5nKFdlYlVS
TEVycm9yRG9tYWluKSwgV2ViVVJMRXJyb3JDYW5jZWxsZWQsIHJlcXVlc3QudXJsKCkuc3RyaW5n
KCksIFN0cmluZygpKTsKK30KKworUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKFN0cmlu
ZyhXZWJLaXRFcnJvckRvbWFpbiksIFdlYktpdEVycm9yQ2Fubm90VXNlUmVzdHJpY3RlZFBvcnQs
IHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsKK30KKworUmVzb3VyY2VFcnJvciBj
YW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAg
IHJldHVybiBSZXNvdXJjZUVycm9yKFN0cmluZyhXZWJLaXRFcnJvckRvbWFpbiksIFdlYktpdEVy
cm9yQ2Fubm90U2hvd1VSTCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOworfQor
CitSZXNvdXJjZUVycm9yIGludGVycnVwdEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihTdHJpbmco
V2ViS2l0RXJyb3JEb21haW4pLCBXZWJLaXRFcnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xp
Y3lDaGFuZ2UsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsKK30KKworUmVzb3Vy
Y2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworfQorCitSZXNvdXJjZUVy
cm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdl
R3RrLmNwcCBiL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmViNjIwCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCkBAIC0w
LDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBN
b2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
IldlYlBhZ2UuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2Vi
RXZlbnQuaCIKKyNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKyAgICAKK3ZvaWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtUHJl
ZmVyZW5jZXNEaWRDaGFuZ2UoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIEN0cmxLZXkgPSAxIDw8
IDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgQWx0S2V5ID0gMSA8PCAxOworc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFNoaWZ0S2V5ID0gMSA8PCAyOworCitzdHJ1Y3QgS2V5RG93bkVudHJ5IHsKKyAg
ICB1bnNpZ25lZCB2aXJ0dWFsS2V5OworICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKKyAgICBjb25z
dCBjaGFyKiBuYW1lOworfTsKKworc3RydWN0IEtleVByZXNzRW50cnkgeworICAgIHVuc2lnbmVk
IGNoYXJDb2RlOworICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKKyAgICBjb25zdCBjaGFyKiBuYW1l
OworfTsKKworc3RhdGljIGNvbnN0IEtleURvd25FbnRyeSBrZXlEb3duRW50cmllc1tdID0gewor
ICAgIHsgVktfTEVGVCwgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlTGVmdCIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfTEVGVCwgICBTaGlmdEtleSwg
ICAgICAgICAgICJNb3ZlTGVmdEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICB9
LAorICAgIHsgVktfTEVGVCwgICBDdHJsS2V5LCAgICAgICAgICAgICJNb3ZlV29yZExlZnQiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfTEVGVCwgICBDdHJsS2V5
IHwgU2hpZnRLZXksICJNb3ZlV29yZExlZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAg
ICB9LAorICAgIHsgVktfUklHSFQsICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlUmlnaHQiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUklHSFQsICBTaGlm
dEtleSwgICAgICAgICAgICJNb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAg
ICAgICB9LAorICAgIHsgVktfUklHSFQsICBDdHJsS2V5LCAgICAgICAgICAgICJNb3ZlV29yZFJp
Z2h0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUklHSFQsICBD
dHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlV29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAg
ICAgICAgICB9LAorICAgIHsgVktfVVAsICAgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlVXAi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfVVAsICAg
ICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAg
ICAgICAgICAgICB9LAorICAgIHsgVktfUFJJT1IsICBTaGlmdEtleSwgICAgICAgICAgICJNb3Zl
UGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfRE9X
TiwgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlRG93biIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgVktfRE9XTiwgICBTaGlmdEtleSwgICAgICAgICAgICJN
b3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktf
TkVYVCwgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rp
b24iICAgICAgICAgICAgICB9LAorICAgIHsgVktfUFJJT1IsICAwLCAgICAgICAgICAgICAgICAg
ICJNb3ZlUGFnZVVwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
VktfTkVYVCwgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd24iICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfSE9NRSwgICAwLCAgICAgICAgICAgICAg
ICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICB9LAorICAg
IHsgVktfSE9NRSwgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmVB
bmRNb2RpZnlTZWxlY3Rpb24iICAgICB9LAorICAgIHsgVktfSE9NRSwgICBDdHJsS2V5LCAgICAg
ICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgICB9LAor
ICAgIHsgVktfSE9NRSwgICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlVG9CZWdpbm5pbmdPZkRv
Y3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIAorICAgIHsgVktfRU5ELCAgICAwLCAg
ICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAorICAgIHsgVktfRU5ELCAgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVG9FbmRP
ZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICB9LAorICAgIHsgVktfRU5ELCAgICBD
dHJsS2V5LCAgICAgICAgICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAorICAgIHsgVktfRU5ELCAgICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlVG9F
bmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICB9LAorICAgIAorICAgIHsgVktf
QkFDSywgICAwLCAgICAgICAgICAgICAgICAgICJEZWxldGVCYWNrd2FyZCIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfQkFDSywgICBTaGlmdEtleSwgICAgICAgICAg
ICJEZWxldGVCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
VktfREVMRVRFLCAwLCAgICAgICAgICAgICAgICAgICJEZWxldGVGb3J3YXJkIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfQkFDSywgICBDdHJsS2V5LCAgICAgICAg
ICAgICJEZWxldGVXb3JkQmFja3dhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAg
IHsgVktfREVMRVRFLCBDdHJsS2V5LCAgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIAorICAgIHsgJ0InLCAgICAgICBDdHJsS2V5
LCAgICAgICAgICAgICJUb2dnbGVCb2xkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAorICAgIHsgJ0knLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJUb2dnbGVJdGFsaWMi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIAorICAgIHsgVktfRVNDQVBF
LCAwLCAgICAgICAgICAgICAgICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgIHsgVktfT0VNX1BFUklPRCwgQ3RybEtleSwgICAgICAgICJDYW5j
ZWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfVEFC
LCAgICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgVktfVEFCLCAgICBTaGlmdEtleSwgICAgICAgICAgICJJ
bnNlcnRCYWNrdGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktf
UkVUVVJOLCAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCBDdHJsS2V5LCAgICAgICAgICAg
ICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
VktfUkVUVVJOLCBBbHRLZXksICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCBTaGlmdEtleSwgICAgICAg
ICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAg
IHsgVktfUkVUVVJOLCBBbHRLZXkgfCBTaGlmdEtleSwgICJJbnNlcnROZXdsaW5lIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIAorICAgIC8vIEl0J3Mgbm90IHF1aXRlIGNs
ZWFyIHdoZXRoZXIgY2xpcGJvYXJkIHNob3J0Y3V0cyBhbmQgVW5kby9SZWRvIHNob3VsZCBiZSBo
YW5kbGVkCisgICAgLy8gaW4gdGhlIGFwcGxpY2F0aW9uIG9yIGluIFdlYktpdC4gV2UgY2hvc2Ug
V2ViS2l0LgorICAgIHsgJ0MnLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJDb3B5IiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ1YnLCAgICAgICBD
dHJsS2V5LCAgICAgICAgICAgICJQYXN0ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAorICAgIHsgJ1gnLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJDdXQiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ0EnLCAgICAg
ICBDdHJsS2V5LCAgICAgICAgICAgICJTZWxlY3RBbGwiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgIHsgVktfSU5TRVJULCBDdHJsS2V5LCAgICAgICAgICAgICJDb3B5
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfREVM
RVRFLCBTaGlmdEtleSwgICAgICAgICAgICJDdXQiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgVktfSU5TRVJULCBTaGlmdEtleSwgICAgICAgICAgICJQ
YXN0ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ1on
LCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJVbmRvIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ1onLCAgICAgICBDdHJsS2V5IHwgU2hpZnRLZXks
ICJSZWRvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorfTsKKwor
c3RhdGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5UHJlc3NFbnRyaWVzW10gPSB7CisgICAgeyAn
XHQnLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHQnLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIklu
c2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHIn
LCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEN0cmxLZXksICAgICAgICAgICAgIkluc2Vy
dE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAg
IEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2VydE5l
d2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEFs
dEtleSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCit9OworCitjb25zdCBjaGFyKiBXZWJQYWdlOjppbnRlcnByZXRLZXlFdmVudChj
b25zdCBLZXlib2FyZEV2ZW50KiBldnQpCit7CisgICAgQVNTRVJUKGV2dC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgfHwgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtl
eXByZXNzRXZlbnQpOworICAgIAorICAgIHN0YXRpYyBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+
KiBrZXlEb3duQ29tbWFuZHNNYXAgPSAwOworICAgIHN0YXRpYyBIYXNoTWFwPGludCwgY29uc3Qg
Y2hhcio+KiBrZXlQcmVzc0NvbW1hbmRzTWFwID0gMDsKKyAgICAKKyAgICBpZiAoIWtleURvd25D
b21tYW5kc01hcCkgeworICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAgPSBuZXcgSGFzaE1hcDxp
bnQsIGNvbnN0IGNoYXIqPjsKKyAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcCA9IG5ldyBIYXNo
TWFwPGludCwgY29uc3QgY2hhcio+OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IChzaXplb2Yoa2V5RG93bkVudHJpZXMpIC8gc2l6ZW9mKGtleURvd25FbnRyaWVz
WzBdKSk7IGkrKykKKyAgICAgICAgICAgIGtleURvd25Db21tYW5kc01hcC0+c2V0KGtleURvd25F
bnRyaWVzW2ldLm1vZGlmaWVycyA8PCAxNiB8IGtleURvd25FbnRyaWVzW2ldLnZpcnR1YWxLZXks
IGtleURvd25FbnRyaWVzW2ldLm5hbWUpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IChzaXplb2Yoa2V5UHJlc3NFbnRyaWVzKSAvIHNpemVvZihrZXlQcmVzc0Vu
dHJpZXNbMF0pKTsgaSsrKQorICAgICAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcC0+c2V0KGtl
eVByZXNzRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlQcmVzc0VudHJpZXNbaV0uY2hh
ckNvZGUsIGtleVByZXNzRW50cmllc1tpXS5uYW1lKTsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgbW9kaWZpZXJzID0gMDsKKyAgICBpZiAoZXZ0LT5zaGlmdEtleSgpKQorICAgICAgICBtb2Rp
ZmllcnMgfD0gU2hpZnRLZXk7CisgICAgaWYgKGV2dC0+YWx0S2V5KCkpCisgICAgICAgIG1vZGlm
aWVycyB8PSBBbHRLZXk7CisgICAgaWYgKGV2dC0+Y3RybEtleSgpKQorICAgICAgICBtb2RpZmll
cnMgfD0gQ3RybEtleTsKKyAgICAKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmtleWRvd25FdmVudCkgeworICAgICAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwg
ZXZ0LT5rZXlFdmVudCgpLT53aW5kb3dzVmlydHVhbEtleUNvZGUoKTsKKyAgICAgICAgcmV0dXJu
IG1hcEtleSA/IGtleURvd25Db21tYW5kc01hcC0+Z2V0KG1hcEtleSkgOiAwOworICAgIH0KKyAg
ICAKKyAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwgZXZ0LT5jaGFyQ29kZSgpOwor
ICAgIHJldHVybiBtYXBLZXkgPyBrZXlQcmVzc0NvbW1hbmRzTWFwLT5nZXQobWFwS2V5KSA6IDA7
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3JvbGwoUGFnZSogcGFnZSwgU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Cit9CisKK2Jvb2wg
V2ViUGFnZTo6cGVyZm9ybURlZmF1bHRCZWhhdmlvckZvcktleUV2ZW50KGNvbnN0IFdlYktleWJv
YXJkRXZlbnQmIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgp
ICE9IFdlYkV2ZW50OjpLZXlEb3duICYmIGtleWJvYXJkRXZlbnQudHlwZSgpICE9IFdlYkV2ZW50
OjpSYXdLZXlEb3duKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGtleWJv
YXJkRXZlbnQud2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKKyAgICBjYXNlIFZLX0JBQ0s6Cisg
ICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnNoaWZ0S2V5KCkpCisgICAgICAgICAgICBtX3BhZ2Ut
PmdvRm9yd2FyZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BhZ2UtPmdvQmFjaygp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX1NQQUNFOgorICAgICAgICBzY3JvbGwobV9w
YWdlLmdldCgpLCBrZXlib2FyZEV2ZW50LnNoaWZ0S2V5KCkgPyBTY3JvbGxVcCA6IFNjcm9sbERv
d24sIFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfTEVGVDoKKyAg
ICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsTGVmdCwgU2Nyb2xsQnlMaW5lKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19SSUdIVDoKKyAgICAgICAgc2Nyb2xsKG1fcGFnZS5n
ZXQoKSwgU2Nyb2xsUmlnaHQsIFNjcm9sbEJ5TGluZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVktfVVA6CisgICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbFVwLCBTY3JvbGxC
eUxpbmUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX0RPV046CisgICAgICAgIHNjcm9s
bChtX3BhZ2UuZ2V0KCksIFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVktfSE9NRToKKyAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xs
VXAsIFNjcm9sbEJ5RG9jdW1lbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX0VORDoK
KyAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVu
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfUFJJT1I6CisgICAgICAgIHNjcm9sbCht
X3BhZ2UuZ2V0KCksIFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFZLX05FWFQ6CisgICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbERvd24s
IFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72684</attachid>
            <date>2010-11-02 09:43:51 -0700</date>
            <delta_ts>2011-01-07 07:22:02 -0800</delta_ts>
            <desc>WebEventFactory and WebErrors class implementation for GTK port</desc>
            <filename>WebEventFactory WebErrors Implementation.patch</filename>
            <type>text/plain</type>
            <size>37320</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTcwNSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MTcxOSkK
QEAgLTEsMyArMSwzMDMgQEAKKzIwMTAtMTAtMjggIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90
b3JvbGEuY29tPiBhbmQgUmF2aSBLYXNpYmhhdGxhIDxyYXZpLmthc2liaGF0bGFAbW90b3JvbGEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtH
VEtdIEltcGxlbWVudCBXZWJFdmVudEZhY3RvcnksIFdlYkVycm9ycywgTW9kdWxlLCBXZWJQYWdl
LCBXZWJDb250ZXh0LCAgTmF0aXZlS2V5Ym9hcmRFdmVudCBjbGFzc2VzIGZvciBXZWJLaXQyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMAorCisg
ICAgICAgICogU2hhcmVkL2d0azogQWRkZWQuCisgICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVu
dEZhY3RvcnkuY3BwOiBBZGRlZC4gR1RLIGltcGxlbWVudGF0aW9uIGZvciBXZWJNb3VzZUV2ZW50
LCBXZWJXaGVlbEV2ZW50LCBXZWJLZXlib2FyZEV2ZW50LgorICAgICAgICAoV2ViS2l0Ojpwb3Np
dGlvbkZvckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6Z2xvYmFsUG9zaXRpb25Gb3JFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OmNsaWNrQ291bnQpOgorICAgICAgICAoV2ViS2l0Ojptb2RpZmll
cnNGb3JFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OmJ1dHRvbkZvckV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUpOgorICAgICAgICAoV2ViS2l0Ojp3
aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6c2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6bW9kaWZpZXJzRm9yQ3VycmVudEtleVN0YXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2
ZW50KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0azogQWRkZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcDogQWRkZWQuIFN0
dWJiZWQgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBwb3J0LiBZZXQgdG8gaW1wbGVtZW50LgorICAg
ICAgICAoV2ViS2l0OjpjYW5jZWxsZWRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OmJsb2NrZWRF
cnJvcik6CisgICAgICAgIChXZWJLaXQ6OmNhbm5vdFNob3dVUkxFcnJvcik6CisgICAgICAgIChX
ZWJLaXQ6OmludGVycnVwdEZvclBvbGljeUNoYW5nZUVycm9yKToKKyAgICAgICAgKFdlYktpdDo6
Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpmaWxlRG9lc05vdEV4
aXN0RXJyb3IpOgorCiAyMDEwLTEwLTI3ICBLaW1tbyBLaW5udW5lbiAgPGtpbW1vLnQua2lubnVu
ZW5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4
OiBXZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCShyZXZpc2lvbiA1MTcxOSkKQEAg
LTAsMCArMSw3NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
IldlYkV2ZW50RmFjdG9yeS5oIgorCisjaW5jbHVkZSAiV2luZG93c0tleWJvYXJkQ29kZXMuaCIK
KworI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGlubGluZSBHZGtQb2ludCBwb3NpdGlvbkZvckV2
ZW50KEdka0V2ZW50QW55KiBldmVudCkKK3sKKyAgICBHZGtQb2ludCBwb2ludDsKKyAgICBpZiAo
ZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9QUkVTUyB8fCBldmVudC0+dHlwZSA9PSBHREtfQlVU
VE9OX1JFTEVBU0UpIHsKKyAgICAgICAgcG9pbnQueCA9IChnaW50KSgoR2RrRXZlbnRCdXR0b24g
KilldmVudCktPng7CisgICAgICAgIHBvaW50LnkgPSAoZ2ludCkoKEdka0V2ZW50QnV0dG9uICop
ZXZlbnQpLT55OworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX01PVElPTl9OT1RJ
RlkpIHsKKyAgICAgICAgcG9pbnQueCA9IChnaW50KSgoR2RrRXZlbnRNb3Rpb24gKilldmVudCkt
Png7CisgICAgICAgIHBvaW50LnkgPSAoZ2ludCkoKEdka0V2ZW50TW90aW9uICopZXZlbnQpLT55
OworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX1NDUk9MTCkgeworICAgICAgICBw
b2ludC54ID0gKGdpbnQpKChHZGtFdmVudFNjcm9sbCAqKWV2ZW50KS0+eDsKKyAgICAgICAgcG9p
bnQueSA9IChnaW50KSgoR2RrRXZlbnRTY3JvbGwgKilldmVudCktPnk7CisgICAgfQorCisgICAg
cmV0dXJuIHBvaW50OworfQorCitzdGF0aWMgaW5saW5lIEdka1BvaW50IGdsb2JhbFBvc2l0aW9u
Rm9yRXZlbnQoR2RrRXZlbnRBbnkqIGV2ZW50KQoreworICAgIEdka1BvaW50IHBvaW50OworICAg
IGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTIHx8IGV2ZW50LT50eXBlID09IEdE
S19CVVRUT05fUkVMRUFTRSkgeworICAgICAgICBwb2ludC54ID0gKChHZGtFdmVudEJ1dHRvbiAq
KWV2ZW50KS0+eF9yb290OworICAgICAgICBwb2ludC55ID0gKChHZGtFdmVudEJ1dHRvbiAqKWV2
ZW50KS0+eV9yb290OworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX01PVElPTl9O
T1RJRlkpIHsKKyAgICAgICAgcG9pbnQueCA9ICgoR2RrRXZlbnRNb3Rpb24gKilldmVudCktPnhf
cm9vdDsgCisgICAgICAgIHBvaW50LnkgPSAoKEdka0V2ZW50TW90aW9uICopZXZlbnQpLT55X3Jv
b3Q7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfU0NST0xMKSB7CisgICAgICAg
IHBvaW50LnggPSAoKEdka0V2ZW50U2Nyb2xsICopZXZlbnQpLT54X3Jvb3Q7CisgICAgICAgIHBv
aW50LnkgPSAoKEdka0V2ZW50U2Nyb2xsICopZXZlbnQpLT55X3Jvb3Q7CisgICAgfQorCisgICAg
cmV0dXJuIHBvaW50OworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IGNsaWNrQ291bnQoR2RrRXZl
bnRBbnkqIGV2ZW50KQoreworICAgIGludCBzQ2xpY2tDb3VudCA9IDA7CisgICAgc3dpdGNoIChl
dmVudC0+dHlwZSkgeworICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKKyAgICAgICAgc0NsaWNr
Q291bnQgPSAxOworICAgICAgICBicmVhazsgCisgICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoK
KyAgICAgICAgc0NsaWNrQ291bnQgPSAyOworICAgICAgICBicmVhazsgCisgICAgY2FzZSBHREtf
M0JVVFRPTl9QUkVTUzoKKyAgICAgICAgc0NsaWNrQ291bnQgPSAzOworICAgICAgICBicmVhazsg
CisgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKKyAgICBjYXNlIEdES19CVVRUT05fUkVMRUFT
RToKKyAgICAgICAgc0NsaWNrQ291bnQgPSAwOworICAgICAgICBicmVhazsgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKKyAgICByZXR1cm4gc0Ns
aWNrQ291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmll
cnNGb3JFdmVudChndWludCBzdGF0ZSkKK3sKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOwor
ICAgIGlmIChzdGF0ZSAmIEdES19DT05UUk9MX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBX
ZWJFdmVudDo6Q29udHJvbEtleTsKKyAgICBpZiAoc3RhdGUgJiBHREtfU0hJRlRfTUFTSykKKyAg
ICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpTaGlmdEtleTsKKyAgICBpZiAoc3RhdGUgJiBH
REtfTU9EMV9NQVNLKQorICAgICAgICBtb2RpZmllcnMgfD0gV2ViRXZlbnQ6OkFsdEtleTsKKyAg
ICBpZiAoc3RhdGUgJiBHREtfTUVUQV9NQVNLKQorICAgICAgICBtb2RpZmllcnMgfD0gV2ViRXZl
bnQ6Ok1ldGFLZXk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+
KG1vZGlmaWVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1
dHRvbkZvckV2ZW50KEdka0V2ZW50QW55ICpldmVudCkKK3sKKyAgICB1bnNpZ25lZCBidXR0b24g
PSAwOworICAgIEdka0V2ZW50TW90aW9uKiBtb3Rpb247CisgICAgR2RrRXZlbnRCdXR0b24qIGJF
dmVudDsKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfTU9USU9OX05P
VElGWToKKyAgICAgICAgbW90aW9uID0gKEdka0V2ZW50TW90aW9uKikgZXZlbnQ7CisgICAgICAg
IGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOworICAgICAgICBpZiAobW90aW9uLT5z
dGF0ZSAmIEdES19CVVRUT04xX01BU0spCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2
ZW50OjpMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JV
VFRPTjJfTUFTSykKKyAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1
dHRvbjsKKyAgICAgICAgZWxzZSBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04zX01BU0sp
CisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfMkJV
VFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLX0JV
VFRPTl9SRUxFQVNFOgorICAgICAgICBiRXZlbnQgPSAoR2RrRXZlbnRCdXR0b24gKilldmVudDsK
KyAgICAgICAgaWYgKGJFdmVudC0+YnV0dG9uID09IDEpCisgICAgICAgICAgICBidXR0b24gPSBX
ZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmIChiRXZlbnQtPmJ1dHRv
biA9PSAyKQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9u
OworICAgICAgICBlbHNlIGlmIChiRXZlbnQtPmJ1dHRvbiA9PSAzKQorICAgICAgICAgICAgYnV0
dG9uID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07ICAgICAgICAKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViTW91c2VFdmVudDo6QnV0dG9uPihidXR0b24pOworfQor
ICAKKworV2ViTW91c2VFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQo
R2RrRXZlbnRBbnkgKmV2ZW50KQoreworICAgIGd1aW50IHRpbWVzdGFtcCA9IDA7IAorICAgIFdl
YkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlm
aWVycz4oMCk7CisgICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvbiA9IGJ1dHRvbkZvckV2
ZW50KGV2ZW50KTsKKyAgICBHZGtQb2ludCBwb3NpdGlvbiA9IHBvc2l0aW9uRm9yRXZlbnQoZXZl
bnQpOworICAgIEdka1BvaW50IGdsb2JhbFBvc2l0aW9uID0gZ2xvYmFsUG9zaXRpb25Gb3JFdmVu
dCgoR2RrRXZlbnRBbnkgKilldmVudCk7CisgICAgaW50IGNsaWNrY291bnQgPSBjbGlja0NvdW50
KGV2ZW50KTsKKyAgICBXZWJFdmVudDo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6
OlR5cGU+KDApOworICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKyAgICBjYXNlIEdES19NT1RJ
T05fTk9USUZZOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlTW92ZTsKKyAgICAgICAg
dGltZXN0YW1wID0gKChHZGtFdmVudE1vdGlvbiAqKWV2ZW50KS0+dGltZTsKKyAgICAgICAgbW9k
aWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoKChHZGtFdmVudE1vdGlvbiAqKWV2ZW50KS0+c3Rh
dGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6CisgICAgICAg
IHRpbWVzdGFtcCA9ICgoR2RrRXZlbnRCdXR0b24gKilldmVudCktPnRpbWU7CisgICAgICAgIG1v
ZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KCgoR2RrRXZlbnRCdXR0b24gKilldmVudCktPnN0
YXRlKTsKKyAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpNb3VzZURvd247CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxFQVNFOgorICAgICAgICB0aW1lc3RhbXAgPSAoKEdk
a0V2ZW50QnV0dG9uICopZXZlbnQpLT50aW1lOworICAgICAgICBtb2RpZmllcnMgPSBtb2RpZmll
cnNGb3JFdmVudCgoKEdka0V2ZW50QnV0dG9uICopZXZlbnQpLT5zdGF0ZSk7CisgICAgICAgIHR5
cGUgPSBXZWJFdmVudDo6TW91c2VVcDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdCA6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGludCBwb3NpdGlvblgg
PSBwb3NpdGlvbi54OworICAgIGludCBwb3NpdGlvblkgPSBwb3NpdGlvbi55OworICAgIGludCBn
bG9iYWxQb3NpdGlvblggPSBnbG9iYWxQb3NpdGlvbi54OworICAgIGludCBnbG9iYWxQb3NpdGlv
blkgPSBnbG9iYWxQb3NpdGlvbi55OworCisgICAgcmV0dXJuIFdlYk1vdXNlRXZlbnQodHlwZSwg
YnV0dG9uLCBwb3NpdGlvblgsIHBvc2l0aW9uWSwgZ2xvYmFsUG9zaXRpb25YLCBnbG9iYWxQb3Np
dGlvblksIDAsIDAsIDAsIGNsaWNrY291bnQsIG1vZGlmaWVycywgdGltZXN0YW1wKTsKK30KKwor
V2ViV2hlZWxFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoR2RrRXZl
bnRTY3JvbGwgKmV2ZW50KQoreworICAgIFdlYldoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51
bGFyaXR5ICA9IFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OworCisgICAg
ZG91YmxlIHRpbWVzdGFtcCA9IGV2ZW50LT50aW1lOyAKKworICAgIGZsb2F0IGRlbHRhWCA9IDA7
CisgICAgZmxvYXQgZGVsdGFZID0gMDsKKyAgICBmbG9hdCB3aGVlbFRpY2tzWCA9IDA7CisgICAg
ZmxvYXQgd2hlZWxUaWNrc1kgPSAwOworCisgICAgLy8gVGFrZW4gZnJvbSBXZWJDb3JlIFNjcm9s
bEJhciAKKyAgICBmbG9hdCBzY3JvbGxiYXJQaXhlbHNQZXJMaW5lID0gNDAuMGY7CisgICAgZmxv
YXQgZGVsdGEgPSAxOworICAgIEdka1BvaW50IHBvc2l0aW9uID0gcG9zaXRpb25Gb3JFdmVudCgo
R2RrRXZlbnRBbnkgKilldmVudCk7CisgICAgR2RrUG9pbnQgZ2xvYmFsUG9zaXRpb24gPSBnbG9i
YWxQb3NpdGlvbkZvckV2ZW50KChHZGtFdmVudEFueSAqKWV2ZW50KTsKKyAgICBpbnQgcG9zaXRp
b25YID0gcG9zaXRpb24ueDsKKyAgICBpbnQgcG9zaXRpb25ZID0gcG9zaXRpb24ueTsKKyAgICBp
bnQgZ2xvYmFsUG9zaXRpb25YID0gZ2xvYmFsUG9zaXRpb24ueDsKKyAgICBpbnQgZ2xvYmFsUG9z
aXRpb25ZID0gZ2xvYmFsUG9zaXRpb24ueTsKKyAgICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlm
aWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50LT5zdGF0ZSk7CisgICAgc3dpdGNoIChldmVu
dC0+ZGlyZWN0aW9uKSB7CisgICAgCisgICAgY2FzZSBHREtfU0NST0xMX1VQOgorICAgICAgICBk
ZWx0YVkgPSBkZWx0YTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfU0NST0xMX0RPV046
CisgICAgICAgIGRlbHRhWSA9IC1kZWx0YTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtf
U0NST0xMX0xFRlQ6CisgICAgICAgIGRlbHRhWCA9IGRlbHRhOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdES19TQ1JPTExfUklHSFQ6CisgICAgICAgIGRlbHRhWCA9IC1kZWx0YTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgd2hlZWxUaWNrc1ggPSBkZWx0YVg7CisgICAgd2hlZWxU
aWNrc1kgPSBkZWx0YVk7IAorICAgIGRlbHRhWCAqPSBzY3JvbGxiYXJQaXhlbHNQZXJMaW5lOwor
ICAgIGRlbHRhWSAqPSBzY3JvbGxiYXJQaXhlbHNQZXJMaW5lOworICAgIAorICAgIHJldHVybiBX
ZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgcG9zaXRpb25YLCBwb3NpdGlvblksIGdsb2Jh
bFBvc2l0aW9uWCwgZ2xvYmFsUG9zaXRpb25ZLCBkZWx0YVgsIGRlbHRhWSwgd2hlZWxUaWNrc1gs
IHdoZWVsVGlja3NZLCBncmFudWxhcml0eSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApOworfQorCisv
LyBUYWtlbiBmcm9tIEtleUV2ZW50R3RrLmNwcAorc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVy
Rm9yR2RrS2V5Q29kZShndWludCBrZXlDb2RlKQoreworICAgIHN3aXRjaCAoa2V5Q29kZSkgewor
ICAgIGNhc2UgR0RLX01lbnU6CisgICAgY2FzZSBHREtfQWx0X0w6CisgICAgY2FzZSBHREtfQWx0
X1I6CisgICAgICAgIHJldHVybiAiQWx0IjsKKyAgICBjYXNlIEdES19DbGVhcjoKKyAgICAgICAg
cmV0dXJuICJDbGVhciI7CisgICAgY2FzZSBHREtfRG93bjoKKyAgICAgICAgcmV0dXJuICJEb3du
IjsKKyAgICAgICAgLy8gIkVuZCIKKyAgICBjYXNlIEdES19FbmQ6CisgICAgICAgIHJldHVybiAi
RW5kIjsKKyAgICAgICAgLy8gIkVudGVyIgorICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKKyAgICBj
YXNlIEdES19LUF9FbnRlcjoKKyAgICBjYXNlIEdES19SZXR1cm46CisgICAgICAgIHJldHVybiAi
RW50ZXIiOworICAgIGNhc2UgR0RLX0V4ZWN1dGU6CisgICAgICAgIHJldHVybiAiRXhlY3V0ZSI7
CisgICAgY2FzZSBHREtfRjE6CisgICAgICAgIHJldHVybiAiRjEiOworICAgIGNhc2UgR0RLX0Yy
OgorICAgICAgICByZXR1cm4gIkYyIjsKKyAgICBjYXNlIEdES19GMzoKKyAgICAgICAgcmV0dXJu
ICJGMyI7CisgICAgY2FzZSBHREtfRjQ6CisgICAgICAgIHJldHVybiAiRjQiOworICAgIGNhc2Ug
R0RLX0Y1OgorICAgICAgICByZXR1cm4gIkY1IjsKKyAgICBjYXNlIEdES19GNjoKKyAgICAgICAg
cmV0dXJuICJGNiI7CisgICAgY2FzZSBHREtfRjc6CisgICAgICAgIHJldHVybiAiRjciOworICAg
IGNhc2UgR0RLX0Y4OgorICAgICAgICByZXR1cm4gIkY4IjsKKyAgICBjYXNlIEdES19GOToKKyAg
ICAgICAgcmV0dXJuICJGOSI7CisgICAgY2FzZSBHREtfRjEwOgorICAgICAgICByZXR1cm4gIkYx
MCI7CisgICAgY2FzZSBHREtfRjExOgorICAgICAgICByZXR1cm4gIkYxMSI7CisgICAgY2FzZSBH
REtfRjEyOgorICAgICAgICByZXR1cm4gIkYxMiI7CisgICAgY2FzZSBHREtfRjEzOgorICAgICAg
ICByZXR1cm4gIkYxMyI7CisgICAgY2FzZSBHREtfRjE0OgorICAgICAgICByZXR1cm4gIkYxNCI7
CisgICAgY2FzZSBHREtfRjE1OgorICAgICAgICByZXR1cm4gIkYxNSI7CisgICAgY2FzZSBHREtf
RjE2OgorICAgICAgICByZXR1cm4gIkYxNiI7CisgICAgY2FzZSBHREtfRjE3OgorICAgICAgICBy
ZXR1cm4gIkYxNyI7CisgICAgY2FzZSBHREtfRjE4OgorICAgICAgICByZXR1cm4gIkYxOCI7Cisg
ICAgY2FzZSBHREtfRjE5OgorICAgICAgICByZXR1cm4gIkYxOSI7CisgICAgY2FzZSBHREtfRjIw
OgorICAgICAgICByZXR1cm4gIkYyMCI7CisgICAgY2FzZSBHREtfRjIxOgorICAgICAgICByZXR1
cm4gIkYyMSI7CisgICAgY2FzZSBHREtfRjIyOgorICAgICAgICByZXR1cm4gIkYyMiI7CisgICAg
Y2FzZSBHREtfRjIzOgorICAgICAgICByZXR1cm4gIkYyMyI7CisgICAgY2FzZSBHREtfRjI0Ogor
ICAgICAgICByZXR1cm4gIkYyNCI7CisgICAgY2FzZSBHREtfSGVscDoKKyAgICAgICAgcmV0dXJu
ICJIZWxwIjsKKyAgICBjYXNlIEdES19Ib21lOgorICAgICAgICByZXR1cm4gIkhvbWUiOworICAg
IGNhc2UgR0RLX0luc2VydDoKKyAgICAgICAgcmV0dXJuICJJbnNlcnQiOworICAgIGNhc2UgR0RL
X0xlZnQ6CisgICAgICAgIHJldHVybiAiTGVmdCI7CisgICAgY2FzZSBHREtfUGFnZV9Eb3duOgor
ICAgICAgICByZXR1cm4gIlBhZ2VEb3duIjsKKyAgICBjYXNlIEdES19QYWdlX1VwOgorICAgICAg
ICByZXR1cm4gIlBhZ2VVcCI7CisgICAgY2FzZSBHREtfUGF1c2U6CisgICAgICAgIHJldHVybiAi
UGF1c2UiOworICAgIGNhc2UgR0RLXzMyNzBfUHJpbnRTY3JlZW46CisgICAgICAgIHJldHVybiAi
UHJpbnRTY3JlZW4iOworICAgIGNhc2UgR0RLX1JpZ2h0OgorICAgICAgICByZXR1cm4gIlJpZ2h0
IjsKKyAgICBjYXNlIEdES19TZWxlY3Q6CisgICAgICAgIHJldHVybiAiU2VsZWN0IjsKKyAgICBj
YXNlIEdES19VcDoKKyAgICAgICAgcmV0dXJuICJVcCI7CisgICAgICAgIC8vIFN0YW5kYXJkIHNh
eXMgdGhhdCBERUwgYmVjb21lcyBVKzAwN0YuCisgICAgY2FzZSBHREtfRGVsZXRlOgorICAgICAg
ICByZXR1cm4gIlUrMDA3RiI7CisgICAgY2FzZSBHREtfQmFja1NwYWNlOgorICAgICAgICByZXR1
cm4gIlUrMDAwOCI7CisgICAgY2FzZSBHREtfSVNPX0xlZnRfVGFiOgorICAgIGNhc2UgR0RLXzMy
NzBfQmFja1RhYjoKKyAgICBjYXNlIEdES19UYWI6CisgICAgICAgIHJldHVybiAiVSswMDA5IjsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlUrJTA0WCIsIGdk
a19rZXl2YWxfdG9fdW5pY29kZShnZGtfa2V5dmFsX3RvX3VwcGVyKGtleUNvZGUpKSk7CisgICAg
fQorfQorCisvLyBUYWtlbiBmcm9tIEtleUV2ZW50R3RrLmNwcAorc3RhdGljIGludCB3aW5kb3dz
S2V5Q29kZUZvcktleUV2ZW50KHVuc2lnbmVkIGludCBrZXljb2RlKQoreworICAgIHN3aXRjaCAo
a2V5Y29kZSkgeworICAgIGNhc2UgR0RLX0tQXzA6CisgICAgICAgIHJldHVybiBWS19OVU1QQUQw
OyAvLyAoNjApIE51bWVyaWMga2V5cGFkIDAga2V5CisgICAgY2FzZSBHREtfS1BfMToKKyAgICAg
ICAgcmV0dXJuIFZLX05VTVBBRDE7IC8vICg2MSkgTnVtZXJpYyBrZXlwYWQgMSBrZXkKKyAgICBj
YXNlIEdES19LUF8yOgorICAgICAgICByZXR1cm4gVktfTlVNUEFEMjsgLy8gKDYyKSBOdW1lcmlj
IGtleXBhZCAyIGtleQorICAgIGNhc2UgR0RLX0tQXzM6CisgICAgICAgIHJldHVybiBWS19OVU1Q
QUQzOyAvLyAoNjMpIE51bWVyaWMga2V5cGFkIDMga2V5CisgICAgY2FzZSBHREtfS1BfNDoKKyAg
ICAgICAgcmV0dXJuIFZLX05VTVBBRDQ7IC8vICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKKyAg
ICBjYXNlIEdES19LUF81OgorICAgICAgICByZXR1cm4gVktfTlVNUEFENTsgLy8gKDY1KSBOdW1l
cmljIGtleXBhZCA1IGtleQorICAgIGNhc2UgR0RLX0tQXzY6CisgICAgICAgIHJldHVybiBWS19O
VU1QQUQ2OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5CisgICAgY2FzZSBHREtfS1BfNzoK
KyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDc7IC8vICg2NykgTnVtZXJpYyBrZXlwYWQgNyBrZXkK
KyAgICBjYXNlIEdES19LUF84OgorICAgICAgICByZXR1cm4gVktfTlVNUEFEODsgLy8gKDY4KSBO
dW1lcmljIGtleXBhZCA4IGtleQorICAgIGNhc2UgR0RLX0tQXzk6CisgICAgICAgIHJldHVybiBW
S19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5CisgICAgY2FzZSBHREtfS1Bf
TXVsdGlwbHk6CisgICAgICAgIHJldHVybiBWS19NVUxUSVBMWTsgLy8gKDZBKSBNdWx0aXBseSBr
ZXkKKyAgICBjYXNlIEdES19LUF9BZGQ6CisgICAgICAgIHJldHVybiBWS19BREQ7IC8vICg2Qikg
QWRkIGtleQorICAgIGNhc2UgR0RLX0tQX1N1YnRyYWN0OgorICAgICAgICByZXR1cm4gVktfU1VC
VFJBQ1Q7IC8vICg2RCkgU3VidHJhY3Qga2V5CisgICAgY2FzZSBHREtfS1BfRGVjaW1hbDoKKyAg
ICAgICAgcmV0dXJuIFZLX0RFQ0lNQUw7IC8vICg2RSkgRGVjaW1hbCBrZXkKKyAgICBjYXNlIEdE
S19LUF9EaXZpZGU6CisgICAgICAgIHJldHVybiBWS19ESVZJREU7IC8vICg2RikgRGl2aWRlIGtl
eQorCisgICAgY2FzZSBHREtfS1BfUGFnZV9VcDoKKyAgICAgICAgcmV0dXJuIFZLX1BSSU9SOyAv
LyAoMjEpIFBBR0UgVVAga2V5CisgICAgY2FzZSBHREtfS1BfUGFnZV9Eb3duOgorICAgICAgICBy
ZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5CisgICAgY2FzZSBHREtfS1BfRW5k
OgorICAgICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVORCBrZXkKKyAgICBjYXNlIEdES19L
UF9Ib21lOgorICAgICAgICByZXR1cm4gVktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQorICAgIGNh
c2UgR0RLX0tQX0xlZnQ6CisgICAgICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJS
T1cga2V5CisgICAgY2FzZSBHREtfS1BfVXA6CisgICAgICAgIHJldHVybiBWS19VUDsgLy8gKDI2
KSBVUCBBUlJPVyBrZXkKKyAgICBjYXNlIEdES19LUF9SaWdodDoKKyAgICAgICAgcmV0dXJuIFZL
X1JJR0hUOyAvLyAoMjcpIFJJR0hUIEFSUk9XIGtleQorICAgIGNhc2UgR0RLX0tQX0Rvd246Cisg
ICAgICAgIHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5CisKKyAgICBjYXNl
IEdES19CYWNrU3BhY2U6CisgICAgICAgIHJldHVybiBWS19CQUNLOyAvLyAoMDgpIEJBQ0tTUEFD
RSBrZXkKKyAgICBjYXNlIEdES19JU09fTGVmdF9UYWI6CisgICAgY2FzZSBHREtfMzI3MF9CYWNr
VGFiOgorICAgIGNhc2UgR0RLX1RhYjoKKyAgICAgICAgcmV0dXJuIFZLX1RBQjsgLy8gKDA5KSBU
QUIga2V5CisgICAgY2FzZSBHREtfQ2xlYXI6CisgICAgICAgIHJldHVybiBWS19DTEVBUjsgLy8g
KDBDKSBDTEVBUiBrZXkKKyAgICBjYXNlIEdES19JU09fRW50ZXI6CisgICAgY2FzZSBHREtfS1Bf
RW50ZXI6CisgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAgICByZXR1cm4gVktfUkVUVVJOOyAv
LyAoMEQpIFJldHVybiBrZXkKKyAgICBjYXNlIEdES19TaGlmdF9MOgorICAgIGNhc2UgR0RLX1No
aWZ0X1I6CisgICAgICAgIHJldHVybiBWS19TSElGVDsgLy8gKDEwKSBTSElGVCBrZXkKKyAgICBj
YXNlIEdES19Db250cm9sX0w6CisgICAgY2FzZSBHREtfQ29udHJvbF9SOgorICAgICAgICByZXR1
cm4gVktfQ09OVFJPTDsgLy8gKDExKSBDVFJMIGtleQorICAgIGNhc2UgR0RLX01lbnU6CisgICAg
ICAgIHJldHVybiBWS19BUFBTOyAvLyAoNUQpIEFwcGxpY2F0aW9ucyBrZXkgKE5hdHVyYWwga2V5
Ym9hcmQpCisgICAgY2FzZSBHREtfQWx0X0w6CisgICAgY2FzZSBHREtfQWx0X1I6CisgICAgICAg
IHJldHVybiBWS19NRU5VOyAvLyAoMTIpIEFMVCBrZXkKKworICAgIGNhc2UgR0RLX1BhdXNlOgor
ICAgICAgICByZXR1cm4gVktfUEFVU0U7IC8vICgxMykgUEFVU0Uga2V5CisgICAgY2FzZSBHREtf
Q2Fwc19Mb2NrOgorICAgICAgICByZXR1cm4gVktfQ0FQSVRBTDsgLy8gKDE0KSBDQVBTIExPQ0sg
a2V5CisgICAgY2FzZSBHREtfS2FuYV9Mb2NrOgorICAgIGNhc2UgR0RLX0thbmFfU2hpZnQ6Cisg
ICAgICAgIHJldHVybiBWS19LQU5BOyAvLyAoMTUpIElucHV0IE1ldGhvZCBFZGl0b3IgKElNRSkg
S2FuYSBtb2RlCisgICAgY2FzZSBHREtfSGFuZ3VsOgorICAgICAgICByZXR1cm4gVktfSEFOR1VM
OyAvLyBWS19IQU5HVUwgKDE1KSBJTUUgSGFuZ3VsIG1vZGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVktfSlVOSkEgKDE3KSBJTUUgSnVuamEgbW9kZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBWS19GSU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCisgICAgY2FzZSBHREtfSGFu
Z3VsX0hhbmphOgorICAgICAgICByZXR1cm4gVktfSEFOSkE7IC8vICgxOSkgSU1FIEhhbmphIG1v
ZGUKKyAgICBjYXNlIEdES19LYW5qaToKKyAgICAgICAgcmV0dXJuIFZLX0tBTkpJOyAvLyAoMTkp
IElNRSBLYW5qaSBtb2RlCisgICAgY2FzZSBHREtfRXNjYXBlOgorICAgICAgICByZXR1cm4gVktf
RVNDQVBFOyAvLyAoMUIpIEVTQyBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVktf
Q09OVkVSVCAoMUMpIElNRSBjb252ZXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZL
X05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29udmVydAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0CisgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9kZSBjaGFuZ2UgcmVxdWVzdAorICAgIGNhc2Ug
R0RLX3NwYWNlOgorICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VCQVIKKyAg
ICBjYXNlIEdES19QYWdlX1VwOgorICAgICAgICByZXR1cm4gVktfUFJJT1I7IC8vICgyMSkgUEFH
RSBVUCBrZXkKKyAgICBjYXNlIEdES19QYWdlX0Rvd246CisgICAgICAgIHJldHVybiBWS19ORVhU
OyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkKKyAgICBjYXNlIEdES19FbmQ6CisgICAgICAgIHJldHVy
biBWS19FTkQ7IC8vICgyMykgRU5EIGtleQorICAgIGNhc2UgR0RLX0hvbWU6CisgICAgICAgIHJl
dHVybiBWS19IT01FOyAvLyAoMjQpIEhPTUUga2V5CisgICAgY2FzZSBHREtfTGVmdDoKKyAgICAg
ICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKKyAgICBjYXNlIEdES19V
cDoKKyAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQorICAgIGNhc2Ug
R0RLX1JpZ2h0OgorICAgICAgICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cg
a2V5CisgICAgY2FzZSBHREtfRG93bjoKKyAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkg
RE9XTiBBUlJPVyBrZXkKKyAgICBjYXNlIEdES19TZWxlY3Q6CisgICAgICAgIHJldHVybiBWS19T
RUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtleQorICAgIGNhc2UgR0RLX1ByaW50OgorICAgICAgICBy
ZXR1cm4gVktfUFJJTlQ7IC8vICgyQSkgUFJJTlQga2V5CisgICAgY2FzZSBHREtfRXhlY3V0ZToK
KyAgICAgICAgcmV0dXJuIFZLX0VYRUNVVEU7IC8vICgyQikgRVhFQ1VURSBrZXkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGR1bm5vIG9uIHRoaXMKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNhc2UgR0RLX1ByaW50U2NyZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gcmV0dXJuIFZLX1NOQVBTSE9UOyAvLyAoMkMpIFBSSU5UIFNDUkVFTiBrZXkKKyAgICBj
YXNlIEdES19JbnNlcnQ6CisgICAgICAgIHJldHVybiBWS19JTlNFUlQ7IC8vICgyRCkgSU5TIGtl
eQorICAgIGNhc2UgR0RLX0RlbGV0ZToKKyAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8gKDJF
KSBERUwga2V5CisgICAgY2FzZSBHREtfSGVscDoKKyAgICAgICAgcmV0dXJuIFZLX0hFTFA7IC8v
ICgyRikgSEVMUCBrZXkKKyAgICBjYXNlIEdES18wOgorICAgIGNhc2UgR0RLX3BhcmVucmlnaHQ6
CisgICAgICAgIHJldHVybiBWS18wOyAvLyAoMzApIDApIGtleQorICAgIGNhc2UgR0RLXzE6Cisg
ICAgY2FzZSBHREtfZXhjbGFtOgorICAgICAgICByZXR1cm4gVktfMTsgLy8gKDMxKSAxICEga2V5
CisgICAgY2FzZSBHREtfMjoKKyAgICBjYXNlIEdES19hdDoKKyAgICAgICAgcmV0dXJuIFZLXzI7
IC8vICgzMikgMiAmIGtleQorICAgIGNhc2UgR0RLXzM6CisgICAgY2FzZSBHREtfbnVtYmVyc2ln
bjoKKyAgICAgICAgcmV0dXJuIFZLXzM7IC8vIGNhc2UgJzMnOiBjYXNlICcjJzsKKyAgICBjYXNl
IEdES180OgorICAgIGNhc2UgR0RLX2RvbGxhcjogLy8gKDM0KSA0IGtleSAnJCc7CisgICAgICAg
IHJldHVybiBWS180OworICAgIGNhc2UgR0RLXzU6CisgICAgY2FzZSBHREtfcGVyY2VudDoKKyAg
ICAgICAgcmV0dXJuIFZLXzU7IC8vICgzNSkgNSBrZXkgICclJworICAgIGNhc2UgR0RLXzY6Cisg
ICAgY2FzZSBHREtfYXNjaWljaXJjdW06CisgICAgICAgIHJldHVybiBWS182OyAvLyAgKDM2KSA2
IGtleSAgJ14nCisgICAgY2FzZSBHREtfNzoKKyAgICBjYXNlIEdES19hbXBlcnNhbmQ6CisgICAg
ICAgIHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAnJicKKyAgICBjYXNlIEdES184
OgorICAgIGNhc2UgR0RLX2FzdGVyaXNrOgorICAgICAgICByZXR1cm4gVktfODsgLy8gICgzOCkg
OCBrZXkgICcqJworICAgIGNhc2UgR0RLXzk6CisgICAgY2FzZSBHREtfcGFyZW5sZWZ0OgorICAg
ICAgICByZXR1cm4gVktfOTsgLy8gICgzOSkgOSBrZXkgJygnCisgICAgY2FzZSBHREtfYToKKyAg
ICBjYXNlIEdES19BOgorICAgICAgICByZXR1cm4gVktfQTsgLy8gICg0MSkgQSBrZXkgY2FzZSAn
YSc6IGNhc2UgJ0EnOiByZXR1cm4gMHg0MTsKKyAgICBjYXNlIEdES19iOgorICAgIGNhc2UgR0RL
X0I6CisgICAgICAgIHJldHVybiBWS19COyAvLyAgKDQyKSBCIGtleSBjYXNlICdiJzogY2FzZSAn
Qic6IHJldHVybiAweDQyOworICAgIGNhc2UgR0RLX2M6CisgICAgY2FzZSBHREtfQzoKKyAgICAg
ICAgcmV0dXJuIFZLX0M7IC8vICAoNDMpIEMga2V5IGNhc2UgJ2MnOiBjYXNlICdDJzogcmV0dXJu
IDB4NDM7CisgICAgY2FzZSBHREtfZDoKKyAgICBjYXNlIEdES19EOgorICAgICAgICByZXR1cm4g
VktfRDsgLy8gICg0NCkgRCBrZXkgY2FzZSAnZCc6IGNhc2UgJ0QnOiByZXR1cm4gMHg0NDsKKyAg
ICBjYXNlIEdES19lOgorICAgIGNhc2UgR0RLX0U6CisgICAgICAgIHJldHVybiBWS19FOyAvLyAg
KDQ1KSBFIGtleSBjYXNlICdlJzogY2FzZSAnRSc6IHJldHVybiAweDQ1OworICAgIGNhc2UgR0RL
X2Y6CisgICAgY2FzZSBHREtfRjoKKyAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAoNDYpIEYga2V5
IGNhc2UgJ2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7CisgICAgY2FzZSBHREtfZzoKKyAgICBj
YXNlIEdES19HOgorICAgICAgICByZXR1cm4gVktfRzsgLy8gICg0NykgRyBrZXkgY2FzZSAnZyc6
IGNhc2UgJ0cnOiByZXR1cm4gMHg0NzsKKyAgICBjYXNlIEdES19oOgorICAgIGNhc2UgR0RLX0g6
CisgICAgICAgIHJldHVybiBWS19IOyAvLyAgKDQ4KSBIIGtleSBjYXNlICdoJzogY2FzZSAnSCc6
IHJldHVybiAweDQ4OworICAgIGNhc2UgR0RLX2k6CisgICAgY2FzZSBHREtfSToKKyAgICAgICAg
cmV0dXJuIFZLX0k7IC8vICAoNDkpIEkga2V5IGNhc2UgJ2knOiBjYXNlICdJJzogcmV0dXJuIDB4
NDk7CisgICAgY2FzZSBHREtfajoKKyAgICBjYXNlIEdES19KOgorICAgICAgICByZXR1cm4gVktf
SjsgLy8gICg0QSkgSiBrZXkgY2FzZSAnaic6IGNhc2UgJ0onOiByZXR1cm4gMHg0QTsKKyAgICBj
YXNlIEdES19rOgorICAgIGNhc2UgR0RLX0s6CisgICAgICAgIHJldHVybiBWS19LOyAvLyAgKDRC
KSBLIGtleSBjYXNlICdrJzogY2FzZSAnSyc6IHJldHVybiAweDRCOworICAgIGNhc2UgR0RLX2w6
CisgICAgY2FzZSBHREtfTDoKKyAgICAgICAgcmV0dXJuIFZLX0w7IC8vICAoNEMpIEwga2V5IGNh
c2UgJ2wnOiBjYXNlICdMJzogcmV0dXJuIDB4NEM7CisgICAgY2FzZSBHREtfbToKKyAgICBjYXNl
IEdES19NOgorICAgICAgICByZXR1cm4gVktfTTsgLy8gICg0RCkgTSBrZXkgY2FzZSAnbSc6IGNh
c2UgJ00nOiByZXR1cm4gMHg0RDsKKyAgICBjYXNlIEdES19uOgorICAgIGNhc2UgR0RLX046Cisg
ICAgICAgIHJldHVybiBWS19OOyAvLyAgKDRFKSBOIGtleSBjYXNlICduJzogY2FzZSAnTic6IHJl
dHVybiAweDRFOworICAgIGNhc2UgR0RLX286CisgICAgY2FzZSBHREtfTzoKKyAgICAgICAgcmV0
dXJuIFZLX087IC8vICAoNEYpIE8ga2V5IGNhc2UgJ28nOiBjYXNlICdPJzogcmV0dXJuIDB4NEY7
CisgICAgY2FzZSBHREtfcDoKKyAgICBjYXNlIEdES19QOgorICAgICAgICByZXR1cm4gVktfUDsg
Ly8gICg1MCkgUCBrZXkgY2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1cm4gMHg1MDsKKyAgICBjYXNl
IEdES19xOgorICAgIGNhc2UgR0RLX1E6CisgICAgICAgIHJldHVybiBWS19ROyAvLyAgKDUxKSBR
IGtleSBjYXNlICdxJzogY2FzZSAnUSc6IHJldHVybiAweDUxOworICAgIGNhc2UgR0RLX3I6Cisg
ICAgY2FzZSBHREtfUjoKKyAgICAgICAgcmV0dXJuIFZLX1I7IC8vICAoNTIpIFIga2V5IGNhc2Ug
J3InOiBjYXNlICdSJzogcmV0dXJuIDB4NTI7CisgICAgY2FzZSBHREtfczoKKyAgICBjYXNlIEdE
S19TOgorICAgICAgICByZXR1cm4gVktfUzsgLy8gICg1MykgUyBrZXkgY2FzZSAncyc6IGNhc2Ug
J1MnOiByZXR1cm4gMHg1MzsKKyAgICBjYXNlIEdES190OgorICAgIGNhc2UgR0RLX1Q6CisgICAg
ICAgIHJldHVybiBWS19UOyAvLyAgKDU0KSBUIGtleSBjYXNlICd0JzogY2FzZSAnVCc6IHJldHVy
biAweDU0OworICAgIGNhc2UgR0RLX3U6CisgICAgY2FzZSBHREtfVToKKyAgICAgICAgcmV0dXJu
IFZLX1U7IC8vICAoNTUpIFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0dXJuIDB4NTU7Cisg
ICAgY2FzZSBHREtfdjoKKyAgICBjYXNlIEdES19WOgorICAgICAgICByZXR1cm4gVktfVjsgLy8g
ICg1NikgViBrZXkgY2FzZSAndic6IGNhc2UgJ1YnOiByZXR1cm4gMHg1NjsKKyAgICBjYXNlIEdE
S193OgorICAgIGNhc2UgR0RLX1c6CisgICAgICAgIHJldHVybiBWS19XOyAvLyAgKDU3KSBXIGtl
eSBjYXNlICd3JzogY2FzZSAnVyc6IHJldHVybiAweDU3OworICAgIGNhc2UgR0RLX3g6CisgICAg
Y2FzZSBHREtfWDoKKyAgICAgICAgcmV0dXJuIFZLX1g7IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gn
OiBjYXNlICdYJzogcmV0dXJuIDB4NTg7CisgICAgY2FzZSBHREtfeToKKyAgICBjYXNlIEdES19Z
OgorICAgICAgICByZXR1cm4gVktfWTsgLy8gICg1OSkgWSBrZXkgY2FzZSAneSc6IGNhc2UgJ1kn
OiByZXR1cm4gMHg1OTsKKyAgICBjYXNlIEdES196OgorICAgIGNhc2UgR0RLX1o6CisgICAgICAg
IHJldHVybiBWS19aOyAvLyAgKDVBKSBaIGtleSBjYXNlICd6JzogY2FzZSAnWic6IHJldHVybiAw
eDVBOworICAgIGNhc2UgR0RLX01ldGFfTDoKKyAgICAgICAgcmV0dXJuIFZLX0xXSU47IC8vICg1
QikgTGVmdCBXaW5kb3dzIGtleSAoTWljcm9zb2Z0IE5hdHVyYWwga2V5Ym9hcmQpCisgICAgY2Fz
ZSBHREtfTWV0YV9SOgorICAgICAgICByZXR1cm4gVktfUldJTjsgLy8gKDVDKSBSaWdodCBXaW5k
b3dzIGtleSAoTmF0dXJhbCBrZXlib2FyZCkKKyAgICAgICAgLy8gVktfU0xFRVAgKDVGKSBDb21w
dXRlciBTbGVlcCBrZXkKKyAgICAgICAgLy8gVktfU0VQQVJBVE9SICg2QykgU2VwYXJhdG9yIGtl
eQorICAgICAgICAvLyBWS19TVUJUUkFDVCAoNkQpIFN1YnRyYWN0IGtleQorICAgICAgICAvLyBW
S19ERUNJTUFMICg2RSkgRGVjaW1hbCBrZXkKKyAgICAgICAgLy8gVktfRElWSURFICg2RikgRGl2
aWRlIGtleQorICAgICAgICAvLyBoYW5kbGVkIGJ5IGtleSBjb2RlIGFib3ZlCisKKyAgICBjYXNl
IEdES19OdW1fTG9jazoKKyAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkgTlVNIExP
Q0sga2V5CisKKyAgICBjYXNlIEdES19TY3JvbGxfTG9jazoKKyAgICAgICAgcmV0dXJuIFZLX1ND
Uk9MTDsgLy8gKDkxKSBTQ1JPTEwgTE9DSyBrZXkKKworICAgICAgICAvLyBWS19MU0hJRlQgKEEw
KSBMZWZ0IFNISUZUIGtleQorICAgICAgICAvLyBWS19SU0hJRlQgKEExKSBSaWdodCBTSElGVCBr
ZXkKKyAgICAgICAgLy8gVktfTENPTlRST0wgKEEyKSBMZWZ0IENPTlRST0wga2V5CisgICAgICAg
IC8vIFZLX1JDT05UUk9MIChBMykgUmlnaHQgQ09OVFJPTCBrZXkKKyAgICAgICAgLy8gVktfTE1F
TlUgKEE0KSBMZWZ0IE1FTlUga2V5CisgICAgICAgIC8vIFZLX1JNRU5VIChBNSkgUmlnaHQgTUVO
VSBrZXkKKyAgICAgICAgLy8gVktfQlJPV1NFUl9CQUNLIChBNikgV2luZG93cyAyMDAwL1hQOiBC
cm93c2VyIEJhY2sga2V5CisgICAgICAgIC8vIFZLX0JST1dTRVJfRk9SV0FSRCAoQTcpIFdpbmRv
d3MgMjAwMC9YUDogQnJvd3NlciBGb3J3YXJkIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX1JF
RlJFU0ggKEE4KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgUmVmcmVzaCBrZXkKKyAgICAgICAg
Ly8gVktfQlJPV1NFUl9TVE9QIChBOSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5
CisgICAgICAgIC8vIFZLX0JST1dTRVJfU0VBUkNIIChBQSkgV2luZG93cyAyMDAwL1hQOiBCcm93
c2VyIFNlYXJjaCBrZXkKKyAgICAgICAgLy8gVktfQlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5k
b3dzIDIwMDAvWFA6IEJyb3dzZXIgRmF2b3JpdGVzIGtleQorICAgICAgICAvLyBWS19CUk9XU0VS
X0hPTUUgKEFDKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RhcnQgYW5kIEhvbWUga2V5Cisg
ICAgICAgIC8vIFZLX1ZPTFVNRV9NVVRFIChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0
ZSBrZXkKKyAgICAgICAgLy8gVktfVk9MVU1FX0RPV04gKEFFKSBXaW5kb3dzIDIwMDAvWFA6IFZv
bHVtZSBEb3duIGtleQorICAgICAgICAvLyBWS19WT0xVTUVfVVAgKEFGKSBXaW5kb3dzIDIwMDAv
WFA6IFZvbHVtZSBVcCBrZXkKKyAgICAgICAgLy8gVktfTUVESUFfTkVYVF9UUkFDSyAoQjApIFdp
bmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkKKyAgICAgICAgLy8gVktfTUVESUFfUFJFVl9U
UkFDSyAoQjEpIFdpbmRvd3MgMjAwMC9YUDogUHJldmlvdXMgVHJhY2sga2V5CisgICAgICAgIC8v
IFZLX01FRElBX1NUT1AgKEIyKSBXaW5kb3dzIDIwMDAvWFA6IFN0b3AgTWVkaWEga2V5CisgICAg
ICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dzIDIwMDAvWFA6IFBsYXkvUGF1
c2UgTWVkaWEga2V5CisgICAgICAgIC8vIFZLX0xBVU5DSF9NQUlMIChCNCkgV2luZG93cyAyMDAw
L1hQOiBTdGFydCBNYWlsIGtleQorICAgICAgICAvLyBWS19MQVVOQ0hfTUVESUFfU0VMRUNUIChC
NSkgV2luZG93cyAyMDAwL1hQOiBTZWxlY3QgTWVkaWEga2V5CisgICAgICAgIC8vIFZLX0xBVU5D
SF9BUFAxIChCNikgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAxIGtleQorICAg
ICAgICAvLyBWS19MQVVOQ0hfQVBQMiAoQjcpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGlj
YXRpb24gMiBrZXkKKworICAgICAgICAvLyBWS19PRU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxh
bmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9Y
UDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICc7Oicga2V5CisgICAgY2FzZSBH
REtfc2VtaWNvbG9uOgorICAgIGNhc2UgR0RLX2NvbG9uOgorICAgICAgICByZXR1cm4gVktfT0VN
XzE7IC8vIGNhc2UgJzsnOiBjYXNlICc6JzogcmV0dXJuIDB4QkE7CisgICAgICAgIC8vIFZLX09F
TV9QTFVTIChCQikgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUg
JysnIGtleQorICAgIGNhc2UgR0RLX3BsdXM6CisgICAgY2FzZSBHREtfZXF1YWw6CisgICAgICAg
IHJldHVybiBWS19PRU1fUExVUzsgLy8gY2FzZSAnPSc6IGNhc2UgJysnOiByZXR1cm4gMHhCQjsK
KyAgICAgICAgLy8gVktfT0VNX0NPTU1BIChCQykgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNv
dW50cnkvcmVnaW9uLCB0aGUgJywnIGtleQorICAgIGNhc2UgR0RLX2NvbW1hOgorICAgIGNhc2Ug
R0RLX2xlc3M6CisgICAgICAgIHJldHVybiBWS19PRU1fQ09NTUE7IC8vIGNhc2UgJywnOiBjYXNl
ICc8JzogcmV0dXJuIDB4QkM7CisgICAgICAgIC8vIFZLX09FTV9NSU5VUyAoQkQpIFdpbmRvd3Mg
MjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKKyAgICBjYXNlIEdE
S19taW51czoKKyAgICBjYXNlIEdES191bmRlcnNjb3JlOgorICAgICAgICByZXR1cm4gVktfT0VN
X01JTlVTOyAvLyBjYXNlICctJzogY2FzZSAnXyc6IHJldHVybiAweEJEOworICAgICAgICAvLyBW
S19PRU1fUEVSSU9EIChCRSkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9u
LCB0aGUgJy4nIGtleQorICAgIGNhc2UgR0RLX3BlcmlvZDoKKyAgICBjYXNlIEdES19ncmVhdGVy
OgorICAgICAgICByZXR1cm4gVktfT0VNX1BFUklPRDsgLy8gY2FzZSAnLic6IGNhc2UgJz4nOiBy
ZXR1cm4gMHhCRTsKKyAgICAgICAgLy8gVktfT0VNXzIgKEJGKSBVc2VkIGZvciBtaXNjZWxsYW5l
b3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6
IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnLz8nIGtleQorICAgIGNhc2UgR0RL
X3NsYXNoOgorICAgIGNhc2UgR0RLX3F1ZXN0aW9uOgorICAgICAgICByZXR1cm4gVktfT0VNXzI7
IC8vIGNhc2UgJy8nOiBjYXNlICc/JzogcmV0dXJuIDB4QkY7CisgICAgICAgIC8vIFZLX09FTV8z
IChDMCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBr
ZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0
aGUgJ2B+JyBrZXkKKyAgICBjYXNlIEdES19hc2NpaXRpbGRlOgorICAgIGNhc2UgR0RLX3F1b3Rl
bGVmdDoKKyAgICAgICAgcmV0dXJuIFZLX09FTV8zOyAvLyBjYXNlICdgJzogY2FzZSAnfic6IHJl
dHVybiAweEMwOworICAgICAgICAvLyBWS19PRU1fNCAoREIpIFVzZWQgZm9yIG1pc2NlbGxhbmVv
dXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDog
Rm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdbeycga2V5CisgICAgY2FzZSBHREtf
YnJhY2tldGxlZnQ6CisgICAgY2FzZSBHREtfYnJhY2VsZWZ0OgorICAgICAgICByZXR1cm4gVktf
T0VNXzQ7IC8vIGNhc2UgJ1snOiBjYXNlICd7JzogcmV0dXJuIDB4REI7CisgICAgICAgIC8vIFZL
X09FTV81IChEQykgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFy
eSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJv
YXJkLCB0aGUgJ1x8JyBrZXkKKyAgICBjYXNlIEdES19iYWNrc2xhc2g6CisgICAgY2FzZSBHREtf
YmFyOgorICAgICAgICByZXR1cm4gVktfT0VNXzU7IC8vIGNhc2UgJ1xcJzogY2FzZSAnfCc6IHJl
dHVybiAweERDOworICAgICAgICAvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVv
dXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDog
Rm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICddfScga2V5CisgICAgY2FzZSBHREtf
YnJhY2tldHJpZ2h0OgorICAgIGNhc2UgR0RLX2JyYWNlcmlnaHQ6CisgICAgICAgIHJldHVybiBW
S19PRU1fNjsgLy8gY2FzZSAnXSc6IGNhc2UgJ30nOiByZXR1cm4gMHhERDsKKyAgICAgICAgLy8g
VktfT0VNXzcgKERFKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2
YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5
Ym9hcmQsIHRoZSAnc2luZ2xlLXF1b3RlL2RvdWJsZS1xdW90ZScga2V5CisgICAgY2FzZSBHREtf
cXVvdGVyaWdodDoKKyAgICBjYXNlIEdES19xdW90ZWRibDoKKyAgICAgICAgcmV0dXJuIFZLX09F
TV83OyAvLyBjYXNlICdcJyc6IGNhc2UgJyInOiByZXR1cm4gMHhERTsKKyAgICAgICAgLy8gVktf
T0VNXzggKERGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5
IGJ5IGtleWJvYXJkLgorICAgICAgICAvLyBWS19PRU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQ
OiBFaXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXQga2V5IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRo
ZSBSVCAxMDIta2V5IGtleWJvYXJkCisgICAgICAgIC8vIFZLX1BST0NFU1NLRVkgKEU1KSBXaW5k
b3dzIDk1Lzk4L01lLCBXaW5kb3dzIE5UIDQuMCwgV2luZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VT
UyBrZXkKKyAgICAgICAgLy8gVktfUEFDS0VUIChFNykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRv
IHBhc3MgVW5pY29kZSBjaGFyYWN0ZXJzIGFzIGlmIHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUg
VktfUEFDS0VUIGtleSBpcyB0aGUgbG93IHdvcmQgb2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFs
dWUgdXNlZCBmb3Igbm9uLWtleWJvYXJkIGlucHV0IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0
aW9uLCBzZWUgUmVtYXJrIGluIEtFWUJESU5QVVQsU2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQg
V01fS0VZVVAKKyAgICAgICAgLy8gVktfQVRUTiAoRjYpIEF0dG4ga2V5CisgICAgICAgIC8vIFZL
X0NSU0VMIChGNykgQ3JTZWwga2V5CisgICAgICAgIC8vIFZLX0VYU0VMIChGOCkgRXhTZWwga2V5
CisgICAgICAgIC8vIFZLX0VSRU9GIChGOSkgRXJhc2UgRU9GIGtleQorICAgICAgICAvLyBWS19Q
TEFZIChGQSkgUGxheSBrZXkKKyAgICAgICAgLy8gVktfWk9PTSAoRkIpIFpvb20ga2V5CisgICAg
ICAgIC8vIFZLX05PTkFNRSAoRkMpIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCisgICAgICAgIC8v
IFZLX1BBMSAoRkQpIFBBMSBrZXkKKyAgICAgICAgLy8gVktfT0VNX0NMRUFSIChGRSkgQ2xlYXIg
a2V5CisgICAgY2FzZSBHREtfRjE6CisgICAgY2FzZSBHREtfRjI6CisgICAgY2FzZSBHREtfRjM6
CisgICAgY2FzZSBHREtfRjQ6CisgICAgY2FzZSBHREtfRjU6CisgICAgY2FzZSBHREtfRjY6Cisg
ICAgY2FzZSBHREtfRjc6CisgICAgY2FzZSBHREtfRjg6CisgICAgY2FzZSBHREtfRjk6CisgICAg
Y2FzZSBHREtfRjEwOgorICAgIGNhc2UgR0RLX0YxMToKKyAgICBjYXNlIEdES19GMTI6CisgICAg
Y2FzZSBHREtfRjEzOgorICAgIGNhc2UgR0RLX0YxNDoKKyAgICBjYXNlIEdES19GMTU6CisgICAg
Y2FzZSBHREtfRjE2OgorICAgIGNhc2UgR0RLX0YxNzoKKyAgICBjYXNlIEdES19GMTg6CisgICAg
Y2FzZSBHREtfRjE5OgorICAgIGNhc2UgR0RLX0YyMDoKKyAgICBjYXNlIEdES19GMjE6CisgICAg
Y2FzZSBHREtfRjIyOgorICAgIGNhc2UgR0RLX0YyMzoKKyAgICBjYXNlIEdES19GMjQ6CisgICAg
ICAgIHJldHVybiBWS19GMSArIChrZXljb2RlIC0gR0RLX0YxKTsKKworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworfQorCisvLyBUYWtlbiBmcm9tIEtleUV2ZW50R3Rr
LmNwcAorc3RhdGljIFN0cmluZyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ3VpbnQgdmFsKQorewor
ICAgIHN3aXRjaCAodmFsKSB7CisgICAgY2FzZSBHREtfSVNPX0VudGVyOgorICAgIGNhc2UgR0RL
X0tQX0VudGVyOgorICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAgICAgcmV0dXJuIFN0cmluZygi
XHIiKTsKKyAgICBjYXNlIEdES19CYWNrU3BhY2U6CisgICAgICAgIHJldHVybiBTdHJpbmcoIlx4
OCIpOworICAgIGNhc2UgR0RLX1RhYjoKKyAgICAgICAgcmV0dXJuIFN0cmluZygiXHQiKTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBndW5pY2hhciBjID0gZ2RrX2tleXZhbF90b191bmljb2RlKHZh
bCk7CisgICAgICAgIGdsb25nIG53YzsKKyAgICAgICAgZ3VuaWNoYXIyKiB1Y2hhcjE2ID0gZ191
Y3M0X3RvX3V0ZjE2KCZjLCAxLCAwLCAmbndjLCAwKTsKKworICAgICAgICBTdHJpbmcgcmV0VmFs
OworICAgICAgICBpZiAodWNoYXIxNikKKyAgICAgICAgICAgIHJldFZhbCA9IFN0cmluZygoVUNo
YXIqKXVjaGFyMTYsIG53Yyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldFZhbCA9IFN0
cmluZygpOworCisgICAgICAgIGdfZnJlZSh1Y2hhcjE2KTsKKworICAgICAgICByZXR1cm4gcmV0
VmFsOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlm
aWVyc0ZvckN1cnJlbnRLZXlTdGF0ZShndWludCBzdGF0ZSkKK3sKKyAgICB1bnNpZ25lZCBtb2Rp
ZmllcnMgPSAwOworICAgIGlmIChzdGF0ZSAmIEdES19DT05UUk9MX01BU0spCisgICAgICAgIG1v
ZGlmaWVycyB8PSBXZWJFdmVudDo6Q29udHJvbEtleTsKKyAgICBpZiAoKHN0YXRlICYgR0RLX1NI
SUZUX01BU0spIHx8IChzdGF0ZSA9PSBHREtfMzI3MF9CYWNrVGFiKSkKKyAgICAgICAgbW9kaWZp
ZXJzIHw9IFdlYkV2ZW50OjpTaGlmdEtleTsKKyAgICBpZiAoc3RhdGUgJiBHREtfTU9EMV9NQVNL
KQorICAgICAgICBtb2RpZmllcnMgfD0gV2ViRXZlbnQ6OkFsdEtleTsKKyAgICBpZiAoc3RhdGUg
JiBHREtfTUVUQV9NQVNLKQorICAgICAgICBtb2RpZmllcnMgfD0gV2ViRXZlbnQ6Ok1ldGFLZXk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7
CisKK30KKworV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJv
YXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUg
ICAgICAgICAgICAgPSAoZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFKSA/IFdlYkV2ZW50
OjpLZXlVcCA6IFdlYkV2ZW50OjpLZXlEb3duOyAKKyAgICBTdHJpbmcgdGV4dCAgICAgICAgICAg
ICAgICAgICAgID0gc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV2ZW50LT5rZXl2YWwpOworICAgIFN0
cmluZyB1bm1vZGlmaWVkVGV4dCAgICAgICAgICAgPSBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXZl
bnQtPmtleXZhbCk7CisgICAgU3RyaW5nIGtleUlkZW50aWZpZXIgICAgICAgICAgICA9IGtleUlk
ZW50aWZpZXJGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXl2YWwpOworICAgIGludCB3aW5kb3dzVmly
dHVhbEtleUNvZGUgICAgICAgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGV2ZW50LT5rZXl2
YWwpOworICAgIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSAgICAgICAgPSBzdGF0aWNfY2FzdDxp
bnQ+KGV2ZW50LT5rZXl2YWwpOworICAgIGJvb2wgYXV0b1JlcGVhdCAgICAgICAgICAgICAgICAg
PSBmYWxzZTsgCisgICAgYm9vbCBpc0tleXBhZCAgICAgICAgICAgICAgICAgICA9IGV2ZW50LT5r
ZXl2YWwgPj0gR0RLX0tQX1NwYWNlICYmIGV2ZW50LT5rZXl2YWwgPD0gR0RLX0tQXzk7CisgICAg
Ym9vbCBpc1N5c3RlbUtleSAgICAgICAgICAgICAgICA9IGZhbHNlOworICAgIFdlYkV2ZW50OjpN
b2RpZmllcnMgbW9kaWZpZXJzICAgPSBtb2RpZmllcnNGb3JDdXJyZW50S2V5U3RhdGUoZXZlbnQt
PnN0YXRlKTsKKyAgICBkb3VibGUgdGltZXN0YW1wICAgICAgICAgICAgICAgICA9IGV2ZW50LT50
aW1lOworICAgIHJldHVybiBXZWJLZXlib2FyZEV2ZW50KHR5cGUsIHRleHQsIHVubW9kaWZpZWRU
ZXh0LCBrZXlJZGVudGlmaWVyLCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIG5hdGl2ZVZpcnR1YWxL
ZXlDb2RlLCBhdXRvUmVwZWF0LCBpc0tleXBhZCwgaXNTeXN0ZW1LZXksIG1vZGlmaWVycywgdGlt
ZXN0YW1wKTsKK30KKworfQpJbmRleDogV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9y
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaAko
cmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaAkocmV2
aXNpb24gNTE3MTkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj
KSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYkV2ZW50RmFjdG9yeV9oCisjZGVmaW5lIFdlYkV2ZW50RmFjdG9y
eV9oCisKKyNpbmNsdWRlICJXZWJFdmVudC5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBuZWVkZWQgaW4g
dGhlIFdlYlByb2Nlc3MgYW5kIHNob3VsZCBiZSBtb3ZlZCB0byBiZSBhIHBlZXIKKyAgICAvLyBv
ZiBXS1ZpZXcgb3IgcmVtb3ZlZCBhbHRvZ2V0aGVyIGluIGZhdm9yIG9mIHVzaW5nIFBsYXRmb3Jt
RXZlbnRzIGV2ZXJ5d2hlcmUuCisKK2NsYXNzIFdlYkV2ZW50RmFjdG9yeSB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgV2ViTW91c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2ZW50KEdka0V2
ZW50QW55KiBldmVudCk7CisgICAgICAgIHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldo
ZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwgKmV2ZW50KTsKKyAgICAgICAgc3RhdGljIFdlYktleWJv
YXJkRXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSogZXZlbnQpOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJFdmVudEZhY3RvcnlfaApJ
bmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsv
V2ViRXJyb3JzR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcAkocmV2aXNpb24gNTE3MTkpCkBAIC0wLDAg
KzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldl
YkVycm9ycy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjZGVmaW5lIFdlYlVSTEVycm9yRG9tYWluICAg
IlVSTEVycm9yRG9tYWluIgorCitlbnVtIHsKKyAgICBXZWJVUkxFcnJvclVua25vd24gPSAgICAg
ICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICBXZWJVUkxFcnJvckNhbmNlbGxlZCA9ICAgICAg
ICAgICAgICAgICAgICAgICAtOTk5LAorICAgIFdlYlVSTEVycm9yQmFkVVJMID0gICAgICAgICAg
ICAgICAgICAgICAgICAgIC0xMDAwLAorICAgIFdlYlVSTEVycm9yVGltZWRPdXQgPSAgICAgICAg
ICAgICAgICAgICAgICAgIC0xMDAxLAorICAgIFdlYlVSTEVycm9yVW5zdXBwb3J0ZWRVUkwgPSAg
ICAgICAgICAgICAgICAgIC0xMDAyLAorICAgIFdlYlVSTEVycm9yQ2Fubm90RmluZEhvc3QgPSAg
ICAgICAgICAgICAgICAgIC0xMDAzLAorICAgIFdlYlVSTEVycm9yQ2Fubm90Q29ubmVjdFRvSG9z
dCA9ICAgICAgICAgICAgIC0xMDA0LAorICAgIFdlYlVSTEVycm9yTmV0d29ya0Nvbm5lY3Rpb25M
b3N0ID0gICAgICAgICAgIC0xMDA1LAorICAgIFdlYlVSTEVycm9yRE5TTG9va3VwRmFpbGVkID0g
ICAgICAgICAgICAgICAgIC0xMDA2LAorICAgIFdlYlVSTEVycm9ySFRUUFRvb01hbnlSZWRpcmVj
dHMgPSAgICAgICAgICAgIC0xMDA3LAorICAgIFdlYlVSTEVycm9yUmVzb3VyY2VVbmF2YWlsYWJs
ZSA9ICAgICAgICAgICAgIC0xMDA4LAorICAgIFdlYlVSTEVycm9yTm90Q29ubmVjdGVkVG9JbnRl
cm5ldCA9ICAgICAgICAgIC0xMDA5LAorICAgIFdlYlVSTEVycm9yUmVkaXJlY3RUb05vbkV4aXN0
ZW50TG9jYXRpb24gPSAgIC0xMDEwLAorICAgIFdlYlVSTEVycm9yQmFkU2VydmVyUmVzcG9uc2Ug
PSAgICAgICAgICAgICAgIC0xMDExLAorICAgIFdlYlVSTEVycm9yVXNlckNhbmNlbGxlZEF1dGhl
bnRpY2F0aW9uID0gICAgIC0xMDEyLAorICAgIFdlYlVSTEVycm9yVXNlckF1dGhlbnRpY2F0aW9u
UmVxdWlyZWQgPSAgICAgIC0xMDEzLAorICAgIFdlYlVSTEVycm9yWmVyb0J5dGVSZXNvdXJjZSA9
ICAgICAgICAgICAgICAgIC0xMDE0LAorICAgIFdlYlVSTEVycm9yRmlsZURvZXNOb3RFeGlzdCA9
ICAgICAgICAgICAgICAgIC0xMTAwLAorICAgIFdlYlVSTEVycm9yRmlsZUlzRGlyZWN0b3J5ID0g
ICAgICAgICAgICAgICAgIC0xMTAxLAorICAgIFdlYlVSTEVycm9yTm9QZXJtaXNzaW9uc1RvUmVh
ZEZpbGUgPSAgICAgICAgIC0xMTAyLAorICAgIFdlYlVSTEVycm9yU2VjdXJlQ29ubmVjdGlvbkZh
aWxlZCA9ICAgICAgICAgIC0xMjAwLAorICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVI
YXNCYWREYXRlID0gICAgIC0xMjAxLAorICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVV
bnRydXN0ZWQgPSAgICAgIC0xMjAyLAorICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVI
YXNVbmtub3duUm9vdCA9IC0xMjAzLAorICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVO
b3RZZXRWYWxpZCA9ICAgIC0xMjA0LAorICAgIFdlYlVSTEVycm9yQ2xpZW50Q2VydGlmaWNhdGVS
ZWplY3RlZCA9ICAgICAgIC0xMjA1LAorICAgIFdlYlVSTEVycm9yQ2xpZW50Q2VydGlmaWNhdGVS
ZXF1aXJlZCA9ICAgICAgIC0xMjA2LAorICAgIFdlYlVSTEVycm9yQ2Fubm90TG9hZEZyb21OZXR3
b3JrID0gICAgICAgICAgIC0yMDAwLAorCisgICAgLy8gRG93bmxvYWQgYW5kIGZpbGUgSS9PIGVy
cm9ycworICAgIFdlYlVSTEVycm9yQ2Fubm90Q3JlYXRlRmlsZSA9ICAgICAgICAgICAgICAgIC0z
MDAwLAorICAgIFdlYlVSTEVycm9yQ2Fubm90T3BlbkZpbGUgPSAgICAgICAgICAgICAgICAgIC0z
MDAxLAorICAgIFdlYlVSTEVycm9yQ2Fubm90Q2xvc2VGaWxlID0gICAgICAgICAgICAgICAgIC0z
MDAyLAorICAgIFdlYlVSTEVycm9yQ2Fubm90V3JpdGVUb0ZpbGUgPSAgICAgICAgICAgICAgIC0z
MDAzLAorICAgIFdlYlVSTEVycm9yQ2Fubm90UmVtb3ZlRmlsZSA9ICAgICAgICAgICAgICAgIC0z
MDA0LAorICAgIFdlYlVSTEVycm9yQ2Fubm90TW92ZUZpbGUgPSAgICAgICAgICAgICAgICAgIC0z
MDA1LAorICAgIFdlYlVSTEVycm9yRG93bmxvYWREZWNvZGluZ0ZhaWxlZE1pZFN0cmVhbSA9IC0z
MDA2LAorICAgIFdlYlVSTEVycm9yRG93bmxvYWREZWNvZGluZ0ZhaWxlZFRvQ29tcGxldGUgPS0z
MDA3LAorfTsKKworI2RlZmluZSBXZWJLaXRFcnJvckRvbWFpbiAgICJXZWJLaXRFcnJvckRvbWFp
biIKKworZW51bSB7CisgICAgV2ViS2l0RXJyb3JDYW5ub3RTaG93TUlNRVR5cGUgPSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMTAwLAorICAgIFdlYktpdEVycm9yQ2Fubm90U2hvd1VSTCA9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMSwKKyAgICBXZWJLaXRFcnJvckZy
YW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2UgPSAgICAgICAgICAgICAxMDIsCisgICAg
V2ViS2l0RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCA9ICAgICAgICAgICAgICAgICAgICAg
ICAgMTAzLAorfTsKKworZW51bSB7CisgICAgV2ViS2l0RXJyb3JDYW5ub3RGaW5kUGx1Z0luID0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwLAorICAgIFdlYktpdEVycm9yQ2Fubm90
TG9hZFBsdWdJbiA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMSwKKyAgICBXZWJL
aXRFcnJvckphdmFVbmF2YWlsYWJsZSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy
MDIsCit9OworCitlbnVtIHsKKyAgICBXZWJLaXRFcnJvckdlb2xvY2F0aW9uTG9jYXRpb25Vbmtu
b3duICA9ICAgICAgICAgICAgICAgICAgICAzMDAsCit9OworCisjZGVmaW5lIFdlYktpdEVycm9y
TUlNRVR5cGVLZXkgICAiV2ViS2l0RXJyb3JNSU1FVHlwZUtleSIKKyNkZWZpbmUgV2ViS2l0RXJy
b3JQbHVnSW5OYW1lS2V5ICAgIldlYktpdEVycm9yUGx1Z0luTmFtZUtleSIKKyNkZWZpbmUgV2Vi
S2l0RXJyb3JQbHVnSW5QYWdlVVJMU3RyaW5nS2V5ICAgIldlYktpdEVycm9yUGx1Z0luUGFnZVVS
TFN0cmluZ0tleSIKKworI2RlZmluZSBXZWJQT1NJWEVycm9yRG9tYWluICAgIk5TUE9TSVhFcnJv
ckRvbWFpbiIKKyNkZWZpbmUgV2ViUE9TSVhFcnJvckVDT05OUkVTRVQgNTQKKworUmVzb3VyY2VF
cnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIFJlc291cmNlRXJyb3IoU3RyaW5nKFdlYlVSTEVycm9yRG9tYWluKSwgV2ViVVJM
RXJyb3JDYW5jZWxsZWQsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsKK30KKwor
UmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKFN0cmluZyhXZWJLaXRFcnJvckRvbWFpbiks
IFdlYktpdEVycm9yQ2Fubm90VXNlUmVzdHJpY3RlZFBvcnQsIHJlcXVlc3QudXJsKCkuc3RyaW5n
KCksIFN0cmluZygpKTsKK30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9y
KFN0cmluZyhXZWJLaXRFcnJvckRvbWFpbiksIFdlYktpdEVycm9yQ2Fubm90U2hvd1VSTCwgcmVx
dWVzdC51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOworfQorCitSZXNvdXJjZUVycm9yIGludGVy
cnVwdEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihTdHJpbmcoV2ViS2l0RXJyb3JEb21haW4pLCBX
ZWJLaXRFcnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2UsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCksIFN0cmluZygpKTsKK30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlN
RVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcigpOworfQorCitSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RF
cnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVz
b3VyY2VFcnJvcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72685</attachid>
            <date>2010-11-02 09:45:02 -0700</date>
            <delta_ts>2011-01-07 07:22:44 -0800</delta_ts>
            <desc>Few other important classes implementation for WebKit2 GTK port</desc>
            <filename>Module NativeWebKeyboardEvent WebContextGtk Implemenation.patch</filename>
            <type>text/plain</type>
            <size>20470</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vZ3RrL01vZHVsZUd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktp
dDIvUGxhdGZvcm0vZ3RrL01vZHVsZUd0ay5jcHAJKHJldmlzaW9uIDUxNzE5KQpAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0
eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIk1vZHVs
ZS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ1N0cmluZy5oPgorI2luY2x1ZGUgPGRs
ZmNuLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIE1vZHVsZTo6bG9hZCgpCit7Cisg
ICAgbV9oYW5kbGUgPSBkbG9wZW4obV9wYXRoLnV0ZjgoKS5kYXRhKCksIFJUTERfTk9XKTsKKyAg
ICByZXR1cm4gIW1faGFuZGxlOworfQorCit2b2lkIE1vZHVsZTo6dW5sb2FkKCkKK3sKKyAgICBk
bGNsb3NlKG1faGFuZGxlKTsKK30KKwordm9pZCogTW9kdWxlOjpwbGF0Zm9ybUZ1bmN0aW9uUG9p
bnRlcihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRsc3lt
KG1faGFuZGxlLCBmdW5jdGlvbk5hbWUpOworfQorCit9CkluZGV4OiBXZWJLaXQyL1BsYXRmb3Jt
L01vZHVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vTW9kdWxlLmgJKHJldmlz
aW9uIDUxNzA1KQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuaAkocmV2aXNpb24gNTE3MTkp
CkBAIC02MSw2ICs2MSw4IEBACiAgICAgSE1PRFVMRSBtX21vZHVsZTsKICNlbGlmIFBMQVRGT1JN
KFFUKQogICAgIFFMaWJyYXJ5IG1fbGliOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQg
Km1faGFuZGxlOwogI2VuZGlmCiB9OwogCkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNTE3MDUpCisrKyBXZWJLaXQyL0No
YW5nZUxvZwkocmV2aXNpb24gNTE3MTkpCkBAIC0xLDMgKzEsMzAzIEBACisyMDEwLTEwLTI4ICBB
bXJ1dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNvbT4gYW5kIFJhdmkgS2FzaWJoYXRsYSA8
cmF2aS5rYXNpYmhhdGxhQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgV2ViRXZlbnRGYWN0b3J5LCBX
ZWJFcnJvcnMsIE1vZHVsZSwgV2ViUGFnZSwgV2ViQ29udGV4dCwgIE5hdGl2ZUtleWJvYXJkRXZl
bnQgY2xhc3NlcyBmb3IgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDg1MTAKKworICAgICAgICAqIFBsYXRmb3JtL01vZHVsZS5oOgorICAg
ICAgICAqIFBsYXRmb3JtL2d0azogQWRkZWQuCisgICAgICAgICogUGxhdGZvcm0vZ3RrL01vZHVs
ZUd0ay5jcHA6IEFkZGVkLiBJbml0aWFsIGNvZGUgdXNpbmcgZGxvcGVuL2RsY2xvc2UgY2FsbHMg
KFVOSVhfWDExIHNwZWNpZmljKS4KKyAgICAgICAgKFdlYktpdDo6TW9kdWxlOjpsb2FkKToKKyAg
ICAgICAgKFdlYktpdDo6TW9kdWxlOjp1bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpNb2R1bGU6
OnBsYXRmb3JtRnVuY3Rpb25Qb2ludGVyKToKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudC5oOgorICAgICAgICAqIFNoYXJlZC9ndGs6IEFkZGVkLgorICAgICAgICAqIFNo
YXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHA6IEFkZGVkLiBTdHViYmVkIGlt
cGxlbWVudGF0aW9uIGZvciBHVEsgcG9ydC4gWWV0IHRvIGltcGxlbWVudC4KKyAgICAgICAgKFdl
YktpdDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL2d0azogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9X
ZWJDb250ZXh0R3RrLmNwcDogQWRkZWQuIFN0dWJiZWQgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBw
b3J0LiBZZXQgdG8gaW1wbGVtZW50LgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjphcHBs
aWNhdGlvbkNhY2hlRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxh
dGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0azogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3Rr
LmNwcDogQWRkZWQuIEltcGxlbWVudGF0aW9uIGZvciBpbnRlcnByZXRpbmcga2V5IGV2ZW50cy4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1QcmVmZXJlbmNlc0RpZENoYW5nZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmludGVycHJldEtleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
c2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURlZmF1bHRCZWhhdmlv
ckZvcktleUV2ZW50KToKKwogMjAxMC0xMC0yNyAgS2ltbW8gS2lubnVuZW4gIDxraW1tby50Lmtp
bm51bmVuQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpJ
bmRleDogV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3Rr
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50R3RrLmNwcAkocmV2aXNpb24gNTE3MTkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9y
dGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dC5oIgorCisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50KEdka0V2
ZW50S2V5KiBldmVudCkKKyAgICA6IFdlYktleWJvYXJkRXZlbnQoV2ViRXZlbnRGYWN0b3J5Ojpj
cmVhdGVXZWJLZXlib2FyZEV2ZW50KGV2ZW50KSkKKyAgICAsIG1fbmF0aXZlRXZlbnQoKmV2ZW50
KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvU2hhcmVkL05h
dGl2ZVdlYktleWJvYXJkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9OYXRp
dmVXZWJLZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDUxNzA1KQorKysgV2ViS2l0Mi9TaGFyZWQv
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCShyZXZpc2lvbiA1MTcxOSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzYsNiArMzcsOCBAQAogI2VuZGlmCiAjZWxpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxR
S2V5RXZlbnQ+CisjZWxpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8Z2RrL2dkay5oPgogI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDgsNiArNTEsOCBAQAogICAgIE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAjZWxp
ZiBQTEFURk9STShRVCkKICAgICBleHBsaWNpdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KFFLZXlF
dmVudCopOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQo
R2RrRXZlbnRLZXkqKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNTYsNiArNjEs
OCBAQAogICAgIGNvbnN0IE1TRyogbmF0aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiAmbV9uYXRp
dmVFdmVudDsgfQogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgY29uc3QgUUtleUV2ZW50KiBuYXRp
dmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuICZtX25hdGl2ZUV2ZW50OyB9CisjZWxpZiBQTEFURk9S
TShHVEspCisgICAgY29uc3QgR2RrRXZlbnRLZXkqIG5hdGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1
cm4gJm1fbmF0aXZlRXZlbnQ7IH0KICNlbmRpZgogCiBwcml2YXRlOgpAQCAtNjUsNiArNzIsOCBA
QAogICAgIE1TRyBtX25hdGl2ZUV2ZW50OwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgUUtleUV2
ZW50IG1fbmF0aXZlRXZlbnQ7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgR2RrRXZlbnRLZXkg
bV9uYXRpdmVFdmVudDsKICNlbmRpZgogfTsKIApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYkNvbnRleHRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJDb250ZXh0R3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJDb250ZXh0R3RrLmNwcAkocmV2aXNpb24gNTE3MTkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKworI2lu
Y2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dURjo6U3RyaW5nIFdlYkNvbnRleHQ6OmFw
cGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKQoreworICAgIHJldHVybiBXZWJDb3JlOjpjYWNoZVN0
b3JhZ2UoKS5jYWNoZURpcmVjdG9yeSgpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAkocmV2aXNpb24gNTE3MTkpCkBAIC0wLDAg
KzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldl
YlBhZ2UuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViRXZl
bnQuaCIKKyNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKyAgICAKK3ZvaWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtUHJlZmVy
ZW5jZXNEaWRDaGFuZ2UoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIEN0cmxLZXkgPSAxIDw8IDA7
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgQWx0S2V5ID0gMSA8PCAxOworc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFNoaWZ0S2V5ID0gMSA8PCAyOworCitzdHJ1Y3QgS2V5RG93bkVudHJ5IHsKKyAgICB1
bnNpZ25lZCB2aXJ0dWFsS2V5OworICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKKyAgICBjb25zdCBj
aGFyKiBuYW1lOworfTsKKworc3RydWN0IEtleVByZXNzRW50cnkgeworICAgIHVuc2lnbmVkIGNo
YXJDb2RlOworICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKKyAgICBjb25zdCBjaGFyKiBuYW1lOwor
fTsKKworc3RhdGljIGNvbnN0IEtleURvd25FbnRyeSBrZXlEb3duRW50cmllc1tdID0geworICAg
IHsgVktfTEVGVCwgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlTGVmdCIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfTEVGVCwgICBTaGlmdEtleSwgICAg
ICAgICAgICJNb3ZlTGVmdEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICB9LAor
ICAgIHsgVktfTEVGVCwgICBDdHJsS2V5LCAgICAgICAgICAgICJNb3ZlV29yZExlZnQiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfTEVGVCwgICBDdHJsS2V5IHwg
U2hpZnRLZXksICJNb3ZlV29yZExlZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICB9
LAorICAgIHsgVktfUklHSFQsICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlUmlnaHQiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUklHSFQsICBTaGlmdEtl
eSwgICAgICAgICAgICJNb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAg
ICB9LAorICAgIHsgVktfUklHSFQsICBDdHJsS2V5LCAgICAgICAgICAgICJNb3ZlV29yZFJpZ2h0
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUklHSFQsICBDdHJs
S2V5IHwgU2hpZnRLZXksICJNb3ZlV29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAg
ICAgICB9LAorICAgIHsgVktfVVAsICAgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlVXAiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfVVAsICAgICBT
aGlmdEtleSwgICAgICAgICAgICJNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAg
ICAgICAgICB9LAorICAgIHsgVktfUFJJT1IsICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlUGFn
ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfRE9XTiwg
ICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlRG93biIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgIHsgVktfRE9XTiwgICBTaGlmdEtleSwgICAgICAgICAgICJNb3Zl
RG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfTkVY
VCwgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24i
ICAgICAgICAgICAgICB9LAorICAgIHsgVktfUFJJT1IsICAwLCAgICAgICAgICAgICAgICAgICJN
b3ZlUGFnZVVwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktf
TkVYVCwgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd24iICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfSE9NRSwgICAwLCAgICAgICAgICAgICAgICAg
ICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
VktfSE9NRSwgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRN
b2RpZnlTZWxlY3Rpb24iICAgICB9LAorICAgIHsgVktfSE9NRSwgICBDdHJsS2V5LCAgICAgICAg
ICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgICB9LAorICAg
IHsgVktfSE9NRSwgICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3Vt
ZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIAorICAgIHsgVktfRU5ELCAgICAwLCAgICAg
ICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAorICAgIHsgVktfRU5ELCAgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVG9FbmRPZkxp
bmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICB9LAorICAgIHsgVktfRU5ELCAgICBDdHJs
S2V5LCAgICAgICAgICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAorICAgIHsgVktfRU5ELCAgICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlVG9FbmRP
ZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICB9LAorICAgIAorICAgIHsgVktfQkFD
SywgICAwLCAgICAgICAgICAgICAgICAgICJEZWxldGVCYWNrd2FyZCIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgVktfQkFDSywgICBTaGlmdEtleSwgICAgICAgICAgICJE
ZWxldGVCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktf
REVMRVRFLCAwLCAgICAgICAgICAgICAgICAgICJEZWxldGVGb3J3YXJkIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfQkFDSywgICBDdHJsS2V5LCAgICAgICAgICAg
ICJEZWxldGVXb3JkQmFja3dhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
VktfREVMRVRFLCBDdHJsS2V5LCAgICAgICAgICAgICJEZWxldGVXb3JkRm9yd2FyZCIgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorICAgIAorICAgIHsgJ0InLCAgICAgICBDdHJsS2V5LCAg
ICAgICAgICAgICJUb2dnbGVCb2xkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAorICAgIHsgJ0knLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJUb2dnbGVJdGFsaWMiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIAorICAgIHsgVktfRVNDQVBFLCAw
LCAgICAgICAgICAgICAgICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAorICAgIHsgVktfT0VNX1BFUklPRCwgQ3RybEtleSwgICAgICAgICJDYW5jZWwi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfVEFCLCAg
ICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgIHsgVktfVEFCLCAgICBTaGlmdEtleSwgICAgICAgICAgICJJbnNl
cnRCYWNrdGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVU
VVJOLCAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCBDdHJsS2V5LCAgICAgICAgICAgICJJ
bnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktf
UkVUVVJOLCBBbHRLZXksICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCBTaGlmdEtleSwgICAgICAgICAg
ICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
VktfUkVUVVJOLCBBbHRLZXkgfCBTaGlmdEtleSwgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorICAgIAorICAgIC8vIEl0J3Mgbm90IHF1aXRlIGNsZWFy
IHdoZXRoZXIgY2xpcGJvYXJkIHNob3J0Y3V0cyBhbmQgVW5kby9SZWRvIHNob3VsZCBiZSBoYW5k
bGVkCisgICAgLy8gaW4gdGhlIGFwcGxpY2F0aW9uIG9yIGluIFdlYktpdC4gV2UgY2hvc2UgV2Vi
S2l0LgorICAgIHsgJ0MnLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJDb3B5IiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ1YnLCAgICAgICBDdHJs
S2V5LCAgICAgICAgICAgICJQYXN0ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAorICAgIHsgJ1gnLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJDdXQiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ0EnLCAgICAgICBD
dHJsS2V5LCAgICAgICAgICAgICJTZWxlY3RBbGwiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAorICAgIHsgVktfSU5TRVJULCBDdHJsS2V5LCAgICAgICAgICAgICJDb3B5IiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfREVMRVRF
LCBTaGlmdEtleSwgICAgICAgICAgICJDdXQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgIHsgVktfSU5TRVJULCBTaGlmdEtleSwgICAgICAgICAgICJQYXN0
ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ1onLCAg
ICAgICBDdHJsS2V5LCAgICAgICAgICAgICJVbmRvIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgJ1onLCAgICAgICBDdHJsS2V5IHwgU2hpZnRLZXksICJS
ZWRvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorfTsKKworc3Rh
dGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5UHJlc3NFbnRyaWVzW10gPSB7CisgICAgeyAnXHQn
LCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgeyAnXHQnLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2Vy
dEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAg
IDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEN0cmxLZXksICAgICAgICAgICAgIkluc2VydE5l
d2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEFs
dEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgeyAnXHInLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2VydE5ld2xp
bmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEFsdEtl
eSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCit9OworCitjb25zdCBjaGFyKiBXZWJQYWdlOjppbnRlcnByZXRLZXlFdmVudChjb25z
dCBLZXlib2FyZEV2ZW50KiBldnQpCit7CisgICAgQVNTRVJUKGV2dC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlkb3duRXZlbnQgfHwgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXBy
ZXNzRXZlbnQpOworICAgIAorICAgIHN0YXRpYyBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+KiBr
ZXlEb3duQ29tbWFuZHNNYXAgPSAwOworICAgIHN0YXRpYyBIYXNoTWFwPGludCwgY29uc3QgY2hh
cio+KiBrZXlQcmVzc0NvbW1hbmRzTWFwID0gMDsKKyAgICAKKyAgICBpZiAoIWtleURvd25Db21t
YW5kc01hcCkgeworICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAgPSBuZXcgSGFzaE1hcDxpbnQs
IGNvbnN0IGNoYXIqPjsKKyAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcCA9IG5ldyBIYXNoTWFw
PGludCwgY29uc3QgY2hhcio+OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IChzaXplb2Yoa2V5RG93bkVudHJpZXMpIC8gc2l6ZW9mKGtleURvd25FbnRyaWVzWzBd
KSk7IGkrKykKKyAgICAgICAgICAgIGtleURvd25Db21tYW5kc01hcC0+c2V0KGtleURvd25FbnRy
aWVzW2ldLm1vZGlmaWVycyA8PCAxNiB8IGtleURvd25FbnRyaWVzW2ldLnZpcnR1YWxLZXksIGtl
eURvd25FbnRyaWVzW2ldLm5hbWUpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IChzaXplb2Yoa2V5UHJlc3NFbnRyaWVzKSAvIHNpemVvZihrZXlQcmVzc0VudHJp
ZXNbMF0pKTsgaSsrKQorICAgICAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcC0+c2V0KGtleVBy
ZXNzRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlQcmVzc0VudHJpZXNbaV0uY2hhckNv
ZGUsIGtleVByZXNzRW50cmllc1tpXS5uYW1lKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
bW9kaWZpZXJzID0gMDsKKyAgICBpZiAoZXZ0LT5zaGlmdEtleSgpKQorICAgICAgICBtb2RpZmll
cnMgfD0gU2hpZnRLZXk7CisgICAgaWYgKGV2dC0+YWx0S2V5KCkpCisgICAgICAgIG1vZGlmaWVy
cyB8PSBBbHRLZXk7CisgICAgaWYgKGV2dC0+Y3RybEtleSgpKQorICAgICAgICBtb2RpZmllcnMg
fD0gQ3RybEtleTsKKyAgICAKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtl
eWRvd25FdmVudCkgeworICAgICAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwgZXZ0
LT5rZXlFdmVudCgpLT53aW5kb3dzVmlydHVhbEtleUNvZGUoKTsKKyAgICAgICAgcmV0dXJuIG1h
cEtleSA/IGtleURvd25Db21tYW5kc01hcC0+Z2V0KG1hcEtleSkgOiAwOworICAgIH0KKyAgICAK
KyAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwgZXZ0LT5jaGFyQ29kZSgpOworICAg
IHJldHVybiBtYXBLZXkgPyBrZXlQcmVzc0NvbW1hbmRzTWFwLT5nZXQobWFwS2V5KSA6IDA7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3JvbGwoUGFnZSogcGFnZSwgU2Nyb2xsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Cit9CisKK2Jvb2wgV2Vi
UGFnZTo6cGVyZm9ybURlZmF1bHRCZWhhdmlvckZvcktleUV2ZW50KGNvbnN0IFdlYktleWJvYXJk
RXZlbnQmIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgpICE9
IFdlYkV2ZW50OjpLZXlEb3duICYmIGtleWJvYXJkRXZlbnQudHlwZSgpICE9IFdlYkV2ZW50OjpS
YXdLZXlEb3duKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGtleWJvYXJk
RXZlbnQud2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKKyAgICBjYXNlIFZLX0JBQ0s6CisgICAg
ICAgIGlmIChrZXlib2FyZEV2ZW50LnNoaWZ0S2V5KCkpCisgICAgICAgICAgICBtX3BhZ2UtPmdv
Rm9yd2FyZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BhZ2UtPmdvQmFjaygpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX1NQQUNFOgorICAgICAgICBzY3JvbGwobV9wYWdl
LmdldCgpLCBrZXlib2FyZEV2ZW50LnNoaWZ0S2V5KCkgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24s
IFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfTEVGVDoKKyAgICAg
ICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsTGVmdCwgU2Nyb2xsQnlMaW5lKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBWS19SSUdIVDoKKyAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQo
KSwgU2Nyb2xsUmlnaHQsIFNjcm9sbEJ5TGluZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VktfVVA6CisgICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbFVwLCBTY3JvbGxCeUxp
bmUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX0RPV046CisgICAgICAgIHNjcm9sbCht
X3BhZ2UuZ2V0KCksIFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVktfSE9NRToKKyAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsVXAs
IFNjcm9sbEJ5RG9jdW1lbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX0VORDoKKyAg
ICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfUFJJT1I6CisgICAgICAgIHNjcm9sbChtX3Bh
Z2UuZ2V0KCksIFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFZLX05FWFQ6CisgICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbERvd24sIFNj
cm9sbEJ5UGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78235</attachid>
            <date>2011-01-07 07:22:02 -0800</date>
            <delta_ts>2011-02-10 11:49:03 -0800</delta_ts>
            <desc>WebEventFactory and WebErrors class implementation for GTK port</desc>
            <filename>48510.0.patch.complete</filename>
            <type>text/plain</type>
            <size>37477</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTI0MikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTEtMDEtMDcgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9s
YS5jb20+IGFuZCBSYXZpIEthc2liaGF0bGEgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10g
SW1wbGVtZW50IFdlYkV2ZW50RmFjdG9yeSwgV2ViRXJyb3JzLCBNb2R1bGUsIFdlYlBhZ2UsIFdl
YkNvbnRleHQsICBOYXRpdmVLZXlib2FyZEV2ZW50IGNsYXNzZXMgZm9yIFdlYktpdDIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTEwCisKKyAgICAg
ICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHA6IEFkZGVkLiBHVEsgaW1wbGVtZW50
YXRpb24gZm9yIFdlYk1vdXNlRXZlbnQsIFdlYldoZWVsRXZlbnQsIFdlYktleWJvYXJkRXZlbnQu
CisgICAgICAgIChXZWJLaXQ6OnBvc2l0aW9uRm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0Ojpn
bG9iYWxQb3NpdGlvbkZvckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6Y2xpY2tDb3VudCk6Cisg
ICAgICAgIChXZWJLaXQ6Om1vZGlmaWVyc0ZvckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6YnV0
dG9uRm9yRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdl
Yk1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdl
YldoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29k
ZSk6CisgICAgICAgIChXZWJLaXQ6OndpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0Ojptb2Rp
ZmllcnNGb3JDdXJyZW50S2V5U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rv
cnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
Z3RrL1dlYkVycm9yc0d0ay5jcHA6IEFkZGVkLiBTdHViYmVkIGltcGxlbWVudGF0aW9uIGZvciBH
VEsgcG9ydC4gWWV0IHRvIGltcGxlbWVudC4KKyAgICAgICAgKFdlYktpdDo6Y2FuY2VsbGVkRXJy
b3IpOgorICAgICAgICAoV2ViS2l0OjpibG9ja2VkRXJyb3IpOgorICAgICAgICAoV2ViS2l0Ojpj
YW5ub3RTaG93VVJMRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjppbnRlcnJ1cHRGb3JQb2xpY3lD
aGFuZ2VFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKToK
KyAgICAgICAgKFdlYktpdDo6ZmlsZURvZXNOb3RFeGlzdEVycm9yKToKKyAgICAgICAgKFdlYktp
dDo6cGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcik6CisKIDIwMTEtMDEtMDYgIEFkYW0gUm9iZW4g
IDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFsd2F5cyBzaG93IHRoZSBhcnJvdyBjdXJz
b3Igd2hlbiB0aGUgd2ViIHByb2Nlc3MgaGFzIGNyYXNoZWQKSW5kZXg6IFdlYktpdDIvU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL2d0
ay9XZWJFdmVudEZhY3RvcnkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvZ3Rr
L1dlYkV2ZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIK
KworI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlw
ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3N0YXRpYyBpbmxpbmUgR2RrUG9pbnQgcG9zaXRpb25Gb3JFdmVudChHZGtFdmVudEFueSogZXZl
bnQpCit7CisgICAgR2RrUG9pbnQgcG9pbnQ7CisgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19C
VVRUT05fUFJFU1MgfHwgZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9SRUxFQVNFKSB7CisgICAg
ICAgIHBvaW50LnggPSAoZ2ludCkoKEdka0V2ZW50QnV0dG9uICopZXZlbnQpLT54OworICAgICAg
ICBwb2ludC55ID0gKGdpbnQpKChHZGtFdmVudEJ1dHRvbiAqKWV2ZW50KS0+eTsKKyAgICB9IGVs
c2UgaWYgKGV2ZW50LT50eXBlID09IEdES19NT1RJT05fTk9USUZZKSB7CisgICAgICAgIHBvaW50
LnggPSAoZ2ludCkoKEdka0V2ZW50TW90aW9uICopZXZlbnQpLT54OworICAgICAgICBwb2ludC55
ID0gKGdpbnQpKChHZGtFdmVudE1vdGlvbiAqKWV2ZW50KS0+eTsKKyAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlID09IEdES19TQ1JPTEwpIHsKKyAgICAgICAgcG9pbnQueCA9IChnaW50KSgoR2Rr
RXZlbnRTY3JvbGwgKilldmVudCktPng7CisgICAgICAgIHBvaW50LnkgPSAoZ2ludCkoKEdka0V2
ZW50U2Nyb2xsICopZXZlbnQpLT55OworICAgIH0KKworICAgIHJldHVybiBwb2ludDsKK30KKwor
c3RhdGljIGlubGluZSBHZGtQb2ludCBnbG9iYWxQb3NpdGlvbkZvckV2ZW50KEdka0V2ZW50QW55
KiBldmVudCkKK3sKKyAgICBHZGtQb2ludCBwb2ludDsKKyAgICBpZiAoZXZlbnQtPnR5cGUgPT0g
R0RLX0JVVFRPTl9QUkVTUyB8fCBldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JFTEVBU0UpIHsK
KyAgICAgICAgcG9pbnQueCA9ICgoR2RrRXZlbnRCdXR0b24gKilldmVudCktPnhfcm9vdDsKKyAg
ICAgICAgcG9pbnQueSA9ICgoR2RrRXZlbnRCdXR0b24gKilldmVudCktPnlfcm9vdDsKKyAgICB9
IGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES19NT1RJT05fTk9USUZZKSB7CisgICAgICAgIHBv
aW50LnggPSAoKEdka0V2ZW50TW90aW9uICopZXZlbnQpLT54X3Jvb3Q7IAorICAgICAgICBwb2lu
dC55ID0gKChHZGtFdmVudE1vdGlvbiAqKWV2ZW50KS0+eV9yb290OworICAgIH0gZWxzZSBpZiAo
ZXZlbnQtPnR5cGUgPT0gR0RLX1NDUk9MTCkgeworICAgICAgICBwb2ludC54ID0gKChHZGtFdmVu
dFNjcm9sbCAqKWV2ZW50KS0+eF9yb290OworICAgICAgICBwb2ludC55ID0gKChHZGtFdmVudFNj
cm9sbCAqKWV2ZW50KS0+eV9yb290OworICAgIH0KKworICAgIHJldHVybiBwb2ludDsKK30KKwor
c3RhdGljIGlubGluZSBpbnQgY2xpY2tDb3VudChHZGtFdmVudEFueSogZXZlbnQpCit7CisgICAg
aW50IHNDbGlja0NvdW50ID0gMDsKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2Fz
ZSBHREtfQlVUVE9OX1BSRVNTOgorICAgICAgICBzQ2xpY2tDb3VudCA9IDE7CisgICAgICAgIGJy
ZWFrOyAKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgICAgICBzQ2xpY2tDb3VudCA9
IDI7CisgICAgICAgIGJyZWFrOyAKKyAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgorICAgICAg
ICBzQ2xpY2tDb3VudCA9IDM7CisgICAgICAgIGJyZWFrOyAKKyAgICBjYXNlIEdES19NT1RJT05f
Tk9USUZZOgorICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxFQVNFOgorICAgICAgICBzQ2xpY2tDb3Vu
dCA9IDA7CisgICAgICAgIGJyZWFrOyAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9OworICAgIHJldHVybiBzQ2xpY2tDb3VudDsKK30KKworc3RhdGlj
IGlubGluZSBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVyc0ZvckV2ZW50KGd1aW50IHN0YXRl
KQoreworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKHN0YXRlICYgR0RLX0NP
TlRST0xfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpDb250cm9sS2V5Owor
ICAgIGlmIChzdGF0ZSAmIEdES19TSElGVF9NQVNLKQorICAgICAgICBtb2RpZmllcnMgfD0gV2Vi
RXZlbnQ6OlNoaWZ0S2V5OworICAgIGlmIChzdGF0ZSAmIEdES19NT0QxX01BU0spCisgICAgICAg
IG1vZGlmaWVycyB8PSBXZWJFdmVudDo6QWx0S2V5OworICAgIGlmIChzdGF0ZSAmIEdES19NRVRB
X01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6TWV0YUtleTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJzKTsKK30KKworc3Rh
dGljIGlubGluZSBXZWJNb3VzZUV2ZW50OjpCdXR0b24gYnV0dG9uRm9yRXZlbnQoR2RrRXZlbnRB
bnkgKmV2ZW50KQoreworICAgIHVuc2lnbmVkIGJ1dHRvbiA9IDA7CisgICAgR2RrRXZlbnRNb3Rp
b24qIG1vdGlvbjsKKyAgICBHZGtFdmVudEJ1dHRvbiogYkV2ZW50OworICAgIHN3aXRjaCAoZXZl
bnQtPnR5cGUpIHsKKyAgICBjYXNlIEdES19NT1RJT05fTk9USUZZOgorICAgICAgICBtb3Rpb24g
PSAoR2RrRXZlbnRNb3Rpb24qKSBldmVudDsKKyAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVu
dDo6Tm9CdXR0b247CisgICAgICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjFfTUFT
SykKKyAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b247CisgICAg
ICAgIGVsc2UgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfQlVUVE9OMl9NQVNLKQorICAgICAgICAg
ICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlm
IChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjNfTUFTSykKKyAgICAgICAgICAgIGJ1dHRvbiA9
IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
R0RLX0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgIGNhc2Ug
R0RLXzNCVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6CisgICAgICAg
IGJFdmVudCA9IChHZGtFdmVudEJ1dHRvbiAqKWV2ZW50OworICAgICAgICBpZiAoYkV2ZW50LT5i
dXR0b24gPT0gMSkKKyAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0
b247CisgICAgICAgIGVsc2UgaWYgKGJFdmVudC0+YnV0dG9uID09IDIpCisgICAgICAgICAgICBi
dXR0b24gPSBXZWJNb3VzZUV2ZW50OjpNaWRkbGVCdXR0b247CisgICAgICAgIGVsc2UgaWYgKGJF
dmVudC0+YnV0dG9uID09IDMpCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpS
aWdodEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfTsgICAgICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJNb3VzZUV2ZW50OjpCdXR0b24+KGJ1dHRvbik7Cit9CisgIAorCitXZWJNb3VzZUV2ZW50IFdl
YkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChHZGtFdmVudEFueSAqZXZlbnQpCit7
CisgICAgZ3VpbnQgdGltZXN0YW1wID0gMDsgCisgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2Rp
ZmllcnMgPSBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPigwKTsKKyAgICBXZWJNb3Vz
ZUV2ZW50OjpCdXR0b24gYnV0dG9uID0gYnV0dG9uRm9yRXZlbnQoZXZlbnQpOworICAgIEdka1Bv
aW50IHBvc2l0aW9uID0gcG9zaXRpb25Gb3JFdmVudChldmVudCk7CisgICAgR2RrUG9pbnQgZ2xv
YmFsUG9zaXRpb24gPSBnbG9iYWxQb3NpdGlvbkZvckV2ZW50KChHZGtFdmVudEFueSAqKWV2ZW50
KTsKKyAgICBpbnQgY2xpY2tjb3VudCA9IGNsaWNrQ291bnQoZXZlbnQpOworICAgIFdlYkV2ZW50
OjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxXZWJFdmVudDo6VHlwZT4oMCk7CisgICAgc3dpdGNo
IChldmVudC0+dHlwZSkgeworICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6CisgICAgICAgIHR5
cGUgPSBXZWJFdmVudDo6TW91c2VNb3ZlOworICAgICAgICB0aW1lc3RhbXAgPSAoKEdka0V2ZW50
TW90aW9uICopZXZlbnQpLT50aW1lOworICAgICAgICBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JF
dmVudCgoKEdka0V2ZW50TW90aW9uICopZXZlbnQpLT5zdGF0ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKKyAgICAgICAgdGltZXN0YW1wID0gKChHZGtFdmVu
dEJ1dHRvbiAqKWV2ZW50KS0+dGltZTsKKyAgICAgICAgbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9y
RXZlbnQoKChHZGtFdmVudEJ1dHRvbiAqKWV2ZW50KS0+c3RhdGUpOworICAgICAgICB0eXBlID0g
V2ViRXZlbnQ6Ok1vdXNlRG93bjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfQlVUVE9O
X1JFTEVBU0U6CisgICAgICAgIHRpbWVzdGFtcCA9ICgoR2RrRXZlbnRCdXR0b24gKilldmVudCkt
PnRpbWU7CisgICAgICAgIG1vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KCgoR2RrRXZlbnRC
dXR0b24gKilldmVudCktPnN0YXRlKTsKKyAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpNb3VzZVVw
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0IDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisgICAgV2ViQ29yZTo6SW50UG9pbnQgZXZlbnRQb3NpdGlvbihwb3Np
dGlvbi54LCBwb3NpdGlvbi55KTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBldmVudEdsb2JhbFBv
c2l0aW9uKGdsb2JhbFBvc2l0aW9uLngsIGdsb2JhbFBvc2l0aW9uLnkpOworCisgICAgcmV0dXJu
IFdlYk1vdXNlRXZlbnQodHlwZSwgYnV0dG9uLCBldmVudFBvc2l0aW9uLCBldmVudEdsb2JhbFBv
c2l0aW9uLCAwLCAwLCAwLCBjbGlja2NvdW50LCBtb2RpZmllcnMsIHRpbWVzdGFtcCk7Cit9CisK
K1dlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KEdka0V2
ZW50U2Nyb2xsICpldmVudCkKK3sKKyAgICBXZWJXaGVlbEV2ZW50OjpHcmFudWxhcml0eSBncmFu
dWxhcml0eSAgPSBXZWJXaGVlbEV2ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKKworICAg
IGRvdWJsZSB0aW1lc3RhbXAgPSBldmVudC0+dGltZTsgCisKKyAgICBmbG9hdCBkZWx0YVggPSAw
OworICAgIGZsb2F0IGRlbHRhWSA9IDA7CisgICAgZmxvYXQgd2hlZWxUaWNrc1ggPSAwOworICAg
IGZsb2F0IHdoZWVsVGlja3NZID0gMDsKKworICAgIC8vIFRha2VuIGZyb20gV2ViQ29yZSBTY3Jv
bGxCYXIgCisgICAgZmxvYXQgc2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDQwLjBmOworICAgIGZs
b2F0IGRlbHRhID0gMTsKKyAgICBHZGtQb2ludCBwb3NpdGlvbiA9IHBvc2l0aW9uRm9yRXZlbnQo
KEdka0V2ZW50QW55ICopZXZlbnQpOworICAgIEdka1BvaW50IGdsb2JhbFBvc2l0aW9uID0gZ2xv
YmFsUG9zaXRpb25Gb3JFdmVudCgoR2RrRXZlbnRBbnkgKilldmVudCk7CisgICAgV2ViQ29yZTo6
SW50UG9pbnQgZXZlbnRQb3NpdGlvbihwb3NpdGlvbi54LCBwb3NpdGlvbi55KTsKKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBldmVudEdsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uLngsIGdsb2Jh
bFBvc2l0aW9uLnkpOworICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gbW9kaWZp
ZXJzRm9yRXZlbnQoZXZlbnQtPnN0YXRlKTsKKyAgICBzd2l0Y2ggKGV2ZW50LT5kaXJlY3Rpb24p
IHsKKyAgICBjYXNlIEdES19TQ1JPTExfVVA6CisgICAgICAgIGRlbHRhWSA9IGRlbHRhOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdES19TQ1JPTExfRE9XTjoKKyAgICAgICAgZGVsdGFZID0g
LWRlbHRhOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19TQ1JPTExfTEVGVDoKKyAgICAg
ICAgZGVsdGFYID0gZGVsdGE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RLX1NDUk9MTF9S
SUdIVDoKKyAgICAgICAgZGVsdGFYID0gLWRlbHRhOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICB3aGVlbFRpY2tzWCA9IGRlbHRhWDsKKyAgICB3aGVlbFRpY2tzWSA9IGRlbHRhWTsgCisg
ICAgZGVsdGFYICo9IHNjcm9sbGJhclBpeGVsc1BlckxpbmU7CisgICAgZGVsdGFZICo9IHNjcm9s
bGJhclBpeGVsc1BlckxpbmU7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIGV2ZW50RGVsdGEoZGVs
dGFYLCBkZWx0YVkpOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBldmVudFdoZWVsVGlja3Mod2hl
ZWxUaWNrc1gsIHdoZWVsVGlja3NZKTsKKyAgICAKKyAgICByZXR1cm4gV2ViV2hlZWxFdmVudChX
ZWJFdmVudDo6V2hlZWwsIGV2ZW50UG9zaXRpb24sIGV2ZW50R2xvYmFsUG9zaXRpb24sIGV2ZW50
RGVsdGEsIGV2ZW50V2hlZWxUaWNrcywgZ3JhbnVsYXJpdHksIG1vZGlmaWVycywgdGltZXN0YW1w
KTsKK30KKworLy8gVGFrZW4gZnJvbSBLZXlFdmVudEd0ay5jcHAKK3N0YXRpYyBTdHJpbmcga2V5
SWRlbnRpZmllckZvckdka0tleUNvZGUoZ3VpbnQga2V5Q29kZSkKK3sKKyAgICBzd2l0Y2ggKGtl
eUNvZGUpIHsKKyAgICBjYXNlIEdES19NZW51OgorICAgIGNhc2UgR0RLX0FsdF9MOgorICAgIGNh
c2UgR0RLX0FsdF9SOgorICAgICAgICByZXR1cm4gIkFsdCI7CisgICAgY2FzZSBHREtfQ2xlYXI6
CisgICAgICAgIHJldHVybiAiQ2xlYXIiOworICAgIGNhc2UgR0RLX0Rvd246CisgICAgICAgIHJl
dHVybiAiRG93biI7CisgICAgICAgIC8vICJFbmQiCisgICAgY2FzZSBHREtfRW5kOgorICAgICAg
ICByZXR1cm4gIkVuZCI7CisgICAgICAgIC8vICJFbnRlciIKKyAgICBjYXNlIEdES19JU09fRW50
ZXI6CisgICAgY2FzZSBHREtfS1BfRW50ZXI6CisgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAg
ICByZXR1cm4gIkVudGVyIjsKKyAgICBjYXNlIEdES19FeGVjdXRlOgorICAgICAgICByZXR1cm4g
IkV4ZWN1dGUiOworICAgIGNhc2UgR0RLX0YxOgorICAgICAgICByZXR1cm4gIkYxIjsKKyAgICBj
YXNlIEdES19GMjoKKyAgICAgICAgcmV0dXJuICJGMiI7CisgICAgY2FzZSBHREtfRjM6CisgICAg
ICAgIHJldHVybiAiRjMiOworICAgIGNhc2UgR0RLX0Y0OgorICAgICAgICByZXR1cm4gIkY0IjsK
KyAgICBjYXNlIEdES19GNToKKyAgICAgICAgcmV0dXJuICJGNSI7CisgICAgY2FzZSBHREtfRjY6
CisgICAgICAgIHJldHVybiAiRjYiOworICAgIGNhc2UgR0RLX0Y3OgorICAgICAgICByZXR1cm4g
IkY3IjsKKyAgICBjYXNlIEdES19GODoKKyAgICAgICAgcmV0dXJuICJGOCI7CisgICAgY2FzZSBH
REtfRjk6CisgICAgICAgIHJldHVybiAiRjkiOworICAgIGNhc2UgR0RLX0YxMDoKKyAgICAgICAg
cmV0dXJuICJGMTAiOworICAgIGNhc2UgR0RLX0YxMToKKyAgICAgICAgcmV0dXJuICJGMTEiOwor
ICAgIGNhc2UgR0RLX0YxMjoKKyAgICAgICAgcmV0dXJuICJGMTIiOworICAgIGNhc2UgR0RLX0Yx
MzoKKyAgICAgICAgcmV0dXJuICJGMTMiOworICAgIGNhc2UgR0RLX0YxNDoKKyAgICAgICAgcmV0
dXJuICJGMTQiOworICAgIGNhc2UgR0RLX0YxNToKKyAgICAgICAgcmV0dXJuICJGMTUiOworICAg
IGNhc2UgR0RLX0YxNjoKKyAgICAgICAgcmV0dXJuICJGMTYiOworICAgIGNhc2UgR0RLX0YxNzoK
KyAgICAgICAgcmV0dXJuICJGMTciOworICAgIGNhc2UgR0RLX0YxODoKKyAgICAgICAgcmV0dXJu
ICJGMTgiOworICAgIGNhc2UgR0RLX0YxOToKKyAgICAgICAgcmV0dXJuICJGMTkiOworICAgIGNh
c2UgR0RLX0YyMDoKKyAgICAgICAgcmV0dXJuICJGMjAiOworICAgIGNhc2UgR0RLX0YyMToKKyAg
ICAgICAgcmV0dXJuICJGMjEiOworICAgIGNhc2UgR0RLX0YyMjoKKyAgICAgICAgcmV0dXJuICJG
MjIiOworICAgIGNhc2UgR0RLX0YyMzoKKyAgICAgICAgcmV0dXJuICJGMjMiOworICAgIGNhc2Ug
R0RLX0YyNDoKKyAgICAgICAgcmV0dXJuICJGMjQiOworICAgIGNhc2UgR0RLX0hlbHA6CisgICAg
ICAgIHJldHVybiAiSGVscCI7CisgICAgY2FzZSBHREtfSG9tZToKKyAgICAgICAgcmV0dXJuICJI
b21lIjsKKyAgICBjYXNlIEdES19JbnNlcnQ6CisgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKKyAg
ICBjYXNlIEdES19MZWZ0OgorICAgICAgICByZXR1cm4gIkxlZnQiOworICAgIGNhc2UgR0RLX1Bh
Z2VfRG93bjoKKyAgICAgICAgcmV0dXJuICJQYWdlRG93biI7CisgICAgY2FzZSBHREtfUGFnZV9V
cDoKKyAgICAgICAgcmV0dXJuICJQYWdlVXAiOworICAgIGNhc2UgR0RLX1BhdXNlOgorICAgICAg
ICByZXR1cm4gIlBhdXNlIjsKKyAgICBjYXNlIEdES18zMjcwX1ByaW50U2NyZWVuOgorICAgICAg
ICByZXR1cm4gIlByaW50U2NyZWVuIjsKKyAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAgcmV0
dXJuICJSaWdodCI7CisgICAgY2FzZSBHREtfU2VsZWN0OgorICAgICAgICByZXR1cm4gIlNlbGVj
dCI7CisgICAgY2FzZSBHREtfVXA6CisgICAgICAgIHJldHVybiAiVXAiOworICAgICAgICAvLyBT
dGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDdGLgorICAgIGNhc2UgR0RLX0RlbGV0
ZToKKyAgICAgICAgcmV0dXJuICJVKzAwN0YiOworICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKKyAg
ICAgICAgcmV0dXJuICJVKzAwMDgiOworICAgIGNhc2UgR0RLX0lTT19MZWZ0X1RhYjoKKyAgICBj
YXNlIEdES18zMjcwX0JhY2tUYWI6CisgICAgY2FzZSBHREtfVGFiOgorICAgICAgICByZXR1cm4g
IlUrMDAwOSI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJV
KyUwNFgiLCBnZGtfa2V5dmFsX3RvX3VuaWNvZGUoZ2RrX2tleXZhbF90b191cHBlcihrZXlDb2Rl
KSkpOworICAgIH0KK30KKworLy8gVGFrZW4gZnJvbSBLZXlFdmVudEd0ay5jcHAKK3N0YXRpYyBp
bnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudCh1bnNpZ25lZCBpbnQga2V5Y29kZSkKK3sKKyAg
ICBzd2l0Y2ggKGtleWNvZGUpIHsKKyAgICBjYXNlIEdES19LUF8wOgorICAgICAgICByZXR1cm4g
VktfTlVNUEFEMDsgLy8gKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgIGNhc2UgR0RLX0tQ
XzE6CisgICAgICAgIHJldHVybiBWS19OVU1QQUQxOyAvLyAoNjEpIE51bWVyaWMga2V5cGFkIDEg
a2V5CisgICAgY2FzZSBHREtfS1BfMjoKKyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDI7IC8vICg2
MikgTnVtZXJpYyBrZXlwYWQgMiBrZXkKKyAgICBjYXNlIEdES19LUF8zOgorICAgICAgICByZXR1
cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorICAgIGNhc2UgR0RL
X0tQXzQ6CisgICAgICAgIHJldHVybiBWS19OVU1QQUQ0OyAvLyAoNjQpIE51bWVyaWMga2V5cGFk
IDQga2V5CisgICAgY2FzZSBHREtfS1BfNToKKyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDU7IC8v
ICg2NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkKKyAgICBjYXNlIEdES19LUF82OgorICAgICAgICBy
ZXR1cm4gVktfTlVNUEFENjsgLy8gKDY2KSBOdW1lcmljIGtleXBhZCA2IGtleQorICAgIGNhc2Ug
R0RLX0tQXzc6CisgICAgICAgIHJldHVybiBWS19OVU1QQUQ3OyAvLyAoNjcpIE51bWVyaWMga2V5
cGFkIDcga2V5CisgICAgY2FzZSBHREtfS1BfODoKKyAgICAgICAgcmV0dXJuIFZLX05VTVBBRDg7
IC8vICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKKyAgICBjYXNlIEdES19LUF85OgorICAgICAg
ICByZXR1cm4gVktfTlVNUEFEOTsgLy8gKDY5KSBOdW1lcmljIGtleXBhZCA5IGtleQorICAgIGNh
c2UgR0RLX0tQX011bHRpcGx5OgorICAgICAgICByZXR1cm4gVktfTVVMVElQTFk7IC8vICg2QSkg
TXVsdGlwbHkga2V5CisgICAgY2FzZSBHREtfS1BfQWRkOgorICAgICAgICByZXR1cm4gVktfQURE
OyAvLyAoNkIpIEFkZCBrZXkKKyAgICBjYXNlIEdES19LUF9TdWJ0cmFjdDoKKyAgICAgICAgcmV0
dXJuIFZLX1NVQlRSQUNUOyAvLyAoNkQpIFN1YnRyYWN0IGtleQorICAgIGNhc2UgR0RLX0tQX0Rl
Y2ltYWw6CisgICAgICAgIHJldHVybiBWS19ERUNJTUFMOyAvLyAoNkUpIERlY2ltYWwga2V5Cisg
ICAgY2FzZSBHREtfS1BfRGl2aWRlOgorICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYp
IERpdmlkZSBrZXkKKworICAgIGNhc2UgR0RLX0tQX1BhZ2VfVXA6CisgICAgICAgIHJldHVybiBW
S19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQorICAgIGNhc2UgR0RLX0tQX1BhZ2VfRG93bjoK
KyAgICAgICAgcmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFHRSBET1dOIGtleQorICAgIGNhc2Ug
R0RLX0tQX0VuZDoKKyAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIzKSBFTkQga2V5CisgICAg
Y2FzZSBHREtfS1BfSG9tZToKKyAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBr
ZXkKKyAgICBjYXNlIEdES19LUF9MZWZ0OgorICAgICAgICByZXR1cm4gVktfTEVGVDsgLy8gKDI1
KSBMRUZUIEFSUk9XIGtleQorICAgIGNhc2UgR0RLX0tQX1VwOgorICAgICAgICByZXR1cm4gVktf
VVA7IC8vICgyNikgVVAgQVJST1cga2V5CisgICAgY2FzZSBHREtfS1BfUmlnaHQ6CisgICAgICAg
IHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICBjYXNlIEdES19L
UF9Eb3duOgorICAgICAgICByZXR1cm4gVktfRE9XTjsgLy8gKDI4KSBET1dOIEFSUk9XIGtleQor
CisgICAgY2FzZSBHREtfQmFja1NwYWNlOgorICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4
KSBCQUNLU1BBQ0Uga2V5CisgICAgY2FzZSBHREtfSVNPX0xlZnRfVGFiOgorICAgIGNhc2UgR0RL
XzMyNzBfQmFja1RhYjoKKyAgICBjYXNlIEdES19UYWI6CisgICAgICAgIHJldHVybiBWS19UQUI7
IC8vICgwOSkgVEFCIGtleQorICAgIGNhc2UgR0RLX0NsZWFyOgorICAgICAgICByZXR1cm4gVktf
Q0xFQVI7IC8vICgwQykgQ0xFQVIga2V5CisgICAgY2FzZSBHREtfSVNPX0VudGVyOgorICAgIGNh
c2UgR0RLX0tQX0VudGVyOgorICAgIGNhc2UgR0RLX1JldHVybjoKKyAgICAgICAgcmV0dXJuIFZL
X1JFVFVSTjsgLy8gKDBEKSBSZXR1cm4ga2V5CisgICAgY2FzZSBHREtfU2hpZnRfTDoKKyAgICBj
YXNlIEdES19TaGlmdF9SOgorICAgICAgICByZXR1cm4gVktfU0hJRlQ7IC8vICgxMCkgU0hJRlQg
a2V5CisgICAgY2FzZSBHREtfQ29udHJvbF9MOgorICAgIGNhc2UgR0RLX0NvbnRyb2xfUjoKKyAg
ICAgICAgcmV0dXJuIFZLX0NPTlRST0w7IC8vICgxMSkgQ1RSTCBrZXkKKyAgICBjYXNlIEdES19N
ZW51OgorICAgICAgICByZXR1cm4gVktfQVBQUzsgLy8gKDVEKSBBcHBsaWNhdGlvbnMga2V5IChO
YXR1cmFsIGtleWJvYXJkKQorICAgIGNhc2UgR0RLX0FsdF9MOgorICAgIGNhc2UgR0RLX0FsdF9S
OgorICAgICAgICByZXR1cm4gVktfTUVOVTsgLy8gKDEyKSBBTFQga2V5CisKKyAgICBjYXNlIEdE
S19QYXVzZToKKyAgICAgICAgcmV0dXJuIFZLX1BBVVNFOyAvLyAoMTMpIFBBVVNFIGtleQorICAg
IGNhc2UgR0RLX0NhcHNfTG9jazoKKyAgICAgICAgcmV0dXJuIFZLX0NBUElUQUw7IC8vICgxNCkg
Q0FQUyBMT0NLIGtleQorICAgIGNhc2UgR0RLX0thbmFfTG9jazoKKyAgICBjYXNlIEdES19LYW5h
X1NoaWZ0OgorICAgICAgICByZXR1cm4gVktfS0FOQTsgLy8gKDE1KSBJbnB1dCBNZXRob2QgRWRp
dG9yIChJTUUpIEthbmEgbW9kZQorICAgIGNhc2UgR0RLX0hhbmd1bDoKKyAgICAgICAgcmV0dXJu
IFZLX0hBTkdVTDsgLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFZLX0pVTkpBICgxNykgSU1FIEp1bmphIG1vZGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVktfRklOQUwgKDE4KSBJTUUgZmluYWwgbW9kZQorICAgIGNh
c2UgR0RLX0hhbmd1bF9IYW5qYToKKyAgICAgICAgcmV0dXJuIFZLX0hBTkpBOyAvLyAoMTkpIElN
RSBIYW5qYSBtb2RlCisgICAgY2FzZSBHREtfS2Fuamk6CisgICAgICAgIHJldHVybiBWS19LQU5K
STsgLy8gKDE5KSBJTUUgS2FuamkgbW9kZQorICAgIGNhc2UgR0RLX0VzY2FwZToKKyAgICAgICAg
cmV0dXJuIFZLX0VTQ0FQRTsgLy8gKDFCKSBFU0Mga2V5CisgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUgY29udmVydAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBWS19OT05DT05WRVJUICgxRCkgSU1FIG5vbmNvbnZlcnQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVktfQUNDRVBUICgxRSkgSU1FIGFjY2VwdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QK
KyAgICBjYXNlIEdES19zcGFjZToKKyAgICAgICAgcmV0dXJuIFZLX1NQQUNFOyAvLyAoMjApIFNQ
QUNFQkFSCisgICAgY2FzZSBHREtfUGFnZV9VcDoKKyAgICAgICAgcmV0dXJuIFZLX1BSSU9SOyAv
LyAoMjEpIFBBR0UgVVAga2V5CisgICAgY2FzZSBHREtfUGFnZV9Eb3duOgorICAgICAgICByZXR1
cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5CisgICAgY2FzZSBHREtfRW5kOgorICAg
ICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVORCBrZXkKKyAgICBjYXNlIEdES19Ib21lOgor
ICAgICAgICByZXR1cm4gVktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQorICAgIGNhc2UgR0RLX0xl
ZnQ6CisgICAgICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5CisgICAg
Y2FzZSBHREtfVXA6CisgICAgICAgIHJldHVybiBWS19VUDsgLy8gKDI2KSBVUCBBUlJPVyBrZXkK
KyAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAgcmV0dXJuIFZLX1JJR0hUOyAvLyAoMjcpIFJJ
R0hUIEFSUk9XIGtleQorICAgIGNhc2UgR0RLX0Rvd246CisgICAgICAgIHJldHVybiBWS19ET1dO
OyAvLyAoMjgpIERPV04gQVJST1cga2V5CisgICAgY2FzZSBHREtfU2VsZWN0OgorICAgICAgICBy
ZXR1cm4gVktfU0VMRUNUOyAvLyAoMjkpIFNFTEVDVCBrZXkKKyAgICBjYXNlIEdES19QcmludDoK
KyAgICAgICAgcmV0dXJuIFZLX1BSSU5UOyAvLyAoMkEpIFBSSU5UIGtleQorICAgIGNhc2UgR0RL
X0V4ZWN1dGU6CisgICAgICAgIHJldHVybiBWS19FWEVDVVRFOyAvLyAoMkIpIEVYRUNVVEUga2V5
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkdW5ubyBvbiB0aGlzCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBjYXNlIEdES19QcmludFNjcmVlbjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHJldHVybiBWS19TTkFQU0hPVDsgLy8gKDJDKSBQUklOVCBTQ1JFRU4g
a2V5CisgICAgY2FzZSBHREtfSW5zZXJ0OgorICAgICAgICByZXR1cm4gVktfSU5TRVJUOyAvLyAo
MkQpIElOUyBrZXkKKyAgICBjYXNlIEdES19EZWxldGU6CisgICAgICAgIHJldHVybiBWS19ERUxF
VEU7IC8vICgyRSkgREVMIGtleQorICAgIGNhc2UgR0RLX0hlbHA6CisgICAgICAgIHJldHVybiBW
S19IRUxQOyAvLyAoMkYpIEhFTFAga2V5CisgICAgY2FzZSBHREtfMDoKKyAgICBjYXNlIEdES19w
YXJlbnJpZ2h0OgorICAgICAgICByZXR1cm4gVktfMDsgLy8gKDMwKSAwKSBrZXkKKyAgICBjYXNl
IEdES18xOgorICAgIGNhc2UgR0RLX2V4Y2xhbToKKyAgICAgICAgcmV0dXJuIFZLXzE7IC8vICgz
MSkgMSAhIGtleQorICAgIGNhc2UgR0RLXzI6CisgICAgY2FzZSBHREtfYXQ6CisgICAgICAgIHJl
dHVybiBWS18yOyAvLyAoMzIpIDIgJiBrZXkKKyAgICBjYXNlIEdES18zOgorICAgIGNhc2UgR0RL
X251bWJlcnNpZ246CisgICAgICAgIHJldHVybiBWS18zOyAvLyBjYXNlICczJzogY2FzZSAnIyc7
CisgICAgY2FzZSBHREtfNDoKKyAgICBjYXNlIEdES19kb2xsYXI6IC8vICgzNCkgNCBrZXkgJyQn
OworICAgICAgICByZXR1cm4gVktfNDsKKyAgICBjYXNlIEdES181OgorICAgIGNhc2UgR0RLX3Bl
cmNlbnQ6CisgICAgICAgIHJldHVybiBWS181OyAvLyAoMzUpIDUga2V5ICAnJScKKyAgICBjYXNl
IEdES182OgorICAgIGNhc2UgR0RLX2FzY2lpY2lyY3VtOgorICAgICAgICByZXR1cm4gVktfNjsg
Ly8gICgzNikgNiBrZXkgICdeJworICAgIGNhc2UgR0RLXzc6CisgICAgY2FzZSBHREtfYW1wZXJz
YW5kOgorICAgICAgICByZXR1cm4gVktfNzsgLy8gICgzNykgNyBrZXkgIGNhc2UgJyYnCisgICAg
Y2FzZSBHREtfODoKKyAgICBjYXNlIEdES19hc3RlcmlzazoKKyAgICAgICAgcmV0dXJuIFZLXzg7
IC8vICAoMzgpIDgga2V5ICAnKicKKyAgICBjYXNlIEdES185OgorICAgIGNhc2UgR0RLX3BhcmVu
bGVmdDoKKyAgICAgICAgcmV0dXJuIFZLXzk7IC8vICAoMzkpIDkga2V5ICcoJworICAgIGNhc2Ug
R0RLX2E6CisgICAgY2FzZSBHREtfQToKKyAgICAgICAgcmV0dXJuIFZLX0E7IC8vICAoNDEpIEEg
a2V5IGNhc2UgJ2EnOiBjYXNlICdBJzogcmV0dXJuIDB4NDE7CisgICAgY2FzZSBHREtfYjoKKyAg
ICBjYXNlIEdES19COgorICAgICAgICByZXR1cm4gVktfQjsgLy8gICg0MikgQiBrZXkgY2FzZSAn
Yic6IGNhc2UgJ0InOiByZXR1cm4gMHg0MjsKKyAgICBjYXNlIEdES19jOgorICAgIGNhc2UgR0RL
X0M6CisgICAgICAgIHJldHVybiBWS19DOyAvLyAgKDQzKSBDIGtleSBjYXNlICdjJzogY2FzZSAn
Qyc6IHJldHVybiAweDQzOworICAgIGNhc2UgR0RLX2Q6CisgICAgY2FzZSBHREtfRDoKKyAgICAg
ICAgcmV0dXJuIFZLX0Q7IC8vICAoNDQpIEQga2V5IGNhc2UgJ2QnOiBjYXNlICdEJzogcmV0dXJu
IDB4NDQ7CisgICAgY2FzZSBHREtfZToKKyAgICBjYXNlIEdES19FOgorICAgICAgICByZXR1cm4g
VktfRTsgLy8gICg0NSkgRSBrZXkgY2FzZSAnZSc6IGNhc2UgJ0UnOiByZXR1cm4gMHg0NTsKKyAg
ICBjYXNlIEdES19mOgorICAgIGNhc2UgR0RLX0Y6CisgICAgICAgIHJldHVybiBWS19GOyAvLyAg
KDQ2KSBGIGtleSBjYXNlICdmJzogY2FzZSAnRic6IHJldHVybiAweDQ2OworICAgIGNhc2UgR0RL
X2c6CisgICAgY2FzZSBHREtfRzoKKyAgICAgICAgcmV0dXJuIFZLX0c7IC8vICAoNDcpIEcga2V5
IGNhc2UgJ2cnOiBjYXNlICdHJzogcmV0dXJuIDB4NDc7CisgICAgY2FzZSBHREtfaDoKKyAgICBj
YXNlIEdES19IOgorICAgICAgICByZXR1cm4gVktfSDsgLy8gICg0OCkgSCBrZXkgY2FzZSAnaCc6
IGNhc2UgJ0gnOiByZXR1cm4gMHg0ODsKKyAgICBjYXNlIEdES19pOgorICAgIGNhc2UgR0RLX0k6
CisgICAgICAgIHJldHVybiBWS19JOyAvLyAgKDQ5KSBJIGtleSBjYXNlICdpJzogY2FzZSAnSSc6
IHJldHVybiAweDQ5OworICAgIGNhc2UgR0RLX2o6CisgICAgY2FzZSBHREtfSjoKKyAgICAgICAg
cmV0dXJuIFZLX0o7IC8vICAoNEEpIEoga2V5IGNhc2UgJ2onOiBjYXNlICdKJzogcmV0dXJuIDB4
NEE7CisgICAgY2FzZSBHREtfazoKKyAgICBjYXNlIEdES19LOgorICAgICAgICByZXR1cm4gVktf
SzsgLy8gICg0QikgSyBrZXkgY2FzZSAnayc6IGNhc2UgJ0snOiByZXR1cm4gMHg0QjsKKyAgICBj
YXNlIEdES19sOgorICAgIGNhc2UgR0RLX0w6CisgICAgICAgIHJldHVybiBWS19MOyAvLyAgKDRD
KSBMIGtleSBjYXNlICdsJzogY2FzZSAnTCc6IHJldHVybiAweDRDOworICAgIGNhc2UgR0RLX206
CisgICAgY2FzZSBHREtfTToKKyAgICAgICAgcmV0dXJuIFZLX007IC8vICAoNEQpIE0ga2V5IGNh
c2UgJ20nOiBjYXNlICdNJzogcmV0dXJuIDB4NEQ7CisgICAgY2FzZSBHREtfbjoKKyAgICBjYXNl
IEdES19OOgorICAgICAgICByZXR1cm4gVktfTjsgLy8gICg0RSkgTiBrZXkgY2FzZSAnbic6IGNh
c2UgJ04nOiByZXR1cm4gMHg0RTsKKyAgICBjYXNlIEdES19vOgorICAgIGNhc2UgR0RLX086Cisg
ICAgICAgIHJldHVybiBWS19POyAvLyAgKDRGKSBPIGtleSBjYXNlICdvJzogY2FzZSAnTyc6IHJl
dHVybiAweDRGOworICAgIGNhc2UgR0RLX3A6CisgICAgY2FzZSBHREtfUDoKKyAgICAgICAgcmV0
dXJuIFZLX1A7IC8vICAoNTApIFAga2V5IGNhc2UgJ3AnOiBjYXNlICdQJzogcmV0dXJuIDB4NTA7
CisgICAgY2FzZSBHREtfcToKKyAgICBjYXNlIEdES19ROgorICAgICAgICByZXR1cm4gVktfUTsg
Ly8gICg1MSkgUSBrZXkgY2FzZSAncSc6IGNhc2UgJ1EnOiByZXR1cm4gMHg1MTsKKyAgICBjYXNl
IEdES19yOgorICAgIGNhc2UgR0RLX1I6CisgICAgICAgIHJldHVybiBWS19SOyAvLyAgKDUyKSBS
IGtleSBjYXNlICdyJzogY2FzZSAnUic6IHJldHVybiAweDUyOworICAgIGNhc2UgR0RLX3M6Cisg
ICAgY2FzZSBHREtfUzoKKyAgICAgICAgcmV0dXJuIFZLX1M7IC8vICAoNTMpIFMga2V5IGNhc2Ug
J3MnOiBjYXNlICdTJzogcmV0dXJuIDB4NTM7CisgICAgY2FzZSBHREtfdDoKKyAgICBjYXNlIEdE
S19UOgorICAgICAgICByZXR1cm4gVktfVDsgLy8gICg1NCkgVCBrZXkgY2FzZSAndCc6IGNhc2Ug
J1QnOiByZXR1cm4gMHg1NDsKKyAgICBjYXNlIEdES191OgorICAgIGNhc2UgR0RLX1U6CisgICAg
ICAgIHJldHVybiBWS19VOyAvLyAgKDU1KSBVIGtleSBjYXNlICd1JzogY2FzZSAnVSc6IHJldHVy
biAweDU1OworICAgIGNhc2UgR0RLX3Y6CisgICAgY2FzZSBHREtfVjoKKyAgICAgICAgcmV0dXJu
IFZLX1Y7IC8vICAoNTYpIFYga2V5IGNhc2UgJ3YnOiBjYXNlICdWJzogcmV0dXJuIDB4NTY7Cisg
ICAgY2FzZSBHREtfdzoKKyAgICBjYXNlIEdES19XOgorICAgICAgICByZXR1cm4gVktfVzsgLy8g
ICg1NykgVyBrZXkgY2FzZSAndyc6IGNhc2UgJ1cnOiByZXR1cm4gMHg1NzsKKyAgICBjYXNlIEdE
S194OgorICAgIGNhc2UgR0RLX1g6CisgICAgICAgIHJldHVybiBWS19YOyAvLyAgKDU4KSBYIGtl
eSBjYXNlICd4JzogY2FzZSAnWCc6IHJldHVybiAweDU4OworICAgIGNhc2UgR0RLX3k6CisgICAg
Y2FzZSBHREtfWToKKyAgICAgICAgcmV0dXJuIFZLX1k7IC8vICAoNTkpIFkga2V5IGNhc2UgJ3kn
OiBjYXNlICdZJzogcmV0dXJuIDB4NTk7CisgICAgY2FzZSBHREtfejoKKyAgICBjYXNlIEdES19a
OgorICAgICAgICByZXR1cm4gVktfWjsgLy8gICg1QSkgWiBrZXkgY2FzZSAneic6IGNhc2UgJ1on
OiByZXR1cm4gMHg1QTsKKyAgICBjYXNlIEdES19NZXRhX0w6CisgICAgICAgIHJldHVybiBWS19M
V0lOOyAvLyAoNUIpIExlZnQgV2luZG93cyBrZXkgKE1pY3Jvc29mdCBOYXR1cmFsIGtleWJvYXJk
KQorICAgIGNhc2UgR0RLX01ldGFfUjoKKyAgICAgICAgcmV0dXJuIFZLX1JXSU47IC8vICg1Qykg
UmlnaHQgV2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAgICAgIC8vIFZLX1NMRUVQ
ICg1RikgQ29tcHV0ZXIgU2xlZXAga2V5CisgICAgICAgIC8vIFZLX1NFUEFSQVRPUiAoNkMpIFNl
cGFyYXRvciBrZXkKKyAgICAgICAgLy8gVktfU1VCVFJBQ1QgKDZEKSBTdWJ0cmFjdCBrZXkKKyAg
ICAgICAgLy8gVktfREVDSU1BTCAoNkUpIERlY2ltYWwga2V5CisgICAgICAgIC8vIFZLX0RJVklE
RSAoNkYpIERpdmlkZSBrZXkKKyAgICAgICAgLy8gaGFuZGxlZCBieSBrZXkgY29kZSBhYm92ZQor
CisgICAgY2FzZSBHREtfTnVtX0xvY2s6CisgICAgICAgIHJldHVybiBWS19OVU1MT0NLOyAvLyAo
OTApIE5VTSBMT0NLIGtleQorCisgICAgY2FzZSBHREtfU2Nyb2xsX0xvY2s6CisgICAgICAgIHJl
dHVybiBWS19TQ1JPTEw7IC8vICg5MSkgU0NST0xMIExPQ0sga2V5CisKKyAgICAgICAgLy8gVktf
TFNISUZUIChBMCkgTGVmdCBTSElGVCBrZXkKKyAgICAgICAgLy8gVktfUlNISUZUIChBMSkgUmln
aHQgU0hJRlQga2V5CisgICAgICAgIC8vIFZLX0xDT05UUk9MIChBMikgTGVmdCBDT05UUk9MIGtl
eQorICAgICAgICAvLyBWS19SQ09OVFJPTCAoQTMpIFJpZ2h0IENPTlRST0wga2V5CisgICAgICAg
IC8vIFZLX0xNRU5VIChBNCkgTGVmdCBNRU5VIGtleQorICAgICAgICAvLyBWS19STUVOVSAoQTUp
IFJpZ2h0IE1FTlUga2V5CisgICAgICAgIC8vIFZLX0JST1dTRVJfQkFDSyAoQTYpIFdpbmRvd3Mg
MjAwMC9YUDogQnJvd3NlciBCYWNrIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX0ZPUldBUkQg
KEE3KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkKKyAgICAgICAgLy8gVktf
QlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gga2V5
CisgICAgICAgIC8vIFZLX0JST1dTRVJfU1RPUCAoQTkpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3Nl
ciBTdG9wIGtleQorICAgICAgICAvLyBWS19CUk9XU0VSX1NFQVJDSCAoQUEpIFdpbmRvd3MgMjAw
MC9YUDogQnJvd3NlciBTZWFyY2gga2V5CisgICAgICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVT
IChBQikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZhdm9yaXRlcyBrZXkKKyAgICAgICAgLy8g
VktfQlJPV1NFUl9IT01FIChBQykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBI
b21lIGtleQorICAgICAgICAvLyBWS19WT0xVTUVfTVVURSAoQUQpIFdpbmRvd3MgMjAwMC9YUDog
Vm9sdW1lIE11dGUga2V5CisgICAgICAgIC8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAy
MDAwL1hQOiBWb2x1bWUgRG93biBrZXkKKyAgICAgICAgLy8gVktfVk9MVU1FX1VQIChBRikgV2lu
ZG93cyAyMDAwL1hQOiBWb2x1bWUgVXAga2V5CisgICAgICAgIC8vIFZLX01FRElBX05FWFRfVFJB
Q0sgKEIwKSBXaW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5CisgICAgICAgIC8vIFZLX01F
RElBX1BSRVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQor
ICAgICAgICAvLyBWS19NRURJQV9TVE9QIChCMikgV2luZG93cyAyMDAwL1hQOiBTdG9wIE1lZGlh
IGtleQorICAgICAgICAvLyBWS19NRURJQV9QTEFZX1BBVVNFIChCMykgV2luZG93cyAyMDAwL1hQ
OiBQbGF5L1BhdXNlIE1lZGlhIGtleQorICAgICAgICAvLyBWS19MQVVOQ0hfTUFJTCAoQjQpIFdp
bmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKKyAgICAgICAgLy8gVktfTEFVTkNIX01FRElB
X1NFTEVDVCAoQjUpIFdpbmRvd3MgMjAwMC9YUDogU2VsZWN0IE1lZGlhIGtleQorICAgICAgICAv
LyBWS19MQVVOQ0hfQVBQMSAoQjYpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24g
MSBrZXkKKyAgICAgICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dzIDIwMDAvWFA6IFN0
YXJ0IEFwcGxpY2F0aW9uIDIga2V5CisKKyAgICAgICAgLy8gVktfT0VNXzEgKEJBKSBVc2VkIGZv
ciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5k
b3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnOzonIGtleQor
ICAgIGNhc2UgR0RLX3NlbWljb2xvbjoKKyAgICBjYXNlIEdES19jb2xvbjoKKyAgICAgICAgcmV0
dXJuIFZLX09FTV8xOyAvLyBjYXNlICc7JzogY2FzZSAnOic6IHJldHVybiAweEJBOworICAgICAg
ICAvLyBWS19PRU1fUExVUyAoQkIpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3Jl
Z2lvbiwgdGhlICcrJyBrZXkKKyAgICBjYXNlIEdES19wbHVzOgorICAgIGNhc2UgR0RLX2VxdWFs
OgorICAgICAgICByZXR1cm4gVktfT0VNX1BMVVM7IC8vIGNhc2UgJz0nOiBjYXNlICcrJzogcmV0
dXJuIDB4QkI7CisgICAgICAgIC8vIFZLX09FTV9DT01NQSAoQkMpIFdpbmRvd3MgMjAwMC9YUDog
Rm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcsJyBrZXkKKyAgICBjYXNlIEdES19jb21tYToK
KyAgICBjYXNlIEdES19sZXNzOgorICAgICAgICByZXR1cm4gVktfT0VNX0NPTU1BOyAvLyBjYXNl
ICcsJzogY2FzZSAnPCc6IHJldHVybiAweEJDOworICAgICAgICAvLyBWS19PRU1fTUlOVVMgKEJE
KSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLScga2V5Cisg
ICAgY2FzZSBHREtfbWludXM6CisgICAgY2FzZSBHREtfdW5kZXJzY29yZToKKyAgICAgICAgcmV0
dXJuIFZLX09FTV9NSU5VUzsgLy8gY2FzZSAnLSc6IGNhc2UgJ18nOiByZXR1cm4gMHhCRDsKKyAg
ICAgICAgLy8gVktfT0VNX1BFUklPRCAoQkUpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3Vu
dHJ5L3JlZ2lvbiwgdGhlICcuJyBrZXkKKyAgICBjYXNlIEdES19wZXJpb2Q6CisgICAgY2FzZSBH
REtfZ3JlYXRlcjoKKyAgICAgICAgcmV0dXJuIFZLX09FTV9QRVJJT0Q7IC8vIGNhc2UgJy4nOiBj
YXNlICc+JzogcmV0dXJuIDB4QkU7CisgICAgICAgIC8vIFZLX09FTV8yIChCRikgVXNlZCBmb3Ig
bWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93
cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJy8/JyBrZXkKKyAg
ICBjYXNlIEdES19zbGFzaDoKKyAgICBjYXNlIEdES19xdWVzdGlvbjoKKyAgICAgICAgcmV0dXJu
IFZLX09FTV8yOyAvLyBjYXNlICcvJzogY2FzZSAnPyc6IHJldHVybiAweEJGOworICAgICAgICAv
LyBWS19PRU1fMyAoQzApIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2Fu
IHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBr
ZXlib2FyZCwgdGhlICdgficga2V5CisgICAgY2FzZSBHREtfYXNjaWl0aWxkZToKKyAgICBjYXNl
IEdES19xdW90ZWxlZnQ6CisgICAgICAgIHJldHVybiBWS19PRU1fMzsgLy8gY2FzZSAnYCc6IGNh
c2UgJ34nOiByZXR1cm4gMHhDMDsKKyAgICAgICAgLy8gVktfT0VNXzQgKERCKSBVc2VkIGZvciBt
aXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dz
IDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnW3snIGtleQorICAg
IGNhc2UgR0RLX2JyYWNrZXRsZWZ0OgorICAgIGNhc2UgR0RLX2JyYWNlbGVmdDoKKyAgICAgICAg
cmV0dXJuIFZLX09FTV80OyAvLyBjYXNlICdbJzogY2FzZSAneyc6IHJldHVybiAweERCOworICAg
ICAgICAvLyBWS19PRU1fNSAoREMpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsg
aXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFu
ZGFyZCBrZXlib2FyZCwgdGhlICdcfCcga2V5CisgICAgY2FzZSBHREtfYmFja3NsYXNoOgorICAg
IGNhc2UgR0RLX2JhcjoKKyAgICAgICAgcmV0dXJuIFZLX09FTV81OyAvLyBjYXNlICdcXCc6IGNh
c2UgJ3wnOiByZXR1cm4gMHhEQzsKKyAgICAgICAgLy8gVktfT0VNXzYgKEREKSBVc2VkIGZvciBt
aXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dz
IDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXX0nIGtleQorICAg
IGNhc2UgR0RLX2JyYWNrZXRyaWdodDoKKyAgICBjYXNlIEdES19icmFjZXJpZ2h0OgorICAgICAg
ICByZXR1cm4gVktfT0VNXzY7IC8vIGNhc2UgJ10nOiBjYXNlICd9JzogcmV0dXJuIDB4REQ7Cisg
ICAgICAgIC8vIFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJz
OyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0
YW5kYXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtleQorICAg
IGNhc2UgR0RLX3F1b3RlcmlnaHQ6CisgICAgY2FzZSBHREtfcXVvdGVkYmw6CisgICAgICAgIHJl
dHVybiBWS19PRU1fNzsgLy8gY2FzZSAnXCcnOiBjYXNlICciJzogcmV0dXJuIDB4REU7CisgICAg
ICAgIC8vIFZLX09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBp
dCBjYW4gdmFyeSBieSBrZXlib2FyZC4KKyAgICAgICAgLy8gVktfT0VNXzEwMiAoRTIpIFdpbmRv
d3MgMjAwMC9YUDogRWl0aGVyIHRoZSBhbmdsZSBicmFja2V0IGtleSBvciB0aGUgYmFja3NsYXNo
IGtleSBvbiB0aGUgUlQgMTAyLWtleSBrZXlib2FyZAorICAgICAgICAvLyBWS19QUk9DRVNTS0VZ
IChFNSkgV2luZG93cyA5NS85OC9NZSwgV2luZG93cyBOVCA0LjAsIFdpbmRvd3MgMjAwMC9YUDog
SU1FIFBST0NFU1Mga2V5CisgICAgICAgIC8vIFZLX1BBQ0tFVCAoRTcpIFdpbmRvd3MgMjAwMC9Y
UDogVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hhcmFjdGVycyBhcyBpZiB0aGV5IHdlcmUga2V5c3Ry
b2tlcy4gVGhlIFZLX1BBQ0tFVCBrZXkgaXMgdGhlIGxvdyB3b3JkIG9mIGEgMzItYml0IFZpcnR1
YWwgS2V5IHZhbHVlIHVzZWQgZm9yIG5vbi1rZXlib2FyZCBpbnB1dCBtZXRob2RzLiBGb3IgbW9y
ZSBpbmZvcm1hdGlvbiwgc2VlIFJlbWFyayBpbiBLRVlCRElOUFVULFNlbmRJbnB1dCwgV01fS0VZ
RE9XTiwgYW5kIFdNX0tFWVVQCisgICAgICAgIC8vIFZLX0FUVE4gKEY2KSBBdHRuIGtleQorICAg
ICAgICAvLyBWS19DUlNFTCAoRjcpIENyU2VsIGtleQorICAgICAgICAvLyBWS19FWFNFTCAoRjgp
IEV4U2VsIGtleQorICAgICAgICAvLyBWS19FUkVPRiAoRjkpIEVyYXNlIEVPRiBrZXkKKyAgICAg
ICAgLy8gVktfUExBWSAoRkEpIFBsYXkga2V5CisgICAgICAgIC8vIFZLX1pPT00gKEZCKSBab29t
IGtleQorICAgICAgICAvLyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQor
ICAgICAgICAvLyBWS19QQTEgKEZEKSBQQTEga2V5CisgICAgICAgIC8vIFZLX09FTV9DTEVBUiAo
RkUpIENsZWFyIGtleQorICAgIGNhc2UgR0RLX0YxOgorICAgIGNhc2UgR0RLX0YyOgorICAgIGNh
c2UgR0RLX0YzOgorICAgIGNhc2UgR0RLX0Y0OgorICAgIGNhc2UgR0RLX0Y1OgorICAgIGNhc2Ug
R0RLX0Y2OgorICAgIGNhc2UgR0RLX0Y3OgorICAgIGNhc2UgR0RLX0Y4OgorICAgIGNhc2UgR0RL
X0Y5OgorICAgIGNhc2UgR0RLX0YxMDoKKyAgICBjYXNlIEdES19GMTE6CisgICAgY2FzZSBHREtf
RjEyOgorICAgIGNhc2UgR0RLX0YxMzoKKyAgICBjYXNlIEdES19GMTQ6CisgICAgY2FzZSBHREtf
RjE1OgorICAgIGNhc2UgR0RLX0YxNjoKKyAgICBjYXNlIEdES19GMTc6CisgICAgY2FzZSBHREtf
RjE4OgorICAgIGNhc2UgR0RLX0YxOToKKyAgICBjYXNlIEdES19GMjA6CisgICAgY2FzZSBHREtf
RjIxOgorICAgIGNhc2UgR0RLX0YyMjoKKyAgICBjYXNlIEdES19GMjM6CisgICAgY2FzZSBHREtf
RjI0OgorICAgICAgICByZXR1cm4gVktfRjEgKyAoa2V5Y29kZSAtIEdES19GMSk7CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIFRha2VuIGZyb20gS2V5
RXZlbnRHdGsuY3BwCitzdGF0aWMgU3RyaW5nIHNpbmdsZUNoYXJhY3RlclN0cmluZyhndWludCB2
YWwpCit7CisgICAgc3dpdGNoICh2YWwpIHsKKyAgICBjYXNlIEdES19JU09fRW50ZXI6CisgICAg
Y2FzZSBHREtfS1BfRW50ZXI6CisgICAgY2FzZSBHREtfUmV0dXJuOgorICAgICAgICByZXR1cm4g
U3RyaW5nKCJcciIpOworICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKKyAgICAgICAgcmV0dXJuIFN0
cmluZygiXHg4Iik7CisgICAgY2FzZSBHREtfVGFiOgorICAgICAgICByZXR1cm4gU3RyaW5nKCJc
dCIpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGd1bmljaGFyIGMgPSBnZGtfa2V5dmFsX3RvX3Vu
aWNvZGUodmFsKTsKKyAgICAgICAgZ2xvbmcgbndjOworICAgICAgICBndW5pY2hhcjIqIHVjaGFy
MTYgPSBnX3VjczRfdG9fdXRmMTYoJmMsIDEsIDAsICZud2MsIDApOworCisgICAgICAgIFN0cmlu
ZyByZXRWYWw7CisgICAgICAgIGlmICh1Y2hhcjE2KQorICAgICAgICAgICAgcmV0VmFsID0gU3Ry
aW5nKChVQ2hhciopdWNoYXIxNiwgbndjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0
VmFsID0gU3RyaW5nKCk7CisKKyAgICAgICAgZ19mcmVlKHVjaGFyMTYpOworCisgICAgICAgIHJl
dHVybiByZXRWYWw7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIFdlYkV2ZW50OjpNb2RpZmll
cnMgbW9kaWZpZXJzRm9yQ3VycmVudEtleVN0YXRlKGd1aW50IHN0YXRlKQoreworICAgIHVuc2ln
bmVkIG1vZGlmaWVycyA9IDA7CisgICAgaWYgKHN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKyAg
ICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpDb250cm9sS2V5OworICAgIGlmICgoc3RhdGUg
JiBHREtfU0hJRlRfTUFTSykgfHwgKHN0YXRlID09IEdES18zMjcwX0JhY2tUYWIpKQorICAgICAg
ICBtb2RpZmllcnMgfD0gV2ViRXZlbnQ6OlNoaWZ0S2V5OworICAgIGlmIChzdGF0ZSAmIEdES19N
T0QxX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6QWx0S2V5OworICAgIGlm
IChzdGF0ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6
TWV0YUtleTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4obW9k
aWZpZXJzKTsKK30KKworV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdl
YktleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIFdlYkV2ZW50OjpUeXBl
IHR5cGUgICAgICAgICAgICAgPSAoZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFKSA/IFdl
YkV2ZW50OjpLZXlVcCA6IFdlYkV2ZW50OjpLZXlEb3duOyAKKyAgICBTdHJpbmcgdGV4dCAgICAg
ICAgICAgICAgICAgICAgID0gc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV2ZW50LT5rZXl2YWwpOwor
ICAgIFN0cmluZyB1bm1vZGlmaWVkVGV4dCAgICAgICAgICAgPSBzaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoZXZlbnQtPmtleXZhbCk7CisgICAgU3RyaW5nIGtleUlkZW50aWZpZXIgICAgICAgICAgICA9
IGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXl2YWwpOworICAgIGludCB3aW5k
b3dzVmlydHVhbEtleUNvZGUgICAgICAgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGV2ZW50
LT5rZXl2YWwpOworICAgIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSAgICAgICAgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGV2ZW50LT5rZXl2YWwpOworICAgIGludCBtYWNDaGFyQ29kZSAgICAgICAgICAg
ICAgICAgPSAwOworICAgIGJvb2wgYXV0b1JlcGVhdCAgICAgICAgICAgICAgICAgPSBmYWxzZTsg
CisgICAgYm9vbCBpc0tleXBhZCAgICAgICAgICAgICAgICAgICA9IGV2ZW50LT5rZXl2YWwgPj0g
R0RLX0tQX1NwYWNlICYmIGV2ZW50LT5rZXl2YWwgPD0gR0RLX0tQXzk7CisgICAgYm9vbCBpc1N5
c3RlbUtleSAgICAgICAgICAgICAgICA9IGZhbHNlOworICAgIFdlYkV2ZW50OjpNb2RpZmllcnMg
bW9kaWZpZXJzICAgPSBtb2RpZmllcnNGb3JDdXJyZW50S2V5U3RhdGUoZXZlbnQtPnN0YXRlKTsK
KyAgICBkb3VibGUgdGltZXN0YW1wICAgICAgICAgICAgICAgICA9IGV2ZW50LT50aW1lOworICAg
IHJldHVybiBXZWJLZXlib2FyZEV2ZW50KHR5cGUsIHRleHQsIHVubW9kaWZpZWRUZXh0LCBrZXlJ
ZGVudGlmaWVyLCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBt
YWNDaGFyQ29kZSwgYXV0b1JlcGVhdCwgaXNLZXlwYWQsIGlzU3lzdGVtS2V5LCBtb2RpZmllcnMs
IHRpbWVzdGFtcCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9T
aGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL2d0
ay9XZWJFdmVudEZhY3RvcnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQ
b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRXZlbnRGYWN0b3J5X2gKKyNk
ZWZpbmUgV2ViRXZlbnRGYWN0b3J5X2gKKworI2luY2x1ZGUgIldlYkV2ZW50LmgiCisKKyNpbmNs
dWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBGSVhNRTogVGhpcyBp
cyBub3QgbmVlZGVkIGluIHRoZSBXZWJQcm9jZXNzIGFuZCBzaG91bGQgYmUgbW92ZWQgdG8gYmUg
YSBwZWVyCisvLyBvZiBXS1ZpZXcgb3IgcmVtb3ZlZCBhbHRvZ2V0aGVyIGluIGZhdm9yIG9mIHVz
aW5nIFBsYXRmb3JtRXZlbnRzIGV2ZXJ5d2hlcmUuCitjbGFzcyBXZWJFdmVudEZhY3Rvcnkgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFdlYk1vdXNlRXZlbnQgY3JlYXRlV2ViTW91c2VF
dmVudChHZGtFdmVudEFueSopOworICAgICAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVX
ZWJXaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKik7CisgICAgICAgIHN0YXRpYyBXZWJLZXlib2Fy
ZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViRXZlbnRGYWN0b3J5X2gKSW5kZXg6IFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9y
c0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvZ3RrL1dlYkVycm9yc0d0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldlYkVycm9ycy5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVzcG9uc2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCisjZGVmaW5lIFdlYlVSTEVycm9yRG9tYWluICAgIlVSTEVycm9yRG9t
YWluIgorCitlbnVtIHsKKyAgICBXZWJVUkxFcnJvclVua25vd24gPSAgICAgICAgICAgICAgICAg
ICAgICAgICAtMSwKKyAgICBXZWJVUkxFcnJvckNhbmNlbGxlZCA9ICAgICAgICAgICAgICAgICAg
ICAgICAtOTk5LAorICAgIFdlYlVSTEVycm9yQmFkVVJMID0gICAgICAgICAgICAgICAgICAgICAg
ICAgIC0xMDAwLAorICAgIFdlYlVSTEVycm9yVGltZWRPdXQgPSAgICAgICAgICAgICAgICAgICAg
ICAgIC0xMDAxLAorICAgIFdlYlVSTEVycm9yVW5zdXBwb3J0ZWRVUkwgPSAgICAgICAgICAgICAg
ICAgIC0xMDAyLAorICAgIFdlYlVSTEVycm9yQ2Fubm90RmluZEhvc3QgPSAgICAgICAgICAgICAg
ICAgIC0xMDAzLAorICAgIFdlYlVSTEVycm9yQ2Fubm90Q29ubmVjdFRvSG9zdCA9ICAgICAgICAg
ICAgIC0xMDA0LAorICAgIFdlYlVSTEVycm9yTmV0d29ya0Nvbm5lY3Rpb25Mb3N0ID0gICAgICAg
ICAgIC0xMDA1LAorICAgIFdlYlVSTEVycm9yRE5TTG9va3VwRmFpbGVkID0gICAgICAgICAgICAg
ICAgIC0xMDA2LAorICAgIFdlYlVSTEVycm9ySFRUUFRvb01hbnlSZWRpcmVjdHMgPSAgICAgICAg
ICAgIC0xMDA3LAorICAgIFdlYlVSTEVycm9yUmVzb3VyY2VVbmF2YWlsYWJsZSA9ICAgICAgICAg
ICAgIC0xMDA4LAorICAgIFdlYlVSTEVycm9yTm90Q29ubmVjdGVkVG9JbnRlcm5ldCA9ICAgICAg
ICAgIC0xMDA5LAorICAgIFdlYlVSTEVycm9yUmVkaXJlY3RUb05vbkV4aXN0ZW50TG9jYXRpb24g
PSAgIC0xMDEwLAorICAgIFdlYlVSTEVycm9yQmFkU2VydmVyUmVzcG9uc2UgPSAgICAgICAgICAg
ICAgIC0xMDExLAorICAgIFdlYlVSTEVycm9yVXNlckNhbmNlbGxlZEF1dGhlbnRpY2F0aW9uID0g
ICAgIC0xMDEyLAorICAgIFdlYlVSTEVycm9yVXNlckF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSAg
ICAgIC0xMDEzLAorICAgIFdlYlVSTEVycm9yWmVyb0J5dGVSZXNvdXJjZSA9ICAgICAgICAgICAg
ICAgIC0xMDE0LAorICAgIFdlYlVSTEVycm9yRmlsZURvZXNOb3RFeGlzdCA9ICAgICAgICAgICAg
ICAgIC0xMTAwLAorICAgIFdlYlVSTEVycm9yRmlsZUlzRGlyZWN0b3J5ID0gICAgICAgICAgICAg
ICAgIC0xMTAxLAorICAgIFdlYlVSTEVycm9yTm9QZXJtaXNzaW9uc1RvUmVhZEZpbGUgPSAgICAg
ICAgIC0xMTAyLAorICAgIFdlYlVSTEVycm9yU2VjdXJlQ29ubmVjdGlvbkZhaWxlZCA9ICAgICAg
ICAgIC0xMjAwLAorICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVIYXNCYWREYXRlID0g
ICAgIC0xMjAxLAorICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVVbnRydXN0ZWQgPSAg
ICAgIC0xMjAyLAorICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVIYXNVbmtub3duUm9v
dCA9IC0xMjAzLAorICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVOb3RZZXRWYWxpZCA9
ICAgIC0xMjA0LAorICAgIFdlYlVSTEVycm9yQ2xpZW50Q2VydGlmaWNhdGVSZWplY3RlZCA9ICAg
ICAgIC0xMjA1LAorICAgIFdlYlVSTEVycm9yQ2xpZW50Q2VydGlmaWNhdGVSZXF1aXJlZCA9ICAg
ICAgIC0xMjA2LAorICAgIFdlYlVSTEVycm9yQ2Fubm90TG9hZEZyb21OZXR3b3JrID0gICAgICAg
ICAgIC0yMDAwLAorCisgICAgLy8gRG93bmxvYWQgYW5kIGZpbGUgSS9PIGVycm9ycworICAgIFdl
YlVSTEVycm9yQ2Fubm90Q3JlYXRlRmlsZSA9ICAgICAgICAgICAgICAgIC0zMDAwLAorICAgIFdl
YlVSTEVycm9yQ2Fubm90T3BlbkZpbGUgPSAgICAgICAgICAgICAgICAgIC0zMDAxLAorICAgIFdl
YlVSTEVycm9yQ2Fubm90Q2xvc2VGaWxlID0gICAgICAgICAgICAgICAgIC0zMDAyLAorICAgIFdl
YlVSTEVycm9yQ2Fubm90V3JpdGVUb0ZpbGUgPSAgICAgICAgICAgICAgIC0zMDAzLAorICAgIFdl
YlVSTEVycm9yQ2Fubm90UmVtb3ZlRmlsZSA9ICAgICAgICAgICAgICAgIC0zMDA0LAorICAgIFdl
YlVSTEVycm9yQ2Fubm90TW92ZUZpbGUgPSAgICAgICAgICAgICAgICAgIC0zMDA1LAorICAgIFdl
YlVSTEVycm9yRG93bmxvYWREZWNvZGluZ0ZhaWxlZE1pZFN0cmVhbSA9IC0zMDA2LAorICAgIFdl
YlVSTEVycm9yRG93bmxvYWREZWNvZGluZ0ZhaWxlZFRvQ29tcGxldGUgPS0zMDA3LAorfTsKKwor
I2RlZmluZSBXZWJLaXRFcnJvckRvbWFpbiAgICJXZWJLaXRFcnJvckRvbWFpbiIKKworZW51bSB7
CisgICAgV2ViS2l0RXJyb3JDYW5ub3RTaG93TUlNRVR5cGUgPSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMTAwLAorICAgIFdlYktpdEVycm9yQ2Fubm90U2hvd1VSTCA9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEwMSwKKyAgICBXZWJLaXRFcnJvckZyYW1lTG9hZEludGVy
cnVwdGVkQnlQb2xpY3lDaGFuZ2UgPSAgICAgICAgICAgICAxMDIsCisgICAgV2ViS2l0RXJyb3JD
YW5ub3RVc2VSZXN0cmljdGVkUG9ydCA9ICAgICAgICAgICAgICAgICAgICAgICAgMTAzLAorfTsK
KworZW51bSB7CisgICAgV2ViS2l0RXJyb3JDYW5ub3RGaW5kUGx1Z0luID0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMjAwLAorICAgIFdlYktpdEVycm9yQ2Fubm90TG9hZFBsdWdJbiA9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMSwKKyAgICBXZWJLaXRFcnJvckphdmFV
bmF2YWlsYWJsZSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDIsCit9OworCitl
bnVtIHsKKyAgICBXZWJLaXRFcnJvckdlb2xvY2F0aW9uTG9jYXRpb25Vbmtub3duICA9ICAgICAg
ICAgICAgICAgICAgICAzMDAsCit9OworCisjZGVmaW5lIFdlYktpdEVycm9yTUlNRVR5cGVLZXkg
ICAiV2ViS2l0RXJyb3JNSU1FVHlwZUtleSIKKyNkZWZpbmUgV2ViS2l0RXJyb3JQbHVnSW5OYW1l
S2V5ICAgIldlYktpdEVycm9yUGx1Z0luTmFtZUtleSIKKyNkZWZpbmUgV2ViS2l0RXJyb3JQbHVn
SW5QYWdlVVJMU3RyaW5nS2V5ICAgIldlYktpdEVycm9yUGx1Z0luUGFnZVVSTFN0cmluZ0tleSIK
KworI2RlZmluZSBXZWJQT1NJWEVycm9yRG9tYWluICAgIk5TUE9TSVhFcnJvckRvbWFpbiIKKyNk
ZWZpbmUgV2ViUE9TSVhFcnJvckVDT05OUkVTRVQgNTQKKworUmVzb3VyY2VFcnJvciBjYW5jZWxs
ZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoU3RyaW5nKFdlYlVSTEVycm9yRG9tYWluKSwgV2ViVVJMRXJyb3JDYW5jZWxs
ZWQsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsKK30KKworUmVzb3VyY2VFcnJv
ciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJl
dHVybiBSZXNvdXJjZUVycm9yKFN0cmluZyhXZWJLaXRFcnJvckRvbWFpbiksIFdlYktpdEVycm9y
Q2Fubm90VXNlUmVzdHJpY3RlZFBvcnQsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIFN0cmluZygp
KTsKK30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKFN0cmluZyhXZWJL
aXRFcnJvckRvbWFpbiksIFdlYktpdEVycm9yQ2Fubm90U2hvd1VSTCwgcmVxdWVzdC51cmwoKS5z
dHJpbmcoKSwgU3RyaW5nKCkpOworfQorCitSZXNvdXJjZUVycm9yIGludGVycnVwdEZvclBvbGlj
eUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcihTdHJpbmcoV2ViS2l0RXJyb3JEb21haW4pLCBXZWJLaXRFcnJvckZy
YW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2UsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCks
IFN0cmluZygpKTsKK30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VF
cnJvcigpOworfQorCitSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigp
OworfQorCitSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78236</attachid>
            <date>2011-01-07 07:22:44 -0800</date>
            <delta_ts>2011-01-14 12:27:01 -0800</delta_ts>
            <desc>Few other important classes implementation for WebKit2 GTK port</desc>
            <filename>48510.1.patch.complete</filename>
            <type>text/plain</type>
            <size>20839</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vZ3RrL01vZHVsZUd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktp
dDIvUGxhdGZvcm0vZ3RrL01vZHVsZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiTW9kdWxlLmgi
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9DU3RyaW5nLmg+CisjaW5jbHVkZSA8ZGxmY24u
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgTW9kdWxlOjpsb2FkKCkKK3sKKyAgICBt
X2hhbmRsZSA9IGRsb3BlbihtX3BhdGgudXRmOCgpLmRhdGEoKSwgUlRMRF9OT1cpOworICAgIHJl
dHVybiAhbV9oYW5kbGU7Cit9CisKK3ZvaWQgTW9kdWxlOjp1bmxvYWQoKQoreworICAgIGRsY2xv
c2UobV9oYW5kbGUpOworfQorCit2b2lkKiBNb2R1bGU6OnBsYXRmb3JtRnVuY3Rpb25Qb2ludGVy
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZGxzeW0obV9o
YW5kbGUsIGZ1bmN0aW9uTmFtZSk7Cit9CisKK30KSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vTW9k
dWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuaAkocmV2aXNpb24g
NzUwNTQpCisrKyBXZWJLaXQyL1BsYXRmb3JtL01vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw2ICs2MSw4IEBACiAgICAgSE1PRFVMRSBtX21vZHVsZTsKICNlbGlmIFBMQVRGT1JNKFFUKQog
ICAgIFFMaWJyYXJ5IG1fbGliOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgKm1faGFu
ZGxlOwogI2VuZGlmCiB9OwogCkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzUyNDIpCisrKyBXZWJLaXQyL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDExLTAxLTA3IEFtcnV0aCBSYWog
IDxhbXJ1dGhyYWpAbW90b3JvbGEuY29tPiBhbmQgUmF2aSBLYXNpYmhhdGxhIDxyYXZpLmthc2li
aGF0bGFAbW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJFdmVudEZhY3RvcnksIFdlYkVycm9ycywg
TW9kdWxlLCBXZWJQYWdlLCBXZWJDb250ZXh0LCAgTmF0aXZlS2V5Ym9hcmRFdmVudCBjbGFzc2Vz
IGZvciBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00ODUxMAorCisgICAgICAgICogUGxhdGZvcm0vTW9kdWxlLmg6CisgICAgICAgICogUGxh
dGZvcm0vZ3RrL01vZHVsZUd0ay5jcHA6IEFkZGVkLiBJbml0aWFsIGNvZGUgdXNpbmcgZGxvcGVu
L2RsY2xvc2UgY2FsbHMgKFVOSVhfWDExIHNwZWNpZmljKS4KKyAgICAgICAgKFdlYktpdDo6TW9k
dWxlOjpsb2FkKToKKyAgICAgICAgKFdlYktpdDo6TW9kdWxlOjp1bmxvYWQpOgorICAgICAgICAo
V2ViS2l0OjpNb2R1bGU6OnBsYXRmb3JtRnVuY3Rpb25Qb2ludGVyKToKKyAgICAgICAgKiBTaGFy
ZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50OjpuYXRpdmVFdmVudCk6CisgICAgICAgICogU2hhcmVkL2d0ay9OYXRpdmVX
ZWJLZXlib2FyZEV2ZW50R3RrLmNwcDogQWRkZWQuIFN0dWJiZWQgaW1wbGVtZW50YXRpb24gZm9y
IEdUSyBwb3J0LiBZZXQgdG8gaW1wbGVtZW50LgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsuY3Bw
OiBBZGRlZC4gU3R1YmJlZCBpbXBsZW1lbnRhdGlvbiBmb3IgR1RLIHBvcnQuIFlldCB0byBpbXBs
ZW1lbnQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OmFwcGxpY2F0aW9uQ2FjaGVEaXJl
Y3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxpemVX
ZWJQcm9jZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrOiBBZGRlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwOiBBZGRlZC4gSW1w
bGVtZW50YXRpb24gZm9yIGludGVycHJldGluZyBrZXkgZXZlbnRzLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpwbGF0Zm9ybVByZWZlcmVuY2VzRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6aW50ZXJwcmV0S2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpzY3JvbGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGVmYXVsdEJlaGF2aW9yRm9yS2V5RXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwbGF0Zm9ybUhhc0xvY2FsRGF0YUZvclVSTCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNhbkhhbmRsZVJlcXVlc3QpOgorCiAyMDExLTAxLTA2
ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBBbHdheXMgc2hvdyB0
aGUgYXJyb3cgY3Vyc29yIHdoZW4gdGhlIHdlYiBwcm9jZXNzIGhhcyBjcmFzaGVkCkluZGV4OiBX
ZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRH
dGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKworI2lu
Y2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSogZXZl
bnQpCisgICAgOiBXZWJLZXlib2FyZEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5
Ym9hcmRFdmVudChldmVudCkpCisgICAgLCBtX25hdGl2ZUV2ZW50KCpldmVudCkKK3sKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXli
b2FyZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudC5oCShyZXZpc2lvbiA3NTA1NCkKKysrIFdlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktl
eWJvYXJkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlv
bnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw2ICszOCw4
IEBACiAjZW5kaWYKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPFFLZXlFdmVudD4KKyNl
bGlmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYktpdCB7CkBAIC00OSw2ICs1Miw4IEBACiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dChIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKICNlbGlmIFBMQVRGT1JNKFFU
KQogICAgIGV4cGxpY2l0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoUUtleUV2ZW50Kik7CisjZWxp
ZiBQTEFURk9STShHVEspCisgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSop
OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01Nyw2ICs2Miw4IEBACiAgICAgY29u
c3QgTVNHKiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuICZtX25hdGl2ZUV2ZW50OyB9CiAj
ZWxpZiBQTEFURk9STShRVCkKICAgICBjb25zdCBRS2V5RXZlbnQqIG5hdGl2ZUV2ZW50KCkgY29u
c3QgeyByZXR1cm4gJm1fbmF0aXZlRXZlbnQ7IH0KKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBj
b25zdCBHZGtFdmVudEtleSogbmF0aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiAmbV9uYXRpdmVF
dmVudDsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC02Niw2ICs3Myw4IEBACiAgICAgTVNHIG1f
bmF0aXZlRXZlbnQ7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBRS2V5RXZlbnQgbV9uYXRpdmVF
dmVudDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBHZGtFdmVudEtleSBtX25hdGl2ZUV2ZW50
OwogI2VuZGlmCiB9OwogCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2Vi
UGFnZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1dlYlBhZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldlYkV2ZW50LmgiCisjaW5jbHVk
ZSAiV2luZG93c0tleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJv
bGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0tl
eWJvYXJkRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3Mu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworICAg
IAordm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGxhdGZvcm1QcmVmZXJlbmNlc0RpZENoYW5nZShj
b25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgQ3RybEtleSA9IDEgPDwgMDsKK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCBBbHRLZXkgPSAxIDw8IDE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgU2hpZnRLZXkg
PSAxIDw8IDI7CisKK3N0cnVjdCBLZXlEb3duRW50cnkgeworICAgIHVuc2lnbmVkIHZpcnR1YWxL
ZXk7CisgICAgdW5zaWduZWQgbW9kaWZpZXJzOworICAgIGNvbnN0IGNoYXIqIG5hbWU7Cit9Owor
CitzdHJ1Y3QgS2V5UHJlc3NFbnRyeSB7CisgICAgdW5zaWduZWQgY2hhckNvZGU7CisgICAgdW5z
aWduZWQgbW9kaWZpZXJzOworICAgIGNvbnN0IGNoYXIqIG5hbWU7Cit9OworCitzdGF0aWMgY29u
c3QgS2V5RG93bkVudHJ5IGtleURvd25FbnRyaWVzW10gPSB7CisgICAgeyBWS19MRUZULCAgIDAs
ICAgICAgICAgICAgICAgICAgIk1vdmVMZWZ0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgeyBWS19MRUZULCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIk1vdmVMZWZ0
QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19MRUZULCAg
IEN0cmxLZXksICAgICAgICAgICAgIk1vdmVXb3JkTGVmdCIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgeyBWS19MRUZULCAgIEN0cmxLZXkgfCBTaGlmdEtleSwgIk1vdmVX
b3JkTGVmdEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgIH0sCisgICAgeyBWS19SSUdI
VCwgIDAsICAgICAgICAgICAgICAgICAgIk1vdmVSaWdodCIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgeyBWS19SSUdIVCwgIFNoaWZ0S2V5LCAgICAgICAgICAgIk1v
dmVSaWdodEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19S
SUdIVCwgIEN0cmxLZXksICAgICAgICAgICAgIk1vdmVXb3JkUmlnaHQiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19SSUdIVCwgIEN0cmxLZXkgfCBTaGlmdEtleSwg
Ik1vdmVXb3JkUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0sCisgICAgeyBW
S19VUCwgICAgIDAsICAgICAgICAgICAgICAgICAgIk1vdmVVcCIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19VUCwgICAgIFNoaWZ0S2V5LCAgICAgICAg
ICAgIk1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
eyBWS19QUklPUiwgIFNoaWZ0S2V5LCAgICAgICAgICAgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxl
Y3Rpb24iICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ET1dOLCAgIDAsICAgICAgICAgICAg
ICAgICAgIk1vdmVEb3duIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgeyBWS19ET1dOLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIk1vdmVEb3duQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ORVhULCAgIFNoaWZ0S2V5LCAg
ICAgICAgICAgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgIH0s
CisgICAgeyBWS19QUklPUiwgIDAsICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlVXAiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ORVhULCAgIDAsICAgICAg
ICAgICAgICAgICAgIk1vdmVQYWdlRG93biIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgeyBWS19IT01FLCAgIDAsICAgICAgICAgICAgICAgICAgIk1vdmVUb0JlZ2lubmlu
Z09mTGluZSIgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19IT01FLCAgIFNoaWZ0
S2V5LCAgICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIg
ICAgIH0sCisgICAgeyBWS19IT01FLCAgIEN0cmxLZXksICAgICAgICAgICAgIk1vdmVUb0JlZ2lu
bmluZ09mRG9jdW1lbnQiICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19IT01FLCAgIEN0
cmxLZXkgfCBTaGlmdEtleSwgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxl
Y3Rpb24iIH0sCisgICAgCisgICAgeyBWS19FTkQsICAgIDAsICAgICAgICAgICAgICAgICAgIk1v
dmVUb0VuZE9mTGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19F
TkQsICAgIFNoaWZ0S2V5LCAgICAgICAgICAgIk1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVj
dGlvbiIgICAgICAgICAgIH0sCisgICAgeyBWS19FTkQsICAgIEN0cmxLZXksICAgICAgICAgICAg
Ik1vdmVUb0VuZE9mRG9jdW1lbnQiICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBW
S19FTkQsICAgIEN0cmxLZXkgfCBTaGlmdEtleSwgIk1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2Rp
ZnlTZWxlY3Rpb24iICAgICAgIH0sCisgICAgCisgICAgeyBWS19CQUNLLCAgIDAsICAgICAgICAg
ICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgeyBWS19CQUNLLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ERUxFVEUsIDAsICAgICAg
ICAgICAgICAgICAgIkRlbGV0ZUZvcndhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgeyBWS19CQUNLLCAgIEN0cmxLZXksICAgICAgICAgICAgIkRlbGV0ZVdvcmRCYWNr
d2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ERUxFVEUsIEN0cmxL
ZXksICAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgCisgICAgeyAnQicsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIlRvZ2ds
ZUJvbGQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnSScsICAg
ICAgIEN0cmxLZXksICAgICAgICAgICAgIlRvZ2dsZUl0YWxpYyIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgCisgICAgeyBWS19FU0NBUEUsIDAsICAgICAgICAgICAgICAg
ICAgIkNhbmNlbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
eyBWS19PRU1fUEVSSU9ELCBDdHJsS2V5LCAgICAgICAgIkNhbmNlbCIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19UQUIsICAgIDAsICAgICAgICAgICAg
ICAgICAgIkluc2VydFRhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgeyBWS19UQUIsICAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2VydEJhY2t0YWIiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19SRVRVUk4sIDAsICAgICAgICAg
ICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgeyBWS19SRVRVUk4sIEN0cmxLZXksICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19SRVRVUk4sIEFsdEtleSwg
ICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCisgICAgeyBWS19SRVRVUk4sIFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2VydE5ld2xpbmUi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19SRVRVUk4sIEFsdEtl
eSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgCisgICAgLy8gSXQncyBub3QgcXVpdGUgY2xlYXIgd2hldGhlciBjbGlwYm9h
cmQgc2hvcnRjdXRzIGFuZCBVbmRvL1JlZG8gc2hvdWxkIGJlIGhhbmRsZWQKKyAgICAvLyBpbiB0
aGUgYXBwbGljYXRpb24gb3IgaW4gV2ViS2l0LiBXZSBjaG9zZSBXZWJLaXQuCisgICAgeyAnQycs
ICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIkNvcHkiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgeyAnVicsICAgICAgIEN0cmxLZXksICAgICAgICAgICAg
IlBhc3RlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAn
WCcsICAgICAgIEN0cmxLZXksICAgICAgICAgICAgIkN1dCIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnQScsICAgICAgIEN0cmxLZXksICAgICAgICAg
ICAgIlNlbGVjdEFsbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
eyBWS19JTlNFUlQsIEN0cmxLZXksICAgICAgICAgICAgIkNvcHkiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ERUxFVEUsIFNoaWZ0S2V5LCAgICAg
ICAgICAgIkN1dCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgeyBWS19JTlNFUlQsIFNoaWZ0S2V5LCAgICAgICAgICAgIlBhc3RlIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnWicsICAgICAgIEN0cmxLZXksICAg
ICAgICAgICAgIlVuZG8iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgeyAnWicsICAgICAgIEN0cmxLZXkgfCBTaGlmdEtleSwgIlJlZG8iICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCit9OworCitzdGF0aWMgY29uc3QgS2V5UHJl
c3NFbnRyeSBrZXlQcmVzc0VudHJpZXNbXSA9IHsKKyAgICB7ICdcdCcsICAgMCwgICAgICAgICAg
ICAgICAgICAiSW5zZXJ0VGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
KyAgICB7ICdcdCcsICAgU2hpZnRLZXksICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdccicsICAgMCwgICAgICAgICAgICAg
ICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICB7ICdccicsICAgQ3RybEtleSwgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdccicsICAgQWx0S2V5LCAgICAgICAgICAg
ICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7
ICdccicsICAgU2hpZnRLZXksICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdccicsICAgQWx0S2V5IHwgU2hpZnRLZXksICAi
SW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKK307CisKK2Nv
bnN0IGNoYXIqIFdlYlBhZ2U6OmludGVycHJldEtleUV2ZW50KGNvbnN0IEtleWJvYXJkRXZlbnQq
IGV2dCkKK3sKKyAgICBBU1NFUlQoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25F
dmVudCB8fCBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCk7CisgICAg
CisgICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleURvd25Db21tYW5kc01h
cCA9IDA7CisgICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleVByZXNzQ29t
bWFuZHNNYXAgPSAwOworICAgIAorICAgIGlmICgha2V5RG93bkNvbW1hbmRzTWFwKSB7CisgICAg
ICAgIGtleURvd25Db21tYW5kc01hcCA9IG5ldyBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+Owor
ICAgICAgICBrZXlQcmVzc0NvbW1hbmRzTWFwID0gbmV3IEhhc2hNYXA8aW50LCBjb25zdCBjaGFy
Kj47CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgKHNpemVvZihr
ZXlEb3duRW50cmllcykgLyBzaXplb2Yoa2V5RG93bkVudHJpZXNbMF0pKTsgaSsrKQorICAgICAg
ICAgICAga2V5RG93bkNvbW1hbmRzTWFwLT5zZXQoa2V5RG93bkVudHJpZXNbaV0ubW9kaWZpZXJz
IDw8IDE2IHwga2V5RG93bkVudHJpZXNbaV0udmlydHVhbEtleSwga2V5RG93bkVudHJpZXNbaV0u
bmFtZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgKHNpemVv
ZihrZXlQcmVzc0VudHJpZXMpIC8gc2l6ZW9mKGtleVByZXNzRW50cmllc1swXSkpOyBpKyspCisg
ICAgICAgICAgICBrZXlQcmVzc0NvbW1hbmRzTWFwLT5zZXQoa2V5UHJlc3NFbnRyaWVzW2ldLm1v
ZGlmaWVycyA8PCAxNiB8IGtleVByZXNzRW50cmllc1tpXS5jaGFyQ29kZSwga2V5UHJlc3NFbnRy
aWVzW2ldLm5hbWUpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOwor
ICAgIGlmIChldnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBTaGlmdEtleTsK
KyAgICBpZiAoZXZ0LT5hbHRLZXkoKSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IEFsdEtleTsKKyAg
ICBpZiAoZXZ0LT5jdHJsS2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8PSBDdHJsS2V5OworICAg
IAorICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7Cisg
ICAgICAgIGludCBtYXBLZXkgPSBtb2RpZmllcnMgPDwgMTYgfCBldnQtPmtleUV2ZW50KCktPndp
bmRvd3NWaXJ0dWFsS2V5Q29kZSgpOworICAgICAgICByZXR1cm4gbWFwS2V5ID8ga2V5RG93bkNv
bW1hbmRzTWFwLT5nZXQobWFwS2V5KSA6IDA7CisgICAgfQorICAgIAorICAgIGludCBtYXBLZXkg
PSBtb2RpZmllcnMgPDwgMTYgfCBldnQtPmNoYXJDb2RlKCk7CisgICAgcmV0dXJuIG1hcEtleSA/
IGtleVByZXNzQ29tbWFuZHNNYXAtPmdldChtYXBLZXkpIDogMDsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIHNjcm9sbChQYWdlKiBwYWdlLCBTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVs
eShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKK30KKworYm9vbCBXZWJQYWdlOjpwZXJmb3JtRGVm
YXVsdEJlaGF2aW9yRm9yS2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRF
dmVudCkKK3sKKyAgICBpZiAoa2V5Ym9hcmRFdmVudC50eXBlKCkgIT0gV2ViRXZlbnQ6OktleURv
d24gJiYga2V5Ym9hcmRFdmVudC50eXBlKCkgIT0gV2ViRXZlbnQ6OlJhd0tleURvd24pCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoa2V5Ym9hcmRFdmVudC53aW5kb3dzVmly
dHVhbEtleUNvZGUoKSkgeworICAgIGNhc2UgVktfQkFDSzoKKyAgICAgICAgaWYgKGtleWJvYXJk
RXZlbnQuc2hpZnRLZXkoKSkKKyAgICAgICAgICAgIG1fcGFnZS0+Z29Gb3J3YXJkKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGFnZS0+Z29CYWNrKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVktfU1BBQ0U6CisgICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIGtleWJvYXJk
RXZlbnQuc2hpZnRLZXkoKSA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlQYWdlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19MRUZUOgorICAgICAgICBzY3JvbGwobV9wYWdl
LmdldCgpLCBTY3JvbGxMZWZ0LCBTY3JvbGxCeUxpbmUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFZLX1JJR0hUOgorICAgICAgICBzY3JvbGwobV9wYWdlLmdldCgpLCBTY3JvbGxSaWdodCwg
U2Nyb2xsQnlMaW5lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19VUDoKKyAgICAgICAg
c2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsVXAsIFNjcm9sbEJ5TGluZSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgVktfRE9XTjoKKyAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Ny
b2xsRG93biwgU2Nyb2xsQnlMaW5lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19IT01F
OgorICAgICAgICBzY3JvbGwobV9wYWdlLmdldCgpLCBTY3JvbGxVcCwgU2Nyb2xsQnlEb2N1bWVu
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfRU5EOgorICAgICAgICBzY3JvbGwobV9w
YWdlLmdldCgpLCBTY3JvbGxEb3duLCBTY3JvbGxCeURvY3VtZW50KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBWS19QUklPUjoKKyAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xs
VXAsIFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfTkVYVDoKKyAg
ICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsRG93biwgU2Nyb2xsQnlQYWdlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlBhZ2U6OnBsYXRmb3JtSGFzTG9jYWxE
YXRhRm9yVVJMKGNvbnN0IFdlYkNvcmU6OktVUkwmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBX
ZWJQYWdlOjpjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViQ29udGV4dC5o
IgorCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV1RGOjpTdHJpbmcgV2ViQ29u
dGV4dDo6YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6
OmNhY2hlU3RvcmFnZSgpLmNhY2hlRGlyZWN0b3J5KCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6
cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
JikKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78978</attachid>
            <date>2011-01-14 12:27:01 -0800</date>
            <delta_ts>2011-02-10 11:49:03 -0800</delta_ts>
            <desc>Module implementation using GModule</desc>
            <filename>48510.review.0.patch</filename>
            <type>text/plain</type>
            <size>3524</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTgwNykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTEtMDEtMTQgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3Jv
bGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0bGFA
bW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtHVEtdIEltcGxlbWVudCBNb2R1bGUgY2xhc3MgZm9yIFdlYktpdDIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTEwCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBQbGF0Zm9ybS9Nb2R1bGUuaDogQWRkZWQgR01v
ZHVsZSBoYW5kbGUgZm9yIEdUSyBwb3J0LgorICAgICAgICAqIFBsYXRmb3JtL2d0ay9Nb2R1bGVH
dGsuY3BwOiBBZGRlZC4gIEluaXRpYWwgY29kZSB1c2luZyBHTW9kdWxlIGNhbGxzLgorICAgICAg
ICAoV2ViS2l0OjpNb2R1bGU6OmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpNb2R1bGU6OnVubG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6Ok1vZHVsZTo6cGxhdGZvcm1GdW5jdGlvblBvaW50ZXIpOgor
CiAyMDExLTAxLTE0ICBMYXN6bG8gR29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5va2lhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6
IFdlYktpdDIvUGxhdGZvcm0vTW9kdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9y
bS9Nb2R1bGUuaAkocmV2aXNpb24gNzUzNjkpCisrKyBXZWJLaXQyL1BsYXRmb3JtL01vZHVsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMCBAQAogI2luY2x1ZGUgPFFMaWJyYXJ5Pgog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCit0eXBlZGVmIHN0cnVjdCBfR01vZHVsZSBHTW9k
dWxlOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBNb2R1bGUgOiBwdWJs
aWMgTm9uY29weWFibGUgewpAQCAtNjEsNiArNjUsOCBAQCBwcml2YXRlOgogICAgIEhNT0RVTEUg
bV9tb2R1bGU7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBRTGlicmFyeSBtX2xpYjsKKyNlbGlm
IFBMQVRGT1JNKEdUSykKKyAgICBHTW9kdWxlKiBtX2hhbmRsZTsKICNlbmRpZgogfTsKIApJbmRl
eDogV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1BsYXRmb3JtL2d0ay9Nb2R1bGVHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9Q
bGF0Zm9ybS9ndGsvTW9kdWxlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJNb2R1bGUuaCIKKwor
I2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitib29sIE1vZHVsZTo6bG9hZCgpCit7CisgICAgbV9oYW5kbGUg
PSBnX21vZHVsZV9vcGVuKG1fcGF0aC51dGY4KCkuZGF0YSgpLCBHX01PRFVMRV9CSU5EX0xBWlkp
OworICAgIHJldHVybiAhbV9oYW5kbGU7Cit9CisKK3ZvaWQgTW9kdWxlOjp1bmxvYWQoKQorewor
ICAgIGdfbW9kdWxlX2Nsb3NlKG1faGFuZGxlKTsKK30KKwordm9pZCogTW9kdWxlOjpwbGF0Zm9y
bUZ1bmN0aW9uUG9pbnRlcihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpIGNvbnN0Cit7CisgICAg
Z3BvaW50ZXIgc3ltYm9sID0gMDsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9oYW5kbGUsIGZ1bmN0
aW9uTmFtZSwgJnN5bWJvbCk7CisgICAgcmV0dXJuIHN5bWJvbDsKK30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78980</attachid>
            <date>2011-01-14 12:28:50 -0800</date>
            <delta_ts>2011-02-10 11:49:03 -0800</delta_ts>
            <desc>NativeWebKeyboard and WebContext class implementation for WebKit2 GTK</desc>
            <filename>48510.review.1.patch</filename>
            <type>text/plain</type>
            <size>6564</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTgwNykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTEtMDEtMTQgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3Jv
bGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0bGFA
bW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJDb250ZXh0IGFuZCBOYXRpdmVLZXlib2FyZEV2ZW50
IGNsYXNzZXMgZm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ4NTEwCisKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudC5oOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpuYXRpdmVF
dmVudCk6CisgICAgICAgICogU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNw
cDogQWRkZWQuIFN0dWJiZWQgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBwb3J0LiBZZXQgdG8gaW1w
bGVtZW50LgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsu
Y3BwOiBBZGRlZC4gU3R1YmJlZCBpbXBsZW1lbnRhdGlvbiBmb3IgR1RLIHBvcnQuIFlldCB0byBp
bXBsZW1lbnQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OmFwcGxpY2F0aW9uQ2FjaGVE
aXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxp
emVXZWJQcm9jZXNzKToKKwogMjAxMS0wMS0xNCAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdv
bWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJp
c3RpYW5zZW4uCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCShy
ZXZpc2lvbiA3NTM2OSkKKysrIFdlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw2ICszOCw4IEBAIGNsYXNzIE5T
VmlldzsKICNlbmRpZgogI2VsaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8UUtleUV2ZW50Pgor
I2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGdkay9nZGsuaD4KICNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKQEAgLTQ5LDYgKzUyLDggQEAgcHVibGljOgogICAgIE5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAjZWxpZiBQ
TEFURk9STShRVCkKICAgICBleHBsaWNpdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KFFLZXlFdmVu
dCopOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoR2Rr
RXZlbnRLZXkqKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNTcsNiArNjIsOCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgTVNHKiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuICZt
X25hdGl2ZUV2ZW50OyB9CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBjb25zdCBRS2V5RXZlbnQq
IG5hdGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gJm1fbmF0aXZlRXZlbnQ7IH0KKyNlbGlmIFBM
QVRGT1JNKEdUSykKKyAgICBjb25zdCBHZGtFdmVudEtleSogbmF0aXZlRXZlbnQoKSBjb25zdCB7
IHJldHVybiAmbV9uYXRpdmVFdmVudDsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC02Niw2ICs3
Myw4IEBAIHByaXZhdGU6CiAgICAgTVNHIG1fbmF0aXZlRXZlbnQ7CiAjZWxpZiBQTEFURk9STShR
VCkKICAgICBRS2V5RXZlbnQgbV9uYXRpdmVFdmVudDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAg
ICBHZGtFdmVudEtleSBtX25hdGl2ZUV2ZW50OwogI2VuZGlmCiB9OwogCkluZGV4OiBXZWJLaXQy
L1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAo
YykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKworI2luY2x1ZGUg
IldlYkV2ZW50RmFjdG9yeS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSogZXZlbnQpCisg
ICAgOiBXZWJLZXlib2FyZEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRF
dmVudChldmVudCkpCisgICAgLCBtX25hdGl2ZUV2ZW50KCpldmVudCkKK3sKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkNvbnRleHRHdGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisKKyNpbmNsdWRlICJBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXVEY6OlN0cmluZyBXZWJDb250ZXh0OjphcHBsaWNhdGlvbkNhY2hlRGly
ZWN0b3J5KCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6Y2FjaGVTdG9yYWdlKCkuY2FjaGVEaXJl
Y3RvcnkoKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9j
ZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKQoreworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78981</attachid>
            <date>2011-01-14 12:30:03 -0800</date>
            <delta_ts>2011-02-10 11:49:03 -0800</delta_ts>
            <desc>WebPageGtk implementation for WebKit2 GTK</desc>
            <filename>48510.review.2.patch</filename>
            <type>text/plain</type>
            <size>12096</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTgwNykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTEtMDEtMTQgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3Jv
bGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0bGFA
bW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJQYWdlIGNsYXNzIGZvciBXZWJLaXQyIEdUSyBwb3J0
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTAK
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHA6IEFkZGVk
LiBJbXBsZW1lbnRhdGlvbiBmb3IgaW50ZXJwcmV0aW5nIGtleSBldmVudHMuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBsYXRmb3JtUHJlZmVyZW5jZXNEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjppbnRlcnByZXRLZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EZWZhdWx0QmVoYXZpb3JGb3JLZXlFdmVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtSGFzTG9jYWxEYXRhRm9yVVJM
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y2FuSGFuZGxlUmVxdWVzdCk6CisKIDIwMTEt
MDEtMTQgIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEw
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiV2ViUGFnZS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJXZWJFdmVudC5oIgorI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK3ZvaWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0
aWFsaXplKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6OnBs
YXRmb3JtUHJlZmVyZW5jZXNEaWRDaGFuZ2UoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIEN0cmxL
ZXkgPSAxIDw8IDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgQWx0S2V5ID0gMSA8PCAxOworc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFNoaWZ0S2V5ID0gMSA8PCAyOworCitzdHJ1Y3QgS2V5RG93bkVu
dHJ5IHsKKyAgICB1bnNpZ25lZCB2aXJ0dWFsS2V5OworICAgIHVuc2lnbmVkIG1vZGlmaWVyczsK
KyAgICBjb25zdCBjaGFyKiBuYW1lOworfTsKKworc3RydWN0IEtleVByZXNzRW50cnkgeworICAg
IHVuc2lnbmVkIGNoYXJDb2RlOworICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKKyAgICBjb25zdCBj
aGFyKiBuYW1lOworfTsKKworc3RhdGljIGNvbnN0IEtleURvd25FbnRyeSBrZXlEb3duRW50cmll
c1tdID0geworICAgIHsgVktfTEVGVCwgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlTGVmdCIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfTEVGVCwgICBT
aGlmdEtleSwgICAgICAgICAgICJNb3ZlTGVmdEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAg
ICAgICAgICB9LAorICAgIHsgVktfTEVGVCwgICBDdHJsS2V5LCAgICAgICAgICAgICJNb3ZlV29y
ZExlZnQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfTEVGVCwg
ICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlV29yZExlZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAg
ICAgICAgICAgICB9LAorICAgIHsgVktfUklHSFQsICAwLCAgICAgICAgICAgICAgICAgICJNb3Zl
UmlnaHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUklH
SFQsICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgVktfUklHSFQsICBDdHJsS2V5LCAgICAgICAgICAgICJN
b3ZlV29yZFJpZ2h0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktf
UklHSFQsICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlV29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0
aW9uIiAgICAgICAgICAgICB9LAorICAgIHsgVktfVVAsICAgICAwLCAgICAgICAgICAgICAgICAg
ICJNb3ZlVXAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
VktfVVAsICAgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24i
ICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUFJJT1IsICBTaGlmdEtleSwgICAgICAg
ICAgICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICB9LAorICAg
IHsgVktfRE9XTiwgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlRG93biIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfRE9XTiwgICBTaGlmdEtleSwgICAg
ICAgICAgICJNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICB9LAor
ICAgIHsgVktfTkVYVCwgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRNb2Rp
ZnlTZWxlY3Rpb24iICAgICAgICAgICAgICB9LAorICAgIHsgVktfUFJJT1IsICAwLCAgICAgICAg
ICAgICAgICAgICJNb3ZlUGFnZVVwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAorICAgIHsgVktfTkVYVCwgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd24iICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfSE9NRSwgICAwLCAgICAg
ICAgICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiICAgICAgICAgICAgICAgICAgICAg
ICB9LAorICAgIHsgVktfSE9NRSwgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVG9CZWdpbm5p
bmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICB9LAorICAgIHsgVktfSE9NRSwgICBDdHJs
S2V5LCAgICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IiAgICAgICAgICAgICAg
ICAgICB9LAorICAgIHsgVktfSE9NRSwgICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlVG9CZWdp
bm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiB9LAorICAgIAorICAgIHsgVktfRU5E
LCAgICAwLCAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgVktfRU5ELCAgICBTaGlmdEtleSwgICAgICAgICAgICJN
b3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICB9LAorICAgIHsgVktf
RU5ELCAgICBDdHJsS2V5LCAgICAgICAgICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50IiAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfRU5ELCAgICBDdHJsS2V5IHwgU2hpZnRLZXks
ICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICB9LAorICAgIAor
ICAgIHsgVktfQkFDSywgICAwLCAgICAgICAgICAgICAgICAgICJEZWxldGVCYWNrd2FyZCIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfQkFDSywgICBTaGlmdEtleSwg
ICAgICAgICAgICJEZWxldGVCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAorICAgIHsgVktfREVMRVRFLCAwLCAgICAgICAgICAgICAgICAgICJEZWxldGVGb3J3YXJkIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfQkFDSywgICBDdHJsS2V5
LCAgICAgICAgICAgICJEZWxldGVXb3JkQmFja3dhcmQiICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAorICAgIHsgVktfREVMRVRFLCBDdHJsS2V5LCAgICAgICAgICAgICJEZWxldGVXb3JkRm9y
d2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIAorICAgIHsgJ0InLCAgICAg
ICBDdHJsS2V5LCAgICAgICAgICAgICJUb2dnbGVCb2xkIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgIHsgJ0knLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJUb2dn
bGVJdGFsaWMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIAorICAgIHsg
VktfRVNDQVBFLCAwLCAgICAgICAgICAgICAgICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfT0VNX1BFUklPRCwgQ3RybEtleSwgICAg
ICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAg
IHsgVktfVEFCLCAgICAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfVEFCLCAgICBTaGlmdEtleSwgICAg
ICAgICAgICJJbnNlcnRCYWNrdGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAor
ICAgIHsgVktfUkVUVVJOLCAwLCAgICAgICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCBDdHJsS2V5LCAg
ICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAorICAgIHsgVktfUkVUVVJOLCBBbHRLZXksICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCBTaGlmdEtl
eSwgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAorICAgIHsgVktfUkVUVVJOLCBBbHRLZXkgfCBTaGlmdEtleSwgICJJbnNlcnROZXdsaW5l
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIAorICAgIC8vIEl0J3Mgbm90
IHF1aXRlIGNsZWFyIHdoZXRoZXIgY2xpcGJvYXJkIHNob3J0Y3V0cyBhbmQgVW5kby9SZWRvIHNo
b3VsZCBiZSBoYW5kbGVkCisgICAgLy8gaW4gdGhlIGFwcGxpY2F0aW9uIG9yIGluIFdlYktpdC4g
V2UgY2hvc2UgV2ViS2l0LgorICAgIHsgJ0MnLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJD
b3B5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ1Yn
LCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJQYXN0ZSIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ1gnLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAg
ICJDdXQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
J0EnLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJTZWxlY3RBbGwiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfSU5TRVJULCBDdHJsS2V5LCAgICAgICAg
ICAgICJDb3B5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAg
IHsgVktfREVMRVRFLCBTaGlmdEtleSwgICAgICAgICAgICJDdXQiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfSU5TRVJULCBTaGlmdEtleSwgICAg
ICAgICAgICJQYXN0ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAor
ICAgIHsgJ1onLCAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICJVbmRvIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgJ1onLCAgICAgICBDdHJsS2V5IHwg
U2hpZnRLZXksICJSZWRvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAorfTsKKworc3RhdGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5UHJlc3NFbnRyaWVzW10gPSB7
CisgICAgeyAnXHQnLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHQnLCAgIFNoaWZ0S2V5LCAgICAg
ICAgICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgeyAnXHInLCAgIDAsICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEN0cmxLZXksICAgICAgICAg
ICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
eyAnXHInLCAgIEFsdEtleSwgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIFNoaWZ0S2V5LCAgICAgICAgICAg
Ikluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAn
XHInLCAgIEFsdEtleSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCit9OworCitjb25zdCBjaGFyKiBXZWJQYWdlOjppbnRlcnByZXRL
ZXlFdmVudChjb25zdCBLZXlib2FyZEV2ZW50KiBldnQpCit7CisgICAgQVNTRVJUKGV2dC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgfHwgZXZ0LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmtleXByZXNzRXZlbnQpOworICAgIAorICAgIHN0YXRpYyBIYXNoTWFwPGludCwgY29u
c3QgY2hhcio+KiBrZXlEb3duQ29tbWFuZHNNYXAgPSAwOworICAgIHN0YXRpYyBIYXNoTWFwPGlu
dCwgY29uc3QgY2hhcio+KiBrZXlQcmVzc0NvbW1hbmRzTWFwID0gMDsKKyAgICAKKyAgICBpZiAo
IWtleURvd25Db21tYW5kc01hcCkgeworICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAgPSBuZXcg
SGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPjsKKyAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcCA9
IG5ldyBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+OworICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IChzaXplb2Yoa2V5RG93bkVudHJpZXMpIC8gc2l6ZW9mKGtleURv
d25FbnRyaWVzWzBdKSk7IGkrKykKKyAgICAgICAgICAgIGtleURvd25Db21tYW5kc01hcC0+c2V0
KGtleURvd25FbnRyaWVzW2ldLm1vZGlmaWVycyA8PCAxNiB8IGtleURvd25FbnRyaWVzW2ldLnZp
cnR1YWxLZXksIGtleURvd25FbnRyaWVzW2ldLm5hbWUpOworICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IChzaXplb2Yoa2V5UHJlc3NFbnRyaWVzKSAvIHNpemVvZihr
ZXlQcmVzc0VudHJpZXNbMF0pKTsgaSsrKQorICAgICAgICAgICAga2V5UHJlc3NDb21tYW5kc01h
cC0+c2V0KGtleVByZXNzRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlQcmVzc0VudHJp
ZXNbaV0uY2hhckNvZGUsIGtleVByZXNzRW50cmllc1tpXS5uYW1lKTsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgbW9kaWZpZXJzID0gMDsKKyAgICBpZiAoZXZ0LT5zaGlmdEtleSgpKQorICAg
ICAgICBtb2RpZmllcnMgfD0gU2hpZnRLZXk7CisgICAgaWYgKGV2dC0+YWx0S2V5KCkpCisgICAg
ICAgIG1vZGlmaWVycyB8PSBBbHRLZXk7CisgICAgaWYgKGV2dC0+Y3RybEtleSgpKQorICAgICAg
ICBtb2RpZmllcnMgfD0gQ3RybEtleTsKKyAgICAKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCkgeworICAgICAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJz
IDw8IDE2IHwgZXZ0LT5rZXlFdmVudCgpLT53aW5kb3dzVmlydHVhbEtleUNvZGUoKTsKKyAgICAg
ICAgcmV0dXJuIG1hcEtleSA/IGtleURvd25Db21tYW5kc01hcC0+Z2V0KG1hcEtleSkgOiAwOwor
ICAgIH0KKyAgICAKKyAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwgZXZ0LT5jaGFy
Q29kZSgpOworICAgIHJldHVybiBtYXBLZXkgPyBrZXlQcmVzc0NvbW1hbmRzTWFwLT5nZXQobWFw
S2V5KSA6IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3JvbGwoUGFnZSogcGFnZSwgU2Ny
b2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7
CisgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5ldmVu
dEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Cit9
CisKK2Jvb2wgV2ViUGFnZTo6cGVyZm9ybURlZmF1bHRCZWhhdmlvckZvcktleUV2ZW50KGNvbnN0
IFdlYktleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQpCit7CisgICAgaWYgKGtleWJvYXJkRXZl
bnQudHlwZSgpICE9IFdlYkV2ZW50OjpLZXlEb3duICYmIGtleWJvYXJkRXZlbnQudHlwZSgpICE9
IFdlYkV2ZW50OjpSYXdLZXlEb3duKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0
Y2ggKGtleWJvYXJkRXZlbnQud2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKKyAgICBjYXNlIFZL
X0JBQ0s6CisgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LnNoaWZ0S2V5KCkpCisgICAgICAgICAg
ICBtX3BhZ2UtPmdvRm9yd2FyZCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BhZ2Ut
PmdvQmFjaygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX1NQQUNFOgorICAgICAgICBz
Y3JvbGwobV9wYWdlLmdldCgpLCBrZXlib2FyZEV2ZW50LnNoaWZ0S2V5KCkgPyBTY3JvbGxVcCA6
IFNjcm9sbERvd24sIFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktf
TEVGVDoKKyAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsTGVmdCwgU2Nyb2xsQnlM
aW5lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS19SSUdIVDoKKyAgICAgICAgc2Nyb2xs
KG1fcGFnZS5nZXQoKSwgU2Nyb2xsUmlnaHQsIFNjcm9sbEJ5TGluZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVktfVVA6CisgICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbFVw
LCBTY3JvbGxCeUxpbmUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX0RPV046CisgICAg
ICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgVktfSE9NRToKKyAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQo
KSwgU2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFZLX0VORDoKKyAgICAgICAgc2Nyb2xsKG1fcGFnZS5nZXQoKSwgU2Nyb2xsRG93biwgU2Nyb2xs
QnlEb2N1bWVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVktfUFJJT1I6CisgICAgICAg
IHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFZLX05FWFQ6CisgICAgICAgIHNjcm9sbChtX3BhZ2UuZ2V0KCksIFNj
cm9sbERvd24sIFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBXZWJQYWdlOjpwbGF0Zm9ybUhhc0xvY2FsRGF0YUZvclVSTChjb25zdCBXZWJDb3JlOjpLVVJM
JikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViUGFnZTo6Y2FuSGFuZGxlUmVxdWVzdChjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82016</attachid>
            <date>2011-02-10 11:49:03 -0800</date>
            <delta_ts>2011-02-15 09:04:39 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>factory.patch</filename>
            <type>text/plain</type>
            <size>24861</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IGFiZmQ5NzNkYjhiMDI2MzIxOGZlOWM0OGY1ODM0MzY1OWRkZWYyNjYKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MjoxMjo1NiAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMCAgIEFtcnV0aCBSYWogIDxhbXJ1dGhy
YWpAbW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmth
c2liaGF0bGFAbW90b3JvbGEuY29tPiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdh
bGlhLmNvbT4KICAgIAogICAgICAgICAgICBbR1RLXSBJbXBsZW1lbnQgV2ViRXZlbnRGYWN0b3J5
LCBXZWJFcnJvcnMgY2xhc3NlcyBmb3IgV2ViS2l0MgogICAgICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTAKICAgIAogICAgICAgICAgICBFeHBvcnRl
ZCBzdGF0aWMgZnVuY3Rpb25zIGZvciBHVEssIHdlIG5lZWQgdGhlbSB0byBjcmVhdGUgZXZlbnRz
CiAgICAgICAgICAgIGluIFdlYktpdDIuCiAgICAKICAgICAgICAgICAgKiBwbGF0Zm9ybS9QbGF0
Zm9ybUtleWJvYXJkRXZlbnQuaDoKICAgICAgICAgICAgKiBwbGF0Zm9ybS9ndGsvS2V5RXZlbnRH
dGsuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjprZXlJ
ZGVudGlmaWVyRm9yR2RrS2V5Q29kZSk6CiAgICAgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQpOgogICAgICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgogICAg
CiAgICAyMDExLTAyLTEwICAgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFu
ZCBSYXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5j
b20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogICAgCiAgICAg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogICAgCiAgICAgICAgICAgIFtHVEtd
IEltcGxlbWVudCBXZWJFdmVudEZhY3RvcnksIFdlYkVycm9ycyBjbGFzc2VzIGZvciBXZWJLaXQy
CiAgICAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUx
MAogICAgCiAgICAgICAgICAgICogR05VbWFrZWZpbGUuYW06CiAgICAgICAgICAgICogU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwOiBBZGRlZC4gaW1wbGVtZW50YXRpb24gZm9yCiAgICAg
ICAgICAgIFdlYk1vdXNlRXZlbnQsIFdlYldoZWVsRXZlbnQsIFdlYktleWJvYXJkRXZlbnQuCiAg
ICAgICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaDogQWRkZWQuCiAgICAgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcDogQWRk
ZWQuIFN0dWJiZWQKICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBwb3J0LiBZZXQg
dG8gaW1wbGVtZW50LgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhODlhZTVlLi4xOGE3MGY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDItMTAgICBBbXJ1dGggUmFqICA8YW1ydXRocmFqQG1v
dG9yb2xhLmNvbT4gYW5kIFJhdmkgUGhhbmVlbmRyYSBLYXNpYmhhdGxhICA8cmF2aS5rYXNpYmhh
dGxhQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYkV2ZW50RmFjdG9yeSwgV2ViRXJyb3Jz
IGNsYXNzZXMgZm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ4NTEwCisKKyAgICAgICAgRXhwb3J0ZWQgc3RhdGljIGZ1bmN0aW9ucyBm
b3IgR1RLLCB3ZSBuZWVkIHRoZW0gdG8gY3JlYXRlIGV2ZW50cworICAgICAgICBpbiBXZWJLaXQy
LgorCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKToKKwogMjAxMS0wMi0xMCAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKaW5kZXggYWVlOTViNC4u
ZDY3YWYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXli
b2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50LmgKQEAgLTE3NSw2ICsxNzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBM
QVRGT1JNKEdUSykKICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5Kik7
CiAgICAgICAgIEdka0V2ZW50S2V5KiBnZGtFdmVudEtleSgpIGNvbnN0OworCisgICAgICAgIC8v
IFVzZWQgYnkgV2ViS2l0MgorICAgICAgICBzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JH
ZGtLZXlDb2RlKGd1aW50IGtleUNvZGUpOworICAgICAgICBzdGF0aWMgaW50IHdpbmRvd3NLZXlD
b2RlRm9yS2V5RXZlbnQodW5zaWduZWQgaW50IGtleWNvZGUpOworICAgICAgICBzdGF0aWMgU3Ry
aW5nIHNpbmdsZUNoYXJhY3RlclN0cmluZyhndWludCB2YWwpOwogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShRVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlFdmVu
dEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3BwCmlu
ZGV4IDVhMDM0ZDYuLjdiZmQ2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9LZXlFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tl
eUV2ZW50R3RrLmNwcApAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBG
SVhNRTogVGhpcyBpcyBpbmNvbXBsZXRlLiAgV2Ugc2hvdWxkIGNoYW5nZSB0aGlzIHRvIG1pcnJv
cgogLy8gbW9yZSBsaWtlIHdoYXQgRmlyZWZveCBkb2VzLCBhbmQgZ2VuZXJhdGUgdGhlc2Ugc3dp
dGNoIHN0YXRlbWVudHMKIC8vIGF0IGJ1aWxkIHRpbWUuCi1zdGF0aWMgU3RyaW5nIGtleUlkZW50
aWZpZXJGb3JHZGtLZXlDb2RlKGd1aW50IGtleUNvZGUpCitTdHJpbmcgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShndWludCBrZXlDb2RlKQogewogICAg
IHN3aXRjaCAoa2V5Q29kZSkgewogICAgICAgICBjYXNlIEdES19NZW51OgpAQCAtMTQ5LDcgKzE0
OSw3IEBAIHN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoZ3VpbnQga2V5
Q29kZSkKICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudCh1
bnNpZ25lZCBpbnQga2V5Y29kZSkKK2ludCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OndpbmRvd3NL
ZXlDb2RlRm9yS2V5RXZlbnQodW5zaWduZWQgaW50IGtleWNvZGUpCiB7CiAgICAgc3dpdGNoIChr
ZXljb2RlKSB7CiAgICAgICAgIGNhc2UgR0RLX0tQXzA6CkBAIC01MTYsNyArNTE2LDcgQEAgc3Rh
dGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVuc2lnbmVkIGludCBrZXljb2RlKQog
CiB9CiAKLXN0YXRpYyBTdHJpbmcgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGd1aW50IHZhbCkKK1N0
cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyhndWludCB2
YWwpCiB7CiAgICAgc3dpdGNoICh2YWwpIHsKICAgICAgICAgY2FzZSBHREtfSVNPX0VudGVyOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCmluZGV4IDMxYzE0M2EuLjc4ZTIyYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAxMS0wMi0xMCAgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29tPiBhbmQg
UmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0bGFAbW90b3JvbGEuY29t
PiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgV2Vi
RXZlbnRGYWN0b3J5LCBXZWJFcnJvcnMgY2xhc3NlcyBmb3IgV2ViS2l0MgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTAKKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcDog
QWRkZWQuIGltcGxlbWVudGF0aW9uIGZvcgorICAgICAgICBXZWJNb3VzZUV2ZW50LCBXZWJXaGVl
bEV2ZW50LCBXZWJLZXlib2FyZEV2ZW50LgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRG
YWN0b3J5Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYkVycm9yc0d0ay5jcHA6IEFkZGVkLiBTdHViYmVkCisgICAgICAgIGltcGxlbWVudGF0aW9u
IGZvciBHVEsgcG9ydC4gWWV0IHRvIGltcGxlbWVudC4KKwogMjAxMS0wMi0xMCAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEF0dGVtcHQgdG8gZml4IHRo
ZSBRdCBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIv
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggNThhMzg3Ni4uMGUzMjEwZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0KQEAgLTE4MCw2ICsxODAsOCBAQCBsaWJXZWJLaXQyX2xhX1NPVVJD
RVMgPSBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9TaGFyZWFibGVCaXRtYXBHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmgg
XAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29yZUFyZ3VtZW50Q29kZXJzR3RrLmNw
cCBcCisJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwIFwKKwlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvSW1hZ2VPcHRpb25zLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11
dGFibGVBcnJheS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVBcnJheS5o
IFwKQEAgLTUzOSw2ICs1NDEsNyBAQCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJDb250ZXh0TWVudUNsaWVudEd0ay5jcHAg
XAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9y
c0d0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViUG9wdXBNZW51R3RrLmNwcCBcCiAJU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGFmOGRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCkBAIC0wLDAgKzEsMjg1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0
b3J5LmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJX
aW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgorCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMg
aW5saW5lIEdka1BvaW50IHBvc2l0aW9uRm9yRXZlbnQoR2RrRXZlbnRBbnkqIGV2ZW50KQorewor
ICAgIEdka1BvaW50IHBvaW50OworCisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNh
c2UgR0RLX01PVElPTl9OT1RJRlk6CisgICAgICAgIHBvaW50LnggPSBzdGF0aWNfY2FzdDxpbnQ+
KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRNb3Rpb24gKj4oZXZlbnQpLT54KTsKKyAgICAgICAg
cG9pbnQueSA9IHN0YXRpY19jYXN0PGludD4ocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudE1vdGlv
biAqPihldmVudCktPnkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19CVVRUT05fUFJF
U1M6CisgICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18zQlVUVE9OX1BS
RVNTOgorICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxFQVNFOgorICAgICAgICBwb2ludC54ID0gc3Rh
dGljX2Nhc3Q8aW50PihyZWludGVycHJldF9jYXN0PEdka0V2ZW50QnV0dG9uICo+KGV2ZW50KS0+
eCk7CisgICAgICAgIHBvaW50LnkgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlaW50ZXJwcmV0X2Nhc3Q8
R2RrRXZlbnRCdXR0b24gKj4oZXZlbnQpLT55KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
REtfU0NST0xMOgorICAgICAgICBwb2ludC54ID0gc3RhdGljX2Nhc3Q8aW50PihyZWludGVycHJl
dF9jYXN0PEdka0V2ZW50U2Nyb2xsICo+KGV2ZW50KS0+eCk7CisgICAgICAgIHBvaW50LnkgPSBz
dGF0aWNfY2FzdDxpbnQ+KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRTY3JvbGwgKj4oZXZlbnQp
LT55KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdCA6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiBwb2ludDsKK30KKworc3RhdGljIGlubGlu
ZSBHZGtQb2ludCBnbG9iYWxQb3NpdGlvbkZvckV2ZW50KEdka0V2ZW50QW55KiBldmVudCkKK3sK
KyAgICBHZGtQb2ludCBwb2ludDsKKworICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKyAgICBj
YXNlIEdES19NT1RJT05fTk9USUZZOgorICAgICAgICBwb2ludC54ID0gc3RhdGljX2Nhc3Q8aW50
PihyZWludGVycHJldF9jYXN0PEdka0V2ZW50TW90aW9uICo+KGV2ZW50KS0+eF9yb290KTsKKyAg
ICAgICAgcG9pbnQueSA9IHN0YXRpY19jYXN0PGludD4ocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVu
dE1vdGlvbiAqPihldmVudCktPnlfcm9vdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RL
X0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RL
XzNCVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6CisgICAgICAgIHBv
aW50LnggPSBzdGF0aWNfY2FzdDxpbnQ+KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRCdXR0b24g
Kj4oZXZlbnQpLT54X3Jvb3QpOworICAgICAgICBwb2ludC55ID0gc3RhdGljX2Nhc3Q8aW50Pihy
ZWludGVycHJldF9jYXN0PEdka0V2ZW50QnV0dG9uICo+KGV2ZW50KS0+eV9yb290KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHREtfU0NST0xMOgorICAgICAgICBwb2ludC54ID0gc3RhdGlj
X2Nhc3Q8aW50PihyZWludGVycHJldF9jYXN0PEdka0V2ZW50U2Nyb2xsICo+KGV2ZW50KS0+eF9y
b290KTsKKyAgICAgICAgcG9pbnQueSA9IHN0YXRpY19jYXN0PGludD4ocmVpbnRlcnByZXRfY2Fz
dDxHZGtFdmVudFNjcm9sbCAqPihldmVudCktPnlfcm9vdCk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQgOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcG9pbnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNsaWNrQ291bnQoR2RrRXZlbnRB
bnkqIGV2ZW50KQoreworICAgIGludCBzQ2xpY2tDb3VudCA9IDA7CisKKyAgICBzd2l0Y2ggKGV2
ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAgICAgICBzQ2xpY2tD
b3VudCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6Cisg
ICAgICAgIHNDbGlja0NvdW50ID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfM0JV
VFRPTl9QUkVTUzoKKyAgICAgICAgc0NsaWNrQ291bnQgPSAzOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdES19NT1RJT05fTk9USUZZOgorICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxFQVNFOgor
ICAgICAgICBzQ2xpY2tDb3VudCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07CisKKyAgICByZXR1cm4gc0NsaWNr
Q291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnNG
b3JFdmVudChndWludCBzdGF0ZSkKK3sKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOworCisg
ICAgaWYgKHN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdl
YkV2ZW50OjpDb250cm9sS2V5OworICAgIGlmIChzdGF0ZSAmIEdES19TSElGVF9NQVNLKQorICAg
ICAgICBtb2RpZmllcnMgfD0gV2ViRXZlbnQ6OlNoaWZ0S2V5OworICAgIGlmIChzdGF0ZSAmIEdE
S19NT0QxX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6QWx0S2V5OworICAg
IGlmIChzdGF0ZSAmIEdES19NRVRBX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVu
dDo6TWV0YUtleTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJz
Pihtb2RpZmllcnMpOworfQorCitzdGF0aWMgaW5saW5lIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBi
dXR0b25Gb3JFdmVudChHZGtFdmVudEFueSAqZXZlbnQpCit7CisgICAgdW5zaWduZWQgYnV0dG9u
ID0gMDsKKyAgICBHZGtFdmVudE1vdGlvbiogbW90aW9uOworICAgIEdka0V2ZW50QnV0dG9uKiBi
RXZlbnQ7CisKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfTU9USU9O
X05PVElGWToKKyAgICAgICAgbW90aW9uID0gKEdka0V2ZW50TW90aW9uKikgZXZlbnQ7CisgICAg
ICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOworICAgICAgICBpZiAobW90aW9u
LT5zdGF0ZSAmIEdES19CVVRUT04xX01BU0spCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3Vz
ZUV2ZW50OjpMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmIChtb3Rpb24tPnN0YXRlICYgR0RL
X0JVVFRPTjJfTUFTSykKKyAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1pZGRs
ZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04zX01B
U0spCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzJC
VVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES19C
VVRUT05fUkVMRUFTRToKKyAgICAgICAgYkV2ZW50ID0gKEdka0V2ZW50QnV0dG9uICopZXZlbnQ7
CisgICAgICAgIGlmIChiRXZlbnQtPmJ1dHRvbiA9PSAxKQorICAgICAgICAgICAgYnV0dG9uID0g
V2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoYkV2ZW50LT5idXR0
b24gPT0gMikKKyAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRv
bjsKKyAgICAgICAgZWxzZSBpZiAoYkV2ZW50LT5idXR0b24gPT0gMykKKyAgICAgICAgICAgIGJ1
dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OworCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbj4oYnV0dG9uKTsKK30KKworCitX
ZWJNb3VzZUV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChHZGtFdmVu
dEFueSAqZXZlbnQpCit7CisgICAgZ3VpbnQgdGltZXN0YW1wID0gMDsKKworICAgIFdlYkV2ZW50
OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4o
MCk7CisgICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvbiA9IGJ1dHRvbkZvckV2ZW50KGV2
ZW50KTsKKworICAgIEdka1BvaW50IHBvc2l0aW9uID0gcG9zaXRpb25Gb3JFdmVudChldmVudCk7
CisgICAgR2RrUG9pbnQgZ2xvYmFsUG9zaXRpb24gPSBnbG9iYWxQb3NpdGlvbkZvckV2ZW50KChH
ZGtFdmVudEFueSAqKWV2ZW50KTsKKyAgICBpbnQgY2xpY2tjb3VudCA9IGNsaWNrQ291bnQoZXZl
bnQpOworCisgICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpU
eXBlPigwKTsKKworICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKKyAgICBjYXNlIEdES19NT1RJ
T05fTk9USUZZOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlTW92ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzJCVVRUT05f
UFJFU1M6CisgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAgICAgICAgdHlwZSA9IFdlYkV2
ZW50OjpNb3VzZURvd247CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxF
QVNFOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6Ok1vdXNlVXA7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQgOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICBXZWJDb3JlOjpJbnRQb2ludCBldmVudFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkp
OworICAgIFdlYkNvcmU6OkludFBvaW50IGV2ZW50R2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRp
b24ueCwgZ2xvYmFsUG9zaXRpb24ueSk7CisKKyAgICByZXR1cm4gV2ViTW91c2VFdmVudCh0eXBl
LCBidXR0b24sIGV2ZW50UG9zaXRpb24sIGV2ZW50R2xvYmFsUG9zaXRpb24sIDAsIDAsIDAsIGNs
aWNrY291bnQsIG1vZGlmaWVycywgdGltZXN0YW1wKTsKK30KKworV2ViV2hlZWxFdmVudCBXZWJF
dmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwgKmV2ZW50KQor
eworICAgIFdlYldoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5ICA9IFdlYldoZWVs
RXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OworCisgICAgZG91YmxlIHRpbWVzdGFtcCA9
IGV2ZW50LT50aW1lOworCisgICAgZmxvYXQgZGVsdGFYID0gMDsKKyAgICBmbG9hdCBkZWx0YVkg
PSAwOworICAgIGZsb2F0IHdoZWVsVGlja3NYID0gMDsKKyAgICBmbG9hdCB3aGVlbFRpY2tzWSA9
IDA7CisgICAgZmxvYXQgc2Nyb2xsYmFyUGl4ZWxzUGVyTGluZSA9IDQwOworICAgIGZsb2F0IGRl
bHRhID0gMTsKKyAgICBHZGtQb2ludCBwb3NpdGlvbiA9IHBvc2l0aW9uRm9yRXZlbnQoKEdka0V2
ZW50QW55ICopZXZlbnQpOworICAgIEdka1BvaW50IGdsb2JhbFBvc2l0aW9uID0gZ2xvYmFsUG9z
aXRpb25Gb3JFdmVudCgoR2RrRXZlbnRBbnkgKilldmVudCk7CisgICAgV2ViQ29yZTo6SW50UG9p
bnQgZXZlbnRQb3NpdGlvbihwb3NpdGlvbi54LCBwb3NpdGlvbi55KTsKKyAgICBXZWJDb3JlOjpJ
bnRQb2ludCBldmVudEdsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uLngsIGdsb2JhbFBvc2l0
aW9uLnkpOworICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9y
RXZlbnQoZXZlbnQtPnN0YXRlKTsKKworICAgIHN3aXRjaCAoZXZlbnQtPmRpcmVjdGlvbikgewor
ICAgIGNhc2UgR0RLX1NDUk9MTF9VUDoKKyAgICAgICAgZGVsdGFZID0gZGVsdGE7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR0RLX1NDUk9MTF9ET1dOOgorICAgICAgICBkZWx0YVkgPSAtZGVs
dGE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RLX1NDUk9MTF9MRUZUOgorICAgICAgICBk
ZWx0YVggPSBkZWx0YTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfU0NST0xMX1JJR0hU
OgorICAgICAgICBkZWx0YVggPSAtZGVsdGE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHdoZWVsVGlja3NYID0gZGVsdGFYOworICAgIHdoZWVsVGlja3NZID0gZGVsdGFZOworICAgIGRl
bHRhWCAqPSBzY3JvbGxiYXJQaXhlbHNQZXJMaW5lOworICAgIGRlbHRhWSAqPSBzY3JvbGxiYXJQ
aXhlbHNQZXJMaW5lOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBldmVudERlbHRhKGRlbHRhWCwg
ZGVsdGFZKTsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgZXZlbnRXaGVlbFRpY2tzKHdoZWVsVGlj
a3NYLCB3aGVlbFRpY2tzWSk7CisKKyAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6
V2hlZWwsIGV2ZW50UG9zaXRpb24sIGV2ZW50R2xvYmFsUG9zaXRpb24sIGV2ZW50RGVsdGEsIGV2
ZW50V2hlZWxUaWNrcywgZ3JhbnVsYXJpdHksIG1vZGlmaWVycywgdGltZXN0YW1wKTsKK30KKwor
CitzdGF0aWMgaW5saW5lIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzRm9yQ3VycmVudEtl
eVN0YXRlKGd1aW50IHN0YXRlKQoreworICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7CisKKyAg
ICBpZiAoc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICBtb2RpZmllcnMgfD0gV2Vi
RXZlbnQ6OkNvbnRyb2xLZXk7CisgICAgaWYgKChzdGF0ZSAmIEdES19TSElGVF9NQVNLKSB8fCAo
c3RhdGUgPT0gR0RLX0tFWV8zMjcwX0JhY2tUYWIpKQorICAgICAgICBtb2RpZmllcnMgfD0gV2Vi
RXZlbnQ6OlNoaWZ0S2V5OworICAgIGlmIChzdGF0ZSAmIEdES19NT0QxX01BU0spCisgICAgICAg
IG1vZGlmaWVycyB8PSBXZWJFdmVudDo6QWx0S2V5OworICAgIGlmIChzdGF0ZSAmIEdES19NRVRB
X01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6TWV0YUtleTsKKworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPihtb2RpZmllcnMpOworfQorCitX
ZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChH
ZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSAgICAgICAgICAg
ICA9IChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpID8gV2ViRXZlbnQ6OktleVVwIDog
V2ViRXZlbnQ6OktleURvd247CisgICAgU3RyaW5nIHRleHQgICAgICAgICAgICAgICAgICAgICA9
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV2ZW50LT5rZXl2
YWwpOworICAgIFN0cmluZyB1bm1vZGlmaWVkVGV4dCAgICAgICAgICAgPSBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVudC0+a2V5dmFsKTsKKyAgICBTdHJp
bmcga2V5SWRlbnRpZmllciAgICAgICAgICAgID0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjprZXlJ
ZGVudGlmaWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKTsKKyAgICBpbnQgd2luZG93c1Zp
cnR1YWxLZXlDb2RlICAgICAgID0gUGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29k
ZUZvcktleUV2ZW50KGV2ZW50LT5rZXl2YWwpOworICAgIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29k
ZSAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50LT5rZXl2YWwpOworICAgIGludCBtYWND
aGFyQ29kZSAgICAgICAgICAgICAgICAgPSAwOworICAgIGJvb2wgYXV0b1JlcGVhdCAgICAgICAg
ICAgICAgICAgPSBmYWxzZTsKKyAgICBib29sIGlzS2V5cGFkICAgICAgICAgICAgICAgICAgID0g
ZXZlbnQtPmtleXZhbCA+PSBHREtfS0VZX0tQX1NwYWNlICYmIGV2ZW50LT5rZXl2YWwgPD0gR0RL
X0tFWV9LUF85OworICAgIGJvb2wgaXNTeXN0ZW1LZXkgICAgICAgICAgICAgICAgPSBmYWxzZTsK
KyAgICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycyAgID0gbW9kaWZpZXJzRm9yQ3VycmVu
dEtleVN0YXRlKGV2ZW50LT5zdGF0ZSk7CisgICAgZG91YmxlIHRpbWVzdGFtcCAgICAgICAgICAg
ICAgICA9IGV2ZW50LT50aW1lOworCisgICAgcmV0dXJuIFdlYktleWJvYXJkRXZlbnQodHlwZSwg
dGV4dCwgdW5tb2RpZmllZFRleHQsIGtleUlkZW50aWZpZXIsIHdpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSwgbmF0aXZlVmlydHVhbEtleUNvZGUsIG1hY0NoYXJDb2RlLCBhdXRvUmVwZWF0LCBpc0tleXBh
ZCwgaXNTeXN0ZW1LZXksIG1vZGlmaWVycywgdGltZXN0YW1wKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50
RmFjdG9yeS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTUzNjRjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaApAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJF
dmVudEZhY3RvcnlfaAorI2RlZmluZSBXZWJFdmVudEZhY3RvcnlfaAorCisjaW5jbHVkZSAiV2Vi
RXZlbnQuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkV2ZW50RmFjdG9yeSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgV2Vi
TW91c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2ZW50KEdka0V2ZW50QW55Kik7CisgICAgICAgIHN0
YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwqKTsK
KyAgICAgICAgc3RhdGljIFdlYktleWJvYXJkRXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChH
ZGtFdmVudEtleSopOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBX
ZWJFdmVudEZhY3RvcnlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlMjU4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHAKQEAg
LTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNk
ZWZpbmUgV2ViVVJMRXJyb3JEb21haW4gICAiVVJMRXJyb3JEb21haW4iCisKK2VudW0geworICAg
IFdlYlVSTEVycm9yVW5rbm93biA9ICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAgIFdl
YlVSTEVycm9yQ2FuY2VsbGVkID0gICAgICAgICAgICAgICAgICAgICAgIC05OTksCisgICAgV2Vi
VVJMRXJyb3JCYWRVUkwgPSAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwMDAsCisgICAgV2Vi
VVJMRXJyb3JUaW1lZE91dCA9ICAgICAgICAgICAgICAgICAgICAgICAgLTEwMDEsCisgICAgV2Vi
VVJMRXJyb3JVbnN1cHBvcnRlZFVSTCA9ICAgICAgICAgICAgICAgICAgLTEwMDIsCisgICAgV2Vi
VVJMRXJyb3JDYW5ub3RGaW5kSG9zdCA9ICAgICAgICAgICAgICAgICAgLTEwMDMsCisgICAgV2Vi
VVJMRXJyb3JDYW5ub3RDb25uZWN0VG9Ib3N0ID0gICAgICAgICAgICAgLTEwMDQsCisgICAgV2Vi
VVJMRXJyb3JOZXR3b3JrQ29ubmVjdGlvbkxvc3QgPSAgICAgICAgICAgLTEwMDUsCisgICAgV2Vi
VVJMRXJyb3JETlNMb29rdXBGYWlsZWQgPSAgICAgICAgICAgICAgICAgLTEwMDYsCisgICAgV2Vi
VVJMRXJyb3JIVFRQVG9vTWFueVJlZGlyZWN0cyA9ICAgICAgICAgICAgLTEwMDcsCisgICAgV2Vi
VVJMRXJyb3JSZXNvdXJjZVVuYXZhaWxhYmxlID0gICAgICAgICAgICAgLTEwMDgsCisgICAgV2Vi
VVJMRXJyb3JOb3RDb25uZWN0ZWRUb0ludGVybmV0ID0gICAgICAgICAgLTEwMDksCisgICAgV2Vi
VVJMRXJyb3JSZWRpcmVjdFRvTm9uRXhpc3RlbnRMb2NhdGlvbiA9ICAgLTEwMTAsCisgICAgV2Vi
VVJMRXJyb3JCYWRTZXJ2ZXJSZXNwb25zZSA9ICAgICAgICAgICAgICAgLTEwMTEsCisgICAgV2Vi
VVJMRXJyb3JVc2VyQ2FuY2VsbGVkQXV0aGVudGljYXRpb24gPSAgICAgLTEwMTIsCisgICAgV2Vi
VVJMRXJyb3JVc2VyQXV0aGVudGljYXRpb25SZXF1aXJlZCA9ICAgICAgLTEwMTMsCisgICAgV2Vi
VVJMRXJyb3JaZXJvQnl0ZVJlc291cmNlID0gICAgICAgICAgICAgICAgLTEwMTQsCisgICAgV2Vi
VVJMRXJyb3JGaWxlRG9lc05vdEV4aXN0ID0gICAgICAgICAgICAgICAgLTExMDAsCisgICAgV2Vi
VVJMRXJyb3JGaWxlSXNEaXJlY3RvcnkgPSAgICAgICAgICAgICAgICAgLTExMDEsCisgICAgV2Vi
VVJMRXJyb3JOb1Blcm1pc3Npb25zVG9SZWFkRmlsZSA9ICAgICAgICAgLTExMDIsCisgICAgV2Vi
VVJMRXJyb3JTZWN1cmVDb25uZWN0aW9uRmFpbGVkID0gICAgICAgICAgLTEyMDAsCisgICAgV2Vi
VVJMRXJyb3JTZXJ2ZXJDZXJ0aWZpY2F0ZUhhc0JhZERhdGUgPSAgICAgLTEyMDEsCisgICAgV2Vi
VVJMRXJyb3JTZXJ2ZXJDZXJ0aWZpY2F0ZVVudHJ1c3RlZCA9ICAgICAgLTEyMDIsCisgICAgV2Vi
VVJMRXJyb3JTZXJ2ZXJDZXJ0aWZpY2F0ZUhhc1Vua25vd25Sb290ID0gLTEyMDMsCisgICAgV2Vi
VVJMRXJyb3JTZXJ2ZXJDZXJ0aWZpY2F0ZU5vdFlldFZhbGlkID0gICAgLTEyMDQsCisgICAgV2Vi
VVJMRXJyb3JDbGllbnRDZXJ0aWZpY2F0ZVJlamVjdGVkID0gICAgICAgLTEyMDUsCisgICAgV2Vi
VVJMRXJyb3JDbGllbnRDZXJ0aWZpY2F0ZVJlcXVpcmVkID0gICAgICAgLTEyMDYsCisgICAgV2Vi
VVJMRXJyb3JDYW5ub3RMb2FkRnJvbU5ldHdvcmsgPSAgICAgICAgICAgLTIwMDAsCisKKyAgICAv
LyBEb3dubG9hZCBhbmQgZmlsZSBJL08gZXJyb3JzCisgICAgV2ViVVJMRXJyb3JDYW5ub3RDcmVh
dGVGaWxlID0gICAgICAgICAgICAgICAgLTMwMDAsCisgICAgV2ViVVJMRXJyb3JDYW5ub3RPcGVu
RmlsZSA9ICAgICAgICAgICAgICAgICAgLTMwMDEsCisgICAgV2ViVVJMRXJyb3JDYW5ub3RDbG9z
ZUZpbGUgPSAgICAgICAgICAgICAgICAgLTMwMDIsCisgICAgV2ViVVJMRXJyb3JDYW5ub3RXcml0
ZVRvRmlsZSA9ICAgICAgICAgICAgICAgLTMwMDMsCisgICAgV2ViVVJMRXJyb3JDYW5ub3RSZW1v
dmVGaWxlID0gICAgICAgICAgICAgICAgLTMwMDQsCisgICAgV2ViVVJMRXJyb3JDYW5ub3RNb3Zl
RmlsZSA9ICAgICAgICAgICAgICAgICAgLTMwMDUsCisgICAgV2ViVVJMRXJyb3JEb3dubG9hZERl
Y29kaW5nRmFpbGVkTWlkU3RyZWFtID0gLTMwMDYsCisgICAgV2ViVVJMRXJyb3JEb3dubG9hZERl
Y29kaW5nRmFpbGVkVG9Db21wbGV0ZSA9LTMwMDcsCit9OworCisjZGVmaW5lIFdlYktpdEVycm9y
RG9tYWluICAgIldlYktpdEVycm9yRG9tYWluIgorCitlbnVtIHsKKyAgICBXZWJLaXRFcnJvckNh
bm5vdFNob3dNSU1FVHlwZSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAsCisgICAg
V2ViS2l0RXJyb3JDYW5ub3RTaG93VVJMID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMTAxLAorICAgIFdlYktpdEVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBvbGljeUNoYW5n
ZSA9ICAgICAgICAgICAgIDEwMiwKKyAgICBXZWJLaXRFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQ
b3J0ID0gICAgICAgICAgICAgICAgICAgICAgICAxMDMsCit9OworCitlbnVtIHsKKyAgICBXZWJL
aXRFcnJvckNhbm5vdEZpbmRQbHVnSW4gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy
MDAsCisgICAgV2ViS2l0RXJyb3JDYW5ub3RMb2FkUGx1Z0luID0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMjAxLAorICAgIFdlYktpdEVycm9ySmF2YVVuYXZhaWxhYmxlID0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDIwMiwKK307CisKK2VudW0geworICAgIFdlYktpdEVy
cm9yR2VvbG9jYXRpb25Mb2NhdGlvblVua25vd24gID0gICAgICAgICAgICAgICAgICAgIDMwMCwK
K307CisKKyNkZWZpbmUgV2ViS2l0RXJyb3JNSU1FVHlwZUtleSAgICJXZWJLaXRFcnJvck1JTUVU
eXBlS2V5IgorI2RlZmluZSBXZWJLaXRFcnJvclBsdWdJbk5hbWVLZXkgICAiV2ViS2l0RXJyb3JQ
bHVnSW5OYW1lS2V5IgorI2RlZmluZSBXZWJLaXRFcnJvclBsdWdJblBhZ2VVUkxTdHJpbmdLZXkg
ICAiV2ViS2l0RXJyb3JQbHVnSW5QYWdlVVJMU3RyaW5nS2V5IgorCisjZGVmaW5lIFdlYlBPU0lY
RXJyb3JEb21haW4gICAiTlNQT1NJWEVycm9yRG9tYWluIgorI2RlZmluZSBXZWJQT1NJWEVycm9y
RUNPTk5SRVNFVCA1NAorCitSZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihTdHJpbmco
V2ViVVJMRXJyb3JEb21haW4pLCBXZWJVUkxFcnJvckNhbmNlbGxlZCwgcmVxdWVzdC51cmwoKS5z
dHJpbmcoKSwgU3RyaW5nKCkpOworfQorCitSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3Io
U3RyaW5nKFdlYktpdEVycm9yRG9tYWluKSwgV2ViS2l0RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVk
UG9ydCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOworfQorCitSZXNvdXJjZUVy
cm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7
CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoU3RyaW5nKFdlYktpdEVycm9yRG9tYWluKSwgV2Vi
S2l0RXJyb3JDYW5ub3RTaG93VVJMLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLCBTdHJpbmcoKSk7
Cit9CisKK1Jlc291cmNlRXJyb3IgaW50ZXJydXB0Rm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKFN0
cmluZyhXZWJLaXRFcnJvckRvbWFpbiksIFdlYktpdEVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRC
eVBvbGljeUNoYW5nZSwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOworfQorCitS
ZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Cit9CisKK1Jlc291
cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Cit9CisKK1Jlc291cmNlRXJy
b3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQK
</data>
<flag name="review"
          id="73639"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82468</attachid>
            <date>2011-02-15 09:04:39 -0800</date>
            <delta_ts>2011-02-16 16:04:43 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>eventfactory.patch</filename>
            <type>text/plain</type>
            <size>22702</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDNiY2YxNDkyNjYzZmY1ZGY2OTk5MDk3NDNmNjAzMjkyNzY1YjY1YmMKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MjoxMjo1NiAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMCBBbXJ1dGggUmFqIDxhbXJ1dGhyYWpA
bW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgPHJhdmkua2FzaWJo
YXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5j
b20+CiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAg
ICAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYkV2ZW50RmFjdG9yeSwgV2ViRXJyb3JzIGNsYXNz
ZXMgZm9yIFdlYktpdDIKICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ4NTEwCiAgICAKICAgICAgICAgICAgRXhwb3J0ZWQgc3RhdGljIGZ1bmN0aW9u
cyBmb3IgR1RLLCB3ZSBuZWVkIHRoZW0gdG8gY3JlYXRlIGV2ZW50cwogICAgICAgICAgICBpbiBX
ZWJLaXQyLgogICAgCiAgICAgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50
Lmg6CiAgICAgICAgICAgICogcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcDoKICAgICAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tl
eUNvZGUpOgogICAgICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5k
b3dzS2V5Q29kZUZvcktleUV2ZW50KToKICAgICAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5
Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKICAgIAogICAgMjAxMS0wMi0xMCAg
IEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJh
IEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0bGFAbW90b3JvbGEuY29tPiBhbmQgQWxlamFuZHJv
IEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KICAgIAogICAgICAgICAgICBbR1RLXSBJbXBsZW1lbnQgV2ViRXZl
bnRGYWN0b3J5LCBXZWJFcnJvcnMgY2xhc3NlcyBmb3IgV2ViS2l0MgogICAgICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTAKICAgIAogICAgICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgogICAgICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0
b3J5LmNwcDogQWRkZWQuIGltcGxlbWVudGF0aW9uIGZvcgogICAgICAgICAgICBXZWJNb3VzZUV2
ZW50LCBXZWJXaGVlbEV2ZW50LCBXZWJLZXlib2FyZEV2ZW50LgogICAgICAgICAgICAqIFNoYXJl
ZC9ndGsvV2ViRXZlbnRGYWN0b3J5Lmg6IEFkZGVkLgogICAgICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHA6IEFkZGVkLiBTdHViYmVkCiAgICAg
ICAgICAgIGltcGxlbWVudGF0aW9uIGZvciBHVEsgcG9ydC4gWWV0IHRvIGltcGxlbWVudC4KCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggOTY4ODNlYS4uYWJkZmZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBA
CisyMDExLTAyLTEwICAgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBS
YXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+
IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJF
dmVudEZhY3RvcnksIFdlYkVycm9ycyBjbGFzc2VzIGZvciBXZWJLaXQyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMAorCisgICAgICAgIEV4cG9y
dGVkIHN0YXRpYyBmdW5jdGlvbnMgZm9yIEdUSywgd2UgbmVlZCB0aGVtIHRvIGNyZWF0ZSBldmVu
dHMKKyAgICAgICAgaW4gV2ViS2l0Mi4KKworICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtS2V5
Ym9hcmRFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmtleUlkZW50aWZpZXJGb3JH
ZGtLZXlDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6d2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyk6CisKIDIwMTEtMDItMTUgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRl
bC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgK
aW5kZXggYWVlOTViNC4uZDY3YWYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKQEAgLTE3NSw2ICsxNzUsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50
KEdka0V2ZW50S2V5Kik7CiAgICAgICAgIEdka0V2ZW50S2V5KiBnZGtFdmVudEtleSgpIGNvbnN0
OworCisgICAgICAgIC8vIFVzZWQgYnkgV2ViS2l0MgorICAgICAgICBzdGF0aWMgU3RyaW5nIGtl
eUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGd1aW50IGtleUNvZGUpOworICAgICAgICBzdGF0aWMg
aW50IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQodW5zaWduZWQgaW50IGtleWNvZGUpOworICAg
ICAgICBzdGF0aWMgU3RyaW5nIHNpbmdsZUNoYXJhY3RlclN0cmluZyhndWludCB2YWwpOwogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShRVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9LZXlFdmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5
RXZlbnRHdGsuY3BwCmluZGV4IDVhMDM0ZDYuLjdiZmQ2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcApAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBGSVhNRTogVGhpcyBpcyBpbmNvbXBsZXRlLiAgV2Ugc2hvdWxkIGNoYW5n
ZSB0aGlzIHRvIG1pcnJvcgogLy8gbW9yZSBsaWtlIHdoYXQgRmlyZWZveCBkb2VzLCBhbmQgZ2Vu
ZXJhdGUgdGhlc2Ugc3dpdGNoIHN0YXRlbWVudHMKIC8vIGF0IGJ1aWxkIHRpbWUuCi1zdGF0aWMg
U3RyaW5nIGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGd1aW50IGtleUNvZGUpCitTdHJpbmcg
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShndWludCBr
ZXlDb2RlKQogewogICAgIHN3aXRjaCAoa2V5Q29kZSkgewogICAgICAgICBjYXNlIEdES19NZW51
OgpAQCAtMTQ5LDcgKzE0OSw3IEBAIHN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckdka0tl
eUNvZGUoZ3VpbnQga2V5Q29kZSkKICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgd2luZG93c0tleUNv
ZGVGb3JLZXlFdmVudCh1bnNpZ25lZCBpbnQga2V5Y29kZSkKK2ludCBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQodW5zaWduZWQgaW50IGtleWNvZGUpCiB7
CiAgICAgc3dpdGNoIChrZXljb2RlKSB7CiAgICAgICAgIGNhc2UgR0RLX0tQXzA6CkBAIC01MTYs
NyArNTE2LDcgQEAgc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVuc2lnbmVk
IGludCBrZXljb2RlKQogCiB9CiAKLXN0YXRpYyBTdHJpbmcgc2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KGd1aW50IHZhbCkKK1N0cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3Rl
clN0cmluZyhndWludCB2YWwpCiB7CiAgICAgc3dpdGNoICh2YWwpIHsKICAgICAgICAgY2FzZSBH
REtfSVNPX0VudGVyOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGM3MzQxMzcuLjI2Y2NmMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMi0xMCAgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90
b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0
bGFAbW90b3JvbGEuY29tPiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RL
XSBJbXBsZW1lbnQgV2ViRXZlbnRGYWN0b3J5LCBXZWJFcnJvcnMgY2xhc3NlcyBmb3IgV2ViS2l0
MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MTAK
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5LmNwcDogQWRkZWQuIGltcGxlbWVudGF0aW9uIGZvcgorICAgICAgICBXZWJNb3Vz
ZUV2ZW50LCBXZWJXaGVlbEV2ZW50LCBXZWJLZXlib2FyZEV2ZW50LgorICAgICAgICAqIFNoYXJl
ZC9ndGsvV2ViRXZlbnRGYWN0b3J5Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHA6IEFkZGVkLiBTdHViYmVkCisgICAgICAg
IGltcGxlbWVudGF0aW9uIGZvciBHVEsgcG9ydC4gWWV0IHRvIGltcGxlbWVudC4KKwogMjAxMS0w
Mi0xNSAgQW5kcmFzIEJlY3NpICA8YWJlY3NpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIENzYWJhIE9zenRyb2dvbsOhYy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXgg
Nzg3NGM2NC4uZjBmMTJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTE4Miw2ICsxODIsOCBA
QCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9V
cGRhdGVDaHVuay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvVXBkYXRlQ2h1bmsu
aCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJndW1lbnRDb2RlcnNHdGsu
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAgXAor
CVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmggXAogCVNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9JbWFnZU9wdGlvbnMuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0lt
bXV0YWJsZUFycmF5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0ltbXV0YWJsZUFycmF5
LmggXApAQCAtNTQxLDYgKzU0Myw3IEBAIGxpYldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmggXAogCVNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkNvbnRleHRNZW51Q2xpZW50R3RrLmNw
cCBcCisJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJy
b3JzR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9n
dGsvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJQb3B1cE1lbnVHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhN2U3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTAsMCArMSwyMTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJFdmVudEZh
Y3RvcnkuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
IldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdGF0aWMgaW5saW5lIGludCBjbGlja0NvdW50KEdka0V2ZW50KiBl
dmVudCkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtfQlVUVE9O
X1BSRVNTOgorICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtf
MkJVVFRPTl9QUkVTUzoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR0RLXzNCVVRUT05fUFJFU1M6CisgICAgICAgIHJldHVybiAzOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdES19NT1RJT05fTk9USUZZOgorICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxFQVNF
OgorICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1
cm4gMDsKK30KKworc3RhdGljIGlubGluZSBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVyc0Zv
ckV2ZW50KEdka0V2ZW50KiBldmVudCkKK3sKKyAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOwor
ICAgIEdka01vZGlmaWVyVHlwZSBzdGF0ZTsKKworICAgIGlmICghZ2RrX2V2ZW50X2dldF9zdGF0
ZShldmVudCwgJnN0YXRlKSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBp
ZiAoc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICBtb2RpZmllcnMgfD0gV2ViRXZl
bnQ6OkNvbnRyb2xLZXk7CisgICAgaWYgKChzdGF0ZSAmIEdES19TSElGVF9NQVNLKQorICAgICAg
ICB8fCAoKGV2ZW50LT50eXBlID09IEdES19LRVlfUFJFU1MgfHwgZXZlbnQtPnR5cGUgPT0gR0RL
X0tFWV9SRUxFQVNFKSAmJiAocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudEtleSo+KGV2ZW50KS0+
a2V5dmFsID09IEdES19LRVlfMzI3MF9CYWNrVGFiKSkpCisgICAgICAgIG1vZGlmaWVycyB8PSBX
ZWJFdmVudDo6U2hpZnRLZXk7CisgICAgaWYgKHN0YXRlICYgR0RLX01PRDFfTUFTSykKKyAgICAg
ICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpBbHRLZXk7CisgICAgaWYgKHN0YXRlICYgR0RLX01F
VEFfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpNZXRhS2V5OworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvbkZvckV2ZW50KEdka0V2
ZW50ICpldmVudCkKK3sKKyAgICB1bnNpZ25lZCBidXR0b24gPSAwOworCisgICAgc3dpdGNoIChl
dmVudC0+dHlwZSkgeworICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6CisgICAgICAgIGJ1dHRv
biA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOworICAgICAgICBpZiAoZXZlbnQtPm1vdGlvbi5z
dGF0ZSAmIEdES19CVVRUT04xX01BU0spCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2
ZW50OjpMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmIChldmVudC0+bW90aW9uLnN0YXRlICYg
R0RLX0JVVFRPTjJfTUFTSykKKyAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1p
ZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19C
VVRUT04zX01BU0spCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1
dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAgIGNh
c2UgR0RLXzJCVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAgICBj
YXNlIEdES19CVVRUT05fUkVMRUFTRToKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0b24uYnV0dG9u
ID09IDEpCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOwor
ICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAyKQorICAgICAgICAgICAg
YnV0dG9uID0gV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmIChl
dmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAzKQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VF
dmVudDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJNb3VzZUV2ZW50OjpCdXR0b24+KGJ1dHRvbik7Cit9CisKKworV2ViTW91c2VFdmVudCBXZWJF
dmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoR2RrRXZlbnQgKmV2ZW50KQoreworICAg
IGRvdWJsZSB0aW1lc3RhbXAgPSBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZlbnQpOworCisgICAgV2Vi
RXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgPSBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZp
ZXJzPigwKTsKKyAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gYnV0dG9uID0gYnV0dG9uRm9yRXZl
bnQoZXZlbnQpOworCisgICAgZG91YmxlIHgsIHksIHhSb290LCB5Um9vdDsKKyAgICBnZGtfZXZl
bnRfZ2V0X2Nvb3JkcyhldmVudCwgJngsICZ5KTsKKyAgICBnZGtfZXZlbnRfZ2V0X3Jvb3RfY29v
cmRzKGV2ZW50LCAmeFJvb3QsICZ5Um9vdCk7CisgICAgaW50IGNsaWNrY291bnQgPSBjbGlja0Nv
dW50KGV2ZW50KTsKKworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxXZWJF
dmVudDo6VHlwZT4oMCk7CisKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBH
REtfTU9USU9OX05PVElGWToKKyAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpNb3VzZU1vdmU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18y
QlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6CisgICAgICAgIHR5cGUg
PSBXZWJFdmVudDo6TW91c2VEb3duOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19CVVRU
T05fUkVMRUFTRToKKyAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpNb3VzZVVwOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0IDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgSW50UG9pbnQgZXZlbnRQb3NpdGlvbih4LCB5KTsKKyAgICBJbnRQb2ludCBldmVu
dEdsb2JhbFBvc2l0aW9uKHhSb290LCB5Um9vdCk7CisKKyAgICByZXR1cm4gV2ViTW91c2VFdmVu
dCh0eXBlLCBidXR0b24sIGV2ZW50UG9zaXRpb24sIGV2ZW50R2xvYmFsUG9zaXRpb24sIDAsIDAs
IDAsIGNsaWNrY291bnQsIG1vZGlmaWVycywgdGltZXN0YW1wKTsKK30KKworV2ViV2hlZWxFdmVu
dCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwgKmV2
ZW50KQoreworICAgIFdlYldoZWVsRXZlbnQ6OkdyYW51bGFyaXR5IGdyYW51bGFyaXR5ID0gV2Vi
V2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CisKKyAgICB1bnNpZ25lZCB0aW1l
c3RhbXAgPSBnZGtfZXZlbnRfZ2V0X3RpbWUocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2
ZW50KSk7CisKKyAgICBmbG9hdCBkZWx0YVggPSAwOworICAgIGZsb2F0IGRlbHRhWSA9IDA7Cisg
ICAgZmxvYXQgd2hlZWxUaWNrc1ggPSAwOworICAgIGZsb2F0IHdoZWVsVGlja3NZID0gMDsKKyAg
ICBmbG9hdCBzY3JvbGxiYXJQaXhlbHNQZXJMaW5lID0gNDA7CisgICAgZmxvYXQgZGVsdGEgPSAx
OworICAgIGRvdWJsZSB4LCB5LCB4Um9vdCwgeVJvb3Q7CisgICAgZ2RrX2V2ZW50X2dldF9jb29y
ZHMocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJngsICZ5KTsKKyAgICBnZGtf
ZXZlbnRfZ2V0X3Jvb3RfY29vcmRzKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCks
ICZ4Um9vdCwgJnlSb290KTsKKyAgICBJbnRQb2ludCBldmVudFBvc2l0aW9uKHgsIHkpOworICAg
IEludFBvaW50IGV2ZW50R2xvYmFsUG9zaXRpb24oeFJvb3QsIHlSb290KTsKKyAgICBXZWJFdmVu
dDo6TW9kaWZpZXJzIG1vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KHJlaW50ZXJwcmV0X2Nh
c3Q8R2RrRXZlbnQqPihldmVudCkpOworCisgICAgc3dpdGNoIChldmVudC0+ZGlyZWN0aW9uKSB7
CisgICAgY2FzZSBHREtfU0NST0xMX1VQOgorICAgICAgICBkZWx0YVkgPSBkZWx0YTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHREtfU0NST0xMX0RPV046CisgICAgICAgIGRlbHRhWSA9IC1k
ZWx0YTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfU0NST0xMX0xFRlQ6CisgICAgICAg
IGRlbHRhWCA9IGRlbHRhOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19TQ1JPTExfUklH
SFQ6CisgICAgICAgIGRlbHRhWCA9IC1kZWx0YTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgd2hlZWxUaWNrc1ggPSBkZWx0YVg7CisgICAgd2hlZWxUaWNrc1kgPSBkZWx0YVk7CisgICAg
ZGVsdGFYICo9IHNjcm9sbGJhclBpeGVsc1BlckxpbmU7CisgICAgZGVsdGFZICo9IHNjcm9sbGJh
clBpeGVsc1BlckxpbmU7CisgICAgRmxvYXRTaXplIGV2ZW50RGVsdGEoZGVsdGFYLCBkZWx0YVkp
OworICAgIEZsb2F0U2l6ZSBldmVudFdoZWVsVGlja3Mod2hlZWxUaWNrc1gsIHdoZWVsVGlja3NZ
KTsKKworICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgZXZlbnRQb3Np
dGlvbiwgZXZlbnRHbG9iYWxQb3NpdGlvbiwgZXZlbnREZWx0YSwgZXZlbnRXaGVlbFRpY2tzLCBn
cmFudWxhcml0eSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApOworfQorCitXZWJLZXlib2FyZEV2ZW50
IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSogZXZl
bnQpCit7CisgICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSA9IChldmVudC0+dHlwZSA9PSBHREtfS0VZ
X1JFTEVBU0UpID8gV2ViRXZlbnQ6OktleVVwIDogV2ViRXZlbnQ6OktleURvd247CisgICAgU3Ry
aW5nIHRleHQgPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyhl
dmVudC0+a2V5dmFsKTsKKyAgICBTdHJpbmcgdW5tb2RpZmllZFRleHQgPSBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVudC0+a2V5dmFsKTsKKyAgICBTdHJp
bmcga2V5SWRlbnRpZmllciA9IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZv
ckdka0tleUNvZGUoZXZlbnQtPmtleXZhbCk7CisgICAgaW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSA9IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6d2luZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVu
dC0+a2V5dmFsKTsKKyAgICBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUgPSBzdGF0aWNfY2FzdDxp
bnQ+KGV2ZW50LT5rZXl2YWwpOworICAgIGludCBtYWNDaGFyQ29kZSA9IDA7CisgICAgYm9vbCBh
dXRvUmVwZWF0ID0gZmFsc2U7CisgICAgYm9vbCBpc0tleXBhZCA9IGV2ZW50LT5rZXl2YWwgPj0g
R0RLX0tFWV9LUF9TcGFjZSAmJiBldmVudC0+a2V5dmFsIDw9IEdES19LRVlfS1BfOTsKKyAgICBi
b29sIGlzU3lzdGVtS2V5ID0gZmFsc2U7CisgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmll
cnMgPSBtb2RpZmllcnNGb3JFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQp
KTsKKyAgICB1bnNpZ25lZCB0aW1lc3RhbXAgPSBnZGtfZXZlbnRfZ2V0X3RpbWUocmVpbnRlcnBy
ZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7CisKKyAgICByZXR1cm4gV2ViS2V5Ym9hcmRFdmVu
dCh0eXBlLCB0ZXh0LCB1bm1vZGlmaWVkVGV4dCwga2V5SWRlbnRpZmllciwgd2luZG93c1ZpcnR1
YWxLZXlDb2RlLCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgbWFjQ2hhckNvZGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0b1JlcGVhdCwgaXNLZXlwYWQsIGlzU3lzdGVtS2V5LCBtb2Rp
ZmllcnMsIHRpbWVzdGFtcCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYTdmNmY4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0
aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRXZlbnRGYWN0b3J5X2gKKyNkZWZp
bmUgV2ViRXZlbnRGYWN0b3J5X2gKKworI2luY2x1ZGUgIldlYkV2ZW50LmgiCisKK3R5cGVkZWYg
dW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50U2Nyb2xs
IEdka0V2ZW50U2Nyb2xsOwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRXZlbnRGYWN0b3J5IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgV2ViTW91c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2ZW50KEdka0V2ZW50
Kik7CisgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChHZGtFdmVu
dFNjcm9sbCopOworICAgIHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJk
RXZlbnQoR2RrRXZlbnRLZXkqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gV2ViRXZlbnRGYWN0b3J5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZTI1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsu
Y3BwCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkVycm9ycy5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisjZGVmaW5lIFdlYlVSTEVycm9yRG9tYWluICAgIlVSTEVycm9yRG9tYWluIgorCitlbnVt
IHsKKyAgICBXZWJVUkxFcnJvclVua25vd24gPSAgICAgICAgICAgICAgICAgICAgICAgICAtMSwK
KyAgICBXZWJVUkxFcnJvckNhbmNlbGxlZCA9ICAgICAgICAgICAgICAgICAgICAgICAtOTk5LAor
ICAgIFdlYlVSTEVycm9yQmFkVVJMID0gICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDAwLAor
ICAgIFdlYlVSTEVycm9yVGltZWRPdXQgPSAgICAgICAgICAgICAgICAgICAgICAgIC0xMDAxLAor
ICAgIFdlYlVSTEVycm9yVW5zdXBwb3J0ZWRVUkwgPSAgICAgICAgICAgICAgICAgIC0xMDAyLAor
ICAgIFdlYlVSTEVycm9yQ2Fubm90RmluZEhvc3QgPSAgICAgICAgICAgICAgICAgIC0xMDAzLAor
ICAgIFdlYlVSTEVycm9yQ2Fubm90Q29ubmVjdFRvSG9zdCA9ICAgICAgICAgICAgIC0xMDA0LAor
ICAgIFdlYlVSTEVycm9yTmV0d29ya0Nvbm5lY3Rpb25Mb3N0ID0gICAgICAgICAgIC0xMDA1LAor
ICAgIFdlYlVSTEVycm9yRE5TTG9va3VwRmFpbGVkID0gICAgICAgICAgICAgICAgIC0xMDA2LAor
ICAgIFdlYlVSTEVycm9ySFRUUFRvb01hbnlSZWRpcmVjdHMgPSAgICAgICAgICAgIC0xMDA3LAor
ICAgIFdlYlVSTEVycm9yUmVzb3VyY2VVbmF2YWlsYWJsZSA9ICAgICAgICAgICAgIC0xMDA4LAor
ICAgIFdlYlVSTEVycm9yTm90Q29ubmVjdGVkVG9JbnRlcm5ldCA9ICAgICAgICAgIC0xMDA5LAor
ICAgIFdlYlVSTEVycm9yUmVkaXJlY3RUb05vbkV4aXN0ZW50TG9jYXRpb24gPSAgIC0xMDEwLAor
ICAgIFdlYlVSTEVycm9yQmFkU2VydmVyUmVzcG9uc2UgPSAgICAgICAgICAgICAgIC0xMDExLAor
ICAgIFdlYlVSTEVycm9yVXNlckNhbmNlbGxlZEF1dGhlbnRpY2F0aW9uID0gICAgIC0xMDEyLAor
ICAgIFdlYlVSTEVycm9yVXNlckF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSAgICAgIC0xMDEzLAor
ICAgIFdlYlVSTEVycm9yWmVyb0J5dGVSZXNvdXJjZSA9ICAgICAgICAgICAgICAgIC0xMDE0LAor
ICAgIFdlYlVSTEVycm9yRmlsZURvZXNOb3RFeGlzdCA9ICAgICAgICAgICAgICAgIC0xMTAwLAor
ICAgIFdlYlVSTEVycm9yRmlsZUlzRGlyZWN0b3J5ID0gICAgICAgICAgICAgICAgIC0xMTAxLAor
ICAgIFdlYlVSTEVycm9yTm9QZXJtaXNzaW9uc1RvUmVhZEZpbGUgPSAgICAgICAgIC0xMTAyLAor
ICAgIFdlYlVSTEVycm9yU2VjdXJlQ29ubmVjdGlvbkZhaWxlZCA9ICAgICAgICAgIC0xMjAwLAor
ICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVIYXNCYWREYXRlID0gICAgIC0xMjAxLAor
ICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVVbnRydXN0ZWQgPSAgICAgIC0xMjAyLAor
ICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVIYXNVbmtub3duUm9vdCA9IC0xMjAzLAor
ICAgIFdlYlVSTEVycm9yU2VydmVyQ2VydGlmaWNhdGVOb3RZZXRWYWxpZCA9ICAgIC0xMjA0LAor
ICAgIFdlYlVSTEVycm9yQ2xpZW50Q2VydGlmaWNhdGVSZWplY3RlZCA9ICAgICAgIC0xMjA1LAor
ICAgIFdlYlVSTEVycm9yQ2xpZW50Q2VydGlmaWNhdGVSZXF1aXJlZCA9ICAgICAgIC0xMjA2LAor
ICAgIFdlYlVSTEVycm9yQ2Fubm90TG9hZEZyb21OZXR3b3JrID0gICAgICAgICAgIC0yMDAwLAor
CisgICAgLy8gRG93bmxvYWQgYW5kIGZpbGUgSS9PIGVycm9ycworICAgIFdlYlVSTEVycm9yQ2Fu
bm90Q3JlYXRlRmlsZSA9ICAgICAgICAgICAgICAgIC0zMDAwLAorICAgIFdlYlVSTEVycm9yQ2Fu
bm90T3BlbkZpbGUgPSAgICAgICAgICAgICAgICAgIC0zMDAxLAorICAgIFdlYlVSTEVycm9yQ2Fu
bm90Q2xvc2VGaWxlID0gICAgICAgICAgICAgICAgIC0zMDAyLAorICAgIFdlYlVSTEVycm9yQ2Fu
bm90V3JpdGVUb0ZpbGUgPSAgICAgICAgICAgICAgIC0zMDAzLAorICAgIFdlYlVSTEVycm9yQ2Fu
bm90UmVtb3ZlRmlsZSA9ICAgICAgICAgICAgICAgIC0zMDA0LAorICAgIFdlYlVSTEVycm9yQ2Fu
bm90TW92ZUZpbGUgPSAgICAgICAgICAgICAgICAgIC0zMDA1LAorICAgIFdlYlVSTEVycm9yRG93
bmxvYWREZWNvZGluZ0ZhaWxlZE1pZFN0cmVhbSA9IC0zMDA2LAorICAgIFdlYlVSTEVycm9yRG93
bmxvYWREZWNvZGluZ0ZhaWxlZFRvQ29tcGxldGUgPS0zMDA3LAorfTsKKworI2RlZmluZSBXZWJL
aXRFcnJvckRvbWFpbiAgICJXZWJLaXRFcnJvckRvbWFpbiIKKworZW51bSB7CisgICAgV2ViS2l0
RXJyb3JDYW5ub3RTaG93TUlNRVR5cGUgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAw
LAorICAgIFdlYktpdEVycm9yQ2Fubm90U2hvd1VSTCA9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEwMSwKKyAgICBXZWJLaXRFcnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xp
Y3lDaGFuZ2UgPSAgICAgICAgICAgICAxMDIsCisgICAgV2ViS2l0RXJyb3JDYW5ub3RVc2VSZXN0
cmljdGVkUG9ydCA9ICAgICAgICAgICAgICAgICAgICAgICAgMTAzLAorfTsKKworZW51bSB7Cisg
ICAgV2ViS2l0RXJyb3JDYW5ub3RGaW5kUGx1Z0luID0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMjAwLAorICAgIFdlYktpdEVycm9yQ2Fubm90TG9hZFBsdWdJbiA9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDIwMSwKKyAgICBXZWJLaXRFcnJvckphdmFVbmF2YWlsYWJsZSA9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDIsCit9OworCitlbnVtIHsKKyAgICBX
ZWJLaXRFcnJvckdlb2xvY2F0aW9uTG9jYXRpb25Vbmtub3duICA9ICAgICAgICAgICAgICAgICAg
ICAzMDAsCit9OworCisjZGVmaW5lIFdlYktpdEVycm9yTUlNRVR5cGVLZXkgICAiV2ViS2l0RXJy
b3JNSU1FVHlwZUtleSIKKyNkZWZpbmUgV2ViS2l0RXJyb3JQbHVnSW5OYW1lS2V5ICAgIldlYktp
dEVycm9yUGx1Z0luTmFtZUtleSIKKyNkZWZpbmUgV2ViS2l0RXJyb3JQbHVnSW5QYWdlVVJMU3Ry
aW5nS2V5ICAgIldlYktpdEVycm9yUGx1Z0luUGFnZVVSTFN0cmluZ0tleSIKKworI2RlZmluZSBX
ZWJQT1NJWEVycm9yRG9tYWluICAgIk5TUE9TSVhFcnJvckRvbWFpbiIKKyNkZWZpbmUgV2ViUE9T
SVhFcnJvckVDT05OUkVTRVQgNTQKKworUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3Io
U3RyaW5nKFdlYlVSTEVycm9yRG9tYWluKSwgV2ViVVJMRXJyb3JDYW5jZWxsZWQsIHJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsKK30KKworUmVzb3VyY2VFcnJvciBibG9ja2VkRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJj
ZUVycm9yKFN0cmluZyhXZWJLaXRFcnJvckRvbWFpbiksIFdlYktpdEVycm9yQ2Fubm90VXNlUmVz
dHJpY3RlZFBvcnQsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsKK30KKworUmVz
b3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKFN0cmluZyhXZWJLaXRFcnJvckRvbWFp
biksIFdlYktpdEVycm9yQ2Fubm90U2hvd1VSTCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgU3Ry
aW5nKCkpOworfQorCitSZXNvdXJjZUVycm9yIGludGVycnVwdEZvclBvbGljeUNoYW5nZUVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VF
cnJvcihTdHJpbmcoV2ViS2l0RXJyb3JEb21haW4pLCBXZWJLaXRFcnJvckZyYW1lTG9hZEludGVy
cnVwdGVkQnlQb2xpY3lDaGFuZ2UsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsK
K30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworfQor
CitSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworfQorCitSZXNv
dXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="74142"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82715</attachid>
            <date>2011-02-16 16:04:43 -0800</date>
            <delta_ts>2011-02-16 16:19:21 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>factory.patch</filename>
            <type>text/plain</type>
            <size>21548</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IGE5NDI4NTFmNTZkOTljZTE2N2RiYzRhYmQ3YTY5NmUzM2VlNDQ0NWUKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MjoxMjo1NiAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMCBBbXJ1dGggUmFqIDxhbXJ1dGhyYWpA
bW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgPHJhdmkua2FzaWJo
YXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5j
b20+CiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAg
ICAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYkV2ZW50RmFjdG9yeSwgV2ViRXJyb3JzIGNsYXNz
ZXMgZm9yIFdlYktpdDIKICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ4NTEwCiAgICAKICAgICAgICAgICAgRXhwb3J0ZWQgc3RhdGljIGZ1bmN0aW9u
cyBmb3IgR1RLLCB3ZSBuZWVkIHRoZW0gdG8gY3JlYXRlIGV2ZW50cwogICAgICAgICAgICBpbiBX
ZWJLaXQyLgogICAgCiAgICAgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50
Lmg6CiAgICAgICAgICAgICogcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcDoKICAgICAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tl
eUNvZGUpOgogICAgICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5k
b3dzS2V5Q29kZUZvcktleUNvZGUpOgogICAgICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgogICAgCiAgICAyMDExLTAyLTEwICAg
QW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIFBoYW5lZW5kcmEg
S2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8g
Ry4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgogICAgCiAgICAgICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJFdmVu
dEZhY3RvcnksIFdlYkVycm9ycyBjbGFzc2VzIGZvciBXZWJLaXQyCiAgICAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMAogICAgCiAgICAgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CiAgICAgICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3Rv
cnkuY3BwOiBBZGRlZC4gaW1wbGVtZW50YXRpb24gZm9yCiAgICAgICAgICAgIFdlYk1vdXNlRXZl
bnQsIFdlYldoZWVsRXZlbnQsIFdlYktleWJvYXJkRXZlbnQuCiAgICAgICAgICAgICogU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuaDogQWRkZWQuCiAgICAgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcDogQWRkZWQuIFN0dWJiZWQKICAgICAg
ICAgICAgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBwb3J0LgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMGU0ZTcy
Li44Mzk1NDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMTAgICBBbXJ1
dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNvbT4gYW5kIFJhdmkgUGhhbmVlbmRyYSBLYXNp
YmhhdGxhICA8cmF2aS5rYXNpYmhhdGxhQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWphbmRybyBHLiBD
YXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYkV2ZW50RmFjdG9yeSwgV2ViRXJy
b3JzIGNsYXNzZXMgZm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ4NTEwCisKKyAgICAgICAgRXhwb3J0ZWQgc3RhdGljIGZ1bmN0aW9u
cyBmb3IgR1RLLCB3ZSBuZWVkIHRoZW0gdG8gY3JlYXRlIGV2ZW50cworICAgICAgICBpbiBXZWJL
aXQyLgorCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvcktleUNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5nbGVDaGFy
YWN0ZXJTdHJpbmcpOgorCiAyMDExLTAyLTE1ICBKb2huIFN1bGxpdmFuICA8c3VsbGl2YW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAppbmRleCBhZWU5NWI0
Li44NzRkYjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtl
eWJvYXJkRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaApAQCAtMTc1LDYgKzE3NSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYg
UExBVEZPUk0oR1RLKQogICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkq
KTsKICAgICAgICAgR2RrRXZlbnRLZXkqIGdka0V2ZW50S2V5KCkgY29uc3Q7CisKKyAgICAgICAg
Ly8gVXNlZCBieSBXZWJLaXQyCisgICAgICAgIHN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZv
ckdka0tleUNvZGUoZ3VpbnQpOworICAgICAgICBzdGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9y
S2V5Q29kZSh1bnNpZ25lZCBpbnQpOworICAgICAgICBzdGF0aWMgU3RyaW5nIHNpbmdsZUNoYXJh
Y3RlclN0cmluZyhndWludCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHAKaW5kZXggNWEwMzRkNi4uNzUyZDkz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3BwCkBAIC00
Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZJWE1FOiBUaGlzIGlzIGluY29t
cGxldGUuICBXZSBzaG91bGQgY2hhbmdlIHRoaXMgdG8gbWlycm9yCiAvLyBtb3JlIGxpa2Ugd2hh
dCBGaXJlZm94IGRvZXMsIGFuZCBnZW5lcmF0ZSB0aGVzZSBzd2l0Y2ggc3RhdGVtZW50cwogLy8g
YXQgYnVpbGQgdGltZS4KLXN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckdka0tleUNvZGUo
Z3VpbnQga2V5Q29kZSkKK1N0cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmtleUlkZW50aWZp
ZXJGb3JHZGtLZXlDb2RlKGd1aW50IGtleUNvZGUpCiB7CiAgICAgc3dpdGNoIChrZXlDb2RlKSB7
CiAgICAgICAgIGNhc2UgR0RLX01lbnU6CkBAIC0xNDksNyArMTQ5LDcgQEAgc3RhdGljIFN0cmlu
ZyBrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShndWludCBrZXlDb2RlKQogICAgIH0KIH0KIAot
c3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVuc2lnbmVkIGludCBrZXljb2Rl
KQoraW50IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6d2luZG93c0tleUNvZGVGb3JLZXlDb2RlKHVu
c2lnbmVkIGludCBrZXljb2RlKQogewogICAgIHN3aXRjaCAoa2V5Y29kZSkgewogICAgICAgICBj
YXNlIEdES19LUF8wOgpAQCAtNTE2LDcgKzUxNiw3IEBAIHN0YXRpYyBpbnQgd2luZG93c0tleUNv
ZGVGb3JLZXlFdmVudCh1bnNpZ25lZCBpbnQga2V5Y29kZSkKIAogfQogCi1zdGF0aWMgU3RyaW5n
IHNpbmdsZUNoYXJhY3RlclN0cmluZyhndWludCB2YWwpCitTdHJpbmcgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ3VpbnQgdmFsKQogewogICAgIHN3aXRjaCAo
dmFsKSB7CiAgICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKQEAgLTU1Miw3ICs1NTIsNyBAQCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSog
ZXZlbnQpCiAgICAgLCBtX3VubW9kaWZpZWRUZXh0KHNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVu
dC0+a2V5dmFsKSkKICAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVyRm9yR2RrS2V5
Q29kZShldmVudC0+a2V5dmFsKSkKICAgICAsIG1fYXV0b1JlcGVhdChmYWxzZSkKLSAgICAsIG1f
d2luZG93c1ZpcnR1YWxLZXlDb2RlKHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoZXZlbnQtPmtl
eXZhbCkpCisgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3aW5kb3dzS2V5Q29kZUZvcktl
eUNvZGUoZXZlbnQtPmtleXZhbCkpCiAgICAgLCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlKGV2ZW50
LT5rZXl2YWwpCiAgICAgLCBtX2lzS2V5cGFkKGV2ZW50LT5rZXl2YWwgPj0gR0RLX0tQX1NwYWNl
ICYmIGV2ZW50LT5rZXl2YWwgPD0gR0RLX0tQXzkpCiAgICAgLCBtX3NoaWZ0S2V5KChldmVudC0+
c3RhdGUgJiBHREtfU0hJRlRfTUFTSykgfHwgKGV2ZW50LT5rZXl2YWwgPT0gR0RLXzMyNzBfQmFj
a1RhYikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggODJlNmU1OC4uYmIzZTUwYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDExLTAyLTEwICAgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5j
b20+IGFuZCBSYXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rv
cm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCBXZWJFdmVudEZhY3RvcnksIFdlYkVycm9ycyBjbGFzc2VzIGZvciBXZWJLaXQyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMAorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3Rv
cnkuY3BwOiBBZGRlZC4gaW1wbGVtZW50YXRpb24gZm9yCisgICAgICAgIFdlYk1vdXNlRXZlbnQs
IFdlYldoZWVsRXZlbnQsIFdlYktleWJvYXJkRXZlbnQuCisgICAgICAgICogU2hhcmVkL2d0ay9X
ZWJFdmVudEZhY3RvcnkuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcDogQWRkZWQuIFN0dWJiZWQKKyAgICAgICAgaW1wbGVt
ZW50YXRpb24gZm9yIEdUSyBwb3J0LgorCiAyMDExLTAyLTE1ICBBbmRlcnMgQ2FybHNzb24gIDxh
bmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUuYW0KaW5kZXggNzg3NGM2NC4uOTE4N2VjZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0KQEAgLTY5LDYgKzY5LDggQEAgbm9kaXN0X2xpYldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAkk
KHdlYmtpdDJfYnVpbHRfc291cmNlcykKIAogbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAorCVNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRlcnJvci5oIFwKKwlTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZXJyb3IuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL0FyZ3VtZW50Q29kZXIuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9B
cmd1bWVudENvZGVycy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3Vt
ZW50RGVjb2Rlci5jcHAgXApAQCAtMTgyLDYgKzE4NCw4IEBAIGxpYldlYktpdDJfbGFfU09VUkNF
UyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0ZUNodW5rLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL1dlYkNvcmVBcmd1bWVudENvZGVyc0d0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcCBcCisJU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0ltYWdlT3B0
aW9ucy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW1tdXRhYmxlQXJyYXkuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW1tdXRhYmxlQXJyYXkuaCBcCkBAIC01NDEsNiArNTQ1LDcg
QEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuaCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9ndGsvV2ViQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0LmggXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYlBvcHVwTWVudUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBcCkBAIC02MDksNiArNjE0LDcgQEAgbGliV2Vi
S2l0Ml9sYV9DUFBGTEFHUyA9IFwKIAktZm5vLXN0cmljdC1hbGlhc2luZyBcCiAJJChnbG9iYWxf
Y3BwZmxhZ3MpIFwKIAktaW5jbHVkZSAkKHNyY2RpcikvU291cmNlL1dlYktpdDIvV2ViS2l0MlBy
ZWZpeC5oIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ayBcCiAJLUkkKHNyY2Rpcikv
U291cmNlL1dlYktpdDIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL2d0ayBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYktpdDIvUGxhdGZvcm0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjNhMTZkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKKworI2luY2x1
ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2lu
Y2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2lu
Y2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGlubGluZSBpbnQgY2xpY2tDb3VudChHZGtFdmVu
dCogZXZlbnQpCit7CisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNhc2UgR0RLX0JV
VFRPTl9QUkVTUzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R0RLXzJCVVRUT05fUFJFU1M6CisgICAgICAgIHJldHVybiAyOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKKyAgICBjYXNlIEdES19CVVRUT05fUkVM
RUFTRToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAg
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmll
cnNGb3JFdmVudChHZGtFdmVudCogZXZlbnQpCit7CisgICAgdW5zaWduZWQgbW9kaWZpZXJzID0g
MDsKKyAgICBHZGtNb2RpZmllclR5cGUgc3RhdGU7CisKKyAgICBpZiAoIWdka19ldmVudF9nZXRf
c3RhdGUoZXZlbnQsICZzdGF0ZSkpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgaWYgKHN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdl
YkV2ZW50OjpDb250cm9sS2V5OworICAgIGlmICgoc3RhdGUgJiBHREtfU0hJRlRfTUFTSykKKyAg
ICAgICAgfHwgKChldmVudC0+dHlwZSA9PSBHREtfS0VZX1BSRVNTIHx8IGV2ZW50LT50eXBlID09
IEdES19LRVlfUkVMRUFTRSkgJiYgKGV2ZW50LT5rZXkua2V5dmFsID09IEdES19LRVlfMzI3MF9C
YWNrVGFiKSkpCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6U2hpZnRLZXk7CisgICAg
aWYgKHN0YXRlICYgR0RLX01PRDFfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50
OjpBbHRLZXk7CisgICAgaWYgKHN0YXRlICYgR0RLX01FVEFfTUFTSykKKyAgICAgICAgbW9kaWZp
ZXJzIHw9IFdlYkV2ZW50OjpNZXRhS2V5OworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkV2
ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViTW91c2VF
dmVudDo6QnV0dG9uIGJ1dHRvbkZvckV2ZW50KEdka0V2ZW50ICpldmVudCkKK3sKKyAgICB1bnNp
Z25lZCBidXR0b24gPSAwOworCisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNhc2Ug
R0RLX01PVElPTl9OT1RJRlk6CisgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0
dG9uOworICAgICAgICBpZiAoZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19CVVRUT04xX01BU0sp
CisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOworICAgICAg
ICBlbHNlIGlmIChldmVudC0+bW90aW9uLnN0YXRlICYgR0RLX0JVVFRPTjJfTUFTSykKKyAgICAg
ICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxz
ZSBpZiAoZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19CVVRUT04zX01BU0spCisgICAgICAgICAg
ICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6Cisg
ICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToK
KyAgICAgICAgaWYgKGV2ZW50LT5idXR0b24uYnV0dG9uID09IDEpCisgICAgICAgICAgICBidXR0
b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmIChldmVudC0+
YnV0dG9uLmJ1dHRvbiA9PSAyKQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6
TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAz
KQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJNb3VzZUV2ZW50OjpCdXR0b24+KGJ1
dHRvbik7Cit9CisKK1dlYk1vdXNlRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3Vz
ZUV2ZW50KEdka0V2ZW50ICpldmVudCkKK3sKKyAgICBkb3VibGUgdGltZXN0YW1wID0gZ2RrX2V2
ZW50X2dldF90aW1lKGV2ZW50KTsKKworICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJz
ID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4oMCk7CisgICAgV2ViTW91c2VFdmVu
dDo6QnV0dG9uIGJ1dHRvbiA9IGJ1dHRvbkZvckV2ZW50KGV2ZW50KTsKKworICAgIGRvdWJsZSB4
LCB5LCB4Um9vdCwgeVJvb3Q7CisgICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAm
eSk7CisgICAgZ2RrX2V2ZW50X2dldF9yb290X2Nvb3JkcyhldmVudCwgJnhSb290LCAmeVJvb3Qp
OworICAgIEludFBvaW50IHBvc2l0aW9uKHgsIHkpOworICAgIEludFBvaW50IGdsb2JhbFBvc2l0
aW9uKHhSb290LCB5Um9vdCk7CisgICAgaW50IGNsaWNrY291bnQgPSBjbGlja0NvdW50KGV2ZW50
KTsKKworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxXZWJFdmVudDo6VHlw
ZT4oMCk7CisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNhc2UgR0RLX01PVElPTl9O
T1RJRlk6CisgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VNb3ZlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfMkJVVFRPTl9QUkVT
UzoKKyAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6
Ok1vdXNlRG93bjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6
CisgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VVcDsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdCA6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJl
dHVybiBXZWJNb3VzZUV2ZW50KHR5cGUsIGJ1dHRvbiwgcG9zaXRpb24sIGdsb2JhbFBvc2l0aW9u
LCAwLCAwLCAwLCBjbGlja2NvdW50LCBtb2RpZmllcnMsIHRpbWVzdGFtcCk7Cit9CisKK1dlYldo
ZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KEdka0V2ZW50U2Ny
b2xsICpldmVudCkKK3sKKyAgICBXZWJXaGVlbEV2ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0
eSA9IFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OworCisgICAgdW5zaWdu
ZWQgdGltZXN0YW1wID0gZ2RrX2V2ZW50X2dldF90aW1lKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZl
bnQqPihldmVudCkpOworCisgICAgZG91YmxlIHgsIHksIHhSb290LCB5Um9vdDsKKyAgICBnZGtf
ZXZlbnRfZ2V0X2Nvb3JkcyhyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAmeCwg
JnkpOworICAgIGdka19ldmVudF9nZXRfcm9vdF9jb29yZHMocmVpbnRlcnByZXRfY2FzdDxHZGtF
dmVudCo+KGV2ZW50KSwgJnhSb290LCAmeVJvb3QpOworICAgIEludFBvaW50IHBvc2l0aW9uKHgs
IHkpOworICAgIEludFBvaW50IGdsb2JhbFBvc2l0aW9uKHhSb290LCB5Um9vdCk7CisgICAgV2Vi
RXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChyZWludGVycHJl
dF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKKworICAgIEZsb2F0U2l6ZSB3aGVlbFRpY2tzOwor
ICAgIHN3aXRjaCAoZXZlbnQtPmRpcmVjdGlvbikgeworICAgIGNhc2UgR0RLX1NDUk9MTF9VUDoK
KyAgICAgICAgd2hlZWxUaWNrcyA9IEZsb2F0U2l6ZSgwLCAxKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHREtfU0NST0xMX0RPV046CisgICAgICAgIHdoZWVsVGlja3MgPSBGbG9hdFNpemUo
MCwgLTEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19TQ1JPTExfTEVGVDoKKyAgICAg
ICAgd2hlZWxUaWNrcyA9IEZsb2F0U2l6ZSgxLCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHREtfU0NST0xMX1JJR0hUOgorICAgICAgICB3aGVlbFRpY2tzID0gRmxvYXRTaXplKC0xLCAw
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gRklYTUU6IHJldHJpZXZlIHRoZSB1
c2VyIHNldHRpbmcgZm9yIHRoZSBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsIG9uIGVhY2ggd2hl
ZWwgZXZlbnQKKyAgICBmbG9hdCBzdGVwID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgRmxvYXRTaXplIGRlbHRhKHdoZWVsVGlja3Mud2lk
dGgoKSpzdGVwLCB3aGVlbFRpY2tzLmhlaWdodCgpKnN0ZXApOworCisgICAgcmV0dXJuIFdlYldo
ZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBwb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIGRlbHRh
LCB3aGVlbFRpY2tzLCBncmFudWxhcml0eSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApOworfQorCitX
ZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChH
ZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSA9IChldmVudC0+
dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpID8gV2ViRXZlbnQ6OktleVVwIDogV2ViRXZlbnQ6Oktl
eURvd247CisgICAgU3RyaW5nIHRleHQgPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNo
YXJhY3RlclN0cmluZyhldmVudC0+a2V5dmFsKTsKKyAgICBTdHJpbmcgdW5tb2RpZmllZFRleHQg
PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVudC0+a2V5
dmFsKTsKKyAgICBTdHJpbmcga2V5SWRlbnRpZmllciA9IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoZXZlbnQtPmtleXZhbCk7CisgICAgaW50IHdpbmRv
d3NWaXJ0dWFsS2V5Q29kZSA9IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6d2luZG93c0tleUNvZGVG
b3JLZXlDb2RlKGV2ZW50LT5rZXl2YWwpOworICAgIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSA9
IHN0YXRpY19jYXN0PGludD4oZXZlbnQtPmtleXZhbCk7CisgICAgaW50IG1hY0NoYXJDb2RlID0g
MDsKKyAgICBib29sIGF1dG9SZXBlYXQgPSBmYWxzZTsKKyAgICBib29sIGlzS2V5cGFkID0gZXZl
bnQtPmtleXZhbCA+PSBHREtfS0VZX0tQX1NwYWNlICYmIGV2ZW50LT5rZXl2YWwgPD0gR0RLX0tF
WV9LUF85OworICAgIGJvb2wgaXNTeXN0ZW1LZXkgPSBmYWxzZTsKKyAgICBXZWJFdmVudDo6TW9k
aWZpZXJzIG1vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2Rr
RXZlbnQqPihldmVudCkpOworICAgIHVuc2lnbmVkIHRpbWVzdGFtcCA9IGdka19ldmVudF9nZXRf
dGltZShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKKworICAgIHJldHVybiBX
ZWJLZXlib2FyZEV2ZW50KHR5cGUsIHRleHQsIHVubW9kaWZpZWRUZXh0LCBrZXlJZGVudGlmaWVy
LCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBtYWNDaGFyQ29k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUmVwZWF0LCBpc0tleXBhZCwgaXNT
eXN0ZW1LZXksIG1vZGlmaWVycywgdGltZXN0YW1wKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9y
eS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Y2ZjhhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaApAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJFdmVudEZh
Y3RvcnlfaAorI2RlZmluZSBXZWJFdmVudEZhY3RvcnlfaAorCisjaW5jbHVkZSAiV2ViRXZlbnQu
aCIKKwordHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBf
R2RrRXZlbnRTY3JvbGwgR2RrRXZlbnRTY3JvbGw7Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRL
ZXkgR2RrRXZlbnRLZXk7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJFdmVudEZh
Y3RvcnkgeworcHVibGljOgorICAgIHN0YXRpYyBXZWJNb3VzZUV2ZW50IGNyZWF0ZVdlYk1vdXNl
RXZlbnQoR2RrRXZlbnQqKTsKKyAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVl
bEV2ZW50KEdka0V2ZW50U2Nyb2xsKik7CisgICAgc3RhdGljIFdlYktleWJvYXJkRXZlbnQgY3Jl
YXRlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSopOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBXZWJFdmVudEZhY3RvcnlfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxM2ViNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYkVycm9yc0d0ay5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkVycm9ycy5oIgorCisjaW5jbHVkZSA8Z2xpYi9naTE4
bi1saWIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRlcnJv
ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1Jlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFdFQktJ
VF9ORVRXT1JLX0VSUk9SKSwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVELAorICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIkxvYWQgcmVxdWVz
dCBjYW5jZWxsZWQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihnX3F1
YXJrX3RvX3N0cmluZyhXRUJLSVRfUE9MSUNZX0VSUk9SKSwgV0VCS0lUX1BPTElDWV9FUlJPUl9D
QU5OT1RfVVNFX1JFU1RSSUNURURfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0LnVybCgpLnN0cmluZygpLCBfKCJOb3QgYWxsb3dlZCB0byB1c2UgcmVzdHJpY3RlZCBuZXR3
b3JrIHBvcnQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihn
X3F1YXJrX3RvX3N0cmluZyhXRUJLSVRfUE9MSUNZX0VSUk9SKSwgV0VCS0lUX1BPTElDWV9FUlJP
Ul9DQU5OT1RfU0hPV19VUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51cmwo
KS5zdHJpbmcoKSwgXygiVVJMIGNhbm5vdCBiZSBzaG93biIpKTsKK30KKworUmVzb3VyY2VFcnJv
ciBpbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoV0VC
S0lUX1BPTElDWV9FUlJPUiksIFdFQktJVF9QT0xJQ1lfRVJST1JfRlJBTUVfTE9BRF9JTlRFUlJV
UFRFRF9CWV9QT0xJQ1lfQ0hBTkdFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCksIF8oIkZyYW1lIGxvYWQgd2FzIGludGVycnVwdGVkIikpOworfQorCitS
ZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3Ry
aW5nKFdFQktJVF9QT0xJQ1lfRVJST1IpLCBXRUJLSVRfUE9MSUNZX0VSUk9SX0NBTk5PVF9TSE9X
X01JTUVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS51cmwoKS5zdHJp
bmcoKSwgXygiQ29udGVudCB3aXRoIHRoZSBzcGVjaWZpZWQgTUlNRSB0eXBlIGNhbm5vdCBiZSBz
aG93biIpKTsKK30KKworUmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3Io
Z19xdWFya190b19zdHJpbmcoV0VCS0lUX05FVFdPUktfRVJST1IpLCBXRUJLSVRfTkVUV09SS19F
UlJPUl9GSUxFX0RPRVNfTk9UX0VYSVNULAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlLnVybCgpLnN0cmluZygpLCBfKCJGaWxlIGRvZXMgbm90IGV4aXN0IikpOworfQorCitSZXNv
dXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJp
bmcoV0VCS0lUX1BMVUdJTl9FUlJPUiksIFdFQktJVF9QTFVHSU5fRVJST1JfV0lMTF9IQU5ETEVf
TE9BRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwg
XygiUGx1Z2luIHdpbGwgaGFuZGxlIGxvYWQiKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82717</attachid>
            <date>2011-02-16 16:12:09 -0800</date>
            <delta_ts>2011-02-22 01:13:37 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>factory.patch</filename>
            <type>text/plain</type>
            <size>21550</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDhlODZmMmVjZmU1MTlkYmM5NDM0YzlkNTQ5NGNkYWVhZGI0ZDM0MmEKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MjoxMjo1NiAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMCBBbXJ1dGggUmFqIDxhbXJ1dGhyYWpA
bW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgPHJhdmkua2FzaWJo
YXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5j
b20+CiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAg
ICAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYkV2ZW50RmFjdG9yeSwgV2ViRXJyb3JzIGNsYXNz
ZXMgZm9yIFdlYktpdDIKICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ4NTEwCiAgICAKICAgICAgICAgICAgRXhwb3J0ZWQgc3RhdGljIGZ1bmN0aW9u
cyBmb3IgR1RLLCB3ZSBuZWVkIHRoZW0gdG8gY3JlYXRlIGV2ZW50cwogICAgICAgICAgICBpbiBX
ZWJLaXQyLgogICAgCiAgICAgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50
Lmg6CiAgICAgICAgICAgICogcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcDoKICAgICAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tl
eUNvZGUpOgogICAgICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5k
b3dzS2V5Q29kZUZvcktleUNvZGUpOgogICAgICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgogICAgCiAgICAyMDExLTAyLTEwICAg
QW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIFBoYW5lZW5kcmEg
S2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8g
Ry4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgogICAgCiAgICAgICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJFdmVu
dEZhY3RvcnksIFdlYkVycm9ycyBjbGFzc2VzIGZvciBXZWJLaXQyCiAgICAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMAogICAgCiAgICAgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CiAgICAgICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3Rv
cnkuY3BwOiBBZGRlZC4gaW1wbGVtZW50YXRpb24gZm9yCiAgICAgICAgICAgIFdlYk1vdXNlRXZl
bnQsIFdlYldoZWVsRXZlbnQsIFdlYktleWJvYXJkRXZlbnQuCiAgICAgICAgICAgICogU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuaDogQWRkZWQuCiAgICAgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcDogQWRkZWQuIFN0dWJiZWQKICAgICAg
ICAgICAgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBwb3J0LgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMGU0ZTcy
Li44Mzk1NDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMTAgICBBbXJ1
dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNvbT4gYW5kIFJhdmkgUGhhbmVlbmRyYSBLYXNp
YmhhdGxhICA8cmF2aS5rYXNpYmhhdGxhQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWphbmRybyBHLiBD
YXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYkV2ZW50RmFjdG9yeSwgV2ViRXJy
b3JzIGNsYXNzZXMgZm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ4NTEwCisKKyAgICAgICAgRXhwb3J0ZWQgc3RhdGljIGZ1bmN0aW9u
cyBmb3IgR1RLLCB3ZSBuZWVkIHRoZW0gdG8gY3JlYXRlIGV2ZW50cworICAgICAgICBpbiBXZWJL
aXQyLgorCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvcktleUNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5nbGVDaGFy
YWN0ZXJTdHJpbmcpOgorCiAyMDExLTAyLTE1ICBKb2huIFN1bGxpdmFuICA8c3VsbGl2YW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAppbmRleCBhZWU5NWI0
Li44NzRkYjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtl
eWJvYXJkRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaApAQCAtMTc1LDYgKzE3NSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYg
UExBVEZPUk0oR1RLKQogICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkq
KTsKICAgICAgICAgR2RrRXZlbnRLZXkqIGdka0V2ZW50S2V5KCkgY29uc3Q7CisKKyAgICAgICAg
Ly8gVXNlZCBieSBXZWJLaXQyCisgICAgICAgIHN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZv
ckdka0tleUNvZGUoZ3VpbnQpOworICAgICAgICBzdGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9y
S2V5Q29kZSh1bnNpZ25lZCBpbnQpOworICAgICAgICBzdGF0aWMgU3RyaW5nIHNpbmdsZUNoYXJh
Y3RlclN0cmluZyhndWludCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHAKaW5kZXggNWEwMzRkNi4uNzUyZDkz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3BwCkBAIC00
Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZJWE1FOiBUaGlzIGlzIGluY29t
cGxldGUuICBXZSBzaG91bGQgY2hhbmdlIHRoaXMgdG8gbWlycm9yCiAvLyBtb3JlIGxpa2Ugd2hh
dCBGaXJlZm94IGRvZXMsIGFuZCBnZW5lcmF0ZSB0aGVzZSBzd2l0Y2ggc3RhdGVtZW50cwogLy8g
YXQgYnVpbGQgdGltZS4KLXN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckdka0tleUNvZGUo
Z3VpbnQga2V5Q29kZSkKK1N0cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmtleUlkZW50aWZp
ZXJGb3JHZGtLZXlDb2RlKGd1aW50IGtleUNvZGUpCiB7CiAgICAgc3dpdGNoIChrZXlDb2RlKSB7
CiAgICAgICAgIGNhc2UgR0RLX01lbnU6CkBAIC0xNDksNyArMTQ5LDcgQEAgc3RhdGljIFN0cmlu
ZyBrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShndWludCBrZXlDb2RlKQogICAgIH0KIH0KIAot
c3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVuc2lnbmVkIGludCBrZXljb2Rl
KQoraW50IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6d2luZG93c0tleUNvZGVGb3JLZXlDb2RlKHVu
c2lnbmVkIGludCBrZXljb2RlKQogewogICAgIHN3aXRjaCAoa2V5Y29kZSkgewogICAgICAgICBj
YXNlIEdES19LUF8wOgpAQCAtNTE2LDcgKzUxNiw3IEBAIHN0YXRpYyBpbnQgd2luZG93c0tleUNv
ZGVGb3JLZXlFdmVudCh1bnNpZ25lZCBpbnQga2V5Y29kZSkKIAogfQogCi1zdGF0aWMgU3RyaW5n
IHNpbmdsZUNoYXJhY3RlclN0cmluZyhndWludCB2YWwpCitTdHJpbmcgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ3VpbnQgdmFsKQogewogICAgIHN3aXRjaCAo
dmFsKSB7CiAgICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKQEAgLTU1Miw3ICs1NTIsNyBAQCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSog
ZXZlbnQpCiAgICAgLCBtX3VubW9kaWZpZWRUZXh0KHNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVu
dC0+a2V5dmFsKSkKICAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVyRm9yR2RrS2V5
Q29kZShldmVudC0+a2V5dmFsKSkKICAgICAsIG1fYXV0b1JlcGVhdChmYWxzZSkKLSAgICAsIG1f
d2luZG93c1ZpcnR1YWxLZXlDb2RlKHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoZXZlbnQtPmtl
eXZhbCkpCisgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3aW5kb3dzS2V5Q29kZUZvcktl
eUNvZGUoZXZlbnQtPmtleXZhbCkpCiAgICAgLCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlKGV2ZW50
LT5rZXl2YWwpCiAgICAgLCBtX2lzS2V5cGFkKGV2ZW50LT5rZXl2YWwgPj0gR0RLX0tQX1NwYWNl
ICYmIGV2ZW50LT5rZXl2YWwgPD0gR0RLX0tQXzkpCiAgICAgLCBtX3NoaWZ0S2V5KChldmVudC0+
c3RhdGUgJiBHREtfU0hJRlRfTUFTSykgfHwgKGV2ZW50LT5rZXl2YWwgPT0gR0RLXzMyNzBfQmFj
a1RhYikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggODJlNmU1OC4uYmIzZTUwYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDExLTAyLTEwICAgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5j
b20+IGFuZCBSYXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rv
cm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCBXZWJFdmVudEZhY3RvcnksIFdlYkVycm9ycyBjbGFzc2VzIGZvciBXZWJLaXQyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMAorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3Rv
cnkuY3BwOiBBZGRlZC4gaW1wbGVtZW50YXRpb24gZm9yCisgICAgICAgIFdlYk1vdXNlRXZlbnQs
IFdlYldoZWVsRXZlbnQsIFdlYktleWJvYXJkRXZlbnQuCisgICAgICAgICogU2hhcmVkL2d0ay9X
ZWJFdmVudEZhY3RvcnkuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcDogQWRkZWQuIFN0dWJiZWQKKyAgICAgICAgaW1wbGVt
ZW50YXRpb24gZm9yIEdUSyBwb3J0LgorCiAyMDExLTAyLTE1ICBBbmRlcnMgQ2FybHNzb24gIDxh
bmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUuYW0KaW5kZXggNzg3NGM2NC4uOTE4N2VjZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0KQEAgLTY5LDYgKzY5LDggQEAgbm9kaXN0X2xpYldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAkk
KHdlYmtpdDJfYnVpbHRfc291cmNlcykKIAogbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAorCVNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRlcnJvci5oIFwKKwlTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZXJyb3IuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL0FyZ3VtZW50Q29kZXIuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9B
cmd1bWVudENvZGVycy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3Vt
ZW50RGVjb2Rlci5jcHAgXApAQCAtMTgyLDYgKzE4NCw4IEBAIGxpYldlYktpdDJfbGFfU09VUkNF
UyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0ZUNodW5rLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL1dlYkNvcmVBcmd1bWVudENvZGVyc0d0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcCBcCisJU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9XZWJFdmVudEZhY3RvcnkuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0ltYWdlT3B0
aW9ucy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW1tdXRhYmxlQXJyYXkuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW1tdXRhYmxlQXJyYXkuaCBcCkBAIC01NDEsNiArNTQ1LDcg
QEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuaCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9ndGsvV2ViQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0LmggXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYlBvcHVwTWVudUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBcCkBAIC02MDksNiArNjE0LDcgQEAgbGliV2Vi
S2l0Ml9sYV9DUFBGTEFHUyA9IFwKIAktZm5vLXN0cmljdC1hbGlhc2luZyBcCiAJJChnbG9iYWxf
Y3BwZmxhZ3MpIFwKIAktaW5jbHVkZSAkKHNyY2RpcikvU291cmNlL1dlYktpdDIvV2ViS2l0MlBy
ZWZpeC5oIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ayBcCiAJLUkkKHNyY2Rpcikv
U291cmNlL1dlYktpdDIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyL2d0ayBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYktpdDIvUGxhdGZvcm0gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjNhMTZkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKKworI2luY2x1
ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2lu
Y2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2lu
Y2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGlubGluZSBpbnQgY2xpY2tDb3VudChHZGtFdmVu
dCogZXZlbnQpCit7CisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNhc2UgR0RLX0JV
VFRPTl9QUkVTUzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R0RLXzJCVVRUT05fUFJFU1M6CisgICAgICAgIHJldHVybiAyOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKKyAgICBjYXNlIEdES19CVVRUT05fUkVM
RUFTRToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAg
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmll
cnNGb3JFdmVudChHZGtFdmVudCogZXZlbnQpCit7CisgICAgdW5zaWduZWQgbW9kaWZpZXJzID0g
MDsKKyAgICBHZGtNb2RpZmllclR5cGUgc3RhdGU7CisKKyAgICBpZiAoIWdka19ldmVudF9nZXRf
c3RhdGUoZXZlbnQsICZzdGF0ZSkpCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgaWYgKHN0YXRlICYgR0RLX0NPTlRST0xfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdl
YkV2ZW50OjpDb250cm9sS2V5OworICAgIGlmICgoc3RhdGUgJiBHREtfU0hJRlRfTUFTSykKKyAg
ICAgICAgfHwgKChldmVudC0+dHlwZSA9PSBHREtfS0VZX1BSRVNTIHx8IGV2ZW50LT50eXBlID09
IEdES19LRVlfUkVMRUFTRSkgJiYgKGV2ZW50LT5rZXkua2V5dmFsID09IEdES19LRVlfMzI3MF9C
YWNrVGFiKSkpCisgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6U2hpZnRLZXk7CisgICAg
aWYgKHN0YXRlICYgR0RLX01PRDFfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50
OjpBbHRLZXk7CisgICAgaWYgKHN0YXRlICYgR0RLX01FVEFfTUFTSykKKyAgICAgICAgbW9kaWZp
ZXJzIHw9IFdlYkV2ZW50OjpNZXRhS2V5OworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkV2
ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViTW91c2VF
dmVudDo6QnV0dG9uIGJ1dHRvbkZvckV2ZW50KEdka0V2ZW50ICpldmVudCkKK3sKKyAgICB1bnNp
Z25lZCBidXR0b24gPSAwOworCisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNhc2Ug
R0RLX01PVElPTl9OT1RJRlk6CisgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0
dG9uOworICAgICAgICBpZiAoZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19CVVRUT04xX01BU0sp
CisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOworICAgICAg
ICBlbHNlIGlmIChldmVudC0+bW90aW9uLnN0YXRlICYgR0RLX0JVVFRPTjJfTUFTSykKKyAgICAg
ICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxz
ZSBpZiAoZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19CVVRUT04zX01BU0spCisgICAgICAgICAg
ICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6Cisg
ICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToK
KyAgICAgICAgaWYgKGV2ZW50LT5idXR0b24uYnV0dG9uID09IDEpCisgICAgICAgICAgICBidXR0
b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmIChldmVudC0+
YnV0dG9uLmJ1dHRvbiA9PSAyKQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6
TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAz
KQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b247CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJNb3VzZUV2ZW50OjpCdXR0b24+KGJ1
dHRvbik7Cit9CisKK1dlYk1vdXNlRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3Vz
ZUV2ZW50KEdka0V2ZW50ICpldmVudCkKK3sKKyAgICBkb3VibGUgdGltZXN0YW1wID0gZ2RrX2V2
ZW50X2dldF90aW1lKGV2ZW50KTsKKworICAgIFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJz
ID0gc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4oMCk7CisgICAgV2ViTW91c2VFdmVu
dDo6QnV0dG9uIGJ1dHRvbiA9IGJ1dHRvbkZvckV2ZW50KGV2ZW50KTsKKworICAgIGRvdWJsZSB4
LCB5LCB4Um9vdCwgeVJvb3Q7CisgICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAm
eSk7CisgICAgZ2RrX2V2ZW50X2dldF9yb290X2Nvb3JkcyhldmVudCwgJnhSb290LCAmeVJvb3Qp
OworICAgIEludFBvaW50IHBvc2l0aW9uKHgsIHkpOworICAgIEludFBvaW50IGdsb2JhbFBvc2l0
aW9uKHhSb290LCB5Um9vdCk7CisgICAgaW50IGNsaWNrY291bnQgPSBjbGlja0NvdW50KGV2ZW50
KTsKKworICAgIFdlYkV2ZW50OjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxXZWJFdmVudDo6VHlw
ZT4oMCk7CisgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgIGNhc2UgR0RLX01PVElPTl9O
T1RJRlk6CisgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VNb3ZlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfMkJVVFRPTl9QUkVT
UzoKKyAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgorICAgICAgICB0eXBlID0gV2ViRXZlbnQ6
Ok1vdXNlRG93bjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6
CisgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VVcDsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdCA6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJl
dHVybiBXZWJNb3VzZUV2ZW50KHR5cGUsIGJ1dHRvbiwgcG9zaXRpb24sIGdsb2JhbFBvc2l0aW9u
LCAwLCAwLCAwLCBjbGlja2NvdW50LCBtb2RpZmllcnMsIHRpbWVzdGFtcCk7Cit9CisKK1dlYldo
ZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KEdka0V2ZW50U2Ny
b2xsICpldmVudCkKK3sKKyAgICBXZWJXaGVlbEV2ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0
eSA9IFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OworCisgICAgdW5zaWdu
ZWQgdGltZXN0YW1wID0gZ2RrX2V2ZW50X2dldF90aW1lKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZl
bnQqPihldmVudCkpOworCisgICAgZG91YmxlIHgsIHksIHhSb290LCB5Um9vdDsKKyAgICBnZGtf
ZXZlbnRfZ2V0X2Nvb3JkcyhyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAmeCwg
JnkpOworICAgIGdka19ldmVudF9nZXRfcm9vdF9jb29yZHMocmVpbnRlcnByZXRfY2FzdDxHZGtF
dmVudCo+KGV2ZW50KSwgJnhSb290LCAmeVJvb3QpOworICAgIEludFBvaW50IHBvc2l0aW9uKHgs
IHkpOworICAgIEludFBvaW50IGdsb2JhbFBvc2l0aW9uKHhSb290LCB5Um9vdCk7CisgICAgV2Vi
RXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChyZWludGVycHJl
dF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKKworICAgIEZsb2F0U2l6ZSB3aGVlbFRpY2tzOwor
ICAgIHN3aXRjaCAoZXZlbnQtPmRpcmVjdGlvbikgeworICAgIGNhc2UgR0RLX1NDUk9MTF9VUDoK
KyAgICAgICAgd2hlZWxUaWNrcyA9IEZsb2F0U2l6ZSgwLCAxKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHREtfU0NST0xMX0RPV046CisgICAgICAgIHdoZWVsVGlja3MgPSBGbG9hdFNpemUo
MCwgLTEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdES19TQ1JPTExfTEVGVDoKKyAgICAg
ICAgd2hlZWxUaWNrcyA9IEZsb2F0U2l6ZSgxLCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHREtfU0NST0xMX1JJR0hUOgorICAgICAgICB3aGVlbFRpY2tzID0gRmxvYXRTaXplKC0xLCAw
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gRklYTUU6IHJldHJpZXZlIHRoZSB1
c2VyIHNldHRpbmcgZm9yIHRoZSBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsIG9uIGVhY2ggd2hl
ZWwgZXZlbnQKKyAgICBmbG9hdCBzdGVwID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgRmxvYXRTaXplIGRlbHRhKHdoZWVsVGlja3Mud2lk
dGgoKSpzdGVwLCB3aGVlbFRpY2tzLmhlaWdodCgpKnN0ZXApOworCisgICAgcmV0dXJuIFdlYldo
ZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBwb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIGRlbHRh
LCB3aGVlbFRpY2tzLCBncmFudWxhcml0eSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApOworfQorCitX
ZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChH
ZGtFdmVudEtleSogZXZlbnQpCit7CisgICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSA9IChldmVudC0+
dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpID8gV2ViRXZlbnQ6OktleVVwIDogV2ViRXZlbnQ6Oktl
eURvd247CisgICAgU3RyaW5nIHRleHQgPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNo
YXJhY3RlclN0cmluZyhldmVudC0+a2V5dmFsKTsKKyAgICBTdHJpbmcgdW5tb2RpZmllZFRleHQg
PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVudC0+a2V5
dmFsKTsKKyAgICBTdHJpbmcga2V5SWRlbnRpZmllciA9IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoZXZlbnQtPmtleXZhbCk7CisgICAgaW50IHdpbmRv
d3NWaXJ0dWFsS2V5Q29kZSA9IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6d2luZG93c0tleUNvZGVG
b3JLZXlDb2RlKGV2ZW50LT5rZXl2YWwpOworICAgIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSA9
IHN0YXRpY19jYXN0PGludD4oZXZlbnQtPmtleXZhbCk7CisgICAgaW50IG1hY0NoYXJDb2RlID0g
MDsKKyAgICBib29sIGF1dG9SZXBlYXQgPSBmYWxzZTsKKyAgICBib29sIGlzS2V5cGFkID0gZXZl
bnQtPmtleXZhbCA+PSBHREtfS0VZX0tQX1NwYWNlICYmIGV2ZW50LT5rZXl2YWwgPD0gR0RLX0tF
WV9LUF85OworICAgIGJvb2wgaXNTeXN0ZW1LZXkgPSBmYWxzZTsKKyAgICBXZWJFdmVudDo6TW9k
aWZpZXJzIG1vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2Rr
RXZlbnQqPihldmVudCkpOworICAgIHVuc2lnbmVkIHRpbWVzdGFtcCA9IGdka19ldmVudF9nZXRf
dGltZShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKKworICAgIHJldHVybiBX
ZWJLZXlib2FyZEV2ZW50KHR5cGUsIHRleHQsIHVubW9kaWZpZWRUZXh0LCBrZXlJZGVudGlmaWVy
LCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBtYWNDaGFyQ29k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUmVwZWF0LCBpc0tleXBhZCwgaXNT
eXN0ZW1LZXksIG1vZGlmaWVycywgdGltZXN0YW1wKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9y
eS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Y2ZjhhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaApAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJFdmVudEZh
Y3RvcnlfaAorI2RlZmluZSBXZWJFdmVudEZhY3RvcnlfaAorCisjaW5jbHVkZSAiV2ViRXZlbnQu
aCIKKwordHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBf
R2RrRXZlbnRTY3JvbGwgR2RrRXZlbnRTY3JvbGw7Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRL
ZXkgR2RrRXZlbnRLZXk7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJFdmVudEZh
Y3RvcnkgeworcHVibGljOgorICAgIHN0YXRpYyBXZWJNb3VzZUV2ZW50IGNyZWF0ZVdlYk1vdXNl
RXZlbnQoR2RrRXZlbnQqKTsKKyAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVl
bEV2ZW50KEdka0V2ZW50U2Nyb2xsKik7CisgICAgc3RhdGljIFdlYktleWJvYXJkRXZlbnQgY3Jl
YXRlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSopOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBXZWJFdmVudEZhY3RvcnlfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzOTAyOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYkVycm9yc0d0ay5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkVycm9ycy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4K
KyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRlcnJv
ci5oPgorCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoV0VC
S0lUX05FVFdPUktfRVJST1IpLCBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgXygiTG9hZCByZXF1
ZXN0IGNhbmNlbGxlZCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdf
cXVhcmtfdG9fc3RyaW5nKFdFQktJVF9QT0xJQ1lfRVJST1IpLCBXRUJLSVRfUE9MSUNZX0VSUk9S
X0NBTk5PVF9VU0VfUkVTVFJJQ1RFRF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIk5vdCBhbGxvd2VkIHRvIHVzZSByZXN0cmljdGVkIG5l
dHdvcmsgcG9ydCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9y
KGdfcXVhcmtfdG9fc3RyaW5nKFdFQktJVF9QT0xJQ1lfRVJST1IpLCBXRUJLSVRfUE9MSUNZX0VS
Uk9SX0NBTk5PVF9TSE9XX1VSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnVy
bCgpLnN0cmluZygpLCBfKCJVUkwgY2Fubm90IGJlIHNob3duIikpOworfQorCitSZXNvdXJjZUVy
cm9yIGludGVycnVwdEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhX
RUJLSVRfUE9MSUNZX0VSUk9SKSwgV0VCS0lUX1BPTElDWV9FUlJPUl9GUkFNRV9MT0FEX0lOVEVS
UlVQVEVEX0JZX1BPTElDWV9DSEFOR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dC51cmwoKS5zdHJpbmcoKSwgXygiRnJhbWUgbG9hZCB3YXMgaW50ZXJydXB0ZWQiKSk7Cit9CisK
K1Jlc291cmNlRXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZ19xdWFya190b19z
dHJpbmcoV0VCS0lUX1BPTElDWV9FUlJPUiksIFdFQktJVF9QT0xJQ1lfRVJST1JfQ0FOTk9UX1NI
T1dfTUlNRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0
cmluZygpLCBfKCJDb250ZW50IHdpdGggdGhlIHNwZWNpZmllZCBNSU1FIHR5cGUgY2Fubm90IGJl
IHNob3duIikpOworfQorCitSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJv
cihnX3F1YXJrX3RvX3N0cmluZyhXRUJLSVRfTkVUV09SS19FUlJPUiksIFdFQktJVF9ORVRXT1JL
X0VSUk9SX0ZJTEVfRE9FU19OT1RfRVhJU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
cG9uc2UudXJsKCkuc3RyaW5nKCksIF8oIkZpbGUgZG9lcyBub3QgZXhpc3QiKSk7Cit9CisKK1Jl
c291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0
cmluZyhXRUJLSVRfUExVR0lOX0VSUk9SKSwgV0VCS0lUX1BMVUdJTl9FUlJPUl9XSUxMX0hBTkRM
RV9MT0FELAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmluZygp
LCBfKCJQbHVnaW4gd2lsbCBoYW5kbGUgbG9hZCIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Cg==
</data>
<flag name="review"
          id="74409"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83283</attachid>
            <date>2011-02-22 01:13:37 -0800</date>
            <delta_ts>2011-02-22 08:00:49 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>eventfactory.patch</filename>
            <type>text/plain</type>
            <size>20657</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IGFkZjRlODEwYjg0MmY4MWJlN2JhMjkwZGE2ZGY4NDQ3NzEyOGZlZGYKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MjoxMjo1NiAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMCBBbXJ1dGggUmFqIDxhbXJ1dGhyYWpA
bW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgPHJhdmkua2FzaWJo
YXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5j
b20+CiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAg
ICAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYkV2ZW50RmFjdG9yeSwgV2ViRXJyb3JzIGNsYXNz
ZXMgZm9yIFdlYktpdDIKICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ4NTEwCiAgICAKICAgICAgICAgICAgRXhwb3J0ZWQgc3RhdGljIGZ1bmN0aW9u
cyBmb3IgR1RLLCB3ZSBuZWVkIHRoZW0gdG8gY3JlYXRlIGV2ZW50cwogICAgICAgICAgICBpbiBX
ZWJLaXQyLgogICAgCiAgICAgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50
Lmg6CiAgICAgICAgICAgICogcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcDoKICAgICAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tl
eUNvZGUpOgogICAgICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5k
b3dzS2V5Q29kZUZvckdka0tleUNvZGUpOgogICAgICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgogICAgCiAgICAyMDExLTAyLTEw
ICAgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIFBoYW5lZW5k
cmEgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5k
cm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgogICAgCiAgICAgICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJF
dmVudEZhY3RvcnksIFdlYkVycm9ycyBjbGFzc2VzIGZvciBXZWJLaXQyCiAgICAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUxMAogICAgCiAgICAgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CiAgICAgICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZh
Y3RvcnkuY3BwOiBBZGRlZC4gaW1wbGVtZW50YXRpb24gZm9yCiAgICAgICAgICAgIFdlYk1vdXNl
RXZlbnQsIFdlYldoZWVsRXZlbnQsIFdlYktleWJvYXJkRXZlbnQuCiAgICAgICAgICAgICogU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaDogQWRkZWQuCiAgICAgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcDogQWRkZWQuIFN0dWJiZWQKICAg
ICAgICAgICAgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBwb3J0LgoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxOGY3
MDU4Li5mNDE0ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMTAgICBB
bXJ1dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNvbT4gYW5kIFJhdmkgUGhhbmVlbmRyYSBL
YXNpYmhhdGxhICA8cmF2aS5rYXNpYmhhdGxhQG1vdG9yb2xhLmNvbT4gYW5kIEFsZWphbmRybyBH
LiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYkV2ZW50RmFjdG9yeSwgV2Vi
RXJyb3JzIGNsYXNzZXMgZm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ4NTEwCisKKyAgICAgICAgRXhwb3J0ZWQgc3RhdGljIGZ1bmN0
aW9ucyBmb3IgR1RLLCB3ZSBuZWVkIHRoZW0gdG8gY3JlYXRlIGV2ZW50cworICAgICAgICBpbiBX
ZWJLaXQyLgorCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvckdk
a0tleUNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5n
bGVDaGFyYWN0ZXJTdHJpbmcpOgorCiAyMDExLTAyLTIxICBSb2xhbmQgU3RlaW5lciAgPHJvbGFu
ZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJh
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaApp
bmRleCBhZWU5NWI0Li5kNDhjYzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaApAQCAtMTc1LDYgKzE3NSwxMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAjaWYgUExBVEZPUk0oR1RLKQogICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQo
R2RrRXZlbnRLZXkqKTsKICAgICAgICAgR2RrRXZlbnRLZXkqIGdka0V2ZW50S2V5KCkgY29uc3Q7
CisKKyAgICAgICAgLy8gVXNlZCBieSBXZWJLaXQyCisgICAgICAgIHN0YXRpYyBTdHJpbmcga2V5
SWRlbnRpZmllckZvckdka0tleUNvZGUoZ3VpbnQpOworICAgICAgICBzdGF0aWMgaW50IHdpbmRv
d3NLZXlDb2RlRm9yR2RrS2V5Q29kZSh1bnNpZ25lZCBpbnQpOworICAgICAgICBzdGF0aWMgU3Ry
aW5nIHNpbmdsZUNoYXJhY3RlclN0cmluZyhndWludCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KFFUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHAKaW5kZXgg
OWY0YzIwZS4uZjFiNzkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0tleUV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZl
bnRHdGsuY3BwCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZJWE1F
OiBUaGlzIGlzIGluY29tcGxldGUuICBXZSBzaG91bGQgY2hhbmdlIHRoaXMgdG8gbWlycm9yCiAv
LyBtb3JlIGxpa2Ugd2hhdCBGaXJlZm94IGRvZXMsIGFuZCBnZW5lcmF0ZSB0aGVzZSBzd2l0Y2gg
c3RhdGVtZW50cwogLy8gYXQgYnVpbGQgdGltZS4KLXN0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmll
ckZvckdka0tleUNvZGUoZ3VpbnQga2V5Q29kZSkKK1N0cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ6OmtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGd1aW50IGtleUNvZGUpCiB7CiAgICAgc3dp
dGNoIChrZXlDb2RlKSB7CiAgICAgICAgIGNhc2UgR0RLX01lbnU6CkBAIC0xNDksNyArMTQ5LDcg
QEAgc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShndWludCBrZXlDb2Rl
KQogICAgIH0KIH0KIAotc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVuc2ln
bmVkIGludCBrZXljb2RlKQoraW50IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6d2luZG93c0tleUNv
ZGVGb3JHZGtLZXlDb2RlKHVuc2lnbmVkIGludCBrZXljb2RlKQogewogICAgIHN3aXRjaCAoa2V5
Y29kZSkgewogICAgICAgICBjYXNlIEdES19LUF8wOgpAQCAtNTE2LDcgKzUxNiw3IEBAIHN0YXRp
YyBpbnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudCh1bnNpZ25lZCBpbnQga2V5Y29kZSkKIAog
fQogCi1zdGF0aWMgU3RyaW5nIHNpbmdsZUNoYXJhY3RlclN0cmluZyhndWludCB2YWwpCitTdHJp
bmcgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ3VpbnQgdmFs
KQogewogICAgIHN3aXRjaCAodmFsKSB7CiAgICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKQEAg
LTU1Miw3ICs1NTIsNyBAQCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRF
dmVudChHZGtFdmVudEtleSogZXZlbnQpCiAgICAgLCBtX3VubW9kaWZpZWRUZXh0KHNpbmdsZUNo
YXJhY3RlclN0cmluZyhldmVudC0+a2V5dmFsKSkKICAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJ
ZGVudGlmaWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKICAgICAsIG1fYXV0b1JlcGVh
dChmYWxzZSkKLSAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKHdpbmRvd3NLZXlDb2RlRm9y
S2V5RXZlbnQoZXZlbnQtPmtleXZhbCkpCisgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3
aW5kb3dzS2V5Q29kZUZvckdka0tleUNvZGUoZXZlbnQtPmtleXZhbCkpCiAgICAgLCBtX25hdGl2
ZVZpcnR1YWxLZXlDb2RlKGV2ZW50LT5rZXl2YWwpCiAgICAgLCBtX2lzS2V5cGFkKGV2ZW50LT5r
ZXl2YWwgPj0gR0RLX0tQX1NwYWNlICYmIGV2ZW50LT5rZXl2YWwgPD0gR0RLX0tQXzkpCiAgICAg
LCBtX3NoaWZ0S2V5KChldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSykgfHwgKGV2ZW50LT5r
ZXl2YWwgPT0gR0RLXzMyNzBfQmFja1RhYikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDM2OTM2OS4uOWNmZDgy
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTAyLTEwICAgQW1ydXRoIFJhaiAg
PGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAg
PHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8
YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJFdmVudEZhY3RvcnksIFdlYkVycm9ycyBjbGFz
c2VzIGZvciBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00ODUxMAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwOiBBZGRlZC4gaW1wbGVtZW50YXRpb24gZm9yCisg
ICAgICAgIFdlYk1vdXNlRXZlbnQsIFdlYldoZWVsRXZlbnQsIFdlYktleWJvYXJkRXZlbnQuCisg
ICAgICAgICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaDogQWRkZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcDogQWRkZWQuIFN0
dWJiZWQKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZm9yIEdUSyBwb3J0LgorCiAyMDExLTAyLTIy
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByNzkyOTYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGRj
ZjUxYzMuLjhhYTQxMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC03MSw2ICs3MSw4IEBAIG5v
ZGlzdF9saWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJJCh3ZWJraXQyX2J1aWx0X3NvdXJjZXMp
CiAKIGxpYldlYktpdDJfbGFfU09VUkNFUyA9IFwKKwlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0ZXJyb3IuaCBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmNw
cCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVyLmggXAog
CVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuaCBcCiAJU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwIFwKQEAgLTE4
NCw2ICsxODYsOCBAQCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9VcGRhdGVDaHVuay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
VXBkYXRlQ2h1bmsuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJndW1l
bnRDb2RlcnNHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFj
dG9yeS5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5Lmgg
XAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbWFnZU9wdGlvbnMuaCBcCiAJU291cmNlL1dlYktp
dDIvU2hhcmVkL0ltbXV0YWJsZUFycmF5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0lt
bXV0YWJsZUFycmF5LmggXApAQCAtNTU1LDYgKzU1OSw3IEBAIGxpYldlYktpdDJfbGFfU09VUkNF
UyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Jlc291cmNlQ2FjaGUvV2ViUmVzb3Vy
Y2VDYWNoZU1hbmFnZXIuaCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9SZXNvdXJjZUNh
Y2hlL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIFwKKwlT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsu
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0LmggXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvZ3RrL1dlYlBvcHVwTWVudUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBcCkBAIC02MjMsNiAr
NjI4LDcgQEAgbGliV2ViS2l0Ml9sYV9DUFBGTEFHUyA9IFwKIAktZm5vLXN0cmljdC1hbGlhc2lu
ZyBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKIAktaW5jbHVkZSAkKHNyY2RpcikvU291cmNlL1dl
YktpdDIvV2ViS2l0MlByZWZpeC5oIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ayBc
CiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJL
aXQyL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvUGxhdGZvcm0gXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZmI3YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTAsMCArMSwxNzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJFdmVudEZhY3Rv
cnkuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlNj
cm9sbGJhci5oIgorI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSA8
Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNLZXlDb2RlRnJvbUtleVBhZCh1bnNpZ25lZCBr
ZXl2YWwpCit7CisgICAgcmV0dXJuIGtleXZhbCA+PSBHREtfS0VZX0tQX1NwYWNlICYmIGtleXZh
bCA8PSBHREtfS0VZX0tQXzk7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViRXZlbnQ6Ok1vZGlmaWVy
cyBtb2RpZmllcnNGb3JFdmVudChHZGtFdmVudCogZXZlbnQpCit7CisgICAgdW5zaWduZWQgbW9k
aWZpZXJzID0gMDsKKyAgICBHZGtNb2RpZmllclR5cGUgc3RhdGU7CisKKyAgICBBU1NFUlQoZ2Rr
X2V2ZW50X2dldF9zdGF0ZShldmVudCwgJnN0YXRlKSk7CisKKyAgICBpZiAoc3RhdGUgJiBHREtf
Q09OVFJPTF9NQVNLKQorICAgICAgICBtb2RpZmllcnMgfD0gV2ViRXZlbnQ6OkNvbnRyb2xLZXk7
CisgICAgaWYgKHN0YXRlICYgR0RLX1NISUZUX01BU0spCisgICAgICAgIG1vZGlmaWVycyB8PSBX
ZWJFdmVudDo6U2hpZnRLZXk7CisgICAgaWYgKHN0YXRlICYgR0RLX01PRDFfTUFTSykKKyAgICAg
ICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpBbHRLZXk7CisgICAgaWYgKHN0YXRlICYgR0RLX01F
VEFfTUFTSykKKyAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpNZXRhS2V5OworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KG1vZGlmaWVycyk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvbkZvckV2ZW50KEdka0V2
ZW50KiBldmVudCkKK3sKKyAgICB1bnNpZ25lZCBidXR0b24gPSAwOworCisgICAgc3dpdGNoIChl
dmVudC0+dHlwZSkgeworICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6CisgICAgICAgIGJ1dHRv
biA9IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOworICAgICAgICBpZiAoZXZlbnQtPm1vdGlvbi5z
dGF0ZSAmIEdES19CVVRUT04xX01BU0spCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2
ZW50OjpMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmIChldmVudC0+bW90aW9uLnN0YXRlICYg
R0RLX0JVVFRPTjJfTUFTSykKKyAgICAgICAgICAgIGJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6Ok1p
ZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPm1vdGlvbi5zdGF0ZSAmIEdES19C
VVRUT04zX01BU0spCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1
dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHREtfQlVUVE9OX1BSRVNTOgorICAgIGNh
c2UgR0RLXzJCVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAgICBj
YXNlIEdES19CVVRUT05fUkVMRUFTRToKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0b24uYnV0dG9u
ID09IDEpCisgICAgICAgICAgICBidXR0b24gPSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOwor
ICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAyKQorICAgICAgICAgICAg
YnV0dG9uID0gV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOworICAgICAgICBlbHNlIGlmIChl
dmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAzKQorICAgICAgICAgICAgYnV0dG9uID0gV2ViTW91c2VF
dmVudDo6UmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJNb3VzZUV2ZW50OjpCdXR0b24+KGJ1dHRvbik7Cit9CisKK1dlYk1vdXNlRXZlbnQgV2ViRXZl
bnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KEdka0V2ZW50ICpldmVudCwgaW50IGN1cnJl
bnRDbGlja0NvdW50KQoreworICAgIGRvdWJsZSB4LCB5LCB4Um9vdCwgeVJvb3Q7CisgICAgZ2Rr
X2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAmeSk7CisgICAgZ2RrX2V2ZW50X2dldF9yb290
X2Nvb3JkcyhldmVudCwgJnhSb290LCAmeVJvb3QpOworCisgICAgV2ViRXZlbnQ6OlR5cGUgdHlw
ZSA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpUeXBlPigwKTsKKyAgICBzd2l0Y2ggKGV2ZW50LT50
eXBlKSB7CisgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKKyAgICAgICAgdHlwZSA9IFdlYkV2
ZW50OjpNb3VzZU1vdmU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVT
UzoKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzNCVVRUT05fUFJF
U1M6CisgICAgICAgIHR5cGUgPSBXZWJFdmVudDo6TW91c2VEb3duOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToKKyAgICAgICAgdHlwZSA9IFdlYkV2ZW50OjpN
b3VzZVVwOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0IDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIFdlYk1vdXNlRXZlbnQodHlwZSwgYnV0
dG9uRm9yRXZlbnQoZXZlbnQpLCBJbnRQb2ludCh4LCB5KSwgSW50UG9pbnQoeFJvb3QsIHlSb290
KSwgMCAvKiBkZWx0YVggKi8sIDAgLyogZGVsdGEgWSovLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIDAgLypkZWx0YVogKi8sIGN1cnJlbnRDbGlja0NvdW50LCBzdGF0aWNfY2FzdDxXZWJFdmVu
dDo6TW9kaWZpZXJzPigwKSwgZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7Cit9CisKK1dlYldo
ZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KEdka0V2ZW50U2Ny
b2xsKiBzY3JvbGxFdmVudCkKK3sKKyAgICBHZGtFdmVudCogZXZlbnQocmVpbnRlcnByZXRfY2Fz
dDxHZGtFdmVudCo+KHNjcm9sbEV2ZW50KSk7CisgICAgZG91YmxlIHgsIHksIHhSb290LCB5Um9v
dDsKKyAgICBnZGtfZXZlbnRfZ2V0X2Nvb3JkcyhldmVudCwgJngsICZ5KTsKKyAgICBnZGtfZXZl
bnRfZ2V0X3Jvb3RfY29vcmRzKGV2ZW50LCAmeFJvb3QsICZ5Um9vdCk7CisKKyAgICBGbG9hdFNp
emUgd2hlZWxUaWNrczsKKyAgICBzd2l0Y2ggKHNjcm9sbEV2ZW50LT5kaXJlY3Rpb24pIHsKKyAg
ICBjYXNlIEdES19TQ1JPTExfVVA6CisgICAgICAgIHdoZWVsVGlja3MgPSBGbG9hdFNpemUoMCwg
MSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RLX1NDUk9MTF9ET1dOOgorICAgICAgICB3
aGVlbFRpY2tzID0gRmxvYXRTaXplKDAsIC0xKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
REtfU0NST0xMX0xFRlQ6CisgICAgICAgIHdoZWVsVGlja3MgPSBGbG9hdFNpemUoMSwgMCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR0RLX1NDUk9MTF9SSUdIVDoKKyAgICAgICAgd2hlZWxU
aWNrcyA9IEZsb2F0U2l6ZSgtMSwgMCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBbR1RL
XSBBZGQgYSBzZXR0aW5nIHRvIGNoYW5nZSB0aGUgcGl4ZWxzIHBlciBsaW5lIHVzZWQgZm9yIHNj
cm9sbGluZworICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NDgyNgorICAgIGZsb2F0IHN0ZXAgPSBzdGF0aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhl
bHNQZXJMaW5lU3RlcCgpKTsKKyAgICBGbG9hdFNpemUgZGVsdGEod2hlZWxUaWNrcy53aWR0aCgp
ICogc3RlcCwgd2hlZWxUaWNrcy5oZWlnaHQoKSAqIHN0ZXApOworCisgICAgcmV0dXJuIFdlYldo
ZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBJbnRQb2ludCh4LCB5KSwgSW50UG9pbnQoeFJvb3Qs
IHlSb290KSwgZGVsdGEsIHdoZWVsVGlja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
V2hlZWxFdmVudDo6U2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQsIG1vZGlmaWVyc0ZvckV2ZW50KGV2
ZW50KSwgZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7Cit9CisKK1dlYktleWJvYXJkRXZlbnQg
V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVu
dCkKK3sKKyAgICByZXR1cm4gV2ViS2V5Ym9hcmRFdmVudCgoZXZlbnQtPnR5cGUgPT0gR0RLX0tF
WV9SRUxFQVNFKSA/IFdlYkV2ZW50OjpLZXlVcCA6IFdlYkV2ZW50OjpLZXlEb3duLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKGV2ZW50LT5rZXl2YWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV2ZW50LT5rZXl2YWwp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5
SWRlbnRpZmllckZvckdka0tleUNvZGUoZXZlbnQtPmtleXZhbCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvckdka0tl
eUNvZGUoZXZlbnQtPmtleXZhbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihldmVudC0+a2V5dmFsKSwgMCAvKiBtYWNDaGFyQ29kZSAqLywgZmFsc2UgLyog
aXNBdXRvUmVwZWF0ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzS2V5Q29kZUZy
b21LZXlQYWQoZXZlbnQtPmtleXZhbCksIGZhbHNlIC8qIGlzU3lzdGVtS2V5ICovLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyc0ZvckV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8
R2RrRXZlbnQqPihldmVudCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka19ldmVu
dF9nZXRfdGltZShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9XZWJFdmVudEZhY3RvcnkuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRG
YWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5MDA3OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5
LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViRXZlbnRGYWN0b3J5X2gKKyNkZWZpbmUgV2ViRXZlbnRGYWN0b3J5X2gKKworI2lu
Y2x1ZGUgIldlYkV2ZW50LmgiCisKK3R5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50Owor
dHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50U2Nyb2xsIEdka0V2ZW50U2Nyb2xsOwordHlwZWRlZiBz
dHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5OworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgV2ViRXZlbnRGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2ViTW91c2VFdmVu
dCBjcmVhdGVXZWJNb3VzZUV2ZW50KEdka0V2ZW50KiwgaW50KTsKKyAgICBzdGF0aWMgV2ViV2hl
ZWxFdmVudCBjcmVhdGVXZWJXaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKik7CisgICAgc3RhdGlj
IFdlYktleWJvYXJkRXZlbnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSopOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJFdmVudEZhY3Rvcnlf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9n
dGsvV2ViRXJyb3JzR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNzc5MTM0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHAKQEAgLTAsMCArMSw4MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkVycm9ycy5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRlcnJvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1Jlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdf
cXVhcmtfdG9fc3RyaW5nKFdFQktJVF9ORVRXT1JLX0VSUk9SKSwgV0VCS0lUX05FVFdPUktfRVJS
T1JfQ0FOQ0VMTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudXJsKCkuc3Ry
aW5nKCksIF8oIkxvYWQgcmVxdWVzdCBjYW5jZWxsZWQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3Ig
YmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhXRUJLSVRfUE9MSUNZX0VSUk9SKSwg
V0VCS0lUX1BPTElDWV9FUlJPUl9DQU5OT1RfVVNFX1JFU1RSSUNURURfUE9SVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0LnVybCgpLnN0cmluZygpLCBfKCJOb3QgYWxsb3dlZCB0
byB1c2UgcmVzdHJpY3RlZCBuZXR3b3JrIHBvcnQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgY2Fu
bm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gUmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhXRUJLSVRfUE9MSUNZX0VSUk9S
KSwgV0VCS0lUX1BPTElDWV9FUlJPUl9DQU5OT1RfU0hPV19VUkwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgXygiVVJMIGNhbm5vdCBiZSBzaG93biIp
KTsKK30KKworUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3Io
Z19xdWFya190b19zdHJpbmcoV0VCS0lUX1BPTElDWV9FUlJPUiksIFdFQktJVF9QT0xJQ1lfRVJS
T1JfRlJBTUVfTE9BRF9JTlRFUlJVUFRFRF9CWV9QT0xJQ1lfQ0hBTkdFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIF8oIkZyYW1lIGxvYWQgd2FzIGlu
dGVycnVwdGVkIikpOworfQorCitSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9y
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHJldHVybiBSZXNvdXJj
ZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFdFQktJVF9QT0xJQ1lfRVJST1IpLCBXRUJLSVRfUE9M
SUNZX0VSUk9SX0NBTk5PVF9TSE9XX01JTUVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgXygiQ29udGVudCB3aXRoIHRoZSBzcGVjaWZpZWQg
TUlNRSB0eXBlIGNhbm5vdCBiZSBzaG93biIpKTsKK30KKworUmVzb3VyY2VFcnJvciBmaWxlRG9l
c05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAg
cmV0dXJuIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoV0VCS0lUX05FVFdPUktfRVJS
T1IpLCBXRUJLSVRfTkVUV09SS19FUlJPUl9GSUxFX0RPRVNfTk9UX0VYSVNULAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBfKCJGaWxlIGRvZXMgbm90
IGV4aXN0IikpOworfQorCitSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNl
RXJyb3IoZ19xdWFya190b19zdHJpbmcoV0VCS0lUX1BMVUdJTl9FUlJPUiksIFdFQktJVF9QTFVH
SU5fRVJST1JfV0lMTF9IQU5ETEVfTE9BRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNw
b25zZS51cmwoKS5zdHJpbmcoKSwgXygiUGx1Z2luIHdpbGwgaGFuZGxlIGxvYWQiKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="75063"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>