<?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>174394</bug_id>
          
          <creation_ts>2017-07-11 15:15:14 -0700</creation_ts>
          <short_desc>Expose way to set values of classified form controls as {Legacy WebKit, WebKit} SPI</short_desc>
          <delta_ts>2019-11-21 12:03:59 -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>WebCore Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=204464</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Frederik Riedel">frederik.riedel</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>cpugh</cc>
    
    <cc>dbates</cc>
    
    <cc>ggaren</cc>
    
    <cc>rmondello</cc>
    
    <cc>rniwa</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1327769</commentid>
    <comment_count>0</comment_count>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-07-11 15:15:14 -0700</bug_when>
    <thetext>Expose way to set values of classified form controls as {Legacy WebKit, WebKit} SPI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327801</commentid>
    <comment_count>1</comment_count>
      <attachid>315179</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-07-11 15:51:55 -0700</bug_when>
    <thetext>Created attachment 315179
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327803</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-11 15:54:10 -0700</bug_when>
    <thetext>Attachment 315179 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/ios/WKContentView.mm:634:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit/mac/DOM/DOMHTMLInputElement.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 3 in 18 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>1327923</commentid>
    <comment_count>3</comment_count>
      <attachid>315179</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-07-11 22:52:05 -0700</bug_when>
    <thetext>Comment on attachment 315179
Patch

r- for reasons discussed in email</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327969</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-07-12 02:32:53 -0700</bug_when>
    <thetext>The content of attachment 315179 has been deleted for the following reason:

Accidental upload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328484</commentid>
    <comment_count>5</comment_count>
      <attachid>315354</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-07-13 10:48:17 -0700</bug_when>
    <thetext>Created attachment 315354
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328485</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-13 10:50:23 -0700</bug_when>
    <thetext>Attachment 315354 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/ios/WKContentView.mm:634:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit/mac/DOM/DOMHTMLInputElement.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 3 in 18 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>1330026</commentid>
    <comment_count>7</comment_count>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-07-18 11:10:52 -0700</bug_when>
    <thetext>I am not really sure about some comments of the style checker:

ERROR: Source/WebKit2/UIProcess/ios/WKContentView.mm:634:  This { should be at the end of the previous line  [whitespace/braces] [4]

Don&apos;t we put { in new lines in WebKit?
This is probably more about the missing space before (BOOL), right?
-(BOOL)acceptsAutofilledLoginCredentials


ERROR: Source/WebKit/mac/DOM/DOMHTMLInputElement.h:28:  Alphabetical sorting problem.  [build/include_order] [4]

Where do I need to put this import to make it alphabetically correctly? How are @class and import&lt;&gt; and import&quot;&quot; considered?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330046</commentid>
    <comment_count>8</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-07-18 11:57:32 -0700</bug_when>
    <thetext>(In reply to Frederik Riedel from comment #7)
&gt; I am not really sure about some comments of the style checker:
&gt; 
&gt; ERROR: Source/WebKit2/UIProcess/ios/WKContentView.mm:634:  This { should be
&gt; at the end of the previous line  [whitespace/braces] [4]
&gt; 
&gt; Don&apos;t we put { in new lines in WebKit?
&gt; This is probably more about the missing space before (BOOL), right?
&gt; -(BOOL)acceptsAutofilledLoginCredentials

That&apos;s probably right -- I check-webkit-style is just getting confused here.

&gt; 
&gt; 
&gt; ERROR: Source/WebKit/mac/DOM/DOMHTMLInputElement.h:28:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; 
&gt; Where do I need to put this import to make it alphabetically correctly? How
&gt; are @class and import&lt;&gt; and import&quot;&quot; considered?

This needs to be wrapped in a TARGET_OS_IPHONE anyways, I think if you do that the style queue won&apos;t complain about the ordering because platform specific headers go afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330368</commentid>
    <comment_count>9</comment_count>
      <attachid>315354</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-07-19 09:14:52 -0700</bug_when>
    <thetext>Comment on attachment 315354
Patch

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

&gt; Source/WebCore/ChangeLog:4
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=174394

If there&apos;s a radar associated with this bug, please also include it below this bugzilla link on its own line, in the form of &lt;rdar://problem/XXXXXXXX&gt; (you can see https://trac.webkit.org/r219594 for an example of what this should look like).

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests (OOPS!).

It might not be too difficult to write an API test or LayoutTest for this. (e.g. UIPasteboardTests, which exercise some editing codepaths in TestWebKitAPI, or if real keyboard focus is required, then something like LayoutTests/fast/events/ios/input-value-after-oninput.html).

&gt; Source/WebKit2/ChangeLog:34
&gt; +        (WebKit::WebPage::setUsername): Sets the username on the HTMLInputElement.

Would it be more accurate to say something like &quot;Sets the value of an input we&apos;ve classified as a username field that is associated to the currently focused node.&quot;?

&quot;Sets the username on the HTMLInputElement.&quot; alone doesn&apos;t really describe which HTMLInputElement this method is trying to modify.

&gt; Source/WebCore/html/HTMLInputElement.cpp:904
&gt; +    if (acceptsAutofilledLoginCredentials()) {

We generally prefer early returns first, so this should look like:

if (!acceptsAutofilledLoginCredentials())
    return;

m_passwordElement-&gt;setValue(password);
m_passwordElement-&gt;setAutoFilled();

&gt; Source/WebCore/html/HTMLInputElement.cpp:912
&gt; +    if (acceptsAutofilledLoginCredentials()) {

Ditto.

&gt; Source/WebCore/html/HTMLInputElement.cpp:918
&gt; +void HTMLInputElement::setPasswordElement(WebCore::HTMLInputElement *passwordElement)

You can drop the WebCore:: namespace prefix here, since we&apos;re already using namespace WebCore;

Also, the passwordElement here should be a RefPtr&lt;HTMLInputElement&gt; (WebKit&apos;s version of a ref counted pointer) instead of a raw pointer.

&gt; Source/WebCore/html/HTMLInputElement.cpp:923
&gt; +void HTMLInputElement::setUsernameElement(WebCore::HTMLInputElement *usernameElement)

Ditto.

&gt; Source/WebCore/html/HTMLInputElement.h:446
&gt; +    WebCore::HTMLInputElement *m_passwordElement;

If we&apos;re going to go with the &quot;remember my associated input element&quot; approach, these should be RefPtr&lt;HTMLInputElement&gt;s. we can also drop the WebCore::s here, since we&apos;re using namespace WebCore;

&gt; Source/WebCore/html/HTMLInputElement.h:447
&gt; +    WebCore::HTMLInputElement *m_usernameElement;

Ditto.

&gt; Source/WebCore/page/FocusController.cpp:801
&gt; +            // password field highlighted, now find a usernamefield

WebKit style guidelines (https://webkit.org/code-style-guidelines) recommend that comments should begin with a capital letter and end with a period, so this should be // Password field highlighted, now find a username field.

&gt; Source/WebCore/page/FocusController.cpp:806
&gt; +                    // we&apos;ve now got a password field and a username field

Ditto regarding comment style, though I don&apos;t think this comment adds much here anyways (since the code already implies that we have a password field and username field)

&gt; Source/WebCore/page/FocusController.cpp:807
&gt; +                    inputElement-&gt;setPasswordElement(inputElement);

Can we merge setPasswordElement and setUsernameElement into a single method, like setPasswordAndUsernameElements(passwordElement, usernameElement)? It doesn&apos;t look like there&apos;s ever a case where we want to set only one, but not the other.

Also, when do we clear out an input element&apos;s associated password and username fields? It would be good to make sure the web process doesn&apos;t crash in cases where two input elements become associated, but then (for instance) JavaScript removes one of them, and then autofill happens. I think changing the raw HTMLInputElement pointers to RefPtrs will help here, but we should probably disassociate the username and password HTMLInputElements from each other if one of them is removed from the DOM tree.

&gt; Source/WebKit/mac/DOM/DOMHTMLInputElement.h:36
&gt; +@interface DOMHTMLInputElement : DOMHTMLElement&lt;UITextInputTraits&gt;

You&apos;ll need to guard &lt;UITextInputTraits&gt; conformance with TARGET_OS_IPHONE, but it&apos;s probably cleaner to define conformance in a separate category in DOMPrivate.h...

&gt; Source/WebKit/mac/DOM/DOMHTMLInputElementPrivate.h:62
&gt; +

Looks like there&apos;s a stray newline here.

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:562
&gt; +    void setUsername(String);

I would make this take a const String&amp;. Even though the only call site needs to convert an NSString * to a String anyways, it&apos;s nice to be consistent with the other functions in WebPageProxy. And if we ever call setUsername or setPassword from within WebKit with a String, the compiler can be smarter about it.

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:563
&gt; +    void setPassword(String);

Ditto.

&gt; Source/WebKit2/UIProcess/ios/WKContentView.h:86
&gt; +- (void)setUsername:(NSString *)username;

I think these method names are too generic. It would be nicer to have something like setUsernameForAutofill: or maybe even autofillUsernameFieldIfPossible:, since we only have a setter and not a getter, and this call to autofill is also sort of &apos;best effort&apos; (it  isn&apos;t guaranteed to effect any change).

Since this is an implementation of a UIKit protocol method, we can&apos;t change this for WKContentView, but all the names in WebPageProxy and below (in WebCore) can all be named something less generic.

&gt; Source/WebKit2/UIProcess/ios/WKContentView.h:87
&gt; +- (void)setPassword:(NSString *)password;

Ditto.

&gt; Source/WebKit2/UIProcess/ios/WKContentView.mm:633
&gt; +-(BOOL)acceptsAutofilledLoginCredentials

We should add a space between - and ( here.

&gt; Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:906
&gt; +    m_acceptsAutofilledLoginCredentials = information.acceptsAutofilledLoginCredentials;

Should this be reset (set to false) in stopAssistingNode? Or is it okay that acceptsAutofilledLoginCredentials() can still return true even after the user loses focus? (even then, it would probably be nicer to ensure that this is reset for bookkeeping purposes :P)

&gt; Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm:932
&gt; +void WebPageProxy::setUsername(String username)

See earlier comment about renaming setUsername and setPassword for code internal to WebKit.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:2832
&gt; +        downcast&lt;HTMLInputElement&gt;(*m_assistedNode).setUsername(username);

Hm...instead of having the username and password fields store pointers to their associated fields, can we just compute the nextFocusableElement or previousFocusableElement on the fly when setting the username or password? I think this would make the code easier to follow (so we don&apos;t have to introduce more state to each input element which we have to then set and clean up in the right places), but has the con of an extra focusable element computation when actually setting the username or password. I don&apos;t think this is a bad tradeoff though, but it would be nice to get some more opinions about this.

Also, if we recompute the associated input elements here, then we don&apos;t have to worry about some corner cases, like the page changing a the type of an input element from a &apos;password&apos; to something else (like just a &apos;text&apos;) after we&apos;ve already classified it as a password input.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330395</commentid>
    <comment_count>10</comment_count>
      <attachid>315354</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-07-19 10:12:25 -0700</bug_when>
    <thetext>Comment on attachment 315354
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:4
&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=174394
&gt; 
&gt; If there&apos;s a radar associated with this bug, please also include it below this bugzilla link on its own line, in the form of &lt;rdar://problem/XXXXXXXX&gt; (you can see https://trac.webkit.org/r219594 for an example of what this should look like).

That&apos;s &lt;rdar://problem/31159986&gt;

&gt;&gt; Source/WebKit2/ChangeLog:34
&gt;&gt; +        (WebKit::WebPage::setUsername): Sets the username on the HTMLInputElement.
&gt; 
&gt; Would it be more accurate to say something like &quot;Sets the value of an input we&apos;ve classified as a username field that is associated to the currently focused node.&quot;?
&gt; 
&gt; &quot;Sets the username on the HTMLInputElement.&quot; alone doesn&apos;t really describe which HTMLInputElement this method is trying to modify.

Yeah, that&apos;s a good point!

&gt;&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:2832
&gt;&gt; +        downcast&lt;HTMLInputElement&gt;(*m_assistedNode).setUsername(username);
&gt; 
&gt; Hm...instead of having the username and password fields store pointers to their associated fields, can we just compute the nextFocusableElement or previousFocusableElement on the fly when setting the username or password? I think this would make the code easier to follow (so we don&apos;t have to introduce more state to each input element which we have to then set and clean up in the right places), but has the con of an extra focusable element computation when actually setting the username or password. I don&apos;t think this is a bad tradeoff though, but it would be nice to get some more opinions about this.
&gt; 
&gt; Also, if we recompute the associated input elements here, then we don&apos;t have to worry about some corner cases, like the page changing a the type of an input element from a &apos;password&apos; to something else (like just a &apos;text&apos;) after we&apos;ve already classified it as a password input.

How can I compute these fields here? Right now I am using FocusController&apos;s method previousFocusableElement(*element); for this. Can I access this from here as well, or is there a different way to do it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330396</commentid>
    <comment_count>11</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-07-19 10:14:05 -0700</bug_when>
    <thetext>(In reply to Frederik Riedel from comment #10)
&gt; Comment on attachment 315354 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=315354&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:4
&gt; &gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=174394
&gt; &gt; 
&gt; &gt; If there&apos;s a radar associated with this bug, please also include it below this bugzilla link on its own line, in the form of &lt;rdar://problem/XXXXXXXX&gt; (you can see https://trac.webkit.org/r219594 for an example of what this should look like).
&gt; 
&gt; That&apos;s &lt;rdar://problem/31159986&gt;
&gt; 
&gt; &gt;&gt; Source/WebKit2/ChangeLog:34
&gt; &gt;&gt; +        (WebKit::WebPage::setUsername): Sets the username on the HTMLInputElement.
&gt; &gt; 
&gt; &gt; Would it be more accurate to say something like &quot;Sets the value of an input we&apos;ve classified as a username field that is associated to the currently focused node.&quot;?
&gt; &gt; 
&gt; &gt; &quot;Sets the username on the HTMLInputElement.&quot; alone doesn&apos;t really describe which HTMLInputElement this method is trying to modify.
&gt; 
&gt; Yeah, that&apos;s a good point!
&gt; 
&gt; &gt;&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:2832
&gt; &gt;&gt; +        downcast&lt;HTMLInputElement&gt;(*m_assistedNode).setUsername(username);
&gt; &gt; 
&gt; &gt; Hm...instead of having the username and password fields store pointers to their associated fields, can we just compute the nextFocusableElement or previousFocusableElement on the fly when setting the username or password? I think this would make the code easier to follow (so we don&apos;t have to introduce more state to each input element which we have to then set and clean up in the right places), but has the con of an extra focusable element computation when actually setting the username or password. I don&apos;t think this is a bad tradeoff though, but it would be nice to get some more opinions about this.
&gt; &gt; 
&gt; &gt; Also, if we recompute the associated input elements here, then we don&apos;t have to worry about some corner cases, like the page changing a the type of an input element from a &apos;password&apos; to something else (like just a &apos;text&apos;) after we&apos;ve already classified it as a password input.
&gt; 
&gt; How can I compute these fields here? Right now I am using FocusController&apos;s
&gt; method previousFocusableElement(*element); for this. Can I access this from
&gt; here as well, or is there a different way to do it?

Yes, I was just thinking of computing previousFocusableElement or nextFocusableElement again here. Maybe thorton has a better idea though :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331717</commentid>
    <comment_count>12</comment_count>
      <attachid>316313</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-07-24 13:27:37 -0700</bug_when>
    <thetext>Created attachment 316313
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334383</commentid>
    <comment_count>13</comment_count>
      <attachid>316993</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-08-02 14:15:34 -0700</bug_when>
    <thetext>Created attachment 316993
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334396</commentid>
    <comment_count>14</comment_count>
      <attachid>316993</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-08-02 14:42:30 -0700</bug_when>
    <thetext>Comment on attachment 316993
Patch

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

&gt; Source/WebCore/ChangeLog:3022
&gt; +2017-07-24  Frederik Riedel  &lt;friedel@apple.com&gt;

You should remove the previous ChangeLog entry here.

&gt; Source/WebKit/ChangeLog:1613
&gt; +2017-07-24  Frederik Riedel  &lt;friedel@apple.com&gt;

Ditto.

&gt; Source/WebKitLegacy/mac/ChangeLog:105
&gt; +2017-07-24  Frederik Riedel  &lt;friedel@apple.com&gt;

Ditto.

&gt; Source/WebCore/dom/Document.cpp:6897
&gt; +Element* Document::nextFocusableElement(Element&amp; element)

The return type here should be a RefPtr&lt;Element&gt;. TBH, FocusController should probably not return a raw pointer either, but that is something we should address separately (additionally, I don&apos;t see why it&apos;s an Element&amp; instead of a const Element&amp;, but that&apos;s also a separate issue).

&gt; Source/WebCore/dom/Document.cpp:6899
&gt; +    return page()-&gt;focusController().nextFocusableElement(element);

Perhaps we should add a null check here too -- it looks like the frame may not necessarily exist, and so page() is not necessarily non-null. Something like:

if (auto* page = this-&gt;page())
    return page-&gt;focusController().nextFocusableElement(element);
return nullptr;

&gt; Source/WebCore/dom/Document.cpp:6902
&gt; +Element* Document::previousFocusableElement(Element&amp; element)

Ditto with the RefPtr&lt;Element&gt;

&gt; Source/WebCore/dom/Document.cpp:6904
&gt; +    return page()-&gt;focusController().previousFocusableElement(element);

Ditto with the null check.

&gt; Source/WebCore/html/HTMLInputElement.cpp:921
&gt; +bool HTMLInputElement::computeUsernameAndPasswordElements(Element *start, HTMLInputElement*&amp; usernameElement, HTMLInputElement*&amp; passwordElement)

Instead of raw pointer references as arguments, I think taking a RefPtr&lt;HTMLInputElement&gt;&amp; or std::optional&lt;HTMLInputElement&gt;&amp; would be better.

&gt; Source/WebCore/html/HTMLInputElement.cpp:924
&gt; +        HTMLInputElement* inputElement = downcast&lt;HTMLInputElement&gt;(start);

In WebKit, we use auto in most places when explicitly specifying the type is redundant (as in this case). Something like:

auto&amp; inputElement = downcast&lt;HTMLInputElement&gt;(*start);

...would be better. (we also know that the input element definitely exists here too, since is&lt;HTMLInputElement&gt;(start) would have been false otherwise).

&gt; Source/WebCore/html/HTMLInputElement.cpp:928
&gt; +            if (previousElement &amp;&amp; is&lt;HTMLInputElement&gt;(previousElement)) {

The previousElement null check here isn&apos;t needed, since is&lt;HTMLInputElement&gt;(previousElement) will return false anyways if previousElement is null.

&gt; Source/WebCore/html/HTMLInputElement.cpp:939
&gt; +            if (nextElement &amp;&amp; is&lt;HTMLInputElement&gt;(nextElement)) {

Ditto with the null check.

&gt; Source/WebCore/html/HTMLInputElement.cpp:949
&gt; +    return false;

Let&apos;s also set usernameElement and passwordElement to nullptr here before returning false, to ensure that they are null if username/password element computation failed.

&gt; Source/WebCore/html/HTMLInputElement.h:77
&gt; +    WEBCORE_EXPORT URL representingPageUrl();

Could we instead ask the Document directly for the page url instead of adding a new HTMLInputElement method to do this? It seems a bit odd to specifically teach the HTMLInputElement about the document URL.

&gt; Source/WebKit/Platform/spi/ios/UIKitSPI.h:46
&gt; +#import &lt;UIKit/UIKeyboardLoginCredentialsSuggestion.h&gt;

If this is a new header, this will need to be ifdef&apos;ed out for this to compile on older iOSes.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2764
&gt; +        information.representingPageUrl = element.representingPageUrl();

I think it would be better to ask the Page or Document directly here, instead of going through the HTMLInputElement.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2830
&gt; +void WebPage::autofillLoginCredentials(String username, String password)

Let&apos;s change this to take const String&amp;s here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334403</commentid>
    <comment_count>15</comment_count>
      <attachid>316993</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-08-02 14:47:54 -0700</bug_when>
    <thetext>Comment on attachment 316993
Patch

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

&gt; Source/WebCore/html/HTMLInputElement.cpp:922
&gt; +{

Also, it looks like the only state on the HTMLInputElement that we use in this method is this-&gt;document(), so it&apos;s a bit strange to make this a method on HTMLInputElement. Perhaps this should be a static helper function in HTMLInputElement that takes a const Document&amp;, or even a helper method on Document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334426</commentid>
    <comment_count>16</comment_count>
      <attachid>316993</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-08-02 15:12:44 -0700</bug_when>
    <thetext>Comment on attachment 316993
Patch

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

&gt;&gt; Source/WebCore/html/HTMLInputElement.h:77
&gt;&gt; +    WEBCORE_EXPORT URL representingPageUrl();
&gt; 
&gt; Could we instead ask the Document directly for the page url instead of adding a new HTMLInputElement method to do this? It seems a bit odd to specifically teach the HTMLInputElement about the document URL.

Yeah, that makes sense to access the Document directly. I added this variable here to able to access it from DOMHTMLInputElement. I could not figure out how to access the document/page from there directly.

&gt;&gt; Source/WebKit/Platform/spi/ios/UIKitSPI.h:46
&gt;&gt; +#import &lt;UIKit/UIKeyboardLoginCredentialsSuggestion.h&gt;
&gt; 
&gt; If this is a new header, this will need to be ifdef&apos;ed out for this to compile on older iOSes.

Is this DYLD_IOS_VERSION_11_0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334473</commentid>
    <comment_count>17</comment_count>
      <attachid>316993</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-08-02 16:08:24 -0700</bug_when>
    <thetext>Comment on attachment 316993
Patch

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

&gt;&gt;&gt; Source/WebCore/html/HTMLInputElement.h:77
&gt;&gt;&gt; +    WEBCORE_EXPORT URL representingPageUrl();
&gt;&gt; 
&gt;&gt; Could we instead ask the Document directly for the page url instead of adding a new HTMLInputElement method to do this? It seems a bit odd to specifically teach the HTMLInputElement about the document URL.
&gt; 
&gt; Yeah, that makes sense to access the Document directly. I added this variable here to able to access it from DOMHTMLInputElement. I could not figure out how to access the document/page from there directly.

I believe DOMHTMLInputElement has an ownerDocument property, which has an URL property. This calls into Document::urlForBindings()

&gt;&gt;&gt; Source/WebKit/Platform/spi/ios/UIKitSPI.h:46
&gt;&gt;&gt; +#import &lt;UIKit/UIKeyboardLoginCredentialsSuggestion.h&gt;
&gt;&gt; 
&gt;&gt; If this is a new header, this will need to be ifdef&apos;ed out for this to compile on older iOSes.
&gt; 
&gt; Is this DYLD_IOS_VERSION_11_0?

Assuming this is in iOS 11, __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 110000 is what you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337641</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-10 15:39:59 -0700</bug_when>
    <thetext>&lt;rdar://problem/33837481&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337651</commentid>
    <comment_count>19</comment_count>
      <attachid>316993</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-10 15:52:51 -0700</bug_when>
    <thetext>Comment on attachment 316993
Patch

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

r- given Wenson&apos;s comments and the fact EWS bots are all red.
I really don&apos;t think the code that assumes the username &amp; password text fields are the immediately successive focusable element belongs in WebKit.

&gt; Source/WebCore/html/HTMLInputElement.cpp:919
&gt; +URL HTMLInputElement::representingPageUrl()
&gt; +{
&gt; +    return document().url();
&gt; +}

We should just access input element&apos;s document() and then its url() in WebKit layer instead of WebCore.

&gt; Source/WebCore/html/HTMLInputElement.cpp:927
&gt; +            Element* previousElement = document().previousFocusableElement(*start);

I don&apos;t think we should assume that the username and password text fields are next to each other after start element.
Safari should just figure out which element is for username &amp; which one is for password and call [inputElement setValue] instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337941</commentid>
    <comment_count>20</comment_count>
      <attachid>316993</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-08-11 11:21:38 -0700</bug_when>
    <thetext>Comment on attachment 316993
Patch

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

&gt; Source/WebCore/html/HTMLInputElement.cpp:909
&gt; +        usernameElement-&gt;setValue(username);

We should use setValueForUser(username) instead. This simulates user input instead of just setting the value.

&gt; Source/WebCore/html/HTMLInputElement.cpp:911
&gt; +        passwordElement-&gt;setValue(password);

Ditto for setValueForUser(password).

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:927
&gt;&gt; +            Element* previousElement = document().previousFocusableElement(*start);
&gt; 
&gt; I don&apos;t think we should assume that the username and password text fields are next to each other after start element.
&gt; Safari should just figure out which element is for username &amp; which one is for password and call [inputElement setValue] instead.

Isn&apos;t the previousFocusableElement/nextFocusableElement the same API that we use for the little blue arrow keys on top of iOS&apos;s keyboard? In this case I would expect that it works for most login forms (simulate pressing &quot;tab&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339886</commentid>
    <comment_count>21</comment_count>
      <attachid>316993</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-08-17 18:19:02 -0700</bug_when>
    <thetext>Comment on attachment 316993
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:3022
&gt;&gt; +2017-07-24  Frederik Riedel  &lt;friedel@apple.com&gt;
&gt; 
&gt; You should remove the previous ChangeLog entry here.

Done.

&gt;&gt; Source/WebKit/ChangeLog:1613
&gt;&gt; +2017-07-24  Frederik Riedel  &lt;friedel@apple.com&gt;
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebKitLegacy/mac/ChangeLog:105
&gt;&gt; +2017-07-24  Frederik Riedel  &lt;friedel@apple.com&gt;
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/dom/Document.cpp:6897
&gt;&gt; +Element* Document::nextFocusableElement(Element&amp; element)
&gt; 
&gt; The return type here should be a RefPtr&lt;Element&gt;. TBH, FocusController should probably not return a raw pointer either, but that is something we should address separately (additionally, I don&apos;t see why it&apos;s an Element&amp; instead of a const Element&amp;, but that&apos;s also a separate issue).

Done.

&gt;&gt; Source/WebCore/dom/Document.cpp:6899
&gt;&gt; +    return page()-&gt;focusController().nextFocusableElement(element);
&gt; 
&gt; Perhaps we should add a null check here too -- it looks like the frame may not necessarily exist, and so page() is not necessarily non-null. Something like:
&gt; 
&gt; if (auto* page = this-&gt;page())
&gt;     return page-&gt;focusController().nextFocusableElement(element);
&gt; return nullptr;

Done.

&gt;&gt; Source/WebCore/dom/Document.cpp:6902
&gt;&gt; +Element* Document::previousFocusableElement(Element&amp; element)
&gt; 
&gt; Ditto with the RefPtr&lt;Element&gt;

Removed method in latest patch.

&gt;&gt; Source/WebCore/dom/Document.cpp:6904
&gt;&gt; +    return page()-&gt;focusController().previousFocusableElement(element);
&gt; 
&gt; Ditto with the null check.

Removed method in latest patch.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:909
&gt;&gt; +        usernameElement-&gt;setValue(username);
&gt; 
&gt; We should use setValueForUser(username) instead. This simulates user input instead of just setting the value.

Done.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:911
&gt;&gt; +        passwordElement-&gt;setValue(password);
&gt; 
&gt; Ditto for setValueForUser(password).

Done.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:919
&gt;&gt; +}
&gt; 
&gt; We should just access input element&apos;s document() and then its url() in WebKit layer instead of WebCore.

This is a good idea. I was able to get the url in WebKitLegacy using self.ownerDocument.URL. Do you know how I can something similar from WKContentView (this is the object I receive as the first responder for WebKit2)?

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:921
&gt;&gt; +bool HTMLInputElement::computeUsernameAndPasswordElements(Element *start, HTMLInputElement*&amp; usernameElement, HTMLInputElement*&amp; passwordElement)
&gt; 
&gt; Instead of raw pointer references as arguments, I think taking a RefPtr&lt;HTMLInputElement&gt;&amp; or std::optional&lt;HTMLInputElement&gt;&amp; would be better.

Done.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:922
&gt;&gt; +{
&gt; 
&gt; Also, it looks like the only state on the HTMLInputElement that we use in this method is this-&gt;document(), so it&apos;s a bit strange to make this a method on HTMLInputElement. Perhaps this should be a static helper function in HTMLInputElement that takes a const Document&amp;, or even a helper method on Document.

Is now static, done.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:924
&gt;&gt; +        HTMLInputElement* inputElement = downcast&lt;HTMLInputElement&gt;(start);
&gt; 
&gt; In WebKit, we use auto in most places when explicitly specifying the type is redundant (as in this case). Something like:
&gt; 
&gt; auto&amp; inputElement = downcast&lt;HTMLInputElement&gt;(*start);
&gt; 
&gt; ...would be better. (we also know that the input element definitely exists here too, since is&lt;HTMLInputElement&gt;(start) would have been false otherwise).

I am now using RefPtr&lt;HTMLInputElement&gt; inputElement = &amp;downcast&lt;HTMLInputElement&gt;(*start);
Can I still use auto for that?

&gt;&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:927
&gt;&gt;&gt; +            Element* previousElement = document().previousFocusableElement(*start);
&gt;&gt; 
&gt;&gt; I don&apos;t think we should assume that the username and password text fields are next to each other after start element.
&gt;&gt; Safari should just figure out which element is for username &amp; which one is for password and call [inputElement setValue] instead.
&gt; 
&gt; Isn&apos;t the previousFocusableElement/nextFocusableElement the same API that we use for the little blue arrow keys on top of iOS&apos;s keyboard? In this case I would expect that it works for most login forms (simulate pressing &quot;tab&quot;).

I am now using nextAssistableElement which is indeed the method that simulates the tab press that we use for the blue up/down arrows in iOS.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:928
&gt;&gt; +            if (previousElement &amp;&amp; is&lt;HTMLInputElement&gt;(previousElement)) {
&gt; 
&gt; The previousElement null check here isn&apos;t needed, since is&lt;HTMLInputElement&gt;(previousElement) will return false anyways if previousElement is null.

Done.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:939
&gt;&gt; +            if (nextElement &amp;&amp; is&lt;HTMLInputElement&gt;(nextElement)) {
&gt; 
&gt; Ditto with the null check.

Done.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:949
&gt;&gt; +    return false;
&gt; 
&gt; Let&apos;s also set usernameElement and passwordElement to nullptr here before returning false, to ensure that they are null if username/password element computation failed.

Done.

&gt;&gt;&gt;&gt; Source/WebKit/Platform/spi/ios/UIKitSPI.h:46
&gt;&gt;&gt;&gt; +#import &lt;UIKit/UIKeyboardLoginCredentialsSuggestion.h&gt;
&gt;&gt;&gt; 
&gt;&gt;&gt; If this is a new header, this will need to be ifdef&apos;ed out for this to compile on older iOSes.
&gt;&gt; 
&gt;&gt; Is this DYLD_IOS_VERSION_11_0?
&gt; 
&gt; Assuming this is in iOS 11, __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 110000 is what you want.

I assume that #if __has_include(&lt;UIKit/UIKeyboardLoginCredentialsSuggestion.h&gt;) is even better for that?

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2764
&gt;&gt; +        information.representingPageUrl = element.representingPageUrl();
&gt; 
&gt; I think it would be better to ask the Page or Document directly here, instead of going through the HTMLInputElement.

Do you know how I can get the URL at this point from the m_page? I couldn&apos;t figure that out in the current patch.
This would also fix Ryosuke&apos;s comment.

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2830
&gt;&gt; +void WebPage::autofillLoginCredentials(String username, String password)
&gt; 
&gt; Let&apos;s change this to take const String&amp;s here.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339887</commentid>
    <comment_count>22</comment_count>
      <attachid>318452</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-08-17 18:19:12 -0700</bug_when>
    <thetext>Created attachment 318452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339888</commentid>
    <comment_count>23</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-17 18:20:54 -0700</bug_when>
    <thetext>Attachment 318452 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLInputElement.cpp:899:  &apos;usernameElement&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedNullptr&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/html/HTMLInputElement.cpp:900:  &apos;passwordElement&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedNullptr&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/html/HTMLInputElement.cpp:911:  &apos;usernameElement&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedNullptr&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/html/HTMLInputElement.cpp:912:  &apos;passwordElement&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedNullptr&apos;.  [readability/naming/protected] [4]
Total errors found: 4 in 21 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>1339931</commentid>
    <comment_count>24</comment_count>
      <attachid>318452</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-17 20:37:10 -0700</bug_when>
    <thetext>Comment on attachment 318452
Patch

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

r- due to various issues. Please make sure this patch builds for iOS 10 as well as Mac.

&gt; Source/WebCore/html/HTMLInputElement.cpp:903
&gt; +bool HTMLInputElement::acceptsAutofilledLoginCredentials()
&gt; +{
&gt; +    RefPtr&lt;HTMLInputElement&gt; usernameElement = nullptr;
&gt; +    RefPtr&lt;HTMLInputElement&gt; passwordElement = nullptr;
&gt; +    return computeUsernameAndPasswordElements(this, usernameElement, passwordElement, this-&gt;document());
&gt; +}
&gt; +

I don&apos;t think we need to add this method to HTMLInputElement.
Whoever calls this function can just check the return value instead.

&gt; Source/WebCore/html/HTMLInputElement.cpp:907
&gt; +bool HTMLInputElement::isAssistableElement()
&gt; +{
&gt; +    return isTextField() || isDateField() || isDateTimeLocalField() || isMonthField() || isTimeField();
&gt; +}

Given assisted node has a very specific meaning on iOS, I don&apos;t think we should event new terminology like &quot;assitable element&quot;.
Now, how does filling date time field with username help at all?

I&apos;d suggest supportsAutofill or something. But I don&apos;t think there&apos;s any reason this needs to be a method of HTMLInputElement.
It&apos;s a lot better for this function be just a static local function which takes HTMLInputElement as an argument.

I don&apos;t think we should be checking that. If anything we should be checking for isTextField() || isEmailField().

&gt; Source/WebCore/html/HTMLInputElement.cpp:925
&gt; +bool HTMLInputElement::computeUsernameAndPasswordElements(Element *start, RefPtr&lt;HTMLInputElement&gt;&amp; usernameElement, RefPtr&lt;HTMLInputElement&gt;&amp; passwordElement, const Document&amp; document)

Instead of taking two out arguments. We should just create a struct, e.g. AutofillElements, which contains two Ref: username &amp; password
and then return std::optional&lt;AutofillElements&gt;.

Also why does this code needs to take Document in addition to the starting element?
That doesn&apos;t make much sense since you can get the document out of the element by start-&gt;document().

Finally, start should be Ref&lt;Element&gt;&amp;&amp; instead of Element*.
Also, in C++ code, you must put * immediately after Element without a space as in: Element* start.
See https://webkit.org/code-style-guidelines/#pointers-and-references

&gt; Source/WebCore/html/HTMLInputElement.cpp:927
&gt; +    // Normal Login Workflow

I don&apos;t think this comment gives any context as to why this code exist or why it&apos;s organized the way it is.
This is really a *what* comment, and we don&apos;t add those in WebKit.
Please remove it.

&gt; Source/WebCore/html/HTMLInputElement.cpp:931
&gt; +            // Password element highlighted, now find a username element.

&quot;highlight&quot; has a very specific meaning in autofill / input element context.
Again, this is a *what* comment. Please remove.

&gt; Source/WebCore/html/HTMLInputElement.cpp:942
&gt; +            // Username element highlighted, now find a password element.

Ditto.

&gt; Source/WebCore/html/HTMLInputElement.cpp:955
&gt; +    // Two-Step Login, Single Password Field on Page

Ditto.

&gt; Source/WebCore/html/HTMLInputElement.h:79
&gt; +    WEBCORE_EXPORT bool acceptsAutofilledLoginCredentials();
&gt; +    WEBCORE_EXPORT void autofillLoginCredentials(String, String);
&gt; +    WEBCORE_EXPORT bool isAssistableElement();
&gt; +    static bool computeUsernameAndPasswordElements(Element *, RefPtr&lt;HTMLInputElement&gt;&amp;, RefPtr&lt;HTMLInputElement&gt;&amp;, const Document&amp;);

As I said in the person, we shouldn&apos;t be adding all these functions to HTMLInputElement.

&gt; Source/WebCore/page/FocusController.cpp:93
&gt; +    if (is&lt;HTMLSelectElement&gt;(node))
&gt; +        return true;
&gt; +    if (is&lt;HTMLTextAreaElement&gt;(node))
&gt; +        return true;

Why specifically select * textarea? Are we looking for any form control element?
This is exactly the kind of case where a single line comment as to why we consider these elements as &quot;assistable&quot; is useful.
Again, I don&apos;t think we should be using that terminology.

&gt; Source/WebCore/page/FocusController.cpp:666
&gt; +        nextElement = isForward
&gt; +        ? nextFocusableElement(*nextElement)
&gt; +        : previousFocusableElement(*nextElement);

Nit: please put this into a single line.

&gt; Source/WebCore/page/FocusController.h:81
&gt; +    WEBCORE_EXPORT Element* nextAssistableElement(Node*, bool);
&gt; +    WEBCORE_EXPORT bool hasNextAssistableElement(Node*, bool);
&gt; +

This code doesn&apos;t really belong to the focus controller. FocusController controls focus. It&apos;s a place to put code that does autofill.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340251</commentid>
    <comment_count>25</comment_count>
      <attachid>318452</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-08-18 14:59:36 -0700</bug_when>
    <thetext>Comment on attachment 318452
Patch

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

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:903
&gt;&gt; +
&gt; 
&gt; I don&apos;t think we need to add this method to HTMLInputElement.
&gt; Whoever calls this function can just check the return value instead.

So this means that we expose the computeUsernameAndPasswordElements method and call it directly from outside instead of wrapping it into acceptsAutofilledLoginCredentials?

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:907
&gt;&gt; +}
&gt; 
&gt; Given assisted node has a very specific meaning on iOS, I don&apos;t think we should event new terminology like &quot;assitable element&quot;.
&gt; Now, how does filling date time field with username help at all?
&gt; 
&gt; I&apos;d suggest supportsAutofill or something. But I don&apos;t think there&apos;s any reason this needs to be a method of HTMLInputElement.
&gt; It&apos;s a lot better for this function be just a static local function which takes HTMLInputElement as an argument.
&gt; 
&gt; I don&apos;t think we should be checking that. If anything we should be checking for isTextField() || isEmailField().

I implemented this because there was a comment in WebPageIOS about this:
        // FIXME: This laundry list of types is not a good way to factor this. Need a suitable function on HTMLInputElement itself.
Wouldn&apos;t the method that I implemented be a suitable function for this?

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:925
&gt;&gt; +bool HTMLInputElement::computeUsernameAndPasswordElements(Element *start, RefPtr&lt;HTMLInputElement&gt;&amp; usernameElement, RefPtr&lt;HTMLInputElement&gt;&amp; passwordElement, const Document&amp; document)
&gt; 
&gt; Instead of taking two out arguments. We should just create a struct, e.g. AutofillElements, which contains two Ref: username &amp; password
&gt; and then return std::optional&lt;AutofillElements&gt;.
&gt; 
&gt; Also why does this code needs to take Document in addition to the starting element?
&gt; That doesn&apos;t make much sense since you can get the document out of the element by start-&gt;document().
&gt; 
&gt; Finally, start should be Ref&lt;Element&gt;&amp;&amp; instead of Element*.
&gt; Also, in C++ code, you must put * immediately after Element without a space as in: Element* start.
&gt; See https://webkit.org/code-style-guidelines/#pointers-and-references

That makes sense. Done.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:927
&gt;&gt; +    // Normal Login Workflow
&gt; 
&gt; I don&apos;t think this comment gives any context as to why this code exist or why it&apos;s organized the way it is.
&gt; This is really a *what* comment, and we don&apos;t add those in WebKit.
&gt; Please remove it.

Removed.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:931
&gt;&gt; +            // Password element highlighted, now find a username element.
&gt; 
&gt; &quot;highlight&quot; has a very specific meaning in autofill / input element context.
&gt; Again, this is a *what* comment. Please remove.

Removed.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:942
&gt;&gt; +            // Username element highlighted, now find a password element.
&gt; 
&gt; Ditto.

Removed.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:955
&gt;&gt; +    // Two-Step Login, Single Password Field on Page
&gt; 
&gt; Ditto.

Removed.

&gt;&gt; Source/WebCore/html/HTMLInputElement.h:79
&gt;&gt; +    static bool computeUsernameAndPasswordElements(Element *, RefPtr&lt;HTMLInputElement&gt;&amp;, RefPtr&lt;HTMLInputElement&gt;&amp;, const Document&amp;);
&gt; 
&gt; As I said in the person, we shouldn&apos;t be adding all these functions to HTMLInputElement.

If we expose the computeUsernameAndPasswordElements with WEBCORE_EXPORT, we can remove acceptsAutofilledLoginCredentials.
Then we also don&apos;t need autofillLoginCredentials because we can call it on the HTMLInputElements directly that we get back from the new AutofillElements struct.
Does that sound reasonable to you?
We could also move the static function somewhere else. Any ideas for that?

&gt;&gt; Source/WebCore/page/FocusController.cpp:93
&gt;&gt; +        return true;
&gt; 
&gt; Why specifically select * textarea? Are we looking for any form control element?
&gt; This is exactly the kind of case where a single line comment as to why we consider these elements as &quot;assistable&quot; is useful.
&gt; Again, I don&apos;t think we should be using that terminology.

This is not a specific function for the autofill feature, but supports the nextAssistableElement function that I moved from WebKit2 to WebCore.

&gt;&gt; Source/WebCore/page/FocusController.cpp:666
&gt;&gt; +        : previousFocusableElement(*nextElement);
&gt; 
&gt; Nit: please put this into a single line.

Done.

&gt;&gt; Source/WebCore/page/FocusController.h:81
&gt;&gt; +
&gt; 
&gt; This code doesn&apos;t really belong to the focus controller. FocusController controls focus. It&apos;s a place to put code that does autofill.

So what place would you suggest for this?
A new `AssistableController`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340261</commentid>
    <comment_count>26</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-18 15:10:18 -0700</bug_when>
    <thetext>(In reply to Frederik Riedel from comment #25)
&gt; Comment on attachment 318452 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=318452&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:903
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; I don&apos;t think we need to add this method to HTMLInputElement.
&gt; &gt; Whoever calls this function can just check the return value instead.
&gt; 
&gt; So this means that we expose the computeUsernameAndPasswordElements method
&gt; and call it directly from outside instead of wrapping it into
&gt; acceptsAutofilledLoginCredentials?

Right.

&gt; &gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:907
&gt; &gt;&gt; +}
&gt; &gt; 
&gt; &gt; Given assisted node has a very specific meaning on iOS, I don&apos;t think we should event new terminology like &quot;assitable element&quot;.
&gt; &gt; Now, how does filling date time field with username help at all?
&gt; &gt; 
&gt; &gt; I&apos;d suggest supportsAutofill or something. But I don&apos;t think there&apos;s any reason this needs to be a method of HTMLInputElement.
&gt; &gt; It&apos;s a lot better for this function be just a static local function which takes HTMLInputElement as an argument.
&gt; &gt; 
&gt; &gt; I don&apos;t think we should be checking that. If anything we should be checking for isTextField() || isEmailField().
&gt; 
&gt; I implemented this because there was a comment in WebPageIOS about this:
&gt;         // FIXME: This laundry list of types is not a good way to factor
&gt; this. Need a suitable function on HTMLInputElement itself.
&gt; Wouldn&apos;t the method that I implemented be a suitable function for this?

I don&apos;t think hard coding the list of input types is what this FIXME is asking. I actually don&apos;t think we need to move this code to WebCore given the entire concept of whether an input element is assitable or not is specific to iOS.

Regardless, it doesn&apos;t make sense for your code to checking this since input with type=datetime is most certainly not a text field used for a username or a password.

&gt; &gt;&gt; Source/WebCore/html/HTMLInputElement.h:79
&gt; &gt;&gt; +    static bool computeUsernameAndPasswordElements(Element *, RefPtr&lt;HTMLInputElement&gt;&amp;, RefPtr&lt;HTMLInputElement&gt;&amp;, const Document&amp;);
&gt; &gt; 
&gt; &gt; As I said in the person, we shouldn&apos;t be adding all these functions to HTMLInputElement.
&gt; 
&gt; If we expose the computeUsernameAndPasswordElements with WEBCORE_EXPORT, we
&gt; can remove acceptsAutofilledLoginCredentials.
&gt; Then we also don&apos;t need autofillLoginCredentials because we can call it on
&gt; the HTMLInputElements directly that we get back from the new
&gt; AutofillElements struct.
&gt; Does that sound reasonable to you?

Yes.

&gt; We could also move the static function somewhere else. Any ideas for that?

We can move it to its own file. Maybe editing/EditorIOS.mm is be a good place too?

&gt; &gt;&gt; Source/WebCore/page/FocusController.cpp:93
&gt; &gt;&gt; +        return true;
&gt; &gt; 
&gt; &gt; Why specifically select * textarea? Are we looking for any form control element?
&gt; &gt; This is exactly the kind of case where a single line comment as to why we consider these elements as &quot;assistable&quot; is useful.
&gt; &gt; Again, I don&apos;t think we should be using that terminology.
&gt; 
&gt; This is not a specific function for the autofill feature, but supports the
&gt; nextAssistableElement function that I moved from WebKit2 to WebCore.

I don&apos;t think we should do that. The entire concept of assisted node is specific to iOS. It has not business being inside FocusController. Again, the focus controller should be concerned about controlling the focused node, and nothing else.

&gt; &gt;&gt; Source/WebCore/page/FocusController.h:81
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; This code doesn&apos;t really belong to the focus controller. FocusController controls focus. It&apos;s a place to put code that does autofill.
&gt; 
&gt; So what place would you suggest for this?
&gt; A new `AssistableController`?

Why do we need a class for this? It seems like we just need a function which iterates over focused elements. A free standing function in EditorIOS.mm would suffice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343139</commentid>
    <comment_count>27</comment_count>
      <attachid>318452</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-08-29 10:30:43 -0700</bug_when>
    <thetext>Comment on attachment 318452
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:903
&gt;&gt;&gt;&gt; +
&gt;&gt;&gt; 
&gt;&gt;&gt; I don&apos;t think we need to add this method to HTMLInputElement.
&gt;&gt;&gt; Whoever calls this function can just check the return value instead.
&gt;&gt; 
&gt;&gt; So this means that we expose the computeUsernameAndPasswordElements method and call it directly from outside instead of wrapping it into acceptsAutofilledLoginCredentials?
&gt; 
&gt; Right.

Alright, done.

&gt;&gt;&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:907
&gt;&gt;&gt;&gt; +}
&gt;&gt;&gt; 
&gt;&gt;&gt; Given assisted node has a very specific meaning on iOS, I don&apos;t think we should event new terminology like &quot;assitable element&quot;.
&gt;&gt;&gt; Now, how does filling date time field with username help at all?
&gt;&gt;&gt; 
&gt;&gt;&gt; I&apos;d suggest supportsAutofill or something. But I don&apos;t think there&apos;s any reason this needs to be a method of HTMLInputElement.
&gt;&gt;&gt; It&apos;s a lot better for this function be just a static local function which takes HTMLInputElement as an argument.
&gt;&gt;&gt; 
&gt;&gt;&gt; I don&apos;t think we should be checking that. If anything we should be checking for isTextField() || isEmailField().
&gt;&gt; 
&gt;&gt; I implemented this because there was a comment in WebPageIOS about this:
&gt;&gt;         // FIXME: This laundry list of types is not a good way to factor this. Need a suitable function on HTMLInputElement itself.
&gt;&gt; Wouldn&apos;t the method that I implemented be a suitable function for this?
&gt; 
&gt; I don&apos;t think hard coding the list of input types is what this FIXME is asking. I actually don&apos;t think we need to move this code to WebCore given the entire concept of whether an input element is assitable or not is specific to iOS.
&gt; 
&gt; Regardless, it doesn&apos;t make sense for your code to checking this since input with type=datetime is most certainly not a text field used for a username or a password.

Ok, that makes sense to me. Done.

&gt;&gt;&gt;&gt; Source/WebCore/html/HTMLInputElement.h:79
&gt;&gt;&gt;&gt; +    static bool computeUsernameAndPasswordElements(Element *, RefPtr&lt;HTMLInputElement&gt;&amp;, RefPtr&lt;HTMLInputElement&gt;&amp;, const Document&amp;);
&gt;&gt;&gt; 
&gt;&gt;&gt; As I said in the person, we shouldn&apos;t be adding all these functions to HTMLInputElement.
&gt;&gt; 
&gt;&gt; If we expose the computeUsernameAndPasswordElements with WEBCORE_EXPORT, we can remove acceptsAutofilledLoginCredentials.
&gt;&gt; Then we also don&apos;t need autofillLoginCredentials because we can call it on the HTMLInputElements directly that we get back from the new AutofillElements struct.
&gt;&gt; Does that sound reasonable to you?
&gt;&gt; We could also move the static function somewhere else. Any ideas for that?
&gt; 
&gt; Yes.

Done, implemented in EditorIOS.

&gt;&gt;&gt;&gt; Source/WebCore/page/FocusController.cpp:93
&gt;&gt;&gt;&gt; +        return true;
&gt;&gt;&gt; 
&gt;&gt;&gt; Why specifically select * textarea? Are we looking for any form control element?
&gt;&gt;&gt; This is exactly the kind of case where a single line comment as to why we consider these elements as &quot;assistable&quot; is useful.
&gt;&gt;&gt; Again, I don&apos;t think we should be using that terminology.
&gt;&gt; 
&gt;&gt; This is not a specific function for the autofill feature, but supports the nextAssistableElement function that I moved from WebKit2 to WebCore.
&gt; 
&gt; I don&apos;t think we should do that. The entire concept of assisted node is specific to iOS. It has not business being inside FocusController. Again, the focus controller should be concerned about controlling the focused node, and nothing else.

Ok, done.

&gt;&gt;&gt;&gt; Source/WebCore/page/FocusController.h:81
&gt;&gt;&gt;&gt; +
&gt;&gt;&gt; 
&gt;&gt;&gt; This code doesn&apos;t really belong to the focus controller. FocusController controls focus. It&apos;s a place to put code that does autofill.
&gt;&gt; 
&gt;&gt; So what place would you suggest for this?
&gt;&gt; A new `AssistableController`?
&gt; 
&gt; Why do we need a class for this? It seems like we just need a function which iterates over focused elements. A free standing function in EditorIOS.mm would suffice.

EditorIOS contains now the iOS-specific code for this feature. Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343199</commentid>
    <comment_count>28</comment_count>
      <attachid>319277</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-08-29 13:37:45 -0700</bug_when>
    <thetext>Created attachment 319277
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343209</commentid>
    <comment_count>29</comment_count>
      <attachid>319277</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-29 14:03:19 -0700</bug_when>
    <thetext>Comment on attachment 319277
Patch

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

Okay, this code is a lot better. You might still want to refactor it as a separate class. It&apos;s fine if you didn&apos;t but please address other review comments.

&gt; Source/WebCore/editing/Editor.h:281
&gt; +#if PLATFORM(IOS)
&gt; +    WEBCORE_EXPORT static bool isAutofillable(RefPtr&lt;Element&gt;);
&gt; +    WEBCORE_EXPORT static std::optional&lt;AutofillElements&gt; computeAutofillElements(RefPtr&lt;Element&gt;);
&gt; +    WEBCORE_EXPORT static void autofillElements(String, String, AutofillElements);
&gt; +#endif

Hm... now that I&apos;m looking at this, it might be better to have a class named AutofillElements and make these functions members of that class.

&gt; Source/WebCore/editing/ios/EditorIOS.mm:490
&gt; +static inline RefPtr&lt;Element&gt; nextAutofillableElement(Node* startNode, Page&amp; page, bool isForward)

I think it&apos;s better to have two functions one called nextAutofillableElement and previousAutofillableElement instead of taking isForward argument given how small the actual code is.

&gt; Source/WebCore/editing/ios/EditorIOS.mm:495
&gt; +    Element* nextElement = downcast&lt;Element&gt;(startNode);

Use RefPtr instead.

&gt; Source/WebCore/editing/ios/EditorIOS.mm:539
&gt; +                autofillElements.password = &amp;inputElement;

We don&apos;t have username in this case?

&gt; Source/WebCore/editing/ios/EditorIOS.mm:544
&gt; +    return autofillElements;

We should return nullopt here instead.

&gt; Source/WebCore/editing/ios/EditorIOS.mm:551
&gt; +bool Editor::isAutofillable(RefPtr&lt;Element&gt; start)
&gt; +{
&gt; +    std::optional&lt;AutofillElements&gt; autofillElements = Editor::computeAutofillElements(start);
&gt; +    return (autofillElements-&gt;username &amp;&amp; autofillElements-&gt;password) || autofillElements-&gt;password;
&gt; +}

This function is not needed once computeAutofillElements returns nullopt in the case neither username nor password is set.
The caller of this function can just check !Editor::computeAutofillElements(start) then.

&gt; Source/WebCore/html/HTMLInputElement.cpp:900
&gt; +bool HTMLInputElement::isAutofillableElement()
&gt; +{
&gt; +    return isTextField() || isEmailField();
&gt; +}
&gt; +

We&apos;re not using this function. Please remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346636</commentid>
    <comment_count>30</comment_count>
      <attachid>319277</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-07 16:24:06 -0700</bug_when>
    <thetext>Comment on attachment 319277
Patch

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

&gt;&gt; Source/WebCore/editing/Editor.h:281
&gt;&gt; +#endif
&gt; 
&gt; Hm... now that I&apos;m looking at this, it might be better to have a class named AutofillElements and make these functions members of that class.

Done.

&gt;&gt; Source/WebCore/editing/ios/EditorIOS.mm:490
&gt;&gt; +static inline RefPtr&lt;Element&gt; nextAutofillableElement(Node* startNode, Page&amp; page, bool isForward)
&gt; 
&gt; I think it&apos;s better to have two functions one called nextAutofillableElement and previousAutofillableElement instead of taking isForward argument given how small the actual code is.

Done.

&gt;&gt; Source/WebCore/editing/ios/EditorIOS.mm:495
&gt;&gt; +    Element* nextElement = downcast&lt;Element&gt;(startNode);
&gt; 
&gt; Use RefPtr instead.

Done.

&gt;&gt; Source/WebCore/editing/ios/EditorIOS.mm:539
&gt;&gt; +                autofillElements.password = &amp;inputElement;
&gt; 
&gt; We don&apos;t have username in this case?

Yes. This is the case where a standalone password field should be filled.

&gt;&gt; Source/WebCore/editing/ios/EditorIOS.mm:544
&gt;&gt; +    return autofillElements;
&gt; 
&gt; We should return nullopt here instead.

OK, done.

&gt;&gt; Source/WebCore/editing/ios/EditorIOS.mm:551
&gt;&gt; +}
&gt; 
&gt; This function is not needed once computeAutofillElements returns nullopt in the case neither username nor password is set.
&gt; The caller of this function can just check !Editor::computeAutofillElements(start) then.

Makes sense, removed.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:900
&gt;&gt; +
&gt; 
&gt; We&apos;re not using this function. Please remove.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346806</commentid>
    <comment_count>31</comment_count>
      <attachid>320266</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-08 08:44:47 -0700</bug_when>
    <thetext>Created attachment 320266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348578</commentid>
    <comment_count>32</comment_count>
      <attachid>320266</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-13 17:16:08 -0700</bug_when>
    <thetext>Comment on attachment 320266
Patch

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

New patch looks really good! Just some stylistic issues. Please rebase it agains trunk.

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:34
&gt; +static inline bool isAutofillableElement(Element* node)

This function should take Element&amp; instead of Element*.

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:36
&gt; +    if (is&lt;HTMLInputElement&gt;(node)) {

Nit: We refer an early return to nested structure.
so:
if (~)
  return false;
~
return true;

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:37
&gt; +        RefPtr&lt;HTMLInputElement&gt; inputElement = &amp;downcast&lt;HTMLInputElement&gt;(*node);

Use `auto inputElement`. There&apos;s no need to ref-churn here.

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:43
&gt; +static inline RefPtr&lt;Element&gt; nextAutofillableElement(Node* startNode, Page&amp; page)

This function should probably return RefPtr&lt;HTMLInputElement&gt;.

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:72
&gt; +    if (is&lt;HTMLInputElement&gt;(start.get())) {

Please explicitly check whether start is null or not as in:
if (start &amp;&amp; is&lt;HTMLInputElement&gt;(*start))

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:75
&gt; +            RefPtr&lt;Element&gt; previousElement = previousAutofillableElement(&amp;inputElement, *start-&gt;document().page());

We should check that page isn&apos;t null, and exit early when it is.
In fact, just store FocusController&amp; as a local variable and use pass that to these helper functions instead.

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:76
&gt; +            if (is&lt;HTMLInputElement&gt;(previousElement.get())) {

Ditto.

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:77
&gt; +                RefPtr&lt;HTMLInputElement&gt; potentialUsernameField = &amp;downcast&lt;HTMLInputElement&gt;(*previousElement);

There&apos;s no need to use RefPtr here since we know it can&apos;t be null.
Remove &amp; before downcast and use Ref&lt;HTMLInputElement&gt;
But really, you should just use `auto` instead.

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:87
&gt; +            RefPtr&lt;Element&gt; nextElement = nextAutofillableElement(&amp;inputElement, *start-&gt;document().page());
&gt; +            if (is&lt;HTMLInputElement&gt;(nextElement.get())) {
&gt; +                RefPtr&lt;HTMLInputElement&gt; potentialPasswordField = &amp;downcast&lt;HTMLInputElement&gt;(*nextElement);

Same issues explicitly checking the nullity and using `auto` (which makes RefPtr in line 87 for example) instead of RefPtr.

&gt; Source/WebCore/editing/ios/AutofillElements.h:26
&gt; +#include &quot;Element.h&quot;

There&apos;s no need to include Element since HTMLInputElement includes Element.

&gt; Source/WebCore/editing/ios/AutofillElements.h:31
&gt; +class AutofillElements {

We should probably use WTF_MAKE_FAST_ALLOCATED here.

&gt; Source/WebCore/editing/ios/AutofillElements.h:36
&gt; +    RefPtr&lt;HTMLInputElement&gt; username;
&gt; +    RefPtr&lt;HTMLInputElement&gt; password;

It looks like these two member variables are never accessed outside AutofillElements class.
Make them private and prefix them with m_.
If not, please add an explicit getter &amp; setter instead of exposing them as public member variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350248</commentid>
    <comment_count>33</comment_count>
      <attachid>320266</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-18 21:39:13 -0700</bug_when>
    <thetext>Comment on attachment 320266
Patch

See https://bugs.webkit.org/show_bug.cgi?id=176710 and https://bugs.webkit.org/show_bug.cgi?id=176139 for examples of tests that check input elements and autofill things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350375</commentid>
    <comment_count>34</comment_count>
      <attachid>320266</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-19 10:24:23 -0700</bug_when>
    <thetext>Comment on attachment 320266
Patch

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

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:34
&gt;&gt; +static inline bool isAutofillableElement(Element* node)
&gt; 
&gt; This function should take Element&amp; instead of Element*.

Done.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:36
&gt;&gt; +    if (is&lt;HTMLInputElement&gt;(node)) {
&gt; 
&gt; Nit: We refer an early return to nested structure.
&gt; so:
&gt; if (~)
&gt;   return false;
&gt; ~
&gt; return true;

Done.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:37
&gt;&gt; +        RefPtr&lt;HTMLInputElement&gt; inputElement = &amp;downcast&lt;HTMLInputElement&gt;(*node);
&gt; 
&gt; Use `auto inputElement`. There&apos;s no need to ref-churn here.

Done.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:43
&gt;&gt; +static inline RefPtr&lt;Element&gt; nextAutofillableElement(Node* startNode, Page&amp; page)
&gt; 
&gt; This function should probably return RefPtr&lt;HTMLInputElement&gt;.

Done. Also for previousAutofillableElement.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:72
&gt;&gt; +    if (is&lt;HTMLInputElement&gt;(start.get())) {
&gt; 
&gt; Please explicitly check whether start is null or not as in:
&gt; if (start &amp;&amp; is&lt;HTMLInputElement&gt;(*start))

Done.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:75
&gt;&gt; +            RefPtr&lt;Element&gt; previousElement = previousAutofillableElement(&amp;inputElement, *start-&gt;document().page());
&gt; 
&gt; We should check that page isn&apos;t null, and exit early when it is.
&gt; In fact, just store FocusController&amp; as a local variable and use pass that to these helper functions instead.

Great idea! We don&apos;t use the page variable anyway, only its focusController(). Passing it directly now. Done.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:76
&gt;&gt; +            if (is&lt;HTMLInputElement&gt;(previousElement.get())) {
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:77
&gt;&gt; +                RefPtr&lt;HTMLInputElement&gt; potentialUsernameField = &amp;downcast&lt;HTMLInputElement&gt;(*previousElement);
&gt; 
&gt; There&apos;s no need to use RefPtr here since we know it can&apos;t be null.
&gt; Remove &amp; before downcast and use Ref&lt;HTMLInputElement&gt;
&gt; But really, you should just use `auto` instead.

Done.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:87
&gt;&gt; +                RefPtr&lt;HTMLInputElement&gt; potentialPasswordField = &amp;downcast&lt;HTMLInputElement&gt;(*nextElement);
&gt; 
&gt; Same issues explicitly checking the nullity and using `auto` (which makes RefPtr in line 87 for example) instead of RefPtr.

Done.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.h:26
&gt;&gt; +#include &quot;Element.h&quot;
&gt; 
&gt; There&apos;s no need to include Element since HTMLInputElement includes Element.

True, removed.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.h:31
&gt;&gt; +class AutofillElements {
&gt; 
&gt; We should probably use WTF_MAKE_FAST_ALLOCATED here.

Ok. Added.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.h:36
&gt;&gt; +    RefPtr&lt;HTMLInputElement&gt; password;
&gt; 
&gt; It looks like these two member variables are never accessed outside AutofillElements class.
&gt; Make them private and prefix them with m_.
&gt; If not, please add an explicit getter &amp; setter instead of exposing them as public member variables.

They can be private indeed. Added m_ as well. Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350486</commentid>
    <comment_count>35</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-19 13:46:16 -0700</bug_when>
    <thetext>Looks like the patch no longer applies on trunk? Could you re-upload it after rebating against ToT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350512</commentid>
    <comment_count>36</comment_count>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-19 14:31:59 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #35)
&gt; Looks like the patch no longer applies on trunk? Could you re-upload it
&gt; after rebating against ToT?

Yes, rebased on master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350516</commentid>
    <comment_count>37</comment_count>
      <attachid>321243</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-19 14:37:17 -0700</bug_when>
    <thetext>Created attachment 321243
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350699</commentid>
    <comment_count>38</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-20 02:11:58 -0700</bug_when>
    <thetext>Looks like it still doesn&apos;t apply?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350817</commentid>
    <comment_count>39</comment_count>
      <attachid>321328</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-20 10:19:31 -0700</bug_when>
    <thetext>Created attachment 321328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350857</commentid>
    <comment_count>40</comment_count>
      <attachid>321328</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-20 11:09:10 -0700</bug_when>
    <thetext>Comment on attachment 321328
Patch

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

&gt; Source/WebKitLegacy/mac/DOM/DOMHTMLInputElement.h:39
&gt; +#elif

elif what? This is causing the build failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350863</commentid>
    <comment_count>41</comment_count>
      <attachid>321328</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-20 11:19:24 -0700</bug_when>
    <thetext>Comment on attachment 321328
Patch

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

&gt; Source/WebKitLegacy/mac/DOM/DOMHTMLInputElement.mm:46
&gt;  #import &quot;ExceptionHandlers.h&quot;
&gt; +#if __has_include(&lt;UIKit/UIKeyboardLoginCredentialsSuggestion.h&gt;)
&gt; +#import &lt;UIKit/UIKeyboardLoginCredentialsSuggestion.h&gt;
&gt; +#else
&gt; +#import &lt;UIKit/UITextInput_Private.h&gt;
&gt; +@interface UIKeyboardLoginCredentialsSuggestion : UITextSuggestion
&gt; +
&gt; +@property (nonatomic, assign) NSString *username;
&gt; +@property (nonatomic, assign) NSString *password;
&gt; +
&gt; +@end
&gt; +#endif

You need to wrap this whole thing in #if PLATFORM(IOS) or #if TARGET_OS_IPHONE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350874</commentid>
    <comment_count>42</comment_count>
      <attachid>321328</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-20 11:28:21 -0700</bug_when>
    <thetext>Comment on attachment 321328
Patch

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

&gt;&gt; Source/WebKitLegacy/mac/DOM/DOMHTMLInputElement.h:39
&gt;&gt; +#elif
&gt; 
&gt; elif what? This is causing the build failure.

Yes, this should be #else.

&gt;&gt; Source/WebKitLegacy/mac/DOM/DOMHTMLInputElement.mm:46
&gt;&gt; +#endif
&gt; 
&gt; You need to wrap this whole thing in #if PLATFORM(IOS) or #if TARGET_OS_IPHONE

Right. Even if the UIKit include is not available we would try to #import it in #else. This breaks the build on Mac. 
I wrapped the whole thing in an additional check for #if TARGET_OS_IPHONE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351534</commentid>
    <comment_count>43</comment_count>
      <attachid>321513</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-21 21:39:51 -0700</bug_when>
    <thetext>Created attachment 321513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351537</commentid>
    <comment_count>44</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-21 21:52:16 -0700</bug_when>
    <thetext>It looks like Source/WebCore/WebCore.xcodeproj/project.pbxproj and Source/WebCore/WebCore.xcodeproj/project.pbxproj are conflicting again?

In general, adding a new file to WebKit typically requires you to be always syncing to tip of source tree every day. It looks like your checkout was more than a day old when rebased so it&apos;s likely too old.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351539</commentid>
    <comment_count>45</comment_count>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-21 21:55:23 -0700</bug_when>
    <thetext>Yep, just noticed. Rebasing now and then going to upload the new patch.

(In reply to Ryosuke Niwa from comment #44)
&gt; It looks like Source/WebCore/WebCore.xcodeproj/project.pbxproj and
&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj are conflicting again?
&gt; 
&gt; In general, adding a new file to WebKit typically requires you to be always
&gt; syncing to tip of source tree every day. It looks like your checkout was
&gt; more than a day old when rebased so it&apos;s likely too old.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351546</commentid>
    <comment_count>46</comment_count>
      <attachid>321517</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-21 22:24:36 -0700</bug_when>
    <thetext>Created attachment 321517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351569</commentid>
    <comment_count>47</comment_count>
      <attachid>321517</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-22 01:20:54 -0700</bug_when>
    <thetext>Comment on attachment 321517
Patch

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

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:94
&gt; +                    autofillElements.m_password = &amp;inputElement;
&gt; +                    autofillElements.m_username = previousElement;
&gt; +                    return autofillElements;

Can we just add a private constructor which takes username &amp; password elements,
and do AutofillElements(previousElement, &amp;inputElement) here?

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:108
&gt; +                    autofillElements.m_password = nextElement;
&gt; +                    autofillElements.m_username = &amp;inputElement;
&gt; +                    return autofillElements;

Ditto.

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:122
&gt; +            if (!previousElement &amp;&amp; !nextElement) {
&gt; +                autofillElements.m_password = &amp;inputElement;
&gt; +                return autofillElements;
&gt; +            }

Ditto.

&gt; Source/WebCore/editing/ios/AutofillElements.cpp:137
&gt; +    if (this-&gt;m_username) {
&gt; +        this-&gt;m_username-&gt;setValueForUser(username);
&gt; +        this-&gt;m_username-&gt;setAutoFilled();
&gt; +    }
&gt; +    if (this-&gt;m_password) {
&gt; +        this-&gt;m_password-&gt;setValueForUser(password);
&gt; +        this-&gt;m_password-&gt;setAutoFilled();
&gt; +    }

Nit: We don&apos;t use &quot;this-&gt;&quot; in WebKit. Please remove.

&gt; Source/WebKit/Shared/AssistedNodeInformation.h:113
&gt; +    bool acceptsAutofilledLoginCredentials;

Please add an initializer: { false }. r- because of this and iOS build failures.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2814
&gt; +    if (is&lt;HTMLInputElement&gt;(m_assistedNode.get())) {

Use is&lt;HTMLInputElement&gt;(*m_assistedNode) instead.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2815
&gt; +        RefPtr&lt;Element&gt; assistendElement = &amp;downcast&lt;Element&gt;(*m_assistedNode);

Use Ref&lt;Element&gt; instead since we know m_assistedNode is not null at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351732</commentid>
    <comment_count>48</comment_count>
      <attachid>321517</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-22 11:19:42 -0700</bug_when>
    <thetext>Comment on attachment 321517
Patch

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

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:94
&gt;&gt; +                    return autofillElements;
&gt; 
&gt; Can we just add a private constructor which takes username &amp; password elements,
&gt; and do AutofillElements(previousElement, &amp;inputElement) here?

Yes, good idea. Added.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:108
&gt;&gt; +                    return autofillElements;
&gt; 
&gt; Ditto.

Added new constructor call.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:122
&gt;&gt; +            }
&gt; 
&gt; Ditto.

Added new constructor call.

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.cpp:137
&gt;&gt; +    }
&gt; 
&gt; Nit: We don&apos;t use &quot;this-&gt;&quot; in WebKit. Please remove.

Removed &quot;this-&gt;&quot;.

&gt;&gt; Source/WebKit/Shared/AssistedNodeInformation.h:113
&gt;&gt; +    bool acceptsAutofilledLoginCredentials;
&gt; 
&gt; Please add an initializer: { false }. r- because of this and iOS build failures.

Added initializer.

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2814
&gt;&gt; +    if (is&lt;HTMLInputElement&gt;(m_assistedNode.get())) {
&gt; 
&gt; Use is&lt;HTMLInputElement&gt;(*m_assistedNode) instead.

Done.

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2815
&gt;&gt; +        RefPtr&lt;Element&gt; assistendElement = &amp;downcast&lt;Element&gt;(*m_assistedNode);
&gt; 
&gt; Use Ref&lt;Element&gt; instead since we know m_assistedNode is not null at this point.

The method computeAutofillElements is expecting a RefPtr. Would this work if we use a Ref here instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351745</commentid>
    <comment_count>49</comment_count>
      <attachid>321517</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-22 11:43:38 -0700</bug_when>
    <thetext>Comment on attachment 321517
Patch

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

&gt;&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2815
&gt;&gt;&gt; +        RefPtr&lt;Element&gt; assistendElement = &amp;downcast&lt;Element&gt;(*m_assistedNode);
&gt;&gt; 
&gt;&gt; Use Ref&lt;Element&gt; instead since we know m_assistedNode is not null at this point.
&gt; 
&gt; The method computeAutofillElements is expecting a RefPtr. Would this work if we use a Ref here instead?

It looks like computeAutofillElements assumes that the start node must exist, since the first thing it does is dereference start. That should probably take a Ref&lt;&gt; or const &amp; instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351750</commentid>
    <comment_count>50</comment_count>
      <attachid>321517</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-22 11:49:41 -0700</bug_when>
    <thetext>Comment on attachment 321517
Patch

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

&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:49
&gt; +static UIKeyboardLoginCredentialsSuggestion *createUIKeyboardLoginCredentialsSuggestion = [NSClassFromString(@&quot;UIKeyboardLoginCredentialsSuggestion&quot;) new];

I think you meant for this to be a static function that returns a new credentials suggestion?

&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:66
&gt; +    TestWKWebView *webView = [[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];

This leaks webView. Do probably want to make this something like:

auto webView = adoptNS(~)

...or alternately, just make sure you -release the webView at the end.

&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:87
&gt; +    TestWKWebView *webView = [[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];

Ditto.

&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:99
&gt; +    TestWKWebView *webView = [[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];

Ditto.

&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:125
&gt; +    TestWKWebView *webView = [[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351816</commentid>
    <comment_count>51</comment_count>
      <attachid>321517</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-22 13:54:00 -0700</bug_when>
    <thetext>Comment on attachment 321517
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2815
&gt;&gt;&gt;&gt; +        RefPtr&lt;Element&gt; assistendElement = &amp;downcast&lt;Element&gt;(*m_assistedNode);
&gt;&gt;&gt; 
&gt;&gt;&gt; Use Ref&lt;Element&gt; instead since we know m_assistedNode is not null at this point.
&gt;&gt; 
&gt;&gt; The method computeAutofillElements is expecting a RefPtr. Would this work if we use a Ref here instead?
&gt; 
&gt; It looks like computeAutofillElements assumes that the start node must exist, since the first thing it does is dereference start. That should probably take a Ref&lt;&gt; or const &amp; instead.

Using a Ref here now.

&gt;&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:49
&gt;&gt; +static UIKeyboardLoginCredentialsSuggestion *createUIKeyboardLoginCredentialsSuggestion = [NSClassFromString(@&quot;UIKeyboardLoginCredentialsSuggestion&quot;) new];
&gt; 
&gt; I think you meant for this to be a static function that returns a new credentials suggestion?

Yep, I updated that to be a static method which returns a new UIKeyboardLoginCredentialsSuggestion object.

&gt;&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:66
&gt;&gt; +    TestWKWebView *webView = [[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];
&gt; 
&gt; This leaks webView. Do probably want to make this something like:
&gt; 
&gt; auto webView = adoptNS(~)
&gt; 
&gt; ...or alternately, just make sure you -release the webView at the end.

Added [webView release];

&gt;&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:87
&gt;&gt; +    TestWKWebView *webView = [[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:99
&gt;&gt; +    TestWKWebView *webView = [[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:125
&gt;&gt; +    TestWKWebView *webView = [[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];
&gt; 
&gt; Ditto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351844</commentid>
    <comment_count>52</comment_count>
      <attachid>321595</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-22 15:26:54 -0700</bug_when>
    <thetext>Created attachment 321595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351863</commentid>
    <comment_count>53</comment_count>
      <attachid>321595</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-22 16:04:41 -0700</bug_when>
    <thetext>Comment on attachment 321595
Patch

WebKit is compiling without the internal SDK, putting the related code behind USE_APPLE_INTERNAL_SDK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351864</commentid>
    <comment_count>54</comment_count>
      <attachid>321600</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-22 16:07:24 -0700</bug_when>
    <thetext>Created attachment 321600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351906</commentid>
    <comment_count>55</comment_count>
      <attachid>321600</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-22 18:22:41 -0700</bug_when>
    <thetext>Comment on attachment 321600
Patch

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

&gt; Source/WebCore/editing/ios/AutofillElements.h:36
&gt; +    AutofillElements(RefPtr&lt;HTMLInputElement&gt;, RefPtr&lt;HTMLInputElement&gt;);

Use RefPtr&lt;HTMLInputElement&gt;&amp;&amp; instead to avoid ref churn.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2816
&gt; +        Ref&lt;HTMLInputElement&gt; assistendElement = downcast&lt;HTMLInputElement&gt;(*m_assistedNode);
&gt; +        auto autofillElements = AutofillElements::computeAutofillElements(assistendElement.get());

It looks like we don&apos;t need this local variable?
Why not just do this?:
AutofillElements::computeAutofillElements(downcast&lt;HTMLInputElement&gt;(*m_assistedNode));

&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:37
&gt; +// FIXME 34583628: Simplyfy this once the UIKit work is available in the build.

Nit: &quot;FIXME &lt;radar:34583628&gt;: ~&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351907</commentid>
    <comment_count>56</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-22 18:24:24 -0700</bug_when>
    <thetext>In order to commit this change, either fix the problems I&apos;ve pointed out and say that you want to land as is, and run &quot;./Tools/Scripts/webkit-patch land-safely&quot; (or open &quot;Details&quot; and set &quot;cq?&quot;).

Note: Don&apos;t use &quot;webkit-patch upload&quot; because that&apos;d clear my r+ bit. You&apos;d need to ask for another review if you&apos;ve done that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352238</commentid>
    <comment_count>57</comment_count>
      <attachid>321600</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-25 10:12:26 -0700</bug_when>
    <thetext>Comment on attachment 321600
Patch

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

&gt;&gt; Source/WebCore/editing/ios/AutofillElements.h:36
&gt;&gt; +    AutofillElements(RefPtr&lt;HTMLInputElement&gt;, RefPtr&lt;HTMLInputElement&gt;);
&gt; 
&gt; Use RefPtr&lt;HTMLInputElement&gt;&amp;&amp; instead to avoid ref churn.

What is &apos;ref churn&apos;?

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2816
&gt;&gt; +        auto autofillElements = AutofillElements::computeAutofillElements(assistendElement.get());
&gt; 
&gt; It looks like we don&apos;t need this local variable?
&gt; Why not just do this?:
&gt; AutofillElements::computeAutofillElements(downcast&lt;HTMLInputElement&gt;(*m_assistedNode));

Done.

&gt;&gt; Tools/TestWebKitAPI/Tests/ios/WKWebViewAutofillTests.mm:37
&gt;&gt; +// FIXME 34583628: Simplyfy this once the UIKit work is available in the build.
&gt; 
&gt; Nit: &quot;FIXME &lt;radar:34583628&gt;: ~&quot;

Done.



Thanks for reviewing, Ryosuke!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352242</commentid>
    <comment_count>58</comment_count>
      <attachid>321600</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-25 10:14:37 -0700</bug_when>
    <thetext>Comment on attachment 321600
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/ios/AutofillElements.h:36
&gt;&gt;&gt; +    AutofillElements(RefPtr&lt;HTMLInputElement&gt;, RefPtr&lt;HTMLInputElement&gt;);
&gt;&gt; 
&gt;&gt; Use RefPtr&lt;HTMLInputElement&gt;&amp;&amp; instead to avoid ref churn.
&gt; 
&gt; What is &apos;ref churn&apos;?

This is when objects that keep track of reference counts (e.g. RefPtr, Ref, RetainPtr) are unnecessarily destroyed and recreated. In this case, we can turn this into RefPtr&lt;HTMLInputElement&gt;&amp;&amp;s and WTFMove() at the call site to avoid this extra dance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352278</commentid>
    <comment_count>59</comment_count>
      <attachid>321709</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-25 11:25:03 -0700</bug_when>
    <thetext>Created attachment 321709
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352401</commentid>
    <comment_count>60</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-25 14:03:28 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #58)
&gt; Comment on attachment 321600 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=321600&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/editing/ios/AutofillElements.h:36
&gt; &gt;&gt;&gt; +    AutofillElements(RefPtr&lt;HTMLInputElement&gt;, RefPtr&lt;HTMLInputElement&gt;);
&gt; &gt;&gt; 
&gt; &gt;&gt; Use RefPtr&lt;HTMLInputElement&gt;&amp;&amp; instead to avoid ref churn.
&gt; &gt; 
&gt; &gt; What is &apos;ref churn&apos;?
&gt; 
&gt; This is when objects that keep track of reference counts (e.g. RefPtr, Ref,
&gt; RetainPtr) are unnecessarily destroyed and recreated. In this case, we can
&gt; turn this into RefPtr&lt;HTMLInputElement&gt;&amp;&amp;s and WTFMove() at the call site to
&gt; avoid this extra dance.

Well, more precisely about calling ref() and deref() multiple times. This is an expensive operation because they&apos;re dependent operations in CPU, and must be executed consecutively. In a CPU which doesn&apos;t do an out-of-order execution, it can block the code execution or, worse, cause a pipeline hazard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352407</commentid>
    <comment_count>61</comment_count>
      <attachid>321709</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-25 14:10:01 -0700</bug_when>
    <thetext>Comment on attachment 321709
Patch for landing

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

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2816
&gt; +        auto autofillElements = AutofillElements::computeAutofillElements(downcast&lt;HTMLInputElement&gt;(*m_assistedNode));
&gt; +        autofillElements-&gt;autofill(username, password);

Oh wait, you&apos;re missing the check to null opt. It&apos;s possible that computeAutofillElements don&apos;t find an element, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352408</commentid>
    <comment_count>62</comment_count>
      <attachid>321709</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-25 14:10:49 -0700</bug_when>
    <thetext>Comment on attachment 321709
Patch for landing

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

&gt; Source/WebKitLegacy/mac/DOM/DOMHTMLInputElement.mm:704
&gt; +        std::optional&lt;WebCore::AutofillElements&gt; autofillElements = WebCore::AutofillElements::computeAutofillElements(*IMPL);
&gt; +        autofillElements-&gt;autofill(credentialsSuggestion.username, credentialsSuggestion.password);

use auto here as in auto autofillElements.
You should check for nullopt. Otherwise, the program will crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352414</commentid>
    <comment_count>63</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-25 14:13:34 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #62)
&gt; Comment on attachment 321709 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=321709&amp;action=review
&gt; 
&gt; &gt; Source/WebKitLegacy/mac/DOM/DOMHTMLInputElement.mm:704
&gt; &gt; +        std::optional&lt;WebCore::AutofillElements&gt; autofillElements = WebCore::AutofillElements::computeAutofillElements(*IMPL);
&gt; &gt; +        autofillElements-&gt;autofill(credentialsSuggestion.username, credentialsSuggestion.password);
&gt; 
&gt; use auto here as in auto autofillElements.
&gt; You should check for nullopt. Otherwise, the program will crash.

A clean way to write this would be:

    if (auto elements = WebCore::AutofillElements::computeAutofillElements(*IMPL))
        elements-&gt;autofill(credentialsSuggestion.username, credentialsSuggestion.password);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352477</commentid>
    <comment_count>64</comment_count>
      <attachid>321709</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-25 16:21:48 -0700</bug_when>
    <thetext>Comment on attachment 321709
Patch for landing

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

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2816
&gt;&gt; +        autofillElements-&gt;autofill(username, password);
&gt; 
&gt; Oh wait, you&apos;re missing the check to null opt. It&apos;s possible that computeAutofillElements don&apos;t find an element, right?

Done.

&gt;&gt;&gt; Source/WebKitLegacy/mac/DOM/DOMHTMLInputElement.mm:704
&gt;&gt;&gt; +        autofillElements-&gt;autofill(credentialsSuggestion.username, credentialsSuggestion.password);
&gt;&gt; 
&gt;&gt; use auto here as in auto autofillElements.
&gt;&gt; You should check for nullopt. Otherwise, the program will crash.
&gt; 
&gt; A clean way to write this would be:
&gt; 
&gt;     if (auto elements = WebCore::AutofillElements::computeAutofillElements(*IMPL))
&gt;         elements-&gt;autofill(credentialsSuggestion.username, credentialsSuggestion.password);

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352483</commentid>
    <comment_count>65</comment_count>
      <attachid>321762</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-25 16:25:21 -0700</bug_when>
    <thetext>Created attachment 321762
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352489</commentid>
    <comment_count>66</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-25 16:29:34 -0700</bug_when>
    <thetext>Let&apos;s wait for EWS results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352490</commentid>
    <comment_count>67</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-25 16:40:58 -0700</bug_when>
    <thetext>Attachment 321762 did not pass style-queue:


ERROR: Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2816:  Missing space before ( in if(  [whitespace/parens] [5]
Total errors found: 1 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>1352511</commentid>
    <comment_count>68</comment_count>
      <attachid>321762</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-25 17:10:09 -0700</bug_when>
    <thetext>Comment on attachment 321762
Patch for landing

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

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:2815
&gt; +        if(auto autofillElements = AutofillElements::computeAutofillElements(downcast&lt;HTMLInputElement&gt;(*m_assistedNode)))

You need a space between if and (.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352520</commentid>
    <comment_count>69</comment_count>
      <attachid>321779</attachid>
    <who name="Frederik Riedel">frederik.riedel</who>
    <bug_when>2017-09-25 17:17:04 -0700</bug_when>
    <thetext>Created attachment 321779
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352558</commentid>
    <comment_count>70</comment_count>
      <attachid>321779</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-25 19:33:48 -0700</bug_when>
    <thetext>Comment on attachment 321779
Patch for landing

Clearing flags on attachment: 321779

Committed r222487: &lt;http://trac.webkit.org/changeset/222487&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352559</commentid>
    <comment_count>71</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-25 19:33:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352593</commentid>
    <comment_count>72</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-25 23:29:51 -0700</bug_when>
    <thetext>It seems like after this patch, AutofillElements is no longer iOS-specific --- should we move it out of the iOS subdirectory?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352864</commentid>
    <comment_count>73</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-26 14:53:13 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #72)
&gt; It seems like after this patch, AutofillElements is no longer iOS-specific
&gt; --- should we move it out of the iOS subdirectory?

Oh oops, I didn&apos;t see that. We should discuss that offline somewhere.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>315179</attachid>
            <date>2017-07-11 15:51:55 -0700</date>
            <delta_ts>2017-07-11 22:52:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170711155154.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315354</attachid>
            <date>2017-07-13 10:48:17 -0700</date>
            <delta_ts>2017-07-24 13:27:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170713104816.patch</filename>
            <type>text/plain</type>
            <size>21663</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MjE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmZmMmFhNTFlNTM1YWYw
MjdiNWNmM2RjODc3NTJkZjY1NDAxYTdmMC4uZDA4NGY1MjY3ZWMxMTVkNmYyMzljMzM1OWEwNGM0
YjczOTMwMTZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA3LTExICBGcmVk
ZXJpayBSaWVkZWwgIDxmcmllZGVsQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBvc2Ugd2F5IHRv
IHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3JtIGNvbnRyb2xzIGFzIHtMZWdhY3kgV2ViS2l0
LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc0Mzk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YWNjZXB0c0F1
dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTogRGV0ZXJtaW5lcyBpZiB0aGUKKyAgICAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQgaXMgcGFydCBvZiBhIGxvZ2luIHNjZW5hcmlvIGFuZCBjYW4gdGhl
cmVmb3JlIGhhbmRsZSBjcmVkZW50aWFscyAodXNlcm5hbWUsCisgICAgICAgICAgICBwYXNzd29y
ZCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRQYXNzd29yZCk6IFNl
dHMgdGhlIHBhc3N3b3JkIGZvciB0aGlzIGVsZW1lbnQsIG9yIHRoZSByZWxhdGVkCisgICAgICAg
ICAgICBwYXNzd29yZCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6c2V0VXNlcm5hbWUpOiBTZXRzIHRoZSB1c2VybmFtZSBmb3IgdGhpcyBlbGVtZW50LCBvciB0
aGUgcmVsYXRlZAorICAgICAgICAgICAgdXNlcm5hbWUgZWxlbWVudC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldFBhc3N3b3JkRWxlbWVudCk6IFNldHMgdGhlIHJlbGF0
ZWQgcGFzc3dvcmQgZWxlbWVudCBmb3IgdGhpcworICAgICAgICAgICAgSFRNTElucHV0RWxlbWVu
dCAoY2FuIGJlIGEgcmVmZXJlbmNlIHRvIGl0c2VsZikuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpzZXRVc2VybmFtZUVsZW1lbnQpOiBTZXRzIHRoZSByZWxhdGVkIHVzZXJu
YW1lIGVsZW1lbnQgZm9yIHRoaXMKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQgKGNhbiBi
ZSBhIHJlZmVyZW5jZSB0byBpdHNlbGYpLgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVu
dC5oOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZEVsZW1lbnQpOiBEZXRlcm1pbmVzIGlmIGEg
Zm9jdXNlZCBIVE1MSW5wdXRFbGVtZW50CisgICAgICAgICAgICBpcyBwYXJ0IG9mIGEgbG9naW4g
d29ya2Zsb3cgYW5kIHNldHMgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBlbGVtZW50cyBhcHBy
b3ByaWF0ZWx5LgorCiAyMDE3LTA3LTA2ICBNYXR0IFJhamNhICA8bXJhamNhQGFwcGxlLmNvbT4K
IAogICAgICAgICBGaXggYnVpbGQgd2l0aCBWSURFTyBzdXBwb3J0IGRpc2FibGVkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCmluZGV4IDc1YjY3Y2EzY2I5ZjZjNmMzMDM2NjNhNjMzYTMyZmMyOGE5NWRlNTAuLjUx
ODVhN2NkMzE4ZDg5NzJiZjkyMmQzNTY4MTEzODM5YjdmMjRiNTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOCBAQAorMjAxNy0wNy0xMSAgRnJlZGVyaWsgUmllZGVsICA8ZnJpZWRlbEBh
cHBsZS5jb20+CisKKyAgICAgICAgRXhwb3NlIHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZp
ZWQgZm9ybSBjb250cm9scyBhcyB7TGVnYWN5IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDM5NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTUhUTUxJbnB1
dEVsZW1lbnQuaDoKKyAgICAgICAgKiBET00vRE9NSFRNTElucHV0RWxlbWVudC5tbToKKyAgICAg
ICAgKC1bRE9NSFRNTElucHV0RWxlbWVudCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlh
bHNdKTogRGV0ZXJtaW5lcyBpZiB0aGlzCisgICAgICAgICAgICBET01IVE1MSW5wdXRFbGVtZW50
IGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGEgdXNlcm5hbWUgYW5kIGEgcGFzc3dvcmQuCisgICAg
ICAgICgtW0RPTUhUTUxJbnB1dEVsZW1lbnQgc2V0UGFzc3dvcmQ6XSk6IFNldHMgdGhlIHBhc3N3
b3JkIGluIGl0J3MgSFRNTElucHV0RWxlbWVudC4KKyAgICAgICAgKC1bRE9NSFRNTElucHV0RWxl
bWVudCBzZXRVc2VybmFtZTpdKTogU2V0cyB0aGUgdXNlcm5hbWUgaW4gaXQncyBIVE1MSW5wdXRF
bGVtZW50LgorICAgICAgICAqIERPTS9ET01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5oOgorCiAy
MDE3LTA3LTA2ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgbG9nZ2luZyB0byBmaXJzdCBhdHRlbXB0IHRvIHVzZSB0aGUgV2ViSWNvbkRhdGFiYXNlIGNs
YXNzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDRlNTc2NTIwOWY4MGM4M2U5MDI4OGU2YmQwZWUyOGVhM2I5M2Qz
MTcuLjMxNjJmMDY5YWE2YmI2ZjE5ZmQxNWVhMmFiOTUxZWI0YjZjZjg0YzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzOSBAQAorMjAxNy0wNy0xMSAgRnJlZGVyaWsgUmllZGVsICA8ZnJpZWRlbEBh
cHBsZS5jb20+CisKKyAgICAgICAgRXhwb3NlIHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZp
ZWQgZm9ybSBjb250cm9scyBhcyB7TGVnYWN5IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDM5NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL0Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb246OmVuY29kZSk6IEFkZGVkIGVuY29kaW5nIGZvciBhY2NlcHRzQXV0b2ZpbGxlZExvZ2lu
Q3JlZGVudGlhbHMuCisgICAgICAgIChXZWJLaXQ6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjpk
ZWNvZGUpOiBBZGRlZCBkZWNvZGluZyBmb3IgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRp
YWxzLgorICAgICAgICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW06
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2V0UGFzc3dvcmQ6XSk6IFNldHMgdGhlIHBhc3N3
b3JkIGZvciB0aGlzIGVsZW1lbnQsIG9yIHRoZSByZWxhdGVkCisgICAgICAgICAgICBwYXNzd29y
ZCBlbGVtZW50LgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNldFVzZXJuYW1lOl0pOiBTZXRz
IHRoZSB1c2VybmFtZSBmb3IgdGhpcyBlbGVtZW50LCBvciB0aGUgcmVsYXRlZAorICAgICAgICAg
ICAgdXNlcm5hbWUgZWxlbWVudC4KKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBhY2NlcHRzQXV0
b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHNdKTogRGV0ZXJtaW5lcyBpZiB0aGUKKyAgICAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQgaXMgcGFydCBvZiBhIGxvZ2luIHNjZW5hcmlvIGFuZCBjYW4gdGhl
cmVmb3JlIGhhbmRsZSBjcmVkZW50aWFscyAodXNlcm5hbWUsCisgICAgICAgICAgICBwYXNzd29y
ZCkuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RhcnRBc3Npc3RpbmdOb2RlKTogRGV0ZWN0cyBpZiB0
aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgaXMKKyAgICAgICAgICAgIHBhcnQgb2YgYSBsb2dp
biBzY2VuYXJpby4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphY2NlcHRzQXV0b2Zp
bGxlZExvZ2luQ3JlZGVudGlhbHMpOiBHZXR0ZXIgZm9yCisgICAgICAgICAgICBtX2FjY2VwdHNB
dXRvZmlsbGVkTG9naW5DcmVkZW50aWFscy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzZXRVc2VybmFtZSk6IFNldHMgdGhlIHVzZXJuYW1lIHZpYSBJUEMuCisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6c2V0UGFzc3dvcmQpOiBTZXRzIHRoZSBwYXNzd29yZCB2aWEgSVBD
LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpn
ZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbik6IEdlbmVyYXRlcyBBc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbiB0bworICAgICAgICAgICAgYmUgc2VudCB0byB0aGUgcHJveHkuCisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnNldFVzZXJuYW1lKTogU2V0cyB0aGUgdXNlcm5hbWUgb24gdGhlIEhUTUxJ
bnB1dEVsZW1lbnQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldFBhc3N3b3JkKTogU2V0
cyB0aGUgcGFzc3dvcmQgb24gdGhlIEhUTUxJbnB1dEVsZW1lbnQuCisKIDIwMTctMDctMDYgIE1h
dHQgUmFqY2EgIDxtcmFqY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBidWlsZCB3aXRoIFZJ
REVPIHN1cHBvcnQgZGlzYWJsZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAppbmRleCA4Y2FlODJiYmI1YTY4MzI4N2NmNWNlZDM0ZjY2ODY5MmFjNDhhMTFhLi4zYWU1
OTgyY2ExNzUwNmZiMjdjZDU5OWQzN2QyYmFjZTYzZGNhOTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTg5NCw2ICs4OTQsMzcgQEAgYm9vbCBIVE1MSW5w
dXRFbGVtZW50Ojppc1RleHRUeXBlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlz
VGV4dFR5cGUoKTsKIH0KIAorYm9vbCBIVE1MSW5wdXRFbGVtZW50OjphY2NlcHRzQXV0b2ZpbGxl
ZExvZ2luQ3JlZGVudGlhbHMoKQoreworICAgIHJldHVybiBtX3VzZXJuYW1lRWxlbWVudCAmJiBt
X3Bhc3N3b3JkRWxlbWVudDsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRQYXNzd29y
ZChTdHJpbmcgcGFzc3dvcmQpCit7CisgICAgaWYgKGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVk
ZW50aWFscygpKSB7CisgICAgICAgIG1fcGFzc3dvcmRFbGVtZW50LT5zZXRWYWx1ZShwYXNzd29y
ZCk7CisgICAgICAgIG1fcGFzc3dvcmRFbGVtZW50LT5zZXRBdXRvRmlsbGVkKCk7CisgICAgfQor
fQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFVzZXJuYW1lKFN0cmluZyB1c2VybmFtZSkK
K3sKKyAgICBpZiAoYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCkpIHsKKyAgICAg
ICAgbV91c2VybmFtZUVsZW1lbnQtPnNldFZhbHVlKHVzZXJuYW1lKTsKKyAgICAgICAgbV91c2Vy
bmFtZUVsZW1lbnQtPnNldEF1dG9GaWxsZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTElucHV0
RWxlbWVudDo6c2V0UGFzc3dvcmRFbGVtZW50KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQgKnBh
c3N3b3JkRWxlbWVudCkKK3sKKyAgICBtX3Bhc3N3b3JkRWxlbWVudCA9IHBhc3N3b3JkRWxlbWVu
dDsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRVc2VybmFtZUVsZW1lbnQoV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCAqdXNlcm5hbWVFbGVtZW50KQoreworICAgIG1fdXNlcm5hbWVF
bGVtZW50ID0gdXNlcm5hbWVFbGVtZW50OworfQorCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dENoZWNrZWQoYm9vbCBub3dDaGVja2VkLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW50QmVo
YXZpb3IpCiB7CiAgICAgaWYgKGNoZWNrZWQoKSA9PSBub3dDaGVja2VkKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCBkMjYzMjdmZjgxZGE2MzQ5NmYwMzlkNzNkYzBh
NzAxYTc2N2IyYmQ5Li5mNDUxMzBjNWRmMmNhOWQ2ODE5NWZhZjIwMzg3NDUzN2U4YjYzMTkzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApAQCAtNzQsNiArNzQsMTIgQEAg
cHVibGljOgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQ
T1JUIFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0IGZpbmFsOwogCisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRVc2VybmFtZShTdHJpbmcpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
UGFzc3dvcmRFbGVtZW50KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQgKik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRVc2VybmFtZUVsZW1lbnQoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dCAqKTsKKwogICAgIC8vIFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUgZm9yIHR5cGU9ZGF0ZSwg
bnVtYmVyLCBvciByYW5nZS4gIERvbid0IGNhbGwgdGhpcyBmb3Igb3RoZXIgdHlwZXMuCiAgICAg
ZG91YmxlIG1pbmltdW0oKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVl
IGZvciB0eXBlPWRhdGUsIG51bWJlciwgb3IgcmFuZ2UuICBEb24ndCBjYWxsIHRoaXMgZm9yIG90
aGVyIHR5cGVzLgpAQCAtNDM3LDYgKzQ0Myw4IEBAIHByaXZhdGU6CiAKICAgICBBdG9taWNTdHJp
bmcgbV9uYW1lOwogICAgIFN0cmluZyBtX3ZhbHVlSWZEaXJ0eTsKKyAgICBXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50ICptX3Bhc3N3b3JkRWxlbWVudDsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50ICptX3VzZXJuYW1lRWxlbWVudDsKICAgICB1bnNpZ25lZCBtX3NpemU7CiAgICAgc2hv
cnQgbV9tYXhSZXN1bHRzOwogICAgIGJvb2wgbV9pc0NoZWNrZWQgOiAxOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IDE1ODQ4N2NlYmNlM2I5ZDcwODhkZTRjNGQy
NmE2ZDM1NGZlYjJiNDcuLmViYzM5NjI4MWUwNzBhYWY2MWIyZTMxMmU2YjExYmYyZTgzNmQxOGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKQEAgLTc5NCw3ICs3OTQs
MzUgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWRFbGVtZW50KEVsZW1lbnQqIGVs
ZW1lbnQsIEZyYW1lJiBuZXdGb2N1c2VkRnJhbWUKICAgICBSZWY8RnJhbWU+IHByb3RlY3RlZE5l
d0ZvY3VzZWRGcmFtZSA9IG5ld0ZvY3VzZWRGcmFtZTsKICAgICBSZWZQdHI8RnJhbWU+IG9sZEZv
Y3VzZWRGcmFtZSA9IGZvY3VzZWRGcmFtZSgpOwogICAgIFJlZlB0cjxEb2N1bWVudD4gb2xkRG9j
dW1lbnQgPSBvbGRGb2N1c2VkRnJhbWUgPyBvbGRGb2N1c2VkRnJhbWUtPmRvY3VtZW50KCkgOiBu
dWxscHRyOwotICAgIAorCisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKSB7
CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KGVsZW1lbnQpOworICAgICAgICBpZiAoaW5wdXRFbGVtZW50LT5pc1Bhc3N3
b3JkRmllbGQoKSkgeworICAgICAgICAgICAgLy8gcGFzc3dvcmQgZmllbGQgaGlnaGxpZ2h0ZWQs
IG5vdyBmaW5kIGEgdXNlcm5hbWVmaWVsZAorICAgICAgICAgICAgRWxlbWVudCogcHJldmlvdXNF
bGVtZW50ID0gcHJldmlvdXNGb2N1c2FibGVFbGVtZW50KCplbGVtZW50KTsKKyAgICAgICAgICAg
IGlmIChwcmV2aW91c0VsZW1lbnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4ocHJldmlvdXNFbGVt
ZW50KSkgeworICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIHVzZXJuYW1lRmllbGQg
PSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihwcmV2aW91c0VsZW1lbnQpOworICAgICAgICAg
ICAgICAgIGlmICh1c2VybmFtZUZpZWxkLT5pc1RleHRGaWVsZCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIHdlJ3ZlIG5vdyBnb3QgYSBwYXNzd29yZCBmaWVsZCBhbmQgYSB1c2VybmFtZSBm
aWVsZAorICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQtPnNldFBhc3N3b3JkRWxlbWVu
dChpbnB1dEVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQtPnNldFVz
ZXJuYW1lRWxlbWVudCh1c2VybmFtZUZpZWxkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyB1c2VybmFtZSBmaWVsZCBo
aWdobGlnaHRlZCwgbm93IGZpbmQgYSBwYXNzd29yZGZpZWxkCisgICAgICAgICAgICBFbGVtZW50
KiBuZXh0RWxlbWVudCA9IG5leHRGb2N1c2FibGVFbGVtZW50KCplbGVtZW50KTsKKyAgICAgICAg
ICAgIGlmIChuZXh0RWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihuZXh0RWxlbWVudCkp
IHsKKyAgICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBwYXNzd29yZEZpZWxkID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4obmV4dEVsZW1lbnQpOworICAgICAgICAgICAgICAgIGlm
IChwYXNzd29yZEZpZWxkLT5pc1Bhc3N3b3JkRmllbGQoKSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSd2ZSBub3cgZ290IGEgcGFzc3dvcmQgZmllbGQgYW5kIGEgdXNlcm5hbWUgZmllbGQK
KyAgICAgICAgICAgICAgICAgICAgaW5wdXRFbGVtZW50LT5zZXRQYXNzd29yZEVsZW1lbnQocGFz
c3dvcmRGaWVsZCk7CisgICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudC0+c2V0VXNlcm5h
bWVFbGVtZW50KGlucHV0RWxlbWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisKICAgICBFbGVtZW50KiBvbGRGb2N1c2VkRWxlbWVudCA9
IG9sZERvY3VtZW50ID8gb2xkRG9jdW1lbnQtPmZvY3VzZWRFbGVtZW50KCkgOiBudWxscHRyOwog
ICAgIGlmIChvbGRGb2N1c2VkRWxlbWVudCA9PSBlbGVtZW50KQogICAgICAgICByZXR1cm4gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50
LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5oCmluZGV4IGEw
OTIzNzdiMWRlOTE1ZjU2OGE1MzBlOWUzYWVkM2YwYjMzMjlkZmYuLjEyOWVhYjU5ZjkyZTNmNzBi
NjZlMGZlZGQ1MzJiMGM4ZjViMmVkYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0RP
TS9ET01IVE1MSW5wdXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvRE9NL0RPTUhU
TUxJbnB1dEVsZW1lbnQuaApAQCAtMjUsMTMgKzI1LDE1IEBACiAKICNpbXBvcnQgPFdlYktpdExl
Z2FjeS9ET01IVE1MRWxlbWVudC5oPgogCisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dFRyYWl0
cy5oPgorCiBAY2xhc3MgRE9NRmlsZUxpc3Q7CiBAY2xhc3MgRE9NSFRNTEZvcm1FbGVtZW50Owog
QGNsYXNzIE5TU3RyaW5nOwogQGNsYXNzIE5TVVJMOwogCiBXRUJLSVRfQ0xBU1NfQVZBSUxBQkxF
X01BQygxMF80KQotQGludGVyZmFjZSBET01IVE1MSW5wdXRFbGVtZW50IDogRE9NSFRNTEVsZW1l
bnQKK0BpbnRlcmZhY2UgRE9NSFRNTElucHV0RWxlbWVudCA6IERPTUhUTUxFbGVtZW50PFVJVGV4
dElucHV0VHJhaXRzPgogQHByb3BlcnR5IChjb3B5KSBOU1N0cmluZyAqYWNjZXB0OwogQHByb3Bl
cnR5IChjb3B5KSBOU1N0cmluZyAqYWx0OwogQHByb3BlcnR5IEJPT0wgYXV0b2ZvY3VzIFdFQktJ
VF9BVkFJTEFCTEVfTUFDKDEwXzYpOwpAQCAtNjIsNCArNjQsNyBAQCBXRUJLSVRfQ0xBU1NfQVZB
SUxBQkxFX01BQygxMF80KQogLSAodm9pZClzZWxlY3Q7CiAtICh2b2lkKXNldFNlbGVjdGlvblJh
bmdlOihpbnQpc3RhcnQgZW5kOihpbnQpZW5kIFdFQktJVF9BVkFJTEFCTEVfTUFDKDEwXzUpOwog
LSAodm9pZCljbGljazsKKy0gKHZvaWQpc2V0VXNlcm5hbWU6KE5TU3RyaW5nICopdXNlcm5hbWU7
CistICh2b2lkKXNldFBhc3N3b3JkOihOU1N0cmluZyAqKXBhc3N3b3JkOworCiBAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbSBiL1Nv
dXJjZS9XZWJLaXQvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCmluZGV4IDliYzgwM2M1
OTU4NTAxYzg2OTA5NDUyMDNmYmEyYTcwOTg1NzZkMWEuLjI2YmRhMDRhMGJjNjUyZjRlZGYyOTU1
MGU1ODU4NzIzNjFkNzk1MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01I
VE1MSW5wdXRFbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01IVE1MSW5w
dXRFbGVtZW50Lm1tCkBAIC02NjYsNiArNjY2LDI0IEBAIC0gKHZvaWQpc2V0VmFsdWVGb3JVc2Vy
OihOU1N0cmluZyAqKWluVmFsdWUKICAgICBJTVBMLT5zZXRWYWx1ZUZvclVzZXIoaW5WYWx1ZSk7
CiB9CiAKKy0gKEJPT0wpYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5h
Y2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKTsKK30KKworLSAodm9pZClzZXRQYXNz
d29yZDooTlNTdHJpbmcgKilwYXNzd29yZAoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5zZXRQYXNzd29yZChwYXNzd29yZCk7Cit9CisKKy0g
KHZvaWQpc2V0VXNlcm5hbWU6KE5TU3RyaW5nICopdXNlcm5hbWUKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPnNldFVzZXJuYW1l
KHVzZXJuYW1lKTsKK30KKwogQGVuZAogCiBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBjb3Jl
KERPTUhUTUxJbnB1dEVsZW1lbnQgKndyYXBwZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvbWFj
L0RPTS9ET01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5oCmluZGV4IDE4ZDkzNzYyZWQ4NzU2ODll
YjY2OTk2ZDY3OTQ0ZjZkZDFhMTEzYzUuLjA2YTY4Y2ZkN2U1NmMxNGZjMzZmNWQ2YjcxZjk4MDE0
YTBlNDk5MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01IVE1MSW5wdXRF
bGVtZW50UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0RPTS9ET01IVE1MSW5wdXRF
bGVtZW50UHJpdmF0ZS5oCkBAIC01OSw0ICs1OSw1IEBACiAtICh2b2lkKXNldFJhbmdlVGV4dDoo
TlNTdHJpbmcgKilyZXBsYWNlbWVudDsKIC0gKHZvaWQpc2V0UmFuZ2VUZXh0OihOU1N0cmluZyAq
KXJlcGxhY2VtZW50IHN0YXJ0Oih1bnNpZ25lZClzdGFydCBlbmQ6KHVuc2lnbmVkKWVuZCBzZWxl
Y3Rpb25Nb2RlOihOU1N0cmluZyAqKXNlbGVjdGlvbk1vZGU7CiAtICh2b2lkKXNldFZhbHVlRm9y
VXNlcjooTlNTdHJpbmcgKil2YWx1ZTsKKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAKaW5kZXggYWM5NmYwMGI3YTQ1MWE4M2Vi
YWYyNzNkMzE1MGM0ODMyZWE4MzMyNC4uZThkZjAzZDIwYTVjZjUzYjFjOTcxOTg3NWM2MDg1ZGNh
NmMzMjhjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Fzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24uY3BwCkBAIC04NSw2ICs4NSw3IEBAIHZvaWQgQXNzaXN0ZWROb2RlSW5mb3JtYXRp
b246OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB2
YWx1ZTsKICAgICBlbmNvZGVyIDw8IHZhbHVlQXNOdW1iZXI7CiAgICAgZW5jb2RlciA8PCB0aXRs
ZTsKKyAgICBlbmNvZGVyIDw8IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKICAg
ICBlbmNvZGVyLmVuY29kZUVudW0oYXV0b2ZpbGxGaWVsZE5hbWUpOwogfQogCkBAIC0xNTksNiAr
MTYwLDkgQEAgYm9vbCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZGVjb2RlKElQQzo6RGVjb2Rl
ciYgZGVjb2RlciwgQXNzaXN0ZWROb2RlSW5mb3JtYXQKICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC50aXRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5h
dXRvZmlsbEZpZWxkTmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaAppbmRleCBjNjcxOTM3NTll
ZDM5NDRlY2JkODJhMzhiZmM5NjBiNzdhNjE0YWU0Li5mMDgzOTg3YzRiMmFjN2FmMTFlYTI5Y2Y4
M2EzMDVlZmU2ZTNmMTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24uaApAQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBBc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbiB7CiAgICAgU3RyaW5nIHZhbHVlOwogICAgIGRvdWJsZSB2YWx1ZUFzTnVtYmVy
IHsgMCB9OwogICAgIFN0cmluZyB0aXRsZTsKKyAgICBib29sIGFjY2VwdHNBdXRvZmlsbGVkTG9n
aW5DcmVkZW50aWFsczsKICAgICBXZWJDb3JlOjpBdXRvZmlsbEZpZWxkTmFtZSBhdXRvZmlsbEZp
ZWxkTmFtZSB7IFdlYkNvcmU6OkF1dG9maWxsRmllbGROYW1lOjpOb25lIH07CiAKICAgICB2b2lk
IGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAppbmRleCA4Yzk4Zjk5YTlmMzg4YjkyODI3YTc0Yjg4ZmMzNGFlZjg0NjFiOGVl
Li5mZTUzZThlZmQyOTRjYzZhZmViZjU2N2EwNjE5NzJhNTNlMmE0ZDA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC01NTcsNiArNTU3LDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldElzU2Nyb2xsaW5nT3Jab29taW5nKGJvb2wpOwogICAgIHZvaWQgcmVxdWVz
dFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KFdlYkNvcmU6OlRleHRHcmFu
dWxhcml0eSwgdWludDMyX3Qgb2Zmc2V0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAg
IHZvaWQgcmVxdWVzdFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNl
dCwgY29uc3QgU3RyaW5nJiwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpTZWxlY3Rpb25SZWN0PiYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKKworICAgIGJvb2wg
YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCk7CisgICAgdm9pZCBzZXRVc2VybmFt
ZShTdHJpbmcpOworICAgIHZvaWQgc2V0UGFzc3dvcmQoU3RyaW5nKTsKICNpZiBFTkFCTEUoREFU
QV9JTlRFUkFDVElPTikKICAgICB2b2lkIGRpZFBlcmZvcm1EYXRhSW50ZXJhY3Rpb25Db250cm9s
bGVyT3BlcmF0aW9uKGJvb2wgaGFuZGxlZCk7CiAgICAgdm9pZCBkaWRIYW5kbGVTdGFydERhdGFJ
bnRlcmFjdGlvblJlcXVlc3QoYm9vbCBzdGFydGVkKTsKQEAgLTE5ODMsNiArMTk4Nyw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2hhc0RlZmVycmVkU3RhcnRBc3Npc3RpbmdOb2RlIHsgZmFsc2Ug
fTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Tm9kZUFzc2lzdGFuY2VBcmd1bWVudHM+IG1fZGVmZXJy
ZWROb2RlQXNzaXN0YW5jZUFyZ3VtZW50czsKICAgICBib29sIG1fZm9yY2VBbHdheXNVc2VyU2Nh
bGFibGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVu
dGlhbHMgeyBmYWxzZSB9OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaAppbmRleCA2M2ExZmRm
YWY4YjNiMDc1MjFlNGM4MGEzMmVjMmRlNzcyOGJjNDk2Li5lZmNhZTY1NTExNTg5ZGE3NDJjNjJi
YmRkZGRlZjQ4ZWY1ODg0OWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXcuaApAQCAtODMsNiArODMsOSBAQCBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIC0g
KHZvaWQpZGlkWm9vbVRvU2NhbGU6KENHRmxvYXQpc2NhbGU7CiAtICh2b2lkKXdpbGxTdGFydFpv
b21PclNjcm9sbDsKIAorLSAodm9pZClzZXRVc2VybmFtZTooTlNTdHJpbmcgKil1c2VybmFtZTsK
Ky0gKHZvaWQpc2V0UGFzc3dvcmQ6KE5TU3RyaW5nICopcGFzc3dvcmQ7CisKIC0gKHZvaWQpX3dl
YlZpZXdEZXN0cm95ZWQ7CiAKIC0gKHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OkRyYXdpbmdBcmVh
UHJveHk+KV9jcmVhdGVEcmF3aW5nQXJlYVByb3h5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCmluZGV4IDUzMDY4MmMzMjk5OGYzOGJjNjliOWUxYTI0
NjRlMDFjNDljODQxOWEuLjZhYTliM2YzMDYwMTU1ZmQxYzYyYzFhYTQ2N2RiZTJmYzM2ZDYxNzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KQEAg
LTYyMCw2ICs2MjAsMjEgQEAgLSAodm9pZClfem9vbVRvRm9jdXNSZWN0OihDR1JlY3QpcmVjdFRv
Rm9jdXMgc2VsZWN0aW9uUmVjdDooQ0dSZWN0KXNlbGVjdGlvblJlY3QKICAgICAgICAgICAgICAg
ICAgICBmb3JjZVNjcm9sbDpmb3JjZVNjcm9sbF07CiB9CiAKKy0gKHZvaWQpc2V0UGFzc3dvcmQ6
KE5TU3RyaW5nICopcGFzc3dvcmQKK3sKKyAgICBfcGFnZS0+c2V0UGFzc3dvcmQocGFzc3dvcmQp
OworfQorCistICh2b2lkKXNldFVzZXJuYW1lOihOU1N0cmluZyAqKXVzZXJuYW1lCit7CisgICAg
X3BhZ2UtPnNldFVzZXJuYW1lKHVzZXJuYW1lKTsKK30KKworLShCT09MKWFjY2VwdHNBdXRvZmls
bGVkTG9naW5DcmVkZW50aWFscworeworICAgIHJldHVybiBfcGFnZS0+YWNjZXB0c0F1dG9maWxs
ZWRMb2dpbkNyZWRlbnRpYWxzKCk7Cit9CisKIC0gKEJPT0wpX3pvb21Ub1JlY3Q6KENHUmVjdCl0
YXJnZXRSZWN0IHdpdGhPcmlnaW46KENHUG9pbnQpb3JpZ2luIGZpdEVudGlyZVJlY3Q6KEJPT0wp
Zml0RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNj
YWxlOihkb3VibGUpbWF4aW11bVNjYWxlIG1pbmltdW1TY3JvbGxEaXN0YW5jZTooQ0dGbG9hdClt
aW5pbXVtU2Nyb2xsRGlzdGFuY2UKIHsKICAgICByZXR1cm4gW193ZWJWaWV3IF96b29tVG9SZWN0
OnRhcmdldFJlY3Qgd2l0aE9yaWdpbjpvcmlnaW4gZml0RW50aXJlUmVjdDpmaXRFbnRpcmVSZWN0
IG1pbmltdW1TY2FsZTptaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOm1heGltdW1TY2FsZSBtaW5p
bXVtU2Nyb2xsRGlzdGFuY2U6bWluaW11bVNjcm9sbERpc3RhbmNlXTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggYzFiYTc2NGYwMTU0
MjcxMWUyOWFkNWY5YTA3MzQyNzc2ODI4YWJiYS4uZDE1ZDNhZmJlOTVjNWI2NGVjZTVlMjM3M2Fj
YzQ5NmUxOTllNDhjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
ZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW0KQEAgLTkwMyw2ICs5MDMsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
R2V0VGFwSGlnaGxpZ2h0R2VvbWV0cmllcyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNv
cgogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRBc3Npc3RpbmdOb2RlKGNvbnN0IEFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbiwgYm9vbCB1c2VySXNJbnRlcmFjdGluZywgYm9v
bCBibHVyUHJldmlvdXNOb2RlLCBjb25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCiB7CisgICAgbV9h
Y2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgPSBpbmZvcm1hdGlvbi5hY2NlcHRzQXV0
b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CisKICAgICBBUEk6Ok9iamVjdCogdXNlckRhdGFPYmpl
Y3QgPSBwcm9jZXNzKCkudHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3Qo
KSkuZ2V0KCk7CiAgICAgaWYgKG1fZWRpdG9yU3RhdGUuaXNNaXNzaW5nUG9zdExheW91dERhdGEp
IHsKICAgICAgICAgbV9kZWZlcnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzID0gc3RkOjptYWtl
X3VuaXF1ZTxOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cz4oTm9kZUFzc2lzdGFuY2VBcmd1bWVudHMg
eyBpbmZvcm1hdGlvbiwgdXNlcklzSW50ZXJhY3RpbmcsIGJsdXJQcmV2aW91c05vZGUsIHVzZXJE
YXRhT2JqZWN0IH0pOwpAQCAtOTIyLDYgKzkyNCwyMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3Rv
cEFzc2lzdGluZ05vZGUoKQogICAgIG1fcGFnZUNsaWVudC5zdG9wQXNzaXN0aW5nTm9kZSgpOwog
fQogCitib29sIFdlYlBhZ2VQcm94eTo6YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxz
KCkKK3sKKyAgICByZXR1cm4gbV9hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7Cit9
CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRVc2VybmFtZShTdHJpbmcgdXNlcm5hbWUpCit7Cisg
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRVc2VybmFtZSh1c2VybmFt
ZSksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnNldFBhc3N3b3JkKFN0cmlu
ZyBwYXNzd29yZCkKK3sKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
dFBhc3N3b3JkKHBhc3N3b3JkKSwgbV9wYWdlSUQpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2hvd0luc3BlY3RvckhpZ2hsaWdodChjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmIGhpZ2hsaWdo
dCkKIHsKICAgICBtX3BhZ2VDbGllbnQuc2hvd0luc3BlY3RvckhpZ2hsaWdodChoaWdobGlnaHQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMTQy
ZjU3ZDU3NWE2YTZmMTMxNDZhOWJmNDIyNDJlOTJjNzE4NGM2MS4uMjZmMDg2ZmYwMjQxM2MxMjQw
NWVhYmRhNzEwMjI5MzFiMmRmZGMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCkBAIC01NzMsNiArNTczLDggQEAgcHVibGljOgogICAgIHZvaWQgc3Rv
cEludGVyYWN0aW9uKCk7CiAgICAgdm9pZCBwZXJmb3JtQWN0aW9uT25FbGVtZW50KHVpbnQzMl90
IGFjdGlvbik7CiAgICAgdm9pZCBmb2N1c05leHRBc3Npc3RlZE5vZGUoYm9vbCBpc0ZvcndhcmQs
IENhbGxiYWNrSUQpOworICAgIHZvaWQgc2V0VXNlcm5hbWUoU3RyaW5nKTsKKyAgICB2b2lkIHNl
dFBhc3N3b3JkKFN0cmluZyk7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZShjb25zdCBT
dHJpbmcmKTsKICAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIoZG91YmxlKTsK
ICAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVNlbGVjdGVkSW5kZXgodWludDMyX3QgaW5kZXgsIGJv
b2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDllMzIxMzNjZDc3MjJh
OWVjMTA0ZTM5MjFjODVlMjY3YzI5ZTRjOGIuLjZjY2E5ZGZjYjM4MWEzOTcwMGYwODY5ODc2Y2Vh
NmNlOGRkZjg0ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC04Myw2ICs4Myw4IEBAIG1lc3NhZ2VzIC0+IFdl
YlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMy
X3QgYWN0aW9uKQogICAgIEZvY3VzTmV4dEFzc2lzdGVkTm9kZShib29sIGlzRm9yd2FyZCwgV2Vi
S2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgU2V0QXNzaXN0ZWROb2RlVmFsdWUoU3Ry
aW5nIHZhbHVlKQorICAgIFNldFBhc3N3b3JkKFN0cmluZyBwYXNzd29yZCkKKyAgICBTZXRVc2Vy
bmFtZShTdHJpbmcgdXNlcm5hbWUpCiAgICAgU2V0QXNzaXN0ZWROb2RlVmFsdWVBc051bWJlcihk
b3VibGUgdmFsdWUpCiAgICAgU2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleCh1aW50MzJfdCBp
bmRleCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKQogICAgIEFwcGxpY2F0aW9uV2lsbFJl
c2lnbkFjdGl2ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggNDc1YWM4NmNhZmQ5ZWEwMTNhMTliOTdiMGZmYmQyNGRk
ZTU2ZDlhYi4uOTNlMzQ5YzIyNDgzMmU1Y2RhOWZkOWZlZDhjYzkzZWM0MDA2ODBjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQpAQCAtMjc1OSw2ICsyNzU5LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbihBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYgaW5mb3JtYXRpb24pCiAgICAgICAgIGlu
Zm9ybWF0aW9uLmF1dG9maWxsRmllbGROYW1lID0gV2ViQ29yZTo6dG9BdXRvZmlsbEZpZWxkTmFt
ZShlbGVtZW50LmF1dG9maWxsRGF0YSgpLmZpZWxkTmFtZSk7CiAgICAgfSBlbHNlIGlmIChpczxI
VE1MSW5wdXRFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVs
ZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9hc3Npc3RlZE5v
ZGUpOworICAgICAgICBpbmZvcm1hdGlvbi5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlh
bHMgPSBlbGVtZW50LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscygpOwogICAgICAg
ICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBlbGVtZW50LmZvcm0oKTsKICAgICAgICAgaWYgKGZv
cm0pCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5mb3JtQWN0aW9uID0gZm9ybS0+Z2V0VVJMQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6YWN0aW9uQXR0cik7CkBAIC0yODI1LDYgKzI4MjYs
MTggQEAgdm9pZCBXZWJQYWdlOjpzZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25NaW5pbXVtTGF5b3V0
U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgICAgIHZpZXdwb3J0Q29uZmlndXJhdGlv
bkNoYW5nZWQoKTsKIH0KIAordm9pZCBXZWJQYWdlOjpzZXRVc2VybmFtZShTdHJpbmcgdXNlcm5h
bWUpCit7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fYXNzaXN0ZWROb2RlLmdldCgp
KSkKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKS5z
ZXRVc2VybmFtZSh1c2VybmFtZSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6c2V0UGFzc3dvcmQoU3Ry
aW5nIHBhc3N3b3JkKQoreworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihtX2Fzc2lzdGVk
Tm9kZS5nZXQoKSkpCisgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lz
dGVkTm9kZSkuc2V0UGFzc3dvcmQocGFzc3dvcmQpOworfQorCiB2b2lkIFdlYlBhZ2U6OnNldE1h
eGltdW1Vbm9ic2N1cmVkU2l6ZShjb25zdCBGbG9hdFNpemUmIG1heGltdW1Vbm9ic2N1cmVkU2l6
ZSkKIHsKICAgICBtX21heGltdW1Vbm9ic2N1cmVkU2l6ZSA9IG1heGltdW1Vbm9ic2N1cmVkU2l6
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316313</attachid>
            <date>2017-07-24 13:27:37 -0700</date>
            <delta_ts>2017-08-02 14:15:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170724132736.patch</filename>
            <type>text/plain</type>
            <size>21607</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5ODI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDdkOWYyNTRkMzY3OWEz
MjE2MDM0YmY4M2IxNjI5MzdmMmYyZTlmYS4uNWI5MDc1MmQzOWM4YWNkNzUzMTQ0YzFjNmM2OTA2
YmUyOTYzMDUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE3LTA3LTI0ICBGcmVk
ZXJpayBSaWVkZWwgIDxmcmllZGVsQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBvc2Ugd2F5IHRv
IHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3JtIGNvbnRyb2xzIGFzIHtMZWdhY3kgV2ViS2l0
LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTE1OTk4Nj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bmV4dEZvY3VzYWJsZUVsZW1lbnQpOiBS
ZXR1cm5zIHRoZSBuZXh0IGZvY3VzYWJsZSBlbGVtZW50IGluIHRoZSBkb2N1bWVudC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnQpOiBSZXR1cm5z
IHRoZSBwcmV2aW91cyBmb2N1c2FibGUgZWxlbWVudAorICAgICAgICBpbiB0aGUgZG9jdW1lbnQu
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmFjY2VwdHNBdXRv
ZmlsbGVkTG9naW5DcmVkZW50aWFscyk6IERldGVybWluZXMgaWYgdGhlIEhUTUxJbnB1dEVsZW1l
bnQKKyAgICAgICAgaXMgY2FwYWJsZSBvZiByZWNlaXZpbmcgdXNlcm5hbWUvcGFzc3dvcmQgaW5m
b3JtYXRpb24sIHdoZW4gdGhlIGRvY3VtZW50cyBpbmNsdWRlcyBhCisgICAgICAgIHVzZXJuYW1l
IGFuZCBwYXNzd29yZCBmaWVsZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyk6IEF1dG9maWxscyB1c2VybmFtZSBhbmQgcGFzc3dv
cmQgaW50byB0aGUKKyAgICAgICAgZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50Ojpjb21wdXRlVXNlcm5hbWVBbmRQYXNzd29yZEVsZW1lbnRzKTogUHJpdmF0ZSBt
ZXRob2QgaXMgYmVpbmcgY2FsbGVkIHRvCisgICAgICAgIGRldGVjdCB1c2VybmFtZSBhbmQgcGFz
c3dvcmQgZmllbGQgcGFpcnMgaW4gdGhlIGRvY3VtZW50LgorICAgICAgICAqIGh0bWwvSFRNTElu
cHV0RWxlbWVudC5oOgorCiAyMDE3LTA3LTI0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbV1BFXSBsaWJlcG94eSBoZWFkZXJzIGNhbiB1c2UgRUdMX0NB
U1QsIHdoaWNoIG1pZ2h0IG5vdCBiZSBkZWZpbmVkIGJ5IGVnbHBsYXRmb3JtLmgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggZmVhNjhlMTE1OTA1MDdiNGVlZTNjMGM4MjY1NWY0OGQzZTVmM2ZmNi4uNDlmMTdhNjJlMmRj
MjEyOWI1ZTgxYTk3NGIwNjU3ODZkZjc1ODUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAor
MjAxNy0wNy0yNCAgRnJlZGVyaWsgUmllZGVsICA8ZnJpZWRlbEBhcHBsZS5jb20+CisKKyAgICAg
ICAgRXhwb3NlIHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZpZWQgZm9ybSBjb250cm9scyBh
cyB7TGVnYWN5IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDM5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzEx
NTk5ODY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6CisgICAgICAgICogU2hhcmVkL0Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb246OmVuY29kZSk6IEVuY29kZXMgYWRkaXRpb25hbCBub2RlIGluZm9ybWF0aW9uCisgICAg
ICAgIGZvciBpbmRpY2F0aW5nIGlmIHRoZSBub2RlIGFjY2VwdHMgYXV0b2ZpbGxlZCBsb2dpbiBj
cmVkZW50aWFscy4KKyAgICAgICAgKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmRl
Y29kZSk6IERlY29kZXMgYWRkaXRpb25hbCBub2RlIGluZm9ybWF0aW9uCisgICAgICAgIGZvciBp
bmRpY2F0aW5nIGlmIHRoZSBub2RlIGFjY2VwdHMgYXV0b2ZpbGxlZCBsb2dpbiBjcmVkZW50aWFs
cy4KKyAgICAgICAgKiBTaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3Lm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFjY2VwdHNBdXRvZmlsbGVk
TG9naW5DcmVkZW50aWFsc10pOiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIGlmCisgICAgICAgIHRo
ZSBXS0NvbnRlbnRWaWV3IGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGF1dG9maWxsZWQgbG9naW4g
Y3JlZGVudGlhbHMuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaW5zZXJ0VGV4dFN1Z2dlc3Rpb246
XSk6IFRoaXMgbWV0aG9kIGZpbGxzIGEgbG9naW4gc3VnZ2VzdGlvbgorICAgICAgICAoVUlLZXli
b2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uKSBpbnRvIHRoZSBXS0NvbnRlbnRWaWV3Lgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnN0YXJ0QXNzaXN0aW5nTm9kZSk6IFRyYW5zcG9ydHMgdGhlIGlu
Zm9ybWF0aW9uIGlmIHRoZSBjdXJyZW50bHkKKyAgICAgICAgaGlnaGxpZ2h0ZWQgbm9kZSBhY2Nl
cHRzIGF1dG9maWxsZWQgbG9naW4gY3JlZGVudGlhbHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTogRGV0ZXJtaW5lcyBp
ZiB0aGUgV2ViUGFnZQorICAgICAgICBhY2NlcHRzIGF1dG9maWxsZWQgbG9naW4gY3JlZGVudGlh
bHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRp
YWxzKTogRmlsbHMgdGhlIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlCisgICAgICAgIFdlYlBh
Z2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKTogVHJhbnNwb3J0cyB0aGUgaW5mb3JtYXRpb24g
aWYgdGhlIGN1cnJlbnRseQorICAgICAgICBoaWdobGlnaHRlZCBub2RlIGFjY2VwdHMgYXV0b2Zp
bGxlZCBsb2dpbiBjcmVkZW50aWFscy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YXV0b2Zp
bGxMb2dpbkNyZWRlbnRpYWxzKTogRmlsbHMgdGhlIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhl
CisgICAgICAgIFdlYlBhZ2UuCisKIDIwMTctMDctMjMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJFR1JFU1NJT04ocjIx
OTcxMyk6IFtHVEtdW1dQRV0gRml4IGRlZmF1bHQgZmF2aWNvbiBkYXRhYmFzZSBwYXRjaC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBjZjc4MzhkMjE1ODNiMWJmYTRkNTY3YzIxNTYz
ZjlhYmNmYTlhOTgyLi4yNGMyNzlhNWQ0NTc5NTAzN2E1ZDJmMGZmYTEyZDJmOGE0NWFiYjk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMDctMjQg
IEZyZWRlcmlrIFJpZWRlbCAgPGZyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3
YXkgdG8gc2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBX
ZWJLaXQsIFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxMTU5OTg2PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTUhU
TUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBET00vRE9NSFRNTElucHV0RWxlbWVudC5tbToK
KyAgICAgICAgKC1bRE9NSFRNTElucHV0RWxlbWVudCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3Jl
ZGVudGlhbHNdKTogUmV0dXJucyBpZiB0aGUgRE9NSFRNTElucHV0RWxlbWVudAorICAgICAgICBp
cyBjYXBhYmxlIG9mIGZpbGxpbmcgb3V0IGEgdXNlcm5hbWUvcGFzc3dvcmQgbG9naW4gcGFpci4K
KyAgICAgICAgKC1bRE9NSFRNTElucHV0RWxlbWVudCBpbnNlcnRUZXh0U3VnZ2VzdGlvbjpdKTog
VGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB0byBhdXRvZmlsbCBhCisgICAgICAgIHVzZXJuYW1l
L3Bhc3N3b3JkIGNvbWJpbmF0aW9uLgorCiAyMDE3LTA3LTIzICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgRHJvcCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gY2xh
c3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDdhMmUyMDdjY2NmYzNlN2EzMzY1ZWRmMGNl
N2Y0NzdjZDdjOGRhNmEuLjkwN2ZmYTcxYjBkNmU3OTE4MDc1OTEwOTNmY2I2OGFhZGExNTUxNDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNjg4NSw2ICs2ODg1LDE2IEBAIGJvb2wgRG9j
dW1lbnQ6Omhhc0ZvY3VzKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0VsZW1lbnQq
IERvY3VtZW50OjpuZXh0Rm9jdXNhYmxlRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQoreworICAg
IHJldHVybiBwYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLm5leHRGb2N1c2FibGVFbGVtZW50KGVs
ZW1lbnQpOworfQorCitFbGVtZW50KiBEb2N1bWVudDo6cHJldmlvdXNGb2N1c2FibGVFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIHBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCkucHJldmlvdXNGb2N1c2FibGVFbGVtZW50KGVsZW1lbnQpOworfQorCiAjaWYgRU5BQkxFKFdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKIAogc3RhdGljIHVpbnQ2NF90IG5leHRQbGF5YmFja1Rh
cmdldENsaWVudENvbnRleHRJZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDQ2YWQwYzhjODE5
OTRmNzJlZDMzZTMwY2MwMjEzYjQwNDBlN2FjMmMuLjJkZGEyZDc3NWNhNmMxMjA0NWM1Mjc5NTg3
ZjRkM2RjOWIwZjlkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zOTIsNiArMzkyLDggQEAg
cHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogYWN0aXZlRWxlbWVudCgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzRm9jdXMoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBFbGVtZW50KiBuZXh0Rm9jdXNhYmxlRWxlbWVudChFbGVtZW50Jik7CisgICAgV0VCQ09S
RV9FWFBPUlQgRWxlbWVudCogcHJldmlvdXNGb2N1c2FibGVFbGVtZW50KEVsZW1lbnQmKTsKIAog
ICAgIGJvb2wgaGFzTWFuaWZlc3QoKSBjb25zdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDNlZmE1ZTc5YmQxOWY4YzNmMTM5MmNlODY0Y2MyNjhi
M2I4ZDBjZTcuLmE4YzQ5OWJkNTJmMjdlYTQ2MzU4OGE0NTI2ZjdiOTczOTYwNmVmMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGaWxlSW5wdXRUeXBlLmgiCiAj
aW5jbHVkZSAiRmlsZUxpc3QuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJGb3JtQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVTZWxlY3Rpb24uaCIKQEAgLTg5NCw2ICs4OTUsNTYgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50
Ojppc1RleHRUeXBlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlzVGV4dFR5cGUo
KTsKIH0KIAorYm9vbCBIVE1MSW5wdXRFbGVtZW50OjphY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3Jl
ZGVudGlhbHMoKQoreworICAgIEhUTUxJbnB1dEVsZW1lbnQqIHVzZXJuYW1lRWxlbWVudCA9IG51
bGxwdHI7CisgICAgSFRNTElucHV0RWxlbWVudCogcGFzc3dvcmRFbGVtZW50ID0gbnVsbHB0cjsK
KyAgICByZXR1cm4gY29tcHV0ZVVzZXJuYW1lQW5kUGFzc3dvcmRFbGVtZW50cyh0aGlzLCB1c2Vy
bmFtZUVsZW1lbnQsIHBhc3N3b3JkRWxlbWVudCk7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVu
dDo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3
b3JkKQoreworICAgIEhUTUxJbnB1dEVsZW1lbnQqIHVzZXJuYW1lRWxlbWVudCA9IG51bGxwdHI7
CisgICAgSFRNTElucHV0RWxlbWVudCogcGFzc3dvcmRFbGVtZW50ID0gbnVsbHB0cjsKKyAgICBp
ZiAoY29tcHV0ZVVzZXJuYW1lQW5kUGFzc3dvcmRFbGVtZW50cyh0aGlzLCB1c2VybmFtZUVsZW1l
bnQsIHBhc3N3b3JkRWxlbWVudCkpIHsKKyAgICAgICAgdXNlcm5hbWVFbGVtZW50LT5zZXRWYWx1
ZSh1c2VybmFtZSk7CisgICAgICAgIHVzZXJuYW1lRWxlbWVudC0+c2V0QXV0b0ZpbGxlZCgpOwor
ICAgICAgICBwYXNzd29yZEVsZW1lbnQtPnNldFZhbHVlKHBhc3N3b3JkKTsKKyAgICAgICAgcGFz
c3dvcmRFbGVtZW50LT5zZXRBdXRvRmlsbGVkKCk7CisgICAgfQorfQorCitib29sIEhUTUxJbnB1
dEVsZW1lbnQ6OmNvbXB1dGVVc2VybmFtZUFuZFBhc3N3b3JkRWxlbWVudHMoRWxlbWVudCAqc3Rh
cnQsIEhUTUxJbnB1dEVsZW1lbnQqJiB1c2VybmFtZUVsZW1lbnQsIEhUTUxJbnB1dEVsZW1lbnQq
JiBwYXNzd29yZEVsZW1lbnQpCit7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KHN0YXJ0
KSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50PihzdGFydCk7CisgICAgICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUGFz
c3dvcmRGaWVsZCgpKSB7CisgICAgICAgICAgICAvLyBQYXNzd29yZCBlbGVtZW50IGhpZ2hsaWdo
dGVkLCBub3cgZmluZCBhIHVzZXJuYW1lIGVsZW1lbnQuCisgICAgICAgICAgICBFbGVtZW50KiBw
cmV2aW91c0VsZW1lbnQgPSBkb2N1bWVudCgpLnByZXZpb3VzRm9jdXNhYmxlRWxlbWVudCgqc3Rh
cnQpOworICAgICAgICAgICAgaWYgKHByZXZpb3VzRWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVt
ZW50PihwcmV2aW91c0VsZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVu
dCogcG90ZW50aWFsVXNlcm5hbWVGaWVsZCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHBy
ZXZpb3VzRWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKHBvdGVudGlhbFVzZXJuYW1lRmll
bGQtPmlzVGV4dEZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmRFbGVtZW50
ID0gaW5wdXRFbGVtZW50OworICAgICAgICAgICAgICAgICAgICB1c2VybmFtZUVsZW1lbnQgPSBw
b3RlbnRpYWxVc2VybmFtZUZpZWxkOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBVc2VybmFtZSBlbGVtZW50IGhpZ2hsaWdodGVkLCBub3cgZmluZCBhIHBhc3N3
b3JkIGVsZW1lbnQuCisgICAgICAgICAgICBFbGVtZW50KiBuZXh0RWxlbWVudCA9IGRvY3VtZW50
KCkubmV4dEZvY3VzYWJsZUVsZW1lbnQoKnN0YXJ0KTsKKyAgICAgICAgICAgIGlmIChuZXh0RWxl
bWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PihuZXh0RWxlbWVudCkpIHsKKyAgICAgICAgICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50KiBwb3RlbnRpYWxQYXNzd29yZEZpZWxkID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4obmV4dEVsZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChwb3Rl
bnRpYWxQYXNzd29yZEZpZWxkLT5pc1Bhc3N3b3JkRmllbGQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBwYXNzd29yZEVsZW1lbnQgPSBwb3RlbnRpYWxQYXNzd29yZEZpZWxkOworICAgICAgICAg
ICAgICAgICAgICB1c2VybmFtZUVsZW1lbnQgPSBpbnB1dEVsZW1lbnQ7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6c2V0Q2hlY2tlZChib29sIG5vd0NoZWNrZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3Ig
ZXZlbnRCZWhhdmlvcikKIHsKICAgICBpZiAoY2hlY2tlZCgpID09IG5vd0NoZWNrZWQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IGQyNjMyN2ZmODFkYTYzNDk2ZjAz
OWQ3M2RjMGE3MDFhNzY3YjJiZDkuLjk2ZjkzZGE1ODNkYWMyODY1ZDIzZDM4NTc0YjEzNTQ0NWUw
YzU3NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC03Myw2ICs3
Myw5IEBAIHB1YmxpYzoKICAgICBib29sIHZhbHVlTWlzc2luZygpIGNvbnN0IGZpbmFsOwogICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB2
YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoU3RyaW5nLCBTdHJpbmcpOworICAgIGJvb2wg
Y29tcHV0ZVVzZXJuYW1lQW5kUGFzc3dvcmRFbGVtZW50cyhFbGVtZW50ICosIEhUTUxJbnB1dEVs
ZW1lbnQqJiwgSFRNTElucHV0RWxlbWVudComKTsKIAogICAgIC8vIFJldHVybnMgdGhlIG1pbmlt
dW0gdmFsdWUgZm9yIHR5cGU9ZGF0ZSwgbnVtYmVyLCBvciByYW5nZS4gIERvbid0IGNhbGwgdGhp
cyBmb3Igb3RoZXIgdHlwZXMuCiAgICAgZG91YmxlIG1pbmltdW0oKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggMzRlMWU1ZWJhMjQ5ZjllZWU3
Y2Q4YTc1MjlhOGE0ZDY5MGFjZTJkYS4uNGY0NjMyNzEzZWM3Y2I1MGI2MWIzZDBiN2U2ZmJlMTUx
MWZkZjNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0
U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAg
LTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgPFVJS2l0L1VJSW50ZXJmYWNlX1ByaXZhdGUuaD4KICNp
bXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRJbXBsLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJk
SW50bC5oPgorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0
aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJ
S2l0L1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlL
aXQvVUlQZXJpcGhlcmFsSG9zdC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uY3BwCmluZGV4IGFjOTZmMDBiN2E0NTFhODNlYmFmMjczZDMxNTBj
NDgzMmVhODMzMjQuLmU4ZGYwM2QyMGE1Y2Y1M2IxYzk3MTk4NzVjNjA4NWRjYTZjMzI4YzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAK
QEAgLTg1LDYgKzg1LDcgQEAgdm9pZCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZW5jb2RlKElQ
Qzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHZhbHVlOwogICAgIGVu
Y29kZXIgPDwgdmFsdWVBc051bWJlcjsKICAgICBlbmNvZGVyIDw8IHRpdGxlOworICAgIGVuY29k
ZXIgPDwgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzOwogICAgIGVuY29kZXIuZW5j
b2RlRW51bShhdXRvZmlsbEZpZWxkTmFtZSk7CiB9CiAKQEAgLTE1OSw2ICsxNjAsOSBAQCBib29s
IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBB
c3Npc3RlZE5vZGVJbmZvcm1hdAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRpdGxl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmF1dG9maWxsRmllbGRO
YW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaAppbmRleCBjNjcxOTM3NTllZDM5NDRlY2JkODJhMzhi
ZmM5NjBiNzdhNjE0YWU0Li5mMDgzOTg3YzRiMmFjN2FmMTFlYTI5Y2Y4M2EzMDVlZmU2ZTNmMTky
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmgK
QEAgLTEwOSw2ICsxMDksNyBAQCBzdHJ1Y3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gewogICAg
IFN0cmluZyB2YWx1ZTsKICAgICBkb3VibGUgdmFsdWVBc051bWJlciB7IDAgfTsKICAgICBTdHJp
bmcgdGl0bGU7CisgICAgYm9vbCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CiAg
ICAgV2ViQ29yZTo6QXV0b2ZpbGxGaWVsZE5hbWUgYXV0b2ZpbGxGaWVsZE5hbWUgeyBXZWJDb3Jl
OjpBdXRvZmlsbEZpZWxkTmFtZTo6Tm9uZSB9OwogCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNv
ZGVyJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDgx
MjIwMjNkMTFiYzFiYjY0MzBkMDYwOWUwZThhYTFmZjUxMGQxMzcuLjdhMzQ4OGUzNDk0MWFlY2Q0
MjY3NTJmOGVlY2Y5MTM0MjEyYmYzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCkBAIC01NTgsNiArNTU4LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNTY3JvbGxp
bmdPclpvb21pbmcoYm9vbCk7CiAgICAgdm9pZCByZXF1ZXN0UmVjdHNGb3JHcmFudWxhcml0eVdp
dGhTZWxlY3Rpb25PZmZzZXQoV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCB1aW50MzJfdCBvZmZz
ZXQsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVj
dD4mLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0UmVjdHNBdFNl
bGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcmLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+JiYpOworICAgIGJvb2wgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNy
ZWRlbnRpYWxzKCk7CisgICAgdm9pZCBhdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3QgU3Ry
aW5nJiB1c2VybmFtZSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCk7CiAjaWYgRU5BQkxFKERBVEFf
SU5URVJBQ1RJT04pCiAgICAgdm9pZCBkaWRQZXJmb3JtRGF0YUludGVyYWN0aW9uQ29udHJvbGxl
ck9wZXJhdGlvbihib29sIGhhbmRsZWQpOwogICAgIHZvaWQgZGlkSGFuZGxlU3RhcnREYXRhSW50
ZXJhY3Rpb25SZXF1ZXN0KGJvb2wgc3RhcnRlZCk7CkBAIC0xOTg1LDYgKzE5ODcsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9oYXNEZWZlcnJlZFN0YXJ0QXNzaXN0aW5nTm9kZSB7IGZhbHNlIH07
CiAgICAgc3RkOjp1bmlxdWVfcHRyPE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzPiBtX2RlZmVycmVk
Tm9kZUFzc2lzdGFuY2VBcmd1bWVudHM7CiAgICAgYm9vbCBtX2ZvcmNlQWx3YXlzVXNlclNjYWxh
YmxlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRp
YWxzIHsgZmFsc2UgfTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KaW5kZXggNTMwNjgyYzMy
OTk4ZjM4YmM2OWI5ZTFhMjQ2NGUwMWM0OWM4NDE5YS4uNzEyZGRhOWIxN2NkYjcyYTg5NjYyZDkw
ZWQ1ODFhNTEzMzQ3MGFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXcubW0KQEAgLTI1OCw2ICsyNTgsMTEgQEAgLSAoV2ViUGFnZVByb3h5KilwYWdlCiAg
ICAgcmV0dXJuIF9wYWdlLmdldCgpOwogfQogCistIChCT09MKWFjY2VwdHNBdXRvZmlsbGVkTG9n
aW5DcmVkZW50aWFscworeworICAgIHJldHVybiBfcGFnZS0+YWNjZXB0c0F1dG9maWxsZWRMb2dp
bkNyZWRlbnRpYWxzKCk7Cit9CisKIC0gKHZvaWQpd2lsbE1vdmVUb1dpbmRvdzooVUlXaW5kb3cg
KiluZXdXaW5kb3cKIHsKICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqZGVmYXVsdENlbnRlciA9
IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4
IDk0ZWEzNzQ3N2RjOTg4YmIwZmUwYWM0MDQxNDNiZjVmZmQ2MmFiMWMuLjA5MmMwM2VmOGY3YTdj
NzFhYTkwOGI4ZDc2NDk5YzMyOTQzZjVkNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMjk1NSw2ICsy
OTU1LDEwIEBAIC0gKHZvaWQpZW5kU2VsZWN0aW9uQ2hhbmdlCiAgICAgCiAtICh2b2lkKWluc2Vy
dFRleHRTdWdnZXN0aW9uOihVSVRleHRTdWdnZXN0aW9uICopdGV4dFN1Z2dlc3Rpb24KIHsKKyAg
ICBpZiAoW3RleHRTdWdnZXN0aW9uIGlzS2luZE9mQ2xhc3M6W1VJS2V5Ym9hcmRMb2dpbkNyZWRl
bnRpYWxzU3VnZ2VzdGlvbiBjbGFzc11dKSB7CisgICAgICAgIF9wYWdlLT5hdXRvZmlsbExvZ2lu
Q3JlZGVudGlhbHMoKChVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24qKXRleHRT
dWdnZXN0aW9uKS51c2VybmFtZSwgKChVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rp
b24qKXRleHRTdWdnZXN0aW9uKS5wYXNzd29yZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgaWQgPF9XS0lucHV0RGVsZWdhdGU+IGlucHV0RGVsZWdhdGUgPSBbX3dlYlZpZXcgX2lucHV0
RGVsZWdhdGVdOwogICAgIGlmIChbaW5wdXREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKF93ZWJWaWV3Omluc2VydFRleHRTdWdnZXN0aW9uOmluSW5wdXRTZXNzaW9uOildKQog
ICAgICAgICBbaW5wdXREZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBpbnNlcnRUZXh0U3VnZ2Vz
dGlvbjp0ZXh0U3VnZ2VzdGlvbiBpbklucHV0U2Vzc2lvbjpfZm9ybUlucHV0U2Vzc2lvbi5nZXQo
KV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5
SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpp
bmRleCBjNDNjNzY1ZTRkN2FiM2NkYmRkZWE5ZmNjYWIyZGM1YjA3NTk4N2ZhLi42ZmU2MzFlOGJk
YmJiMzc0NjFmMzFkMGViZTdkZTU3NTM3YmY1OWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTkwMyw2ICs5MDMsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6ZGlkR2V0VGFwSGlnaGxpZ2h0R2VvbWV0cmllcyh1aW50NjRfdCByZXF1ZXN0
SUQsIGNvbnN0IFdlYkNvcgogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRBc3Npc3RpbmdOb2Rl
KGNvbnN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbiwgYm9vbCB1c2VySXNJ
bnRlcmFjdGluZywgYm9vbCBibHVyUHJldmlvdXNOb2RlLCBjb25zdCBVc2VyRGF0YSYgdXNlckRh
dGEpCiB7CisgICAgbV9hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgPSBpbmZvcm1h
dGlvbi5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CiAgICAgQVBJOjpPYmplY3Qq
IHVzZXJEYXRhT2JqZWN0ID0gcHJvY2VzcygpLnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHModXNl
ckRhdGEub2JqZWN0KCkpLmdldCgpOwogICAgIGlmIChtX2VkaXRvclN0YXRlLmlzTWlzc2luZ1Bv
c3RMYXlvdXREYXRhKSB7CiAgICAgICAgIG1fZGVmZXJyZWROb2RlQXNzaXN0YW5jZUFyZ3VtZW50
cyA9IHN0ZDo6bWFrZV91bmlxdWU8Tm9kZUFzc2lzdGFuY2VBcmd1bWVudHM+KE5vZGVBc3Npc3Rh
bmNlQXJndW1lbnRzIHsgaW5mb3JtYXRpb24sIHVzZXJJc0ludGVyYWN0aW5nLCBibHVyUHJldmlv
dXNOb2RlLCB1c2VyRGF0YU9iamVjdCB9KTsKQEAgLTkyMiw2ICs5MjMsMTYgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnN0b3BBc3Npc3RpbmdOb2RlKCkKICAgICBtX3BhZ2VDbGllbnQuc3RvcEFzc2lz
dGluZ05vZGUoKTsKIH0KIAorYm9vbCBXZWJQYWdlUHJveHk6OmFjY2VwdHNBdXRvZmlsbGVkTG9n
aW5DcmVkZW50aWFscygpCit7CisgICAgcmV0dXJuIG1fYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNy
ZWRlbnRpYWxzOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRp
YWxzKGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCit7Cisg
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBdXRvZmlsbExvZ2luQ3JlZGVu
dGlhbHModXNlcm5hbWUsIHBhc3N3b3JkKSwgbV9wYWdlSUQpOworfQorCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2hvd0luc3BlY3RvckhpZ2hsaWdodChjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmIGhp
Z2hsaWdodCkKIHsKICAgICBtX3BhZ2VDbGllbnQuc2hvd0luc3BlY3RvckhpZ2hsaWdodChoaWdo
bGlnaHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4
IDc3MjQ1ZDUwNzk4MGY3NjMxY2JjMTBiMTk1YjNhYTNlYzRiYjUyMTYuLjFiMjE4YTM4ZmI5ZWU4
Yzc0M2Y0NTIxMjkwNGYyODczOTE1ZWU5NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgKQEAgLTU3Myw2ICs1NzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
dG9wSW50ZXJhY3Rpb24oKTsKICAgICB2b2lkIHBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMy
X3QgYWN0aW9uKTsKICAgICB2b2lkIGZvY3VzTmV4dEFzc2lzdGVkTm9kZShib29sIGlzRm9yd2Fy
ZCwgQ2FsbGJhY2tJRCk7CisgICAgdm9pZCBhdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoU3RyaW5n
LCBTdHJpbmcpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFsdWUoY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSk7CiAgICAgdm9p
ZCBzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93
TXVsdGlwbGVTZWxlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggMWFhYTFkZDM5Y2JiYzg0M2E2ZjQ1NjQ0
MjQ1NjY1YjhlODkyZDFlMS4uZDdkOTBhYWNiMzg3YTMwZGRmMThhMjA2Y2U4ZjRkZmE3ODRiYzU3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCkBAIC04Myw2ICs4Myw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5
UmVjZWl2ZXIgewogICAgIFBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9uKQog
ICAgIEZvY3VzTmV4dEFzc2lzdGVkTm9kZShib29sIGlzRm9yd2FyZCwgV2ViS2l0OjpDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiAgICAgU2V0QXNzaXN0ZWROb2RlVmFsdWUoU3RyaW5nIHZhbHVlKQor
ICAgIEF1dG9maWxsTG9naW5DcmVkZW50aWFscyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNz
d29yZCkKICAgICBTZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAg
ICBTZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93
TXVsdGlwbGVTZWxlY3Rpb24pCiAgICAgQXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0K
aW5kZXggMmYxNWZiMTdhNjQ5NjI3ODZmOWNhZWE0M2Y1ZDg3YmFjODZlYjY3NC4uNTRkODQxYTRi
MDczMDU3MjA5OTA4MjI5NTliN2ZlOTVlNzVhMmFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTI3NjAsNiArMjc2MCw3
IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAgIH0gZWxzZSBpZiAoaXM8SFRNTElucHV0RWxl
bWVudD4oKm1fYXNzaXN0ZWROb2RlKSkgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50JiBlbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKICAgICAg
ICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVudC5mb3JtKCk7CisgICAgICAgIGluZm9y
bWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyA9IGVsZW1lbnQuYWNjZXB0
c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCk7CiAgICAgICAgIGlmIChmb3JtKQogICAgICAg
ICAgICAgaW5mb3JtYXRpb24uZm9ybUFjdGlvbiA9IGZvcm0tPmdldFVSTEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmFjdGlvbkF0dHIpOwogICAgICAgICBpbmZvcm1hdGlvbi5hdXRvY2Fw
aXRhbGl6ZVR5cGUgPSBlbGVtZW50LmF1dG9jYXBpdGFsaXplVHlwZSgpOwpAQCAtMjgyNSw2ICsy
ODI2LDEyIEBAIHZvaWQgV2ViUGFnZTo6c2V0Vmlld3BvcnRDb25maWd1cmF0aW9uTWluaW11bUxh
eW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAgICAgICB2aWV3cG9ydENvbmZpZ3Vy
YXRpb25DaGFuZ2VkKCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRp
YWxzKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKQoreworICAgIGlmIChpczxIVE1M
SW5wdXRFbGVtZW50PihtX2Fzc2lzdGVkTm9kZS5nZXQoKSkpCisgICAgICAgIGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkuYXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxz
KHVzZXJuYW1lLCBwYXNzd29yZCk7Cit9CisKIHZvaWQgV2ViUGFnZTo6c2V0TWF4aW11bVVub2Jz
Y3VyZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgbWF4aW11bVVub2JzY3VyZWRTaXplKQogewogICAg
IG1fbWF4aW11bVVub2JzY3VyZWRTaXplID0gbWF4aW11bVVub2JzY3VyZWRTaXplOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXgg
YTA5MjM3N2IxZGU5MTVmNTY4YTUzMGU5ZTNhZWQzZjBiMzMyOWRmZi4uZWMwZTg4MmJjODkxOTkx
MjYwZGEyYWUzMDJmOGNjZDY3OWU5MDczYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5oCkBAIC0yNCw2ICsyNCw5IEBACiAgKi8KIAog
I2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUhUTUxFbGVtZW50Lmg+CisjaWYgVEFSR0VUX09TX0lQ
SE9ORQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRUcmFpdHMuaD4KKyNlbmRpZgogCiBAY2xh
c3MgRE9NRmlsZUxpc3Q7CiBAY2xhc3MgRE9NSFRNTEZvcm1FbGVtZW50OwpAQCAtMzEsNyArMzQs
MTEgQEAKIEBjbGFzcyBOU1VSTDsKIAogV0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMoMTBfNCkK
KyNpZiBUQVJHRVRfT1NfSVBIT05FCitAaW50ZXJmYWNlIERPTUhUTUxJbnB1dEVsZW1lbnQgOiBE
T01IVE1MRWxlbWVudDxVSVRleHRJbnB1dFRyYWl0cz4KKyNlbGlmCiBAaW50ZXJmYWNlIERPTUhU
TUxJbnB1dEVsZW1lbnQgOiBET01IVE1MRWxlbWVudAorI2VuZGlmCiBAcHJvcGVydHkgKGNvcHkp
IE5TU3RyaW5nICphY2NlcHQ7CiBAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICphbHQ7CiBAcHJv
cGVydHkgQk9PTCBhdXRvZm9jdXMgV0VCS0lUX0FWQUlMQUJMRV9NQUMoMTBfNik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCmluZGV4
IDliYzgwM2M1OTU4NTAxYzg2OTA5NDUyMDNmYmEyYTcwOTg1NzZkMWEuLjRmZjllODYzZDFjOTUz
ODc3NTE0YWE5ZTBlNjExN2MwOGNlNDdiZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1w
b3J0ICJET01JbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUHJpdmF0ZS5oIgogI2ltcG9ydCAiRXhj
ZXB0aW9uSGFuZGxlcnMuaCIKKyNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRp
YWxzU3VnZ2VzdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxlTGlzdC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQu
aD4KQEAgLTY2Niw2ICs2NjcsMTggQEAgLSAodm9pZClzZXRWYWx1ZUZvclVzZXI6KE5TU3RyaW5n
ICopaW5WYWx1ZQogICAgIElNUEwtPnNldFZhbHVlRm9yVXNlcihpblZhbHVlKTsKIH0KIAorLSAo
Qk9PTClhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPmFjY2VwdHNBdXRv
ZmlsbGVkTG9naW5DcmVkZW50aWFscygpOworfQorCistICh2b2lkKWluc2VydFRleHRTdWdnZXN0
aW9uOihVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKiljcmVkZW50aWFsc1N1
Z2dlc3Rpb24KK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgSU1QTC0+YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNyZWRlbnRpYWxzU3VnZ2VzdGlvbi51
c2VybmFtZSwgY3JlZGVudGlhbHNTdWdnZXN0aW9uLnBhc3N3b3JkKTsKK30KKwogQGVuZAogCiBX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBjb3JlKERPTUhUTUxJbnB1dEVsZW1lbnQgKndyYXBw
ZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316993</attachid>
            <date>2017-08-02 14:15:34 -0700</date>
            <delta_ts>2017-08-17 18:19:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170802141533.patch</filename>
            <type>text/plain</type>
            <size>28090</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwMTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWNmMTdlNjFkOTcxN2Ey
ZDI5NjJhZDdlMjg3OTI0NmZkYmNhNjQwOS4uYTMyYzZhNmUyYzQ1MWFjM2M4ZDkzYWI0YjlkNjgz
N2JkNmExYjUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA4LTAyICBGcmVk
ZXJpayBSaWVkZWwgIDxmcmllZGVsQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBvc2Ugd2F5IHRv
IHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3JtIGNvbnRyb2xzIGFzIHtMZWdhY3kgV2ViS2l0
LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTE1OTk4Nj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bmV4dEZvY3VzYWJsZUVsZW1lbnQpOiBS
ZXR1cm5zIHRoZSBuZXh0IGZvY3VzYWJsZSBlbGVtZW50IGluIHRoZSBkb2N1bWVudC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnQpOiBSZXR1cm5z
IHRoZSBwcmV2aW91cyBmb2N1c2FibGUgZWxlbWVudAorICAgICAgICBpbiB0aGUgZG9jdW1lbnQu
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmFjY2VwdHNBdXRv
ZmlsbGVkTG9naW5DcmVkZW50aWFscyk6IERldGVybWluZXMgaWYgdGhlIEhUTUxJbnB1dEVsZW1l
bnQKKyAgICAgICAgaXMgY2FwYWJsZSBvZiByZWNlaXZpbmcgdXNlcm5hbWUvcGFzc3dvcmQgaW5m
b3JtYXRpb24sIHdoZW4gdGhlIGRvY3VtZW50cyBpbmNsdWRlcyBhCisgICAgICAgIHVzZXJuYW1l
IGFuZCBwYXNzd29yZCBmaWVsZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyk6IEF1dG9maWxscyB1c2VybmFtZSBhbmQgcGFzc3dv
cmQgaW50byB0aGUKKyAgICAgICAgZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpyZXByZXNlbnRpbmdQYWdlVXJsKTogUmV0dXJucyB0aGUgVVJMIHRoYXQgaXMg
Y3VycmVudGx5IGRpc3BsYXllZCBpbgorICAgICAgICB0aGUgV2ViVmlldy4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNvbXB1dGVVc2VybmFtZUFuZFBhc3N3b3JkRWxlbWVu
dHMpOiBQcml2YXRlIG1ldGhvZCBpcyBiZWluZyBjYWxsZWQgdG8KKyAgICAgICAgZGV0ZWN0IHVz
ZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZCBwYWlycyBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAg
ICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisKIDIwMTctMDgtMDIgIEplcmVteSBKb25lcyAg
PGplcmVteWpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgYW5kIG9ic29sZXRl
IHNldHRpbmcgbWVkaWFEb2N1bWVudEVudGVyc0Z1bGxzY3JlZW5BdXRvbWF0aWNhbGx5CkBAIC0y
OTk0LDYgKzMwMTksMjkgQEAKICAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CiAgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OmRvY3VtZW50VG9DbGllbnRPZmZzZXQpOgogCisyMDE3LTA3
LTI0ICBGcmVkZXJpayBSaWVkZWwgIDxmcmllZGVsQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBv
c2Ugd2F5IHRvIHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3JtIGNvbnRyb2xzIGFzIHtMZWdh
Y3kgV2ViS2l0LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTE1OTk4Nj4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bmV4dEZvY3VzYWJsZUVs
ZW1lbnQpOiBSZXR1cm5zIHRoZSBuZXh0IGZvY3VzYWJsZSBlbGVtZW50IGluIHRoZSBkb2N1bWVu
dC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnQp
OiBSZXR1cm5zIHRoZSBwcmV2aW91cyBmb2N1c2FibGUgZWxlbWVudAorICAgICAgICBpbiB0aGUg
ZG9jdW1lbnQuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmFj
Y2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk6IERldGVybWluZXMgaWYgdGhlIEhUTUxJ
bnB1dEVsZW1lbnQKKyAgICAgICAgaXMgY2FwYWJsZSBvZiByZWNlaXZpbmcgdXNlcm5hbWUvcGFz
c3dvcmQgaW5mb3JtYXRpb24sIHdoZW4gdGhlIGRvY3VtZW50cyBpbmNsdWRlcyBhCisgICAgICAg
IHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyk6IEF1dG9maWxscyB1c2VybmFtZSBh
bmQgcGFzc3dvcmQgaW50byB0aGUKKyAgICAgICAgZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50Ojpjb21wdXRlVXNlcm5hbWVBbmRQYXNzd29yZEVsZW1lbnRzKTog
UHJpdmF0ZSBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIHRvCisgICAgICAgIGRldGVjdCB1c2VybmFt
ZSBhbmQgcGFzc3dvcmQgZmllbGQgcGFpcnMgaW4gdGhlIGRvY3VtZW50LgorICAgICAgICAqIGh0
bWwvSFRNTElucHV0RWxlbWVudC5oOgorCiAyMDE3LTA3LTI0ICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1BFXSBsaWJlcG94eSBoZWFkZXJzIGNhbiB1
c2UgRUdMX0NBU1QsIHdoaWNoIG1pZ2h0IG5vdCBiZSBkZWZpbmVkIGJ5IGVnbHBsYXRmb3JtLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZGQ3ZTVkNWEyNjJlZjFiYmU1ZjY0MTRkNjU3ZDVkNWNmMDA3YjlhNC4uOGI0
MDA5ZTNjM2EzZTllYTNmODEzMDY0ZTcyNTMyZjI0MGE1ZjFmMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw0NCBAQAorMjAxNy0wOC0wMiAgRnJlZGVyaWsgUmllZGVsICA8ZnJpZWRlbEBhcHBsZS5jb20+
CisKKyAgICAgICAgRXhwb3NlIHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZpZWQgZm9ybSBj
b250cm9scyBhcyB7TGVnYWN5IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDM5NAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzExNTk5ODY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6CisgICAgICAgICogU2hhcmVk
L0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb246OmVuY29kZSBjb25zdCk6IEVuY29kZXMgYWRkaXRpb25hbCBub2RlIGlu
Zm9ybWF0aW9uCisgICAgICAgIGZvciBpbmRpY2F0aW5nIGlmIHRoZSBub2RlIGFjY2VwdHMgYXV0
b2ZpbGxlZCBsb2dpbiBjcmVkZW50aWFscy4KKyAgICAgICAgKFdlYktpdDo6QXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb246OmRlY29kZSk6IERlY29kZXMgYWRkaXRpb25hbCBub2RlIGluZm9ybWF0aW9u
CisgICAgICAgIGZvciBpbmRpY2F0aW5nIGlmIHRoZSBub2RlIGFjY2VwdHMgYXV0b2ZpbGxlZCBs
b2dpbiBjcmVkZW50aWFscy4KKyAgICAgICAgKiBTaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFj
Y2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsc10pOiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVz
IGlmCisgICAgICAgIHRoZSBXS0NvbnRlbnRWaWV3IGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGF1
dG9maWxsZWQgbG9naW4gY3JlZGVudGlhbHMuCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgcmVw
cmVzZW50aW5nUGFnZVVybF0pOiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50bHkgZGlz
cGxheWVkIFVSTAorICAgICAgICB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBXS0NvbnRlbnRW
aWV3LgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGluc2VydFRleHRTdWdnZXN0aW9uOl0pOiBUaGlz
IG1ldGhvZCBmaWxscyBhIGxvZ2luIHN1Z2dlc3Rpb24KKyAgICAgICAgKFVJS2V5Ym9hcmRMb2dp
bkNyZWRlbnRpYWxzU3VnZ2VzdGlvbikgaW50byB0aGUgV0tDb250ZW50Vmlldy4KKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05vZGUpOiBUcmFuc3BvcnRzIHRoZSBpbmZvcm1hdGlv
biBpZiB0aGUgY3VycmVudGx5CisgICAgICAgIGhpZ2hsaWdodGVkIG5vZGUgYWNjZXB0cyBhdXRv
ZmlsbGVkIGxvZ2luIGNyZWRlbnRpYWxzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk6IERldGVybWluZXMgaWYgdGhlIFdl
YlBhZ2UKKyAgICAgICAgYWNjZXB0cyBhdXRvZmlsbGVkIGxvZ2luIGNyZWRlbnRpYWxzLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlcHJlc2VudGluZ1BhZ2VVcmwpOiBUaGlzIG1l
dGhvZCByZXR1cm5zIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIFVSTAorICAgICAgICB0aGF0IGlz
IHJlcHJlc2VudGVkIHNob3duIGluIHRoZSBXZWJQYWdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyk6IEZpbGxzIHRoZSBsb2dpbiBjcmVk
ZW50aWFscyBpbnRvIHRoZQorICAgICAgICBXZWJQYWdlLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bik6IFRyYW5zcG9ydHMgdGhlIGluZm9ybWF0aW9uIGlmIHRoZSBjdXJyZW50bHkKKyAgICAgICAg
aGlnaGxpZ2h0ZWQgbm9kZSBhY2NlcHRzIGF1dG9maWxsZWQgbG9naW4gY3JlZGVudGlhbHMuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyk6IEZpbGxz
IHRoZSBsb2dpbiBjcmVkZW50aWFscyBpbnRvIHRoZQorICAgICAgICBXZWJQYWdlLgorCiAyMDE3
LTA4LTAyICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgdW51c2VkIGFuZCBvYnNvbGV0ZSBzZXR0aW5nIG1lZGlhRG9jdW1lbnRFbnRlcnNGdWxsc2Ny
ZWVuQXV0b21hdGljYWxseQpAQCAtMTU2OSw2ICsxNjEwLDQzIEBACiAgICAgICAgICogVUlQcm9j
ZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmg6CiAg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6
Y3JlYXRlV2Vha1B0cik6CiAKKzIwMTctMDctMjQgIEZyZWRlcmlrIFJpZWRlbCAgPGZyaWVkZWxA
YXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8gc2V0IHZhbHVlcyBvZiBjbGFzc2lm
aWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQsIFdlYktpdH0gU1BJCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzOTQKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzMxMTU5OTg2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oOgorICAgICAg
ICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjplbmNvZGUpOiBFbmNvZGVzIGFkZGl0aW9uYWwgbm9k
ZSBpbmZvcm1hdGlvbgorICAgICAgICBmb3IgaW5kaWNhdGluZyBpZiB0aGUgbm9kZSBhY2NlcHRz
IGF1dG9maWxsZWQgbG9naW4gY3JlZGVudGlhbHMuCisgICAgICAgIChXZWJLaXQ6OkFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uOjpkZWNvZGUpOiBEZWNvZGVzIGFkZGl0aW9uYWwgbm9kZSBpbmZvcm1h
dGlvbgorICAgICAgICBmb3IgaW5kaWNhdGluZyBpZiB0aGUgbm9kZSBhY2NlcHRzIGF1dG9maWxs
ZWQgbG9naW4gY3JlZGVudGlhbHMuCisgICAgICAgICogU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9y
bWF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHNdKTogVGhpcyBtZXRob2QgZGV0ZXJt
aW5lcyBpZgorICAgICAgICB0aGUgV0tDb250ZW50VmlldyBpcyBjYXBhYmxlIG9mIHJlY2Vpdmlu
ZyBhdXRvZmlsbGVkIGxvZ2luIGNyZWRlbnRpYWxzLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGlu
c2VydFRleHRTdWdnZXN0aW9uOl0pOiBUaGlzIG1ldGhvZCBmaWxscyBhIGxvZ2luIHN1Z2dlc3Rp
b24KKyAgICAgICAgKFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbikgaW50byB0
aGUgV0tDb250ZW50Vmlldy4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05vZGUp
OiBUcmFuc3BvcnRzIHRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgY3VycmVudGx5CisgICAgICAgIGhp
Z2hsaWdodGVkIG5vZGUgYWNjZXB0cyBhdXRvZmlsbGVkIGxvZ2luIGNyZWRlbnRpYWxzLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50
aWFscyk6IERldGVybWluZXMgaWYgdGhlIFdlYlBhZ2UKKyAgICAgICAgYWNjZXB0cyBhdXRvZmls
bGVkIGxvZ2luIGNyZWRlbnRpYWxzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmF1
dG9maWxsTG9naW5DcmVkZW50aWFscyk6IEZpbGxzIHRoZSBsb2dpbiBjcmVkZW50aWFscyBpbnRv
IHRoZQorICAgICAgICBXZWJQYWdlLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbik6IFRyYW5zcG9y
dHMgdGhlIGluZm9ybWF0aW9uIGlmIHRoZSBjdXJyZW50bHkKKyAgICAgICAgaGlnaGxpZ2h0ZWQg
bm9kZSBhY2NlcHRzIGF1dG9maWxsZWQgbG9naW4gY3JlZGVudGlhbHMuCisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyk6IEZpbGxzIHRoZSBsb2dpbiBj
cmVkZW50aWFscyBpbnRvIHRoZQorICAgICAgICBXZWJQYWdlLgorCiAyMDE3LTA3LTIzICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLiBSRUdSRVNTSU9OKHIyMTk3MTMpOiBbR1RLXVtXUEVdIEZpeCBkZWZhdWx0IGZhdmljb24g
ZGF0YWJhc2UgcGF0Y2guCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggYjE1ZDI0ZTRj
Y2RlNzY5NTA0ZjMxNDU5OGU1YjY4YjU1MzIyMzhlNi4uZjhjNDdhMzkzMzEyM2M3OTYzOGEwYThi
ZWRlYmM5NzNmZjM1NGQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIwIEBACisyMDE3LTA4LTAyICBGcmVkZXJpayBSaWVkZWwgIDxmcmllZGVsQGFwcGxlLmNvbT4K
KworICAgICAgICBFeHBvc2Ugd2F5IHRvIHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3JtIGNv
bnRyb2xzIGFzIHtMZWdhY3kgV2ViS2l0LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8zMTE1OTk4Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIERPTS9ET01IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogRE9NL0RPTUhU
TUxJbnB1dEVsZW1lbnQubW06CisgICAgICAgICgtW0RPTUhUTUxJbnB1dEVsZW1lbnQgYWNjZXB0
c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzXSk6IFJldHVybnMgaWYgdGhlIERPTUhUTUxJbnB1
dEVsZW1lbnQKKyAgICAgICAgaXMgY2FwYWJsZSBvZiBmaWxsaW5nIG91dCBhIHVzZXJuYW1lL3Bh
c3N3b3JkIGxvZ2luIHBhaXIuCisgICAgICAgICgtW0RPTUhUTUxJbnB1dEVsZW1lbnQgcmVwcmVz
ZW50aW5nUGFnZVVybF0pOiBSZXR1cm5zIHRoZSBVUkwgdGhhdCBpcyBjdXJyZW50bHkgZGlzcGxh
eWVkIGluIHRoZQorICAgICAgICBXZWJWaWV3LgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVt
ZW50IGluc2VydFRleHRTdWdnZXN0aW9uOl0pOiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRv
IGF1dG9maWxsIGEKKyAgICAgICAgdXNlcm5hbWUvcGFzc3dvcmQgY29tYmluYXRpb24uCisKIDIw
MTctMDgtMDEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
aW5pdGlhbCBzdXBwb3J0IGZvciBuYXZpZ2F0b3Iuc2VuZEJlYWNvbgpAQCAtODUsNiArMTAyLDIx
IEBACiAgICAgICAgICogRE9NL0V4Y2VwdGlvbkhhbmRsZXJzLm1tOgogICAgICAgICAocmFpc2VO
b3RTdXBwb3J0ZWRFcnJvckV4Y2VwdGlvbik6CiAKKzIwMTctMDctMjQgIEZyZWRlcmlrIFJpZWRl
bCAgPGZyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8gc2V0IHZhbHVl
cyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQsIFdlYktpdH0g
U1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQz
OTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxMTU5OTg2PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQu
aDoKKyAgICAgICAgKiBET00vRE9NSFRNTElucHV0RWxlbWVudC5tbToKKyAgICAgICAgKC1bRE9N
SFRNTElucHV0RWxlbWVudCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHNdKTogUmV0
dXJucyBpZiB0aGUgRE9NSFRNTElucHV0RWxlbWVudAorICAgICAgICBpcyBjYXBhYmxlIG9mIGZp
bGxpbmcgb3V0IGEgdXNlcm5hbWUvcGFzc3dvcmQgbG9naW4gcGFpci4KKyAgICAgICAgKC1bRE9N
SFRNTElucHV0RWxlbWVudCBpbnNlcnRUZXh0U3VnZ2VzdGlvbjpdKTogVGhpcyBtZXRob2QgY2Fu
IGJlIGNhbGxlZCB0byBhdXRvZmlsbCBhCisgICAgICAgIHVzZXJuYW1lL3Bhc3N3b3JkIGNvbWJp
bmF0aW9uLgorCiAyMDE3LTA3LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgRHJvcCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gY2xhc3MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCmluZGV4IDA5NjcwNTNlY2JlMGI4NDc3NjY0ZGZiN2UxNDcyMTMxYjQ1MjEyYTcu
LjQ2OWIzMWNkMDVhNTY3MzA5MjAzNWQ5NzVlN2I4NjE2YWZkYmNjYjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcApAQCAtNjg5NCw2ICs2ODk0LDE2IEBAIGJvb2wgRG9jdW1lbnQ6Omhhc0ZvY3Vz
KCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0VsZW1lbnQqIERvY3VtZW50OjpuZXh0
Rm9jdXNhYmxlRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQoreworICAgIHJldHVybiBwYWdlKCkt
PmZvY3VzQ29udHJvbGxlcigpLm5leHRGb2N1c2FibGVFbGVtZW50KGVsZW1lbnQpOworfQorCitF
bGVtZW50KiBEb2N1bWVudDo6cHJldmlvdXNGb2N1c2FibGVFbGVtZW50KEVsZW1lbnQmIGVsZW1l
bnQpCit7CisgICAgcmV0dXJuIHBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkucHJldmlvdXNGb2N1
c2FibGVFbGVtZW50KGVsZW1lbnQpOworfQorCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNL
X1RBUkdFVCkKIAogc3RhdGljIHVpbnQ2NF90IG5leHRQbGF5YmFja1RhcmdldENsaWVudENvbnRl
eHRJZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDIzMjZkZGRlNzNkMTZlNTc4MTJkMDVhZDAx
YWJiZDBiZTA5NTEzNWIuLjk5NTE5YzhhNDkwYTk3MTJmYTZhNmY4NmZjMmU3ZDkxYzM2YWUwZTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zOTIsNiArMzkyLDggQEAgcHVibGljOgogCiAgICAg
V0VCQ09SRV9FWFBPUlQgRWxlbWVudCogYWN0aXZlRWxlbWVudCgpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaGFzRm9jdXMoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBu
ZXh0Rm9jdXNhYmxlRWxlbWVudChFbGVtZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVu
dCogcHJldmlvdXNGb2N1c2FibGVFbGVtZW50KEVsZW1lbnQmKTsKIAogICAgIGJvb2wgaGFzTWFu
aWZlc3QoKSBjb25zdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCmluZGV4IDM3Mzc3OWY0NTllODcyMDA2NDUyZDljYWU5MjdiNDZjMzVjMjdlMTguLjdjMGMy
YzM2ZGJkMjQ1MTE4MGJhMGY4N2E0ZTBlNGMwMTZjN2YxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKICNpbmNsdWRlICJGaWxlSW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiRmlsZUxpc3Qu
aCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGb3JtQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAg
LTg5Myw2ICs4OTQsNjEgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1RleHRUeXBlKCkgY29u
c3QKICAgICByZXR1cm4gbV9pbnB1dFR5cGUtPmlzVGV4dFR5cGUoKTsKIH0KIAorYm9vbCBIVE1M
SW5wdXRFbGVtZW50OjphY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKQoreworICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHVzZXJuYW1lRWxlbWVudCA9IG51bGxwdHI7CisgICAgSFRNTElu
cHV0RWxlbWVudCogcGFzc3dvcmRFbGVtZW50ID0gbnVsbHB0cjsKKyAgICByZXR1cm4gY29tcHV0
ZVVzZXJuYW1lQW5kUGFzc3dvcmRFbGVtZW50cyh0aGlzLCB1c2VybmFtZUVsZW1lbnQsIHBhc3N3
b3JkRWxlbWVudCk7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6YXV0b2ZpbGxMb2dpbkNy
ZWRlbnRpYWxzKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKQoreworICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIHVzZXJuYW1lRWxlbWVudCA9IG51bGxwdHI7CisgICAgSFRNTElucHV0RWxl
bWVudCogcGFzc3dvcmRFbGVtZW50ID0gbnVsbHB0cjsKKyAgICBpZiAoY29tcHV0ZVVzZXJuYW1l
QW5kUGFzc3dvcmRFbGVtZW50cyh0aGlzLCB1c2VybmFtZUVsZW1lbnQsIHBhc3N3b3JkRWxlbWVu
dCkpIHsKKyAgICAgICAgdXNlcm5hbWVFbGVtZW50LT5zZXRWYWx1ZSh1c2VybmFtZSk7CisgICAg
ICAgIHVzZXJuYW1lRWxlbWVudC0+c2V0QXV0b0ZpbGxlZCgpOworICAgICAgICBwYXNzd29yZEVs
ZW1lbnQtPnNldFZhbHVlKHBhc3N3b3JkKTsKKyAgICAgICAgcGFzc3dvcmRFbGVtZW50LT5zZXRB
dXRvRmlsbGVkKCk7CisgICAgfQorfQorCitVUkwgSFRNTElucHV0RWxlbWVudDo6cmVwcmVzZW50
aW5nUGFnZVVybCgpCit7CisgICAgcmV0dXJuIGRvY3VtZW50KCkudXJsKCk7Cit9CisKK2Jvb2wg
SFRNTElucHV0RWxlbWVudDo6Y29tcHV0ZVVzZXJuYW1lQW5kUGFzc3dvcmRFbGVtZW50cyhFbGVt
ZW50ICpzdGFydCwgSFRNTElucHV0RWxlbWVudComIHVzZXJuYW1lRWxlbWVudCwgSFRNTElucHV0
RWxlbWVudComIHBhc3N3b3JkRWxlbWVudCkKK3sKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVu
dD4oc3RhcnQpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHN0YXJ0KTsKKyAgICAgICAgaWYgKGlucHV0RWxlbWVu
dC0+aXNQYXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAgICAgIC8vIFBhc3N3b3JkIGVsZW1lbnQg
aGlnaGxpZ2h0ZWQsIG5vdyBmaW5kIGEgdXNlcm5hbWUgZWxlbWVudC4KKyAgICAgICAgICAgIEVs
ZW1lbnQqIHByZXZpb3VzRWxlbWVudCA9IGRvY3VtZW50KCkucHJldmlvdXNGb2N1c2FibGVFbGVt
ZW50KCpzdGFydCk7CisgICAgICAgICAgICBpZiAocHJldmlvdXNFbGVtZW50ICYmIGlzPEhUTUxJ
bnB1dEVsZW1lbnQ+KHByZXZpb3VzRWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICBIVE1MSW5w
dXRFbGVtZW50KiBwb3RlbnRpYWxVc2VybmFtZUZpZWxkID0gZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4ocHJldmlvdXNFbGVtZW50KTsKKyAgICAgICAgICAgICAgICBpZiAocG90ZW50aWFsVXNl
cm5hbWVGaWVsZC0+aXNUZXh0RmllbGQoKSkgeworICAgICAgICAgICAgICAgICAgICBwYXNzd29y
ZEVsZW1lbnQgPSBpbnB1dEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lRWxl
bWVudCA9IHBvdGVudGlhbFVzZXJuYW1lRmllbGQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIFVzZXJuYW1lIGVsZW1lbnQgaGlnaGxpZ2h0ZWQsIG5vdyBmaW5k
IGEgcGFzc3dvcmQgZWxlbWVudC4KKyAgICAgICAgICAgIEVsZW1lbnQqIG5leHRFbGVtZW50ID0g
ZG9jdW1lbnQoKS5uZXh0Rm9jdXNhYmxlRWxlbWVudCgqc3RhcnQpOworICAgICAgICAgICAgaWYg
KG5leHRFbGVtZW50ICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5leHRFbGVtZW50KSkgeworICAg
ICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIHBvdGVudGlhbFBhc3N3b3JkRmllbGQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihuZXh0RWxlbWVudCk7CisgICAgICAgICAgICAgICAg
aWYgKHBvdGVudGlhbFBhc3N3b3JkRmllbGQtPmlzUGFzc3dvcmRGaWVsZCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHBhc3N3b3JkRWxlbWVudCA9IHBvdGVudGlhbFBhc3N3b3JkRmllbGQ7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lRWxlbWVudCA9IGlucHV0RWxlbWVudDsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzZXRDaGVja2VkKGJvb2wgbm93Q2hlY2tlZCwgVGV4dEZpZWxkRXZlbnRC
ZWhhdmlvciBldmVudEJlaGF2aW9yKQogewogICAgIGlmIChjaGVja2VkKCkgPT0gbm93Q2hlY2tl
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggZDI2MzI3ZmY4MWRh
NjM0OTZmMDM5ZDczZGMwYTcwMWE3NjdiMmJkOS4uNTMyMWRjNDZhNDIzMTRlMjNmN2U3MzVkYzg5
YTJhMDM2YTFkNzUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAg
LTczLDYgKzczLDEwIEBAIHB1YmxpYzoKICAgICBib29sIHZhbHVlTWlzc2luZygpIGNvbnN0IGZp
bmFsOwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0IGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgVVJMIHJlcHJlc2VudGluZ1BhZ2VVcmwoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGF1dG9maWxsTG9naW5DcmVkZW50aWFscyhTdHJpbmcsIFN0cmluZyk7CisgICAgYm9vbCBj
b21wdXRlVXNlcm5hbWVBbmRQYXNzd29yZEVsZW1lbnRzKEVsZW1lbnQgKiwgSFRNTElucHV0RWxl
bWVudComLCBIVE1MSW5wdXRFbGVtZW50KiYpOwogCiAgICAgLy8gUmV0dXJucyB0aGUgbWluaW11
bSB2YWx1ZSBmb3IgdHlwZT1kYXRlLCBudW1iZXIsIG9yIHJhbmdlLiAgRG9uJ3QgY2FsbCB0aGlz
IGZvciBvdGhlciB0eXBlcy4KICAgICBkb3VibGUgbWluaW11bSgpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCA3ZWRiNTY2MTRjZWEyODc1NmZj
MjJlODA0ZmZkOWIwZTY1ZjZhMmQ0Li44NzY4NzVlMzI5NTRjNDc5NTQ3YzI5OTRlMTU1YzY4OTEx
OWJmNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRT
UEkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaApAQCAt
NDMsNiArNDMsNyBAQAogI2ltcG9ydCA8VUlLaXQvVUlJbnRlcmZhY2VfUHJpdmF0ZS5oPgogI2lt
cG9ydCA8VUlLaXQvVUlLZXlib2FyZEltcGwuaD4KICNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRJ
bnRsLmg+CisjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rp
b24uaD4KICNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlL
aXQvVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtp
dC9VSVBlcmlwaGVyYWxIb3N0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9B
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbi5jcHAKaW5kZXggYWM5NmYwMGI3YTQ1MWE4M2ViYWYyNzNkMzE1MGM0
ODMyZWE4MzMyNC4uYTEyNmQwYTA1NTAxMDBhOWJhN2Y5NmRlZDRhMWM4YTQ4ODI5NTY2MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcApA
QCAtODUsNiArODUsOCBAQCB2b2lkIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjplbmNvZGUoSVBD
OjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdmFsdWU7CiAgICAgZW5j
b2RlciA8PCB2YWx1ZUFzTnVtYmVyOwogICAgIGVuY29kZXIgPDwgdGl0bGU7CisgICAgZW5jb2Rl
ciA8PCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CisgICAgZW5jb2RlciA8PCBy
ZXByZXNlbnRpbmdQYWdlVXJsOwogICAgIGVuY29kZXIuZW5jb2RlRW51bShhdXRvZmlsbEZpZWxk
TmFtZSk7CiB9CiAKQEAgLTE1OSw2ICsxNjEsMTIgQEAgYm9vbCBBc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbjo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgQXNzaXN0ZWROb2RlSW5mb3JtYXQK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50aXRsZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFjY2VwdHNBdXRvZmlsbGVk
TG9naW5DcmVkZW50aWFscykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LnJlcHJlc2VudGluZ1BhZ2VVcmwpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQuYXV0b2ZpbGxGaWVs
ZE5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oCmluZGV4IGM2NzE5Mzc1OWVkMzk0NGVjYmQ4MmEz
OGJmYzk2MGI3N2E2MTRhZTQuLjhhMTM0ODk0ZWEwNTVjM2UzZjAwY2E1MmQ4NzkwMjk1M2RhNzNh
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0
aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
aApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b2NhcGl0YWxpemVUeXBl
cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b2ZpbGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lu
dFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwOSw2ICsxMTAsOCBAQCBzdHJ1
Y3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gewogICAgIFN0cmluZyB2YWx1ZTsKICAgICBkb3Vi
bGUgdmFsdWVBc051bWJlciB7IDAgfTsKICAgICBTdHJpbmcgdGl0bGU7CisgICAgYm9vbCBhY2Nl
cHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CisgICAgV2ViQ29yZTo6VVJMIHJlcHJlc2Vu
dGluZ1BhZ2VVcmw7CiAgICAgV2ViQ29yZTo6QXV0b2ZpbGxGaWVsZE5hbWUgYXV0b2ZpbGxGaWVs
ZE5hbWUgeyBXZWJDb3JlOjpBdXRvZmlsbEZpZWxkTmFtZTo6Tm9uZSB9OwogCiAgICAgdm9pZCBl
bmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCmluZGV4IDdjYzY2OTNkZDg5ZDFjZjg3ZGJlMzJkYmIwZjUzNDdmZGI2MzY1ZGEuLjMz
NmE2ZDAxYmIwMGEzNzYwNDUzMDg0MWE1OGEwYWEwYjBhYmZkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC03OSw2ICs3OSw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9TZWFyY2hQb3B1cE1lbnUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2luZy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVGV4dEdyYW51bGFyaXR5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9V
UkwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24uaD4K
ICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTU1OCw2ICs1
NTksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1Njcm9sbGluZ09yWm9vbWluZyhib29sKTsK
ICAgICB2b2lkIHJlcXVlc3RSZWN0c0ZvckdyYW51bGFyaXR5V2l0aFNlbGVjdGlvbk9mZnNldChX
ZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHksIHVpbnQzMl90IG9mZnNldCwgV1RGOjpGdW5jdGlvbjx2
b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYsIENhbGxiYWNrQmFzZTo6
RXJyb3IpPiYmKTsKICAgICB2b2lkIHJlcXVlc3RSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRl
eHQoaW50MzJfdCBvZmZzZXQsIGNvbnN0IFN0cmluZyYsIFdURjo6RnVuY3Rpb248dm9pZChjb25z
dCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4m
Jik7CisgICAgYm9vbCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKTsKKyAgICBX
ZWJDb3JlOjpVUkwgcmVwcmVzZW50aW5nUGFnZVVybCgpOworICAgIHZvaWQgYXV0b2ZpbGxMb2dp
bkNyZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dv
cmQpOwogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQogICAgIHZvaWQgZGlkUGVyZm9ybURh
dGFJbnRlcmFjdGlvbkNvbnRyb2xsZXJPcGVyYXRpb24oYm9vbCBoYW5kbGVkKTsKICAgICB2b2lk
IGRpZEhhbmRsZVN0YXJ0RGF0YUludGVyYWN0aW9uUmVxdWVzdChib29sIHN0YXJ0ZWQpOwpAQCAt
MTk4Nyw2ICsxOTkxLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzRGVmZXJyZWRTdGFydEFz
c2lzdGluZ05vZGUgeyBmYWxzZSB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxOb2RlQXNzaXN0YW5j
ZUFyZ3VtZW50cz4gbV9kZWZlcnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzOwogICAgIGJvb2wg
bV9mb3JjZUFsd2F5c1VzZXJTY2FsYWJsZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2FjY2VwdHNB
dXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyB7IGZhbHNlIH07CisgICAgV2ViQ29yZTo6VVJMIG1f
cmVwcmVzZW50aW5nUGFnZVVybDsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KaW5kZXggNTMw
NjgyYzMyOTk4ZjM4YmM2OWI5ZTFhMjQ2NGUwMWM0OWM4NDE5YS4uZTUzNzc2NDkzMThiOGEzMGYy
N2ZmODMwNzdhZWI3OThjMjFmMGM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXcubW0KQEAgLTI1OCw2ICsyNTgsMTYgQEAgLSAoV2ViUGFnZVByb3h5Kilw
YWdlCiAgICAgcmV0dXJuIF9wYWdlLmdldCgpOwogfQogCistIChCT09MKWFjY2VwdHNBdXRvZmls
bGVkTG9naW5DcmVkZW50aWFscworeworICAgIHJldHVybiBfcGFnZS0+YWNjZXB0c0F1dG9maWxs
ZWRMb2dpbkNyZWRlbnRpYWxzKCk7Cit9CisKKy0gKE5TVVJMICopcmVwcmVzZW50aW5nUGFnZVVy
bAoreworICAgIHJldHVybiBfcGFnZS0+cmVwcmVzZW50aW5nUGFnZVVybCgpOworfQorCiAtICh2
b2lkKXdpbGxNb3ZlVG9XaW5kb3c6KFVJV2luZG93ICopbmV3V2luZG93CiB7CiAgICAgTlNOb3Rp
ZmljYXRpb25DZW50ZXIgKmRlZmF1bHRDZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCA5NGVhMzc0NzdkYzk4OGJiMGZlMGFjNDA0
MTQzYmY1ZmZkNjJhYjFjLi4wOTJjMDNlZjhmN2E3YzcxYWE5MDhiOGQ3NjQ5OWMzMjk0M2Y1ZDcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0KQEAgLTI5NTUsNiArMjk1NSwxMCBAQCAtICh2b2lkKWVuZFNlbGVj
dGlvbkNoYW5nZQogICAgIAogLSAodm9pZClpbnNlcnRUZXh0U3VnZ2VzdGlvbjooVUlUZXh0U3Vn
Z2VzdGlvbiAqKXRleHRTdWdnZXN0aW9uCiB7CisgICAgaWYgKFt0ZXh0U3VnZ2VzdGlvbiBpc0tp
bmRPZkNsYXNzOltVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gY2xhc3NdXSkg
eworICAgICAgICBfcGFnZS0+YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKCgoVUlLZXlib2FyZExv
Z2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uKil0ZXh0U3VnZ2VzdGlvbikudXNlcm5hbWUsICgoVUlL
ZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uKil0ZXh0U3VnZ2VzdGlvbikucGFzc3dv
cmQpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlkIDxfV0tJbnB1dERlbGVnYXRlPiBp
bnB1dERlbGVnYXRlID0gW193ZWJWaWV3IF9pbnB1dERlbGVnYXRlXTsKICAgICBpZiAoW2lucHV0
RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzppbnNlcnRUZXh0
U3VnZ2VzdGlvbjppbklucHV0U2Vzc2lvbjopXSkKICAgICAgICAgW2lucHV0RGVsZWdhdGUgX3dl
YlZpZXc6X3dlYlZpZXcgaW5zZXJ0VGV4dFN1Z2dlc3Rpb246dGV4dFN1Z2dlc3Rpb24gaW5JbnB1
dFNlc3Npb246X2Zvcm1JbnB1dFNlc3Npb24uZ2V0KCldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggMzMxMmRjYWNmZWMwNTBjYjgwOWQ3
OGQ5ZTFlNGEzNTA5NmMzMjdlNy4uYTYwODhjZWRhNzg1MzY0YzBiZmU2YTJkM2U1MzA1MTE1YzM2
NGFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94
eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tCkBAIC05MDMsNiArOTAzLDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZEdldFRhcEhpZ2hs
aWdodEdlb21ldHJpZXModWludDY0X3QgcmVxdWVzdElELCBjb25zdCBXZWJDb3IKIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnN0YXJ0QXNzaXN0aW5nTm9kZShjb25zdCBBc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbiYgaW5mb3JtYXRpb24sIGJvb2wgdXNlcklzSW50ZXJhY3RpbmcsIGJvb2wgYmx1clByZXZp
b3VzTm9kZSwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQogeworICAgIG1fYWNjZXB0c0F1dG9m
aWxsZWRMb2dpbkNyZWRlbnRpYWxzID0gaW5mb3JtYXRpb24uYWNjZXB0c0F1dG9maWxsZWRMb2dp
bkNyZWRlbnRpYWxzOworICAgIG1fcmVwcmVzZW50aW5nUGFnZVVybCA9IGluZm9ybWF0aW9uLnJl
cHJlc2VudGluZ1BhZ2VVcmw7CiAgICAgQVBJOjpPYmplY3QqIHVzZXJEYXRhT2JqZWN0ID0gcHJv
Y2VzcygpLnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgp
OwogICAgIGlmIChtX2VkaXRvclN0YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKSB7CiAgICAg
ICAgIG1fZGVmZXJyZWROb2RlQXNzaXN0YW5jZUFyZ3VtZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8
Tm9kZUFzc2lzdGFuY2VBcmd1bWVudHM+KE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzIHsgaW5mb3Jt
YXRpb24sIHVzZXJJc0ludGVyYWN0aW5nLCBibHVyUHJldmlvdXNOb2RlLCB1c2VyRGF0YU9iamVj
dCB9KTsKQEAgLTkyMiw2ICs5MjQsMjEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BBc3Npc3Rp
bmdOb2RlKCkKICAgICBtX3BhZ2VDbGllbnQuc3RvcEFzc2lzdGluZ05vZGUoKTsKIH0KIAorYm9v
bCBXZWJQYWdlUHJveHk6OmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscygpCit7Cisg
ICAgcmV0dXJuIG1fYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzOworfQorCitXZWJD
b3JlOjpVUkwgV2ViUGFnZVByb3h5OjpyZXByZXNlbnRpbmdQYWdlVXJsKCkKK3sKKyAgICByZXR1
cm4gbV9yZXByZXNlbnRpbmdQYWdlVXJsOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6YXV0b2Zp
bGxMb2dpbkNyZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0cmluZyYg
cGFzc3dvcmQpCit7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBdXRv
ZmlsbExvZ2luQ3JlZGVudGlhbHModXNlcm5hbWUsIHBhc3N3b3JkKSwgbV9wYWdlSUQpOworfQor
CiB2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd0luc3BlY3RvckhpZ2hsaWdodChjb25zdCBXZWJDb3Jl
OjpIaWdobGlnaHQmIGhpZ2hsaWdodCkKIHsKICAgICBtX3BhZ2VDbGllbnQuc2hvd0luc3BlY3Rv
ckhpZ2hsaWdodChoaWdobGlnaHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCmluZGV4IDZiYzM3MWUyMGZjNDk3OWZmYzcyNDEwMzViYTQ2YzBmNjVkZWI0MTku
LjdkNmI2ZDFiZjlkZDQyYjhjMDgzZGIzNDIwNTBhOTVkYmEzOTRmOTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTU3Myw2ICs1NzMsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzdG9wSW50ZXJhY3Rpb24oKTsKICAgICB2b2lkIHBlcmZvcm1BY3Rpb25P
bkVsZW1lbnQodWludDMyX3QgYWN0aW9uKTsKICAgICB2b2lkIGZvY3VzTmV4dEFzc2lzdGVkTm9k
ZShib29sIGlzRm9yd2FyZCwgQ2FsbGJhY2tJRCk7CisgICAgdm9pZCBhdXRvZmlsbExvZ2luQ3Jl
ZGVudGlhbHMoU3RyaW5nLCBTdHJpbmcpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFsdWUo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRv
dWJsZSk7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGlu
ZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggOGU0ZDBjNjhk
NDA2ZGJiZTMzNTI1Y2Q5MTExNDBhYjU0YTcyNmM4ZC4uZjg3OGM3OGQ0ZTc2ZTVkNWZlMjgyMTY2
ZDUwZWVkYWY1ZTE2YmY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC04Myw2ICs4Myw3IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWlu
dDMyX3QgYWN0aW9uKQogICAgIEZvY3VzTmV4dEFzc2lzdGVkTm9kZShib29sIGlzRm9yd2FyZCwg
V2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgU2V0QXNzaXN0ZWROb2RlVmFsdWUo
U3RyaW5nIHZhbHVlKQorICAgIEF1dG9maWxsTG9naW5DcmVkZW50aWFscyhTdHJpbmcgdXNlcm5h
bWUsIFN0cmluZyBwYXNzd29yZCkKICAgICBTZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRv
dWJsZSB2YWx1ZSkKICAgICBTZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGlu
ZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCiAgICAgQXBwbGljYXRpb25XaWxsUmVz
aWduQWN0aXZlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0KaW5kZXggMmYxNWZiMTdhNjQ5NjI3ODZmOWNhZWE0M2Y1ZDg3YmFjODZl
YjY3NC4uNGMwMWM4NjkxZjk1MDUyZTc5NzE4NjU1Nzc5OTg3MTkzZDUwNzI4MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAg
LTI3NjAsNiArMjc2MCw4IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAgIH0gZWxzZSBpZiAo
aXM8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKSkgewogICAgICAgICBIVE1MSW5w
dXRFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0
ZWROb2RlKTsKICAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVudC5mb3JtKCk7
CisgICAgICAgIGluZm9ybWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyA9
IGVsZW1lbnQuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCk7CisgICAgICAgIGlu
Zm9ybWF0aW9uLnJlcHJlc2VudGluZ1BhZ2VVcmwgPSBlbGVtZW50LnJlcHJlc2VudGluZ1BhZ2VV
cmwoKTsKICAgICAgICAgaWYgKGZvcm0pCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5mb3JtQWN0
aW9uID0gZm9ybS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6YWN0aW9uQXR0
cik7CiAgICAgICAgIGluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlwZSA9IGVsZW1lbnQuYXV0
b2NhcGl0YWxpemVUeXBlKCk7CkBAIC0yODI1LDYgKzI4MjcsMTIgQEAgdm9pZCBXZWJQYWdlOjpz
ZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25NaW5pbXVtTGF5b3V0U2l6ZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCiAgICAgICAgIHZpZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQoKTsKIH0KIAordm9p
ZCBXZWJQYWdlOjphdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoU3RyaW5nIHVzZXJuYW1lLCBTdHJp
bmcgcGFzc3dvcmQpCit7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fYXNzaXN0ZWRO
b2RlLmdldCgpKSkKKyAgICAgICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0
ZWROb2RlKS5hdXRvZmlsbExvZ2luQ3JlZGVudGlhbHModXNlcm5hbWUsIHBhc3N3b3JkKTsKK30K
Kwogdm9pZCBXZWJQYWdlOjpzZXRNYXhpbXVtVW5vYnNjdXJlZFNpemUoY29uc3QgRmxvYXRTaXpl
JiBtYXhpbXVtVW5vYnNjdXJlZFNpemUpCiB7CiAgICAgbV9tYXhpbXVtVW5vYnNjdXJlZFNpemUg
PSBtYXhpbXVtVW5vYnNjdXJlZFNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaAppbmRleCBhMDkyMzc3YjFkZTkxNWY1NjhhNTMwZTll
M2FlZDNmMGIzMzI5ZGZmLi5lYzBlODgyYmM4OTE5OTEyNjBkYTJhZTMwMmY4Y2NkNjc5ZTkwNzNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVt
ZW50LmgKQEAgLTI0LDYgKzI0LDkgQEAKICAqLwogCiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9N
SFRNTEVsZW1lbnQuaD4KKyNpZiBUQVJHRVRfT1NfSVBIT05FCisjaW1wb3J0IDxVSUtpdC9VSVRl
eHRJbnB1dFRyYWl0cy5oPgorI2VuZGlmCiAKIEBjbGFzcyBET01GaWxlTGlzdDsKIEBjbGFzcyBE
T01IVE1MRm9ybUVsZW1lbnQ7CkBAIC0zMSw3ICszNCwxMSBAQAogQGNsYXNzIE5TVVJMOwogCiBX
RUJLSVRfQ0xBU1NfQVZBSUxBQkxFX01BQygxMF80KQorI2lmIFRBUkdFVF9PU19JUEhPTkUKK0Bp
bnRlcmZhY2UgRE9NSFRNTElucHV0RWxlbWVudCA6IERPTUhUTUxFbGVtZW50PFVJVGV4dElucHV0
VHJhaXRzPgorI2VsaWYKIEBpbnRlcmZhY2UgRE9NSFRNTElucHV0RWxlbWVudCA6IERPTUhUTUxF
bGVtZW50CisjZW5kaWYKIEBwcm9wZXJ0eSAoY29weSkgTlNTdHJpbmcgKmFjY2VwdDsKIEBwcm9w
ZXJ0eSAoY29weSkgTlNTdHJpbmcgKmFsdDsKIEBwcm9wZXJ0eSBCT09MIGF1dG9mb2N1cyBXRUJL
SVRfQVZBSUxBQkxFX01BQygxMF82KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQubW0KaW5kZXggOWJjODAzYzU5NTg1MDFjODY5MDk0NTIw
M2ZiYTJhNzA5ODU3NmQxYS4uNWQ5NjQ2MDAyOGM2ZWM0NGY5MjgxMzZhNTcyNGI5YzE3ZmE2ODg0
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVs
ZW1lbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVs
ZW1lbnQubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkRPTUludGVybmFsLmgiCiAjaW1w
b3J0ICJET01Qcml2YXRlLmgiCiAjaW1wb3J0ICJFeGNlcHRpb25IYW5kbGVycy5oIgorI2ltcG9y
dCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZpbGVMaXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgpAQCAtNjY2LDYgKzY2NywyNCBAQCAt
ICh2b2lkKXNldFZhbHVlRm9yVXNlcjooTlNTdHJpbmcgKilpblZhbHVlCiAgICAgSU1QTC0+c2V0
VmFsdWVGb3JVc2VyKGluVmFsdWUpOwogfQogCistIChCT09MKWFjY2VwdHNBdXRvZmlsbGVkTG9n
aW5DcmVkZW50aWFscworeworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICByZXR1cm4gSU1QTC0+YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCk7
Cit9CisKKy0gKE5TVVJMICopcmVwcmVzZW50aW5nUGFnZVVybAoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gSU1QTC0+cmVwcmVzZW50aW5n
UGFnZVVybCgpOworfQorCistICh2b2lkKWluc2VydFRleHRTdWdnZXN0aW9uOihVSUtleWJvYXJk
TG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKiljcmVkZW50aWFsc1N1Z2dlc3Rpb24KK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+YXV0b2Zp
bGxMb2dpbkNyZWRlbnRpYWxzKGNyZWRlbnRpYWxzU3VnZ2VzdGlvbi51c2VybmFtZSwgY3JlZGVu
dGlhbHNTdWdnZXN0aW9uLnBhc3N3b3JkKTsKK30KKwogQGVuZAogCiBXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50KiBjb3JlKERPTUhUTUxJbnB1dEVsZW1lbnQgKndyYXBwZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318452</attachid>
            <date>2017-08-17 18:19:12 -0700</date>
            <delta_ts>2017-08-29 13:37:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170817181912.patch</filename>
            <type>text/plain</type>
            <size>30494</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwNDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQ3NWM0YzY4NjcxMWJl
ODE0MWM2ZjBmMGVkN2VhNmYzNTk2MWVjZi4uNTgyZDRkNzE2OGU5MTQ2MzY5NTBlZDk4YTkyYjc4
NzA2NzAwNDAzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE3LTA4LTE3ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpuZXh0QXNzaXN0YWJsZUVsZW1lbnQgY29u
c3QpOiBFeHBvc2UgbmV4dEFzc2lzYWJsZUVsZW1lbnQgbWV0aG9kCisgICAgICAgIGZvciBkb2N1
bWVudHMuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmFjY2Vw
dHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk6IERldGVybWluZXMgaWYgdGhlCisgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQgaXMgcGFydCBvZiBhIGxvZ2luIHNjcmVlbi4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzQXNzaXN0YWJsZUVsZW1lbnQpOiBEZXRlcm1pbmVz
IGlmIHRoZSBIVE1MSW5wdXRFbGVtZW50CisgICAgICAgIGlzIGFuIGFzc2lzdGFibGUgZWxlbWVu
dCAoaXNUZXh0RmllbGQsIGlzRGF0ZUZpZWxkLCBpc0RhdGVUaW1lTG9jYWxGaWVsZCwKKyAgICAg
ICAgaXNNb250aEZpZWxkLCBpc1RpbWVGaWVsZCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjphdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMpOiBGaWxscyB1c2VybmFtZSBhbmQg
cGFzc3dvcmQKKyAgICAgICAgaW50byB0aGUgYXNzb2NpYXRlZCBsb2dpbiBzY3JlZW4uCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpjb21wdXRlVXNlcm5hbWVBbmRQYXNzd29y
ZEVsZW1lbnRzKTogQ29tcHV0ZXMgdGhlIHVzZXJuYW1lCisgICAgICAgIGFuZCBwYXNzd29yZCBp
ZiB0aGlzIEhUTUxJbnB1dEVsZW1lbnQgaXMgcGFydCBvZiBhIGxvZ2luIHNjcmVlbi4KKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0Fzc2lzdGFibGVFbGVtZW50KTogRGV0ZXJt
aW5lcyBpZiBhbiBFbGVtZW50IGlzIGFzc2lzdGFibGUuCisgICAgICAgIChXZWJDb3JlOjpGb2N1
c0NvbnRyb2xsZXI6Om5leHRBc3Npc3RhYmxlRWxlbWVudCk6IExvb2tzIGZvciB0aGUgbmV4dC9w
cmV2aW91cworICAgICAgICBhc3Npc3RhYmxlIGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpG
b2N1c0NvbnRyb2xsZXI6Omhhc05leHRBc3Npc3RhYmxlRWxlbWVudCk6IERldGVybWluZXMgaWYg
dGhlIEVsZW1lbnQgaGFzCisgICAgICAgIGEgbmV4dC9wcmV2aW91cyBhc3Npc3RhYmxlIGVsZW1l
bnQuCisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKwogMjAxNy0wOC0wOCAgSmVy
ZW15IEpvbmVzICA8amVyZW15akBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhbmdlIGZhc3Qgc2Vl
ayBsb2dpYyB0byBwcmV2ZW50IHBpbmctcG9uZ2luZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmYzMGIzNzMxNTA3
YTM1MTQyZTllMTg1MjA1MDJkNjcwODBmMGM2NS4uMjQyMTFlNmI2NThhZDY3ZGY0NTdhM2FkYjI1
NTg1ZWFjNjdjZDkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxNy0wOC0xNyAgRnJl
ZGVyaWsgUmllZGVsICA8cmllZGVsQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBvc2Ugd2F5IHRv
IHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3JtIGNvbnRyb2xzIGFzIHtMZWdhY3kgV2ViS2l0
LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzE4MzUwND4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9p
b3MvVUlLaXRTUEkuaDoKKyAgICAgICAgKiBTaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
Y3BwOgorICAgICAgICAoV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZW5jb2RlIGNv
bnN0KTogRW5jb2RlcyBhZGRpdGlvbmFsIG5vZGUgaW5mb3JtYXRpb24KKyAgICAgICAgZm9yIGlu
ZGljYXRpbmcgaWYgdGhlIG5vZGUgYWNjZXB0cyBhdXRvZmlsbGVkIGxvZ2luIGNyZWRlbnRpYWxz
LgorICAgICAgICAoV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZGVjb2RlKTogRGVj
b2RlcyBhZGRpdGlvbmFsIG5vZGUgaW5mb3JtYXRpb24KKyAgICAgICAgZm9yIGluZGljYXRpbmcg
aWYgdGhlIG5vZGUgYWNjZXB0cyBhdXRvZmlsbGVkIGxvZ2luIGNyZWRlbnRpYWxzLgorICAgICAg
ICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcu
bW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRl
bnRpYWxzXSk6IFRoaXMgbWV0aG9kIGRldGVybWluZXMgaWYKKyAgICAgICAgdGhlIFdLQ29udGVu
dFZpZXcgaXMgY2FwYWJsZSBvZiByZWNlaXZpbmcgYXV0b2ZpbGxlZCBsb2dpbiBjcmVkZW50aWFs
cy4KKyAgICAgICAgKC1bV0tDb250ZW50VmlldyByZXByZXNlbnRpbmdQYWdlVXJsXSk6IFRoaXMg
bWV0aG9kIHJldHVybnMgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgVVJMCisgICAgICAgIHRoYXQg
aXMgcmVwcmVzZW50ZWQgYnkgdGhlIFdLQ29udGVudFZpZXcuCisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZp
ZXcgaW5zZXJ0VGV4dFN1Z2dlc3Rpb246XSk6IFRoaXMgbWV0aG9kIGZpbGxzIGEgbG9naW4gc3Vn
Z2VzdGlvbgorICAgICAgICAoVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uKSBp
bnRvIHRoZSBXS0NvbnRlbnRWaWV3LgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0YXJ0QXNzaXN0aW5n
Tm9kZSk6IFRyYW5zcG9ydHMgdGhlIGluZm9ybWF0aW9uIGlmIHRoZSBjdXJyZW50bHkKKyAgICAg
ICAgaGlnaGxpZ2h0ZWQgbm9kZSBhY2NlcHRzIGF1dG9maWxsZWQgbG9naW4gY3JlZGVudGlhbHMu
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNy
ZWRlbnRpYWxzKTogRGV0ZXJtaW5lcyBpZiB0aGUgV2ViUGFnZQorICAgICAgICBhY2NlcHRzIGF1
dG9maWxsZWQgbG9naW4gY3JlZGVudGlhbHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6cmVwcmVzZW50aW5nUGFnZVVybCk6IFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGN1cnJlbnRs
eSBkaXNwbGF5ZWQgVVJMCisgICAgICAgIHRoYXQgaXMgcmVwcmVzZW50ZWQgc2hvd24gaW4gdGhl
IFdlYlBhZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YXV0b2ZpbGxMb2dpbkNy
ZWRlbnRpYWxzKTogRmlsbHMgdGhlIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlCisgICAgICAg
IFdlYlBhZ2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OmZvY3VzTmV4dEFzc2lzdGVkTm9kZSk6IFVzZXMgdGhlIG5ldyBBUEkgaW4gV2ViQ29y
ZTo6Rm9jdXNDb250cm9sbGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbik6IFRyYW5zcG9ydHMgdGhlIGluZm9ybWF0aW9uIGlmIHRoZSBjdXJy
ZW50bHkKKyAgICAgICAgaGlnaGxpZ2h0ZWQgbm9kZSBhY2NlcHRzIGF1dG9maWxsZWQgbG9naW4g
Y3JlZGVudGlhbHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmF1dG9maWxsTG9naW5DcmVk
ZW50aWFscyk6IEZpbGxzIHRoZSBsb2dpbiBjcmVkZW50aWFscyBpbnRvIHRoZQorICAgICAgICBX
ZWJQYWdlLgorICAgICAgICAoV2ViS2l0OjpuZXh0QXNzaXN0YWJsZUVsZW1lbnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpoYXNBc3Npc3RhYmxlRWxlbWVudCk6IERlbGV0ZWQuCisKIDIw
MTctMDgtMDggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgZml4IHRoZSBNYWMgZGVidWcgYnVpbGQgYWZ0ZXIgcjIyMDQxOC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA3ODE3ZDBiODVjZjdhODVlOGQxYWYwN2VlODcy
ZTdmOWZlZWYyMmEzLi5lNzkwMGVhNjY0MzVjMTQ2M2I5NmRlODE5MDRiYWNmODI2ZWU2M2M3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMDgtMTcg
IEZyZWRlcmlrIFJpZWRlbCAgPGZyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3
YXkgdG8gc2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBX
ZWJLaXQsIFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTUhU
TUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBET00vRE9NSFRNTElucHV0RWxlbWVudC5tbToK
KyAgICAgICAgKC1bRE9NSFRNTElucHV0RWxlbWVudCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3Jl
ZGVudGlhbHNdKTogRGV0ZXJtaW5lcyBpZiB0aGUKKyAgICAgICAgRE9NSFRNTElucHV0RWxlbWVu
dCBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVt
ZW50IHJlcHJlc2VudGluZ1BhZ2VVcmxdKTogUmV0dXJucyB0aGUgVVJMIHRoYXQgaXMgY3VycmVu
dGx5CisgICAgICAgIGRpc3BsYXllZCBpbiB0aGUgV2ViVmlldyB0aGF0IHRoZSBJbnB1dEVsZW1l
bnQgaXMgcGFydCBvZi4KKyAgICAgICAgKC1bRE9NSFRNTElucHV0RWxlbWVudCBpbnNlcnRUZXh0
U3VnZ2VzdGlvbjpdKTogSW5zZXJ0cyBhIHRleHQgc3VnZ2VzdGlvbiAodXNlcm5hbWUgKworICAg
ICAgICBwYXNzd29yZCBpbnRvIHRoZSBsb2dpbiBzY3JlZW4gdGhhdCB0aGUgSW5wdXRFbGVtZW50
IGlzIHBhcnQgb2YpLgorCiAyMDE3LTA4LTA3ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxl
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBQcmV2aWV3IENhbnZhcyBwYXRoIHdoZW4g
dmlld2luZyBhIHJlY29yZGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggYzg5M2JjZDFi
ZmVjZWVlMTYyYzI1Mzk4M2Q5OTE5MmM3MWYxOGUwNC4uYzNhYzg3Y2Q1YTFhMjYwNmUzODA4YjI1
YzU0OWVkZmI3ZTQyOTBlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC02OTE4LDYgKzY5
MTgsMTMgQEAgYm9vbCBEb2N1bWVudDo6aGFzRm9jdXMoKSBjb25zdAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAorUmVmUHRyPEVsZW1lbnQ+IERvY3VtZW50OjpuZXh0QXNzaXN0YWJsZUVsZW1lbnQo
RWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0ZvcndhcmQpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8q
IHBhZ2UgPSB0aGlzLT5wYWdlKCkpCisgICAgICAgIHJldHVybiBwYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS5uZXh0QXNzaXN0YWJsZUVsZW1lbnQoZWxlbWVudCwgaXNGb3J3YXJkKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKwogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAK
IHN0YXRpYyB1aW50NjRfdCBuZXh0UGxheWJhY2tUYXJnZXRDbGllbnRDb250ZXh0SWQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAppbmRleCAzZWI4YzBlNmNkNmQ2ZGYyYTM4N2ZhMjliODNmNjMxNzQ0ODBk
NTJiLi43Mjk0NDYwMTM3NzMxOWMwY2VjZWY5Y2U4Mzg1YTE1ZDdiMGYyYWIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaApAQCAtMzkyLDYgKzM5Miw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIEVsZW1lbnQqIGFjdGl2ZUVsZW1lbnQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhh
c0ZvY3VzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEVsZW1lbnQ+IG5leHRB
c3Npc3RhYmxlRWxlbWVudChFbGVtZW50KiwgYm9vbCkgY29uc3Q7CiAKICAgICBib29sIGhhc01h
bmlmZXN0KCkgY29uc3Q7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAppbmRleCAzNzM3NzlmNDU5ZTg3MjAwNjQ1MmQ5Y2FlOTI3YjQ2YzM1YzI3ZTE4Li5kYjRm
Njc4N2ViM2UyMTkyZjFkYmViYzBjNzU5MTg1NWFhNGVjNzA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCiAjaW5jbHVkZSAiRmlsZUlucHV0VHlwZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0
LmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRm9ybUNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCkBA
IC04OTMsNiArODk0LDgzIEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNUZXh0VHlwZSgpIGNv
bnN0CiAgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5pc1RleHRUeXBlKCk7CiB9CiAKK2Jvb2wgSFRN
TElucHV0RWxlbWVudDo6YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCkKK3sKKyAg
ICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gdXNlcm5hbWVFbGVtZW50ID0gbnVsbHB0cjsKKyAg
ICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gcGFzc3dvcmRFbGVtZW50ID0gbnVsbHB0cjsKKyAg
ICByZXR1cm4gY29tcHV0ZVVzZXJuYW1lQW5kUGFzc3dvcmRFbGVtZW50cyh0aGlzLCB1c2VybmFt
ZUVsZW1lbnQsIHBhc3N3b3JkRWxlbWVudCwgdGhpcy0+ZG9jdW1lbnQoKSk7Cit9CisKK2Jvb2wg
SFRNTElucHV0RWxlbWVudDo6aXNBc3Npc3RhYmxlRWxlbWVudCgpCit7CisgICAgcmV0dXJuIGlz
VGV4dEZpZWxkKCkgfHwgaXNEYXRlRmllbGQoKSB8fCBpc0RhdGVUaW1lTG9jYWxGaWVsZCgpIHx8
IGlzTW9udGhGaWVsZCgpIHx8IGlzVGltZUZpZWxkKCk7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxl
bWVudDo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBh
c3N3b3JkKQoreworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiB1c2VybmFtZUVsZW1lbnQg
PSBudWxscHRyOworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwYXNzd29yZEVsZW1lbnQg
PSBudWxscHRyOworICAgIGlmIChjb21wdXRlVXNlcm5hbWVBbmRQYXNzd29yZEVsZW1lbnRzKHRo
aXMsIHVzZXJuYW1lRWxlbWVudCwgcGFzc3dvcmRFbGVtZW50LCB0aGlzLT5kb2N1bWVudCgpKSkg
eworICAgICAgICBpZiAodXNlcm5hbWVFbGVtZW50KSB7CisgICAgICAgICAgICB1c2VybmFtZUVs
ZW1lbnQtPnNldFZhbHVlRm9yVXNlcih1c2VybmFtZSk7CisgICAgICAgICAgICB1c2VybmFtZUVs
ZW1lbnQtPnNldEF1dG9GaWxsZWQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFzc3dvcmRF
bGVtZW50KSB7CisgICAgICAgICAgICBwYXNzd29yZEVsZW1lbnQtPnNldFZhbHVlRm9yVXNlcihw
YXNzd29yZCk7CisgICAgICAgICAgICBwYXNzd29yZEVsZW1lbnQtPnNldEF1dG9GaWxsZWQoKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpjb21wdXRlVXNl
cm5hbWVBbmRQYXNzd29yZEVsZW1lbnRzKEVsZW1lbnQgKnN0YXJ0LCBSZWZQdHI8SFRNTElucHV0
RWxlbWVudD4mIHVzZXJuYW1lRWxlbWVudCwgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+JiBwYXNz
d29yZEVsZW1lbnQsIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICAvLyBOb3JtYWwg
TG9naW4gV29ya2Zsb3cKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oc3RhcnQpKSB7Cisg
ICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dEVsZW1lbnQgPSAmZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKnN0YXJ0KTsKKyAgICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNQ
YXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAgICAgIC8vIFBhc3N3b3JkIGVsZW1lbnQgaGlnaGxp
Z2h0ZWQsIG5vdyBmaW5kIGEgdXNlcm5hbWUgZWxlbWVudC4KKyAgICAgICAgICAgIFJlZlB0cjxF
bGVtZW50PiBwcmV2aW91c0VsZW1lbnQgPSBkb2N1bWVudC5uZXh0QXNzaXN0YWJsZUVsZW1lbnQo
aW5wdXRFbGVtZW50LmdldCgpLCBmYWxzZSk7CisgICAgICAgICAgICBpZiAoaXM8SFRNTElucHV0
RWxlbWVudD4ocHJldmlvdXNFbGVtZW50LmdldCgpKSkgeworICAgICAgICAgICAgICAgIFJlZlB0
cjxIVE1MSW5wdXRFbGVtZW50PiBwb3RlbnRpYWxVc2VybmFtZUZpZWxkID0gJmRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCpwcmV2aW91c0VsZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChw
b3RlbnRpYWxVc2VybmFtZUZpZWxkLT5pc1RleHRGaWVsZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHBhc3N3b3JkRWxlbWVudCA9IGlucHV0RWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAg
dXNlcm5hbWVFbGVtZW50ID0gcG90ZW50aWFsVXNlcm5hbWVGaWVsZDsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVXNlcm5hbWUgZWxlbWVudCBoaWdobGlnaHRl
ZCwgbm93IGZpbmQgYSBwYXNzd29yZCBlbGVtZW50LgorICAgICAgICAgICAgUmVmUHRyPEVsZW1l
bnQ+IG5leHRFbGVtZW50ID0gZG9jdW1lbnQubmV4dEFzc2lzdGFibGVFbGVtZW50KGlucHV0RWxl
bWVudC5nZXQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4o
bmV4dEVsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVs
ZW1lbnQ+IHBvdGVudGlhbFBhc3N3b3JkRmllbGQgPSAmZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKm5leHRFbGVtZW50KTsKKyAgICAgICAgICAgICAgICBpZiAocG90ZW50aWFsUGFzc3dvcmRG
aWVsZC0+aXNQYXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmRF
bGVtZW50ID0gcG90ZW50aWFsUGFzc3dvcmRGaWVsZDsKKyAgICAgICAgICAgICAgICAgICAgdXNl
cm5hbWVFbGVtZW50ID0gaW5wdXRFbGVtZW50OworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBUd28tU3RlcCBMb2dpbiwgU2luZ2xlIFBhc3N3b3JkIEZpZWxkIG9uIFBhZ2UK
KyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oc3RhcnQpKSB7CisgICAgICAgIFJlZlB0cjxI
VE1MSW5wdXRFbGVtZW50PiBpbnB1dEVsZW1lbnQgPSAmZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKnN0YXJ0KTsKKyAgICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkp
IHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBwYXNzd29yZCBlbGVtZW50IGlz
IHRoZSBvbmx5IG9uZSBvZiBpdHMga2luZC4KKyAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBw
cmV2aW91c0VsZW1lbnQgPSBkb2N1bWVudC5uZXh0QXNzaXN0YWJsZUVsZW1lbnQoaW5wdXRFbGVt
ZW50LmdldCgpLCBmYWxzZSk7CisgICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gbmV4dEVsZW1l
bnQgPSBkb2N1bWVudC5uZXh0QXNzaXN0YWJsZUVsZW1lbnQoaW5wdXRFbGVtZW50LmdldCgpLCBm
YWxzZSk7CisgICAgICAgICAgICBpZiAoIXByZXZpb3VzRWxlbWVudC5nZXQoKSAmJiAhbmV4dEVs
ZW1lbnQuZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBwYXNzd29yZEVsZW1lbnQgPSBpbnB1dEVs
ZW1lbnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB1c2VybmFtZUVsZW1lbnQgPSBudWxscHRyOworICAgIHBhc3N3
b3JkRWxlbWVudCA9IG51bGxwdHI7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnNldENoZWNrZWQoYm9vbCBub3dDaGVja2VkLCBUZXh0RmllbGRFdmVudEJl
aGF2aW9yIGV2ZW50QmVoYXZpb3IpCiB7CiAgICAgaWYgKGNoZWNrZWQoKSA9PSBub3dDaGVja2Vk
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCBkMjYzMjdmZjgxZGE2
MzQ5NmYwMzlkNzNkYzBhNzAxYTc2N2IyYmQ5Li4wMGY4OTVjMTAwNWE5OTEyODI4YjQ5YTIwMzRh
MDBjMGM3NTczMjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApAQCAt
NzMsNiArNzMsMTAgQEAgcHVibGljOgogICAgIGJvb2wgdmFsdWVNaXNzaW5nKCkgY29uc3QgZmlu
YWw7CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGF1dG9maWxsTG9naW5DcmVkZW50aWFscyhTdHJpbmcsIFN0cmluZyk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0Fzc2lzdGFibGVFbGVtZW50KCk7CisgICAgc3RhdGlj
IGJvb2wgY29tcHV0ZVVzZXJuYW1lQW5kUGFzc3dvcmRFbGVtZW50cyhFbGVtZW50ICosIFJlZlB0
cjxIVE1MSW5wdXRFbGVtZW50PiYsIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiYsIGNvbnN0IERv
Y3VtZW50Jik7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlIGZvciB0eXBlPWRh
dGUsIG51bWJlciwgb3IgcmFuZ2UuICBEb24ndCBjYWxsIHRoaXMgZm9yIG90aGVyIHR5cGVzLgog
ICAgIGRvdWJsZSBtaW5pbXVtKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJv
bGxlci5jcHAKaW5kZXggMTU4NDg3Y2ViY2UzYjlkNzA4OGRlNGM0ZDI2YTZkMzU0ZmViMmI0Ny4u
ZTQyNjhkYzY3YmRmZTE2YzMyYzJiNTc1M2QyOWZmNTQ1MjU0MzU5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1M
UGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTFNsb3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAgLTg0LDYgKzg1LDE5IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0ZvY3VzU2NvcGVPd25lcihjb25zdCBFbGVtZW50JiBlbGVtZW50KQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGlzQXNzaXN0YWJsZUVsZW1lbnQo
RWxlbWVudCogbm9kZSkKK3sKKyAgICBpZiAoaXM8SFRNTFNlbGVjdEVsZW1lbnQ+KG5vZGUpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaXM8SFRNTFRleHRBcmVhRWxlbWVudD4obm9k
ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihu
b2RlKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBkb3duY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKTsKKyAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+
aXNBc3Npc3RhYmxlRWxlbWVudCgpOworICAgIH0KKyAgICByZXR1cm4gbm9kZS0+aXNDb250ZW50
RWRpdGFibGUoKTsKK30KKwogY2xhc3MgRm9jdXNOYXZpZ2F0aW9uU2NvcGUgewogcHVibGljOgog
ICAgIEVsZW1lbnQqIG93bmVyKCkgY29uc3Q7CkBAIC02NDAsNiArNjU0LDI2IEBAIEVsZW1lbnQq
IEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVFbGVtZW50KE5vZGUmIHN0YXJ0KQog
ICAgIHJldHVybiBwcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnRPclNjb3BlT3duZXIoRm9jdXNOYXZp
Z2F0aW9uU2NvcGU6OnNjb3BlT2Yoc3RhcnQpLCAmc3RhcnQsIGtleUV2ZW50LmdldCgpKTsKIH0K
IAorRWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpuZXh0QXNzaXN0YWJsZUVsZW1lbnQoTm9kZSog
c3RhcnROb2RlLCBib29sIGlzRm9yd2FyZCkKK3sKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KHN0YXJ0
Tm9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgRWxlbWVudCogbmV4dEVsZW1l
bnQgPSBkb3duY2FzdDxFbGVtZW50PihzdGFydE5vZGUpOworICAgIGRvIHsKKyAgICAgICAgbmV4
dEVsZW1lbnQgPSBpc0ZvcndhcmQKKyAgICAgICAgPyBuZXh0Rm9jdXNhYmxlRWxlbWVudCgqbmV4
dEVsZW1lbnQpCisgICAgICAgIDogcHJldmlvdXNGb2N1c2FibGVFbGVtZW50KCpuZXh0RWxlbWVu
dCk7CisgICAgfSB3aGlsZSAobmV4dEVsZW1lbnQgJiYgIWlzQXNzaXN0YWJsZUVsZW1lbnQobmV4
dEVsZW1lbnQpKTsKKworICAgIHJldHVybiBuZXh0RWxlbWVudDsKK30KKworYm9vbCBGb2N1c0Nv
bnRyb2xsZXI6Omhhc05leHRBc3Npc3RhYmxlRWxlbWVudChOb2RlKiBzdGFydCwgYm9vbCBpc0Zv
cndhcmQpCit7CisgICAgcmV0dXJuIG5leHRBc3Npc3RhYmxlRWxlbWVudChzdGFydCwgaXNGb3J3
YXJkKTsKK30KKwogRWxlbWVudCogRm9jdXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlRWxlbWVu
dE9yU2NvcGVPd25lcihjb25zdCBGb2N1c05hdmlnYXRpb25TY29wZSYgc2NvcGUsIE5vZGUqIHN0
YXJ0LCBLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBpbnQgc3RhcnRUYWJJbmRleCA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAppbmRleCBjNmRjZjIyMjA5MzVlY2Ji
MWZjYmQ0MjIxZjJjYTJkOTQ3M2Y3N2EzLi5mMTQ1YmI2MzJiNTE4NzFiMWM0ZDc3YTY5Yjc2ZGRl
YTk5MzI0NjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKQEAgLTc2LDYg
Kzc2LDkgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIG5leHRGb2N1c2Fi
bGVFbGVtZW50KE5vZGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBwcmV2aW91c0Zv
Y3VzYWJsZUVsZW1lbnQoTm9kZSYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogbmV4
dEFzc2lzdGFibGVFbGVtZW50KE5vZGUqLCBib29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGhhc05leHRBc3Npc3RhYmxlRWxlbWVudChOb2RlKiwgYm9vbCk7CisKICAgICB2b2lkIHNldEZv
Y3VzZWRFbGVtZW50TmVlZHNSZXBhaW50KCk7CiAgICAgZG91YmxlIHRpbWVTaW5jZUZvY3VzV2Fz
U2V0KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lv
cy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgK
aW5kZXggN2VkYjU2NjE0Y2VhMjg3NTZmYzIyZTgwNGZmZDliMGU2NWY2YTJkNC4uNTVhZTdkNDVi
Y2RiNTkwZTI4N2JjMDA5ZDViNDYzZjZiNTRmMjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTQzLDYgKzQzLDE3IEBACiAjaW1wb3J0IDxVSUtpdC9V
SUludGVyZmFjZV9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkSW1wbC5oPgog
I2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZEludGwuaD4KKyNpZiBfX2hhc19pbmNsdWRlKDxVSUtp
dC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24uaD4pCisjaW1wb3J0IDxVSUtp
dC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24uaD4KKyNlbHNlCisjaW1wb3J0
IDxVSUtpdC9VSVRleHRJbnB1dF9Qcml2YXRlLmg+CitAaW50ZXJmYWNlIFVJS2V5Ym9hcmRMb2dp
bkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiA6IFVJVGV4dFN1Z2dlc3Rpb24KKworQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnVzZXJuYW1lOworQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgTlNTdHJpbmcgKnBhc3N3b3JkOworCitAZW5kCisjZW5kaWYKICNpbXBvcnQg
PFVJS2l0L1VJS2V5Ym9hcmRfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlMb25nUHJlc3NH
ZXN0dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSVBlcmlwaGVyYWxI
b3N0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bi5jcHAKaW5kZXggYWM5NmYwMGI3YTQ1MWE4M2ViYWYyNzNkMzE1MGM0ODMyZWE4MzMyNC4uYTEy
NmQwYTA1NTAxMDBhOWJhN2Y5NmRlZDRhMWM4YTQ4ODI5NTY2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcApAQCAtODUsNiArODUsOCBA
QCB2b2lkIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdmFsdWU7CiAgICAgZW5jb2RlciA8PCB2YWx1ZUFz
TnVtYmVyOwogICAgIGVuY29kZXIgPDwgdGl0bGU7CisgICAgZW5jb2RlciA8PCBhY2NlcHRzQXV0
b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CisgICAgZW5jb2RlciA8PCByZXByZXNlbnRpbmdQYWdl
VXJsOwogICAgIGVuY29kZXIuZW5jb2RlRW51bShhdXRvZmlsbEZpZWxkTmFtZSk7CiB9CiAKQEAg
LTE1OSw2ICsxNjEsMTIgQEAgYm9vbCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZGVjb2RlKElQ
Qzo6RGVjb2RlciYgZGVjb2RlciwgQXNzaXN0ZWROb2RlSW5mb3JtYXQKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC50aXRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFs
cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LnJlcHJlc2VudGluZ1BhZ2VVcmwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQuYXV0b2ZpbGxGaWVsZE5hbWUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lz
dGVkTm9kZUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbi5oCmluZGV4IGM2NzE5Mzc1OWVkMzk0NGVjYmQ4MmEzOGJmYzk2MGI3N2E2MTRh
ZTQuLjhhMTM0ODk0ZWEwNTVjM2UzZjAwY2E1MmQ4NzkwMjk1M2RhNzNhMmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmgKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaApAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b2NhcGl0YWxpemVUeXBlcy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvQXV0b2ZpbGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwOSw2ICsxMTAsOCBAQCBzdHJ1Y3QgQXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24gewogICAgIFN0cmluZyB2YWx1ZTsKICAgICBkb3VibGUgdmFsdWVBc051bWJl
ciB7IDAgfTsKICAgICBTdHJpbmcgdGl0bGU7CisgICAgYm9vbCBhY2NlcHRzQXV0b2ZpbGxlZExv
Z2luQ3JlZGVudGlhbHM7CisgICAgV2ViQ29yZTo6VVJMIHJlcHJlc2VudGluZ1BhZ2VVcmw7CiAg
ICAgV2ViQ29yZTo6QXV0b2ZpbGxGaWVsZE5hbWUgYXV0b2ZpbGxGaWVsZE5hbWUgeyBXZWJDb3Jl
OjpBdXRvZmlsbEZpZWxkTmFtZTo6Tm9uZSB9OwogCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNv
ZGVyJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDI3
NGQzMmFjZjJiNWU2ZDEzM2YxYWIzMDgwN2Y4ZDA4MmVmNjBjNzYuLmJkMDVlNDMzZWMyZmIyOTBk
MGZjMzc0ODVmYTcwZjU4Y2ZkNjU0NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCkBAIC03OSw2ICs3OSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZWFyY2hQb3B1cE1l
bnUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2luZy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVGV4dEdyYW51bGFyaXR5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24uaD4KICNpbmNsdWRlIDxtZW1v
cnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTU1OCw2ICs1NTksOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRJc1Njcm9sbGluZ09yWm9vbWluZyhib29sKTsKICAgICB2b2lkIHJlcXVl
c3RSZWN0c0ZvckdyYW51bGFyaXR5V2l0aFNlbGVjdGlvbk9mZnNldChXZWJDb3JlOjpUZXh0R3Jh
bnVsYXJpdHksIHVpbnQzMl90IG9mZnNldCwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAg
ICB2b2lkIHJlcXVlc3RSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJfdCBvZmZz
ZXQsIGNvbnN0IFN0cmluZyYsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6U2VsZWN0aW9uUmVjdD4mLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgYm9vbCBh
Y2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKTsKKyAgICBXZWJDb3JlOjpVUkwgcmVw
cmVzZW50aW5nUGFnZVVybCgpOworICAgIHZvaWQgYXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNv
bnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOwogI2lmIEVOQUJM
RShEQVRBX0lOVEVSQUNUSU9OKQogICAgIHZvaWQgZGlkUGVyZm9ybURhdGFJbnRlcmFjdGlvbkNv
bnRyb2xsZXJPcGVyYXRpb24oYm9vbCBoYW5kbGVkKTsKICAgICB2b2lkIGRpZEhhbmRsZVN0YXJ0
RGF0YUludGVyYWN0aW9uUmVxdWVzdChib29sIHN0YXJ0ZWQpOwpAQCAtMTk4NCw2ICsxOTg4LDgg
QEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzRGVmZXJyZWRTdGFydEFzc2lzdGluZ05vZGUgeyBm
YWxzZSB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cz4gbV9k
ZWZlcnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzOwogICAgIGJvb2wgbV9mb3JjZUFsd2F5c1Vz
ZXJTY2FsYWJsZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2FjY2VwdHNBdXRvZmlsbGVkTG9naW5D
cmVkZW50aWFscyB7IGZhbHNlIH07CisgICAgV2ViQ29yZTo6VVJMIG1fcmVwcmVzZW50aW5nUGFn
ZVVybDsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KaW5kZXggNTMwNjgyYzMyOTk4ZjM4YmM2
OWI5ZTFhMjQ2NGUwMWM0OWM4NDE5YS4uZTUzNzc2NDkzMThiOGEzMGYyN2ZmODMwNzdhZWI3OThj
MjFmMGM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcu
bW0KQEAgLTI1OCw2ICsyNTgsMTYgQEAgLSAoV2ViUGFnZVByb3h5KilwYWdlCiAgICAgcmV0dXJu
IF9wYWdlLmdldCgpOwogfQogCistIChCT09MKWFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50
aWFscworeworICAgIHJldHVybiBfcGFnZS0+YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRp
YWxzKCk7Cit9CisKKy0gKE5TVVJMICopcmVwcmVzZW50aW5nUGFnZVVybAoreworICAgIHJldHVy
biBfcGFnZS0+cmVwcmVzZW50aW5nUGFnZVVybCgpOworfQorCiAtICh2b2lkKXdpbGxNb3ZlVG9X
aW5kb3c6KFVJV2luZG93ICopbmV3V2luZG93CiB7CiAgICAgTlNOb3RpZmljYXRpb25DZW50ZXIg
KmRlZmF1bHRDZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbQppbmRleCAyMzlhZjcxNjZmNzIwMDg5ODNjOGRhMTA3MTU2ZmQ4OWI5OGJlYTA3
Li5mZjAzNDgzZGJkOWEzYTZhNmFjYTMwZWZiYzMwMTVlOWYwNGVhNWQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0KQEAgLTI5NTUsNiArMjk1NSwxMSBAQCAtICh2b2lkKWVuZFNlbGVjdGlvbkNoYW5nZQogICAg
IAogLSAodm9pZClpbnNlcnRUZXh0U3VnZ2VzdGlvbjooVUlUZXh0U3VnZ2VzdGlvbiAqKXRleHRT
dWdnZXN0aW9uCiB7CisgICAgLy8gRklYTUU6IFJlcGxhY2UgTlNDbGFzc0Zyb21TdHJpbmcgd2l0
aCBhY3R1YWwgY2xhc3MgYXMgc29vbiBhcyBVSUtpdCBzdWJtaXR0ZWQgdGhlIG5ldyBjbGFzcyBp
bnRvIHRoZSBpT1MgU0RLCisgICAgaWYgKFt0ZXh0U3VnZ2VzdGlvbiBpc0tpbmRPZkNsYXNzOk5T
Q2xhc3NGcm9tU3RyaW5nKEAiVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uIild
KSB7CisgICAgICAgIF9wYWdlLT5hdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoWyhVSUtleWJvYXJk
TG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKil0ZXh0U3VnZ2VzdGlvbiB1c2VybmFtZV0sIFso
VUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uICopdGV4dFN1Z2dlc3Rpb24gcGFz
c3dvcmRdKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBpZCA8X1dLSW5wdXREZWxlZ2F0
ZT4gaW5wdXREZWxlZ2F0ZSA9IFtfd2ViVmlldyBfaW5wdXREZWxlZ2F0ZV07CiAgICAgaWYgKFtp
bnB1dERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6aW5zZXJ0
VGV4dFN1Z2dlc3Rpb246aW5JbnB1dFNlc3Npb246KV0pCiAgICAgICAgIFtpbnB1dERlbGVnYXRl
IF93ZWJWaWV3Ol93ZWJWaWV3IGluc2VydFRleHRTdWdnZXN0aW9uOnRleHRTdWdnZXN0aW9uIGlu
SW5wdXRTZXNzaW9uOl9mb3JtSW5wdXRTZXNzaW9uLmdldCgpXTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IDBlYTc4MTVhOGRhOTg1YTg2
YmUyMDg0OTE2YzlhNjJkNmZkMWNkOTkuLjgwYmU4NTcwMzU2ZjEwYTQyMTZlY2NkNTBmMjg4ZTYx
ZDJlYmNjYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdl
UHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94
eUlPUy5tbQpAQCAtODkxLDYgKzg5MSw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRHZXRUYXBI
aWdobGlnaHRHZW9tZXRyaWVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yCiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05vZGUoY29uc3QgQXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24mIGluZm9ybWF0aW9uLCBib29sIHVzZXJJc0ludGVyYWN0aW5nLCBib29sIGJsdXJQ
cmV2aW91c05vZGUsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKIHsKKyAgICBtX2FjY2VwdHNB
dXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyA9IGluZm9ybWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVk
TG9naW5DcmVkZW50aWFsczsKKyAgICBtX3JlcHJlc2VudGluZ1BhZ2VVcmwgPSBpbmZvcm1hdGlv
bi5yZXByZXNlbnRpbmdQYWdlVXJsOwogICAgIEFQSTo6T2JqZWN0KiB1c2VyRGF0YU9iamVjdCA9
IHByb2Nlc3MoKS50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5n
ZXQoKTsKICAgICBpZiAobV9lZGl0b3JTdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkgewog
ICAgICAgICBtX2RlZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5p
cXVlPE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzPihOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cyB7IGlu
Zm9ybWF0aW9uLCB1c2VySXNJbnRlcmFjdGluZywgYmx1clByZXZpb3VzTm9kZSwgdXNlckRhdGFP
YmplY3QgfSk7CkBAIC05MTAsNiArOTEyLDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdG9wQXNz
aXN0aW5nTm9kZSgpCiAgICAgbV9wYWdlQ2xpZW50LnN0b3BBc3Npc3RpbmdOb2RlKCk7CiB9CiAK
K2Jvb2wgV2ViUGFnZVByb3h5OjphY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKQor
eworICAgIHJldHVybiBtX2FjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKK30KKwor
V2ViQ29yZTo6VVJMIFdlYlBhZ2VQcm94eTo6cmVwcmVzZW50aW5nUGFnZVVybCgpCit7CisgICAg
cmV0dXJuIG1fcmVwcmVzZW50aW5nUGFnZVVybDsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmF1
dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBjb25zdCBTdHJp
bmcmIHBhc3N3b3JkKQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
QXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKHVzZXJuYW1lLCBwYXNzd29yZCksIG1fcGFnZUlEKTsK
K30KKwogdm9pZCBXZWJQYWdlUHJveHk6OnNob3dJbnNwZWN0b3JIaWdobGlnaHQoY29uc3QgV2Vi
Q29yZTo6SGlnaGxpZ2h0JiBoaWdobGlnaHQpCiB7CiAgICAgbV9wYWdlQ2xpZW50LnNob3dJbnNw
ZWN0b3JIaWdobGlnaHQoaGlnaGxpZ2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAppbmRleCBmOGQyNjMxNTVmMTBjOWZjMWVjZThlMjZiZTFjMDA1MDQ3NmUy
NGZiLi5iZTZjNjJmZWM4NzVlYmZhMjM5YzE4MmRkYjg2NTBhY2M4NzQ2NTU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01NzQsNiArNTc0LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc3RvcEludGVyYWN0aW9uKCk7CiAgICAgdm9pZCBwZXJmb3JtQWN0
aW9uT25FbGVtZW50KHVpbnQzMl90IGFjdGlvbik7CiAgICAgdm9pZCBmb2N1c05leHRBc3Npc3Rl
ZE5vZGUoYm9vbCBpc0ZvcndhcmQsIENhbGxiYWNrSUQpOworICAgIHZvaWQgYXV0b2ZpbGxMb2dp
bkNyZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0
QXNzaXN0ZWROb2RlVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5v
ZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVTZWxlY3Rl
ZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW4KaW5kZXggOWM3MTA2NjE5MmRjYWYwYWZkMzg0NWMyMWM4MzdmZWVmMzAyYzE3ZC4uNGYxMTBm
ZDA4NDU3NmVmNTE2MjA3NDBmNmEyYjIwMjFkYmY0NWM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC04NCw2ICs4
NCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFBlcmZvcm1B
Y3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9uKQogICAgIEZvY3VzTmV4dEFzc2lzdGVkTm9k
ZShib29sIGlzRm9yd2FyZCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgU2V0
QXNzaXN0ZWROb2RlVmFsdWUoU3RyaW5nIHZhbHVlKQorICAgIEF1dG9maWxsTG9naW5DcmVkZW50
aWFscyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkKICAgICBTZXRBc3Npc3RlZE5v
ZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAgICBTZXRBc3Npc3RlZE5vZGVTZWxlY3Rl
ZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCiAgICAg
QXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggNjVkYzIwMzY5ZTM0ZjAyMjg4
YzBmYzcxNjc4ZTI2YmQzOTk3YzQzYi4uMmRiYTdiYmQ2YTY5MzUyNWRiMWUyY2IwOWExNmM4YzNh
MjhhMGRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0KQEAgLTI2NDYsMjkgKzI2NDYsOSBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZv
cm1BY3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9uKQogICAgIH0KIH0KIAotc3RhdGljIGlu
bGluZSBFbGVtZW50KiBuZXh0QXNzaXN0YWJsZUVsZW1lbnQoTm9kZSogc3RhcnROb2RlLCBQYWdl
JiBwYWdlLCBib29sIGlzRm9yd2FyZCkKLXsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+KHN0YXJ0Tm9k
ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRWxlbWVudCogbmV4dEVsZW1lbnQg
PSBkb3duY2FzdDxFbGVtZW50PihzdGFydE5vZGUpOwotICAgIGRvIHsKLSAgICAgICAgbmV4dEVs
ZW1lbnQgPSBpc0ZvcndhcmQKLSAgICAgICAgICAgID8gcGFnZS5mb2N1c0NvbnRyb2xsZXIoKS5u
ZXh0Rm9jdXNhYmxlRWxlbWVudCgqbmV4dEVsZW1lbnQpCi0gICAgICAgICAgICA6IHBhZ2UuZm9j
dXNDb250cm9sbGVyKCkucHJldmlvdXNGb2N1c2FibGVFbGVtZW50KCpuZXh0RWxlbWVudCk7Ci0g
ICAgfSB3aGlsZSAobmV4dEVsZW1lbnQgJiYgIWlzQXNzaXN0YWJsZUVsZW1lbnQoKm5leHRFbGVt
ZW50KSk7Ci0KLSAgICByZXR1cm4gbmV4dEVsZW1lbnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBoYXNBc3Npc3RhYmxlRWxlbWVudChOb2RlKiBzdGFydE5vZGUsIFBhZ2UmIHBhZ2UsIGJvb2wg
aXNGb3J3YXJkKQotewotICAgIHJldHVybiBuZXh0QXNzaXN0YWJsZUVsZW1lbnQoc3RhcnROb2Rl
LCBwYWdlLCBpc0ZvcndhcmQpOwotfQotCiB2b2lkIFdlYlBhZ2U6OmZvY3VzTmV4dEFzc2lzdGVk
Tm9kZShib29sIGlzRm9yd2FyZCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewotICAgIEVsZW1l
bnQqIG5leHRFbGVtZW50ID0gbmV4dEFzc2lzdGFibGVFbGVtZW50KG1fYXNzaXN0ZWROb2RlLmdl
dCgpLCAqbV9wYWdlLCBpc0ZvcndhcmQpOworICAgIEVsZW1lbnQqIG5leHRFbGVtZW50ID0gbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5uZXh0QXNzaXN0YWJsZUVsZW1lbnQobV9hc3Npc3RlZE5v
ZGUuZ2V0KCksIGlzRm9yd2FyZCk7CiAgICAgbV91c2VySXNJbnRlcmFjdGluZyA9IHRydWU7CiAg
ICAgaWYgKG5leHRFbGVtZW50KQogICAgICAgICBuZXh0RWxlbWVudC0+Zm9jdXMoKTsKQEAgLTI3
MTYsOCArMjY5Niw4IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24o
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAgIGluZm9ybWF0aW9uLm1h
eGltdW1TY2FsZUZhY3Rvcklnbm9yaW5nQWx3YXlzU2NhbGFibGUgPSBtYXhpbXVtUGFnZVNjYWxl
RmFjdG9ySWdub3JpbmdBbHdheXNTY2FsYWJsZSgpOwogICAgIGluZm9ybWF0aW9uLmFsbG93c1Vz
ZXJTY2FsaW5nID0gbV92aWV3cG9ydENvbmZpZ3VyYXRpb24uYWxsb3dzVXNlclNjYWxpbmcoKTsK
ICAgICBpbmZvcm1hdGlvbi5hbGxvd3NVc2VyU2NhbGluZ0lnbm9yaW5nQWx3YXlzU2NhbGFibGUg
PSBtX3ZpZXdwb3J0Q29uZmlndXJhdGlvbi5hbGxvd3NVc2VyU2NhbGluZ0lnbm9yaW5nQWx3YXlz
U2NhbGFibGUoKTsKLSAgICBpbmZvcm1hdGlvbi5oYXNOZXh0Tm9kZSA9IGhhc0Fzc2lzdGFibGVF
bGVtZW50KG1fYXNzaXN0ZWROb2RlLmdldCgpLCAqbV9wYWdlLCB0cnVlKTsKLSAgICBpbmZvcm1h
dGlvbi5oYXNQcmV2aW91c05vZGUgPSBoYXNBc3Npc3RhYmxlRWxlbWVudChtX2Fzc2lzdGVkTm9k
ZS5nZXQoKSwgKm1fcGFnZSwgZmFsc2UpOworICAgIGluZm9ybWF0aW9uLmhhc05leHROb2RlID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5oYXNOZXh0QXNzaXN0YWJsZUVsZW1lbnQobV9hc3Np
c3RlZE5vZGUuZ2V0KCksIHRydWUpOworICAgIGluZm9ybWF0aW9uLmhhc1ByZXZpb3VzTm9kZSA9
IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuaGFzTmV4dEFzc2lzdGFibGVFbGVtZW50KG1fYXNz
aXN0ZWROb2RlLmdldCgpLCBmYWxzZSk7CiAKICAgICBpZiAoaXM8SFRNTFNlbGVjdEVsZW1lbnQ+
KCptX2Fzc2lzdGVkTm9kZSkpIHsKICAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQmIGVsZW1lbnQg
PSBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKQEAgLTI3NTIs
NiArMjczMiw4IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAgIH0gZWxzZSBpZiAoaXM8SFRN
TElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKSkgewogICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2Rl
KTsKICAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVudC5mb3JtKCk7CisgICAg
ICAgIGluZm9ybWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyA9IGVsZW1l
bnQuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCk7CisgICAgICAgIGluZm9ybWF0
aW9uLnJlcHJlc2VudGluZ1BhZ2VVcmwgPSAqbmV3IFdlYkNvcmU6OlVSTCgpOyAvLyBUT0RPIGdl
dCByZWFsIFVSTAogICAgICAgICBpZiAoZm9ybSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLmZv
cm1BY3Rpb24gPSBmb3JtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjphY3Rp
b25BdHRyKTsKICAgICAgICAgaW5mb3JtYXRpb24uYXV0b2NhcGl0YWxpemVUeXBlID0gZWxlbWVu
dC5hdXRvY2FwaXRhbGl6ZVR5cGUoKTsKQEAgLTI4MTcsNiArMjc5OSwxMiBAQCB2b2lkIFdlYlBh
Z2U6OnNldFZpZXdwb3J0Q29uZmlndXJhdGlvbk1pbmltdW1MYXlvdXRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKICAgICAgICAgdmlld3BvcnRDb25maWd1cmF0aW9uQ2hhbmdlZCgpOwogfQog
Cit2b2lkIFdlYlBhZ2U6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVz
ZXJuYW1lLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIGlmIChpczxIVE1MSW5wdXRF
bGVtZW50PihtX2Fzc2lzdGVkTm9kZS5nZXQoKSkpCisgICAgICAgIGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSkuYXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKHVzZXJu
YW1lLCBwYXNzd29yZCk7Cit9CisKIHZvaWQgV2ViUGFnZTo6c2V0TWF4aW11bVVub2JzY3VyZWRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYgbWF4aW11bVVub2JzY3VyZWRTaXplKQogewogICAgIG1fbWF4
aW11bVVub2JzY3VyZWRTaXplID0gbWF4aW11bVVub2JzY3VyZWRTaXplOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggYTA5MjM3
N2IxZGU5MTVmNTY4YTUzMGU5ZTNhZWQzZjBiMzMyOWRmZi4uZWMwZTg4MmJjODkxOTkxMjYwZGEy
YWUzMDJmOGNjZDY3OWU5MDczYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9E
T00vRE9NSFRNTElucHV0RWxlbWVudC5oCkBAIC0yNCw2ICsyNCw5IEBACiAgKi8KIAogI2ltcG9y
dCA8V2ViS2l0TGVnYWN5L0RPTUhUTUxFbGVtZW50Lmg+CisjaWYgVEFSR0VUX09TX0lQSE9ORQor
I2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRUcmFpdHMuaD4KKyNlbmRpZgogCiBAY2xhc3MgRE9N
RmlsZUxpc3Q7CiBAY2xhc3MgRE9NSFRNTEZvcm1FbGVtZW50OwpAQCAtMzEsNyArMzQsMTEgQEAK
IEBjbGFzcyBOU1VSTDsKIAogV0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMoMTBfNCkKKyNpZiBU
QVJHRVRfT1NfSVBIT05FCitAaW50ZXJmYWNlIERPTUhUTUxJbnB1dEVsZW1lbnQgOiBET01IVE1M
RWxlbWVudDxVSVRleHRJbnB1dFRyYWl0cz4KKyNlbGlmCiBAaW50ZXJmYWNlIERPTUhUTUxJbnB1
dEVsZW1lbnQgOiBET01IVE1MRWxlbWVudAorI2VuZGlmCiBAcHJvcGVydHkgKGNvcHkpIE5TU3Ry
aW5nICphY2NlcHQ7CiBAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICphbHQ7CiBAcHJvcGVydHkg
Qk9PTCBhdXRvZm9jdXMgV0VCS0lUX0FWQUlMQUJMRV9NQUMoMTBfNik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCmluZGV4IDliYzgw
M2M1OTU4NTAxYzg2OTA5NDUyMDNmYmEyYTcwOTg1NzZkMWEuLjg3OWY3NmVhYzg5OTg4MTU1MzVm
MWU4YTVmOWY4MTlkMTkyNGQyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCkBAIC0zMyw2ICszMywxNyBAQAogI2ltcG9ydCAi
RE9NSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVByaXZhdGUuaCIKICNpbXBvcnQgIkV4Y2VwdGlv
bkhhbmRsZXJzLmgiCisjaWYgX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3Jl
ZGVudGlhbHNTdWdnZXN0aW9uLmg+KQorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3Jl
ZGVudGlhbHNTdWdnZXN0aW9uLmg+CisjZWxzZQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRf
UHJpdmF0ZS5oPgorQGludGVyZmFjZSBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rp
b24gOiBVSVRleHRTdWdnZXN0aW9uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5T
U3RyaW5nICp1c2VybmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5n
ICpwYXNzd29yZDsKKworQGVuZAorI2VuZGlmCiAjaW1wb3J0IDxXZWJDb3JlL0ZpbGVMaXN0Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxG
b3JtRWxlbWVudC5oPgpAQCAtNjY2LDYgKzY3NywyMyBAQCAtICh2b2lkKXNldFZhbHVlRm9yVXNl
cjooTlNTdHJpbmcgKilpblZhbHVlCiAgICAgSU1QTC0+c2V0VmFsdWVGb3JVc2VyKGluVmFsdWUp
OwogfQogCistIChCT09MKWFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscworeworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gSU1QTC0+
YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCk7Cit9CisKKy0gKE5TVVJMICopcmVw
cmVzZW50aW5nUGFnZVVybAoreworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpzZWxm
Lm93bmVyRG9jdW1lbnQuVVJMXTsKK30KKworLSAodm9pZClpbnNlcnRUZXh0U3VnZ2VzdGlvbjoo
VUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uICopY3JlZGVudGlhbHNTdWdnZXN0
aW9uCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElN
UEwtPmF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjcmVkZW50aWFsc1N1Z2dlc3Rpb24udXNlcm5h
bWUsIGNyZWRlbnRpYWxzU3VnZ2VzdGlvbi5wYXNzd29yZCk7Cit9CisKIEBlbmQKIAogV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogY29yZShET01IVE1MSW5wdXRFbGVtZW50ICp3cmFwcGVyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319277</attachid>
            <date>2017-08-29 13:37:45 -0700</date>
            <delta_ts>2017-09-08 08:44:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170829133744.patch</filename>
            <type>text/plain</type>
            <size>26580</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE4MGI1ZTcxNTRmMzhi
NDk1NWE0MDZkMTk5MTA0NTQwZTNhZTdhNi4uY2NhMzU0ZjM2OTk0MjgzOThkZDdjYmU0MWE1MTZi
ZDU3OWZlNTRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA4LTI5ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6
CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjppc0F1dG9maWxsYWJsZUVsZW1lbnQpOiBEZXRl
cm1pbmVzIGlmIGEgSFRNTElucHV0RWxlbWVudCBpcyBwYXJ0IG9mIGEKKyAgICAgICAgbG9naW4g
c2NlbmFyaW8gYW5kIGlzIHRoZXJlZm9yZSBhdXRvZmlsbGFibGUgZm9yIHVzZXJuYW1lICsgcGFz
c3dvcmQuCisgICAgICAgIChXZWJDb3JlOjpuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCk6IFJldHVy
bnMgdGhlIG5leHQgYXV0b2ZpbGxhYmxlIGVsZW1lbnQgZm9yCisgICAgICAgIGdpdmVuIEhUTUxJ
bnB1dEVsZW1lbnQuIFRoaXMgaXMgdXNlZCB0byBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHVzZXJu
YW1lICYgcGFzc3dvcmQKKyAgICAgICAgZmllbGQgcGFpcnMuCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKTogU2VhcmNoZXMgZm9yIHVzZXJuYW1lICYg
cGFzc3dvcmQgZWxlbWVudHMKKyAgICAgICAgZm9yIGEgZ2l2ZW4gSFRNTElucHV0RWxlbWVudC4K
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNBdXRvZmlsbGFibGUpOiBEZXRlcm1pbmVzIGlm
IGEgZ2l2ZW4gSFRNTElucHV0RWxlbWVudCBjb3VsZCBiZQorICAgICAgICBwYXJ0IG9mIGEgbG9n
aW4gc2NyZWVuIChlLmcuIGJlaW5nIGEgdGV4dGZpZWxkIG9yIGVtYWlsZmllbGQpLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjphdXRvZmlsbEVsZW1lbnRzKTogRmlsbHMgY3JlZGVudGlhbHMg
aW50byB1c2VybmFtZSAmIHBhc3N3b3JkIGZpZWxkcy4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNBdXRv
ZmlsbGFibGVFbGVtZW50KTogRGV0ZXJtaW5lcyBpZiB0aGlzIHNwZWNpZmljIGVsZW1lbnQKKyAg
ICAgICAgY291bGQgYmUgcGFydCBvZiBhIGxvZ2luIHNjcmVlbi4KKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuaDoKKwogMjAxNy0wOC0yOSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0Bh
cHBsZS5jb20+CiAKICAgICAgICAgQ2FjaGVRdWVyeU9wdGlvbnM6Omlzb2xhdGVkQ29weSgpIGNv
cGllcyB0aGUgY2FjaGUgbmFtZSB0d2ljZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4NjNhOTdkNzY4ZGFhOWM0ZTJl
ZDZmZTM2YzE2ODhiYzVlODU5MzJiLi5iMGFlMmM4Y2M2YmIyYzM3MGRjZDIyNTIxYTVlYTg3YTk4
Yjk4MjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTA4LTI5ICBGcmVkZXJpayBS
aWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8gc2V0IHZh
bHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQsIFdlYktp
dH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9VSUtp
dFNQSS5oOgorICAgICAgICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjplbmNvZGUgY29uc3QpOiBF
bmNvZGVzIGFkZGl0aW9uYWwgbm9kZSBpbmZvcm1hdGlvbgorICAgICAgICBmb3IgaW5kaWNhdGlu
ZyBpZiB0aGUgbm9kZSBhY2NlcHRzIGF1dG9maWxsZWQgbG9naW4gY3JlZGVudGlhbHMuCisgICAg
ICAgIChXZWJLaXQ6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjpkZWNvZGUpOiBEZWNvZGVzIGFk
ZGl0aW9uYWwgbm9kZSBpbmZvcm1hdGlvbgorICAgICAgICBmb3IgaW5kaWNhdGluZyBpZiB0aGUg
bm9kZSBhY2NlcHRzIGF1dG9maWxsZWQgbG9naW4gY3JlZGVudGlhbHMuCisgICAgICAgICogU2hh
cmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHNd
KTogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyBpZgorICAgICAgICB0aGUgV0tDb250ZW50VmlldyBp
cyBjYXBhYmxlIG9mIHJlY2VpdmluZyBhdXRvZmlsbGVkIGxvZ2luIGNyZWRlbnRpYWxzLgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlcHJlc2VudGluZ1BhZ2VVcmxdKTogVGhpcyBtZXRob2Qg
cmV0dXJucyB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBVUkwKKyAgICAgICAgdGhhdCBpcyByZXBy
ZXNlbnRlZCBieSB0aGUgV0tDb250ZW50Vmlldy4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpbnNl
cnRUZXh0U3VnZ2VzdGlvbjpdKTogVGhpcyBtZXRob2QgZmlsbHMgYSBsb2dpbiBzdWdnZXN0aW9u
CisgICAgICAgIChVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24pIGludG8gdGhl
IFdLQ29udGVudFZpZXcuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RhcnRBc3Npc3RpbmdOb2RlKTog
VHJhbnNwb3J0cyB0aGUgaW5mb3JtYXRpb24gaWYgdGhlIGN1cnJlbnRseQorICAgICAgICBoaWdo
bGlnaHRlZCBub2RlIGFjY2VwdHMgYXV0b2ZpbGxlZCBsb2dpbiBjcmVkZW50aWFscy4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlh
bHMpOiBEZXRlcm1pbmVzIGlmIHRoZSBXZWJQYWdlCisgICAgICAgIGFjY2VwdHMgYXV0b2ZpbGxl
ZCBsb2dpbiBjcmVkZW50aWFscy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXBy
ZXNlbnRpbmdQYWdlVXJsKTogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudGx5IGRpc3Bs
YXllZCBVUkwKKyAgICAgICAgdGhhdCBpcyByZXByZXNlbnRlZCBzaG93biBpbiB0aGUgV2ViUGFn
ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphdXRvZmlsbExvZ2luQ3JlZGVudGlh
bHMpOiBGaWxscyB0aGUgbG9naW4gY3JlZGVudGlhbHMgaW50byB0aGUKKyAgICAgICAgV2ViUGFn
ZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24pOiBUcmFuc3BvcnRzIHRoZSBpbmZvcm1hdGlvbiBp
ZiB0aGUgY3VycmVudGx5CisgICAgICAgIGhpZ2hsaWdodGVkIG5vZGUgYWNjZXB0cyBhdXRvZmls
bGVkIGxvZ2luIGNyZWRlbnRpYWxzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphdXRvZmls
bExvZ2luQ3JlZGVudGlhbHMpOiBGaWxscyB0aGUgbG9naW4gY3JlZGVudGlhbHMgaW50byB0aGUK
KyAgICAgICAgV2ViUGFnZS4KKwogMjAxNy0wOC0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGRhdGFUcmFuc2Zlckl0
ZW0ud2Via2l0R2V0QXNFbnRyeSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggNGEz
MDkxNzNjOTY5MGVlYzdhNjE0NGZiNTM0YTI0ZjhiOTk4NDJjZi4uMjNmMmIyN2YwNjFkNGVjZGI0
NTFiNjZiOWJmNTc4NTg3OWI1ZGU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDE3LTA4LTI5ICBGcmVkZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUu
Y29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8gc2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZv
cm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQsIFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBET00v
RE9NSFRNTElucHV0RWxlbWVudC5tbToKKyAgICAgICAgKC1bRE9NSFRNTElucHV0RWxlbWVudCBh
Y2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHNdKTogRGV0ZXJtaW5lcyBpZiB0aGUKKyAg
ICAgICAgRE9NSFRNTElucHV0RWxlbWVudCBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgorICAg
ICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IHJlcHJlc2VudGluZ1BhZ2VVcmxdKTogUmV0dXJu
cyB0aGUgVVJMIHRoYXQgaXMgY3VycmVudGx5CisgICAgICAgIGRpc3BsYXllZCBpbiB0aGUgV2Vi
VmlldyB0aGF0IHRoZSBJbnB1dEVsZW1lbnQgaXMgcGFydCBvZi4KKyAgICAgICAgKC1bRE9NSFRN
TElucHV0RWxlbWVudCBpbnNlcnRUZXh0U3VnZ2VzdGlvbjpdKTogSW5zZXJ0cyBhIHRleHQgc3Vn
Z2VzdGlvbiAodXNlcm5hbWUgKworICAgICAgICBwYXNzd29yZCBpbnRvIHRoZSBsb2dpbiBzY3Jl
ZW4gdGhhdCB0aGUgSW5wdXRFbGVtZW50IGlzIHBhcnQgb2YpLgorCiAyMDE3LTA4LTI5ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBVcHN0cmVhbSBXS1Nl
dE1ldGFkYXRhVVJMKCkgZnJvbSBXZWJLaXRTeXN0ZW1JbnRlcmZhY2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCmluZGV4IDI2YzAyN2RlZWVlNWJiN2E3YzA1YjUwNjc2NTNkZWQ0OTUwZDljZGUuLjVk
ZDhlMGE2OTQzNDc2ZWNlYTdlM2JjYTE3ZjQxNTI5NDEzNWYyZTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuaApAQCAtNjUsNiArNjUsNyBAQCBjbGFzcyBFZGl0b3JDbGllbnQ7CiBjbGFzcyBFZGl0
b3JJbnRlcm5hbENvbW1hbmQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxFbGVtZW50OworY2xh
c3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBLZXlib2Fy
ZEV2ZW50OwogY2xhc3MgS2lsbFJpbmc7CkBAIC0xMDEsNiArMTAyLDEzIEBAIHN0cnVjdCBGcmFn
bWVudEFuZFJlc291cmNlcyB7CiAKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorc3RydWN0
IEF1dG9maWxsRWxlbWVudHMgeworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiB1c2VybmFt
ZTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gcGFzc3dvcmQ7Cit9OworI2VuZGlmCisK
IGVudW0gVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uIDogdWludDhfdCB7CiAgICAgLy8gQnkgZGVm
YXVsdCwgbm8gYWRkaXRpb25hbCBvcHRpb25zIGFyZSBlbmFibGVkLgogICAgIFRlbXBvcmFyeVNl
bGVjdGlvbk9wdGlvbkRlZmF1bHQgPSAwLApAQCAtMjY2LDYgKzI3NCwxMiBAQCBwdWJsaWM6CiAg
ICAgQ29tbWFuZCBjb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIEVkaXRvckNvbW1h
bmRTb3VyY2UpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGNvbW1hbmRJc1N1cHBv
cnRlZEZyb21NZW51T3JLZXlCaW5kaW5nKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpOyAvLyBX
b3JrcyB3aXRob3V0IGEgZnJhbWUuCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgaXNBdXRvZmlsbGFibGUoUmVmUHRyPEVsZW1lbnQ+KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjpvcHRpb25hbDxBdXRvZmlsbEVsZW1lbnRzPiBjb21w
dXRlQXV0b2ZpbGxFbGVtZW50cyhSZWZQdHI8RWxlbWVudD4pOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIGF1dG9maWxsRWxlbWVudHMoU3RyaW5nLCBTdHJpbmcsIEF1dG9maWxsRWxl
bWVudHMpOworI2VuZGlmCisKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGluc2VydFRleHQoY29u
c3QgU3RyaW5nJiwgRXZlbnQqIHRyaWdnZXJpbmdFdmVudCwgVGV4dEV2ZW50SW5wdXRUeXBlID0g
VGV4dEV2ZW50SW5wdXRLZXlib2FyZCk7CiAgICAgYm9vbCBpbnNlcnRUZXh0Rm9yQ29uZmlybWVk
Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0KTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8RGljdGF0aW9u
QWx0ZXJuYXRpdmU+JiBkaWN0YXRpb25BbHRlcm5hdGl2ZXMsIEV2ZW50KiB0cmlnZ2VyaW5nRXZl
bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCmluZGV4IGRjNmU3MTU1
OTAwNjAxZmJhOTZmNDljMWUwMGJkYzA0ZjhmMDM5M2EuLmNlZWE0ZmZjMDk1MjQ3OGE1MWVhMTkw
MzZlMjA2MGY2ZTUwZTM5M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KQEAgLTM3LDYgKzM3LDcgQEAKICNpbXBvcnQgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5o
IgogI2ltcG9ydCAiRWRpdGluZy5oIgogI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCisjaW1wb3J0
ICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJG
cmFtZS5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXIuaCIKQEAgLTQ3Nyw2ICs0NzgsOTAgQEAgdm9p
ZCBFZGl0b3I6OnNldERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZlY3Rv
cjxWZWN0b3I8U3RyaW5nPj4mIGQKICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRl
bnRzKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F1dG9maWxsYWJsZUVsZW1lbnQoRWxl
bWVudCogbm9kZSkKK3sKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkpIHsKKyAg
ICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0RWxlbWVudCA9ICZkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50Pigqbm9kZSk7CisgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlz
VGV4dEZpZWxkKCkgfHwgaW5wdXRFbGVtZW50LT5pc0VtYWlsRmllbGQoKTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxFbGVtZW50PiBuZXh0QXV0
b2ZpbGxhYmxlRWxlbWVudChOb2RlKiBzdGFydE5vZGUsIFBhZ2UmIHBhZ2UsIGJvb2wgaXNGb3J3
YXJkKQoreworICAgIGlmICghaXM8RWxlbWVudD4oc3RhcnROb2RlKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBFbGVtZW50KiBuZXh0RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KHN0YXJ0Tm9kZSk7CisgICAgZG8geworICAgICAgICBuZXh0RWxlbWVudCA9IGlzRm9yd2FyZAor
ICAgICAgICA/IHBhZ2UuZm9jdXNDb250cm9sbGVyKCkubmV4dEZvY3VzYWJsZUVsZW1lbnQoKm5l
eHRFbGVtZW50KQorICAgICAgICA6IHBhZ2UuZm9jdXNDb250cm9sbGVyKCkucHJldmlvdXNGb2N1
c2FibGVFbGVtZW50KCpuZXh0RWxlbWVudCk7CisgICAgfSB3aGlsZSAobmV4dEVsZW1lbnQgJiYg
IWlzQXV0b2ZpbGxhYmxlRWxlbWVudChuZXh0RWxlbWVudCkpOworCisgICAgcmV0dXJuIG5leHRF
bGVtZW50OworfQorCitzdGQ6Om9wdGlvbmFsPEF1dG9maWxsRWxlbWVudHM+IEVkaXRvcjo6Y29t
cHV0ZUF1dG9maWxsRWxlbWVudHMoUmVmUHRyPEVsZW1lbnQ+IHN0YXJ0KQoreworICAgIEF1dG9m
aWxsRWxlbWVudHMgYXV0b2ZpbGxFbGVtZW50czsKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVu
dD4oc3RhcnQuZ2V0KCkpKSB7CisgICAgICAgIGF1dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KCpzdGFydCk7CisgICAgICAgIGlmIChpbnB1dEVsZW1lbnQuaXNQ
YXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBwcmV2aW91c0Vs
ZW1lbnQgPSBuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCgmaW5wdXRFbGVtZW50LCAqc3RhcnQtPmRv
Y3VtZW50KCkucGFnZSgpLCBmYWxzZSk7CisgICAgICAgICAgICBpZiAoaXM8SFRNTElucHV0RWxl
bWVudD4ocHJldmlvdXNFbGVtZW50LmdldCgpKSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxI
VE1MSW5wdXRFbGVtZW50PiBwb3RlbnRpYWxVc2VybmFtZUZpZWxkID0gJmRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpwcmV2aW91c0VsZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChwb3Rl
bnRpYWxVc2VybmFtZUZpZWxkLT5pc1RleHRGaWVsZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG9maWxsRWxlbWVudHMucGFzc3dvcmQgPSAmaW5wdXRFbGVtZW50OworICAgICAgICAgICAg
ICAgICAgICBhdXRvZmlsbEVsZW1lbnRzLnVzZXJuYW1lID0gcG90ZW50aWFsVXNlcm5hbWVGaWVs
ZDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1dG9maWxsRWxlbWVudHM7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
UmVmUHRyPEVsZW1lbnQ+IG5leHRFbGVtZW50ID0gbmV4dEF1dG9maWxsYWJsZUVsZW1lbnQoJmlu
cHV0RWxlbWVudCwgKnN0YXJ0LT5kb2N1bWVudCgpLnBhZ2UoKSwgdHJ1ZSk7CisgICAgICAgICAg
ICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obmV4dEVsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAg
ICAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IHBvdGVudGlhbFBhc3N3b3JkRmllbGQg
PSAmZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5leHRFbGVtZW50KTsKKyAgICAgICAgICAg
ICAgICBpZiAocG90ZW50aWFsUGFzc3dvcmRGaWVsZC0+aXNQYXNzd29yZEZpZWxkKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy5wYXNzd29yZCA9IHBvdGVudGlhbFBh
c3N3b3JkRmllbGQ7CisgICAgICAgICAgICAgICAgICAgIGF1dG9maWxsRWxlbWVudHMudXNlcm5h
bWUgPSAmaW5wdXRFbGVtZW50OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0b2ZpbGxF
bGVtZW50czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oc3RhcnQuZ2V0KCkpKSB7CisgICAg
ICAgIGF1dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpzdGFy
dCk7CisgICAgICAgIGlmIChpbnB1dEVsZW1lbnQuaXNQYXNzd29yZEZpZWxkKCkpIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxFbGVtZW50PiBwcmV2aW91c0VsZW1lbnQgPSBuZXh0QXV0b2ZpbGxhYmxl
RWxlbWVudCgmaW5wdXRFbGVtZW50LCAqc3RhcnQtPmRvY3VtZW50KCkucGFnZSgpLCBmYWxzZSk7
CisgICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gbmV4dEVsZW1lbnQgPSBuZXh0QXV0b2ZpbGxh
YmxlRWxlbWVudCgmaW5wdXRFbGVtZW50LCAqc3RhcnQtPmRvY3VtZW50KCkucGFnZSgpLCB0cnVl
KTsKKyAgICAgICAgICAgIGlmICghcHJldmlvdXNFbGVtZW50ICYmICFuZXh0RWxlbWVudCkgewor
ICAgICAgICAgICAgICAgIGF1dG9maWxsRWxlbWVudHMucGFzc3dvcmQgPSAmaW5wdXRFbGVtZW50
OworICAgICAgICAgICAgICAgIHJldHVybiBhdXRvZmlsbEVsZW1lbnRzOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhdXRvZmlsbEVsZW1lbnRzOworfQorCiti
b29sIEVkaXRvcjo6aXNBdXRvZmlsbGFibGUoUmVmUHRyPEVsZW1lbnQ+IHN0YXJ0KQoreworICAg
IHN0ZDo6b3B0aW9uYWw8QXV0b2ZpbGxFbGVtZW50cz4gYXV0b2ZpbGxFbGVtZW50cyA9IEVkaXRv
cjo6Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoc3RhcnQpOworICAgIHJldHVybiAoYXV0b2ZpbGxF
bGVtZW50cy0+dXNlcm5hbWUgJiYgYXV0b2ZpbGxFbGVtZW50cy0+cGFzc3dvcmQpIHx8IGF1dG9m
aWxsRWxlbWVudHMtPnBhc3N3b3JkOworfQorCit2b2lkIEVkaXRvcjo6YXV0b2ZpbGxFbGVtZW50
cyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwgQXV0b2ZpbGxFbGVtZW50cyBhdXRv
ZmlsbEVsZW1lbnRzKQoreworICAgIGlmIChhdXRvZmlsbEVsZW1lbnRzLnVzZXJuYW1lKSB7Cisg
ICAgICAgIGF1dG9maWxsRWxlbWVudHMudXNlcm5hbWUtPnNldFZhbHVlRm9yVXNlcih1c2VybmFt
ZSk7CisgICAgICAgIGF1dG9maWxsRWxlbWVudHMudXNlcm5hbWUtPnNldEF1dG9GaWxsZWQoKTsK
KyAgICB9CisgICAgaWYgKGF1dG9maWxsRWxlbWVudHMucGFzc3dvcmQpIHsKKyAgICAgICAgYXV0
b2ZpbGxFbGVtZW50cy5wYXNzd29yZC0+c2V0VmFsdWVGb3JVc2VyKHBhc3N3b3JkKTsKKyAgICAg
ICAgYXV0b2ZpbGxFbGVtZW50cy5wYXNzd29yZC0+c2V0QXV0b0ZpbGxlZCgpOworICAgIH0KK30K
Kwogdm9pZCBFZGl0b3I6OmNvbmZpcm1NYXJrZWRUZXh0KCkKIHsKICAgICAvLyBGSVhNRTogVGhp
cyBpcyBhIGhhY2t5IHdvcmthcm91bmQgZm9yIHRoZSBrZXlib2FyZCBjYWxsaW5nIHRoaXMgbWV0
aG9kIHRvbyBsYXRlIC0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmlu
ZGV4IDM3Mzc3OWY0NTllODcyMDA2NDUyZDljYWU5MjdiNDZjMzVjMjdlMTguLmRhNDRlNTBkYWUz
ZTM5ZDI0MTU2NzhmODAwYzgxNWJhZjcxOWM1N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcApAQCAtODkzLDYgKzg5MywxMSBAQCBib29sIEhUTUxJbnB1dEVsZW1l
bnQ6OmlzVGV4dFR5cGUoKSBjb25zdAogICAgIHJldHVybiBtX2lucHV0VHlwZS0+aXNUZXh0VHlw
ZSgpOwogfQogCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzQXV0b2ZpbGxhYmxlRWxlbWVudCgp
Cit7CisgICAgcmV0dXJuIGlzVGV4dEZpZWxkKCkgfHwgaXNFbWFpbEZpZWxkKCk7Cit9CisKIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6c2V0Q2hlY2tlZChib29sIG5vd0NoZWNrZWQsIFRleHRGaWVs
ZEV2ZW50QmVoYXZpb3IgZXZlbnRCZWhhdmlvcikKIHsKICAgICBpZiAoY2hlY2tlZCgpID09IG5v
d0NoZWNrZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IGQyNjMy
N2ZmODFkYTYzNDk2ZjAzOWQ3M2RjMGE3MDFhNzY3YjJiZDkuLjU3MWZhNjVjODU3ZGRiNmMzYzRk
ZjFjZDEwY2I5YzBiNGEwY2IwZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5oCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICBib29sIHZhbHVlTWlzc2luZygpIGNv
bnN0IGZpbmFsOwogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IGZpbmFsOwogICAgIFdFQkNPUkVf
RVhQT1JUIFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0IGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNBdXRvZmlsbGFibGVFbGVtZW50KCk7CiAKICAgICAvLyBSZXR1cm5z
IHRoZSBtaW5pbXVtIHZhbHVlIGZvciB0eXBlPWRhdGUsIG51bWJlciwgb3IgcmFuZ2UuICBEb24n
dCBjYWxsIHRoaXMgZm9yIG90aGVyIHR5cGVzLgogICAgIGRvdWJsZSBtaW5pbXVtKCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCmluZGV4IDg2ZTkyOWY1
NTUyMzBmOTA4MGNkNGI1YTZjMWQ5YmU2NzZkNTQ0ODguLmFlYWI1YTQzNjc3YWFhM2ZjN2RjZTY4
NjA2OGI2ZDVhZGRiOWNlYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3Bp
L2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtp
dFNQSS5oCkBAIC00Myw2ICs0MywxNyBAQAogI2ltcG9ydCA8VUlLaXQvVUlJbnRlcmZhY2VfUHJp
dmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZEltcGwuaD4KICNpbXBvcnQgPFVJS2l0
L1VJS2V5Ym9hcmRJbnRsLmg+CisjaWYgX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExv
Z2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+KQorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZExv
Z2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+CisjZWxzZQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0
SW5wdXRfUHJpdmF0ZS5oPgorQGludGVyZmFjZSBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1
Z2dlc3Rpb24gOiBVSVRleHRTdWdnZXN0aW9uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIE5TU3RyaW5nICp1c2VybmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5T
U3RyaW5nICpwYXNzd29yZDsKKworQGVuZAorI2VuZGlmCiAjaW1wb3J0IDxVSUtpdC9VSUtleWJv
YXJkX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6
ZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlQZXJpcGhlcmFsSG9zdC5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwCmluZGV4IGFj
OTZmMDBiN2E0NTFhODNlYmFmMjczZDMxNTBjNDgzMmVhODMzMjQuLmExMjZkMGEwNTUwMTAwYTli
YTdmOTZkZWQ0YTFjOGE0ODgyOTU2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9B
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAKQEAgLTg1LDYgKzg1LDggQEAgdm9pZCBBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbjo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAg
ICBlbmNvZGVyIDw8IHZhbHVlOwogICAgIGVuY29kZXIgPDwgdmFsdWVBc051bWJlcjsKICAgICBl
bmNvZGVyIDw8IHRpdGxlOworICAgIGVuY29kZXIgPDwgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNy
ZWRlbnRpYWxzOworICAgIGVuY29kZXIgPDwgcmVwcmVzZW50aW5nUGFnZVVybDsKICAgICBlbmNv
ZGVyLmVuY29kZUVudW0oYXV0b2ZpbGxGaWVsZE5hbWUpOwogfQogCkBAIC0xNTksNiArMTYxLDEy
IEBAIGJvb2wgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmRlY29kZShJUEM6OkRlY29kZXImIGRl
Y29kZXIsIEFzc2lzdGVkTm9kZUluZm9ybWF0CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQudGl0bGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZXByZXNlbnRp
bmdQYWdlVXJsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUVudW0ocmVzdWx0LmF1dG9maWxsRmllbGROYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbi5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaApp
bmRleCBjNjcxOTM3NTllZDM5NDRlY2JkODJhMzhiZmM5NjBiNzdhNjE0YWU0Li44YTEzNDg5NGVh
MDU1YzNlM2YwMGNhNTJkODc5MDI5NTNkYTczYTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL0F1dG9jYXBpdGFsaXplVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dG9m
aWxsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9V
UkwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktp
dCB7CkBAIC0xMDksNiArMTEwLDggQEAgc3RydWN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uIHsK
ICAgICBTdHJpbmcgdmFsdWU7CiAgICAgZG91YmxlIHZhbHVlQXNOdW1iZXIgeyAwIH07CiAgICAg
U3RyaW5nIHRpdGxlOworICAgIGJvb2wgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxz
OworICAgIFdlYkNvcmU6OlVSTCByZXByZXNlbnRpbmdQYWdlVXJsOwogICAgIFdlYkNvcmU6OkF1
dG9maWxsRmllbGROYW1lIGF1dG9maWxsRmllbGROYW1lIHsgV2ViQ29yZTo6QXV0b2ZpbGxGaWVs
ZE5hbWU6Ok5vbmUgfTsKIAogICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA4NTQxZmM4NzllMjU4OTI2
ZTMxNDQzOWQ2YWNiMmI4YjFlZDJmODMyLi44ZDEzYzg5MjUwYzI4ODA4MGJjZTZjZjU2YWFhYTk5
MzhhMjEyODQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNzks
NiArNzksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2VhcmNoUG9wdXBNZW51Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRHcmFudWxh
cml0eS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CkBAIC01NTgsNiArNTU5LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
SXNTY3JvbGxpbmdPclpvb21pbmcoYm9vbCk7CiAgICAgdm9pZCByZXF1ZXN0UmVjdHNGb3JHcmFu
dWxhcml0eVdpdGhTZWxlY3Rpb25PZmZzZXQoV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCB1aW50
MzJfdCBvZmZzZXQsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2Vs
ZWN0aW9uUmVjdD4mLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0
UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJp
bmcmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJl
Y3Q+JiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOworICAgIGJvb2wgYWNjZXB0c0F1dG9maWxs
ZWRMb2dpbkNyZWRlbnRpYWxzKCk7CisgICAgV2ViQ29yZTo6VVJMIHJlcHJlc2VudGluZ1BhZ2VV
cmwoKTsKKyAgICB2b2lkIGF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVz
ZXJuYW1lLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKTsKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFD
VElPTikKICAgICB2b2lkIGRpZFBlcmZvcm1EYXRhSW50ZXJhY3Rpb25Db250cm9sbGVyT3BlcmF0
aW9uKGJvb2wgaGFuZGxlZCk7CiAgICAgdm9pZCBkaWRIYW5kbGVTdGFydERhdGFJbnRlcmFjdGlv
blJlcXVlc3QoYm9vbCBzdGFydGVkKTsKQEAgLTE5ODQsNiArMTk4OCw4IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2hhc0RlZmVycmVkU3RhcnRBc3Npc3RpbmdOb2RlIHsgZmFsc2UgfTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Tm9kZUFzc2lzdGFuY2VBcmd1bWVudHM+IG1fZGVmZXJyZWROb2RlQXNz
aXN0YW5jZUFyZ3VtZW50czsKICAgICBib29sIG1fZm9yY2VBbHdheXNVc2VyU2NhbGFibGUgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgeyBm
YWxzZSB9OworICAgIFdlYkNvcmU6OlVSTCBtX3JlcHJlc2VudGluZ1BhZ2VVcmw7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3Lm1tCmluZGV4IGQ2MWNlZGZjMTRlMjZlYzQ4M2UwZTkwYzE4NjI3ZjIz
NDFlOTUwYzMuLjRmNjY5ZDhjNzdiYTg5MzFmNWFmOTcyNjRiYjhjZjdmMDJkZDQwYTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC0yNTgsNiAr
MjU4LDE2IEBAIC0gKFdlYlBhZ2VQcm94eSopcGFnZQogICAgIHJldHVybiBfcGFnZS5nZXQoKTsK
IH0KIAorLSAoQk9PTClhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMKK3sKKyAgICBy
ZXR1cm4gX3BhZ2UtPmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscygpOworfQorCist
IChOU1VSTCAqKXJlcHJlc2VudGluZ1BhZ2VVcmwKK3sKKyAgICByZXR1cm4gX3BhZ2UtPnJlcHJl
c2VudGluZ1BhZ2VVcmwoKTsKK30KKwogLSAodm9pZCl3aWxsTW92ZVRvV2luZG93OihVSVdpbmRv
dyAqKW5ld1dpbmRvdwogewogICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpkZWZhdWx0Q2VudGVy
ID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5k
ZXggZDMyZjhkNDFlYjY0NTdiMGQ1ZDU3N2NjODIzOTE1NjAxYzE0MWMyMi4uMmYyMTkxMTgwMzE0
MGEyY2I3YzU0ZmM4YThhOWFkNzUxNjJkZTQ4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0yOTc4LDYg
KzI5NzgsMTEgQEAgLSAodm9pZCllbmRTZWxlY3Rpb25DaGFuZ2UKICAgICAKIC0gKHZvaWQpaW5z
ZXJ0VGV4dFN1Z2dlc3Rpb246KFVJVGV4dFN1Z2dlc3Rpb24gKil0ZXh0U3VnZ2VzdGlvbgogewor
ICAgIC8vIEZJWE1FOiBSZXBsYWNlIE5TQ2xhc3NGcm9tU3RyaW5nIHdpdGggYWN0dWFsIGNsYXNz
IGFzIHNvb24gYXMgVUlLaXQgc3VibWl0dGVkIHRoZSBuZXcgY2xhc3MgaW50byB0aGUgaU9TIFNE
SworICAgIGlmIChbdGV4dFN1Z2dlc3Rpb24gaXNLaW5kT2ZDbGFzczpOU0NsYXNzRnJvbVN0cmlu
ZyhAIlVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiIpXSkgeworICAgICAgICBf
cGFnZS0+YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKFsoVUlLZXlib2FyZExvZ2luQ3JlZGVudGlh
bHNTdWdnZXN0aW9uICopdGV4dFN1Z2dlc3Rpb24gdXNlcm5hbWVdLCBbKFVJS2V5Ym9hcmRMb2dp
bkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqKXRleHRTdWdnZXN0aW9uIHBhc3N3b3JkXSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAgICAgaWQgPF9XS0lucHV0RGVsZWdhdGU+IGlucHV0RGVsZWdh
dGUgPSBbX3dlYlZpZXcgX2lucHV0RGVsZWdhdGVdOwogICAgIGlmIChbaW5wdXREZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3Omluc2VydFRleHRTdWdnZXN0aW9u
OmluSW5wdXRTZXNzaW9uOildKQogICAgICAgICBbaW5wdXREZWxlZ2F0ZSBfd2ViVmlldzpfd2Vi
VmlldyBpbnNlcnRUZXh0U3VnZ2VzdGlvbjp0ZXh0U3VnZ2VzdGlvbiBpbklucHV0U2Vzc2lvbjpf
Zm9ybUlucHV0U2Vzc2lvbi5nZXQoKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCAyMTFhYWM3ZGQ4MDcxMzcwMjc1OTdhMWY2YTcwNDQ1
N2ZmNjkzNTVlLi5lMTlkMzFlYjgxMWY4ZjYzNTE1ZDFjNzllNWZhODdhOTQ1MWE1ZjFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTg5
MSw2ICs4OTEsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkR2V0VGFwSGlnaGxpZ2h0R2VvbWV0
cmllcyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcgogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c3RhcnRBc3Npc3RpbmdOb2RlKGNvbnN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZv
cm1hdGlvbiwgYm9vbCB1c2VySXNJbnRlcmFjdGluZywgYm9vbCBibHVyUHJldmlvdXNOb2RlLCBj
b25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCiB7CisgICAgbV9hY2NlcHRzQXV0b2ZpbGxlZExvZ2lu
Q3JlZGVudGlhbHMgPSBpbmZvcm1hdGlvbi5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlh
bHM7CisgICAgbV9yZXByZXNlbnRpbmdQYWdlVXJsID0gaW5mb3JtYXRpb24ucmVwcmVzZW50aW5n
UGFnZVVybDsKICAgICBBUEk6Ok9iamVjdCogdXNlckRhdGFPYmplY3QgPSBwcm9jZXNzKCkudHJh
bnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCk7CiAgICAgaWYg
KG1fZWRpdG9yU3RhdGUuaXNNaXNzaW5nUG9zdExheW91dERhdGEpIHsKICAgICAgICAgbV9kZWZl
cnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzID0gc3RkOjptYWtlX3VuaXF1ZTxOb2RlQXNzaXN0
YW5jZUFyZ3VtZW50cz4oTm9kZUFzc2lzdGFuY2VBcmd1bWVudHMgeyBpbmZvcm1hdGlvbiwgdXNl
cklzSW50ZXJhY3RpbmcsIGJsdXJQcmV2aW91c05vZGUsIHVzZXJEYXRhT2JqZWN0IH0pOwpAQCAt
OTEwLDYgKzkxMiwyMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcEFzc2lzdGluZ05vZGUoKQog
ICAgIG1fcGFnZUNsaWVudC5zdG9wQXNzaXN0aW5nTm9kZSgpOwogfQogCitib29sIFdlYlBhZ2VQ
cm94eTo6YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCkKK3sKKyAgICByZXR1cm4g
bV9hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7Cit9CisKK1dlYkNvcmU6OlVSTCBX
ZWJQYWdlUHJveHk6OnJlcHJlc2VudGluZ1BhZ2VVcmwoKQoreworICAgIHJldHVybiBtX3JlcHJl
c2VudGluZ1BhZ2VVcmw7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjphdXRvZmlsbExvZ2luQ3Jl
ZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkK
K3sKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkF1dG9maWxsTG9naW5D
cmVkZW50aWFscyh1c2VybmFtZSwgcGFzc3dvcmQpLCBtX3BhZ2VJRCk7Cit9CisKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzaG93SW5zcGVjdG9ySGlnaGxpZ2h0KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdo
dCYgaGlnaGxpZ2h0KQogewogICAgIG1fcGFnZUNsaWVudC5zaG93SW5zcGVjdG9ySGlnaGxpZ2h0
KGhpZ2hsaWdodCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
aW5kZXggZGU1NzBmMDg5NWNkMjdmNmM4ZTE2ZmI2ODdkMjNiNjZhODg1YzY0Yi4uOGU4NTQ0NzJj
MDM3ODUzMzQ1MDQzODhmMGQzYzhlODRkMDMyN2FlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNTczLDYgKzU3Myw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHN0b3BJbnRlcmFjdGlvbigpOwogICAgIHZvaWQgcGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1
aW50MzJfdCBhY3Rpb24pOwogICAgIHZvaWQgZm9jdXNOZXh0QXNzaXN0ZWROb2RlKGJvb2wgaXNG
b3J3YXJkLCBDYWxsYmFja0lEKTsKKyAgICB2b2lkIGF1dG9maWxsTG9naW5DcmVkZW50aWFscyhj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVZh
bHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFsdWVBc051bWJl
cihkb3VibGUpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleCh1aW50MzJf
dCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDljNzEw
NjYxOTJkY2FmMGFmZDM4NDVjMjFjODM3ZmVlZjMwMmMxN2QuLjRmMTEwZmQwODQ1NzZlZjUxNjIw
NzQwZjZhMmIyMDIxZGJmNDVjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtODQsNiArODQsNyBAQCBtZXNzYWdl
cyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBQZXJmb3JtQWN0aW9uT25FbGVtZW50
KHVpbnQzMl90IGFjdGlvbikKICAgICBGb2N1c05leHRBc3Npc3RlZE5vZGUoYm9vbCBpc0Zvcndh
cmQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIFNldEFzc2lzdGVkTm9kZVZh
bHVlKFN0cmluZyB2YWx1ZSkKKyAgICBBdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoU3RyaW5nIHVz
ZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpCiAgICAgU2V0QXNzaXN0ZWROb2RlVmFsdWVBc051bWJl
cihkb3VibGUgdmFsdWUpCiAgICAgU2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleCh1aW50MzJf
dCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKQogICAgIEFwcGxpY2F0aW9uV2ls
bFJlc2lnbkFjdGl2ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDI0ODdmOWQ0YWJhYmI4ZTBkMWNkNjVhOGIxOWRkNWUx
Nzk4OThlZTguLjk3ODVhZjdhZjcyNDAyNTAxNWNiNDljNTVhYzNhMDEyZGVkYjBhN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CkBAIC0yNzUyLDYgKzI3NTIsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9y
bWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbikKICAgICAgICAgSFRN
TEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVudC5mb3JtKCk7CiAgICAgICAgIGlmIChmb3JtKQog
ICAgICAgICAgICAgaW5mb3JtYXRpb24uZm9ybUFjdGlvbiA9IGZvcm0tPmdldFVSTEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmFjdGlvbkF0dHIpOworICAgICAgICBpbmZvcm1hdGlvbi5h
Y2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgPSBXZWJDb3JlOjpFZGl0b3I6OmlzQXV0
b2ZpbGxhYmxlKCZlbGVtZW50KTsKICAgICAgICAgaW5mb3JtYXRpb24uYXV0b2NhcGl0YWxpemVU
eXBlID0gZWxlbWVudC5hdXRvY2FwaXRhbGl6ZVR5cGUoKTsKICAgICAgICAgaW5mb3JtYXRpb24u
aXNBdXRvY29ycmVjdCA9IGVsZW1lbnQuc2hvdWxkQXV0b2NvcnJlY3QoKTsKICAgICAgICAgaWYg
KGVsZW1lbnQuaXNQYXNzd29yZEZpZWxkKCkpCkBAIC0yODA5LDYgKzI4MTAsMTUgQEAgdm9pZCBX
ZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihBc3Npc3RlZE5vZGVJbmZvcm1hdGlv
biYgaW5mb3JtYXRpb24pCiAgICAgfQogfQogCit2b2lkIFdlYlBhZ2U6OmF1dG9maWxsTG9naW5D
cmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBjb25zdCBTdHJpbmcmIHBhc3N3b3Jk
KQoreworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihtX2Fzc2lzdGVkTm9kZS5nZXQoKSkp
IHsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGFzc2lzdGVuZEVsZW1lbnQgPSAmZG93bmNhc3Q8
RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxBdXRvZmls
bEVsZW1lbnRzPiBhdXRvZmlsbEVsZW1lbnRzID0gRWRpdG9yOjpjb21wdXRlQXV0b2ZpbGxFbGVt
ZW50cyhhc3Npc3RlbmRFbGVtZW50KTsKKyAgICAgICAgRWRpdG9yOjphdXRvZmlsbEVsZW1lbnRz
KHVzZXJuYW1lLCBwYXNzd29yZCwgKmF1dG9maWxsRWxlbWVudHMpOworICAgIH0KK30KKwogdm9p
ZCBXZWJQYWdlOjpzZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25NaW5pbXVtTGF5b3V0U2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRDb25maWd1cmF0aW9uLnNl
dE1pbmltdW1MYXlvdXRTaXplKHNpemUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggYTA5MjM3N2IxZGU5MTVmNTY4YTUzMGU5
ZTNhZWQzZjBiMzMyOWRmZi4uZWMwZTg4MmJjODkxOTkxMjYwZGEyYWUzMDJmOGNjZDY3OWU5MDcz
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxl
bWVudC5oCkBAIC0yNCw2ICsyNCw5IEBACiAgKi8KIAogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RP
TUhUTUxFbGVtZW50Lmg+CisjaWYgVEFSR0VUX09TX0lQSE9ORQorI2ltcG9ydCA8VUlLaXQvVUlU
ZXh0SW5wdXRUcmFpdHMuaD4KKyNlbmRpZgogCiBAY2xhc3MgRE9NRmlsZUxpc3Q7CiBAY2xhc3Mg
RE9NSFRNTEZvcm1FbGVtZW50OwpAQCAtMzEsNyArMzQsMTEgQEAKIEBjbGFzcyBOU1VSTDsKIAog
V0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMoMTBfNCkKKyNpZiBUQVJHRVRfT1NfSVBIT05FCitA
aW50ZXJmYWNlIERPTUhUTUxJbnB1dEVsZW1lbnQgOiBET01IVE1MRWxlbWVudDxVSVRleHRJbnB1
dFRyYWl0cz4KKyNlbGlmCiBAaW50ZXJmYWNlIERPTUhUTUxJbnB1dEVsZW1lbnQgOiBET01IVE1M
RWxlbWVudAorI2VuZGlmCiBAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICphY2NlcHQ7CiBAcHJv
cGVydHkgKGNvcHkpIE5TU3RyaW5nICphbHQ7CiBAcHJvcGVydHkgQk9PTCBhdXRvZm9jdXMgV0VC
S0lUX0FWQUlMQUJMRV9NQUMoMTBfNik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCmluZGV4IDliYzgwM2M1OTU4NTAxYzg2OTA5NDUy
MDNmYmEyYTcwOTg1NzZkMWEuLmY1NWE5Y2EwYjFlN2U0NGE0ZTc1YmJjZThkMzUxNWFhN2IwZDEz
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRF
bGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRF
bGVtZW50Lm1tCkBAIC0zMyw2ICszMywxOCBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTVByaXZhdGUuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisjaWYg
X19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9u
Lmg+KQorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9u
Lmg+CisjZWxzZQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRfUHJpdmF0ZS5oPgorQGludGVy
ZmFjZSBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gOiBVSVRleHRTdWdnZXN0
aW9uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICp1c2VybmFtZTsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICpwYXNzd29yZDsKKworQGVu
ZAorI2VuZGlmCisjaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9G
aWxlTGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTY2Niw2ICs2NzgsMjcgQEAgLSAodm9pZClzZXRW
YWx1ZUZvclVzZXI6KE5TU3RyaW5nICopaW5WYWx1ZQogICAgIElNUEwtPnNldFZhbHVlRm9yVXNl
cihpblZhbHVlKTsKIH0KIAorLSAoQk9PTClhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlh
bHMKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0
dXJuIFdlYkNvcmU6OkVkaXRvcjo6aXNBdXRvZmlsbGFibGUoSU1QTCk7Cit9CisKKy0gKE5TVVJM
ICopcmVwcmVzZW50aW5nUGFnZVVybAoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6c2VsZi5vd25lckRv
Y3VtZW50LlVSTF07Cit9CisKKy0gKHZvaWQpaW5zZXJ0VGV4dFN1Z2dlc3Rpb246KFVJS2V5Ym9h
cmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqKWNyZWRlbnRpYWxzU3VnZ2VzdGlvbgorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBpZiAoaXM8V2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudD4oSU1QTCkpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxX
ZWJDb3JlOjpBdXRvZmlsbEVsZW1lbnRzPiBhdXRvZmlsbEVsZW1lbnRzID0gV2ViQ29yZTo6RWRp
dG9yOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyhJTVBMKTsKKyAgICAgICAgV2ViQ29yZTo6RWRp
dG9yOjphdXRvZmlsbEVsZW1lbnRzKGNyZWRlbnRpYWxzU3VnZ2VzdGlvbi51c2VybmFtZSwgY3Jl
ZGVudGlhbHNTdWdnZXN0aW9uLnBhc3N3b3JkLCAqYXV0b2ZpbGxFbGVtZW50cyk7CisgICAgfQor
fQorCiBAZW5kCiAKIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGNvcmUoRE9NSFRNTElucHV0
RWxlbWVudCAqd3JhcHBlcikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320266</attachid>
            <date>2017-09-08 08:44:47 -0700</date>
            <delta_ts>2017-09-19 14:37:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170908084446.patch</filename>
            <type>text/plain</type>
            <size>40859</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ4NjI1MDY5Y2VjMmMx
NmQxMjY4OTdhMzIwNjAxNDY5N2EwMDdkZS4uNTBiNmQ3ZGNiNDczNTg4YTdjMjUxYjkzY2Y1ZDNm
NjY4YzRiMGFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA5LTA4ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVu
dHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzQXV0b2ZpbGxhYmxlRWxlbWVudCk6
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBvZiB0eXBlIHRleHQgb3IgZW1haWwuCisg
ICAgICAgIChXZWJDb3JlOjpuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCk6IFJldHVybnMgdGhlIG5l
eHQgZm9jdXNhYmxlIGVsZW1lbnQgdGhhdCBpcyBhdXRvZmlsbGFibGUuCisgICAgICAgIChXZWJD
b3JlOjpwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1lbnQpOiBSZXR1cm5zIHRoZSBwcmV2aW91cyBm
b2N1c2FibGUgZWxlbWVudCB0aGF0IGlzIGF1dG9maWxsYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6
OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKTogQ29tcHV0ZXMgdGhl
IGF1dG9maWxsIGVsZW1lbnRzICh1c2VybmFtZSAmIHBhc3N3b3JkKQorICAgICAgICBmb3IgYSBn
aXZlbiBpbnB1dCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50czo6
YXV0b2ZpbGwpOiBGaWxscyB0aGUgY3JlZGVudGlhbHMgaW50byB0aGUgcGFpciBvZiB1c2VybmFt
ZS9wYXNzd29yZCBlbGVtZW50cy4KKyAgICAgICAgKiBlZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1l
bnRzLmg6IEFkZGVkLgorCiAyMDE3LTA5LTA3ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBw
bGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjE3MTYuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IDg1M2I1ODgyNWM1NDJiMjZhZWQ0ZjFjZDNhZWVlMWE0NTg3NmZiZTMuLjczMzdmZjA0
MGZmMGNjYTVkNjExNzc5MDgxYTUxY2VkMmE0ZGJlMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQg
QEAKKzIwMTctMDktMDcgIEZyZWRlcmlrIFJpZWRlbCAgPHJpZWRlbEBhcHBsZS5jb20+CisKKyAg
ICAgICAgRXhwb3NlIHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZpZWQgZm9ybSBjb250cm9s
cyBhcyB7TGVnYWN5IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDM5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzMxODM1MDQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6CisgICAgICAgICogU2hhcmVkL0Fzc2lz
dGVkTm9kZUluZm9ybWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5m
b3JtYXRpb246OmVuY29kZSBjb25zdCk6CisgICAgICAgIEVuY29kZXMgYWRkaXRpb25hbCBub2Rl
IGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgaWYgdGhlIG5vZGUgaXMgcGFydCBvZiBhIGxvZ2luIHNj
cmVlbi4KKyAgICAgICAgKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmRlY29kZSk6
CisgICAgICAgIERlY29kZXMgdGhlIGFkZGl0aW9uYWwgYXNzaXN0ZWQgbm9kZSBpbmZvcm1hdGlv
bi4KKyAgICAgICAgKiBTaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3Lm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFjY2VwdHNBdXRvZmlsbGVk
TG9naW5DcmVkZW50aWFsc10pOgorICAgICAgICBEZXRlcm1pbmVzIGlmIHRoZSBXS0NvbnRlbnRW
aWV3IHNob3dzIGEgbG9naW4gc2NyZWVuLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlcHJl
c2VudGluZ1BhZ2VVcmxdKToKKyAgICAgICAgUmV0dXJucyB0aGUgVVJMIG9mIHRoZSBjdXJyZW50
bHkgZGlzcGxheWVkIHdlYiBwYWdlLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGluc2VydFRleHRT
dWdnZXN0aW9uOl0pOgorICAgICAgICBJbnNlcnRzIHRoZSBsb2dpbiBjcmVkZW50aWFscyBpbnRv
IHRoZSBXZWIgVmlldy4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05vZGUpOgor
ICAgICAgICBUcmFuc2ZlciB0aGUgYWRkaXRpb25hbCBhc3Npc3RlZG5vZGUgaW5mb3JtYXRpb24g
KGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyBhbmQgcmVwcmVzZW50aW5nUGFnZVVy
bCkuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YWNjZXB0c0F1dG9maWxsZWRMb2dp
bkNyZWRlbnRpYWxzKToKKyAgICAgICAgUmV0dXJucyBpZiB0aGUgV2ViIFZpZXcgc2hvd3MgYSBs
b2dpbiBzY3JlZW4uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVwcmVzZW50aW5n
UGFnZVVybCk6CisgICAgICAgIFJldHVybnMgdGhlIFdlYiBWaWV3J3MgVVJMLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyk6CisgICAgICAg
IEluc2VydCB0aGUgY3JlZGVudGlhbHMgaW50byB0aGUgV2ViIFZpZXcuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uKTogVHJhbnNwb3J0cyB0aGUgaW5mb3JtYXRpb24gaWYgdGhlIGN1cnJlbnRseQor
ICAgICAgICBoaWdobGlnaHRlZCBub2RlIGFjY2VwdHMgYXV0b2ZpbGxlZCBsb2dpbiBjcmVkZW50
aWFscy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxz
KTogRmlsbHMgdGhlIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlCisgICAgICAgIFdlYlBhZ2Uu
CisKIDIwMTctMDktMDYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBBZGQgV0tVSURlbGVnYXRlUHJpdmF0ZSBlcXVpdmFsZW50IG9mIFdLUGFn
ZVVJQ2xpZW50J3MgcGFnZURpZFNjcm9sbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4
IDdlNTFlYmFmNmJmZjhlZmIxZmNjY2Q4MWQyODQwZmY3MmI0NGM1ZTguLjY5NmI5NDc2ZDU1ZmQ0
NGJkNGY1Mjg3ODEwZTc4NzllMGViM2EwMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMCBAQAorMjAxNy0wOS0wNyAgRnJlZGVyaWsgUmllZGVsICA8cmllZGVsQGFw
cGxlLmNvbT4KKworICAgICAgICBFeHBvc2Ugd2F5IHRvIHNldCB2YWx1ZXMgb2YgY2xhc3NpZmll
ZCBmb3JtIGNvbnRyb2xzIGFzIHtMZWdhY3kgV2ViS2l0LCBXZWJLaXR9IFNQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0Mzk0CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8zMzE4MzUwND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIERPTS9ET01IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICog
RE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQubW06CisgICAgICAgICgtW0RPTUhUTUxJbnB1dEVsZW1l
bnQgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzXSk6CisgICAgICAgIERldGVybWlu
ZXMgaWYgdGhpcyBIVE1MSW5wdXRFbGVtZW50IGlzIHBhcnQgb2YgYSBsb2dpbiBzY3JlZW4uCisg
ICAgICAgICgtW0RPTUhUTUxJbnB1dEVsZW1lbnQgcmVwcmVzZW50aW5nUGFnZVVybF0pOgorICAg
ICAgICBSZXR1cm5zIHRoZSB3ZWJwYWdlJ3MgVVJMIHRoYXQgaXMgY3VycmVudGx5IGRpc3BsYXll
ZCBpbiB0aGUgV2ViIFZpZXcuCisgICAgICAgICgtW0RPTUhUTUxJbnB1dEVsZW1lbnQgaW5zZXJ0
VGV4dFN1Z2dlc3Rpb246XSk6CisgICAgICAgIEluc2VydHMgbG9naW4gY3JlZGVudGlhbHMgaW50
byB0aGUgV2ViIFZpZXcuCisKIDIwMTctMDktMDUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHNvbWUgdW51c2VkIGJpdHMgb2YgY29kZSBh
bmQgcmVzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggOGFjMGMwMzg1NzVkM2FmODkxZWJkNWNlZjZmYTEwOTRhNjYyMmRi
Ny4uZmEyZTg1YjNmZmQyOGNlNjUwNzk0N2RhYzRkYWY0YzhjY2RiOTIzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI2NSw2
ICsyMjY1LDggQEAKIAkJNTE2MkM3RjQxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjJD
N0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi87IH07CiAJCTUxNjJD
N0Y1MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjMxMUY3N0VGQjAwNjEyRUZFIC8q
IFNjaGVtZVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTE2NkQzQ0QxRThFRDQ4RjAwQUQ2MkUzIC8qIFN0b3JhZ2VUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY2RDNDQzFFOEVE
NDExMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk1MTY5OUVFMzFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2Zp
bGxFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTY5OUVFMTFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5jcHAgKi87
IH07CisJCTUxNjk5RUU0MUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY5OUVFMjFGNjA4
Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNkJCNzk0MENFOTFFNjgwMDUxMkY3OSAvKiBK
U1RyZWVXYWxrZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2QkI3OTIwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3Rv
bS5jcHAgKi87IH07CiAJCTUxNkM2MjIwMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QzYy
MUQxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5jcHAgKi87IH07CiAJCTUxNkM2MjIx
MTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkM2MjFFMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1l
cGFkRXZlbnQuaCAqLzsgfTsKQEAgLTM4ODksOCArMzg5MSw2IEBACiAJCTkzOTFBOTkxMTYyNzQ2
Q0IwMDI5NzMzMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5MUE5OTAxNjI3NDZDQjAwMjk3MzMwIC8q
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmggKi87IH07CiAJCTkzOTFBOTlDMTYyOUQ3MDAwMDI5
NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkxQTk5QTE2MjlENkZGMDAyOTczMzAgLyog
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwICovOyB9OwogCQk5MzkxQTk5RDE2MjlENzAw
MDAyOTczMzAgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTFBOTlCMTYyOUQ3MDAwMDI5NzMzMCAv
KiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE2RDVBOTlDMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2RDVBOTlBMTYyOUQ2RkYwMDI5NzMzMCAvKiBTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmNwcCAqLzsgfTsKLQkJQTZENUE5OUQxNjI5
RDcwMDAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2RDVBOTlCMTYyOUQ3
MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM5MjE0NjkxOEE2
RDc5MTAwMEVFNjg4IC8qIFRleHRJdGVyYXRvckJlaGF2aW9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkyMTQ2ODE4QTZENzkxMDAwRUU2ODggLyog
VGV4dEl0ZXJhdG9yQmVoYXZpb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5MzkyMjYyRjEwMzIxMDg0MDA2RTdENUQgLyogSlNDU1NSdWxlTGlz
dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzkyMjYyRTEwMzIxMDg0MDA2RTdENUQgLyogSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAgKi87
IH07CiAJCTkzOTJGMTQyMEFEMTg1RjQwMDY5MUJENCAvKiBSZW5kZXJDb3VudGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkyRjE0MTBBRDE4NUY0
MDA2OTFCRDQgLyogUmVuZGVyQ291bnRlci5oICovOyB9OwpAQCAtNDYwNCw2ICs0NjA0LDggQEAK
IAkJQTYxNDhBNzkxMkU0MUUzQjAwNDRBNzg0IC8qIEpTSFRNTEtleWdlbkVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MTQ4QTc3MTJFNDFF
M0IwMDQ0QTc4NCAvKiBKU0hUTUxLZXlnZW5FbGVtZW50LmggKi87IH07CiAJCUE2RDE2OTYyMTM0
NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2RDE2OTYxMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dS
b290LmNwcCAqLzsgfTsKIAkJQTZEMTY5NjQxMzQ2QjRDMTAwMEVCNzcwIC8qIFNoYWRvd1Jvb3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2RDE2OTYz
MTM0NkI0QzEwMDBFQjc3MCAvKiBTaGFkb3dSb290LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTZENUE5OUMxNjI5RDcwMDAwMjk3MzMwIC8qIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTZENUE5OUExNjI5RDZGRjAwMjk3MzMwIC8qIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuY3BwICovOyB9OworCQlBNkQ1QTk5RDE2
MjlENzAwMDAyOTczMzAgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTZENUE5OUIxNjI5
RDcwMDAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzE1MUJEODEy
RjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTUxQkQ3MTJGMTU1OEYwMDVBMEY2NCAvKiBU
ZXh0Q2hlY2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3MTVFNjUyMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTcxNUU2NTAxMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5jcHAgKi87
IH07CiAJCUE3MTVFNjUzMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MTVFNjUx
MTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuaCAqLzsgfTsKQEAgLTEw
MTE3LDYgKzEwMTE5LDggQEAKIAkJNTE2NDVCNTMxQjlGODg5QjAwRjc4OUNFIC8qIElEQlZlcnNp
b25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJWZXJz
aW9uQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NDVCNTQx
QjlGODhFODAwRjc4OUNFIC8qIElEQkN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJREJDdXJzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTY2RDNDQzFFOEVENDExMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTE2OTlFRTExRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQXV0b2ZpbGxFbGVtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxNjk5RUUyMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1l
bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1dG9maWxsRWxlbWVudHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE2QkI3OTIwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RyZWVXYWxr
ZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTZDNjIxRDE5NTBE
NDg3MDAzMzdFNzUgLyogR2FtZXBhZEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdhbWVwYWRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxNkM2MjFFMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMTUxNiw4ICsxMTUyMCw4IEBACiAJCTdDQkE1QkE2MUYwQjRCREUwMDM0
RDc0NSAvKiBKU0RPTUNvbnZlcnRXZWJHTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUNv
bnZlcnRXZWJHTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkJCQ0M0MUY1
NjA1NjcwMDVFRkFBQyAvKiBET01NYXRyaXgyREluaXQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IERPTU1hdHJpeDJESW5pdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
QkJCQ0M2MUY1NjA1NjgwMDVFRkFBQyAvKiBET01NYXRyaXgyREluaXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTWF0cml4MkRJbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTdDQkJCQ0M4MUY1NjE3QzAwMDVFRkFBQyAvKiBKU0RPTU1hdHJpeDJESW5p
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU0RPTU1hdHJpeDJESW5pdC5jcHA7IHBhdGggPSBK
U0RPTU1hdHJpeDJESW5pdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDQkJC
Q0M5MUY1NjE3QzAwMDVFRkFBQyAvKiBKU0RPTU1hdHJpeDJESW5pdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBKU0RPTU1hdHJpeDJESW5pdC5oOyBwYXRoID0gSlNET01NYXRyaXgyREluaXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NCQkJDQzgxRjU2MTdDMDAwNUVGQUFDIC8qIEpTRE9N
TWF0cml4MkRJbml0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NTWF0cml4MkRJbml0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NCQkJDQzkxRjU2MTdDMDAwNUVGQUFD
IC8qIEpTRE9NTWF0cml4MkRJbml0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NTWF0cml4MkRJbml0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQzJEREY4MUVDOTQxNUEwMDI3Qjc3
NCAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vdGlmaWNhdGlv
blBlcm1pc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NDMkRERkExRUM5
NDE1QTAwMjdCNzc0IC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb24uaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5vdGlmaWNh
dGlvblBlcm1pc3Npb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0MyRERG
RTFFQzk1QTQ0MDAyN0I3NzQgLyogSlNOb3RpZmljYXRpb25QZXJtaXNzaW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTm90aWZpY2F0aW9uUGVybWlzc2lvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjIxNiw4ICsxMjIyMCw2IEBACiAJ
CTkzOTFBOTkwMTYyNzQ2Q0IwMDI5NzMzMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzkxQTk5QTE2MjlENkZGMDAyOTczMzAg
LyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5MzkxQTk5QjE2MjlENzAwMDAyOTczMzAgLyogU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTZENUE5OUExNjI5RDZGRjAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUE2RDVBOTlCMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZURlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTM5MjE0NjgxOEE2RDc5MTAwMEVFNjg4IC8qIFRleHRJdGVyYXRvckJlaGF2aW9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRJdGVyYXRvckJlaGF2aW9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOTIyNjJFMTAzMjEwODQwMDZFN0Q1RCAvKiBKU0NT
U1J1bGVMaXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQ1NTUnVsZUxpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
MzkyRjE0MTBBRDE4NUY0MDA2OTFCRDQgLyogUmVuZGVyQ291bnRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTMwNDEsNiArMTMwNDMsOCBAQAogCQlBNjE0OEE3RjEyRTQxRUQxMDA0NEE3
ODQgLyogSFRNTEtleWdlbkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhUTUxL
ZXlnZW5FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTZEMTY5NjEx
MzQ2QjQ5QjAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2hhZG93Um9vdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE2RDE2OTYzMTM0NkI0QzEwMDBFQjc3MCAvKiBTaGFkb3dSb290LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRvd1Jvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTZENUE5OUExNjI5RDZGRjAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUE2RDVBOTlCMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTcxNTFCRDcxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVja2VyQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDaGVja2VyQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTVFNjUwMTM0QkJCRUMwMEQ4RTcxMyAvKiBQ
cm9ncmVzc1NoYWRvd0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHJvZ3Jlc3NTaGFkb3dFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTcxNUU2NTExMzRCQkJFQzAwRDhFNzEzIC8qIFByb2dyZXNzU2hhZG93RWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9ncmVzc1NoYWRvd0VsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2OTIyLDggKzE2OTI2LDYgQEAKIAkJ
CQkwRkM0RTQwQzE4N0Y4MkUxMDA0NTg4MkMgLyogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZUlPUy5tbSAqLywKIAkJCQkwRkM0RTQwOTE4N0Y4MkUxMDA0NTg4MkMgLyogU2Nyb2xsaW5n
VHJlZUlPUy5jcHAgKi8sCiAJCQkJMEZDNEU0MEExODdGODJFMTAwNDU4ODJDIC8qIFNjcm9sbGlu
Z1RyZWVJT1MuaCAqLywKLQkJCQkxQjk0RTQwOTE4N0Y4MkUxMDA0NTg4MkMgLyogU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHAgKi8sCi0JCQkJMUI5NEU0MEExODdGODJFMTAw
NDU4ODJDIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuaCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE4MjYwLDYg
KzE4MjYyLDggQEAKIAkJNDQzMjkyQzEwRUJBNkQ3MzAwRTYyMDE2IC8qIGlvcyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTE2OTlFRTExRjYwOENENTAw
RDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuY3BwICovLAorCQkJCTUxNjk5RUUyMUY2MDhDRDUw
MEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmggKi8sCiAJCQkJRDBCRDRGNUExNDA4ODUwRjAw
NjgzOUI2IC8qIERpY3RhdGlvbkNvbW1hbmRJT1MuY3BwICovLAogCQkJCUQwQkQ0RjVCMTQwODg1
MEYwMDY4MzlCNiAvKiBEaWN0YXRpb25Db21tYW5kSU9TLmggKi8sCiAJCQkJRkVEMTNEMzkwQ0VB
OTM0NjAwRDg5NDY2IC8qIEVkaXRvcklPUy5tbSAqLywKQEAgLTI3MDQ5LDYgKzI3MDUzLDcgQEAK
IAkJCQlBNUE3QUE0MzEzMkYwRUNDMDBEM0EzQzIgLyogQXV0b2NhcGl0YWxpemVUeXBlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0MxODQzRkUxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QzFFOTcyODFBOUY5ODM0MDA3QkYwRkIgLyogQXV0b0ZpbGxC
dXR0b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY5OUVFNDFGNjA4Q0Q1MDBENTdE
MDYgLyogQXV0b2ZpbGxFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzlENDY3MDUxRTYw
QzQ2NTAwODE5NUZCIC8qIEF1dG9wbGF5RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1ODMw
RDRFMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThDRkYwNEUwQTE1NEYwOTAwMEE0MjM0IC8qIEF1dG9UYWJsZUxheW91dC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNzcxNywxMiArMjc3MjIsOSBAQAogCQkJCTg0NzMwRDg1MTI0OEYw
QjMwMEQzQTlDOSAvKiBGRU1vcnBob2xvZ3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NzMwRDg3
MTI0OEYwQjMwMEQzQTlDOSAvKiBGRU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3MzBE
ODkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFU3BlY3VsYXJMaWdodGluZy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTE3QTUzNUIxRjU4OEE0QzAwRENEQzBBIC8qIEZldGNoQm9keUNvbnN1bWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0MTI5Qzk5NzFGNTlCOTYzMDA5RDc0MDMgLyogRmV0Y2hCb2R5U291
cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUQxMjlEQjFGM0QxNDM4MDBEMTVFNDcgLyogRmV0
Y2hIZWFkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwMjMg
LyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3QTUzNUEx
RjU4ODlFRjAwRENEQzBBIC8qIEZldGNoTG9hZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTdB
NTM1ODFGNTg4OUU4MDBEQ0RDMEEgLyogRmV0Y2hMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQxQUQ3NTNBMUNFRjZCRDEwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdDRTE5MTREMUYyQTlBRkIwMDI3MkY3OCAvKiBGZXRjaFJlZmVycmVyUG9s
aWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0UxOTE1QTFGMkE5QjM0MDAyNzJGNzggLyogRmV0
Y2hSZXF1ZXN0Q2FjaGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjk4ODgsNyArMjk4OTAsNiBAQAog
CQkJCTJEOTNBRUUzMTlERjU2NDEwMDJBODZDMyAvKiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYxNzU1RDFGM0VCQzgzMDBDNzQ5NTAgLyogU2Vydmlj
ZVdvcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGMTc1NUYxRjNFQkM4MzAwQzc0OTUwIC8q
IFNlcnZpY2VXb3JrZXJDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxN0E1MzVEMUY1
ODk5RkUwMERDREMwQSAvKiBTZXJ2aWNlV29ya2VyRmV0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxRjE3NTYxMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjE3NTYzMUYzRUJDODMwMEM3NDk1MCAvKiBTZXJ2
aWNlV29ya2VySm9iLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYxNzU2NDFGM0VCQzgzMDBDNzQ5
NTAgLyogU2VydmljZVdvcmtlckpvYkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTIxNCw2
ICszMTIxNSw3IEBACiAJCQkJQTVGNkUxNkIxMzJFRDQ2RTAwOEVEQUUzIC8qIEF1dG9jYXBpdGFs
aXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0M0ZEMUM4QjcyODMwMDJFQjk3MyAvKiBB
dXRvZmlsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzFFOTcyNzFBOUY5ODM0MDA3QkYwRkIg
LyogQXV0b0ZpbGxCdXR0b25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxNjk5RUUz
MUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQ1ODMwRDREMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOENGRjA1MDBBMTU0RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxl
TGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNERUNBODlBMUVERjQ0N0QwMERDQjA4QiAv
KiBBVkFzc2V0VHJhY2tVdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU2ZTdm
MjFmYTUyZWQ3NmYxZTM5MzUyNjE4NmJkZDlhMWZjYjUxNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMuY3BwCkBAIC0wLDAgKzEs
MTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1dG9m
aWxsRWxlbWVudHMuaCIKKworI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNB
dXRvZmlsbGFibGVFbGVtZW50KEVsZW1lbnQqIG5vZGUpCit7CisgICAgaWYgKGlzPEhUTUxJbnB1
dEVsZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1
dEVsZW1lbnQgPSAmZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOworICAgICAgICBy
ZXR1cm4gaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpIHx8IGlucHV0RWxlbWVudC0+aXNFbWFp
bEZpZWxkKCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBS
ZWZQdHI8RWxlbWVudD4gbmV4dEF1dG9maWxsYWJsZUVsZW1lbnQoTm9kZSogc3RhcnROb2RlLCBQ
YWdlJiBwYWdlKQoreworICAgIGlmICghaXM8RWxlbWVudD4oc3RhcnROb2RlKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gbmV4dEVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50PihzdGFydE5vZGUpOworICAgIGRvIHsKKyAgICAgICAgbmV4dEVsZW1lbnQg
PSBwYWdlLmZvY3VzQ29udHJvbGxlcigpLm5leHRGb2N1c2FibGVFbGVtZW50KCpuZXh0RWxlbWVu
dC5nZXQoKSk7CisgICAgfSB3aGlsZSAobmV4dEVsZW1lbnQgJiYgIWlzQXV0b2ZpbGxhYmxlRWxl
bWVudChuZXh0RWxlbWVudC5nZXQoKSkpOworCisgICAgcmV0dXJuIG5leHRFbGVtZW50OworfQor
CitzdGF0aWMgaW5saW5lIFJlZlB0cjxFbGVtZW50PiBwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1l
bnQoTm9kZSogc3RhcnROb2RlLCBQYWdlJiBwYWdlKQoreworICAgIGlmICghaXM8RWxlbWVudD4o
c3RhcnROb2RlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8RWxlbWVu
dD4gcHJldmlvdXNFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oc3RhcnROb2RlKTsKKyAgICBk
byB7CisgICAgICAgIHByZXZpb3VzRWxlbWVudCA9IHBhZ2UuZm9jdXNDb250cm9sbGVyKCkucHJl
dmlvdXNGb2N1c2FibGVFbGVtZW50KCpwcmV2aW91c0VsZW1lbnQuZ2V0KCkpOworICAgIH0gd2hp
bGUgKHByZXZpb3VzRWxlbWVudCAmJiAhaXNBdXRvZmlsbGFibGVFbGVtZW50KHByZXZpb3VzRWxl
bWVudC5nZXQoKSkpOworCisgICAgcmV0dXJuIHByZXZpb3VzRWxlbWVudDsKK30KKworc3RkOjpv
cHRpb25hbDxBdXRvZmlsbEVsZW1lbnRzPiBBdXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2Zp
bGxFbGVtZW50cyhSZWZQdHI8RWxlbWVudD4gc3RhcnQpCit7CisgICAgQXV0b2ZpbGxFbGVtZW50
cyBhdXRvZmlsbEVsZW1lbnRzOworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihzdGFydC5n
ZXQoKSkpIHsKKyAgICAgICAgYXV0byYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKnN0YXJ0KTsKKyAgICAgICAgaWYgKGlucHV0RWxlbWVudC5pc1Bhc3N3b3JkRmll
bGQoKSkgeworICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9IHBy
ZXZpb3VzQXV0b2ZpbGxhYmxlRWxlbWVudCgmaW5wdXRFbGVtZW50LCAqc3RhcnQtPmRvY3VtZW50
KCkucGFnZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihwcmV2aW91
c0VsZW1lbnQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1l
bnQ+IHBvdGVudGlhbFVzZXJuYW1lRmllbGQgPSAmZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
KnByZXZpb3VzRWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKHBvdGVudGlhbFVzZXJuYW1l
RmllbGQtPmlzVGV4dEZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0b2ZpbGxFbGVt
ZW50cy5wYXNzd29yZCA9ICZpbnB1dEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIGF1dG9m
aWxsRWxlbWVudHMudXNlcm5hbWUgPSBwb3RlbnRpYWxVc2VybmFtZUZpZWxkOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYXV0b2ZpbGxFbGVtZW50czsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWZQdHI8RWxlbWVu
dD4gbmV4dEVsZW1lbnQgPSBuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCgmaW5wdXRFbGVtZW50LCAq
c3RhcnQtPmRvY3VtZW50KCkucGFnZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxIVE1MSW5wdXRF
bGVtZW50PihuZXh0RWxlbWVudC5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SFRN
TElucHV0RWxlbWVudD4gcG90ZW50aWFsUGFzc3dvcmRGaWVsZCA9ICZkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqbmV4dEVsZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChwb3RlbnRpYWxQ
YXNzd29yZEZpZWxkLT5pc1Bhc3N3b3JkRmllbGQoKSkgeworICAgICAgICAgICAgICAgICAgICBh
dXRvZmlsbEVsZW1lbnRzLnBhc3N3b3JkID0gcG90ZW50aWFsUGFzc3dvcmRGaWVsZDsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy51c2VybmFtZSA9ICZpbnB1dEVsZW1lbnQ7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdXRvZmlsbEVsZW1lbnRzOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpczxI
VE1MSW5wdXRFbGVtZW50PihzdGFydC5nZXQoKSkpIHsKKyAgICAgICAgYXV0byYgaW5wdXRFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnN0YXJ0KTsKKyAgICAgICAgaWYgKGlu
cHV0RWxlbWVudC5pc1Bhc3N3b3JkRmllbGQoKSkgeworICAgICAgICAgICAgUmVmUHRyPEVsZW1l
bnQ+IHByZXZpb3VzRWxlbWVudCA9IHByZXZpb3VzQXV0b2ZpbGxhYmxlRWxlbWVudCgmaW5wdXRF
bGVtZW50LCAqc3RhcnQtPmRvY3VtZW50KCkucGFnZSgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxF
bGVtZW50PiBuZXh0RWxlbWVudCA9IG5leHRBdXRvZmlsbGFibGVFbGVtZW50KCZpbnB1dEVsZW1l
bnQsICpzdGFydC0+ZG9jdW1lbnQoKS5wYWdlKCkpOworICAgICAgICAgICAgaWYgKCFwcmV2aW91
c0VsZW1lbnQgJiYgIW5leHRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgYXV0b2ZpbGxFbGVt
ZW50cy5wYXNzd29yZCA9ICZpbnB1dEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGF1
dG9maWxsRWxlbWVudHM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwordm9pZCBBdXRvZmlsbEVsZW1lbnRzOjphdXRvZmlsbChT
dHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkKK3sKKyAgICBpZiAodGhpcy0+dXNlcm5h
bWUpIHsKKyAgICAgICAgdGhpcy0+dXNlcm5hbWUtPnNldFZhbHVlRm9yVXNlcih1c2VybmFtZSk7
CisgICAgICAgIHRoaXMtPnVzZXJuYW1lLT5zZXRBdXRvRmlsbGVkKCk7CisgICAgfQorICAgIGlm
ICh0aGlzLT5wYXNzd29yZCkgeworICAgICAgICB0aGlzLT5wYXNzd29yZC0+c2V0VmFsdWVGb3JV
c2VyKHBhc3N3b3JkKTsKKyAgICAgICAgdGhpcy0+cGFzc3dvcmQtPnNldEF1dG9GaWxsZWQoKTsK
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOWQ1ODYwOWFhMDUwMzQ2
ODgwMWU1N2JmM2E3NTY3NWI2MWE1OGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdXRvZmlsbEVsZW1lbnRzIHsKK3B1
YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjpvcHRpb25hbDxBdXRvZmlsbEVs
ZW1lbnRzPiBjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyhSZWZQdHI8RWxlbWVudD4pOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYXV0b2ZpbGwoU3RyaW5nLCBTdHJpbmcpOworICAgIFJlZlB0cjxI
VE1MSW5wdXRFbGVtZW50PiB1c2VybmFtZTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4g
cGFzc3dvcmQ7Cit9OworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCBjOTFiYjkyMzdlYzZlYzZmMGRlY2U3NWQ3NzA4
Njk3ZDg2ODIyYzUzLi4xMmRhZjVkMTg4ODIwY2JiZTgwMjI3YzE4MTM1YWViMGY1ZDkxNzkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaApAQCAtNDMsNiArNDMs
MTcgQEAKICNpbXBvcnQgPFVJS2l0L1VJSW50ZXJmYWNlX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJ
S2l0L1VJS2V5Ym9hcmRJbXBsLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkSW50bC5oPgor
I2lmIF9faGFzX2luY2x1ZGUoPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2Vz
dGlvbi5oPikKKyNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2Vz
dGlvbi5oPgorI2Vsc2UKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZhdGUuaD4KK0Bp
bnRlcmZhY2UgVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uIDogVUlUZXh0U3Vn
Z2VzdGlvbgorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU1N0cmluZyAqdXNlcm5h
bWU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU1N0cmluZyAqcGFzc3dvcmQ7CisK
K0BlbmQKKyNlbmRpZgogI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZF9Qcml2YXRlLmg+CiAjaW1w
b3J0IDxVSUtpdC9VSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyX1ByaXZhdGUuaD4KICNpbXBv
cnQgPFVJS2l0L1VJUGVyaXBoZXJhbEhvc3QuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcAppbmRleCBhYzk2ZjAwYjdhNDUxYTgzZWJhZjI3
M2QzMTUwYzQ4MzJlYTgzMzI0Li5hMTI2ZDBhMDU1MDEwMGE5YmE3Zjk2ZGVkNGExYzhhNDg4Mjk1
NjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24uY3BwCkBAIC04NSw2ICs4NSw4IEBAIHZvaWQgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmVu
Y29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB2YWx1ZTsK
ICAgICBlbmNvZGVyIDw8IHZhbHVlQXNOdW1iZXI7CiAgICAgZW5jb2RlciA8PCB0aXRsZTsKKyAg
ICBlbmNvZGVyIDw8IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKKyAgICBlbmNv
ZGVyIDw8IHJlcHJlc2VudGluZ1BhZ2VVcmw7CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGF1dG9m
aWxsRmllbGROYW1lKTsKIH0KIApAQCAtMTU5LDYgKzE2MSwxMiBAQCBib29sIEFzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBBc3Npc3RlZE5vZGVJ
bmZvcm1hdAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRpdGxlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWNjZXB0c0F1
dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVwcmVzZW50aW5nUGFnZVVybCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5hdXRv
ZmlsbEZpZWxkTmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmgKaW5kZXggYzY3MTkzNzU5ZWQzOTQ0
ZWNiZDgyYTM4YmZjOTYwYjc3YTYxNGFlNC4uOGExMzQ4OTRlYTA1NWMzZTNmMDBjYTUyZDg3OTAy
OTUzZGE3M2EyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvY2FwaXRh
bGl6ZVR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvZmlsbC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTA5LDYgKzExMCw4
IEBAIHN0cnVjdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiB7CiAgICAgU3RyaW5nIHZhbHVlOwog
ICAgIGRvdWJsZSB2YWx1ZUFzTnVtYmVyIHsgMCB9OwogICAgIFN0cmluZyB0aXRsZTsKKyAgICBi
b29sIGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKKyAgICBXZWJDb3JlOjpVUkwg
cmVwcmVzZW50aW5nUGFnZVVybDsKICAgICBXZWJDb3JlOjpBdXRvZmlsbEZpZWxkTmFtZSBhdXRv
ZmlsbEZpZWxkTmFtZSB7IFdlYkNvcmU6OkF1dG9maWxsRmllbGROYW1lOjpOb25lIH07CiAKICAg
ICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKaW5kZXggZGQ4ODdlY2ZmZTc2YTcwNzNhMTA2NjY3ZjY2ZTZmZTUwOWYz
MTIxMi4uNzhiNTM2MmI3NjkwMGE1ZDdlOTJjZjhiNThiNmQ3NjQzNTRkZjNlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVudS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNr
aW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0R3JhbnVsYXJpdHkuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbi5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAt
NTU4LDYgKzU1OSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzU2Nyb2xsaW5nT3Jab29taW5n
KGJvb2wpOwogICAgIHZvaWQgcmVxdWVzdFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9u
T2Zmc2V0KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgdWludDMyX3Qgb2Zmc2V0LCBXVEY6OkZ1
bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgcmVxdWVzdFJlY3RzQXRTZWxlY3Rpb25PZmZz
ZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiwgV1RGOjpGdW5jdGlvbjx2
b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYsIENhbGxiYWNrQmFzZTo6
RXJyb3IpPiYmKTsKKyAgICBib29sIGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscygp
OworICAgIFdlYkNvcmU6OlVSTCByZXByZXNlbnRpbmdQYWdlVXJsKCk7CisgICAgdm9pZCBhdXRv
ZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3RyaW5n
JiBwYXNzd29yZCk7CiAjaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCiAgICAgdm9pZCBkaWRQ
ZXJmb3JtRGF0YUludGVyYWN0aW9uQ29udHJvbGxlck9wZXJhdGlvbihib29sIGhhbmRsZWQpOwog
ICAgIHZvaWQgZGlkSGFuZGxlU3RhcnREYXRhSW50ZXJhY3Rpb25SZXF1ZXN0KGJvb2wgc3RhcnRl
ZCk7CkBAIC0xOTg3LDYgKzE5OTEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNEZWZlcnJl
ZFN0YXJ0QXNzaXN0aW5nTm9kZSB7IGZhbHNlIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPE5vZGVB
c3Npc3RhbmNlQXJndW1lbnRzPiBtX2RlZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVudHM7CiAg
ICAgYm9vbCBtX2ZvcmNlQWx3YXlzVXNlclNjYWxhYmxlIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIHsgZmFsc2UgfTsKKyAgICBXZWJDb3Jl
OjpVUkwgbV9yZXByZXNlbnRpbmdQYWdlVXJsOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUE9JTlRF
Ul9MT0NLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQpp
bmRleCBkNjFjZWRmYzE0ZTI2ZWM0ODNlMGU5MGMxODYyN2YyMzQxZTk1MGMzLi40ZjY2OWQ4Yzc3
YmE4OTMxZjVhZjk3MjY0YmI4Y2Y3ZjAyZGQ0MGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQpAQCAtMjU4LDYgKzI1OCwxNiBAQCAtIChXZWJQYWdl
UHJveHkqKXBhZ2UKICAgICByZXR1cm4gX3BhZ2UuZ2V0KCk7CiB9CiAKKy0gKEJPT0wpYWNjZXB0
c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzCit7CisgICAgcmV0dXJuIF9wYWdlLT5hY2NlcHRz
QXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKTsKK30KKworLSAoTlNVUkwgKilyZXByZXNlbnRp
bmdQYWdlVXJsCit7CisgICAgcmV0dXJuIF9wYWdlLT5yZXByZXNlbnRpbmdQYWdlVXJsKCk7Cit9
CisKIC0gKHZvaWQpd2lsbE1vdmVUb1dpbmRvdzooVUlXaW5kb3cgKiluZXdXaW5kb3cKIHsKICAg
ICBOU05vdGlmaWNhdGlvbkNlbnRlciAqZGVmYXVsdENlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDEwNjNlZTI4ZGZhOTk0Yjkx
MGE0MTNhMDc4M2Q0ODhiODM5MTM3NDguLjUxMmE3NTlhYWM5NzRhZDYzYzY5NmEyNjEyYWM5YWQ4
ZDY1ZTA0MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMjk3OSw2ICsyOTc5LDExIEBAIC0gKHZvaWQp
ZW5kU2VsZWN0aW9uQ2hhbmdlCiAgICAgCiAtICh2b2lkKWluc2VydFRleHRTdWdnZXN0aW9uOihV
SVRleHRTdWdnZXN0aW9uICopdGV4dFN1Z2dlc3Rpb24KIHsKKyAgICAvLyBGSVhNRTogUmVwbGFj
ZSBOU0NsYXNzRnJvbVN0cmluZyB3aXRoIGFjdHVhbCBjbGFzcyBhcyBzb29uIGFzIFVJS2l0IHN1
Ym1pdHRlZCB0aGUgbmV3IGNsYXNzIGludG8gdGhlIGlPUyBTREsuCisgICAgaWYgKFt0ZXh0U3Vn
Z2VzdGlvbiBpc0tpbmRPZkNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiVUlLZXlib2FyZExvZ2lu
Q3JlZGVudGlhbHNTdWdnZXN0aW9uIildKSB7CisgICAgICAgIF9wYWdlLT5hdXRvZmlsbExvZ2lu
Q3JlZGVudGlhbHMoWyhVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKil0ZXh0
U3VnZ2VzdGlvbiB1c2VybmFtZV0sIFsoVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0
aW9uICopdGV4dFN1Z2dlc3Rpb24gcGFzc3dvcmRdKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICBpZCA8X1dLSW5wdXREZWxlZ2F0ZT4gaW5wdXREZWxlZ2F0ZSA9IFtfd2ViVmlldyBfaW5w
dXREZWxlZ2F0ZV07CiAgICAgaWYgKFtpbnB1dERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoX3dlYlZpZXc6aW5zZXJ0VGV4dFN1Z2dlc3Rpb246aW5JbnB1dFNlc3Npb246KV0p
CiAgICAgICAgIFtpbnB1dERlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGluc2VydFRleHRTdWdn
ZXN0aW9uOnRleHRTdWdnZXN0aW9uIGluSW5wdXRTZXNzaW9uOl9mb3JtSW5wdXRTZXNzaW9uLmdl
dCgpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJv
eHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1t
CmluZGV4IDQ3MjhlMGRmZmUxMGM1ZmY3YzcwN2UwNGE4MzE4MDRhZmJiZTJkMDUuLjM0YjJmY2Jl
YzdiY2U4YmYyNDgyYjgyZDVhODFhOGQwZmNmOWY5ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAtODkxLDYgKzg5MSw4IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRHZXRUYXBIaWdobGlnaHRHZW9tZXRyaWVzKHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgV2ViQ29yCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05v
ZGUoY29uc3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uLCBib29sIHVzZXJJ
c0ludGVyYWN0aW5nLCBib29sIGJsdXJQcmV2aW91c05vZGUsIGNvbnN0IFVzZXJEYXRhJiB1c2Vy
RGF0YSkKIHsKKyAgICBtX2FjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyA9IGluZm9y
bWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKKyAgICBtX3JlcHJlc2Vu
dGluZ1BhZ2VVcmwgPSBpbmZvcm1hdGlvbi5yZXByZXNlbnRpbmdQYWdlVXJsOwogICAgIEFQSTo6
T2JqZWN0KiB1c2VyRGF0YU9iamVjdCA9IHByb2Nlc3MoKS50cmFuc2Zvcm1IYW5kbGVzVG9PYmpl
Y3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKTsKICAgICBpZiAobV9lZGl0b3JTdGF0ZS5pc01p
c3NpbmdQb3N0TGF5b3V0RGF0YSkgewogICAgICAgICBtX2RlZmVycmVkTm9kZUFzc2lzdGFuY2VB
cmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzPihOb2Rl
QXNzaXN0YW5jZUFyZ3VtZW50cyB7IGluZm9ybWF0aW9uLCB1c2VySXNJbnRlcmFjdGluZywgYmx1
clByZXZpb3VzTm9kZSwgdXNlckRhdGFPYmplY3QgfSk7CkBAIC05MTAsNiArOTEyLDIxIEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzdG9wQXNzaXN0aW5nTm9kZSgpCiAgICAgbV9wYWdlQ2xpZW50LnN0
b3BBc3Npc3RpbmdOb2RlKCk7CiB9CiAKK2Jvb2wgV2ViUGFnZVByb3h5OjphY2NlcHRzQXV0b2Zp
bGxlZExvZ2luQ3JlZGVudGlhbHMoKQoreworICAgIHJldHVybiBtX2FjY2VwdHNBdXRvZmlsbGVk
TG9naW5DcmVkZW50aWFsczsKK30KKworV2ViQ29yZTo6VVJMIFdlYlBhZ2VQcm94eTo6cmVwcmVz
ZW50aW5nUGFnZVVybCgpCit7CisgICAgcmV0dXJuIG1fcmVwcmVzZW50aW5nUGFnZVVybDsKK30K
Kwordm9pZCBXZWJQYWdlUHJveHk6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJp
bmcmIHVzZXJuYW1lLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKHVzZXJuYW1l
LCBwYXNzd29yZCksIG1fcGFnZUlEKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OnNob3dJbnNw
ZWN0b3JIaWdobGlnaHQoY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiBoaWdobGlnaHQpCiB7CiAg
ICAgbV9wYWdlQ2xpZW50LnNob3dJbnNwZWN0b3JIaWdobGlnaHQoaGlnaGxpZ2h0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBlNTQ2OTkzMDRhYmZl
NDY3ZmY1MTYwY2JkOTZmMmU1OWQxOGNhNjlkLi5hNWNhZjg5NjAyYTcxNGVmZmZjM2UyNDlhZDQ2
OTYwZTgyMjRkYmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCkBAIC01NzMsNiArNTczLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcEludGVyYWN0aW9u
KCk7CiAgICAgdm9pZCBwZXJmb3JtQWN0aW9uT25FbGVtZW50KHVpbnQzMl90IGFjdGlvbik7CiAg
ICAgdm9pZCBmb2N1c05leHRBc3Npc3RlZE5vZGUoYm9vbCBpc0ZvcndhcmQsIENhbGxiYWNrSUQp
OworICAgIHZvaWQgYXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFsdWUoY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSk7CiAgICAgdm9p
ZCBzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93
TXVsdGlwbGVTZWxlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggMDUyMWFhMjgyM2I3M2FjZjgzMzU2ZGY2
YzdhMWUzYjg1YzA4MzE1Zi4uMzA3YTJlMzU2NzI2YTMyY2ZkM2MwOTMxNGQ5YjFhYzJkN2U2YzI4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCkBAIC04NCw2ICs4NCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5
UmVjZWl2ZXIgewogICAgIFBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9uKQog
ICAgIEZvY3VzTmV4dEFzc2lzdGVkTm9kZShib29sIGlzRm9yd2FyZCwgV2ViS2l0OjpDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiAgICAgU2V0QXNzaXN0ZWROb2RlVmFsdWUoU3RyaW5nIHZhbHVlKQor
ICAgIEF1dG9maWxsTG9naW5DcmVkZW50aWFscyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNz
d29yZCkKICAgICBTZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAg
ICBTZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93
TXVsdGlwbGVTZWxlY3Rpb24pCiAgICAgQXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0K
aW5kZXggNDc3OTE2MTE5YmZkMjFlOGEwMGRhZWYwMWM0ZTEzOTI1MmQ2NzdkMi4uMDdhYjU1OWVl
Y2Q2ZjJkMTgxZDEyYmQxNjg5NWFlYmFiY2Y3OTcxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTUzLDYgKzUzLDcgQEAK
ICNpbXBvcnQgIldlYlByb2Nlc3MuaCIKICNpbXBvcnQgPENvcmVUZXh0L0NURm9udC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9BdXRvZmlsbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9BdXRvZmlsbEVsZW1l
bnRzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9EYXRh
RGV0ZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+
CkBAIC0yNzQyLDYgKzI3NDMsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9y
bWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbikKICAgICAgICAgSFRN
TEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVudC5mb3JtKCk7CiAgICAgICAgIGlmIChmb3JtKQog
ICAgICAgICAgICAgaW5mb3JtYXRpb24uZm9ybUFjdGlvbiA9IGZvcm0tPmdldFVSTEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmFjdGlvbkF0dHIpOworICAgICAgICBpbmZvcm1hdGlvbi5h
Y2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgPSAhIVdlYkNvcmU6OkF1dG9maWxsRWxl
bWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKCZlbGVtZW50KTsKICAgICAgICAgaW5mb3Jt
YXRpb24uYXV0b2NhcGl0YWxpemVUeXBlID0gZWxlbWVudC5hdXRvY2FwaXRhbGl6ZVR5cGUoKTsK
ICAgICAgICAgaW5mb3JtYXRpb24uaXNBdXRvY29ycmVjdCA9IGVsZW1lbnQuc2hvdWxkQXV0b2Nv
cnJlY3QoKTsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNQYXNzd29yZEZpZWxkKCkpCkBAIC0yNzk5
LDYgKzI4MDEsMTUgQEAgdm9pZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihB
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYgaW5mb3JtYXRpb24pCiAgICAgfQogfQogCit2b2lkIFdl
YlBhZ2U6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBj
b25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Piht
X2Fzc2lzdGVkTm9kZS5nZXQoKSkpIHsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGFzc2lzdGVu
ZEVsZW1lbnQgPSAmZG93bmNhc3Q8RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKTsKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxBdXRvZmlsbEVsZW1lbnRzPiBhdXRvZmlsbEVsZW1lbnRzID0gQXV0b2Zp
bGxFbGVtZW50czo6Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoYXNzaXN0ZW5kRWxlbWVudCk7Cisg
ICAgICAgIGF1dG9maWxsRWxlbWVudHMtPmF1dG9maWxsKHVzZXJuYW1lLCBwYXNzd29yZCk7Cisg
ICAgfQorfQorCiB2b2lkIFdlYlBhZ2U6OnNldFZpZXdwb3J0Q29uZmlndXJhdGlvbk1pbmltdW1M
YXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAobV92aWV3cG9ydENv
bmZpZ3VyYXRpb24uc2V0TWluaW11bUxheW91dFNpemUoc2l6ZSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5oIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaAppbmRleCBhMDkyMzc3YjFk
ZTkxNWY1NjhhNTMwZTllM2FlZDNmMGIzMzI5ZGZmLi5lYzBlODgyYmM4OTE5OTEyNjBkYTJhZTMw
MmY4Y2NkNjc5ZTkwNzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
RE9NSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T01IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTI0LDYgKzI0LDkgQEAKICAqLwogCiAjaW1wb3J0IDxX
ZWJLaXRMZWdhY3kvRE9NSFRNTEVsZW1lbnQuaD4KKyNpZiBUQVJHRVRfT1NfSVBIT05FCisjaW1w
b3J0IDxVSUtpdC9VSVRleHRJbnB1dFRyYWl0cy5oPgorI2VuZGlmCiAKIEBjbGFzcyBET01GaWxl
TGlzdDsKIEBjbGFzcyBET01IVE1MRm9ybUVsZW1lbnQ7CkBAIC0zMSw3ICszNCwxMSBAQAogQGNs
YXNzIE5TVVJMOwogCiBXRUJLSVRfQ0xBU1NfQVZBSUxBQkxFX01BQygxMF80KQorI2lmIFRBUkdF
VF9PU19JUEhPTkUKK0BpbnRlcmZhY2UgRE9NSFRNTElucHV0RWxlbWVudCA6IERPTUhUTUxFbGVt
ZW50PFVJVGV4dElucHV0VHJhaXRzPgorI2VsaWYKIEBpbnRlcmZhY2UgRE9NSFRNTElucHV0RWxl
bWVudCA6IERPTUhUTUxFbGVtZW50CisjZW5kaWYKIEBwcm9wZXJ0eSAoY29weSkgTlNTdHJpbmcg
KmFjY2VwdDsKIEBwcm9wZXJ0eSAoY29weSkgTlNTdHJpbmcgKmFsdDsKIEBwcm9wZXJ0eSBCT09M
IGF1dG9mb2N1cyBXRUJLSVRfQVZBSUxBQkxFX01BQygxMF82KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQubW0KaW5kZXggOWJjODAzYzU5
NTg1MDFjODY5MDk0NTIwM2ZiYTJhNzA5ODU3NmQxYS4uMTQxYzdjODg0MGExMWZmOTdkODE1NzVm
Yjk5ZGFhZGZkMmU4MmMwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTUhUTUxJbnB1dEVsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTUhUTUxJbnB1dEVsZW1lbnQubW0KQEAgLTMzLDYgKzMzLDE4IEBACiAjaW1wb3J0ICJET01J
bnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUHJpdmF0ZS5oIgogI2ltcG9ydCAiRXhjZXB0aW9uSGFu
ZGxlcnMuaCIKKyNpZiBfX2hhc19pbmNsdWRlKDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50
aWFsc1N1Z2dlc3Rpb24uaD4pCisjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50
aWFsc1N1Z2dlc3Rpb24uaD4KKyNlbHNlCisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dF9Qcml2
YXRlLmg+CitAaW50ZXJmYWNlIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiA6
IFVJVGV4dFN1Z2dlc3Rpb24KKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJp
bmcgKnVzZXJuYW1lOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnBh
c3N3b3JkOworCitAZW5kCisjZW5kaWYKKyNpbXBvcnQgPFdlYkNvcmUvQXV0b2ZpbGxFbGVtZW50
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxlTGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1M
RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTY2Niw2
ICs2NzgsMjcgQEAgLSAodm9pZClzZXRWYWx1ZUZvclVzZXI6KE5TU3RyaW5nICopaW5WYWx1ZQog
ICAgIElNUEwtPnNldFZhbHVlRm9yVXNlcihpblZhbHVlKTsKIH0KIAorLSAoQk9PTClhY2NlcHRz
QXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuICEhV2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50czo6
Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoSU1QTCk7Cit9CisKKy0gKE5TVVJMICopcmVwcmVzZW50
aW5nUGFnZVVybAoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6c2VsZi5vd25lckRvY3VtZW50LlVSTF07
Cit9CisKKy0gKHZvaWQpaW5zZXJ0VGV4dFN1Z2dlc3Rpb246KFVJS2V5Ym9hcmRMb2dpbkNyZWRl
bnRpYWxzU3VnZ2VzdGlvbiAqKWNyZWRlbnRpYWxzU3VnZ2VzdGlvbgoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBpZiAoaXM8V2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudD4oSU1QTCkpIHsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpBdXRv
ZmlsbEVsZW1lbnRzPiBhdXRvZmlsbEVsZW1lbnRzID0gV2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50
czo6Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoSU1QTCk7CisgICAgICAgIGF1dG9maWxsRWxlbWVu
dHMtPmF1dG9maWxsKGNyZWRlbnRpYWxzU3VnZ2VzdGlvbi51c2VybmFtZSwgY3JlZGVudGlhbHNT
dWdnZXN0aW9uLnBhc3N3b3JkKTsKKyAgICB9Cit9CisKIEBlbmQKIAogV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudCogY29yZShET01IVE1MSW5wdXRFbGVtZW50ICp3cmFwcGVyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321243</attachid>
            <date>2017-09-19 14:37:17 -0700</date>
            <delta_ts>2017-09-20 10:19:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170919143716.patch</filename>
            <type>text/plain</type>
            <size>35053</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyMjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjdlZWRjNmYzMTI3ZGNj
NzlhZDA4YzExNWMxNzg0MTBkODQ2NmFhMi4uOGIwMjRmZjhiMzhiY2M3OGE3NWY2YzNiNGU5ZGRh
N2M3NGZlYWU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA5LTE5ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVu
dHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzQXV0b2ZpbGxhYmxlRWxlbWVudCk6
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBvZiB0eXBlIHRleHQgb3IgZW1haWwuCisg
ICAgICAgIChXZWJDb3JlOjpuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCk6IFJldHVybnMgdGhlIG5l
eHQgZm9jdXNhYmxlIGVsZW1lbnQgdGhhdCBpcyBhdXRvZmlsbGFibGUuCisgICAgICAgIChXZWJD
b3JlOjpwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1lbnQpOiBSZXR1cm5zIHRoZSBwcmV2aW91cyBm
b2N1c2FibGUgZWxlbWVudCB0aGF0IGlzIGF1dG9maWxsYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6
OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKTogQ29tcHV0ZXMgdGhl
IGF1dG9maWxsIGVsZW1lbnRzICh1c2VybmFtZSAmIHBhc3N3b3JkKQorICAgICAgICBmb3IgYSBn
aXZlbiBpbnB1dCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50czo6
YXV0b2ZpbGwpOiBGaWxscyB0aGUgY3JlZGVudGlhbHMgaW50byB0aGUgcGFpciBvZiB1c2VybmFt
ZS9wYXNzd29yZCBlbGVtZW50cy4KKyAgICAgICAgKiBlZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1l
bnRzLmg6IEFkZGVkLgorCiAyMDE3LTA5LTE5ICBCYXN1a2UgU3V6dWtpICA8QmFzdWtlLlN1enVr
aUBzb255LmNvbT4KIAogICAgICAgICBbQ3VybF0gTW92ZSBBdXRoZW50aWNhdGlvbiByZWxhdGVk
IHRhc2tzIGludG8gQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2xhc3MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNGMw
N2Q0NGJkYjRlNTYzYTZkNDY5MGQ1Y2I0ZmRlNWE2Yjk1NDZmNy4uZGJlYTFkMmNiY2I5YWQ1NmM5
OTZlMjg4NTk4YTdlZDM4ZmNhZDI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxNy0w
OS0xOSAgRnJlZGVyaWsgUmllZGVsICA8cmllZGVsQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBv
c2Ugd2F5IHRvIHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3JtIGNvbnRyb2xzIGFzIHtMZWdh
Y3kgV2ViS2l0LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzE4MzUwND4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAgICAgICAgKiBTaGFyZWQvQXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgRW5jb2RlcyBhZGRpdGlvbmFsIG5vZGUgaW5mb3JtYXRp
b24sIGluY2x1ZGluZyBpZiB0aGUgbm9kZSBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgorICAg
ICAgICAoV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZGVjb2RlKToKKyAgICAgICAg
RGVjb2RlcyB0aGUgYWRkaXRpb25hbCBhc3Npc3RlZCBub2RlIGluZm9ybWF0aW9uLgorICAgICAg
ICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcu
bW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRl
bnRpYWxzXSk6CisgICAgICAgIERldGVybWluZXMgaWYgdGhlIFdLQ29udGVudFZpZXcgc2hvd3Mg
YSBsb2dpbiBzY3JlZW4uCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgcmVwcmVzZW50aW5nUGFn
ZVVybF0pOgorICAgICAgICBSZXR1cm5zIHRoZSBVUkwgb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5
ZWQgd2ViIHBhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaW5zZXJ0VGV4dFN1Z2dlc3Rpb246
XSk6CisgICAgICAgIEluc2VydHMgdGhlIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlIFdlYiBW
aWV3LgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0YXJ0QXNzaXN0aW5nTm9kZSk6CisgICAgICAgIFRy
YW5zZmVyIHRoZSBhZGRpdGlvbmFsIGFzc2lzdGVkbm9kZSBpbmZvcm1hdGlvbiAoYWNjZXB0c0F1
dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIGFuZCByZXByZXNlbnRpbmdQYWdlVXJsKS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlh
bHMpOgorICAgICAgICBSZXR1cm5zIGlmIHRoZSBXZWIgVmlldyBzaG93cyBhIGxvZ2luIHNjcmVl
bi4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXByZXNlbnRpbmdQYWdlVXJsKToK
KyAgICAgICAgUmV0dXJucyB0aGUgV2ViIFZpZXcncyBVUkwuCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKToKKyAgICAgICAgSW5zZXJ0IHRo
ZSBjcmVkZW50aWFscyBpbnRvIHRoZSBXZWIgVmlldy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24p
OiBUcmFuc3BvcnRzIHRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgY3VycmVudGx5CisgICAgICAgIGhp
Z2hsaWdodGVkIG5vZGUgYWNjZXB0cyBhdXRvZmlsbGVkIGxvZ2luIGNyZWRlbnRpYWxzLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjphdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMpOiBGaWxscyB0
aGUgbG9naW4gY3JlZGVudGlhbHMgaW50byB0aGUKKyAgICAgICAgV2ViUGFnZS4KKwogMjAxNy0w
OS0xOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAg
ICAgIEV4cG9zZSBXS1BhZ2VSZWYgYXMgYSBwcml2YXRlIHByb3BlcnR5IG9uIFdLV2ViVmlldyBv
biBNYWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA1MzkyZDkxZDQwMDI2OTZlZjQx
ZjIwYmM3NTVhYWVjZTlhMzcxOTFkLi5mYzUxYzUwNjQ2YWJlY2ZjZDlhOGQ3ODY3N2M2NjkzNDZj
Y2E1Mjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTctMDktMTkgIEZyZWRlcmlrIFJpZWRlbCAgPHJpZWRlbEBhcHBsZS5jb20+CisKKyAgICAgICAg
RXhwb3NlIHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZpZWQgZm9ybSBjb250cm9scyBhcyB7
TGVnYWN5IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NDM5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxODM1
MDQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBE
T00vRE9NSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIERPTS9ET01IVE1MSW5wdXRFbGVt
ZW50Lm1tOgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGFjY2VwdHNBdXRvZmlsbGVk
TG9naW5DcmVkZW50aWFsc10pOgorICAgICAgICBEZXRlcm1pbmVzIGlmIHRoaXMgSFRNTElucHV0
RWxlbWVudCBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgorICAgICAgICAoLVtET01IVE1MSW5w
dXRFbGVtZW50IHJlcHJlc2VudGluZ1BhZ2VVcmxdKToKKyAgICAgICAgUmV0dXJucyB0aGUgd2Vi
cGFnZSdzIFVSTCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgaW4gdGhlIFdlYiBWaWV3Lgor
ICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGluc2VydFRleHRTdWdnZXN0aW9uOl0pOgor
ICAgICAgICBJbnNlcnRzIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlIFdlYiBWaWV3LgorCiAy
MDE3LTA5LTE4ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFj
XSBVcHN0cmVhbSBtaXNjZWxsYW5lb3VzIFdlYktpdFN5c3RlbUludGVyZmFjZSBmdW5jdGlvbnMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjN2I3OGJkM2E0OWRjMTNiNTk4MGM4MjRlZWNjYjc0MWVlMTcxNDczLi5mZDUyZWE1ZGU5
MzU1ZDNkMTliYTc1OWI1YWJiMzIxNzdjYWM5ZTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjk3LDYgKzIyOTcsOCBAQAog
CQk1MTYyQzdGNDExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjIxMUY3N0VGQTAw
NjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNTE2MkM3RjUxMUY3N0VGQjAw
NjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0
cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MTY2RDNDRDFFOEVENDhGMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAv
KiBTdG9yYWdlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUxNjk5RUUzMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk5RUUx
MUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNwcCAqLzsgfTsKKwkJNTE2OTlF
RTQxRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk5RUUyMUY2MDhDRDUwMEQ1N0QwNiAv
KiBBdXRvZmlsbEVsZW1lbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTE2QkI3OTQwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTZCQjc5MjBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCAqLzsgfTsK
IAkJNTE2QzYyMjAxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZDNjIxRDE5NTBENDg3MDAz
MzdFNzUgLyogR2FtZXBhZEV2ZW50LmNwcCAqLzsgfTsKIAkJNTE2QzYyMjExOTUwRDQ4NzAwMzM3
RTc1IC8qIEdhbWVwYWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2QzYyMUUxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5oICov
OyB9OwpAQCAtMTAyMTAsNiArMTAyMTIsOCBAQAogCQk1MTY0NUI1MzFCOUY4ODlCMDBGNzg5Q0Ug
LyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElEQlZlcnNpb25DaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTY0NUI1NDFCOUY4OEU4MDBGNzg5Q0UgLyogSURCQ3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAvKiBTdG9yYWdlVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MTY5OUVFMTFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxF
bGVtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdXRvZmlsbEVsZW1lbnRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2OTlFRTIxRjYwOENENTAwRDU3RDA2IC8qIEF1
dG9maWxsRWxlbWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b2ZpbGxFbGVtZW50cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTZCQjc5MjBDRTkxRTY4MDA1MTJGNzkgLyogSlNU
cmVlV2Fsa2VyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTVHJlZVdhbGtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
NkM2MjFEMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2FtZXBhZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE2QzYyMUUxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYW1lcGFkRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NDI0LDYgKzE4NDI4LDggQEAKIAkJNDQzMjkyQzEw
RUJBNkQ3MzAwRTYyMDE2IC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJNTE2OTlFRTExRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVu
dHMuY3BwICovLAorCQkJCTUxNjk5RUUyMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1l
bnRzLmggKi8sCiAJCQkJRDBCRDRGNUExNDA4ODUwRjAwNjgzOUI2IC8qIERpY3RhdGlvbkNvbW1h
bmRJT1MuY3BwICovLAogCQkJCUQwQkQ0RjVCMTQwODg1MEYwMDY4MzlCNiAvKiBEaWN0YXRpb25D
b21tYW5kSU9TLmggKi8sCiAJCQkJRkVEMTNEMzkwQ0VBOTM0NjAwRDg5NDY2IC8qIEVkaXRvcklP
Uy5tbSAqLywKQEAgLTIzODQ3LDggKzIzODUzLDggQEAKIAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2
MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlci5oICovLAogCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJ
bWFnZUJ1ZmZlckRhdGEuaCAqLywKLQkJCQlDRDE5RkVBNjFGNTczOTcyMDAwQzQyRkIgLyogSW1h
Z2VEZWNvZGVyLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVj
b2Rlci5jcHAgKi8sCisJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rl
ci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAq
LywKIAkJCQk1NTc2QTU2MzFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5oICovLAogCQkJ
CTU1OTdGODI0MUQ5MUMzMTMwMDY2QkMyMSAvKiBJbWFnZUZyYW1lQ2FjaGUuY3BwICovLApAQCAt
MjcyMTYsNiArMjcyMjIsNyBAQAogCQkJCUE1QTdBQTQzMTMyRjBFQ0MwMEQzQTNDMiAvKiBBdXRv
Y2FwaXRhbGl6ZVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzE4NDNGRTFDOEI3MjgzMDAy
RUI5NzMgLyogQXV0b2ZpbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMUU5NzI4MUE5Rjk4MzQw
MDdCRjBGQiAvKiBBdXRvRmlsbEJ1dHRvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
Njk5RUU0MUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDOUQ0NjcwNTFFNjBDNDY1MDA4MTk1RkIgLyogQXV0b3BsYXlFdmVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDU4MzBENEUxNjc5QjRGODAwQUNGOEMzIC8qIEF1dG9zY3JvbGxDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjA0RTBBMTU0RjA5MDAwQTQyMzQgLyog
QXV0b1RhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODg2LDYgKzI3ODkzLDcgQEAK
IAkJCQk4NDczMEQ4OTEyNDhGMEIzMDBEM0E5QzkgLyogRkVTcGVjdWxhckxpZ2h0aW5nLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0MTI5Qzk5NzFGNTlCOTYzMDA5RDc0MDMgLyogRmV0Y2hCb2R5U291
cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUQxMjlEQjFGM0QxNDM4MDBEMTVFNDcgLyogRmV0
Y2hIZWFkZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwMjMg
LyogRmV0Y2hJbnRlcm5hbHNCdWlsdGlucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFBRDc1M0Ex
Q0VGNkJEMTAwQTMxNDg2IC8qIEZldGNoT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NF
MTkxNEQxRjJBOUFGQjAwMjcyRjc4IC8qIEZldGNoUmVmZXJyZXJQb2xpY3kuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdDRTE5MTVBMUYyQTlCMzQwMDI3MkY3OCAvKiBGZXRjaFJlcXVlc3RDYWNoZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yODI3NCw2ICsyODI4Miw3IEBACiAJCQkJNTEwMTkyRDYxOEI2
QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTEwMTkyRDIxOEI2QjlBQjAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVu
dE1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3OTc5MUEwRDZCOUQwQzAwMzg1MUI5IC8qIElt
YWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0QxOUZFQTgxRjU3Mzk3MjAwMEM0MkZCIC8q
IEltYWdlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzIwNUFCNjEyMzky
OTEwMDBCMTczODAgLyogSW1hZ2VEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU3NkE1
NjUxRDg4QTcwODAwQ0NDMDRDIC8qIEltYWdlRnJhbWUuaCBpbiBIZWFkZXJzICovLApAQCAtMjg0
ODUsNyArMjg0OTQsNiBAQAogCQkJCTk0Nzk0OTM4MUUwNDU5RkEwMDAxOEQ4NSAvKiBKU0RlcHJl
Y2F0ZWRDU1NPTVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NDc5NDkzQTFFMDQ1OUZBMDAw
MThEODUgLyogSlNEZXByZWNhdGVkQ1NTT01WYWx1ZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxRkIxQTY2MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLywKLQkJCQlDRDE5RkVBODFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1OUE4NjAwODExOURBRkExMDBERUYxRUYgLyogSlNEZXZpY2VP
cmllbnRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTlEREM4MzA5RTE5OEJBMDAx
QkYzQzYgLyogSlNEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTIyMUUwNUUxQzAyQjQ0
NDAwNkExQTAwIC8qIEpTRG9jdW1lbnRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMzEz
ODcsNiArMzEzOTUsNyBAQAogCQkJCUE1RjZFMTZCMTMyRUQ0NkUwMDhFREFFMyAvKiBBdXRvY2Fw
aXRhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NDNGRDFDOEI3MjgzMDAyRUI5NzMg
LyogQXV0b2ZpbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxRTk3MjcxQTlGOTgzNDAwN0JG
MEZCIC8qIEF1dG9GaWxsQnV0dG9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTY5
OUVFMzFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0NTgzMEQ0RDE2NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkYwNTAwQTE1NEYwOTAwMEE0MjM0IC8qIEF1dG9U
YWJsZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREVDQTg5QTFFREY0NDdEMDBEQ0Iw
OEIgLyogQVZBc3NldFRyYWNrVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0zMTQ2Miw3
ICszMTQ3MSw2IEBACiAJCQkJQTEwNEYyNDMxNEM3MUY3QTAwOUUyQzIzIC8qIENhY2hlZFNWR0Rv
Y3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQjUzMzQ3MTcxN0QwQTEwMEYyMDVGOSAv
KiBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzA5
MzlFQTFBMTNFMTI5MDBCNzg4RTUgLyogQ2FjaGVkU1ZHRm9udC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlDRDE5RkVBOTFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTA3NTM4NjAyMTQ0ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCMTZDMjcwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hl
ZFhTTFN0eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDEzODBDMjgxRjM0MzZBQzAw
MTU1RkRBIC8qIENhY2hlU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMyMTIyLDcgKzMy
MTMwLDYgQEAKIAkJCQlFMTJERTcxNzFFNEI3NDlDMDBGOUFDQ0YgLyogR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNEMyNUQ3MUU5RUZFREUwMEJFRTE0
MSAvKiBIMjY0VmlkZW9Ub29sQm94RW5jb2Rlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIz
REJGMTI1MUYxMkQwMDNFRjI2OSAvKiBIaWRkZW5JbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMDczQkRDMDUxRjY4NDM2MTAwRUUzNEVEIC8qIFRyYWNrUHJpdmF0ZUJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxOUIxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdhbWVwYWQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxOUQxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdh
bWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzk0RDE1MzBDMjc1QzhCMDA2
QkM2MTcgLyogSGlzdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMyMzExLDYgKzMyMzE4LDcg
QEAKIAkJCQk1MTAxOTJENTE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMDE5MkQxMThCNkI5QUIwMDdGQzdBMSAvKiBJ
bWFnZUNvbnRyb2xzUm9vdEVsZW1lbnRNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3OTc5
MTkwRDZCOUQwQzAwMzg1MUI5IC8qIEltYWdlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlD
RDE5RkVBOTFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5NzIwNUFCNTEyMzkyOTEwMDBCMTczODAgLyogSW1hZ2VEb2N1bWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1NTc2QTU2NDFEODhBNzA4MDBDQ0MwNEMgLyogSW1h
Z2VGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTM0MzgxLDYgKzM0Mzg5LDcgQEAKIAkJCQkw
NzAzMzREOTE0NUEwMDZGMDA4RDhENDUgLyogVHJhY2tCYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTA3MDMzNEQzMTQ1OUZGQUQwMDhEOEQ0NSAvKiBUcmFja0V2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJFODhFMEMxMTcxNUNFMjYwMDY1OEQ5OCAvKiBUcmFja0xpc3RCYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTA3M0JEQzA1MUY2ODQzNjEwMEVFMzRFRCAvKiBUcmFja1ByaXZh
dGVCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZGQUMzMEZGMTg0RkIxNDUwMDhDNEYxRSAv
KiBUcmFpbGluZ09iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEN0VGRUMxQkRFRkE1
MTAwRTkzRTEwIC8qIFRyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQ5RTkxMUMzMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9m
aWxsRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVt
ZW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDRkZjA2OTEzNGU2ZTYzY2RhYWQ3NTE4MWZiMmUxNWZlYTA2
NTQ3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9m
aWxsRWxlbWVudHMuY3BwCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1dG9maWxsRWxlbWVudHMuaCIKKworI2luY2x1ZGUgIkZv
Y3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNBdXRvZmlsbGFibGVFbGVtZW50KEVsZW1lbnQmIG5v
ZGUpCit7CisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byBpbnB1dEVsZW1lbnQgPSAmZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4obm9kZSk7CisgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSB8
fCBpbnB1dEVsZW1lbnQtPmlzRW1haWxGaWVsZCgpOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0
cjxIVE1MSW5wdXRFbGVtZW50PiBuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudChOb2RlKiBzdGFydE5v
ZGUsIEZvY3VzQ29udHJvbGxlciYgZm9jdXNDb250cm9sbGVyKQoreworICAgIGlmICghaXM8RWxl
bWVudD4oc3RhcnROb2RlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8
RWxlbWVudD4gbmV4dEVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihzdGFydE5vZGUpOworICAg
IGRvIHsKKyAgICAgICAgbmV4dEVsZW1lbnQgPSBmb2N1c0NvbnRyb2xsZXIubmV4dEZvY3VzYWJs
ZUVsZW1lbnQoKm5leHRFbGVtZW50LmdldCgpKTsKKyAgICB9IHdoaWxlIChuZXh0RWxlbWVudCAm
JiAhaXNBdXRvZmlsbGFibGVFbGVtZW50KCpuZXh0RWxlbWVudC5nZXQoKSkpOworCisgICAgcmV0
dXJuICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbmV4dEVsZW1lbnQpOworfQorCitzdGF0
aWMgaW5saW5lIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcmV2aW91c0F1dG9maWxsYWJsZUVs
ZW1lbnQoTm9kZSogc3RhcnROb2RlLCBGb2N1c0NvbnRyb2xsZXImIGZvY3VzQ29udHJvbGxlcikK
K3sKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KHN0YXJ0Tm9kZSkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgUmVmUHRyPEVsZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KHN0YXJ0Tm9kZSk7CisgICAgZG8geworICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSBm
b2N1c0NvbnRyb2xsZXIucHJldmlvdXNGb2N1c2FibGVFbGVtZW50KCpwcmV2aW91c0VsZW1lbnQu
Z2V0KCkpOworICAgIH0gd2hpbGUgKHByZXZpb3VzRWxlbWVudCAmJiAhaXNBdXRvZmlsbGFibGVF
bGVtZW50KCpwcmV2aW91c0VsZW1lbnQuZ2V0KCkpKTsKKworICAgIHJldHVybiAmZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKnByZXZpb3VzRWxlbWVudCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8
QXV0b2ZpbGxFbGVtZW50cz4gQXV0b2ZpbGxFbGVtZW50czo6Y29tcHV0ZUF1dG9maWxsRWxlbWVu
dHMoUmVmUHRyPEVsZW1lbnQ+IHN0YXJ0KQoreworICAgIGlmICghc3RhcnQtPmRvY3VtZW50KCku
cGFnZSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIEZvY3VzQ29udHJvbGxl
ciYgZm9jdXNDb250cm9sbGVyID0gc3RhcnQtPmRvY3VtZW50KCkucGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKTsKKyAgICBBdXRvZmlsbEVsZW1lbnRzIGF1dG9maWxsRWxlbWVudHM7CisgICAgaWYg
KHN0YXJ0ICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpzdGFydCkpIHsKKyAgICAgICAgYXV0byYg
aW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnN0YXJ0KTsKKyAgICAg
ICAgaWYgKGlucHV0RWxlbWVudC5pc1Bhc3N3b3JkRmllbGQoKSkgeworICAgICAgICAgICAgUmVm
UHRyPEhUTUxJbnB1dEVsZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9IHByZXZpb3VzQXV0b2ZpbGxh
YmxlRWxlbWVudCgmaW5wdXRFbGVtZW50LCBmb2N1c0NvbnRyb2xsZXIpOworICAgICAgICAgICAg
aWYgKHByZXZpb3VzRWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PigqcHJldmlvdXNFbGVt
ZW50KSkgeworICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0VsZW1lbnQtPmlzVGV4dEZpZWxk
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy5tX3Bhc3N3b3JkID0g
JmlucHV0RWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy5tX3Vz
ZXJuYW1lID0gcHJldmlvdXNFbGVtZW50OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0
b2ZpbGxFbGVtZW50czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbmV4dEVsZW1l
bnQgPSBuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCgmaW5wdXRFbGVtZW50LCBmb2N1c0NvbnRyb2xs
ZXIpOworICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50ICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+
KCpuZXh0RWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQtPmlzUGFz
c3dvcmRGaWVsZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG9maWxsRWxlbWVudHMubV9w
YXNzd29yZCA9IG5leHRFbGVtZW50OworICAgICAgICAgICAgICAgICAgICBhdXRvZmlsbEVsZW1l
bnRzLm1fdXNlcm5hbWUgPSAmaW5wdXRFbGVtZW50OworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYXV0b2ZpbGxFbGVtZW50czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oc3RhcnQuZ2V0
KCkpKSB7CisgICAgICAgIGF1dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KCpzdGFydCk7CisgICAgICAgIGlmIChpbnB1dEVsZW1lbnQuaXNQYXNzd29yZEZpZWxk
KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcmV2aW91c0VsZW1l
bnQgPSBwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1lbnQoJmlucHV0RWxlbWVudCwgZm9jdXNDb250
cm9sbGVyKTsKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBuZXh0RWxlbWVu
dCA9IG5leHRBdXRvZmlsbGFibGVFbGVtZW50KCZpbnB1dEVsZW1lbnQsIGZvY3VzQ29udHJvbGxl
cik7CisgICAgICAgICAgICBpZiAoIXByZXZpb3VzRWxlbWVudCAmJiAhbmV4dEVsZW1lbnQpIHsK
KyAgICAgICAgICAgICAgICBhdXRvZmlsbEVsZW1lbnRzLm1fcGFzc3dvcmQgPSAmaW5wdXRFbGVt
ZW50OworICAgICAgICAgICAgICAgIHJldHVybiBhdXRvZmlsbEVsZW1lbnRzOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3Zv
aWQgQXV0b2ZpbGxFbGVtZW50czo6YXV0b2ZpbGwoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFz
c3dvcmQpCit7CisgICAgaWYgKHRoaXMtPm1fdXNlcm5hbWUpIHsKKyAgICAgICAgdGhpcy0+bV91
c2VybmFtZS0+c2V0VmFsdWVGb3JVc2VyKHVzZXJuYW1lKTsKKyAgICAgICAgdGhpcy0+bV91c2Vy
bmFtZS0+c2V0QXV0b0ZpbGxlZCgpOworICAgIH0KKyAgICBpZiAodGhpcy0+bV9wYXNzd29yZCkg
eworICAgICAgICB0aGlzLT5tX3Bhc3N3b3JkLT5zZXRWYWx1ZUZvclVzZXIocGFzc3dvcmQpOwor
ICAgICAgICB0aGlzLT5tX3Bhc3N3b3JkLT5zZXRBdXRvRmlsbGVkKCk7CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9BdXRvZmlsbEVsZW1lbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRv
ZmlsbEVsZW1lbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzc2NDVmOTkxY2Q1NDYxZTE1ZDMxMmM2YWM5MGY3
M2VhZWZmOWM2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0F1dG9maWxsRWxlbWVudHMuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBB
dXRvZmlsbEVsZW1lbnRzIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjpvcHRpb25hbDxBdXRvZmlsbEVsZW1lbnRz
PiBjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyhSZWZQdHI8RWxlbWVudD4pOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXV0b2ZpbGwoU3RyaW5nLCBTdHJpbmcpOworcHJpdmF0ZToKKyAgICBSZWZQ
dHI8SFRNTElucHV0RWxlbWVudD4gbV91c2VybmFtZTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxl
bWVudD4gbV9wYXNzd29yZDsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCmluZGV4IGM5MWJiOTIzN2VjNmVjNmYwZGVj
ZTc1ZDc3MDg2OTdkODY4MjJjNTMuLjEyZGFmNWQxODg4MjBjYmJlODAyMjdjMTgxMzVhZWIwZjVk
OTE3OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQ
SS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC00
Myw2ICs0MywxNyBAQAogI2ltcG9ydCA8VUlLaXQvVUlJbnRlcmZhY2VfUHJpdmF0ZS5oPgogI2lt
cG9ydCA8VUlLaXQvVUlLZXlib2FyZEltcGwuaD4KICNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRJ
bnRsLmg+CisjaWYgX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlh
bHNTdWdnZXN0aW9uLmg+KQorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlh
bHNTdWdnZXN0aW9uLmg+CisjZWxzZQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRfUHJpdmF0
ZS5oPgorQGludGVyZmFjZSBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gOiBV
SVRleHRTdWdnZXN0aW9uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5n
ICp1c2VybmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICpwYXNz
d29yZDsKKworQGVuZAorI2VuZGlmCiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkX1ByaXZhdGUu
aD4KICNpbXBvcnQgPFVJS2l0L1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXJfUHJpdmF0ZS5o
PgogI2ltcG9ydCA8VUlLaXQvVUlQZXJpcGhlcmFsSG9zdC5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwCmluZGV4IGFjOTZmMDBiN2E0NTFh
ODNlYmFmMjczZDMxNTBjNDgzMmVhODMzMjQuLmExMjZkMGEwNTUwMTAwYTliYTdmOTZkZWQ0YTFj
OGE0ODgyOTU2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbi5jcHAKQEAgLTg1LDYgKzg1LDggQEAgdm9pZCBBc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbjo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8
IHZhbHVlOwogICAgIGVuY29kZXIgPDwgdmFsdWVBc051bWJlcjsKICAgICBlbmNvZGVyIDw8IHRp
dGxlOworICAgIGVuY29kZXIgPDwgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzOwor
ICAgIGVuY29kZXIgPDwgcmVwcmVzZW50aW5nUGFnZVVybDsKICAgICBlbmNvZGVyLmVuY29kZUVu
dW0oYXV0b2ZpbGxGaWVsZE5hbWUpOwogfQogCkBAIC0xNTksNiArMTYxLDEyIEBAIGJvb2wgQXNz
aXN0ZWROb2RlSW5mb3JtYXRpb246OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIEFzc2lz
dGVkTm9kZUluZm9ybWF0CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudGl0bGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5h
Y2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZXByZXNlbnRpbmdQYWdlVXJsKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVz
dWx0LmF1dG9maWxsRmllbGROYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaAppbmRleCBjNjcxOTM3
NTllZDM5NDRlY2JkODJhMzhiZmM5NjBiNzdhNjE0YWU0Li44YTEzNDg5NGVhMDU1YzNlM2YwMGNh
NTJkODc5MDI5NTNkYTczYTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0F1
dG9jYXBpdGFsaXplVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dG9maWxsLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMDks
NiArMTEwLDggQEAgc3RydWN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uIHsKICAgICBTdHJpbmcg
dmFsdWU7CiAgICAgZG91YmxlIHZhbHVlQXNOdW1iZXIgeyAwIH07CiAgICAgU3RyaW5nIHRpdGxl
OworICAgIGJvb2wgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzOworICAgIFdlYkNv
cmU6OlVSTCByZXByZXNlbnRpbmdQYWdlVXJsOwogICAgIFdlYkNvcmU6OkF1dG9maWxsRmllbGRO
YW1lIGF1dG9maWxsRmllbGROYW1lIHsgV2ViQ29yZTo6QXV0b2ZpbGxGaWVsZE5hbWU6Ok5vbmUg
fTsKIAogICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBhMmM1OTlhNmFlNmFlMTFhYmRhYzhkMDgyM2Nh
ZWYwZWRlMTJkMmFlLi42ZDk1OGMyNTU0Y2Y4ZTZiZjM4NWNhYmRlOGNmZWZkM2U5M2IzMDRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNzksNiArNzksNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvU2VhcmNoUG9wdXBNZW51Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9U
ZXh0Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CkBAIC01NTgsNiArNTU5LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNTY3JvbGxpbmdP
clpvb21pbmcoYm9vbCk7CiAgICAgdm9pZCByZXF1ZXN0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhT
ZWxlY3Rpb25PZmZzZXQoV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCB1aW50MzJfdCBvZmZzZXQs
IFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4m
LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0UmVjdHNBdFNlbGVj
dGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcmLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+JiYpOworICAgIGJvb2wgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRl
bnRpYWxzKCk7CisgICAgV2ViQ29yZTo6VVJMIHJlcHJlc2VudGluZ1BhZ2VVcmwoKTsKKyAgICB2
b2lkIGF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBjb25z
dCBTdHJpbmcmIHBhc3N3b3JkKTsKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAgICB2
b2lkIGRpZFBlcmZvcm1EYXRhSW50ZXJhY3Rpb25Db250cm9sbGVyT3BlcmF0aW9uKGJvb2wgaGFu
ZGxlZCk7CiAgICAgdm9pZCBkaWRIYW5kbGVTdGFydERhdGFJbnRlcmFjdGlvblJlcXVlc3QoYm9v
bCBzdGFydGVkKTsKQEAgLTE5ODcsNiArMTk5MSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hh
c0RlZmVycmVkU3RhcnRBc3Npc3RpbmdOb2RlIHsgZmFsc2UgfTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Tm9kZUFzc2lzdGFuY2VBcmd1bWVudHM+IG1fZGVmZXJyZWROb2RlQXNzaXN0YW5jZUFyZ3Vt
ZW50czsKICAgICBib29sIG1fZm9yY2VBbHdheXNVc2VyU2NhbGFibGUgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgeyBmYWxzZSB9OworICAg
IFdlYkNvcmU6OlVSTCBtX3JlcHJlc2VudGluZ1BhZ2VVcmw7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShQT0lOVEVSX0xPQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3Lm1tCmluZGV4IGQ2MWNlZGZjMTRlMjZlYzQ4M2UwZTkwYzE4NjI3ZjIzNDFlOTUwYzMuLjRm
NjY5ZDhjNzdiYTg5MzFmNWFmOTcyNjRiYjhjZjdmMDJkZDQwYTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC0yNTgsNiArMjU4LDE2IEBAIC0g
KFdlYlBhZ2VQcm94eSopcGFnZQogICAgIHJldHVybiBfcGFnZS5nZXQoKTsKIH0KIAorLSAoQk9P
TClhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMKK3sKKyAgICByZXR1cm4gX3BhZ2Ut
PmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscygpOworfQorCistIChOU1VSTCAqKXJl
cHJlc2VudGluZ1BhZ2VVcmwKK3sKKyAgICByZXR1cm4gX3BhZ2UtPnJlcHJlc2VudGluZ1BhZ2VV
cmwoKTsKK30KKwogLSAodm9pZCl3aWxsTW92ZVRvV2luZG93OihVSVdpbmRvdyAqKW5ld1dpbmRv
dwogewogICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpkZWZhdWx0Q2VudGVyID0gW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggMGY5ZDIxYzE3
ODE2N2E2NmNlZWI1MDA4OTZjMDY1OTQ2OTU5MTcyMS4uNzhhZWVjYjg0YzRjZjI3ZTE5NjgyNzA1
ZGZiMDE5ZDZmMzcyOGJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0yOTc5LDYgKzI5NzksMTEgQEAg
LSAodm9pZCllbmRTZWxlY3Rpb25DaGFuZ2UKICAgICAKIC0gKHZvaWQpaW5zZXJ0VGV4dFN1Z2dl
c3Rpb246KFVJVGV4dFN1Z2dlc3Rpb24gKil0ZXh0U3VnZ2VzdGlvbgogeworICAgIC8vIEZJWE1F
OiBSZXBsYWNlIE5TQ2xhc3NGcm9tU3RyaW5nIHdpdGggYWN0dWFsIGNsYXNzIGFzIHNvb24gYXMg
VUlLaXQgc3VibWl0dGVkIHRoZSBuZXcgY2xhc3MgaW50byB0aGUgaU9TIFNESy4KKyAgICBpZiAo
W3RleHRTdWdnZXN0aW9uIGlzS2luZE9mQ2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJVSUtleWJv
YXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24iKV0pIHsKKyAgICAgICAgX3BhZ2UtPmF1dG9m
aWxsTG9naW5DcmVkZW50aWFscyhbKFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlv
biAqKXRleHRTdWdnZXN0aW9uIHVzZXJuYW1lXSwgWyhVSUtleWJvYXJkTG9naW5DcmVkZW50aWFs
c1N1Z2dlc3Rpb24gKil0ZXh0U3VnZ2VzdGlvbiBwYXNzd29yZF0pOworICAgICAgICByZXR1cm47
CisgICAgfQogICAgIGlkIDxfV0tJbnB1dERlbGVnYXRlPiBpbnB1dERlbGVnYXRlID0gW193ZWJW
aWV3IF9pbnB1dERlbGVnYXRlXTsKICAgICBpZiAoW2lucHV0RGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzppbnNlcnRUZXh0U3VnZ2VzdGlvbjppbklucHV0U2Vz
c2lvbjopXSkKICAgICAgICAgW2lucHV0RGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgaW5zZXJ0
VGV4dFN1Z2dlc3Rpb246dGV4dFN1Z2dlc3Rpb24gaW5JbnB1dFNlc3Npb246X2Zvcm1JbnB1dFNl
c3Npb24uZ2V0KCldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJv
eHlJT1MubW0KaW5kZXggNDcyOGUwZGZmZTEwYzVmZjdjNzA3ZTA0YTgzMTgwNGFmYmJlMmQwNS4u
MzRiMmZjYmVjN2JjZThiZjI0ODJiODJkNWE4MWE4ZDBmY2Y5Zjk4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBAIC04OTEsNiArODkxLDgg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZEdldFRhcEhpZ2hsaWdodEdlb21ldHJpZXModWludDY0
X3QgcmVxdWVzdElELCBjb25zdCBXZWJDb3IKIAogdm9pZCBXZWJQYWdlUHJveHk6OnN0YXJ0QXNz
aXN0aW5nTm9kZShjb25zdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYgaW5mb3JtYXRpb24sIGJv
b2wgdXNlcklzSW50ZXJhY3RpbmcsIGJvb2wgYmx1clByZXZpb3VzTm9kZSwgY29uc3QgVXNlckRh
dGEmIHVzZXJEYXRhKQogeworICAgIG1fYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxz
ID0gaW5mb3JtYXRpb24uYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzOworICAgIG1f
cmVwcmVzZW50aW5nUGFnZVVybCA9IGluZm9ybWF0aW9uLnJlcHJlc2VudGluZ1BhZ2VVcmw7CiAg
ICAgQVBJOjpPYmplY3QqIHVzZXJEYXRhT2JqZWN0ID0gcHJvY2VzcygpLnRyYW5zZm9ybUhhbmRs
ZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpOwogICAgIGlmIChtX2VkaXRvclN0
YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKSB7CiAgICAgICAgIG1fZGVmZXJyZWROb2RlQXNz
aXN0YW5jZUFyZ3VtZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8Tm9kZUFzc2lzdGFuY2VBcmd1bWVu
dHM+KE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzIHsgaW5mb3JtYXRpb24sIHVzZXJJc0ludGVyYWN0
aW5nLCBibHVyUHJldmlvdXNOb2RlLCB1c2VyRGF0YU9iamVjdCB9KTsKQEAgLTkxMCw2ICs5MTIs
MjEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BBc3Npc3RpbmdOb2RlKCkKICAgICBtX3BhZ2VD
bGllbnQuc3RvcEFzc2lzdGluZ05vZGUoKTsKIH0KIAorYm9vbCBXZWJQYWdlUHJveHk6OmFjY2Vw
dHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscygpCit7CisgICAgcmV0dXJuIG1fYWNjZXB0c0F1
dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzOworfQorCitXZWJDb3JlOjpVUkwgV2ViUGFnZVByb3h5
OjpyZXByZXNlbnRpbmdQYWdlVXJsKCkKK3sKKyAgICByZXR1cm4gbV9yZXByZXNlbnRpbmdQYWdl
VXJsOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNv
bnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCit7CisgICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMo
dXNlcm5hbWUsIHBhc3N3b3JkKSwgbV9wYWdlSUQpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2hvd0luc3BlY3RvckhpZ2hsaWdodChjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmIGhpZ2hsaWdo
dCkKIHsKICAgICBtX3BhZ2VDbGllbnQuc2hvd0luc3BlY3RvckhpZ2hsaWdodChoaWdobGlnaHQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDQzMTU0
YTYxNGI5M2MxMzdkNzI3NDliNDExYmQ1OTcyOWJiN2JiYjcuLjBkYzBiYThmMWMwNDIwZTQxNmIx
NjA0OTZkZjk0NzliYTViOWU2MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKQEAgLTU3NSw2ICs1NzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wSW50
ZXJhY3Rpb24oKTsKICAgICB2b2lkIHBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0
aW9uKTsKICAgICB2b2lkIGZvY3VzTmV4dEFzc2lzdGVkTm9kZShib29sIGlzRm9yd2FyZCwgQ2Fs
bGJhY2tJRCk7CisgICAgdm9pZCBhdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZShjb25zdCBT
dHJpbmcmKTsKICAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIoZG91YmxlKTsK
ICAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVNlbGVjdGVkSW5kZXgodWludDMyX3QgaW5kZXgsIGJv
b2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCBiMDE3NjQ3OTNkMzkzMDFi
YTNjNDJlOWYzZjY5N2IwMTY0YTAxNjY0Li5iY2JiZDA1MjgzYjZjNTkxNGExM2Y1Nzc1ZTE5OGQy
YTUwZWIzOTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTg0LDYgKzg0LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFn
ZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgUGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBh
Y3Rpb24pCiAgICAgRm9jdXNOZXh0QXNzaXN0ZWROb2RlKGJvb2wgaXNGb3J3YXJkLCBXZWJLaXQ6
OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBTZXRBc3Npc3RlZE5vZGVWYWx1ZShTdHJpbmcg
dmFsdWUpCisgICAgQXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKFN0cmluZyB1c2VybmFtZSwgU3Ry
aW5nIHBhc3N3b3JkKQogICAgIFNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIoZG91YmxlIHZh
bHVlKQogICAgIFNldEFzc2lzdGVkTm9kZVNlbGVjdGVkSW5kZXgodWludDMyX3QgaW5kZXgsIGJv
b2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbikKICAgICBBcHBsaWNhdGlvbldpbGxSZXNpZ25BY3Rp
dmUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbQppbmRleCBiY2RiMGJmMDZhMGNhOWMzOWZmNWYzYzViNGE1MjU0NTYxMmJjMDUxLi5i
ODM3YTZmZWFlMjgyNjg3MjQ2MTk4ZTdhNDQ4YTRhMTkzYWMyZWE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtNTMsNiAr
NTMsNyBAQAogI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgogI2ltcG9ydCA8Q29yZVRleHQvQ1RGb250
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0F1dG9maWxsLmg+CisjaW1wb3J0IDxXZWJDb3JlL0F1dG9m
aWxsRWxlbWVudHMuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0RhdGFEZXRlY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQuaD4KQEAgLTI3NDksNiArMjc1MCw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAg
ICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBlbGVtZW50LmZvcm0oKTsKICAgICAgICAgaWYg
KGZvcm0pCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5mb3JtQWN0aW9uID0gZm9ybS0+Z2V0VVJM
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6YWN0aW9uQXR0cik7CisgICAgICAgIGluZm9y
bWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyA9ICEhV2ViQ29yZTo6QXV0
b2ZpbGxFbGVtZW50czo6Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoJmVsZW1lbnQpOwogICAgICAg
ICBpbmZvcm1hdGlvbi5hdXRvY2FwaXRhbGl6ZVR5cGUgPSBlbGVtZW50LmF1dG9jYXBpdGFsaXpl
VHlwZSgpOwogICAgICAgICBpbmZvcm1hdGlvbi5pc0F1dG9jb3JyZWN0ID0gZWxlbWVudC5zaG91
bGRBdXRvY29ycmVjdCgpOwogICAgICAgICBpZiAoZWxlbWVudC5pc1Bhc3N3b3JkRmllbGQoKSkK
QEAgLTI4MDYsNiArMjgwOCwxNSBAQCB2b2lkIFdlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9y
bWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbikKICAgICB9CiB9CiAK
K3ZvaWQgV2ViUGFnZTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYgdXNl
cm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCit7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG1fYXNzaXN0ZWROb2RlLmdldCgpKSkgeworICAgICAgICBSZWZQdHI8RWxlbWVudD4g
YXNzaXN0ZW5kRWxlbWVudCA9ICZkb3duY2FzdDxFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpOwor
ICAgICAgICBzdGQ6Om9wdGlvbmFsPEF1dG9maWxsRWxlbWVudHM+IGF1dG9maWxsRWxlbWVudHMg
PSBBdXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyhhc3Npc3RlbmRFbGVt
ZW50KTsKKyAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy0+YXV0b2ZpbGwodXNlcm5hbWUsIHBhc3N3
b3JkKTsKKyAgICB9Cit9CisKIHZvaWQgV2ViUGFnZTo6c2V0Vmlld3BvcnRDb25maWd1cmF0aW9u
TWluaW11bUxheW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlmIChtX3Zp
ZXdwb3J0Q29uZmlndXJhdGlvbi5zZXRNaW5pbXVtTGF5b3V0U2l6ZShzaXplKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50LmggYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5oCmluZGV4IGEw
OTIzNzdiMWRlOTE1ZjU2OGE1MzBlOWUzYWVkM2YwYjMzMjlkZmYuLmVjMGU4ODJiYzg5MTk5MTI2
MGRhMmFlMzAyZjhjY2Q2NzllOTA3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaApAQCAtMjQsNiArMjQsOSBAQAogICovCiAKICNp
bXBvcnQgPFdlYktpdExlZ2FjeS9ET01IVE1MRWxlbWVudC5oPgorI2lmIFRBUkdFVF9PU19JUEhP
TkUKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0VHJhaXRzLmg+CisjZW5kaWYKIAogQGNsYXNz
IERPTUZpbGVMaXN0OwogQGNsYXNzIERPTUhUTUxGb3JtRWxlbWVudDsKQEAgLTMxLDcgKzM0LDEx
IEBACiBAY2xhc3MgTlNVUkw7CiAKIFdFQktJVF9DTEFTU19BVkFJTEFCTEVfTUFDKDEwXzQpCisj
aWYgVEFSR0VUX09TX0lQSE9ORQorQGludGVyZmFjZSBET01IVE1MSW5wdXRFbGVtZW50IDogRE9N
SFRNTEVsZW1lbnQ8VUlUZXh0SW5wdXRUcmFpdHM+CisjZWxpZgogQGludGVyZmFjZSBET01IVE1M
SW5wdXRFbGVtZW50IDogRE9NSFRNTEVsZW1lbnQKKyNlbmRpZgogQHByb3BlcnR5IChjb3B5KSBO
U1N0cmluZyAqYWNjZXB0OwogQHByb3BlcnR5IChjb3B5KSBOU1N0cmluZyAqYWx0OwogQHByb3Bl
cnR5IEJPT0wgYXV0b2ZvY3VzIFdFQktJVF9BVkFJTEFCTEVfTUFDKDEwXzYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbQppbmRleCA5
YmM4MDNjNTk1ODUwMWM4NjkwOTQ1MjAzZmJhMmE3MDk4NTc2ZDFhLi4xNDFjN2M4ODQwYTExZmY5
N2Q4MTU3NWZiOTlkYWFkZmQyZTgyYzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbQpAQCAtMzMsNiArMzMsMTggQEAKICNpbXBv
cnQgIkRPTUludGVybmFsLmgiCiAjaW1wb3J0ICJET01Qcml2YXRlLmgiCiAjaW1wb3J0ICJFeGNl
cHRpb25IYW5kbGVycy5oIgorI2lmIF9faGFzX2luY2x1ZGUoPFVJS2l0L1VJS2V5Ym9hcmRMb2dp
bkNyZWRlbnRpYWxzU3VnZ2VzdGlvbi5oPikKKyNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRMb2dp
bkNyZWRlbnRpYWxzU3VnZ2VzdGlvbi5oPgorI2Vsc2UKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElu
cHV0X1ByaXZhdGUuaD4KK0BpbnRlcmZhY2UgVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdn
ZXN0aW9uIDogVUlUZXh0U3VnZ2VzdGlvbgorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWdu
KSBOU1N0cmluZyAqdXNlcm5hbWU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU1N0
cmluZyAqcGFzc3dvcmQ7CisKK0BlbmQKKyNlbmRpZgorI2ltcG9ydCA8V2ViQ29yZS9BdXRvZmls
bEVsZW1lbnRzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZpbGVMaXN0Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0hUTUxFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgpA
QCAtNjY2LDYgKzY3OCwyNyBAQCAtICh2b2lkKXNldFZhbHVlRm9yVXNlcjooTlNTdHJpbmcgKilp
blZhbHVlCiAgICAgSU1QTC0+c2V0VmFsdWVGb3JVc2VyKGluVmFsdWUpOwogfQogCistIChCT09M
KWFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscworeworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gISFXZWJDb3JlOjpBdXRvZmlsbEVs
ZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyhJTVBMKTsKK30KKworLSAoTlNVUkwgKily
ZXByZXNlbnRpbmdQYWdlVXJsCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpzZWxmLm93bmVyRG9jdW1l
bnQuVVJMXTsKK30KKworLSAodm9pZClpbnNlcnRUZXh0U3VnZ2VzdGlvbjooVUlLZXlib2FyZExv
Z2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uICopY3JlZGVudGlhbHNTdWdnZXN0aW9uCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGlmIChpczxXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50PihJTVBMKSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OkF1dG9maWxsRWxlbWVudHM+IGF1dG9maWxsRWxlbWVudHMgPSBXZWJDb3JlOjpBdXRvZmls
bEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyhJTVBMKTsKKyAgICAgICAgYXV0b2Zp
bGxFbGVtZW50cy0+YXV0b2ZpbGwoY3JlZGVudGlhbHNTdWdnZXN0aW9uLnVzZXJuYW1lLCBjcmVk
ZW50aWFsc1N1Z2dlc3Rpb24ucGFzc3dvcmQpOworICAgIH0KK30KKwogQGVuZAogCiBXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50KiBjb3JlKERPTUhUTUxJbnB1dEVsZW1lbnQgKndyYXBwZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321328</attachid>
            <date>2017-09-20 10:19:31 -0700</date>
            <delta_ts>2017-09-21 21:39:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170920101930.patch</filename>
            <type>text/plain</type>
            <size>35991</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2RhODM2YTk0NWZjMTM3
ZDE4YjY2MjU0MTYwYzZmM2I2Y2NiZTRjYi4uZDc1YWQzYzJjYzBjMGNlOTNlZjY1YWRjOWVjNWU0
ZjA2ZWEwMDhjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA5LTE5ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVu
dHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzQXV0b2ZpbGxhYmxlRWxlbWVudCk6
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBvZiB0eXBlIHRleHQgb3IgZW1haWwuCisg
ICAgICAgIChXZWJDb3JlOjpuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCk6IFJldHVybnMgdGhlIG5l
eHQgZm9jdXNhYmxlIGVsZW1lbnQgdGhhdCBpcyBhdXRvZmlsbGFibGUuCisgICAgICAgIChXZWJD
b3JlOjpwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1lbnQpOiBSZXR1cm5zIHRoZSBwcmV2aW91cyBm
b2N1c2FibGUgZWxlbWVudCB0aGF0IGlzIGF1dG9maWxsYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6
OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKTogQ29tcHV0ZXMgdGhl
IGF1dG9maWxsIGVsZW1lbnRzICh1c2VybmFtZSAmIHBhc3N3b3JkKQorICAgICAgICBmb3IgYSBn
aXZlbiBpbnB1dCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50czo6
YXV0b2ZpbGwpOiBGaWxscyB0aGUgY3JlZGVudGlhbHMgaW50byB0aGUgcGFpciBvZiB1c2VybmFt
ZS9wYXNzd29yZCBlbGVtZW50cy4KKyAgICAgICAgKiBlZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1l
bnRzLmg6IEFkZGVkLgorCiAyMDE3LTA5LTIwICBNaWd1ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gQ29tcGxldGVseSBnYXJibGVkIGRpc3BsYXkgaW4gR01h
aWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggMWQ0YzlmZTViYWY0Y2NhNmYyN2E4YWY1YWMzM2JjZjYxMDRjNmUxYy4u
OTM0Zjc1YjY5NTM4YThhMTlhODg1MTY4NjlkNmY3NTljN2Y1NjRkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxNy0wOS0xOSAgRnJlZGVyaWsgUmllZGVsICA8cmllZGVsQGFwcGxlLmNv
bT4KKworICAgICAgICBFeHBvc2Ugd2F5IHRvIHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3Jt
IGNvbnRyb2xzIGFzIHtMZWdhY3kgV2ViS2l0LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zMzE4MzUwND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAgICAgICAgKiBTaGFy
ZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgRW5jb2RlcyBhZGRpdGlv
bmFsIG5vZGUgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBpZiB0aGUgbm9kZSBpcyBwYXJ0IG9mIGEg
bG9naW4gc2NyZWVuLgorICAgICAgICAoV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6
ZGVjb2RlKToKKyAgICAgICAgRGVjb2RlcyB0aGUgYWRkaXRpb25hbCBhc3Npc3RlZCBub2RlIGlu
Zm9ybWF0aW9uLgorICAgICAgICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXcubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgYWNjZXB0c0F1
dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzXSk6CisgICAgICAgIERldGVybWluZXMgaWYgdGhlIFdL
Q29udGVudFZpZXcgc2hvd3MgYSBsb2dpbiBzY3JlZW4uCisgICAgICAgICgtW1dLQ29udGVudFZp
ZXcgcmVwcmVzZW50aW5nUGFnZVVybF0pOgorICAgICAgICBSZXR1cm5zIHRoZSBVUkwgb2YgdGhl
IGN1cnJlbnRseSBkaXNwbGF5ZWQgd2ViIHBhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaW5z
ZXJ0VGV4dFN1Z2dlc3Rpb246XSk6CisgICAgICAgIEluc2VydHMgdGhlIGxvZ2luIGNyZWRlbnRp
YWxzIGludG8gdGhlIFdlYiBWaWV3LgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0YXJ0QXNzaXN0aW5n
Tm9kZSk6CisgICAgICAgIFRyYW5zZmVyIHRoZSBhZGRpdGlvbmFsIGFzc2lzdGVkbm9kZSBpbmZv
cm1hdGlvbiAoYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIGFuZCByZXByZXNlbnRp
bmdQYWdlVXJsKS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphY2NlcHRzQXV0b2Zp
bGxlZExvZ2luQ3JlZGVudGlhbHMpOgorICAgICAgICBSZXR1cm5zIGlmIHRoZSBXZWIgVmlldyBz
aG93cyBhIGxvZ2luIHNjcmVlbi4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXBy
ZXNlbnRpbmdQYWdlVXJsKToKKyAgICAgICAgUmV0dXJucyB0aGUgV2ViIFZpZXcncyBVUkwuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKToK
KyAgICAgICAgSW5zZXJ0IHRoZSBjcmVkZW50aWFscyBpbnRvIHRoZSBXZWIgVmlldy4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24pOiBUcmFuc3BvcnRzIHRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgY3Vy
cmVudGx5CisgICAgICAgIGhpZ2hsaWdodGVkIG5vZGUgYWNjZXB0cyBhdXRvZmlsbGVkIGxvZ2lu
IGNyZWRlbnRpYWxzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphdXRvZmlsbExvZ2luQ3Jl
ZGVudGlhbHMpOiBGaWxscyB0aGUgbG9naW4gY3JlZGVudGlhbHMgaW50byB0aGUKKyAgICAgICAg
V2ViUGFnZS4KKwogMjAxNy0wOS0yMCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlZCBudWxsYWJsZSBmcm9tIFVJRHJhZ0l0ZW0gcHJvcGVydHkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBlOGE5Y2Q5MWQxNTFkNDA0Yzc5OTM4MTMz
ZDRmMDIzZmE2YmQ3Y2Q5Li4wMDI2NDM3ZDIwN2M3ZWJhN2VlNjNiZjI2OGMwM2E3OTcyZDc1NDE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMDkt
MTkgIEZyZWRlcmlrIFJpZWRlbCAgPHJpZWRlbEBhcHBsZS5jb20+CisKKyAgICAgICAgRXhwb3Nl
IHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZpZWQgZm9ybSBjb250cm9scyBhcyB7TGVnYWN5
IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NDM5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxODM1MDQ+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBET00vRE9N
SFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIERPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1t
OgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5D
cmVkZW50aWFsc10pOgorICAgICAgICBEZXRlcm1pbmVzIGlmIHRoaXMgSFRNTElucHV0RWxlbWVu
dCBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVt
ZW50IHJlcHJlc2VudGluZ1BhZ2VVcmxdKToKKyAgICAgICAgUmV0dXJucyB0aGUgd2VicGFnZSdz
IFVSTCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgaW4gdGhlIFdlYiBWaWV3LgorICAgICAg
ICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGluc2VydFRleHRTdWdnZXN0aW9uOl0pOgorICAgICAg
ICBJbnNlcnRzIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlIFdlYiBWaWV3LgorCiAyMDE3LTA5
LTIwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogV2ViVmlldyBpbmRpY2F0aW9uIGhpZ2hsaWdodHMgc3RpY2tzIGFyb3VuZCBm
b3IgV2ViS2l0TGVnYWN5IHZpZXdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2NkZDhmYjc3OWI2NTQyZTUyNjQ5Nzc5OGUwODFk
ZWZiMWY4ZjMyMi4uZjM5MGMzZmFjNDU3M2VlOTgzOTY4ZGQyMjAzZDRhN2UwNDUzNmZiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMjI5Niw2ICsyMjk2LDggQEAKIAkJNTE2MkM3RjQxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVt
ZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi87IH07
CiAJCTUxNjJDN0Y1MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjMxMUY3N0VGQjAw
NjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE2NkQzQ0QxRThFRDQ4RjAwQUQ2MkUzIC8qIFN0b3JhZ2VU
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY2
RDNDQzFFOEVENDExMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTY5OUVFMzFGNjA4Q0Q1MDBENTdEMDYg
LyogQXV0b2ZpbGxFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTY5OUVFMTFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50
cy5jcHAgKi87IH07CisJCTUxNjk5RUU0MUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1l
bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY5
OUVFMjFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNkJCNzk0MENFOTFFNjgwMDUx
MkY3OSAvKiBKU1RyZWVXYWxrZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QkI3OTIwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdh
bGtlckN1c3RvbS5jcHAgKi87IH07CiAJCTUxNkM2MjIwMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1l
cGFkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE2QzYyMUQxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5jcHAgKi87IH07CiAJ
CTUxNkM2MjIxMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkM2MjFFMTk1MEQ0ODcwMDMzN0U3
NSAvKiBHYW1lcGFkRXZlbnQuaCAqLzsgfTsKQEAgLTEwMTk5LDYgKzEwMjAxLDggQEAKIAkJNTE2
NDVCNTMxQjlGODg5QjAwRjc4OUNFIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NDVCNTQxQjlGODhFODAwRjc4OUNFIC8qIElEQkN1
cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTY2RDNDQzFFOEVENDExMDBBRDYy
RTMgLyogU3RvcmFnZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2OTlFRTExRjYwOENE
NTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXV0
b2ZpbGxFbGVtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjk5RUUy
MUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1
dG9maWxsRWxlbWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2QkI3OTIw
Q0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RyZWVXYWxrZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTZDNjIxRDE5NTBENDg3MDAzMzdFNzUgLyogR2FtZXBhZEV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdhbWVwYWRFdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNkM2MjFFMTk1MEQ0ODcwMDMz
N0U3NSAvKiBHYW1lcGFkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R2FtZXBhZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODM5Nyw2ICsx
ODQwMSw4IEBACiAJCTQ0MzI5MkMxMEVCQTZENzMwMEU2MjAxNiAvKiBpb3MgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUxNjk5RUUxMUY2MDhDRDUwMEQ1
N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNwcCAqLywKKwkJCQk1MTY5OUVFMjFGNjA4Q0Q1MDBE
NTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5oICovLAogCQkJCUQwQkQ0RjVBMTQwODg1MEYwMDY4
MzlCNiAvKiBEaWN0YXRpb25Db21tYW5kSU9TLmNwcCAqLywKIAkJCQlEMEJENEY1QjE0MDg4NTBG
MDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5oICovLAogCQkJCUZFRDEzRDM5MENFQTkz
NDYwMEQ4OTQ2NiAvKiBFZGl0b3JJT1MubW0gKi8sCkBAIC0yNzE3Myw2ICsyNzE3OSw3IEBACiAJ
CQkJQTVBN0FBNDMxMzJGMEVDQzAwRDNBM0MyIC8qIEF1dG9jYXBpdGFsaXplVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdDMTg0M0ZFMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0MxRTk3MjgxQTlGOTgzNDAwN0JGMEZCIC8qIEF1dG9GaWxsQnV0
dG9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE2OTlFRTQxRjYwOENENTAwRDU3RDA2
IC8qIEF1dG9maWxsRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUM5RDQ2NzA1MUU2MEM0
NjUwMDgxOTVGQiAvKiBBdXRvcGxheUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NTgzMEQ0
RTE2NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4Q0ZGMDRFMEExNTRGMDkwMDBBNDIzNCAvKiBBdXRvVGFibGVMYXlvdXQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjc4NDIsNiArMjc4NDksNyBAQAogCQkJCTg0NzMwRDg5MTI0OEYwQjMw
MEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMjlD
OTk3MUY1OUI5NjMwMDlENzQwMyAvKiBGZXRjaEJvZHlTb3VyY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxRDEyOURCMUYzRDE0MzgwMEQxNUU0NyAvKiBGZXRjaEhlYWRlcnMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0
aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUFENzUzQTFDRUY2QkQxMDBBMzE0ODYgLyogRmV0
Y2hPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0UxOTE0RDFGMkE5QUZCMDAyNzJGNzgg
LyogRmV0Y2hSZWZlcnJlclBvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFMTkxNUExRjJB
OUIzNDAwMjcyRjc4IC8qIEZldGNoUmVxdWVzdENhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTI4
ODMyLDcgKzI4ODQwLDYgQEAKIAkJCQkzMTZEQ0IyMDFFNzhDQTU1MDAxQjVGODcgLyogSlNSVENP
ZmZlckFuc3dlck9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OTY5REJBMTdEMTQxNTEw
MDdGRjg0MiAvKiBKU1JUQ1BlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzk2
OURCODE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50LmggaW4g
SGVhZGVycyAqLywKLQkJCQlFMThDMzU0NDFGNzE5NzBDMDBGRjYzMkQgLyogV2ViQXJjaGl2ZVJl
c291cmNlV2ViUmVzb3VyY2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RTJDNDM3NDFC
Q0YwRDc1MDAwMUUyQkUgLyogSlNSVENSdHBQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1RTJDNDM3MjFCQ0YwRDc1MDAwMUUyQkMgLyogSlNSVENSdHBSZWNlaXZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUUyQzQzNzQxQkNGMEQ3NTAwMDFFMkJDIC8qIEpTUlRDUnRwU2VuZGVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMwMzE3LDcgKzMwMzI0LDYgQEAKIAkJCQkwODA2RTU3QTEyODkz
MDQ1MDA3Q0VEMzIgLyogU1ZHTWF0cml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOENBM0Q0NDEy
ODk0QTM4MDBGRkYyNjAgLyogU1ZHTWF0cml4VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0NFNThENUMxREQ3RUM5QzAwMTI4NTUyIC8qIFNWR01hdHJpeFZhbHVlLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMTg1MzY4NDFGNEU0ODE0MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlRnJv
bU5TQXR0cmlidXRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBNEIwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR01ldGFkYXRhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJB
MUYyQjEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTRFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNUGF0aEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzA2NTEsNiArMzA2NTcsOCBAQAogCQkJCUFBQTcyOEY3MTZE
MUQ4QkMwMEQzQkJDNiAvKiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUE0NzhBN0YxNkNENzBDMzAwN0QxQkI0IC8qIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDNFRjQ0ODE5MTc5MTVD
MDAwMzQxODQgLyogV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlFMTg1MzY4NDFGNEU0ODE0MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNl
RnJvbU5TQXR0cmlidXRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTE4QzM1NDQxRjcx
OTcwQzAwRkY2MzJEIC8qIFdlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQ0RFNjY3QTUxRTRCQkYxNTAwRTgxNTRBIC8qIFdlYkF1ZGlvQnVm
ZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFCMkE2MjYxRUYxQkY2RDAwMkI5RDdBIC8q
IFdlYkF1ZGlvU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3RDYzNzQwMUJC
MEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMTMzOSw2ICszMTM0Nyw3IEBACiAJCQkJQTVGNkUxNkIxMzJFRDQ2RTAwOEVE
QUUzIC8qIEF1dG9jYXBpdGFsaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0M0ZEMUM4
QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzFFOTcy
NzFBOUY5ODM0MDA3QkYwRkIgLyogQXV0b0ZpbGxCdXR0b25FbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUxNjk5RUUzMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ1ODMwRDREMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Ny
b2xsQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOENGRjA1MDBBMTU0RjA5MDAw
QTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNERUNBODlB
MUVERjQ0N0QwMERDQjA4QiAvKiBBVkFzc2V0VHJhY2tVdGlsaXRpZXMubW0gaW4gU291cmNlcyAq
LywKQEAgLTMyMDcxLDcgKzMyMDgwLDYgQEAKIAkJCQlFMTJERTcxNzFFNEI3NDlDMDBGOUFDQ0Yg
LyogR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNEMy
NUQ3MUU5RUZFREUwMEJFRTE0MSAvKiBIMjY0VmlkZW9Ub29sQm94RW5jb2Rlci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUY1NUIzREJGMTI1MUYxMkQwMDNFRjI2OSAvKiBIaWRkZW5JbnB1dFR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDczQkRDMDUxRjY4NDM2MTAwRUUzNEVEIC8qIFRyYWNr
UHJpdmF0ZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxOUIxRDU0RjZDMTAwREQ3
QzY4IC8qIEhJREdhbWVwYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxOUQxRDU0RjZD
MTAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Qzk0RDE1MzBDMjc1QzhCMDA2QkM2MTcgLyogSGlzdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTMyNjU2LDcgKzMyNjY0LDYgQEAKIAkJCQlBNjE0OEE3ODEyRTQxRTNCMDA0NEE3ODQgLyogSlNI
VE1MS2V5Z2VuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIyMTBBMUNFNjNC
MDBCNDJCMjUgLyogSlNIVE1MTGFiZWxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
RTJBQjIzMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMZWdlbmRFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUUxOEMzNTQzMUY3MTk3MDEwMEZGNjMyRCAvKiBXZWJBcmNoaXZlUmVzb3Vy
Y2VXZWJSZXNvdXJjZUhhbmRsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIyNTBBMUNF
NjNCMDBCNDJCMjUgLyogSlNIVE1MTElFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
MEU3QjEwMEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxMaW5rRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUUyQUIyNzBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTWFwRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTMyODI0LDcgKzMyODMxLDYgQEAKIAkJCQlBMUNDNTY3ODFG
NDYxNEE1MDBBNDU1NUIgLyogSlNQYXltZW50UmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBMUY2MDA1NzFGNDc2NTA1MDA3N0U4M0YgLyogSlNQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExRjYwMDU5MUY0NzY1MDUwMDc3RTgzRiAvKiBKU1Bh
eW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnRJbml0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxODUz
Njg1MUY1MDkwNjEwMEZFMDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVk
U3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFDQzU2N0ExRjQ2MTRBQTAwQTQ1NTVCIC8q
IEpTUGF5bWVudFJlc3BvbnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExQ0M1NjdDMUY0NjE0
QUYwMEE0NTU1QiAvKiBKU1BheW1lbnRTaGlwcGluZ09wdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBMUNDNTY3RTFGNDYxNEI0MDBBNDU1NUIgLyogSlNQYXltZW50U2hpcHBpbmdUeXBlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMzQzMjksNiArMzQzMzUsNyBAQAogCQkJCTA3MDMzNEQ5MTQ1
QTAwNkYwMDhEOEQ0NSAvKiBUcmFja0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwMzM0
RDMxNDU5RkZBRDAwOEQ4RDQ1IC8qIFRyYWNrRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkU4OEUwQzExNzE1Q0UyNjAwNjU4RDk4IC8qIFRyYWNrTGlzdEJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMDczQkRDMDUxRjY4NDM2MTAwRUUzNEVEIC8qIFRyYWNrUHJpdmF0ZUJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkZBQzMwRkYxODRGQjE0NTAwOEM0RjFFIC8qIFRyYWlsaW5n
T2JqZWN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQ3RUZFQzFCREVGQTUxMDBFOTNFMTAg
LyogVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFOTExQzMw
RUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMzQ0MzEsNiArMzQ0MzgsOCBAQAogCQkJCUFBNDc4QTgwMTZDRDcwQzMwMDdEMUJCNCAv
KiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTJEM0VGNDQ5MTkxNzkxNUMwMDAzNDE4NCAvKiBXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVs
ZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxMjBERTNFRDFDODZDQTNFMDBCNkQ0REQgLyog
V2ViQW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxODUzNjg1MUY1MDkwNjEwMEZF
MDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJRTE4QzM1NDMxRjcxOTcwMTAwRkY2MzJEIC8qIFdlYkFyY2hpdmVSZXNv
dXJjZVdlYlJlc291cmNlSGFuZGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNERTY2N0E0MUU0
QkJGMTUwMEU4MTU0QSAvKiBXZWJBdWRpb0J1ZmZlckxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDdENjM3NDExQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBMjlBMzExQ0JGNzREQTAwOTAxQ0NGIC8qIFdl
YkFWUGxheWVyQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNGRmMDY5MTM0
ZTZlNjNjZGFhZDc1MTgxZmIyZTE1ZmVhMDY1NDc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5jcHAKQEAgLTAsMCArMSwxMjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXV0b2ZpbGxF
bGVtZW50cy5oIgorCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F1dG9m
aWxsYWJsZUVsZW1lbnQoRWxlbWVudCYgbm9kZSkKK3sKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGlucHV0RWxl
bWVudCA9ICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKTsKKyAgICByZXR1cm4gaW5w
dXRFbGVtZW50LT5pc1RleHRGaWVsZCgpIHx8IGlucHV0RWxlbWVudC0+aXNFbWFpbEZpZWxkKCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IG5leHRBdXRvZmls
bGFibGVFbGVtZW50KE5vZGUqIHN0YXJ0Tm9kZSwgRm9jdXNDb250cm9sbGVyJiBmb2N1c0NvbnRy
b2xsZXIpCit7CisgICAgaWYgKCFpczxFbGVtZW50PihzdGFydE5vZGUpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxFbGVtZW50PiBuZXh0RWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KHN0YXJ0Tm9kZSk7CisgICAgZG8geworICAgICAgICBuZXh0RWxlbWVudCA9IGZv
Y3VzQ29udHJvbGxlci5uZXh0Rm9jdXNhYmxlRWxlbWVudCgqbmV4dEVsZW1lbnQuZ2V0KCkpOwor
ICAgIH0gd2hpbGUgKG5leHRFbGVtZW50ICYmICFpc0F1dG9maWxsYWJsZUVsZW1lbnQoKm5leHRF
bGVtZW50LmdldCgpKSk7CisKKyAgICByZXR1cm4gJmRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCpuZXh0RWxlbWVudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPEhUTUxJbnB1dEVsZW1l
bnQ+IHByZXZpb3VzQXV0b2ZpbGxhYmxlRWxlbWVudChOb2RlKiBzdGFydE5vZGUsIEZvY3VzQ29u
dHJvbGxlciYgZm9jdXNDb250cm9sbGVyKQoreworICAgIGlmICghaXM8RWxlbWVudD4oc3RhcnRO
b2RlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gcHJl
dmlvdXNFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oc3RhcnROb2RlKTsKKyAgICBkbyB7Cisg
ICAgICAgIHByZXZpb3VzRWxlbWVudCA9IGZvY3VzQ29udHJvbGxlci5wcmV2aW91c0ZvY3VzYWJs
ZUVsZW1lbnQoKnByZXZpb3VzRWxlbWVudC5nZXQoKSk7CisgICAgfSB3aGlsZSAocHJldmlvdXNF
bGVtZW50ICYmICFpc0F1dG9maWxsYWJsZUVsZW1lbnQoKnByZXZpb3VzRWxlbWVudC5nZXQoKSkp
OworCisgICAgcmV0dXJuICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqcHJldmlvdXNFbGVt
ZW50KTsKK30KKworc3RkOjpvcHRpb25hbDxBdXRvZmlsbEVsZW1lbnRzPiBBdXRvZmlsbEVsZW1l
bnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyhSZWZQdHI8RWxlbWVudD4gc3RhcnQpCit7Cisg
ICAgaWYgKCFzdGFydC0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgRm9jdXNDb250cm9sbGVyJiBmb2N1c0NvbnRyb2xsZXIgPSBzdGFydC0+ZG9j
dW1lbnQoKS5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpOworICAgIEF1dG9maWxsRWxlbWVudHMg
YXV0b2ZpbGxFbGVtZW50czsKKyAgICBpZiAoc3RhcnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4o
KnN0YXJ0KSkgeworICAgICAgICBhdXRvJiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50Pigqc3RhcnQpOworICAgICAgICBpZiAoaW5wdXRFbGVtZW50LmlzUGFzc3dvcmRG
aWVsZCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gcHJldmlvdXNF
bGVtZW50ID0gcHJldmlvdXNBdXRvZmlsbGFibGVFbGVtZW50KCZpbnB1dEVsZW1lbnQsIGZvY3Vz
Q29udHJvbGxlcik7CisgICAgICAgICAgICBpZiAocHJldmlvdXNFbGVtZW50ICYmIGlzPEhUTUxJ
bnB1dEVsZW1lbnQ+KCpwcmV2aW91c0VsZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBy
ZXZpb3VzRWxlbWVudC0+aXNUZXh0RmllbGQoKSkgeworICAgICAgICAgICAgICAgICAgICBhdXRv
ZmlsbEVsZW1lbnRzLm1fcGFzc3dvcmQgPSAmaW5wdXRFbGVtZW50OworICAgICAgICAgICAgICAg
ICAgICBhdXRvZmlsbEVsZW1lbnRzLm1fdXNlcm5hbWUgPSBwcmV2aW91c0VsZW1lbnQ7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhdXRvZmlsbEVsZW1lbnRzOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlZlB0cjxI
VE1MSW5wdXRFbGVtZW50PiBuZXh0RWxlbWVudCA9IG5leHRBdXRvZmlsbGFibGVFbGVtZW50KCZp
bnB1dEVsZW1lbnQsIGZvY3VzQ29udHJvbGxlcik7CisgICAgICAgICAgICBpZiAobmV4dEVsZW1l
bnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oKm5leHRFbGVtZW50KSkgeworICAgICAgICAgICAg
ICAgIGlmIChuZXh0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0b2ZpbGxFbGVtZW50cy5tX3Bhc3N3b3JkID0gbmV4dEVsZW1lbnQ7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG9maWxsRWxlbWVudHMubV91c2VybmFtZSA9ICZpbnB1dEVsZW1lbnQ7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdXRvZmlsbEVsZW1lbnRzOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpczxI
VE1MSW5wdXRFbGVtZW50PihzdGFydC5nZXQoKSkpIHsKKyAgICAgICAgYXV0byYgaW5wdXRFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnN0YXJ0KTsKKyAgICAgICAgaWYgKGlu
cHV0RWxlbWVudC5pc1Bhc3N3b3JkRmllbGQoKSkgeworICAgICAgICAgICAgUmVmUHRyPEhUTUxJ
bnB1dEVsZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9IHByZXZpb3VzQXV0b2ZpbGxhYmxlRWxlbWVu
dCgmaW5wdXRFbGVtZW50LCBmb2N1c0NvbnRyb2xsZXIpOworICAgICAgICAgICAgUmVmUHRyPEhU
TUxJbnB1dEVsZW1lbnQ+IG5leHRFbGVtZW50ID0gbmV4dEF1dG9maWxsYWJsZUVsZW1lbnQoJmlu
cHV0RWxlbWVudCwgZm9jdXNDb250cm9sbGVyKTsKKyAgICAgICAgICAgIGlmICghcHJldmlvdXNF
bGVtZW50ICYmICFuZXh0RWxlbWVudCkgeworICAgICAgICAgICAgICAgIGF1dG9maWxsRWxlbWVu
dHMubV9wYXNzd29yZCA9ICZpbnB1dEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGF1
dG9maWxsRWxlbWVudHM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwordm9pZCBBdXRvZmlsbEVsZW1lbnRzOjphdXRvZmlsbChT
dHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkKK3sKKyAgICBpZiAodGhpcy0+bV91c2Vy
bmFtZSkgeworICAgICAgICB0aGlzLT5tX3VzZXJuYW1lLT5zZXRWYWx1ZUZvclVzZXIodXNlcm5h
bWUpOworICAgICAgICB0aGlzLT5tX3VzZXJuYW1lLT5zZXRBdXRvRmlsbGVkKCk7CisgICAgfQor
ICAgIGlmICh0aGlzLT5tX3Bhc3N3b3JkKSB7CisgICAgICAgIHRoaXMtPm1fcGFzc3dvcmQtPnNl
dFZhbHVlRm9yVXNlcihwYXNzd29yZCk7CisgICAgICAgIHRoaXMtPm1fcGFzc3dvcmQtPnNldEF1
dG9GaWxsZWQoKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzY0
NWY5OTFjZDU0NjFlMTVkMzEyYzZhYzkwZjczZWFlZmY5YzY2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5oCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1dG9maWxsRWxlbWVudHMgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEF1dG9maWxsRWxlbWVudHM+IGNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKFJlZlB0
cjxFbGVtZW50Pik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdXRvZmlsbChTdHJpbmcsIFN0
cmluZyk7Citwcml2YXRlOgorICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBtX3VzZXJuYW1l
OworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBtX3Bhc3N3b3JkOworfTsKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lv
cy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgK
aW5kZXggMzQwMjBlMDhlYjA2MTI5NDEwMjdlZjE4YWYyOGEyYjVjMmJkZjk3OS4uOTQ3Y2FhZmIy
MjJiYmFhODk4M2QxYzQ2ZDE2MmRlMjcwNGQ2ODAzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTQzLDYgKzQzLDE3IEBACiAjaW1wb3J0IDxVSUtpdC9V
SUludGVyZmFjZV9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkSW1wbC5oPgog
I2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZEludGwuaD4KKyNpZiBfX2hhc19pbmNsdWRlKDxVSUtp
dC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24uaD4pCisjaW1wb3J0IDxVSUtp
dC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24uaD4KKyNlbHNlCisjaW1wb3J0
IDxVSUtpdC9VSVRleHRJbnB1dF9Qcml2YXRlLmg+CitAaW50ZXJmYWNlIFVJS2V5Ym9hcmRMb2dp
bkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiA6IFVJVGV4dFN1Z2dlc3Rpb24KKworQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnVzZXJuYW1lOworQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgTlNTdHJpbmcgKnBhc3N3b3JkOworCitAZW5kCisjZW5kaWYKICNpbXBvcnQg
PFVJS2l0L1VJS2V5Ym9hcmRfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlMb25nUHJlc3NH
ZXN0dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSVBlcmlwaGVyYWxI
b3N0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bi5jcHAKaW5kZXggNjZjOWYyYTQyMTI1ODE5YzhiNjhlYjY5NmM5MWIzMzAxZDljMGZiMS4uYTNl
ODcwZmUyNzdlMzIzMTdiNmNlNGFlNTU4MWMxZmNkNzViNGJiYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcApAQCAtODYsNiArODYsOCBA
QCB2b2lkIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdmFsdWU7CiAgICAgZW5jb2RlciA8PCB2YWx1ZUFz
TnVtYmVyOwogICAgIGVuY29kZXIgPDwgdGl0bGU7CisgICAgZW5jb2RlciA8PCBhY2NlcHRzQXV0
b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CisgICAgZW5jb2RlciA8PCByZXByZXNlbnRpbmdQYWdl
VXJsOwogICAgIGVuY29kZXIuZW5jb2RlRW51bShhdXRvZmlsbEZpZWxkTmFtZSk7CiB9CiAKQEAg
LTE2MCw2ICsxNjIsMTIgQEAgYm9vbCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZGVjb2RlKElQ
Qzo6RGVjb2RlciYgZGVjb2RlciwgQXNzaXN0ZWROb2RlSW5mb3JtYXQKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC50aXRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFs
cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LnJlcHJlc2VudGluZ1BhZ2VVcmwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQuYXV0b2ZpbGxGaWVsZE5hbWUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lz
dGVkTm9kZUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbi5oCmluZGV4IDY4MjdiZTdkODQ1MjUyYmVjZDQ1NTMyMjRmZjk4NTQzNGI3NzIy
ODEuLjZlMGJiN2Q5MGNjYjI0MTdlODE1NDBlODBmMzVkNmZjMDRmZmZlNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmgKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaApAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b2NhcGl0YWxpemVUeXBlcy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvQXV0b2ZpbGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwOSw2ICsxMTAsOCBAQCBzdHJ1Y3QgQXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24gewogICAgIFN0cmluZyB2YWx1ZTsKICAgICBkb3VibGUgdmFsdWVBc051bWJl
ciB7IDAgfTsKICAgICBTdHJpbmcgdGl0bGU7CisgICAgYm9vbCBhY2NlcHRzQXV0b2ZpbGxlZExv
Z2luQ3JlZGVudGlhbHM7CisgICAgV2ViQ29yZTo6VVJMIHJlcHJlc2VudGluZ1BhZ2VVcmw7CiAg
ICAgV2ViQ29yZTo6QXV0b2ZpbGxGaWVsZE5hbWUgYXV0b2ZpbGxGaWVsZE5hbWUgeyBXZWJDb3Jl
OjpBdXRvZmlsbEZpZWxkTmFtZTo6Tm9uZSB9OwogCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNv
ZGVyJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDFm
NDI0M2VkNmIyNmMyYjg4ZTFmODRlZWQ1MGQ0NjE4NTlhMjk3OTUuLjM3ZmNjMDhkYTE1ZDNlMDgz
MDVkNzUyMWVmY2U1MDViNzY1NzRlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCkBAIC03OSw2ICs3OSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZWFyY2hQb3B1cE1l
bnUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2luZy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVGV4dEdyYW51bGFyaXR5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24uaD4KICNpbmNsdWRlIDxtZW1v
cnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTU1OCw2ICs1NTksOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRJc1Njcm9sbGluZ09yWm9vbWluZyhib29sKTsKICAgICB2b2lkIHJlcXVl
c3RSZWN0c0ZvckdyYW51bGFyaXR5V2l0aFNlbGVjdGlvbk9mZnNldChXZWJDb3JlOjpUZXh0R3Jh
bnVsYXJpdHksIHVpbnQzMl90IG9mZnNldCwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAg
ICB2b2lkIHJlcXVlc3RSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJfdCBvZmZz
ZXQsIGNvbnN0IFN0cmluZyYsIFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6U2VsZWN0aW9uUmVjdD4mLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgYm9vbCBh
Y2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKTsKKyAgICBXZWJDb3JlOjpVUkwgcmVw
cmVzZW50aW5nUGFnZVVybCgpOworICAgIHZvaWQgYXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNv
bnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOwogI2lmIEVOQUJM
RShEQVRBX0lOVEVSQUNUSU9OKQogICAgIHZvaWQgZGlkUGVyZm9ybURhdGFJbnRlcmFjdGlvbkNv
bnRyb2xsZXJPcGVyYXRpb24oYm9vbCBoYW5kbGVkKTsKICAgICB2b2lkIGRpZEhhbmRsZVN0YXJ0
RGF0YUludGVyYWN0aW9uUmVxdWVzdChib29sIHN0YXJ0ZWQpOwpAQCAtMTk4Nyw2ICsxOTkxLDgg
QEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzRGVmZXJyZWRTdGFydEFzc2lzdGluZ05vZGUgeyBm
YWxzZSB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cz4gbV9k
ZWZlcnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzOwogICAgIGJvb2wgbV9mb3JjZUFsd2F5c1Vz
ZXJTY2FsYWJsZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2FjY2VwdHNBdXRvZmlsbGVkTG9naW5D
cmVkZW50aWFscyB7IGZhbHNlIH07CisgICAgV2ViQ29yZTo6VVJMIG1fcmVwcmVzZW50aW5nUGFn
ZVVybDsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KaW5kZXggZDYxY2VkZmMxNGUyNmVjNDgz
ZTBlOTBjMTg2MjdmMjM0MWU5NTBjMy4uNGY2NjlkOGM3N2JhODkzMWY1YWY5NzI2NGJiOGNmN2Yw
MmRkNDBhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcu
bW0KQEAgLTI1OCw2ICsyNTgsMTYgQEAgLSAoV2ViUGFnZVByb3h5KilwYWdlCiAgICAgcmV0dXJu
IF9wYWdlLmdldCgpOwogfQogCistIChCT09MKWFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50
aWFscworeworICAgIHJldHVybiBfcGFnZS0+YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRp
YWxzKCk7Cit9CisKKy0gKE5TVVJMICopcmVwcmVzZW50aW5nUGFnZVVybAoreworICAgIHJldHVy
biBfcGFnZS0+cmVwcmVzZW50aW5nUGFnZVVybCgpOworfQorCiAtICh2b2lkKXdpbGxNb3ZlVG9X
aW5kb3c6KFVJV2luZG93ICopbmV3V2luZG93CiB7CiAgICAgTlNOb3RpZmljYXRpb25DZW50ZXIg
KmRlZmF1bHRDZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbQppbmRleCAwZjlkMjFjMTc4MTY3YTY2Y2VlYjUwMDg5NmMwNjU5NDY5NTkxNzIx
Li43OGFlZWNiODRjNGNmMjdlMTk2ODI3MDVkZmIwMTlkNmYzNzI4YmVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0KQEAgLTI5NzksNiArMjk3OSwxMSBAQCAtICh2b2lkKWVuZFNlbGVjdGlvbkNoYW5nZQogICAg
IAogLSAodm9pZClpbnNlcnRUZXh0U3VnZ2VzdGlvbjooVUlUZXh0U3VnZ2VzdGlvbiAqKXRleHRT
dWdnZXN0aW9uCiB7CisgICAgLy8gRklYTUU6IFJlcGxhY2UgTlNDbGFzc0Zyb21TdHJpbmcgd2l0
aCBhY3R1YWwgY2xhc3MgYXMgc29vbiBhcyBVSUtpdCBzdWJtaXR0ZWQgdGhlIG5ldyBjbGFzcyBp
bnRvIHRoZSBpT1MgU0RLLgorICAgIGlmIChbdGV4dFN1Z2dlc3Rpb24gaXNLaW5kT2ZDbGFzczpO
U0NsYXNzRnJvbVN0cmluZyhAIlVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiIp
XSkgeworICAgICAgICBfcGFnZS0+YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKFsoVUlLZXlib2Fy
ZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uICopdGV4dFN1Z2dlc3Rpb24gdXNlcm5hbWVdLCBb
KFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqKXRleHRTdWdnZXN0aW9uIHBh
c3N3b3JkXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWQgPF9XS0lucHV0RGVsZWdh
dGU+IGlucHV0RGVsZWdhdGUgPSBbX3dlYlZpZXcgX2lucHV0RGVsZWdhdGVdOwogICAgIGlmIChb
aW5wdXREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3Omluc2Vy
dFRleHRTdWdnZXN0aW9uOmluSW5wdXRTZXNzaW9uOildKQogICAgICAgICBbaW5wdXREZWxlZ2F0
ZSBfd2ViVmlldzpfd2ViVmlldyBpbnNlcnRUZXh0U3VnZ2VzdGlvbjp0ZXh0U3VnZ2VzdGlvbiBp
bklucHV0U2Vzc2lvbjpfZm9ybUlucHV0U2Vzc2lvbi5nZXQoKV07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCA0NzI4ZTBkZmZlMTBjNWZm
N2M3MDdlMDRhODMxODA0YWZiYmUyZDA1Li4zNGIyZmNiZWM3YmNlOGJmMjQ4MmI4MmQ1YTgxYThk
MGZjZjlmOTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFn
ZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJv
eHlJT1MubW0KQEAgLTg5MSw2ICs4OTEsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkR2V0VGFw
SGlnaGxpZ2h0R2VvbWV0cmllcyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcgogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRBc3Npc3RpbmdOb2RlKGNvbnN0IEFzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uJiBpbmZvcm1hdGlvbiwgYm9vbCB1c2VySXNJbnRlcmFjdGluZywgYm9vbCBibHVy
UHJldmlvdXNOb2RlLCBjb25zdCBVc2VyRGF0YSYgdXNlckRhdGEpCiB7CisgICAgbV9hY2NlcHRz
QXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgPSBpbmZvcm1hdGlvbi5hY2NlcHRzQXV0b2ZpbGxl
ZExvZ2luQ3JlZGVudGlhbHM7CisgICAgbV9yZXByZXNlbnRpbmdQYWdlVXJsID0gaW5mb3JtYXRp
b24ucmVwcmVzZW50aW5nUGFnZVVybDsKICAgICBBUEk6Ok9iamVjdCogdXNlckRhdGFPYmplY3Qg
PSBwcm9jZXNzKCkudHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSku
Z2V0KCk7CiAgICAgaWYgKG1fZWRpdG9yU3RhdGUuaXNNaXNzaW5nUG9zdExheW91dERhdGEpIHsK
ICAgICAgICAgbV9kZWZlcnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzID0gc3RkOjptYWtlX3Vu
aXF1ZTxOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cz4oTm9kZUFzc2lzdGFuY2VBcmd1bWVudHMgeyBp
bmZvcm1hdGlvbiwgdXNlcklzSW50ZXJhY3RpbmcsIGJsdXJQcmV2aW91c05vZGUsIHVzZXJEYXRh
T2JqZWN0IH0pOwpAQCAtOTEwLDYgKzkxMiwyMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcEFz
c2lzdGluZ05vZGUoKQogICAgIG1fcGFnZUNsaWVudC5zdG9wQXNzaXN0aW5nTm9kZSgpOwogfQog
Citib29sIFdlYlBhZ2VQcm94eTo6YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCkK
K3sKKyAgICByZXR1cm4gbV9hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7Cit9CisK
K1dlYkNvcmU6OlVSTCBXZWJQYWdlUHJveHk6OnJlcHJlc2VudGluZ1BhZ2VVcmwoKQoreworICAg
IHJldHVybiBtX3JlcHJlc2VudGluZ1BhZ2VVcmw7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5Ojph
dXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3Ry
aW5nJiBwYXNzd29yZCkKK3sKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkF1dG9maWxsTG9naW5DcmVkZW50aWFscyh1c2VybmFtZSwgcGFzc3dvcmQpLCBtX3BhZ2VJRCk7
Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93SW5zcGVjdG9ySGlnaGxpZ2h0KGNvbnN0IFdl
YkNvcmU6OkhpZ2hsaWdodCYgaGlnaGxpZ2h0KQogewogICAgIG1fcGFnZUNsaWVudC5zaG93SW5z
cGVjdG9ySGlnaGxpZ2h0KGhpZ2hsaWdodCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKaW5kZXggNDMxNTRhNjE0YjkzYzEzN2Q3Mjc0OWI0MTFiZDU5NzI5YmI3
YmJiNy4uMGRjMGJhOGYxYzA0MjBlNDE2YjE2MDQ5NmRmOTQ3OWJhNWI5ZTYyOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNTc1LDYgKzU3NSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHN0b3BJbnRlcmFjdGlvbigpOwogICAgIHZvaWQgcGVyZm9ybUFj
dGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rpb24pOwogICAgIHZvaWQgZm9jdXNOZXh0QXNzaXN0
ZWROb2RlKGJvb2wgaXNGb3J3YXJkLCBDYWxsYmFja0lEKTsKKyAgICB2b2lkIGF1dG9maWxsTG9n
aW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNl
dEFzc2lzdGVkTm9kZVZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWRO
b2RlVmFsdWVBc051bWJlcihkb3VibGUpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlU2VsZWN0
ZWRJbmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluCmluZGV4IGIwMTc2NDc5M2QzOTMwMWJhM2M0MmU5ZjNmNjk3YjAxNjRhMDE2NjQuLmJjYmJk
MDUyODNiNmM1OTE0YTEzZjU3NzVlMTk4ZDJhNTBlYjM5NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtODQsNiAr
ODQsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBQZXJmb3Jt
QWN0aW9uT25FbGVtZW50KHVpbnQzMl90IGFjdGlvbikKICAgICBGb2N1c05leHRBc3Npc3RlZE5v
ZGUoYm9vbCBpc0ZvcndhcmQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIFNl
dEFzc2lzdGVkTm9kZVZhbHVlKFN0cmluZyB2YWx1ZSkKKyAgICBBdXRvZmlsbExvZ2luQ3JlZGVu
dGlhbHMoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpCiAgICAgU2V0QXNzaXN0ZWRO
b2RlVmFsdWVBc051bWJlcihkb3VibGUgdmFsdWUpCiAgICAgU2V0QXNzaXN0ZWROb2RlU2VsZWN0
ZWRJbmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKQogICAg
IEFwcGxpY2F0aW9uV2lsbFJlc2lnbkFjdGl2ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGJjZGIwYmYwNmEwY2E5YzM5
ZmY1ZjNjNWI0YTUyNTQ1NjEyYmMwNTEuLmI4MzdhNmZlYWUyODI2ODcyNDYxOThlN2E0NDhhNGEx
OTNhYzJlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tCkBAIC01Myw2ICs1Myw3IEBACiAjaW1wb3J0ICJXZWJQcm9jZXNzLmgi
CiAjaW1wb3J0IDxDb3JlVGV4dC9DVEZvbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvQXV0b2ZpbGwu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0b2ZpbGxFbGVtZW50cy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9DaHJvbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRGF0YURldGVjdGlvbi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtMjc0OSw2ICsyNzUwLDcgQEAg
dm9pZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihBc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbiYgaW5mb3JtYXRpb24pCiAgICAgICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IGVs
ZW1lbnQuZm9ybSgpOwogICAgICAgICBpZiAoZm9ybSkKICAgICAgICAgICAgIGluZm9ybWF0aW9u
LmZvcm1BY3Rpb24gPSBmb3JtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjph
Y3Rpb25BdHRyKTsKKyAgICAgICAgaW5mb3JtYXRpb24uYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNy
ZWRlbnRpYWxzID0gISFXZWJDb3JlOjpBdXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxF
bGVtZW50cygmZWxlbWVudCk7CiAgICAgICAgIGluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlw
ZSA9IGVsZW1lbnQuYXV0b2NhcGl0YWxpemVUeXBlKCk7CiAgICAgICAgIGluZm9ybWF0aW9uLmlz
QXV0b2NvcnJlY3QgPSBlbGVtZW50LnNob3VsZEF1dG9jb3JyZWN0KCk7CiAgICAgICAgIGlmIChl
bGVtZW50LmlzUGFzc3dvcmRGaWVsZCgpKQpAQCAtMjgwNiw2ICsyODA4LDE1IEBAIHZvaWQgV2Vi
UGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24m
IGluZm9ybWF0aW9uKQogICAgIH0KIH0KIAordm9pZCBXZWJQYWdlOjphdXRvZmlsbExvZ2luQ3Jl
ZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkK
K3sKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4obV9hc3Npc3RlZE5vZGUuZ2V0KCkpKSB7
CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBhc3Npc3RlbmRFbGVtZW50ID0gJmRvd25jYXN0PEVs
ZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSk7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8QXV0b2ZpbGxF
bGVtZW50cz4gYXV0b2ZpbGxFbGVtZW50cyA9IEF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRv
ZmlsbEVsZW1lbnRzKGFzc2lzdGVuZEVsZW1lbnQpOworICAgICAgICBhdXRvZmlsbEVsZW1lbnRz
LT5hdXRvZmlsbCh1c2VybmFtZSwgcGFzc3dvcmQpOworICAgIH0KK30KKwogdm9pZCBXZWJQYWdl
OjpzZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25NaW5pbXVtTGF5b3V0U2l6ZShjb25zdCBGbG9hdFNp
emUmIHNpemUpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRDb25maWd1cmF0aW9uLnNldE1pbmltdW1M
YXlvdXRTaXplKHNpemUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTUhUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01I
VE1MSW5wdXRFbGVtZW50LmgKaW5kZXggYTA5MjM3N2IxZGU5MTVmNTY4YTUzMGU5ZTNhZWQzZjBi
MzMyOWRmZi4uZWMwZTg4MmJjODkxOTkxMjYwZGEyYWUzMDJmOGNjZDY3OWU5MDczYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5oCkBA
IC0yNCw2ICsyNCw5IEBACiAgKi8KIAogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUhUTUxFbGVt
ZW50Lmg+CisjaWYgVEFSR0VUX09TX0lQSE9ORQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRU
cmFpdHMuaD4KKyNlbmRpZgogCiBAY2xhc3MgRE9NRmlsZUxpc3Q7CiBAY2xhc3MgRE9NSFRNTEZv
cm1FbGVtZW50OwpAQCAtMzEsNyArMzQsMTEgQEAKIEBjbGFzcyBOU1VSTDsKIAogV0VCS0lUX0NM
QVNTX0FWQUlMQUJMRV9NQUMoMTBfNCkKKyNpZiBUQVJHRVRfT1NfSVBIT05FCitAaW50ZXJmYWNl
IERPTUhUTUxJbnB1dEVsZW1lbnQgOiBET01IVE1MRWxlbWVudDxVSVRleHRJbnB1dFRyYWl0cz4K
KyNlbGlmCiBAaW50ZXJmYWNlIERPTUhUTUxJbnB1dEVsZW1lbnQgOiBET01IVE1MRWxlbWVudAor
I2VuZGlmCiBAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICphY2NlcHQ7CiBAcHJvcGVydHkgKGNv
cHkpIE5TU3RyaW5nICphbHQ7CiBAcHJvcGVydHkgQk9PTCBhdXRvZm9jdXMgV0VCS0lUX0FWQUlM
QUJMRV9NQUMoMTBfNik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
RE9NSFRNTElucHV0RWxlbWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01I
VE1MSW5wdXRFbGVtZW50Lm1tCmluZGV4IDliYzgwM2M1OTU4NTAxYzg2OTA5NDUyMDNmYmEyYTcw
OTg1NzZkMWEuLjE0MWM3Yzg4NDBhMTFmZjk3ZDgxNTc1ZmI5OWRhYWRmZDJlODJjMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1t
CkBAIC0zMyw2ICszMywxOCBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRP
TVByaXZhdGUuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisjaWYgX19oYXNfaW5j
bHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+KQorI2lt
cG9ydCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+CisjZWxz
ZQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRfUHJpdmF0ZS5oPgorQGludGVyZmFjZSBVSUtl
eWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gOiBVSVRleHRTdWdnZXN0aW9uCisKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICp1c2VybmFtZTsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICpwYXNzd29yZDsKKworQGVuZAorI2VuZGlm
CisjaW1wb3J0IDxXZWJDb3JlL0F1dG9maWxsRWxlbWVudHMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
RmlsZUxpc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CkBAIC02NjYsNiArNjc4LDI3IEBAIC0gKHZvaWQpc2V0
VmFsdWVGb3JVc2VyOihOU1N0cmluZyAqKWluVmFsdWUKICAgICBJTVBMLT5zZXRWYWx1ZUZvclVz
ZXIoaW5WYWx1ZSk7CiB9CiAKKy0gKEJPT0wpYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRp
YWxzCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJl
dHVybiAhIVdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRz
KElNUEwpOworfQorCistIChOU1VSTCAqKXJlcHJlc2VudGluZ1BhZ2VVcmwKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxX
aXRoU3RyaW5nOnNlbGYub3duZXJEb2N1bWVudC5VUkxdOworfQorCistICh2b2lkKWluc2VydFRl
eHRTdWdnZXN0aW9uOihVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKiljcmVk
ZW50aWFsc1N1Z2dlc3Rpb24KK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgaWYgKGlzPFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+KElNUEwpKSB7Cisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50cz4gYXV0b2ZpbGxF
bGVtZW50cyA9IFdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1l
bnRzKElNUEwpOworICAgICAgICBhdXRvZmlsbEVsZW1lbnRzLT5hdXRvZmlsbChjcmVkZW50aWFs
c1N1Z2dlc3Rpb24udXNlcm5hbWUsIGNyZWRlbnRpYWxzU3VnZ2VzdGlvbi5wYXNzd29yZCk7Cisg
ICAgfQorfQorCiBAZW5kCiAKIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGNvcmUoRE9NSFRN
TElucHV0RWxlbWVudCAqd3JhcHBlcikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321513</attachid>
            <date>2017-09-21 21:39:51 -0700</date>
            <delta_ts>2017-09-21 22:24:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170921213948.patch</filename>
            <type>text/plain</type>
            <size>48791</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyMjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2RhODM2YTk0NWZjMTM3
ZDE4YjY2MjU0MTYwYzZmM2I2Y2NiZTRjYi4uZDc1YWQzYzJjYzBjMGNlOTNlZjY1YWRjOWVjNWU0
ZjA2ZWEwMDhjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA5LTE5ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVu
dHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzQXV0b2ZpbGxhYmxlRWxlbWVudCk6
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBvZiB0eXBlIHRleHQgb3IgZW1haWwuCisg
ICAgICAgIChXZWJDb3JlOjpuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCk6IFJldHVybnMgdGhlIG5l
eHQgZm9jdXNhYmxlIGVsZW1lbnQgdGhhdCBpcyBhdXRvZmlsbGFibGUuCisgICAgICAgIChXZWJD
b3JlOjpwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1lbnQpOiBSZXR1cm5zIHRoZSBwcmV2aW91cyBm
b2N1c2FibGUgZWxlbWVudCB0aGF0IGlzIGF1dG9maWxsYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6
OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKTogQ29tcHV0ZXMgdGhl
IGF1dG9maWxsIGVsZW1lbnRzICh1c2VybmFtZSAmIHBhc3N3b3JkKQorICAgICAgICBmb3IgYSBn
aXZlbiBpbnB1dCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50czo6
YXV0b2ZpbGwpOiBGaWxscyB0aGUgY3JlZGVudGlhbHMgaW50byB0aGUgcGFpciBvZiB1c2VybmFt
ZS9wYXNzd29yZCBlbGVtZW50cy4KKyAgICAgICAgKiBlZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1l
bnRzLmg6IEFkZGVkLgorCiAyMDE3LTA5LTIwICBNaWd1ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gQ29tcGxldGVseSBnYXJibGVkIGRpc3BsYXkgaW4gR01h
aWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggMWQ0YzlmZTViYWY0Y2NhNmYyN2E4YWY1YWMzM2JjZjYxMDRjNmUxYy4u
OTM0Zjc1YjY5NTM4YThhMTlhODg1MTY4NjlkNmY3NTljN2Y1NjRkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxNy0wOS0xOSAgRnJlZGVyaWsgUmllZGVsICA8cmllZGVsQGFwcGxlLmNv
bT4KKworICAgICAgICBFeHBvc2Ugd2F5IHRvIHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3Jt
IGNvbnRyb2xzIGFzIHtMZWdhY3kgV2ViS2l0LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zMzE4MzUwND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAgICAgICAgKiBTaGFy
ZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgRW5jb2RlcyBhZGRpdGlv
bmFsIG5vZGUgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBpZiB0aGUgbm9kZSBpcyBwYXJ0IG9mIGEg
bG9naW4gc2NyZWVuLgorICAgICAgICAoV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6
ZGVjb2RlKToKKyAgICAgICAgRGVjb2RlcyB0aGUgYWRkaXRpb25hbCBhc3Npc3RlZCBub2RlIGlu
Zm9ybWF0aW9uLgorICAgICAgICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXcubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgYWNjZXB0c0F1
dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzXSk6CisgICAgICAgIERldGVybWluZXMgaWYgdGhlIFdL
Q29udGVudFZpZXcgc2hvd3MgYSBsb2dpbiBzY3JlZW4uCisgICAgICAgICgtW1dLQ29udGVudFZp
ZXcgcmVwcmVzZW50aW5nUGFnZVVybF0pOgorICAgICAgICBSZXR1cm5zIHRoZSBVUkwgb2YgdGhl
IGN1cnJlbnRseSBkaXNwbGF5ZWQgd2ViIHBhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaW5z
ZXJ0VGV4dFN1Z2dlc3Rpb246XSk6CisgICAgICAgIEluc2VydHMgdGhlIGxvZ2luIGNyZWRlbnRp
YWxzIGludG8gdGhlIFdlYiBWaWV3LgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0YXJ0QXNzaXN0aW5n
Tm9kZSk6CisgICAgICAgIFRyYW5zZmVyIHRoZSBhZGRpdGlvbmFsIGFzc2lzdGVkbm9kZSBpbmZv
cm1hdGlvbiAoYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIGFuZCByZXByZXNlbnRp
bmdQYWdlVXJsKS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphY2NlcHRzQXV0b2Zp
bGxlZExvZ2luQ3JlZGVudGlhbHMpOgorICAgICAgICBSZXR1cm5zIGlmIHRoZSBXZWIgVmlldyBz
aG93cyBhIGxvZ2luIHNjcmVlbi4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXBy
ZXNlbnRpbmdQYWdlVXJsKToKKyAgICAgICAgUmV0dXJucyB0aGUgV2ViIFZpZXcncyBVUkwuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKToK
KyAgICAgICAgSW5zZXJ0IHRoZSBjcmVkZW50aWFscyBpbnRvIHRoZSBXZWIgVmlldy4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24pOiBUcmFuc3BvcnRzIHRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgY3Vy
cmVudGx5CisgICAgICAgIGhpZ2hsaWdodGVkIG5vZGUgYWNjZXB0cyBhdXRvZmlsbGVkIGxvZ2lu
IGNyZWRlbnRpYWxzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphdXRvZmlsbExvZ2luQ3Jl
ZGVudGlhbHMpOiBGaWxscyB0aGUgbG9naW4gY3JlZGVudGlhbHMgaW50byB0aGUKKyAgICAgICAg
V2ViUGFnZS4KKwogMjAxNy0wOS0yMCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlZCBudWxsYWJsZSBmcm9tIFVJRHJhZ0l0ZW0gcHJvcGVydHkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBlOGE5Y2Q5MWQxNTFkNDA0Yzc5OTM4MTMz
ZDRmMDIzZmE2YmQ3Y2Q5Li4wMDI2NDM3ZDIwN2M3ZWJhN2VlNjNiZjI2OGMwM2E3OTcyZDc1NDE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTctMDkt
MTkgIEZyZWRlcmlrIFJpZWRlbCAgPHJpZWRlbEBhcHBsZS5jb20+CisKKyAgICAgICAgRXhwb3Nl
IHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZpZWQgZm9ybSBjb250cm9scyBhcyB7TGVnYWN5
IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NDM5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxODM1MDQ+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBET00vRE9N
SFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIERPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1t
OgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5D
cmVkZW50aWFsc10pOgorICAgICAgICBEZXRlcm1pbmVzIGlmIHRoaXMgSFRNTElucHV0RWxlbWVu
dCBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVt
ZW50IHJlcHJlc2VudGluZ1BhZ2VVcmxdKToKKyAgICAgICAgUmV0dXJucyB0aGUgd2VicGFnZSdz
IFVSTCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgaW4gdGhlIFdlYiBWaWV3LgorICAgICAg
ICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGluc2VydFRleHRTdWdnZXN0aW9uOl0pOgorICAgICAg
ICBJbnNlcnRzIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlIFdlYiBWaWV3LgorCiAyMDE3LTA5
LTIwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogV2ViVmlldyBpbmRpY2F0aW9uIGhpZ2hsaWdodHMgc3RpY2tzIGFyb3VuZCBm
b3IgV2ViS2l0TGVnYWN5IHZpZXdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2NkZDhmYjc3OWI2NTQyZTUyNjQ5Nzc5OGUwODFk
ZWZiMWY4ZjMyMi4uZjM5MGMzZmFjNDU3M2VlOTgzOTY4ZGQyMjAzZDRhN2UwNDUzNmZiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMjI5Niw2ICsyMjk2LDggQEAKIAkJNTE2MkM3RjQxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVt
ZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi87IH07
CiAJCTUxNjJDN0Y1MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjMxMUY3N0VGQjAw
NjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE2NkQzQ0QxRThFRDQ4RjAwQUQ2MkUzIC8qIFN0b3JhZ2VU
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY2
RDNDQzFFOEVENDExMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTY5OUVFMzFGNjA4Q0Q1MDBENTdEMDYg
LyogQXV0b2ZpbGxFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTY5OUVFMTFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50
cy5jcHAgKi87IH07CisJCTUxNjk5RUU0MUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1l
bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY5
OUVFMjFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNkJCNzk0MENFOTFFNjgwMDUx
MkY3OSAvKiBKU1RyZWVXYWxrZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QkI3OTIwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdh
bGtlckN1c3RvbS5jcHAgKi87IH07CiAJCTUxNkM2MjIwMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1l
cGFkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE2QzYyMUQxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5jcHAgKi87IH07CiAJ
CTUxNkM2MjIxMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkM2MjFFMTk1MEQ0ODcwMDMzN0U3
NSAvKiBHYW1lcGFkRXZlbnQuaCAqLzsgfTsKQEAgLTEwMTk5LDYgKzEwMjAxLDggQEAKIAkJNTE2
NDVCNTMxQjlGODg5QjAwRjc4OUNFIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NDVCNTQxQjlGODhFODAwRjc4OUNFIC8qIElEQkN1
cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTY2RDNDQzFFOEVENDExMDBBRDYy
RTMgLyogU3RvcmFnZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2OTlFRTExRjYwOENE
NTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXV0
b2ZpbGxFbGVtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjk5RUUy
MUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1
dG9maWxsRWxlbWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2QkI3OTIw
Q0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RyZWVXYWxrZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTZDNjIxRDE5NTBENDg3MDAzMzdFNzUgLyogR2FtZXBhZEV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdhbWVwYWRFdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNkM2MjFFMTk1MEQ0ODcwMDMz
N0U3NSAvKiBHYW1lcGFkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R2FtZXBhZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODM5Nyw2ICsx
ODQwMSw4IEBACiAJCTQ0MzI5MkMxMEVCQTZENzMwMEU2MjAxNiAvKiBpb3MgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUxNjk5RUUxMUY2MDhDRDUwMEQ1
N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNwcCAqLywKKwkJCQk1MTY5OUVFMjFGNjA4Q0Q1MDBE
NTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5oICovLAogCQkJCUQwQkQ0RjVBMTQwODg1MEYwMDY4
MzlCNiAvKiBEaWN0YXRpb25Db21tYW5kSU9TLmNwcCAqLywKIAkJCQlEMEJENEY1QjE0MDg4NTBG
MDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5oICovLAogCQkJCUZFRDEzRDM5MENFQTkz
NDYwMEQ4OTQ2NiAvKiBFZGl0b3JJT1MubW0gKi8sCkBAIC0yNzE3Myw2ICsyNzE3OSw3IEBACiAJ
CQkJQTVBN0FBNDMxMzJGMEVDQzAwRDNBM0MyIC8qIEF1dG9jYXBpdGFsaXplVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdDMTg0M0ZFMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0MxRTk3MjgxQTlGOTgzNDAwN0JGMEZCIC8qIEF1dG9GaWxsQnV0
dG9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE2OTlFRTQxRjYwOENENTAwRDU3RDA2
IC8qIEF1dG9maWxsRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUM5RDQ2NzA1MUU2MEM0
NjUwMDgxOTVGQiAvKiBBdXRvcGxheUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NTgzMEQ0
RTE2NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4Q0ZGMDRFMEExNTRGMDkwMDBBNDIzNCAvKiBBdXRvVGFibGVMYXlvdXQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjc4NDIsNiArMjc4NDksNyBAQAogCQkJCTg0NzMwRDg5MTI0OEYwQjMw
MEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMjlD
OTk3MUY1OUI5NjMwMDlENzQwMyAvKiBGZXRjaEJvZHlTb3VyY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxRDEyOURCMUYzRDE0MzgwMEQxNUU0NyAvKiBGZXRjaEhlYWRlcnMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0
aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUFENzUzQTFDRUY2QkQxMDBBMzE0ODYgLyogRmV0
Y2hPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0UxOTE0RDFGMkE5QUZCMDAyNzJGNzgg
LyogRmV0Y2hSZWZlcnJlclBvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFMTkxNUExRjJB
OUIzNDAwMjcyRjc4IC8qIEZldGNoUmVxdWVzdENhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTI4
ODMyLDcgKzI4ODQwLDYgQEAKIAkJCQkzMTZEQ0IyMDFFNzhDQTU1MDAxQjVGODcgLyogSlNSVENP
ZmZlckFuc3dlck9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OTY5REJBMTdEMTQxNTEw
MDdGRjg0MiAvKiBKU1JUQ1BlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzk2
OURCODE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50LmggaW4g
SGVhZGVycyAqLywKLQkJCQlFMThDMzU0NDFGNzE5NzBDMDBGRjYzMkQgLyogV2ViQXJjaGl2ZVJl
c291cmNlV2ViUmVzb3VyY2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RTJDNDM3NDFC
Q0YwRDc1MDAwMUUyQkUgLyogSlNSVENSdHBQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1RTJDNDM3MjFCQ0YwRDc1MDAwMUUyQkMgLyogSlNSVENSdHBSZWNlaXZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUUyQzQzNzQxQkNGMEQ3NTAwMDFFMkJDIC8qIEpTUlRDUnRwU2VuZGVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMwMzE3LDcgKzMwMzI0LDYgQEAKIAkJCQkwODA2RTU3QTEyODkz
MDQ1MDA3Q0VEMzIgLyogU1ZHTWF0cml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOENBM0Q0NDEy
ODk0QTM4MDBGRkYyNjAgLyogU1ZHTWF0cml4VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0NFNThENUMxREQ3RUM5QzAwMTI4NTUyIC8qIFNWR01hdHJpeFZhbHVlLmggaW4gSGVhZGVycyAq
LywKLQkJCQlFMTg1MzY4NDFGNEU0ODE0MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlRnJv
bU5TQXR0cmlidXRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBNEIwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR01ldGFkYXRhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJB
MUYyQjEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTRFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNUGF0aEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzA2NTEsNiArMzA2NTcsOCBAQAogCQkJCUFBQTcyOEY3MTZE
MUQ4QkMwMEQzQkJDNiAvKiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUE0NzhBN0YxNkNENzBDMzAwN0QxQkI0IC8qIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDNFRjQ0ODE5MTc5MTVD
MDAwMzQxODQgLyogV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlFMTg1MzY4NDFGNEU0ODE0MDBGRTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNl
RnJvbU5TQXR0cmlidXRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTE4QzM1NDQxRjcx
OTcwQzAwRkY2MzJEIC8qIFdlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQ0RFNjY3QTUxRTRCQkYxNTAwRTgxNTRBIC8qIFdlYkF1ZGlvQnVm
ZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFCMkE2MjYxRUYxQkY2RDAwMkI5RDdBIC8q
IFdlYkF1ZGlvU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3RDYzNzQwMUJC
MEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMTMzOSw2ICszMTM0Nyw3IEBACiAJCQkJQTVGNkUxNkIxMzJFRDQ2RTAwOEVE
QUUzIC8qIEF1dG9jYXBpdGFsaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0M0ZEMUM4
QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzFFOTcy
NzFBOUY5ODM0MDA3QkYwRkIgLyogQXV0b0ZpbGxCdXR0b25FbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUxNjk5RUUzMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ1ODMwRDREMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Ny
b2xsQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOENGRjA1MDBBMTU0RjA5MDAw
QTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNERUNBODlB
MUVERjQ0N0QwMERDQjA4QiAvKiBBVkFzc2V0VHJhY2tVdGlsaXRpZXMubW0gaW4gU291cmNlcyAq
LywKQEAgLTMyMDcxLDcgKzMyMDgwLDYgQEAKIAkJCQlFMTJERTcxNzFFNEI3NDlDMDBGOUFDQ0Yg
LyogR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNEMy
NUQ3MUU5RUZFREUwMEJFRTE0MSAvKiBIMjY0VmlkZW9Ub29sQm94RW5jb2Rlci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUY1NUIzREJGMTI1MUYxMkQwMDNFRjI2OSAvKiBIaWRkZW5JbnB1dFR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDczQkRDMDUxRjY4NDM2MTAwRUUzNEVEIC8qIFRyYWNr
UHJpdmF0ZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxOUIxRDU0RjZDMTAwREQ3
QzY4IC8qIEhJREdhbWVwYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxOUQxRDU0RjZD
MTAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Qzk0RDE1MzBDMjc1QzhCMDA2QkM2MTcgLyogSGlzdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTMyNjU2LDcgKzMyNjY0LDYgQEAKIAkJCQlBNjE0OEE3ODEyRTQxRTNCMDA0NEE3ODQgLyogSlNI
VE1MS2V5Z2VuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIyMTBBMUNFNjNC
MDBCNDJCMjUgLyogSlNIVE1MTGFiZWxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
RTJBQjIzMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMZWdlbmRFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUUxOEMzNTQzMUY3MTk3MDEwMEZGNjMyRCAvKiBXZWJBcmNoaXZlUmVzb3Vy
Y2VXZWJSZXNvdXJjZUhhbmRsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIyNTBBMUNF
NjNCMDBCNDJCMjUgLyogSlNIVE1MTElFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
MEU3QjEwMEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxMaW5rRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUUyQUIyNzBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTWFwRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTMyODI0LDcgKzMyODMxLDYgQEAKIAkJCQlBMUNDNTY3ODFG
NDYxNEE1MDBBNDU1NUIgLyogSlNQYXltZW50UmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBMUY2MDA1NzFGNDc2NTA1MDA3N0U4M0YgLyogSlNQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExRjYwMDU5MUY0NzY1MDUwMDc3RTgzRiAvKiBKU1Bh
eW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnRJbml0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxODUz
Njg1MUY1MDkwNjEwMEZFMDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVk
U3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFDQzU2N0ExRjQ2MTRBQTAwQTQ1NTVCIC8q
IEpTUGF5bWVudFJlc3BvbnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExQ0M1NjdDMUY0NjE0
QUYwMEE0NTU1QiAvKiBKU1BheW1lbnRTaGlwcGluZ09wdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBMUNDNTY3RTFGNDYxNEI0MDBBNDU1NUIgLyogSlNQYXltZW50U2hpcHBpbmdUeXBlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMzQzMjksNiArMzQzMzUsNyBAQAogCQkJCTA3MDMzNEQ5MTQ1
QTAwNkYwMDhEOEQ0NSAvKiBUcmFja0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwMzM0
RDMxNDU5RkZBRDAwOEQ4RDQ1IC8qIFRyYWNrRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkU4OEUwQzExNzE1Q0UyNjAwNjU4RDk4IC8qIFRyYWNrTGlzdEJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMDczQkRDMDUxRjY4NDM2MTAwRUUzNEVEIC8qIFRyYWNrUHJpdmF0ZUJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkZBQzMwRkYxODRGQjE0NTAwOEM0RjFFIC8qIFRyYWlsaW5n
T2JqZWN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQ3RUZFQzFCREVGQTUxMDBFOTNFMTAg
LyogVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFOTExQzMw
RUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMzQ0MzEsNiArMzQ0MzgsOCBAQAogCQkJCUFBNDc4QTgwMTZDRDcwQzMwMDdEMUJCNCAv
KiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTJEM0VGNDQ5MTkxNzkxNUMwMDAzNDE4NCAvKiBXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVs
ZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxMjBERTNFRDFDODZDQTNFMDBCNkQ0REQgLyog
V2ViQW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxODUzNjg1MUY1MDkwNjEwMEZF
MDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJRTE4QzM1NDMxRjcxOTcwMTAwRkY2MzJEIC8qIFdlYkFyY2hpdmVSZXNv
dXJjZVdlYlJlc291cmNlSGFuZGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNERTY2N0E0MUU0
QkJGMTUwMEU4MTU0QSAvKiBXZWJBdWRpb0J1ZmZlckxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDdENjM3NDExQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBMjlBMzExQ0JGNzREQTAwOTAxQ0NGIC8qIFdl
YkFWUGxheWVyQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODI0YTlmMzhk
MmZjN2Q2NmU0MzI1ODMyZTcxMDhjZjMwODgxZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5jcHAKQEAgLTAsMCArMSwxNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXV0b2ZpbGxF
bGVtZW50cy5oIgorCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F1dG9m
aWxsYWJsZUVsZW1lbnQoRWxlbWVudCYgbm9kZSkKK3sKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGlucHV0RWxl
bWVudCA9ICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKTsKKyAgICByZXR1cm4gaW5w
dXRFbGVtZW50LT5pc1RleHRGaWVsZCgpIHx8IGlucHV0RWxlbWVudC0+aXNFbWFpbEZpZWxkKCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IG5leHRBdXRvZmls
bGFibGVFbGVtZW50KE5vZGUqIHN0YXJ0Tm9kZSwgRm9jdXNDb250cm9sbGVyJiBmb2N1c0NvbnRy
b2xsZXIpCit7CisgICAgaWYgKCFpczxFbGVtZW50PihzdGFydE5vZGUpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxFbGVtZW50PiBuZXh0RWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KHN0YXJ0Tm9kZSk7CisgICAgZG8geworICAgICAgICBuZXh0RWxlbWVudCA9IGZv
Y3VzQ29udHJvbGxlci5uZXh0Rm9jdXNhYmxlRWxlbWVudCgqbmV4dEVsZW1lbnQuZ2V0KCkpOwor
ICAgIH0gd2hpbGUgKG5leHRFbGVtZW50ICYmICFpc0F1dG9maWxsYWJsZUVsZW1lbnQoKm5leHRF
bGVtZW50LmdldCgpKSk7CisKKyAgICBpZiAoIW5leHRFbGVtZW50KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiAmZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5leHRF
bGVtZW50KTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gcHJl
dmlvdXNBdXRvZmlsbGFibGVFbGVtZW50KE5vZGUqIHN0YXJ0Tm9kZSwgRm9jdXNDb250cm9sbGVy
JiBmb2N1c0NvbnRyb2xsZXIpCit7CisgICAgaWYgKCFpczxFbGVtZW50PihzdGFydE5vZGUpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxFbGVtZW50PiBwcmV2aW91c0Vs
ZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihzdGFydE5vZGUpOworICAgIGRvIHsKKyAgICAgICAg
cHJldmlvdXNFbGVtZW50ID0gZm9jdXNDb250cm9sbGVyLnByZXZpb3VzRm9jdXNhYmxlRWxlbWVu
dCgqcHJldmlvdXNFbGVtZW50LmdldCgpKTsKKyAgICB9IHdoaWxlIChwcmV2aW91c0VsZW1lbnQg
JiYgIWlzQXV0b2ZpbGxhYmxlRWxlbWVudCgqcHJldmlvdXNFbGVtZW50LmdldCgpKSk7CisKKyAg
ICBpZiAoIXByZXZpb3VzRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisg
ICAgcmV0dXJuICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqcHJldmlvdXNFbGVtZW50KTsK
K30KKworc3RkOjpvcHRpb25hbDxBdXRvZmlsbEVsZW1lbnRzPiBBdXRvZmlsbEVsZW1lbnRzOjpj
b21wdXRlQXV0b2ZpbGxFbGVtZW50cyhSZWZQdHI8RWxlbWVudD4gc3RhcnQpCit7CisgICAgaWYg
KCFzdGFydC0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgRm9jdXNDb250cm9sbGVyJiBmb2N1c0NvbnRyb2xsZXIgPSBzdGFydC0+ZG9jdW1lbnQo
KS5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpOworICAgIEF1dG9maWxsRWxlbWVudHMgYXV0b2Zp
bGxFbGVtZW50czsKKyAgICBpZiAoc3RhcnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oKnN0YXJ0
KSkgeworICAgICAgICBhdXRvJiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Pigqc3RhcnQpOworICAgICAgICBpZiAoaW5wdXRFbGVtZW50LmlzUGFzc3dvcmRGaWVsZCgp
KSB7CisgICAgICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gcHJldmlvdXNFbGVtZW50
ID0gcHJldmlvdXNBdXRvZmlsbGFibGVFbGVtZW50KCZpbnB1dEVsZW1lbnQsIGZvY3VzQ29udHJv
bGxlcik7CisgICAgICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbmV4dEVsZW1lbnQg
PSBuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCgmaW5wdXRFbGVtZW50LCBmb2N1c0NvbnRyb2xsZXIp
OworICAgICAgICAgICAgYm9vbCBoYXNEdXBsaWNhdGVQYXNzd29yZEVsZW1lbnRzID0gKG5leHRF
bGVtZW50ICYmIG5leHRFbGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKSkgfHwgKHByZXZpb3VzRWxl
bWVudCAmJiBwcmV2aW91c0VsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpKTsKKyAgICAgICAgICAg
IGlmIChoYXNEdXBsaWNhdGVQYXNzd29yZEVsZW1lbnRzKQorICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgICAgIGlmIChwcmV2aW91c0VsZW1lbnQgJiYgaXM8
SFRNTElucHV0RWxlbWVudD4oKnByZXZpb3VzRWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAocHJldmlvdXNFbGVtZW50LT5pc1RleHRGaWVsZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG9maWxsRWxlbWVudHMubV9wYXNzd29yZCA9ICZpbnB1dEVsZW1lbnQ7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG9maWxsRWxlbWVudHMubV91c2VybmFtZSA9IHByZXZpb3VzRWxlbWVudDsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1dG9maWxsRWxlbWVudHM7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUmVm
UHRyPEhUTUxJbnB1dEVsZW1lbnQ+IG5leHRFbGVtZW50ID0gbmV4dEF1dG9maWxsYWJsZUVsZW1l
bnQoJmlucHV0RWxlbWVudCwgZm9jdXNDb250cm9sbGVyKTsKKyAgICAgICAgICAgIGlmIChuZXh0
RWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PigqbmV4dEVsZW1lbnQpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG5leHRFbGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKSkgeworICAgICAgICAg
ICAgICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gZWxlbWVudEFmdGVybmV4dEVsZW1l
bnQgPSBuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudChuZXh0RWxlbWVudC5nZXQoKSwgZm9jdXNDb250
cm9sbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNEdXBsaWNhdGVQYXNzd29yZEVs
ZW1lbnRzID0gZWxlbWVudEFmdGVybmV4dEVsZW1lbnQgJiYgZWxlbWVudEFmdGVybmV4dEVsZW1l
bnQtPmlzUGFzc3dvcmRGaWVsZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRHVwbGlj
YXRlUGFzc3dvcmRFbGVtZW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy5tX3Bhc3N3
b3JkID0gbmV4dEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIGF1dG9maWxsRWxlbWVudHMu
bV91c2VybmFtZSA9ICZpbnB1dEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBh
dXRvZmlsbEVsZW1lbnRzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihzdGFydC5nZXQoKSkp
IHsKKyAgICAgICAgYXV0byYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKnN0YXJ0KTsKKyAgICAgICAgaWYgKGlucHV0RWxlbWVudC5pc1Bhc3N3b3JkRmllbGQoKSkg
eworICAgICAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9
IHByZXZpb3VzQXV0b2ZpbGxhYmxlRWxlbWVudCgmaW5wdXRFbGVtZW50LCBmb2N1c0NvbnRyb2xs
ZXIpOworICAgICAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IG5leHRFbGVtZW50ID0g
bmV4dEF1dG9maWxsYWJsZUVsZW1lbnQoJmlucHV0RWxlbWVudCwgZm9jdXNDb250cm9sbGVyKTsK
KyAgICAgICAgICAgIGlmICghcHJldmlvdXNFbGVtZW50ICYmICFuZXh0RWxlbWVudCkgeworICAg
ICAgICAgICAgICAgIGF1dG9maWxsRWxlbWVudHMubV9wYXNzd29yZCA9ICZpbnB1dEVsZW1lbnQ7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGF1dG9maWxsRWxlbWVudHM7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwordm9pZCBB
dXRvZmlsbEVsZW1lbnRzOjphdXRvZmlsbChTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29y
ZCkKK3sKKyAgICBpZiAodGhpcy0+bV91c2VybmFtZSkgeworICAgICAgICB0aGlzLT5tX3VzZXJu
YW1lLT5zZXRWYWx1ZUZvclVzZXIodXNlcm5hbWUpOworICAgICAgICB0aGlzLT5tX3VzZXJuYW1l
LT5zZXRBdXRvRmlsbGVkKCk7CisgICAgfQorICAgIGlmICh0aGlzLT5tX3Bhc3N3b3JkKSB7Cisg
ICAgICAgIHRoaXMtPm1fcGFzc3dvcmQtPnNldFZhbHVlRm9yVXNlcihwYXNzd29yZCk7CisgICAg
ICAgIHRoaXMtPm1fcGFzc3dvcmQtPnNldEF1dG9GaWxsZWQoKTsKKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0F1dG9maWxsRWxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxs
RWxlbWVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzY0NWY5OTFjZDU0NjFlMTVkMzEyYzZhYzkwZjczZWFl
ZmY5YzY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0
b2ZpbGxFbGVtZW50cy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
SFRNTElucHV0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1dG9m
aWxsRWxlbWVudHMgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEF1dG9maWxsRWxlbWVudHM+IGNv
bXB1dGVBdXRvZmlsbEVsZW1lbnRzKFJlZlB0cjxFbGVtZW50Pik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhdXRvZmlsbChTdHJpbmcsIFN0cmluZyk7Citwcml2YXRlOgorICAgIFJlZlB0cjxI
VE1MSW5wdXRFbGVtZW50PiBtX3VzZXJuYW1lOworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50
PiBtX3Bhc3N3b3JkOworfTsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggMzQwMjBlMDhlYjA2MTI5NDEwMjdlZjE4
YWYyOGEyYjVjMmJkZjk3OS4uOTQ3Y2FhZmIyMjJiYmFhODk4M2QxYzQ2ZDE2MmRlMjcwNGQ2ODAz
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgK
KysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTQzLDYg
KzQzLDE3IEBACiAjaW1wb3J0IDxVSUtpdC9VSUludGVyZmFjZV9Qcml2YXRlLmg+CiAjaW1wb3J0
IDxVSUtpdC9VSUtleWJvYXJkSW1wbC5oPgogI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZEludGwu
aD4KKyNpZiBfX2hhc19pbmNsdWRlKDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1
Z2dlc3Rpb24uaD4pCisjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1
Z2dlc3Rpb24uaD4KKyNlbHNlCisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dF9Qcml2YXRlLmg+
CitAaW50ZXJmYWNlIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiA6IFVJVGV4
dFN1Z2dlc3Rpb24KKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnVz
ZXJuYW1lOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnBhc3N3b3Jk
OworCitAZW5kCisjZW5kaWYKICNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRfUHJpdmF0ZS5oPgog
I2ltcG9ydCA8VUlLaXQvVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+CiAj
aW1wb3J0IDxVSUtpdC9VSVBlcmlwaGVyYWxIb3N0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAKaW5kZXggNjZjOWYyYTQyMTI1ODE5Yzhi
NjhlYjY5NmM5MWIzMzAxZDljMGZiMS4uNDIzNmUwOTA4YmQzM2Y3ODk1N2NiY2E4ZjdjYTBhMjM5
YTU3ZmFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9y
bWF0aW9uLmNwcApAQCAtODYsNiArODYsOCBAQCB2b2lkIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9u
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdmFs
dWU7CiAgICAgZW5jb2RlciA8PCB2YWx1ZUFzTnVtYmVyOwogICAgIGVuY29kZXIgPDwgdGl0bGU7
CisgICAgZW5jb2RlciA8PCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CisgICAg
ZW5jb2RlciA8PCByZXByZXNlbnRpbmdQYWdlVVJMOwogICAgIGVuY29kZXIuZW5jb2RlRW51bShh
dXRvZmlsbEZpZWxkTmFtZSk7CiB9CiAKQEAgLTE2MCw2ICsxNjIsMTIgQEAgYm9vbCBBc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbjo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgQXNzaXN0ZWRO
b2RlSW5mb3JtYXQKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50aXRsZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFjY2Vw
dHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJlcHJlc2VudGluZ1BhZ2VVUkwpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQu
YXV0b2ZpbGxGaWVsZE5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oCmluZGV4IDY4MjdiZTdkODQ1
MjUyYmVjZDQ1NTMyMjRmZjk4NTQzNGI3NzIyODEuLjhkM2NlOWNjNGQ5YzBjODBjNTdhM2I1ZGY3
MGQyNmJlYzA2NzI4MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24uaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b2Nh
cGl0YWxpemVUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b2ZpbGwuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwOSw2ICsx
MTAsOCBAQCBzdHJ1Y3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gewogICAgIFN0cmluZyB2YWx1
ZTsKICAgICBkb3VibGUgdmFsdWVBc051bWJlciB7IDAgfTsKICAgICBTdHJpbmcgdGl0bGU7Cisg
ICAgYm9vbCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CisgICAgV2ViQ29yZTo6
VVJMIHJlcHJlc2VudGluZ1BhZ2VVUkw7CiAgICAgV2ViQ29yZTo6QXV0b2ZpbGxGaWVsZE5hbWUg
YXV0b2ZpbGxGaWVsZE5hbWUgeyBXZWJDb3JlOjpBdXRvZmlsbEZpZWxkTmFtZTo6Tm9uZSB9Owog
CiAgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDFmNDI0M2VkNmIyNmMyYjg4ZTFmODRlZWQ1MGQ0NjE4
NTlhMjk3OTUuLmFjZGI2NDFiYTU4ODIwZWQ0ZWQ1MmNiYjJmMjc5MzFmODg5Y2I0NDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC03OSw2ICs3OSw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9TZWFyY2hQb3B1cE1lbnUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRD
aGVja2luZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEdyYW51bGFyaXR5Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24uaD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
QEAgLTU1OCw2ICs1NTksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1Njcm9sbGluZ09yWm9v
bWluZyhib29sKTsKICAgICB2b2lkIHJlcXVlc3RSZWN0c0ZvckdyYW51bGFyaXR5V2l0aFNlbGVj
dGlvbk9mZnNldChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHksIHVpbnQzMl90IG9mZnNldCwgV1RG
OjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYsIENh
bGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAgICB2b2lkIHJlcXVlc3RSZWN0c0F0U2VsZWN0aW9u
T2Zmc2V0V2l0aFRleHQoaW50MzJfdCBvZmZzZXQsIGNvbnN0IFN0cmluZyYsIFdURjo6RnVuY3Rp
b248dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mLCBDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJik7CisgICAgYm9vbCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlh
bHMoKTsKKyAgICBXZWJDb3JlOjpVUkwgcmVwcmVzZW50aW5nUGFnZVVSTCgpOworICAgIHZvaWQg
YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0
cmluZyYgcGFzc3dvcmQpOwogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQogICAgIHZvaWQg
ZGlkUGVyZm9ybURhdGFJbnRlcmFjdGlvbkNvbnRyb2xsZXJPcGVyYXRpb24oYm9vbCBoYW5kbGVk
KTsKICAgICB2b2lkIGRpZEhhbmRsZVN0YXJ0RGF0YUludGVyYWN0aW9uUmVxdWVzdChib29sIHN0
YXJ0ZWQpOwpAQCAtMTk4Nyw2ICsxOTkxLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzRGVm
ZXJyZWRTdGFydEFzc2lzdGluZ05vZGUgeyBmYWxzZSB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxO
b2RlQXNzaXN0YW5jZUFyZ3VtZW50cz4gbV9kZWZlcnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRz
OwogICAgIGJvb2wgbV9mb3JjZUFsd2F5c1VzZXJTY2FsYWJsZSB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2FjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyB7IGZhbHNlIH07CisgICAgV2Vi
Q29yZTo6VVJMIG1fcmVwcmVzZW50aW5nUGFnZVVSTDsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBP
SU5URVJfTE9DSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcu
bW0KaW5kZXggZDYxY2VkZmMxNGUyNmVjNDgzZTBlOTBjMTg2MjdmMjM0MWU5NTBjMy4uNjg1ZTM5
NDY0NWY3N2I4MDA4ZDc4OGFkOTU1OTJkNjRjYjllYmExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KQEAgLTI1OCw2ICsyNTgsMTYgQEAgLSAoV2Vi
UGFnZVByb3h5KilwYWdlCiAgICAgcmV0dXJuIF9wYWdlLmdldCgpOwogfQogCistIChCT09MKWFj
Y2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscworeworICAgIHJldHVybiBfcGFnZS0+YWNj
ZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCk7Cit9CisKKy0gKE5TVVJMICopcmVwcmVz
ZW50aW5nUGFnZVVSTAoreworICAgIHJldHVybiBfcGFnZS0+cmVwcmVzZW50aW5nUGFnZVVSTCgp
OworfQorCiAtICh2b2lkKXdpbGxNb3ZlVG9XaW5kb3c6KFVJV2luZG93ICopbmV3V2luZG93CiB7
CiAgICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKmRlZmF1bHRDZW50ZXIgPSBbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCAwZjlkMjFjMTc4MTY3
YTY2Y2VlYjUwMDg5NmMwNjU5NDY5NTkxNzIxLi43OGFlZWNiODRjNGNmMjdlMTk2ODI3MDVkZmIw
MTlkNmYzNzI4YmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTI5NzksNiArMjk3OSwxMSBAQCAtICh2
b2lkKWVuZFNlbGVjdGlvbkNoYW5nZQogICAgIAogLSAodm9pZClpbnNlcnRUZXh0U3VnZ2VzdGlv
bjooVUlUZXh0U3VnZ2VzdGlvbiAqKXRleHRTdWdnZXN0aW9uCiB7CisgICAgLy8gRklYTUU6IFJl
cGxhY2UgTlNDbGFzc0Zyb21TdHJpbmcgd2l0aCBhY3R1YWwgY2xhc3MgYXMgc29vbiBhcyBVSUtp
dCBzdWJtaXR0ZWQgdGhlIG5ldyBjbGFzcyBpbnRvIHRoZSBpT1MgU0RLLgorICAgIGlmIChbdGV4
dFN1Z2dlc3Rpb24gaXNLaW5kT2ZDbGFzczpOU0NsYXNzRnJvbVN0cmluZyhAIlVJS2V5Ym9hcmRM
b2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiIpXSkgeworICAgICAgICBfcGFnZS0+YXV0b2ZpbGxM
b2dpbkNyZWRlbnRpYWxzKFsoVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uICop
dGV4dFN1Z2dlc3Rpb24gdXNlcm5hbWVdLCBbKFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3Vn
Z2VzdGlvbiAqKXRleHRTdWdnZXN0aW9uIHBhc3N3b3JkXSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgaWQgPF9XS0lucHV0RGVsZWdhdGU+IGlucHV0RGVsZWdhdGUgPSBbX3dlYlZpZXcg
X2lucHV0RGVsZWdhdGVdOwogICAgIGlmIChbaW5wdXREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF93ZWJWaWV3Omluc2VydFRleHRTdWdnZXN0aW9uOmluSW5wdXRTZXNzaW9u
OildKQogICAgICAgICBbaW5wdXREZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBpbnNlcnRUZXh0
U3VnZ2VzdGlvbjp0ZXh0U3VnZ2VzdGlvbiBpbklucHV0U2Vzc2lvbjpfZm9ybUlucHV0U2Vzc2lv
bi5nZXQoKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFn
ZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQppbmRleCA0NzI4ZTBkZmZlMTBjNWZmN2M3MDdlMDRhODMxODA0YWZiYmUyZDA1Li5kM2U2
N2Q3ZTM1MzkyODE1YTEzNTFhY2IxYzQ2ZDMxNmU0N2JhNWE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTg5MSw2ICs4OTEsOCBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkR2V0VGFwSGlnaGxpZ2h0R2VvbWV0cmllcyh1aW50NjRfdCBy
ZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcgogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRBc3Npc3Rp
bmdOb2RlKGNvbnN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbiwgYm9vbCB1
c2VySXNJbnRlcmFjdGluZywgYm9vbCBibHVyUHJldmlvdXNOb2RlLCBjb25zdCBVc2VyRGF0YSYg
dXNlckRhdGEpCiB7CisgICAgbV9hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgPSBp
bmZvcm1hdGlvbi5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CisgICAgbV9yZXBy
ZXNlbnRpbmdQYWdlVVJMID0gaW5mb3JtYXRpb24ucmVwcmVzZW50aW5nUGFnZVVSTDsKICAgICBB
UEk6Ok9iamVjdCogdXNlckRhdGFPYmplY3QgPSBwcm9jZXNzKCkudHJhbnNmb3JtSGFuZGxlc1Rv
T2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCk7CiAgICAgaWYgKG1fZWRpdG9yU3RhdGUu
aXNNaXNzaW5nUG9zdExheW91dERhdGEpIHsKICAgICAgICAgbV9kZWZlcnJlZE5vZGVBc3Npc3Rh
bmNlQXJndW1lbnRzID0gc3RkOjptYWtlX3VuaXF1ZTxOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cz4o
Tm9kZUFzc2lzdGFuY2VBcmd1bWVudHMgeyBpbmZvcm1hdGlvbiwgdXNlcklzSW50ZXJhY3Rpbmcs
IGJsdXJQcmV2aW91c05vZGUsIHVzZXJEYXRhT2JqZWN0IH0pOwpAQCAtOTEwLDYgKzkxMiwyMSBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcEFzc2lzdGluZ05vZGUoKQogICAgIG1fcGFnZUNsaWVu
dC5zdG9wQXNzaXN0aW5nTm9kZSgpOwogfQogCitib29sIFdlYlBhZ2VQcm94eTo6YWNjZXB0c0F1
dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKCkKK3sKKyAgICByZXR1cm4gbV9hY2NlcHRzQXV0b2Zp
bGxlZExvZ2luQ3JlZGVudGlhbHM7Cit9CisKK1dlYkNvcmU6OlVSTCBXZWJQYWdlUHJveHk6OnJl
cHJlc2VudGluZ1BhZ2VVUkwoKQoreworICAgIHJldHVybiBtX3JlcHJlc2VudGluZ1BhZ2VVUkw7
Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjphdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3Qg
U3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKK3sKKyAgICBtX3Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkF1dG9maWxsTG9naW5DcmVkZW50aWFscyh1c2Vy
bmFtZSwgcGFzc3dvcmQpLCBtX3BhZ2VJRCk7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93
SW5zcGVjdG9ySGlnaGxpZ2h0KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYgaGlnaGxpZ2h0KQog
ewogICAgIG1fcGFnZUNsaWVudC5zaG93SW5zcGVjdG9ySGlnaGxpZ2h0KGhpZ2hsaWdodCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNDMxNTRhNjE0
YjkzYzEzN2Q3Mjc0OWI0MTFiZDU5NzI5YmI3YmJiNy4uMGRjMGJhOGYxYzA0MjBlNDE2YjE2MDQ5
NmRmOTQ3OWJhNWI5ZTYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaApAQCAtNTc1LDYgKzU3NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0b3BJbnRlcmFj
dGlvbigpOwogICAgIHZvaWQgcGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rpb24p
OwogICAgIHZvaWQgZm9jdXNOZXh0QXNzaXN0ZWROb2RlKGJvb2wgaXNGb3J3YXJkLCBDYWxsYmFj
a0lEKTsKKyAgICB2b2lkIGF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVZhbHVlKGNvbnN0IFN0cmlu
ZyYpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFsdWVBc051bWJlcihkb3VibGUpOwogICAg
IHZvaWQgc2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBh
bGxvd011bHRpcGxlU2VsZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IGIwMTc2NDc5M2QzOTMwMWJhM2M0
MmU5ZjNmNjk3YjAxNjRhMDE2NjQuLmJjYmJkMDUyODNiNmM1OTE0YTEzZjU3NzVlMTk4ZDJhNTBl
YjM5NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgpAQCAtODQsNiArODQsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExl
Z2FjeVJlY2VpdmVyIHsKICAgICBQZXJmb3JtQWN0aW9uT25FbGVtZW50KHVpbnQzMl90IGFjdGlv
bikKICAgICBGb2N1c05leHRBc3Npc3RlZE5vZGUoYm9vbCBpc0ZvcndhcmQsIFdlYktpdDo6Q2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQogICAgIFNldEFzc2lzdGVkTm9kZVZhbHVlKFN0cmluZyB2YWx1
ZSkKKyAgICBBdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcg
cGFzc3dvcmQpCiAgICAgU2V0QXNzaXN0ZWROb2RlVmFsdWVBc051bWJlcihkb3VibGUgdmFsdWUp
CiAgICAgU2V0QXNzaXN0ZWROb2RlU2VsZWN0ZWRJbmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBh
bGxvd011bHRpcGxlU2VsZWN0aW9uKQogICAgIEFwcGxpY2F0aW9uV2lsbFJlc2lnbkFjdGl2ZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCmluZGV4IGJjZGIwYmYwNmEwY2E5YzM5ZmY1ZjNjNWI0YTUyNTQ1NjEyYmMwNTEuLjM5ZTc0
MDc3MmMwMTIxOTkxMWMxMzY3NmZmN2YwYWFlMzAyZTBiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC01Myw2ICs1Myw3
IEBACiAjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCiAjaW1wb3J0IDxDb3JlVGV4dC9DVEZvbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvQXV0b2ZpbGwuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXV0b2ZpbGxF
bGVtZW50cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUv
RGF0YURldGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5oPgpAQCAtMjc0OSw2ICsyNzUwLDggQEAgdm9pZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbihBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYgaW5mb3JtYXRpb24pCiAgICAgICAg
IEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IGVsZW1lbnQuZm9ybSgpOwogICAgICAgICBpZiAoZm9y
bSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLmZvcm1BY3Rpb24gPSBmb3JtLT5nZXRVUkxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjphY3Rpb25BdHRyKTsKKyAgICAgICAgaW5mb3JtYXRp
b24uYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzID0gISFXZWJDb3JlOjpBdXRvZmls
bEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cygmZWxlbWVudCk7CisgICAgICAgIGlu
Zm9ybWF0aW9uLnJlcHJlc2VudGluZ1BhZ2VVUkwgPSBlbGVtZW50LmRvY3VtZW50KCkudXJsRm9y
QmluZGluZ3MoKTsKICAgICAgICAgaW5mb3JtYXRpb24uYXV0b2NhcGl0YWxpemVUeXBlID0gZWxl
bWVudC5hdXRvY2FwaXRhbGl6ZVR5cGUoKTsKICAgICAgICAgaW5mb3JtYXRpb24uaXNBdXRvY29y
cmVjdCA9IGVsZW1lbnQuc2hvdWxkQXV0b2NvcnJlY3QoKTsKICAgICAgICAgaWYgKGVsZW1lbnQu
aXNQYXNzd29yZEZpZWxkKCkpCkBAIC0yODA2LDYgKzI4MDksMTUgQEAgdm9pZCBXZWJQYWdlOjpn
ZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYgaW5mb3Jt
YXRpb24pCiAgICAgfQogfQogCit2b2lkIFdlYlBhZ2U6OmF1dG9maWxsTG9naW5DcmVkZW50aWFs
cyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAg
IGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihtX2Fzc2lzdGVkTm9kZS5nZXQoKSkpIHsKKyAgICAg
ICAgUmVmUHRyPEVsZW1lbnQ+IGFzc2lzdGVuZEVsZW1lbnQgPSAmZG93bmNhc3Q8RWxlbWVudD4o
Km1fYXNzaXN0ZWROb2RlKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxBdXRvZmlsbEVsZW1lbnRz
PiBhdXRvZmlsbEVsZW1lbnRzID0gQXV0b2ZpbGxFbGVtZW50czo6Y29tcHV0ZUF1dG9maWxsRWxl
bWVudHMoYXNzaXN0ZW5kRWxlbWVudCk7CisgICAgICAgIGF1dG9maWxsRWxlbWVudHMtPmF1dG9m
aWxsKHVzZXJuYW1lLCBwYXNzd29yZCk7CisgICAgfQorfQorCiB2b2lkIFdlYlBhZ2U6OnNldFZp
ZXdwb3J0Q29uZmlndXJhdGlvbk1pbmltdW1MYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKIHsKICAgICBpZiAobV92aWV3cG9ydENvbmZpZ3VyYXRpb24uc2V0TWluaW11bUxheW91dFNp
emUoc2l6ZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRN
TElucHV0RWxlbWVudC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1
dEVsZW1lbnQuaAppbmRleCBhMDkyMzc3YjFkZTkxNWY1NjhhNTMwZTllM2FlZDNmMGIzMzI5ZGZm
Li41YTExYjFlODA4ZjIzNDQyNmYxZjE4MmE5YWJhN2ZjNWE4NDgzN2MzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTI0LDYg
KzI0LDkgQEAKICAqLwogCiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NSFRNTEVsZW1lbnQuaD4K
KyNpZiBUQVJHRVRfT1NfSVBIT05FCisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dFRyYWl0cy5o
PgorI2VuZGlmCiAKIEBjbGFzcyBET01GaWxlTGlzdDsKIEBjbGFzcyBET01IVE1MRm9ybUVsZW1l
bnQ7CkBAIC0zMSw3ICszNCwxMSBAQAogQGNsYXNzIE5TVVJMOwogCiBXRUJLSVRfQ0xBU1NfQVZB
SUxBQkxFX01BQygxMF80KQorI2lmIFRBUkdFVF9PU19JUEhPTkUKK0BpbnRlcmZhY2UgRE9NSFRN
TElucHV0RWxlbWVudCA6IERPTUhUTUxFbGVtZW50PFVJVGV4dElucHV0VHJhaXRzPgorI2Vsc2UK
IEBpbnRlcmZhY2UgRE9NSFRNTElucHV0RWxlbWVudCA6IERPTUhUTUxFbGVtZW50CisjZW5kaWYK
IEBwcm9wZXJ0eSAoY29weSkgTlNTdHJpbmcgKmFjY2VwdDsKIEBwcm9wZXJ0eSAoY29weSkgTlNT
dHJpbmcgKmFsdDsKIEBwcm9wZXJ0eSBCT09MIGF1dG9mb2N1cyBXRUJLSVRfQVZBSUxBQkxFX01B
QygxMF82KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1M
SW5wdXRFbGVtZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1
dEVsZW1lbnQubW0KaW5kZXggOWJjODAzYzU5NTg1MDFjODY5MDk0NTIwM2ZiYTJhNzA5ODU3NmQx
YS4uZDIwZjAxYWY2NjMyNjE0NjAzZjRmMTRmNTM2ODZmMTdlZjc1MjI5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQubW0KQEAgLTMz
LDYgKzMzLDIwIEBACiAjaW1wb3J0ICJET01JbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUHJpdmF0
ZS5oIgogI2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKKyNpZiBUQVJHRVRfT1NfSVBIT05F
CisjaWYgX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdn
ZXN0aW9uLmg+KQorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdn
ZXN0aW9uLmg+CisjZWxzZQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRfUHJpdmF0ZS5oPgor
QGludGVyZmFjZSBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gOiBVSVRleHRT
dWdnZXN0aW9uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICp1c2Vy
bmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICpwYXNzd29yZDsK
KworQGVuZAorI2VuZGlmIC8vIF9faGFzX2luY2x1ZGUoPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNy
ZWRlbnRpYWxzU3VnZ2VzdGlvbi5oPikKKyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCisjaW1w
b3J0IDxXZWJDb3JlL0F1dG9maWxsRWxlbWVudHMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmlsZUxp
c3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SFRNTEZvcm1FbGVtZW50Lmg+CkBAIC02NjYsNiArNjgwLDI5IEBAIC0gKHZvaWQpc2V0VmFsdWVG
b3JVc2VyOihOU1N0cmluZyAqKWluVmFsdWUKICAgICBJTVBMLT5zZXRWYWx1ZUZvclVzZXIoaW5W
YWx1ZSk7CiB9CiAKKy0gKEJPT0wpYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiAh
IVdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKElNUEwp
OworfQorCistIChOU1VSTCAqKXJlcHJlc2VudGluZ1BhZ2VVUkwKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3Ry
aW5nOnNlbGYub3duZXJEb2N1bWVudC5VUkxdOworfQorCisjaWYgVEFSR0VUX09TX0lQSE9ORQor
LSAodm9pZClpbnNlcnRUZXh0U3VnZ2VzdGlvbjooVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNT
dWdnZXN0aW9uICopY3JlZGVudGlhbHNTdWdnZXN0aW9uCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGlmIChpczxXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50PihJTVBMKSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkF1dG9maWxsRWxl
bWVudHM+IGF1dG9maWxsRWxlbWVudHMgPSBXZWJDb3JlOjpBdXRvZmlsbEVsZW1lbnRzOjpjb21w
dXRlQXV0b2ZpbGxFbGVtZW50cyhJTVBMKTsKKyAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy0+YXV0
b2ZpbGwoY3JlZGVudGlhbHNTdWdnZXN0aW9uLnVzZXJuYW1lLCBjcmVkZW50aWFsc1N1Z2dlc3Rp
b24ucGFzc3dvcmQpOworICAgIH0KK30KKyNlbmRpZiAvLyBUQVJHRVRfT1NfSVBIT05FCisKIEBl
bmQKIAogV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogY29yZShET01IVE1MSW5wdXRFbGVtZW50
ICp3cmFwcGVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmMWRiOGUwYTg4YzkyODc4ZGI0
YzBkNjgxMmNiY2ZiMmZiYmQzNmE3Li44OGNjNDAyNTk0MGI0ZjM5ZjMyYmExYTk0MzAxZjRkMjdj
MTcwNTdiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTYxLDYgKzE2MSw3IEBACiAJCTUx
MjBDODNFMUU2NzY3OEYwMDI1QjI1MCAvKiBXZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTIwQzgzQjFFNjc0RTM1MDAyNUIyNTAgLyogV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLmh0
bWwgKi87IH07CiAJCTUxMzkzRTIyMTUyMzk1MkQwMDVGMzlDNSAvKiBET01XaW5kb3dFeHRlbnNp
b25CYXNpY19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEzOTNFMUQxNTIzOTQ0QTAwNUYzOUM1IC8qIERPTVdpbmRvd0V4dGVuc2lvbkJh
c2ljX0J1bmRsZS5jcHAgKi87IH07CiAJCTUxNDJCMjczMTUxN0M4QzgwMEMzMkIxOSAvKiBDb250
ZXh0TWVudUNhbkNvcHlVUkwuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQyQjI3MjE1MTdDODkxMDBDMzJCMTkgLyogQ29udGV4dE1l
bnVDYW5Db3B5VVJMLmh0bWwgKi87IH07CisJCTUxNDk1OEJFMUY3NDI3QUMwMEU4N0JBRCAvKiBX
S1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE0OTU4QkQxRjc0MjdBQzAwRTg3QkFEIC8qIFdLV2ViVmlld0F1dG9m
aWxsVGVzdHMubW0gKi87IH07CiAJCTUxNUJFMTZGMUQ0MjhCQjEwMEREN0M2OCAvKiBTdG9yZUJs
b2JUb0JlRGVsZXRlZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNUJFMTZFMUQ0Mjg4RkYwMEREN0M2OCAvKiBTdG9yZUJsb2JUb0Jl
RGVsZXRlZC5odG1sICovOyB9OwogCQk1MTVCRTE3MTFENDI4RTRCMDBERDdDNjggLyogU3RvcmVC
bG9iVGhlbkRlbGV0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNUJFMTcwMUQ0MjhCRDEwMEREN0M2OCAvKiBTdG9yZUJsb2JUaGVuRGVsZXRlLm1t
ICovOyB9OwogCQk1MTcxNEVCNDFDRjhDNzhDMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJD
bGVhbnVwLTEuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTcxNEVCMjFDRjhDNzYxMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJD
bGVhbnVwLTEuaHRtbCAqLzsgfTsKQEAgLTEyNDAsNiArMTI0MSw3IEBACiAJCTUxMzkzRTFFMTUy
Mzk0NEEwMDVGMzlDNSAvKiBET01XaW5kb3dFeHRlbnNpb25CYXNpYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01XaW5kb3dFeHRlbnNpb25CYXNpYy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNDJCMjcwMTUxN0M4OEIwMEMzMkIxOSAvKiBD
b250ZXh0TWVudUNhbkNvcHlVUkwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBDb250ZXh0TWVudUNhbkNvcHlVUkwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxNDJCMjcyMTUxN0M4OTEwMEMzMkIxOSAvKiBDb250ZXh0TWVudUNhbkNvcHlVUkwu
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IENvbnRleHRNZW51Q2FuQ29weVVSTC5o
dG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTQ5NThCRDFGNzQyN0FDMDBFODdC
QUQgLyogV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdL
V2ViVmlld0F1dG9maWxsVGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
NUJFMTZFMUQ0Mjg4RkYwMEREN0M2OCAvKiBTdG9yZUJsb2JUb0JlRGVsZXRlZC5odG1sICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5odG1sOyBwYXRoID0gU3RvcmVCbG9iVG9CZURlbGV0ZWQuaHRtbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxNzAxRDQyOEJEMTAwREQ3QzY4IC8qIFN0b3Jl
QmxvYlRoZW5EZWxldGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBTdG9yZUJsb2JUaGVuRGVsZXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTcxNEVCMjFDRjhDNzYxMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVwLTEuaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJXZWJQcm9jZXNzS2lsbElEQkNsZWFudXAt
MS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMTMsNiArMjExNSw3IEBA
CiAJCQkJRjRENEYzQjcxRTRFMzZFNDAwQkIyNzY3IC8qIERhdGFJbnRlcmFjdGlvblRlc3RzLm1t
ICovLAogCQkJCTc1NjA5MTc3MTkyNTlDNTkwMDlFRjA2RSAvKiBNZW1vcnlDYWNoZUFkZEltYWdl
VG9DYWNoZUlPUy5tbSAqLywKIAkJCQlGNDY4NDlCRDFFRUY1OEU0MDBCOTM3RkUgLyogVUlQYXN0
ZWJvYXJkVGVzdHMubW0gKi8sCisJCQkJNTE0OTU4QkQxRjc0MjdBQzAwRTg3QkFEIC8qIFdLV2Vi
Vmlld0F1dG9maWxsVGVzdHMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zNDQ1LDYgKzM0NDgsNyBAQAogCQkJCTJENENGOEJEMUQ4
MzYwQ0MwMDAxQ0U4RCAvKiBXS1RodW1ibmFpbFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1
MUM2ODNERTFFQTEzNEU4MDA2NTAxODMgLyogV0tVUkxTY2hlbWVIYW5kbGVyLTEubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1MTgyQzIyRTFGMkJDRTU0MDA1OUJBN0MgLyogV0tVUkxTY2hlbWVIYW5k
bGVyLWxlYWtzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE0OTU4QkUxRjc0MjdBQzAwRTg3QkFE
IC8qIFdLV2ViVmlld0F1dG9maWxsVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRUZGMDZE
NzFEOEFGMzRBMDAwNEJCMzAgLyogV0tXZWJWaWV3Q2FuZGlkYXRlVGVzdHMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlBMTRGQzU4NTFCODk3MzkxMDBEMTA3RUIgLyogV0tXZWJWaWV3Q29uZmlndXJh
dGlvbkV4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDNDE3RjMzMUQxOUUxNDgwMEI4RUY1
MyAvKiBXS1dlYlZpZXdEZWZhdWx0TmF2aWdhdGlvbkRlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9XS1dlYlZpZXdBdXRv
ZmlsbFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvV0tXZWJWaWV3QXV0
b2ZpbGxUZXN0cy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmExM2U0NGU1NzhmZTcyZjdmYmE1OWY0YmQyMDQx
Y2FhZWUwNTQxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9p
b3MvV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVEICYmIFBMQVRGT1JN
KElPUykKKworI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3RXS1dl
YlZpZXcuaCIKKyNpbXBvcnQgIlVJS2l0U1BJLmgiCisKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElu
cHV0VHJhaXRzX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZhdGUu
aD4KKworI2lmIF9faGFzX2luY2x1ZGUoPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxz
U3VnZ2VzdGlvbi5oPikKKyNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxz
U3VnZ2VzdGlvbi5oPgorI2Vsc2UKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dFN1Z2dlc3Rpb24uaD4K
K0BpbnRlcmZhY2UgVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uIDogVUlUZXh0
U3VnZ2VzdGlvbgorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU1N0cmluZyAqdXNl
cm5hbWU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU1N0cmluZyAqcGFzc3dvcmQ7
CisKK0BlbmQKKyNlbmRpZgorCitzdGF0aWMgVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdn
ZXN0aW9uICpjcmVhdGVVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gPSBbTlND
bGFzc0Zyb21TdHJpbmcoQCJVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24iKSBu
ZXddOworCit0eXBlZGVmIFVJVmlldyA8VUlUZXh0SW5wdXRQcml2YXRlLCBVSVRleHRJbnB1dFRy
YWl0c19Qcml2YXRlLCBVSVRleHRJbnB1dFRyYWl0c19Qcml2YXRlX1N0YWdpbmdfMzQ1ODM2Mjg+
ICBBdXRvZmlsbENhbmRpZGF0ZVZpZXc7CisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKEF1
dG9maWxsVGVzdEhlbHBlcnMpCisKKy0gKEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqKV9wcml2YXRl
VGV4dElucHV0Cit7CisgICAgcmV0dXJuIChBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKilbc2VsZiB2
YWx1ZUZvcktleTpAIl9jdXJyZW50Q29udGVudFZpZXciXTsKK30KKworQGVuZAorCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1QoV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywgVXNlcm5h
bWVBbmRQYXNzd29yZEZpZWxkKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldOworICAgIEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmlldyBf
cHJpdmF0ZVRleHRJbnB1dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3Ry
aW5nOkAiPGlucHV0IGlkPSd1c2VyJyB0eXBlPSdlbWFpbCc+PC9pbnB1dD48aW5wdXQgaWQ9J3Bh
c3N3b3JkJyB0eXBlPSdwYXNzd29yZCc+PC9pbnB1dD4iXTsKKyAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXNlci5mb2N1cygpIl07CisgICAgRVhQRUNUX1RSVUUo
Y29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwYXNzd29yZC5mb2N1cygpIl07
CisgICAgRVhQRUNUX1RSVUUoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRl
bnRpYWxzKTsKKworICAgIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqY3Jl
ZGVudGlhbFN1Z2dlc3Rpb24gPSBjcmVhdGVVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dl
c3Rpb247CisgICAgY3JlZGVudGlhbFN1Z2dlc3Rpb24udXNlcm5hbWUgPSBAImZyZWRlcmlrIjsK
KyAgICBjcmVkZW50aWFsU3VnZ2VzdGlvbi5wYXNzd29yZCA9IEAiZmFtb3MiOworCisgICAgW2Nv
bnRlbnRWaWV3IGluc2VydFRleHRTdWdnZXN0aW9uOmNyZWRlbnRpYWxTdWdnZXN0aW9uXTsKKwor
ICAgIEVYUEVDVF9XS19TVFJFUShjcmVkZW50aWFsU3VnZ2VzdGlvbi51c2VybmFtZSwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVzZXIudmFsdWUiXSk7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKGNyZWRlbnRpYWxTdWdnZXN0aW9uLnBhc3N3b3JkLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQudmFsdWUiXSk7Cit9CisKK1RFU1Qo
V0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywgVHdvVGV4dEZpZWxkcykKK3sKKyAgICBUZXN0V0tXZWJW
aWV3ICp3ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXTsKKyAgICBBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKmNvbnRl
bnRWaWV3ID0gW3dlYlZpZXcgX3ByaXZhdGVUZXh0SW5wdXRdOworICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxpbnB1dCBpZD0ndGV4dDEnIHR5cGU9J2VtYWlsJz48
L2lucHV0PjxpbnB1dCBpZD0ndGV4dDInIHR5cGU9J3RleHQnPjwvaW5wdXQ+Il07CisgICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRleHQxLmZvY3VzKCkiXTsKKyAg
ICBFWFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRp
YWxzKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0
Mi5mb2N1cygpIl07CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmls
bGVkTG9naW5DcmVkZW50aWFscyk7Cit9CisKK1RFU1QoV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywg
U3RhbmRhbG9uZVBhc3N3b3JkRmllbGQpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9
IFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV07CisgICAgQXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICpjb250ZW50VmlldyA9IFt3ZWJW
aWV3IF9wcml2YXRlVGV4dElucHV0XTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCI8aW5wdXQgaWQ9J3Bhc3N3b3JkJyB0eXBlPSdwYXNzd29yZCc+PC9pbnB1dD4i
XTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQu
Zm9jdXMoKSJdOworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVk
TG9naW5DcmVkZW50aWFscyk7CisKKyAgICBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dl
c3Rpb24gKmNyZWRlbnRpYWxTdWdnZXN0aW9uID0gY3JlYXRlVUlLZXlib2FyZExvZ2luQ3JlZGVu
dGlhbHNTdWdnZXN0aW9uOworICAgIGNyZWRlbnRpYWxTdWdnZXN0aW9uLnVzZXJuYW1lID0gQCJm
cmVkZXJpayI7CisgICAgY3JlZGVudGlhbFN1Z2dlc3Rpb24ucGFzc3dvcmQgPSBAImZhbW9zIjsK
KworICAgIFtjb250ZW50VmlldyBpbnNlcnRUZXh0U3VnZ2VzdGlvbjpjcmVkZW50aWFsU3VnZ2Vz
dGlvbl07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoY3JlZGVudGlhbFN1Z2dlc3Rpb24ucGFzc3dv
cmQsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwYXNzd29yZC52YWx1
ZSJdKTsKK30KKworVEVTVChXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLCBTdGFuZGFsb25lVGV4dEZp
ZWxkKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldOworICAgIEF1dG9m
aWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmlldyBfcHJpdmF0ZVRleHRJbnB1
dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPGlucHV0IGlk
PSd0ZXh0ZmllbGQnIHR5cGU9J3RleHQnPjwvaW5wdXQ+Il07CisgICAgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRleHRmaWVsZC5mb2N1cygpIl07CisgICAgRVhQRUNU
X0ZBTFNFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7Cit9
CisKK1RFU1QoV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywgQWNjb3VudENyZWF0aW9uUGFnZSkKK3sK
KyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXTsKKyAgICBBdXRvZmlsbENhbmRp
ZGF0ZVZpZXcgKmNvbnRlbnRWaWV3ID0gW3dlYlZpZXcgX3ByaXZhdGVUZXh0SW5wdXRdOworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxpbnB1dCBpZD0ndXNlcicg
dHlwZT0nZW1haWwnPjwvaW5wdXQ+PGlucHV0IGlkPSdwYXNzd29yZCcgdHlwZT0ncGFzc3dvcmQn
PjxpbnB1dCBpZD0nY29uZmlybV9wYXNzd29yZCcgdHlwZT0ncGFzc3dvcmQnPjwvaW5wdXQ+Il07
CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVzZXIuZm9jdXMo
KSJdOworICAgIEVYUEVDVF9GQUxTRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2lu
Q3JlZGVudGlhbHMpOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAInBhc3N3b3JkLmZvY3VzKCkiXTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNj
ZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjb25maXJtX3Bhc3N3b3JkLmZvY3VzKCkiXTsKKyAgICBF
WFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxz
KTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBXS19B
UElfRU5BQkxFRCAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2lvcy9VSUtpdFNQSS5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaApp
bmRleCBlMDJmNTM2N2YxNzY5ODllMmI4ZTcxNzZiYWFkZjMxN2I5MjJmYWI1Li5hOGM0ZTRjYjMx
Y2YxZjYzN2JkOTVkOTZkY2JhYTdlMDU0ZTg4MTgwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2lvcy9VSUtpdFNQSS5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL1VJS2l0
U1BJLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIAorI2ltcG9ydCA8
VUlLaXQvVUlUZXh0SW5wdXRUcmFpdHMuaD4KKwogI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFY
X0FMTE9XRUQgPj0gMTEwMDAwCiBAcHJvdG9jb2wgVUlEcmFnU2Vzc2lvbjsKIEBjbGFzcyBVSURy
YWdJbnRlcmFjdGlvbjsKQEAgLTM1LDYgKzM3LDEzIEBACiAKICNpbXBvcnQgPFVJS2l0L1VJQXBw
bGljYXRpb25fUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb25fUHJp
dmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0ZS5oPgorI2lt
cG9ydCA8VUlLaXQvVUlUZXh0U3VnZ2VzdGlvbi5oPgorCisKK0Bwcm90b2NvbCBVSVRleHRJbnB1
dFRyYWl0c19Qcml2YXRlX1N0YWdpbmdfMzQ1ODM2MjggPE5TT2JqZWN0LCBVSVRleHRJbnB1dFRy
YWl0cz4KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBhY2NlcHRzQXV0b2Zp
bGxlZExvZ2luQ3JlZGVudGlhbHM7CitAZW5kCiAKICNlbHNlCiAKQEAgLTUxLDYgKzYwLDEwIEBA
IFdURl9FWFRFUk5fQ19FTkQKIEBlbmQKICNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01B
WF9BTExPV0VEID49IDExMDAwMAogCitAcHJvdG9jb2wgVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0
ZSA8TlNPYmplY3QsIFVJVGV4dElucHV0VHJhaXRzPgorQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBCT09MIGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKK0BlbmQKKwog
I2VuZGlmCiAKICNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDExMDAwMAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321517</attachid>
            <date>2017-09-21 22:24:36 -0700</date>
            <delta_ts>2017-09-22 15:26:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170921222436.patch</filename>
            <type>text/plain</type>
            <size>45200</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyMzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjg3ZTUzOGIzNTFkYjM5
NzRiMGU5MTg3Zjg5NmMyY2FjNmExZjEzMi4uMGFjZjdjMjU4Mjk0ZmI4ZWFlMjA4Yjg1YzdlMzc1
YjU2ZmYzOWYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA5LTE5ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVu
dHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzQXV0b2ZpbGxhYmxlRWxlbWVudCk6
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBvZiB0eXBlIHRleHQgb3IgZW1haWwuCisg
ICAgICAgIChXZWJDb3JlOjpuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCk6IFJldHVybnMgdGhlIG5l
eHQgZm9jdXNhYmxlIGVsZW1lbnQgdGhhdCBpcyBhdXRvZmlsbGFibGUuCisgICAgICAgIChXZWJD
b3JlOjpwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1lbnQpOiBSZXR1cm5zIHRoZSBwcmV2aW91cyBm
b2N1c2FibGUgZWxlbWVudCB0aGF0IGlzIGF1dG9maWxsYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6
OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKTogQ29tcHV0ZXMgdGhl
IGF1dG9maWxsIGVsZW1lbnRzICh1c2VybmFtZSAmIHBhc3N3b3JkKQorICAgICAgICBmb3IgYSBn
aXZlbiBpbnB1dCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50czo6
YXV0b2ZpbGwpOiBGaWxscyB0aGUgY3JlZGVudGlhbHMgaW50byB0aGUgcGFpciBvZiB1c2VybmFt
ZS9wYXNzd29yZCBlbGVtZW50cy4KKyAgICAgICAgKiBlZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1l
bnRzLmg6IEFkZGVkLgorCiAyMDE3LTA5LTIxICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMjEwMTcpOiBpQ2xvdWQgbWFpbCBsb2dz
IG1lIG91dCBhZnRlciBsb29raW5nIGF0IGEgZmV3IG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEwZWFi
NWMwNGVkYTFiNjM0MDQ5ZmUzYzRiMjkzNTRhM2EwOTU0ZWMuLmQxZTgzNDU2OTVjYmRlNWY2ZDFl
NTZlZTQyN2RjYjA2YmNjODgxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTctMDkt
MTkgIEZyZWRlcmlrIFJpZWRlbCAgPHJpZWRlbEBhcHBsZS5jb20+CisKKyAgICAgICAgRXhwb3Nl
IHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZpZWQgZm9ybSBjb250cm9scyBhcyB7TGVnYWN5
IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NDM5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxODM1MDQ+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9y
bS9zcGkvaW9zL1VJS2l0U1BJLmg6CisgICAgICAgICogU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9y
bWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIEVuY29kZXMgYWRkaXRpb25hbCBub2RlIGluZm9ybWF0aW9u
LCBpbmNsdWRpbmcgaWYgdGhlIG5vZGUgaXMgcGFydCBvZiBhIGxvZ2luIHNjcmVlbi4KKyAgICAg
ICAgKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmRlY29kZSk6CisgICAgICAgIERl
Y29kZXMgdGhlIGFkZGl0aW9uYWwgYXNzaXN0ZWQgbm9kZSBpbmZvcm1hdGlvbi4KKyAgICAgICAg
KiBTaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1t
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50
aWFsc10pOgorICAgICAgICBEZXRlcm1pbmVzIGlmIHRoZSBXS0NvbnRlbnRWaWV3IHNob3dzIGEg
bG9naW4gc2NyZWVuLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlcHJlc2VudGluZ1BhZ2VV
cmxdKToKKyAgICAgICAgUmV0dXJucyB0aGUgVVJMIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVk
IHdlYiBwYWdlLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGluc2VydFRleHRTdWdnZXN0aW9uOl0p
OgorICAgICAgICBJbnNlcnRzIHRoZSBsb2dpbiBjcmVkZW50aWFscyBpbnRvIHRoZSBXZWIgVmll
dy4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05vZGUpOgorICAgICAgICBUcmFu
c2ZlciB0aGUgYWRkaXRpb25hbCBhc3Npc3RlZG5vZGUgaW5mb3JtYXRpb24gKGFjY2VwdHNBdXRv
ZmlsbGVkTG9naW5DcmVkZW50aWFscyBhbmQgcmVwcmVzZW50aW5nUGFnZVVybCkuCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxz
KToKKyAgICAgICAgUmV0dXJucyBpZiB0aGUgV2ViIFZpZXcgc2hvd3MgYSBsb2dpbiBzY3JlZW4u
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVwcmVzZW50aW5nUGFnZVVybCk6Cisg
ICAgICAgIFJldHVybnMgdGhlIFdlYiBWaWV3J3MgVVJMLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyk6CisgICAgICAgIEluc2VydCB0aGUg
Y3JlZGVudGlhbHMgaW50byB0aGUgV2ViIFZpZXcuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKTog
VHJhbnNwb3J0cyB0aGUgaW5mb3JtYXRpb24gaWYgdGhlIGN1cnJlbnRseQorICAgICAgICBoaWdo
bGlnaHRlZCBub2RlIGFjY2VwdHMgYXV0b2ZpbGxlZCBsb2dpbiBjcmVkZW50aWFscy4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKTogRmlsbHMgdGhl
IGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlCisgICAgICAgIFdlYlBhZ2UuCisKIDIwMTctMDkt
MjEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRW5hYmxlIGRh
dGFUcmFuc2Zlci5pdGVtcyBvbiBtYWNPUyBhbmQgaU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKaW5kZXggNTdiZjY0NWEyMzFhOTUwOGQ1NGRkOWMwMzNiNjBlMWFiYzkyZjQ5ZS4uY2QyNTRk
YzgyMjM0NTRiMGM5Mzk5OTI3NWFhZTkxMTVmZTc4MWJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE3LTA5LTE5ICBGcmVkZXJpayBSaWVkZWwgIDxy
aWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8gc2V0IHZhbHVlcyBvZiBj
bGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQsIFdlYktpdH0gU1BJCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzOTQKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBET00vRE9NSFRNTElucHV0RWxlbWVudC5tbToKKyAgICAgICAgKC1bRE9NSFRNTElu
cHV0RWxlbWVudCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHNdKToKKyAgICAgICAg
RGV0ZXJtaW5lcyBpZiB0aGlzIEhUTUxJbnB1dEVsZW1lbnQgaXMgcGFydCBvZiBhIGxvZ2luIHNj
cmVlbi4KKyAgICAgICAgKC1bRE9NSFRNTElucHV0RWxlbWVudCByZXByZXNlbnRpbmdQYWdlVXJs
XSk6CisgICAgICAgIFJldHVybnMgdGhlIHdlYnBhZ2UncyBVUkwgdGhhdCBpcyBjdXJyZW50bHkg
ZGlzcGxheWVkIGluIHRoZSBXZWIgVmlldy4KKyAgICAgICAgKC1bRE9NSFRNTElucHV0RWxlbWVu
dCBpbnNlcnRUZXh0U3VnZ2VzdGlvbjpdKToKKyAgICAgICAgSW5zZXJ0cyBsb2dpbiBjcmVkZW50
aWFscyBpbnRvIHRoZSBXZWIgVmlldy4KKwogMjAxNy0wOS0yMSAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBFbmFibGUgZGF0YVRyYW5zZmVyLml0ZW1zIG9uIG1h
Y09TIGFuZCBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAxY2IxMmJmMWU4OWQ3NmQ0ZjQyMzVjYzM4OTk0NDkxZTc5NmE0NTU3
Li5mMWY4NGQ1NTVlZDRiMTM0ZjVkNzg0N2Q4ZDNhMmZjZjc4ZDMwMTNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjk0LDYg
KzIyOTQsOCBAQAogCQk1MTYyQzdGNDExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3
RjIxMUY3N0VGQTAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNTE2MkM3
RjUxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyog
U2NoZW1lUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1MTY2RDNDRDFFOEVENDhGMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjZEM0NDMUU4RUQ0
MTEwMEFENjJFMyAvKiBTdG9yYWdlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTUxNjk5RUUzMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmls
bEVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNjk5RUUxMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNwcCAqLzsg
fTsKKwkJNTE2OTlFRTQxRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk5RUUyMUY2MDhD
RDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE2QkI3OTQwQ0U5MUU2ODAwNTEyRjc5IC8qIEpT
VHJlZVdhbGtlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTZCQjc5MjBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9t
LmNwcCAqLzsgfTsKIAkJNTE2QzYyMjAxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZDNjIx
RDE5NTBENDg3MDAzMzdFNzUgLyogR2FtZXBhZEV2ZW50LmNwcCAqLzsgfTsKIAkJNTE2QzYyMjEx
OTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QzYyMUUxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVw
YWRFdmVudC5oICovOyB9OwpAQCAtMTAxOTMsNiArMTAxOTUsOCBAQAogCQk1MTY0NUI1MzFCOUY4
ODlCMDBGNzg5Q0UgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQlZlcnNpb25DaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTY0NUI1NDFCOUY4OEU4MDBGNzg5Q0UgLyogSURCQ3Vyc29yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkN1cnNvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAvKiBTdG9y
YWdlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY5OUVFMTFGNjA4Q0Q1MDBENTdEMDYg
LyogQXV0b2ZpbGxFbGVtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdXRvZmlsbEVsZW1l
bnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2OTlFRTIxRjYwOENENTAw
RDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b2ZpbGxFbGVt
ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTZCQjc5MjBDRTkxRTY4MDA1
MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTVHJlZVdhbGtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxNkM2MjFEMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2FtZXBhZEV2ZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2QzYyMUUxOTUwRDQ4NzAwMzM3RTc1IC8qIEdh
bWVwYWRFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYW1lcGFkRXZl
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4Mzg2LDYgKzE4MzkwLDggQEAK
IAkJNDQzMjkyQzEwRUJBNkQ3MzAwRTYyMDE2IC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTE2OTlFRTExRjYwOENENTAwRDU3RDA2IC8qIEF1
dG9maWxsRWxlbWVudHMuY3BwICovLAorCQkJCTUxNjk5RUUyMUY2MDhDRDUwMEQ1N0QwNiAvKiBB
dXRvZmlsbEVsZW1lbnRzLmggKi8sCiAJCQkJRDBCRDRGNUExNDA4ODUwRjAwNjgzOUI2IC8qIERp
Y3RhdGlvbkNvbW1hbmRJT1MuY3BwICovLAogCQkJCUQwQkQ0RjVCMTQwODg1MEYwMDY4MzlCNiAv
KiBEaWN0YXRpb25Db21tYW5kSU9TLmggKi8sCiAJCQkJRkVEMTNEMzkwQ0VBOTM0NjAwRDg5NDY2
IC8qIEVkaXRvcklPUy5tbSAqLywKQEAgLTI3MTU5LDYgKzI3MTY1LDcgQEAKIAkJCQlBNUE3QUE0
MzEzMkYwRUNDMDBEM0EzQzIgLyogQXV0b2NhcGl0YWxpemVUeXBlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0MxODQzRkUxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QzFFOTcyODFBOUY5ODM0MDA3QkYwRkIgLyogQXV0b0ZpbGxCdXR0b25FbGVtZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTY5OUVFNDFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2Zp
bGxFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzlENDY3MDUxRTYwQzQ2NTAwODE5NUZC
IC8qIEF1dG9wbGF5RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1ODMwRDRFMTY3OUI0Rjgw
MEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThD
RkYwNEUwQTE1NEYwOTAwMEE0MjM0IC8qIEF1dG9UYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNzgyNyw2ICsyNzgzNCw3IEBACiAJCQkJODQ3MzBEODkxMjQ4RjBCMzAwRDNBOUM5IC8q
IEZFU3BlY3VsYXJMaWdodGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEyOUM5OTcxRjU5Qjk2
MzAwOUQ3NDAzIC8qIEZldGNoQm9keVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEMTI5
REIxRjNEMTQzODAwRDE1RTQ3IC8qIEZldGNoSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDE2RTZGRTgxQkJEMTJERjAwMEE2MDIzIC8qIEZldGNoSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQxQUQ3NTNBMUNFRjZCRDEwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDRTE5MTREMUYyQTlBRkIwMDI3MkY3OCAvKiBGZXRjaFJl
ZmVycmVyUG9saWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0UxOTE1QTFGMkE5QjM0MDAyNzJG
NzggLyogRmV0Y2hSZXF1ZXN0Q2FjaGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzEzMjMsNiArMzEz
MzEsNyBAQAogCQkJCUE1RjZFMTZCMTMyRUQ0NkUwMDhFREFFMyAvKiBBdXRvY2FwaXRhbGl6ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NDNGRDFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2Zp
bGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxRTk3MjcxQTlGOTgzNDAwN0JGMEZCIC8qIEF1
dG9GaWxsQnV0dG9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTY5OUVFMzFGNjA4
Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
NTgzMEQ0RDE2NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThDRkYwNTAwQTE1NEYwOTAwMEE0MjM0IC8qIEF1dG9UYWJsZUxheW91
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREVDQTg5QTFFREY0NDdEMDBEQ0IwOEIgLyogQVZB
c3NldFRyYWNrVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4MjRhOWYzOGQy
ZmM3ZDY2ZTQzMjU4MzJlNzEwOGNmMzA4ODFlOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRzLmNwcApAQCAtMCwwICsxLDE0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdXRvZmlsbEVs
ZW1lbnRzLmgiCisKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBib29sIGlzQXV0b2Zp
bGxhYmxlRWxlbWVudChFbGVtZW50JiBub2RlKQoreworICAgIGlmICghaXM8SFRNTElucHV0RWxl
bWVudD4obm9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW5wdXRFbGVt
ZW50ID0gJmRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpOworICAgIHJldHVybiBpbnB1
dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkgfHwgaW5wdXRFbGVtZW50LT5pc0VtYWlsRmllbGQoKTsK
K30KKworc3RhdGljIGlubGluZSBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbmV4dEF1dG9maWxs
YWJsZUVsZW1lbnQoTm9kZSogc3RhcnROb2RlLCBGb2N1c0NvbnRyb2xsZXImIGZvY3VzQ29udHJv
bGxlcikKK3sKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KHN0YXJ0Tm9kZSkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgUmVmUHRyPEVsZW1lbnQ+IG5leHRFbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oc3RhcnROb2RlKTsKKyAgICBkbyB7CisgICAgICAgIG5leHRFbGVtZW50ID0gZm9j
dXNDb250cm9sbGVyLm5leHRGb2N1c2FibGVFbGVtZW50KCpuZXh0RWxlbWVudC5nZXQoKSk7Cisg
ICAgfSB3aGlsZSAobmV4dEVsZW1lbnQgJiYgIWlzQXV0b2ZpbGxhYmxlRWxlbWVudCgqbmV4dEVs
ZW1lbnQuZ2V0KCkpKTsKKworICAgIGlmICghbmV4dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgcmV0dXJuICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbmV4dEVs
ZW1lbnQpOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcmV2
aW91c0F1dG9maWxsYWJsZUVsZW1lbnQoTm9kZSogc3RhcnROb2RlLCBGb2N1c0NvbnRyb2xsZXIm
IGZvY3VzQ29udHJvbGxlcikKK3sKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KHN0YXJ0Tm9kZSkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPEVsZW1lbnQ+IHByZXZpb3VzRWxl
bWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KHN0YXJ0Tm9kZSk7CisgICAgZG8geworICAgICAgICBw
cmV2aW91c0VsZW1lbnQgPSBmb2N1c0NvbnRyb2xsZXIucHJldmlvdXNGb2N1c2FibGVFbGVtZW50
KCpwcmV2aW91c0VsZW1lbnQuZ2V0KCkpOworICAgIH0gd2hpbGUgKHByZXZpb3VzRWxlbWVudCAm
JiAhaXNBdXRvZmlsbGFibGVFbGVtZW50KCpwcmV2aW91c0VsZW1lbnQuZ2V0KCkpKTsKKworICAg
IGlmICghcHJldmlvdXNFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAg
ICByZXR1cm4gJmRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpwcmV2aW91c0VsZW1lbnQpOwor
fQorCitzdGQ6Om9wdGlvbmFsPEF1dG9maWxsRWxlbWVudHM+IEF1dG9maWxsRWxlbWVudHM6OmNv
bXB1dGVBdXRvZmlsbEVsZW1lbnRzKFJlZlB0cjxFbGVtZW50PiBzdGFydCkKK3sKKyAgICBpZiAo
IXN0YXJ0LT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICBGb2N1c0NvbnRyb2xsZXImIGZvY3VzQ29udHJvbGxlciA9IHN0YXJ0LT5kb2N1bWVudCgp
LnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCk7CisgICAgQXV0b2ZpbGxFbGVtZW50cyBhdXRvZmls
bEVsZW1lbnRzOworICAgIGlmIChzdGFydCAmJiBpczxIVE1MSW5wdXRFbGVtZW50Pigqc3RhcnQp
KSB7CisgICAgICAgIGF1dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1l
bnQ+KCpzdGFydCk7CisgICAgICAgIGlmIChpbnB1dEVsZW1lbnQuaXNQYXNzd29yZEZpZWxkKCkp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcmV2aW91c0VsZW1lbnQg
PSBwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1lbnQoJmlucHV0RWxlbWVudCwgZm9jdXNDb250cm9s
bGVyKTsKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBuZXh0RWxlbWVudCA9
IG5leHRBdXRvZmlsbGFibGVFbGVtZW50KCZpbnB1dEVsZW1lbnQsIGZvY3VzQ29udHJvbGxlcik7
CisgICAgICAgICAgICBib29sIGhhc0R1cGxpY2F0ZVBhc3N3b3JkRWxlbWVudHMgPSAobmV4dEVs
ZW1lbnQgJiYgbmV4dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpKSB8fCAocHJldmlvdXNFbGVt
ZW50ICYmIHByZXZpb3VzRWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpOworICAgICAgICAgICAg
aWYgKGhhc0R1cGxpY2F0ZVBhc3N3b3JkRWxlbWVudHMpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgICAgICAgICAgaWYgKHByZXZpb3VzRWxlbWVudCAmJiBpczxI
VE1MSW5wdXRFbGVtZW50PigqcHJldmlvdXNFbGVtZW50KSkgeworICAgICAgICAgICAgICAgIGlm
IChwcmV2aW91c0VsZW1lbnQtPmlzVGV4dEZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
YXV0b2ZpbGxFbGVtZW50cy5tX3Bhc3N3b3JkID0gJmlucHV0RWxlbWVudDsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy5tX3VzZXJuYW1lID0gcHJldmlvdXNFbGVtZW50Owor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0b2ZpbGxFbGVtZW50czsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWZQ
dHI8SFRNTElucHV0RWxlbWVudD4gbmV4dEVsZW1lbnQgPSBuZXh0QXV0b2ZpbGxhYmxlRWxlbWVu
dCgmaW5wdXRFbGVtZW50LCBmb2N1c0NvbnRyb2xsZXIpOworICAgICAgICAgICAgaWYgKG5leHRF
bGVtZW50ICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpuZXh0RWxlbWVudCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobmV4dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBlbGVtZW50QWZ0ZXJuZXh0RWxlbWVu
dCA9IG5leHRBdXRvZmlsbGFibGVFbGVtZW50KG5leHRFbGVtZW50LmdldCgpLCBmb2N1c0NvbnRy
b2xsZXIpOworICAgICAgICAgICAgICAgICAgICBib29sIGhhc0R1cGxpY2F0ZVBhc3N3b3JkRWxl
bWVudHMgPSBlbGVtZW50QWZ0ZXJuZXh0RWxlbWVudCAmJiBlbGVtZW50QWZ0ZXJuZXh0RWxlbWVu
dC0+aXNQYXNzd29yZEZpZWxkKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNEdXBsaWNh
dGVQYXNzd29yZEVsZW1lbnRzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgICAgICAgICAgICAgICAgICBhdXRvZmlsbEVsZW1lbnRzLm1fcGFzc3dv
cmQgPSBuZXh0RWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy5t
X3VzZXJuYW1lID0gJmlucHV0RWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF1
dG9maWxsRWxlbWVudHM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KHN0YXJ0LmdldCgpKSkg
eworICAgICAgICBhdXRvJiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
Pigqc3RhcnQpOworICAgICAgICBpZiAoaW5wdXRFbGVtZW50LmlzUGFzc3dvcmRGaWVsZCgpKSB7
CisgICAgICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gcHJldmlvdXNFbGVtZW50ID0g
cHJldmlvdXNBdXRvZmlsbGFibGVFbGVtZW50KCZpbnB1dEVsZW1lbnQsIGZvY3VzQ29udHJvbGxl
cik7CisgICAgICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbmV4dEVsZW1lbnQgPSBu
ZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCgmaW5wdXRFbGVtZW50LCBmb2N1c0NvbnRyb2xsZXIpOwor
ICAgICAgICAgICAgaWYgKCFwcmV2aW91c0VsZW1lbnQgJiYgIW5leHRFbGVtZW50KSB7CisgICAg
ICAgICAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy5tX3Bhc3N3b3JkID0gJmlucHV0RWxlbWVudDsK
KyAgICAgICAgICAgICAgICByZXR1cm4gYXV0b2ZpbGxFbGVtZW50czsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit2b2lkIEF1
dG9maWxsRWxlbWVudHM6OmF1dG9maWxsKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3Jk
KQoreworICAgIGlmICh0aGlzLT5tX3VzZXJuYW1lKSB7CisgICAgICAgIHRoaXMtPm1fdXNlcm5h
bWUtPnNldFZhbHVlRm9yVXNlcih1c2VybmFtZSk7CisgICAgICAgIHRoaXMtPm1fdXNlcm5hbWUt
PnNldEF1dG9GaWxsZWQoKTsKKyAgICB9CisgICAgaWYgKHRoaXMtPm1fcGFzc3dvcmQpIHsKKyAg
ICAgICAgdGhpcy0+bV9wYXNzd29yZC0+c2V0VmFsdWVGb3JVc2VyKHBhc3N3b3JkKTsKKyAgICAg
ICAgdGhpcy0+bV9wYXNzd29yZC0+c2V0QXV0b0ZpbGxlZCgpOworICAgIH0KK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3Mv
QXV0b2ZpbGxFbGVtZW50cy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxF
bGVtZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3NjQ1Zjk5MWNkNTQ2MWUxNWQzMTJjNmFjOTBmNzNlYWVm
ZjljNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRv
ZmlsbEVsZW1lbnRzLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJI
VE1MSW5wdXRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXV0b2Zp
bGxFbGVtZW50cyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXV0b2ZpbGxFbGVtZW50cz4gY29t
cHV0ZUF1dG9maWxsRWxlbWVudHMoUmVmUHRyPEVsZW1lbnQ+KTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGF1dG9maWxsKFN0cmluZywgU3RyaW5nKTsKK3ByaXZhdGU6CisgICAgUmVmUHRyPEhU
TUxJbnB1dEVsZW1lbnQ+IG1fdXNlcm5hbWU7CisgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
IG1fcGFzc3dvcmQ7Cit9OworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmggYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAppbmRleCAzNDAyMGUwOGViMDYxMjk0MTAyN2VmMThh
ZjI4YTJiNWMyYmRmOTc5Li45NDdjYWFmYjIyMmJiYWE4OTgzZDFjNDZkMTYyZGUyNzA0ZDY4MDMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaApAQCAtNDMsNiAr
NDMsMTcgQEAKICNpbXBvcnQgPFVJS2l0L1VJSW50ZXJmYWNlX1ByaXZhdGUuaD4KICNpbXBvcnQg
PFVJS2l0L1VJS2V5Ym9hcmRJbXBsLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkSW50bC5o
PgorI2lmIF9faGFzX2luY2x1ZGUoPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3Vn
Z2VzdGlvbi5oPikKKyNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3Vn
Z2VzdGlvbi5oPgorI2Vsc2UKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZhdGUuaD4K
K0BpbnRlcmZhY2UgVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uIDogVUlUZXh0
U3VnZ2VzdGlvbgorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU1N0cmluZyAqdXNl
cm5hbWU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU1N0cmluZyAqcGFzc3dvcmQ7
CisKK0BlbmQKKyNlbmRpZgogI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZF9Qcml2YXRlLmg+CiAj
aW1wb3J0IDxVSUtpdC9VSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyX1ByaXZhdGUuaD4KICNp
bXBvcnQgPFVJS2l0L1VJUGVyaXBoZXJhbEhvc3QuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcAppbmRleCA2NmM5ZjJhNDIxMjU4MTljOGI2
OGViNjk2YzkxYjMzMDFkOWMwZmIxLi40MjM2ZTA5MDhiZDMzZjc4OTU3Y2JjYThmN2NhMGEyMzlh
NTdmYWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24uY3BwCkBAIC04Niw2ICs4Niw4IEBAIHZvaWQgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb246
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCB2YWx1
ZTsKICAgICBlbmNvZGVyIDw8IHZhbHVlQXNOdW1iZXI7CiAgICAgZW5jb2RlciA8PCB0aXRsZTsK
KyAgICBlbmNvZGVyIDw8IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKKyAgICBl
bmNvZGVyIDw8IHJlcHJlc2VudGluZ1BhZ2VVUkw7CiAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGF1
dG9maWxsRmllbGROYW1lKTsKIH0KIApAQCAtMTYwLDYgKzE2MiwxMiBAQCBib29sIEFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBBc3Npc3RlZE5v
ZGVJbmZvcm1hdAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRpdGxlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWNjZXB0
c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVwcmVzZW50aW5nUGFnZVVSTCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5h
dXRvZmlsbEZpZWxkTmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmgKaW5kZXggNjgyN2JlN2Q4NDUy
NTJiZWNkNDU1MzIyNGZmOTg1NDM0Yjc3MjI4MS4uOGQzY2U5Y2M0ZDljMGM4MGM1N2EzYjVkZjcw
ZDI2YmVjMDY3MjgxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbi5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvY2Fw
aXRhbGl6ZVR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvZmlsbC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTA5LDYgKzEx
MCw4IEBAIHN0cnVjdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiB7CiAgICAgU3RyaW5nIHZhbHVl
OwogICAgIGRvdWJsZSB2YWx1ZUFzTnVtYmVyIHsgMCB9OwogICAgIFN0cmluZyB0aXRsZTsKKyAg
ICBib29sIGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKKyAgICBXZWJDb3JlOjpV
UkwgcmVwcmVzZW50aW5nUGFnZVVSTDsKICAgICBXZWJDb3JlOjpBdXRvZmlsbEZpZWxkTmFtZSBh
dXRvZmlsbEZpZWxkTmFtZSB7IFdlYkNvcmU6OkF1dG9maWxsRmllbGROYW1lOjpOb25lIH07CiAK
ICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYjU2NGNkYzM1ODMzZmU3NzU2YzFlZWYzYjcwZGVkN2U4
MDFlMDYyZi4uMzgwMWE0MTVmYzdlMTMwZTQ4ZjdlNTUxNzY5NjEyOWZiZjA4Nzk5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVudS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENo
ZWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0R3JhbnVsYXJpdHkuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvbi5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpA
QCAtNTU5LDYgKzU2MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzU2Nyb2xsaW5nT3Jab29t
aW5nKGJvb2wpOwogICAgIHZvaWQgcmVxdWVzdFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0
aW9uT2Zmc2V0KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgdWludDMyX3Qgb2Zmc2V0LCBXVEY6
OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgcmVxdWVzdFJlY3RzQXRTZWxlY3Rpb25P
ZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiwgV1RGOjpGdW5jdGlv
bjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYsIENhbGxiYWNrQmFz
ZTo6RXJyb3IpPiYmKTsKKyAgICBib29sIGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFs
cygpOworICAgIFdlYkNvcmU6OlVSTCByZXByZXNlbnRpbmdQYWdlVVJMKCk7CisgICAgdm9pZCBh
dXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3Ry
aW5nJiBwYXNzd29yZCk7CiAjaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCiAgICAgdm9pZCBk
aWRQZXJmb3JtRGF0YUludGVyYWN0aW9uQ29udHJvbGxlck9wZXJhdGlvbihib29sIGhhbmRsZWQp
OwogICAgIHZvaWQgZGlkSGFuZGxlU3RhcnREYXRhSW50ZXJhY3Rpb25SZXF1ZXN0KGJvb2wgc3Rh
cnRlZCk7CkBAIC0xOTg4LDYgKzE5OTIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNEZWZl
cnJlZFN0YXJ0QXNzaXN0aW5nTm9kZSB7IGZhbHNlIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPE5v
ZGVBc3Npc3RhbmNlQXJndW1lbnRzPiBtX2RlZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVudHM7
CiAgICAgYm9vbCBtX2ZvcmNlQWx3YXlzVXNlclNjYWxhYmxlIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIHsgZmFsc2UgfTsKKyAgICBXZWJD
b3JlOjpVUkwgbV9yZXByZXNlbnRpbmdQYWdlVVJMOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUE9J
TlRFUl9MT0NLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5t
bQppbmRleCBkNjFjZWRmYzE0ZTI2ZWM0ODNlMGU5MGMxODYyN2YyMzQxZTk1MGMzLi42ODVlMzk0
NjQ1Zjc3YjgwMDhkNzg4YWQ5NTU5MmQ2NGNiOWViYTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQpAQCAtMjU4LDYgKzI1OCwxNiBAQCAtIChXZWJQ
YWdlUHJveHkqKXBhZ2UKICAgICByZXR1cm4gX3BhZ2UuZ2V0KCk7CiB9CiAKKy0gKEJPT0wpYWNj
ZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzCit7CisgICAgcmV0dXJuIF9wYWdlLT5hY2Nl
cHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKTsKK30KKworLSAoTlNVUkwgKilyZXByZXNl
bnRpbmdQYWdlVVJMCit7CisgICAgcmV0dXJuIF9wYWdlLT5yZXByZXNlbnRpbmdQYWdlVVJMKCk7
Cit9CisKIC0gKHZvaWQpd2lsbE1vdmVUb1dpbmRvdzooVUlXaW5kb3cgKiluZXdXaW5kb3cKIHsK
ICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqZGVmYXVsdENlbnRlciA9IFtOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDBmOWQyMWMxNzgxNjdh
NjZjZWViNTAwODk2YzA2NTk0Njk1OTE3MjEuLjc4YWVlY2I4NGM0Y2YyN2UxOTY4MjcwNWRmYjAx
OWQ2ZjM3MjhiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMjk3OSw2ICsyOTc5LDExIEBAIC0gKHZv
aWQpZW5kU2VsZWN0aW9uQ2hhbmdlCiAgICAgCiAtICh2b2lkKWluc2VydFRleHRTdWdnZXN0aW9u
OihVSVRleHRTdWdnZXN0aW9uICopdGV4dFN1Z2dlc3Rpb24KIHsKKyAgICAvLyBGSVhNRTogUmVw
bGFjZSBOU0NsYXNzRnJvbVN0cmluZyB3aXRoIGFjdHVhbCBjbGFzcyBhcyBzb29uIGFzIFVJS2l0
IHN1Ym1pdHRlZCB0aGUgbmV3IGNsYXNzIGludG8gdGhlIGlPUyBTREsuCisgICAgaWYgKFt0ZXh0
U3VnZ2VzdGlvbiBpc0tpbmRPZkNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiVUlLZXlib2FyZExv
Z2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uIildKSB7CisgICAgICAgIF9wYWdlLT5hdXRvZmlsbExv
Z2luQ3JlZGVudGlhbHMoWyhVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKil0
ZXh0U3VnZ2VzdGlvbiB1c2VybmFtZV0sIFsoVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdn
ZXN0aW9uICopdGV4dFN1Z2dlc3Rpb24gcGFzc3dvcmRdKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KICAgICBpZCA8X1dLSW5wdXREZWxlZ2F0ZT4gaW5wdXREZWxlZ2F0ZSA9IFtfd2ViVmlldyBf
aW5wdXREZWxlZ2F0ZV07CiAgICAgaWYgKFtpbnB1dERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoX3dlYlZpZXc6aW5zZXJ0VGV4dFN1Z2dlc3Rpb246aW5JbnB1dFNlc3Npb246
KV0pCiAgICAgICAgIFtpbnB1dERlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGluc2VydFRleHRT
dWdnZXN0aW9uOnRleHRTdWdnZXN0aW9uIGluSW5wdXRTZXNzaW9uOl9mb3JtSW5wdXRTZXNzaW9u
LmdldCgpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdl
UHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tCmluZGV4IDQ3MjhlMGRmZmUxMGM1ZmY3YzcwN2UwNGE4MzE4MDRhZmJiZTJkMDUuLmQzZTY3
ZDdlMzUzOTI4MTVhMTM1MWFjYjFjNDZkMzE2ZTQ3YmE1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAtODkxLDYgKzg5MSw4IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRHZXRUYXBIaWdobGlnaHRHZW9tZXRyaWVzKHVpbnQ2NF90IHJl
cXVlc3RJRCwgY29uc3QgV2ViQ29yCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzdGFydEFzc2lzdGlu
Z05vZGUoY29uc3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uLCBib29sIHVz
ZXJJc0ludGVyYWN0aW5nLCBib29sIGJsdXJQcmV2aW91c05vZGUsIGNvbnN0IFVzZXJEYXRhJiB1
c2VyRGF0YSkKIHsKKyAgICBtX2FjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyA9IGlu
Zm9ybWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKKyAgICBtX3JlcHJl
c2VudGluZ1BhZ2VVUkwgPSBpbmZvcm1hdGlvbi5yZXByZXNlbnRpbmdQYWdlVVJMOwogICAgIEFQ
STo6T2JqZWN0KiB1c2VyRGF0YU9iamVjdCA9IHByb2Nlc3MoKS50cmFuc2Zvcm1IYW5kbGVzVG9P
YmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKTsKICAgICBpZiAobV9lZGl0b3JTdGF0ZS5p
c01pc3NpbmdQb3N0TGF5b3V0RGF0YSkgewogICAgICAgICBtX2RlZmVycmVkTm9kZUFzc2lzdGFu
Y2VBcmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzPihO
b2RlQXNzaXN0YW5jZUFyZ3VtZW50cyB7IGluZm9ybWF0aW9uLCB1c2VySXNJbnRlcmFjdGluZywg
Ymx1clByZXZpb3VzTm9kZSwgdXNlckRhdGFPYmplY3QgfSk7CkBAIC05MTAsNiArOTEyLDIxIEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpzdG9wQXNzaXN0aW5nTm9kZSgpCiAgICAgbV9wYWdlQ2xpZW50
LnN0b3BBc3Npc3RpbmdOb2RlKCk7CiB9CiAKK2Jvb2wgV2ViUGFnZVByb3h5OjphY2NlcHRzQXV0
b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKQoreworICAgIHJldHVybiBtX2FjY2VwdHNBdXRvZmls
bGVkTG9naW5DcmVkZW50aWFsczsKK30KKworV2ViQ29yZTo6VVJMIFdlYlBhZ2VQcm94eTo6cmVw
cmVzZW50aW5nUGFnZVVSTCgpCit7CisgICAgcmV0dXJuIG1fcmVwcmVzZW50aW5nUGFnZVVSTDsK
K30KKwordm9pZCBXZWJQYWdlUHJveHk6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBT
dHJpbmcmIHVzZXJuYW1lLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKHVzZXJu
YW1lLCBwYXNzd29yZCksIG1fcGFnZUlEKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OnNob3dJ
bnNwZWN0b3JIaWdobGlnaHQoY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiBoaWdobGlnaHQpCiB7
CiAgICAgbV9wYWdlQ2xpZW50LnNob3dJbnNwZWN0b3JIaWdobGlnaHQoaGlnaGxpZ2h0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA0MzE1NGE2MTRi
OTNjMTM3ZDcyNzQ5YjQxMWJkNTk3MjliYjdiYmI3Li4wZGMwYmE4ZjFjMDQyMGU0MTZiMTYwNDk2
ZGY5NDc5YmE1YjllNjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCkBAIC01NzUsNiArNTc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcEludGVyYWN0
aW9uKCk7CiAgICAgdm9pZCBwZXJmb3JtQWN0aW9uT25FbGVtZW50KHVpbnQzMl90IGFjdGlvbik7
CiAgICAgdm9pZCBmb2N1c05leHRBc3Npc3RlZE5vZGUoYm9vbCBpc0ZvcndhcmQsIENhbGxiYWNr
SUQpOworICAgIHZvaWQgYXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFsdWUoY29uc3QgU3RyaW5n
Jik7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSk7CiAgICAg
dm9pZCBzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFs
bG93TXVsdGlwbGVTZWxlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggYjAxNzY0NzkzZDM5MzAxYmEzYzQy
ZTlmM2Y2OTdiMDE2NGEwMTY2NC4uYmNiYmQwNTI4M2I2YzU5MTRhMTNmNTc3NWUxOThkMmE1MGVi
Mzk1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCkBAIC04NCw2ICs4NCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVn
YWN5UmVjZWl2ZXIgewogICAgIFBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9u
KQogICAgIEZvY3VzTmV4dEFzc2lzdGVkTm9kZShib29sIGlzRm9yd2FyZCwgV2ViS2l0OjpDYWxs
YmFja0lEIGNhbGxiYWNrSUQpCiAgICAgU2V0QXNzaXN0ZWROb2RlVmFsdWUoU3RyaW5nIHZhbHVl
KQorICAgIEF1dG9maWxsTG9naW5DcmVkZW50aWFscyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBw
YXNzd29yZCkKICAgICBTZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkK
ICAgICBTZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFs
bG93TXVsdGlwbGVTZWxlY3Rpb24pCiAgICAgQXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KaW5kZXggYmNkYjBiZjA2YTBjYTljMzlmZjVmM2M1YjRhNTI1NDU2MTJiYzA1MS4uMzllNzQw
NzcyYzAxMjE5OTExYzEzNjc2ZmY3ZjBhYWUzMDJlMGJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTUzLDYgKzUzLDcg
QEAKICNpbXBvcnQgIldlYlByb2Nlc3MuaCIKICNpbXBvcnQgPENvcmVUZXh0L0NURm9udC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9BdXRvZmlsbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9BdXRvZmlsbEVs
ZW1lbnRzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9E
YXRhRGV0ZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50
Lmg+CkBAIC0yNzQ5LDYgKzI3NTAsOCBAQCB2b2lkIFdlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbikKICAgICAgICAg
SFRNTEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVudC5mb3JtKCk7CiAgICAgICAgIGlmIChmb3Jt
KQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZm9ybUFjdGlvbiA9IGZvcm0tPmdldFVSTEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmFjdGlvbkF0dHIpOworICAgICAgICBpbmZvcm1hdGlv
bi5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgPSAhIVdlYkNvcmU6OkF1dG9maWxs
RWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKCZlbGVtZW50KTsKKyAgICAgICAgaW5m
b3JtYXRpb24ucmVwcmVzZW50aW5nUGFnZVVSTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS51cmxGb3JC
aW5kaW5ncygpOwogICAgICAgICBpbmZvcm1hdGlvbi5hdXRvY2FwaXRhbGl6ZVR5cGUgPSBlbGVt
ZW50LmF1dG9jYXBpdGFsaXplVHlwZSgpOwogICAgICAgICBpbmZvcm1hdGlvbi5pc0F1dG9jb3Jy
ZWN0ID0gZWxlbWVudC5zaG91bGRBdXRvY29ycmVjdCgpOwogICAgICAgICBpZiAoZWxlbWVudC5p
c1Bhc3N3b3JkRmllbGQoKSkKQEAgLTI4MDYsNiArMjgwOSwxNSBAQCB2b2lkIFdlYlBhZ2U6Omdl
dEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1h
dGlvbikKICAgICB9CiB9CiAKK3ZvaWQgV2ViUGFnZTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxz
KGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCit7CisgICAg
aWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG1fYXNzaXN0ZWROb2RlLmdldCgpKSkgeworICAgICAg
ICBSZWZQdHI8RWxlbWVudD4gYXNzaXN0ZW5kRWxlbWVudCA9ICZkb3duY2FzdDxFbGVtZW50Pigq
bV9hc3Npc3RlZE5vZGUpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPEF1dG9maWxsRWxlbWVudHM+
IGF1dG9maWxsRWxlbWVudHMgPSBBdXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVt
ZW50cyhhc3Npc3RlbmRFbGVtZW50KTsKKyAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy0+YXV0b2Zp
bGwodXNlcm5hbWUsIHBhc3N3b3JkKTsKKyAgICB9Cit9CisKIHZvaWQgV2ViUGFnZTo6c2V0Vmll
d3BvcnRDb25maWd1cmF0aW9uTWluaW11bUxheW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQogewogICAgIGlmIChtX3ZpZXdwb3J0Q29uZmlndXJhdGlvbi5zZXRNaW5pbXVtTGF5b3V0U2l6
ZShzaXplKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1M
SW5wdXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0
RWxlbWVudC5oCmluZGV4IGEwOTIzNzdiMWRlOTE1ZjU2OGE1MzBlOWUzYWVkM2YwYjMzMjlkZmYu
LjVhMTFiMWU4MDhmMjM0NDI2ZjFmMTgyYTlhYmE3ZmM1YTg0ODM3YzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaApAQCAtMjQsNiAr
MjQsOSBAQAogICovCiAKICNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET01IVE1MRWxlbWVudC5oPgor
I2lmIFRBUkdFVF9PU19JUEhPTkUKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0VHJhaXRzLmg+
CisjZW5kaWYKIAogQGNsYXNzIERPTUZpbGVMaXN0OwogQGNsYXNzIERPTUhUTUxGb3JtRWxlbWVu
dDsKQEAgLTMxLDcgKzM0LDExIEBACiBAY2xhc3MgTlNVUkw7CiAKIFdFQktJVF9DTEFTU19BVkFJ
TEFCTEVfTUFDKDEwXzQpCisjaWYgVEFSR0VUX09TX0lQSE9ORQorQGludGVyZmFjZSBET01IVE1M
SW5wdXRFbGVtZW50IDogRE9NSFRNTEVsZW1lbnQ8VUlUZXh0SW5wdXRUcmFpdHM+CisjZWxzZQog
QGludGVyZmFjZSBET01IVE1MSW5wdXRFbGVtZW50IDogRE9NSFRNTEVsZW1lbnQKKyNlbmRpZgog
QHByb3BlcnR5IChjb3B5KSBOU1N0cmluZyAqYWNjZXB0OwogQHByb3BlcnR5IChjb3B5KSBOU1N0
cmluZyAqYWx0OwogQHByb3BlcnR5IEJPT0wgYXV0b2ZvY3VzIFdFQktJVF9BVkFJTEFCTEVfTUFD
KDEwXzYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJ
bnB1dEVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0
RWxlbWVudC5tbQppbmRleCA5YmM4MDNjNTk1ODUwMWM4NjkwOTQ1MjAzZmJhMmE3MDk4NTc2ZDFh
Li5kMjBmMDFhZjY2MzI2MTQ2MDNmNGYxNGY1MzY4NmYxN2VmNzUyMjk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbQpAQCAtMzMs
NiArMzMsMjAgQEAKICNpbXBvcnQgIkRPTUludGVybmFsLmgiCiAjaW1wb3J0ICJET01Qcml2YXRl
LmgiCiAjaW1wb3J0ICJFeGNlcHRpb25IYW5kbGVycy5oIgorI2lmIFRBUkdFVF9PU19JUEhPTkUK
KyNpZiBfX2hhc19pbmNsdWRlKDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dl
c3Rpb24uaD4pCisjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dl
c3Rpb24uaD4KKyNlbHNlCisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dF9Qcml2YXRlLmg+CitA
aW50ZXJmYWNlIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiA6IFVJVGV4dFN1
Z2dlc3Rpb24KKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnVzZXJu
YW1lOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnBhc3N3b3JkOwor
CitAZW5kCisjZW5kaWYgLy8gX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3Jl
ZGVudGlhbHNTdWdnZXN0aW9uLmg+KQorI2VuZGlmIC8vIFRBUkdFVF9PU19JUEhPTkUKKyNpbXBv
cnQgPFdlYkNvcmUvQXV0b2ZpbGxFbGVtZW50cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxlTGlz
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9I
VE1MRm9ybUVsZW1lbnQuaD4KQEAgLTY2Niw2ICs2ODAsMjkgQEAgLSAodm9pZClzZXRWYWx1ZUZv
clVzZXI6KE5TU3RyaW5nICopaW5WYWx1ZQogICAgIElNUEwtPnNldFZhbHVlRm9yVXNlcihpblZh
bHVlKTsKIH0KIAorLSAoQk9PTClhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuICEh
V2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50czo6Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoSU1QTCk7
Cit9CisKKy0gKE5TVVJMICopcmVwcmVzZW50aW5nUGFnZVVSTAoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJp
bmc6c2VsZi5vd25lckRvY3VtZW50LlVSTF07Cit9CisKKyNpZiBUQVJHRVRfT1NfSVBIT05FCist
ICh2b2lkKWluc2VydFRleHRTdWdnZXN0aW9uOihVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1
Z2dlc3Rpb24gKiljcmVkZW50aWFsc1N1Z2dlc3Rpb24KK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgaWYgKGlzPFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ+KElNUEwpKSB7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6QXV0b2ZpbGxFbGVt
ZW50cz4gYXV0b2ZpbGxFbGVtZW50cyA9IFdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1
dGVBdXRvZmlsbEVsZW1lbnRzKElNUEwpOworICAgICAgICBhdXRvZmlsbEVsZW1lbnRzLT5hdXRv
ZmlsbChjcmVkZW50aWFsc1N1Z2dlc3Rpb24udXNlcm5hbWUsIGNyZWRlbnRpYWxzU3VnZ2VzdGlv
bi5wYXNzd29yZCk7CisgICAgfQorfQorI2VuZGlmIC8vIFRBUkdFVF9PU19JUEhPTkUKKwogQGVu
ZAogCiBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBjb3JlKERPTUhUTUxJbnB1dEVsZW1lbnQg
KndyYXBwZXIpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggMjE1MDc4ODQyY2I3ODE4N2Q1YmEzYmE1YjdmYTVkYTJlYTIzNzY5MS4uZTU1YWQ3N2Zm
MjU1NGE1YTM2YWQ1NGQyYTMyZDE4Nzk1ZWI2MzI4MSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA5LTE5ICBG
cmVkZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkg
dG8gc2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJL
aXQsIFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9pb3MvV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbTogQWRkZWQuCisg
ICAgICAgICgtW1dLV2ViVmlldyBfcHJpdmF0ZVRleHRJbnB1dF0pOiBUZXN0aW5nIGhlbHBlcnMu
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKTogQWRkZWQgdGVzdCBjYXNlcyB0byB0ZXN0
IEF1dG9GaWxsIGZvciB3ZWIgdmlld3MuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9pb3MvVUlL
aXRTUEkuaDoKKwogMjAxNy0wOS0yMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGFkZCB0aGUgYWJpbGl0eSB0byBza2lwIGEgdGVz
dDI2MiB0ZXN0LgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZTg5NDI4NzQyNWY2M2Y3Yjk2
NzQxNDMwYzE2YzhmZTJlYmU2MTRjLi43YjdkMTlhNjRlNDM4MGU2N2ZlNjU4MzNmOGU0ZDM2NjI4
NzY1OWZmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTYxLDYgKzE2MSw3IEBACiAJCTUx
MjBDODNFMUU2NzY3OEYwMDI1QjI1MCAvKiBXZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTIwQzgzQjFFNjc0RTM1MDAyNUIyNTAgLyogV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLmh0
bWwgKi87IH07CiAJCTUxMzkzRTIyMTUyMzk1MkQwMDVGMzlDNSAvKiBET01XaW5kb3dFeHRlbnNp
b25CYXNpY19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEzOTNFMUQxNTIzOTQ0QTAwNUYzOUM1IC8qIERPTVdpbmRvd0V4dGVuc2lvbkJh
c2ljX0J1bmRsZS5jcHAgKi87IH07CiAJCTUxNDJCMjczMTUxN0M4QzgwMEMzMkIxOSAvKiBDb250
ZXh0TWVudUNhbkNvcHlVUkwuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQyQjI3MjE1MTdDODkxMDBDMzJCMTkgLyogQ29udGV4dE1l
bnVDYW5Db3B5VVJMLmh0bWwgKi87IH07CisJCTUxNDk1OEJFMUY3NDI3QUMwMEU4N0JBRCAvKiBX
S1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE0OTU4QkQxRjc0MjdBQzAwRTg3QkFEIC8qIFdLV2ViVmlld0F1dG9m
aWxsVGVzdHMubW0gKi87IH07CiAJCTUxNUJFMTZGMUQ0MjhCQjEwMEREN0M2OCAvKiBTdG9yZUJs
b2JUb0JlRGVsZXRlZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNUJFMTZFMUQ0Mjg4RkYwMEREN0M2OCAvKiBTdG9yZUJsb2JUb0Jl
RGVsZXRlZC5odG1sICovOyB9OwogCQk1MTVCRTE3MTFENDI4RTRCMDBERDdDNjggLyogU3RvcmVC
bG9iVGhlbkRlbGV0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNUJFMTcwMUQ0MjhCRDEwMEREN0M2OCAvKiBTdG9yZUJsb2JUaGVuRGVsZXRlLm1t
ICovOyB9OwogCQk1MTcxNEVCNDFDRjhDNzhDMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJD
bGVhbnVwLTEuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTcxNEVCMjFDRjhDNzYxMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJD
bGVhbnVwLTEuaHRtbCAqLzsgfTsKQEAgLTEyNDIsNiArMTI0Myw3IEBACiAJCTUxMzkzRTFFMTUy
Mzk0NEEwMDVGMzlDNSAvKiBET01XaW5kb3dFeHRlbnNpb25CYXNpYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01XaW5kb3dFeHRlbnNpb25CYXNpYy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNDJCMjcwMTUxN0M4OEIwMEMzMkIxOSAvKiBD
b250ZXh0TWVudUNhbkNvcHlVUkwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBDb250ZXh0TWVudUNhbkNvcHlVUkwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxNDJCMjcyMTUxN0M4OTEwMEMzMkIxOSAvKiBDb250ZXh0TWVudUNhbkNvcHlVUkwu
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IENvbnRleHRNZW51Q2FuQ29weVVSTC5o
dG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTQ5NThCRDFGNzQyN0FDMDBFODdC
QUQgLyogV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdL
V2ViVmlld0F1dG9maWxsVGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
NUJFMTZFMUQ0Mjg4RkYwMEREN0M2OCAvKiBTdG9yZUJsb2JUb0JlRGVsZXRlZC5odG1sICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5odG1sOyBwYXRoID0gU3RvcmVCbG9iVG9CZURlbGV0ZWQuaHRtbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxNzAxRDQyOEJEMTAwREQ3QzY4IC8qIFN0b3Jl
QmxvYlRoZW5EZWxldGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBTdG9yZUJsb2JUaGVuRGVsZXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTcxNEVCMjFDRjhDNzYxMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVwLTEuaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJXZWJQcm9jZXNzS2lsbElEQkNsZWFudXAt
MS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMTksNiArMjEyMSw3IEBA
CiAJCQkJRjRENEYzQjcxRTRFMzZFNDAwQkIyNzY3IC8qIERhdGFJbnRlcmFjdGlvblRlc3RzLm1t
ICovLAogCQkJCTc1NjA5MTc3MTkyNTlDNTkwMDlFRjA2RSAvKiBNZW1vcnlDYWNoZUFkZEltYWdl
VG9DYWNoZUlPUy5tbSAqLywKIAkJCQlGNDY4NDlCRDFFRUY1OEU0MDBCOTM3RkUgLyogVUlQYXN0
ZWJvYXJkVGVzdHMubW0gKi8sCisJCQkJNTE0OTU4QkQxRjc0MjdBQzAwRTg3QkFEIC8qIFdLV2Vi
Vmlld0F1dG9maWxsVGVzdHMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zNDUzLDYgKzM0NTYsNyBAQAogCQkJCTJENENGOEJEMUQ4
MzYwQ0MwMDAxQ0U4RCAvKiBXS1RodW1ibmFpbFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1
MUM2ODNERTFFQTEzNEU4MDA2NTAxODMgLyogV0tVUkxTY2hlbWVIYW5kbGVyLTEubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1MTgyQzIyRTFGMkJDRTU0MDA1OUJBN0MgLyogV0tVUkxTY2hlbWVIYW5k
bGVyLWxlYWtzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE0OTU4QkUxRjc0MjdBQzAwRTg3QkFE
IC8qIFdLV2ViVmlld0F1dG9maWxsVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRUZGMDZE
NzFEOEFGMzRBMDAwNEJCMzAgLyogV0tXZWJWaWV3Q2FuZGlkYXRlVGVzdHMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlBMTRGQzU4NTFCODk3MzkxMDBEMTA3RUIgLyogV0tXZWJWaWV3Q29uZmlndXJh
dGlvbkV4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDNDE3RjMzMUQxOUUxNDgwMEI4RUY1
MyAvKiBXS1dlYlZpZXdEZWZhdWx0TmF2aWdhdGlvbkRlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9XS1dlYlZpZXdBdXRv
ZmlsbFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvV0tXZWJWaWV3QXV0
b2ZpbGxUZXN0cy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmExM2U0NGU1NzhmZTcyZjdmYmE1OWY0YmQyMDQx
Y2FhZWUwNTQxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9p
b3MvV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVEICYmIFBMQVRGT1JN
KElPUykKKworI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3RXS1dl
YlZpZXcuaCIKKyNpbXBvcnQgIlVJS2l0U1BJLmgiCisKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElu
cHV0VHJhaXRzX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZhdGUu
aD4KKworI2lmIF9faGFzX2luY2x1ZGUoPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxz
U3VnZ2VzdGlvbi5oPikKKyNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxz
U3VnZ2VzdGlvbi5oPgorI2Vsc2UKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dFN1Z2dlc3Rpb24uaD4K
K0BpbnRlcmZhY2UgVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uIDogVUlUZXh0
U3VnZ2VzdGlvbgorCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU1N0cmluZyAqdXNl
cm5hbWU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU1N0cmluZyAqcGFzc3dvcmQ7
CisKK0BlbmQKKyNlbmRpZgorCitzdGF0aWMgVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdn
ZXN0aW9uICpjcmVhdGVVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gPSBbTlND
bGFzc0Zyb21TdHJpbmcoQCJVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24iKSBu
ZXddOworCit0eXBlZGVmIFVJVmlldyA8VUlUZXh0SW5wdXRQcml2YXRlLCBVSVRleHRJbnB1dFRy
YWl0c19Qcml2YXRlLCBVSVRleHRJbnB1dFRyYWl0c19Qcml2YXRlX1N0YWdpbmdfMzQ1ODM2Mjg+
ICBBdXRvZmlsbENhbmRpZGF0ZVZpZXc7CisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKEF1
dG9maWxsVGVzdEhlbHBlcnMpCisKKy0gKEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqKV9wcml2YXRl
VGV4dElucHV0Cit7CisgICAgcmV0dXJuIChBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKilbc2VsZiB2
YWx1ZUZvcktleTpAIl9jdXJyZW50Q29udGVudFZpZXciXTsKK30KKworQGVuZAorCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1QoV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywgVXNlcm5h
bWVBbmRQYXNzd29yZEZpZWxkKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldOworICAgIEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmlldyBf
cHJpdmF0ZVRleHRJbnB1dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3Ry
aW5nOkAiPGlucHV0IGlkPSd1c2VyJyB0eXBlPSdlbWFpbCc+PC9pbnB1dD48aW5wdXQgaWQ9J3Bh
c3N3b3JkJyB0eXBlPSdwYXNzd29yZCc+PC9pbnB1dD4iXTsKKyAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXNlci5mb2N1cygpIl07CisgICAgRVhQRUNUX1RSVUUo
Y29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwYXNzd29yZC5mb2N1cygpIl07
CisgICAgRVhQRUNUX1RSVUUoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRl
bnRpYWxzKTsKKworICAgIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqY3Jl
ZGVudGlhbFN1Z2dlc3Rpb24gPSBjcmVhdGVVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dl
c3Rpb247CisgICAgY3JlZGVudGlhbFN1Z2dlc3Rpb24udXNlcm5hbWUgPSBAImZyZWRlcmlrIjsK
KyAgICBjcmVkZW50aWFsU3VnZ2VzdGlvbi5wYXNzd29yZCA9IEAiZmFtb3MiOworCisgICAgW2Nv
bnRlbnRWaWV3IGluc2VydFRleHRTdWdnZXN0aW9uOmNyZWRlbnRpYWxTdWdnZXN0aW9uXTsKKwor
ICAgIEVYUEVDVF9XS19TVFJFUShjcmVkZW50aWFsU3VnZ2VzdGlvbi51c2VybmFtZSwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVzZXIudmFsdWUiXSk7CisgICAgRVhQ
RUNUX1dLX1NUUkVRKGNyZWRlbnRpYWxTdWdnZXN0aW9uLnBhc3N3b3JkLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQudmFsdWUiXSk7Cit9CisKK1RFU1Qo
V0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywgVHdvVGV4dEZpZWxkcykKK3sKKyAgICBUZXN0V0tXZWJW
aWV3ICp3ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXTsKKyAgICBBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKmNvbnRl
bnRWaWV3ID0gW3dlYlZpZXcgX3ByaXZhdGVUZXh0SW5wdXRdOworICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxpbnB1dCBpZD0ndGV4dDEnIHR5cGU9J2VtYWlsJz48
L2lucHV0PjxpbnB1dCBpZD0ndGV4dDInIHR5cGU9J3RleHQnPjwvaW5wdXQ+Il07CisgICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRleHQxLmZvY3VzKCkiXTsKKyAg
ICBFWFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRp
YWxzKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0
Mi5mb2N1cygpIl07CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmls
bGVkTG9naW5DcmVkZW50aWFscyk7Cit9CisKK1RFU1QoV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywg
U3RhbmRhbG9uZVBhc3N3b3JkRmllbGQpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9
IFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV07CisgICAgQXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICpjb250ZW50VmlldyA9IFt3ZWJW
aWV3IF9wcml2YXRlVGV4dElucHV0XTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCI8aW5wdXQgaWQ9J3Bhc3N3b3JkJyB0eXBlPSdwYXNzd29yZCc+PC9pbnB1dD4i
XTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQu
Zm9jdXMoKSJdOworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVk
TG9naW5DcmVkZW50aWFscyk7CisKKyAgICBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dl
c3Rpb24gKmNyZWRlbnRpYWxTdWdnZXN0aW9uID0gY3JlYXRlVUlLZXlib2FyZExvZ2luQ3JlZGVu
dGlhbHNTdWdnZXN0aW9uOworICAgIGNyZWRlbnRpYWxTdWdnZXN0aW9uLnVzZXJuYW1lID0gQCJm
cmVkZXJpayI7CisgICAgY3JlZGVudGlhbFN1Z2dlc3Rpb24ucGFzc3dvcmQgPSBAImZhbW9zIjsK
KworICAgIFtjb250ZW50VmlldyBpbnNlcnRUZXh0U3VnZ2VzdGlvbjpjcmVkZW50aWFsU3VnZ2Vz
dGlvbl07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoY3JlZGVudGlhbFN1Z2dlc3Rpb24ucGFzc3dv
cmQsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwYXNzd29yZC52YWx1
ZSJdKTsKK30KKworVEVTVChXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLCBTdGFuZGFsb25lVGV4dEZp
ZWxkKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldOworICAgIEF1dG9m
aWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmlldyBfcHJpdmF0ZVRleHRJbnB1
dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPGlucHV0IGlk
PSd0ZXh0ZmllbGQnIHR5cGU9J3RleHQnPjwvaW5wdXQ+Il07CisgICAgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRleHRmaWVsZC5mb2N1cygpIl07CisgICAgRVhQRUNU
X0ZBTFNFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7Cit9
CisKK1RFU1QoV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywgQWNjb3VudENyZWF0aW9uUGFnZSkKK3sK
KyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXTsKKyAgICBBdXRvZmlsbENhbmRp
ZGF0ZVZpZXcgKmNvbnRlbnRWaWV3ID0gW3dlYlZpZXcgX3ByaXZhdGVUZXh0SW5wdXRdOworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxpbnB1dCBpZD0ndXNlcicg
dHlwZT0nZW1haWwnPjwvaW5wdXQ+PGlucHV0IGlkPSdwYXNzd29yZCcgdHlwZT0ncGFzc3dvcmQn
PjxpbnB1dCBpZD0nY29uZmlybV9wYXNzd29yZCcgdHlwZT0ncGFzc3dvcmQnPjwvaW5wdXQ+Il07
CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVzZXIuZm9jdXMo
KSJdOworICAgIEVYUEVDVF9GQUxTRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2lu
Q3JlZGVudGlhbHMpOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAInBhc3N3b3JkLmZvY3VzKCkiXTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNj
ZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjb25maXJtX3Bhc3N3b3JkLmZvY3VzKCkiXTsKKyAgICBF
WFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxz
KTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBXS19B
UElfRU5BQkxFRCAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2lvcy9VSUtpdFNQSS5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaApp
bmRleCBlMDJmNTM2N2YxNzY5ODllMmI4ZTcxNzZiYWFkZjMxN2I5MjJmYWI1Li5hOGM0ZTRjYjMx
Y2YxZjYzN2JkOTVkOTZkY2JhYTdlMDU0ZTg4MTgwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2lvcy9VSUtpdFNQSS5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL1VJS2l0
U1BJLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIAorI2ltcG9ydCA8
VUlLaXQvVUlUZXh0SW5wdXRUcmFpdHMuaD4KKwogI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFY
X0FMTE9XRUQgPj0gMTEwMDAwCiBAcHJvdG9jb2wgVUlEcmFnU2Vzc2lvbjsKIEBjbGFzcyBVSURy
YWdJbnRlcmFjdGlvbjsKQEAgLTM1LDYgKzM3LDEzIEBACiAKICNpbXBvcnQgPFVJS2l0L1VJQXBw
bGljYXRpb25fUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb25fUHJp
dmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0ZS5oPgorI2lt
cG9ydCA8VUlLaXQvVUlUZXh0U3VnZ2VzdGlvbi5oPgorCisKK0Bwcm90b2NvbCBVSVRleHRJbnB1
dFRyYWl0c19Qcml2YXRlX1N0YWdpbmdfMzQ1ODM2MjggPE5TT2JqZWN0LCBVSVRleHRJbnB1dFRy
YWl0cz4KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBhY2NlcHRzQXV0b2Zp
bGxlZExvZ2luQ3JlZGVudGlhbHM7CitAZW5kCiAKICNlbHNlCiAKQEAgLTUxLDYgKzYwLDEwIEBA
IFdURl9FWFRFUk5fQ19FTkQKIEBlbmQKICNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01B
WF9BTExPV0VEID49IDExMDAwMAogCitAcHJvdG9jb2wgVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0
ZSA8TlNPYmplY3QsIFVJVGV4dElucHV0VHJhaXRzPgorQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBCT09MIGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKK0BlbmQKKwog
I2VuZGlmCiAKICNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDExMDAwMAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321595</attachid>
            <date>2017-09-22 15:26:54 -0700</date>
            <delta_ts>2017-09-22 16:07:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170922152653.patch</filename>
            <type>text/plain</type>
            <size>46299</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyMzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjVkMGJhN2MwYjI1MDE5
ODRlMTg2NTExYjcwZmM5OWUzMGMwZjcyMy4uYmVlNWMxZjBiNDIzZTU4NzJhMjBhZGU0NzU3YjU1
MjZjNmZmOGQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA5LTE5ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVu
dHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzQXV0b2ZpbGxhYmxlRWxlbWVudCk6
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBvZiB0eXBlIHRleHQgb3IgZW1haWwuCisg
ICAgICAgIChXZWJDb3JlOjpuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCk6IFJldHVybnMgdGhlIG5l
eHQgZm9jdXNhYmxlIGVsZW1lbnQgdGhhdCBpcyBhdXRvZmlsbGFibGUuCisgICAgICAgIChXZWJD
b3JlOjpwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1lbnQpOiBSZXR1cm5zIHRoZSBwcmV2aW91cyBm
b2N1c2FibGUgZWxlbWVudCB0aGF0IGlzIGF1dG9maWxsYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6
OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKTogQ29tcHV0ZXMgdGhl
IGF1dG9maWxsIGVsZW1lbnRzICh1c2VybmFtZSAmIHBhc3N3b3JkKQorICAgICAgICBmb3IgYSBn
aXZlbiBpbnB1dCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50czo6
YXV0b2ZpbGwpOiBGaWxscyB0aGUgY3JlZGVudGlhbHMgaW50byB0aGUgcGFpciBvZiB1c2VybmFt
ZS9wYXNzd29yZCBlbGVtZW50cy4KKyAgICAgICAgKiBlZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1l
bnRzLmg6IEFkZGVkLgorCiAyMDE3LTA5LTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgYXNzZXJ0cyBhZ2FpbnN0IGxheW91dCB0aW1lIHJlbmRlciB0
cmVlIG11dGF0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmZjhhZjM5NTcwODMzOTAwM2E0MDgxMjE1ZDVjMmQ2
YWI3MzljZDAwLi4xMzE5ZWRiM2FkMTNjZGIzYWRjNTNhNzE0ZTkwMGZjNWU1YjNlNTIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTA5LTE5ICBGcmVkZXJpayBSaWVkZWwgIDxyaWVk
ZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8gc2V0IHZhbHVlcyBvZiBjbGFz
c2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQsIFdlYktpdH0gU1BJCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzOTQKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oOgorICAg
ICAgICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICBFbmNv
ZGVzIGFkZGl0aW9uYWwgbm9kZSBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGlmIHRoZSBub2RlIGlz
IHBhcnQgb2YgYSBsb2dpbiBzY3JlZW4uCisgICAgICAgIChXZWJLaXQ6OkFzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uOjpkZWNvZGUpOgorICAgICAgICBEZWNvZGVzIHRoZSBhZGRpdGlvbmFsIGFzc2lz
dGVkIG5vZGUgaW5mb3JtYXRpb24uCisgICAgICAgICogU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9y
bWF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHNdKToKKyAgICAgICAgRGV0ZXJtaW5l
cyBpZiB0aGUgV0tDb250ZW50VmlldyBzaG93cyBhIGxvZ2luIHNjcmVlbi4KKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyByZXByZXNlbnRpbmdQYWdlVXJsXSk6CisgICAgICAgIFJldHVybnMgdGhl
IFVSTCBvZiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCB3ZWIgcGFnZS4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBpbnNlcnRUZXh0U3VnZ2VzdGlvbjpdKToKKyAgICAgICAgSW5zZXJ0cyB0aGUgbG9n
aW4gY3JlZGVudGlhbHMgaW50byB0aGUgV2ViIFZpZXcuCisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3Rh
cnRBc3Npc3RpbmdOb2RlKToKKyAgICAgICAgVHJhbnNmZXIgdGhlIGFkZGl0aW9uYWwgYXNzaXN0
ZWRub2RlIGluZm9ybWF0aW9uIChhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgYW5k
IHJlcHJlc2VudGluZ1BhZ2VVcmwpLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmFj
Y2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk6CisgICAgICAgIFJldHVybnMgaWYgdGhl
IFdlYiBWaWV3IHNob3dzIGEgbG9naW4gc2NyZWVuLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnJlcHJlc2VudGluZ1BhZ2VVcmwpOgorICAgICAgICBSZXR1cm5zIHRoZSBXZWIgVmll
dydzIFVSTC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphdXRvZmlsbExvZ2luQ3Jl
ZGVudGlhbHMpOgorICAgICAgICBJbnNlcnQgdGhlIGNyZWRlbnRpYWxzIGludG8gdGhlIFdlYiBW
aWV3LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbik6IFRyYW5zcG9ydHMgdGhlIGluZm9ybWF0aW9u
IGlmIHRoZSBjdXJyZW50bHkKKyAgICAgICAgaGlnaGxpZ2h0ZWQgbm9kZSBhY2NlcHRzIGF1dG9m
aWxsZWQgbG9naW4gY3JlZGVudGlhbHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmF1dG9m
aWxsTG9naW5DcmVkZW50aWFscyk6IEZpbGxzIHRoZSBsb2dpbiBjcmVkZW50aWFscyBpbnRvIHRo
ZQorICAgICAgICBXZWJQYWdlLgorCiAyMDE3LTA5LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgVXNlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lc3RhbXAgZm9yIGV2
ZW50IHRpbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCAxMGZjMTY2ODNmNzNlZjMx
MWViMTViOThkOWFkY2RhYWIyNzkzMWY1Li40NTI4OTM4YTlhMTljZmNhMzdkY2JjMWIyYmQ2NTVm
NDhiNTgyZDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTctMDktMTkgIEZyZWRlcmlrIFJpZWRlbCAgPHJpZWRlbEBhcHBsZS5jb20+CisKKyAgICAg
ICAgRXhwb3NlIHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZpZWQgZm9ybSBjb250cm9scyBh
cyB7TGVnYWN5IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDM5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMx
ODM1MDQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBET00vRE9NSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIERPTS9ET01IVE1MSW5wdXRF
bGVtZW50Lm1tOgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGFjY2VwdHNBdXRvZmls
bGVkTG9naW5DcmVkZW50aWFsc10pOgorICAgICAgICBEZXRlcm1pbmVzIGlmIHRoaXMgSFRNTElu
cHV0RWxlbWVudCBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgorICAgICAgICAoLVtET01IVE1M
SW5wdXRFbGVtZW50IHJlcHJlc2VudGluZ1BhZ2VVcmxdKToKKyAgICAgICAgUmV0dXJucyB0aGUg
d2VicGFnZSdzIFVSTCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgaW4gdGhlIFdlYiBWaWV3
LgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGluc2VydFRleHRTdWdnZXN0aW9uOl0p
OgorICAgICAgICBJbnNlcnRzIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlIFdlYiBWaWV3Lgor
CiAyMDE3LTA5LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
VXNlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lc3RhbXAgZm9yIGV2ZW50IHRpbWUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZjE0NDVl
NjM3MGYwNmU2MzVjMzdhOTdjYTY1MGE4ZWQ0ODZlNjIzLi42ODMxNDQxOTJmNzVmMzc2NWQzNGY4
MDA3ZTZhYzQ3ZGExMzcwM2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjk1LDYgKzIyOTUsOCBAQAogCQk1MTYyQzdGNDEx
Rjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjIxMUY3N0VGQTAwNjEyRUZFIC8qIFNj
aGVtZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNTE2MkM3RjUxMUY3N0VGQjAwNjEyRUZFIC8qIFNj
aGVtZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTY2RDNDRDFFOEVE
NDhGMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAvKiBTdG9yYWdlVHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUx
Njk5RUUzMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk5RUUxMUY2MDhDRDUwMEQ1
N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNwcCAqLzsgfTsKKwkJNTE2OTlFRTQxRjYwOENENTAw
RDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk5RUUyMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVs
ZW1lbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTE2QkI3OTQwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZCQjc5MjBDRTkx
RTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJNTE2QzYyMjAx
OTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZDNjIxRDE5NTBENDg3MDAzMzdFNzUgLyogR2Ft
ZXBhZEV2ZW50LmNwcCAqLzsgfTsKIAkJNTE2QzYyMjExOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVw
YWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE2QzYyMUUxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5oICovOyB9OwpAQCAtMTAx
OTUsNiArMTAxOTcsOCBAQAogCQk1MTY0NUI1MzFCOUY4ODlCMDBGNzg5Q0UgLyogSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlZlcnNp
b25DaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTY0NUI1NDFC
OUY4OEU4MDBGNzg5Q0UgLyogSURCQ3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IElEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAvKiBTdG9yYWdlVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTY5OUVFMTFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBdXRvZmlsbEVsZW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE2OTlFRTIxRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVu
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b2ZpbGxFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTZCQjc5MjBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHJlZVdhbGtl
ckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNkM2MjFEMTk1MEQ0
ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR2FtZXBhZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE2QzYyMUUxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHYW1lcGFkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4Mzg4LDYgKzE4MzkyLDggQEAKIAkJNDQzMjkyQzEwRUJBNkQ3MzAwRTYy
MDE2IC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNTE2OTlFRTExRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuY3BwICovLAor
CQkJCTUxNjk5RUUyMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmggKi8sCiAJ
CQkJRDBCRDRGNUExNDA4ODUwRjAwNjgzOUI2IC8qIERpY3RhdGlvbkNvbW1hbmRJT1MuY3BwICov
LAogCQkJCUQwQkQ0RjVCMTQwODg1MEYwMDY4MzlCNiAvKiBEaWN0YXRpb25Db21tYW5kSU9TLmgg
Ki8sCiAJCQkJRkVEMTNEMzkwQ0VBOTM0NjAwRDg5NDY2IC8qIEVkaXRvcklPUy5tbSAqLywKQEAg
LTI3MTYyLDYgKzI3MTY4LDcgQEAKIAkJCQlBNUE3QUE0MzEzMkYwRUNDMDBEM0EzQzIgLyogQXV0
b2NhcGl0YWxpemVUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxODQzRkUxQzhCNzI4MzAw
MkVCOTczIC8qIEF1dG9maWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzFFOTcyODFBOUY5ODM0
MDA3QkYwRkIgLyogQXV0b0ZpbGxCdXR0b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MTY5OUVFNDFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzlENDY3MDUxRTYwQzQ2NTAwODE5NUZCIC8qIEF1dG9wbGF5RXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ1ODMwRDRFMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEUwQTE1NEYwOTAwMEE0MjM0IC8q
IEF1dG9UYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzgzMSw2ICsyNzgzOCw3IEBA
CiAJCQkJODQ3MzBEODkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFU3BlY3VsYXJMaWdodGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDEyOUM5OTcxRjU5Qjk2MzAwOUQ3NDAzIC8qIEZldGNoQm9keVNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEMTI5REIxRjNEMTQzODAwRDE1RTQ3IC8qIEZl
dGNoSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDIz
IC8qIEZldGNoSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQUQ3NTNB
MUNFRjZCRDEwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdD
RTE5MTREMUYyQTlBRkIwMDI3MkY3OCAvKiBGZXRjaFJlZmVycmVyUG9saWN5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3Q0UxOTE1QTFGMkE5QjM0MDAyNzJGNzggLyogRmV0Y2hSZXF1ZXN0Q2FjaGUu
aCBpbiBIZWFkZXJzICovLApAQCAtMzEzMjcsNiArMzEzMzUsNyBAQAogCQkJCUE1RjZFMTZCMTMy
RUQ0NkUwMDhFREFFMyAvKiBBdXRvY2FwaXRhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QzE4NDNGRDFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0MxRTk3MjcxQTlGOTgzNDAwN0JGMEZCIC8qIEF1dG9GaWxsQnV0dG9uRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1MTY5OUVFMzFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxF
bGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NTgzMEQ0RDE2NzlCNEY4MDBBQ0Y4QzMg
LyogQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkYwNTAw
QTE1NEYwOTAwMEE0MjM0IC8qIEF1dG9UYWJsZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDREVDQTg5QTFFREY0NDdEMDBEQ0IwOEIgLyogQVZBc3NldFRyYWNrVXRpbGl0aWVzLm1tIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRv
ZmlsbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxsRWxl
bWVudHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0ZjUwOGI0NWM1MWQwMWVhMzc3MWMyMmFiZTViZTU1MjI2
OGNjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRv
ZmlsbEVsZW1lbnRzLmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBdXRvZmlsbEVsZW1lbnRzLmgiCisKKyNpbmNsdWRlICJG
b2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGlubGluZSBib29sIGlzQXV0b2ZpbGxhYmxlRWxlbWVudChFbGVtZW50JiBu
b2RlKQoreworICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gaW5wdXRFbGVtZW50ID0gJmRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KG5vZGUpOworICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkg
fHwgaW5wdXRFbGVtZW50LT5pc0VtYWlsRmllbGQoKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQ
dHI8SFRNTElucHV0RWxlbWVudD4gbmV4dEF1dG9maWxsYWJsZUVsZW1lbnQoTm9kZSogc3RhcnRO
b2RlLCBGb2N1c0NvbnRyb2xsZXImIGZvY3VzQ29udHJvbGxlcikKK3sKKyAgICBpZiAoIWlzPEVs
ZW1lbnQ+KHN0YXJ0Tm9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRy
PEVsZW1lbnQ+IG5leHRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oc3RhcnROb2RlKTsKKyAg
ICBkbyB7CisgICAgICAgIG5leHRFbGVtZW50ID0gZm9jdXNDb250cm9sbGVyLm5leHRGb2N1c2Fi
bGVFbGVtZW50KCpuZXh0RWxlbWVudC5nZXQoKSk7CisgICAgfSB3aGlsZSAobmV4dEVsZW1lbnQg
JiYgIWlzQXV0b2ZpbGxhYmxlRWxlbWVudCgqbmV4dEVsZW1lbnQuZ2V0KCkpKTsKKworICAgIGlm
ICghbmV4dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuICZk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbmV4dEVsZW1lbnQpOworfQorCitzdGF0aWMgaW5s
aW5lIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1lbnQo
Tm9kZSogc3RhcnROb2RlLCBGb2N1c0NvbnRyb2xsZXImIGZvY3VzQ29udHJvbGxlcikKK3sKKyAg
ICBpZiAoIWlzPEVsZW1lbnQ+KHN0YXJ0Tm9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgUmVmUHRyPEVsZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KHN0YXJ0Tm9kZSk7CisgICAgZG8geworICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSBmb2N1c0Nv
bnRyb2xsZXIucHJldmlvdXNGb2N1c2FibGVFbGVtZW50KCpwcmV2aW91c0VsZW1lbnQuZ2V0KCkp
OworICAgIH0gd2hpbGUgKHByZXZpb3VzRWxlbWVudCAmJiAhaXNBdXRvZmlsbGFibGVFbGVtZW50
KCpwcmV2aW91c0VsZW1lbnQuZ2V0KCkpKTsKKworICAgIGlmICghcHJldmlvdXNFbGVtZW50KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gJmRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpwcmV2aW91c0VsZW1lbnQpOworfQorCitBdXRvZmlsbEVsZW1lbnRzOjpB
dXRvZmlsbEVsZW1lbnRzKFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiB1c2VybmFtZSwgUmVmUHRy
PEhUTUxJbnB1dEVsZW1lbnQ+IHBhc3N3b3JkKQorICAgIDogbV91c2VybmFtZSh1c2VybmFtZSkK
KyAgICAsIG1fcGFzc3dvcmQocGFzc3dvcmQpCit7Cit9CisKK3N0ZDo6b3B0aW9uYWw8QXV0b2Zp
bGxFbGVtZW50cz4gQXV0b2ZpbGxFbGVtZW50czo6Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoUmVm
PEhUTUxJbnB1dEVsZW1lbnQ+IHN0YXJ0KQoreworICAgIGlmICghc3RhcnQtPmRvY3VtZW50KCku
cGFnZSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIEZvY3VzQ29udHJvbGxl
ciYgZm9jdXNDb250cm9sbGVyID0gc3RhcnQtPmRvY3VtZW50KCkucGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKTsKKyAgICBpZiAoc3RhcnQtPmlzUGFzc3dvcmRGaWVsZCgpKSB7CisgICAgICAgIFJl
ZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcmV2aW91c0VsZW1lbnQgPSBwcmV2aW91c0F1dG9maWxs
YWJsZUVsZW1lbnQoc3RhcnQucHRyKCksIGZvY3VzQ29udHJvbGxlcik7CisgICAgICAgIFJlZlB0
cjxIVE1MSW5wdXRFbGVtZW50PiBuZXh0RWxlbWVudCA9IG5leHRBdXRvZmlsbGFibGVFbGVtZW50
KHN0YXJ0LnB0cigpLCBmb2N1c0NvbnRyb2xsZXIpOworICAgICAgICBib29sIGhhc0R1cGxpY2F0
ZVBhc3N3b3JkRWxlbWVudHMgPSAobmV4dEVsZW1lbnQgJiYgbmV4dEVsZW1lbnQtPmlzUGFzc3dv
cmRGaWVsZCgpKSB8fCAocHJldmlvdXNFbGVtZW50ICYmIHByZXZpb3VzRWxlbWVudC0+aXNQYXNz
d29yZEZpZWxkKCkpOworICAgICAgICBpZiAoaGFzRHVwbGljYXRlUGFzc3dvcmRFbGVtZW50cykK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgaWYgKHByZXZpb3Vz
RWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PigqcHJldmlvdXNFbGVtZW50KSkgeworICAg
ICAgICAgICAgaWYgKHByZXZpb3VzRWxlbWVudC0+aXNUZXh0RmllbGQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQXV0b2ZpbGxFbGVtZW50cyhwcmV2aW91c0VsZW1lbnQsIHN0YXJ0LnB0cigp
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVt
ZW50PiBuZXh0RWxlbWVudCA9IG5leHRBdXRvZmlsbGFibGVFbGVtZW50KHN0YXJ0LnB0cigpLCBm
b2N1c0NvbnRyb2xsZXIpOworICAgICAgICBpZiAobmV4dEVsZW1lbnQgJiYgaXM8SFRNTElucHV0
RWxlbWVudD4oKm5leHRFbGVtZW50KSkgeworICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50LT5p
c1Bhc3N3b3JkRmllbGQoKSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVt
ZW50PiBlbGVtZW50QWZ0ZXJuZXh0RWxlbWVudCA9IG5leHRBdXRvZmlsbGFibGVFbGVtZW50KG5l
eHRFbGVtZW50LmdldCgpLCBmb2N1c0NvbnRyb2xsZXIpOworICAgICAgICAgICAgICAgIGJvb2wg
aGFzRHVwbGljYXRlUGFzc3dvcmRFbGVtZW50cyA9IGVsZW1lbnRBZnRlcm5leHRFbGVtZW50ICYm
IGVsZW1lbnRBZnRlcm5leHRFbGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaGFzRHVwbGljYXRlUGFzc3dvcmRFbGVtZW50cykKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICAgICAgICAgIHJldHVybiBBdXRvZmls
bEVsZW1lbnRzKHN0YXJ0LnB0cigpLCBuZXh0RWxlbWVudCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhcnQtPmlzUGFzc3dvcmRGaWVsZCgpKSB7CisgICAg
ICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcmV2aW91c0VsZW1lbnQgPSBwcmV2aW91c0F1
dG9maWxsYWJsZUVsZW1lbnQoc3RhcnQucHRyKCksIGZvY3VzQ29udHJvbGxlcik7CisgICAgICAg
IFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBuZXh0RWxlbWVudCA9IG5leHRBdXRvZmlsbGFibGVF
bGVtZW50KHN0YXJ0LnB0cigpLCBmb2N1c0NvbnRyb2xsZXIpOworICAgICAgICBpZiAoIXByZXZp
b3VzRWxlbWVudCAmJiAhbmV4dEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gQXV0b2ZpbGxF
bGVtZW50cyhudWxscHRyLCBzdGFydC5wdHIoKSk7CisgICAgfQorICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Cit9CisKK3ZvaWQgQXV0b2ZpbGxFbGVtZW50czo6YXV0b2ZpbGwoU3RyaW5nIHVzZXJu
YW1lLCBTdHJpbmcgcGFzc3dvcmQpCit7CisgICAgaWYgKG1fdXNlcm5hbWUpIHsKKyAgICAgICAg
bV91c2VybmFtZS0+c2V0VmFsdWVGb3JVc2VyKHVzZXJuYW1lKTsKKyAgICAgICAgbV91c2VybmFt
ZS0+c2V0QXV0b0ZpbGxlZCgpOworICAgIH0KKyAgICBpZiAobV9wYXNzd29yZCkgeworICAgICAg
ICBtX3Bhc3N3b3JkLT5zZXRWYWx1ZUZvclVzZXIocGFzc3dvcmQpOworICAgICAgICBtX3Bhc3N3
b3JkLT5zZXRBdXRvRmlsbGVkKCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRz
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTk5N2VkODk4Mjk2N2VjMWQwMGVkOTEzM2Y0ZmQyN2ZlNDQ0ODczYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMuaApA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdXRvZmlsbEVsZW1lbnRzIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgc3RkOjpvcHRpb25hbDxBdXRvZmlsbEVsZW1lbnRzPiBjb21wdXRlQXV0b2ZpbGxFbGVt
ZW50cyhSZWY8SFRNTElucHV0RWxlbWVudD4pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXV0
b2ZpbGwoU3RyaW5nLCBTdHJpbmcpOworcHJpdmF0ZToKKyAgICBBdXRvZmlsbEVsZW1lbnRzKFJl
ZlB0cjxIVE1MSW5wdXRFbGVtZW50PiwgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+KTsKKyAgICBS
ZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbV91c2VybmFtZTsKKyAgICBSZWZQdHI8SFRNTElucHV0
RWxlbWVudD4gbV9wYXNzd29yZDsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCmluZGV4IDM0MDIwZTA4ZWIwNjEyOTQx
MDI3ZWYxOGFmMjhhMmI1YzJiZGY5NzkuLjk0N2NhYWZiMjIyYmJhYTg5ODNkMWM0NmQxNjJkZTI3
MDRkNjgwMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtp
dFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBA
IC00Myw2ICs0MywxNyBAQAogI2ltcG9ydCA8VUlLaXQvVUlJbnRlcmZhY2VfUHJpdmF0ZS5oPgog
I2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZEltcGwuaD4KICNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9h
cmRJbnRsLmg+CisjaWYgX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVu
dGlhbHNTdWdnZXN0aW9uLmg+KQorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVu
dGlhbHNTdWdnZXN0aW9uLmg+CisjZWxzZQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRfUHJp
dmF0ZS5oPgorQGludGVyZmFjZSBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24g
OiBVSVRleHRTdWdnZXN0aW9uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3Ry
aW5nICp1c2VybmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICpw
YXNzd29yZDsKKworQGVuZAorI2VuZGlmCiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkX1ByaXZh
dGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXJfUHJpdmF0
ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlQZXJpcGhlcmFsSG9zdC5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwCmluZGV4IDY2YzlmMmE0MjEy
NTgxOWM4YjY4ZWI2OTZjOTFiMzMwMWQ5YzBmYjEuLjQyMzZlMDkwOGJkMzNmNzg5NTdjYmNhOGY3
Y2EwYTIzOWE1N2ZhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5v
ZGVJbmZvcm1hdGlvbi5jcHAKQEAgLTg2LDYgKzg2LDggQEAgdm9pZCBBc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbjo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IHZhbHVlOwogICAgIGVuY29kZXIgPDwgdmFsdWVBc051bWJlcjsKICAgICBlbmNvZGVyIDw8
IHRpdGxlOworICAgIGVuY29kZXIgPDwgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxz
OworICAgIGVuY29kZXIgPDwgcmVwcmVzZW50aW5nUGFnZVVSTDsKICAgICBlbmNvZGVyLmVuY29k
ZUVudW0oYXV0b2ZpbGxGaWVsZE5hbWUpOwogfQogCkBAIC0xNjAsNiArMTYyLDEyIEBAIGJvb2wg
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIEFz
c2lzdGVkTm9kZUluZm9ybWF0CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudGl0bGUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZXByZXNlbnRpbmdQYWdlVVJM
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0o
cmVzdWx0LmF1dG9maWxsRmllbGROYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaAppbmRleCA2ODI3
YmU3ZDg0NTI1MmJlY2Q0NTUzMjI0ZmY5ODU0MzRiNzcyMjgxLi4wOGE5ZjcyNGU0MmQ1OWM2ODk4
NmI1NWM1OGFhZDVkYThlOTIxZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9B
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lz
dGVkTm9kZUluZm9ybWF0aW9uLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0F1dG9jYXBpdGFsaXplVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dG9maWxsLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0x
MDksNiArMTEwLDggQEAgc3RydWN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uIHsKICAgICBTdHJp
bmcgdmFsdWU7CiAgICAgZG91YmxlIHZhbHVlQXNOdW1iZXIgeyAwIH07CiAgICAgU3RyaW5nIHRp
dGxlOworICAgIGJvb2wgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIHsgZmFsc2Ug
fTsKKyAgICBXZWJDb3JlOjpVUkwgcmVwcmVzZW50aW5nUGFnZVVSTDsKICAgICBXZWJDb3JlOjpB
dXRvZmlsbEZpZWxkTmFtZSBhdXRvZmlsbEZpZWxkTmFtZSB7IFdlYkNvcmU6OkF1dG9maWxsRmll
bGROYW1lOjpOb25lIH07CiAKICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYjU2NGNkYzM1ODMzZmU3
NzU2YzFlZWYzYjcwZGVkN2U4MDFlMDYyZi4uMzgwMWE0MTVmYzdlMTMwZTQ4ZjdlNTUxNzY5NjEy
OWZiZjA4Nzk5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTc5
LDYgKzc5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVudS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dENoZWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0R3JhbnVs
YXJpdHkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbi5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgpAQCAtNTU5LDYgKzU2MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dElzU2Nyb2xsaW5nT3Jab29taW5nKGJvb2wpOwogICAgIHZvaWQgcmVxdWVzdFJlY3RzRm9yR3Jh
bnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgdWlu
dDMyX3Qgb2Zmc2V0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNl
bGVjdGlvblJlY3Q+JiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgcmVxdWVz
dFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3Ry
aW5nJiwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25S
ZWN0PiYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKKyAgICBib29sIGFjY2VwdHNBdXRvZmls
bGVkTG9naW5DcmVkZW50aWFscygpOworICAgIFdlYkNvcmU6OlVSTCByZXByZXNlbnRpbmdQYWdl
VVJMKCk7CisgICAgdm9pZCBhdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1
c2VybmFtZSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCk7CiAjaWYgRU5BQkxFKERBVEFfSU5URVJB
Q1RJT04pCiAgICAgdm9pZCBkaWRQZXJmb3JtRGF0YUludGVyYWN0aW9uQ29udHJvbGxlck9wZXJh
dGlvbihib29sIGhhbmRsZWQpOwogICAgIHZvaWQgZGlkSGFuZGxlU3RhcnREYXRhSW50ZXJhY3Rp
b25SZXF1ZXN0KGJvb2wgc3RhcnRlZCk7CkBAIC0xOTg4LDYgKzE5OTIsOCBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9oYXNEZWZlcnJlZFN0YXJ0QXNzaXN0aW5nTm9kZSB7IGZhbHNlIH07CiAgICAg
c3RkOjp1bmlxdWVfcHRyPE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzPiBtX2RlZmVycmVkTm9kZUFz
c2lzdGFuY2VBcmd1bWVudHM7CiAgICAgYm9vbCBtX2ZvcmNlQWx3YXlzVXNlclNjYWxhYmxlIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIHsg
ZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpVUkwgbV9yZXByZXNlbnRpbmdQYWdlVVJMOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlldy5tbQppbmRleCBkNjFjZWRmYzE0ZTI2ZWM0ODNlMGU5MGMxODYyN2Yy
MzQxZTk1MGMzLi42ODVlMzk0NjQ1Zjc3YjgwMDhkNzg4YWQ5NTU5MmQ2NGNiOWViYTFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQpAQCAtMjU4LDYg
KzI1OCwxNiBAQCAtIChXZWJQYWdlUHJveHkqKXBhZ2UKICAgICByZXR1cm4gX3BhZ2UuZ2V0KCk7
CiB9CiAKKy0gKEJPT0wpYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzCit7CisgICAg
cmV0dXJuIF9wYWdlLT5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKTsKK30KKwor
LSAoTlNVUkwgKilyZXByZXNlbnRpbmdQYWdlVVJMCit7CisgICAgcmV0dXJuIF9wYWdlLT5yZXBy
ZXNlbnRpbmdQYWdlVVJMKCk7Cit9CisKIC0gKHZvaWQpd2lsbE1vdmVUb1dpbmRvdzooVUlXaW5k
b3cgKiluZXdXaW5kb3cKIHsKICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqZGVmYXVsdENlbnRl
ciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmlu
ZGV4IDBmOWQyMWMxNzgxNjdhNjZjZWViNTAwODk2YzA2NTk0Njk1OTE3MjEuLjc4YWVlY2I4NGM0
Y2YyN2UxOTY4MjcwNWRmYjAxOWQ2ZjM3MjhiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMjk3OSw2
ICsyOTc5LDExIEBAIC0gKHZvaWQpZW5kU2VsZWN0aW9uQ2hhbmdlCiAgICAgCiAtICh2b2lkKWlu
c2VydFRleHRTdWdnZXN0aW9uOihVSVRleHRTdWdnZXN0aW9uICopdGV4dFN1Z2dlc3Rpb24KIHsK
KyAgICAvLyBGSVhNRTogUmVwbGFjZSBOU0NsYXNzRnJvbVN0cmluZyB3aXRoIGFjdHVhbCBjbGFz
cyBhcyBzb29uIGFzIFVJS2l0IHN1Ym1pdHRlZCB0aGUgbmV3IGNsYXNzIGludG8gdGhlIGlPUyBT
REsuCisgICAgaWYgKFt0ZXh0U3VnZ2VzdGlvbiBpc0tpbmRPZkNsYXNzOk5TQ2xhc3NGcm9tU3Ry
aW5nKEAiVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uIildKSB7CisgICAgICAg
IF9wYWdlLT5hdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoWyhVSUtleWJvYXJkTG9naW5DcmVkZW50
aWFsc1N1Z2dlc3Rpb24gKil0ZXh0U3VnZ2VzdGlvbiB1c2VybmFtZV0sIFsoVUlLZXlib2FyZExv
Z2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uICopdGV4dFN1Z2dlc3Rpb24gcGFzc3dvcmRdKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KICAgICBpZCA8X1dLSW5wdXREZWxlZ2F0ZT4gaW5wdXREZWxl
Z2F0ZSA9IFtfd2ViVmlldyBfaW5wdXREZWxlZ2F0ZV07CiAgICAgaWYgKFtpbnB1dERlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6aW5zZXJ0VGV4dFN1Z2dlc3Rp
b246aW5JbnB1dFNlc3Npb246KV0pCiAgICAgICAgIFtpbnB1dERlbGVnYXRlIF93ZWJWaWV3Ol93
ZWJWaWV3IGluc2VydFRleHRTdWdnZXN0aW9uOnRleHRTdWdnZXN0aW9uIGluSW5wdXRTZXNzaW9u
Ol9mb3JtSW5wdXRTZXNzaW9uLmdldCgpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IDQ3MjhlMGRmZmUxMGM1ZmY3YzcwN2UwNGE4MzE4
MDRhZmJiZTJkMDUuLmQzZTY3ZDdlMzUzOTI4MTVhMTM1MWFjYjFjNDZkMzE2ZTQ3YmE1YTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAt
ODkxLDYgKzg5MSw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRHZXRUYXBIaWdobGlnaHRHZW9t
ZXRyaWVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yCiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpzdGFydEFzc2lzdGluZ05vZGUoY29uc3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGlu
Zm9ybWF0aW9uLCBib29sIHVzZXJJc0ludGVyYWN0aW5nLCBib29sIGJsdXJQcmV2aW91c05vZGUs
IGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKIHsKKyAgICBtX2FjY2VwdHNBdXRvZmlsbGVkTG9n
aW5DcmVkZW50aWFscyA9IGluZm9ybWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50
aWFsczsKKyAgICBtX3JlcHJlc2VudGluZ1BhZ2VVUkwgPSBpbmZvcm1hdGlvbi5yZXByZXNlbnRp
bmdQYWdlVVJMOwogICAgIEFQSTo6T2JqZWN0KiB1c2VyRGF0YU9iamVjdCA9IHByb2Nlc3MoKS50
cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKTsKICAgICBp
ZiAobV9lZGl0b3JTdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkgewogICAgICAgICBtX2Rl
ZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPE5vZGVBc3Np
c3RhbmNlQXJndW1lbnRzPihOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cyB7IGluZm9ybWF0aW9uLCB1
c2VySXNJbnRlcmFjdGluZywgYmx1clByZXZpb3VzTm9kZSwgdXNlckRhdGFPYmplY3QgfSk7CkBA
IC05MTAsNiArOTEyLDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdG9wQXNzaXN0aW5nTm9kZSgp
CiAgICAgbV9wYWdlQ2xpZW50LnN0b3BBc3Npc3RpbmdOb2RlKCk7CiB9CiAKK2Jvb2wgV2ViUGFn
ZVByb3h5OjphY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKQoreworICAgIHJldHVy
biBtX2FjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKK30KKworV2ViQ29yZTo6VVJM
IFdlYlBhZ2VQcm94eTo6cmVwcmVzZW50aW5nUGFnZVVSTCgpCit7CisgICAgcmV0dXJuIG1fcmVw
cmVzZW50aW5nUGFnZVVSTDsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmF1dG9maWxsTG9naW5D
cmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBjb25zdCBTdHJpbmcmIHBhc3N3b3Jk
KQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QXV0b2ZpbGxMb2dp
bkNyZWRlbnRpYWxzKHVzZXJuYW1lLCBwYXNzd29yZCksIG1fcGFnZUlEKTsKK30KKwogdm9pZCBX
ZWJQYWdlUHJveHk6OnNob3dJbnNwZWN0b3JIaWdobGlnaHQoY29uc3QgV2ViQ29yZTo6SGlnaGxp
Z2h0JiBoaWdobGlnaHQpCiB7CiAgICAgbV9wYWdlQ2xpZW50LnNob3dJbnNwZWN0b3JIaWdobGln
aHQoaGlnaGxpZ2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAppbmRleCBiYjFmNTEyNmQ2YmY0Mjk5YTM5Njc5ZTI1MWQzODFhZTQ0ZGQ3NDg0Li5iYWIyMDJl
Nzc2ZTU4ZDQ0YTk3OWZhYWIwZDYxOWFjYmZiMWEyMDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01NzYsNiArNTc2LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc3RvcEludGVyYWN0aW9uKCk7CiAgICAgdm9pZCBwZXJmb3JtQWN0aW9uT25FbGVtZW50
KHVpbnQzMl90IGFjdGlvbik7CiAgICAgdm9pZCBmb2N1c05leHRBc3Npc3RlZE5vZGUoYm9vbCBp
c0ZvcndhcmQsIENhbGxiYWNrSUQpOworICAgIHZvaWQgYXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxz
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2Rl
VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVt
YmVyKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQz
Ml90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggYjAx
NzY0NzkzZDM5MzAxYmEzYzQyZTlmM2Y2OTdiMDE2NGEwMTY2NC4uYmNiYmQwNTI4M2I2YzU5MTRh
MTNmNTc3NWUxOThkMmE1MGViMzk1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC04NCw2ICs4NCw3IEBAIG1lc3Nh
Z2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFBlcmZvcm1BY3Rpb25PbkVsZW1l
bnQodWludDMyX3QgYWN0aW9uKQogICAgIEZvY3VzTmV4dEFzc2lzdGVkTm9kZShib29sIGlzRm9y
d2FyZCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgU2V0QXNzaXN0ZWROb2Rl
VmFsdWUoU3RyaW5nIHZhbHVlKQorICAgIEF1dG9maWxsTG9naW5DcmVkZW50aWFscyhTdHJpbmcg
dXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkKICAgICBTZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVt
YmVyKGRvdWJsZSB2YWx1ZSkKICAgICBTZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQz
Ml90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCiAgICAgQXBwbGljYXRpb25X
aWxsUmVzaWduQWN0aXZlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZGJhZmExNWY4N2JhNDA3N2E3YTc1ZmFkZGYzODVk
ZjQyNDM4OGJlNi4uZWZmYjcyN2NlNzg1YTRhNzQ1MTA5MjVkMzViYThkZjY0NmE5MTVmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgIldlYlByb2Nlc3MuaCIKICNpbXBvcnQgPENv
cmVUZXh0L0NURm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9BdXRvZmlsbC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9BdXRvZmlsbEVsZW1lbnRzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9EYXRhRGV0ZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50Lmg+CkBAIC0yNzQ5LDYgKzI3NTAsOCBAQCB2b2lkIFdlYlBhZ2U6
OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZv
cm1hdGlvbikKICAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVudC5mb3JtKCk7
CiAgICAgICAgIGlmIChmb3JtKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZm9ybUFjdGlvbiA9
IGZvcm0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmFjdGlvbkF0dHIpOwor
ICAgICAgICBpbmZvcm1hdGlvbi5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgPSAh
IVdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKGVsZW1l
bnQpOworICAgICAgICBpbmZvcm1hdGlvbi5yZXByZXNlbnRpbmdQYWdlVVJMID0gZWxlbWVudC5k
b2N1bWVudCgpLnVybEZvckJpbmRpbmdzKCk7CiAgICAgICAgIGluZm9ybWF0aW9uLmF1dG9jYXBp
dGFsaXplVHlwZSA9IGVsZW1lbnQuYXV0b2NhcGl0YWxpemVUeXBlKCk7CiAgICAgICAgIGluZm9y
bWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LnNob3VsZEF1dG9jb3JyZWN0KCk7CiAgICAg
ICAgIGlmIChlbGVtZW50LmlzUGFzc3dvcmRGaWVsZCgpKQpAQCAtMjgwNiw2ICsyODA5LDE1IEBA
IHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAgIH0KIH0KIAordm9pZCBXZWJQYWdlOjphdXRvZmls
bExvZ2luQ3JlZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3RyaW5nJiBw
YXNzd29yZCkKK3sKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2Rl
KSkgeworICAgICAgICBSZWY8SFRNTElucHV0RWxlbWVudD4gYXNzaXN0ZW5kRWxlbWVudCA9IGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSk7CisgICAgICAgIGF1dG8g
YXV0b2ZpbGxFbGVtZW50cyA9IEF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1l
bnRzKGFzc2lzdGVuZEVsZW1lbnQuZ2V0KCkpOworICAgICAgICBhdXRvZmlsbEVsZW1lbnRzLT5h
dXRvZmlsbCh1c2VybmFtZSwgcGFzc3dvcmQpOworICAgIH0KK30KKwogdm9pZCBXZWJQYWdlOjpz
ZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25NaW5pbXVtTGF5b3V0U2l6ZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRDb25maWd1cmF0aW9uLnNldE1pbmltdW1MYXlv
dXRTaXplKHNpemUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TUhUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1M
SW5wdXRFbGVtZW50LmgKaW5kZXggYTA5MjM3N2IxZGU5MTVmNTY4YTUzMGU5ZTNhZWQzZjBiMzMy
OWRmZi4uNWExMWIxZTgwOGYyMzQ0MjZmMWYxODJhOWFiYTdmYzVhODQ4MzdjMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5oCkBAIC0y
NCw2ICsyNCw5IEBACiAgKi8KIAogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUhUTUxFbGVtZW50
Lmg+CisjaWYgVEFSR0VUX09TX0lQSE9ORQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRUcmFp
dHMuaD4KKyNlbmRpZgogCiBAY2xhc3MgRE9NRmlsZUxpc3Q7CiBAY2xhc3MgRE9NSFRNTEZvcm1F
bGVtZW50OwpAQCAtMzEsNyArMzQsMTEgQEAKIEBjbGFzcyBOU1VSTDsKIAogV0VCS0lUX0NMQVNT
X0FWQUlMQUJMRV9NQUMoMTBfNCkKKyNpZiBUQVJHRVRfT1NfSVBIT05FCitAaW50ZXJmYWNlIERP
TUhUTUxJbnB1dEVsZW1lbnQgOiBET01IVE1MRWxlbWVudDxVSVRleHRJbnB1dFRyYWl0cz4KKyNl
bHNlCiBAaW50ZXJmYWNlIERPTUhUTUxJbnB1dEVsZW1lbnQgOiBET01IVE1MRWxlbWVudAorI2Vu
ZGlmCiBAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICphY2NlcHQ7CiBAcHJvcGVydHkgKGNvcHkp
IE5TU3RyaW5nICphbHQ7CiBAcHJvcGVydHkgQk9PTCBhdXRvZm9jdXMgV0VCS0lUX0FWQUlMQUJM
RV9NQUMoMTBfNik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
SFRNTElucHV0RWxlbWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1M
SW5wdXRFbGVtZW50Lm1tCmluZGV4IDliYzgwM2M1OTU4NTAxYzg2OTA5NDUyMDNmYmEyYTcwOTg1
NzZkMWEuLjlhZWUwMTZkYzcwNGM2YzE0YTk1MGE2ZjhjMjRhZjlmM2NjMjgwOTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCkBA
IC0zMyw2ICszMywyMyBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVBy
aXZhdGUuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisKKy8vIEZJWE1FIDM0NTgz
NjI4OiBTaW1wbHlmeSB0aGlzIG9uY2UgdGhlIFVJS2l0IHdvcmsgaXMgYXZhaWxhYmxlIGluIHRo
ZSBidWlsZC4KKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBUQVJHRVRfT1NfSVBIT05F
CisjaWYgX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdn
ZXN0aW9uLmg+KQorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdn
ZXN0aW9uLmg+CisjZWxzZQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRfUHJpdmF0ZS5oPgor
QGludGVyZmFjZSBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gOiBVSVRleHRT
dWdnZXN0aW9uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICp1c2Vy
bmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICpwYXNzd29yZDsK
KworQGVuZAorI2VuZGlmIC8vIF9faGFzX2luY2x1ZGUoPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNy
ZWRlbnRpYWxzU3VnZ2VzdGlvbi5oPikKKyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RL
KSAmJiBUQVJHRVRfT1NfSVBIT05FCisKKyNpbXBvcnQgPFdlYkNvcmUvQXV0b2ZpbGxFbGVtZW50
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxlTGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1M
RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTY2Niw2
ICs2ODMsMjkgQEAgLSAodm9pZClzZXRWYWx1ZUZvclVzZXI6KE5TU3RyaW5nICopaW5WYWx1ZQog
ICAgIElNUEwtPnNldFZhbHVlRm9yVXNlcihpblZhbHVlKTsKIH0KIAorLSAoQk9PTClhY2NlcHRz
QXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuICEhV2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50czo6
Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoKklNUEwpOworfQorCistIChOU1VSTCAqKXJlcHJlc2Vu
dGluZ1BhZ2VVUkwKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOnNlbGYub3duZXJEb2N1bWVudC5VUkxd
OworfQorCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgVEFSR0VUX09TX0lQSE9ORQor
LSAodm9pZClpbnNlcnRUZXh0U3VnZ2VzdGlvbjooVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNT
dWdnZXN0aW9uICopY3JlZGVudGlhbHNTdWdnZXN0aW9uCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGlmIChpczxXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50PihJTVBMKSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkF1dG9maWxsRWxl
bWVudHM+IGF1dG9maWxsRWxlbWVudHMgPSBXZWJDb3JlOjpBdXRvZmlsbEVsZW1lbnRzOjpjb21w
dXRlQXV0b2ZpbGxFbGVtZW50cygqSU1QTCk7CisgICAgICAgIGF1dG9maWxsRWxlbWVudHMtPmF1
dG9maWxsKGNyZWRlbnRpYWxzU3VnZ2VzdGlvbi51c2VybmFtZSwgY3JlZGVudGlhbHNTdWdnZXN0
aW9uLnBhc3N3b3JkKTsKKyAgICB9Cit9CisjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykgJiYgVEFSR0VUX09TX0lQSE9ORQorCiBAZW5kCiAKIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQqIGNvcmUoRE9NSFRNTElucHV0RWxlbWVudCAqd3JhcHBlcikKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMTUwNzg4NDJjYjc4MTg3ZDViYTNi
YTViN2ZhNWRhMmVhMjM3NjkxLi5lNTVhZDc3ZmYyNTU0YTVhMzZhZDU0ZDJhMzJkMTg3OTVlYjYz
MjgxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTctMDktMTkgIEZyZWRlcmlrIFJpZWRlbCAgPHJpZWRlbEBhcHBs
ZS5jb20+CisKKyAgICAgICAgRXhwb3NlIHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZpZWQg
Zm9ybSBjb250cm9scyBhcyB7TGVnYWN5IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDM5NAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMzMxODM1MDQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9XS1dlYlZp
ZXdBdXRvZmlsbFRlc3RzLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcml2YXRl
VGV4dElucHV0XSk6IFRlc3RpbmcgaGVscGVycy4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOiBBZGRlZCB0ZXN0IGNhc2VzIHRvIHRlc3QgQXV0b0ZpbGwgZm9yIHdlYiB2aWV3cy4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL2lvcy9VSUtpdFNQSS5oOgorCiAyMDE3LTA5LTIxICBKb3Nl
cGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
YWRkIHRoZSBhYmlsaXR5IHRvIHNraXAgYSB0ZXN0MjYyIHRlc3QuCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGFlODk0Mjg3NDI1ZjYzZjdiOTY3NDE0MzBjMTZjOGZlMmViZTYxNGMuLjdiN2Qx
OWE2NGU0MzgwZTY3ZmU2NTgzM2Y4ZTRkMzY2Mjg3NjU5ZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xNjEsNiArMTYxLDcgQEAKIAkJNTEyMEM4M0UxRTY3Njc4RjAwMjVCMjUwIC8qIFdl
YnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjBDODNCMUU2NzRFMzUwMDI1QjI1MCAvKiBX
ZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMuaHRtbCAqLzsgfTsKIAkJNTEzOTNFMjIxNTIzOTUy
RDAwNUYzOUM1IC8qIERPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTM5M0UxRDE1MjM5NDRBMDA1
RjM5QzUgLyogRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcCAqLzsgfTsKIAkJNTE0
MkIyNzMxNTE3QzhDODAwQzMyQjE5IC8qIENvbnRleHRNZW51Q2FuQ29weVVSTC5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNDJCMjcy
MTUxN0M4OTEwMEMzMkIxOSAvKiBDb250ZXh0TWVudUNhbkNvcHlVUkwuaHRtbCAqLzsgfTsKKwkJ
NTE0OTU4QkUxRjc0MjdBQzAwRTg3QkFEIC8qIFdLV2ViVmlld0F1dG9maWxsVGVzdHMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQ5NThCRDFGNzQy
N0FDMDBFODdCQUQgLyogV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbSAqLzsgfTsKIAkJNTE1QkUx
NkYxRDQyOEJCMTAwREQ3QzY4IC8qIFN0b3JlQmxvYlRvQmVEZWxldGVkLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1QkUxNkUxRDQy
ODhGRjAwREQ3QzY4IC8qIFN0b3JlQmxvYlRvQmVEZWxldGVkLmh0bWwgKi87IH07CiAJCTUxNUJF
MTcxMUQ0MjhFNEIwMEREN0M2OCAvKiBTdG9yZUJsb2JUaGVuRGVsZXRlLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1QkUxNzAxRDQyOEJEMTAwREQ3
QzY4IC8qIFN0b3JlQmxvYlRoZW5EZWxldGUubW0gKi87IH07CiAJCTUxNzE0RUI0MUNGOEM3OEMw
MDQ3MjNDNCAvKiBXZWJQcm9jZXNzS2lsbElEQkNsZWFudXAtMS5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzE0RUIyMUNGOEM3NjEw
MDQ3MjNDNCAvKiBXZWJQcm9jZXNzS2lsbElEQkNsZWFudXAtMS5odG1sICovOyB9OwpAQCAtMTI0
Miw2ICsxMjQzLDcgQEAKIAkJNTEzOTNFMUUxNTIzOTQ0QTAwNUYzOUM1IC8qIERPTVdpbmRvd0V4
dGVuc2lvbkJhc2ljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERP
TVdpbmRvd0V4dGVuc2lvbkJhc2ljLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTE0MkIyNzAxNTE3Qzg4QjAwQzMyQjE5IC8qIENvbnRleHRNZW51Q2FuQ29weVVSTC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbnRleHRNZW51Q2FuQ29weVVS
TC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0MkIyNzIxNTE3Qzg5MTAwQzMy
QjE5IC8qIENvbnRleHRNZW51Q2FuQ29weVVSTC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBw
YXRoID0gQ29udGV4dE1lbnVDYW5Db3B5VVJMLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxNDk1OEJEMUY3NDI3QUMwMEU4N0JBRCAvKiBXS1dlYlZpZXdBdXRvZmlsbFRlc3Rz
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxNkUxRDQyODhGRjAwREQ3QzY4IC8qIFN0
b3JlQmxvYlRvQmVEZWxldGVkLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBTdG9y
ZUJsb2JUb0JlRGVsZXRlZC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVC
RTE3MDFENDI4QkQxMDBERDdDNjggLyogU3RvcmVCbG9iVGhlbkRlbGV0ZS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN0b3JlQmxvYlRoZW5EZWxldGUubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzE0RUIyMUNGOEM3NjEwMDQ3MjNDNCAvKiBX
ZWJQcm9jZXNzS2lsbElEQkNsZWFudXAtMS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gIldlYlByb2Nlc3NLaWxsSURCQ2xlYW51cC0xLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjExOSw2ICsyMTIxLDcgQEAKIAkJCQlGNEQ0RjNCNzFFNEUzNkU0MDBCQjI3
NjcgLyogRGF0YUludGVyYWN0aW9uVGVzdHMubW0gKi8sCiAJCQkJNzU2MDkxNzcxOTI1OUM1OTAw
OUVGMDZFIC8qIE1lbW9yeUNhY2hlQWRkSW1hZ2VUb0NhY2hlSU9TLm1tICovLAogCQkJCUY0Njg0
OUJEMUVFRjU4RTQwMEI5MzdGRSAvKiBVSVBhc3RlYm9hcmRUZXN0cy5tbSAqLywKKwkJCQk1MTQ5
NThCRDFGNzQyN0FDMDBFODdCQUQgLyogV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbSAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM0NTMs
NiArMzQ1Niw3IEBACiAJCQkJMkQ0Q0Y4QkQxRDgzNjBDQzAwMDFDRThEIC8qIFdLVGh1bWJuYWls
Vmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQzY4M0RFMUVBMTM0RTgwMDY1MDE4MyAvKiBX
S1VSTFNjaGVtZUhhbmRsZXItMS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxODJDMjJFMUYyQkNF
NTQwMDU5QkE3QyAvKiBXS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0gaW4gU291cmNlcyAqLywK
KwkJCQk1MTQ5NThCRTFGNzQyN0FDMDBFODdCQUQgLyogV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTJFRkYwNkQ3MUQ4QUYzNEEwMDA0QkIzMCAvKiBXS1dlYlZp
ZXdDYW5kaWRhdGVUZXN0cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExNEZDNTg1MUI4OTczOTEw
MEQxMDdFQiAvKiBXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0M0MTdGMzMxRDE5RTE0ODAwQjhFRjUzIC8qIFdLV2ViVmlld0RlZmF1bHROYXZpZ2F0
aW9uRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvaW9zL1dLV2ViVmlld0F1dG9maWxsVGVzdHMubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL2lvcy9XS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUx
MTI4NWVjNDk1Njk0MTUxZTExZjU3Y2ZhMWE1M2RjNjI3ZWUwYjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9XS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1t
CkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgV0tfQVBJX0VOQUJMRUQgJiYgUExBVEZPUk0oSU9TKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKQorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdFdLV2Vi
Vmlldy5oIgorI2ltcG9ydCAiVUlLaXRTUEkuaCIKKworI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5w
dXRUcmFpdHNfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRfUHJpdmF0ZS5o
PgorCisvLyBGSVhNRSAzNDU4MzYyODogU2ltcGx5ZnkgdGhpcyBvbmNlIHRoZSBVSUtpdCB3b3Jr
IGlzIGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQuCisjaWYgX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlL
ZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+KQorI2ltcG9ydCA8VUlLaXQvVUlL
ZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+CisjZWxzZQorI2ltcG9ydCA8VUlL
aXQvVUlUZXh0U3VnZ2VzdGlvbi5oPgorQGludGVyZmFjZSBVSUtleWJvYXJkTG9naW5DcmVkZW50
aWFsc1N1Z2dlc3Rpb24gOiBVSVRleHRTdWdnZXN0aW9uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCBhc3NpZ24pIE5TU3RyaW5nICp1c2VybmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIE5TU3RyaW5nICpwYXNzd29yZDsKKworQGVuZAorI2VuZGlmCisKK3N0YXRpYyBVSUtleWJv
YXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKmNyZWF0ZVVJS2V5Ym9hcmRMb2dpbkNyZWRl
bnRpYWxzU3VnZ2VzdGlvbigpCit7CisgICAgcmV0dXJuIFtbTlNDbGFzc0Zyb21TdHJpbmcoQCJV
SUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24iKSBuZXddIGF1dG9yZWxlYXNlXTsK
K30KKwordHlwZWRlZiBVSVZpZXcgPFVJVGV4dElucHV0UHJpdmF0ZSwgVUlUZXh0SW5wdXRUcmFp
dHNfUHJpdmF0ZSwgVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0ZV9TdGFnaW5nXzM0NTgzNjI4PiAg
QXV0b2ZpbGxDYW5kaWRhdGVWaWV3OworCitAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChBdXRv
ZmlsbFRlc3RIZWxwZXJzKQorCistIChBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKilfcHJpdmF0ZVRl
eHRJbnB1dAoreworICAgIHJldHVybiAoQXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICopW3NlbGYgdmFs
dWVGb3JLZXk6QCJfY3VycmVudENvbnRlbnRWaWV3Il07Cit9CisKK0BlbmQKKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworCitURVNUKFdLV2ViVmlld0F1dG9maWxsVGVzdHMsIFVzZXJuYW1l
QW5kUGFzc3dvcmRGaWVsZCkKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDAp
XTsKKyAgICBBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKmNvbnRlbnRWaWV3ID0gW3dlYlZpZXcgX3By
aXZhdGVUZXh0SW5wdXRdOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmlu
ZzpAIjxpbnB1dCBpZD0ndXNlcicgdHlwZT0nZW1haWwnPjxpbnB1dCBpZD0ncGFzc3dvcmQnIHR5
cGU9J3Bhc3N3b3JkJz4iXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAidXNlci5mb2N1cygpIl07CisgICAgRVhQRUNUX1RSVUUoY29udGVudFZpZXcuYWNjZXB0
c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJwYXNzd29yZC5mb2N1cygpIl07CisgICAgRVhQRUNUX1RSVUUo
Y29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFVJ
S2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqY3JlZGVudGlhbFN1Z2dlc3Rpb24g
PSBjcmVhdGVVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24oKTsKKyAgICBjcmVk
ZW50aWFsU3VnZ2VzdGlvbi51c2VybmFtZSA9IEAiZnJlZGVyaWsiOworICAgIGNyZWRlbnRpYWxT
dWdnZXN0aW9uLnBhc3N3b3JkID0gQCJmYW1vcyI7CisKKyAgICBbY29udGVudFZpZXcgaW5zZXJ0
VGV4dFN1Z2dlc3Rpb246Y3JlZGVudGlhbFN1Z2dlc3Rpb25dOworCisgICAgRVhQRUNUX1dLX1NU
UkVRKGNyZWRlbnRpYWxTdWdnZXN0aW9uLnVzZXJuYW1lLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAidXNlci52YWx1ZSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoY3Jl
ZGVudGlhbFN1Z2dlc3Rpb24ucGFzc3dvcmQsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJwYXNzd29yZC52YWx1ZSJdKTsKKworICAgIFt3ZWJWaWV3IHJlbGVhc2VdOwor
fQorCitURVNUKFdLV2ViVmlld0F1dG9maWxsVGVzdHMsIFVzZXJuYW1lQW5kUGFzc3dvcmRGaWVs
ZFNlcGFyYXRlZEJ5UmFkaW9CdXR0b24pCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9
IFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV07CisgICAgQXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICpjb250ZW50VmlldyA9IFt3ZWJW
aWV3IF9wcml2YXRlVGV4dElucHV0XTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCI8aW5wdXQgaWQ9J3VzZXInIHR5cGU9J2VtYWlsJz48aW5wdXQgdHlwZT0ncmFk
aW8nIG5hbWU9J3JhZGlvX2J1dHRvbicgdmFsdWU9J3JhZGlvJz48aW5wdXQgaWQ9J3Bhc3N3b3Jk
JyB0eXBlPSdwYXNzd29yZCc+Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAInVzZXIuZm9jdXMoKSJdOworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRWaWV3LmFj
Y2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7CisKKyAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQuZm9jdXMoKSJdOworICAgIEVYUEVDVF9U
UlVFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7CisKKyAg
ICBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKmNyZWRlbnRpYWxTdWdnZXN0
aW9uID0gY3JlYXRlVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uKCk7CisgICAg
Y3JlZGVudGlhbFN1Z2dlc3Rpb24udXNlcm5hbWUgPSBAImZyZWRlcmlrIjsKKyAgICBjcmVkZW50
aWFsU3VnZ2VzdGlvbi5wYXNzd29yZCA9IEAiZmFtb3MiOworCisgICAgW2NvbnRlbnRWaWV3IGlu
c2VydFRleHRTdWdnZXN0aW9uOmNyZWRlbnRpYWxTdWdnZXN0aW9uXTsKKworICAgIEVYUEVDVF9X
S19TVFJFUShjcmVkZW50aWFsU3VnZ2VzdGlvbi51c2VybmFtZSwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAInVzZXIudmFsdWUiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVR
KGNyZWRlbnRpYWxTdWdnZXN0aW9uLnBhc3N3b3JkLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAicGFzc3dvcmQudmFsdWUiXSk7CisKKyAgICBbd2ViVmlldyByZWxlYXNl
XTsKK30KKworVEVTVChXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLCBUd29UZXh0RmllbGRzKQorewor
ICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldOworICAgIEF1dG9maWxsQ2FuZGlk
YXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmlldyBfcHJpdmF0ZVRleHRJbnB1dF07CisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPGlucHV0IGlkPSd0ZXh0MScg
dHlwZT0nZW1haWwnPjxpbnB1dCBpZD0ndGV4dDInIHR5cGU9J3RleHQnPiJdOworICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0MS5mb2N1cygpIl07CisgICAg
RVhQRUNUX0ZBTFNFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFs
cyk7CisKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGV4dDIu
Zm9jdXMoKSJdOworICAgIEVYUEVDVF9GQUxTRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxl
ZExvZ2luQ3JlZGVudGlhbHMpOworfQorCitURVNUKFdLV2ViVmlld0F1dG9maWxsVGVzdHMsIFN0
YW5kYWxvbmVQYXNzd29yZEZpZWxkKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldOworICAgIEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmll
dyBfcHJpdmF0ZVRleHRJbnB1dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1M
U3RyaW5nOkAiPGlucHV0IGlkPSdwYXNzd29yZCcgdHlwZT0ncGFzc3dvcmQnPiJdOworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwYXNzd29yZC5mb2N1cygpIl07
CisgICAgRVhQRUNUX1RSVUUoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRl
bnRpYWxzKTsKKworICAgIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqY3Jl
ZGVudGlhbFN1Z2dlc3Rpb24gPSBjcmVhdGVVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dl
c3Rpb24oKTsKKyAgICBjcmVkZW50aWFsU3VnZ2VzdGlvbi51c2VybmFtZSA9IEAiZnJlZGVyaWsi
OworICAgIGNyZWRlbnRpYWxTdWdnZXN0aW9uLnBhc3N3b3JkID0gQCJmYW1vcyI7CisKKyAgICBb
Y29udGVudFZpZXcgaW5zZXJ0VGV4dFN1Z2dlc3Rpb246Y3JlZGVudGlhbFN1Z2dlc3Rpb25dOwor
CisgICAgRVhQRUNUX1dLX1NUUkVRKGNyZWRlbnRpYWxTdWdnZXN0aW9uLnBhc3N3b3JkLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQudmFsdWUiXSk7CisK
KyAgICBbd2ViVmlldyByZWxlYXNlXTsKK30KKworVEVTVChXS1dlYlZpZXdBdXRvZmlsbFRlc3Rz
LCBTdGFuZGFsb25lVGV4dEZpZWxkKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAs
IDUwMCldOworICAgIEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmll
dyBfcHJpdmF0ZVRleHRJbnB1dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1M
U3RyaW5nOkAiPGlucHV0IGlkPSd0ZXh0ZmllbGQnIHR5cGU9J3RleHQnPiJdOworICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0ZmllbGQuZm9jdXMoKSJdOwor
ICAgIEVYUEVDVF9GQUxTRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVu
dGlhbHMpOworCisgICAgW3dlYlZpZXcgcmVsZWFzZV07Cit9CisKK1RFU1QoV0tXZWJWaWV3QXV0
b2ZpbGxUZXN0cywgQWNjb3VudENyZWF0aW9uUGFnZSkKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3
ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXTsKKyAgICBBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKmNvbnRlbnRWaWV3
ID0gW3dlYlZpZXcgX3ByaXZhdGVUZXh0SW5wdXRdOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkSFRNTFN0cmluZzpAIjxpbnB1dCBpZD0ndXNlcicgdHlwZT0nZW1haWwnPjxpbnB1dCBp
ZD0ncGFzc3dvcmQnIHR5cGU9J3Bhc3N3b3JkJz48aW5wdXQgaWQ9J2NvbmZpcm1fcGFzc3dvcmQn
IHR5cGU9J3Bhc3N3b3JkJz4iXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAidXNlci5mb2N1cygpIl07CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRlbnRWaWV3LmFj
Y2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7CisKKyAgICBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQuZm9jdXMoKSJdOworICAgIEVYUEVDVF9G
QUxTRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpOworCisg
ICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImNvbmZpcm1fcGFzc3dv
cmQuZm9jdXMoKSJdOworICAgIEVYUEVDVF9GQUxTRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2Zp
bGxlZExvZ2luQ3JlZGVudGlhbHMpOworCisgICAgW3dlYlZpZXcgcmVsZWFzZV07Cit9CisKKwor
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQg
JiYgUExBVEZPUk0oSU9TKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
aW9zL1VJS2l0U1BJLmgKaW5kZXggZTAyZjUzNjdmMTc2OTg5ZTJiOGU3MTc2YmFhZGYzMTdiOTIy
ZmFiNS4uYThjNGU0Y2IzMWNmMWY2MzdiZDk1ZDk2ZGNiYWE3ZTA1NGU4ODE4MCAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL2lvcy9VSUtpdFNQSS5oCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpZiBQTEFURk9STShJ
T1MpCiAKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0VHJhaXRzLmg+CisKICNpZiBfX0lQSE9O
RV9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDExMDAwMAogQHByb3RvY29sIFVJRHJhZ1Nlc3Np
b247CiBAY2xhc3MgVUlEcmFnSW50ZXJhY3Rpb247CkBAIC0zNSw2ICszNywxMyBAQAogCiAjaW1w
b3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJRHJh
Z0ludGVyYWN0aW9uX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0VHJhaXRz
X1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVGV4dFN1Z2dlc3Rpb24uaD4KKworCitAcHJv
dG9jb2wgVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0ZV9TdGFnaW5nXzM0NTgzNjI4IDxOU09iamVj
dCwgVUlUZXh0SW5wdXRUcmFpdHM+CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJP
T0wgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzOworQGVuZAogCiAjZWxzZQogCkBA
IC01MSw2ICs2MCwxMCBAQCBXVEZfRVhURVJOX0NfRU5ECiBAZW5kCiAjZW5kaWYgLy8gX19JUEhP
TkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMTAwMDAKIAorQHByb3RvY29sIFVJVGV4dElu
cHV0VHJhaXRzX1ByaXZhdGUgPE5TT2JqZWN0LCBVSVRleHRJbnB1dFRyYWl0cz4KK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVu
dGlhbHM7CitAZW5kCisKICNlbmRpZgogCiAjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxM
T1dFRCA+PSAxMTAwMDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321600</attachid>
            <date>2017-09-22 16:07:24 -0700</date>
            <delta_ts>2017-09-25 11:24:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174394-20170922160723.patch</filename>
            <type>text/plain</type>
            <size>46479</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyMzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjVkMGJhN2MwYjI1MDE5
ODRlMTg2NTExYjcwZmM5OWUzMGMwZjcyMy4uYmVlNWMxZjBiNDIzZTU4NzJhMjBhZGU0NzU3YjU1
MjZjNmZmOGQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA5LTE5ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGVkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVu
dHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzQXV0b2ZpbGxhYmxlRWxlbWVudCk6
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBvZiB0eXBlIHRleHQgb3IgZW1haWwuCisg
ICAgICAgIChXZWJDb3JlOjpuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudCk6IFJldHVybnMgdGhlIG5l
eHQgZm9jdXNhYmxlIGVsZW1lbnQgdGhhdCBpcyBhdXRvZmlsbGFibGUuCisgICAgICAgIChXZWJD
b3JlOjpwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1lbnQpOiBSZXR1cm5zIHRoZSBwcmV2aW91cyBm
b2N1c2FibGUgZWxlbWVudCB0aGF0IGlzIGF1dG9maWxsYWJsZS4KKyAgICAgICAgKFdlYkNvcmU6
OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKTogQ29tcHV0ZXMgdGhl
IGF1dG9maWxsIGVsZW1lbnRzICh1c2VybmFtZSAmIHBhc3N3b3JkKQorICAgICAgICBmb3IgYSBn
aXZlbiBpbnB1dCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50czo6
YXV0b2ZpbGwpOiBGaWxscyB0aGUgY3JlZGVudGlhbHMgaW50byB0aGUgcGFpciBvZiB1c2VybmFt
ZS9wYXNzd29yZCBlbGVtZW50cy4KKyAgICAgICAgKiBlZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1l
bnRzLmg6IEFkZGVkLgorCiAyMDE3LTA5LTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgYXNzZXJ0cyBhZ2FpbnN0IGxheW91dCB0aW1lIHJlbmRlciB0
cmVlIG11dGF0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmZjhhZjM5NTcwODMzOTAwM2E0MDgxMjE1ZDVjMmQ2
YWI3MzljZDAwLi4xMzE5ZWRiM2FkMTNjZGIzYWRjNTNhNzE0ZTkwMGZjNWU1YjNlNTIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTA5LTE5ICBGcmVkZXJpayBSaWVkZWwgIDxyaWVk
ZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8gc2V0IHZhbHVlcyBvZiBjbGFz
c2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQsIFdlYktpdH0gU1BJCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzOTQKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oOgorICAg
ICAgICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICBFbmNv
ZGVzIGFkZGl0aW9uYWwgbm9kZSBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGlmIHRoZSBub2RlIGlz
IHBhcnQgb2YgYSBsb2dpbiBzY3JlZW4uCisgICAgICAgIChXZWJLaXQ6OkFzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uOjpkZWNvZGUpOgorICAgICAgICBEZWNvZGVzIHRoZSBhZGRpdGlvbmFsIGFzc2lz
dGVkIG5vZGUgaW5mb3JtYXRpb24uCisgICAgICAgICogU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9y
bWF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHNdKToKKyAgICAgICAgRGV0ZXJtaW5l
cyBpZiB0aGUgV0tDb250ZW50VmlldyBzaG93cyBhIGxvZ2luIHNjcmVlbi4KKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyByZXByZXNlbnRpbmdQYWdlVXJsXSk6CisgICAgICAgIFJldHVybnMgdGhl
IFVSTCBvZiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCB3ZWIgcGFnZS4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBpbnNlcnRUZXh0U3VnZ2VzdGlvbjpdKToKKyAgICAgICAgSW5zZXJ0cyB0aGUgbG9n
aW4gY3JlZGVudGlhbHMgaW50byB0aGUgV2ViIFZpZXcuCisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3Rh
cnRBc3Npc3RpbmdOb2RlKToKKyAgICAgICAgVHJhbnNmZXIgdGhlIGFkZGl0aW9uYWwgYXNzaXN0
ZWRub2RlIGluZm9ybWF0aW9uIChhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgYW5k
IHJlcHJlc2VudGluZ1BhZ2VVcmwpLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmFj
Y2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk6CisgICAgICAgIFJldHVybnMgaWYgdGhl
IFdlYiBWaWV3IHNob3dzIGEgbG9naW4gc2NyZWVuLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnJlcHJlc2VudGluZ1BhZ2VVcmwpOgorICAgICAgICBSZXR1cm5zIHRoZSBXZWIgVmll
dydzIFVSTC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphdXRvZmlsbExvZ2luQ3Jl
ZGVudGlhbHMpOgorICAgICAgICBJbnNlcnQgdGhlIGNyZWRlbnRpYWxzIGludG8gdGhlIFdlYiBW
aWV3LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbik6IFRyYW5zcG9ydHMgdGhlIGluZm9ybWF0aW9u
IGlmIHRoZSBjdXJyZW50bHkKKyAgICAgICAgaGlnaGxpZ2h0ZWQgbm9kZSBhY2NlcHRzIGF1dG9m
aWxsZWQgbG9naW4gY3JlZGVudGlhbHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmF1dG9m
aWxsTG9naW5DcmVkZW50aWFscyk6IEZpbGxzIHRoZSBsb2dpbiBjcmVkZW50aWFscyBpbnRvIHRo
ZQorICAgICAgICBXZWJQYWdlLgorCiAyMDE3LTA5LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgVXNlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lc3RhbXAgZm9yIGV2
ZW50IHRpbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCAxMGZjMTY2ODNmNzNlZjMx
MWViMTViOThkOWFkY2RhYWIyNzkzMWY1Li40NTI4OTM4YTlhMTljZmNhMzdkY2JjMWIyYmQ2NTVm
NDhiNTgyZDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTctMDktMTkgIEZyZWRlcmlrIFJpZWRlbCAgPHJpZWRlbEBhcHBsZS5jb20+CisKKyAgICAg
ICAgRXhwb3NlIHdheSB0byBzZXQgdmFsdWVzIG9mIGNsYXNzaWZpZWQgZm9ybSBjb250cm9scyBh
cyB7TGVnYWN5IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDM5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMx
ODM1MDQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBET00vRE9NSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIERPTS9ET01IVE1MSW5wdXRF
bGVtZW50Lm1tOgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGFjY2VwdHNBdXRvZmls
bGVkTG9naW5DcmVkZW50aWFsc10pOgorICAgICAgICBEZXRlcm1pbmVzIGlmIHRoaXMgSFRNTElu
cHV0RWxlbWVudCBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgorICAgICAgICAoLVtET01IVE1M
SW5wdXRFbGVtZW50IHJlcHJlc2VudGluZ1BhZ2VVcmxdKToKKyAgICAgICAgUmV0dXJucyB0aGUg
d2VicGFnZSdzIFVSTCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgaW4gdGhlIFdlYiBWaWV3
LgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGluc2VydFRleHRTdWdnZXN0aW9uOl0p
OgorICAgICAgICBJbnNlcnRzIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlIFdlYiBWaWV3Lgor
CiAyMDE3LTA5LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
VXNlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lc3RhbXAgZm9yIGV2ZW50IHRpbWUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZjE0NDVl
NjM3MGYwNmU2MzVjMzdhOTdjYTY1MGE4ZWQ0ODZlNjIzLi42ODMxNDQxOTJmNzVmMzc2NWQzNGY4
MDA3ZTZhYzQ3ZGExMzcwM2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjk1LDYgKzIyOTUsOCBAQAogCQk1MTYyQzdGNDEx
Rjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjIxMUY3N0VGQTAwNjEyRUZFIC8qIFNj
aGVtZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNTE2MkM3RjUxMUY3N0VGQjAwNjEyRUZFIC8qIFNj
aGVtZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTY2RDNDRDFFOEVE
NDhGMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAvKiBTdG9yYWdlVHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUx
Njk5RUUzMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk5RUUxMUY2MDhDRDUwMEQ1
N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNwcCAqLzsgfTsKKwkJNTE2OTlFRTQxRjYwOENENTAw
RDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk5RUUyMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVs
ZW1lbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTE2QkI3OTQwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZCQjc5MjBDRTkx
RTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJNTE2QzYyMjAx
OTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZDNjIxRDE5NTBENDg3MDAzMzdFNzUgLyogR2Ft
ZXBhZEV2ZW50LmNwcCAqLzsgfTsKIAkJNTE2QzYyMjExOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVw
YWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE2QzYyMUUxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5oICovOyB9OwpAQCAtMTAx
OTUsNiArMTAxOTcsOCBAQAogCQk1MTY0NUI1MzFCOUY4ODlCMDBGNzg5Q0UgLyogSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlZlcnNp
b25DaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTY0NUI1NDFC
OUY4OEU4MDBGNzg5Q0UgLyogSURCQ3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IElEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAvKiBTdG9yYWdlVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTY5OUVFMTFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBdXRvZmlsbEVsZW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE2OTlFRTIxRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVu
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b2ZpbGxFbGVtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTZCQjc5MjBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHJlZVdhbGtl
ckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNkM2MjFEMTk1MEQ0
ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR2FtZXBhZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE2QzYyMUUxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHYW1lcGFkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4Mzg4LDYgKzE4MzkyLDggQEAKIAkJNDQzMjkyQzEwRUJBNkQ3MzAwRTYy
MDE2IC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNTE2OTlFRTExRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuY3BwICovLAor
CQkJCTUxNjk5RUUyMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmggKi8sCiAJ
CQkJRDBCRDRGNUExNDA4ODUwRjAwNjgzOUI2IC8qIERpY3RhdGlvbkNvbW1hbmRJT1MuY3BwICov
LAogCQkJCUQwQkQ0RjVCMTQwODg1MEYwMDY4MzlCNiAvKiBEaWN0YXRpb25Db21tYW5kSU9TLmgg
Ki8sCiAJCQkJRkVEMTNEMzkwQ0VBOTM0NjAwRDg5NDY2IC8qIEVkaXRvcklPUy5tbSAqLywKQEAg
LTI3MTYyLDYgKzI3MTY4LDcgQEAKIAkJCQlBNUE3QUE0MzEzMkYwRUNDMDBEM0EzQzIgLyogQXV0
b2NhcGl0YWxpemVUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxODQzRkUxQzhCNzI4MzAw
MkVCOTczIC8qIEF1dG9maWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzFFOTcyODFBOUY5ODM0
MDA3QkYwRkIgLyogQXV0b0ZpbGxCdXR0b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MTY5OUVFNDFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzlENDY3MDUxRTYwQzQ2NTAwODE5NUZCIC8qIEF1dG9wbGF5RXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ1ODMwRDRFMTY3OUI0RjgwMEFDRjhDMyAvKiBBdXRvc2Nyb2xsQ29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEUwQTE1NEYwOTAwMEE0MjM0IC8q
IEF1dG9UYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzgzMSw2ICsyNzgzOCw3IEBA
CiAJCQkJODQ3MzBEODkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFU3BlY3VsYXJMaWdodGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDEyOUM5OTcxRjU5Qjk2MzAwOUQ3NDAzIC8qIEZldGNoQm9keVNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEMTI5REIxRjNEMTQzODAwRDE1RTQ3IC8qIEZl
dGNoSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2MDIz
IC8qIEZldGNoSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQUQ3NTNB
MUNFRjZCRDEwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdD
RTE5MTREMUYyQTlBRkIwMDI3MkY3OCAvKiBGZXRjaFJlZmVycmVyUG9saWN5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk3Q0UxOTE1QTFGMkE5QjM0MDAyNzJGNzggLyogRmV0Y2hSZXF1ZXN0Q2FjaGUu
aCBpbiBIZWFkZXJzICovLApAQCAtMzEzMjcsNiArMzEzMzUsNyBAQAogCQkJCUE1RjZFMTZCMTMy
RUQ0NkUwMDhFREFFMyAvKiBBdXRvY2FwaXRhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QzE4NDNGRDFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0MxRTk3MjcxQTlGOTgzNDAwN0JGMEZCIC8qIEF1dG9GaWxsQnV0dG9uRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1MTY5OUVFMzFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxF
bGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NTgzMEQ0RDE2NzlCNEY4MDBBQ0Y4QzMg
LyogQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkYwNTAw
QTE1NEYwOTAwMEE0MjM0IC8qIEF1dG9UYWJsZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDREVDQTg5QTFFREY0NDdEMDBEQ0IwOEIgLyogQVZBc3NldFRyYWNrVXRpbGl0aWVzLm1tIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRv
ZmlsbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxsRWxl
bWVudHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0ZjUwOGI0NWM1MWQwMWVhMzc3MWMyMmFiZTViZTU1MjI2
OGNjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRv
ZmlsbEVsZW1lbnRzLmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBdXRvZmlsbEVsZW1lbnRzLmgiCisKKyNpbmNsdWRlICJG
b2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGlubGluZSBib29sIGlzQXV0b2ZpbGxhYmxlRWxlbWVudChFbGVtZW50JiBu
b2RlKQoreworICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gaW5wdXRFbGVtZW50ID0gJmRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KG5vZGUpOworICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkg
fHwgaW5wdXRFbGVtZW50LT5pc0VtYWlsRmllbGQoKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQ
dHI8SFRNTElucHV0RWxlbWVudD4gbmV4dEF1dG9maWxsYWJsZUVsZW1lbnQoTm9kZSogc3RhcnRO
b2RlLCBGb2N1c0NvbnRyb2xsZXImIGZvY3VzQ29udHJvbGxlcikKK3sKKyAgICBpZiAoIWlzPEVs
ZW1lbnQ+KHN0YXJ0Tm9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRy
PEVsZW1lbnQ+IG5leHRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oc3RhcnROb2RlKTsKKyAg
ICBkbyB7CisgICAgICAgIG5leHRFbGVtZW50ID0gZm9jdXNDb250cm9sbGVyLm5leHRGb2N1c2Fi
bGVFbGVtZW50KCpuZXh0RWxlbWVudC5nZXQoKSk7CisgICAgfSB3aGlsZSAobmV4dEVsZW1lbnQg
JiYgIWlzQXV0b2ZpbGxhYmxlRWxlbWVudCgqbmV4dEVsZW1lbnQuZ2V0KCkpKTsKKworICAgIGlm
ICghbmV4dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuICZk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbmV4dEVsZW1lbnQpOworfQorCitzdGF0aWMgaW5s
aW5lIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcmV2aW91c0F1dG9maWxsYWJsZUVsZW1lbnQo
Tm9kZSogc3RhcnROb2RlLCBGb2N1c0NvbnRyb2xsZXImIGZvY3VzQ29udHJvbGxlcikKK3sKKyAg
ICBpZiAoIWlzPEVsZW1lbnQ+KHN0YXJ0Tm9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgUmVmUHRyPEVsZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KHN0YXJ0Tm9kZSk7CisgICAgZG8geworICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSBmb2N1c0Nv
bnRyb2xsZXIucHJldmlvdXNGb2N1c2FibGVFbGVtZW50KCpwcmV2aW91c0VsZW1lbnQuZ2V0KCkp
OworICAgIH0gd2hpbGUgKHByZXZpb3VzRWxlbWVudCAmJiAhaXNBdXRvZmlsbGFibGVFbGVtZW50
KCpwcmV2aW91c0VsZW1lbnQuZ2V0KCkpKTsKKworICAgIGlmICghcHJldmlvdXNFbGVtZW50KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gJmRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCpwcmV2aW91c0VsZW1lbnQpOworfQorCitBdXRvZmlsbEVsZW1lbnRzOjpB
dXRvZmlsbEVsZW1lbnRzKFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiB1c2VybmFtZSwgUmVmUHRy
PEhUTUxJbnB1dEVsZW1lbnQ+IHBhc3N3b3JkKQorICAgIDogbV91c2VybmFtZSh1c2VybmFtZSkK
KyAgICAsIG1fcGFzc3dvcmQocGFzc3dvcmQpCit7Cit9CisKK3N0ZDo6b3B0aW9uYWw8QXV0b2Zp
bGxFbGVtZW50cz4gQXV0b2ZpbGxFbGVtZW50czo6Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoUmVm
PEhUTUxJbnB1dEVsZW1lbnQ+IHN0YXJ0KQoreworICAgIGlmICghc3RhcnQtPmRvY3VtZW50KCku
cGFnZSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIEZvY3VzQ29udHJvbGxl
ciYgZm9jdXNDb250cm9sbGVyID0gc3RhcnQtPmRvY3VtZW50KCkucGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKTsKKyAgICBpZiAoc3RhcnQtPmlzUGFzc3dvcmRGaWVsZCgpKSB7CisgICAgICAgIFJl
ZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcmV2aW91c0VsZW1lbnQgPSBwcmV2aW91c0F1dG9maWxs
YWJsZUVsZW1lbnQoc3RhcnQucHRyKCksIGZvY3VzQ29udHJvbGxlcik7CisgICAgICAgIFJlZlB0
cjxIVE1MSW5wdXRFbGVtZW50PiBuZXh0RWxlbWVudCA9IG5leHRBdXRvZmlsbGFibGVFbGVtZW50
KHN0YXJ0LnB0cigpLCBmb2N1c0NvbnRyb2xsZXIpOworICAgICAgICBib29sIGhhc0R1cGxpY2F0
ZVBhc3N3b3JkRWxlbWVudHMgPSAobmV4dEVsZW1lbnQgJiYgbmV4dEVsZW1lbnQtPmlzUGFzc3dv
cmRGaWVsZCgpKSB8fCAocHJldmlvdXNFbGVtZW50ICYmIHByZXZpb3VzRWxlbWVudC0+aXNQYXNz
d29yZEZpZWxkKCkpOworICAgICAgICBpZiAoaGFzRHVwbGljYXRlUGFzc3dvcmRFbGVtZW50cykK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgaWYgKHByZXZpb3Vz
RWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PigqcHJldmlvdXNFbGVtZW50KSkgeworICAg
ICAgICAgICAgaWYgKHByZXZpb3VzRWxlbWVudC0+aXNUZXh0RmllbGQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQXV0b2ZpbGxFbGVtZW50cyhwcmV2aW91c0VsZW1lbnQsIHN0YXJ0LnB0cigp
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVt
ZW50PiBuZXh0RWxlbWVudCA9IG5leHRBdXRvZmlsbGFibGVFbGVtZW50KHN0YXJ0LnB0cigpLCBm
b2N1c0NvbnRyb2xsZXIpOworICAgICAgICBpZiAobmV4dEVsZW1lbnQgJiYgaXM8SFRNTElucHV0
RWxlbWVudD4oKm5leHRFbGVtZW50KSkgeworICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50LT5p
c1Bhc3N3b3JkRmllbGQoKSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVt
ZW50PiBlbGVtZW50QWZ0ZXJuZXh0RWxlbWVudCA9IG5leHRBdXRvZmlsbGFibGVFbGVtZW50KG5l
eHRFbGVtZW50LmdldCgpLCBmb2N1c0NvbnRyb2xsZXIpOworICAgICAgICAgICAgICAgIGJvb2wg
aGFzRHVwbGljYXRlUGFzc3dvcmRFbGVtZW50cyA9IGVsZW1lbnRBZnRlcm5leHRFbGVtZW50ICYm
IGVsZW1lbnRBZnRlcm5leHRFbGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaGFzRHVwbGljYXRlUGFzc3dvcmRFbGVtZW50cykKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICAgICAgICAgIHJldHVybiBBdXRvZmls
bEVsZW1lbnRzKHN0YXJ0LnB0cigpLCBuZXh0RWxlbWVudCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhcnQtPmlzUGFzc3dvcmRGaWVsZCgpKSB7CisgICAg
ICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcmV2aW91c0VsZW1lbnQgPSBwcmV2aW91c0F1
dG9maWxsYWJsZUVsZW1lbnQoc3RhcnQucHRyKCksIGZvY3VzQ29udHJvbGxlcik7CisgICAgICAg
IFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBuZXh0RWxlbWVudCA9IG5leHRBdXRvZmlsbGFibGVF
bGVtZW50KHN0YXJ0LnB0cigpLCBmb2N1c0NvbnRyb2xsZXIpOworICAgICAgICBpZiAoIXByZXZp
b3VzRWxlbWVudCAmJiAhbmV4dEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gQXV0b2ZpbGxF
bGVtZW50cyhudWxscHRyLCBzdGFydC5wdHIoKSk7CisgICAgfQorICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Cit9CisKK3ZvaWQgQXV0b2ZpbGxFbGVtZW50czo6YXV0b2ZpbGwoU3RyaW5nIHVzZXJu
YW1lLCBTdHJpbmcgcGFzc3dvcmQpCit7CisgICAgaWYgKG1fdXNlcm5hbWUpIHsKKyAgICAgICAg
bV91c2VybmFtZS0+c2V0VmFsdWVGb3JVc2VyKHVzZXJuYW1lKTsKKyAgICAgICAgbV91c2VybmFt
ZS0+c2V0QXV0b0ZpbGxlZCgpOworICAgIH0KKyAgICBpZiAobV9wYXNzd29yZCkgeworICAgICAg
ICBtX3Bhc3N3b3JkLT5zZXRWYWx1ZUZvclVzZXIocGFzc3dvcmQpOworICAgICAgICBtX3Bhc3N3
b3JkLT5zZXRBdXRvRmlsbGVkKCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRz
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTk5N2VkODk4Mjk2N2VjMWQwMGVkOTEzM2Y0ZmQyN2ZlNDQ0ODczYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMuaApA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdXRvZmlsbEVsZW1lbnRzIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgc3RkOjpvcHRpb25hbDxBdXRvZmlsbEVsZW1lbnRzPiBjb21wdXRlQXV0b2ZpbGxFbGVt
ZW50cyhSZWY8SFRNTElucHV0RWxlbWVudD4pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXV0
b2ZpbGwoU3RyaW5nLCBTdHJpbmcpOworcHJpdmF0ZToKKyAgICBBdXRvZmlsbEVsZW1lbnRzKFJl
ZlB0cjxIVE1MSW5wdXRFbGVtZW50PiwgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+KTsKKyAgICBS
ZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbV91c2VybmFtZTsKKyAgICBSZWZQdHI8SFRNTElucHV0
RWxlbWVudD4gbV9wYXNzd29yZDsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCmluZGV4IDM0MDIwZTA4ZWIwNjEyOTQx
MDI3ZWYxOGFmMjhhMmI1YzJiZGY5NzkuLjk0N2NhYWZiMjIyYmJhYTg5ODNkMWM0NmQxNjJkZTI3
MDRkNjgwMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtp
dFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBA
IC00Myw2ICs0MywxNyBAQAogI2ltcG9ydCA8VUlLaXQvVUlJbnRlcmZhY2VfUHJpdmF0ZS5oPgog
I2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZEltcGwuaD4KICNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9h
cmRJbnRsLmg+CisjaWYgX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVu
dGlhbHNTdWdnZXN0aW9uLmg+KQorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVu
dGlhbHNTdWdnZXN0aW9uLmg+CisjZWxzZQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRfUHJp
dmF0ZS5oPgorQGludGVyZmFjZSBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24g
OiBVSVRleHRTdWdnZXN0aW9uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3Ry
aW5nICp1c2VybmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICpw
YXNzd29yZDsKKworQGVuZAorI2VuZGlmCiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkX1ByaXZh
dGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXJfUHJpdmF0
ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlQZXJpcGhlcmFsSG9zdC5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwCmluZGV4IDY2YzlmMmE0MjEy
NTgxOWM4YjY4ZWI2OTZjOTFiMzMwMWQ5YzBmYjEuLjQyMzZlMDkwOGJkMzNmNzg5NTdjYmNhOGY3
Y2EwYTIzOWE1N2ZhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5v
ZGVJbmZvcm1hdGlvbi5jcHAKQEAgLTg2LDYgKzg2LDggQEAgdm9pZCBBc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbjo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVy
IDw8IHZhbHVlOwogICAgIGVuY29kZXIgPDwgdmFsdWVBc051bWJlcjsKICAgICBlbmNvZGVyIDw8
IHRpdGxlOworICAgIGVuY29kZXIgPDwgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxz
OworICAgIGVuY29kZXIgPDwgcmVwcmVzZW50aW5nUGFnZVVSTDsKICAgICBlbmNvZGVyLmVuY29k
ZUVudW0oYXV0b2ZpbGxGaWVsZE5hbWUpOwogfQogCkBAIC0xNjAsNiArMTYyLDEyIEBAIGJvb2wg
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIEFz
c2lzdGVkTm9kZUluZm9ybWF0CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudGl0bGUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZXByZXNlbnRpbmdQYWdlVVJM
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0o
cmVzdWx0LmF1dG9maWxsRmllbGROYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaAppbmRleCA2ODI3
YmU3ZDg0NTI1MmJlY2Q0NTUzMjI0ZmY5ODU0MzRiNzcyMjgxLi4wOGE5ZjcyNGU0MmQ1OWM2ODk4
NmI1NWM1OGFhZDVkYThlOTIxZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9B
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lz
dGVkTm9kZUluZm9ybWF0aW9uLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0F1dG9jYXBpdGFsaXplVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dG9maWxsLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0x
MDksNiArMTEwLDggQEAgc3RydWN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uIHsKICAgICBTdHJp
bmcgdmFsdWU7CiAgICAgZG91YmxlIHZhbHVlQXNOdW1iZXIgeyAwIH07CiAgICAgU3RyaW5nIHRp
dGxlOworICAgIGJvb2wgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIHsgZmFsc2Ug
fTsKKyAgICBXZWJDb3JlOjpVUkwgcmVwcmVzZW50aW5nUGFnZVVSTDsKICAgICBXZWJDb3JlOjpB
dXRvZmlsbEZpZWxkTmFtZSBhdXRvZmlsbEZpZWxkTmFtZSB7IFdlYkNvcmU6OkF1dG9maWxsRmll
bGROYW1lOjpOb25lIH07CiAKICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYjU2NGNkYzM1ODMzZmU3
NzU2YzFlZWYzYjcwZGVkN2U4MDFlMDYyZi4uMzgwMWE0MTVmYzdlMTMwZTQ4ZjdlNTUxNzY5NjEy
OWZiZjA4Nzk5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTc5
LDYgKzc5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVudS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dENoZWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0R3JhbnVs
YXJpdHkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbi5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgpAQCAtNTU5LDYgKzU2MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dElzU2Nyb2xsaW5nT3Jab29taW5nKGJvb2wpOwogICAgIHZvaWQgcmVxdWVzdFJlY3RzRm9yR3Jh
bnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgdWlu
dDMyX3Qgb2Zmc2V0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNl
bGVjdGlvblJlY3Q+JiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgcmVxdWVz
dFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3Ry
aW5nJiwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25S
ZWN0PiYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKKyAgICBib29sIGFjY2VwdHNBdXRvZmls
bGVkTG9naW5DcmVkZW50aWFscygpOworICAgIFdlYkNvcmU6OlVSTCByZXByZXNlbnRpbmdQYWdl
VVJMKCk7CisgICAgdm9pZCBhdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1
c2VybmFtZSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCk7CiAjaWYgRU5BQkxFKERBVEFfSU5URVJB
Q1RJT04pCiAgICAgdm9pZCBkaWRQZXJmb3JtRGF0YUludGVyYWN0aW9uQ29udHJvbGxlck9wZXJh
dGlvbihib29sIGhhbmRsZWQpOwogICAgIHZvaWQgZGlkSGFuZGxlU3RhcnREYXRhSW50ZXJhY3Rp
b25SZXF1ZXN0KGJvb2wgc3RhcnRlZCk7CkBAIC0xOTg4LDYgKzE5OTIsOCBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9oYXNEZWZlcnJlZFN0YXJ0QXNzaXN0aW5nTm9kZSB7IGZhbHNlIH07CiAgICAg
c3RkOjp1bmlxdWVfcHRyPE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzPiBtX2RlZmVycmVkTm9kZUFz
c2lzdGFuY2VBcmd1bWVudHM7CiAgICAgYm9vbCBtX2ZvcmNlQWx3YXlzVXNlclNjYWxhYmxlIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIHsg
ZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpVUkwgbV9yZXByZXNlbnRpbmdQYWdlVVJMOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlldy5tbQppbmRleCBkNjFjZWRmYzE0ZTI2ZWM0ODNlMGU5MGMxODYyN2Yy
MzQxZTk1MGMzLi42ODVlMzk0NjQ1Zjc3YjgwMDhkNzg4YWQ5NTU5MmQ2NGNiOWViYTFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQpAQCAtMjU4LDYg
KzI1OCwxNiBAQCAtIChXZWJQYWdlUHJveHkqKXBhZ2UKICAgICByZXR1cm4gX3BhZ2UuZ2V0KCk7
CiB9CiAKKy0gKEJPT0wpYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzCit7CisgICAg
cmV0dXJuIF9wYWdlLT5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKTsKK30KKwor
LSAoTlNVUkwgKilyZXByZXNlbnRpbmdQYWdlVVJMCit7CisgICAgcmV0dXJuIF9wYWdlLT5yZXBy
ZXNlbnRpbmdQYWdlVVJMKCk7Cit9CisKIC0gKHZvaWQpd2lsbE1vdmVUb1dpbmRvdzooVUlXaW5k
b3cgKiluZXdXaW5kb3cKIHsKICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqZGVmYXVsdENlbnRl
ciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmlu
ZGV4IDBmOWQyMWMxNzgxNjdhNjZjZWViNTAwODk2YzA2NTk0Njk1OTE3MjEuLjkyOTE3NjRmYjZi
ZmIxN2JiY2M5MTUzZjViYzYzNWNkY2I1YWY3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMjk3Niwx
MyArMjk3NiwyMCBAQCAtICh2b2lkKWVuZFNlbGVjdGlvbkNoYW5nZQogewogICAgIFtzZWxmLmlu
cHV0RGVsZWdhdGUgc2VsZWN0aW9uRGlkQ2hhbmdlOnNlbGZdOwogfQotICAgIAorCisjaWYgVVNF
KEFQUExFX0lOVEVSTkFMX1NESykKIC0gKHZvaWQpaW5zZXJ0VGV4dFN1Z2dlc3Rpb246KFVJVGV4
dFN1Z2dlc3Rpb24gKil0ZXh0U3VnZ2VzdGlvbgogeworICAgIC8vIEZJWE1FOiBSZXBsYWNlIE5T
Q2xhc3NGcm9tU3RyaW5nIHdpdGggYWN0dWFsIGNsYXNzIGFzIHNvb24gYXMgVUlLaXQgc3VibWl0
dGVkIHRoZSBuZXcgY2xhc3MgaW50byB0aGUgaU9TIFNESy4KKyAgICBpZiAoW3RleHRTdWdnZXN0
aW9uIGlzS2luZE9mQ2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJVSUtleWJvYXJkTG9naW5DcmVk
ZW50aWFsc1N1Z2dlc3Rpb24iKV0pIHsKKyAgICAgICAgX3BhZ2UtPmF1dG9maWxsTG9naW5DcmVk
ZW50aWFscyhbKFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqKXRleHRTdWdn
ZXN0aW9uIHVzZXJuYW1lXSwgWyhVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24g
Kil0ZXh0U3VnZ2VzdGlvbiBwYXNzd29yZF0pOworICAgICAgICByZXR1cm47CisgICAgfQogICAg
IGlkIDxfV0tJbnB1dERlbGVnYXRlPiBpbnB1dERlbGVnYXRlID0gW193ZWJWaWV3IF9pbnB1dERl
bGVnYXRlXTsKICAgICBpZiAoW2lucHV0RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihfd2ViVmlldzppbnNlcnRUZXh0U3VnZ2VzdGlvbjppbklucHV0U2Vzc2lvbjopXSkKICAg
ICAgICAgW2lucHV0RGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgaW5zZXJ0VGV4dFN1Z2dlc3Rp
b246dGV4dFN1Z2dlc3Rpb24gaW5JbnB1dFNlc3Npb246X2Zvcm1JbnB1dFNlc3Npb24uZ2V0KCld
OwogfQorI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAKIC0gKE5TU3RyaW5nICop
dGV4dEluUmFuZ2U6KFVJVGV4dFJhbmdlICopcmFuZ2UKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IDQ3MjhlMGRmZmUxMGM1ZmY3Yzcw
N2UwNGE4MzE4MDRhZmJiZTJkMDUuLmQzZTY3ZDdlMzUzOTI4MTVhMTM1MWFjYjFjNDZkMzE2ZTQ3
YmE1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJv
eHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQpAQCAtODkxLDYgKzg5MSw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRHZXRUYXBIaWdo
bGlnaHRHZW9tZXRyaWVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yCiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05vZGUoY29uc3QgQXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24mIGluZm9ybWF0aW9uLCBib29sIHVzZXJJc0ludGVyYWN0aW5nLCBib29sIGJsdXJQcmV2
aW91c05vZGUsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKIHsKKyAgICBtX2FjY2VwdHNBdXRv
ZmlsbGVkTG9naW5DcmVkZW50aWFscyA9IGluZm9ybWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9n
aW5DcmVkZW50aWFsczsKKyAgICBtX3JlcHJlc2VudGluZ1BhZ2VVUkwgPSBpbmZvcm1hdGlvbi5y
ZXByZXNlbnRpbmdQYWdlVVJMOwogICAgIEFQSTo6T2JqZWN0KiB1c2VyRGF0YU9iamVjdCA9IHBy
b2Nlc3MoKS50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQo
KTsKICAgICBpZiAobV9lZGl0b3JTdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkgewogICAg
ICAgICBtX2RlZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVl
PE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzPihOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cyB7IGluZm9y
bWF0aW9uLCB1c2VySXNJbnRlcmFjdGluZywgYmx1clByZXZpb3VzTm9kZSwgdXNlckRhdGFPYmpl
Y3QgfSk7CkBAIC05MTAsNiArOTEyLDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdG9wQXNzaXN0
aW5nTm9kZSgpCiAgICAgbV9wYWdlQ2xpZW50LnN0b3BBc3Npc3RpbmdOb2RlKCk7CiB9CiAKK2Jv
b2wgV2ViUGFnZVByb3h5OjphY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKQorewor
ICAgIHJldHVybiBtX2FjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKK30KKworV2Vi
Q29yZTo6VVJMIFdlYlBhZ2VQcm94eTo6cmVwcmVzZW50aW5nUGFnZVVSTCgpCit7CisgICAgcmV0
dXJuIG1fcmVwcmVzZW50aW5nUGFnZVVSTDsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmF1dG9m
aWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBjb25zdCBTdHJpbmcm
IHBhc3N3b3JkKQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QXV0
b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKHVzZXJuYW1lLCBwYXNzd29yZCksIG1fcGFnZUlEKTsKK30K
Kwogdm9pZCBXZWJQYWdlUHJveHk6OnNob3dJbnNwZWN0b3JIaWdobGlnaHQoY29uc3QgV2ViQ29y
ZTo6SGlnaGxpZ2h0JiBoaWdobGlnaHQpCiB7CiAgICAgbV9wYWdlQ2xpZW50LnNob3dJbnNwZWN0
b3JIaWdobGlnaHQoaGlnaGxpZ2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAppbmRleCBiYjFmNTEyNmQ2YmY0Mjk5YTM5Njc5ZTI1MWQzODFhZTQ0ZGQ3NDg0
Li5iYWIyMDJlNzc2ZTU4ZDQ0YTk3OWZhYWIwZDYxOWFjYmZiMWEyMDFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01NzYsNiArNTc2LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc3RvcEludGVyYWN0aW9uKCk7CiAgICAgdm9pZCBwZXJmb3JtQWN0aW9u
T25FbGVtZW50KHVpbnQzMl90IGFjdGlvbik7CiAgICAgdm9pZCBmb2N1c05leHRBc3Npc3RlZE5v
ZGUoYm9vbCBpc0ZvcndhcmQsIENhbGxiYWNrSUQpOworICAgIHZvaWQgYXV0b2ZpbGxMb2dpbkNy
ZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0QXNz
aXN0ZWROb2RlVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVW
YWx1ZUFzTnVtYmVyKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZElu
ZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4K
aW5kZXggYjAxNzY0NzkzZDM5MzAxYmEzYzQyZTlmM2Y2OTdiMDE2NGEwMTY2NC4uYmNiYmQwNTI4
M2I2YzU5MTRhMTNmNTc3NWUxOThkMmE1MGViMzk1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC04NCw2ICs4NCw3
IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFBlcmZvcm1BY3Rp
b25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9uKQogICAgIEZvY3VzTmV4dEFzc2lzdGVkTm9kZShi
b29sIGlzRm9yd2FyZCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgU2V0QXNz
aXN0ZWROb2RlVmFsdWUoU3RyaW5nIHZhbHVlKQorICAgIEF1dG9maWxsTG9naW5DcmVkZW50aWFs
cyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkKICAgICBTZXRBc3Npc3RlZE5vZGVW
YWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAgICBTZXRBc3Npc3RlZE5vZGVTZWxlY3RlZElu
ZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCiAgICAgQXBw
bGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZGJhZmExNWY4N2JhNDA3N2E3YTc1
ZmFkZGYzODVkZjQyNDM4OGJlNi4uZWZmYjcyN2NlNzg1YTRhNzQ1MTA5MjVkMzViYThkZjY0NmE5
MTVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgIldlYlByb2Nlc3MuaCIKICNp
bXBvcnQgPENvcmVUZXh0L0NURm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9BdXRvZmlsbC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9BdXRvZmlsbEVsZW1lbnRzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0No
cm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9EYXRhRGV0ZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CkBAIC0yNzQ5LDYgKzI3NTAsOCBAQCB2b2lk
IFdlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0
aW9uJiBpbmZvcm1hdGlvbikKICAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVu
dC5mb3JtKCk7CiAgICAgICAgIGlmIChmb3JtKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZm9y
bUFjdGlvbiA9IGZvcm0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmFjdGlv
bkF0dHIpOworICAgICAgICBpbmZvcm1hdGlvbi5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVu
dGlhbHMgPSAhIVdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1l
bnRzKGVsZW1lbnQpOworICAgICAgICBpbmZvcm1hdGlvbi5yZXByZXNlbnRpbmdQYWdlVVJMID0g
ZWxlbWVudC5kb2N1bWVudCgpLnVybEZvckJpbmRpbmdzKCk7CiAgICAgICAgIGluZm9ybWF0aW9u
LmF1dG9jYXBpdGFsaXplVHlwZSA9IGVsZW1lbnQuYXV0b2NhcGl0YWxpemVUeXBlKCk7CiAgICAg
ICAgIGluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LnNob3VsZEF1dG9jb3JyZWN0
KCk7CiAgICAgICAgIGlmIChlbGVtZW50LmlzUGFzc3dvcmRGaWVsZCgpKQpAQCAtMjgwNiw2ICsy
ODA5LDE1IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAgIH0KIH0KIAordm9pZCBXZWJQYWdl
OjphdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1c2VybmFtZSwgY29uc3Qg
U3RyaW5nJiBwYXNzd29yZCkKK3sKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm1fYXNz
aXN0ZWROb2RlKSkgeworICAgICAgICBSZWY8SFRNTElucHV0RWxlbWVudD4gYXNzaXN0ZW5kRWxl
bWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lzdGVkTm9kZSk7CisgICAg
ICAgIGF1dG8gYXV0b2ZpbGxFbGVtZW50cyA9IEF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRv
ZmlsbEVsZW1lbnRzKGFzc2lzdGVuZEVsZW1lbnQuZ2V0KCkpOworICAgICAgICBhdXRvZmlsbEVs
ZW1lbnRzLT5hdXRvZmlsbCh1c2VybmFtZSwgcGFzc3dvcmQpOworICAgIH0KK30KKwogdm9pZCBX
ZWJQYWdlOjpzZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25NaW5pbXVtTGF5b3V0U2l6ZShjb25zdCBG
bG9hdFNpemUmIHNpemUpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRDb25maWd1cmF0aW9uLnNldE1p
bmltdW1MYXlvdXRTaXplKHNpemUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggYTA5MjM3N2IxZGU5MTVmNTY4YTUzMGU5ZTNh
ZWQzZjBiMzMyOWRmZi4uNWExMWIxZTgwOGYyMzQ0MjZmMWYxODJhOWFiYTdmYzVhODQ4MzdjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVu
dC5oCkBAIC0yNCw2ICsyNCw5IEBACiAgKi8KIAogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUhU
TUxFbGVtZW50Lmg+CisjaWYgVEFSR0VUX09TX0lQSE9ORQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0
SW5wdXRUcmFpdHMuaD4KKyNlbmRpZgogCiBAY2xhc3MgRE9NRmlsZUxpc3Q7CiBAY2xhc3MgRE9N
SFRNTEZvcm1FbGVtZW50OwpAQCAtMzEsNyArMzQsMTEgQEAKIEBjbGFzcyBOU1VSTDsKIAogV0VC
S0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMoMTBfNCkKKyNpZiBUQVJHRVRfT1NfSVBIT05FCitAaW50
ZXJmYWNlIERPTUhUTUxJbnB1dEVsZW1lbnQgOiBET01IVE1MRWxlbWVudDxVSVRleHRJbnB1dFRy
YWl0cz4KKyNlbHNlCiBAaW50ZXJmYWNlIERPTUhUTUxJbnB1dEVsZW1lbnQgOiBET01IVE1MRWxl
bWVudAorI2VuZGlmCiBAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICphY2NlcHQ7CiBAcHJvcGVy
dHkgKGNvcHkpIE5TU3RyaW5nICphbHQ7CiBAcHJvcGVydHkgQk9PTCBhdXRvZm9jdXMgV0VCS0lU
X0FWQUlMQUJMRV9NQUMoMTBfNik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCmluZGV4IDliYzgwM2M1OTU4NTAxYzg2OTA5NDUyMDNm
YmEyYTcwOTg1NzZkMWEuLjlhZWUwMTZkYzcwNGM2YzE0YTk1MGE2ZjhjMjRhZjlmM2NjMjgwOTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVt
ZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVt
ZW50Lm1tCkBAIC0zMyw2ICszMywyMyBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKICNpbXBv
cnQgIkRPTVByaXZhdGUuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisKKy8vIEZJ
WE1FIDM0NTgzNjI4OiBTaW1wbHlmeSB0aGlzIG9uY2UgdGhlIFVJS2l0IHdvcmsgaXMgYXZhaWxh
YmxlIGluIHRoZSBidWlsZC4KKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBUQVJHRVRf
T1NfSVBIT05FCisjaWYgX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVu
dGlhbHNTdWdnZXN0aW9uLmg+KQorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVu
dGlhbHNTdWdnZXN0aW9uLmg+CisjZWxzZQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRfUHJp
dmF0ZS5oPgorQGludGVyZmFjZSBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24g
OiBVSVRleHRTdWdnZXN0aW9uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3Ry
aW5nICp1c2VybmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICpw
YXNzd29yZDsKKworQGVuZAorI2VuZGlmIC8vIF9faGFzX2luY2x1ZGUoPFVJS2l0L1VJS2V5Ym9h
cmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbi5oPikKKyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKSAmJiBUQVJHRVRfT1NfSVBIT05FCisKKyNpbXBvcnQgPFdlYkNvcmUvQXV0b2Zp
bGxFbGVtZW50cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxlTGlzdC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4K
QEAgLTY2Niw2ICs2ODMsMjkgQEAgLSAodm9pZClzZXRWYWx1ZUZvclVzZXI6KE5TU3RyaW5nICop
aW5WYWx1ZQogICAgIElNUEwtPnNldFZhbHVlRm9yVXNlcihpblZhbHVlKTsKIH0KIAorLSAoQk9P
TClhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuICEhV2ViQ29yZTo6QXV0b2ZpbGxF
bGVtZW50czo6Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoKklNUEwpOworfQorCistIChOU1VSTCAq
KXJlcHJlc2VudGluZ1BhZ2VVUkwKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOnNlbGYub3duZXJEb2N1
bWVudC5VUkxdOworfQorCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgVEFSR0VUX09T
X0lQSE9ORQorLSAodm9pZClpbnNlcnRUZXh0U3VnZ2VzdGlvbjooVUlLZXlib2FyZExvZ2luQ3Jl
ZGVudGlhbHNTdWdnZXN0aW9uICopY3JlZGVudGlhbHNTdWdnZXN0aW9uCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGlmIChpczxXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50PihJTVBMKSkgeworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkF1
dG9maWxsRWxlbWVudHM+IGF1dG9maWxsRWxlbWVudHMgPSBXZWJDb3JlOjpBdXRvZmlsbEVsZW1l
bnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cygqSU1QTCk7CisgICAgICAgIGF1dG9maWxsRWxl
bWVudHMtPmF1dG9maWxsKGNyZWRlbnRpYWxzU3VnZ2VzdGlvbi51c2VybmFtZSwgY3JlZGVudGlh
bHNTdWdnZXN0aW9uLnBhc3N3b3JkKTsKKyAgICB9Cit9CisjZW5kaWYgLy8gVVNFKEFQUExFX0lO
VEVSTkFMX1NESykgJiYgVEFSR0VUX09TX0lQSE9ORQorCiBAZW5kCiAKIFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQqIGNvcmUoRE9NSFRNTElucHV0RWxlbWVudCAqd3JhcHBlcikKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMTUwNzg4NDJjYjc4
MTg3ZDViYTNiYTViN2ZhNWRhMmVhMjM3NjkxLi5lNTVhZDc3ZmYyNTU0YTVhMzZhZDU0ZDJhMzJk
MTg3OTVlYjYzMjgxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDktMTkgIEZyZWRlcmlrIFJpZWRlbCAgPHJp
ZWRlbEBhcHBsZS5jb20+CisKKyAgICAgICAgRXhwb3NlIHdheSB0byBzZXQgdmFsdWVzIG9mIGNs
YXNzaWZpZWQgZm9ybSBjb250cm9scyBhcyB7TGVnYWN5IFdlYktpdCwgV2ViS2l0fSBTUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDM5NAorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMzMxODM1MDQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lv
cy9XS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3
IF9wcml2YXRlVGV4dElucHV0XSk6IFRlc3RpbmcgaGVscGVycy4KKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOiBBZGRlZCB0ZXN0IGNhc2VzIHRvIHRlc3QgQXV0b0ZpbGwgZm9yIHdlYiB2
aWV3cy4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2lvcy9VSUtpdFNQSS5oOgorCiAyMDE3LTA5
LTIxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgYWRkIHRoZSBhYmlsaXR5IHRvIHNraXAgYSB0ZXN0MjYyIHRlc3QuCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGFlODk0Mjg3NDI1ZjYzZjdiOTY3NDE0MzBjMTZjOGZlMmViZTYx
NGMuLjdiN2QxOWE2NGU0MzgwZTY3ZmU2NTgzM2Y4ZTRkMzY2Mjg3NjU5ZmYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xNjEsNiArMTYxLDcgQEAKIAkJNTEyMEM4M0UxRTY3Njc4RjAwMjVC
MjUwIC8qIFdlYnNpdGVEYXRhU3RvcmVDdXN0b21QYXRocy5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjBDODNCMUU2NzRFMzUwMDI1
QjI1MCAvKiBXZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMuaHRtbCAqLzsgfTsKIAkJNTEzOTNF
MjIxNTIzOTUyRDAwNUYzOUM1IC8qIERPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTM5M0UxRDE1
MjM5NDRBMDA1RjM5QzUgLyogRE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcCAqLzsg
fTsKIAkJNTE0MkIyNzMxNTE3QzhDODAwQzMyQjE5IC8qIENvbnRleHRNZW51Q2FuQ29weVVSTC5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNDJCMjcyMTUxN0M4OTEwMEMzMkIxOSAvKiBDb250ZXh0TWVudUNhbkNvcHlVUkwuaHRtbCAq
LzsgfTsKKwkJNTE0OTU4QkUxRjc0MjdBQzAwRTg3QkFEIC8qIFdLV2ViVmlld0F1dG9maWxsVGVz
dHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTQ5
NThCRDFGNzQyN0FDMDBFODdCQUQgLyogV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbSAqLzsgfTsK
IAkJNTE1QkUxNkYxRDQyOEJCMTAwREQ3QzY4IC8qIFN0b3JlQmxvYlRvQmVEZWxldGVkLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1
QkUxNkUxRDQyODhGRjAwREQ3QzY4IC8qIFN0b3JlQmxvYlRvQmVEZWxldGVkLmh0bWwgKi87IH07
CiAJCTUxNUJFMTcxMUQ0MjhFNEIwMEREN0M2OCAvKiBTdG9yZUJsb2JUaGVuRGVsZXRlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1QkUxNzAxRDQy
OEJEMTAwREQ3QzY4IC8qIFN0b3JlQmxvYlRoZW5EZWxldGUubW0gKi87IH07CiAJCTUxNzE0RUI0
MUNGOEM3OEMwMDQ3MjNDNCAvKiBXZWJQcm9jZXNzS2lsbElEQkNsZWFudXAtMS5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzE0RUIy
MUNGOEM3NjEwMDQ3MjNDNCAvKiBXZWJQcm9jZXNzS2lsbElEQkNsZWFudXAtMS5odG1sICovOyB9
OwpAQCAtMTI0Miw2ICsxMjQzLDcgQEAKIAkJNTEzOTNFMUUxNTIzOTQ0QTAwNUYzOUM1IC8qIERP
TVdpbmRvd0V4dGVuc2lvbkJhc2ljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERPTVdpbmRvd0V4dGVuc2lvbkJhc2ljLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTE0MkIyNzAxNTE3Qzg4QjAwQzMyQjE5IC8qIENvbnRleHRNZW51Q2FuQ29weVVS
TC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbnRleHRNZW51
Q2FuQ29weVVSTC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0MkIyNzIxNTE3
Qzg5MTAwQzMyQjE5IC8qIENvbnRleHRNZW51Q2FuQ29weVVSTC5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5odG1sOyBwYXRoID0gQ29udGV4dE1lbnVDYW5Db3B5VVJMLmh0bWw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxNDk1OEJEMUY3NDI3QUMwMEU4N0JBRCAvKiBXS1dlYlZpZXdBdXRv
ZmlsbFRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3QXV0b2ZpbGxUZXN0
cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxNkUxRDQyODhGRjAwREQ3
QzY4IC8qIFN0b3JlQmxvYlRvQmVEZWxldGVkLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBh
dGggPSBTdG9yZUJsb2JUb0JlRGVsZXRlZC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTVCRTE3MDFENDI4QkQxMDBERDdDNjggLyogU3RvcmVCbG9iVGhlbkRlbGV0ZS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN0b3JlQmxvYlRoZW5EZWxl
dGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzE0RUIyMUNGOEM3NjEwMDQ3
MjNDNCAvKiBXZWJQcm9jZXNzS2lsbElEQkNsZWFudXAtMS5odG1sICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5o
dG1sOyBwYXRoID0gIldlYlByb2Nlc3NLaWxsSURCQ2xlYW51cC0xLmh0bWwiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjExOSw2ICsyMTIxLDcgQEAKIAkJCQlGNEQ0RjNCNzFFNEUz
NkU0MDBCQjI3NjcgLyogRGF0YUludGVyYWN0aW9uVGVzdHMubW0gKi8sCiAJCQkJNzU2MDkxNzcx
OTI1OUM1OTAwOUVGMDZFIC8qIE1lbW9yeUNhY2hlQWRkSW1hZ2VUb0NhY2hlSU9TLm1tICovLAog
CQkJCUY0Njg0OUJEMUVFRjU4RTQwMEI5MzdGRSAvKiBVSVBhc3RlYm9hcmRUZXN0cy5tbSAqLywK
KwkJCQk1MTQ5NThCRDFGNzQyN0FDMDBFODdCQUQgLyogV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5t
bSAqLywKIAkJCSk7CiAJCQlwYXRoID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTM0NTMsNiArMzQ1Niw3IEBACiAJCQkJMkQ0Q0Y4QkQxRDgzNjBDQzAwMDFDRThEIC8qIFdL
VGh1bWJuYWlsVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQzY4M0RFMUVBMTM0RTgwMDY1
MDE4MyAvKiBXS1VSTFNjaGVtZUhhbmRsZXItMS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxODJD
MjJFMUYyQkNFNTQwMDU5QkE3QyAvKiBXS1VSTFNjaGVtZUhhbmRsZXItbGVha3MubW0gaW4gU291
cmNlcyAqLywKKwkJCQk1MTQ5NThCRTFGNzQyN0FDMDBFODdCQUQgLyogV0tXZWJWaWV3QXV0b2Zp
bGxUZXN0cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJFRkYwNkQ3MUQ4QUYzNEEwMDA0QkIzMCAv
KiBXS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExNEZDNTg1
MUI4OTczOTEwMEQxMDdFQiAvKiBXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M0MTdGMzMxRDE5RTE0ODAwQjhFRjUzIC8qIFdLV2ViVmlld0RlZmF1
bHROYXZpZ2F0aW9uRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL1dLV2ViVmlld0F1dG9maWxsVGVzdHMubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9XS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmUxMTI4NWVjNDk1Njk0MTUxZTExZjU3Y2ZhMWE1M2RjNjI3ZWUwYjYKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9XS1dlYlZpZXdBdXRvZmls
bFRlc3RzLm1tCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQgJiYgUExBVEZPUk0oSU9TKSAmJiBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAi
VGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCAiVUlLaXRTUEkuaCIKKworI2ltcG9ydCA8VUlLaXQv
VUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRf
UHJpdmF0ZS5oPgorCisvLyBGSVhNRSAzNDU4MzYyODogU2ltcGx5ZnkgdGhpcyBvbmNlIHRoZSBV
SUtpdCB3b3JrIGlzIGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQuCisjaWYgX19oYXNfaW5jbHVkZSg8
VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+KQorI2ltcG9ydCA8
VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+CisjZWxzZQorI2lt
cG9ydCA8VUlLaXQvVUlUZXh0U3VnZ2VzdGlvbi5oPgorQGludGVyZmFjZSBVSUtleWJvYXJkTG9n
aW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gOiBVSVRleHRTdWdnZXN0aW9uCisKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICp1c2VybmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIE5TU3RyaW5nICpwYXNzd29yZDsKKworQGVuZAorI2VuZGlmCisKK3N0YXRp
YyBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKmNyZWF0ZVVJS2V5Ym9hcmRM
b2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbigpCit7CisgICAgcmV0dXJuIFtbTlNDbGFzc0Zyb21T
dHJpbmcoQCJVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24iKSBuZXddIGF1dG9y
ZWxlYXNlXTsKK30KKwordHlwZWRlZiBVSVZpZXcgPFVJVGV4dElucHV0UHJpdmF0ZSwgVUlUZXh0
SW5wdXRUcmFpdHNfUHJpdmF0ZSwgVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0ZV9TdGFnaW5nXzM0
NTgzNjI4PiAgQXV0b2ZpbGxDYW5kaWRhdGVWaWV3OworCitAaW1wbGVtZW50YXRpb24gV0tXZWJW
aWV3IChBdXRvZmlsbFRlc3RIZWxwZXJzKQorCistIChBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKilf
cHJpdmF0ZVRleHRJbnB1dAoreworICAgIHJldHVybiAoQXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICop
W3NlbGYgdmFsdWVGb3JLZXk6QCJfY3VycmVudENvbnRlbnRWaWV3Il07Cit9CisKK0BlbmQKKwor
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNUKFdLV2ViVmlld0F1dG9maWxsVGVzdHMs
IFVzZXJuYW1lQW5kUGFzc3dvcmRGaWVsZCkKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3
ID0gW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXTsKKyAgICBBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKmNvbnRlbnRWaWV3ID0gW3dl
YlZpZXcgX3ByaXZhdGVUZXh0SW5wdXRdOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
SFRNTFN0cmluZzpAIjxpbnB1dCBpZD0ndXNlcicgdHlwZT0nZW1haWwnPjxpbnB1dCBpZD0ncGFz
c3dvcmQnIHR5cGU9J3Bhc3N3b3JkJz4iXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAidXNlci5mb2N1cygpIl07CisgICAgRVhQRUNUX1RSVUUoY29udGVudFZp
ZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwYXNzd29yZC5mb2N1cygpIl07CisgICAgRVhQ
RUNUX1RSVUUoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsK
KworICAgIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqY3JlZGVudGlhbFN1
Z2dlc3Rpb24gPSBjcmVhdGVVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24oKTsK
KyAgICBjcmVkZW50aWFsU3VnZ2VzdGlvbi51c2VybmFtZSA9IEAiZnJlZGVyaWsiOworICAgIGNy
ZWRlbnRpYWxTdWdnZXN0aW9uLnBhc3N3b3JkID0gQCJmYW1vcyI7CisKKyAgICBbY29udGVudFZp
ZXcgaW5zZXJ0VGV4dFN1Z2dlc3Rpb246Y3JlZGVudGlhbFN1Z2dlc3Rpb25dOworCisgICAgRVhQ
RUNUX1dLX1NUUkVRKGNyZWRlbnRpYWxTdWdnZXN0aW9uLnVzZXJuYW1lLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXNlci52YWx1ZSJdKTsKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoY3JlZGVudGlhbFN1Z2dlc3Rpb24ucGFzc3dvcmQsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJwYXNzd29yZC52YWx1ZSJdKTsKKworICAgIFt3ZWJWaWV3IHJl
bGVhc2VdOworfQorCitURVNUKFdLV2ViVmlld0F1dG9maWxsVGVzdHMsIFVzZXJuYW1lQW5kUGFz
c3dvcmRGaWVsZFNlcGFyYXRlZEJ5UmFkaW9CdXR0b24pCit7CisgICAgVGVzdFdLV2ViVmlldyAq
d2ViVmlldyA9IFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtl
KDAsIDAsIDMyMCwgNTAwKV07CisgICAgQXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICpjb250ZW50Vmll
dyA9IFt3ZWJWaWV3IF9wcml2YXRlVGV4dElucHV0XTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZEhUTUxTdHJpbmc6QCI8aW5wdXQgaWQ9J3VzZXInIHR5cGU9J2VtYWlsJz48aW5wdXQg
dHlwZT0ncmFkaW8nIG5hbWU9J3JhZGlvX2J1dHRvbicgdmFsdWU9J3JhZGlvJz48aW5wdXQgaWQ9
J3Bhc3N3b3JkJyB0eXBlPSdwYXNzd29yZCc+Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAInVzZXIuZm9jdXMoKSJdOworICAgIEVYUEVDVF9UUlVFKGNvbnRl
bnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7CisKKyAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQuZm9jdXMoKSJdOworICAg
IEVYUEVDVF9UUlVFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFs
cyk7CisKKyAgICBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKmNyZWRlbnRp
YWxTdWdnZXN0aW9uID0gY3JlYXRlVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9u
KCk7CisgICAgY3JlZGVudGlhbFN1Z2dlc3Rpb24udXNlcm5hbWUgPSBAImZyZWRlcmlrIjsKKyAg
ICBjcmVkZW50aWFsU3VnZ2VzdGlvbi5wYXNzd29yZCA9IEAiZmFtb3MiOworCisgICAgW2NvbnRl
bnRWaWV3IGluc2VydFRleHRTdWdnZXN0aW9uOmNyZWRlbnRpYWxTdWdnZXN0aW9uXTsKKworICAg
IEVYUEVDVF9XS19TVFJFUShjcmVkZW50aWFsU3VnZ2VzdGlvbi51c2VybmFtZSwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVzZXIudmFsdWUiXSk7CisgICAgRVhQRUNU
X1dLX1NUUkVRKGNyZWRlbnRpYWxTdWdnZXN0aW9uLnBhc3N3b3JkLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQudmFsdWUiXSk7CisKKyAgICBbd2ViVmll
dyByZWxlYXNlXTsKK30KKworVEVTVChXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLCBUd29UZXh0Rmll
bGRzKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldOworICAgIEF1dG9m
aWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmlldyBfcHJpdmF0ZVRleHRJbnB1
dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPGlucHV0IGlk
PSd0ZXh0MScgdHlwZT0nZW1haWwnPjxpbnB1dCBpZD0ndGV4dDInIHR5cGU9J3RleHQnPiJdOwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0MS5mb2N1cygp
Il07CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5D
cmVkZW50aWFscyk7CisKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAidGV4dDIuZm9jdXMoKSJdOworICAgIEVYUEVDVF9GQUxTRShjb250ZW50Vmlldy5hY2NlcHRz
QXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpOworfQorCitURVNUKFdLV2ViVmlld0F1dG9maWxs
VGVzdHMsIFN0YW5kYWxvbmVQYXNzd29yZEZpZWxkKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndl
YlZpZXcgPSBbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldOworICAgIEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcg
PSBbd2ViVmlldyBfcHJpdmF0ZVRleHRJbnB1dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRIVE1MU3RyaW5nOkAiPGlucHV0IGlkPSdwYXNzd29yZCcgdHlwZT0ncGFzc3dvcmQnPiJd
OworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwYXNzd29yZC5m
b2N1cygpIl07CisgICAgRVhQRUNUX1RSVUUoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRM
b2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2Vz
dGlvbiAqY3JlZGVudGlhbFN1Z2dlc3Rpb24gPSBjcmVhdGVVSUtleWJvYXJkTG9naW5DcmVkZW50
aWFsc1N1Z2dlc3Rpb24oKTsKKyAgICBjcmVkZW50aWFsU3VnZ2VzdGlvbi51c2VybmFtZSA9IEAi
ZnJlZGVyaWsiOworICAgIGNyZWRlbnRpYWxTdWdnZXN0aW9uLnBhc3N3b3JkID0gQCJmYW1vcyI7
CisKKyAgICBbY29udGVudFZpZXcgaW5zZXJ0VGV4dFN1Z2dlc3Rpb246Y3JlZGVudGlhbFN1Z2dl
c3Rpb25dOworCisgICAgRVhQRUNUX1dLX1NUUkVRKGNyZWRlbnRpYWxTdWdnZXN0aW9uLnBhc3N3
b3JkLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQudmFs
dWUiXSk7CisKKyAgICBbd2ViVmlldyByZWxlYXNlXTsKK30KKworVEVTVChXS1dlYlZpZXdBdXRv
ZmlsbFRlc3RzLCBTdGFuZGFsb25lVGV4dEZpZWxkKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndl
YlZpZXcgPSBbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldOworICAgIEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcg
PSBbd2ViVmlldyBfcHJpdmF0ZVRleHRJbnB1dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRIVE1MU3RyaW5nOkAiPGlucHV0IGlkPSd0ZXh0ZmllbGQnIHR5cGU9J3RleHQnPiJdOwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0ZmllbGQuZm9j
dXMoKSJdOworICAgIEVYUEVDVF9GQUxTRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExv
Z2luQ3JlZGVudGlhbHMpOworCisgICAgW3dlYlZpZXcgcmVsZWFzZV07Cit9CisKK1RFU1QoV0tX
ZWJWaWV3QXV0b2ZpbGxUZXN0cywgQWNjb3VudENyZWF0aW9uUGFnZSkKK3sKKyAgICBUZXN0V0tX
ZWJWaWV3ICp3ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXTsKKyAgICBBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKmNv
bnRlbnRWaWV3ID0gW3dlYlZpZXcgX3ByaXZhdGVUZXh0SW5wdXRdOworICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxpbnB1dCBpZD0ndXNlcicgdHlwZT0nZW1haWwn
PjxpbnB1dCBpZD0ncGFzc3dvcmQnIHR5cGU9J3Bhc3N3b3JkJz48aW5wdXQgaWQ9J2NvbmZpcm1f
cGFzc3dvcmQnIHR5cGU9J3Bhc3N3b3JkJz4iXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAidXNlci5mb2N1cygpIl07CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRl
bnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7CisKKyAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQuZm9jdXMoKSJdOworICAg
IEVYUEVDVF9GQUxTRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlh
bHMpOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImNvbmZp
cm1fcGFzc3dvcmQuZm9jdXMoKSJdOworICAgIEVYUEVDVF9GQUxTRShjb250ZW50Vmlldy5hY2Nl
cHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpOworCisgICAgW3dlYlZpZXcgcmVsZWFzZV07
Cit9CisKKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gV0tfQVBJ
X0VOQUJMRUQgJiYgUExBVEZPUk0oSU9TKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvaW9zL1VJS2l0U1BJLmgKaW5kZXggZTAyZjUzNjdmMTc2OTg5ZTJiOGU3MTc2YmFh
ZGYzMTdiOTIyZmFiNS4uYThjNGU0Y2IzMWNmMWY2MzdiZDk1ZDk2ZGNiYWE3ZTA1NGU4ODE4MCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2lvcy9VSUtpdFNQSS5oCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpZiBQ
TEFURk9STShJT1MpCiAKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0VHJhaXRzLmg+CisKICNp
ZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDExMDAwMAogQHByb3RvY29sIFVJ
RHJhZ1Nlc3Npb247CiBAY2xhc3MgVUlEcmFnSW50ZXJhY3Rpb247CkBAIC0zNSw2ICszNywxMyBA
QAogCiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJ
S2l0L1VJRHJhZ0ludGVyYWN0aW9uX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElu
cHV0VHJhaXRzX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVGV4dFN1Z2dlc3Rpb24uaD4K
KworCitAcHJvdG9jb2wgVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0ZV9TdGFnaW5nXzM0NTgzNjI4
IDxOU09iamVjdCwgVUlUZXh0SW5wdXRUcmFpdHM+CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIEJPT0wgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzOworQGVuZAogCiAj
ZWxzZQogCkBAIC01MSw2ICs2MCwxMCBAQCBXVEZfRVhURVJOX0NfRU5ECiBAZW5kCiAjZW5kaWYg
Ly8gX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMTAwMDAKIAorQHByb3RvY29s
IFVJVGV4dElucHV0VHJhaXRzX1ByaXZhdGUgPE5TT2JqZWN0LCBVSVRleHRJbnB1dFRyYWl0cz4K
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBhY2NlcHRzQXV0b2ZpbGxlZExv
Z2luQ3JlZGVudGlhbHM7CitAZW5kCisKICNlbmRpZgogCiAjaWYgX19JUEhPTkVfT1NfVkVSU0lP
Tl9NQVhfQUxMT1dFRCA+PSAxMTAwMDAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321709</attachid>
            <date>2017-09-25 11:25:03 -0700</date>
            <delta_ts>2017-09-25 16:24:33 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-174394-20170925112502.patch</filename>
            <type>text/plain</type>
            <size>46514</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNDUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTUxZTgyNmE3YTIzMmVm
NjJmNTNiZmYzNTQwNDg3NWM4YWUzZWYwZC4uZGY2NTAyNWNhOWExNDhiZDhhNTE4NGU5OTE2MmIx
ZDE4MjM3MGJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA5LTE5ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRz
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjppc0F1dG9maWxsYWJsZUVsZW1lbnQpOiBS
ZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgb2YgdHlwZSB0ZXh0IG9yIGVtYWlsLgorICAg
ICAgICAoV2ViQ29yZTo6bmV4dEF1dG9maWxsYWJsZUVsZW1lbnQpOiBSZXR1cm5zIHRoZSBuZXh0
IGZvY3VzYWJsZSBlbGVtZW50IHRoYXQgaXMgYXV0b2ZpbGxhYmxlLgorICAgICAgICAoV2ViQ29y
ZTo6cHJldmlvdXNBdXRvZmlsbGFibGVFbGVtZW50KTogUmV0dXJucyB0aGUgcHJldmlvdXMgZm9j
dXNhYmxlIGVsZW1lbnQgdGhhdCBpcyBhdXRvZmlsbGFibGUuCisgICAgICAgIChXZWJDb3JlOjpB
dXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyk6IENvbXB1dGVzIHRoZSBh
dXRvZmlsbCBlbGVtZW50cyAodXNlcm5hbWUgJiBwYXNzd29yZCkKKyAgICAgICAgZm9yIGEgZ2l2
ZW4gaW5wdXQgZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmF1
dG9maWxsKTogRmlsbHMgdGhlIGNyZWRlbnRpYWxzIGludG8gdGhlIHBhaXIgb2YgdXNlcm5hbWUv
cGFzc3dvcmQgZWxlbWVudHMuCisgICAgICAgICogZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50
cy5oOiBBZGRlZC4KKwogMjAxNy0wOS0yNSAgTXMyZ2VyICA8TXMyZ2VyQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgVXBkYXRlIHdhaXRTeW5jIGFuZCB0aGUgVElNRU9VVF9JR05PUkVEIGNvbnN0YW50
IHRvIHVzZSBzaWduZWQgaW50ZWdlcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ0YTM2YjQ2MzRmMzFmNWYwZDRi
NWZlZGQxNDA4MmRiNDk4YWM3YWYuLmU1NDYyZGE1ZGI0MWQ0Y2JmNGI0YTI2ZDQ1MjRmNWQ4M2Vk
MmNhMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTctMDktMTkgIEZyZWRlcmlrIFJp
ZWRlbCAgPHJpZWRlbEBhcHBsZS5jb20+CisKKyAgICAgICAgRXhwb3NlIHdheSB0byBzZXQgdmFs
dWVzIG9mIGNsYXNzaWZpZWQgZm9ybSBjb250cm9scyBhcyB7TGVnYWN5IFdlYktpdCwgV2ViS2l0
fSBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NDM5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxODM1MDQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQ
SS5oOgorICAgICAgICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjplbmNvZGUgY29uc3QpOgorICAg
ICAgICBFbmNvZGVzIGFkZGl0aW9uYWwgbm9kZSBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGlmIHRo
ZSBub2RlIGlzIHBhcnQgb2YgYSBsb2dpbiBzY3JlZW4uCisgICAgICAgIChXZWJLaXQ6OkFzc2lz
dGVkTm9kZUluZm9ybWF0aW9uOjpkZWNvZGUpOgorICAgICAgICBEZWNvZGVzIHRoZSBhZGRpdGlv
bmFsIGFzc2lzdGVkIG5vZGUgaW5mb3JtYXRpb24uCisgICAgICAgICogU2hhcmVkL0Fzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHNdKToKKyAgICAgICAg
RGV0ZXJtaW5lcyBpZiB0aGUgV0tDb250ZW50VmlldyBzaG93cyBhIGxvZ2luIHNjcmVlbi4KKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyByZXByZXNlbnRpbmdQYWdlVXJsXSk6CisgICAgICAgIFJl
dHVybnMgdGhlIFVSTCBvZiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCB3ZWIgcGFnZS4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyBpbnNlcnRUZXh0U3VnZ2VzdGlvbjpdKToKKyAgICAgICAgSW5zZXJ0
cyB0aGUgbG9naW4gY3JlZGVudGlhbHMgaW50byB0aGUgV2ViIFZpZXcuCisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c3RhcnRBc3Npc3RpbmdOb2RlKToKKyAgICAgICAgVHJhbnNmZXIgdGhlIGFkZGl0aW9u
YWwgYXNzaXN0ZWRub2RlIGluZm9ybWF0aW9uIChhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVu
dGlhbHMgYW5kIHJlcHJlc2VudGluZ1BhZ2VVcmwpLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk6CisgICAgICAgIFJldHVy
bnMgaWYgdGhlIFdlYiBWaWV3IHNob3dzIGEgbG9naW4gc2NyZWVuLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnJlcHJlc2VudGluZ1BhZ2VVcmwpOgorICAgICAgICBSZXR1cm5zIHRo
ZSBXZWIgVmlldydzIFVSTC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphdXRvZmls
bExvZ2luQ3JlZGVudGlhbHMpOgorICAgICAgICBJbnNlcnQgdGhlIGNyZWRlbnRpYWxzIGludG8g
dGhlIFdlYiBWaWV3LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbik6IFRyYW5zcG9ydHMgdGhlIGlu
Zm9ybWF0aW9uIGlmIHRoZSBjdXJyZW50bHkKKyAgICAgICAgaGlnaGxpZ2h0ZWQgbm9kZSBhY2Nl
cHRzIGF1dG9maWxsZWQgbG9naW4gY3JlZGVudGlhbHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyk6IEZpbGxzIHRoZSBsb2dpbiBjcmVkZW50aWFs
cyBpbnRvIHRoZQorICAgICAgICBXZWJQYWdlLgorCiAyMDE3LTA5LTI0ICBNaWNoYWVsIENhdGFu
emFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBWaWV3cG9ydCBmaXQgaXMg
bm8gbG9uZ2VyIGV4cGVyaW1lbnRhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDdm
MjdjZTA3Nzc5ZjFjYjBkOTM2OGNhNjQ5ZmZlZmRjMDIwNjM4ODYuLmMyZjc3NjZjZDMwNDQ4NGZj
ZWIwNTNiMzQ5MzIzNWNiMjU0OWQ0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMCBAQAorMjAxNy0wOS0xOSAgRnJlZGVyaWsgUmllZGVsICA8cmllZGVsQGFwcGxl
LmNvbT4KKworICAgICAgICBFeHBvc2Ugd2F5IHRvIHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBm
b3JtIGNvbnRyb2xzIGFzIHtMZWdhY3kgV2ViS2l0LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8zMzE4MzUwND4KKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2Eu
CisKKyAgICAgICAgKiBET00vRE9NSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIERPTS9E
T01IVE1MSW5wdXRFbGVtZW50Lm1tOgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGFj
Y2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsc10pOgorICAgICAgICBEZXRlcm1pbmVzIGlm
IHRoaXMgSFRNTElucHV0RWxlbWVudCBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgorICAgICAg
ICAoLVtET01IVE1MSW5wdXRFbGVtZW50IHJlcHJlc2VudGluZ1BhZ2VVcmxdKToKKyAgICAgICAg
UmV0dXJucyB0aGUgd2VicGFnZSdzIFVSTCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgaW4g
dGhlIFdlYiBWaWV3LgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGluc2VydFRleHRT
dWdnZXN0aW9uOl0pOgorICAgICAgICBJbnNlcnRzIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhl
IFdlYiBWaWV3LgorCiAyMDE3LTA5LTIyICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgV2Vha1B0ckZhY3Rvcnkgc2hvdWxkIHBvcHVsYXRlIG1fcmVmIGxhemlseS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAwZjE0NDVlNjM3MGYwNmU2MzVjMzdhOTdjYTY1MGE4ZWQ0ODZlNjIzLi42ODMxNDQxOTJm
NzVmMzc2NWQzNGY4MDA3ZTZhYzQ3ZGExMzcwM2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjk1LDYgKzIyOTUsOCBAQAog
CQk1MTYyQzdGNDExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjIxMUY3N0VGQTAw
NjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNTE2MkM3RjUxMUY3N0VGQjAw
NjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0
cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MTY2RDNDRDFFOEVENDhGMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAv
KiBTdG9yYWdlVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUxNjk5RUUzMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk5RUUx
MUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNwcCAqLzsgfTsKKwkJNTE2OTlF
RTQxRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk5RUUyMUY2MDhDRDUwMEQ1N0QwNiAv
KiBBdXRvZmlsbEVsZW1lbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTE2QkI3OTQwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTZCQjc5MjBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCAqLzsgfTsK
IAkJNTE2QzYyMjAxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZDNjIxRDE5NTBENDg3MDAz
MzdFNzUgLyogR2FtZXBhZEV2ZW50LmNwcCAqLzsgfTsKIAkJNTE2QzYyMjExOTUwRDQ4NzAwMzM3
RTc1IC8qIEdhbWVwYWRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2QzYyMUUxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5oICov
OyB9OwpAQCAtMTAxOTUsNiArMTAxOTcsOCBAQAogCQk1MTY0NUI1MzFCOUY4ODlCMDBGNzg5Q0Ug
LyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IElEQlZlcnNpb25DaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTY0NUI1NDFCOUY4OEU4MDBGNzg5Q0UgLyogSURCQ3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAvKiBTdG9yYWdlVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MTY5OUVFMTFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxF
bGVtZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdXRvZmlsbEVsZW1lbnRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2OTlFRTIxRjYwOENENTAwRDU3RDA2IC8qIEF1
dG9maWxsRWxlbWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b2ZpbGxFbGVtZW50cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTZCQjc5MjBDRTkxRTY4MDA1MTJGNzkgLyogSlNU
cmVlV2Fsa2VyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTVHJlZVdhbGtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
NkM2MjFEMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2FtZXBhZEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE2QzYyMUUxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYW1lcGFkRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4Mzg4LDYgKzE4MzkyLDggQEAKIAkJNDQzMjkyQzEw
RUJBNkQ3MzAwRTYyMDE2IC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJNTE2OTlFRTExRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVu
dHMuY3BwICovLAorCQkJCTUxNjk5RUUyMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1l
bnRzLmggKi8sCiAJCQkJRDBCRDRGNUExNDA4ODUwRjAwNjgzOUI2IC8qIERpY3RhdGlvbkNvbW1h
bmRJT1MuY3BwICovLAogCQkJCUQwQkQ0RjVCMTQwODg1MEYwMDY4MzlCNiAvKiBEaWN0YXRpb25D
b21tYW5kSU9TLmggKi8sCiAJCQkJRkVEMTNEMzkwQ0VBOTM0NjAwRDg5NDY2IC8qIEVkaXRvcklP
Uy5tbSAqLywKQEAgLTI3MTYyLDYgKzI3MTY4LDcgQEAKIAkJCQlBNUE3QUE0MzEzMkYwRUNDMDBE
M0EzQzIgLyogQXV0b2NhcGl0YWxpemVUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxODQz
RkUxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzFF
OTcyODFBOUY5ODM0MDA3QkYwRkIgLyogQXV0b0ZpbGxCdXR0b25FbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MTY5OUVFNDFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzlENDY3MDUxRTYwQzQ2NTAwODE5NUZCIC8qIEF1dG9wbGF5
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1ODMwRDRFMTY3OUI0RjgwMEFDRjhDMyAvKiBB
dXRvc2Nyb2xsQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEUwQTE1NEYw
OTAwMEE0MjM0IC8qIEF1dG9UYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzgzMSw2
ICsyNzgzOCw3IEBACiAJCQkJODQ3MzBEODkxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFU3BlY3VsYXJM
aWdodGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEyOUM5OTcxRjU5Qjk2MzAwOUQ3NDAzIC8q
IEZldGNoQm9keVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEMTI5REIxRjNEMTQzODAw
RDE1RTQ3IC8qIEZldGNoSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDE2RTZGRTgxQkJE
MTJERjAwMEE2MDIzIC8qIEZldGNoSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxQUQ3NTNBMUNFRjZCRDEwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdDRTE5MTREMUYyQTlBRkIwMDI3MkY3OCAvKiBGZXRjaFJlZmVycmVyUG9saWN5
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0UxOTE1QTFGMkE5QjM0MDAyNzJGNzggLyogRmV0Y2hS
ZXF1ZXN0Q2FjaGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzEzMjcsNiArMzEzMzUsNyBAQAogCQkJ
CUE1RjZFMTZCMTMyRUQ0NkUwMDhFREFFMyAvKiBBdXRvY2FwaXRhbGl6ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QzE4NDNGRDFDOEI3MjgzMDAyRUI5NzMgLyogQXV0b2ZpbGwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0MxRTk3MjcxQTlGOTgzNDAwN0JGMEZCIC8qIEF1dG9GaWxsQnV0dG9u
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTY5OUVFMzFGNjA4Q0Q1MDBENTdEMDYg
LyogQXV0b2ZpbGxFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NTgzMEQ0RDE2NzlC
NEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThDRkYwNTAwQTE1NEYwOTAwMEE0MjM0IC8qIEF1dG9UYWJsZUxheW91dC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDREVDQTg5QTFFREY0NDdEMDBEQ0IwOEIgLyogQVZBc3NldFRyYWNrVXRp
bGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0F1dG9maWxsRWxlbWVudHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliYThhNDRjNTk2ZDg1NjJmNDljNTRl
OGEzMzQ4NjhjZWEwNzM0NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRzLmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdXRvZmlsbEVsZW1lbnRzLmgiCisK
KyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBib29sIGlzQXV0b2ZpbGxhYmxlRWxlbWVu
dChFbGVtZW50JiBub2RlKQoreworICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW5wdXRFbGVtZW50ID0gJmRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpOworICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlz
VGV4dEZpZWxkKCkgfHwgaW5wdXRFbGVtZW50LT5pc0VtYWlsRmllbGQoKTsKK30KKworc3RhdGlj
IGlubGluZSBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbmV4dEF1dG9maWxsYWJsZUVsZW1lbnQo
Tm9kZSogc3RhcnROb2RlLCBGb2N1c0NvbnRyb2xsZXImIGZvY3VzQ29udHJvbGxlcikKK3sKKyAg
ICBpZiAoIWlzPEVsZW1lbnQ+KHN0YXJ0Tm9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgUmVmUHRyPEVsZW1lbnQ+IG5leHRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oc3Rh
cnROb2RlKTsKKyAgICBkbyB7CisgICAgICAgIG5leHRFbGVtZW50ID0gZm9jdXNDb250cm9sbGVy
Lm5leHRGb2N1c2FibGVFbGVtZW50KCpuZXh0RWxlbWVudC5nZXQoKSk7CisgICAgfSB3aGlsZSAo
bmV4dEVsZW1lbnQgJiYgIWlzQXV0b2ZpbGxhYmxlRWxlbWVudCgqbmV4dEVsZW1lbnQuZ2V0KCkp
KTsKKworICAgIGlmICghbmV4dEVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbmV4dEVsZW1lbnQpOworfQor
CitzdGF0aWMgaW5saW5lIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcmV2aW91c0F1dG9maWxs
YWJsZUVsZW1lbnQoTm9kZSogc3RhcnROb2RlLCBGb2N1c0NvbnRyb2xsZXImIGZvY3VzQ29udHJv
bGxlcikKK3sKKyAgICBpZiAoIWlzPEVsZW1lbnQ+KHN0YXJ0Tm9kZSkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgUmVmUHRyPEVsZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9IGRvd25j
YXN0PEVsZW1lbnQ+KHN0YXJ0Tm9kZSk7CisgICAgZG8geworICAgICAgICBwcmV2aW91c0VsZW1l
bnQgPSBmb2N1c0NvbnRyb2xsZXIucHJldmlvdXNGb2N1c2FibGVFbGVtZW50KCpwcmV2aW91c0Vs
ZW1lbnQuZ2V0KCkpOworICAgIH0gd2hpbGUgKHByZXZpb3VzRWxlbWVudCAmJiAhaXNBdXRvZmls
bGFibGVFbGVtZW50KCpwcmV2aW91c0VsZW1lbnQuZ2V0KCkpKTsKKworICAgIGlmICghcHJldmlv
dXNFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gJmRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpwcmV2aW91c0VsZW1lbnQpOworfQorCitBdXRvZmls
bEVsZW1lbnRzOjpBdXRvZmlsbEVsZW1lbnRzKFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiYmIHVz
ZXJuYW1lLCBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4mJiBwYXNzd29yZCkKKyAgICA6IG1fdXNl
cm5hbWUodXNlcm5hbWUpCisgICAgLCBtX3Bhc3N3b3JkKHBhc3N3b3JkKQoreworfQorCitzdGQ6
Om9wdGlvbmFsPEF1dG9maWxsRWxlbWVudHM+IEF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRv
ZmlsbEVsZW1lbnRzKFJlZjxIVE1MSW5wdXRFbGVtZW50PiBzdGFydCkKK3sKKyAgICBpZiAoIXN0
YXJ0LT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICBGb2N1c0NvbnRyb2xsZXImIGZvY3VzQ29udHJvbGxlciA9IHN0YXJ0LT5kb2N1bWVudCgpLnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCk7CisgICAgaWYgKHN0YXJ0LT5pc1Bhc3N3b3JkRmllbGQo
KSkgeworICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gcHJldmlvdXNFbGVtZW50ID0g
cHJldmlvdXNBdXRvZmlsbGFibGVFbGVtZW50KHN0YXJ0LnB0cigpLCBmb2N1c0NvbnRyb2xsZXIp
OworICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbmV4dEVsZW1lbnQgPSBuZXh0QXV0
b2ZpbGxhYmxlRWxlbWVudChzdGFydC5wdHIoKSwgZm9jdXNDb250cm9sbGVyKTsKKyAgICAgICAg
Ym9vbCBoYXNEdXBsaWNhdGVQYXNzd29yZEVsZW1lbnRzID0gKG5leHRFbGVtZW50ICYmIG5leHRF
bGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKSkgfHwgKHByZXZpb3VzRWxlbWVudCAmJiBwcmV2aW91
c0VsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpKTsKKyAgICAgICAgaWYgKGhhc0R1cGxpY2F0ZVBh
c3N3b3JkRWxlbWVudHMpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
ICAgIGlmIChwcmV2aW91c0VsZW1lbnQgJiYgaXM8SFRNTElucHV0RWxlbWVudD4oKnByZXZpb3Vz
RWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c0VsZW1lbnQtPmlzVGV4dEZpZWxk
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEF1dG9maWxsRWxlbWVudHMoV1RGTW92ZShwcmV2
aW91c0VsZW1lbnQpLCBXVEZNb3ZlKHN0YXJ0KSk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbmV4dEVsZW1lbnQgPSBuZXh0QXV0b2Zp
bGxhYmxlRWxlbWVudChzdGFydC5wdHIoKSwgZm9jdXNDb250cm9sbGVyKTsKKyAgICAgICAgaWYg
KG5leHRFbGVtZW50ICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpuZXh0RWxlbWVudCkpIHsKKyAg
ICAgICAgICAgIGlmIChuZXh0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gZWxlbWVudEFmdGVybmV4dEVsZW1lbnQg
PSBuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudChuZXh0RWxlbWVudC5nZXQoKSwgZm9jdXNDb250cm9s
bGVyKTsKKyAgICAgICAgICAgICAgICBib29sIGhhc0R1cGxpY2F0ZVBhc3N3b3JkRWxlbWVudHMg
PSBlbGVtZW50QWZ0ZXJuZXh0RWxlbWVudCAmJiBlbGVtZW50QWZ0ZXJuZXh0RWxlbWVudC0+aXNQ
YXNzd29yZEZpZWxkKCk7CisgICAgICAgICAgICAgICAgaWYgKGhhc0R1cGxpY2F0ZVBhc3N3b3Jk
RWxlbWVudHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQXV0b2ZpbGxFbGVtZW50cyhXVEZNb3ZlKHN0YXJ0KSwgV1RG
TW92ZShuZXh0RWxlbWVudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHN0YXJ0LT5pc1Bhc3N3b3JkRmllbGQoKSkgeworICAgICAgICBSZWZQdHI8SFRNTElu
cHV0RWxlbWVudD4gcHJldmlvdXNFbGVtZW50ID0gcHJldmlvdXNBdXRvZmlsbGFibGVFbGVtZW50
KHN0YXJ0LnB0cigpLCBmb2N1c0NvbnRyb2xsZXIpOworICAgICAgICBSZWZQdHI8SFRNTElucHV0
RWxlbWVudD4gbmV4dEVsZW1lbnQgPSBuZXh0QXV0b2ZpbGxhYmxlRWxlbWVudChzdGFydC5wdHIo
KSwgZm9jdXNDb250cm9sbGVyKTsKKyAgICAgICAgaWYgKCFwcmV2aW91c0VsZW1lbnQgJiYgIW5l
eHRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIEF1dG9maWxsRWxlbWVudHMobnVsbHB0ciwg
c3RhcnQucHRyKCkpOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit2b2lk
IEF1dG9maWxsRWxlbWVudHM6OmF1dG9maWxsKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3
b3JkKQoreworICAgIGlmIChtX3VzZXJuYW1lKSB7CisgICAgICAgIG1fdXNlcm5hbWUtPnNldFZh
bHVlRm9yVXNlcih1c2VybmFtZSk7CisgICAgICAgIG1fdXNlcm5hbWUtPnNldEF1dG9GaWxsZWQo
KTsKKyAgICB9CisgICAgaWYgKG1fcGFzc3dvcmQpIHsKKyAgICAgICAgbV9wYXNzd29yZC0+c2V0
VmFsdWVGb3JVc2VyKHBhc3N3b3JkKTsKKyAgICAgICAgbV9wYXNzd29yZC0+c2V0QXV0b0ZpbGxl
ZCgpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzNDI5MDE3OTU0
MTNmMzk3ODQ0ZTM2YjFkM2Y3MDU5YzYyYmM4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRzLmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQXV0b2ZpbGxFbGVtZW50cyB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8QXV0b2ZpbGxFbGVtZW50cz4gY29tcHV0ZUF1dG9maWxsRWxlbWVudHMoUmVmPEhUTUxJbnB1
dEVsZW1lbnQ+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGF1dG9maWxsKFN0cmluZywgU3Ry
aW5nKTsKK3ByaXZhdGU6CisgICAgQXV0b2ZpbGxFbGVtZW50cyhSZWZQdHI8SFRNTElucHV0RWxl
bWVudD4mJiwgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+JiYpOworICAgIFJlZlB0cjxIVE1MSW5w
dXRFbGVtZW50PiBtX3VzZXJuYW1lOworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBtX3Bh
c3N3b3JkOworfTsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXggMzQwMjBlMDhlYjA2MTI5NDEwMjdlZjE4YWYyOGEy
YjVjMmJkZjk3OS4uOTQ3Y2FhZmIyMjJiYmFhODk4M2QxYzQ2ZDE2MmRlMjcwNGQ2ODAzMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKQEAgLTQzLDYgKzQzLDE3
IEBACiAjaW1wb3J0IDxVSUtpdC9VSUludGVyZmFjZV9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtp
dC9VSUtleWJvYXJkSW1wbC5oPgogI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZEludGwuaD4KKyNp
ZiBfX2hhc19pbmNsdWRlKDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rp
b24uaD4pCisjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rp
b24uaD4KKyNlbHNlCisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dF9Qcml2YXRlLmg+CitAaW50
ZXJmYWNlIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiA6IFVJVGV4dFN1Z2dl
c3Rpb24KKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnVzZXJuYW1l
OworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnBhc3N3b3JkOworCitA
ZW5kCisjZW5kaWYKICNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRfUHJpdmF0ZS5oPgogI2ltcG9y
dCA8VUlLaXQvVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+CiAjaW1wb3J0
IDxVSUtpdC9VSVBlcmlwaGVyYWxIb3N0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9B
c3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAKaW5kZXggNjZjOWYyYTQyMTI1ODE5YzhiNjhlYjY5
NmM5MWIzMzAxZDljMGZiMS4uNDIzNmUwOTA4YmQzM2Y3ODk1N2NiY2E4ZjdjYTBhMjM5YTU3ZmFk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9u
LmNwcApAQCAtODYsNiArODYsOCBAQCB2b2lkIEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjplbmNv
ZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdmFsdWU7CiAg
ICAgZW5jb2RlciA8PCB2YWx1ZUFzTnVtYmVyOwogICAgIGVuY29kZXIgPDwgdGl0bGU7CisgICAg
ZW5jb2RlciA8PCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CisgICAgZW5jb2Rl
ciA8PCByZXByZXNlbnRpbmdQYWdlVVJMOwogICAgIGVuY29kZXIuZW5jb2RlRW51bShhdXRvZmls
bEZpZWxkTmFtZSk7CiB9CiAKQEAgLTE2MCw2ICsxNjIsMTIgQEAgYm9vbCBBc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbjo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgQXNzaXN0ZWROb2RlSW5m
b3JtYXQKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50aXRsZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmFjY2VwdHNBdXRv
ZmlsbGVkTG9naW5DcmVkZW50aWFscykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJlcHJlc2VudGluZ1BhZ2VVUkwpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQuYXV0b2Zp
bGxGaWVsZE5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oCmluZGV4IDY4MjdiZTdkODQ1MjUyYmVj
ZDQ1NTMyMjRmZjk4NTQzNGI3NzIyODEuLjA4YTlmNzI0ZTQyZDU5YzY4OTg2YjU1YzU4YWFkNWRh
OGU5MjFmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24uaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b2NhcGl0YWxp
emVUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b2ZpbGwuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwOSw2ICsxMTAsOCBA
QCBzdHJ1Y3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gewogICAgIFN0cmluZyB2YWx1ZTsKICAg
ICBkb3VibGUgdmFsdWVBc051bWJlciB7IDAgfTsKICAgICBTdHJpbmcgdGl0bGU7CisgICAgYm9v
bCBhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgeyBmYWxzZSB9OworICAgIFdlYkNv
cmU6OlVSTCByZXByZXNlbnRpbmdQYWdlVVJMOwogICAgIFdlYkNvcmU6OkF1dG9maWxsRmllbGRO
YW1lIGF1dG9maWxsRmllbGROYW1lIHsgV2ViQ29yZTo6QXV0b2ZpbGxGaWVsZE5hbWU6Ok5vbmUg
fTsKIAogICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA3MTUyODIyNDA4ZmM5NDc4NGRkM2Y2MzY2YjY1
NDFhMDRhYjlmZTMwLi41M2M5NjgzNTVjYzdkODI0ZDAxYzRlNDg1NWJhYWZkZmRmMjRjYTVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNzksNiArNzksNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvU2VhcmNoUG9wdXBNZW51Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9U
ZXh0Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CkBAIC01NTksNiArNTYwLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNTY3JvbGxpbmdP
clpvb21pbmcoYm9vbCk7CiAgICAgdm9pZCByZXF1ZXN0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhT
ZWxlY3Rpb25PZmZzZXQoV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCB1aW50MzJfdCBvZmZzZXQs
IFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4m
LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0UmVjdHNBdFNlbGVj
dGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcmLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+JiYpOworICAgIGJvb2wgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRl
bnRpYWxzKCk7CisgICAgV2ViQ29yZTo6VVJMIHJlcHJlc2VudGluZ1BhZ2VVUkwoKTsKKyAgICB2
b2lkIGF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBjb25z
dCBTdHJpbmcmIHBhc3N3b3JkKTsKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAgICB2
b2lkIGRpZFBlcmZvcm1EYXRhSW50ZXJhY3Rpb25Db250cm9sbGVyT3BlcmF0aW9uKGJvb2wgaGFu
ZGxlZCk7CiAgICAgdm9pZCBkaWRIYW5kbGVTdGFydERhdGFJbnRlcmFjdGlvblJlcXVlc3QoYm9v
bCBzdGFydGVkKTsKQEAgLTE5ODgsNiArMTk5Miw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hh
c0RlZmVycmVkU3RhcnRBc3Npc3RpbmdOb2RlIHsgZmFsc2UgfTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Tm9kZUFzc2lzdGFuY2VBcmd1bWVudHM+IG1fZGVmZXJyZWROb2RlQXNzaXN0YW5jZUFyZ3Vt
ZW50czsKICAgICBib29sIG1fZm9yY2VBbHdheXNVc2VyU2NhbGFibGUgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgeyBmYWxzZSB9OworICAg
IFdlYkNvcmU6OlVSTCBtX3JlcHJlc2VudGluZ1BhZ2VVUkw7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShQT0lOVEVSX0xPQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3Lm1tCmluZGV4IGQ2MWNlZGZjMTRlMjZlYzQ4M2UwZTkwYzE4NjI3ZjIzNDFlOTUwYzMuLjY4
NWUzOTQ2NDVmNzdiODAwOGQ3ODhhZDk1NTkyZDY0Y2I5ZWJhMWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC0yNTgsNiArMjU4LDE2IEBAIC0g
KFdlYlBhZ2VQcm94eSopcGFnZQogICAgIHJldHVybiBfcGFnZS5nZXQoKTsKIH0KIAorLSAoQk9P
TClhY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMKK3sKKyAgICByZXR1cm4gX3BhZ2Ut
PmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscygpOworfQorCistIChOU1VSTCAqKXJl
cHJlc2VudGluZ1BhZ2VVUkwKK3sKKyAgICByZXR1cm4gX3BhZ2UtPnJlcHJlc2VudGluZ1BhZ2VV
UkwoKTsKK30KKwogLSAodm9pZCl3aWxsTW92ZVRvV2luZG93OihVSVdpbmRvdyAqKW5ld1dpbmRv
dwogewogICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpkZWZhdWx0Q2VudGVyID0gW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggMGY5ZDIxYzE3
ODE2N2E2NmNlZWI1MDA4OTZjMDY1OTQ2OTU5MTcyMS4uOTI5MTc2NGZiNmJmYjE3YmJjYzkxNTNm
NWJjNjM1Y2RjYjVhZjc4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0yOTc2LDEzICsyOTc2LDIwIEBA
IC0gKHZvaWQpZW5kU2VsZWN0aW9uQ2hhbmdlCiB7CiAgICAgW3NlbGYuaW5wdXREZWxlZ2F0ZSBz
ZWxlY3Rpb25EaWRDaGFuZ2U6c2VsZl07CiB9Ci0gICAgCisKKyNpZiBVU0UoQVBQTEVfSU5URVJO
QUxfU0RLKQogLSAodm9pZClpbnNlcnRUZXh0U3VnZ2VzdGlvbjooVUlUZXh0U3VnZ2VzdGlvbiAq
KXRleHRTdWdnZXN0aW9uCiB7CisgICAgLy8gRklYTUU6IFJlcGxhY2UgTlNDbGFzc0Zyb21TdHJp
bmcgd2l0aCBhY3R1YWwgY2xhc3MgYXMgc29vbiBhcyBVSUtpdCBzdWJtaXR0ZWQgdGhlIG5ldyBj
bGFzcyBpbnRvIHRoZSBpT1MgU0RLLgorICAgIGlmIChbdGV4dFN1Z2dlc3Rpb24gaXNLaW5kT2ZD
bGFzczpOU0NsYXNzRnJvbVN0cmluZyhAIlVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2Vz
dGlvbiIpXSkgeworICAgICAgICBfcGFnZS0+YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKFsoVUlL
ZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uICopdGV4dFN1Z2dlc3Rpb24gdXNlcm5h
bWVdLCBbKFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqKXRleHRTdWdnZXN0
aW9uIHBhc3N3b3JkXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWQgPF9XS0lucHV0
RGVsZWdhdGU+IGlucHV0RGVsZWdhdGUgPSBbX3dlYlZpZXcgX2lucHV0RGVsZWdhdGVdOwogICAg
IGlmIChbaW5wdXREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3
Omluc2VydFRleHRTdWdnZXN0aW9uOmluSW5wdXRTZXNzaW9uOildKQogICAgICAgICBbaW5wdXRE
ZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBpbnNlcnRUZXh0U3VnZ2VzdGlvbjp0ZXh0U3VnZ2Vz
dGlvbiBpbklucHV0U2Vzc2lvbjpfZm9ybUlucHV0U2Vzc2lvbi5nZXQoKV07CiB9CisjZW5kaWYg
Ly8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIAogLSAoTlNTdHJpbmcgKil0ZXh0SW5SYW5nZToo
VUlUZXh0UmFuZ2UgKilyYW5nZQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
ZWJQYWdlUHJveHlJT1MubW0KaW5kZXggNDcyOGUwZGZmZTEwYzVmZjdjNzA3ZTA0YTgzMTgwNGFm
YmJlMmQwNS4uZDNlNjdkN2UzNTM5MjgxNWExMzUxYWNiMWM0NmQzMTZlNDdiYTVhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCkBAIC04OTEs
NiArODkxLDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZEdldFRhcEhpZ2hsaWdodEdlb21ldHJp
ZXModWludDY0X3QgcmVxdWVzdElELCBjb25zdCBXZWJDb3IKIAogdm9pZCBXZWJQYWdlUHJveHk6
OnN0YXJ0QXNzaXN0aW5nTm9kZShjb25zdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYgaW5mb3Jt
YXRpb24sIGJvb2wgdXNlcklzSW50ZXJhY3RpbmcsIGJvb2wgYmx1clByZXZpb3VzTm9kZSwgY29u
c3QgVXNlckRhdGEmIHVzZXJEYXRhKQogeworICAgIG1fYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNy
ZWRlbnRpYWxzID0gaW5mb3JtYXRpb24uYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxz
OworICAgIG1fcmVwcmVzZW50aW5nUGFnZVVSTCA9IGluZm9ybWF0aW9uLnJlcHJlc2VudGluZ1Bh
Z2VVUkw7CiAgICAgQVBJOjpPYmplY3QqIHVzZXJEYXRhT2JqZWN0ID0gcHJvY2VzcygpLnRyYW5z
Zm9ybUhhbmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpOwogICAgIGlmICht
X2VkaXRvclN0YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKSB7CiAgICAgICAgIG1fZGVmZXJy
ZWROb2RlQXNzaXN0YW5jZUFyZ3VtZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8Tm9kZUFzc2lzdGFu
Y2VBcmd1bWVudHM+KE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzIHsgaW5mb3JtYXRpb24sIHVzZXJJ
c0ludGVyYWN0aW5nLCBibHVyUHJldmlvdXNOb2RlLCB1c2VyRGF0YU9iamVjdCB9KTsKQEAgLTkx
MCw2ICs5MTIsMjEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BBc3Npc3RpbmdOb2RlKCkKICAg
ICBtX3BhZ2VDbGllbnQuc3RvcEFzc2lzdGluZ05vZGUoKTsKIH0KIAorYm9vbCBXZWJQYWdlUHJv
eHk6OmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscygpCit7CisgICAgcmV0dXJuIG1f
YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzOworfQorCitXZWJDb3JlOjpVUkwgV2Vi
UGFnZVByb3h5OjpyZXByZXNlbnRpbmdQYWdlVVJMKCkKK3sKKyAgICByZXR1cm4gbV9yZXByZXNl
bnRpbmdQYWdlVVJMOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6YXV0b2ZpbGxMb2dpbkNyZWRl
bnRpYWxzKGNvbnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCit7
CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBdXRvZmlsbExvZ2luQ3Jl
ZGVudGlhbHModXNlcm5hbWUsIHBhc3N3b3JkKSwgbV9wYWdlSUQpOworfQorCiB2b2lkIFdlYlBh
Z2VQcm94eTo6c2hvd0luc3BlY3RvckhpZ2hsaWdodChjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQm
IGhpZ2hsaWdodCkKIHsKICAgICBtX3BhZ2VDbGllbnQuc2hvd0luc3BlY3RvckhpZ2hsaWdodCho
aWdobGlnaHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmlu
ZGV4IGJiMWY1MTI2ZDZiZjQyOTlhMzk2NzllMjUxZDM4MWFlNDRkZDc0ODQuLmJhYjIwMmU3NzZl
NThkNDRhOTc5ZmFhYjBkNjE5YWNiZmIxYTIwMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTU3Niw2ICs1NzYsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzdG9wSW50ZXJhY3Rpb24oKTsKICAgICB2b2lkIHBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWlu
dDMyX3QgYWN0aW9uKTsKICAgICB2b2lkIGZvY3VzTmV4dEFzc2lzdGVkTm9kZShib29sIGlzRm9y
d2FyZCwgQ2FsbGJhY2tJRCk7CisgICAgdm9pZCBhdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1
ZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIo
ZG91YmxlKTsKICAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVNlbGVjdGVkSW5kZXgodWludDMyX3Qg
aW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCBiMDE3NjQ3
OTNkMzkzMDFiYTNjNDJlOWYzZjY5N2IwMTY0YTAxNjY0Li5iY2JiZDA1MjgzYjZjNTkxNGExM2Y1
Nzc1ZTE5OGQyYTUwZWIzOTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTg0LDYgKzg0LDcgQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgUGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1
aW50MzJfdCBhY3Rpb24pCiAgICAgRm9jdXNOZXh0QXNzaXN0ZWROb2RlKGJvb2wgaXNGb3J3YXJk
LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBTZXRBc3Npc3RlZE5vZGVWYWx1
ZShTdHJpbmcgdmFsdWUpCisgICAgQXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKFN0cmluZyB1c2Vy
bmFtZSwgU3RyaW5nIHBhc3N3b3JkKQogICAgIFNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIo
ZG91YmxlIHZhbHVlKQogICAgIFNldEFzc2lzdGVkTm9kZVNlbGVjdGVkSW5kZXgodWludDMyX3Qg
aW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbikKICAgICBBcHBsaWNhdGlvbldpbGxS
ZXNpZ25BY3RpdmUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbQppbmRleCBkYmFmYTE1Zjg3YmE0MDc3YTdhNzVmYWRkZjM4NWRmNDI0
Mzg4YmU2Li5mZjY5MzBmM2M4Y2I5YzkyNTY3MTUyODRlYjRkMjAzZDE1MGI1MDQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpA
QCAtNTMsNiArNTMsNyBAQAogI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgogI2ltcG9ydCA8Q29yZVRl
eHQvQ1RGb250Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0F1dG9maWxsLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0F1dG9maWxsRWxlbWVudHMuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0RhdGFEZXRlY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQuaD4KQEAgLTI3NDksNiArMjc1MCw4IEBAIHZvaWQgV2ViUGFnZTo6Z2V0
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0
aW9uKQogICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBlbGVtZW50LmZvcm0oKTsKICAg
ICAgICAgaWYgKGZvcm0pCiAgICAgICAgICAgICBpbmZvcm1hdGlvbi5mb3JtQWN0aW9uID0gZm9y
bS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6YWN0aW9uQXR0cik7CisgICAg
ICAgIGluZm9ybWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyA9ICEhV2Vi
Q29yZTo6QXV0b2ZpbGxFbGVtZW50czo6Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoZWxlbWVudCk7
CisgICAgICAgIGluZm9ybWF0aW9uLnJlcHJlc2VudGluZ1BhZ2VVUkwgPSBlbGVtZW50LmRvY3Vt
ZW50KCkudXJsRm9yQmluZGluZ3MoKTsKICAgICAgICAgaW5mb3JtYXRpb24uYXV0b2NhcGl0YWxp
emVUeXBlID0gZWxlbWVudC5hdXRvY2FwaXRhbGl6ZVR5cGUoKTsKICAgICAgICAgaW5mb3JtYXRp
b24uaXNBdXRvY29ycmVjdCA9IGVsZW1lbnQuc2hvdWxkQXV0b2NvcnJlY3QoKTsKICAgICAgICAg
aWYgKGVsZW1lbnQuaXNQYXNzd29yZEZpZWxkKCkpCkBAIC0yODA2LDYgKzI4MDksMTQgQEAgdm9p
ZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbihBc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbiYgaW5mb3JtYXRpb24pCiAgICAgfQogfQogCit2b2lkIFdlYlBhZ2U6OmF1dG9maWxsTG9n
aW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBjb25zdCBTdHJpbmcmIHBhc3N3
b3JkKQoreworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PigqbV9hc3Npc3RlZE5vZGUpKSB7
CisgICAgICAgIGF1dG8gYXV0b2ZpbGxFbGVtZW50cyA9IEF1dG9maWxsRWxlbWVudHM6OmNvbXB1
dGVBdXRvZmlsbEVsZW1lbnRzKGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCptX2Fzc2lzdGVk
Tm9kZSkpOworICAgICAgICBhdXRvZmlsbEVsZW1lbnRzLT5hdXRvZmlsbCh1c2VybmFtZSwgcGFz
c3dvcmQpOworICAgIH0KK30KKwogdm9pZCBXZWJQYWdlOjpzZXRWaWV3cG9ydENvbmZpZ3VyYXRp
b25NaW5pbXVtTGF5b3V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgaWYgKG1f
dmlld3BvcnRDb25maWd1cmF0aW9uLnNldE1pbmltdW1MYXlvdXRTaXplKHNpemUpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXgg
YTA5MjM3N2IxZGU5MTVmNTY4YTUzMGU5ZTNhZWQzZjBiMzMyOWRmZi4uNWExMWIxZTgwOGYyMzQ0
MjZmMWYxODJhOWFiYTdmYzVhODQ4MzdjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5oCkBAIC0yNCw2ICsyNCw5IEBACiAgKi8KIAog
I2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUhUTUxFbGVtZW50Lmg+CisjaWYgVEFSR0VUX09TX0lQ
SE9ORQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRUcmFpdHMuaD4KKyNlbmRpZgogCiBAY2xh
c3MgRE9NRmlsZUxpc3Q7CiBAY2xhc3MgRE9NSFRNTEZvcm1FbGVtZW50OwpAQCAtMzEsNyArMzQs
MTEgQEAKIEBjbGFzcyBOU1VSTDsKIAogV0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMoMTBfNCkK
KyNpZiBUQVJHRVRfT1NfSVBIT05FCitAaW50ZXJmYWNlIERPTUhUTUxJbnB1dEVsZW1lbnQgOiBE
T01IVE1MRWxlbWVudDxVSVRleHRJbnB1dFRyYWl0cz4KKyNlbHNlCiBAaW50ZXJmYWNlIERPTUhU
TUxJbnB1dEVsZW1lbnQgOiBET01IVE1MRWxlbWVudAorI2VuZGlmCiBAcHJvcGVydHkgKGNvcHkp
IE5TU3RyaW5nICphY2NlcHQ7CiBAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICphbHQ7CiBAcHJv
cGVydHkgQk9PTCBhdXRvZm9jdXMgV0VCS0lUX0FWQUlMQUJMRV9NQUMoMTBfNik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCmluZGV4
IDliYzgwM2M1OTU4NTAxYzg2OTA5NDUyMDNmYmEyYTcwOTg1NzZkMWEuLjRjMDJkMmRlZTRhMjNl
Yzk1MGM2ZDEzZGMwNjU1NTRiMTAxOTE2MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCkBAIC0zMyw2ICszMywyMyBAQAogI2lt
cG9ydCAiRE9NSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVByaXZhdGUuaCIKICNpbXBvcnQgIkV4
Y2VwdGlvbkhhbmRsZXJzLmgiCisKKy8vIEZJWE1FIDxyYWRhcjozNDU4MzYyOD46IFNpbXBseWZ5
IHRoaXMgb25jZSB0aGUgVUlLaXQgd29yayBpcyBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkLgorI2lm
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIFRBUkdFVF9PU19JUEhPTkUKKyNpZiBfX2hhc19p
bmNsdWRlKDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24uaD4pCisj
aW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24uaD4KKyNl
bHNlCisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dF9Qcml2YXRlLmg+CitAaW50ZXJmYWNlIFVJ
S2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiA6IFVJVGV4dFN1Z2dlc3Rpb24KKwor
QHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnVzZXJuYW1lOworQHByb3Bl
cnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnBhc3N3b3JkOworCitAZW5kCisjZW5k
aWYgLy8gX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdn
ZXN0aW9uLmg+KQorI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIFRBUkdFVF9P
U19JUEhPTkUKKworI2ltcG9ydCA8V2ViQ29yZS9BdXRvZmlsbEVsZW1lbnRzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZpbGVMaXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgpAQCAtNjY2LDYgKzY4MywyOSBAQCAt
ICh2b2lkKXNldFZhbHVlRm9yVXNlcjooTlNTdHJpbmcgKilpblZhbHVlCiAgICAgSU1QTC0+c2V0
VmFsdWVGb3JVc2VyKGluVmFsdWUpOwogfQogCistIChCT09MKWFjY2VwdHNBdXRvZmlsbGVkTG9n
aW5DcmVkZW50aWFscworeworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICByZXR1cm4gISFXZWJDb3JlOjpBdXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2Zp
bGxFbGVtZW50cygqSU1QTCk7Cit9CisKKy0gKE5TVVJMICopcmVwcmVzZW50aW5nUGFnZVVSTAor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4g
W05TVVJMIFVSTFdpdGhTdHJpbmc6c2VsZi5vd25lckRvY3VtZW50LlVSTF07Cit9CisKKyNpZiBV
U0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBUQVJHRVRfT1NfSVBIT05FCistICh2b2lkKWluc2Vy
dFRleHRTdWdnZXN0aW9uOihVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKilj
cmVkZW50aWFsc1N1Z2dlc3Rpb24KK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgaWYgKGlzPFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+KElNUEwpKSB7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6QXV0b2ZpbGxFbGVtZW50cz4gYXV0b2Zp
bGxFbGVtZW50cyA9IFdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVs
ZW1lbnRzKCpJTVBMKTsKKyAgICAgICAgYXV0b2ZpbGxFbGVtZW50cy0+YXV0b2ZpbGwoY3JlZGVu
dGlhbHNTdWdnZXN0aW9uLnVzZXJuYW1lLCBjcmVkZW50aWFsc1N1Z2dlc3Rpb24ucGFzc3dvcmQp
OworICAgIH0KK30KKyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBUQVJHRVRf
T1NfSVBIT05FCisKIEBlbmQKIAogV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogY29yZShET01I
VE1MSW5wdXRFbGVtZW50ICp3cmFwcGVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDk0MjRmYTNjNTRmN2IwMjJkOWU0MDAxZTBkZWZhN2ZkMjY0
ZmM3NmEuLjYyOGQ5ODU0NWVmMDZjMTRiNjEzODIyZmE3ODlhNDJhOTYwNDNkOGEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAxNy0wOS0xOSAgRnJlZGVyaWsgUmllZGVsICA8cmllZGVsQGFwcGxlLmNvbT4KKworICAg
ICAgICBFeHBvc2Ugd2F5IHRvIHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3JtIGNvbnRyb2xz
IGFzIHtMZWdhY3kgV2ViS2l0LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
MzE4MzUwND4KKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9XS1dlYlZpZXdBdXRvZmlsbFRlc3Rz
Lm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcml2YXRlVGV4dElucHV0XSk6IFRl
c3RpbmcgaGVscGVycy4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBBZGRlZCB0ZXN0
IGNhc2VzIHRvIHRlc3QgQXV0b0ZpbGwgZm9yIHdlYiB2aWV3cy4KKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL2lvcy9VSUtpdFNQSS5oOgorCiAyMDE3LTA5LTI1ICBDYXJsb3MgQWxiZXJ0byBMb3Bl
eiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIyMjE2
MCkgW0dUS10gW0RlYnVnXSBJbnRlcm5hbCBjb21waWxlciBlcnJvciBvbiB0aGUgYnVpbGRib3Qg
KGh1Z2UgbWVtb3J5IHVzYWdlIGJ5IEdDQykKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWU4
OTQyODc0MjVmNjNmN2I5Njc0MTQzMGMxNmM4ZmUyZWJlNjE0Yy4uN2I3ZDE5YTY0ZTQzODBlNjdm
ZTY1ODMzZjhlNGQzNjYyODc2NTlmZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2MSw2
ICsxNjEsNyBAQAogCQk1MTIwQzgzRTFFNjc2NzhGMDAyNUIyNTAgLyogV2Vic2l0ZURhdGFTdG9y
ZUN1c3RvbVBhdGhzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEyMEM4M0IxRTY3NEUzNTAwMjVCMjUwIC8qIFdlYnNpdGVEYXRhU3Rv
cmVDdXN0b21QYXRocy5odG1sICovOyB9OwogCQk1MTM5M0UyMjE1MjM5NTJEMDA1RjM5QzUgLyog
RE9NV2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMzkzRTFEMTUyMzk0NEEwMDVGMzlDNSAvKiBET01X
aW5kb3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwICovOyB9OwogCQk1MTQyQjI3MzE1MTdDOEM4
MDBDMzJCMTkgLyogQ29udGV4dE1lbnVDYW5Db3B5VVJMLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0MkIyNzIxNTE3Qzg5MTAwQzMy
QjE5IC8qIENvbnRleHRNZW51Q2FuQ29weVVSTC5odG1sICovOyB9OworCQk1MTQ5NThCRTFGNzQy
N0FDMDBFODdCQUQgLyogV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNDk1OEJEMUY3NDI3QUMwMEU4N0JBRCAv
KiBXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tICovOyB9OwogCQk1MTVCRTE2RjFENDI4QkIxMDBE
RDdDNjggLyogU3RvcmVCbG9iVG9CZURlbGV0ZWQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVCRTE2RTFENDI4OEZGMDBERDdDNjgg
LyogU3RvcmVCbG9iVG9CZURlbGV0ZWQuaHRtbCAqLzsgfTsKIAkJNTE1QkUxNzExRDQyOEU0QjAw
REQ3QzY4IC8qIFN0b3JlQmxvYlRoZW5EZWxldGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVCRTE3MDFENDI4QkQxMDBERDdDNjggLyogU3RvcmVC
bG9iVGhlbkRlbGV0ZS5tbSAqLzsgfTsKIAkJNTE3MTRFQjQxQ0Y4Qzc4QzAwNDcyM0M0IC8qIFdl
YlByb2Nlc3NLaWxsSURCQ2xlYW51cC0xLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3MTRFQjIxQ0Y4Qzc2MTAwNDcyM0M0IC8qIFdl
YlByb2Nlc3NLaWxsSURCQ2xlYW51cC0xLmh0bWwgKi87IH07CkBAIC0xMjQyLDYgKzEyNDMsNyBA
QAogCQk1MTM5M0UxRTE1MjM5NDRBMDA1RjM5QzUgLyogRE9NV2luZG93RXh0ZW5zaW9uQmFzaWMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NV2luZG93RXh0ZW5z
aW9uQmFzaWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTQyQjI3MDE1MTdD
ODhCMDBDMzJCMTkgLyogQ29udGV4dE1lbnVDYW5Db3B5VVJMLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGV4dE1lbnVDYW5Db3B5VVJMLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTQyQjI3MjE1MTdDODkxMDBDMzJCMTkgLyogQ29udGV4
dE1lbnVDYW5Db3B5VVJMLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBDb250ZXh0
TWVudUNhbkNvcHlVUkwuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE0OTU4
QkQxRjc0MjdBQzAwRTg3QkFEIC8qIFdLV2ViVmlld0F1dG9maWxsVGVzdHMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTVCRTE2RTFENDI4OEZGMDBERDdDNjggLyogU3RvcmVCbG9iVG9CZURl
bGV0ZWQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IFN0b3JlQmxvYlRvQmVEZWxl
dGVkLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNUJFMTcwMUQ0MjhCRDEw
MEREN0M2OCAvKiBTdG9yZUJsb2JUaGVuRGVsZXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU3RvcmVCbG9iVGhlbkRlbGV0ZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE3MTRFQjIxQ0Y4Qzc2MTAwNDcyM0M0IC8qIFdlYlByb2Nlc3NLaWxs
SURCQ2xlYW51cC0xLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiV2ViUHJvY2Vz
c0tpbGxJREJDbGVhbnVwLTEuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTE5LDYgKzIxMjEsNyBAQAogCQkJCUY0RDRGM0I3MUU0RTM2RTQwMEJCMjc2NyAvKiBEYXRhSW50
ZXJhY3Rpb25UZXN0cy5tbSAqLywKIAkJCQk3NTYwOTE3NzE5MjU5QzU5MDA5RUYwNkUgLyogTWVt
b3J5Q2FjaGVBZGRJbWFnZVRvQ2FjaGVJT1MubW0gKi8sCiAJCQkJRjQ2ODQ5QkQxRUVGNThFNDAw
QjkzN0ZFIC8qIFVJUGFzdGVib2FyZFRlc3RzLm1tICovLAorCQkJCTUxNDk1OEJEMUY3NDI3QUMw
MEU4N0JBRCAvKiBXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tICovLAogCQkJKTsKIAkJCXBhdGgg
PSBpb3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzQ1Myw2ICszNDU2LDcgQEAK
IAkJCQkyRDRDRjhCRDFEODM2MENDMDAwMUNFOEQgLyogV0tUaHVtYm5haWxWaWV3Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTFDNjgzREUxRUExMzRFODAwNjUwMTgzIC8qIFdLVVJMU2NoZW1lSGFu
ZGxlci0xLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4MkMyMkUxRjJCQ0U1NDAwNTlCQTdDIC8q
IFdLVVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxNDk1OEJF
MUY3NDI3QUMwMEU4N0JBRCAvKiBXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkVGRjA2RDcxRDhBRjM0QTAwMDRCQjMwIC8qIFdLV2ViVmlld0NhbmRpZGF0ZVRl
c3RzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0RkM1ODUxQjg5NzM5MTAwRDEwN0VCIC8qIFdL
V2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzQxN0Yz
MzFEMTlFMTQ4MDBCOEVGNTMgLyogV0tXZWJWaWV3RGVmYXVsdE5hdmlnYXRpb25EZWxlZ2F0ZS5t
bSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9p
b3MvV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
aW9zL1dLV2ViVmlld0F1dG9maWxsVGVzdHMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTExMjg1ZWM0OTU2OTQx
NTFlMTFmNTdjZmExYTUzZGM2MjdlZTBiNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvaW9zL1dLV2ViVmlld0F1dG9maWxsVGVzdHMubW0KQEAgLTAsMCArMSwx
NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBXS19BUElfRU5B
QkxFRCAmJiBQTEFURk9STShJT1MpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKyNpbXBv
cnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1w
b3J0ICJVSUtpdFNQSS5oIgorCisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dFRyYWl0c19Qcml2
YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dF9Qcml2YXRlLmg+CisKKy8vIEZJWE1F
IDM0NTgzNjI4OiBTaW1wbHlmeSB0aGlzIG9uY2UgdGhlIFVJS2l0IHdvcmsgaXMgYXZhaWxhYmxl
IGluIHRoZSBidWlsZC4KKyNpZiBfX2hhc19pbmNsdWRlKDxVSUtpdC9VSUtleWJvYXJkTG9naW5D
cmVkZW50aWFsc1N1Z2dlc3Rpb24uaD4pCisjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkTG9naW5D
cmVkZW50aWFsc1N1Z2dlc3Rpb24uaD4KKyNlbHNlCisjaW1wb3J0IDxVSUtpdC9VSVRleHRTdWdn
ZXN0aW9uLmg+CitAaW50ZXJmYWNlIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlv
biA6IFVJVGV4dFN1Z2dlc3Rpb24KKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNT
dHJpbmcgKnVzZXJuYW1lOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcg
KnBhc3N3b3JkOworCitAZW5kCisjZW5kaWYKKworc3RhdGljIFVJS2V5Ym9hcmRMb2dpbkNyZWRl
bnRpYWxzU3VnZ2VzdGlvbiAqY3JlYXRlVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0
aW9uKCkKK3sKKyAgICByZXR1cm4gW1tOU0NsYXNzRnJvbVN0cmluZyhAIlVJS2V5Ym9hcmRMb2dp
bkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiIpIG5ld10gYXV0b3JlbGVhc2VdOworfQorCit0eXBlZGVm
IFVJVmlldyA8VUlUZXh0SW5wdXRQcml2YXRlLCBVSVRleHRJbnB1dFRyYWl0c19Qcml2YXRlLCBV
SVRleHRJbnB1dFRyYWl0c19Qcml2YXRlX1N0YWdpbmdfMzQ1ODM2Mjg+ICBBdXRvZmlsbENhbmRp
ZGF0ZVZpZXc7CisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKEF1dG9maWxsVGVzdEhlbHBl
cnMpCisKKy0gKEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqKV9wcml2YXRlVGV4dElucHV0Cit7Cisg
ICAgcmV0dXJuIChBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKilbc2VsZiB2YWx1ZUZvcktleTpAIl9j
dXJyZW50Q29udGVudFZpZXciXTsKK30KKworQGVuZAorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CisKK1RFU1QoV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywgVXNlcm5hbWVBbmRQYXNzd29yZEZp
ZWxkKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldOworICAgIEF1dG9m
aWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmlldyBfcHJpdmF0ZVRleHRJbnB1
dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPGlucHV0IGlk
PSd1c2VyJyB0eXBlPSdlbWFpbCc+PGlucHV0IGlkPSdwYXNzd29yZCcgdHlwZT0ncGFzc3dvcmQn
PiJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1c2VyLmZv
Y3VzKCkiXTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExv
Z2luQ3JlZGVudGlhbHMpOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAInBhc3N3b3JkLmZvY3VzKCkiXTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZW50Vmlldy5h
Y2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpOworCisgICAgVUlLZXlib2FyZExvZ2lu
Q3JlZGVudGlhbHNTdWdnZXN0aW9uICpjcmVkZW50aWFsU3VnZ2VzdGlvbiA9IGNyZWF0ZVVJS2V5
Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbigpOworICAgIGNyZWRlbnRpYWxTdWdnZXN0
aW9uLnVzZXJuYW1lID0gQCJmcmVkZXJpayI7CisgICAgY3JlZGVudGlhbFN1Z2dlc3Rpb24ucGFz
c3dvcmQgPSBAImZhbW9zIjsKKworICAgIFtjb250ZW50VmlldyBpbnNlcnRUZXh0U3VnZ2VzdGlv
bjpjcmVkZW50aWFsU3VnZ2VzdGlvbl07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoY3JlZGVudGlh
bFN1Z2dlc3Rpb24udXNlcm5hbWUsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJ1c2VyLnZhbHVlIl0pOworICAgIEVYUEVDVF9XS19TVFJFUShjcmVkZW50aWFsU3VnZ2Vz
dGlvbi5wYXNzd29yZCwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInBh
c3N3b3JkLnZhbHVlIl0pOworCisgICAgW3dlYlZpZXcgcmVsZWFzZV07Cit9CisKK1RFU1QoV0tX
ZWJWaWV3QXV0b2ZpbGxUZXN0cywgVXNlcm5hbWVBbmRQYXNzd29yZEZpZWxkU2VwYXJhdGVkQnlS
YWRpb0J1dHRvbikKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXTsKKyAg
ICBBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKmNvbnRlbnRWaWV3ID0gW3dlYlZpZXcgX3ByaXZhdGVU
ZXh0SW5wdXRdOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxp
bnB1dCBpZD0ndXNlcicgdHlwZT0nZW1haWwnPjxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0ncmFk
aW9fYnV0dG9uJyB2YWx1ZT0ncmFkaW8nPjxpbnB1dCBpZD0ncGFzc3dvcmQnIHR5cGU9J3Bhc3N3
b3JkJz4iXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXNl
ci5mb2N1cygpIl07CisgICAgRVhQRUNUX1RSVUUoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxs
ZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJwYXNzd29yZC5mb2N1cygpIl07CisgICAgRVhQRUNUX1RSVUUoY29udGVudFZp
ZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFVJS2V5Ym9hcmRM
b2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqY3JlZGVudGlhbFN1Z2dlc3Rpb24gPSBjcmVhdGVV
SUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24oKTsKKyAgICBjcmVkZW50aWFsU3Vn
Z2VzdGlvbi51c2VybmFtZSA9IEAiZnJlZGVyaWsiOworICAgIGNyZWRlbnRpYWxTdWdnZXN0aW9u
LnBhc3N3b3JkID0gQCJmYW1vcyI7CisKKyAgICBbY29udGVudFZpZXcgaW5zZXJ0VGV4dFN1Z2dl
c3Rpb246Y3JlZGVudGlhbFN1Z2dlc3Rpb25dOworCisgICAgRVhQRUNUX1dLX1NUUkVRKGNyZWRl
bnRpYWxTdWdnZXN0aW9uLnVzZXJuYW1lLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAidXNlci52YWx1ZSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoY3JlZGVudGlhbFN1
Z2dlc3Rpb24ucGFzc3dvcmQsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJwYXNzd29yZC52YWx1ZSJdKTsKKworICAgIFt3ZWJWaWV3IHJlbGVhc2VdOworfQorCitURVNU
KFdLV2ViVmlld0F1dG9maWxsVGVzdHMsIFR3b1RleHRGaWVsZHMpCit7CisgICAgVGVzdFdLV2Vi
VmlldyAqd2ViVmlldyA9IFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDMyMCwgNTAwKV07CisgICAgQXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICpjb250
ZW50VmlldyA9IFt3ZWJWaWV3IF9wcml2YXRlVGV4dElucHV0XTsKKyAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8aW5wdXQgaWQ9J3RleHQxJyB0eXBlPSdlbWFpbCc+
PGlucHV0IGlkPSd0ZXh0MicgdHlwZT0ndGV4dCc+Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAInRleHQxLmZvY3VzKCkiXTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0Mi5mb2N1cygpIl07Cisg
ICAgRVhQRUNUX0ZBTFNFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50
aWFscyk7Cit9CisKK1RFU1QoV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywgU3RhbmRhbG9uZVBhc3N3
b3JkRmllbGQpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV07CisgICAg
QXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICpjb250ZW50VmlldyA9IFt3ZWJWaWV3IF9wcml2YXRlVGV4
dElucHV0XTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8aW5w
dXQgaWQ9J3Bhc3N3b3JkJyB0eXBlPSdwYXNzd29yZCc+Il07CisgICAgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInBhc3N3b3JkLmZvY3VzKCkiXTsKKyAgICBFWFBFQ1Rf
VFJVRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpOworCisg
ICAgVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uICpjcmVkZW50aWFsU3VnZ2Vz
dGlvbiA9IGNyZWF0ZVVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbigpOworICAg
IGNyZWRlbnRpYWxTdWdnZXN0aW9uLnVzZXJuYW1lID0gQCJmcmVkZXJpayI7CisgICAgY3JlZGVu
dGlhbFN1Z2dlc3Rpb24ucGFzc3dvcmQgPSBAImZhbW9zIjsKKworICAgIFtjb250ZW50VmlldyBp
bnNlcnRUZXh0U3VnZ2VzdGlvbjpjcmVkZW50aWFsU3VnZ2VzdGlvbl07CisKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoY3JlZGVudGlhbFN1Z2dlc3Rpb24ucGFzc3dvcmQsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJwYXNzd29yZC52YWx1ZSJdKTsKKworICAgIFt3ZWJWaWV3
IHJlbGVhc2VdOworfQorCitURVNUKFdLV2ViVmlld0F1dG9maWxsVGVzdHMsIFN0YW5kYWxvbmVU
ZXh0RmllbGQpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV07CisgICAg
QXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICpjb250ZW50VmlldyA9IFt3ZWJWaWV3IF9wcml2YXRlVGV4
dElucHV0XTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8aW5w
dXQgaWQ9J3RleHRmaWVsZCcgdHlwZT0ndGV4dCc+Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAInRleHRmaWVsZC5mb2N1cygpIl07CisgICAgRVhQRUNUX0ZB
TFNFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7CisKKyAg
ICBbd2ViVmlldyByZWxlYXNlXTsKK30KKworVEVTVChXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLCBB
Y2NvdW50Q3JlYXRpb25QYWdlKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldOworICAgIEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmlldyBf
cHJpdmF0ZVRleHRJbnB1dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3Ry
aW5nOkAiPGlucHV0IGlkPSd1c2VyJyB0eXBlPSdlbWFpbCc+PGlucHV0IGlkPSdwYXNzd29yZCcg
dHlwZT0ncGFzc3dvcmQnPjxpbnB1dCBpZD0nY29uZmlybV9wYXNzd29yZCcgdHlwZT0ncGFzc3dv
cmQnPiJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1c2Vy
LmZvY3VzKCkiXTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxs
ZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJwYXNzd29yZC5mb2N1cygpIl07CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRlbnRW
aWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7CisKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29uZmlybV9wYXNzd29yZC5mb2N1cygpIl07
CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVk
ZW50aWFscyk7CisKKyAgICBbd2ViVmlldyByZWxlYXNlXTsKK30KKworCit9IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRCAmJiBQTEFURk9STShJ
T1MpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2lvcy9VSUtpdFNQSS5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEku
aAppbmRleCBlMDJmNTM2N2YxNzY5ODllMmI4ZTcxNzZiYWFkZjMxN2I5MjJmYWI1Li5hOGM0ZTRj
YjMxY2YxZjYzN2JkOTVkOTZkY2JhYTdlMDU0ZTg4MTgwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL2lvcy9VSUtpdFNQSS5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL1VJ
S2l0U1BJLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIAorI2ltcG9y
dCA8VUlLaXQvVUlUZXh0SW5wdXRUcmFpdHMuaD4KKwogI2lmIF9fSVBIT05FX09TX1ZFUlNJT05f
TUFYX0FMTE9XRUQgPj0gMTEwMDAwCiBAcHJvdG9jb2wgVUlEcmFnU2Vzc2lvbjsKIEBjbGFzcyBV
SURyYWdJbnRlcmFjdGlvbjsKQEAgLTM1LDYgKzM3LDEzIEBACiAKICNpbXBvcnQgPFVJS2l0L1VJ
QXBwbGljYXRpb25fUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb25f
UHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0ZS5oPgor
I2ltcG9ydCA8VUlLaXQvVUlUZXh0U3VnZ2VzdGlvbi5oPgorCisKK0Bwcm90b2NvbCBVSVRleHRJ
bnB1dFRyYWl0c19Qcml2YXRlX1N0YWdpbmdfMzQ1ODM2MjggPE5TT2JqZWN0LCBVSVRleHRJbnB1
dFRyYWl0cz4KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBhY2NlcHRzQXV0
b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHM7CitAZW5kCiAKICNlbHNlCiAKQEAgLTUxLDYgKzYwLDEw
IEBAIFdURl9FWFRFUk5fQ19FTkQKIEBlbmQKICNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9O
X01BWF9BTExPV0VEID49IDExMDAwMAogCitAcHJvdG9jb2wgVUlUZXh0SW5wdXRUcmFpdHNfUHJp
dmF0ZSA8TlNPYmplY3QsIFVJVGV4dElucHV0VHJhaXRzPgorQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBCT09MIGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKK0BlbmQK
KwogI2VuZGlmCiAKICNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDExMDAw
MAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321762</attachid>
            <date>2017-09-25 16:25:21 -0700</date>
            <delta_ts>2017-09-25 17:16:52 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-174394-20170925162520.patch</filename>
            <type>text/plain</type>
            <size>46366</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNDc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk2MDFiZDk1OTVkODQz
YmZhZjE1YzIyNTlmY2ZkMzRiMmM1NmFiZi4uYjk4MjNjMTcyZjA2ZWMwYTI1M2MxOGU5MjRkNTU0
MzEyMjhkNjVkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA5LTE5ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRz
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjppc0F1dG9maWxsYWJsZUVsZW1lbnQpOiBS
ZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgb2YgdHlwZSB0ZXh0IG9yIGVtYWlsLgorICAg
ICAgICAoV2ViQ29yZTo6bmV4dEF1dG9maWxsYWJsZUVsZW1lbnQpOiBSZXR1cm5zIHRoZSBuZXh0
IGZvY3VzYWJsZSBlbGVtZW50IHRoYXQgaXMgYXV0b2ZpbGxhYmxlLgorICAgICAgICAoV2ViQ29y
ZTo6cHJldmlvdXNBdXRvZmlsbGFibGVFbGVtZW50KTogUmV0dXJucyB0aGUgcHJldmlvdXMgZm9j
dXNhYmxlIGVsZW1lbnQgdGhhdCBpcyBhdXRvZmlsbGFibGUuCisgICAgICAgIChXZWJDb3JlOjpB
dXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyk6IENvbXB1dGVzIHRoZSBh
dXRvZmlsbCBlbGVtZW50cyAodXNlcm5hbWUgJiBwYXNzd29yZCkKKyAgICAgICAgZm9yIGEgZ2l2
ZW4gaW5wdXQgZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmF1
dG9maWxsKTogRmlsbHMgdGhlIGNyZWRlbnRpYWxzIGludG8gdGhlIHBhaXIgb2YgdXNlcm5hbWUv
cGFzc3dvcmQgZWxlbWVudHMuCisgICAgICAgICogZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50
cy5oOiBBZGRlZC4KKwogMjAxNy0wOS0yNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJlbW92ZSB1bnVzZWQgRWRpdG9yQ2xpZW50IGZ1bmN0aW9ucwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCA2OTE2MjUwMzY5YTI4NjdiMTllMWZkYzcxZGE4NjdjODhjYWViZTkzLi4wYjY3YzljMjBkZWJh
ZTA1OGRkY2FiMDMxMTYyM2IwYTAyYWY1YjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisy
MDE3LTA5LTE5ICBGcmVkZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAg
IEV4cG9zZSB3YXkgdG8gc2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMg
e0xlZ2FjeSBXZWJLaXQsIFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgz
NTA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICAqIFBs
YXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAgICAgICAgKiBTaGFyZWQvQXNzaXN0ZWROb2Rl
SW5mb3JtYXRpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgRW5jb2RlcyBhZGRpdGlvbmFsIG5vZGUgaW5mb3Jt
YXRpb24sIGluY2x1ZGluZyBpZiB0aGUgbm9kZSBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgor
ICAgICAgICAoV2ViS2l0OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZGVjb2RlKToKKyAgICAg
ICAgRGVjb2RlcyB0aGUgYWRkaXRpb25hbCBhc3Npc3RlZCBub2RlIGluZm9ybWF0aW9uLgorICAg
ICAgICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXcubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNy
ZWRlbnRpYWxzXSk6CisgICAgICAgIERldGVybWluZXMgaWYgdGhlIFdLQ29udGVudFZpZXcgc2hv
d3MgYSBsb2dpbiBzY3JlZW4uCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgcmVwcmVzZW50aW5n
UGFnZVVybF0pOgorICAgICAgICBSZXR1cm5zIHRoZSBVUkwgb2YgdGhlIGN1cnJlbnRseSBkaXNw
bGF5ZWQgd2ViIHBhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaW5zZXJ0VGV4dFN1Z2dlc3Rp
b246XSk6CisgICAgICAgIEluc2VydHMgdGhlIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlIFdl
YiBWaWV3LgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0YXJ0QXNzaXN0aW5nTm9kZSk6CisgICAgICAg
IFRyYW5zZmVyIHRoZSBhZGRpdGlvbmFsIGFzc2lzdGVkbm9kZSBpbmZvcm1hdGlvbiAoYWNjZXB0
c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIGFuZCByZXByZXNlbnRpbmdQYWdlVXJsKS4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVu
dGlhbHMpOgorICAgICAgICBSZXR1cm5zIGlmIHRoZSBXZWIgVmlldyBzaG93cyBhIGxvZ2luIHNj
cmVlbi4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXByZXNlbnRpbmdQYWdlVXJs
KToKKyAgICAgICAgUmV0dXJucyB0aGUgV2ViIFZpZXcncyBVUkwuCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKToKKyAgICAgICAgSW5zZXJ0
IHRoZSBjcmVkZW50aWFscyBpbnRvIHRoZSBXZWIgVmlldy4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRp
b24pOiBUcmFuc3BvcnRzIHRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgY3VycmVudGx5CisgICAgICAg
IGhpZ2hsaWdodGVkIG5vZGUgYWNjZXB0cyBhdXRvZmlsbGVkIGxvZ2luIGNyZWRlbnRpYWxzLgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMpOiBGaWxs
cyB0aGUgbG9naW4gY3JlZGVudGlhbHMgaW50byB0aGUKKyAgICAgICAgV2ViUGFnZS4KKwogMjAx
Ny0wOS0yNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB1
bnVzZWQgRWRpdG9yQ2xpZW50IGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmlu
ZGV4IDNiYTdkOTBkM2U5MmYxOGU1MDhiODdlOGU2NTY5ZWMxMzFmMjU3YTUuLjBjMWE5NzkzNDQz
NGQyYWIxOTQzYWY1Y2I5ZDAyMjRkOGQ1NzMxNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNy0wOS0xOSAgRnJlZGVyaWsgUmllZGVsICA8cmllZGVs
QGFwcGxlLmNvbT4KKworICAgICAgICBFeHBvc2Ugd2F5IHRvIHNldCB2YWx1ZXMgb2YgY2xhc3Np
ZmllZCBmb3JtIGNvbnRyb2xzIGFzIHtMZWdhY3kgV2ViS2l0LCBXZWJLaXR9IFNQSQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0Mzk0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE4MzUwND4KKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtl
IE5pd2EuCisKKyAgICAgICAgKiBET00vRE9NSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAq
IERPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tOgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVt
ZW50IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsc10pOgorICAgICAgICBEZXRlcm1p
bmVzIGlmIHRoaXMgSFRNTElucHV0RWxlbWVudCBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgor
ICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IHJlcHJlc2VudGluZ1BhZ2VVcmxdKToKKyAg
ICAgICAgUmV0dXJucyB0aGUgd2VicGFnZSdzIFVSTCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5
ZWQgaW4gdGhlIFdlYiBWaWV3LgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGluc2Vy
dFRleHRTdWdnZXN0aW9uOl0pOgorICAgICAgICBJbnNlcnRzIGxvZ2luIGNyZWRlbnRpYWxzIGlu
dG8gdGhlIFdlYiBWaWV3LgorCiAyMDE3LTA5LTI1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBFZGl0b3JDbGllbnQgZnVuY3Rpb25zCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NmQzOGI4YTQxZjZiOTU5NzEzMWUwMmMwMzY4MWI3YTNjNWIxODk4OS4uOTRlODViNTJkYjAxMzAy
YTNhNWYzMTUwMGQ3ZWUyZTIwYTc5M2IyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI5Niw2ICsyMjk2LDggQEAKIAkJNTE2
MkM3RjQxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjJDN0YyMTFGNzdFRkEwMDYxMkVG
RSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi87IH07CiAJCTUxNjJDN0Y1MTFGNzdFRkIwMDYxMkVG
RSAvKiBTY2hlbWVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2MkM3RjMxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE2NkQz
Q0QxRThFRDQ4RjAwQUQ2MkUzIC8qIFN0b3JhZ2VUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY2RDNDQzFFOEVENDExMDBBRDYyRTMgLyogU3Rv
cmFnZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk1MTY5OUVFMzFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY5OUVFMTFGNjA4
Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5jcHAgKi87IH07CisJCTUxNjk5RUU0MUY2
MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY5OUVFMjFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0
b2ZpbGxFbGVtZW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTUxNkJCNzk0MENFOTFFNjgwMDUxMkY3OSAvKiBKU1RyZWVXYWxrZXJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QkI3
OTIwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgKi87IH07CiAJCTUx
NkM2MjIwMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QzYyMUQxOTUwRDQ4NzAwMzM3RTc1
IC8qIEdhbWVwYWRFdmVudC5jcHAgKi87IH07CiAJCTUxNkM2MjIxMTk1MEQ0ODcwMDMzN0U3NSAv
KiBHYW1lcGFkRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNkM2MjFFMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuaCAqLzsgfTsK
QEAgLTEwMTk0LDYgKzEwMTk2LDggQEAKIAkJNTE2NDVCNTMxQjlGODg5QjAwRjc4OUNFIC8qIElE
QlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
REJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2
NDVCNTQxQjlGODhFODAwRjc4OUNFIC8qIElEQkN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTY2RDNDQzFFOEVENDExMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE2OTlFRTExRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVu
dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXV0b2ZpbGxFbGVtZW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjk5RUUyMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmls
bEVsZW1lbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1dG9maWxsRWxlbWVudHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2QkI3OTIwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdh
bGtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Ry
ZWVXYWxrZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTZDNjIx
RDE5NTBENDg3MDAzMzdFNzUgLyogR2FtZXBhZEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdhbWVwYWRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxNkM2MjFFMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZEV2ZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xODM4NCw2ICsxODM4OCw4IEBACiAJCTQ0MzI5MkMxMEVCQTZE
NzMwMEU2MjAxNiAvKiBpb3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTUxNjk5RUUxMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNw
cCAqLywKKwkJCQk1MTY5OUVFMjFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5o
ICovLAogCQkJCUQwQkQ0RjVBMTQwODg1MEYwMDY4MzlCNiAvKiBEaWN0YXRpb25Db21tYW5kSU9T
LmNwcCAqLywKIAkJCQlEMEJENEY1QjE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFu
ZElPUy5oICovLAogCQkJCUZFRDEzRDM5MENFQTkzNDYwMEQ4OTQ2NiAvKiBFZGl0b3JJT1MubW0g
Ki8sCkBAIC0yNzE1Niw2ICsyNzE2Miw3IEBACiAJCQkJQTVBN0FBNDMxMzJGMEVDQzAwRDNBM0My
IC8qIEF1dG9jYXBpdGFsaXplVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMTg0M0ZFMUM4
QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxRTk3Mjgx
QTlGOTgzNDAwN0JGMEZCIC8qIEF1dG9GaWxsQnV0dG9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTE2OTlFRTQxRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM5RDQ2NzA1MUU2MEM0NjUwMDgxOTVGQiAvKiBBdXRvcGxheUV2ZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NTgzMEQ0RTE2NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Nj
cm9sbENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDRFMEExNTRGMDkwMDBB
NDIzNCAvKiBBdXRvVGFibGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLApAQCAtMjc4MjUsNiArMjc4
MzIsNyBAQAogCQkJCTg0NzMwRDg5MTI0OEYwQjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMjlDOTk3MUY1OUI5NjMwMDlENzQwMyAvKiBGZXRj
aEJvZHlTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRDEyOURCMUYzRDE0MzgwMEQxNUU0
NyAvKiBGZXRjaEhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYw
MDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
MUFENzUzQTFDRUY2QkQxMDBBMzE0ODYgLyogRmV0Y2hPcHRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3Q0UxOTE0RDFGMkE5QUZCMDAyNzJGNzggLyogRmV0Y2hSZWZlcnJlclBvbGljeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0NFMTkxNUExRjJBOUIzNDAwMjcyRjc4IC8qIEZldGNoUmVxdWVz
dENhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMzIwLDYgKzMxMzI4LDcgQEAKIAkJCQlBNUY2
RTE2QjEzMkVENDZFMDA4RURBRTMgLyogQXV0b2NhcGl0YWxpemUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0MxODQzRkQxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDMUU5NzI3MUE5Rjk4MzQwMDdCRjBGQiAvKiBBdXRvRmlsbEJ1dHRvbkVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE2OTlFRTMxRjYwOENENTAwRDU3RDA2IC8qIEF1
dG9maWxsRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDU4MzBENEQxNjc5QjRGODAw
QUNGOEMzIC8qIEF1dG9zY3JvbGxDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
Q0ZGMDUwMEExNTRGMDkwMDBBNDIzNCAvKiBBdXRvVGFibGVMYXlvdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0RFQ0E4OUExRURGNDQ3RDAwRENCMDhCIC8qIEFWQXNzZXRUcmFja1V0aWxpdGll
cy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvQXV0b2ZpbGxFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRv
ZmlsbEVsZW1lbnRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmE4YTQ0YzU5NmQ4NTYyZjQ5YzU0ZThhMzM0
ODY4Y2VhMDczNDUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvQXV0b2ZpbGxFbGVtZW50cy5jcHAKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXV0b2ZpbGxFbGVtZW50cy5oIgorCisjaW5j
bHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F1dG9maWxsYWJsZUVsZW1lbnQoRWxl
bWVudCYgbm9kZSkKK3sKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGlucHV0RWxlbWVudCA9ICZkb3duY2FzdDxI
VE1MSW5wdXRFbGVtZW50Pihub2RlKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc1RleHRG
aWVsZCgpIHx8IGlucHV0RWxlbWVudC0+aXNFbWFpbEZpZWxkKCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IG5leHRBdXRvZmlsbGFibGVFbGVtZW50KE5vZGUq
IHN0YXJ0Tm9kZSwgRm9jdXNDb250cm9sbGVyJiBmb2N1c0NvbnRyb2xsZXIpCit7CisgICAgaWYg
KCFpczxFbGVtZW50PihzdGFydE5vZGUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IFJlZlB0cjxFbGVtZW50PiBuZXh0RWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KHN0YXJ0Tm9k
ZSk7CisgICAgZG8geworICAgICAgICBuZXh0RWxlbWVudCA9IGZvY3VzQ29udHJvbGxlci5uZXh0
Rm9jdXNhYmxlRWxlbWVudCgqbmV4dEVsZW1lbnQuZ2V0KCkpOworICAgIH0gd2hpbGUgKG5leHRF
bGVtZW50ICYmICFpc0F1dG9maWxsYWJsZUVsZW1lbnQoKm5leHRFbGVtZW50LmdldCgpKSk7CisK
KyAgICBpZiAoIW5leHRFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiAmZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5leHRFbGVtZW50KTsKK30KKworc3Rh
dGljIGlubGluZSBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gcHJldmlvdXNBdXRvZmlsbGFibGVF
bGVtZW50KE5vZGUqIHN0YXJ0Tm9kZSwgRm9jdXNDb250cm9sbGVyJiBmb2N1c0NvbnRyb2xsZXIp
Cit7CisgICAgaWYgKCFpczxFbGVtZW50PihzdGFydE5vZGUpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIFJlZlB0cjxFbGVtZW50PiBwcmV2aW91c0VsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50PihzdGFydE5vZGUpOworICAgIGRvIHsKKyAgICAgICAgcHJldmlvdXNFbGVtZW50ID0g
Zm9jdXNDb250cm9sbGVyLnByZXZpb3VzRm9jdXNhYmxlRWxlbWVudCgqcHJldmlvdXNFbGVtZW50
LmdldCgpKTsKKyAgICB9IHdoaWxlIChwcmV2aW91c0VsZW1lbnQgJiYgIWlzQXV0b2ZpbGxhYmxl
RWxlbWVudCgqcHJldmlvdXNFbGVtZW50LmdldCgpKSk7CisKKyAgICBpZiAoIXByZXZpb3VzRWxl
bWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuICZkb3duY2Fz
dDxIVE1MSW5wdXRFbGVtZW50PigqcHJldmlvdXNFbGVtZW50KTsKK30KKworQXV0b2ZpbGxFbGVt
ZW50czo6QXV0b2ZpbGxFbGVtZW50cyhSZWZQdHI8SFRNTElucHV0RWxlbWVudD4mJiB1c2VybmFt
ZSwgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+JiYgcGFzc3dvcmQpCisgICAgOiBtX3VzZXJuYW1l
KHVzZXJuYW1lKQorICAgICwgbV9wYXNzd29yZChwYXNzd29yZCkKK3sKK30KKworc3RkOjpvcHRp
b25hbDxBdXRvZmlsbEVsZW1lbnRzPiBBdXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxF
bGVtZW50cyhSZWY8SFRNTElucHV0RWxlbWVudD4gc3RhcnQpCit7CisgICAgaWYgKCFzdGFydC0+
ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgRm9j
dXNDb250cm9sbGVyJiBmb2N1c0NvbnRyb2xsZXIgPSBzdGFydC0+ZG9jdW1lbnQoKS5wYWdlKCkt
PmZvY3VzQ29udHJvbGxlcigpOworICAgIGlmIChzdGFydC0+aXNQYXNzd29yZEZpZWxkKCkpIHsK
KyAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9IHByZXZp
b3VzQXV0b2ZpbGxhYmxlRWxlbWVudChzdGFydC5wdHIoKSwgZm9jdXNDb250cm9sbGVyKTsKKyAg
ICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IG5leHRFbGVtZW50ID0gbmV4dEF1dG9maWxs
YWJsZUVsZW1lbnQoc3RhcnQucHRyKCksIGZvY3VzQ29udHJvbGxlcik7CisgICAgICAgIGJvb2wg
aGFzRHVwbGljYXRlUGFzc3dvcmRFbGVtZW50cyA9IChuZXh0RWxlbWVudCAmJiBuZXh0RWxlbWVu
dC0+aXNQYXNzd29yZEZpZWxkKCkpIHx8IChwcmV2aW91c0VsZW1lbnQgJiYgcHJldmlvdXNFbGVt
ZW50LT5pc1Bhc3N3b3JkRmllbGQoKSk7CisgICAgICAgIGlmIChoYXNEdXBsaWNhdGVQYXNzd29y
ZEVsZW1lbnRzKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBp
ZiAocHJldmlvdXNFbGVtZW50ICYmIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpwcmV2aW91c0VsZW1l
bnQpKSB7CisgICAgICAgICAgICBpZiAocHJldmlvdXNFbGVtZW50LT5pc1RleHRGaWVsZCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBBdXRvZmlsbEVsZW1lbnRzKFdURk1vdmUocHJldmlvdXNF
bGVtZW50KSwgV1RGTW92ZShzdGFydCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IG5leHRFbGVtZW50ID0gbmV4dEF1dG9maWxsYWJs
ZUVsZW1lbnQoc3RhcnQucHRyKCksIGZvY3VzQ29udHJvbGxlcik7CisgICAgICAgIGlmIChuZXh0
RWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVtZW50PigqbmV4dEVsZW1lbnQpKSB7CisgICAgICAg
ICAgICBpZiAobmV4dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpKSB7CisgICAgICAgICAgICAg
ICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGVsZW1lbnRBZnRlcm5leHRFbGVtZW50ID0gbmV4
dEF1dG9maWxsYWJsZUVsZW1lbnQobmV4dEVsZW1lbnQuZ2V0KCksIGZvY3VzQ29udHJvbGxlcik7
CisgICAgICAgICAgICAgICAgYm9vbCBoYXNEdXBsaWNhdGVQYXNzd29yZEVsZW1lbnRzID0gZWxl
bWVudEFmdGVybmV4dEVsZW1lbnQgJiYgZWxlbWVudEFmdGVybmV4dEVsZW1lbnQtPmlzUGFzc3dv
cmRGaWVsZCgpOworICAgICAgICAgICAgICAgIGlmIChoYXNEdXBsaWNhdGVQYXNzd29yZEVsZW1l
bnRzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEF1dG9maWxsRWxlbWVudHMoV1RGTW92ZShzdGFydCksIFdURk1vdmUo
bmV4dEVsZW1lbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChzdGFydC0+aXNQYXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVs
ZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9IHByZXZpb3VzQXV0b2ZpbGxhYmxlRWxlbWVudChzdGFy
dC5wdHIoKSwgZm9jdXNDb250cm9sbGVyKTsKKyAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1l
bnQ+IG5leHRFbGVtZW50ID0gbmV4dEF1dG9maWxsYWJsZUVsZW1lbnQoc3RhcnQucHRyKCksIGZv
Y3VzQ29udHJvbGxlcik7CisgICAgICAgIGlmICghcHJldmlvdXNFbGVtZW50ICYmICFuZXh0RWxl
bWVudCkKKyAgICAgICAgICAgIHJldHVybiBBdXRvZmlsbEVsZW1lbnRzKG51bGxwdHIsIHN0YXJ0
LnB0cigpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwordm9pZCBBdXRv
ZmlsbEVsZW1lbnRzOjphdXRvZmlsbChTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkK
K3sKKyAgICBpZiAobV91c2VybmFtZSkgeworICAgICAgICBtX3VzZXJuYW1lLT5zZXRWYWx1ZUZv
clVzZXIodXNlcm5hbWUpOworICAgICAgICBtX3VzZXJuYW1lLT5zZXRBdXRvRmlsbGVkKCk7Cisg
ICAgfQorICAgIGlmIChtX3Bhc3N3b3JkKSB7CisgICAgICAgIG1fcGFzc3dvcmQtPnNldFZhbHVl
Rm9yVXNlcihwYXNzd29yZCk7CisgICAgICAgIG1fcGFzc3dvcmQtPnNldEF1dG9GaWxsZWQoKTsK
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzQyOTAxNzk1NDEzZjM5
Nzg0NGUzNmIxZDNmNzA1OWM2MmJjODI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEF1dG9maWxsRWxlbWVudHMgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEF1
dG9maWxsRWxlbWVudHM+IGNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKFJlZjxIVE1MSW5wdXRFbGVt
ZW50Pik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhdXRvZmlsbChTdHJpbmcsIFN0cmluZyk7
Citwcml2YXRlOgorICAgIEF1dG9maWxsRWxlbWVudHMoUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
JiYsIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiYmKTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxl
bWVudD4gbV91c2VybmFtZTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbV9wYXNzd29y
ZDsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3Bp
L2lvcy9VSUtpdFNQSS5oCmluZGV4IDM0MDIwZTA4ZWIwNjEyOTQxMDI3ZWYxOGFmMjhhMmI1YzJi
ZGY5NzkuLjk0N2NhYWZiMjIyYmJhYTg5ODNkMWM0NmQxNjJkZTI3MDRkNjgwMzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC00Myw2ICs0MywxNyBAQAog
I2ltcG9ydCA8VUlLaXQvVUlJbnRlcmZhY2VfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlL
ZXlib2FyZEltcGwuaD4KICNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRJbnRsLmg+CisjaWYgX19o
YXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+
KQorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+
CisjZWxzZQorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRfUHJpdmF0ZS5oPgorQGludGVyZmFj
ZSBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gOiBVSVRleHRTdWdnZXN0aW9u
CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICp1c2VybmFtZTsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIE5TU3RyaW5nICpwYXNzd29yZDsKKworQGVuZAor
I2VuZGlmCiAjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJ
S2l0L1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlL
aXQvVUlQZXJpcGhlcmFsSG9zdC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24uY3BwCmluZGV4IDY2YzlmMmE0MjEyNTgxOWM4YjY4ZWI2OTZjOTFi
MzMwMWQ5YzBmYjEuLjQyMzZlMDkwOGJkMzNmNzg5NTdjYmNhOGY3Y2EwYTIzOWE1N2ZhZDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAK
QEAgLTg2LDYgKzg2LDggQEAgdm9pZCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZW5jb2RlKElQ
Qzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHZhbHVlOwogICAgIGVu
Y29kZXIgPDwgdmFsdWVBc051bWJlcjsKICAgICBlbmNvZGVyIDw8IHRpdGxlOworICAgIGVuY29k
ZXIgPDwgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzOworICAgIGVuY29kZXIgPDwg
cmVwcmVzZW50aW5nUGFnZVVSTDsKICAgICBlbmNvZGVyLmVuY29kZUVudW0oYXV0b2ZpbGxGaWVs
ZE5hbWUpOwogfQogCkBAIC0xNjAsNiArMTYyLDEyIEBAIGJvb2wgQXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb246OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIEFzc2lzdGVkTm9kZUluZm9ybWF0
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQudGl0bGUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5hY2NlcHRzQXV0b2ZpbGxl
ZExvZ2luQ3JlZGVudGlhbHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5yZXByZXNlbnRpbmdQYWdlVVJMKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0LmF1dG9maWxsRmll
bGROYW1lKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uaAppbmRleCA2ODI3YmU3ZDg0NTI1MmJlY2Q0NTUz
MjI0ZmY5ODU0MzRiNzcyMjgxLi4wOGE5ZjcyNGU0MmQ1OWM2ODk4NmI1NWM1OGFhZDVkYThlOTIx
ZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9u
LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0F1dG9jYXBpdGFsaXplVHlw
ZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dG9maWxsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9J
bnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMDksNiArMTEwLDggQEAgc3Ry
dWN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uIHsKICAgICBTdHJpbmcgdmFsdWU7CiAgICAgZG91
YmxlIHZhbHVlQXNOdW1iZXIgeyAwIH07CiAgICAgU3RyaW5nIHRpdGxlOworICAgIGJvb2wgYWNj
ZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpV
UkwgcmVwcmVzZW50aW5nUGFnZVVSTDsKICAgICBXZWJDb3JlOjpBdXRvZmlsbEZpZWxkTmFtZSBh
dXRvZmlsbEZpZWxkTmFtZSB7IFdlYkNvcmU6OkF1dG9maWxsRmllbGROYW1lOjpOb25lIH07CiAK
ICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKaW5kZXggMTMxNjdkYTYwZTY4Y2NiOGM2MzM0NmFhNzNmNGZmZGNm
YTdhNjI5YS4uMTg5MzJjYjk2MTlhN2IyN2I5MTA3YjAwYzZmMTEyYzY4ODRhOWFlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVudS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENo
ZWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0R3JhbnVsYXJpdHkuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvbi5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpA
QCAtNTU5LDYgKzU2MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzU2Nyb2xsaW5nT3Jab29t
aW5nKGJvb2wpOwogICAgIHZvaWQgcmVxdWVzdFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0
aW9uT2Zmc2V0KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgdWludDMyX3Qgb2Zmc2V0LCBXVEY6
OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgcmVxdWVzdFJlY3RzQXRTZWxlY3Rpb25P
ZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiwgV1RGOjpGdW5jdGlv
bjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYsIENhbGxiYWNrQmFz
ZTo6RXJyb3IpPiYmKTsKKyAgICBib29sIGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFs
cygpOworICAgIFdlYkNvcmU6OlVSTCByZXByZXNlbnRpbmdQYWdlVVJMKCk7CisgICAgdm9pZCBh
dXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3Ry
aW5nJiBwYXNzd29yZCk7CiAjaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCiAgICAgdm9pZCBk
aWRQZXJmb3JtRGF0YUludGVyYWN0aW9uQ29udHJvbGxlck9wZXJhdGlvbihib29sIGhhbmRsZWQp
OwogICAgIHZvaWQgZGlkSGFuZGxlU3RhcnREYXRhSW50ZXJhY3Rpb25SZXF1ZXN0KGJvb2wgc3Rh
cnRlZCk7CkBAIC0xOTg4LDYgKzE5OTIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNEZWZl
cnJlZFN0YXJ0QXNzaXN0aW5nTm9kZSB7IGZhbHNlIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPE5v
ZGVBc3Npc3RhbmNlQXJndW1lbnRzPiBtX2RlZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVudHM7
CiAgICAgYm9vbCBtX2ZvcmNlQWx3YXlzVXNlclNjYWxhYmxlIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzIHsgZmFsc2UgfTsKKyAgICBXZWJD
b3JlOjpVUkwgbV9yZXByZXNlbnRpbmdQYWdlVVJMOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUE9J
TlRFUl9MT0NLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5t
bQppbmRleCBkNjFjZWRmYzE0ZTI2ZWM0ODNlMGU5MGMxODYyN2YyMzQxZTk1MGMzLi42ODVlMzk0
NjQ1Zjc3YjgwMDhkNzg4YWQ5NTU5MmQ2NGNiOWViYTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQpAQCAtMjU4LDYgKzI1OCwxNiBAQCAtIChXZWJQ
YWdlUHJveHkqKXBhZ2UKICAgICByZXR1cm4gX3BhZ2UuZ2V0KCk7CiB9CiAKKy0gKEJPT0wpYWNj
ZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzCit7CisgICAgcmV0dXJuIF9wYWdlLT5hY2Nl
cHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKTsKK30KKworLSAoTlNVUkwgKilyZXByZXNl
bnRpbmdQYWdlVVJMCit7CisgICAgcmV0dXJuIF9wYWdlLT5yZXByZXNlbnRpbmdQYWdlVVJMKCk7
Cit9CisKIC0gKHZvaWQpd2lsbE1vdmVUb1dpbmRvdzooVUlXaW5kb3cgKiluZXdXaW5kb3cKIHsK
ICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqZGVmYXVsdENlbnRlciA9IFtOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IDBmOWQyMWMxNzgxNjdh
NjZjZWViNTAwODk2YzA2NTk0Njk1OTE3MjEuLjkyOTE3NjRmYjZiZmIxN2JiY2M5MTUzZjViYzYz
NWNkY2I1YWY3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtMjk3NiwxMyArMjk3NiwyMCBAQCAtICh2
b2lkKWVuZFNlbGVjdGlvbkNoYW5nZQogewogICAgIFtzZWxmLmlucHV0RGVsZWdhdGUgc2VsZWN0
aW9uRGlkQ2hhbmdlOnNlbGZdOwogfQotICAgIAorCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKIC0gKHZvaWQpaW5zZXJ0VGV4dFN1Z2dlc3Rpb246KFVJVGV4dFN1Z2dlc3Rpb24gKil0ZXh0
U3VnZ2VzdGlvbgogeworICAgIC8vIEZJWE1FOiBSZXBsYWNlIE5TQ2xhc3NGcm9tU3RyaW5nIHdp
dGggYWN0dWFsIGNsYXNzIGFzIHNvb24gYXMgVUlLaXQgc3VibWl0dGVkIHRoZSBuZXcgY2xhc3Mg
aW50byB0aGUgaU9TIFNESy4KKyAgICBpZiAoW3RleHRTdWdnZXN0aW9uIGlzS2luZE9mQ2xhc3M6
TlNDbGFzc0Zyb21TdHJpbmcoQCJVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24i
KV0pIHsKKyAgICAgICAgX3BhZ2UtPmF1dG9maWxsTG9naW5DcmVkZW50aWFscyhbKFVJS2V5Ym9h
cmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqKXRleHRTdWdnZXN0aW9uIHVzZXJuYW1lXSwg
WyhVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKil0ZXh0U3VnZ2VzdGlvbiBw
YXNzd29yZF0pOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlkIDxfV0tJbnB1dERlbGVn
YXRlPiBpbnB1dERlbGVnYXRlID0gW193ZWJWaWV3IF9pbnB1dERlbGVnYXRlXTsKICAgICBpZiAo
W2lucHV0RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzppbnNl
cnRUZXh0U3VnZ2VzdGlvbjppbklucHV0U2Vzc2lvbjopXSkKICAgICAgICAgW2lucHV0RGVsZWdh
dGUgX3dlYlZpZXc6X3dlYlZpZXcgaW5zZXJ0VGV4dFN1Z2dlc3Rpb246dGV4dFN1Z2dlc3Rpb24g
aW5JbnB1dFNlc3Npb246X2Zvcm1JbnB1dFNlc3Npb24uZ2V0KCldOwogfQorI2VuZGlmIC8vIFVT
RShBUFBMRV9JTlRFUk5BTF9TREspCiAKIC0gKE5TU3RyaW5nICopdGV4dEluUmFuZ2U6KFVJVGV4
dFJhbmdlICopcmFuZ2UKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFn
ZVByb3h5SU9TLm1tCmluZGV4IDQ3MjhlMGRmZmUxMGM1ZmY3YzcwN2UwNGE4MzE4MDRhZmJiZTJk
MDUuLmQzZTY3ZDdlMzUzOTI4MTVhMTM1MWFjYjFjNDZkMzE2ZTQ3YmE1YTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAtODkxLDYgKzg5
MSw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRHZXRUYXBIaWdobGlnaHRHZW9tZXRyaWVzKHVp
bnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzdGFy
dEFzc2lzdGluZ05vZGUoY29uc3QgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9u
LCBib29sIHVzZXJJc0ludGVyYWN0aW5nLCBib29sIGJsdXJQcmV2aW91c05vZGUsIGNvbnN0IFVz
ZXJEYXRhJiB1c2VyRGF0YSkKIHsKKyAgICBtX2FjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50
aWFscyA9IGluZm9ybWF0aW9uLmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKKyAg
ICBtX3JlcHJlc2VudGluZ1BhZ2VVUkwgPSBpbmZvcm1hdGlvbi5yZXByZXNlbnRpbmdQYWdlVVJM
OwogICAgIEFQSTo6T2JqZWN0KiB1c2VyRGF0YU9iamVjdCA9IHByb2Nlc3MoKS50cmFuc2Zvcm1I
YW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKTsKICAgICBpZiAobV9lZGl0
b3JTdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkgewogICAgICAgICBtX2RlZmVycmVkTm9k
ZUFzc2lzdGFuY2VBcmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPE5vZGVBc3Npc3RhbmNlQXJn
dW1lbnRzPihOb2RlQXNzaXN0YW5jZUFyZ3VtZW50cyB7IGluZm9ybWF0aW9uLCB1c2VySXNJbnRl
cmFjdGluZywgYmx1clByZXZpb3VzTm9kZSwgdXNlckRhdGFPYmplY3QgfSk7CkBAIC05MTAsNiAr
OTEyLDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdG9wQXNzaXN0aW5nTm9kZSgpCiAgICAgbV9w
YWdlQ2xpZW50LnN0b3BBc3Npc3RpbmdOb2RlKCk7CiB9CiAKK2Jvb2wgV2ViUGFnZVByb3h5Ojph
Y2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMoKQoreworICAgIHJldHVybiBtX2FjY2Vw
dHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKK30KKworV2ViQ29yZTo6VVJMIFdlYlBhZ2VQ
cm94eTo6cmVwcmVzZW50aW5nUGFnZVVSTCgpCit7CisgICAgcmV0dXJuIG1fcmVwcmVzZW50aW5n
UGFnZVVSTDsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmF1dG9maWxsTG9naW5DcmVkZW50aWFs
cyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QXV0b2ZpbGxMb2dpbkNyZWRlbnRp
YWxzKHVzZXJuYW1lLCBwYXNzd29yZCksIG1fcGFnZUlEKTsKK30KKwogdm9pZCBXZWJQYWdlUHJv
eHk6OnNob3dJbnNwZWN0b3JIaWdobGlnaHQoY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiBoaWdo
bGlnaHQpCiB7CiAgICAgbV9wYWdlQ2xpZW50LnNob3dJbnNwZWN0b3JIaWdobGlnaHQoaGlnaGxp
Z2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA0
ZTcxNTQ3ZWI0M2UzMzI2ODYzODdlZWEzZmJjYzk5YTYwOTQyYzBjLi42YTc2OTE3ZGIzMGRhZjQ5
NDI1ZmExY2RmZTU2YTNkN2MxMzg1ZjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCkBAIC01NzYsNiArNTc2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3Rv
cEludGVyYWN0aW9uKCk7CiAgICAgdm9pZCBwZXJmb3JtQWN0aW9uT25FbGVtZW50KHVpbnQzMl90
IGFjdGlvbik7CiAgICAgdm9pZCBmb2N1c05leHRBc3Npc3RlZE5vZGUoYm9vbCBpc0ZvcndhcmQs
IENhbGxiYWNrSUQpOworICAgIHZvaWQgYXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFsdWUoY29u
c3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJs
ZSk7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4
LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggNjgyMTVhNTU4YTBk
NTMwNzI3ZWJmNjJlNzEyMTEwNjYyYjNkYmU2ZS4uM2FjY2YzNmUxMzQ2YjVjZDRkMjNmNzdkNTZm
MTIwYmMxM2Q5YjgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC04NCw2ICs4NCw3IEBAIG1lc3NhZ2VzIC0+IFdl
YlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIFBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMy
X3QgYWN0aW9uKQogICAgIEZvY3VzTmV4dEFzc2lzdGVkTm9kZShib29sIGlzRm9yd2FyZCwgV2Vi
S2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgU2V0QXNzaXN0ZWROb2RlVmFsdWUoU3Ry
aW5nIHZhbHVlKQorICAgIEF1dG9maWxsTG9naW5DcmVkZW50aWFscyhTdHJpbmcgdXNlcm5hbWUs
IFN0cmluZyBwYXNzd29yZCkKICAgICBTZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJs
ZSB2YWx1ZSkKICAgICBTZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4
LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rpb24pCiAgICAgQXBwbGljYXRpb25XaWxsUmVzaWdu
QWN0aXZlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KaW5kZXggZGJhZmExNWY4N2JhNDA3N2E3YTc1ZmFkZGYzODVkZjQyNDM4OGJl
Ni4uNGFhN2E5NGFkNWFiMzRjZmEzOWVjNGZmMThkNTIwMjViMGU3Y2QyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTUz
LDYgKzUzLDcgQEAKICNpbXBvcnQgIldlYlByb2Nlc3MuaCIKICNpbXBvcnQgPENvcmVUZXh0L0NU
Rm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9BdXRvZmlsbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9B
dXRvZmlsbEVsZW1lbnRzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9EYXRhRGV0ZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RpYWdub3N0aWNMb2dn
aW5nQ2xpZW50Lmg+CkBAIC0yNzQ5LDYgKzI3NTAsOCBAQCB2b2lkIFdlYlBhZ2U6OmdldEFzc2lz
dGVkTm9kZUluZm9ybWF0aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbikK
ICAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gZWxlbWVudC5mb3JtKCk7CiAgICAgICAg
IGlmIChmb3JtKQogICAgICAgICAgICAgaW5mb3JtYXRpb24uZm9ybUFjdGlvbiA9IGZvcm0tPmdl
dFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmFjdGlvbkF0dHIpOworICAgICAgICBp
bmZvcm1hdGlvbi5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMgPSAhIVdlYkNvcmU6
OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKGVsZW1lbnQpOworICAg
ICAgICBpbmZvcm1hdGlvbi5yZXByZXNlbnRpbmdQYWdlVVJMID0gZWxlbWVudC5kb2N1bWVudCgp
LnVybEZvckJpbmRpbmdzKCk7CiAgICAgICAgIGluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlw
ZSA9IGVsZW1lbnQuYXV0b2NhcGl0YWxpemVUeXBlKCk7CiAgICAgICAgIGluZm9ybWF0aW9uLmlz
QXV0b2NvcnJlY3QgPSBlbGVtZW50LnNob3VsZEF1dG9jb3JyZWN0KCk7CiAgICAgICAgIGlmIChl
bGVtZW50LmlzUGFzc3dvcmRGaWVsZCgpKQpAQCAtMjgwNiw2ICsyODA5LDE0IEBAIHZvaWQgV2Vi
UGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24m
IGluZm9ybWF0aW9uKQogICAgIH0KIH0KIAordm9pZCBXZWJQYWdlOjphdXRvZmlsbExvZ2luQ3Jl
ZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkK
K3sKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKSkgeworICAg
ICAgICBpZihhdXRvIGF1dG9maWxsRWxlbWVudHMgPSBBdXRvZmlsbEVsZW1lbnRzOjpjb21wdXRl
QXV0b2ZpbGxFbGVtZW50cyhkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqbV9hc3Npc3RlZE5v
ZGUpKSkKKyAgICAgICAgICAgIGF1dG9maWxsRWxlbWVudHMtPmF1dG9maWxsKHVzZXJuYW1lLCBw
YXNzd29yZCk7CisgICAgfQorfQorCiB2b2lkIFdlYlBhZ2U6OnNldFZpZXdwb3J0Q29uZmlndXJh
dGlvbk1pbmltdW1MYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAo
bV92aWV3cG9ydENvbmZpZ3VyYXRpb24uc2V0TWluaW11bUxheW91dFNpemUoc2l6ZSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5o
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaAppbmRl
eCBhMDkyMzc3YjFkZTkxNWY1NjhhNTMwZTllM2FlZDNmMGIzMzI5ZGZmLi41YTExYjFlODA4ZjIz
NDQyNmYxZjE4MmE5YWJhN2ZjNWE4NDgzN2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTI0LDYgKzI0LDkgQEAKICAqLwog
CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NSFRNTEVsZW1lbnQuaD4KKyNpZiBUQVJHRVRfT1Nf
SVBIT05FCisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dFRyYWl0cy5oPgorI2VuZGlmCiAKIEBj
bGFzcyBET01GaWxlTGlzdDsKIEBjbGFzcyBET01IVE1MRm9ybUVsZW1lbnQ7CkBAIC0zMSw3ICsz
NCwxMSBAQAogQGNsYXNzIE5TVVJMOwogCiBXRUJLSVRfQ0xBU1NfQVZBSUxBQkxFX01BQygxMF80
KQorI2lmIFRBUkdFVF9PU19JUEhPTkUKK0BpbnRlcmZhY2UgRE9NSFRNTElucHV0RWxlbWVudCA6
IERPTUhUTUxFbGVtZW50PFVJVGV4dElucHV0VHJhaXRzPgorI2Vsc2UKIEBpbnRlcmZhY2UgRE9N
SFRNTElucHV0RWxlbWVudCA6IERPTUhUTUxFbGVtZW50CisjZW5kaWYKIEBwcm9wZXJ0eSAoY29w
eSkgTlNTdHJpbmcgKmFjY2VwdDsKIEBwcm9wZXJ0eSAoY29weSkgTlNTdHJpbmcgKmFsdDsKIEBw
cm9wZXJ0eSBCT09MIGF1dG9mb2N1cyBXRUJLSVRfQVZBSUxBQkxFX01BQygxMF82KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQubW0KaW5k
ZXggOWJjODAzYzU5NTg1MDFjODY5MDk0NTIwM2ZiYTJhNzA5ODU3NmQxYS4uOGJkOGNjNzc3ZWU2
ZjZhZGI5M2RjYzRlMDM4ZGNiMTdjNjM2YmNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQubW0KQEAgLTMzLDYgKzMzLDIzIEBACiAj
aW1wb3J0ICJET01JbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NUHJpdmF0ZS5oIgogI2ltcG9ydCAi
RXhjZXB0aW9uSGFuZGxlcnMuaCIKKworLy8gRklYTUUgPHJhZGFyOjM0NTgzNjI4PjogU2ltcGx5
ZnkgdGhpcyBvbmNlIHRoZSBVSUtpdCB3b3JrIGlzIGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQuCisj
aWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgVEFSR0VUX09TX0lQSE9ORQorI2lmIF9faGFz
X2luY2x1ZGUoPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbi5oPikK
KyNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbi5oPgor
I2Vsc2UKKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZhdGUuaD4KK0BpbnRlcmZhY2Ug
VUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uIDogVUlUZXh0U3VnZ2VzdGlvbgor
CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU1N0cmluZyAqdXNlcm5hbWU7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBOU1N0cmluZyAqcGFzc3dvcmQ7CisKK0BlbmQKKyNl
bmRpZiAvLyBfX2hhc19pbmNsdWRlKDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1
Z2dlc3Rpb24uaD4pCisjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgVEFSR0VU
X09TX0lQSE9ORQorCisjaW1wb3J0IDxXZWJDb3JlL0F1dG9maWxsRWxlbWVudHMuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRmlsZUxpc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CkBAIC02NjYsNiArNjgzLDI5IEBA
IC0gKHZvaWQpc2V0VmFsdWVGb3JVc2VyOihOU1N0cmluZyAqKWluVmFsdWUKICAgICBJTVBMLT5z
ZXRWYWx1ZUZvclVzZXIoaW5WYWx1ZSk7CiB9CiAKKy0gKEJPT0wpYWNjZXB0c0F1dG9maWxsZWRM
b2dpbkNyZWRlbnRpYWxzCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIHJldHVybiAhIVdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVBdXRv
ZmlsbEVsZW1lbnRzKCpJTVBMKTsKK30KKworLSAoTlNVUkwgKilyZXByZXNlbnRpbmdQYWdlVVJM
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVy
biBbTlNVUkwgVVJMV2l0aFN0cmluZzpzZWxmLm93bmVyRG9jdW1lbnQuVVJMXTsKK30KKworI2lm
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIFRBUkdFVF9PU19JUEhPTkUKKy0gKHZvaWQpaW5z
ZXJ0VGV4dFN1Z2dlc3Rpb246KFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAq
KWNyZWRlbnRpYWxzU3VnZ2VzdGlvbgoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBpZiAoaXM8V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudD4oSU1QTCkp
IHsKKyAgICAgICAgaWYgKGF1dG8gYXV0b2ZpbGxFbGVtZW50cyA9IFdlYkNvcmU6OkF1dG9maWxs
RWxlbWVudHM6OmNvbXB1dGVBdXRvZmlsbEVsZW1lbnRzKCpJTVBMKSkKKyAgICAgICAgICAgIGF1
dG9maWxsRWxlbWVudHMtPmF1dG9maWxsKGNyZWRlbnRpYWxzU3VnZ2VzdGlvbi51c2VybmFtZSwg
Y3JlZGVudGlhbHNTdWdnZXN0aW9uLnBhc3N3b3JkKTsKKyAgICB9Cit9CisjZW5kaWYgLy8gVVNF
KEFQUExFX0lOVEVSTkFMX1NESykgJiYgVEFSR0VUX09TX0lQSE9ORQorCiBAZW5kCiAKIFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqIGNvcmUoRE9NSFRNTElucHV0RWxlbWVudCAqd3JhcHBlcikK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ZjE2
N2Y0MmM1MWUzNTFkZjJmM2E5YTZiNjJhZWM3YjA5ZjYwYWM2Li5iNDA4Y2E4YmM2YWNlZTMwMjk1
MzJjNmJjYzZiYjQxMTg3MzI1OWFmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDktMTkgIEZyZWRlcmlrIFJp
ZWRlbCAgPHJpZWRlbEBhcHBsZS5jb20+CisKKyAgICAgICAgRXhwb3NlIHdheSB0byBzZXQgdmFs
dWVzIG9mIGNsYXNzaWZpZWQgZm9ybSBjb250cm9scyBhcyB7TGVnYWN5IFdlYktpdCwgV2ViS2l0
fSBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NDM5NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxODM1MDQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9pb3MvV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbTogQWRkZWQuCisgICAgICAgICgtW1dL
V2ViVmlldyBfcHJpdmF0ZVRleHRJbnB1dF0pOiBUZXN0aW5nIGhlbHBlcnMuCisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKTogQWRkZWQgdGVzdCBjYXNlcyB0byB0ZXN0IEF1dG9GaWxsIGZv
ciB3ZWIgdmlld3MuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaDoKKwog
MjAxNy0wOS0yNSAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgSGlnaCBTaWVycmEgYm90cyB0byBidWlsZGJvdCBhbmQgZGFzaGJvYXJkLgpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBhZTg5NDI4NzQyNWY2M2Y3Yjk2NzQxNDMwYzE2YzhmZTJlYmU2
MTRjLi43YjdkMTlhNjRlNDM4MGU2N2ZlNjU4MzNmOGU0ZDM2NjI4NzY1OWZmIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTYxLDYgKzE2MSw3IEBACiAJCTUxMjBDODNFMUU2NzY3OEYwMDI1
QjI1MCAvKiBXZWJzaXRlRGF0YVN0b3JlQ3VzdG9tUGF0aHMuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTIwQzgzQjFFNjc0RTM1MDAy
NUIyNTAgLyogV2Vic2l0ZURhdGFTdG9yZUN1c3RvbVBhdGhzLmh0bWwgKi87IH07CiAJCTUxMzkz
RTIyMTUyMzk1MkQwMDVGMzlDNSAvKiBET01XaW5kb3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzOTNFMUQx
NTIzOTQ0QTAwNUYzOUM1IC8qIERPTVdpbmRvd0V4dGVuc2lvbkJhc2ljX0J1bmRsZS5jcHAgKi87
IH07CiAJCTUxNDJCMjczMTUxN0M4QzgwMEMzMkIxOSAvKiBDb250ZXh0TWVudUNhbkNvcHlVUkwu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTQyQjI3MjE1MTdDODkxMDBDMzJCMTkgLyogQ29udGV4dE1lbnVDYW5Db3B5VVJMLmh0bWwg
Ki87IH07CisJCTUxNDk1OEJFMUY3NDI3QUMwMEU4N0JBRCAvKiBXS1dlYlZpZXdBdXRvZmlsbFRl
c3RzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0
OTU4QkQxRjc0MjdBQzAwRTg3QkFEIC8qIFdLV2ViVmlld0F1dG9maWxsVGVzdHMubW0gKi87IH07
CiAJCTUxNUJFMTZGMUQ0MjhCQjEwMEREN0M2OCAvKiBTdG9yZUJsb2JUb0JlRGVsZXRlZC5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NUJFMTZFMUQ0Mjg4RkYwMEREN0M2OCAvKiBTdG9yZUJsb2JUb0JlRGVsZXRlZC5odG1sICovOyB9
OwogCQk1MTVCRTE3MTFENDI4RTRCMDBERDdDNjggLyogU3RvcmVCbG9iVGhlbkRlbGV0ZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMTcwMUQ0
MjhCRDEwMEREN0M2OCAvKiBTdG9yZUJsb2JUaGVuRGVsZXRlLm1tICovOyB9OwogCQk1MTcxNEVC
NDFDRjhDNzhDMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVwLTEuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTcxNEVC
MjFDRjhDNzYxMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVwLTEuaHRtbCAqLzsg
fTsKQEAgLTEyNDIsNiArMTI0Myw3IEBACiAJCTUxMzkzRTFFMTUyMzk0NEEwMDVGMzlDNSAvKiBE
T01XaW5kb3dFeHRlbnNpb25CYXNpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBET01XaW5kb3dFeHRlbnNpb25CYXNpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxNDJCMjcwMTUxN0M4OEIwMEMzMkIxOSAvKiBDb250ZXh0TWVudUNhbkNvcHlV
UkwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb250ZXh0TWVu
dUNhbkNvcHlVUkwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNDJCMjcyMTUx
N0M4OTEwMEMzMkIxOSAvKiBDb250ZXh0TWVudUNhbkNvcHlVUkwuaHRtbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuaHRtbDsgcGF0aCA9IENvbnRleHRNZW51Q2FuQ29weVVSTC5odG1sOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTQ5NThCRDFGNzQyN0FDMDBFODdCQUQgLyogV0tXZWJWaWV3QXV0
b2ZpbGxUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld0F1dG9maWxsVGVz
dHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNUJFMTZFMUQ0Mjg4RkYwMERE
N0M2OCAvKiBTdG9yZUJsb2JUb0JlRGVsZXRlZC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBw
YXRoID0gU3RvcmVCbG9iVG9CZURlbGV0ZWQuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE1QkUxNzAxRDQyOEJEMTAwREQ3QzY4IC8qIFN0b3JlQmxvYlRoZW5EZWxldGUubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdG9yZUJsb2JUaGVuRGVs
ZXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTcxNEVCMjFDRjhDNzYxMDA0
NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVwLTEuaHRtbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
aHRtbDsgcGF0aCA9ICJXZWJQcm9jZXNzS2lsbElEQkNsZWFudXAtMS5odG1sIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMTksNiArMjEyMSw3IEBACiAJCQkJRjRENEYzQjcxRTRF
MzZFNDAwQkIyNzY3IC8qIERhdGFJbnRlcmFjdGlvblRlc3RzLm1tICovLAogCQkJCTc1NjA5MTc3
MTkyNTlDNTkwMDlFRjA2RSAvKiBNZW1vcnlDYWNoZUFkZEltYWdlVG9DYWNoZUlPUy5tbSAqLywK
IAkJCQlGNDY4NDlCRDFFRUY1OEU0MDBCOTM3RkUgLyogVUlQYXN0ZWJvYXJkVGVzdHMubW0gKi8s
CisJCQkJNTE0OTU4QkQxRjc0MjdBQzAwRTg3QkFEIC8qIFdLV2ViVmlld0F1dG9maWxsVGVzdHMu
bW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0zNDUzLDYgKzM0NTYsNyBAQAogCQkJCTJENENGOEJEMUQ4MzYwQ0MwMDAxQ0U4RCAvKiBX
S1RodW1ibmFpbFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUM2ODNERTFFQTEzNEU4MDA2
NTAxODMgLyogV0tVUkxTY2hlbWVIYW5kbGVyLTEubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTgy
QzIyRTFGMkJDRTU0MDA1OUJBN0MgLyogV0tVUkxTY2hlbWVIYW5kbGVyLWxlYWtzLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJNTE0OTU4QkUxRjc0MjdBQzAwRTg3QkFEIC8qIFdLV2ViVmlld0F1dG9m
aWxsVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRUZGMDZENzFEOEFGMzRBMDAwNEJCMzAg
LyogV0tXZWJWaWV3Q2FuZGlkYXRlVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTRGQzU4
NTFCODk3MzkxMDBEMTA3RUIgLyogV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTdDNDE3RjMzMUQxOUUxNDgwMEI4RUY1MyAvKiBXS1dlYlZpZXdEZWZh
dWx0TmF2aWdhdGlvbkRlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9XS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lMTEyODVlYzQ5NTY5NDE1MWUxMWY1N2NmYTFhNTNkYzYyN2VlMGI2Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvV0tXZWJWaWV3QXV0b2Zp
bGxUZXN0cy5tbQpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVEICYmIFBMQVRGT1JNKElPUykgJiYgVVNFKEFQUExF
X0lOVEVSTkFMX1NESykKKworI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQg
IlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgIlVJS2l0U1BJLmgiCisKKyNpbXBvcnQgPFVJS2l0
L1VJVGV4dElucHV0VHJhaXRzX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0
X1ByaXZhdGUuaD4KKworLy8gRklYTUUgMzQ1ODM2Mjg6IFNpbXBseWZ5IHRoaXMgb25jZSB0aGUg
VUlLaXQgd29yayBpcyBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkLgorI2lmIF9faGFzX2luY2x1ZGUo
PFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbi5oPikKKyNpbXBvcnQg
PFVJS2l0L1VJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbi5oPgorI2Vsc2UKKyNp
bXBvcnQgPFVJS2l0L1VJVGV4dFN1Z2dlc3Rpb24uaD4KK0BpbnRlcmZhY2UgVUlLZXlib2FyZExv
Z2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uIDogVUlUZXh0U3VnZ2VzdGlvbgorCitAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBOU1N0cmluZyAqdXNlcm5hbWU7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgYXNzaWduKSBOU1N0cmluZyAqcGFzc3dvcmQ7CisKK0BlbmQKKyNlbmRpZgorCitzdGF0
aWMgVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uICpjcmVhdGVVSUtleWJvYXJk
TG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24oKQoreworICAgIHJldHVybiBbW05TQ2xhc3NGcm9t
U3RyaW5nKEAiVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uIikgbmV3XSBhdXRv
cmVsZWFzZV07Cit9CisKK3R5cGVkZWYgVUlWaWV3IDxVSVRleHRJbnB1dFByaXZhdGUsIFVJVGV4
dElucHV0VHJhaXRzX1ByaXZhdGUsIFVJVGV4dElucHV0VHJhaXRzX1ByaXZhdGVfU3RhZ2luZ18z
NDU4MzYyOD4gIEF1dG9maWxsQ2FuZGlkYXRlVmlldzsKKworQGltcGxlbWVudGF0aW9uIFdLV2Vi
VmlldyAoQXV0b2ZpbGxUZXN0SGVscGVycykKKworLSAoQXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICop
X3ByaXZhdGVUZXh0SW5wdXQKK3sKKyAgICByZXR1cm4gKEF1dG9maWxsQ2FuZGlkYXRlVmlldyAq
KVtzZWxmIHZhbHVlRm9yS2V5OkAiX2N1cnJlbnRDb250ZW50VmlldyJdOworfQorCitAZW5kCisK
K25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVChXS1dlYlZpZXdBdXRvZmlsbFRlc3Rz
LCBVc2VybmFtZUFuZFBhc3N3b3JkRmllbGQpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmll
dyA9IFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV07CisgICAgQXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICpjb250ZW50VmlldyA9IFt3
ZWJWaWV3IF9wcml2YXRlVGV4dElucHV0XTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZEhUTUxTdHJpbmc6QCI8aW5wdXQgaWQ9J3VzZXInIHR5cGU9J2VtYWlsJz48aW5wdXQgaWQ9J3Bh
c3N3b3JkJyB0eXBlPSdwYXNzd29yZCc+Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInVzZXIuZm9jdXMoKSJdOworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRW
aWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7CisKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQuZm9jdXMoKSJdOworICAgIEVY
UEVDVF9UUlVFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7
CisKKyAgICBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKmNyZWRlbnRpYWxT
dWdnZXN0aW9uID0gY3JlYXRlVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uKCk7
CisgICAgY3JlZGVudGlhbFN1Z2dlc3Rpb24udXNlcm5hbWUgPSBAImZyZWRlcmlrIjsKKyAgICBj
cmVkZW50aWFsU3VnZ2VzdGlvbi5wYXNzd29yZCA9IEAiZmFtb3MiOworCisgICAgW2NvbnRlbnRW
aWV3IGluc2VydFRleHRTdWdnZXN0aW9uOmNyZWRlbnRpYWxTdWdnZXN0aW9uXTsKKworICAgIEVY
UEVDVF9XS19TVFJFUShjcmVkZW50aWFsU3VnZ2VzdGlvbi51c2VybmFtZSwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInVzZXIudmFsdWUiXSk7CisgICAgRVhQRUNUX1dL
X1NUUkVRKGNyZWRlbnRpYWxTdWdnZXN0aW9uLnBhc3N3b3JkLCBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQudmFsdWUiXSk7CisKKyAgICBbd2ViVmlldyBy
ZWxlYXNlXTsKK30KKworVEVTVChXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLCBVc2VybmFtZUFuZFBh
c3N3b3JkRmllbGRTZXBhcmF0ZWRCeVJhZGlvQnV0dG9uKQoreworICAgIFRlc3RXS1dlYlZpZXcg
KndlYlZpZXcgPSBbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCAzMjAsIDUwMCldOworICAgIEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZp
ZXcgPSBbd2ViVmlldyBfcHJpdmF0ZVRleHRJbnB1dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRIVE1MU3RyaW5nOkAiPGlucHV0IGlkPSd1c2VyJyB0eXBlPSdlbWFpbCc+PGlucHV0
IHR5cGU9J3JhZGlvJyBuYW1lPSdyYWRpb19idXR0b24nIHZhbHVlPSdyYWRpbyc+PGlucHV0IGlk
PSdwYXNzd29yZCcgdHlwZT0ncGFzc3dvcmQnPiJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJ1c2VyLmZvY3VzKCkiXTsKKyAgICBFWFBFQ1RfVFJVRShjb250
ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpOworCisgICAgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInBhc3N3b3JkLmZvY3VzKCkiXTsKKyAg
ICBFWFBFQ1RfVFJVRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlh
bHMpOworCisgICAgVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uICpjcmVkZW50
aWFsU3VnZ2VzdGlvbiA9IGNyZWF0ZVVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlv
bigpOworICAgIGNyZWRlbnRpYWxTdWdnZXN0aW9uLnVzZXJuYW1lID0gQCJmcmVkZXJpayI7Cisg
ICAgY3JlZGVudGlhbFN1Z2dlc3Rpb24ucGFzc3dvcmQgPSBAImZhbW9zIjsKKworICAgIFtjb250
ZW50VmlldyBpbnNlcnRUZXh0U3VnZ2VzdGlvbjpjcmVkZW50aWFsU3VnZ2VzdGlvbl07CisKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoY3JlZGVudGlhbFN1Z2dlc3Rpb24udXNlcm5hbWUsIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1c2VyLnZhbHVlIl0pOworICAgIEVYUEVD
VF9XS19TVFJFUShjcmVkZW50aWFsU3VnZ2VzdGlvbi5wYXNzd29yZCwgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInBhc3N3b3JkLnZhbHVlIl0pOworCisgICAgW3dlYlZp
ZXcgcmVsZWFzZV07Cit9CisKK1RFU1QoV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywgVHdvVGV4dEZp
ZWxkcykKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXTsKKyAgICBBdXRv
ZmlsbENhbmRpZGF0ZVZpZXcgKmNvbnRlbnRWaWV3ID0gW3dlYlZpZXcgX3ByaXZhdGVUZXh0SW5w
dXRdOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxpbnB1dCBp
ZD0ndGV4dDEnIHR5cGU9J2VtYWlsJz48aW5wdXQgaWQ9J3RleHQyJyB0eXBlPSd0ZXh0Jz4iXTsK
KyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGV4dDEuZm9jdXMo
KSJdOworICAgIEVYUEVDVF9GQUxTRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2lu
Q3JlZGVudGlhbHMpOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAInRleHQyLmZvY3VzKCkiXTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNjZXB0
c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKK30KKworVEVTVChXS1dlYlZpZXdBdXRvZmls
bFRlc3RzLCBTdGFuZGFsb25lUGFzc3dvcmRGaWVsZCkKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3
ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXTsKKyAgICBBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKmNvbnRlbnRWaWV3
ID0gW3dlYlZpZXcgX3ByaXZhdGVUZXh0SW5wdXRdOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkSFRNTFN0cmluZzpAIjxpbnB1dCBpZD0ncGFzc3dvcmQnIHR5cGU9J3Bhc3N3b3JkJz4i
XTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAicGFzc3dvcmQu
Zm9jdXMoKSJdOworICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVk
TG9naW5DcmVkZW50aWFscyk7CisKKyAgICBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dl
c3Rpb24gKmNyZWRlbnRpYWxTdWdnZXN0aW9uID0gY3JlYXRlVUlLZXlib2FyZExvZ2luQ3JlZGVu
dGlhbHNTdWdnZXN0aW9uKCk7CisgICAgY3JlZGVudGlhbFN1Z2dlc3Rpb24udXNlcm5hbWUgPSBA
ImZyZWRlcmlrIjsKKyAgICBjcmVkZW50aWFsU3VnZ2VzdGlvbi5wYXNzd29yZCA9IEAiZmFtb3Mi
OworCisgICAgW2NvbnRlbnRWaWV3IGluc2VydFRleHRTdWdnZXN0aW9uOmNyZWRlbnRpYWxTdWdn
ZXN0aW9uXTsKKworICAgIEVYUEVDVF9XS19TVFJFUShjcmVkZW50aWFsU3VnZ2VzdGlvbi5wYXNz
d29yZCwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInBhc3N3b3JkLnZh
bHVlIl0pOworCisgICAgW3dlYlZpZXcgcmVsZWFzZV07Cit9CisKK1RFU1QoV0tXZWJWaWV3QXV0
b2ZpbGxUZXN0cywgU3RhbmRhbG9uZVRleHRGaWVsZCkKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3
ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMzIwLCA1MDApXTsKKyAgICBBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKmNvbnRlbnRWaWV3
ID0gW3dlYlZpZXcgX3ByaXZhdGVUZXh0SW5wdXRdOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkSFRNTFN0cmluZzpAIjxpbnB1dCBpZD0ndGV4dGZpZWxkJyB0eXBlPSd0ZXh0Jz4iXTsK
KyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGV4dGZpZWxkLmZv
Y3VzKCkiXTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRM
b2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3ZWJWaWV3IHJlbGVhc2VdOworfQorCitURVNUKFdL
V2ViVmlld0F1dG9maWxsVGVzdHMsIEFjY291bnRDcmVhdGlvblBhZ2UpCit7CisgICAgVGVzdFdL
V2ViVmlldyAqd2ViVmlldyA9IFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV07CisgICAgQXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICpj
b250ZW50VmlldyA9IFt3ZWJWaWV3IF9wcml2YXRlVGV4dElucHV0XTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8aW5wdXQgaWQ9J3VzZXInIHR5cGU9J2VtYWls
Jz48aW5wdXQgaWQ9J3Bhc3N3b3JkJyB0eXBlPSdwYXNzd29yZCc+PGlucHV0IGlkPSdjb25maXJt
X3Bhc3N3b3JkJyB0eXBlPSdwYXNzd29yZCc+Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAInVzZXIuZm9jdXMoKSJdOworICAgIEVYUEVDVF9GQUxTRShjb250
ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpOworCisgICAgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInBhc3N3b3JkLmZvY3VzKCkiXTsKKyAg
ICBFWFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRp
YWxzKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJjb25m
aXJtX3Bhc3N3b3JkLmZvY3VzKCkiXTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNj
ZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3ZWJWaWV3IHJlbGVhc2Vd
OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8vIFdLX0FQ
SV9FTkFCTEVEICYmIFBMQVRGT1JNKElPUykgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL1VJS2l0U1BJLmggYi9Ub29scy9UZXN0
V2ViS2l0QVBJL2lvcy9VSUtpdFNQSS5oCmluZGV4IGUwMmY1MzY3ZjE3Njk4OWUyYjhlNzE3NmJh
YWRmMzE3YjkyMmZhYjUuLmE4YzRlNGNiMzFjZjFmNjM3YmQ5NWQ5NmRjYmFhN2UwNTRlODgxODAg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL1VJS2l0U1BJLmgKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaApAQCAtMjUsNiArMjUsOCBAQAogCiAjaWYg
UExBVEZPUk0oSU9TKQogCisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dFRyYWl0cy5oPgorCiAj
aWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMTAwMDAKIEBwcm90b2NvbCBV
SURyYWdTZXNzaW9uOwogQGNsYXNzIFVJRHJhZ0ludGVyYWN0aW9uOwpAQCAtMzUsNiArMzcsMTMg
QEAKIAogI2ltcG9ydCA8VUlLaXQvVUlBcHBsaWNhdGlvbl9Qcml2YXRlLmg+CiAjaW1wb3J0IDxV
SUtpdC9VSURyYWdJbnRlcmFjdGlvbl9Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVRleHRJ
bnB1dFRyYWl0c19Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVRleHRTdWdnZXN0aW9uLmg+
CisKKworQHByb3RvY29sIFVJVGV4dElucHV0VHJhaXRzX1ByaXZhdGVfU3RhZ2luZ18zNDU4MzYy
OCA8TlNPYmplY3QsIFVJVGV4dElucHV0VHJhaXRzPgorQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBCT09MIGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKK0BlbmQKIAog
I2Vsc2UKIApAQCAtNTEsNiArNjAsMTAgQEAgV1RGX0VYVEVSTl9DX0VORAogQGVuZAogI2VuZGlm
IC8vIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTEwMDAwCiAKK0Bwcm90b2Nv
bCBVSVRleHRJbnB1dFRyYWl0c19Qcml2YXRlIDxOU09iamVjdCwgVUlUZXh0SW5wdXRUcmFpdHM+
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgYWNjZXB0c0F1dG9maWxsZWRM
b2dpbkNyZWRlbnRpYWxzOworQGVuZAorCiAjZW5kaWYKIAogI2lmIF9fSVBIT05FX09TX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gMTEwMDAwCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321779</attachid>
            <date>2017-09-25 17:17:04 -0700</date>
            <delta_ts>2017-09-25 19:33:48 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-174394-20170925171701.patch</filename>
            <type>text/plain</type>
            <size>46454</size>
            <attacher name="Frederik Riedel">frederik.riedel</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNDgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGZkMDllMDhhZTU3N2Nh
NTcyZDM0YTI3NDUzODZlY2RhYjY0ZGI0My4uNjBmODZjNWI0YTQzNzc2ZmEyOWE4MjE2NDQ2ZWU3
ZWY1ODdlMWY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA5LTE5ICBGcmVk
ZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSB3YXkgdG8g
c2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29udHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQs
IFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTgzNTA0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRz
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjppc0F1dG9maWxsYWJsZUVsZW1lbnQpOiBS
ZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgb2YgdHlwZSB0ZXh0IG9yIGVtYWlsLgorICAg
ICAgICAoV2ViQ29yZTo6bmV4dEF1dG9maWxsYWJsZUVsZW1lbnQpOiBSZXR1cm5zIHRoZSBuZXh0
IGZvY3VzYWJsZSBlbGVtZW50IHRoYXQgaXMgYXV0b2ZpbGxhYmxlLgorICAgICAgICAoV2ViQ29y
ZTo6cHJldmlvdXNBdXRvZmlsbGFibGVFbGVtZW50KTogUmV0dXJucyB0aGUgcHJldmlvdXMgZm9j
dXNhYmxlIGVsZW1lbnQgdGhhdCBpcyBhdXRvZmlsbGFibGUuCisgICAgICAgIChXZWJDb3JlOjpB
dXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyk6IENvbXB1dGVzIHRoZSBh
dXRvZmlsbCBlbGVtZW50cyAodXNlcm5hbWUgJiBwYXNzd29yZCkKKyAgICAgICAgZm9yIGEgZ2l2
ZW4gaW5wdXQgZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmF1
dG9maWxsKTogRmlsbHMgdGhlIGNyZWRlbnRpYWxzIGludG8gdGhlIHBhaXIgb2YgdXNlcm5hbWUv
cGFzc3dvcmQgZWxlbWVudHMuCisgICAgICAgICogZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50
cy5oOiBBZGRlZC4KKwogMjAxNy0wOS0yNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFtXZWJJRExdIEZhY3RvciBvdXQgSXNFeGNlcHRpb25PciBjaGVjayBmcm9tIHRv
SlMvdG9KU05ld2x5Q3JlYXRlZCBzaWduYXR1cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMTFhN2IzMmYyZTRlNWRk
OTYyM2FjMDY2NDJhN2Y4M2U5M2YyM2JlNC4uNWEyNTk1YWVkMWIxMmJkM2M4OTI3ZjdlNTkzZjNh
ZDU0MGE5NjZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxNy0wOS0xOSAgRnJlZGVy
aWsgUmllZGVsICA8cmllZGVsQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBvc2Ugd2F5IHRvIHNl
dCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3JtIGNvbnRyb2xzIGFzIHtMZWdhY3kgV2ViS2l0LCBX
ZWJLaXR9IFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzE4MzUwND4KKworICAgICAgICBS
ZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJ
S2l0U1BJLmg6CisgICAgICAgICogU2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmVuY29kZSBjb25zdCk6
CisgICAgICAgIEVuY29kZXMgYWRkaXRpb25hbCBub2RlIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcg
aWYgdGhlIG5vZGUgaXMgcGFydCBvZiBhIGxvZ2luIHNjcmVlbi4KKyAgICAgICAgKFdlYktpdDo6
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmRlY29kZSk6CisgICAgICAgIERlY29kZXMgdGhlIGFk
ZGl0aW9uYWwgYXNzaXN0ZWQgbm9kZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgKiBTaGFyZWQvQXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsc10pOgorICAg
ICAgICBEZXRlcm1pbmVzIGlmIHRoZSBXS0NvbnRlbnRWaWV3IHNob3dzIGEgbG9naW4gc2NyZWVu
LgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlcHJlc2VudGluZ1BhZ2VVcmxdKToKKyAgICAg
ICAgUmV0dXJucyB0aGUgVVJMIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHdlYiBwYWdlLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IGluc2VydFRleHRTdWdnZXN0aW9uOl0pOgorICAgICAgICBJ
bnNlcnRzIHRoZSBsb2dpbiBjcmVkZW50aWFscyBpbnRvIHRoZSBXZWIgVmlldy4KKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05vZGUpOgorICAgICAgICBUcmFuc2ZlciB0aGUgYWRk
aXRpb25hbCBhc3Npc3RlZG5vZGUgaW5mb3JtYXRpb24gKGFjY2VwdHNBdXRvZmlsbGVkTG9naW5D
cmVkZW50aWFscyBhbmQgcmVwcmVzZW50aW5nUGFnZVVybCkuCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKToKKyAgICAgICAg
UmV0dXJucyBpZiB0aGUgV2ViIFZpZXcgc2hvd3MgYSBsb2dpbiBzY3JlZW4uCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVwcmVzZW50aW5nUGFnZVVybCk6CisgICAgICAgIFJldHVy
bnMgdGhlIFdlYiBWaWV3J3MgVVJMLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmF1
dG9maWxsTG9naW5DcmVkZW50aWFscyk6CisgICAgICAgIEluc2VydCB0aGUgY3JlZGVudGlhbHMg
aW50byB0aGUgV2ViIFZpZXcuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKTogVHJhbnNwb3J0cyB0
aGUgaW5mb3JtYXRpb24gaWYgdGhlIGN1cnJlbnRseQorICAgICAgICBoaWdobGlnaHRlZCBub2Rl
IGFjY2VwdHMgYXV0b2ZpbGxlZCBsb2dpbiBjcmVkZW50aWFscy4KKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6YXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKTogRmlsbHMgdGhlIGxvZ2luIGNyZWRl
bnRpYWxzIGludG8gdGhlCisgICAgICAgIFdlYlBhZ2UuCisKIDIwMTctMDktMjUgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYlJUQyB2aWRlbyBkb2VzIG5v
dCByZXN1bWUgcmVjZWl2aW5nIHdoZW4gc3dpdGNoaW5nIGJhY2sgdG8gU2FmYXJpIDExIG9uIGlP
UwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDNiYTdkOTBkM2U5MmYxOGU1MDhiODdl
OGU2NTY5ZWMxMzFmMjU3YTUuLjBjMWE5NzkzNDQzNGQyYWIxOTQzYWY1Y2I5ZDAyMjRkOGQ1NzMx
NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNy0w
OS0xOSAgRnJlZGVyaWsgUmllZGVsICA8cmllZGVsQGFwcGxlLmNvbT4KKworICAgICAgICBFeHBv
c2Ugd2F5IHRvIHNldCB2YWx1ZXMgb2YgY2xhc3NpZmllZCBmb3JtIGNvbnRyb2xzIGFzIHtMZWdh
Y3kgV2ViS2l0LCBXZWJLaXR9IFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc0Mzk0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzE4MzUwND4K
KworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgKiBET00vRE9N
SFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIERPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1t
OgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGFjY2VwdHNBdXRvZmlsbGVkTG9naW5D
cmVkZW50aWFsc10pOgorICAgICAgICBEZXRlcm1pbmVzIGlmIHRoaXMgSFRNTElucHV0RWxlbWVu
dCBpcyBwYXJ0IG9mIGEgbG9naW4gc2NyZWVuLgorICAgICAgICAoLVtET01IVE1MSW5wdXRFbGVt
ZW50IHJlcHJlc2VudGluZ1BhZ2VVcmxdKToKKyAgICAgICAgUmV0dXJucyB0aGUgd2VicGFnZSdz
IFVSTCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgaW4gdGhlIFdlYiBWaWV3LgorICAgICAg
ICAoLVtET01IVE1MSW5wdXRFbGVtZW50IGluc2VydFRleHRTdWdnZXN0aW9uOl0pOgorICAgICAg
ICBJbnNlcnRzIGxvZ2luIGNyZWRlbnRpYWxzIGludG8gdGhlIFdlYiBWaWV3LgorCiAyMDE3LTA5
LTI1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHVudXNl
ZCBFZGl0b3JDbGllbnQgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGQwOGMyNTcxNjE3Njk3ZTRkY2M0NjcwZDJj
NjRmOTFlZjI1N2U0OC4uNjZhYTA0NGQ2M2VmOGU0MmM3ZGFiOWUyODRiYjMzZjVjM2I3NDc0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjI5Nyw2ICsyMjk3LDggQEAKIAkJNTE2MkM3RjQxMUY3N0VGQjAwNjEyRUZFIC8qIFNj
aGVtZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi87
IH07CiAJCTUxNjJDN0Y1MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjMxMUY3N0VG
QjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE2NkQzQ0QxRThFRDQ4RjAwQUQ2MkUzIC8qIFN0b3Jh
Z2VUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTY2RDNDQzFFOEVENDExMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTY5OUVFMzFGNjA4Q0Q1MDBENTdE
MDYgLyogQXV0b2ZpbGxFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTY5OUVFMTFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVt
ZW50cy5jcHAgKi87IH07CisJCTUxNjk5RUU0MUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVs
ZW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTY5OUVFMjFGNjA4Q0Q1MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNkJCNzk0MENFOTFFNjgw
MDUxMkY3OSAvKiBKU1RyZWVXYWxrZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2QkI3OTIwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJl
ZVdhbGtlckN1c3RvbS5jcHAgKi87IH07CiAJCTUxNkM2MjIwMTk1MEQ0ODcwMDMzN0U3NSAvKiBH
YW1lcGFkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2QzYyMUQxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5jcHAgKi87IH07
CiAJCTUxNkM2MjIxMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkM2MjFFMTk1MEQ0ODcwMDMz
N0U3NSAvKiBHYW1lcGFkRXZlbnQuaCAqLzsgfTsKQEAgLTEwMTk3LDYgKzEwMTk5LDggQEAKIAkJ
NTE2NDVCNTMxQjlGODg5QjAwRjc4OUNFIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NDVCNTQxQjlGODhFODAwRjc4OUNFIC8qIElE
QkN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJz
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTY2RDNDQzFFOEVENDExMDBB
RDYyRTMgLyogU3RvcmFnZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RvcmFnZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE2OTlFRTExRjYw
OENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QXV0b2ZpbGxFbGVtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjk5
RUUyMUY2MDhDRDUwMEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEF1dG9maWxsRWxlbWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2QkI3
OTIwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RyZWVXYWxrZXJDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTZDNjIxRDE5NTBENDg3MDAzMzdFNzUgLyogR2FtZXBh
ZEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdhbWVwYWRF
dmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNkM2MjFFMTk1MEQ0ODcw
MDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR2FtZXBhZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODM4OSw2
ICsxODM5Myw4IEBACiAJCTQ0MzI5MkMxMEVCQTZENzMwMEU2MjAxNiAvKiBpb3MgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUxNjk5RUUxMUY2MDhDRDUw
MEQ1N0QwNiAvKiBBdXRvZmlsbEVsZW1lbnRzLmNwcCAqLywKKwkJCQk1MTY5OUVFMjFGNjA4Q0Q1
MDBENTdEMDYgLyogQXV0b2ZpbGxFbGVtZW50cy5oICovLAogCQkJCUQwQkQ0RjVBMTQwODg1MEYw
MDY4MzlCNiAvKiBEaWN0YXRpb25Db21tYW5kSU9TLmNwcCAqLywKIAkJCQlEMEJENEY1QjE0MDg4
NTBGMDA2ODM5QjYgLyogRGljdGF0aW9uQ29tbWFuZElPUy5oICovLAogCQkJCUZFRDEzRDM5MENF
QTkzNDYwMEQ4OTQ2NiAvKiBFZGl0b3JJT1MubW0gKi8sCkBAIC0yNzE2MSw2ICsyNzE2Nyw3IEBA
CiAJCQkJQTVBN0FBNDMxMzJGMEVDQzAwRDNBM0MyIC8qIEF1dG9jYXBpdGFsaXplVHlwZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTdDMTg0M0ZFMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxRTk3MjgxQTlGOTgzNDAwN0JGMEZCIC8qIEF1dG9GaWxs
QnV0dG9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE2OTlFRTQxRjYwOENENTAwRDU3
RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUM5RDQ2NzA1MUU2
MEM0NjUwMDgxOTVGQiAvKiBBdXRvcGxheUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NTgz
MEQ0RTE2NzlCNEY4MDBBQ0Y4QzMgLyogQXV0b3Njcm9sbENvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4Q0ZGMDRFMEExNTRGMDkwMDBBNDIzNCAvKiBBdXRvVGFibGVMYXlvdXQuaCBp
biBIZWFkZXJzICovLApAQCAtMjc4MzAsNiArMjc4MzcsNyBAQAogCQkJCTg0NzMwRDg5MTI0OEYw
QjMwMEQzQTlDOSAvKiBGRVNwZWN1bGFyTGlnaHRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTQx
MjlDOTk3MUY1OUI5NjMwMDlENzQwMyAvKiBGZXRjaEJvZHlTb3VyY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQxRDEyOURCMUYzRDE0MzgwMEQxNUU0NyAvKiBGZXRjaEhlYWRlcnMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjAyMyAvKiBGZXRjaEludGVybmFsc0J1
aWx0aW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUFENzUzQTFDRUY2QkQxMDBBMzE0ODYgLyog
RmV0Y2hPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0UxOTE0RDFGMkE5QUZCMDAyNzJG
NzggLyogRmV0Y2hSZWZlcnJlclBvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFMTkxNUEx
RjJBOUIzNDAwMjcyRjc4IC8qIEZldGNoUmVxdWVzdENhY2hlLmggaW4gSGVhZGVycyAqLywKQEAg
LTMxMzI1LDYgKzMxMzMzLDcgQEAKIAkJCQlBNUY2RTE2QjEzMkVENDZFMDA4RURBRTMgLyogQXV0
b2NhcGl0YWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODQzRkQxQzhCNzI4MzAwMkVC
OTczIC8qIEF1dG9maWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMUU5NzI3MUE5Rjk4MzQw
MDdCRjBGQiAvKiBBdXRvRmlsbEJ1dHRvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTE2OTlFRTMxRjYwOENENTAwRDU3RDA2IC8qIEF1dG9maWxsRWxlbWVudHMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDU4MzBENEQxNjc5QjRGODAwQUNGOEMzIC8qIEF1dG9zY3JvbGxDb250cm9s
bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4Q0ZGMDUwMEExNTRGMDkwMDBBNDIzNCAvKiBB
dXRvVGFibGVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RFQ0E4OUExRURGNDQ3RDAw
RENCMDhCIC8qIEFWQXNzZXRUcmFja1V0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9BdXRvZmlsbEVsZW1lbnRzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45YmE4YTQ0YzU5NmQ4NTYyZjQ5YzU0ZThhMzM0ODY4Y2VhMDczNDUxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVtZW50cy5jcHAKQEAg
LTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQXV0b2ZpbGxFbGVtZW50cy5oIgorCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiUGFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc0F1dG9maWxsYWJsZUVsZW1lbnQoRWxlbWVudCYgbm9kZSkKK3sKKyAgICBpZiAoIWlz
PEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIGlucHV0RWxlbWVudCA9ICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKTsKKyAg
ICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpIHx8IGlucHV0RWxlbWVudC0+aXNF
bWFpbEZpZWxkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
IG5leHRBdXRvZmlsbGFibGVFbGVtZW50KE5vZGUqIHN0YXJ0Tm9kZSwgRm9jdXNDb250cm9sbGVy
JiBmb2N1c0NvbnRyb2xsZXIpCit7CisgICAgaWYgKCFpczxFbGVtZW50PihzdGFydE5vZGUpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxFbGVtZW50PiBuZXh0RWxlbWVu
dCA9IGRvd25jYXN0PEVsZW1lbnQ+KHN0YXJ0Tm9kZSk7CisgICAgZG8geworICAgICAgICBuZXh0
RWxlbWVudCA9IGZvY3VzQ29udHJvbGxlci5uZXh0Rm9jdXNhYmxlRWxlbWVudCgqbmV4dEVsZW1l
bnQuZ2V0KCkpOworICAgIH0gd2hpbGUgKG5leHRFbGVtZW50ICYmICFpc0F1dG9maWxsYWJsZUVs
ZW1lbnQoKm5leHRFbGVtZW50LmdldCgpKSk7CisKKyAgICBpZiAoIW5leHRFbGVtZW50KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiAmZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4oKm5leHRFbGVtZW50KTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8SFRNTElucHV0
RWxlbWVudD4gcHJldmlvdXNBdXRvZmlsbGFibGVFbGVtZW50KE5vZGUqIHN0YXJ0Tm9kZSwgRm9j
dXNDb250cm9sbGVyJiBmb2N1c0NvbnRyb2xsZXIpCit7CisgICAgaWYgKCFpczxFbGVtZW50Pihz
dGFydE5vZGUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxFbGVtZW50
PiBwcmV2aW91c0VsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PihzdGFydE5vZGUpOworICAgIGRv
IHsKKyAgICAgICAgcHJldmlvdXNFbGVtZW50ID0gZm9jdXNDb250cm9sbGVyLnByZXZpb3VzRm9j
dXNhYmxlRWxlbWVudCgqcHJldmlvdXNFbGVtZW50LmdldCgpKTsKKyAgICB9IHdoaWxlIChwcmV2
aW91c0VsZW1lbnQgJiYgIWlzQXV0b2ZpbGxhYmxlRWxlbWVudCgqcHJldmlvdXNFbGVtZW50Lmdl
dCgpKSk7CisKKyAgICBpZiAoIXByZXZpb3VzRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgCisgICAgcmV0dXJuICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqcHJldmlv
dXNFbGVtZW50KTsKK30KKworQXV0b2ZpbGxFbGVtZW50czo6QXV0b2ZpbGxFbGVtZW50cyhSZWZQ
dHI8SFRNTElucHV0RWxlbWVudD4mJiB1c2VybmFtZSwgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
JiYgcGFzc3dvcmQpCisgICAgOiBtX3VzZXJuYW1lKHVzZXJuYW1lKQorICAgICwgbV9wYXNzd29y
ZChwYXNzd29yZCkKK3sKK30KKworc3RkOjpvcHRpb25hbDxBdXRvZmlsbEVsZW1lbnRzPiBBdXRv
ZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cyhSZWY8SFRNTElucHV0RWxlbWVu
dD4gc3RhcnQpCit7CisgICAgaWYgKCFzdGFydC0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgRm9jdXNDb250cm9sbGVyJiBmb2N1c0NvbnRyb2xs
ZXIgPSBzdGFydC0+ZG9jdW1lbnQoKS5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpOworICAgIGlm
IChzdGFydC0+aXNQYXNzd29yZEZpZWxkKCkpIHsKKyAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVs
ZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9IHByZXZpb3VzQXV0b2ZpbGxhYmxlRWxlbWVudChzdGFy
dC5wdHIoKSwgZm9jdXNDb250cm9sbGVyKTsKKyAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1l
bnQ+IG5leHRFbGVtZW50ID0gbmV4dEF1dG9maWxsYWJsZUVsZW1lbnQoc3RhcnQucHRyKCksIGZv
Y3VzQ29udHJvbGxlcik7CisgICAgICAgIGJvb2wgaGFzRHVwbGljYXRlUGFzc3dvcmRFbGVtZW50
cyA9IChuZXh0RWxlbWVudCAmJiBuZXh0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpIHx8IChw
cmV2aW91c0VsZW1lbnQgJiYgcHJldmlvdXNFbGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKSk7Cisg
ICAgICAgIGlmIChoYXNEdXBsaWNhdGVQYXNzd29yZEVsZW1lbnRzKQorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBpZiAocHJldmlvdXNFbGVtZW50ICYmIGlzPEhU
TUxJbnB1dEVsZW1lbnQ+KCpwcmV2aW91c0VsZW1lbnQpKSB7CisgICAgICAgICAgICBpZiAocHJl
dmlvdXNFbGVtZW50LT5pc1RleHRGaWVsZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBBdXRv
ZmlsbEVsZW1lbnRzKFdURk1vdmUocHJldmlvdXNFbGVtZW50KSwgV1RGTW92ZShzdGFydCkpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
IG5leHRFbGVtZW50ID0gbmV4dEF1dG9maWxsYWJsZUVsZW1lbnQoc3RhcnQucHRyKCksIGZvY3Vz
Q29udHJvbGxlcik7CisgICAgICAgIGlmIChuZXh0RWxlbWVudCAmJiBpczxIVE1MSW5wdXRFbGVt
ZW50PigqbmV4dEVsZW1lbnQpKSB7CisgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQtPmlzUGFz
c3dvcmRGaWVsZCgpKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
IGVsZW1lbnRBZnRlcm5leHRFbGVtZW50ID0gbmV4dEF1dG9maWxsYWJsZUVsZW1lbnQobmV4dEVs
ZW1lbnQuZ2V0KCksIGZvY3VzQ29udHJvbGxlcik7CisgICAgICAgICAgICAgICAgYm9vbCBoYXNE
dXBsaWNhdGVQYXNzd29yZEVsZW1lbnRzID0gZWxlbWVudEFmdGVybmV4dEVsZW1lbnQgJiYgZWxl
bWVudEFmdGVybmV4dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpOworICAgICAgICAgICAgICAg
IGlmIChoYXNEdXBsaWNhdGVQYXNzd29yZEVsZW1lbnRzKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgICAgICAgICAgcmV0dXJuIEF1dG9maWxsRWxl
bWVudHMoV1RGTW92ZShzdGFydCksIFdURk1vdmUobmV4dEVsZW1lbnQpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzdGFydC0+aXNQYXNzd29yZEZpZWxkKCkp
IHsKKyAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IHByZXZpb3VzRWxlbWVudCA9IHBy
ZXZpb3VzQXV0b2ZpbGxhYmxlRWxlbWVudChzdGFydC5wdHIoKSwgZm9jdXNDb250cm9sbGVyKTsK
KyAgICAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IG5leHRFbGVtZW50ID0gbmV4dEF1dG9m
aWxsYWJsZUVsZW1lbnQoc3RhcnQucHRyKCksIGZvY3VzQ29udHJvbGxlcik7CisgICAgICAgIGlm
ICghcHJldmlvdXNFbGVtZW50ICYmICFuZXh0RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBB
dXRvZmlsbEVsZW1lbnRzKG51bGxwdHIsIHN0YXJ0LnB0cigpKTsKKyAgICB9CisgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKK30KKwordm9pZCBBdXRvZmlsbEVsZW1lbnRzOjphdXRvZmlsbChTdHJp
bmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkKK3sKKyAgICBpZiAobV91c2VybmFtZSkgewor
ICAgICAgICBtX3VzZXJuYW1lLT5zZXRWYWx1ZUZvclVzZXIodXNlcm5hbWUpOworICAgICAgICBt
X3VzZXJuYW1lLT5zZXRBdXRvRmlsbGVkKCk7CisgICAgfQorICAgIGlmIChtX3Bhc3N3b3JkKSB7
CisgICAgICAgIG1fcGFzc3dvcmQtPnNldFZhbHVlRm9yVXNlcihwYXNzd29yZCk7CisgICAgICAg
IG1fcGFzc3dvcmQtPnNldEF1dG9GaWxsZWQoKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxs
RWxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0F1dG9maWxsRWxlbWVudHMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kMzQyOTAxNzk1NDEzZjM5Nzg0NGUzNmIxZDNmNzA1OWM2MmJjODI1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvQXV0b2ZpbGxFbGVt
ZW50cy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1dG9maWxsRWxlbWVu
dHMgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEF1dG9maWxsRWxlbWVudHM+IGNvbXB1dGVBdXRv
ZmlsbEVsZW1lbnRzKFJlZjxIVE1MSW5wdXRFbGVtZW50Pik7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhdXRvZmlsbChTdHJpbmcsIFN0cmluZyk7Citwcml2YXRlOgorICAgIEF1dG9maWxsRWxl
bWVudHMoUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+JiYsIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50
PiYmKTsKKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbV91c2VybmFtZTsKKyAgICBSZWZQ
dHI8SFRNTElucHV0RWxlbWVudD4gbV9wYXNzd29yZDsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEku
aCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCmluZGV4IDM0MDIw
ZTA4ZWIwNjEyOTQxMDI3ZWYxOGFmMjhhMmI1YzJiZGY5NzkuLjk0N2NhYWZiMjIyYmJhYTg5ODNk
MWM0NmQxNjJkZTI3MDRkNjgwMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
c3BpL2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9V
SUtpdFNQSS5oCkBAIC00Myw2ICs0MywxNyBAQAogI2ltcG9ydCA8VUlLaXQvVUlJbnRlcmZhY2Vf
UHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZEltcGwuaD4KICNpbXBvcnQgPFVJ
S2l0L1VJS2V5Ym9hcmRJbnRsLmg+CisjaWYgX19oYXNfaW5jbHVkZSg8VUlLaXQvVUlLZXlib2Fy
ZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+KQorI2ltcG9ydCA8VUlLaXQvVUlLZXlib2Fy
ZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+CisjZWxzZQorI2ltcG9ydCA8VUlLaXQvVUlU
ZXh0SW5wdXRfUHJpdmF0ZS5oPgorQGludGVyZmFjZSBVSUtleWJvYXJkTG9naW5DcmVkZW50aWFs
c1N1Z2dlc3Rpb24gOiBVSVRleHRTdWdnZXN0aW9uCisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBh
c3NpZ24pIE5TU3RyaW5nICp1c2VybmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IE5TU3RyaW5nICpwYXNzd29yZDsKKworQGVuZAorI2VuZGlmCiAjaW1wb3J0IDxVSUtpdC9VSUtl
eWJvYXJkX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29n
bml6ZXJfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlQZXJpcGhlcmFsSG9zdC5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwCmluZGV4
IDY2YzlmMmE0MjEyNTgxOWM4YjY4ZWI2OTZjOTFiMzMwMWQ5YzBmYjEuLjQyMzZlMDkwOGJkMzNm
Nzg5NTdjYmNhOGY3Y2EwYTIzOWE1N2ZhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAKQEAgLTg2LDYgKzg2LDggQEAgdm9pZCBBc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbjo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
ICAgICBlbmNvZGVyIDw8IHZhbHVlOwogICAgIGVuY29kZXIgPDwgdmFsdWVBc051bWJlcjsKICAg
ICBlbmNvZGVyIDw8IHRpdGxlOworICAgIGVuY29kZXIgPDwgYWNjZXB0c0F1dG9maWxsZWRMb2dp
bkNyZWRlbnRpYWxzOworICAgIGVuY29kZXIgPDwgcmVwcmVzZW50aW5nUGFnZVVSTDsKICAgICBl
bmNvZGVyLmVuY29kZUVudW0oYXV0b2ZpbGxGaWVsZE5hbWUpOwogfQogCkBAIC0xNjAsNiArMTYy
LDEyIEBAIGJvb2wgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmRlY29kZShJUEM6OkRlY29kZXIm
IGRlY29kZXIsIEFzc2lzdGVkTm9kZUluZm9ybWF0CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQudGl0bGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZXByZXNl
bnRpbmdQYWdlVVJMKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUVudW0ocmVzdWx0LmF1dG9maWxsRmllbGROYW1lKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbi5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
aAppbmRleCA2ODI3YmU3ZDg0NTI1MmJlY2Q0NTUzMjI0ZmY5ODU0MzRiNzcyMjgxLi4wOGE5Zjcy
NGU0MmQ1OWM2ODk4NmI1NWM1OGFhZDVkYThlOTIxZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL0F1dG9jYXBpdGFsaXplVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1
dG9maWxsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9VUkwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CkBAIC0xMDksNiArMTEwLDggQEAgc3RydWN0IEFzc2lzdGVkTm9kZUluZm9ybWF0aW9u
IHsKICAgICBTdHJpbmcgdmFsdWU7CiAgICAgZG91YmxlIHZhbHVlQXNOdW1iZXIgeyAwIH07CiAg
ICAgU3RyaW5nIHRpdGxlOworICAgIGJvb2wgYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRp
YWxzIHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpVUkwgcmVwcmVzZW50aW5nUGFnZVVSTDsKICAg
ICBXZWJDb3JlOjpBdXRvZmlsbEZpZWxkTmFtZSBhdXRvZmlsbEZpZWxkTmFtZSB7IFdlYkNvcmU6
OkF1dG9maWxsRmllbGROYW1lOjpOb25lIH07CiAKICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29k
ZXImKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggMTMx
NjdkYTYwZTY4Y2NiOGM2MzM0NmFhNzNmNGZmZGNmYTdhNjI5YS4uMTg5MzJjYjk2MTlhN2IyN2I5
MTA3YjAwYzZmMTEyYzY4ODRhOWFlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVu
dS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9UZXh0R3JhbnVsYXJpdHkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbi5oPgogI2luY2x1ZGUgPG1lbW9y
eT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNTU5LDYgKzU2MCw5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldElzU2Nyb2xsaW5nT3Jab29taW5nKGJvb2wpOwogICAgIHZvaWQgcmVxdWVz
dFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KFdlYkNvcmU6OlRleHRHcmFu
dWxhcml0eSwgdWludDMyX3Qgb2Zmc2V0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAg
IHZvaWQgcmVxdWVzdFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNl
dCwgY29uc3QgU3RyaW5nJiwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpTZWxlY3Rpb25SZWN0PiYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKKyAgICBib29sIGFj
Y2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscygpOworICAgIFdlYkNvcmU6OlVSTCByZXBy
ZXNlbnRpbmdQYWdlVVJMKCk7CisgICAgdm9pZCBhdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29u
c3QgU3RyaW5nJiB1c2VybmFtZSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCk7CiAjaWYgRU5BQkxF
KERBVEFfSU5URVJBQ1RJT04pCiAgICAgdm9pZCBkaWRQZXJmb3JtRGF0YUludGVyYWN0aW9uQ29u
dHJvbGxlck9wZXJhdGlvbihib29sIGhhbmRsZWQpOwogICAgIHZvaWQgZGlkSGFuZGxlU3RhcnRE
YXRhSW50ZXJhY3Rpb25SZXF1ZXN0KGJvb2wgc3RhcnRlZCk7CkBAIC0xOTg4LDYgKzE5OTIsOCBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNEZWZlcnJlZFN0YXJ0QXNzaXN0aW5nTm9kZSB7IGZh
bHNlIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzPiBtX2Rl
ZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVudHM7CiAgICAgYm9vbCBtX2ZvcmNlQWx3YXlzVXNl
clNjYWxhYmxlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNy
ZWRlbnRpYWxzIHsgZmFsc2UgfTsKKyAgICBXZWJDb3JlOjpVUkwgbV9yZXByZXNlbnRpbmdQYWdl
VVJMOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQppbmRleCBkNjFjZWRmYzE0ZTI2ZWM0ODNl
MGU5MGMxODYyN2YyMzQxZTk1MGMzLi42ODVlMzk0NjQ1Zjc3YjgwMDhkNzg4YWQ5NTU5MmQ2NGNi
OWViYTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5t
bQpAQCAtMjU4LDYgKzI1OCwxNiBAQCAtIChXZWJQYWdlUHJveHkqKXBhZ2UKICAgICByZXR1cm4g
X3BhZ2UuZ2V0KCk7CiB9CiAKKy0gKEJPT0wpYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRp
YWxzCit7CisgICAgcmV0dXJuIF9wYWdlLT5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlh
bHMoKTsKK30KKworLSAoTlNVUkwgKilyZXByZXNlbnRpbmdQYWdlVVJMCit7CisgICAgcmV0dXJu
IF9wYWdlLT5yZXByZXNlbnRpbmdQYWdlVVJMKCk7Cit9CisKIC0gKHZvaWQpd2lsbE1vdmVUb1dp
bmRvdzooVUlXaW5kb3cgKiluZXdXaW5kb3cKIHsKICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAq
ZGVmYXVsdENlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCmluZGV4IDBmOWQyMWMxNzgxNjdhNjZjZWViNTAwODk2YzA2NTk0Njk1OTE3MjEu
LjkyOTE3NjRmYjZiZmIxN2JiY2M5MTUzZjViYzYzNWNkY2I1YWY3ODUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQpAQCAtMjk3NiwxMyArMjk3NiwyMCBAQCAtICh2b2lkKWVuZFNlbGVjdGlvbkNoYW5nZQogewog
ICAgIFtzZWxmLmlucHV0RGVsZWdhdGUgc2VsZWN0aW9uRGlkQ2hhbmdlOnNlbGZdOwogfQotICAg
IAorCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIC0gKHZvaWQpaW5zZXJ0VGV4dFN1Z2dl
c3Rpb246KFVJVGV4dFN1Z2dlc3Rpb24gKil0ZXh0U3VnZ2VzdGlvbgogeworICAgIC8vIEZJWE1F
OiBSZXBsYWNlIE5TQ2xhc3NGcm9tU3RyaW5nIHdpdGggYWN0dWFsIGNsYXNzIGFzIHNvb24gYXMg
VUlLaXQgc3VibWl0dGVkIHRoZSBuZXcgY2xhc3MgaW50byB0aGUgaU9TIFNESy4KKyAgICBpZiAo
W3RleHRTdWdnZXN0aW9uIGlzS2luZE9mQ2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJVSUtleWJv
YXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24iKV0pIHsKKyAgICAgICAgX3BhZ2UtPmF1dG9m
aWxsTG9naW5DcmVkZW50aWFscyhbKFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlv
biAqKXRleHRTdWdnZXN0aW9uIHVzZXJuYW1lXSwgWyhVSUtleWJvYXJkTG9naW5DcmVkZW50aWFs
c1N1Z2dlc3Rpb24gKil0ZXh0U3VnZ2VzdGlvbiBwYXNzd29yZF0pOworICAgICAgICByZXR1cm47
CisgICAgfQogICAgIGlkIDxfV0tJbnB1dERlbGVnYXRlPiBpbnB1dERlbGVnYXRlID0gW193ZWJW
aWV3IF9pbnB1dERlbGVnYXRlXTsKICAgICBpZiAoW2lucHV0RGVsZWdhdGUgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzppbnNlcnRUZXh0U3VnZ2VzdGlvbjppbklucHV0U2Vz
c2lvbjopXSkKICAgICAgICAgW2lucHV0RGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgaW5zZXJ0
VGV4dFN1Z2dlc3Rpb246dGV4dFN1Z2dlc3Rpb24gaW5JbnB1dFNlc3Npb246X2Zvcm1JbnB1dFNl
c3Npb24uZ2V0KCldOwogfQorI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAKIC0g
KE5TU3RyaW5nICopdGV4dEluUmFuZ2U6KFVJVGV4dFJhbmdlICopcmFuZ2UKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCmluZGV4IDQ3MjhlMGRm
ZmUxMGM1ZmY3YzcwN2UwNGE4MzE4MDRhZmJiZTJkMDUuLmQzZTY3ZDdlMzUzOTI4MTVhMTM1MWFj
YjFjNDZkMzE2ZTQ3YmE1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbQpAQCAtODkxLDYgKzg5MSw4IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRHZXRUYXBIaWdobGlnaHRHZW9tZXRyaWVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2Vi
Q29yCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzdGFydEFzc2lzdGluZ05vZGUoY29uc3QgQXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uLCBib29sIHVzZXJJc0ludGVyYWN0aW5nLCBi
b29sIGJsdXJQcmV2aW91c05vZGUsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKIHsKKyAgICBt
X2FjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyA9IGluZm9ybWF0aW9uLmFjY2VwdHNB
dXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKKyAgICBtX3JlcHJlc2VudGluZ1BhZ2VVUkwgPSBp
bmZvcm1hdGlvbi5yZXByZXNlbnRpbmdQYWdlVVJMOwogICAgIEFQSTo6T2JqZWN0KiB1c2VyRGF0
YU9iamVjdCA9IHByb2Nlc3MoKS50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9i
amVjdCgpKS5nZXQoKTsKICAgICBpZiAobV9lZGl0b3JTdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0
RGF0YSkgewogICAgICAgICBtX2RlZmVycmVkTm9kZUFzc2lzdGFuY2VBcmd1bWVudHMgPSBzdGQ6
Om1ha2VfdW5pcXVlPE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzPihOb2RlQXNzaXN0YW5jZUFyZ3Vt
ZW50cyB7IGluZm9ybWF0aW9uLCB1c2VySXNJbnRlcmFjdGluZywgYmx1clByZXZpb3VzTm9kZSwg
dXNlckRhdGFPYmplY3QgfSk7CkBAIC05MTAsNiArOTEyLDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpzdG9wQXNzaXN0aW5nTm9kZSgpCiAgICAgbV9wYWdlQ2xpZW50LnN0b3BBc3Npc3RpbmdOb2Rl
KCk7CiB9CiAKK2Jvb2wgV2ViUGFnZVByb3h5OjphY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVu
dGlhbHMoKQoreworICAgIHJldHVybiBtX2FjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFs
czsKK30KKworV2ViQ29yZTo6VVJMIFdlYlBhZ2VQcm94eTo6cmVwcmVzZW50aW5nUGFnZVVSTCgp
Cit7CisgICAgcmV0dXJuIG1fcmVwcmVzZW50aW5nUGFnZVVSTDsKK30KKwordm9pZCBXZWJQYWdl
UHJveHk6OmF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBj
b25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6QXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKHVzZXJuYW1lLCBwYXNzd29yZCksIG1f
cGFnZUlEKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OnNob3dJbnNwZWN0b3JIaWdobGlnaHQo
Y29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiBoaWdobGlnaHQpCiB7CiAgICAgbV9wYWdlQ2xpZW50
LnNob3dJbnNwZWN0b3JIaWdobGlnaHQoaGlnaGxpZ2h0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA0ZTcxNTQ3ZWI0M2UzMzI2ODYzODdlZWEzZmJj
Yzk5YTYwOTQyYzBjLi42YTc2OTE3ZGIzMGRhZjQ5NDI1ZmExY2RmZTU2YTNkN2MxMzg1ZjJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC01NzYsNiAr
NTc2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcEludGVyYWN0aW9uKCk7CiAgICAgdm9pZCBw
ZXJmb3JtQWN0aW9uT25FbGVtZW50KHVpbnQzMl90IGFjdGlvbik7CiAgICAgdm9pZCBmb2N1c05l
eHRBc3Npc3RlZE5vZGUoYm9vbCBpc0ZvcndhcmQsIENhbGxiYWNrSUQpOworICAgIHZvaWQgYXV0
b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRB
c3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5v
ZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rp
b24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4KaW5kZXggNjgyMTVhNTU4YTBkNTMwNzI3ZWJmNjJlNzEyMTEwNjYyYjNkYmU2
ZS4uM2FjY2YzNmUxMzQ2YjVjZDRkMjNmNzdkNTZmMTIwYmMxM2Q5YjgzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBA
IC04NCw2ICs4NCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAg
IFBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9uKQogICAgIEZvY3VzTmV4dEFz
c2lzdGVkTm9kZShib29sIGlzRm9yd2FyZCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQp
CiAgICAgU2V0QXNzaXN0ZWROb2RlVmFsdWUoU3RyaW5nIHZhbHVlKQorICAgIEF1dG9maWxsTG9n
aW5DcmVkZW50aWFscyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkKICAgICBTZXRB
c3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAgICBTZXRBc3Npc3RlZE5v
ZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVsdGlwbGVTZWxlY3Rp
b24pCiAgICAgQXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggNzkzNmFjZjQx
MTZiNzdhYWJmNTA4OGViMmExOWEyZjI1ZmE2M2NhOC4uODhkMjFkZmM3MjRiYmY2YTU1MzYwMzJh
YjI2MDY5OTk4ZjNlZjU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgIldlYlBy
b2Nlc3MuaCIKICNpbXBvcnQgPENvcmVUZXh0L0NURm9udC5oPgogI2ltcG9ydCA8V2ViQ29yZS9B
dXRvZmlsbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9BdXRvZmlsbEVsZW1lbnRzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9EYXRhRGV0ZWN0aW9uLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CkBAIC0yNzUwLDYgKzI3
NTEsOCBAQCB2b2lkIFdlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKEFzc2lzdGVk
Tm9kZUluZm9ybWF0aW9uJiBpbmZvcm1hdGlvbikKICAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBm
b3JtID0gZWxlbWVudC5mb3JtKCk7CiAgICAgICAgIGlmIChmb3JtKQogICAgICAgICAgICAgaW5m
b3JtYXRpb24uZm9ybUFjdGlvbiA9IGZvcm0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmFjdGlvbkF0dHIpOworICAgICAgICBpbmZvcm1hdGlvbi5hY2NlcHRzQXV0b2ZpbGxl
ZExvZ2luQ3JlZGVudGlhbHMgPSAhIVdlYkNvcmU6OkF1dG9maWxsRWxlbWVudHM6OmNvbXB1dGVB
dXRvZmlsbEVsZW1lbnRzKGVsZW1lbnQpOworICAgICAgICBpbmZvcm1hdGlvbi5yZXByZXNlbnRp
bmdQYWdlVVJMID0gZWxlbWVudC5kb2N1bWVudCgpLnVybEZvckJpbmRpbmdzKCk7CiAgICAgICAg
IGluZm9ybWF0aW9uLmF1dG9jYXBpdGFsaXplVHlwZSA9IGVsZW1lbnQuYXV0b2NhcGl0YWxpemVU
eXBlKCk7CiAgICAgICAgIGluZm9ybWF0aW9uLmlzQXV0b2NvcnJlY3QgPSBlbGVtZW50LnNob3Vs
ZEF1dG9jb3JyZWN0KCk7CiAgICAgICAgIGlmIChlbGVtZW50LmlzUGFzc3dvcmRGaWVsZCgpKQpA
QCAtMjgwNyw2ICsyODEwLDE0IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQogICAgIH0KIH0KIAor
dm9pZCBXZWJQYWdlOjphdXRvZmlsbExvZ2luQ3JlZGVudGlhbHMoY29uc3QgU3RyaW5nJiB1c2Vy
bmFtZSwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKK3sKKyAgICBpZiAoaXM8SFRNTElucHV0RWxl
bWVudD4oKm1fYXNzaXN0ZWROb2RlKSkgeworICAgICAgICBpZiAoYXV0byBhdXRvZmlsbEVsZW1l
bnRzID0gQXV0b2ZpbGxFbGVtZW50czo6Y29tcHV0ZUF1dG9maWxsRWxlbWVudHMoZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm1fYXNzaXN0ZWROb2RlKSkpCisgICAgICAgICAgICBhdXRvZmls
bEVsZW1lbnRzLT5hdXRvZmlsbCh1c2VybmFtZSwgcGFzc3dvcmQpOworICAgIH0KK30KKwogdm9p
ZCBXZWJQYWdlOjpzZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25NaW5pbXVtTGF5b3V0U2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRDb25maWd1cmF0aW9uLnNl
dE1pbmltdW1MYXlvdXRTaXplKHNpemUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggYTA5MjM3N2IxZGU5MTVmNTY4YTUzMGU5
ZTNhZWQzZjBiMzMyOWRmZi4uNWExMWIxZTgwOGYyMzQ0MjZmMWYxODJhOWFiYTdmYzVhODQ4Mzdj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxJbnB1dEVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTElucHV0RWxl
bWVudC5oCkBAIC0yNCw2ICsyNCw5IEBACiAgKi8KIAogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RP
TUhUTUxFbGVtZW50Lmg+CisjaWYgVEFSR0VUX09TX0lQSE9ORQorI2ltcG9ydCA8VUlLaXQvVUlU
ZXh0SW5wdXRUcmFpdHMuaD4KKyNlbmRpZgogCiBAY2xhc3MgRE9NRmlsZUxpc3Q7CiBAY2xhc3Mg
RE9NSFRNTEZvcm1FbGVtZW50OwpAQCAtMzEsNyArMzQsMTEgQEAKIEBjbGFzcyBOU1VSTDsKIAog
V0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMoMTBfNCkKKyNpZiBUQVJHRVRfT1NfSVBIT05FCitA
aW50ZXJmYWNlIERPTUhUTUxJbnB1dEVsZW1lbnQgOiBET01IVE1MRWxlbWVudDxVSVRleHRJbnB1
dFRyYWl0cz4KKyNlbHNlCiBAaW50ZXJmYWNlIERPTUhUTUxJbnB1dEVsZW1lbnQgOiBET01IVE1M
RWxlbWVudAorI2VuZGlmCiBAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICphY2NlcHQ7CiBAcHJv
cGVydHkgKGNvcHkpIE5TU3RyaW5nICphbHQ7CiBAcHJvcGVydHkgQk9PTCBhdXRvZm9jdXMgV0VC
S0lUX0FWQUlMQUJMRV9NQUMoMTBfNik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NSFRNTElucHV0RWxlbWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01IVE1MSW5wdXRFbGVtZW50Lm1tCmluZGV4IDliYzgwM2M1OTU4NTAxYzg2OTA5NDUy
MDNmYmEyYTcwOTg1NzZkMWEuLjhiZDhjYzc3N2VlNmY2YWRiOTNkY2M0ZTAzOGRjYjE3YzYzNmJj
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRF
bGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MSW5wdXRF
bGVtZW50Lm1tCkBAIC0zMyw2ICszMywyMyBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTVByaXZhdGUuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisKKy8v
IEZJWE1FIDxyYWRhcjozNDU4MzYyOD46IFNpbXBseWZ5IHRoaXMgb25jZSB0aGUgVUlLaXQgd29y
ayBpcyBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkLgorI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREsp
ICYmIFRBUkdFVF9PU19JUEhPTkUKKyNpZiBfX2hhc19pbmNsdWRlKDxVSUtpdC9VSUtleWJvYXJk
TG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24uaD4pCisjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJk
TG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24uaD4KKyNlbHNlCisjaW1wb3J0IDxVSUtpdC9VSVRl
eHRJbnB1dF9Qcml2YXRlLmg+CitAaW50ZXJmYWNlIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxz
U3VnZ2VzdGlvbiA6IFVJVGV4dFN1Z2dlc3Rpb24KKworQHByb3BlcnR5IChub25hdG9taWMsIGFz
c2lnbikgTlNTdHJpbmcgKnVzZXJuYW1lOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
TlNTdHJpbmcgKnBhc3N3b3JkOworCitAZW5kCisjZW5kaWYgLy8gX19oYXNfaW5jbHVkZSg8VUlL
aXQvVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uLmg+KQorI2VuZGlmIC8vIFVT
RShBUFBMRV9JTlRFUk5BTF9TREspICYmIFRBUkdFVF9PU19JUEhPTkUKKworI2ltcG9ydCA8V2Vi
Q29yZS9BdXRvZmlsbEVsZW1lbnRzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZpbGVMaXN0Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGb3Jt
RWxlbWVudC5oPgpAQCAtNjY2LDYgKzY4MywyOSBAQCAtICh2b2lkKXNldFZhbHVlRm9yVXNlcjoo
TlNTdHJpbmcgKilpblZhbHVlCiAgICAgSU1QTC0+c2V0VmFsdWVGb3JVc2VyKGluVmFsdWUpOwog
fQogCistIChCT09MKWFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscworeworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gISFXZWJDb3Jl
OjpBdXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxFbGVtZW50cygqSU1QTCk7Cit9CisK
Ky0gKE5TVVJMICopcmVwcmVzZW50aW5nUGFnZVVSTAoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6c2Vs
Zi5vd25lckRvY3VtZW50LlVSTF07Cit9CisKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAm
JiBUQVJHRVRfT1NfSVBIT05FCistICh2b2lkKWluc2VydFRleHRTdWdnZXN0aW9uOihVSUtleWJv
YXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24gKiljcmVkZW50aWFsc1N1Z2dlc3Rpb24KK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgaWYgKGlzPFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+KElNUEwpKSB7CisgICAgICAgIGlmIChhdXRvIGF1dG9m
aWxsRWxlbWVudHMgPSBXZWJDb3JlOjpBdXRvZmlsbEVsZW1lbnRzOjpjb21wdXRlQXV0b2ZpbGxF
bGVtZW50cygqSU1QTCkpCisgICAgICAgICAgICBhdXRvZmlsbEVsZW1lbnRzLT5hdXRvZmlsbChj
cmVkZW50aWFsc1N1Z2dlc3Rpb24udXNlcm5hbWUsIGNyZWRlbnRpYWxzU3VnZ2VzdGlvbi5wYXNz
d29yZCk7CisgICAgfQorfQorI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIFRB
UkdFVF9PU19JUEhPTkUKKwogQGVuZAogCiBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBjb3Jl
KERPTUhUTUxJbnB1dEVsZW1lbnQgKndyYXBwZXIpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGYxNjdmNDJjNTFlMzUxZGYyZjNhOWE2YjYyYWVj
N2IwOWY2MGFjNi4uYjQwOGNhOGJjNmFjZWUzMDI5NTMyYzZiY2M2YmI0MTE4NzMyNTlhZiAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE3IEBACisyMDE3LTA5LTE5ICBGcmVkZXJpayBSaWVkZWwgIDxyaWVkZWxAYXBwbGUuY29tPgor
CisgICAgICAgIEV4cG9zZSB3YXkgdG8gc2V0IHZhbHVlcyBvZiBjbGFzc2lmaWVkIGZvcm0gY29u
dHJvbHMgYXMge0xlZ2FjeSBXZWJLaXQsIFdlYktpdH0gU1BJCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzMzMTgzNTA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL1dLV2ViVmlld0F1dG9maWxs
VGVzdHMubW06IEFkZGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3ByaXZhdGVUZXh0SW5wdXRd
KTogVGVzdGluZyBoZWxwZXJzLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6IEFkZGVk
IHRlc3QgY2FzZXMgdG8gdGVzdCBBdXRvRmlsbCBmb3Igd2ViIHZpZXdzLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvaW9zL1VJS2l0U1BJLmg6CisKIDIwMTctMDktMjUgIFJ5YW4gSGFkZGFkICA8
cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEhpZ2ggU2llcnJhIGJvdHMgdG8g
YnVpbGRib3QgYW5kIGRhc2hib2FyZC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWU4OTQy
ODc0MjVmNjNmN2I5Njc0MTQzMGMxNmM4ZmUyZWJlNjE0Yy4uN2I3ZDE5YTY0ZTQzODBlNjdmZTY1
ODMzZjhlNGQzNjYyODc2NTlmZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2MSw2ICsx
NjEsNyBAQAogCQk1MTIwQzgzRTFFNjc2NzhGMDAyNUIyNTAgLyogV2Vic2l0ZURhdGFTdG9yZUN1
c3RvbVBhdGhzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEyMEM4M0IxRTY3NEUzNTAwMjVCMjUwIC8qIFdlYnNpdGVEYXRhU3RvcmVD
dXN0b21QYXRocy5odG1sICovOyB9OwogCQk1MTM5M0UyMjE1MjM5NTJEMDA1RjM5QzUgLyogRE9N
V2luZG93RXh0ZW5zaW9uQmFzaWNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMzkzRTFEMTUyMzk0NEEwMDVGMzlDNSAvKiBET01XaW5k
b3dFeHRlbnNpb25CYXNpY19CdW5kbGUuY3BwICovOyB9OwogCQk1MTQyQjI3MzE1MTdDOEM4MDBD
MzJCMTkgLyogQ29udGV4dE1lbnVDYW5Db3B5VVJMLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0MkIyNzIxNTE3Qzg5MTAwQzMyQjE5
IC8qIENvbnRleHRNZW51Q2FuQ29weVVSTC5odG1sICovOyB9OworCQk1MTQ5NThCRTFGNzQyN0FD
MDBFODdCQUQgLyogV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNDk1OEJEMUY3NDI3QUMwMEU4N0JBRCAvKiBX
S1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tICovOyB9OwogCQk1MTVCRTE2RjFENDI4QkIxMDBERDdD
NjggLyogU3RvcmVCbG9iVG9CZURlbGV0ZWQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVCRTE2RTFENDI4OEZGMDBERDdDNjggLyog
U3RvcmVCbG9iVG9CZURlbGV0ZWQuaHRtbCAqLzsgfTsKIAkJNTE1QkUxNzExRDQyOEU0QjAwREQ3
QzY4IC8qIFN0b3JlQmxvYlRoZW5EZWxldGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVCRTE3MDFENDI4QkQxMDBERDdDNjggLyogU3RvcmVCbG9i
VGhlbkRlbGV0ZS5tbSAqLzsgfTsKIAkJNTE3MTRFQjQxQ0Y4Qzc4QzAwNDcyM0M0IC8qIFdlYlBy
b2Nlc3NLaWxsSURCQ2xlYW51cC0xLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3MTRFQjIxQ0Y4Qzc2MTAwNDcyM0M0IC8qIFdlYlBy
b2Nlc3NLaWxsSURCQ2xlYW51cC0xLmh0bWwgKi87IH07CkBAIC0xMjQyLDYgKzEyNDMsNyBAQAog
CQk1MTM5M0UxRTE1MjM5NDRBMDA1RjM5QzUgLyogRE9NV2luZG93RXh0ZW5zaW9uQmFzaWMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NV2luZG93RXh0ZW5zaW9u
QmFzaWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTQyQjI3MDE1MTdDODhC
MDBDMzJCMTkgLyogQ29udGV4dE1lbnVDYW5Db3B5VVJMLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGV4dE1lbnVDYW5Db3B5VVJMLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTQyQjI3MjE1MTdDODkxMDBDMzJCMTkgLyogQ29udGV4dE1l
bnVDYW5Db3B5VVJMLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBDb250ZXh0TWVu
dUNhbkNvcHlVUkwuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE0OTU4QkQx
Rjc0MjdBQzAwRTg3QkFEIC8qIFdLV2ViVmlld0F1dG9maWxsVGVzdHMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTVCRTE2RTFENDI4OEZGMDBERDdDNjggLyogU3RvcmVCbG9iVG9CZURlbGV0
ZWQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IFN0b3JlQmxvYlRvQmVEZWxldGVk
Lmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNUJFMTcwMUQ0MjhCRDEwMERE
N0M2OCAvKiBTdG9yZUJsb2JUaGVuRGVsZXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gU3RvcmVCbG9iVGhlbkRlbGV0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTE3MTRFQjIxQ0Y4Qzc2MTAwNDcyM0M0IC8qIFdlYlByb2Nlc3NLaWxsSURC
Q2xlYW51cC0xLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiV2ViUHJvY2Vzc0tp
bGxJREJDbGVhbnVwLTEuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTE5
LDYgKzIxMjEsNyBAQAogCQkJCUY0RDRGM0I3MUU0RTM2RTQwMEJCMjc2NyAvKiBEYXRhSW50ZXJh
Y3Rpb25UZXN0cy5tbSAqLywKIAkJCQk3NTYwOTE3NzE5MjU5QzU5MDA5RUYwNkUgLyogTWVtb3J5
Q2FjaGVBZGRJbWFnZVRvQ2FjaGVJT1MubW0gKi8sCiAJCQkJRjQ2ODQ5QkQxRUVGNThFNDAwQjkz
N0ZFIC8qIFVJUGFzdGVib2FyZFRlc3RzLm1tICovLAorCQkJCTUxNDk1OEJEMUY3NDI3QUMwMEU4
N0JBRCAvKiBXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBp
b3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzQ1Myw2ICszNDU2LDcgQEAKIAkJ
CQkyRDRDRjhCRDFEODM2MENDMDAwMUNFOEQgLyogV0tUaHVtYm5haWxWaWV3Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFDNjgzREUxRUExMzRFODAwNjUwMTgzIC8qIFdLVVJMU2NoZW1lSGFuZGxl
ci0xLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4MkMyMkUxRjJCQ0U1NDAwNTlCQTdDIC8qIFdL
VVJMU2NoZW1lSGFuZGxlci1sZWFrcy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxNDk1OEJFMUY3
NDI3QUMwMEU4N0JBRCAvKiBXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkVGRjA2RDcxRDhBRjM0QTAwMDRCQjMwIC8qIFdLV2ViVmlld0NhbmRpZGF0ZVRlc3Rz
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE0RkM1ODUxQjg5NzM5MTAwRDEwN0VCIC8qIFdLV2Vi
Vmlld0NvbmZpZ3VyYXRpb25FeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzQxN0YzMzFE
MTlFMTQ4MDBCOEVGNTMgLyogV0tXZWJWaWV3RGVmYXVsdE5hdmlnYXRpb25EZWxlZ2F0ZS5tbSBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3Mv
V0tXZWJWaWV3QXV0b2ZpbGxUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9z
L1dLV2ViVmlld0F1dG9maWxsVGVzdHMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTExMjg1ZWM0OTU2OTQxNTFl
MTFmNTdjZmExYTUzZGM2MjdlZTBiNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvaW9zL1dLV2ViVmlld0F1dG9maWxsVGVzdHMubW0KQEAgLTAsMCArMSwxNzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBXS19BUElfRU5BQkxF
RCAmJiBQTEFURk9STShJT1MpICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKyNpbXBvcnQg
IlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0
ICJVSUtpdFNQSS5oIgorCisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dFRyYWl0c19Qcml2YXRl
Lmg+CisjaW1wb3J0IDxVSUtpdC9VSVRleHRJbnB1dF9Qcml2YXRlLmg+CisKKy8vIEZJWE1FIDM0
NTgzNjI4OiBTaW1wbHlmeSB0aGlzIG9uY2UgdGhlIFVJS2l0IHdvcmsgaXMgYXZhaWxhYmxlIGlu
IHRoZSBidWlsZC4KKyNpZiBfX2hhc19pbmNsdWRlKDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVk
ZW50aWFsc1N1Z2dlc3Rpb24uaD4pCisjaW1wb3J0IDxVSUtpdC9VSUtleWJvYXJkTG9naW5DcmVk
ZW50aWFsc1N1Z2dlc3Rpb24uaD4KKyNlbHNlCisjaW1wb3J0IDxVSUtpdC9VSVRleHRTdWdnZXN0
aW9uLmg+CitAaW50ZXJmYWNlIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiA6
IFVJVGV4dFN1Z2dlc3Rpb24KKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJp
bmcgKnVzZXJuYW1lOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgTlNTdHJpbmcgKnBh
c3N3b3JkOworCitAZW5kCisjZW5kaWYKKworc3RhdGljIFVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRp
YWxzU3VnZ2VzdGlvbiAqY3JlYXRlVUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9u
KCkKK3sKKyAgICByZXR1cm4gW1tOU0NsYXNzRnJvbVN0cmluZyhAIlVJS2V5Ym9hcmRMb2dpbkNy
ZWRlbnRpYWxzU3VnZ2VzdGlvbiIpIG5ld10gYXV0b3JlbGVhc2VdOworfQorCit0eXBlZGVmIFVJ
VmlldyA8VUlUZXh0SW5wdXRQcml2YXRlLCBVSVRleHRJbnB1dFRyYWl0c19Qcml2YXRlLCBVSVRl
eHRJbnB1dFRyYWl0c19Qcml2YXRlX1N0YWdpbmdfMzQ1ODM2Mjg+ICBBdXRvZmlsbENhbmRpZGF0
ZVZpZXc7CisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXcgKEF1dG9maWxsVGVzdEhlbHBlcnMp
CisKKy0gKEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqKV9wcml2YXRlVGV4dElucHV0Cit7CisgICAg
cmV0dXJuIChBdXRvZmlsbENhbmRpZGF0ZVZpZXcgKilbc2VsZiB2YWx1ZUZvcktleTpAIl9jdXJy
ZW50Q29udGVudFZpZXciXTsKK30KKworQGVuZAorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CisKK1RFU1QoV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywgVXNlcm5hbWVBbmRQYXNzd29yZEZpZWxk
KQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldOworICAgIEF1dG9maWxs
Q2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmlldyBfcHJpdmF0ZVRleHRJbnB1dF07
CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPGlucHV0IGlkPSd1
c2VyJyB0eXBlPSdlbWFpbCc+PGlucHV0IGlkPSdwYXNzd29yZCcgdHlwZT0ncGFzc3dvcmQnPiJd
OworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1c2VyLmZvY3Vz
KCkiXTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2lu
Q3JlZGVudGlhbHMpOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAInBhc3N3b3JkLmZvY3VzKCkiXTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZW50Vmlldy5hY2Nl
cHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpOworCisgICAgVUlLZXlib2FyZExvZ2luQ3Jl
ZGVudGlhbHNTdWdnZXN0aW9uICpjcmVkZW50aWFsU3VnZ2VzdGlvbiA9IGNyZWF0ZVVJS2V5Ym9h
cmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbigpOworICAgIGNyZWRlbnRpYWxTdWdnZXN0aW9u
LnVzZXJuYW1lID0gQCJmcmVkZXJpayI7CisgICAgY3JlZGVudGlhbFN1Z2dlc3Rpb24ucGFzc3dv
cmQgPSBAImZhbW9zIjsKKworICAgIFtjb250ZW50VmlldyBpbnNlcnRUZXh0U3VnZ2VzdGlvbjpj
cmVkZW50aWFsU3VnZ2VzdGlvbl07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoY3JlZGVudGlhbFN1
Z2dlc3Rpb24udXNlcm5hbWUsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJ1c2VyLnZhbHVlIl0pOworICAgIEVYUEVDVF9XS19TVFJFUShjcmVkZW50aWFsU3VnZ2VzdGlv
bi5wYXNzd29yZCwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInBhc3N3
b3JkLnZhbHVlIl0pOworCisgICAgW3dlYlZpZXcgcmVsZWFzZV07Cit9CisKK1RFU1QoV0tXZWJW
aWV3QXV0b2ZpbGxUZXN0cywgVXNlcm5hbWVBbmRQYXNzd29yZEZpZWxkU2VwYXJhdGVkQnlSYWRp
b0J1dHRvbikKK3sKKyAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXTsKKyAgICBB
dXRvZmlsbENhbmRpZGF0ZVZpZXcgKmNvbnRlbnRWaWV3ID0gW3dlYlZpZXcgX3ByaXZhdGVUZXh0
SW5wdXRdOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjxpbnB1
dCBpZD0ndXNlcicgdHlwZT0nZW1haWwnPjxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0ncmFkaW9f
YnV0dG9uJyB2YWx1ZT0ncmFkaW8nPjxpbnB1dCBpZD0ncGFzc3dvcmQnIHR5cGU9J3Bhc3N3b3Jk
Jz4iXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidXNlci5m
b2N1cygpIl07CisgICAgRVhQRUNUX1RSVUUoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRM
b2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJwYXNzd29yZC5mb2N1cygpIl07CisgICAgRVhQRUNUX1RSVUUoY29udGVudFZpZXcu
YWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFVJS2V5Ym9hcmRMb2dp
bkNyZWRlbnRpYWxzU3VnZ2VzdGlvbiAqY3JlZGVudGlhbFN1Z2dlc3Rpb24gPSBjcmVhdGVVSUtl
eWJvYXJkTG9naW5DcmVkZW50aWFsc1N1Z2dlc3Rpb24oKTsKKyAgICBjcmVkZW50aWFsU3VnZ2Vz
dGlvbi51c2VybmFtZSA9IEAiZnJlZGVyaWsiOworICAgIGNyZWRlbnRpYWxTdWdnZXN0aW9uLnBh
c3N3b3JkID0gQCJmYW1vcyI7CisKKyAgICBbY29udGVudFZpZXcgaW5zZXJ0VGV4dFN1Z2dlc3Rp
b246Y3JlZGVudGlhbFN1Z2dlc3Rpb25dOworCisgICAgRVhQRUNUX1dLX1NUUkVRKGNyZWRlbnRp
YWxTdWdnZXN0aW9uLnVzZXJuYW1lLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAidXNlci52YWx1ZSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoY3JlZGVudGlhbFN1Z2dl
c3Rpb24ucGFzc3dvcmQsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJw
YXNzd29yZC52YWx1ZSJdKTsKKworICAgIFt3ZWJWaWV3IHJlbGVhc2VdOworfQorCitURVNUKFdL
V2ViVmlld0F1dG9maWxsVGVzdHMsIFR3b1RleHRGaWVsZHMpCit7CisgICAgVGVzdFdLV2ViVmll
dyAqd2ViVmlldyA9IFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RN
YWtlKDAsIDAsIDMyMCwgNTAwKV07CisgICAgQXV0b2ZpbGxDYW5kaWRhdGVWaWV3ICpjb250ZW50
VmlldyA9IFt3ZWJWaWV3IF9wcml2YXRlVGV4dElucHV0XTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8aW5wdXQgaWQ9J3RleHQxJyB0eXBlPSdlbWFpbCc+PGlu
cHV0IGlkPSd0ZXh0MicgdHlwZT0ndGV4dCc+Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAInRleHQxLmZvY3VzKCkiXTsKKyAgICBFWFBFQ1RfRkFMU0UoY29u
dGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRMb2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0ZXh0Mi5mb2N1cygpIl07CisgICAg
RVhQRUNUX0ZBTFNFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFs
cyk7Cit9CisKK1RFU1QoV0tXZWJWaWV3QXV0b2ZpbGxUZXN0cywgU3RhbmRhbG9uZVBhc3N3b3Jk
RmllbGQpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV07CisgICAgQXV0
b2ZpbGxDYW5kaWRhdGVWaWV3ICpjb250ZW50VmlldyA9IFt3ZWJWaWV3IF9wcml2YXRlVGV4dElu
cHV0XTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8aW5wdXQg
aWQ9J3Bhc3N3b3JkJyB0eXBlPSdwYXNzd29yZCc+Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAInBhc3N3b3JkLmZvY3VzKCkiXTsKKyAgICBFWFBFQ1RfVFJV
RShjb250ZW50Vmlldy5hY2NlcHRzQXV0b2ZpbGxlZExvZ2luQ3JlZGVudGlhbHMpOworCisgICAg
VUlLZXlib2FyZExvZ2luQ3JlZGVudGlhbHNTdWdnZXN0aW9uICpjcmVkZW50aWFsU3VnZ2VzdGlv
biA9IGNyZWF0ZVVJS2V5Ym9hcmRMb2dpbkNyZWRlbnRpYWxzU3VnZ2VzdGlvbigpOworICAgIGNy
ZWRlbnRpYWxTdWdnZXN0aW9uLnVzZXJuYW1lID0gQCJmcmVkZXJpayI7CisgICAgY3JlZGVudGlh
bFN1Z2dlc3Rpb24ucGFzc3dvcmQgPSBAImZhbW9zIjsKKworICAgIFtjb250ZW50VmlldyBpbnNl
cnRUZXh0U3VnZ2VzdGlvbjpjcmVkZW50aWFsU3VnZ2VzdGlvbl07CisKKyAgICBFWFBFQ1RfV0tf
U1RSRVEoY3JlZGVudGlhbFN1Z2dlc3Rpb24ucGFzc3dvcmQsIFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJwYXNzd29yZC52YWx1ZSJdKTsKKworICAgIFt3ZWJWaWV3IHJl
bGVhc2VdOworfQorCitURVNUKFdLV2ViVmlld0F1dG9maWxsVGVzdHMsIFN0YW5kYWxvbmVUZXh0
RmllbGQpCit7CisgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV07CisgICAgQXV0
b2ZpbGxDYW5kaWRhdGVWaWV3ICpjb250ZW50VmlldyA9IFt3ZWJWaWV3IF9wcml2YXRlVGV4dElu
cHV0XTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8aW5wdXQg
aWQ9J3RleHRmaWVsZCcgdHlwZT0ndGV4dCc+Il07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAInRleHRmaWVsZC5mb2N1cygpIl07CisgICAgRVhQRUNUX0ZBTFNF
KGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7CisKKyAgICBb
d2ViVmlldyByZWxlYXNlXTsKK30KKworVEVTVChXS1dlYlZpZXdBdXRvZmlsbFRlc3RzLCBBY2Nv
dW50Q3JlYXRpb25QYWdlKQoreworICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
OworICAgIEF1dG9maWxsQ2FuZGlkYXRlVmlldyAqY29udGVudFZpZXcgPSBbd2ViVmlldyBfcHJp
dmF0ZVRleHRJbnB1dF07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5n
OkAiPGlucHV0IGlkPSd1c2VyJyB0eXBlPSdlbWFpbCc+PGlucHV0IGlkPSdwYXNzd29yZCcgdHlw
ZT0ncGFzc3dvcmQnPjxpbnB1dCBpZD0nY29uZmlybV9wYXNzd29yZCcgdHlwZT0ncGFzc3dvcmQn
PiJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ1c2VyLmZv
Y3VzKCkiXTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udGVudFZpZXcuYWNjZXB0c0F1dG9maWxsZWRM
b2dpbkNyZWRlbnRpYWxzKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJwYXNzd29yZC5mb2N1cygpIl07CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRlbnRWaWV3
LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFscyk7CisKKyAgICBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiY29uZmlybV9wYXNzd29yZC5mb2N1cygpIl07Cisg
ICAgRVhQRUNUX0ZBTFNFKGNvbnRlbnRWaWV3LmFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50
aWFscyk7CisKKyAgICBbd2ViVmlldyByZWxlYXNlXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRCAmJiBQTEFURk9STShJT1Mp
ICYmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2lvcy9VSUtpdFNQSS5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvVUlLaXRTUEkuaApp
bmRleCBlMDJmNTM2N2YxNzY5ODllMmI4ZTcxNzZiYWFkZjMxN2I5MjJmYWI1Li5hOGM0ZTRjYjMx
Y2YxZjYzN2JkOTVkOTZkY2JhYTdlMDU0ZTg4MTgwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2lvcy9VSUtpdFNQSS5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL1VJS2l0
U1BJLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIAorI2ltcG9ydCA8
VUlLaXQvVUlUZXh0SW5wdXRUcmFpdHMuaD4KKwogI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFY
X0FMTE9XRUQgPj0gMTEwMDAwCiBAcHJvdG9jb2wgVUlEcmFnU2Vzc2lvbjsKIEBjbGFzcyBVSURy
YWdJbnRlcmFjdGlvbjsKQEAgLTM1LDYgKzM3LDEzIEBACiAKICNpbXBvcnQgPFVJS2l0L1VJQXBw
bGljYXRpb25fUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb25fUHJp
dmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0ZS5oPgorI2lt
cG9ydCA8VUlLaXQvVUlUZXh0U3VnZ2VzdGlvbi5oPgorCisKK0Bwcm90b2NvbCBVSVRleHRJbnB1
dFRyYWl0c19Qcml2YXRlX1N0YWdpbmdfMzQ1ODM2MjggPE5TT2JqZWN0LCBVSVRleHRJbnB1dFRy
YWl0cz4KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBhY2NlcHRzQXV0b2Zp
bGxlZExvZ2luQ3JlZGVudGlhbHM7CitAZW5kCiAKICNlbHNlCiAKQEAgLTUxLDYgKzYwLDEwIEBA
IFdURl9FWFRFUk5fQ19FTkQKIEBlbmQKICNlbmRpZiAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01B
WF9BTExPV0VEID49IDExMDAwMAogCitAcHJvdG9jb2wgVUlUZXh0SW5wdXRUcmFpdHNfUHJpdmF0
ZSA8TlNPYmplY3QsIFVJVGV4dElucHV0VHJhaXRzPgorQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBCT09MIGFjY2VwdHNBdXRvZmlsbGVkTG9naW5DcmVkZW50aWFsczsKK0BlbmQKKwog
I2VuZGlmCiAKICNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEID49IDExMDAwMAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>