<?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>161350</bug_id>
          
          <creation_ts>2016-08-29 15:28:31 -0700</creation_ts>
          <short_desc>Make PendingScript as ref-counted</short_desc>
          <delta_ts>2016-08-30 19:39:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>148897</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1224393</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-29 15:28:31 -0700</bug_when>
    <thetext>PendingScript is used as the cached resource client. So they have copy constructor to add / remove clients to the cached resource.
However, there is only one place where this functionality is used.

Making PendingScript as ref-counted and making PendingScript as noncopyable clean up code.
And later, I plan to use PendingScript as the abstraction over CachedScript &amp; ScriptModuleGraph.
And I plan to make PendingScript observable (adding PendingScriptClient).
It is good that PendingScript is noncopyable for that use cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224457</commentid>
    <comment_count>1</comment_count>
      <attachid>287356</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-29 17:18:47 -0700</bug_when>
    <thetext>Created attachment 287356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224480</commentid>
    <comment_count>2</comment_count>
      <attachid>287364</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-29 18:19:23 -0700</bug_when>
    <thetext>Created attachment 287364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224486</commentid>
    <comment_count>3</comment_count>
      <attachid>287364</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-29 18:57:09 -0700</bug_when>
    <thetext>Comment on attachment 287364
Patch

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        Furthermore, by changing PendingScript noncopyable &amp; ref-counted, we easily make it observable.

I think &quot;we make it observable easily&quot; reads better.

&gt; Source/WebCore/ChangeLog:22
&gt; +        Later, we plan to abstract ScriptModuleGraph (used for ES6 modules) and CachedScript by using
&gt; +        this PendingScript.

I&apos;m not sure what you mean by &quot;we plan to abstract&quot;.
Do you mean that this observability is necessary to add the support for ES6 modules?

&gt; Source/WebCore/dom/PendingScript.cpp:71
&gt; +void PendingScript::propagateFinished()

I&apos;d call this notifyClientFinished to match the naming convention elsewhere.

&gt; Source/WebCore/dom/PendingScript.cpp:92
&gt; +    m_client = client;

We should assert that m_client is not already set here.

&gt; Source/WebCore/dom/PendingScript.cpp:99
&gt; +    m_client = nullptr;

We should assert that the client matches m_client here.

&gt; Source/WebCore/dom/PendingScript.h:49
&gt; +    static Ref&lt;PendingScript&gt; create(Element&amp;, CachedScript*);

Can we make this CachedScript&amp;?

&gt; Source/WebCore/dom/PendingScript.h:65
&gt; +    bool needsLoading() const
&gt; +    {
&gt; +        return cachedScript();
&gt; +    }

Nit: we should just write this in a single line: bool needsLoading() const { return cachedScript(); }

&gt; Source/WebCore/dom/PendingScript.h:73
&gt; +    void addClient(PendingScriptClient*);
&gt; +    void removeClient(PendingScriptClient*);
&gt; +

It&apos;s misleading to call these functions addClient and removeClient since there could be at most one client.
Maybe setClient and clearClient?

&gt; Source/WebCore/dom/PendingScriptClient.h:36
&gt; +    virtual void notifyFinished(PendingScript&amp;) { }

Can&apos;t we make this a pure virtual function?

&gt; Source/WebCore/dom/ScriptRunner.cpp:112
&gt; +    for (size_t i = 0, length = scripts.size(); i &lt; length; ++i) {

Use modern for loop: for (auto&amp; currentScript: scripts).

&gt; Source/WebCore/dom/ScriptRunner.cpp:116
&gt; +        // The code is changed. Now if m_pendingAsyncScripts.take cannot find the target, it fills nullptr instead of empty PendingScript.

&quot;The code is changed&quot; is not a useful comment once this patch is landed.
I don&apos;t understand what you mean by &quot;if m_pendingAsyncScripts.take cannot find the target, it fills nullptr instead of empty PendingScript&quot;
Could you clarify?

&gt; Source/WebCore/dom/ScriptRunner.h:61
&gt; +    HashMap&lt;ScriptElement*, RefPtr&lt;PendingScript&gt;&gt; m_pendingAsyncScripts;

I think we can use Ref&lt;PendingScript&gt; for HashMap.

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:-156
&gt; -    pendingScript.setWatchingForLoad(true);

It&apos;s not clear to me why we can remove the call to setWatchingForLoad.
Could you clarify this in the change log entry?

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:-163
&gt; -    m_host.stopWatchingForLoad(pendingScript.cachedScript());
&gt; -    pendingScript.setWatchingForLoad(false);

Ditto.

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:-273
&gt; -    pendingScript.setCachedScript(cachedScript);
&gt; -    return true;

Again, it would be useful to have a per-function change log entry explaining
how this function&apos;s semantics have changed.
Namely, where are we setting pendingScript&apos;s cachedScript now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224493</commentid>
    <comment_count>4</comment_count>
      <attachid>287364</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-29 20:10:22 -0700</bug_when>
    <thetext>Comment on attachment 287364
Patch

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

Thank you for your review! I&apos;ll add the clarifications to the ChangeLog&apos;s each function lines.

&gt;&gt; Source/WebCore/ChangeLog:22
&gt;&gt; +        this PendingScript.
&gt; 
&gt; I&apos;m not sure what you mean by &quot;we plan to abstract&quot;.
&gt; Do you mean that this observability is necessary to add the support for ES6 modules?

I would like to make this PendingScript the container of &lt;ScriptModuleGraph|CachedScript&gt;.
And instead of touching CachedScript in PendingScript directly, I would like to perform operations onto this PendingScript to hide the details of ScriptModuleGraph &amp; CachedScript differences.

&gt;&gt; Source/WebCore/dom/PendingScript.cpp:71
&gt;&gt; +void PendingScript::propagateFinished()
&gt; 
&gt; I&apos;d call this notifyClientFinished to match the naming convention elsewhere.

Thanks, fixed.

&gt;&gt; Source/WebCore/dom/PendingScript.cpp:92
&gt;&gt; +    m_client = client;
&gt; 
&gt; We should assert that m_client is not already set here.

OK, inserted.

&gt;&gt; Source/WebCore/dom/PendingScript.cpp:99
&gt;&gt; +    m_client = nullptr;
&gt; 
&gt; We should assert that the client matches m_client here.

Fixed.

&gt;&gt; Source/WebCore/dom/PendingScript.h:49
&gt;&gt; +    static Ref&lt;PendingScript&gt; create(Element&amp;, CachedScript*);
&gt; 
&gt; Can we make this CachedScript&amp;?

We can do so. Fixed.

&gt;&gt; Source/WebCore/dom/PendingScript.h:65
&gt;&gt; +    }
&gt; 
&gt; Nit: we should just write this in a single line: bool needsLoading() const { return cachedScript(); }

Fixed.

&gt;&gt; Source/WebCore/dom/PendingScript.h:73
&gt;&gt; +
&gt; 
&gt; It&apos;s misleading to call these functions addClient and removeClient since there could be at most one client.
&gt; Maybe setClient and clearClient?

Right! We should do that. Fixed.

&gt;&gt; Source/WebCore/dom/PendingScriptClient.h:36
&gt;&gt; +    virtual void notifyFinished(PendingScript&amp;) { }
&gt; 
&gt; Can&apos;t we make this a pure virtual function?

Yeah, currently, all the derived class implements it. Made it pure virtual function.

&gt;&gt; Source/WebCore/dom/ScriptRunner.cpp:112
&gt;&gt; +    for (size_t i = 0, length = scripts.size(); i &lt; length; ++i) {
&gt; 
&gt; Use modern for loop: for (auto&amp; currentScript: scripts).

Changed to use modern for loop. And apply the std::exchange onto the reference to deref early (in per-iteration, we deref the each script.).

&gt;&gt; Source/WebCore/dom/ScriptRunner.cpp:116
&gt;&gt; +        // The code is changed. Now if m_pendingAsyncScripts.take cannot find the target, it fills nullptr instead of empty PendingScript.
&gt; 
&gt; &quot;The code is changed&quot; is not a useful comment once this patch is landed.
&gt; I don&apos;t understand what you mean by &quot;if m_pendingAsyncScripts.take cannot find the target, it fills nullptr instead of empty PendingScript&quot;
&gt; Could you clarify?

As the bug https://bugs.webkit.org/show_bug.cgi?id=144050 describes, we don&apos;t know the reason why this element becomes nullptr...
Before this change, we see this `element` becomes nullptr.
This is considered because the m_pendingAsyncScripts.take may fail to find the entry.
Before this patch, m_pendingAsyncScripts.take returns PendingScript() when it fails. And PendingScript().element is nullptr.

After this patch, m_pendingAsyncScripts.take returns RefPtr&lt;PendingScript&gt;() when it fails, this should be nullptr.
So if the assumption done in the bug is correct, instead of checking `!element`, now we should check `!script`.

Maybe, the original description, `// Paper over https://bugs.webkit.org/show_bug.cgi?id=144050` is enough.
I&apos;ll drop this comment.

&gt;&gt; Source/WebCore/dom/ScriptRunner.h:61
&gt;&gt; +    HashMap&lt;ScriptElement*, RefPtr&lt;PendingScript&gt;&gt; m_pendingAsyncScripts;
&gt; 
&gt; I think we can use Ref&lt;PendingScript&gt; for HashMap.

Wow, MappedTakeType is great. Fixed.

&gt;&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:-156
&gt;&gt; -    pendingScript.setWatchingForLoad(true);
&gt; 
&gt; It&apos;s not clear to me why we can remove the call to setWatchingForLoad.
&gt; Could you clarify this in the change log entry?

Since we use addClient for pendingScript.cachedScript() directly in the m_host.watchForLoad, we don&apos;t have a way to query whether the pending script is watched.
So, in the old implementation, we have the m_watchingForLoad : bool flag in PendingScript.
And here, we change it to true. That&apos;s the implementation of `pendingScript.setWatchingForLoad(true)`.

But now, we don&apos;t use CachedScript&apos;s addClient directly. Instead, we have the PendingScriptClient and setClient / clearClient.
So what this flag manages is now replaced by `m_client != nullptr`. So we don&apos;t need this `pendingScript.setWatchingForLoad(true);` call.
See the implementation of PendingScript::watchingForLoad().

&gt;&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:-163
&gt;&gt; -    pendingScript.setWatchingForLoad(false);
&gt; 
&gt; Ditto.

I&apos;ve just noted the reason. And I added this clarification to the ChangeLog.

&gt;&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:-273
&gt;&gt; -    return true;
&gt; 
&gt; Again, it would be useful to have a per-function change log entry explaining
&gt; how this function&apos;s semantics have changed.
&gt; Namely, where are we setting pendingScript&apos;s cachedScript now?

PendingScript&apos;s cachedScript is initialized in the constructor. So we dropped the setters like `pendingScript.setCachedScript`.
`PendingScript::create(*script, cachedScript)` in the below is the example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224627</commentid>
    <comment_count>5</comment_count>
      <attachid>287411</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-30 11:14:00 -0700</bug_when>
    <thetext>Created attachment 287411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224713</commentid>
    <comment_count>6</comment_count>
      <attachid>287411</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-30 14:38:17 -0700</bug_when>
    <thetext>Comment on attachment 287411
Patch

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

Add some notes.

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:270
&gt; +    return nullptr;

I doubt this `!cachedScript` case is effective...
As the original comment said, when the invalid src value is set, cachedScript becomes nullptr.
But in that case, we return early in ScriptElement::prepareScript, and we don&apos;t set m_willBeParserExecuted.
So this requestPendingScript won&apos;t be called at that time.

One case we can consider is the case that cachedScript is correct but already cleared at that time.
But this is also unlikely since m_cachedScript = nullptr is executed when (1) m_willBeParserExecuted is false or (2) ScriptElement is destroyed.
(1) is not related since requestPendingScript is executed for ScriptElement that m_willBeParserExecuted is true. And (2) should not be done since we hold the element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224725</commentid>
    <comment_count>7</comment_count>
      <attachid>287411</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-30 14:55:40 -0700</bug_when>
    <thetext>Comment on attachment 287411
Patch

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

&gt;&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:270
&gt;&gt; +    return nullptr;
&gt; 
&gt; I doubt this `!cachedScript` case is effective...
&gt; As the original comment said, when the invalid src value is set, cachedScript becomes nullptr.
&gt; But in that case, we return early in ScriptElement::prepareScript, and we don&apos;t set m_willBeParserExecuted.
&gt; So this requestPendingScript won&apos;t be called at that time.
&gt; 
&gt; One case we can consider is the case that cachedScript is correct but already cleared at that time.
&gt; But this is also unlikely since m_cachedScript = nullptr is executed when (1) m_willBeParserExecuted is false or (2) ScriptElement is destroyed.
&gt; (1) is not related since requestPendingScript is executed for ScriptElement that m_willBeParserExecuted is true. And (2) should not be done since we hold the element.

Another case we can consider is the case that this script element has inlined code and does not have the src attribute.
But this is also unlikely since there is no path to reach here.

This requestPendingScript is called from requestDeferredScript and requestParsingBlockingScript.
requestDeferredScript() is never called for the inlined script since it is only called when m_willExecuteWhenDocumentFinishedParsing = true and it is not set for the inlined script.
And requestParsingBlockingScript() is also never called for the inlined script reaching here (m_willBeParserExecuted = true case) is always  `m_readyToBeParserExecuted = true`, and in that case, requestParsingBlockingScript is never called.


I&apos;ll drop this case and insert assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224765</commentid>
    <comment_count>8</comment_count>
      <attachid>287411</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-30 16:13:32 -0700</bug_when>
    <thetext>Comment on attachment 287411
Patch

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

&gt; Source/WebCore/ChangeLog:31
&gt; +        (WebCore::PendingScript::isLoaded): When introducing ScriptModuleGraph, this will query to either CachedScript or ScriptModuleGraph. PendingScript will become the container for the both types.

This is a really long line. Can we wrap the line earlier?

&gt; Source/WebCore/ChangeLog:45
&gt; +        (WebCore::ScriptRunner::timerFired): We use `std::exchange` to retrieve the RefPtr&lt;PendingScript&gt; and make the original vector element nullptr. Without this, all the PendingScript is held until the iteration finishes.

Ditto about the long line.

&gt; Source/WebCore/dom/PendingScript.cpp:53
&gt; +Ref&lt;PendingScript&gt; PendingScript::create(Element&amp; element, CachedScript&amp; cachedScript)

We usually put the ::create function before the constructor for clarity.

&gt; Source/WebCore/dom/PendingScript.cpp:60
&gt; +Ref&lt;PendingScript&gt; PendingScript::create(Element&amp; element, TextPosition scriptStartPosition)

Ditto.

&gt; Source/WebCore/dom/PendingScript.cpp:86
&gt; +    if (m_cachedScript)
&gt; +        return m_cachedScript-&gt;isLoaded();
&gt; +    return false;

It seems cleaner to do: return m_cachedScript &amp;&amp; m_cachedScript-&gt;isLoaded() instead.

&gt; Source/WebCore/dom/PendingScript.h:47
&gt; +WTF_MAKE_NONCOPYABLE(PendingScript);
&gt; +WTF_MAKE_FAST_ALLOCATED;

RefCounted puts both WTF_MAKE_NONCOPYABLE and WTF_MAKE_FAST_ALLOCATED so there&apos;s no need to do that here.

&gt; Source/WebCore/dom/ScriptRunner.cpp:114
&gt; +    for (auto&amp; currentScript : scripts) {
&gt; +        RefPtr&lt;PendingScript&gt; script = std::exchange(currentScript, nullptr);
&gt; +        ASSERT(script);

Why do we need a local variable here?  Vector keeps script alive, right?

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:62
&gt; +        if (m_parserBlockingScript-&gt;needsLoading() &amp;&amp; m_parserBlockingScript-&gt;watchingForLoad())

It looks like we&apos;re always checking needsLoading and watchingForLoad together.
Why don&apos;t we add a helper function to check both?
In fact, maybe watchingForLoad should be checking both.

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:67
&gt; +        RefPtr&lt;PendingScript&gt; pendingScript = m_scriptsToExecuteAfterParsing.takeFirst();

We can just use auto here.

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:240
&gt; +    if (!(m_parserBlockingScript = requestPendingScript(element)))

I think it&apos;s cleaner to do the assignment in a line before if.

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:255
&gt; +    RefPtr&lt;PendingScript&gt; pendingScript;
&gt; +    if (!(pendingScript = requestPendingScript(element)))

We can use auto. It&apos;s probably cleaner to do the assignment when you declare pendingScript and do: if (!pendingScript).

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:262
&gt; -bool HTMLScriptRunner::requestPendingScript(PendingScript&amp; pendingScript, Element* script) const
&gt; +RefPtr&lt;PendingScript&gt; HTMLScriptRunner::requestPendingScript(Element* script) const

It looks like this function can now be a static local function instead of a member function.

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:309
&gt; +                m_parserBlockingScript = PendingScript::create(*script, scriptStartPosition);

Nice! Looks a lot cleaner.  Can we also modify the line below so that both of them are one line statements to get rid of curly braces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224770</commentid>
    <comment_count>9</comment_count>
      <attachid>287447</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-30 16:17:29 -0700</bug_when>
    <thetext>Created attachment 287447
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224772</commentid>
    <comment_count>10</comment_count>
      <attachid>287447</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-30 16:18:54 -0700</bug_when>
    <thetext>Comment on attachment 287447
Patch

Oops, I uploaded the patch before finding Ryosuke&apos;s second comment. I&apos;ll reflect it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224806</commentid>
    <comment_count>11</comment_count>
      <attachid>287464</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-30 17:26:16 -0700</bug_when>
    <thetext>Created attachment 287464
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224824</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-30 18:38:05 -0700</bug_when>
    <thetext>rebasing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224826</commentid>
    <comment_count>13</comment_count>
      <attachid>287470</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-30 18:42:48 -0700</bug_when>
    <thetext>Created attachment 287470
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224831</commentid>
    <comment_count>14</comment_count>
      <attachid>287470</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-08-30 18:53:05 -0700</bug_when>
    <thetext>Comment on attachment 287470
Patch

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

&gt; Source/WebCore/dom/ScriptRunner.cpp:89
&gt; +        m_scriptsToExecuteSoon.append(&amp;m_pendingAsyncScripts.take(scriptElement)-&gt;get());

Ref::ptr().

&gt; Source/WebCore/dom/ScriptRunner.cpp:113
&gt; +        auto script = std::exchange(currentScript, nullptr);

Nit: Why don&apos;t we use WTFMove(currentScript) instead?

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:124
&gt; -    executePendingScriptAndDispatchEvent(m_parserBlockingScript);
&gt; +    RefPtr&lt;PendingScript&gt; protector = std::exchange(m_parserBlockingScript, nullptr);
&gt; +    executePendingScriptAndDispatchEvent(*protector);

Can we make executePendingScriptAndDispatchEvent take RefPtr&lt;&gt;&amp;&amp; so that we can just do:
executePendingScriptAndDispatchEvent(WTFMove(m_parserBlockingScript));

&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:242
&gt; +    auto* scriptElement = toScriptElementIfPossible(script);
&gt; +    ASSERT(scriptElement-&gt;willBeParserExecuted());
&gt; +    auto* cachedScript = scriptElement-&gt;cachedScript().get();
&gt; +    ASSERT(cachedScript);

You should have used reference instead but it&apos;s fine either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224838</commentid>
    <comment_count>15</comment_count>
      <attachid>287470</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-30 19:38:03 -0700</bug_when>
    <thetext>Comment on attachment 287470
Patch

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

Thanks!

&gt;&gt; Source/WebCore/dom/ScriptRunner.cpp:89
&gt;&gt; +        m_scriptsToExecuteSoon.append(&amp;m_pendingAsyncScripts.take(scriptElement)-&gt;get());
&gt; 
&gt; Ref::ptr().

Fixed.

&gt;&gt; Source/WebCore/dom/ScriptRunner.cpp:113
&gt;&gt; +        auto script = std::exchange(currentScript, nullptr);
&gt; 
&gt; Nit: Why don&apos;t we use WTFMove(currentScript) instead?

Looks better. Fixed.

&gt;&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:124
&gt;&gt; +    executePendingScriptAndDispatchEvent(*protector);
&gt; 
&gt; Can we make executePendingScriptAndDispatchEvent take RefPtr&lt;&gt;&amp;&amp; so that we can just do:
&gt; executePendingScriptAndDispatchEvent(WTFMove(m_parserBlockingScript));

Looks nice. Fixed.
To invoke the move constructor, I&apos;ve changed the executePendingScriptAndDispatchEvent signature to executePendingScriptAndDispatchEvent(RefPtr&lt;PendingScript&gt;) and use WTFMove to move value from here.

&gt;&gt; Source/WebCore/html/parser/HTMLScriptRunner.cpp:242
&gt;&gt; +    ASSERT(cachedScript);
&gt; 
&gt; You should have used reference instead but it&apos;s fine either way.

OK, I&apos;ll use auto&amp; scriptElement. And for cachedScript, we insert the assertion `assert(scriptElement.cachedScript())` and use `*scriptElement.cachedScript()` directly in PendingScript::create.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224839</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-08-30 19:39:06 -0700</bug_when>
    <thetext>Committed r205218: &lt;http://trac.webkit.org/changeset/205218&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287356</attachid>
            <date>2016-08-29 17:18:47 -0700</date>
            <delta_ts>2016-08-29 18:19:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161350-20160829171638.patch</filename>
            <type>text/plain</type>
            <size>38081</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1MTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNjYTcyZTNhNzFjOGFl
NWRlN2QxZGQ3MjVjZjRiOWE0ODlhNzFjMy4uNWUyYzU2YzZhYmRkN2EwZGZiNjJkNmNmNjg5NzFi
MzNlZmJhMjNlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE2LTA4LTI5ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIE1ha2UgUGVuZGlu
Z1NjcmlwdCBhcyByZWYtY291bnRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxMzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB3aGlsZSBQZW5kaW5nU2NyaXB0IGlzIGNvcHlhYmxl
LCBQZW5kaW5nU2NyaXB0IGlzIGFsc28gQ2FjaGVkUmVzb3VyY2VDbGllbnQuCisgICAgICAgIFNv
IHdoZW4gY29weWluZyB0aGlzLCB0aGUgY2xpZW50IHJlZ2lzdHJhdGlvbiBpcyBjb3JyZWN0bHkg
ZG9uZSBpbiBQZW5kaW5nU2NyaXB0J3Mgb3BlcmF0b3I9IGV0Yy4KKyAgICAgICAgSG93ZXZlciwg
dGhpcyBjb3B5aW5nIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGVmZmVjdGl2ZWx5IHVzZWQuCisgICAg
ICAgIEluIHRoaXMgcGF0Y2gsIHdlIGNoYW5nZSB0aGlzIFBlbmRpbmdTY3JpcHQgdG8gcmVmLWNv
dW50ZWQgY2xhc3MgYW5kIG1ha2UgaXQgbm9uY29weWFibGUuCisgICAgICAgIFRoaXMgY2hhbmdl
IG1ha2VzIHRoaW5ncyBzaW1wbGUsIGFuZCBkcm9wIHVubmVjZXNzYXJ5IGFkZENsaWVudCAvIHJl
bW92ZUNsaWVudCBjYWxscy4KKyAgICAgICAgQW5kIHdlIGFsc28gc2ltcGxpZnkgUGVuZGluZ1Nj
cmlwdCBjbGFzcy4gU2luY2Ugd2UgY2FuIG9mZmVyIGFsbCB0aGUgbWVtYmVycyBhdCB0aGUgY29u
c3RydWN0aW9uCisgICAgICAgIHRpbWUsIHdlIGRvbid0IG5lZWQgYW55IHNldHRlcnMuCisKKyAg
ICAgICAgRnVydGhlcm1vcmUsIGJ5IGNoYW5naW5nIFBlbmRpbmdTY3JpcHQgbm9uY29weWFibGUg
JiByZWYtY291bnRlZCwgd2UgZWFzaWx5IG1ha2UgaXQgb2JzZXJ2YWJsZS4KKyAgICAgICAgSW4g
dGhpcyBwYXRjaCwgd2UgYWxzbyBhZGQgUGVuZGluZ1NjcmlwdENsaWVudCB0byByZWNlaXZlIHRo
ZSBub3RpZmljYXRpb24gZnJvbSBQZW5kaW5nU2NyaXB0LgorICAgICAgICBQcmV2aW91c2x5LCB3
ZSBkaXJlY3RseSB1c2VkIENhY2hlZFNjcmlwdCBpbiBQZW5kaW5nU2NyaXB0IHRvIHJlY2VpdmUg
dGhlIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgQW5kIHdlIG1hbmFnZSB0aGUgd2F0Y2hpbmcgc3Rh
dHVzIGJ5IHVzaW5nIG1fd2F0Y2hpbmdGb3JMb2FkIGZsYWcuIFRoaXMgbmV3IFBlbmRpbmdTY3Jp
cHRDbGllbnQKKyAgICAgICAgc2ltcGxpZnkgaXQsIGFuZCBpdCBnaXZlcyB1cyB0aGUgY2hhbmNl
IHRvIHdyYXAgJiBoaWRlIHRoZSBkZXRhaWxzIG9mIENhY2hlZFNjcmlwdC4KKyAgICAgICAgTGF0
ZXIsIHdlIHBsYW4gdG8gYWJzdHJhY3QgU2NyaXB0TW9kdWxlR3JhcGggKHVzZWQgZm9yIEVTNiBt
b2R1bGVzKSBhbmQgQ2FjaGVkU2NyaXB0IGJ5IHVzaW5nCisgICAgICAgIHRoaXMgUGVuZGluZ1Nj
cmlwdC4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlbmRpbmdTY3JpcHQ6OnByb3BhZ2F0ZUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBlbmRpbmdTY3JpcHQ6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRp
bmdTY3JpcHQ6OmlzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmFk
ZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpyZW1vdmVDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6cmVsZWFzZUVsZW1lbnRBbmRDbGVh
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpzZXRDYWNoZWRT
Y3JpcHQpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0Lmg6CisgICAgICAg
ICogZG9tL1BlbmRpbmdTY3JpcHRDbGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lckhvc3QuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBl
bmRpbmdTY3JpcHRDbGllbnQ6On5QZW5kaW5nU2NyaXB0Q2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBlbmRpbmdTY3JpcHRDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBkb20v
U2NyaXB0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFJ1bm5lcjo6cXVldWVT
Y3JpcHRGb3JFeGVjdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UnVubmVyOjp0aW1l
ckZpcmVkKToKKyAgICAgICAgKiBkb20vU2NyaXB0UnVubmVyLmg6CisgICAgICAgICogaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1
bWVudFBhcnNlcjo6d2F0Y2hGb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVu
dFBhcnNlcjo6c3RvcFdhdGNoaW5nRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9j
dW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
RG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6On5IVE1MU2NyaXB0UnVu
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnNvdXJjZUZyb21QZW5k
aW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmlzUGVuZGlu
Z1NjcmlwdFJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1
dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1
bm5lcjo6ZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OndhdGNoRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0UnVubmVyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTY3JpcHRSdW5uZXI6Omhhc1BhcnNlckJsb2NraW5nU2NyaXB0KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRzV2Fp
dGluZ0ZvckxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0
ZVNjcmlwdHNXYWl0aW5nRm9yUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0
UnVubmVyOjpyZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3REZWZlcnJlZFNjcmlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQpOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0
UnVubmVySG9zdC5oOgorCiAyMDE2LTA4LTI5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgV2Ugc2hvdWxkIHRocm93IGEgU2VjdXJpdHlFcnJvciB3aGVuIGRlbnlp
bmcgc2V0dGluZyBhIGNyb3NzLW9yaWdpbiBXaW5kb3cgcHJvcGVydHkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjNTE1NGRjYWNm
NTUzOGQzM2RjNmNiYjhmN2ZiZDIxOTBlNmEwYmQwLi5lODgwYjE3ZTg1OTIxMTYzYzdhZjg0ZTQw
MDU4NmYwODI4YWViNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MDg2LDYgKzYwODYsNyBAQAogCQlFMUZGOEY2RDE4MERC
NUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRkY4RjZCMTgwREI1QkUwMDEzMjY3NCAv
KiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oICovOyB9OwogCQlFMzg4Mzg5ODFCQUQxNDVGMDBE
NjJFRTMgLyogSlNNb2R1bGVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM4ODM4OTQxQkFEMTQ1RjAwRDYyRUUzIC8qIEpTTW9kdWxlTG9h
ZGVyLmNwcCAqLzsgfTsKIAkJRTM4ODM4OTkxQkFEMTQ1RjAwRDYyRUUzIC8qIEpTTW9kdWxlTG9h
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzg4
Mzg5NTFCQUQxNDVGMDBENjJFRTMgLyogSlNNb2R1bGVMb2FkZXIuaCAqLzsgfTsKKwkJRTNGQTM4
NjQxRDcxODEyRDAwQUE1OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRkEzODYxMUQ3MTZFNzYwMEFBNTk1
MCAvKiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggKi87IH07CiAJCUU0MDFDMjc1MTdDRTUzRUMwMEM0
MUEzNSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDAxQzI3NDE3Q0U1M0VDMDBDNDFBMzUgLyogRWxl
bWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUU0MDFFMEE0MUMzQzBCODMwMEYzNEQxMCAvKiBTdHlsZUNoYW5n
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQwMUUw
QTMxQzNDMEI4MzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQwMUUwQTYxQzNDMENGNzAwRjM0RDEwIC8q
IFN0eWxlQ2hhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0MDFFMEE1MUMzQzBDRjcwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5jcHAgKi87IH07
CkBAIC0xMzY0Nyw2ICsxMzY0OCw3IEBACiAJCUUxRkY4RjZCMTgwREI1QkUwMDEzMjY3NCAvKiBD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzg4Mzg5NDFCQUQxNDVGMDBENjJFRTMgLyogSlNNb2R1bGVMb2FkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNb2R1bGVMb2FkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzg4Mzg5NTFCQUQxNDVGMDBENjJFRTMgLyogSlNNb2R1
bGVMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNb2R1bGVMb2Fk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNGQTM4NjExRDcxNkU3NjAwQUE1
OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGVuZGluZ1NjcmlwdENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDAxQzI3NDE3Q0U1M0VDMDBDNDFBMzUgLyogRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50SXRlcmF0b3JBc3NlcnRp
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MDFFMEEzMUMzQzBCODMwMEYz
NEQxMCAvKiBTdHlsZUNoYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHlsZUNoYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDAxRTBBNTFDM0Mw
Q0Y3MDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3R5bGVDaGFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjMwNTYsNiArMjMwNTgsNyBAQAogCQkJCTgzRDI2RDNEMUFGRENDNTAwMDFCMzg3MyAvKiBQ
YXJlbnROb2RlLmlkbCAqLywKIAkJCQk4QTdDQzk2RjEyMDc2RjhBMDAxRDQ1ODggLyogUGVuZGlu
Z1NjcmlwdC5jcHAgKi8sCiAJCQkJOEE3Q0M5NkExMjA3NkQ3MzAwMUQ0NTg4IC8qIFBlbmRpbmdT
Y3JpcHQuaCAqLywKKwkJCQlFM0ZBMzg2MTFENzE2RTc2MDBBQTU5NTAgLyogUGVuZGluZ1Njcmlw
dENsaWVudC5oICovLAogCQkJCTQxQkY3MDBEMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbC5jcHAgKi8sCiAJCQkJNDFCRjcwMEUwRkU4NkY2MTAwNUU4REVDIC8q
IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmggKi8sCiAJCQkJNTE4OUYwREQxMEI0NkIwRTAw
RjNDNzM5IC8qIFBvcFN0YXRlRXZlbnQuY3BwICovLApAQCAtMjcwMzEsNiArMjcwMzQsNyBAQAog
CQkJCTU5QzI4MDQ2MTM4REMyNDEwMDc5QjdFMiAvKiBYTUxFcnJvcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNzcyQzQ3MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODNEMzVBRUMxQzcxODdGQTAwRjcwRDVBIC8qIFhNTEh0dHBSZXF1ZXN0
RXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzRkEzODY0MUQ3MTgxMkQwMEFBNTk1
MCAvKiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGOUYwRUQ3QTBE
QjUwQ0EyMDBEMTZEQjkgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBMTM2QTAwRDExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREZENDhFMEUzMDUyOTAw
MDlEMTBBRCAvKiBYTUxIdHRwUmVxdWVzdFVwbG9hZC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKaW5kZXggNzhmZjNkODZmMTU0OWUyZTE3ODVmMTJlY2Mz
OTI2OTAzMTEyNTg4Ni4uMWVmYTUwNWNkZDZiMzY0OWQwOGViNmNjYzVhZDFkOWQ3NzE2ODhkZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcApAQCAtMjgsMzIgKzI4LDM5IEBACiAK
ICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiUGVuZGluZ1NjcmlwdENsaWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1BlbmRp
bmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQoRWxlbWVudCYgZWxlbWVudCwgVGV4dFBvc2l0aW9uIHN0
YXJ0aW5nUG9zaXRpb24pCisgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fc3RhcnRp
bmdQb3NpdGlvbihzdGFydGluZ1Bvc2l0aW9uKQoreworfQorCitQZW5kaW5nU2NyaXB0OjpQZW5k
aW5nU2NyaXB0KEVsZW1lbnQmIGVsZW1lbnQsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQor
ICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX2NhY2hlZFNjcmlwdChjYWNoZWRTY3Jp
cHQpCit7Cit9CisKIFBlbmRpbmdTY3JpcHQ6On5QZW5kaW5nU2NyaXB0KCkKIHsKICAgICBpZiAo
bV9jYWNoZWRTY3JpcHQpCiAgICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhp
cyk7CiB9CiAKLVJlZlB0cjxFbGVtZW50PiBQZW5kaW5nU2NyaXB0OjpyZWxlYXNlRWxlbWVudEFu
ZENsZWFyKCkKK1JlZjxQZW5kaW5nU2NyaXB0PiBQZW5kaW5nU2NyaXB0OjpjcmVhdGUoRWxlbWVu
dCYgZWxlbWVudCwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCiB7Ci0gICAgc2V0Q2FjaGVk
U2NyaXB0KG51bGxwdHIpOwotICAgIG1fd2F0Y2hpbmdGb3JMb2FkID0gZmFsc2U7Ci0gICAgbV9z
dGFydGluZ1Bvc2l0aW9uID0gVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKLSAg
ICByZXR1cm4gV1RGTW92ZShtX2VsZW1lbnQpOworICAgIFJlZjxQZW5kaW5nU2NyaXB0PiBwZW5k
aW5nU2NyaXB0ID0gYWRvcHRSZWYoKm5ldyBQZW5kaW5nU2NyaXB0KGVsZW1lbnQsIGNhY2hlZFNj
cmlwdCkpOworICAgIGlmIChjYWNoZWRTY3JpcHQpCisgICAgICAgIGNhY2hlZFNjcmlwdC0+YWRk
Q2xpZW50KCZwZW5kaW5nU2NyaXB0LmdldCgpKTsKKyAgICByZXR1cm4gcGVuZGluZ1NjcmlwdDsK
IH0KIAotdm9pZCBQZW5kaW5nU2NyaXB0OjpzZXRDYWNoZWRTY3JpcHQoQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQpCitSZWY8UGVuZGluZ1NjcmlwdD4gUGVuZGluZ1NjcmlwdDo6Y3JlYXRlKEVs
ZW1lbnQmIGVsZW1lbnQsIFRleHRQb3NpdGlvbiBzY3JpcHRTdGFydFBvc2l0aW9uKQogewotICAg
IGlmIChtX2NhY2hlZFNjcmlwdCA9PSBjYWNoZWRTY3JpcHQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAobV9jYWNoZWRTY3JpcHQpCi0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGll
bnQodGhpcyk7Ci0gICAgbV9jYWNoZWRTY3JpcHQgPSBjYWNoZWRTY3JpcHQ7Ci0gICAgaWYgKG1f
Y2FjaGVkU2NyaXB0KQotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBlbmRpbmdTY3JpcHQoZWxlbWVudCwgc2NyaXB0U3Rh
cnRQb3NpdGlvbikpOwogfQogCiBDYWNoZWRTY3JpcHQqIFBlbmRpbmdTY3JpcHQ6OmNhY2hlZFNj
cmlwdCgpIGNvbnN0CkBAIC02MSw4ICs2OCwzNSBAQCBDYWNoZWRTY3JpcHQqIFBlbmRpbmdTY3Jp
cHQ6OmNhY2hlZFNjcmlwdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LmdldCgp
OwogfQogCit2b2lkIFBlbmRpbmdTY3JpcHQ6OnByb3BhZ2F0ZUZpbmlzaGVkKCkKK3sKKyAgICBS
ZWY8UGVuZGluZ1NjcmlwdD4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+bm90aWZ5RmluaXNoZWQoKnRoaXMpOworfQorCiB2b2lkIFBl
bmRpbmdTY3JpcHQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKikKIHsKKyAgICBwcm9w
YWdhdGVGaW5pc2hlZCgpOworfQorCitib29sIFBlbmRpbmdTY3JpcHQ6OmlzTG9hZGVkKCkgY29u
c3QKK3sKKyAgICBpZiAobV9jYWNoZWRTY3JpcHQpCisgICAgICAgIHJldHVybiBtX2NhY2hlZFNj
cmlwdC0+aXNMb2FkZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGVuZGluZ1Nj
cmlwdDo6YWRkQ2xpZW50KFBlbmRpbmdTY3JpcHRDbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX2Ns
aWVudCA9IGNsaWVudDsKKyAgICBpZiAoaXNMb2FkZWQoKSkKKyAgICAgICAgcHJvcGFnYXRlRmlu
aXNoZWQoKTsKK30KKwordm9pZCBQZW5kaW5nU2NyaXB0OjpyZW1vdmVDbGllbnQoUGVuZGluZ1Nj
cmlwdENsaWVudCopCit7CisgICAgbV9jbGllbnQgPSBudWxscHRyOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1BlbmRpbmdTY3JpcHQuaAppbmRleCA2ZjRhZmUzNWUyNzAwMjU0NjM2MTk1NzBiYzFlYTdj
MWNiNDdmNDJhLi4wOWU3YzkwMzEwZDVhZTA0MThhYzgzMDcxMmU0M2UxYzc5MjVmZjljIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKQEAgLTIzLDg1ICsyMyw2NCBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQZW5kaW5nU2NyaXB0X2gKLSNkZWZpbmUgUGVuZGluZ1Nj
cmlwdF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9z
aXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIFBlbmRpbmdTY3Jp
cHRDbGllbnQ7CiAKIC8vIEEgY29udGFpbmVyIGZvciBhbiBleHRlcm5hbCBzY3JpcHQgd2hpY2gg
bWF5IGJlIGxvYWRlZCBhbmQgZXhlY3V0ZWQuCiAvLwogLy8gQSBDYWNoZWRSZXNvdXJjZUhhbmRs
ZSBhbG9uZSBkb2VzIG5vdCBwcmV2ZW50IHRoZSB1bmRlcmx5aW5nIENhY2hlZFJlc291cmNlCiAv
LyBmcm9tIHB1cmdpbmcgaXRzIGRhdGEgYnVmZmVyLiBUaGlzIGNsYXNzIGhvbGRzIGEgZHVtbXkg
Y2xpZW50IG9wZW4gZm9yIGl0cwogLy8gbGlmZXRpbWUgaW4gb3JkZXIgdG8gZ3VhcmFudGVlIHRo
YXQgdGhlIGRhdGEgYnVmZmVyIHdpbGwgbm90IGJlIHB1cmdlZC4KLWNsYXNzIFBlbmRpbmdTY3Jp
cHQgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgUGVuZGluZ1Nj
cmlwdCBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdTY3JpcHQ+LCBwdWJsaWMgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgeworV1RGX01BS0VfTk9OQ09QWUFCTEUoUGVuZGluZ1NjcmlwdCk7
CitXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBQZW5kaW5nU2NyaXB0KCkK
LSAgICAgICAgOiBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKLSAgICAgICAgLCBtX3N0YXJ0aW5n
UG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKLSAgICB7Ci0gICAg
fQotCi0gICAgUGVuZGluZ1NjcmlwdChFbGVtZW50KiBlbGVtZW50LCBDYWNoZWRTY3JpcHQqIGNh
Y2hlZFNjcmlwdCkKLSAgICAgICAgOiBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKLSAgICAgICAg
LCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHNldENhY2hlZFNjcmlwdChjYWNo
ZWRTY3JpcHQpOwotICAgIH0KLQotICAgIFBlbmRpbmdTY3JpcHQoY29uc3QgUGVuZGluZ1Njcmlw
dCYgb3RoZXIpCi0gICAgICAgIDogQ2FjaGVkUmVzb3VyY2VDbGllbnQob3RoZXIpCi0gICAgICAg
ICwgbV93YXRjaGluZ0ZvckxvYWQob3RoZXIubV93YXRjaGluZ0ZvckxvYWQpCi0gICAgICAgICwg
bV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKLSAgICAgICAgLCBtX3N0YXJ0aW5nUG9zaXRpb24o
b3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uKQotICAgIHsKLSAgICAgICAgc2V0Q2FjaGVkU2NyaXB0
KG90aGVyLmNhY2hlZFNjcmlwdCgpKTsKLSAgICB9CisgICAgc3RhdGljIFJlZjxQZW5kaW5nU2Ny
aXB0PiBjcmVhdGUoRWxlbWVudCYsIENhY2hlZFNjcmlwdCopOworICAgIHN0YXRpYyBSZWY8UGVu
ZGluZ1NjcmlwdD4gY3JlYXRlKEVsZW1lbnQmLCBUZXh0UG9zaXRpb24gc2NyaXB0U3RhcnRQb3Np
dGlvbik7CiAKICAgICB2aXJ0dWFsIH5QZW5kaW5nU2NyaXB0KCk7CiAKLSAgICBQZW5kaW5nU2Ny
aXB0JiBvcGVyYXRvcj0oY29uc3QgUGVuZGluZ1NjcmlwdCYgb3RoZXIpCi0gICAgewotICAgICAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICAg
ICAgbV93YXRjaGluZ0ZvckxvYWQgPSBvdGhlci5tX3dhdGNoaW5nRm9yTG9hZDsKLSAgICAgICAg
bV9lbGVtZW50ID0gb3RoZXIubV9lbGVtZW50OwotICAgICAgICBtX3N0YXJ0aW5nUG9zaXRpb24g
PSBvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb247Ci0gICAgICAgIHNldENhY2hlZFNjcmlwdChvdGhl
ci5jYWNoZWRTY3JpcHQoKSk7Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQogICAg
IFRleHRQb3NpdGlvbiBzdGFydGluZ1Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydGlu
Z1Bvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTdGFydGluZ1Bvc2l0aW9uKGNvbnN0IFRleHRQb3Np
dGlvbiYgcG9zaXRpb24pIHsgbV9zdGFydGluZ1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotICAg
IGJvb2wgd2F0Y2hpbmdGb3JMb2FkKCkgY29uc3QgeyByZXR1cm4gbV93YXRjaGluZ0ZvckxvYWQ7
IH0KLSAgICB2b2lkIHNldFdhdGNoaW5nRm9yTG9hZChib29sIGIpIHsgbV93YXRjaGluZ0Zvckxv
YWQgPSBiOyB9CisgICAgYm9vbCB3YXRjaGluZ0ZvckxvYWQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudDsgfQogCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVu
dC5nZXQoKTsgfQotICAgIHZvaWQgc2V0RWxlbWVudChFbGVtZW50KiBlbGVtZW50KSB7IG1fZWxl
bWVudCA9IGVsZW1lbnQ7IH0KLSAgICBSZWZQdHI8RWxlbWVudD4gcmVsZWFzZUVsZW1lbnRBbmRD
bGVhcigpOworICAgIEVsZW1lbnQmIGVsZW1lbnQoKSB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7
IH0KIAogICAgIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRDYWNoZWRTY3JpcHQoQ2FjaGVkU2NyaXB0Kik7CisgICAgYm9vbCBuZWVkc0xvYWRpbmcoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhY2hlZFNjcmlwdCgpOworICAgIH0KKworICAg
IGJvb2wgaXNMb2FkZWQoKSBjb25zdDsKIAogICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVk
UmVzb3VyY2UqKSBvdmVycmlkZTsKIAorICAgIHZvaWQgYWRkQ2xpZW50KFBlbmRpbmdTY3JpcHRD
bGllbnQqKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChQZW5kaW5nU2NyaXB0Q2xpZW50Kik7CisK
IHByaXZhdGU6Ci0gICAgYm9vbCBtX3dhdGNoaW5nRm9yTG9hZDsKLSAgICBSZWZQdHI8RWxlbWVu
dD4gbV9lbGVtZW50OworICAgIFBlbmRpbmdTY3JpcHQoRWxlbWVudCYsIENhY2hlZFNjcmlwdCop
OworICAgIFBlbmRpbmdTY3JpcHQoRWxlbWVudCYsIFRleHRQb3NpdGlvbiBzdGFydGluZ1Bvc2l0
aW9uKTsKKworICAgIHZvaWQgcHJvcGFnYXRlRmluaXNoZWQoKTsKKworICAgIFJlZjxFbGVtZW50
PiBtX2VsZW1lbnQ7CiAgICAgVGV4dFBvc2l0aW9uIG1fc3RhcnRpbmdQb3NpdGlvbjsgLy8gT25s
eSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsgCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKKyAgICBQZW5kaW5nU2NyaXB0Q2xpZW50KiBt
X2NsaWVudCB7IG51bGxwdHIgfTsKIH07CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L1BlbmRpbmdTY3JpcHRDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZjQyNGY3M2ZmODk2YmM1YzM4N2Q5
YmNiODAyYjJlYmEyNTI5NzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1BlbmRpbmdTY3JpcHRDbGllbnQuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFBlbmRpbmdTY3JpcHQ7CisKK2NsYXNzIFBlbmRpbmdTY3JpcHRD
bGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflBlbmRpbmdTY3JpcHRDbGllbnQoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChQZW5kaW5nU2NyaXB0JikgeyB9Cit9
OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCmluZGV4IGQyNjA1YmRkYjdiNWI2
MmI5MTQ1MzhlZjYyNjJhY2I3YjNkNTAwMmUuLmRhYTA2M2IzMzM5Njc5MTQ0MTRiOTJmMmY0Njhh
MzEwMzM4NmIyOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCkBAIC02MSwxMSAr
NjEsMTEgQEAgdm9pZCBTY3JpcHRSdW5uZXI6OnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKFNjcmlw
dEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIENhY2hlZFIKIAogICAgIHN3aXRjaCAoZXhlY3V0aW9u
VHlwZSkgewogICAgIGNhc2UgQVNZTkNfRVhFQ1VUSU9OOgotICAgICAgICBtX3BlbmRpbmdBc3lu
Y1NjcmlwdHMuYWRkKHNjcmlwdEVsZW1lbnQsIFBlbmRpbmdTY3JpcHQoJmVsZW1lbnQsIGNhY2hl
ZFNjcmlwdC5nZXQoKSkpOworICAgICAgICBtX3BlbmRpbmdBc3luY1NjcmlwdHMuYWRkKHNjcmlw
dEVsZW1lbnQsIFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZShlbGVtZW50LCBjYWNoZWRTY3JpcHQuZ2V0
KCkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElOX09SREVSX0VYRUNVVElPTjoKLSAg
ICAgICAgbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlci5hcHBlbmQoUGVuZGluZ1NjcmlwdCgmZWxl
bWVudCwgY2FjaGVkU2NyaXB0LmdldCgpKSk7CisgICAgICAgIG1fc2NyaXB0c1RvRXhlY3V0ZUlu
T3JkZXIuYXBwZW5kKFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZShlbGVtZW50LCBjYWNoZWRTY3JpcHQu
Z2V0KCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMTAwLDIzICsxMDAsMjUgQEAg
dm9pZCBTY3JpcHRSdW5uZXI6OnRpbWVyRmlyZWQoKQogewogICAgIFJlZjxEb2N1bWVudD4gcHJv
dGVjdChtX2RvY3VtZW50KTsKIAotICAgIFZlY3RvcjxQZW5kaW5nU2NyaXB0PiBzY3JpcHRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8UGVuZGluZ1NjcmlwdD4+IHNjcmlwdHM7CiAgICAgc2NyaXB0cy5z
d2FwKG1fc2NyaXB0c1RvRXhlY3V0ZVNvb24pOwogCiAgICAgc2l6ZV90IG51bUluT3JkZXJTY3Jp
cHRzVG9FeGVjdXRlID0gMDsKLSAgICBmb3IgKDsgbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGUg
PCBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLnNpemUoKSAmJiBtX3NjcmlwdHNUb0V4ZWN1dGVJ
bk9yZGVyW251bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlXS5jYWNoZWRTY3JpcHQoKS0+aXNMb2Fk
ZWQoKTsgKytudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZSkKKyAgICBmb3IgKDsgbnVtSW5PcmRl
clNjcmlwdHNUb0V4ZWN1dGUgPCBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLnNpemUoKSAmJiBt
X3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyW251bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlXS0+aXNM
b2FkZWQoKTsgKytudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZSkKICAgICAgICAgc2NyaXB0cy5h
cHBlbmQobV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlcltudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0
ZV0pOwogICAgIGlmIChudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZSkKICAgICAgICAgbV9zY3Jp
cHRzVG9FeGVjdXRlSW5PcmRlci5yZW1vdmUoMCwgbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGUp
OwogCi0gICAgZm9yIChhdXRvJiBzY3JpcHQgOiBzY3JpcHRzKSB7Ci0gICAgICAgIENhY2hlZFNj
cmlwdCogY2FjaGVkU2NyaXB0ID0gc2NyaXB0LmNhY2hlZFNjcmlwdCgpOwotICAgICAgICBSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCA9IHNjcmlwdC5yZWxlYXNlRWxlbWVudEFuZENsZWFyKCk7Ci0g
ICAgICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgbGVuZ3RoID0g
c2NyaXB0cy5zaXplKCk7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBSZWZQdHI8UGVuZGlu
Z1NjcmlwdD4gc2NyaXB0ID0gc3RkOjpleGNoYW5nZShzY3JpcHRzW2ldLCBudWxscHRyKTsKKyAg
ICAgICAgQVNTRVJUKHNjcmlwdCk7CiAgICAgICAgIC8vIFBhcGVyIG92ZXIgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDA1MAotICAgICAgICBpZiAoIWVsZW1lbnQp
CisgICAgICAgIC8vIFRoZSBjb2RlIGlzIGNoYW5nZWQuIE5vdyBpZiBtX3BlbmRpbmdBc3luY1Nj
cmlwdHMudGFrZSBjYW5ub3QgZmluZCB0aGUgdGFyZ2V0LCBpdCBmaWxscyBudWxscHRyIGluc3Rl
YWQgb2YgZW1wdHkgUGVuZGluZ1NjcmlwdC4KKyAgICAgICAgaWYgKCFzY3JpcHQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShlbGVtZW50
LmdldCgpKS0+ZXhlY3V0ZShjYWNoZWRTY3JpcHQpOworICAgICAgICBTY3JpcHRFbGVtZW50KiBz
Y3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSgmc2NyaXB0LT5lbGVtZW50
KCkpOworICAgICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CisgICAgICAgIHNjcmlwdEVsZW1l
bnQtPmV4ZWN1dGUoc2NyaXB0LT5jYWNoZWRTY3JpcHQoKSk7CiAgICAgICAgIG1fZG9jdW1lbnQu
ZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRSdW5uZXIuaAppbmRleCA4Y2QzMzJhNTczNGMxY2I5MmYyYTVmZjVmYzRjY2ExNThmZTNiYzQx
Li42NmMzNDU2NTk1MDcxYjFkMjkwMTRmNmZiZmM0YTExNTc4MjJkMTc2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdFJ1bm5lci5oCkBAIC01Niw5ICs1Niw5IEBAIGNsYXNzIFNjcmlwdFJ1bm5lciB7CiAg
ICAgdm9pZCB0aW1lckZpcmVkKCk7CiAKICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKLSAgICBW
ZWN0b3I8UGVuZGluZ1NjcmlwdD4gbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlcjsKLSAgICBWZWN0
b3I8UGVuZGluZ1NjcmlwdD4gbV9zY3JpcHRzVG9FeGVjdXRlU29vbjsgLy8gaHR0cDovL3d3dy53
aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jc2V0LW9mLXNjcmlwdHMtdGhh
dC13aWxsLWV4ZWN1dGUtYXMtc29vbi1hcy1wb3NzaWJsZQotICAgIEhhc2hNYXA8U2NyaXB0RWxl
bWVudCosIFBlbmRpbmdTY3JpcHQ+IG1fcGVuZGluZ0FzeW5jU2NyaXB0czsKKyAgICBWZWN0b3I8
UmVmUHRyPFBlbmRpbmdTY3JpcHQ+PiBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyOworICAgIFZl
Y3RvcjxSZWZQdHI8UGVuZGluZ1NjcmlwdD4+IG1fc2NyaXB0c1RvRXhlY3V0ZVNvb247IC8vIGh0
dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3NldC1vZi1z
Y3JpcHRzLXRoYXQtd2lsbC1leGVjdXRlLWFzLXNvb24tYXMtcG9zc2libGUKKyAgICBIYXNoTWFw
PFNjcmlwdEVsZW1lbnQqLCBSZWZQdHI8UGVuZGluZ1NjcmlwdD4+IG1fcGVuZGluZ0FzeW5jU2Ny
aXB0czsKICAgICBUaW1lciBtX3RpbWVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggOWY0N2EyNGRjNTU2MWRjMjY4
MWYxNzBlYTU5YmVlZGE5YWI4NzM0Ny4uZjEzMDc3YWM5MjY3NmZjMDkxZjA0YjBhZjc5YTI0MmYx
ZThmMDY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1l
bnRQYXJzZXIuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCiAKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJIVE1MRG9jdW1lbnQuaCIKQEAgLTUwMCwxOCArNTAxLDE4IEBAIHZvaWQgSFRNTERvY3Vt
ZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24oKQogICAgIGVuZElm
RGVsYXllZCgpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6d2F0Y2hGb3JMb2FkKENh
Y2hlZFJlc291cmNlKiBjYWNoZWRTY3JpcHQpCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6d2F0
Y2hGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7Ci0gICAgQVNTRVJUKCFj
YWNoZWRTY3JpcHQtPmlzTG9hZGVkKCkpOworICAgIEFTU0VSVCghcGVuZGluZ1NjcmlwdC5pc0xv
YWRlZCgpKTsKICAgICAvLyBhZGRDbGllbnQgd291bGQgY2FsbCBub3RpZnlGaW5pc2hlZCBpZiB0
aGUgbG9hZCB3ZXJlIGNvbXBsZXRlLgogICAgIC8vIENhbGxlcnMgZG8gbm90IGV4cGVjdCB0byBi
ZSByZS1lbnRlcmVkIGZyb20gdGhpcyBjYWxsLCBzbyB0aGV5IHNob3VsZAogICAgIC8vIG5vdCBh
biBhbHJlYWR5LWxvYWRlZCBDYWNoZWRSZXNvdXJjZS4KLSAgICBjYWNoZWRTY3JpcHQtPmFkZENs
aWVudCh0aGlzKTsKKyAgICBwZW5kaW5nU2NyaXB0LmFkZENsaWVudCh0aGlzKTsKIH0KIAotdm9p
ZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BXYXRjaGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFNjcmlwdCkKK3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpzdG9wV2F0Y2hpbmdGb3JM
b2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7Ci0gICAgY2FjaGVkU2NyaXB0LT5y
ZW1vdmVDbGllbnQodGhpcyk7CisgICAgcGVuZGluZ1NjcmlwdC5yZW1vdmVDbGllbnQodGhpcyk7
CiB9CiAKIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmRDdXJyZW50SW5wdXRTdHJlYW1U
b1ByZWxvYWRTY2FubmVyQW5kU2NhbigpCkBAIC01MjEsNyArNTIyLDcgQEAgdm9pZCBIVE1MRG9j
dW1lbnRQYXJzZXI6OmFwcGVuZEN1cnJlbnRJbnB1dFN0cmVhbVRvUHJlbG9hZFNjYW5uZXJBbmRT
Y2FuKCkKICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKCptX3ByZWxvYWRlciwgKmRvY3VtZW50
KCkpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVk
UmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlm
eUZpbmlzaGVkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7CiAgICAgLy8gcHVtcFRv
a2VuaXplciBjYW4gY2F1c2UgdGhpcyBwYXJzZXIgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgRG9j
dW1lbnQsCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlzbid0IGRlbGV0ZWQgeWV0
LgpAQCAtNTM0LDcgKzUzNSw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5p
c2hlZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChj
YWNoZWRSZXNvdXJjZSk7CisgICAgbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGVTY3JpcHRzV2FpdGlu
Z0ZvckxvYWQocGVuZGluZ1NjcmlwdCk7CiAgICAgaWYgKCFpc1dhaXRpbmdGb3JTY3JpcHRzKCkp
CiAgICAgICAgIHJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCA1MTFl
MWQzOWNkYzYzMGY1MTI3YjZmMjgzY2M2MWE1NDhhNmYwN2IxLi5lMmJmYjMyNjlmNGM3YWIyMWQ3
NjQ3YTI1ODZjOGUxOWQ2YzgzYmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMjcsMTEgKzI3LDExIEBACiAjaWZuZGVmIEhUTUxE
b2N1bWVudFBhcnNlcl9oCiAjZGVmaW5lIEhUTUxEb2N1bWVudFBhcnNlcl9oCiAKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dFN0cmVhbS5oIgog
I2luY2x1ZGUgIkhUTUxTY3JpcHRSdW5uZXJIb3N0LmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZVRy
YWNrZXIuaCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiUGVuZGluZ1Nj
cmlwdENsaWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgogI2lu
Y2x1ZGUgIlhTU0F1ZGl0b3IuaCIKICNpbmNsdWRlICJYU1NBdWRpdG9yRGVsZWdhdGUuaCIKQEAg
LTQ3LDcgKzQ3LDcgQEAgY2xhc3MgSFRNTFRyZWVCdWlsZGVyOwogY2xhc3MgSFRNTFJlc291cmNl
UHJlbG9hZGVyOwogY2xhc3MgUHVtcFNlc3Npb247CiAKLWNsYXNzIEhUTUxEb2N1bWVudFBhcnNl
ciA6IHB1YmxpYyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIsIHByaXZhdGUgSFRNTFNjcmlwdFJ1
bm5lckhvc3QsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgSFRNTERvY3Vt
ZW50UGFyc2VyIDogcHVibGljIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciwgcHJpdmF0ZSBIVE1M
U2NyaXB0UnVubmVySG9zdCwgcHJpdmF0ZSBQZW5kaW5nU2NyaXB0Q2xpZW50IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEhUTUxEb2N1bWVu
dFBhcnNlcj4gY3JlYXRlKEhUTUxEb2N1bWVudCYpOwpAQCAtOTAsMTQgKzkwLDE0IEBAIGNsYXNz
IEhUTUxEb2N1bWVudFBhcnNlciA6IHB1YmxpYyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIsIHBy
aXZhdGUgSFRNTFNjcmlwdFJ1CiAgICAgYm9vbCBzaG91bGRBc3NvY2lhdGVDb25zb2xlTWVzc2Fn
ZXNXaXRoVGV4dFBvc2l0aW9uKCkgY29uc3QgZmluYWw7CiAKICAgICAvLyBIVE1MU2NyaXB0UnVu
bmVySG9zdAotICAgIHZvaWQgd2F0Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKikgZmluYWw7Ci0g
ICAgdm9pZCBzdG9wV2F0Y2hpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKikgZmluYWw7CisgICAg
dm9pZCB3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYpIGZpbmFsOworICAgIHZvaWQgc3RvcFdh
dGNoaW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0JikgZmluYWw7CiAgICAgSFRNTElucHV0U3RyZWFt
JiBpbnB1dFN0cmVhbSgpIGZpbmFsOwogICAgIGJvb2wgaGFzUHJlbG9hZFNjYW5uZXIoKSBjb25z
dCBmaW5hbDsKICAgICB2b2lkIGFwcGVuZEN1cnJlbnRJbnB1dFN0cmVhbVRvUHJlbG9hZFNjYW5u
ZXJBbmRTY2FuKCkgZmluYWw7CiAKLSAgICAvLyBDYWNoZWRSZXNvdXJjZUNsaWVudAotICAgIHZv
aWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSBmaW5hbDsKKyAgICAvLyBQZW5kaW5n
U2NyaXB0Q2xpZW50CisgICAgdm9pZCBub3RpZnlGaW5pc2hlZChQZW5kaW5nU2NyaXB0JikgZmlu
YWw7CiAKICAgICBEb2N1bWVudCogY29udGV4dEZvclBhcnNpbmdTZXNzaW9uKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKaW5kZXggMWI0
YzE1ZDk5OTZhZTgzNDE0NjMwNGZkZmRkN2JlZmZkZDMyMDBhOC4uZTcyZTBjMWI1MTEwMmExYTcw
Y2I0NDlkNTU4NzMyOTdhNmRkZmVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAgLTU4LDEzICs1OCwxNSBAQCBIVE1MU2NyaXB0UnVu
bmVyOjpIVE1MU2NyaXB0UnVubmVyKERvY3VtZW50JiBkb2N1bWVudCwgSFRNTFNjcmlwdFJ1bm5l
ckhvc3QmIGhvcwogSFRNTFNjcmlwdFJ1bm5lcjo6fkhUTUxTY3JpcHRSdW5uZXIoKQogewogICAg
IC8vIEZJWE1FOiBTaG91bGQgd2UgYmUgcGFzc2VkIGEgImRvbmUgbG9hZGluZy9wYXJzaW5nIiBj
YWxsYmFjayBzb29uZXIgdGhhbiBkZXN0cnVjdGlvbj8KLSAgICBpZiAobV9wYXJzZXJCbG9ja2lu
Z1NjcmlwdC5jYWNoZWRTY3JpcHQoKSAmJiBtX3BhcnNlckJsb2NraW5nU2NyaXB0LndhdGNoaW5n
Rm9yTG9hZCgpKQotICAgICAgICBzdG9wV2F0Y2hpbmdGb3JMb2FkKG1fcGFyc2VyQmxvY2tpbmdT
Y3JpcHQpOworICAgIGlmIChtX3BhcnNlckJsb2NraW5nU2NyaXB0KSB7CisgICAgICAgIGlmICht
X3BhcnNlckJsb2NraW5nU2NyaXB0LT5uZWVkc0xvYWRpbmcoKSAmJiBtX3BhcnNlckJsb2NraW5n
U2NyaXB0LT53YXRjaGluZ0ZvckxvYWQoKSkKKyAgICAgICAgICAgIHN0b3BXYXRjaGluZ0Zvckxv
YWQoKm1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpOworICAgIH0KIAogICAgIHdoaWxlICghbV9zY3Jp
cHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBQZW5kaW5nU2Ny
aXB0IHBlbmRpbmdTY3JpcHQgPSBtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcudGFrZUZp
cnN0KCk7Ci0gICAgICAgIGlmIChwZW5kaW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpICYmIHBlbmRp
bmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpCi0gICAgICAgICAgICBzdG9wV2F0Y2hpbmdGb3JM
b2FkKHBlbmRpbmdTY3JpcHQpOworICAgICAgICBSZWZQdHI8UGVuZGluZ1NjcmlwdD4gcGVuZGlu
Z1NjcmlwdCA9IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy50YWtlRmlyc3QoKTsKKyAg
ICAgICAgaWYgKHBlbmRpbmdTY3JpcHQtPm5lZWRzTG9hZGluZygpICYmIHBlbmRpbmdTY3JpcHQt
PndhdGNoaW5nRm9yTG9hZCgpKQorICAgICAgICAgICAgc3RvcFdhdGNoaW5nRm9yTG9hZCgqcGVu
ZGluZ1NjcmlwdCk7CiAgICAgfQogfQogCkBAIC04Nyw3ICs4OSw3IEBAIGlubGluZSBSZWY8RXZl
bnQ+IGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpCiAgICAgcmV0dXJuIEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0KIAotU2NyaXB0U291cmNlQ29k
ZSBIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5n
U2NyaXB0JiBzY3JpcHQsIGJvb2wmIGVycm9yT2NjdXJyZWQpIGNvbnN0CitTY3JpcHRTb3VyY2VD
b2RlIEhUTUxTY3JpcHRSdW5uZXI6OnNvdXJjZUZyb21QZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3Jp
cHQmIHNjcmlwdCwgYm9vbCYgZXJyb3JPY2N1cnJlZCkgY29uc3QKIHsKICAgICBpZiAoc2NyaXB0
LmNhY2hlZFNjcmlwdCgpKSB7CiAgICAgICAgIGVycm9yT2NjdXJyZWQgPSBzY3JpcHQuY2FjaGVk
U2NyaXB0KCktPmVycm9yT2NjdXJyZWQoKTsKQEAgLTk1LDcgKzk3LDcgQEAgU2NyaXB0U291cmNl
Q29kZSBIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdChjb25zdCBQZW5k
aW5nU2NyaXB0JgogICAgICAgICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuY2FjaGVk
U2NyaXB0KCkpOwogICAgIH0KICAgICBlcnJvck9jY3VycmVkID0gZmFsc2U7Ci0gICAgcmV0dXJu
IFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmVsZW1lbnQoKS0+dGV4dENvbnRlbnQoKSwgZG9jdW1l
bnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdC5zdGFydGluZ1Bvc2l0
aW9uKCkpOworICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5lbGVtZW50KCkudGV4
dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNj
cmlwdC5zdGFydGluZ1Bvc2l0aW9uKCkpOwogfQogCiBib29sIEhUTUxTY3JpcHRSdW5uZXI6Omlz
UGVuZGluZ1NjcmlwdFJlYWR5KGNvbnN0IFBlbmRpbmdTY3JpcHQmIHNjcmlwdCkKQEAgLTEwNSw3
ICsxMDcsNyBAQCBib29sIEhUTUxTY3JpcHRSdW5uZXI6OmlzUGVuZGluZ1NjcmlwdFJlYWR5KGNv
bnN0IFBlbmRpbmdTY3JpcHQmIHNjcmlwdCkKICAgICBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5
bGVzaGVldHMgPSAhbV9kb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCk7CiAgICAgaWYg
KG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChzY3JpcHQuY2FjaGVkU2NyaXB0KCkgJiYgIXNjcmlwdC5jYWNoZWRTY3JpcHQo
KS0+aXNMb2FkZWQoKSkKKyAgICBpZiAoc2NyaXB0Lm5lZWRzTG9hZGluZygpICYmICFzY3JpcHQu
aXNMb2FkZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMTE1LDEwICsxMTcsMTEgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGFyc2lu
Z0Jsb2NraW5nU2NyaXB0KCkKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKCFp
c0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAgICBBU1NFUlQobV9kb2N1bWVudC0+aGF2ZVN0eWxlc2hl
ZXRzTG9hZGVkKCkpOwotICAgIEFTU0VSVChpc1BlbmRpbmdTY3JpcHRSZWFkeShtX3BhcnNlckJs
b2NraW5nU2NyaXB0KSk7CisgICAgQVNTRVJUKGlzUGVuZGluZ1NjcmlwdFJlYWR5KCptX3BhcnNl
ckJsb2NraW5nU2NyaXB0KSk7CiAKICAgICBJbnNlcnRpb25Qb2ludFJlY29yZCBpbnNlcnRpb25Q
b2ludFJlY29yZChtX2hvc3QuaW5wdXRTdHJlYW0oKSk7Ci0gICAgZXhlY3V0ZVBlbmRpbmdTY3Jp
cHRBbmREaXNwYXRjaEV2ZW50KG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpOworICAgIFJlZlB0cjxQ
ZW5kaW5nU2NyaXB0PiBwcm90ZWN0b3IgPSBzdGQ6OmV4Y2hhbmdlKG1fcGFyc2VyQmxvY2tpbmdT
Y3JpcHQsIG51bGxwdHIpOworICAgIGV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVu
dCgqcHJvdGVjdG9yKTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVuZGlu
Z1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKQEAg
LTEyNywxNSArMTMwLDEzIEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBlbmRpbmdT
Y3JpcHRBbmREaXNwYXRjaEV2ZW50KFBlbmRpbmdTY3JpcHQmIHBlbmRpCiAgICAgU2NyaXB0U291
cmNlQ29kZSBzb3VyY2VDb2RlID0gc291cmNlRnJvbVBlbmRpbmdTY3JpcHQocGVuZGluZ1Njcmlw
dCwgZXJyb3JPY2N1cnJlZCk7CiAKICAgICAvLyBTdG9wIHdhdGNoaW5nIGxvYWRzIGJlZm9yZSBl
eGVjdXRlU2NyaXB0IHRvIHByZXZlbnQgcmVjdXJzaW9uIGlmIHRoZSBzY3JpcHQgcmVsb2FkcyBp
dHNlbGYuCi0gICAgaWYgKHBlbmRpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkgJiYgcGVuZGluZ1Nj
cmlwdC53YXRjaGluZ0ZvckxvYWQoKSkKKyAgICBpZiAocGVuZGluZ1NjcmlwdC5uZWVkc0xvYWRp
bmcoKSAmJiBwZW5kaW5nU2NyaXB0LndhdGNoaW5nRm9yTG9hZCgpKQogICAgICAgICBzdG9wV2F0
Y2hpbmdGb3JMb2FkKHBlbmRpbmdTY3JpcHQpOwogCiAgICAgaWYgKCFpc0V4ZWN1dGluZ1Njcmlw
dCgpKQogICAgICAgICBNaWNyb3Rhc2tRdWV1ZTo6bWFpblRocmVhZFF1ZXVlKCkucGVyZm9ybU1p
Y3JvdGFza0NoZWNrcG9pbnQoKTsKIAotICAgIC8vIENsZWFyIHRoZSBwZW5kaW5nIHNjcmlwdCBi
ZWZvcmUgcG9zc2libGUgcmVudHJhbmN5IGZyb20gZXhlY3V0ZVNjcmlwdCgpCi0gICAgUmVmUHRy
PEVsZW1lbnQ+IGVsZW1lbnQgPSBwZW5kaW5nU2NyaXB0LnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIo
KTsKLSAgICBpZiAoU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVu
dElmUG9zc2libGUoZWxlbWVudC5nZXQoKSkpIHsKKyAgICBpZiAoU2NyaXB0RWxlbWVudCogc2Ny
aXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoJnBlbmRpbmdTY3JpcHQuZWxl
bWVudCgpKSkgewogICAgICAgICBOZXN0aW5nTGV2ZWxJbmNyZW1lbnRlciBuZXN0aW5nTGV2ZWxJ
bmNyZW1lbnRlcihtX3NjcmlwdE5lc3RpbmdMZXZlbCk7CiAgICAgICAgIElnbm9yZURlc3RydWN0
aXZlV3JpdGVDb3VudEluY3JlbWVudGVyIGlnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3Jl
bWVudGVyKG1fZG9jdW1lbnQpOwogICAgICAgICBpZiAoZXJyb3JPY2N1cnJlZCkKQEAgLTE0Myw3
ICsxNDQsNyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5k
RGlzcGF0Y2hFdmVudChQZW5kaW5nU2NyaXB0JiBwZW5kaQogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIEFTU0VSVChpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAgICAgICAgICAgIHNjcmlwdEVs
ZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7Ci0gICAgICAgICAgICBlbGVtZW50LT5k
aXNwYXRjaEV2ZW50KGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpKTsKKyAgICAgICAgICAgIHBlbmRp
bmdTY3JpcHQuZWxlbWVudCgpLmRpc3BhdGNoRXZlbnQoY3JlYXRlU2NyaXB0TG9hZEV2ZW50KCkp
OwogICAgICAgICB9CiAgICAgfQogICAgIEFTU0VSVCghaXNFeGVjdXRpbmdTY3JpcHQoKSk7CkBA
IC0xNTIsMTUgKzE1MywxMyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5n
U2NyaXB0QW5kRGlzcGF0Y2hFdmVudChQZW5kaW5nU2NyaXB0JiBwZW5kaQogdm9pZCBIVE1MU2Ny
aXB0UnVubmVyOjp3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKIHsK
ICAgICBBU1NFUlQoIXBlbmRpbmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpOwotICAgIG1faG9z
dC53YXRjaEZvckxvYWQocGVuZGluZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSk7Ci0gICAgcGVuZGlu
Z1NjcmlwdC5zZXRXYXRjaGluZ0ZvckxvYWQodHJ1ZSk7CisgICAgbV9ob3N0LndhdGNoRm9yTG9h
ZChwZW5kaW5nU2NyaXB0KTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpzdG9wV2F0Y2hp
bmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7CiAgICAgQVNTRVJUKHBl
bmRpbmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpOwotICAgIG1faG9zdC5zdG9wV2F0Y2hpbmdG
b3JMb2FkKHBlbmRpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwotICAgIHBlbmRpbmdTY3JpcHQu
c2V0V2F0Y2hpbmdGb3JMb2FkKGZhbHNlKTsKKyAgICBtX2hvc3Quc3RvcFdhdGNoaW5nRm9yTG9h
ZChwZW5kaW5nU2NyaXB0KTsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggMTAu
Mi41LjExICJBbiBlbmQgdGFnIHdob3NlIHRhZyBuYW1lIGlzICdzY3JpcHQnIgpAQCAtMTg3LDIx
ICsxODYsMjEgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxl
bWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2kKIAogYm9vbCBIVE1MU2NyaXB0UnVu
bmVyOjpoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEhbV9w
YXJzZXJCbG9ja2luZ1NjcmlwdC5lbGVtZW50KCk7CisgICAgcmV0dXJuICEhbV9wYXJzZXJCbG9j
a2luZ1NjcmlwdDsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGFyc2luZ0Js
b2NraW5nU2NyaXB0cygpCiB7Ci0gICAgd2hpbGUgKGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkg
JiYgaXNQZW5kaW5nU2NyaXB0UmVhZHkobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCkpCisgICAgd2hp
bGUgKGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkgJiYgaXNQZW5kaW5nU2NyaXB0UmVhZHkoKm1f
cGFyc2VyQmxvY2tpbmdTY3JpcHQpKQogICAgICAgICBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2Ny
aXB0KCk7CiB9CiAKLXZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5n
Rm9yTG9hZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkU2NyaXB0KQordm9pZCBIVE1MU2NyaXB0UnVu
bmVyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdT
Y3JpcHQpCiB7CiAgICAgQVNTRVJUKCFpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAgICBBU1NFUlQo
aGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYWNoZWRTY3Jp
cHQsIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkgPT0gY2FjaGVkU2NyaXB0
KTsKLSAgICBBU1NFUlQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKS0+aXNM
b2FkZWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChwZW5kaW5nU2NyaXB0LCBtX3BhcnNlckJsb2Nr
aW5nU2NyaXB0LmdldCgpID09ICZwZW5kaW5nU2NyaXB0KTsKKyAgICBBU1NFUlQobV9wYXJzZXJC
bG9ja2luZ1NjcmlwdC0+aXNMb2FkZWQoKSk7CiAgICAgZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1Nj
cmlwdHMoKTsKIH0KIApAQCAtMjIxLDEzICsyMjAsMTMgQEAgYm9vbCBIVE1MU2NyaXB0UnVubmVy
OjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JQYXJzaW5nKCkKICAgICB3aGlsZSAoIW1fc2NyaXB0
c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJUKCFpc0V4
ZWN1dGluZ1NjcmlwdCgpKTsKICAgICAgICAgQVNTRVJUKCFoYXNQYXJzZXJCbG9ja2luZ1Njcmlw
dCgpKTsKLSAgICAgICAgQVNTRVJUKG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5maXJz
dCgpLmNhY2hlZFNjcmlwdCgpKTsKLSAgICAgICAgaWYgKCFtX3NjcmlwdHNUb0V4ZWN1dGVBZnRl
clBhcnNpbmcuZmlyc3QoKS5jYWNoZWRTY3JpcHQoKS0+aXNMb2FkZWQoKSkgewotICAgICAgICAg
ICAgd2F0Y2hGb3JMb2FkKG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5maXJzdCgpKTsK
KyAgICAgICAgQVNTRVJUKG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5maXJzdCgpLT5u
ZWVkc0xvYWRpbmcoKSk7CisgICAgICAgIGlmICghbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJz
aW5nLmZpcnN0KCktPmlzTG9hZGVkKCkpIHsKKyAgICAgICAgICAgIHdhdGNoRm9yTG9hZCgqbV9z
Y3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLmZpcnN0KCkpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIFBlbmRpbmdTY3JpcHQgZmlyc3QgPSBtX3Njcmlw
dHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcudGFrZUZpcnN0KCk7Ci0gICAgICAgIGV4ZWN1dGVQZW5k
aW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChmaXJzdCk7CisgICAgICAgIFJlZlB0cjxQZW5kaW5n
U2NyaXB0PiBmaXJzdCA9IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy50YWtlRmlyc3Qo
KTsKKyAgICAgICAgZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KCpmaXJzdCk7
CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlzIHRoaXMgbV9kb2N1bWVudCBjaGVjayBmb3I/CiAg
ICAgICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIz
Nyw0MCArMjM2LDM4IEBAIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0
aW5nRm9yUGFyc2luZygpCiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBhcnNpbmdC
bG9ja2luZ1NjcmlwdChFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghcmVxdWVzdFBlbmRp
bmdTY3JpcHQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCwgZWxlbWVudCkpCisgICAgQVNTRVJUKCFt
X3BhcnNlckJsb2NraW5nU2NyaXB0KTsKKyAgICBpZiAoIShtX3BhcnNlckJsb2NraW5nU2NyaXB0
ID0gcmVxdWVzdFBlbmRpbmdTY3JpcHQoZWxlbWVudCkpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBBU1NFUlQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSk7CisgICAgQVNT
RVJUKG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQtPm5lZWRzTG9hZGluZygpKTsKIAogICAgIC8vIFdl
IG9ubHkgY2FyZSBhYm91dCBhIGxvYWQgY2FsbGJhY2sgaWYgY2FjaGVkU2NyaXB0IGlzIG5vdCBh
bHJlYWR5CiAgICAgLy8gaW4gdGhlIGNhY2hlLiBDYWxsZXJzIHdpbGwgYXR0ZW1wdCB0byBydW4g
dGhlIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQKICAgICAvLyBpZiBwb3NzaWJsZSBiZWZvcmUgcmV0
dXJuaW5nIGNvbnRyb2wgdG8gdGhlIHBhcnNlci4KLSAgICBpZiAoIW1fcGFyc2VyQmxvY2tpbmdT
Y3JpcHQuY2FjaGVkU2NyaXB0KCktPmlzTG9hZGVkKCkpCi0gICAgICAgIHdhdGNoRm9yTG9hZCht
X3BhcnNlckJsb2NraW5nU2NyaXB0KTsKKyAgICBpZiAoIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQt
PmlzTG9hZGVkKCkpCisgICAgICAgIHdhdGNoRm9yTG9hZCgqbV9wYXJzZXJCbG9ja2luZ1Njcmlw
dCk7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdERlZmVycmVkU2NyaXB0KEVs
ZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgUGVuZGluZ1NjcmlwdCBwZW5kaW5nU2NyaXB0OwotICAg
IGlmICghcmVxdWVzdFBlbmRpbmdTY3JpcHQocGVuZGluZ1NjcmlwdCwgZWxlbWVudCkpCisgICAg
UmVmUHRyPFBlbmRpbmdTY3JpcHQ+IHBlbmRpbmdTY3JpcHQ7CisgICAgaWYgKCEocGVuZGluZ1Nj
cmlwdCA9IHJlcXVlc3RQZW5kaW5nU2NyaXB0KGVsZW1lbnQpKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQVNTRVJUKHBlbmRpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkpOworICAgIEFTU0VSVChw
ZW5kaW5nU2NyaXB0LT5uZWVkc0xvYWRpbmcoKSk7CiAgICAgbV9zY3JpcHRzVG9FeGVjdXRlQWZ0
ZXJQYXJzaW5nLmFwcGVuZChwZW5kaW5nU2NyaXB0KTsKIH0KIAotYm9vbCBIVE1MU2NyaXB0UnVu
bmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0LCBF
bGVtZW50KiBzY3JpcHQpIGNvbnN0CitSZWZQdHI8UGVuZGluZ1NjcmlwdD4gSFRNTFNjcmlwdFJ1
bm5lcjo6cmVxdWVzdFBlbmRpbmdTY3JpcHQoRWxlbWVudCogc2NyaXB0KSBjb25zdAogewotICAg
IEFTU0VSVCghcGVuZGluZ1NjcmlwdC5lbGVtZW50KCkpOwotICAgIHBlbmRpbmdTY3JpcHQuc2V0
RWxlbWVudChzY3JpcHQpOwogICAgIC8vIFRoaXMgc2hvdWxkIGNvcnJlY3RseSByZXR1cm4gMCBm
b3IgZW1wdHkgb3IgaW52YWxpZCBzcmNWYWx1ZXMuCiAgICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRT
Y3JpcHQgPSB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKHNjcmlwdCktPmNhY2hlZFNjcmlwdCgp
LmdldCgpOwotICAgIGlmICghY2FjaGVkU2NyaXB0KSB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVk
KCk7IC8vIERpc3BhdGNoIGVycm9yIGV2ZW50LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHBlbmRpbmdTY3JpcHQuc2V0Q2FjaGVkU2NyaXB0KGNhY2hlZFNjcmlwdCk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKGNhY2hlZFNjcmlwdCkKKyAgICAgICAgcmV0dXJuIFBlbmRp
bmdTY3JpcHQ6OmNyZWF0ZSgqc2NyaXB0LCBjYWNoZWRTY3JpcHQpOworCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsgLy8gRGlzcGF0Y2ggZXJyb3IgZXZlbnQuCisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKIC8vIFRoaXMgbWV0aG9kIGlzIG1lYW50IHRvIG1hdGNoIHRoZSBIVE1MNSBkZWZpbml0aW9u
IG9mICJydW5uaW5nIGEgc2NyaXB0IgpAQCAtMzA5LDggKzMwNiw3IEBAIHZvaWQgSFRNTFNjcmlw
dFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uJiBz
Y3JpcHRTdGFyCiAgICAgICAgICAgICByZXF1ZXN0RGVmZXJyZWRTY3JpcHQoc2NyaXB0KTsKICAg
ICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkg
ewogICAgICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xldmVsID09IDEpIHsKLSAgICAgICAg
ICAgICAgICBtX3BhcnNlckJsb2NraW5nU2NyaXB0LnNldEVsZW1lbnQoc2NyaXB0KTsKLSAgICAg
ICAgICAgICAgICBtX3BhcnNlckJsb2NraW5nU2NyaXB0LnNldFN0YXJ0aW5nUG9zaXRpb24oc2Ny
aXB0U3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJCbG9ja2luZ1Njcmlw
dCA9IFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZSgqc2NyaXB0LCBzY3JpcHRTdGFydFBvc2l0aW9uKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBz
b3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVj
dXRpb24obV9kb2N1bWVudCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgICAgICAgICAgICAg
IHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKaW5kZXggNDViZjhkMDMyNGY4ZWQy
MWM5ZTZlOGRkZTE0YmJjOWRlMDZjYmM3YS4uZGU5Y2RiZDE2NDFmMDM2Zjg1NzVmNGIwZTVlNzcw
ZTgyNWVlMzAyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNj
cmlwdFJ1bm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRS
dW5uZXIuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiUGVuZGluZ1NjcmlwdC5oIgog
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01
MSw3ICs1Miw3IEBAIGNsYXNzIEhUTUxTY3JpcHRSdW5uZXIgewogICAgIC8vIFByb2Nlc3NlcyB0
aGUgcGFzc2VkIGluIHNjcmlwdCBhbmQgYW55IHBlbmRpbmcgc2NyaXB0cyBpZiBwb3NzaWJsZS4K
ICAgICB2b2lkIGV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBzY3JpcHRUb1Byb2Nlc3MsIGNv
bnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKLSAgICB2b2lkIGV4ZWN1
dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqKTsKKyAgICB2b2lkIGV4ZWN1
dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQoUGVuZGluZ1NjcmlwdCYpOwogICAgIGJvb2wgaGFzU2Ny
aXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2NyaXB0c1dh
aXRpbmdGb3JTdHlsZXNoZWV0czsgfQogICAgIHZvaWQgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9y
U3R5bGVzaGVldHMoKTsKICAgICBib29sIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclBhcnNpbmco
KTsKQEAgLTY4LDcgKzY5LDcgQEAgY2xhc3MgSFRNTFNjcmlwdFJ1bm5lciB7CiAKICAgICB2b2lk
IHJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQoRWxlbWVudCopOwogICAgIHZvaWQgcmVxdWVz
dERlZmVycmVkU2NyaXB0KEVsZW1lbnQqKTsKLSAgICBib29sIHJlcXVlc3RQZW5kaW5nU2NyaXB0
KFBlbmRpbmdTY3JpcHQmLCBFbGVtZW50KikgY29uc3Q7CisgICAgUmVmUHRyPFBlbmRpbmdTY3Jp
cHQ+IHJlcXVlc3RQZW5kaW5nU2NyaXB0KEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZvaWQgcnVu
U2NyaXB0KEVsZW1lbnQqLCBjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24p
OwogCkBAIC03NiwxMiArNzcsMTIgQEAgY2xhc3MgSFRNTFNjcmlwdFJ1bm5lciB7CiAgICAgdm9p
ZCB3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYpOwogICAgIHZvaWQgc3RvcFdhdGNoaW5nRm9y
TG9hZChQZW5kaW5nU2NyaXB0Jik7CiAgICAgYm9vbCBpc1BlbmRpbmdTY3JpcHRSZWFkeShjb25z
dCBQZW5kaW5nU2NyaXB0Jik7Ci0gICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VGcm9tUGVuZGlu
Z1NjcmlwdChjb25zdCBQZW5kaW5nU2NyaXB0JiwgYm9vbCYgZXJyb3JPY2N1cnJlZCkgY29uc3Q7
CisgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdChQZW5kaW5nU2Ny
aXB0JiwgYm9vbCYgZXJyb3JPY2N1cnJlZCkgY29uc3Q7CiAKICAgICBEb2N1bWVudCogbV9kb2N1
bWVudDsKICAgICBIVE1MU2NyaXB0UnVubmVySG9zdCYgbV9ob3N0OwotICAgIFBlbmRpbmdTY3Jp
cHQgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdDsKLSAgICBEZXF1ZTxQZW5kaW5nU2NyaXB0PiBtX3Nj
cmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmc7IC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVj
cy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI2xpc3Qtb2Ytc2NyaXB0cy10aGF0LXdpbGwtZXhlY3V0
ZS13aGVuLXRoZS1kb2N1bWVudC1oYXMtZmluaXNoZWQtcGFyc2luZworICAgIFJlZlB0cjxQZW5k
aW5nU2NyaXB0PiBtX3BhcnNlckJsb2NraW5nU2NyaXB0OworICAgIERlcXVlPFJlZlB0cjxQZW5k
aW5nU2NyaXB0Pj4gbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nOyAvLyBodHRwOi8vd3d3
LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNsaXN0LW9mLXNjcmlwdHMt
dGhhdC13aWxsLWV4ZWN1dGUtd2hlbi10aGUtZG9jdW1lbnQtaGFzLWZpbmlzaGVkLXBhcnNpbmcK
ICAgICB1bnNpZ25lZCBtX3NjcmlwdE5lc3RpbmdMZXZlbDsKIAogICAgIC8vIFdlIG9ubHkgd2Fu
dCBzdHlsZXNoZWV0IGxvYWRzIHRvIHRyaWdnZXIgc2NyaXB0IGV4ZWN1dGlvbiBpZiBzY3JpcHQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXJI
b3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVySG9zdC5o
CmluZGV4IDFmMjI4OTY1N2UwMDQ3NmFmOTQwOTdmMjUwM2U1MjUyYTRiYTFhODUuLjhhNjNiY2Iw
ZTk3OGE4NDQ3MWEzNTNhYzc1NzM2ZjNjNGFjYWJhYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXJIb3N0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lckhvc3QuaApAQCAtMzAsOSArMzAsOSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhY2hlZFJlc291cmNlOwogY2xhc3MgRWxl
bWVudDsKIGNsYXNzIEhUTUxJbnB1dFN0cmVhbTsKK2NsYXNzIFBlbmRpbmdTY3JpcHQ7CiBjbGFz
cyBTY3JpcHRTb3VyY2VDb2RlOwogCiBjbGFzcyBIVE1MU2NyaXB0UnVubmVySG9zdCB7CkBAIC00
MCw5ICs0MCw5IEBAIGNsYXNzIEhUTUxTY3JpcHRSdW5uZXJIb3N0IHsKICAgICB2aXJ0dWFsIH5I
VE1MU2NyaXB0UnVubmVySG9zdCgpIHsgfQogCiAgICAgLy8gSW1wbGVtZW50b3JzIHNob3VsZCBj
YWxsIGNhY2hlZFJlc291cmNlLT5hZGRDbGllbnQoKSBoZXJlIG9yIHNvb24gYWZ0ZXIuCi0gICAg
dmlydHVhbCB2b2lkIHdhdGNoRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgd2F0Y2hGb3JMb2FkKFBlbmRpbmdTY3JpcHQmKSA9IDA7CiAgICAgLy8gSW1wbGVt
ZW50b3JzIG11c3QgY2FsbCBjYWNoZWRSZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KCkgaW1tZWRpYXRl
bHkuCi0gICAgdmlydHVhbCB2b2lkIHN0b3BXYXRjaGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2Uq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BXYXRjaGluZ0ZvckxvYWQoUGVuZGluZ1Njcmlw
dCYpID0gMDsKIAogICAgIHZpcnR1YWwgSFRNTElucHV0U3RyZWFtJiBpbnB1dFN0cmVhbSgpID0g
MDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287364</attachid>
            <date>2016-08-29 18:19:23 -0700</date>
            <delta_ts>2016-08-30 11:13:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161350-20160829181714.patch</filename>
            <type>text/plain</type>
            <size>37923</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1MTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNjYTcyZTNhNzFjOGFl
NWRlN2QxZGQ3MjVjZjRiOWE0ODlhNzFjMy4uNWUyYzU2YzZhYmRkN2EwZGZiNjJkNmNmNjg5NzFi
MzNlZmJhMjNlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE2LTA4LTI5ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIE1ha2UgUGVuZGlu
Z1NjcmlwdCBhcyByZWYtY291bnRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxMzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB3aGlsZSBQZW5kaW5nU2NyaXB0IGlzIGNvcHlhYmxl
LCBQZW5kaW5nU2NyaXB0IGlzIGFsc28gQ2FjaGVkUmVzb3VyY2VDbGllbnQuCisgICAgICAgIFNv
IHdoZW4gY29weWluZyB0aGlzLCB0aGUgY2xpZW50IHJlZ2lzdHJhdGlvbiBpcyBjb3JyZWN0bHkg
ZG9uZSBpbiBQZW5kaW5nU2NyaXB0J3Mgb3BlcmF0b3I9IGV0Yy4KKyAgICAgICAgSG93ZXZlciwg
dGhpcyBjb3B5aW5nIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGVmZmVjdGl2ZWx5IHVzZWQuCisgICAg
ICAgIEluIHRoaXMgcGF0Y2gsIHdlIGNoYW5nZSB0aGlzIFBlbmRpbmdTY3JpcHQgdG8gcmVmLWNv
dW50ZWQgY2xhc3MgYW5kIG1ha2UgaXQgbm9uY29weWFibGUuCisgICAgICAgIFRoaXMgY2hhbmdl
IG1ha2VzIHRoaW5ncyBzaW1wbGUsIGFuZCBkcm9wIHVubmVjZXNzYXJ5IGFkZENsaWVudCAvIHJl
bW92ZUNsaWVudCBjYWxscy4KKyAgICAgICAgQW5kIHdlIGFsc28gc2ltcGxpZnkgUGVuZGluZ1Nj
cmlwdCBjbGFzcy4gU2luY2Ugd2UgY2FuIG9mZmVyIGFsbCB0aGUgbWVtYmVycyBhdCB0aGUgY29u
c3RydWN0aW9uCisgICAgICAgIHRpbWUsIHdlIGRvbid0IG5lZWQgYW55IHNldHRlcnMuCisKKyAg
ICAgICAgRnVydGhlcm1vcmUsIGJ5IGNoYW5naW5nIFBlbmRpbmdTY3JpcHQgbm9uY29weWFibGUg
JiByZWYtY291bnRlZCwgd2UgZWFzaWx5IG1ha2UgaXQgb2JzZXJ2YWJsZS4KKyAgICAgICAgSW4g
dGhpcyBwYXRjaCwgd2UgYWxzbyBhZGQgUGVuZGluZ1NjcmlwdENsaWVudCB0byByZWNlaXZlIHRo
ZSBub3RpZmljYXRpb24gZnJvbSBQZW5kaW5nU2NyaXB0LgorICAgICAgICBQcmV2aW91c2x5LCB3
ZSBkaXJlY3RseSB1c2VkIENhY2hlZFNjcmlwdCBpbiBQZW5kaW5nU2NyaXB0IHRvIHJlY2VpdmUg
dGhlIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgQW5kIHdlIG1hbmFnZSB0aGUgd2F0Y2hpbmcgc3Rh
dHVzIGJ5IHVzaW5nIG1fd2F0Y2hpbmdGb3JMb2FkIGZsYWcuIFRoaXMgbmV3IFBlbmRpbmdTY3Jp
cHRDbGllbnQKKyAgICAgICAgc2ltcGxpZnkgaXQsIGFuZCBpdCBnaXZlcyB1cyB0aGUgY2hhbmNl
IHRvIHdyYXAgJiBoaWRlIHRoZSBkZXRhaWxzIG9mIENhY2hlZFNjcmlwdC4KKyAgICAgICAgTGF0
ZXIsIHdlIHBsYW4gdG8gYWJzdHJhY3QgU2NyaXB0TW9kdWxlR3JhcGggKHVzZWQgZm9yIEVTNiBt
b2R1bGVzKSBhbmQgQ2FjaGVkU2NyaXB0IGJ5IHVzaW5nCisgICAgICAgIHRoaXMgUGVuZGluZ1Nj
cmlwdC4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlbmRpbmdTY3JpcHQ6OnByb3BhZ2F0ZUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBlbmRpbmdTY3JpcHQ6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRp
bmdTY3JpcHQ6OmlzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmFk
ZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpyZW1vdmVDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6cmVsZWFzZUVsZW1lbnRBbmRDbGVh
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpzZXRDYWNoZWRT
Y3JpcHQpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9QZW5kaW5nU2NyaXB0Lmg6CisgICAgICAg
ICogZG9tL1BlbmRpbmdTY3JpcHRDbGllbnQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lckhvc3QuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBl
bmRpbmdTY3JpcHRDbGllbnQ6On5QZW5kaW5nU2NyaXB0Q2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBlbmRpbmdTY3JpcHRDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBkb20v
U2NyaXB0UnVubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFJ1bm5lcjo6cXVldWVT
Y3JpcHRGb3JFeGVjdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UnVubmVyOjp0aW1l
ckZpcmVkKToKKyAgICAgICAgKiBkb20vU2NyaXB0UnVubmVyLmg6CisgICAgICAgICogaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1
bWVudFBhcnNlcjo6d2F0Y2hGb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVu
dFBhcnNlcjo6c3RvcFdhdGNoaW5nRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9j
dW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
RG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6On5IVE1MU2NyaXB0UnVu
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnNvdXJjZUZyb21QZW5k
aW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmlzUGVuZGlu
Z1NjcmlwdFJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1
dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1
bm5lcjo6ZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OndhdGNoRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0UnVubmVyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTY3JpcHRSdW5uZXI6Omhhc1BhcnNlckJsb2NraW5nU2NyaXB0KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRzV2Fp
dGluZ0ZvckxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0
ZVNjcmlwdHNXYWl0aW5nRm9yUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0
UnVubmVyOjpyZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3REZWZlcnJlZFNjcmlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQpOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU2NyaXB0
UnVubmVySG9zdC5oOgorCiAyMDE2LTA4LTI5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgV2Ugc2hvdWxkIHRocm93IGEgU2VjdXJpdHlFcnJvciB3aGVuIGRlbnlp
bmcgc2V0dGluZyBhIGNyb3NzLW9yaWdpbiBXaW5kb3cgcHJvcGVydHkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjNTE1NGRjYWNm
NTUzOGQzM2RjNmNiYjhmN2ZiZDIxOTBlNmEwYmQwLi5lODgwYjE3ZTg1OTIxMTYzYzdhZjg0ZTQw
MDU4NmYwODI4YWViNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MDg2LDYgKzYwODYsNyBAQAogCQlFMUZGOEY2RDE4MERC
NUJFMDAxMzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRkY4RjZCMTgwREI1QkUwMDEzMjY3NCAv
KiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oICovOyB9OwogCQlFMzg4Mzg5ODFCQUQxNDVGMDBE
NjJFRTMgLyogSlNNb2R1bGVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM4ODM4OTQxQkFEMTQ1RjAwRDYyRUUzIC8qIEpTTW9kdWxlTG9h
ZGVyLmNwcCAqLzsgfTsKIAkJRTM4ODM4OTkxQkFEMTQ1RjAwRDYyRUUzIC8qIEpTTW9kdWxlTG9h
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzg4
Mzg5NTFCQUQxNDVGMDBENjJFRTMgLyogSlNNb2R1bGVMb2FkZXIuaCAqLzsgfTsKKwkJRTNGQTM4
NjQxRDcxODEyRDAwQUE1OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRkEzODYxMUQ3MTZFNzYwMEFBNTk1
MCAvKiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggKi87IH07CiAJCUU0MDFDMjc1MTdDRTUzRUMwMEM0
MUEzNSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDAxQzI3NDE3Q0U1M0VDMDBDNDFBMzUgLyogRWxl
bWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUU0MDFFMEE0MUMzQzBCODMwMEYzNEQxMCAvKiBTdHlsZUNoYW5n
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQwMUUw
QTMxQzNDMEI4MzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQwMUUwQTYxQzNDMENGNzAwRjM0RDEwIC8q
IFN0eWxlQ2hhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0MDFFMEE1MUMzQzBDRjcwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5jcHAgKi87IH07
CkBAIC0xMzY0Nyw2ICsxMzY0OCw3IEBACiAJCUUxRkY4RjZCMTgwREI1QkUwMDEzMjY3NCAvKiBD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzg4Mzg5NDFCQUQxNDVGMDBENjJFRTMgLyogSlNNb2R1bGVMb2FkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNb2R1bGVMb2FkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzg4Mzg5NTFCQUQxNDVGMDBENjJFRTMgLyogSlNNb2R1
bGVMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNb2R1bGVMb2Fk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTNGQTM4NjExRDcxNkU3NjAwQUE1
OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGVuZGluZ1NjcmlwdENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDAxQzI3NDE3Q0U1M0VDMDBDNDFBMzUgLyogRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50SXRlcmF0b3JBc3NlcnRp
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MDFFMEEzMUMzQzBCODMwMEYz
NEQxMCAvKiBTdHlsZUNoYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHlsZUNoYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDAxRTBBNTFDM0Mw
Q0Y3MDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3R5bGVDaGFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjMwNTYsNiArMjMwNTgsNyBAQAogCQkJCTgzRDI2RDNEMUFGRENDNTAwMDFCMzg3MyAvKiBQ
YXJlbnROb2RlLmlkbCAqLywKIAkJCQk4QTdDQzk2RjEyMDc2RjhBMDAxRDQ1ODggLyogUGVuZGlu
Z1NjcmlwdC5jcHAgKi8sCiAJCQkJOEE3Q0M5NkExMjA3NkQ3MzAwMUQ0NTg4IC8qIFBlbmRpbmdT
Y3JpcHQuaCAqLywKKwkJCQlFM0ZBMzg2MTFENzE2RTc2MDBBQTU5NTAgLyogUGVuZGluZ1Njcmlw
dENsaWVudC5oICovLAogCQkJCTQxQkY3MDBEMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbC5jcHAgKi8sCiAJCQkJNDFCRjcwMEUwRkU4NkY2MTAwNUU4REVDIC8q
IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmggKi8sCiAJCQkJNTE4OUYwREQxMEI0NkIwRTAw
RjNDNzM5IC8qIFBvcFN0YXRlRXZlbnQuY3BwICovLApAQCAtMjcwMzEsNiArMjcwMzQsNyBAQAog
CQkJCTU5QzI4MDQ2MTM4REMyNDEwMDc5QjdFMiAvKiBYTUxFcnJvcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNzcyQzQ3MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODNEMzVBRUMxQzcxODdGQTAwRjcwRDVBIC8qIFhNTEh0dHBSZXF1ZXN0
RXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUzRkEzODY0MUQ3MTgxMkQwMEFBNTk1
MCAvKiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGOUYwRUQ3QTBE
QjUwQ0EyMDBEMTZEQjkgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBMTM2QTAwRDExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREZENDhFMEUzMDUyOTAw
MDlEMTBBRCAvKiBYTUxIdHRwUmVxdWVzdFVwbG9hZC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKaW5kZXggNzhmZjNkODZmMTU0OWUyZTE3ODVmMTJlY2Mz
OTI2OTAzMTEyNTg4Ni4uMWVmYTUwNWNkZDZiMzY0OWQwOGViNmNjYzVhZDFkOWQ3NzE2ODhkZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcApAQCAtMjgsMzIgKzI4LDM5IEBACiAK
ICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiUGVuZGluZ1NjcmlwdENsaWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1BlbmRp
bmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQoRWxlbWVudCYgZWxlbWVudCwgVGV4dFBvc2l0aW9uIHN0
YXJ0aW5nUG9zaXRpb24pCisgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fc3RhcnRp
bmdQb3NpdGlvbihzdGFydGluZ1Bvc2l0aW9uKQoreworfQorCitQZW5kaW5nU2NyaXB0OjpQZW5k
aW5nU2NyaXB0KEVsZW1lbnQmIGVsZW1lbnQsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQor
ICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX2NhY2hlZFNjcmlwdChjYWNoZWRTY3Jp
cHQpCit7Cit9CisKIFBlbmRpbmdTY3JpcHQ6On5QZW5kaW5nU2NyaXB0KCkKIHsKICAgICBpZiAo
bV9jYWNoZWRTY3JpcHQpCiAgICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhp
cyk7CiB9CiAKLVJlZlB0cjxFbGVtZW50PiBQZW5kaW5nU2NyaXB0OjpyZWxlYXNlRWxlbWVudEFu
ZENsZWFyKCkKK1JlZjxQZW5kaW5nU2NyaXB0PiBQZW5kaW5nU2NyaXB0OjpjcmVhdGUoRWxlbWVu
dCYgZWxlbWVudCwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCiB7Ci0gICAgc2V0Q2FjaGVk
U2NyaXB0KG51bGxwdHIpOwotICAgIG1fd2F0Y2hpbmdGb3JMb2FkID0gZmFsc2U7Ci0gICAgbV9z
dGFydGluZ1Bvc2l0aW9uID0gVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKLSAg
ICByZXR1cm4gV1RGTW92ZShtX2VsZW1lbnQpOworICAgIFJlZjxQZW5kaW5nU2NyaXB0PiBwZW5k
aW5nU2NyaXB0ID0gYWRvcHRSZWYoKm5ldyBQZW5kaW5nU2NyaXB0KGVsZW1lbnQsIGNhY2hlZFNj
cmlwdCkpOworICAgIGlmIChjYWNoZWRTY3JpcHQpCisgICAgICAgIGNhY2hlZFNjcmlwdC0+YWRk
Q2xpZW50KCZwZW5kaW5nU2NyaXB0LmdldCgpKTsKKyAgICByZXR1cm4gcGVuZGluZ1NjcmlwdDsK
IH0KIAotdm9pZCBQZW5kaW5nU2NyaXB0OjpzZXRDYWNoZWRTY3JpcHQoQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQpCitSZWY8UGVuZGluZ1NjcmlwdD4gUGVuZGluZ1NjcmlwdDo6Y3JlYXRlKEVs
ZW1lbnQmIGVsZW1lbnQsIFRleHRQb3NpdGlvbiBzY3JpcHRTdGFydFBvc2l0aW9uKQogewotICAg
IGlmIChtX2NhY2hlZFNjcmlwdCA9PSBjYWNoZWRTY3JpcHQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAobV9jYWNoZWRTY3JpcHQpCi0gICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGll
bnQodGhpcyk7Ci0gICAgbV9jYWNoZWRTY3JpcHQgPSBjYWNoZWRTY3JpcHQ7Ci0gICAgaWYgKG1f
Y2FjaGVkU2NyaXB0KQotICAgICAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBlbmRpbmdTY3JpcHQoZWxlbWVudCwgc2NyaXB0U3Rh
cnRQb3NpdGlvbikpOwogfQogCiBDYWNoZWRTY3JpcHQqIFBlbmRpbmdTY3JpcHQ6OmNhY2hlZFNj
cmlwdCgpIGNvbnN0CkBAIC02MSw4ICs2OCwzNSBAQCBDYWNoZWRTY3JpcHQqIFBlbmRpbmdTY3Jp
cHQ6OmNhY2hlZFNjcmlwdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LmdldCgp
OwogfQogCit2b2lkIFBlbmRpbmdTY3JpcHQ6OnByb3BhZ2F0ZUZpbmlzaGVkKCkKK3sKKyAgICBS
ZWY8UGVuZGluZ1NjcmlwdD4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+bm90aWZ5RmluaXNoZWQoKnRoaXMpOworfQorCiB2b2lkIFBl
bmRpbmdTY3JpcHQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKikKIHsKKyAgICBwcm9w
YWdhdGVGaW5pc2hlZCgpOworfQorCitib29sIFBlbmRpbmdTY3JpcHQ6OmlzTG9hZGVkKCkgY29u
c3QKK3sKKyAgICBpZiAobV9jYWNoZWRTY3JpcHQpCisgICAgICAgIHJldHVybiBtX2NhY2hlZFNj
cmlwdC0+aXNMb2FkZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGVuZGluZ1Nj
cmlwdDo6YWRkQ2xpZW50KFBlbmRpbmdTY3JpcHRDbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX2Ns
aWVudCA9IGNsaWVudDsKKyAgICBpZiAoaXNMb2FkZWQoKSkKKyAgICAgICAgcHJvcGFnYXRlRmlu
aXNoZWQoKTsKK30KKwordm9pZCBQZW5kaW5nU2NyaXB0OjpyZW1vdmVDbGllbnQoUGVuZGluZ1Nj
cmlwdENsaWVudCopCit7CisgICAgbV9jbGllbnQgPSBudWxscHRyOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1BlbmRpbmdTY3JpcHQuaAppbmRleCA2ZjRhZmUzNWUyNzAwMjU0NjM2MTk1NzBiYzFlYTdj
MWNiNDdmNDJhLi4wOWU3YzkwMzEwZDVhZTA0MThhYzgzMDcxMmU0M2UxYzc5MjVmZjljIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKQEAgLTIzLDg1ICsyMyw2NCBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQZW5kaW5nU2NyaXB0X2gKLSNkZWZpbmUgUGVuZGluZ1Nj
cmlwdF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9z
aXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIFBlbmRpbmdTY3Jp
cHRDbGllbnQ7CiAKIC8vIEEgY29udGFpbmVyIGZvciBhbiBleHRlcm5hbCBzY3JpcHQgd2hpY2gg
bWF5IGJlIGxvYWRlZCBhbmQgZXhlY3V0ZWQuCiAvLwogLy8gQSBDYWNoZWRSZXNvdXJjZUhhbmRs
ZSBhbG9uZSBkb2VzIG5vdCBwcmV2ZW50IHRoZSB1bmRlcmx5aW5nIENhY2hlZFJlc291cmNlCiAv
LyBmcm9tIHB1cmdpbmcgaXRzIGRhdGEgYnVmZmVyLiBUaGlzIGNsYXNzIGhvbGRzIGEgZHVtbXkg
Y2xpZW50IG9wZW4gZm9yIGl0cwogLy8gbGlmZXRpbWUgaW4gb3JkZXIgdG8gZ3VhcmFudGVlIHRo
YXQgdGhlIGRhdGEgYnVmZmVyIHdpbGwgbm90IGJlIHB1cmdlZC4KLWNsYXNzIFBlbmRpbmdTY3Jp
cHQgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgUGVuZGluZ1Nj
cmlwdCBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdTY3JpcHQ+LCBwdWJsaWMgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgeworV1RGX01BS0VfTk9OQ09QWUFCTEUoUGVuZGluZ1NjcmlwdCk7
CitXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBQZW5kaW5nU2NyaXB0KCkK
LSAgICAgICAgOiBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKLSAgICAgICAgLCBtX3N0YXJ0aW5n
UG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKLSAgICB7Ci0gICAg
fQotCi0gICAgUGVuZGluZ1NjcmlwdChFbGVtZW50KiBlbGVtZW50LCBDYWNoZWRTY3JpcHQqIGNh
Y2hlZFNjcmlwdCkKLSAgICAgICAgOiBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKLSAgICAgICAg
LCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHNldENhY2hlZFNjcmlwdChjYWNo
ZWRTY3JpcHQpOwotICAgIH0KLQotICAgIFBlbmRpbmdTY3JpcHQoY29uc3QgUGVuZGluZ1Njcmlw
dCYgb3RoZXIpCi0gICAgICAgIDogQ2FjaGVkUmVzb3VyY2VDbGllbnQob3RoZXIpCi0gICAgICAg
ICwgbV93YXRjaGluZ0ZvckxvYWQob3RoZXIubV93YXRjaGluZ0ZvckxvYWQpCi0gICAgICAgICwg
bV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKLSAgICAgICAgLCBtX3N0YXJ0aW5nUG9zaXRpb24o
b3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uKQotICAgIHsKLSAgICAgICAgc2V0Q2FjaGVkU2NyaXB0
KG90aGVyLmNhY2hlZFNjcmlwdCgpKTsKLSAgICB9CisgICAgc3RhdGljIFJlZjxQZW5kaW5nU2Ny
aXB0PiBjcmVhdGUoRWxlbWVudCYsIENhY2hlZFNjcmlwdCopOworICAgIHN0YXRpYyBSZWY8UGVu
ZGluZ1NjcmlwdD4gY3JlYXRlKEVsZW1lbnQmLCBUZXh0UG9zaXRpb24gc2NyaXB0U3RhcnRQb3Np
dGlvbik7CiAKICAgICB2aXJ0dWFsIH5QZW5kaW5nU2NyaXB0KCk7CiAKLSAgICBQZW5kaW5nU2Ny
aXB0JiBvcGVyYXRvcj0oY29uc3QgUGVuZGluZ1NjcmlwdCYgb3RoZXIpCi0gICAgewotICAgICAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICAg
ICAgbV93YXRjaGluZ0ZvckxvYWQgPSBvdGhlci5tX3dhdGNoaW5nRm9yTG9hZDsKLSAgICAgICAg
bV9lbGVtZW50ID0gb3RoZXIubV9lbGVtZW50OwotICAgICAgICBtX3N0YXJ0aW5nUG9zaXRpb24g
PSBvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb247Ci0gICAgICAgIHNldENhY2hlZFNjcmlwdChvdGhl
ci5jYWNoZWRTY3JpcHQoKSk7Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQogICAg
IFRleHRQb3NpdGlvbiBzdGFydGluZ1Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydGlu
Z1Bvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTdGFydGluZ1Bvc2l0aW9uKGNvbnN0IFRleHRQb3Np
dGlvbiYgcG9zaXRpb24pIHsgbV9zdGFydGluZ1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotICAg
IGJvb2wgd2F0Y2hpbmdGb3JMb2FkKCkgY29uc3QgeyByZXR1cm4gbV93YXRjaGluZ0ZvckxvYWQ7
IH0KLSAgICB2b2lkIHNldFdhdGNoaW5nRm9yTG9hZChib29sIGIpIHsgbV93YXRjaGluZ0Zvckxv
YWQgPSBiOyB9CisgICAgYm9vbCB3YXRjaGluZ0ZvckxvYWQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudDsgfQogCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVu
dC5nZXQoKTsgfQotICAgIHZvaWQgc2V0RWxlbWVudChFbGVtZW50KiBlbGVtZW50KSB7IG1fZWxl
bWVudCA9IGVsZW1lbnQ7IH0KLSAgICBSZWZQdHI8RWxlbWVudD4gcmVsZWFzZUVsZW1lbnRBbmRD
bGVhcigpOworICAgIEVsZW1lbnQmIGVsZW1lbnQoKSB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7
IH0KIAogICAgIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRDYWNoZWRTY3JpcHQoQ2FjaGVkU2NyaXB0Kik7CisgICAgYm9vbCBuZWVkc0xvYWRpbmcoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhY2hlZFNjcmlwdCgpOworICAgIH0KKworICAg
IGJvb2wgaXNMb2FkZWQoKSBjb25zdDsKIAogICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVk
UmVzb3VyY2UqKSBvdmVycmlkZTsKIAorICAgIHZvaWQgYWRkQ2xpZW50KFBlbmRpbmdTY3JpcHRD
bGllbnQqKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChQZW5kaW5nU2NyaXB0Q2xpZW50Kik7CisK
IHByaXZhdGU6Ci0gICAgYm9vbCBtX3dhdGNoaW5nRm9yTG9hZDsKLSAgICBSZWZQdHI8RWxlbWVu
dD4gbV9lbGVtZW50OworICAgIFBlbmRpbmdTY3JpcHQoRWxlbWVudCYsIENhY2hlZFNjcmlwdCop
OworICAgIFBlbmRpbmdTY3JpcHQoRWxlbWVudCYsIFRleHRQb3NpdGlvbiBzdGFydGluZ1Bvc2l0
aW9uKTsKKworICAgIHZvaWQgcHJvcGFnYXRlRmluaXNoZWQoKTsKKworICAgIFJlZjxFbGVtZW50
PiBtX2VsZW1lbnQ7CiAgICAgVGV4dFBvc2l0aW9uIG1fc3RhcnRpbmdQb3NpdGlvbjsgLy8gT25s
eSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsgCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8
Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKKyAgICBQZW5kaW5nU2NyaXB0Q2xpZW50KiBt
X2NsaWVudCB7IG51bGxwdHIgfTsKIH07CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L1BlbmRpbmdTY3JpcHRDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZjQyNGY3M2ZmODk2YmM1YzM4N2Q5
YmNiODAyYjJlYmEyNTI5NzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1BlbmRpbmdTY3JpcHRDbGllbnQuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFBlbmRpbmdTY3JpcHQ7CisKK2NsYXNzIFBlbmRpbmdTY3JpcHRD
bGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflBlbmRpbmdTY3JpcHRDbGllbnQoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChQZW5kaW5nU2NyaXB0JikgeyB9Cit9
OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCmluZGV4IGQyNjA1YmRkYjdiNWI2
MmI5MTQ1MzhlZjYyNjJhY2I3YjNkNTAwMmUuLmRhYTA2M2IzMzM5Njc5MTQ0MTRiOTJmMmY0Njhh
MzEwMzM4NmIyOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCkBAIC02MSwxMSAr
NjEsMTEgQEAgdm9pZCBTY3JpcHRSdW5uZXI6OnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKFNjcmlw
dEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIENhY2hlZFIKIAogICAgIHN3aXRjaCAoZXhlY3V0aW9u
VHlwZSkgewogICAgIGNhc2UgQVNZTkNfRVhFQ1VUSU9OOgotICAgICAgICBtX3BlbmRpbmdBc3lu
Y1NjcmlwdHMuYWRkKHNjcmlwdEVsZW1lbnQsIFBlbmRpbmdTY3JpcHQoJmVsZW1lbnQsIGNhY2hl
ZFNjcmlwdC5nZXQoKSkpOworICAgICAgICBtX3BlbmRpbmdBc3luY1NjcmlwdHMuYWRkKHNjcmlw
dEVsZW1lbnQsIFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZShlbGVtZW50LCBjYWNoZWRTY3JpcHQuZ2V0
KCkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElOX09SREVSX0VYRUNVVElPTjoKLSAg
ICAgICAgbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlci5hcHBlbmQoUGVuZGluZ1NjcmlwdCgmZWxl
bWVudCwgY2FjaGVkU2NyaXB0LmdldCgpKSk7CisgICAgICAgIG1fc2NyaXB0c1RvRXhlY3V0ZUlu
T3JkZXIuYXBwZW5kKFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZShlbGVtZW50LCBjYWNoZWRTY3JpcHQu
Z2V0KCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMTAwLDIzICsxMDAsMjUgQEAg
dm9pZCBTY3JpcHRSdW5uZXI6OnRpbWVyRmlyZWQoKQogewogICAgIFJlZjxEb2N1bWVudD4gcHJv
dGVjdChtX2RvY3VtZW50KTsKIAotICAgIFZlY3RvcjxQZW5kaW5nU2NyaXB0PiBzY3JpcHRzOwor
ICAgIFZlY3RvcjxSZWZQdHI8UGVuZGluZ1NjcmlwdD4+IHNjcmlwdHM7CiAgICAgc2NyaXB0cy5z
d2FwKG1fc2NyaXB0c1RvRXhlY3V0ZVNvb24pOwogCiAgICAgc2l6ZV90IG51bUluT3JkZXJTY3Jp
cHRzVG9FeGVjdXRlID0gMDsKLSAgICBmb3IgKDsgbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGUg
PCBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLnNpemUoKSAmJiBtX3NjcmlwdHNUb0V4ZWN1dGVJ
bk9yZGVyW251bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlXS5jYWNoZWRTY3JpcHQoKS0+aXNMb2Fk
ZWQoKTsgKytudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZSkKKyAgICBmb3IgKDsgbnVtSW5PcmRl
clNjcmlwdHNUb0V4ZWN1dGUgPCBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLnNpemUoKSAmJiBt
X3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyW251bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlXS0+aXNM
b2FkZWQoKTsgKytudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZSkKICAgICAgICAgc2NyaXB0cy5h
cHBlbmQobV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlcltudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0
ZV0pOwogICAgIGlmIChudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZSkKICAgICAgICAgbV9zY3Jp
cHRzVG9FeGVjdXRlSW5PcmRlci5yZW1vdmUoMCwgbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGUp
OwogCi0gICAgZm9yIChhdXRvJiBzY3JpcHQgOiBzY3JpcHRzKSB7Ci0gICAgICAgIENhY2hlZFNj
cmlwdCogY2FjaGVkU2NyaXB0ID0gc2NyaXB0LmNhY2hlZFNjcmlwdCgpOwotICAgICAgICBSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCA9IHNjcmlwdC5yZWxlYXNlRWxlbWVudEFuZENsZWFyKCk7Ci0g
ICAgICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgbGVuZ3RoID0g
c2NyaXB0cy5zaXplKCk7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBSZWZQdHI8UGVuZGlu
Z1NjcmlwdD4gc2NyaXB0ID0gc3RkOjpleGNoYW5nZShzY3JpcHRzW2ldLCBudWxscHRyKTsKKyAg
ICAgICAgQVNTRVJUKHNjcmlwdCk7CiAgICAgICAgIC8vIFBhcGVyIG92ZXIgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDA1MAotICAgICAgICBpZiAoIWVsZW1lbnQp
CisgICAgICAgIC8vIFRoZSBjb2RlIGlzIGNoYW5nZWQuIE5vdyBpZiBtX3BlbmRpbmdBc3luY1Nj
cmlwdHMudGFrZSBjYW5ub3QgZmluZCB0aGUgdGFyZ2V0LCBpdCBmaWxscyBudWxscHRyIGluc3Rl
YWQgb2YgZW1wdHkgUGVuZGluZ1NjcmlwdC4KKyAgICAgICAgaWYgKCFzY3JpcHQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShlbGVtZW50
LmdldCgpKS0+ZXhlY3V0ZShjYWNoZWRTY3JpcHQpOworICAgICAgICBTY3JpcHRFbGVtZW50KiBz
Y3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSgmc2NyaXB0LT5lbGVtZW50
KCkpOworICAgICAgICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CisgICAgICAgIHNjcmlwdEVsZW1l
bnQtPmV4ZWN1dGUoc2NyaXB0LT5jYWNoZWRTY3JpcHQoKSk7CiAgICAgICAgIG1fZG9jdW1lbnQu
ZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRSdW5uZXIuaAppbmRleCA4Y2QzMzJhNTczNGMxY2I5MmYyYTVmZjVmYzRjY2ExNThmZTNiYzQx
Li42NmMzNDU2NTk1MDcxYjFkMjkwMTRmNmZiZmM0YTExNTc4MjJkMTc2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdFJ1bm5lci5oCkBAIC01Niw5ICs1Niw5IEBAIGNsYXNzIFNjcmlwdFJ1bm5lciB7CiAg
ICAgdm9pZCB0aW1lckZpcmVkKCk7CiAKICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKLSAgICBW
ZWN0b3I8UGVuZGluZ1NjcmlwdD4gbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlcjsKLSAgICBWZWN0
b3I8UGVuZGluZ1NjcmlwdD4gbV9zY3JpcHRzVG9FeGVjdXRlU29vbjsgLy8gaHR0cDovL3d3dy53
aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jc2V0LW9mLXNjcmlwdHMtdGhh
dC13aWxsLWV4ZWN1dGUtYXMtc29vbi1hcy1wb3NzaWJsZQotICAgIEhhc2hNYXA8U2NyaXB0RWxl
bWVudCosIFBlbmRpbmdTY3JpcHQ+IG1fcGVuZGluZ0FzeW5jU2NyaXB0czsKKyAgICBWZWN0b3I8
UmVmUHRyPFBlbmRpbmdTY3JpcHQ+PiBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyOworICAgIFZl
Y3RvcjxSZWZQdHI8UGVuZGluZ1NjcmlwdD4+IG1fc2NyaXB0c1RvRXhlY3V0ZVNvb247IC8vIGh0
dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3NldC1vZi1z
Y3JpcHRzLXRoYXQtd2lsbC1leGVjdXRlLWFzLXNvb24tYXMtcG9zc2libGUKKyAgICBIYXNoTWFw
PFNjcmlwdEVsZW1lbnQqLCBSZWZQdHI8UGVuZGluZ1NjcmlwdD4+IG1fcGVuZGluZ0FzeW5jU2Ny
aXB0czsKICAgICBUaW1lciBtX3RpbWVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggOWY0N2EyNGRjNTU2MWRjMjY4
MWYxNzBlYTU5YmVlZGE5YWI4NzM0Ny4uZjEzMDc3YWM5MjY3NmZjMDkxZjA0YjBhZjc5YTI0MmYx
ZThmMDY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1l
bnRQYXJzZXIuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCiAKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJIVE1MRG9jdW1lbnQuaCIKQEAgLTUwMCwxOCArNTAxLDE4IEBAIHZvaWQgSFRNTERvY3Vt
ZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24oKQogICAgIGVuZElm
RGVsYXllZCgpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6d2F0Y2hGb3JMb2FkKENh
Y2hlZFJlc291cmNlKiBjYWNoZWRTY3JpcHQpCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6d2F0
Y2hGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7Ci0gICAgQVNTRVJUKCFj
YWNoZWRTY3JpcHQtPmlzTG9hZGVkKCkpOworICAgIEFTU0VSVCghcGVuZGluZ1NjcmlwdC5pc0xv
YWRlZCgpKTsKICAgICAvLyBhZGRDbGllbnQgd291bGQgY2FsbCBub3RpZnlGaW5pc2hlZCBpZiB0
aGUgbG9hZCB3ZXJlIGNvbXBsZXRlLgogICAgIC8vIENhbGxlcnMgZG8gbm90IGV4cGVjdCB0byBi
ZSByZS1lbnRlcmVkIGZyb20gdGhpcyBjYWxsLCBzbyB0aGV5IHNob3VsZAogICAgIC8vIG5vdCBh
biBhbHJlYWR5LWxvYWRlZCBDYWNoZWRSZXNvdXJjZS4KLSAgICBjYWNoZWRTY3JpcHQtPmFkZENs
aWVudCh0aGlzKTsKKyAgICBwZW5kaW5nU2NyaXB0LmFkZENsaWVudCh0aGlzKTsKIH0KIAotdm9p
ZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BXYXRjaGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFNjcmlwdCkKK3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpzdG9wV2F0Y2hpbmdGb3JM
b2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7Ci0gICAgY2FjaGVkU2NyaXB0LT5y
ZW1vdmVDbGllbnQodGhpcyk7CisgICAgcGVuZGluZ1NjcmlwdC5yZW1vdmVDbGllbnQodGhpcyk7
CiB9CiAKIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmRDdXJyZW50SW5wdXRTdHJlYW1U
b1ByZWxvYWRTY2FubmVyQW5kU2NhbigpCkBAIC01MjEsNyArNTIyLDcgQEAgdm9pZCBIVE1MRG9j
dW1lbnRQYXJzZXI6OmFwcGVuZEN1cnJlbnRJbnB1dFN0cmVhbVRvUHJlbG9hZFNjYW5uZXJBbmRT
Y2FuKCkKICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKCptX3ByZWxvYWRlciwgKmRvY3VtZW50
KCkpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVk
UmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlm
eUZpbmlzaGVkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7CiAgICAgLy8gcHVtcFRv
a2VuaXplciBjYW4gY2F1c2UgdGhpcyBwYXJzZXIgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgRG9j
dW1lbnQsCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlzbid0IGRlbGV0ZWQgeWV0
LgpAQCAtNTM0LDcgKzUzNSw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5p
c2hlZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChj
YWNoZWRSZXNvdXJjZSk7CisgICAgbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGVTY3JpcHRzV2FpdGlu
Z0ZvckxvYWQocGVuZGluZ1NjcmlwdCk7CiAgICAgaWYgKCFpc1dhaXRpbmdGb3JTY3JpcHRzKCkp
CiAgICAgICAgIHJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCA1MTFl
MWQzOWNkYzYzMGY1MTI3YjZmMjgzY2M2MWE1NDhhNmYwN2IxLi5lMmJmYjMyNjlmNGM3YWIyMWQ3
NjQ3YTI1ODZjOGUxOWQ2YzgzYmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMjcsMTEgKzI3LDExIEBACiAjaWZuZGVmIEhUTUxE
b2N1bWVudFBhcnNlcl9oCiAjZGVmaW5lIEhUTUxEb2N1bWVudFBhcnNlcl9oCiAKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dFN0cmVhbS5oIgog
I2luY2x1ZGUgIkhUTUxTY3JpcHRSdW5uZXJIb3N0LmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZVRy
YWNrZXIuaCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiUGVuZGluZ1Nj
cmlwdENsaWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgogI2lu
Y2x1ZGUgIlhTU0F1ZGl0b3IuaCIKICNpbmNsdWRlICJYU1NBdWRpdG9yRGVsZWdhdGUuaCIKQEAg
LTQ3LDcgKzQ3LDcgQEAgY2xhc3MgSFRNTFRyZWVCdWlsZGVyOwogY2xhc3MgSFRNTFJlc291cmNl
UHJlbG9hZGVyOwogY2xhc3MgUHVtcFNlc3Npb247CiAKLWNsYXNzIEhUTUxEb2N1bWVudFBhcnNl
ciA6IHB1YmxpYyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIsIHByaXZhdGUgSFRNTFNjcmlwdFJ1
bm5lckhvc3QsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgSFRNTERvY3Vt
ZW50UGFyc2VyIDogcHVibGljIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciwgcHJpdmF0ZSBIVE1M
U2NyaXB0UnVubmVySG9zdCwgcHJpdmF0ZSBQZW5kaW5nU2NyaXB0Q2xpZW50IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEhUTUxEb2N1bWVu
dFBhcnNlcj4gY3JlYXRlKEhUTUxEb2N1bWVudCYpOwpAQCAtOTAsMTQgKzkwLDE0IEBAIGNsYXNz
IEhUTUxEb2N1bWVudFBhcnNlciA6IHB1YmxpYyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIsIHBy
aXZhdGUgSFRNTFNjcmlwdFJ1CiAgICAgYm9vbCBzaG91bGRBc3NvY2lhdGVDb25zb2xlTWVzc2Fn
ZXNXaXRoVGV4dFBvc2l0aW9uKCkgY29uc3QgZmluYWw7CiAKICAgICAvLyBIVE1MU2NyaXB0UnVu
bmVySG9zdAotICAgIHZvaWQgd2F0Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKikgZmluYWw7Ci0g
ICAgdm9pZCBzdG9wV2F0Y2hpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKikgZmluYWw7CisgICAg
dm9pZCB3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYpIGZpbmFsOworICAgIHZvaWQgc3RvcFdh
dGNoaW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0JikgZmluYWw7CiAgICAgSFRNTElucHV0U3RyZWFt
JiBpbnB1dFN0cmVhbSgpIGZpbmFsOwogICAgIGJvb2wgaGFzUHJlbG9hZFNjYW5uZXIoKSBjb25z
dCBmaW5hbDsKICAgICB2b2lkIGFwcGVuZEN1cnJlbnRJbnB1dFN0cmVhbVRvUHJlbG9hZFNjYW5u
ZXJBbmRTY2FuKCkgZmluYWw7CiAKLSAgICAvLyBDYWNoZWRSZXNvdXJjZUNsaWVudAotICAgIHZv
aWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSBmaW5hbDsKKyAgICAvLyBQZW5kaW5n
U2NyaXB0Q2xpZW50CisgICAgdm9pZCBub3RpZnlGaW5pc2hlZChQZW5kaW5nU2NyaXB0JikgZmlu
YWw7CiAKICAgICBEb2N1bWVudCogY29udGV4dEZvclBhcnNpbmdTZXNzaW9uKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKaW5kZXggMWI0
YzE1ZDk5OTZhZTgzNDE0NjMwNGZkZmRkN2JlZmZkZDMyMDBhOC4uZTcyZTBjMWI1MTEwMmExYTcw
Y2I0NDlkNTU4NzMyOTdhNmRkZmVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAgLTU4LDEzICs1OCwxNSBAQCBIVE1MU2NyaXB0UnVu
bmVyOjpIVE1MU2NyaXB0UnVubmVyKERvY3VtZW50JiBkb2N1bWVudCwgSFRNTFNjcmlwdFJ1bm5l
ckhvc3QmIGhvcwogSFRNTFNjcmlwdFJ1bm5lcjo6fkhUTUxTY3JpcHRSdW5uZXIoKQogewogICAg
IC8vIEZJWE1FOiBTaG91bGQgd2UgYmUgcGFzc2VkIGEgImRvbmUgbG9hZGluZy9wYXJzaW5nIiBj
YWxsYmFjayBzb29uZXIgdGhhbiBkZXN0cnVjdGlvbj8KLSAgICBpZiAobV9wYXJzZXJCbG9ja2lu
Z1NjcmlwdC5jYWNoZWRTY3JpcHQoKSAmJiBtX3BhcnNlckJsb2NraW5nU2NyaXB0LndhdGNoaW5n
Rm9yTG9hZCgpKQotICAgICAgICBzdG9wV2F0Y2hpbmdGb3JMb2FkKG1fcGFyc2VyQmxvY2tpbmdT
Y3JpcHQpOworICAgIGlmIChtX3BhcnNlckJsb2NraW5nU2NyaXB0KSB7CisgICAgICAgIGlmICht
X3BhcnNlckJsb2NraW5nU2NyaXB0LT5uZWVkc0xvYWRpbmcoKSAmJiBtX3BhcnNlckJsb2NraW5n
U2NyaXB0LT53YXRjaGluZ0ZvckxvYWQoKSkKKyAgICAgICAgICAgIHN0b3BXYXRjaGluZ0Zvckxv
YWQoKm1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpOworICAgIH0KIAogICAgIHdoaWxlICghbV9zY3Jp
cHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBQZW5kaW5nU2Ny
aXB0IHBlbmRpbmdTY3JpcHQgPSBtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcudGFrZUZp
cnN0KCk7Ci0gICAgICAgIGlmIChwZW5kaW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpICYmIHBlbmRp
bmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpCi0gICAgICAgICAgICBzdG9wV2F0Y2hpbmdGb3JM
b2FkKHBlbmRpbmdTY3JpcHQpOworICAgICAgICBSZWZQdHI8UGVuZGluZ1NjcmlwdD4gcGVuZGlu
Z1NjcmlwdCA9IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy50YWtlRmlyc3QoKTsKKyAg
ICAgICAgaWYgKHBlbmRpbmdTY3JpcHQtPm5lZWRzTG9hZGluZygpICYmIHBlbmRpbmdTY3JpcHQt
PndhdGNoaW5nRm9yTG9hZCgpKQorICAgICAgICAgICAgc3RvcFdhdGNoaW5nRm9yTG9hZCgqcGVu
ZGluZ1NjcmlwdCk7CiAgICAgfQogfQogCkBAIC04Nyw3ICs4OSw3IEBAIGlubGluZSBSZWY8RXZl
bnQ+IGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpCiAgICAgcmV0dXJuIEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0KIAotU2NyaXB0U291cmNlQ29k
ZSBIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5n
U2NyaXB0JiBzY3JpcHQsIGJvb2wmIGVycm9yT2NjdXJyZWQpIGNvbnN0CitTY3JpcHRTb3VyY2VD
b2RlIEhUTUxTY3JpcHRSdW5uZXI6OnNvdXJjZUZyb21QZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3Jp
cHQmIHNjcmlwdCwgYm9vbCYgZXJyb3JPY2N1cnJlZCkgY29uc3QKIHsKICAgICBpZiAoc2NyaXB0
LmNhY2hlZFNjcmlwdCgpKSB7CiAgICAgICAgIGVycm9yT2NjdXJyZWQgPSBzY3JpcHQuY2FjaGVk
U2NyaXB0KCktPmVycm9yT2NjdXJyZWQoKTsKQEAgLTk1LDcgKzk3LDcgQEAgU2NyaXB0U291cmNl
Q29kZSBIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdChjb25zdCBQZW5k
aW5nU2NyaXB0JgogICAgICAgICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuY2FjaGVk
U2NyaXB0KCkpOwogICAgIH0KICAgICBlcnJvck9jY3VycmVkID0gZmFsc2U7Ci0gICAgcmV0dXJu
IFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmVsZW1lbnQoKS0+dGV4dENvbnRlbnQoKSwgZG9jdW1l
bnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdC5zdGFydGluZ1Bvc2l0
aW9uKCkpOworICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5lbGVtZW50KCkudGV4
dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNj
cmlwdC5zdGFydGluZ1Bvc2l0aW9uKCkpOwogfQogCiBib29sIEhUTUxTY3JpcHRSdW5uZXI6Omlz
UGVuZGluZ1NjcmlwdFJlYWR5KGNvbnN0IFBlbmRpbmdTY3JpcHQmIHNjcmlwdCkKQEAgLTEwNSw3
ICsxMDcsNyBAQCBib29sIEhUTUxTY3JpcHRSdW5uZXI6OmlzUGVuZGluZ1NjcmlwdFJlYWR5KGNv
bnN0IFBlbmRpbmdTY3JpcHQmIHNjcmlwdCkKICAgICBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5
bGVzaGVldHMgPSAhbV9kb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCk7CiAgICAgaWYg
KG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChzY3JpcHQuY2FjaGVkU2NyaXB0KCkgJiYgIXNjcmlwdC5jYWNoZWRTY3JpcHQo
KS0+aXNMb2FkZWQoKSkKKyAgICBpZiAoc2NyaXB0Lm5lZWRzTG9hZGluZygpICYmICFzY3JpcHQu
aXNMb2FkZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMTE1LDEwICsxMTcsMTEgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGFyc2lu
Z0Jsb2NraW5nU2NyaXB0KCkKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKCFp
c0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAgICBBU1NFUlQobV9kb2N1bWVudC0+aGF2ZVN0eWxlc2hl
ZXRzTG9hZGVkKCkpOwotICAgIEFTU0VSVChpc1BlbmRpbmdTY3JpcHRSZWFkeShtX3BhcnNlckJs
b2NraW5nU2NyaXB0KSk7CisgICAgQVNTRVJUKGlzUGVuZGluZ1NjcmlwdFJlYWR5KCptX3BhcnNl
ckJsb2NraW5nU2NyaXB0KSk7CiAKICAgICBJbnNlcnRpb25Qb2ludFJlY29yZCBpbnNlcnRpb25Q
b2ludFJlY29yZChtX2hvc3QuaW5wdXRTdHJlYW0oKSk7Ci0gICAgZXhlY3V0ZVBlbmRpbmdTY3Jp
cHRBbmREaXNwYXRjaEV2ZW50KG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpOworICAgIFJlZlB0cjxQ
ZW5kaW5nU2NyaXB0PiBwcm90ZWN0b3IgPSBzdGQ6OmV4Y2hhbmdlKG1fcGFyc2VyQmxvY2tpbmdT
Y3JpcHQsIG51bGxwdHIpOworICAgIGV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVu
dCgqcHJvdGVjdG9yKTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVuZGlu
Z1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKQEAg
LTEyNywxNSArMTMwLDEzIEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBlbmRpbmdT
Y3JpcHRBbmREaXNwYXRjaEV2ZW50KFBlbmRpbmdTY3JpcHQmIHBlbmRpCiAgICAgU2NyaXB0U291
cmNlQ29kZSBzb3VyY2VDb2RlID0gc291cmNlRnJvbVBlbmRpbmdTY3JpcHQocGVuZGluZ1Njcmlw
dCwgZXJyb3JPY2N1cnJlZCk7CiAKICAgICAvLyBTdG9wIHdhdGNoaW5nIGxvYWRzIGJlZm9yZSBl
eGVjdXRlU2NyaXB0IHRvIHByZXZlbnQgcmVjdXJzaW9uIGlmIHRoZSBzY3JpcHQgcmVsb2FkcyBp
dHNlbGYuCi0gICAgaWYgKHBlbmRpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkgJiYgcGVuZGluZ1Nj
cmlwdC53YXRjaGluZ0ZvckxvYWQoKSkKKyAgICBpZiAocGVuZGluZ1NjcmlwdC5uZWVkc0xvYWRp
bmcoKSAmJiBwZW5kaW5nU2NyaXB0LndhdGNoaW5nRm9yTG9hZCgpKQogICAgICAgICBzdG9wV2F0
Y2hpbmdGb3JMb2FkKHBlbmRpbmdTY3JpcHQpOwogCiAgICAgaWYgKCFpc0V4ZWN1dGluZ1Njcmlw
dCgpKQogICAgICAgICBNaWNyb3Rhc2tRdWV1ZTo6bWFpblRocmVhZFF1ZXVlKCkucGVyZm9ybU1p
Y3JvdGFza0NoZWNrcG9pbnQoKTsKIAotICAgIC8vIENsZWFyIHRoZSBwZW5kaW5nIHNjcmlwdCBi
ZWZvcmUgcG9zc2libGUgcmVudHJhbmN5IGZyb20gZXhlY3V0ZVNjcmlwdCgpCi0gICAgUmVmUHRy
PEVsZW1lbnQ+IGVsZW1lbnQgPSBwZW5kaW5nU2NyaXB0LnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIo
KTsKLSAgICBpZiAoU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVu
dElmUG9zc2libGUoZWxlbWVudC5nZXQoKSkpIHsKKyAgICBpZiAoU2NyaXB0RWxlbWVudCogc2Ny
aXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoJnBlbmRpbmdTY3JpcHQuZWxl
bWVudCgpKSkgewogICAgICAgICBOZXN0aW5nTGV2ZWxJbmNyZW1lbnRlciBuZXN0aW5nTGV2ZWxJ
bmNyZW1lbnRlcihtX3NjcmlwdE5lc3RpbmdMZXZlbCk7CiAgICAgICAgIElnbm9yZURlc3RydWN0
aXZlV3JpdGVDb3VudEluY3JlbWVudGVyIGlnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3Jl
bWVudGVyKG1fZG9jdW1lbnQpOwogICAgICAgICBpZiAoZXJyb3JPY2N1cnJlZCkKQEAgLTE0Myw3
ICsxNDQsNyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5k
RGlzcGF0Y2hFdmVudChQZW5kaW5nU2NyaXB0JiBwZW5kaQogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIEFTU0VSVChpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAgICAgICAgICAgIHNjcmlwdEVs
ZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7Ci0gICAgICAgICAgICBlbGVtZW50LT5k
aXNwYXRjaEV2ZW50KGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpKTsKKyAgICAgICAgICAgIHBlbmRp
bmdTY3JpcHQuZWxlbWVudCgpLmRpc3BhdGNoRXZlbnQoY3JlYXRlU2NyaXB0TG9hZEV2ZW50KCkp
OwogICAgICAgICB9CiAgICAgfQogICAgIEFTU0VSVCghaXNFeGVjdXRpbmdTY3JpcHQoKSk7CkBA
IC0xNTIsMTUgKzE1MywxMyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5n
U2NyaXB0QW5kRGlzcGF0Y2hFdmVudChQZW5kaW5nU2NyaXB0JiBwZW5kaQogdm9pZCBIVE1MU2Ny
aXB0UnVubmVyOjp3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKIHsK
ICAgICBBU1NFUlQoIXBlbmRpbmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpOwotICAgIG1faG9z
dC53YXRjaEZvckxvYWQocGVuZGluZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSk7Ci0gICAgcGVuZGlu
Z1NjcmlwdC5zZXRXYXRjaGluZ0ZvckxvYWQodHJ1ZSk7CisgICAgbV9ob3N0LndhdGNoRm9yTG9h
ZChwZW5kaW5nU2NyaXB0KTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpzdG9wV2F0Y2hp
bmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7CiAgICAgQVNTRVJUKHBl
bmRpbmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpOwotICAgIG1faG9zdC5zdG9wV2F0Y2hpbmdG
b3JMb2FkKHBlbmRpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwotICAgIHBlbmRpbmdTY3JpcHQu
c2V0V2F0Y2hpbmdGb3JMb2FkKGZhbHNlKTsKKyAgICBtX2hvc3Quc3RvcFdhdGNoaW5nRm9yTG9h
ZChwZW5kaW5nU2NyaXB0KTsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggMTAu
Mi41LjExICJBbiBlbmQgdGFnIHdob3NlIHRhZyBuYW1lIGlzICdzY3JpcHQnIgpAQCAtMTg3LDIx
ICsxODYsMjEgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxl
bWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2kKIAogYm9vbCBIVE1MU2NyaXB0UnVu
bmVyOjpoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEhbV9w
YXJzZXJCbG9ja2luZ1NjcmlwdC5lbGVtZW50KCk7CisgICAgcmV0dXJuICEhbV9wYXJzZXJCbG9j
a2luZ1NjcmlwdDsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGFyc2luZ0Js
b2NraW5nU2NyaXB0cygpCiB7Ci0gICAgd2hpbGUgKGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkg
JiYgaXNQZW5kaW5nU2NyaXB0UmVhZHkobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCkpCisgICAgd2hp
bGUgKGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkgJiYgaXNQZW5kaW5nU2NyaXB0UmVhZHkoKm1f
cGFyc2VyQmxvY2tpbmdTY3JpcHQpKQogICAgICAgICBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2Ny
aXB0KCk7CiB9CiAKLXZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5n
Rm9yTG9hZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkU2NyaXB0KQordm9pZCBIVE1MU2NyaXB0UnVu
bmVyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdT
Y3JpcHQpCiB7CiAgICAgQVNTRVJUKCFpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAgICBBU1NFUlQo
aGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYWNoZWRTY3Jp
cHQsIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkgPT0gY2FjaGVkU2NyaXB0
KTsKLSAgICBBU1NFUlQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKS0+aXNM
b2FkZWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChwZW5kaW5nU2NyaXB0LCBtX3BhcnNlckJsb2Nr
aW5nU2NyaXB0LmdldCgpID09ICZwZW5kaW5nU2NyaXB0KTsKKyAgICBBU1NFUlQobV9wYXJzZXJC
bG9ja2luZ1NjcmlwdC0+aXNMb2FkZWQoKSk7CiAgICAgZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1Nj
cmlwdHMoKTsKIH0KIApAQCAtMjIxLDEzICsyMjAsMTMgQEAgYm9vbCBIVE1MU2NyaXB0UnVubmVy
OjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JQYXJzaW5nKCkKICAgICB3aGlsZSAoIW1fc2NyaXB0
c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJUKCFpc0V4
ZWN1dGluZ1NjcmlwdCgpKTsKICAgICAgICAgQVNTRVJUKCFoYXNQYXJzZXJCbG9ja2luZ1Njcmlw
dCgpKTsKLSAgICAgICAgQVNTRVJUKG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5maXJz
dCgpLmNhY2hlZFNjcmlwdCgpKTsKLSAgICAgICAgaWYgKCFtX3NjcmlwdHNUb0V4ZWN1dGVBZnRl
clBhcnNpbmcuZmlyc3QoKS5jYWNoZWRTY3JpcHQoKS0+aXNMb2FkZWQoKSkgewotICAgICAgICAg
ICAgd2F0Y2hGb3JMb2FkKG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5maXJzdCgpKTsK
KyAgICAgICAgQVNTRVJUKG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5maXJzdCgpLT5u
ZWVkc0xvYWRpbmcoKSk7CisgICAgICAgIGlmICghbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJz
aW5nLmZpcnN0KCktPmlzTG9hZGVkKCkpIHsKKyAgICAgICAgICAgIHdhdGNoRm9yTG9hZCgqbV9z
Y3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLmZpcnN0KCkpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIFBlbmRpbmdTY3JpcHQgZmlyc3QgPSBtX3Njcmlw
dHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcudGFrZUZpcnN0KCk7Ci0gICAgICAgIGV4ZWN1dGVQZW5k
aW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChmaXJzdCk7CisgICAgICAgIFJlZlB0cjxQZW5kaW5n
U2NyaXB0PiBmaXJzdCA9IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy50YWtlRmlyc3Qo
KTsKKyAgICAgICAgZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KCpmaXJzdCk7
CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlzIHRoaXMgbV9kb2N1bWVudCBjaGVjayBmb3I/CiAg
ICAgICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIz
Nyw0MCArMjM2LDM4IEBAIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0
aW5nRm9yUGFyc2luZygpCiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBhcnNpbmdC
bG9ja2luZ1NjcmlwdChFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghcmVxdWVzdFBlbmRp
bmdTY3JpcHQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCwgZWxlbWVudCkpCisgICAgQVNTRVJUKCFt
X3BhcnNlckJsb2NraW5nU2NyaXB0KTsKKyAgICBpZiAoIShtX3BhcnNlckJsb2NraW5nU2NyaXB0
ID0gcmVxdWVzdFBlbmRpbmdTY3JpcHQoZWxlbWVudCkpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBBU1NFUlQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSk7CisgICAgQVNT
RVJUKG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQtPm5lZWRzTG9hZGluZygpKTsKIAogICAgIC8vIFdl
IG9ubHkgY2FyZSBhYm91dCBhIGxvYWQgY2FsbGJhY2sgaWYgY2FjaGVkU2NyaXB0IGlzIG5vdCBh
bHJlYWR5CiAgICAgLy8gaW4gdGhlIGNhY2hlLiBDYWxsZXJzIHdpbGwgYXR0ZW1wdCB0byBydW4g
dGhlIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQKICAgICAvLyBpZiBwb3NzaWJsZSBiZWZvcmUgcmV0
dXJuaW5nIGNvbnRyb2wgdG8gdGhlIHBhcnNlci4KLSAgICBpZiAoIW1fcGFyc2VyQmxvY2tpbmdT
Y3JpcHQuY2FjaGVkU2NyaXB0KCktPmlzTG9hZGVkKCkpCi0gICAgICAgIHdhdGNoRm9yTG9hZCht
X3BhcnNlckJsb2NraW5nU2NyaXB0KTsKKyAgICBpZiAoIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQt
PmlzTG9hZGVkKCkpCisgICAgICAgIHdhdGNoRm9yTG9hZCgqbV9wYXJzZXJCbG9ja2luZ1Njcmlw
dCk7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdERlZmVycmVkU2NyaXB0KEVs
ZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgUGVuZGluZ1NjcmlwdCBwZW5kaW5nU2NyaXB0OwotICAg
IGlmICghcmVxdWVzdFBlbmRpbmdTY3JpcHQocGVuZGluZ1NjcmlwdCwgZWxlbWVudCkpCisgICAg
UmVmUHRyPFBlbmRpbmdTY3JpcHQ+IHBlbmRpbmdTY3JpcHQ7CisgICAgaWYgKCEocGVuZGluZ1Nj
cmlwdCA9IHJlcXVlc3RQZW5kaW5nU2NyaXB0KGVsZW1lbnQpKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQVNTRVJUKHBlbmRpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkpOworICAgIEFTU0VSVChw
ZW5kaW5nU2NyaXB0LT5uZWVkc0xvYWRpbmcoKSk7CiAgICAgbV9zY3JpcHRzVG9FeGVjdXRlQWZ0
ZXJQYXJzaW5nLmFwcGVuZChwZW5kaW5nU2NyaXB0KTsKIH0KIAotYm9vbCBIVE1MU2NyaXB0UnVu
bmVyOjpyZXF1ZXN0UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0LCBF
bGVtZW50KiBzY3JpcHQpIGNvbnN0CitSZWZQdHI8UGVuZGluZ1NjcmlwdD4gSFRNTFNjcmlwdFJ1
bm5lcjo6cmVxdWVzdFBlbmRpbmdTY3JpcHQoRWxlbWVudCogc2NyaXB0KSBjb25zdAogewotICAg
IEFTU0VSVCghcGVuZGluZ1NjcmlwdC5lbGVtZW50KCkpOwotICAgIHBlbmRpbmdTY3JpcHQuc2V0
RWxlbWVudChzY3JpcHQpOwogICAgIC8vIFRoaXMgc2hvdWxkIGNvcnJlY3RseSByZXR1cm4gMCBm
b3IgZW1wdHkgb3IgaW52YWxpZCBzcmNWYWx1ZXMuCiAgICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRT
Y3JpcHQgPSB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKHNjcmlwdCktPmNhY2hlZFNjcmlwdCgp
LmdldCgpOwotICAgIGlmICghY2FjaGVkU2NyaXB0KSB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVk
KCk7IC8vIERpc3BhdGNoIGVycm9yIGV2ZW50LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHBlbmRpbmdTY3JpcHQuc2V0Q2FjaGVkU2NyaXB0KGNhY2hlZFNjcmlwdCk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKGNhY2hlZFNjcmlwdCkKKyAgICAgICAgcmV0dXJuIFBlbmRp
bmdTY3JpcHQ6OmNyZWF0ZSgqc2NyaXB0LCBjYWNoZWRTY3JpcHQpOworCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsgLy8gRGlzcGF0Y2ggZXJyb3IgZXZlbnQuCisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKIC8vIFRoaXMgbWV0aG9kIGlzIG1lYW50IHRvIG1hdGNoIHRoZSBIVE1MNSBkZWZpbml0aW9u
IG9mICJydW5uaW5nIGEgc2NyaXB0IgpAQCAtMzA5LDggKzMwNiw3IEBAIHZvaWQgSFRNTFNjcmlw
dFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uJiBz
Y3JpcHRTdGFyCiAgICAgICAgICAgICByZXF1ZXN0RGVmZXJyZWRTY3JpcHQoc2NyaXB0KTsKICAg
ICAgICAgZWxzZSBpZiAoc2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkg
ewogICAgICAgICAgICAgaWYgKG1fc2NyaXB0TmVzdGluZ0xldmVsID09IDEpIHsKLSAgICAgICAg
ICAgICAgICBtX3BhcnNlckJsb2NraW5nU2NyaXB0LnNldEVsZW1lbnQoc2NyaXB0KTsKLSAgICAg
ICAgICAgICAgICBtX3BhcnNlckJsb2NraW5nU2NyaXB0LnNldFN0YXJ0aW5nUG9zaXRpb24oc2Ny
aXB0U3RhcnRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJCbG9ja2luZ1Njcmlw
dCA9IFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZSgqc2NyaXB0LCBzY3JpcHRTdGFydFBvc2l0aW9uKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBz
b3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVj
dXRpb24obV9kb2N1bWVudCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgICAgICAgICAgICAg
IHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKaW5kZXggNDViZjhkMDMyNGY4ZWQy
MWM5ZTZlOGRkZTE0YmJjOWRlMDZjYmM3YS4uNDQxZTRlMTBjZjQ1Y2E5ZjRkNWYwMTZkNjZmMjdl
MTYyY2VkZmVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNj
cmlwdFJ1bm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRS
dW5uZXIuaApAQCAtNTEsNyArNTEsNyBAQCBjbGFzcyBIVE1MU2NyaXB0UnVubmVyIHsKICAgICAv
LyBQcm9jZXNzZXMgdGhlIHBhc3NlZCBpbiBzY3JpcHQgYW5kIGFueSBwZW5kaW5nIHNjcmlwdHMg
aWYgcG9zc2libGUuCiAgICAgdm9pZCBleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0
VG9Qcm9jZXNzLCBjb25zdCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCi0g
ICAgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKik7Cisg
ICAgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmKTsKICAg
ICBib29sIGhhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKSBjb25zdCB7IHJldHVybiBt
X2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHM7IH0KICAgICB2b2lkIGV4ZWN1dGVTY3Jp
cHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCk7CiAgICAgYm9vbCBleGVjdXRlU2NyaXB0c1dhaXRp
bmdGb3JQYXJzaW5nKCk7CkBAIC02OCw3ICs2OCw3IEBAIGNsYXNzIEhUTUxTY3JpcHRSdW5uZXIg
ewogCiAgICAgdm9pZCByZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KEVsZW1lbnQqKTsKICAg
ICB2b2lkIHJlcXVlc3REZWZlcnJlZFNjcmlwdChFbGVtZW50Kik7Ci0gICAgYm9vbCByZXF1ZXN0
UGVuZGluZ1NjcmlwdChQZW5kaW5nU2NyaXB0JiwgRWxlbWVudCopIGNvbnN0OworICAgIFJlZlB0
cjxQZW5kaW5nU2NyaXB0PiByZXF1ZXN0UGVuZGluZ1NjcmlwdChFbGVtZW50KikgY29uc3Q7CiAK
ICAgICB2b2lkIHJ1blNjcmlwdChFbGVtZW50KiwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRT
dGFydFBvc2l0aW9uKTsKIApAQCAtNzYsMTIgKzc2LDEyIEBAIGNsYXNzIEhUTUxTY3JpcHRSdW5u
ZXIgewogICAgIHZvaWQgd2F0Y2hGb3JMb2FkKFBlbmRpbmdTY3JpcHQmKTsKICAgICB2b2lkIHN0
b3BXYXRjaGluZ0ZvckxvYWQoUGVuZGluZ1NjcmlwdCYpOwogICAgIGJvb2wgaXNQZW5kaW5nU2Ny
aXB0UmVhZHkoY29uc3QgUGVuZGluZ1NjcmlwdCYpOwotICAgIFNjcmlwdFNvdXJjZUNvZGUgc291
cmNlRnJvbVBlbmRpbmdTY3JpcHQoY29uc3QgUGVuZGluZ1NjcmlwdCYsIGJvb2wmIGVycm9yT2Nj
dXJyZWQpIGNvbnN0OworICAgIFNjcmlwdFNvdXJjZUNvZGUgc291cmNlRnJvbVBlbmRpbmdTY3Jp
cHQoUGVuZGluZ1NjcmlwdCYsIGJvb2wmIGVycm9yT2NjdXJyZWQpIGNvbnN0OwogCiAgICAgRG9j
dW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgSFRNTFNjcmlwdFJ1bm5lckhvc3QmIG1faG9zdDsKLSAg
ICBQZW5kaW5nU2NyaXB0IG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQ7Ci0gICAgRGVxdWU8UGVuZGlu
Z1NjcmlwdD4gbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nOyAvLyBodHRwOi8vd3d3Lndo
YXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNsaXN0LW9mLXNjcmlwdHMtdGhh
dC13aWxsLWV4ZWN1dGUtd2hlbi10aGUtZG9jdW1lbnQtaGFzLWZpbmlzaGVkLXBhcnNpbmcKKyAg
ICBSZWZQdHI8UGVuZGluZ1NjcmlwdD4gbV9wYXJzZXJCbG9ja2luZ1NjcmlwdDsKKyAgICBEZXF1
ZTxSZWZQdHI8UGVuZGluZ1NjcmlwdD4+IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZzsg
Ly8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jbGlz
dC1vZi1zY3JpcHRzLXRoYXQtd2lsbC1leGVjdXRlLXdoZW4tdGhlLWRvY3VtZW50LWhhcy1maW5p
c2hlZC1wYXJzaW5nCiAgICAgdW5zaWduZWQgbV9zY3JpcHROZXN0aW5nTGV2ZWw7CiAKICAgICAv
LyBXZSBvbmx5IHdhbnQgc3R5bGVzaGVldCBsb2FkcyB0byB0cmlnZ2VyIHNjcmlwdCBleGVjdXRp
b24gaWYgc2NyaXB0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
U2NyaXB0UnVubmVySG9zdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlw
dFJ1bm5lckhvc3QuaAppbmRleCAxZjIyODk2NTdlMDA0NzZhZjk0MDk3ZjI1MDNlNTI1MmE0YmEx
YTg1Li44YTYzYmNiMGU5NzhhODQ0NzFhMzUzYWM3NTczNmYzYzRhY2FiYWE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVySG9zdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXJIb3N0LmgKQEAgLTMw
LDkgKzMwLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNoZWRSZXNvdXJj
ZTsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBIVE1MSW5wdXRTdHJlYW07CitjbGFzcyBQZW5kaW5n
U2NyaXB0OwogY2xhc3MgU2NyaXB0U291cmNlQ29kZTsKIAogY2xhc3MgSFRNTFNjcmlwdFJ1bm5l
ckhvc3QgewpAQCAtNDAsOSArNDAsOSBAQCBjbGFzcyBIVE1MU2NyaXB0UnVubmVySG9zdCB7CiAg
ICAgdmlydHVhbCB+SFRNTFNjcmlwdFJ1bm5lckhvc3QoKSB7IH0KIAogICAgIC8vIEltcGxlbWVu
dG9ycyBzaG91bGQgY2FsbCBjYWNoZWRSZXNvdXJjZS0+YWRkQ2xpZW50KCkgaGVyZSBvciBzb29u
IGFmdGVyLgotICAgIHZpcnR1YWwgdm9pZCB3YXRjaEZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHdhdGNoRm9yTG9hZChQZW5kaW5nU2NyaXB0JikgPSAwOwog
ICAgIC8vIEltcGxlbWVudG9ycyBtdXN0IGNhbGwgY2FjaGVkUmVzb3VyY2UtPnJlbW92ZUNsaWVu
dCgpIGltbWVkaWF0ZWx5LgotICAgIHZpcnR1YWwgdm9pZCBzdG9wV2F0Y2hpbmdGb3JMb2FkKENh
Y2hlZFJlc291cmNlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wV2F0Y2hpbmdGb3JMb2Fk
KFBlbmRpbmdTY3JpcHQmKSA9IDA7CiAKICAgICB2aXJ0dWFsIEhUTUxJbnB1dFN0cmVhbSYgaW5w
dXRTdHJlYW0oKSA9IDA7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287411</attachid>
            <date>2016-08-30 11:14:00 -0700</date>
            <delta_ts>2016-08-30 16:17:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161350-20160830111149.patch</filename>
            <type>text/plain</type>
            <size>40509</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1MTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNjYTcyZTNhNzFjOGFl
NWRlN2QxZGQ3MjVjZjRiOWE0ODlhNzFjMy4uZTI0YjQ1MjIzMjcwYmM3N2UyNDljNGJiNWE3NmNk
ODliMjYyNmY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE2LTA4LTMwICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIE1ha2UgUGVuZGlu
Z1NjcmlwdCBhcyByZWYtY291bnRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxMzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB3aGlsZSBQZW5kaW5nU2NyaXB0IGlzIGNvcHlhYmxl
LCBQZW5kaW5nU2NyaXB0IGlzIGFsc28gQ2FjaGVkUmVzb3VyY2VDbGllbnQuCisgICAgICAgIFNv
IHdoZW4gY29weWluZyB0aGlzLCB0aGUgY2xpZW50IHJlZ2lzdHJhdGlvbiBpcyBkb25lIGluIFBl
bmRpbmdTY3JpcHQncyBvcGVyYXRvcj0gZXRjLgorICAgICAgICBIb3dldmVyLCB0aGlzIGNvcHlp
bmcgZnVuY3Rpb25hbGl0eSBpcyBub3QgZWZmZWN0aXZlbHkgdXNlZC4KKyAgICAgICAgSW4gdGhp
cyBwYXRjaCwgd2UgY2hhbmdlIHRoaXMgUGVuZGluZ1NjcmlwdCB0byByZWYtY291bnRlZCBjbGFz
cyBhbmQgbWFrZSBpdCBub25jb3B5YWJsZS4KKyAgICAgICAgVGhpcyBjaGFuZ2UgbWFrZXMgdGhp
bmdzIHNpbXBsZSAoZHJvcHBpbmcgdGhpcyBjb3B5aW5nIGZ1bmN0aW9uYWxpdHkpLCBhbmQgZHJv
cCB1bm5lY2Vzc2FyeSBhZGRDbGllbnQgLyByZW1vdmVDbGllbnQgY2FsbHMuCisgICAgICAgIEFu
ZCB3ZSBhbHNvIHNpbXBsaWZ5IFBlbmRpbmdTY3JpcHQgY2xhc3MuIFNpbmNlIHdlIGNhbiBvZmZl
ciBhbGwgdGhlIG1lbWJlcnMgYXQgdGhlIGNvbnN0cnVjdGlvbiB0aW1lLCB3ZSBkb24ndCBuZWVk
IGFueSBzZXR0ZXJzIGxpa2Ugc2V0Q2FjaGVkU2NyaXB0LCBzZXRFbGVtZW50IGV0Yy4KKyAgICAg
ICAgVGhpcyBwcmV2ZW50IHVzIGZyb20gYWNjaWRlbnRhbGx5IGdlbmVyYXRpbmcgdGhlIGhhbGYt
YmFrZWQgcGVuZGluZyBzY3JpcHQuCisKKyAgICAgICAgRnVydGhlcm1vcmUsIGJ5IGNoYW5naW5n
IFBlbmRpbmdTY3JpcHQgbm9uY29weWFibGUgJiByZWYtY291bnRlZCwgd2UgZWFzaWx5IG1ha2Ug
aXQgb2JzZXJ2YWJsZS4KKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgYWRkIFBlbmRpbmdTY3Jp
cHRDbGllbnQgdG8gcmVjZWl2ZSB0aGUgbm90aWZpY2F0aW9uIGZyb20gUGVuZGluZ1NjcmlwdC4K
KyAgICAgICAgUHJldmlvdXNseSwgd2UgZGlyZWN0bHkgdXNlZCBDYWNoZWRTY3JpcHQgaW4gUGVu
ZGluZ1NjcmlwdCB0byByZWNlaXZlIHRoZSBub3RpZmljYXRpb24uCisgICAgICAgIFdoZW4gaW50
cm9kdWNpbmcgU2NyaXB0TW9kdWxlR3JhcGggYW5kIG1ha2luZyB0aGlzIFBlbmRpbmdTY3JpcHQg
dGhlIGNvbnRhaW5lciBvZiB0aGUgYm90aCBDYWNoZWRTY3JpcHQgYW5kIFNjcmlwdE1vZHVsZUdy
YXBoLAorICAgICAgICBoaWRpbmcgdGhlIHJhdyBDYWNoZWRTY3JpcHQgb3BlcmF0aW9ucyBpcyB1
c2VmdWwuCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlcy4KKworICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vUGVuZGluZ1Njcmlw
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmNyZWF0ZSk6IFRoZXNlIGZhY3Rvcnkg
ZnVuY3Rpb25zIHRha2UgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29uc3RydWN0IHRo
ZSBQZW5kaW5nU2NyaXB0LiBTbyB0aGUgc2V0dGVycyBvZiBQZW5kaW5nU2NyaXB0IGFyZSBkcm9w
cGVkLgorICAgICAgICBUaGlzIGlzIGJldHRlciBzaW5jZSB3ZSBub3cgZG8gbm90IGV4cG9zZSBh
bnkgaGFsZi1iYWtlZCBwZW5kaW5nIHNjcmlwdCBhY2NpZGVudGFsbHkuCisgICAgICAgIChXZWJD
b3JlOjpQZW5kaW5nU2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCk6CisgICAgICAgIChXZWJD
b3JlOjpQZW5kaW5nU2NyaXB0Ojpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZW5kaW5nU2NyaXB0Ojppc0xvYWRlZCk6IFdoZW4gaW50cm9kdWNpbmcgU2NyaXB0TW9kdWxlR3Jh
cGgsIHRoaXMgd2lsbCBxdWVyeSB0byBlaXRoZXIgQ2FjaGVkU2NyaXB0IG9yIFNjcmlwdE1vZHVs
ZUdyYXBoLiBQZW5kaW5nU2NyaXB0IHdpbGwgYmVjb21lIHRoZSBjb250YWluZXIgZm9yIHRoZSBi
b3RoIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6c2V0Q2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmNsZWFyQ2xpZW50KTogUGVuZGluZ1Nj
cmlwdCBpcyBub3cgb2JzZXJ2YWJsZSBieSBQZW5kaW5nU2NyaXB0Q2xpZW50LiBUaGlzIGF2b2lk
cyB0b3VjaGluZyBDYWNoZWRTY3JpcHQgaW4gUGVuZGluZ1NjcmlwdCBkaXJlY3RseS4KKyAgICAg
ICAgVGhhdCBpcyBnb29kIHdoZW4gd2UgaW50cm9kdWNlIFNjcmlwdE1vZHVsZUdyYXBoIGFuZCBt
YWtlIFBlbmRpbmdTY3JpcHQgdGhlIGNvbnRhaW5lciBvZiB0aGUgYm90aCBDYWNoZWRTY3JpcHQg
YW5kIFNjcmlwdE1vZHVsZUdyYXBoLgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6
cmVsZWFzZUVsZW1lbnRBbmRDbGVhcik6IERlbGV0ZWQuIFByZXZpb3VzbHksIFBlbmRpbmdTY3Jp
cHQgaXMgbm90IHJlZi1jb3VudGVkLiBTbyB3aGVuIHdlIHdvdWxkIGxpa2UgdG8gc2F5ICJ0aGlz
IHBlbmRpbmcgc2NyaXB0IGlzIGVtcHR5IiwKKyAgICAgICAgd2UgdXNlZCB0aGUgcGVuZGluZyBz
Y3JpcHQgd2l0aCBgbV9lbGVtZW50ID0gbnVsbHB0cmAuIFRoaXMgcmVsZWFzZUVsZW1lbnRBbmRD
bGVhciBjbGVhcmVkIHRoaXMgbV9lbGVtZW50IGFuZCBtYWRlIHRoZSBwZW5kaW5nIHNjcmlwdCBl
bXB0eS4gTm93LCB3ZSB1c2UgUmVmUHRyPFBlbmRpbmdTY3JpcHQ+CisgICAgICAgIGFuZCBlbXB0
eSBvbmUgaXMganVzdCByZXByZXNlbnRlZCBieSB0aGUgbnVsbHB0ci4gVGhpcyBmdW5jdGlvbiBp
cyBubyBsb25nZXIgbmVjZXNzYXJ5LiBEcm9wcGVkLgorICAgICAgICAoV2ViQ29yZTo6UGVuZGlu
Z1NjcmlwdDo6c2V0Q2FjaGVkU2NyaXB0KTogRGVsZXRlZC4gVGhlIGZpZWxkcyBhcmUgc2V0IGlu
IHRoZSBjb25zdHJ1Y3Rvci4gU28gdGhpcyBzZXR0ZXIgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4g
RHJvcHBlZC4KKyAgICAgICAgKiBkb20vUGVuZGluZ1NjcmlwdC5oOgorICAgICAgICAqIGRvbS9Q
ZW5kaW5nU2NyaXB0Q2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXJIb3N0LmguCisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2Ny
aXB0Q2xpZW50Ojp+UGVuZGluZ1NjcmlwdENsaWVudCk6CisgICAgICAgICogZG9tL1NjcmlwdFJ1
bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRSdW5uZXI6OnF1ZXVlU2NyaXB0Rm9y
RXhlY3V0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFJ1bm5lcjo6bm90aWZ5U2NyaXB0
UmVhZHkpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UnVubmVyOjp0aW1lckZpcmVkKTogV2Ug
dXNlIGBzdGQ6OmV4Y2hhbmdlYCB0byByZXRyaWV2ZSB0aGUgUmVmUHRyPFBlbmRpbmdTY3JpcHQ+
IGFuZCBtYWtlIHRoZSBvcmlnaW5hbCB2ZWN0b3IgZWxlbWVudCBudWxscHRyLiBXaXRob3V0IHRo
aXMsIGFsbCB0aGUgUGVuZGluZ1NjcmlwdCBpcyBoZWxkIHVudGlsIHRoZSBpdGVyYXRpb24gZmlu
aXNoZXMuCisgICAgICAgIFdlIGZvbGxvdyB0aGUgb3JpZ2luYWwgc2VtYW50aWNzIGhlcmUgdGhh
dCB0aGUgcGVuZGluZyBzY3JpcHQgY2FuIGJlIGRlYWxsb2NhdGVkIHBlciBpdGVyYXRpb24uCisg
ICAgICAgICogZG9tL1NjcmlwdFJ1bm5lci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6
OndhdGNoRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnN0
b3BXYXRjaGluZ0ZvckxvYWQpOiBVc2UgUGVuZGluZ1NjcmlwdCBpbnN0ZWFkIG9mIHRvdWNoaW5n
IENhY2hlZFNjcmlwdCBkaXJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBh
cnNlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVu
dFBhcnNlci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6fkhUTUxTY3JpcHRSdW5uZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6c291cmNlRnJvbVBlbmRpbmdTY3Jp
cHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6aXNQZW5kaW5nU2NyaXB0
UmVhZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBhcnNp
bmdCbG9ja2luZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpl
eGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQpOiBBcyB0aGUgcHJldmlvdXMgY29t
bWVudCBkZXNjcmliZXMsIHdlIHVzZWQgcmVsZWFzZUVsZW1lbnRBbmRDbGVhciB0byBtYWtlIHRo
ZSBjdXJyZW50IHBlbmRpbmcgc2NyaXB0IGVtcHR5LgorICAgICAgICBJbnN0ZWFkIG9mIGRvaW5n
IHNvLCB3ZSBub3cgZXhwbGljaXRseSBjbGVhciBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0
IChieSBhc3NpZ25pbmcgbnVsbHB0ciB0byBtX3BhcnNlckJsb2NraW5nU2NyaXB0KS4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OndhdGNoRm9yTG9hZCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKTogUHJldmlvdXNs
eSwgd2UgdXNlZCBDYWNoZWRTY3JpcHQ6OmFkZENsaWVudCBkaXJlY3RseSBpbiB0aGUgbV9ob3N0
LndhdGNoRm9yTG9hZC4KKyAgICAgICAgVGhpcyBtZWFucyB0aGF0IHdlIGRpZCBub3QgaGF2ZSBh
IHF1aWNrIHdheSB0byBxdWVyeSB3aGV0aGVyIHRoZSBwZW5kaW5nIHNjcmlwdCBpcyB3YXRjaGVk
LiBJbiB0aGUgb2xkIGltcGxlbWVudGF0aW9uLCB3ZSBoYXZlIHRoZSBgbV93YXRjaGluZ0Zvckxv
YWQgOiBib29sYCBmbGFnIGluIFBlbmRpbmdTY3JpcHQKKyAgICAgICAgdG8gaG9sZCB0aGUgd2F0
Y2hpbmcgc3RhdHVzIGZvciB0aGUgZ2l2ZW4gcGVuZGluZyBzY3JpcHQuIFRoaXMgYHBlbmRpbmdT
Y3JpcHQuc2V0V2F0Y2hpbmdGb3JMb2FkKHRydWUpYCBqdXN0IG1hZGUgdGhpcyBmbGFnIGB0cnVl
YC4KKyAgICAgICAgQnV0IG5vdywgd2UgZG8gbm90IHVzZSBDYWNoZWRTY3JpcHQ6OmFkZENsaWVu
dCBkaXJlY3RseS4gSW5zdGVhZCwgd2UgaGF2ZSB0aGUgUGVuZGluZ1NjcmlwdENsaWVudCBhbmQg
UGVuZGluZ1NjcmlwdDo6e3NldENsaWVudCxjbGVhckNsaWVudH0uCisgICAgICAgIFdlIGNhbiBr
bm93IHdoZXRoZXIgdGhpcyBwZW5kaW5nIHNjcmlwdCBpcyB3YXRjaGVkIGJ5IGNoZWNraW5nIGBt
X2NsaWVudCAhPSBudWxscHRyYC4gVGhpcyBtYWtlcyBgbV93YXRjaGluZ0ZvckxvYWRgIHVubmVj
ZXNzYXJ5LgorICAgICAgICBTbyB0aGlzIHBhdGNoIGRyb3BzIGBtX3dhdGNoaW5nRm9yTG9hZGAg
YW5kIGBwZW5kaW5nU2NyaXB0LnNldFdhdGNoaW5nRm9yTG9hZCh0cnVlKWAgY2FsbC4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6Omhhc1BhcnNlckJsb2NraW5nU2NyaXB0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQYXJzaW5nQmxvY2tp
bmdTY3JpcHRzKTogV2UgY2xlYXIgdGhlIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQgaGVyZSBpbnN0
ZWFkIG9mIHRoZSBtaWRkbGUgb2YgdGhlIGV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hF
dmVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRz
V2FpdGluZ0ZvckxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhl
Y3V0ZVNjcmlwdHNXYWl0aW5nRm9yUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Ny
aXB0UnVubmVyOjpyZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KTogU2V0dGluZyBtX3BhcnNp
bmdCbG9ja2luZ1NjcmlwdCBpcyBub3cgZG9uZSBpbiB0aGlzIGNhbGxlciBzaWRlLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdERlZmVycmVkU2NyaXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KTog
SW5zdGVhZCBvZiBjb25maWd1cmluZyB0aGUgUGVuZGluZ1NjcmlwdCYsIHdlIHJldHVybiB0aGUg
cGVuZGluZyBzY3JpcHQgYW5kIHRoZSBjYWxsZXIgc2V0cyBpdCB0byBtX3BhcnNlckJsb2NraW5n
U2NyaXB0IG9yIGhvbGRzIGl0LgorICAgICAgICBQcmV2aW91c2x5LCB3ZSBhbHdheXMgbWFrZSBQ
ZW5kaW5nU2NyaXB0JiB2YWxpZCBieSBhbHdheXMgY2FsbGluZyBgc2V0RWxlbWVudCguLi4pYC4g
SSB0aGluayB0aGlzIGlzIHRoZSBidWcgc2luY2Ugd2UgYWNjaWRlbnRhbGx5IGV4cG9zZWQgdGhl
IGhhbGYtYmFrZWQgcGVuZGluZyBzY3JpcHQuCisgICAgICAgIE5vdywgd2UgcmV0dXJuIG51bGxw
dHIgd2hlbiB3ZSBjYW5ub3QgZmluZCB0aGUgY2FjaGVkIHNjcmlwdC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJ1blNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIv
SFRNTFNjcmlwdFJ1bm5lci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5u
ZXJIb3N0Lmg6CisKIDIwMTYtMDgtMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
IAogICAgICAgICBXZSBzaG91bGQgdGhyb3cgYSBTZWN1cml0eUVycm9yIHdoZW4gZGVueWluZyBz
ZXR0aW5nIGEgY3Jvc3Mtb3JpZ2luIFdpbmRvdyBwcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGM1MTU0ZGNhY2Y1NTM4
ZDMzZGM2Y2JiOGY3ZmJkMjE5MGU2YTBiZDAuLmU4ODBiMTdlODU5MjExNjNjN2FmODRlNDAwNTg2
ZjA4MjhhZWI0YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTYwODYsNiArNjA4Niw3IEBACiAJCUUxRkY4RjZEMTgwREI1QkUw
MDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhGNkIxODBEQjVCRTAwMTMyNjc0IC8qIENy
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmggKi87IH07CiAJCUUzODgzODk4MUJBRDE0NUYwMEQ2MkVF
MyAvKiBKU01vZHVsZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMzg4Mzg5NDFCQUQxNDVGMDBENjJFRTMgLyogSlNNb2R1bGVMb2FkZXIu
Y3BwICovOyB9OwogCQlFMzg4Mzg5OTFCQUQxNDVGMDBENjJFRTMgLyogSlNNb2R1bGVMb2FkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzODgzODk1
MUJBRDE0NUYwMEQ2MkVFMyAvKiBKU01vZHVsZUxvYWRlci5oICovOyB9OworCQlFM0ZBMzg2NDFE
NzE4MTJEMDBBQTU5NTAgLyogUGVuZGluZ1NjcmlwdENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNGQTM4NjExRDcxNkU3NjAwQUE1OTUwIC8q
IFBlbmRpbmdTY3JpcHRDbGllbnQuaCAqLzsgfTsKIAkJRTQwMUMyNzUxN0NFNTNFQzAwQzQxQTM1
IC8qIEVsZW1lbnRJdGVyYXRvckFzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MDFDMjc0MTdDRTUzRUMwMEM0MUEzNSAvKiBFbGVtZW50
SXRlcmF0b3JBc3NlcnRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTQwMUUwQTQxQzNDMEI4MzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDAxRTBBMzFD
M0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDAxRTBBNjFDM0MwQ0Y3MDBGMzREMTAgLyogU3R5
bGVDaGFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQwMUUwQTUxQzNDMENGNzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmNwcCAqLzsgfTsKQEAg
LTEzNjQ3LDYgKzEzNjQ4LDcgQEAKIAkJRTFGRjhGNkIxODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
ODgzODk0MUJBRDE0NUYwMEQ2MkVFMyAvKiBKU01vZHVsZUxvYWRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01vZHVsZUxvYWRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzODgzODk1MUJBRDE0NUYwMEQ2MkVFMyAvKiBKU01vZHVsZUxv
YWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01vZHVsZUxvYWRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0ZBMzg2MTFENzE2RTc2MDBBQTU5NTAg
LyogUGVuZGluZ1NjcmlwdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQZW5kaW5nU2NyaXB0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
MDFDMjc0MTdDRTUzRUMwMEM0MUEzNSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRJdGVyYXRvckFzc2VydGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQwMUUwQTMxQzNDMEI4MzAwRjM0RDEw
IC8qIFN0eWxlQ2hhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxl
Q2hhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MDFFMEE1MUMzQzBDRjcw
MEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTdHlsZUNoYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MzA1Niw2ICsyMzA1OCw3IEBACiAJCQkJODNEMjZEM0QxQUZEQ0M1MDAwMUIzODczIC8qIFBhcmVu
dE5vZGUuaWRsICovLAogCQkJCThBN0NDOTZGMTIwNzZGOEEwMDFENDU4OCAvKiBQZW5kaW5nU2Ny
aXB0LmNwcCAqLywKIAkJCQk4QTdDQzk2QTEyMDc2RDczMDAxRDQ1ODggLyogUGVuZGluZ1Njcmlw
dC5oICovLAorCQkJCUUzRkEzODYxMUQ3MTZFNzYwMEFBNTk1MCAvKiBQZW5kaW5nU2NyaXB0Q2xp
ZW50LmggKi8sCiAJCQkJNDFCRjcwMEQwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsLmNwcCAqLywKIAkJCQk0MUJGNzAwRTBGRTg2RjYxMDA1RThERUMgLyogUGxh
dGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCAqLywKIAkJCQk1MTg5RjBERDEwQjQ2QjBFMDBGM0M3
MzkgLyogUG9wU3RhdGVFdmVudC5jcHAgKi8sCkBAIC0yNzAzMSw2ICsyNzAzNCw3IEBACiAJCQkJ
NTlDMjgwNDYxMzhEQzI0MTAwNzlCN0UyIC8qIFhNTEVycm9ycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM3NzJDNDcwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4M0QzNUFFQzFDNzE4N0ZBMDBGNzBENUEgLyogWE1MSHR0cFJlcXVlc3RFdmVu
dFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTNGQTM4NjQxRDcxODEyRDAwQUE1OTUwIC8q
IFBlbmRpbmdTY3JpcHRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY5RjBFRDdBMERCNTBD
QTIwMEQxNkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUExMzZBMDBEMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERkQ0OEUwRTMwNTI5MDAwOUQx
MEFEIC8qIFhNTEh0dHBSZXF1ZXN0VXBsb2FkLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9QZW5kaW5nU2NyaXB0LmNwcAppbmRleCA3OGZmM2Q4NmYxNTQ5ZTJlMTc4NWYxMmVjYzM5MjY5
MDMxMTI1ODg2Li5lMmIwODdmZDFiODgzNjc0MDc0ZmY4OGYwNmM1MGQ0MTZhYjU3NDZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCkBAIC0yOCwzMiArMjgsMzggQEAKIAogI2lu
Y2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJQ
ZW5kaW5nU2NyaXB0Q2xpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGVuZGluZ1Nj
cmlwdDo6UGVuZGluZ1NjcmlwdChFbGVtZW50JiBlbGVtZW50LCBUZXh0UG9zaXRpb24gc3RhcnRp
bmdQb3NpdGlvbikKKyAgICA6IG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9zdGFydGluZ1Bv
c2l0aW9uKHN0YXJ0aW5nUG9zaXRpb24pCit7Cit9CisKK1BlbmRpbmdTY3JpcHQ6OlBlbmRpbmdT
Y3JpcHQoRWxlbWVudCYgZWxlbWVudCwgQ2FjaGVkU2NyaXB0JiBjYWNoZWRTY3JpcHQpCisgICAg
OiBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fY2FjaGVkU2NyaXB0KCZjYWNoZWRTY3JpcHQp
Cit7Cit9CisKIFBlbmRpbmdTY3JpcHQ6On5QZW5kaW5nU2NyaXB0KCkKIHsKICAgICBpZiAobV9j
YWNoZWRTY3JpcHQpCiAgICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7
CiB9CiAKLVJlZlB0cjxFbGVtZW50PiBQZW5kaW5nU2NyaXB0OjpyZWxlYXNlRWxlbWVudEFuZENs
ZWFyKCkKK1JlZjxQZW5kaW5nU2NyaXB0PiBQZW5kaW5nU2NyaXB0OjpjcmVhdGUoRWxlbWVudCYg
ZWxlbWVudCwgQ2FjaGVkU2NyaXB0JiBjYWNoZWRTY3JpcHQpCiB7Ci0gICAgc2V0Q2FjaGVkU2Ny
aXB0KG51bGxwdHIpOwotICAgIG1fd2F0Y2hpbmdGb3JMb2FkID0gZmFsc2U7Ci0gICAgbV9zdGFy
dGluZ1Bvc2l0aW9uID0gVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKLSAgICBy
ZXR1cm4gV1RGTW92ZShtX2VsZW1lbnQpOworICAgIFJlZjxQZW5kaW5nU2NyaXB0PiBwZW5kaW5n
U2NyaXB0ID0gYWRvcHRSZWYoKm5ldyBQZW5kaW5nU2NyaXB0KGVsZW1lbnQsIGNhY2hlZFNjcmlw
dCkpOworICAgIGNhY2hlZFNjcmlwdC5hZGRDbGllbnQoJnBlbmRpbmdTY3JpcHQuZ2V0KCkpOwor
ICAgIHJldHVybiBwZW5kaW5nU2NyaXB0OwogfQogCi12b2lkIFBlbmRpbmdTY3JpcHQ6OnNldENh
Y2hlZFNjcmlwdChDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKK1JlZjxQZW5kaW5nU2NyaXB0
PiBQZW5kaW5nU2NyaXB0OjpjcmVhdGUoRWxlbWVudCYgZWxlbWVudCwgVGV4dFBvc2l0aW9uIHNj
cmlwdFN0YXJ0UG9zaXRpb24pCiB7Ci0gICAgaWYgKG1fY2FjaGVkU2NyaXB0ID09IGNhY2hlZFNj
cmlwdCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKLSAgICAgICAg
bV9jYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKLSAgICBtX2NhY2hlZFNjcmlwdCA9
IGNhY2hlZFNjcmlwdDsKLSAgICBpZiAobV9jYWNoZWRTY3JpcHQpCi0gICAgICAgIG1fY2FjaGVk
U2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGVuZGlu
Z1NjcmlwdChlbGVtZW50LCBzY3JpcHRTdGFydFBvc2l0aW9uKSk7CiB9CiAKIENhY2hlZFNjcmlw
dCogUGVuZGluZ1NjcmlwdDo6Y2FjaGVkU2NyaXB0KCkgY29uc3QKQEAgLTYxLDggKzY3LDM3IEBA
IENhY2hlZFNjcmlwdCogUGVuZGluZ1NjcmlwdDo6Y2FjaGVkU2NyaXB0KCkgY29uc3QKICAgICBy
ZXR1cm4gbV9jYWNoZWRTY3JpcHQuZ2V0KCk7CiB9CiAKK3ZvaWQgUGVuZGluZ1NjcmlwdDo6bm90
aWZ5Q2xpZW50RmluaXNoZWQoKQoreworICAgIFJlZjxQZW5kaW5nU2NyaXB0PiBwcm90ZWN0ZWRU
aGlzKCp0aGlzKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5ub3RpZnlG
aW5pc2hlZCgqdGhpcyk7Cit9CisKIHZvaWQgUGVuZGluZ1NjcmlwdDo6bm90aWZ5RmluaXNoZWQo
Q2FjaGVkUmVzb3VyY2UqKQogeworICAgIG5vdGlmeUNsaWVudEZpbmlzaGVkKCk7Cit9CisKK2Jv
b2wgUGVuZGluZ1NjcmlwdDo6aXNMb2FkZWQoKSBjb25zdAoreworICAgIGlmIChtX2NhY2hlZFNj
cmlwdCkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5pc0xvYWRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBQZW5kaW5nU2NyaXB0OjpzZXRDbGllbnQoUGVuZGluZ1Nj
cmlwdENsaWVudCogY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xp
ZW50ID0gY2xpZW50OworICAgIGlmIChpc0xvYWRlZCgpKQorICAgICAgICBub3RpZnlDbGllbnRG
aW5pc2hlZCgpOworfQorCit2b2lkIFBlbmRpbmdTY3JpcHQ6OmNsZWFyQ2xpZW50KCkKK3sKKyAg
ICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50ID0gbnVsbHB0cjsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKaW5kZXggNmY0YWZlMzVlMjcwMDI1NDYzNjE5NTcwYmMx
ZWE3YzFjYjQ3ZjQyYS4uMTY4NDRlNWRlYTA0YTYyYmMyMmVmYzJmMWZmY2U1NGE5ZDYxZTRjZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCkBAIC0yMyw4NSArMjMsNjIgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUGVuZGluZ1NjcmlwdF9oCi0jZGVmaW5lIFBlbmRp
bmdTY3JpcHRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSA8d3RmL1Jl
Zi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFBvc2l0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENhY2hlZFNjcmlwdDsKIGNsYXNzIEVsZW1lbnQ7CitjbGFzcyBQZW5kaW5n
U2NyaXB0Q2xpZW50OwogCiAvLyBBIGNvbnRhaW5lciBmb3IgYW4gZXh0ZXJuYWwgc2NyaXB0IHdo
aWNoIG1heSBiZSBsb2FkZWQgYW5kIGV4ZWN1dGVkLgogLy8KIC8vIEEgQ2FjaGVkUmVzb3VyY2VI
YW5kbGUgYWxvbmUgZG9lcyBub3QgcHJldmVudCB0aGUgdW5kZXJseWluZyBDYWNoZWRSZXNvdXJj
ZQogLy8gZnJvbSBwdXJnaW5nIGl0cyBkYXRhIGJ1ZmZlci4gVGhpcyBjbGFzcyBob2xkcyBhIGR1
bW15IGNsaWVudCBvcGVuIGZvciBpdHMKIC8vIGxpZmV0aW1lIGluIG9yZGVyIHRvIGd1YXJhbnRl
ZSB0aGF0IHRoZSBkYXRhIGJ1ZmZlciB3aWxsIG5vdCBiZSBwdXJnZWQuCi1jbGFzcyBQZW5kaW5n
U2NyaXB0IGZpbmFsIDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK2NsYXNzIFBlbmRp
bmdTY3JpcHQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nU2NyaXB0PiwgcHVibGlj
IENhY2hlZFJlc291cmNlQ2xpZW50IHsKK1dURl9NQUtFX05PTkNPUFlBQkxFKFBlbmRpbmdTY3Jp
cHQpOworV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUGVuZGluZ1Njcmlw
dCgpCi0gICAgICAgIDogbV93YXRjaGluZ0ZvckxvYWQoZmFsc2UpCi0gICAgICAgICwgbV9zdGFy
dGluZ1Bvc2l0aW9uKFRleHRQb3NpdGlvbjo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCi0gICAgewot
ICAgIH0KLQotICAgIFBlbmRpbmdTY3JpcHQoRWxlbWVudCogZWxlbWVudCwgQ2FjaGVkU2NyaXB0
KiBjYWNoZWRTY3JpcHQpCi0gICAgICAgIDogbV93YXRjaGluZ0ZvckxvYWQoZmFsc2UpCi0gICAg
ICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgewotICAgICAgICBzZXRDYWNoZWRTY3JpcHQo
Y2FjaGVkU2NyaXB0KTsKLSAgICB9Ci0KLSAgICBQZW5kaW5nU2NyaXB0KGNvbnN0IFBlbmRpbmdT
Y3JpcHQmIG90aGVyKQotICAgICAgICA6IENhY2hlZFJlc291cmNlQ2xpZW50KG90aGVyKQotICAg
ICAgICAsIG1fd2F0Y2hpbmdGb3JMb2FkKG90aGVyLm1fd2F0Y2hpbmdGb3JMb2FkKQotICAgICAg
ICAsIG1fZWxlbWVudChvdGhlci5tX2VsZW1lbnQpCi0gICAgICAgICwgbV9zdGFydGluZ1Bvc2l0
aW9uKG90aGVyLm1fc3RhcnRpbmdQb3NpdGlvbikKLSAgICB7Ci0gICAgICAgIHNldENhY2hlZFNj
cmlwdChvdGhlci5jYWNoZWRTY3JpcHQoKSk7Ci0gICAgfQorICAgIHN0YXRpYyBSZWY8UGVuZGlu
Z1NjcmlwdD4gY3JlYXRlKEVsZW1lbnQmLCBDYWNoZWRTY3JpcHQmKTsKKyAgICBzdGF0aWMgUmVm
PFBlbmRpbmdTY3JpcHQ+IGNyZWF0ZShFbGVtZW50JiwgVGV4dFBvc2l0aW9uIHNjcmlwdFN0YXJ0
UG9zaXRpb24pOwogCiAgICAgdmlydHVhbCB+UGVuZGluZ1NjcmlwdCgpOwogCi0gICAgUGVuZGlu
Z1NjcmlwdCYgb3BlcmF0b3I9KGNvbnN0IFBlbmRpbmdTY3JpcHQmIG90aGVyKQotICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCi0g
ICAgICAgIG1fd2F0Y2hpbmdGb3JMb2FkID0gb3RoZXIubV93YXRjaGluZ0ZvckxvYWQ7Ci0gICAg
ICAgIG1fZWxlbWVudCA9IG90aGVyLm1fZWxlbWVudDsKLSAgICAgICAgbV9zdGFydGluZ1Bvc2l0
aW9uID0gb3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uOwotICAgICAgICBzZXRDYWNoZWRTY3JpcHQo
b3RoZXIuY2FjaGVkU2NyaXB0KCkpOwotCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0K
ICAgICBUZXh0UG9zaXRpb24gc3RhcnRpbmdQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnRpbmdQb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0U3RhcnRpbmdQb3NpdGlvbihjb25zdCBUZXh0
UG9zaXRpb24mIHBvc2l0aW9uKSB7IG1fc3RhcnRpbmdQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAK
LSAgICBib29sIHdhdGNoaW5nRm9yTG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2F0Y2hpbmdGb3JM
b2FkOyB9Ci0gICAgdm9pZCBzZXRXYXRjaGluZ0ZvckxvYWQoYm9vbCBiKSB7IG1fd2F0Y2hpbmdG
b3JMb2FkID0gYjsgfQorICAgIGJvb2wgd2F0Y2hpbmdGb3JMb2FkKCkgY29uc3QgeyByZXR1cm4g
bV9jbGllbnQ7IH0KIAotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Vs
ZW1lbnQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkgeyBt
X2VsZW1lbnQgPSBlbGVtZW50OyB9Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IHJlbGVhc2VFbGVtZW50
QW5kQ2xlYXIoKTsKKyAgICBFbGVtZW50JiBlbGVtZW50KCkgeyByZXR1cm4gbV9lbGVtZW50Lmdl
dCgpOyB9CisgICAgY29uc3QgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxl
bWVudC5nZXQoKTsgfQogCiAgICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQoKSBjb25zdDsK
LSAgICB2b2lkIHNldENhY2hlZFNjcmlwdChDYWNoZWRTY3JpcHQqKTsKKyAgICBib29sIG5lZWRz
TG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIGNhY2hlZFNjcmlwdCgpOyB9CisKKyAgICBib29sIGlz
TG9hZGVkKCkgY29uc3Q7CiAKICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
Kikgb3ZlcnJpZGU7CiAKKyAgICB2b2lkIHNldENsaWVudChQZW5kaW5nU2NyaXB0Q2xpZW50Kik7
CisgICAgdm9pZCBjbGVhckNsaWVudCgpOworCiBwcml2YXRlOgotICAgIGJvb2wgbV93YXRjaGlu
Z0ZvckxvYWQ7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKKyAgICBQZW5kaW5nU2Ny
aXB0KEVsZW1lbnQmLCBDYWNoZWRTY3JpcHQmKTsKKyAgICBQZW5kaW5nU2NyaXB0KEVsZW1lbnQm
LCBUZXh0UG9zaXRpb24gc3RhcnRpbmdQb3NpdGlvbik7CisKKyAgICB2b2lkIG5vdGlmeUNsaWVu
dEZpbmlzaGVkKCk7CisKKyAgICBSZWY8RWxlbWVudD4gbV9lbGVtZW50OwogICAgIFRleHRQb3Np
dGlvbiBtX3N0YXJ0aW5nUG9zaXRpb247IC8vIE9ubHkgdXNlZCBmb3IgaW5saW5lIHNjcmlwdCB0
YWdzLgotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3Jp
cHQ7IAorICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3Jp
cHQ7CisgICAgUGVuZGluZ1NjcmlwdENsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CiB9Owog
CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3Jp
cHRDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0Q2xpZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTk2NDQ0YThlMzgwMGFiYmIwNGRkMzQ5ZmE3NjYxNDUwNmQxNWYwYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0Q2xpZW50LmgKQEAg
LTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSwgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQZW5kaW5n
U2NyaXB0OworCitjbGFzcyBQZW5kaW5nU2NyaXB0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5QZW5kaW5nU2NyaXB0Q2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
RmluaXNoZWQoUGVuZGluZ1NjcmlwdCYpID0gMDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Njcmlw
dFJ1bm5lci5jcHAKaW5kZXggZDI2MDViZGRiN2I1YjYyYjkxNDUzOGVmNjI2MmFjYjdiM2Q1MDAy
ZS4uOWVjODViYzE2NWZiMTNmODhkNmFlYjE3NWZlOTBkNjc4ZDZlZmYxYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdFJ1bm5lci5jcHAKQEAgLTYxLDExICs2MSwxMSBAQCB2b2lkIFNjcmlwdFJ1bm5l
cjo6cXVldWVTY3JpcHRGb3JFeGVjdXRpb24oU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCwg
Q2FjaGVkUgogCiAgICAgc3dpdGNoIChleGVjdXRpb25UeXBlKSB7CiAgICAgY2FzZSBBU1lOQ19F
WEVDVVRJT046Ci0gICAgICAgIG1fcGVuZGluZ0FzeW5jU2NyaXB0cy5hZGQoc2NyaXB0RWxlbWVu
dCwgUGVuZGluZ1NjcmlwdCgmZWxlbWVudCwgY2FjaGVkU2NyaXB0LmdldCgpKSk7CisgICAgICAg
IG1fcGVuZGluZ0FzeW5jU2NyaXB0cy5hZGQoc2NyaXB0RWxlbWVudCwgUGVuZGluZ1NjcmlwdDo6
Y3JlYXRlKGVsZW1lbnQsICpjYWNoZWRTY3JpcHQpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIElOX09SREVSX0VYRUNVVElPTjoKLSAgICAgICAgbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRl
ci5hcHBlbmQoUGVuZGluZ1NjcmlwdCgmZWxlbWVudCwgY2FjaGVkU2NyaXB0LmdldCgpKSk7Cisg
ICAgICAgIG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXIuYXBwZW5kKFBlbmRpbmdTY3JpcHQ6OmNy
ZWF0ZShlbGVtZW50LCAqY2FjaGVkU2NyaXB0KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
QEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBTY3JpcHRSdW5uZXI6Om5vdGlmeVNjcmlwdFJlYWR5KFNj
cmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIEV4ZWN1dGlvblR5cGUKICAgICBzd2l0Y2ggKGV4
ZWN1dGlvblR5cGUpIHsKICAgICBjYXNlIEFTWU5DX0VYRUNVVElPTjoKICAgICAgICAgQVNTRVJU
KG1fcGVuZGluZ0FzeW5jU2NyaXB0cy5jb250YWlucyhzY3JpcHRFbGVtZW50KSk7Ci0gICAgICAg
IG1fc2NyaXB0c1RvRXhlY3V0ZVNvb24uYXBwZW5kKG1fcGVuZGluZ0FzeW5jU2NyaXB0cy50YWtl
KHNjcmlwdEVsZW1lbnQpKTsKKyAgICAgICAgbV9zY3JpcHRzVG9FeGVjdXRlU29vbi5hcHBlbmQo
Jm1fcGVuZGluZ0FzeW5jU2NyaXB0cy50YWtlKHNjcmlwdEVsZW1lbnQpLT5nZXQoKSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBJTl9PUkRFUl9FWEVDVVRJT046CkBAIC0xMDAsMjMgKzEw
MCwyNCBAQCB2b2lkIFNjcmlwdFJ1bm5lcjo6dGltZXJGaXJlZCgpCiB7CiAgICAgUmVmPERvY3Vt
ZW50PiBwcm90ZWN0KG1fZG9jdW1lbnQpOwogCi0gICAgVmVjdG9yPFBlbmRpbmdTY3JpcHQ+IHNj
cmlwdHM7CisgICAgVmVjdG9yPFJlZlB0cjxQZW5kaW5nU2NyaXB0Pj4gc2NyaXB0czsKICAgICBz
Y3JpcHRzLnN3YXAobV9zY3JpcHRzVG9FeGVjdXRlU29vbik7CiAKICAgICBzaXplX3QgbnVtSW5P
cmRlclNjcmlwdHNUb0V4ZWN1dGUgPSAwOwotICAgIGZvciAoOyBudW1Jbk9yZGVyU2NyaXB0c1Rv
RXhlY3V0ZSA8IG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXIuc2l6ZSgpICYmIG1fc2NyaXB0c1Rv
RXhlY3V0ZUluT3JkZXJbbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGVdLmNhY2hlZFNjcmlwdCgp
LT5pc0xvYWRlZCgpOyArK251bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlKQorICAgIGZvciAoOyBu
dW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZSA8IG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXIuc2l6
ZSgpICYmIG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXJbbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1
dGVdLT5pc0xvYWRlZCgpOyArK251bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlKQogICAgICAgICBz
Y3JpcHRzLmFwcGVuZChtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyW251bUluT3JkZXJTY3JpcHRz
VG9FeGVjdXRlXSk7CiAgICAgaWYgKG51bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlKQogICAgICAg
ICBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLnJlbW92ZSgwLCBudW1Jbk9yZGVyU2NyaXB0c1Rv
RXhlY3V0ZSk7CiAKLSAgICBmb3IgKGF1dG8mIHNjcmlwdCA6IHNjcmlwdHMpIHsKLSAgICAgICAg
Q2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQgPSBzY3JpcHQuY2FjaGVkU2NyaXB0KCk7Ci0gICAg
ICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gc2NyaXB0LnJlbGVhc2VFbGVtZW50QW5kQ2xl
YXIoKTsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIGZvciAoYXV0byYgY3VycmVudFNj
cmlwdCA6IHNjcmlwdHMpIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdTY3JpcHQ+IHNjcmlwdCA9
IHN0ZDo6ZXhjaGFuZ2UoY3VycmVudFNjcmlwdCwgbnVsbHB0cik7CisgICAgICAgIEFTU0VSVChz
Y3JpcHQpOwogICAgICAgICAvLyBQYXBlciBvdmVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDQwNTAKLSAgICAgICAgaWYgKCFlbGVtZW50KQorICAgICAgICBpZiAo
IXNjcmlwdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB0b1NjcmlwdEVsZW1lbnRJ
ZlBvc3NpYmxlKGVsZW1lbnQuZ2V0KCkpLT5leGVjdXRlKGNhY2hlZFNjcmlwdCk7CisgICAgICAg
IFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxl
KCZzY3JpcHQtPmVsZW1lbnQoKSk7CisgICAgICAgIEFTU0VSVChzY3JpcHRFbGVtZW50KTsKKyAg
ICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZShzY3JpcHQtPmNhY2hlZFNjcmlwdCgpKTsKICAg
ICAgICAgbV9kb2N1bWVudC5kZWNyZW1lbnRMb2FkRXZlbnREZWxheUNvdW50KCk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5oCmluZGV4IDhjZDMzMmE1NzM0YzFjYjkyZjJhNWZm
NWZjNGNjYTE1OGZlM2JjNDEuLjkyMGNmYzAwZTMxZDliNTNmOTc1MGFiMzhmNjYyNDMyNmRkYzYz
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmgKQEAgLTU2LDkgKzU2LDkgQEAgY2xhc3Mg
U2NyaXB0UnVubmVyIHsKICAgICB2b2lkIHRpbWVyRmlyZWQoKTsKIAogICAgIERvY3VtZW50JiBt
X2RvY3VtZW50OwotICAgIFZlY3RvcjxQZW5kaW5nU2NyaXB0PiBtX3NjcmlwdHNUb0V4ZWN1dGVJ
bk9yZGVyOwotICAgIFZlY3RvcjxQZW5kaW5nU2NyaXB0PiBtX3NjcmlwdHNUb0V4ZWN1dGVTb29u
OyAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNz
ZXQtb2Ytc2NyaXB0cy10aGF0LXdpbGwtZXhlY3V0ZS1hcy1zb29uLWFzLXBvc3NpYmxlCi0gICAg
SGFzaE1hcDxTY3JpcHRFbGVtZW50KiwgUGVuZGluZ1NjcmlwdD4gbV9wZW5kaW5nQXN5bmNTY3Jp
cHRzOworICAgIFZlY3RvcjxSZWZQdHI8UGVuZGluZ1NjcmlwdD4+IG1fc2NyaXB0c1RvRXhlY3V0
ZUluT3JkZXI7CisgICAgVmVjdG9yPFJlZlB0cjxQZW5kaW5nU2NyaXB0Pj4gbV9zY3JpcHRzVG9F
eGVjdXRlU29vbjsgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJl
bnQtd29yay8jc2V0LW9mLXNjcmlwdHMtdGhhdC13aWxsLWV4ZWN1dGUtYXMtc29vbi1hcy1wb3Nz
aWJsZQorICAgIEhhc2hNYXA8U2NyaXB0RWxlbWVudCosIFJlZjxQZW5kaW5nU2NyaXB0Pj4gbV9w
ZW5kaW5nQXN5bmNTY3JpcHRzOwogICAgIFRpbWVyIG1fdGltZXI7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCA5ZjQ3
YTI0ZGM1NTYxZGMyNjgxZjE3MGVhNTliZWVkYTlhYjg3MzQ3Li4zNmZjOTJjZDc3MDMwOGNjNjVj
MjNjNWYwNDJjMTYyNzk2NWI4Y2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnRQYXJzZXIuaCIKIAorI2luY2x1ZGUgIkNh
Y2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgpAQCAtNTAwLDE4ICs1MDEsMTggQEAg
dm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlv
bigpCiAgICAgZW5kSWZEZWxheWVkKCk7CiB9CiAKLXZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjp3
YXRjaEZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFNjcmlwdCkKK3ZvaWQgSFRNTERvY3Vt
ZW50UGFyc2VyOjp3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKIHsK
LSAgICBBU1NFUlQoIWNhY2hlZFNjcmlwdC0+aXNMb2FkZWQoKSk7CisgICAgQVNTRVJUKCFwZW5k
aW5nU2NyaXB0LmlzTG9hZGVkKCkpOwogICAgIC8vIGFkZENsaWVudCB3b3VsZCBjYWxsIG5vdGlm
eUZpbmlzaGVkIGlmIHRoZSBsb2FkIHdlcmUgY29tcGxldGUuCiAgICAgLy8gQ2FsbGVycyBkbyBu
b3QgZXhwZWN0IHRvIGJlIHJlLWVudGVyZWQgZnJvbSB0aGlzIGNhbGwsIHNvIHRoZXkgc2hvdWxk
CiAgICAgLy8gbm90IGFuIGFscmVhZHktbG9hZGVkIENhY2hlZFJlc291cmNlLgotICAgIGNhY2hl
ZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOworICAgIHBlbmRpbmdTY3JpcHQuc2V0Q2xpZW50KHRo
aXMpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6c3RvcFdhdGNoaW5nRm9yTG9hZChD
YWNoZWRSZXNvdXJjZSogY2FjaGVkU2NyaXB0KQordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnN0
b3BXYXRjaGluZ0ZvckxvYWQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKIHsKLSAgICBj
YWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICBwZW5kaW5nU2NyaXB0LmNsZWFy
Q2xpZW50KCk7CiB9CiAKIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmRDdXJyZW50SW5w
dXRTdHJlYW1Ub1ByZWxvYWRTY2FubmVyQW5kU2NhbigpCkBAIC01MjEsNyArNTIyLDcgQEAgdm9p
ZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZEN1cnJlbnRJbnB1dFN0cmVhbVRvUHJlbG9hZFNj
YW5uZXJBbmRTY2FuKCkKICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKCptX3ByZWxvYWRlciwg
KmRvY3VtZW50KCkpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNo
ZWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQordm9pZCBIVE1MRG9jdW1lbnRQYXJz
ZXI6Om5vdGlmeUZpbmlzaGVkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7CiAgICAg
Ly8gcHVtcFRva2VuaXplciBjYW4gY2F1c2UgdGhpcyBwYXJzZXIgdG8gYmUgZGV0YWNoZWQgZnJv
bSB0aGUgRG9jdW1lbnQsCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlzbid0IGRl
bGV0ZWQgeWV0LgpAQCAtNTM0LDcgKzUzNSw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpu
b3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5n
Rm9yTG9hZChjYWNoZWRSZXNvdXJjZSk7CisgICAgbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGVTY3Jp
cHRzV2FpdGluZ0ZvckxvYWQocGVuZGluZ1NjcmlwdCk7CiAgICAgaWYgKCFpc1dhaXRpbmdGb3JT
Y3JpcHRzKCkpCiAgICAgICAgIHJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFy
c2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaApp
bmRleCA1MTFlMWQzOWNkYzYzMGY1MTI3YjZmMjgzY2M2MWE1NDhhNmYwN2IxLi5lMmJmYjMyNjlm
NGM3YWIyMWQ3NjQ3YTI1ODZjOGUxOWQ2YzgzYmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMjcsMTEgKzI3LDExIEBACiAjaWZu
ZGVmIEhUTUxEb2N1bWVudFBhcnNlcl9oCiAjZGVmaW5lIEhUTUxEb2N1bWVudFBhcnNlcl9oCiAK
LSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dFN0
cmVhbS5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRSdW5uZXJIb3N0LmgiCiAjaW5jbHVkZSAiSFRN
TFNvdXJjZVRyYWNrZXIuaCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAi
UGVuZGluZ1NjcmlwdENsaWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNl
ci5oIgogI2luY2x1ZGUgIlhTU0F1ZGl0b3IuaCIKICNpbmNsdWRlICJYU1NBdWRpdG9yRGVsZWdh
dGUuaCIKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgSFRNTFRyZWVCdWlsZGVyOwogY2xhc3MgSFRN
TFJlc291cmNlUHJlbG9hZGVyOwogY2xhc3MgUHVtcFNlc3Npb247CiAKLWNsYXNzIEhUTUxEb2N1
bWVudFBhcnNlciA6IHB1YmxpYyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIsIHByaXZhdGUgSFRN
TFNjcmlwdFJ1bm5lckhvc3QsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3Mg
SFRNTERvY3VtZW50UGFyc2VyIDogcHVibGljIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciwgcHJp
dmF0ZSBIVE1MU2NyaXB0UnVubmVySG9zdCwgcHJpdmF0ZSBQZW5kaW5nU2NyaXB0Q2xpZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEhU
TUxEb2N1bWVudFBhcnNlcj4gY3JlYXRlKEhUTUxEb2N1bWVudCYpOwpAQCAtOTAsMTQgKzkwLDE0
IEBAIGNsYXNzIEhUTUxEb2N1bWVudFBhcnNlciA6IHB1YmxpYyBTY3JpcHRhYmxlRG9jdW1lbnRQ
YXJzZXIsIHByaXZhdGUgSFRNTFNjcmlwdFJ1CiAgICAgYm9vbCBzaG91bGRBc3NvY2lhdGVDb25z
b2xlTWVzc2FnZXNXaXRoVGV4dFBvc2l0aW9uKCkgY29uc3QgZmluYWw7CiAKICAgICAvLyBIVE1M
U2NyaXB0UnVubmVySG9zdAotICAgIHZvaWQgd2F0Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKikg
ZmluYWw7Ci0gICAgdm9pZCBzdG9wV2F0Y2hpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKikgZmlu
YWw7CisgICAgdm9pZCB3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYpIGZpbmFsOworICAgIHZv
aWQgc3RvcFdhdGNoaW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0JikgZmluYWw7CiAgICAgSFRNTElu
cHV0U3RyZWFtJiBpbnB1dFN0cmVhbSgpIGZpbmFsOwogICAgIGJvb2wgaGFzUHJlbG9hZFNjYW5u
ZXIoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIGFwcGVuZEN1cnJlbnRJbnB1dFN0cmVhbVRvUHJl
bG9hZFNjYW5uZXJBbmRTY2FuKCkgZmluYWw7CiAKLSAgICAvLyBDYWNoZWRSZXNvdXJjZUNsaWVu
dAotICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSBmaW5hbDsKKyAgICAv
LyBQZW5kaW5nU2NyaXB0Q2xpZW50CisgICAgdm9pZCBub3RpZnlGaW5pc2hlZChQZW5kaW5nU2Ny
aXB0JikgZmluYWw7CiAKICAgICBEb2N1bWVudCogY29udGV4dEZvclBhcnNpbmdTZXNzaW9uKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5u
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAK
aW5kZXggMWI0YzE1ZDk5OTZhZTgzNDE0NjMwNGZkZmRkN2JlZmZkZDMyMDBhOC4uMGFkZjE5ZGEy
MTUzOGIwNTM0ZjQ0OTRiZGNkZmFlYTkxOGJmMmE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKQEAgLTU4LDEzICs1OCwxNSBAQCBIVE1M
U2NyaXB0UnVubmVyOjpIVE1MU2NyaXB0UnVubmVyKERvY3VtZW50JiBkb2N1bWVudCwgSFRNTFNj
cmlwdFJ1bm5lckhvc3QmIGhvcwogSFRNTFNjcmlwdFJ1bm5lcjo6fkhUTUxTY3JpcHRSdW5uZXIo
KQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYmUgcGFzc2VkIGEgImRvbmUgbG9hZGluZy9w
YXJzaW5nIiBjYWxsYmFjayBzb29uZXIgdGhhbiBkZXN0cnVjdGlvbj8KLSAgICBpZiAobV9wYXJz
ZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSAmJiBtX3BhcnNlckJsb2NraW5nU2NyaXB0
LndhdGNoaW5nRm9yTG9hZCgpKQotICAgICAgICBzdG9wV2F0Y2hpbmdGb3JMb2FkKG1fcGFyc2Vy
QmxvY2tpbmdTY3JpcHQpOworICAgIGlmIChtX3BhcnNlckJsb2NraW5nU2NyaXB0KSB7CisgICAg
ICAgIGlmIChtX3BhcnNlckJsb2NraW5nU2NyaXB0LT5uZWVkc0xvYWRpbmcoKSAmJiBtX3BhcnNl
ckJsb2NraW5nU2NyaXB0LT53YXRjaGluZ0ZvckxvYWQoKSkKKyAgICAgICAgICAgIHN0b3BXYXRj
aGluZ0ZvckxvYWQoKm1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpOworICAgIH0KIAogICAgIHdoaWxl
ICghbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBQ
ZW5kaW5nU2NyaXB0IHBlbmRpbmdTY3JpcHQgPSBtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNp
bmcudGFrZUZpcnN0KCk7Ci0gICAgICAgIGlmIChwZW5kaW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgp
ICYmIHBlbmRpbmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpCi0gICAgICAgICAgICBzdG9wV2F0
Y2hpbmdGb3JMb2FkKHBlbmRpbmdTY3JpcHQpOworICAgICAgICBSZWZQdHI8UGVuZGluZ1Njcmlw
dD4gcGVuZGluZ1NjcmlwdCA9IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy50YWtlRmly
c3QoKTsKKyAgICAgICAgaWYgKHBlbmRpbmdTY3JpcHQtPm5lZWRzTG9hZGluZygpICYmIHBlbmRp
bmdTY3JpcHQtPndhdGNoaW5nRm9yTG9hZCgpKQorICAgICAgICAgICAgc3RvcFdhdGNoaW5nRm9y
TG9hZCgqcGVuZGluZ1NjcmlwdCk7CiAgICAgfQogfQogCkBAIC05NSw3ICs5Nyw3IEBAIFNjcmlw
dFNvdXJjZUNvZGUgSFRNTFNjcmlwdFJ1bm5lcjo6c291cmNlRnJvbVBlbmRpbmdTY3JpcHQoY29u
c3QgUGVuZGluZ1NjcmlwdCYKICAgICAgICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0
LmNhY2hlZFNjcmlwdCgpKTsKICAgICB9CiAgICAgZXJyb3JPY2N1cnJlZCA9IGZhbHNlOwotICAg
IHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5lbGVtZW50KCktPnRleHRDb250ZW50KCks
IGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHQuc3RhcnRp
bmdQb3NpdGlvbigpKTsKKyAgICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuZWxlbWVu
dCgpLnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1l
bnQpLCBzY3JpcHQuc3RhcnRpbmdQb3NpdGlvbigpKTsKIH0KIAogYm9vbCBIVE1MU2NyaXB0UnVu
bmVyOjppc1BlbmRpbmdTY3JpcHRSZWFkeShjb25zdCBQZW5kaW5nU2NyaXB0JiBzY3JpcHQpCkBA
IC0xMDUsNyArMTA3LDcgQEAgYm9vbCBIVE1MU2NyaXB0UnVubmVyOjppc1BlbmRpbmdTY3JpcHRS
ZWFkeShjb25zdCBQZW5kaW5nU2NyaXB0JiBzY3JpcHQpCiAgICAgbV9oYXNTY3JpcHRzV2FpdGlu
Z0ZvclN0eWxlc2hlZXRzID0gIW1fZG9jdW1lbnQtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpOwog
ICAgIGlmIChtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoc2NyaXB0LmNhY2hlZFNjcmlwdCgpICYmICFzY3JpcHQuY2FjaGVk
U2NyaXB0KCktPmlzTG9hZGVkKCkpCisgICAgaWYgKHNjcmlwdC5uZWVkc0xvYWRpbmcoKSAmJiAh
c2NyaXB0LmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTExNSwxMCArMTE3LDExIEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0
ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdCgpCiAgICAgQVNTRVJUKG1fZG9jdW1lbnQpOwogICAgIEFT
U0VSVCghaXNFeGVjdXRpbmdTY3JpcHQoKSk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQtPmhhdmVT
dHlsZXNoZWV0c0xvYWRlZCgpKTsKLSAgICBBU1NFUlQoaXNQZW5kaW5nU2NyaXB0UmVhZHkobV9w
YXJzZXJCbG9ja2luZ1NjcmlwdCkpOworICAgIEFTU0VSVChpc1BlbmRpbmdTY3JpcHRSZWFkeSgq
bV9wYXJzZXJCbG9ja2luZ1NjcmlwdCkpOwogCiAgICAgSW5zZXJ0aW9uUG9pbnRSZWNvcmQgaW5z
ZXJ0aW9uUG9pbnRSZWNvcmQobV9ob3N0LmlucHV0U3RyZWFtKCkpOwotICAgIGV4ZWN1dGVQZW5k
aW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChtX3BhcnNlckJsb2NraW5nU2NyaXB0KTsKKyAgICBS
ZWZQdHI8UGVuZGluZ1NjcmlwdD4gcHJvdGVjdG9yID0gc3RkOjpleGNoYW5nZShtX3BhcnNlckJs
b2NraW5nU2NyaXB0LCBudWxscHRyKTsKKyAgICBleGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3Bh
dGNoRXZlbnQoKnByb3RlY3Rvcik7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0
ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3Jp
cHQpCkBAIC0xMjcsMTUgKzEzMCwxMyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQ
ZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChQZW5kaW5nU2NyaXB0JiBwZW5kaQogICAgIFNj
cmlwdFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IHNvdXJjZUZyb21QZW5kaW5nU2NyaXB0KHBlbmRp
bmdTY3JpcHQsIGVycm9yT2NjdXJyZWQpOwogCiAgICAgLy8gU3RvcCB3YXRjaGluZyBsb2FkcyBi
ZWZvcmUgZXhlY3V0ZVNjcmlwdCB0byBwcmV2ZW50IHJlY3Vyc2lvbiBpZiB0aGUgc2NyaXB0IHJl
bG9hZHMgaXRzZWxmLgotICAgIGlmIChwZW5kaW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpICYmIHBl
bmRpbmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpCisgICAgaWYgKHBlbmRpbmdTY3JpcHQubmVl
ZHNMb2FkaW5nKCkgJiYgcGVuZGluZ1NjcmlwdC53YXRjaGluZ0ZvckxvYWQoKSkKICAgICAgICAg
c3RvcFdhdGNoaW5nRm9yTG9hZChwZW5kaW5nU2NyaXB0KTsKIAogICAgIGlmICghaXNFeGVjdXRp
bmdTY3JpcHQoKSkKICAgICAgICAgTWljcm90YXNrUXVldWU6Om1haW5UaHJlYWRRdWV1ZSgpLnBl
cmZvcm1NaWNyb3Rhc2tDaGVja3BvaW50KCk7CiAKLSAgICAvLyBDbGVhciB0aGUgcGVuZGluZyBz
Y3JpcHQgYmVmb3JlIHBvc3NpYmxlIHJlbnRyYW5jeSBmcm9tIGV4ZWN1dGVTY3JpcHQoKQotICAg
IFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gcGVuZGluZ1NjcmlwdC5yZWxlYXNlRWxlbWVudEFu
ZENsZWFyKCk7Ci0gICAgaWYgKFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQgPSB0b1Njcmlw
dEVsZW1lbnRJZlBvc3NpYmxlKGVsZW1lbnQuZ2V0KCkpKSB7CisgICAgaWYgKFNjcmlwdEVsZW1l
bnQqIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKCZwZW5kaW5nU2Ny
aXB0LmVsZW1lbnQoKSkpIHsKICAgICAgICAgTmVzdGluZ0xldmVsSW5jcmVtZW50ZXIgbmVzdGlu
Z0xldmVsSW5jcmVtZW50ZXIobV9zY3JpcHROZXN0aW5nTGV2ZWwpOwogICAgICAgICBJZ25vcmVE
ZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlciBpZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291
bnRJbmNyZW1lbnRlcihtX2RvY3VtZW50KTsKICAgICAgICAgaWYgKGVycm9yT2NjdXJyZWQpCkBA
IC0xNDMsNyArMTQ0LDcgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVuZGluZ1Nj
cmlwdEFuZERpc3BhdGNoRXZlbnQoUGVuZGluZ1NjcmlwdCYgcGVuZGkKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBBU1NFUlQoaXNFeGVjdXRpbmdTY3JpcHQoKSk7CiAgICAgICAgICAgICBz
Y3JpcHRFbGVtZW50LT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwotICAgICAgICAgICAgZWxl
bWVudC0+ZGlzcGF0Y2hFdmVudChjcmVhdGVTY3JpcHRMb2FkRXZlbnQoKSk7CisgICAgICAgICAg
ICBwZW5kaW5nU2NyaXB0LmVsZW1lbnQoKS5kaXNwYXRjaEV2ZW50KGNyZWF0ZVNjcmlwdExvYWRF
dmVudCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICBBU1NFUlQoIWlzRXhlY3V0aW5nU2NyaXB0
KCkpOwpAQCAtMTUyLDE1ICsxNTMsMTMgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRl
UGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoUGVuZGluZ1NjcmlwdCYgcGVuZGkKIHZvaWQg
SFRNTFNjcmlwdFJ1bm5lcjo6d2F0Y2hGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3Jp
cHQpCiB7CiAgICAgQVNTRVJUKCFwZW5kaW5nU2NyaXB0LndhdGNoaW5nRm9yTG9hZCgpKTsKLSAg
ICBtX2hvc3Qud2F0Y2hGb3JMb2FkKHBlbmRpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwotICAg
IHBlbmRpbmdTY3JpcHQuc2V0V2F0Y2hpbmdGb3JMb2FkKHRydWUpOworICAgIG1faG9zdC53YXRj
aEZvckxvYWQocGVuZGluZ1NjcmlwdCk7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6c3Rv
cFdhdGNoaW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0KQogewogICAgIEFT
U0VSVChwZW5kaW5nU2NyaXB0LndhdGNoaW5nRm9yTG9hZCgpKTsKLSAgICBtX2hvc3Quc3RvcFdh
dGNoaW5nRm9yTG9hZChwZW5kaW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpKTsKLSAgICBwZW5kaW5n
U2NyaXB0LnNldFdhdGNoaW5nRm9yTG9hZChmYWxzZSk7CisgICAgbV9ob3N0LnN0b3BXYXRjaGlu
Z0ZvckxvYWQocGVuZGluZ1NjcmlwdCk7CiB9CiAKIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG1h
dGNoIDEwLjIuNS4xMSAiQW4gZW5kIHRhZyB3aG9zZSB0YWcgbmFtZSBpcyAnc2NyaXB0JyIKQEAg
LTE4NywyMSArMTg2LDIxIEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZShQYXNzUmVm
UHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQsIGNvbnN0IFRleHRQb3NpCiAKIGJvb2wgSFRNTFNj
cmlwdFJ1bm5lcjo6aGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSBjb25zdAogewotICAgIHJldHVy
biAhIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuZWxlbWVudCgpOworICAgIHJldHVybiAhIW1fcGFy
c2VyQmxvY2tpbmdTY3JpcHQ7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBh
cnNpbmdCbG9ja2luZ1NjcmlwdHMoKQogewotICAgIHdoaWxlIChoYXNQYXJzZXJCbG9ja2luZ1Nj
cmlwdCgpICYmIGlzUGVuZGluZ1NjcmlwdFJlYWR5KG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpKQor
ICAgIHdoaWxlIChoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpICYmIGlzUGVuZGluZ1NjcmlwdFJl
YWR5KCptX3BhcnNlckJsb2NraW5nU2NyaXB0KSkKICAgICAgICAgZXhlY3V0ZVBhcnNpbmdCbG9j
a2luZ1NjcmlwdCgpOwogfQogCi12b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRz
V2FpdGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFNjcmlwdCkKK3ZvaWQgSFRNTFNj
cmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0JiBw
ZW5kaW5nU2NyaXB0KQogewogICAgIEFTU0VSVCghaXNFeGVjdXRpbmdTY3JpcHQoKSk7CiAgICAg
QVNTRVJUKGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkpOwotICAgIEFTU0VSVF9VTlVTRUQoY2Fj
aGVkU2NyaXB0LCBtX3BhcnNlckJsb2NraW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpID09IGNhY2hl
ZFNjcmlwdCk7Ci0gICAgQVNTRVJUKG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0
KCktPmlzTG9hZGVkKCkpOworICAgIEFTU0VSVF9VTlVTRUQocGVuZGluZ1NjcmlwdCwgbV9wYXJz
ZXJCbG9ja2luZ1NjcmlwdC5nZXQoKSA9PSAmcGVuZGluZ1NjcmlwdCk7CisgICAgQVNTRVJUKG1f
cGFyc2VyQmxvY2tpbmdTY3JpcHQtPmlzTG9hZGVkKCkpOwogICAgIGV4ZWN1dGVQYXJzaW5nQmxv
Y2tpbmdTY3JpcHRzKCk7CiB9CiAKQEAgLTIyMSwxMyArMjIwLDEzIEBAIGJvb2wgSFRNTFNjcmlw
dFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yUGFyc2luZygpCiAgICAgd2hpbGUgKCFt
X3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIEFTU0VS
VCghaXNFeGVjdXRpbmdTY3JpcHQoKSk7CiAgICAgICAgIEFTU0VSVCghaGFzUGFyc2VyQmxvY2tp
bmdTY3JpcHQoKSk7Ci0gICAgICAgIEFTU0VSVChtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNp
bmcuZmlyc3QoKS5jYWNoZWRTY3JpcHQoKSk7Ci0gICAgICAgIGlmICghbV9zY3JpcHRzVG9FeGVj
dXRlQWZ0ZXJQYXJzaW5nLmZpcnN0KCkuY2FjaGVkU2NyaXB0KCktPmlzTG9hZGVkKCkpIHsKLSAg
ICAgICAgICAgIHdhdGNoRm9yTG9hZChtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuZmly
c3QoKSk7CisgICAgICAgIEFTU0VSVChtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuZmly
c3QoKS0+bmVlZHNMb2FkaW5nKCkpOworICAgICAgICBpZiAoIW1fc2NyaXB0c1RvRXhlY3V0ZUFm
dGVyUGFyc2luZy5maXJzdCgpLT5pc0xvYWRlZCgpKSB7CisgICAgICAgICAgICB3YXRjaEZvckxv
YWQoKm1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5maXJzdCgpKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBQZW5kaW5nU2NyaXB0IGZpcnN0ID0g
bV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLnRha2VGaXJzdCgpOwotICAgICAgICBleGVj
dXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoZmlyc3QpOworICAgICAgICBSZWZQdHI8
UGVuZGluZ1NjcmlwdD4gZmlyc3QgPSBtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcudGFr
ZUZpcnN0KCk7CisgICAgICAgIGV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudCgq
Zmlyc3QpOwogICAgICAgICAvLyBGSVhNRTogV2hhdCBpcyB0aGlzIG1fZG9jdW1lbnQgY2hlY2sg
Zm9yPwogICAgICAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yMzcsNDAgKzIzNiwzOCBAQCBib29sIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3Jp
cHRzV2FpdGluZ0ZvclBhcnNpbmcoKQogCiB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQ
YXJzaW5nQmxvY2tpbmdTY3JpcHQoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIXJlcXVl
c3RQZW5kaW5nU2NyaXB0KG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQsIGVsZW1lbnQpKQorICAgIEFT
U0VSVCghbV9wYXJzZXJCbG9ja2luZ1NjcmlwdCk7CisgICAgaWYgKCEobV9wYXJzZXJCbG9ja2lu
Z1NjcmlwdCA9IHJlcXVlc3RQZW5kaW5nU2NyaXB0KGVsZW1lbnQpKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQVNTRVJUKG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwor
ICAgIEFTU0VSVChtX3BhcnNlckJsb2NraW5nU2NyaXB0LT5uZWVkc0xvYWRpbmcoKSk7CiAKICAg
ICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYSBsb2FkIGNhbGxiYWNrIGlmIGNhY2hlZFNjcmlwdCBp
cyBub3QgYWxyZWFkeQogICAgIC8vIGluIHRoZSBjYWNoZS4gQ2FsbGVycyB3aWxsIGF0dGVtcHQg
dG8gcnVuIHRoZSBtX3BhcnNlckJsb2NraW5nU2NyaXB0CiAgICAgLy8gaWYgcG9zc2libGUgYmVm
b3JlIHJldHVybmluZyBjb250cm9sIHRvIHRoZSBwYXJzZXIuCi0gICAgaWYgKCFtX3BhcnNlckJs
b2NraW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpLT5pc0xvYWRlZCgpKQotICAgICAgICB3YXRjaEZv
ckxvYWQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCk7CisgICAgaWYgKCFtX3BhcnNlckJsb2NraW5n
U2NyaXB0LT5pc0xvYWRlZCgpKQorICAgICAgICB3YXRjaEZvckxvYWQoKm1fcGFyc2VyQmxvY2tp
bmdTY3JpcHQpOwogfQogCiB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3REZWZlcnJlZFNj
cmlwdChFbGVtZW50KiBlbGVtZW50KQogewotICAgIFBlbmRpbmdTY3JpcHQgcGVuZGluZ1Njcmlw
dDsKLSAgICBpZiAoIXJlcXVlc3RQZW5kaW5nU2NyaXB0KHBlbmRpbmdTY3JpcHQsIGVsZW1lbnQp
KQorICAgIFJlZlB0cjxQZW5kaW5nU2NyaXB0PiBwZW5kaW5nU2NyaXB0OworICAgIGlmICghKHBl
bmRpbmdTY3JpcHQgPSByZXF1ZXN0UGVuZGluZ1NjcmlwdChlbGVtZW50KSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVChwZW5kaW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpKTsKKyAgICBB
U1NFUlQocGVuZGluZ1NjcmlwdC0+bmVlZHNMb2FkaW5nKCkpOwogICAgIG1fc2NyaXB0c1RvRXhl
Y3V0ZUFmdGVyUGFyc2luZy5hcHBlbmQocGVuZGluZ1NjcmlwdCk7CiB9CiAKLWJvb2wgSFRNTFNj
cmlwdFJ1bm5lcjo6cmVxdWVzdFBlbmRpbmdTY3JpcHQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1Nj
cmlwdCwgRWxlbWVudCogc2NyaXB0KSBjb25zdAorUmVmUHRyPFBlbmRpbmdTY3JpcHQ+IEhUTUxT
Y3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCkgY29uc3QK
IHsKLSAgICBBU1NFUlQoIXBlbmRpbmdTY3JpcHQuZWxlbWVudCgpKTsKLSAgICBwZW5kaW5nU2Ny
aXB0LnNldEVsZW1lbnQoc2NyaXB0KTsKICAgICAvLyBUaGlzIHNob3VsZCBjb3JyZWN0bHkgcmV0
dXJuIDAgZm9yIGVtcHR5IG9yIGludmFsaWQgc3JjVmFsdWVzLgogICAgIENhY2hlZFNjcmlwdCog
Y2FjaGVkU2NyaXB0ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShzY3JpcHQpLT5jYWNoZWRT
Y3JpcHQoKS5nZXQoKTsKLSAgICBpZiAoIWNhY2hlZFNjcmlwdCkgewotICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOyAvLyBEaXNwYXRjaCBlcnJvciBldmVudC4KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBwZW5kaW5nU2NyaXB0LnNldENhY2hlZFNjcmlwdChjYWNoZWRTY3JpcHQp
OwotICAgIHJldHVybiB0cnVlOworICAgIGlmIChjYWNoZWRTY3JpcHQpCisgICAgICAgIHJldHVy
biBQZW5kaW5nU2NyaXB0OjpjcmVhdGUoKnNjcmlwdCwgKmNhY2hlZFNjcmlwdCk7CisKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOyAvLyBEaXNwYXRjaCBlcnJvciBldmVudC4KKyAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgbWVhbnQgdG8gbWF0Y2ggdGhlIEhUTUw1IGRl
ZmluaXRpb24gb2YgInJ1bm5pbmcgYSBzY3JpcHQiCkBAIC0zMDksOCArMzA2LDcgQEAgdm9pZCBI
VE1MU2NyaXB0UnVubmVyOjpydW5TY3JpcHQoRWxlbWVudCogc2NyaXB0LCBjb25zdCBUZXh0UG9z
aXRpb24mIHNjcmlwdFN0YXIKICAgICAgICAgICAgIHJlcXVlc3REZWZlcnJlZFNjcmlwdChzY3Jp
cHQpOwogICAgICAgICBlbHNlIGlmIChzY3JpcHRFbGVtZW50LT5yZWFkeVRvQmVQYXJzZXJFeGVj
dXRlZCgpKSB7CiAgICAgICAgICAgICBpZiAobV9zY3JpcHROZXN0aW5nTGV2ZWwgPT0gMSkgewot
ICAgICAgICAgICAgICAgIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuc2V0RWxlbWVudChzY3JpcHQp
OwotICAgICAgICAgICAgICAgIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuc2V0U3RhcnRpbmdQb3Np
dGlvbihzY3JpcHRTdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBtX3BhcnNlckJsb2Nr
aW5nU2NyaXB0ID0gUGVuZGluZ1NjcmlwdDo6Y3JlYXRlKCpzY3JpcHQsIHNjcmlwdFN0YXJ0UG9z
aXRpb24pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTY3JpcHRTb3Vy
Y2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNj
cmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAgICAgICAg
ICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAppbmRleCA0NWJmOGQw
MzI0ZjhlZDIxYzllNmU4ZGRlMTRiYmM5ZGUwNmNiYzdhLi5mZTY1ZmExMjYyODJhZmRiNWViYmFk
NmNiOWRjYjRhY2Y1ZTZmMTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MU2NyaXB0UnVubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFNjcmlwdFJ1bm5lci5oCkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIEhUTUxTY3JpcHRSdW5uZXIg
ewogICAgIC8vIFByb2Nlc3NlcyB0aGUgcGFzc2VkIGluIHNjcmlwdCBhbmQgYW55IHBlbmRpbmcg
c2NyaXB0cyBpZiBwb3NzaWJsZS4KICAgICB2b2lkIGV4ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50
PiBzY3JpcHRUb1Byb2Nlc3MsIGNvbnN0IFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlv
bik7CiAKLSAgICB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3Vy
Y2UqKTsKKyAgICB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQoUGVuZGluZ1Njcmlw
dCYpOwogICAgIGJvb2wgaGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0czsgfQogICAgIHZvaWQgZXhl
Y3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKICAgICBib29sIGV4ZWN1dGVTY3Jp
cHRzV2FpdGluZ0ZvclBhcnNpbmcoKTsKQEAgLTY4LDcgKzY4LDcgQEAgY2xhc3MgSFRNTFNjcmlw
dFJ1bm5lciB7CiAKICAgICB2b2lkIHJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQoRWxlbWVu
dCopOwogICAgIHZvaWQgcmVxdWVzdERlZmVycmVkU2NyaXB0KEVsZW1lbnQqKTsKLSAgICBib29s
IHJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgUmVmUHRyPFBlbmRpbmdTY3JpcHQ+IHJlcXVlc3RQZW5kaW5nU2NyaXB0KEVsZW1lbnQqKSBj
b25zdDsKIAogICAgIHZvaWQgcnVuU2NyaXB0KEVsZW1lbnQqLCBjb25zdCBUZXh0UG9zaXRpb24m
IHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCkBAIC04MCw4ICs4MCw4IEBAIGNsYXNzIEhUTUxTY3Jp
cHRSdW5uZXIgewogCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgSFRNTFNjcmlwdFJ1
bm5lckhvc3QmIG1faG9zdDsKLSAgICBQZW5kaW5nU2NyaXB0IG1fcGFyc2VyQmxvY2tpbmdTY3Jp
cHQ7Ci0gICAgRGVxdWU8UGVuZGluZ1NjcmlwdD4gbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJz
aW5nOyAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3Jr
LyNsaXN0LW9mLXNjcmlwdHMtdGhhdC13aWxsLWV4ZWN1dGUtd2hlbi10aGUtZG9jdW1lbnQtaGFz
LWZpbmlzaGVkLXBhcnNpbmcKKyAgICBSZWZQdHI8UGVuZGluZ1NjcmlwdD4gbV9wYXJzZXJCbG9j
a2luZ1NjcmlwdDsKKyAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ1NjcmlwdD4+IG1fc2NyaXB0c1Rv
RXhlY3V0ZUFmdGVyUGFyc2luZzsgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1h
cHBzL2N1cnJlbnQtd29yay8jbGlzdC1vZi1zY3JpcHRzLXRoYXQtd2lsbC1leGVjdXRlLXdoZW4t
dGhlLWRvY3VtZW50LWhhcy1maW5pc2hlZC1wYXJzaW5nCiAgICAgdW5zaWduZWQgbV9zY3JpcHRO
ZXN0aW5nTGV2ZWw7CiAKICAgICAvLyBXZSBvbmx5IHdhbnQgc3R5bGVzaGVldCBsb2FkcyB0byB0
cmlnZ2VyIHNjcmlwdCBleGVjdXRpb24gaWYgc2NyaXB0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVySG9zdC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lckhvc3QuaAppbmRleCAxZjIyODk2NTdlMDA0NzZh
Zjk0MDk3ZjI1MDNlNTI1MmE0YmExYTg1Li44YTYzYmNiMGU5NzhhODQ0NzFhMzUzYWM3NTczNmYz
YzRhY2FiYWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2Ny
aXB0UnVubmVySG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3Jp
cHRSdW5uZXJIb3N0LmgKQEAgLTMwLDkgKzMwLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZTsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBIVE1MSW5wdXRT
dHJlYW07CitjbGFzcyBQZW5kaW5nU2NyaXB0OwogY2xhc3MgU2NyaXB0U291cmNlQ29kZTsKIAog
Y2xhc3MgSFRNTFNjcmlwdFJ1bm5lckhvc3QgewpAQCAtNDAsOSArNDAsOSBAQCBjbGFzcyBIVE1M
U2NyaXB0UnVubmVySG9zdCB7CiAgICAgdmlydHVhbCB+SFRNTFNjcmlwdFJ1bm5lckhvc3QoKSB7
IH0KIAogICAgIC8vIEltcGxlbWVudG9ycyBzaG91bGQgY2FsbCBjYWNoZWRSZXNvdXJjZS0+YWRk
Q2xpZW50KCkgaGVyZSBvciBzb29uIGFmdGVyLgotICAgIHZpcnR1YWwgdm9pZCB3YXRjaEZvckxv
YWQoQ2FjaGVkUmVzb3VyY2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdhdGNoRm9yTG9hZChQ
ZW5kaW5nU2NyaXB0JikgPSAwOwogICAgIC8vIEltcGxlbWVudG9ycyBtdXN0IGNhbGwgY2FjaGVk
UmVzb3VyY2UtPnJlbW92ZUNsaWVudCgpIGltbWVkaWF0ZWx5LgotICAgIHZpcnR1YWwgdm9pZCBz
dG9wV2F0Y2hpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzdG9wV2F0Y2hpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmKSA9IDA7CiAKICAgICB2aXJ0dWFs
IEhUTUxJbnB1dFN0cmVhbSYgaW5wdXRTdHJlYW0oKSA9IDA7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287447</attachid>
            <date>2016-08-30 16:17:29 -0700</date>
            <delta_ts>2016-08-30 17:26:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161350-20160830161517.patch</filename>
            <type>text/plain</type>
            <size>41563</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1MTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNjYTcyZTNhNzFjOGFl
NWRlN2QxZGQ3MjVjZjRiOWE0ODlhNzFjMy4uNWJhNzQzMTA5YWNlYTZkN2Y4NWY1MDVjOTUxMDAz
MWI1MTIwOGNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE2LTA4LTMwICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIE1ha2UgUGVuZGlu
Z1NjcmlwdCBhcyByZWYtY291bnRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxMzUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ3VycmVudGx5LCB3aGlsZSBQZW5kaW5nU2NyaXB0IGlzIGNvcHlhYmxl
LCBQZW5kaW5nU2NyaXB0IGlzIGFsc28gQ2FjaGVkUmVzb3VyY2VDbGllbnQuCisgICAgICAgIFNv
IHdoZW4gY29weWluZyB0aGlzLCB0aGUgY2xpZW50IHJlZ2lzdHJhdGlvbiBpcyBkb25lIGluIFBl
bmRpbmdTY3JpcHQncyBvcGVyYXRvcj0gZXRjLgorICAgICAgICBIb3dldmVyLCB0aGlzIGNvcHlp
bmcgZnVuY3Rpb25hbGl0eSBpcyBub3QgZWZmZWN0aXZlbHkgdXNlZC4KKyAgICAgICAgSW4gdGhp
cyBwYXRjaCwgd2UgY2hhbmdlIHRoaXMgUGVuZGluZ1NjcmlwdCB0byByZWYtY291bnRlZCBjbGFz
cyBhbmQgbWFrZSBpdCBub25jb3B5YWJsZS4KKyAgICAgICAgVGhpcyBjaGFuZ2UgbWFrZXMgdGhp
bmdzIHNpbXBsZSAoZHJvcHBpbmcgdGhpcyBjb3B5aW5nIGZ1bmN0aW9uYWxpdHkpLCBhbmQgZHJv
cCB1bm5lY2Vzc2FyeSBhZGRDbGllbnQgLyByZW1vdmVDbGllbnQgY2FsbHMuCisgICAgICAgIEFu
ZCB3ZSBhbHNvIHNpbXBsaWZ5IFBlbmRpbmdTY3JpcHQgY2xhc3MuIFNpbmNlIHdlIGNhbiBvZmZl
ciBhbGwgdGhlIG1lbWJlcnMgYXQgdGhlIGNvbnN0cnVjdGlvbiB0aW1lLCB3ZSBkb24ndCBuZWVk
IGFueSBzZXR0ZXJzIGxpa2Ugc2V0Q2FjaGVkU2NyaXB0LCBzZXRFbGVtZW50IGV0Yy4KKyAgICAg
ICAgVGhpcyBwcmV2ZW50IHVzIGZyb20gYWNjaWRlbnRhbGx5IGdlbmVyYXRpbmcgdGhlIGhhbGYt
YmFrZWQgcGVuZGluZyBzY3JpcHQuCisKKyAgICAgICAgRnVydGhlcm1vcmUsIGJ5IGNoYW5naW5n
IFBlbmRpbmdTY3JpcHQgbm9uY29weWFibGUgJiByZWYtY291bnRlZCwgd2UgZWFzaWx5IG1ha2Ug
aXQgb2JzZXJ2YWJsZS4KKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgYWRkIFBlbmRpbmdTY3Jp
cHRDbGllbnQgdG8gcmVjZWl2ZSB0aGUgbm90aWZpY2F0aW9uIGZyb20gUGVuZGluZ1NjcmlwdC4K
KyAgICAgICAgUHJldmlvdXNseSwgd2UgZGlyZWN0bHkgdXNlZCBDYWNoZWRTY3JpcHQgaW4gUGVu
ZGluZ1NjcmlwdCB0byByZWNlaXZlIHRoZSBub3RpZmljYXRpb24uCisgICAgICAgIFdoZW4gaW50
cm9kdWNpbmcgU2NyaXB0TW9kdWxlR3JhcGggYW5kIG1ha2luZyB0aGlzIFBlbmRpbmdTY3JpcHQg
dGhlIGNvbnRhaW5lciBvZiB0aGUgYm90aCBDYWNoZWRTY3JpcHQgYW5kIFNjcmlwdE1vZHVsZUdy
YXBoLAorICAgICAgICBoaWRpbmcgdGhlIHJhdyBDYWNoZWRTY3JpcHQgb3BlcmF0aW9ucyBpcyB1
c2VmdWwuCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlcy4KKworICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vUGVuZGluZ1Njcmlw
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmNyZWF0ZSk6IFRoZXNlIGZhY3Rvcnkg
ZnVuY3Rpb25zIHRha2UgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29uc3RydWN0IHRo
ZSBQZW5kaW5nU2NyaXB0LiBTbyB0aGUgc2V0dGVycyBvZiBQZW5kaW5nU2NyaXB0IGFyZSBkcm9w
cGVkLgorICAgICAgICBUaGlzIGlzIGJldHRlciBzaW5jZSB3ZSBub3cgZG8gbm90IGV4cG9zZSBh
bnkgaGFsZi1iYWtlZCBwZW5kaW5nIHNjcmlwdCBhY2NpZGVudGFsbHkuCisgICAgICAgIChXZWJD
b3JlOjpQZW5kaW5nU2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCk6CisgICAgICAgIChXZWJD
b3JlOjpQZW5kaW5nU2NyaXB0Ojpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZW5kaW5nU2NyaXB0Ojppc0xvYWRlZCk6IFdoZW4gaW50cm9kdWNpbmcgU2NyaXB0TW9kdWxlR3Jh
cGgsIHRoaXMgd2lsbCBxdWVyeSB0byBlaXRoZXIgQ2FjaGVkU2NyaXB0IG9yIFNjcmlwdE1vZHVs
ZUdyYXBoLiBQZW5kaW5nU2NyaXB0IHdpbGwgYmVjb21lIHRoZSBjb250YWluZXIgZm9yIHRoZSBi
b3RoIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6c2V0Q2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OmNsZWFyQ2xpZW50KTogUGVuZGluZ1Nj
cmlwdCBpcyBub3cgb2JzZXJ2YWJsZSBieSBQZW5kaW5nU2NyaXB0Q2xpZW50LiBUaGlzIGF2b2lk
cyB0b3VjaGluZyBDYWNoZWRTY3JpcHQgaW4gUGVuZGluZ1NjcmlwdCBkaXJlY3RseS4KKyAgICAg
ICAgVGhhdCBpcyBnb29kIHdoZW4gd2UgaW50cm9kdWNlIFNjcmlwdE1vZHVsZUdyYXBoIGFuZCBt
YWtlIFBlbmRpbmdTY3JpcHQgdGhlIGNvbnRhaW5lciBvZiB0aGUgYm90aCBDYWNoZWRTY3JpcHQg
YW5kIFNjcmlwdE1vZHVsZUdyYXBoLgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6
cmVsZWFzZUVsZW1lbnRBbmRDbGVhcik6IERlbGV0ZWQuIFByZXZpb3VzbHksIFBlbmRpbmdTY3Jp
cHQgaXMgbm90IHJlZi1jb3VudGVkLiBTbyB3aGVuIHdlIHdvdWxkIGxpa2UgdG8gc2F5ICJ0aGlz
IHBlbmRpbmcgc2NyaXB0IGlzIGVtcHR5IiwKKyAgICAgICAgd2UgdXNlZCB0aGUgcGVuZGluZyBz
Y3JpcHQgd2l0aCBgbV9lbGVtZW50ID0gbnVsbHB0cmAuIFRoaXMgcmVsZWFzZUVsZW1lbnRBbmRD
bGVhciBjbGVhcmVkIHRoaXMgbV9lbGVtZW50IGFuZCBtYWRlIHRoZSBwZW5kaW5nIHNjcmlwdCBl
bXB0eS4gTm93LCB3ZSB1c2UgUmVmUHRyPFBlbmRpbmdTY3JpcHQ+CisgICAgICAgIGFuZCBlbXB0
eSBvbmUgaXMganVzdCByZXByZXNlbnRlZCBieSB0aGUgbnVsbHB0ci4gVGhpcyBmdW5jdGlvbiBp
cyBubyBsb25nZXIgbmVjZXNzYXJ5LiBEcm9wcGVkLgorICAgICAgICAoV2ViQ29yZTo6UGVuZGlu
Z1NjcmlwdDo6c2V0Q2FjaGVkU2NyaXB0KTogRGVsZXRlZC4gVGhlIGZpZWxkcyBhcmUgc2V0IGlu
IHRoZSBjb25zdHJ1Y3Rvci4gU28gdGhpcyBzZXR0ZXIgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4g
RHJvcHBlZC4KKyAgICAgICAgKiBkb20vUGVuZGluZ1NjcmlwdC5oOgorICAgICAgICAqIGRvbS9Q
ZW5kaW5nU2NyaXB0Q2xpZW50Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXJIb3N0LmguCisgICAgICAgIChXZWJDb3JlOjpQZW5kaW5nU2Ny
aXB0Q2xpZW50Ojp+UGVuZGluZ1NjcmlwdENsaWVudCk6CisgICAgICAgICogZG9tL1NjcmlwdFJ1
bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRSdW5uZXI6OnF1ZXVlU2NyaXB0Rm9y
RXhlY3V0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFJ1bm5lcjo6bm90aWZ5U2NyaXB0
UmVhZHkpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UnVubmVyOjp0aW1lckZpcmVkKTogV2Ug
dXNlIGBzdGQ6OmV4Y2hhbmdlYCB0byByZXRyaWV2ZSB0aGUgUmVmUHRyPFBlbmRpbmdTY3JpcHQ+
IGFuZCBtYWtlIHRoZSBvcmlnaW5hbCB2ZWN0b3IgZWxlbWVudCBudWxscHRyLiBXaXRob3V0IHRo
aXMsIGFsbCB0aGUgUGVuZGluZ1NjcmlwdCBpcyBoZWxkIHVudGlsIHRoZSBpdGVyYXRpb24gZmlu
aXNoZXMuCisgICAgICAgIFdlIGZvbGxvdyB0aGUgb3JpZ2luYWwgc2VtYW50aWNzIGhlcmUgdGhh
dCB0aGUgcGVuZGluZyBzY3JpcHQgY2FuIGJlIGRlYWxsb2NhdGVkIHBlciBpdGVyYXRpb24uCisg
ICAgICAgICogZG9tL1NjcmlwdFJ1bm5lci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6
OndhdGNoRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnN0
b3BXYXRjaGluZ0ZvckxvYWQpOiBVc2UgUGVuZGluZ1NjcmlwdCBpbnN0ZWFkIG9mIHRvdWNoaW5n
IENhY2hlZFNjcmlwdCBkaXJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBh
cnNlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVu
dFBhcnNlci5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6fkhUTUxTY3JpcHRSdW5uZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6c291cmNlRnJvbVBlbmRpbmdTY3Jp
cHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6aXNQZW5kaW5nU2NyaXB0
UmVhZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBhcnNp
bmdCbG9ja2luZ1NjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpl
eGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQpOiBBcyB0aGUgcHJldmlvdXMgY29t
bWVudCBkZXNjcmliZXMsIHdlIHVzZWQgcmVsZWFzZUVsZW1lbnRBbmRDbGVhciB0byBtYWtlIHRo
ZSBjdXJyZW50IHBlbmRpbmcgc2NyaXB0IGVtcHR5LgorICAgICAgICBJbnN0ZWFkIG9mIGRvaW5n
IHNvLCB3ZSBub3cgZXhwbGljaXRseSBjbGVhciBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0
IChieSBhc3NpZ25pbmcgbnVsbHB0ciB0byBtX3BhcnNlckJsb2NraW5nU2NyaXB0KS4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OndhdGNoRm9yTG9hZCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKTogUHJldmlvdXNs
eSwgd2UgdXNlZCBDYWNoZWRTY3JpcHQ6OmFkZENsaWVudCBkaXJlY3RseSBpbiB0aGUgbV9ob3N0
LndhdGNoRm9yTG9hZC4KKyAgICAgICAgVGhpcyBtZWFucyB0aGF0IHdlIGRpZCBub3QgaGF2ZSBh
IHF1aWNrIHdheSB0byBxdWVyeSB3aGV0aGVyIHRoZSBwZW5kaW5nIHNjcmlwdCBpcyB3YXRjaGVk
LiBJbiB0aGUgb2xkIGltcGxlbWVudGF0aW9uLCB3ZSBoYXZlIHRoZSBgbV93YXRjaGluZ0Zvckxv
YWQgOiBib29sYCBmbGFnIGluIFBlbmRpbmdTY3JpcHQKKyAgICAgICAgdG8gaG9sZCB0aGUgd2F0
Y2hpbmcgc3RhdHVzIGZvciB0aGUgZ2l2ZW4gcGVuZGluZyBzY3JpcHQuIFRoaXMgYHBlbmRpbmdT
Y3JpcHQuc2V0V2F0Y2hpbmdGb3JMb2FkKHRydWUpYCBqdXN0IG1hZGUgdGhpcyBmbGFnIGB0cnVl
YC4KKyAgICAgICAgQnV0IG5vdywgd2UgZG8gbm90IHVzZSBDYWNoZWRTY3JpcHQ6OmFkZENsaWVu
dCBkaXJlY3RseS4gSW5zdGVhZCwgd2UgaGF2ZSB0aGUgUGVuZGluZ1NjcmlwdENsaWVudCBhbmQg
UGVuZGluZ1NjcmlwdDo6e3NldENsaWVudCxjbGVhckNsaWVudH0uCisgICAgICAgIFdlIGNhbiBr
bm93IHdoZXRoZXIgdGhpcyBwZW5kaW5nIHNjcmlwdCBpcyB3YXRjaGVkIGJ5IGNoZWNraW5nIGBt
X2NsaWVudCAhPSBudWxscHRyYC4gVGhpcyBtYWtlcyBgbV93YXRjaGluZ0ZvckxvYWRgIHVubmVj
ZXNzYXJ5LgorICAgICAgICBTbyB0aGlzIHBhdGNoIGRyb3BzIGBtX3dhdGNoaW5nRm9yTG9hZGAg
YW5kIGBwZW5kaW5nU2NyaXB0LnNldFdhdGNoaW5nRm9yTG9hZCh0cnVlKWAgY2FsbC4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6Omhhc1BhcnNlckJsb2NraW5nU2NyaXB0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQYXJzaW5nQmxvY2tp
bmdTY3JpcHRzKTogV2UgY2xlYXIgdGhlIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQgaGVyZSBpbnN0
ZWFkIG9mIHRoZSBtaWRkbGUgb2YgdGhlIGV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hF
dmVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRz
V2FpdGluZ0ZvckxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhl
Y3V0ZVNjcmlwdHNXYWl0aW5nRm9yUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Ny
aXB0UnVubmVyOjpyZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KTogU2V0dGluZyBtX3BhcnNp
bmdCbG9ja2luZ1NjcmlwdCBpcyBub3cgZG9uZSBpbiB0aGlzIGNhbGxlciBzaWRlLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdERlZmVycmVkU2NyaXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KTog
SW5zdGVhZCBvZiBjb25maWd1cmluZyB0aGUgcGFzc2VkIFBlbmRpbmdTY3JpcHQmLCB3ZSByZXR1
cm4gdGhlIHBlbmRpbmcgc2NyaXB0IGFuZCB0aGUgY2FsbGVyIHNldHMgaXQgdG8gbV9wYXJzZXJC
bG9ja2luZ1NjcmlwdCBvciBob2xkcyBpdC4KKyAgICAgICAgUHJldmlvdXNseSwgd2UgYWx3YXlz
IG1ha2UgUGVuZGluZ1NjcmlwdCYgdmFsaWQgYnkgYWx3YXlzIGNhbGxpbmcgYHNldEVsZW1lbnQo
Li4uKWAuIEkgdGhpbmsgdGhpcyBpcyB0aGUgYnVnIHNpbmNlIHdlIGFjY2lkZW50YWxseSBleHBv
c2VkIHRoZSBoYWxmLWJha2VkIHBlbmRpbmcgc2NyaXB0LgorICAgICAgICBCdXQgdGhpcyBidWcg
aXMgbm90IHNob3duIHNpbmNlIGAhY2FjaGVkU2NyaXB0YCBwYXRoIGlzIGRlYWQgY29kZSEgTGV0
J3MgZGVzY3JpYmUgdGhlIHNpdHVhdGlvbi4KKyAgICAgICAgVGhpcyByZXF1ZXN0UGVuZGluZ1Nj
cmlwdCBpcyBjYWxsZWQgZnJvbSB0d28gcGxhY2VzLCByZXF1ZXN0RGVmZXJyZWRTY3JpcHQgYW5k
IHJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQuIEFuZCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNh
bGxlZCBpZiB0aGUgc2NyaXB0IGhhcyBgd2lsbEJlUGFyc2VyRXhlY3V0ZWRgIGZsYWcuCisgICAg
ICAgIEluIHRoZSBjYXNlIG9mIHRoZSBzY3JpcHQgdGFnIGhhdmluZyAic3JjIiBhdHRyaWJ1dGUs
IHRoaXMgZmxhZyBpcyBvbmx5IHNldCBpZiBgY2FjaGVkU2NyaXB0YCBpcyBjb3JyZWN0bHkgaW5z
dGFudGlhdGVkLiBTbyB3aGVuIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCB3ZSBjYW4gZW5z
dXJlIHRoYXQgYGNhY2hlZFNjcmlwdGAgaXMgY29ycmVjdGx5IGluc3RhbnRpYXRlZCBmb3IgdGhl
IGdpdmVuIHNjcmlwdC4KKyAgICAgICAgSW4gdGhlIGNhc2Ugb2YgdGhlIHNjcmlwdCB0YWcgbm90
IGhhdmluZyAic3JjIiBhdHRyaWJ1dGUsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgd29uJ3QgYmUgY2Fs
bGVkLiBUaGlzIGlzIGJlY2F1c2UgaWYgc3VjaCBhIHNjcmlwdCB0YWcgaGFzIGB3aWxsQmVQYXJz
ZXJFeGVjdXRlZGAgZmxhZywgaXQgYWxzbyBoYXMgYG1fcmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWRg
IGFuZCBpdCBkb2VzIG5vdCBoYXZlIGBtX3dpbGxFeGVjdXRlV2hlbkRvY3VtZW50RmluaXNoZWRQ
YXJzaW5nYCBmbGFnLCBhbmQgaW4gdGhhdCBjYXNlIHRoZSBib3RoIGZ1bmN0aW9ucyBhcmUgbmV2
ZXIgY2FsbGVkLgorICAgICAgICBTbyB3ZSBkcm9wIHRoYXQgcGF0aCBhbmQgaW5zZXJ0IHRoZSBh
c3NlcnRpb24gdG8gZW5zdXJlIHRoZSBhYm92ZSBjb25kaXRpb25zLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2NyaXB0KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MU2NyaXB0UnVubmVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ckhvc3QuaDoKKwogMjAxNi0wOC0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFdlIHNob3VsZCB0aHJvdyBhIFNlY3VyaXR5RXJyb3Igd2hlbiBkZW55aW5nIHNl
dHRpbmcgYSBjcm9zcy1vcmlnaW4gV2luZG93IHByb3BlcnR5CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzUxNTRkY2FjZjU1Mzhk
MzNkYzZjYmI4ZjdmYmQyMTkwZTZhMGJkMC4uZTg4MGIxN2U4NTkyMTE2M2M3YWY4NGU0MDA1ODZm
MDgyOGFlYjRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNjA4Niw2ICs2MDg2LDcgQEAKIAkJRTFGRjhGNkQxODBEQjVCRTAw
MTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUZGOEY2QjE4MERCNUJFMDAxMzI2NzQgLyogQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCAqLzsgfTsKIAkJRTM4ODM4OTgxQkFEMTQ1RjAwRDYyRUUz
IC8qIEpTTW9kdWxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzODgzODk0MUJBRDE0NUYwMEQ2MkVFMyAvKiBKU01vZHVsZUxvYWRlci5j
cHAgKi87IH07CiAJCUUzODgzODk5MUJBRDE0NUYwMEQ2MkVFMyAvKiBKU01vZHVsZUxvYWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM4ODM4OTUx
QkFEMTQ1RjAwRDYyRUUzIC8qIEpTTW9kdWxlTG9hZGVyLmggKi87IH07CisJCUUzRkEzODY0MUQ3
MTgxMkQwMEFBNTk1MCAvKiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZBMzg2MTFENzE2RTc2MDBBQTU5NTAgLyog
UGVuZGluZ1NjcmlwdENsaWVudC5oICovOyB9OwogCQlFNDAxQzI3NTE3Q0U1M0VDMDBDNDFBMzUg
LyogRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQwMUMyNzQxN0NFNTNFQzAwQzQxQTM1IC8qIEVsZW1lbnRJ
dGVyYXRvckFzc2VydGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlFNDAxRTBBNDFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MDFFMEEzMUMz
QzBCODMwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0MDFFMEE2MUMzQzBDRjcwMEYzNEQxMCAvKiBTdHls
ZUNoYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDAxRTBBNTFDM0MwQ0Y3MDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuY3BwICovOyB9OwpAQCAt
MTM2NDcsNiArMTM2NDgsNyBAQAogCQlFMUZGOEY2QjE4MERCNUJFMDAxMzI2NzQgLyogQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4
ODM4OTQxQkFEMTQ1RjAwRDYyRUUzIC8qIEpTTW9kdWxlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTW9kdWxlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTM4ODM4OTUxQkFEMTQ1RjAwRDYyRUUzIC8qIEpTTW9kdWxlTG9h
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlTG9hZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzRkEzODYxMUQ3MTZFNzYwMEFBNTk1MCAv
KiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBlbmRpbmdTY3JpcHRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQw
MUMyNzQxN0NFNTNFQzAwQzQxQTM1IC8qIEVsZW1lbnRJdGVyYXRvckFzc2VydGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDAxRTBBMzFDM0MwQjgzMDBGMzREMTAg
LyogU3R5bGVDaGFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVD
aGFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQwMUUwQTUxQzNDMENGNzAw
RjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0eWxlQ2hhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIz
MDU2LDYgKzIzMDU4LDcgQEAKIAkJCQk4M0QyNkQzRDFBRkRDQzUwMDAxQjM4NzMgLyogUGFyZW50
Tm9kZS5pZGwgKi8sCiAJCQkJOEE3Q0M5NkYxMjA3NkY4QTAwMUQ0NTg4IC8qIFBlbmRpbmdTY3Jp
cHQuY3BwICovLAogCQkJCThBN0NDOTZBMTIwNzZENzMwMDFENDU4OCAvKiBQZW5kaW5nU2NyaXB0
LmggKi8sCisJCQkJRTNGQTM4NjExRDcxNkU3NjAwQUE1OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGll
bnQuaCAqLywKIAkJCQk0MUJGNzAwRDBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWwuY3BwICovLAogCQkJCTQxQkY3MDBFMEZFODZGNjEwMDVFOERFQyAvKiBQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oICovLAogCQkJCTUxODlGMEREMTBCNDZCMEUwMEYzQzcz
OSAvKiBQb3BTdGF0ZUV2ZW50LmNwcCAqLywKQEAgLTI3MDMxLDYgKzI3MDM0LDcgQEAKIAkJCQk1
OUMyODA0NjEzOERDMjQxMDA3OUI3RTIgLyogWE1MRXJyb3JzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTgzRDM1QUVDMUM3MTg3RkEwMEY3MEQ1QSAvKiBYTUxIdHRwUmVxdWVzdEV2ZW50
VGFyZ2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlFM0ZBMzg2NDFENzE4MTJEMDBBQTU5NTAgLyog
UGVuZGluZ1NjcmlwdENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjlGMEVEN0EwREI1MENB
MjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTEzNkEwMEQxMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudFRocm90dGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RGRDQ4RTBFMzA1MjkwMDA5RDEw
QUQgLyogWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L1BlbmRpbmdTY3JpcHQuY3BwCmluZGV4IDc4ZmYzZDg2ZjE1NDllMmUxNzg1ZjEyZWNjMzkyNjkw
MzExMjU4ODYuLmUyYjA4N2ZkMWI4ODM2NzQwNzRmZjg4ZjA2YzUwZDQxNmFiNTc0NmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKQEAgLTI4LDMyICsyOCwzOCBAQAogCiAjaW5j
bHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIlBl
bmRpbmdTY3JpcHRDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQZW5kaW5nU2Ny
aXB0OjpQZW5kaW5nU2NyaXB0KEVsZW1lbnQmIGVsZW1lbnQsIFRleHRQb3NpdGlvbiBzdGFydGlu
Z1Bvc2l0aW9uKQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX3N0YXJ0aW5nUG9z
aXRpb24oc3RhcnRpbmdQb3NpdGlvbikKK3sKK30KKworUGVuZGluZ1NjcmlwdDo6UGVuZGluZ1Nj
cmlwdChFbGVtZW50JiBlbGVtZW50LCBDYWNoZWRTY3JpcHQmIGNhY2hlZFNjcmlwdCkKKyAgICA6
IG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9jYWNoZWRTY3JpcHQoJmNhY2hlZFNjcmlwdCkK
K3sKK30KKwogUGVuZGluZ1NjcmlwdDo6flBlbmRpbmdTY3JpcHQoKQogewogICAgIGlmIChtX2Nh
Y2hlZFNjcmlwdCkKICAgICAgICAgbV9jYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsK
IH0KIAotUmVmUHRyPEVsZW1lbnQ+IFBlbmRpbmdTY3JpcHQ6OnJlbGVhc2VFbGVtZW50QW5kQ2xl
YXIoKQorUmVmPFBlbmRpbmdTY3JpcHQ+IFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZShFbGVtZW50JiBl
bGVtZW50LCBDYWNoZWRTY3JpcHQmIGNhY2hlZFNjcmlwdCkKIHsKLSAgICBzZXRDYWNoZWRTY3Jp
cHQobnVsbHB0cik7Ci0gICAgbV93YXRjaGluZ0ZvckxvYWQgPSBmYWxzZTsKLSAgICBtX3N0YXJ0
aW5nUG9zaXRpb24gPSBUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpOwotICAgIHJl
dHVybiBXVEZNb3ZlKG1fZWxlbWVudCk7CisgICAgUmVmPFBlbmRpbmdTY3JpcHQ+IHBlbmRpbmdT
Y3JpcHQgPSBhZG9wdFJlZigqbmV3IFBlbmRpbmdTY3JpcHQoZWxlbWVudCwgY2FjaGVkU2NyaXB0
KSk7CisgICAgY2FjaGVkU2NyaXB0LmFkZENsaWVudCgmcGVuZGluZ1NjcmlwdC5nZXQoKSk7Cisg
ICAgcmV0dXJuIHBlbmRpbmdTY3JpcHQ7CiB9CiAKLXZvaWQgUGVuZGluZ1NjcmlwdDo6c2V0Q2Fj
aGVkU2NyaXB0KENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQorUmVmPFBlbmRpbmdTY3JpcHQ+
IFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZShFbGVtZW50JiBlbGVtZW50LCBUZXh0UG9zaXRpb24gc2Ny
aXB0U3RhcnRQb3NpdGlvbikKIHsKLSAgICBpZiAobV9jYWNoZWRTY3JpcHQgPT0gY2FjaGVkU2Ny
aXB0KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fY2FjaGVkU2NyaXB0KQotICAgICAgICBt
X2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIG1fY2FjaGVkU2NyaXB0ID0g
Y2FjaGVkU2NyaXB0OwotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKLSAgICAgICAgbV9jYWNoZWRT
Y3JpcHQtPmFkZENsaWVudCh0aGlzKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQZW5kaW5n
U2NyaXB0KGVsZW1lbnQsIHNjcmlwdFN0YXJ0UG9zaXRpb24pKTsKIH0KIAogQ2FjaGVkU2NyaXB0
KiBQZW5kaW5nU2NyaXB0OjpjYWNoZWRTY3JpcHQoKSBjb25zdApAQCAtNjEsOCArNjcsMzcgQEAg
Q2FjaGVkU2NyaXB0KiBQZW5kaW5nU2NyaXB0OjpjYWNoZWRTY3JpcHQoKSBjb25zdAogICAgIHJl
dHVybiBtX2NhY2hlZFNjcmlwdC5nZXQoKTsKIH0KIAordm9pZCBQZW5kaW5nU2NyaXB0Ojpub3Rp
ZnlDbGllbnRGaW5pc2hlZCgpCit7CisgICAgUmVmPFBlbmRpbmdTY3JpcHQ+IHByb3RlY3RlZFRo
aXMoKnRoaXMpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm5vdGlmeUZp
bmlzaGVkKCp0aGlzKTsKK30KKwogdm9pZCBQZW5kaW5nU2NyaXB0Ojpub3RpZnlGaW5pc2hlZChD
YWNoZWRSZXNvdXJjZSopCiB7CisgICAgbm90aWZ5Q2xpZW50RmluaXNoZWQoKTsKK30KKworYm9v
bCBQZW5kaW5nU2NyaXB0Ojppc0xvYWRlZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fY2FjaGVkU2Ny
aXB0KQorICAgICAgICByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPmlzTG9hZGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFBlbmRpbmdTY3JpcHQ6OnNldENsaWVudChQZW5kaW5nU2Ny
aXB0Q2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9jbGll
bnQgPSBjbGllbnQ7CisgICAgaWYgKGlzTG9hZGVkKCkpCisgICAgICAgIG5vdGlmeUNsaWVudEZp
bmlzaGVkKCk7Cit9CisKK3ZvaWQgUGVuZGluZ1NjcmlwdDo6Y2xlYXJDbGllbnQoKQoreworICAg
IEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBudWxscHRyOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL1BlbmRpbmdTY3JpcHQuaAppbmRleCA2ZjRhZmUzNWUyNzAwMjU0NjM2MTk1NzBiYzFl
YTdjMWNiNDdmNDJhLi4xNjg0NGU1ZGVhMDRhNjJiYzIyZWZjMmYxZmZjZTU0YTlkNjFlNGNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKQEAgLTIzLDg1ICsyMyw2MiBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQZW5kaW5nU2NyaXB0X2gKLSNkZWZpbmUgUGVuZGlu
Z1NjcmlwdF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50
LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
UG9zaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIFBlbmRpbmdT
Y3JpcHRDbGllbnQ7CiAKIC8vIEEgY29udGFpbmVyIGZvciBhbiBleHRlcm5hbCBzY3JpcHQgd2hp
Y2ggbWF5IGJlIGxvYWRlZCBhbmQgZXhlY3V0ZWQuCiAvLwogLy8gQSBDYWNoZWRSZXNvdXJjZUhh
bmRsZSBhbG9uZSBkb2VzIG5vdCBwcmV2ZW50IHRoZSB1bmRlcmx5aW5nIENhY2hlZFJlc291cmNl
CiAvLyBmcm9tIHB1cmdpbmcgaXRzIGRhdGEgYnVmZmVyLiBUaGlzIGNsYXNzIGhvbGRzIGEgZHVt
bXkgY2xpZW50IG9wZW4gZm9yIGl0cwogLy8gbGlmZXRpbWUgaW4gb3JkZXIgdG8gZ3VhcmFudGVl
IHRoYXQgdGhlIGRhdGEgYnVmZmVyIHdpbGwgbm90IGJlIHB1cmdlZC4KLWNsYXNzIFBlbmRpbmdT
Y3JpcHQgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgUGVuZGlu
Z1NjcmlwdCBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdTY3JpcHQ+LCBwdWJsaWMg
Q2FjaGVkUmVzb3VyY2VDbGllbnQgeworV1RGX01BS0VfTk9OQ09QWUFCTEUoUGVuZGluZ1Njcmlw
dCk7CitXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBQZW5kaW5nU2NyaXB0
KCkKLSAgICAgICAgOiBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKLSAgICAgICAgLCBtX3N0YXJ0
aW5nUG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgUGVuZGluZ1NjcmlwdChFbGVtZW50KiBlbGVtZW50LCBDYWNoZWRTY3JpcHQq
IGNhY2hlZFNjcmlwdCkKLSAgICAgICAgOiBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKLSAgICAg
ICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHNldENhY2hlZFNjcmlwdChj
YWNoZWRTY3JpcHQpOwotICAgIH0KLQotICAgIFBlbmRpbmdTY3JpcHQoY29uc3QgUGVuZGluZ1Nj
cmlwdCYgb3RoZXIpCi0gICAgICAgIDogQ2FjaGVkUmVzb3VyY2VDbGllbnQob3RoZXIpCi0gICAg
ICAgICwgbV93YXRjaGluZ0ZvckxvYWQob3RoZXIubV93YXRjaGluZ0ZvckxvYWQpCi0gICAgICAg
ICwgbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKLSAgICAgICAgLCBtX3N0YXJ0aW5nUG9zaXRp
b24ob3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uKQotICAgIHsKLSAgICAgICAgc2V0Q2FjaGVkU2Ny
aXB0KG90aGVyLmNhY2hlZFNjcmlwdCgpKTsKLSAgICB9CisgICAgc3RhdGljIFJlZjxQZW5kaW5n
U2NyaXB0PiBjcmVhdGUoRWxlbWVudCYsIENhY2hlZFNjcmlwdCYpOworICAgIHN0YXRpYyBSZWY8
UGVuZGluZ1NjcmlwdD4gY3JlYXRlKEVsZW1lbnQmLCBUZXh0UG9zaXRpb24gc2NyaXB0U3RhcnRQ
b3NpdGlvbik7CiAKICAgICB2aXJ0dWFsIH5QZW5kaW5nU2NyaXB0KCk7CiAKLSAgICBQZW5kaW5n
U2NyaXB0JiBvcGVyYXRvcj0oY29uc3QgUGVuZGluZ1NjcmlwdCYgb3RoZXIpCi0gICAgewotICAg
ICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAg
ICAgICAgbV93YXRjaGluZ0ZvckxvYWQgPSBvdGhlci5tX3dhdGNoaW5nRm9yTG9hZDsKLSAgICAg
ICAgbV9lbGVtZW50ID0gb3RoZXIubV9lbGVtZW50OwotICAgICAgICBtX3N0YXJ0aW5nUG9zaXRp
b24gPSBvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb247Ci0gICAgICAgIHNldENhY2hlZFNjcmlwdChv
dGhlci5jYWNoZWRTY3JpcHQoKSk7Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQog
ICAgIFRleHRQb3NpdGlvbiBzdGFydGluZ1Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dGluZ1Bvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTdGFydGluZ1Bvc2l0aW9uKGNvbnN0IFRleHRQ
b3NpdGlvbiYgcG9zaXRpb24pIHsgbV9zdGFydGluZ1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAot
ICAgIGJvb2wgd2F0Y2hpbmdGb3JMb2FkKCkgY29uc3QgeyByZXR1cm4gbV93YXRjaGluZ0Zvckxv
YWQ7IH0KLSAgICB2b2lkIHNldFdhdGNoaW5nRm9yTG9hZChib29sIGIpIHsgbV93YXRjaGluZ0Zv
ckxvYWQgPSBiOyB9CisgICAgYm9vbCB3YXRjaGluZ0ZvckxvYWQoKSBjb25zdCB7IHJldHVybiBt
X2NsaWVudDsgfQogCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxl
bWVudC5nZXQoKTsgfQotICAgIHZvaWQgc2V0RWxlbWVudChFbGVtZW50KiBlbGVtZW50KSB7IG1f
ZWxlbWVudCA9IGVsZW1lbnQ7IH0KLSAgICBSZWZQdHI8RWxlbWVudD4gcmVsZWFzZUVsZW1lbnRB
bmRDbGVhcigpOworICAgIEVsZW1lbnQmIGVsZW1lbnQoKSB7IHJldHVybiBtX2VsZW1lbnQuZ2V0
KCk7IH0KKyAgICBjb25zdCBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50LmdldCgpOyB9CiAKICAgICBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0Q2FjaGVkU2NyaXB0KENhY2hlZFNjcmlwdCopOworICAgIGJvb2wgbmVlZHNM
b2FkaW5nKCkgY29uc3QgeyByZXR1cm4gY2FjaGVkU2NyaXB0KCk7IH0KKworICAgIGJvb2wgaXNM
b2FkZWQoKSBjb25zdDsKIAogICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2Uq
KSBvdmVycmlkZTsKIAorICAgIHZvaWQgc2V0Q2xpZW50KFBlbmRpbmdTY3JpcHRDbGllbnQqKTsK
KyAgICB2b2lkIGNsZWFyQ2xpZW50KCk7CisKIHByaXZhdGU6Ci0gICAgYm9vbCBtX3dhdGNoaW5n
Rm9yTG9hZDsKLSAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAgIFBlbmRpbmdTY3Jp
cHQoRWxlbWVudCYsIENhY2hlZFNjcmlwdCYpOworICAgIFBlbmRpbmdTY3JpcHQoRWxlbWVudCYs
IFRleHRQb3NpdGlvbiBzdGFydGluZ1Bvc2l0aW9uKTsKKworICAgIHZvaWQgbm90aWZ5Q2xpZW50
RmluaXNoZWQoKTsKKworICAgIFJlZjxFbGVtZW50PiBtX2VsZW1lbnQ7CiAgICAgVGV4dFBvc2l0
aW9uIG1fc3RhcnRpbmdQb3NpdGlvbjsgLy8gT25seSB1c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRh
Z3MuCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlw
dDsgCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlw
dDsKKyAgICBQZW5kaW5nU2NyaXB0Q2xpZW50KiBtX2NsaWVudCB7IG51bGxwdHIgfTsKIH07CiAK
IH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1Njcmlw
dENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHRDbGllbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lOTY0NDRhOGUzODAwYWJiYjA0ZGQzNDlmYTc2NjE0NTA2ZDE1ZjBjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHRDbGllbnQuaApAQCAt
MCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlLCBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBlbmRpbmdT
Y3JpcHQ7CisKK2NsYXNzIFBlbmRpbmdTY3JpcHRDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1
YWwgflBlbmRpbmdTY3JpcHRDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlG
aW5pc2hlZChQZW5kaW5nU2NyaXB0JikgPSAwOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
UnVubmVyLmNwcAppbmRleCBkMjYwNWJkZGI3YjViNjJiOTE0NTM4ZWY2MjYyYWNiN2IzZDUwMDJl
Li41NzIxNTNkNDJmMDFlYjFhMmM0MjQ1NDI3ZjVlZjc1OTMzNjdhMWJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0UnVubmVyLmNwcApAQCAtNjEsMTEgKzYxLDExIEBAIHZvaWQgU2NyaXB0UnVubmVy
OjpxdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbihTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50LCBD
YWNoZWRSCiAKICAgICBzd2l0Y2ggKGV4ZWN1dGlvblR5cGUpIHsKICAgICBjYXNlIEFTWU5DX0VY
RUNVVElPTjoKLSAgICAgICAgbV9wZW5kaW5nQXN5bmNTY3JpcHRzLmFkZChzY3JpcHRFbGVtZW50
LCBQZW5kaW5nU2NyaXB0KCZlbGVtZW50LCBjYWNoZWRTY3JpcHQuZ2V0KCkpKTsKKyAgICAgICAg
bV9wZW5kaW5nQXN5bmNTY3JpcHRzLmFkZChzY3JpcHRFbGVtZW50LCBQZW5kaW5nU2NyaXB0Ojpj
cmVhdGUoZWxlbWVudCwgKmNhY2hlZFNjcmlwdCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgSU5fT1JERVJfRVhFQ1VUSU9OOgotICAgICAgICBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVy
LmFwcGVuZChQZW5kaW5nU2NyaXB0KCZlbGVtZW50LCBjYWNoZWRTY3JpcHQuZ2V0KCkpKTsKKyAg
ICAgICAgbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlci5hcHBlbmQoUGVuZGluZ1NjcmlwdDo6Y3Jl
YXRlKGVsZW1lbnQsICpjYWNoZWRTY3JpcHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpA
QCAtODYsNyArODYsNyBAQCB2b2lkIFNjcmlwdFJ1bm5lcjo6bm90aWZ5U2NyaXB0UmVhZHkoU2Ny
aXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCwgRXhlY3V0aW9uVHlwZQogICAgIHN3aXRjaCAoZXhl
Y3V0aW9uVHlwZSkgewogICAgIGNhc2UgQVNZTkNfRVhFQ1VUSU9OOgogICAgICAgICBBU1NFUlQo
bV9wZW5kaW5nQXN5bmNTY3JpcHRzLmNvbnRhaW5zKHNjcmlwdEVsZW1lbnQpKTsKLSAgICAgICAg
bV9zY3JpcHRzVG9FeGVjdXRlU29vbi5hcHBlbmQobV9wZW5kaW5nQXN5bmNTY3JpcHRzLnRha2Uo
c2NyaXB0RWxlbWVudCkpOworICAgICAgICBtX3NjcmlwdHNUb0V4ZWN1dGVTb29uLmFwcGVuZCgm
bV9wZW5kaW5nQXN5bmNTY3JpcHRzLnRha2Uoc2NyaXB0RWxlbWVudCktPmdldCgpKTsKICAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIElOX09SREVSX0VYRUNVVElPTjoKQEAgLTEwMCwyMyArMTAw
LDI0IEBAIHZvaWQgU2NyaXB0UnVubmVyOjp0aW1lckZpcmVkKCkKIHsKICAgICBSZWY8RG9jdW1l
bnQ+IHByb3RlY3QobV9kb2N1bWVudCk7CiAKLSAgICBWZWN0b3I8UGVuZGluZ1NjcmlwdD4gc2Ny
aXB0czsKKyAgICBWZWN0b3I8UmVmUHRyPFBlbmRpbmdTY3JpcHQ+PiBzY3JpcHRzOwogICAgIHNj
cmlwdHMuc3dhcChtX3NjcmlwdHNUb0V4ZWN1dGVTb29uKTsKIAogICAgIHNpemVfdCBudW1Jbk9y
ZGVyU2NyaXB0c1RvRXhlY3V0ZSA9IDA7Ci0gICAgZm9yICg7IG51bUluT3JkZXJTY3JpcHRzVG9F
eGVjdXRlIDwgbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlci5zaXplKCkgJiYgbV9zY3JpcHRzVG9F
eGVjdXRlSW5PcmRlcltudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZV0uY2FjaGVkU2NyaXB0KCkt
PmlzTG9hZGVkKCk7ICsrbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGUpCi0gICAgICAgIHNjcmlw
dHMuYXBwZW5kKG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXJbbnVtSW5PcmRlclNjcmlwdHNUb0V4
ZWN1dGVdKTsKKyAgICBmb3IgKDsgbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGUgPCBtX3Njcmlw
dHNUb0V4ZWN1dGVJbk9yZGVyLnNpemUoKSAmJiBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyW251
bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlXS0+aXNMb2FkZWQoKTsgKytudW1Jbk9yZGVyU2NyaXB0
c1RvRXhlY3V0ZSkKKyAgICAgICAgc2NyaXB0cy5hcHBlbmQobV9zY3JpcHRzVG9FeGVjdXRlSW5P
cmRlcltudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZV0ucHRyKCkpOwogICAgIGlmIChudW1Jbk9y
ZGVyU2NyaXB0c1RvRXhlY3V0ZSkKICAgICAgICAgbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlci5y
ZW1vdmUoMCwgbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGUpOwogCi0gICAgZm9yIChhdXRvJiBz
Y3JpcHQgOiBzY3JpcHRzKSB7Ci0gICAgICAgIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0ID0g
c2NyaXB0LmNhY2hlZFNjcmlwdCgpOwotICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9
IHNjcmlwdC5yZWxlYXNlRWxlbWVudEFuZENsZWFyKCk7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50
KTsKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnRTY3JpcHQgOiBzY3JpcHRzKSB7CisgICAgICAgIFJl
ZlB0cjxQZW5kaW5nU2NyaXB0PiBzY3JpcHQgPSBzdGQ6OmV4Y2hhbmdlKGN1cnJlbnRTY3JpcHQs
IG51bGxwdHIpOworICAgICAgICBBU1NFUlQoc2NyaXB0KTsKICAgICAgICAgLy8gUGFwZXIgb3Zl
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MDUwCi0gICAgICAg
IGlmICghZWxlbWVudCkKKyAgICAgICAgaWYgKCFzY3JpcHQpCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShlbGVtZW50LmdldCgpKS0+ZXhl
Y3V0ZShjYWNoZWRTY3JpcHQpOworICAgICAgICBTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50
ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSgmc2NyaXB0LT5lbGVtZW50KCkpOworICAgICAg
ICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CisgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGUo
c2NyaXB0LT5jYWNoZWRTY3JpcHQoKSk7CiAgICAgICAgIG1fZG9jdW1lbnQuZGVjcmVtZW50TG9h
ZEV2ZW50RGVsYXlDb3VudCgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRSdW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuaApp
bmRleCA4Y2QzMzJhNTczNGMxY2I5MmYyYTVmZjVmYzRjY2ExNThmZTNiYzQxLi5iYTQxOWZhOTA3
YWM4ZWQ1YTMzNzM5NDgzOTVlYWVkMTgzZDZiYzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0UnVubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5l
ci5oCkBAIC01Niw5ICs1Niw5IEBAIGNsYXNzIFNjcmlwdFJ1bm5lciB7CiAgICAgdm9pZCB0aW1l
ckZpcmVkKCk7CiAKICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKLSAgICBWZWN0b3I8UGVuZGlu
Z1NjcmlwdD4gbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlcjsKLSAgICBWZWN0b3I8UGVuZGluZ1Nj
cmlwdD4gbV9zY3JpcHRzVG9FeGVjdXRlU29vbjsgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3Nw
ZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jc2V0LW9mLXNjcmlwdHMtdGhhdC13aWxsLWV4ZWN1
dGUtYXMtc29vbi1hcy1wb3NzaWJsZQotICAgIEhhc2hNYXA8U2NyaXB0RWxlbWVudCosIFBlbmRp
bmdTY3JpcHQ+IG1fcGVuZGluZ0FzeW5jU2NyaXB0czsKKyAgICBWZWN0b3I8UmVmPFBlbmRpbmdT
Y3JpcHQ+PiBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyOworICAgIFZlY3RvcjxSZWZQdHI8UGVu
ZGluZ1NjcmlwdD4+IG1fc2NyaXB0c1RvRXhlY3V0ZVNvb247IC8vIGh0dHA6Ly93d3cud2hhdHdn
Lm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3NldC1vZi1zY3JpcHRzLXRoYXQtd2ls
bC1leGVjdXRlLWFzLXNvb24tYXMtcG9zc2libGUKKyAgICBIYXNoTWFwPFNjcmlwdEVsZW1lbnQq
LCBSZWY8UGVuZGluZ1NjcmlwdD4+IG1fcGVuZGluZ0FzeW5jU2NyaXB0czsKICAgICBUaW1lciBt
X3RpbWVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5jcHAKaW5kZXggOWY0N2EyNGRjNTU2MWRjMjY4MWYxNzBlYTU5YmVlZGE5YWI4
NzM0Ny4uOWY4ZGVlZGRmZjVlMjRjNWY5NzE4Njc4MzY1NDgwNTMzMDE4OTY2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50
UGFyc2VyLmgiCiAKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQu
aCIKQEAgLTUwMCwxOCArNTAxLDE4IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQ
YXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24oKQogICAgIGVuZElmRGVsYXllZCgpOwogfQogCi12
b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6d2F0Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKiBjYWNo
ZWRTY3JpcHQpCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6d2F0Y2hGb3JMb2FkKFBlbmRpbmdT
Y3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7Ci0gICAgQVNTRVJUKCFjYWNoZWRTY3JpcHQtPmlzTG9h
ZGVkKCkpOwotICAgIC8vIGFkZENsaWVudCB3b3VsZCBjYWxsIG5vdGlmeUZpbmlzaGVkIGlmIHRo
ZSBsb2FkIHdlcmUgY29tcGxldGUuCisgICAgQVNTRVJUKCFwZW5kaW5nU2NyaXB0LmlzTG9hZGVk
KCkpOworICAgIC8vIHNldENsaWVudCB3b3VsZCBjYWxsIG5vdGlmeUZpbmlzaGVkIGlmIHRoZSBs
b2FkIHdlcmUgY29tcGxldGUuCiAgICAgLy8gQ2FsbGVycyBkbyBub3QgZXhwZWN0IHRvIGJlIHJl
LWVudGVyZWQgZnJvbSB0aGlzIGNhbGwsIHNvIHRoZXkgc2hvdWxkCi0gICAgLy8gbm90IGFuIGFs
cmVhZHktbG9hZGVkIENhY2hlZFJlc291cmNlLgotICAgIGNhY2hlZFNjcmlwdC0+YWRkQ2xpZW50
KHRoaXMpOworICAgIC8vIG5vdCBhbiBhbHJlYWR5LWxvYWRlZCBQZW5kaW5nU2NyaXB0LgorICAg
IHBlbmRpbmdTY3JpcHQuc2V0Q2xpZW50KHRoaXMpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBh
cnNlcjo6c3RvcFdhdGNoaW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkU2NyaXB0KQor
dm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BXYXRjaGluZ0ZvckxvYWQoUGVuZGluZ1Njcmlw
dCYgcGVuZGluZ1NjcmlwdCkKIHsKLSAgICBjYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlz
KTsKKyAgICBwZW5kaW5nU2NyaXB0LmNsZWFyQ2xpZW50KCk7CiB9CiAKIHZvaWQgSFRNTERvY3Vt
ZW50UGFyc2VyOjphcHBlbmRDdXJyZW50SW5wdXRTdHJlYW1Ub1ByZWxvYWRTY2FubmVyQW5kU2Nh
bigpCkBAIC01MjEsNyArNTIyLDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZEN1
cnJlbnRJbnB1dFN0cmVhbVRvUHJlbG9hZFNjYW5uZXJBbmRTY2FuKCkKICAgICBtX3ByZWxvYWRT
Y2FubmVyLT5zY2FuKCptX3ByZWxvYWRlciwgKmRvY3VtZW50KCkpOwogfQogCi12b2lkIEhUTUxE
b2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291
cmNlKQordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKFBlbmRpbmdTY3Jp
cHQmIHBlbmRpbmdTY3JpcHQpCiB7CiAgICAgLy8gcHVtcFRva2VuaXplciBjYW4gY2F1c2UgdGhp
cyBwYXJzZXIgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgRG9jdW1lbnQsCiAgICAgLy8gYnV0IHdl
IG5lZWQgdG8gZW5zdXJlIGl0IGlzbid0IGRlbGV0ZWQgeWV0LgpAQCAtNTM0LDcgKzUzNSw3IEBA
IHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSog
Y2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3NjcmlwdFJ1
bm5lci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChjYWNoZWRSZXNvdXJjZSk7CisgICAg
bV9zY3JpcHRSdW5uZXItPmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQocGVuZGluZ1Njcmlw
dCk7CiAgICAgaWYgKCFpc1dhaXRpbmdGb3JTY3JpcHRzKCkpCiAgICAgICAgIHJlc3VtZVBhcnNp
bmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCA1MTFlMWQzOWNkYzYzMGY1MTI3YjZmMjgz
Y2M2MWE1NDhhNmYwN2IxLi5lMmJmYjMyNjlmNGM3YWIyMWQ3NjQ3YTI1ODZjOGUxOWQ2YzgzYmJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
aApAQCAtMjcsMTEgKzI3LDExIEBACiAjaWZuZGVmIEhUTUxEb2N1bWVudFBhcnNlcl9oCiAjZGVm
aW5lIEhUTUxEb2N1bWVudFBhcnNlcl9oCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dFN0cmVhbS5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRS
dW5uZXJIb3N0LmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZVRyYWNrZXIuaCIKICNpbmNsdWRlICJI
VE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiUGVuZGluZ1NjcmlwdENsaWVudC5oIgogI2luY2x1
ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIlhTU0F1ZGl0b3IuaCIK
ICNpbmNsdWRlICJYU1NBdWRpdG9yRGVsZWdhdGUuaCIKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3Mg
SFRNTFRyZWVCdWlsZGVyOwogY2xhc3MgSFRNTFJlc291cmNlUHJlbG9hZGVyOwogY2xhc3MgUHVt
cFNlc3Npb247CiAKLWNsYXNzIEhUTUxEb2N1bWVudFBhcnNlciA6IHB1YmxpYyBTY3JpcHRhYmxl
RG9jdW1lbnRQYXJzZXIsIHByaXZhdGUgSFRNTFNjcmlwdFJ1bm5lckhvc3QsIHByaXZhdGUgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgSFRNTERvY3VtZW50UGFyc2VyIDogcHVibGljIFNj
cmlwdGFibGVEb2N1bWVudFBhcnNlciwgcHJpdmF0ZSBIVE1MU2NyaXB0UnVubmVySG9zdCwgcHJp
dmF0ZSBQZW5kaW5nU2NyaXB0Q2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEhUTUxEb2N1bWVudFBhcnNlcj4gY3JlYXRlKEhUTUxE
b2N1bWVudCYpOwpAQCAtOTAsMTQgKzkwLDE0IEBAIGNsYXNzIEhUTUxEb2N1bWVudFBhcnNlciA6
IHB1YmxpYyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIsIHByaXZhdGUgSFRNTFNjcmlwdFJ1CiAg
ICAgYm9vbCBzaG91bGRBc3NvY2lhdGVDb25zb2xlTWVzc2FnZXNXaXRoVGV4dFBvc2l0aW9uKCkg
Y29uc3QgZmluYWw7CiAKICAgICAvLyBIVE1MU2NyaXB0UnVubmVySG9zdAotICAgIHZvaWQgd2F0
Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKikgZmluYWw7Ci0gICAgdm9pZCBzdG9wV2F0Y2hpbmdG
b3JMb2FkKENhY2hlZFJlc291cmNlKikgZmluYWw7CisgICAgdm9pZCB3YXRjaEZvckxvYWQoUGVu
ZGluZ1NjcmlwdCYpIGZpbmFsOworICAgIHZvaWQgc3RvcFdhdGNoaW5nRm9yTG9hZChQZW5kaW5n
U2NyaXB0JikgZmluYWw7CiAgICAgSFRNTElucHV0U3RyZWFtJiBpbnB1dFN0cmVhbSgpIGZpbmFs
OwogICAgIGJvb2wgaGFzUHJlbG9hZFNjYW5uZXIoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIGFw
cGVuZEN1cnJlbnRJbnB1dFN0cmVhbVRvUHJlbG9hZFNjYW5uZXJBbmRTY2FuKCkgZmluYWw7CiAK
LSAgICAvLyBDYWNoZWRSZXNvdXJjZUNsaWVudAotICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2Fj
aGVkUmVzb3VyY2UqKSBmaW5hbDsKKyAgICAvLyBQZW5kaW5nU2NyaXB0Q2xpZW50CisgICAgdm9p
ZCBub3RpZnlGaW5pc2hlZChQZW5kaW5nU2NyaXB0JikgZmluYWw7CiAKICAgICBEb2N1bWVudCog
Y29udGV4dEZvclBhcnNpbmdTZXNzaW9uKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKaW5kZXggMWI0YzE1ZDk5OTZhZTgzNDE0NjMwNGZk
ZmRkN2JlZmZkZDMyMDBhOC4uZDZjMTIyMThhYzBhM2I2NWViZmNhOGUyMDE4MDgxOTYwMzAzNmVk
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5j
cHAKQEAgLTU4LDEyICs1OCwxNCBAQCBIVE1MU2NyaXB0UnVubmVyOjpIVE1MU2NyaXB0UnVubmVy
KERvY3VtZW50JiBkb2N1bWVudCwgSFRNTFNjcmlwdFJ1bm5lckhvc3QmIGhvcwogSFRNTFNjcmlw
dFJ1bm5lcjo6fkhUTUxTY3JpcHRSdW5uZXIoKQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
YmUgcGFzc2VkIGEgImRvbmUgbG9hZGluZy9wYXJzaW5nIiBjYWxsYmFjayBzb29uZXIgdGhhbiBk
ZXN0cnVjdGlvbj8KLSAgICBpZiAobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQo
KSAmJiBtX3BhcnNlckJsb2NraW5nU2NyaXB0LndhdGNoaW5nRm9yTG9hZCgpKQotICAgICAgICBz
dG9wV2F0Y2hpbmdGb3JMb2FkKG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpOworICAgIGlmIChtX3Bh
cnNlckJsb2NraW5nU2NyaXB0KSB7CisgICAgICAgIGlmIChtX3BhcnNlckJsb2NraW5nU2NyaXB0
LT5uZWVkc0xvYWRpbmcoKSAmJiBtX3BhcnNlckJsb2NraW5nU2NyaXB0LT53YXRjaGluZ0Zvckxv
YWQoKSkKKyAgICAgICAgICAgIHN0b3BXYXRjaGluZ0ZvckxvYWQoKm1fcGFyc2VyQmxvY2tpbmdT
Y3JpcHQpOworICAgIH0KIAogICAgIHdoaWxlICghbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJz
aW5nLmlzRW1wdHkoKSkgewotICAgICAgICBQZW5kaW5nU2NyaXB0IHBlbmRpbmdTY3JpcHQgPSBt
X3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcudGFrZUZpcnN0KCk7Ci0gICAgICAgIGlmIChw
ZW5kaW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpICYmIHBlbmRpbmdTY3JpcHQud2F0Y2hpbmdGb3JM
b2FkKCkpCisgICAgICAgIFJlZjxQZW5kaW5nU2NyaXB0PiBwZW5kaW5nU2NyaXB0ID0gbV9zY3Jp
cHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLnRha2VGaXJzdCgpOworICAgICAgICBpZiAocGVuZGlu
Z1NjcmlwdC0+bmVlZHNMb2FkaW5nKCkgJiYgcGVuZGluZ1NjcmlwdC0+d2F0Y2hpbmdGb3JMb2Fk
KCkpCiAgICAgICAgICAgICBzdG9wV2F0Y2hpbmdGb3JMb2FkKHBlbmRpbmdTY3JpcHQpOwogICAg
IH0KIH0KQEAgLTk1LDcgKzk3LDcgQEAgU2NyaXB0U291cmNlQ29kZSBIVE1MU2NyaXB0UnVubmVy
Ojpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdChjb25zdCBQZW5kaW5nU2NyaXB0JgogICAgICAgICBy
ZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwogICAgIH0KICAg
ICBlcnJvck9jY3VycmVkID0gZmFsc2U7Ci0gICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2Ny
aXB0LmVsZW1lbnQoKS0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRp
b24obV9kb2N1bWVudCksIHNjcmlwdC5zdGFydGluZ1Bvc2l0aW9uKCkpOworICAgIHJldHVybiBT
Y3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5lbGVtZW50KCkudGV4dENvbnRlbnQoKSwgZG9jdW1lbnRV
UkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdC5zdGFydGluZ1Bvc2l0aW9u
KCkpOwogfQogCiBib29sIEhUTUxTY3JpcHRSdW5uZXI6OmlzUGVuZGluZ1NjcmlwdFJlYWR5KGNv
bnN0IFBlbmRpbmdTY3JpcHQmIHNjcmlwdCkKQEAgLTEwNSw3ICsxMDcsNyBAQCBib29sIEhUTUxT
Y3JpcHRSdW5uZXI6OmlzUGVuZGluZ1NjcmlwdFJlYWR5KGNvbnN0IFBlbmRpbmdTY3JpcHQmIHNj
cmlwdCkKICAgICBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMgPSAhbV9kb2N1bWVu
dC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCk7CiAgICAgaWYgKG1faGFzU2NyaXB0c1dhaXRpbmdG
b3JTdHlsZXNoZWV0cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzY3JpcHQuY2Fj
aGVkU2NyaXB0KCkgJiYgIXNjcmlwdC5jYWNoZWRTY3JpcHQoKS0+aXNMb2FkZWQoKSkKKyAgICBp
ZiAoc2NyaXB0Lm5lZWRzTG9hZGluZygpICYmICFzY3JpcHQuaXNMb2FkZWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTE1LDEwICsxMTcsMTEgQEAg
dm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCkKICAg
ICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKCFpc0V4ZWN1dGluZ1NjcmlwdCgpKTsK
ICAgICBBU1NFUlQobV9kb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpOwotICAgIEFT
U0VSVChpc1BlbmRpbmdTY3JpcHRSZWFkeShtX3BhcnNlckJsb2NraW5nU2NyaXB0KSk7CisgICAg
QVNTRVJUKGlzUGVuZGluZ1NjcmlwdFJlYWR5KCptX3BhcnNlckJsb2NraW5nU2NyaXB0KSk7CiAK
ICAgICBJbnNlcnRpb25Qb2ludFJlY29yZCBpbnNlcnRpb25Qb2ludFJlY29yZChtX2hvc3QuaW5w
dXRTdHJlYW0oKSk7Ci0gICAgZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KG1f
cGFyc2VyQmxvY2tpbmdTY3JpcHQpOworICAgIFJlZlB0cjxQZW5kaW5nU2NyaXB0PiBwcm90ZWN0
b3IgPSBzdGQ6OmV4Y2hhbmdlKG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQsIG51bGxwdHIpOworICAg
IGV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudCgqcHJvdGVjdG9yKTsKIH0KIAog
dm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZl
bnQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKQEAgLTEyNywxNSArMTMwLDEzIEBAIHZv
aWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50
KFBlbmRpbmdTY3JpcHQmIHBlbmRpCiAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlID0g
c291cmNlRnJvbVBlbmRpbmdTY3JpcHQocGVuZGluZ1NjcmlwdCwgZXJyb3JPY2N1cnJlZCk7CiAK
ICAgICAvLyBTdG9wIHdhdGNoaW5nIGxvYWRzIGJlZm9yZSBleGVjdXRlU2NyaXB0IHRvIHByZXZl
bnQgcmVjdXJzaW9uIGlmIHRoZSBzY3JpcHQgcmVsb2FkcyBpdHNlbGYuCi0gICAgaWYgKHBlbmRp
bmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkgJiYgcGVuZGluZ1NjcmlwdC53YXRjaGluZ0ZvckxvYWQo
KSkKKyAgICBpZiAocGVuZGluZ1NjcmlwdC5uZWVkc0xvYWRpbmcoKSAmJiBwZW5kaW5nU2NyaXB0
LndhdGNoaW5nRm9yTG9hZCgpKQogICAgICAgICBzdG9wV2F0Y2hpbmdGb3JMb2FkKHBlbmRpbmdT
Y3JpcHQpOwogCiAgICAgaWYgKCFpc0V4ZWN1dGluZ1NjcmlwdCgpKQogICAgICAgICBNaWNyb3Rh
c2tRdWV1ZTo6bWFpblRocmVhZFF1ZXVlKCkucGVyZm9ybU1pY3JvdGFza0NoZWNrcG9pbnQoKTsK
IAotICAgIC8vIENsZWFyIHRoZSBwZW5kaW5nIHNjcmlwdCBiZWZvcmUgcG9zc2libGUgcmVudHJh
bmN5IGZyb20gZXhlY3V0ZVNjcmlwdCgpCi0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBw
ZW5kaW5nU2NyaXB0LnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIoKTsKLSAgICBpZiAoU2NyaXB0RWxl
bWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoZWxlbWVudC5n
ZXQoKSkpIHsKKyAgICBpZiAoU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0
RWxlbWVudElmUG9zc2libGUoJnBlbmRpbmdTY3JpcHQuZWxlbWVudCgpKSkgewogICAgICAgICBO
ZXN0aW5nTGV2ZWxJbmNyZW1lbnRlciBuZXN0aW5nTGV2ZWxJbmNyZW1lbnRlcihtX3NjcmlwdE5l
c3RpbmdMZXZlbCk7CiAgICAgICAgIElnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVu
dGVyIGlnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyKG1fZG9jdW1lbnQpOwog
ICAgICAgICBpZiAoZXJyb3JPY2N1cnJlZCkKQEAgLTE0Myw3ICsxNDQsNyBAQCB2b2lkIEhUTUxT
Y3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChQZW5kaW5n
U2NyaXB0JiBwZW5kaQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChpc0V4ZWN1
dGluZ1NjcmlwdCgpKTsKICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQo
c291cmNlQ29kZSk7Ci0gICAgICAgICAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KGNyZWF0ZVNj
cmlwdExvYWRFdmVudCgpKTsKKyAgICAgICAgICAgIHBlbmRpbmdTY3JpcHQuZWxlbWVudCgpLmRp
c3BhdGNoRXZlbnQoY3JlYXRlU2NyaXB0TG9hZEV2ZW50KCkpOwogICAgICAgICB9CiAgICAgfQog
ICAgIEFTU0VSVCghaXNFeGVjdXRpbmdTY3JpcHQoKSk7CkBAIC0xNTIsMTUgKzE1MywxMyBAQCB2
b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVu
dChQZW5kaW5nU2NyaXB0JiBwZW5kaQogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjp3YXRjaEZvckxv
YWQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKIHsKICAgICBBU1NFUlQoIXBlbmRpbmdT
Y3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpOwotICAgIG1faG9zdC53YXRjaEZvckxvYWQocGVuZGlu
Z1NjcmlwdC5jYWNoZWRTY3JpcHQoKSk7Ci0gICAgcGVuZGluZ1NjcmlwdC5zZXRXYXRjaGluZ0Zv
ckxvYWQodHJ1ZSk7CisgICAgbV9ob3N0LndhdGNoRm9yTG9hZChwZW5kaW5nU2NyaXB0KTsKIH0K
IAogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKFBlbmRpbmdTY3Jp
cHQmIHBlbmRpbmdTY3JpcHQpCiB7CiAgICAgQVNTRVJUKHBlbmRpbmdTY3JpcHQud2F0Y2hpbmdG
b3JMb2FkKCkpOwotICAgIG1faG9zdC5zdG9wV2F0Y2hpbmdGb3JMb2FkKHBlbmRpbmdTY3JpcHQu
Y2FjaGVkU2NyaXB0KCkpOwotICAgIHBlbmRpbmdTY3JpcHQuc2V0V2F0Y2hpbmdGb3JMb2FkKGZh
bHNlKTsKKyAgICBtX2hvc3Quc3RvcFdhdGNoaW5nRm9yTG9hZChwZW5kaW5nU2NyaXB0KTsKIH0K
IAogLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggMTAuMi41LjExICJBbiBlbmQgdGFnIHdo
b3NlIHRhZyBuYW1lIGlzICdzY3JpcHQnIgpAQCAtMTg3LDIxICsxODYsMjEgQEAgdm9pZCBIVE1M
U2NyaXB0UnVubmVyOjpleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwg
Y29uc3QgVGV4dFBvc2kKIAogYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpoYXNQYXJzZXJCbG9ja2lu
Z1NjcmlwdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICEhbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5l
bGVtZW50KCk7CisgICAgcmV0dXJuICEhbV9wYXJzZXJCbG9ja2luZ1NjcmlwdDsKIH0KIAogdm9p
ZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpCiB7Ci0g
ICAgd2hpbGUgKGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkgJiYgaXNQZW5kaW5nU2NyaXB0UmVh
ZHkobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCkpCisgICAgd2hpbGUgKGhhc1BhcnNlckJsb2NraW5n
U2NyaXB0KCkgJiYgaXNQZW5kaW5nU2NyaXB0UmVhZHkoKm1fcGFyc2VyQmxvY2tpbmdTY3JpcHQp
KQogICAgICAgICBleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0KCk7CiB9CiAKLXZvaWQgSFRN
TFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJj
ZSogY2FjaGVkU2NyaXB0KQordm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0c1dh
aXRpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7CiAgICAgQVNTRVJU
KCFpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAgICBBU1NFUlQoaGFzUGFyc2VyQmxvY2tpbmdTY3Jp
cHQoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYWNoZWRTY3JpcHQsIG1fcGFyc2VyQmxvY2tpbmdT
Y3JpcHQuY2FjaGVkU2NyaXB0KCkgPT0gY2FjaGVkU2NyaXB0KTsKLSAgICBBU1NFUlQobV9wYXJz
ZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKS0+aXNMb2FkZWQoKSk7CisgICAgQVNTRVJU
X1VOVVNFRChwZW5kaW5nU2NyaXB0LCBtX3BhcnNlckJsb2NraW5nU2NyaXB0LmdldCgpID09ICZw
ZW5kaW5nU2NyaXB0KTsKKyAgICBBU1NFUlQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC0+aXNMb2Fk
ZWQoKSk7CiAgICAgZXhlY3V0ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdHMoKTsKIH0KIApAQCAtMjIx
LDEyICsyMjAsMTIgQEAgYm9vbCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0c1dhaXRp
bmdGb3JQYXJzaW5nKCkKICAgICB3aGlsZSAoIW1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2lu
Zy5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJUKCFpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAg
ICAgICAgQVNTRVJUKCFoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpKTsKLSAgICAgICAgQVNTRVJU
KG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5maXJzdCgpLmNhY2hlZFNjcmlwdCgpKTsK
LSAgICAgICAgaWYgKCFtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuZmlyc3QoKS5jYWNo
ZWRTY3JpcHQoKS0+aXNMb2FkZWQoKSkgeworICAgICAgICBBU1NFUlQobV9zY3JpcHRzVG9FeGVj
dXRlQWZ0ZXJQYXJzaW5nLmZpcnN0KCktPm5lZWRzTG9hZGluZygpKTsKKyAgICAgICAgaWYgKCFt
X3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuZmlyc3QoKS0+aXNMb2FkZWQoKSkgewogICAg
ICAgICAgICAgd2F0Y2hGb3JMb2FkKG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5maXJz
dCgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBQZW5k
aW5nU2NyaXB0IGZpcnN0ID0gbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLnRha2VGaXJz
dCgpOworICAgICAgICBSZWY8UGVuZGluZ1NjcmlwdD4gZmlyc3QgPSBtX3NjcmlwdHNUb0V4ZWN1
dGVBZnRlclBhcnNpbmcudGFrZUZpcnN0KCk7CiAgICAgICAgIGV4ZWN1dGVQZW5kaW5nU2NyaXB0
QW5kRGlzcGF0Y2hFdmVudChmaXJzdCk7CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlzIHRoaXMg
bV9kb2N1bWVudCBjaGVjayBmb3I/CiAgICAgICAgIGlmICghbV9kb2N1bWVudCkKQEAgLTIzNyw0
MCArMjM2LDMzIEBAIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5n
Rm9yUGFyc2luZygpCiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBhcnNpbmdCbG9j
a2luZ1NjcmlwdChFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghcmVxdWVzdFBlbmRpbmdT
Y3JpcHQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCwgZWxlbWVudCkpCisgICAgQVNTRVJUKCFtX3Bh
cnNlckJsb2NraW5nU2NyaXB0KTsKKyAgICBpZiAoIShtX3BhcnNlckJsb2NraW5nU2NyaXB0ID0g
cmVxdWVzdFBlbmRpbmdTY3JpcHQoZWxlbWVudCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBB
U1NFUlQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSk7CisgICAgQVNTRVJU
KG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQtPm5lZWRzTG9hZGluZygpKTsKIAogICAgIC8vIFdlIG9u
bHkgY2FyZSBhYm91dCBhIGxvYWQgY2FsbGJhY2sgaWYgY2FjaGVkU2NyaXB0IGlzIG5vdCBhbHJl
YWR5CiAgICAgLy8gaW4gdGhlIGNhY2hlLiBDYWxsZXJzIHdpbGwgYXR0ZW1wdCB0byBydW4gdGhl
IG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQKICAgICAvLyBpZiBwb3NzaWJsZSBiZWZvcmUgcmV0dXJu
aW5nIGNvbnRyb2wgdG8gdGhlIHBhcnNlci4KLSAgICBpZiAoIW1fcGFyc2VyQmxvY2tpbmdTY3Jp
cHQuY2FjaGVkU2NyaXB0KCktPmlzTG9hZGVkKCkpCi0gICAgICAgIHdhdGNoRm9yTG9hZChtX3Bh
cnNlckJsb2NraW5nU2NyaXB0KTsKKyAgICBpZiAoIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQtPmlz
TG9hZGVkKCkpCisgICAgICAgIHdhdGNoRm9yTG9hZCgqbV9wYXJzZXJCbG9ja2luZ1NjcmlwdCk7
CiB9CiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdERlZmVycmVkU2NyaXB0KEVsZW1l
bnQqIGVsZW1lbnQpCiB7Ci0gICAgUGVuZGluZ1NjcmlwdCBwZW5kaW5nU2NyaXB0OwotICAgIGlm
ICghcmVxdWVzdFBlbmRpbmdTY3JpcHQocGVuZGluZ1NjcmlwdCwgZWxlbWVudCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChwZW5kaW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpKTsKLSAg
ICBtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuYXBwZW5kKHBlbmRpbmdTY3JpcHQpOwor
ICAgIFJlZjxQZW5kaW5nU2NyaXB0PiBwZW5kaW5nU2NyaXB0ID0gcmVxdWVzdFBlbmRpbmdTY3Jp
cHQoZWxlbWVudCk7CisgICAgQVNTRVJUKHBlbmRpbmdTY3JpcHQtPm5lZWRzTG9hZGluZygpKTsK
KyAgICBtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuYXBwZW5kKFdURk1vdmUocGVuZGlu
Z1NjcmlwdCkpOwogfQogCi1ib29sIEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2Ny
aXB0KFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQsIEVsZW1lbnQqIHNjcmlwdCkgY29uc3QK
K1JlZjxQZW5kaW5nU2NyaXB0PiBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0UGVuZGluZ1Njcmlw
dChFbGVtZW50KiBzY3JpcHQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFwZW5kaW5nU2NyaXB0LmVs
ZW1lbnQoKSk7Ci0gICAgcGVuZGluZ1NjcmlwdC5zZXRFbGVtZW50KHNjcmlwdCk7Ci0gICAgLy8g
VGhpcyBzaG91bGQgY29ycmVjdGx5IHJldHVybiAwIGZvciBlbXB0eSBvciBpbnZhbGlkIHNyY1Zh
bHVlcy4KLSAgICBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCA9IHRvU2NyaXB0RWxlbWVudElm
UG9zc2libGUoc2NyaXB0KS0+Y2FjaGVkU2NyaXB0KCkuZ2V0KCk7Ci0gICAgaWYgKCFjYWNoZWRT
Y3JpcHQpIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gRGlzcGF0Y2ggZXJyb3IgZXZl
bnQuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcGVuZGluZ1NjcmlwdC5zZXRD
YWNoZWRTY3JpcHQoY2FjaGVkU2NyaXB0KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBTY3JpcHRF
bGVtZW50KiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShzY3JpcHQp
OworICAgIEFTU0VSVChzY3JpcHRFbGVtZW50LT53aWxsQmVQYXJzZXJFeGVjdXRlZCgpKTsKKyAg
ICBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlw
dCgpLmdldCgpOworICAgIEFTU0VSVChjYWNoZWRTY3JpcHQpOworICAgIHJldHVybiBQZW5kaW5n
U2NyaXB0OjpjcmVhdGUoKnNjcmlwdCwgKmNhY2hlZFNjcmlwdCk7CiB9CiAKIC8vIFRoaXMgbWV0
aG9kIGlzIG1lYW50IHRvIG1hdGNoIHRoZSBIVE1MNSBkZWZpbml0aW9uIG9mICJydW5uaW5nIGEg
c2NyaXB0IgpAQCAtMzA5LDggKzMwMSw3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2Ny
aXB0KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFyCiAgICAg
ICAgICAgICByZXF1ZXN0RGVmZXJyZWRTY3JpcHQoc2NyaXB0KTsKICAgICAgICAgZWxzZSBpZiAo
c2NyaXB0RWxlbWVudC0+cmVhZHlUb0JlUGFyc2VyRXhlY3V0ZWQoKSkgewogICAgICAgICAgICAg
aWYgKG1fc2NyaXB0TmVzdGluZ0xldmVsID09IDEpIHsKLSAgICAgICAgICAgICAgICBtX3BhcnNl
ckJsb2NraW5nU2NyaXB0LnNldEVsZW1lbnQoc2NyaXB0KTsKLSAgICAgICAgICAgICAgICBtX3Bh
cnNlckJsb2NraW5nU2NyaXB0LnNldFN0YXJ0aW5nUG9zaXRpb24oc2NyaXB0U3RhcnRQb3NpdGlv
bik7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdCA9IFBlbmRpbmdTY3Jp
cHQ6OmNyZWF0ZSgqc2NyaXB0LCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlw
dC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVu
dCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQt
PmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MU2NyaXB0UnVubmVyLmgKaW5kZXggNDViZjhkMDMyNGY4ZWQyMWM5ZTZlOGRkZTE0YmJj
OWRlMDZjYmM3YS4uZjlmNWI1Yjg2Y2I5NWM2OTc3YWMxMjIzYzYyN2ViNzYyZDlkNzYwNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaApAQCAtNTEs
NyArNTEsNyBAQCBjbGFzcyBIVE1MU2NyaXB0UnVubmVyIHsKICAgICAvLyBQcm9jZXNzZXMgdGhl
IHBhc3NlZCBpbiBzY3JpcHQgYW5kIGFueSBwZW5kaW5nIHNjcmlwdHMgaWYgcG9zc2libGUuCiAg
ICAgdm9pZCBleGVjdXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0VG9Qcm9jZXNzLCBjb25z
dCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCi0gICAgdm9pZCBleGVjdXRl
U2NyaXB0c1dhaXRpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKik7CisgICAgdm9pZCBleGVjdXRl
U2NyaXB0c1dhaXRpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmKTsKICAgICBib29sIGhhc1Njcmlw
dHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1NjcmlwdHNXYWl0
aW5nRm9yU3R5bGVzaGVldHM7IH0KICAgICB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0
eWxlc2hlZXRzKCk7CiAgICAgYm9vbCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JQYXJzaW5nKCk7
CkBAIC02OCw3ICs2OCw3IEBAIGNsYXNzIEhUTUxTY3JpcHRSdW5uZXIgewogCiAgICAgdm9pZCBy
ZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KEVsZW1lbnQqKTsKICAgICB2b2lkIHJlcXVlc3RE
ZWZlcnJlZFNjcmlwdChFbGVtZW50Kik7Ci0gICAgYm9vbCByZXF1ZXN0UGVuZGluZ1NjcmlwdChQ
ZW5kaW5nU2NyaXB0JiwgRWxlbWVudCopIGNvbnN0OworICAgIFJlZjxQZW5kaW5nU2NyaXB0PiBy
ZXF1ZXN0UGVuZGluZ1NjcmlwdChFbGVtZW50KikgY29uc3Q7CiAKICAgICB2b2lkIHJ1blNjcmlw
dChFbGVtZW50KiwgY29uc3QgVGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIApA
QCAtODAsOCArODAsOCBAQCBjbGFzcyBIVE1MU2NyaXB0UnVubmVyIHsKIAogICAgIERvY3VtZW50
KiBtX2RvY3VtZW50OwogICAgIEhUTUxTY3JpcHRSdW5uZXJIb3N0JiBtX2hvc3Q7Ci0gICAgUGVu
ZGluZ1NjcmlwdCBtX3BhcnNlckJsb2NraW5nU2NyaXB0OwotICAgIERlcXVlPFBlbmRpbmdTY3Jp
cHQ+IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZzsgLy8gaHR0cDovL3d3dy53aGF0d2cu
b3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jbGlzdC1vZi1zY3JpcHRzLXRoYXQtd2ls
bC1leGVjdXRlLXdoZW4tdGhlLWRvY3VtZW50LWhhcy1maW5pc2hlZC1wYXJzaW5nCisgICAgUmVm
UHRyPFBlbmRpbmdTY3JpcHQ+IG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQ7CisgICAgRGVxdWU8UmVm
PFBlbmRpbmdTY3JpcHQ+PiBtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmc7IC8vIGh0dHA6
Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI2xpc3Qtb2Ytc2Ny
aXB0cy10aGF0LXdpbGwtZXhlY3V0ZS13aGVuLXRoZS1kb2N1bWVudC1oYXMtZmluaXNoZWQtcGFy
c2luZwogICAgIHVuc2lnbmVkIG1fc2NyaXB0TmVzdGluZ0xldmVsOwogCiAgICAgLy8gV2Ugb25s
eSB3YW50IHN0eWxlc2hlZXQgbG9hZHMgdG8gdHJpZ2dlciBzY3JpcHQgZXhlY3V0aW9uIGlmIHNj
cmlwdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1
bm5lckhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXJI
b3N0LmgKaW5kZXggMWYyMjg5NjU3ZTAwNDc2YWY5NDA5N2YyNTAzZTUyNTJhNGJhMWE4NS4uOGE2
M2JjYjBlOTc4YTg0NDcxYTM1M2FjNzU3MzZmM2M0YWNhYmFhNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lckhvc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVySG9zdC5oCkBAIC0zMCw5ICszMCw5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFz
cyBFbGVtZW50OwogY2xhc3MgSFRNTElucHV0U3RyZWFtOworY2xhc3MgUGVuZGluZ1NjcmlwdDsK
IGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiAKIGNsYXNzIEhUTUxTY3JpcHRSdW5uZXJIb3N0IHsK
QEAgLTQwLDkgKzQwLDkgQEAgY2xhc3MgSFRNTFNjcmlwdFJ1bm5lckhvc3QgewogICAgIHZpcnR1
YWwgfkhUTUxTY3JpcHRSdW5uZXJIb3N0KCkgeyB9CiAKICAgICAvLyBJbXBsZW1lbnRvcnMgc2hv
dWxkIGNhbGwgY2FjaGVkUmVzb3VyY2UtPmFkZENsaWVudCgpIGhlcmUgb3Igc29vbiBhZnRlci4K
LSAgICB2aXJ0dWFsIHZvaWQgd2F0Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYpID0gMDsKICAgICAvLyBJ
bXBsZW1lbnRvcnMgbXVzdCBjYWxsIGNhY2hlZFJlc291cmNlLT5yZW1vdmVDbGllbnQoKSBpbW1l
ZGlhdGVseS4KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFdhdGNoaW5nRm9yTG9hZChDYWNoZWRSZXNv
dXJjZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFdhdGNoaW5nRm9yTG9hZChQZW5kaW5n
U2NyaXB0JikgPSAwOwogCiAgICAgdmlydHVhbCBIVE1MSW5wdXRTdHJlYW0mIGlucHV0U3RyZWFt
KCkgPSAwOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287464</attachid>
            <date>2016-08-30 17:26:16 -0700</date>
            <delta_ts>2016-08-30 18:42:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161350-20160830172405.patch</filename>
            <type>text/plain</type>
            <size>42060</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1MTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNjYTcyZTNhNzFjOGFl
NWRlN2QxZGQ3MjVjZjRiOWE0ODlhNzFjMy4uOTc2Y2MzZjQ2MTAyYTI2NmJhMzkxOTEyNjU1NmRh
NzIyNDI3MWE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAxNi0wOC0zMCAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBNYWtlIFBlbmRp
bmdTY3JpcHQgYXMgcmVmLWNvdW50ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MTM1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgd2hpbGUgUGVuZGluZ1NjcmlwdCBpcyBjb3B5YWJs
ZSwgUGVuZGluZ1NjcmlwdCBpcyBhbHNvIENhY2hlZFJlc291cmNlQ2xpZW50LgorICAgICAgICBT
byB3aGVuIGNvcHlpbmcgdGhpcywgdGhlIGNsaWVudCByZWdpc3RyYXRpb24gaXMgZG9uZSBpbiBQ
ZW5kaW5nU2NyaXB0J3Mgb3BlcmF0b3I9IGV0Yy4KKyAgICAgICAgSG93ZXZlciwgdGhpcyBjb3B5
aW5nIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGVmZmVjdGl2ZWx5IHVzZWQuCisgICAgICAgIEluIHRo
aXMgcGF0Y2gsIHdlIGNoYW5nZSB0aGlzIFBlbmRpbmdTY3JpcHQgdG8gcmVmLWNvdW50ZWQgY2xh
c3MgYW5kIG1ha2UgaXQgbm9uY29weWFibGUuCisgICAgICAgIFRoaXMgY2hhbmdlIG1ha2VzIHRo
aW5ncyBzaW1wbGUgKGRyb3BwaW5nIHRoaXMgY29weWluZyBmdW5jdGlvbmFsaXR5KSwgYW5kIGRy
b3BzIHVubmVjZXNzYXJ5CisgICAgICAgIGFkZENsaWVudCAvIHJlbW92ZUNsaWVudCBjYWxscy4g
QW5kIHdlIGFsc28gc2ltcGxpZnkgUGVuZGluZ1NjcmlwdCBjbGFzcy4gU2luY2Ugd2UgY2FuIG9m
ZmVyCisgICAgICAgIGFsbCB0aGUgbWVtYmVycyBhdCB0aGUgY29uc3RydWN0aW9uIHRpbWUsIHdl
IGRvIG5vdCBuZWVkIGFueSBzZXR0ZXJzIGxpa2Ugc2V0Q2FjaGVkU2NyaXB0LAorICAgICAgICBz
ZXRFbGVtZW50IGV0Yy4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIGFjY2lkZW50YWxseSBnZW5lcmF0
aW5nIHRoZSBoYWxmLWJha2VkIHBlbmRpbmcgc2NyaXB0LgorCisgICAgICAgIEZ1cnRoZXJtb3Jl
LCBieSBjaGFuZ2luZyBQZW5kaW5nU2NyaXB0IG5vbmNvcHlhYmxlICYgcmVmLWNvdW50ZWQsIHdl
IGVhc2lseSBtYWtlIGl0CisgICAgICAgIG9ic2VydmFibGUuIEluIHRoaXMgcGF0Y2gsIHdlIGFk
ZCBQZW5kaW5nU2NyaXB0Q2xpZW50IHRvIHJlY2VpdmUgdGhlIG5vdGlmaWNhdGlvbiBmcm9tCisg
ICAgICAgIFBlbmRpbmdTY3JpcHQuIFByZXZpb3VzbHksIHdlIGRpcmVjdGx5IHVzZWQgQ2FjaGVk
U2NyaXB0IGluIFBlbmRpbmdTY3JpcHQgdG8gcmVjZWl2ZSB0aGUKKyAgICAgICAgbm90aWZpY2F0
aW9uLiBXaGVuIGludHJvZHVjaW5nIFNjcmlwdE1vZHVsZUdyYXBoIGFuZCBtYWtpbmcgdGhpcyBQ
ZW5kaW5nU2NyaXB0IHRoZSBjb250YWluZXIKKyAgICAgICAgb2YgdGhlIGJvdGggQ2FjaGVkU2Ny
aXB0IGFuZCBTY3JpcHRNb2R1bGVHcmFwaCwgaGlkaW5nIHRoZSByYXcgQ2FjaGVkU2NyaXB0IG9w
ZXJhdGlvbnMgaXMKKyAgICAgICAgdXNlZnVsLgorCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5n
ZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogZG9tL1BlbmRpbmdTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1Nj
cmlwdDo6Y3JlYXRlKTogVGhlc2UgZmFjdG9yeSBmdW5jdGlvbnMgdGFrZSBhbGwgdGhlIGluZm9y
bWF0aW9uIG5lZWRlZAorICAgICAgICB0byBjb25zdHJ1Y3QgdGhlIFBlbmRpbmdTY3JpcHQuIFNv
IHRoZSBzZXR0ZXJzIG9mIFBlbmRpbmdTY3JpcHQgYXJlIGRyb3BwZWQuIFRoaXMgaXMgYmV0dGVy
CisgICAgICAgIHNpbmNlIHdlIG5vdyBkbyBub3QgZXhwb3NlIGFueSBoYWxmLWJha2VkIHBlbmRp
bmcgc2NyaXB0IGFjY2lkZW50YWxseS4KKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6
OlBlbmRpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6flBlbmRp
bmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6bm90aWZ5Q2xpZW50
RmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6bm90aWZ5RmluaXNo
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6aXNMb2FkZWQpOiBXaGVuIGlu
dHJvZHVjaW5nIFNjcmlwdE1vZHVsZUdyYXBoLCB0aGlzIHdpbGwgcXVlcnkgdG8KKyAgICAgICAg
ZWl0aGVyIENhY2hlZFNjcmlwdCBvciBTY3JpcHRNb2R1bGVHcmFwaC4gUGVuZGluZ1NjcmlwdCB3
aWxsIGJlY29tZSB0aGUgY29udGFpbmVyIGZvciB0aGUKKyAgICAgICAgYm90aCB0eXBlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnNldENsaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQZW5kaW5nU2NyaXB0OjpjbGVhckNsaWVudCk6IFBlbmRpbmdTY3JpcHQgaXMgbm93IG9i
c2VydmFibGUgYnkgUGVuZGluZ1NjcmlwdENsaWVudC4KKyAgICAgICAgVGhpcyBhdm9pZHMgdG91
Y2hpbmcgQ2FjaGVkU2NyaXB0IGluIFBlbmRpbmdTY3JpcHQgZGlyZWN0bHkuIFRoYXQgaXMgZ29v
ZCB3aGVuIHdlIGludHJvZHVjZQorICAgICAgICBTY3JpcHRNb2R1bGVHcmFwaCBhbmQgbWFrZSBQ
ZW5kaW5nU2NyaXB0IHRoZSBjb250YWluZXIgb2YgdGhlIGJvdGggQ2FjaGVkU2NyaXB0IGFuZCBT
Y3JpcHRNb2R1bGVHcmFwaC4KKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnJlbGVh
c2VFbGVtZW50QW5kQ2xlYXIpOiBEZWxldGVkLiBQcmV2aW91c2x5LCBQZW5kaW5nU2NyaXB0IGlz
IG5vdCByZWYtY291bnRlZC4KKyAgICAgICAgU28gd2hlbiB3ZSB3b3VsZCBsaWtlIHRvIHNheSAi
dGhpcyBwZW5kaW5nIHNjcmlwdCBpcyBlbXB0eSIsIHdlIHVzZWQgdGhlIHBlbmRpbmcgc2NyaXB0
IHdpdGgKKyAgICAgICAgYG1fZWxlbWVudCA9IG51bGxwdHJgLiBUaGlzIHJlbGVhc2VFbGVtZW50
QW5kQ2xlYXIgY2xlYXJlZCB0aGlzIG1fZWxlbWVudCBhbmQgbWFkZSB0aGUgcGVuZGluZworICAg
ICAgICBzY3JpcHQgZW1wdHkuIE5vdywgd2UgdXNlIFJlZlB0cjxQZW5kaW5nU2NyaXB0PiBhbmQg
ZW1wdHkgb25lIGlzIGp1c3QgcmVwcmVzZW50ZWQgYnkgdGhlIG51bGxwdHIuCisgICAgICAgIFRo
aXMgZnVuY3Rpb24gaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4gRHJvcHBlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnNldENhY2hlZFNjcmlwdCk6IERlbGV0ZWQuIFRoZSBmaWVs
ZHMgYXJlIHNldCBpbiB0aGUgY29uc3RydWN0b3IuCisgICAgICAgIFNvIHRoaXMgc2V0dGVyIGlz
IG5vIGxvbmdlciBuZWNlc3NhcnkuIERyb3BwZWQuCisgICAgICAgICogZG9tL1BlbmRpbmdTY3Jp
cHQuaDoKKyAgICAgICAgKiBkb20vUGVuZGluZ1NjcmlwdENsaWVudC5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVySG9zdC5oLgorICAgICAg
ICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdENsaWVudDo6flBlbmRpbmdTY3JpcHRDbGllbnQpOgor
ICAgICAgICAqIGRvbS9TY3JpcHRSdW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
UnVubmVyOjpxdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRSdW5uZXI6Om5vdGlmeVNjcmlwdFJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFJ1
bm5lcjo6dGltZXJGaXJlZCk6IFdlIHVzZSBgc3RkOjpleGNoYW5nZWAgdG8gcmV0cmlldmUgdGhl
IFJlZlB0cjxQZW5kaW5nU2NyaXB0PgorICAgICAgICBhbmQgbWFrZSB0aGUgb3JpZ2luYWwgdmVj
dG9yIGVsZW1lbnQgbnVsbHB0ci4gV2l0aG91dCB0aGlzLCBhbGwgdGhlIFBlbmRpbmdTY3JpcHQg
aXMgaGVsZCB1bnRpbAorICAgICAgICB0aGUgaXRlcmF0aW9uIGZpbmlzaGVzLiBXZSBrZWVwIHRo
ZSBvcmlnaW5hbCBzZW1hbnRpY3MgaGVyZSB0aGF0IHRoZSBwZW5kaW5nIHNjcmlwdCBjYW4gYmUK
KyAgICAgICAgcmVsZWFzZWQgcGVyIGl0ZXJhdGlvbi4KKyAgICAgICAgKiBkb20vU2NyaXB0UnVu
bmVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6d2F0Y2hGb3JMb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6c3RvcFdhdGNoaW5nRm9yTG9hZCk6IFVz
ZSBQZW5kaW5nU2NyaXB0IGluc3RlYWQgb2YgdG91Y2hpbmcKKyAgICAgICAgQ2FjaGVkU2NyaXB0
IGRpcmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlG
aW5pc2hlZCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2NyaXB0UnVubmVyOjp+SFRNTFNjcmlwdFJ1bm5lcik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjppc1BlbmRpbmdTY3JpcHRSZWFkeSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2Ny
aXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5n
U2NyaXB0QW5kRGlzcGF0Y2hFdmVudCk6IEFzIHRoZSBwcmV2aW91cyBjb21tZW50IGRlc2NyaWJl
cywKKyAgICAgICAgd2UgdXNlZCByZWxlYXNlRWxlbWVudEFuZENsZWFyIHRvIG1ha2UgdGhlIGN1
cnJlbnQgcGVuZGluZyBzY3JpcHQgZW1wdHkuIEluc3RlYWQgb2YgZG9pbmcgc28sIHdlIG5vdwor
ICAgICAgICBleHBsaWNpdGx5IGNsZWFyIGV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHQgKGJ5
IGFzc2lnbmluZyBudWxscHRyIHRvIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6d2F0Y2hGb3JMb2FkKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTY3JpcHRSdW5uZXI6OnN0b3BXYXRjaGluZ0ZvckxvYWQpOiBQcmV2aW91c2x5LCB3
ZSB1c2VkIENhY2hlZFNjcmlwdDo6YWRkQ2xpZW50IGRpcmVjdGx5CisgICAgICAgIGluIHRoZSBt
X2hvc3Qud2F0Y2hGb3JMb2FkLiBUaGlzIG1lYW5zIHRoYXQgd2UgZGlkIG5vdCBoYXZlIGEgcXVp
Y2sgd2F5IHRvIHF1ZXJ5IHdoZXRoZXIgdGhlIHBlbmRpbmcKKyAgICAgICAgc2NyaXB0IGlzIHdh
dGNoZWQuIEluIHRoZSBvbGQgaW1wbGVtZW50YXRpb24sIHdlIGhhdmUgdGhlIGBtX3dhdGNoaW5n
Rm9yTG9hZCA6IGJvb2xgIGZsYWcgaW4gUGVuZGluZ1NjcmlwdAorICAgICAgICB0byBob2xkIHRo
ZSB3YXRjaGluZyBzdGF0dXMgZm9yIHRoZSBnaXZlbiBwZW5kaW5nIHNjcmlwdC4gVGhpcyBgcGVu
ZGluZ1NjcmlwdC5zZXRXYXRjaGluZ0ZvckxvYWQodHJ1ZSlgCisgICAgICAgIGp1c3QgbWFkZSB0
aGlzIGZsYWcgYHRydWVgLiBCdXQgbm93LCB3ZSBkbyBub3QgdXNlIENhY2hlZFNjcmlwdDo6YWRk
Q2xpZW50IGRpcmVjdGx5LiBJbnN0ZWFkLCB3ZSBoYXZlCisgICAgICAgIHRoZSBQZW5kaW5nU2Ny
aXB0Q2xpZW50IGFuZCBQZW5kaW5nU2NyaXB0Ojp7c2V0Q2xpZW50LGNsZWFyQ2xpZW50fS4gV2Ug
Y2FuIGtub3cgd2hldGhlciB0aGlzIHBlbmRpbmcKKyAgICAgICAgc2NyaXB0IGlzIHdhdGNoZWQg
YnkgY2hlY2tpbmcgYG1fY2xpZW50ICE9IG51bGxwdHJgLiBUaGlzIG1ha2VzIGBtX3dhdGNoaW5n
Rm9yTG9hZGAgdW5uZWNlc3NhcnkuCisgICAgICAgIFNvIHRoaXMgcGF0Y2ggZHJvcHMgYG1fd2F0
Y2hpbmdGb3JMb2FkYCBhbmQgYHBlbmRpbmdTY3JpcHQuc2V0V2F0Y2hpbmdGb3JMb2FkKHRydWUp
YCBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6aGFzUGFyc2VyQmxv
Y2tpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0
ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdHMpOiBXZSBjbGVhciB0aGUgbV9wYXJzZXJCbG9ja2luZ1Nj
cmlwdCBoZXJlCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG1pZGRsZSBvZiB0aGUgZXhlY3V0ZVBl
bmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlw
dFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JQYXJzaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQpOiBTZXR0aW5n
IG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0IGlzIG5vdyBkb25lCisgICAgICAgIGluIHRoaXMgY2Fs
bGVyIHNpZGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0RGVm
ZXJyZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2Ny
aXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5n
U2NyaXB0KTogSW5zdGVhZCBvZiBjb25maWd1cmluZyB0aGUgcGFzc2VkIFBlbmRpbmdTY3JpcHQm
LAorICAgICAgICB3ZSByZXR1cm4gdGhlIHBlbmRpbmcgc2NyaXB0IGFuZCB0aGUgY2FsbGVyIHNl
dHMgaXQgdG8gbV9wYXJzZXJCbG9ja2luZ1NjcmlwdCBvciBob2xkcyBpdC4gQW5kIHdlIG5vdwor
ICAgICAgICBjaGFuZ2UgdGhpcyBmdW5jdGlvbiB0byBzdGF0aWMgbG9jYXRpb24gb25lIGFuZCBk
cm9wIHRoZSBtZW1iZXIgZnVuY3Rpb24uIFByZXZpb3VzbHksIHdlIGFsd2F5cyBtYWtlCisgICAg
ICAgIFBlbmRpbmdTY3JpcHQmIHZhbGlkIGJ5IGFsd2F5cyBjYWxsaW5nIGBzZXRFbGVtZW50KC4u
LilgLiBJIHRoaW5rIHRoaXMgaXMgdGhlIGJ1ZyBzaW5jZSB3ZSBhY2NpZGVudGFsbHkKKyAgICAg
ICAgZXhwb3NlZCB0aGUgaGFsZi1iYWtlZCBwZW5kaW5nIHNjcmlwdC4gQnV0IHRoaXMgYnVnIGlz
IG5vdCBzaG93biBzaW5jZSBgIWNhY2hlZFNjcmlwdGAgcGF0aCBpcyBkZWFkIGNvZGUhCisgICAg
ICAgIFRoaXMgcmVxdWVzdFBlbmRpbmdTY3JpcHQgaXMgY2FsbGVkIGZyb20gdHdvIHBsYWNlcywg
cmVxdWVzdERlZmVycmVkU2NyaXB0IGFuZCByZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0Lgor
ICAgICAgICBBbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaWYgdGhlIHNjcmlwdCBoYXMg
YHdpbGxCZVBhcnNlckV4ZWN1dGVkYCBmbGFnLiBJbiB0aGUgY2FzZSBvZiB0aGUgc2NyaXB0Cisg
ICAgICAgIHRhZyBoYXZpbmcgInNyYyIgYXR0cmlidXRlLCB0aGlzIGZsYWcgaXMgb25seSBzZXQg
aWYgYGNhY2hlZFNjcmlwdGAgaXMgY29ycmVjdGx5IGluc3RhbnRpYXRlZC4gU28gd2hlbgorICAg
ICAgICB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgd2UgY2FuIGVuc3VyZSB0aGF0IGBjYWNo
ZWRTY3JpcHRgIGlzIGNvcnJlY3RseSBpbnN0YW50aWF0ZWQgZm9yIHRoZSBnaXZlbiBzY3JpcHQu
CisgICAgICAgIEluIHRoZSBjYXNlIG9mIHRoZSBzY3JpcHQgdGFnIG5vdCBoYXZpbmcgInNyYyIg
YXR0cmlidXRlLCB0aGVzZSBmdW5jdGlvbnMgYXJlIHdvbid0IGJlIGNhbGxlZC4gVGhpcyBpcwor
ICAgICAgICBiZWNhdXNlIGlmIHN1Y2ggYSBzY3JpcHQgdGFnIGhhcyBgd2lsbEJlUGFyc2VyRXhl
Y3V0ZWRgIGZsYWcsIGl0IGFsc28gaGFzIGBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1dGVkYAorICAg
ICAgICBhbmQgaXQgZG9lcyBub3QgaGF2ZSBgbV93aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlz
aGVkUGFyc2luZ2AgZmxhZywgYW5kIGluIHRoYXQgY2FzZSB0aGUgYm90aAorICAgICAgICBmdW5j
dGlvbnMgYXJlIG5ldmVyIGNhbGxlZC4gU28gd2UgZHJvcCB0aGF0IHBhdGggYW5kIGluc2VydCB0
aGUgYXNzZXJ0aW9uIHRvIGVuc3VyZSB0aGUgYWJvdmUgY29uZGl0aW9ucy4KKyAgICAgICAgKiBo
dG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRN
TFNjcmlwdFJ1bm5lckhvc3QuaDoKKwogMjAxNi0wOC0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFdlIHNob3VsZCB0aHJvdyBhIFNlY3VyaXR5RXJyb3Igd2hl
biBkZW55aW5nIHNldHRpbmcgYSBjcm9zcy1vcmlnaW4gV2luZG93IHByb3BlcnR5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzUx
NTRkY2FjZjU1MzhkMzNkYzZjYmI4ZjdmYmQyMTkwZTZhMGJkMC4uZTg4MGIxN2U4NTkyMTE2M2M3
YWY4NGU0MDA1ODZmMDgyOGFlYjRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjA4Niw2ICs2MDg2LDcgQEAKIAkJRTFGRjhG
NkQxODBEQjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUZGOEY2QjE4MERCNUJFMDAx
MzI2NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCAqLzsgfTsKIAkJRTM4ODM4OTgxQkFE
MTQ1RjAwRDYyRUUzIC8qIEpTTW9kdWxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzODgzODk0MUJBRDE0NUYwMEQ2MkVFMyAvKiBKU01v
ZHVsZUxvYWRlci5jcHAgKi87IH07CiAJCUUzODgzODk5MUJBRDE0NUYwMEQ2MkVFMyAvKiBKU01v
ZHVsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTM4ODM4OTUxQkFEMTQ1RjAwRDYyRUUzIC8qIEpTTW9kdWxlTG9hZGVyLmggKi87IH07CisJ
CUUzRkEzODY0MUQ3MTgxMkQwMEFBNTk1MCAvKiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0ZBMzg2MTFENzE2RTc2
MDBBQTU5NTAgLyogUGVuZGluZ1NjcmlwdENsaWVudC5oICovOyB9OwogCQlFNDAxQzI3NTE3Q0U1
M0VDMDBDNDFBMzUgLyogRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQwMUMyNzQxN0NFNTNFQzAwQzQxQTM1
IC8qIEVsZW1lbnRJdGVyYXRvckFzc2VydGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDAxRTBBNDFDM0MwQjgzMDBGMzREMTAgLyogU3R5
bGVDaGFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0MDFFMEEzMUMzQzBCODMwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0MDFFMEE2MUMzQzBDRjcwMEYz
NEQxMCAvKiBTdHlsZUNoYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDAxRTBBNTFDM0MwQ0Y3MDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuY3Bw
ICovOyB9OwpAQCAtMTM2NDcsNiArMTM2NDgsNyBAQAogCQlFMUZGOEY2QjE4MERCNUJFMDAxMzI2
NzQgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTM4ODM4OTQxQkFEMTQ1RjAwRDYyRUUzIC8qIEpTTW9kdWxlTG9hZGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTW9kdWxlTG9hZGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4ODM4OTUxQkFEMTQ1RjAwRDYyRUUzIC8q
IEpTTW9kdWxlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9k
dWxlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzRkEzODYxMUQ3MTZF
NzYwMEFBNTk1MCAvKiBQZW5kaW5nU2NyaXB0Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBlbmRpbmdTY3JpcHRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTQwMUMyNzQxN0NFNTNFQzAwQzQxQTM1IC8qIEVsZW1lbnRJdGVyYXRvckFzc2Vy
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudEl0ZXJhdG9y
QXNzZXJ0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDAxRTBBMzFDM0Mw
QjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3R5bGVDaGFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQwMUUw
QTUxQzNDMENGNzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlQ2hhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIzMDU2LDYgKzIzMDU4LDcgQEAKIAkJCQk4M0QyNkQzRDFBRkRDQzUwMDAxQjM4
NzMgLyogUGFyZW50Tm9kZS5pZGwgKi8sCiAJCQkJOEE3Q0M5NkYxMjA3NkY4QTAwMUQ0NTg4IC8q
IFBlbmRpbmdTY3JpcHQuY3BwICovLAogCQkJCThBN0NDOTZBMTIwNzZENzMwMDFENDU4OCAvKiBQ
ZW5kaW5nU2NyaXB0LmggKi8sCisJCQkJRTNGQTM4NjExRDcxNkU3NjAwQUE1OTUwIC8qIFBlbmRp
bmdTY3JpcHRDbGllbnQuaCAqLywKIAkJCQk0MUJGNzAwRDBGRTg2RjYxMDA1RThERUMgLyogUGxh
dGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwICovLAogCQkJCTQxQkY3MDBFMEZFODZGNjEwMDVF
OERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oICovLAogCQkJCTUxODlGMEREMTBC
NDZCMEUwMEYzQzczOSAvKiBQb3BTdGF0ZUV2ZW50LmNwcCAqLywKQEAgLTI3MDMxLDYgKzI3MDM0
LDcgQEAKIAkJCQk1OUMyODA0NjEzOERDMjQxMDA3OUI3RTIgLyogWE1MRXJyb3JzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTgzRDM1QUVDMUM3MTg3RkEwMEY3MEQ1QSAvKiBYTUxIdHRw
UmVxdWVzdEV2ZW50VGFyZ2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlFM0ZBMzg2NDFENzE4MTJE
MDBBQTU5NTAgLyogUGVuZGluZ1NjcmlwdENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjlG
MEVEN0EwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTEzNkEwMEQxMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RGRDQ4RTBF
MzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCmluZGV4IDc4ZmYzZDg2ZjE1NDllMmUxNzg1
ZjEyZWNjMzkyNjkwMzExMjU4ODYuLjcxYmRiMmQ4M2VmM2M2OGUxYjViZjc5MzFjY2Y3Njg3YmI5
OGE1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKQEAgLTI4LDMyICsyOCwz
OCBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgor
I2luY2x1ZGUgIlBlbmRpbmdTY3JpcHRDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QZW5kaW5nU2NyaXB0Ojp+UGVuZGluZ1NjcmlwdCgpCitSZWY8UGVuZGluZ1NjcmlwdD4gUGVu
ZGluZ1NjcmlwdDo6Y3JlYXRlKEVsZW1lbnQmIGVsZW1lbnQsIENhY2hlZFNjcmlwdCYgY2FjaGVk
U2NyaXB0KQogewotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKLSAgICAgICAgbV9jYWNoZWRTY3Jp
cHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICBSZWY8UGVuZGluZ1NjcmlwdD4gcGVuZGluZ1Nj
cmlwdCA9IGFkb3B0UmVmKCpuZXcgUGVuZGluZ1NjcmlwdChlbGVtZW50LCBjYWNoZWRTY3JpcHQp
KTsKKyAgICBjYWNoZWRTY3JpcHQuYWRkQ2xpZW50KCZwZW5kaW5nU2NyaXB0LmdldCgpKTsKKyAg
ICByZXR1cm4gcGVuZGluZ1NjcmlwdDsKK30KKworUmVmPFBlbmRpbmdTY3JpcHQ+IFBlbmRpbmdT
Y3JpcHQ6OmNyZWF0ZShFbGVtZW50JiBlbGVtZW50LCBUZXh0UG9zaXRpb24gc2NyaXB0U3RhcnRQ
b3NpdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQZW5kaW5nU2NyaXB0KGVsZW1l
bnQsIHNjcmlwdFN0YXJ0UG9zaXRpb24pKTsKIH0KIAotUmVmUHRyPEVsZW1lbnQ+IFBlbmRpbmdT
Y3JpcHQ6OnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIoKQorUGVuZGluZ1NjcmlwdDo6UGVuZGluZ1Nj
cmlwdChFbGVtZW50JiBlbGVtZW50LCBUZXh0UG9zaXRpb24gc3RhcnRpbmdQb3NpdGlvbikKKyAg
ICA6IG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9zdGFydGluZ1Bvc2l0aW9uKHN0YXJ0aW5n
UG9zaXRpb24pCiB7Ci0gICAgc2V0Q2FjaGVkU2NyaXB0KG51bGxwdHIpOwotICAgIG1fd2F0Y2hp
bmdGb3JMb2FkID0gZmFsc2U7Ci0gICAgbV9zdGFydGluZ1Bvc2l0aW9uID0gVGV4dFBvc2l0aW9u
OjpiZWxvd1JhbmdlUG9zaXRpb24oKTsKLSAgICByZXR1cm4gV1RGTW92ZShtX2VsZW1lbnQpOwog
fQogCi12b2lkIFBlbmRpbmdTY3JpcHQ6OnNldENhY2hlZFNjcmlwdChDYWNoZWRTY3JpcHQqIGNh
Y2hlZFNjcmlwdCkKK1BlbmRpbmdTY3JpcHQ6OlBlbmRpbmdTY3JpcHQoRWxlbWVudCYgZWxlbWVu
dCwgQ2FjaGVkU2NyaXB0JiBjYWNoZWRTY3JpcHQpCisgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkK
KyAgICAsIG1fY2FjaGVkU2NyaXB0KCZjYWNoZWRTY3JpcHQpCit7Cit9CisKK1BlbmRpbmdTY3Jp
cHQ6On5QZW5kaW5nU2NyaXB0KCkKIHsKLSAgICBpZiAobV9jYWNoZWRTY3JpcHQgPT0gY2FjaGVk
U2NyaXB0KQotICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fY2FjaGVkU2NyaXB0KQogICAgICAg
ICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIG1fY2FjaGVkU2NyaXB0
ID0gY2FjaGVkU2NyaXB0OwotICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKLSAgICAgICAgbV9jYWNo
ZWRTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKIH0KIAogQ2FjaGVkU2NyaXB0KiBQZW5kaW5nU2Ny
aXB0OjpjYWNoZWRTY3JpcHQoKSBjb25zdApAQCAtNjEsOCArNjcsMzUgQEAgQ2FjaGVkU2NyaXB0
KiBQZW5kaW5nU2NyaXB0OjpjYWNoZWRTY3JpcHQoKSBjb25zdAogICAgIHJldHVybiBtX2NhY2hl
ZFNjcmlwdC5nZXQoKTsKIH0KIAordm9pZCBQZW5kaW5nU2NyaXB0Ojpub3RpZnlDbGllbnRGaW5p
c2hlZCgpCit7CisgICAgUmVmPFBlbmRpbmdTY3JpcHQ+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm5vdGlmeUZpbmlzaGVkKCp0aGlz
KTsKK30KKwogdm9pZCBQZW5kaW5nU2NyaXB0Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJj
ZSopCiB7CisgICAgbm90aWZ5Q2xpZW50RmluaXNoZWQoKTsKK30KKworYm9vbCBQZW5kaW5nU2Ny
aXB0Ojppc0xvYWRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkU2NyaXB0ICYmIG1f
Y2FjaGVkU2NyaXB0LT5pc0xvYWRlZCgpOworfQorCit2b2lkIFBlbmRpbmdTY3JpcHQ6OnNldENs
aWVudChQZW5kaW5nU2NyaXB0Q2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2NsaWVu
dCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgaWYgKGlzTG9hZGVkKCkpCisgICAgICAg
IG5vdGlmeUNsaWVudEZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgUGVuZGluZ1NjcmlwdDo6Y2xlYXJD
bGllbnQoKQoreworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBudWxscHRy
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaAppbmRleCA2ZjRhZmUzNWUyNzAw
MjU0NjM2MTk1NzBiYzFlYTdjMWNiNDdmNDJhLi4wN2IyZjM1ZTY1M2EzZDNkODhiYWVkNGFlMDU2
NjJhZjhkNDQ3ODIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1Njcmlw
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKQEAgLTIzLDg1ICsy
Myw2MCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQZW5kaW5nU2NyaXB0X2gK
LSNkZWZpbmUgUGVuZGluZ1NjcmlwdF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgRWxlbWVudDsK
K2NsYXNzIFBlbmRpbmdTY3JpcHRDbGllbnQ7CiAKIC8vIEEgY29udGFpbmVyIGZvciBhbiBleHRl
cm5hbCBzY3JpcHQgd2hpY2ggbWF5IGJlIGxvYWRlZCBhbmQgZXhlY3V0ZWQuCiAvLwogLy8gQSBD
YWNoZWRSZXNvdXJjZUhhbmRsZSBhbG9uZSBkb2VzIG5vdCBwcmV2ZW50IHRoZSB1bmRlcmx5aW5n
IENhY2hlZFJlc291cmNlCiAvLyBmcm9tIHB1cmdpbmcgaXRzIGRhdGEgYnVmZmVyLiBUaGlzIGNs
YXNzIGhvbGRzIGEgZHVtbXkgY2xpZW50IG9wZW4gZm9yIGl0cwogLy8gbGlmZXRpbWUgaW4gb3Jk
ZXIgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIGRhdGEgYnVmZmVyIHdpbGwgbm90IGJlIHB1cmdlZC4K
LWNsYXNzIFBlbmRpbmdTY3JpcHQgZmluYWwgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQg
eworY2xhc3MgUGVuZGluZ1NjcmlwdCBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdT
Y3JpcHQ+LCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVibGljOgotICAgIFBlbmRp
bmdTY3JpcHQoKQotICAgICAgICA6IG1fd2F0Y2hpbmdGb3JMb2FkKGZhbHNlKQotICAgICAgICAs
IG1fc3RhcnRpbmdQb3NpdGlvbihUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBQZW5kaW5nU2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQsIENhY2hl
ZFNjcmlwdCogY2FjaGVkU2NyaXB0KQotICAgICAgICA6IG1fd2F0Y2hpbmdGb3JMb2FkKGZhbHNl
KQotICAgICAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgIHsKLSAgICAgICAgc2V0Q2FjaGVk
U2NyaXB0KGNhY2hlZFNjcmlwdCk7Ci0gICAgfQotCi0gICAgUGVuZGluZ1NjcmlwdChjb25zdCBQ
ZW5kaW5nU2NyaXB0JiBvdGhlcikKLSAgICAgICAgOiBDYWNoZWRSZXNvdXJjZUNsaWVudChvdGhl
cikKLSAgICAgICAgLCBtX3dhdGNoaW5nRm9yTG9hZChvdGhlci5tX3dhdGNoaW5nRm9yTG9hZCkK
LSAgICAgICAgLCBtX2VsZW1lbnQob3RoZXIubV9lbGVtZW50KQotICAgICAgICAsIG1fc3RhcnRp
bmdQb3NpdGlvbihvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb24pCi0gICAgewotICAgICAgICBzZXRD
YWNoZWRTY3JpcHQob3RoZXIuY2FjaGVkU2NyaXB0KCkpOwotICAgIH0KKyAgICBzdGF0aWMgUmVm
PFBlbmRpbmdTY3JpcHQ+IGNyZWF0ZShFbGVtZW50JiwgQ2FjaGVkU2NyaXB0Jik7CisgICAgc3Rh
dGljIFJlZjxQZW5kaW5nU2NyaXB0PiBjcmVhdGUoRWxlbWVudCYsIFRleHRQb3NpdGlvbiBzY3Jp
cHRTdGFydFBvc2l0aW9uKTsKIAogICAgIHZpcnR1YWwgflBlbmRpbmdTY3JpcHQoKTsKIAotICAg
IFBlbmRpbmdTY3JpcHQmIG9wZXJhdG9yPShjb25zdCBQZW5kaW5nU2NyaXB0JiBvdGhlcikKLSAg
ICB7Ci0gICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgICAgIHJldHVybiAqdGhp
czsKLQotICAgICAgICBtX3dhdGNoaW5nRm9yTG9hZCA9IG90aGVyLm1fd2F0Y2hpbmdGb3JMb2Fk
OwotICAgICAgICBtX2VsZW1lbnQgPSBvdGhlci5tX2VsZW1lbnQ7Ci0gICAgICAgIG1fc3RhcnRp
bmdQb3NpdGlvbiA9IG90aGVyLm1fc3RhcnRpbmdQb3NpdGlvbjsKLSAgICAgICAgc2V0Q2FjaGVk
U2NyaXB0KG90aGVyLmNhY2hlZFNjcmlwdCgpKTsKLQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0g
ICAgfQotCiAgICAgVGV4dFBvc2l0aW9uIHN0YXJ0aW5nUG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0aW5nUG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXJ0aW5nUG9zaXRpb24oY29u
c3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlvbikgeyBtX3N0YXJ0aW5nUG9zaXRpb24gPSBwb3NpdGlv
bjsgfQogCi0gICAgYm9vbCB3YXRjaGluZ0ZvckxvYWQoKSBjb25zdCB7IHJldHVybiBtX3dhdGNo
aW5nRm9yTG9hZDsgfQotICAgIHZvaWQgc2V0V2F0Y2hpbmdGb3JMb2FkKGJvb2wgYikgeyBtX3dh
dGNoaW5nRm9yTG9hZCA9IGI7IH0KKyAgICBib29sIHdhdGNoaW5nRm9yTG9hZCgpIGNvbnN0IHsg
cmV0dXJuIG5lZWRzTG9hZGluZygpICYmIG1fY2xpZW50OyB9CiAKLSAgICBFbGVtZW50KiBlbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRFbGVt
ZW50KEVsZW1lbnQqIGVsZW1lbnQpIHsgbV9lbGVtZW50ID0gZWxlbWVudDsgfQotICAgIFJlZlB0
cjxFbGVtZW50PiByZWxlYXNlRWxlbWVudEFuZENsZWFyKCk7CisgICAgRWxlbWVudCYgZWxlbWVu
dCgpIHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQorICAgIGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KIAogICAgIENhY2hlZFNjcmlw
dCogY2FjaGVkU2NyaXB0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDYWNoZWRTY3JpcHQoQ2FjaGVk
U2NyaXB0Kik7CisgICAgYm9vbCBuZWVkc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBjYWNoZWRT
Y3JpcHQoKTsgfQorCisgICAgYm9vbCBpc0xvYWRlZCgpIGNvbnN0OwogCiAgICAgdm9pZCBub3Rp
ZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopIG92ZXJyaWRlOwogCisgICAgdm9pZCBzZXRDbGll
bnQoUGVuZGluZ1NjcmlwdENsaWVudCopOworICAgIHZvaWQgY2xlYXJDbGllbnQoKTsKKwogcHJp
dmF0ZToKLSAgICBib29sIG1fd2F0Y2hpbmdGb3JMb2FkOwotICAgIFJlZlB0cjxFbGVtZW50PiBt
X2VsZW1lbnQ7CisgICAgUGVuZGluZ1NjcmlwdChFbGVtZW50JiwgQ2FjaGVkU2NyaXB0Jik7Cisg
ICAgUGVuZGluZ1NjcmlwdChFbGVtZW50JiwgVGV4dFBvc2l0aW9uIHN0YXJ0aW5nUG9zaXRpb24p
OworCisgICAgdm9pZCBub3RpZnlDbGllbnRGaW5pc2hlZCgpOworCisgICAgUmVmPEVsZW1lbnQ+
IG1fZWxlbWVudDsKICAgICBUZXh0UG9zaXRpb24gbV9zdGFydGluZ1Bvc2l0aW9uOyAvLyBPbmx5
IHVzZWQgZm9yIGlubGluZSBzY3JpcHQgdGFncy4KLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0OyAKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRTY3JpcHQ+IG1fY2FjaGVkU2NyaXB0OworICAgIFBlbmRpbmdTY3JpcHRDbGllbnQqIG1f
Y2xpZW50IHsgbnVsbHB0ciB9OwogfTsKIAogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0Q2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UGVuZGluZ1NjcmlwdENsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5NjQ0NGE4ZTM4MDBhYmJiMDRkZDM0
OWZhNzY2MTQ1MDZkMTVmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UGVuZGluZ1NjcmlwdENsaWVudC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgUGVuZGluZ1NjcmlwdDsKKworY2xhc3MgUGVuZGluZ1NjcmlwdENs
aWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UGVuZGluZ1NjcmlwdENsaWVudCgpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKFBlbmRpbmdTY3JpcHQmKSA9IDA7Cit9
OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCmluZGV4IGQyNjA1YmRkYjdiNWI2
MmI5MTQ1MzhlZjYyNjJhY2I3YjNkNTAwMmUuLjFhY2NiYmZlNjQyMTQxNTJlMTIzYzIyNDg5NzA1
ZWU4MjQyMDdmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCkBAIC02MSwxMSAr
NjEsMTEgQEAgdm9pZCBTY3JpcHRSdW5uZXI6OnF1ZXVlU2NyaXB0Rm9yRXhlY3V0aW9uKFNjcmlw
dEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIENhY2hlZFIKIAogICAgIHN3aXRjaCAoZXhlY3V0aW9u
VHlwZSkgewogICAgIGNhc2UgQVNZTkNfRVhFQ1VUSU9OOgotICAgICAgICBtX3BlbmRpbmdBc3lu
Y1NjcmlwdHMuYWRkKHNjcmlwdEVsZW1lbnQsIFBlbmRpbmdTY3JpcHQoJmVsZW1lbnQsIGNhY2hl
ZFNjcmlwdC5nZXQoKSkpOworICAgICAgICBtX3BlbmRpbmdBc3luY1NjcmlwdHMuYWRkKHNjcmlw
dEVsZW1lbnQsIFBlbmRpbmdTY3JpcHQ6OmNyZWF0ZShlbGVtZW50LCAqY2FjaGVkU2NyaXB0KSk7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBJTl9PUkRFUl9FWEVDVVRJT046Ci0gICAgICAg
IG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXIuYXBwZW5kKFBlbmRpbmdTY3JpcHQoJmVsZW1lbnQs
IGNhY2hlZFNjcmlwdC5nZXQoKSkpOworICAgICAgICBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVy
LmFwcGVuZChQZW5kaW5nU2NyaXB0OjpjcmVhdGUoZWxlbWVudCwgKmNhY2hlZFNjcmlwdCkpOwog
ICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgU2NyaXB0UnVu
bmVyOjpub3RpZnlTY3JpcHRSZWFkeShTY3JpcHRFbGVtZW50KiBzY3JpcHRFbGVtZW50LCBFeGVj
dXRpb25UeXBlCiAgICAgc3dpdGNoIChleGVjdXRpb25UeXBlKSB7CiAgICAgY2FzZSBBU1lOQ19F
WEVDVVRJT046CiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdBc3luY1NjcmlwdHMuY29udGFpbnMo
c2NyaXB0RWxlbWVudCkpOwotICAgICAgICBtX3NjcmlwdHNUb0V4ZWN1dGVTb29uLmFwcGVuZCht
X3BlbmRpbmdBc3luY1NjcmlwdHMudGFrZShzY3JpcHRFbGVtZW50KSk7CisgICAgICAgIG1fc2Ny
aXB0c1RvRXhlY3V0ZVNvb24uYXBwZW5kKCZtX3BlbmRpbmdBc3luY1NjcmlwdHMudGFrZShzY3Jp
cHRFbGVtZW50KS0+Z2V0KCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSU5fT1JERVJf
RVhFQ1VUSU9OOgpAQCAtMTAwLDIzICsxMDAsMjQgQEAgdm9pZCBTY3JpcHRSdW5uZXI6OnRpbWVy
RmlyZWQoKQogewogICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdChtX2RvY3VtZW50KTsKIAotICAg
IFZlY3RvcjxQZW5kaW5nU2NyaXB0PiBzY3JpcHRzOworICAgIFZlY3RvcjxSZWZQdHI8UGVuZGlu
Z1NjcmlwdD4+IHNjcmlwdHM7CiAgICAgc2NyaXB0cy5zd2FwKG1fc2NyaXB0c1RvRXhlY3V0ZVNv
b24pOwogCiAgICAgc2l6ZV90IG51bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlID0gMDsKLSAgICBm
b3IgKDsgbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGUgPCBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9y
ZGVyLnNpemUoKSAmJiBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyW251bUluT3JkZXJTY3JpcHRz
VG9FeGVjdXRlXS5jYWNoZWRTY3JpcHQoKS0+aXNMb2FkZWQoKTsgKytudW1Jbk9yZGVyU2NyaXB0
c1RvRXhlY3V0ZSkKLSAgICAgICAgc2NyaXB0cy5hcHBlbmQobV9zY3JpcHRzVG9FeGVjdXRlSW5P
cmRlcltudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZV0pOworICAgIGZvciAoOyBudW1Jbk9yZGVy
U2NyaXB0c1RvRXhlY3V0ZSA8IG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXIuc2l6ZSgpICYmIG1f
c2NyaXB0c1RvRXhlY3V0ZUluT3JkZXJbbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGVdLT5pc0xv
YWRlZCgpOyArK251bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlKQorICAgICAgICBzY3JpcHRzLmFw
cGVuZChtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyW251bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRl
XS5wdHIoKSk7CiAgICAgaWYgKG51bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlKQogICAgICAgICBt
X3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLnJlbW92ZSgwLCBudW1Jbk9yZGVyU2NyaXB0c1RvRXhl
Y3V0ZSk7CiAKLSAgICBmb3IgKGF1dG8mIHNjcmlwdCA6IHNjcmlwdHMpIHsKLSAgICAgICAgQ2Fj
aGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQgPSBzY3JpcHQuY2FjaGVkU2NyaXB0KCk7Ci0gICAgICAg
IFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gc2NyaXB0LnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIo
KTsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIGZvciAoYXV0byYgY3VycmVudFNjcmlw
dCA6IHNjcmlwdHMpIHsKKyAgICAgICAgYXV0byBzY3JpcHQgPSBzdGQ6OmV4Y2hhbmdlKGN1cnJl
bnRTY3JpcHQsIG51bGxwdHIpOworICAgICAgICBBU1NFUlQoc2NyaXB0KTsKICAgICAgICAgLy8g
UGFwZXIgb3ZlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MDUw
Ci0gICAgICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgaWYgKCFzY3JpcHQpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShlbGVtZW50Lmdl
dCgpKS0+ZXhlY3V0ZShjYWNoZWRTY3JpcHQpOworICAgICAgICBhdXRvKiBzY3JpcHRFbGVtZW50
ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZSgmc2NyaXB0LT5lbGVtZW50KCkpOworICAgICAg
ICBBU1NFUlQoc2NyaXB0RWxlbWVudCk7CisgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGUo
c2NyaXB0LT5jYWNoZWRTY3JpcHQoKSk7CiAgICAgICAgIG1fZG9jdW1lbnQuZGVjcmVtZW50TG9h
ZEV2ZW50RGVsYXlDb3VudCgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRSdW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuaApp
bmRleCA4Y2QzMzJhNTczNGMxY2I5MmYyYTVmZjVmYzRjY2ExNThmZTNiYzQxLi5iYTQxOWZhOTA3
YWM4ZWQ1YTMzNzM5NDgzOTVlYWVkMTgzZDZiYzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0UnVubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5l
ci5oCkBAIC01Niw5ICs1Niw5IEBAIGNsYXNzIFNjcmlwdFJ1bm5lciB7CiAgICAgdm9pZCB0aW1l
ckZpcmVkKCk7CiAKICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKLSAgICBWZWN0b3I8UGVuZGlu
Z1NjcmlwdD4gbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlcjsKLSAgICBWZWN0b3I8UGVuZGluZ1Nj
cmlwdD4gbV9zY3JpcHRzVG9FeGVjdXRlU29vbjsgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3Nw
ZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jc2V0LW9mLXNjcmlwdHMtdGhhdC13aWxsLWV4ZWN1
dGUtYXMtc29vbi1hcy1wb3NzaWJsZQotICAgIEhhc2hNYXA8U2NyaXB0RWxlbWVudCosIFBlbmRp
bmdTY3JpcHQ+IG1fcGVuZGluZ0FzeW5jU2NyaXB0czsKKyAgICBWZWN0b3I8UmVmPFBlbmRpbmdT
Y3JpcHQ+PiBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyOworICAgIFZlY3RvcjxSZWZQdHI8UGVu
ZGluZ1NjcmlwdD4+IG1fc2NyaXB0c1RvRXhlY3V0ZVNvb247IC8vIGh0dHA6Ly93d3cud2hhdHdn
Lm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3NldC1vZi1zY3JpcHRzLXRoYXQtd2ls
bC1leGVjdXRlLWFzLXNvb24tYXMtcG9zc2libGUKKyAgICBIYXNoTWFwPFNjcmlwdEVsZW1lbnQq
LCBSZWY8UGVuZGluZ1NjcmlwdD4+IG1fcGVuZGluZ0FzeW5jU2NyaXB0czsKICAgICBUaW1lciBt
X3RpbWVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5jcHAKaW5kZXggOWY0N2EyNGRjNTU2MWRjMjY4MWYxNzBlYTU5YmVlZGE5YWI4
NzM0Ny4uOWY4ZGVlZGRmZjVlMjRjNWY5NzE4Njc4MzY1NDgwNTMzMDE4OTY2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50
UGFyc2VyLmgiCiAKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQu
aCIKQEAgLTUwMCwxOCArNTAxLDE4IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQ
YXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24oKQogICAgIGVuZElmRGVsYXllZCgpOwogfQogCi12
b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6d2F0Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKiBjYWNo
ZWRTY3JpcHQpCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6d2F0Y2hGb3JMb2FkKFBlbmRpbmdT
Y3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7Ci0gICAgQVNTRVJUKCFjYWNoZWRTY3JpcHQtPmlzTG9h
ZGVkKCkpOwotICAgIC8vIGFkZENsaWVudCB3b3VsZCBjYWxsIG5vdGlmeUZpbmlzaGVkIGlmIHRo
ZSBsb2FkIHdlcmUgY29tcGxldGUuCisgICAgQVNTRVJUKCFwZW5kaW5nU2NyaXB0LmlzTG9hZGVk
KCkpOworICAgIC8vIHNldENsaWVudCB3b3VsZCBjYWxsIG5vdGlmeUZpbmlzaGVkIGlmIHRoZSBs
b2FkIHdlcmUgY29tcGxldGUuCiAgICAgLy8gQ2FsbGVycyBkbyBub3QgZXhwZWN0IHRvIGJlIHJl
LWVudGVyZWQgZnJvbSB0aGlzIGNhbGwsIHNvIHRoZXkgc2hvdWxkCi0gICAgLy8gbm90IGFuIGFs
cmVhZHktbG9hZGVkIENhY2hlZFJlc291cmNlLgotICAgIGNhY2hlZFNjcmlwdC0+YWRkQ2xpZW50
KHRoaXMpOworICAgIC8vIG5vdCBhbiBhbHJlYWR5LWxvYWRlZCBQZW5kaW5nU2NyaXB0LgorICAg
IHBlbmRpbmdTY3JpcHQuc2V0Q2xpZW50KHRoaXMpOwogfQogCi12b2lkIEhUTUxEb2N1bWVudFBh
cnNlcjo6c3RvcFdhdGNoaW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkU2NyaXB0KQor
dm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BXYXRjaGluZ0ZvckxvYWQoUGVuZGluZ1Njcmlw
dCYgcGVuZGluZ1NjcmlwdCkKIHsKLSAgICBjYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlz
KTsKKyAgICBwZW5kaW5nU2NyaXB0LmNsZWFyQ2xpZW50KCk7CiB9CiAKIHZvaWQgSFRNTERvY3Vt
ZW50UGFyc2VyOjphcHBlbmRDdXJyZW50SW5wdXRTdHJlYW1Ub1ByZWxvYWRTY2FubmVyQW5kU2Nh
bigpCkBAIC01MjEsNyArNTIyLDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZEN1
cnJlbnRJbnB1dFN0cmVhbVRvUHJlbG9hZFNjYW5uZXJBbmRTY2FuKCkKICAgICBtX3ByZWxvYWRT
Y2FubmVyLT5zY2FuKCptX3ByZWxvYWRlciwgKmRvY3VtZW50KCkpOwogfQogCi12b2lkIEhUTUxE
b2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291
cmNlKQordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKFBlbmRpbmdTY3Jp
cHQmIHBlbmRpbmdTY3JpcHQpCiB7CiAgICAgLy8gcHVtcFRva2VuaXplciBjYW4gY2F1c2UgdGhp
cyBwYXJzZXIgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgRG9jdW1lbnQsCiAgICAgLy8gYnV0IHdl
IG5lZWQgdG8gZW5zdXJlIGl0IGlzbid0IGRlbGV0ZWQgeWV0LgpAQCAtNTM0LDcgKzUzNSw3IEBA
IHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSog
Y2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3NjcmlwdFJ1
bm5lci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChjYWNoZWRSZXNvdXJjZSk7CisgICAg
bV9zY3JpcHRSdW5uZXItPmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQocGVuZGluZ1Njcmlw
dCk7CiAgICAgaWYgKCFpc1dhaXRpbmdGb3JTY3JpcHRzKCkpCiAgICAgICAgIHJlc3VtZVBhcnNp
bmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCA1MTFlMWQzOWNkYzYzMGY1MTI3YjZmMjgz
Y2M2MWE1NDhhNmYwN2IxLi5lMmJmYjMyNjlmNGM3YWIyMWQ3NjQ3YTI1ODZjOGUxOWQ2YzgzYmJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
aApAQCAtMjcsMTEgKzI3LDExIEBACiAjaWZuZGVmIEhUTUxEb2N1bWVudFBhcnNlcl9oCiAjZGVm
aW5lIEhUTUxEb2N1bWVudFBhcnNlcl9oCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dFN0cmVhbS5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRS
dW5uZXJIb3N0LmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZVRyYWNrZXIuaCIKICNpbmNsdWRlICJI
VE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiUGVuZGluZ1NjcmlwdENsaWVudC5oIgogI2luY2x1
ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIlhTU0F1ZGl0b3IuaCIK
ICNpbmNsdWRlICJYU1NBdWRpdG9yRGVsZWdhdGUuaCIKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3Mg
SFRNTFRyZWVCdWlsZGVyOwogY2xhc3MgSFRNTFJlc291cmNlUHJlbG9hZGVyOwogY2xhc3MgUHVt
cFNlc3Npb247CiAKLWNsYXNzIEhUTUxEb2N1bWVudFBhcnNlciA6IHB1YmxpYyBTY3JpcHRhYmxl
RG9jdW1lbnRQYXJzZXIsIHByaXZhdGUgSFRNTFNjcmlwdFJ1bm5lckhvc3QsIHByaXZhdGUgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgeworY2xhc3MgSFRNTERvY3VtZW50UGFyc2VyIDogcHVibGljIFNj
cmlwdGFibGVEb2N1bWVudFBhcnNlciwgcHJpdmF0ZSBIVE1MU2NyaXB0UnVubmVySG9zdCwgcHJp
dmF0ZSBQZW5kaW5nU2NyaXB0Q2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEhUTUxEb2N1bWVudFBhcnNlcj4gY3JlYXRlKEhUTUxE
b2N1bWVudCYpOwpAQCAtOTAsMTQgKzkwLDE0IEBAIGNsYXNzIEhUTUxEb2N1bWVudFBhcnNlciA6
IHB1YmxpYyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIsIHByaXZhdGUgSFRNTFNjcmlwdFJ1CiAg
ICAgYm9vbCBzaG91bGRBc3NvY2lhdGVDb25zb2xlTWVzc2FnZXNXaXRoVGV4dFBvc2l0aW9uKCkg
Y29uc3QgZmluYWw7CiAKICAgICAvLyBIVE1MU2NyaXB0UnVubmVySG9zdAotICAgIHZvaWQgd2F0
Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKikgZmluYWw7Ci0gICAgdm9pZCBzdG9wV2F0Y2hpbmdG
b3JMb2FkKENhY2hlZFJlc291cmNlKikgZmluYWw7CisgICAgdm9pZCB3YXRjaEZvckxvYWQoUGVu
ZGluZ1NjcmlwdCYpIGZpbmFsOworICAgIHZvaWQgc3RvcFdhdGNoaW5nRm9yTG9hZChQZW5kaW5n
U2NyaXB0JikgZmluYWw7CiAgICAgSFRNTElucHV0U3RyZWFtJiBpbnB1dFN0cmVhbSgpIGZpbmFs
OwogICAgIGJvb2wgaGFzUHJlbG9hZFNjYW5uZXIoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIGFw
cGVuZEN1cnJlbnRJbnB1dFN0cmVhbVRvUHJlbG9hZFNjYW5uZXJBbmRTY2FuKCkgZmluYWw7CiAK
LSAgICAvLyBDYWNoZWRSZXNvdXJjZUNsaWVudAotICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2Fj
aGVkUmVzb3VyY2UqKSBmaW5hbDsKKyAgICAvLyBQZW5kaW5nU2NyaXB0Q2xpZW50CisgICAgdm9p
ZCBub3RpZnlGaW5pc2hlZChQZW5kaW5nU2NyaXB0JikgZmluYWw7CiAKICAgICBEb2N1bWVudCog
Y29udGV4dEZvclBhcnNpbmdTZXNzaW9uKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAKaW5kZXggMWI0YzE1ZDk5OTZhZTgzNDE0NjMwNGZk
ZmRkN2JlZmZkZDMyMDBhOC4uYjYxZTRkNzA4YjZjZGYxZjExNGIwNTk1MzEwYWM1ZDg2N2Y2N2Ux
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5j
cHAKQEAgLTU4LDEyICs1OCwxNCBAQCBIVE1MU2NyaXB0UnVubmVyOjpIVE1MU2NyaXB0UnVubmVy
KERvY3VtZW50JiBkb2N1bWVudCwgSFRNTFNjcmlwdFJ1bm5lckhvc3QmIGhvcwogSFRNTFNjcmlw
dFJ1bm5lcjo6fkhUTUxTY3JpcHRSdW5uZXIoKQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
YmUgcGFzc2VkIGEgImRvbmUgbG9hZGluZy9wYXJzaW5nIiBjYWxsYmFjayBzb29uZXIgdGhhbiBk
ZXN0cnVjdGlvbj8KLSAgICBpZiAobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQo
KSAmJiBtX3BhcnNlckJsb2NraW5nU2NyaXB0LndhdGNoaW5nRm9yTG9hZCgpKQotICAgICAgICBz
dG9wV2F0Y2hpbmdGb3JMb2FkKG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpOworICAgIGlmIChtX3Bh
cnNlckJsb2NraW5nU2NyaXB0KSB7CisgICAgICAgIGlmIChtX3BhcnNlckJsb2NraW5nU2NyaXB0
LT53YXRjaGluZ0ZvckxvYWQoKSkKKyAgICAgICAgICAgIHN0b3BXYXRjaGluZ0ZvckxvYWQoKm1f
cGFyc2VyQmxvY2tpbmdTY3JpcHQpOworICAgIH0KIAogICAgIHdoaWxlICghbV9zY3JpcHRzVG9F
eGVjdXRlQWZ0ZXJQYXJzaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBQZW5kaW5nU2NyaXB0IHBl
bmRpbmdTY3JpcHQgPSBtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcudGFrZUZpcnN0KCk7
Ci0gICAgICAgIGlmIChwZW5kaW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpICYmIHBlbmRpbmdTY3Jp
cHQud2F0Y2hpbmdGb3JMb2FkKCkpCisgICAgICAgIGF1dG8gcGVuZGluZ1NjcmlwdCA9IG1fc2Ny
aXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKHBlbmRp
bmdTY3JpcHQtPndhdGNoaW5nRm9yTG9hZCgpKQogICAgICAgICAgICAgc3RvcFdhdGNoaW5nRm9y
TG9hZChwZW5kaW5nU2NyaXB0KTsKICAgICB9CiB9CkBAIC05NSw3ICs5Nyw3IEBAIFNjcmlwdFNv
dXJjZUNvZGUgSFRNTFNjcmlwdFJ1bm5lcjo6c291cmNlRnJvbVBlbmRpbmdTY3JpcHQoY29uc3Qg
UGVuZGluZ1NjcmlwdCYKICAgICAgICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmNh
Y2hlZFNjcmlwdCgpKTsKICAgICB9CiAgICAgZXJyb3JPY2N1cnJlZCA9IGZhbHNlOwotICAgIHJl
dHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5lbGVtZW50KCktPnRleHRDb250ZW50KCksIGRv
Y3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHQuc3RhcnRpbmdQ
b3NpdGlvbigpKTsKKyAgICByZXR1cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuZWxlbWVudCgp
LnRleHRDb250ZW50KCksIGRvY3VtZW50VVJMRm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQp
LCBzY3JpcHQuc3RhcnRpbmdQb3NpdGlvbigpKTsKIH0KIAogYm9vbCBIVE1MU2NyaXB0UnVubmVy
Ojppc1BlbmRpbmdTY3JpcHRSZWFkeShjb25zdCBQZW5kaW5nU2NyaXB0JiBzY3JpcHQpCkBAIC0x
MDUsNyArMTA3LDcgQEAgYm9vbCBIVE1MU2NyaXB0UnVubmVyOjppc1BlbmRpbmdTY3JpcHRSZWFk
eShjb25zdCBQZW5kaW5nU2NyaXB0JiBzY3JpcHQpCiAgICAgbV9oYXNTY3JpcHRzV2FpdGluZ0Zv
clN0eWxlc2hlZXRzID0gIW1fZG9jdW1lbnQtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpOwogICAg
IGlmIChtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoc2NyaXB0LmNhY2hlZFNjcmlwdCgpICYmICFzY3JpcHQuY2FjaGVkU2Ny
aXB0KCktPmlzTG9hZGVkKCkpCisgICAgaWYgKHNjcmlwdC5uZWVkc0xvYWRpbmcoKSAmJiAhc2Ny
aXB0LmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTExNSwxMCArMTE3LDExIEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBh
cnNpbmdCbG9ja2luZ1NjcmlwdCgpCiAgICAgQVNTRVJUKG1fZG9jdW1lbnQpOwogICAgIEFTU0VS
VCghaXNFeGVjdXRpbmdTY3JpcHQoKSk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQtPmhhdmVTdHls
ZXNoZWV0c0xvYWRlZCgpKTsKLSAgICBBU1NFUlQoaXNQZW5kaW5nU2NyaXB0UmVhZHkobV9wYXJz
ZXJCbG9ja2luZ1NjcmlwdCkpOworICAgIEFTU0VSVChpc1BlbmRpbmdTY3JpcHRSZWFkeSgqbV9w
YXJzZXJCbG9ja2luZ1NjcmlwdCkpOwogCiAgICAgSW5zZXJ0aW9uUG9pbnRSZWNvcmQgaW5zZXJ0
aW9uUG9pbnRSZWNvcmQobV9ob3N0LmlucHV0U3RyZWFtKCkpOwotICAgIGV4ZWN1dGVQZW5kaW5n
U2NyaXB0QW5kRGlzcGF0Y2hFdmVudChtX3BhcnNlckJsb2NraW5nU2NyaXB0KTsKKyAgICBSZWZQ
dHI8UGVuZGluZ1NjcmlwdD4gcHJvdGVjdG9yID0gc3RkOjpleGNoYW5nZShtX3BhcnNlckJsb2Nr
aW5nU2NyaXB0LCBudWxscHRyKTsKKyAgICBleGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNo
RXZlbnQoKnByb3RlY3Rvcik7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0ZVBl
bmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQp
CkBAIC0xMjcsMTUgKzEzMCwxMyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5k
aW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChQZW5kaW5nU2NyaXB0JiBwZW5kaQogICAgIFNjcmlw
dFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IHNvdXJjZUZyb21QZW5kaW5nU2NyaXB0KHBlbmRpbmdT
Y3JpcHQsIGVycm9yT2NjdXJyZWQpOwogCiAgICAgLy8gU3RvcCB3YXRjaGluZyBsb2FkcyBiZWZv
cmUgZXhlY3V0ZVNjcmlwdCB0byBwcmV2ZW50IHJlY3Vyc2lvbiBpZiB0aGUgc2NyaXB0IHJlbG9h
ZHMgaXRzZWxmLgotICAgIGlmIChwZW5kaW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpICYmIHBlbmRp
bmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpCisgICAgaWYgKHBlbmRpbmdTY3JpcHQud2F0Y2hp
bmdGb3JMb2FkKCkpCiAgICAgICAgIHN0b3BXYXRjaGluZ0ZvckxvYWQocGVuZGluZ1NjcmlwdCk7
CiAKICAgICBpZiAoIWlzRXhlY3V0aW5nU2NyaXB0KCkpCiAgICAgICAgIE1pY3JvdGFza1F1ZXVl
OjptYWluVGhyZWFkUXVldWUoKS5wZXJmb3JtTWljcm90YXNrQ2hlY2twb2ludCgpOwogCi0gICAg
Ly8gQ2xlYXIgdGhlIHBlbmRpbmcgc2NyaXB0IGJlZm9yZSBwb3NzaWJsZSByZW50cmFuY3kgZnJv
bSBleGVjdXRlU2NyaXB0KCkKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IHBlbmRpbmdT
Y3JpcHQucmVsZWFzZUVsZW1lbnRBbmRDbGVhcigpOwotICAgIGlmIChTY3JpcHRFbGVtZW50KiBz
Y3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShlbGVtZW50LmdldCgpKSkg
eworICAgIGlmIChhdXRvKiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJs
ZSgmcGVuZGluZ1NjcmlwdC5lbGVtZW50KCkpKSB7CiAgICAgICAgIE5lc3RpbmdMZXZlbEluY3Jl
bWVudGVyIG5lc3RpbmdMZXZlbEluY3JlbWVudGVyKG1fc2NyaXB0TmVzdGluZ0xldmVsKTsKICAg
ICAgICAgSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIgaWdub3JlRGVzdHJ1
Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIobV9kb2N1bWVudCk7CiAgICAgICAgIGlmIChlcnJv
ck9jY3VycmVkKQpAQCAtMTQzLDcgKzE0NCw3IEBAIHZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhl
Y3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KFBlbmRpbmdTY3JpcHQmIHBlbmRpCiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKGlzRXhlY3V0aW5nU2NyaXB0KCkpOwog
ICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNjcmlwdChzb3VyY2VDb2RlKTsKLSAg
ICAgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnQoY3JlYXRlU2NyaXB0TG9hZEV2ZW50KCkp
OworICAgICAgICAgICAgcGVuZGluZ1NjcmlwdC5lbGVtZW50KCkuZGlzcGF0Y2hFdmVudChjcmVh
dGVTY3JpcHRMb2FkRXZlbnQoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgQVNTRVJUKCFpc0V4
ZWN1dGluZ1NjcmlwdCgpKTsKQEAgLTE1MiwxNSArMTUzLDEzIEBAIHZvaWQgSFRNTFNjcmlwdFJ1
bm5lcjo6ZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50KFBlbmRpbmdTY3JpcHQm
IHBlbmRpCiB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OndhdGNoRm9yTG9hZChQZW5kaW5nU2NyaXB0
JiBwZW5kaW5nU2NyaXB0KQogewogICAgIEFTU0VSVCghcGVuZGluZ1NjcmlwdC53YXRjaGluZ0Zv
ckxvYWQoKSk7Ci0gICAgbV9ob3N0LndhdGNoRm9yTG9hZChwZW5kaW5nU2NyaXB0LmNhY2hlZFNj
cmlwdCgpKTsKLSAgICBwZW5kaW5nU2NyaXB0LnNldFdhdGNoaW5nRm9yTG9hZCh0cnVlKTsKKyAg
ICBtX2hvc3Qud2F0Y2hGb3JMb2FkKHBlbmRpbmdTY3JpcHQpOwogfQogCiB2b2lkIEhUTUxTY3Jp
cHRSdW5uZXI6OnN0b3BXYXRjaGluZ0ZvckxvYWQoUGVuZGluZ1NjcmlwdCYgcGVuZGluZ1Njcmlw
dCkKIHsKICAgICBBU1NFUlQocGVuZGluZ1NjcmlwdC53YXRjaGluZ0ZvckxvYWQoKSk7Ci0gICAg
bV9ob3N0LnN0b3BXYXRjaGluZ0ZvckxvYWQocGVuZGluZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSk7
Ci0gICAgcGVuZGluZ1NjcmlwdC5zZXRXYXRjaGluZ0ZvckxvYWQoZmFsc2UpOworICAgIG1faG9z
dC5zdG9wV2F0Y2hpbmdGb3JMb2FkKHBlbmRpbmdTY3JpcHQpOwogfQogCiAvLyBUaGlzIGZ1bmN0
aW9uIHNob3VsZCBtYXRjaCAxMC4yLjUuMTEgIkFuIGVuZCB0YWcgd2hvc2UgdGFnIG5hbWUgaXMg
J3NjcmlwdCciCkBAIC0xODcsMjEgKzE4NiwyMSBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4
ZWN1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50LCBjb25zdCBUZXh0UG9zaQog
CiBib29sIEhUTUxTY3JpcHRSdW5uZXI6Omhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gISFtX3BhcnNlckJsb2NraW5nU2NyaXB0LmVsZW1lbnQoKTsKKyAgICBy
ZXR1cm4gISFtX3BhcnNlckJsb2NraW5nU2NyaXB0OwogfQogCiB2b2lkIEhUTUxTY3JpcHRSdW5u
ZXI6OmV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHRzKCkKIHsKLSAgICB3aGlsZSAoaGFzUGFy
c2VyQmxvY2tpbmdTY3JpcHQoKSAmJiBpc1BlbmRpbmdTY3JpcHRSZWFkeShtX3BhcnNlckJsb2Nr
aW5nU2NyaXB0KSkKKyAgICB3aGlsZSAoaGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSAmJiBpc1Bl
bmRpbmdTY3JpcHRSZWFkeSgqbV9wYXJzZXJCbG9ja2luZ1NjcmlwdCkpCiAgICAgICAgIGV4ZWN1
dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHQoKTsKIH0KIAotdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpl
eGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKiBjYWNoZWRTY3JpcHQp
Cit2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQoUGVu
ZGluZ1NjcmlwdCYgcGVuZGluZ1NjcmlwdCkKIHsKICAgICBBU1NFUlQoIWlzRXhlY3V0aW5nU2Ny
aXB0KCkpOwogICAgIEFTU0VSVChoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpKTsKLSAgICBBU1NF
UlRfVU5VU0VEKGNhY2hlZFNjcmlwdCwgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3Jp
cHQoKSA9PSBjYWNoZWRTY3JpcHQpOwotICAgIEFTU0VSVChtX3BhcnNlckJsb2NraW5nU2NyaXB0
LmNhY2hlZFNjcmlwdCgpLT5pc0xvYWRlZCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHBlbmRpbmdT
Y3JpcHQsIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuZ2V0KCkgPT0gJnBlbmRpbmdTY3JpcHQpOwor
ICAgIEFTU0VSVChtX3BhcnNlckJsb2NraW5nU2NyaXB0LT5pc0xvYWRlZCgpKTsKICAgICBleGVj
dXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpOwogfQogCkBAIC0yMjEsMTIgKzIyMCwxMiBAQCBi
b29sIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclBhcnNpbmcoKQog
ICAgIHdoaWxlICghbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLmlzRW1wdHkoKSkgewog
ICAgICAgICBBU1NFUlQoIWlzRXhlY3V0aW5nU2NyaXB0KCkpOwogICAgICAgICBBU1NFUlQoIWhh
c1BhcnNlckJsb2NraW5nU2NyaXB0KCkpOwotICAgICAgICBBU1NFUlQobV9zY3JpcHRzVG9FeGVj
dXRlQWZ0ZXJQYXJzaW5nLmZpcnN0KCkuY2FjaGVkU2NyaXB0KCkpOwotICAgICAgICBpZiAoIW1f
c2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5maXJzdCgpLmNhY2hlZFNjcmlwdCgpLT5pc0xv
YWRlZCgpKSB7CisgICAgICAgIEFTU0VSVChtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcu
Zmlyc3QoKS0+bmVlZHNMb2FkaW5nKCkpOworICAgICAgICBpZiAoIW1fc2NyaXB0c1RvRXhlY3V0
ZUFmdGVyUGFyc2luZy5maXJzdCgpLT5pc0xvYWRlZCgpKSB7CiAgICAgICAgICAgICB3YXRjaEZv
ckxvYWQobV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLmZpcnN0KCkpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIFBlbmRpbmdTY3JpcHQgZmlyc3Qg
PSBtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcudGFrZUZpcnN0KCk7CisgICAgICAgIGF1
dG8gZmlyc3QgPSBtX3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcudGFrZUZpcnN0KCk7CiAg
ICAgICAgIGV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChmaXJzdCk7CiAgICAg
ICAgIC8vIEZJWE1FOiBXaGF0IGlzIHRoaXMgbV9kb2N1bWVudCBjaGVjayBmb3I/CiAgICAgICAg
IGlmICghbV9kb2N1bWVudCkKQEAgLTIzNSw0MiArMjM0LDMzIEBAIGJvb2wgSFRNTFNjcmlwdFJ1
bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yUGFyc2luZygpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBhcnNpbmdCbG9ja2luZ1Njcmlw
dChFbGVtZW50KiBlbGVtZW50KQorc3RhdGljIFJlZjxQZW5kaW5nU2NyaXB0PiByZXF1ZXN0UGVu
ZGluZ1NjcmlwdChFbGVtZW50KiBzY3JpcHQpCiB7Ci0gICAgaWYgKCFyZXF1ZXN0UGVuZGluZ1Nj
cmlwdChtX3BhcnNlckJsb2NraW5nU2NyaXB0LCBlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8qIHNjcmlwdEVsZW1lbnQgPSB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKHNjcmlw
dCk7CisgICAgQVNTRVJUKHNjcmlwdEVsZW1lbnQtPndpbGxCZVBhcnNlckV4ZWN1dGVkKCkpOwor
ICAgIGF1dG8qIGNhY2hlZFNjcmlwdCA9IHNjcmlwdEVsZW1lbnQtPmNhY2hlZFNjcmlwdCgpLmdl
dCgpOworICAgIEFTU0VSVChjYWNoZWRTY3JpcHQpOworICAgIHJldHVybiBQZW5kaW5nU2NyaXB0
OjpjcmVhdGUoKnNjcmlwdCwgKmNhY2hlZFNjcmlwdCk7Cit9CiAKLSAgICBBU1NFUlQobV9wYXJz
ZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSk7Cit2b2lkIEhUTUxTY3JpcHRSdW5uZXI6
OnJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBB
U1NFUlQoIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpOworICAgIG1fcGFyc2VyQmxvY2tpbmdTY3Jp
cHQgPSByZXF1ZXN0UGVuZGluZ1NjcmlwdChlbGVtZW50KTsKKyAgICBBU1NFUlQobV9wYXJzZXJC
bG9ja2luZ1NjcmlwdC0+bmVlZHNMb2FkaW5nKCkpOwogCiAgICAgLy8gV2Ugb25seSBjYXJlIGFi
b3V0IGEgbG9hZCBjYWxsYmFjayBpZiBjYWNoZWRTY3JpcHQgaXMgbm90IGFscmVhZHkKICAgICAv
LyBpbiB0aGUgY2FjaGUuIENhbGxlcnMgd2lsbCBhdHRlbXB0IHRvIHJ1biB0aGUgbV9wYXJzZXJC
bG9ja2luZ1NjcmlwdAogICAgIC8vIGlmIHBvc3NpYmxlIGJlZm9yZSByZXR1cm5pbmcgY29udHJv
bCB0byB0aGUgcGFyc2VyLgotICAgIGlmICghbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5jYWNoZWRT
Y3JpcHQoKS0+aXNMb2FkZWQoKSkKLSAgICAgICAgd2F0Y2hGb3JMb2FkKG1fcGFyc2VyQmxvY2tp
bmdTY3JpcHQpOworICAgIGlmICghbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC0+aXNMb2FkZWQoKSkK
KyAgICAgICAgd2F0Y2hGb3JMb2FkKCptX3BhcnNlckJsb2NraW5nU2NyaXB0KTsKIH0KIAogdm9p
ZCBIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0RGVmZXJyZWRTY3JpcHQoRWxlbWVudCogZWxlbWVu
dCkKIHsKLSAgICBQZW5kaW5nU2NyaXB0IHBlbmRpbmdTY3JpcHQ7Ci0gICAgaWYgKCFyZXF1ZXN0
UGVuZGluZ1NjcmlwdChwZW5kaW5nU2NyaXB0LCBlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKHBlbmRpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwotICAgIG1fc2NyaXB0
c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5hcHBlbmQocGVuZGluZ1NjcmlwdCk7Ci19Ci0KLWJvb2wg
SFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdFBlbmRpbmdTY3JpcHQoUGVuZGluZ1NjcmlwdCYgcGVu
ZGluZ1NjcmlwdCwgRWxlbWVudCogc2NyaXB0KSBjb25zdAotewotICAgIEFTU0VSVCghcGVuZGlu
Z1NjcmlwdC5lbGVtZW50KCkpOwotICAgIHBlbmRpbmdTY3JpcHQuc2V0RWxlbWVudChzY3JpcHQp
OwotICAgIC8vIFRoaXMgc2hvdWxkIGNvcnJlY3RseSByZXR1cm4gMCBmb3IgZW1wdHkgb3IgaW52
YWxpZCBzcmNWYWx1ZXMuCi0gICAgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQgPSB0b1Njcmlw
dEVsZW1lbnRJZlBvc3NpYmxlKHNjcmlwdCktPmNhY2hlZFNjcmlwdCgpLmdldCgpOwotICAgIGlm
ICghY2FjaGVkU2NyaXB0KSB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIERpc3BhdGNo
IGVycm9yIGV2ZW50LgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHBlbmRpbmdT
Y3JpcHQuc2V0Q2FjaGVkU2NyaXB0KGNhY2hlZFNjcmlwdCk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgYXV0byBwZW5kaW5nU2NyaXB0ID0gcmVxdWVzdFBlbmRpbmdTY3JpcHQoZWxlbWVudCk7Cisg
ICAgQVNTRVJUKHBlbmRpbmdTY3JpcHQtPm5lZWRzTG9hZGluZygpKTsKKyAgICBtX3NjcmlwdHNU
b0V4ZWN1dGVBZnRlclBhcnNpbmcuYXBwZW5kKFdURk1vdmUocGVuZGluZ1NjcmlwdCkpOwogfQog
CiAvLyBUaGlzIG1ldGhvZCBpcyBtZWFudCB0byBtYXRjaCB0aGUgSFRNTDUgZGVmaW5pdGlvbiBv
ZiAicnVubmluZyBhIHNjcmlwdCIKQEAgLTMwOCwxMyArMjk4LDEwIEBAIHZvaWQgSFRNTFNjcmlw
dFJ1bm5lcjo6cnVuU2NyaXB0KEVsZW1lbnQqIHNjcmlwdCwgY29uc3QgVGV4dFBvc2l0aW9uJiBz
Y3JpcHRTdGFyCiAgICAgICAgIGlmIChzY3JpcHRFbGVtZW50LT53aWxsRXhlY3V0ZVdoZW5Eb2N1
bWVudEZpbmlzaGVkUGFyc2luZygpKQogICAgICAgICAgICAgcmVxdWVzdERlZmVycmVkU2NyaXB0
KHNjcmlwdCk7CiAgICAgICAgIGVsc2UgaWYgKHNjcmlwdEVsZW1lbnQtPnJlYWR5VG9CZVBhcnNl
ckV4ZWN1dGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChtX3NjcmlwdE5lc3RpbmdMZXZlbCA9PSAx
KSB7Ci0gICAgICAgICAgICAgICAgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5zZXRFbGVtZW50KHNj
cmlwdCk7Ci0gICAgICAgICAgICAgICAgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5zZXRTdGFydGlu
Z1Bvc2l0aW9uKHNjcmlwdFN0YXJ0UG9zaXRpb24pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBTY3JpcHRTb3VyY2VDb2RlIHNvdXJjZUNvZGUoc2NyaXB0LT50ZXh0Q29u
dGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0
U3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0ZVNj
cmlwdChzb3VyY2VDb2RlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3Njcmlw
dE5lc3RpbmdMZXZlbCA9PSAxKQorICAgICAgICAgICAgICAgIG1fcGFyc2VyQmxvY2tpbmdTY3Jp
cHQgPSBQZW5kaW5nU2NyaXB0OjpjcmVhdGUoKnNjcmlwdCwgc2NyaXB0U3RhcnRQb3NpdGlvbik7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+ZXhlY3V0
ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRlbnQoKSwgZG9jdW1lbnRV
UkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdFN0YXJ0UG9zaXRpb24pKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0
KHNjcmlwdCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFNjcmlwdFJ1bm5lci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlw
dFJ1bm5lci5oCmluZGV4IDQ1YmY4ZDAzMjRmOGVkMjFjOWU2ZThkZGUxNGJiYzlkZTA2Y2JjN2Eu
LmVmYzM5MjhiZTg5MjVkNmM5MzcwYTgzMmVmYTQ4Y2Y3YjA4NTcxNDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKQEAgLTUxLDcgKzUxLDcgQEAg
Y2xhc3MgSFRNTFNjcmlwdFJ1bm5lciB7CiAgICAgLy8gUHJvY2Vzc2VzIHRoZSBwYXNzZWQgaW4g
c2NyaXB0IGFuZCBhbnkgcGVuZGluZyBzY3JpcHRzIGlmIHBvc3NpYmxlLgogICAgIHZvaWQgZXhl
Y3V0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdFRvUHJvY2VzcywgY29uc3QgVGV4dFBvc2l0
aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIAotICAgIHZvaWQgZXhlY3V0ZVNjcmlwdHNXYWl0
aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOworICAgIHZvaWQgZXhlY3V0ZVNjcmlwdHNXYWl0
aW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0Jik7CiAgICAgYm9vbCBoYXNTY3JpcHRzV2FpdGluZ0Zv
clN0eWxlc2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxl
c2hlZXRzOyB9CiAgICAgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygp
OwogICAgIGJvb2wgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yUGFyc2luZygpOwpAQCAtNjgsNyAr
NjgsNiBAQCBjbGFzcyBIVE1MU2NyaXB0UnVubmVyIHsKIAogICAgIHZvaWQgcmVxdWVzdFBhcnNp
bmdCbG9ja2luZ1NjcmlwdChFbGVtZW50Kik7CiAgICAgdm9pZCByZXF1ZXN0RGVmZXJyZWRTY3Jp
cHQoRWxlbWVudCopOwotICAgIGJvb2wgcmVxdWVzdFBlbmRpbmdTY3JpcHQoUGVuZGluZ1Njcmlw
dCYsIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZvaWQgcnVuU2NyaXB0KEVsZW1lbnQqLCBjb25z
dCBUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCkBAIC04MCw4ICs3OSw4IEBA
IGNsYXNzIEhUTUxTY3JpcHRSdW5uZXIgewogCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAg
ICAgSFRNTFNjcmlwdFJ1bm5lckhvc3QmIG1faG9zdDsKLSAgICBQZW5kaW5nU2NyaXB0IG1fcGFy
c2VyQmxvY2tpbmdTY3JpcHQ7Ci0gICAgRGVxdWU8UGVuZGluZ1NjcmlwdD4gbV9zY3JpcHRzVG9F
eGVjdXRlQWZ0ZXJQYXJzaW5nOyAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFw
cHMvY3VycmVudC13b3JrLyNsaXN0LW9mLXNjcmlwdHMtdGhhdC13aWxsLWV4ZWN1dGUtd2hlbi10
aGUtZG9jdW1lbnQtaGFzLWZpbmlzaGVkLXBhcnNpbmcKKyAgICBSZWZQdHI8UGVuZGluZ1Njcmlw
dD4gbV9wYXJzZXJCbG9ja2luZ1NjcmlwdDsKKyAgICBEZXF1ZTxSZWY8UGVuZGluZ1NjcmlwdD4+
IG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZzsgLy8gaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jbGlzdC1vZi1zY3JpcHRzLXRoYXQtd2lsbC1l
eGVjdXRlLXdoZW4tdGhlLWRvY3VtZW50LWhhcy1maW5pc2hlZC1wYXJzaW5nCiAgICAgdW5zaWdu
ZWQgbV9zY3JpcHROZXN0aW5nTGV2ZWw7CiAKICAgICAvLyBXZSBvbmx5IHdhbnQgc3R5bGVzaGVl
dCBsb2FkcyB0byB0cmlnZ2VyIHNjcmlwdCBleGVjdXRpb24gaWYgc2NyaXB0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVySG9zdC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lckhvc3QuaAppbmRleCAxZjIy
ODk2NTdlMDA0NzZhZjk0MDk3ZjI1MDNlNTI1MmE0YmExYTg1Li44YTYzYmNiMGU5NzhhODQ0NzFh
MzUzYWM3NTczNmYzYzRhY2FiYWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MU2NyaXB0UnVubmVySG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXJIb3N0LmgKQEAgLTMwLDkgKzMwLDkgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBDYWNoZWRSZXNvdXJjZTsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFz
cyBIVE1MSW5wdXRTdHJlYW07CitjbGFzcyBQZW5kaW5nU2NyaXB0OwogY2xhc3MgU2NyaXB0U291
cmNlQ29kZTsKIAogY2xhc3MgSFRNTFNjcmlwdFJ1bm5lckhvc3QgewpAQCAtNDAsOSArNDAsOSBA
QCBjbGFzcyBIVE1MU2NyaXB0UnVubmVySG9zdCB7CiAgICAgdmlydHVhbCB+SFRNTFNjcmlwdFJ1
bm5lckhvc3QoKSB7IH0KIAogICAgIC8vIEltcGxlbWVudG9ycyBzaG91bGQgY2FsbCBjYWNoZWRS
ZXNvdXJjZS0+YWRkQ2xpZW50KCkgaGVyZSBvciBzb29uIGFmdGVyLgotICAgIHZpcnR1YWwgdm9p
ZCB3YXRjaEZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdh
dGNoRm9yTG9hZChQZW5kaW5nU2NyaXB0JikgPSAwOwogICAgIC8vIEltcGxlbWVudG9ycyBtdXN0
IGNhbGwgY2FjaGVkUmVzb3VyY2UtPnJlbW92ZUNsaWVudCgpIGltbWVkaWF0ZWx5LgotICAgIHZp
cnR1YWwgdm9pZCBzdG9wV2F0Y2hpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdG9wV2F0Y2hpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIEhUTUxJbnB1dFN0cmVhbSYgaW5wdXRTdHJlYW0oKSA9IDA7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287470</attachid>
            <date>2016-08-30 18:42:48 -0700</date>
            <delta_ts>2016-08-30 18:53:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161350-20160830184037.patch</filename>
            <type>text/plain</type>
            <size>42058</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1MjE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTFlNjhlODY4M2I0NjU4
NzY0NWVlYjhkNDVkOTk4ZDNmYjZjNTIzYi4uZTAzMGVlNzY0ZGRhY2RmMGQ4ZGQwZjUxZjM3YTM3
YWQ4OWMxOTQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAxNi0wOC0zMCAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBNYWtlIFBlbmRp
bmdTY3JpcHQgYXMgcmVmLWNvdW50ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MTM1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgd2hpbGUgUGVuZGluZ1NjcmlwdCBpcyBjb3B5YWJs
ZSwgUGVuZGluZ1NjcmlwdCBpcyBhbHNvIENhY2hlZFJlc291cmNlQ2xpZW50LgorICAgICAgICBT
byB3aGVuIGNvcHlpbmcgdGhpcywgdGhlIGNsaWVudCByZWdpc3RyYXRpb24gaXMgZG9uZSBpbiBQ
ZW5kaW5nU2NyaXB0J3Mgb3BlcmF0b3I9IGV0Yy4KKyAgICAgICAgSG93ZXZlciwgdGhpcyBjb3B5
aW5nIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGVmZmVjdGl2ZWx5IHVzZWQuCisgICAgICAgIEluIHRo
aXMgcGF0Y2gsIHdlIGNoYW5nZSB0aGlzIFBlbmRpbmdTY3JpcHQgdG8gcmVmLWNvdW50ZWQgY2xh
c3MgYW5kIG1ha2UgaXQgbm9uY29weWFibGUuCisgICAgICAgIFRoaXMgY2hhbmdlIG1ha2VzIHRo
aW5ncyBzaW1wbGUgKGRyb3BwaW5nIHRoaXMgY29weWluZyBmdW5jdGlvbmFsaXR5KSwgYW5kIGRy
b3BzIHVubmVjZXNzYXJ5CisgICAgICAgIGFkZENsaWVudCAvIHJlbW92ZUNsaWVudCBjYWxscy4g
QW5kIHdlIGFsc28gc2ltcGxpZnkgUGVuZGluZ1NjcmlwdCBjbGFzcy4gU2luY2Ugd2UgY2FuIG9m
ZmVyCisgICAgICAgIGFsbCB0aGUgbWVtYmVycyBhdCB0aGUgY29uc3RydWN0aW9uIHRpbWUsIHdl
IGRvIG5vdCBuZWVkIGFueSBzZXR0ZXJzIGxpa2Ugc2V0Q2FjaGVkU2NyaXB0LAorICAgICAgICBz
ZXRFbGVtZW50IGV0Yy4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIGFjY2lkZW50YWxseSBnZW5lcmF0
aW5nIHRoZSBoYWxmLWJha2VkIHBlbmRpbmcgc2NyaXB0LgorCisgICAgICAgIEZ1cnRoZXJtb3Jl
LCBieSBjaGFuZ2luZyBQZW5kaW5nU2NyaXB0IG5vbmNvcHlhYmxlICYgcmVmLWNvdW50ZWQsIHdl
IGVhc2lseSBtYWtlIGl0CisgICAgICAgIG9ic2VydmFibGUuIEluIHRoaXMgcGF0Y2gsIHdlIGFk
ZCBQZW5kaW5nU2NyaXB0Q2xpZW50IHRvIHJlY2VpdmUgdGhlIG5vdGlmaWNhdGlvbiBmcm9tCisg
ICAgICAgIFBlbmRpbmdTY3JpcHQuIFByZXZpb3VzbHksIHdlIGRpcmVjdGx5IHVzZWQgQ2FjaGVk
U2NyaXB0IGluIFBlbmRpbmdTY3JpcHQgdG8gcmVjZWl2ZSB0aGUKKyAgICAgICAgbm90aWZpY2F0
aW9uLiBXaGVuIGludHJvZHVjaW5nIFNjcmlwdE1vZHVsZUdyYXBoIGFuZCBtYWtpbmcgdGhpcyBQ
ZW5kaW5nU2NyaXB0IHRoZSBjb250YWluZXIKKyAgICAgICAgb2YgdGhlIGJvdGggQ2FjaGVkU2Ny
aXB0IGFuZCBTY3JpcHRNb2R1bGVHcmFwaCwgaGlkaW5nIHRoZSByYXcgQ2FjaGVkU2NyaXB0IG9w
ZXJhdGlvbnMgaXMKKyAgICAgICAgdXNlZnVsLgorCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5n
ZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogZG9tL1BlbmRpbmdTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1Nj
cmlwdDo6Y3JlYXRlKTogVGhlc2UgZmFjdG9yeSBmdW5jdGlvbnMgdGFrZSBhbGwgdGhlIGluZm9y
bWF0aW9uIG5lZWRlZAorICAgICAgICB0byBjb25zdHJ1Y3QgdGhlIFBlbmRpbmdTY3JpcHQuIFNv
IHRoZSBzZXR0ZXJzIG9mIFBlbmRpbmdTY3JpcHQgYXJlIGRyb3BwZWQuIFRoaXMgaXMgYmV0dGVy
CisgICAgICAgIHNpbmNlIHdlIG5vdyBkbyBub3QgZXhwb3NlIGFueSBoYWxmLWJha2VkIHBlbmRp
bmcgc2NyaXB0IGFjY2lkZW50YWxseS4KKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6
OlBlbmRpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6flBlbmRp
bmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6bm90aWZ5Q2xpZW50
RmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6bm90aWZ5RmluaXNo
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdDo6aXNMb2FkZWQpOiBXaGVuIGlu
dHJvZHVjaW5nIFNjcmlwdE1vZHVsZUdyYXBoLCB0aGlzIHdpbGwgcXVlcnkgdG8KKyAgICAgICAg
ZWl0aGVyIENhY2hlZFNjcmlwdCBvciBTY3JpcHRNb2R1bGVHcmFwaC4gUGVuZGluZ1NjcmlwdCB3
aWxsIGJlY29tZSB0aGUgY29udGFpbmVyIGZvciB0aGUKKyAgICAgICAgYm90aCB0eXBlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnNldENsaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQZW5kaW5nU2NyaXB0OjpjbGVhckNsaWVudCk6IFBlbmRpbmdTY3JpcHQgaXMgbm93IG9i
c2VydmFibGUgYnkgUGVuZGluZ1NjcmlwdENsaWVudC4KKyAgICAgICAgVGhpcyBhdm9pZHMgdG91
Y2hpbmcgQ2FjaGVkU2NyaXB0IGluIFBlbmRpbmdTY3JpcHQgZGlyZWN0bHkuIFRoYXQgaXMgZ29v
ZCB3aGVuIHdlIGludHJvZHVjZQorICAgICAgICBTY3JpcHRNb2R1bGVHcmFwaCBhbmQgbWFrZSBQ
ZW5kaW5nU2NyaXB0IHRoZSBjb250YWluZXIgb2YgdGhlIGJvdGggQ2FjaGVkU2NyaXB0IGFuZCBT
Y3JpcHRNb2R1bGVHcmFwaC4KKyAgICAgICAgKFdlYkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnJlbGVh
c2VFbGVtZW50QW5kQ2xlYXIpOiBEZWxldGVkLiBQcmV2aW91c2x5LCBQZW5kaW5nU2NyaXB0IGlz
IG5vdCByZWYtY291bnRlZC4KKyAgICAgICAgU28gd2hlbiB3ZSB3b3VsZCBsaWtlIHRvIHNheSAi
dGhpcyBwZW5kaW5nIHNjcmlwdCBpcyBlbXB0eSIsIHdlIHVzZWQgdGhlIHBlbmRpbmcgc2NyaXB0
IHdpdGgKKyAgICAgICAgYG1fZWxlbWVudCA9IG51bGxwdHJgLiBUaGlzIHJlbGVhc2VFbGVtZW50
QW5kQ2xlYXIgY2xlYXJlZCB0aGlzIG1fZWxlbWVudCBhbmQgbWFkZSB0aGUgcGVuZGluZworICAg
ICAgICBzY3JpcHQgZW1wdHkuIE5vdywgd2UgdXNlIFJlZlB0cjxQZW5kaW5nU2NyaXB0PiBhbmQg
ZW1wdHkgb25lIGlzIGp1c3QgcmVwcmVzZW50ZWQgYnkgdGhlIG51bGxwdHIuCisgICAgICAgIFRo
aXMgZnVuY3Rpb24gaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4gRHJvcHBlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBlbmRpbmdTY3JpcHQ6OnNldENhY2hlZFNjcmlwdCk6IERlbGV0ZWQuIFRoZSBmaWVs
ZHMgYXJlIHNldCBpbiB0aGUgY29uc3RydWN0b3IuCisgICAgICAgIFNvIHRoaXMgc2V0dGVyIGlz
IG5vIGxvbmdlciBuZWNlc3NhcnkuIERyb3BwZWQuCisgICAgICAgICogZG9tL1BlbmRpbmdTY3Jp
cHQuaDoKKyAgICAgICAgKiBkb20vUGVuZGluZ1NjcmlwdENsaWVudC5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVySG9zdC5oLgorICAgICAg
ICAoV2ViQ29yZTo6UGVuZGluZ1NjcmlwdENsaWVudDo6flBlbmRpbmdTY3JpcHRDbGllbnQpOgor
ICAgICAgICAqIGRvbS9TY3JpcHRSdW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
UnVubmVyOjpxdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRSdW5uZXI6Om5vdGlmeVNjcmlwdFJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFJ1
bm5lcjo6dGltZXJGaXJlZCk6IFdlIHVzZSBgc3RkOjpleGNoYW5nZWAgdG8gcmV0cmlldmUgdGhl
IFJlZlB0cjxQZW5kaW5nU2NyaXB0PgorICAgICAgICBhbmQgbWFrZSB0aGUgb3JpZ2luYWwgdmVj
dG9yIGVsZW1lbnQgbnVsbHB0ci4gV2l0aG91dCB0aGlzLCBhbGwgdGhlIFBlbmRpbmdTY3JpcHQg
aXMgaGVsZCB1bnRpbAorICAgICAgICB0aGUgaXRlcmF0aW9uIGZpbmlzaGVzLiBXZSBrZWVwIHRo
ZSBvcmlnaW5hbCBzZW1hbnRpY3MgaGVyZSB0aGF0IHRoZSBwZW5kaW5nIHNjcmlwdCBjYW4gYmUK
KyAgICAgICAgcmVsZWFzZWQgcGVyIGl0ZXJhdGlvbi4KKyAgICAgICAgKiBkb20vU2NyaXB0UnVu
bmVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6d2F0Y2hGb3JMb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6c3RvcFdhdGNoaW5nRm9yTG9hZCk6IFVz
ZSBQZW5kaW5nU2NyaXB0IGluc3RlYWQgb2YgdG91Y2hpbmcKKyAgICAgICAgQ2FjaGVkU2NyaXB0
IGRpcmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlG
aW5pc2hlZCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2NyaXB0UnVubmVyOjp+SFRNTFNjcmlwdFJ1bm5lcik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2NyaXB0UnVubmVyOjpzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjppc1BlbmRpbmdTY3JpcHRSZWFkeSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2Ny
aXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5kaW5n
U2NyaXB0QW5kRGlzcGF0Y2hFdmVudCk6IEFzIHRoZSBwcmV2aW91cyBjb21tZW50IGRlc2NyaWJl
cywKKyAgICAgICAgd2UgdXNlZCByZWxlYXNlRWxlbWVudEFuZENsZWFyIHRvIG1ha2UgdGhlIGN1
cnJlbnQgcGVuZGluZyBzY3JpcHQgZW1wdHkuIEluc3RlYWQgb2YgZG9pbmcgc28sIHdlIG5vdwor
ICAgICAgICBleHBsaWNpdGx5IGNsZWFyIGV4ZWN1dGVQYXJzaW5nQmxvY2tpbmdTY3JpcHQgKGJ5
IGFzc2lnbmluZyBudWxscHRyIHRvIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6d2F0Y2hGb3JMb2FkKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTY3JpcHRSdW5uZXI6OnN0b3BXYXRjaGluZ0ZvckxvYWQpOiBQcmV2aW91c2x5LCB3
ZSB1c2VkIENhY2hlZFNjcmlwdDo6YWRkQ2xpZW50IGRpcmVjdGx5CisgICAgICAgIGluIHRoZSBt
X2hvc3Qud2F0Y2hGb3JMb2FkLiBUaGlzIG1lYW5zIHRoYXQgd2UgZGlkIG5vdCBoYXZlIGEgcXVp
Y2sgd2F5IHRvIHF1ZXJ5IHdoZXRoZXIgdGhlIHBlbmRpbmcKKyAgICAgICAgc2NyaXB0IGlzIHdh
dGNoZWQuIEluIHRoZSBvbGQgaW1wbGVtZW50YXRpb24sIHdlIGhhdmUgdGhlIGBtX3dhdGNoaW5n
Rm9yTG9hZCA6IGJvb2xgIGZsYWcgaW4gUGVuZGluZ1NjcmlwdAorICAgICAgICB0byBob2xkIHRo
ZSB3YXRjaGluZyBzdGF0dXMgZm9yIHRoZSBnaXZlbiBwZW5kaW5nIHNjcmlwdC4gVGhpcyBgcGVu
ZGluZ1NjcmlwdC5zZXRXYXRjaGluZ0ZvckxvYWQodHJ1ZSlgCisgICAgICAgIGp1c3QgbWFkZSB0
aGlzIGZsYWcgYHRydWVgLiBCdXQgbm93LCB3ZSBkbyBub3QgdXNlIENhY2hlZFNjcmlwdDo6YWRk
Q2xpZW50IGRpcmVjdGx5LiBJbnN0ZWFkLCB3ZSBoYXZlCisgICAgICAgIHRoZSBQZW5kaW5nU2Ny
aXB0Q2xpZW50IGFuZCBQZW5kaW5nU2NyaXB0Ojp7c2V0Q2xpZW50LGNsZWFyQ2xpZW50fS4gV2Ug
Y2FuIGtub3cgd2hldGhlciB0aGlzIHBlbmRpbmcKKyAgICAgICAgc2NyaXB0IGlzIHdhdGNoZWQg
YnkgY2hlY2tpbmcgYG1fY2xpZW50ICE9IG51bGxwdHJgLiBUaGlzIG1ha2VzIGBtX3dhdGNoaW5n
Rm9yTG9hZGAgdW5uZWNlc3NhcnkuCisgICAgICAgIFNvIHRoaXMgcGF0Y2ggZHJvcHMgYG1fd2F0
Y2hpbmdGb3JMb2FkYCBhbmQgYHBlbmRpbmdTY3JpcHQuc2V0V2F0Y2hpbmdGb3JMb2FkKHRydWUp
YCBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6aGFzUGFyc2VyQmxv
Y2tpbmdTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6ZXhlY3V0
ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdHMpOiBXZSBjbGVhciB0aGUgbV9wYXJzZXJCbG9ja2luZ1Nj
cmlwdCBoZXJlCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG1pZGRsZSBvZiB0aGUgZXhlY3V0ZVBl
bmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlw
dFJ1bm5lcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JQYXJzaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQpOiBTZXR0aW5n
IG1fcGFyc2luZ0Jsb2NraW5nU2NyaXB0IGlzIG5vdyBkb25lCisgICAgICAgIGluIHRoaXMgY2Fs
bGVyIHNpZGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0UnVubmVyOjpyZXF1ZXN0RGVm
ZXJyZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdFJ1bm5lcjo6cnVuU2Ny
aXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5n
U2NyaXB0KTogSW5zdGVhZCBvZiBjb25maWd1cmluZyB0aGUgcGFzc2VkIFBlbmRpbmdTY3JpcHQm
LAorICAgICAgICB3ZSByZXR1cm4gdGhlIHBlbmRpbmcgc2NyaXB0IGFuZCB0aGUgY2FsbGVyIHNl
dHMgaXQgdG8gbV9wYXJzZXJCbG9ja2luZ1NjcmlwdCBvciBob2xkcyBpdC4gQW5kIHdlIG5vdwor
ICAgICAgICBjaGFuZ2UgdGhpcyBmdW5jdGlvbiB0byBzdGF0aWMgbG9jYXRpb24gb25lIGFuZCBk
cm9wIHRoZSBtZW1iZXIgZnVuY3Rpb24uIFByZXZpb3VzbHksIHdlIGFsd2F5cyBtYWtlCisgICAg
ICAgIFBlbmRpbmdTY3JpcHQmIHZhbGlkIGJ5IGFsd2F5cyBjYWxsaW5nIGBzZXRFbGVtZW50KC4u
LilgLiBJIHRoaW5rIHRoaXMgaXMgdGhlIGJ1ZyBzaW5jZSB3ZSBhY2NpZGVudGFsbHkKKyAgICAg
ICAgZXhwb3NlZCB0aGUgaGFsZi1iYWtlZCBwZW5kaW5nIHNjcmlwdC4gQnV0IHRoaXMgYnVnIGlz
IG5vdCBzaG93biBzaW5jZSBgIWNhY2hlZFNjcmlwdGAgcGF0aCBpcyBkZWFkIGNvZGUhCisgICAg
ICAgIFRoaXMgcmVxdWVzdFBlbmRpbmdTY3JpcHQgaXMgY2FsbGVkIGZyb20gdHdvIHBsYWNlcywg
cmVxdWVzdERlZmVycmVkU2NyaXB0IGFuZCByZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0Lgor
ICAgICAgICBBbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaWYgdGhlIHNjcmlwdCBoYXMg
YHdpbGxCZVBhcnNlckV4ZWN1dGVkYCBmbGFnLiBJbiB0aGUgY2FzZSBvZiB0aGUgc2NyaXB0Cisg
ICAgICAgIHRhZyBoYXZpbmcgInNyYyIgYXR0cmlidXRlLCB0aGlzIGZsYWcgaXMgb25seSBzZXQg
aWYgYGNhY2hlZFNjcmlwdGAgaXMgY29ycmVjdGx5IGluc3RhbnRpYXRlZC4gU28gd2hlbgorICAg
ICAgICB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgd2UgY2FuIGVuc3VyZSB0aGF0IGBjYWNo
ZWRTY3JpcHRgIGlzIGNvcnJlY3RseSBpbnN0YW50aWF0ZWQgZm9yIHRoZSBnaXZlbiBzY3JpcHQu
CisgICAgICAgIEluIHRoZSBjYXNlIG9mIHRoZSBzY3JpcHQgdGFnIG5vdCBoYXZpbmcgInNyYyIg
YXR0cmlidXRlLCB0aGVzZSBmdW5jdGlvbnMgYXJlIHdvbid0IGJlIGNhbGxlZC4gVGhpcyBpcwor
ICAgICAgICBiZWNhdXNlIGlmIHN1Y2ggYSBzY3JpcHQgdGFnIGhhcyBgd2lsbEJlUGFyc2VyRXhl
Y3V0ZWRgIGZsYWcsIGl0IGFsc28gaGFzIGBtX3JlYWR5VG9CZVBhcnNlckV4ZWN1dGVkYAorICAg
ICAgICBhbmQgaXQgZG9lcyBub3QgaGF2ZSBgbV93aWxsRXhlY3V0ZVdoZW5Eb2N1bWVudEZpbmlz
aGVkUGFyc2luZ2AgZmxhZywgYW5kIGluIHRoYXQgY2FzZSB0aGUgYm90aAorICAgICAgICBmdW5j
dGlvbnMgYXJlIG5ldmVyIGNhbGxlZC4gU28gd2UgZHJvcCB0aGF0IHBhdGggYW5kIGluc2VydCB0
aGUgYXNzZXJ0aW9uIHRvIGVuc3VyZSB0aGUgYWJvdmUgY29uZGl0aW9ucy4KKyAgICAgICAgKiBo
dG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRN
TFNjcmlwdFJ1bm5lckhvc3QuaDoKKwogMjAxNi0wOC0zMCAgUmlja3kgTW9uZGVsbG8gIDxybW9u
ZGVsbG9AYXBwbGUuY29tPgogCiAgICAgICAgICJwbHVnaW5SZXBsYWNlbWVudEVuYWJsZWQiIHNo
b3VsZCBiZSBhIFNldHRpbmcsIG5vdCBhIFJ1bnRpbWVFbmFibGVkRmVhdHVyZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDcwZjE0
MWYyNTk3MjA1MTA4ZmQ4NzgwY2Y3MzhkOGRkODJkZDM2MmEuLmNkMmFkZGIwMWM5MDM0NzE5YzE3
M2U2OWVmY2E3ZjlmYjBlOWE2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYwOTEsNiArNjA5MSw3IEBACiAJCUUxRkY4RjZE
MTgwREI1QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhGNkIxODBEQjVCRTAwMTMy
Njc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmggKi87IH07CiAJCUUzODgzODk4MUJBRDE0
NUYwMEQ2MkVFMyAvKiBKU01vZHVsZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzg4Mzg5NDFCQUQxNDVGMDBENjJFRTMgLyogSlNNb2R1
bGVMb2FkZXIuY3BwICovOyB9OwogCQlFMzg4Mzg5OTFCQUQxNDVGMDBENjJFRTMgLyogSlNNb2R1
bGVMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzODgzODk1MUJBRDE0NUYwMEQ2MkVFMyAvKiBKU01vZHVsZUxvYWRlci5oICovOyB9OworCQlF
M0ZBMzg2NDFENzE4MTJEMDBBQTU5NTAgLyogUGVuZGluZ1NjcmlwdENsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTNGQTM4NjExRDcxNkU3NjAw
QUE1OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGllbnQuaCAqLzsgfTsKIAkJRTQwMUMyNzUxN0NFNTNF
QzAwQzQxQTM1IC8qIEVsZW1lbnRJdGVyYXRvckFzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MDFDMjc0MTdDRTUzRUMwMEM0MUEzNSAv
KiBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQwMUUwQTQxQzNDMEI4MzAwRjM0RDEwIC8qIFN0eWxl
Q2hhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDAxRTBBMzFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDAxRTBBNjFDM0MwQ0Y3MDBGMzRE
MTAgLyogU3R5bGVDaGFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQwMUUwQTUxQzNDMENGNzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmNwcCAq
LzsgfTsKQEAgLTEzNjU3LDYgKzEzNjU4LDcgQEAKIAkJRTFGRjhGNkIxODBEQjVCRTAwMTMyNjc0
IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUzODgzODk0MUJBRDE0NUYwMEQ2MkVFMyAvKiBKU01vZHVsZUxvYWRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01vZHVsZUxvYWRlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzODgzODk1MUJBRDE0NUYwMEQ2MkVFMyAvKiBK
U01vZHVsZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01vZHVs
ZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFM0ZBMzg2MTFENzE2RTc2
MDBBQTU5NTAgLyogUGVuZGluZ1NjcmlwdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQZW5kaW5nU2NyaXB0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0MDFDMjc0MTdDRTUzRUMwMEM0MUEzNSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRJdGVyYXRvckFz
c2VydGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQwMUUwQTMxQzNDMEI4
MzAwRjM0RDEwIC8qIFN0eWxlQ2hhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0eWxlQ2hhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MDFFMEE1
MUMzQzBDRjcwMEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTdHlsZUNoYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMzA4MCw2ICsyMzA4Miw3IEBACiAJCQkJODNEMjZEM0QxQUZEQ0M1MDAwMUIzODcz
IC8qIFBhcmVudE5vZGUuaWRsICovLAogCQkJCThBN0NDOTZGMTIwNzZGOEEwMDFENDU4OCAvKiBQ
ZW5kaW5nU2NyaXB0LmNwcCAqLywKIAkJCQk4QTdDQzk2QTEyMDc2RDczMDAxRDQ1ODggLyogUGVu
ZGluZ1NjcmlwdC5oICovLAorCQkJCUUzRkEzODYxMUQ3MTZFNzYwMEFBNTk1MCAvKiBQZW5kaW5n
U2NyaXB0Q2xpZW50LmggKi8sCiAJCQkJNDFCRjcwMEQwRkU4NkY2MTAwNUU4REVDIC8qIFBsYXRm
b3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcCAqLywKIAkJCQk0MUJGNzAwRTBGRTg2RjYxMDA1RThE
RUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCAqLywKIAkJCQk1MTg5RjBERDEwQjQ2
QjBFMDBGM0M3MzkgLyogUG9wU3RhdGVFdmVudC5jcHAgKi8sCkBAIC0yNzA1Niw2ICsyNzA1OSw3
IEBACiAJCQkJNTlDMjgwNDYxMzhEQzI0MTAwNzlCN0UyIC8qIFhNTEVycm9ycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM3NzJDNDcwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4M0QzNUFFQzFDNzE4N0ZBMDBGNzBENUEgLyogWE1MSHR0cFJl
cXVlc3RFdmVudFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTNGQTM4NjQxRDcxODEyRDAw
QUE1OTUwIC8qIFBlbmRpbmdTY3JpcHRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY5RjBF
RDdBMERCNTBDQTIwMEQxNkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExMzZBMDBEMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERkQ0OEUwRTMw
NTI5MDAwOUQxMEFEIC8qIFhNTEh0dHBSZXF1ZXN0VXBsb2FkLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmNwcAppbmRleCA3OGZmM2Q4NmYxNTQ5ZTJlMTc4NWYx
MmVjYzM5MjY5MDMxMTI1ODg2Li43MWJkYjJkODNlZjNjNjhlMWI1YmY3OTMxY2NmNzY4N2JiOThh
NTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuY3BwCkBAIC0yOCwzMiArMjgsMzgg
QEAKIAogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJQZW5kaW5nU2NyaXB0Q2xpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UGVuZGluZ1NjcmlwdDo6flBlbmRpbmdTY3JpcHQoKQorUmVmPFBlbmRpbmdTY3JpcHQ+IFBlbmRp
bmdTY3JpcHQ6OmNyZWF0ZShFbGVtZW50JiBlbGVtZW50LCBDYWNoZWRTY3JpcHQmIGNhY2hlZFNj
cmlwdCkKIHsKLSAgICBpZiAobV9jYWNoZWRTY3JpcHQpCi0gICAgICAgIG1fY2FjaGVkU2NyaXB0
LT5yZW1vdmVDbGllbnQodGhpcyk7CisgICAgUmVmPFBlbmRpbmdTY3JpcHQ+IHBlbmRpbmdTY3Jp
cHQgPSBhZG9wdFJlZigqbmV3IFBlbmRpbmdTY3JpcHQoZWxlbWVudCwgY2FjaGVkU2NyaXB0KSk7
CisgICAgY2FjaGVkU2NyaXB0LmFkZENsaWVudCgmcGVuZGluZ1NjcmlwdC5nZXQoKSk7CisgICAg
cmV0dXJuIHBlbmRpbmdTY3JpcHQ7Cit9CisKK1JlZjxQZW5kaW5nU2NyaXB0PiBQZW5kaW5nU2Ny
aXB0OjpjcmVhdGUoRWxlbWVudCYgZWxlbWVudCwgVGV4dFBvc2l0aW9uIHNjcmlwdFN0YXJ0UG9z
aXRpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGVuZGluZ1NjcmlwdChlbGVtZW50
LCBzY3JpcHRTdGFydFBvc2l0aW9uKSk7CiB9CiAKLVJlZlB0cjxFbGVtZW50PiBQZW5kaW5nU2Ny
aXB0OjpyZWxlYXNlRWxlbWVudEFuZENsZWFyKCkKK1BlbmRpbmdTY3JpcHQ6OlBlbmRpbmdTY3Jp
cHQoRWxlbWVudCYgZWxlbWVudCwgVGV4dFBvc2l0aW9uIHN0YXJ0aW5nUG9zaXRpb24pCisgICAg
OiBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fc3RhcnRpbmdQb3NpdGlvbihzdGFydGluZ1Bv
c2l0aW9uKQogewotICAgIHNldENhY2hlZFNjcmlwdChudWxscHRyKTsKLSAgICBtX3dhdGNoaW5n
Rm9yTG9hZCA9IGZhbHNlOwotICAgIG1fc3RhcnRpbmdQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6
YmVsb3dSYW5nZVBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIFdURk1vdmUobV9lbGVtZW50KTsKIH0K
IAotdm9pZCBQZW5kaW5nU2NyaXB0OjpzZXRDYWNoZWRTY3JpcHQoQ2FjaGVkU2NyaXB0KiBjYWNo
ZWRTY3JpcHQpCitQZW5kaW5nU2NyaXB0OjpQZW5kaW5nU2NyaXB0KEVsZW1lbnQmIGVsZW1lbnQs
IENhY2hlZFNjcmlwdCYgY2FjaGVkU2NyaXB0KQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisg
ICAgLCBtX2NhY2hlZFNjcmlwdCgmY2FjaGVkU2NyaXB0KQoreworfQorCitQZW5kaW5nU2NyaXB0
Ojp+UGVuZGluZ1NjcmlwdCgpCiB7Ci0gICAgaWYgKG1fY2FjaGVkU2NyaXB0ID09IGNhY2hlZFNj
cmlwdCkKLSAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2NhY2hlZFNjcmlwdCkKICAgICAgICAg
bV9jYWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKLSAgICBtX2NhY2hlZFNjcmlwdCA9
IGNhY2hlZFNjcmlwdDsKLSAgICBpZiAobV9jYWNoZWRTY3JpcHQpCi0gICAgICAgIG1fY2FjaGVk
U2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CiB9CiAKIENhY2hlZFNjcmlwdCogUGVuZGluZ1Njcmlw
dDo6Y2FjaGVkU2NyaXB0KCkgY29uc3QKQEAgLTYxLDggKzY3LDM1IEBAIENhY2hlZFNjcmlwdCog
UGVuZGluZ1NjcmlwdDo6Y2FjaGVkU2NyaXB0KCkgY29uc3QKICAgICByZXR1cm4gbV9jYWNoZWRT
Y3JpcHQuZ2V0KCk7CiB9CiAKK3ZvaWQgUGVuZGluZ1NjcmlwdDo6bm90aWZ5Q2xpZW50RmluaXNo
ZWQoKQoreworICAgIFJlZjxQZW5kaW5nU2NyaXB0PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5ub3RpZnlGaW5pc2hlZCgqdGhpcyk7
Cit9CisKIHZvaWQgUGVuZGluZ1NjcmlwdDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2Uq
KQogeworICAgIG5vdGlmeUNsaWVudEZpbmlzaGVkKCk7Cit9CisKK2Jvb2wgUGVuZGluZ1Njcmlw
dDo6aXNMb2FkZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2NhY2hlZFNjcmlwdCAmJiBtX2Nh
Y2hlZFNjcmlwdC0+aXNMb2FkZWQoKTsKK30KKwordm9pZCBQZW5kaW5nU2NyaXB0OjpzZXRDbGll
bnQoUGVuZGluZ1NjcmlwdENsaWVudCogY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQp
OworICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIGlmIChpc0xvYWRlZCgpKQorICAgICAgICBu
b3RpZnlDbGllbnRGaW5pc2hlZCgpOworfQorCit2b2lkIFBlbmRpbmdTY3JpcHQ6OmNsZWFyQ2xp
ZW50KCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50ID0gbnVsbHB0cjsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9QZW5kaW5nU2NyaXB0LmgKaW5kZXggNmY0YWZlMzVlMjcwMDI1
NDYzNjE5NTcwYmMxZWE3YzFjYjQ3ZjQyYS4uMDdiMmYzNWU2NTNhM2QzZDg4YmFlZDRhZTA1NjYy
YWY4ZDQ0NzgyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1BlbmRpbmdTY3JpcHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdC5oCkBAIC0yMyw4NSArMjMs
NjAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUGVuZGluZ1NjcmlwdF9oCi0j
ZGVmaW5lIFBlbmRpbmdTY3JpcHRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5j
bHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFNjcmlwdDsKIGNsYXNzIEVsZW1lbnQ7Citj
bGFzcyBQZW5kaW5nU2NyaXB0Q2xpZW50OwogCiAvLyBBIGNvbnRhaW5lciBmb3IgYW4gZXh0ZXJu
YWwgc2NyaXB0IHdoaWNoIG1heSBiZSBsb2FkZWQgYW5kIGV4ZWN1dGVkLgogLy8KIC8vIEEgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUgYWxvbmUgZG9lcyBub3QgcHJldmVudCB0aGUgdW5kZXJseWluZyBD
YWNoZWRSZXNvdXJjZQogLy8gZnJvbSBwdXJnaW5nIGl0cyBkYXRhIGJ1ZmZlci4gVGhpcyBjbGFz
cyBob2xkcyBhIGR1bW15IGNsaWVudCBvcGVuIGZvciBpdHMKIC8vIGxpZmV0aW1lIGluIG9yZGVy
IHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBkYXRhIGJ1ZmZlciB3aWxsIG5vdCBiZSBwdXJnZWQuCi1j
bGFzcyBQZW5kaW5nU2NyaXB0IGZpbmFsIDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsK
K2NsYXNzIFBlbmRpbmdTY3JpcHQgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nU2Ny
aXB0PiwgcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBQZW5kaW5n
U2NyaXB0KCkKLSAgICAgICAgOiBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkKLSAgICAgICAgLCBt
X3N0YXJ0aW5nUG9zaXRpb24oVGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgUGVuZGluZ1NjcmlwdChFbGVtZW50KiBlbGVtZW50LCBDYWNoZWRT
Y3JpcHQqIGNhY2hlZFNjcmlwdCkKLSAgICAgICAgOiBtX3dhdGNoaW5nRm9yTG9hZChmYWxzZSkK
LSAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHNldENhY2hlZFNj
cmlwdChjYWNoZWRTY3JpcHQpOwotICAgIH0KLQotICAgIFBlbmRpbmdTY3JpcHQoY29uc3QgUGVu
ZGluZ1NjcmlwdCYgb3RoZXIpCi0gICAgICAgIDogQ2FjaGVkUmVzb3VyY2VDbGllbnQob3RoZXIp
Ci0gICAgICAgICwgbV93YXRjaGluZ0ZvckxvYWQob3RoZXIubV93YXRjaGluZ0ZvckxvYWQpCi0g
ICAgICAgICwgbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKLSAgICAgICAgLCBtX3N0YXJ0aW5n
UG9zaXRpb24ob3RoZXIubV9zdGFydGluZ1Bvc2l0aW9uKQotICAgIHsKLSAgICAgICAgc2V0Q2Fj
aGVkU2NyaXB0KG90aGVyLmNhY2hlZFNjcmlwdCgpKTsKLSAgICB9CisgICAgc3RhdGljIFJlZjxQ
ZW5kaW5nU2NyaXB0PiBjcmVhdGUoRWxlbWVudCYsIENhY2hlZFNjcmlwdCYpOworICAgIHN0YXRp
YyBSZWY8UGVuZGluZ1NjcmlwdD4gY3JlYXRlKEVsZW1lbnQmLCBUZXh0UG9zaXRpb24gc2NyaXB0
U3RhcnRQb3NpdGlvbik7CiAKICAgICB2aXJ0dWFsIH5QZW5kaW5nU2NyaXB0KCk7CiAKLSAgICBQ
ZW5kaW5nU2NyaXB0JiBvcGVyYXRvcj0oY29uc3QgUGVuZGluZ1NjcmlwdCYgb3RoZXIpCi0gICAg
ewotICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7
Ci0KLSAgICAgICAgbV93YXRjaGluZ0ZvckxvYWQgPSBvdGhlci5tX3dhdGNoaW5nRm9yTG9hZDsK
LSAgICAgICAgbV9lbGVtZW50ID0gb3RoZXIubV9lbGVtZW50OwotICAgICAgICBtX3N0YXJ0aW5n
UG9zaXRpb24gPSBvdGhlci5tX3N0YXJ0aW5nUG9zaXRpb247Ci0gICAgICAgIHNldENhY2hlZFNj
cmlwdChvdGhlci5jYWNoZWRTY3JpcHQoKSk7Ci0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
IH0KLQogICAgIFRleHRQb3NpdGlvbiBzdGFydGluZ1Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydGluZ1Bvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTdGFydGluZ1Bvc2l0aW9uKGNvbnN0
IFRleHRQb3NpdGlvbiYgcG9zaXRpb24pIHsgbV9zdGFydGluZ1Bvc2l0aW9uID0gcG9zaXRpb247
IH0KIAotICAgIGJvb2wgd2F0Y2hpbmdGb3JMb2FkKCkgY29uc3QgeyByZXR1cm4gbV93YXRjaGlu
Z0ZvckxvYWQ7IH0KLSAgICB2b2lkIHNldFdhdGNoaW5nRm9yTG9hZChib29sIGIpIHsgbV93YXRj
aGluZ0ZvckxvYWQgPSBiOyB9CisgICAgYm9vbCB3YXRjaGluZ0ZvckxvYWQoKSBjb25zdCB7IHJl
dHVybiBuZWVkc0xvYWRpbmcoKSAmJiBtX2NsaWVudDsgfQogCi0gICAgRWxlbWVudCogZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQotICAgIHZvaWQgc2V0RWxlbWVu
dChFbGVtZW50KiBlbGVtZW50KSB7IG1fZWxlbWVudCA9IGVsZW1lbnQ7IH0KLSAgICBSZWZQdHI8
RWxlbWVudD4gcmVsZWFzZUVsZW1lbnRBbmRDbGVhcigpOworICAgIEVsZW1lbnQmIGVsZW1lbnQo
KSB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KKyAgICBjb25zdCBFbGVtZW50JiBlbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9CiAKICAgICBDYWNoZWRTY3JpcHQq
IGNhY2hlZFNjcmlwdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2FjaGVkU2NyaXB0KENhY2hlZFNj
cmlwdCopOworICAgIGJvb2wgbmVlZHNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gY2FjaGVkU2Ny
aXB0KCk7IH0KKworICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdDsKIAogICAgIHZvaWQgbm90aWZ5
RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSBvdmVycmlkZTsKIAorICAgIHZvaWQgc2V0Q2xpZW50
KFBlbmRpbmdTY3JpcHRDbGllbnQqKTsKKyAgICB2b2lkIGNsZWFyQ2xpZW50KCk7CisKIHByaXZh
dGU6Ci0gICAgYm9vbCBtX3dhdGNoaW5nRm9yTG9hZDsKLSAgICBSZWZQdHI8RWxlbWVudD4gbV9l
bGVtZW50OworICAgIFBlbmRpbmdTY3JpcHQoRWxlbWVudCYsIENhY2hlZFNjcmlwdCYpOworICAg
IFBlbmRpbmdTY3JpcHQoRWxlbWVudCYsIFRleHRQb3NpdGlvbiBzdGFydGluZ1Bvc2l0aW9uKTsK
KworICAgIHZvaWQgbm90aWZ5Q2xpZW50RmluaXNoZWQoKTsKKworICAgIFJlZjxFbGVtZW50PiBt
X2VsZW1lbnQ7CiAgICAgVGV4dFBvc2l0aW9uIG1fc3RhcnRpbmdQb3NpdGlvbjsgLy8gT25seSB1
c2VkIGZvciBpbmxpbmUgc2NyaXB0IHRhZ3MuCi0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsgCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKKyAgICBQZW5kaW5nU2NyaXB0Q2xpZW50KiBtX2Ns
aWVudCB7IG51bGxwdHIgfTsKIH07CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUGVuZGluZ1NjcmlwdENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bl
bmRpbmdTY3JpcHRDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTY0NDRhOGUzODAwYWJiYjA0ZGQzNDlm
YTc2NjE0NTA2ZDE1ZjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bl
bmRpbmdTY3JpcHRDbGllbnQuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFBlbmRpbmdTY3JpcHQ7CisKK2NsYXNzIFBlbmRpbmdTY3JpcHRDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflBlbmRpbmdTY3JpcHRDbGllbnQoKSB7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChQZW5kaW5nU2NyaXB0JikgPSAwOworfTsK
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcAppbmRleCBkMjYwNWJkZGI3YjViNjJi
OTE0NTM4ZWY2MjYyYWNiN2IzZDUwMDJlLi4xYWNjYmJmZTY0MjE0MTUyZTEyM2MyMjQ4OTcwNWVl
ODI0MjA3ZjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcApAQCAtNjEsMTEgKzYx
LDExIEBAIHZvaWQgU2NyaXB0UnVubmVyOjpxdWV1ZVNjcmlwdEZvckV4ZWN1dGlvbihTY3JpcHRF
bGVtZW50KiBzY3JpcHRFbGVtZW50LCBDYWNoZWRSCiAKICAgICBzd2l0Y2ggKGV4ZWN1dGlvblR5
cGUpIHsKICAgICBjYXNlIEFTWU5DX0VYRUNVVElPTjoKLSAgICAgICAgbV9wZW5kaW5nQXN5bmNT
Y3JpcHRzLmFkZChzY3JpcHRFbGVtZW50LCBQZW5kaW5nU2NyaXB0KCZlbGVtZW50LCBjYWNoZWRT
Y3JpcHQuZ2V0KCkpKTsKKyAgICAgICAgbV9wZW5kaW5nQXN5bmNTY3JpcHRzLmFkZChzY3JpcHRF
bGVtZW50LCBQZW5kaW5nU2NyaXB0OjpjcmVhdGUoZWxlbWVudCwgKmNhY2hlZFNjcmlwdCkpOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgSU5fT1JERVJfRVhFQ1VUSU9OOgotICAgICAgICBt
X3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLmFwcGVuZChQZW5kaW5nU2NyaXB0KCZlbGVtZW50LCBj
YWNoZWRTY3JpcHQuZ2V0KCkpKTsKKyAgICAgICAgbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlci5h
cHBlbmQoUGVuZGluZ1NjcmlwdDo6Y3JlYXRlKGVsZW1lbnQsICpjYWNoZWRTY3JpcHQpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtODYsNyArODYsNyBAQCB2b2lkIFNjcmlwdFJ1bm5l
cjo6bm90aWZ5U2NyaXB0UmVhZHkoU2NyaXB0RWxlbWVudCogc2NyaXB0RWxlbWVudCwgRXhlY3V0
aW9uVHlwZQogICAgIHN3aXRjaCAoZXhlY3V0aW9uVHlwZSkgewogICAgIGNhc2UgQVNZTkNfRVhF
Q1VUSU9OOgogICAgICAgICBBU1NFUlQobV9wZW5kaW5nQXN5bmNTY3JpcHRzLmNvbnRhaW5zKHNj
cmlwdEVsZW1lbnQpKTsKLSAgICAgICAgbV9zY3JpcHRzVG9FeGVjdXRlU29vbi5hcHBlbmQobV9w
ZW5kaW5nQXN5bmNTY3JpcHRzLnRha2Uoc2NyaXB0RWxlbWVudCkpOworICAgICAgICBtX3Njcmlw
dHNUb0V4ZWN1dGVTb29uLmFwcGVuZCgmbV9wZW5kaW5nQXN5bmNTY3JpcHRzLnRha2Uoc2NyaXB0
RWxlbWVudCktPmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElOX09SREVSX0VY
RUNVVElPTjoKQEAgLTEwMCwyMyArMTAwLDI0IEBAIHZvaWQgU2NyaXB0UnVubmVyOjp0aW1lckZp
cmVkKCkKIHsKICAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3QobV9kb2N1bWVudCk7CiAKLSAgICBW
ZWN0b3I8UGVuZGluZ1NjcmlwdD4gc2NyaXB0czsKKyAgICBWZWN0b3I8UmVmUHRyPFBlbmRpbmdT
Y3JpcHQ+PiBzY3JpcHRzOwogICAgIHNjcmlwdHMuc3dhcChtX3NjcmlwdHNUb0V4ZWN1dGVTb29u
KTsKIAogICAgIHNpemVfdCBudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZSA9IDA7Ci0gICAgZm9y
ICg7IG51bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlIDwgbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRl
ci5zaXplKCkgJiYgbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlcltudW1Jbk9yZGVyU2NyaXB0c1Rv
RXhlY3V0ZV0uY2FjaGVkU2NyaXB0KCktPmlzTG9hZGVkKCk7ICsrbnVtSW5PcmRlclNjcmlwdHNU
b0V4ZWN1dGUpCi0gICAgICAgIHNjcmlwdHMuYXBwZW5kKG1fc2NyaXB0c1RvRXhlY3V0ZUluT3Jk
ZXJbbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1dGVdKTsKKyAgICBmb3IgKDsgbnVtSW5PcmRlclNj
cmlwdHNUb0V4ZWN1dGUgPCBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVyLnNpemUoKSAmJiBtX3Nj
cmlwdHNUb0V4ZWN1dGVJbk9yZGVyW251bUluT3JkZXJTY3JpcHRzVG9FeGVjdXRlXS0+aXNMb2Fk
ZWQoKTsgKytudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZSkKKyAgICAgICAgc2NyaXB0cy5hcHBl
bmQobV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlcltudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZV0u
cHRyKCkpOwogICAgIGlmIChudW1Jbk9yZGVyU2NyaXB0c1RvRXhlY3V0ZSkKICAgICAgICAgbV9z
Y3JpcHRzVG9FeGVjdXRlSW5PcmRlci5yZW1vdmUoMCwgbnVtSW5PcmRlclNjcmlwdHNUb0V4ZWN1
dGUpOwogCi0gICAgZm9yIChhdXRvJiBzY3JpcHQgOiBzY3JpcHRzKSB7Ci0gICAgICAgIENhY2hl
ZFNjcmlwdCogY2FjaGVkU2NyaXB0ID0gc2NyaXB0LmNhY2hlZFNjcmlwdCgpOwotICAgICAgICBS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IHNjcmlwdC5yZWxlYXNlRWxlbWVudEFuZENsZWFyKCk7
Ci0gICAgICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnRTY3JpcHQg
OiBzY3JpcHRzKSB7CisgICAgICAgIGF1dG8gc2NyaXB0ID0gc3RkOjpleGNoYW5nZShjdXJyZW50
U2NyaXB0LCBudWxscHRyKTsKKyAgICAgICAgQVNTRVJUKHNjcmlwdCk7CiAgICAgICAgIC8vIFBh
cGVyIG92ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDA1MAot
ICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIGlmICghc2NyaXB0KQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoZWxlbWVudC5nZXQo
KSktPmV4ZWN1dGUoY2FjaGVkU2NyaXB0KTsKKyAgICAgICAgYXV0byogc2NyaXB0RWxlbWVudCA9
IHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoJnNjcmlwdC0+ZWxlbWVudCgpKTsKKyAgICAgICAg
QVNTRVJUKHNjcmlwdEVsZW1lbnQpOworICAgICAgICBzY3JpcHRFbGVtZW50LT5leGVjdXRlKHNj
cmlwdC0+Y2FjaGVkU2NyaXB0KCkpOwogICAgICAgICBtX2RvY3VtZW50LmRlY3JlbWVudExvYWRF
dmVudERlbGF5Q291bnQoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0UnVubmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmgKaW5k
ZXggOGNkMzMyYTU3MzRjMWNiOTJmMmE1ZmY1ZmM0Y2NhMTU4ZmUzYmM0MS4uYmE0MTlmYTkwN2Fj
OGVkNWEzMzczOTQ4Mzk1ZWFlZDE4M2Q2YmMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdFJ1bm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIu
aApAQCAtNTYsOSArNTYsOSBAQCBjbGFzcyBTY3JpcHRSdW5uZXIgewogICAgIHZvaWQgdGltZXJG
aXJlZCgpOwogCiAgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7Ci0gICAgVmVjdG9yPFBlbmRpbmdT
Y3JpcHQ+IG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXI7Ci0gICAgVmVjdG9yPFBlbmRpbmdTY3Jp
cHQ+IG1fc2NyaXB0c1RvRXhlY3V0ZVNvb247IC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVj
cy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3NldC1vZi1zY3JpcHRzLXRoYXQtd2lsbC1leGVjdXRl
LWFzLXNvb24tYXMtcG9zc2libGUKLSAgICBIYXNoTWFwPFNjcmlwdEVsZW1lbnQqLCBQZW5kaW5n
U2NyaXB0PiBtX3BlbmRpbmdBc3luY1NjcmlwdHM7CisgICAgVmVjdG9yPFJlZjxQZW5kaW5nU2Ny
aXB0Pj4gbV9zY3JpcHRzVG9FeGVjdXRlSW5PcmRlcjsKKyAgICBWZWN0b3I8UmVmUHRyPFBlbmRp
bmdTY3JpcHQ+PiBtX3NjcmlwdHNUb0V4ZWN1dGVTb29uOyAvLyBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNzZXQtb2Ytc2NyaXB0cy10aGF0LXdpbGwt
ZXhlY3V0ZS1hcy1zb29uLWFzLXBvc3NpYmxlCisgICAgSGFzaE1hcDxTY3JpcHRFbGVtZW50Kiwg
UmVmPFBlbmRpbmdTY3JpcHQ+PiBtX3BlbmRpbmdBc3luY1NjcmlwdHM7CiAgICAgVGltZXIgbV90
aW1lcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1l
bnRQYXJzZXIuY3BwCmluZGV4IDlmNDdhMjRkYzU1NjFkYzI2ODFmMTcwZWE1OWJlZWRhOWFiODcz
NDcuLjlmOGRlZWRkZmY1ZTI0YzVmOTcxODY3ODM2NTQ4MDUzMzAxODk2NjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBh
cnNlci5oIgogCisjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRG
cmFnbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
CkBAIC01MDAsMTggKzUwMSwxOCBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFy
c2luZ0FmdGVyU2NyaXB0RXhlY3V0aW9uKCkKICAgICBlbmRJZkRlbGF5ZWQoKTsKIH0KIAotdm9p
ZCBIVE1MRG9jdW1lbnRQYXJzZXI6OndhdGNoRm9yTG9hZChDYWNoZWRSZXNvdXJjZSogY2FjaGVk
U2NyaXB0KQordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OndhdGNoRm9yTG9hZChQZW5kaW5nU2Ny
aXB0JiBwZW5kaW5nU2NyaXB0KQogewotICAgIEFTU0VSVCghY2FjaGVkU2NyaXB0LT5pc0xvYWRl
ZCgpKTsKLSAgICAvLyBhZGRDbGllbnQgd291bGQgY2FsbCBub3RpZnlGaW5pc2hlZCBpZiB0aGUg
bG9hZCB3ZXJlIGNvbXBsZXRlLgorICAgIEFTU0VSVCghcGVuZGluZ1NjcmlwdC5pc0xvYWRlZCgp
KTsKKyAgICAvLyBzZXRDbGllbnQgd291bGQgY2FsbCBub3RpZnlGaW5pc2hlZCBpZiB0aGUgbG9h
ZCB3ZXJlIGNvbXBsZXRlLgogICAgIC8vIENhbGxlcnMgZG8gbm90IGV4cGVjdCB0byBiZSByZS1l
bnRlcmVkIGZyb20gdGhpcyBjYWxsLCBzbyB0aGV5IHNob3VsZAotICAgIC8vIG5vdCBhbiBhbHJl
YWR5LWxvYWRlZCBDYWNoZWRSZXNvdXJjZS4KLSAgICBjYWNoZWRTY3JpcHQtPmFkZENsaWVudCh0
aGlzKTsKKyAgICAvLyBub3QgYW4gYWxyZWFkeS1sb2FkZWQgUGVuZGluZ1NjcmlwdC4KKyAgICBw
ZW5kaW5nU2NyaXB0LnNldENsaWVudCh0aGlzKTsKIH0KIAotdm9pZCBIVE1MRG9jdW1lbnRQYXJz
ZXI6OnN0b3BXYXRjaGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFNjcmlwdCkKK3Zv
aWQgSFRNTERvY3VtZW50UGFyc2VyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQm
IHBlbmRpbmdTY3JpcHQpCiB7Ci0gICAgY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7
CisgICAgcGVuZGluZ1NjcmlwdC5jbGVhckNsaWVudCgpOwogfQogCiB2b2lkIEhUTUxEb2N1bWVu
dFBhcnNlcjo6YXBwZW5kQ3VycmVudElucHV0U3RyZWFtVG9QcmVsb2FkU2Nhbm5lckFuZFNjYW4o
KQpAQCAtNTIxLDcgKzUyMiw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmRDdXJy
ZW50SW5wdXRTdHJlYW1Ub1ByZWxvYWRTY2FubmVyQW5kU2NhbigpCiAgICAgbV9wcmVsb2FkU2Nh
bm5lci0+c2NhbigqbV9wcmVsb2FkZXIsICpkb2N1bWVudCgpKTsKIH0KIAotdm9pZCBIVE1MRG9j
dW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJj
ZSkKK3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hlZChQZW5kaW5nU2NyaXB0
JiBwZW5kaW5nU2NyaXB0KQogewogICAgIC8vIHB1bXBUb2tlbml6ZXIgY2FuIGNhdXNlIHRoaXMg
cGFyc2VyIHRvIGJlIGRldGFjaGVkIGZyb20gdGhlIERvY3VtZW50LAogICAgIC8vIGJ1dCB3ZSBu
ZWVkIHRvIGVuc3VyZSBpdCBpc24ndCBkZWxldGVkIHlldC4KQEAgLTUzNCw3ICs1MzUsNyBAQCB2
b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIGNh
Y2hlZFJlc291cmNlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zY3JpcHRSdW5u
ZXItPmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQoY2FjaGVkUmVzb3VyY2UpOworICAgIG1f
c2NyaXB0UnVubmVyLT5leGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKHBlbmRpbmdTY3JpcHQp
OwogICAgIGlmICghaXNXYWl0aW5nRm9yU2NyaXB0cygpKQogICAgICAgICByZXN1bWVQYXJzaW5n
QWZ0ZXJTY3JpcHRFeGVjdXRpb24oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggNTExZTFkMzljZGM2MzBmNTEyN2I2ZjI4M2Nj
NjFhNTQ4YTZmMDdiMS4uZTJiZmIzMjY5ZjRjN2FiMjFkNzY0N2EyNTg2YzhlMTlkNmM4M2JiZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgK
QEAgLTI3LDExICsyNywxMSBAQAogI2lmbmRlZiBIVE1MRG9jdW1lbnRQYXJzZXJfaAogI2RlZmlu
ZSBIVE1MRG9jdW1lbnRQYXJzZXJfaAogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQu
aCIKICNpbmNsdWRlICJIVE1MSW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJIVE1MU2NyaXB0UnVu
bmVySG9zdC5oIgogI2luY2x1ZGUgIkhUTUxTb3VyY2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiSFRN
TFRva2VuaXplci5oIgorI2luY2x1ZGUgIlBlbmRpbmdTY3JpcHRDbGllbnQuaCIKICNpbmNsdWRl
ICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJYU1NBdWRpdG9yLmgiCiAj
aW5jbHVkZSAiWFNTQXVkaXRvckRlbGVnYXRlLmgiCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIEhU
TUxUcmVlQnVpbGRlcjsKIGNsYXNzIEhUTUxSZXNvdXJjZVByZWxvYWRlcjsKIGNsYXNzIFB1bXBT
ZXNzaW9uOwogCi1jbGFzcyBIVE1MRG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgU2NyaXB0YWJsZURv
Y3VtZW50UGFyc2VyLCBwcml2YXRlIEhUTUxTY3JpcHRSdW5uZXJIb3N0LCBwcml2YXRlIENhY2hl
ZFJlc291cmNlQ2xpZW50IHsKK2NsYXNzIEhUTUxEb2N1bWVudFBhcnNlciA6IHB1YmxpYyBTY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXIsIHByaXZhdGUgSFRNTFNjcmlwdFJ1bm5lckhvc3QsIHByaXZh
dGUgUGVuZGluZ1NjcmlwdENsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxIVE1MRG9jdW1lbnRQYXJzZXI+IGNyZWF0ZShIVE1MRG9j
dW1lbnQmKTsKQEAgLTkwLDE0ICs5MCwxNCBAQCBjbGFzcyBIVE1MRG9jdW1lbnRQYXJzZXIgOiBw
dWJsaWMgU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBwcml2YXRlIEhUTUxTY3JpcHRSdQogICAg
IGJvb2wgc2hvdWxkQXNzb2NpYXRlQ29uc29sZU1lc3NhZ2VzV2l0aFRleHRQb3NpdGlvbigpIGNv
bnN0IGZpbmFsOwogCiAgICAgLy8gSFRNTFNjcmlwdFJ1bm5lckhvc3QKLSAgICB2b2lkIHdhdGNo
Rm9yTG9hZChDYWNoZWRSZXNvdXJjZSopIGZpbmFsOwotICAgIHZvaWQgc3RvcFdhdGNoaW5nRm9y
TG9hZChDYWNoZWRSZXNvdXJjZSopIGZpbmFsOworICAgIHZvaWQgd2F0Y2hGb3JMb2FkKFBlbmRp
bmdTY3JpcHQmKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BXYXRjaGluZ0ZvckxvYWQoUGVuZGluZ1Nj
cmlwdCYpIGZpbmFsOwogICAgIEhUTUxJbnB1dFN0cmVhbSYgaW5wdXRTdHJlYW0oKSBmaW5hbDsK
ICAgICBib29sIGhhc1ByZWxvYWRTY2FubmVyKCkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBhcHBl
bmRDdXJyZW50SW5wdXRTdHJlYW1Ub1ByZWxvYWRTY2FubmVyQW5kU2NhbigpIGZpbmFsOwogCi0g
ICAgLy8gQ2FjaGVkUmVzb3VyY2VDbGllbnQKLSAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hl
ZFJlc291cmNlKikgZmluYWw7CisgICAgLy8gUGVuZGluZ1NjcmlwdENsaWVudAorICAgIHZvaWQg
bm90aWZ5RmluaXNoZWQoUGVuZGluZ1NjcmlwdCYpIGZpbmFsOwogCiAgICAgRG9jdW1lbnQqIGNv
bnRleHRGb3JQYXJzaW5nU2Vzc2lvbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCmluZGV4IDFiNGMxNWQ5OTk2YWU4MzQxNDYzMDRmZGZk
ZDdiZWZmZGQzMjAwYTguLmI2MWU0ZDcwOGI2Y2RmMWYxMTRiMDU5NTMxMGFjNWQ4NjdmNjdlMWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3Bw
CkBAIC01OCwxMiArNTgsMTQgQEAgSFRNTFNjcmlwdFJ1bm5lcjo6SFRNTFNjcmlwdFJ1bm5lcihE
b2N1bWVudCYgZG9jdW1lbnQsIEhUTUxTY3JpcHRSdW5uZXJIb3N0JiBob3MKIEhUTUxTY3JpcHRS
dW5uZXI6On5IVE1MU2NyaXB0UnVubmVyKCkKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGJl
IHBhc3NlZCBhICJkb25lIGxvYWRpbmcvcGFyc2luZyIgY2FsbGJhY2sgc29vbmVyIHRoYW4gZGVz
dHJ1Y3Rpb24/Ci0gICAgaWYgKG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkg
JiYgbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC53YXRjaGluZ0ZvckxvYWQoKSkKLSAgICAgICAgc3Rv
cFdhdGNoaW5nRm9yTG9hZChtX3BhcnNlckJsb2NraW5nU2NyaXB0KTsKKyAgICBpZiAobV9wYXJz
ZXJCbG9ja2luZ1NjcmlwdCkgeworICAgICAgICBpZiAobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC0+
d2F0Y2hpbmdGb3JMb2FkKCkpCisgICAgICAgICAgICBzdG9wV2F0Y2hpbmdGb3JMb2FkKCptX3Bh
cnNlckJsb2NraW5nU2NyaXB0KTsKKyAgICB9CiAKICAgICB3aGlsZSAoIW1fc2NyaXB0c1RvRXhl
Y3V0ZUFmdGVyUGFyc2luZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUGVuZGluZ1NjcmlwdCBwZW5k
aW5nU2NyaXB0ID0gbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLnRha2VGaXJzdCgpOwot
ICAgICAgICBpZiAocGVuZGluZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSAmJiBwZW5kaW5nU2NyaXB0
LndhdGNoaW5nRm9yTG9hZCgpKQorICAgICAgICBhdXRvIHBlbmRpbmdTY3JpcHQgPSBtX3Njcmlw
dHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcudGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChwZW5kaW5n
U2NyaXB0LT53YXRjaGluZ0ZvckxvYWQoKSkKICAgICAgICAgICAgIHN0b3BXYXRjaGluZ0Zvckxv
YWQocGVuZGluZ1NjcmlwdCk7CiAgICAgfQogfQpAQCAtOTUsNyArOTcsNyBAQCBTY3JpcHRTb3Vy
Y2VDb2RlIEhUTUxTY3JpcHRSdW5uZXI6OnNvdXJjZUZyb21QZW5kaW5nU2NyaXB0KGNvbnN0IFBl
bmRpbmdTY3JpcHQmCiAgICAgICAgIHJldHVybiBTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdC5jYWNo
ZWRTY3JpcHQoKSk7CiAgICAgfQogICAgIGVycm9yT2NjdXJyZWQgPSBmYWxzZTsKLSAgICByZXR1
cm4gU2NyaXB0U291cmNlQ29kZShzY3JpcHQuZWxlbWVudCgpLT50ZXh0Q29udGVudCgpLCBkb2N1
bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwgc2NyaXB0LnN0YXJ0aW5nUG9z
aXRpb24oKSk7CisgICAgcmV0dXJuIFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LmVsZW1lbnQoKS50
ZXh0Q29udGVudCgpLCBkb2N1bWVudFVSTEZvclNjcmlwdEV4ZWN1dGlvbihtX2RvY3VtZW50KSwg
c2NyaXB0LnN0YXJ0aW5nUG9zaXRpb24oKSk7CiB9CiAKIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6
aXNQZW5kaW5nU2NyaXB0UmVhZHkoY29uc3QgUGVuZGluZ1NjcmlwdCYgc2NyaXB0KQpAQCAtMTA1
LDcgKzEwNyw3IEBAIGJvb2wgSFRNTFNjcmlwdFJ1bm5lcjo6aXNQZW5kaW5nU2NyaXB0UmVhZHko
Y29uc3QgUGVuZGluZ1NjcmlwdCYgc2NyaXB0KQogICAgIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JT
dHlsZXNoZWV0cyA9ICFtX2RvY3VtZW50LT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKTsKICAgICBp
ZiAobV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKHNjcmlwdC5jYWNoZWRTY3JpcHQoKSAmJiAhc2NyaXB0LmNhY2hlZFNjcmlw
dCgpLT5pc0xvYWRlZCgpKQorICAgIGlmIChzY3JpcHQubmVlZHNMb2FkaW5nKCkgJiYgIXNjcmlw
dC5pc0xvYWRlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC0xMTUsMTAgKzExNywxMSBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQYXJz
aW5nQmxvY2tpbmdTY3JpcHQoKQogICAgIEFTU0VSVChtX2RvY3VtZW50KTsKICAgICBBU1NFUlQo
IWlzRXhlY3V0aW5nU2NyaXB0KCkpOwogICAgIEFTU0VSVChtX2RvY3VtZW50LT5oYXZlU3R5bGVz
aGVldHNMb2FkZWQoKSk7Ci0gICAgQVNTRVJUKGlzUGVuZGluZ1NjcmlwdFJlYWR5KG1fcGFyc2Vy
QmxvY2tpbmdTY3JpcHQpKTsKKyAgICBBU1NFUlQoaXNQZW5kaW5nU2NyaXB0UmVhZHkoKm1fcGFy
c2VyQmxvY2tpbmdTY3JpcHQpKTsKIAogICAgIEluc2VydGlvblBvaW50UmVjb3JkIGluc2VydGlv
blBvaW50UmVjb3JkKG1faG9zdC5pbnB1dFN0cmVhbSgpKTsKLSAgICBleGVjdXRlUGVuZGluZ1Nj
cmlwdEFuZERpc3BhdGNoRXZlbnQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCk7CisgICAgUmVmUHRy
PFBlbmRpbmdTY3JpcHQ+IHByb3RlY3RvciA9IHN0ZDo6ZXhjaGFuZ2UobV9wYXJzZXJCbG9ja2lu
Z1NjcmlwdCwgbnVsbHB0cik7CisgICAgZXhlY3V0ZVBlbmRpbmdTY3JpcHRBbmREaXNwYXRjaEV2
ZW50KCpwcm90ZWN0b3IpOwogfQogCiB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1dGVQZW5k
aW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChQZW5kaW5nU2NyaXB0JiBwZW5kaW5nU2NyaXB0KQpA
QCAtMTI3LDE1ICsxMzAsMTMgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlUGVuZGlu
Z1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoUGVuZGluZ1NjcmlwdCYgcGVuZGkKICAgICBTY3JpcHRT
b3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBzb3VyY2VGcm9tUGVuZGluZ1NjcmlwdChwZW5kaW5nU2Ny
aXB0LCBlcnJvck9jY3VycmVkKTsKIAogICAgIC8vIFN0b3Agd2F0Y2hpbmcgbG9hZHMgYmVmb3Jl
IGV4ZWN1dGVTY3JpcHQgdG8gcHJldmVudCByZWN1cnNpb24gaWYgdGhlIHNjcmlwdCByZWxvYWRz
IGl0c2VsZi4KLSAgICBpZiAocGVuZGluZ1NjcmlwdC5jYWNoZWRTY3JpcHQoKSAmJiBwZW5kaW5n
U2NyaXB0LndhdGNoaW5nRm9yTG9hZCgpKQorICAgIGlmIChwZW5kaW5nU2NyaXB0LndhdGNoaW5n
Rm9yTG9hZCgpKQogICAgICAgICBzdG9wV2F0Y2hpbmdGb3JMb2FkKHBlbmRpbmdTY3JpcHQpOwog
CiAgICAgaWYgKCFpc0V4ZWN1dGluZ1NjcmlwdCgpKQogICAgICAgICBNaWNyb3Rhc2tRdWV1ZTo6
bWFpblRocmVhZFF1ZXVlKCkucGVyZm9ybU1pY3JvdGFza0NoZWNrcG9pbnQoKTsKIAotICAgIC8v
IENsZWFyIHRoZSBwZW5kaW5nIHNjcmlwdCBiZWZvcmUgcG9zc2libGUgcmVudHJhbmN5IGZyb20g
ZXhlY3V0ZVNjcmlwdCgpCi0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBwZW5kaW5nU2Ny
aXB0LnJlbGVhc2VFbGVtZW50QW5kQ2xlYXIoKTsKLSAgICBpZiAoU2NyaXB0RWxlbWVudCogc2Ny
aXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoZWxlbWVudC5nZXQoKSkpIHsK
KyAgICBpZiAoYXV0byogc2NyaXB0RWxlbWVudCA9IHRvU2NyaXB0RWxlbWVudElmUG9zc2libGUo
JnBlbmRpbmdTY3JpcHQuZWxlbWVudCgpKSkgewogICAgICAgICBOZXN0aW5nTGV2ZWxJbmNyZW1l
bnRlciBuZXN0aW5nTGV2ZWxJbmNyZW1lbnRlcihtX3NjcmlwdE5lc3RpbmdMZXZlbCk7CiAgICAg
ICAgIElnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyIGlnbm9yZURlc3RydWN0
aXZlV3JpdGVDb3VudEluY3JlbWVudGVyKG1fZG9jdW1lbnQpOwogICAgICAgICBpZiAoZXJyb3JP
Y2N1cnJlZCkKQEAgLTE0Myw3ICsxNDQsNyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5uZXI6OmV4ZWN1
dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChQZW5kaW5nU2NyaXB0JiBwZW5kaQogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAg
ICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3JpcHQoc291cmNlQ29kZSk7Ci0gICAg
ICAgICAgICBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KGNyZWF0ZVNjcmlwdExvYWRFdmVudCgpKTsK
KyAgICAgICAgICAgIHBlbmRpbmdTY3JpcHQuZWxlbWVudCgpLmRpc3BhdGNoRXZlbnQoY3JlYXRl
U2NyaXB0TG9hZEV2ZW50KCkpOwogICAgICAgICB9CiAgICAgfQogICAgIEFTU0VSVCghaXNFeGVj
dXRpbmdTY3JpcHQoKSk7CkBAIC0xNTIsMTUgKzE1MywxMyBAQCB2b2lkIEhUTUxTY3JpcHRSdW5u
ZXI6OmV4ZWN1dGVQZW5kaW5nU2NyaXB0QW5kRGlzcGF0Y2hFdmVudChQZW5kaW5nU2NyaXB0JiBw
ZW5kaQogdm9pZCBIVE1MU2NyaXB0UnVubmVyOjp3YXRjaEZvckxvYWQoUGVuZGluZ1NjcmlwdCYg
cGVuZGluZ1NjcmlwdCkKIHsKICAgICBBU1NFUlQoIXBlbmRpbmdTY3JpcHQud2F0Y2hpbmdGb3JM
b2FkKCkpOwotICAgIG1faG9zdC53YXRjaEZvckxvYWQocGVuZGluZ1NjcmlwdC5jYWNoZWRTY3Jp
cHQoKSk7Ci0gICAgcGVuZGluZ1NjcmlwdC5zZXRXYXRjaGluZ0ZvckxvYWQodHJ1ZSk7CisgICAg
bV9ob3N0LndhdGNoRm9yTG9hZChwZW5kaW5nU2NyaXB0KTsKIH0KIAogdm9pZCBIVE1MU2NyaXB0
UnVubmVyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKFBlbmRpbmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQp
CiB7CiAgICAgQVNTRVJUKHBlbmRpbmdTY3JpcHQud2F0Y2hpbmdGb3JMb2FkKCkpOwotICAgIG1f
aG9zdC5zdG9wV2F0Y2hpbmdGb3JMb2FkKHBlbmRpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwot
ICAgIHBlbmRpbmdTY3JpcHQuc2V0V2F0Y2hpbmdGb3JMb2FkKGZhbHNlKTsKKyAgICBtX2hvc3Qu
c3RvcFdhdGNoaW5nRm9yTG9hZChwZW5kaW5nU2NyaXB0KTsKIH0KIAogLy8gVGhpcyBmdW5jdGlv
biBzaG91bGQgbWF0Y2ggMTAuMi41LjExICJBbiBlbmQgdGFnIHdob3NlIHRhZyBuYW1lIGlzICdz
Y3JpcHQnIgpAQCAtMTg3LDIxICsxODYsMjEgQEAgdm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVj
dXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxlbWVudCwgY29uc3QgVGV4dFBvc2kKIAog
Ym9vbCBIVE1MU2NyaXB0UnVubmVyOjpoYXNQYXJzZXJCbG9ja2luZ1NjcmlwdCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuICEhbV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5lbGVtZW50KCk7CisgICAgcmV0
dXJuICEhbV9wYXJzZXJCbG9ja2luZ1NjcmlwdDsKIH0KIAogdm9pZCBIVE1MU2NyaXB0UnVubmVy
OjpleGVjdXRlUGFyc2luZ0Jsb2NraW5nU2NyaXB0cygpCiB7Ci0gICAgd2hpbGUgKGhhc1BhcnNl
ckJsb2NraW5nU2NyaXB0KCkgJiYgaXNQZW5kaW5nU2NyaXB0UmVhZHkobV9wYXJzZXJCbG9ja2lu
Z1NjcmlwdCkpCisgICAgd2hpbGUgKGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkgJiYgaXNQZW5k
aW5nU2NyaXB0UmVhZHkoKm1fcGFyc2VyQmxvY2tpbmdTY3JpcHQpKQogICAgICAgICBleGVjdXRl
UGFyc2luZ0Jsb2NraW5nU2NyaXB0KCk7CiB9CiAKLXZvaWQgSFRNTFNjcmlwdFJ1bm5lcjo6ZXhl
Y3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkU2NyaXB0KQor
dm9pZCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JMb2FkKFBlbmRp
bmdTY3JpcHQmIHBlbmRpbmdTY3JpcHQpCiB7CiAgICAgQVNTRVJUKCFpc0V4ZWN1dGluZ1Njcmlw
dCgpKTsKICAgICBBU1NFUlQoaGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSk7Ci0gICAgQVNTRVJU
X1VOVVNFRChjYWNoZWRTY3JpcHQsIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0
KCkgPT0gY2FjaGVkU2NyaXB0KTsKLSAgICBBU1NFUlQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC5j
YWNoZWRTY3JpcHQoKS0+aXNMb2FkZWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChwZW5kaW5nU2Ny
aXB0LCBtX3BhcnNlckJsb2NraW5nU2NyaXB0LmdldCgpID09ICZwZW5kaW5nU2NyaXB0KTsKKyAg
ICBBU1NFUlQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdC0+aXNMb2FkZWQoKSk7CiAgICAgZXhlY3V0
ZVBhcnNpbmdCbG9ja2luZ1NjcmlwdHMoKTsKIH0KIApAQCAtMjIxLDEyICsyMjAsMTIgQEAgYm9v
bCBIVE1MU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JQYXJzaW5nKCkKICAg
ICB3aGlsZSAoIW1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgQVNTRVJUKCFpc0V4ZWN1dGluZ1NjcmlwdCgpKTsKICAgICAgICAgQVNTRVJUKCFoYXNQ
YXJzZXJCbG9ja2luZ1NjcmlwdCgpKTsKLSAgICAgICAgQVNTRVJUKG1fc2NyaXB0c1RvRXhlY3V0
ZUFmdGVyUGFyc2luZy5maXJzdCgpLmNhY2hlZFNjcmlwdCgpKTsKLSAgICAgICAgaWYgKCFtX3Nj
cmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmcuZmlyc3QoKS5jYWNoZWRTY3JpcHQoKS0+aXNMb2Fk
ZWQoKSkgeworICAgICAgICBBU1NFUlQobV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLmZp
cnN0KCktPm5lZWRzTG9hZGluZygpKTsKKyAgICAgICAgaWYgKCFtX3NjcmlwdHNUb0V4ZWN1dGVB
ZnRlclBhcnNpbmcuZmlyc3QoKS0+aXNMb2FkZWQoKSkgewogICAgICAgICAgICAgd2F0Y2hGb3JM
b2FkKG1fc2NyaXB0c1RvRXhlY3V0ZUFmdGVyUGFyc2luZy5maXJzdCgpKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBQZW5kaW5nU2NyaXB0IGZpcnN0ID0g
bV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLnRha2VGaXJzdCgpOworICAgICAgICBhdXRv
IGZpcnN0ID0gbV9zY3JpcHRzVG9FeGVjdXRlQWZ0ZXJQYXJzaW5nLnRha2VGaXJzdCgpOwogICAg
ICAgICBleGVjdXRlUGVuZGluZ1NjcmlwdEFuZERpc3BhdGNoRXZlbnQoZmlyc3QpOwogICAgICAg
ICAvLyBGSVhNRTogV2hhdCBpcyB0aGlzIG1fZG9jdW1lbnQgY2hlY2sgZm9yPwogICAgICAgICBp
ZiAoIW1fZG9jdW1lbnQpCkBAIC0yMzUsNDIgKzIzNCwzMyBAQCBib29sIEhUTUxTY3JpcHRSdW5u
ZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclBhcnNpbmcoKQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEhUTUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQYXJzaW5nQmxvY2tpbmdTY3JpcHQo
RWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyBSZWY8UGVuZGluZ1NjcmlwdD4gcmVxdWVzdFBlbmRp
bmdTY3JpcHQoRWxlbWVudCogc2NyaXB0KQogewotICAgIGlmICghcmVxdWVzdFBlbmRpbmdTY3Jp
cHQobV9wYXJzZXJCbG9ja2luZ1NjcmlwdCwgZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICBhdXRvKiBzY3JpcHRFbGVtZW50ID0gdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShzY3JpcHQp
OworICAgIEFTU0VSVChzY3JpcHRFbGVtZW50LT53aWxsQmVQYXJzZXJFeGVjdXRlZCgpKTsKKyAg
ICBhdXRvKiBjYWNoZWRTY3JpcHQgPSBzY3JpcHRFbGVtZW50LT5jYWNoZWRTY3JpcHQoKS5nZXQo
KTsKKyAgICBBU1NFUlQoY2FjaGVkU2NyaXB0KTsKKyAgICByZXR1cm4gUGVuZGluZ1NjcmlwdDo6
Y3JlYXRlKCpzY3JpcHQsICpjYWNoZWRTY3JpcHQpOworfQogCi0gICAgQVNTRVJUKG1fcGFyc2Vy
QmxvY2tpbmdTY3JpcHQuY2FjaGVkU2NyaXB0KCkpOwordm9pZCBIVE1MU2NyaXB0UnVubmVyOjpy
ZXF1ZXN0UGFyc2luZ0Jsb2NraW5nU2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNT
RVJUKCFtX3BhcnNlckJsb2NraW5nU2NyaXB0KTsKKyAgICBtX3BhcnNlckJsb2NraW5nU2NyaXB0
ID0gcmVxdWVzdFBlbmRpbmdTY3JpcHQoZWxlbWVudCk7CisgICAgQVNTRVJUKG1fcGFyc2VyQmxv
Y2tpbmdTY3JpcHQtPm5lZWRzTG9hZGluZygpKTsKIAogICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91
dCBhIGxvYWQgY2FsbGJhY2sgaWYgY2FjaGVkU2NyaXB0IGlzIG5vdCBhbHJlYWR5CiAgICAgLy8g
aW4gdGhlIGNhY2hlLiBDYWxsZXJzIHdpbGwgYXR0ZW1wdCB0byBydW4gdGhlIG1fcGFyc2VyQmxv
Y2tpbmdTY3JpcHQKICAgICAvLyBpZiBwb3NzaWJsZSBiZWZvcmUgcmV0dXJuaW5nIGNvbnRyb2wg
dG8gdGhlIHBhcnNlci4KLSAgICBpZiAoIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuY2FjaGVkU2Ny
aXB0KCktPmlzTG9hZGVkKCkpCi0gICAgICAgIHdhdGNoRm9yTG9hZChtX3BhcnNlckJsb2NraW5n
U2NyaXB0KTsKKyAgICBpZiAoIW1fcGFyc2VyQmxvY2tpbmdTY3JpcHQtPmlzTG9hZGVkKCkpCisg
ICAgICAgIHdhdGNoRm9yTG9hZCgqbV9wYXJzZXJCbG9ja2luZ1NjcmlwdCk7CiB9CiAKIHZvaWQg
SFRNTFNjcmlwdFJ1bm5lcjo6cmVxdWVzdERlZmVycmVkU2NyaXB0KEVsZW1lbnQqIGVsZW1lbnQp
CiB7Ci0gICAgUGVuZGluZ1NjcmlwdCBwZW5kaW5nU2NyaXB0OwotICAgIGlmICghcmVxdWVzdFBl
bmRpbmdTY3JpcHQocGVuZGluZ1NjcmlwdCwgZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChwZW5kaW5nU2NyaXB0LmNhY2hlZFNjcmlwdCgpKTsKLSAgICBtX3NjcmlwdHNU
b0V4ZWN1dGVBZnRlclBhcnNpbmcuYXBwZW5kKHBlbmRpbmdTY3JpcHQpOwotfQotCi1ib29sIEhU
TUxTY3JpcHRSdW5uZXI6OnJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQmIHBlbmRp
bmdTY3JpcHQsIEVsZW1lbnQqIHNjcmlwdCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIXBlbmRpbmdT
Y3JpcHQuZWxlbWVudCgpKTsKLSAgICBwZW5kaW5nU2NyaXB0LnNldEVsZW1lbnQoc2NyaXB0KTsK
LSAgICAvLyBUaGlzIHNob3VsZCBjb3JyZWN0bHkgcmV0dXJuIDAgZm9yIGVtcHR5IG9yIGludmFs
aWQgc3JjVmFsdWVzLgotICAgIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0ID0gdG9TY3JpcHRF
bGVtZW50SWZQb3NzaWJsZShzY3JpcHQpLT5jYWNoZWRTY3JpcHQoKS5nZXQoKTsKLSAgICBpZiAo
IWNhY2hlZFNjcmlwdCkgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBEaXNwYXRjaCBl
cnJvciBldmVudC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBwZW5kaW5nU2Ny
aXB0LnNldENhY2hlZFNjcmlwdChjYWNoZWRTY3JpcHQpOwotICAgIHJldHVybiB0cnVlOworICAg
IGF1dG8gcGVuZGluZ1NjcmlwdCA9IHJlcXVlc3RQZW5kaW5nU2NyaXB0KGVsZW1lbnQpOworICAg
IEFTU0VSVChwZW5kaW5nU2NyaXB0LT5uZWVkc0xvYWRpbmcoKSk7CisgICAgbV9zY3JpcHRzVG9F
eGVjdXRlQWZ0ZXJQYXJzaW5nLmFwcGVuZChXVEZNb3ZlKHBlbmRpbmdTY3JpcHQpKTsKIH0KIAog
Ly8gVGhpcyBtZXRob2QgaXMgbWVhbnQgdG8gbWF0Y2ggdGhlIEhUTUw1IGRlZmluaXRpb24gb2Yg
InJ1bm5pbmcgYSBzY3JpcHQiCkBAIC0zMDgsMTMgKzI5OCwxMCBAQCB2b2lkIEhUTUxTY3JpcHRS
dW5uZXI6OnJ1blNjcmlwdChFbGVtZW50KiBzY3JpcHQsIGNvbnN0IFRleHRQb3NpdGlvbiYgc2Ny
aXB0U3RhcgogICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+d2lsbEV4ZWN1dGVXaGVuRG9jdW1l
bnRGaW5pc2hlZFBhcnNpbmcoKSkKICAgICAgICAgICAgIHJlcXVlc3REZWZlcnJlZFNjcmlwdChz
Y3JpcHQpOwogICAgICAgICBlbHNlIGlmIChzY3JpcHRFbGVtZW50LT5yZWFkeVRvQmVQYXJzZXJF
eGVjdXRlZCgpKSB7Ci0gICAgICAgICAgICBpZiAobV9zY3JpcHROZXN0aW5nTGV2ZWwgPT0gMSkg
ewotICAgICAgICAgICAgICAgIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuc2V0RWxlbWVudChzY3Jp
cHQpOwotICAgICAgICAgICAgICAgIG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQuc2V0U3RhcnRpbmdQ
b3NpdGlvbihzY3JpcHRTdGFydFBvc2l0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHNjcmlwdC0+dGV4dENvbnRl
bnQoKSwgZG9jdW1lbnRVUkxGb3JTY3JpcHRFeGVjdXRpb24obV9kb2N1bWVudCksIHNjcmlwdFN0
YXJ0UG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVTY3Jp
cHQoc291cmNlQ29kZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9zY3JpcHRO
ZXN0aW5nTGV2ZWwgPT0gMSkKKyAgICAgICAgICAgICAgICBtX3BhcnNlckJsb2NraW5nU2NyaXB0
ID0gUGVuZGluZ1NjcmlwdDo6Y3JlYXRlKCpzY3JpcHQsIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPmV4ZWN1dGVT
Y3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHQtPnRleHRDb250ZW50KCksIGRvY3VtZW50VVJM
Rm9yU2NyaXB0RXhlY3V0aW9uKG1fZG9jdW1lbnQpLCBzY3JpcHRTdGFydFBvc2l0aW9uKSk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmVxdWVzdFBhcnNpbmdCbG9ja2luZ1NjcmlwdChz
Y3JpcHQpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxTY3JpcHRSdW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRS
dW5uZXIuaAppbmRleCA0NWJmOGQwMzI0ZjhlZDIxYzllNmU4ZGRlMTRiYmM5ZGUwNmNiYzdhLi5l
ZmMzOTI4YmU4OTI1ZDZjOTM3MGE4MzJlZmE0OGNmN2IwODU3MTQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oCkBAIC01MSw3ICs1MSw3IEBAIGNs
YXNzIEhUTUxTY3JpcHRSdW5uZXIgewogICAgIC8vIFByb2Nlc3NlcyB0aGUgcGFzc2VkIGluIHNj
cmlwdCBhbmQgYW55IHBlbmRpbmcgc2NyaXB0cyBpZiBwb3NzaWJsZS4KICAgICB2b2lkIGV4ZWN1
dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBzY3JpcHRUb1Byb2Nlc3MsIGNvbnN0IFRleHRQb3NpdGlv
biYgc2NyaXB0U3RhcnRQb3NpdGlvbik7CiAKLSAgICB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGlu
Z0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqKTsKKyAgICB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGlu
Z0ZvckxvYWQoUGVuZGluZ1NjcmlwdCYpOwogICAgIGJvb2wgaGFzU2NyaXB0c1dhaXRpbmdGb3JT
dHlsZXNoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNo
ZWV0czsgfQogICAgIHZvaWQgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsK
ICAgICBib29sIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclBhcnNpbmcoKTsKQEAgLTY4LDcgKzY4
LDYgQEAgY2xhc3MgSFRNTFNjcmlwdFJ1bm5lciB7CiAKICAgICB2b2lkIHJlcXVlc3RQYXJzaW5n
QmxvY2tpbmdTY3JpcHQoRWxlbWVudCopOwogICAgIHZvaWQgcmVxdWVzdERlZmVycmVkU2NyaXB0
KEVsZW1lbnQqKTsKLSAgICBib29sIHJlcXVlc3RQZW5kaW5nU2NyaXB0KFBlbmRpbmdTY3JpcHQm
LCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2b2lkIHJ1blNjcmlwdChFbGVtZW50KiwgY29uc3Qg
VGV4dFBvc2l0aW9uJiBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIApAQCAtODAsOCArNzksOCBAQCBj
bGFzcyBIVE1MU2NyaXB0UnVubmVyIHsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAg
IEhUTUxTY3JpcHRSdW5uZXJIb3N0JiBtX2hvc3Q7Ci0gICAgUGVuZGluZ1NjcmlwdCBtX3BhcnNl
ckJsb2NraW5nU2NyaXB0OwotICAgIERlcXVlPFBlbmRpbmdTY3JpcHQ+IG1fc2NyaXB0c1RvRXhl
Y3V0ZUFmdGVyUGFyc2luZzsgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBz
L2N1cnJlbnQtd29yay8jbGlzdC1vZi1zY3JpcHRzLXRoYXQtd2lsbC1leGVjdXRlLXdoZW4tdGhl
LWRvY3VtZW50LWhhcy1maW5pc2hlZC1wYXJzaW5nCisgICAgUmVmUHRyPFBlbmRpbmdTY3JpcHQ+
IG1fcGFyc2VyQmxvY2tpbmdTY3JpcHQ7CisgICAgRGVxdWU8UmVmPFBlbmRpbmdTY3JpcHQ+PiBt
X3NjcmlwdHNUb0V4ZWN1dGVBZnRlclBhcnNpbmc7IC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9z
cGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI2xpc3Qtb2Ytc2NyaXB0cy10aGF0LXdpbGwtZXhl
Y3V0ZS13aGVuLXRoZS1kb2N1bWVudC1oYXMtZmluaXNoZWQtcGFyc2luZwogICAgIHVuc2lnbmVk
IG1fc2NyaXB0TmVzdGluZ0xldmVsOwogCiAgICAgLy8gV2Ugb25seSB3YW50IHN0eWxlc2hlZXQg
bG9hZHMgdG8gdHJpZ2dlciBzY3JpcHQgZXhlY3V0aW9uIGlmIHNjcmlwdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXJIb3N0LmgKaW5kZXggMWYyMjg5
NjU3ZTAwNDc2YWY5NDA5N2YyNTAzZTUyNTJhNGJhMWE4NS4uOGE2M2JjYjBlOTc4YTg0NDcxYTM1
M2FjNzU3MzZmM2M0YWNhYmFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFNjcmlwdFJ1bm5lckhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MU2NyaXB0UnVubmVySG9zdC5oCkBAIC0zMCw5ICszMCw5IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFzcyBFbGVtZW50OwogY2xhc3Mg
SFRNTElucHV0U3RyZWFtOworY2xhc3MgUGVuZGluZ1NjcmlwdDsKIGNsYXNzIFNjcmlwdFNvdXJj
ZUNvZGU7CiAKIGNsYXNzIEhUTUxTY3JpcHRSdW5uZXJIb3N0IHsKQEAgLTQwLDkgKzQwLDkgQEAg
Y2xhc3MgSFRNTFNjcmlwdFJ1bm5lckhvc3QgewogICAgIHZpcnR1YWwgfkhUTUxTY3JpcHRSdW5u
ZXJIb3N0KCkgeyB9CiAKICAgICAvLyBJbXBsZW1lbnRvcnMgc2hvdWxkIGNhbGwgY2FjaGVkUmVz
b3VyY2UtPmFkZENsaWVudCgpIGhlcmUgb3Igc29vbiBhZnRlci4KLSAgICB2aXJ0dWFsIHZvaWQg
d2F0Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB3YXRj
aEZvckxvYWQoUGVuZGluZ1NjcmlwdCYpID0gMDsKICAgICAvLyBJbXBsZW1lbnRvcnMgbXVzdCBj
YWxsIGNhY2hlZFJlc291cmNlLT5yZW1vdmVDbGllbnQoKSBpbW1lZGlhdGVseS4KLSAgICB2aXJ0
dWFsIHZvaWQgc3RvcFdhdGNoaW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc3RvcFdhdGNoaW5nRm9yTG9hZChQZW5kaW5nU2NyaXB0JikgPSAwOwogCiAg
ICAgdmlydHVhbCBIVE1MSW5wdXRTdHJlYW0mIGlucHV0U3RyZWFtKCkgPSAwOwogCg==
</data>
<flag name="review"
          id="310908"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>