<?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>42781</bug_id>
          
          <creation_ts>2010-07-21 13:14:20 -0700</creation_ts>
          <short_desc>WebKit2 needs undo/redo support</short_desc>
          <delta_ts>2010-09-07 12:20:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>254485</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-21 13:14:20 -0700</bug_when>
    <thetext>WebKit2 needs to undo/redo support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254486</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-21 13:15:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/7660519&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274790</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-06 15:05:03 -0700</bug_when>
    <thetext>*** Bug 45276 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274791</commentid>
    <comment_count>3</comment_count>
      <attachid>66670</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-06 15:06:01 -0700</bug_when>
    <thetext>Created attachment 66670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274792</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-06 15:08:23 -0700</bug_when>
    <thetext>Attachment 66670 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/WebProcess/WebPage/WebEditCommand.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/WebEditCommandProxy.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275077</commentid>
    <comment_count>5</comment_count>
      <attachid>66670</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-07 09:24:00 -0700</bug_when>
    <thetext>Comment on attachment 66670
Patch

&gt; +    ~WebEditCommandProxy();

Darin Fisher has suggested we start making RefCounted objects&apos; destructors protected or private and making the RefCounted template class a friend. I think that is probably a good idiom.

&gt; +private:
&gt; +    explicit WebEditCommandProxy(uint64_t commandID, WebCore::EditAction, WebPageProxy*);

There is never a need for &quot;explicit&quot; on a constructor unless it has exactly one non-default argument. So it’s not helpful here.

&gt; +    Vector&lt;WebEditCommandProxy*&gt; editCommandVector;
&gt; +    copyToVector(m_editCommandSet, editCommandVector);
&gt; +    for (size_t i = 0, size = editCommandVector.size(); i &lt; size; ++i)
&gt; +        editCommandVector[i]-&gt;invalidate();
&gt; +    m_editCommandSet.clear();

I don’t understand why we’re doing the clear after the invalidate calls. Why not clear right away after copying to the vector?

&gt; +        case WebPageProxyMessage::ClearAllEditCommands: {                
&gt; +            clearAllEditCommands();
&gt; +            break;
&gt; +        }

No need for the braces here.

&gt; +void WebPageProxy::registerEditCommandForUndo(uint64_t commandID, EditAction editAction)
&gt; +{
&gt; +    RefPtr&lt;WebEditCommandProxy&gt; commandProxy = WebEditCommandProxy::create(commandID, editAction, this);
&gt; +    registerEditCommandForUndo(commandProxy.release());
&gt; +}

This would read better without the local variable.

&gt; +    void registerEditCommandForUndo(uint64_t commandID, WebCore::EditAction editAction);

No need for the editAction argument name here.

&gt; +// -- BEGIN HELPER CLASSES

Unusual comment. Is this really helpful?

&gt; +- (void)undoEditing:(id)arg;
&gt; +- (void)redoEditing:(id)arg;

This argument is normally called &quot;sender&quot; rather than &quot;arg&quot;. And I prefer not to abbreviate words like &quot;arg&quot;.

&gt; +    // Add assertion that commanding being reapplied is the same command that is
&gt; +    // being passed to us.

&quot;commanding&quot;? Is this a FIXME comment?

&gt; +    WebProcess::shared().connection()-&gt;send(WebPageProxyMessage::RegisterEditCommandForUndo, m_page-&gt;pageID(),
&gt; +                                            CoreIPC::In(webCommand-&gt;commandID(), static_cast&lt;uint32_t&gt;(webCommand-&gt;command()-&gt;editingAction())));

We normally don&apos;t like things up like this in WebKit code, since the alignment gets screwed up if we rename something. Is there any clean way to avoid the static_cast? Maybe a local variable instead?

&gt;  void WebEditorClient::registerCommandForRedo(PassRefPtr&lt;EditCommand&gt;)
&gt;  {
&gt; +    // INTENTIONALLY LEFT NOT IMPLEMENTED
&gt;  }

WHAT DOES THIS COMMENT MEAN AND WHY IS IT SHOUTING?

&gt; +static uint64_t generateCommandID()
&gt; +{
&gt; +    static uint64_t uniqueCommandID = 1;
&gt; +    return uniqueCommandID++;
&gt; +}

I would name the global lastCommandIDUsed or something like that. And use preincrement instead of postincrement.

Also, I like making the create function non-inline and the constructor inline. Same number of function calls, but less code at each call site.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275198</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-07 11:57:19 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 66670 [details])
&gt; &gt; +    ~WebEditCommandProxy();
&gt; 
&gt; Darin Fisher has suggested we start making RefCounted objects&apos; destructors protected or private and making the RefCounted template class a friend. I think that is probably a good idiom.

Ok.

&gt; 
&gt; &gt; +private:
&gt; &gt; +    explicit WebEditCommandProxy(uint64_t commandID, WebCore::EditAction, WebPageProxy*);
&gt; 
&gt; There is never a need for &quot;explicit&quot; on a constructor unless it has exactly one non-default argument. So it’s not helpful here.

Ok.

&gt; 
&gt; &gt; +    Vector&lt;WebEditCommandProxy*&gt; editCommandVector;
&gt; &gt; +    copyToVector(m_editCommandSet, editCommandVector);
&gt; &gt; +    for (size_t i = 0, size = editCommandVector.size(); i &lt; size; ++i)
&gt; &gt; +        editCommandVector[i]-&gt;invalidate();
&gt; &gt; +    m_editCommandSet.clear();
&gt; 
&gt; I don’t understand why we’re doing the clear after the invalidate calls. Why not clear right away after copying to the vector?

No reason. Fixed.

&gt; 
&gt; &gt; +        case WebPageProxyMessage::ClearAllEditCommands: {                
&gt; &gt; +            clearAllEditCommands();
&gt; &gt; +            break;
&gt; &gt; +        }
&gt; 
&gt; No need for the braces here.

Ok.

&gt; 
&gt; &gt; +void WebPageProxy::registerEditCommandForUndo(uint64_t commandID, EditAction editAction)
&gt; &gt; +{
&gt; &gt; +    RefPtr&lt;WebEditCommandProxy&gt; commandProxy = WebEditCommandProxy::create(commandID, editAction, this);
&gt; &gt; +    registerEditCommandForUndo(commandProxy.release());
&gt; &gt; +}
&gt; 
&gt; This would read better without the local variable.

Done.

&gt; 
&gt; &gt; +    void registerEditCommandForUndo(uint64_t commandID, WebCore::EditAction editAction);
&gt; 
&gt; No need for the editAction argument name here.

Done.

&gt; 
&gt; &gt; +// -- BEGIN HELPER CLASSES
&gt; 
&gt; Unusual comment. Is this really helpful?

No. Removed.

&gt; 
&gt; &gt; +- (void)undoEditing:(id)arg;
&gt; &gt; +- (void)redoEditing:(id)arg;
&gt; 
&gt; This argument is normally called &quot;sender&quot; rather than &quot;arg&quot;. And I prefer not to abbreviate words like &quot;arg&quot;.

Changed (though not charged) to sender.

&gt; 
&gt; &gt; +    // Add assertion that commanding being reapplied is the same command that is
&gt; &gt; +    // being passed to us.
&gt; 
&gt; &quot;commanding&quot;? Is this a FIXME comment?

Fixed typo and made a FIXME.

&gt; 
&gt; &gt; +    WebProcess::shared().connection()-&gt;send(WebPageProxyMessage::RegisterEditCommandForUndo, m_page-&gt;pageID(),
&gt; &gt; +                                            CoreIPC::In(webCommand-&gt;commandID(), static_cast&lt;uint32_t&gt;(webCommand-&gt;command()-&gt;editingAction())));
&gt; 
&gt; We normally don&apos;t like things up like this in WebKit code, since the alignment gets screwed up if we rename something. Is there any clean way to avoid the static_cast? Maybe a local variable instead?

We have been doing this a bit in WebKit2.  We should definitely look at all the places we do it and fix them.

&gt; 
&gt; &gt;  void WebEditorClient::registerCommandForRedo(PassRefPtr&lt;EditCommand&gt;)
&gt; &gt;  {
&gt; &gt; +    // INTENTIONALLY LEFT NOT IMPLEMENTED
&gt; &gt;  }
&gt; 
&gt; WHAT DOES THIS COMMENT MEAN AND WHY IS IT SHOUTING?
&gt; 

Removed.

&gt; &gt; +static uint64_t generateCommandID()
&gt; &gt; +{
&gt; &gt; +    static uint64_t uniqueCommandID = 1;
&gt; &gt; +    return uniqueCommandID++;
&gt; &gt; +}
&gt; 
&gt; I would name the global lastCommandIDUsed or something like that. And use preincrement instead of postincrement.

This pattern is idiomatic in WebKit2. I would rather change them all at once then be inconsistent here.

&gt; Also, I like making the create function non-inline and the constructor inline. Same number of function calls, but less code at each call site.

Done.

&gt; r=me

Thank.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275203</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-07 12:09:11 -0700</bug_when>
    <thetext>&gt; &gt; 
&gt; &gt; &gt; +    WebProcess::shared().connection()-&gt;send(WebPageProxyMessage::RegisterEditCommandForUndo, m_page-&gt;pageID(),
&gt; &gt; &gt; +                                            CoreIPC::In(webCommand-&gt;commandID(), static_cast&lt;uint32_t&gt;(webCommand-&gt;command()-&gt;editingAction())));
&gt; &gt; 
&gt; &gt; We normally don&apos;t like things up like this in WebKit code, since the alignment gets screwed up if we rename something. Is there any clean way to avoid the static_cast? Maybe a local variable instead?
&gt; 
&gt; We have been doing this a bit in WebKit2.  We should definitely look at all the places we do it and fix them.

Never mind. I misunderstood this. Moved into local.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275206</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-07 12:20:05 -0700</bug_when>
    <thetext>Landed in r66897.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66670</attachid>
            <date>2010-09-06 15:06:01 -0700</date>
            <delta_ts>2010-09-07 09:24:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>46867</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjgwNykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTA5LTA1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1
