<?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>65093</bug_id>
          
          <creation_ts>2011-07-24 20:56:47 -0700</creation_ts>
          <short_desc>[GTK][Webkit2] Add support for IME Composition</short_desc>
          <delta_ts>2012-12-28 12:33:13 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</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>
          <dependson>55946</dependson>
    
    <dependson>84556</dependson>
    
    <dependson>88698</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joone Hur">joone.hur</reporter>
          <assigned_to name="Joone Hur">joone.hur</assigned_to>
          <cc>alex</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>gustavo</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>441549</commentid>
    <comment_count>0</comment_count>
    <who name="Joone Hur">joone.hur</who>
    <bug_when>2011-07-24 20:56:47 -0700</bug_when>
    <thetext>The WebKit2 Gtk+ port should support IME Composition, which allow us to type Korean Hangul.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>441586</commentid>
    <comment_count>1</comment_count>
      <attachid>101856</attachid>
    <who name="Joone Hur">joone.hur</who>
    <bug_when>2011-07-25 02:03:19 -0700</bug_when>
    <thetext>Created attachment 101856
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>441784</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-07-25 12:05:11 -0700</bug_when>
    <thetext>This is quite a bit simpler than the corresponding code in WebKit1. I worry that it will break key events considerably. How thoroughly have you tested it? Does it properly handle normal key input via the Simple IME engine? One problem I found there was that each keystroke looked like an IME composition, which isn&apos;t correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536219</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-14 13:39:20 -0800</bug_when>
    <thetext>*** Bug 55946 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606049</commentid>
    <comment_count>4</comment_count>
      <attachid>137996</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-04-19 15:54:50 -0700</bug_when>
    <thetext>Created attachment 137996
Test page

This HTML file can be used to test key events and IME events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645638</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-10 16:14:16 -0700</bug_when>
    <thetext>I&apos;ve recently moved the IME code to WebCore so that it can be shared with WebKit2. I&apos;ll post a patch shortly just that creates the same glue in WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645642</commentid>
    <comment_count>6</comment_count>
      <attachid>146755</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-10 16:39:24 -0700</bug_when>
    <thetext>Created attachment 146755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648896</commentid>
    <comment_count>7</comment_count>
      <attachid>146755</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-14 00:38:19 -0700</bug_when>
    <thetext>Comment on attachment 146755
Patch

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

&gt; Source/WebCore/platform/gtk/GtkInputMethodFilter.h:64
&gt; +    enum EventFaked {
&gt; +        FakeEvent,
&gt; +        RealEvent
&gt; +    };

This sounds a bit weird to me, the enum is called EventFaked but contains RealEvent value. Will this enum be extended in the future? because in this paticular case, I see a boolean easier to understand than this enum, something like bool isFakeEvent.

&gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp:38
&gt; +void WebViewBaseInputMethodFilter::setWebView(WebKitWebViewBase* webView)
&gt; +{
&gt; +    m_webView = webView;
&gt; +    GtkInputMethodFilter::setWidget(GTK_WIDGET(webView));
&gt; +}

You are keeping the webView, but it&apos;s only used to get the page. The web view is then used without checking whether it has been set already or not. I think this class could be created with a page, and this method would simply call GtkInputMethodFilter::setWidget() without keeping the web view. You couldn&apos;t allocate the class in the stack, but I don&apos;t think it&apos;s a problem.

&gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp:48
&gt; +    webkitWebViewBaseGetPage(m_webView)-&gt;handleKeyboardEvent(NativeWebKeyboardEvent(reinterpret_cast&lt;GdkEvent*&gt;(event),
&gt; +                                                             CompositionResults(simpleString), faked == FakeEvent));

Here you would use the page directly, and you wouldn&apos;t need to check whether it&apos;s NULL or not

&gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.h:29
&gt; +class WebViewBaseInputMethodFilter : public WebCore::GtkInputMethodFilter {

I think this class could be called just WebInputMethodFilter

&gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.h:31
&gt; +    void setWebView(WebKitWebViewBase*);

This could take a GtkWidget* instead and you don&apos;t need the forward declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648903</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-14 00:58:39 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 146755 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=146755&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/GtkInputMethodFilter.h:64
&gt; &gt; +    enum EventFaked {
&gt; &gt; +        FakeEvent,
&gt; &gt; +        RealEvent
&gt; &gt; +    };
&gt; 
&gt; This sounds a bit weird to me, the enum is called EventFaked but contains RealEvent value. Will this enum be extended in the future? because in this paticular case, I see a boolean easier to understand than this enum, something like bool isFakeEvent.

Originally this was a boolean, and changing it to an enum made the code easier to read. The general direction of WebKit is to use less booleans as arguments. If it&apos;s only the name of the enum that you object to I&apos;m fine with renaming it. How about:

enum EventType {
    FakeEventForComposition,
    RealEventFromWidget
};

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp:38
&gt; &gt; +void WebViewBaseInputMethodFilter::setWebView(WebKitWebViewBase* webView)
&gt; &gt; +{
&gt; &gt; +    m_webView = webView;
&gt; &gt; +    GtkInputMethodFilter::setWidget(GTK_WIDGET(webView));
&gt; &gt; +}
&gt; 
&gt; You are keeping the webView, but it&apos;s only used to get the page. The web view is then used without checking whether it has been set already or not. I think this class could be created with a page, and this method would simply call GtkInputMethodFilter::setWidget() without keeping the web view. You couldn&apos;t allocate the class in the stack, but I don&apos;t think it&apos;s a problem.

Doing dynamic allocation exchanges the possibility of not setting the WebView with the possibility of not actually allocating the InputMethodFilter. Would you be okay with simply adding ASSERTs verifying that the WebView is set? I believe I did this for the WebKit1 version.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp:48
&gt; &gt; +    webkitWebViewBaseGetPage(m_webView)-&gt;handleKeyboardEvent(NativeWebKeyboardEvent(reinterpret_cast&lt;GdkEvent*&gt;(event),
&gt; &gt; +                                                             CompositionResults(simpleString), faked == FakeEvent));
&gt; 
&gt; Here you would use the page directly, and you wouldn&apos;t need to check whether it&apos;s NULL or not
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.h:29
&gt; &gt; +class WebViewBaseInputMethodFilter : public WebCore::GtkInputMethodFilter {
&gt; 
&gt; I think this class could be called just WebInputMethodFilter

I chose WebKitWebViewBaseInputMethodFilter to differentiate it from the WebKit1 version. I can change the name to WebKit2InputMethodFilter if you like that name better -- or if you have another suggestion that helps keep the difference between the two clear.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.h:31
&gt; &gt; +    void setWebView(WebKitWebViewBase*);
&gt; 
&gt; This could take a GtkWidget* instead and you don&apos;t need the forward declaration.

Using WebKitWebViewBase makes a lot of sense because we need to treat it like a WebKitWebViewBase to get the page. I think using a superclass, GtkWidget, makes the interface weaker -- somewhat like taking a void pointer. I want to only accept WebKitWebViewBases here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648922</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-14 01:13:06 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 146755 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=146755&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/gtk/GtkInputMethodFilter.h:64
&gt; &gt; &gt; +    enum EventFaked {
&gt; &gt; &gt; +        FakeEvent,
&gt; &gt; &gt; +        RealEvent
&gt; &gt; &gt; +    };
&gt; &gt; 
&gt; &gt; This sounds a bit weird to me, the enum is called EventFaked but contains RealEvent value. Will this enum be extended in the future? because in this paticular case, I see a boolean easier to understand than this enum, something like bool isFakeEvent.
&gt; 
&gt; Originally this was a boolean, and changing it to an enum made the code easier to read. 

Not for me :-P

&gt; The general direction of WebKit is to use less booleans as arguments.

and I agree, that&apos;s why I said &quot;in this particular case&quot;

&gt; If it&apos;s only the name of the enum that you object to I&apos;m fine with renaming it. How about:
&gt; 
&gt; enum EventType {
&gt;     FakeEventForComposition,
&gt;     RealEventFromWidget
&gt; };

Yes, that sounds better, although EventType is probably too generic, but at least it makes the code easier to read for me.

&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp:38
&gt; &gt; &gt; +void WebViewBaseInputMethodFilter::setWebView(WebKitWebViewBase* webView)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    m_webView = webView;
&gt; &gt; &gt; +    GtkInputMethodFilter::setWidget(GTK_WIDGET(webView));
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; You are keeping the webView, but it&apos;s only used to get the page. The web view is then used without checking whether it has been set already or not. I think this class could be created with a page, and this method would simply call GtkInputMethodFilter::setWidget() without keeping the web view. You couldn&apos;t allocate the class in the stack, but I don&apos;t think it&apos;s a problem.
&gt; 
&gt; Doing dynamic allocation exchanges the possibility of not setting the WebView with the possibility of not actually allocating the InputMethodFilter.

hmm, but that&apos;s not a problem of this class, but the callers. You should allocate it in the web view constructor rigth after the page proxy is created.

&gt; Would you be okay with simply adding ASSERTs verifying that the WebView is set? I believe I did this for the WebKit1 version.

The thing is that this class doesn&apos;t need a web view, but a WebPageProxy, so instead of using a web view just to get the page proxy all the time, it could be created with a page, like most of the classes that use a page proxy in UIProcess.

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp:48
&gt; &gt; &gt; +    webkitWebViewBaseGetPage(m_webView)-&gt;handleKeyboardEvent(NativeWebKeyboardEvent(reinterpret_cast&lt;GdkEvent*&gt;(event),
&gt; &gt; &gt; +                                                             CompositionResults(simpleString), faked == FakeEvent));
&gt; &gt; 
&gt; &gt; Here you would use the page directly, and you wouldn&apos;t need to check whether it&apos;s NULL or not
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.h:29
&gt; &gt; &gt; +class WebViewBaseInputMethodFilter : public WebCore::GtkInputMethodFilter {
&gt; &gt; 
&gt; &gt; I think this class could be called just WebInputMethodFilter
&gt; 
&gt; I chose WebKitWebViewBaseInputMethodFilter to differentiate it from the WebKit1 version. I can change the name to WebKit2InputMethodFilter if you like that name better -- or if you have another suggestion that helps keep the difference between the two clear.

In general, webcore or webkit1 classes are called without the Web prefix and webkit2 classes have the Web prefix (Page/WebPage, Frame/WebFRame, etc.)

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebViewBaseInputMethodFilter.h:31
&gt; &gt; &gt; +    void setWebView(WebKitWebViewBase*);
&gt; &gt; 
&gt; &gt; This could take a GtkWidget* instead and you don&apos;t need the forward declaration.
&gt; 
&gt; Using WebKitWebViewBase makes a lot of sense because we need to treat it like a WebKitWebViewBase to get the page. I think using a superclass, GtkWidget, makes the interface weaker -- somewhat like taking a void pointer. I want to only accept WebKitWebViewBases here.

You are right, I was assuming this class would use a WebPageProxy instead of a web view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649106</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-14 06:05:23 -0700</bug_when>
    <thetext>(In reply to comment #9)

&gt; &gt; &gt; You are keeping the webView, but it&apos;s only used to get the page. The web view is then used without checking whether it has been set already or not. I think this class could be created with a page, and this method would simply call GtkInputMethodFilter::setWidget() without keeping the web view. You couldn&apos;t allocate the class in the stack, but I don&apos;t think it&apos;s a problem.

&gt; You are right, I was assuming this class would use a WebPageProxy instead of a web view.

Hrm, just so that I understand your suggestion, you are suggesting I take a WebPageProxy on construction and then take a GtkWidget later for the purposes of positioning the results window?

Wouldn&apos;t it be preferable just to take a WebKWebViewBase on construction?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649190</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-14 08:11:19 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; 
&gt; &gt; &gt; &gt; You are keeping the webView, but it&apos;s only used to get the page. The web view is then used without checking whether it has been set already or not. I think this class could be created with a page, and this method would simply call GtkInputMethodFilter::setWidget() without keeping the web view. You couldn&apos;t allocate the class in the stack, but I don&apos;t think it&apos;s a problem.
&gt; 
&gt; &gt; You are right, I was assuming this class would use a WebPageProxy instead of a web view.
&gt; 
&gt; Hrm, just so that I understand your suggestion, you are suggesting I take a WebPageProxy on construction and then take a GtkWidget later for the purposes of positioning the results window?
&gt; 
&gt; Wouldn&apos;t it be preferable just to take a WebKWebViewBase on construction?

Yes, that would work too, but I still think that class wants a page proxy, not a web view, and most of the UIProcess objects take a page proxy on construction. Some of them take both though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649193</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-14 08:13:59 -0700</bug_when>
    <thetext>(In reply to comment #11)

&gt; &gt; Wouldn&apos;t it be preferable just to take a WebKWebViewBase on construction?
&gt; 
&gt; Yes, that would work too, but I still think that class wants a page proxy, not a web view, and most of the UIProcess objects take a page proxy on construction. Some of them take both though.

Hrm. We definitely pass the widget, so perhaps it makes sense to only pass one of those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685433</commentid>
    <comment_count>13</comment_count>
      <attachid>156097</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-02 08:38:21 -0700</bug_when>
    <thetext>Created attachment 156097
Respond to review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685438</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 08:41:25 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686505</commentid>
    <comment_count>15</comment_count>
      <attachid>156097</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-03 03:18:40 -0700</bug_when>
    <thetext>Comment on attachment 156097
Respond to review comments

Rejecting attachment 156097 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
Kit/chromium/third_party/yasm/source/patched-yasm --revision 134927 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
48&gt;At revision 134927.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/13417848</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797967</commentid>
    <comment_count>16</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-28 12:33:13 -0800</bug_when>
    <thetext>Committed r138544: &lt;http://trac.webkit.org/changeset/138544&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101856</attachid>
            <date>2011-07-25 02:03:19 -0700</date>
            <delta_ts>2012-06-10 16:39:20 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>ime_composition.patch</filename>
            <type>text/plain</type>
            <size>12954</size>
            <attacher name="Joone Hur">joone.hur</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhNDdjM2FjLi4wZGE1YjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAg
QEAKKzIwMTEtMDctMjQgIEpvb25lIEh1ciAgPGpvb25lLmh1ckBjb2xsYWJvcmEuY28udWs+CisK
KyAgICAgICAgW0dUS11bV0syXSBBZGQgc3VwcG9ydCBmb3IgSU1FIENvbXBvc2l0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA5MworICAgICAg
ICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBoYW5kbGUgY29tbWl0IGFuZCBwcmVlZGl0LWNoYW5n
ZWQgSU1FIHNpZ25hbHMuCisgICAgICAgIEl0IHdvdWxkIGFsbG93IHVzIHRvIGVudGVyIGNvbXBs
ZXggY2hhcmFjdGVycyBzdWNoIGFzIEtvcmVhbiBIYW5ndWwgYnkgdXNpbmcgCisgICAgICAgIGEg
c3RhbmRhcmQga2V5Ym9hcmQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHA6CisgICAgICAgIChpbUNvbnRleHRDb21taXR0ZWQpOiBBZGQgY29tbWl0
IHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAoaW1Db250ZXh0UHJlZWRpdENoYW5nZWQpOiBBZGQg
cHJlZWRpdC1jaGFuZ2VkIHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2Jhc2VfaW5pdCk6IENvbm5lY3QgY29tbWl0IGFuZCBwcmVlZGl0LWNoYW5nZWQgc2lnbmFsIGhh
bmRsZXJzLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VCdXR0b25QcmVzc0V2ZW50KTogQ2xl
YXIgdGhlIGN1cnJlbnQgY29tcG9zaXRpb24gc3RyaW5nLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluOiBBZGQgU2V0SW5wdXRNZXRob2RTdGF0ZSBtZXNzYWdlLgorICAgICAgICAqIFVJUHJvY2Vz
cy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzZXRJbnB1dE1ldGhvZFN0YXRlKTogSGFuZGxlIElNRSBmb2N1cy4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjppbUNvbnRleHRDb21taXR0ZWQpOiBTZW5kIGEgSU1FIGNvbW1pdCBt
ZXNzYWdlIHRvIGEgd2ViIHByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
aW1Db250ZXh0UHJlZWRpdENoYW5nZWQpOiBTZW5kIGEgSU1FIHByZWVkaXQgbWVzc2FnZSB0byBh
IHdlYiBwcm9jZXNzLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzZXRJbnB1
dE1ldGhvZFN0YXRlKTogQWRkIFNldElucHV0TWV0aG9kU3RhdGUgaGFuZGxlciBvZiBhIHdlYiBw
cm9jZXNzLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9y
Q2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVJ
bnB1dE1ldGhvZE1vdXNlUHJlc3MpOiBBbGxvd3MgdG8gY29uZmlybSB0aGUgY3VycmVudCBjb21w
b3NpdGlvbiAKKyAgICAgICAgc3RyaW5nIHdoZW4gYSBtb3VzZSBwcmVzcyBldmVudCBpcyB0cmln
Z2VyZWQgb24gYSB3ZWIgcGFnZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHA6IAorICAgICAgICAoV2ViS2l0OjpoYW5kbGVNb3VzZUV2ZW50KTogQ2FsbCBoYW5kbGVJ
bnB1dE1ldGhvZE1vdXNlUHJlc3Mgd2hlbiBhIGhhbmRsZU1vdXNlRXZlbnQgCisgICAgICAgIG1l
c3NhZ2UgaXMgaGFuZGxlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOiBBZGQg
SU1FIHNpZ25hbCBtZXNzYWdlcy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
YlBhZ2VHdGsuY3BwOiBIYW5kbGUgSU1FIG1lc3NhZ2VzIGRlbGl2ZXJlZCBmcm9tIHRoZSBVSSBw
cm9jZXNzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjppbUNvbnRleHRDb21taXR0ZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjppbUNvbnRleHRQcmVlZGl0Q2hhbmdlZCk6CisKIDIw
MTEtMDctMjIgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V2ViS2l0Ml0gQ2hhbmdpbmcgdGhlIGNvb2tpZSBhY2NlcHQgcG9saWN5IGluIFByaXZhdGUgQnJv
d3NpbmcgZG9lc27igJl0IHdvcmsuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggN2ZhZjg0Mi4uYjExYmIyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlLmNwcApAQCAtNjAsNiArNjAsMTkgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUgewogCiBHX0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXdCYXNlLCB3ZWJraXRfd2Vi
X3ZpZXdfYmFzZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQogCitzdGF0aWMgdm9pZCBpbUNvbnRleHRD
b21taXR0ZWQoR3RrSU1Db250ZXh0KiBjb250ZXh0LCBjb25zdCBnY2hhciogY29tcG9zaXRpb25T
dHJpbmcsIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKK3sKKyAgICB3ZWJr
aXRXZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5pbUNvbnRleHRDb21taXR0ZWQoU3RyaW5n
Ojpmcm9tVVRGOChjb21wb3NpdGlvblN0cmluZykpOworfQorCitzdGF0aWMgdm9pZCBpbUNvbnRl
eHRQcmVlZGl0Q2hhbmdlZChHdGtJTUNvbnRleHQqIGNvbnRleHQsIFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJraXRXZWJWaWV3QmFzZSkKK3sKKyAgICBHT3duUHRyPGdjaGFyPiBuZXdQcmVlZGl0KDAp
OworICAgIGd0a19pbV9jb250ZXh0X2dldF9wcmVlZGl0X3N0cmluZyhjb250ZXh0LCAmbmV3UHJl
ZWRpdC5vdXRQdHIoKSwgMCwgMCk7CisKKyAgICB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+cGFn
ZVByb3h5LT5pbUNvbnRleHRQcmVlZGl0Q2hhbmdlZChTdHJpbmc6OmZyb21VVEY4KG5ld1ByZWVk
aXQuZ2V0KCkpKTsKK30KKwogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VSZWFsaXplKEd0
a1dpZGdldCogd2lkZ2V0KQogewogICAgIGd0a193aWRnZXRfc2V0X3JlYWxpemVkKHdpZGdldCwg
VFJVRSk7CkBAIC0xMzUsNiArMTQ4LDkgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jh
c2VfaW5pdChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiAgICAgcHJpdi0+
aW1Db250ZXh0ID0gZ3RrX2ltX211bHRpY29udGV4dF9uZXcoKTsKIAogICAgIHByaXYtPnBhZ2VD
bGllbnQgPSBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlKEdUS19XSURHRVQod2Via2l0V2ViVmlld0Jh
c2UpKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+aW1Db250ZXh0LCAiY29tbWl0Iiwg
R19DQUxMQkFDSyhpbUNvbnRleHRDb21taXR0ZWQpLCB3ZWJraXRXZWJWaWV3QmFzZSk7CisgICAg
Z19zaWduYWxfY29ubmVjdChwcml2LT5pbUNvbnRleHQsICJwcmVlZGl0LWNoYW5nZWQiLCBHX0NB
TExCQUNLKGltQ29udGV4dFByZWVkaXRDaGFuZ2VkKSwgd2Via2l0V2ViVmlld0Jhc2UpOwogfQog
CiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmF3KEd0a1dpZGdldCogd2lkZ2V0
LCBjYWlyb190KiBjcikKQEAgLTIyNiw2ICsyNDIsMTMgQEAgc3RhdGljIGdib29sZWFuIHdlYmtp
dFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRC
dXQKIAogICAgIGlmICghcHJpdi0+Y2xpY2tDb3VudGVyLnNob3VsZFByb2Nlc3NCdXR0b25FdmVu
dChidXR0b25FdmVudCkpCiAgICAgICAgIHJldHVybiBUUlVFOworCisgICAgLy8gVGhlIGN1cnJl
bnQgcHJlZWRpdCBzdHJpbmcgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciB0aGUgbmV4dCBjb21wb3Np
dGlvbi4KKyAgICBHT3duUHRyPGdjaGFyPiBuZXdQcmVlZGl0KDApOworICAgIGd0a19pbV9jb250
ZXh0X2dldF9wcmVlZGl0X3N0cmluZyhwcml2LT5pbUNvbnRleHQsICZuZXdQcmVlZGl0Lm91dFB0
cigpLCAwLCAwKTsKKyAgICBpZiAoZ191dGY4X3N0cmxlbihuZXdQcmVlZGl0LmdldCgpLCAtMSkp
CisgICAgICAgIGd0a19pbV9jb250ZXh0X3Jlc2V0KHByaXYtPmltQ29udGV4dCk7CisgICAgIAog
ICAgIHByaXYtPnBhZ2VQcm94eS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50
KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihidXR0b25FdmVudCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmNsaWNrQ291bnRl
ci5jbGlja0NvdW50Rm9yR2RrQnV0dG9uRXZlbnQod2lkZ2V0LCBidXR0b25FdmVudCkpKTsKICAg
ICByZXR1cm4gRkFMU0U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5k
ZXggNTBiOGI2Ny4uNzYxOWVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaApAQCAtMzUwLDYgKzM1MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVUb3VjaEV2
ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
R1RLKQorICAgIHZvaWQgaW1Db250ZXh0Q29tbWl0dGVkKGNvbnN0IFN0cmluZyYpOworICAgIHZv
aWQgaW1Db250ZXh0UHJlZWRpdENoYW5nZWQoY29uc3QgU3RyaW5nJik7CisjZW5kaWYKKwogICAg
IHZvaWQgc2Nyb2xsQnkoV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxH
cmFudWxhcml0eSk7CiAgICAgdm9pZCBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCk7CiAK
QEAgLTY5MSw3ICs2OTYsOSBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIHZv
aWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0
b3I8U3RyaW5nPiYpOworICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGFjdGl2ZSk7
CiAjZW5kaWYKKwogI2lmIFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIGdldEVkaXRvckNvbW1hbmRz
Rm9yS2V5RXZlbnQoVmVjdG9yPFN0cmluZz4mKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggYTI2ODFjMC4uNmJj
ODcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5t
ZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCkBAIC0xNDAsNiArMTQwLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsK
ICNpZiBQTEFURk9STShHVEspCiAgICAgIyBTdXBwb3J0IGZvciBHVEsrIHBsYXRmb3JtIGtleWJp
bmRpbmdzCiAgICAgR2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChBdG9taWNTdHJpbmcgZXZl
bnRUeXBlKSAtPiAoVmVjdG9yPFdURjo6U3RyaW5nPiBjb21tYW5kc0xpc3QpCisgICAgU2V0SW5w
dXRNZXRob2RTdGF0ZShib29sIGFjdGl2ZSkKICNlbmRpZgogCiAgICAgIyBCYWNrRm9yd2FyZCBt
ZXNzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdl
UHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlH
dGsuY3BwCmluZGV4IDExMjdkZGUuLmI4ZWY0MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKQEAgLTMwLDYgKzMwLDEwIEBACiAjaW5j
bHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3
QmFzZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYlBhZ2VNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIApAQCAtNDksNiArNTMsMjUgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omdl
dEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IFYKICAgICBtX3BhZ2VDbGllbnQtPmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQobV9rZXlF
dmVudFF1ZXVlLmZpcnN0KCksIGV2ZW50VHlwZSwgY29tbWFuZHNMaXN0KTsKIH0KIAordm9pZCBX
ZWJQYWdlUHJveHk6OnNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBhY3RpdmUpCit7CisgICAgR3Rr
SU1Db250ZXh0KiBpbUNvbnRleHQgPSB3ZWJraXRXZWJWaWV3QmFzZUdldElNQ29udGV4dChXRUJL
SVRfV0VCX1ZJRVdfQkFTRSh2aWV3V2lkZ2V0KCkpKTsKKyAgICBpZiAoYWN0aXZlKQorICAgICAg
ICBndGtfaW1fY29udGV4dF9mb2N1c19pbihpbUNvbnRleHQpOworICAgIGVsc2UKKyAgICAgICAg
Z3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KGltQ29udGV4dCk7Cit9CisKK3ZvaWQgV2ViUGFnZVBy
b3h5OjppbUNvbnRleHRDb21taXR0ZWQoY29uc3QgU3RyaW5nJiBjb21wb3NpdGlvblN0cmluZykK
K3sKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OmltQ29udGV4dENvbW1p
dHRlZChjb21wb3NpdGlvblN0cmluZyksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJv
eHk6OmltQ29udGV4dFByZWVkaXRDaGFuZ2VkKGNvbnN0IFN0cmluZyYgcHJlZWRpdFN0cmluZykK
K3sKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OmltQ29udGV4dFByZWVk
aXRDaGFuZ2VkKHByZWVkaXRTdHJpbmcpLCBtX3BhZ2VJRCk7Cit9CisKIHZvaWQgV2ViUGFnZVBy
b3h5OjpzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5k
ZXggN2E0MDhkNy4uZGI5MjRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApAQCAtNDQ1LDkg
KzQ0NSwxMyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6d2lsbFNldElucHV0TWV0aG9kU3RhdGUo
KQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRJ
bnB1dE1ldGhvZFN0YXRlKGJvb2wpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6c2V0SW5wdXRNZXRo
b2RTdGF0ZShib29sIGFjdGl2ZSkKIHsKKyNpZiBQTEFURk9STShHVEspCisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldElucHV0TWV0aG9kU3RhdGUoYWN0aXZlKSk7
CisjZWxzZQogICAgIG5vdEltcGxlbWVudGVkKCk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcios
IGludCwgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2ssIGNvbnN0IFdURjo6U3RyaW5nJikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCmluZGV4IDJmOTg4YTkuLjJjYjVjYzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaApAQCAtNDAsNiArNDAsMTAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyNpZiBQ
TEFURk9STShHVEspCisgICAgdm9pZCBoYW5kbGVJbnB1dE1ldGhvZE1vdXNlUHJlc3MoKTsKKyNl
bmRpZgorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYWdlRGVzdHJveWVkKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dl
YkVkaXRvckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCmluZGV4IDQxYzdlNDYuLmM1ZmNlZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYkVkaXRvckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcApAQCAtMjUsOCArMjUsMTAg
QEAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRy
b2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0xMjcsNCArMTI5LDEzIEBAIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCopCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0
TWV0aG9kTW91c2VQcmVzcygpCit7CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5jb3JlUGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWUtPmVkaXRvcigpLT5jb25maXJtQ29t
cG9zaXRpb24oKTsKK30KKyAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAppbmRleCBjMGUyNTBhLi5lZmMzZTllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xMDQ1LDYgKzEwNDUsMTAgQEAg
c3RhdGljIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2
ZW50LCBQYWdlKiBwYWdlKQogICAgICAgICAgICAgaWYgKGlzQ29udGV4dENsaWNrKHBsYXRmb3Jt
TW91c2VFdmVudCkpCiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IGhhbmRsZUNvbnRleHRNZW51
RXZlbnQocGxhdGZvcm1Nb3VzZUV2ZW50LCBwYWdlKTsKIAorI2lmIFBMQVRGT1JNKEdUSykKKyAg
ICAgICAgICAgIChzdGF0aWNfY2FzdDxXZWJFZGl0b3JDbGllbnQqPihwYWdlLT5lZGl0b3JDbGll
bnQoKSkpLT5oYW5kbGVJbnB1dE1ldGhvZE1vdXNlUHJlc3MoKTsKKyNlbmRpZgorCiAgICAgICAg
ICAgICByZXR1cm4gaGFuZGxlZDsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYkNvcmU6Ok1v
dXNlRXZlbnRSZWxlYXNlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCmluZGV4IDk1ZjRkYzcuLjU0ZTMxNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTc2LDYgKzE3NiwxMSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIGltQ29udGV4dENvbW1pdHRl
ZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGltQ29udGV4dFByZWVkaXRDaGFuZ2VkKGNvbnN0
IFN0cmluZyYpOworI2VuZGlmCisKICAgICB2b2lkIHNob3coKTsKICAgICBTdHJpbmcgdXNlckFn
ZW50KCkgY29uc3QgeyByZXR1cm4gbV91c2VyQWdlbnQ7IH0KICAgICBXZWJDb3JlOjpJbnRSZWN0
IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDAyMmU1YjkuLjMxZTg4
NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCkBAIC0yMDUsNiArMjA1LDEyIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2Ug
ewogICAgIFNob3VsZERlbGF5V2luZG93T3JkZXJpbmdFdmVudChXZWJLaXQ6OldlYk1vdXNlRXZl
bnQgZXZlbnQpIC0+IChib29sIHJlc3VsdCkKICAgICBBY2NlcHRzRmlyc3RNb3VzZShpbnQgZXZl
bnROdW1iZXIsIFdlYktpdDo6V2ViTW91c2VFdmVudCBldmVudCkgLT4gKGJvb2wgcmVzdWx0KQog
I2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspCisgICAgaW1Db250ZXh0Q29tbWl0dGVkKFdURjo6
U3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5nKQorICAgIGltQ29udGV4dFByZWVkaXRDaGFuZ2VkKFdU
Rjo6U3RyaW5nIHByZWVkaXRTdHJpbmcpCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICAvLyBGSVhNRTogVW5pZnkgd2l0aCBNYWMgY291bnRlcnBhcnRzLgogICAgIENvbmZpcm1Db21w
b3NpdGlvbihXVEY6OlN0cmluZyBjb21wb3NpdGlvblN0cmluZykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCmluZGV4IGEyNWUx
ZjcuLjU5OWZiMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9ndGsvV2ViUGFnZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlR3RrLmNwcApAQCAtMTAzLDYgKzEwMywyNiBAQCBib29sIFdlYlBhZ2U6
OnBlcmZvcm1EZWZhdWx0QmVoYXZpb3JGb3JLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50
JiBrZXlib2FyZAogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIFdlYlBhZ2U6OmltQ29udGV4
dENvbW1pdHRlZChjb25zdCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nKQoreworICAgIEZyYW1l
KiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgp
OworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbihjb21w
b3NpdGlvblN0cmluZyk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6aW1Db250ZXh0UHJlZWRpdENoYW5n
ZWQoY29uc3QgU3RyaW5nJiBwcmVlZGl0U3RyaW5nKQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICgh
ZnJhbWUgfHwgIWZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7IAorICAgIHVuZGVy
bGluZXMuYXBwZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5lKDAsIHByZWVkaXRTdHJpbmcubGVuZ3Ro
KCksIENvbG9yKDAsIDAsIDApLCBmYWxzZSkpOworICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0Q29t
cG9zaXRpb24ocHJlZWRpdFN0cmluZywgdW5kZXJsaW5lcywgMCwgMCk7Cit9CisKIGJvb2wgV2Vi
UGFnZTo6cGxhdGZvcm1IYXNMb2NhbERhdGFGb3JVUkwoY29uc3QgS1VSTCYpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>137996</attachid>
            <date>2012-04-19 15:54:50 -0700</date>
            <delta_ts>2012-04-19 15:54:50 -0700</delta_ts>
            <desc>Test page</desc>
            <filename>ime_key_events.html</filename>
            <type>text/html</type>
            <size>1425</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">PGh0bWw+PGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4
dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgp2YXIgbiA9IDAgOwoKZnVuY3Rpb24gYXR0YWNoKCkKewogIHZhciBlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImlucHV0Iik7CiAgZS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwg
bG9nLCBmYWxzZSk7CiAgZS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIGxvZywgZmFsc2UpOwog
IGUuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLCBsb2csIGZhbHNlKTsKICBlLmFkZEV2ZW50
TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCBsb2csIGZhbHNlKTsKICBlLmFkZEV2ZW50TGlz
dGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgbG9nLCBmYWxzZSk7CiAgZS5hZGRFdmVudExpc3RlbmVy
KCJjb21wb3NpdGlvbnVwZGF0ZSIsIGxvZywgZmFsc2UpOwogIGUuYWRkRXZlbnRMaXN0ZW5lcigi
dGV4dElucHV0IiwgbG9nLCBmYWxzZSk7CiAgZS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIGxv
ZywgZmFsc2UpOwp9CgpmdW5jdGlvbiBkZXRhY2goKQp7CiAgdmFyIGUgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaW5wdXQiKTsKICBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBs
b2csIGZhbHNlKTsKICBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIiwgbG9nLCBmYWxzZSk7
CiAgZS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsIGxvZywgZmFsc2UpOwogIGUucmVt
b3ZlRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsIGxvZywgZmFsc2UpOwogIGUucmVt
b3ZlRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCBsb2csIGZhbHNlKTsKICBlLnJlbW92
ZUV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9udXBkYXRlIiwgbG9nLCBmYWxzZSk7CiAgZS5yZW1v
dmVFdmVudExpc3RlbmVyKCJ0ZXh0SW5wdXQiLCBsb2csIGZhbHNlKTsKICBlLnJlbW92ZUV2ZW50
TGlzdGVuZXIoImlucHV0IiwgbG9nLCBmYWxzZSk7Cn0KCmZ1bmN0aW9uIGxvZyhhRXZlbnQpCnsK
ICB2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsKICBuID0gbisxOwogIHZh
ciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobiArICIuICIgKyBhRXZlbnQudHlwZSAr
ICJcbiIpOwogIC8vZS5pbnNlcnRCZWZvcmUodGV4dCwgZS5maXJzdENoaWxkKTsKICBlLmFwcGVu
ZENoaWxkKHRleHQpOwp9Cjwvc2NyaXB0Pgo8L2hlYWQ+PGJvZHkgb25sb2FkPSJhdHRhY2goKSIg
b251bmxvYWQ9ImRldGFjaCgpIj4KPGlucHV0IGlkPSJpbnB1dCI+CjxwcmUgaWQ9ImxvZyIgc3R5
bGU9Im92ZXJmbG93OiBhdXRvOyB3aWR0aDogMzAwcHg7Ij48L3ByZT4KPC9ib2R5PjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146755</attachid>
            <date>2012-06-10 16:39:24 -0700</date>
            <delta_ts>2012-08-02 08:38:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65093-20120610163923.patch</filename>
            <type>text/plain</type>
            <size>61785</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTM5YWI0MTg1NmY5ZTdk
MzEwMDc5NDBiZGNmNjUzNjIyNjliMGQyYy4uYjM1MzA2NmM2ZTUxZTQ3MzY4NDIwNGQyMmQ4NDI1
ZDdjNDJlZGFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA2LTEwICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXSzJd
IEFkZCBzdXBwb3J0IGZvciBJTUUgQ29tcG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGUgR3RrSW5wdXRNZXRob2RG
aWx0ZXIgaXMgY292ZXJlZCBieSB1bml0IHRlc3RzIGluIFRlc3RXZWJLaXRBUEkuCisgICAgICAg
IERvaW5nIGZ1bmN0aW9uYWwgdGVzdHMgZm9yIHRoaXMgYmVoYXZpb3IgaXMgbXVjaCBtb3JlIGNv
bXBsZXguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRDb21wb3NpdGlv
bkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyk6IE5vdworICAgICAgICBwYXNzIGFsb25nIHdo
ZXRoZXIgb3Igbm90IGFuIGV2ZW50IHdhcyBmYWtlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
R3RrSW5wdXRNZXRob2RGaWx0ZXIuaDogRGl0dG8uCisKIDIwMTItMDYtMDggIEFsZXhleSBQcm9z
a3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNDEy
Mjk0PiBBZGQgYXBwcm9wcmlhdGUgaU9TIGRlZmF1bHQgZm9udCBzZXR0aW5ncwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCmluZGV4IDAwZGZlZmM2MWMwNmZjNzkyZTFlNWEwYTU3ZmE3ZDZhOWY5ODEyYmQuLjJjNGU4
NTRjZDFhZjk4YzY2ZjIzNWZiN2YwODVkYjk2NWQ3NTBiMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOSBAQAorMjAxMi0wNi0xMCAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV0syXSBBZGQgc3VwcG9ydCBmb3IgSU1FIENvbXBv
c2l0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NTA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVw
ZGF0ZSB0aGUgbWV0aG9kIHNpZ25hdHVyZXMgZm9yIGNvbmNyZXRlIFdlYktpdDEgaW1wbGVtZW50
YXRpb24gb2YKKyAgICAgICAgdGhlIEd0a0lucHV0TWV0aG9kRmlsdGVyLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0lucHV0TWV0aG9kRmlsdGVyOjpzZW5kU2ltcGxlS2V5RXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRLZXlFdmVudFdpdGhD
b21wb3NpdGlvblJlc3VsdHMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpZXdJbnB1
dE1ldGhvZEZpbHRlci5oOgorICAgICAgICAoV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyKToKKwog
MjAxMi0wNi0wNyAgU2ltb24gUGVuYSAgPHNwZW5hQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gZGV2aWNlU2NhbGVGYWN0b3Igc2V0dGluZyBpcyBub3QgaG9ub3JlZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IDYyZjVhZjk3NTU3YjdiZmI1N2ZiZTM0ZGVkMGQzOTI0MGM2YzM3ZDQuLjdhYjEwMjM2YzBiODgy
MDBiZDc4NzkxZWYzZGUyYjg4ODk4MDJlZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MCBAQAor
MjAxMi0wNi0xMCAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS11bV0syXSBBZGQgc3VwcG9ydCBmb3IgSU1FIENvbXBvc2l0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA5MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIFdlYktpdDIgaW1w
bGVtZW50YXRpb24gb2YgdGhlIEd0a0lucHV0TWV0aG9kRmlsdGVyIGFuZCBwcm92aWRlCisgICAg
ICAgIHRoZSBuZWNlc3NhcnkgcGx1bWJpbmcgdG8gcGFzcyBjb21wb3NpdGlvbiBpbmZvcm1hdGlv
biBhbG9uZyB3aXRoCisgICAgICAgIGlucHV0IG1ldGhvZCBldmVudHMuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgbmV3IGZpbGVzIHRvIHRoZSBzb3VyY2UgbGlzdC4KKyAg
ICAgICAgKiBTaGFyZWQvRWRpdG9yU3RhdGUuY3BwOiBUaGUgY3Vyc29yUmVjdCBpcyBub3cgcGFz
c2VkIGZvciBHVEsrIGFzIHdlbGwgYXMKKyAgICAgICAgUXQsIHNvIHVwZGF0ZSB0aGUgZW5jb2Rl
IGFuZCBkZWNvZGUgbWV0aG9kcyB0byBwYXNzIHRoYXQgYWxvbmcuCisgICAgICAgICogU2hhcmVk
L0VkaXRvclN0YXRlLmg6IEFkZCB0aGUgY3Vyc29yUmVjdCBtZW1iZXIgZm9yIEdUSysgYXMgd2Vs
bC4KKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAo
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCk6IEtleWJvYXJkIGV2ZW50cyBzaG91bGQgYWxzbyBoYXZl
IGtub3dsZWRnZSBvZgorICAgICAgICB0aGUgY29tcG9zaXRpb25SZXN1bHRzIGFuZCB3aGV0aGVy
IG9yIG5vdCB0aGUgZXZlbnQgd2FzIGZha2VkIGZvciBjb21wb3NpdGlvbgorICAgICAgICBwdXJw
b3Nlcy4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3Bw
OiBEaXR0by4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudCk6IENv
cHkgdGhlIGxvZ2ljIG9mIFBsYXRmb3JtS2V5RXZlbnQsCisgICAgICAgIGZvciBwcm9wZXJseSBz
ZXR0aW5nIHRoZSB3aW5kb3dzIGtleSBjb2RlIGFuZCB0aGUgZXZlbnQgdGV4dCBmcm9tIHRoZSBj
b21wb3NpdGlvbgorICAgICAgICByZXN1bHRzLgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5Lmg6IFRoZSBjcmVhdGVXZWJLZXlib2FyZEV2ZW50IGZhY3Rvcnkgbm93IHRha2Vz
IGEKKyAgICAgICAgQ29tcG9zaXRpb25SZXN1bHRzIGFyZ3VtZW50LgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OmRvbmVXaXRoS2V5RXZlbnQpOiBEb24ndCBmb3J3YXJkIGtleWJvYXJkIGV2ZW50
cyB0aGF0CisgICAgICAgIHdlcmUgZmFrZWQgZm9yIGNvbXBvc2l0aW9uIHJlYXNvbnMuIFRoZXNl
IGV2ZW50cyBvcmlnaW5hdGVkIGZyb20gV2ViS2l0IGFuZCBzaG91bGQKKyAgICAgICAgbmV2ZXIg
YmUgcGFzc2VkIHRvIHBhcmVudCBjbGFzc2VzLgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6dXBkYXRlVGV4dElucHV0U3RhdGUpOiBQbHVtYiB0aHJvdWdoIHRoZSB1cGRhdGVUZXh0
SW5wdXRTdGF0ZQorICAgICAgICBtZXRob2QgdG8gdGhlIFdlYlZpZXdCYXNlLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgIChQYWdlQ2xpZW50
SW1wbCk6IEFkZCBhIHVwZGF0ZVRleHRJbnB1dFN0YXRlIG1ldGhvZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6IAorICAgICAgICAoX1dlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZSk6IEluc3RlYWQgb2YgaGF2aW5nIGFuIGlucHV0IG1ldGhvZCBjb250
ZXh0IGFzIGEgbWVtYmVyCisgICAgICAgIGtlZXAgYSBXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmls
dGVyLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VSZWFsaXplKTogU2V0IHRoZSBmaWx0ZXIg
d2lkZ2V0IHdoZW4gdGhlIFdlYlZpZXdCYXNlIGlzIHJlYWxpemVkLgorICAgICAgICAod2Via2l0
X3dlYl92aWV3X2Jhc2VfaW5pdCk6IE5vIGxvbmdlciBjcmVhdGUgYSBpbnB1dCBtZXRob2QgY29u
dGV4dCBkdXJpbmcgaW5pdC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRm9jdXNJbkV2ZW50
KTogUGFzcyBhbG9uZyBmb2N1cyBpbiBldmVudHMgdG8gdGhlIGZpbHRlci4KKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdCYXNlRm9jdXNPdXRFdmVudCk6IFBhc3MgYWxvbmcgZm9jdXMgb3V0IGV2ZW50
cyB0byB0aGUgZmlsdGVyLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VLZXlQcmVzc0V2ZW50
KTogSW5zdGVhZCBvZiBwYXNzaW5nIGtleSBwcmVzc2VzIGRpcmVjdGx5IHRvIHRoZSBXZWJQcm9j
ZXNzLAorICAgICAgICBmaWx0ZXIgdGhlbSB0aHJvdWdoIHRoZSBpbnB1dCBtZXRob2QgZmlsdGVy
LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VLZXlSZWxlYXNlRXZlbnQpOiBEaXR0by4KKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlQnV0dG9uUHJlc3NFdmVudCk6IE5vdGlmeSB0aGUgaW5w
dXQgbWV0aG9kIGZpbHRlciBhYm91dCBidXR0b24gcHJlc3MgZXZlbnRzLgorICAgICAgICAod2Vi
a2l0V2ViVmlld0Jhc2VHZXRJTUNvbnRleHQpOiBUaGUgaW5wdXQgbWV0aG9kIGZpbHRlciBvd25z
IHRoZSBpbnB1dCBtZXRob2Qgbm93LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTZXRJbnB1
dE1ldGhvZFN0YXRlKTogQWRkIGEgYml0IG9mIHBsdW1iaW5nIGZvciB0aGUgUGFnZUNsaWVudC4K
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlVXBkYXRlVGV4dElucHV0U3RhdGUpOiBEaXR0by4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDog
QWRkIHBsdW1iaW5nIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmNwcDogQWRkZWQuIEFuIGltcGxlbWVudGF0aW9u
IG9mIEd0a0lucHV0TWV0aG9kRmlsdGVyIGZvciBXZWJLaXQyLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmgu
CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKFBhZ2VDbGllbnQp
OiB1cGRhdGVJbnB1dE1ldGhvZCBzdGF0ZSBpcyBub3cgZm9yIGJvdGggUXQgYW5kIEdUSysuCisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6ZWRpdG9yU3RhdGVDaGFuZ2VkKTogUGFzcyB0aGUgZWRpdG9yIHN0YXRlIGZv
ciBHVEsrIGFzIHdlbGwgYXMgUXQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0
Q29tcG9zaXRpb24pOiBNb3ZlZCB0aGlzIG1ldGhvZCBmcm9tIFdlYlBhZ2VQcm94eVF0IGFzIGl0
J3MgdXNlZCBmb3IgR1RLKyBub3cgYXMgd2VsbC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojpjb25maXJtQ29tcG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpjYW5jZWxDb21wb3NpdGlvbik6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKFdlYlBhZ2VQcm94eSk6IFRoZSBzZXRJbnB1dE1ldGhv
ZFN0YXRlIG1lc3NhZ2UgaXMgZm9yIEdUSysgYXMgd2VsbCBhcyBRdCBub3cuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjogRGl0dG8uCisgICAgICAgICogVUlQ
cm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldElucHV0TWV0aG9kU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
cXQvV2ViUGFnZVByb3h5UXQuY3BwOiBNb3ZlIHNvbWUgbWV0aG9kcyB0byB0aGUgcGxhdGZvcm0t
aW5kZXBlbmRlbnQgZmlsZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwOiBNb3JlIGNsb3NlbHkgbWF0Y2ggdGhlIFdlYktpdDEK
KyAgICAgICAgbG9naWMgZm9yIGRlYWxpbmcgd2l0aCBrZXkgZXZlbnRzIHNvIHRoYXQgY29tcG9z
aXRpb24gZXZlbnRzIHdpbGwgYmUgaGFuZGxlZCBwcm9wZXJseS4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVkaXRv
clN0YXRlKTogUHJvcGVybHkgcGFzcyB0aGUgY3Vyc29yUmVjdCBmb3IgR1RLKy4KKyAgICAgICAg
KFdlYktpdDo6dGFyZ2V0RnJhbWVGb3JFZGl0aW5nKTogTW92ZWQgZnJvbSB0aGUgUXQgZmlsZSwg
YmVjYXVzZSBpdHMgdXNlZCBieSBHVEsrIGFzIHdlbGwuIFRoZXkKKyAgICAgICAgbm93IHBhc3Mg
YWxvbmcgdGhlIHVwZGF0ZWQgRWRpdG9yU3RhdGUgYXMgd2VsbCwganVzdCBsaWtlIHRoZSBNYWMg
dmVyc2lvbnMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbmZpcm1Db21wb3NpdGlvbik6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRDb21wb3NpdGlvbik6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjYW5jZWxDb21wb3NpdGlvbik6IERpdHRvLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6IFRoZSBhYm92ZSBtZXNzYWdl
cyBhcmUgbm93IGZvciBHVEsrIGFzIHdlbGwgYXMgUXQuCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwOiBNb3ZlZCBzb21lIG1ldGhvZHMgdG8gdGhlIHBsYXRm
b3JtLWluZGVwZW5kZW50IGZpbGUuCisKIDIwMTItMDYtMDggIFZpYXRjaGVzbGF2IE9zdGFwZW5r
byAgPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBbV0sy
XSBBUEkgdGVzdHMgcmFuZG9tbHkgYXNzZXJ0IGluIFdlYkxheWVyVHJlZVJlbmRlcmVyOjphc3Np
Z25JbWFnZVRvTGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtJbnB1dE1ldGhvZEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
SW5wdXRNZXRob2RGaWx0ZXIuY3BwCmluZGV4IGRhMGVjN2ZhMDMxNGM4Njg5NWQ3YzE2YTIwMDMy
MDQyMTM2YTI3ZjcuLmVjMDhiMTNiOTdkZjc2ZGU0ZmVmZmVkYmU4NTE3Y2NhOTQwN2Y5ZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmls
dGVyLmNwcApAQCAtMjcyLDEzICsyNzIsMTMgQEAgdm9pZCBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6
c2VuZENvbXBvc2l0aW9uQW5kUHJlZWRpdFdpdGhGYWtlS2V5RXZlbnRzKFJlc3VsdHNUb1MKICAg
ICBHT3duUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRfbmV3KEdES19LRVlfUFJFU1MpKTsK
ICAgICBldmVudC0+a2V5LnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwogICAgIGV2ZW50LT5rZXku
a2V5dmFsID0gZ0NvbXBvc2l0aW9uRXZlbnRLZXlDb2RlOwotICAgIHNlbmRLZXlFdmVudFdpdGhD
b21wb3NpdGlvblJlc3VsdHMoJmV2ZW50LT5rZXksIHJlc3VsdHNUb1NlbmQpOworICAgIHNlbmRL
ZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoJmV2ZW50LT5rZXksIHJlc3VsdHNUb1NlbmQs
IEZha2VFdmVudCk7CiAKICAgICBtX2NvbmZpcm1lZENvbXBvc2l0aW9uID0gU3RyaW5nKCk7CiAg
ICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7CiAKICAgICBldmVudC0+dHlwZSA9
IEdES19LRVlfUkVMRUFTRTsKLSAgICBzZW5kU2ltcGxlS2V5RXZlbnQoJmV2ZW50LT5rZXkpOwor
ICAgIHNlbmRTaW1wbGVLZXlFdmVudCgmZXZlbnQtPmtleSwgU3RyaW5nKCksIEZha2VFdmVudCk7
CiAgICAgbV9qdXN0U2VudEZha2VLZXlVcCA9IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmgKaW5kZXggOTdhNzczNjc1
YTNlMWU5MGRiY2NkMTUyMjM4OWZhNDc5MDIxMzNkYS4uYWYwMjZhYTUzM2JkOWMzOTFhY2UyM2Uw
N2QxZDZhNDNmYWJkODQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a0lucHV0TWV0aG9kRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a0lucHV0TWV0aG9kRmlsdGVyLmgKQEAgLTU4LDEwICs1OCwxNSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIFByZWVkaXRBbmRDb21wb3NpdGlvbiA9IFByZWVkaXQgKyBDb21wb3NpdGlvbgogICAg
IH07CiAKKyAgICBlbnVtIEV2ZW50RmFrZWQgeworICAgICAgICBGYWtlRXZlbnQsCisgICAgICAg
IFJlYWxFdmVudAorICAgIH07CisKICAgICB2b2lkIHNldFdpZGdldChHdGtXaWRnZXQqKTsKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuRWRpdCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2VuZFNpbXBs
ZUtleUV2ZW50KEdka0V2ZW50S2V5KiwgV1RGOjpTdHJpbmcgZXZlbnRTdHJpbmcgPSBTdHJpbmco
KSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1
bHRzKEdka0V2ZW50S2V5KiwgUmVzdWx0c1RvU2VuZCA9IFByZWVkaXRBbmRDb21wb3NpdGlvbikg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqLCBX
VEY6OlN0cmluZyBldmVudFN0cmluZyA9IFN0cmluZygpLCBFdmVudEZha2VkID0gUmVhbEV2ZW50
KSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3Vs
dHMoR2RrRXZlbnRLZXkqLCBSZXN1bHRzVG9TZW5kID0gUHJlZWRpdEFuZENvbXBvc2l0aW9uLCBF
dmVudEZha2VkID0gUmVhbEV2ZW50KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1Db21w
b3NpdGlvblRleHQoU3RyaW5nIGNvbXBvc2l0aW9uKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNv
bmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEN1
cnJlbnRDb21wb3NpdGlvbigpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L1dlYlZpZXdJbnB1dE1ldGhvZEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXIuY3BwCmluZGV4IDI3
MDBkNGE1OWJlYzJmYWU2ZDBjYjNlNjc3NGY3MzAyZjEyYWVjZGEuLmEwMWY5OGJiOWMxMDc5YjNm
OTNkMDQ0NDBlNjljNjFhYmQ5NjdmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L1dlYlZpZXdJbnB1dE1ldGhvZEZpbHRlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmNwcApAQCAt
NTIsMTMgKzUyLDEzIEBAIGJvb2wgV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyOjpjYW5FZGl0KCkK
ICAgICByZXR1cm4gZnJhbWUgJiYgZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7CiB9CiAKLWJv
b2wgV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyOjpzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRL
ZXkqIGV2ZW50LCBXVEY6OlN0cmluZyBzaW1wbGVTdHJpbmcpCitib29sIFdlYlZpZXdJbnB1dE1l
dGhvZEZpbHRlcjo6c2VuZFNpbXBsZUtleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCwgV1RGOjpT
dHJpbmcgc2ltcGxlU3RyaW5nLCBFdmVudEZha2VkKQogewogICAgIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudCBwbGF0Zm9ybUV2ZW50KGV2ZW50LCBDb21wb3NpdGlvblJlc3VsdHMoc2ltcGxlU3RyaW5n
KSk7CiAgICAgcmV0dXJuIGZvY3VzZWRPck1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+a2V5
RXZlbnQocGxhdGZvcm1FdmVudCk7CiB9CiAKLWJvb2wgV2ViVmlld0lucHV0TWV0aG9kRmlsdGVy
OjpzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiBldmVudCwg
UmVzdWx0c1RvU2VuZCByZXN1bHRzVG9TZW5kKQorYm9vbCBXZWJWaWV3SW5wdXRNZXRob2RGaWx0
ZXI6OnNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoR2RrRXZlbnRLZXkqIGV2ZW50
LCBSZXN1bHRzVG9TZW5kIHJlc3VsdHNUb1NlbmQsIEV2ZW50RmFrZWQpCiB7CiAgICAgUGxhdGZv
cm1LZXlib2FyZEV2ZW50IHBsYXRmb3JtRXZlbnQoZXZlbnQsIENvbXBvc2l0aW9uUmVzdWx0cyhD
b21wb3NpdGlvblJlc3VsdHM6OldpbGxTZW5kQ29tcG9zaXRpb25SZXN1bHRzU29vbikpOwogICAg
IGlmICghZm9jdXNlZE9yTWFpbkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChwbGF0
Zm9ybUV2ZW50KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L1dlYlZpZXdJbnB1dE1ldGhvZEZpbHRlci5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmgKaW5kZXggZmQ3MGVkYjhmMTNmYTliNmMx
NTBiMzIxYjVjOWFkOTdkYTE0YTEyNC4uYWRkOTI3ZjJkYmQ4MzUyMGE0YTE4ZTc0YWU5Y2ExMWUx
NWNlYWQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvV2Vi
Vmlld0lucHV0TWV0aG9kRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmgKQEAgLTM1LDggKzM1LDggQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0V2ViVmlldyhXZWJLaXRXZWJWaWV3Kik7CiAKIHByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIGJvb2wgc2VuZFNpbXBsZUtleUV2ZW50KEdka0V2ZW50S2V5KiwgV1RGOjpTdHJp
bmcgZXZlbnRTdHJpbmcpOwotICAgIHZpcnR1YWwgYm9vbCBzZW5kS2V5RXZlbnRXaXRoQ29tcG9z
aXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiwgUmVzdWx0c1RvU2VuZCk7CisgICAgdmlydHVhbCBi
b29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSosIFdURjo6U3RyaW5nIGV2ZW50U3Ry
aW5nLCBFdmVudEZha2VkKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2VuZEtleUV2ZW50V2l0aENvbXBv
c2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSosIFJlc3VsdHNUb1NlbmQsIEV2ZW50RmFrZWQpOwog
ICAgIHZpcnR1YWwgYm9vbCBjYW5FZGl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1Db21w
b3NpdGlvblRleHQoU3RyaW5nKTsKICAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUN1cnJlbnRDb21w
b3NpdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggODUxZDYyNjZhZWE2
NTE5YzdlNmUxNTVjOWY3MDg1NTg0ZmEzMjJjMC4uMTBiZmQ1ZDk1ZDlmN2ExNDU0ZTJhZjY2ZjVk
NDM2YmM0NjkxNjg5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02NzAsNiAr
NjcwLDggQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5oIFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmls
dGVyLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5w
dXRNZXRob2RGaWx0ZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0VkaXRvclN0YXRlLmNwcAppbmRleCA2ZTQ0YTBmMTVhNTA5M2NkNWIxMGVhY2Fk
N2ViMDA3ZTRlZmEyNTcxLi4xMTE0NTI0MDEyYTQ5M2E4YTI5NDA3N2Y4ODU3MjdhNWYwYWJkYjVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAKQEAgLTQ1LDEyICs0NSwxNSBA
QCB2b2lkIEVkaXRvclN0YXRlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNv
ZGVyKSBjb25zdAogICAgIGVuY29kZXItPmVuY29kZShjdXJzb3JQb3NpdGlvbik7CiAgICAgZW5j
b2Rlci0+ZW5jb2RlKGFuY2hvclBvc2l0aW9uKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoZWRpdG9y
UmVjdCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKGN1cnNvclJlY3QpOwogICAgIGVuY29kZXItPmVu
Y29kZShjb21wb3NpdGlvblJlY3QpOwogICAgIGVuY29kZXItPmVuY29kZShpbnB1dE1ldGhvZEhp
bnRzKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoc2VsZWN0ZWRUZXh0KTsKICAgICBlbmNvZGVyLT5l
bmNvZGUoc3Vycm91bmRpbmdUZXh0KTsKICNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpIHx8IFBM
QVRGT1JNKEdUSykKKyAgICBlbmNvZGVyLT5lbmNvZGUoY3Vyc29yUmVjdCk7CisjZW5kaWYKIH0K
IAogYm9vbCBFZGl0b3JTdGF0ZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgRWRpdG9yU3RhdGUmIHJlc3VsdCkKQEAgLTg2LDkgKzg5LDYgQEAgYm9vbCBFZGl0b3JT
dGF0ZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRWRpdG9yU3Rh
dGUmIHJlc3VsdCkKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShyZXN1bHQuZWRpdG9yUmVjdCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlc3Vs
dC5jdXJzb3JSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUocmVzdWx0LmNvbXBvc2l0aW9uUmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMTAyLDYgKzEwMiwxMSBAQCBib29sIEVkaXRvclN0YXRlOjpkZWNvZGUoQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEsp
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LmN1cnNvclJlY3QpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9FZGl0b3JTdGF0ZS5oCmluZGV4IGFjMWQ3OTNhY2Y4NzAyZmQ3MTFlNDg3OTk4ZWVmNTc0
YzM3NGM3YzIuLmNjZmQ3Yjk1NDFjMDljNDVmZmYxYzA0NTQyZTQwNzEwOTU3YjM2YjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9FZGl0b3JTdGF0ZS5oCkBAIC02NSw3ICs2NSw2IEBAIHN0cnVjdCBFZGl0
b3JTdGF0ZSB7CiAgICAgdW5zaWduZWQgYW5jaG9yUG9zaXRpb247CiAKICAgICBXZWJDb3JlOjpJ
bnRSZWN0IGVkaXRvclJlY3Q7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBjdXJzb3JSZWN0OwogICAg
IFdlYkNvcmU6OkludFJlY3QgY29tcG9zaXRpb25SZWN0OwogCiAgICAgdWludDY0X3QgaW5wdXRN
ZXRob2RIaW50czsKQEAgLTc0LDYgKzczLDEwIEBAIHN0cnVjdCBFZGl0b3JTdGF0ZSB7CiAgICAg
V1RGOjpTdHJpbmcgc3Vycm91bmRpbmdUZXh0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKQorICAgIFdlYkNvcmU6OkludFJlY3QgY3Vyc29yUmVjdDsKKyNlbmRp
ZgorCiAgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3Q7CiAg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEVkaXRvclN0
YXRlJik7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktl
eWJvYXJkRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2
ZW50LmgKaW5kZXggMmQzYmIxMGQyYjY2OGY5Nzg5OGZkYzMxYzc5MzM4NTAyYWI0Mzc3ZC4uZTRk
MTdjYTM5NWEyZGFmMGUzODM3ZTJiMDM2MzczZWIxNGU5ZGU4MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCkBAIC0zNyw2ICszNyw3IEBAIE9C
SkNfQ0xBU1MgTlNWaWV3OwogI2luY2x1ZGUgPFFLZXlFdmVudD4KICNlbGlmIFBMQVRGT1JNKEdU
SykKICNpbmNsdWRlIDxHT3duUHRyR3RrLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21wb3NpdGlv
blJlc3VsdHMuaD4KIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogI2VsaWYgUExB
VEZPUk0oRUZMKQogI2luY2x1ZGUgPEV2YXMuaD4KQEAgLTU0LDcgKzU1LDcgQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoUUtleUV2ZW50Kik7CiAjZWxpZiBQ
TEFURk9STShHVEspCiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50Jik7Ci0gICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCopOwor
ICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoR2RrRXZlbnQqLCBjb25zdCBXZWJDb3JlOjpDb21w
b3NpdGlvblJlc3VsdHMmLCBib29sIGlzRmFrZUV2ZW50Rm9yQ29tcG9zaXRpb24gPSBmYWxzZSk7
CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBF
dmFzX0V2ZW50X0tleV9Eb3duKik7CiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBF
dmFzX0V2ZW50X0tleV9VcCopOwpAQCAtNjgsNiArNjksOCBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
UUtleUV2ZW50KiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuICZtX25hdGl2ZUV2ZW50OyB9
CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgR2RrRXZlbnQqIG5hdGl2ZUV2ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9uYXRpdmVFdmVudC5nZXQoKTsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkNvbXBv
c2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRzKCkgY29uc3QgIHsgcmV0dXJuIG1fY29t
cG9zaXRpb25SZXN1bHRzOyB9CisgICAgYm9vbCBpc0Zha2VFdmVudEZvckNvbXBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9mYWtlRXZlbnRGb3JDb21wb3NpdGlvbjsgfQogI2VsaWYgUExBVEZP
Uk0oRUZMKQogICAgIGNvbnN0IHZvaWQqIG5hdGl2ZUV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9u
YXRpdmVFdmVudDsgfQogI2VuZGlmCkBAIC04MSw2ICs4NCw4IEBAIHByaXZhdGU6CiAgICAgUUtl
eUV2ZW50IG1fbmF0aXZlRXZlbnQ7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgR093blB0cjxH
ZGtFdmVudD4gbV9uYXRpdmVFdmVudDsKKyAgICBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMg
bV9jb21wb3NpdGlvblJlc3VsdHM7CisgICAgYm9vbCBtX2Zha2VFdmVudEZvckNvbXBvc2l0aW9u
OwogI2VsaWYgUExBVEZPUk0oRUZMKQogICAgIGNvbnN0IHZvaWQqIG1fbmF0aXZlRXZlbnQ7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktl
eWJvYXJkRXZlbnRHdGsuY3BwCmluZGV4IDBkZGIxMjRlOTIzNWE1ZjE3ZTNjN2I1MmVkN2VlZGFh
N2QwNzVlYTMuLmI2MGFiMDE5NDYxNWY1NmQ4YjAyZjRiZTBlNWUwYzk5N2E3NTgzYjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2
ZW50R3RrLmNwcApAQCAtMzMsMTUgKzMzLDE5IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1O
YXRpdmVXZWJLZXlib2FyZEV2ZW50OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50KEdka0V2ZW50KiBl
dmVudCkKLSAgICA6IFdlYktleWJvYXJkRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJL
ZXlib2FyZEV2ZW50KGV2ZW50KSkKK05hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQoR2RrRXZlbnQqIGV2ZW50LCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJl
c3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cywgYm9vbCBpc0Zha2VFdmVudEZvckNvbXBvc2l0aW9u
KQorICAgIDogV2ViS2V5Ym9hcmRFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJv
YXJkRXZlbnQoZXZlbnQsIGNvbXBvc2l0aW9uUmVzdWx0cykpCiAgICAgLCBtX25hdGl2ZUV2ZW50
KGdka19ldmVudF9jb3B5KGV2ZW50KSkKKyAgICAsIG1fY29tcG9zaXRpb25SZXN1bHRzKGNvbXBv
c2l0aW9uUmVzdWx0cykKKyAgICAsIG1fZmFrZUV2ZW50Rm9yQ29tcG9zaXRpb24oaXNGYWtlRXZl
bnRGb3JDb21wb3NpdGlvbikKIHsKIH0KIAogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZl
V2ViS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKLSAg
ICA6IFdlYktleWJvYXJkRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2
ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQorICAgIDogV2ViS2V5Ym9hcmRFdmVudChXZWJFdmVu
dEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQubmF0aXZlRXZlbnQoKSwgZXZl
bnQuY29tcG9zaXRpb25SZXN1bHRzKCkpKQogICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRf
Y29weShldmVudC5uYXRpdmVFdmVudCgpKSkKKyAgICAsIG1fY29tcG9zaXRpb25SZXN1bHRzKGV2
ZW50LmNvbXBvc2l0aW9uUmVzdWx0cygpKQorICAgICwgbV9mYWtlRXZlbnRGb3JDb21wb3NpdGlv
bihldmVudC5pc0Zha2VFdmVudEZvckNvbXBvc2l0aW9uKCkpCiB7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcAppbmRleCAwNmMyYjhjNjllMGE3
NzNmMmRhY2RjMjMyMWEzMTQ1ODg0MjViMDRlLi5iODk5MWNjYWRlZWE1NGY4ZTY0ZjMxNzgyZjk5
YjZlMjE4MzdmMjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2
ZW50RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZh
Y3RvcnkuY3BwCkBAIC0xNzIsMTcgKzE3MiwyNCBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFj
dG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2RrX2V2ZW50X2dldF90aW1lKGV2ZW50KSk7CiB9CiAKLVdlYktl
eWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGNvbnN0
IEdka0V2ZW50KiBldmVudCkKK1dlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVh
dGVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgY29uc3QgV2ViQ29yZTo6
Q29tcG9zaXRpb25SZXN1bHRzJiBjb21wb3NpdGlvblJlc3VsdHMpCiB7CisgICAgdW5zaWduZWQg
aW50IGtleVZhbHVlID0gZXZlbnQtPmtleS5rZXl2YWw7CisgICAgU3RyaW5nIHRleHQgPSBjb21w
b3NpdGlvblJlc3VsdHMuc2ltcGxlU3RyaW5nLmxlbmd0aCgpID8KKyAgICAgICAgIGNvbXBvc2l0
aW9uUmVzdWx0cy5zaW1wbGVTdHJpbmcgOiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNo
YXJhY3RlclN0cmluZyhrZXlWYWx1ZSk7CisKKyAgICBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2Rl
ID0gY29tcG9zaXRpb25SZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRlZCgpID8KKyAgICAgICAgIFZL
X1BST0NFU1NLRVkgOiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2Rr
S2V5Q29kZShldmVudC0+a2V5LmtleXZhbCk7CisKICAgICByZXR1cm4gV2ViS2V5Ym9hcmRFdmVu
dCgoZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFKSA/IFdlYkV2ZW50OjpLZXlVcCA6IFdl
YkV2ZW50OjpLZXlEb3duLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtS2V5
Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV2ZW50LT5rZXkua2V5dmFsKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNo
YXJhY3RlclN0cmluZyhldmVudC0+a2V5LmtleXZhbCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShl
dmVudC0+a2V5LmtleXZhbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvckdka0tleUNvZGUoZXZlbnQtPmtleS5rZXl2
YWwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oZXZlbnQt
PmtleS5rZXl2YWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGtleVZhbHVl
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dzVmlydHVhbEtleUNvZGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihrZXlWYWx1ZSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBtYWNDaGFyQ29kZSAqLywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBpc0F1dG9SZXBlYXQgKi8sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXNHZGtLZXlDb2RlRnJvbUtleVBhZChldmVudC0+a2V5LmtleXZh
bCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNHZGtLZXlDb2RlRnJvbUtleVBhZChr
ZXlWYWx1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogaXNTeXN0ZW1L
ZXkgKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzRm9yRXZlbnQoZXZl
bnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRfdGltZShldmVu
dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3Rv
cnkuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKaW5kZXgg
MDk3YmUwODk2NTc4MGUyOTU0ZTgzMTc3Y2NmMjQxYzFmOGM2YmY5Ny4uMDg1ODE1YzQyZDQ3N2Ix
MmVkZjk2ZDE1Njg5MjZhOWZmOGFmZTZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3Rr
L1dlYkV2ZW50RmFjdG9yeS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIFdlYkV2ZW50RmFj
dG9yeV9oCiAKICNpbmNsdWRlICJXZWJFdmVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9z
aXRpb25SZXN1bHRzLmg+CiAKIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogCkBA
IC0zNyw3ICszOCw3IEBAIGNsYXNzIFdlYkV2ZW50RmFjdG9yeSB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFdlYk1vdXNlRXZlbnQgY3JlYXRlV2ViTW91c2VFdmVudChjb25zdCBHZGtFdmVudCosIGlu
dCk7CiAgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBH
ZGtFdmVudCopOwotICAgIHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJk
RXZlbnQoY29uc3QgR2RrRXZlbnQqKTsKKyAgICBzdGF0aWMgV2ViS2V5Ym9hcmRFdmVudCBjcmVh
dGVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgY29uc3QgV2ViQ29yZTo6Q29tcG9z
aXRpb25SZXN1bHRzJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCA4
ZmJmZTczZjY1NWZkZTlkZjQ0MWMwYWYxZjc3NWI4M2VkYzEzOTU4Li5lMDMzNTQwM2FlMDcxZjk1
ODFmZDdhNzljMjZhMzQ2MGY3Mjk2MWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCkBAIC0yMTMsNiArMjEzLDggQEAgdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50JiBldmVudCwgYm9vbAogewogICAgIGlmICh3YXNFdmVudEhhbmRsZWQpCiAgICAgICAg
IHJldHVybjsKKyAgICBpZiAoZXZlbnQuaXNGYWtlRXZlbnRGb3JDb21wb3NpdGlvbigpKQorICAg
ICAgICByZXR1cm47CiAKICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2Ug
PSBXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpOwogICAgIHdlYmtpdFdlYlZpZXdC
YXNlRm9yd2FyZE5leHRLZXlFdmVudCh3ZWJraXRXZWJWaWV3QmFzZSk7CkBAIC0yOTQsNiArMjk2
LDExIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVw
cmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAordm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlVGV4dElucHV0U3RhdGUoKQoreworICAgIHdl
YmtpdFdlYlZpZXdCYXNlVXBkYXRlVGV4dElucHV0U3RhdGUoV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
bV92aWV3V2lkZ2V0KSk7Cit9CisKIHZvaWQgUGFnZUNsaWVudEltcGw6OnN0YXJ0RHJhZyhjb25z
dCBXZWJDb3JlOjpEcmFnRGF0YSYgZHJhZ0RhdGEsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBkcmFnSW1hZ2UpCiB7CiAgICAgd2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcoV0VCS0lUX1dF
Ql9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSwgZHJhZ0RhdGEsIGRyYWdJbWFnZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAppbmRleCA1
NGFkOTlmOGZhMDRiZDAyZjBjNTE0OGM0NWE5ZmViN2YyMDVmYThjLi42OWI1MzQ4MTMzYTAzZGYy
NjcwM2UzMTlkZGY4MzkyZmJmNDgxYWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTg3LDYgKzg3LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPFdURjo6U3Ry
aW5nPiYpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlv
bihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOwogICAgIHZpcnR1YWwgdm9p
ZCBjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYs
IEZpbmRPcHRpb25zLCB1bnNpZ25lZCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1
dFN0YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFn
RGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UpOwogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IGY4MzA4YWExNGY5MGU4
ZGYzNWZmYjE1ZTVmYTgwMGE1ODNlOTQ2Y2UuLjI4MGZhNjQ1OTAwMDI0NzRkNzg5OWVkMjBiYTdj
N2I4OWJmZWY5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJX
ZWJLaXRXZWJWaWV3QmFzZS5oIgogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIK
LSNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2Vi
TW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbmNsdWRl
ICJQYWdlQ2xpZW50SW1wbC5oIgpAQCAtNDEsNiArNDAsNyBAQAogI2luY2x1ZGUgIldlYktpdFdl
YlZpZXdCYXNlQWNjZXNzaWJsZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlZpZXdCYXNlSW5w
dXRNZXRob2RGaWx0ZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaXBib2FyZEd0ay5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9EYXRhT2JqZWN0R3RrLmg+CkBAIC03Niw3ICs3Niw2IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlIHsKICAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBwYWdlUHJveHk7CiAgICAg
Ym9vbCBpc1BhZ2VBY3RpdmU7CiAgICAgYm9vbCBzaG91bGRGb3J3YXJkTmV4dEtleUV2ZW50Owot
ICAgIEdSZWZQdHI8R3RrSU1Db250ZXh0PiBpbUNvbnRleHQ7CiAgICAgR3RrQ2xpY2tDb3VudGVy
IGNsaWNrQ291bnRlcjsKICAgICBDU3RyaW5nIHRvb2x0aXBUZXh0OwogICAgIEd0a0RyYWdBbmRE
cm9wSGVscGVyIGRyYWdBbmREcm9wSGVscGVyOwpAQCAtOTAsNiArODksNyBAQCBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAjZW5kaWYKICAgICBHdGtXaWRnZXQqIGluc3BlY3Rv
clZpZXc7CiAgICAgdW5zaWduZWQgaW5zcGVjdG9yVmlld0hlaWdodDsKKyAgICBXZWJWaWV3QmFz
ZUlucHV0TWV0aG9kRmlsdGVyIGlucHV0TWV0aG9kRmlsdGVyOwogfTsKIAogR19ERUZJTkVfVFlQ
RShXZWJLaXRXZWJWaWV3QmFzZSwgd2Via2l0X3dlYl92aWV3X2Jhc2UsIEdUS19UWVBFX0NPTlRB
SU5FUikKQEAgLTE2MSw3ICsxNjEsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJl
YWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCiAKICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKLSAgICBndGtfaW1fY29udGV4dF9zZXRfY2xp
ZW50X3dpbmRvdyhwcml2LT5pbUNvbnRleHQuZ2V0KCksIHdpbmRvdyk7CisKKyAgICBwcml2LT5p
bnB1dE1ldGhvZEZpbHRlci5zZXRXZWJWaWV3KHdlYlZpZXcpOwogCiAgICAgR3RrV2lkZ2V0KiB0
b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKHdpZGdldCk7CiAgICAgaWYgKHdpZGdl
dElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyh0b3BsZXZlbCkpIHsKQEAgLTI1Niw3ICsyNTcsNiBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJraXRXZWJWaWV3QmFzZSkKICAgICBHdGtXaWRnZXQqIHZpZXdXaWRnZXQgPSBHVEtfV0lE
R0VUKHdlYmtpdFdlYlZpZXdCYXNlKTsKICAgICBndGtfd2lkZ2V0X3NldF9kb3VibGVfYnVmZmVy
ZWQodmlld1dpZGdldCwgRkFMU0UpOwogICAgIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyh2aWV3
V2lkZ2V0LCBUUlVFKTsKLSAgICBwcml2LT5pbUNvbnRleHQgPSBhZG9wdEdSZWYoZ3RrX2ltX211
bHRpY29udGV4dF9uZXcoKSk7CiAKICAgICBwcml2LT5wYWdlQ2xpZW50ID0gUGFnZUNsaWVudElt
cGw6OmNyZWF0ZSh2aWV3V2lkZ2V0KTsKIApAQCAtMzU0LDEyICszNTQsMTMgQEAgc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRm9jdXNJbkV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBH
ZGtFdmVudEZvY3VzKgogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZp
ZXdCYXNlLT5wcml2OwogCiAgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0
X3RvcGxldmVsKHdpZGdldCk7Ci0gICAgaWYgKHdpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRv
dyh0b3BsZXZlbCkgJiYgZ3RrX3dpbmRvd19oYXNfdG9wbGV2ZWxfZm9jdXMoR1RLX1dJTkRPVyh0
b3BsZXZlbCkpKSB7Ci0gICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKHByaXYtPmltQ29u
dGV4dC5nZXQoKSk7Ci0gICAgICAgIGlmICghcHJpdi0+aXNQYWdlQWN0aXZlKSB7Ci0gICAgICAg
ICAgICBwcml2LT5pc1BhZ2VBY3RpdmUgPSBUUlVFOwotICAgICAgICAgICAgcHJpdi0+cGFnZVBy
b3h5LT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUp
OwotICAgICAgICB9CisgICAgaWYgKCF3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3codG9w
bGV2ZWwpIHx8ICFndGtfd2luZG93X2hhc190b3BsZXZlbF9mb2N1cyhHVEtfV0lORE9XKHRvcGxl
dmVsKSkpCisgICAgICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19i
YXNlX3BhcmVudF9jbGFzcyktPmZvY3VzX2luX2V2ZW50KHdpZGdldCwgZXZlbnQpOworCisgICAg
cHJpdi0+aW5wdXRNZXRob2RGaWx0ZXIubm90aWZ5Rm9jdXNlZEluKCk7CisgICAgaWYgKCFwcml2
LT5pc1BhZ2VBY3RpdmUpIHsKKyAgICAgICAgcHJpdi0+aXNQYWdlQWN0aXZlID0gVFJVRTsKKyAg
ICAgICAgcHJpdi0+cGFnZVByb3h5LT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpW
aWV3V2luZG93SXNBY3RpdmUpOwogICAgIH0KIAogICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNT
KHdlYmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPmZvY3VzX2luX2V2ZW50KHdpZGdl
dCwgZXZlbnQpOwpAQCAtMzcyLDggKzM3Myw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJW
aWV3QmFzZUZvY3VzT3V0RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqCiAK
ICAgICBwcml2LT5pc1BhZ2VBY3RpdmUgPSBGQUxTRTsKICAgICBwcml2LT5wYWdlUHJveHktPnZp
ZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Ci0gICAg
aWYgKHByaXYtPmltQ29udGV4dCkKLSAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KHBy
aXYtPmltQ29udGV4dC5nZXQoKSk7CisgICAgcHJpdi0+aW5wdXRNZXRob2RGaWx0ZXIubm90aWZ5
Rm9jdXNlZE91dCgpOwogCiAgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92
aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+Zm9jdXNfb3V0X2V2ZW50KHdpZGdldCwgZXZlbnQpOwog
fQpAQCAtNDA1LDcgKzQwNSw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUtl
eVByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBlCiAgICAgICAgIHBy
aXYtPnNob3VsZEZvcndhcmROZXh0S2V5RXZlbnQgPSBGQUxTRTsKICAgICAgICAgcmV0dXJuIEdU
S19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2VfcGFyZW50X2NsYXNzKS0+a2V5X3By
ZXNzX2V2ZW50KHdpZGdldCwgZXZlbnQpOwogICAgIH0KLSAgICBwcml2LT5wYWdlUHJveHktPmhh
bmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVycHJldF9jYXN0
PEdka0V2ZW50Kj4oZXZlbnQpKSk7CisgICAgcHJpdi0+aW5wdXRNZXRob2RGaWx0ZXIuZmlsdGVy
S2V5RXZlbnQoZXZlbnQpOwogICAgIHJldHVybiBUUlVFOwogfQogCkBAIC00MTQsMTQgKzQxNCwx
MSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VLZXlSZWxlYXNlRXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KgogICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJW
aWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CiAgICAgV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlld0Jhc2UtPnByaXY7CiAKLSAgICBpZiAoZ3RrX2lt
X2NvbnRleHRfZmlsdGVyX2tleXByZXNzKHByaXYtPmltQ29udGV4dC5nZXQoKSwgZXZlbnQpKQot
ICAgICAgICByZXR1cm4gVFJVRTsKLQogICAgIGlmIChwcml2LT5zaG91bGRGb3J3YXJkTmV4dEtl
eUV2ZW50KSB7CiAgICAgICAgIHByaXYtPnNob3VsZEZvcndhcmROZXh0S2V5RXZlbnQgPSBGQUxT
RTsKICAgICAgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X2Jhc2Vf
cGFyZW50X2NsYXNzKS0+a2V5X3JlbGVhc2VfZXZlbnQod2lkZ2V0LCBldmVudCk7CiAgICAgfQot
ICAgIHByaXYtPnBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCkpKTsKKyAgICBwcml2LT5p
bnB1dE1ldGhvZEZpbHRlci5maWx0ZXJLZXlFdmVudChldmVudCk7CiAgICAgcmV0dXJuIFRSVUU7
CiB9CiAKQEAgLTQzMSw2ICs0MjgsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jh
c2VCdXR0b25QcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dAogICAgIFdl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwogICAgIGd0
a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOwogCisgICAgcHJpdi0+aW5wdXRNZXRob2RGaWx0
ZXIubm90aWZ5TW91c2VCdXR0b25QcmVzcygpOworCiAgICAgaWYgKCFwcml2LT5jbGlja0NvdW50
ZXIuc2hvdWxkUHJvY2Vzc0J1dHRvbkV2ZW50KGJ1dHRvbkV2ZW50KSkKICAgICAgICAgcmV0dXJu
IFRSVUU7CiAgICAgcHJpdi0+cGFnZVByb3h5LT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1v
dXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGJ1dHRvbkV2ZW50KSwKQEAgLTYz
Nyw3ICs2MzYsNyBAQCBXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2VDcmVhdGUo
V2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYQogCiBHdGtJTUNvbnRleHQqIHdl
YmtpdFdlYlZpZXdCYXNlR2V0SU1Db250ZXh0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJW
aWV3QmFzZSkKIHsKLSAgICByZXR1cm4gd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmltQ29udGV4
dC5nZXQoKTsKKyAgICByZXR1cm4gd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmlucHV0TWV0aG9k
RmlsdGVyLmNvbnRleHQoKTsKIH0KIAogV2ViUGFnZVByb3h5KiB3ZWJraXRXZWJWaWV3QmFzZUdl
dFBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQpAQCAtNzU5LDMgKzc1
OCwxMyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5zcGVjdG9yVmlld0hlaWdodChXZWJL
aXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0JhcwogICAgIHdlYmtpdFdlYlZpZXdCYXNlLT5w
cml2LT5pbnNwZWN0b3JWaWV3SGVpZ2h0ID0gaGVpZ2h0OwogICAgIGd0a193aWRnZXRfcXVldWVf
cmVzaXplX25vX3JlZHJhdyhHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlKSk7CiB9CisKK3Zv
aWQgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnB1dE1ldGhvZFN0YXRlKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJraXRXZWJWaWV3QmFzZSwgYm9vbCBlbmFibGVkKQoreworICAgIHdlYmtpdFdlYlZpZXdC
YXNlLT5wcml2LT5pbnB1dE1ldGhvZEZpbHRlci5zZXRFbmFibGVkKGVuYWJsZWQpOworfQorCit2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlVXBkYXRlVGV4dElucHV0U3RhdGUoV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYmtpdFdlYlZpZXdCYXNlKQoreworICAgIHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5p
bnB1dE1ldGhvZEZpbHRlci5zZXRDdXJzb3JSZWN0KHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5w
YWdlUHJveHktPmVkaXRvclN0YXRlKCkuY3Vyc29yUmVjdCk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZS5oCmluZGV4IDVlMTkxOTcxY2M1ODVjODkxYzg0YTZiZjI0NjhmNGQ5ZWZjMzMyODUuLmVkMGEz
NzE2MmNmZTEzYjQzNDQ5OTBhMGRlODEzMDJlNmZiYjU5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZS5oCkBAIC00Niw1ICs0Niw3IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VFbnRlckZ1bGxTY3Jl
ZW4oV2ViS2l0V2ViVmlld0Jhc2UqKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VFeGl0RnVsbFNj
cmVlbihXZWJLaXRXZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUluaXRpYWxp
emVGdWxsU2NyZWVuQ2xpZW50KFdlYktpdFdlYlZpZXdCYXNlKiwgY29uc3QgV0tGdWxsU2NyZWVu
Q2xpZW50R3RrKik7CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5zcGVjdG9yVmlld0hlaWdo
dChXZWJLaXRXZWJWaWV3QmFzZSosIHVuc2lnbmVkIGhlaWdodCk7Cit2b2lkIHdlYmtpdFdlYlZp
ZXdCYXNlU2V0SW5wdXRNZXRob2RTdGF0ZShXZWJLaXRXZWJWaWV3QmFzZSosIGJvb2wgZW5hYmxl
ZCk7Cit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlVXBkYXRlVGV4dElucHV0U3RhdGUoV2ViS2l0V2Vi
Vmlld0Jhc2UqKTsKIAogI2VuZGlmIC8vIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3QmFzZUlucHV0
TWV0aG9kRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZp
ZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxZjAwZmE5NjU0Y2Y5MGZk
MjZjZjQ4MmU3YzdkZWQ0MGY3NWE2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmNwcApAQCAt
MCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmgi
CisKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9Db2xvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9zaXRpb25SZXN1bHRz
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RG
aWx0ZXI6OnNldFdlYlZpZXcoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXcpCit7CisgICAgbV93
ZWJWaWV3ID0gd2ViVmlldzsKKyAgICBHdGtJbnB1dE1ldGhvZEZpbHRlcjo6c2V0V2lkZ2V0KEdU
S19XSURHRVQod2ViVmlldykpOworfQorCitib29sIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0
ZXI6OmNhbkVkaXQoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZpZXdCYXNl
SW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQs
IFdURjo6U3RyaW5nIHNpbXBsZVN0cmluZywgRXZlbnRGYWtlZCBmYWtlZCkKK3sKKyAgICB3ZWJr
aXRXZWJWaWV3QmFzZUdldFBhZ2UobV93ZWJWaWV3KS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRp
dmVXZWJLZXlib2FyZEV2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29tcG9zaXRpb25SZXN1bHRzKHNpbXBsZVN0cmluZyksIGZha2VkID09IEZha2VFdmVudCkp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0
ZXI6OnNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMoR2RrRXZlbnRLZXkqIGV2ZW50
LCBSZXN1bHRzVG9TZW5kIHJlc3VsdHNUb1NlbmQsIEV2ZW50RmFrZWQgZmFrZWQpCit7CisgICAg
d2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKG1fd2ViVmlldyktPmhhbmRsZUtleWJvYXJkRXZlbnQo
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvbXBvc2l0aW9uUmVzdWx0cyhDb21wb3NpdGlvblJlc3VsdHM6OldpbGxTZW5kQ29t
cG9zaXRpb25SZXN1bHRzU29vbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFrZWQgPT0gRmFrZUV2ZW50KSk7CisKKyAgICBp
ZiAocmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9uICYmICFtX2NvbmZpcm1lZENvbXBvc2l0aW9u
LmlzTnVsbCgpKQorICAgICAgICBjb25maXJtQ29tcG9zaXRpb25UZXh0KG1fY29uZmlybWVkQ29t
cG9zaXRpb24pOworICAgIGlmIChyZXN1bHRzVG9TZW5kICYgUHJlZWRpdCAmJiAhbV9wcmVlZGl0
LmlzTnVsbCgpKQorICAgICAgICBzZXRQcmVlZGl0KG1fcHJlZWRpdCwgbV9jdXJzb3JPZmZzZXQp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0
ZXI6OmNvbmZpcm1Db21wb3NpdGlvblRleHQoU3RyaW5nIHRleHQpCit7CisgICAgd2Via2l0V2Vi
Vmlld0Jhc2VHZXRQYWdlKG1fd2ViVmlldyktPmNvbmZpcm1Db21wb3NpdGlvbih0ZXh0LCAtMSwg
MCk7Cit9CisKK3ZvaWQgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlcjo6Y29uZmlybUN1cnJl
bnRDb21wb3NpdGlvbigpCit7CisgICAgd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKG1fd2ViVmll
dyktPmNvbmZpcm1Db21wb3NpdGlvbihTdHJpbmcoKSwgLTEsIDApOworfQorCit2b2lkIFdlYlZp
ZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXI6OmNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigpCit7Cisg
ICAgd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKG1fd2ViVmlldyktPmNhbmNlbENvbXBvc2l0aW9u
KCk7Cit9CisKK3ZvaWQgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlcjo6c2V0UHJlZWRpdChT
dHJpbmcgbmV3UHJlZWRpdCwgaW50IGN1cnNvck9mZnNldCkKK3sKKyAgICAvLyBUT0RPOiBXZSBz
aG91bGQgcGFyc2UgdGhlIFBhbmdvQXR0ckxpc3QgdGhhdCB3ZSBnZXQgZnJvbSB0aGUgSU0gY29u
dGV4dCBoZXJlLgorICAgIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lczsK
KyAgICB1bmRlcmxpbmVzLmFwcGVuZChDb21wb3NpdGlvblVuZGVybGluZSgwLCBuZXdQcmVlZGl0
Lmxlbmd0aCgpLCBDb2xvcigxLCAxLCAxKSwgZmFsc2UpKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFz
ZUdldFBhZ2UobV93ZWJWaWV3KS0+c2V0Q29tcG9zaXRpb24obmV3UHJlZWRpdCwgdW5kZXJsaW5l
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jdXJzb3JPZmZzZXQsIG1fY3Vyc29yT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIHJlcGxhY2VtZW50IHN0YXJ0
ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwIC8qIHJlcGxhY2VtZW50IGVuZCAqLyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jh
c2VJbnB1dE1ldGhvZEZpbHRlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1NmUyNWZkNzYwMjRm
MmY0NzFjNzJjM2MwZjk1NTI5YzYwZjA4ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmgKQEAg
LTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXJfaAorI2RlZmluZSBXZWJWaWV3QmFzZUlu
cHV0TWV0aG9kRmlsdGVyX2gKKworI2luY2x1ZGUgIkd0a0lucHV0TWV0aG9kRmlsdGVyLmgiCisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZSBXZWJLaXRXZWJWaWV3QmFzZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIg
OiBwdWJsaWMgV2ViQ29yZTo6R3RrSW5wdXRNZXRob2RGaWx0ZXIgeworcHVibGljOgorICAgIHZv
aWQgc2V0V2ViVmlldyhXZWJLaXRXZWJWaWV3QmFzZSopOworCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCBib29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSosIFdURjo6U3RyaW5nIGV2
ZW50U3RyaW5nLCBFdmVudEZha2VkKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2VuZEtleUV2ZW50V2l0
aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSosIFJlc3VsdHNUb1NlbmQsIEV2ZW50RmFr
ZWQpOworICAgIHZpcnR1YWwgYm9vbCBjYW5FZGl0KCk7CisgICAgdmlydHVhbCB2b2lkIGNvbmZp
cm1Db21wb3NpdGlvblRleHQoU3RyaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29uZmlybUN1cnJl
bnRDb21wb3NpdGlvbigpOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxDdXJyZW50Q29tcG9zaXRp
b24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZWRpdChTdHJpbmcsIGludCBjdXJzb3JPZmZz
ZXQpOworCitwcml2YXRlOgorICAgIFdlYktpdFdlYlZpZXdCYXNlKiBtX3dlYlZpZXc7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlZpZXdCYXNlSW5wdXRNZXRo
b2RGaWx0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggMDhjZGQ5
NGQ1YWUyODM5ODQxMGNlMDk4MWEwNmI3YzkxOGExM2UyYS4uMjA3NWNiMzc0ZTUyZmRmY2E0MWNj
ZWI4ODYzODgwOWI3MDFmYTgxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5o
CkBAIC0xMTMsMTMgKzExMywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmRa
b29tYWJsZUFyZWEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0
b3JRdE9iamVjdChjb25zdCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZURv
d25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0SW5wdXRTdGF0ZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXV0aGVudGlj
YXRpb25SZXF1aXJlZFJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgY29uc3QgU3RyaW5n
JiByZWFsbSwgY29uc3QgU3RyaW5nJiBwcmVmaWxsZWRVc2VybmFtZSwgU3RyaW5nJiB1c2VybmFt
ZSwgU3RyaW5nJiBwYXNzd29yZCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVDZXJ0aWZp
Y2F0ZVZlcmlmaWNhdGlvblJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgYm9vbCYgaWdu
b3JlRXJyb3JzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVByb3h5QXV0aGVudGljYXRp
b25SZXF1aXJlZFJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgdWludDE2X3QgcG9ydCwg
Y29uc3QgU3RyaW5nJiBwcmVmaWxsZWRVc2VybmFtZSwgU3RyaW5nJiB1c2VybmFtZSwgU3RyaW5n
JiBwYXNzd29yZCkgPSAwOwogI2VuZGlmIC8vIFBMQVRGT1JNKFFUKS4KIAogI2lmIFBMQVRGT1JN
KFFUKSB8fCBQTEFURk9STShHVEspCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0
YXRlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJh
Z0RhdGEmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKSA9IDA7CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAyYjUz
OGU1ZDhiMDc5ZDkyOTA4NzYyNTIyYmI5MTM5YjI4YWNlMDIyLi5lMWQzNzA4MWYyOGFjMTIwM2Fh
YWNkZmQ1MTIxZjcwZTJjODZjNTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcApAQCAtMjY4NSw3ICsyNjg1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmVkaXRv
clN0YXRlQ2hhbmdlZChjb25zdCBFZGl0b3JTdGF0ZSYgZWRpdG9yU3RhdGUpCiAKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgbV9wYWdlQ2xpZW50LT51cGRhdGVUZXh0SW5wdXRTdGF0ZShjb3VsZENo
YW5nZVNlY3VyZUlucHV0U3RhdGUpOwotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQTEFURk9S
TShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIG1fcGFnZUNsaWVudC0+dXBkYXRlVGV4dElucHV0
U3RhdGUoKTsKICNlbmRpZgogfQpAQCAtMzgxMiw0ICszODEyLDMxIEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkK
IH0KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oR1RLKQordm9pZCBXZWJQYWdlUHJveHk6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYg
dGV4dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBz
ZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVu
dFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpCit7CisgICAgLy8gRklY
TUU6IFdlIG5lZWQgdG8gZmluZCBvdXQgaG93IHRvIHByb3BlciBoYW5kbGUgdGhlIGNyYXNoZXMg
Y2FzZS4KKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJvY2Vz
cygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29tcG9zaXRpb24odGV4dCwgdW5k
ZXJsaW5lcywgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgcmVwbGFjZW1lbnRSYW5nZVN0
YXJ0LCByZXBsYWNlbWVudFJhbmdlRW5kKSwgTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbXBvc2l0
aW9uOjpSZXBseShtX2VkaXRvclN0YXRlKSwgbV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcs
IGludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIGludDY0X3Qgc2VsZWN0aW9uTGVuZ3RoKQoreworICAg
IGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9jZXNzKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25maXJtQ29tcG9zaXRpb24oY29tcG9zaXRpb25TdHJp
bmcsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25MZW5ndGgpLCBNZXNzYWdlczo6V2ViUGFnZTo6
Q29uZmlybUNvbXBvc2l0aW9uOjpSZXBseShtX2VkaXRvclN0YXRlKSwgbV9wYWdlSUQpOworfQor
Cit2b2lkIFdlYlBhZ2VQcm94eTo6Y2FuY2VsQ29tcG9zaXRpb24oKQoreworICAgIGlmICghaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9jZXNzKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpDYW5jZWxDb21wb3NpdGlvbigpLCBNZXNzYWdlczo6V2ViUGFnZTo6Q2Fu
Y2VsQ29tcG9zaXRpb246OlJlcGx5KG1fZWRpdG9yU3RhdGUpLCBtX3BhZ2VJRCk7Cit9CisjZW5k
aWYgLy8gUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggODI2YzNhYjU5
YWM2MjFiZjkxNjcyNWUzNjI5MDQ4Y2IyMmM4YWQ5ZS4uMzllYmMzNzg0MGQ1ZmNjNDgwOGRhMDVh
ZjI1M2JjODZkOGUyNmY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aApAQCAtMzM5LDExICszMzksMTYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VXNlclNjcmlwdHMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICNlbmRpZiAvLyBQTEFURk9STShRVCkuCiAKLSNpZiBQ
TEFURk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHZvaWQg
c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9z
aXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50
NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0
X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCk7CiAgICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oY29u
c3QgU3RyaW5nJiBjb21wb3NpdGlvblN0cmluZywgaW50NjRfdCBzZWxlY3Rpb25TdGFydCwgaW50
NjRfdCBzZWxlY3Rpb25MZW5ndGgpOwogICAgIHZvaWQgY2FuY2VsQ29tcG9zaXRpb24oKTsKICNl
bmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShi
b29sIGVuYWJsZWQpOworI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCB1cGRh
dGVXaW5kb3dJc1Zpc2libGUoYm9vbCB3aW5kb3dJc1Zpc2libGUpOwogICAgIHZvaWQgd2luZG93
QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJ
blNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldp
bmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgYWNjZXNzaWJpbGl0eVZp
ZXdDb29yZGluYXRlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbgppbmRleCBkZTYwYTcxNjZmNTRhODE4OTEzNTBlMDc1NDI1YTNhOTgz
ZTNlMGUzLi5lMmEzZThlNjkzNTRjZjkxYzg5ZWZlZDcwOTU4ZTlhODE4ZDhlYzZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAg
LTE1Nyw2ICsxNTcsOCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgIyBTdXBw
b3J0IGZvciBjb25uZWN0aW5nIHRoZSBBY2Nlc3NpYmlsaXR5IHdvcmxkcyBvZiB0aGUgVUkgYW5k
IHRoZSBXZWIgcHJvY2Vzc2VzCiAgICAgQmluZEFjY2Vzc2liaWxpdHlUcmVlKFdURjo6U3RyaW5n
IHBsdWdJRCkKKworICAgIFNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKICNlbmRp
ZgogCiAgICAgIyBCYWNrRm9yd2FyZCBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwCmluZGV4IGRjODIzNTIxMGU3ZGMwOTljNjM5
NDg1MWI4YTUxNGRjYWU5Y2Q5ZTIuLjI0MWJjNjUxYzg5NWMxYjUxNmYwNmRmMGJiZDAxMGU3MTI4
MTJjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVBy
b3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94
eUd0ay5jcHAKQEAgLTEwNyw0ICsxMDcsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93ZWRQ
bHVnaW5HZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmcmFtZQogICAg
IHdlYmtpdFdlYlZpZXdCYXNlQ2hpbGRNb3ZlUmVzaXplKFdFQktJVF9XRUJfVklFV19CQVNFKHZp
ZXdXaWRnZXQoKSksIHBsdWdpbiwgZnJhbWVSZWN0KTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6
OnNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKQoreworICAgIHdlYmtpdFdlYlZpZXdC
YXNlU2V0SW5wdXRNZXRob2RTdGF0ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh2aWV3V2lkZ2V0KCkp
LCBlbmFibGVkKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcAppbmRleCA1Y2FmYWQ1OWM2ODljMzgy
NDY0YjgwNzE5MDRiMDUyOWU3NWU1YmVhLi42NDNiYjYzMDIxOWIwM2EyNjE2ZTRlOWFlYjMxYmMz
MmY4ODdkZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFn
ZVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQYWdlUHJv
eHlRdC5jcHAKQEAgLTU1LDMxICs1NSw2IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2FkUmVjZW50
U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJp
bmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0
X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKQotewotICAgIC8v
IEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQgb3V0IGhvdyB0byBwcm9wZXIgaGFuZGxlIHRoZSBjcmFz
aGVzIGNhc2UuCi0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29tcG9zaXRpb24odGV4dCwgdW5k
ZXJsaW5lcywgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgcmVwbGFjZW1lbnRSYW5nZVN0
YXJ0LCByZXBsYWNlbWVudFJhbmdlRW5kKSwgbV9wYWdlSUQpOwotfQotCi12b2lkIFdlYlBhZ2VQ
cm94eTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcs
IGludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIGludDY0X3Qgc2VsZWN0aW9uTGVuZ3RoKQotewotICAg
IGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZywg
c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkxlbmd0aCksIG1fcGFnZUlEKTsKLX0KLQotdm9pZCBX
ZWJQYWdlUHJveHk6OmNhbmNlbENvbXBvc2l0aW9uKCkKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpDYW5jZWxDb21wb3NpdGlvbigpLCBtX3BhZ2VJRCk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByb3h5
OjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQogewogICAg
IHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVnaXN0ZXJBcHBsaWNhdGlvblNj
aGVtZShzY2hlbWUpLCBtX3BhZ2VJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3Rr
LmNwcAppbmRleCBlMzNkNzIzMjdjYzRlZjg4ZjdjM2FmMzE1Y2Q2Mjk1YzY4YzE3NjMzLi5kNTky
M2UwODcyMWI4YTllOTFlMDI4YzFkN2NiNGY1MzM1ZWU2MjhjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dl
YkVkaXRvckNsaWVudEd0ay5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0RhdGFPYmplY3RHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dzS2V5Ym9hcmRDb2Rlcy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzYsNiArNzYsMTAgQEAgdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQp
CiAgICAgaWYgKCFwbGF0Zm9ybUV2ZW50KQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBJZiB0
aGlzIHdhcyBhbiBJTUUgZXZlbnQgZG9uJ3QgZG8gYW55dGhpbmcuCisgICAgaWYgKHBsYXRmb3Jt
RXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpID09IFZLX1BST0NFU1NLRVkpCisgICAgICAg
IHJldHVybjsKKwogICAgIFZlY3RvcjxXVEY6OlN0cmluZz4gcGVuZGluZ0VkaXRvckNvbW1hbmRz
OwogICAgIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoZXZlbnQsIHBlbmRpbmdFZGl0b3JD
b21tYW5kcyk7CiAgICAgaWYgKCFwZW5kaW5nRWRpdG9yQ29tbWFuZHMuaXNFbXB0eSgpKSB7CkBA
IC0xMDQsMzAgKzEwOCwyNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRF
dmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICAvLyBUaGlzIGlzIGp1c3QgYSBub3JtYWwg
dGV4dCBpbnNlcnRpb24sIHNvIHdhaXQgdG8gZXhlY3V0ZSB0aGUgaW5zZXJ0aW9uCiAgICAgLy8g
dW50aWwgYSBrZXlwcmVzcyBldmVudCBoYXBwZW5zLiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhl
IGluc2VydGlvbiB3aWxsIG5vdAogICAgIC8vIGJlIHJlZmxlY3RlZCBpbiB0aGUgY29udGVudHMg
b2YgdGhlIGZpZWxkIHVudGlsIHRoZSBrZXl1cCBET00gZXZlbnQuCi0gICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKLQotICAgICAgICAvLyBGSVhN
RTogQWRkIElNIHN1cHBvcnQKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU1OTQ2Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChw
bGF0Zm9ybUV2ZW50LT50ZXh0KCksIGV2ZW50KTsKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleXByZXNz
RXZlbnQpCisgICAgICAgIHJldHVybjsKIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIERvbid0
IGluc2VydCBudWxsIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBhcyB0aGV5IGNhbiByZXN1bHQgaW4g
dW5leHBlY3RlZCBiZWhhdmlvdXIKLSAgICAgICAgaWYgKGV2ZW50LT5jaGFyQ29kZSgpIDwgJyAn
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIERvbid0IGluc2VydCBudWxsIG9yIGNvbnRy
b2wgY2hhcmFjdGVycyBhcyB0aGV5IGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBiZWhhdmlvdXIK
KyAgICBpZiAoZXZlbnQtPmNoYXJDb2RlKCkgPCAnICcpCisgICAgICAgIHJldHVybjsKIAotICAg
ICAgICAvLyBEb24ndCBpbnNlcnQgYW55dGhpbmcgaWYgYSBtb2RpZmllciBpcyBwcmVzc2VkCi0g
ICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50LT5jdHJsS2V5KCkgfHwgcGxhdGZvcm1FdmVudC0+YWx0
S2V5KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgLy8gRG9uJ3QgaW5zZXJ0IGFueXRoaW5n
IGlmIGEgbW9kaWZpZXIgaXMgcHJlc3NlZAorICAgIGlmIChwbGF0Zm9ybUV2ZW50LT5jdHJsS2V5
KCkgfHwgcGxhdGZvcm1FdmVudC0+YWx0S2V5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBpZiAoZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KHBsYXRmb3JtRXZlbnQtPnRleHQoKSwg
ZXZlbnQpKQotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfQor
ICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQocGxhdGZvcm1FdmVudC0+dGV4dCgp
LCBldmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCi12b2lk
IFdlYkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQq
KQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2Fy
ZEV2ZW50KiBldmVudCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNvbnN0IFBsYXRm
b3JtS2V5Ym9hcmRFdmVudCogcGxhdGZvcm1FdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpOworICAg
IGlmIChwbGF0Zm9ybUV2ZW50ICYmIHBsYXRmb3JtRXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSgpID09IFZLX1BST0NFU1NLRVkpCisgICAgICAgIGV2ZW50LT5wcmV2ZW50RGVmYXVsdCgpOwog
fQogCiAjaWYgUExBVEZPUk0oWDExKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCmluZGV4IGE1MjdjZjA5YWNmMzI1NGI2M2MyOTQ1ODEyMjg5OTBmNTRm
MjYzZjQuLjIwY2FhYzJjMDU5ZTU1OGNkMTBiM2NkNDk4NzNiMDYxNDlhZjdjNWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTA2LDYgKzUwNywxMCBAQCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZSgpIGNv
bnN0CiAgICAgfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisgICAgcmVzdWx0LmN1cnNv
clJlY3QgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyNlbmRp
ZgorCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzIxNSw0ICszMjIwLDk4IEBAIHZvaWQg
V2ViUGFnZTo6c2V0VmlzaWJpbGl0eVN0YXRlKGludCB2aXNpYmlsaXR5U3RhdGUsIGJvb2wgaXNJ
bml0aWFsU3RhdGUpCiB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShH
VEspCitzdGF0aWMgRnJhbWUqIHRhcmdldEZyYW1lRm9yRWRpdGluZyhXZWJQYWdlKiBwYWdlKQor
eworICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IHBhZ2UtPmNvcmVQYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKworICAgIGlmICghdGFyZ2V0RnJhbWUgfHwg
IXRhcmdldEZyYW1lLT5lZGl0b3IoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFZGl0b3Iq
IGVkaXRvciA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKTsKKyAgICBpZiAoIWVkaXRvci0+Y2FuRWRp
dCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChlZGl0b3ItPmhhc0NvbXBvc2l0aW9u
KCkpIHsKKyAgICAgICAgLy8gV2Ugc2hvdWxkIHZlcmlmeSB0aGUgcGFyZW50IG5vZGUgb2YgdGhp
cyBJTUUgY29tcG9zaXRpb24gbm9kZSBhcmUKKyAgICAgICAgLy8gZWRpdGFibGUgYmVjYXVzZSBK
YXZhU2NyaXB0IG1heSBkZWxldGUgYSBwYXJlbnQgbm9kZSBvZiB0aGUgY29tcG9zaXRpb24KKyAg
ICAgICAgLy8gbm9kZS4gSW4gdGhpcyBjYXNlLCBXZWJLaXQgY3Jhc2hlcyB3aGlsZSBkZWxldGlu
ZyB0ZXh0cyBmcm9tIHRoZSBwYXJlbnQKKyAgICAgICAgLy8gbm9kZSwgd2hpY2ggZG9lc24ndCBl
eGlzdCBhbnkgbG9uZ2VyLgorICAgICAgICBpZiAoUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UgPSBl
ZGl0b3ItPmNvbXBvc2l0aW9uUmFuZ2UoKSkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IHJh
bmdlLT5zdGFydENvbnRhaW5lcigpOworICAgICAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5p
c0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiB0YXJnZXRGcmFtZTsKK30KKwordm9pZCBXZWJQYWdlOjpjb25m
aXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiBjb21wb3NpdGlvblN0cmluZywgaW50NjRfdCBz
ZWxlY3Rpb25TdGFydCwgaW50NjRfdCBzZWxlY3Rpb25MZW5ndGgsIEVkaXRvclN0YXRlJiBuZXdT
dGF0ZSkKK3sKKyAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZUZvckVkaXRpbmco
dGhpcyk7CisgICAgaWYgKCF0YXJnZXRGcmFtZSkgeworICAgICAgICBuZXdTdGF0ZSA9IGVkaXRv
clN0YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFZGl0b3IqIGVkaXRvciA9
IHRhcmdldEZyYW1lLT5lZGl0b3IoKTsKKyAgICBlZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbihj
b21wb3NpdGlvblN0cmluZyk7CisKKyAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPT0gLTEpIHsKKyAg
ICAgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgRWxlbWVudCogc2NvcGUgPSB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChzY29wZSwgc2VsZWN0aW9uU3RhcnQs
IHNlbGVjdGlvbkxlbmd0aCk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzZWxlY3Rpb25SYW5n
ZSwgIkludmFsaWQgc2VsZWN0aW9uOiBbJWxsZDolbGxkXSBpbiB0ZXh0IG9mIGxlbmd0aCAlZCIs
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc2VsZWN0aW9uU3RhcnQpLCBzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KHNlbGVjdGlvbkxlbmd0aCksIHNjb3BlLT5pbm5lclRleHQoKS5sZW5ndGgoKSk7CisK
KyAgICBpZiAoc2VsZWN0aW9uUmFuZ2UpIHsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24oc2VsZWN0aW9uUmFuZ2UuZ2V0KCksIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICAg
ICAgdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAg
ICB9CisgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOworfQorCit2b2lkIFdlYlBhZ2U6OnNl
dENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJs
aW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0
aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudExl
bmd0aCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKQoreworICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9
IHRhcmdldEZyYW1lRm9yRWRpdGluZyh0aGlzKTsKKyAgICBpZiAoIXRhcmdldEZyYW1lKSB7Cisg
ICAgICAgIG5ld1N0YXRlID0gZWRpdG9yU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICghdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgp
KSB7CisgICAgICAgIG5ld1N0YXRlID0gZWRpdG9yU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChyZXBsYWNlbWVudExlbmd0aCA+IDApIHsKKyAgICAgICAgLy8gVGhl
IGxheW91dCBuZWVkcyB0byBiZSB1cHRvZGF0ZSBiZWZvcmUgc2V0dGluZyBhIHNlbGVjdGlvbgor
ICAgICAgICB0YXJnZXRGcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisKKyAgICAg
ICAgRWxlbWVudCogc2NvcGUgPSB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChzY29wZSwgcmVwbGFjZW1lbnRT
dGFydCwgcmVwbGFjZW1lbnRMZW5ndGgpOworICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkt
PnNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKHRydWUpOworICAgICAgICB0YXJn
ZXRGcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJlcGxh
Y2VtZW50UmFuZ2UuZ2V0KCksIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIHRhcmdl
dEZyYW1lLT5lZGl0b3IoKS0+c2V0SWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoZmFs
c2UpOworICAgIH0KKworICAgIHRhcmdldEZyYW1lLT5lZGl0b3IoKS0+c2V0Q29tcG9zaXRpb24o
dGV4dCwgdW5kZXJsaW5lcywgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7CisgICAgbmV3
U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOworfQorCit2b2lkIFdlYlBhZ2U6OmNhbmNlbENvbXBvc2l0
aW9uKEVkaXRvclN0YXRlJiBuZXdTdGF0ZSkKK3sKKyAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSB0
YXJnZXRGcmFtZUZvckVkaXRpbmcodGhpcyk7CisgICAgaWYgKCF0YXJnZXRGcmFtZSkgeworICAg
ICAgICBuZXdTdGF0ZSA9IGVkaXRvclN0YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPmNhbmNlbENvbXBvc2l0aW9uKCk7CisgICAgbmV3
U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMTVk
YTdmNWYxNWJhNjJmYmRjMDdiODc2Zjc4M2RkNGEyZGQwMTQ0OC4uNTIxNWU3ZWEyZDk2MDJmNGZk
ZWI3MzIwM2EzNTc0MDhlYzE5MzgwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCkBAIC0zOTAsMTAgKzM5MCwxMCBAQCBwdWJsaWM6CiAKICAgICBTYW5k
Ym94RXh0ZW5zaW9uVHJhY2tlciYgc2FuZGJveEV4dGVuc2lvblRyYWNrZXIoKSB7IHJldHVybiBt
X3NhbmRib3hFeHRlbnNpb25UcmFja2VyOyB9CiAKLSNpZiBQTEFURk9STShRVCkKLSAgICB2b2lk
IHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBv
c2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWlu
dDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2
NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpOwotICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNv
bnN0IFN0cmluZyYgdGV4dCwgaW50NjRfdCBzZWxlY3Rpb25TdGFydCwgaW50NjRfdCBzZWxlY3Rp
b25MZW5ndGgpOwotICAgIHZvaWQgY2FuY2VsQ29tcG9zaXRpb24oKTsKKyNpZiBQTEFURk9STShR
VCkgfHwgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMs
IHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90
IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCwgRWRp
dG9yU3RhdGUmKTsKKyAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRl
eHQsIGludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIGludDY0X3Qgc2VsZWN0aW9uTGVuZ3RoLCBFZGl0
b3JTdGF0ZSYpOworICAgIHZvaWQgY2FuY2VsQ29tcG9zaXRpb24oRWRpdG9yU3RhdGUmKTsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCAzYjBjZWRjNGFjODgxMDUy
NjIwMGMzYTRjM2VmNGZjMGI1YzU4OGJhLi4yM2QyNjU1ZDkwMGVhODM0N2QzZTg1ZWNkMzE0MDFm
OTI2ZWNjZTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtMjIwLDEwICsyMjAsMTAgQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZSB7CiAgICAgU2V0Q2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGJvb2wgY2Fu
UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKQogICAgIFNldENhblJ1bk1vZGFsKGJvb2wgY2Fu
UnVuTW9kYWwpCiAKLSNpZiBQTEFURk9STShRVCkKLSAgICBTZXRDb21wb3NpdGlvbihXVEY6OlN0
cmluZyB0ZXh0LCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5k
ZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwg
dWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdl
RW5kKQotICAgIENvbmZpcm1Db21wb3NpdGlvbihXVEY6OlN0cmluZyB0ZXh0LCBpbnQ2NF90IHNl
bGVjdGlvblN0YXJ0LCBpbnQ2NF90IHNlbGVjdGlvbkxlbmd0aCkKLSAgICBDYW5jZWxDb21wb3Np
dGlvbigpCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyAgICBTZXRDb21wb3Np
dGlvbihXVEY6OlN0cmluZyB0ZXh0LCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVu
ZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNl
bGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBs
YWNlbWVudFJhbmdlRW5kKSAtPiAoV2ViS2l0OjpFZGl0b3JTdGF0ZSBuZXdTdGF0ZSkKKyAgICBD
b25maXJtQ29tcG9zaXRpb24oV1RGOjpTdHJpbmcgdGV4dCwgaW50NjRfdCBzZWxlY3Rpb25TdGFy
dCwgaW50NjRfdCBzZWxlY3Rpb25MZW5ndGgpIC0+IChXZWJLaXQ6OkVkaXRvclN0YXRlIG5ld1N0
YXRlKQorICAgIENhbmNlbENvbXBvc2l0aW9uKCkgLT4gKFdlYktpdDo6RWRpdG9yU3RhdGUgbmV3
U3RhdGUpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKaW5kZXggMmU5MGE3MzYwYjg4
OGI1Njk1MWRkNzlmODNiYzJjODM4MDMxZWM3Mi4uYWJhYTU5YWNiNGE4ZjI5ZTRhZTc0M2U4ZWU2
ZGY4NGJiMDI4OGVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3F0L1dlYlBhZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL3F0L1dlYlBhZ2VRdC5jcHAKQEAgLTMwNCw5MCArMzA0LDYgQEAgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IFdlYlBhZ2U6OmNhY2hlZFJlc3BvbnNlRGF0YUZvclVSTChjb25zdCBLVVJMJikK
ICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIEZyYW1lKiB0YXJnZXRGcmFtZUZvckVkaXRpbmco
V2ViUGFnZSogcGFnZSkKLXsKLSAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSBwYWdlLT5jb3JlUGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0KLSAgICBpZiAo
IXRhcmdldEZyYW1lIHx8ICF0YXJnZXRGcmFtZS0+ZWRpdG9yKCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgRWRpdG9yKiBlZGl0b3IgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCk7Ci0gICAgaWYg
KCFlZGl0b3ItPmNhbkVkaXQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZWRpdG9y
LT5oYXNDb21wb3NpdGlvbigpKSB7Ci0gICAgICAgIC8vIFdlIHNob3VsZCB2ZXJpZnkgdGhlIHBh
cmVudCBub2RlIG9mIHRoaXMgSU1FIGNvbXBvc2l0aW9uIG5vZGUgYXJlCi0gICAgICAgIC8vIGVk
aXRhYmxlIGJlY2F1c2UgSmF2YVNjcmlwdCBtYXkgZGVsZXRlIGEgcGFyZW50IG5vZGUgb2YgdGhl
IGNvbXBvc2l0aW9uCi0gICAgICAgIC8vIG5vZGUuIEluIHRoaXMgY2FzZSwgV2ViS2l0IGNyYXNo
ZXMgd2hpbGUgZGVsZXRpbmcgdGV4dHMgZnJvbSB0aGUgcGFyZW50Ci0gICAgICAgIC8vIG5vZGUs
IHdoaWNoIGRvZXNuJ3QgZXhpc3QgYW55IGxvbmdlci4KLSAgICAgICAgaWYgKFBhc3NSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3NpdGlvblJhbmdlKCkpIHsKLSAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKLSAgICAgICAgICAgIGlmICgh
bm9kZSB8fCAhbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGFyZ2V0RnJhbWU7Ci19Ci0KLXZv
aWQgV2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25T
dHJpbmcsIGludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIGludDY0X3Qgc2VsZWN0aW9uTGVuZ3RoKQot
ewotICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRm9yRWRpdGluZyh0aGlzKTsK
LSAgICBpZiAoIXRhcmdldEZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFZGl0b3IqIGVk
aXRvciA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKTsKLSAgICBlZGl0b3ItPmNvbmZpcm1Db21wb3Np
dGlvbihjb21wb3NpdGlvblN0cmluZyk7Ci0KLSAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPT0gLTEp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEVsZW1lbnQqIHNjb3BlID0gdGFyZ2V0RnJhbWUtPnNl
bGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxl
Y3Rpb25SYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2Nv
cGUsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25MZW5ndGgpOwotICAgIEFTU0VSVF9XSVRIX01F
U1NBR0Uoc2VsZWN0aW9uUmFuZ2UsICJJbnZhbGlkIHNlbGVjdGlvbjogWyVsbGQ6JWxsZF0gaW4g
dGV4dCBvZiBsZW5ndGggJWQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNlbGVjdGlvblN0YXJ0
KSwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihzZWxlY3Rpb25MZW5ndGgpLCBzY29wZS0+aW5uZXJU
ZXh0KCkubGVuZ3RoKCkpOwotCi0gICAgaWYgKHNlbGVjdGlvblJhbmdlKSB7Ci0gICAgICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKHNlbGVjdGlvblJhbmdlLmdldCgpLCBTRUxfREVGQVVM
VF9BRkZJTklUWSk7Ci0gICAgICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0
aW9uKHNlbGVjdGlvbik7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IHN0YXRpY19jYXN0PFdlYkVk
aXRvckNsaWVudCo+KGVkaXRvci0+Y2xpZW50KCkpLT5zZW5kU2VsZWN0aW9uQ2hhbmdlZE1lc3Nh
Z2UoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRl
eHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2Vs
ZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRT
dGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRMZW5ndGgpCi17Ci0gICAgRnJhbWUqIHRhcmdldEZy
YW1lID0gdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKHRoaXMpOwotICAgIGlmICghdGFyZ2V0RnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEVsZW1lbnQqIHNjb3BlID0gdGFyZ2V0RnJhbWUtPnNl
bGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0KLSAgICBpZiAodGFyZ2V0RnJhbWUt
PnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgIGlmIChyZXBsYWNl
bWVudExlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIC8vIFRoZSBsYXlvdXQgbmVlZHMgdG8gYmUg
dXB0b2RhdGUgYmVmb3JlIHNldHRpbmcgYSBzZWxlY3Rpb24KLSAgICAgICAgICAgIHRhcmdldEZy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKLQotICAgICAgICAgICAgUmVmUHRyPFJh
bmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFu
ZExlbmd0aChzY29wZSwgcmVwbGFjZW1lbnRTdGFydCwgcmVwbGFjZW1lbnRMZW5ndGgpOwotCi0g
ICAgICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPnNldElnbm9yZUNvbXBvc2l0aW9uU2Vs
ZWN0aW9uQ2hhbmdlKHRydWUpOwotICAgICAgICAgICAgdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigp
LT5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBT
RUxfREVGQVVMVF9BRkZJTklUWSkpOwotICAgICAgICAgICAgdGFyZ2V0RnJhbWUtPmVkaXRvcigp
LT5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZShmYWxzZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPnNldENvbXBvc2l0aW9uKHRleHQsIHVu
ZGVybGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotCi0gICAgICAgIC8vIEZJ
WE1FOiBzdGF0aWNfY2FzdDxXZWJFZGl0b3JDbGllbnQqPih0YXJnZXRGcmFtZS0+ZWRpdG9yKCkt
PmNsaWVudCgpKS0+c2VuZFNlbGVjdGlvbkNoYW5nZWRNZXNzYWdlKCk7Ci0gICAgfQotfQotCi12
b2lkIFdlYlBhZ2U6OmNhbmNlbENvbXBvc2l0aW9uKCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSB0
YXJnZXRGcmFtZUZvckVkaXRpbmcodGhpcyk7Ci0KLSAgICBmcmFtZS0+ZWRpdG9yKCktPmNhbmNl
bENvbXBvc2l0aW9uKCk7Ci0KLSAgICAvLyBGSVhNRTogc3RhdGljX2Nhc3Q8V2ViRWRpdG9yQ2xp
ZW50Kj4odGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKSktPnNlbmRTZWxlY3Rpb25DaGFu
Z2VkTWVzc2FnZSgpOwotfQotCiB2b2lkIFdlYlBhZ2U6OnJlZ2lzdGVyQXBwbGljYXRpb25TY2hl
bWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiB7CiAgICAgUXROZXR3b3JrQWNjZXNzTWFuYWdlciog
cW5hbSA9IHFvYmplY3RfY2FzdDxRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKj4oV2ViUHJvY2Vzczo6
c2hhcmVkKCkubmV0d29ya0FjY2Vzc01hbmFnZXIoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDFmMGE1NmNjNTVlMjUwMmUzYzIyOGFhNzYw
OTRmMjA5MTAxNDBlZC4uMmUwMWNlMzBjNTA0ZmU3ZGJhMjNjZjNhZDYwOWQ1ZGU0MmU4NGM1OSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE5IEBACisyMDEyLTA2LTEwICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXVtXSzJdIEFkZCBzdXBwb3J0IGZvciBJTUUgQ29tcG9zaXRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDkz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRl
IHVuaXQgdGVzdHMgZm9yIEd0a0lucHV0TWV0aG9kRmlsdGVyIHRvIG5vdGUgd2hldGhlciBvciBu
b3QgYW4gZXZlbnQKKyAgICAgICAgd2FzIGEgZmFrZSBldmVudCBzeW50aGVzaXplZCBmb3IgY29t
cG9zaXRpb24gcHVycG9zZXMuIFRoaXMgaXMgbm93IHVzZWQKKyAgICAgICAgZm9yIFdlYktpdDIu
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2d0ay9JbnB1dE1ldGhvZEZpbHRlci5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0SW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRT
aW1wbGVLZXlFdmVudCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0SW5wdXRNZXRob2RG
aWx0ZXI6OnNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTItMDYtMDggIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCB1bml0IHRlc3RzIGZvciBHdGtJ
bnB1dE1ldGhvZEZpbHRlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9n
dGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9ndGsv
SW5wdXRNZXRob2RGaWx0ZXIuY3BwCmluZGV4IDhkZjg4MjNhZWYzYzFkOWQzZjE5YjQ5MTU0Zjlm
YmE4NzBmOTQxOTcuLjRmZDNhMjM2OWY0YjllNDQ3MDc2ZTljNjFkY2RiMjg5MzczYWY5YjMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvZ3RrL0lucHV0TWV0aG9kRmlsdGVy
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2d0ay9JbnB1dE1ldGhvZEZpbHRl
ci5jcHAKQEAgLTc4LDIxICs3OCwyMyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCBib29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQsIFdU
Rjo6U3RyaW5nIGV2ZW50U3RyaW5nKQorICAgIHZpcnR1YWwgYm9vbCBzZW5kU2ltcGxlS2V5RXZl
bnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBXVEY6OlN0cmluZyBldmVudFN0cmluZywgRXZlbnRGYWtl
ZCBmYWtlZCkKICAgICB7CiAgICAgICAgIGNvbnN0IGNoYXIqIGV2ZW50VHlwZSA9IGV2ZW50LT50
eXBlID09IEdES19LRVlfUkVMRUFTRSA/ICJyZWxlYXNlIiA6ICJwcmVzcyI7CisgICAgICAgIGNv
bnN0IGNoYXIqIGZha2VkU3RyaW5nID0gZmFrZWQgPT0gRmFrZUV2ZW50ID8gIiAoZmFrZWQpIiA6
ICIiOwogICAgICAgICBpZiAoIWV2ZW50U3RyaW5nLmlzTnVsbCgpKQotICAgICAgICAgICAgbV9l
dmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT0lcyBr
ZXljb2RlPSV4IHRleHQ9JyVzJyIsIGV2ZW50VHlwZSwgZXZlbnQtPmtleXZhbCwgZXZlbnRTdHJp
bmcudXRmOCgpLmRhdGEoKSkpOworICAgICAgICAgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZzo6
Zm9ybWF0KCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT0lcyBrZXljb2RlPSV4IHRleHQ9JyVzJyVz
IiwgZXZlbnRUeXBlLCBldmVudC0+a2V5dmFsLCBldmVudFN0cmluZy51dGY4KCkuZGF0YSgpLCBm
YWtlZFN0cmluZykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2V2ZW50cy5hcHBlbmQo
U3RyaW5nOjpmb3JtYXQoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSVzIGtleWNvZGU9JXgiLCBl
dmVudFR5cGUsIGV2ZW50LT5rZXl2YWwpKTsKKyAgICAgICAgICAgIG1fZXZlbnRzLmFwcGVuZChT
dHJpbmc6OmZvcm1hdCgic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9JXMga2V5Y29kZT0leCVzIiwg
ZXZlbnRUeXBlLCBldmVudC0+a2V5dmFsLCBmYWtlZFN0cmluZykpOwogCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBzZW5kS2V5RXZlbnRXaXRoQ29tcG9z
aXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiBldmVudCwgUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9T
ZW5kKQorICAgIHZpcnR1YWwgYm9vbCBzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRz
KEdka0V2ZW50S2V5KiBldmVudCwgUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9TZW5kLCBFdmVudEZh
a2VkIGZha2VkKQogICAgIHsKICAgICAgICAgY29uc3QgY2hhciogZXZlbnRUeXBlID0gZXZlbnQt
PnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFID8gInJlbGVhc2UiIDogInByZXNzIjsKLSAgICAgICAg
bV9ldmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRp
b25SZXN1bHRzIHR5cGU9JXMga2V5Y29kZT0ldSIsIGV2ZW50VHlwZSwgZXZlbnQtPmtleXZhbCkp
OworICAgICAgICBjb25zdCBjaGFyKiBmYWtlZFN0cmluZyA9IGZha2VkID09IEZha2VFdmVudCA/
ICIgKGZha2VkKSIgOiAiIjsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0
KCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9JXMga2V5Y29kZT0ldSVz
IiwgZXZlbnRUeXBlLCBldmVudC0+a2V5dmFsLCBmYWtlZFN0cmluZykpOwogCiAgICAgICAgIGlm
IChyZXN1bHRzVG9TZW5kICYgQ29tcG9zaXRpb24gJiYgIW1fY29uZmlybWVkQ29tcG9zaXRpb24u
aXNOdWxsKCkpCiAgICAgICAgICAgICBjb25maXJtQ29tcG9zaXRpb25UZXh0KG1fY29uZmlybWVk
Q29tcG9zaXRpb24pOwpAQCAtMjM5LDEyICsyNDEsMTIgQEAgVEVTVChHVEssIEd0a0lucHV0TWV0
aG9kRmlsdGVyQ29udGV4dEV2ZW50c1dpdGhvdXRLZXlFdmVudHMpCiAKICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZXZlbnRzID0gaW5wdXRNZXRob2RGaWx0ZXIuZXZlbnRzKCk7CiAgICAgQVNT
RVJUX0VRKDYsIGV2ZW50cy5zaXplKCkpOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlF
dmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTE2Nzc3MjE1Iiks
IGV2ZW50c1swXSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBv
c2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9MTY3NzcyMTUgKGZha2VkKSIpLCBldmVu
dHNbMF0pOwogICAgIEFTU0VSVF9FUShTdHJpbmcoInNldFByZWVkaXQgdGV4dD0ncHJlZWRpdCBv
ZiBkb29tLCBicmluZ2VyIG9mIGNoZWVzZScgY3Vyc29yT2Zmc2V0PTMiKSwgZXZlbnRzWzFdKTsK
LSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtl
eWNvZGU9ZmZmZmZmIiksIGV2ZW50c1syXSk7Ci0gICAgQVNTRVJUX0VRKFN0cmluZygic2VuZEtl
eUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNzIGtleWNvZGU9MTY3NzcyMTUi
KSwgZXZlbnRzWzNdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQg
dHlwZT1yZWxlYXNlIGtleWNvZGU9ZmZmZmZmIChmYWtlZCkiKSwgZXZlbnRzWzJdKTsKKyAgICBB
U1NFUlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9
cHJlc3Mga2V5Y29kZT0xNjc3NzIxNSAoZmFrZWQpIiksIGV2ZW50c1szXSk7CiAgICAgQVNTRVJU
X0VRKFN0cmluZygiY29uZmlybUNvbXBvc2l0aW9uICdjb21taXQgdGV4dCciKSwgZXZlbnRzWzRd
KTsKLSAgICBBU1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNl
IGtleWNvZGU9ZmZmZmZmIiksIGV2ZW50c1s1XSk7CisgICAgQVNTRVJUX0VRKFN0cmluZygic2Vu
ZFNpbXBsZUtleUV2ZW50IHR5cGU9cmVsZWFzZSBrZXljb2RlPWZmZmZmZiAoZmFrZWQpIiksIGV2
ZW50c1s1XSk7CiB9CiAKIHN0YXRpYyBib29sIGdTYXdDb250ZXh0UmVzZXQgPSBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156097</attachid>
            <date>2012-08-02 08:38:21 -0700</date>
            <delta_ts>2012-08-03 03:18:40 -0700</delta_ts>
            <desc>Respond to review comments</desc>
            <filename>bug-65093-20120802173801.patch</filename>
            <type>text/plain</type>
            <size>65442</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGZmNGU1YTQzM2E3ZTY1
ZGYyOTgxNzc5MjNlZDdlYTQ4NzQ0ZGQ3Yi4uZWUyYjMwODE4ZDllYWNhYjliYjBhNTYyZDMzNjIw
YjBjN2IwZjMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA2LTEwICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXSzJd
IEFkZCBzdXBwb3J0IGZvciBJTUUgQ29tcG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGUgR3RrSW5wdXRNZXRob2RG
aWx0ZXIgaXMgY292ZXJlZCBieSB1bml0IHRlc3RzIGluIFRlc3RXZWJLaXRBUEkuCisgICAgICAg
IERvaW5nIGZ1bmN0aW9uYWwgdGVzdHMgZm9yIHRoaXMgYmVoYXZpb3IgaXMgbXVjaCBtb3JlIGNv
bXBsZXguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3RrSW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRDb21wb3NpdGlv
bkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyk6IE5vdworICAgICAgICBwYXNzIGFsb25nIHdo
ZXRoZXIgb3Igbm90IGFuIGV2ZW50IHdhcyBmYWtlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
R3RrSW5wdXRNZXRob2RGaWx0ZXIuaDogRGl0dG8uCisKIDIwMTItMDgtMDIgIFl1cnkgU2VtaWto
YXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcmVt
b3ZlIGV4dHJhT2JqZWN0U2l6ZSBwYXJhbWV0ZXIgZnJvbSBNZW1vcnlDbGFzc0luZm8gY29uc3Ry
dWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCAwNWMxNDEwNDVjMWVkYjM3Zjc1YmI2NTMyNzMxNjdk
ZDA1NTAzZmJhLi5kNzY3ODI0MGE0Y2MyM2QzMzZhNjE5ODRjYzUwZGVkMWM1OGJjYWNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDYtMTAgIE1hcnRpbiBSb2JpbnNv
biAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dLMl0gQWRkIHN1cHBv
cnQgZm9yIElNRSBDb21wb3NpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjUwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBVcGRhdGUgdGhlIG1ldGhvZCBzaWduYXR1cmVzIGZvciBjb25jcmV0ZSBX
ZWJLaXQxIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIHRoZSBHdGtJbnB1dE1ldGhvZEZpbHRl
ci4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpZXdJbnB1dE1ldGhvZEZpbHRlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbnB1dE1ldGhvZEZpbHRlcjo6c2VuZFNpbXBs
ZUtleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lucHV0TWV0aG9kRmlsdGVyOjpz
ZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXIuaDoKKyAgICAgICAgKFdlYlZpZXdJbnB1dE1l
dGhvZEZpbHRlcik6CisKIDIwMTItMDgtMDIgIENsYXVkaW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQgV2ViS2l0TmV0d29ya1Jlc3BvbnNlOjpz
dWdnZXN0ZWQtZmlsZW5hbWUgcHJvcGVydHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkYmY2N2Y3NWQ1MDllYTg1
ZjNhZTM1MmE0NTM2YTJmMTA5Njc2MTNkLi42YmIzZDhjN2E2NTU4ZGZlZWZjYzA4OGFjYTNjZDNj
YmU4NzhmNjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODAgQEAKKzIwMTItMDYtMTAgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dLMl0g
QWRkIHN1cHBvcnQgZm9yIElNRSBDb21wb3NpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBXZWJLaXQyIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBHdGtJbnB1dE1ldGhvZEZpbHRlciBhbmQgcHJvdmlkZQorICAgICAgICB0aGUgbmVjZXNzYXJ5
IHBsdW1iaW5nIHRvIHBhc3MgY29tcG9zaXRpb24gaW5mb3JtYXRpb24gYWxvbmcgd2l0aAorICAg
ICAgICBpbnB1dCBtZXRob2QgZXZlbnRzLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5h
bTogQWRkIG5ldyBmaWxlcyB0byB0aGUgc291cmNlIGxpc3QuCisgICAgICAgICogU2hhcmVkL0Vk
aXRvclN0YXRlLmNwcDogVGhlIGN1cnNvclJlY3QgaXMgbm93IHBhc3NlZCBmb3IgR1RLKyBhcyB3
ZWxsIGFzCisgICAgICAgIFF0LCBzbyB1cGRhdGUgdGhlIGVuY29kZSBhbmQgZGVjb2RlIG1ldGhv
ZHMgdG8gcGFzcyB0aGF0IGFsb25nLgorICAgICAgICAqIFNoYXJlZC9FZGl0b3JTdGF0ZS5oOiBB
ZGQgdGhlIGN1cnNvclJlY3QgbWVtYmVyIGZvciBHVEsrIGFzIHdlbGwuCisgICAgICAgICogU2hh
cmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQpOiBLZXlib2FyZCBldmVudHMgc2hvdWxkIGFsc28gaGF2ZSBrbm93bGVkZ2Ugb2YKKyAg
ICAgICAgdGhlIGNvbXBvc2l0aW9uUmVzdWx0cyBhbmQgd2hldGhlciBvciBub3QgdGhlIGV2ZW50
IHdhcyBmYWtlZCBmb3IgY29tcG9zaXRpb24KKyAgICAgICAgcHVycG9zZXMuCisgICAgICAgICog
U2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcDogRGl0dG8uCisgICAgICAg
ICogU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJF
dmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQpOiBDb3B5IHRoZSBsb2dpYyBvZiBQ
bGF0Zm9ybUtleUV2ZW50LAorICAgICAgICBmb3IgcHJvcGVybHkgc2V0dGluZyB0aGUgd2luZG93
cyBrZXkgY29kZSBhbmQgdGhlIGV2ZW50IHRleHQgZnJvbSB0aGUgY29tcG9zaXRpb24KKyAgICAg
ICAgcmVzdWx0cy4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oOiBUaGUg
Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudCBmYWN0b3J5IG5vdyB0YWtlcyBhCisgICAgICAgIENvbXBv
c2l0aW9uUmVzdWx0cyBhcmd1bWVudC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdl
Q2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkb25lV2l0
aEtleUV2ZW50KTogRG9uJ3QgZm9yd2FyZCBrZXlib2FyZCBldmVudHMgdGhhdAorICAgICAgICB3
ZXJlIGZha2VkIGZvciBjb21wb3NpdGlvbiByZWFzb25zLiBUaGVzZSBldmVudHMgb3JpZ2luYXRl
ZCBmcm9tIFdlYktpdCBhbmQgc2hvdWxkCisgICAgICAgIG5ldmVyIGJlIHBhc3NlZCB0byBwYXJl
bnQgY2xhc3Nlcy4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0ZVRleHRJ
bnB1dFN0YXRlKTogUGx1bWIgdGhyb3VnaCB0aGUgdXBkYXRlVGV4dElucHV0U3RhdGUKKyAgICAg
ICAgbWV0aG9kIHRvIHRoZSBXZWJWaWV3QmFzZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAoUGFnZUNsaWVudEltcGwpOiBBZGQgYSB1cGRh
dGVUZXh0SW5wdXRTdGF0ZSBtZXRob2QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuY3BwOiAKKyAgICAgICAgKF9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUp
OiBJbnN0ZWFkIG9mIGhhdmluZyBhbiBpbnB1dCBtZXRob2QgY29udGV4dCBhcyBhIG1lbWJlcgor
ICAgICAgICBrZWVwIGEgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci4KKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdCYXNlUmVhbGl6ZSk6IFNldCB0aGUgZmlsdGVyIHdpZGdldCB3aGVuIHRoZSBX
ZWJWaWV3QmFzZSBpcyByZWFsaXplZC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2lu
aXQpOiBObyBsb25nZXIgY3JlYXRlIGEgaW5wdXQgbWV0aG9kIGNvbnRleHQgZHVyaW5nIGluaXQu
CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUZvY3VzSW5FdmVudCk6IFBhc3MgYWxvbmcgZm9j
dXMgaW4gZXZlbnRzIHRvIHRoZSBmaWx0ZXIuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZUZv
Y3VzT3V0RXZlbnQpOiBQYXNzIGFsb25nIGZvY3VzIG91dCBldmVudHMgdG8gdGhlIGZpbHRlci4K
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlS2V5UHJlc3NFdmVudCk6IEluc3RlYWQgb2YgcGFz
c2luZyBrZXkgcHJlc3NlcyBkaXJlY3RseSB0byB0aGUgV2ViUHJvY2VzcywKKyAgICAgICAgZmls
dGVyIHRoZW0gdGhyb3VnaCB0aGUgaW5wdXQgbWV0aG9kIGZpbHRlci4KKyAgICAgICAgKHdlYmtp
dFdlYlZpZXdCYXNlS2V5UmVsZWFzZUV2ZW50KTogRGl0dG8uCisgICAgICAgICh3ZWJraXRXZWJW
aWV3QmFzZUJ1dHRvblByZXNzRXZlbnQpOiBOb3RpZnkgdGhlIGlucHV0IG1ldGhvZCBmaWx0ZXIg
YWJvdXQgYnV0dG9uIHByZXNzIGV2ZW50cy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlR2V0
SU1Db250ZXh0KTogVGhlIGlucHV0IG1ldGhvZCBmaWx0ZXIgb3ducyB0aGUgaW5wdXQgbWV0aG9k
IG5vdy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5wdXRNZXRob2RTdGF0ZSk6IEFk
ZCBhIGJpdCBvZiBwbHVtYmluZyBmb3IgdGhlIFBhZ2VDbGllbnQuCisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZVVwZGF0ZVRleHRJbnB1dFN0YXRlKTogRGl0dG8uCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmg6IEFkZCBwbHVtYmluZyBkZWNs
YXJhdGlvbnMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1l
dGhvZEZpbHRlci5jcHA6IEFkZGVkLiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBHdGtJbnB1dE1ldGhv
ZEZpbHRlciBmb3IgV2ViS2l0Mi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3
QmFzZUlucHV0TWV0aG9kRmlsdGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L1dlYlZpZXdJbnB1dE1ldGhvZEZpbHRlci5oLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgIChQYWdlQ2xpZW50KTogdXBkYXRlSW5wdXRNZXRo
b2Qgc3RhdGUgaXMgbm93IGZvciBib3RoIFF0IGFuZCBHVEsrLgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmVkaXRv
clN0YXRlQ2hhbmdlZCk6IFBhc3MgdGhlIGVkaXRvciBzdGF0ZSBmb3IgR1RLKyBhcyB3ZWxsIGFz
IFF0LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENvbXBvc2l0aW9uKTogTW92
ZWQgdGhpcyBtZXRob2QgZnJvbSBXZWJQYWdlUHJveHlRdCBhcyBpdCdzIHVzZWQgZm9yIEdUSysg
bm93IGFzIHdlbGwuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29uZmlybUNvbXBv
c2l0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2FuY2VsQ29t
cG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6Cisg
ICAgICAgIChXZWJQYWdlUHJveHkpOiBUaGUgc2V0SW5wdXRNZXRob2RTdGF0ZSBtZXNzYWdlIGlz
IGZvciBHVEsrIGFzIHdlbGwgYXMgUXQgbm93LgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW46IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViUGFn
ZVByb3h5R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJbnB1dE1l
dGhvZFN0YXRlKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0
LmNwcDogTW92ZSBzb21lIG1ldGhvZHMgdG8gdGhlIHBsYXRmb3JtLWluZGVwZW5kZW50IGZpbGUu
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50
R3RrLmNwcDogTW9yZSBjbG9zZWx5IG1hdGNoIHRoZSBXZWJLaXQxCisgICAgICAgIGxvZ2ljIGZv
ciBkZWFsaW5nIHdpdGgga2V5IGV2ZW50cyBzbyB0aGF0IGNvbXBvc2l0aW9uIGV2ZW50cyB3aWxs
IGJlIGhhbmRsZWQgcHJvcGVybHkuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjplZGl0b3JTdGF0ZSk6IFByb3Blcmx5
IHBhc3MgdGhlIGN1cnNvclJlY3QgZm9yIEdUSysuCisgICAgICAgIChXZWJLaXQ6OnRhcmdldEZy
YW1lRm9yRWRpdGluZyk6IE1vdmVkIGZyb20gdGhlIFF0IGZpbGUsIGJlY2F1c2UgaXRzIHVzZWQg
YnkgR1RLKyBhcyB3ZWxsLiBUaGV5CisgICAgICAgIG5vdyBwYXNzIGFsb25nIHRoZSB1cGRhdGVk
IEVkaXRvclN0YXRlIGFzIHdlbGwsIGp1c3QgbGlrZSB0aGUgTWFjIHZlcnNpb25zLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6c2V0Q29tcG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6Y2FuY2VsQ29tcG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOiBUaGUgYWJvdmUgbWVzc2FnZXMgYXJlIG5vdyBmb3IgR1RL
KyBhcyB3ZWxsIGFzIFF0LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViUGFn
ZVF0LmNwcDogTW92ZWQgc29tZSBtZXRob2RzIHRvIHRoZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBm
aWxlLgorCiAyMDEyLTA4LTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBTbWFsbCBwYXJ0IG9mICJPdXQtb2YtcHJvY2VzcyBwbHVnLWlucyBzaG91bGQgc3Vw
cG9ydCBhc3luY2hyb25vdXMgaW5pdGlhbGl6YXRpb24uIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5jcHAKaW5kZXggZGEwZWM3ZmEw
MzE0Yzg2ODk1ZDdjMTZhMjAwMzIwNDIxMzZhMjdmNy4uNWRjOWMxY2M5YWFhMzE0MDM4MmY4ODQw
MWM4ZWE3OWUxZTljZjdhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a0lucHV0TWV0aG9kRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR3RrSW5wdXRNZXRob2RGaWx0ZXIuY3BwCkBAIC0yNzIsMTMgKzI3MiwxMyBAQCB2b2lkIEd0
a0lucHV0TWV0aG9kRmlsdGVyOjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlF
dmVudHMoUmVzdWx0c1RvUwogICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9u
ZXcoR0RLX0tFWV9QUkVTUykpOwogICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5UX1RJ
TUU7CiAgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBnQ29tcG9zaXRpb25FdmVudEtleUNvZGU7Ci0g
ICAgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cygmZXZlbnQtPmtleSwgcmVzdWx0
c1RvU2VuZCk7CisgICAgc2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cygmZXZlbnQt
PmtleSwgcmVzdWx0c1RvU2VuZCwgRXZlbnRGYWtlZCk7CiAKICAgICBtX2NvbmZpcm1lZENvbXBv
c2l0aW9uID0gU3RyaW5nKCk7CiAgICAgbV9jb21wb3NpbmdUZXh0Q3VycmVudGx5ID0gZmFsc2U7
CiAKICAgICBldmVudC0+dHlwZSA9IEdES19LRVlfUkVMRUFTRTsKLSAgICBzZW5kU2ltcGxlS2V5
RXZlbnQoJmV2ZW50LT5rZXkpOworICAgIHNlbmRTaW1wbGVLZXlFdmVudCgmZXZlbnQtPmtleSwg
U3RyaW5nKCksIEV2ZW50RmFrZWQpOwogICAgIG1fanVzdFNlbnRGYWtlS2V5VXAgPSB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrSW5wdXRNZXRo
b2RGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZp
bHRlci5oCmluZGV4IDk3YTc3MzY3NWEzZTFlOTBkYmNjZDE1MjIzODlmYTQ3OTAyMTMzZGEuLjBl
NDgyNTM0ODhkMTA0ZTg1NDNiYTBmMTI4YWE2MzM0MWVjYTdiNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtJbnB1dE1ldGhvZEZpbHRlci5oCkBAIC0xNyw2ICsx
Nyw5IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCisjaWZuZGVmIEd0
a0lucHV0TWV0aG9kRmlsdGVyX2gKKyNkZWZpbmUgR3RrSW5wdXRNZXRob2RGaWx0ZXJfaAorCiAj
aW5jbHVkZSAiR1JlZlB0ckd0ay5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDxn
ZGsvZ2RrLmg+CkBAIC01MSw2ICs1NCwxMSBAQCBwdWJsaWM6CiAKICAgICBHdGtJTUNvbnRleHQq
IGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAorICAgIGVudW0gRXZlbnRG
YWtlZEZvckNvbXBvc2l0aW9uIHsKKyAgICAgICAgRXZlbnRGYWtlZCwKKyAgICAgICAgRXZlbnRO
b3RGYWtlZAorICAgIH07CisKIHByb3RlY3RlZDoKICAgICBlbnVtIFJlc3VsdHNUb1NlbmQgewog
ICAgICAgICBQcmVlZGl0ID0gMSA8PCAxLApAQCAtNjAsOCArNjgsOCBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICB2b2lkIHNldFdpZGdldChHdGtXaWRnZXQqKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuRWRp
dCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2VuZFNpbXBsZUtleUV2ZW50KEdka0V2ZW50S2V5
KiwgV1RGOjpTdHJpbmcgZXZlbnRTdHJpbmcgPSBTdHJpbmcoKSkgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiwgUmVz
dWx0c1RvU2VuZCA9IFByZWVkaXRBbmRDb21wb3NpdGlvbikgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqLCBXVEY6OlN0cmluZyBldmVudFN0cmlu
ZyA9IFN0cmluZygpLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5vdEZha2VkKSA9
IDA7CisgICAgdmlydHVhbCBib29sIHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMo
R2RrRXZlbnRLZXkqLCBSZXN1bHRzVG9TZW5kID0gUHJlZWRpdEFuZENvbXBvc2l0aW9uLCBFdmVu
dEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5vdEZha2VkKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGNvbmZpcm1Db21wb3NpdGlvblRleHQoU3RyaW5nIGNvbXBvc2l0aW9uKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGNhbmNlbEN1cnJlbnRDb21wb3NpdGlvbigpID0gMDsKQEAgLTg4LDMgKzk2LDQgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCisjZW5kaWYgLy8gR3RrSW5wdXRN
ZXRob2RGaWx0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L1dlYlZpZXdJbnB1dE1ldGhvZEZpbHRlci5jcHAKaW5kZXggMjcwMGQ0YTU5YmVj
MmZhZTZkMGNiM2U2Nzc0ZjczMDJmMTJhZWNkYS4uMmNjYTIxNDY3ODg2ODA3NWIxNjIwZWFjOTU1
Y2E0N2NhNThmZTkzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9XZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXIuY3BwCkBAIC01MiwxMyArNTIs
MTMgQEAgYm9vbCBXZWJWaWV3SW5wdXRNZXRob2RGaWx0ZXI6OmNhbkVkaXQoKQogICAgIHJldHVy
biBmcmFtZSAmJiBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKIH0KIAotYm9vbCBXZWJWaWV3
SW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQs
IFdURjo6U3RyaW5nIHNpbXBsZVN0cmluZykKK2Jvb2wgV2ViVmlld0lucHV0TWV0aG9kRmlsdGVy
OjpzZW5kU2ltcGxlS2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBXVEY6OlN0cmluZyBzaW1w
bGVTdHJpbmcsIEV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbikKIHsKICAgICBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQgcGxhdGZvcm1FdmVudChldmVudCwgQ29tcG9zaXRpb25SZXN1bHRzKHNpbXBsZVN0
cmluZykpOwogICAgIHJldHVybiBmb2N1c2VkT3JNYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkt
PmtleUV2ZW50KHBsYXRmb3JtRXZlbnQpOwogfQogCi1ib29sIFdlYlZpZXdJbnB1dE1ldGhvZEZp
bHRlcjo6c2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSogZXZl
bnQsIFJlc3VsdHNUb1NlbmQgcmVzdWx0c1RvU2VuZCkKK2Jvb2wgV2ViVmlld0lucHV0TWV0aG9k
RmlsdGVyOjpzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiBl
dmVudCwgUmVzdWx0c1RvU2VuZCByZXN1bHRzVG9TZW5kLCBFdmVudEZha2VkRm9yQ29tcG9zaXRp
b24pCiB7CiAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IHBsYXRmb3JtRXZlbnQoZXZlbnQsIENv
bXBvc2l0aW9uUmVzdWx0cyhDb21wb3NpdGlvblJlc3VsdHM6OldpbGxTZW5kQ29tcG9zaXRpb25S
ZXN1bHRzU29vbikpOwogICAgIGlmICghZm9jdXNlZE9yTWFpbkZyYW1lKCktPmV2ZW50SGFuZGxl
cigpLT5rZXlFdmVudChwbGF0Zm9ybUV2ZW50KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdJbnB1dE1ldGhvZEZpbHRlci5oIGIvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmgKaW5kZXgg
ZmQ3MGVkYjhmMTNmYTliNmMxNTBiMzIxYjVjOWFkOTdkYTE0YTEyNC4uYjA3N2FlMDA1ZDg1MjY2
NTdmMzRhYjIwNjQwMDcxYmFmYTgwMzc4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmgKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0lucHV0TWV0aG9kRmlsdGVyLmgKQEAgLTM1
LDggKzM1LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2ViVmlldyhXZWJLaXRXZWJWaWV3Kik7
CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgc2VuZFNpbXBsZUtleUV2ZW50KEdka0V2
ZW50S2V5KiwgV1RGOjpTdHJpbmcgZXZlbnRTdHJpbmcpOwotICAgIHZpcnR1YWwgYm9vbCBzZW5k
S2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiwgUmVzdWx0c1RvU2Vu
ZCk7CisgICAgdmlydHVhbCBib29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSosIFdU
Rjo6U3RyaW5nIGV2ZW50U3RyaW5nLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24pOworICAgIHZp
cnR1YWwgYm9vbCBzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5
KiwgUmVzdWx0c1RvU2VuZCwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uKTsKICAgICB2aXJ0dWFs
IGJvb2wgY2FuRWRpdCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ29tcG9zaXRpb25UZXh0
KFN0cmluZyk7CiAgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGU3YTY0ZjAzM2JhNmZlM2VjMGJiZDdj
OTBjODYwYmY3MDgzMzU1MTIuLjkwYTNjYzhiZmFjYzYyMGNjNzM3YmZjNmVlMmQzMGYyNDExYTIw
Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIv
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNzM0LDYgKzczNCw4IEBAIHdl
YmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2luZG93UHJvcGVydGllcy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCBcCisJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmls
dGVyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9F
ZGl0b3JTdGF0ZS5jcHAKaW5kZXggNmU0NGEwZjE1YTUwOTNjZDViMTBlYWNhZDdlYjAwN2U0ZWZh
MjU3MS4uMTExNDUyNDAxMmE0OTNhOGEyOTQwNzdmODg1NzI3YTVmMGFiZGI1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwCkBAIC00NSwxMiArNDUsMTUgQEAgdm9pZCBFZGl0
b3JTdGF0ZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QK
ICAgICBlbmNvZGVyLT5lbmNvZGUoY3Vyc29yUG9zaXRpb24pOwogICAgIGVuY29kZXItPmVuY29k
ZShhbmNob3JQb3NpdGlvbik7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKGVkaXRvclJlY3QpOwotICAg
IGVuY29kZXItPmVuY29kZShjdXJzb3JSZWN0KTsKICAgICBlbmNvZGVyLT5lbmNvZGUoY29tcG9z
aXRpb25SZWN0KTsKICAgICBlbmNvZGVyLT5lbmNvZGUoaW5wdXRNZXRob2RIaW50cyk7CiAgICAg
ZW5jb2Rlci0+ZW5jb2RlKHNlbGVjdGVkVGV4dCk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHN1cnJv
dW5kaW5nVGV4dCk7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEsp
CisgICAgZW5jb2Rlci0+ZW5jb2RlKGN1cnNvclJlY3QpOworI2VuZGlmCiB9CiAKIGJvb2wgRWRp
dG9yU3RhdGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEVkaXRv
clN0YXRlJiByZXN1bHQpCkBAIC04Niw5ICs4OSw2IEBAIGJvb2wgRWRpdG9yU3RhdGU6OmRlY29k
ZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEVkaXRvclN0YXRlJiByZXN1bHQp
CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LmVkaXRvclJlY3QpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShyZXN1bHQuY3Vyc29yUmVj
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJl
c3VsdC5jb21wb3NpdGlvblJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwMiw2
ICsxMDIsMTEgQEAgYm9vbCBFZGl0b3JTdGF0ZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgRWRpdG9yU3RhdGUmIHJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQorICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC5jdXJzb3JSZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL0VkaXRvclN0YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9y
U3RhdGUuaAppbmRleCBhYzFkNzkzYWNmODcwMmZkNzExZTQ4Nzk5OGVlZjU3NGMzNzRjN2MyLi5j
Y2ZkN2I5NTQxYzA5YzQ1ZmZmMWMwNDU0MmU0MDcxMDk1N2IzNmI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRWRpdG9yU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRWRpdG9yU3RhdGUuaApAQCAtNjUsNyArNjUsNiBAQCBzdHJ1Y3QgRWRpdG9yU3RhdGUgewog
ICAgIHVuc2lnbmVkIGFuY2hvclBvc2l0aW9uOwogCiAgICAgV2ViQ29yZTo6SW50UmVjdCBlZGl0
b3JSZWN0OwotICAgIFdlYkNvcmU6OkludFJlY3QgY3Vyc29yUmVjdDsKICAgICBXZWJDb3JlOjpJ
bnRSZWN0IGNvbXBvc2l0aW9uUmVjdDsKIAogICAgIHVpbnQ2NF90IGlucHV0TWV0aG9kSGludHM7
CkBAIC03NCw2ICs3MywxMCBAQCBzdHJ1Y3QgRWRpdG9yU3RhdGUgewogICAgIFdURjo6U3RyaW5n
IHN1cnJvdW5kaW5nVGV4dDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KEdUSykKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGN1cnNvclJlY3Q7CisjZW5kaWYKKwogICAgIHZv
aWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OwogICAgIHN0YXRpYyBi
b29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBFZGl0b3JTdGF0ZSYpOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCmluZGV4
IDJkM2JiMTBkMmI2NjhmOTc4OThmZGMzMWM3OTMzODUwMmFiNDM3N2QuLjRmZDhkYTg0N2FiNmUw
M2UyZTMyOTU0MmZhZWQ0MDVjNjFmMmMyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM3LDYgKzM3LDggQEAgT0JKQ19DTEFTUyBOU1ZpZXc7CiAjaW5jbHVkZSA8UUtleUV2ZW50
PgogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgPEdPd25QdHJHdGsuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0NvbXBvc2l0aW9uUmVzdWx0cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3RrSW5w
dXRNZXRob2RGaWx0ZXIuaD4KIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwogI2Vs
aWYgUExBVEZPUk0oRUZMKQogI2luY2x1ZGUgPEV2YXMuaD4KQEAgLTU0LDcgKzU2LDcgQEAgcHVi
bGljOgogICAgIGV4cGxpY2l0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoUUtleUV2ZW50Kik7CiAj
ZWxpZiBQTEFURk9STShHVEspCiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50Jik7Ci0gICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVu
dCopOworICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoR2RrRXZlbnQqLCBjb25zdCBXZWJDb3Jl
OjpDb21wb3NpdGlvblJlc3VsdHMmLCBXZWJDb3JlOjpHdGtJbnB1dE1ldGhvZEZpbHRlcjo6RXZl
bnRGYWtlZEZvckNvbXBvc2l0aW9uKTsKICNlbGlmIFBMQVRGT1JNKEVGTCkKICAgICBOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50KGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qKTsKICAgICBOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50KGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwKik7CkBAIC02OCw2ICs3MCw4
IEBAIHB1YmxpYzoKICAgICBjb25zdCBRS2V5RXZlbnQqIG5hdGl2ZUV2ZW50KCkgY29uc3QgeyBy
ZXR1cm4gJm1fbmF0aXZlRXZlbnQ7IH0KICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBHZGtFdmVu
dCogbmF0aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUV2ZW50LmdldCgpOyB9Cisg
ICAgY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRpb25SZXN1bHRzJiBjb21wb3NpdGlvblJlc3VsdHMo
KSBjb25zdCAgeyByZXR1cm4gbV9jb21wb3NpdGlvblJlc3VsdHM7IH0KKyAgICBib29sIGlzRmFr
ZUV2ZW50Rm9yQ29tcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Zha2VFdmVudEZvckNvbXBv
c2l0aW9uOyB9CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgY29uc3Qgdm9pZCogbmF0aXZlRXZl
bnQoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUV2ZW50OyB9CiAjZW5kaWYKQEAgLTgxLDYgKzg1
LDggQEAgcHJpdmF0ZToKICAgICBRS2V5RXZlbnQgbV9uYXRpdmVFdmVudDsKICNlbGlmIFBMQVRG
T1JNKEdUSykKICAgICBHT3duUHRyPEdka0V2ZW50PiBtX25hdGl2ZUV2ZW50OworICAgIFdlYkNv
cmU6OkNvbXBvc2l0aW9uUmVzdWx0cyBtX2NvbXBvc2l0aW9uUmVzdWx0czsKKyAgICBib29sIG1f
ZmFrZUV2ZW50Rm9yQ29tcG9zaXRpb247CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgY29uc3Qg
dm9pZCogbV9uYXRpdmVFdmVudDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAKaW5kZXggMGRkYjEyNGU5
MjM1YTVmMTdlM2M3YjUyZWQ3ZWVkYWE3ZDA3NWVhMy4uNDI0ZTBiM2Y5MTNiMTBkNjRhYjY1MTc1
ZDlkNzgzY2IyM2NiMWRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9O
YXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBQ
b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTAorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyIElnYWxpYSBTLkwKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzEsMTcgKzMxLDIzIEBACiAjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5Lmgi
CiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLU5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2ZVdlYktleWJv
YXJkRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQotICAgIDogV2ViS2V5Ym9hcmRFdmVudChXZWJFdmVu
dEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQpKQorTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCogZXZlbnQsIGNvbnN0IFdl
YkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRzLCBHdGtJbnB1dE1l
dGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQorICAgIDogV2ViS2V5
Ym9hcmRFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQs
IGNvbXBvc2l0aW9uUmVzdWx0cykpCiAgICAgLCBtX25hdGl2ZUV2ZW50KGdka19ldmVudF9jb3B5
KGV2ZW50KSkKKyAgICAsIG1fY29tcG9zaXRpb25SZXN1bHRzKGNvbXBvc2l0aW9uUmVzdWx0cykK
KyAgICAsIG1fZmFrZUV2ZW50Rm9yQ29tcG9zaXRpb24oZmFrZWQgPT0gR3RrSW5wdXRNZXRob2RG
aWx0ZXI6OkV2ZW50RmFrZWQpCiB7CiB9CiAKIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2
ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCi0g
ICAgOiBXZWJLZXlib2FyZEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRF
dmVudChldmVudC5uYXRpdmVFdmVudCgpKSkKKyAgICA6IFdlYktleWJvYXJkRXZlbnQoV2ViRXZl
bnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCksIGV2
ZW50LmNvbXBvc2l0aW9uUmVzdWx0cygpKSkKICAgICAsIG1fbmF0aXZlRXZlbnQoZ2RrX2V2ZW50
X2NvcHkoZXZlbnQubmF0aXZlRXZlbnQoKSkpCisgICAgLCBtX2NvbXBvc2l0aW9uUmVzdWx0cyhl
dmVudC5jb21wb3NpdGlvblJlc3VsdHMoKSkKKyAgICAsIG1fZmFrZUV2ZW50Rm9yQ29tcG9zaXRp
b24oZXZlbnQuaXNGYWtlRXZlbnRGb3JDb21wb3NpdGlvbigpKQogewogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKaW5kZXggMDZjMmI4YzY5ZTBh
NzczZjJkYWNkYzIzMjFhMzE0NTg4NDI1YjA0ZS4uYjg5OTFjY2FkZWVhNTRmOGU2NGYzMTc4MmY5
OWI2ZTIxODM3ZjI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJF
dmVudEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRG
YWN0b3J5LmNwcApAQCAtMTcyLDE3ICsxNzIsMjQgQEAgV2ViV2hlZWxFdmVudCBXZWJFdmVudEZh
Y3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50KQogICAgICAg
ICAgICAgICAgICAgICAgICAgIGdka19ldmVudF9nZXRfdGltZShldmVudCkpOwogfQogCi1XZWJL
ZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChjb25z
dCBHZGtFdmVudCogZXZlbnQpCitXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsIGNvbnN0IFdlYkNvcmU6
OkNvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRzKQogeworICAgIHVuc2lnbmVk
IGludCBrZXlWYWx1ZSA9IGV2ZW50LT5rZXkua2V5dmFsOworICAgIFN0cmluZyB0ZXh0ID0gY29t
cG9zaXRpb25SZXN1bHRzLnNpbXBsZVN0cmluZy5sZW5ndGgoKSA/CisgICAgICAgICBjb21wb3Np
dGlvblJlc3VsdHMuc2ltcGxlU3RyaW5nIDogUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoa2V5VmFsdWUpOworCisgICAgaW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSA9IGNvbXBvc2l0aW9uUmVzdWx0cy5jb21wb3NpdGlvblVwZGF0ZWQoKSA/CisgICAgICAgICBW
S19QUk9DRVNTS0VZIDogUGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvckdk
a0tleUNvZGUoZXZlbnQtPmtleS5rZXl2YWwpOworCiAgICAgcmV0dXJuIFdlYktleWJvYXJkRXZl
bnQoKGV2ZW50LT50eXBlID09IEdES19LRVlfUkVMRUFTRSkgPyBXZWJFdmVudDo6S2V5VXAgOiBX
ZWJFdmVudDo6S2V5RG93biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVudC0+a2V5LmtleXZhbCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtleS5rZXl2YWwpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUo
ZXZlbnQtPmtleS5rZXl2YWwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6d2luZG93c0tleUNvZGVGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXkua2V5
dmFsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGV2ZW50
LT5rZXkua2V5dmFsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShrZXlWYWx1
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93c1ZpcnR1YWxLZXlDb2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oa2V5VmFsdWUpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogbWFjQ2hhckNvZGUgKi8sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogaXNBdXRvUmVwZWF0ICovLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzR2RrS2V5Q29kZUZyb21LZXlQYWQoZXZlbnQtPmtleS5rZXl2
YWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzR2RrS2V5Q29kZUZyb21LZXlQYWQo
a2V5VmFsdWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIGlzU3lzdGVt
S2V5ICovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyc0ZvckV2ZW50KGV2
ZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfZXZlbnRfZ2V0X3RpbWUoZXZl
bnQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0
b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oCmluZGV4
IDA5N2JlMDg5NjU3ODBlMjk1NGU4MzE3N2NjZjI0MWMxZjhjNmJmOTcuLjA4NTgxNWM0MmQ0Nzdi
MTJlZGY5NmQxNTY4OTI2YTlmZjhhZmU2YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9XZWJFdmVudEZhY3RvcnkuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBXZWJFdmVudEZh
Y3RvcnlfaAogCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbXBv
c2l0aW9uUmVzdWx0cy5oPgogCiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKIApA
QCAtMzcsNyArMzgsNyBAQCBjbGFzcyBXZWJFdmVudEZhY3RvcnkgewogcHVibGljOgogICAgIHN0
YXRpYyBXZWJNb3VzZUV2ZW50IGNyZWF0ZVdlYk1vdXNlRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBp
bnQpOwogICAgIHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3Qg
R2RrRXZlbnQqKTsKLSAgICBzdGF0aWMgV2ViS2V5Ym9hcmRFdmVudCBjcmVhdGVXZWJLZXlib2Fy
ZEV2ZW50KGNvbnN0IEdka0V2ZW50Kik7CisgICAgc3RhdGljIFdlYktleWJvYXJkRXZlbnQgY3Jl
YXRlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudCosIGNvbnN0IFdlYkNvcmU6OkNvbXBv
c2l0aW9uUmVzdWx0cyYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXgg
NWE2YWRhZTBhYWQwYjM1MzhmZDNiYTk0N2Q0ZjY3ZTQwZmQ5ZjVlMS4uOTQ0MzU4YjU2M2ZhZDFl
ZjE4NGQ1NzgxYmVhNTQ2Yjg3NTk5YTViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMjE2LDYgKzIxNiw4IEBAIHZv
aWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCYgZXZlbnQsIGJvb2wKIHsKICAgICBpZiAod2FzRXZlbnRIYW5kbGVkKQogICAgICAg
ICByZXR1cm47CisgICAgaWYgKGV2ZW50LmlzRmFrZUV2ZW50Rm9yQ29tcG9zaXRpb24oKSkKKyAg
ICAgICAgcmV0dXJuOwogCiAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNl
ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KTsKICAgICB3ZWJraXRXZWJWaWV3
QmFzZUZvcndhcmROZXh0S2V5RXZlbnQod2Via2l0V2ViVmlld0Jhc2UpOwpAQCAtMzA1LDYgKzMw
NywxMSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKK3sKKyAgICB3
ZWJraXRXZWJWaWV3QmFzZVVwZGF0ZVRleHRJbnB1dFN0YXRlKFdFQktJVF9XRUJfVklFV19CQVNF
KG1fdmlld1dpZGdldCkpOworfQorCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzdGFydERyYWcoY29u
c3QgV2ViQ29yZTo6RHJhZ0RhdGEmIGRyYWdEYXRhLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gZHJhZ0ltYWdlKQogewogICAgIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKFdFQktJVF9X
RUJfVklFV19CQVNFKG1fdmlld1dpZGdldCksIGRyYWdEYXRhLCBkcmFnSW1hZ2UpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXgg
NzJmYzM0NTM5YTYwODA1NjNkNzM0ZmE4OTIzOTcxYjhkMDRmODBiOS4uMjNmNGIyNmFjMzNkMjE4
ZDI3NTY3NzFmZjA0Mzc0ZGY2MGFmNjIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCkBAIC05MCw2ICs5MCw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxXVEY6OlN0
cmluZz4mKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRp
b24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKTsKICAgICB2aXJ0dWFsIHZv
aWQgY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcm
LCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0SW5w
dXRTdGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJh
Z0RhdGEmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKTsKIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCBmNjVmYTk3ZWRjN2Zm
MmZjZDJjY2YxZGZlYTE0YTlhODJhOWY3NjdjLi45ZmM1YzdmYWQ4NTI0ZDE5MTZiYjYwODg5NjJh
M2QzYzA3OTg5YmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAi
V2ViS2l0V2ViVmlld0Jhc2UuaCIKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgi
Ci0jaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdl
Yk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAjaW5jbHVk
ZSAiUGFnZUNsaWVudEltcGwuaCIKQEAgLTQxLDYgKzQwLDcgQEAKICNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3QmFzZUFjY2Vzc2libGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJWaWV3QmFzZUlu
cHV0TWV0aG9kRmlsdGVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRHdGsuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRGF0YU9iamVjdEd0ay5oPgpAQCAtODEsNyArODEsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZSB7CiAgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gcGFnZVByb3h5OwogICAg
IGJvb2wgaXNQYWdlQWN0aXZlOwogICAgIGJvb2wgc2hvdWxkRm9yd2FyZE5leHRLZXlFdmVudDsK
LSAgICBHUmVmUHRyPEd0a0lNQ29udGV4dD4gaW1Db250ZXh0OwogICAgIEd0a0NsaWNrQ291bnRl
ciBjbGlja0NvdW50ZXI7CiAgICAgQ1N0cmluZyB0b29sdGlwVGV4dDsKICAgICBHdGtEcmFnQW5k
RHJvcEhlbHBlciBkcmFnQW5kRHJvcEhlbHBlcjsKQEAgLTk3LDYgKzk2LDcgQEAgc3RydWN0IF9X
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogICAgIHVuc2lnbmVkIGluc3BlY3RvclZpZXdIZWln
aHQ7CiAgICAgR093blB0cjxHZGtFdmVudD4gY29udGV4dE1lbnVFdmVudDsKICAgICBXZWJDb250
ZXh0TWVudVByb3h5R3RrKiBhY3RpdmVDb250ZXh0TWVudVByb3h5OworICAgIFdlYlZpZXdCYXNl
SW5wdXRNZXRob2RGaWx0ZXIgaW5wdXRNZXRob2RGaWx0ZXI7CiB9OwogCiBHX0RFRklORV9UWVBF
KFdlYktpdFdlYlZpZXdCYXNlLCB3ZWJraXRfd2ViX3ZpZXdfYmFzZSwgR1RLX1RZUEVfQ09OVEFJ
TkVSKQpAQCAtMTY5LDEyICsxNjksOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJl
YWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCiAKICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfYmFj
a2dyb3VuZChndGtfd2lkZ2V0X2dldF9zdHlsZV9jb250ZXh0KHdpZGdldCksIHdpbmRvdyk7CiAK
LSAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdp
ZGdldCk7Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJp
djsKLSAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyhwcml2LT5pbUNvbnRleHQu
Z2V0KCksIHdpbmRvdyk7Ci0KICAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9n
ZXRfdG9wbGV2ZWwod2lkZ2V0KTsKICAgICBpZiAod2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2lu
ZG93KHRvcGxldmVsKSkgeworICAgICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CiAgICAgICAgIHdlYmtpdFdlYlZpZXdCYXNlTm90
aWZ5UmVzaXplclNpemVGb3JXaW5kb3cod2ViVmlldywgR1RLX1dJTkRPVyh0b3BsZXZlbCkpOwog
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHRvcGxldmVsLCAibm90aWZ5OjpyZXNpemUtZ3JpcC12
aXNpYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHRvcGxldmVsV2lu
ZG93UmVzaXplR3JpcFZpc2liaWxpdHlDaGFuZ2VkKSwgd2ViVmlldyk7CkBAIC0yNjYsNyArMjYz
LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfaW5pdChXZWJLaXRXZWJWaWV3
QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiAgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RL
X1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZSk7CiAgICAgZ3RrX3dpZGdldF9zZXRfZG91YmxlX2J1
ZmZlcmVkKHZpZXdXaWRnZXQsIEZBTFNFKTsKICAgICBndGtfd2lkZ2V0X3NldF9jYW5fZm9jdXMo
dmlld1dpZGdldCwgVFJVRSk7Ci0gICAgcHJpdi0+aW1Db250ZXh0ID0gYWRvcHRHUmVmKGd0a19p
bV9tdWx0aWNvbnRleHRfbmV3KCkpOwogCiAgICAgcHJpdi0+cGFnZUNsaWVudCA9IFBhZ2VDbGll
bnRJbXBsOjpjcmVhdGUodmlld1dpZGdldCk7CiAKQEAgLTM3MSwxMiArMzY3LDEzIEBAIHN0YXRp
YyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUZvY3VzSW5FdmVudChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRXZlbnRGb2N1cyoKICAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3
ZWJWaWV3QmFzZS0+cHJpdjsKIAogICAgIEd0a1dpZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0
X2dldF90b3BsZXZlbCh3aWRnZXQpOwotICAgIGlmICh3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxX
aW5kb3codG9wbGV2ZWwpICYmIGd0a193aW5kb3dfaGFzX3RvcGxldmVsX2ZvY3VzKEdUS19XSU5E
T1codG9wbGV2ZWwpKSkgewotICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbihwcml2LT5p
bUNvbnRleHQuZ2V0KCkpOwotICAgICAgICBpZiAoIXByaXYtPmlzUGFnZUFjdGl2ZSkgewotICAg
ICAgICAgICAgcHJpdi0+aXNQYWdlQWN0aXZlID0gVFJVRTsKLSAgICAgICAgICAgIHByaXYtPnBh
Z2VQcm94eS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0
aXZlKTsKLSAgICAgICAgfQorICAgIGlmICghd2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93
KHRvcGxldmVsKSB8fCAhZ3RrX3dpbmRvd19oYXNfdG9wbGV2ZWxfZm9jdXMoR1RLX1dJTkRPVyh0
b3BsZXZlbCkpKQorICAgICAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3Zp
ZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5mb2N1c19pbl9ldmVudCh3aWRnZXQsIGV2ZW50KTsKKwor
ICAgIHByaXYtPmlucHV0TWV0aG9kRmlsdGVyLm5vdGlmeUZvY3VzZWRJbigpOworICAgIGlmICgh
cHJpdi0+aXNQYWdlQWN0aXZlKSB7CisgICAgICAgIHByaXYtPmlzUGFnZUFjdGl2ZSA9IFRSVUU7
CisgICAgICAgIHByaXYtPnBhZ2VQcm94eS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94
eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKICAgICB9CiAKICAgICByZXR1cm4gR1RLX1dJREdFVF9D
TEFTUyh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9wYXJlbnRfY2xhc3MpLT5mb2N1c19pbl9ldmVudCh3
aWRnZXQsIGV2ZW50KTsKQEAgLTM4OSw4ICszODYsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
V2ViVmlld0Jhc2VGb2N1c091dEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEZvY3Vz
KgogCiAgICAgcHJpdi0+aXNQYWdlQWN0aXZlID0gRkFMU0U7CiAgICAgcHJpdi0+cGFnZVByb3h5
LT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwot
ICAgIGlmIChwcml2LT5pbUNvbnRleHQpCi0gICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291
dChwcml2LT5pbUNvbnRleHQuZ2V0KCkpOworICAgIHByaXYtPmlucHV0TWV0aG9kRmlsdGVyLm5v
dGlmeUZvY3VzZWRPdXQoKTsKIAogICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93
ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPmZvY3VzX291dF9ldmVudCh3aWRnZXQsIGV2ZW50
KTsKIH0KQEAgLTQyMiw3ICs0MTgsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jh
c2VLZXlQcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZQogICAgICAg
ICBwcml2LT5zaG91bGRGb3J3YXJkTmV4dEtleUV2ZW50ID0gRkFMU0U7CiAgICAgICAgIHJldHVy
biBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19iYXNlX3BhcmVudF9jbGFzcyktPmtl
eV9wcmVzc19ldmVudCh3aWRnZXQsIGV2ZW50KTsKICAgICB9Ci0gICAgcHJpdi0+cGFnZVByb3h5
LT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQocmVpbnRlcnByZXRf
Y2FzdDxHZGtFdmVudCo+KGV2ZW50KSkpOworICAgIHByaXYtPmlucHV0TWV0aG9kRmlsdGVyLmZp
bHRlcktleUV2ZW50KGV2ZW50KTsKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtNDMxLDE0ICs0
MjcsMTEgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlS2V5UmVsZWFzZUV2ZW50
KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSoKICAgICBXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOwogICAgIFdlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwogCi0gICAgaWYgKGd0
a19pbV9jb250ZXh0X2ZpbHRlcl9rZXlwcmVzcyhwcml2LT5pbUNvbnRleHQuZ2V0KCksIGV2ZW50
KSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KICAgICBpZiAocHJpdi0+c2hvdWxkRm9yd2FyZE5l
eHRLZXlFdmVudCkgewogICAgICAgICBwcml2LT5zaG91bGRGb3J3YXJkTmV4dEtleUV2ZW50ID0g
RkFMU0U7CiAgICAgICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19i
YXNlX3BhcmVudF9jbGFzcyktPmtleV9yZWxlYXNlX2V2ZW50KHdpZGdldCwgZXZlbnQpOwogICAg
IH0KLSAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKSk7CisgICAgcHJp
di0+aW5wdXRNZXRob2RGaWx0ZXIuZmlsdGVyS2V5RXZlbnQoZXZlbnQpOwogICAgIHJldHVybiBU
UlVFOwogfQogCkBAIC00NDgsNiArNDQxLDggQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZp
ZXdCYXNlQnV0dG9uUHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXQKICAg
ICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSB3ZWJWaWV3QmFzZS0+cHJpdjsKICAg
ICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMod2lkZ2V0KTsKIAorICAgIHByaXYtPmlucHV0TWV0aG9k
RmlsdGVyLm5vdGlmeU1vdXNlQnV0dG9uUHJlc3MoKTsKKwogICAgIGlmICghcHJpdi0+Y2xpY2tD
b3VudGVyLnNob3VsZFByb2Nlc3NCdXR0b25FdmVudChidXR0b25FdmVudCkpCiAgICAgICAgIHJl
dHVybiBUUlVFOwogCkBAIC02NTgsNyArNjUzLDcgQEAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtp
dFdlYlZpZXdCYXNlQ3JlYXRlKFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGEK
IAogR3RrSU1Db250ZXh0KiB3ZWJraXRXZWJWaWV3QmFzZUdldElNQ29udGV4dChXZWJLaXRXZWJW
aWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiB7Ci0gICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdC
YXNlLT5wcml2LT5pbUNvbnRleHQuZ2V0KCk7CisgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdCYXNl
LT5wcml2LT5pbnB1dE1ldGhvZEZpbHRlci5jb250ZXh0KCk7CiB9CiAKIFdlYlBhZ2VQcm94eSog
d2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3
QmFzZSkKQEAgLTY3Niw2ICs2NzEsMTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdl
YlBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlLCBXS0NvbnQKICNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgcHJpdi0+cGFnZVByb3h5LT5mdWxsU2NyZWVuTWFu
YWdlcigpLT5zZXRXZWJWaWV3KHdlYmtpdFdlYlZpZXdCYXNlKTsKICNlbmRpZgorCisgICAgLy8g
VGhpcyBtdXN0IGhhcHBlbiBoZXJlIGluc3RlYWQgb2YgdGhlIGluc3RhbmNlIGluaXRpYWxpemVy
LCBiZWNhdXNlIHRoZSBpbnB1dCBtZXRob2QKKyAgICAvLyBmaWx0ZXIgbXVzdCBoYXZlIGFjY2Vz
cyB0byB0aGUgcGFnZS4KKyAgICBwcml2LT5pbnB1dE1ldGhvZEZpbHRlci5zZXRXZWJWaWV3KHdl
YmtpdFdlYlZpZXdCYXNlKTsKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldFRvb2x0aXBU
ZXh0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgY29uc3QgY2hhciogdG9vbHRpcCkK
QEAgLTc5NSwzICs3OTQsMTMgQEAgR2RrRXZlbnQqIHdlYmtpdFdlYlZpZXdCYXNlVGFrZUNvbnRl
eHRNZW51RXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXcKIHsKICAgICByZXR1
cm4gd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmNvbnRleHRNZW51RXZlbnQucmVsZWFzZSgpOwog
fQorCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5wdXRNZXRob2RTdGF0ZShXZWJLaXRXZWJW
aWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICB3ZWJraXRX
ZWJWaWV3QmFzZS0+cHJpdi0+aW5wdXRNZXRob2RGaWx0ZXIuc2V0RW5hYmxlZChlbmFibGVkKTsK
K30KKwordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVVwZGF0ZVRleHRJbnB1dFN0YXRlKFdlYktpdFdl
YlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKK3sKKyAgICB3ZWJraXRXZWJWaWV3QmFzZS0+
cHJpdi0+aW5wdXRNZXRob2RGaWx0ZXIuc2V0Q3Vyc29yUmVjdCh3ZWJraXRXZWJWaWV3QmFzZS0+
cHJpdi0+cGFnZVByb3h5LT5lZGl0b3JTdGF0ZSgpLmN1cnNvclJlY3QpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUuaAppbmRleCA3MGNjNzI1NzVjYmRjYjgwNGM1NjZmM2NmY2Q0M2RlYzg0MGU1NjU4
Li5mMzg5MDFjMzM1ZTc3YmI2ZGY1ZjQ5MDdiNTBmNDU3NmEwZDFjOWI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUuaApAQCAtNTAsNSArNTAsNyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5z
cGVjdG9yVmlld0hlaWdodChXZWJLaXRXZWJWaWV3QmFzZSosIHVuc2lnbmVkIGhlaWdodAogdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZVNldEFjdGl2ZUNvbnRleHRNZW51UHJveHkoV2ViS2l0V2ViVmll
d0Jhc2UqLCBXZWJDb250ZXh0TWVudVByb3h5R3RrKik7CiBXZWJDb250ZXh0TWVudVByb3h5R3Rr
KiB3ZWJraXRXZWJWaWV3QmFzZUdldEFjdGl2ZUNvbnRleHRNZW51UHJveHkoV2ViS2l0V2ViVmll
d0Jhc2UqKTsKIEdka0V2ZW50KiB3ZWJraXRXZWJWaWV3QmFzZVRha2VDb250ZXh0TWVudUV2ZW50
KFdlYktpdFdlYlZpZXdCYXNlKik7Cit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5wdXRNZXRo
b2RTdGF0ZShXZWJLaXRXZWJWaWV3QmFzZSosIGJvb2wgZW5hYmxlZCk7Cit2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlVXBkYXRlVGV4dElucHV0U3RhdGUoV2ViS2l0V2ViVmlld0Jhc2UqKTsKIAogI2Vu
ZGlmIC8vIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYlZpZXdCYXNlSW5wdXRNZXRob2RG
aWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiODdjMTUyMjAyYTYyOWVhNDdmMDFhNDJiZmRlZGI3MTQw
YmU1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyLmNwcApAQCAtMCwwICsxLDEwMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5oIgorCisjaW5jbHVkZSAiTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3Iu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbXBvc2l0aW9uUmVzdWx0cy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRWRpdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKwordm9pZCBXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyOjpzZXRXZWJWaWV3
KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3KQoreworICAgIEd0a0lucHV0TWV0aG9kRmlsdGVy
OjpzZXRXaWRnZXQoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisKKyAgICBtX3dlYlBhZ2VQcm94eSA9
IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZSh3ZWJWaWV3KTsKKyAgICBBU1NFUlQobV93ZWJQYWdl
UHJveHkpOworfQorCitib29sIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXI6OmNhbkVkaXQo
KQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RG
aWx0ZXI6OnNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQsIFdURjo6U3RyaW5n
IHNpbXBsZVN0cmluZywgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQoreworICAgIEFT
U0VSVChtX3dlYlBhZ2VQcm94eSk7CisgICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZUtleWJvYXJk
RXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4o
ZXZlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRp
b25SZXN1bHRzKHNpbXBsZVN0cmluZyksIGZha2VkKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlcjo6c2VuZEtleUV2ZW50V2l0aENvbXBv
c2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSogZXZlbnQsIFJlc3VsdHNUb1NlbmQgcmVzdWx0c1Rv
U2VuZCwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkKQoreworICAgIEFTU0VSVChtX3dl
YlBhZ2VQcm94eSk7CisgICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0aW9uUmVzdWx0
cyhDb21wb3NpdGlvblJlc3VsdHM6OldpbGxTZW5kQ29tcG9zaXRpb25SZXN1bHRzU29vbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFrZWQpKTsKKworICAgIGlm
IChyZXN1bHRzVG9TZW5kICYgQ29tcG9zaXRpb24gJiYgIW1fY29uZmlybWVkQ29tcG9zaXRpb24u
aXNOdWxsKCkpCisgICAgICAgIGNvbmZpcm1Db21wb3NpdGlvblRleHQobV9jb25maXJtZWRDb21w
b3NpdGlvbik7CisgICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBQcmVlZGl0ICYmICFtX3ByZWVkaXQu
aXNOdWxsKCkpCisgICAgICAgIHNldFByZWVkaXQobV9wcmVlZGl0LCBtX2N1cnNvck9mZnNldCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRl
cjo6Y29uZmlybUNvbXBvc2l0aW9uVGV4dChTdHJpbmcgdGV4dCkKK3sKKyAgICBBU1NFUlQobV93
ZWJQYWdlUHJveHkpOworICAgIG1fd2ViUGFnZVByb3h5LT5jb25maXJtQ29tcG9zaXRpb24odGV4
dCwgLTEsIDApOworfQorCit2b2lkIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZp
cm1DdXJyZW50Q29tcG9zaXRpb24oKQoreworICAgIEFTU0VSVChtX3dlYlBhZ2VQcm94eSk7Cisg
ICAgbV93ZWJQYWdlUHJveHktPmNvbmZpcm1Db21wb3NpdGlvbihTdHJpbmcoKSwgLTEsIDApOwor
fQorCit2b2lkIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXI6OmNhbmNlbEN1cnJlbnRDb21w
b3NpdGlvbigpCit7CisgICAgQVNTRVJUKG1fd2ViUGFnZVByb3h5KTsKKyAgICBtX3dlYlBhZ2VQ
cm94eS0+Y2FuY2VsQ29tcG9zaXRpb24oKTsKK30KKwordm9pZCBXZWJWaWV3QmFzZUlucHV0TWV0
aG9kRmlsdGVyOjpzZXRQcmVlZGl0KFN0cmluZyBuZXdQcmVlZGl0LCBpbnQgY3Vyc29yT2Zmc2V0
KQoreworICAgIC8vIFRPRE86IFdlIHNob3VsZCBwYXJzZSB0aGUgUGFuZ29BdHRyTGlzdCB0aGF0
IHdlIGdldCBmcm9tIHRoZSBJTSBjb250ZXh0IGhlcmUuCisgICAgVmVjdG9yPENvbXBvc2l0aW9u
VW5kZXJsaW5lPiB1bmRlcmxpbmVzOworICAgIHVuZGVybGluZXMuYXBwZW5kKENvbXBvc2l0aW9u
VW5kZXJsaW5lKDAsIG5ld1ByZWVkaXQubGVuZ3RoKCksIENvbG9yKDEsIDEsIDEpLCBmYWxzZSkp
OworCisgICAgQVNTRVJUKG1fd2ViUGFnZVByb3h5KTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+c2V0
Q29tcG9zaXRpb24obmV3UHJlZWRpdCwgdW5kZXJsaW5lcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jdXJzb3JPZmZzZXQsIG1fY3Vyc29yT2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIHJlcGxhY2VtZW50IHN0YXJ0ICovLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIHJlcGxhY2VtZW50IGVuZCAqLyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViVmlld0Jhc2VJbnB1dE1ldGhvZEZpbHRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjljZGU4YjEyZDE5OGM0MjlmODNmMTZlMWIxOTlhMzcwZDA1Y2QzMDMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJWaWV3
QmFzZUlucHV0TWV0aG9kRmlsdGVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0
ZXJfaAorI2RlZmluZSBXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyX2gKKworI2luY2x1ZGUg
Ikd0a0lucHV0TWV0aG9kRmlsdGVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFzZSBXZWJLaXRXZWJWaWV3QmFzZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXIgOiBw
dWJsaWMgV2ViQ29yZTo6R3RrSW5wdXRNZXRob2RGaWx0ZXIgeworcHVibGljOgorICAgIHZvaWQg
c2V0V2ViVmlldyhXZWJLaXRXZWJWaWV3QmFzZSopOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCBib29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVudEtleSosIFdURjo6U3RyaW5nIGV2ZW50
U3RyaW5nLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24pOworICAgIHZpcnR1YWwgYm9vbCBzZW5k
S2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiwgUmVzdWx0c1RvU2Vu
ZCwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuRWRpdCgp
OworICAgIHZpcnR1YWwgdm9pZCBjb25maXJtQ29tcG9zaXRpb25UZXh0KFN0cmluZyk7CisgICAg
dmlydHVhbCB2b2lkIGNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2FuY2VsQ3VycmVudENvbXBvc2l0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWVk
aXQoU3RyaW5nLCBpbnQgY3Vyc29yT2Zmc2V0KTsKKworcHJpdmF0ZToKKyAgICBXZWJQYWdlUHJv
eHkqIG1fd2ViUGFnZVByb3h5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBXZWJWaWV3QmFzZUlucHV0TWV0aG9kRmlsdGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oCmluZGV4IDUxOGRiOGUxY2VkNzAwNjhkMTBkNjQ4MDFjMDRkYWQ4MWRjODQz
YjEuLjZkNWZhYWY1OWIyNjlhNzcxM2VlYWMzMjBkMmI5YmUwNjY3Y2EwYjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtMTIxLDcgKzEyMSw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBTdHJp
bmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChjb25z
dCBTdHJpbmcmIGhvc3RuYW1lLCBjb25zdCBTdHJpbmcmIHJlYWxtLCBjb25zdCBTdHJpbmcmIHBy
ZWZpbGxlZFVzZXJuYW1lLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUNlcnRpZmljYXRlVmVyaWZpY2F0aW9uUmVxdWVzdChj
b25zdCBTdHJpbmcmIGhvc3RuYW1lLCBib29sJiBpZ25vcmVFcnJvcnMpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChjb25zdCBT
dHJpbmcmIGhvc3RuYW1lLCB1aW50MTZfdCBwb3J0LCBjb25zdCBTdHJpbmcmIHByZWZpbGxlZFVz
ZXJuYW1lLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKSA9IDA7CkBAIC0xMzIs
NiArMTMxLDcgQEAgcHVibGljOgogI2VuZGlmIC8vIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShF
RkwpCiAKICNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQorICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUZXh0SW5wdXRTdGF0ZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFn
KGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRy
YWdJbWFnZSkgPSAwOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKaW5kZXggYjc1ZWRkZWM2ODkzYTQ4NDk0ZmE4YTUzNDk3NDEyZDg0OGY0ZjljNi4u
MmIwODcxZWJmNjE0NmZjNmJhOWE1NDk3ZjE3OGRiZGU3MjcyMDJlOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTI3OTAsNyArMjc5MCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZUNoYW5nZWQoY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRv
clN0YXRlKQogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIG1fcGFnZUNsaWVudC0+dXBkYXRlVGV4
dElucHV0U3RhdGUoY291bGRDaGFuZ2VTZWN1cmVJbnB1dFN0YXRlKTsKLSNlbGlmIFBMQVRGT1JN
KFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICBtX3BhZ2VDbGll
bnQtPnVwZGF0ZVRleHRJbnB1dFN0YXRlKCk7CiAjZW5kaWYKIH0KQEAgLTM5NzMsNCArMzk3Mywz
MSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRp
Y3RhdGlvbkNvbnRleHQsIFZlY3RvcjxTdHJpbgogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQog
CisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKK3ZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVy
bGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVj
dGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNl
bWVudFJhbmdlRW5kKQoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQgb3V0IGhvdyB0
byBwcm9wZXIgaGFuZGxlIHRoZSBjcmFzaGVzIGNhc2UuCisgICAgaWYgKCFpc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxl
Y3Rpb25FbmQsIHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgcmVwbGFjZW1lbnRSYW5nZUVuZCksIE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlvbjo6UmVwbHkobV9lZGl0b3JTdGF0ZSksIG1f
cGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmNvbmZpcm1Db21wb3NpdGlvbihjb25z
dCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nLCBpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCBpbnQ2
NF90IHNlbGVjdGlvbkxlbmd0aCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6Q29uZmly
bUNvbXBvc2l0aW9uKGNvbXBvc2l0aW9uU3RyaW5nLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9u
TGVuZ3RoKSwgTWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZpcm1Db21wb3NpdGlvbjo6UmVwbHkobV9l
ZGl0b3JTdGF0ZSksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmNhbmNlbENv
bXBvc2l0aW9uKCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6Q2FuY2VsQ29tcG9zaXRp
b24oKSwgTWVzc2FnZXM6OldlYlBhZ2U6OkNhbmNlbENvbXBvc2l0aW9uOjpSZXBseShtX2VkaXRv
clN0YXRlKSwgbV9wYWdlSUQpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9S
TShHVEspCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCmluZGV4IDU2MzNjZTc1MDJjNTc2NWIwNTVkZjYwZmQ0OGE1ZGM4YzBmNDU0
YjIuLjFkOTYzOGUwNDBmNTEzMzkxN2U5ZTA0YmQ1Njk3YjE2OWEzY2ViNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTM2NiwxMSArMzY2LDE2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFRoZW1lUGF0aChjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICB2b2lk
IHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBv
c2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWlu
dDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2
NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpOwogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNv
bnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcsIGludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIGlu
dDY0X3Qgc2VsZWN0aW9uTGVuZ3RoKTsKICAgICB2b2lkIGNhbmNlbENvbXBvc2l0aW9uKCk7CiAj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUo
Ym9vbCBlbmFibGVkKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgdXBk
YXRlV2luZG93SXNWaXNpYmxlKGJvb2wgd2luZG93SXNWaXNpYmxlKTsKICAgICB2b2lkIHdpbmRv
d0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1l
SW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5X
aW5kb3dDb29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGFjY2Vzc2liaWxpdHlW
aWV3Q29vcmRpbmF0ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4KaW5kZXggMzc2OTA0NzAxOGQzZjdkZWU1MGMzZThhN2M0NjA3MDUx
NDE2NTBmZS4uMDMxMWUxZjk2MjAyYzJlMGZlODc0NjRiODM0MzMzNmViMGE2YmQzNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBA
IC0xNzEsNiArMTcxLDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgICMgU3Vw
cG9ydCBmb3IgY29ubmVjdGluZyB0aGUgQWNjZXNzaWJpbGl0eSB3b3JsZHMgb2YgdGhlIFVJIGFu
ZCB0aGUgV2ViIHByb2Nlc3NlcwogICAgIEJpbmRBY2Nlc3NpYmlsaXR5VHJlZShXVEY6OlN0cmlu
ZyBwbHVnSUQpCisKKyAgICBTZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7CiAjZW5k
aWYKIAogICAgICMgQmFja0ZvcndhcmQgbWVzc2FnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcAppbmRleCBhYzI2YzBjYjhmZGJiOGM5ZTcy
NWY5MzNiODQ3OGEyYTRkY2MwZjdjLi5jYWFjY2Y3ZmE0ZjM2MGZhNjZiY2Q4YzFjN2RiMmU2MzFj
NGI2NmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQ
cm94eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJv
eHlHdGsuY3BwCkBAIC0xMDksMTEgKzEwOSwxNSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93
ZWRQbHVnaW5HZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmcmFtZQog
ICAgIHdlYmtpdFdlYlZpZXdCYXNlQ2hpbGRNb3ZlUmVzaXplKFdFQktJVF9XRUJfVklFV19CQVNF
KHZpZXdXaWRnZXQoKSksIHBsdWdpbiwgZnJhbWVSZWN0KTsKIH0KIAordm9pZCBXZWJQYWdlUHJv
eHk6OnNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKQoreworICAgIHdlYmtpdFdlYlZp
ZXdCYXNlU2V0SW5wdXRNZXRob2RTdGF0ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh2aWV3V2lkZ2V0
KCkpLCBlbmFibGVkKTsKK30KKwogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIHZvaWQgV2Vi
UGFnZVByb3h5Ojp3aWRnZXRNYXBwZWQodWludDY0X3QgbmF0aXZlV2luZG93SWQpCiB7CiAgICAg
cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaWRnZXRNYXBwZWQobmF0aXZlV2lu
ZG93SWQpLCBtX3BhZ2VJRCk7CiB9CiAjZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcAppbmRleCBm
YTJjNzRmMWZkYjViMTU3ZWQ2MmZjNzUyNDhmMmU0MTJiYWZiN2NlLi4xOTMxYWIxNjc4YTgxYTFm
MjQ2MTA4YmM2ODgxYjQxYTk1OWZjNDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9XZWJQYWdlUHJveHlRdC5jcHAKQEAgLTU1LDMxICs1NSw2IEBAIHZvaWQgV2ViUGFnZVBy
b3h5Ojpsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb21wb3Np
dGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5k
ZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwg
dWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdl
RW5kKQotewotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQgb3V0IGhvdyB0byBwcm9wZXIg
aGFuZGxlIHRoZSBjcmFzaGVzIGNhc2UuCi0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29tcG9z
aXRpb24odGV4dCwgdW5kZXJsaW5lcywgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCwgcmVw
bGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdlRW5kKSwgbV9wYWdlSUQpOwotfQot
Ci12b2lkIFdlYlBhZ2VQcm94eTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29t
cG9zaXRpb25TdHJpbmcsIGludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIGludDY0X3Qgc2VsZWN0aW9u
TGVuZ3RoKQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBw
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZpcm1Db21wb3NpdGlvbihjb21w
b3NpdGlvblN0cmluZywgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkxlbmd0aCksIG1fcGFnZUlE
KTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OmNhbmNlbENvbXBvc2l0aW9uKCkKLXsKLSAgICBp
ZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpDYW5jZWxDb21wb3NpdGlvbigpLCBtX3BhZ2VJRCk7Ci19Ci0KIHZv
aWQgV2ViUGFnZVByb3h5OjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKGNvbnN0IFN0cmluZyYg
c2NoZW1lKQogewogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVnaXN0
ZXJBcHBsaWNhdGlvblNjaGVtZShzY2hlbWUpLCBtX3BhZ2VJRCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRH
dGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2Vi
RWRpdG9yQ2xpZW50R3RrLmNwcAppbmRleCBlMzNkNzIzMjdjYzRlZjg4ZjdjM2FmMzE1Y2Q2Mjk1
YzY4YzE3NjMzLi5kNTkyM2UwODcyMWI4YTllOTFlMDI4YzFkN2NiNGY1MzM1ZWU2MjhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJF
ZGl0b3JDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJv
YXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dz
S2V5Ym9hcmRDb2Rlcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzYsNiAr
NzYsMTAgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9h
cmRFdmVudCogZXZlbnQpCiAgICAgaWYgKCFwbGF0Zm9ybUV2ZW50KQogICAgICAgICByZXR1cm47
CiAKKyAgICAvLyBJZiB0aGlzIHdhcyBhbiBJTUUgZXZlbnQgZG9uJ3QgZG8gYW55dGhpbmcuCisg
ICAgaWYgKHBsYXRmb3JtRXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpID09IFZLX1BST0NF
U1NLRVkpCisgICAgICAgIHJldHVybjsKKwogICAgIFZlY3RvcjxXVEY6OlN0cmluZz4gcGVuZGlu
Z0VkaXRvckNvbW1hbmRzOwogICAgIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoZXZlbnQs
IHBlbmRpbmdFZGl0b3JDb21tYW5kcyk7CiAgICAgaWYgKCFwZW5kaW5nRWRpdG9yQ29tbWFuZHMu
aXNFbXB0eSgpKSB7CkBAIC0xMDQsMzAgKzEwOCwyNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKICAgICAvLyBUaGlzIGlz
IGp1c3QgYSBub3JtYWwgdGV4dCBpbnNlcnRpb24sIHNvIHdhaXQgdG8gZXhlY3V0ZSB0aGUgaW5z
ZXJ0aW9uCiAgICAgLy8gdW50aWwgYSBrZXlwcmVzcyBldmVudCBoYXBwZW5zLiBUaGlzIHdpbGwg
ZW5zdXJlIHRoYXQgdGhlIGluc2VydGlvbiB3aWxsIG5vdAogICAgIC8vIGJlIHJlZmxlY3RlZCBp
biB0aGUgY29udGVudHMgb2YgdGhlIGZpZWxkIHVudGlsIHRoZSBrZXl1cCBET00gZXZlbnQuCi0g
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKLQot
ICAgICAgICAvLyBGSVhNRTogQWRkIElNIHN1cHBvcnQKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1OTQ2Ci0gICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+aW5zZXJ0VGV4dChwbGF0Zm9ybUV2ZW50LT50ZXh0KCksIGV2ZW50KTsKLSAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnRO
YW1lcygpLmtleXByZXNzRXZlbnQpCisgICAgICAgIHJldHVybjsKIAotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIERvbid0IGluc2VydCBudWxsIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBhcyB0aGV5
IGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBiZWhhdmlvdXIKLSAgICAgICAgaWYgKGV2ZW50LT5j
aGFyQ29kZSgpIDwgJyAnKQotICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIERvbid0IGluc2Vy
dCBudWxsIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBhcyB0aGV5IGNhbiByZXN1bHQgaW4gdW5leHBl
Y3RlZCBiZWhhdmlvdXIKKyAgICBpZiAoZXZlbnQtPmNoYXJDb2RlKCkgPCAnICcpCisgICAgICAg
IHJldHVybjsKIAotICAgICAgICAvLyBEb24ndCBpbnNlcnQgYW55dGhpbmcgaWYgYSBtb2RpZmll
ciBpcyBwcmVzc2VkCi0gICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50LT5jdHJsS2V5KCkgfHwgcGxh
dGZvcm1FdmVudC0+YWx0S2V5KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgLy8gRG9uJ3Qg
aW5zZXJ0IGFueXRoaW5nIGlmIGEgbW9kaWZpZXIgaXMgcHJlc3NlZAorICAgIGlmIChwbGF0Zm9y
bUV2ZW50LT5jdHJsS2V5KCkgfHwgcGxhdGZvcm1FdmVudC0+YWx0S2V5KCkpCisgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KHBsYXRmb3Jt
RXZlbnQtPnRleHQoKSwgZXZlbnQpKQotICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7Ci0gICAgfQorICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQocGxhdGZv
cm1FdmVudC0+dGV4dCgpLCBldmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3du
KEtleWJvYXJkRXZlbnQqKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9k
S2V5ZG93bihLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCogcGxhdGZvcm1FdmVudCA9IGV2ZW50LT5r
ZXlFdmVudCgpOworICAgIGlmIChwbGF0Zm9ybUV2ZW50ICYmIHBsYXRmb3JtRXZlbnQtPndpbmRv
d3NWaXJ0dWFsS2V5Q29kZSgpID09IFZLX1BST0NFU1NLRVkpCisgICAgICAgIGV2ZW50LT5wcmV2
ZW50RGVmYXVsdCgpOwogfQogCiAjaWYgUExBVEZPUk0oWDExKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGQ0N2FmMDlkNGVjOWQ0OTNlYzVm
MDdiNjliMjUwMTg3MmZlMWJkYzYuLjYxYTQ4MzQ0NDk4NDYxZjUyYjBkNTlmYjUwNDFhMDcyMmVl
ZTdmYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQ1LDYgKzU0NiwxMCBAQCBFZGl0b3JTdGF0ZSBXZWJQ
YWdlOjplZGl0b3JTdGF0ZSgpIGNvbnN0CiAgICAgfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShH
VEspCisgICAgcmVzdWx0LmN1cnNvclJlY3QgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmFic29sdXRl
Q2FyZXRCb3VuZHMoKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzI5
MCw0ICszMjk1LDk4IEBAIHZvaWQgV2ViUGFnZTo6c2V0VmlzaWJpbGl0eVN0YXRlKGludCB2aXNp
YmlsaXR5U3RhdGUsIGJvb2wgaXNJbml0aWFsU3RhdGUpCiB9CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShHVEspCitzdGF0aWMgRnJhbWUqIHRhcmdldEZyYW1lRm9yRWRp
dGluZyhXZWJQYWdlKiBwYWdlKQoreworICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IHBhZ2UtPmNv
cmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKworICAg
IGlmICghdGFyZ2V0RnJhbWUgfHwgIXRhcmdldEZyYW1lLT5lZGl0b3IoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBFZGl0b3IqIGVkaXRvciA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKTsKKyAg
ICBpZiAoIWVkaXRvci0+Y2FuRWRpdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChl
ZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAgICAgICAgLy8gV2Ugc2hvdWxkIHZlcmlmeSB0
aGUgcGFyZW50IG5vZGUgb2YgdGhpcyBJTUUgY29tcG9zaXRpb24gbm9kZSBhcmUKKyAgICAgICAg
Ly8gZWRpdGFibGUgYmVjYXVzZSBKYXZhU2NyaXB0IG1heSBkZWxldGUgYSBwYXJlbnQgbm9kZSBv
ZiB0aGUgY29tcG9zaXRpb24KKyAgICAgICAgLy8gbm9kZS4gSW4gdGhpcyBjYXNlLCBXZWJLaXQg
Y3Jhc2hlcyB3aGlsZSBkZWxldGluZyB0ZXh0cyBmcm9tIHRoZSBwYXJlbnQKKyAgICAgICAgLy8g
bm9kZSwgd2hpY2ggZG9lc24ndCBleGlzdCBhbnkgbG9uZ2VyLgorICAgICAgICBpZiAoUGFzc1Jl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNvbXBvc2l0aW9uUmFuZ2UoKSkgeworICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpOworICAgICAgICAgICAg
aWYgKCFub2RlIHx8ICFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0YXJnZXRGcmFtZTsKK30K
Kwordm9pZCBXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiBjb21wb3Np
dGlvblN0cmluZywgaW50NjRfdCBzZWxlY3Rpb25TdGFydCwgaW50NjRfdCBzZWxlY3Rpb25MZW5n
dGgsIEVkaXRvclN0YXRlJiBuZXdTdGF0ZSkKK3sKKyAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSB0
YXJnZXRGcmFtZUZvckVkaXRpbmcodGhpcyk7CisgICAgaWYgKCF0YXJnZXRGcmFtZSkgeworICAg
ICAgICBuZXdTdGF0ZSA9IGVkaXRvclN0YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBFZGl0b3IqIGVkaXRvciA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKTsKKyAgICBlZGl0b3It
PmNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyk7CisKKyAgICBpZiAoc2VsZWN0
aW9uU3RhcnQgPT0gLTEpIHsKKyAgICAgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgRWxlbWVudCogc2NvcGUgPSB0YXJnZXRGcmFtZS0+
c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHNl
bGVjdGlvblJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChz
Y29wZSwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkxlbmd0aCk7CisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShzZWxlY3Rpb25SYW5nZSwgIkludmFsaWQgc2VsZWN0aW9uOiBbJWxsZDolbGxkXSBp
biB0ZXh0IG9mIGxlbmd0aCAlZCIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc2VsZWN0aW9uU3Rh
cnQpLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNlbGVjdGlvbkxlbmd0aCksIHNjb3BlLT5pbm5l
clRleHQoKS5sZW5ndGgoKSk7CisKKyAgICBpZiAoc2VsZWN0aW9uUmFuZ2UpIHsKKyAgICAgICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oc2VsZWN0aW9uUmFuZ2UuZ2V0KCksIFNFTF9ERUZB
VUxUX0FGRklOSVRZKTsKKyAgICAgICAgdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxl
Y3Rpb24oc2VsZWN0aW9uKTsKKyAgICB9CisgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwor
fQorCit2b2lkIFdlYlBhZ2U6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVj
dG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25T
dGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFN0YXJ0LCB1
aW50NjRfdCByZXBsYWNlbWVudExlbmd0aCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKQoreworICAg
IEZyYW1lKiB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRm9yRWRpdGluZyh0aGlzKTsKKyAgICBp
ZiAoIXRhcmdldEZyYW1lKSB7CisgICAgICAgIG5ld1N0YXRlID0gZWRpdG9yU3RhdGUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAgIG5ld1N0YXRlID0gZWRpdG9yU3RhdGUo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChyZXBsYWNlbWVudExlbmd0aCA+
IDApIHsKKyAgICAgICAgLy8gVGhlIGxheW91dCBuZWVkcyB0byBiZSB1cHRvZGF0ZSBiZWZvcmUg
c2V0dGluZyBhIHNlbGVjdGlvbgorICAgICAgICB0YXJnZXRGcmFtZS0+ZG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0KCk7CisKKyAgICAgICAgRWxlbWVudCogc2NvcGUgPSB0YXJnZXRGcmFtZS0+c2Vs
ZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBy
ZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0
aChzY29wZSwgcmVwbGFjZW1lbnRTdGFydCwgcmVwbGFjZW1lbnRMZW5ndGgpOworICAgICAgICB0
YXJnZXRGcmFtZS0+ZWRpdG9yKCktPnNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdl
KHRydWUpOworICAgICAgICB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIFNFTF9ERUZBVUxUX0FGRklO
SVRZKSk7CisgICAgICAgIHRhcmdldEZyYW1lLT5lZGl0b3IoKS0+c2V0SWdub3JlQ29tcG9zaXRp
b25TZWxlY3Rpb25DaGFuZ2UoZmFsc2UpOworICAgIH0KKworICAgIHRhcmdldEZyYW1lLT5lZGl0
b3IoKS0+c2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgc2VsZWN0aW9uU3RhcnQsIHNl
bGVjdGlvbkVuZCk7CisgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOworfQorCit2b2lkIFdl
YlBhZ2U6OmNhbmNlbENvbXBvc2l0aW9uKEVkaXRvclN0YXRlJiBuZXdTdGF0ZSkKK3sKKyAgICBG
cmFtZSogdGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZUZvckVkaXRpbmcodGhpcyk7CisgICAgaWYg
KCF0YXJnZXRGcmFtZSkgeworICAgICAgICBuZXdTdGF0ZSA9IGVkaXRvclN0YXRlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPmNhbmNlbENv
bXBvc2l0aW9uKCk7CisgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOworfQorI2VuZGlmCisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKaW5kZXggM2I2NWVjNDJhZDY3N2FlNWJhMTU0ZTEwNDYzOTgzM2MwZTU2NDg0
Mi4uYTViZTkzNTc3ZDllZTMzMmZlNWNlNGI5N2UwODU3ZTMzN2RmZGYwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC00MTEsMTAgKzQxMSwxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaGVtZVBhdGgoY29uc3QgU3RyaW5nJik7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKFFUKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMs
IHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90
IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCk7Ci0g
ICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQ2NF90IHNl
bGVjdGlvblN0YXJ0LCBpbnQ2NF90IHNlbGVjdGlvbkxlbmd0aCk7Ci0gICAgdm9pZCBjYW5jZWxD
b21wb3NpdGlvbigpOworI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCisgICAgdm9p
ZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3JlOjpDb21w
b3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVp
bnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50
NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kLCBFZGl0b3JTdGF0ZSYpOworICAgIHZvaWQgY29uZmly
bUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgaW50NjRfdCBzZWxlY3Rpb25TdGFydCwg
aW50NjRfdCBzZWxlY3Rpb25MZW5ndGgsIEVkaXRvclN0YXRlJik7CisgICAgdm9pZCBjYW5jZWxD
b21wb3NpdGlvbihFZGl0b3JTdGF0ZSYpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluCmluZGV4IDM5YzgxMTRiNTgxOTg0NmFlYzczMGU1ZDBkMDMyODZkOWJlZmNmMmYuLjdl
YjQ0Mzc2ODMwNjY1NGM0M2RiZDFlM2RkOTUxYjFkYTFkZDgyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0y
MzgsMTAgKzIzOCwxMCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBTZXRUaGVtZVBhdGgo
V1RGOjpTdHJpbmcgdGhlbWVQYXRoKQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkKLSAgICBT
ZXRDb21wb3NpdGlvbihXVEY6OlN0cmluZyB0ZXh0LCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpDb21w
b3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVp
bnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50
NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKQotICAgIENvbmZpcm1Db21wb3NpdGlvbihXVEY6OlN0
cmluZyB0ZXh0LCBpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCBpbnQ2NF90IHNlbGVjdGlvbkxlbmd0
aCkKLSAgICBDYW5jZWxDb21wb3NpdGlvbigpCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KEdUSykKKyAgICBTZXRDb21wb3NpdGlvbihXVEY6OlN0cmluZyB0ZXh0LCBXVEY6OlZlY3RvcjxX
ZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0
aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5n
ZVN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKSAtPiAoV2ViS2l0OjpFZGl0b3JT
dGF0ZSBuZXdTdGF0ZSkKKyAgICBDb25maXJtQ29tcG9zaXRpb24oV1RGOjpTdHJpbmcgdGV4dCwg
aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgaW50NjRfdCBzZWxlY3Rpb25MZW5ndGgpIC0+IChXZWJL
aXQ6OkVkaXRvclN0YXRlIG5ld1N0YXRlKQorICAgIENhbmNlbENvbXBvc2l0aW9uKCkgLT4gKFdl
YktpdDo6RWRpdG9yU3RhdGUgbmV3U3RhdGUpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdl
UXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5j
cHAKaW5kZXggMThlNGY5NDhhNDA2NmE5ZGQyYWUzMWEyOWI3YzUwODc2YTQzNzhkNy4uM2E2OTFh
ZjE1MjVmNTg0NDNmYjQwNGMxY2NkZGIzZTI3NjUwNGQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKQEAgLTMwNiw5MCArMzA2
LDYgQEAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdlYlBhZ2U6OmNhY2hlZFJlc3BvbnNlRGF0
YUZvclVSTChjb25zdCBLVVJMJikKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIEZyYW1lKiB0
YXJnZXRGcmFtZUZvckVkaXRpbmcoV2ViUGFnZSogcGFnZSkKLXsKLSAgICBGcmFtZSogdGFyZ2V0
RnJhbWUgPSBwYWdlLT5jb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFp
bkZyYW1lKCk7Ci0KLSAgICBpZiAoIXRhcmdldEZyYW1lIHx8ICF0YXJnZXRGcmFtZS0+ZWRpdG9y
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgRWRpdG9yKiBlZGl0b3IgPSB0YXJnZXRGcmFt
ZS0+ZWRpdG9yKCk7Ci0gICAgaWYgKCFlZGl0b3ItPmNhbkVkaXQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBpZiAoZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKSB7Ci0gICAgICAgIC8vIFdl
IHNob3VsZCB2ZXJpZnkgdGhlIHBhcmVudCBub2RlIG9mIHRoaXMgSU1FIGNvbXBvc2l0aW9uIG5v
ZGUgYXJlCi0gICAgICAgIC8vIGVkaXRhYmxlIGJlY2F1c2UgSmF2YVNjcmlwdCBtYXkgZGVsZXRl
IGEgcGFyZW50IG5vZGUgb2YgdGhlIGNvbXBvc2l0aW9uCi0gICAgICAgIC8vIG5vZGUuIEluIHRo
aXMgY2FzZSwgV2ViS2l0IGNyYXNoZXMgd2hpbGUgZGVsZXRpbmcgdGV4dHMgZnJvbSB0aGUgcGFy
ZW50Ci0gICAgICAgIC8vIG5vZGUsIHdoaWNoIGRvZXNuJ3QgZXhpc3QgYW55IGxvbmdlci4KLSAg
ICAgICAgaWYgKFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3NpdGlvblJh
bmdlKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSByYW5nZS0+c3RhcnRDb250YWluZXIo
KTsKLSAgICAgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
dGFyZ2V0RnJhbWU7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0
IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcsIGludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIGludDY0
X3Qgc2VsZWN0aW9uTGVuZ3RoKQotewotICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IHRhcmdldEZy
YW1lRm9yRWRpdGluZyh0aGlzKTsKLSAgICBpZiAoIXRhcmdldEZyYW1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBFZGl0b3IqIGVkaXRvciA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKTsKLSAgICBl
ZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyk7Ci0KLSAgICBpZiAo
c2VsZWN0aW9uU3RhcnQgPT0gLTEpCi0gICAgICAgIHJldHVybjsKLQotICAgIEVsZW1lbnQqIHNj
b3BlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0g
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9t
TG9jYXRpb25BbmRMZW5ndGgoc2NvcGUsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25MZW5ndGgp
OwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc2VsZWN0aW9uUmFuZ2UsICJJbnZhbGlkIHNlbGVj
dGlvbjogWyVsbGQ6JWxsZF0gaW4gdGV4dCBvZiBsZW5ndGggJWQiLCBzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KHNlbGVjdGlvblN0YXJ0KSwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihzZWxlY3Rpb25M
ZW5ndGgpLCBzY29wZS0+aW5uZXJUZXh0KCkubGVuZ3RoKCkpOwotCi0gICAgaWYgKHNlbGVjdGlv
blJhbmdlKSB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKHNlbGVjdGlvblJh
bmdlLmdldCgpLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgICAgIHRhcmdldEZyYW1lLT5z
ZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAgfQotCi0gICAgLy8gRklY
TUU6IHN0YXRpY19jYXN0PFdlYkVkaXRvckNsaWVudCo+KGVkaXRvci0+Y2xpZW50KCkpLT5zZW5k
U2VsZWN0aW9uQ2hhbmdlZE1lc3NhZ2UoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpzZXRDb21wb3Np
dGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5k
ZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwg
dWludDY0X3QgcmVwbGFjZW1lbnRTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRMZW5ndGgpCi17
Ci0gICAgRnJhbWUqIHRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKHRoaXMpOwot
ICAgIGlmICghdGFyZ2V0RnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEVsZW1lbnQqIHNj
b3BlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0K
LSAgICBpZiAodGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7
Ci0gICAgICAgIGlmIChyZXBsYWNlbWVudExlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIC8vIFRo
ZSBsYXlvdXQgbmVlZHMgdG8gYmUgdXB0b2RhdGUgYmVmb3JlIHNldHRpbmcgYSBzZWxlY3Rpb24K
LSAgICAgICAgICAgIHRhcmdldEZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKLQot
ICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChzY29wZSwgcmVwbGFjZW1lbnRTdGFydCwgcmVw
bGFjZW1lbnRMZW5ndGgpOwotCi0gICAgICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPnNl
dElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKHRydWUpOwotICAgICAgICAgICAgdGFy
Z2V0RnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXBs
YWNlbWVudFJhbmdlLmdldCgpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwotICAgICAgICAgICAg
dGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5n
ZShmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPnNl
dENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25F
bmQpOwotCi0gICAgICAgIC8vIEZJWE1FOiBzdGF0aWNfY2FzdDxXZWJFZGl0b3JDbGllbnQqPih0
YXJnZXRGcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpKS0+c2VuZFNlbGVjdGlvbkNoYW5nZWRNZXNz
YWdlKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYlBhZ2U6OmNhbmNlbENvbXBvc2l0aW9uKCkKLXsK
LSAgICBGcmFtZSogZnJhbWUgPSB0YXJnZXRGcmFtZUZvckVkaXRpbmcodGhpcyk7Ci0KLSAgICBm
cmFtZS0+ZWRpdG9yKCktPmNhbmNlbENvbXBvc2l0aW9uKCk7Ci0KLSAgICAvLyBGSVhNRTogc3Rh
dGljX2Nhc3Q8V2ViRWRpdG9yQ2xpZW50Kj4odGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5jbGllbnQo
KSktPnNlbmRTZWxlY3Rpb25DaGFuZ2VkTWVzc2FnZSgpOwotfQotCiB2b2lkIFdlYlBhZ2U6OnJl
Z2lzdGVyQXBwbGljYXRpb25TY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCiB7CiAgICAgUXRO
ZXR3b3JrQWNjZXNzTWFuYWdlciogcW5hbSA9IHFvYmplY3RfY2FzdDxRdE5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKj4oV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0FjY2Vzc01hbmFnZXIoKSk7CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWViNzNh
MTQ1YTg0MmQwOTJlMDg4NjIxYWFjMWI2ZDY3YTE2MTBiYy4uMzdiMDY2YWU3MWJhYjIzZjA1NDgz
ZTdjZjIyMzZlNzQ3NmQyODQxOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA2LTEwICBNYXJ0aW4gUm9iaW5z
b24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXSzJdIEFkZCBzdXBw
b3J0IGZvciBJTUUgQ29tcG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY1MDkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXBkYXRlIHVuaXQgdGVzdHMgZm9yIEd0a0lucHV0TWV0aG9kRmlsdGVy
IHRvIG5vdGUgd2hldGhlciBvciBub3QgYW4gZXZlbnQKKyAgICAgICAgd2FzIGEgZmFrZSBldmVu
dCBzeW50aGVzaXplZCBmb3IgY29tcG9zaXRpb24gcHVycG9zZXMuIFRoaXMgaXMgbm93IHVzZWQK
KyAgICAgICAgZm9yIFdlYktpdDIuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2d0
ay9JbnB1dE1ldGhvZEZpbHRlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0SW5w
dXRNZXRob2RGaWx0ZXI6OnNlbmRTaW1wbGVLZXlFdmVudCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpUZXN0SW5wdXRNZXRob2RGaWx0ZXI6OnNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJl
c3VsdHMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogZ3RrL2dl
bmVyYXRlLWd0a2RvYzoKKyAgICAgICAgKGdldF93ZWJraXQyX29wdGlvbnMpOiBTa2lwIG5ldyBm
aWxlcyBpbiB0aGUgV2ViS2l0MiBzb3VyY2UgZGlyZWN0b3J5IGZvciBkb2N1bWVudGF0aW9uCisg
ICAgICAgIGdlbmVyYXRpb24uCisKIDIwMTItMDgtMDIgIFpvbHRhbiBBcnZhaSAgPHphcnZhaUBp
bmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgW1F0XSBNU1ZDIHNwZWNpZmljIGJ1aWxkZml4IGZv
ciBEUlQuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2d0ay9JbnB1dE1l
dGhvZEZpbHRlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2d0ay9JbnB1dE1ldGhv
ZEZpbHRlci5jcHAKaW5kZXggYzJiZGNjZTRiZGM5OWQ2ZWY0MTNkZjA1Y2ZjMmNmZWVkOTFmZTA3
Ni4uMmNiYmQzOTIzZTg4N2UxZTQ0MjVjOGYxZmVkMDY5OTQ5M2U4YzViNyAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcApAQCAt
NzksMjEgKzc5LDIzIEBAIHB1YmxpYzoKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IGJvb2wgc2VuZFNpbXBsZUtleUV2ZW50KEdka0V2ZW50S2V5KiBldmVudCwgV1RGOjpTdHJpbmcg
ZXZlbnRTdHJpbmcpCisgICAgdmlydHVhbCBib29sIHNlbmRTaW1wbGVLZXlFdmVudChHZGtFdmVu
dEtleSogZXZlbnQsIFdURjo6U3RyaW5nIGV2ZW50U3RyaW5nLCBFdmVudEZha2VkRm9yQ29tcG9z
aXRpb24gZmFrZWQpCiAgICAgewogICAgICAgICBjb25zdCBjaGFyKiBldmVudFR5cGUgPSBldmVu
dC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgPyAicmVsZWFzZSIgOiAicHJlc3MiOworICAgICAg
ICBjb25zdCBjaGFyKiBmYWtlZFN0cmluZyA9IGZha2VkID09IEV2ZW50RmFrZWQgPyAiIChmYWtl
ZCkiIDogIiI7CiAgICAgICAgIGlmICghZXZlbnRTdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAg
ICBtX2V2ZW50cy5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBl
PSVzIGtleWNvZGU9JXggdGV4dD0nJXMnIiwgZXZlbnRUeXBlLCBldmVudC0+a2V5dmFsLCBldmVu
dFN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgICAgICBtX2V2ZW50cy5hcHBlbmQoU3Ry
aW5nOjpmb3JtYXQoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSVzIGtleWNvZGU9JXggdGV4dD0n
JXMnJXMiLCBldmVudFR5cGUsIGV2ZW50LT5rZXl2YWwsIGV2ZW50U3RyaW5nLnV0ZjgoKS5kYXRh
KCksIGZha2VkU3RyaW5nKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZXZlbnRzLmFw
cGVuZChTdHJpbmc6OmZvcm1hdCgic2VuZFNpbXBsZUtleUV2ZW50IHR5cGU9JXMga2V5Y29kZT0l
eCIsIGV2ZW50VHlwZSwgZXZlbnQtPmtleXZhbCkpOworICAgICAgICAgICAgbV9ldmVudHMuYXBw
ZW5kKFN0cmluZzo6Zm9ybWF0KCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT0lcyBrZXljb2RlPSV4
JXMiLCBldmVudFR5cGUsIGV2ZW50LT5rZXl2YWwsIGZha2VkU3RyaW5nKSk7CiAKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIHNlbmRLZXlFdmVudFdpdGhD
b21wb3NpdGlvblJlc3VsdHMoR2RrRXZlbnRLZXkqIGV2ZW50LCBSZXN1bHRzVG9TZW5kIHJlc3Vs
dHNUb1NlbmQpCisgICAgdmlydHVhbCBib29sIHNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJl
c3VsdHMoR2RrRXZlbnRLZXkqIGV2ZW50LCBSZXN1bHRzVG9TZW5kIHJlc3VsdHNUb1NlbmQsIEV2
ZW50RmFrZWRGb3JDb21wb3NpdGlvbiBmYWtlZCkKICAgICB7CiAgICAgICAgIGNvbnN0IGNoYXIq
IGV2ZW50VHlwZSA9IGV2ZW50LT50eXBlID09IEdES19LRVlfUkVMRUFTRSA/ICJyZWxlYXNlIiA6
ICJwcmVzcyI7Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgic2VuZEtl
eUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPSVzIGtleWNvZGU9JXUiLCBldmVudFR5
cGUsIGV2ZW50LT5rZXl2YWwpKTsKKyAgICAgICAgY29uc3QgY2hhciogZmFrZWRTdHJpbmcgPSBm
YWtlZCA9PSBFdmVudEZha2VkID8gIiAoZmFrZWQpIiA6ICIiOworICAgICAgICBtX2V2ZW50cy5h
cHBlbmQoU3RyaW5nOjpmb3JtYXQoInNlbmRLZXlFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMg
dHlwZT0lcyBrZXljb2RlPSV1JXMiLCBldmVudFR5cGUsIGV2ZW50LT5rZXl2YWwsIGZha2VkU3Ry
aW5nKSk7CiAKICAgICAgICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbiAmJiAhbV9j
b25maXJtZWRDb21wb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgIGNvbmZpcm1Db21wb3Np
dGlvblRleHQobV9jb25maXJtZWRDb21wb3NpdGlvbik7CkBAIC0yNDAsMTIgKzI0MiwxMiBAQCBU
RVNUKEdUSywgR3RrSW5wdXRNZXRob2RGaWx0ZXJDb250ZXh0RXZlbnRzV2l0aG91dEtleUV2ZW50
cykKIAogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBldmVudHMgPSBpbnB1dE1ldGhvZEZpbHRl
ci5ldmVudHMoKTsKICAgICBBU1NFUlRfRVEoNiwgZXZlbnRzLnNpemUoKSk7Ci0gICAgQVNTRVJU
X0VRKFN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPXByZXNz
IGtleWNvZGU9MTY3NzcyMTUiKSwgZXZlbnRzWzBdKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nKCJz
ZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJlc3Mga2V5Y29kZT0xNjc3
NzIxNSAoZmFrZWQpIiksIGV2ZW50c1swXSk7CiAgICAgQVNTRVJUX0VRKFN0cmluZygic2V0UHJl
ZWRpdCB0ZXh0PSdwcmVlZGl0IG9mIGRvb20sIGJyaW5nZXIgb2YgY2hlZXNlJyBjdXJzb3JPZmZz
ZXQ9MyIpLCBldmVudHNbMV0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVLZXlF
dmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmZmZmYiKSwgZXZlbnRzWzJdKTsKLSAgICBBU1NF
UlRfRVEoU3RyaW5nKCJzZW5kS2V5RXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzIHR5cGU9cHJl
c3Mga2V5Y29kZT0xNjc3NzIxNSIpLCBldmVudHNbM10pOworICAgIEFTU0VSVF9FUShTdHJpbmco
InNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmZmZmYgKGZha2VkKSIp
LCBldmVudHNbMl0pOworICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRLZXlFdmVudFdpdGhDb21w
b3NpdGlvblJlc3VsdHMgdHlwZT1wcmVzcyBrZXljb2RlPTE2Nzc3MjE1IChmYWtlZCkiKSwgZXZl
bnRzWzNdKTsKICAgICBBU1NFUlRfRVEoU3RyaW5nKCJjb25maXJtQ29tcG9zaXRpb24gJ2NvbW1p
dCB0ZXh0JyIpLCBldmVudHNbNF0pOwotICAgIEFTU0VSVF9FUShTdHJpbmcoInNlbmRTaW1wbGVL
ZXlFdmVudCB0eXBlPXJlbGVhc2Uga2V5Y29kZT1mZmZmZmYiKSwgZXZlbnRzWzVdKTsKKyAgICBB
U1NFUlRfRVEoU3RyaW5nKCJzZW5kU2ltcGxlS2V5RXZlbnQgdHlwZT1yZWxlYXNlIGtleWNvZGU9
ZmZmZmZmIChmYWtlZCkiKSwgZXZlbnRzWzVdKTsKIH0KIAogc3RhdGljIGJvb2wgZ1Nhd0NvbnRl
eHRSZXNldCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYyBi
L1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKaW5kZXggODhlNjJlNzUwNTE3NWVkMmIwODM1OTQw
NGJlZTg4YWYyNWNkMWQzZi4uNTIyZjgwMGVlYjAzMWE0NDMwM2M0NGNmZDhlMGIwYzljODNiOThj
NSAxMDA3NTUKLS0tIGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYworKysgYi9Ub29scy9ndGsv
Z2VuZXJhdGUtZ3RrZG9jCkBAIC05Nyw4ICs5Nyw5IEBAIGRlZiBnZXRfd2Via2l0Ml9vcHRpb25z
KCk6CiAgICAgICAgICdjcm9zc19yZWZlcmVuY2VfZGVwcycgOiBnZXRfZ3RrZG9jX21vZHVsZV9w
YXRocyh4cmVmX2RlcHMpLAogICAgICAgICAnaWdub3JlZF9maWxlcyc6IGdsb2IuZ2xvYihzcmNf
cGF0aCgnKlByaXZhdGUuaCcpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmds
b2Ioc3JjX3BhdGgoJypDbGllbnQqJykpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGds
b2IuZ2xvYihzcmNfcGF0aCgnV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLionKSkgKyBcCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRHZW9sb2Nh
dGlvblByb3ZpZGVyLionKSkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9i
KHNyY19wYXRoKCdXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuKicpKSArIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYlZpZXdCYXNlSW5wdXRNZXRo
b2RGaWx0ZXIuKicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2IoZGVy
aXZlZF9zb3VyY2VzX3BhdGgoJ3dlYmtpdDJndGsnLCAnd2Via2l0MicsICdXZWJLaXRNYXJzaGFs
LionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKGRlcml2ZWRfc291
cmNlc19wYXRoKCd3ZWJraXQyZ3RrJywgJ3dlYmtpdDInLCAnV2ViS2l0RW51bVR5cGVzLionKSkg
KyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCd0ZXN0cy8q
LmgnKSkK
</data>
<flag name="review"
          id="165710"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="165964"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>