<?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>44679</bug_id>
          
          <creation_ts>2010-08-26 05:40:33 -0700</creation_ts>
          <short_desc>Web Inspector: provide more information to front-end when breaking on DOM event</short_desc>
          <delta_ts>2010-09-03 07:17:49 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>pfeldman</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>269833</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-08-26 05:40:33 -0700</bug_when>
    <thetext>Web Inspector: provide more information to front-end when breaking on DOM event</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269879</commentid>
    <comment_count>1</comment_count>
      <attachid>65564</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-08-26 07:40:23 -0700</bug_when>
    <thetext>Created attachment 65564
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269924</commentid>
    <comment_count>2</comment_count>
      <attachid>65564</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-26 09:20:54 -0700</bug_when>
    <thetext>Comment on attachment 65564
Proposed patch.

Please run Dromaeo tests before and after the change to prove that it does not regress performance.

WebCore/dom/ContainerNode.cpp:137
 +  #if ENABLE(INSPECTOR)
These deserve inline function definitions. I&apos;d do it on inspector controller in order to hide the complexity too:
InspectorController::willInsertDOMNode(this, child);
InspectorController::didInsertDOMNode(this, child);
InspectorController::willRemoveDOMNode(this, child);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270445</commentid>
    <comment_count>3</comment_count>
      <attachid>65705</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-08-27 05:40:59 -0700</bug_when>
    <thetext>Created attachment 65705
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270446</commentid>
    <comment_count>4</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-27 05:49:22 -0700</bug_when>
    <thetext>Attachment 65705 did not build on qt:
Build output: http://queues.webkit.org/results/3853016</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270457</commentid>
    <comment_count>5</comment_count>
      <attachid>65707</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-08-27 06:24:36 -0700</bug_when>
    <thetext>Created attachment 65707
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270466</commentid>
    <comment_count>6</comment_count>
      <attachid>65707</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-27 06:46:24 -0700</bug_when>
    <thetext>Comment on attachment 65707
Proposed patch.

WebCore/dom/ContainerNode.cpp:137
 +          InspectorController::willInsertDOMNode(this);
Passing child would look more consistent.

WebCore/inspector/InspectorController.h:387
 +      if (Page* page = node-&gt;document()-&gt;page()) {
Please replace nested ifs with guard expressions when nesting is that big.

WebCore/inspector/InspectorController.h:416
 +      if (Page* page = node-&gt;document()-&gt;page()) {
ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271398</commentid>
    <comment_count>7</comment_count>
      <attachid>65909</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-08-30 05:56:48 -0700</bug_when>
    <thetext>Created attachment 65909
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271401</commentid>
    <comment_count>8</comment_count>
      <attachid>65909</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-30 06:43:55 -0700</bug_when>
    <thetext>Comment on attachment 65909
Proposed patch.

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 908f761..925163a 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,59 @@
&gt; +2010-08-30  Pavel Podivilov  &lt;podivilov@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Web Inspector: provide more information to front-end when breaking on DOM event
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=44679
&gt; +
&gt; +        * dom/ContainerNode.cpp:
&gt; +        (WebCore::ContainerNode::insertBefore):
&gt; +        (WebCore::ContainerNode::parserInsertBefore):
&gt; +        (WebCore::ContainerNode::replaceChild):
&gt; +        (WebCore::ContainerNode::appendChild):
&gt; +        (WebCore::ContainerNode::parserAddChild):
&gt; +        (WebCore::notifyChildInserted):
&gt; +        (WebCore::dispatchChildRemovalEvents):
&gt; +        * dom/Element.cpp:
&gt; +        (WebCore::Element::setAttribute):
&gt; +        (WebCore::Element::removeAttribute):
&gt; +        * inspector/Inspector.idl:
&gt; +        * inspector/InspectorController.h:
&gt; +        (WebCore::InspectorController::willInsertDOMNode):
&gt; +        (WebCore::InspectorController::didInsertDOMNode):
&gt; +        (WebCore::InspectorController::willRemoveDOMNode):
&gt; +        (WebCore::InspectorController::willModifyDOMAttr):
&gt; +        (WebCore::InspectorController::didModifyDOMAttr):
&gt; +        (WebCore::InspectorController::inspectorControllerForNode):
&gt; +        * inspector/InspectorDOMAgent.cpp:
&gt; +        (WebCore::InspectorDOMAgent::~InspectorDOMAgent):
&gt; +        (WebCore::InspectorDOMAgent::getBreakpointForNodeInsertion):
&gt; +        (WebCore::InspectorDOMAgent::getBreakpointForNodeRemoval):
&gt; +        (WebCore::InspectorDOMAgent::getBreakpointForAttributeModification):
&gt; +        (WebCore::InspectorDOMAgent::didInsertDOMNode):
&gt; +        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
&gt; +        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
&gt; +        (WebCore::InspectorDOMAgent::createBreakpoint):
&gt; +        * inspector/InspectorDOMAgent.h:
&gt; +        * inspector/InspectorDebuggerAgent.cpp:
&gt; +        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
&gt; +        (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
&gt; +        (WebCore::InspectorDebuggerAgent::didPause):
&gt; +        (WebCore::InspectorDebuggerAgent::breakProgram):
&gt; +        * inspector/InspectorDebuggerAgent.h:
&gt; +        * inspector/InspectorValues.h:
&gt; +        (WebCore::InspectorValue::isNull):
&gt; +        * inspector/front-end/BreakpointsSidebarPane.js:
&gt; +        (WebInspector.BreakpointItem):
&gt; +        (WebInspector.BreakpointItem.prototype._enableChanged):
&gt; +        * inspector/front-end/DOMAgent.js:
&gt; +        (WebInspector.DOMAgent.prototype._childNodeRemoved):
&gt; +        (WebInspector.DOMBreakpointManager.prototype._breakpointRemoved):
&gt; +        (WebInspector.DOMBreakpointManager.prototype.breakpointHit):
&gt; +        * inspector/front-end/Script.js:
&gt; +        (WebInspector.Script.prototype.get linesCount):
&gt; +        * inspector/front-end/inspector.js:
&gt; +        (WebInspector.pausedScript):
&gt; +
&gt;  2010-08-28  Jeremy Moskovich  &lt;jeremy@chromium.org&gt;
&gt;  
&gt;          Reviewed by Dimitri Glazkov.
&gt; diff --git a/WebCore/dom/ContainerNode.cpp b/WebCore/dom/ContainerNode.cpp
&gt; index ef62b38..7d88948 100644
&gt; --- a/WebCore/dom/ContainerNode.cpp
&gt; +++ b/WebCore/dom/ContainerNode.cpp
&gt; @@ -134,6 +134,8 @@ bool ContainerNode::insertBefore(PassRefPtr&lt;Node&gt; newChild, Node* refChild, Exce
&gt;          if (child-&gt;parentNode())
&gt;              break;
&gt;  
&gt; +        InspectorController::willInsertDOMNode(child, this);
&gt; +
&gt;          insertBeforeCommon(next.get(), child);
&gt;  
&gt;          // Send notification about the children change.
&gt; @@ -201,6 +203,8 @@ void ContainerNode::parserInsertBefore(PassRefPtr&lt;Node&gt; newChild, Node* nextChil
&gt;      for (NodeVector::const_iterator it = targets.begin(); it != targets.end(); ++it) {
&gt;          Node* child = it-&gt;get();
&gt;  
&gt; +        InspectorController::willInsertDOMNode(child, this);
&gt; +
&gt;          insertBeforeCommon(next.get(), child);
&gt;  
&gt;          childrenChanged(true, nextChildPreviousSibling.get(), nextChild, 1);
&gt; @@ -274,6 +278,8 @@ bool ContainerNode::replaceChild(PassRefPtr&lt;Node&gt; newChild, Node* oldChild, Exce
&gt;          ASSERT(!child-&gt;nextSibling());
&gt;          ASSERT(!child-&gt;previousSibling());
&gt;  
&gt; +        InspectorController::willInsertDOMNode(child.get(), this);
&gt; +
&gt;          // Add child after &quot;prev&quot;.
&gt;          forbidEventDispatch();
&gt;          Node* next;
&gt; @@ -555,6 +561,8 @@ bool ContainerNode::appendChild(PassRefPtr&lt;Node&gt; newChild, ExceptionCode&amp; ec, bo
&gt;                  break;
&gt;          }
&gt;  
&gt; +        InspectorController::willInsertDOMNode(child, this);
&gt; +
&gt;          // Append child to the end of the list
&gt;          forbidEventDispatch();
&gt;          child-&gt;setParent(this);
&gt; @@ -593,6 +601,8 @@ void ContainerNode::parserAddChild(PassRefPtr&lt;Node&gt; newChild)
&gt;      ASSERT(newChild);
&gt;      ASSERT(!newChild-&gt;parent()); // Use appendChild if you need to handle reparenting (and want DOM mutation events).
&gt;  
&gt; +    InspectorController::willInsertDOMNode(newChild.get(), this);
&gt; +
&gt;      forbidEventDispatch();
&gt;      Node* last = m_lastChild;
&gt;      // FIXME: This method should take a PassRefPtr.
&gt; @@ -964,12 +974,7 @@ static void notifyChildInserted(Node* child)
&gt;  {
&gt;      ASSERT(!eventDispatchForbidden());
&gt;  
&gt; -#if ENABLE(INSPECTOR)
&gt; -    if (Page* page = child-&gt;document()-&gt;page()) {
&gt; -        if (InspectorController* inspectorController = page-&gt;inspectorController())
&gt; -            inspectorController-&gt;didInsertDOMNode(child);
&gt; -    }
&gt; -#endif
&gt; +    InspectorController::didInsertDOMNode(child);
&gt;  
&gt;      RefPtr&lt;Node&gt; c = child;
&gt;      RefPtr&lt;Document&gt; document = child-&gt;document();
&gt; @@ -1003,12 +1008,7 @@ static void dispatchChildRemovalEvents(Node* child)
&gt;  {
&gt;      ASSERT(!eventDispatchForbidden());
&gt;  
&gt; -#if ENABLE(INSPECTOR)    
&gt; -    if (Page* page = child-&gt;document()-&gt;page()) {
&gt; -        if (InspectorController* inspectorController = page-&gt;inspectorController())
&gt; -            inspectorController-&gt;didRemoveDOMNode(child);
&gt; -    }
&gt; -#endif
&gt; +    InspectorController::willRemoveDOMNode(child);
&gt;  
&gt;      RefPtr&lt;Node&gt; c = child;
&gt;      RefPtr&lt;Document&gt; document = child-&gt;document();
&gt; diff --git a/WebCore/dom/Element.cpp b/WebCore/dom/Element.cpp
&gt; index 39bf393..fb17565 100644
&gt; --- a/WebCore/dom/Element.cpp
&gt; +++ b/WebCore/dom/Element.cpp
&gt; @@ -540,6 +540,11 @@ void Element::setAttribute(const AtomicString&amp; name, const AtomicString&amp; value,
&gt;          return;
&gt;      }
&gt;  
&gt; +#if ENABLE(INSPECTOR)
&gt; +    if (!isSynchronizingStyleAttribute())
&gt; +        InspectorController::willModifyDOMAttr(this);
&gt; +#endif
&gt; +
&gt;      const AtomicString&amp; localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;
&gt;  
&gt;      // Allocate attribute map if necessary.
&gt; @@ -563,17 +568,18 @@ void Element::setAttribute(const AtomicString&amp; name, const AtomicString&amp; value,
&gt;      }
&gt;  
&gt;  #if ENABLE(INSPECTOR)
&gt; -    if (Page* page = document()-&gt;page()) {
&gt; -        if (InspectorController* inspectorController = page-&gt;inspectorController()) {
&gt; -            if (!isSynchronizingStyleAttribute())
&gt; -                inspectorController-&gt;didModifyDOMAttr(this);
&gt; -        }
&gt; -    }
&gt; +    if (!isSynchronizingStyleAttribute())
&gt; +        InspectorController::didModifyDOMAttr(this);
&gt;  #endif
&gt;  }
&gt;  
&gt;  void Element::setAttribute(const QualifiedName&amp; name, const AtomicString&amp; value, ExceptionCode&amp;)
&gt;  {
&gt; +#if ENABLE(INSPECTOR)
&gt; +    if (!isSynchronizingStyleAttribute())
&gt; +        InspectorController::willModifyDOMAttr(this);
&gt; +#endif
&gt; +
&gt;      document()-&gt;incDOMTreeVersion();
&gt;  
&gt;      // Allocate attribute map if necessary.
&gt; @@ -592,12 +598,8 @@ void Element::setAttribute(const QualifiedName&amp; name, const AtomicString&amp; value,
&gt;      }
&gt;  
&gt;  #if ENABLE(INSPECTOR)
&gt; -    if (Page* page = document()-&gt;page()) {
&gt; -        if (InspectorController* inspectorController = page-&gt;inspectorController()) {
&gt; -            if (!isSynchronizingStyleAttribute())
&gt; -                inspectorController-&gt;didModifyDOMAttr(this);
&gt; -        }
&gt; -    }
&gt; +    if (!isSynchronizingStyleAttribute())
&gt; +        InspectorController::didModifyDOMAttr(this);
&gt;  #endif
&gt;  }
&gt;  
&gt; @@ -1228,6 +1230,8 @@ void Element::setAttributeNS(const AtomicString&amp; namespaceURI, const AtomicStrin
&gt;  
&gt;  void Element::removeAttribute(const String&amp; name, ExceptionCode&amp; ec)
&gt;  {
&gt; +    InspectorController::willModifyDOMAttr(this);
&gt; +
&gt;      String localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;
&gt;  
&gt;      if (m_attributeMap) {
&gt; @@ -1236,13 +1240,7 @@ void Element::removeAttribute(const String&amp; name, ExceptionCode&amp; ec)
&gt;              ec = 0;
&gt;      }
&gt;      
&gt; -#if ENABLE(INSPECTOR)
&gt; -    if (Page* page = document()-&gt;page()) {
&gt; -        if (InspectorController* inspectorController = page-&gt;inspectorController())
&gt; -            inspectorController-&gt;didModifyDOMAttr(this);
&gt; -    }
&gt; -#endif
&gt; -    
&gt; +    InspectorController::didModifyDOMAttr(this);
&gt;  }
&gt;  
&gt;  void Element::removeAttributeNS(const String&amp; namespaceURI, const String&amp; localName, ExceptionCode&amp; ec)
&gt; diff --git a/WebCore/inspector/Inspector.idl b/WebCore/inspector/Inspector.idl
&gt; index 1f034b2..f58ae67 100644
&gt; --- a/WebCore/inspector/Inspector.idl
&gt; +++ b/WebCore/inspector/Inspector.idl
&gt; @@ -72,7 +72,7 @@ module core {
&gt;          [notify] void debuggerWasDisabled();
&gt;          [notify] void failedToParseScriptSource(out String url, out String data, out int firstLine, out int errorLine, out String errorMessage);
&gt;          [notify] void parsedScriptSource(out String sourceID, out String url, out String data, out int firstLine, out int scriptWorldType);
&gt; -        [notify] void pausedScript(out Value callFrames);
&gt; +        [notify] void pausedScript(out Value callFrames, out Value details);
Instead of adding additional parameter change the Value parameter to Object and put the callFrames along with the details into it.


&gt;          [notify] void profilerWasEnabled();
&gt;          [notify] void profilerWasDisabled();
&gt;          [notify] void restoredBreakpoint(out String sourceID, out String url, out int line, out boolean enabled, out String condition);
&gt; diff --git a/WebCore/inspector/InspectorController.h b/WebCore/inspector/InspectorController.h
&gt; index 7ed2549..f9981a6 100644
&gt; --- a/WebCore/inspector/InspectorController.h
&gt; +++ b/WebCore/inspector/InspectorController.h
&gt; @@ -31,7 +31,10 @@
&gt;  
&gt;  #include &quot;Console.h&quot;
&gt;  #include &quot;Cookie.h&quot;
&gt; +#include &quot;Element.h&quot;
&gt;  #include &quot;InspectorDOMAgent.h&quot;
&gt; +#include &quot;InspectorDebuggerAgent.h&quot;
&gt; +#include &quot;Page.h&quot;
&gt;  #include &quot;PlatformString.h&quot;
&gt;  #include &quot;ScriptState.h&quot;
&gt;  #include &lt;wtf/HashMap.h&gt;
&gt; @@ -60,7 +63,6 @@ class InspectorClient;
&gt;  class InspectorCSSStore;
&gt;  class InspectorDOMStorageResource;
&gt;  class InspectorDatabaseResource;
&gt; -class InspectorDebuggerAgent;
&gt;  class InspectorFrontend;
&gt;  class InspectorFrontendClient;
&gt;  class InspectorObject;
&gt; @@ -183,9 +185,13 @@ public:
&gt;      void mainResourceFiredLoadEvent(DocumentLoader*, const KURL&amp;);
&gt;      void mainResourceFiredDOMContentEvent(DocumentLoader*, const KURL&amp;);
&gt;  
&gt; -    void didInsertDOMNode(Node*);
&gt; -    void didRemoveDOMNode(Node*);
&gt; -    void didModifyDOMAttr(Element*);
&gt; +    static void willInsertDOMNode(Node* node, Node* parent);
&gt; +    static void didInsertDOMNode(Node*);
&gt; +    static void willRemoveDOMNode(Node*);
&gt; +    static void willModifyDOMAttr(Element*);
&gt; +    static void didModifyDOMAttr(Element*);
&gt; +    static InspectorController* inspectorControllerForNode(Node*);
This method should be private.


&gt; +
&gt;  #if ENABLE(WORKERS)
&gt;      enum WorkerAction { WorkerCreated, WorkerDestroyed };
&gt;  
&gt; @@ -376,30 +382,84 @@ private:
&gt;  #endif
&gt;  };
&gt;  
&gt; +inline void InspectorController::willInsertDOMNode(Node* node, Node* parent)
&gt; +{
&gt; +#if ENABLE(JAVASCRIPT_DEBUGGER)
&gt; +    if (InspectorController* inspectorController = inspectorControllerForNode(node)) {
&gt; +        InspectorDebuggerAgent* debuggerAgent = inspectorController-&gt;debuggerAgent();
&gt; +        if (!debuggerAgent)
&gt; +            return;
&gt; +        InspectorDOMAgent* domAgent = inspectorController-&gt;domAgent();
&gt; +        if (!domAgent)
&gt; +            return;
&gt; +        RefPtr&lt;InspectorValue&gt; breakpoint = domAgent-&gt;getBreakpointForNodeInsertion(node, parent);
&gt; +        if (!breakpoint-&gt;isNull())
&gt; +            debuggerAgent-&gt;breakProgram(breakpoint);
&gt; +    }
&gt; +#endif
&gt; +}
&gt; +
&gt;  inline void InspectorController::didInsertDOMNode(Node* node)
&gt;  {
&gt;  #if ENABLE(INSPECTOR)
&gt; -    if (m_domAgent)
&gt; -        m_domAgent-&gt;didInsertDOMNode(node);
&gt; +    if (InspectorController* inspectorController = inspectorControllerForNode(node)) {
&gt; +        if (InspectorDOMAgent* domAgent = inspectorController-&gt;domAgent())
&gt; +            domAgent-&gt;didInsertDOMNode(node);
&gt; +    }
&gt;  #endif
&gt;  }
&gt;  
&gt; -inline void InspectorController::didRemoveDOMNode(Node* node)
&gt; +inline void InspectorController::willRemoveDOMNode(Node* node)
&gt;  {
&gt; -#if ENABLE(INSPECTOR)
&gt; -    if (m_domAgent)
&gt; -        m_domAgent-&gt;didRemoveDOMNode(node);
&gt; +#if ENABLE(JAVASCRIPT_DEBUGGER)
&gt; +    if (InspectorController* inspectorController = inspectorControllerForNode(node)) {
&gt; +        InspectorDOMAgent* domAgent = inspectorController-&gt;domAgent();
&gt; +        if (!domAgent)
&gt; +            return;
&gt; +        if (InspectorDebuggerAgent* debuggerAgent = inspectorController-&gt;debuggerAgent()) {
&gt; +            RefPtr&lt;InspectorValue&gt; breakpoint = domAgent-&gt;getBreakpointForNodeRemoval(node);
&gt; +            if (!breakpoint-&gt;isNull())
&gt; +                debuggerAgent-&gt;breakProgram(breakpoint);
&gt; +        }
&gt; +        domAgent-&gt;didRemoveDOMNode(node);
&gt; +    }
&gt; +#endif
&gt; +}
&gt; +
&gt; +inline void InspectorController::willModifyDOMAttr(Element* element)
&gt; +{
&gt; +#if ENABLE(JAVASCRIPT_DEBUGGER)
&gt; +    if (InspectorController* inspectorController = inspectorControllerForNode(element)) {
&gt; +        InspectorDebuggerAgent* debuggerAgent = inspectorController-&gt;debuggerAgent();
&gt; +        if (!debuggerAgent)
&gt; +            return;
&gt; +        InspectorDOMAgent* domAgent = inspectorController-&gt;domAgent();
&gt; +        if (!domAgent)
&gt; +            return;
&gt; +        RefPtr&lt;InspectorValue&gt; breakpoint = domAgent-&gt;getBreakpointForAttributeModification(element);
&gt; +        if (!breakpoint-&gt;isNull())
&gt; +            debuggerAgent-&gt;breakProgram(breakpoint);
&gt; +    }
&gt;  #endif
&gt;  }
&gt;  
&gt;  inline void InspectorController::didModifyDOMAttr(Element* element)
&gt;  {
&gt;  #if ENABLE(INSPECTOR)
&gt; -    if (m_domAgent)
&gt; -        m_domAgent-&gt;didModifyDOMAttr(element);
&gt; +    if (InspectorController* inspectorController = inspectorControllerForNode(element)) {
&gt; +        if (InspectorDOMAgent* domAgent = inspectorController-&gt;domAgent())
&gt; +            domAgent-&gt;didModifyDOMAttr(element);
&gt; +    }
&gt;  #endif
&gt;  }
&gt;  
&gt; +inline InspectorController* InspectorController::inspectorControllerForNode(Node* node)
&gt; +{
&gt; +    if (Page* page = node-&gt;document()-&gt;page())
&gt; +        return page-&gt;inspectorController();
&gt; +    return 0;
&gt; +}
&gt; +
&gt;  } // namespace WebCore
&gt;  
&gt;  #endif // !defined(InspectorController_h)
&gt; diff --git a/WebCore/inspector/InspectorDOMAgent.cpp b/WebCore/inspector/InspectorDOMAgent.cpp
&gt; index 82827bd..17e957e 100644
&gt; --- a/WebCore/inspector/InspectorDOMAgent.cpp
&gt; +++ b/WebCore/inspector/InspectorDOMAgent.cpp
&gt; @@ -64,7 +64,6 @@
&gt;  #include &quot;PlatformString.h&quot;
&gt;  #include &quot;RenderStyle.h&quot;
&gt;  #include &quot;RenderStyleConstants.h&quot;
&gt; -#include &quot;ScriptDebugServer.h&quot;
&gt;  #include &quot;ScriptEventListener.h&quot;
&gt;  #include &quot;StyleSheetList.h&quot;
&gt;  #include &quot;Text.h&quot;
&gt; @@ -210,8 +209,6 @@ const int domBreakpointDerivedTypeShift = 16;
&gt;  
&gt;  }
&gt;  
&gt; -InspectorDOMAgent* InspectorDOMAgent::s_domAgentOnBreakpoint = 0;
&gt; -
&gt;  InspectorDOMAgent::InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFrontend* frontend)
&gt;      : EventListener(InspectorDOMAgentType)
&gt;      , m_cssStore(cssStore)
&gt; @@ -224,9 +221,6 @@ InspectorDOMAgent::InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFront
&gt;  InspectorDOMAgent::~InspectorDOMAgent()
&gt;  {
&gt;      reset();
&gt; -
&gt; -    if (this == s_domAgentOnBreakpoint)
&gt; -        s_domAgentOnBreakpoint = 0;
&gt;  }
&gt;  
&gt;  void InspectorDOMAgent::reset()
&gt; @@ -780,6 +774,29 @@ void InspectorDOMAgent::removeDOMBreakpoint(long nodeId, long type)
&gt;      }
&gt;  }
&gt;  
&gt; +PassRefPtr&lt;InspectorValue&gt; InspectorDOMAgent::getBreakpointForNodeInsertion(Node*, Node* parent)
&gt; +{
&gt; +    if (hasBreakpoint(parent, SubtreeModified))
&gt; +        return createBreakpoint(parent, SubtreeModified);
&gt; +    return InspectorObject::null();
&gt; +}
&gt; +
&gt; +PassRefPtr&lt;InspectorValue&gt; InspectorDOMAgent::getBreakpointForNodeRemoval(Node* node)
&gt; +{
&gt; +    if (hasBreakpoint(node, NodeRemoved))
&gt; +        return createBreakpoint(node, NodeRemoved);
&gt; +    if (hasBreakpoint(innerParentNode(node), SubtreeModified))
&gt; +        return createBreakpoint(innerParentNode(node), SubtreeModified);
&gt; +    return InspectorObject::null();
&gt; +}
&gt; +
&gt; +PassRefPtr&lt;InspectorValue&gt; InspectorDOMAgent::getBreakpointForAttributeModification(Element* element)
&gt; +{
&gt; +    if (hasBreakpoint(element, AttributeModified))
&gt; +        return createBreakpoint(element, AttributeModified);
&gt; +    return InspectorObject::null();
&gt; +}
&gt; +
&gt;  String InspectorDOMAgent::documentURLString(Document* document) const
&gt;  {
&gt;      if (!document || document-&gt;url().isNull())
&gt; @@ -985,12 +1002,7 @@ void InspectorDOMAgent::didInsertDOMNode(Node* node)
&gt;          return;
&gt;  
&gt;      if (m_breakpoints.size()) {
&gt; -        Node* parent = innerParentNode(node);
&gt; -        if (hasBreakpoint(parent, SubtreeModified)) {
&gt; -            if (!pauseOnBreakpoint())
&gt; -                return;
&gt; -        }
&gt; -        uint32_t mask = m_breakpoints.get(parent);
&gt; +        uint32_t mask = m_breakpoints.get(innerParentNode(node));
&gt;          uint32_t inheritableTypesMask = (mask | (mask &gt;&gt; domBreakpointDerivedTypeShift)) &amp; inheritableDOMBreakpointTypesMask;
&gt;          if (inheritableTypesMask)
&gt;              updateSubtreeBreakpoints(node, inheritableTypesMask, true);
&gt; @@ -1023,10 +1035,6 @@ void InspectorDOMAgent::didRemoveDOMNode(Node* node)
&gt;          return;
&gt;  
&gt;      if (m_breakpoints.size()) {
&gt; -        if (hasBreakpoint(node, NodeRemoved) || hasBreakpoint(innerParentNode(node), SubtreeModified)) {
&gt; -            if (!pauseOnBreakpoint())
&gt; -                return;
&gt; -        }
&gt;          // Remove subtree breakpoints.
&gt;          m_breakpoints.remove(node);
&gt;          Vector&lt;Node*&gt; stack(1, innerFirstChild(node));
&gt; @@ -1063,12 +1071,24 @@ void InspectorDOMAgent::didModifyDOMAttr(Element* element)
&gt;      if (!id)
&gt;          return;
&gt;  
&gt; -    if (hasBreakpoint(element, AttributeModified)) {
&gt; -        if (!pauseOnBreakpoint())
&gt; -            return;
&gt; +    m_frontend-&gt;attributesUpdated(id, buildArrayForElementAttributes(element));
&gt; +}
&gt; +
&gt; +PassRefPtr&lt;InspectorObject&gt; InspectorDOMAgent::createBreakpoint(Node* node, long type)
&gt; +{
&gt; +    RefPtr&lt;InspectorObject&gt; breakpoint = InspectorObject::create();
&gt; +
&gt; +    // Find breakpoint owner.
&gt; +    while (!(m_breakpoints.get(node) &amp; (1 &lt;&lt; type))) {
&gt; +        node = innerParentNode(node);
&gt; +        ASSERT(node);
&gt;      }
&gt; +    long nodeId = m_documentNodeToIdMap.get(node);
&gt; +    ASSERT(nodeId);
&gt;  
&gt; -    m_frontend-&gt;attributesUpdated(id, buildArrayForElementAttributes(element));
&gt; +    breakpoint-&gt;setNumber(&quot;nodeId&quot;, nodeId);
&gt; +    breakpoint-&gt;setNumber(&quot;type&quot;, type);
&gt; +    return breakpoint.release();
&gt;  }
&gt;  
&gt;  bool InspectorDOMAgent::hasBreakpoint(Node* node, long type)
&gt; @@ -1078,19 +1098,6 @@ bool InspectorDOMAgent::hasBreakpoint(Node* node, long type)
&gt;      return m_breakpoints.get(node) &amp; (rootBit | derivedBit);
&gt;  }
&gt;  
&gt; -bool InspectorDOMAgent::pauseOnBreakpoint()
&gt; -{
&gt; -#if ENABLE(JAVASCRIPT_DEBUGGER)
&gt; -    s_domAgentOnBreakpoint = this;
&gt; -    ScriptDebugServer::shared().breakProgram();
&gt; -    bool deleted = !s_domAgentOnBreakpoint;
&gt; -    s_domAgentOnBreakpoint = 0;
&gt; -    return !deleted;
&gt; -#else
&gt; -    return true;
&gt; -#endif
&gt; -}
&gt; -
&gt;  void InspectorDOMAgent::updateSubtreeBreakpoints(Node* node, uint32_t rootMask, bool set)
&gt;  {
&gt;      uint32_t oldMask = m_breakpoints.get(node);
&gt; diff --git a/WebCore/inspector/InspectorDOMAgent.h b/WebCore/inspector/InspectorDOMAgent.h
&gt; index fd3c5b5..2787802 100644
&gt; --- a/WebCore/inspector/InspectorDOMAgent.h
&gt; +++ b/WebCore/inspector/InspectorDOMAgent.h
&gt; @@ -36,7 +36,6 @@
&gt;  #include &quot;InspectorCSSStore.h&quot;
&gt;  #include &quot;InspectorValues.h&quot;
&gt;  #include &quot;NodeList.h&quot;
&gt; -#include &quot;ScriptState.h&quot;
&gt;  #include &quot;Timer.h&quot;
&gt;  
&gt;  #include &lt;wtf/Deque.h&gt;
&gt; @@ -114,6 +113,9 @@ namespace WebCore {
&gt;          void searchCanceled();
&gt;          void setDOMBreakpoint(long nodeId, long type);
&gt;          void removeDOMBreakpoint(long nodeId, long type);
&gt; +        PassRefPtr&lt;InspectorValue&gt; getBreakpointForNodeInsertion(Node* node, Node* parent);
&gt; +        PassRefPtr&lt;InspectorValue&gt; getBreakpointForNodeRemoval(Node*);
&gt; +        PassRefPtr&lt;InspectorValue&gt; getBreakpointForAttributeModification(Element*);
&gt;  
&gt;          // Methods called from the frontend for CSS styles inspection.
&gt;          void getStyles(long nodeId, bool authorOnly, RefPtr&lt;InspectorValue&gt;* styles);
&gt; @@ -160,7 +162,7 @@ namespace WebCore {
&gt;          bool pushDocumentToFrontend();
&gt;  
&gt;          bool hasBreakpoint(Node* node, long type);
&gt; -        bool pauseOnBreakpoint();
&gt; +        PassRefPtr&lt;InspectorObject&gt; createBreakpoint(Node* node, long type);
&gt;          void updateSubtreeBreakpoints(Node* root, uint32_t rootMask, bool value);
&gt;  
&gt;          PassRefPtr&lt;InspectorObject&gt; buildObjectForAttributeStyles(Element* element);
&gt; @@ -217,8 +219,6 @@ namespace WebCore {
&gt;          HashSet&lt;RefPtr&lt;Node&gt; &gt; m_searchResults;
&gt;          Vector&lt;long&gt; m_inspectedNodes;
&gt;          HashMap&lt;Node*, uint32_t&gt; m_breakpoints;
&gt; -
&gt; -        static InspectorDOMAgent* s_domAgentOnBreakpoint;
&gt;      };
&gt;  
&gt;  #endif
&gt; diff --git a/WebCore/inspector/InspectorDebuggerAgent.cpp b/WebCore/inspector/InspectorDebuggerAgent.cpp
&gt; index 357a043..afba025 100644
&gt; --- a/WebCore/inspector/InspectorDebuggerAgent.cpp
&gt; +++ b/WebCore/inspector/InspectorDebuggerAgent.cpp
&gt; @@ -56,11 +56,14 @@ PassOwnPtr&lt;InspectorDebuggerAgent&gt; InspectorDebuggerAgent::create(InspectorContr
&gt;      return agent.release();
&gt;  }
&gt;  
&gt; +InspectorDebuggerAgent* InspectorDebuggerAgent::s_debuggerAgentOnBreakpoint = 0;
&gt; +
&gt;  InspectorDebuggerAgent::InspectorDebuggerAgent(InspectorController* inspectorController, InspectorFrontend* frontend)
&gt;      : m_inspectorController(inspectorController)
&gt;      , m_frontend(frontend)
&gt;      , m_pausedScriptState(0)
&gt;      , m_breakpointsLoaded(false)
&gt; +    , m_breakProgramDetails(InspectorValue::null())
&gt;  {
&gt;  }
&gt;  
&gt; @@ -68,6 +71,9 @@ InspectorDebuggerAgent::~InspectorDebuggerAgent()
&gt;  {
&gt;      ScriptDebugServer::shared().removeListener(this, m_inspectorController-&gt;inspectedPage());
&gt;      m_pausedScriptState = 0;
&gt; +
&gt; +    if (this == s_debuggerAgentOnBreakpoint)
&gt; +        s_debuggerAgentOnBreakpoint = 0;
&gt;  }
&gt;  
&gt;  bool InspectorDebuggerAgent::isDebuggerAlwaysEnabled()
&gt; @@ -283,8 +289,7 @@ void InspectorDebuggerAgent::didPause(ScriptState* scriptState)
&gt;  {
&gt;      ASSERT(scriptState &amp;&amp; !m_pausedScriptState);
&gt;      m_pausedScriptState = scriptState;
&gt; -    RefPtr&lt;InspectorValue&gt; callFrames = currentCallFrames();
&gt; -    m_frontend-&gt;pausedScript(callFrames.get());
&gt; +    m_frontend-&gt;pausedScript(currentCallFrames(), m_breakProgramDetails);
&gt;  }
&gt;  
&gt;  void InspectorDebuggerAgent::didContinue()
&gt; @@ -293,6 +298,19 @@ void InspectorDebuggerAgent::didContinue()
&gt;      m_frontend-&gt;resumedScript();
&gt;  }
&gt;  
&gt; +void InspectorDebuggerAgent::breakProgram(PassRefPtr&lt;InspectorValue&gt; details)
&gt; +{
&gt; +    s_debuggerAgentOnBreakpoint = this;
&gt; +    m_breakProgramDetails = details;
&gt; +
&gt; +    ScriptDebugServer::shared().breakProgram();
&gt; +    if (!s_debuggerAgentOnBreakpoint)
&gt; +        return;
&gt; +
&gt; +    s_debuggerAgentOnBreakpoint = 0;
&gt; +    m_breakProgramDetails = InspectorValue::null();
&gt; +}
&gt; +
&gt;  } // namespace WebCore
&gt;  
&gt;  #endif // ENABLE(JAVASCRIPT_DEBUGGER)
&gt; diff --git a/WebCore/inspector/InspectorDebuggerAgent.h b/WebCore/inspector/InspectorDebuggerAgent.h
&gt; index 91bcd49..6d6e8bc 100644
&gt; --- a/WebCore/inspector/InspectorDebuggerAgent.h
&gt; +++ b/WebCore/inspector/InspectorDebuggerAgent.h
&gt; @@ -61,6 +61,7 @@ public:
&gt;      void getScriptSource(const String&amp; sourceID, String* scriptSource);
&gt;  
&gt;      void pause();
&gt; +    void breakProgram(PassRefPtr&lt;InspectorValue&gt; details);
&gt;      void resume();
&gt;      void stepOverStatement();
&gt;      void stepIntoStatement();
&gt; @@ -93,6 +94,8 @@ private:
&gt;      HashMap&lt;String, SourceBreakpoints&gt; m_stickyBreakpoints;
&gt;      HashMap&lt;String, unsigned&gt; m_breakpointsMapping;
&gt;      bool m_breakpointsLoaded;
&gt; +    static InspectorDebuggerAgent* s_debuggerAgentOnBreakpoint;
&gt; +    RefPtr&lt;InspectorValue&gt; m_breakProgramDetails;
&gt;  };
&gt;  
&gt;  } // namespace WebCore
&gt; diff --git a/WebCore/inspector/InspectorValues.h b/WebCore/inspector/InspectorValues.h
&gt; index 3dd9594..4036f55 100644
&gt; --- a/WebCore/inspector/InspectorValues.h
&gt; +++ b/WebCore/inspector/InspectorValues.h
&gt; @@ -67,6 +67,8 @@ public:
&gt;  
&gt;      Type type() const { return m_type; }
&gt;  
&gt; +    bool isNull() const { return m_type == TypeNull; }
&gt; +
&gt;      virtual bool asBoolean(bool* output) const;
&gt;      virtual bool asNumber(double* output) const;
&gt;      virtual bool asNumber(long* output) const;
&gt; diff --git a/WebCore/inspector/front-end/BreakpointsSidebarPane.js b/WebCore/inspector/front-end/BreakpointsSidebarPane.js
&gt; index 3a0860f..29be646 100644
&gt; --- a/WebCore/inspector/front-end/BreakpointsSidebarPane.js
&gt; +++ b/WebCore/inspector/front-end/BreakpointsSidebarPane.js
&gt; @@ -106,7 +106,7 @@ WebInspector.BreakpointItem = function(breakpoint)
&gt;      this._element.appendChild(checkboxElement);
&gt;  
&gt;      this._breakpoint.addEventListener(&quot;enable-changed&quot;, this._enableChanged, this);
&gt; -    this._breakpoint.addEventListener(&quot;removed&quot;, this._removed, this);
&gt; +    this._breakpoint.addEventListener(&quot;removed&quot;, this.dispatchEventToListeners.bind(this, &quot;removed&quot;));
&gt;  }
&gt;  
&gt;  WebInspector.BreakpointItem.prototype = {
&gt; @@ -128,15 +128,10 @@ WebInspector.BreakpointItem.prototype = {
&gt;          event.stopPropagation();
&gt;      },
&gt;  
&gt; -    _enableChanged: function()
&gt; +    _enableChanged: function(event)
&gt;      {
&gt;          var checkbox = this._element.firstChild;
&gt;          checkbox.checked = this._breakpoint.enabled;
&gt; -    },
&gt; -
&gt; -    _removed: function()
&gt; -    {
&gt; -        this.dispatchEventToListeners(&quot;removed&quot;);
&gt;      }
&gt;  }
&gt;  
&gt; diff --git a/WebCore/inspector/front-end/DOMAgent.js b/WebCore/inspector/front-end/DOMAgent.js
&gt; index 5aaa0d3..e2c880a 100644
&gt; --- a/WebCore/inspector/front-end/DOMAgent.js
&gt; +++ b/WebCore/inspector/front-end/DOMAgent.js
&gt; @@ -417,7 +417,7 @@ WebInspector.DOMAgent.prototype = {
&gt;          parent.removeChild_(node);
&gt;          var event = { target : node, relatedNode : parent };
&gt;          this.document._fireDomEvent(&quot;DOMNodeRemoved&quot;, event);
&gt; -        delete this._idToDOMNode[nodeId];
&gt; +        delete this._idToDOMNode[node.id];
Why is that change?


&gt;      }
&gt;  }
&gt;  
&gt; @@ -719,6 +719,13 @@ WebInspector.DOMBreakpointManager.prototype = {
&gt;          for (var type in nodeBreakpoints)
&gt;              return;
&gt;          delete this._breakpoints[breakpoint.node.id];
&gt; +    },
&gt; +
&gt; +    breakpointHit: function(nodeId, type)
&gt; +    {
&gt; +        var nodeBreakpoints = this._breakpoints[nodeId];
&gt; +        if (type in nodeBreakpoints)
&gt; +            nodeBreakpoints[type].dispatchEventToListeners(&quot;hit&quot;);
&gt;      }
&gt;  }
&gt;  
&gt; diff --git a/WebCore/inspector/front-end/Script.js b/WebCore/inspector/front-end/Script.js
&gt; index 42d6850..2ef9328 100644
&gt; --- a/WebCore/inspector/front-end/Script.js
&gt; +++ b/WebCore/inspector/front-end/Script.js
&gt; @@ -62,11 +62,12 @@ WebInspector.Script.prototype = {
&gt;      {
&gt;          if (!this.source)
&gt;              return 0;
&gt; -        this._linesCount = 0;
&gt; +        var linesCount = 0;
I think the value was supposed to be cached. Instead of changing it into a local variable you should check whether it&apos;s been calculated.



&gt;          var lastIndex = this.source.indexOf(&quot;\n&quot;);
&gt;          while (lastIndex !== -1) {
&gt;              lastIndex = this.source.indexOf(&quot;\n&quot;, lastIndex + 1)
&gt; -            this._linesCount++;
&gt; +            linesCount++;
&gt;          }
&gt; +        return linesCount;
&gt;      }
&gt;  }
&gt; diff --git a/WebCore/inspector/front-end/inspector.js b/WebCore/inspector/front-end/inspector.js
&gt; index 26dfa09..11cbe98 100644
&gt; --- a/WebCore/inspector/front-end/inspector.js
&gt; +++ b/WebCore/inspector/front-end/inspector.js
&gt; @@ -1445,9 +1445,12 @@ WebInspector.failedToParseScriptSource = function(sourceURL, source, startingLin
&gt;      this.panels.scripts.addScript(null, sourceURL, source, startingLine, errorLine, errorMessage);
&gt;  }
&gt;  
&gt; -WebInspector.pausedScript = function(callFrames)
&gt; +WebInspector.pausedScript = function(callFrames, details)
&gt;  {
&gt;      this.panels.scripts.debuggerPaused(callFrames);
&gt; +    if (details)
&gt; +        this.domBreakpointManager.breakpointHit(details.nodeId, details.type);
&gt; +
&gt;      InspectorFrontendHost.bringToFront();
&gt;  }
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271405</commentid>
    <comment_count>9</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-30 06:46:00 -0700</bug_when>
    <thetext>Also we need tests for DOM breakpoints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272027</commentid>
    <comment_count>10</comment_count>
      <attachid>66030</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-08-31 04:18:02 -0700</bug_when>
    <thetext>Created attachment 66030
All comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272796</commentid>
    <comment_count>11</comment_count>
      <attachid>66210</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-09-01 07:25:58 -0700</bug_when>
    <thetext>Created attachment 66210
Rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272815</commentid>
    <comment_count>12</comment_count>
      <attachid>66210</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-01 08:28:03 -0700</bug_when>
    <thetext>Comment on attachment 66210
Rebase.

Rejecting patch 66210 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/build-webkit&apos;, &apos;--debug&apos;]&quot; exit_code: 1
Last 500 characters of output:
bKit.build/Debug/WebKit.build/Objects-normal/i386/WebInspectorClientCF.o /Users/eseidel/Projects/CommitQueue/WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp normal i386 c++ com.apple.compilers.gcc.4_2
	Distributed-CompileC /Users/eseidel/Projects/CommitQueue/WebKitBuild/WebKit.build/Debug/WebKit.build/Objects-normal/i386/WebInspectorFrontend.o /Users/eseidel/Projects/CommitQueue/WebKit/mac/WebInspector/WebInspectorFrontend.mm normal i386 objective-c++ com.apple.compilers.gcc.4_2
(7 failures)


Full output: http://queues.webkit.org/results/3899017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273290</commentid>
    <comment_count>13</comment_count>
      <attachid>66344</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-09-02 03:11:56 -0700</bug_when>
    <thetext>Created attachment 66344
Fixed compilation problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273409</commentid>
    <comment_count>14</comment_count>
      <attachid>66344</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-02 09:00:44 -0700</bug_when>
    <thetext>Comment on attachment 66344
Fixed compilation problem.

Rejecting patch 66344 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--wait-for-httpd&apos;, &apos;--ignore-tests&apos;, &apos;compositing,media&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Running build-dumprendertree
Compiling Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 20898 test cases.
dom/xhtml/level3/core/documentadoptnode12.xhtml -&gt; crashed

Exiting early after 1 failures. 3472 tests run.
753.46s total testing time

3471 test cases (99%) succeeded
1 test case (&lt;1%) crashed

Full output: http://queues.webkit.org/results/3958048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273418</commentid>
    <comment_count>15</comment_count>
      <attachid>66379</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-09-02 09:40:11 -0700</bug_when>
    <thetext>Created attachment 66379
Fix crash

InspectorController::willInsertDOMNode should get page from parent node, because child doesn&apos;t have document yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273864</commentid>
    <comment_count>16</comment_count>
      <attachid>66379</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-03 04:31:01 -0700</bug_when>
    <thetext>Comment on attachment 66379
Fix crash

Rejecting patch 66379 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--wait-for-httpd&apos;, &apos;--ignore-tests&apos;, &apos;compositing,media&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Running build-dumprendertree
Compiling Java tests
make: Nothing to be done for `default&apos;.
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 20910 test cases.
http/tests/inspector/resource-har-conversion.html -&gt; failed

Exiting early after 1 failures. 20042 tests run.
526.74s total testing time

20041 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
27 test cases (&lt;1%) had stderr output

Full output: http://queues.webkit.org/results/3946085</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273895</commentid>
    <comment_count>17</comment_count>
      <attachid>66484</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-09-03 05:49:09 -0700</bug_when>
    <thetext>Created attachment 66484
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273922</commentid>
    <comment_count>18</comment_count>
      <attachid>66484</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-03 07:02:11 -0700</bug_when>
    <thetext>Comment on attachment 66484
Proposed patch.

Clearing flags on attachment: 66484

Committed r66730: &lt;http://trac.webkit.org/changeset/66730&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273923</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-03 07:02:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273929</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-03 07:17:49 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66730 might have broken Qt Windows 32-bit Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65564</attachid>
            <date>2010-08-26 07:40:23 -0700</date>
            <delta_ts>2010-08-27 05:40:59 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>break_details.patch</filename>
            <type>text/plain</type>
            <size>24995</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWVhMjgzOS4uZTMyZTQwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw2MCBAQAogMjAxMC0wOC0yNiAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIG1vcmUgaW5mb3Jt
YXRpb24gdG8gZnJvbnQtZW5kIHdoZW4gYnJlYWtpbmcgb24gRE9NIGV2ZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDY3OQorCisgICAgICAgICog
ZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6
aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlcklu
c2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6ZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNl
cnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxS
ZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Ondp
bGxNb2RpZnlET01BdHRyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6fkluc3BlY3RvckRPTUFnZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRCcmVha3BvaW50Rm9yTm9kZUluc2Vy
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0QnJlYWtwb2lu
dEZvck5vZGVSZW1vdmFsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpn
ZXRCcmVha3BvaW50Rm9yQXR0cmlidXRlTW9kaWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpjcmVhdGVCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbSk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6aXNOdWxsKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEl0ZW0pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRJdGVtLnByb3RvdHlwZS5fZW5hYmxlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludEl0ZW0pOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvRE9NQWdlbnQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90
eXBlLl9jaGlsZE5vZGVSZW1vdmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5w
cm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuYnJlYWtwb2ludEhp
dCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5nZXQgbGluZXNDb3VudCk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
cGF1c2VkU2NyaXB0KToKKworMjAxMC0wOC0yNiAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92
QGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IGVuYWJsZSBkZWJ1Z2dlciBhZnRlciByZXNvdXJjZXMgYXJl
IHB1c2hlZCB0byBmcm9udC1lbmQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuY3BwIGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggZWY2MmIzOC4uNzk3
NTQ4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTEzNCw2ICsxMzQsMTMgQEAgYm9vbCBDb250
YWluZXJOb2RlOjppbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSog
cmVmQ2hpbGQsIEV4Y2UKICAgICAgICAgaWYgKGNoaWxkLT5wYXJlbnROb2RlKCkpCiAgICAgICAg
ICAgICBicmVhazsKIAorI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgICAgIGlmIChQYWdlKiBw
YWdlID0gY2hpbGQtPmRvY3VtZW50KCktPnBhZ2UoKSkgeworICAgICAgICAgICAgaWYgKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkpCisgICAgICAgICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+d2lsbEluc2Vy
dERPTU5vZGUodGhpcyk7CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIGluc2VydEJlZm9y
ZUNvbW1vbihuZXh0LmdldCgpLCBjaGlsZCk7CiAKICAgICAgICAgLy8gU2VuZCBub3RpZmljYXRp
b24gYWJvdXQgdGhlIGNoaWxkcmVuIGNoYW5nZS4KQEAgLTIwMSw2ICsyMDgsMTMgQEAgdm9pZCBD
b250YWluZXJOb2RlOjpwYXJzZXJJbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGls
ZCwgTm9kZSogbmV4dENoaWwKICAgICBmb3IgKE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRzLmVuZCgpOyArK2l0KSB7CiAgICAgICAg
IE5vZGUqIGNoaWxkID0gaXQtPmdldCgpOwogCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBjaGlsZC0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAg
ICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAgICAgICAgICAgICBpbnNwZWN0b3JDb250cm9s
bGVyLT53aWxsSW5zZXJ0RE9NTm9kZSh0aGlzKTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICAg
ICAgaW5zZXJ0QmVmb3JlQ29tbW9uKG5leHQuZ2V0KCksIGNoaWxkKTsKIAogICAgICAgICBjaGls
ZHJlbkNoYW5nZWQodHJ1ZSwgbmV4dENoaWxkUHJldmlvdXNTaWJsaW5nLmdldCgpLCBuZXh0Q2hp
bGQsIDEpOwpAQCAtMjc0LDYgKzI4OCwxMyBAQCBib29sIENvbnRhaW5lck5vZGU6OnJlcGxhY2VD
aGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZQogICAg
ICAgICBBU1NFUlQoIWNoaWxkLT5uZXh0U2libGluZygpKTsKICAgICAgICAgQVNTRVJUKCFjaGls
ZC0+cHJldmlvdXNTaWJsaW5nKCkpOwogCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAg
aWYgKFBhZ2UqIHBhZ2UgPSBjaGlsZC0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAgICAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAgICAgICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVy
LT53aWxsSW5zZXJ0RE9NTm9kZSh0aGlzKTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICAgICAg
Ly8gQWRkIGNoaWxkIGFmdGVyICJwcmV2Ii4KICAgICAgICAgZm9yYmlkRXZlbnREaXNwYXRjaCgp
OwogICAgICAgICBOb2RlKiBuZXh0OwpAQCAtNTU1LDYgKzU3NiwxMyBAQCBib29sIENvbnRhaW5l
ck5vZGU6OmFwcGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIEV4Y2VwdGlvbkNv
ZGUmIGVjLCBibwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGNoaWxkLT5kb2N1bWVudCgp
LT5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQorICAgICAgICAgICAg
ICAgIGluc3BlY3RvckNvbnRyb2xsZXItPndpbGxJbnNlcnRET01Ob2RlKHRoaXMpOworICAgICAg
ICB9CisjZW5kaWYKKwogICAgICAgICAvLyBBcHBlbmQgY2hpbGQgdG8gdGhlIGVuZCBvZiB0aGUg
bGlzdAogICAgICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7CiAgICAgICAgIGNoaWxkLT5zZXRQ
YXJlbnQodGhpcyk7CkBAIC01OTMsNiArNjIxLDEzIEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cGFy
c2VyQWRkQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCkKICAgICBBU1NFUlQobmV3Q2hp
bGQpOwogICAgIEFTU0VSVCghbmV3Q2hpbGQtPnBhcmVudCgpKTsgLy8gVXNlIGFwcGVuZENoaWxk
IGlmIHlvdSBuZWVkIHRvIGhhbmRsZSByZXBhcmVudGluZyAoYW5kIHdhbnQgRE9NIG11dGF0aW9u
IGV2ZW50cykuCiAKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICBpZiAoUGFnZSogcGFn
ZSA9IG5ld0NoaWxkLT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpKQorICAgICAgICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPndpbGxJbnNl
cnRET01Ob2RlKHRoaXMpOworICAgICAgICB9CisjZW5kaWYKKwogICAgIGZvcmJpZEV2ZW50RGlz
cGF0Y2goKTsKICAgICBOb2RlKiBsYXN0ID0gbV9sYXN0Q2hpbGQ7CiAgICAgLy8gRklYTUU6IFRo
aXMgbWV0aG9kIHNob3VsZCB0YWtlIGEgUGFzc1JlZlB0ci4KQEAgLTEwMDUsOCArMTA0MCwxMCBA
QCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKiBjaGlsZCkKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1IpICAgIAogICAgIGlmIChQYWdlKiBwYWdlID0gY2hpbGQtPmRv
Y3VtZW50KCktPnBhZ2UoKSkgewotICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5z
cGVjdG9yQ29udHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAgICAg
aWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCkpIHsKKyAgICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPndp
bGxSZW1vdmVET01Ob2RlKGNoaWxkKTsKICAgICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXIt
PmRpZFJlbW92ZURPTU5vZGUoY2hpbGQpOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKaW5kZXggMmQ0NGY2Mi4uZTFkYjZjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTU0MCw2ICs1NDAsMTUgQEAg
dm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlLAogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgRU5B
QkxFKElOU1BFQ1RPUikKKyAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkg
eworICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9
IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkgeworICAgICAgICAgICAgaWYgKCFpc1N5bmNo
cm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgICAgIGluc3BlY3RvckNvbnRy
b2xsZXItPndpbGxNb2RpZnlET01BdHRyKHRoaXMpOworICAgICAgICB9CisgICAgfQorI2VuZGlm
CisKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJp
YnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwogCiAgICAgLy8gQWxsb2NhdGUg
YXR0cmlidXRlIG1hcCBpZiBuZWNlc3NhcnkuCkBAIC01NzQsNiArNTgzLDE1IEBAIHZvaWQgRWxl
bWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSwKIAogdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYp
CiB7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50
KCktPnBhZ2UoKSkgeworICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkgeworICAgICAgICAgICAg
aWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgICAgIGlu
c3BlY3RvckNvbnRyb2xsZXItPndpbGxNb2RpZnlET01BdHRyKHRoaXMpOworICAgICAgICB9Cisg
ICAgfQorI2VuZGlmCisKICAgICBkb2N1bWVudCgpLT5pbmNET01UcmVlVmVyc2lvbigpOwogCiAg
ICAgLy8gQWxsb2NhdGUgYXR0cmlidXRlIG1hcCBpZiBuZWNlc3NhcnkuCkBAIC0xMjI4LDYgKzEy
NDYsMTMgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW4KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVB
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgp
KSB7CisgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
ID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQorICAgICAgICAgICAgaW5zcGVjdG9yQ29u
dHJvbGxlci0+d2lsbE1vZGlmeURPTUF0dHIodGhpcyk7CisgICAgfQorI2VuZGlmCisKICAgICBT
dHJpbmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUu
bG93ZXIoKSA6IG5hbWU7CiAKICAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsCmluZGV4IDdmMzlmOGQuLjE3YmI1ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlk
bApAQCAtNzMsNyArNzMsNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtub3RpZnldIHZvaWQg
ZGVidWdnZXJXYXNEaXNhYmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIGZhaWxlZFRvUGFy
c2VTY3JpcHRTb3VyY2Uob3V0IFN0cmluZyB1cmwsIG91dCBTdHJpbmcgZGF0YSwgb3V0IGludCBm
aXJzdExpbmUsIG91dCBpbnQgZXJyb3JMaW5lLCBvdXQgU3RyaW5nIGVycm9yTWVzc2FnZSk7CiAg
ICAgICAgIFtub3RpZnldIHZvaWQgcGFyc2VkU2NyaXB0U291cmNlKG91dCBTdHJpbmcgc291cmNl
SUQsIG91dCBTdHJpbmcgdXJsLCBvdXQgU3RyaW5nIGRhdGEsIG91dCBpbnQgZmlyc3RMaW5lLCBv
dXQgaW50IHNjcmlwdFdvcmxkVHlwZSk7Ci0gICAgICAgIFtub3RpZnldIHZvaWQgcGF1c2VkU2Ny
aXB0KG91dCBWYWx1ZSBjYWxsRnJhbWVzKTsKKyAgICAgICAgW25vdGlmeV0gdm9pZCBwYXVzZWRT
Y3JpcHQob3V0IFZhbHVlIGNhbGxGcmFtZXMsIG91dCBWYWx1ZSBkZXRhaWxzKTsKICAgICAgICAg
W25vdGlmeV0gdm9pZCBwcm9maWxlcldhc0VuYWJsZWQoKTsKICAgICAgICAgW25vdGlmeV0gdm9p
ZCBwcm9maWxlcldhc0Rpc2FibGVkKCk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgcmVzdG9yZWRC
cmVha3BvaW50KG91dCBTdHJpbmcgc291cmNlSUQsIG91dCBTdHJpbmcgdXJsLCBvdXQgaW50IGxp
bmUsIG91dCBib29sZWFuIGVuYWJsZWQsIG91dCBTdHJpbmcgY29uZGl0aW9uKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggODkwZDU5OS4uMzc2Njk4MCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTkzNiw2ICs5
MzYsMzkgQEAgYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjppc01haW5SZXNvdXJjZUxvYWRlcihE
b2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBLVVIKICAgICByZXR1cm4gbG9hZGVyLT5mcmFt
ZSgpID09IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkgJiYgcmVxdWVzdFVybCA9PSBsb2Fk
ZXItPnJlcXVlc3RVUkwoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsSW5z
ZXJ0RE9NTm9kZShOb2RlKiBub2RlKQoreworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQorICAgIGlmICghbV9kb21BZ2VudCB8fCAhbV9kZWJ1Z2dlckFnZW50KQorICAgICAgICByZXR1
cm47CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBicmVha3BvaW50ID0gbV9kb21BZ2VudC0+
Z2V0QnJlYWtwb2ludEZvck5vZGVJbnNlcnRpb24obm9kZSk7CisgICAgaWYgKCFicmVha3BvaW50
LT5pc051bGwoKSkKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oYnJlYWtw
b2ludCk7CisjZW5kaWYKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsUmVtb3Zl
RE9NTm9kZShOb2RlKiBub2RlKQoreworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQor
ICAgIGlmICghbV9kb21BZ2VudCB8fCAhbV9kZWJ1Z2dlckFnZW50KQorICAgICAgICByZXR1cm47
CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBicmVha3BvaW50ID0gbV9kb21BZ2VudC0+Z2V0
QnJlYWtwb2ludEZvck5vZGVSZW1vdmFsKG5vZGUpOworICAgIGlmICghYnJlYWtwb2ludC0+aXNO
dWxsKCkpCisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKGJyZWFrcG9pbnQp
OworI2VuZGlmCit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0
dHIoRWxlbWVudCogZWxlbWVudCkKK3sKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
KyAgICBpZiAoIW1fZG9tQWdlbnQgfHwgIW1fZGVidWdnZXJBZ2VudCkKKyAgICAgICAgcmV0dXJu
OworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnJlYWtwb2ludCA9IG1fZG9tQWdlbnQtPmdl
dEJyZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2RpZmljYXRpb24oZWxlbWVudCk7CisgICAgaWYgKCFi
cmVha3BvaW50LT5pc051bGwoKSkKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dy
YW0oYnJlYWtwb2ludCk7CisjZW5kaWYKK30KKwogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3
aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAg
ICAgaWYgKCFlbmFibGVkKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgK
aW5kZXggN2VkMjU0OS4uZGI4OTRhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaApAQCAtMTgzLDYgKzE4Myw5IEBAIHB1YmxpYzoKICAgICB2b2lkIG1haW5SZXNvdXJj
ZUZpcmVkTG9hZEV2ZW50KERvY3VtZW50TG9hZGVyKiwgY29uc3QgS1VSTCYpOwogICAgIHZvaWQg
bWFpblJlc291cmNlRmlyZWRET01Db250ZW50RXZlbnQoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBL
VVJMJik7CiAKKyAgICB2b2lkIHdpbGxJbnNlcnRET01Ob2RlKE5vZGUqKTsKKyAgICB2b2lkIHdp
bGxSZW1vdmVET01Ob2RlKE5vZGUqKTsKKyAgICB2b2lkIHdpbGxNb2RpZnlET01BdHRyKEVsZW1l
bnQqKTsKICAgICB2b2lkIGRpZEluc2VydERPTU5vZGUoTm9kZSopOwogICAgIHZvaWQgZGlkUmVt
b3ZlRE9NTm9kZShOb2RlKik7CiAgICAgdm9pZCBkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBiOGFlMDQ3Li40YTUw
ZmNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC02Myw3ICs2
Myw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiU2NyaXB0
RGVidWdTZXJ2ZXIuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVk
ZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC0yMDksOCArMjA4LDYg
QEAgY29uc3QgaW50IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0ID0gMTY7CiAKIH0KIAot
SW5zcGVjdG9yRE9NQWdlbnQqIEluc3BlY3RvckRPTUFnZW50OjpzX2RvbUFnZW50T25CcmVha3Bv
aW50ID0gMDsKLQogSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3BlY3Rv
ckNTU1N0b3JlKiBjc3NTdG9yZSwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAgIDog
RXZlbnRMaXN0ZW5lcihJbnNwZWN0b3JET01BZ2VudFR5cGUpCiAgICAgLCBtX2Nzc1N0b3JlKGNz
c1N0b3JlKQpAQCAtMjIzLDkgKzIyMCw2IEBAIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JE
T01BZ2VudChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250CiBJbnNw
ZWN0b3JET01BZ2VudDo6fkluc3BlY3RvckRPTUFnZW50KCkKIHsKICAgICByZXNldCgpOwotCi0g
ICAgaWYgKHRoaXMgPT0gc19kb21BZ2VudE9uQnJlYWtwb2ludCkKLSAgICAgICAgc19kb21BZ2Vu
dE9uQnJlYWtwb2ludCA9IDA7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KCkK
QEAgLTc3MCw2ICs3NjQsMjkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlRE9NQnJl
YWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQogICAgIH0KIH0KIAorUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEJyZWFrcG9pbnRGb3JOb2RlSW5z
ZXJ0aW9uKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQobm9kZSwgU3VidHJl
ZU1vZGlmaWVkKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUJyZWFrcG9pbnQobm9kZSwgU3VidHJl
ZU1vZGlmaWVkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yT2JqZWN0OjpudWxsKCk7Cit9CisKK1Bh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckRPTUFnZW50OjpnZXRCcmVha3BvaW50
Rm9yTm9kZVJlbW92YWwoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoaGFzQnJlYWtwb2ludChub2Rl
LCBOb2RlUmVtb3ZlZCkpCisgICAgICAgIHJldHVybiBjcmVhdGVCcmVha3BvaW50KG5vZGUsIE5v
ZGVSZW1vdmVkKTsKKyAgICBpZiAoaGFzQnJlYWtwb2ludChpbm5lclBhcmVudE5vZGUobm9kZSks
IFN1YnRyZWVNb2RpZmllZCkpCisgICAgICAgIHJldHVybiBjcmVhdGVCcmVha3BvaW50KGlubmVy
UGFyZW50Tm9kZShub2RlKSwgU3VidHJlZU1vZGlmaWVkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9y
T2JqZWN0OjpudWxsKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3Rv
ckRPTUFnZW50OjpnZXRCcmVha3BvaW50Rm9yQXR0cmlidXRlTW9kaWZpY2F0aW9uKEVsZW1lbnQq
IGVsZW1lbnQpCit7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQoZWxlbWVudCwgQXR0cmlidXRlTW9k
aWZpZWQpKQorICAgICAgICByZXR1cm4gY3JlYXRlQnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1
dGVNb2RpZmllZCk7CisgICAgcmV0dXJuIEluc3BlY3Rvck9iamVjdDo6bnVsbCgpOworfQorCiBT
dHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1
bWVudCkgY29uc3QKIHsKICAgICBpZiAoIWRvY3VtZW50IHx8IGRvY3VtZW50LT51cmwoKS5pc051
bGwoKSkKQEAgLTk3MSwxMiArOTg4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW5z
ZXJ0RE9NTm9kZShOb2RlKiBub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9icmVh
a3BvaW50cy5zaXplKCkpIHsKLSAgICAgICAgTm9kZSogcGFyZW50ID0gaW5uZXJQYXJlbnROb2Rl
KG5vZGUpOwotICAgICAgICBpZiAoaGFzQnJlYWtwb2ludChwYXJlbnQsIFN1YnRyZWVNb2RpZmll
ZCkpIHsKLSAgICAgICAgICAgIGlmICghcGF1c2VPbkJyZWFrcG9pbnQoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdWludDMyX3QgbWFzayA9IG1fYnJlYWtw
b2ludHMuZ2V0KHBhcmVudCk7CisgICAgICAgIHVpbnQzMl90IG1hc2sgPSBtX2JyZWFrcG9pbnRz
LmdldChpbm5lclBhcmVudE5vZGUobm9kZSkpOwogICAgICAgICB1aW50MzJfdCBpbmhlcml0YWJs
ZVR5cGVzTWFzayA9IChtYXNrIHwgKG1hc2sgPj4gZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hp
ZnQpKSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzazsKICAgICAgICAgaWYgKGlu
aGVyaXRhYmxlVHlwZXNNYXNrKQogICAgICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRz
KG5vZGUsIGluaGVyaXRhYmxlVHlwZXNNYXNrLCB0cnVlKTsKQEAgLTEwMDksMTAgKzEwMjEsNiBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2JyZWFrcG9pbnRzLnNpemUoKSkgewotICAgICAg
ICBpZiAoaGFzQnJlYWtwb2ludChub2RlLCBOb2RlUmVtb3ZlZCkgfHwgaGFzQnJlYWtwb2ludChp
bm5lclBhcmVudE5vZGUobm9kZSksIFN1YnRyZWVNb2RpZmllZCkpIHsKLSAgICAgICAgICAgIGlm
ICghcGF1c2VPbkJyZWFrcG9pbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KICAgICAgICAgLy8gUmVtb3ZlIHN1YnRyZWUgYnJlYWtwb2ludHMuCiAgICAgICAgIG1fYnJl
YWtwb2ludHMucmVtb3ZlKG5vZGUpOwogICAgICAgICBWZWN0b3I8Tm9kZSo+IHN0YWNrKDEsIGlu
bmVyRmlyc3RDaGlsZChub2RlKSk7CkBAIC0xMDQ5LDEyICsxMDU3LDI0IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaGFzQnJlYWtwb2ludChlbGVtZW50LCBB
dHRyaWJ1dGVNb2RpZmllZCkpIHsKLSAgICAgICAgaWYgKCFwYXVzZU9uQnJlYWtwb2ludCgpKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgIG1fZnJvbnRlbmQtPmF0dHJpYnV0ZXNVcGRhdGVkKGlk
LCBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCkpOworfQorCitQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZUJyZWFrcG9pbnQo
Tm9kZSogbm9kZSwgbG9uZyB0eXBlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJy
ZWFrcG9pbnQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworCisgICAgLy8gRmluZCBicmVh
a3BvaW50IG93bmVyLgorICAgIHdoaWxlKCEobV9icmVha3BvaW50cy5nZXQobm9kZSkgJiAoMSA8
PCB0eXBlKSkpIHsKKyAgICAgICAgbm9kZSA9IGlubmVyUGFyZW50Tm9kZShub2RlKTsKKyAgICAg
ICAgQVNTRVJUKG5vZGUpOwogICAgIH0KKyAgICBsb25nIG5vZGVJZCA9IG1fZG9jdW1lbnROb2Rl
VG9JZE1hcC5nZXQobm9kZSk7CisgICAgQVNTRVJUKG5vZGVJZCk7CiAKLSAgICBtX2Zyb250ZW5k
LT5hdHRyaWJ1dGVzVXBkYXRlZChpZCwgYnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVs
ZW1lbnQpKTsKKyAgICBicmVha3BvaW50LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7Cisg
ICAgYnJlYWtwb2ludC0+c2V0TnVtYmVyKCJ0eXBlIiwgdHlwZSk7CisgICAgcmV0dXJuIGJyZWFr
cG9pbnQucmVsZWFzZSgpOwogfQogCiBib29sIEluc3BlY3RvckRPTUFnZW50OjpoYXNCcmVha3Bv
aW50KE5vZGUqIG5vZGUsIGxvbmcgdHlwZSkKQEAgLTEwNjQsMTkgKzEwODQsNiBAQCBib29sIElu
c3BlY3RvckRPTUFnZW50OjpoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUsIGxvbmcgdHlwZSkKICAg
ICByZXR1cm4gbV9icmVha3BvaW50cy5nZXQobm9kZSkgJiAocm9vdEJpdCB8IGRlcml2ZWRCaXQp
OwogfQogCi1ib29sIEluc3BlY3RvckRPTUFnZW50OjpwYXVzZU9uQnJlYWtwb2ludCgpCi17Ci0j
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgc19kb21BZ2VudE9uQnJlYWtwb2lu
dCA9IHRoaXM7Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmJyZWFrUHJvZ3JhbSgp
OwotICAgIGJvb2wgZGVsZXRlZCA9ICFzX2RvbUFnZW50T25CcmVha3BvaW50OwotICAgIHNfZG9t
QWdlbnRPbkJyZWFrcG9pbnQgPSAwOwotICAgIHJldHVybiAhZGVsZXRlZDsKLSNlbHNlCi0gICAg
cmV0dXJuIHRydWU7Ci0jZW5kaWYKLX0KLQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dXBkYXRl
U3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqIG5vZGUsIHVpbnQzMl90IHJvb3RNYXNrLCBib29sIHNl
dCkKIHsKICAgICB1aW50MzJfdCBvbGRNYXNrID0gbV9icmVha3BvaW50cy5nZXQobm9kZSk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCBmZDNjNWI1Li4wY2FjYTYyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTM2LDcgKzM2LDYgQEAKICNp
bmNsdWRlICJJbnNwZWN0b3JDU1NTdG9yZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5o
IgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNs
dWRlICJUaW1lci5oIgogCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC0xMTQsNiArMTEzLDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7CiAg
ICAgICAgIHZvaWQgc2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKICAg
ICAgICAgdm9pZCByZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOwor
ICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBnZXRCcmVha3BvaW50Rm9yTm9kZUlu
c2VydGlvbihOb2RlKik7CisgICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldEJy
ZWFrcG9pbnRGb3JOb2RlUmVtb3ZhbChOb2RlKik7CisgICAgICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGdldEJyZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2RpZmljYXRpb24oRWxlbWVudCop
OwogCiAgICAgICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhlIGZyb250ZW5kIGZvciBDU1Mg
c3R5bGVzIGluc3BlY3Rpb24uCiAgICAgICAgIHZvaWQgZ2V0U3R5bGVzKGxvbmcgbm9kZUlkLCBi
b29sIGF1dGhvck9ubHksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlcyk7CkBAIC0xNjAs
NyArMTYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHB1c2hEb2N1bWVu
dFRvRnJvbnRlbmQoKTsKIAogICAgICAgICBib29sIGhhc0JyZWFrcG9pbnQoTm9kZSogbm9kZSwg
bG9uZyB0eXBlKTsKLSAgICAgICAgYm9vbCBwYXVzZU9uQnJlYWtwb2ludCgpOworICAgICAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlQnJlYWtwb2ludChOb2RlKiBub2RlLCBs
b25nIHR5cGUpOwogICAgICAgICB2b2lkIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2RlKiBy
b290LCB1aW50MzJfdCByb290TWFzaywgYm9vbCB2YWx1ZSk7CiAKICAgICAgICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKEVsZW1lbnQq
IGVsZW1lbnQpOwpAQCAtMjE3LDggKzIxOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBtX3NlYXJjaFJlc3VsdHM7CiAgICAgICAgIFZlY3Rv
cjxsb25nPiBtX2luc3BlY3RlZE5vZGVzOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCB1aW50MzJf
dD4gbV9icmVha3BvaW50czsKLQotICAgICAgICBzdGF0aWMgSW5zcGVjdG9yRE9NQWdlbnQqIHNf
ZG9tQWdlbnRPbkJyZWFrcG9pbnQ7CiAgICAgfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDM1N2EwNDMuLmFmYmEwMjUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC01Niwx
MSArNTYsMTQgQEAgUGFzc093blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zcGVjdG9yQ29udHIKICAgICByZXR1cm4gYWdlbnQucmVs
ZWFzZSgpOwogfQogCitJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQgPSAwOworCiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
Y3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICA6IG1faW5z
cGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQogICAgICwgbV9mcm9udGVuZChm
cm9udGVuZCkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKICAgICAsIG1fYnJlYWtwb2lu
dHNMb2FkZWQoZmFsc2UpCisgICAgLCBtX2JyZWFrUHJvZ3JhbURldGFpbHMoSW5zcGVjdG9yVmFs
dWU6Om51bGwoKSkKIHsKIH0KIApAQCAtNjgsNiArNzEsOSBAQCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50Ojp+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpCiB7CiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLnJlbW92ZUxpc3RlbmVyKHRoaXMsIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5z
cGVjdGVkUGFnZSgpKTsKICAgICBtX3BhdXNlZFNjcmlwdFN0YXRlID0gMDsKKworICAgIGlmICh0
aGlzID09IHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCkKKyAgICAgICAgc19kZWJ1Z2dlckFn
ZW50T25CcmVha3BvaW50ID0gMDsKIH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpp
c0RlYnVnZ2VyQWx3YXlzRW5hYmxlZCgpCkBAIC0yODMsOCArMjg5LDcgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiAg
ICAgQVNTRVJUKHNjcmlwdFN0YXRlICYmICFtX3BhdXNlZFNjcmlwdFN0YXRlKTsKICAgICBtX3Bh
dXNlZFNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGU7Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBjYWxsRnJhbWVzID0gY3VycmVudENhbGxGcmFtZXMoKTsKLSAgICBtX2Zyb250ZW5kLT5wYXVz
ZWRTY3JpcHQoY2FsbEZyYW1lcy5nZXQoKSk7CisgICAgbV9mcm9udGVuZC0+cGF1c2VkU2NyaXB0
KGN1cnJlbnRDYWxsRnJhbWVzKCksIG1fYnJlYWtQcm9ncmFtRGV0YWlscyk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQpAQCAtMjkzLDYgKzI5OCwxOSBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKICAgICBtX2Zyb250
ZW5kLT5yZXN1bWVkU2NyaXB0KCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
YnJlYWtQcm9ncmFtKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRldGFpbHMpCit7CisgICAg
c19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50ID0gdGhpczsKKyAgICBtX2JyZWFrUHJvZ3JhbURl
dGFpbHMgPSBkZXRhaWxzOworCisgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmJyZWFr
UHJvZ3JhbSgpOworICAgIGlmICghc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQgPSAwOworICAgIG1f
YnJlYWtQcm9ncmFtRGV0YWlscyA9IEluc3BlY3RvclZhbHVlOjpudWxsKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDkxYmNk
NDkuLjZkNmU4YmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0U2NyaXB0U291cmNlKGNv
bnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2NyaXB0U291cmNlKTsKIAogICAgIHZvaWQg
cGF1c2UoKTsKKyAgICB2b2lkIGJyZWFrUHJvZ3JhbShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBkZXRhaWxzKTsKICAgICB2b2lkIHJlc3VtZSgpOwogICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1l
bnQoKTsKICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50KCk7CkBAIC05Myw2ICs5NCw4IEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPiBtX3N0aWNreUJy
ZWFrcG9pbnRzOwogICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZD4gbV9icmVha3BvaW50c01h
cHBpbmc7CiAgICAgYm9vbCBtX2JyZWFrcG9pbnRzTG9hZGVkOworICAgIHN0YXRpYyBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50KiBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQ7CisgICAgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBtX2JyZWFrUHJvZ3JhbURldGFpbHM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IDQ3M2FkMjEu
LmY4OGY0MzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC02Nyw2ICs2Nyw4
IEBAIHB1YmxpYzoKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQog
CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZU51bGw7IH0K
KwogICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2woYm9vbCogb3V0cHV0KSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgYXNOdW1iZXIoZG91YmxlKiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBhc051bWJlcihsb25nKiBvdXRwdXQpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcwppbmRleCBjY2Y0NWI2Li44
MjM3NmVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2lu
dHNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtw
b2ludHNTaWRlYmFyUGFuZS5qcwpAQCAtMTA2LDcgKzEwNiw3IEBAIFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50SXRlbSA9IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAgICAgdGhpcy5fZWxlbWVudC5hcHBl
bmRDaGlsZChjaGVja2JveEVsZW1lbnQpOwogCiAgICAgdGhpcy5fYnJlYWtwb2ludC5hZGRFdmVu
dExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIHRoaXMuX2VuYWJsZUNoYW5nZWQsIHRoaXMpOwot
ICAgIHRoaXMuX2JyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX3Jl
bW92ZWQsIHRoaXMpOworICAgIHRoaXMuX2JyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVt
b3ZlZCIsIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzLmJpbmQodGhpcywgInJlbW92ZWQi
KSk7CiB9CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRlbS5wcm90b3R5cGUgPSB7CkBAIC0x
MjgsMTUgKzEyOCwxMCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEl0ZW0ucHJvdG90eXBlID0g
ewogICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICB9LAogCi0gICAgX2VuYWJs
ZUNoYW5nZWQ6IGZ1bmN0aW9uKCkKKyAgICBfZW5hYmxlQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQp
CiAgICAgewogICAgICAgICB2YXIgY2hlY2tib3ggPSB0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQ7
CiAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB0aGlzLl9icmVha3BvaW50LmVuYWJsZWQ7Ci0g
ICAgfSwKLQotICAgIF9yZW1vdmVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycygicmVtb3ZlZCIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCmluZGV4IGJkNTIyMzUuLjVjYjZkMTIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKQEAgLTQxMyw4ICs0MTMsMTggQEAg
V2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgcGFyZW50LnJlbW92
ZUNoaWxkXyhub2RlKTsKICAgICAgICAgdmFyIGV2ZW50ID0geyB0YXJnZXQgOiBub2RlLCByZWxh
dGVkTm9kZSA6IHBhcmVudCB9OwogICAgICAgICB0aGlzLmRvY3VtZW50Ll9maXJlRG9tRXZlbnQo
IkRPTU5vZGVSZW1vdmVkIiwgZXZlbnQpOwotICAgICAgICBkZWxldGUgdGhpcy5faWRUb0RPTU5v
ZGVbbm9kZUlkXTsKLSAgICB9CisgICAgICAgIGRlbGV0ZSB0aGlzLl9pZFRvRE9NTm9kZVtub2Rl
LmlkXTsKKyAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludHMobm9kZSk7CisgICAgfSwKKwor
ICAgIF9yZW1vdmVCcmVha3BvaW50czogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5kb21CcmVha3BvaW50TWFuYWdlci5yZW1vdmVCcmVha3BvaW50c0Zvck5vZGUo
bm9kZSk7CisgICAgICAgIGlmICghbm9kZS5jaGlsZHJlbikKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludHMobm9kZS5jaGlsZHJlbltpXSk7Cisg
ICAgIH0KIH0KIAogV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGUgPSB7fQpAQCAtNzA4LDYg
KzcxOCwxMyBAQCBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICBmb3IgKHZhciB0eXBlIGluIG5vZGVCcmVha3BvaW50cykKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQubm9k
ZS5pZF07CisgICAgfSwKKworICAgIGJyZWFrcG9pbnRIaXQ6IGZ1bmN0aW9uKG5vZGVJZCwgdHlw
ZSkKKyAgICB7CisgICAgICAgIHZhciBub2RlQnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50
c1tub2RlSWRdOworICAgICAgICBpZiAodHlwZSBpbiBub2RlQnJlYWtwb2ludHMpCisgICAgICAg
ICAgICBub2RlQnJlYWtwb2ludHNbdHlwZV0uZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJoaXQi
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
Y3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzCmluZGV4IDQy
ZDY4NTAuLjJlZjkzMjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
Y3JpcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdC5qcwpAQCAt
NjIsMTEgKzYyLDEyIEBAIFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlID0gewogICAgIHsK
ICAgICAgICAgaWYgKCF0aGlzLnNvdXJjZSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB0aGlzLl9saW5lc0NvdW50ID0gMDsKKyAgICAgICAgdmFyIGxpbmVzQ291bnQgPSAwOwogICAg
ICAgICB2YXIgbGFzdEluZGV4ID0gdGhpcy5zb3VyY2UuaW5kZXhPZigiXG4iKTsKICAgICAgICAg
d2hpbGUgKGxhc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgIGxhc3RJbmRleCA9IHRoaXMu
c291cmNlLmluZGV4T2YoIlxuIiwgbGFzdEluZGV4ICsgMSkKLSAgICAgICAgICAgIHRoaXMuX2xp
bmVzQ291bnQrKzsKKyAgICAgICAgICAgIGxpbmVzQ291bnQrKzsKICAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbGluZXNDb3VudDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5qcwppbmRleCAyZTJjNTRmLi5lNzk5NDZkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTE0NDMsOSArMTQ0MywxMSBAQCBXZWJJbnNwZWN0
b3IuZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNvdXJjZVVSTCwgc291cmNl
LCBzdGFydGluZ0xpbgogICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuYWRkU2NyaXB0KG51bGwsIHNv
dXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUsIGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKTsK
IH0KIAotV2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlwdCA9IGZ1bmN0aW9uKGNhbGxGcmFtZXMpCitX
ZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oY2FsbEZyYW1lcywgZGV0YWlscykK
IHsKICAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmRlYnVnZ2VyUGF1c2VkKGNhbGxGcmFtZXMpOwor
ICAgIGlmIChkZXRhaWxzKQorICAgICAgICB0aGlzLmRvbUJyZWFrcG9pbnRNYW5hZ2VyLmJyZWFr
cG9pbnRIaXQoZGV0YWlscy5ub2RlSWQsIGRldGFpbHMudHlwZSk7CiB9CiAKIFdlYkluc3BlY3Rv
ci5yZXN1bWVkU2NyaXB0ID0gZnVuY3Rpb24oKQo=
</data>
<flag name="review"
          id="54363"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65705</attachid>
            <date>2010-08-27 05:40:59 -0700</date>
            <delta_ts>2010-08-27 06:24:36 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>break_details.patch</filename>
            <type>text/plain</type>
            <size>28043</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTAyMWRmMS4uMmJlMTg1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMC0wOC0yNyAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIG1vcmUgaW5mb3Jt
YXRpb24gdG8gZnJvbnQtZW5kIHdoZW4gYnJlYWtpbmcgb24gRE9NIGV2ZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDY3OQorCisgICAgICAgICog
ZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6
aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlcklu
c2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6bm90aWZ5Q2hpbGRJbnNlcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRj
aENoaWxkUmVtb3ZhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5p
ZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEluc2VydERPTU5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFJlbW92ZURPTU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0
cik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEJyZWFrcG9pbnRGb3JOb2RlSW5zZXJ0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRCcmVha3BvaW50
Rm9yTm9kZVJlbW92YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dEJyZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZUJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6fkluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjppc051bGwpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRlbSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludEl0ZW0ucHJvdG90eXBlLl9lbmFibGVDaGFuZ2VkKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRP
TUFnZW50LnByb3RvdHlwZS5fY2hpbGROb2RlUmVtb3ZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRE9NQWdlbnQucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRE9NQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9icmVha3BvaW50UmVtb3Zl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
LmJyZWFrcG9pbnRIaXQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Lmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUuZ2V0IGxpbmVzQ291bnQp
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlwdCk6CisKIDIwMTAtMDgtMjcgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHI2NjE4OC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3Bw
IGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggZWY2MmIzOC4uOTMzMDI4MiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTEzNCw2ICsxMzQsOCBAQCBib29sIENvbnRhaW5lck5v
ZGU6Omluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGls
ZCwgRXhjZQogICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIGJy
ZWFrOwogCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKHRo
aXMpOworCiAgICAgICAgIGluc2VydEJlZm9yZUNvbW1vbihuZXh0LmdldCgpLCBjaGlsZCk7CiAK
ICAgICAgICAgLy8gU2VuZCBub3RpZmljYXRpb24gYWJvdXQgdGhlIGNoaWxkcmVuIGNoYW5nZS4K
QEAgLTIwMSw2ICsyMDMsOCBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlckluc2VydEJlZm9y
ZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBuZXh0Q2hpbAogICAgIGZvciAoTm9k
ZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0YXJnZXRzLmJlZ2luKCk7IGl0ICE9IHRhcmdl
dHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgTm9kZSogY2hpbGQgPSBpdC0+Z2V0KCk7CiAKKyAg
ICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbEluc2VydERPTU5vZGUodGhpcyk7CisKICAg
ICAgICAgaW5zZXJ0QmVmb3JlQ29tbW9uKG5leHQuZ2V0KCksIGNoaWxkKTsKIAogICAgICAgICBj
aGlsZHJlbkNoYW5nZWQodHJ1ZSwgbmV4dENoaWxkUHJldmlvdXNTaWJsaW5nLmdldCgpLCBuZXh0
Q2hpbGQsIDEpOwpAQCAtMjc0LDYgKzI3OCw4IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6cmVwbGFj
ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlCiAg
ICAgICAgIEFTU0VSVCghY2hpbGQtPm5leHRTaWJsaW5nKCkpOwogICAgICAgICBBU1NFUlQoIWNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6
d2lsbEluc2VydERPTU5vZGUodGhpcyk7CisKICAgICAgICAgLy8gQWRkIGNoaWxkIGFmdGVyICJw
cmV2Ii4KICAgICAgICAgZm9yYmlkRXZlbnREaXNwYXRjaCgpOwogICAgICAgICBOb2RlKiBuZXh0
OwpAQCAtNTU1LDYgKzU2MSw4IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQoUGFz
c1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyOjp3
aWxsSW5zZXJ0RE9NTm9kZSh0aGlzKTsKKwogICAgICAgICAvLyBBcHBlbmQgY2hpbGQgdG8gdGhl
IGVuZCBvZiB0aGUgbGlzdAogICAgICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7CiAgICAgICAg
IGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CkBAIC01OTMsNiArNjAxLDggQEAgdm9pZCBDb250YWlu
ZXJOb2RlOjpwYXJzZXJBZGRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkKQogICAgIEFT
U0VSVChuZXdDaGlsZCk7CiAgICAgQVNTRVJUKCFuZXdDaGlsZC0+cGFyZW50KCkpOyAvLyBVc2Ug
YXBwZW5kQ2hpbGQgaWYgeW91IG5lZWQgdG8gaGFuZGxlIHJlcGFyZW50aW5nIChhbmQgd2FudCBE
T00gbXV0YXRpb24gZXZlbnRzKS4KIAorICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNl
cnRET01Ob2RlKHRoaXMpOworCiAgICAgZm9yYmlkRXZlbnREaXNwYXRjaCgpOwogICAgIE5vZGUq
IGxhc3QgPSBtX2xhc3RDaGlsZDsKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIHRh
a2UgYSBQYXNzUmVmUHRyLgpAQCAtOTY0LDEyICs5NzQsNyBAQCBzdGF0aWMgdm9pZCBub3RpZnlD
aGlsZEluc2VydGVkKE5vZGUqIGNoaWxkKQogewogICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZv
cmJpZGRlbigpKTsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBjaGlsZC0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
KQotICAgICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkSW5zZXJ0RE9NTm9kZShjaGls
ZCk7Ci0gICAgfQotI2VuZGlmCisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkSW5zZXJ0RE9N
Tm9kZShjaGlsZCk7CiAKICAgICBSZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwogICAgIFJlZlB0cjxE
b2N1bWVudD4gZG9jdW1lbnQgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKQEAgLTEwMDMsMTIgKzEwMDgs
NyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKiBjaGlsZCkK
IHsKICAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CiAKLSNpZiBFTkFCTEUo
SU5TUEVDVE9SKSAgICAKLSAgICBpZiAoUGFnZSogcGFnZSA9IGNoaWxkLT5kb2N1bWVudCgpLT5w
YWdlKCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRy
b2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBpbnNwZWN0
b3JDb250cm9sbGVyLT5kaWRSZW1vdmVET01Ob2RlKGNoaWxkKTsKLSAgICB9Ci0jZW5kaWYKKyAg
ICBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsUmVtb3ZlRE9NTm9kZShjaGlsZCk7CiAKICAgICBS
ZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBj
aGlsZC0+ZG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggMjZiY2EyMy4uNjVmZDFhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
QEAgLTU0MCw2ICs1NDAsMTEgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLAogICAgICAgICByZXR1
cm47CiAgICAgfQogCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoIWlzU3luY2hyb25p
emluZ1N0eWxlQXR0cmlidXRlKCkpCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxN
b2RpZnlET01BdHRyKHRoaXMpOworI2VuZGlmCisKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkg
OiBuYW1lOwogCiAgICAgLy8gQWxsb2NhdGUgYXR0cmlidXRlIG1hcCBpZiBuZWNlc3NhcnkuCkBA
IC01NjMsMTcgKzU2OCwxOCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAgfQogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2Uo
KSkgewotICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
ciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkgewotICAgICAgICAgICAgaWYgKCFpc1N5
bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQotICAgICAgICAgICAgICAgIGluc3BlY3RvckNv
bnRyb2xsZXItPmRpZE1vZGlmeURPTUF0dHIodGhpcyk7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
aWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRNb2RpZnlET01BdHRyKHRoaXMpOwogI2VuZGlmCiB9CiAKIHZvaWQgRWxl
bWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKQogeworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisgICAgaWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBJbnNw
ZWN0b3JDb250cm9sbGVyOjp3aWxsTW9kaWZ5RE9NQXR0cih0aGlzKTsKKyNlbmRpZgorCiAgICAg
ZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAogICAgIC8vIEFsbG9jYXRlIGF0dHJp
YnV0ZSBtYXAgaWYgbmVjZXNzYXJ5LgpAQCAtNTkyLDEyICs1OTgsOCBAQCB2b2lkIEVsZW1lbnQ6
OnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlLAogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckNvbnRy
b2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkp
IHsKLSAgICAgICAgICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKSkKLSAg
ICAgICAgICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5kaWRNb2RpZnlET01BdHRyKHRoaXMp
OwotICAgICAgICB9Ci0gICAgfQorICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1
dGUoKSkKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0cih0aGlz
KTsKICNlbmRpZgogfQogCkBAIC0xMjI4LDYgKzEyMzAsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0
dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNT
dHJpbgogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxNb2Rp
ZnlET01BdHRyKHRoaXMpOworCiAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0
dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwogCiAgICAgaWYgKG1fYXR0
cmlidXRlTWFwKSB7CkBAIC0xMjM2LDEzICsxMjQwLDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVB
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAg
ICAgIGVjID0gMDsKICAgICB9CiAgICAgCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAo
UGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkgewotICAgICAgICBpZiAoSW5zcGVjdG9y
Q29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKSkKLSAgICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZE1vZGlmeURPTUF0dHIo
dGhpcyk7Ci0gICAgfQotI2VuZGlmCi0gICAgCisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlk
TW9kaWZ5RE9NQXR0cih0aGlzKTsKIH0KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVO
Uyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
LmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXggZmYxYzJhZi4uNTdj
ODg5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC03Myw3ICs3Myw3IEBAIG1vZHVsZSBj
b3JlIHsKICAgICAgICAgW25vdGlmeV0gdm9pZCBkZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiAgICAg
ICAgIFtub3RpZnldIHZvaWQgZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZShvdXQgU3RyaW5nIHVy
bCwgb3V0IFN0cmluZyBkYXRhLCBvdXQgaW50IGZpcnN0TGluZSwgb3V0IGludCBlcnJvckxpbmUs
IG91dCBTdHJpbmcgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBwYXJzZWRT
Y3JpcHRTb3VyY2Uob3V0IFN0cmluZyBzb3VyY2VJRCwgb3V0IFN0cmluZyB1cmwsIG91dCBTdHJp
bmcgZGF0YSwgb3V0IGludCBmaXJzdExpbmUsIG91dCBpbnQgc2NyaXB0V29ybGRUeXBlKTsKLSAg
ICAgICAgW25vdGlmeV0gdm9pZCBwYXVzZWRTY3JpcHQob3V0IFZhbHVlIGNhbGxGcmFtZXMpOwor
ICAgICAgICBbbm90aWZ5XSB2b2lkIHBhdXNlZFNjcmlwdChvdXQgVmFsdWUgY2FsbEZyYW1lcywg
b3V0IFZhbHVlIGRldGFpbHMpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHByb2ZpbGVyV2FzRW5h
YmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHByb2ZpbGVyV2FzRGlzYWJsZWQoKTsKICAg
ICAgICAgW25vdGlmeV0gdm9pZCByZXN0b3JlZEJyZWFrcG9pbnQob3V0IFN0cmluZyBzb3VyY2VJ
RCwgb3V0IFN0cmluZyB1cmwsIG91dCBpbnQgbGluZSwgb3V0IGJvb2xlYW4gZW5hYmxlZCwgb3V0
IFN0cmluZyBjb25kaXRpb24pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
CmluZGV4IDdlZDI1NDkuLmNkM2UzNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKQEAgLTMxLDkgKzMxLDExIEBACiAKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5j
bHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckRPTUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNjcmlw
dFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtNjAsNyArNjIsNiBAQCBjbGFz
cyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JDU1NTdG9yZTsKIGNsYXNzIEluc3Bl
Y3RvckRPTVN0b3JhZ2VSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7
Ci1jbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7
CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsK
QEAgLTc4LDYgKzc5LDcgQEAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIGNsYXNzIFJlc291cmNl
RXJyb3I7CiBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7CiBjbGFzcyBTY3JpcHRQcm9maWxlOworY2xh
c3MgU2NyaXB0U3RhdGU7CiBjbGFzcyBTY3JpcHRTdHJpbmc7CiBjbGFzcyBTaGFyZWRCdWZmZXI7
CiBjbGFzcyBTdG9yYWdlOwpAQCAtMTgzLDkgKzE4NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBt
YWluUmVzb3VyY2VGaXJlZExvYWRFdmVudChEb2N1bWVudExvYWRlciosIGNvbnN0IEtVUkwmKTsK
ICAgICB2b2lkIG1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KERvY3VtZW50TG9hZGVy
KiwgY29uc3QgS1VSTCYpOwogCi0gICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUqKTsKLSAg
ICB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9kZSopOwotICAgIHZvaWQgZGlkTW9kaWZ5RE9NQXR0
cihFbGVtZW50Kik7CisgICAgc3RhdGljIHZvaWQgd2lsbEluc2VydERPTU5vZGUoTm9kZSopOwor
ICAgIHN0YXRpYyB2b2lkIGRpZEluc2VydERPTU5vZGUoTm9kZSopOworICAgIHN0YXRpYyB2b2lk
IHdpbGxSZW1vdmVET01Ob2RlKE5vZGUqKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsTW9kaWZ5RE9N
QXR0cihFbGVtZW50Kik7CisgICAgc3RhdGljIHZvaWQgZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50
Kik7CisKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBlbnVtIFdvcmtlckFjdGlvbiB7IFdvcmtl
ckNyZWF0ZWQsIFdvcmtlckRlc3Ryb3llZCB9OwogCkBAIC0zNzYsMjcgKzM4MSw3OSBAQCBwcml2
YXRlOgogI2VuZGlmCiB9OwogCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxs
SW5zZXJ0RE9NTm9kZShOb2RlKiBub2RlKQoreworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQorICAgIGlmIChQYWdlKiBwYWdlID0gbm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7Cisg
ICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFn
ZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKSB7CisgICAgICAgICAgICBpZiAoSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2Vy
QWdlbnQoKSkgeworICAgICAgICAgICAgICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnJlYWtwb2ludCA9IGRvbUFnZW50LT5nZXRCcmVh
a3BvaW50Rm9yTm9kZUluc2VydGlvbihub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFi
cmVha3BvaW50LT5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyQWdl
bnQtPmJyZWFrUHJvZ3JhbShicmVha3BvaW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KKwogaW5saW5lIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlKiBub2RlKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0gICAgaWYgKG1fZG9tQWdlbnQpCi0gICAgICAgIG1fZG9tQWdlbnQtPmRp
ZEluc2VydERPTU5vZGUobm9kZSk7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBub2RlLT5kb2N1bWVu
dCgpLT5wYWdlKCkpIHsKKyAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpIHsKKyAgICAgICAgICAg
IGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5k
b21BZ2VudCgpKQorICAgICAgICAgICAgICAgIGRvbUFnZW50LT5kaWRJbnNlcnRET01Ob2RlKG5v
ZGUpOworICAgICAgICB9CisgICAgfQogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKK2lubGluZSB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiB7Ci0jaWYg
RU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAobV9kb21BZ2VudCkKLSAgICAgICAgbV9kb21BZ2Vu
dC0+ZGlkUmVtb3ZlRE9NTm9kZShub2RlKTsKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKKyAgICBpZiAoUGFnZSogcGFnZSA9IG5vZGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgeworICAg
ICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKSkgeworICAgICAgICAgICAgaWYgKEluc3BlY3RvckRPTUFn
ZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGlu
c3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJyZWFrcG9pbnQgPSBkb21BZ2VudC0+Z2V0QnJlYWtw
b2ludEZvck5vZGVSZW1vdmFsKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJyZWFr
cG9pbnQtPmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdnZXJBZ2VudC0+
YnJlYWtQcm9ncmFtKGJyZWFrcG9pbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBkb21BZ2VudC0+ZGlkUmVtb3ZlRE9NTm9kZShub2RlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjp3aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQoreworI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGlmIChQYWdlKiBwYWdlID0gZWxlbWVudC0+ZG9jdW1l
bnQoKS0+cGFnZSgpKSB7CisgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKSB7CisgICAgICAgICAg
ICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNv
bnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKSkgeworICAgICAgICAgICAgICAgIGlmIChJbnNwZWN0
b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYnJlYWtwb2ludCA9
IGRvbUFnZW50LT5nZXRCcmVha3BvaW50Rm9yQXR0cmlidXRlTW9kaWZpY2F0aW9uKGVsZW1lbnQp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnQtPmlzTnVsbCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKGJyZWFrcG9pbnQp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICNl
bmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRNb2RpZnlET01B
dHRyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAo
bV9kb21BZ2VudCkKLSAgICAgICAgbV9kb21BZ2VudC0+ZGlkTW9kaWZ5RE9NQXR0cihlbGVtZW50
KTsKKyAgICBpZiAoUGFnZSogcGFnZSA9IGVsZW1lbnQtPmRvY3VtZW50KCktPnBhZ2UoKSkgewor
ICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBh
Z2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkgeworICAgICAgICAgICAgaWYgKEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpCisgICAg
ICAgICAgICAgICAgZG9tQWdlbnQtPmRpZE1vZGlmeURPTUF0dHIoZWxlbWVudCk7CisgICAgICAg
IH0KKyAgICB9CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCmluZGV4IDYzNTc2OWEuLmM4MWIxNjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKQEAgLTYzLDcgKzYzLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFu
dHMuaCIKLSNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlNjcmlwdEV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRl
eHQuaCIKQEAgLTIwOSw4ICsyMDgsNiBAQCBjb25zdCBpbnQgZG9tQnJlYWtwb2ludERlcml2ZWRU
eXBlU2hpZnQgPSAxNjsKIAogfQogCi1JbnNwZWN0b3JET01BZ2VudCogSW5zcGVjdG9yRE9NQWdl
bnQ6OnNfZG9tQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwotCiBJbnNwZWN0b3JET01BZ2VudDo6SW5z
cGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9u
dGVuZCogZnJvbnRlbmQpCiAgICAgOiBFdmVudExpc3RlbmVyKEluc3BlY3RvckRPTUFnZW50VHlw
ZSkKICAgICAsIG1fY3NzU3RvcmUoY3NzU3RvcmUpCkBAIC0yMjMsOSArMjIwLDYgQEAgSW5zcGVj
dG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3BlY3RvckNTU1N0b3JlKiBjc3NTdG9y
ZSwgSW5zcGVjdG9yRnJvbnQKIEluc3BlY3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQo
KQogewogICAgIHJlc2V0KCk7Ci0KLSAgICBpZiAodGhpcyA9PSBzX2RvbUFnZW50T25CcmVha3Bv
aW50KQotICAgICAgICBzX2RvbUFnZW50T25CcmVha3BvaW50ID0gMDsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6cmVzZXQoKQpAQCAtNzcwLDYgKzc2NCwyOSBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpCiAg
ICAgfQogfQogCitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0QnJlYWtwb2ludEZvck5vZGVJbnNlcnRpb24oTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoaGFz
QnJlYWtwb2ludChub2RlLCBTdWJ0cmVlTW9kaWZpZWQpKQorICAgICAgICByZXR1cm4gY3JlYXRl
QnJlYWtwb2ludChub2RlLCBTdWJ0cmVlTW9kaWZpZWQpOworICAgIHJldHVybiBJbnNwZWN0b3JP
YmplY3Q6Om51bGwoKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9y
RE9NQWdlbnQ6OmdldEJyZWFrcG9pbnRGb3JOb2RlUmVtb3ZhbChOb2RlKiBub2RlKQoreworICAg
IGlmIChoYXNCcmVha3BvaW50KG5vZGUsIE5vZGVSZW1vdmVkKSkKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZUJyZWFrcG9pbnQobm9kZSwgTm9kZVJlbW92ZWQpOworICAgIGlmIChoYXNCcmVha3BvaW50
KGlubmVyUGFyZW50Tm9kZShub2RlKSwgU3VidHJlZU1vZGlmaWVkKSkKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZUJyZWFrcG9pbnQoaW5uZXJQYXJlbnROb2RlKG5vZGUpLCBTdWJ0cmVlTW9kaWZpZWQp
OworICAgIHJldHVybiBJbnNwZWN0b3JPYmplY3Q6Om51bGwoKTsKK30KKworUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEJyZWFrcG9pbnRGb3JBdHRyaWJ1
dGVNb2RpZmljYXRpb24oRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAoaGFzQnJlYWtwb2lu
dChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpCisgICAgICAgIHJldHVybiBjcmVhdGVCcmVh
a3BvaW50KGVsZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9y
T2JqZWN0OjpudWxsKCk7Cit9CisKIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRV
UkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAogewogICAgIGlmICghZG9jdW1lbnQg
fHwgZG9jdW1lbnQtPnVybCgpLmlzTnVsbCgpKQpAQCAtOTcxLDEyICs5ODgsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChtX2JyZWFrcG9pbnRzLnNpemUoKSkgewotICAgICAgICBOb2RlKiBw
YXJlbnQgPSBpbm5lclBhcmVudE5vZGUobm9kZSk7Ci0gICAgICAgIGlmIChoYXNCcmVha3BvaW50
KHBhcmVudCwgU3VidHJlZU1vZGlmaWVkKSkgewotICAgICAgICAgICAgaWYgKCFwYXVzZU9uQnJl
YWtwb2ludCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB1
aW50MzJfdCBtYXNrID0gbV9icmVha3BvaW50cy5nZXQocGFyZW50KTsKKyAgICAgICAgdWludDMy
X3QgbWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KGlubmVyUGFyZW50Tm9kZShub2RlKSk7CiAgICAg
ICAgIHVpbnQzMl90IGluaGVyaXRhYmxlVHlwZXNNYXNrID0gKG1hc2sgfCAobWFzayA+PiBkb21C
cmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCkpICYgaW5oZXJpdGFibGVET01CcmVha3BvaW50VHlw
ZXNNYXNrOwogICAgICAgICBpZiAoaW5oZXJpdGFibGVUeXBlc01hc2spCiAgICAgICAgICAgICB1
cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMobm9kZSwgaW5oZXJpdGFibGVUeXBlc01hc2ssIHRydWUp
OwpAQCAtMTAwOSwxMCArMTAyMSw2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92
ZURPTU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fYnJlYWtw
b2ludHMuc2l6ZSgpKSB7Ci0gICAgICAgIGlmIChoYXNCcmVha3BvaW50KG5vZGUsIE5vZGVSZW1v
dmVkKSB8fCBoYXNCcmVha3BvaW50KGlubmVyUGFyZW50Tm9kZShub2RlKSwgU3VidHJlZU1vZGlm
aWVkKSkgewotICAgICAgICAgICAgaWYgKCFwYXVzZU9uQnJlYWtwb2ludCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAgICAvLyBSZW1vdmUgc3VidHJlZSBicmVh
a3BvaW50cy4KICAgICAgICAgbV9icmVha3BvaW50cy5yZW1vdmUobm9kZSk7CiAgICAgICAgIFZl
Y3RvcjxOb2RlKj4gc3RhY2soMSwgaW5uZXJGaXJzdENoaWxkKG5vZGUpKTsKQEAgLTEwNDksMTIg
KzEwNTcsMjQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVt
ZW50KiBlbGVtZW50KQogICAgIGlmICghaWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICho
YXNCcmVha3BvaW50KGVsZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVkKSkgewotICAgICAgICBpZiAo
IXBhdXNlT25CcmVha3BvaW50KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgbV9mcm9udGVu
ZC0+YXR0cmlidXRlc1VwZGF0ZWQoaWQsIGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhl
bGVtZW50KSk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JET01B
Z2VudDo6Y3JlYXRlQnJlYWtwb2ludChOb2RlKiBub2RlLCBsb25nIHR5cGUpCit7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisKKyAgICAvLyBGaW5kIGJyZWFrcG9pbnQgb3duZXIuCisgICAgd2hpbGUgKCEobV9icmVh
a3BvaW50cy5nZXQobm9kZSkgJiAoMSA8PCB0eXBlKSkpIHsKKyAgICAgICAgbm9kZSA9IGlubmVy
UGFyZW50Tm9kZShub2RlKTsKKyAgICAgICAgQVNTRVJUKG5vZGUpOwogICAgIH0KKyAgICBsb25n
IG5vZGVJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9kZSk7CisgICAgQVNTRVJUKG5v
ZGVJZCk7CiAKLSAgICBtX2Zyb250ZW5kLT5hdHRyaWJ1dGVzVXBkYXRlZChpZCwgYnVpbGRBcnJh
eUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpKTsKKyAgICBicmVha3BvaW50LT5zZXROdW1i
ZXIoIm5vZGVJZCIsIG5vZGVJZCk7CisgICAgYnJlYWtwb2ludC0+c2V0TnVtYmVyKCJ0eXBlIiwg
dHlwZSk7CisgICAgcmV0dXJuIGJyZWFrcG9pbnQucmVsZWFzZSgpOwogfQogCiBib29sIEluc3Bl
Y3RvckRPTUFnZW50OjpoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUsIGxvbmcgdHlwZSkKQEAgLTEw
NjQsMTkgKzEwODQsNiBAQCBib29sIEluc3BlY3RvckRPTUFnZW50OjpoYXNCcmVha3BvaW50KE5v
ZGUqIG5vZGUsIGxvbmcgdHlwZSkKICAgICByZXR1cm4gbV9icmVha3BvaW50cy5nZXQobm9kZSkg
JiAocm9vdEJpdCB8IGRlcml2ZWRCaXQpOwogfQogCi1ib29sIEluc3BlY3RvckRPTUFnZW50Ojpw
YXVzZU9uQnJlYWtwb2ludCgpCi17Ci0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0g
ICAgc19kb21BZ2VudE9uQnJlYWtwb2ludCA9IHRoaXM7Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNoYXJlZCgpLmJyZWFrUHJvZ3JhbSgpOwotICAgIGJvb2wgZGVsZXRlZCA9ICFzX2RvbUFnZW50
T25CcmVha3BvaW50OwotICAgIHNfZG9tQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwotICAgIHJldHVy
biAhZGVsZXRlZDsKLSNlbHNlCi0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLX0KLQogdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6dXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqIG5vZGUsIHVp
bnQzMl90IHJvb3RNYXNrLCBib29sIHNldCkKIHsKICAgICB1aW50MzJfdCBvbGRNYXNrID0gbV9i
cmVha3BvaW50cy5nZXQobm9kZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApp
bmRleCBmZDNjNWI1Li4wY2FjYTYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmgKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NTdG9yZS5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCi0jaW5jbHVk
ZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogCiAjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CkBAIC0xMTQsNiArMTEzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHNlYXJjaENhbmNlbGVkKCk7CiAgICAgICAgIHZvaWQgc2V0RE9NQnJlYWtwb2ludChsb25n
IG5vZGVJZCwgbG9uZyB0eXBlKTsKICAgICAgICAgdm9pZCByZW1vdmVET01CcmVha3BvaW50KGxv
bmcgbm9kZUlkLCBsb25nIHR5cGUpOworICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBnZXRCcmVha3BvaW50Rm9yTm9kZUluc2VydGlvbihOb2RlKik7CisgICAgICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IGdldEJyZWFrcG9pbnRGb3JOb2RlUmVtb3ZhbChOb2RlKik7Cisg
ICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldEJyZWFrcG9pbnRGb3JBdHRyaWJ1
dGVNb2RpZmljYXRpb24oRWxlbWVudCopOwogCiAgICAgICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZy
b20gdGhlIGZyb250ZW5kIGZvciBDU1Mgc3R5bGVzIGluc3BlY3Rpb24uCiAgICAgICAgIHZvaWQg
Z2V0U3R5bGVzKGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHksIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIHN0eWxlcyk7CkBAIC0xNjAsNyArMTYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIHB1c2hEb2N1bWVudFRvRnJvbnRlbmQoKTsKIAogICAgICAgICBib29sIGhh
c0JyZWFrcG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKTsKLSAgICAgICAgYm9vbCBwYXVzZU9u
QnJlYWtwb2ludCgpOworICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRl
QnJlYWtwb2ludChOb2RlKiBub2RlLCBsb25nIHR5cGUpOwogICAgICAgICB2b2lkIHVwZGF0ZVN1
YnRyZWVCcmVha3BvaW50cyhOb2RlKiByb290LCB1aW50MzJfdCByb290TWFzaywgYm9vbCB2YWx1
ZSk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlU3R5bGVzKEVsZW1lbnQqIGVsZW1lbnQpOwpAQCAtMjE3LDggKzIxOSw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBtX3NlYXJj
aFJlc3VsdHM7CiAgICAgICAgIFZlY3Rvcjxsb25nPiBtX2luc3BlY3RlZE5vZGVzOwogICAgICAg
ICBIYXNoTWFwPE5vZGUqLCB1aW50MzJfdD4gbV9icmVha3BvaW50czsKLQotICAgICAgICBzdGF0
aWMgSW5zcGVjdG9yRE9NQWdlbnQqIHNfZG9tQWdlbnRPbkJyZWFrcG9pbnQ7CiAgICAgfTsKIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmlu
ZGV4IDM1N2EwNDMuLmFmYmEwMjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCkBAIC01NiwxMSArNTYsMTQgQEAgUGFzc093blB0cjxJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zcGVjdG9yQ29u
dHIKICAgICByZXR1cm4gYWdlbnQucmVsZWFzZSgpOwogfQogCitJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50KiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQg
PSAwOworCiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KElu
c3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckZyb250ZW5k
KiBmcm9udGVuZCkKICAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9s
bGVyKQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3Rh
dGUoMCkKICAgICAsIG1fYnJlYWtwb2ludHNMb2FkZWQoZmFsc2UpCisgICAgLCBtX2JyZWFrUHJv
Z3JhbURldGFpbHMoSW5zcGVjdG9yVmFsdWU6Om51bGwoKSkKIHsKIH0KIApAQCAtNjgsNiArNzEs
OSBAQCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpCiB7
CiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUxpc3RlbmVyKHRoaXMsIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpKTsKICAgICBtX3BhdXNlZFNjcmlw
dFN0YXRlID0gMDsKKworICAgIGlmICh0aGlzID09IHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2lu
dCkKKyAgICAgICAgc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50ID0gMDsKIH0KIAogYm9vbCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojppc0RlYnVnZ2VyQWx3YXlzRW5hYmxlZCgpCkBAIC0yODMs
OCArMjg5LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUpCiB7CiAgICAgQVNTRVJUKHNjcmlwdFN0YXRlICYmICFtX3BhdXNl
ZFNjcmlwdFN0YXRlKTsKICAgICBtX3BhdXNlZFNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGU7Ci0g
ICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsRnJhbWVzID0gY3VycmVudENhbGxGcmFtZXMo
KTsKLSAgICBtX2Zyb250ZW5kLT5wYXVzZWRTY3JpcHQoY2FsbEZyYW1lcy5nZXQoKSk7CisgICAg
bV9mcm9udGVuZC0+cGF1c2VkU2NyaXB0KGN1cnJlbnRDYWxsRnJhbWVzKCksIG1fYnJlYWtQcm9n
cmFtRGV0YWlscyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGlu
dWUoKQpAQCAtMjkzLDYgKzI5OCwxOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRp
ZENvbnRpbnVlKCkKICAgICBtX2Zyb250ZW5kLT5yZXN1bWVkU2NyaXB0KCk7CiB9CiAKK3ZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGRldGFpbHMpCit7CisgICAgc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50ID0gdGhp
czsKKyAgICBtX2JyZWFrUHJvZ3JhbURldGFpbHMgPSBkZXRhaWxzOworCisgICAgU2NyaXB0RGVi
dWdTZXJ2ZXI6OnNoYXJlZCgpLmJyZWFrUHJvZ3JhbSgpOworICAgIGlmICghc19kZWJ1Z2dlckFn
ZW50T25CcmVha3BvaW50KQorICAgICAgICByZXR1cm47CisKKyAgICBzX2RlYnVnZ2VyQWdlbnRP
bkJyZWFrcG9pbnQgPSAwOworICAgIG1fYnJlYWtQcm9ncmFtRGV0YWlscyA9IEluc3BlY3RvclZh
bHVlOjpudWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oCmluZGV4IDkxYmNkNDkuLjZkNmU4YmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgogICAg
IHZvaWQgZ2V0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2Ny
aXB0U291cmNlKTsKIAogICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIGJyZWFrUHJvZ3JhbShQ
YXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBkZXRhaWxzKTsKICAgICB2b2lkIHJlc3VtZSgpOwog
ICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQoKTsKICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50
KCk7CkBAIC05Myw2ICs5NCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJj
ZUJyZWFrcG9pbnRzPiBtX3N0aWNreUJyZWFrcG9pbnRzOwogICAgIEhhc2hNYXA8U3RyaW5nLCB1
bnNpZ25lZD4gbV9icmVha3BvaW50c01hcHBpbmc7CiAgICAgYm9vbCBtX2JyZWFrcG9pbnRzTG9h
ZGVkOworICAgIHN0YXRpYyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBzX2RlYnVnZ2VyQWdlbnRP
bkJyZWFrcG9pbnQ7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtX2JyZWFrUHJvZ3JhbURl
dGFpbHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oCmluZGV4IDNkZDk1OTQuLjQwMzZmNTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKIAogICAgIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVy
biBtX3R5cGUgPT0gVHlwZU51bGw7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2xlYW4oYm9v
bCogb3V0cHV0KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIoZG91YmxlKiBvdXRw
dXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcihsb25nKiBvdXRwdXQpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lk
ZWJhclBhbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRl
YmFyUGFuZS5qcwppbmRleCBjY2Y0NWI2Li44MjM3NmVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcwpAQCAtMTA2LDcg
KzEwNiw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRlbSA9IGZ1bmN0aW9uKGJyZWFrcG9p
bnQpCiAgICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChjaGVja2JveEVsZW1lbnQpOwogCiAg
ICAgdGhpcy5fYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIHRo
aXMuX2VuYWJsZUNoYW5nZWQsIHRoaXMpOwotICAgIHRoaXMuX2JyZWFrcG9pbnQuYWRkRXZlbnRM
aXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX3JlbW92ZWQsIHRoaXMpOworICAgIHRoaXMuX2JyZWFr
cG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzLmJpbmQodGhpcywgInJlbW92ZWQiKSk7CiB9CiAKIFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50SXRlbS5wcm90b3R5cGUgPSB7CkBAIC0xMjgsMTUgKzEyOCwxMCBAQCBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludEl0ZW0ucHJvdG90eXBlID0gewogICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRp
b24oKTsKICAgICB9LAogCi0gICAgX2VuYWJsZUNoYW5nZWQ6IGZ1bmN0aW9uKCkKKyAgICBfZW5h
YmxlQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgY2hlY2tib3gg
PSB0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB0
aGlzLl9icmVha3BvaW50LmVuYWJsZWQ7Ci0gICAgfSwKLQotICAgIF9yZW1vdmVkOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygicmVtb3Zl
ZCIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RPTUFnZW50LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCmlu
ZGV4IGJkNTIyMzUuLjVjYjZkMTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9ET01BZ2VudC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdl
bnQuanMKQEAgLTQxMyw4ICs0MTMsMTggQEAgV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkXyhub2RlKTsKICAgICAgICAgdmFyIGV2
ZW50ID0geyB0YXJnZXQgOiBub2RlLCByZWxhdGVkTm9kZSA6IHBhcmVudCB9OwogICAgICAgICB0
aGlzLmRvY3VtZW50Ll9maXJlRG9tRXZlbnQoIkRPTU5vZGVSZW1vdmVkIiwgZXZlbnQpOwotICAg
ICAgICBkZWxldGUgdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKLSAgICB9CisgICAgICAgIGRl
bGV0ZSB0aGlzLl9pZFRvRE9NTm9kZVtub2RlLmlkXTsKKyAgICAgICAgdGhpcy5fcmVtb3ZlQnJl
YWtwb2ludHMobm9kZSk7CisgICAgfSwKKworICAgIF9yZW1vdmVCcmVha3BvaW50czogZnVuY3Rp
b24obm9kZSkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5kb21CcmVha3BvaW50TWFuYWdl
ci5yZW1vdmVCcmVha3BvaW50c0Zvck5vZGUobm9kZSk7CisgICAgICAgIGlmICghbm9kZS5jaGls
ZHJlbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
b2RlLmNoaWxkcmVuLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtw
b2ludHMobm9kZS5jaGlsZHJlbltpXSk7CisgICAgIH0KIH0KIAogV2ViSW5zcGVjdG9yLkFwcGxp
Y2F0aW9uQ2FjaGUgPSB7fQpAQCAtNzA4LDYgKzcxOCwxMyBAQCBXZWJJbnNwZWN0b3IuRE9NQnJl
YWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBmb3IgKHZhciB0eXBlIGluIG5v
ZGVCcmVha3BvaW50cykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVsZXRlIHRoaXMu
X2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQubm9kZS5pZF07CisgICAgfSwKKworICAgIGJyZWFrcG9p
bnRIaXQ6IGZ1bmN0aW9uKG5vZGVJZCwgdHlwZSkKKyAgICB7CisgICAgICAgIHZhciBub2RlQnJl
YWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50c1tub2RlSWRdOworICAgICAgICBpZiAodHlwZSBp
biBub2RlQnJlYWtwb2ludHMpCisgICAgICAgICAgICBub2RlQnJlYWtwb2ludHNbdHlwZV0uZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJoaXQiKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU2NyaXB0LmpzCmluZGV4IDQyZDY4NTAuLjJlZjkzMjggMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdC5qcwpAQCAtNjIsMTEgKzYyLDEyIEBAIFdlYkluc3BlY3Rvci5T
Y3JpcHQucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLnNvdXJjZSkKICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB0aGlzLl9saW5lc0NvdW50ID0gMDsKKyAgICAg
ICAgdmFyIGxpbmVzQ291bnQgPSAwOwogICAgICAgICB2YXIgbGFzdEluZGV4ID0gdGhpcy5zb3Vy
Y2UuaW5kZXhPZigiXG4iKTsKICAgICAgICAgd2hpbGUgKGxhc3RJbmRleCAhPT0gLTEpIHsKICAg
ICAgICAgICAgIGxhc3RJbmRleCA9IHRoaXMuc291cmNlLmluZGV4T2YoIlxuIiwgbGFzdEluZGV4
ICsgMSkKLSAgICAgICAgICAgIHRoaXMuX2xpbmVzQ291bnQrKzsKKyAgICAgICAgICAgIGxpbmVz
Q291bnQrKzsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gbGluZXNDb3VudDsKICAgICB9CiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCBjZjQ3ZGM2Li5h
NDY2ZmE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTE0
NDUsOSArMTQ0NSwxMSBAQCBXZWJJbnNwZWN0b3IuZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSA9
IGZ1bmN0aW9uKHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbgogICAgIHRoaXMucGFuZWxz
LnNjcmlwdHMuYWRkU2NyaXB0KG51bGwsIHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUs
IGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKTsKIH0KIAotV2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlw
dCA9IGZ1bmN0aW9uKGNhbGxGcmFtZXMpCitXZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0ID0gZnVu
Y3Rpb24oY2FsbEZyYW1lcywgZGV0YWlscykKIHsKICAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmRl
YnVnZ2VyUGF1c2VkKGNhbGxGcmFtZXMpOworICAgIGlmIChkZXRhaWxzKQorICAgICAgICB0aGlz
LmRvbUJyZWFrcG9pbnRNYW5hZ2VyLmJyZWFrcG9pbnRIaXQoZGV0YWlscy5ub2RlSWQsIGRldGFp
bHMudHlwZSk7CiB9CiAKIFdlYkluc3BlY3Rvci5yZXN1bWVkU2NyaXB0ID0gZnVuY3Rpb24oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65707</attachid>
            <date>2010-08-27 06:24:36 -0700</date>
            <delta_ts>2010-08-30 05:56:48 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>break_details.patch</filename>
            <type>text/plain</type>
            <size>27799</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTAyMWRmMS4uMmJlMTg1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMC0wOC0yNyAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIG1vcmUgaW5mb3Jt
YXRpb24gdG8gZnJvbnQtZW5kIHdoZW4gYnJlYWtpbmcgb24gRE9NIGV2ZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDY3OQorCisgICAgICAgICog
ZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6
aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlcklu
c2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6bm90aWZ5Q2hpbGRJbnNlcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRj
aENoaWxkUmVtb3ZhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5p
ZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEluc2VydERPTU5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFJlbW92ZURPTU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0
cik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEJyZWFrcG9pbnRGb3JOb2RlSW5zZXJ0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRCcmVha3BvaW50
Rm9yTm9kZVJlbW92YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dEJyZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZUJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6fkluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjppc051bGwpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRlbSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludEl0ZW0ucHJvdG90eXBlLl9lbmFibGVDaGFuZ2VkKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRP
TUFnZW50LnByb3RvdHlwZS5fY2hpbGROb2RlUmVtb3ZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRE9NQWdlbnQucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRE9NQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9icmVha3BvaW50UmVtb3Zl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
LmJyZWFrcG9pbnRIaXQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Lmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUuZ2V0IGxpbmVzQ291bnQp
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlwdCk6CisKIDIwMTAtMDgtMjcgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHI2NjE4OC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3Bw
IGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggZWY2MmIzOC4uOTMzMDI4MiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTEzNCw2ICsxMzQsOCBAQCBib29sIENvbnRhaW5lck5v
ZGU6Omluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGls
ZCwgRXhjZQogICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIGJy
ZWFrOwogCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKHRo
aXMpOworCiAgICAgICAgIGluc2VydEJlZm9yZUNvbW1vbihuZXh0LmdldCgpLCBjaGlsZCk7CiAK
ICAgICAgICAgLy8gU2VuZCBub3RpZmljYXRpb24gYWJvdXQgdGhlIGNoaWxkcmVuIGNoYW5nZS4K
QEAgLTIwMSw2ICsyMDMsOCBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlckluc2VydEJlZm9y
ZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBuZXh0Q2hpbAogICAgIGZvciAoTm9k
ZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0YXJnZXRzLmJlZ2luKCk7IGl0ICE9IHRhcmdl
dHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgTm9kZSogY2hpbGQgPSBpdC0+Z2V0KCk7CiAKKyAg
ICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbEluc2VydERPTU5vZGUodGhpcyk7CisKICAg
ICAgICAgaW5zZXJ0QmVmb3JlQ29tbW9uKG5leHQuZ2V0KCksIGNoaWxkKTsKIAogICAgICAgICBj
aGlsZHJlbkNoYW5nZWQodHJ1ZSwgbmV4dENoaWxkUHJldmlvdXNTaWJsaW5nLmdldCgpLCBuZXh0
Q2hpbGQsIDEpOwpAQCAtMjc0LDYgKzI3OCw4IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6cmVwbGFj
ZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlCiAg
ICAgICAgIEFTU0VSVCghY2hpbGQtPm5leHRTaWJsaW5nKCkpOwogICAgICAgICBBU1NFUlQoIWNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6
d2lsbEluc2VydERPTU5vZGUodGhpcyk7CisKICAgICAgICAgLy8gQWRkIGNoaWxkIGFmdGVyICJw
cmV2Ii4KICAgICAgICAgZm9yYmlkRXZlbnREaXNwYXRjaCgpOwogICAgICAgICBOb2RlKiBuZXh0
OwpAQCAtNTU1LDYgKzU2MSw4IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQoUGFz
c1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyOjp3
aWxsSW5zZXJ0RE9NTm9kZSh0aGlzKTsKKwogICAgICAgICAvLyBBcHBlbmQgY2hpbGQgdG8gdGhl
IGVuZCBvZiB0aGUgbGlzdAogICAgICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7CiAgICAgICAg
IGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CkBAIC01OTMsNiArNjAxLDggQEAgdm9pZCBDb250YWlu
ZXJOb2RlOjpwYXJzZXJBZGRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkKQogICAgIEFT
U0VSVChuZXdDaGlsZCk7CiAgICAgQVNTRVJUKCFuZXdDaGlsZC0+cGFyZW50KCkpOyAvLyBVc2Ug
YXBwZW5kQ2hpbGQgaWYgeW91IG5lZWQgdG8gaGFuZGxlIHJlcGFyZW50aW5nIChhbmQgd2FudCBE
T00gbXV0YXRpb24gZXZlbnRzKS4KIAorICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNl
cnRET01Ob2RlKHRoaXMpOworCiAgICAgZm9yYmlkRXZlbnREaXNwYXRjaCgpOwogICAgIE5vZGUq
IGxhc3QgPSBtX2xhc3RDaGlsZDsKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIHRh
a2UgYSBQYXNzUmVmUHRyLgpAQCAtOTY0LDEyICs5NzQsNyBAQCBzdGF0aWMgdm9pZCBub3RpZnlD
aGlsZEluc2VydGVkKE5vZGUqIGNoaWxkKQogewogICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZv
cmJpZGRlbigpKTsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBjaGlsZC0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
KQotICAgICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkSW5zZXJ0RE9NTm9kZShjaGls
ZCk7Ci0gICAgfQotI2VuZGlmCisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkSW5zZXJ0RE9N
Tm9kZShjaGlsZCk7CiAKICAgICBSZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwogICAgIFJlZlB0cjxE
b2N1bWVudD4gZG9jdW1lbnQgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKQEAgLTEwMDMsMTIgKzEwMDgs
NyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKiBjaGlsZCkK
IHsKICAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CiAKLSNpZiBFTkFCTEUo
SU5TUEVDVE9SKSAgICAKLSAgICBpZiAoUGFnZSogcGFnZSA9IGNoaWxkLT5kb2N1bWVudCgpLT5w
YWdlKCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRy
b2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBpbnNwZWN0
b3JDb250cm9sbGVyLT5kaWRSZW1vdmVET01Ob2RlKGNoaWxkKTsKLSAgICB9Ci0jZW5kaWYKKyAg
ICBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsUmVtb3ZlRE9NTm9kZShjaGlsZCk7CiAKICAgICBS
ZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBj
aGlsZC0+ZG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggMjZiY2EyMy4uNjVmZDFhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
QEAgLTU0MCw2ICs1NDAsMTEgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLAogICAgICAgICByZXR1
cm47CiAgICAgfQogCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoIWlzU3luY2hyb25p
emluZ1N0eWxlQXR0cmlidXRlKCkpCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxN
b2RpZnlET01BdHRyKHRoaXMpOworI2VuZGlmCisKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkg
OiBuYW1lOwogCiAgICAgLy8gQWxsb2NhdGUgYXR0cmlidXRlIG1hcCBpZiBuZWNlc3NhcnkuCkBA
IC01NjMsMTcgKzU2OCwxOCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAgfQogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2Uo
KSkgewotICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
ciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkgewotICAgICAgICAgICAgaWYgKCFpc1N5
bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQotICAgICAgICAgICAgICAgIGluc3BlY3RvckNv
bnRyb2xsZXItPmRpZE1vZGlmeURPTUF0dHIodGhpcyk7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
aWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRNb2RpZnlET01BdHRyKHRoaXMpOwogI2VuZGlmCiB9CiAKIHZvaWQgRWxl
bWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKQogeworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisgICAgaWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBJbnNw
ZWN0b3JDb250cm9sbGVyOjp3aWxsTW9kaWZ5RE9NQXR0cih0aGlzKTsKKyNlbmRpZgorCiAgICAg
ZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAogICAgIC8vIEFsbG9jYXRlIGF0dHJp
YnV0ZSBtYXAgaWYgbmVjZXNzYXJ5LgpAQCAtNTkyLDEyICs1OTgsOCBAQCB2b2lkIEVsZW1lbnQ6
OnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlLAogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckNvbnRy
b2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkp
IHsKLSAgICAgICAgICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKSkKLSAg
ICAgICAgICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5kaWRNb2RpZnlET01BdHRyKHRoaXMp
OwotICAgICAgICB9Ci0gICAgfQorICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1
dGUoKSkKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0cih0aGlz
KTsKICNlbmRpZgogfQogCkBAIC0xMjI4LDYgKzEyMzAsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0
dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNT
dHJpbgogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxNb2Rp
ZnlET01BdHRyKHRoaXMpOworCiAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0
dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwogCiAgICAgaWYgKG1fYXR0
cmlidXRlTWFwKSB7CkBAIC0xMjM2LDEzICsxMjQwLDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVB
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAg
ICAgIGVjID0gMDsKICAgICB9CiAgICAgCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAo
UGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkgewotICAgICAgICBpZiAoSW5zcGVjdG9y
Q29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKSkKLSAgICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZE1vZGlmeURPTUF0dHIo
dGhpcyk7Ci0gICAgfQotI2VuZGlmCi0gICAgCisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlk
TW9kaWZ5RE9NQXR0cih0aGlzKTsKIH0KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVO
Uyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
LmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXggZmYxYzJhZi4uNTdj
ODg5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC03Myw3ICs3Myw3IEBAIG1vZHVsZSBj
b3JlIHsKICAgICAgICAgW25vdGlmeV0gdm9pZCBkZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiAgICAg
ICAgIFtub3RpZnldIHZvaWQgZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZShvdXQgU3RyaW5nIHVy
bCwgb3V0IFN0cmluZyBkYXRhLCBvdXQgaW50IGZpcnN0TGluZSwgb3V0IGludCBlcnJvckxpbmUs
IG91dCBTdHJpbmcgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBwYXJzZWRT
Y3JpcHRTb3VyY2Uob3V0IFN0cmluZyBzb3VyY2VJRCwgb3V0IFN0cmluZyB1cmwsIG91dCBTdHJp
bmcgZGF0YSwgb3V0IGludCBmaXJzdExpbmUsIG91dCBpbnQgc2NyaXB0V29ybGRUeXBlKTsKLSAg
ICAgICAgW25vdGlmeV0gdm9pZCBwYXVzZWRTY3JpcHQob3V0IFZhbHVlIGNhbGxGcmFtZXMpOwor
ICAgICAgICBbbm90aWZ5XSB2b2lkIHBhdXNlZFNjcmlwdChvdXQgVmFsdWUgY2FsbEZyYW1lcywg
b3V0IFZhbHVlIGRldGFpbHMpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHByb2ZpbGVyV2FzRW5h
YmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHByb2ZpbGVyV2FzRGlzYWJsZWQoKTsKICAg
ICAgICAgW25vdGlmeV0gdm9pZCByZXN0b3JlZEJyZWFrcG9pbnQob3V0IFN0cmluZyBzb3VyY2VJ
RCwgb3V0IFN0cmluZyB1cmwsIG91dCBpbnQgbGluZSwgb3V0IGJvb2xlYW4gZW5hYmxlZCwgb3V0
IFN0cmluZyBjb25kaXRpb24pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
CmluZGV4IDdlZDI1NDkuLjYwM2JjOTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKQEAgLTMxLDcgKzMxLDEwIEBACiAKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5j
bHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckRPTUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlw
dFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTYwLDcgKzYzLDYgQEAgY2xh
c3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yQ1NTU3RvcmU7CiBjbGFzcyBJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
OwotY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5k
OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7
CkBAIC0xODMsOSArMTg1LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIG1haW5SZXNvdXJjZUZpcmVk
TG9hZEV2ZW50KERvY3VtZW50TG9hZGVyKiwgY29uc3QgS1VSTCYpOwogICAgIHZvaWQgbWFpblJl
c291cmNlRmlyZWRET01Db250ZW50RXZlbnQoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBLVVJMJik7
CiAKLSAgICB2b2lkIGRpZEluc2VydERPTU5vZGUoTm9kZSopOwotICAgIHZvaWQgZGlkUmVtb3Zl
RE9NTm9kZShOb2RlKik7Ci0gICAgdm9pZCBkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqKTsKKyAg
ICBzdGF0aWMgdm9pZCB3aWxsSW5zZXJ0RE9NTm9kZShOb2RlKik7CisgICAgc3RhdGljIHZvaWQg
ZGlkSW5zZXJ0RE9NTm9kZShOb2RlKik7CisgICAgc3RhdGljIHZvaWQgd2lsbFJlbW92ZURPTU5v
ZGUoTm9kZSopOworICAgIHN0YXRpYyB2b2lkIHdpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQqKTsK
KyAgICBzdGF0aWMgdm9pZCBkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqKTsKKwogI2lmIEVOQUJM
RShXT1JLRVJTKQogICAgIGVudW0gV29ya2VyQWN0aW9uIHsgV29ya2VyQ3JlYXRlZCwgV29ya2Vy
RGVzdHJveWVkIH07CiAKQEAgLTM3NiwyNyArMzgxLDc5IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07
CiAKK2lubGluZSB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKE5v
ZGUqIG5vZGUpCit7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBub2RlLT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKKyAgICAgICAgaWYgKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1
Z2dlckFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckNv
bnRyb2xsZXItPmRvbUFnZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBicmVha3BvaW50ID0gZG9tQWdlbnQtPmdldEJyZWFrcG9pbnRGb3JOb2RlSW5z
ZXJ0aW9uKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnQtPmlzTnVs
bCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFt
KGJyZWFrcG9pbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyNlbmRpZgorfQorCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aWRJbnNlcnRET01Ob2RlKE5vZGUqIG5vZGUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAg
ICBpZiAobV9kb21BZ2VudCkKLSAgICAgICAgbV9kb21BZ2VudC0+ZGlkSW5zZXJ0RE9NTm9kZShu
b2RlKTsKKyAgICBpZiAoUGFnZSogcGFnZSA9IG5vZGUtPmRvY3VtZW50KCktPnBhZ2UoKSkgewor
ICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBh
Z2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkgeworICAgICAgICAgICAgaWYgKEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpCisgICAg
ICAgICAgICAgICAgZG9tQWdlbnQtPmRpZEluc2VydERPTU5vZGUobm9kZSk7CisgICAgICAgIH0K
KyAgICB9CiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlk
UmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQoraW5saW5lIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKIHsKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotICAgIGlmIChtX2RvbUFnZW50KQotICAgICAgICBtX2RvbUFnZW50LT5kaWRSZW1vdmVET01O
b2RlKG5vZGUpOworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGlmIChQYWdl
KiBwYWdlID0gbm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAgIGlmIChJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpKSB7CisgICAgICAgICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0g
aW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkgeworICAgICAgICAgICAgICAgIGlmIChJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxl
ci0+ZGVidWdnZXJBZ2VudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gYnJlYWtwb2ludCA9IGRvbUFnZW50LT5nZXRCcmVha3BvaW50Rm9yTm9kZVJlbW92
YWwobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtwb2ludC0+aXNOdWxsKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oYnJl
YWtwb2ludCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRvbUFnZW50LT5k
aWRSZW1vdmVET01Ob2RlKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
I2VuZGlmCit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxNb2RpZnlE
T01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCit7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5wYWdlKCkpIHsK
KyAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBw
YWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdn
ZXJBZ2VudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21B
Z2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBicmVha3BvaW50ID0gZG9tQWdlbnQtPmdldEJy
ZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2RpZmljYXRpb24oZWxlbWVudCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghYnJlYWtwb2ludC0+aXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oYnJlYWtwb2ludCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogI2VuZGlmCiB9CiAKIGlubGlu
ZSB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxl
bWVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChtX2RvbUFnZW50KQotICAg
ICAgICBtX2RvbUFnZW50LT5kaWRNb2RpZnlET01BdHRyKGVsZW1lbnQpOworICAgIGlmIChQYWdl
KiBwYWdlID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAgIGlmIChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpKSB7CisgICAgICAgICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50
ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkKKyAgICAgICAgICAgICAgICBkb21B
Z2VudC0+ZGlkTW9kaWZ5RE9NQXR0cihlbGVtZW50KTsKKyAgICAgICAgfQorICAgIH0KICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggNjM1NzY5
YS4uYzgxYjE2MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAt
NjMsNyArNjMsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgotI2luY2x1ZGUg
IlNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtMjA5LDgg
KzIwOCw2IEBAIGNvbnN0IGludCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCA9IDE2Owog
CiB9CiAKLUluc3BlY3RvckRPTUFnZW50KiBJbnNwZWN0b3JET01BZ2VudDo6c19kb21BZ2VudE9u
QnJlYWtwb2ludCA9IDA7Ci0KIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJ
bnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkK
ICAgICA6IEV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yRE9NQWdlbnRUeXBlKQogICAgICwgbV9jc3NT
dG9yZShjc3NTdG9yZSkKQEAgLTIyMyw5ICsyMjAsNiBAQCBJbnNwZWN0b3JET01BZ2VudDo6SW5z
cGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9u
dAogSW5zcGVjdG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCgpCiB7CiAgICAgcmVzZXQo
KTsKLQotICAgIGlmICh0aGlzID09IHNfZG9tQWdlbnRPbkJyZWFrcG9pbnQpCi0gICAgICAgIHNf
ZG9tQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpy
ZXNldCgpCkBAIC03NzAsNiArNzY0LDI5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92
ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKICAgICB9CiB9CiAKK1Bhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckRPTUFnZW50OjpnZXRCcmVha3BvaW50Rm9y
Tm9kZUluc2VydGlvbihOb2RlKiBub2RlKQoreworICAgIGlmIChoYXNCcmVha3BvaW50KG5vZGUs
IFN1YnRyZWVNb2RpZmllZCkpCisgICAgICAgIHJldHVybiBjcmVhdGVCcmVha3BvaW50KG5vZGUs
IFN1YnRyZWVNb2RpZmllZCk7CisgICAgcmV0dXJuIEluc3BlY3Rvck9iamVjdDo6bnVsbCgpOwor
fQorCitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QnJl
YWtwb2ludEZvck5vZGVSZW1vdmFsKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKGhhc0JyZWFrcG9p
bnQobm9kZSwgTm9kZVJlbW92ZWQpKQorICAgICAgICByZXR1cm4gY3JlYXRlQnJlYWtwb2ludChu
b2RlLCBOb2RlUmVtb3ZlZCk7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQoaW5uZXJQYXJlbnROb2Rl
KG5vZGUpLCBTdWJ0cmVlTW9kaWZpZWQpKQorICAgICAgICByZXR1cm4gY3JlYXRlQnJlYWtwb2lu
dChpbm5lclBhcmVudE5vZGUobm9kZSksIFN1YnRyZWVNb2RpZmllZCk7CisgICAgcmV0dXJuIElu
c3BlY3Rvck9iamVjdDo6bnVsbCgpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJ
bnNwZWN0b3JET01BZ2VudDo6Z2V0QnJlYWtwb2ludEZvckF0dHJpYnV0ZU1vZGlmaWNhdGlvbihF
bGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChoYXNCcmVha3BvaW50KGVsZW1lbnQsIEF0dHJp
YnV0ZU1vZGlmaWVkKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUJyZWFrcG9pbnQoZWxlbWVudCwg
QXR0cmlidXRlTW9kaWZpZWQpOworICAgIHJldHVybiBJbnNwZWN0b3JPYmplY3Q6Om51bGwoKTsK
K30KKwogU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVu
dCogZG9jdW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFkb2N1bWVudCB8fCBkb2N1bWVudC0+dXJs
KCkuaXNOdWxsKCkpCkBAIC05NzEsMTIgKzk4OCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmRpZEluc2VydERPTU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KG1fYnJlYWtwb2ludHMuc2l6ZSgpKSB7Ci0gICAgICAgIE5vZGUqIHBhcmVudCA9IGlubmVyUGFy
ZW50Tm9kZShub2RlKTsKLSAgICAgICAgaWYgKGhhc0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVl
TW9kaWZpZWQpKSB7Ci0gICAgICAgICAgICBpZiAoIXBhdXNlT25CcmVha3BvaW50KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQzMl90IG1hc2sgPSBt
X2JyZWFrcG9pbnRzLmdldChwYXJlbnQpOworICAgICAgICB1aW50MzJfdCBtYXNrID0gbV9icmVh
a3BvaW50cy5nZXQoaW5uZXJQYXJlbnROb2RlKG5vZGUpKTsKICAgICAgICAgdWludDMyX3QgaW5o
ZXJpdGFibGVUeXBlc01hc2sgPSAobWFzayB8IChtYXNrID4+IGRvbUJyZWFrcG9pbnREZXJpdmVk
VHlwZVNoaWZ0KSkgJiBpbmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2s7CiAgICAgICAg
IGlmIChpbmhlcml0YWJsZVR5cGVzTWFzaykKICAgICAgICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVh
a3BvaW50cyhub2RlLCBpbmhlcml0YWJsZVR5cGVzTWFzaywgdHJ1ZSk7CkBAIC0xMDA5LDEwICsx
MDIxLDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBu
b2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9icmVha3BvaW50cy5zaXplKCkpIHsK
LSAgICAgICAgaWYgKGhhc0JyZWFrcG9pbnQobm9kZSwgTm9kZVJlbW92ZWQpIHx8IGhhc0JyZWFr
cG9pbnQoaW5uZXJQYXJlbnROb2RlKG5vZGUpLCBTdWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAg
ICAgICBpZiAoIXBhdXNlT25CcmVha3BvaW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CiAgICAgICAgIC8vIFJlbW92ZSBzdWJ0cmVlIGJyZWFrcG9pbnRzLgogICAgICAg
ICBtX2JyZWFrcG9pbnRzLnJlbW92ZShub2RlKTsKICAgICAgICAgVmVjdG9yPE5vZGUqPiBzdGFj
aygxLCBpbm5lckZpcnN0Q2hpbGQobm9kZSkpOwpAQCAtMTA0OSwxMiArMTA1NywyNCBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGhhc0JyZWFrcG9pbnQoZWxl
bWVudCwgQXR0cmlidXRlTW9kaWZpZWQpKSB7Ci0gICAgICAgIGlmICghcGF1c2VPbkJyZWFrcG9p
bnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBtX2Zyb250ZW5kLT5hdHRyaWJ1dGVzVXBk
YXRlZChpZCwgYnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpKTsKK30KKwor
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGVCcmVh
a3BvaW50KE5vZGUqIG5vZGUsIGxvbmcgdHlwZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBicmVha3BvaW50ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKworICAgIC8vIEZp
bmQgYnJlYWtwb2ludCBvd25lci4KKyAgICB3aGlsZSAoIShtX2JyZWFrcG9pbnRzLmdldChub2Rl
KSAmICgxIDw8IHR5cGUpKSkgeworICAgICAgICBub2RlID0gaW5uZXJQYXJlbnROb2RlKG5vZGUp
OworICAgICAgICBBU1NFUlQobm9kZSk7CiAgICAgfQorICAgIGxvbmcgbm9kZUlkID0gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChub2RlKTsKKyAgICBBU1NFUlQobm9kZUlkKTsKIAotICAgIG1f
ZnJvbnRlbmQtPmF0dHJpYnV0ZXNVcGRhdGVkKGlkLCBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJp
YnV0ZXMoZWxlbWVudCkpOworICAgIGJyZWFrcG9pbnQtPnNldE51bWJlcigibm9kZUlkIiwgbm9k
ZUlkKTsKKyAgICBicmVha3BvaW50LT5zZXROdW1iZXIoInR5cGUiLCB0eXBlKTsKKyAgICByZXR1
cm4gYnJlYWtwb2ludC5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6Omhh
c0JyZWFrcG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKQpAQCAtMTA2NCwxOSArMTA4NCw2IEBA
IGJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6Omhhc0JyZWFrcG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0
eXBlKQogICAgIHJldHVybiBtX2JyZWFrcG9pbnRzLmdldChub2RlKSAmIChyb290Qml0IHwgZGVy
aXZlZEJpdCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OnBhdXNlT25CcmVha3BvaW50
KCkKLXsKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBzX2RvbUFnZW50T25C
cmVha3BvaW50ID0gdGhpczsKLSAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYnJlYWtQ
cm9ncmFtKCk7Ci0gICAgYm9vbCBkZWxldGVkID0gIXNfZG9tQWdlbnRPbkJyZWFrcG9pbnQ7Ci0g
ICAgc19kb21BZ2VudE9uQnJlYWtwb2ludCA9IDA7Ci0gICAgcmV0dXJuICFkZWxldGVkOwotI2Vs
c2UKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotfQotCiB2b2lkIEluc3BlY3RvckRPTUFnZW50
Ojp1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogbm9kZSwgdWludDMyX3Qgcm9vdE1hc2ss
IGJvb2wgc2V0KQogewogICAgIHVpbnQzMl90IG9sZE1hc2sgPSBtX2JyZWFrcG9pbnRzLmdldChu
b2RlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGZkM2M1YjUuLjBj
YWNhNjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMzYsNyArMzYs
NiBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNTU1N0b3JlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
VmFsdWVzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKLSNpbmNsdWRlICJTY3JpcHRTdGF0ZS5o
IgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTExNCw2
ICsxMTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2VhcmNoQ2FuY2Vs
ZWQoKTsKICAgICAgICAgdm9pZCBzZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5
cGUpOwogICAgICAgICB2b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcg
dHlwZSk7CisgICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldEJyZWFrcG9pbnRG
b3JOb2RlSW5zZXJ0aW9uKE5vZGUqKTsKKyAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gZ2V0QnJlYWtwb2ludEZvck5vZGVSZW1vdmFsKE5vZGUqKTsKKyAgICAgICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0QnJlYWtwb2ludEZvckF0dHJpYnV0ZU1vZGlmaWNhdGlvbihF
bGVtZW50Kik7CiAKICAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQg
Zm9yIENTUyBzdHlsZXMgaW5zcGVjdGlvbi4KICAgICAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBu
b2RlSWQsIGJvb2wgYXV0aG9yT25seSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVzKTsK
QEAgLTE2MCw3ICsxNjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcHVz
aERvY3VtZW50VG9Gcm9udGVuZCgpOwogCiAgICAgICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2Rl
KiBub2RlLCBsb25nIHR5cGUpOwotICAgICAgICBib29sIHBhdXNlT25CcmVha3BvaW50KCk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVCcmVha3BvaW50KE5vZGUq
IG5vZGUsIGxvbmcgdHlwZSk7CiAgICAgICAgIHZvaWQgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRz
KE5vZGUqIHJvb3QsIHVpbnQzMl90IHJvb3RNYXNrLCBib29sIHZhbHVlKTsKIAogICAgICAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMo
RWxlbWVudCogZWxlbWVudCk7CkBAIC0yMTcsOCArMjE5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPiA+IG1fc2VhcmNoUmVzdWx0czsKICAgICAg
ICAgVmVjdG9yPGxvbmc+IG1faW5zcGVjdGVkTm9kZXM7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSos
IHVpbnQzMl90PiBtX2JyZWFrcG9pbnRzOwotCi0gICAgICAgIHN0YXRpYyBJbnNwZWN0b3JET01B
Z2VudCogc19kb21BZ2VudE9uQnJlYWtwb2ludDsKICAgICB9OwogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMzU3YTA0My4uYWZi
YTAyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAK
QEAgLTU2LDExICs1NiwxNCBAQCBQYXNzT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JDb250cgogICAgIHJldHVybiBh
Z2VudC5yZWxlYXNlKCk7CiB9CiAKK0luc3BlY3RvckRlYnVnZ2VyQWdlbnQqIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCA9IDA7CisKIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxl
ciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAg
IDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCiAgICAgLCBtX2Zy
b250ZW5kKGZyb250ZW5kKQogICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQogICAgICwgbV9i
cmVha3BvaW50c0xvYWRlZChmYWxzZSkKKyAgICAsIG1fYnJlYWtQcm9ncmFtRGV0YWlscyhJbnNw
ZWN0b3JWYWx1ZTo6bnVsbCgpKQogewogfQogCkBAIC02OCw2ICs3MSw5IEBAIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkKIHsKICAgICBTY3JpcHREZWJ1
Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlTGlzdGVuZXIodGhpcywgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbnNwZWN0ZWRQYWdlKCkpOwogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUgPSAwOworCisg
ICAgaWYgKHRoaXMgPT0gc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50KQorICAgICAgICBzX2Rl
YnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmlzRGVidWdnZXJBbHdheXNFbmFibGVkKCkKQEAgLTI4Myw4ICsyODksNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0
ZSkKIHsKICAgICBBU1NFUlQoc2NyaXB0U3RhdGUgJiYgIW1fcGF1c2VkU2NyaXB0U3RhdGUpOwog
ICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZTsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGNhbGxGcmFtZXMgPSBjdXJyZW50Q2FsbEZyYW1lcygpOwotICAgIG1fZnJvbnRl
bmQtPnBhdXNlZFNjcmlwdChjYWxsRnJhbWVzLmdldCgpKTsKKyAgICBtX2Zyb250ZW5kLT5wYXVz
ZWRTY3JpcHQoY3VycmVudENhbGxGcmFtZXMoKSwgbV9icmVha1Byb2dyYW1EZXRhaWxzKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCkBAIC0yOTMsNiAr
Mjk4LDE5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogICAg
IG1fZnJvbnRlbmQtPnJlc3VtZWRTY3JpcHQoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpicmVha1Byb2dyYW0oUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZGV0YWlscykK
K3sKKyAgICBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQgPSB0aGlzOworICAgIG1fYnJlYWtQ
cm9ncmFtRGV0YWlscyA9IGRldGFpbHM7CisKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVk
KCkuYnJlYWtQcm9ncmFtKCk7CisgICAgaWYgKCFzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCA9IDA7
CisgICAgbV9icmVha1Byb2dyYW1EZXRhaWxzID0gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5k
ZXggOTFiY2Q0OS4uNmQ2ZThiYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRTY3JpcHRT
b3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpOwogCiAg
ICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQgYnJlYWtQcm9ncmFtKFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGRldGFpbHMpOwogICAgIHZvaWQgcmVzdW1lKCk7CiAgICAgdm9pZCBzdGVwT3Zl
clN0YXRlbWVudCgpOwogICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKQEAgLTkzLDYgKzk0
LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+IG1f
c3RpY2t5QnJlYWtwb2ludHM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkPiBtX2JyZWFr
cG9pbnRzTWFwcGluZzsKICAgICBib29sIG1fYnJlYWtwb2ludHNMb2FkZWQ7CisgICAgc3RhdGlj
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludDsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1fYnJlYWtQcm9ncmFtRGV0YWlsczsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKaW5kZXgg
M2RkOTU5NC4uNDAzNmY1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKQEAgLTY3
LDYgKzY3LDggQEAgcHVibGljOgogCiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CiAKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBl
TnVsbDsgfQorCiAgICAgdmlydHVhbCBib29sIGFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcihkb3VibGUqIG91dHB1dCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGFzTnVtYmVyKGxvbmcqIG91dHB1dCkgY29uc3Q7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCmluZGV4
IGNjZjQ1YjYuLjgyMzc2ZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCkBAIC0xMDYsNyArMTA2LDcgQEAgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRJdGVtID0gZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB0aGlzLl9l
bGVtZW50LmFwcGVuZENoaWxkKGNoZWNrYm94RWxlbWVudCk7CiAKICAgICB0aGlzLl9icmVha3Bv
aW50LmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jaGFuZ2VkIiwgdGhpcy5fZW5hYmxlQ2hhbmdl
ZCwgdGhpcyk7Ci0gICAgdGhpcy5fYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJyZW1vdmVk
IiwgdGhpcy5fcmVtb3ZlZCwgdGhpcyk7CisgICAgdGhpcy5fYnJlYWtwb2ludC5hZGRFdmVudExp
c3RlbmVyKCJyZW1vdmVkIiwgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMuYmluZCh0aGlz
LCAicmVtb3ZlZCIpKTsKIH0KIAogV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRJdGVtLnByb3RvdHlw
ZSA9IHsKQEAgLTEyOCwxNSArMTI4LDEwIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRlbS5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgIH0sCiAK
LSAgICBfZW5hYmxlQ2hhbmdlZDogZnVuY3Rpb24oKQorICAgIF9lbmFibGVDaGFuZ2VkOiBmdW5j
dGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHZhciBjaGVja2JveCA9IHRoaXMuX2VsZW1lbnQu
Zmlyc3RDaGlsZDsKICAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHRoaXMuX2JyZWFrcG9pbnQu
ZW5hYmxlZDsKLSAgICB9LAotCi0gICAgX3JlbW92ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJyZW1vdmVkIik7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKaW5kZXggYmQ1MjIzNS4uNWNi
NmQxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50Lmpz
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpAQCAtNDEzLDgg
KzQxMywxOCBAQCBXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlID0gewogICAgICAgICBw
YXJlbnQucmVtb3ZlQ2hpbGRfKG5vZGUpOwogICAgICAgICB2YXIgZXZlbnQgPSB7IHRhcmdldCA6
IG5vZGUsIHJlbGF0ZWROb2RlIDogcGFyZW50IH07CiAgICAgICAgIHRoaXMuZG9jdW1lbnQuX2Zp
cmVEb21FdmVudCgiRE9NTm9kZVJlbW92ZWQiLCBldmVudCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlz
Ll9pZFRvRE9NTm9kZVtub2RlSWRdOwotICAgIH0KKyAgICAgICAgZGVsZXRlIHRoaXMuX2lkVG9E
T01Ob2RlW25vZGUuaWRdOworICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50cyhub2RlKTsK
KyAgICB9LAorCisgICAgX3JlbW92ZUJyZWFrcG9pbnRzOiBmdW5jdGlvbihub2RlKQorICAgIHsK
KyAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUJyZWFrcG9pbnRNYW5hZ2VyLnJlbW92ZUJyZWFrcG9p
bnRzRm9yTm9kZShub2RlKTsKKyAgICAgICAgaWYgKCFub2RlLmNoaWxkcmVuKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVu
Z3RoOyArK2kpCisgICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50cyhub2RlLmNoaWxk
cmVuW2ldKTsKKyAgICAgfQogfQogCiBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZSA9IHt9
CkBAIC03MDgsNiArNzE4LDEzIEBAIFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50TWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGZvciAodmFyIHR5cGUgaW4gbm9kZUJyZWFrcG9pbnRzKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbYnJl
YWtwb2ludC5ub2RlLmlkXTsKKyAgICB9LAorCisgICAgYnJlYWtwb2ludEhpdDogZnVuY3Rpb24o
bm9kZUlkLCB0eXBlKQorICAgIHsKKyAgICAgICAgdmFyIG5vZGVCcmVha3BvaW50cyA9IHRoaXMu
X2JyZWFrcG9pbnRzW25vZGVJZF07CisgICAgICAgIGlmICh0eXBlIGluIG5vZGVCcmVha3BvaW50
cykKKyAgICAgICAgICAgIG5vZGVCcmVha3BvaW50c1t0eXBlXS5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoImhpdCIpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NjcmlwdC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQu
anMKaW5kZXggNDJkNjg1MC4uMmVmOTMyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2Ny
aXB0LmpzCkBAIC02MiwxMSArNjIsMTIgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUg
PSB7CiAgICAgewogICAgICAgICBpZiAoIXRoaXMuc291cmNlKQogICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIHRoaXMuX2xpbmVzQ291bnQgPSAwOworICAgICAgICB2YXIgbGluZXNDb3Vu
dCA9IDA7CiAgICAgICAgIHZhciBsYXN0SW5kZXggPSB0aGlzLnNvdXJjZS5pbmRleE9mKCJcbiIp
OwogICAgICAgICB3aGlsZSAobGFzdEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgbGFzdElu
ZGV4ID0gdGhpcy5zb3VyY2UuaW5kZXhPZigiXG4iLCBsYXN0SW5kZXggKyAxKQotICAgICAgICAg
ICAgdGhpcy5fbGluZXNDb3VudCsrOworICAgICAgICAgICAgbGluZXNDb3VudCsrOwogICAgICAg
ICB9CisgICAgICAgIHJldHVybiBsaW5lc0NvdW50OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IGNmNDdkYzYuLmE0NjZmYTcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMTQ0NSw5ICsxNDQ1LDExIEBA
IFdlYkluc3BlY3Rvci5mYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291cmNl
VVJMLCBzb3VyY2UsIHN0YXJ0aW5nTGluCiAgICAgdGhpcy5wYW5lbHMuc2NyaXB0cy5hZGRTY3Jp
cHQobnVsbCwgc291cmNlVVJMLCBzb3VyY2UsIHN0YXJ0aW5nTGluZSwgZXJyb3JMaW5lLCBlcnJv
ck1lc3NhZ2UpOwogfQogCi1XZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oY2Fs
bEZyYW1lcykKK1dlYkluc3BlY3Rvci5wYXVzZWRTY3JpcHQgPSBmdW5jdGlvbihjYWxsRnJhbWVz
LCBkZXRhaWxzKQogewogICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuZGVidWdnZXJQYXVzZWQoY2Fs
bEZyYW1lcyk7CisgICAgaWYgKGRldGFpbHMpCisgICAgICAgIHRoaXMuZG9tQnJlYWtwb2ludE1h
bmFnZXIuYnJlYWtwb2ludEhpdChkZXRhaWxzLm5vZGVJZCwgZGV0YWlscy50eXBlKTsKIH0KIAog
V2ViSW5zcGVjdG9yLnJlc3VtZWRTY3JpcHQgPSBmdW5jdGlvbigpCg==
</data>
<flag name="review"
          id="54549"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65909</attachid>
            <date>2010-08-30 05:56:48 -0700</date>
            <delta_ts>2010-08-31 04:18:02 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>break_details.patch</filename>
            <type>text/plain</type>
            <size>27548</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTA4Zjc2MS4uOTI1MTYzYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMC0wOC0zMCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIG1vcmUgaW5mb3Jt
YXRpb24gdG8gZnJvbnQtZW5kIHdoZW4gYnJlYWtpbmcgb24gRE9NIGV2ZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDY3OQorCisgICAgICAgICog
ZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6
aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlcklu
c2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6bm90aWZ5Q2hpbGRJbnNlcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRj
aENoaWxkUmVtb3ZhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5p
ZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEluc2VydERPTU5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFJlbW92ZURPTU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JDb250
cm9sbGVyRm9yTm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEJyZWFrcG9pbnRG
b3JOb2RlSW5zZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpn
ZXRCcmVha3BvaW50Rm9yTm9kZVJlbW92YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OmdldEJyZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2RpZmljYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZUJyZWFrcG9pbnQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6fkluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjpp
c051bGwpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFy
UGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRlbSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEl0ZW0ucHJvdG90eXBlLl9lbmFibGVDaGFuZ2VkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5fY2hpbGROb2RlUmVtb3ZlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9icmVha3BvaW50
UmVtb3ZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludE1hbmFnZXIucHJv
dG90eXBlLmJyZWFrcG9pbnRIaXQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2Ny
aXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUuZ2V0IGxpbmVz
Q291bnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlwdCk6CisKIDIwMTAtMDgtMjggIEplcmVteSBN
b3Nrb3ZpY2ggIDxqZXJlbXlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERp
bWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3Bw
IGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggZWY2MmIzOC4uN2Q4ODk0OCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTEzNCw2ICsxMzQsOCBAQCBib29sIENvbnRhaW5lck5v
ZGU6Omluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGls
ZCwgRXhjZQogICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIGJy
ZWFrOwogCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKGNo
aWxkLCB0aGlzKTsKKwogICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24obmV4dC5nZXQoKSwgY2hp
bGQpOwogCiAgICAgICAgIC8vIFNlbmQgbm90aWZpY2F0aW9uIGFib3V0IHRoZSBjaGlsZHJlbiBj
aGFuZ2UuCkBAIC0yMDEsNiArMjAzLDggQEAgdm9pZCBDb250YWluZXJOb2RlOjpwYXJzZXJJbnNl
cnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogbmV4dENoaWwKICAgICBm
b3IgKE5vZGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAh
PSB0YXJnZXRzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgp
OwogCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKGNoaWxk
LCB0aGlzKTsKKwogICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24obmV4dC5nZXQoKSwgY2hpbGQp
OwogCiAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCh0cnVlLCBuZXh0Q2hpbGRQcmV2aW91c1NpYmxp
bmcuZ2V0KCksIG5leHRDaGlsZCwgMSk7CkBAIC0yNzQsNiArMjc4LDggQEAgYm9vbCBDb250YWlu
ZXJOb2RlOjpyZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogb2xk
Q2hpbGQsIEV4Y2UKICAgICAgICAgQVNTRVJUKCFjaGlsZC0+bmV4dFNpYmxpbmcoKSk7CiAgICAg
ICAgIEFTU0VSVCghY2hpbGQtPnByZXZpb3VzU2libGluZygpKTsKIAorICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShjaGlsZC5nZXQoKSwgdGhpcyk7CisKICAg
ICAgICAgLy8gQWRkIGNoaWxkIGFmdGVyICJwcmV2Ii4KICAgICAgICAgZm9yYmlkRXZlbnREaXNw
YXRjaCgpOwogICAgICAgICBOb2RlKiBuZXh0OwpAQCAtNTU1LDYgKzU2MSw4IEBAIGJvb2wgQ29u
dGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0
aW9uQ29kZSYgZWMsIGJvCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAg
ICAgICBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShjaGlsZCwgdGhpcyk7
CisKICAgICAgICAgLy8gQXBwZW5kIGNoaWxkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKICAgICAg
ICAgZm9yYmlkRXZlbnREaXNwYXRjaCgpOwogICAgICAgICBjaGlsZC0+c2V0UGFyZW50KHRoaXMp
OwpAQCAtNTkzLDYgKzYwMSw4IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQo
UGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCkKICAgICBBU1NFUlQobmV3Q2hpbGQpOwogICAgIEFT
U0VSVCghbmV3Q2hpbGQtPnBhcmVudCgpKTsgLy8gVXNlIGFwcGVuZENoaWxkIGlmIHlvdSBuZWVk
IHRvIGhhbmRsZSByZXBhcmVudGluZyAoYW5kIHdhbnQgRE9NIG11dGF0aW9uIGV2ZW50cykuCiAK
KyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShuZXdDaGlsZC5nZXQo
KSwgdGhpcyk7CisKICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7CiAgICAgTm9kZSogbGFzdCA9
IG1fbGFzdENoaWxkOwogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgdGFrZSBhIFBh
c3NSZWZQdHIuCkBAIC05NjQsMTIgKzk3NCw3IEBAIHN0YXRpYyB2b2lkIG5vdGlmeUNoaWxkSW5z
ZXJ0ZWQoTm9kZSogY2hpbGQpCiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVu
KCkpOwogCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9IGNoaWxk
LT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAg
ICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5kaWRJbnNlcnRET01Ob2RlKGNoaWxkKTsKLSAg
ICB9Ci0jZW5kaWYKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRJbnNlcnRET01Ob2RlKGNo
aWxkKTsKIAogICAgIFJlZlB0cjxOb2RlPiBjID0gY2hpbGQ7CiAgICAgUmVmUHRyPERvY3VtZW50
PiBkb2N1bWVudCA9IGNoaWxkLT5kb2N1bWVudCgpOwpAQCAtMTAwMywxMiArMTAwOCw3IEBAIHN0
YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKE5vZGUqIGNoaWxkKQogewogICAg
IEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKIAotI2lmIEVOQUJMRShJTlNQRUNU
T1IpICAgIAotICAgIGlmIChQYWdlKiBwYWdlID0gY2hpbGQtPmRvY3VtZW50KCktPnBhZ2UoKSkg
ewotICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9
IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgIGluc3BlY3RvckNvbnRy
b2xsZXItPmRpZFJlbW92ZURPTU5vZGUoY2hpbGQpOwotICAgIH0KLSNlbmRpZgorICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OndpbGxSZW1vdmVET01Ob2RlKGNoaWxkKTsKIAogICAgIFJlZlB0cjxO
b2RlPiBjID0gY2hpbGQ7CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGNoaWxkLT5k
b2N1bWVudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAppbmRleCAzOWJmMzkzLi5mYjE3NTY1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNTQw
LDYgKzU0MCwxMSBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5
bGVBdHRyaWJ1dGUoKSkKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURP
TUF0dHIodGhpcyk7CisjZW5kaWYKKwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
ID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7
CiAKICAgICAvLyBBbGxvY2F0ZSBhdHRyaWJ1dGUgbWFwIGlmIG5lY2Vzc2FyeS4KQEAgLTU2Mywx
NyArNTY4LDE4IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwKICAgICB9CiAKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQotICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKSB7Ci0g
ICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFn
ZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzU3luY2hyb25p
emluZ1N0eWxlQXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxl
ci0+ZGlkTW9kaWZ5RE9NQXR0cih0aGlzKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIWlz
U3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlKCkpCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZE1vZGlmeURPTUF0dHIodGhpcyk7CiAjZW5kaWYKIH0KIAogdm9pZCBFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpCiB7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBp
ZiAoIWlzU3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlKCkpCisgICAgICAgIEluc3BlY3RvckNv
bnRyb2xsZXI6OndpbGxNb2RpZnlET01BdHRyKHRoaXMpOworI2VuZGlmCisKICAgICBkb2N1bWVu
dCgpLT5pbmNET01UcmVlVmVyc2lvbigpOwogCiAgICAgLy8gQWxsb2NhdGUgYXR0cmlidXRlIG1h
cCBpZiBuZWNlc3NhcnkuCkBAIC01OTIsMTIgKzU5OCw4IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUsCiAgICAgfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9
IGRvY3VtZW50KCktPnBhZ2UoKSkgewotICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkgewotICAg
ICAgICAgICAgaWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQotICAgICAgICAg
ICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZE1vZGlmeURPTUF0dHIodGhpcyk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgaWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQor
ICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRNb2RpZnlET01BdHRyKHRoaXMpOwogI2Vu
ZGlmCiB9CiAKQEAgLTEyMjgsNiArMTIzMCw4IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRl
TlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluCiAK
IHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0
dHIodGhpcyk7CisKICAgICBTdHJpbmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRl
Q2FzZSh0aGlzKSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7CiAKICAgICBpZiAobV9hdHRyaWJ1dGVN
YXApIHsKQEAgLTEyMzYsMTMgKzEyNDAsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0
ZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAgICAgZWMg
PSAwOwogICAgIH0KICAgICAKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChQYWdlKiBw
YWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQot
ICAgICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkTW9kaWZ5RE9NQXR0cih0aGlzKTsK
LSAgICB9Ci0jZW5kaWYKLSAgICAKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRNb2RpZnlE
T01BdHRyKHRoaXMpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0
IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCAxZjAzNGIyLi5mNThhZTY3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKQEAgLTcyLDcgKzcyLDcgQEAgbW9kdWxlIGNvcmUgewog
ICAgICAgICBbbm90aWZ5XSB2b2lkIGRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKICAgICAgICAgW25v
dGlmeV0gdm9pZCBmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKG91dCBTdHJpbmcgdXJsLCBvdXQg
U3RyaW5nIGRhdGEsIG91dCBpbnQgZmlyc3RMaW5lLCBvdXQgaW50IGVycm9yTGluZSwgb3V0IFN0
cmluZyBlcnJvck1lc3NhZ2UpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHBhcnNlZFNjcmlwdFNv
dXJjZShvdXQgU3RyaW5nIHNvdXJjZUlELCBvdXQgU3RyaW5nIHVybCwgb3V0IFN0cmluZyBkYXRh
LCBvdXQgaW50IGZpcnN0TGluZSwgb3V0IGludCBzY3JpcHRXb3JsZFR5cGUpOwotICAgICAgICBb
bm90aWZ5XSB2b2lkIHBhdXNlZFNjcmlwdChvdXQgVmFsdWUgY2FsbEZyYW1lcyk7CisgICAgICAg
IFtub3RpZnldIHZvaWQgcGF1c2VkU2NyaXB0KG91dCBWYWx1ZSBjYWxsRnJhbWVzLCBvdXQgVmFs
dWUgZGV0YWlscyk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgcHJvZmlsZXJXYXNFbmFibGVkKCk7
CiAgICAgICAgIFtub3RpZnldIHZvaWQgcHJvZmlsZXJXYXNEaXNhYmxlZCgpOwogICAgICAgICBb
bm90aWZ5XSB2b2lkIHJlc3RvcmVkQnJlYWtwb2ludChvdXQgU3RyaW5nIHNvdXJjZUlELCBvdXQg
U3RyaW5nIHVybCwgb3V0IGludCBsaW5lLCBvdXQgYm9vbGVhbiBlbmFibGVkLCBvdXQgU3RyaW5n
IGNvbmRpdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXgg
N2VkMjU0OS4uZjk5ODFhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aApAQCAtMzEsNyArMzEsMTAgQEAKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNpbmNsdWRlICJD
b29raWUuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdl
bnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNjAsNyArNjMsNiBAQCBjbGFzcyBJbnNw
ZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JDU1NTdG9yZTsKIGNsYXNzIEluc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7Ci1jbGFz
cyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFz
cyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKQEAgLTE4
Myw5ICsxODUsMTMgQEAgcHVibGljOgogICAgIHZvaWQgbWFpblJlc291cmNlRmlyZWRMb2FkRXZl
bnQoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBLVVJMJik7CiAgICAgdm9pZCBtYWluUmVzb3VyY2VG
aXJlZERPTUNvbnRlbnRFdmVudChEb2N1bWVudExvYWRlciosIGNvbnN0IEtVUkwmKTsKIAotICAg
IHZvaWQgZGlkSW5zZXJ0RE9NTm9kZShOb2RlKik7Ci0gICAgdm9pZCBkaWRSZW1vdmVET01Ob2Rl
KE5vZGUqKTsKLSAgICB2b2lkIGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCopOworICAgIHN0YXRp
YyB2b2lkIHdpbGxJbnNlcnRET01Ob2RlKE5vZGUqIG5vZGUsIE5vZGUqIHBhcmVudCk7CisgICAg
c3RhdGljIHZvaWQgZGlkSW5zZXJ0RE9NTm9kZShOb2RlKik7CisgICAgc3RhdGljIHZvaWQgd2ls
bFJlbW92ZURPTU5vZGUoTm9kZSopOworICAgIHN0YXRpYyB2b2lkIHdpbGxNb2RpZnlET01BdHRy
KEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqKTsK
KyAgICBzdGF0aWMgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlckZvck5v
ZGUoTm9kZSopOworCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgZW51bSBXb3JrZXJBY3Rpb24g
eyBXb3JrZXJDcmVhdGVkLCBXb3JrZXJEZXN0cm95ZWQgfTsKIApAQCAtMzc2LDMwICszODIsODQg
QEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAoraW5saW5lIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6d2lsbEluc2VydERPTU5vZGUoTm9kZSogbm9kZSwgTm9kZSogcGFyZW50KQoreworI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvck5vZGUobm9kZSkpIHsK
KyAgICAgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3Rv
ckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKTsKKyAgICAgICAgaWYgKCFkZWJ1Z2dlckFnZW50
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpOworICAgICAgICBpZiAoIWRvbUFn
ZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGJyZWFrcG9pbnQgPSBkb21BZ2VudC0+Z2V0QnJlYWtwb2ludEZvck5vZGVJbnNlcnRpb24obm9k
ZSwgcGFyZW50KTsKKyAgICAgICAgaWYgKCFicmVha3BvaW50LT5pc051bGwoKSkKKyAgICAgICAg
ICAgIGRlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShicmVha3BvaW50KTsKKyAgICB9CisjZW5k
aWYKK30KKwogaW5saW5lIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkSW5zZXJ0RE9NTm9k
ZShOb2RlKiBub2RlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fZG9tQWdl
bnQpCi0gICAgICAgIG1fZG9tQWdlbnQtPmRpZEluc2VydERPTU5vZGUobm9kZSk7CisgICAgaWYg
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250
cm9sbGVyRm9yTm9kZShub2RlKSkgeworICAgICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRv
bUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkKKyAgICAgICAgICAgIGRv
bUFnZW50LT5kaWRJbnNlcnRET01Ob2RlKG5vZGUpOworICAgIH0KICNlbmRpZgogfQogCi1pbmxp
bmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUp
CitpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsUmVtb3ZlRE9NTm9kZShOb2Rl
KiBub2RlKQogewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fZG9tQWdlbnQpCi0g
ICAgICAgIG1fZG9tQWdlbnQtPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7CisjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yTm9kZShub2RlKSkgeworICAgICAg
ICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5kb21B
Z2VudCgpOworICAgICAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3Rv
ckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKSkgeworICAgICAgICAgICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBicmVha3BvaW50ID0gZG9tQWdlbnQtPmdldEJyZWFrcG9pbnRGb3JOb2RlUmVt
b3ZhbChub2RlKTsKKyAgICAgICAgICAgIGlmICghYnJlYWtwb2ludC0+aXNOdWxsKCkpCisgICAg
ICAgICAgICAgICAgZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKGJyZWFrcG9pbnQpOworICAg
ICAgICB9CisgICAgICAgIGRvbUFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOworICAgIH0K
KyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsTW9kaWZ5
RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQoreworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0g
aW5zcGVjdG9yQ29udHJvbGxlckZvck5vZGUoZWxlbWVudCkpIHsKKyAgICAgICAgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPmRlYnVn
Z2VyQWdlbnQoKTsKKyAgICAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250
cm9sbGVyLT5kb21BZ2VudCgpOworICAgICAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJyZWFrcG9pbnQgPSBkb21B
Z2VudC0+Z2V0QnJlYWtwb2ludEZvckF0dHJpYnV0ZU1vZGlmaWNhdGlvbihlbGVtZW50KTsKKyAg
ICAgICAgaWYgKCFicmVha3BvaW50LT5pc051bGwoKSkKKyAgICAgICAgICAgIGRlYnVnZ2VyQWdl
bnQtPmJyZWFrUHJvZ3JhbShicmVha3BvaW50KTsKKyAgICB9CiAjZW5kaWYKIH0KIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVt
ZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fZG9tQWdlbnQpCi0gICAg
ICAgIG1fZG9tQWdlbnQtPmRpZE1vZGlmeURPTUF0dHIoZWxlbWVudCk7CisgICAgaWYgKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVy
Rm9yTm9kZShlbGVtZW50KSkgeworICAgICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFn
ZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkKKyAgICAgICAgICAgIGRvbUFn
ZW50LT5kaWRNb2RpZnlET01BdHRyKGVsZW1lbnQpOworICAgIH0KICNlbmRpZgogfQogCitpbmxp
bmUgSW5zcGVjdG9yQ29udHJvbGxlciogSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQ29u
dHJvbGxlckZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoUGFnZSogcGFnZSA9IG5vZGUt
PmRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmluc3BlY3RvckNvbnRy
b2xsZXIoKTsKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yQ29udHJvbGxlcl9oKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDgyODI3YmQuLjE3ZTk1N2UgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTY0LDcgKzY0LDYgQEAKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU3R5bGVDb25zdGFudHMuaCIKLSNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgog
I2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlz
dC5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTIxMCw4ICsyMDksNiBAQCBjb25zdCBpbnQgZG9t
QnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQgPSAxNjsKIAogfQogCi1JbnNwZWN0b3JET01BZ2Vu
dCogSW5zcGVjdG9yRE9NQWdlbnQ6OnNfZG9tQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwotCiBJbnNw
ZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0
b3JlLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBFdmVudExpc3RlbmVyKElu
c3BlY3RvckRPTUFnZW50VHlwZSkKICAgICAsIG1fY3NzU3RvcmUoY3NzU3RvcmUpCkBAIC0yMjQs
OSArMjIxLDYgQEAgSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3BlY3Rv
ckNTU1N0b3JlKiBjc3NTdG9yZSwgSW5zcGVjdG9yRnJvbnQKIEluc3BlY3RvckRPTUFnZW50Ojp+
SW5zcGVjdG9yRE9NQWdlbnQoKQogewogICAgIHJlc2V0KCk7Ci0KLSAgICBpZiAodGhpcyA9PSBz
X2RvbUFnZW50T25CcmVha3BvaW50KQotICAgICAgICBzX2RvbUFnZW50T25CcmVha3BvaW50ID0g
MDsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzZXQoKQpAQCAtNzgwLDYgKzc3NCwy
OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9k
ZUlkLCBsb25nIHR5cGUpCiAgICAgfQogfQogCitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJ
bnNwZWN0b3JET01BZ2VudDo6Z2V0QnJlYWtwb2ludEZvck5vZGVJbnNlcnRpb24oTm9kZSosIE5v
ZGUqIHBhcmVudCkKK3sKKyAgICBpZiAoaGFzQnJlYWtwb2ludChwYXJlbnQsIFN1YnRyZWVNb2Rp
ZmllZCkpCisgICAgICAgIHJldHVybiBjcmVhdGVCcmVha3BvaW50KHBhcmVudCwgU3VidHJlZU1v
ZGlmaWVkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yT2JqZWN0OjpudWxsKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckRPTUFnZW50OjpnZXRCcmVha3BvaW50Rm9y
Tm9kZVJlbW92YWwoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoaGFzQnJlYWtwb2ludChub2RlLCBO
b2RlUmVtb3ZlZCkpCisgICAgICAgIHJldHVybiBjcmVhdGVCcmVha3BvaW50KG5vZGUsIE5vZGVS
ZW1vdmVkKTsKKyAgICBpZiAoaGFzQnJlYWtwb2ludChpbm5lclBhcmVudE5vZGUobm9kZSksIFN1
YnRyZWVNb2RpZmllZCkpCisgICAgICAgIHJldHVybiBjcmVhdGVCcmVha3BvaW50KGlubmVyUGFy
ZW50Tm9kZShub2RlKSwgU3VidHJlZU1vZGlmaWVkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yT2Jq
ZWN0OjpudWxsKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckRP
TUFnZW50OjpnZXRCcmVha3BvaW50Rm9yQXR0cmlidXRlTW9kaWZpY2F0aW9uKEVsZW1lbnQqIGVs
ZW1lbnQpCit7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQoZWxlbWVudCwgQXR0cmlidXRlTW9kaWZp
ZWQpKQorICAgICAgICByZXR1cm4gY3JlYXRlQnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1dGVN
b2RpZmllZCk7CisgICAgcmV0dXJuIEluc3BlY3Rvck9iamVjdDo6bnVsbCgpOworfQorCiBTdHJp
bmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVu
dCkgY29uc3QKIHsKICAgICBpZiAoIWRvY3VtZW50IHx8IGRvY3VtZW50LT51cmwoKS5pc051bGwo
KSkKQEAgLTk4NSwxMiArMTAwMiw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2Vy
dERPTU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fYnJlYWtw
b2ludHMuc2l6ZSgpKSB7Ci0gICAgICAgIE5vZGUqIHBhcmVudCA9IGlubmVyUGFyZW50Tm9kZShu
b2RlKTsKLSAgICAgICAgaWYgKGhhc0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQp
KSB7Ci0gICAgICAgICAgICBpZiAoIXBhdXNlT25CcmVha3BvaW50KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQzMl90IG1hc2sgPSBtX2JyZWFrcG9p
bnRzLmdldChwYXJlbnQpOworICAgICAgICB1aW50MzJfdCBtYXNrID0gbV9icmVha3BvaW50cy5n
ZXQoaW5uZXJQYXJlbnROb2RlKG5vZGUpKTsKICAgICAgICAgdWludDMyX3QgaW5oZXJpdGFibGVU
eXBlc01hc2sgPSAobWFzayB8IChtYXNrID4+IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0
KSkgJiBpbmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2s7CiAgICAgICAgIGlmIChpbmhl
cml0YWJsZVR5cGVzTWFzaykKICAgICAgICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhu
b2RlLCBpbmhlcml0YWJsZVR5cGVzTWFzaywgdHJ1ZSk7CkBAIC0xMDIzLDEwICsxMDM1LDYgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobV9icmVha3BvaW50cy5zaXplKCkpIHsKLSAgICAgICAg
aWYgKGhhc0JyZWFrcG9pbnQobm9kZSwgTm9kZVJlbW92ZWQpIHx8IGhhc0JyZWFrcG9pbnQoaW5u
ZXJQYXJlbnROb2RlKG5vZGUpLCBTdWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAgICAgICBpZiAo
IXBhdXNlT25CcmVha3BvaW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CiAgICAgICAgIC8vIFJlbW92ZSBzdWJ0cmVlIGJyZWFrcG9pbnRzLgogICAgICAgICBtX2JyZWFr
cG9pbnRzLnJlbW92ZShub2RlKTsKICAgICAgICAgVmVjdG9yPE5vZGUqPiBzdGFjaygxLCBpbm5l
ckZpcnN0Q2hpbGQobm9kZSkpOwpAQCAtMTA2MywxMiArMTA3MSwyNCBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFp
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGhhc0JyZWFrcG9pbnQoZWxlbWVudCwgQXR0
cmlidXRlTW9kaWZpZWQpKSB7Ci0gICAgICAgIGlmICghcGF1c2VPbkJyZWFrcG9pbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICBtX2Zyb250ZW5kLT5hdHRyaWJ1dGVzVXBkYXRlZChpZCwg
YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpKTsKK30KKworUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGVCcmVha3BvaW50KE5v
ZGUqIG5vZGUsIGxvbmcgdHlwZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVh
a3BvaW50ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKworICAgIC8vIEZpbmQgYnJlYWtw
b2ludCBvd25lci4KKyAgICB3aGlsZSAoIShtX2JyZWFrcG9pbnRzLmdldChub2RlKSAmICgxIDw8
IHR5cGUpKSkgeworICAgICAgICBub2RlID0gaW5uZXJQYXJlbnROb2RlKG5vZGUpOworICAgICAg
ICBBU1NFUlQobm9kZSk7CiAgICAgfQorICAgIGxvbmcgbm9kZUlkID0gbV9kb2N1bWVudE5vZGVU
b0lkTWFwLmdldChub2RlKTsKKyAgICBBU1NFUlQobm9kZUlkKTsKIAotICAgIG1fZnJvbnRlbmQt
PmF0dHJpYnV0ZXNVcGRhdGVkKGlkLCBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxl
bWVudCkpOworICAgIGJyZWFrcG9pbnQtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKKyAg
ICBicmVha3BvaW50LT5zZXROdW1iZXIoInR5cGUiLCB0eXBlKTsKKyAgICByZXR1cm4gYnJlYWtw
b2ludC5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6Omhhc0JyZWFrcG9p
bnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKQpAQCAtMTA3OCwxOSArMTA5OCw2IEBAIGJvb2wgSW5z
cGVjdG9yRE9NQWdlbnQ6Omhhc0JyZWFrcG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKQogICAg
IHJldHVybiBtX2JyZWFrcG9pbnRzLmdldChub2RlKSAmIChyb290Qml0IHwgZGVyaXZlZEJpdCk7
CiB9CiAKLWJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OnBhdXNlT25CcmVha3BvaW50KCkKLXsKLSNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBzX2RvbUFnZW50T25CcmVha3BvaW50
ID0gdGhpczsKLSAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYnJlYWtQcm9ncmFtKCk7
Ci0gICAgYm9vbCBkZWxldGVkID0gIXNfZG9tQWdlbnRPbkJyZWFrcG9pbnQ7Ci0gICAgc19kb21B
Z2VudE9uQnJlYWtwb2ludCA9IDA7Ci0gICAgcmV0dXJuICFkZWxldGVkOwotI2Vsc2UKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSNlbmRpZgotfQotCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1cGRhdGVT
dWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogbm9kZSwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0
KQogewogICAgIHVpbnQzMl90IG9sZE1hc2sgPSBtX2JyZWFrcG9pbnRzLmdldChub2RlKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGZkM2M1YjUuLjI3ODc4MDIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMzYsNyArMzYsNiBAQAogI2lu
Y2x1ZGUgIkluc3BlY3RvckNTU1N0b3JlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgi
CiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKLSNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1
ZGUgIlRpbWVyLmgiCiAKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTExNCw2ICsxMTMsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2VhcmNoQ2FuY2VsZWQoKTsKICAg
ICAgICAgdm9pZCBzZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOwogICAg
ICAgICB2b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldEJyZWFrcG9pbnRGb3JOb2RlSW5z
ZXJ0aW9uKE5vZGUqIG5vZGUsIE5vZGUqIHBhcmVudCk7CisgICAgICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IGdldEJyZWFrcG9pbnRGb3JOb2RlUmVtb3ZhbChOb2RlKik7CisgICAgICAg
IFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldEJyZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2Rp
ZmljYXRpb24oRWxlbWVudCopOwogCiAgICAgICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhl
IGZyb250ZW5kIGZvciBDU1Mgc3R5bGVzIGluc3BlY3Rpb24uCiAgICAgICAgIHZvaWQgZ2V0U3R5
bGVzKGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4q
IHN0eWxlcyk7CkBAIC0xNjAsNyArMTYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIHB1c2hEb2N1bWVudFRvRnJvbnRlbmQoKTsKIAogICAgICAgICBib29sIGhhc0JyZWFr
cG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKTsKLSAgICAgICAgYm9vbCBwYXVzZU9uQnJlYWtw
b2ludCgpOworICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlQnJlYWtw
b2ludChOb2RlKiBub2RlLCBsb25nIHR5cGUpOwogICAgICAgICB2b2lkIHVwZGF0ZVN1YnRyZWVC
cmVha3BvaW50cyhOb2RlKiByb290LCB1aW50MzJfdCByb290TWFzaywgYm9vbCB2YWx1ZSk7CiAK
ICAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQXR0cmli
dXRlU3R5bGVzKEVsZW1lbnQqIGVsZW1lbnQpOwpAQCAtMjE3LDggKzIxOSw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBtX3NlYXJjaFJlc3Vs
dHM7CiAgICAgICAgIFZlY3Rvcjxsb25nPiBtX2luc3BlY3RlZE5vZGVzOwogICAgICAgICBIYXNo
TWFwPE5vZGUqLCB1aW50MzJfdD4gbV9icmVha3BvaW50czsKLQotICAgICAgICBzdGF0aWMgSW5z
cGVjdG9yRE9NQWdlbnQqIHNfZG9tQWdlbnRPbkJyZWFrcG9pbnQ7CiAgICAgfTsKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDM1
N2EwNDMuLmFmYmEwMjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwCkBAIC01NiwxMSArNTYsMTQgQEAgUGFzc093blB0cjxJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zcGVjdG9yQ29udHIKICAg
ICByZXR1cm4gYWdlbnQucmVsZWFzZSgpOwogfQogCitJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwor
CiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3Rv
ckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckZyb250ZW5kKiBmcm9u
dGVuZCkKICAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQog
ICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkK
ICAgICAsIG1fYnJlYWtwb2ludHNMb2FkZWQoZmFsc2UpCisgICAgLCBtX2JyZWFrUHJvZ3JhbURl
dGFpbHMoSW5zcGVjdG9yVmFsdWU6Om51bGwoKSkKIHsKIH0KIApAQCAtNjgsNiArNzEsOSBAQCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpCiB7CiAgICAg
U2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUxpc3RlbmVyKHRoaXMsIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpKTsKICAgICBtX3BhdXNlZFNjcmlwdFN0YXRl
ID0gMDsKKworICAgIGlmICh0aGlzID09IHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCkKKyAg
ICAgICAgc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50ID0gMDsKIH0KIAogYm9vbCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50Ojppc0RlYnVnZ2VyQWx3YXlzRW5hYmxlZCgpCkBAIC0yODMsOCArMjg5
LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUpCiB7CiAgICAgQVNTRVJUKHNjcmlwdFN0YXRlICYmICFtX3BhdXNlZFNjcmlw
dFN0YXRlKTsKICAgICBtX3BhdXNlZFNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGU7Ci0gICAgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBjYWxsRnJhbWVzID0gY3VycmVudENhbGxGcmFtZXMoKTsKLSAg
ICBtX2Zyb250ZW5kLT5wYXVzZWRTY3JpcHQoY2FsbEZyYW1lcy5nZXQoKSk7CisgICAgbV9mcm9u
dGVuZC0+cGF1c2VkU2NyaXB0KGN1cnJlbnRDYWxsRnJhbWVzKCksIG1fYnJlYWtQcm9ncmFtRGV0
YWlscyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQpA
QCAtMjkzLDYgKzI5OCwxOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRp
bnVlKCkKICAgICBtX2Zyb250ZW5kLT5yZXN1bWVkU2NyaXB0KCk7CiB9CiAKK3ZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGRldGFpbHMpCit7CisgICAgc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50ID0gdGhpczsKKyAg
ICBtX2JyZWFrUHJvZ3JhbURldGFpbHMgPSBkZXRhaWxzOworCisgICAgU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpLmJyZWFrUHJvZ3JhbSgpOworICAgIGlmICghc19kZWJ1Z2dlckFnZW50T25C
cmVha3BvaW50KQorICAgICAgICByZXR1cm47CisKKyAgICBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFr
cG9pbnQgPSAwOworICAgIG1fYnJlYWtQcm9ncmFtRGV0YWlscyA9IEluc3BlY3RvclZhbHVlOjpu
dWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5oCmluZGV4IDkxYmNkNDkuLjZkNmU4YmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgogICAgIHZvaWQg
Z2V0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2NyaXB0U291
cmNlKTsKIAogICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIGJyZWFrUHJvZ3JhbShQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBkZXRhaWxzKTsKICAgICB2b2lkIHJlc3VtZSgpOwogICAgIHZv
aWQgc3RlcE92ZXJTdGF0ZW1lbnQoKTsKICAgICB2b2lkIHN0ZXBJbnRvU3RhdGVtZW50KCk7CkBA
IC05Myw2ICs5NCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFr
cG9pbnRzPiBtX3N0aWNreUJyZWFrcG9pbnRzOwogICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25l
ZD4gbV9icmVha3BvaW50c01hcHBpbmc7CiAgICAgYm9vbCBtX2JyZWFrcG9pbnRzTG9hZGVkOwor
ICAgIHN0YXRpYyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFr
cG9pbnQ7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtX2JyZWFrUHJvZ3JhbURldGFpbHM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCmluZGV4IDNkZDk1OTQuLjQwMzZmNTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQogCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgPT0gVHlwZU51bGw7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2xlYW4oYm9vbCogb3V0
cHV0KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIoZG91YmxlKiBvdXRwdXQpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcihsb25nKiBvdXRwdXQpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBh
bmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFu
ZS5qcwppbmRleCAzYTA4NjBmLi4yOWJlNjQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcwpAQCAtMTA2LDcgKzEwNiw3
IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRlbSA9IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAg
ICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChjaGVja2JveEVsZW1lbnQpOwogCiAgICAgdGhp
cy5fYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIHRoaXMuX2Vu
YWJsZUNoYW5nZWQsIHRoaXMpOwotICAgIHRoaXMuX2JyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5l
cigicmVtb3ZlZCIsIHRoaXMuX3JlbW92ZWQsIHRoaXMpOworICAgIHRoaXMuX2JyZWFrcG9pbnQu
YWRkRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
LmJpbmQodGhpcywgInJlbW92ZWQiKSk7CiB9CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRl
bS5wcm90b3R5cGUgPSB7CkBAIC0xMjgsMTUgKzEyOCwxMCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludEl0ZW0ucHJvdG90eXBlID0gewogICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsK
ICAgICB9LAogCi0gICAgX2VuYWJsZUNoYW5nZWQ6IGZ1bmN0aW9uKCkKKyAgICBfZW5hYmxlQ2hh
bmdlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgY2hlY2tib3ggPSB0aGlz
Ll9lbGVtZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB0aGlzLl9i
cmVha3BvaW50LmVuYWJsZWQ7Ci0gICAgfSwKLQotICAgIF9yZW1vdmVkOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygicmVtb3ZlZCIpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFn
ZW50LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCmluZGV4IDVh
YWEwZDMuLmUyYzg4MGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01BZ2VudC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMK
QEAgLTQxNyw3ICs0MTcsNyBAQCBXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlID0gewog
ICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGRfKG5vZGUpOwogICAgICAgICB2YXIgZXZlbnQgPSB7
IHRhcmdldCA6IG5vZGUsIHJlbGF0ZWROb2RlIDogcGFyZW50IH07CiAgICAgICAgIHRoaXMuZG9j
dW1lbnQuX2ZpcmVEb21FdmVudCgiRE9NTm9kZVJlbW92ZWQiLCBldmVudCk7Ci0gICAgICAgIGRl
bGV0ZSB0aGlzLl9pZFRvRE9NTm9kZVtub2RlSWRdOworICAgICAgICBkZWxldGUgdGhpcy5faWRU
b0RPTU5vZGVbbm9kZS5pZF07CiAgICAgfQogfQogCkBAIC03MTksNiArNzE5LDEzIEBAIFdlYklu
c3BlY3Rvci5ET01CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGZvciAo
dmFyIHR5cGUgaW4gbm9kZUJyZWFrcG9pbnRzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5ub2RlLmlkXTsKKyAgICB9LAor
CisgICAgYnJlYWtwb2ludEhpdDogZnVuY3Rpb24obm9kZUlkLCB0eXBlKQorICAgIHsKKyAgICAg
ICAgdmFyIG5vZGVCcmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzW25vZGVJZF07CisgICAg
ICAgIGlmICh0eXBlIGluIG5vZGVCcmVha3BvaW50cykKKyAgICAgICAgICAgIG5vZGVCcmVha3Bv
aW50c1t0eXBlXS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImhpdCIpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdC5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKaW5kZXggNDJkNjg1MC4uMmVmOTMyOCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdC5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzCkBAIC02MiwxMSArNjIsMTIgQEAg
V2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBpZiAoIXRo
aXMuc291cmNlKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoaXMuX2xpbmVzQ291
bnQgPSAwOworICAgICAgICB2YXIgbGluZXNDb3VudCA9IDA7CiAgICAgICAgIHZhciBsYXN0SW5k
ZXggPSB0aGlzLnNvdXJjZS5pbmRleE9mKCJcbiIpOwogICAgICAgICB3aGlsZSAobGFzdEluZGV4
ICE9PSAtMSkgewogICAgICAgICAgICAgbGFzdEluZGV4ID0gdGhpcy5zb3VyY2UuaW5kZXhPZigi
XG4iLCBsYXN0SW5kZXggKyAxKQotICAgICAgICAgICAgdGhpcy5fbGluZXNDb3VudCsrOworICAg
ICAgICAgICAgbGluZXNDb3VudCsrOwogICAgICAgICB9CisgICAgICAgIHJldHVybiBsaW5lc0Nv
dW50OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmlu
ZGV4IDI2ZGZhMDkuLjExY2JlOTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qcwpAQCAtMTQ0NSw5ICsxNDQ1LDEyIEBAIFdlYkluc3BlY3Rvci5mYWlsZWRUb1BhcnNl
U2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291cmNlVVJMLCBzb3VyY2UsIHN0YXJ0aW5nTGluCiAg
ICAgdGhpcy5wYW5lbHMuc2NyaXB0cy5hZGRTY3JpcHQobnVsbCwgc291cmNlVVJMLCBzb3VyY2Us
IHN0YXJ0aW5nTGluZSwgZXJyb3JMaW5lLCBlcnJvck1lc3NhZ2UpOwogfQogCi1XZWJJbnNwZWN0
b3IucGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oY2FsbEZyYW1lcykKK1dlYkluc3BlY3Rvci5wYXVz
ZWRTY3JpcHQgPSBmdW5jdGlvbihjYWxsRnJhbWVzLCBkZXRhaWxzKQogewogICAgIHRoaXMucGFu
ZWxzLnNjcmlwdHMuZGVidWdnZXJQYXVzZWQoY2FsbEZyYW1lcyk7CisgICAgaWYgKGRldGFpbHMp
CisgICAgICAgIHRoaXMuZG9tQnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludEhpdChkZXRhaWxz
Lm5vZGVJZCwgZGV0YWlscy50eXBlKTsKKwogICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5icmlu
Z1RvRnJvbnQoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66030</attachid>
            <date>2010-08-31 04:18:02 -0700</date>
            <delta_ts>2010-09-01 07:25:58 -0700</delta_ts>
            <desc>All comments addressed.</desc>
            <filename>break_details.patch</filename>
            <type>text/plain</type>
            <size>27592</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGI1YzhlMi4uOTNmY2VmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxMC0wOC0zMSAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIG1vcmUgaW5mb3Jt
YXRpb24gdG8gZnJvbnQtZW5kIHdoZW4gYnJlYWtpbmcgb24gRE9NIGV2ZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDY3OQorCisgICAgICAgICog
ZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6
aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlcklu
c2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6bm90aWZ5Q2hpbGRJbnNlcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRj
aENoaWxkUmVtb3ZhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5p
ZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEluc2VydERPTU5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFJlbW92ZURPTU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JDb250
cm9sbGVyRm9yTm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEJyZWFrcG9pbnRG
b3JOb2RlSW5zZXJ0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpn
ZXRCcmVha3BvaW50Rm9yTm9kZVJlbW92YWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OmdldEJyZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2RpZmljYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZUJyZWFrcG9pbnQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6fkluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclZhbHVlOjpp
c051bGwpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFy
UGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRlbSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEl0ZW0ucHJvdG90eXBlLl9lbmFibGVDaGFuZ2VkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlw
ZS5icmVha3BvaW50SGl0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdC5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLmdldCBsaW5lc0NvdW50
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5wYXVzZWRTY3JpcHQpOgorCiAyMDEwLTA4LTMxICBKaWFuIExpICA8amlh
bmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggY2hyb21pdW0gYnVpbGQgYnJlYWsuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwCmluZGV4IGVmNjJiMzguLjdkODg5NDggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
Y3BwCkBAIC0xMzQsNiArMTM0LDggQEAgYm9vbCBDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUo
UGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2UKICAgICAgICAg
aWYgKGNoaWxkLT5wYXJlbnROb2RlKCkpCiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBJ
bnNwZWN0b3JDb250cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShjaGlsZCwgdGhpcyk7CisKICAg
ICAgICAgaW5zZXJ0QmVmb3JlQ29tbW9uKG5leHQuZ2V0KCksIGNoaWxkKTsKIAogICAgICAgICAv
LyBTZW5kIG5vdGlmaWNhdGlvbiBhYm91dCB0aGUgY2hpbGRyZW4gY2hhbmdlLgpAQCAtMjAxLDYg
KzIwMyw4IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cGFyc2VySW5zZXJ0QmVmb3JlKFBhc3NSZWZQ
dHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG5leHRDaGlsCiAgICAgZm9yIChOb2RlVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBpdCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFyZ2V0cy5lbmQoKTsg
KytpdCkgewogICAgICAgICBOb2RlKiBjaGlsZCA9IGl0LT5nZXQoKTsKIAorICAgICAgICBJbnNw
ZWN0b3JDb250cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShjaGlsZCwgdGhpcyk7CisKICAgICAg
ICAgaW5zZXJ0QmVmb3JlQ29tbW9uKG5leHQuZ2V0KCksIGNoaWxkKTsKIAogICAgICAgICBjaGls
ZHJlbkNoYW5nZWQodHJ1ZSwgbmV4dENoaWxkUHJldmlvdXNTaWJsaW5nLmdldCgpLCBuZXh0Q2hp
bGQsIDEpOwpAQCAtMjc0LDYgKzI3OCw4IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6cmVwbGFjZUNo
aWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlCiAgICAg
ICAgIEFTU0VSVCghY2hpbGQtPm5leHRTaWJsaW5nKCkpOwogICAgICAgICBBU1NFUlQoIWNoaWxk
LT5wcmV2aW91c1NpYmxpbmcoKSk7CiAKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2ls
bEluc2VydERPTU5vZGUoY2hpbGQuZ2V0KCksIHRoaXMpOworCiAgICAgICAgIC8vIEFkZCBjaGls
ZCBhZnRlciAicHJldiIuCiAgICAgICAgIGZvcmJpZEV2ZW50RGlzcGF0Y2goKTsKICAgICAgICAg
Tm9kZSogbmV4dDsKQEAgLTU1NSw2ICs1NjEsOCBAQCBib29sIENvbnRhaW5lck5vZGU6OmFwcGVu
ZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjLCBibwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6d2lsbEluc2VydERPTU5vZGUoY2hpbGQsIHRoaXMpOworCiAgICAgICAgIC8vIEFw
cGVuZCBjaGlsZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiAgICAgICAgIGZvcmJpZEV2ZW50RGlz
cGF0Y2goKTsKICAgICAgICAgY2hpbGQtPnNldFBhcmVudCh0aGlzKTsKQEAgLTU5Myw2ICs2MDEs
OCBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlckFkZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4g
bmV3Q2hpbGQpCiAgICAgQVNTRVJUKG5ld0NoaWxkKTsKICAgICBBU1NFUlQoIW5ld0NoaWxkLT5w
YXJlbnQoKSk7IC8vIFVzZSBhcHBlbmRDaGlsZCBpZiB5b3UgbmVlZCB0byBoYW5kbGUgcmVwYXJl
bnRpbmcgKGFuZCB3YW50IERPTSBtdXRhdGlvbiBldmVudHMpLgogCisgICAgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6d2lsbEluc2VydERPTU5vZGUobmV3Q2hpbGQuZ2V0KCksIHRoaXMpOworCiAgICAg
Zm9yYmlkRXZlbnREaXNwYXRjaCgpOwogICAgIE5vZGUqIGxhc3QgPSBtX2xhc3RDaGlsZDsKICAg
ICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIHRha2UgYSBQYXNzUmVmUHRyLgpAQCAtOTY0
LDEyICs5NzQsNyBAQCBzdGF0aWMgdm9pZCBub3RpZnlDaGlsZEluc2VydGVkKE5vZGUqIGNoaWxk
KQogewogICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKIAotI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjaGlsZC0+ZG9jdW1lbnQoKS0+cGFn
ZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9s
bGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICAgICAgaW5zcGVjdG9y
Q29udHJvbGxlci0+ZGlkSW5zZXJ0RE9NTm9kZShjaGlsZCk7Ci0gICAgfQotI2VuZGlmCisgICAg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkSW5zZXJ0RE9NTm9kZShjaGlsZCk7CiAKICAgICBSZWZQ
dHI8Tm9kZT4gYyA9IGNoaWxkOwogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBjaGls
ZC0+ZG9jdW1lbnQoKTsKQEAgLTEwMDMsMTIgKzEwMDgsNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRj
aENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKiBjaGlsZCkKIHsKICAgICBBU1NFUlQoIWV2ZW50RGlz
cGF0Y2hGb3JiaWRkZW4oKSk7CiAKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKSAgICAKLSAgICBpZiAo
UGFnZSogcGFnZSA9IGNoaWxkLT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKLSAgICAgICAgaWYgKElu
c3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkpCi0gICAgICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5kaWRSZW1vdmVE
T01Ob2RlKGNoaWxkKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjp3
aWxsUmVtb3ZlRE9NTm9kZShjaGlsZCk7CiAKICAgICBSZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwog
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
aW5kZXggMzliZjM5My4uZmIxNzU2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTU0MCw2ICs1NDAsMTEgQEAgdm9p
ZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlLAogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKyAgICBpZiAoIWlzU3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlKCkpCisg
ICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxNb2RpZnlET01BdHRyKHRoaXMpOworI2Vu
ZGlmCisKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0
dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwogCiAgICAgLy8gQWxsb2Nh
dGUgYXR0cmlidXRlIG1hcCBpZiBuZWNlc3NhcnkuCkBAIC01NjMsMTcgKzU2OCwxOCBAQCB2b2lk
IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUsCiAgICAgfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBp
ZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkgewotICAgICAgICBpZiAoSW5zcGVj
dG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNvbnRy
b2xsZXIoKSkgewotICAgICAgICAgICAgaWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0
ZSgpKQotICAgICAgICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZE1vZGlmeURPTUF0
dHIodGhpcyk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKCFpc1N5bmNocm9uaXppbmdTdHls
ZUF0dHJpYnV0ZSgpKQorICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRNb2RpZnlET01B
dHRyKHRoaXMpOwogI2VuZGlmCiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmKQogeworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKCFpc1N5bmNocm9uaXpp
bmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsTW9k
aWZ5RE9NQXR0cih0aGlzKTsKKyNlbmRpZgorCiAgICAgZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZl
cnNpb24oKTsKIAogICAgIC8vIEFsbG9jYXRlIGF0dHJpYnV0ZSBtYXAgaWYgbmVjZXNzYXJ5LgpA
QCAtNTkyLDEyICs1OTgsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLAogICAgIH0KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdl
KCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xs
ZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNT
eW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgICAgICBpbnNwZWN0b3JD
b250cm9sbGVyLT5kaWRNb2RpZnlET01BdHRyKHRoaXMpOwotICAgICAgICB9Ci0gICAgfQorICAg
IGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKSkKKyAgICAgICAgSW5zcGVjdG9y
Q29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0cih0aGlzKTsKICNlbmRpZgogfQogCkBAIC0xMjI4
LDYgKzEyMzAsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbgogCiB2b2lkIEVsZW1lbnQ6OnJl
bW92ZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewor
ICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxNb2RpZnlET01BdHRyKHRoaXMpOworCiAgICAg
U3RyaW5nIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1l
Lmxvd2VyKCkgOiBuYW1lOwogCiAgICAgaWYgKG1fYXR0cmlidXRlTWFwKSB7CkBAIC0xMjM2LDEz
ICsxMjQwLDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgICAgIGVjID0gMDsKICAgICB9CiAgICAg
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCkt
PnBhZ2UoKSkgewotICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29u
dHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgIGluc3Bl
Y3RvckNvbnRyb2xsZXItPmRpZE1vZGlmeURPTUF0dHIodGhpcyk7Ci0gICAgfQotI2VuZGlmCi0g
ICAgCisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0cih0aGlzKTsKIH0K
IAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVOUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFj
ZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5pZGwKaW5kZXggZmYxYzJhZi4uNWMxMDdlYSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3IuaWRsCkBAIC03Myw3ICs3Myw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW25vdGlmeV0g
dm9pZCBkZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgZmFpbGVk
VG9QYXJzZVNjcmlwdFNvdXJjZShvdXQgU3RyaW5nIHVybCwgb3V0IFN0cmluZyBkYXRhLCBvdXQg
aW50IGZpcnN0TGluZSwgb3V0IGludCBlcnJvckxpbmUsIG91dCBTdHJpbmcgZXJyb3JNZXNzYWdl
KTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBwYXJzZWRTY3JpcHRTb3VyY2Uob3V0IFN0cmluZyBz
b3VyY2VJRCwgb3V0IFN0cmluZyB1cmwsIG91dCBTdHJpbmcgZGF0YSwgb3V0IGludCBmaXJzdExp
bmUsIG91dCBpbnQgc2NyaXB0V29ybGRUeXBlKTsKLSAgICAgICAgW25vdGlmeV0gdm9pZCBwYXVz
ZWRTY3JpcHQob3V0IFZhbHVlIGNhbGxGcmFtZXMpOworICAgICAgICBbbm90aWZ5XSB2b2lkIHBh
dXNlZFNjcmlwdChvdXQgT2JqZWN0IGRldGFpbHMpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHBy
b2ZpbGVyV2FzRW5hYmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHByb2ZpbGVyV2FzRGlz
YWJsZWQoKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCByZXN0b3JlZEJyZWFrcG9pbnQob3V0IFN0
cmluZyBzb3VyY2VJRCwgb3V0IFN0cmluZyB1cmwsIG91dCBpbnQgbGluZSwgb3V0IGJvb2xlYW4g
ZW5hYmxlZCwgb3V0IFN0cmluZyBjb25kaXRpb24pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCmluZGV4IDdlZDI1NDkuLjlkMzZlMDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTMxLDcgKzMxLDEwIEBACiAKICNpbmNsdWRlICJDb25z
b2xlLmgiCiAjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTYwLDcg
KzYzLDYgQEAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yQ1NTU3RvcmU7
CiBjbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlOwotY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDsKIGNsYXNzIEluc3Bl
Y3RvckZyb250ZW5kOwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNw
ZWN0b3JPYmplY3Q7CkBAIC0xODMsOSArMTg1LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIG1haW5S
ZXNvdXJjZUZpcmVkTG9hZEV2ZW50KERvY3VtZW50TG9hZGVyKiwgY29uc3QgS1VSTCYpOwogICAg
IHZvaWQgbWFpblJlc291cmNlRmlyZWRET01Db250ZW50RXZlbnQoRG9jdW1lbnRMb2FkZXIqLCBj
b25zdCBLVVJMJik7CiAKLSAgICB2b2lkIGRpZEluc2VydERPTU5vZGUoTm9kZSopOwotICAgIHZv
aWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlKik7Ci0gICAgdm9pZCBkaWRNb2RpZnlET01BdHRyKEVs
ZW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsSW5zZXJ0RE9NTm9kZShOb2RlKiBub2RlLCBO
b2RlKiBwYXJlbnQpOworICAgIHN0YXRpYyB2b2lkIGRpZEluc2VydERPTU5vZGUoTm9kZSopOwor
ICAgIHN0YXRpYyB2b2lkIHdpbGxSZW1vdmVET01Ob2RlKE5vZGUqKTsKKyAgICBzdGF0aWMgdm9p
ZCB3aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50Kik7CisgICAgc3RhdGljIHZvaWQgZGlkTW9kaWZ5
RE9NQXR0cihFbGVtZW50Kik7CisKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBlbnVtIFdvcmtl
ckFjdGlvbiB7IFdvcmtlckNyZWF0ZWQsIFdvcmtlckRlc3Ryb3llZCB9OwogCkBAIC0zMDYsNiAr
MzExLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVu
ZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVzdWx0KTsKIAorICAgIHN0YXRpYyBJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyRm9yTm9kZShOb2RlKik7CisK
ICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBmcmllbmQgY2xhc3MgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDsKICAgICBTdHJpbmcgYnJlYWtwb2ludHNTZXR0aW5nS2V5KCk7CkBA
IC0zNzYsMzAgKzM4Myw4NCBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCitpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShOb2RlKiBub2RlLCBOb2RlKiBw
YXJlbnQpCit7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVy
Rm9yTm9kZShub2RlKSkgeworICAgICAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dl
ckFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpOworICAgICAgICBp
ZiAoIWRlYnVnZ2VyQWdlbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEluc3BlY3Rv
ckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCk7Cisg
ICAgICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gYnJlYWtwb2ludCA9IGRvbUFnZW50LT5nZXRCcmVha3BvaW50Rm9y
Tm9kZUluc2VydGlvbihub2RlLCBwYXJlbnQpOworICAgICAgICBpZiAoIWJyZWFrcG9pbnQtPmlz
TnVsbCgpKQorICAgICAgICAgICAgZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKGJyZWFrcG9p
bnQpOworICAgIH0KKyNlbmRpZgorfQorCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRJbnNlcnRET01Ob2RlKE5vZGUqIG5vZGUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
LSAgICBpZiAobV9kb21BZ2VudCkKLSAgICAgICAgbV9kb21BZ2VudC0+ZGlkSW5zZXJ0RE9NTm9k
ZShub2RlKTsKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
ciA9IGluc3BlY3RvckNvbnRyb2xsZXJGb3JOb2RlKG5vZGUpKSB7CisgICAgICAgIGlmIChJbnNw
ZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgp
KQorICAgICAgICAgICAgZG9tQWdlbnQtPmRpZEluc2VydERPTU5vZGUobm9kZSk7CisgICAgfQog
I2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlbW92ZURP
TU5vZGUoTm9kZSogbm9kZSkKK2lubGluZSB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxS
ZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiB7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBp
ZiAobV9kb21BZ2VudCkKLSAgICAgICAgbV9kb21BZ2VudC0+ZGlkUmVtb3ZlRE9NTm9kZShub2Rl
KTsKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBpZiAoSW5zcGVjdG9yQ29u
dHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJGb3JOb2Rl
KG5vZGUpKSB7CisgICAgICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3Rv
ckNvbnRyb2xsZXItPmRvbUFnZW50KCk7CisgICAgICAgIGlmICghZG9tQWdlbnQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dl
ckFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpKSB7CisgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJyZWFrcG9pbnQgPSBkb21BZ2VudC0+Z2V0QnJl
YWtwb2ludEZvck5vZGVSZW1vdmFsKG5vZGUpOworICAgICAgICAgICAgaWYgKCFicmVha3BvaW50
LT5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBkZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0o
YnJlYWtwb2ludCk7CisgICAgICAgIH0KKyAgICAgICAgZG9tQWdlbnQtPmRpZFJlbW92ZURPTU5v
ZGUobm9kZSk7CisgICAgfQorI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCit7CisjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
Y3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yTm9kZShlbGVtZW50KSkgewor
ICAgICAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gaW5zcGVjdG9y
Q29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpOworICAgICAgICBpZiAoIWRlYnVnZ2VyQWdlbnQp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2Vu
dCA9IGluc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCk7CisgICAgICAgIGlmICghZG9tQWdl
bnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
YnJlYWtwb2ludCA9IGRvbUFnZW50LT5nZXRCcmVha3BvaW50Rm9yQXR0cmlidXRlTW9kaWZpY2F0
aW9uKGVsZW1lbnQpOworICAgICAgICBpZiAoIWJyZWFrcG9pbnQtPmlzTnVsbCgpKQorICAgICAg
ICAgICAgZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKGJyZWFrcG9pbnQpOworICAgIH0KICNl
bmRpZgogfQogCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRNb2RpZnlET01B
dHRyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAo
bV9kb21BZ2VudCkKLSAgICAgICAgbV9kb21BZ2VudC0+ZGlkTW9kaWZ5RE9NQXR0cihlbGVtZW50
KTsKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGlu
c3BlY3RvckNvbnRyb2xsZXJGb3JOb2RlKGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChJbnNwZWN0
b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpKQor
ICAgICAgICAgICAgZG9tQWdlbnQtPmRpZE1vZGlmeURPTUF0dHIoZWxlbWVudCk7CisgICAgfQog
I2VuZGlmCiB9CiAKK2lubGluZSBJbnNwZWN0b3JDb250cm9sbGVyKiBJbnNwZWN0b3JDb250cm9s
bGVyOjppbnNwZWN0b3JDb250cm9sbGVyRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIGlmIChQ
YWdlKiBwYWdlID0gbm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICByZXR1cm4gcGFn
ZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOworICAgIHJldHVybiAwOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JDb250cm9sbGVyX2gp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggZDI3NjBlNC4uMDQx
ZDlkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNjQsNyAr
NjQsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5
bGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgotI2luY2x1ZGUgIlNjcmlw
dERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtMjEwLDggKzIwOSw2
IEBAIGNvbnN0IGludCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCA9IDE2OwogCiB9CiAK
LUluc3BlY3RvckRPTUFnZW50KiBJbnNwZWN0b3JET01BZ2VudDo6c19kb21BZ2VudE9uQnJlYWtw
b2ludCA9IDA7Ci0KIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0
b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICA6
IEV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yRE9NQWdlbnRUeXBlKQogICAgICwgbV9jc3NTdG9yZShj
c3NTdG9yZSkKQEAgLTIyNCw5ICsyMjEsNiBAQCBJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9y
RE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9udAogSW5z
cGVjdG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCgpCiB7CiAgICAgcmVzZXQoKTsKLQot
ICAgIGlmICh0aGlzID09IHNfZG9tQWdlbnRPbkJyZWFrcG9pbnQpCi0gICAgICAgIHNfZG9tQWdl
bnRPbkJyZWFrcG9pbnQgPSAwOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXNldCgp
CkBAIC03ODAsNiArNzc0LDI5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZURPTUJy
ZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKICAgICB9CiB9CiAKK1Bhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckRPTUFnZW50OjpnZXRCcmVha3BvaW50Rm9yTm9kZUlu
c2VydGlvbihOb2RlKiwgTm9kZSogcGFyZW50KQoreworICAgIGlmIChoYXNCcmVha3BvaW50KHBh
cmVudCwgU3VidHJlZU1vZGlmaWVkKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUJyZWFrcG9pbnQo
cGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQpOworICAgIHJldHVybiBJbnNwZWN0b3JPYmplY3Q6Om51
bGwoKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yRE9NQWdlbnQ6
OmdldEJyZWFrcG9pbnRGb3JOb2RlUmVtb3ZhbChOb2RlKiBub2RlKQoreworICAgIGlmIChoYXNC
cmVha3BvaW50KG5vZGUsIE5vZGVSZW1vdmVkKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUJyZWFr
cG9pbnQobm9kZSwgTm9kZVJlbW92ZWQpOworICAgIGlmIChoYXNCcmVha3BvaW50KGlubmVyUGFy
ZW50Tm9kZShub2RlKSwgU3VidHJlZU1vZGlmaWVkKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUJy
ZWFrcG9pbnQoaW5uZXJQYXJlbnROb2RlKG5vZGUpLCBTdWJ0cmVlTW9kaWZpZWQpOworICAgIHJl
dHVybiBJbnNwZWN0b3JPYmplY3Q6Om51bGwoKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEJyZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2RpZmlj
YXRpb24oRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAoaGFzQnJlYWtwb2ludChlbGVtZW50
LCBBdHRyaWJ1dGVNb2RpZmllZCkpCisgICAgICAgIHJldHVybiBjcmVhdGVCcmVha3BvaW50KGVs
ZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yT2JqZWN0Ojpu
dWxsKCk7Cit9CisKIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1lbnRVUkxTdHJpbmco
RG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAogewogICAgIGlmICghZG9jdW1lbnQgfHwgZG9jdW1l
bnQtPnVybCgpLmlzTnVsbCgpKQpAQCAtOTg1LDEyICsxMDAyLDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlKiBub2RlKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAobV9icmVha3BvaW50cy5zaXplKCkpIHsKLSAgICAgICAgTm9kZSogcGFyZW50ID0g
aW5uZXJQYXJlbnROb2RlKG5vZGUpOwotICAgICAgICBpZiAoaGFzQnJlYWtwb2ludChwYXJlbnQs
IFN1YnRyZWVNb2RpZmllZCkpIHsKLSAgICAgICAgICAgIGlmICghcGF1c2VPbkJyZWFrcG9pbnQo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdWludDMyX3Qg
bWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KHBhcmVudCk7CisgICAgICAgIHVpbnQzMl90IG1hc2sg
PSBtX2JyZWFrcG9pbnRzLmdldChpbm5lclBhcmVudE5vZGUobm9kZSkpOwogICAgICAgICB1aW50
MzJfdCBpbmhlcml0YWJsZVR5cGVzTWFzayA9IChtYXNrIHwgKG1hc2sgPj4gZG9tQnJlYWtwb2lu
dERlcml2ZWRUeXBlU2hpZnQpKSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzazsK
ICAgICAgICAgaWYgKGluaGVyaXRhYmxlVHlwZXNNYXNrKQogICAgICAgICAgICAgdXBkYXRlU3Vi
dHJlZUJyZWFrcG9pbnRzKG5vZGUsIGluaGVyaXRhYmxlVHlwZXNNYXNrLCB0cnVlKTsKQEAgLTEw
MjMsMTAgKzEwMzUsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01Ob2Rl
KE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2JyZWFrcG9pbnRzLnNp
emUoKSkgewotICAgICAgICBpZiAoaGFzQnJlYWtwb2ludChub2RlLCBOb2RlUmVtb3ZlZCkgfHwg
aGFzQnJlYWtwb2ludChpbm5lclBhcmVudE5vZGUobm9kZSksIFN1YnRyZWVNb2RpZmllZCkpIHsK
LSAgICAgICAgICAgIGlmICghcGF1c2VPbkJyZWFrcG9pbnQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KICAgICAgICAgLy8gUmVtb3ZlIHN1YnRyZWUgYnJlYWtwb2ludHMu
CiAgICAgICAgIG1fYnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpOwogICAgICAgICBWZWN0b3I8Tm9k
ZSo+IHN0YWNrKDEsIGlubmVyRmlyc3RDaGlsZChub2RlKSk7CkBAIC0xMDYzLDEyICsxMDcxLDI0
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxl
bWVudCkKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaGFzQnJlYWtw
b2ludChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpIHsKLSAgICAgICAgaWYgKCFwYXVzZU9u
QnJlYWtwb2ludCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIG1fZnJvbnRlbmQtPmF0dHJp
YnV0ZXNVcGRhdGVkKGlkLCBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCkp
OworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmNy
ZWF0ZUJyZWFrcG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKQoreworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworCisg
ICAgLy8gRmluZCBicmVha3BvaW50IG93bmVyLgorICAgIHdoaWxlICghKG1fYnJlYWtwb2ludHMu
Z2V0KG5vZGUpICYgKDEgPDwgdHlwZSkpKSB7CisgICAgICAgIG5vZGUgPSBpbm5lclBhcmVudE5v
ZGUobm9kZSk7CisgICAgICAgIEFTU0VSVChub2RlKTsKICAgICB9CisgICAgbG9uZyBub2RlSWQg
PSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KG5vZGUpOworICAgIEFTU0VSVChub2RlSWQpOwog
Ci0gICAgbV9mcm9udGVuZC0+YXR0cmlidXRlc1VwZGF0ZWQoaWQsIGJ1aWxkQXJyYXlGb3JFbGVt
ZW50QXR0cmlidXRlcyhlbGVtZW50KSk7CisgICAgYnJlYWtwb2ludC0+c2V0TnVtYmVyKCJub2Rl
SWQiLCBub2RlSWQpOworICAgIGJyZWFrcG9pbnQtPnNldE51bWJlcigidHlwZSIsIHR5cGUpOwor
ICAgIHJldHVybiBicmVha3BvaW50LnJlbGVhc2UoKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JET01B
Z2VudDo6aGFzQnJlYWtwb2ludChOb2RlKiBub2RlLCBsb25nIHR5cGUpCkBAIC0xMDc4LDE5ICsx
MDk4LDYgQEAgYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6aGFzQnJlYWtwb2ludChOb2RlKiBub2Rl
LCBsb25nIHR5cGUpCiAgICAgcmV0dXJuIG1fYnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgKHJvb3RC
aXQgfCBkZXJpdmVkQml0KTsKIH0KIAotYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6cGF1c2VPbkJy
ZWFrcG9pbnQoKQotewotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHNfZG9t
QWdlbnRPbkJyZWFrcG9pbnQgPSB0aGlzOwotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQo
KS5icmVha1Byb2dyYW0oKTsKLSAgICBib29sIGRlbGV0ZWQgPSAhc19kb21BZ2VudE9uQnJlYWtw
b2ludDsKLSAgICBzX2RvbUFnZW50T25CcmVha3BvaW50ID0gMDsKLSAgICByZXR1cm4gIWRlbGV0
ZWQ7Ci0jZWxzZQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2RlKiBub2RlLCB1aW50MzJfdCBy
b290TWFzaywgYm9vbCBzZXQpCiB7CiAgICAgdWludDMyX3Qgb2xkTWFzayA9IG1fYnJlYWtwb2lu
dHMuZ2V0KG5vZGUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggZmQz
YzViNS4uMjc4NzgwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0z
Niw3ICszNiw2IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTU3RvcmUuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgotI2luY2x1ZGUgIlNjcmlw
dFN0YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKIAogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpA
QCAtMTE0LDYgKzExMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZWFy
Y2hDYW5jZWxlZCgpOwogICAgICAgICB2b2lkIHNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQs
IGxvbmcgdHlwZSk7CiAgICAgICAgIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2ludChsb25nIG5vZGVJ
ZCwgbG9uZyB0eXBlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0QnJl
YWtwb2ludEZvck5vZGVJbnNlcnRpb24oTm9kZSogbm9kZSwgTm9kZSogcGFyZW50KTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0QnJlYWtwb2ludEZvck5vZGVSZW1vdmFs
KE5vZGUqKTsKKyAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0QnJlYWtwb2lu
dEZvckF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50Kik7CiAKICAgICAgICAgLy8gTWV0aG9k
cyBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQgZm9yIENTUyBzdHlsZXMgaW5zcGVjdGlvbi4KICAg
ICAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSwgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiogc3R5bGVzKTsKQEAgLTE2MCw3ICsxNjIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcHVzaERvY3VtZW50VG9Gcm9udGVuZCgpOwogCiAgICAg
ICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2RlKiBub2RlLCBsb25nIHR5cGUpOwotICAgICAgICBi
b29sIHBhdXNlT25CcmVha3BvaW50KCk7CisgICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBjcmVhdGVCcmVha3BvaW50KE5vZGUqIG5vZGUsIGxvbmcgdHlwZSk7CiAgICAgICAgIHZv
aWQgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqIHJvb3QsIHVpbnQzMl90IHJvb3RNYXNr
LCBib29sIHZhbHVlKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVp
bGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVudCogZWxlbWVudCk7CkBAIC0yMTcsOCAr
MjE5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBIYXNoU2V0PFJlZlB0cjxOb2Rl
PiA+IG1fc2VhcmNoUmVzdWx0czsKICAgICAgICAgVmVjdG9yPGxvbmc+IG1faW5zcGVjdGVkTm9k
ZXM7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVpbnQzMl90PiBtX2JyZWFrcG9pbnRzOwotCi0g
ICAgICAgIHN0YXRpYyBJbnNwZWN0b3JET01BZ2VudCogc19kb21BZ2VudE9uQnJlYWtwb2ludDsK
ICAgICB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5jcHAKaW5kZXggMzU3YTA0My4uOGZmODVkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTU2LDExICs1NiwxNCBAQCBQYXNzT3duUHRy
PEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJ
bnNwZWN0b3JDb250cgogICAgIHJldHVybiBhZ2VudC5yZWxlYXNlKCk7CiB9CiAKK0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQqIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNfZGVidWdnZXJBZ2VudE9u
QnJlYWtwb2ludCA9IDA7CisKIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVj
dG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3Bl
Y3RvckNvbnRyb2xsZXIpCiAgICAgLCBtX2Zyb250ZW5kKGZyb250ZW5kKQogICAgICwgbV9wYXVz
ZWRTY3JpcHRTdGF0ZSgwKQogICAgICwgbV9icmVha3BvaW50c0xvYWRlZChmYWxzZSkKKyAgICAs
IG1fYnJlYWtQcm9ncmFtUmVhc29uKEluc3BlY3RvclZhbHVlOjpudWxsKCkpCiB7CiB9CiAKQEAg
LTY4LDYgKzcxLDkgQEAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6fkluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQoKQogewogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVMaXN0ZW5l
cih0aGlzLCBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKSk7CiAgICAgbV9w
YXVzZWRTY3JpcHRTdGF0ZSA9IDA7CisKKyAgICBpZiAodGhpcyA9PSBzX2RlYnVnZ2VyQWdlbnRP
bkJyZWFrcG9pbnQpCisgICAgICAgIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCA9IDA7CiB9
CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aXNEZWJ1Z2dlckFsd2F5c0VuYWJsZWQo
KQpAQCAtMjgzLDggKzI4OSwxMCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBh
dXNlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKICAgICBBU1NFUlQoc2NyaXB0U3RhdGUg
JiYgIW1fcGF1c2VkU2NyaXB0U3RhdGUpOwogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUgPSBzY3Jp
cHRTdGF0ZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNhbGxGcmFtZXMgPSBjdXJyZW50
Q2FsbEZyYW1lcygpOwotICAgIG1fZnJvbnRlbmQtPnBhdXNlZFNjcmlwdChjYWxsRnJhbWVzLmdl
dCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXRhaWxzID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBkZXRhaWxzLT5zZXRWYWx1ZSgiY2FsbEZyYW1lcyIsIGN1cnJl
bnRDYWxsRnJhbWVzKCkpOworICAgIGRldGFpbHMtPnNldFZhbHVlKCJyZWFzb24iLCBtX2JyZWFr
UHJvZ3JhbVJlYXNvbik7CisgICAgbV9mcm9udGVuZC0+cGF1c2VkU2NyaXB0KGRldGFpbHMpOwog
fQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkKQEAgLTI5Myw2
ICszMDEsMTkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAg
ICAgbV9mcm9udGVuZC0+cmVzdW1lZFNjcmlwdCgpOwogfQogCit2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZWFzb24p
Cit7CisgICAgc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50ID0gdGhpczsKKyAgICBtX2JyZWFr
UHJvZ3JhbVJlYXNvbiA9IHJlYXNvbjsKKworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQo
KS5icmVha1Byb2dyYW0oKTsKKyAgICBpZiAoIXNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50ID0gMDsK
KyAgICBtX2JyZWFrUHJvZ3JhbVJlYXNvbiA9IEluc3BlY3RvclZhbHVlOjpudWxsKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4
IDkxYmNkNDkuLjc5YjBhMGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0U2NyaXB0U291
cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyogc2NyaXB0U291cmNlKTsKIAogICAg
IHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIGJyZWFrUHJvZ3JhbShQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiByZWFzb24pOwogICAgIHZvaWQgcmVzdW1lKCk7CiAgICAgdm9pZCBzdGVwT3ZlclN0
YXRlbWVudCgpOwogICAgIHZvaWQgc3RlcEludG9TdGF0ZW1lbnQoKTsKQEAgLTkzLDYgKzk0LDgg
QEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgU291cmNlQnJlYWtwb2ludHM+IG1fc3Rp
Y2t5QnJlYWtwb2ludHM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkPiBtX2JyZWFrcG9p
bnRzTWFwcGluZzsKICAgICBib29sIG1fYnJlYWtwb2ludHNMb2FkZWQ7CisgICAgc3RhdGljIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQqIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludDsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1fYnJlYWtQcm9ncmFtUmVhc29uOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAppbmRleCAzZGQ5
NTk0Li40MDM2ZjU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtNjcsNiAr
NjcsOCBAQCBwdWJsaWM6CiAKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KIAorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGVOdWxs
OyB9CisKICAgICB2aXJ0dWFsIGJvb2wgYXNCb29sZWFuKGJvb2wqIG91dHB1dCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGFzTnVtYmVyKGRvdWJsZSogb3V0cHV0KSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgYXNOdW1iZXIobG9uZyogb3V0cHV0KSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKaW5kZXggM2Ew
ODYwZi4uMjliZTY0NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKQEAgLTEwNiw3ICsxMDYsNyBAQCBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludEl0ZW0gPSBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHRoaXMuX2VsZW1l
bnQuYXBwZW5kQ2hpbGQoY2hlY2tib3hFbGVtZW50KTsKIAogICAgIHRoaXMuX2JyZWFrcG9pbnQu
YWRkRXZlbnRMaXN0ZW5lcigiZW5hYmxlLWNoYW5nZWQiLCB0aGlzLl9lbmFibGVDaGFuZ2VkLCB0
aGlzKTsKLSAgICB0aGlzLl9icmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoInJlbW92ZWQiLCB0
aGlzLl9yZW1vdmVkLCB0aGlzKTsKKyAgICB0aGlzLl9icmVha3BvaW50LmFkZEV2ZW50TGlzdGVu
ZXIoInJlbW92ZWQiLCB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycy5iaW5kKHRoaXMsICJy
ZW1vdmVkIikpOwogfQogCiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEl0ZW0ucHJvdG90eXBlID0g
ewpAQCAtMTI4LDE1ICsxMjgsMTAgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRJdGVtLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgfSwKIAotICAg
IF9lbmFibGVDaGFuZ2VkOiBmdW5jdGlvbigpCisgICAgX2VuYWJsZUNoYW5nZWQ6IGZ1bmN0aW9u
KGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGNoZWNrYm94ID0gdGhpcy5fZWxlbWVudC5maXJz
dENoaWxkOwogICAgICAgICBjaGVja2JveC5jaGVja2VkID0gdGhpcy5fYnJlYWtwb2ludC5lbmFi
bGVkOwotICAgIH0sCi0KLSAgICBfcmVtb3ZlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInJlbW92ZWQiKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwppbmRleCA1YWFhMGQzLi42Mjk0MmUw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCkBAIC03MTksNiArNzE5
LDEzIEBAIFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIGZvciAodmFyIHR5cGUgaW4gbm9kZUJyZWFrcG9pbnRzKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5ub2RlLmlk
XTsKKyAgICB9LAorCisgICAgYnJlYWtwb2ludEhpdDogZnVuY3Rpb24obm9kZUlkLCB0eXBlKQor
ICAgIHsKKyAgICAgICAgdmFyIG5vZGVCcmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzW25v
ZGVJZF07CisgICAgICAgIGlmICh0eXBlIGluIG5vZGVCcmVha3BvaW50cykKKyAgICAgICAgICAg
IG5vZGVCcmVha3BvaW50c1t0eXBlXS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImhpdCIpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKaW5kZXggNDJkNjg1
MC4uYmUzZjAyMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzCkBAIC02Miwx
MSArNjIsMTQgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgewogICAg
ICAgICBpZiAoIXRoaXMuc291cmNlKQogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlm
ICh0aGlzLl9saW5lc0NvdW50KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmVzQ291bnQ7
CiAgICAgICAgIHRoaXMuX2xpbmVzQ291bnQgPSAwOwogICAgICAgICB2YXIgbGFzdEluZGV4ID0g
dGhpcy5zb3VyY2UuaW5kZXhPZigiXG4iKTsKICAgICAgICAgd2hpbGUgKGxhc3RJbmRleCAhPT0g
LTEpIHsKICAgICAgICAgICAgIGxhc3RJbmRleCA9IHRoaXMuc291cmNlLmluZGV4T2YoIlxuIiwg
bGFzdEluZGV4ICsgMSkKICAgICAgICAgICAgIHRoaXMuX2xpbmVzQ291bnQrKzsKICAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5fbGluZXNDb3VudDsKICAgICB9CiB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCBjOGY1M2Q3Li42NDU0OTg4IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTE0NDUsOSArMTQ0NSwx
MiBAQCBXZWJJbnNwZWN0b3IuZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNv
dXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbgogICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuYWRk
U2NyaXB0KG51bGwsIHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUsIGVycm9yTGluZSwg
ZXJyb3JNZXNzYWdlKTsKIH0KIAotV2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlwdCA9IGZ1bmN0aW9u
KGNhbGxGcmFtZXMpCitXZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oZGV0YWls
cykKIHsKLSAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmRlYnVnZ2VyUGF1c2VkKGNhbGxGcmFtZXMp
OworICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuZGVidWdnZXJQYXVzZWQoZGV0YWlscy5jYWxsRnJh
bWVzKTsKKyAgICBpZiAoZGV0YWlscy5yZWFzb24pCisgICAgICAgIHRoaXMuZG9tQnJlYWtwb2lu
dE1hbmFnZXIuYnJlYWtwb2ludEhpdChkZXRhaWxzLnJlYXNvbi5ub2RlSWQsIGRldGFpbHMucmVh
c29uLnR5cGUpOworCiAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmJyaW5nVG9Gcm9udCgpOwog
fQogCg==
</data>
<flag name="review"
          id="54941"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66210</attachid>
            <date>2010-09-01 07:25:58 -0700</date>
            <delta_ts>2010-09-02 03:11:56 -0700</delta_ts>
            <desc>Rebase.</desc>
            <filename>break_details.patch</filename>
            <type>text/plain</type>
            <size>30061</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjYzE0NzNiLi4wMjJhMmZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDkt
MDEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHJv
dmlkZSBtb3JlIGluZm9ybWF0aW9uIHRvIGZyb250LWVuZCB3aGVuIGJyZWFraW5nIG9uIERPTSBl
dmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ2
NzkKKworICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzOgor
ICAgICAgICAoaW5pdGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5fcGF1c2VkU2Ny
aXB0KToKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdDIuanM6
CisgICAgICAgIChpbml0aWFsaXplX0luc3BlY3RvclRlc3QuSW5zcGVjdG9yVGVzdC5hZGRPYmpl
Y3RSZXN1bHQpOgorICAgICAgICAqIGluc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0
bWw6CisKIDIwMTAtMDktMDEgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxvIEdvbWJvcy4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdDIuanMKaW5kZXggODBi
OThhNi4uNmMxOWZmOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3IvZGVidWdnZXItdGVzdDIuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3IvZGVidWdnZXItdGVzdDIuanMKQEAgLTg5LDEwICs4OSwxMCBAQCBJbnNwZWN0b3JUZXN0LmNh
cHR1cmVTdGFja1RyYWNlID0gZnVuY3Rpb24oY2FsbEZyYW1lcykKICAgICB9CiB9OwogCi1JbnNw
ZWN0b3JUZXN0Ll9wYXVzZWRTY3JpcHQgPSBmdW5jdGlvbihjYWxsRnJhbWVzKQorSW5zcGVjdG9y
VGVzdC5fcGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oZGV0YWlscykKIHsKICAgICBJbnNwZWN0b3JU
ZXN0LmFkZFJlc3VsdCgiU2NyaXB0IGV4ZWN1dGlvbiBwYXVzZWQuIik7Ci0gICAgSW5zcGVjdG9y
VGVzdC5fY2FsbEZyYW1lcyA9IGNhbGxGcmFtZXM7CisgICAgSW5zcGVjdG9yVGVzdC5fY2FsbEZy
YW1lcyA9IGRldGFpbHMuY2FsbEZyYW1lczsKICAgICBpZiAoSW5zcGVjdG9yVGVzdC5fd2FpdFVu
dGlsUGF1c2VkQ2FsbGJhY2spIHsKICAgICAgICAgdmFyIGNhbGxiYWNrID0gSW5zcGVjdG9yVGVz
dC5fd2FpdFVudGlsUGF1c2VkQ2FsbGJhY2s7CiAgICAgICAgIGRlbGV0ZSBJbnNwZWN0b3JUZXN0
Ll93YWl0VW50aWxQYXVzZWRDYWxsYmFjazsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Mi5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Mi5qcwppbmRleCBlYTJjMmMwLi41YjU4NTI4IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVz
dDIuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRl
c3QyLmpzCkBAIC00NCw3ICs0NCw3IEBAIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0ID0gZnVuY3Rp
b24odGV4dCkKICAgICB9CiB9OwogCi1JbnNwZWN0b3JUZXN0LmFkZE9iamVjdCA9IGZ1bmN0aW9u
KG9iamVjdCwgbm9uZGV0ZXJtaW5pc3RpY1Byb3BzLCBwcmVmaXgsIGZpcnN0TGluZVByZWZpeCkK
K0luc3BlY3RvclRlc3QuYWRkT2JqZWN0UmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0LCBub25kZXRl
cm1pbmlzdGljUHJvcHMsIHByZWZpeCwgZmlyc3RMaW5lUHJlZml4KQogewogICAgIHByZWZpeCA9
IHByZWZpeCB8fCAiIjsKICAgICBmaXJzdExpbmVQcmVmaXggPSBmaXJzdExpbmVQcmVmaXggfHwg
cHJlZml4OwpAQCAtNTcsNyArNTcsNyBAQCBJbnNwZWN0b3JUZXN0LmFkZE9iamVjdCA9IGZ1bmN0
aW9uKG9iamVjdCwgbm9uZGV0ZXJtaW5pc3RpY1Byb3BzLCBwcmVmaXgsIGZpcnN0TAogICAgICAg
ICBpZiAobm9uZGV0ZXJtaW5pc3RpY1Byb3BzICYmIHByb3AgaW4gbm9uZGV0ZXJtaW5pc3RpY1By
b3BzKQogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQocHJlZml4V2l0aE5hbWUg
KyAiPCIgKyB0eXBlb2YgcHJvcFZhbHVlICsgIj4iKTsKICAgICAgICAgZWxzZSBpZiAodHlwZW9m
IHByb3BWYWx1ZSA9PT0gIm9iamVjdCIpCi0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZE9i
amVjdChwcm9wVmFsdWUsIG5vbmRldGVybWluaXN0aWNQcm9wcywgcHJlZml4ICsgIiAgICAiLCBw
cmVmaXhXaXRoTmFtZSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZE9iamVjdFJlc3Vs
dChwcm9wVmFsdWUsIG5vbmRldGVybWluaXN0aWNQcm9wcywgcHJlZml4ICsgIiAgICAiLCBwcmVm
aXhXaXRoTmFtZSk7CiAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICJzdHJp
bmciKQogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQocHJlZml4V2l0aE5hbWUg
KyAiXCIiICsgcHJvcFZhbHVlICsgIlwiIik7CiAgICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy5odG1sCmluZGV4IGE1ZTc4NzQu
LjgxZTRjNmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9j
b2wtZXJyb3JzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2Nv
bC1lcnJvcnMuaHRtbApAQCAtMjUsNyArMjUsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICBmdW5j
dGlvbiBjYWxsYmFjayhtZXNzYWdlKQogICAgIHsKICAgICAgICAgaWYgKG51bWJlck9mUmVwb3J0
cyA8IG1lc3NhZ2VzLmxlbmd0aCkKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkT2JqZWN0
KG1lc3NhZ2UpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRPYmplY3RSZXN1bHQobWVz
c2FnZSk7CiAKICAgICAgICAgaWYgKCsrbnVtYmVyT2ZSZXBvcnRzID09PSBtZXNzYWdlcy5sZW5n
dGgpCiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNDJmOWRhLi5i
N2ZiM2VhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEwLTA5LTAxICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rp
dmlsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbiB0byBm
cm9udC1lbmQgd2hlbiBicmVha2luZyBvbiBET00gZXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0Njc5CisKKyAgICAgICAgKiBkb20vQ29udGFp
bmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjppbnNlcnRCZWZv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cGFyc2VySW5zZXJ0QmVmb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250YWluZXJOb2RlOjpwYXJzZXJBZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpu
b3RpZnlDaGlsZEluc2VydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoQ2hpbGRSZW1v
dmFsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVt
b3ZlQXR0cmlidXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbEluc2VydERPTU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkSW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsUmVtb3ZlRE9NTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsTW9kaWZ5RE9NQXR0cik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckNvbnRyb2xsZXJGb3JO
b2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0QnJlYWtwb2ludEZvck5vZGVJbnNl
cnRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEJyZWFrcG9p
bnRGb3JOb2RlUmVtb3ZhbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
Z2V0QnJlYWtwb2ludEZvckF0dHJpYnV0ZU1vZGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlQnJlYWtwb2ludCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0pOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVmFsdWU6OmlzTnVsbCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRJdGVtKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50SXRlbS5wcm90b3R5cGUuX2VuYWJsZUNoYW5nZWQpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNj
cmlwdC5wcm90b3R5cGUuZ2V0IGxpbmVzQ291bnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlwdCk6
CisKIDIwMTAtMDktMDEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApp
bmRleCBlZjYyYjM4Li43ZDg4OTQ4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtMTM0LDYgKzEz
NCw4IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6aW5zZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4g
bmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlCiAgICAgICAgIGlmIChjaGlsZC0+cGFyZW50
Tm9kZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxl
cjo6d2lsbEluc2VydERPTU5vZGUoY2hpbGQsIHRoaXMpOworCiAgICAgICAgIGluc2VydEJlZm9y
ZUNvbW1vbihuZXh0LmdldCgpLCBjaGlsZCk7CiAKICAgICAgICAgLy8gU2VuZCBub3RpZmljYXRp
b24gYWJvdXQgdGhlIGNoaWxkcmVuIGNoYW5nZS4KQEAgLTIwMSw2ICsyMDMsOCBAQCB2b2lkIENv
bnRhaW5lck5vZGU6OnBhcnNlckluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxk
LCBOb2RlKiBuZXh0Q2hpbAogICAgIGZvciAoTm9kZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSB0YXJnZXRzLmJlZ2luKCk7IGl0ICE9IHRhcmdldHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAg
Tm9kZSogY2hpbGQgPSBpdC0+Z2V0KCk7CiAKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6
d2lsbEluc2VydERPTU5vZGUoY2hpbGQsIHRoaXMpOworCiAgICAgICAgIGluc2VydEJlZm9yZUNv
bW1vbihuZXh0LmdldCgpLCBjaGlsZCk7CiAKICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkKHRydWUs
IG5leHRDaGlsZFByZXZpb3VzU2libGluZy5nZXQoKSwgbmV4dENoaWxkLCAxKTsKQEAgLTI3NCw2
ICsyNzgsOCBAQCBib29sIENvbnRhaW5lck5vZGU6OnJlcGxhY2VDaGlsZChQYXNzUmVmUHRyPE5v
ZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZQogICAgICAgICBBU1NFUlQoIWNoaWxk
LT5uZXh0U2libGluZygpKTsKICAgICAgICAgQVNTRVJUKCFjaGlsZC0+cHJldmlvdXNTaWJsaW5n
KCkpOwogCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKGNo
aWxkLmdldCgpLCB0aGlzKTsKKwogICAgICAgICAvLyBBZGQgY2hpbGQgYWZ0ZXIgInByZXYiLgog
ICAgICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7CiAgICAgICAgIE5vZGUqIG5leHQ7CkBAIC01
NTUsNiArNTYxLDggQEAgYm9vbCBDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZChQYXNzUmVmUHRy
PE5vZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywgYm8KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNl
cnRET01Ob2RlKGNoaWxkLCB0aGlzKTsKKwogICAgICAgICAvLyBBcHBlbmQgY2hpbGQgdG8gdGhl
IGVuZCBvZiB0aGUgbGlzdAogICAgICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7CiAgICAgICAg
IGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CkBAIC01OTMsNiArNjAxLDggQEAgdm9pZCBDb250YWlu
ZXJOb2RlOjpwYXJzZXJBZGRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkKQogICAgIEFT
U0VSVChuZXdDaGlsZCk7CiAgICAgQVNTRVJUKCFuZXdDaGlsZC0+cGFyZW50KCkpOyAvLyBVc2Ug
YXBwZW5kQ2hpbGQgaWYgeW91IG5lZWQgdG8gaGFuZGxlIHJlcGFyZW50aW5nIChhbmQgd2FudCBE
T00gbXV0YXRpb24gZXZlbnRzKS4KIAorICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNl
cnRET01Ob2RlKG5ld0NoaWxkLmdldCgpLCB0aGlzKTsKKwogICAgIGZvcmJpZEV2ZW50RGlzcGF0
Y2goKTsKICAgICBOb2RlKiBsYXN0ID0gbV9sYXN0Q2hpbGQ7CiAgICAgLy8gRklYTUU6IFRoaXMg
bWV0aG9kIHNob3VsZCB0YWtlIGEgUGFzc1JlZlB0ci4KQEAgLTk2NCwxMiArOTc0LDcgQEAgc3Rh
dGljIHZvaWQgbm90aWZ5Q2hpbGRJbnNlcnRlZChOb2RlKiBjaGlsZCkKIHsKICAgICBBU1NFUlQo
IWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CiAKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAg
IGlmIChQYWdlKiBwYWdlID0gY2hpbGQtPmRvY3VtZW50KCktPnBhZ2UoKSkgewotICAgICAgICBp
ZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZElu
c2VydERPTU5vZGUoY2hpbGQpOwotICAgIH0KLSNlbmRpZgorICAgIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZEluc2VydERPTU5vZGUoY2hpbGQpOwogCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBjaGls
ZDsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7CkBA
IC0xMDAzLDEyICsxMDA4LDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVu
dHMoTm9kZSogY2hpbGQpCiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkp
OwogCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikgICAgCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjaGls
ZC0+ZG9jdW1lbnQoKS0+cGFnZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVy
KiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAg
ICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkUmVtb3ZlRE9NTm9kZShjaGlsZCk7Ci0g
ICAgfQotI2VuZGlmCisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFJlbW92ZURPTU5vZGUo
Y2hpbGQpOwogCiAgICAgUmVmUHRyPE5vZGU+IGMgPSBjaGlsZDsKICAgICBSZWZQdHI8RG9jdW1l
bnQ+IGRvY3VtZW50ID0gY2hpbGQtPmRvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDM5YmYzOTMuLmZi
MTc1NjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCkBAIC01NDAsNiArNTQwLDExIEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0
cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAg
aWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBJbnNwZWN0b3JD
b250cm9sbGVyOjp3aWxsTW9kaWZ5RE9NQXR0cih0aGlzKTsKKyNlbmRpZgorCiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMp
ID8gbmFtZS5sb3dlcigpIDogbmFtZTsKIAogICAgIC8vIEFsbG9jYXRlIGF0dHJpYnV0ZSBtYXAg
aWYgbmVjZXNzYXJ5LgpAQCAtNTYzLDE3ICs1NjgsMTggQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRy
aWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
LAogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBk
b2N1bWVudCgpLT5wYWdlKCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpIHsKLSAgICAg
ICAgICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAg
ICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5kaWRNb2RpZnlET01BdHRyKHRoaXMpOwotICAgICAg
ICB9Ci0gICAgfQorICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKSkKKyAg
ICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0cih0aGlzKTsKICNlbmRp
ZgogfQogCiB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJikKIHsKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUo
KSkKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0dHIodGhpcyk7
CisjZW5kaWYKKwogICAgIGRvY3VtZW50KCktPmluY0RPTVRyZWVWZXJzaW9uKCk7CiAKICAgICAv
LyBBbGxvY2F0ZSBhdHRyaWJ1dGUgbWFwIGlmIG5lY2Vzc2FyeS4KQEAgLTU5MiwxMiArNTk4LDgg
QEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKSB7Ci0gICAgICAgIGlm
IChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzU3luY2hyb25pemluZ1N0eWxl
QXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkTW9k
aWZ5RE9NQXR0cih0aGlzKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIWlzU3luY2hyb25p
emluZ1N0eWxlQXR0cmlidXRlKCkpCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZE1v
ZGlmeURPTUF0dHIodGhpcyk7CiAjZW5kaWYKIH0KIApAQCAtMTIyOCw2ICsxMjMwLDggQEAgdm9p
ZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSwgY29uc3QgQXRvbWljU3RyaW4KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGUoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBJbnNwZWN0b3JDb250
cm9sbGVyOjp3aWxsTW9kaWZ5RE9NQXR0cih0aGlzKTsKKwogICAgIFN0cmluZyBsb2NhbE5hbWUg
PSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5sb3dlcigpIDogbmFtZTsK
IAogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewpAQCAtMTIzNiwxMyArMTI0MCw3IEBAIHZvaWQg
RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgICAgICAgICBlYyA9IDA7CiAgICAgfQogICAgIAotI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCkpIHsKLSAgICAg
ICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBwYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5k
aWRNb2RpZnlET01BdHRyKHRoaXMpOwotICAgIH0KLSNlbmRpZgotICAgIAorICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpZE1vZGlmeURPTUF0dHIodGhpcyk7CiB9CiAKIHZvaWQgRWxlbWVudDo6
cmVtb3ZlQXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmlu
ZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmlu
ZGV4IGZmMWMyYWYuLjVjMTA3ZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtNzMsNyAr
NzMsNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtub3RpZnldIHZvaWQgZGVidWdnZXJXYXNE
aXNhYmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIGZhaWxlZFRvUGFyc2VTY3JpcHRTb3Vy
Y2Uob3V0IFN0cmluZyB1cmwsIG91dCBTdHJpbmcgZGF0YSwgb3V0IGludCBmaXJzdExpbmUsIG91
dCBpbnQgZXJyb3JMaW5lLCBvdXQgU3RyaW5nIGVycm9yTWVzc2FnZSk7CiAgICAgICAgIFtub3Rp
ZnldIHZvaWQgcGFyc2VkU2NyaXB0U291cmNlKG91dCBTdHJpbmcgc291cmNlSUQsIG91dCBTdHJp
bmcgdXJsLCBvdXQgU3RyaW5nIGRhdGEsIG91dCBpbnQgZmlyc3RMaW5lLCBvdXQgaW50IHNjcmlw
dFdvcmxkVHlwZSk7Ci0gICAgICAgIFtub3RpZnldIHZvaWQgcGF1c2VkU2NyaXB0KG91dCBWYWx1
ZSBjYWxsRnJhbWVzKTsKKyAgICAgICAgW25vdGlmeV0gdm9pZCBwYXVzZWRTY3JpcHQob3V0IE9i
amVjdCBkZXRhaWxzKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBwcm9maWxlcldhc0VuYWJsZWQo
KTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBwcm9maWxlcldhc0Rpc2FibGVkKCk7CiAgICAgICAg
IFtub3RpZnldIHZvaWQgcmVzdG9yZWRCcmVha3BvaW50KG91dCBTdHJpbmcgc291cmNlSUQsIG91
dCBTdHJpbmcgdXJsLCBvdXQgaW50IGxpbmUsIG91dCBib29sZWFuIGVuYWJsZWQsIG91dCBTdHJp
bmcgY29uZGl0aW9uKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRl
eCA3ZWQyNTQ5Li45ZDM2ZTAwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oCkBAIC0zMSw3ICszMSwxMCBAQAogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUg
IkNvb2tpZS5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01B
Z2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0
ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC02MCw3ICs2Myw2IEBAIGNsYXNzIElu
c3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckNTU1N0b3JlOwogY2xhc3MgSW5zcGVjdG9y
RE9NU3RvcmFnZVJlc291cmNlOwogY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKLWNs
YXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNs
YXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwpAQCAt
MTgzLDkgKzE4NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYWluUmVzb3VyY2VGaXJlZExvYWRF
dmVudChEb2N1bWVudExvYWRlciosIGNvbnN0IEtVUkwmKTsKICAgICB2b2lkIG1haW5SZXNvdXJj
ZUZpcmVkRE9NQ29udGVudEV2ZW50KERvY3VtZW50TG9hZGVyKiwgY29uc3QgS1VSTCYpOwogCi0g
ICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUqKTsKLSAgICB2b2lkIGRpZFJlbW92ZURPTU5v
ZGUoTm9kZSopOwotICAgIHZvaWQgZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50Kik7CisgICAgc3Rh
dGljIHZvaWQgd2lsbEluc2VydERPTU5vZGUoTm9kZSogbm9kZSwgTm9kZSogcGFyZW50KTsKKyAg
ICBzdGF0aWMgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUqKTsKKyAgICBzdGF0aWMgdm9pZCB3
aWxsUmVtb3ZlRE9NTm9kZShOb2RlKik7CisgICAgc3RhdGljIHZvaWQgd2lsbE1vZGlmeURPTUF0
dHIoRWxlbWVudCopOworICAgIHN0YXRpYyB2b2lkIGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCop
OworCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgZW51bSBXb3JrZXJBY3Rpb24geyBXb3JrZXJD
cmVhdGVkLCBXb3JrZXJEZXN0cm95ZWQgfTsKIApAQCAtMzA2LDYgKzMxMSw4IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYganNvblJlc3VsdCk7CiAKKyAgICBzdGF0aWMgSW5zcGVjdG9yQ29udHJvbGxl
ciogaW5zcGVjdG9yQ29udHJvbGxlckZvck5vZGUoTm9kZSopOworCiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7
CiAgICAgU3RyaW5nIGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpOwpAQCAtMzc2LDMwICszODMsODQg
QEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAoraW5saW5lIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6d2lsbEluc2VydERPTU5vZGUoTm9kZSogbm9kZSwgTm9kZSogcGFyZW50KQoreworI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxlckZvck5vZGUobm9kZSkpIHsK
KyAgICAgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3Rv
ckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKTsKKyAgICAgICAgaWYgKCFkZWJ1Z2dlckFnZW50
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpOworICAgICAgICBpZiAoIWRvbUFn
ZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGJyZWFrcG9pbnQgPSBkb21BZ2VudC0+Z2V0QnJlYWtwb2ludEZvck5vZGVJbnNlcnRpb24obm9k
ZSwgcGFyZW50KTsKKyAgICAgICAgaWYgKCFicmVha3BvaW50LT5pc051bGwoKSkKKyAgICAgICAg
ICAgIGRlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShicmVha3BvaW50KTsKKyAgICB9CisjZW5k
aWYKK30KKwogaW5saW5lIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkSW5zZXJ0RE9NTm9k
ZShOb2RlKiBub2RlKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fZG9tQWdl
bnQpCi0gICAgICAgIG1fZG9tQWdlbnQtPmRpZEluc2VydERPTU5vZGUobm9kZSk7CisgICAgaWYg
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250
cm9sbGVyRm9yTm9kZShub2RlKSkgeworICAgICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRv
bUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkKKyAgICAgICAgICAgIGRv
bUFnZW50LT5kaWRJbnNlcnRET01Ob2RlKG5vZGUpOworICAgIH0KICNlbmRpZgogfQogCi1pbmxp
bmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUp
CitpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsUmVtb3ZlRE9NTm9kZShOb2Rl
KiBub2RlKQogewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fZG9tQWdlbnQpCi0g
ICAgICAgIG1fZG9tQWdlbnQtPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7CisjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yTm9kZShub2RlKSkgeworICAgICAg
ICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5kb21B
Z2VudCgpOworICAgICAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3Rv
ckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKSkgeworICAgICAgICAgICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBicmVha3BvaW50ID0gZG9tQWdlbnQtPmdldEJyZWFrcG9pbnRGb3JOb2RlUmVt
b3ZhbChub2RlKTsKKyAgICAgICAgICAgIGlmICghYnJlYWtwb2ludC0+aXNOdWxsKCkpCisgICAg
ICAgICAgICAgICAgZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKGJyZWFrcG9pbnQpOworICAg
ICAgICB9CisgICAgICAgIGRvbUFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOworICAgIH0K
KyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsTW9kaWZ5
RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQoreworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQorICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0g
aW5zcGVjdG9yQ29udHJvbGxlckZvck5vZGUoZWxlbWVudCkpIHsKKyAgICAgICAgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IGluc3BlY3RvckNvbnRyb2xsZXItPmRlYnVn
Z2VyQWdlbnQoKTsKKyAgICAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250
cm9sbGVyLT5kb21BZ2VudCgpOworICAgICAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGJyZWFrcG9pbnQgPSBkb21B
Z2VudC0+Z2V0QnJlYWtwb2ludEZvckF0dHJpYnV0ZU1vZGlmaWNhdGlvbihlbGVtZW50KTsKKyAg
ICAgICAgaWYgKCFicmVha3BvaW50LT5pc051bGwoKSkKKyAgICAgICAgICAgIGRlYnVnZ2VyQWdl
bnQtPmJyZWFrUHJvZ3JhbShicmVha3BvaW50KTsKKyAgICB9CiAjZW5kaWYKIH0KIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVt
ZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fZG9tQWdlbnQpCi0gICAg
ICAgIG1fZG9tQWdlbnQtPmRpZE1vZGlmeURPTUF0dHIoZWxlbWVudCk7CisgICAgaWYgKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVy
Rm9yTm9kZShlbGVtZW50KSkgeworICAgICAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFn
ZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkKKyAgICAgICAgICAgIGRvbUFn
ZW50LT5kaWRNb2RpZnlET01BdHRyKGVsZW1lbnQpOworICAgIH0KICNlbmRpZgogfQogCitpbmxp
bmUgSW5zcGVjdG9yQ29udHJvbGxlciogSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQ29u
dHJvbGxlckZvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoUGFnZSogcGFnZSA9IG5vZGUt
PmRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmluc3BlY3RvckNvbnRy
b2xsZXIoKTsKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yQ29udHJvbGxlcl9oKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGQyNzYwZTQuLjA0MWQ5ZDggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTY0LDcgKzY0LDYgQEAKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU3R5bGVDb25zdGFudHMuaCIKLSNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgog
I2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlz
dC5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTIxMCw4ICsyMDksNiBAQCBjb25zdCBpbnQgZG9t
QnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQgPSAxNjsKIAogfQogCi1JbnNwZWN0b3JET01BZ2Vu
dCogSW5zcGVjdG9yRE9NQWdlbnQ6OnNfZG9tQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwotCiBJbnNw
ZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0
b3JlLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBFdmVudExpc3RlbmVyKElu
c3BlY3RvckRPTUFnZW50VHlwZSkKICAgICAsIG1fY3NzU3RvcmUoY3NzU3RvcmUpCkBAIC0yMjQs
OSArMjIxLDYgQEAgSW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3BlY3Rv
ckNTU1N0b3JlKiBjc3NTdG9yZSwgSW5zcGVjdG9yRnJvbnQKIEluc3BlY3RvckRPTUFnZW50Ojp+
SW5zcGVjdG9yRE9NQWdlbnQoKQogewogICAgIHJlc2V0KCk7Ci0KLSAgICBpZiAodGhpcyA9PSBz
X2RvbUFnZW50T25CcmVha3BvaW50KQotICAgICAgICBzX2RvbUFnZW50T25CcmVha3BvaW50ID0g
MDsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzZXQoKQpAQCAtNzgwLDYgKzc3NCwy
OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9k
ZUlkLCBsb25nIHR5cGUpCiAgICAgfQogfQogCitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJ
bnNwZWN0b3JET01BZ2VudDo6Z2V0QnJlYWtwb2ludEZvck5vZGVJbnNlcnRpb24oTm9kZSosIE5v
ZGUqIHBhcmVudCkKK3sKKyAgICBpZiAoaGFzQnJlYWtwb2ludChwYXJlbnQsIFN1YnRyZWVNb2Rp
ZmllZCkpCisgICAgICAgIHJldHVybiBjcmVhdGVCcmVha3BvaW50KHBhcmVudCwgU3VidHJlZU1v
ZGlmaWVkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yT2JqZWN0OjpudWxsKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckRPTUFnZW50OjpnZXRCcmVha3BvaW50Rm9y
Tm9kZVJlbW92YWwoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoaGFzQnJlYWtwb2ludChub2RlLCBO
b2RlUmVtb3ZlZCkpCisgICAgICAgIHJldHVybiBjcmVhdGVCcmVha3BvaW50KG5vZGUsIE5vZGVS
ZW1vdmVkKTsKKyAgICBpZiAoaGFzQnJlYWtwb2ludChpbm5lclBhcmVudE5vZGUobm9kZSksIFN1
YnRyZWVNb2RpZmllZCkpCisgICAgICAgIHJldHVybiBjcmVhdGVCcmVha3BvaW50KGlubmVyUGFy
ZW50Tm9kZShub2RlKSwgU3VidHJlZU1vZGlmaWVkKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yT2Jq
ZWN0OjpudWxsKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckRP
TUFnZW50OjpnZXRCcmVha3BvaW50Rm9yQXR0cmlidXRlTW9kaWZpY2F0aW9uKEVsZW1lbnQqIGVs
ZW1lbnQpCit7CisgICAgaWYgKGhhc0JyZWFrcG9pbnQoZWxlbWVudCwgQXR0cmlidXRlTW9kaWZp
ZWQpKQorICAgICAgICByZXR1cm4gY3JlYXRlQnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1dGVN
b2RpZmllZCk7CisgICAgcmV0dXJuIEluc3BlY3Rvck9iamVjdDo6bnVsbCgpOworfQorCiBTdHJp
bmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVu
dCkgY29uc3QKIHsKICAgICBpZiAoIWRvY3VtZW50IHx8IGRvY3VtZW50LT51cmwoKS5pc051bGwo
KSkKQEAgLTk4NSwxMiArMTAwMiw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2Vy
dERPTU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fYnJlYWtw
b2ludHMuc2l6ZSgpKSB7Ci0gICAgICAgIE5vZGUqIHBhcmVudCA9IGlubmVyUGFyZW50Tm9kZShu
b2RlKTsKLSAgICAgICAgaWYgKGhhc0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQp
KSB7Ci0gICAgICAgICAgICBpZiAoIXBhdXNlT25CcmVha3BvaW50KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHVpbnQzMl90IG1hc2sgPSBtX2JyZWFrcG9p
bnRzLmdldChwYXJlbnQpOworICAgICAgICB1aW50MzJfdCBtYXNrID0gbV9icmVha3BvaW50cy5n
ZXQoaW5uZXJQYXJlbnROb2RlKG5vZGUpKTsKICAgICAgICAgdWludDMyX3QgaW5oZXJpdGFibGVU
eXBlc01hc2sgPSAobWFzayB8IChtYXNrID4+IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0
KSkgJiBpbmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2s7CiAgICAgICAgIGlmIChpbmhl
cml0YWJsZVR5cGVzTWFzaykKICAgICAgICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhu
b2RlLCBpbmhlcml0YWJsZVR5cGVzTWFzaywgdHJ1ZSk7CkBAIC0xMDIzLDEwICsxMDM1LDYgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobV9icmVha3BvaW50cy5zaXplKCkpIHsKLSAgICAgICAg
aWYgKGhhc0JyZWFrcG9pbnQobm9kZSwgTm9kZVJlbW92ZWQpIHx8IGhhc0JyZWFrcG9pbnQoaW5u
ZXJQYXJlbnROb2RlKG5vZGUpLCBTdWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAgICAgICBpZiAo
IXBhdXNlT25CcmVha3BvaW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CiAgICAgICAgIC8vIFJlbW92ZSBzdWJ0cmVlIGJyZWFrcG9pbnRzLgogICAgICAgICBtX2JyZWFr
cG9pbnRzLnJlbW92ZShub2RlKTsKICAgICAgICAgVmVjdG9yPE5vZGUqPiBzdGFjaygxLCBpbm5l
ckZpcnN0Q2hpbGQobm9kZSkpOwpAQCAtMTA2MywxMiArMTA3MSwyNCBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFp
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGhhc0JyZWFrcG9pbnQoZWxlbWVudCwgQXR0
cmlidXRlTW9kaWZpZWQpKSB7Ci0gICAgICAgIGlmICghcGF1c2VPbkJyZWFrcG9pbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICBtX2Zyb250ZW5kLT5hdHRyaWJ1dGVzVXBkYXRlZChpZCwg
YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpKTsKK30KKworUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGVCcmVha3BvaW50KE5v
ZGUqIG5vZGUsIGxvbmcgdHlwZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVh
a3BvaW50ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKworICAgIC8vIEZpbmQgYnJlYWtw
b2ludCBvd25lci4KKyAgICB3aGlsZSAoIShtX2JyZWFrcG9pbnRzLmdldChub2RlKSAmICgxIDw8
IHR5cGUpKSkgeworICAgICAgICBub2RlID0gaW5uZXJQYXJlbnROb2RlKG5vZGUpOworICAgICAg
ICBBU1NFUlQobm9kZSk7CiAgICAgfQorICAgIGxvbmcgbm9kZUlkID0gbV9kb2N1bWVudE5vZGVU
b0lkTWFwLmdldChub2RlKTsKKyAgICBBU1NFUlQobm9kZUlkKTsKIAotICAgIG1fZnJvbnRlbmQt
PmF0dHJpYnV0ZXNVcGRhdGVkKGlkLCBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxl
bWVudCkpOworICAgIGJyZWFrcG9pbnQtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKKyAg
ICBicmVha3BvaW50LT5zZXROdW1iZXIoInR5cGUiLCB0eXBlKTsKKyAgICByZXR1cm4gYnJlYWtw
b2ludC5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6Omhhc0JyZWFrcG9p
bnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKQpAQCAtMTA3OCwxOSArMTA5OCw2IEBAIGJvb2wgSW5z
cGVjdG9yRE9NQWdlbnQ6Omhhc0JyZWFrcG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKQogICAg
IHJldHVybiBtX2JyZWFrcG9pbnRzLmdldChub2RlKSAmIChyb290Qml0IHwgZGVyaXZlZEJpdCk7
CiB9CiAKLWJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OnBhdXNlT25CcmVha3BvaW50KCkKLXsKLSNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBzX2RvbUFnZW50T25CcmVha3BvaW50
ID0gdGhpczsKLSAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYnJlYWtQcm9ncmFtKCk7
Ci0gICAgYm9vbCBkZWxldGVkID0gIXNfZG9tQWdlbnRPbkJyZWFrcG9pbnQ7Ci0gICAgc19kb21B
Z2VudE9uQnJlYWtwb2ludCA9IDA7Ci0gICAgcmV0dXJuICFkZWxldGVkOwotI2Vsc2UKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSNlbmRpZgotfQotCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1cGRhdGVT
dWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogbm9kZSwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0
KQogewogICAgIHVpbnQzMl90IG9sZE1hc2sgPSBtX2JyZWFrcG9pbnRzLmdldChub2RlKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGZkM2M1YjUuLjI3ODc4MDIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMzYsNyArMzYsNiBAQAogI2lu
Y2x1ZGUgIkluc3BlY3RvckNTU1N0b3JlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgi
CiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKLSNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1
ZGUgIlRpbWVyLmgiCiAKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTExNCw2ICsxMTMsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2VhcmNoQ2FuY2VsZWQoKTsKICAg
ICAgICAgdm9pZCBzZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOwogICAg
ICAgICB2b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldEJyZWFrcG9pbnRGb3JOb2RlSW5z
ZXJ0aW9uKE5vZGUqIG5vZGUsIE5vZGUqIHBhcmVudCk7CisgICAgICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IGdldEJyZWFrcG9pbnRGb3JOb2RlUmVtb3ZhbChOb2RlKik7CisgICAgICAg
IFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldEJyZWFrcG9pbnRGb3JBdHRyaWJ1dGVNb2Rp
ZmljYXRpb24oRWxlbWVudCopOwogCiAgICAgICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhl
IGZyb250ZW5kIGZvciBDU1Mgc3R5bGVzIGluc3BlY3Rpb24uCiAgICAgICAgIHZvaWQgZ2V0U3R5
bGVzKGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4q
IHN0eWxlcyk7CkBAIC0xNjAsNyArMTYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIHB1c2hEb2N1bWVudFRvRnJvbnRlbmQoKTsKIAogICAgICAgICBib29sIGhhc0JyZWFr
cG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKTsKLSAgICAgICAgYm9vbCBwYXVzZU9uQnJlYWtw
b2ludCgpOworICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlQnJlYWtw
b2ludChOb2RlKiBub2RlLCBsb25nIHR5cGUpOwogICAgICAgICB2b2lkIHVwZGF0ZVN1YnRyZWVC
cmVha3BvaW50cyhOb2RlKiByb290LCB1aW50MzJfdCByb290TWFzaywgYm9vbCB2YWx1ZSk7CiAK
ICAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQXR0cmli
dXRlU3R5bGVzKEVsZW1lbnQqIGVsZW1lbnQpOwpAQCAtMjE3LDggKzIxOSw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBtX3NlYXJjaFJlc3Vs
dHM7CiAgICAgICAgIFZlY3Rvcjxsb25nPiBtX2luc3BlY3RlZE5vZGVzOwogICAgICAgICBIYXNo
TWFwPE5vZGUqLCB1aW50MzJfdD4gbV9icmVha3BvaW50czsKLQotICAgICAgICBzdGF0aWMgSW5z
cGVjdG9yRE9NQWdlbnQqIHNfZG9tQWdlbnRPbkJyZWFrcG9pbnQ7CiAgICAgfTsKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDM1
N2EwNDMuLjhmZjg1ZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwCkBAIC01NiwxMSArNTYsMTQgQEAgUGFzc093blB0cjxJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zcGVjdG9yQ29udHIKICAg
ICByZXR1cm4gYWdlbnQucmVsZWFzZSgpOwogfQogCitJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwor
CiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3Rv
ckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckZyb250ZW5kKiBmcm9u
dGVuZCkKICAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQog
ICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkK
ICAgICAsIG1fYnJlYWtwb2ludHNMb2FkZWQoZmFsc2UpCisgICAgLCBtX2JyZWFrUHJvZ3JhbVJl
YXNvbihJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKQogewogfQogCkBAIC02OCw2ICs3MSw5IEBAIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCkKIHsKICAgICBT
Y3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlTGlzdGVuZXIodGhpcywgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCkpOwogICAgIG1fcGF1c2VkU2NyaXB0U3RhdGUg
PSAwOworCisgICAgaWYgKHRoaXMgPT0gc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50KQorICAg
ICAgICBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwogfQogCiBib29sIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmlzRGVidWdnZXJBbHdheXNFbmFibGVkKCkKQEAgLTI4Myw4ICsyODks
MTAgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUpCiB7CiAgICAgQVNTRVJUKHNjcmlwdFN0YXRlICYmICFtX3BhdXNlZFNjcmlw
dFN0YXRlKTsKICAgICBtX3BhdXNlZFNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGU7Ci0gICAgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBjYWxsRnJhbWVzID0gY3VycmVudENhbGxGcmFtZXMoKTsKLSAg
ICBtX2Zyb250ZW5kLT5wYXVzZWRTY3JpcHQoY2FsbEZyYW1lcy5nZXQoKSk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGV0YWlscyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgZGV0YWlscy0+c2V0VmFsdWUoImNhbGxGcmFtZXMiLCBjdXJyZW50Q2FsbEZyYW1lcygpKTsK
KyAgICBkZXRhaWxzLT5zZXRWYWx1ZSgicmVhc29uIiwgbV9icmVha1Byb2dyYW1SZWFzb24pOwor
ICAgIG1fZnJvbnRlbmQtPnBhdXNlZFNjcmlwdChkZXRhaWxzKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCkBAIC0yOTMsNiArMzAxLDE5IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogICAgIG1fZnJvbnRlbmQtPnJl
c3VtZWRTY3JpcHQoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1By
b2dyYW0oUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVhc29uKQoreworICAgIHNfZGVidWdn
ZXJBZ2VudE9uQnJlYWtwb2ludCA9IHRoaXM7CisgICAgbV9icmVha1Byb2dyYW1SZWFzb24gPSBy
ZWFzb247CisKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYnJlYWtQcm9ncmFtKCk7
CisgICAgaWYgKCFzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIHNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCA9IDA7CisgICAgbV9icmVha1Byb2dy
YW1SZWFzb24gPSBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCA5MWJjZDQ5Li43OWIwYTBl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCkBAIC02MSw2
ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSk7CiAKICAgICB2b2lkIHBhdXNlKCk7Cisg
ICAgdm9pZCBicmVha1Byb2dyYW0oUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVhc29uKTsK
ICAgICB2b2lkIHJlc3VtZSgpOwogICAgIHZvaWQgc3RlcE92ZXJTdGF0ZW1lbnQoKTsKICAgICB2
b2lkIHN0ZXBJbnRvU3RhdGVtZW50KCk7CkBAIC05Myw2ICs5NCw4IEBAIHByaXZhdGU6CiAgICAg
SGFzaE1hcDxTdHJpbmcsIFNvdXJjZUJyZWFrcG9pbnRzPiBtX3N0aWNreUJyZWFrcG9pbnRzOwog
ICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZD4gbV9icmVha3BvaW50c01hcHBpbmc7CiAgICAg
Ym9vbCBtX2JyZWFrcG9pbnRzTG9hZGVkOworICAgIHN0YXRpYyBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50KiBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQ7CisgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBtX2JyZWFrUHJvZ3JhbVJlYXNvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKaW5kZXggM2RkOTU5NC4uNDAzNmY1NSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKQEAgLTY3LDYgKzY3LDggQEAgcHVibGljOgog
CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKKyAgICBib29sIGlz
TnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlTnVsbDsgfQorCiAgICAgdmlydHVh
bCBib29sIGFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBh
c051bWJlcihkb3VibGUqIG91dHB1dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVy
KGxvbmcqIG91dHB1dCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCmluZGV4IDNhMDg2MGYuLjI5YmU2NDYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQ
YW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGVi
YXJQYW5lLmpzCkBAIC0xMDYsNyArMTA2LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRJdGVt
ID0gZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGNo
ZWNrYm94RWxlbWVudCk7CiAKICAgICB0aGlzLl9icmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIo
ImVuYWJsZS1jaGFuZ2VkIiwgdGhpcy5fZW5hYmxlQ2hhbmdlZCwgdGhpcyk7Ci0gICAgdGhpcy5f
YnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJyZW1vdmVkIiwgdGhpcy5fcmVtb3ZlZCwgdGhp
cyk7CisgICAgdGhpcy5fYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJyZW1vdmVkIiwgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMuYmluZCh0aGlzLCAicmVtb3ZlZCIpKTsKIH0KIAog
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRJdGVtLnByb3RvdHlwZSA9IHsKQEAgLTEyOCwxNSArMTI4
LDEwIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRlbS5wcm90b3R5cGUgPSB7CiAgICAgICAg
IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgIH0sCiAKLSAgICBfZW5hYmxlQ2hhbmdlZDog
ZnVuY3Rpb24oKQorICAgIF9lbmFibGVDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAg
ICAgICAgIHZhciBjaGVja2JveCA9IHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZDsKICAgICAgICAg
Y2hlY2tib3guY2hlY2tlZCA9IHRoaXMuX2JyZWFrcG9pbnQuZW5hYmxlZDsKLSAgICB9LAotCi0g
ICAgX3JlbW92ZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKCJyZW1vdmVkIik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NjcmlwdC5qcwppbmRleCA0MmQ2ODUwLi5iZTNmMDIwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TY3JpcHQuanMKQEAgLTYyLDExICs2MiwxNCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0
LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5zb3VyY2UpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHRoaXMuX2xpbmVzQ291bnQpCisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fbGluZXNDb3VudDsKICAgICAgICAgdGhpcy5fbGluZXNDb3VudCA9IDA7
CiAgICAgICAgIHZhciBsYXN0SW5kZXggPSB0aGlzLnNvdXJjZS5pbmRleE9mKCJcbiIpOwogICAg
ICAgICB3aGlsZSAobGFzdEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgbGFzdEluZGV4ID0g
dGhpcy5zb3VyY2UuaW5kZXhPZigiXG4iLCBsYXN0SW5kZXggKyAxKQogICAgICAgICAgICAgdGhp
cy5fbGluZXNDb3VudCsrOwogICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9saW5lc0Nv
dW50OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmlu
ZGV4IDBiZmYzMzUuLjI0MWE5ZmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qcwpAQCAtMTQ0NSw5ICsxNDQ1LDkgQEAgV2ViSW5zcGVjdG9yLmZhaWxlZFRvUGFyc2VT
Y3JpcHRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2VVUkwsIHNvdXJjZSwgc3RhcnRpbmdMaW4KICAg
ICB0aGlzLnBhbmVscy5zY3JpcHRzLmFkZFNjcmlwdChudWxsLCBzb3VyY2VVUkwsIHNvdXJjZSwg
c3RhcnRpbmdMaW5lLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CiB9CiAKLVdlYkluc3BlY3Rv
ci5wYXVzZWRTY3JpcHQgPSBmdW5jdGlvbihjYWxsRnJhbWVzKQorV2ViSW5zcGVjdG9yLnBhdXNl
ZFNjcmlwdCA9IGZ1bmN0aW9uKGRldGFpbHMpCiB7Ci0gICAgdGhpcy5wYW5lbHMuc2NyaXB0cy5k
ZWJ1Z2dlclBhdXNlZChjYWxsRnJhbWVzKTsKKyAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmRlYnVn
Z2VyUGF1c2VkKGRldGFpbHMuY2FsbEZyYW1lcyk7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmJyaW5nVG9Gcm9udCgpOwogfQogCg==
</data>
<flag name="review"
          id="55149"
          type_id="1"
          status="+"
          setter="yurys"
    />
    <flag name="commit-queue"
          id="55150"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66344</attachid>
            <date>2010-09-02 03:11:56 -0700</date>
            <delta_ts>2010-09-02 09:40:11 -0700</delta_ts>
            <desc>Fixed compilation problem.</desc>
            <filename>break_details.patch</filename>
            <type>text/plain</type>
            <size>32721</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyOTJkMGI5Li43NzZmODFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDkt
MDIgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHJv
dmlkZSBtb3JlIGluZm9ybWF0aW9uIHRvIGZyb250LWVuZCB3aGVuIGJyZWFraW5nIG9uIERPTSBl
dmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ2
NzkKKworICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzOgor
ICAgICAgICAoaW5pdGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5fcGF1c2VkU2Ny
aXB0KToKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdDIuanM6
CisgICAgICAgIChpbml0aWFsaXplX0luc3BlY3RvclRlc3QuSW5zcGVjdG9yVGVzdC5hZGRPYmpl
Y3RSZXN1bHQpOgorICAgICAgICAqIGluc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0
bWw6CisKIDIwMTAtMDktMDIgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHNraXBwaW5nIG5ldyBmYWlsaW5nIG1lZGlhIHRlc3Qu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10
ZXN0Mi5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3Qy
LmpzCmluZGV4IDgwYjk4YTYuLjZjMTlmZjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzCkBAIC04OSwxMCArODksMTAgQEAgSW5z
cGVjdG9yVGVzdC5jYXB0dXJlU3RhY2tUcmFjZSA9IGZ1bmN0aW9uKGNhbGxGcmFtZXMpCiAgICAg
fQogfTsKIAotSW5zcGVjdG9yVGVzdC5fcGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oY2FsbEZyYW1l
cykKK0luc3BlY3RvclRlc3QuX3BhdXNlZFNjcmlwdCA9IGZ1bmN0aW9uKGRldGFpbHMpCiB7CiAg
ICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNjcmlwdCBleGVjdXRpb24gcGF1c2VkLiIpOwot
ICAgIEluc3BlY3RvclRlc3QuX2NhbGxGcmFtZXMgPSBjYWxsRnJhbWVzOworICAgIEluc3BlY3Rv
clRlc3QuX2NhbGxGcmFtZXMgPSBkZXRhaWxzLmNhbGxGcmFtZXM7CiAgICAgaWYgKEluc3BlY3Rv
clRlc3QuX3dhaXRVbnRpbFBhdXNlZENhbGxiYWNrKSB7CiAgICAgICAgIHZhciBjYWxsYmFjayA9
IEluc3BlY3RvclRlc3QuX3dhaXRVbnRpbFBhdXNlZENhbGxiYWNrOwogICAgICAgICBkZWxldGUg
SW5zcGVjdG9yVGVzdC5fd2FpdFVudGlsUGF1c2VkQ2FsbGJhY2s7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdDIuanMgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdDIuanMKaW5kZXggZWEyYzJj
MC4uNWI1ODUyOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
aW5zcGVjdG9yLXRlc3QyLmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2luc3BlY3Rvci10ZXN0Mi5qcwpAQCAtNDQsNyArNDQsNyBAQCBJbnNwZWN0b3JUZXN0LmFkZFJl
c3VsdCA9IGZ1bmN0aW9uKHRleHQpCiAgICAgfQogfTsKIAotSW5zcGVjdG9yVGVzdC5hZGRPYmpl
Y3QgPSBmdW5jdGlvbihvYmplY3QsIG5vbmRldGVybWluaXN0aWNQcm9wcywgcHJlZml4LCBmaXJz
dExpbmVQcmVmaXgpCitJbnNwZWN0b3JUZXN0LmFkZE9iamVjdFJlc3VsdCA9IGZ1bmN0aW9uKG9i
amVjdCwgbm9uZGV0ZXJtaW5pc3RpY1Byb3BzLCBwcmVmaXgsIGZpcnN0TGluZVByZWZpeCkKIHsK
ICAgICBwcmVmaXggPSBwcmVmaXggfHwgIiI7CiAgICAgZmlyc3RMaW5lUHJlZml4ID0gZmlyc3RM
aW5lUHJlZml4IHx8IHByZWZpeDsKQEAgLTU3LDcgKzU3LDcgQEAgSW5zcGVjdG9yVGVzdC5hZGRP
YmplY3QgPSBmdW5jdGlvbihvYmplY3QsIG5vbmRldGVybWluaXN0aWNQcm9wcywgcHJlZml4LCBm
aXJzdEwKICAgICAgICAgaWYgKG5vbmRldGVybWluaXN0aWNQcm9wcyAmJiBwcm9wIGluIG5vbmRl
dGVybWluaXN0aWNQcm9wcykKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KHBy
ZWZpeFdpdGhOYW1lICsgIjwiICsgdHlwZW9mIHByb3BWYWx1ZSArICI+Iik7CiAgICAgICAgIGVs
c2UgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICJvYmplY3QiKQotICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5hZGRPYmplY3QocHJvcFZhbHVlLCBub25kZXRlcm1pbmlzdGljUHJvcHMsIHByZWZp
eCArICIgICAgIiwgcHJlZml4V2l0aE5hbWUpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5h
ZGRPYmplY3RSZXN1bHQocHJvcFZhbHVlLCBub25kZXRlcm1pbmlzdGljUHJvcHMsIHByZWZpeCAr
ICIgICAgIiwgcHJlZml4V2l0aE5hbWUpOwogICAgICAgICBlbHNlIGlmICh0eXBlb2YgcHJvcFZh
bHVlID09PSAic3RyaW5nIikKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KHBy
ZWZpeFdpdGhOYW1lICsgIlwiIiArIHByb3BWYWx1ZSArICJcIiIpOwogICAgICAgICBlbHNlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy5o
dG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbApp
bmRleCBhNWU3ODc0Li44MWU0YzZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cmVwb3J0LXByb3RvY29sLWVycm9ycy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9y
ZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0bWwKQEAgLTI1LDcgKzI1LDcgQEAgZnVuY3Rpb24gdGVz
dCgpCiAgICAgZnVuY3Rpb24gY2FsbGJhY2sobWVzc2FnZSkKICAgICB7CiAgICAgICAgIGlmIChu
dW1iZXJPZlJlcG9ydHMgPCBtZXNzYWdlcy5sZW5ndGgpCi0gICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmFkZE9iamVjdChtZXNzYWdlKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkT2Jq
ZWN0UmVzdWx0KG1lc3NhZ2UpOwogCiAgICAgICAgIGlmICgrK251bWJlck9mUmVwb3J0cyA9PT0g
bWVzc2FnZXMubGVuZ3RoKQogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3Qo
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggYTg3NGIwZi4uZjcyMzI0ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxMC0wOS0wMiAgUGF2ZWwgUG9k
aXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIG1vcmUgaW5m
b3JtYXRpb24gdG8gZnJvbnQtZW5kIHdoZW4gYnJlYWtpbmcgb24gRE9NIGV2ZW50CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDY3OQorCisgICAgICAg
ICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9k
ZTo6aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNl
ckluc2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBsYWNl
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6bm90aWZ5Q2hpbGRJbnNlcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpkaXNw
YXRjaENoaWxkUmVtb3ZhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbEluc2VydERPTU5vZGVJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEluc2VydERPTU5v
ZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxSZW1v
dmVET01Ob2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpk
aWRSZW1vdmVET01Ob2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjp3aWxsTW9kaWZ5RE9NQXR0ckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0ckltcGwpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjp3aWxsSW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OndpbGxSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OndpbGxNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRpZE1vZGlmeURPTUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQ29udHJvbGxlckZvck5vZGUpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6fkluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpzaG91bGRCcmVha09uTm9kZUluc2VydGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2hvdWxkQnJlYWtPbk5vZGVSZW1vdmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzaG91bGRCcmVha09uQXR0cmlidXRl
TW9kaWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkaWRJ
bnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkaWRS
ZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkaWRN
b2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpjcmVh
dGVCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJy
ZWFrUHJvZ3JhbSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JWYWx1ZTo6aXNOdWxsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludEl0ZW0pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRJdGVtLnByb3Rv
dHlwZS5fZW5hYmxlQ2hhbmdlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3Jp
cHQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5nZXQgbGluZXND
b3VudCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0KToKKwogMjAxMC0wOS0wMiAgSWx5YSBTaGVy
bWFuICA8aXNoZXJtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNl
aWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggZWY2MmIzOC4uN2Q4ODk0OCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ29udGFp
bmVyTm9kZS5jcHAKQEAgLTEzNCw2ICsxMzQsOCBAQCBib29sIENvbnRhaW5lck5vZGU6Omluc2Vy
dEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZQog
ICAgICAgICBpZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIGJyZWFrOwogCisg
ICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKGNoaWxkLCB0aGlz
KTsKKwogICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24obmV4dC5nZXQoKSwgY2hpbGQpOwogCiAg
ICAgICAgIC8vIFNlbmQgbm90aWZpY2F0aW9uIGFib3V0IHRoZSBjaGlsZHJlbiBjaGFuZ2UuCkBA
IC0yMDEsNiArMjAzLDggQEAgdm9pZCBDb250YWluZXJOb2RlOjpwYXJzZXJJbnNlcnRCZWZvcmUo
UGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogbmV4dENoaWwKICAgICBmb3IgKE5vZGVW
ZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRz
LmVuZCgpOyArK2l0KSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgpOwogCisgICAg
ICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKGNoaWxkLCB0aGlzKTsK
KwogICAgICAgICBpbnNlcnRCZWZvcmVDb21tb24obmV4dC5nZXQoKSwgY2hpbGQpOwogCiAgICAg
ICAgIGNoaWxkcmVuQ2hhbmdlZCh0cnVlLCBuZXh0Q2hpbGRQcmV2aW91c1NpYmxpbmcuZ2V0KCks
IG5leHRDaGlsZCwgMSk7CkBAIC0yNzQsNiArMjc4LDggQEAgYm9vbCBDb250YWluZXJOb2RlOjpy
ZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4
Y2UKICAgICAgICAgQVNTRVJUKCFjaGlsZC0+bmV4dFNpYmxpbmcoKSk7CiAgICAgICAgIEFTU0VS
VCghY2hpbGQtPnByZXZpb3VzU2libGluZygpKTsKIAorICAgICAgICBJbnNwZWN0b3JDb250cm9s
bGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShjaGlsZC5nZXQoKSwgdGhpcyk7CisKICAgICAgICAgLy8g
QWRkIGNoaWxkIGFmdGVyICJwcmV2Ii4KICAgICAgICAgZm9yYmlkRXZlbnREaXNwYXRjaCgpOwog
ICAgICAgICBOb2RlKiBuZXh0OwpAQCAtNTU1LDYgKzU2MSw4IEBAIGJvb2wgQ29udGFpbmVyTm9k
ZTo6YXBwZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYg
ZWMsIGJvCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBJbnNw
ZWN0b3JDb250cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShjaGlsZCwgdGhpcyk7CisKICAgICAg
ICAgLy8gQXBwZW5kIGNoaWxkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKICAgICAgICAgZm9yYmlk
RXZlbnREaXNwYXRjaCgpOwogICAgICAgICBjaGlsZC0+c2V0UGFyZW50KHRoaXMpOwpAQCAtNTkz
LDYgKzYwMSw4IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQoUGFzc1JlZlB0
cjxOb2RlPiBuZXdDaGlsZCkKICAgICBBU1NFUlQobmV3Q2hpbGQpOwogICAgIEFTU0VSVCghbmV3
Q2hpbGQtPnBhcmVudCgpKTsgLy8gVXNlIGFwcGVuZENoaWxkIGlmIHlvdSBuZWVkIHRvIGhhbmRs
ZSByZXBhcmVudGluZyAoYW5kIHdhbnQgRE9NIG11dGF0aW9uIGV2ZW50cykuCiAKKyAgICBJbnNw
ZWN0b3JDb250cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShuZXdDaGlsZC5nZXQoKSwgdGhpcyk7
CisKICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7CiAgICAgTm9kZSogbGFzdCA9IG1fbGFzdENo
aWxkOwogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgdGFrZSBhIFBhc3NSZWZQdHIu
CkBAIC05NjQsMTIgKzk3NCw3IEBAIHN0YXRpYyB2b2lkIG5vdGlmeUNoaWxkSW5zZXJ0ZWQoTm9k
ZSogY2hpbGQpCiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwogCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9IGNoaWxkLT5kb2N1bWVu
dCgpLT5wYWdlKCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBp
bnNwZWN0b3JDb250cm9sbGVyLT5kaWRJbnNlcnRET01Ob2RlKGNoaWxkKTsKLSAgICB9Ci0jZW5k
aWYKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRJbnNlcnRET01Ob2RlKGNoaWxkKTsKIAog
ICAgIFJlZlB0cjxOb2RlPiBjID0gY2hpbGQ7CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVu
dCA9IGNoaWxkLT5kb2N1bWVudCgpOwpAQCAtMTAwMywxMiArMTAwOCw3IEBAIHN0YXRpYyB2b2lk
IGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKE5vZGUqIGNoaWxkKQogewogICAgIEFTU0VSVCgh
ZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1IpICAgIAot
ICAgIGlmIChQYWdlKiBwYWdlID0gY2hpbGQtPmRvY3VtZW50KCktPnBhZ2UoKSkgewotICAgICAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRp
ZFJlbW92ZURPTU5vZGUoY2hpbGQpOwotICAgIH0KLSNlbmRpZgorICAgIEluc3BlY3RvckNvbnRy
b2xsZXI6OndpbGxSZW1vdmVET01Ob2RlKGNoaWxkKTsKIAogICAgIFJlZlB0cjxOb2RlPiBjID0g
Y2hpbGQ7CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGNoaWxkLT5kb2N1bWVudCgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAppbmRleCAxODU1MTAxLi43Yzg4OGJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNTQwLDYgKzU0MCwx
MSBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1
dGUoKSkKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0dHIodGhp
cyk7CisjZW5kaWYKKwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7CiAKICAgICAv
LyBBbGxvY2F0ZSBhdHRyaWJ1dGUgbWFwIGlmIG5lY2Vzc2FyeS4KQEAgLTU2MywxNyArNTY4LDE4
IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKSB7Ci0gICAgICAgIGlm
IChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzU3luY2hyb25pemluZ1N0eWxl
QXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkTW9k
aWZ5RE9NQXR0cih0aGlzKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIWlzU3luY2hyb25p
emluZ1N0eWxlQXR0cmlidXRlKCkpCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZE1v
ZGlmeURPTUF0dHIodGhpcyk7CiAjZW5kaWYKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYpCiB7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoIWlzU3lu
Y2hyb25pemluZ1N0eWxlQXR0cmlidXRlKCkpCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6
OndpbGxNb2RpZnlET01BdHRyKHRoaXMpOworI2VuZGlmCisKICAgICBkb2N1bWVudCgpLT5pbmNE
T01UcmVlVmVyc2lvbigpOwogCiAgICAgLy8gQWxsb2NhdGUgYXR0cmlidXRlIG1hcCBpZiBuZWNl
c3NhcnkuCkBAIC01OTIsMTIgKzU5OCw4IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAg
fQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50
KCktPnBhZ2UoKSkgewotICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkgewotICAgICAgICAgICAg
aWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQotICAgICAgICAgICAgICAgIGlu
c3BlY3RvckNvbnRyb2xsZXItPmRpZE1vZGlmeURPTUF0dHIodGhpcyk7Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgaWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRNb2RpZnlET01BdHRyKHRoaXMpOwogI2VuZGlmCiB9CiAK
QEAgLTEyMjgsNiArMTIzMCw4IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluCiAKIHZvaWQgRWxl
bWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0dHIodGhpcyk7
CisKICAgICBTdHJpbmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlz
KSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7CiAKICAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKQEAg
LTEyMzYsMTMgKzEyNDAsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZShjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAgICAgZWMgPSAwOwogICAg
IH0KICAgICAKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChQYWdlKiBwYWdlID0gZG9j
dW1lbnQoKS0+cGFnZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICAg
ICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkTW9kaWZ5RE9NQXR0cih0aGlzKTsKLSAgICB9Ci0j
ZW5kaWYKLSAgICAKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRNb2RpZnlET01BdHRyKHRo
aXMpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0IFN0cmluZyYg
bmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCBmZjFjMmFmLi41YzEwN2VhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5pZGwKQEAgLTczLDcgKzczLDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBb
bm90aWZ5XSB2b2lkIGRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKICAgICAgICAgW25vdGlmeV0gdm9p
ZCBmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKG91dCBTdHJpbmcgdXJsLCBvdXQgU3RyaW5nIGRh
dGEsIG91dCBpbnQgZmlyc3RMaW5lLCBvdXQgaW50IGVycm9yTGluZSwgb3V0IFN0cmluZyBlcnJv
ck1lc3NhZ2UpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHBhcnNlZFNjcmlwdFNvdXJjZShvdXQg
U3RyaW5nIHNvdXJjZUlELCBvdXQgU3RyaW5nIHVybCwgb3V0IFN0cmluZyBkYXRhLCBvdXQgaW50
IGZpcnN0TGluZSwgb3V0IGludCBzY3JpcHRXb3JsZFR5cGUpOwotICAgICAgICBbbm90aWZ5XSB2
b2lkIHBhdXNlZFNjcmlwdChvdXQgVmFsdWUgY2FsbEZyYW1lcyk7CisgICAgICAgIFtub3RpZnld
IHZvaWQgcGF1c2VkU2NyaXB0KG91dCBPYmplY3QgZGV0YWlscyk7CiAgICAgICAgIFtub3RpZnld
IHZvaWQgcHJvZmlsZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgcHJvZmls
ZXJXYXNEaXNhYmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHJlc3RvcmVkQnJlYWtwb2lu
dChvdXQgU3RyaW5nIHNvdXJjZUlELCBvdXQgU3RyaW5nIHVybCwgb3V0IGludCBsaW5lLCBvdXQg
Ym9vbGVhbiBlbmFibGVkLCBvdXQgU3RyaW5nIGNvbmRpdGlvbik7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDdmYjA1MmMuLjRhZjM3ZjIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01OSwxMSArNTksMTIgQEAK
ICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckNTU1N0b3JlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAi
SW5zcGVjdG9yRnJvbnRlbmQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5o
IgorI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9N
U3RvcmFnZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291
cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RvcmFnZUFnZW50LmgiCkBAIC0xODQzLDYgKzE4
NDQsNTggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxvYWRQYWdlKCkKICAgICBtX2lu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZVJl
ZnJlc2godHJ1ZSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbEluc2VydERP
TU5vZGVJbXBsKE5vZGUqIG5vZGUsIE5vZGUqIHBhcmVudCkKK3sKKyNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKKyAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCB8fCAhbV9kb21BZ2VudCkK
KyAgICAgICAgcmV0dXJuOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRldGFpbHM7
CisgICAgaWYgKG1fZG9tQWdlbnQtPnNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKG5vZGUsIHBh
cmVudCwgJmRldGFpbHMpKQorICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShk
ZXRhaWxzKTsKKyNlbmRpZgorfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEluc2Vy
dERPTU5vZGVJbXBsKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG1fZG9tQWdlbnQpCisgICAgICAg
IG1fZG9tQWdlbnQtPmRpZEluc2VydERPTU5vZGUobm9kZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6d2lsbFJlbW92ZURPTU5vZGVJbXBsKE5vZGUqIG5vZGUpCit7CisjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQgfHwgIW1f
ZG9tQWdlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBkZXRhaWxzOworICAgIGlmIChtX2RvbUFnZW50LT5zaG91bGRCcmVha09uTm9kZVJlbW92YWwo
bm9kZSwgJmRldGFpbHMpKQorICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShk
ZXRhaWxzKTsKKyNlbmRpZgorfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlbW92
ZURPTU5vZGVJbXBsKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG1fZG9tQWdlbnQpCisgICAgICAg
IG1fZG9tQWdlbnQtPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0dHJJbXBsKEVsZW1lbnQqIGVsZW1lbnQpCit7Cisj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQg
fHwgIW1fZG9tQWdlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBkZXRhaWxzOworICAgIGlmIChtX2RvbUFnZW50LT5zaG91bGRCcmVha09uQXR0cmli
dXRlTW9kaWZpY2F0aW9uKGVsZW1lbnQsICZkZXRhaWxzKSkKKyAgICAgICAgbV9kZWJ1Z2dlckFn
ZW50LT5icmVha1Byb2dyYW0oZGV0YWlscyk7CisjZW5kaWYKK30KKwordm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRNb2RpZnlET01BdHRySW1wbChFbGVtZW50KiBlbGVtZW50KQoreworICAg
IGlmIChtX2RvbUFnZW50KQorICAgICAgICBtX2RvbUFnZW50LT5kaWRNb2RpZnlET01BdHRyKGVs
ZW1lbnQpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXgg
N2VkMjU0OS4uYzBkZmVjMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aApAQCAtMzEsNyArMzEsOCBAQAogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkNv
b2tpZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTU4LDYg
KzU5LDcgQEAgY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yQ1NTU3Rv
cmU7CitjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VS
ZXNvdXJjZTsKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OwpAQCAtMTgzLDkgKzE4NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBt
YWluUmVzb3VyY2VGaXJlZExvYWRFdmVudChEb2N1bWVudExvYWRlciosIGNvbnN0IEtVUkwmKTsK
ICAgICB2b2lkIG1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KERvY3VtZW50TG9hZGVy
KiwgY29uc3QgS1VSTCYpOwogCi0gICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUqKTsKLSAg
ICB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9kZSopOwotICAgIHZvaWQgZGlkTW9kaWZ5RE9NQXR0
cihFbGVtZW50Kik7CisgICAgc3RhdGljIHZvaWQgd2lsbEluc2VydERPTU5vZGUoTm9kZSogbm9k
ZSwgTm9kZSogcGFyZW50KTsKKyAgICBzdGF0aWMgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUq
KTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsUmVtb3ZlRE9NTm9kZShOb2RlKik7CisgICAgc3RhdGlj
IHZvaWQgd2lsbE1vZGlmeURPTUF0dHIoRWxlbWVudCopOworICAgIHN0YXRpYyB2b2lkIGRpZE1v
ZGlmeURPTUF0dHIoRWxlbWVudCopOworCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgZW51bSBX
b3JrZXJBY3Rpb24geyBXb3JrZXJDcmVhdGVkLCBXb3JrZXJEZXN0cm95ZWQgfTsKIApAQCAtMzA2
LDYgKzMxMSwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRFdmFsdWF0ZUZvclRlc3RJbkZy
b250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpOwogCisgICAgc3Rh
dGljIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXJGb3JOb2RlKE5vZGUq
KTsKKyAgICB2b2lkIHdpbGxJbnNlcnRET01Ob2RlSW1wbChOb2RlKiBub2RlLCBOb2RlKiBwYXJl
bnQpOworICAgIHZvaWQgZGlkSW5zZXJ0RE9NTm9kZUltcGwoTm9kZSopOworICAgIHZvaWQgd2ls
bFJlbW92ZURPTU5vZGVJbXBsKE5vZGUqKTsKKyAgICB2b2lkIGRpZFJlbW92ZURPTU5vZGVJbXBs
KE5vZGUqKTsKKyAgICB2b2lkIHdpbGxNb2RpZnlET01BdHRySW1wbChFbGVtZW50Kik7CisgICAg
dm9pZCBkaWRNb2RpZnlET01BdHRySW1wbChFbGVtZW50Kik7CisKICNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDsK
ICAgICBTdHJpbmcgYnJlYWtwb2ludHNTZXR0aW5nS2V5KCk7CkBAIC0zNzYsMzAgKzM4OSw1OSBA
QCBwcml2YXRlOgogI2VuZGlmCiB9OwogCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
Ojp3aWxsSW5zZXJ0RE9NTm9kZShOb2RlKiBub2RlLCBOb2RlKiBwYXJlbnQpCit7CisjaWYgRU5B
QkxFKElOU1BFQ1RPUikKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29u
dHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJGb3JOb2RlKG5vZGUpKQorICAgICAgICBpbnNw
ZWN0b3JDb250cm9sbGVyLT53aWxsSW5zZXJ0RE9NTm9kZUltcGwobm9kZSwgcGFyZW50KTsKKyNl
bmRpZgorfQorCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRJbnNlcnRET01O
b2RlKE5vZGUqIG5vZGUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAobV9kb21B
Z2VudCkKLSAgICAgICAgbV9kb21BZ2VudC0+ZGlkSW5zZXJ0RE9NTm9kZShub2RlKTsKKyAgICBp
ZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNv
bnRyb2xsZXJGb3JOb2RlKG5vZGUpKQorICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5kaWRJ
bnNlcnRET01Ob2RlSW1wbChub2RlKTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCitpbmxpbmUgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjp3aWxsUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogewogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fZG9tQWdlbnQpCi0gICAgICAgIG1fZG9tQWdl
bnQtPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7CisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yTm9kZShub2RlKSkg
eworICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT53aWxsUmVtb3ZlRE9NTm9kZUltcGwobm9k
ZSk7CisgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZFJlbW92ZURPTU5vZGVJbXBsKG5v
ZGUpOworICAgIH0KKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
Ojp3aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQoreworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIg
PSBpbnNwZWN0b3JDb250cm9sbGVyRm9yTm9kZShlbGVtZW50KSkKKyAgICAgICAgaW5zcGVjdG9y
Q29udHJvbGxlci0+d2lsbE1vZGlmeURPTUF0dHJJbXBsKGVsZW1lbnQpOwogI2VuZGlmCiB9CiAK
IGlubGluZSB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVu
dCogZWxlbWVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChtX2RvbUFnZW50
KQotICAgICAgICBtX2RvbUFnZW50LT5kaWRNb2RpZnlET01BdHRyKGVsZW1lbnQpOworICAgIGlm
IChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29u
dHJvbGxlckZvck5vZGUoZWxlbWVudCkpCisgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRp
ZE1vZGlmeURPTUF0dHJJbXBsKGVsZW1lbnQpOwogI2VuZGlmCiB9CiAKK2lubGluZSBJbnNwZWN0
b3JDb250cm9sbGVyKiBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JDb250cm9sbGVyRm9y
Tm9kZShOb2RlKiBub2RlKQoreworICAgIGlmIChQYWdlKiBwYWdlID0gbm9kZS0+ZG9jdW1lbnQo
KS0+cGFnZSgpKSB7CisgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKSB7CisgICAgICAgICAgICBp
ZiAoaW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRnJvbnRlbmQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
MDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yQ29udHJvbGxlcl9oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CmluZGV4IGQyNzYwZTQuLjIzYzIyYWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKQEAgLTY0LDcgKzY0LDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMu
aCIKLSNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50
TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRleHQu
aCIKQEAgLTIxMCw4ICsyMDksNiBAQCBjb25zdCBpbnQgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBl
U2hpZnQgPSAxNjsKIAogfQogCi1JbnNwZWN0b3JET01BZ2VudCogSW5zcGVjdG9yRE9NQWdlbnQ6
OnNfZG9tQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwotCiBJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVj
dG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpCiAgICAgOiBFdmVudExpc3RlbmVyKEluc3BlY3RvckRPTUFnZW50VHlwZSkK
ICAgICAsIG1fY3NzU3RvcmUoY3NzU3RvcmUpCkBAIC0yMjQsOSArMjIxLDYgQEAgSW5zcGVjdG9y
RE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3BlY3RvckNTU1N0b3JlKiBjc3NTdG9yZSwg
SW5zcGVjdG9yRnJvbnQKIEluc3BlY3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQoKQog
ewogICAgIHJlc2V0KCk7Ci0KLSAgICBpZiAodGhpcyA9PSBzX2RvbUFnZW50T25CcmVha3BvaW50
KQotICAgICAgICBzX2RvbUFnZW50T25CcmVha3BvaW50ID0gMDsKIH0KIAogdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cmVzZXQoKQpAQCAtNzgwLDYgKzc3NCw0MiBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpCiAgICAg
fQogfQogCitib29sIEluc3BlY3RvckRPTUFnZW50OjpzaG91bGRCcmVha09uTm9kZUluc2VydGlv
bihOb2RlKiwgTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiogZGV0YWls
cykKK3sKKyAgICBpZiAoIWhhc0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWls
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZGV0YWlsc09iamVjdC0+
c2V0T2JqZWN0KCJicmVha3BvaW50IiwgY3JlYXRlQnJlYWtwb2ludChwYXJlbnQsIFN1YnRyZWVN
b2RpZmllZCkpOworICAgICpkZXRhaWxzID0gZGV0YWlsc09iamVjdDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6c2hvdWxkQnJlYWtPbk5vZGVSZW1vdmFs
KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBkZXRhaWxzKQoreworICAg
IGJvb2wgaGFzTm9kZVJlbW92ZWRCcmVha3BvaW50ID0gaGFzQnJlYWtwb2ludChub2RlLCBOb2Rl
UmVtb3ZlZCk7CisgICAgYm9vbCBoYXNBbnlCcmVha3BvaW50ID0gaGFzTm9kZVJlbW92ZWRCcmVh
a3BvaW50IHx8IGhhc0JyZWFrcG9pbnQoaW5uZXJQYXJlbnROb2RlKG5vZGUpLCBTdWJ0cmVlTW9k
aWZpZWQpOworICAgIGlmICghaGFzQW55QnJlYWtwb2ludCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlsc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGhhc05vZGVSZW1vdmVkQnJlYWtwb2ludCkKKyAg
ICAgICAgZGV0YWlsc09iamVjdC0+c2V0T2JqZWN0KCJicmVha3BvaW50IiwgY3JlYXRlQnJlYWtw
b2ludChub2RlLCBOb2RlUmVtb3ZlZCkpOworICAgIGVsc2UKKyAgICAgICAgZGV0YWlsc09iamVj
dC0+c2V0T2JqZWN0KCJicmVha3BvaW50IiwgY3JlYXRlQnJlYWtwb2ludChpbm5lclBhcmVudE5v
ZGUobm9kZSksIFN1YnRyZWVNb2RpZmllZCkpOworICAgICpkZXRhaWxzID0gZGV0YWlsc09iamVj
dDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6c2hvdWxk
QnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiogZGV0YWlscykKK3sKKyAgICBpZiAoIWhhc0JyZWFrcG9pbnQoZWxl
bWVudCwgQXR0cmlidXRlTW9kaWZpZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlsc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgZGV0YWlsc09iamVjdC0+c2V0T2JqZWN0KCJicmVha3BvaW50IiwgY3JlYXRl
QnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpOworICAgICpkZXRhaWxzID0g
ZGV0YWlsc09iamVjdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogU3RyaW5nIEluc3BlY3RvckRP
TUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0CiB7CiAg
ICAgaWYgKCFkb2N1bWVudCB8fCBkb2N1bWVudC0+dXJsKCkuaXNOdWxsKCkpCkBAIC05ODUsMTIg
KzEwMTUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKE5vZGUq
IG5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2JyZWFrcG9pbnRzLnNpemUoKSkg
ewotICAgICAgICBOb2RlKiBwYXJlbnQgPSBpbm5lclBhcmVudE5vZGUobm9kZSk7Ci0gICAgICAg
IGlmIChoYXNCcmVha3BvaW50KHBhcmVudCwgU3VidHJlZU1vZGlmaWVkKSkgewotICAgICAgICAg
ICAgaWYgKCFwYXVzZU9uQnJlYWtwb2ludCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICB1aW50MzJfdCBtYXNrID0gbV9icmVha3BvaW50cy5nZXQocGFyZW50
KTsKKyAgICAgICAgdWludDMyX3QgbWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KGlubmVyUGFyZW50
Tm9kZShub2RlKSk7CiAgICAgICAgIHVpbnQzMl90IGluaGVyaXRhYmxlVHlwZXNNYXNrID0gKG1h
c2sgfCAobWFzayA+PiBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCkpICYgaW5oZXJpdGFi
bGVET01CcmVha3BvaW50VHlwZXNNYXNrOwogICAgICAgICBpZiAoaW5oZXJpdGFibGVUeXBlc01h
c2spCiAgICAgICAgICAgICB1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMobm9kZSwgaW5oZXJpdGFi
bGVUeXBlc01hc2ssIHRydWUpOwpAQCAtMTAyMywxMCArMTA0OCw2IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKG1fYnJlYWtwb2ludHMuc2l6ZSgpKSB7Ci0gICAgICAgIGlmIChoYXNCcmVha3Bv
aW50KG5vZGUsIE5vZGVSZW1vdmVkKSB8fCBoYXNCcmVha3BvaW50KGlubmVyUGFyZW50Tm9kZShu
b2RlKSwgU3VidHJlZU1vZGlmaWVkKSkgewotICAgICAgICAgICAgaWYgKCFwYXVzZU9uQnJlYWtw
b2ludCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAgICAvLyBS
ZW1vdmUgc3VidHJlZSBicmVha3BvaW50cy4KICAgICAgICAgbV9icmVha3BvaW50cy5yZW1vdmUo
bm9kZSk7CiAgICAgICAgIFZlY3RvcjxOb2RlKj4gc3RhY2soMSwgaW5uZXJGaXJzdENoaWxkKG5v
ZGUpKTsKQEAgLTEwNjMsMTIgKzEwODQsMjQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlk
TW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogICAgIGlmICghaWQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChoYXNCcmVha3BvaW50KGVsZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVk
KSkgewotICAgICAgICBpZiAoIXBhdXNlT25CcmVha3BvaW50KCkpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgbV9mcm9udGVuZC0+YXR0cmlidXRlc1VwZGF0ZWQoaWQsIGJ1aWxkQXJyYXlGb3JF
bGVtZW50QXR0cmlidXRlcyhlbGVtZW50KSk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlQnJlYWtwb2ludChOb2RlKiBub2RlLCBsb25n
IHR5cGUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisKKyAgICAvLyBGaW5kIGJyZWFrcG9pbnQgb3duZXIuCisg
ICAgd2hpbGUgKCEobV9icmVha3BvaW50cy5nZXQobm9kZSkgJiAoMSA8PCB0eXBlKSkpIHsKKyAg
ICAgICAgbm9kZSA9IGlubmVyUGFyZW50Tm9kZShub2RlKTsKKyAgICAgICAgQVNTRVJUKG5vZGUp
OwogICAgIH0KKyAgICBsb25nIG5vZGVJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9k
ZSk7CisgICAgQVNTRVJUKG5vZGVJZCk7CiAKLSAgICBtX2Zyb250ZW5kLT5hdHRyaWJ1dGVzVXBk
YXRlZChpZCwgYnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpKTsKKyAgICBi
cmVha3BvaW50LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CisgICAgYnJlYWtwb2ludC0+
c2V0TnVtYmVyKCJ0eXBlIiwgdHlwZSk7CisgICAgcmV0dXJuIGJyZWFrcG9pbnQucmVsZWFzZSgp
OwogfQogCiBib29sIEluc3BlY3RvckRPTUFnZW50OjpoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUs
IGxvbmcgdHlwZSkKQEAgLTEwNzgsMTkgKzExMTEsNiBAQCBib29sIEluc3BlY3RvckRPTUFnZW50
OjpoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUsIGxvbmcgdHlwZSkKICAgICByZXR1cm4gbV9icmVh
a3BvaW50cy5nZXQobm9kZSkgJiAocm9vdEJpdCB8IGRlcml2ZWRCaXQpOwogfQogCi1ib29sIElu
c3BlY3RvckRPTUFnZW50OjpwYXVzZU9uQnJlYWtwb2ludCgpCi17Ci0jaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCi0gICAgc19kb21BZ2VudE9uQnJlYWtwb2ludCA9IHRoaXM7Ci0gICAg
U2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmJyZWFrUHJvZ3JhbSgpOwotICAgIGJvb2wgZGVs
ZXRlZCA9ICFzX2RvbUFnZW50T25CcmVha3BvaW50OwotICAgIHNfZG9tQWdlbnRPbkJyZWFrcG9p
bnQgPSAwOwotICAgIHJldHVybiAhZGVsZXRlZDsKLSNlbHNlCi0gICAgcmV0dXJuIHRydWU7Ci0j
ZW5kaWYKLX0KLQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dXBkYXRlU3VidHJlZUJyZWFrcG9p
bnRzKE5vZGUqIG5vZGUsIHVpbnQzMl90IHJvb3RNYXNrLCBib29sIHNldCkKIHsKICAgICB1aW50
MzJfdCBvbGRNYXNrID0gbV9icmVha3BvaW50cy5nZXQobm9kZSk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaAppbmRleCBmZDNjNWI1Li45NzUxZThlIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJJbnNwZWN0
b3JDU1NTdG9yZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgog
CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC0xMTQsNiArMTEzLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7CiAgICAgICAgIHZvaWQgc2V0
RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKICAgICAgICAgdm9pZCByZW1v
dmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOworICAgICAgICBib29sIHNo
b3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKE5vZGUqIG5vZGUsIE5vZGUqIHBhcmVudCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIGRldGFpbHMpOworICAgICAgICBib29sIHNob3VsZEJyZWFr
T25Ob2RlUmVtb3ZhbChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiogZGV0
YWlscyk7CisgICAgICAgIGJvb2wgc2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihF
bGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiogZGV0YWlscyk7CiAK
ICAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQgZm9yIENTUyBzdHls
ZXMgaW5zcGVjdGlvbi4KICAgICAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBub2RlSWQsIGJvb2wg
YXV0aG9yT25seSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVzKTsKQEAgLTE2MCw3ICsx
NjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcHVzaERvY3VtZW50VG9G
cm9udGVuZCgpOwogCiAgICAgICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2RlKiBub2RlLCBsb25n
IHR5cGUpOwotICAgICAgICBib29sIHBhdXNlT25CcmVha3BvaW50KCk7CisgICAgICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVCcmVha3BvaW50KE5vZGUqIG5vZGUsIGxvbmcg
dHlwZSk7CiAgICAgICAgIHZvaWQgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUqIHJvb3Qs
IHVpbnQzMl90IHJvb3RNYXNrLCBib29sIHZhbHVlKTsKIAogICAgICAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVudCogZWxl
bWVudCk7CkBAIC0yMTcsOCArMjE5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBI
YXNoU2V0PFJlZlB0cjxOb2RlPiA+IG1fc2VhcmNoUmVzdWx0czsKICAgICAgICAgVmVjdG9yPGxv
bmc+IG1faW5zcGVjdGVkTm9kZXM7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVpbnQzMl90PiBt
X2JyZWFrcG9pbnRzOwotCi0gICAgICAgIHN0YXRpYyBJbnNwZWN0b3JET01BZ2VudCogc19kb21B
Z2VudE9uQnJlYWtwb2ludDsKICAgICB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMzU3YTA0My4uZmQ5ZmRmMyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTU2LDExICs1
NiwxNCBAQCBQYXNzT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JDb250cgogICAgIHJldHVybiBhZ2VudC5yZWxlYXNl
KCk7CiB9CiAKK0luc3BlY3RvckRlYnVnZ2VyQWdlbnQqIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCA9IDA7CisKIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlciwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAgIDogbV9pbnNwZWN0
b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCiAgICAgLCBtX2Zyb250ZW5kKGZyb250
ZW5kKQogICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQogICAgICwgbV9icmVha3BvaW50c0xv
YWRlZChmYWxzZSkKKyAgICAsIG1fYnJlYWtQcm9ncmFtUmVhc29uKEluc3BlY3RvclZhbHVlOjpu
dWxsKCkpCiB7CiB9CiAKQEAgLTY4LDYgKzcxLDkgQEAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
fkluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKQogewogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKS5yZW1vdmVMaXN0ZW5lcih0aGlzLCBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3Rl
ZFBhZ2UoKSk7CiAgICAgbV9wYXVzZWRTY3JpcHRTdGF0ZSA9IDA7CisKKyAgICBpZiAodGhpcyA9
PSBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQpCisgICAgICAgIHNfZGVidWdnZXJBZ2VudE9u
QnJlYWtwb2ludCA9IDA7CiB9CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aXNEZWJ1
Z2dlckFsd2F5c0VuYWJsZWQoKQpAQCAtMjgyLDkgKzI4OCwxMiBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZwogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUpCiB7CiAgICAgQVNTRVJUKHNjcmlwdFN0YXRlICYmICFtX3BhdXNlZFNj
cmlwdFN0YXRlKTsKKyAgICBBU1NFUlQobV9icmVha1Byb2dyYW1SZWFzb24pOwogICAgIG1fcGF1
c2VkU2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGNhbGxGcmFtZXMgPSBjdXJyZW50Q2FsbEZyYW1lcygpOwotICAgIG1fZnJvbnRlbmQtPnBhdXNl
ZFNjcmlwdChjYWxsRnJhbWVzLmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBk
ZXRhaWxzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBkZXRhaWxzLT5zZXRWYWx1
ZSgiY2FsbEZyYW1lcyIsIGN1cnJlbnRDYWxsRnJhbWVzKCkpOworICAgIGRldGFpbHMtPnNldFZh
bHVlKCJyZWFzb24iLCBtX2JyZWFrUHJvZ3JhbVJlYXNvbik7CisgICAgbV9mcm9udGVuZC0+cGF1
c2VkU2NyaXB0KGRldGFpbHMpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRp
ZENvbnRpbnVlKCkKQEAgLTI5Myw2ICszMDIsMTkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9mcm9udGVuZC0+cmVzdW1lZFNjcmlwdCgpOwogfQog
Cit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiByZWFzb24pCit7CisgICAgc19kZWJ1Z2dlckFnZW50T25CcmVha3BvaW50
ID0gdGhpczsKKyAgICBtX2JyZWFrUHJvZ3JhbVJlYXNvbiA9IHJlYXNvbjsKKworICAgIFNjcmlw
dERlYnVnU2VydmVyOjpzaGFyZWQoKS5icmVha1Byb2dyYW0oKTsKKyAgICBpZiAoIXNfZGVidWdn
ZXJBZ2VudE9uQnJlYWtwb2ludCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc19kZWJ1Z2dlckFn
ZW50T25CcmVha3BvaW50ID0gMDsKKyAgICBtX2JyZWFrUHJvZ3JhbVJlYXNvbiA9IEluc3BlY3Rv
clZhbHVlOjpudWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5oCmluZGV4IDkxYmNkNDkuLjc5YjBhMGUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgZ2V0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0cmluZyog
c2NyaXB0U291cmNlKTsKIAogICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIGJyZWFrUHJvZ3Jh
bShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZWFzb24pOwogICAgIHZvaWQgcmVzdW1lKCk7
CiAgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudCgpOwogICAgIHZvaWQgc3RlcEludG9TdGF0ZW1l
bnQoKTsKQEAgLTkzLDYgKzk0LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgU291
cmNlQnJlYWtwb2ludHM+IG1fc3RpY2t5QnJlYWtwb2ludHM7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IHVuc2lnbmVkPiBtX2JyZWFrcG9pbnRzTWFwcGluZzsKICAgICBib29sIG1fYnJlYWtwb2ludHNM
b2FkZWQ7CisgICAgc3RhdGljIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIHNfZGVidWdnZXJBZ2Vu
dE9uQnJlYWtwb2ludDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1fYnJlYWtQcm9ncmFt
UmVhc29uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaAppbmRleCAzZGQ5NTk0Li40MDM2ZjU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaApAQCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAKICAgICBUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlID09IFR5cGVOdWxsOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgYXNCb29sZWFuKGJv
b2wqIG91dHB1dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKGRvdWJsZSogb3V0
cHV0KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIobG9uZyogb3V0cHV0KSBjb25z
dDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1Np
ZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lk
ZWJhclBhbmUuanMKaW5kZXggM2EwODYwZi4uMjliZTY0NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKQEAgLTEwNiw3
ICsxMDYsNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEl0ZW0gPSBmdW5jdGlvbihicmVha3Bv
aW50KQogICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hlY2tib3hFbGVtZW50KTsKIAog
ICAgIHRoaXMuX2JyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiZW5hYmxlLWNoYW5nZWQiLCB0
aGlzLl9lbmFibGVDaGFuZ2VkLCB0aGlzKTsKLSAgICB0aGlzLl9icmVha3BvaW50LmFkZEV2ZW50
TGlzdGVuZXIoInJlbW92ZWQiLCB0aGlzLl9yZW1vdmVkLCB0aGlzKTsKKyAgICB0aGlzLl9icmVh
a3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoInJlbW92ZWQiLCB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycy5iaW5kKHRoaXMsICJyZW1vdmVkIikpOwogfQogCiBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludEl0ZW0ucHJvdG90eXBlID0gewpAQCAtMTI4LDE1ICsxMjgsMTAgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRJdGVtLnByb3RvdHlwZSA9IHsKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKCk7CiAgICAgfSwKIAotICAgIF9lbmFibGVDaGFuZ2VkOiBmdW5jdGlvbigpCisgICAgX2Vu
YWJsZUNoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGNoZWNrYm94
ID0gdGhpcy5fZWxlbWVudC5maXJzdENoaWxkOwogICAgICAgICBjaGVja2JveC5jaGVja2VkID0g
dGhpcy5fYnJlYWtwb2ludC5lbmFibGVkOwotICAgIH0sCi0KLSAgICBfcmVtb3ZlZDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInJlbW92
ZWQiKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzCmluZGV4
IDQyZDY4NTAuLmJlM2YwMjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdC5qcwpA
QCAtNjIsMTEgKzYyLDE0IEBAIFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlID0gewogICAg
IHsKICAgICAgICAgaWYgKCF0aGlzLnNvdXJjZSkKICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBpZiAodGhpcy5fbGluZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9saW5l
c0NvdW50OwogICAgICAgICB0aGlzLl9saW5lc0NvdW50ID0gMDsKICAgICAgICAgdmFyIGxhc3RJ
bmRleCA9IHRoaXMuc291cmNlLmluZGV4T2YoIlxuIik7CiAgICAgICAgIHdoaWxlIChsYXN0SW5k
ZXggIT09IC0xKSB7CiAgICAgICAgICAgICBsYXN0SW5kZXggPSB0aGlzLnNvdXJjZS5pbmRleE9m
KCJcbiIsIGxhc3RJbmRleCArIDEpCiAgICAgICAgICAgICB0aGlzLl9saW5lc0NvdW50Kys7CiAg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmVzQ291bnQ7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggMGJmZjMzNS4uMjQxYTlm
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0xNDQ1LDkg
KzE0NDUsOSBAQCBXZWJJbnNwZWN0b3IuZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSA9IGZ1bmN0
aW9uKHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbgogICAgIHRoaXMucGFuZWxzLnNjcmlw
dHMuYWRkU2NyaXB0KG51bGwsIHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUsIGVycm9y
TGluZSwgZXJyb3JNZXNzYWdlKTsKIH0KIAotV2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlwdCA9IGZ1
bmN0aW9uKGNhbGxGcmFtZXMpCitXZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24o
ZGV0YWlscykKIHsKLSAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmRlYnVnZ2VyUGF1c2VkKGNhbGxG
cmFtZXMpOworICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuZGVidWdnZXJQYXVzZWQoZGV0YWlscy5j
YWxsRnJhbWVzKTsKICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdUb0Zyb250KCk7CiB9
CiAK
</data>
<flag name="review"
          id="55348"
          type_id="1"
          status="+"
          setter="yurys"
    />
    <flag name="commit-queue"
          id="55349"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66379</attachid>
            <date>2010-09-02 09:40:11 -0700</date>
            <delta_ts>2010-09-03 05:49:09 -0700</delta_ts>
            <desc>Fix crash</desc>
            <filename>break_details.patch</filename>
            <type>text/plain</type>
            <size>32727</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyYThiZGExLi4zYTFjN2VmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDkt
MDIgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHJv
dmlkZSBtb3JlIGluZm9ybWF0aW9uIHRvIGZyb250LWVuZCB3aGVuIGJyZWFraW5nIG9uIERPTSBl
dmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ2
NzkKKworICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzOgor
ICAgICAgICAoaW5pdGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5fcGF1c2VkU2Ny
aXB0KToKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdDIuanM6
CisgICAgICAgIChpbml0aWFsaXplX0luc3BlY3RvclRlc3QuSW5zcGVjdG9yVGVzdC5hZGRPYmpl
Y3RSZXN1bHQpOgorICAgICAgICAqIGluc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0
bWw6CisKIDIwMTAtMDktMDEgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdDIuanMgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10ZXN0Mi5qcwppbmRleCA4MGI5OGE2Li42YzE5
ZmY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci10ZXN0Mi5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci10ZXN0Mi5qcwpAQCAtODksMTAgKzg5LDEwIEBAIEluc3BlY3RvclRlc3QuY2FwdHVyZVN0YWNr
VHJhY2UgPSBmdW5jdGlvbihjYWxsRnJhbWVzKQogICAgIH0KIH07CiAKLUluc3BlY3RvclRlc3Qu
X3BhdXNlZFNjcmlwdCA9IGZ1bmN0aW9uKGNhbGxGcmFtZXMpCitJbnNwZWN0b3JUZXN0Ll9wYXVz
ZWRTY3JpcHQgPSBmdW5jdGlvbihkZXRhaWxzKQogewogICAgIEluc3BlY3RvclRlc3QuYWRkUmVz
dWx0KCJTY3JpcHQgZXhlY3V0aW9uIHBhdXNlZC4iKTsKLSAgICBJbnNwZWN0b3JUZXN0Ll9jYWxs
RnJhbWVzID0gY2FsbEZyYW1lczsKKyAgICBJbnNwZWN0b3JUZXN0Ll9jYWxsRnJhbWVzID0gZGV0
YWlscy5jYWxsRnJhbWVzOwogICAgIGlmIChJbnNwZWN0b3JUZXN0Ll93YWl0VW50aWxQYXVzZWRD
YWxsYmFjaykgewogICAgICAgICB2YXIgY2FsbGJhY2sgPSBJbnNwZWN0b3JUZXN0Ll93YWl0VW50
aWxQYXVzZWRDYWxsYmFjazsKICAgICAgICAgZGVsZXRlIEluc3BlY3RvclRlc3QuX3dhaXRVbnRp
bFBhdXNlZENhbGxiYWNrOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvaW5zcGVjdG9yLXRlc3QyLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3IvaW5zcGVjdG9yLXRlc3QyLmpzCmluZGV4IGVhMmMyYzAuLjViNTg1MjggMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Mi5qcworKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdDIuanMKQEAg
LTQ0LDcgKzQ0LDcgQEAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQgPSBmdW5jdGlvbih0ZXh0KQog
ICAgIH0KIH07CiAKLUluc3BlY3RvclRlc3QuYWRkT2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0LCBu
b25kZXRlcm1pbmlzdGljUHJvcHMsIHByZWZpeCwgZmlyc3RMaW5lUHJlZml4KQorSW5zcGVjdG9y
VGVzdC5hZGRPYmplY3RSZXN1bHQgPSBmdW5jdGlvbihvYmplY3QsIG5vbmRldGVybWluaXN0aWNQ
cm9wcywgcHJlZml4LCBmaXJzdExpbmVQcmVmaXgpCiB7CiAgICAgcHJlZml4ID0gcHJlZml4IHx8
ICIiOwogICAgIGZpcnN0TGluZVByZWZpeCA9IGZpcnN0TGluZVByZWZpeCB8fCBwcmVmaXg7CkBA
IC01Nyw3ICs1Nyw3IEBAIEluc3BlY3RvclRlc3QuYWRkT2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0
LCBub25kZXRlcm1pbmlzdGljUHJvcHMsIHByZWZpeCwgZmlyc3RMCiAgICAgICAgIGlmIChub25k
ZXRlcm1pbmlzdGljUHJvcHMgJiYgcHJvcCBpbiBub25kZXRlcm1pbmlzdGljUHJvcHMpCiAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdChwcmVmaXhXaXRoTmFtZSArICI8IiArIHR5
cGVvZiBwcm9wVmFsdWUgKyAiPiIpOwogICAgICAgICBlbHNlIGlmICh0eXBlb2YgcHJvcFZhbHVl
ID09PSAib2JqZWN0IikKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkT2JqZWN0KHByb3BW
YWx1ZSwgbm9uZGV0ZXJtaW5pc3RpY1Byb3BzLCBwcmVmaXggKyAiICAgICIsIHByZWZpeFdpdGhO
YW1lKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkT2JqZWN0UmVzdWx0KHByb3BWYWx1
ZSwgbm9uZGV0ZXJtaW5pc3RpY1Byb3BzLCBwcmVmaXggKyAiICAgICIsIHByZWZpeFdpdGhOYW1l
KTsKICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gInN0cmluZyIpCiAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdChwcmVmaXhXaXRoTmFtZSArICJcIiIgKyBw
cm9wVmFsdWUgKyAiXCIiKTsKICAgICAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbCBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0bWwKaW5kZXggY2Q3YmE1Yy4uZTBhMDJjYSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy5o
dG1sCkBAIC0yNSw3ICsyNSw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIFdlYkluc3BlY3Rvci5y
ZXBvcnRQcm90b2NvbEVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkKICAgICB7CiAgICAgICAgIGlm
IChudW1iZXJPZlJlcG9ydHMgPCBtZXNzYWdlcy5sZW5ndGgpCi0gICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZE9iamVjdChtZXNzYWdlKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRk
T2JqZWN0UmVzdWx0KG1lc3NhZ2UpOwogCiAgICAgICAgIGlmICgrK251bWJlck9mUmVwb3J0cyA9
PT0gbWVzc2FnZXMubGVuZ3RoKQogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRl
c3QoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggNDU0ZDkxYS4uMTc5YmU0ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxMC0wOS0wMiAgUGF2ZWwg
UG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIG1vcmUg
aW5mb3JtYXRpb24gdG8gZnJvbnQtZW5kIHdoZW4gYnJlYWtpbmcgb24gRE9NIGV2ZW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDY3OQorCisgICAg
ICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVy
Tm9kZTo6aW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OnBh
cnNlckluc2VydEJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZXBs
YWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6YXBwZW5kQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6bm90aWZ5Q2hpbGRJbnNlcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpk
aXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbEluc2VydERPTU5vZGVJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEluc2VydERP
TU5vZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxS
ZW1vdmVET01Ob2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRSZW1vdmVET01Ob2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjp3aWxsTW9kaWZ5RE9NQXR0ckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0ckltcGwpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OndpbGxSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OndpbGxNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZE1vZGlmeURPTUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQ29udHJvbGxlckZvck5vZGUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6fkluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpzaG91bGRCcmVha09uTm9kZUluc2VydGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2hvdWxkQnJlYWtPbk5vZGVSZW1vdmFsKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzaG91bGRCcmVha09uQXR0cmli
dXRlTW9kaWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpk
aWRJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpk
aWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpk
aWRNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpj
cmVhdGVCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6On5JbnNwZWN0
b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmJyZWFrUHJvZ3JhbSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JWYWx1ZTo6aXNOdWxsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludEl0ZW0pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRJdGVtLnBy
b3RvdHlwZS5fZW5hYmxlQ2hhbmdlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9T
Y3JpcHQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5nZXQgbGlu
ZXNDb3VudCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0KToKKwogMjAxMC0wOS0wMSAgVG9ueSBH
ZW50aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcCBiL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCmluZGV4IDA2NGQ0ZTUuLjQ2ZGU3NDkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwCkBAIC0xNTEsNiArMTUxLDggQEAgYm9vbCBDb250YWluZXJOb2RlOjpp
bnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4
Y2UKICAgICAgICAgaWYgKGNoaWxkLT5wYXJlbnROb2RlKCkpCiAgICAgICAgICAgICBicmVhazsK
IAorICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShjaGlsZCwg
dGhpcyk7CisKICAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbW9uKG5leHQuZ2V0KCksIGNoaWxkKTsK
IAogICAgICAgICAvLyBTZW5kIG5vdGlmaWNhdGlvbiBhYm91dCB0aGUgY2hpbGRyZW4gY2hhbmdl
LgpAQCAtMjE4LDYgKzIyMCw4IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cGFyc2VySW5zZXJ0QmVm
b3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG5leHRDaGlsCiAgICAgZm9yIChO
b2RlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IHRhcmdldHMuYmVnaW4oKTsgaXQgIT0gdGFy
Z2V0cy5lbmQoKTsgKytpdCkgewogICAgICAgICBOb2RlKiBjaGlsZCA9IGl0LT5nZXQoKTsKIAor
ICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShjaGlsZCwgdGhp
cyk7CisKICAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbW9uKG5leHQuZ2V0KCksIGNoaWxkKTsKIAog
ICAgICAgICBjaGlsZHJlbkNoYW5nZWQodHJ1ZSwgbmV4dENoaWxkUHJldmlvdXNTaWJsaW5nLmdl
dCgpLCBuZXh0Q2hpbGQsIDEpOwpAQCAtMjkxLDYgKzI5NSw4IEBAIGJvb2wgQ29udGFpbmVyTm9k
ZTo6cmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxk
LCBFeGNlCiAgICAgICAgIEFTU0VSVCghY2hpbGQtPm5leHRTaWJsaW5nKCkpOwogICAgICAgICBB
U1NFUlQoIWNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAKKyAgICAgICAgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6d2lsbEluc2VydERPTU5vZGUoY2hpbGQuZ2V0KCksIHRoaXMpOworCiAgICAgICAg
IC8vIEFkZCBjaGlsZCBhZnRlciAicHJldiIuCiAgICAgICAgIGZvcmJpZEV2ZW50RGlzcGF0Y2go
KTsKICAgICAgICAgTm9kZSogbmV4dDsKQEAgLTU3Miw2ICs1NzgsOCBAQCBib29sIENvbnRhaW5l
ck5vZGU6OmFwcGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIEV4Y2VwdGlvbkNv
ZGUmIGVjLCBibwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAg
SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbEluc2VydERPTU5vZGUoY2hpbGQsIHRoaXMpOworCiAg
ICAgICAgIC8vIEFwcGVuZCBjaGlsZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiAgICAgICAgIGZv
cmJpZEV2ZW50RGlzcGF0Y2goKTsKICAgICAgICAgY2hpbGQtPnNldFBhcmVudCh0aGlzKTsKQEAg
LTYxMCw2ICs2MTgsOCBAQCB2b2lkIENvbnRhaW5lck5vZGU6OnBhcnNlckFkZENoaWxkKFBhc3NS
ZWZQdHI8Tm9kZT4gbmV3Q2hpbGQpCiAgICAgQVNTRVJUKG5ld0NoaWxkKTsKICAgICBBU1NFUlQo
IW5ld0NoaWxkLT5wYXJlbnQoKSk7IC8vIFVzZSBhcHBlbmRDaGlsZCBpZiB5b3UgbmVlZCB0byBo
YW5kbGUgcmVwYXJlbnRpbmcgKGFuZCB3YW50IERPTSBtdXRhdGlvbiBldmVudHMpLgogCisgICAg
SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbEluc2VydERPTU5vZGUobmV3Q2hpbGQuZ2V0KCksIHRo
aXMpOworCiAgICAgZm9yYmlkRXZlbnREaXNwYXRjaCgpOwogICAgIE5vZGUqIGxhc3QgPSBtX2xh
c3RDaGlsZDsKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIHRha2UgYSBQYXNzUmVm
UHRyLgpAQCAtOTgxLDEyICs5OTEsNyBAQCBzdGF0aWMgdm9pZCBub3RpZnlDaGlsZEluc2VydGVk
KE5vZGUqIGNoaWxkKQogewogICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsK
IAotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjaGlsZC0+ZG9j
dW1lbnQoKS0+cGFnZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICAg
ICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkSW5zZXJ0RE9NTm9kZShjaGlsZCk7Ci0gICAgfQot
I2VuZGlmCisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkSW5zZXJ0RE9NTm9kZShjaGlsZCk7
CiAKICAgICBSZWZQdHI8Tm9kZT4gYyA9IGNoaWxkOwogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9j
dW1lbnQgPSBjaGlsZC0+ZG9jdW1lbnQoKTsKQEAgLTEwMjAsMTIgKzEwMjUsNyBAQCBzdGF0aWMg
dm9pZCBkaXNwYXRjaENoaWxkUmVtb3ZhbEV2ZW50cyhOb2RlKiBjaGlsZCkKIHsKICAgICBBU1NF
UlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CiAKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKSAg
ICAKLSAgICBpZiAoUGFnZSogcGFnZSA9IGNoaWxkLT5kb2N1bWVudCgpLT5wYWdlKCkpIHsKLSAg
ICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBwYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVy
LT5kaWRSZW1vdmVET01Ob2RlKGNoaWxkKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBJbnNwZWN0b3JD
b250cm9sbGVyOjp3aWxsUmVtb3ZlRE9NTm9kZShjaGlsZCk7CiAKICAgICBSZWZQdHI8Tm9kZT4g
YyA9IGNoaWxkOwogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBjaGlsZC0+ZG9jdW1l
bnQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKaW5kZXggMTg1NTEwMS4uN2M4ODhiYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTU0MCw2ICs1
NDAsMTEgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLAogICAgICAgICByZXR1cm47CiAgICAgfQog
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoIWlzU3luY2hyb25pemluZ1N0eWxlQXR0
cmlidXRlKCkpCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxNb2RpZnlET01BdHRy
KHRoaXMpOworI2VuZGlmCisKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNo
b3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwogCiAg
ICAgLy8gQWxsb2NhdGUgYXR0cmlidXRlIG1hcCBpZiBuZWNlc3NhcnkuCkBAIC01NjMsMTcgKzU2
OCwxOCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAgfQogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkgewotICAgICAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKSkgewotICAgICAgICAgICAgaWYgKCFpc1N5bmNocm9uaXppbmdT
dHlsZUF0dHJpYnV0ZSgpKQotICAgICAgICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRp
ZE1vZGlmeURPTUF0dHIodGhpcyk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKCFpc1N5bmNo
cm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aWRNb2RpZnlET01BdHRyKHRoaXMpOwogI2VuZGlmCiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0QXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmKQogeworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKCFp
c1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBJbnNwZWN0b3JDb250cm9s
bGVyOjp3aWxsTW9kaWZ5RE9NQXR0cih0aGlzKTsKKyNlbmRpZgorCiAgICAgZG9jdW1lbnQoKS0+
aW5jRE9NVHJlZVZlcnNpb24oKTsKIAogICAgIC8vIEFsbG9jYXRlIGF0dHJpYnV0ZSBtYXAgaWYg
bmVjZXNzYXJ5LgpAQCAtNTkyLDEyICs1OTgsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLAog
ICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1
bWVudCgpLT5wYWdlKCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
Y3RvckNvbnRyb2xsZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpIHsKLSAgICAgICAg
ICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgICAg
ICBpbnNwZWN0b3JDb250cm9sbGVyLT5kaWRNb2RpZnlET01BdHRyKHRoaXMpOwotICAgICAgICB9
Ci0gICAgfQorICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKSkKKyAgICAg
ICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0cih0aGlzKTsKICNlbmRpZgog
fQogCkBAIC0xMjI4LDYgKzEyMzAsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbgogCiB2b2lk
IEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogeworICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxNb2RpZnlET01BdHRyKHRo
aXMpOworCiAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Uo
dGhpcykgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwogCiAgICAgaWYgKG1fYXR0cmlidXRlTWFwKSB7
CkBAIC0xMjM2LDEzICsxMjQwLDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGUoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgICAgIGVjID0gMDsK
ICAgICB9CiAgICAgCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9
IGRvY3VtZW50KCktPnBhZ2UoKSkgewotICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAg
ICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZE1vZGlmeURPTUF0dHIodGhpcyk7Ci0gICAg
fQotI2VuZGlmCi0gICAgCisgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0
cih0aGlzKTsKIH0KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVOUyhjb25zdCBTdHJp
bmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXggZmYxYzJhZi4uNWMxMDdlYSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuaWRsCkBAIC03Myw3ICs3Myw3IEBAIG1vZHVsZSBjb3JlIHsKICAgICAg
ICAgW25vdGlmeV0gdm9pZCBkZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiAgICAgICAgIFtub3RpZnld
IHZvaWQgZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZShvdXQgU3RyaW5nIHVybCwgb3V0IFN0cmlu
ZyBkYXRhLCBvdXQgaW50IGZpcnN0TGluZSwgb3V0IGludCBlcnJvckxpbmUsIG91dCBTdHJpbmcg
ZXJyb3JNZXNzYWdlKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBwYXJzZWRTY3JpcHRTb3VyY2Uo
b3V0IFN0cmluZyBzb3VyY2VJRCwgb3V0IFN0cmluZyB1cmwsIG91dCBTdHJpbmcgZGF0YSwgb3V0
IGludCBmaXJzdExpbmUsIG91dCBpbnQgc2NyaXB0V29ybGRUeXBlKTsKLSAgICAgICAgW25vdGlm
eV0gdm9pZCBwYXVzZWRTY3JpcHQob3V0IFZhbHVlIGNhbGxGcmFtZXMpOworICAgICAgICBbbm90
aWZ5XSB2b2lkIHBhdXNlZFNjcmlwdChvdXQgT2JqZWN0IGRldGFpbHMpOwogICAgICAgICBbbm90
aWZ5XSB2b2lkIHByb2ZpbGVyV2FzRW5hYmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHBy
b2ZpbGVyV2FzRGlzYWJsZWQoKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCByZXN0b3JlZEJyZWFr
cG9pbnQob3V0IFN0cmluZyBzb3VyY2VJRCwgb3V0IFN0cmluZyB1cmwsIG91dCBpbnQgbGluZSwg
b3V0IGJvb2xlYW4gZW5hYmxlZCwgb3V0IFN0cmluZyBjb25kaXRpb24pOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA3ZmIwNTJjLi40YWYzN2YyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNTksMTEgKzU5LDEy
IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JDU1NTdG9yZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgotI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclN0b3JhZ2VBZ2VudC5oIgpAQCAtMTg0Myw2
ICsxODQ0LDU4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsb2FkUGFnZSgpCiAgICAg
bV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1
bGVSZWZyZXNoKHRydWUpOwogfQogCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNl
cnRET01Ob2RlSW1wbChOb2RlKiBub2RlLCBOb2RlKiBwYXJlbnQpCit7CisjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQgfHwgIW1fZG9tQWdl
bnQpCisgICAgICAgIHJldHVybjsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBkZXRh
aWxzOworICAgIGlmIChtX2RvbUFnZW50LT5zaG91bGRCcmVha09uTm9kZUluc2VydGlvbihub2Rl
LCBwYXJlbnQsICZkZXRhaWxzKSkKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dy
YW0oZGV0YWlscyk7CisjZW5kaWYKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRJ
bnNlcnRET01Ob2RlSW1wbChOb2RlKiBub2RlKQoreworICAgIGlmIChtX2RvbUFnZW50KQorICAg
ICAgICBtX2RvbUFnZW50LT5kaWRJbnNlcnRET01Ob2RlKG5vZGUpOworfQorCit2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OndpbGxSZW1vdmVET01Ob2RlSW1wbChOb2RlKiBub2RlKQoreworI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGlmICghbV9kZWJ1Z2dlckFnZW50IHx8
ICFtX2RvbUFnZW50KQorICAgICAgICByZXR1cm47CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gZGV0YWlsczsKKyAgICBpZiAobV9kb21BZ2VudC0+c2hvdWxkQnJlYWtPbk5vZGVSZW1v
dmFsKG5vZGUsICZkZXRhaWxzKSkKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dy
YW0oZGV0YWlscyk7CisjZW5kaWYKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRS
ZW1vdmVET01Ob2RlSW1wbChOb2RlKiBub2RlKQoreworICAgIGlmIChtX2RvbUFnZW50KQorICAg
ICAgICBtX2RvbUFnZW50LT5kaWRSZW1vdmVET01Ob2RlKG5vZGUpOworfQorCit2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OndpbGxNb2RpZnlET01BdHRySW1wbChFbGVtZW50KiBlbGVtZW50KQor
eworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGlmICghbV9kZWJ1Z2dlckFn
ZW50IHx8ICFtX2RvbUFnZW50KQorICAgICAgICByZXR1cm47CisgICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gZGV0YWlsczsKKyAgICBpZiAobV9kb21BZ2VudC0+c2hvdWxkQnJlYWtPbkF0
dHJpYnV0ZU1vZGlmaWNhdGlvbihlbGVtZW50LCAmZGV0YWlscykpCisgICAgICAgIG1fZGVidWdn
ZXJBZ2VudC0+YnJlYWtQcm9ncmFtKGRldGFpbHMpOworI2VuZGlmCit9CisKK3ZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0ckltcGwoRWxlbWVudCogZWxlbWVudCkKK3sK
KyAgICBpZiAobV9kb21BZ2VudCkKKyAgICAgICAgbV9kb21BZ2VudC0+ZGlkTW9kaWZ5RE9NQXR0
cihlbGVtZW50KTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmlu
ZGV4IDdlZDI1NDkuLjIzNjhhMWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmgKQEAgLTMxLDcgKzMxLDggQEAKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNpbmNsdWRl
ICJDb29raWUuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC01
OCw2ICs1OSw3IEBAIGNsYXNzIEluc3BlY3RvckJhY2tlbmQ7CiBjbGFzcyBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckNT
U1N0b3JlOworY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JET01TdG9y
YWdlUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOwogY2xhc3MgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDsKQEAgLTE4Myw5ICsxODUsMTIgQEAgcHVibGljOgogICAgIHZv
aWQgbWFpblJlc291cmNlRmlyZWRMb2FkRXZlbnQoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBLVVJM
Jik7CiAgICAgdm9pZCBtYWluUmVzb3VyY2VGaXJlZERPTUNvbnRlbnRFdmVudChEb2N1bWVudExv
YWRlciosIGNvbnN0IEtVUkwmKTsKIAotICAgIHZvaWQgZGlkSW5zZXJ0RE9NTm9kZShOb2RlKik7
Ci0gICAgdm9pZCBkaWRSZW1vdmVET01Ob2RlKE5vZGUqKTsKLSAgICB2b2lkIGRpZE1vZGlmeURP
TUF0dHIoRWxlbWVudCopOworICAgIHN0YXRpYyB2b2lkIHdpbGxJbnNlcnRET01Ob2RlKE5vZGUq
IG5vZGUsIE5vZGUqIHBhcmVudCk7CisgICAgc3RhdGljIHZvaWQgZGlkSW5zZXJ0RE9NTm9kZShO
b2RlKik7CisgICAgc3RhdGljIHZvaWQgd2lsbFJlbW92ZURPTU5vZGUoTm9kZSopOworICAgIHN0
YXRpYyB2b2lkIHdpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBk
aWRNb2RpZnlET01BdHRyKEVsZW1lbnQqKTsKKwogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIGVu
dW0gV29ya2VyQWN0aW9uIHsgV29ya2VyQ3JlYXRlZCwgV29ya2VyRGVzdHJveWVkIH07CiAKQEAg
LTMwNiw2ICszMTEsMTQgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkRXZhbHVhdGVGb3JUZXN0
SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVzdWx0KTsKIAorICAg
IHN0YXRpYyBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyRm9yTm9kZShO
b2RlKik7CisgICAgdm9pZCB3aWxsSW5zZXJ0RE9NTm9kZUltcGwoTm9kZSogbm9kZSwgTm9kZSog
cGFyZW50KTsKKyAgICB2b2lkIGRpZEluc2VydERPTU5vZGVJbXBsKE5vZGUqKTsKKyAgICB2b2lk
IHdpbGxSZW1vdmVET01Ob2RlSW1wbChOb2RlKik7CisgICAgdm9pZCBkaWRSZW1vdmVET01Ob2Rl
SW1wbChOb2RlKik7CisgICAgdm9pZCB3aWxsTW9kaWZ5RE9NQXR0ckltcGwoRWxlbWVudCopOwor
ICAgIHZvaWQgZGlkTW9kaWZ5RE9NQXR0ckltcGwoRWxlbWVudCopOworCiAjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ7CiAgICAgU3RyaW5nIGJyZWFrcG9pbnRzU2V0dGluZ0tleSgpOwpAQCAtMzc2LDMwICszODks
NTkgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAoraW5saW5lIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6d2lsbEluc2VydERPTU5vZGUoTm9kZSogbm9kZSwgTm9kZSogcGFyZW50KQoreworI2lm
IEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yTm9kZShwYXJlbnQpKQorICAgICAg
ICBpbnNwZWN0b3JDb250cm9sbGVyLT53aWxsSW5zZXJ0RE9NTm9kZUltcGwobm9kZSwgcGFyZW50
KTsKKyNlbmRpZgorfQorCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRJbnNl
cnRET01Ob2RlKE5vZGUqIG5vZGUpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAo
bV9kb21BZ2VudCkKLSAgICAgICAgbV9kb21BZ2VudC0+ZGlkSW5zZXJ0RE9NTm9kZShub2RlKTsK
KyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3Bl
Y3RvckNvbnRyb2xsZXJGb3JOb2RlKG5vZGUpKQorICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVy
LT5kaWRJbnNlcnRET01Ob2RlSW1wbChub2RlKTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCitpbmxpbmUg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQog
ewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fZG9tQWdlbnQpCi0gICAgICAgIG1f
ZG9tQWdlbnQtPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7CisgICAgaWYgKEluc3BlY3RvckNvbnRy
b2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yTm9kZShu
b2RlKSkgeworICAgICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT53aWxsUmVtb3ZlRE9NTm9kZUlt
cGwobm9kZSk7CisgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZFJlbW92ZURPTU5vZGVJ
bXBsKG5vZGUpOworICAgIH0KKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjp3aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQoreworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRy
b2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVyRm9yTm9kZShlbGVtZW50KSkKKyAgICAgICAgaW5z
cGVjdG9yQ29udHJvbGxlci0+d2lsbE1vZGlmeURPTUF0dHJJbXBsKGVsZW1lbnQpOwogI2VuZGlm
CiB9CiAKIGlubGluZSB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZE1vZGlmeURPTUF0dHIo
RWxlbWVudCogZWxlbWVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChtX2Rv
bUFnZW50KQotICAgICAgICBtX2RvbUFnZW50LT5kaWRNb2RpZnlET01BdHRyKGVsZW1lbnQpOwor
ICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVj
dG9yQ29udHJvbGxlckZvck5vZGUoZWxlbWVudCkpCisgICAgICAgIGluc3BlY3RvckNvbnRyb2xs
ZXItPmRpZE1vZGlmeURPTUF0dHJJbXBsKGVsZW1lbnQpOwogI2VuZGlmCiB9CiAKK2lubGluZSBJ
bnNwZWN0b3JDb250cm9sbGVyKiBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JDb250cm9s
bGVyRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIGlmIChQYWdlKiBwYWdlID0gbm9kZS0+ZG9j
dW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKSB7CisgICAgICAg
ICAgICBpZiAoaW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRnJvbnRlbmQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gIWRlZmlu
ZWQoSW5zcGVjdG9yQ29udHJvbGxlcl9oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCmluZGV4IGQyNzYwZTQuLjIzYzIyYWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKQEAgLTY0LDcgKzY0LDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25z
dGFudHMuaCIKLSNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIlNjcmlw
dEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUg
IlRleHQuaCIKQEAgLTIxMCw4ICsyMDksNiBAQCBjb25zdCBpbnQgZG9tQnJlYWtwb2ludERlcml2
ZWRUeXBlU2hpZnQgPSAxNjsKIAogfQogCi1JbnNwZWN0b3JET01BZ2VudCogSW5zcGVjdG9yRE9N
QWdlbnQ6OnNfZG9tQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwotCiBJbnNwZWN0b3JET01BZ2VudDo6
SW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JG
cm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBFdmVudExpc3RlbmVyKEluc3BlY3RvckRPTUFnZW50
VHlwZSkKICAgICAsIG1fY3NzU3RvcmUoY3NzU3RvcmUpCkBAIC0yMjQsOSArMjIxLDYgQEAgSW5z
cGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KEluc3BlY3RvckNTU1N0b3JlKiBjc3NT
dG9yZSwgSW5zcGVjdG9yRnJvbnQKIEluc3BlY3RvckRPTUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdl
bnQoKQogewogICAgIHJlc2V0KCk7Ci0KLSAgICBpZiAodGhpcyA9PSBzX2RvbUFnZW50T25CcmVh
a3BvaW50KQotICAgICAgICBzX2RvbUFnZW50T25CcmVha3BvaW50ID0gMDsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cmVzZXQoKQpAQCAtNzgwLDYgKzc3NCw0MiBAQCB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUp
CiAgICAgfQogfQogCitib29sIEluc3BlY3RvckRPTUFnZW50OjpzaG91bGRCcmVha09uTm9kZUlu
c2VydGlvbihOb2RlKiwgTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiog
ZGV0YWlscykKK3sKKyAgICBpZiAoIWhhc0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZp
ZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZGV0YWlsc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZGV0YWlsc09i
amVjdC0+c2V0T2JqZWN0KCJicmVha3BvaW50IiwgY3JlYXRlQnJlYWtwb2ludChwYXJlbnQsIFN1
YnRyZWVNb2RpZmllZCkpOworICAgICpkZXRhaWxzID0gZGV0YWlsc09iamVjdDsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6c2hvdWxkQnJlYWtPbk5vZGVS
ZW1vdmFsKE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBkZXRhaWxzKQor
eworICAgIGJvb2wgaGFzTm9kZVJlbW92ZWRCcmVha3BvaW50ID0gaGFzQnJlYWtwb2ludChub2Rl
LCBOb2RlUmVtb3ZlZCk7CisgICAgYm9vbCBoYXNBbnlCcmVha3BvaW50ID0gaGFzTm9kZVJlbW92
ZWRCcmVha3BvaW50IHx8IGhhc0JyZWFrcG9pbnQoaW5uZXJQYXJlbnROb2RlKG5vZGUpLCBTdWJ0
cmVlTW9kaWZpZWQpOworICAgIGlmICghaGFzQW55QnJlYWtwb2ludCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlsc09iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGhhc05vZGVSZW1vdmVkQnJlYWtwb2lu
dCkKKyAgICAgICAgZGV0YWlsc09iamVjdC0+c2V0T2JqZWN0KCJicmVha3BvaW50IiwgY3JlYXRl
QnJlYWtwb2ludChub2RlLCBOb2RlUmVtb3ZlZCkpOworICAgIGVsc2UKKyAgICAgICAgZGV0YWls
c09iamVjdC0+c2V0T2JqZWN0KCJicmVha3BvaW50IiwgY3JlYXRlQnJlYWtwb2ludChpbm5lclBh
cmVudE5vZGUobm9kZSksIFN1YnRyZWVNb2RpZmllZCkpOworICAgICpkZXRhaWxzID0gZGV0YWls
c09iamVjdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6
c2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50KiBlbGVtZW50LCBQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiogZGV0YWlscykKK3sKKyAgICBpZiAoIWhhc0JyZWFrcG9p
bnQoZWxlbWVudCwgQXR0cmlidXRlTW9kaWZpZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlsc09iamVjdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgZGV0YWlsc09iamVjdC0+c2V0T2JqZWN0KCJicmVha3BvaW50Iiwg
Y3JlYXRlQnJlYWtwb2ludChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpOworICAgICpkZXRh
aWxzID0gZGV0YWlsc09iamVjdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogU3RyaW5nIEluc3Bl
Y3RvckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0
CiB7CiAgICAgaWYgKCFkb2N1bWVudCB8fCBkb2N1bWVudC0+dXJsKCkuaXNOdWxsKCkpCkBAIC05
ODUsMTIgKzEwMTUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2Rl
KE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2JyZWFrcG9pbnRzLnNp
emUoKSkgewotICAgICAgICBOb2RlKiBwYXJlbnQgPSBpbm5lclBhcmVudE5vZGUobm9kZSk7Ci0g
ICAgICAgIGlmIChoYXNCcmVha3BvaW50KHBhcmVudCwgU3VidHJlZU1vZGlmaWVkKSkgewotICAg
ICAgICAgICAgaWYgKCFwYXVzZU9uQnJlYWtwb2ludCgpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICB1aW50MzJfdCBtYXNrID0gbV9icmVha3BvaW50cy5nZXQo
cGFyZW50KTsKKyAgICAgICAgdWludDMyX3QgbWFzayA9IG1fYnJlYWtwb2ludHMuZ2V0KGlubmVy
UGFyZW50Tm9kZShub2RlKSk7CiAgICAgICAgIHVpbnQzMl90IGluaGVyaXRhYmxlVHlwZXNNYXNr
ID0gKG1hc2sgfCAobWFzayA+PiBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCkpICYgaW5o
ZXJpdGFibGVET01CcmVha3BvaW50VHlwZXNNYXNrOwogICAgICAgICBpZiAoaW5oZXJpdGFibGVU
eXBlc01hc2spCiAgICAgICAgICAgICB1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMobm9kZSwgaW5o
ZXJpdGFibGVUeXBlc01hc2ssIHRydWUpOwpAQCAtMTAyMywxMCArMTA0OCw2IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKG1fYnJlYWtwb2ludHMuc2l6ZSgpKSB7Ci0gICAgICAgIGlmIChoYXNC
cmVha3BvaW50KG5vZGUsIE5vZGVSZW1vdmVkKSB8fCBoYXNCcmVha3BvaW50KGlubmVyUGFyZW50
Tm9kZShub2RlKSwgU3VidHJlZU1vZGlmaWVkKSkgewotICAgICAgICAgICAgaWYgKCFwYXVzZU9u
QnJlYWtwb2ludCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAg
ICAvLyBSZW1vdmUgc3VidHJlZSBicmVha3BvaW50cy4KICAgICAgICAgbV9icmVha3BvaW50cy5y
ZW1vdmUobm9kZSk7CiAgICAgICAgIFZlY3RvcjxOb2RlKj4gc3RhY2soMSwgaW5uZXJGaXJzdENo
aWxkKG5vZGUpKTsKQEAgLTEwNjMsMTIgKzEwODQsMjQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogICAgIGlmICghaWQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChoYXNCcmVha3BvaW50KGVsZW1lbnQsIEF0dHJpYnV0ZU1v
ZGlmaWVkKSkgewotICAgICAgICBpZiAoIXBhdXNlT25CcmVha3BvaW50KCkpCi0gICAgICAgICAg
ICByZXR1cm47CisgICAgbV9mcm9udGVuZC0+YXR0cmlidXRlc1VwZGF0ZWQoaWQsIGJ1aWxkQXJy
YXlGb3JFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50KSk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlQnJlYWtwb2ludChOb2RlKiBub2Rl
LCBsb25nIHR5cGUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisKKyAgICAvLyBGaW5kIGJyZWFrcG9pbnQgb3du
ZXIuCisgICAgd2hpbGUgKCEobV9icmVha3BvaW50cy5nZXQobm9kZSkgJiAoMSA8PCB0eXBlKSkp
IHsKKyAgICAgICAgbm9kZSA9IGlubmVyUGFyZW50Tm9kZShub2RlKTsKKyAgICAgICAgQVNTRVJU
KG5vZGUpOwogICAgIH0KKyAgICBsb25nIG5vZGVJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5n
ZXQobm9kZSk7CisgICAgQVNTRVJUKG5vZGVJZCk7CiAKLSAgICBtX2Zyb250ZW5kLT5hdHRyaWJ1
dGVzVXBkYXRlZChpZCwgYnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpKTsK
KyAgICBicmVha3BvaW50LT5zZXROdW1iZXIoIm5vZGVJZCIsIG5vZGVJZCk7CisgICAgYnJlYWtw
b2ludC0+c2V0TnVtYmVyKCJ0eXBlIiwgdHlwZSk7CisgICAgcmV0dXJuIGJyZWFrcG9pbnQucmVs
ZWFzZSgpOwogfQogCiBib29sIEluc3BlY3RvckRPTUFnZW50OjpoYXNCcmVha3BvaW50KE5vZGUq
IG5vZGUsIGxvbmcgdHlwZSkKQEAgLTEwNzgsMTkgKzExMTEsNiBAQCBib29sIEluc3BlY3RvckRP
TUFnZW50OjpoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUsIGxvbmcgdHlwZSkKICAgICByZXR1cm4g
bV9icmVha3BvaW50cy5nZXQobm9kZSkgJiAocm9vdEJpdCB8IGRlcml2ZWRCaXQpOwogfQogCi1i
b29sIEluc3BlY3RvckRPTUFnZW50OjpwYXVzZU9uQnJlYWtwb2ludCgpCi17Ci0jaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgc19kb21BZ2VudE9uQnJlYWtwb2ludCA9IHRoaXM7
Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmJyZWFrUHJvZ3JhbSgpOwotICAgIGJv
b2wgZGVsZXRlZCA9ICFzX2RvbUFnZW50T25CcmVha3BvaW50OwotICAgIHNfZG9tQWdlbnRPbkJy
ZWFrcG9pbnQgPSAwOwotICAgIHJldHVybiAhZGVsZXRlZDsKLSNlbHNlCi0gICAgcmV0dXJuIHRy
dWU7Ci0jZW5kaWYKLX0KLQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dXBkYXRlU3VidHJlZUJy
ZWFrcG9pbnRzKE5vZGUqIG5vZGUsIHVpbnQzMl90IHJvb3RNYXNrLCBib29sIHNldCkKIHsKICAg
ICB1aW50MzJfdCBvbGRNYXNrID0gbV9icmVha3BvaW50cy5nZXQobm9kZSk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCBmZDNjNWI1Li45NzUxZThlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJJ
bnNwZWN0b3JDU1NTdG9yZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1
ZGUgIk5vZGVMaXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgogCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC0xMTQsNiArMTEzLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNlYXJjaENhbmNlbGVkKCk7CiAgICAgICAgIHZv
aWQgc2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKICAgICAgICAgdm9p
ZCByZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOworICAgICAgICBi
b29sIHNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKE5vZGUqIG5vZGUsIE5vZGUqIHBhcmVudCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIGRldGFpbHMpOworICAgICAgICBib29sIHNob3Vs
ZEJyZWFrT25Ob2RlUmVtb3ZhbChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiogZGV0YWlscyk7CisgICAgICAgIGJvb2wgc2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNh
dGlvbihFbGVtZW50KiBlbGVtZW50LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiogZGV0YWls
cyk7CiAKICAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgZnJvbnRlbmQgZm9yIENT
UyBzdHlsZXMgaW5zcGVjdGlvbi4KICAgICAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBub2RlSWQs
IGJvb2wgYXV0aG9yT25seSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVzKTsKQEAgLTE2
MCw3ICsxNjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcHVzaERvY3Vt
ZW50VG9Gcm9udGVuZCgpOwogCiAgICAgICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2RlKiBub2Rl
LCBsb25nIHR5cGUpOwotICAgICAgICBib29sIHBhdXNlT25CcmVha3BvaW50KCk7CisgICAgICAg
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVCcmVha3BvaW50KE5vZGUqIG5vZGUs
IGxvbmcgdHlwZSk7CiAgICAgICAgIHZvaWQgdXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUq
IHJvb3QsIHVpbnQzMl90IHJvb3RNYXNrLCBib29sIHZhbHVlKTsKIAogICAgICAgICBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVu
dCogZWxlbWVudCk7CkBAIC0yMTcsOCArMjE5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPiA+IG1fc2VhcmNoUmVzdWx0czsKICAgICAgICAgVmVj
dG9yPGxvbmc+IG1faW5zcGVjdGVkTm9kZXM7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVpbnQz
Ml90PiBtX2JyZWFrcG9pbnRzOwotCi0gICAgICAgIHN0YXRpYyBJbnNwZWN0b3JET01BZ2VudCog
c19kb21BZ2VudE9uQnJlYWtwb2ludDsKICAgICB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMzU3YTA0My4uZmQ5ZmRmMyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTU2
LDExICs1NiwxNCBAQCBQYXNzT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JDb250cgogICAgIHJldHVybiBhZ2VudC5y
ZWxlYXNlKCk7CiB9CiAKK0luc3BlY3RvckRlYnVnZ2VyQWdlbnQqIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNfZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCA9IDA7CisKIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5z
cGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAgIDogbV9p
bnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCiAgICAgLCBtX2Zyb250ZW5k
KGZyb250ZW5kKQogICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQogICAgICwgbV9icmVha3Bv
aW50c0xvYWRlZChmYWxzZSkKKyAgICAsIG1fYnJlYWtQcm9ncmFtUmVhc29uKEluc3BlY3RvclZh
bHVlOjpudWxsKCkpCiB7CiB9CiAKQEAgLTY4LDYgKzcxLDkgQEAgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6fkluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKQogewogICAgIFNjcmlwdERlYnVnU2VydmVy
OjpzaGFyZWQoKS5yZW1vdmVMaXN0ZW5lcih0aGlzLCBtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RlZFBhZ2UoKSk7CiAgICAgbV9wYXVzZWRTY3JpcHRTdGF0ZSA9IDA7CisKKyAgICBpZiAo
dGhpcyA9PSBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQpCisgICAgICAgIHNfZGVidWdnZXJB
Z2VudE9uQnJlYWtwb2ludCA9IDA7CiB9CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
aXNEZWJ1Z2dlckFsd2F5c0VuYWJsZWQoKQpAQCAtMjgyLDkgKzI4OCwxMiBAQCB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZwogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiAgICAgQVNTRVJUKHNjcmlwdFN0YXRlICYmICFtX3Bh
dXNlZFNjcmlwdFN0YXRlKTsKKyAgICBBU1NFUlQobV9icmVha1Byb2dyYW1SZWFzb24pOwogICAg
IG1fcGF1c2VkU2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGNhbGxGcmFtZXMgPSBjdXJyZW50Q2FsbEZyYW1lcygpOwotICAgIG1fZnJvbnRlbmQt
PnBhdXNlZFNjcmlwdChjYWxsRnJhbWVzLmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkZXRhaWxzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBkZXRhaWxzLT5z
ZXRWYWx1ZSgiY2FsbEZyYW1lcyIsIGN1cnJlbnRDYWxsRnJhbWVzKCkpOworICAgIGRldGFpbHMt
PnNldFZhbHVlKCJyZWFzb24iLCBtX2JyZWFrUHJvZ3JhbVJlYXNvbik7CisgICAgbV9mcm9udGVu
ZC0+cGF1c2VkU2NyaXB0KGRldGFpbHMpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRpZENvbnRpbnVlKCkKQEAgLTI5Myw2ICszMDIsMTkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9mcm9udGVuZC0+cmVzdW1lZFNjcmlwdCgp
OwogfQogCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiByZWFzb24pCit7CisgICAgc19kZWJ1Z2dlckFnZW50T25CcmVh
a3BvaW50ID0gdGhpczsKKyAgICBtX2JyZWFrUHJvZ3JhbVJlYXNvbiA9IHJlYXNvbjsKKworICAg
IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5icmVha1Byb2dyYW0oKTsKKyAgICBpZiAoIXNf
ZGVidWdnZXJBZ2VudE9uQnJlYWtwb2ludCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc19kZWJ1
Z2dlckFnZW50T25CcmVha3BvaW50ID0gMDsKKyAgICBtX2JyZWFrUHJvZ3JhbVJlYXNvbiA9IElu
c3BlY3RvclZhbHVlOjpudWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDkxYmNkNDkuLjc5YjBhMGUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTYxLDYgKzYxLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgZ2V0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIFN0
cmluZyogc2NyaXB0U291cmNlKTsKIAogICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIGJyZWFr
UHJvZ3JhbShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZWFzb24pOwogICAgIHZvaWQgcmVz
dW1lKCk7CiAgICAgdm9pZCBzdGVwT3ZlclN0YXRlbWVudCgpOwogICAgIHZvaWQgc3RlcEludG9T
dGF0ZW1lbnQoKTsKQEAgLTkzLDYgKzk0LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmlu
ZywgU291cmNlQnJlYWtwb2ludHM+IG1fc3RpY2t5QnJlYWtwb2ludHM7CiAgICAgSGFzaE1hcDxT
dHJpbmcsIHVuc2lnbmVkPiBtX2JyZWFrcG9pbnRzTWFwcGluZzsKICAgICBib29sIG1fYnJlYWtw
b2ludHNMb2FkZWQ7CisgICAgc3RhdGljIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIHNfZGVidWdn
ZXJBZ2VudE9uQnJlYWtwb2ludDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1fYnJlYWtQ
cm9ncmFtUmVhc29uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaAppbmRleCAzZGQ5NTk0Li40MDM2ZjU1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaApAQCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAKICAgICBUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAorICAgIGJvb2wgaXNOdWxsKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlID09IFR5cGVOdWxsOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgYXNCb29s
ZWFuKGJvb2wqIG91dHB1dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKGRvdWJs
ZSogb3V0cHV0KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIobG9uZyogb3V0cHV0
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3Bv
aW50c1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9p
bnRzU2lkZWJhclBhbmUuanMKaW5kZXggM2EwODYwZi4uMjliZTY0NiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKQEAg
LTEwNiw3ICsxMDYsNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEl0ZW0gPSBmdW5jdGlvbihi
cmVha3BvaW50KQogICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoY2hlY2tib3hFbGVtZW50
KTsKIAogICAgIHRoaXMuX2JyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiZW5hYmxlLWNoYW5n
ZWQiLCB0aGlzLl9lbmFibGVDaGFuZ2VkLCB0aGlzKTsKLSAgICB0aGlzLl9icmVha3BvaW50LmFk
ZEV2ZW50TGlzdGVuZXIoInJlbW92ZWQiLCB0aGlzLl9yZW1vdmVkLCB0aGlzKTsKKyAgICB0aGlz
Ll9icmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoInJlbW92ZWQiLCB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycy5iaW5kKHRoaXMsICJyZW1vdmVkIikpOwogfQogCiBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludEl0ZW0ucHJvdG90eXBlID0gewpAQCAtMTI4LDE1ICsxMjgsMTAgQEAgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRJdGVtLnByb3RvdHlwZSA9IHsKICAgICAgICAgZXZlbnQuc3RvcFBy
b3BhZ2F0aW9uKCk7CiAgICAgfSwKIAotICAgIF9lbmFibGVDaGFuZ2VkOiBmdW5jdGlvbigpCisg
ICAgX2VuYWJsZUNoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGNo
ZWNrYm94ID0gdGhpcy5fZWxlbWVudC5maXJzdENoaWxkOwogICAgICAgICBjaGVja2JveC5jaGVj
a2VkID0gdGhpcy5fYnJlYWtwb2ludC5lbmFibGVkOwotICAgIH0sCi0KLSAgICBfcmVtb3ZlZDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
InJlbW92ZWQiKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Lmpz
CmluZGV4IDQyZDY4NTAuLmJlM2YwMjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TY3JpcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dC5qcwpAQCAtNjIsMTEgKzYyLDE0IEBAIFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlID0g
ewogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLnNvdXJjZSkKICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICBpZiAodGhpcy5fbGluZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9saW5lc0NvdW50OwogICAgICAgICB0aGlzLl9saW5lc0NvdW50ID0gMDsKICAgICAgICAgdmFy
IGxhc3RJbmRleCA9IHRoaXMuc291cmNlLmluZGV4T2YoIlxuIik7CiAgICAgICAgIHdoaWxlIChs
YXN0SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgICBsYXN0SW5kZXggPSB0aGlzLnNvdXJjZS5p
bmRleE9mKCJcbiIsIGxhc3RJbmRleCArIDEpCiAgICAgICAgICAgICB0aGlzLl9saW5lc0NvdW50
Kys7CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmVzQ291bnQ7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggMGJmZjMzNS4u
MjQxYTlmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0x
NDQ1LDkgKzE0NDUsOSBAQCBXZWJJbnNwZWN0b3IuZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSA9
IGZ1bmN0aW9uKHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbgogICAgIHRoaXMucGFuZWxz
LnNjcmlwdHMuYWRkU2NyaXB0KG51bGwsIHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUs
IGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKTsKIH0KIAotV2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlw
dCA9IGZ1bmN0aW9uKGNhbGxGcmFtZXMpCitXZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0ID0gZnVu
Y3Rpb24oZGV0YWlscykKIHsKLSAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmRlYnVnZ2VyUGF1c2Vk
KGNhbGxGcmFtZXMpOworICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuZGVidWdnZXJQYXVzZWQoZGV0
YWlscy5jYWxsRnJhbWVzKTsKICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdUb0Zyb250
KCk7CiB9CiAK
</data>
<flag name="review"
          id="55387"
          type_id="1"
          status="+"
          setter="yurys"
    />
    <flag name="commit-queue"
          id="55388"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66484</attachid>
            <date>2010-09-03 05:49:09 -0700</date>
            <delta_ts>2010-09-03 07:02:11 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>break_details.patch</filename>
            <type>text/plain</type>
            <size>30719</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkNDdiN2MzLi5jOGM5ZGM4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDkt
MDMgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHJv
dmlkZSBtb3JlIGluZm9ybWF0aW9uIHRvIGZyb250LWVuZCB3aGVuIGJyZWFraW5nIG9uIERPTSBl
dmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ2
NzkKKworICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzOgor
ICAgICAgICAoaW5pdGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5fcGF1c2VkU2Ny
aXB0KToKKwogMjAxMC0wOS0wMyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgdXBkYXRlZCBHVEsgYmFzZWxpbmVzIG9mIGEgbWF0
aG1sIHRlc3QuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9k
ZWJ1Z2dlci10ZXN0Mi5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVn
Z2VyLXRlc3QyLmpzCmluZGV4IDgwYjk4YTYuLjZjMTlmZjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzCisrKyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QyLmpzCkBAIC04OSwxMCArODks
MTAgQEAgSW5zcGVjdG9yVGVzdC5jYXB0dXJlU3RhY2tUcmFjZSA9IGZ1bmN0aW9uKGNhbGxGcmFt
ZXMpCiAgICAgfQogfTsKIAotSW5zcGVjdG9yVGVzdC5fcGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24o
Y2FsbEZyYW1lcykKK0luc3BlY3RvclRlc3QuX3BhdXNlZFNjcmlwdCA9IGZ1bmN0aW9uKGRldGFp
bHMpCiB7CiAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNjcmlwdCBleGVjdXRpb24gcGF1
c2VkLiIpOwotICAgIEluc3BlY3RvclRlc3QuX2NhbGxGcmFtZXMgPSBjYWxsRnJhbWVzOworICAg
IEluc3BlY3RvclRlc3QuX2NhbGxGcmFtZXMgPSBkZXRhaWxzLmNhbGxGcmFtZXM7CiAgICAgaWYg
KEluc3BlY3RvclRlc3QuX3dhaXRVbnRpbFBhdXNlZENhbGxiYWNrKSB7CiAgICAgICAgIHZhciBj
YWxsYmFjayA9IEluc3BlY3RvclRlc3QuX3dhaXRVbnRpbFBhdXNlZENhbGxiYWNrOwogICAgICAg
ICBkZWxldGUgSW5zcGVjdG9yVGVzdC5fd2FpdFVudGlsUGF1c2VkQ2FsbGJhY2s7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDljMjMyYmEu
Ljc2YzNhMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTAtMDktMDMgIFBhdmVsIFBvZGl2aWxvdiAgPHBv
ZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uIHRv
IGZyb250LWVuZCB3aGVuIGJyZWFraW5nIG9uIERPTSBldmVudAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ2NzkKKworICAgICAgICAqIGRvbS9Db250
YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6Omluc2VydEJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpwYXJzZXJJbnNlcnRCZWZv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6cmVwbGFjZUNoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmFwcGVuZENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OnBhcnNlckFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
Om5vdGlmeUNoaWxkSW5zZXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hDaGlsZFJl
bW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpy
ZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlSW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRJbnNlcnRET01Ob2RlSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsUmVtb3ZlRE9NTm9kZUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUmVtb3ZlRE9N
Tm9kZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1v
ZGlmeURPTUF0dHJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZE1vZGlmeURPTUF0dHJJbXBsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbElu
c2VydERPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlk
SW5zZXJ0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3
aWxsUmVtb3ZlRE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
Ojp3aWxsTW9kaWZ5RE9NQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6Omluc3BlY3RvckNvbnRyb2xsZXJGb3JOb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6On5JbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6c2hvdWxkQnJlYWtPbk5vZGVJbnNlcnRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NQWdlbnQ6OnNob3VsZEJyZWFrT25Ob2RlUmVtb3ZhbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlQnJlYWtwb2lu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0p
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yVmFsdWU6OmlzTnVsbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3Bv
aW50c1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRJdGVt
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRlbS5wcm90b3R5cGUuX2VuYWJs
ZUNoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUuZ2V0IGxpbmVzQ291bnQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLnBhdXNlZFNjcmlwdCk6CisKIDIwMTAtMDktMDIgIEt3YW5nIFl1bCBTZW8gIDxza3l1
bEBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAKaW5kZXggMDY0ZDRlNS4uNDZkZTc0OSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKQEAgLTE1MSw2ICsxNTEsOCBAQCBib29sIENvbnRhaW5lck5vZGU6Omluc2VydEJlZm9yZShQ
YXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZQogICAgICAgICBp
ZiAoY2hpbGQtPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIElu
c3BlY3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKGNoaWxkLCB0aGlzKTsKKwogICAg
ICAgICBpbnNlcnRCZWZvcmVDb21tb24obmV4dC5nZXQoKSwgY2hpbGQpOwogCiAgICAgICAgIC8v
IFNlbmQgbm90aWZpY2F0aW9uIGFib3V0IHRoZSBjaGlsZHJlbiBjaGFuZ2UuCkBAIC0yMTgsNiAr
MjIwLDggQEAgdm9pZCBDb250YWluZXJOb2RlOjpwYXJzZXJJbnNlcnRCZWZvcmUoUGFzc1JlZlB0
cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogbmV4dENoaWwKICAgICBmb3IgKE5vZGVWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0cy5iZWdpbigpOyBpdCAhPSB0YXJnZXRzLmVuZCgpOyAr
K2l0KSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gaXQtPmdldCgpOwogCisgICAgICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OndpbGxJbnNlcnRET01Ob2RlKGNoaWxkLCB0aGlzKTsKKwogICAgICAg
ICBpbnNlcnRCZWZvcmVDb21tb24obmV4dC5nZXQoKSwgY2hpbGQpOwogCiAgICAgICAgIGNoaWxk
cmVuQ2hhbmdlZCh0cnVlLCBuZXh0Q2hpbGRQcmV2aW91c1NpYmxpbmcuZ2V0KCksIG5leHRDaGls
ZCwgMSk7CkBAIC0yOTEsNiArMjk1LDggQEAgYm9vbCBDb250YWluZXJOb2RlOjpyZXBsYWNlQ2hp
bGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQsIEV4Y2UKICAgICAg
ICAgQVNTRVJUKCFjaGlsZC0+bmV4dFNpYmxpbmcoKSk7CiAgICAgICAgIEFTU0VSVCghY2hpbGQt
PnByZXZpb3VzU2libGluZygpKTsKIAorICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxs
SW5zZXJ0RE9NTm9kZShjaGlsZC5nZXQoKSwgdGhpcyk7CisKICAgICAgICAgLy8gQWRkIGNoaWxk
IGFmdGVyICJwcmV2Ii4KICAgICAgICAgZm9yYmlkRXZlbnREaXNwYXRjaCgpOwogICAgICAgICBO
b2RlKiBuZXh0OwpAQCAtNTcyLDYgKzU3OCw4IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6YXBwZW5k
Q2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMsIGJvCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBJbnNwZWN0b3JDb250
cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShjaGlsZCwgdGhpcyk7CisKICAgICAgICAgLy8gQXBw
ZW5kIGNoaWxkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKICAgICAgICAgZm9yYmlkRXZlbnREaXNw
YXRjaCgpOwogICAgICAgICBjaGlsZC0+c2V0UGFyZW50KHRoaXMpOwpAQCAtNjEwLDYgKzYxOCw4
IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBu
ZXdDaGlsZCkKICAgICBBU1NFUlQobmV3Q2hpbGQpOwogICAgIEFTU0VSVCghbmV3Q2hpbGQtPnBh
cmVudCgpKTsgLy8gVXNlIGFwcGVuZENoaWxkIGlmIHlvdSBuZWVkIHRvIGhhbmRsZSByZXBhcmVu
dGluZyAoYW5kIHdhbnQgRE9NIG11dGF0aW9uIGV2ZW50cykuCiAKKyAgICBJbnNwZWN0b3JDb250
cm9sbGVyOjp3aWxsSW5zZXJ0RE9NTm9kZShuZXdDaGlsZC5nZXQoKSwgdGhpcyk7CisKICAgICBm
b3JiaWRFdmVudERpc3BhdGNoKCk7CiAgICAgTm9kZSogbGFzdCA9IG1fbGFzdENoaWxkOwogICAg
IC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgdGFrZSBhIFBhc3NSZWZQdHIuCkBAIC05ODEs
MTIgKzk5MSw3IEBAIHN0YXRpYyB2b2lkIG5vdGlmeUNoaWxkSW5zZXJ0ZWQoTm9kZSogY2hpbGQp
CiB7CiAgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwogCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9IGNoaWxkLT5kb2N1bWVudCgpLT5wYWdl
KCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xs
ZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBpbnNwZWN0b3JD
b250cm9sbGVyLT5kaWRJbnNlcnRET01Ob2RlKGNoaWxkKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRJbnNlcnRET01Ob2RlKGNoaWxkKTsKIAogICAgIFJlZlB0
cjxOb2RlPiBjID0gY2hpbGQ7CiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGNoaWxk
LT5kb2N1bWVudCgpOwpAQCAtMTAyMCwxMiArMTAyNSw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNo
Q2hpbGRSZW1vdmFsRXZlbnRzKE5vZGUqIGNoaWxkKQogewogICAgIEFTU0VSVCghZXZlbnREaXNw
YXRjaEZvcmJpZGRlbigpKTsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1IpICAgIAotICAgIGlmIChQ
YWdlKiBwYWdlID0gY2hpbGQtPmRvY3VtZW50KCktPnBhZ2UoKSkgewotICAgICAgICBpZiAoSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IHBhZ2UtPmluc3BlY3RvckNv
bnRyb2xsZXIoKSkKLSAgICAgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZFJlbW92ZURP
TU5vZGUoY2hpbGQpOwotICAgIH0KLSNlbmRpZgorICAgIEluc3BlY3RvckNvbnRyb2xsZXI6Ondp
bGxSZW1vdmVET01Ob2RlKGNoaWxkKTsKIAogICAgIFJlZlB0cjxOb2RlPiBjID0gY2hpbGQ7CiAg
ICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IGNoaWxkLT5kb2N1bWVudCgpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApp
bmRleCAxODU1MTAxLi43Yzg4OGJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAorKysgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtNTQwLDYgKzU0MCwxMSBAQCB2b2lk
IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKSkKKyAg
ICAgICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0dHIodGhpcyk7CisjZW5k
aWYKKwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0
cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7CiAKICAgICAvLyBBbGxvY2F0
ZSBhdHRyaWJ1dGUgbWFwIGlmIG5lY2Vzc2FyeS4KQEAgLTU2MywxNyArNTY4LDE4IEBAIHZvaWQg
RWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSwKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlm
IChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzU3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRl
KCkpCi0gICAgICAgICAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkTW9kaWZ5RE9NQXR0
cih0aGlzKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIWlzU3luY2hyb25pemluZ1N0eWxl
QXR0cmlidXRlKCkpCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZE1vZGlmeURPTUF0
dHIodGhpcyk7CiAjZW5kaWYKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYpCiB7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoIWlzU3luY2hyb25pemlu
Z1N0eWxlQXR0cmlidXRlKCkpCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxNb2Rp
ZnlET01BdHRyKHRoaXMpOworI2VuZGlmCisKICAgICBkb2N1bWVudCgpLT5pbmNET01UcmVlVmVy
c2lvbigpOwogCiAgICAgLy8gQWxsb2NhdGUgYXR0cmlidXRlIG1hcCBpZiBuZWNlc3NhcnkuCkBA
IC01OTIsMTIgKzU5OCw4IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAgICAgfQogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2Uo
KSkgewotICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
ciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkgewotICAgICAgICAgICAgaWYgKCFpc1N5
bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQotICAgICAgICAgICAgICAgIGluc3BlY3RvckNv
bnRyb2xsZXItPmRpZE1vZGlmeURPTUF0dHIodGhpcyk7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
aWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRNb2RpZnlET01BdHRyKHRoaXMpOwogI2VuZGlmCiB9CiAKQEAgLTEyMjgs
NiArMTIzMCw4IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlTlMoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluCiAKIHZvaWQgRWxlbWVudDo6cmVt
b3ZlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Cisg
ICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbE1vZGlmeURPTUF0dHIodGhpcyk7CisKICAgICBT
dHJpbmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUu
bG93ZXIoKSA6IG5hbWU7CiAKICAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKQEAgLTEyMzYsMTMg
KzEyNDAsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAgICAgZWMgPSAwOwogICAgIH0KICAgICAK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+
cGFnZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250
cm9sbGVyID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICAgICAgaW5zcGVj
dG9yQ29udHJvbGxlci0+ZGlkTW9kaWZ5RE9NQXR0cih0aGlzKTsKLSAgICB9Ci0jZW5kaWYKLSAg
ICAKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRNb2RpZnlET01BdHRyKHRoaXMpOwogfQog
CiB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNl
VVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmlkbAppbmRleCBmZjFjMmFmLi41YzEwN2VhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5pZGwKQEAgLTczLDcgKzczLDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbbm90aWZ5XSB2
b2lkIGRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKICAgICAgICAgW25vdGlmeV0gdm9pZCBmYWlsZWRU
b1BhcnNlU2NyaXB0U291cmNlKG91dCBTdHJpbmcgdXJsLCBvdXQgU3RyaW5nIGRhdGEsIG91dCBp
bnQgZmlyc3RMaW5lLCBvdXQgaW50IGVycm9yTGluZSwgb3V0IFN0cmluZyBlcnJvck1lc3NhZ2Up
OwogICAgICAgICBbbm90aWZ5XSB2b2lkIHBhcnNlZFNjcmlwdFNvdXJjZShvdXQgU3RyaW5nIHNv
dXJjZUlELCBvdXQgU3RyaW5nIHVybCwgb3V0IFN0cmluZyBkYXRhLCBvdXQgaW50IGZpcnN0TGlu
ZSwgb3V0IGludCBzY3JpcHRXb3JsZFR5cGUpOwotICAgICAgICBbbm90aWZ5XSB2b2lkIHBhdXNl
ZFNjcmlwdChvdXQgVmFsdWUgY2FsbEZyYW1lcyk7CisgICAgICAgIFtub3RpZnldIHZvaWQgcGF1
c2VkU2NyaXB0KG91dCBPYmplY3QgZGV0YWlscyk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgcHJv
ZmlsZXJXYXNFbmFibGVkKCk7CiAgICAgICAgIFtub3RpZnldIHZvaWQgcHJvZmlsZXJXYXNEaXNh
YmxlZCgpOwogICAgICAgICBbbm90aWZ5XSB2b2lkIHJlc3RvcmVkQnJlYWtwb2ludChvdXQgU3Ry
aW5nIHNvdXJjZUlELCBvdXQgU3RyaW5nIHVybCwgb3V0IGludCBsaW5lLCBvdXQgYm9vbGVhbiBl
bmFibGVkLCBvdXQgU3RyaW5nIGNvbmRpdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCmluZGV4IDdmYjA1MmMuLjRhZjM3ZjIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01OSwxMSArNTksMTIgQEAKICNpbmNsdWRl
ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU1N0
b3JlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgorI2luY2x1
ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZVJl
c291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yU3RvcmFnZUFnZW50LmgiCkBAIC0xODQzLDYgKzE4NDQsNTggQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxvYWRQYWdlKCkKICAgICBtX2luc3BlY3RlZFBh
Z2UtPm1haW5GcmFtZSgpLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZVJlZnJlc2godHJ1
ZSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbEluc2VydERPTU5vZGVJbXBs
KE5vZGUqIG5vZGUsIE5vZGUqIHBhcmVudCkKK3sKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKKyAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCB8fCAhbV9kb21BZ2VudCkKKyAgICAgICAg
cmV0dXJuOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRldGFpbHM7CisgICAgaWYg
KG1fZG9tQWdlbnQtPnNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKG5vZGUsIHBhcmVudCwgJmRl
dGFpbHMpKQorICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShkZXRhaWxzKTsK
KyNlbmRpZgorfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEluc2VydERPTU5vZGVJ
bXBsKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG1fZG9tQWdlbnQpCisgICAgICAgIG1fZG9tQWdl
bnQtPmRpZEluc2VydERPTU5vZGUobm9kZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6d2lsbFJlbW92ZURPTU5vZGVJbXBsKE5vZGUqIG5vZGUpCit7CisjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCisgICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQgfHwgIW1fZG9tQWdlbnQp
CisgICAgICAgIHJldHVybjsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBkZXRhaWxz
OworICAgIGlmIChtX2RvbUFnZW50LT5zaG91bGRCcmVha09uTm9kZVJlbW92YWwobm9kZSwgJmRl
dGFpbHMpKQorICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShkZXRhaWxzKTsK
KyNlbmRpZgorfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlbW92ZURPTU5vZGVJ
bXBsKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG1fZG9tQWdlbnQpCisgICAgICAgIG1fZG9tQWdl
bnQtPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6d2lsbE1vZGlmeURPTUF0dHJJbXBsKEVsZW1lbnQqIGVsZW1lbnQpCit7CisjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQgfHwgIW1fZG9t
QWdlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBk
ZXRhaWxzOworICAgIGlmIChtX2RvbUFnZW50LT5zaG91bGRCcmVha09uQXR0cmlidXRlTW9kaWZp
Y2F0aW9uKGVsZW1lbnQsICZkZXRhaWxzKSkKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVh
a1Byb2dyYW0oZGV0YWlscyk7CisjZW5kaWYKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRNb2RpZnlET01BdHRySW1wbChFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChtX2Rv
bUFnZW50KQorICAgICAgICBtX2RvbUFnZW50LT5kaWRNb2RpZnlET01BdHRyKGVsZW1lbnQpOwor
fQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggN2VkMjU0OS4u
MjM2OGExZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMzEs
NyArMzEsOCBAQAogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkNvb2tpZS5oIgot
I2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNj
cmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTU4LDYgKzU5LDcgQEAg
Y2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yQ1NTU3RvcmU7CitjbGFz
cyBJbnNwZWN0b3JET01BZ2VudDsKIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTsK
IGNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7CiBjbGFzcyBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OwpAQCAtMTgzLDkgKzE4NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYWluUmVzb3Vy
Y2VGaXJlZExvYWRFdmVudChEb2N1bWVudExvYWRlciosIGNvbnN0IEtVUkwmKTsKICAgICB2b2lk
IG1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KERvY3VtZW50TG9hZGVyKiwgY29uc3Qg
S1VSTCYpOwogCi0gICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUqKTsKLSAgICB2b2lkIGRp
ZFJlbW92ZURPTU5vZGUoTm9kZSopOwotICAgIHZvaWQgZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50
Kik7CisgICAgc3RhdGljIHZvaWQgd2lsbEluc2VydERPTU5vZGUoTm9kZSogbm9kZSwgTm9kZSog
cGFyZW50KTsKKyAgICBzdGF0aWMgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUqKTsKKyAgICBz
dGF0aWMgdm9pZCB3aWxsUmVtb3ZlRE9NTm9kZShOb2RlKik7CisgICAgc3RhdGljIHZvaWQgd2ls
bE1vZGlmeURPTUF0dHIoRWxlbWVudCopOworICAgIHN0YXRpYyB2b2lkIGRpZE1vZGlmeURPTUF0
dHIoRWxlbWVudCopOworCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgZW51bSBXb3JrZXJBY3Rp
b24geyBXb3JrZXJDcmVhdGVkLCBXb3JrZXJEZXN0cm95ZWQgfTsKIApAQCAtMzA2LDYgKzMxMSwx
NCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpOwogCisgICAgc3RhdGljIEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXJGb3JOb2RlKE5vZGUqKTsKKyAgICB2
b2lkIHdpbGxJbnNlcnRET01Ob2RlSW1wbChOb2RlKiBub2RlLCBOb2RlKiBwYXJlbnQpOworICAg
IHZvaWQgZGlkSW5zZXJ0RE9NTm9kZUltcGwoTm9kZSopOworICAgIHZvaWQgd2lsbFJlbW92ZURP
TU5vZGVJbXBsKE5vZGUqKTsKKyAgICB2b2lkIGRpZFJlbW92ZURPTU5vZGVJbXBsKE5vZGUqKTsK
KyAgICB2b2lkIHdpbGxNb2RpZnlET01BdHRySW1wbChFbGVtZW50Kik7CisgICAgdm9pZCBkaWRN
b2RpZnlET01BdHRySW1wbChFbGVtZW50Kik7CisKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDsKICAgICBTdHJp
bmcgYnJlYWtwb2ludHNTZXR0aW5nS2V5KCk7CkBAIC0zNzYsMzAgKzM4OSw1OSBAQCBwcml2YXRl
OgogI2VuZGlmCiB9OwogCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsSW5z
ZXJ0RE9NTm9kZShOb2RlKiBub2RlLCBOb2RlKiBwYXJlbnQpCit7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9
IGluc3BlY3RvckNvbnRyb2xsZXJGb3JOb2RlKHBhcmVudCkpCisgICAgICAgIGluc3BlY3RvckNv
bnRyb2xsZXItPndpbGxJbnNlcnRET01Ob2RlSW1wbChub2RlLCBwYXJlbnQpOworI2VuZGlmCit9
CisKIGlubGluZSB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEluc2VydERPTU5vZGUoTm9k
ZSogbm9kZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChtX2RvbUFnZW50KQot
ICAgICAgICBtX2RvbUFnZW50LT5kaWRJbnNlcnRET01Ob2RlKG5vZGUpOworICAgIGlmIChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gaW5zcGVjdG9yQ29udHJvbGxl
ckZvck5vZGUobm9kZSkpCisgICAgICAgIGluc3BlY3RvckNvbnRyb2xsZXItPmRpZEluc2VydERP
TU5vZGVJbXBsKG5vZGUpOwogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKK2lubGluZSB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKLSAgICBpZiAobV9kb21BZ2VudCkKLSAgICAgICAgbV9kb21BZ2VudC0+ZGlk
UmVtb3ZlRE9NTm9kZShub2RlKTsKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlciA9IGluc3BlY3RvckNvbnRyb2xsZXJGb3JOb2RlKG5vZGUpKSB7CisgICAg
ICAgIGluc3BlY3RvckNvbnRyb2xsZXItPndpbGxSZW1vdmVET01Ob2RlSW1wbChub2RlKTsKKyAg
ICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkUmVtb3ZlRE9NTm9kZUltcGwobm9kZSk7Cisg
ICAgfQorI2VuZGlmCit9CisKK2lubGluZSB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxN
b2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IGluc3Bl
Y3RvckNvbnRyb2xsZXJGb3JOb2RlKGVsZW1lbnQpKQorICAgICAgICBpbnNwZWN0b3JDb250cm9s
bGVyLT53aWxsTW9kaWZ5RE9NQXR0ckltcGwoZWxlbWVudCk7CiAjZW5kaWYKIH0KIAogaW5saW5l
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVt
ZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fZG9tQWdlbnQpCi0gICAg
ICAgIG1fZG9tQWdlbnQtPmRpZE1vZGlmeURPTUF0dHIoZWxlbWVudCk7CisgICAgaWYgKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBpbnNwZWN0b3JDb250cm9sbGVy
Rm9yTm9kZShlbGVtZW50KSkKKyAgICAgICAgaW5zcGVjdG9yQ29udHJvbGxlci0+ZGlkTW9kaWZ5
RE9NQXR0ckltcGwoZWxlbWVudCk7CiAjZW5kaWYKIH0KIAoraW5saW5lIEluc3BlY3RvckNvbnRy
b2xsZXIqIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckNvbnRyb2xsZXJGb3JOb2RlKE5v
ZGUqIG5vZGUpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBub2RlLT5kb2N1bWVudCgpLT5wYWdl
KCkpIHsKKyAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xs
ZXIgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChpbnNw
ZWN0b3JDb250cm9sbGVyLT5oYXNGcm9udGVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBp
bnNwZWN0b3JDb250cm9sbGVyOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JD
b250cm9sbGVyX2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXgg
ZDI3NjBlNC4uMjNjMjJhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cApAQCAtNjQsNyArNjQsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgotI2lu
Y2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5l
ci5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAt
MjEwLDggKzIwOSw2IEBAIGNvbnN0IGludCBkb21CcmVha3BvaW50RGVyaXZlZFR5cGVTaGlmdCA9
IDE2OwogCiB9CiAKLUluc3BlY3RvckRPTUFnZW50KiBJbnNwZWN0b3JET01BZ2VudDo6c19kb21B
Z2VudE9uQnJlYWtwb2ludCA9IDA7Ci0KIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01B
Z2VudChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9u
dGVuZCkKICAgICA6IEV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yRE9NQWdlbnRUeXBlKQogICAgICwg
bV9jc3NTdG9yZShjc3NTdG9yZSkKQEAgLTIyNCw5ICsyMjEsNiBAQCBJbnNwZWN0b3JET01BZ2Vu
dDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0
b3JGcm9udAogSW5zcGVjdG9yRE9NQWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCgpCiB7CiAgICAg
cmVzZXQoKTsKLQotICAgIGlmICh0aGlzID09IHNfZG9tQWdlbnRPbkJyZWFrcG9pbnQpCi0gICAg
ICAgIHNfZG9tQWdlbnRPbkJyZWFrcG9pbnQgPSAwOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpyZXNldCgpCkBAIC03ODAsNiArNzc0LDQyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKICAgICB9CiB9CiAK
K2Jvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OnNob3VsZEJyZWFrT25Ob2RlSW5zZXJ0aW9uKE5vZGUq
LCBOb2RlKiBwYXJlbnQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBkZXRhaWxzKQorewor
ICAgIGlmICghaGFzQnJlYWtwb2ludChwYXJlbnQsIFN1YnRyZWVNb2RpZmllZCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXRhaWxzT2JqZWN0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBkZXRhaWxzT2JqZWN0LT5zZXRPYmpl
Y3QoImJyZWFrcG9pbnQiLCBjcmVhdGVCcmVha3BvaW50KHBhcmVudCwgU3VidHJlZU1vZGlmaWVk
KSk7CisgICAgKmRldGFpbHMgPSBkZXRhaWxzT2JqZWN0OworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIEluc3BlY3RvckRPTUFnZW50OjpzaG91bGRCcmVha09uTm9kZVJlbW92YWwoTm9kZSog
bm9kZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIGRldGFpbHMpCit7CisgICAgYm9vbCBo
YXNOb2RlUmVtb3ZlZEJyZWFrcG9pbnQgPSBoYXNCcmVha3BvaW50KG5vZGUsIE5vZGVSZW1vdmVk
KTsKKyAgICBib29sIGhhc0FueUJyZWFrcG9pbnQgPSBoYXNOb2RlUmVtb3ZlZEJyZWFrcG9pbnQg
fHwgaGFzQnJlYWtwb2ludChpbm5lclBhcmVudE5vZGUobm9kZSksIFN1YnRyZWVNb2RpZmllZCk7
CisgICAgaWYgKCFoYXNBbnlCcmVha3BvaW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkZXRhaWxzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBpZiAoaGFzTm9kZVJlbW92ZWRCcmVha3BvaW50KQorICAgICAgICBk
ZXRhaWxzT2JqZWN0LT5zZXRPYmplY3QoImJyZWFrcG9pbnQiLCBjcmVhdGVCcmVha3BvaW50KG5v
ZGUsIE5vZGVSZW1vdmVkKSk7CisgICAgZWxzZQorICAgICAgICBkZXRhaWxzT2JqZWN0LT5zZXRP
YmplY3QoImJyZWFrcG9pbnQiLCBjcmVhdGVCcmVha3BvaW50KGlubmVyUGFyZW50Tm9kZShub2Rl
KSwgU3VidHJlZU1vZGlmaWVkKSk7CisgICAgKmRldGFpbHMgPSBkZXRhaWxzT2JqZWN0OworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEluc3BlY3RvckRPTUFnZW50OjpzaG91bGRCcmVha09u
QXR0cmlidXRlTW9kaWZpY2F0aW9uKEVsZW1lbnQqIGVsZW1lbnQsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiBkZXRhaWxzKQoreworICAgIGlmICghaGFzQnJlYWtwb2ludChlbGVtZW50LCBB
dHRyaWJ1dGVNb2RpZmllZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBkZXRhaWxzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBkZXRhaWxzT2JqZWN0LT5zZXRPYmplY3QoImJyZWFrcG9pbnQiLCBjcmVhdGVCcmVha3Bv
aW50KGVsZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVkKSk7CisgICAgKmRldGFpbHMgPSBkZXRhaWxz
T2JqZWN0OworICAgIHJldHVybiB0cnVlOworfQorCiBTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6
OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKIHsKICAgICBpZiAo
IWRvY3VtZW50IHx8IGRvY3VtZW50LT51cmwoKS5pc051bGwoKSkKQEAgLTk4NSwxMiArMTAxNSw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSogbm9kZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fYnJlYWtwb2ludHMuc2l6ZSgpKSB7Ci0gICAg
ICAgIE5vZGUqIHBhcmVudCA9IGlubmVyUGFyZW50Tm9kZShub2RlKTsKLSAgICAgICAgaWYgKGhh
c0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAgICAgICBpZiAo
IXBhdXNlT25CcmVha3BvaW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIHVpbnQzMl90IG1hc2sgPSBtX2JyZWFrcG9pbnRzLmdldChwYXJlbnQpOworICAg
ICAgICB1aW50MzJfdCBtYXNrID0gbV9icmVha3BvaW50cy5nZXQoaW5uZXJQYXJlbnROb2RlKG5v
ZGUpKTsKICAgICAgICAgdWludDMyX3QgaW5oZXJpdGFibGVUeXBlc01hc2sgPSAobWFzayB8ICht
YXNrID4+IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0KSkgJiBpbmhlcml0YWJsZURPTUJy
ZWFrcG9pbnRUeXBlc01hc2s7CiAgICAgICAgIGlmIChpbmhlcml0YWJsZVR5cGVzTWFzaykKICAg
ICAgICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhub2RlLCBpbmhlcml0YWJsZVR5cGVz
TWFzaywgdHJ1ZSk7CkBAIC0xMDIzLDEwICsxMDQ4LDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAobV9icmVha3BvaW50cy5zaXplKCkpIHsKLSAgICAgICAgaWYgKGhhc0JyZWFrcG9pbnQobm9k
ZSwgTm9kZVJlbW92ZWQpIHx8IGhhc0JyZWFrcG9pbnQoaW5uZXJQYXJlbnROb2RlKG5vZGUpLCBT
dWJ0cmVlTW9kaWZpZWQpKSB7Ci0gICAgICAgICAgICBpZiAoIXBhdXNlT25CcmVha3BvaW50KCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgICAgIC8vIFJlbW92ZSBz
dWJ0cmVlIGJyZWFrcG9pbnRzLgogICAgICAgICBtX2JyZWFrcG9pbnRzLnJlbW92ZShub2RlKTsK
ICAgICAgICAgVmVjdG9yPE5vZGUqPiBzdGFjaygxLCBpbm5lckZpcnN0Q2hpbGQobm9kZSkpOwpA
QCAtMTA2MywxMiArMTA4NCwyNCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlE
T01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGhhc0JyZWFrcG9pbnQoZWxlbWVudCwgQXR0cmlidXRlTW9kaWZpZWQpKSB7Ci0g
ICAgICAgIGlmICghcGF1c2VPbkJyZWFrcG9pbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICBtX2Zyb250ZW5kLT5hdHRyaWJ1dGVzVXBkYXRlZChpZCwgYnVpbGRBcnJheUZvckVsZW1lbnRB
dHRyaWJ1dGVzKGVsZW1lbnQpKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IElu
c3BlY3RvckRPTUFnZW50OjpjcmVhdGVCcmVha3BvaW50KE5vZGUqIG5vZGUsIGxvbmcgdHlwZSkK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKworICAgIC8vIEZpbmQgYnJlYWtwb2ludCBvd25lci4KKyAgICB3aGls
ZSAoIShtX2JyZWFrcG9pbnRzLmdldChub2RlKSAmICgxIDw8IHR5cGUpKSkgeworICAgICAgICBu
b2RlID0gaW5uZXJQYXJlbnROb2RlKG5vZGUpOworICAgICAgICBBU1NFUlQobm9kZSk7CiAgICAg
fQorICAgIGxvbmcgbm9kZUlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChub2RlKTsKKyAg
ICBBU1NFUlQobm9kZUlkKTsKIAotICAgIG1fZnJvbnRlbmQtPmF0dHJpYnV0ZXNVcGRhdGVkKGlk
LCBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCkpOworICAgIGJyZWFrcG9p
bnQtPnNldE51bWJlcigibm9kZUlkIiwgbm9kZUlkKTsKKyAgICBicmVha3BvaW50LT5zZXROdW1i
ZXIoInR5cGUiLCB0eXBlKTsKKyAgICByZXR1cm4gYnJlYWtwb2ludC5yZWxlYXNlKCk7CiB9CiAK
IGJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6Omhhc0JyZWFrcG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0
eXBlKQpAQCAtMTA3OCwxOSArMTExMSw2IEBAIGJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6Omhhc0Jy
ZWFrcG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKQogICAgIHJldHVybiBtX2JyZWFrcG9pbnRz
LmdldChub2RlKSAmIChyb290Qml0IHwgZGVyaXZlZEJpdCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9y
RE9NQWdlbnQ6OnBhdXNlT25CcmVha3BvaW50KCkKLXsKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKLSAgICBzX2RvbUFnZW50T25CcmVha3BvaW50ID0gdGhpczsKLSAgICBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYnJlYWtQcm9ncmFtKCk7Ci0gICAgYm9vbCBkZWxldGVkID0g
IXNfZG9tQWdlbnRPbkJyZWFrcG9pbnQ7Ci0gICAgc19kb21BZ2VudE9uQnJlYWtwb2ludCA9IDA7
Ci0gICAgcmV0dXJuICFkZWxldGVkOwotI2Vsc2UKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgot
fQotCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9k
ZSogbm9kZSwgdWludDMyX3Qgcm9vdE1hc2ssIGJvb2wgc2V0KQogewogICAgIHVpbnQzMl90IG9s
ZE1hc2sgPSBtX2JyZWFrcG9pbnRzLmdldChub2RlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oCmluZGV4IGZkM2M1YjUuLjk3NTFlOGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuaApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNTU1N0
b3JlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3Qu
aCIKLSNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKICNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KQEAgLTExNCw2ICsxMTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgc2VhcmNoQ2FuY2VsZWQoKTsKICAgICAgICAgdm9pZCBzZXRET01CcmVh
a3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOwogICAgICAgICB2b2lkIHJlbW92ZURPTUJy
ZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7CisgICAgICAgIGJvb2wgc2hvdWxkQnJl
YWtPbk5vZGVJbnNlcnRpb24oTm9kZSogbm9kZSwgTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiogZGV0YWlscyk7CisgICAgICAgIGJvb2wgc2hvdWxkQnJlYWtPbk5vZGVS
ZW1vdmFsKE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBkZXRhaWxzKTsK
KyAgICAgICAgYm9vbCBzaG91bGRCcmVha09uQXR0cmlidXRlTW9kaWZpY2F0aW9uKEVsZW1lbnQq
IGVsZW1lbnQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBkZXRhaWxzKTsKIAogICAgICAg
ICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBmcm9udGVuZCBmb3IgQ1NTIHN0eWxlcyBpbnNw
ZWN0aW9uLgogICAgICAgICB2b2lkIGdldFN0eWxlcyhsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JP
bmx5LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZXMpOwpAQCAtMTYwLDcgKzE2Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBwdXNoRG9jdW1lbnRUb0Zyb250ZW5k
KCk7CiAKICAgICAgICAgYm9vbCBoYXNCcmVha3BvaW50KE5vZGUqIG5vZGUsIGxvbmcgdHlwZSk7
Ci0gICAgICAgIGJvb2wgcGF1c2VPbkJyZWFrcG9pbnQoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGNyZWF0ZUJyZWFrcG9pbnQoTm9kZSogbm9kZSwgbG9uZyB0eXBlKTsK
ICAgICAgICAgdm9pZCB1cGRhdGVTdWJ0cmVlQnJlYWtwb2ludHMoTm9kZSogcm9vdCwgdWludDMy
X3Qgcm9vdE1hc2ssIGJvb2wgdmFsdWUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBidWlsZE9iamVjdEZvckF0dHJpYnV0ZVN0eWxlcyhFbGVtZW50KiBlbGVtZW50KTsK
QEAgLTIxNyw4ICsyMTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hTZXQ8
UmVmUHRyPE5vZGU+ID4gbV9zZWFyY2hSZXN1bHRzOwogICAgICAgICBWZWN0b3I8bG9uZz4gbV9p
bnNwZWN0ZWROb2RlczsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdWludDMyX3Q+IG1fYnJlYWtw
b2ludHM7Ci0KLSAgICAgICAgc3RhdGljIEluc3BlY3RvckRPTUFnZW50KiBzX2RvbUFnZW50T25C
cmVha3BvaW50OwogICAgIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAzNTdhMDQzLi5mZDlmZGYzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtNTYsMTEgKzU2LDE0IEBA
IFBhc3NPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Y3JlYXRlKEluc3BlY3RvckNvbnRyCiAgICAgcmV0dXJuIGFnZW50LnJlbGVhc2UoKTsKIH0K
IAorSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c19kZWJ1
Z2dlckFnZW50T25CcmVha3BvaW50ID0gMDsKKwogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9s
bGVyLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgOiBtX2luc3BlY3RvckNvbnRy
b2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKICAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCiAg
ICAgLCBtX3BhdXNlZFNjcmlwdFN0YXRlKDApCiAgICAgLCBtX2JyZWFrcG9pbnRzTG9hZGVkKGZh
bHNlKQorICAgICwgbV9icmVha1Byb2dyYW1SZWFzb24oSW5zcGVjdG9yVmFsdWU6Om51bGwoKSkK
IHsKIH0KIApAQCAtNjgsNiArNzEsOSBAQCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp+SW5zcGVj
dG9yRGVidWdnZXJBZ2VudCgpCiB7CiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJl
bW92ZUxpc3RlbmVyKHRoaXMsIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgp
KTsKICAgICBtX3BhdXNlZFNjcmlwdFN0YXRlID0gMDsKKworICAgIGlmICh0aGlzID09IHNfZGVi
dWdnZXJBZ2VudE9uQnJlYWtwb2ludCkKKyAgICAgICAgc19kZWJ1Z2dlckFnZW50T25CcmVha3Bv
aW50ID0gMDsKIH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojppc0RlYnVnZ2VyQWx3
YXlzRW5hYmxlZCgpCkBAIC0yODIsOSArMjg4LDEyIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
CiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKFNjcmlwdFN0YXRlKiBzY3Jp
cHRTdGF0ZSkKIHsKICAgICBBU1NFUlQoc2NyaXB0U3RhdGUgJiYgIW1fcGF1c2VkU2NyaXB0U3Rh
dGUpOworICAgIEFTU0VSVChtX2JyZWFrUHJvZ3JhbVJlYXNvbik7CiAgICAgbV9wYXVzZWRTY3Jp
cHRTdGF0ZSA9IHNjcmlwdFN0YXRlOwotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbEZy
YW1lcyA9IGN1cnJlbnRDYWxsRnJhbWVzKCk7Ci0gICAgbV9mcm9udGVuZC0+cGF1c2VkU2NyaXB0
KGNhbGxGcmFtZXMuZ2V0KCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRldGFpbHMg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGRldGFpbHMtPnNldFZhbHVlKCJjYWxs
RnJhbWVzIiwgY3VycmVudENhbGxGcmFtZXMoKSk7CisgICAgZGV0YWlscy0+c2V0VmFsdWUoInJl
YXNvbiIsIG1fYnJlYWtQcm9ncmFtUmVhc29uKTsKKyAgICBtX2Zyb250ZW5kLT5wYXVzZWRTY3Jp
cHQoZGV0YWlscyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGlu
dWUoKQpAQCAtMjkzLDYgKzMwMiwxOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRp
ZENvbnRpbnVlKCkKICAgICBtX2Zyb250ZW5kLT5yZXN1bWVkU2NyaXB0KCk7CiB9CiAKK3ZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHJlYXNvbikKK3sKKyAgICBzX2RlYnVnZ2VyQWdlbnRPbkJyZWFrcG9pbnQgPSB0aGlz
OworICAgIG1fYnJlYWtQcm9ncmFtUmVhc29uID0gcmVhc29uOworCisgICAgU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNoYXJlZCgpLmJyZWFrUHJvZ3JhbSgpOworICAgIGlmICghc19kZWJ1Z2dlckFnZW50
T25CcmVha3BvaW50KQorICAgICAgICByZXR1cm47CisKKyAgICBzX2RlYnVnZ2VyQWdlbnRPbkJy
ZWFrcG9pbnQgPSAwOworICAgIG1fYnJlYWtQcm9ncmFtUmVhc29uID0gSW5zcGVjdG9yVmFsdWU6
Om51bGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmgKaW5kZXggOTFiY2Q0OS4uNzliMGEwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBnZXRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU3RyaW5nKiBzY3JpcHRT
b3VyY2UpOwogCiAgICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQgYnJlYWtQcm9ncmFtKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlYXNvbik7CiAgICAgdm9pZCByZXN1bWUoKTsKICAgICB2
b2lkIHN0ZXBPdmVyU3RhdGVtZW50KCk7CiAgICAgdm9pZCBzdGVwSW50b1N0YXRlbWVudCgpOwpA
QCAtOTMsNiArOTQsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8U3RyaW5nLCBTb3VyY2VCcmVh
a3BvaW50cz4gbV9zdGlja3lCcmVha3BvaW50czsKICAgICBIYXNoTWFwPFN0cmluZywgdW5zaWdu
ZWQ+IG1fYnJlYWtwb2ludHNNYXBwaW5nOwogICAgIGJvb2wgbV9icmVha3BvaW50c0xvYWRlZDsK
KyAgICBzdGF0aWMgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogc19kZWJ1Z2dlckFnZW50T25CcmVh
a3BvaW50OworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbV9icmVha1Byb2dyYW1SZWFzb247
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCmluZGV4IDNkZDk1OTQuLjQwMzZmNTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQogCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgPT0gVHlwZU51bGw7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2xlYW4oYm9vbCogb3V0
cHV0KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIoZG91YmxlKiBvdXRwdXQpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcihsb25nKiBvdXRwdXQpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBh
bmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFu
ZS5qcwppbmRleCA0MDg4MjlkLi5jZGE3MmZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcwpAQCAtMTA2LDcgKzEwNiw3
IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRlbSA9IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAg
ICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChjaGVja2JveEVsZW1lbnQpOwogCiAgICAgdGhp
cy5fYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIHRoaXMuX2Vu
YWJsZUNoYW5nZWQsIHRoaXMpOwotICAgIHRoaXMuX2JyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5l
cigicmVtb3ZlZCIsIHRoaXMuX3JlbW92ZWQsIHRoaXMpOworICAgIHRoaXMuX2JyZWFrcG9pbnQu
YWRkRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
LmJpbmQodGhpcywgInJlbW92ZWQiKSk7CiB9CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50SXRl
bS5wcm90b3R5cGUgPSB7CkBAIC0xMjgsMTUgKzEyOCwxMCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludEl0ZW0ucHJvdG90eXBlID0gewogICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsK
ICAgICB9LAogCi0gICAgX2VuYWJsZUNoYW5nZWQ6IGZ1bmN0aW9uKCkKKyAgICBfZW5hYmxlQ2hh
bmdlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgY2hlY2tib3ggPSB0aGlz
Ll9lbGVtZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgIGNoZWNrYm94LmNoZWNrZWQgPSB0aGlzLl9i
cmVha3BvaW50LmVuYWJsZWQ7Ci0gICAgfSwKLQotICAgIF9yZW1vdmVkOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygicmVtb3ZlZCIpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKaW5kZXggNDJkNjg1
MC4uYmUzZjAyMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzCkBAIC02Miwx
MSArNjIsMTQgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgewogICAg
ICAgICBpZiAoIXRoaXMuc291cmNlKQogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlm
ICh0aGlzLl9saW5lc0NvdW50KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmVzQ291bnQ7
CiAgICAgICAgIHRoaXMuX2xpbmVzQ291bnQgPSAwOwogICAgICAgICB2YXIgbGFzdEluZGV4ID0g
dGhpcy5zb3VyY2UuaW5kZXhPZigiXG4iKTsKICAgICAgICAgd2hpbGUgKGxhc3RJbmRleCAhPT0g
LTEpIHsKICAgICAgICAgICAgIGxhc3RJbmRleCA9IHRoaXMuc291cmNlLmluZGV4T2YoIlxuIiwg
bGFzdEluZGV4ICsgMSkKICAgICAgICAgICAgIHRoaXMuX2xpbmVzQ291bnQrKzsKICAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5fbGluZXNDb3VudDsKICAgICB9CiB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCAwYmZmMzM1Li4yNDFhOWZjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTE0NDUsOSArMTQ0NSw5
IEBAIFdlYkluc3BlY3Rvci5mYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291
cmNlVVJMLCBzb3VyY2UsIHN0YXJ0aW5nTGluCiAgICAgdGhpcy5wYW5lbHMuc2NyaXB0cy5hZGRT
Y3JpcHQobnVsbCwgc291cmNlVVJMLCBzb3VyY2UsIHN0YXJ0aW5nTGluZSwgZXJyb3JMaW5lLCBl
cnJvck1lc3NhZ2UpOwogfQogCi1XZWJJbnNwZWN0b3IucGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24o
Y2FsbEZyYW1lcykKK1dlYkluc3BlY3Rvci5wYXVzZWRTY3JpcHQgPSBmdW5jdGlvbihkZXRhaWxz
KQogewotICAgIHRoaXMucGFuZWxzLnNjcmlwdHMuZGVidWdnZXJQYXVzZWQoY2FsbEZyYW1lcyk7
CisgICAgdGhpcy5wYW5lbHMuc2NyaXB0cy5kZWJ1Z2dlclBhdXNlZChkZXRhaWxzLmNhbGxGcmFt
ZXMpOwogICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5icmluZ1RvRnJvbnQoKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>