cHBvcnQgZm9yIFVuZG8vUmVkbworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzY2MDUxOT4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNzgxCisKKyAg
ICAgICAgQWRkcyBwbGF0Zm9ybSBpbmRlcGVuZGVudCBwYXJ0cyBvZiBVbmRvL1JlZG8gc3VwcG9y
dCBhbmQgdGhlIG1hYworICAgICAgICBwbGF0Zm9ybSBzdXBwb3J0LgorCisgICAgICAgIFRvIHdv
cmsgYXJvdW5kIHRoZSBjb21tb24gYXNzdW1wdGlvbiBtYWRlIGJ5IHBsYXRmb3JtcywgdGhhdCBh
IHJlZG8KKyAgICAgICAgaXRlbSB3aWxsIGJlIGFkZGVkIHN5bmNocm9ub3VzbHkgd2hpbGUgYW4g
dW5kbyBpcyBpbiBwcm9ncmVzcywgd2UKKyAgICAgICAgaWdub3JlIHRoZSBjYWxscyBmcm9tIFdl
YkNvcmUgdG8gYWRkIHJlZG8gaXRlbXMsIGFuZCBpbnN0ZWFkIGFkZCBhZGQKKyAgICAgICAgdGhl
bSBhZnRlciB0ZWxsaW5nIFdlYkNvcmUgdG8gdW5hcHBseSB0aGUgRWRpdENvbW1hbmQuIFdlIHNp
bWlsYXJseQorICAgICAgICBuZWVkIHRvIGlnbm9yZSB1bmRvcywgdGhhdCB0YWtlIHBsYWNlIGR1
cmluZyBhIHJlZG8sIGFuZCBmb3JjZSB0aGUKKyAgICAgICAgYWRkaXRpb24gb3Vyc2VsdmVzLgor
CisgICAgICAgICogU2hhcmVkL0NvcmVJUENTdXBwb3J0L1dlYlBhZ2VNZXNzYWdlS2luZHMuaDoK
KyAgICAgICAgKiBTaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRz
Lmg6CisgICAgICAgIEFkZCBuZXcgbWVzc2FnZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L21hYy9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VD
bGllbnRJbXBsLm1tOgorICAgICAgICAoLVtXZWJFZGl0Q29tbWFuZE9iakMgaW5pdFdpdGhXZWJF
ZGl0Q29tbWFuZFByb3h5OldlYktpdDo6XSk6CisgICAgICAgICgtW1dlYkVkaXRDb21tYW5kT2Jq
QyBXZWJLaXQ6Ol0pOgorICAgICAgICAoLVtXZWJFZGl0b3JVbmRvVGFyZ2V0T2JqQyB1bmRvRWRp
dGluZzpdKToKKyAgICAgICAgKC1bV2ViRWRpdG9yVW5kb1RhcmdldE9iakMgcmVkb0VkaXRpbmc6
XSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50SW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6Om5hbWVGb3JFZGl0QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUNsaWVudEltcGw6OnJlZ2lzdGVyRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvcXQvcXdrcGFnZS5jcHA6CisgICAgICAgIChRV0tQYWdlUHJpdmF0ZTo6cmVnaXN0ZXJFZGl0
Q29tbWFuZCk6CisgICAgICAgIChRV0tQYWdlUHJpdmF0ZTo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZV9wLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpyZWdpc3RlckVkaXRDb21tYW5kKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgaG9v
a3MgZm9yIHVuZG8vcmVkby4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFBy
b3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk6Oldl
YkVkaXRDb21tYW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0Q29tbWFuZFByb3h5
Ojp+V2ViRWRpdENvbW1hbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRDb21tYW5k
UHJveHk6OnVuYXBwbHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0Q29tbWFuZFByb3h5Ojpy
ZWFwcGx5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQcm94eS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eTo6Y29tbWFuZElEKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdENvbW1hbmRQcm94eTo6ZWRpdEFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYkVkaXRDb21tYW5kUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICBBIHByb3h5IGZvciB0
aGUgV2ViRWRpdENvbW1hbmRzIGluIHRoZSBXZWJQcm9jZXNzLiBUaGVzZSBhcmUgb3duZWQKKyAg
ICAgICAgYnkgdGhlIHBsYXRmb3JtIGJhY2svZm9yd2FyZCBsaXN0LCB3aXRoIGEgd2VhayByZWZl
cmVuY2UgYmFjayB0byB0aGUKKyAgICAgICAgV2ViUGFnZVByb3h5ICh3aGljaCBob2xkcyBhIHdl
YWtzZXQgb2YgbGl2ZSBXZWJFZGl0Q29tbWFuZFByb3h5cykuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbG9z
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRv
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGVhckFsbEVkaXRDb21tYW5kcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVnaXN0ZXJFZGl0Q29tbWFuZEZvclJl
ZG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmFkZEVkaXRDb21tYW5kKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZW1vdmVFZGl0Q29tbWFuZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZEV4aXQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgRm9yd2FyZCBtZXNzYWdlcy4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpjbGVhclVuZG9SZWRvT3BlcmF0aW9u
cyk6CisgICAgICAgIFNlbmQgdW5kby9yZWRvIHJlZ2lzdHJhdGlvbiBhbmQgY2xlYXJpbmcgdG8g
dGhlIFVJUHJvY2Vzcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJFZGl0Q29t
bWFuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpnZW5lcmF0ZUNvbW1hbmRJRCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkVkaXRDb21tYW5kOjpXZWJFZGl0Q29tbWFuZCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkVkaXRDb21tYW5kLmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJFZGl0Q29tbWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRp
dENvbW1hbmQ6OmNvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0Q29tbWFuZDo6Y29t
bWFuZElEKToKKyAgICAgICAgV3JhcHBlciBmb3IgV2ViQ29yZTo6RWRpdENvbW1hbmQsIHdpdGgg
YW4gYWRkZWQgdW5pcXVlIElELgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6d2ViRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjphZGRXZWJFZGl0Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlbW92ZVdl
YkVkaXRDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dW5hcHBseUVkaXRDb21t
YW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVhcHBseUVkaXRDb21tYW5kKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkUmVtb3ZlRWRpdENvbW1hbmQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aXNJblJlZG8p
OgorICAgICAgICBGb3J3YXJkIG1lc3NhZ2VzLgorCisgICAgICAgICogV2ViS2l0Mi5wcm86Cisg
ICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdp
bi9XZWJLaXQyLnZjcHJvajoKKyAgICAgICAgQWRkIG5ldyBmaWxlcy4KKwogMjAxMC0wOS0wNCAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVy
cyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi5wcm8KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9XZWJLaXQyLnBybwkocmV2aXNpb24gNjY4MDcpCisrKyBXZWJLaXQyL1dlYktpdDIucHJv
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNiArMjA3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQ
cm9jZXNzL1dlYkNvbnRleHQuaCBcCiAgICAgVUlQcm9jZXNzL1dlYkNvbnRleHRJbmplY3RlZEJ1
bmRsZUNsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29kZXJz
LmggXAorICAgIFVJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFByb3h5LmggXAogICAgIFVJUHJvY2Vz
cy9XZWJGb3JtQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9XZWJGb3JtU3VibWlzc2lvbkxpc3Rl
bmVyUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYkZyYW1lTGlzdGVuZXJQcm94eS5oIFwKQEAg
LTI1NCw2ICsyNTUsNyBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWEuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkVkaXRDb21tYW5kLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oIFwKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBcCkBAIC0zMTUs
NiArMzE3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0uY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAgXAogICAgIFVJUHJvY2Vz
cy9XZWJDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwIFwKKyAgICBVSVByb2Nlc3MvV2Vi
RWRpdENvbW1hbmRQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJGb3JtQ2xpZW50LmNwcCBc
CiAgICAgVUlQcm9jZXNzL1dlYkZvcm1TdWJtaXNzaW9uTGlzdGVuZXJQcm94eS5jcHAgXAogICAg
IFVJUHJvY2Vzcy9XZWJGcmFtZUxpc3RlbmVyUHJveHkuY3BwIFwKQEAgLTM2Myw2ICszNjYsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ2h1bmtlZFVw
ZGF0ZURyYXdpbmdBcmVhLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
LmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkVkaXRDb21tYW5kLmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0
UHJveHkuY3BwIFwKSW5kZXg6IFdlYktpdDIvU2hhcmVkL0NvcmVJUENTdXBwb3J0L1dlYlBhZ2VN
ZXNzYWdlS2luZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9y
dC9XZWJQYWdlTWVzc2FnZUtpbmRzLmgJKHJldmlzaW9uIDY2ODA3KQorKysgV2ViS2l0Mi9TaGFy
ZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZU1lc3NhZ2VLaW5kcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJQYWdlTWVzc2FnZSB7CiBlbnVtIEtpbmQgewog
ICAgIENsb3NlLAogICAgIERpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbiwKKyAgICBEaWRSZW1vdmVF
ZGl0Q29tbWFuZCwKICAgICBHZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbiwKICAg
ICBHb0JhY2ssCiAgICAgR29Gb3J3YXJkLApAQCAtNDQsNiArNDUsNyBAQCBlbnVtIEtpbmQgewog
ICAgIExvYWRVUkxSZXF1ZXN0LAogICAgIE1vdXNlRXZlbnQsCiAgICAgUHJlZmVyZW5jZXNEaWRD
aGFuZ2UsCisgICAgUmVhcHBseUVkaXRDb21tYW5kLAogICAgIFJlbG9hZCwKICAgICBSdW5KYXZh
U2NyaXB0SW5NYWluRnJhbWUsCiAgICAgU2V0QWN0aXZlLApAQCAtNTIsNiArNTQsNyBAQCBlbnVt
IEtpbmQgewogICAgIFNldElzSW5XaW5kb3csCiAgICAgU3RvcExvYWRpbmcsCiAgICAgVHJ5Q2xv
c2UsCisgICAgVW5hcHBseUVkaXRDb21tYW5kLAogICAgIFdoZWVsRXZlbnQKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQogICAgICwgVG91Y2hFdmVudApJbmRleDogV2ViS2l0Mi9TaGFyZWQvQ29y
ZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgJKHJl
dmlzaW9uIDY2ODA3KQorKysgV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZVBy
b3h5TWVzc2FnZUtpbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgZW51bSBL
aW5kIHsKICAgICBTZXRUb29sVGlwLAogICAgIFRha2VGb2N1cywKICAgICBXaWxsU3VibWl0Rm9y
bSwKLSAgICAKKwogICAgIEJhY2tGb3J3YXJkQWRkSXRlbSwKICAgICBCYWNrRm9yd2FyZEdvVG9J
dGVtLAogICAgIEJhY2tGb3J3YXJkQmFja0l0ZW0sCkBAIC03Nyw2ICs3Nyw5IEBAIGVudW0gS2lu
ZCB7CiAgICAgQmFja0ZvcndhcmRCYWNrTGlzdENvdW50LAogICAgIEJhY2tGb3J3YXJkRm9yd2Fy
ZExpc3RDb3VudCwKIAorICAgIFJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvLAorICAgIENsZWFy
QWxsRWRpdENvbW1hbmRzLAorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IERpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcsCiAjZW5kaWYKSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgJKHJldmlzaW9uIDY2ODA3KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdlYkVkaXRDb21tYW5kUHJveHk7CisK
IGNsYXNzIFBhZ2VDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgflBhZ2VDbGllbnQoKSB7
IH0KQEAgLTQ2LDYgKzQ4LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJz
b3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgPSAwOwogCisgICAgZW51bSBVbmRvT3JSZWRvIHsg
VW5kbywgUmVkbyB9OworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NS
ZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFVuZG9PclJlZG8pID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKSA9IDA7CisKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRFbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRMZWF2ZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoKSA9IDA7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJFZGl0Q29tbWFu
ZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJFZGl0Q29tbWFu
ZFByb3h5LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkVkaXRDb21t
YW5kUHJveHkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKKworI2luY2x1ZGUgIldlYlBhZ2VNZXNz
YWdlS2luZHMuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcm9j
ZXNzUHJveHkuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJFZGl0Q29tbWFuZFByb3h5OjpXZWJFZGl0Q29tbWFuZFByb3h5KHVpbnQ2NF90
IGNvbW1hbmRJRCwgV2ViQ29yZTo6RWRpdEFjdGlvbiBlZGl0QWN0aW9uLCBXZWJQYWdlUHJveHkq
IHBhZ2UpCisgICAgOiBtX2NvbW1hbmRJRChjb21tYW5kSUQpCisgICAgLCBtX2VkaXRBY3Rpb24o
ZWRpdEFjdGlvbikKKyAgICAsIG1fcGFnZShwYWdlKQoreworICAgIG1fcGFnZS0+YWRkRWRpdENv
bW1hbmQodGhpcyk7Cit9CisKK1dlYkVkaXRDb21tYW5kUHJveHk6On5XZWJFZGl0Q29tbWFuZFBy
b3h5KCkKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnJlbW92ZUVkaXRDb21t
YW5kKHRoaXMpOworfQorCit2b2lkIFdlYkVkaXRDb21tYW5kUHJveHk6OnVuYXBwbHkoKQorewor
ICAgIGlmICghbV9wYWdlIHx8ICFtX3BhZ2UtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wYWdlLT5wcm9jZXNzKCktPmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlTWVzc2Fn
ZTo6VW5hcHBseUVkaXRDb21tYW5kLCBtX3BhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihtX2Nv
bW1hbmRJRCkpOworICAgIG1fcGFnZS0+cmVnaXN0ZXJFZGl0Q29tbWFuZEZvclJlZG8odGhpcyk7
Cit9CisKK3ZvaWQgV2ViRWRpdENvbW1hbmRQcm94eTo6cmVhcHBseSgpCit7CisgICAgaWYgKCFt
X3BhZ2UgfHwgIW1fcGFnZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Bh
Z2UtPnByb2Nlc3MoKS0+Y29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VNZXNzYWdlOjpSZWFwcGx5
RWRpdENvbW1hbmQsIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKG1fY29tbWFuZElEKSk7
CisgICAgbV9wYWdlLT5yZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyh0aGlzKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJFZGl0Q29tbWFu
ZFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQ
cm94eS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQ
cm94eS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJFZGl0Q29tbWFuZFByb3h5X2gKKyNkZWZpbmUgV2ViRWRpdENvbW1hbmRQcm94eV9oCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0VkaXRBY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFdlYkVkaXRDb21tYW5kUHJveHkgOiBwdWJs
aWMgUmVmQ291bnRlZDxXZWJFZGl0Q29tbWFuZFByb3h5PiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4gY3JlYXRlKHVpbnQ2NF90IGNvbW1hbmRJ
RCwgV2ViQ29yZTo6RWRpdEFjdGlvbiBlZGl0QWN0aW9uLCBXZWJQYWdlUHJveHkqIHBhZ2UpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkVkaXRDb21tYW5kUHJveHkoY29t
bWFuZElELCBlZGl0QWN0aW9uLCBwYWdlKSk7CisgICAgfQorICAgIH5XZWJFZGl0Q29tbWFuZFBy
b3h5KCk7CisKKyAgICB1aW50NjRfdCBjb21tYW5kSUQoKSBjb25zdCB7IHJldHVybiBtX2NvbW1h
bmRJRDsgfQorICAgIFdlYkNvcmU6OkVkaXRBY3Rpb24gZWRpdEFjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZWRpdEFjdGlvbjsgfQorCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX3BhZ2UgPSAw
OyB9CisKKyAgICB2b2lkIHVuYXBwbHkoKTsKKyAgICB2b2lkIHJlYXBwbHkoKTsKKworcHJpdmF0
ZToKKyAgICBleHBsaWNpdCBXZWJFZGl0Q29tbWFuZFByb3h5KHVpbnQ2NF90IGNvbW1hbmRJRCwg
V2ViQ29yZTo6RWRpdEFjdGlvbiwgV2ViUGFnZVByb3h5Kik7CisKKyAgICB1aW50NjRfdCBtX2Nv
bW1hbmRJRDsKKyAgICBXZWJDb3JlOjpFZGl0QWN0aW9uIG1fZWRpdEFjdGlvbjsKKyAgICBXZWJQ
YWdlUHJveHkqIG1fcGFnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gV2ViRWRpdENvbW1hbmRQcm94eV9oCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAJKHJldmlzaW9uIDY2ODA3KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldlYkNvbnRleHRV
c2VyTWVzc2FnZUNvZGVycy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgog
I2luY2x1ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJFZGl0Q29tbWFuZFByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlICJXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVy
UHJveHkuaCIKICNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKQEAgLTE4
Nyw2ICsxODgsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsb3NlKCkKICAgICAgICAgcmVuZGVy
VHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb25DYWxsYmFja3NbaV0tPmludmFsaWRhdGUoKTsKICAg
ICBtX3JlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uQ2FsbGJhY2tzLmNsZWFyKCk7CiAK
KyAgICBWZWN0b3I8V2ViRWRpdENvbW1hbmRQcm94eSo+IGVkaXRDb21tYW5kVmVjdG9yOworICAg
IGNvcHlUb1ZlY3RvcihtX2VkaXRDb21tYW5kU2V0LCBlZGl0Q29tbWFuZFZlY3Rvcik7CisgICAg
Zm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBlZGl0Q29tbWFuZFZlY3Rvci5zaXplKCk7IGkgPCBz
aXplOyArK2kpCisgICAgICAgIGVkaXRDb21tYW5kVmVjdG9yW2ldLT5pbnZhbGlkYXRlKCk7Cisg
ICAgbV9lZGl0Q29tbWFuZFNldC5jbGVhcigpOworCiAgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9
IDAuMDsKICAgICAKICAgICBtX2xvYWRlckNsaWVudC5pbml0aWFsaXplKDApOwpAQCAtNjQ4LDYg
KzY1NSwxOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yCiAgICAg
ICAgICAgICBjb250ZW50c1NpemVDaGFuZ2VkKHByb2Nlc3MoKS0+d2ViRnJhbWUoZnJhbWVJRCks
IHNpemUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJQ
YWdlUHJveHlNZXNzYWdlOjpSZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbzogeworICAgICAgICAg
ICAgdWludDY0X3QgY29tbWFuZElEOworICAgICAgICAgICAgdWludDMyX3QgZWRpdEFjdGlvbjsK
KyAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGNvbW1hbmRJ
RCwgZWRpdEFjdGlvbikpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKGNvbW1hbmRJRCwgc3Rh
dGljX2Nhc3Q8RWRpdEFjdGlvbj4oZWRpdEFjdGlvbikpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpDbGVhckFsbEVkaXRD
b21tYW5kczogeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNsZWFyQWxsRWRpdENvbW1h
bmRzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTkzNyw2ICs5NTcsNDMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdvVG9JdGVtSW5CYWNrRm9yd2Fy
ZAogICAgIG1fYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbShpdGVtKTsKIH0KIAorLy8gVW5kbyBt
YW5hZ2VtZW50CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZWdpc3RlckVkaXRDb21tYW5kRm9yVW5k
byh1aW50NjRfdCBjb21tYW5kSUQsIEVkaXRBY3Rpb24gZWRpdEFjdGlvbikKK3sKKyAgICBSZWZQ
dHI8V2ViRWRpdENvbW1hbmRQcm94eT4gY29tbWFuZFByb3h5ID0gV2ViRWRpdENvbW1hbmRQcm94
eTo6Y3JlYXRlKGNvbW1hbmRJRCwgZWRpdEFjdGlvbiwgdGhpcyk7CisgICAgcmVnaXN0ZXJFZGl0
Q29tbWFuZEZvclVuZG8oY29tbWFuZFByb3h5LnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpjbGVhckFsbEVkaXRDb21tYW5kcygpCit7CisgICAgbV9wYWdlQ2xpZW50LT5jbGVh
ckFsbEVkaXRDb21tYW5kcygpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJFZGl0
Q29tbWFuZEZvclVuZG8oUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBjb21tYW5kUHJv
eHkpCit7CisgICAgbV9wYWdlQ2xpZW50LT5yZWdpc3RlckVkaXRDb21tYW5kKGNvbW1hbmRQcm94
eSwgUGFnZUNsaWVudDo6VW5kbyk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZWdpc3RlckVk
aXRDb21tYW5kRm9yUmVkbyhQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IGNvbW1hbmRQ
cm94eSkKK3sKKyAgICBtX3BhZ2VDbGllbnQtPnJlZ2lzdGVyRWRpdENvbW1hbmQoY29tbWFuZFBy
b3h5LCBQYWdlQ2xpZW50OjpSZWRvKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmFkZEVkaXRD
b21tYW5kKFdlYkVkaXRDb21tYW5kUHJveHkqIGNvbW1hbmQpCit7CisgICAgbV9lZGl0Q29tbWFu
ZFNldC5hZGQoY29tbWFuZCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZW1vdmVFZGl0Q29t
bWFuZChXZWJFZGl0Q29tbWFuZFByb3h5KiBjb21tYW5kKQoreworICAgIG1fZWRpdENvbW1hbmRT
ZXQucmVtb3ZlKGNvbW1hbmQpOworCisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBwcm9jZXNzKCktPnNlbmQoV2ViUGFnZU1lc3NhZ2U6OkRpZFJlbW92ZUVkaXRDb21t
YW5kLCBtX3BhZ2VJRCwgY29tbWFuZC0+Y29tbWFuZElEKCkpOworfQorCiAvLyBPdGhlcgogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6dGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKQpAQCAtMTA0Miw2ICsx
MDk5LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpwcm9jZXNzRGlkRXhpdCgpCiAgICAgICAgIHJl
bmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uQ2FsbGJhY2tzW2ldLT5pbnZhbGlkYXRlKCk7
CiAgICAgbV9yZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbkNhbGxiYWNrcy5jbGVhcigp
OwogCisgICAgVmVjdG9yPFdlYkVkaXRDb21tYW5kUHJveHkqPiBlZGl0Q29tbWFuZFZlY3RvcjsK
KyAgICBjb3B5VG9WZWN0b3IobV9lZGl0Q29tbWFuZFNldCwgZWRpdENvbW1hbmRWZWN0b3IpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gZWRpdENvbW1hbmRWZWN0b3Iuc2l6ZSgpOyBp
IDwgc2l6ZTsgKytpKQorICAgICAgICBlZGl0Q29tbWFuZFZlY3RvcltpXS0+aW52YWxpZGF0ZSgp
OworICAgIG1fZWRpdENvbW1hbmRTZXQuY2xlYXIoKTsKKyAgICBtX3BhZ2VDbGllbnQtPmNsZWFy
QWxsRWRpdENvbW1hbmRzKCk7CisKICAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMC4wOwogCiAg
ICAgbV9wYWdlQ2xpZW50LT5wcm9jZXNzRGlkRXhpdCgpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgJKHJldmlzaW9uIDY2ODA3KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDEwIEBACiAjaW5jbHVkZSAiV2ViTG9h
ZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUG9saWN5Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2Vi
VUlDbGllbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0VkaXRBY3Rpb24uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTY1LDYg
KzY3LDcgQEAgY2xhc3MgUGFnZUNsaWVudDsKIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdDsKIGNs
YXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CiBjbGFzcyBXZWJEYXRhOworY2xhc3MgV2ViRWRp
dENvbW1hbmRQcm94eTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJNb3VzZUV2
ZW50OwogY2xhc3MgV2ViUGFnZU5hbWVzcGFjZTsKQEAgLTE2Miw2ICsxNjUsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgZGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CiAjZW5kaWYKIAor
ICAgIHZvaWQgYWRkRWRpdENvbW1hbmQoV2ViRWRpdENvbW1hbmRQcm94eSopOworICAgIHZvaWQg
cmVtb3ZlRWRpdENvbW1hbmQoV2ViRWRpdENvbW1hbmRQcm94eSopOworICAgIHZvaWQgcmVnaXN0
ZXJFZGl0Q29tbWFuZEZvclVuZG8oUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5Pik7Cisg
ICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kRm9yUmVkbyhQYXNzUmVmUHRyPFdlYkVkaXRDb21t
YW5kUHJveHk+KTsKKwogICAgIFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcygpIGNvbnN0OwogICAg
IFdlYlBhZ2VOYW1lc3BhY2UqIHBhZ2VOYW1lc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VO
YW1lc3BhY2UuZ2V0KCk7IH0KIApAQCAtMjEwLDkgKzIxOCwxNCBAQCBwcml2YXRlOgogICAgIFdU
Rjo6U3RyaW5nIHJ1bkphdmFTY3JpcHRQcm9tcHQoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0
IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKICAgICB2b2lkIGNvbnRlbnRzU2l6
ZUNoYW5nZWQoV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKIAorICAg
IC8vIEJhY2svRm9yd2FyZCBsaXN0IG1hbmFnZW1lbnQKICAgICB2b2lkIGFkZEl0ZW1Ub0JhY2tG
b3J3YXJkTGlzdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKik7CiAgICAgdm9pZCBnb1RvSXRlbUlu
QmFja0ZvcndhcmRMaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qKTsKIAorICAgIC8vIFVuZG8g
bWFuYWdlbWVudAorICAgIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZEZvclVuZG8odWludDY0X3Qg
Y29tbWFuZElELCBXZWJDb3JlOjpFZGl0QWN0aW9uIGVkaXRBY3Rpb24pOworICAgIHZvaWQgY2xl
YXJBbGxFZGl0Q29tbWFuZHMoKTsKKwogICAgIHZvaWQgdGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9u
KTsKICAgICB2b2lkIHNldFRvb2xUaXAoY29uc3QgV1RGOjpTdHJpbmcmKTsKICAgICB2b2lkIHNl
dEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKQEAgLTIzOSw2ICsyNTIsOCBAQCBwcml2
YXRlOgogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxTY3JpcHRSZXR1cm5WYWx1ZUNhbGxi
YWNrPiA+IG1fc2NyaXB0UmV0dXJuVmFsdWVDYWxsYmFja3M7CiAgICAgSGFzaE1hcDx1aW50NjRf
dCwgUmVmUHRyPFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uQ2FsbGJhY2s+ID4gbV9y
ZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbkNhbGxiYWNrczsKIAorICAgIEhhc2hTZXQ8
V2ViRWRpdENvbW1hbmRQcm94eSo+IG1fZWRpdENvbW1hbmRTZXQ7CisKICAgICBkb3VibGUgbV9l
c3RpbWF0ZWRQcm9ncmVzczsKIAogICAgIC8vIFdoZXRoZXIgdGhlIHdlYiBwYWdlIGlzIGNvbnRh
aW5lZCBpbiBhIHRvcC1sZXZlbCB3aW5kb3cuCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA2NjgwNykKKysrIFdlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcs
MTAgQEAKICNkZWZpbmUgUGFnZUNsaWVudEltcGxfaAogCiAjaW5jbHVkZSAiUGFnZUNsaWVudC5o
IgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogQGNsYXNzIFdLVmlldzsKK0BjbGFzcyBX
ZWJFZGl0b3JVbmRvVGFyZ2V0T2JqQzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTUwLDEy
ICs1MiwxNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25z
dCBXVEY6OlN0cmluZyYgb2xkVG9vbFRpcCwgY29uc3QgV1RGOjpTdHJpbmcmIG5ld1Rvb2xUaXAp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CiAK
KyAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFBy
b3h5PiwgVW5kb09yUmVkbyk7CisgICAgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOworCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgcGFnZURpZEVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpOwogICAgIHZvaWQgcGFnZURpZExlYXZlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpOwogI2VuZGlmCiAKICAgICBXS1ZpZXcqIG1fd2tWaWV3OworICAgIFJldGFp
blB0cjxXZWJFZGl0b3JVbmRvVGFyZ2V0T2JqQz4gbV91bmRvVGFyZ2V0OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGll
bnRJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNs
aWVudEltcGwubW0JKHJldmlzaW9uIDY2ODA3KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9QYWdlQ2xpZW50SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lt
cG9ydCAiV0tBUElDYXN0LmgiCiAjaW1wb3J0ICJXS1N0cmluZ0NGLmgiCiAjaW1wb3J0ICJXS1Zp
ZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgogI2ltcG9ydCA8
V2ViQ29yZS9DdXJzb3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm91bmRhdGlvbkV4dHJhcy5oPgog
I2ltcG9ydCA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTM1LDYgKzM2LDYzIEBACiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCisvLyAtLSBCRUdJTiBIRUxQRVIgQ0xBU1NFUworCitAaW50ZXJm
YWNlIFdlYkVkaXRDb21tYW5kT2JqQyA6IE5TT2JqZWN0Cit7CisgICAgUmVmUHRyPFdlYktpdDo6
V2ViRWRpdENvbW1hbmRQcm94eT4gbV9jb21tYW5kOyAgIAorfQorCistIChpZClpbml0V2l0aFdl
YkVkaXRDb21tYW5kUHJveHk6KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJFZGl0Q29tbWFuZFByb3h5
Piljb21tYW5kOworLSAoV2ViS2l0OjpXZWJFZGl0Q29tbWFuZFByb3h5Kiljb21tYW5kOworCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJFZGl0Q29tbWFuZE9iakMKKworLSAoaWQpaW5pdFdp
dGhXZWJFZGl0Q29tbWFuZFByb3h5OihQYXNzUmVmUHRyPFdlYktpdDo6V2ViRWRpdENvbW1hbmRQ
cm94eT4pY29tbWFuZAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgbV9jb21tYW5kID0gY29tbWFuZDsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAoV2ViS2l0OjpXZWJFZGl0Q29tbWFuZFByb3h5Kiljb21tYW5k
Cit7CisgICAgcmV0dXJuIG1fY29tbWFuZC5nZXQoKTsKK30KKworQGVuZAorCitAaW50ZXJmYWNl
IFdlYkVkaXRvclVuZG9UYXJnZXRPYmpDIDogTlNPYmplY3QKKworLSAodm9pZCl1bmRvRWRpdGlu
ZzooaWQpYXJnOworLSAodm9pZClyZWRvRWRpdGluZzooaWQpYXJnOworCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJFZGl0b3JVbmRvVGFyZ2V0T2JqQworCistICh2b2lkKXVuZG9FZGl0aW5n
OihpZClhcmcKK3sKKyAgICBBU1NFUlQoW2FyZyBpc0tpbmRPZkNsYXNzOltXZWJFZGl0Q29tbWFu
ZE9iakMgY2xhc3NdXSk7CisgICAgW2FyZyBjb21tYW5kXS0+dW5hcHBseSgpOworfQorCistICh2
b2lkKXJlZG9FZGl0aW5nOihpZClhcmcKK3sKKyAgICBBU1NFUlQoW2FyZyBpc0tpbmRPZkNsYXNz
OltXZWJFZGl0Q29tbWFuZE9iakMgY2xhc3NdXSk7CisgICAgW2FyZyBjb21tYW5kXS0+cmVhcHBs
eSgpOworfQorCitAZW5kCisKKy8vIC0tIEVORCBIRUxQRVIgQ0xBU1NFUworCisKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBOU1N0cmluZyogbnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhjb25zdCBX
VEY6OlN0cmluZyYgc3RyaW5nKQpAQCAtNDksNiArMTA3LDcgQEAgUGFzc093blB0cjxQYWdlQ2xp
ZW50SW1wbD4gUGFnZUNsaWVudEltcAogCiBQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwo
V0tWaWV3KiB3a1ZpZXcpCiAgICAgOiBtX3drVmlldyh3a1ZpZXcpCisgICAgLCBtX3VuZG9UYXJn
ZXQoQWRvcHROUywgW1tXZWJFZGl0b3JVbmRvVGFyZ2V0T2JqQyBhbGxvY10gaW5pdF0pCiB7CiB9
CiAKQEAgLTgxLDYgKzE0MCw3MSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3IoY29u
c3QgV2ViCiAgICAgW21fd2tWaWV3IF9zZXRDdXJzb3I6Y3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCld
OwogfQogCitzdGF0aWMgTlNTdHJpbmcqIG5hbWVGb3JFZGl0QWN0aW9uKEVkaXRBY3Rpb24gZWRp
dEFjdGlvbikKK3sKKyAgICAvLyBGSVhNRTogVXNlIGxvY2FsaXplZCBzdHJpbmdzLgorICAgIC8v
IEZJWE1FOiBNb3ZlIHRoaXMgdG8gYSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBsb2NhdGlvbi4KKwor
ICAgIHN3aXRjaCAoZWRpdEFjdGlvbikgeworICAgIGNhc2UgRWRpdEFjdGlvblVuc3BlY2lmaWVk
OiByZXR1cm4gbmlsOworICAgIGNhc2UgRWRpdEFjdGlvblNldENvbG9yOiByZXR1cm4gQCJTZXQg
Q29sb3IiOworICAgIGNhc2UgRWRpdEFjdGlvblNldEJhY2tncm91bmRDb2xvcjogcmV0dXJuIEAi
U2V0IEJhY2tncm91bmQgQ29sb3IiOworICAgIGNhc2UgRWRpdEFjdGlvblR1cm5PZmZLZXJuaW5n
OiByZXR1cm4gQCJUdXJuIE9mZiBLZXJuaW5nIjsKKyAgICBjYXNlIEVkaXRBY3Rpb25UaWdodGVu
S2VybmluZzogcmV0dXJuIEAiVGlnaHRlbiBLZXJuaW5nIjsKKyAgICBjYXNlIEVkaXRBY3Rpb25M
b29zZW5LZXJuaW5nOiByZXR1cm4gQCJMb29zZW4gS2VybmluZyI7CisgICAgY2FzZSBFZGl0QWN0
aW9uVXNlU3RhbmRhcmRLZXJuaW5nOiByZXR1cm4gQCJVc2UgU3RhbmRhcmQgS2VybmluZyI7Cisg
ICAgY2FzZSBFZGl0QWN0aW9uVHVybk9mZkxpZ2F0dXJlczogcmV0dXJuIEAiVHVybiBPZmYgTGln
YXR1cmVzIjsKKyAgICBjYXNlIEVkaXRBY3Rpb25Vc2VTdGFuZGFyZExpZ2F0dXJlczogcmV0dXJu
IEAiVXNlIFN0YW5kYXJkIExpZ2F0dXJlcyI7CisgICAgY2FzZSBFZGl0QWN0aW9uVXNlQWxsTGln
YXR1cmVzOiByZXR1cm4gQCJVc2UgQWxsIExpZ2F0dXJlcyI7CisgICAgY2FzZSBFZGl0QWN0aW9u
UmFpc2VCYXNlbGluZTogcmV0dXJuIEAiUmFpc2UgQmFzZWxpbmUiOworICAgIGNhc2UgRWRpdEFj
dGlvbkxvd2VyQmFzZWxpbmU6IHJldHVybiBAIkxvd2VyIEJhc2VsaW5lIjsKKyAgICBjYXNlIEVk
aXRBY3Rpb25TZXRUcmFkaXRpb25hbENoYXJhY3RlclNoYXBlOiByZXR1cm4gQCJTZXQgVHJhZGl0
aW9uYWwgQ2hhcmFjdGVyIFNoYXBlIjsKKyAgICBjYXNlIEVkaXRBY3Rpb25TZXRGb250OiByZXR1
cm4gQCJTZXQgRm9udCI7CisgICAgY2FzZSBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlczogcmV0
dXJuIEAiQ2hhbmdlIEF0dHJpYnV0ZXMiOworICAgIGNhc2UgRWRpdEFjdGlvbkFsaWduTGVmdDog
cmV0dXJuIEAiQWxpZ24gTGVmdCI7CisgICAgY2FzZSBFZGl0QWN0aW9uQWxpZ25SaWdodDogcmV0
dXJuIEAiQWxpZ24gUmlnaHQiOworICAgIGNhc2UgRWRpdEFjdGlvbkNlbnRlcjogcmV0dXJuIEAi
Q2VudGVyIjsKKyAgICBjYXNlIEVkaXRBY3Rpb25KdXN0aWZ5OiByZXR1cm4gQCJKdXN0aWZ5IjsK
KyAgICBjYXNlIEVkaXRBY3Rpb25TZXRXcml0aW5nRGlyZWN0aW9uOiByZXR1cm4gQCJTZXQgV3Jp
dGluZyBEaXJlY3Rpb24iOworICAgIGNhc2UgRWRpdEFjdGlvblN1YnNjcmlwdDogcmV0dXJuIEAi
U3Vic2NyaXB0IjsKKyAgICBjYXNlIEVkaXRBY3Rpb25TdXBlcnNjcmlwdDogcmV0dXJuIEAiU3Vw
ZXJzY3JpcHQiOworICAgIGNhc2UgRWRpdEFjdGlvblVuZGVybGluZTogcmV0dXJuIEAiVW5kZXJs
aW5lIjsKKyAgICBjYXNlIEVkaXRBY3Rpb25PdXRsaW5lOiByZXR1cm4gQCJPdXRsaW5lIjsKKyAg
ICBjYXNlIEVkaXRBY3Rpb25VbnNjcmlwdDogcmV0dXJuIEAiVW5zY3JpcHQiOworICAgIGNhc2Ug
RWRpdEFjdGlvbkRyYWc6IHJldHVybiBAIkRyYWciOworICAgIGNhc2UgRWRpdEFjdGlvbkN1dDog
cmV0dXJuIEAiQ3V0IjsKKyAgICBjYXNlIEVkaXRBY3Rpb25QYXN0ZTogcmV0dXJuIEAiUGFzdGUi
OworICAgIGNhc2UgRWRpdEFjdGlvblBhc3RlRm9udDogcmV0dXJuIEAiUGFzdGUgRm9udCI7Cisg
ICAgY2FzZSBFZGl0QWN0aW9uUGFzdGVSdWxlcjogcmV0dXJuIEAiUGFzdGUgUnVsZXIiOworICAg
IGNhc2UgRWRpdEFjdGlvblR5cGluZzogcmV0dXJuIEAiVHlwaW5nIjsKKyAgICBjYXNlIEVkaXRB
Y3Rpb25DcmVhdGVMaW5rOiByZXR1cm4gQCJDcmVhdGUgTGluayI7CisgICAgY2FzZSBFZGl0QWN0
aW9uVW5saW5rOiByZXR1cm4gQCJVbmxpbmsiOworICAgIGNhc2UgRWRpdEFjdGlvbkluc2VydExp
c3Q6IHJldHVybiBAIkluc2VydCBMaXN0IjsKKyAgICBjYXNlIEVkaXRBY3Rpb25Gb3JtYXRCbG9j
azogcmV0dXJuIEAiRm9ybWF0dGluZyI7CisgICAgY2FzZSBFZGl0QWN0aW9uSW5kZW50OiByZXR1
cm4gQCJJbmRlbnQiOworICAgIGNhc2UgRWRpdEFjdGlvbk91dGRlbnQ6IHJldHVybiBAIk91dGRl
bnQiOworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpy
ZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4gcHJwQ29t
bWFuZCwgVW5kb09yUmVkbyB1bmRvT3JSZWRvKQoreworICAgIFJlZlB0cjxXZWJFZGl0Q29tbWFu
ZFByb3h5PiBjb21tYW5kID0gcHJwQ29tbWFuZDsKKworICAgIFJldGFpblB0cjxXZWJFZGl0Q29t
bWFuZE9iakM+IGNvbW1hbmRPYmpDKEFkb3B0TlMsIFtbV2ViRWRpdENvbW1hbmRPYmpDIGFsbG9j
XSBpbml0V2l0aFdlYkVkaXRDb21tYW5kUHJveHk6Y29tbWFuZF0pOworICAgIE5TU3RyaW5nICph
Y3Rpb25OYW1lID0gbmFtZUZvckVkaXRBY3Rpb24oY29tbWFuZC0+ZWRpdEFjdGlvbigpKTsKKwor
ICAgIE5TVW5kb01hbmFnZXIgKnVuZG9NYW5hZ2VyID0gW21fd2tWaWV3IHVuZG9NYW5hZ2VyXTsK
KyAgICBbdW5kb01hbmFnZXIgcmVnaXN0ZXJVbmRvV2l0aFRhcmdldDptX3VuZG9UYXJnZXQuZ2V0
KCkgc2VsZWN0b3I6KCh1bmRvT3JSZWRvID09IFVuZG8pID8gQHNlbGVjdG9yKHVuZG9FZGl0aW5n
OikgOiBAc2VsZWN0b3IocmVkb0VkaXRpbmc6KSkgb2JqZWN0OmNvbW1hbmRPYmpDLmdldCgpXTsK
KyAgICBpZiAoYWN0aW9uTmFtZSkKKyAgICAgICAgW3VuZG9NYW5hZ2VyIHNldEFjdGlvbk5hbWU6
YWN0aW9uTmFtZV07Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyQWxsRWRpdENvbW1h
bmRzKCkKK3sKKyAgICBbW21fd2tWaWV3IHVuZG9NYW5hZ2VyXSByZW1vdmVBbGxBY3Rpb25zV2l0
aFRhcmdldDptX3VuZG9UYXJnZXQuZ2V0KCldOworfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURpZEVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpCiB7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuY3BwCShy
ZXZpc2lvbiA2NjgwNykKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsMTQgQEAgdm9pZCBRV0tQYWdlUHJpdmF0ZTo6dG9v
bFRpcENoYW5nZWQoY29ucwogICAgIGVtaXQgcS0+c3RhdHVzQmFyTWVzc2FnZShRU3RyaW5nKG5l
d1Rvb2x0aXApKTsKIH0KIAordm9pZCBRV0tQYWdlUHJpdmF0ZTo6cmVnaXN0ZXJFZGl0Q29tbWFu
ZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBVbmRvT3JSZWRvKQoreworfQorCit2
b2lkIFFXS1BhZ2VQcml2YXRlOjpjbGVhckFsbEVkaXRDb21tYW5kcygpCit7Cit9CisKIHZvaWQg
UVdLUGFnZVByaXZhdGU6OnBhaW50KFFQYWludGVyKiBwYWludGVyLCBRUmVjdCBhcmVhKQogewog
ICAgIHBhaW50ZXItPnNhdmUoKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2tw
YWdlX3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZV9w
LmgJKHJldmlzaW9uIDY2ODA3KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2Vf
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOwogICAgIHZpcnR1YWwgdm9p
ZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pIHsgfQogICAgIHZpcnR1YWwgdm9pZCB0b29sVGlw
Q2hhbmdlZChjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgdmly
dHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJLaXQ6OldlYkVkaXRD
b21tYW5kUHJveHk+LCBVbmRvT3JSZWRvKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0
Q29tbWFuZHMoKTsKIAogICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIFFSZWN0KTsK
IApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNjY4MDcpCisrKyBX
ZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2OSw2
ICs1NjksMTQgQEAgdm9pZCBXZWJWaWV3OjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6QwogICAg
IDo6U2V0Q3Vyc29yKHBsYXRmb3JtQ3Vyc29yKTsKIH0KIAordm9pZCBXZWJWaWV3OjpyZWdpc3Rl
ckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFVuZG9PclJlZG8p
Cit7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQoreworfQorCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBXZWJWaWV3OjpwYWdlRGlkRW50
ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKIHsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcu
aAkocmV2aXNpb24gNjY4MDcpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHRha2VGb2N1cyhib29sIGRpcmVjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFu
Z2VkKGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOworICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFVu
ZG9PclJlZG8pOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOworCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlk
RW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRM
ZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2NjgwNykKKysrIFdlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNiArMjQx
LDEwIEBACiAJCUJDOUU5NUQ0MTE0NDlCMDMwMDg3MEU3MSAvKiBVcGRhdGVDaHVuay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlFOTVEMjExNDQ5
QjAzMDA4NzBFNzEgLyogVXBkYXRlQ2h1bmsuY3BwICovOyB9OwogCQlCQzlFOTY5QTExNDU3RURF
MDA4NzBFNzEgLyogRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VLaW5kcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5RTk2OTkxMTQ1N0VERTAwODcwRTcx
IC8qIERyYXdpbmdBcmVhUHJveHlNZXNzYWdlS2luZHMuaCAqLzsgfTsKIAkJQkM5RTk2OUMxMTQ1
N0YzRjAwODcwRTcxIC8qIERyYXdpbmdBcmVhTWVzc2FnZUtpbmRzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlFOTY5QjExNDU3RjNGMDA4NzBFNzEg
LyogRHJhd2luZ0FyZWFNZXNzYWdlS2luZHMuaCAqLzsgfTsKKwkJQkNBMEVGN0YxMjMzMUU3ODAw
N0QzQ0ZCIC8qIFdlYkVkaXRDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0EwRUY3RDEyMzMxRTc4MDA3RDNDRkIgLyogV2ViRWRpdENvbW1h
bmQuaCAqLzsgfTsKKwkJQkNBMEVGODAxMjMzMUU3ODAwN0QzQ0ZCIC8qIFdlYkVkaXRDb21tYW5k
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTBF
RjdFMTIzMzFFNzgwMDdEM0NGQiAvKiBXZWJFZGl0Q29tbWFuZC5jcHAgKi87IH07CisJCUJDQTBF
RjlGMTIzMzI2NDIwMDdEM0NGQiAvKiBXZWJFZGl0Q29tbWFuZFByb3h5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EwRUY5RDEyMzMyNjQyMDA3RDND
RkIgLyogV2ViRWRpdENvbW1hbmRQcm94eS5oICovOyB9OworCQlCQ0EwRUZBMDEyMzMyNjQyMDA3
RDNDRkIgLyogV2ViRWRpdENvbW1hbmRQcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EwRUY5RTEyMzMyNjQyMDA3RDNDRkIgLyogV2ViRWRp
dENvbW1hbmRQcm94eS5jcHAgKi87IH07CiAJCUJDQThDNkE4MTFFM0JBNUYwMDgxMkZCNyAvKiBJ
bmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBOEM2QTYxMUUzQkE1RjAwODEyRkI3IC8qIEluamVj
dGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudC5jcHAgKi87IH07CiAJCUJDQThDNkE5MTFFM0JBNUYw
MDgxMkZCNyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDNkE3MTFFM0JBNUYwMDgxMkZC
NyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCAqLzsgfTsKIAkJQkNBOEM2QUYx
MUUzQzA4NzAwODEyRkI3IC8qIEluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQThDNkFEMTFFM0MwODcw
MDgxMkZCNyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5jcHAgKi87IH07CkBAIC02MTEs
NiArNjE1LDEwIEBACiAJCUJDOUU5NUQyMTE0NDlCMDMwMDg3MEU3MSAvKiBVcGRhdGVDaHVuay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVcGRhdGVDaHVuay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOUU5Njk5MTE0NTdFREUwMDg3MEU3MSAv
KiBEcmF3aW5nQXJlYVByb3h5TWVzc2FnZUtpbmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERyYXdpbmdBcmVhUHJveHlNZXNzYWdlS2luZHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkM5RTk2OUIxMTQ1N0YzRjAwODcwRTcxIC8qIERyYXdpbmdBcmVhTWVz
c2FnZUtpbmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYXdpbmdBcmVh
TWVzc2FnZUtpbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQTBFRjdEMTIz
MzFFNzgwMDdEM0NGQiAvKiBXZWJFZGl0Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJFZGl0Q29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlCQ0EwRUY3RTEyMzMxRTc4MDA3RDNDRkIgLyogV2ViRWRpdENvbW1hbmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRWRpdENvbW1hbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQ0EwRUY5RDEyMzMyNjQyMDA3RDNDRkIgLyogV2ViRWRp
dENvbW1hbmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFZGl0
Q29tbWFuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQTBFRjlFMTIz
MzI2NDIwMDdEM0NGQiAvKiBXZWJFZGl0Q29tbWFuZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkVkaXRDb21tYW5kUHJveHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0E4QzZBNjExRTNCQTVGMDA4MTJGQjcgLyogSW5qZWN0ZWRC
dW5kbGVQYWdlTG9hZGVyQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDQThDNkE3MTFFM0JBNUYwMDgxMkZCNyAvKiBJbmplY3RlZEJ1bmRs
ZVBhZ2VMb2FkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5q
ZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDQThDNkFEMTFFM0MwODcwMDgxMkZCNyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRs
ZVBhZ2VVSUNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDQ0LDYg
KzEwNTIsOCBAQAogCQkJCTBGNTI2NUIyMTFERDM3NjgwMDA2RDMzQyAvKiBMYXllckJhY2tlZERy
YXdpbmdBcmVhLmggKi8sCiAJCQkJQkM3MkI5RjgxMUU2NDc2QjAwMUVCNEVBIC8qIFdlYkJhY2tG
b3J3YXJkTGlzdFByb3h5LmNwcCAqLywKIAkJCQlCQzcyQjlGOTExRTY0NzZCMDAxRUI0RUEgLyog
V2ViQmFja0ZvcndhcmRMaXN0UHJveHkuaCAqLywKKwkJCQlCQ0EwRUY3RTEyMzMxRTc4MDA3RDND
RkIgLyogV2ViRWRpdENvbW1hbmQuY3BwICovLAorCQkJCUJDQTBFRjdEMTIzMzFFNzgwMDdEM0NG
QiAvKiBXZWJFZGl0Q29tbWFuZC5oICovLAogCQkJCUJDMTExQURDMTEyRjVCOTMwMDMzN0JBQiAv
KiBXZWJGcmFtZS5jcHAgKi8sCiAJCQkJQkMwMzJEODkxMEY0MzdBMDAwNThDMTVBIC8qIFdlYkZy
YW1lLmggKi8sCiAJCQkJQkM5NjNENkExMTNERDE5MjAwNTc0QkUyIC8qIFdlYlBhZ2UuY3BwICov
LApAQCAtMTA4MSw2ICsxMDkxLDggQEAKIAkJCQlCQ0RFMDU5QTExQ0RBOEFFMDBFNDFBRjEgLyog
V2ViQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmNwcCAqLywKIAkJCQlCQ0RFMDU5OTExQ0RB
OEFFMDBFNDFBRjEgLyogV2ViQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmggKi8sCiAJCQkJ
QkNCMEIwREIxMjMwNUEyNTAwQjEzNDFFIC8qIFdlYkNvbnRleHRVc2VyTWVzc2FnZUNvZGVycy5o
ICovLAorCQkJCUJDQTBFRjlFMTIzMzI2NDIwMDdEM0NGQiAvKiBXZWJFZGl0Q29tbWFuZFByb3h5
LmNwcCAqLywKKwkJCQlCQ0EwRUY5RDEyMzMyNjQyMDA3RDNDRkIgLyogV2ViRWRpdENvbW1hbmRQ
cm94eS5oICovLAogCQkJCUJDRTQ2OTRGMTIxNEU2Q0IwMDBCOThFQiAvKiBXZWJGb3JtQ2xpZW50
LmNwcCAqLywKIAkJCQlCQ0U0Njk1MDEyMTRFNkNCMDAwQjk4RUIgLyogV2ViRm9ybUNsaWVudC5o
ICovLAogCQkJCUJDRTQ2OTUxMTIxNEU2Q0IwMDBCOThFQiAvKiBXZWJGb3JtU3VibWlzc2lvbkxp
c3RlbmVyUHJveHkuY3BwICovLApAQCAtMTU5Niw2ICsxNjA4LDggQEAKIAkJCQlCQ0IwQjBEQzEy
MzA1QTI1MDBCMTM0MUUgLyogV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29kZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0IwQjBERTEyMzA1QThDMDBCMTM0MUUgLyogSW5qZWN0ZWRCdW5kbGVVc2Vy
TWVzc2FnZUNvZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMEIwRTAxMjMwNUFCMTAwQjEz
NDFFIC8qIFVzZXJNZXNzYWdlQ29kZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0EwRUY3RjEy
MzMxRTc4MDA3RDNDRkIgLyogV2ViRWRpdENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUJD
QTBFRjlGMTIzMzI2NDIwMDdEM0NGQiAvKiBXZWJFZGl0Q29tbWFuZFByb3h5LmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTE4MzIsNiArMTg0Niw4IEBACiAJCQkJQkNCMEFEMzMxMjJGMjg1ODAwQjEzNDFF
IC8qIE11dGFibGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0IwQUVFQTEyMkY1M0Uz
MDBCMTM0MUUgLyogTXV0YWJsZURpY3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNC
MEFGMzYxMjMwMURGQjAwQjEzNDFFIC8qIFdLTXV0YWJsZURpY3Rpb25hcnkuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQkNBMEVGODAxMjMzMUU3ODAwN0QzQ0ZCIC8qIFdlYkVkaXRDb21tYW5kLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUJDQTBFRkEwMTIzMzI2NDIwMDdEM0NGQiAvKiBXZWJFZGl0
Q29tbWFuZFByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9u
IDY2ODA3KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgIldl
YkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldl
YlBhZ2VQcm94eU1lc3NhZ2VLaW5kcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0VkaXRDb21tYW5kLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTElucHV0RWxlbWVudC5oPgpAQCAtMTk2LDE5ICsxOTgsMjgg
QEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmRpZFNldFNlbGVjdGlvblR5cAogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlckNvbW1hbmRGb3JV
bmRvKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lz
dGVyQ29tbWFuZEZvclVuZG8oUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY29tbWFuZCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEFkZCBhc3NlcnRpb24gdGhhdCBjb21tYW5kaW5n
IGJlaW5nIHJlYXBwbGllZCBpcyB0aGUgc2FtZSBjb21tYW5kIHRoYXQgaXMKKyAgICAvLyBiZWlu
ZyBwYXNzZWQgdG8gdXMuCisgICAgaWYgKG1fcGFnZS0+aXNJblJlZG8oKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUmVmUHRyPFdlYkVkaXRDb21tYW5kPiB3ZWJDb21tYW5kID0gV2ViRWRpdENv
bW1hbmQ6OmNyZWF0ZShjb21tYW5kKTsKKyAgICBtX3BhZ2UtPmFkZFdlYkVkaXRDb21tYW5kKHdl
YkNvbW1hbmQtPmNvbW1hbmRJRCgpLCB3ZWJDb21tYW5kLmdldCgpKTsKKworICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpSZWdp
c3RlckVkaXRDb21tYW5kRm9yVW5kbywgbV9wYWdlLT5wYWdlSUQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6SW4od2ViQ29tbWFuZC0+Y29t
bWFuZElEKCksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih3ZWJDb21tYW5kLT5jb21tYW5kKCktPmVk
aXRpbmdBY3Rpb24oKSkpKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyQ29t
bWFuZEZvclJlZG8oUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAvLyBJTlRFTlRJT05BTExZIExFRlQgTk9UIElNUExFTUVOVEVECiB9CiAKIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6Q2xlYXJBbGxFZGl0Q29tbWFuZHMsIG1fcGFnZS0+cGFn
ZUlEKCksIENvcmVJUEM6OkluKCkpOwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6Y2FuVW5k
bygpIGNvbnN0CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJFZGl0Q29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRWRpdENv
bW1hbmQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
RWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgIldlYkVkaXRDb21tYW5kLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitz
dGF0aWMgdWludDY0X3QgZ2VuZXJhdGVDb21tYW5kSUQoKQoreworICAgIHN0YXRpYyB1aW50NjRf
dCB1bmlxdWVDb21tYW5kSUQgPSAxOworICAgIHJldHVybiB1bmlxdWVDb21tYW5kSUQrKzsKK30K
KworV2ViRWRpdENvbW1hbmQ6OldlYkVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViQ29yZTo6RWRp
dENvbW1hbmQ+IGNvbW1hbmQpCisgICAgOiBtX2NvbW1hbmQoY29tbWFuZCkKKyAgICAsIG1fY29t
bWFuZElEKGdlbmVyYXRlQ29tbWFuZElEKCkpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRWRpdENvbW1hbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJFZGl0Q29tbWFuZC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRWRpdENvbW1hbmQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vi
RWRpdENvbW1hbmRfaAorI2RlZmluZSBXZWJFZGl0Q29tbWFuZF9oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0VkaXRDb21tYW5kLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJFZGl0Q29t
bWFuZCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkVkaXRDb21tYW5kPiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYkNv
cmU6OkVkaXRDb21tYW5kPiBjb21tYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJFZGl0Q29tbWFuZChjb21tYW5kKSk7CisgICAgfQorCisgICAgV2ViQ29yZTo6RWRp
dENvbW1hbmQqIGNvbW1hbmQoKSBjb25zdCB7IHJldHVybiBtX2NvbW1hbmQuZ2V0KCk7IH0KKyAg
ICB1aW50NjRfdCBjb21tYW5kSUQoKSBjb25zdCB7IHJldHVybiBtX2NvbW1hbmRJRDsgfQorCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IFdlYkVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViQ29yZTo6
RWRpdENvbW1hbmQ+KTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4gbV9jb21t
YW5kOworICAgIHVpbnQ2NF90IG1fY29tbWFuZElEOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBXZWJFZGl0Q29tbWFuZF9oCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNjY4MDcpCisrKyBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBQ
YXNzUmVmUHRyPFdlYlBhZ2U+IFdlYlBhZ2U6OmNyZWF0ZSh1aW50CiBXZWJQYWdlOjpXZWJQYWdl
KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnN0IFdlYlByZWZl
cmVuY2VzU3RvcmUmIHN0b3JlLCBjb25zdCBEcmF3aW5nQXJlYUJhc2U6OkRyYXdpbmdBcmVhSW5m
byYgZHJhd2luZ0FyZWFJbmZvKQogICAgIDogbV92aWV3U2l6ZSh2aWV3U2l6ZSkKICAgICAsIG1f
ZHJhd2luZ0FyZWEoRHJhd2luZ0FyZWE6OmNyZWF0ZShkcmF3aW5nQXJlYUluZm8udHlwZSwgZHJh
d2luZ0FyZWFJbmZvLmlkLCB0aGlzKSkKKyAgICAsIG1faXNJblJlZG8oZmFsc2UpCiAgICAgLCBt
X3BhZ2VJRChwYWdlSUQpCiB7CiAgICAgQVNTRVJUKG1fcGFnZUlEKTsKQEAgLTUzMyw2ICs1MzQs
NDYgQEAgYm9vbCBXZWJQYWdlOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudAogICAgIHJldHVy
biBmcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQoZXZ0LT5rZXlFdmVudCgpLT50ZXh0KCksIGV2
dCk7CiB9CiAKK1dlYkVkaXRDb21tYW5kKiBXZWJQYWdlOjp3ZWJFZGl0Q29tbWFuZCh1aW50NjRf
dCBjb21tYW5kSUQpCit7CisgICAgcmV0dXJuIG1fZWRpdENvbW1hbmRNYXAuZ2V0KGNvbW1hbmRJ
RCkuZ2V0KCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6YWRkV2ViRWRpdENvbW1hbmQodWludDY0X3Qg
Y29tbWFuZElELCBXZWJFZGl0Q29tbWFuZCogY29tbWFuZCkKK3sKKyAgICBtX2VkaXRDb21tYW5k
TWFwLnNldChjb21tYW5kSUQsIGNvbW1hbmQpOworfQorCit2b2lkIFdlYlBhZ2U6OnJlbW92ZVdl
YkVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCkKK3sKKyAgICBtX2VkaXRDb21tYW5kTWFw
LnJlbW92ZShjb21tYW5kSUQpOworfQorCit2b2lkIFdlYlBhZ2U6OnVuYXBwbHlFZGl0Q29tbWFu
ZCh1aW50NjRfdCBjb21tYW5kSUQpCit7CisgICAgV2ViRWRpdENvbW1hbmQqIGNvbW1hbmQgPSB3
ZWJFZGl0Q29tbWFuZChjb21tYW5kSUQpOworICAgIGlmICghY29tbWFuZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY29tbWFuZC0+Y29tbWFuZCgpLT51bmFwcGx5KCk7Cit9CisKK3ZvaWQgV2Vi
UGFnZTo6cmVhcHBseUVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCkKK3sKKyAgICBXZWJF
ZGl0Q29tbWFuZCogY29tbWFuZCA9IHdlYkVkaXRDb21tYW5kKGNvbW1hbmRJRCk7CisgICAgaWYg
KCFjb21tYW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzSW5SZWRvID0gdHJ1ZTsKKyAg
ICBjb21tYW5kLT5jb21tYW5kKCktPnJlYXBwbHkoKTsKKyAgICBtX2lzSW5SZWRvID0gZmFsc2U7
Cit9CisKK3ZvaWQgV2ViUGFnZTo6ZGlkUmVtb3ZlRWRpdENvbW1hbmQodWludDY0X3QgY29tbWFu
ZElEKQoreworICAgIHJlbW92ZVdlYkVkaXRDb21tYW5kKGNvbW1hbmRJRCk7Cit9CisKIHZvaWQg
V2ViUGFnZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlv
biwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVy
KiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xh
c3NEcmF3aW5nQXJlYT4oKSkgewpAQCAtNjkyLDYgKzczMywyNyBAQCB2b2lkIFdlYlBhZ2U6OmRp
ZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6CiAgICAgICAgICAgICBzZXRDdXN0b21Vc2VyQWdlbnQo
Y3VzdG9tVXNlckFnZW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAg
ICBjYXNlIFdlYlBhZ2VNZXNzYWdlOjpVbmFwcGx5RWRpdENvbW1hbmQ6IHsKKyAgICAgICAgICAg
IHVpbnQ2NF90IGNvbW1hbmRJRDsKKyAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUo
Q29yZUlQQzo6T3V0KGNvbW1hbmRJRCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHVuYXBwbHlFZGl0Q29tbWFuZChjb21tYW5kSUQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViUGFnZU1lc3NhZ2U6OlJlYXBwbHlFZGl0Q29t
bWFuZDogeworICAgICAgICAgICAgdWludDY0X3QgY29tbWFuZElEOworICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoY29tbWFuZElEKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmVhcHBseUVkaXRDb21tYW5kKGNvbW1hbmRJRCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJQYWdlTWVz
c2FnZTo6RGlkUmVtb3ZlRWRpdENvbW1hbmQ6IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGNvbW1h
bmRJRDsKKyAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGNv
bW1hbmRJRCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRpZFJlbW92
ZUVkaXRDb21tYW5kKGNvbW1hbmRJRCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
ICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDY2ODA3KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5oIgogI2luY2x1ZGUgIkluamVjdGVk
QnVuZGxlUGFnZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlUGFnZVVJ
Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRWRpdENvbW1hbmQuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lTG9hZGVyVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1pvb21Nb2RlLmg+CkBAIC05OCw2ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzaG93KCk7CiAgICAgU3RyaW5nIHVzZXJBZ2VudCgpIGNvbnN0OwogCisgICAgV2ViRWRp
dENvbW1hbmQqIHdlYkVkaXRDb21tYW5kKHVpbnQ2NF90KTsKKyAgICB2b2lkIGFkZFdlYkVkaXRD
b21tYW5kKHVpbnQ2NF90LCBXZWJFZGl0Q29tbWFuZCopOworICAgIHZvaWQgcmVtb3ZlV2ViRWRp
dENvbW1hbmQodWludDY0X3QpOworICAgIGJvb2wgaXNJblJlZG8oKSBjb25zdCB7IHJldHVybiBt
X2lzSW5SZWRvOyB9CisKICAgICAvLyAtLSBDYWxsZWQgZnJvbSBXZWJQcm9jZXNzLgogICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3Nh
Z2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAKQEAgLTE2Nyw2ICsxNzMsMTAgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbihXZWJGcmFtZSosIHVp
bnQ2NF90IGxpc3RlbmVySUQsIFdlYkNvcmU6OlBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24pOwog
ICAgIHZvaWQgc2V0Q3VzdG9tVXNlckFnZW50KGNvbnN0IFdURjo6U3RyaW5nJik7CiAKKyAgICB2
b2lkIHVuYXBwbHlFZGl0Q29tbWFuZCh1aW50NjRfdCBjb21tYW5kSUQpOworICAgIHZvaWQgcmVh
cHBseUVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCk7CisgICAgdm9pZCBkaWRSZW1vdmVF
ZGl0Q29tbWFuZCh1aW50NjRfdCBjb21tYW5kSUQpOworCiAgICAgT3duUHRyPFdlYkNvcmU6OlBh
Z2U+IG1fcGFnZTsKICAgICBSZWZQdHI8V2ViRnJhbWU+IG1fbWFpbkZyYW1lOwogCkBAIC0xNzUs
NiArMTg1LDkgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fdmlld1NpemU7CiAg
ICAgUmVmUHRyPERyYXdpbmdBcmVhPiBtX2RyYXdpbmdBcmVhOwogCisgICAgYm9vbCBtX2lzSW5S
ZWRvOworICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJFZGl0Q29tbWFuZD4gPiBtX2Vk
aXRDb21tYW5kTWFwOworCiAgICAgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50IG1fZWRp
dG9yQ2xpZW50OwogICAgIEluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQgbV9mb3JtQ2xpZW50
OwogICAgIEluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudCBtX2xvYWRlckNsaWVudDsKSW5k
ZXg6IFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvd2lu
L1dlYktpdDIudmNwcm9qCShyZXZpc2lvbiA2NjgwNykKKysrIFdlYktpdDIvd2luL1dlYktpdDIu
dmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02ODEsMzIgKzY4MSwzMiBAQAogCQkJCTwvRmlsZT4N
CiAJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViUHJvY2Vzc1xXZWJDb3JlU3Vw
cG9ydFxXZWJTZWFyY2hQb3B1cE1lbnUuaCINCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZp
bHRlcgotCQkJCQlOYW1lPSJ3aW4iCi0JCQkJCT4KLQkJCQkJPEZpbGUKLQkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cV2ViUHJvY2Vzc1xXZWJDb3JlU3VwcG9ydFx3aW5cV2ViRXJyb3JzV2luLmNwcCIK
LQkJCQkJCT4KLQkJCQkJPC9GaWxlPgotCQkJCQk8RmlsZQotCQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxXZWJQcm9jZXNzXFdlYkNvcmVTdXBwb3J0XHdpblxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
LmNwcCIKLQkJCQkJCT4KLQkJCQkJPC9GaWxlPgotCQkJCQk8RmlsZQotCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxXZWJQcm9jZXNzXFdlYkNvcmVTdXBwb3J0XHdpblxXZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0LmgiCi0JCQkJCQk+Ci0JCQkJCTwvRmlsZT4KLQkJCQk8L0ZpbHRlcj4KLQkJCTwvRmls
dGVyPgotCQkJPEZpbHRlcgotCQkJCU5hbWU9IldlYlBhZ2UiCi0JCQkJPgotCQkJCTxGaWxlCi0J
CQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViUHJvY2Vzc1xXZWJQYWdlXENodW5rZWRVcGRhdGVEcmF3
aW5nQXJlYS5jcHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+CisJCQkJCT4NCisJCQkJPC9GaWxlPg0K
KwkJCQk8RmlsdGVyDQorCQkJCQlOYW1lPSJ3aW4iDQorCQkJCQk+DQorCQkJCQk8RmlsZQ0KKwkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViUHJvY2Vzc1xXZWJDb3JlU3VwcG9ydFx3aW5cV2ViRXJy
b3JzV2luLmNwcCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cV2ViUHJvY2Vzc1xXZWJDb3JlU3VwcG9ydFx3aW5cV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZp
bGUNCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFdlYlByb2Nlc3NcV2ViQ29yZVN1cHBvcnRcd2lu
XFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCINCisJCQkJCQk+DQorCQkJCQk8L0ZpbGU+DQor
CQkJCTwvRmlsdGVyPg0KKwkJCTwvRmlsdGVyPg0KKwkJCTxGaWx0ZXINCisJCQkJTmFtZT0iV2Vi
UGFnZSINCisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxXZWJQcm9j
ZXNzXFdlYlBhZ2VcQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhLmNwcCINCisJCQkJCT4NCisJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxXZWJQcm9jZXNzXFdl
YlBhZ2VcQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhLmgiDQogCQkJCQk+DQpAQCAtNzI4LDYgKzcy
OCwxNCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cV2ViUHJvY2Vzc1xXZWJQYWdlXFdlYkVkaXRDb21tYW5kLmNwcCINCisJCQkJCT4N
CisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxXZWJQcm9j
ZXNzXFdlYlBhZ2VcV2ViRWRpdENvbW1hbmQuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJ
CQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxXZWJQcm9jZXNzXFdlYlBhZ2VcV2ViRnJh
bWUuY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAtMTEyMSwxMSArMTEyOSwxMSBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVBy
b2Nlc3NcV2ViRGF0YS5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xXZWJFZGl0
Q29tbWFuZFByb3h5LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xXZWJFcnJvci5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXFVJUHJvY2Vzc1xXZWJFZGl0Q29tbWFuZFByb3h5LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCg==
</data>
<flag name="review"
          id="55750"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>