<?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>93056</bug_id>
          
          <creation_ts>2012-08-02 18:23:17 -0700</creation_ts>
          <short_desc>Reimplement RenderQuote placement algorithm</short_desc>
          <delta_ts>2012-08-09 16:35:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>93436</dependson>
          <blocked>92061</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Elliott Sprehn">esprehn</reporter>
          <assigned_to name="Elliott Sprehn">esprehn</assigned_to>
          <cc>bdakin</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>toyoshim</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>686086</commentid>
    <comment_count>0</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-02 18:23:17 -0700</bug_when>
    <thetext>The algorithm for placing quotes in the linked list and maintaining them is broken and also involves walking renderer subtrees repeatedly in RenderObjectChildList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686159</commentid>
    <comment_count>1</comment_count>
      <attachid>156244</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-02 19:44:14 -0700</bug_when>
    <thetext>Created attachment 156244
Patch

Reimplemented algorithm from WKBug 92061</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687112</commentid>
    <comment_count>2</comment_count>
      <attachid>156244</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-08-03 13:53:46 -0700</bug_when>
    <thetext>Comment on attachment 156244
Patch

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

It&apos;s very close to being ready for landing. I would like to see another round though.

&gt; Source/WebCore/ChangeLog:41
&gt; +        * rendering/RenderObjectChildList.cpp:
&gt; +        (WebCore::RenderObjectChildList::removeChildNode):
&gt; +        (WebCore::RenderObjectChildList::appendChildNode):
&gt; +        (WebCore::RenderObjectChildList::insertChildNode):
&gt; +        * rendering/RenderQuote.cpp:
&gt; +        (WebCore::RenderQuote::RenderQuote):
&gt; +        (WebCore::RenderQuote::~RenderQuote):
&gt; +        (WebCore::RenderQuote::willBeDestroyed):
&gt; +        (WebCore::RenderQuote::originalText):
&gt; +        (WebCore::RenderQuote::computePreferredLogicalWidths):
&gt; +        (WebCore::RenderQuote::styleDidChange):
&gt; +        (WebCore):
&gt; +        (WebCore::RenderQuote::attachQuote):
&gt; +        (WebCore::RenderQuote::detachQuote):
&gt; +        (WebCore::RenderQuote::updateDepth):
&gt; +        * rendering/RenderQuote.h:
&gt; +        (RenderQuote):
&gt; +        * rendering/RenderView.cpp:
&gt; +        (WebCore::RenderView::RenderView):
&gt; +        * rendering/RenderView.h:
&gt; +        (WebCore):
&gt; +        (WebCore::RenderView::setRenderQuoteHead):
&gt; +        (WebCore::RenderView::renderQuoteHead):
&gt; +        (RenderView):

The function-level part of the ChangeLog should be filled.

&gt; Source/WebCore/rendering/RenderObjectChildList.cpp:121
&gt; +        if (oldChild-&gt;isQuote())
&gt; +            toRenderQuote(oldChild)-&gt;detachQuote();

I feel like we should add the counterpart to insertChildNode. It&apos;s unclear to me if it&apos;s needed but it would be safer. The downside is that it would also force the quotes to be attached before preferred widths computation.

&gt; Source/WebCore/rendering/RenderQuote.cpp:-162
&gt; -    ASSERT(m_depth != UNKNOWN_DEPTH);

Might be good to add ASSERT(m_attached) here to keep the existing assertion.

&gt; Source/WebCore/rendering/RenderQuote.cpp:118
&gt; +    if (!QuotesData::equals(newQuotes, oldQuotes))
&gt; +        setNeedsLayoutAndPrefWidthsRecalc();

I think we should just return StyleDifferenceLayout in RenderStyle::diff for quotes differences and kill this function.

&gt; Source/WebCore/rendering/RenderQuote.cpp:150
&gt; +        quote-&gt;updateDepth();

Calling setNeedsLayoutAndPrefWidthsRecalc() during layout is bad as I am pretty sure it is the cause of some of our quote bugs. Please add a FIXME about removing this anti-pattern.

&gt; Source/WebCore/rendering/RenderQuote.h:39
&gt;  protected:

I don&apos;t see the need for the protected section as we have no renderer inheriting from us.

&gt; Source/WebCore/rendering/RenderView.h:199
&gt; +    RenderQuote* renderQuoteHead() { return m_renderQuoteHead; }

It should be a const function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687326</commentid>
    <comment_count>3</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-03 18:48:11 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 156244 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156244&amp;action=review
&gt; ..
&gt; The function-level part of the ChangeLog should be filled.

Yeah I&apos;ve been avoiding doing that until the last minute since it&apos;s so hard to regenerate it if I need to change more methods.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObjectChildList.cpp:121
&gt; &gt; +        if (oldChild-&gt;isQuote())
&gt; &gt; +            toRenderQuote(oldChild)-&gt;detachQuote();
&gt; 
&gt; I feel like we should add the counterpart to insertChildNode. It&apos;s unclear to me if it&apos;s needed but it would be safer. The downside is that it would also force the quotes to be attached before preferred widths computation.

This doesn&apos;t work because you get attached too early since your anonymous parent isn&apos;t actually in the main render tree when the RenderQuote is inserted. As discussed in person I&apos;ll add a comment.

Either way this approach still isn&apos;t right since some things will compute the size on detached render trees, but this is good for a start.

&gt; &gt; Source/WebCore/rendering/RenderQuote.cpp:118
&gt; &gt; +    if (!QuotesData::equals(newQuotes, oldQuotes))
&gt; &gt; +        setNeedsLayoutAndPrefWidthsRecalc();
&gt; 
&gt; I think we should just return StyleDifferenceLayout in RenderStyle::diff for quotes differences and kill this function.

I don&apos;t understand what you mean?

&gt; &gt; Source/WebCore/rendering/RenderQuote.cpp:150
&gt; &gt; +        quote-&gt;updateDepth();
&gt; 
&gt; Calling setNeedsLayoutAndPrefWidthsRecalc() during layout is bad as I am pretty sure it is the cause of some of our quote bugs. Please add a FIXME about removing this anti-pattern.

Okay, though I&apos;m not sure what the way to fix that is yet. We could walk the whole list of RenderQuote at the start of every layout and compute the depths and mark them there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687338</commentid>
    <comment_count>4</comment_count>
      <attachid>156244</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-03 19:02:46 -0700</bug_when>
    <thetext>Comment on attachment 156244
Patch

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

&gt; Source/WebCore/rendering/RenderQuote.cpp:144
&gt; +    if (!m_previous) {

This if() block is going to cause a bug if anyone calls set computePreferredLogicalWidths() before this is in the main render tree. We&apos;d walk all the way up to the top of our subtree, think we&apos;re the root and insert ourselves before the actual first RenderQuote in the tree. One fix would be to do if (predecessor-&gt;isRenderView()) in the loop and move the code there.

Even so we end up with the wrong value for m_depth = 0 for detached computePreferredLogicalWidths calls making RenderQuote&apos;s later in the document have the wrong value.

The only way I can think to fix this is to do previousInPreOrder over the DOM instead of the render tree, since you need to know your depth in a detached subtree to return a correct value from computePreferredLogicalWidths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688243</commentid>
    <comment_count>5</comment_count>
      <attachid>156720</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-06 10:21:29 -0700</bug_when>
    <thetext>Created attachment 156720
Patch

Review from Julien.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688246</commentid>
    <comment_count>6</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-06 10:23:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 156244 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156244&amp;action=review
&gt;  ...
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderQuote.cpp:-162
&gt; &gt; -    ASSERT(m_depth != UNKNOWN_DEPTH);
&gt; 
&gt; Might be good to add ASSERT(m_attached) here to keep the existing assertion.

I didn&apos;t add this assertion instead opting for checking for isRooted() in attachQuote() and allowing detached quote width computations. This is going to compute the wrong width causing possible extra layouts (and also makes it a bit more expensive since it has to walk up the render tree), but it avoids having an invalid m_depth values or inserting at the start improperly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688422</commentid>
    <comment_count>7</comment_count>
      <attachid>156720</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-06 14:25:59 -0700</bug_when>
    <thetext>Comment on attachment 156720
Patch

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

&gt; Source/WebCore/rendering/RenderObjectChildList.cpp:287
&gt; +        // See appendChildNode for why you can&apos;t attachQuote here.

Better would be:  // Calling attachQuote() here would be too early (before anonymous renderers are inserted) see appendChild() for more explanation.

&gt; Source/WebCore/rendering/RenderQuote.cpp:33
&gt; -    , m_depth(UNKNOWN_DEPTH)
&gt; +    , m_depth(0)

Now we&apos;re tracking this state separately with attached?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688431</commentid>
    <comment_count>8</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-06 14:42:57 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 156720 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156720&amp;action=review
&gt; ...
&gt; &gt; Source/WebCore/rendering/RenderQuote.cpp:33
&gt; &gt; -    , m_depth(UNKNOWN_DEPTH)
&gt; &gt; +    , m_depth(0)
&gt; 
&gt; Now we&apos;re tracking this state separately with attached?

Yeah. Instead of allowing a negative value for m_depth, it starts at 0 so you always get a computed pref width (even if it&apos;s the width of the first depth which may be wrong).

I had thought about making m_depth a size_t, and then making getOpenQuote and getCloseQuote also take size_t. Then you just check if (!m_depth) return emptyAtom.impl(); in the CLOSE_QUOTE case, but Julien didn&apos;t like using size_t like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688434</commentid>
    <comment_count>9</comment_count>
      <attachid>156720</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-06 14:44:10 -0700</bug_when>
    <thetext>Comment on attachment 156720
Patch

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

I&apos;m really glad you&apos;re working on this.

&gt; Source/WebCore/rendering/RenderObjectChildList.cpp:121
&gt;          if (oldChild-&gt;isRenderRegion())
&gt;              toRenderRegion(oldChild)-&gt;detachRegion();
&gt;  
&gt; +        if (oldChild-&gt;isQuote())
&gt; +            toRenderQuote(oldChild)-&gt;detachQuote();

This feels a lot like the willRemove callback.  But maybe that&apos;s a DOM thing?

&gt; Source/WebCore/rendering/RenderView.h:305
&gt; -    unsigned m_renderQuoteCount;
&gt; +    RenderQuote* m_renderQuoteHead;

So this is larger on 64 bit, meaning if this has a COMPILE_ASSERT For size, you may need to update it.  But it shouldn&apos;t matter, since we dont&apos; have a lot of RenderView objects and don&apos;t care about their size.

&gt; Source/WebCore/rendering/style/RenderStyle.cpp:583
&gt; +    if (!QuotesData::equals(rareInheritedData-&gt;quotes.get(), other-&gt;rareInheritedData-&gt;quotes.get()))

can rareInheritedData be null?  OR since it&apos;s inherited it will always be non-null since the root style gets one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688439</commentid>
    <comment_count>10</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-06 14:52:14 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 156720 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156720&amp;action=review
&gt; 
&gt; I&apos;m really glad you&apos;re working on this.

Thanks! :)

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObjectChildList.cpp:121
&gt; &gt;          if (oldChild-&gt;isRenderRegion())
&gt; &gt;              toRenderRegion(oldChild)-&gt;detachRegion();
&gt; &gt;  
&gt; &gt; +        if (oldChild-&gt;isQuote())
&gt; &gt; +            toRenderQuote(oldChild)-&gt;detachQuote();
&gt; 
&gt; This feels a lot like the willRemove callback.  But maybe that&apos;s a DOM thing?

Yeah it&apos;s a DOM thing.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderView.h:305
&gt; &gt; -    unsigned m_renderQuoteCount;
&gt; &gt; +    RenderQuote* m_renderQuoteHead;
&gt; 
&gt; So this is larger on 64 bit, meaning if this has a COMPILE_ASSERT For size, you may need to update it.  But it shouldn&apos;t matter, since we dont&apos; have a lot of RenderView objects and don&apos;t care about their size.

Yeah. There&apos;s apparently no assert since I added the m_renderQuoteCount code and it didn&apos;t assert that time either.

&gt; 
&gt; &gt; Source/WebCore/rendering/style/RenderStyle.cpp:583
&gt; &gt; +    if (!QuotesData::equals(rareInheritedData-&gt;quotes.get(), other-&gt;rareInheritedData-&gt;quotes.get()))
&gt; 
&gt; can rareInheritedData be null?  OR since it&apos;s inherited it will always be non-null since the root style gets one?

Yeah. You always have one. There&apos;s a few hundred lines of these things above this line that don&apos;t check too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688505</commentid>
    <comment_count>11</comment_count>
      <attachid>156720</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-06 16:03:51 -0700</bug_when>
    <thetext>Comment on attachment 156720
Patch

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

&gt; Source/WebCore/rendering/RenderQuote.cpp:157
&gt; +    else if (view())
&gt; +        view()-&gt;setRenderQuoteHead(m_next);

Don&apos;t we need an ASSERT here?  If view() is ever null, we had better be tearing down the whole document or we&apos;re leaving a stale pointer, no?  Also, could m_next be not attached?  Do we need to assert m_next-&gt;m_attached in this function?

&gt; Source/WebCore/rendering/RenderQuote.cpp:159
&gt; +    if (m_next)
&gt; +        m_next-&gt;m_previous = m_previous;

Similarly, do we need to assert that m_previous is still attached?

&gt; Source/WebCore/rendering/RenderQuote.cpp:189
&gt; +    // FIXME: Don&apos;t dirty pref widths inside of layout.

Could you explain better here.  I agree that sounds wrong, but this comment isn&apos;t very actionable as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688588</commentid>
    <comment_count>12</comment_count>
      <attachid>156805</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-06 17:09:13 -0700</bug_when>
    <thetext>Created attachment 156805
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688592</commentid>
    <comment_count>13</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-06 17:14:32 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 156720 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156720&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderQuote.cpp:157
&gt; &gt; +    else if (view())
&gt; &gt; +        view()-&gt;setRenderQuoteHead(m_next);
&gt; 
&gt; Don&apos;t we need an ASSERT here?  If view() is ever null, we had better be tearing down the whole document or we&apos;re leaving a stale pointer, no?  

view() is only null if we&apos;re destroying the whole tree (by design). documentBeingDestroyed is actually equivalent to return !view().

&gt;Also, could m_next be not attached?  Do we need to assert m_next-&gt;m_attached in this function?

They could, and that&apos;s fine. When they do get attached they&apos;ll walk the list of RenderQuote&apos;s and update their depths to make them correct. I&apos;m nervous about asserting that here since code could call computePreferredLogicalWidths on the RenderQuote&apos;s out of order which should be fine: they should just update their depths and then request a recalc later.

I don&apos;t know if that works due to the issue with calling setNeeds*() inside layout() but in theory it does.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderQuote.cpp:159
&gt; &gt; +    if (m_next)
&gt; &gt; +        m_next-&gt;m_previous = m_previous;
&gt; 
&gt; Similarly, do we need to assert that m_previous is still attached?

Same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688601</commentid>
    <comment_count>14</comment_count>
      <attachid>156720</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-06 17:22:51 -0700</bug_when>
    <thetext>Comment on attachment 156720
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderQuote.cpp:157
&gt;&gt;&gt; +        view()-&gt;setRenderQuoteHead(m_next);
&gt;&gt; 
&gt;&gt; Don&apos;t we need an ASSERT here?  If view() is ever null, we had better be tearing down the whole document or we&apos;re leaving a stale pointer, no?  Also, could m_next be not attached?  Do we need to assert m_next-&gt;m_attached in this function?
&gt; 
&gt; view() is only null if we&apos;re destroying the whole tree (by design). documentBeingDestroyed is actually equivalent to return !view().

OK, but if m_next is *not* attached, and then it&apos;s destroyed, it will never &quot;detach&quot; and clean up the weak pointers.  Seems like the ASSERT is needed to prevent us from screwing ourselves here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688608</commentid>
    <comment_count>15</comment_count>
      <attachid>156720</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-08-06 17:33:50 -0700</bug_when>
    <thetext>Comment on attachment 156720
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/rendering/RenderQuote.cpp:157
&gt;&gt;&gt;&gt; +        view()-&gt;setRenderQuoteHead(m_next);
&gt;&gt;&gt; 
&gt;&gt;&gt; Don&apos;t we need an ASSERT here?  If view() is ever null, we had better be tearing down the whole document or we&apos;re leaving a stale pointer, no?  Also, could m_next be not attached?  Do we need to assert m_next-&gt;m_attached in this function?
&gt;&gt; 
&gt;&gt; view() is only null if we&apos;re destroying the whole tree (by design). documentBeingDestroyed is actually equivalent to return !view().
&gt; 
&gt; OK, but if m_next is *not* attached, and then it&apos;s destroyed, it will never &quot;detach&quot; and clean up the weak pointers.  Seems like the ASSERT is needed to prevent us from screwing ourselves here.

The only place where we set m_next are attach and detach and AFAICT m_next is set to an attached quote as we always walking the tree in reverse tree order in attach. However I agree that an ASSERT would be a good thing.

I would also just ASSERT(!view()) instead of NULL-checking following the comment below.

&gt; Source/WebCore/rendering/RenderQuote.cpp:160
&gt; +    if (!documentBeingDestroyed()) {

AFAICT you shouldn&apos;t be calling detachQuote in this case, period. I would move the if (!documentBeingDestroyed()) check to willBeDestroyed and ASSERT at the beginning of this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689311</commentid>
    <comment_count>16</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-07 13:07:03 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 156720 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156720&amp;action=review
&gt; ...
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderQuote.cpp:160
&gt; &gt; +    if (!documentBeingDestroyed()) {
&gt; 
&gt; AFAICT you shouldn&apos;t be calling detachQuote in this case, period. I would move the if (!documentBeingDestroyed()) check to willBeDestroyed and ASSERT at the beginning of this function.

That means you can&apos;t have the destructor asserts that ensure the whole thing got cleaned up.

RenderQuote::~RenderQuote()
{
    ASSERT(!m_attached);
    ASSERT(!m_next &amp;&amp; !m_previous);
}

By design I made sure every node is detached even if the document is being destroyed. This should be very fast since it&apos;s just setting pointers to null and no updating depths.

If we never call detach during destruction you can&apos;t assert about that, since by the time the destructor is called the view is already null in all cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689333</commentid>
    <comment_count>17</comment_count>
      <attachid>156990</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-07 13:30:58 -0700</bug_when>
    <thetext>Created attachment 156990
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689348</commentid>
    <comment_count>18</comment_count>
      <attachid>156993</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-07 13:52:32 -0700</bug_when>
    <thetext>Created attachment 156993
Patch

Patch with added asserts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689349</commentid>
    <comment_count>19</comment_count>
      <attachid>156993</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-07 13:55:11 -0700</bug_when>
    <thetext>Comment on attachment 156993
Patch

This looks OK to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689363</commentid>
    <comment_count>20</comment_count>
      <attachid>156993</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-08-07 14:08:14 -0700</bug_when>
    <thetext>Comment on attachment 156993
Patch

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

I agree with Eric but have 2 last comments that should be fixed.

&gt; Source/WebCore/rendering/RenderQuote.cpp:160
&gt; +        view()-&gt;setRenderQuoteHead(m_next);

See Eric&apos;s comment here, we should have:

ASSERT(!m_next || m_next-&gt;isAttached());

That will catch if we can have a potential dangling pointer in RenderView.

(setRenderQuoteHead could also have this ASSERT but it&apos;s difficult to implement with the current code and I don&apos;t think it&apos;s worth the effort)

&gt; Source/WebCore/rendering/RenderQuote.cpp:194
&gt; +    // FIXME: Don&apos;t dirty pref widths inside of layout because a parent may do
&gt; +    // setNeedsLayout(false) which would prevent the needed recalc. Instead use
&gt; +    // a pre-layout hook.

Setting the layout bit is what is screwing us here. However dirtying the preferred widths is also bad. I think mentioning both would be better:

// FIXME: Don&apos;t call setNeedsLayout or dirty our preferred widths during layout. This is likely to fail anyway as
// one of our ancestor will call setNeedsLayout(false), preventing the future layout to occur on |this|. The solution
// is to move that to a pre-layout phase.

(I know some people prefer the word phase as hook is too loaded)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689370</commentid>
    <comment_count>21</comment_count>
      <attachid>157000</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-07 14:15:49 -0700</bug_when>
    <thetext>Created attachment 157000
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689757</commentid>
    <comment_count>22</comment_count>
      <attachid>157000</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-07 19:16:31 -0700</bug_when>
    <thetext>Comment on attachment 157000
Patch for landing

Clearing flags on attachment: 157000

Committed r124969: &lt;http://trac.webkit.org/changeset/124969&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689758</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-07 19:16:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689889</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-07 22:26:34 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 93436</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689892</commentid>
    <comment_count>25</comment_count>
    <who name="Takashi Toyoshima">toyoshim</who>
    <bug_when>2012-08-07 22:28:32 -0700</bug_when>
    <thetext>I&apos;m sorry, but I&apos;ll revert this change because of assertion failure in Cr-Linux/Mac10.6/Win.

e.g.
crash log for DumpRenderTree (pid 3362):
STDOUT: &lt;empty&gt;
STDERR: ASSERTION FAILED: !m_previous || m_previous-&gt;m_attached
STDERR: /Volumes/data/b/build/slave/webkit-mac-latest-dbg/build/src/third_party/WebKit/Source/WebCore/WebCore.gyp/../rendering/RenderQuote.cpp(150) : void WebCore::RenderQuote::attachQuote()
STDERR: 1   0x5a5423f9 WebCore::RenderQuote::attachQuote()
STDERR: 2   0x5a541fb7 WebCore::RenderQuote::computePreferredLogicalWidths(float)
STDERR: 3   0x5a3c7374 WebCore::dirtyLineBoxesForRenderer(WebCore::RenderObject*, bool)
STDERR: 4   0x5a3c6910 WebCore::RenderBlock::layoutInlineChildren(bool, WebCore::FractionalLayoutUnit&amp;, WebCore::FractionalLayoutUnit&amp;)
STDERR: 5   0x5a34502b WebCore::RenderBlock::layoutBlock(bool, WebCore::FractionalLayoutUnit)
STDERR: 6   0x5a344135 WebCore::RenderBlock::layout()
STDERR: 7   0x5a35122d WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&amp;, WebCore::FractionalLayoutUnit&amp;, WebCore::FractionalLayoutUnit&amp;)
STDERR: 8   0x5a347a98 WebCore::RenderBlock::layoutBlockChildren(bool, WebCore::FractionalLayoutUnit&amp;)
STDERR: 9   0x5a345055 WebCore::RenderBlock::layoutBlock(bool, WebCore::FractionalLayoutUnit)
STDERR: 10  0x5a344135 WebCore::RenderBlock::layout()
STDERR: 11  0x5a35122d WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&amp;, WebCore::FractionalLayoutUnit&amp;, WebCore::FractionalLayoutUnit&amp;)
STDERR: 12  0x5a347a98 WebCore::RenderBlock::layoutBlockChildren(bool, WebCore::FractionalLayoutUnit&amp;)
STDERR: 13  0x5a345055 WebCore::RenderBlock::layoutBlock(bool, WebCore::FractionalLayoutUnit)
STDERR: 14  0x5a344135 WebCore::RenderBlock::layout()
STDERR: 15  0x5a5cfd7b WebCore::RenderView::layout()
STDERR: 16  0x5a15a20d WebCore::FrameView::layout(bool)
STDERR: 17  0x58c53b3f WebCore::Document::implicitClose()
STDERR: 18  0x59ff0ef2 WebCore::FrameLoader::checkCallImplicitClose()
STDERR: 19  0x59ff0a9e WebCore::FrameLoader::checkCompleted()
STDERR: 20  0x59fef5e3 WebCore::FrameLoader::finishedParsing()
STDERR: 21  0x58c62843 WebCore::Document::finishedParsing()
STDERR: 22  0x5927561e WebCore::HTMLTreeBuilder::finished()
STDERR: 23  0x59236da1 WebCore::HTMLDocumentParser::end()
STDERR: 24  0x59235b3f WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd()
STDERR: 25  0x5923587b WebCore::HTMLDocumentParser::prepareToStopParsing()
STDERR: 26  0x59236e25 WebCore::HTMLDocumentParser::attemptToEnd()
STDERR: 27  0x59236ea9 WebCore::HTMLDocumentParser::finish()
STDERR: 28  0x59fda5d5 WebCore::DocumentWriter::end()
STDERR: 29  0x59fbbf3c WebCore::DocumentLoader::finishedLoading()
STDERR: 30  0x5a01ab8b WebCore::MainResourceLoader::didFinishLoading(double)
STDERR: 31  0x5a03d33f WebCore::ResourceLoader::didFinishLoading(WebCore::ResourceHandle*, double)
STDERR: [3362:-1602484928:3517846309732:ERROR:process_util_posix.cc(143)] Received signal 11
STDERR: 	0   libbase.dylib                       0x60bac86f base::debug::StackTrace::StackTrace() + 63
STDERR: 	1   libbase.dylib                       0x60bac80b base::debug::StackTrace::StackTrace() + 43
STDERR: 	2   libbase.dylib                       0x60c7f457 base::(anonymous namespace)::StackDumpSignalHandler(int, __siginfo*, __darwin_ucontext*) + 295
STDERR: 	3   libSystem.B.dylib                   0x9539405b _sigtramp + 43
STDERR: 	4   ???                                 0xffffffff 0x0 + 4294967295
STDERR: 	5   libwebkit.dylib                     0x5a541fb7 WebCore::RenderQuote::computePreferredLogicalWidths(float) + 71
STDERR: 	6   libwebkit.dylib                     0x5a3c7374 WebCore::dirtyLineBoxesForRenderer(WebCore::RenderObject*, bool) + 164
STDERR: 	7   libwebkit.dylib                     0x5a3c6910 WebCore::RenderBlock::layoutInlineChildren(bool, WebCore::FractionalLayoutUnit&amp;, WebCore::FractionalLayoutUnit&amp;) + 1536
STDERR: 	8   libwebkit.dylib                     0x5a34502b WebCore::RenderBlock::layoutBlock(bool, WebCore::FractionalLayoutUnit) + 1755
STDERR: 	9   libwebkit.dylib                     0x5a344135 WebCore::RenderBlock::layout() + 149
STDERR: 	10  libwebkit.dylib                     0x5a35122d WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&amp;, WebCore::FractionalLayoutUnit&amp;, WebCore::FractionalLayoutUnit&amp;) + 1117
STDERR: 	11  libwebkit.dylib                     0x5a347a98 WebCore::RenderBlock::layoutBlockChildren(bool, WebCore::FractionalLayoutUnit&amp;) + 1560
STDERR: 	12  libwebkit.dylib                     0x5a345055 WebCore::RenderBlock::layoutBlock(bool, WebCore::FractionalLayoutUnit) + 1797
STDERR: 	13  libwebkit.dylib                     0x5a344135 WebCore::RenderBlock::layout() + 149
STDERR: 	14  libwebkit.dylib                     0x5a35122d WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&amp;, WebCore::FractionalLayoutUnit&amp;, WebCore::FractionalLayoutUnit&amp;) + 1117
STDERR: 	15  libwebkit.dylib                     0x5a347a98 WebCore::RenderBlock::layoutBlockChildren(bool, WebCore::FractionalLayoutUnit&amp;) + 1560
STDERR: 	16  libwebkit.dylib                     0x5a345055 WebCore::RenderBlock::layoutBlock(bool, WebCore::FractionalLayoutUnit) + 1797
STDERR: 	17  libwebkit.dylib                     0x5a344135 WebCore::RenderBlock::layout() + 149
STDERR: 	18  libwebkit.dylib                     0x5a5cfd7b WebCore::RenderView::layout() + 1211
STDERR: 	19  libwebkit.dylib                     0x5a15a20d WebCore::FrameView::layout(bool) + 3677
STDERR: 	20  libwebkit.dylib                     0x58c53b3f WebCore::Document::implicitClose() + 1071
STDERR: 	21  libwebkit.dylib                     0x59ff0ef2 WebCore::FrameLoader::checkCallImplicitClose() + 178
STDERR: 	22  libwebkit.dylib                     0x59ff0a9e WebCore::FrameLoader::checkCompleted() + 366
STDERR: 	23  libwebkit.dylib                     0x59fef5e3 WebCore::FrameLoader::finishedParsing() + 195
STDERR: 	24  libwebkit.dylib                     0x58c62843 WebCore::Document::finishedParsing() + 659
STDERR: 	25  libwebkit.dylib                     0x5927561e WebCore::HTMLTreeBuilder::finished() + 190
STDERR: 	26  libwebkit.dylib                     0x59236da1 WebCore::HTMLDocumentParser::end() + 289
STDERR: 	27  libwebkit.dylib                     0x59235b3f WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd() + 335
STDERR: 	28  libwebkit.dylib                     0x5923587b WebCore::HTMLDocumentParser::prepareToStopParsing() + 315
STDERR: 	29  libwebkit.dylib                     0x59236e25 WebCore::HTMLDocumentParser::attemptToEnd() + 85
STDERR: 	30  libwebkit.dylib                     0x59236ea9 WebCore::HTMLDocumentParser::finish() + 89
STDERR: 	31  libwebkit.dylib                     0x59fda5d5 WebCore::DocumentWriter::end() + 437
STDERR: 	32  libwebkit.dylib                     0x59fbbf3c WebCore::DocumentLoader::finishedLoading() + 236
STDERR: 	33  libwebkit.dylib                     0x5a01ab8b WebCore::MainResourceLoader::didFinishLoading(double) + 315
STDERR: 	34  libwebkit.dylib                     0x5a03d33f WebCore::ResourceLoader::didFinishLoading(WebCore::ResourceHandle*, double) + 79
STDERR: 	35  libwebkit.dylib                     0x59554e17 WebCore::ResourceHandleInternal::didFinishLoading(WebKit::WebURLLoader*, double) + 295
STDERR: 	36  libglue.dylib                       0x638812fd webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest(net::URLRequestStatus const&amp;, std::string const&amp;, base::TimeTicks const&amp;) + 1197
STDERR: 	37  DumpRenderTree                      0x5725b28d (anonymous namespace)::RequestProxy::NotifyCompletedRequest(net::URLRequestStatus const&amp;, std::string const&amp;, base::TimeTicks const&amp;) + 109
STDERR: 	38  DumpRenderTree                      0x5725bab5 base::internal::RunnableAdapter&lt;void ((anonymous namespace)::RequestProxy::*)(net::URLRequestStatus const&amp;, std::string const&amp;, base::TimeTicks const&amp;)&gt;::Run((anonymous namespace)::RequestProxy*, net::URLRequestStatus const&amp;, std::string const&amp;, base::TimeTicks const&amp;) + 213
STDERR: 	39  DumpRenderTree                      0x5725b9b6 base::internal::InvokeHelper&lt;false, void, base::internal::RunnableAdapter&lt;void ((anonymous namespace)::RequestProxy::*)(net::URLRequestStatus const&amp;, std::string const&amp;, base::TimeTicks const&amp;)&gt;, void ()((anonymous namespace)::RequestProxy* const&amp;, net::URLRequestStatus const&amp;, std::string const&amp;, base::TimeTicks const&amp;)&gt;::MakeItSo(base::internal::RunnableAdapter&lt;void ((anonymous namespace)::RequestProxy::*)(net::URLRequestStatus const&amp;, std::string const&amp;, base::TimeTicks const&amp;)&gt;, (anonymous namespace)::RequestProxy* const&amp;, net::URLRequestStatus const&amp;, std::string const&amp;, base::TimeTicks const&amp;) + 150
STDERR: 	40  DumpRenderTree                      0x5725b8f5 base::internal::Invoker&lt;4, base::internal::BindState&lt;base::internal::RunnableAdapter&lt;void ((anonymous namespace)::RequestProxy::*)(net::URLRequestStatus const&amp;, std::string const&amp;, base::TimeTicks const&amp;)&gt;, void ()((anonymous namespace)::RequestProxy*, net::URLRequestStatus const&amp;, std::string const&amp;, base::TimeTicks const&amp;), void ()((anonymous namespace)::RequestProxy*, net::URLRequestStatus, std::string, base::TimeTicks)&gt;, void ()((anonymous namespace)::RequestProxy*, net::URLRequestStatus const&amp;, std::string const&amp;, base::TimeTicks const&amp;)&gt;::Run(base::internal::BindStateBase*) + 229
STDERR: 	41  libbase.dylib                       0x60b9c7ab base::Callback&lt;void ()()&gt;::Run() const + 75
STDERR: 	42  libbase.dylib                       0x60c26718 MessageLoop::RunTask(base::PendingTask const&amp;) + 856
STDERR: 	43  libbase.dylib                       0x60c26ac2 MessageLoop::DeferOrRunPendingTask(base::PendingTask const&amp;) + 98
STDERR: 	44  libbase.dylib                       0x60c26d02 MessageLoop::DoWork() + 322
STDERR: 	45  libbase.dylib                       0x60b7b14b base::MessagePumpCFRunLoopBase::RunWork() + 107
STDERR: 	46  libbase.dylib                       0x60b7a912 base::MessagePumpCFRunLoopBase::RunWorkSource(void*) + 50
STDERR: 	47  CoreFoundation                      0x9072542b __CFRunLoopDoSources0 + 1563
STDERR: 	48  CoreFoundation                      0x90722eef __CFRunLoopRun + 1071
STDERR: 	49  CoreFoundation                      0x907223c4 CFRunLoopRunSpecific + 452
STDERR: 	50  CoreFoundation                      0x907221f1 CFRunLoopRunInMode + 97
STDERR: 	51  HIToolbox                           0x92d14e04 RunCurrentEventLoopInMode + 392
STDERR: 	52  HIToolbox                           0x92d14bb9 ReceiveNextEventCommon + 354
STDERR: 	53  HIToolbox                           0x92d14a3e BlockUntilNextEventMatchingListInMode + 81
STDERR: 	54  AppKit                              0x993a1595 _DPSNextEvent + 847
STDERR: 	55  AppKit                              0x993a0dd6 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
STDERR: 	56  AppKit                              0x993631f3 -[NSApplication run] + 821
STDERR: 	57  libbase.dylib                       0x60b7c07e base::MessagePumpNSApplication::DoRun(base::MessagePump::Delegate*) + 350
STDERR: 	58  libbase.dylib                       0x60b7aeb8 base::MessagePumpCFRunLoopBase::Run(base::MessagePump::Delegate*) + 104
STDERR: 	59  libbase.dylib                       0x60c26072 MessageLoop::RunInternal() + 290
STDERR: 	60  libbase.dylib                       0x60c25f2b MessageLoop::RunHandler() + 43
STDERR: 	61  libbase.dylib                       0x60c8b2f8 base::RunLoop::Run() + 72
STDERR: ax: bbadbeef, bx: 1, cx: 2d97292e, dx: 2d97292e
STDERR: di: 5ae7962f, si: 5ae795e1, bp: bfffb508, sp: bfffb4c0, ss: 23, flags: 210286
STDERR: ip: 5a542403, cs: 1b, ds: 23, es: 23, fs: 0, gs: f</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689961</commentid>
    <comment_count>26</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-07 23:25:10 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; I&apos;m sorry, but I&apos;ll revert this change because of assertion failure in Cr-Linux/Mac10.6/Win.
&gt; 
&gt; e.g.
&gt; crash log for DumpRenderTree (pid 3362):
&gt; STDOUT: &lt;empty&gt;
&gt; STDERR: ASSERTION FAILED: !m_previous || m_previous-&gt;m_attached

Which test was this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690006</commentid>
    <comment_count>27</comment_count>
    <who name="Takashi Toyoshima">toyoshim</who>
    <bug_when>2012-08-08 00:17:22 -0700</bug_when>
    <thetext>fast/table/crash-section-logical-height-changed-needsCellRecalc.html is the one which crashes after this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690007</commentid>
    <comment_count>28</comment_count>
    <who name="Takashi Toyoshima">toyoshim</who>
    <bug_when>2012-08-08 00:18:42 -0700</bug_when>
    <thetext>http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=fast%2Ftable%2Fcrash-section-logical-height-changed-needsCellRecalc.html

Linux build looks running without crash for now.
But, Mac10.6 and Win still continue to crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691053</commentid>
    <comment_count>29</comment_count>
      <attachid>157358</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-08 18:19:36 -0700</bug_when>
    <thetext>Created attachment 157358
Patch

Recursively attach the previous quote.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691055</commentid>
    <comment_count>30</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-08 18:22:09 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Created an attachment (id=157358) [details]
&gt; Patch
&gt; 
&gt; Recursively attach the previous quote.

@Eric I thought about this more and I think we can recursively attach the previous instead of skipping. This also lets you avoid walking the list to compute the depths repeatedly as things in the middle become attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691294</commentid>
    <comment_count>31</comment_count>
      <attachid>157358</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-09 00:32:29 -0700</bug_when>
    <thetext>Comment on attachment 157358
Patch

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

&gt; Source/WebCore/rendering/RenderQuote.cpp:151
&gt; +        m_previous-&gt;attachQuote();

We may need to consider writing this as a loop to avoid any chance of blowing out the stack, since the number of nodes in a document is unlimited.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691620</commentid>
    <comment_count>32</comment_count>
      <attachid>157495</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-09 11:24:43 -0700</bug_when>
    <thetext>Created attachment 157495
Patch

Skip unattached quotes. We could rewrite that code as a loop, but it adds complexity and I dont think the performance benefit of skipping updates matters. We need to remove the quote depth updates eventually anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691704</commentid>
    <comment_count>33</comment_count>
      <attachid>157495</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-09 12:48:31 -0700</bug_when>
    <thetext>Comment on attachment 157495
Patch

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

Looks OK.

&gt; Source/WebCore/rendering/RenderQuote.cpp:130
&gt; +    for (RenderObject* predecessor = previousInPreOrder(); predecessor; predecessor = predecessor-&gt;previousInPreOrder()) {

Wow, so this will end up walking all the way back through the rendering tree. That seems expensive. :)  Thankfully we only do this when we know there is already a quote in the doc.

&gt; Source/WebCore/rendering/RenderQuote.cpp:131
&gt; +        if (!predecessor-&gt;isQuote() || !toRenderQuote(predecessor)-&gt;m_attached)

Presumably a (private) accessor would be better than grabbing at a private member here, but it doens&apos;t really matter.

I also would have added a small comment about *why* we skip un-attached quotes.

&gt; Source/WebCore/rendering/RenderQuote.h:53
&gt;      int m_depth;
&gt;      RenderQuote* m_next;
&gt;      RenderQuote* m_previous;
&gt; -    void placeQuote();
&gt; +    bool m_attached;

Do we care about the size of this object?  Should we be stealing a bit from m_depth to use for m_attached?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691740</commentid>
    <comment_count>34</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-09 13:18:18 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 157495 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=157495&amp;action=review
&gt; ..
&gt; &gt; Source/WebCore/rendering/RenderQuote.cpp:130
&gt; &gt; +    for (RenderObject* predecessor = previousInPreOrder(); predecessor; predecessor = predecessor-&gt;previousInPreOrder()) {
&gt; 
&gt; Wow, so this will end up walking all the way back through the rendering tree. That seems expensive. :)  Thankfully we only do this when we know there is already a quote in the doc.

Yup. That&apos;s why I wanted to start using that bit for counters in RenderObject to mark the existence of generated content so we can walk parents avoiding sections of the tree that have no content.

I guess we could do this during style resolve instead?

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderQuote.h:53
&gt; &gt;      int m_depth;
&gt; &gt;      RenderQuote* m_next;
&gt; &gt;      RenderQuote* m_previous;
&gt; &gt; -    void placeQuote();
&gt; &gt; +    bool m_attached;
&gt; 
&gt; Do we care about the size of this object?  Should we be stealing a bit from m_depth to use for m_attached?

These things are so rare I&apos;d rather the code was obvious. I guess we could go back to using -1?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691743</commentid>
    <comment_count>35</comment_count>
      <attachid>157525</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-08-09 13:20:23 -0700</bug_when>
    <thetext>Created attachment 157525
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691978</commentid>
    <comment_count>36</comment_count>
      <attachid>157525</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-09 16:35:00 -0700</bug_when>
    <thetext>Comment on attachment 157525
Patch for landing

Clearing flags on attachment: 157525

Committed r125220: &lt;http://trac.webkit.org/changeset/125220&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691979</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-09 16:35:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156244</attachid>
            <date>2012-08-02 19:44:14 -0700</date>
            <delta_ts>2012-08-06 10:21:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93056-20120802194354.patch</filename>
            <type>text/plain</type>
            <size>18668</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNiMTk0ZTE1MTBlYTQ4
ODJlN2NkNTUyOWI5YjhiYmRiN2VjMWM0ZC4uNTk2Y2YzNDk5ZmU3NWMzYTk2YjBiY2Y2YmYwOGVl
NThmODM5MTFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTA4LTAyICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIFJlaW1wbGVtZW50IFJl
bmRlclF1b3RlIHBsYWNlbWVudCBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgR3JlYXRseSBzaW1wbGlmeSB0aGUgY29kZSB0aGF0IG1haW50
YWlucyB0aGUgbGlua2VkIGxpc3Qgb2YgUmVuZGVyUXVvdGVzLiBOb3cgUmVuZGVyUXVvdGUKKyAg
ICAgICAgaXMgcGxhY2VkIGludG8gdGhlIGxpbmtlZCBsaXN0IGluIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzIG9uIGZpcnN0IGFjY2VzcyBhbmQgaXMKKyAgICAgICAgZGV0YWNoZWQgd2hl
biBkZXN0cm95ZWQgKG9yIGV4cGxpY2l0bHkgcmVtb3ZlZCkuCisKKyAgICAgICAgVGhlIG5ldyBh
bGdvcml0aG0gZG9lc24ndCByZXF1aXJlIHdhbGtpbmcgdXAgdGhlIHRyZWUgb2YgcmVuZGVyZXJz
IHdoZW4gdGhlcmUgYXJlIG5vCisgICAgICAgIFJlbmRlclF1b3RlcyBpbiB0aGUgdHJlZSB5ZXQs
IGFuZCBhbHNvIHJlbW92ZXMgdGhlIG5lZWQgdG8gd2FsayBvdmVyIGV2ZXJ5IHN1YnRyZWUKKyAg
ICAgICAgd2hlbiBpbnNlcnRpbmcgaW4gcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnkgYmVo
YXZpb3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdENoaWxkTGlzdDo6YXBwZW5kQ2hpbGRO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdENoaWxkTGlzdDo6aW5zZXJ0Q2hp
bGROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUXVvdGU6OlJlbmRlclF1b3RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclF1b3RlOjp+UmVuZGVyUXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6
OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6b3JpZ2lu
YWxUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjpjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6c3R5bGVEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90
ZTo6YXR0YWNoUXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6OmRldGFjaFF1
b3RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjp1cGRhdGVEZXB0aCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclF1b3RlLmg6CisgICAgICAgIChSZW5kZXJRdW90ZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2V0UmVu
ZGVyUXVvdGVIZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnJlbmRlclF1b3Rl
SGVhZCk6CisgICAgICAgIChSZW5kZXJWaWV3KToKKwogMjAxMi0wOC0wMiAgS2Vpc2hpIEhhdHRv
cmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBTbGlkZXIgc2hvdWxkIHNuYXAgdG8g
ZGF0YWxpc3QgdGljayBtYXJrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAppbmRleCBkYTk4MDg4ZTIxNTYzNTY3Mjk0YzY2YzEzNzM5
OTQ1YTkzNDViODc2Li4wYmZiZDE2OGEwMjA4ZjA3MTQ0NDNjMTVkMTRkYmE4YzcxMTJlMTM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
LmNwcApAQCAtMTE3LDYgKzExNyw5IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgICAg
IGlmIChvbGRDaGlsZC0+aXNSZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVn
aW9uKG9sZENoaWxkKS0+ZGV0YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgaWYgKG9sZENoaWxkLT5p
c1F1b3RlKCkpCisgICAgICAgICAgICB0b1JlbmRlclF1b3RlKG9sZENoaWxkKS0+ZGV0YWNoUXVv
dGUoKTsKKwogICAgICAgICBpZiAob2xkQ2hpbGQtPmluUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAg
ICAgICAgICAgICBpZiAob2xkQ2hpbGQtPmlzQm94KCkpCiAgICAgICAgICAgICAgICAgb2xkQ2hp
bGQtPmVuY2xvc2luZ1JlbmRlckZsb3dUaHJlYWQoKS0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5m
byh0b1JlbmRlckJveChvbGRDaGlsZCkpOwpAQCAtMTU4LDcgKzE2MSw2IEBAIFJlbmRlck9iamVj
dCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBv
d25lciwgUmVuZGVyCiAgICAgLy8gYnkgc2tpcHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVzdHJveWlu
ZyB0aGUgZW50aXJlIHRyZWUuCiAgICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3ll
ZCgpKSB7CiAgICAgICAgIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9s
ZENoaWxkKTsKLSAgICAgICAgUmVuZGVyUXVvdGU6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9s
ZENoaWxkKTsKICAgICB9CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVu
YWJsZWQoKSkKQEAgLTIxNiw3ICsyMTgsNiBAQCB2b2lkIFJlbmRlck9iamVjdENoaWxkTGlzdDo6
YXBwZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCogb3duZXIsIFJlbmRlck9iamVjdCogbgogCiAg
ICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJlbmRl
ckNvdW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKG5ld0NoaWxkKTsKLSAgICAgICAgUmVu
ZGVyUXVvdGU6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKG5ld0NoaWxkKTsKICAgICB9CiAgICAg
bmV3Q2hpbGQtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOyAvLyBHb2VzIHVw
IHRoZSBjb250YWluaW5nIGJsb2NrIGhpZXJhcmNoeS4KICAgICBpZiAoIW93bmVyLT5ub3JtYWxD
aGlsZE5lZWRzTGF5b3V0KCkpCkBAIC0yODUsNyArMjg2LDYgQEAgdm9pZCBSZW5kZXJPYmplY3RD
aGlsZExpc3Q6Omluc2VydENoaWxkTm9kZShSZW5kZXJPYmplY3QqIG93bmVyLCBSZW5kZXJPYmpl
Y3QqIGMKIAogICAgIGlmICghb3duZXItPmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgewogICAg
ICAgICBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN1YnRyZWVBdHRhY2hlZChjaGlsZCk7Ci0gICAg
ICAgIFJlbmRlclF1b3RlOjpyZW5kZXJlclN1YnRyZWVBdHRhY2hlZChjaGlsZCk7CiAgICAgfQog
ICAgIGNoaWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBpZiAo
IW93bmVyLT5ub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclF1b3RlLmNwcAppbmRleCA3ZjFkNzQ5YjEyZWZiNzhmY2E2NzA2NDBhZDNiZDUzNDM1
Zjk2ZmIyLi5iZmVmMDU4ZTkxNDg5MTlhNDU2ZjhhM2EwMzM1MTg2ZTE0ZGJlNDNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKQEAgLTIxLDExOSArMjEsMzUgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJRdW90ZS5oIgogCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJRdW90ZXNEYXRhLmgiCi0jaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAotI2RlZmluZSBV
TktOT1dOX0RFUFRIIC0xCisjZGVmaW5lIFUoeCkgKChjb25zdCBVQ2hhciopTCMjeCkKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewotc3RhdGljIGlubGluZSB2b2lkIGFkanVzdERlcHRoKGludCAmZGVw
dGgsIFF1b3RlVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgT1BF
Tl9RVU9URToKLSAgICBjYXNlIE5PX09QRU5fUVVPVEU6Ci0gICAgICAgICsrZGVwdGg7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ0xPU0VfUVVPVEU6Ci0gICAgY2FzZSBOT19DTE9TRV9RVU9U
RToKLSAgICAgICAgaWYgKGRlcHRoKQotICAgICAgICAgICAgLS1kZXB0aDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQot
fQogCiBSZW5kZXJRdW90ZTo6UmVuZGVyUXVvdGUoRG9jdW1lbnQqIG5vZGUsIFF1b3RlVHlwZSBx
dW90ZSkKICAgICA6IFJlbmRlclRleHQobm9kZSwgU3RyaW5nSW1wbDo6ZW1wdHkoKSkKICAgICAs
IG1fdHlwZShxdW90ZSkKLSAgICAsIG1fZGVwdGgoVU5LTk9XTl9ERVBUSCkKKyAgICAsIG1fZGVw
dGgoMCkKICAgICAsIG1fbmV4dCgwKQogICAgICwgbV9wcmV2aW91cygwKQorICAgICwgbV9hdHRh
Y2hlZChmYWxzZSkKIHsKLSAgICB2aWV3KCktPmFkZFJlbmRlclF1b3RlKCk7CiB9CiAKIFJlbmRl
clF1b3RlOjp+UmVuZGVyUXVvdGUoKQogeworICAgIEFTU0VSVCghbV9hdHRhY2hlZCk7CisgICAg
QVNTRVJUKCFtX25leHQgJiYgIW1fcHJldmlvdXMpOwogfQogCiB2b2lkIFJlbmRlclF1b3RlOjp3
aWxsQmVEZXN0cm95ZWQoKQogewotICAgIGlmICh2aWV3KCkpCi0gICAgICAgIHZpZXcoKS0+cmVt
b3ZlUmVuZGVyUXVvdGUoKTsKKyAgICBpZiAobV9hdHRhY2hlZCkKKyAgICAgICAgZGV0YWNoUXVv
dGUoKTsKICAgICBSZW5kZXJUZXh0Ojp3aWxsQmVEZXN0cm95ZWQoKTsKIH0KIAotY29uc3QgY2hh
ciogUmVuZGVyUXVvdGU6OnJlbmRlck5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiUmVuZGVy
UXVvdGUiOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIHBsYWNlcyBhIGxpc3Qgb2YgcXVvdGUgcmVu
ZGVyZXJzIHN0YXJ0aW5nIGF0ICJ0aGlzIiBpbiB0aGUgbGlzdCBvZiBxdW90ZSByZW5kZXJlcnMg
YWxyZWFkeQotLy8gaW4gdGhlIGRvY3VtZW50J3MgcmVuZGVyZXIgdHJlZS4KLS8vIFRoZSBhc3N1
bXB0aW9ucyBhcmUgbWFkZSAoZm9yIHBlcmZvcm1hbmNlKToKLS8vIDEuIFRoZSBsaXN0IG9mIHF1
b3RlcyBhbHJlYWR5IGluIHRoZSByZW5kZXJlcnMgdHJlZSBvZiB0aGUgZG9jdW1lbnQgaXMgYWxy
ZWFkeSBpbiBhIGNvbnNpc3RlbnQgc3RhdGUKLS8vIChBbGwgcXVvdGUgcmVuZGVyZXJzIGFyZSBs
aW5rZWQgYW5kIGhhdmUgdGhlIGNvcnJlY3QgZGVwdGggc2V0KQotLy8gMi4gVGhlIHF1b3RlIHJl
bmRlcmVycyBvZiB0aGUgaW5zZXJ0ZWQgbGlzdCBhcmUgaW4gYSB0cmVlIG9mIHJlbmRlcmVycyBv
ZiB0aGVpciBvd24gd2hpY2ggaGFzIGJlZW4ganVzdAotLy8gaW5zZXJ0ZWQgaW4gdGhlIG1haW4g
cmVuZGVyZXIgdHJlZSB3aXRoIGl0cyByb290IGFzIGNoaWxkIG9mIHNvbWUgcmVuZGVyZXIuCi0v
LyAzLiBUaGUgcXVvdGUgcmVuZGVyZXJzIGluIHRoZSBpbnNlcnRlZCBsaXN0IGhhdmUgZGVwdGhz
IGNvbnNpc3RlbnQgd2l0aCB0aGVpciBwb3NpdGlvbiBpbiB0aGUgbGlzdCByZWxhdGl2ZQotLy8g
dG8gInRoaXMiLCB0aHVzIGlmICJ0aGlzIiBkb2VzIG5vdCBuZWVkIHRvIGNoYW5nZSBpdHMgZGVw
dGggdXBvbiBpbnNlcnRpb24sIHRoZSBvdGhlciByZW5kZXJlcnMgaW4gdGhlIGxpc3QgZG9uJ3QK
LS8vIG5lZWQgdG8gZWl0aGVyLgotdm9pZCBSZW5kZXJRdW90ZTo6cGxhY2VRdW90ZSgpCi17Ci0g
ICAgUmVuZGVyUXVvdGUqIGhlYWQgPSB0aGlzOwotICAgIEFTU0VSVCghaGVhZC0+bV9wcmV2aW91
cyk7Ci0gICAgUmVuZGVyUXVvdGUqIHRhaWwgPSAwOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBw
cmVkZWNlc3NvciA9IGhlYWQtPnByZXZpb3VzSW5QcmVPcmRlcigpOyBwcmVkZWNlc3NvcjsgcHJl
ZGVjZXNzb3IgPSBwcmVkZWNlc3Nvci0+cHJldmlvdXNJblByZU9yZGVyKCkpIHsKLSAgICAgICAg
aWYgKCFwcmVkZWNlc3Nvci0+aXNRdW90ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGhlYWQtPm1fcHJldmlvdXMgPSB0b1JlbmRlclF1b3RlKHByZWRlY2Vzc29yKTsKLSAgICAg
ICAgaWYgKGhlYWQtPm1fcHJldmlvdXMtPm1fbmV4dCkgewotICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBzcGxpY2UgdGhlIGxpc3Qgb2YgcXVvdGVzIGhlYWRlZCBieSBoZWFkIGludG8gdGhlIGRv
Y3VtZW50J3MgbGlzdCBvZiBxdW90ZXMuCi0gICAgICAgICAgICB0YWlsID0gaGVhZDsKLSAgICAg
ICAgICAgIHdoaWxlICh0YWlsLT5tX25leHQpCi0gICAgICAgICAgICAgICAgIHRhaWwgPSB0YWls
LT5tX25leHQ7Ci0gICAgICAgICAgICB0YWlsLT5tX25leHQgPSBoZWFkLT5tX3ByZXZpb3VzLT5t
X25leHQ7Ci0gICAgICAgICAgICBBU1NFUlQodGFpbC0+bV9uZXh0LT5tX3ByZXZpb3VzID09IGhl
YWQtPm1fcHJldmlvdXMpOwotICAgICAgICAgICAgdGFpbC0+bV9uZXh0LT5tX3ByZXZpb3VzID0g
IHRhaWw7Ci0gICAgICAgICAgICB0YWlsID0gdGFpbC0+bV9uZXh0OyAvLyBUaGlzIG1hcmtzIHRo
ZSBzcGxpY2luZyBwb2ludCBoZXJlIHRoZXJlIG1heSBiZSBhIGRlcHRoIGRpc2NvbnRpbnVpdHkK
LSAgICAgICAgfQotICAgICAgICBoZWFkLT5tX3ByZXZpb3VzLT5tX25leHQgPSBoZWFkOwotICAg
ICAgICBBU1NFUlQoaGVhZC0+bV9wcmV2aW91cy0+bV9kZXB0aCAhPSBVTktOT1dOX0RFUFRIKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGludCBuZXdEZXB0aDsKLSAgICBpZiAoIWhlYWQt
Pm1fcHJldmlvdXMpIHsKLSAgICAgICAgbmV3RGVwdGggPSAwOwotICAgICAgICBnb3RvIHNraXBO
ZXdEZXB0aENhbGM7Ci0gICAgfQotICAgIG5ld0RlcHRoID0gaGVhZC0+bV9wcmV2aW91cy0+bV9k
ZXB0aDsKLSAgICBkbyB7Ci0gICAgICAgIGFkanVzdERlcHRoKG5ld0RlcHRoLCBoZWFkLT5tX3By
ZXZpb3VzLT5tX3R5cGUpOwotc2tpcE5ld0RlcHRoQ2FsYzoKLSAgICAgICAgaWYgKGhlYWQtPm1f
ZGVwdGggPT0gbmV3RGVwdGgpIHsgLy8gQWxsIHJlbWFpbmluZyBkZXB0aCBzaG91bGQgYmUgY29y
cmVjdCBleGNlcHQgaWYgc3BsaWNpbmcgd2FzIGRvbmUuCi0gICAgICAgICAgICBpZiAoIXRhaWwp
IC8vIFdlJ3ZlIGRvbmUgdGhlIHBvc3Qgc3BsaWNpbmcgc2VjdGlvbiBhbHJlYWR5IG9yIHRoZXJl
IHdhcyBubyBzcGxpY2luZy4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGhl
YWQgPSB0YWlsOyAvLyBDb250aW51ZSBhZnRlciB0aGUgc3BsaWNpbmcgcG9pbnQKLSAgICAgICAg
ICAgIHRhaWwgPSAwOyAvLyBNYXJrIHRoZSBwb3NzaWJsZSBzcGxpY2luZyBwb2ludCBkaXNjb250
aW51aXR5IGZpeGVkLgotICAgICAgICAgICAgbmV3RGVwdGggPSBoZWFkLT5tX3ByZXZpb3VzLT5t
X2RlcHRoOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaGVhZC0+
bV9kZXB0aCA9IG5ld0RlcHRoOwotICAgICAgICAvLyBGSVhNRTogSWYgdGhlIHdpZHRoIGFuZCBo
ZWlnaHQgb2YgdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIGRvZXMgbm90IGNoYW5nZSB3ZSBtYXkg
b25seSBuZWVkIHRvCi0gICAgICAgIC8vIEludmFsaWRhdGUgdGhlIHJlbmRlcmVyJ3MgYXJlYSBu
b3QgYSByZWxheW91dC4KLSAgICAgICAgaGVhZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7Ci0gICAgICAgIGhlYWQgPSBoZWFkLT5tX25leHQ7Ci0gICAgICAgIGlmIChoZWFk
ID09IHRhaWwpIC8vIFdlIGFyZSBhdCB0aGUgc3BsaWNpbmcgcG9pbnQKLSAgICAgICAgICAgIHRh
aWwgPSAwOyAvLyBNYXJrIHRoZSBwb3NzaWJsZSBkZXB0aCBkaXNjb250aW51aXR5IGZpeGVkLgot
ICAgIH0gd2hpbGUgKGhlYWQpOwotfQotCi0jZGVmaW5lIFUoeCkgKChjb25zdCBVQ2hhciopTCMj
eCkKLQogdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgY29uc3QgUXVvdGVzRGF0YSosIENh
c2VGb2xkaW5nSGFzaD4gUXVvdGVzTWFwOwogCiBzdGF0aWMgY29uc3QgUXVvdGVzTWFwJiBxdW90
ZXNEYXRhTGFuZ3VhZ2VNYXAoKQpAQCAtMTU3LDI3ICs3MywyNCBAQCBzdGF0aWMgY29uc3QgUXVv
dGVzRGF0YSogYmFzaWNRdW90ZXNEYXRhKCkKIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBSZW5k
ZXJRdW90ZTo6b3JpZ2luYWxUZXh0KCkgY29uc3QKIHsKLSAgICBpZiAoIXBhcmVudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQobV9kZXB0aCAhPSBVTktOT1dOX0RFUFRIKTsKLSAg
ICBjb25zdCBRdW90ZXNEYXRhKiBxdW90ZXMgPSBxdW90ZXNEYXRhKCk7CiAgICAgc3dpdGNoICht
X3R5cGUpIHsKICAgICBjYXNlIE5PX09QRU5fUVVPVEU6CiAgICAgY2FzZSBOT19DTE9TRV9RVU9U
RToKICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAgY2FzZSBDTE9TRV9R
VU9URToKICAgICAgICAgLy8gRklYTUU6IFdoZW4gbV9kZXB0aCBpcyAwIHdlIHNob3VsZCByZXR1
cm4gZW1wdHkgc3RyaW5nLgotICAgICAgICByZXR1cm4gcXVvdGVzLT5nZXRDbG9zZVF1b3RlKHN0
ZDo6bWF4KG1fZGVwdGggLSAxLCAwKSkuaW1wbCgpOworICAgICAgICByZXR1cm4gcXVvdGVzRGF0
YSgpLT5nZXRDbG9zZVF1b3RlKHN0ZDo6bWF4KG1fZGVwdGggLSAxLCAwKSkuaW1wbCgpOwogICAg
IGNhc2UgT1BFTl9RVU9URToKLSAgICAgICAgcmV0dXJuIHF1b3Rlcy0+Z2V0T3BlblF1b3RlKG1f
ZGVwdGgpLmltcGwoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIHJldHVybiBx
dW90ZXNEYXRhKCktPmdldE9wZW5RdW90ZShtX2RlcHRoKS5pbXBsKCk7CiAgICAgfQorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwogfQog
CiB2b2lkIFJlbmRlclF1b3RlOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBs
ZWFkKQogeworICAgIGlmICghbV9hdHRhY2hlZCkKKyAgICAgICAgYXR0YWNoUXVvdGUoKTsKICAg
ICBzZXRUZXh0SW50ZXJuYWwob3JpZ2luYWxUZXh0KCkpOwogICAgIFJlbmRlclRleHQ6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGxlYWQpOwogfQpAQCAtMTk2LDU4ICsxMDksODggQEAg
Y29uc3QgUXVvdGVzRGF0YSogUmVuZGVyUXVvdGU6OnF1b3Rlc0RhdGEoKSBjb25zdAogICAgIHJl
dHVybiBxdW90ZXM7CiB9CiAKLXZvaWQgUmVuZGVyUXVvdGU6OnJlbmRlcmVyU3VidHJlZUF0dGFj
aGVkKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit2b2lkIFJlbmRlclF1b3RlOjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQor
eworICAgIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBj
b25zdCBRdW90ZXNEYXRhKiBuZXdRdW90ZXMgPSBzdHlsZSgpLT5xdW90ZXMoKTsKKyAgICBjb25z
dCBRdW90ZXNEYXRhKiBvbGRRdW90ZXMgPSBvbGRTdHlsZSA/IG9sZFN0eWxlLT5xdW90ZXMoKSA6
IDA7CisgICAgaWYgKCFRdW90ZXNEYXRhOjplcXVhbHMobmV3UXVvdGVzLCBvbGRRdW90ZXMpKQor
ICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKK30KKwordm9pZCBS
ZW5kZXJRdW90ZTo6YXR0YWNoUXVvdGUoKQogewotICAgIEFTU0VSVChyZW5kZXJlci0+dmlldygp
KTsKLSAgICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhhc1JlbmRlclF1b3RlcygpKQorICAgIEFT
U0VSVCh2aWV3KCkpOworICAgIEFTU0VSVCghbV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX25l
eHQgJiYgIW1fcHJldmlvdXMpOworCisgICAgaWYgKCF2aWV3KCktPnJlbmRlclF1b3RlSGVhZCgp
KSB7CisgICAgICAgIHZpZXcoKS0+c2V0UmVuZGVyUXVvdGVIZWFkKHRoaXMpOworICAgICAgICBt
X2F0dGFjaGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBkZXNjZW5kYW50ID0gcmVuZGVyZXI7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5k
YW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikpCi0gICAgICAgIGlmIChkZXNjZW5kYW50LT5p
c1F1b3RlKCkpIHsKLSAgICAgICAgICAgIHRvUmVuZGVyUXVvdGUoZGVzY2VuZGFudCktPnBsYWNl
UXVvdGUoKTsKKyAgICB9CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBw
cmV2aW91c0luUHJlT3JkZXIoKTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNz
b3ItPnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3Nvci0+aXNR
dW90ZSgpKSB7CisgICAgICAgICAgICBtX3ByZXZpb3VzID0gdG9SZW5kZXJRdW90ZShwcmVkZWNl
c3Nvcik7CisgICAgICAgICAgICBtX25leHQgPSBtX3ByZXZpb3VzLT5tX25leHQ7CisgICAgICAg
ICAgICBtX3ByZXZpb3VzLT5tX25leHQgPSB0aGlzOworICAgICAgICAgICAgaWYgKG1fbmV4dCkK
KyAgICAgICAgICAgICAgICBtX25leHQtPm1fcHJldmlvdXMgPSB0aGlzOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fcHJldmlvdXMpIHsKKyAgICAg
ICAgbV9uZXh0ID0gdmlldygpLT5yZW5kZXJRdW90ZUhlYWQoKTsKKyAgICAgICAgdmlldygpLT5z
ZXRSZW5kZXJRdW90ZUhlYWQodGhpcyk7CisgICAgfQorICAgIG1fYXR0YWNoZWQgPSB0cnVlOwor
ICAgIGZvciAoUmVuZGVyUXVvdGUqIHF1b3RlID0gdGhpczsgcXVvdGU7IHF1b3RlID0gcXVvdGUt
Pm1fbmV4dCkKKyAgICAgICAgcXVvdGUtPnVwZGF0ZURlcHRoKCk7CiB9CiAKLXZvaWQgUmVuZGVy
UXVvdGU6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit2
b2lkIFJlbmRlclF1b3RlOjpkZXRhY2hRdW90ZSgpCiB7Ci0gICAgQVNTRVJUKHJlbmRlcmVyLT52
aWV3KCkpOwotICAgIGlmICghcmVuZGVyZXItPnZpZXcoKS0+aGFzUmVuZGVyUXVvdGVzKCkpCisg
ICAgaWYgKCFtX2F0dGFjaGVkKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGRlc2NlbmRhbnQgPSByZW5kZXJlcjsgZGVzY2VuZGFudDsgZGVzY2VuZGFudCA9IGRlc2Nl
bmRhbnQtPm5leHRJblByZU9yZGVyKHJlbmRlcmVyKSkKLSAgICAgICAgaWYgKGRlc2NlbmRhbnQt
PmlzUXVvdGUoKSkgewotICAgICAgICAgICAgUmVuZGVyUXVvdGUqIHJlbW92ZWRRdW90ZSA9IHRv
UmVuZGVyUXVvdGUoZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBSZW5kZXJRdW90ZSogbGFzdFF1
b3RlQmVmb3JlID0gcmVtb3ZlZFF1b3RlLT5tX3ByZXZpb3VzOwotICAgICAgICAgICAgcmVtb3Zl
ZFF1b3RlLT5tX3ByZXZpb3VzID0gMDsKLSAgICAgICAgICAgIGludCBkZXB0aCA9IHJlbW92ZWRR
dW90ZS0+bV9kZXB0aDsKLSAgICAgICAgICAgIGZvciAoZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQt
Pm5leHRJblByZU9yZGVyKHJlbmRlcmVyKTsgZGVzY2VuZGFudDsgZGVzY2VuZGFudCA9IGRlc2Nl
bmRhbnQtPm5leHRJblByZU9yZGVyKHJlbmRlcmVyKSkKLSAgICAgICAgICAgICAgICBpZiAoZGVz
Y2VuZGFudC0+aXNRdW90ZSgpKQotICAgICAgICAgICAgICAgICAgICByZW1vdmVkUXVvdGUgPSB0
b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgUmVuZGVyUXVvdGUqIHF1b3Rl
QWZ0ZXIgPSByZW1vdmVkUXVvdGUtPm1fbmV4dDsKLSAgICAgICAgICAgIHJlbW92ZWRRdW90ZS0+
bV9uZXh0ID0gMDsKLSAgICAgICAgICAgIGlmIChsYXN0UXVvdGVCZWZvcmUpCi0gICAgICAgICAg
ICAgICAgbGFzdFF1b3RlQmVmb3JlLT5tX25leHQgPSBxdW90ZUFmdGVyOwotICAgICAgICAgICAg
aWYgKHF1b3RlQWZ0ZXIpIHsKLSAgICAgICAgICAgICAgICBxdW90ZUFmdGVyLT5tX3ByZXZpb3Vz
ID0gbGFzdFF1b3RlQmVmb3JlOwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGRlcHRoID09IHF1b3RlQWZ0ZXItPm1fZGVwdGgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgcXVvdGVBZnRlci0+bV9kZXB0aCA9
IGRlcHRoOwotICAgICAgICAgICAgICAgICAgICBxdW90ZUFmdGVyLT5zZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICAgICAgICAgICAgICAgICAgYWRqdXN0RGVwdGgoZGVw
dGgsIHF1b3RlQWZ0ZXItPm1fdHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIHF1b3RlQWZ0ZXIg
PSBxdW90ZUFmdGVyLT5tX25leHQ7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAocXVvdGVBZnRl
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIGlm
IChtX3ByZXZpb3VzKQorICAgICAgICBtX3ByZXZpb3VzLT5tX25leHQgPSBtX25leHQ7CisgICAg
ZWxzZSBpZiAodmlldygpKQorICAgICAgICB2aWV3KCktPnNldFJlbmRlclF1b3RlSGVhZChtX25l
eHQpOworICAgIGlmIChtX25leHQpCisgICAgICAgIG1fbmV4dC0+bV9wcmV2aW91cyA9IG1fcHJl
dmlvdXM7CisgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpIHsKKyAgICAgICAgZm9y
IChSZW5kZXJRdW90ZSogcXVvdGUgPSBtX25leHQ7IHF1b3RlOyBxdW90ZSA9IHF1b3RlLT5tX25l
eHQpCisgICAgICAgICAgICBxdW90ZS0+dXBkYXRlRGVwdGgoKTsKKyAgICB9CisgICAgbV9hdHRh
Y2hlZCA9IGZhbHNlOworICAgIG1fbmV4dCA9IDA7CisgICAgbV9wcmV2aW91cyA9IDA7CisgICAg
bV9kZXB0aCA9IDA7CiB9CiAKLXZvaWQgUmVuZGVyUXVvdGU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit2b2lkIFJlbmRl
clF1b3RlOjp1cGRhdGVEZXB0aCgpCiB7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogbmV3UXVvdGVz
ID0gc3R5bGUoKS0+cXVvdGVzKCk7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogb2xkUXVvdGVzID0g
b2xkU3R5bGUgPyBvbGRTdHlsZS0+cXVvdGVzKCkgOiAwOwotICAgIGlmICghUXVvdGVzRGF0YTo6
ZXF1YWxzKG5ld1F1b3Rlcywgb2xkUXVvdGVzKSkKKyAgICBBU1NFUlQobV9hdHRhY2hlZCk7Cisg
ICAgaW50IG9sZERlcHRoID0gbV9kZXB0aDsKKyAgICBtX2RlcHRoID0gMDsKKyAgICBpZiAobV9w
cmV2aW91cykgeworICAgICAgICBtX2RlcHRoID0gbV9wcmV2aW91cy0+bV9kZXB0aDsKKyAgICAg
ICAgc3dpdGNoIChtX3ByZXZpb3VzLT5tX3R5cGUpIHsKKyAgICAgICAgY2FzZSBPUEVOX1FVT1RF
OgorICAgICAgICBjYXNlIE5PX09QRU5fUVVPVEU6CisgICAgICAgICAgICBtX2RlcHRoKys7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTE9TRV9RVU9URToKKyAgICAgICAgY2Fz
ZSBOT19DTE9TRV9RVU9URToKKyAgICAgICAgICAgIGlmIChtX2RlcHRoKQorICAgICAgICAgICAg
ICAgIG1fZGVwdGgtLTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IGlmIChvbGREZXB0aCAhPSBtX2RlcHRoKQogICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKLSAgICBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRT
dHlsZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclF1b3RlLmgKaW5kZXggYjZmM2M1NTk5MjhiNWVmNDA0OWE5Mzc5NDM1MjE3MGMxNmFj
MjM4Zi4uNWY4ZTM4YTE2ODhjZjhlM2E5ZDBmM2YyMTU2ZWNlMjNjNmVjMGJkOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmgKQEAgLTIxLDYgKzIxLDkgQEAKICNpZm5kZWYg
UmVuZGVyUXVvdGVfaAogI2RlZmluZSBSZW5kZXJRdW90ZV9oCiAKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogCkBAIC0zMCwyNCArMzMsMjcgQEAgY2xhc3MgUmVuZGVyUXVvdGUgOiBwdWJsaWMgUmVuZGVy
VGV4dCB7CiBwdWJsaWM6CiAgICAgUmVuZGVyUXVvdGUoRG9jdW1lbnQqLCBjb25zdCBRdW90ZVR5
cGUpOwogICAgIHZpcnR1YWwgflJlbmRlclF1b3RlKCk7CisgICAgdm9pZCBhdHRhY2hRdW90ZSgp
OworICAgIHZvaWQgZGV0YWNoUXVvdGUoKTsKIAotICAgIHN0YXRpYyB2b2lkIHJlbmRlcmVyU3Vi
dHJlZUF0dGFjaGVkKFJlbmRlck9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHJlbmRlcmVyUmVt
b3ZlZEZyb21UcmVlKFJlbmRlck9iamVjdCopOwogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9p
ZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOworICAgIHZpcnR1YWwg
dm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIE9W
RVJSSURFOworCiBwcml2YXRlOgotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1F1b3RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxUZXh0KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0
IGxlYWRXaWR0aCk7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gIlJlbmRlclF1b3RlIjsgfTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNR
dW90ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH07CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsVGV4dCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgp
IE9WRVJSSURFOworCiAgICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzRGF0YSgpIGNvbnN0Owor
ICAgIHZvaWQgdXBkYXRlRGVwdGgoKTsKIAogICAgIFF1b3RlVHlwZSBtX3R5cGU7CiAgICAgaW50
IG1fZGVwdGg7CiAgICAgUmVuZGVyUXVvdGUqIG1fbmV4dDsKICAgICBSZW5kZXJRdW90ZSogbV9w
cmV2aW91czsKLSAgICB2b2lkIHBsYWNlUXVvdGUoKTsKKyAgICBib29sIG1fYXR0YWNoZWQ7CiB9
OwogCiBpbmxpbmUgUmVuZGVyUXVvdGUqIHRvUmVuZGVyUXVvdGUoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggOGJkNDljY2Zh
ZTFhZGRjOWY2Y2U2NWEyYzliZmQ5Mjk1NzM3NTE5Zi4uNzViNDcyNTY4NTE1Yzg5M2JhYjE0NmFm
NDZhNzQ1OTIzYmVlYTYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cApAQCAtNjIsNyArNjIsNyBAQCBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZy
YW1lVmlldyogdmlldykKICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKGZhbHNlKQog
ICAgICwgbV9sYXlvdXRTdGF0ZSgwKQogICAgICwgbV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudCgw
KQotICAgICwgbV9yZW5kZXJRdW90ZUNvdW50KDApCisgICAgLCBtX3JlbmRlclF1b3RlSGVhZCgw
KQogICAgICwgbV9yZW5kZXJDb3VudGVyQ291bnQoMCkKIHsKICAgICAvLyBDbGVhciBvdXIgYW5v
bnltb3VzIGJpdCwgc2V0IGJlY2F1c2UgUmVuZGVyT2JqZWN0IGFzc3VtZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IDA0YTgwNmU5YmNhNTkxZTE1YTY1N2ExMjgxYTJl
MDFiZGVkZmJkMDguLjUxNjE3NTUyYjVhM2RjN2EwZmUwOTI5YmNjMTg3MzIzODEyNjg2MTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMzIsNiArMzIsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb3dUaHJlYWRDb250cm9sbGVyOwogY2xhc3MgUmVu
ZGVyV2lkZ2V0OworY2xhc3MgUmVuZGVyUXVvdGU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CkBAIC0xOTQsMTMgKzE5NSwx
MyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEZpeGVkUG9zaXRpb25lZE9iamVjdHNOZWVkTGF5
b3V0KCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmsgYXJvdW5kIGJlY2F1c2UgdGhl
IGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY291bnRlcnMgYW5kIHF1b3RlcworICAgIHZvaWQg
c2V0UmVuZGVyUXVvdGVIZWFkKFJlbmRlclF1b3RlKiBoZWFkKSB7IG1fcmVuZGVyUXVvdGVIZWFk
ID0gaGVhZDsgfQorICAgIFJlbmRlclF1b3RlKiByZW5kZXJRdW90ZUhlYWQoKSB7IHJldHVybiBt
X3JlbmRlclF1b3RlSGVhZDsgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrIGFyb3Vu
ZCBiZWNhdXNlIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGNvdW50ZXJzCiAgICAgLy8g
cmVxdWlyZXMgd2Fsa2luZyB0aGUgZW50aXJlIHRyZWUgcmVwZWF0ZWRseSBhbmQgbW9zdCBwYWdl
cyBkb24ndCBhY3R1YWxseSB1c2UgZWl0aGVyCiAgICAgLy8gZmVhdHVyZSBzbyB3ZSBzaG91bGRu
J3QgdGFrZSB0aGUgcGVyZm9ybWFuY2UgaGl0IHdoZW4gbm90IG5lZWRlZC4gTG9uZyB0ZXJtIHdl
IHNob3VsZAogICAgIC8vIHJld3JpdGUgdGhlIGNvdW50ZXIgYW5kIHF1b3RlcyBjb2RlLgotICAg
IHZvaWQgYWRkUmVuZGVyUXVvdGUoKSB7IG1fcmVuZGVyUXVvdGVDb3VudCsrOyB9Ci0gICAgdm9p
ZCByZW1vdmVSZW5kZXJRdW90ZSgpIHsgQVNTRVJUKG1fcmVuZGVyUXVvdGVDb3VudCA+IDApOyBt
X3JlbmRlclF1b3RlQ291bnQtLTsgfQotICAgIGJvb2wgaGFzUmVuZGVyUXVvdGVzKCkgeyByZXR1
cm4gbV9yZW5kZXJRdW90ZUNvdW50OyB9CiAgICAgdm9pZCBhZGRSZW5kZXJDb3VudGVyKCkgeyBt
X3JlbmRlckNvdW50ZXJDb3VudCsrOyB9CiAgICAgdm9pZCByZW1vdmVSZW5kZXJDb3VudGVyKCkg
eyBBU1NFUlQobV9yZW5kZXJDb3VudGVyQ291bnQgPiAwKTsgbV9yZW5kZXJDb3VudGVyQ291bnQt
LTsgfQogICAgIGJvb2wgaGFzUmVuZGVyQ291bnRlcnMoKSB7IHJldHVybiBtX3JlbmRlckNvdW50
ZXJDb3VudDsgfQpAQCAtMzAxLDcgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEZsb3dU
aHJlYWRDb250cm9sbGVyPiBtX2Zsb3dUaHJlYWRDb250cm9sbGVyOwogICAgIFJlZlB0cjxJbnRl
cnZhbEFyZW5hPiBtX2ludGVydmFsQXJlbmE7CiAKLSAgICB1bnNpZ25lZCBtX3JlbmRlclF1b3Rl
Q291bnQ7CisgICAgUmVuZGVyUXVvdGUqIG1fcmVuZGVyUXVvdGVIZWFkOwogICAgIHVuc2lnbmVk
IG1fcmVuZGVyQ291bnRlckNvdW50OwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156720</attachid>
            <date>2012-08-06 10:21:29 -0700</date>
            <delta_ts>2012-08-06 17:33:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93056-20120806102106.patch</filename>
            <type>text/plain</type>
            <size>20376</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNiMTk0ZTE1MTBlYTQ4
ODJlN2NkNTUyOWI5YjhiYmRiN2VjMWM0ZC4uMTczNjA1ODJhNjZjOWNiZTJjZGIxN2ZjZTNmZTNk
OGI4YzE0YTM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA4LTAyICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIFJlaW1wbGVtZW50IFJl
bmRlclF1b3RlIHBsYWNlbWVudCBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgR3JlYXRseSBzaW1wbGlmeSB0aGUgY29kZSB0aGF0IG1haW50
YWlucyB0aGUgbGlua2VkIGxpc3Qgb2YgUmVuZGVyUXVvdGVzLiBOb3cgUmVuZGVyUXVvdGUKKyAg
ICAgICAgaXMgcGxhY2VkIGludG8gdGhlIGxpbmtlZCBsaXN0IGluIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzIG9uIGZpcnN0IGFjY2VzcyBhbmQgaXMKKyAgICAgICAgZGV0YWNoZWQgd2hl
biBkZXN0cm95ZWQgKG9yIGV4cGxpY2l0bHkgcmVtb3ZlZCkuCisKKyAgICAgICAgVGhlIG5ldyBh
bGdvcml0aG0gZG9lc24ndCByZXF1aXJlIHdhbGtpbmcgdXAgdGhlIHRyZWUgb2YgcmVuZGVyZXJz
IHdoZW4gdGhlcmUgYXJlIG5vCisgICAgICAgIFJlbmRlclF1b3RlcyBpbiB0aGUgdHJlZSB5ZXQs
IGFuZCBhbHNvIHJlbW92ZXMgdGhlIG5lZWQgdG8gd2FsayBvdmVyIGV2ZXJ5IHN1YnRyZWUKKyAg
ICAgICAgd2hlbiBpbnNlcnRpbmcgaW4gcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnkgYmVo
YXZpb3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2Rl
KTogQ2FsbCBkZXRhY2hRdW90ZSB3aGVuIHJlbW92aW5nIGZyb20gYSBjaGlsZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJRdW90ZTo6UmVuZGVyUXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVv
dGU6On5SZW5kZXJRdW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6d2lsbEJl
RGVzdHJveWVkKTogQ2FsbCBkZXRhY2hRdW90ZSB0byBlbnN1cmUgYWxsIGRlc3Ryb3llZCBxdW90
ZXMgYXJlIGRldGFjaGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFs
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOiBBdHRhY2ggcXVvdGUgYmVmb3JlIGNvbXB1dGluZyB0aGUgd2lkdGguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjphdHRhY2hR
dW90ZSk6IFB1dHMgdGhlIFJlbmRlclF1b3RlIGluIHRoZSBsaW5rZWQgbGlzdCBvZiBxdW90ZXMg
YW5kIGNvbXB1dGVzIHRoZSBkZXB0aC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjpk
ZXRhY2hRdW90ZSk6IFJlbW92ZXMgdGhlIHF1b3RlIGZyb20gdGhlIGxpbmtlZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6OnVwZGF0ZURlcHRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyUXVvdGUuaDoKKyAgICAgICAgKFJlbmRlclF1b3RlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpS
ZW5kZXJWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRSZW5kZXJRdW90ZUhl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVuZGVyUXVvdGVIZWFkKTogU3Rv
cmVzIHRoZSBmaXJzdCBxdW90ZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIChSZW5kZXJWaWV3
KToKKwogMjAxMi0wOC0wMiAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBTbGlkZXIgc2hvdWxkIHNuYXAgdG8gZGF0YWxpc3QgdGljayBtYXJrcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAppbmRl
eCBkYTk4MDg4ZTIxNTYzNTY3Mjk0YzY2YzEzNzM5OTQ1YTkzNDViODc2Li45Yjc1ZTc5NDJiOGE5
YmJhN2RlZTBmZDgxMzgxYzBiODQ2YzNkMjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcApAQCAtMTE3LDYgKzExNyw5IEBAIFJl
bmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgICAgIGlmIChvbGRDaGlsZC0+aXNSZW5kZXJSZWdp
b24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG9sZENoaWxkKS0+ZGV0YWNoUmVnaW9u
KCk7CiAKKyAgICAgICAgaWYgKG9sZENoaWxkLT5pc1F1b3RlKCkpCisgICAgICAgICAgICB0b1Jl
bmRlclF1b3RlKG9sZENoaWxkKS0+ZGV0YWNoUXVvdGUoKTsKKwogICAgICAgICBpZiAob2xkQ2hp
bGQtPmluUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgICAgICBpZiAob2xkQ2hpbGQtPmlz
Qm94KCkpCiAgICAgICAgICAgICAgICAgb2xkQ2hpbGQtPmVuY2xvc2luZ1JlbmRlckZsb3dUaHJl
YWQoKS0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyh0b1JlbmRlckJveChvbGRDaGlsZCkpOwpA
QCAtMTU4LDcgKzE2MSw2IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0Ojpy
ZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgLy8gYnkgc2tp
cHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVzdHJveWluZyB0aGUgZW50aXJlIHRyZWUuCiAgICAgaWYg
KCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJlbmRlckNvdW50
ZXI6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKLSAgICAgICAgUmVuZGVyUXVv
dGU6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKICAgICB9CiAKICAgICBpZiAo
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKQEAgLTIxMCwxMyArMjEyLDE2
IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUoUmVuZGVyT2Jq
ZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuCiAgICAgICAgIGlmIChuZXdDaGlsZC0+aXNSZW5k
ZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG5ld0NoaWxkKS0+YXR0YWNo
UmVnaW9uKCk7CiAKKyAgICAgICAgLy8gWW91IGNhbid0IGF0dGFjaFF1b3RlKCkgb3RoZXJ3aXNl
IHRoZSBxdW90ZSB3b3VsZCBiZSBhdHRhY2hlZCB0b28gZWFybHkKKyAgICAgICAgLy8gYW5kIGdl
dCB0aGUgd3JvbmcgZGVwdGggc2luY2UgZ2VuZXJhdGVkIGNvbnRlbnQgaXMgaW5zZXJ0ZWQgaW50
byBhbm9ueW1vdXMKKyAgICAgICAgLy8gcmVuZGVyZXJzIGJlZm9yZSBnb2luZyBpbnRvIHRoZSBt
YWluIHJlbmRlciB0cmVlLgorCiAgICAgICAgIGlmIChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGNv
bnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJOYW1lZEZsb3dUaHJlYWRDb250YWluZXIob3duZXIp
KQogICAgICAgICAgICAgY29udGFpbmVyRmxvd1RocmVhZC0+YWRkRmxvd0NoaWxkKG5ld0NoaWxk
KTsKICAgICB9CiAKICAgICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpIHsK
ICAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQobmV3Q2hpbGQp
OwotICAgICAgICBSZW5kZXJRdW90ZTo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQobmV3Q2hpbGQp
OwogICAgIH0KICAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxj
KCk7IC8vIEdvZXMgdXAgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGllcmFyY2h5LgogICAgIGlmICgh
b3duZXItPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKQEAgLTI3OSwxMyArMjg0LDE0IEBAIHZv
aWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBv
d25lciwgUmVuZGVyT2JqZWN0KiBjCiAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJSZWdpb24o
KSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKGNoaWxkKS0+YXR0YWNoUmVnaW9uKCk7CiAK
KyAgICAgICAgLy8gU2VlIGFwcGVuZENoaWxkTm9kZSBmb3Igd2h5IHlvdSBjYW4ndCBhdHRhY2hR
dW90ZSBoZXJlLgorCiAgICAgICAgIGlmIChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGNvbnRhaW5l
ckZsb3dUaHJlYWQgPSByZW5kZXJOYW1lZEZsb3dUaHJlYWRDb250YWluZXIob3duZXIpKQogICAg
ICAgICAgICAgY29udGFpbmVyRmxvd1RocmVhZC0+YWRkRmxvd0NoaWxkKGNoaWxkLCBiZWZvcmVD
aGlsZCk7CiAgICAgfQogCiAgICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgp
KSB7CiAgICAgICAgIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxk
KTsKLSAgICAgICAgUmVuZGVyUXVvdGU6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsK
ICAgICB9CiAgICAgY2hpbGQtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwog
ICAgIGlmICghb3duZXItPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwCmluZGV4IDdmMWQ3NDliMTJlZmI3OGZjYTY3MDY0MGFk
M2JkNTM0MzVmOTZmYjIuLmY4N2NkMzM2ODYxOWUwNzZmN2RmYWY4ZmIzYzAzNmUzNmE0MzgyOGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcApAQCAtMjEsMTE5ICsy
MSwzNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCiAK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCi0j
ZGVmaW5lIFVOS05PV05fREVQVEggLTEKKyNkZWZpbmUgVSh4KSAoKGNvbnN0IFVDaGFyKilMIyN4
KQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0RGVwdGgo
aW50ICZkZXB0aCwgUXVvdGVUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAg
Y2FzZSBPUEVOX1FVT1RFOgotICAgIGNhc2UgTk9fT1BFTl9RVU9URToKLSAgICAgICAgKytkZXB0
aDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTE9TRV9RVU9URToKLSAgICBjYXNlIE5PX0NM
T1NFX1FVT1RFOgotICAgICAgICBpZiAoZGVwdGgpCi0gICAgICAgICAgICAtLWRlcHRoOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICB9Ci19CiAKIFJlbmRlclF1b3RlOjpSZW5kZXJRdW90ZShEb2N1bWVudCogbm9kZSwgUXVv
dGVUeXBlIHF1b3RlKQogICAgIDogUmVuZGVyVGV4dChub2RlLCBTdHJpbmdJbXBsOjplbXB0eSgp
KQogICAgICwgbV90eXBlKHF1b3RlKQotICAgICwgbV9kZXB0aChVTktOT1dOX0RFUFRIKQorICAg
ICwgbV9kZXB0aCgwKQogICAgICwgbV9uZXh0KDApCiAgICAgLCBtX3ByZXZpb3VzKDApCisgICAg
LCBtX2F0dGFjaGVkKGZhbHNlKQogewotICAgIHZpZXcoKS0+YWRkUmVuZGVyUXVvdGUoKTsKIH0K
IAogUmVuZGVyUXVvdGU6On5SZW5kZXJRdW90ZSgpCiB7CisgICAgQVNTRVJUKCFtX2F0dGFjaGVk
KTsKKyAgICBBU1NFUlQoIW1fbmV4dCAmJiAhbV9wcmV2aW91cyk7CiB9CiAKIHZvaWQgUmVuZGVy
UXVvdGU6OndpbGxCZURlc3Ryb3llZCgpCiB7Ci0gICAgaWYgKHZpZXcoKSkKLSAgICAgICAgdmll
dygpLT5yZW1vdmVSZW5kZXJRdW90ZSgpOworICAgIGRldGFjaFF1b3RlKCk7CiAgICAgUmVuZGVy
VGV4dDo6d2lsbEJlRGVzdHJveWVkKCk7CiB9CiAKLWNvbnN0IGNoYXIqIFJlbmRlclF1b3RlOjpy
ZW5kZXJOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIlJlbmRlclF1b3RlIjsKLX0KLQotLy8g
VGhpcyBmdW5jdGlvbiBwbGFjZXMgYSBsaXN0IG9mIHF1b3RlIHJlbmRlcmVycyBzdGFydGluZyBh
dCAidGhpcyIgaW4gdGhlIGxpc3Qgb2YgcXVvdGUgcmVuZGVyZXJzIGFscmVhZHkKLS8vIGluIHRo
ZSBkb2N1bWVudCdzIHJlbmRlcmVyIHRyZWUuCi0vLyBUaGUgYXNzdW1wdGlvbnMgYXJlIG1hZGUg
KGZvciBwZXJmb3JtYW5jZSk6Ci0vLyAxLiBUaGUgbGlzdCBvZiBxdW90ZXMgYWxyZWFkeSBpbiB0
aGUgcmVuZGVyZXJzIHRyZWUgb2YgdGhlIGRvY3VtZW50IGlzIGFscmVhZHkgaW4gYSBjb25zaXN0
ZW50IHN0YXRlCi0vLyAoQWxsIHF1b3RlIHJlbmRlcmVycyBhcmUgbGlua2VkIGFuZCBoYXZlIHRo
ZSBjb3JyZWN0IGRlcHRoIHNldCkKLS8vIDIuIFRoZSBxdW90ZSByZW5kZXJlcnMgb2YgdGhlIGlu
c2VydGVkIGxpc3QgYXJlIGluIGEgdHJlZSBvZiByZW5kZXJlcnMgb2YgdGhlaXIgb3duIHdoaWNo
IGhhcyBiZWVuIGp1c3QKLS8vIGluc2VydGVkIGluIHRoZSBtYWluIHJlbmRlcmVyIHRyZWUgd2l0
aCBpdHMgcm9vdCBhcyBjaGlsZCBvZiBzb21lIHJlbmRlcmVyLgotLy8gMy4gVGhlIHF1b3RlIHJl
bmRlcmVycyBpbiB0aGUgaW5zZXJ0ZWQgbGlzdCBoYXZlIGRlcHRocyBjb25zaXN0ZW50IHdpdGgg
dGhlaXIgcG9zaXRpb24gaW4gdGhlIGxpc3QgcmVsYXRpdmUKLS8vIHRvICJ0aGlzIiwgdGh1cyBp
ZiAidGhpcyIgZG9lcyBub3QgbmVlZCB0byBjaGFuZ2UgaXRzIGRlcHRoIHVwb24gaW5zZXJ0aW9u
LCB0aGUgb3RoZXIgcmVuZGVyZXJzIGluIHRoZSBsaXN0IGRvbid0Ci0vLyBuZWVkIHRvIGVpdGhl
ci4KLXZvaWQgUmVuZGVyUXVvdGU6OnBsYWNlUXVvdGUoKQotewotICAgIFJlbmRlclF1b3RlKiBo
ZWFkID0gdGhpczsKLSAgICBBU1NFUlQoIWhlYWQtPm1fcHJldmlvdXMpOwotICAgIFJlbmRlclF1
b3RlKiB0YWlsID0gMDsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBoZWFk
LT5wcmV2aW91c0luUHJlT3JkZXIoKTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVj
ZXNzb3ItPnByZXZpb3VzSW5QcmVPcmRlcigpKSB7Ci0gICAgICAgIGlmICghcHJlZGVjZXNzb3It
PmlzUXVvdGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBoZWFkLT5tX3ByZXZp
b3VzID0gdG9SZW5kZXJRdW90ZShwcmVkZWNlc3Nvcik7Ci0gICAgICAgIGlmIChoZWFkLT5tX3By
ZXZpb3VzLT5tX25leHQpIHsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3BsaWNlIHRoZSBs
aXN0IG9mIHF1b3RlcyBoZWFkZWQgYnkgaGVhZCBpbnRvIHRoZSBkb2N1bWVudCdzIGxpc3Qgb2Yg
cXVvdGVzLgotICAgICAgICAgICAgdGFpbCA9IGhlYWQ7Ci0gICAgICAgICAgICB3aGlsZSAodGFp
bC0+bV9uZXh0KQotICAgICAgICAgICAgICAgICB0YWlsID0gdGFpbC0+bV9uZXh0OwotICAgICAg
ICAgICAgdGFpbC0+bV9uZXh0ID0gaGVhZC0+bV9wcmV2aW91cy0+bV9uZXh0OwotICAgICAgICAg
ICAgQVNTRVJUKHRhaWwtPm1fbmV4dC0+bV9wcmV2aW91cyA9PSBoZWFkLT5tX3ByZXZpb3VzKTsK
LSAgICAgICAgICAgIHRhaWwtPm1fbmV4dC0+bV9wcmV2aW91cyA9ICB0YWlsOwotICAgICAgICAg
ICAgdGFpbCA9IHRhaWwtPm1fbmV4dDsgLy8gVGhpcyBtYXJrcyB0aGUgc3BsaWNpbmcgcG9pbnQg
aGVyZSB0aGVyZSBtYXkgYmUgYSBkZXB0aCBkaXNjb250aW51aXR5Ci0gICAgICAgIH0KLSAgICAg
ICAgaGVhZC0+bV9wcmV2aW91cy0+bV9uZXh0ID0gaGVhZDsKLSAgICAgICAgQVNTRVJUKGhlYWQt
Pm1fcHJldmlvdXMtPm1fZGVwdGggIT0gVU5LTk9XTl9ERVBUSCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBpbnQgbmV3RGVwdGg7Ci0gICAgaWYgKCFoZWFkLT5tX3ByZXZpb3VzKSB7Ci0g
ICAgICAgIG5ld0RlcHRoID0gMDsKLSAgICAgICAgZ290byBza2lwTmV3RGVwdGhDYWxjOwotICAg
IH0KLSAgICBuZXdEZXB0aCA9IGhlYWQtPm1fcHJldmlvdXMtPm1fZGVwdGg7Ci0gICAgZG8gewot
ICAgICAgICBhZGp1c3REZXB0aChuZXdEZXB0aCwgaGVhZC0+bV9wcmV2aW91cy0+bV90eXBlKTsK
LXNraXBOZXdEZXB0aENhbGM6Ci0gICAgICAgIGlmIChoZWFkLT5tX2RlcHRoID09IG5ld0RlcHRo
KSB7IC8vIEFsbCByZW1haW5pbmcgZGVwdGggc2hvdWxkIGJlIGNvcnJlY3QgZXhjZXB0IGlmIHNw
bGljaW5nIHdhcyBkb25lLgotICAgICAgICAgICAgaWYgKCF0YWlsKSAvLyBXZSd2ZSBkb25lIHRo
ZSBwb3N0IHNwbGljaW5nIHNlY3Rpb24gYWxyZWFkeSBvciB0aGVyZSB3YXMgbm8gc3BsaWNpbmcu
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBoZWFkID0gdGFpbDsgLy8gQ29u
dGludWUgYWZ0ZXIgdGhlIHNwbGljaW5nIHBvaW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8g
TWFyayB0aGUgcG9zc2libGUgc3BsaWNpbmcgcG9pbnQgZGlzY29udGludWl0eSBmaXhlZC4KLSAg
ICAgICAgICAgIG5ld0RlcHRoID0gaGVhZC0+bV9wcmV2aW91cy0+bV9kZXB0aDsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGhlYWQtPm1fZGVwdGggPSBuZXdEZXB0
aDsKLSAgICAgICAgLy8gRklYTUU6IElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBxdW90
YXRpb24gY2hhcmFjdGVycyBkb2VzIG5vdCBjaGFuZ2Ugd2UgbWF5IG9ubHkgbmVlZCB0bwotICAg
ICAgICAvLyBJbnZhbGlkYXRlIHRoZSByZW5kZXJlcidzIGFyZWEgbm90IGEgcmVsYXlvdXQuCi0g
ICAgICAgIGhlYWQtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAg
ICBoZWFkID0gaGVhZC0+bV9uZXh0OwotICAgICAgICBpZiAoaGVhZCA9PSB0YWlsKSAvLyBXZSBh
cmUgYXQgdGhlIHNwbGljaW5nIHBvaW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0
aGUgcG9zc2libGUgZGVwdGggZGlzY29udGludWl0eSBmaXhlZC4KLSAgICB9IHdoaWxlIChoZWFk
KTsKLX0KLQotI2RlZmluZSBVKHgpICgoY29uc3QgVUNoYXIqKUwjI3gpCi0KIHR5cGVkZWYgSGFz
aE1hcDxBdG9taWNTdHJpbmcsIGNvbnN0IFF1b3Rlc0RhdGEqLCBDYXNlRm9sZGluZ0hhc2g+IFF1
b3Rlc01hcDsKIAogc3RhdGljIGNvbnN0IFF1b3Rlc01hcCYgcXVvdGVzRGF0YUxhbmd1YWdlTWFw
KCkKQEAgLTE1NywyNyArNzIsMjQgQEAgc3RhdGljIGNvbnN0IFF1b3Rlc0RhdGEqIGJhc2ljUXVv
dGVzRGF0YSgpCiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFs
VGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFwYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgQVNTRVJUKG1fZGVwdGggIT0gVU5LTk9XTl9ERVBUSCk7Ci0gICAgY29uc3QgUXVvdGVzRGF0
YSogcXVvdGVzID0gcXVvdGVzRGF0YSgpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2Fz
ZSBOT19PUEVOX1FVT1RFOgogICAgIGNhc2UgTk9fQ0xPU0VfUVVPVEU6CiAgICAgICAgIHJldHVy
biBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAgIGNhc2UgQ0xPU0VfUVVPVEU6CiAgICAgICAgIC8v
IEZJWE1FOiBXaGVuIG1fZGVwdGggaXMgMCB3ZSBzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZy4K
LSAgICAgICAgcmV0dXJuIHF1b3Rlcy0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0g
MSwgMCkpLmltcGwoKTsKKyAgICAgICAgcmV0dXJuIHF1b3Rlc0RhdGEoKS0+Z2V0Q2xvc2VRdW90
ZShzdGQ6Om1heChtX2RlcHRoIC0gMSwgMCkpLmltcGwoKTsKICAgICBjYXNlIE9QRU5fUVVPVEU6
Ci0gICAgICAgIHJldHVybiBxdW90ZXMtPmdldE9wZW5RdW90ZShtX2RlcHRoKS5pbXBsKCk7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biBTdHJpbmdJbXBsOjplbXB0eSgpOworICAgICAgICByZXR1cm4gcXVvdGVzRGF0YSgpLT5nZXRP
cGVuUXVvdGUobV9kZXB0aCkuaW1wbCgpOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKIH0KIAogdm9pZCBSZW5kZXJRdW90
ZTo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZCkKIHsKKyAgICBpZiAo
IW1fYXR0YWNoZWQpCisgICAgICAgIGF0dGFjaFF1b3RlKCk7CiAgICAgc2V0VGV4dEludGVybmFs
KG9yaWdpbmFsVGV4dCgpKTsKICAgICBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNh
bFdpZHRocyhsZWFkKTsKIH0KQEAgLTE5Niw1OCArMTA4LDg3IEBAIGNvbnN0IFF1b3Rlc0RhdGEq
IFJlbmRlclF1b3RlOjpxdW90ZXNEYXRhKCkgY29uc3QKICAgICByZXR1cm4gcXVvdGVzOwogfQog
Ci12b2lkIFJlbmRlclF1b3RlOjpyZW5kZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQordm9pZCBSZW5kZXJRdW90ZTo6YXR0YWNoUXVvdGUoKQogewotICAgIEFTU0VS
VChyZW5kZXJlci0+dmlldygpKTsKLSAgICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhhc1JlbmRl
clF1b3RlcygpKQorICAgIEFTU0VSVCh2aWV3KCkpOworICAgIEFTU0VSVCghbV9hdHRhY2hlZCk7
CisgICAgQVNTRVJUKCFtX25leHQgJiYgIW1fcHJldmlvdXMpOworCisgICAgLy8gRklYTUU6IERv
bid0IHNldCBwcmVmIHdpZHRocyBkaXJ0eSBkdXJpbmcgbGF5b3V0IGFuZCBpbnN0ZWFkIHdhbGsg
dGhlIERPTQorICAgIC8vIHRvIGRldGVybWluZSB0aGUgZGVwdGguCisgICAgaWYgKCFpc1Jvb3Rl
ZCgpKSB7CisgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2aWV3KCktPnJlbmRlclF1b3RlSGVhZCgp
KSB7CisgICAgICAgIHZpZXcoKS0+c2V0UmVuZGVyUXVvdGVIZWFkKHRoaXMpOworICAgICAgICBt
X2F0dGFjaGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBkZXNjZW5kYW50ID0gcmVuZGVyZXI7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5k
YW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikpCi0gICAgICAgIGlmIChkZXNjZW5kYW50LT5p
c1F1b3RlKCkpIHsKLSAgICAgICAgICAgIHRvUmVuZGVyUXVvdGUoZGVzY2VuZGFudCktPnBsYWNl
UXVvdGUoKTsKKyAgICB9CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBw
cmV2aW91c0luUHJlT3JkZXIoKTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNz
b3ItPnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3Nvci0+aXNR
dW90ZSgpKSB7CisgICAgICAgICAgICBtX3ByZXZpb3VzID0gdG9SZW5kZXJRdW90ZShwcmVkZWNl
c3Nvcik7CisgICAgICAgICAgICBtX25leHQgPSBtX3ByZXZpb3VzLT5tX25leHQ7CisgICAgICAg
ICAgICBtX3ByZXZpb3VzLT5tX25leHQgPSB0aGlzOworICAgICAgICAgICAgaWYgKG1fbmV4dCkK
KyAgICAgICAgICAgICAgICBtX25leHQtPm1fcHJldmlvdXMgPSB0aGlzOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fcHJldmlvdXMpIHsKKyAgICAg
ICAgbV9uZXh0ID0gdmlldygpLT5yZW5kZXJRdW90ZUhlYWQoKTsKKyAgICAgICAgdmlldygpLT5z
ZXRSZW5kZXJRdW90ZUhlYWQodGhpcyk7CisgICAgfQorICAgIG1fYXR0YWNoZWQgPSB0cnVlOwor
ICAgIGZvciAoUmVuZGVyUXVvdGUqIHF1b3RlID0gdGhpczsgcXVvdGU7IHF1b3RlID0gcXVvdGUt
Pm1fbmV4dCkKKyAgICAgICAgcXVvdGUtPnVwZGF0ZURlcHRoKCk7CiB9CiAKLXZvaWQgUmVuZGVy
UXVvdGU6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit2
b2lkIFJlbmRlclF1b3RlOjpkZXRhY2hRdW90ZSgpCiB7Ci0gICAgQVNTRVJUKHJlbmRlcmVyLT52
aWV3KCkpOwotICAgIGlmICghcmVuZGVyZXItPnZpZXcoKS0+aGFzUmVuZGVyUXVvdGVzKCkpCisg
ICAgaWYgKCFtX2F0dGFjaGVkKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGRlc2NlbmRhbnQgPSByZW5kZXJlcjsgZGVzY2VuZGFudDsgZGVzY2VuZGFudCA9IGRlc2Nl
bmRhbnQtPm5leHRJblByZU9yZGVyKHJlbmRlcmVyKSkKLSAgICAgICAgaWYgKGRlc2NlbmRhbnQt
PmlzUXVvdGUoKSkgewotICAgICAgICAgICAgUmVuZGVyUXVvdGUqIHJlbW92ZWRRdW90ZSA9IHRv
UmVuZGVyUXVvdGUoZGVzY2VuZGFudCk7Ci0gICAgICAgICAgICBSZW5kZXJRdW90ZSogbGFzdFF1
b3RlQmVmb3JlID0gcmVtb3ZlZFF1b3RlLT5tX3ByZXZpb3VzOwotICAgICAgICAgICAgcmVtb3Zl
ZFF1b3RlLT5tX3ByZXZpb3VzID0gMDsKLSAgICAgICAgICAgIGludCBkZXB0aCA9IHJlbW92ZWRR
dW90ZS0+bV9kZXB0aDsKLSAgICAgICAgICAgIGZvciAoZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQt
Pm5leHRJblByZU9yZGVyKHJlbmRlcmVyKTsgZGVzY2VuZGFudDsgZGVzY2VuZGFudCA9IGRlc2Nl
bmRhbnQtPm5leHRJblByZU9yZGVyKHJlbmRlcmVyKSkKLSAgICAgICAgICAgICAgICBpZiAoZGVz
Y2VuZGFudC0+aXNRdW90ZSgpKQotICAgICAgICAgICAgICAgICAgICByZW1vdmVkUXVvdGUgPSB0
b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgUmVuZGVyUXVvdGUqIHF1b3Rl
QWZ0ZXIgPSByZW1vdmVkUXVvdGUtPm1fbmV4dDsKLSAgICAgICAgICAgIHJlbW92ZWRRdW90ZS0+
bV9uZXh0ID0gMDsKLSAgICAgICAgICAgIGlmIChsYXN0UXVvdGVCZWZvcmUpCi0gICAgICAgICAg
ICAgICAgbGFzdFF1b3RlQmVmb3JlLT5tX25leHQgPSBxdW90ZUFmdGVyOwotICAgICAgICAgICAg
aWYgKHF1b3RlQWZ0ZXIpIHsKLSAgICAgICAgICAgICAgICBxdW90ZUFmdGVyLT5tX3ByZXZpb3Vz
ID0gbGFzdFF1b3RlQmVmb3JlOwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGRlcHRoID09IHF1b3RlQWZ0ZXItPm1fZGVwdGgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgcXVvdGVBZnRlci0+bV9kZXB0aCA9
IGRlcHRoOwotICAgICAgICAgICAgICAgICAgICBxdW90ZUFmdGVyLT5zZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICAgICAgICAgICAgICAgICAgYWRqdXN0RGVwdGgoZGVw
dGgsIHF1b3RlQWZ0ZXItPm1fdHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIHF1b3RlQWZ0ZXIg
PSBxdW90ZUFmdGVyLT5tX25leHQ7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAocXVvdGVBZnRl
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIGlm
IChtX3ByZXZpb3VzKQorICAgICAgICBtX3ByZXZpb3VzLT5tX25leHQgPSBtX25leHQ7CisgICAg
ZWxzZSBpZiAodmlldygpKQorICAgICAgICB2aWV3KCktPnNldFJlbmRlclF1b3RlSGVhZChtX25l
eHQpOworICAgIGlmIChtX25leHQpCisgICAgICAgIG1fbmV4dC0+bV9wcmV2aW91cyA9IG1fcHJl
dmlvdXM7CisgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpIHsKKyAgICAgICAgZm9y
IChSZW5kZXJRdW90ZSogcXVvdGUgPSBtX25leHQ7IHF1b3RlOyBxdW90ZSA9IHF1b3RlLT5tX25l
eHQpCisgICAgICAgICAgICBxdW90ZS0+dXBkYXRlRGVwdGgoKTsKKyAgICB9CisgICAgbV9hdHRh
Y2hlZCA9IGZhbHNlOworICAgIG1fbmV4dCA9IDA7CisgICAgbV9wcmV2aW91cyA9IDA7CisgICAg
bV9kZXB0aCA9IDA7CiB9CiAKLXZvaWQgUmVuZGVyUXVvdGU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit2b2lkIFJlbmRl
clF1b3RlOjp1cGRhdGVEZXB0aCgpCiB7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogbmV3UXVvdGVz
ID0gc3R5bGUoKS0+cXVvdGVzKCk7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogb2xkUXVvdGVzID0g
b2xkU3R5bGUgPyBvbGRTdHlsZS0+cXVvdGVzKCkgOiAwOwotICAgIGlmICghUXVvdGVzRGF0YTo6
ZXF1YWxzKG5ld1F1b3Rlcywgb2xkUXVvdGVzKSkKKyAgICBBU1NFUlQobV9hdHRhY2hlZCk7Cisg
ICAgaW50IG9sZERlcHRoID0gbV9kZXB0aDsKKyAgICBtX2RlcHRoID0gMDsKKyAgICBpZiAobV9w
cmV2aW91cykgeworICAgICAgICBtX2RlcHRoID0gbV9wcmV2aW91cy0+bV9kZXB0aDsKKyAgICAg
ICAgc3dpdGNoIChtX3ByZXZpb3VzLT5tX3R5cGUpIHsKKyAgICAgICAgY2FzZSBPUEVOX1FVT1RF
OgorICAgICAgICBjYXNlIE5PX09QRU5fUVVPVEU6CisgICAgICAgICAgICBtX2RlcHRoKys7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTE9TRV9RVU9URToKKyAgICAgICAgY2Fz
ZSBOT19DTE9TRV9RVU9URToKKyAgICAgICAgICAgIGlmIChtX2RlcHRoKQorICAgICAgICAgICAg
ICAgIG1fZGVwdGgtLTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IC8vIEZJWE1FOiBEb24ndCBkaXJ0eSBwcmVmIHdpZHRocyBpbnNpZGUgb2YgbGF5b3V0LgorICAg
IGlmIChvbGREZXB0aCAhPSBtX2RlcHRoKQogICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKLSAgICBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRT
dHlsZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclF1b3RlLmgKaW5kZXggYjZmM2M1NTk5MjhiNWVmNDA0OWE5Mzc5NDM1MjE3MGMxNmFj
MjM4Zi4uNjk2MDExZmU0OTNkMmM3NjBhNWI1ZmUxYTk1MGYyODFiODBhZGExNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmgKQEAgLTIxLDYgKzIxLDkgQEAKICNpZm5kZWYg
UmVuZGVyUXVvdGVfaAogI2RlZmluZSBSZW5kZXJRdW90ZV9oCiAKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogCkBAIC0zMCwyNCArMzMsMjQgQEAgY2xhc3MgUmVuZGVyUXVvdGUgOiBwdWJsaWMgUmVuZGVy
VGV4dCB7CiBwdWJsaWM6CiAgICAgUmVuZGVyUXVvdGUoRG9jdW1lbnQqLCBjb25zdCBRdW90ZVR5
cGUpOwogICAgIHZpcnR1YWwgflJlbmRlclF1b3RlKCk7CisgICAgdm9pZCBhdHRhY2hRdW90ZSgp
OworICAgIHZvaWQgZGV0YWNoUXVvdGUoKTsKIAotICAgIHN0YXRpYyB2b2lkIHJlbmRlcmVyU3Vi
dHJlZUF0dGFjaGVkKFJlbmRlck9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHJlbmRlcmVyUmVt
b3ZlZEZyb21UcmVlKFJlbmRlck9iamVjdCopOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9p
ZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNRdW90ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH07Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsVGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgpOworICAgIHZpcnR1
YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAiUmVuZGVyUXVvdGUiOyB9
OworICAgIHZpcnR1YWwgYm9vbCBpc1F1b3RlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1
ZTsgfTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxUZXh0KCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKGZsb2F0IGxlYWRXaWR0aCkgT1ZFUlJJREU7CisKICAgICBjb25zdCBRdW90ZXNEYXRh
KiBxdW90ZXNEYXRhKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVEZXB0aCgpOwogCiAgICAgUXVv
dGVUeXBlIG1fdHlwZTsKICAgICBpbnQgbV9kZXB0aDsKICAgICBSZW5kZXJRdW90ZSogbV9uZXh0
OwogICAgIFJlbmRlclF1b3RlKiBtX3ByZXZpb3VzOwotICAgIHZvaWQgcGxhY2VRdW90ZSgpOwor
ICAgIGJvb2wgbV9hdHRhY2hlZDsKIH07CiAKIGlubGluZSBSZW5kZXJRdW90ZSogdG9SZW5kZXJR
dW90ZShSZW5kZXJPYmplY3QqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAppbmRleCA4YmQ0OWNjZmFlMWFkZGM5ZjZjZTY1YTJjOWJmZDkyOTU3Mzc1MTlmLi43
NWI0NzI1Njg1MTVjODkzYmFiMTQ2YWY0NmE3NDU5MjNiZWVhNjNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC02Miw3ICs2Miw3IEBAIFJlbmRlclZpZXc6OlJl
bmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWVWaWV3KiB2aWV3KQogICAgICwgbV9wYWdlTG9naWNh
bEhlaWdodENoYW5nZWQoZmFsc2UpCiAgICAgLCBtX2xheW91dFN0YXRlKDApCiAgICAgLCBtX2xh
eW91dFN0YXRlRGlzYWJsZUNvdW50KDApCi0gICAgLCBtX3JlbmRlclF1b3RlQ291bnQoMCkKKyAg
ICAsIG1fcmVuZGVyUXVvdGVIZWFkKDApCiAgICAgLCBtX3JlbmRlckNvdW50ZXJDb3VudCgwKQog
ewogICAgIC8vIENsZWFyIG91ciBhbm9ueW1vdXMgYml0LCBzZXQgYmVjYXVzZSBSZW5kZXJPYmpl
Y3QgYXNzdW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggMDRhODA2
ZTliY2E1OTFlMTVhNjU3YTEyODFhMmUwMWJkZWRmYmQwOC4uMDBlYTUzN2U0ZGVmZWQyM2Q3MDQ5
ZGM3ODU5OGI4ZDQ2MWRjMmM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5o
CkBAIC0zMiw2ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvd1RocmVh
ZENvbnRyb2xsZXI7CiBjbGFzcyBSZW5kZXJXaWRnZXQ7CitjbGFzcyBSZW5kZXJRdW90ZTsKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9z
aXRvcjsKQEAgLTE5NCwxMyArMTk1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Rml4ZWRQ
b3NpdGlvbmVkT2JqZWN0c05lZWRMYXlvdXQoKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
d29yayBhcm91bmQgYmVjYXVzZSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjb3VudGVy
cyBhbmQgcXVvdGVzCisgICAgdm9pZCBzZXRSZW5kZXJRdW90ZUhlYWQoUmVuZGVyUXVvdGUqIGhl
YWQpIHsgbV9yZW5kZXJRdW90ZUhlYWQgPSBoZWFkOyB9CisgICAgUmVuZGVyUXVvdGUqIHJlbmRl
clF1b3RlSGVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUXVvdGVIZWFkOyB9CisKKyAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIHdvcmsgYXJvdW5kIGJlY2F1c2UgdGhlIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gb2YgY291bnRlcnMKICAgICAvLyByZXF1aXJlcyB3YWxraW5nIHRoZSBlbnRpcmUg
dHJlZSByZXBlYXRlZGx5IGFuZCBtb3N0IHBhZ2VzIGRvbid0IGFjdHVhbGx5IHVzZSBlaXRoZXIK
ICAgICAvLyBmZWF0dXJlIHNvIHdlIHNob3VsZG4ndCB0YWtlIHRoZSBwZXJmb3JtYW5jZSBoaXQg
d2hlbiBub3QgbmVlZGVkLiBMb25nIHRlcm0gd2Ugc2hvdWxkCiAgICAgLy8gcmV3cml0ZSB0aGUg
Y291bnRlciBhbmQgcXVvdGVzIGNvZGUuCi0gICAgdm9pZCBhZGRSZW5kZXJRdW90ZSgpIHsgbV9y
ZW5kZXJRdW90ZUNvdW50Kys7IH0KLSAgICB2b2lkIHJlbW92ZVJlbmRlclF1b3RlKCkgeyBBU1NF
UlQobV9yZW5kZXJRdW90ZUNvdW50ID4gMCk7IG1fcmVuZGVyUXVvdGVDb3VudC0tOyB9Ci0gICAg
Ym9vbCBoYXNSZW5kZXJRdW90ZXMoKSB7IHJldHVybiBtX3JlbmRlclF1b3RlQ291bnQ7IH0KICAg
ICB2b2lkIGFkZFJlbmRlckNvdW50ZXIoKSB7IG1fcmVuZGVyQ291bnRlckNvdW50Kys7IH0KICAg
ICB2b2lkIHJlbW92ZVJlbmRlckNvdW50ZXIoKSB7IEFTU0VSVChtX3JlbmRlckNvdW50ZXJDb3Vu
dCA+IDApOyBtX3JlbmRlckNvdW50ZXJDb3VudC0tOyB9CiAgICAgYm9vbCBoYXNSZW5kZXJDb3Vu
dGVycygpIHsgcmV0dXJuIG1fcmVuZGVyQ291bnRlckNvdW50OyB9CkBAIC0zMDEsNyArMzAyLDcg
QEAgcHJpdmF0ZToKICAgICBPd25QdHI8Rmxvd1RocmVhZENvbnRyb2xsZXI+IG1fZmxvd1RocmVh
ZENvbnRyb2xsZXI7CiAgICAgUmVmUHRyPEludGVydmFsQXJlbmE+IG1faW50ZXJ2YWxBcmVuYTsK
IAotICAgIHVuc2lnbmVkIG1fcmVuZGVyUXVvdGVDb3VudDsKKyAgICBSZW5kZXJRdW90ZSogbV9y
ZW5kZXJRdW90ZUhlYWQ7CiAgICAgdW5zaWduZWQgbV9yZW5kZXJDb3VudGVyQ291bnQ7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRl
eCA2ZmZlYTRjYmZjNTE5YjJjZWYyM2JiM2M5NGJlMjcyYWU4N2Q3NzlkLi44ZWQwODA0ZmE0MTc3
ODBkZTUxNmMzNjY1ZTg3YTllODQ3ZGQ0ZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKQEAgLTU4MCw2ICs1ODAsOSBAQCBTdHlsZURpZmZl
cmVuY2UgUmVuZGVyU3R5bGU6OmRpZmYoY29uc3QgUmVuZGVyU3R5bGUqIG90aGVyLCB1bnNpZ25l
ZCYgY2hhbmdlZENvbgogICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0OwogICAg
IH0KIAorICAgIGlmICghUXVvdGVzRGF0YTo6ZXF1YWxzKHJhcmVJbmhlcml0ZWREYXRhLT5xdW90
ZXMuZ2V0KCksIG90aGVyLT5yYXJlSW5oZXJpdGVkRGF0YS0+cXVvdGVzLmdldCgpKSkKKyAgICAg
ICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKKwogI2lmIEVOQUJMRShTVkcpCiAgICAg
Ly8gU1ZHUmVuZGVyU3R5bGU6OmRpZmYoKSBtaWdodCBoYXZlIHJldHVybmVkIFN0eWxlRGlmZmVy
ZW5jZVJlcGFpbnQsIGVnLiBpZiBmaWxsIGNoYW5nZXMuCiAgICAgLy8gSWYgZWcuIHRoZSBmb250
LXNpemUgY2hhbmdlZCBhdCB0aGUgc2FtZSB0aW1lLCB3ZSdyZSBub3QgYWxsb3dlZCB0byByZXR1
cm4gU3R5bGVEaWZmZXJlbmNlUmVwYWludCwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156805</attachid>
            <date>2012-08-06 17:09:13 -0700</date>
            <delta_ts>2012-08-07 13:30:55 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-93056-20120806170849.patch</filename>
            <type>text/plain</type>
            <size>20758</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNiMTk0ZTE1MTBlYTQ4
ODJlN2NkNTUyOWI5YjhiYmRiN2VjMWM0ZC4uYWVhNzQ2M2YyNTc2ZTFjMDNjMjdlMGRiOWJhNDYx
ZjAzMmU1ODA1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTA4LTAyICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIFJlaW1wbGVtZW50IFJl
bmRlclF1b3RlIHBsYWNlbWVudCBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgR3JlYXRseSBzaW1wbGlmeSB0aGUgY29kZSB0aGF0IG1haW50
YWlucyB0aGUgbGlua2VkIGxpc3Qgb2YgUmVuZGVyUXVvdGVzLiBOb3cgUmVuZGVyUXVvdGUKKyAg
ICAgICAgaXMgcGxhY2VkIGludG8gdGhlIGxpbmtlZCBsaXN0IGluIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzIG9uIGZpcnN0IGFjY2VzcyBhbmQgaXMKKyAgICAgICAgZGV0YWNoZWQgd2hl
biBkZXN0cm95ZWQgKG9yIGV4cGxpY2l0bHkgcmVtb3ZlZCkuCisKKyAgICAgICAgVGhlIG5ldyBh
bGdvcml0aG0gZG9lc24ndCByZXF1aXJlIHdhbGtpbmcgdXAgdGhlIHRyZWUgb2YgcmVuZGVyZXJz
IHdoZW4gdGhlcmUgYXJlIG5vCisgICAgICAgIFJlbmRlclF1b3RlcyBpbiB0aGUgdHJlZSB5ZXQs
IGFuZCBhbHNvIHJlbW92ZXMgdGhlIG5lZWQgdG8gd2FsayBvdmVyIGV2ZXJ5IHN1YnRyZWUKKyAg
ICAgICAgd2hlbiBpbnNlcnRpbmcgaW4gcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnkgYmVo
YXZpb3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2Rl
KTogQ2FsbCBkZXRhY2hRdW90ZSB3aGVuIHJlbW92aW5nIGZyb20gYSBjaGlsZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJRdW90ZTo6UmVuZGVyUXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVv
dGU6On5SZW5kZXJRdW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6d2lsbEJl
RGVzdHJveWVkKTogQ2FsbCBkZXRhY2hRdW90ZSB0byBlbnN1cmUgYWxsIGRlc3Ryb3llZCBxdW90
ZXMgYXJlIGRldGFjaGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFs
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOiBBdHRhY2ggcXVvdGUgYmVmb3JlIGNvbXB1dGluZyB0aGUgd2lkdGguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjphdHRhY2hR
dW90ZSk6IFB1dHMgdGhlIFJlbmRlclF1b3RlIGluIHRoZSBsaW5rZWQgbGlzdCBvZiBxdW90ZXMg
YW5kIGNvbXB1dGVzIHRoZSBkZXB0aC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjpk
ZXRhY2hRdW90ZSk6IFJlbW92ZXMgdGhlIHF1b3RlIGZyb20gdGhlIGxpbmtlZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6OnVwZGF0ZURlcHRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyUXVvdGUuaDoKKyAgICAgICAgKFJlbmRlclF1b3RlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3R5bGU6OmRpZmYpOiBSZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0IGlmIHF1b3RlcyBjaGFu
Z2UgYW5kIHJlbW92ZSBjaGVjayBpbiBzdHlsZURpZENoYW5nZSBpbiBSZW5kZXJRdW90ZS4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3OjpSZW5kZXJWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRSZW5k
ZXJRdW90ZUhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVuZGVyUXVvdGVI
ZWFkKTogU3RvcmVzIHRoZSBmaXJzdCBxdW90ZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIChS
ZW5kZXJWaWV3KToKKwogMjAxMi0wOC0wMiAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0
Lm9yZz4KIAogICAgICAgICBTbGlkZXIgc2hvdWxkIHNuYXAgdG8gZGF0YWxpc3QgdGljayBtYXJr
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxk
TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
LmNwcAppbmRleCBkYTk4MDg4ZTIxNTYzNTY3Mjk0YzY2YzEzNzM5OTQ1YTkzNDViODc2Li4zMTU4
ZmJmYjY5OWRkY2JmYWMwZmYyOTIyYjNjMzgyOGU3MTlmZmFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcApAQCAtMTE3LDYgKzEx
Nyw5IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5v
ZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgICAgIGlmIChvbGRDaGlsZC0+aXNS
ZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG9sZENoaWxkKS0+ZGV0
YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgaWYgKG9sZENoaWxkLT5pc1F1b3RlKCkpCisgICAgICAg
ICAgICB0b1JlbmRlclF1b3RlKG9sZENoaWxkKS0+ZGV0YWNoUXVvdGUoKTsKKwogICAgICAgICBp
ZiAob2xkQ2hpbGQtPmluUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgICAgICBpZiAob2xk
Q2hpbGQtPmlzQm94KCkpCiAgICAgICAgICAgICAgICAgb2xkQ2hpbGQtPmVuY2xvc2luZ1JlbmRl
ckZsb3dUaHJlYWQoKS0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyh0b1JlbmRlckJveChvbGRD
aGlsZCkpOwpAQCAtMTU4LDcgKzE2MSw2IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAg
Ly8gYnkgc2tpcHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVzdHJveWluZyB0aGUgZW50aXJlIHRyZWUu
CiAgICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJl
bmRlckNvdW50ZXI6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKLSAgICAgICAg
UmVuZGVyUXVvdGU6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKICAgICB9CiAK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKQEAgLTIxMCwx
MyArMjEyLDE2IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUo
UmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuCiAgICAgICAgIGlmIChuZXdDaGls
ZC0+aXNSZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG5ld0NoaWxk
KS0+YXR0YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgLy8gWW91IGNhbid0IGF0dGFjaFF1b3RlKCkg
b3RoZXJ3aXNlIHRoZSBxdW90ZSB3b3VsZCBiZSBhdHRhY2hlZCB0b28gZWFybHkKKyAgICAgICAg
Ly8gYW5kIGdldCB0aGUgd3JvbmcgZGVwdGggc2luY2UgZ2VuZXJhdGVkIGNvbnRlbnQgaXMgaW5z
ZXJ0ZWQgaW50byBhbm9ueW1vdXMKKyAgICAgICAgLy8gcmVuZGVyZXJzIGJlZm9yZSBnb2luZyBp
bnRvIHRoZSBtYWluIHJlbmRlciB0cmVlLgorCiAgICAgICAgIGlmIChSZW5kZXJOYW1lZEZsb3dU
aHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJOYW1lZEZsb3dUaHJlYWRDb250YWlu
ZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxvd1RocmVhZC0+YWRkRmxvd0NoaWxk
KG5ld0NoaWxkKTsKICAgICB9CiAKICAgICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJv
eWVkKCkpIHsKICAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQo
bmV3Q2hpbGQpOwotICAgICAgICBSZW5kZXJRdW90ZTo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQo
bmV3Q2hpbGQpOwogICAgIH0KICAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7IC8vIEdvZXMgdXAgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGllcmFyY2h5Lgog
ICAgIGlmICghb3duZXItPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKQEAgLTI3OSwxMyArMjg0
LDE1IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBjCiAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5k
ZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKGNoaWxkKS0+YXR0YWNoUmVn
aW9uKCk7CiAKKyAgICAgICAgLy8gQ2FsbGluZyBhdHRhY2hRdW90ZSgpIGhlcmUgd291bGQgYmUg
dG9vIGVhcmx5IChiZWZvcmUgYW5vbnltb3VzIHJlbmRlcmVycyBhcmUgaW5zZXJ0ZWQpCisgICAg
ICAgIC8vIHNlZSBhcHBlbmRDaGlsZCgpIGZvciBtb3JlIGV4cGxhbmF0aW9uLgorCiAgICAgICAg
IGlmIChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJO
YW1lZEZsb3dUaHJlYWRDb250YWluZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxv
d1RocmVhZC0+YWRkRmxvd0NoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgfQogCiAgICAg
aWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJlbmRlckNv
dW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKLSAgICAgICAgUmVuZGVyUXVv
dGU6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKICAgICB9CiAgICAgY2hpbGQtPnNl
dE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIGlmICghb3duZXItPm5vcm1h
bENoaWxkTmVlZHNMYXlvdXQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJRdW90ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUu
Y3BwCmluZGV4IDdmMWQ3NDliMTJlZmI3OGZjYTY3MDY0MGFkM2JkNTM0MzVmOTZmYjIuLjg4OGI0
ZDNkOWM5M2E0MzRlZmMzMzlmY2MzOTJiYmZmZDBhNjc0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclF1b3RlLmNwcApAQCAtMjEsMTE5ICsyMSwzNCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCi0jZGVmaW5lIFVOS05PV05fREVQVEgg
LTEKKyNkZWZpbmUgVSh4KSAoKGNvbnN0IFVDaGFyKilMIyN4KQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0RGVwdGgoaW50ICZkZXB0aCwgUXVvdGVUeXBl
IHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBPUEVOX1FVT1RFOgotICAg
IGNhc2UgTk9fT1BFTl9RVU9URToKLSAgICAgICAgKytkZXB0aDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDTE9TRV9RVU9URToKLSAgICBjYXNlIE5PX0NMT1NFX1FVT1RFOgotICAgICAgICBp
ZiAoZGVwdGgpCi0gICAgICAgICAgICAtLWRlcHRoOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19CiAKIFJlbmRlclF1
b3RlOjpSZW5kZXJRdW90ZShEb2N1bWVudCogbm9kZSwgUXVvdGVUeXBlIHF1b3RlKQogICAgIDog
UmVuZGVyVGV4dChub2RlLCBTdHJpbmdJbXBsOjplbXB0eSgpKQogICAgICwgbV90eXBlKHF1b3Rl
KQotICAgICwgbV9kZXB0aChVTktOT1dOX0RFUFRIKQorICAgICwgbV9kZXB0aCgwKQogICAgICwg
bV9uZXh0KDApCiAgICAgLCBtX3ByZXZpb3VzKDApCisgICAgLCBtX2F0dGFjaGVkKGZhbHNlKQog
ewotICAgIHZpZXcoKS0+YWRkUmVuZGVyUXVvdGUoKTsKIH0KIAogUmVuZGVyUXVvdGU6On5SZW5k
ZXJRdW90ZSgpCiB7CisgICAgQVNTRVJUKCFtX2F0dGFjaGVkKTsKKyAgICBBU1NFUlQoIW1fbmV4
dCAmJiAhbV9wcmV2aW91cyk7CiB9CiAKIHZvaWQgUmVuZGVyUXVvdGU6OndpbGxCZURlc3Ryb3ll
ZCgpCiB7Ci0gICAgaWYgKHZpZXcoKSkKLSAgICAgICAgdmlldygpLT5yZW1vdmVSZW5kZXJRdW90
ZSgpOworICAgIGRldGFjaFF1b3RlKCk7CiAgICAgUmVuZGVyVGV4dDo6d2lsbEJlRGVzdHJveWVk
KCk7CiB9CiAKLWNvbnN0IGNoYXIqIFJlbmRlclF1b3RlOjpyZW5kZXJOYW1lKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gIlJlbmRlclF1b3RlIjsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBwbGFjZXMg
YSBsaXN0IG9mIHF1b3RlIHJlbmRlcmVycyBzdGFydGluZyBhdCAidGhpcyIgaW4gdGhlIGxpc3Qg
b2YgcXVvdGUgcmVuZGVyZXJzIGFscmVhZHkKLS8vIGluIHRoZSBkb2N1bWVudCdzIHJlbmRlcmVy
IHRyZWUuCi0vLyBUaGUgYXNzdW1wdGlvbnMgYXJlIG1hZGUgKGZvciBwZXJmb3JtYW5jZSk6Ci0v
LyAxLiBUaGUgbGlzdCBvZiBxdW90ZXMgYWxyZWFkeSBpbiB0aGUgcmVuZGVyZXJzIHRyZWUgb2Yg
dGhlIGRvY3VtZW50IGlzIGFscmVhZHkgaW4gYSBjb25zaXN0ZW50IHN0YXRlCi0vLyAoQWxsIHF1
b3RlIHJlbmRlcmVycyBhcmUgbGlua2VkIGFuZCBoYXZlIHRoZSBjb3JyZWN0IGRlcHRoIHNldCkK
LS8vIDIuIFRoZSBxdW90ZSByZW5kZXJlcnMgb2YgdGhlIGluc2VydGVkIGxpc3QgYXJlIGluIGEg
dHJlZSBvZiByZW5kZXJlcnMgb2YgdGhlaXIgb3duIHdoaWNoIGhhcyBiZWVuIGp1c3QKLS8vIGlu
c2VydGVkIGluIHRoZSBtYWluIHJlbmRlcmVyIHRyZWUgd2l0aCBpdHMgcm9vdCBhcyBjaGlsZCBv
ZiBzb21lIHJlbmRlcmVyLgotLy8gMy4gVGhlIHF1b3RlIHJlbmRlcmVycyBpbiB0aGUgaW5zZXJ0
ZWQgbGlzdCBoYXZlIGRlcHRocyBjb25zaXN0ZW50IHdpdGggdGhlaXIgcG9zaXRpb24gaW4gdGhl
IGxpc3QgcmVsYXRpdmUKLS8vIHRvICJ0aGlzIiwgdGh1cyBpZiAidGhpcyIgZG9lcyBub3QgbmVl
ZCB0byBjaGFuZ2UgaXRzIGRlcHRoIHVwb24gaW5zZXJ0aW9uLCB0aGUgb3RoZXIgcmVuZGVyZXJz
IGluIHRoZSBsaXN0IGRvbid0Ci0vLyBuZWVkIHRvIGVpdGhlci4KLXZvaWQgUmVuZGVyUXVvdGU6
OnBsYWNlUXVvdGUoKQotewotICAgIFJlbmRlclF1b3RlKiBoZWFkID0gdGhpczsKLSAgICBBU1NF
UlQoIWhlYWQtPm1fcHJldmlvdXMpOwotICAgIFJlbmRlclF1b3RlKiB0YWlsID0gMDsKLSAgICBm
b3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBoZWFkLT5wcmV2aW91c0luUHJlT3JkZXIo
KTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3ItPnByZXZpb3VzSW5QcmVP
cmRlcigpKSB7Ci0gICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVvdGUoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBoZWFkLT5tX3ByZXZpb3VzID0gdG9SZW5kZXJRdW90ZShw
cmVkZWNlc3Nvcik7Ci0gICAgICAgIGlmIChoZWFkLT5tX3ByZXZpb3VzLT5tX25leHQpIHsKLSAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3BsaWNlIHRoZSBsaXN0IG9mIHF1b3RlcyBoZWFkZWQg
YnkgaGVhZCBpbnRvIHRoZSBkb2N1bWVudCdzIGxpc3Qgb2YgcXVvdGVzLgotICAgICAgICAgICAg
dGFpbCA9IGhlYWQ7Ci0gICAgICAgICAgICB3aGlsZSAodGFpbC0+bV9uZXh0KQotICAgICAgICAg
ICAgICAgICB0YWlsID0gdGFpbC0+bV9uZXh0OwotICAgICAgICAgICAgdGFpbC0+bV9uZXh0ID0g
aGVhZC0+bV9wcmV2aW91cy0+bV9uZXh0OwotICAgICAgICAgICAgQVNTRVJUKHRhaWwtPm1fbmV4
dC0+bV9wcmV2aW91cyA9PSBoZWFkLT5tX3ByZXZpb3VzKTsKLSAgICAgICAgICAgIHRhaWwtPm1f
bmV4dC0+bV9wcmV2aW91cyA9ICB0YWlsOwotICAgICAgICAgICAgdGFpbCA9IHRhaWwtPm1fbmV4
dDsgLy8gVGhpcyBtYXJrcyB0aGUgc3BsaWNpbmcgcG9pbnQgaGVyZSB0aGVyZSBtYXkgYmUgYSBk
ZXB0aCBkaXNjb250aW51aXR5Ci0gICAgICAgIH0KLSAgICAgICAgaGVhZC0+bV9wcmV2aW91cy0+
bV9uZXh0ID0gaGVhZDsKLSAgICAgICAgQVNTRVJUKGhlYWQtPm1fcHJldmlvdXMtPm1fZGVwdGgg
IT0gVU5LTk9XTl9ERVBUSCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpbnQgbmV3RGVw
dGg7Ci0gICAgaWYgKCFoZWFkLT5tX3ByZXZpb3VzKSB7Ci0gICAgICAgIG5ld0RlcHRoID0gMDsK
LSAgICAgICAgZ290byBza2lwTmV3RGVwdGhDYWxjOwotICAgIH0KLSAgICBuZXdEZXB0aCA9IGhl
YWQtPm1fcHJldmlvdXMtPm1fZGVwdGg7Ci0gICAgZG8gewotICAgICAgICBhZGp1c3REZXB0aChu
ZXdEZXB0aCwgaGVhZC0+bV9wcmV2aW91cy0+bV90eXBlKTsKLXNraXBOZXdEZXB0aENhbGM6Ci0g
ICAgICAgIGlmIChoZWFkLT5tX2RlcHRoID09IG5ld0RlcHRoKSB7IC8vIEFsbCByZW1haW5pbmcg
ZGVwdGggc2hvdWxkIGJlIGNvcnJlY3QgZXhjZXB0IGlmIHNwbGljaW5nIHdhcyBkb25lLgotICAg
ICAgICAgICAgaWYgKCF0YWlsKSAvLyBXZSd2ZSBkb25lIHRoZSBwb3N0IHNwbGljaW5nIHNlY3Rp
b24gYWxyZWFkeSBvciB0aGVyZSB3YXMgbm8gc3BsaWNpbmcuCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBoZWFkID0gdGFpbDsgLy8gQ29udGludWUgYWZ0ZXIgdGhlIHNwbGlj
aW5nIHBvaW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgc3Bs
aWNpbmcgcG9pbnQgZGlzY29udGludWl0eSBmaXhlZC4KLSAgICAgICAgICAgIG5ld0RlcHRoID0g
aGVhZC0+bV9wcmV2aW91cy0+bV9kZXB0aDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGhlYWQtPm1fZGVwdGggPSBuZXdEZXB0aDsKLSAgICAgICAgLy8gRklYTUU6
IElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBkb2Vz
IG5vdCBjaGFuZ2Ugd2UgbWF5IG9ubHkgbmVlZCB0bwotICAgICAgICAvLyBJbnZhbGlkYXRlIHRo
ZSByZW5kZXJlcidzIGFyZWEgbm90IGEgcmVsYXlvdXQuCi0gICAgICAgIGhlYWQtPnNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICBoZWFkID0gaGVhZC0+bV9uZXh0
OwotICAgICAgICBpZiAoaGVhZCA9PSB0YWlsKSAvLyBXZSBhcmUgYXQgdGhlIHNwbGljaW5nIHBv
aW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgZGVwdGggZGlz
Y29udGludWl0eSBmaXhlZC4KLSAgICB9IHdoaWxlIChoZWFkKTsKLX0KLQotI2RlZmluZSBVKHgp
ICgoY29uc3QgVUNoYXIqKUwjI3gpCi0KIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIGNv
bnN0IFF1b3Rlc0RhdGEqLCBDYXNlRm9sZGluZ0hhc2g+IFF1b3Rlc01hcDsKIAogc3RhdGljIGNv
bnN0IFF1b3Rlc01hcCYgcXVvdGVzRGF0YUxhbmd1YWdlTWFwKCkKQEAgLTE1NywyNyArNzIsMjQg
QEAgc3RhdGljIGNvbnN0IFF1b3Rlc0RhdGEqIGJhc2ljUXVvdGVzRGF0YSgpCiAKIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFwYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKG1fZGVwdGggIT0g
VU5LTk9XTl9ERVBUSCk7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzID0gcXVvdGVzRGF0
YSgpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgogICAg
IGNhc2UgTk9fQ0xPU0VfUVVPVEU6CiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OwogICAgIGNhc2UgQ0xPU0VfUVVPVEU6CiAgICAgICAgIC8vIEZJWE1FOiBXaGVuIG1fZGVwdGgg
aXMgMCB3ZSBzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZy4KLSAgICAgICAgcmV0dXJuIHF1b3Rl
cy0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0gMSwgMCkpLmltcGwoKTsKKyAgICAg
ICAgcmV0dXJuIHF1b3Rlc0RhdGEoKS0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0g
MSwgMCkpLmltcGwoKTsKICAgICBjYXNlIE9QRU5fUVVPVEU6Ci0gICAgICAgIHJldHVybiBxdW90
ZXMtPmdldE9wZW5RdW90ZShtX2RlcHRoKS5pbXBsKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OworICAgICAgICByZXR1cm4gcXVvdGVzRGF0YSgpLT5nZXRPcGVuUXVvdGUobV9kZXB0aCkuaW1w
bCgpOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5n
SW1wbDo6ZW1wdHkoKTsKIH0KIAogdm9pZCBSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoZmxvYXQgbGVhZCkKIHsKKyAgICBpZiAoIW1fYXR0YWNoZWQpCisgICAgICAg
IGF0dGFjaFF1b3RlKCk7CiAgICAgc2V0VGV4dEludGVybmFsKG9yaWdpbmFsVGV4dCgpKTsKICAg
ICBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhsZWFkKTsKIH0KQEAg
LTE5Niw1OCArMTA4LDg5IEBAIGNvbnN0IFF1b3Rlc0RhdGEqIFJlbmRlclF1b3RlOjpxdW90ZXNE
YXRhKCkgY29uc3QKICAgICByZXR1cm4gcXVvdGVzOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpy
ZW5kZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBSZW5k
ZXJRdW90ZTo6YXR0YWNoUXVvdGUoKQogewotICAgIEFTU0VSVChyZW5kZXJlci0+dmlldygpKTsK
LSAgICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhhc1JlbmRlclF1b3RlcygpKQorICAgIEFTU0VS
VCh2aWV3KCkpOworICAgIEFTU0VSVCghbV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX25leHQg
JiYgIW1fcHJldmlvdXMpOworCisgICAgLy8gRklYTUU6IERvbid0IHNldCBwcmVmIHdpZHRocyBk
aXJ0eSBkdXJpbmcgbGF5b3V0LiBTZWUgdXBkYXRlRGVwdGgoKSBmb3IKKyAgICAvLyBtb3JlIGRl
dGFpbC4KKyAgICBpZiAoIWlzUm9vdGVkKCkpIHsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZp
ZXcoKS0+cmVuZGVyUXVvdGVIZWFkKCkpIHsKKyAgICAgICAgdmlldygpLT5zZXRSZW5kZXJRdW90
ZUhlYWQodGhpcyk7CisgICAgICAgIG1fYXR0YWNoZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGRlc2NlbmRhbnQgPSByZW5kZXJlcjsgZGVzY2VuZGFu
dDsgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQtPm5leHRJblByZU9yZGVyKHJlbmRlcmVyKSkKLSAg
ICAgICAgaWYgKGRlc2NlbmRhbnQtPmlzUXVvdGUoKSkgewotICAgICAgICAgICAgdG9SZW5kZXJR
dW90ZShkZXNjZW5kYW50KS0+cGxhY2VRdW90ZSgpOworICAgIH0KKworICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBwcmVkZWNlc3NvciA9IHByZXZpb3VzSW5QcmVPcmRlcigpOyBwcmVkZWNlc3Nvcjsg
cHJlZGVjZXNzb3IgPSBwcmVkZWNlc3Nvci0+cHJldmlvdXNJblByZU9yZGVyKCkpIHsKKyAgICAg
ICAgaWYgKHByZWRlY2Vzc29yLT5pc1F1b3RlKCkpIHsKKyAgICAgICAgICAgIG1fcHJldmlvdXMg
PSB0b1JlbmRlclF1b3RlKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgIG1fbmV4dCA9IG1fcHJl
dmlvdXMtPm1fbmV4dDsKKyAgICAgICAgICAgIG1fcHJldmlvdXMtPm1fbmV4dCA9IHRoaXM7Cisg
ICAgICAgICAgICBpZiAobV9uZXh0KQorICAgICAgICAgICAgICAgIG1fbmV4dC0+bV9wcmV2aW91
cyA9IHRoaXM7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghbV9wcmV2aW91cykgeworICAgICAgICBtX25leHQgPSB2aWV3KCktPnJlbmRlclF1b3RlSGVh
ZCgpOworICAgICAgICB2aWV3KCktPnNldFJlbmRlclF1b3RlSGVhZCh0aGlzKTsKKyAgICB9Cisg
ICAgbV9hdHRhY2hlZCA9IHRydWU7CisgICAgZm9yIChSZW5kZXJRdW90ZSogcXVvdGUgPSB0aGlz
OyBxdW90ZTsgcXVvdGUgPSBxdW90ZS0+bV9uZXh0KQorICAgICAgICBxdW90ZS0+dXBkYXRlRGVw
dGgoKTsKIH0KIAotdm9pZCBSZW5kZXJRdW90ZTo6cmVuZGVyZXJSZW1vdmVkRnJvbVRyZWUoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKK3ZvaWQgUmVuZGVyUXVvdGU6OmRldGFjaFF1b3RlKCkKIHsK
LSAgICBBU1NFUlQocmVuZGVyZXItPnZpZXcoKSk7Ci0gICAgaWYgKCFyZW5kZXJlci0+dmlldygp
LT5oYXNSZW5kZXJRdW90ZXMoKSkKKyAgICBpZiAoIW1fYXR0YWNoZWQpCiAgICAgICAgIHJldHVy
bjsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogZGVzY2VuZGFudCA9IHJlbmRlcmVyOyBkZXNjZW5k
YW50OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+bmV4dEluUHJlT3JkZXIocmVuZGVyZXIpKQot
ICAgICAgICBpZiAoZGVzY2VuZGFudC0+aXNRdW90ZSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJR
dW90ZSogcmVtb3ZlZFF1b3RlID0gdG9SZW5kZXJRdW90ZShkZXNjZW5kYW50KTsKLSAgICAgICAg
ICAgIFJlbmRlclF1b3RlKiBsYXN0UXVvdGVCZWZvcmUgPSByZW1vdmVkUXVvdGUtPm1fcHJldmlv
dXM7Ci0gICAgICAgICAgICByZW1vdmVkUXVvdGUtPm1fcHJldmlvdXMgPSAwOwotICAgICAgICAg
ICAgaW50IGRlcHRoID0gcmVtb3ZlZFF1b3RlLT5tX2RlcHRoOwotICAgICAgICAgICAgZm9yIChk
ZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+bmV4dEluUHJlT3JkZXIocmVuZGVyZXIpOyBkZXNjZW5k
YW50OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+bmV4dEluUHJlT3JkZXIocmVuZGVyZXIpKQot
ICAgICAgICAgICAgICAgIGlmIChkZXNjZW5kYW50LT5pc1F1b3RlKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJlbW92ZWRRdW90ZSA9IHRvUmVuZGVyUXVvdGUoZGVzY2VuZGFudCk7Ci0gICAgICAg
ICAgICBSZW5kZXJRdW90ZSogcXVvdGVBZnRlciA9IHJlbW92ZWRRdW90ZS0+bV9uZXh0OwotICAg
ICAgICAgICAgcmVtb3ZlZFF1b3RlLT5tX25leHQgPSAwOwotICAgICAgICAgICAgaWYgKGxhc3RR
dW90ZUJlZm9yZSkKLSAgICAgICAgICAgICAgICBsYXN0UXVvdGVCZWZvcmUtPm1fbmV4dCA9IHF1
b3RlQWZ0ZXI7Ci0gICAgICAgICAgICBpZiAocXVvdGVBZnRlcikgewotICAgICAgICAgICAgICAg
IHF1b3RlQWZ0ZXItPm1fcHJldmlvdXMgPSBsYXN0UXVvdGVCZWZvcmU7Ci0gICAgICAgICAgICAg
ICAgZG8gewotICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGggPT0gcXVvdGVBZnRlci0+bV9k
ZXB0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBxdW90ZUFmdGVyLT5tX2RlcHRoID0gZGVwdGg7Ci0gICAgICAgICAgICAgICAgICAgIHF1b3Rl
QWZ0ZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICAgICAg
ICAgICAgICBhZGp1c3REZXB0aChkZXB0aCwgcXVvdGVBZnRlci0+bV90eXBlKTsKLSAgICAgICAg
ICAgICAgICAgICAgcXVvdGVBZnRlciA9IHF1b3RlQWZ0ZXItPm1fbmV4dDsKLSAgICAgICAgICAg
ICAgICB9IHdoaWxlIChxdW90ZUFmdGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9CisgICAgaWYgKG1fcHJldmlvdXMpCisgICAgICAgIG1fcHJldmlvdXMt
Pm1fbmV4dCA9IG1fbmV4dDsKKyAgICBlbHNlIGlmICh2aWV3KCkpCisgICAgICAgIHZpZXcoKS0+
c2V0UmVuZGVyUXVvdGVIZWFkKG1fbmV4dCk7CisgICAgaWYgKG1fbmV4dCkKKyAgICAgICAgbV9u
ZXh0LT5tX3ByZXZpb3VzID0gbV9wcmV2aW91czsKKyAgICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0
cm95ZWQoKSkgeworICAgICAgICBmb3IgKFJlbmRlclF1b3RlKiBxdW90ZSA9IG1fbmV4dDsgcXVv
dGU7IHF1b3RlID0gcXVvdGUtPm1fbmV4dCkKKyAgICAgICAgICAgIHF1b3RlLT51cGRhdGVEZXB0
aCgpOworICAgIH0KKyAgICBtX2F0dGFjaGVkID0gZmFsc2U7CisgICAgbV9uZXh0ID0gMDsKKyAg
ICBtX3ByZXZpb3VzID0gMDsKKyAgICBtX2RlcHRoID0gMDsKIH0KIAotdm9pZCBSZW5kZXJRdW90
ZTo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZSkKK3ZvaWQgUmVuZGVyUXVvdGU6OnVwZGF0ZURlcHRoKCkKIHsKLSAgICBjb25z
dCBRdW90ZXNEYXRhKiBuZXdRdW90ZXMgPSBzdHlsZSgpLT5xdW90ZXMoKTsKLSAgICBjb25zdCBR
dW90ZXNEYXRhKiBvbGRRdW90ZXMgPSBvbGRTdHlsZSA/IG9sZFN0eWxlLT5xdW90ZXMoKSA6IDA7
Ci0gICAgaWYgKCFRdW90ZXNEYXRhOjplcXVhbHMobmV3UXVvdGVzLCBvbGRRdW90ZXMpKQorICAg
IEFTU0VSVChtX2F0dGFjaGVkKTsKKyAgICBpbnQgb2xkRGVwdGggPSBtX2RlcHRoOworICAgIG1f
ZGVwdGggPSAwOworICAgIGlmIChtX3ByZXZpb3VzKSB7CisgICAgICAgIG1fZGVwdGggPSBtX3By
ZXZpb3VzLT5tX2RlcHRoOworICAgICAgICBzd2l0Y2ggKG1fcHJldmlvdXMtPm1fdHlwZSkgewor
ICAgICAgICBjYXNlIE9QRU5fUVVPVEU6CisgICAgICAgIGNhc2UgTk9fT1BFTl9RVU9URToKKyAg
ICAgICAgICAgIG1fZGVwdGgrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENM
T1NFX1FVT1RFOgorICAgICAgICBjYXNlIE5PX0NMT1NFX1FVT1RFOgorICAgICAgICAgICAgaWYg
KG1fZGVwdGgpCisgICAgICAgICAgICAgICAgbV9kZXB0aC0tOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gRklYTUU6IERvbid0IGRpcnR5IHByZWYgd2lkdGhz
IGluc2lkZSBvZiBsYXlvdXQgYmVjYXVzZSBhIHBhcmVudCBtYXkgZG8KKyAgICAvLyBzZXROZWVk
c0xheW91dChmYWxzZSkgd2hpY2ggd291bGQgcHJldmVudCB0aGUgbmVlZGVkIHJlY2FsYy4gSW5z
dGVhZCB1c2UKKyAgICAvLyBhIHByZS1sYXlvdXQgaG9vay4KKyAgICBpZiAob2xkRGVwdGggIT0g
bV9kZXB0aCkKICAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0g
ICAgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUXVvdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oCmlu
ZGV4IGI2ZjNjNTU5OTI4YjVlZjQwNDlhOTM3OTQzNTIxNzBjMTZhYzIzOGYuLjY5NjAxMWZlNDkz
ZDJjNzYwYTViNWZlMWE5NTBmMjgxYjgwYWRhMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJRdW90ZS5oCkBAIC0yMSw2ICsyMSw5IEBACiAjaWZuZGVmIFJlbmRlclF1b3RlX2gKICNk
ZWZpbmUgUmVuZGVyUXVvdGVfaAogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJR
dW90ZXNEYXRhLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJT
dHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKIApAQCAtMzAsMjQgKzMz
LDI0IEBAIGNsYXNzIFJlbmRlclF1b3RlIDogcHVibGljIFJlbmRlclRleHQgewogcHVibGljOgog
ICAgIFJlbmRlclF1b3RlKERvY3VtZW50KiwgY29uc3QgUXVvdGVUeXBlKTsKICAgICB2aXJ0dWFs
IH5SZW5kZXJRdW90ZSgpOworICAgIHZvaWQgYXR0YWNoUXVvdGUoKTsKKyAgICB2b2lkIGRldGFj
aFF1b3RlKCk7CiAKLSAgICBzdGF0aWMgdm9pZCByZW5kZXJlclN1YnRyZWVBdHRhY2hlZChSZW5k
ZXJPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCByZW5kZXJlclJlbW92ZWRGcm9tVHJlZShSZW5k
ZXJPYmplY3QqKTsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZpcnR1
YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUXVvdGUoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBv
cmlnaW5hbFRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVz
dHJveWVkKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gIlJlbmRlclF1b3RlIjsgfTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNRdW90ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH07CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsVGV4dCgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFk
V2lkdGgpIE9WRVJSSURFOworCiAgICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzRGF0YSgpIGNv
bnN0OworICAgIHZvaWQgdXBkYXRlRGVwdGgoKTsKIAogICAgIFF1b3RlVHlwZSBtX3R5cGU7CiAg
ICAgaW50IG1fZGVwdGg7CiAgICAgUmVuZGVyUXVvdGUqIG1fbmV4dDsKICAgICBSZW5kZXJRdW90
ZSogbV9wcmV2aW91czsKLSAgICB2b2lkIHBsYWNlUXVvdGUoKTsKKyAgICBib29sIG1fYXR0YWNo
ZWQ7CiB9OwogCiBpbmxpbmUgUmVuZGVyUXVvdGUqIHRvUmVuZGVyUXVvdGUoUmVuZGVyT2JqZWN0
KiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggOGJk
NDljY2ZhZTFhZGRjOWY2Y2U2NWEyYzliZmQ5Mjk1NzM3NTE5Zi4uNzViNDcyNTY4NTE1Yzg5M2Jh
YjE0NmFmNDZhNzQ1OTIzYmVlYTYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcApAQCAtNjIsNyArNjIsNyBAQCBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5v
ZGUsIEZyYW1lVmlldyogdmlldykKICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKGZh
bHNlKQogICAgICwgbV9sYXlvdXRTdGF0ZSgwKQogICAgICwgbV9sYXlvdXRTdGF0ZURpc2FibGVD
b3VudCgwKQotICAgICwgbV9yZW5kZXJRdW90ZUNvdW50KDApCisgICAgLCBtX3JlbmRlclF1b3Rl
SGVhZCgwKQogICAgICwgbV9yZW5kZXJDb3VudGVyQ291bnQoMCkKIHsKICAgICAvLyBDbGVhciBv
dXIgYW5vbnltb3VzIGJpdCwgc2V0IGJlY2F1c2UgUmVuZGVyT2JqZWN0IGFzc3VtZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IDA0YTgwNmU5YmNhNTkxZTE1YTY1N2Ex
MjgxYTJlMDFiZGVkZmJkMDguLjAwZWE1MzdlNGRlZmVkMjNkNzA0OWRjNzg1OThiOGQ0NjFkYzJj
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMzIsNiArMzIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb3dUaHJlYWRDb250cm9sbGVyOwogY2xh
c3MgUmVuZGVyV2lkZ2V0OworY2xhc3MgUmVuZGVyUXVvdGU7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CkBAIC0xOTQsMTMg
KzE5NSwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEZpeGVkUG9zaXRpb25lZE9iamVjdHNO
ZWVkTGF5b3V0KCk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmsgYXJvdW5kIGJlY2F1
c2UgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY291bnRlcnMgYW5kIHF1b3RlcworICAg
IHZvaWQgc2V0UmVuZGVyUXVvdGVIZWFkKFJlbmRlclF1b3RlKiBoZWFkKSB7IG1fcmVuZGVyUXVv
dGVIZWFkID0gaGVhZDsgfQorICAgIFJlbmRlclF1b3RlKiByZW5kZXJRdW90ZUhlYWQoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlclF1b3RlSGVhZDsgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMg
YSB3b3JrIGFyb3VuZCBiZWNhdXNlIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGNvdW50
ZXJzCiAgICAgLy8gcmVxdWlyZXMgd2Fsa2luZyB0aGUgZW50aXJlIHRyZWUgcmVwZWF0ZWRseSBh
bmQgbW9zdCBwYWdlcyBkb24ndCBhY3R1YWxseSB1c2UgZWl0aGVyCiAgICAgLy8gZmVhdHVyZSBz
byB3ZSBzaG91bGRuJ3QgdGFrZSB0aGUgcGVyZm9ybWFuY2UgaGl0IHdoZW4gbm90IG5lZWRlZC4g
TG9uZyB0ZXJtIHdlIHNob3VsZAogICAgIC8vIHJld3JpdGUgdGhlIGNvdW50ZXIgYW5kIHF1b3Rl
cyBjb2RlLgotICAgIHZvaWQgYWRkUmVuZGVyUXVvdGUoKSB7IG1fcmVuZGVyUXVvdGVDb3VudCsr
OyB9Ci0gICAgdm9pZCByZW1vdmVSZW5kZXJRdW90ZSgpIHsgQVNTRVJUKG1fcmVuZGVyUXVvdGVD
b3VudCA+IDApOyBtX3JlbmRlclF1b3RlQ291bnQtLTsgfQotICAgIGJvb2wgaGFzUmVuZGVyUXVv
dGVzKCkgeyByZXR1cm4gbV9yZW5kZXJRdW90ZUNvdW50OyB9CiAgICAgdm9pZCBhZGRSZW5kZXJD
b3VudGVyKCkgeyBtX3JlbmRlckNvdW50ZXJDb3VudCsrOyB9CiAgICAgdm9pZCByZW1vdmVSZW5k
ZXJDb3VudGVyKCkgeyBBU1NFUlQobV9yZW5kZXJDb3VudGVyQ291bnQgPiAwKTsgbV9yZW5kZXJD
b3VudGVyQ291bnQtLTsgfQogICAgIGJvb2wgaGFzUmVuZGVyQ291bnRlcnMoKSB7IHJldHVybiBt
X3JlbmRlckNvdW50ZXJDb3VudDsgfQpAQCAtMzAxLDcgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAg
T3duUHRyPEZsb3dUaHJlYWRDb250cm9sbGVyPiBtX2Zsb3dUaHJlYWRDb250cm9sbGVyOwogICAg
IFJlZlB0cjxJbnRlcnZhbEFyZW5hPiBtX2ludGVydmFsQXJlbmE7CiAKLSAgICB1bnNpZ25lZCBt
X3JlbmRlclF1b3RlQ291bnQ7CisgICAgUmVuZGVyUXVvdGUqIG1fcmVuZGVyUXVvdGVIZWFkOwog
ICAgIHVuc2lnbmVkIG1fcmVuZGVyQ291bnRlckNvdW50OwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggNmZmZWE0Y2JmYzUxOWIy
Y2VmMjNiYjNjOTRiZTI3MmFlODdkNzc5ZC4uOGVkMDgwNGZhNDE3NzgwZGU1MTZjMzY2NWU4N2E5
ZTg0N2RkNGRlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuY3BwCkBAIC01ODAsNiArNTgwLDkgQEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRlclN0eWxl
OjpkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlciwgdW5zaWduZWQmIGNoYW5nZWRDb24KICAg
ICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91dDsKICAgICB9CiAKKyAgICBpZiAoIVF1
b3Rlc0RhdGE6OmVxdWFscyhyYXJlSW5oZXJpdGVkRGF0YS0+cXVvdGVzLmdldCgpLCBvdGhlci0+
cmFyZUluaGVyaXRlZERhdGEtPnF1b3Rlcy5nZXQoKSkpCisgICAgICAgIHJldHVybiBTdHlsZURp
ZmZlcmVuY2VMYXlvdXQ7CisKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIFNWR1JlbmRlclN0eWxl
OjpkaWZmKCkgbWlnaHQgaGF2ZSByZXR1cm5lZCBTdHlsZURpZmZlcmVuY2VSZXBhaW50LCBlZy4g
aWYgZmlsbCBjaGFuZ2VzLgogICAgIC8vIElmIGVnLiB0aGUgZm9udC1zaXplIGNoYW5nZWQgYXQg
dGhlIHNhbWUgdGltZSwgd2UncmUgbm90IGFsbG93ZWQgdG8gcmV0dXJuIFN0eWxlRGlmZmVyZW5j
ZVJlcGFpbnQsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156990</attachid>
            <date>2012-08-07 13:30:58 -0700</date>
            <delta_ts>2012-08-07 13:52:29 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-93056-20120807133034.patch</filename>
            <type>text/plain</type>
            <size>20874</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNiMTk0ZTE1MTBlYTQ4
ODJlN2NkNTUyOWI5YjhiYmRiN2VjMWM0ZC4uYWVhNzQ2M2YyNTc2ZTFjMDNjMjdlMGRiOWJhNDYx
ZjAzMmU1ODA1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTA4LTAyICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIFJlaW1wbGVtZW50IFJl
bmRlclF1b3RlIHBsYWNlbWVudCBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgR3JlYXRseSBzaW1wbGlmeSB0aGUgY29kZSB0aGF0IG1haW50
YWlucyB0aGUgbGlua2VkIGxpc3Qgb2YgUmVuZGVyUXVvdGVzLiBOb3cgUmVuZGVyUXVvdGUKKyAg
ICAgICAgaXMgcGxhY2VkIGludG8gdGhlIGxpbmtlZCBsaXN0IGluIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzIG9uIGZpcnN0IGFjY2VzcyBhbmQgaXMKKyAgICAgICAgZGV0YWNoZWQgd2hl
biBkZXN0cm95ZWQgKG9yIGV4cGxpY2l0bHkgcmVtb3ZlZCkuCisKKyAgICAgICAgVGhlIG5ldyBh
bGdvcml0aG0gZG9lc24ndCByZXF1aXJlIHdhbGtpbmcgdXAgdGhlIHRyZWUgb2YgcmVuZGVyZXJz
IHdoZW4gdGhlcmUgYXJlIG5vCisgICAgICAgIFJlbmRlclF1b3RlcyBpbiB0aGUgdHJlZSB5ZXQs
IGFuZCBhbHNvIHJlbW92ZXMgdGhlIG5lZWQgdG8gd2FsayBvdmVyIGV2ZXJ5IHN1YnRyZWUKKyAg
ICAgICAgd2hlbiBpbnNlcnRpbmcgaW4gcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnkgYmVo
YXZpb3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2Rl
KTogQ2FsbCBkZXRhY2hRdW90ZSB3aGVuIHJlbW92aW5nIGZyb20gYSBjaGlsZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJRdW90ZTo6UmVuZGVyUXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVv
dGU6On5SZW5kZXJRdW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6d2lsbEJl
RGVzdHJveWVkKTogQ2FsbCBkZXRhY2hRdW90ZSB0byBlbnN1cmUgYWxsIGRlc3Ryb3llZCBxdW90
ZXMgYXJlIGRldGFjaGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFs
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOiBBdHRhY2ggcXVvdGUgYmVmb3JlIGNvbXB1dGluZyB0aGUgd2lkdGguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjphdHRhY2hR
dW90ZSk6IFB1dHMgdGhlIFJlbmRlclF1b3RlIGluIHRoZSBsaW5rZWQgbGlzdCBvZiBxdW90ZXMg
YW5kIGNvbXB1dGVzIHRoZSBkZXB0aC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjpk
ZXRhY2hRdW90ZSk6IFJlbW92ZXMgdGhlIHF1b3RlIGZyb20gdGhlIGxpbmtlZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6OnVwZGF0ZURlcHRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyUXVvdGUuaDoKKyAgICAgICAgKFJlbmRlclF1b3RlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3R5bGU6OmRpZmYpOiBSZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0IGlmIHF1b3RlcyBjaGFu
Z2UgYW5kIHJlbW92ZSBjaGVjayBpbiBzdHlsZURpZENoYW5nZSBpbiBSZW5kZXJRdW90ZS4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3OjpSZW5kZXJWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRSZW5k
ZXJRdW90ZUhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVuZGVyUXVvdGVI
ZWFkKTogU3RvcmVzIHRoZSBmaXJzdCBxdW90ZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIChS
ZW5kZXJWaWV3KToKKwogMjAxMi0wOC0wMiAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0
Lm9yZz4KIAogICAgICAgICBTbGlkZXIgc2hvdWxkIHNuYXAgdG8gZGF0YWxpc3QgdGljayBtYXJr
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxk
TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
LmNwcAppbmRleCBkYTk4MDg4ZTIxNTYzNTY3Mjk0YzY2YzEzNzM5OTQ1YTkzNDViODc2Li4zMTU4
ZmJmYjY5OWRkY2JmYWMwZmYyOTIyYjNjMzgyOGU3MTlmZmFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcApAQCAtMTE3LDYgKzEx
Nyw5IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5v
ZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgICAgIGlmIChvbGRDaGlsZC0+aXNS
ZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG9sZENoaWxkKS0+ZGV0
YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgaWYgKG9sZENoaWxkLT5pc1F1b3RlKCkpCisgICAgICAg
ICAgICB0b1JlbmRlclF1b3RlKG9sZENoaWxkKS0+ZGV0YWNoUXVvdGUoKTsKKwogICAgICAgICBp
ZiAob2xkQ2hpbGQtPmluUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgICAgICBpZiAob2xk
Q2hpbGQtPmlzQm94KCkpCiAgICAgICAgICAgICAgICAgb2xkQ2hpbGQtPmVuY2xvc2luZ1JlbmRl
ckZsb3dUaHJlYWQoKS0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyh0b1JlbmRlckJveChvbGRD
aGlsZCkpOwpAQCAtMTU4LDcgKzE2MSw2IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAg
Ly8gYnkgc2tpcHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVzdHJveWluZyB0aGUgZW50aXJlIHRyZWUu
CiAgICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJl
bmRlckNvdW50ZXI6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKLSAgICAgICAg
UmVuZGVyUXVvdGU6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKICAgICB9CiAK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKQEAgLTIxMCwx
MyArMjEyLDE2IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUo
UmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuCiAgICAgICAgIGlmIChuZXdDaGls
ZC0+aXNSZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG5ld0NoaWxk
KS0+YXR0YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgLy8gWW91IGNhbid0IGF0dGFjaFF1b3RlKCkg
b3RoZXJ3aXNlIHRoZSBxdW90ZSB3b3VsZCBiZSBhdHRhY2hlZCB0b28gZWFybHkKKyAgICAgICAg
Ly8gYW5kIGdldCB0aGUgd3JvbmcgZGVwdGggc2luY2UgZ2VuZXJhdGVkIGNvbnRlbnQgaXMgaW5z
ZXJ0ZWQgaW50byBhbm9ueW1vdXMKKyAgICAgICAgLy8gcmVuZGVyZXJzIGJlZm9yZSBnb2luZyBp
bnRvIHRoZSBtYWluIHJlbmRlciB0cmVlLgorCiAgICAgICAgIGlmIChSZW5kZXJOYW1lZEZsb3dU
aHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJOYW1lZEZsb3dUaHJlYWRDb250YWlu
ZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxvd1RocmVhZC0+YWRkRmxvd0NoaWxk
KG5ld0NoaWxkKTsKICAgICB9CiAKICAgICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJv
eWVkKCkpIHsKICAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQo
bmV3Q2hpbGQpOwotICAgICAgICBSZW5kZXJRdW90ZTo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQo
bmV3Q2hpbGQpOwogICAgIH0KICAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7IC8vIEdvZXMgdXAgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGllcmFyY2h5Lgog
ICAgIGlmICghb3duZXItPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKQEAgLTI3OSwxMyArMjg0
LDE1IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBjCiAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5k
ZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKGNoaWxkKS0+YXR0YWNoUmVn
aW9uKCk7CiAKKyAgICAgICAgLy8gQ2FsbGluZyBhdHRhY2hRdW90ZSgpIGhlcmUgd291bGQgYmUg
dG9vIGVhcmx5IChiZWZvcmUgYW5vbnltb3VzIHJlbmRlcmVycyBhcmUgaW5zZXJ0ZWQpCisgICAg
ICAgIC8vIHNlZSBhcHBlbmRDaGlsZCgpIGZvciBtb3JlIGV4cGxhbmF0aW9uLgorCiAgICAgICAg
IGlmIChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJO
YW1lZEZsb3dUaHJlYWRDb250YWluZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxv
d1RocmVhZC0+YWRkRmxvd0NoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgfQogCiAgICAg
aWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJlbmRlckNv
dW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKLSAgICAgICAgUmVuZGVyUXVv
dGU6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKICAgICB9CiAgICAgY2hpbGQtPnNl
dE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIGlmICghb3duZXItPm5vcm1h
bENoaWxkTmVlZHNMYXlvdXQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJRdW90ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUu
Y3BwCmluZGV4IDdmMWQ3NDliMTJlZmI3OGZjYTY3MDY0MGFkM2JkNTM0MzVmOTZmYjIuLjEwNmJi
NjcwNzM3YzY0NGQzNmFmNTZkZmZjODZkZWIwYWJmNDk4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclF1b3RlLmNwcApAQCAtMjEsMTE5ICsyMSwzNCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCi0jZGVmaW5lIFVOS05PV05fREVQVEgg
LTEKKyNkZWZpbmUgVSh4KSAoKGNvbnN0IFVDaGFyKilMIyN4KQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0RGVwdGgoaW50ICZkZXB0aCwgUXVvdGVUeXBl
IHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBPUEVOX1FVT1RFOgotICAg
IGNhc2UgTk9fT1BFTl9RVU9URToKLSAgICAgICAgKytkZXB0aDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDTE9TRV9RVU9URToKLSAgICBjYXNlIE5PX0NMT1NFX1FVT1RFOgotICAgICAgICBp
ZiAoZGVwdGgpCi0gICAgICAgICAgICAtLWRlcHRoOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19CiAKIFJlbmRlclF1
b3RlOjpSZW5kZXJRdW90ZShEb2N1bWVudCogbm9kZSwgUXVvdGVUeXBlIHF1b3RlKQogICAgIDog
UmVuZGVyVGV4dChub2RlLCBTdHJpbmdJbXBsOjplbXB0eSgpKQogICAgICwgbV90eXBlKHF1b3Rl
KQotICAgICwgbV9kZXB0aChVTktOT1dOX0RFUFRIKQorICAgICwgbV9kZXB0aCgwKQogICAgICwg
bV9uZXh0KDApCiAgICAgLCBtX3ByZXZpb3VzKDApCisgICAgLCBtX2F0dGFjaGVkKGZhbHNlKQog
ewotICAgIHZpZXcoKS0+YWRkUmVuZGVyUXVvdGUoKTsKIH0KIAogUmVuZGVyUXVvdGU6On5SZW5k
ZXJRdW90ZSgpCiB7CisgICAgQVNTRVJUKCFtX2F0dGFjaGVkKTsKKyAgICBBU1NFUlQoIW1fbmV4
dCAmJiAhbV9wcmV2aW91cyk7CiB9CiAKIHZvaWQgUmVuZGVyUXVvdGU6OndpbGxCZURlc3Ryb3ll
ZCgpCiB7Ci0gICAgaWYgKHZpZXcoKSkKLSAgICAgICAgdmlldygpLT5yZW1vdmVSZW5kZXJRdW90
ZSgpOworICAgIGRldGFjaFF1b3RlKCk7CiAgICAgUmVuZGVyVGV4dDo6d2lsbEJlRGVzdHJveWVk
KCk7CiB9CiAKLWNvbnN0IGNoYXIqIFJlbmRlclF1b3RlOjpyZW5kZXJOYW1lKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gIlJlbmRlclF1b3RlIjsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBwbGFjZXMg
YSBsaXN0IG9mIHF1b3RlIHJlbmRlcmVycyBzdGFydGluZyBhdCAidGhpcyIgaW4gdGhlIGxpc3Qg
b2YgcXVvdGUgcmVuZGVyZXJzIGFscmVhZHkKLS8vIGluIHRoZSBkb2N1bWVudCdzIHJlbmRlcmVy
IHRyZWUuCi0vLyBUaGUgYXNzdW1wdGlvbnMgYXJlIG1hZGUgKGZvciBwZXJmb3JtYW5jZSk6Ci0v
LyAxLiBUaGUgbGlzdCBvZiBxdW90ZXMgYWxyZWFkeSBpbiB0aGUgcmVuZGVyZXJzIHRyZWUgb2Yg
dGhlIGRvY3VtZW50IGlzIGFscmVhZHkgaW4gYSBjb25zaXN0ZW50IHN0YXRlCi0vLyAoQWxsIHF1
b3RlIHJlbmRlcmVycyBhcmUgbGlua2VkIGFuZCBoYXZlIHRoZSBjb3JyZWN0IGRlcHRoIHNldCkK
LS8vIDIuIFRoZSBxdW90ZSByZW5kZXJlcnMgb2YgdGhlIGluc2VydGVkIGxpc3QgYXJlIGluIGEg
dHJlZSBvZiByZW5kZXJlcnMgb2YgdGhlaXIgb3duIHdoaWNoIGhhcyBiZWVuIGp1c3QKLS8vIGlu
c2VydGVkIGluIHRoZSBtYWluIHJlbmRlcmVyIHRyZWUgd2l0aCBpdHMgcm9vdCBhcyBjaGlsZCBv
ZiBzb21lIHJlbmRlcmVyLgotLy8gMy4gVGhlIHF1b3RlIHJlbmRlcmVycyBpbiB0aGUgaW5zZXJ0
ZWQgbGlzdCBoYXZlIGRlcHRocyBjb25zaXN0ZW50IHdpdGggdGhlaXIgcG9zaXRpb24gaW4gdGhl
IGxpc3QgcmVsYXRpdmUKLS8vIHRvICJ0aGlzIiwgdGh1cyBpZiAidGhpcyIgZG9lcyBub3QgbmVl
ZCB0byBjaGFuZ2UgaXRzIGRlcHRoIHVwb24gaW5zZXJ0aW9uLCB0aGUgb3RoZXIgcmVuZGVyZXJz
IGluIHRoZSBsaXN0IGRvbid0Ci0vLyBuZWVkIHRvIGVpdGhlci4KLXZvaWQgUmVuZGVyUXVvdGU6
OnBsYWNlUXVvdGUoKQotewotICAgIFJlbmRlclF1b3RlKiBoZWFkID0gdGhpczsKLSAgICBBU1NF
UlQoIWhlYWQtPm1fcHJldmlvdXMpOwotICAgIFJlbmRlclF1b3RlKiB0YWlsID0gMDsKLSAgICBm
b3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBoZWFkLT5wcmV2aW91c0luUHJlT3JkZXIo
KTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3ItPnByZXZpb3VzSW5QcmVP
cmRlcigpKSB7Ci0gICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVvdGUoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBoZWFkLT5tX3ByZXZpb3VzID0gdG9SZW5kZXJRdW90ZShw
cmVkZWNlc3Nvcik7Ci0gICAgICAgIGlmIChoZWFkLT5tX3ByZXZpb3VzLT5tX25leHQpIHsKLSAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3BsaWNlIHRoZSBsaXN0IG9mIHF1b3RlcyBoZWFkZWQg
YnkgaGVhZCBpbnRvIHRoZSBkb2N1bWVudCdzIGxpc3Qgb2YgcXVvdGVzLgotICAgICAgICAgICAg
dGFpbCA9IGhlYWQ7Ci0gICAgICAgICAgICB3aGlsZSAodGFpbC0+bV9uZXh0KQotICAgICAgICAg
ICAgICAgICB0YWlsID0gdGFpbC0+bV9uZXh0OwotICAgICAgICAgICAgdGFpbC0+bV9uZXh0ID0g
aGVhZC0+bV9wcmV2aW91cy0+bV9uZXh0OwotICAgICAgICAgICAgQVNTRVJUKHRhaWwtPm1fbmV4
dC0+bV9wcmV2aW91cyA9PSBoZWFkLT5tX3ByZXZpb3VzKTsKLSAgICAgICAgICAgIHRhaWwtPm1f
bmV4dC0+bV9wcmV2aW91cyA9ICB0YWlsOwotICAgICAgICAgICAgdGFpbCA9IHRhaWwtPm1fbmV4
dDsgLy8gVGhpcyBtYXJrcyB0aGUgc3BsaWNpbmcgcG9pbnQgaGVyZSB0aGVyZSBtYXkgYmUgYSBk
ZXB0aCBkaXNjb250aW51aXR5Ci0gICAgICAgIH0KLSAgICAgICAgaGVhZC0+bV9wcmV2aW91cy0+
bV9uZXh0ID0gaGVhZDsKLSAgICAgICAgQVNTRVJUKGhlYWQtPm1fcHJldmlvdXMtPm1fZGVwdGgg
IT0gVU5LTk9XTl9ERVBUSCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpbnQgbmV3RGVw
dGg7Ci0gICAgaWYgKCFoZWFkLT5tX3ByZXZpb3VzKSB7Ci0gICAgICAgIG5ld0RlcHRoID0gMDsK
LSAgICAgICAgZ290byBza2lwTmV3RGVwdGhDYWxjOwotICAgIH0KLSAgICBuZXdEZXB0aCA9IGhl
YWQtPm1fcHJldmlvdXMtPm1fZGVwdGg7Ci0gICAgZG8gewotICAgICAgICBhZGp1c3REZXB0aChu
ZXdEZXB0aCwgaGVhZC0+bV9wcmV2aW91cy0+bV90eXBlKTsKLXNraXBOZXdEZXB0aENhbGM6Ci0g
ICAgICAgIGlmIChoZWFkLT5tX2RlcHRoID09IG5ld0RlcHRoKSB7IC8vIEFsbCByZW1haW5pbmcg
ZGVwdGggc2hvdWxkIGJlIGNvcnJlY3QgZXhjZXB0IGlmIHNwbGljaW5nIHdhcyBkb25lLgotICAg
ICAgICAgICAgaWYgKCF0YWlsKSAvLyBXZSd2ZSBkb25lIHRoZSBwb3N0IHNwbGljaW5nIHNlY3Rp
b24gYWxyZWFkeSBvciB0aGVyZSB3YXMgbm8gc3BsaWNpbmcuCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBoZWFkID0gdGFpbDsgLy8gQ29udGludWUgYWZ0ZXIgdGhlIHNwbGlj
aW5nIHBvaW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgc3Bs
aWNpbmcgcG9pbnQgZGlzY29udGludWl0eSBmaXhlZC4KLSAgICAgICAgICAgIG5ld0RlcHRoID0g
aGVhZC0+bV9wcmV2aW91cy0+bV9kZXB0aDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGhlYWQtPm1fZGVwdGggPSBuZXdEZXB0aDsKLSAgICAgICAgLy8gRklYTUU6
IElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBkb2Vz
IG5vdCBjaGFuZ2Ugd2UgbWF5IG9ubHkgbmVlZCB0bwotICAgICAgICAvLyBJbnZhbGlkYXRlIHRo
ZSByZW5kZXJlcidzIGFyZWEgbm90IGEgcmVsYXlvdXQuCi0gICAgICAgIGhlYWQtPnNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICBoZWFkID0gaGVhZC0+bV9uZXh0
OwotICAgICAgICBpZiAoaGVhZCA9PSB0YWlsKSAvLyBXZSBhcmUgYXQgdGhlIHNwbGljaW5nIHBv
aW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgZGVwdGggZGlz
Y29udGludWl0eSBmaXhlZC4KLSAgICB9IHdoaWxlIChoZWFkKTsKLX0KLQotI2RlZmluZSBVKHgp
ICgoY29uc3QgVUNoYXIqKUwjI3gpCi0KIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIGNv
bnN0IFF1b3Rlc0RhdGEqLCBDYXNlRm9sZGluZ0hhc2g+IFF1b3Rlc01hcDsKIAogc3RhdGljIGNv
bnN0IFF1b3Rlc01hcCYgcXVvdGVzRGF0YUxhbmd1YWdlTWFwKCkKQEAgLTE1NywyNyArNzIsMjQg
QEAgc3RhdGljIGNvbnN0IFF1b3Rlc0RhdGEqIGJhc2ljUXVvdGVzRGF0YSgpCiAKIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFwYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKG1fZGVwdGggIT0g
VU5LTk9XTl9ERVBUSCk7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzID0gcXVvdGVzRGF0
YSgpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgogICAg
IGNhc2UgTk9fQ0xPU0VfUVVPVEU6CiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OwogICAgIGNhc2UgQ0xPU0VfUVVPVEU6CiAgICAgICAgIC8vIEZJWE1FOiBXaGVuIG1fZGVwdGgg
aXMgMCB3ZSBzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZy4KLSAgICAgICAgcmV0dXJuIHF1b3Rl
cy0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0gMSwgMCkpLmltcGwoKTsKKyAgICAg
ICAgcmV0dXJuIHF1b3Rlc0RhdGEoKS0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0g
MSwgMCkpLmltcGwoKTsKICAgICBjYXNlIE9QRU5fUVVPVEU6Ci0gICAgICAgIHJldHVybiBxdW90
ZXMtPmdldE9wZW5RdW90ZShtX2RlcHRoKS5pbXBsKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OworICAgICAgICByZXR1cm4gcXVvdGVzRGF0YSgpLT5nZXRPcGVuUXVvdGUobV9kZXB0aCkuaW1w
bCgpOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5n
SW1wbDo6ZW1wdHkoKTsKIH0KIAogdm9pZCBSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoZmxvYXQgbGVhZCkKIHsKKyAgICBpZiAoIW1fYXR0YWNoZWQpCisgICAgICAg
IGF0dGFjaFF1b3RlKCk7CiAgICAgc2V0VGV4dEludGVybmFsKG9yaWdpbmFsVGV4dCgpKTsKICAg
ICBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhsZWFkKTsKIH0KQEAg
LTE5Niw1OCArMTA4LDkyIEBAIGNvbnN0IFF1b3Rlc0RhdGEqIFJlbmRlclF1b3RlOjpxdW90ZXNE
YXRhKCkgY29uc3QKICAgICByZXR1cm4gcXVvdGVzOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpy
ZW5kZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBSZW5k
ZXJRdW90ZTo6YXR0YWNoUXVvdGUoKQogewotICAgIEFTU0VSVChyZW5kZXJlci0+dmlldygpKTsK
LSAgICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhhc1JlbmRlclF1b3RlcygpKQorICAgIEFTU0VS
VCh2aWV3KCkpOworICAgIEFTU0VSVCghbV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX25leHQg
JiYgIW1fcHJldmlvdXMpOworCisgICAgLy8gRklYTUU6IERvbid0IHNldCBwcmVmIHdpZHRocyBk
aXJ0eSBkdXJpbmcgbGF5b3V0LiBTZWUgdXBkYXRlRGVwdGgoKSBmb3IKKyAgICAvLyBtb3JlIGRl
dGFpbC4KKyAgICBpZiAoIWlzUm9vdGVkKCkpIHsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKFJlbmRlck9iamVj
dCogZGVzY2VuZGFudCA9IHJlbmRlcmVyOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2Vu
ZGFudC0+bmV4dEluUHJlT3JkZXIocmVuZGVyZXIpKQotICAgICAgICBpZiAoZGVzY2VuZGFudC0+
aXNRdW90ZSgpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpLT5wbGFj
ZVF1b3RlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghdmlldygpLT5yZW5kZXJRdW90ZUhlYWQoKSkgeworICAgICAgICB2aWV3KCktPnNldFJlbmRl
clF1b3RlSGVhZCh0aGlzKTsKKyAgICAgICAgbV9hdHRhY2hlZCA9IHRydWU7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBwcmV2
aW91c0luUHJlT3JkZXIoKTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3It
PnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CisgICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVv
dGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX3ByZXZpb3VzID0gdG9SZW5k
ZXJRdW90ZShwcmVkZWNlc3Nvcik7CisgICAgICAgIG1fbmV4dCA9IG1fcHJldmlvdXMtPm1fbmV4
dDsKKyAgICAgICAgbV9wcmV2aW91cy0+bV9uZXh0ID0gdGhpczsKKyAgICAgICAgaWYgKG1fbmV4
dCkKKyAgICAgICAgICAgIG1fbmV4dC0+bV9wcmV2aW91cyA9IHRoaXM7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGlmICghbV9wcmV2aW91cykgeworICAgICAgICBtX25leHQgPSB2aWV3
KCktPnJlbmRlclF1b3RlSGVhZCgpOworICAgICAgICB2aWV3KCktPnNldFJlbmRlclF1b3RlSGVh
ZCh0aGlzKTsKKyAgICB9CisgICAgbV9hdHRhY2hlZCA9IHRydWU7CisgICAgZm9yIChSZW5kZXJR
dW90ZSogcXVvdGUgPSB0aGlzOyBxdW90ZTsgcXVvdGUgPSBxdW90ZS0+bV9uZXh0KQorICAgICAg
ICBxdW90ZS0+dXBkYXRlRGVwdGgoKTsKKworICAgIEFTU0VSVCghbV9uZXh0IHx8IG1fbmV4dC0+
bV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX3ByZXZpb3VzIHx8IG1fcHJldmlvdXMtPm1fYXR0
YWNoZWQpOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpyZW5kZXJlclJlbW92ZWRGcm9tVHJlZShS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBSZW5kZXJRdW90ZTo6ZGV0YWNoUXVvdGUoKQog
ewotICAgIEFTU0VSVChyZW5kZXJlci0+dmlldygpKTsKLSAgICBpZiAoIXJlbmRlcmVyLT52aWV3
KCktPmhhc1JlbmRlclF1b3RlcygpKQorICAgIGlmICghbV9hdHRhY2hlZCkKICAgICAgICAgcmV0
dXJuOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gcmVuZGVyZXI7IGRlc2Nl
bmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikp
Ci0gICAgICAgIGlmIChkZXNjZW5kYW50LT5pc1F1b3RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRl
clF1b3RlKiByZW1vdmVkUXVvdGUgPSB0b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpOwotICAgICAg
ICAgICAgUmVuZGVyUXVvdGUqIGxhc3RRdW90ZUJlZm9yZSA9IHJlbW92ZWRRdW90ZS0+bV9wcmV2
aW91czsKLSAgICAgICAgICAgIHJlbW92ZWRRdW90ZS0+bV9wcmV2aW91cyA9IDA7Ci0gICAgICAg
ICAgICBpbnQgZGVwdGggPSByZW1vdmVkUXVvdGUtPm1fZGVwdGg7Ci0gICAgICAgICAgICBmb3Ig
KGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcik7IGRlc2Nl
bmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikp
Ci0gICAgICAgICAgICAgICAgaWYgKGRlc2NlbmRhbnQtPmlzUXVvdGUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVtb3ZlZFF1b3RlID0gdG9SZW5kZXJRdW90ZShkZXNjZW5kYW50KTsKLSAgICAg
ICAgICAgIFJlbmRlclF1b3RlKiBxdW90ZUFmdGVyID0gcmVtb3ZlZFF1b3RlLT5tX25leHQ7Ci0g
ICAgICAgICAgICByZW1vdmVkUXVvdGUtPm1fbmV4dCA9IDA7Ci0gICAgICAgICAgICBpZiAobGFz
dFF1b3RlQmVmb3JlKQotICAgICAgICAgICAgICAgIGxhc3RRdW90ZUJlZm9yZS0+bV9uZXh0ID0g
cXVvdGVBZnRlcjsKLSAgICAgICAgICAgIGlmIChxdW90ZUFmdGVyKSB7Ci0gICAgICAgICAgICAg
ICAgcXVvdGVBZnRlci0+bV9wcmV2aW91cyA9IGxhc3RRdW90ZUJlZm9yZTsKLSAgICAgICAgICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSBxdW90ZUFmdGVyLT5t
X2RlcHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIHF1b3RlQWZ0ZXItPm1fZGVwdGggPSBkZXB0aDsKLSAgICAgICAgICAgICAgICAgICAgcXVv
dGVBZnRlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGFkanVzdERlcHRoKGRlcHRoLCBxdW90ZUFmdGVyLT5tX3R5cGUpOwotICAgICAg
ICAgICAgICAgICAgICBxdW90ZUFmdGVyID0gcXVvdGVBZnRlci0+bV9uZXh0OwotICAgICAgICAg
ICAgICAgIH0gd2hpbGUgKHF1b3RlQWZ0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KKyAgICBpZiAobV9wcmV2aW91cykKKyAgICAgICAgbV9wcmV2aW91
cy0+bV9uZXh0ID0gbV9uZXh0OworICAgIGVsc2UgaWYgKHZpZXcoKSkKKyAgICAgICAgdmlldygp
LT5zZXRSZW5kZXJRdW90ZUhlYWQobV9uZXh0KTsKKyAgICBpZiAobV9uZXh0KQorICAgICAgICBt
X25leHQtPm1fcHJldmlvdXMgPSBtX3ByZXZpb3VzOworICAgIGlmICghZG9jdW1lbnRCZWluZ0Rl
c3Ryb3llZCgpKSB7CisgICAgICAgIGZvciAoUmVuZGVyUXVvdGUqIHF1b3RlID0gbV9uZXh0OyBx
dW90ZTsgcXVvdGUgPSBxdW90ZS0+bV9uZXh0KQorICAgICAgICAgICAgcXVvdGUtPnVwZGF0ZURl
cHRoKCk7CisgICAgfQorICAgIG1fYXR0YWNoZWQgPSBmYWxzZTsKKyAgICBtX25leHQgPSAwOwor
ICAgIG1fcHJldmlvdXMgPSAwOworICAgIG1fZGVwdGggPSAwOwogfQogCi12b2lkIFJlbmRlclF1
b3RlOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQordm9pZCBSZW5kZXJRdW90ZTo6dXBkYXRlRGVwdGgoKQogewotICAgIGNv
bnN0IFF1b3Rlc0RhdGEqIG5ld1F1b3RlcyA9IHN0eWxlKCktPnF1b3RlcygpOwotICAgIGNvbnN0
IFF1b3Rlc0RhdGEqIG9sZFF1b3RlcyA9IG9sZFN0eWxlID8gb2xkU3R5bGUtPnF1b3RlcygpIDog
MDsKLSAgICBpZiAoIVF1b3Rlc0RhdGE6OmVxdWFscyhuZXdRdW90ZXMsIG9sZFF1b3RlcykpCisg
ICAgQVNTRVJUKG1fYXR0YWNoZWQpOworICAgIGludCBvbGREZXB0aCA9IG1fZGVwdGg7CisgICAg
bV9kZXB0aCA9IDA7CisgICAgaWYgKG1fcHJldmlvdXMpIHsKKyAgICAgICAgbV9kZXB0aCA9IG1f
cHJldmlvdXMtPm1fZGVwdGg7CisgICAgICAgIHN3aXRjaCAobV9wcmV2aW91cy0+bV90eXBlKSB7
CisgICAgICAgIGNhc2UgT1BFTl9RVU9URToKKyAgICAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgor
ICAgICAgICAgICAgbV9kZXB0aCsrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q0xPU0VfUVVPVEU6CisgICAgICAgIGNhc2UgTk9fQ0xPU0VfUVVPVEU6CisgICAgICAgICAgICBp
ZiAobV9kZXB0aCkKKyAgICAgICAgICAgICAgICBtX2RlcHRoLS07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBGSVhNRTogRG9uJ3QgZGlydHkgcHJlZiB3aWR0
aHMgaW5zaWRlIG9mIGxheW91dCBiZWNhdXNlIGEgcGFyZW50IG1heSBkbworICAgIC8vIHNldE5l
ZWRzTGF5b3V0KGZhbHNlKSB3aGljaCB3b3VsZCBwcmV2ZW50IHRoZSBuZWVkZWQgcmVjYWxjLiBJ
bnN0ZWFkIHVzZQorICAgIC8vIGEgcHJlLWxheW91dCBob29rLgorICAgIGlmIChvbGREZXB0aCAh
PSBtX2RlcHRoKQogICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
LSAgICBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJRdW90ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmgK
aW5kZXggYjZmM2M1NTk5MjhiNWVmNDA0OWE5Mzc5NDM1MjE3MGMxNmFjMjM4Zi4uNjk2MDExZmU0
OTNkMmM3NjBhNWI1ZmUxYTk1MGYyODFiODBhZGExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclF1b3RlLmgKQEAgLTIxLDYgKzIxLDkgQEAKICNpZm5kZWYgUmVuZGVyUXVvdGVfaAog
I2RlZmluZSBSZW5kZXJRdW90ZV9oCiAKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IlF1b3Rlc0RhdGEuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogCkBAIC0zMCwyNCAr
MzMsMjQgQEAgY2xhc3MgUmVuZGVyUXVvdGUgOiBwdWJsaWMgUmVuZGVyVGV4dCB7CiBwdWJsaWM6
CiAgICAgUmVuZGVyUXVvdGUoRG9jdW1lbnQqLCBjb25zdCBRdW90ZVR5cGUpOwogICAgIHZpcnR1
YWwgflJlbmRlclF1b3RlKCk7CisgICAgdm9pZCBhdHRhY2hRdW90ZSgpOworICAgIHZvaWQgZGV0
YWNoUXVvdGUoKTsKIAotICAgIHN0YXRpYyB2b2lkIHJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKFJl
bmRlck9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKFJl
bmRlck9iamVjdCopOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNRdW90ZSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH07Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IG9yaWdpbmFsVGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVE
ZXN0cm95ZWQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiAiUmVuZGVyUXVvdGUiOyB9OworICAgIHZpcnR1YWwg
Ym9vbCBpc1F1b3RlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxUZXh0KCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxl
YWRXaWR0aCkgT1ZFUlJJREU7CisKICAgICBjb25zdCBRdW90ZXNEYXRhKiBxdW90ZXNEYXRhKCkg
Y29uc3Q7CisgICAgdm9pZCB1cGRhdGVEZXB0aCgpOwogCiAgICAgUXVvdGVUeXBlIG1fdHlwZTsK
ICAgICBpbnQgbV9kZXB0aDsKICAgICBSZW5kZXJRdW90ZSogbV9uZXh0OwogICAgIFJlbmRlclF1
b3RlKiBtX3ByZXZpb3VzOwotICAgIHZvaWQgcGxhY2VRdW90ZSgpOworICAgIGJvb2wgbV9hdHRh
Y2hlZDsKIH07CiAKIGlubGluZSBSZW5kZXJRdW90ZSogdG9SZW5kZXJRdW90ZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAppbmRleCA4
YmQ0OWNjZmFlMWFkZGM5ZjZjZTY1YTJjOWJmZDkyOTU3Mzc1MTlmLi43NWI0NzI1Njg1MTVjODkz
YmFiMTQ2YWY0NmE3NDU5MjNiZWVhNjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwCkBAIC02Miw3ICs2Miw3IEBAIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoTm9kZSog
bm9kZSwgRnJhbWVWaWV3KiB2aWV3KQogICAgICwgbV9wYWdlTG9naWNhbEhlaWdodENoYW5nZWQo
ZmFsc2UpCiAgICAgLCBtX2xheW91dFN0YXRlKDApCiAgICAgLCBtX2xheW91dFN0YXRlRGlzYWJs
ZUNvdW50KDApCi0gICAgLCBtX3JlbmRlclF1b3RlQ291bnQoMCkKKyAgICAsIG1fcmVuZGVyUXVv
dGVIZWFkKDApCiAgICAgLCBtX3JlbmRlckNvdW50ZXJDb3VudCgwKQogewogICAgIC8vIENsZWFy
IG91ciBhbm9ueW1vdXMgYml0LCBzZXQgYmVjYXVzZSBSZW5kZXJPYmplY3QgYXNzdW1lcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggMDRhODA2ZTliY2E1OTFlMTVhNjU3
YTEyODFhMmUwMWJkZWRmYmQwOC4uMDBlYTUzN2U0ZGVmZWQyM2Q3MDQ5ZGM3ODU5OGI4ZDQ2MWRj
MmM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC0zMiw2ICszMiw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvd1RocmVhZENvbnRyb2xsZXI7CiBj
bGFzcyBSZW5kZXJXaWRnZXQ7CitjbGFzcyBSZW5kZXJRdW90ZTsKIAogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKQEAgLTE5NCwx
MyArMTk1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Rml4ZWRQb3NpdGlvbmVkT2JqZWN0
c05lZWRMYXlvdXQoKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29yayBhcm91bmQgYmVj
YXVzZSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjb3VudGVycyBhbmQgcXVvdGVzCisg
ICAgdm9pZCBzZXRSZW5kZXJRdW90ZUhlYWQoUmVuZGVyUXVvdGUqIGhlYWQpIHsgbV9yZW5kZXJR
dW90ZUhlYWQgPSBoZWFkOyB9CisgICAgUmVuZGVyUXVvdGUqIHJlbmRlclF1b3RlSGVhZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyUXVvdGVIZWFkOyB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyBhIHdvcmsgYXJvdW5kIGJlY2F1c2UgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY291
bnRlcnMKICAgICAvLyByZXF1aXJlcyB3YWxraW5nIHRoZSBlbnRpcmUgdHJlZSByZXBlYXRlZGx5
IGFuZCBtb3N0IHBhZ2VzIGRvbid0IGFjdHVhbGx5IHVzZSBlaXRoZXIKICAgICAvLyBmZWF0dXJl
IHNvIHdlIHNob3VsZG4ndCB0YWtlIHRoZSBwZXJmb3JtYW5jZSBoaXQgd2hlbiBub3QgbmVlZGVk
LiBMb25nIHRlcm0gd2Ugc2hvdWxkCiAgICAgLy8gcmV3cml0ZSB0aGUgY291bnRlciBhbmQgcXVv
dGVzIGNvZGUuCi0gICAgdm9pZCBhZGRSZW5kZXJRdW90ZSgpIHsgbV9yZW5kZXJRdW90ZUNvdW50
Kys7IH0KLSAgICB2b2lkIHJlbW92ZVJlbmRlclF1b3RlKCkgeyBBU1NFUlQobV9yZW5kZXJRdW90
ZUNvdW50ID4gMCk7IG1fcmVuZGVyUXVvdGVDb3VudC0tOyB9Ci0gICAgYm9vbCBoYXNSZW5kZXJR
dW90ZXMoKSB7IHJldHVybiBtX3JlbmRlclF1b3RlQ291bnQ7IH0KICAgICB2b2lkIGFkZFJlbmRl
ckNvdW50ZXIoKSB7IG1fcmVuZGVyQ291bnRlckNvdW50Kys7IH0KICAgICB2b2lkIHJlbW92ZVJl
bmRlckNvdW50ZXIoKSB7IEFTU0VSVChtX3JlbmRlckNvdW50ZXJDb3VudCA+IDApOyBtX3JlbmRl
ckNvdW50ZXJDb3VudC0tOyB9CiAgICAgYm9vbCBoYXNSZW5kZXJDb3VudGVycygpIHsgcmV0dXJu
IG1fcmVuZGVyQ291bnRlckNvdW50OyB9CkBAIC0zMDEsNyArMzAyLDcgQEAgcHJpdmF0ZToKICAg
ICBPd25QdHI8Rmxvd1RocmVhZENvbnRyb2xsZXI+IG1fZmxvd1RocmVhZENvbnRyb2xsZXI7CiAg
ICAgUmVmUHRyPEludGVydmFsQXJlbmE+IG1faW50ZXJ2YWxBcmVuYTsKIAotICAgIHVuc2lnbmVk
IG1fcmVuZGVyUXVvdGVDb3VudDsKKyAgICBSZW5kZXJRdW90ZSogbV9yZW5kZXJRdW90ZUhlYWQ7
CiAgICAgdW5zaWduZWQgbV9yZW5kZXJDb3VudGVyQ291bnQ7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCA2ZmZlYTRjYmZjNTE5
YjJjZWYyM2JiM2M5NGJlMjcyYWU4N2Q3NzlkLi44ZWQwODA0ZmE0MTc3ODBkZTUxNmMzNjY1ZTg3
YTllODQ3ZGQ0ZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAKQEAgLTU4MCw2ICs1ODAsOSBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyU3R5
bGU6OmRpZmYoY29uc3QgUmVuZGVyU3R5bGUqIG90aGVyLCB1bnNpZ25lZCYgY2hhbmdlZENvbgog
ICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0OwogICAgIH0KIAorICAgIGlmICgh
UXVvdGVzRGF0YTo6ZXF1YWxzKHJhcmVJbmhlcml0ZWREYXRhLT5xdW90ZXMuZ2V0KCksIG90aGVy
LT5yYXJlSW5oZXJpdGVkRGF0YS0+cXVvdGVzLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIFN0eWxl
RGlmZmVyZW5jZUxheW91dDsKKwogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gU1ZHUmVuZGVyU3R5
bGU6OmRpZmYoKSBtaWdodCBoYXZlIHJldHVybmVkIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQsIGVn
LiBpZiBmaWxsIGNoYW5nZXMuCiAgICAgLy8gSWYgZWcuIHRoZSBmb250LXNpemUgY2hhbmdlZCBh
dCB0aGUgc2FtZSB0aW1lLCB3ZSdyZSBub3QgYWxsb3dlZCB0byByZXR1cm4gU3R5bGVEaWZmZXJl
bmNlUmVwYWludCwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156993</attachid>
            <date>2012-08-07 13:52:32 -0700</date>
            <delta_ts>2012-08-07 14:15:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93056-20120807135207.patch</filename>
            <type>text/plain</type>
            <size>20874</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNiMTk0ZTE1MTBlYTQ4
ODJlN2NkNTUyOWI5YjhiYmRiN2VjMWM0ZC4uYWVhNzQ2M2YyNTc2ZTFjMDNjMjdlMGRiOWJhNDYx
ZjAzMmU1ODA1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTA4LTAyICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIFJlaW1wbGVtZW50IFJl
bmRlclF1b3RlIHBsYWNlbWVudCBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgR3JlYXRseSBzaW1wbGlmeSB0aGUgY29kZSB0aGF0IG1haW50
YWlucyB0aGUgbGlua2VkIGxpc3Qgb2YgUmVuZGVyUXVvdGVzLiBOb3cgUmVuZGVyUXVvdGUKKyAg
ICAgICAgaXMgcGxhY2VkIGludG8gdGhlIGxpbmtlZCBsaXN0IGluIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzIG9uIGZpcnN0IGFjY2VzcyBhbmQgaXMKKyAgICAgICAgZGV0YWNoZWQgd2hl
biBkZXN0cm95ZWQgKG9yIGV4cGxpY2l0bHkgcmVtb3ZlZCkuCisKKyAgICAgICAgVGhlIG5ldyBh
bGdvcml0aG0gZG9lc24ndCByZXF1aXJlIHdhbGtpbmcgdXAgdGhlIHRyZWUgb2YgcmVuZGVyZXJz
IHdoZW4gdGhlcmUgYXJlIG5vCisgICAgICAgIFJlbmRlclF1b3RlcyBpbiB0aGUgdHJlZSB5ZXQs
IGFuZCBhbHNvIHJlbW92ZXMgdGhlIG5lZWQgdG8gd2FsayBvdmVyIGV2ZXJ5IHN1YnRyZWUKKyAg
ICAgICAgd2hlbiBpbnNlcnRpbmcgaW4gcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnkgYmVo
YXZpb3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2Rl
KTogQ2FsbCBkZXRhY2hRdW90ZSB3aGVuIHJlbW92aW5nIGZyb20gYSBjaGlsZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJRdW90ZTo6UmVuZGVyUXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVv
dGU6On5SZW5kZXJRdW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6d2lsbEJl
RGVzdHJveWVkKTogQ2FsbCBkZXRhY2hRdW90ZSB0byBlbnN1cmUgYWxsIGRlc3Ryb3llZCBxdW90
ZXMgYXJlIGRldGFjaGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFs
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOiBBdHRhY2ggcXVvdGUgYmVmb3JlIGNvbXB1dGluZyB0aGUgd2lkdGguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjphdHRhY2hR
dW90ZSk6IFB1dHMgdGhlIFJlbmRlclF1b3RlIGluIHRoZSBsaW5rZWQgbGlzdCBvZiBxdW90ZXMg
YW5kIGNvbXB1dGVzIHRoZSBkZXB0aC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjpk
ZXRhY2hRdW90ZSk6IFJlbW92ZXMgdGhlIHF1b3RlIGZyb20gdGhlIGxpbmtlZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6OnVwZGF0ZURlcHRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyUXVvdGUuaDoKKyAgICAgICAgKFJlbmRlclF1b3RlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3R5bGU6OmRpZmYpOiBSZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0IGlmIHF1b3RlcyBjaGFu
Z2UgYW5kIHJlbW92ZSBjaGVjayBpbiBzdHlsZURpZENoYW5nZSBpbiBSZW5kZXJRdW90ZS4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3OjpSZW5kZXJWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRSZW5k
ZXJRdW90ZUhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVuZGVyUXVvdGVI
ZWFkKTogU3RvcmVzIHRoZSBmaXJzdCBxdW90ZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIChS
ZW5kZXJWaWV3KToKKwogMjAxMi0wOC0wMiAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0
Lm9yZz4KIAogICAgICAgICBTbGlkZXIgc2hvdWxkIHNuYXAgdG8gZGF0YWxpc3QgdGljayBtYXJr
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxk
TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
LmNwcAppbmRleCBkYTk4MDg4ZTIxNTYzNTY3Mjk0YzY2YzEzNzM5OTQ1YTkzNDViODc2Li4zMTU4
ZmJmYjY5OWRkY2JmYWMwZmYyOTIyYjNjMzgyOGU3MTlmZmFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcApAQCAtMTE3LDYgKzEx
Nyw5IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5v
ZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgICAgIGlmIChvbGRDaGlsZC0+aXNS
ZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG9sZENoaWxkKS0+ZGV0
YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgaWYgKG9sZENoaWxkLT5pc1F1b3RlKCkpCisgICAgICAg
ICAgICB0b1JlbmRlclF1b3RlKG9sZENoaWxkKS0+ZGV0YWNoUXVvdGUoKTsKKwogICAgICAgICBp
ZiAob2xkQ2hpbGQtPmluUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgICAgICBpZiAob2xk
Q2hpbGQtPmlzQm94KCkpCiAgICAgICAgICAgICAgICAgb2xkQ2hpbGQtPmVuY2xvc2luZ1JlbmRl
ckZsb3dUaHJlYWQoKS0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyh0b1JlbmRlckJveChvbGRD
aGlsZCkpOwpAQCAtMTU4LDcgKzE2MSw2IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAg
Ly8gYnkgc2tpcHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVzdHJveWluZyB0aGUgZW50aXJlIHRyZWUu
CiAgICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJl
bmRlckNvdW50ZXI6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKLSAgICAgICAg
UmVuZGVyUXVvdGU6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKICAgICB9CiAK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKQEAgLTIxMCwx
MyArMjEyLDE2IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUo
UmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuCiAgICAgICAgIGlmIChuZXdDaGls
ZC0+aXNSZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG5ld0NoaWxk
KS0+YXR0YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgLy8gWW91IGNhbid0IGF0dGFjaFF1b3RlKCkg
b3RoZXJ3aXNlIHRoZSBxdW90ZSB3b3VsZCBiZSBhdHRhY2hlZCB0b28gZWFybHkKKyAgICAgICAg
Ly8gYW5kIGdldCB0aGUgd3JvbmcgZGVwdGggc2luY2UgZ2VuZXJhdGVkIGNvbnRlbnQgaXMgaW5z
ZXJ0ZWQgaW50byBhbm9ueW1vdXMKKyAgICAgICAgLy8gcmVuZGVyZXJzIGJlZm9yZSBnb2luZyBp
bnRvIHRoZSBtYWluIHJlbmRlciB0cmVlLgorCiAgICAgICAgIGlmIChSZW5kZXJOYW1lZEZsb3dU
aHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJOYW1lZEZsb3dUaHJlYWRDb250YWlu
ZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxvd1RocmVhZC0+YWRkRmxvd0NoaWxk
KG5ld0NoaWxkKTsKICAgICB9CiAKICAgICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJv
eWVkKCkpIHsKICAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQo
bmV3Q2hpbGQpOwotICAgICAgICBSZW5kZXJRdW90ZTo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQo
bmV3Q2hpbGQpOwogICAgIH0KICAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7IC8vIEdvZXMgdXAgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGllcmFyY2h5Lgog
ICAgIGlmICghb3duZXItPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKQEAgLTI3OSwxMyArMjg0
LDE1IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBjCiAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5k
ZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKGNoaWxkKS0+YXR0YWNoUmVn
aW9uKCk7CiAKKyAgICAgICAgLy8gQ2FsbGluZyBhdHRhY2hRdW90ZSgpIGhlcmUgd291bGQgYmUg
dG9vIGVhcmx5IChiZWZvcmUgYW5vbnltb3VzIHJlbmRlcmVycyBhcmUgaW5zZXJ0ZWQpCisgICAg
ICAgIC8vIHNlZSBhcHBlbmRDaGlsZCgpIGZvciBtb3JlIGV4cGxhbmF0aW9uLgorCiAgICAgICAg
IGlmIChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJO
YW1lZEZsb3dUaHJlYWRDb250YWluZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxv
d1RocmVhZC0+YWRkRmxvd0NoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgfQogCiAgICAg
aWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJlbmRlckNv
dW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKLSAgICAgICAgUmVuZGVyUXVv
dGU6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKICAgICB9CiAgICAgY2hpbGQtPnNl
dE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIGlmICghb3duZXItPm5vcm1h
bENoaWxkTmVlZHNMYXlvdXQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJRdW90ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUu
Y3BwCmluZGV4IDdmMWQ3NDliMTJlZmI3OGZjYTY3MDY0MGFkM2JkNTM0MzVmOTZmYjIuLjEwNmJi
NjcwNzM3YzY0NGQzNmFmNTZkZmZjODZkZWIwYWJmNDk4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclF1b3RlLmNwcApAQCAtMjEsMTE5ICsyMSwzNCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCi0jZGVmaW5lIFVOS05PV05fREVQVEgg
LTEKKyNkZWZpbmUgVSh4KSAoKGNvbnN0IFVDaGFyKilMIyN4KQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0RGVwdGgoaW50ICZkZXB0aCwgUXVvdGVUeXBl
IHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBPUEVOX1FVT1RFOgotICAg
IGNhc2UgTk9fT1BFTl9RVU9URToKLSAgICAgICAgKytkZXB0aDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDTE9TRV9RVU9URToKLSAgICBjYXNlIE5PX0NMT1NFX1FVT1RFOgotICAgICAgICBp
ZiAoZGVwdGgpCi0gICAgICAgICAgICAtLWRlcHRoOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19CiAKIFJlbmRlclF1
b3RlOjpSZW5kZXJRdW90ZShEb2N1bWVudCogbm9kZSwgUXVvdGVUeXBlIHF1b3RlKQogICAgIDog
UmVuZGVyVGV4dChub2RlLCBTdHJpbmdJbXBsOjplbXB0eSgpKQogICAgICwgbV90eXBlKHF1b3Rl
KQotICAgICwgbV9kZXB0aChVTktOT1dOX0RFUFRIKQorICAgICwgbV9kZXB0aCgwKQogICAgICwg
bV9uZXh0KDApCiAgICAgLCBtX3ByZXZpb3VzKDApCisgICAgLCBtX2F0dGFjaGVkKGZhbHNlKQog
ewotICAgIHZpZXcoKS0+YWRkUmVuZGVyUXVvdGUoKTsKIH0KIAogUmVuZGVyUXVvdGU6On5SZW5k
ZXJRdW90ZSgpCiB7CisgICAgQVNTRVJUKCFtX2F0dGFjaGVkKTsKKyAgICBBU1NFUlQoIW1fbmV4
dCAmJiAhbV9wcmV2aW91cyk7CiB9CiAKIHZvaWQgUmVuZGVyUXVvdGU6OndpbGxCZURlc3Ryb3ll
ZCgpCiB7Ci0gICAgaWYgKHZpZXcoKSkKLSAgICAgICAgdmlldygpLT5yZW1vdmVSZW5kZXJRdW90
ZSgpOworICAgIGRldGFjaFF1b3RlKCk7CiAgICAgUmVuZGVyVGV4dDo6d2lsbEJlRGVzdHJveWVk
KCk7CiB9CiAKLWNvbnN0IGNoYXIqIFJlbmRlclF1b3RlOjpyZW5kZXJOYW1lKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gIlJlbmRlclF1b3RlIjsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBwbGFjZXMg
YSBsaXN0IG9mIHF1b3RlIHJlbmRlcmVycyBzdGFydGluZyBhdCAidGhpcyIgaW4gdGhlIGxpc3Qg
b2YgcXVvdGUgcmVuZGVyZXJzIGFscmVhZHkKLS8vIGluIHRoZSBkb2N1bWVudCdzIHJlbmRlcmVy
IHRyZWUuCi0vLyBUaGUgYXNzdW1wdGlvbnMgYXJlIG1hZGUgKGZvciBwZXJmb3JtYW5jZSk6Ci0v
LyAxLiBUaGUgbGlzdCBvZiBxdW90ZXMgYWxyZWFkeSBpbiB0aGUgcmVuZGVyZXJzIHRyZWUgb2Yg
dGhlIGRvY3VtZW50IGlzIGFscmVhZHkgaW4gYSBjb25zaXN0ZW50IHN0YXRlCi0vLyAoQWxsIHF1
b3RlIHJlbmRlcmVycyBhcmUgbGlua2VkIGFuZCBoYXZlIHRoZSBjb3JyZWN0IGRlcHRoIHNldCkK
LS8vIDIuIFRoZSBxdW90ZSByZW5kZXJlcnMgb2YgdGhlIGluc2VydGVkIGxpc3QgYXJlIGluIGEg
dHJlZSBvZiByZW5kZXJlcnMgb2YgdGhlaXIgb3duIHdoaWNoIGhhcyBiZWVuIGp1c3QKLS8vIGlu
c2VydGVkIGluIHRoZSBtYWluIHJlbmRlcmVyIHRyZWUgd2l0aCBpdHMgcm9vdCBhcyBjaGlsZCBv
ZiBzb21lIHJlbmRlcmVyLgotLy8gMy4gVGhlIHF1b3RlIHJlbmRlcmVycyBpbiB0aGUgaW5zZXJ0
ZWQgbGlzdCBoYXZlIGRlcHRocyBjb25zaXN0ZW50IHdpdGggdGhlaXIgcG9zaXRpb24gaW4gdGhl
IGxpc3QgcmVsYXRpdmUKLS8vIHRvICJ0aGlzIiwgdGh1cyBpZiAidGhpcyIgZG9lcyBub3QgbmVl
ZCB0byBjaGFuZ2UgaXRzIGRlcHRoIHVwb24gaW5zZXJ0aW9uLCB0aGUgb3RoZXIgcmVuZGVyZXJz
IGluIHRoZSBsaXN0IGRvbid0Ci0vLyBuZWVkIHRvIGVpdGhlci4KLXZvaWQgUmVuZGVyUXVvdGU6
OnBsYWNlUXVvdGUoKQotewotICAgIFJlbmRlclF1b3RlKiBoZWFkID0gdGhpczsKLSAgICBBU1NF
UlQoIWhlYWQtPm1fcHJldmlvdXMpOwotICAgIFJlbmRlclF1b3RlKiB0YWlsID0gMDsKLSAgICBm
b3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBoZWFkLT5wcmV2aW91c0luUHJlT3JkZXIo
KTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3ItPnByZXZpb3VzSW5QcmVP
cmRlcigpKSB7Ci0gICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVvdGUoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBoZWFkLT5tX3ByZXZpb3VzID0gdG9SZW5kZXJRdW90ZShw
cmVkZWNlc3Nvcik7Ci0gICAgICAgIGlmIChoZWFkLT5tX3ByZXZpb3VzLT5tX25leHQpIHsKLSAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3BsaWNlIHRoZSBsaXN0IG9mIHF1b3RlcyBoZWFkZWQg
YnkgaGVhZCBpbnRvIHRoZSBkb2N1bWVudCdzIGxpc3Qgb2YgcXVvdGVzLgotICAgICAgICAgICAg
dGFpbCA9IGhlYWQ7Ci0gICAgICAgICAgICB3aGlsZSAodGFpbC0+bV9uZXh0KQotICAgICAgICAg
ICAgICAgICB0YWlsID0gdGFpbC0+bV9uZXh0OwotICAgICAgICAgICAgdGFpbC0+bV9uZXh0ID0g
aGVhZC0+bV9wcmV2aW91cy0+bV9uZXh0OwotICAgICAgICAgICAgQVNTRVJUKHRhaWwtPm1fbmV4
dC0+bV9wcmV2aW91cyA9PSBoZWFkLT5tX3ByZXZpb3VzKTsKLSAgICAgICAgICAgIHRhaWwtPm1f
bmV4dC0+bV9wcmV2aW91cyA9ICB0YWlsOwotICAgICAgICAgICAgdGFpbCA9IHRhaWwtPm1fbmV4
dDsgLy8gVGhpcyBtYXJrcyB0aGUgc3BsaWNpbmcgcG9pbnQgaGVyZSB0aGVyZSBtYXkgYmUgYSBk
ZXB0aCBkaXNjb250aW51aXR5Ci0gICAgICAgIH0KLSAgICAgICAgaGVhZC0+bV9wcmV2aW91cy0+
bV9uZXh0ID0gaGVhZDsKLSAgICAgICAgQVNTRVJUKGhlYWQtPm1fcHJldmlvdXMtPm1fZGVwdGgg
IT0gVU5LTk9XTl9ERVBUSCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpbnQgbmV3RGVw
dGg7Ci0gICAgaWYgKCFoZWFkLT5tX3ByZXZpb3VzKSB7Ci0gICAgICAgIG5ld0RlcHRoID0gMDsK
LSAgICAgICAgZ290byBza2lwTmV3RGVwdGhDYWxjOwotICAgIH0KLSAgICBuZXdEZXB0aCA9IGhl
YWQtPm1fcHJldmlvdXMtPm1fZGVwdGg7Ci0gICAgZG8gewotICAgICAgICBhZGp1c3REZXB0aChu
ZXdEZXB0aCwgaGVhZC0+bV9wcmV2aW91cy0+bV90eXBlKTsKLXNraXBOZXdEZXB0aENhbGM6Ci0g
ICAgICAgIGlmIChoZWFkLT5tX2RlcHRoID09IG5ld0RlcHRoKSB7IC8vIEFsbCByZW1haW5pbmcg
ZGVwdGggc2hvdWxkIGJlIGNvcnJlY3QgZXhjZXB0IGlmIHNwbGljaW5nIHdhcyBkb25lLgotICAg
ICAgICAgICAgaWYgKCF0YWlsKSAvLyBXZSd2ZSBkb25lIHRoZSBwb3N0IHNwbGljaW5nIHNlY3Rp
b24gYWxyZWFkeSBvciB0aGVyZSB3YXMgbm8gc3BsaWNpbmcuCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBoZWFkID0gdGFpbDsgLy8gQ29udGludWUgYWZ0ZXIgdGhlIHNwbGlj
aW5nIHBvaW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgc3Bs
aWNpbmcgcG9pbnQgZGlzY29udGludWl0eSBmaXhlZC4KLSAgICAgICAgICAgIG5ld0RlcHRoID0g
aGVhZC0+bV9wcmV2aW91cy0+bV9kZXB0aDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGhlYWQtPm1fZGVwdGggPSBuZXdEZXB0aDsKLSAgICAgICAgLy8gRklYTUU6
IElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBkb2Vz
IG5vdCBjaGFuZ2Ugd2UgbWF5IG9ubHkgbmVlZCB0bwotICAgICAgICAvLyBJbnZhbGlkYXRlIHRo
ZSByZW5kZXJlcidzIGFyZWEgbm90IGEgcmVsYXlvdXQuCi0gICAgICAgIGhlYWQtPnNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICBoZWFkID0gaGVhZC0+bV9uZXh0
OwotICAgICAgICBpZiAoaGVhZCA9PSB0YWlsKSAvLyBXZSBhcmUgYXQgdGhlIHNwbGljaW5nIHBv
aW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgZGVwdGggZGlz
Y29udGludWl0eSBmaXhlZC4KLSAgICB9IHdoaWxlIChoZWFkKTsKLX0KLQotI2RlZmluZSBVKHgp
ICgoY29uc3QgVUNoYXIqKUwjI3gpCi0KIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIGNv
bnN0IFF1b3Rlc0RhdGEqLCBDYXNlRm9sZGluZ0hhc2g+IFF1b3Rlc01hcDsKIAogc3RhdGljIGNv
bnN0IFF1b3Rlc01hcCYgcXVvdGVzRGF0YUxhbmd1YWdlTWFwKCkKQEAgLTE1NywyNyArNzIsMjQg
QEAgc3RhdGljIGNvbnN0IFF1b3Rlc0RhdGEqIGJhc2ljUXVvdGVzRGF0YSgpCiAKIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFwYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKG1fZGVwdGggIT0g
VU5LTk9XTl9ERVBUSCk7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzID0gcXVvdGVzRGF0
YSgpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgogICAg
IGNhc2UgTk9fQ0xPU0VfUVVPVEU6CiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OwogICAgIGNhc2UgQ0xPU0VfUVVPVEU6CiAgICAgICAgIC8vIEZJWE1FOiBXaGVuIG1fZGVwdGgg
aXMgMCB3ZSBzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZy4KLSAgICAgICAgcmV0dXJuIHF1b3Rl
cy0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0gMSwgMCkpLmltcGwoKTsKKyAgICAg
ICAgcmV0dXJuIHF1b3Rlc0RhdGEoKS0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0g
MSwgMCkpLmltcGwoKTsKICAgICBjYXNlIE9QRU5fUVVPVEU6Ci0gICAgICAgIHJldHVybiBxdW90
ZXMtPmdldE9wZW5RdW90ZShtX2RlcHRoKS5pbXBsKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OworICAgICAgICByZXR1cm4gcXVvdGVzRGF0YSgpLT5nZXRPcGVuUXVvdGUobV9kZXB0aCkuaW1w
bCgpOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5n
SW1wbDo6ZW1wdHkoKTsKIH0KIAogdm9pZCBSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoZmxvYXQgbGVhZCkKIHsKKyAgICBpZiAoIW1fYXR0YWNoZWQpCisgICAgICAg
IGF0dGFjaFF1b3RlKCk7CiAgICAgc2V0VGV4dEludGVybmFsKG9yaWdpbmFsVGV4dCgpKTsKICAg
ICBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhsZWFkKTsKIH0KQEAg
LTE5Niw1OCArMTA4LDkyIEBAIGNvbnN0IFF1b3Rlc0RhdGEqIFJlbmRlclF1b3RlOjpxdW90ZXNE
YXRhKCkgY29uc3QKICAgICByZXR1cm4gcXVvdGVzOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpy
ZW5kZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBSZW5k
ZXJRdW90ZTo6YXR0YWNoUXVvdGUoKQogewotICAgIEFTU0VSVChyZW5kZXJlci0+dmlldygpKTsK
LSAgICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhhc1JlbmRlclF1b3RlcygpKQorICAgIEFTU0VS
VCh2aWV3KCkpOworICAgIEFTU0VSVCghbV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX25leHQg
JiYgIW1fcHJldmlvdXMpOworCisgICAgLy8gRklYTUU6IERvbid0IHNldCBwcmVmIHdpZHRocyBk
aXJ0eSBkdXJpbmcgbGF5b3V0LiBTZWUgdXBkYXRlRGVwdGgoKSBmb3IKKyAgICAvLyBtb3JlIGRl
dGFpbC4KKyAgICBpZiAoIWlzUm9vdGVkKCkpIHsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKFJlbmRlck9iamVj
dCogZGVzY2VuZGFudCA9IHJlbmRlcmVyOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2Vu
ZGFudC0+bmV4dEluUHJlT3JkZXIocmVuZGVyZXIpKQotICAgICAgICBpZiAoZGVzY2VuZGFudC0+
aXNRdW90ZSgpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpLT5wbGFj
ZVF1b3RlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghdmlldygpLT5yZW5kZXJRdW90ZUhlYWQoKSkgeworICAgICAgICB2aWV3KCktPnNldFJlbmRl
clF1b3RlSGVhZCh0aGlzKTsKKyAgICAgICAgbV9hdHRhY2hlZCA9IHRydWU7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBwcmV2
aW91c0luUHJlT3JkZXIoKTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3It
PnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CisgICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVv
dGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX3ByZXZpb3VzID0gdG9SZW5k
ZXJRdW90ZShwcmVkZWNlc3Nvcik7CisgICAgICAgIG1fbmV4dCA9IG1fcHJldmlvdXMtPm1fbmV4
dDsKKyAgICAgICAgbV9wcmV2aW91cy0+bV9uZXh0ID0gdGhpczsKKyAgICAgICAgaWYgKG1fbmV4
dCkKKyAgICAgICAgICAgIG1fbmV4dC0+bV9wcmV2aW91cyA9IHRoaXM7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGlmICghbV9wcmV2aW91cykgeworICAgICAgICBtX25leHQgPSB2aWV3
KCktPnJlbmRlclF1b3RlSGVhZCgpOworICAgICAgICB2aWV3KCktPnNldFJlbmRlclF1b3RlSGVh
ZCh0aGlzKTsKKyAgICB9CisgICAgbV9hdHRhY2hlZCA9IHRydWU7CisgICAgZm9yIChSZW5kZXJR
dW90ZSogcXVvdGUgPSB0aGlzOyBxdW90ZTsgcXVvdGUgPSBxdW90ZS0+bV9uZXh0KQorICAgICAg
ICBxdW90ZS0+dXBkYXRlRGVwdGgoKTsKKworICAgIEFTU0VSVCghbV9uZXh0IHx8IG1fbmV4dC0+
bV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX3ByZXZpb3VzIHx8IG1fcHJldmlvdXMtPm1fYXR0
YWNoZWQpOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpyZW5kZXJlclJlbW92ZWRGcm9tVHJlZShS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBSZW5kZXJRdW90ZTo6ZGV0YWNoUXVvdGUoKQog
ewotICAgIEFTU0VSVChyZW5kZXJlci0+dmlldygpKTsKLSAgICBpZiAoIXJlbmRlcmVyLT52aWV3
KCktPmhhc1JlbmRlclF1b3RlcygpKQorICAgIGlmICghbV9hdHRhY2hlZCkKICAgICAgICAgcmV0
dXJuOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gcmVuZGVyZXI7IGRlc2Nl
bmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikp
Ci0gICAgICAgIGlmIChkZXNjZW5kYW50LT5pc1F1b3RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRl
clF1b3RlKiByZW1vdmVkUXVvdGUgPSB0b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpOwotICAgICAg
ICAgICAgUmVuZGVyUXVvdGUqIGxhc3RRdW90ZUJlZm9yZSA9IHJlbW92ZWRRdW90ZS0+bV9wcmV2
aW91czsKLSAgICAgICAgICAgIHJlbW92ZWRRdW90ZS0+bV9wcmV2aW91cyA9IDA7Ci0gICAgICAg
ICAgICBpbnQgZGVwdGggPSByZW1vdmVkUXVvdGUtPm1fZGVwdGg7Ci0gICAgICAgICAgICBmb3Ig
KGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcik7IGRlc2Nl
bmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikp
Ci0gICAgICAgICAgICAgICAgaWYgKGRlc2NlbmRhbnQtPmlzUXVvdGUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVtb3ZlZFF1b3RlID0gdG9SZW5kZXJRdW90ZShkZXNjZW5kYW50KTsKLSAgICAg
ICAgICAgIFJlbmRlclF1b3RlKiBxdW90ZUFmdGVyID0gcmVtb3ZlZFF1b3RlLT5tX25leHQ7Ci0g
ICAgICAgICAgICByZW1vdmVkUXVvdGUtPm1fbmV4dCA9IDA7Ci0gICAgICAgICAgICBpZiAobGFz
dFF1b3RlQmVmb3JlKQotICAgICAgICAgICAgICAgIGxhc3RRdW90ZUJlZm9yZS0+bV9uZXh0ID0g
cXVvdGVBZnRlcjsKLSAgICAgICAgICAgIGlmIChxdW90ZUFmdGVyKSB7Ci0gICAgICAgICAgICAg
ICAgcXVvdGVBZnRlci0+bV9wcmV2aW91cyA9IGxhc3RRdW90ZUJlZm9yZTsKLSAgICAgICAgICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSBxdW90ZUFmdGVyLT5t
X2RlcHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIHF1b3RlQWZ0ZXItPm1fZGVwdGggPSBkZXB0aDsKLSAgICAgICAgICAgICAgICAgICAgcXVv
dGVBZnRlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGFkanVzdERlcHRoKGRlcHRoLCBxdW90ZUFmdGVyLT5tX3R5cGUpOwotICAgICAg
ICAgICAgICAgICAgICBxdW90ZUFmdGVyID0gcXVvdGVBZnRlci0+bV9uZXh0OwotICAgICAgICAg
ICAgICAgIH0gd2hpbGUgKHF1b3RlQWZ0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KKyAgICBpZiAobV9wcmV2aW91cykKKyAgICAgICAgbV9wcmV2aW91
cy0+bV9uZXh0ID0gbV9uZXh0OworICAgIGVsc2UgaWYgKHZpZXcoKSkKKyAgICAgICAgdmlldygp
LT5zZXRSZW5kZXJRdW90ZUhlYWQobV9uZXh0KTsKKyAgICBpZiAobV9uZXh0KQorICAgICAgICBt
X25leHQtPm1fcHJldmlvdXMgPSBtX3ByZXZpb3VzOworICAgIGlmICghZG9jdW1lbnRCZWluZ0Rl
c3Ryb3llZCgpKSB7CisgICAgICAgIGZvciAoUmVuZGVyUXVvdGUqIHF1b3RlID0gbV9uZXh0OyBx
dW90ZTsgcXVvdGUgPSBxdW90ZS0+bV9uZXh0KQorICAgICAgICAgICAgcXVvdGUtPnVwZGF0ZURl
cHRoKCk7CisgICAgfQorICAgIG1fYXR0YWNoZWQgPSBmYWxzZTsKKyAgICBtX25leHQgPSAwOwor
ICAgIG1fcHJldmlvdXMgPSAwOworICAgIG1fZGVwdGggPSAwOwogfQogCi12b2lkIFJlbmRlclF1
b3RlOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQordm9pZCBSZW5kZXJRdW90ZTo6dXBkYXRlRGVwdGgoKQogewotICAgIGNv
bnN0IFF1b3Rlc0RhdGEqIG5ld1F1b3RlcyA9IHN0eWxlKCktPnF1b3RlcygpOwotICAgIGNvbnN0
IFF1b3Rlc0RhdGEqIG9sZFF1b3RlcyA9IG9sZFN0eWxlID8gb2xkU3R5bGUtPnF1b3RlcygpIDog
MDsKLSAgICBpZiAoIVF1b3Rlc0RhdGE6OmVxdWFscyhuZXdRdW90ZXMsIG9sZFF1b3RlcykpCisg
ICAgQVNTRVJUKG1fYXR0YWNoZWQpOworICAgIGludCBvbGREZXB0aCA9IG1fZGVwdGg7CisgICAg
bV9kZXB0aCA9IDA7CisgICAgaWYgKG1fcHJldmlvdXMpIHsKKyAgICAgICAgbV9kZXB0aCA9IG1f
cHJldmlvdXMtPm1fZGVwdGg7CisgICAgICAgIHN3aXRjaCAobV9wcmV2aW91cy0+bV90eXBlKSB7
CisgICAgICAgIGNhc2UgT1BFTl9RVU9URToKKyAgICAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgor
ICAgICAgICAgICAgbV9kZXB0aCsrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q0xPU0VfUVVPVEU6CisgICAgICAgIGNhc2UgTk9fQ0xPU0VfUVVPVEU6CisgICAgICAgICAgICBp
ZiAobV9kZXB0aCkKKyAgICAgICAgICAgICAgICBtX2RlcHRoLS07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBGSVhNRTogRG9uJ3QgZGlydHkgcHJlZiB3aWR0
aHMgaW5zaWRlIG9mIGxheW91dCBiZWNhdXNlIGEgcGFyZW50IG1heSBkbworICAgIC8vIHNldE5l
ZWRzTGF5b3V0KGZhbHNlKSB3aGljaCB3b3VsZCBwcmV2ZW50IHRoZSBuZWVkZWQgcmVjYWxjLiBJ
bnN0ZWFkIHVzZQorICAgIC8vIGEgcHJlLWxheW91dCBob29rLgorICAgIGlmIChvbGREZXB0aCAh
PSBtX2RlcHRoKQogICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
LSAgICBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJRdW90ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmgK
aW5kZXggYjZmM2M1NTk5MjhiNWVmNDA0OWE5Mzc5NDM1MjE3MGMxNmFjMjM4Zi4uNjk2MDExZmU0
OTNkMmM3NjBhNWI1ZmUxYTk1MGYyODFiODBhZGExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclF1b3RlLmgKQEAgLTIxLDYgKzIxLDkgQEAKICNpZm5kZWYgUmVuZGVyUXVvdGVfaAog
I2RlZmluZSBSZW5kZXJRdW90ZV9oCiAKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IlF1b3Rlc0RhdGEuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogCkBAIC0zMCwyNCAr
MzMsMjQgQEAgY2xhc3MgUmVuZGVyUXVvdGUgOiBwdWJsaWMgUmVuZGVyVGV4dCB7CiBwdWJsaWM6
CiAgICAgUmVuZGVyUXVvdGUoRG9jdW1lbnQqLCBjb25zdCBRdW90ZVR5cGUpOwogICAgIHZpcnR1
YWwgflJlbmRlclF1b3RlKCk7CisgICAgdm9pZCBhdHRhY2hRdW90ZSgpOworICAgIHZvaWQgZGV0
YWNoUXVvdGUoKTsKIAotICAgIHN0YXRpYyB2b2lkIHJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKFJl
bmRlck9iamVjdCopOwotICAgIHN0YXRpYyB2b2lkIHJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKFJl
bmRlck9iamVjdCopOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNRdW90ZSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH07Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IG9yaWdpbmFsVGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVE
ZXN0cm95ZWQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiAiUmVuZGVyUXVvdGUiOyB9OworICAgIHZpcnR1YWwg
Ym9vbCBpc1F1b3RlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxUZXh0KCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxl
YWRXaWR0aCkgT1ZFUlJJREU7CisKICAgICBjb25zdCBRdW90ZXNEYXRhKiBxdW90ZXNEYXRhKCkg
Y29uc3Q7CisgICAgdm9pZCB1cGRhdGVEZXB0aCgpOwogCiAgICAgUXVvdGVUeXBlIG1fdHlwZTsK
ICAgICBpbnQgbV9kZXB0aDsKICAgICBSZW5kZXJRdW90ZSogbV9uZXh0OwogICAgIFJlbmRlclF1
b3RlKiBtX3ByZXZpb3VzOwotICAgIHZvaWQgcGxhY2VRdW90ZSgpOworICAgIGJvb2wgbV9hdHRh
Y2hlZDsKIH07CiAKIGlubGluZSBSZW5kZXJRdW90ZSogdG9SZW5kZXJRdW90ZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAppbmRleCA4
YmQ0OWNjZmFlMWFkZGM5ZjZjZTY1YTJjOWJmZDkyOTU3Mzc1MTlmLi43NWI0NzI1Njg1MTVjODkz
YmFiMTQ2YWY0NmE3NDU5MjNiZWVhNjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwCkBAIC02Miw3ICs2Miw3IEBAIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoTm9kZSog
bm9kZSwgRnJhbWVWaWV3KiB2aWV3KQogICAgICwgbV9wYWdlTG9naWNhbEhlaWdodENoYW5nZWQo
ZmFsc2UpCiAgICAgLCBtX2xheW91dFN0YXRlKDApCiAgICAgLCBtX2xheW91dFN0YXRlRGlzYWJs
ZUNvdW50KDApCi0gICAgLCBtX3JlbmRlclF1b3RlQ291bnQoMCkKKyAgICAsIG1fcmVuZGVyUXVv
dGVIZWFkKDApCiAgICAgLCBtX3JlbmRlckNvdW50ZXJDb3VudCgwKQogewogICAgIC8vIENsZWFy
IG91ciBhbm9ueW1vdXMgYml0LCBzZXQgYmVjYXVzZSBSZW5kZXJPYmplY3QgYXNzdW1lcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggMDRhODA2ZTliY2E1OTFlMTVhNjU3
YTEyODFhMmUwMWJkZWRmYmQwOC4uMDBlYTUzN2U0ZGVmZWQyM2Q3MDQ5ZGM3ODU5OGI4ZDQ2MWRj
MmM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC0zMiw2ICszMiw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvd1RocmVhZENvbnRyb2xsZXI7CiBj
bGFzcyBSZW5kZXJXaWRnZXQ7CitjbGFzcyBSZW5kZXJRdW90ZTsKIAogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKQEAgLTE5NCwx
MyArMTk1LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Rml4ZWRQb3NpdGlvbmVkT2JqZWN0
c05lZWRMYXlvdXQoKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29yayBhcm91bmQgYmVj
YXVzZSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjb3VudGVycyBhbmQgcXVvdGVzCisg
ICAgdm9pZCBzZXRSZW5kZXJRdW90ZUhlYWQoUmVuZGVyUXVvdGUqIGhlYWQpIHsgbV9yZW5kZXJR
dW90ZUhlYWQgPSBoZWFkOyB9CisgICAgUmVuZGVyUXVvdGUqIHJlbmRlclF1b3RlSGVhZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyUXVvdGVIZWFkOyB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyBhIHdvcmsgYXJvdW5kIGJlY2F1c2UgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY291
bnRlcnMKICAgICAvLyByZXF1aXJlcyB3YWxraW5nIHRoZSBlbnRpcmUgdHJlZSByZXBlYXRlZGx5
IGFuZCBtb3N0IHBhZ2VzIGRvbid0IGFjdHVhbGx5IHVzZSBlaXRoZXIKICAgICAvLyBmZWF0dXJl
IHNvIHdlIHNob3VsZG4ndCB0YWtlIHRoZSBwZXJmb3JtYW5jZSBoaXQgd2hlbiBub3QgbmVlZGVk
LiBMb25nIHRlcm0gd2Ugc2hvdWxkCiAgICAgLy8gcmV3cml0ZSB0aGUgY291bnRlciBhbmQgcXVv
dGVzIGNvZGUuCi0gICAgdm9pZCBhZGRSZW5kZXJRdW90ZSgpIHsgbV9yZW5kZXJRdW90ZUNvdW50
Kys7IH0KLSAgICB2b2lkIHJlbW92ZVJlbmRlclF1b3RlKCkgeyBBU1NFUlQobV9yZW5kZXJRdW90
ZUNvdW50ID4gMCk7IG1fcmVuZGVyUXVvdGVDb3VudC0tOyB9Ci0gICAgYm9vbCBoYXNSZW5kZXJR
dW90ZXMoKSB7IHJldHVybiBtX3JlbmRlclF1b3RlQ291bnQ7IH0KICAgICB2b2lkIGFkZFJlbmRl
ckNvdW50ZXIoKSB7IG1fcmVuZGVyQ291bnRlckNvdW50Kys7IH0KICAgICB2b2lkIHJlbW92ZVJl
bmRlckNvdW50ZXIoKSB7IEFTU0VSVChtX3JlbmRlckNvdW50ZXJDb3VudCA+IDApOyBtX3JlbmRl
ckNvdW50ZXJDb3VudC0tOyB9CiAgICAgYm9vbCBoYXNSZW5kZXJDb3VudGVycygpIHsgcmV0dXJu
IG1fcmVuZGVyQ291bnRlckNvdW50OyB9CkBAIC0zMDEsNyArMzAyLDcgQEAgcHJpdmF0ZToKICAg
ICBPd25QdHI8Rmxvd1RocmVhZENvbnRyb2xsZXI+IG1fZmxvd1RocmVhZENvbnRyb2xsZXI7CiAg
ICAgUmVmUHRyPEludGVydmFsQXJlbmE+IG1faW50ZXJ2YWxBcmVuYTsKIAotICAgIHVuc2lnbmVk
IG1fcmVuZGVyUXVvdGVDb3VudDsKKyAgICBSZW5kZXJRdW90ZSogbV9yZW5kZXJRdW90ZUhlYWQ7
CiAgICAgdW5zaWduZWQgbV9yZW5kZXJDb3VudGVyQ291bnQ7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCA2ZmZlYTRjYmZjNTE5
YjJjZWYyM2JiM2M5NGJlMjcyYWU4N2Q3NzlkLi44ZWQwODA0ZmE0MTc3ODBkZTUxNmMzNjY1ZTg3
YTllODQ3ZGQ0ZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAKQEAgLTU4MCw2ICs1ODAsOSBAQCBTdHlsZURpZmZlcmVuY2UgUmVuZGVyU3R5
bGU6OmRpZmYoY29uc3QgUmVuZGVyU3R5bGUqIG90aGVyLCB1bnNpZ25lZCYgY2hhbmdlZENvbgog
ICAgICAgICByZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0OwogICAgIH0KIAorICAgIGlmICgh
UXVvdGVzRGF0YTo6ZXF1YWxzKHJhcmVJbmhlcml0ZWREYXRhLT5xdW90ZXMuZ2V0KCksIG90aGVy
LT5yYXJlSW5oZXJpdGVkRGF0YS0+cXVvdGVzLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIFN0eWxl
RGlmZmVyZW5jZUxheW91dDsKKwogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gU1ZHUmVuZGVyU3R5
bGU6OmRpZmYoKSBtaWdodCBoYXZlIHJldHVybmVkIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQsIGVn
LiBpZiBmaWxsIGNoYW5nZXMuCiAgICAgLy8gSWYgZWcuIHRoZSBmb250LXNpemUgY2hhbmdlZCBh
dCB0aGUgc2FtZSB0aW1lLCB3ZSdyZSBub3QgYWxsb3dlZCB0byByZXR1cm4gU3R5bGVEaWZmZXJl
bmNlUmVwYWludCwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157000</attachid>
            <date>2012-08-07 14:15:49 -0700</date>
            <delta_ts>2012-08-08 18:19:32 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-93056-20120807141524.patch</filename>
            <type>text/plain</type>
            <size>21076</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNiMTk0ZTE1MTBlYTQ4
ODJlN2NkNTUyOWI5YjhiYmRiN2VjMWM0ZC4uZGZjOTlmNzRhM2ZhNDVhZWYzNzI0MmNiNDIwZjQz
MDA5ZDUyYjQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTA4LTAyICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIFJlaW1wbGVtZW50IFJl
bmRlclF1b3RlIHBsYWNlbWVudCBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCisKKyAgICAgICAgR3JlYXRseSBzaW1wbGlmeSB0aGUgY29kZSB0aGF0IG1haW50YWlu
cyB0aGUgbGlua2VkIGxpc3Qgb2YgUmVuZGVyUXVvdGVzLiBOb3cgUmVuZGVyUXVvdGUKKyAgICAg
ICAgaXMgcGxhY2VkIGludG8gdGhlIGxpbmtlZCBsaXN0IGluIGNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzIG9uIGZpcnN0IGFjY2VzcyBhbmQgaXMKKyAgICAgICAgZGV0YWNoZWQgd2hlbiBk
ZXN0cm95ZWQgKG9yIGV4cGxpY2l0bHkgcmVtb3ZlZCkuCisKKyAgICAgICAgVGhlIG5ldyBhbGdv
cml0aG0gZG9lc24ndCByZXF1aXJlIHdhbGtpbmcgdXAgdGhlIHRyZWUgb2YgcmVuZGVyZXJzIHdo
ZW4gdGhlcmUgYXJlIG5vCisgICAgICAgIFJlbmRlclF1b3RlcyBpbiB0aGUgdHJlZSB5ZXQsIGFu
ZCBhbHNvIHJlbW92ZXMgdGhlIG5lZWQgdG8gd2FsayBvdmVyIGV2ZXJ5IHN1YnRyZWUKKyAgICAg
ICAgd2hlbiBpbnNlcnRpbmcgaW4gcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnkgYmVoYXZp
b3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2RlKTog
Q2FsbCBkZXRhY2hRdW90ZSB3aGVuIHJlbW92aW5nIGZyb20gYSBjaGlsZCBsaXN0LgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJRdW90ZTo6UmVuZGVyUXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6
On5SZW5kZXJRdW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6d2lsbEJlRGVz
dHJveWVkKTogQ2FsbCBkZXRhY2hRdW90ZSB0byBlbnN1cmUgYWxsIGRlc3Ryb3llZCBxdW90ZXMg
YXJlIGRldGFjaGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMpOiBBdHRhY2ggcXVvdGUgYmVmb3JlIGNvbXB1dGluZyB0aGUgd2lkdGguCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjphdHRhY2hRdW90
ZSk6IFB1dHMgdGhlIFJlbmRlclF1b3RlIGluIHRoZSBsaW5rZWQgbGlzdCBvZiBxdW90ZXMgYW5k
IGNvbXB1dGVzIHRoZSBkZXB0aC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjpkZXRh
Y2hRdW90ZSk6IFJlbW92ZXMgdGhlIHF1b3RlIGZyb20gdGhlIGxpbmtlZCBsaXN0LgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6OnVwZGF0ZURlcHRoKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUXVvdGUuaDoKKyAgICAgICAgKFJlbmRlclF1b3RlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5
bGU6OmRpZmYpOiBSZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0IGlmIHF1b3RlcyBjaGFuZ2Ug
YW5kIHJlbW92ZSBjaGVjayBpbiBzdHlsZURpZENoYW5nZSBpbiBSZW5kZXJRdW90ZS4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpSZW5kZXJWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRSZW5kZXJR
dW90ZUhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVuZGVyUXVvdGVIZWFk
KTogU3RvcmVzIHRoZSBmaXJzdCBxdW90ZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIChSZW5k
ZXJWaWV3KToKKwogMjAxMi0wOC0wMiAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBTbGlkZXIgc2hvdWxkIHNuYXAgdG8gZGF0YWxpc3QgdGljayBtYXJrcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNw
cAppbmRleCBkYTk4MDg4ZTIxNTYzNTY3Mjk0YzY2YzEzNzM5OTQ1YTkzNDViODc2Li4zMTU4ZmJm
YjY5OWRkY2JmYWMwZmYyOTIyYjNjMzgyOGU3MTlmZmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcApAQCAtMTE3LDYgKzExNyw5
IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUo
UmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgICAgIGlmIChvbGRDaGlsZC0+aXNSZW5k
ZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG9sZENoaWxkKS0+ZGV0YWNo
UmVnaW9uKCk7CiAKKyAgICAgICAgaWYgKG9sZENoaWxkLT5pc1F1b3RlKCkpCisgICAgICAgICAg
ICB0b1JlbmRlclF1b3RlKG9sZENoaWxkKS0+ZGV0YWNoUXVvdGUoKTsKKwogICAgICAgICBpZiAo
b2xkQ2hpbGQtPmluUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgICAgICBpZiAob2xkQ2hp
bGQtPmlzQm94KCkpCiAgICAgICAgICAgICAgICAgb2xkQ2hpbGQtPmVuY2xvc2luZ1JlbmRlckZs
b3dUaHJlYWQoKS0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyh0b1JlbmRlckJveChvbGRDaGls
ZCkpOwpAQCAtMTU4LDcgKzE2MSw2IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgLy8g
Ynkgc2tpcHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVzdHJveWluZyB0aGUgZW50aXJlIHRyZWUuCiAg
ICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJlbmRl
ckNvdW50ZXI6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKLSAgICAgICAgUmVu
ZGVyUXVvdGU6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKICAgICB9CiAKICAg
ICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKQEAgLTIxMCwxMyAr
MjEyLDE2IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUoUmVu
ZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuCiAgICAgICAgIGlmIChuZXdDaGlsZC0+
aXNSZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG5ld0NoaWxkKS0+
YXR0YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgLy8gWW91IGNhbid0IGF0dGFjaFF1b3RlKCkgb3Ro
ZXJ3aXNlIHRoZSBxdW90ZSB3b3VsZCBiZSBhdHRhY2hlZCB0b28gZWFybHkKKyAgICAgICAgLy8g
YW5kIGdldCB0aGUgd3JvbmcgZGVwdGggc2luY2UgZ2VuZXJhdGVkIGNvbnRlbnQgaXMgaW5zZXJ0
ZWQgaW50byBhbm9ueW1vdXMKKyAgICAgICAgLy8gcmVuZGVyZXJzIGJlZm9yZSBnb2luZyBpbnRv
IHRoZSBtYWluIHJlbmRlciB0cmVlLgorCiAgICAgICAgIGlmIChSZW5kZXJOYW1lZEZsb3dUaHJl
YWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJOYW1lZEZsb3dUaHJlYWRDb250YWluZXIo
b3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxvd1RocmVhZC0+YWRkRmxvd0NoaWxkKG5l
d0NoaWxkKTsKICAgICB9CiAKICAgICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJveWVk
KCkpIHsKICAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQobmV3
Q2hpbGQpOwotICAgICAgICBSZW5kZXJRdW90ZTo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQobmV3
Q2hpbGQpOwogICAgIH0KICAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7IC8vIEdvZXMgdXAgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGllcmFyY2h5LgogICAg
IGlmICghb3duZXItPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKQEAgLTI3OSwxMyArMjg0LDE1
IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2Jq
ZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBjCiAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJS
ZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKGNoaWxkKS0+YXR0YWNoUmVnaW9u
KCk7CiAKKyAgICAgICAgLy8gQ2FsbGluZyBhdHRhY2hRdW90ZSgpIGhlcmUgd291bGQgYmUgdG9v
IGVhcmx5IChiZWZvcmUgYW5vbnltb3VzIHJlbmRlcmVycyBhcmUgaW5zZXJ0ZWQpCisgICAgICAg
IC8vIHNlZSBhcHBlbmRDaGlsZCgpIGZvciBtb3JlIGV4cGxhbmF0aW9uLgorCiAgICAgICAgIGlm
IChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJOYW1l
ZEZsb3dUaHJlYWRDb250YWluZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxvd1Ro
cmVhZC0+YWRkRmxvd0NoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgfQogCiAgICAgaWYg
KCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJlbmRlckNvdW50
ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKLSAgICAgICAgUmVuZGVyUXVvdGU6
OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKICAgICB9CiAgICAgY2hpbGQtPnNldE5l
ZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIGlmICghb3duZXItPm5vcm1hbENo
aWxkTmVlZHNMYXlvdXQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJRdW90ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3Bw
CmluZGV4IDdmMWQ3NDliMTJlZmI3OGZjYTY3MDY0MGFkM2JkNTM0MzVmOTZmYjIuLmU3ZmExZmMy
M2FmMDkwYTA1MjRhNDdmODM2OThlM2EyN2FkOTNhNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclF1b3RlLmNwcApAQCAtMjEsMTE5ICsyMSwzNCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCi0jZGVmaW5lIFVOS05PV05fREVQVEggLTEK
KyNkZWZpbmUgVSh4KSAoKGNvbnN0IFVDaGFyKilMIyN4KQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0RGVwdGgoaW50ICZkZXB0aCwgUXVvdGVUeXBlIHR5
cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBPUEVOX1FVT1RFOgotICAgIGNh
c2UgTk9fT1BFTl9RVU9URToKLSAgICAgICAgKytkZXB0aDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDTE9TRV9RVU9URToKLSAgICBjYXNlIE5PX0NMT1NFX1FVT1RFOgotICAgICAgICBpZiAo
ZGVwdGgpCi0gICAgICAgICAgICAtLWRlcHRoOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19CiAKIFJlbmRlclF1b3Rl
OjpSZW5kZXJRdW90ZShEb2N1bWVudCogbm9kZSwgUXVvdGVUeXBlIHF1b3RlKQogICAgIDogUmVu
ZGVyVGV4dChub2RlLCBTdHJpbmdJbXBsOjplbXB0eSgpKQogICAgICwgbV90eXBlKHF1b3RlKQot
ICAgICwgbV9kZXB0aChVTktOT1dOX0RFUFRIKQorICAgICwgbV9kZXB0aCgwKQogICAgICwgbV9u
ZXh0KDApCiAgICAgLCBtX3ByZXZpb3VzKDApCisgICAgLCBtX2F0dGFjaGVkKGZhbHNlKQogewot
ICAgIHZpZXcoKS0+YWRkUmVuZGVyUXVvdGUoKTsKIH0KIAogUmVuZGVyUXVvdGU6On5SZW5kZXJR
dW90ZSgpCiB7CisgICAgQVNTRVJUKCFtX2F0dGFjaGVkKTsKKyAgICBBU1NFUlQoIW1fbmV4dCAm
JiAhbV9wcmV2aW91cyk7CiB9CiAKIHZvaWQgUmVuZGVyUXVvdGU6OndpbGxCZURlc3Ryb3llZCgp
CiB7Ci0gICAgaWYgKHZpZXcoKSkKLSAgICAgICAgdmlldygpLT5yZW1vdmVSZW5kZXJRdW90ZSgp
OworICAgIGRldGFjaFF1b3RlKCk7CiAgICAgUmVuZGVyVGV4dDo6d2lsbEJlRGVzdHJveWVkKCk7
CiB9CiAKLWNvbnN0IGNoYXIqIFJlbmRlclF1b3RlOjpyZW5kZXJOYW1lKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gIlJlbmRlclF1b3RlIjsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBwbGFjZXMgYSBs
aXN0IG9mIHF1b3RlIHJlbmRlcmVycyBzdGFydGluZyBhdCAidGhpcyIgaW4gdGhlIGxpc3Qgb2Yg
cXVvdGUgcmVuZGVyZXJzIGFscmVhZHkKLS8vIGluIHRoZSBkb2N1bWVudCdzIHJlbmRlcmVyIHRy
ZWUuCi0vLyBUaGUgYXNzdW1wdGlvbnMgYXJlIG1hZGUgKGZvciBwZXJmb3JtYW5jZSk6Ci0vLyAx
LiBUaGUgbGlzdCBvZiBxdW90ZXMgYWxyZWFkeSBpbiB0aGUgcmVuZGVyZXJzIHRyZWUgb2YgdGhl
IGRvY3VtZW50IGlzIGFscmVhZHkgaW4gYSBjb25zaXN0ZW50IHN0YXRlCi0vLyAoQWxsIHF1b3Rl
IHJlbmRlcmVycyBhcmUgbGlua2VkIGFuZCBoYXZlIHRoZSBjb3JyZWN0IGRlcHRoIHNldCkKLS8v
IDIuIFRoZSBxdW90ZSByZW5kZXJlcnMgb2YgdGhlIGluc2VydGVkIGxpc3QgYXJlIGluIGEgdHJl
ZSBvZiByZW5kZXJlcnMgb2YgdGhlaXIgb3duIHdoaWNoIGhhcyBiZWVuIGp1c3QKLS8vIGluc2Vy
dGVkIGluIHRoZSBtYWluIHJlbmRlcmVyIHRyZWUgd2l0aCBpdHMgcm9vdCBhcyBjaGlsZCBvZiBz
b21lIHJlbmRlcmVyLgotLy8gMy4gVGhlIHF1b3RlIHJlbmRlcmVycyBpbiB0aGUgaW5zZXJ0ZWQg
bGlzdCBoYXZlIGRlcHRocyBjb25zaXN0ZW50IHdpdGggdGhlaXIgcG9zaXRpb24gaW4gdGhlIGxp
c3QgcmVsYXRpdmUKLS8vIHRvICJ0aGlzIiwgdGh1cyBpZiAidGhpcyIgZG9lcyBub3QgbmVlZCB0
byBjaGFuZ2UgaXRzIGRlcHRoIHVwb24gaW5zZXJ0aW9uLCB0aGUgb3RoZXIgcmVuZGVyZXJzIGlu
IHRoZSBsaXN0IGRvbid0Ci0vLyBuZWVkIHRvIGVpdGhlci4KLXZvaWQgUmVuZGVyUXVvdGU6OnBs
YWNlUXVvdGUoKQotewotICAgIFJlbmRlclF1b3RlKiBoZWFkID0gdGhpczsKLSAgICBBU1NFUlQo
IWhlYWQtPm1fcHJldmlvdXMpOwotICAgIFJlbmRlclF1b3RlKiB0YWlsID0gMDsKLSAgICBmb3Ig
KFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBoZWFkLT5wcmV2aW91c0luUHJlT3JkZXIoKTsg
cHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3ItPnByZXZpb3VzSW5QcmVPcmRl
cigpKSB7Ci0gICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVvdGUoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBoZWFkLT5tX3ByZXZpb3VzID0gdG9SZW5kZXJRdW90ZShwcmVk
ZWNlc3Nvcik7Ci0gICAgICAgIGlmIChoZWFkLT5tX3ByZXZpb3VzLT5tX25leHQpIHsKLSAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gc3BsaWNlIHRoZSBsaXN0IG9mIHF1b3RlcyBoZWFkZWQgYnkg
aGVhZCBpbnRvIHRoZSBkb2N1bWVudCdzIGxpc3Qgb2YgcXVvdGVzLgotICAgICAgICAgICAgdGFp
bCA9IGhlYWQ7Ci0gICAgICAgICAgICB3aGlsZSAodGFpbC0+bV9uZXh0KQotICAgICAgICAgICAg
ICAgICB0YWlsID0gdGFpbC0+bV9uZXh0OwotICAgICAgICAgICAgdGFpbC0+bV9uZXh0ID0gaGVh
ZC0+bV9wcmV2aW91cy0+bV9uZXh0OwotICAgICAgICAgICAgQVNTRVJUKHRhaWwtPm1fbmV4dC0+
bV9wcmV2aW91cyA9PSBoZWFkLT5tX3ByZXZpb3VzKTsKLSAgICAgICAgICAgIHRhaWwtPm1fbmV4
dC0+bV9wcmV2aW91cyA9ICB0YWlsOwotICAgICAgICAgICAgdGFpbCA9IHRhaWwtPm1fbmV4dDsg
Ly8gVGhpcyBtYXJrcyB0aGUgc3BsaWNpbmcgcG9pbnQgaGVyZSB0aGVyZSBtYXkgYmUgYSBkZXB0
aCBkaXNjb250aW51aXR5Ci0gICAgICAgIH0KLSAgICAgICAgaGVhZC0+bV9wcmV2aW91cy0+bV9u
ZXh0ID0gaGVhZDsKLSAgICAgICAgQVNTRVJUKGhlYWQtPm1fcHJldmlvdXMtPm1fZGVwdGggIT0g
VU5LTk9XTl9ERVBUSCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpbnQgbmV3RGVwdGg7
Ci0gICAgaWYgKCFoZWFkLT5tX3ByZXZpb3VzKSB7Ci0gICAgICAgIG5ld0RlcHRoID0gMDsKLSAg
ICAgICAgZ290byBza2lwTmV3RGVwdGhDYWxjOwotICAgIH0KLSAgICBuZXdEZXB0aCA9IGhlYWQt
Pm1fcHJldmlvdXMtPm1fZGVwdGg7Ci0gICAgZG8gewotICAgICAgICBhZGp1c3REZXB0aChuZXdE
ZXB0aCwgaGVhZC0+bV9wcmV2aW91cy0+bV90eXBlKTsKLXNraXBOZXdEZXB0aENhbGM6Ci0gICAg
ICAgIGlmIChoZWFkLT5tX2RlcHRoID09IG5ld0RlcHRoKSB7IC8vIEFsbCByZW1haW5pbmcgZGVw
dGggc2hvdWxkIGJlIGNvcnJlY3QgZXhjZXB0IGlmIHNwbGljaW5nIHdhcyBkb25lLgotICAgICAg
ICAgICAgaWYgKCF0YWlsKSAvLyBXZSd2ZSBkb25lIHRoZSBwb3N0IHNwbGljaW5nIHNlY3Rpb24g
YWxyZWFkeSBvciB0aGVyZSB3YXMgbm8gc3BsaWNpbmcuCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBoZWFkID0gdGFpbDsgLy8gQ29udGludWUgYWZ0ZXIgdGhlIHNwbGljaW5n
IHBvaW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgc3BsaWNp
bmcgcG9pbnQgZGlzY29udGludWl0eSBmaXhlZC4KLSAgICAgICAgICAgIG5ld0RlcHRoID0gaGVh
ZC0+bV9wcmV2aW91cy0+bV9kZXB0aDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIGhlYWQtPm1fZGVwdGggPSBuZXdEZXB0aDsKLSAgICAgICAgLy8gRklYTUU6IElm
IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBkb2VzIG5v
dCBjaGFuZ2Ugd2UgbWF5IG9ubHkgbmVlZCB0bwotICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBy
ZW5kZXJlcidzIGFyZWEgbm90IGEgcmVsYXlvdXQuCi0gICAgICAgIGhlYWQtPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICBoZWFkID0gaGVhZC0+bV9uZXh0Owot
ICAgICAgICBpZiAoaGVhZCA9PSB0YWlsKSAvLyBXZSBhcmUgYXQgdGhlIHNwbGljaW5nIHBvaW50
Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgZGVwdGggZGlzY29u
dGludWl0eSBmaXhlZC4KLSAgICB9IHdoaWxlIChoZWFkKTsKLX0KLQotI2RlZmluZSBVKHgpICgo
Y29uc3QgVUNoYXIqKUwjI3gpCi0KIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIGNvbnN0
IFF1b3Rlc0RhdGEqLCBDYXNlRm9sZGluZ0hhc2g+IFF1b3Rlc01hcDsKIAogc3RhdGljIGNvbnN0
IFF1b3Rlc01hcCYgcXVvdGVzRGF0YUxhbmd1YWdlTWFwKCkKQEAgLTE1NywyNyArNzIsMjQgQEAg
c3RhdGljIGNvbnN0IFF1b3Rlc0RhdGEqIGJhc2ljUXVvdGVzRGF0YSgpCiAKIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYg
KCFwYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKG1fZGVwdGggIT0gVU5L
Tk9XTl9ERVBUSCk7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzID0gcXVvdGVzRGF0YSgp
OwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgogICAgIGNh
c2UgTk9fQ0xPU0VfUVVPVEU6CiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwog
ICAgIGNhc2UgQ0xPU0VfUVVPVEU6CiAgICAgICAgIC8vIEZJWE1FOiBXaGVuIG1fZGVwdGggaXMg
MCB3ZSBzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZy4KLSAgICAgICAgcmV0dXJuIHF1b3Rlcy0+
Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0gMSwgMCkpLmltcGwoKTsKKyAgICAgICAg
cmV0dXJuIHF1b3Rlc0RhdGEoKS0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0gMSwg
MCkpLmltcGwoKTsKICAgICBjYXNlIE9QRU5fUVVPVEU6Ci0gICAgICAgIHJldHVybiBxdW90ZXMt
PmdldE9wZW5RdW90ZShtX2RlcHRoKS5pbXBsKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwor
ICAgICAgICByZXR1cm4gcXVvdGVzRGF0YSgpLT5nZXRPcGVuUXVvdGUobV9kZXB0aCkuaW1wbCgp
OwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nSW1w
bDo6ZW1wdHkoKTsKIH0KIAogdm9pZCBSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoZmxvYXQgbGVhZCkKIHsKKyAgICBpZiAoIW1fYXR0YWNoZWQpCisgICAgICAgIGF0
dGFjaFF1b3RlKCk7CiAgICAgc2V0VGV4dEludGVybmFsKG9yaWdpbmFsVGV4dCgpKTsKICAgICBS
ZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhsZWFkKTsKIH0KQEAgLTE5
Niw1OCArMTA4LDk1IEBAIGNvbnN0IFF1b3Rlc0RhdGEqIFJlbmRlclF1b3RlOjpxdW90ZXNEYXRh
KCkgY29uc3QKICAgICByZXR1cm4gcXVvdGVzOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpyZW5k
ZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBSZW5kZXJR
dW90ZTo6YXR0YWNoUXVvdGUoKQogewotICAgIEFTU0VSVChyZW5kZXJlci0+dmlldygpKTsKLSAg
ICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhhc1JlbmRlclF1b3RlcygpKQorICAgIEFTU0VSVCh2
aWV3KCkpOworICAgIEFTU0VSVCghbV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX25leHQgJiYg
IW1fcHJldmlvdXMpOworCisgICAgLy8gRklYTUU6IERvbid0IHNldCBwcmVmIHdpZHRocyBkaXJ0
eSBkdXJpbmcgbGF5b3V0LiBTZWUgdXBkYXRlRGVwdGgoKSBmb3IKKyAgICAvLyBtb3JlIGRldGFp
bC4KKyAgICBpZiAoIWlzUm9vdGVkKCkpIHsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVm
V2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKFJlbmRlck9iamVjdCog
ZGVzY2VuZGFudCA9IHJlbmRlcmVyOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFu
dC0+bmV4dEluUHJlT3JkZXIocmVuZGVyZXIpKQotICAgICAgICBpZiAoZGVzY2VuZGFudC0+aXNR
dW90ZSgpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpLT5wbGFjZVF1
b3RlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh
dmlldygpLT5yZW5kZXJRdW90ZUhlYWQoKSkgeworICAgICAgICB2aWV3KCktPnNldFJlbmRlclF1
b3RlSGVhZCh0aGlzKTsKKyAgICAgICAgbV9hdHRhY2hlZCA9IHRydWU7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBwcmV2aW91
c0luUHJlT3JkZXIoKTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3ItPnBy
ZXZpb3VzSW5QcmVPcmRlcigpKSB7CisgICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVvdGUo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX3ByZXZpb3VzID0gdG9SZW5kZXJR
dW90ZShwcmVkZWNlc3Nvcik7CisgICAgICAgIG1fbmV4dCA9IG1fcHJldmlvdXMtPm1fbmV4dDsK
KyAgICAgICAgbV9wcmV2aW91cy0+bV9uZXh0ID0gdGhpczsKKyAgICAgICAgaWYgKG1fbmV4dCkK
KyAgICAgICAgICAgIG1fbmV4dC0+bV9wcmV2aW91cyA9IHRoaXM7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGlmICghbV9wcmV2aW91cykgeworICAgICAgICBtX25leHQgPSB2aWV3KCkt
PnJlbmRlclF1b3RlSGVhZCgpOworICAgICAgICB2aWV3KCktPnNldFJlbmRlclF1b3RlSGVhZCh0
aGlzKTsKKyAgICB9CisgICAgbV9hdHRhY2hlZCA9IHRydWU7CisgICAgZm9yIChSZW5kZXJRdW90
ZSogcXVvdGUgPSB0aGlzOyBxdW90ZTsgcXVvdGUgPSBxdW90ZS0+bV9uZXh0KQorICAgICAgICBx
dW90ZS0+dXBkYXRlRGVwdGgoKTsKKworICAgIEFTU0VSVCghbV9uZXh0IHx8IG1fbmV4dC0+bV9h
dHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX3ByZXZpb3VzIHx8IG1fcHJldmlvdXMtPm1fYXR0YWNo
ZWQpOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpyZW5kZXJlclJlbW92ZWRGcm9tVHJlZShSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBSZW5kZXJRdW90ZTo6ZGV0YWNoUXVvdGUoKQogewot
ICAgIEFTU0VSVChyZW5kZXJlci0+dmlldygpKTsKLSAgICBpZiAoIXJlbmRlcmVyLT52aWV3KCkt
Pmhhc1JlbmRlclF1b3RlcygpKQorICAgIEFTU0VSVCghbV9uZXh0IHx8IG1fbmV4dC0+bV9hdHRh
Y2hlZCk7CisgICAgQVNTRVJUKCFtX3ByZXZpb3VzIHx8IG1fcHJldmlvdXMtPm1fYXR0YWNoZWQp
OworICAgIGlmICghbV9hdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBkZXNjZW5kYW50ID0gcmVuZGVyZXI7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSBk
ZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikpCi0gICAgICAgIGlmIChkZXNjZW5k
YW50LT5pc1F1b3RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclF1b3RlKiByZW1vdmVkUXVvdGUg
PSB0b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgUmVuZGVyUXVvdGUqIGxh
c3RRdW90ZUJlZm9yZSA9IHJlbW92ZWRRdW90ZS0+bV9wcmV2aW91czsKLSAgICAgICAgICAgIHJl
bW92ZWRRdW90ZS0+bV9wcmV2aW91cyA9IDA7Ci0gICAgICAgICAgICBpbnQgZGVwdGggPSByZW1v
dmVkUXVvdGUtPm1fZGVwdGg7Ci0gICAgICAgICAgICBmb3IgKGRlc2NlbmRhbnQgPSBkZXNjZW5k
YW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcik7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSBk
ZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikpCi0gICAgICAgICAgICAgICAgaWYg
KGRlc2NlbmRhbnQtPmlzUXVvdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZFF1b3Rl
ID0gdG9SZW5kZXJRdW90ZShkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIFJlbmRlclF1b3RlKiBx
dW90ZUFmdGVyID0gcmVtb3ZlZFF1b3RlLT5tX25leHQ7Ci0gICAgICAgICAgICByZW1vdmVkUXVv
dGUtPm1fbmV4dCA9IDA7Ci0gICAgICAgICAgICBpZiAobGFzdFF1b3RlQmVmb3JlKQotICAgICAg
ICAgICAgICAgIGxhc3RRdW90ZUJlZm9yZS0+bV9uZXh0ID0gcXVvdGVBZnRlcjsKLSAgICAgICAg
ICAgIGlmIChxdW90ZUFmdGVyKSB7Ci0gICAgICAgICAgICAgICAgcXVvdGVBZnRlci0+bV9wcmV2
aW91cyA9IGxhc3RRdW90ZUJlZm9yZTsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChkZXB0aCA9PSBxdW90ZUFmdGVyLT5tX2RlcHRoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHF1b3RlQWZ0ZXItPm1fZGVw
dGggPSBkZXB0aDsKLSAgICAgICAgICAgICAgICAgICAgcXVvdGVBZnRlci0+c2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkanVzdERlcHRo
KGRlcHRoLCBxdW90ZUFmdGVyLT5tX3R5cGUpOwotICAgICAgICAgICAgICAgICAgICBxdW90ZUFm
dGVyID0gcXVvdGVBZnRlci0+bV9uZXh0OwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKHF1b3Rl
QWZ0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAg
ICBpZiAobV9wcmV2aW91cykKKyAgICAgICAgbV9wcmV2aW91cy0+bV9uZXh0ID0gbV9uZXh0Owor
ICAgIGVsc2UgaWYgKHZpZXcoKSkKKyAgICAgICAgdmlldygpLT5zZXRSZW5kZXJRdW90ZUhlYWQo
bV9uZXh0KTsKKyAgICBpZiAobV9uZXh0KQorICAgICAgICBtX25leHQtPm1fcHJldmlvdXMgPSBt
X3ByZXZpb3VzOworICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CisgICAgICAg
IGZvciAoUmVuZGVyUXVvdGUqIHF1b3RlID0gbV9uZXh0OyBxdW90ZTsgcXVvdGUgPSBxdW90ZS0+
bV9uZXh0KQorICAgICAgICAgICAgcXVvdGUtPnVwZGF0ZURlcHRoKCk7CisgICAgfQorICAgIG1f
YXR0YWNoZWQgPSBmYWxzZTsKKyAgICBtX25leHQgPSAwOworICAgIG1fcHJldmlvdXMgPSAwOwor
ICAgIG1fZGVwdGggPSAwOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQordm9pZCBS
ZW5kZXJRdW90ZTo6dXBkYXRlRGVwdGgoKQogewotICAgIGNvbnN0IFF1b3Rlc0RhdGEqIG5ld1F1
b3RlcyA9IHN0eWxlKCktPnF1b3RlcygpOwotICAgIGNvbnN0IFF1b3Rlc0RhdGEqIG9sZFF1b3Rl
cyA9IG9sZFN0eWxlID8gb2xkU3R5bGUtPnF1b3RlcygpIDogMDsKLSAgICBpZiAoIVF1b3Rlc0Rh
dGE6OmVxdWFscyhuZXdRdW90ZXMsIG9sZFF1b3RlcykpCisgICAgQVNTRVJUKG1fYXR0YWNoZWQp
OworICAgIGludCBvbGREZXB0aCA9IG1fZGVwdGg7CisgICAgbV9kZXB0aCA9IDA7CisgICAgaWYg
KG1fcHJldmlvdXMpIHsKKyAgICAgICAgbV9kZXB0aCA9IG1fcHJldmlvdXMtPm1fZGVwdGg7Cisg
ICAgICAgIHN3aXRjaCAobV9wcmV2aW91cy0+bV90eXBlKSB7CisgICAgICAgIGNhc2UgT1BFTl9R
VU9URToKKyAgICAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgorICAgICAgICAgICAgbV9kZXB0aCsr
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0xPU0VfUVVPVEU6CisgICAgICAg
IGNhc2UgTk9fQ0xPU0VfUVVPVEU6CisgICAgICAgICAgICBpZiAobV9kZXB0aCkKKyAgICAgICAg
ICAgICAgICBtX2RlcHRoLS07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KyAgICAvLyBGSVhNRTogRG9uJ3QgY2FsbCBzZXROZWVkc0xheW91dCBvciBkaXJ0eSBvdXIgcHJl
ZmVycmVkIHdpZHRocyBkdXJpbmcgbGF5b3V0LgorICAgIC8vIFRoaXMgaXMgbGlrZWx5IHRvIGZh
aWwgYW55d2F5IGFzIG9uZSBvZiBvdXIgYW5jZXN0b3Igd2lsbCBjYWxsIHNldE5lZWRzTGF5b3V0
KGZhbHNlKSwKKyAgICAvLyBwcmV2ZW50aW5nIHRoZSBmdXR1cmUgbGF5b3V0IHRvIG9jY3VyIG9u
IHx0aGlzfC4gVGhlIHNvbHV0aW9uIGlzIHRvIG1vdmUgdGhhdCB0byBhCisgICAgLy8gcHJlLWxh
eW91dCBwaGFzZS4KKyAgICBpZiAob2xkRGVwdGggIT0gbV9kZXB0aCkKICAgICAgICAgc2V0TmVl
ZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgUmVuZGVyVGV4dDo6c3R5bGVEaWRD
aGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oCmluZGV4IGI2ZjNjNTU5OTI4YjVlZjQwNDlh
OTM3OTQzNTIxNzBjMTZhYzIzOGYuLjY5NjAxMWZlNDkzZDJjNzYwYTViNWZlMWE5NTBmMjgxYjgw
YWRhMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oCkBAIC0yMSw2ICsy
MSw5IEBACiAjaWZuZGVmIFJlbmRlclF1b3RlX2gKICNkZWZpbmUgUmVuZGVyUXVvdGVfaAogCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJRdW90ZXNEYXRhLmgiCisjaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIKIApAQCAtMzAsMjQgKzMzLDI0IEBAIGNsYXNzIFJlbmRlclF1b3Rl
IDogcHVibGljIFJlbmRlclRleHQgewogcHVibGljOgogICAgIFJlbmRlclF1b3RlKERvY3VtZW50
KiwgY29uc3QgUXVvdGVUeXBlKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJRdW90ZSgpOworICAgIHZv
aWQgYXR0YWNoUXVvdGUoKTsKKyAgICB2b2lkIGRldGFjaFF1b3RlKCk7CiAKLSAgICBzdGF0aWMg
dm9pZCByZW5kZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqKTsKLSAgICBzdGF0aWMg
dm9pZCByZW5kZXJlclJlbW92ZWRGcm9tVHJlZShSZW5kZXJPYmplY3QqKTsKLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQo
KTsKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGlzUXVvdGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9OwotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFRleHQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdp
ZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
IlJlbmRlclF1b3RlIjsgfTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNRdW90ZSgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIHRydWU7IH07CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IG9yaWdpbmFsVGV4dCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgpIE9WRVJSSURFOworCiAgICAg
Y29uc3QgUXVvdGVzRGF0YSogcXVvdGVzRGF0YSgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlRGVw
dGgoKTsKIAogICAgIFF1b3RlVHlwZSBtX3R5cGU7CiAgICAgaW50IG1fZGVwdGg7CiAgICAgUmVu
ZGVyUXVvdGUqIG1fbmV4dDsKICAgICBSZW5kZXJRdW90ZSogbV9wcmV2aW91czsKLSAgICB2b2lk
IHBsYWNlUXVvdGUoKTsKKyAgICBib29sIG1fYXR0YWNoZWQ7CiB9OwogCiBpbmxpbmUgUmVuZGVy
UXVvdGUqIHRvUmVuZGVyUXVvdGUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggOGJkNDljY2ZhZTFhZGRjOWY2Y2U2NWEyYzli
ZmQ5Mjk1NzM3NTE5Zi4uNzViNDcyNTY4NTE1Yzg5M2JhYjE0NmFmNDZhNzQ1OTIzYmVlYTYzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtNjIsNyArNjIsNyBA
QCBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZyYW1lVmlldyogdmlldykKICAg
ICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKGZhbHNlKQogICAgICwgbV9sYXlvdXRTdGF0
ZSgwKQogICAgICwgbV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudCgwKQotICAgICwgbV9yZW5kZXJR
dW90ZUNvdW50KDApCisgICAgLCBtX3JlbmRlclF1b3RlSGVhZCgwKQogICAgICwgbV9yZW5kZXJD
b3VudGVyQ291bnQoMCkKIHsKICAgICAvLyBDbGVhciBvdXIgYW5vbnltb3VzIGJpdCwgc2V0IGJl
Y2F1c2UgUmVuZGVyT2JqZWN0IGFzc3VtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5oCmluZGV4IDA0YTgwNmU5YmNhNTkxZTE1YTY1N2ExMjgxYTJlMDFiZGVkZmJkMDguLjAwZWE1
MzdlNGRlZmVkMjNkNzA0OWRjNzg1OThiOGQ0NjFkYzJjNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuaApAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZsb3dUaHJlYWRDb250cm9sbGVyOwogY2xhc3MgUmVuZGVyV2lkZ2V0OworY2xhc3Mg
UmVuZGVyUXVvdGU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBjbGFzcyBS
ZW5kZXJMYXllckNvbXBvc2l0b3I7CkBAIC0xOTQsMTMgKzE5NSwxMyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHNldEZpeGVkUG9zaXRpb25lZE9iamVjdHNOZWVkTGF5b3V0KCk7CiAKLSAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHdvcmsgYXJvdW5kIGJlY2F1c2UgdGhlIGN1cnJlbnQgaW1wbGVtZW50
YXRpb24gb2YgY291bnRlcnMgYW5kIHF1b3RlcworICAgIHZvaWQgc2V0UmVuZGVyUXVvdGVIZWFk
KFJlbmRlclF1b3RlKiBoZWFkKSB7IG1fcmVuZGVyUXVvdGVIZWFkID0gaGVhZDsgfQorICAgIFJl
bmRlclF1b3RlKiByZW5kZXJRdW90ZUhlYWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclF1b3Rl
SGVhZDsgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrIGFyb3VuZCBiZWNhdXNlIHRo
ZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGNvdW50ZXJzCiAgICAgLy8gcmVxdWlyZXMgd2Fs
a2luZyB0aGUgZW50aXJlIHRyZWUgcmVwZWF0ZWRseSBhbmQgbW9zdCBwYWdlcyBkb24ndCBhY3R1
YWxseSB1c2UgZWl0aGVyCiAgICAgLy8gZmVhdHVyZSBzbyB3ZSBzaG91bGRuJ3QgdGFrZSB0aGUg
cGVyZm9ybWFuY2UgaGl0IHdoZW4gbm90IG5lZWRlZC4gTG9uZyB0ZXJtIHdlIHNob3VsZAogICAg
IC8vIHJld3JpdGUgdGhlIGNvdW50ZXIgYW5kIHF1b3RlcyBjb2RlLgotICAgIHZvaWQgYWRkUmVu
ZGVyUXVvdGUoKSB7IG1fcmVuZGVyUXVvdGVDb3VudCsrOyB9Ci0gICAgdm9pZCByZW1vdmVSZW5k
ZXJRdW90ZSgpIHsgQVNTRVJUKG1fcmVuZGVyUXVvdGVDb3VudCA+IDApOyBtX3JlbmRlclF1b3Rl
Q291bnQtLTsgfQotICAgIGJvb2wgaGFzUmVuZGVyUXVvdGVzKCkgeyByZXR1cm4gbV9yZW5kZXJR
dW90ZUNvdW50OyB9CiAgICAgdm9pZCBhZGRSZW5kZXJDb3VudGVyKCkgeyBtX3JlbmRlckNvdW50
ZXJDb3VudCsrOyB9CiAgICAgdm9pZCByZW1vdmVSZW5kZXJDb3VudGVyKCkgeyBBU1NFUlQobV9y
ZW5kZXJDb3VudGVyQ291bnQgPiAwKTsgbV9yZW5kZXJDb3VudGVyQ291bnQtLTsgfQogICAgIGJv
b2wgaGFzUmVuZGVyQ291bnRlcnMoKSB7IHJldHVybiBtX3JlbmRlckNvdW50ZXJDb3VudDsgfQpA
QCAtMzAxLDcgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEZsb3dUaHJlYWRDb250cm9s
bGVyPiBtX2Zsb3dUaHJlYWRDb250cm9sbGVyOwogICAgIFJlZlB0cjxJbnRlcnZhbEFyZW5hPiBt
X2ludGVydmFsQXJlbmE7CiAKLSAgICB1bnNpZ25lZCBtX3JlbmRlclF1b3RlQ291bnQ7CisgICAg
UmVuZGVyUXVvdGUqIG1fcmVuZGVyUXVvdGVIZWFkOwogICAgIHVuc2lnbmVkIG1fcmVuZGVyQ291
bnRlckNvdW50OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAKaW5kZXggNmZmZWE0Y2JmYzUxOWIyY2VmMjNiYjNjOTRiZTI3MmFlODdkNzc5
ZC4uOGVkMDgwNGZhNDE3NzgwZGU1MTZjMzY2NWU4N2E5ZTg0N2RkNGRlYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC01ODAsNiArNTgw
LDkgQEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRlclN0eWxlOjpkaWZmKGNvbnN0IFJlbmRlclN0eWxl
KiBvdGhlciwgdW5zaWduZWQmIGNoYW5nZWRDb24KICAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVy
ZW5jZUxheW91dDsKICAgICB9CiAKKyAgICBpZiAoIVF1b3Rlc0RhdGE6OmVxdWFscyhyYXJlSW5o
ZXJpdGVkRGF0YS0+cXVvdGVzLmdldCgpLCBvdGhlci0+cmFyZUluaGVyaXRlZERhdGEtPnF1b3Rl
cy5nZXQoKSkpCisgICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7CisKICNpZiBF
TkFCTEUoU1ZHKQogICAgIC8vIFNWR1JlbmRlclN0eWxlOjpkaWZmKCkgbWlnaHQgaGF2ZSByZXR1
cm5lZCBTdHlsZURpZmZlcmVuY2VSZXBhaW50LCBlZy4gaWYgZmlsbCBjaGFuZ2VzLgogICAgIC8v
IElmIGVnLiB0aGUgZm9udC1zaXplIGNoYW5nZWQgYXQgdGhlIHNhbWUgdGltZSwgd2UncmUgbm90
IGFsbG93ZWQgdG8gcmV0dXJuIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157358</attachid>
            <date>2012-08-08 18:19:36 -0700</date>
            <delta_ts>2012-08-09 11:24:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93056-20120808181910.patch</filename>
            <type>text/plain</type>
            <size>21187</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNiMTk0ZTE1MTBlYTQ4
ODJlN2NkNTUyOWI5YjhiYmRiN2VjMWM0ZC4uYWVhNzQ2M2YyNTc2ZTFjMDNjMjdlMGRiOWJhNDYx
ZjAzMmU1ODA1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTA4LTAyICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIFJlaW1wbGVtZW50IFJl
bmRlclF1b3RlIHBsYWNlbWVudCBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgR3JlYXRseSBzaW1wbGlmeSB0aGUgY29kZSB0aGF0IG1haW50
YWlucyB0aGUgbGlua2VkIGxpc3Qgb2YgUmVuZGVyUXVvdGVzLiBOb3cgUmVuZGVyUXVvdGUKKyAg
ICAgICAgaXMgcGxhY2VkIGludG8gdGhlIGxpbmtlZCBsaXN0IGluIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzIG9uIGZpcnN0IGFjY2VzcyBhbmQgaXMKKyAgICAgICAgZGV0YWNoZWQgd2hl
biBkZXN0cm95ZWQgKG9yIGV4cGxpY2l0bHkgcmVtb3ZlZCkuCisKKyAgICAgICAgVGhlIG5ldyBh
bGdvcml0aG0gZG9lc24ndCByZXF1aXJlIHdhbGtpbmcgdXAgdGhlIHRyZWUgb2YgcmVuZGVyZXJz
IHdoZW4gdGhlcmUgYXJlIG5vCisgICAgICAgIFJlbmRlclF1b3RlcyBpbiB0aGUgdHJlZSB5ZXQs
IGFuZCBhbHNvIHJlbW92ZXMgdGhlIG5lZWQgdG8gd2FsayBvdmVyIGV2ZXJ5IHN1YnRyZWUKKyAg
ICAgICAgd2hlbiBpbnNlcnRpbmcgaW4gcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnkgYmVo
YXZpb3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2Rl
KTogQ2FsbCBkZXRhY2hRdW90ZSB3aGVuIHJlbW92aW5nIGZyb20gYSBjaGlsZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJRdW90ZTo6UmVuZGVyUXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVv
dGU6On5SZW5kZXJRdW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6d2lsbEJl
RGVzdHJveWVkKTogQ2FsbCBkZXRhY2hRdW90ZSB0byBlbnN1cmUgYWxsIGRlc3Ryb3llZCBxdW90
ZXMgYXJlIGRldGFjaGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFs
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOiBBdHRhY2ggcXVvdGUgYmVmb3JlIGNvbXB1dGluZyB0aGUgd2lkdGguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjphdHRhY2hR
dW90ZSk6IFB1dHMgdGhlIFJlbmRlclF1b3RlIGluIHRoZSBsaW5rZWQgbGlzdCBvZiBxdW90ZXMg
YW5kIGNvbXB1dGVzIHRoZSBkZXB0aC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjpk
ZXRhY2hRdW90ZSk6IFJlbW92ZXMgdGhlIHF1b3RlIGZyb20gdGhlIGxpbmtlZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6OnVwZGF0ZURlcHRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyUXVvdGUuaDoKKyAgICAgICAgKFJlbmRlclF1b3RlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3R5bGU6OmRpZmYpOiBSZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0IGlmIHF1b3RlcyBjaGFu
Z2UgYW5kIHJlbW92ZSBjaGVjayBpbiBzdHlsZURpZENoYW5nZSBpbiBSZW5kZXJRdW90ZS4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3OjpSZW5kZXJWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRSZW5k
ZXJRdW90ZUhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVuZGVyUXVvdGVI
ZWFkKTogU3RvcmVzIHRoZSBmaXJzdCBxdW90ZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIChS
ZW5kZXJWaWV3KToKKwogMjAxMi0wOC0wMiAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0
Lm9yZz4KIAogICAgICAgICBTbGlkZXIgc2hvdWxkIHNuYXAgdG8gZGF0YWxpc3QgdGljayBtYXJr
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxk
TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
LmNwcAppbmRleCBkYTk4MDg4ZTIxNTYzNTY3Mjk0YzY2YzEzNzM5OTQ1YTkzNDViODc2Li4zMTU4
ZmJmYjY5OWRkY2JmYWMwZmYyOTIyYjNjMzgyOGU3MTlmZmFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcApAQCAtMTE3LDYgKzEx
Nyw5IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5v
ZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgICAgIGlmIChvbGRDaGlsZC0+aXNS
ZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG9sZENoaWxkKS0+ZGV0
YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgaWYgKG9sZENoaWxkLT5pc1F1b3RlKCkpCisgICAgICAg
ICAgICB0b1JlbmRlclF1b3RlKG9sZENoaWxkKS0+ZGV0YWNoUXVvdGUoKTsKKwogICAgICAgICBp
ZiAob2xkQ2hpbGQtPmluUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgICAgICBpZiAob2xk
Q2hpbGQtPmlzQm94KCkpCiAgICAgICAgICAgICAgICAgb2xkQ2hpbGQtPmVuY2xvc2luZ1JlbmRl
ckZsb3dUaHJlYWQoKS0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyh0b1JlbmRlckJveChvbGRD
aGlsZCkpOwpAQCAtMTU4LDcgKzE2MSw2IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAg
Ly8gYnkgc2tpcHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVzdHJveWluZyB0aGUgZW50aXJlIHRyZWUu
CiAgICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJl
bmRlckNvdW50ZXI6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKLSAgICAgICAg
UmVuZGVyUXVvdGU6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKICAgICB9CiAK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKQEAgLTIxMCwx
MyArMjEyLDE2IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUo
UmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuCiAgICAgICAgIGlmIChuZXdDaGls
ZC0+aXNSZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG5ld0NoaWxk
KS0+YXR0YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgLy8gWW91IGNhbid0IGF0dGFjaFF1b3RlKCkg
b3RoZXJ3aXNlIHRoZSBxdW90ZSB3b3VsZCBiZSBhdHRhY2hlZCB0b28gZWFybHkKKyAgICAgICAg
Ly8gYW5kIGdldCB0aGUgd3JvbmcgZGVwdGggc2luY2UgZ2VuZXJhdGVkIGNvbnRlbnQgaXMgaW5z
ZXJ0ZWQgaW50byBhbm9ueW1vdXMKKyAgICAgICAgLy8gcmVuZGVyZXJzIGJlZm9yZSBnb2luZyBp
bnRvIHRoZSBtYWluIHJlbmRlciB0cmVlLgorCiAgICAgICAgIGlmIChSZW5kZXJOYW1lZEZsb3dU
aHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJOYW1lZEZsb3dUaHJlYWRDb250YWlu
ZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxvd1RocmVhZC0+YWRkRmxvd0NoaWxk
KG5ld0NoaWxkKTsKICAgICB9CiAKICAgICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJv
eWVkKCkpIHsKICAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQo
bmV3Q2hpbGQpOwotICAgICAgICBSZW5kZXJRdW90ZTo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQo
bmV3Q2hpbGQpOwogICAgIH0KICAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7IC8vIEdvZXMgdXAgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGllcmFyY2h5Lgog
ICAgIGlmICghb3duZXItPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKQEAgLTI3OSwxMyArMjg0
LDE1IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBjCiAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5k
ZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKGNoaWxkKS0+YXR0YWNoUmVn
aW9uKCk7CiAKKyAgICAgICAgLy8gQ2FsbGluZyBhdHRhY2hRdW90ZSgpIGhlcmUgd291bGQgYmUg
dG9vIGVhcmx5IChiZWZvcmUgYW5vbnltb3VzIHJlbmRlcmVycyBhcmUgaW5zZXJ0ZWQpCisgICAg
ICAgIC8vIHNlZSBhcHBlbmRDaGlsZCgpIGZvciBtb3JlIGV4cGxhbmF0aW9uLgorCiAgICAgICAg
IGlmIChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJO
YW1lZEZsb3dUaHJlYWRDb250YWluZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxv
d1RocmVhZC0+YWRkRmxvd0NoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgfQogCiAgICAg
aWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJlbmRlckNv
dW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKLSAgICAgICAgUmVuZGVyUXVv
dGU6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKICAgICB9CiAgICAgY2hpbGQtPnNl
dE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIGlmICghb3duZXItPm5vcm1h
bENoaWxkTmVlZHNMYXlvdXQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJRdW90ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUu
Y3BwCmluZGV4IDdmMWQ3NDliMTJlZmI3OGZjYTY3MDY0MGFkM2JkNTM0MzVmOTZmYjIuLmQ4ZjAy
NTFiMGIzOGI2ZmQ0YmQyZTUyMzFhN2ExODA5N2RiMDU5ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclF1b3RlLmNwcApAQCAtMjEsMTE5ICsyMSwzNCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCi0jZGVmaW5lIFVOS05PV05fREVQVEgg
LTEKKyNkZWZpbmUgVSh4KSAoKGNvbnN0IFVDaGFyKilMIyN4KQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0RGVwdGgoaW50ICZkZXB0aCwgUXVvdGVUeXBl
IHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBPUEVOX1FVT1RFOgotICAg
IGNhc2UgTk9fT1BFTl9RVU9URToKLSAgICAgICAgKytkZXB0aDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDTE9TRV9RVU9URToKLSAgICBjYXNlIE5PX0NMT1NFX1FVT1RFOgotICAgICAgICBp
ZiAoZGVwdGgpCi0gICAgICAgICAgICAtLWRlcHRoOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19CiAKIFJlbmRlclF1
b3RlOjpSZW5kZXJRdW90ZShEb2N1bWVudCogbm9kZSwgUXVvdGVUeXBlIHF1b3RlKQogICAgIDog
UmVuZGVyVGV4dChub2RlLCBTdHJpbmdJbXBsOjplbXB0eSgpKQogICAgICwgbV90eXBlKHF1b3Rl
KQotICAgICwgbV9kZXB0aChVTktOT1dOX0RFUFRIKQorICAgICwgbV9kZXB0aCgwKQogICAgICwg
bV9uZXh0KDApCiAgICAgLCBtX3ByZXZpb3VzKDApCisgICAgLCBtX2F0dGFjaGVkKGZhbHNlKQog
ewotICAgIHZpZXcoKS0+YWRkUmVuZGVyUXVvdGUoKTsKIH0KIAogUmVuZGVyUXVvdGU6On5SZW5k
ZXJRdW90ZSgpCiB7CisgICAgQVNTRVJUKCFtX2F0dGFjaGVkKTsKKyAgICBBU1NFUlQoIW1fbmV4
dCAmJiAhbV9wcmV2aW91cyk7CiB9CiAKIHZvaWQgUmVuZGVyUXVvdGU6OndpbGxCZURlc3Ryb3ll
ZCgpCiB7Ci0gICAgaWYgKHZpZXcoKSkKLSAgICAgICAgdmlldygpLT5yZW1vdmVSZW5kZXJRdW90
ZSgpOworICAgIGRldGFjaFF1b3RlKCk7CiAgICAgUmVuZGVyVGV4dDo6d2lsbEJlRGVzdHJveWVk
KCk7CiB9CiAKLWNvbnN0IGNoYXIqIFJlbmRlclF1b3RlOjpyZW5kZXJOYW1lKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gIlJlbmRlclF1b3RlIjsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBwbGFjZXMg
YSBsaXN0IG9mIHF1b3RlIHJlbmRlcmVycyBzdGFydGluZyBhdCAidGhpcyIgaW4gdGhlIGxpc3Qg
b2YgcXVvdGUgcmVuZGVyZXJzIGFscmVhZHkKLS8vIGluIHRoZSBkb2N1bWVudCdzIHJlbmRlcmVy
IHRyZWUuCi0vLyBUaGUgYXNzdW1wdGlvbnMgYXJlIG1hZGUgKGZvciBwZXJmb3JtYW5jZSk6Ci0v
LyAxLiBUaGUgbGlzdCBvZiBxdW90ZXMgYWxyZWFkeSBpbiB0aGUgcmVuZGVyZXJzIHRyZWUgb2Yg
dGhlIGRvY3VtZW50IGlzIGFscmVhZHkgaW4gYSBjb25zaXN0ZW50IHN0YXRlCi0vLyAoQWxsIHF1
b3RlIHJlbmRlcmVycyBhcmUgbGlua2VkIGFuZCBoYXZlIHRoZSBjb3JyZWN0IGRlcHRoIHNldCkK
LS8vIDIuIFRoZSBxdW90ZSByZW5kZXJlcnMgb2YgdGhlIGluc2VydGVkIGxpc3QgYXJlIGluIGEg
dHJlZSBvZiByZW5kZXJlcnMgb2YgdGhlaXIgb3duIHdoaWNoIGhhcyBiZWVuIGp1c3QKLS8vIGlu
c2VydGVkIGluIHRoZSBtYWluIHJlbmRlcmVyIHRyZWUgd2l0aCBpdHMgcm9vdCBhcyBjaGlsZCBv
ZiBzb21lIHJlbmRlcmVyLgotLy8gMy4gVGhlIHF1b3RlIHJlbmRlcmVycyBpbiB0aGUgaW5zZXJ0
ZWQgbGlzdCBoYXZlIGRlcHRocyBjb25zaXN0ZW50IHdpdGggdGhlaXIgcG9zaXRpb24gaW4gdGhl
IGxpc3QgcmVsYXRpdmUKLS8vIHRvICJ0aGlzIiwgdGh1cyBpZiAidGhpcyIgZG9lcyBub3QgbmVl
ZCB0byBjaGFuZ2UgaXRzIGRlcHRoIHVwb24gaW5zZXJ0aW9uLCB0aGUgb3RoZXIgcmVuZGVyZXJz
IGluIHRoZSBsaXN0IGRvbid0Ci0vLyBuZWVkIHRvIGVpdGhlci4KLXZvaWQgUmVuZGVyUXVvdGU6
OnBsYWNlUXVvdGUoKQotewotICAgIFJlbmRlclF1b3RlKiBoZWFkID0gdGhpczsKLSAgICBBU1NF
UlQoIWhlYWQtPm1fcHJldmlvdXMpOwotICAgIFJlbmRlclF1b3RlKiB0YWlsID0gMDsKLSAgICBm
b3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBoZWFkLT5wcmV2aW91c0luUHJlT3JkZXIo
KTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3ItPnByZXZpb3VzSW5QcmVP
cmRlcigpKSB7Ci0gICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVvdGUoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBoZWFkLT5tX3ByZXZpb3VzID0gdG9SZW5kZXJRdW90ZShw
cmVkZWNlc3Nvcik7Ci0gICAgICAgIGlmIChoZWFkLT5tX3ByZXZpb3VzLT5tX25leHQpIHsKLSAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3BsaWNlIHRoZSBsaXN0IG9mIHF1b3RlcyBoZWFkZWQg
YnkgaGVhZCBpbnRvIHRoZSBkb2N1bWVudCdzIGxpc3Qgb2YgcXVvdGVzLgotICAgICAgICAgICAg
dGFpbCA9IGhlYWQ7Ci0gICAgICAgICAgICB3aGlsZSAodGFpbC0+bV9uZXh0KQotICAgICAgICAg
ICAgICAgICB0YWlsID0gdGFpbC0+bV9uZXh0OwotICAgICAgICAgICAgdGFpbC0+bV9uZXh0ID0g
aGVhZC0+bV9wcmV2aW91cy0+bV9uZXh0OwotICAgICAgICAgICAgQVNTRVJUKHRhaWwtPm1fbmV4
dC0+bV9wcmV2aW91cyA9PSBoZWFkLT5tX3ByZXZpb3VzKTsKLSAgICAgICAgICAgIHRhaWwtPm1f
bmV4dC0+bV9wcmV2aW91cyA9ICB0YWlsOwotICAgICAgICAgICAgdGFpbCA9IHRhaWwtPm1fbmV4
dDsgLy8gVGhpcyBtYXJrcyB0aGUgc3BsaWNpbmcgcG9pbnQgaGVyZSB0aGVyZSBtYXkgYmUgYSBk
ZXB0aCBkaXNjb250aW51aXR5Ci0gICAgICAgIH0KLSAgICAgICAgaGVhZC0+bV9wcmV2aW91cy0+
bV9uZXh0ID0gaGVhZDsKLSAgICAgICAgQVNTRVJUKGhlYWQtPm1fcHJldmlvdXMtPm1fZGVwdGgg
IT0gVU5LTk9XTl9ERVBUSCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpbnQgbmV3RGVw
dGg7Ci0gICAgaWYgKCFoZWFkLT5tX3ByZXZpb3VzKSB7Ci0gICAgICAgIG5ld0RlcHRoID0gMDsK
LSAgICAgICAgZ290byBza2lwTmV3RGVwdGhDYWxjOwotICAgIH0KLSAgICBuZXdEZXB0aCA9IGhl
YWQtPm1fcHJldmlvdXMtPm1fZGVwdGg7Ci0gICAgZG8gewotICAgICAgICBhZGp1c3REZXB0aChu
ZXdEZXB0aCwgaGVhZC0+bV9wcmV2aW91cy0+bV90eXBlKTsKLXNraXBOZXdEZXB0aENhbGM6Ci0g
ICAgICAgIGlmIChoZWFkLT5tX2RlcHRoID09IG5ld0RlcHRoKSB7IC8vIEFsbCByZW1haW5pbmcg
ZGVwdGggc2hvdWxkIGJlIGNvcnJlY3QgZXhjZXB0IGlmIHNwbGljaW5nIHdhcyBkb25lLgotICAg
ICAgICAgICAgaWYgKCF0YWlsKSAvLyBXZSd2ZSBkb25lIHRoZSBwb3N0IHNwbGljaW5nIHNlY3Rp
b24gYWxyZWFkeSBvciB0aGVyZSB3YXMgbm8gc3BsaWNpbmcuCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBoZWFkID0gdGFpbDsgLy8gQ29udGludWUgYWZ0ZXIgdGhlIHNwbGlj
aW5nIHBvaW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgc3Bs
aWNpbmcgcG9pbnQgZGlzY29udGludWl0eSBmaXhlZC4KLSAgICAgICAgICAgIG5ld0RlcHRoID0g
aGVhZC0+bV9wcmV2aW91cy0+bV9kZXB0aDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGhlYWQtPm1fZGVwdGggPSBuZXdEZXB0aDsKLSAgICAgICAgLy8gRklYTUU6
IElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBkb2Vz
IG5vdCBjaGFuZ2Ugd2UgbWF5IG9ubHkgbmVlZCB0bwotICAgICAgICAvLyBJbnZhbGlkYXRlIHRo
ZSByZW5kZXJlcidzIGFyZWEgbm90IGEgcmVsYXlvdXQuCi0gICAgICAgIGhlYWQtPnNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICBoZWFkID0gaGVhZC0+bV9uZXh0
OwotICAgICAgICBpZiAoaGVhZCA9PSB0YWlsKSAvLyBXZSBhcmUgYXQgdGhlIHNwbGljaW5nIHBv
aW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgZGVwdGggZGlz
Y29udGludWl0eSBmaXhlZC4KLSAgICB9IHdoaWxlIChoZWFkKTsKLX0KLQotI2RlZmluZSBVKHgp
ICgoY29uc3QgVUNoYXIqKUwjI3gpCi0KIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIGNv
bnN0IFF1b3Rlc0RhdGEqLCBDYXNlRm9sZGluZ0hhc2g+IFF1b3Rlc01hcDsKIAogc3RhdGljIGNv
bnN0IFF1b3Rlc01hcCYgcXVvdGVzRGF0YUxhbmd1YWdlTWFwKCkKQEAgLTE1NywyNyArNzIsMjQg
QEAgc3RhdGljIGNvbnN0IFF1b3Rlc0RhdGEqIGJhc2ljUXVvdGVzRGF0YSgpCiAKIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFwYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKG1fZGVwdGggIT0g
VU5LTk9XTl9ERVBUSCk7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzID0gcXVvdGVzRGF0
YSgpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgogICAg
IGNhc2UgTk9fQ0xPU0VfUVVPVEU6CiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OwogICAgIGNhc2UgQ0xPU0VfUVVPVEU6CiAgICAgICAgIC8vIEZJWE1FOiBXaGVuIG1fZGVwdGgg
aXMgMCB3ZSBzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZy4KLSAgICAgICAgcmV0dXJuIHF1b3Rl
cy0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0gMSwgMCkpLmltcGwoKTsKKyAgICAg
ICAgcmV0dXJuIHF1b3Rlc0RhdGEoKS0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0g
MSwgMCkpLmltcGwoKTsKICAgICBjYXNlIE9QRU5fUVVPVEU6Ci0gICAgICAgIHJldHVybiBxdW90
ZXMtPmdldE9wZW5RdW90ZShtX2RlcHRoKS5pbXBsKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OworICAgICAgICByZXR1cm4gcXVvdGVzRGF0YSgpLT5nZXRPcGVuUXVvdGUobV9kZXB0aCkuaW1w
bCgpOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5n
SW1wbDo6ZW1wdHkoKTsKIH0KIAogdm9pZCBSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoZmxvYXQgbGVhZCkKIHsKKyAgICBpZiAoIW1fYXR0YWNoZWQpCisgICAgICAg
IGF0dGFjaFF1b3RlKCk7CiAgICAgc2V0VGV4dEludGVybmFsKG9yaWdpbmFsVGV4dCgpKTsKICAg
ICBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhsZWFkKTsKIH0KQEAg
LTE5Niw1OCArMTA4LDk5IEBAIGNvbnN0IFF1b3Rlc0RhdGEqIFJlbmRlclF1b3RlOjpxdW90ZXNE
YXRhKCkgY29uc3QKICAgICByZXR1cm4gcXVvdGVzOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpy
ZW5kZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBSZW5k
ZXJRdW90ZTo6YXR0YWNoUXVvdGUoKQogewotICAgIEFTU0VSVChyZW5kZXJlci0+dmlldygpKTsK
LSAgICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhhc1JlbmRlclF1b3RlcygpKQorICAgIEFTU0VS
VCh2aWV3KCkpOworICAgIEFTU0VSVCghbV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX25leHQg
JiYgIW1fcHJldmlvdXMpOworCisgICAgLy8gRklYTUU6IERvbid0IHNldCBwcmVmIHdpZHRocyBk
aXJ0eSBkdXJpbmcgbGF5b3V0LiBTZWUgdXBkYXRlRGVwdGgoKSBmb3IKKyAgICAvLyBtb3JlIGRl
dGFpbC4KKyAgICBpZiAoIWlzUm9vdGVkKCkpIHsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKFJlbmRlck9iamVj
dCogZGVzY2VuZGFudCA9IHJlbmRlcmVyOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2Vu
ZGFudC0+bmV4dEluUHJlT3JkZXIocmVuZGVyZXIpKQotICAgICAgICBpZiAoZGVzY2VuZGFudC0+
aXNRdW90ZSgpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpLT5wbGFj
ZVF1b3RlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghdmlldygpLT5yZW5kZXJRdW90ZUhlYWQoKSkgeworICAgICAgICB2aWV3KCktPnNldFJlbmRl
clF1b3RlSGVhZCh0aGlzKTsKKyAgICAgICAgbV9hdHRhY2hlZCA9IHRydWU7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBwcmV2
aW91c0luUHJlT3JkZXIoKTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3It
PnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CisgICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVv
dGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX3ByZXZpb3VzID0gdG9SZW5k
ZXJRdW90ZShwcmVkZWNlc3Nvcik7CisgICAgICAgIG1fbmV4dCA9IG1fcHJldmlvdXMtPm1fbmV4
dDsKKyAgICAgICAgbV9wcmV2aW91cy0+bV9uZXh0ID0gdGhpczsKKyAgICAgICAgaWYgKG1fbmV4
dCkKKyAgICAgICAgICAgIG1fbmV4dC0+bV9wcmV2aW91cyA9IHRoaXM7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGlmICghbV9wcmV2aW91cykgeworICAgICAgICBtX25leHQgPSB2aWV3
KCktPnJlbmRlclF1b3RlSGVhZCgpOworICAgICAgICB2aWV3KCktPnNldFJlbmRlclF1b3RlSGVh
ZCh0aGlzKTsKKyAgICB9CisgICAgbV9hdHRhY2hlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcHJl
dmlvdXMgfHwgbV9wcmV2aW91cy0+bV9hdHRhY2hlZCkgeworICAgICAgICBmb3IgKFJlbmRlclF1
b3RlKiBxdW90ZSA9IHRoaXM7IHF1b3RlOyBxdW90ZSA9IHF1b3RlLT5tX25leHQpCisgICAgICAg
ICAgICBxdW90ZS0+dXBkYXRlRGVwdGgoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9wcmV2aW91
cy0+YXR0YWNoUXVvdGUoKTsKKworICAgIEFTU0VSVCghbV9uZXh0IHx8IG1fbmV4dC0+bV9hdHRh
Y2hlZCk7CisgICAgQVNTRVJUKCFtX3ByZXZpb3VzIHx8IG1fcHJldmlvdXMtPm1fYXR0YWNoZWQp
OwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpyZW5kZXJlclJlbW92ZWRGcm9tVHJlZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQordm9pZCBSZW5kZXJRdW90ZTo6ZGV0YWNoUXVvdGUoKQogewotICAg
IEFTU0VSVChyZW5kZXJlci0+dmlldygpKTsKLSAgICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhh
c1JlbmRlclF1b3RlcygpKQorICAgIEFTU0VSVCghbV9uZXh0IHx8IG1fbmV4dC0+bV9hdHRhY2hl
ZCk7CisgICAgQVNTRVJUKCFtX3ByZXZpb3VzIHx8IG1fcHJldmlvdXMtPm1fYXR0YWNoZWQpOwor
ICAgIGlmICghbV9hdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBkZXNjZW5kYW50ID0gcmVuZGVyZXI7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNj
ZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikpCi0gICAgICAgIGlmIChkZXNjZW5kYW50
LT5pc1F1b3RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclF1b3RlKiByZW1vdmVkUXVvdGUgPSB0
b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgUmVuZGVyUXVvdGUqIGxhc3RR
dW90ZUJlZm9yZSA9IHJlbW92ZWRRdW90ZS0+bV9wcmV2aW91czsKLSAgICAgICAgICAgIHJlbW92
ZWRRdW90ZS0+bV9wcmV2aW91cyA9IDA7Ci0gICAgICAgICAgICBpbnQgZGVwdGggPSByZW1vdmVk
UXVvdGUtPm1fZGVwdGg7Ci0gICAgICAgICAgICBmb3IgKGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50
LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcik7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNj
ZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikpCi0gICAgICAgICAgICAgICAgaWYgKGRl
c2NlbmRhbnQtPmlzUXVvdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZFF1b3RlID0g
dG9SZW5kZXJRdW90ZShkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIFJlbmRlclF1b3RlKiBxdW90
ZUFmdGVyID0gcmVtb3ZlZFF1b3RlLT5tX25leHQ7Ci0gICAgICAgICAgICByZW1vdmVkUXVvdGUt
Pm1fbmV4dCA9IDA7Ci0gICAgICAgICAgICBpZiAobGFzdFF1b3RlQmVmb3JlKQotICAgICAgICAg
ICAgICAgIGxhc3RRdW90ZUJlZm9yZS0+bV9uZXh0ID0gcXVvdGVBZnRlcjsKLSAgICAgICAgICAg
IGlmIChxdW90ZUFmdGVyKSB7Ci0gICAgICAgICAgICAgICAgcXVvdGVBZnRlci0+bV9wcmV2aW91
cyA9IGxhc3RRdW90ZUJlZm9yZTsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChkZXB0aCA9PSBxdW90ZUFmdGVyLT5tX2RlcHRoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHF1b3RlQWZ0ZXItPm1fZGVwdGgg
PSBkZXB0aDsKLSAgICAgICAgICAgICAgICAgICAgcXVvdGVBZnRlci0+c2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkanVzdERlcHRoKGRl
cHRoLCBxdW90ZUFmdGVyLT5tX3R5cGUpOwotICAgICAgICAgICAgICAgICAgICBxdW90ZUFmdGVy
ID0gcXVvdGVBZnRlci0+bV9uZXh0OwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKHF1b3RlQWZ0
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBp
ZiAobV9wcmV2aW91cykKKyAgICAgICAgbV9wcmV2aW91cy0+bV9uZXh0ID0gbV9uZXh0OworICAg
IGVsc2UgaWYgKHZpZXcoKSkKKyAgICAgICAgdmlldygpLT5zZXRSZW5kZXJRdW90ZUhlYWQobV9u
ZXh0KTsKKyAgICBpZiAobV9uZXh0KQorICAgICAgICBtX25leHQtPm1fcHJldmlvdXMgPSBtX3By
ZXZpb3VzOworICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CisgICAgICAgIGZv
ciAoUmVuZGVyUXVvdGUqIHF1b3RlID0gbV9uZXh0OyBxdW90ZTsgcXVvdGUgPSBxdW90ZS0+bV9u
ZXh0KQorICAgICAgICAgICAgcXVvdGUtPnVwZGF0ZURlcHRoKCk7CisgICAgfQorICAgIG1fYXR0
YWNoZWQgPSBmYWxzZTsKKyAgICBtX25leHQgPSAwOworICAgIG1fcHJldmlvdXMgPSAwOworICAg
IG1fZGVwdGggPSAwOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQordm9pZCBSZW5k
ZXJRdW90ZTo6dXBkYXRlRGVwdGgoKQogewotICAgIGNvbnN0IFF1b3Rlc0RhdGEqIG5ld1F1b3Rl
cyA9IHN0eWxlKCktPnF1b3RlcygpOwotICAgIGNvbnN0IFF1b3Rlc0RhdGEqIG9sZFF1b3RlcyA9
IG9sZFN0eWxlID8gb2xkU3R5bGUtPnF1b3RlcygpIDogMDsKLSAgICBpZiAoIVF1b3Rlc0RhdGE6
OmVxdWFscyhuZXdRdW90ZXMsIG9sZFF1b3RlcykpCisgICAgQVNTRVJUKG1fYXR0YWNoZWQpOwor
ICAgIGludCBvbGREZXB0aCA9IG1fZGVwdGg7CisgICAgbV9kZXB0aCA9IDA7CisgICAgaWYgKG1f
cHJldmlvdXMpIHsKKyAgICAgICAgbV9kZXB0aCA9IG1fcHJldmlvdXMtPm1fZGVwdGg7CisgICAg
ICAgIHN3aXRjaCAobV9wcmV2aW91cy0+bV90eXBlKSB7CisgICAgICAgIGNhc2UgT1BFTl9RVU9U
RToKKyAgICAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgorICAgICAgICAgICAgbV9kZXB0aCsrOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0xPU0VfUVVPVEU6CisgICAgICAgIGNh
c2UgTk9fQ0xPU0VfUVVPVEU6CisgICAgICAgICAgICBpZiAobV9kZXB0aCkKKyAgICAgICAgICAg
ICAgICBtX2RlcHRoLS07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAvLyBGSVhNRTogRG9uJ3QgY2FsbCBzZXROZWVkc0xheW91dCBvciBkaXJ0eSBvdXIgcHJlZmVy
cmVkIHdpZHRocyBkdXJpbmcgbGF5b3V0LgorICAgIC8vIFRoaXMgaXMgbGlrZWx5IHRvIGZhaWwg
YW55d2F5IGFzIG9uZSBvZiBvdXIgYW5jZXN0b3Igd2lsbCBjYWxsIHNldE5lZWRzTGF5b3V0KGZh
bHNlKSwKKyAgICAvLyBwcmV2ZW50aW5nIHRoZSBmdXR1cmUgbGF5b3V0IHRvIG9jY3VyIG9uIHx0
aGlzfC4gVGhlIHNvbHV0aW9uIGlzIHRvIG1vdmUgdGhhdCB0byBhCisgICAgLy8gcHJlLWxheW91
dCBwaGFzZS4KKyAgICBpZiAob2xkRGVwdGggIT0gbV9kZXB0aCkKICAgICAgICAgc2V0TmVlZHNM
YXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFu
Z2UoZGlmZiwgb2xkU3R5bGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oCmluZGV4IGI2ZjNjNTU5OTI4YjVlZjQwNDlhOTM3
OTQzNTIxNzBjMTZhYzIzOGYuLjY5NjAxMWZlNDkzZDJjNzYwYTViNWZlMWE5NTBmMjgxYjgwYWRh
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oCkBAIC0yMSw2ICsyMSw5
IEBACiAjaWZuZGVmIFJlbmRlclF1b3RlX2gKICNkZWZpbmUgUmVuZGVyUXVvdGVfaAogCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJRdW90ZXNEYXRhLmgiCisjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUg
IlJlbmRlclRleHQuaCIKIApAQCAtMzAsMjQgKzMzLDI0IEBAIGNsYXNzIFJlbmRlclF1b3RlIDog
cHVibGljIFJlbmRlclRleHQgewogcHVibGljOgogICAgIFJlbmRlclF1b3RlKERvY3VtZW50Kiwg
Y29uc3QgUXVvdGVUeXBlKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJRdW90ZSgpOworICAgIHZvaWQg
YXR0YWNoUXVvdGUoKTsKKyAgICB2b2lkIGRldGFjaFF1b3RlKCk7CiAKLSAgICBzdGF0aWMgdm9p
ZCByZW5kZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9p
ZCByZW5kZXJlclJlbW92ZWRGcm9tVHJlZShSZW5kZXJPYmplY3QqKTsKLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsK
IHByaXZhdGU6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGlzUXVvdGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9OwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFRleHQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gIlJl
bmRlclF1b3RlIjsgfTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNRdW90ZSgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIHRydWU7IH07CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9y
aWdpbmFsVGV4dCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgpIE9WRVJSSURFOworCiAgICAgY29u
c3QgUXVvdGVzRGF0YSogcXVvdGVzRGF0YSgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlRGVwdGgo
KTsKIAogICAgIFF1b3RlVHlwZSBtX3R5cGU7CiAgICAgaW50IG1fZGVwdGg7CiAgICAgUmVuZGVy
UXVvdGUqIG1fbmV4dDsKICAgICBSZW5kZXJRdW90ZSogbV9wcmV2aW91czsKLSAgICB2b2lkIHBs
YWNlUXVvdGUoKTsKKyAgICBib29sIG1fYXR0YWNoZWQ7CiB9OwogCiBpbmxpbmUgUmVuZGVyUXVv
dGUqIHRvUmVuZGVyUXVvdGUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggOGJkNDljY2ZhZTFhZGRjOWY2Y2U2NWEyYzliZmQ5
Mjk1NzM3NTE5Zi4uNzViNDcyNTY4NTE1Yzg5M2JhYjE0NmFmNDZhNzQ1OTIzYmVlYTYzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtNjIsNyArNjIsNyBAQCBS
ZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZyYW1lVmlldyogdmlldykKICAgICAs
IG1fcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKGZhbHNlKQogICAgICwgbV9sYXlvdXRTdGF0ZSgw
KQogICAgICwgbV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudCgwKQotICAgICwgbV9yZW5kZXJRdW90
ZUNvdW50KDApCisgICAgLCBtX3JlbmRlclF1b3RlSGVhZCgwKQogICAgICwgbV9yZW5kZXJDb3Vu
dGVyQ291bnQoMCkKIHsKICAgICAvLyBDbGVhciBvdXIgYW5vbnltb3VzIGJpdCwgc2V0IGJlY2F1
c2UgUmVuZGVyT2JqZWN0IGFzc3VtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5o
CmluZGV4IDA0YTgwNmU5YmNhNTkxZTE1YTY1N2ExMjgxYTJlMDFiZGVkZmJkMDguLjAwZWE1Mzdl
NGRlZmVkMjNkNzA0OWRjNzg1OThiOGQ0NjFkYzJjNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuaApAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZsb3dUaHJlYWRDb250cm9sbGVyOwogY2xhc3MgUmVuZGVyV2lkZ2V0OworY2xhc3MgUmVu
ZGVyUXVvdGU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBjbGFzcyBSZW5k
ZXJMYXllckNvbXBvc2l0b3I7CkBAIC0xOTQsMTMgKzE5NSwxMyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldEZpeGVkUG9zaXRpb25lZE9iamVjdHNOZWVkTGF5b3V0KCk7CiAKLSAgICAvLyBGSVhN
RTogVGhpcyBpcyBhIHdvcmsgYXJvdW5kIGJlY2F1c2UgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRp
b24gb2YgY291bnRlcnMgYW5kIHF1b3RlcworICAgIHZvaWQgc2V0UmVuZGVyUXVvdGVIZWFkKFJl
bmRlclF1b3RlKiBoZWFkKSB7IG1fcmVuZGVyUXVvdGVIZWFkID0gaGVhZDsgfQorICAgIFJlbmRl
clF1b3RlKiByZW5kZXJRdW90ZUhlYWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclF1b3RlSGVh
ZDsgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrIGFyb3VuZCBiZWNhdXNlIHRoZSBj
dXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGNvdW50ZXJzCiAgICAgLy8gcmVxdWlyZXMgd2Fsa2lu
ZyB0aGUgZW50aXJlIHRyZWUgcmVwZWF0ZWRseSBhbmQgbW9zdCBwYWdlcyBkb24ndCBhY3R1YWxs
eSB1c2UgZWl0aGVyCiAgICAgLy8gZmVhdHVyZSBzbyB3ZSBzaG91bGRuJ3QgdGFrZSB0aGUgcGVy
Zm9ybWFuY2UgaGl0IHdoZW4gbm90IG5lZWRlZC4gTG9uZyB0ZXJtIHdlIHNob3VsZAogICAgIC8v
IHJld3JpdGUgdGhlIGNvdW50ZXIgYW5kIHF1b3RlcyBjb2RlLgotICAgIHZvaWQgYWRkUmVuZGVy
UXVvdGUoKSB7IG1fcmVuZGVyUXVvdGVDb3VudCsrOyB9Ci0gICAgdm9pZCByZW1vdmVSZW5kZXJR
dW90ZSgpIHsgQVNTRVJUKG1fcmVuZGVyUXVvdGVDb3VudCA+IDApOyBtX3JlbmRlclF1b3RlQ291
bnQtLTsgfQotICAgIGJvb2wgaGFzUmVuZGVyUXVvdGVzKCkgeyByZXR1cm4gbV9yZW5kZXJRdW90
ZUNvdW50OyB9CiAgICAgdm9pZCBhZGRSZW5kZXJDb3VudGVyKCkgeyBtX3JlbmRlckNvdW50ZXJD
b3VudCsrOyB9CiAgICAgdm9pZCByZW1vdmVSZW5kZXJDb3VudGVyKCkgeyBBU1NFUlQobV9yZW5k
ZXJDb3VudGVyQ291bnQgPiAwKTsgbV9yZW5kZXJDb3VudGVyQ291bnQtLTsgfQogICAgIGJvb2wg
aGFzUmVuZGVyQ291bnRlcnMoKSB7IHJldHVybiBtX3JlbmRlckNvdW50ZXJDb3VudDsgfQpAQCAt
MzAxLDcgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEZsb3dUaHJlYWRDb250cm9sbGVy
PiBtX2Zsb3dUaHJlYWRDb250cm9sbGVyOwogICAgIFJlZlB0cjxJbnRlcnZhbEFyZW5hPiBtX2lu
dGVydmFsQXJlbmE7CiAKLSAgICB1bnNpZ25lZCBtX3JlbmRlclF1b3RlQ291bnQ7CisgICAgUmVu
ZGVyUXVvdGUqIG1fcmVuZGVyUXVvdGVIZWFkOwogICAgIHVuc2lnbmVkIG1fcmVuZGVyQ291bnRl
ckNvdW50OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHAKaW5kZXggNmZmZWE0Y2JmYzUxOWIyY2VmMjNiYjNjOTRiZTI3MmFlODdkNzc5ZC4u
OGVkMDgwNGZhNDE3NzgwZGU1MTZjMzY2NWU4N2E5ZTg0N2RkNGRlYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC01ODAsNiArNTgwLDkg
QEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRlclN0eWxlOjpkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiBv
dGhlciwgdW5zaWduZWQmIGNoYW5nZWRDb24KICAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5j
ZUxheW91dDsKICAgICB9CiAKKyAgICBpZiAoIVF1b3Rlc0RhdGE6OmVxdWFscyhyYXJlSW5oZXJp
dGVkRGF0YS0+cXVvdGVzLmdldCgpLCBvdGhlci0+cmFyZUluaGVyaXRlZERhdGEtPnF1b3Rlcy5n
ZXQoKSkpCisgICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7CisKICNpZiBFTkFC
TEUoU1ZHKQogICAgIC8vIFNWR1JlbmRlclN0eWxlOjpkaWZmKCkgbWlnaHQgaGF2ZSByZXR1cm5l
ZCBTdHlsZURpZmZlcmVuY2VSZXBhaW50LCBlZy4gaWYgZmlsbCBjaGFuZ2VzLgogICAgIC8vIElm
IGVnLiB0aGUgZm9udC1zaXplIGNoYW5nZWQgYXQgdGhlIHNhbWUgdGltZSwgd2UncmUgbm90IGFs
bG93ZWQgdG8gcmV0dXJuIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157495</attachid>
            <date>2012-08-09 11:24:43 -0700</date>
            <delta_ts>2012-08-09 13:20:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93056-20120809112416.patch</filename>
            <type>text/plain</type>
            <size>21124</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNiMTk0ZTE1MTBlYTQ4
ODJlN2NkNTUyOWI5YjhiYmRiN2VjMWM0ZC4uYWVhNzQ2M2YyNTc2ZTFjMDNjMjdlMGRiOWJhNDYx
ZjAzMmU1ODA1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTA4LTAyICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIFJlaW1wbGVtZW50IFJl
bmRlclF1b3RlIHBsYWNlbWVudCBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgR3JlYXRseSBzaW1wbGlmeSB0aGUgY29kZSB0aGF0IG1haW50
YWlucyB0aGUgbGlua2VkIGxpc3Qgb2YgUmVuZGVyUXVvdGVzLiBOb3cgUmVuZGVyUXVvdGUKKyAg
ICAgICAgaXMgcGxhY2VkIGludG8gdGhlIGxpbmtlZCBsaXN0IGluIGNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzIG9uIGZpcnN0IGFjY2VzcyBhbmQgaXMKKyAgICAgICAgZGV0YWNoZWQgd2hl
biBkZXN0cm95ZWQgKG9yIGV4cGxpY2l0bHkgcmVtb3ZlZCkuCisKKyAgICAgICAgVGhlIG5ldyBh
bGdvcml0aG0gZG9lc24ndCByZXF1aXJlIHdhbGtpbmcgdXAgdGhlIHRyZWUgb2YgcmVuZGVyZXJz
IHdoZW4gdGhlcmUgYXJlIG5vCisgICAgICAgIFJlbmRlclF1b3RlcyBpbiB0aGUgdHJlZSB5ZXQs
IGFuZCBhbHNvIHJlbW92ZXMgdGhlIG5lZWQgdG8gd2FsayBvdmVyIGV2ZXJ5IHN1YnRyZWUKKyAg
ICAgICAgd2hlbiBpbnNlcnRpbmcgaW4gcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnkgYmVo
YXZpb3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2Rl
KTogQ2FsbCBkZXRhY2hRdW90ZSB3aGVuIHJlbW92aW5nIGZyb20gYSBjaGlsZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJRdW90ZTo6UmVuZGVyUXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVv
dGU6On5SZW5kZXJRdW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6d2lsbEJl
RGVzdHJveWVkKTogQ2FsbCBkZXRhY2hRdW90ZSB0byBlbnN1cmUgYWxsIGRlc3Ryb3llZCBxdW90
ZXMgYXJlIGRldGFjaGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFs
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOiBBdHRhY2ggcXVvdGUgYmVmb3JlIGNvbXB1dGluZyB0aGUgd2lkdGguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjphdHRhY2hR
dW90ZSk6IFB1dHMgdGhlIFJlbmRlclF1b3RlIGluIHRoZSBsaW5rZWQgbGlzdCBvZiBxdW90ZXMg
YW5kIGNvbXB1dGVzIHRoZSBkZXB0aC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjpk
ZXRhY2hRdW90ZSk6IFJlbW92ZXMgdGhlIHF1b3RlIGZyb20gdGhlIGxpbmtlZCBsaXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6OnVwZGF0ZURlcHRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyUXVvdGUuaDoKKyAgICAgICAgKFJlbmRlclF1b3RlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3R5bGU6OmRpZmYpOiBSZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0IGlmIHF1b3RlcyBjaGFu
Z2UgYW5kIHJlbW92ZSBjaGVjayBpbiBzdHlsZURpZENoYW5nZSBpbiBSZW5kZXJRdW90ZS4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3OjpSZW5kZXJWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRSZW5k
ZXJRdW90ZUhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVuZGVyUXVvdGVI
ZWFkKTogU3RvcmVzIHRoZSBmaXJzdCBxdW90ZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIChS
ZW5kZXJWaWV3KToKKwogMjAxMi0wOC0wMiAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0
Lm9yZz4KIAogICAgICAgICBTbGlkZXIgc2hvdWxkIHNuYXAgdG8gZGF0YWxpc3QgdGljayBtYXJr
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxk
TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
LmNwcAppbmRleCBkYTk4MDg4ZTIxNTYzNTY3Mjk0YzY2YzEzNzM5OTQ1YTkzNDViODc2Li4zMTU4
ZmJmYjY5OWRkY2JmYWMwZmYyOTIyYjNjMzgyOGU3MTlmZmFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcApAQCAtMTE3LDYgKzEx
Nyw5IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5v
ZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgICAgIGlmIChvbGRDaGlsZC0+aXNS
ZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG9sZENoaWxkKS0+ZGV0
YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgaWYgKG9sZENoaWxkLT5pc1F1b3RlKCkpCisgICAgICAg
ICAgICB0b1JlbmRlclF1b3RlKG9sZENoaWxkKS0+ZGV0YWNoUXVvdGUoKTsKKwogICAgICAgICBp
ZiAob2xkQ2hpbGQtPmluUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgICAgICBpZiAob2xk
Q2hpbGQtPmlzQm94KCkpCiAgICAgICAgICAgICAgICAgb2xkQ2hpbGQtPmVuY2xvc2luZ1JlbmRl
ckZsb3dUaHJlYWQoKS0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyh0b1JlbmRlckJveChvbGRD
aGlsZCkpOwpAQCAtMTU4LDcgKzE2MSw2IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAg
Ly8gYnkgc2tpcHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVzdHJveWluZyB0aGUgZW50aXJlIHRyZWUu
CiAgICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJl
bmRlckNvdW50ZXI6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKLSAgICAgICAg
UmVuZGVyUXVvdGU6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKICAgICB9CiAK
ICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKQEAgLTIxMCwx
MyArMjEyLDE2IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUo
UmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuCiAgICAgICAgIGlmIChuZXdDaGls
ZC0+aXNSZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG5ld0NoaWxk
KS0+YXR0YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgLy8gWW91IGNhbid0IGF0dGFjaFF1b3RlKCkg
b3RoZXJ3aXNlIHRoZSBxdW90ZSB3b3VsZCBiZSBhdHRhY2hlZCB0b28gZWFybHkKKyAgICAgICAg
Ly8gYW5kIGdldCB0aGUgd3JvbmcgZGVwdGggc2luY2UgZ2VuZXJhdGVkIGNvbnRlbnQgaXMgaW5z
ZXJ0ZWQgaW50byBhbm9ueW1vdXMKKyAgICAgICAgLy8gcmVuZGVyZXJzIGJlZm9yZSBnb2luZyBp
bnRvIHRoZSBtYWluIHJlbmRlciB0cmVlLgorCiAgICAgICAgIGlmIChSZW5kZXJOYW1lZEZsb3dU
aHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJOYW1lZEZsb3dUaHJlYWRDb250YWlu
ZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxvd1RocmVhZC0+YWRkRmxvd0NoaWxk
KG5ld0NoaWxkKTsKICAgICB9CiAKICAgICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJv
eWVkKCkpIHsKICAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQo
bmV3Q2hpbGQpOwotICAgICAgICBSZW5kZXJRdW90ZTo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQo
bmV3Q2hpbGQpOwogICAgIH0KICAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7IC8vIEdvZXMgdXAgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGllcmFyY2h5Lgog
ICAgIGlmICghb3duZXItPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKQEAgLTI3OSwxMyArMjg0
LDE1IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBjCiAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5k
ZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKGNoaWxkKS0+YXR0YWNoUmVn
aW9uKCk7CiAKKyAgICAgICAgLy8gQ2FsbGluZyBhdHRhY2hRdW90ZSgpIGhlcmUgd291bGQgYmUg
dG9vIGVhcmx5IChiZWZvcmUgYW5vbnltb3VzIHJlbmRlcmVycyBhcmUgaW5zZXJ0ZWQpCisgICAg
ICAgIC8vIHNlZSBhcHBlbmRDaGlsZCgpIGZvciBtb3JlIGV4cGxhbmF0aW9uLgorCiAgICAgICAg
IGlmIChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJO
YW1lZEZsb3dUaHJlYWRDb250YWluZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxv
d1RocmVhZC0+YWRkRmxvd0NoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgfQogCiAgICAg
aWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJlbmRlckNv
dW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKLSAgICAgICAgUmVuZGVyUXVv
dGU6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKICAgICB9CiAgICAgY2hpbGQtPnNl
dE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIGlmICghb3duZXItPm5vcm1h
bENoaWxkTmVlZHNMYXlvdXQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJRdW90ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUu
Y3BwCmluZGV4IDdmMWQ3NDliMTJlZmI3OGZjYTY3MDY0MGFkM2JkNTM0MzVmOTZmYjIuLjU5NjYy
ZWQ5NjBiZDA2NzA2OTJmYTI3YzY1NmY5MmE5NTViNTcxZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclF1b3RlLmNwcApAQCAtMjEsMTE5ICsyMSwzNCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCi0jZGVmaW5lIFVOS05PV05fREVQVEgg
LTEKKyNkZWZpbmUgVSh4KSAoKGNvbnN0IFVDaGFyKilMIyN4KQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0RGVwdGgoaW50ICZkZXB0aCwgUXVvdGVUeXBl
IHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBPUEVOX1FVT1RFOgotICAg
IGNhc2UgTk9fT1BFTl9RVU9URToKLSAgICAgICAgKytkZXB0aDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDTE9TRV9RVU9URToKLSAgICBjYXNlIE5PX0NMT1NFX1FVT1RFOgotICAgICAgICBp
ZiAoZGVwdGgpCi0gICAgICAgICAgICAtLWRlcHRoOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19CiAKIFJlbmRlclF1
b3RlOjpSZW5kZXJRdW90ZShEb2N1bWVudCogbm9kZSwgUXVvdGVUeXBlIHF1b3RlKQogICAgIDog
UmVuZGVyVGV4dChub2RlLCBTdHJpbmdJbXBsOjplbXB0eSgpKQogICAgICwgbV90eXBlKHF1b3Rl
KQotICAgICwgbV9kZXB0aChVTktOT1dOX0RFUFRIKQorICAgICwgbV9kZXB0aCgwKQogICAgICwg
bV9uZXh0KDApCiAgICAgLCBtX3ByZXZpb3VzKDApCisgICAgLCBtX2F0dGFjaGVkKGZhbHNlKQog
ewotICAgIHZpZXcoKS0+YWRkUmVuZGVyUXVvdGUoKTsKIH0KIAogUmVuZGVyUXVvdGU6On5SZW5k
ZXJRdW90ZSgpCiB7CisgICAgQVNTRVJUKCFtX2F0dGFjaGVkKTsKKyAgICBBU1NFUlQoIW1fbmV4
dCAmJiAhbV9wcmV2aW91cyk7CiB9CiAKIHZvaWQgUmVuZGVyUXVvdGU6OndpbGxCZURlc3Ryb3ll
ZCgpCiB7Ci0gICAgaWYgKHZpZXcoKSkKLSAgICAgICAgdmlldygpLT5yZW1vdmVSZW5kZXJRdW90
ZSgpOworICAgIGRldGFjaFF1b3RlKCk7CiAgICAgUmVuZGVyVGV4dDo6d2lsbEJlRGVzdHJveWVk
KCk7CiB9CiAKLWNvbnN0IGNoYXIqIFJlbmRlclF1b3RlOjpyZW5kZXJOYW1lKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gIlJlbmRlclF1b3RlIjsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBwbGFjZXMg
YSBsaXN0IG9mIHF1b3RlIHJlbmRlcmVycyBzdGFydGluZyBhdCAidGhpcyIgaW4gdGhlIGxpc3Qg
b2YgcXVvdGUgcmVuZGVyZXJzIGFscmVhZHkKLS8vIGluIHRoZSBkb2N1bWVudCdzIHJlbmRlcmVy
IHRyZWUuCi0vLyBUaGUgYXNzdW1wdGlvbnMgYXJlIG1hZGUgKGZvciBwZXJmb3JtYW5jZSk6Ci0v
LyAxLiBUaGUgbGlzdCBvZiBxdW90ZXMgYWxyZWFkeSBpbiB0aGUgcmVuZGVyZXJzIHRyZWUgb2Yg
dGhlIGRvY3VtZW50IGlzIGFscmVhZHkgaW4gYSBjb25zaXN0ZW50IHN0YXRlCi0vLyAoQWxsIHF1
b3RlIHJlbmRlcmVycyBhcmUgbGlua2VkIGFuZCBoYXZlIHRoZSBjb3JyZWN0IGRlcHRoIHNldCkK
LS8vIDIuIFRoZSBxdW90ZSByZW5kZXJlcnMgb2YgdGhlIGluc2VydGVkIGxpc3QgYXJlIGluIGEg
dHJlZSBvZiByZW5kZXJlcnMgb2YgdGhlaXIgb3duIHdoaWNoIGhhcyBiZWVuIGp1c3QKLS8vIGlu
c2VydGVkIGluIHRoZSBtYWluIHJlbmRlcmVyIHRyZWUgd2l0aCBpdHMgcm9vdCBhcyBjaGlsZCBv
ZiBzb21lIHJlbmRlcmVyLgotLy8gMy4gVGhlIHF1b3RlIHJlbmRlcmVycyBpbiB0aGUgaW5zZXJ0
ZWQgbGlzdCBoYXZlIGRlcHRocyBjb25zaXN0ZW50IHdpdGggdGhlaXIgcG9zaXRpb24gaW4gdGhl
IGxpc3QgcmVsYXRpdmUKLS8vIHRvICJ0aGlzIiwgdGh1cyBpZiAidGhpcyIgZG9lcyBub3QgbmVl
ZCB0byBjaGFuZ2UgaXRzIGRlcHRoIHVwb24gaW5zZXJ0aW9uLCB0aGUgb3RoZXIgcmVuZGVyZXJz
IGluIHRoZSBsaXN0IGRvbid0Ci0vLyBuZWVkIHRvIGVpdGhlci4KLXZvaWQgUmVuZGVyUXVvdGU6
OnBsYWNlUXVvdGUoKQotewotICAgIFJlbmRlclF1b3RlKiBoZWFkID0gdGhpczsKLSAgICBBU1NF
UlQoIWhlYWQtPm1fcHJldmlvdXMpOwotICAgIFJlbmRlclF1b3RlKiB0YWlsID0gMDsKLSAgICBm
b3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBoZWFkLT5wcmV2aW91c0luUHJlT3JkZXIo
KTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3ItPnByZXZpb3VzSW5QcmVP
cmRlcigpKSB7Ci0gICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVvdGUoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBoZWFkLT5tX3ByZXZpb3VzID0gdG9SZW5kZXJRdW90ZShw
cmVkZWNlc3Nvcik7Ci0gICAgICAgIGlmIChoZWFkLT5tX3ByZXZpb3VzLT5tX25leHQpIHsKLSAg
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3BsaWNlIHRoZSBsaXN0IG9mIHF1b3RlcyBoZWFkZWQg
YnkgaGVhZCBpbnRvIHRoZSBkb2N1bWVudCdzIGxpc3Qgb2YgcXVvdGVzLgotICAgICAgICAgICAg
dGFpbCA9IGhlYWQ7Ci0gICAgICAgICAgICB3aGlsZSAodGFpbC0+bV9uZXh0KQotICAgICAgICAg
ICAgICAgICB0YWlsID0gdGFpbC0+bV9uZXh0OwotICAgICAgICAgICAgdGFpbC0+bV9uZXh0ID0g
aGVhZC0+bV9wcmV2aW91cy0+bV9uZXh0OwotICAgICAgICAgICAgQVNTRVJUKHRhaWwtPm1fbmV4
dC0+bV9wcmV2aW91cyA9PSBoZWFkLT5tX3ByZXZpb3VzKTsKLSAgICAgICAgICAgIHRhaWwtPm1f
bmV4dC0+bV9wcmV2aW91cyA9ICB0YWlsOwotICAgICAgICAgICAgdGFpbCA9IHRhaWwtPm1fbmV4
dDsgLy8gVGhpcyBtYXJrcyB0aGUgc3BsaWNpbmcgcG9pbnQgaGVyZSB0aGVyZSBtYXkgYmUgYSBk
ZXB0aCBkaXNjb250aW51aXR5Ci0gICAgICAgIH0KLSAgICAgICAgaGVhZC0+bV9wcmV2aW91cy0+
bV9uZXh0ID0gaGVhZDsKLSAgICAgICAgQVNTRVJUKGhlYWQtPm1fcHJldmlvdXMtPm1fZGVwdGgg
IT0gVU5LTk9XTl9ERVBUSCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpbnQgbmV3RGVw
dGg7Ci0gICAgaWYgKCFoZWFkLT5tX3ByZXZpb3VzKSB7Ci0gICAgICAgIG5ld0RlcHRoID0gMDsK
LSAgICAgICAgZ290byBza2lwTmV3RGVwdGhDYWxjOwotICAgIH0KLSAgICBuZXdEZXB0aCA9IGhl
YWQtPm1fcHJldmlvdXMtPm1fZGVwdGg7Ci0gICAgZG8gewotICAgICAgICBhZGp1c3REZXB0aChu
ZXdEZXB0aCwgaGVhZC0+bV9wcmV2aW91cy0+bV90eXBlKTsKLXNraXBOZXdEZXB0aENhbGM6Ci0g
ICAgICAgIGlmIChoZWFkLT5tX2RlcHRoID09IG5ld0RlcHRoKSB7IC8vIEFsbCByZW1haW5pbmcg
ZGVwdGggc2hvdWxkIGJlIGNvcnJlY3QgZXhjZXB0IGlmIHNwbGljaW5nIHdhcyBkb25lLgotICAg
ICAgICAgICAgaWYgKCF0YWlsKSAvLyBXZSd2ZSBkb25lIHRoZSBwb3N0IHNwbGljaW5nIHNlY3Rp
b24gYWxyZWFkeSBvciB0aGVyZSB3YXMgbm8gc3BsaWNpbmcuCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBoZWFkID0gdGFpbDsgLy8gQ29udGludWUgYWZ0ZXIgdGhlIHNwbGlj
aW5nIHBvaW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgc3Bs
aWNpbmcgcG9pbnQgZGlzY29udGludWl0eSBmaXhlZC4KLSAgICAgICAgICAgIG5ld0RlcHRoID0g
aGVhZC0+bV9wcmV2aW91cy0+bV9kZXB0aDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGhlYWQtPm1fZGVwdGggPSBuZXdEZXB0aDsKLSAgICAgICAgLy8gRklYTUU6
IElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBkb2Vz
IG5vdCBjaGFuZ2Ugd2UgbWF5IG9ubHkgbmVlZCB0bwotICAgICAgICAvLyBJbnZhbGlkYXRlIHRo
ZSByZW5kZXJlcidzIGFyZWEgbm90IGEgcmVsYXlvdXQuCi0gICAgICAgIGhlYWQtPnNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICBoZWFkID0gaGVhZC0+bV9uZXh0
OwotICAgICAgICBpZiAoaGVhZCA9PSB0YWlsKSAvLyBXZSBhcmUgYXQgdGhlIHNwbGljaW5nIHBv
aW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgZGVwdGggZGlz
Y29udGludWl0eSBmaXhlZC4KLSAgICB9IHdoaWxlIChoZWFkKTsKLX0KLQotI2RlZmluZSBVKHgp
ICgoY29uc3QgVUNoYXIqKUwjI3gpCi0KIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIGNv
bnN0IFF1b3Rlc0RhdGEqLCBDYXNlRm9sZGluZ0hhc2g+IFF1b3Rlc01hcDsKIAogc3RhdGljIGNv
bnN0IFF1b3Rlc01hcCYgcXVvdGVzRGF0YUxhbmd1YWdlTWFwKCkKQEAgLTE1NywyNyArNzIsMjQg
QEAgc3RhdGljIGNvbnN0IFF1b3Rlc0RhdGEqIGJhc2ljUXVvdGVzRGF0YSgpCiAKIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFwYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKG1fZGVwdGggIT0g
VU5LTk9XTl9ERVBUSCk7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzID0gcXVvdGVzRGF0
YSgpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgogICAg
IGNhc2UgTk9fQ0xPU0VfUVVPVEU6CiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OwogICAgIGNhc2UgQ0xPU0VfUVVPVEU6CiAgICAgICAgIC8vIEZJWE1FOiBXaGVuIG1fZGVwdGgg
aXMgMCB3ZSBzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZy4KLSAgICAgICAgcmV0dXJuIHF1b3Rl
cy0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0gMSwgMCkpLmltcGwoKTsKKyAgICAg
ICAgcmV0dXJuIHF1b3Rlc0RhdGEoKS0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0g
MSwgMCkpLmltcGwoKTsKICAgICBjYXNlIE9QRU5fUVVPVEU6Ci0gICAgICAgIHJldHVybiBxdW90
ZXMtPmdldE9wZW5RdW90ZShtX2RlcHRoKS5pbXBsKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OworICAgICAgICByZXR1cm4gcXVvdGVzRGF0YSgpLT5nZXRPcGVuUXVvdGUobV9kZXB0aCkuaW1w
bCgpOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5n
SW1wbDo6ZW1wdHkoKTsKIH0KIAogdm9pZCBSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoZmxvYXQgbGVhZCkKIHsKKyAgICBpZiAoIW1fYXR0YWNoZWQpCisgICAgICAg
IGF0dGFjaFF1b3RlKCk7CiAgICAgc2V0VGV4dEludGVybmFsKG9yaWdpbmFsVGV4dCgpKTsKICAg
ICBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhsZWFkKTsKIH0KQEAg
LTE5Niw1OCArMTA4LDk2IEBAIGNvbnN0IFF1b3Rlc0RhdGEqIFJlbmRlclF1b3RlOjpxdW90ZXNE
YXRhKCkgY29uc3QKICAgICByZXR1cm4gcXVvdGVzOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpy
ZW5kZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBSZW5k
ZXJRdW90ZTo6YXR0YWNoUXVvdGUoKQogewotICAgIEFTU0VSVChyZW5kZXJlci0+dmlldygpKTsK
LSAgICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhhc1JlbmRlclF1b3RlcygpKQorICAgIEFTU0VS
VCh2aWV3KCkpOworICAgIEFTU0VSVCghbV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX25leHQg
JiYgIW1fcHJldmlvdXMpOworCisgICAgLy8gRklYTUU6IERvbid0IHNldCBwcmVmIHdpZHRocyBk
aXJ0eSBkdXJpbmcgbGF5b3V0LiBTZWUgdXBkYXRlRGVwdGgoKSBmb3IKKyAgICAvLyBtb3JlIGRl
dGFpbC4KKyAgICBpZiAoIWlzUm9vdGVkKCkpIHsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKFJlbmRlck9iamVj
dCogZGVzY2VuZGFudCA9IHJlbmRlcmVyOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2Vu
ZGFudC0+bmV4dEluUHJlT3JkZXIocmVuZGVyZXIpKQotICAgICAgICBpZiAoZGVzY2VuZGFudC0+
aXNRdW90ZSgpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpLT5wbGFj
ZVF1b3RlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghdmlldygpLT5yZW5kZXJRdW90ZUhlYWQoKSkgeworICAgICAgICB2aWV3KCktPnNldFJlbmRl
clF1b3RlSGVhZCh0aGlzKTsKKyAgICAgICAgbV9hdHRhY2hlZCA9IHRydWU7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBwcmV2
aW91c0luUHJlT3JkZXIoKTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3It
PnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CisgICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVv
dGUoKSB8fCAhdG9SZW5kZXJRdW90ZShwcmVkZWNlc3NvciktPm1fYXR0YWNoZWQpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgbV9wcmV2aW91cyA9IHRvUmVuZGVyUXVvdGUocHJlZGVj
ZXNzb3IpOworICAgICAgICBtX25leHQgPSBtX3ByZXZpb3VzLT5tX25leHQ7CisgICAgICAgIG1f
cHJldmlvdXMtPm1fbmV4dCA9IHRoaXM7CisgICAgICAgIGlmIChtX25leHQpCisgICAgICAgICAg
ICBtX25leHQtPm1fcHJldmlvdXMgPSB0aGlzOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAoIW1fcHJldmlvdXMpIHsKKyAgICAgICAgbV9uZXh0ID0gdmlldygpLT5yZW5kZXJRdW90
ZUhlYWQoKTsKKyAgICAgICAgdmlldygpLT5zZXRSZW5kZXJRdW90ZUhlYWQodGhpcyk7CisgICAg
fQorICAgIG1fYXR0YWNoZWQgPSB0cnVlOworCisgICAgZm9yIChSZW5kZXJRdW90ZSogcXVvdGUg
PSB0aGlzOyBxdW90ZTsgcXVvdGUgPSBxdW90ZS0+bV9uZXh0KQorICAgICAgICBxdW90ZS0+dXBk
YXRlRGVwdGgoKTsKKworICAgIEFTU0VSVCghbV9uZXh0IHx8IG1fbmV4dC0+bV9hdHRhY2hlZCk7
CisgICAgQVNTRVJUKCFtX3ByZXZpb3VzIHx8IG1fcHJldmlvdXMtPm1fYXR0YWNoZWQpOwogfQog
Ci12b2lkIFJlbmRlclF1b3RlOjpyZW5kZXJlclJlbW92ZWRGcm9tVHJlZShSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQordm9pZCBSZW5kZXJRdW90ZTo6ZGV0YWNoUXVvdGUoKQogewotICAgIEFTU0VS
VChyZW5kZXJlci0+dmlldygpKTsKLSAgICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhhc1JlbmRl
clF1b3RlcygpKQorICAgIEFTU0VSVCghbV9uZXh0IHx8IG1fbmV4dC0+bV9hdHRhY2hlZCk7Cisg
ICAgQVNTRVJUKCFtX3ByZXZpb3VzIHx8IG1fcHJldmlvdXMtPm1fYXR0YWNoZWQpOworICAgIGlm
ICghbV9hdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBk
ZXNjZW5kYW50ID0gcmVuZGVyZXI7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50
LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikpCi0gICAgICAgIGlmIChkZXNjZW5kYW50LT5pc1F1
b3RlKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclF1b3RlKiByZW1vdmVkUXVvdGUgPSB0b1JlbmRl
clF1b3RlKGRlc2NlbmRhbnQpOwotICAgICAgICAgICAgUmVuZGVyUXVvdGUqIGxhc3RRdW90ZUJl
Zm9yZSA9IHJlbW92ZWRRdW90ZS0+bV9wcmV2aW91czsKLSAgICAgICAgICAgIHJlbW92ZWRRdW90
ZS0+bV9wcmV2aW91cyA9IDA7Ci0gICAgICAgICAgICBpbnQgZGVwdGggPSByZW1vdmVkUXVvdGUt
Pm1fZGVwdGg7Ci0gICAgICAgICAgICBmb3IgKGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LT5uZXh0
SW5QcmVPcmRlcihyZW5kZXJlcik7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50
LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikpCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NlbmRh
bnQtPmlzUXVvdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZFF1b3RlID0gdG9SZW5k
ZXJRdW90ZShkZXNjZW5kYW50KTsKLSAgICAgICAgICAgIFJlbmRlclF1b3RlKiBxdW90ZUFmdGVy
ID0gcmVtb3ZlZFF1b3RlLT5tX25leHQ7Ci0gICAgICAgICAgICByZW1vdmVkUXVvdGUtPm1fbmV4
dCA9IDA7Ci0gICAgICAgICAgICBpZiAobGFzdFF1b3RlQmVmb3JlKQotICAgICAgICAgICAgICAg
IGxhc3RRdW90ZUJlZm9yZS0+bV9uZXh0ID0gcXVvdGVBZnRlcjsKLSAgICAgICAgICAgIGlmIChx
dW90ZUFmdGVyKSB7Ci0gICAgICAgICAgICAgICAgcXVvdGVBZnRlci0+bV9wcmV2aW91cyA9IGxh
c3RRdW90ZUJlZm9yZTsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChkZXB0aCA9PSBxdW90ZUFmdGVyLT5tX2RlcHRoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHF1b3RlQWZ0ZXItPm1fZGVwdGggPSBkZXB0
aDsKLSAgICAgICAgICAgICAgICAgICAgcXVvdGVBZnRlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVm
V2lkdGhzUmVjYWxjKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkanVzdERlcHRoKGRlcHRoLCBx
dW90ZUFmdGVyLT5tX3R5cGUpOwotICAgICAgICAgICAgICAgICAgICBxdW90ZUFmdGVyID0gcXVv
dGVBZnRlci0+bV9uZXh0OwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKHF1b3RlQWZ0ZXIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBpZiAobV9w
cmV2aW91cykKKyAgICAgICAgbV9wcmV2aW91cy0+bV9uZXh0ID0gbV9uZXh0OworICAgIGVsc2Ug
aWYgKHZpZXcoKSkKKyAgICAgICAgdmlldygpLT5zZXRSZW5kZXJRdW90ZUhlYWQobV9uZXh0KTsK
KyAgICBpZiAobV9uZXh0KQorICAgICAgICBtX25leHQtPm1fcHJldmlvdXMgPSBtX3ByZXZpb3Vz
OworICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CisgICAgICAgIGZvciAoUmVu
ZGVyUXVvdGUqIHF1b3RlID0gbV9uZXh0OyBxdW90ZTsgcXVvdGUgPSBxdW90ZS0+bV9uZXh0KQor
ICAgICAgICAgICAgcXVvdGUtPnVwZGF0ZURlcHRoKCk7CisgICAgfQorICAgIG1fYXR0YWNoZWQg
PSBmYWxzZTsKKyAgICBtX25leHQgPSAwOworICAgIG1fcHJldmlvdXMgPSAwOworICAgIG1fZGVw
dGggPSAwOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQordm9pZCBSZW5kZXJRdW90
ZTo6dXBkYXRlRGVwdGgoKQogewotICAgIGNvbnN0IFF1b3Rlc0RhdGEqIG5ld1F1b3RlcyA9IHN0
eWxlKCktPnF1b3RlcygpOwotICAgIGNvbnN0IFF1b3Rlc0RhdGEqIG9sZFF1b3RlcyA9IG9sZFN0
eWxlID8gb2xkU3R5bGUtPnF1b3RlcygpIDogMDsKLSAgICBpZiAoIVF1b3Rlc0RhdGE6OmVxdWFs
cyhuZXdRdW90ZXMsIG9sZFF1b3RlcykpCisgICAgQVNTRVJUKG1fYXR0YWNoZWQpOworICAgIGlu
dCBvbGREZXB0aCA9IG1fZGVwdGg7CisgICAgbV9kZXB0aCA9IDA7CisgICAgaWYgKG1fcHJldmlv
dXMpIHsKKyAgICAgICAgbV9kZXB0aCA9IG1fcHJldmlvdXMtPm1fZGVwdGg7CisgICAgICAgIHN3
aXRjaCAobV9wcmV2aW91cy0+bV90eXBlKSB7CisgICAgICAgIGNhc2UgT1BFTl9RVU9URToKKyAg
ICAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgorICAgICAgICAgICAgbV9kZXB0aCsrOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0xPU0VfUVVPVEU6CisgICAgICAgIGNhc2UgTk9f
Q0xPU0VfUVVPVEU6CisgICAgICAgICAgICBpZiAobV9kZXB0aCkKKyAgICAgICAgICAgICAgICBt
X2RlcHRoLS07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBG
SVhNRTogRG9uJ3QgY2FsbCBzZXROZWVkc0xheW91dCBvciBkaXJ0eSBvdXIgcHJlZmVycmVkIHdp
ZHRocyBkdXJpbmcgbGF5b3V0LgorICAgIC8vIFRoaXMgaXMgbGlrZWx5IHRvIGZhaWwgYW55d2F5
IGFzIG9uZSBvZiBvdXIgYW5jZXN0b3Igd2lsbCBjYWxsIHNldE5lZWRzTGF5b3V0KGZhbHNlKSwK
KyAgICAvLyBwcmV2ZW50aW5nIHRoZSBmdXR1cmUgbGF5b3V0IHRvIG9jY3VyIG9uIHx0aGlzfC4g
VGhlIHNvbHV0aW9uIGlzIHRvIG1vdmUgdGhhdCB0byBhCisgICAgLy8gcHJlLWxheW91dCBwaGFz
ZS4KKyAgICBpZiAob2xkRGVwdGggIT0gbV9kZXB0aCkKICAgICAgICAgc2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoZGlm
Ziwgb2xkU3R5bGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJRdW90ZS5oCmluZGV4IGI2ZjNjNTU5OTI4YjVlZjQwNDlhOTM3OTQzNTIx
NzBjMTZhYzIzOGYuLjY5NjAxMWZlNDkzZDJjNzYwYTViNWZlMWE5NTBmMjgxYjgwYWRhMTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oCkBAIC0yMSw2ICsyMSw5IEBACiAj
aWZuZGVmIFJlbmRlclF1b3RlX2gKICNkZWZpbmUgUmVuZGVyUXVvdGVfaAogCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJRdW90ZXNEYXRhLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5
bGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlJlbmRl
clRleHQuaCIKIApAQCAtMzAsMjQgKzMzLDI0IEBAIGNsYXNzIFJlbmRlclF1b3RlIDogcHVibGlj
IFJlbmRlclRleHQgewogcHVibGljOgogICAgIFJlbmRlclF1b3RlKERvY3VtZW50KiwgY29uc3Qg
UXVvdGVUeXBlKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJRdW90ZSgpOworICAgIHZvaWQgYXR0YWNo
UXVvdGUoKTsKKyAgICB2b2lkIGRldGFjaFF1b3RlKCk7CiAKLSAgICBzdGF0aWMgdm9pZCByZW5k
ZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCByZW5k
ZXJlclJlbW92ZWRGcm9tVHJlZShSZW5kZXJPYmplY3QqKTsKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKIHByaXZh
dGU6Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGlzUXVvdGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9OwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gIlJlbmRlclF1
b3RlIjsgfTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNRdW90ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIHRydWU7IH07CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFs
VGV4dCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgpIE9WRVJSSURFOworCiAgICAgY29uc3QgUXVv
dGVzRGF0YSogcXVvdGVzRGF0YSgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlRGVwdGgoKTsKIAog
ICAgIFF1b3RlVHlwZSBtX3R5cGU7CiAgICAgaW50IG1fZGVwdGg7CiAgICAgUmVuZGVyUXVvdGUq
IG1fbmV4dDsKICAgICBSZW5kZXJRdW90ZSogbV9wcmV2aW91czsKLSAgICB2b2lkIHBsYWNlUXVv
dGUoKTsKKyAgICBib29sIG1fYXR0YWNoZWQ7CiB9OwogCiBpbmxpbmUgUmVuZGVyUXVvdGUqIHRv
UmVuZGVyUXVvdGUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAKaW5kZXggOGJkNDljY2ZhZTFhZGRjOWY2Y2U2NWEyYzliZmQ5Mjk1NzM3
NTE5Zi4uNzViNDcyNTY4NTE1Yzg5M2JhYjE0NmFmNDZhNzQ1OTIzYmVlYTYzZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtNjIsNyArNjIsNyBAQCBSZW5kZXJW
aWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZyYW1lVmlldyogdmlldykKICAgICAsIG1fcGFn
ZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKGZhbHNlKQogICAgICwgbV9sYXlvdXRTdGF0ZSgwKQogICAg
ICwgbV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudCgwKQotICAgICwgbV9yZW5kZXJRdW90ZUNvdW50
KDApCisgICAgLCBtX3JlbmRlclF1b3RlSGVhZCgwKQogICAgICwgbV9yZW5kZXJDb3VudGVyQ291
bnQoMCkKIHsKICAgICAvLyBDbGVhciBvdXIgYW5vbnltb3VzIGJpdCwgc2V0IGJlY2F1c2UgUmVu
ZGVyT2JqZWN0IGFzc3VtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4
IDA0YTgwNmU5YmNhNTkxZTE1YTY1N2ExMjgxYTJlMDFiZGVkZmJkMDguLjAwZWE1MzdlNGRlZmVk
MjNkNzA0OWRjNzg1OThiOGQ0NjFkYzJjNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuaApAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZs
b3dUaHJlYWRDb250cm9sbGVyOwogY2xhc3MgUmVuZGVyV2lkZ2V0OworY2xhc3MgUmVuZGVyUXVv
dGU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBjbGFzcyBSZW5kZXJMYXll
ckNvbXBvc2l0b3I7CkBAIC0xOTQsMTMgKzE5NSwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dEZpeGVkUG9zaXRpb25lZE9iamVjdHNOZWVkTGF5b3V0KCk7CiAKLSAgICAvLyBGSVhNRTogVGhp
cyBpcyBhIHdvcmsgYXJvdW5kIGJlY2F1c2UgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2Yg
Y291bnRlcnMgYW5kIHF1b3RlcworICAgIHZvaWQgc2V0UmVuZGVyUXVvdGVIZWFkKFJlbmRlclF1
b3RlKiBoZWFkKSB7IG1fcmVuZGVyUXVvdGVIZWFkID0gaGVhZDsgfQorICAgIFJlbmRlclF1b3Rl
KiByZW5kZXJRdW90ZUhlYWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclF1b3RlSGVhZDsgfQor
CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrIGFyb3VuZCBiZWNhdXNlIHRoZSBjdXJyZW50
IGltcGxlbWVudGF0aW9uIG9mIGNvdW50ZXJzCiAgICAgLy8gcmVxdWlyZXMgd2Fsa2luZyB0aGUg
ZW50aXJlIHRyZWUgcmVwZWF0ZWRseSBhbmQgbW9zdCBwYWdlcyBkb24ndCBhY3R1YWxseSB1c2Ug
ZWl0aGVyCiAgICAgLy8gZmVhdHVyZSBzbyB3ZSBzaG91bGRuJ3QgdGFrZSB0aGUgcGVyZm9ybWFu
Y2UgaGl0IHdoZW4gbm90IG5lZWRlZC4gTG9uZyB0ZXJtIHdlIHNob3VsZAogICAgIC8vIHJld3Jp
dGUgdGhlIGNvdW50ZXIgYW5kIHF1b3RlcyBjb2RlLgotICAgIHZvaWQgYWRkUmVuZGVyUXVvdGUo
KSB7IG1fcmVuZGVyUXVvdGVDb3VudCsrOyB9Ci0gICAgdm9pZCByZW1vdmVSZW5kZXJRdW90ZSgp
IHsgQVNTRVJUKG1fcmVuZGVyUXVvdGVDb3VudCA+IDApOyBtX3JlbmRlclF1b3RlQ291bnQtLTsg
fQotICAgIGJvb2wgaGFzUmVuZGVyUXVvdGVzKCkgeyByZXR1cm4gbV9yZW5kZXJRdW90ZUNvdW50
OyB9CiAgICAgdm9pZCBhZGRSZW5kZXJDb3VudGVyKCkgeyBtX3JlbmRlckNvdW50ZXJDb3VudCsr
OyB9CiAgICAgdm9pZCByZW1vdmVSZW5kZXJDb3VudGVyKCkgeyBBU1NFUlQobV9yZW5kZXJDb3Vu
dGVyQ291bnQgPiAwKTsgbV9yZW5kZXJDb3VudGVyQ291bnQtLTsgfQogICAgIGJvb2wgaGFzUmVu
ZGVyQ291bnRlcnMoKSB7IHJldHVybiBtX3JlbmRlckNvdW50ZXJDb3VudDsgfQpAQCAtMzAxLDcg
KzMwMiw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEZsb3dUaHJlYWRDb250cm9sbGVyPiBtX2Zs
b3dUaHJlYWRDb250cm9sbGVyOwogICAgIFJlZlB0cjxJbnRlcnZhbEFyZW5hPiBtX2ludGVydmFs
QXJlbmE7CiAKLSAgICB1bnNpZ25lZCBtX3JlbmRlclF1b3RlQ291bnQ7CisgICAgUmVuZGVyUXVv
dGUqIG1fcmVuZGVyUXVvdGVIZWFkOwogICAgIHVuc2lnbmVkIG1fcmVuZGVyQ291bnRlckNvdW50
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHAKaW5kZXggNmZmZWE0Y2JmYzUxOWIyY2VmMjNiYjNjOTRiZTI3MmFlODdkNzc5ZC4uOGVkMDgw
NGZhNDE3NzgwZGU1MTZjMzY2NWU4N2E5ZTg0N2RkNGRlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC01ODAsNiArNTgwLDkgQEAgU3R5
bGVEaWZmZXJlbmNlIFJlbmRlclN0eWxlOjpkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlciwg
dW5zaWduZWQmIGNoYW5nZWRDb24KICAgICAgICAgcmV0dXJuIFN0eWxlRGlmZmVyZW5jZUxheW91
dDsKICAgICB9CiAKKyAgICBpZiAoIVF1b3Rlc0RhdGE6OmVxdWFscyhyYXJlSW5oZXJpdGVkRGF0
YS0+cXVvdGVzLmdldCgpLCBvdGhlci0+cmFyZUluaGVyaXRlZERhdGEtPnF1b3Rlcy5nZXQoKSkp
CisgICAgICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7CisKICNpZiBFTkFCTEUoU1ZH
KQogICAgIC8vIFNWR1JlbmRlclN0eWxlOjpkaWZmKCkgbWlnaHQgaGF2ZSByZXR1cm5lZCBTdHls
ZURpZmZlcmVuY2VSZXBhaW50LCBlZy4gaWYgZmlsbCBjaGFuZ2VzLgogICAgIC8vIElmIGVnLiB0
aGUgZm9udC1zaXplIGNoYW5nZWQgYXQgdGhlIHNhbWUgdGltZSwgd2UncmUgbm90IGFsbG93ZWQg
dG8gcmV0dXJuIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQsCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157525</attachid>
            <date>2012-08-09 13:20:23 -0700</date>
            <delta_ts>2012-08-09 16:35:00 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-93056-20120809131956.patch</filename>
            <type>text/plain</type>
            <size>21326</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNiMTk0ZTE1MTBlYTQ4
ODJlN2NkNTUyOWI5YjhiYmRiN2VjMWM0ZC4uZGZjOTlmNzRhM2ZhNDVhZWYzNzI0MmNiNDIwZjQz
MDA5ZDUyYjQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTA4LTAyICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIFJlaW1wbGVtZW50IFJl
bmRlclF1b3RlIHBsYWNlbWVudCBhbGdvcml0aG0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCisKKyAgICAgICAgR3JlYXRseSBzaW1wbGlmeSB0aGUgY29kZSB0aGF0IG1haW50YWlu
cyB0aGUgbGlua2VkIGxpc3Qgb2YgUmVuZGVyUXVvdGVzLiBOb3cgUmVuZGVyUXVvdGUKKyAgICAg
ICAgaXMgcGxhY2VkIGludG8gdGhlIGxpbmtlZCBsaXN0IGluIGNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzIG9uIGZpcnN0IGFjY2VzcyBhbmQgaXMKKyAgICAgICAgZGV0YWNoZWQgd2hlbiBk
ZXN0cm95ZWQgKG9yIGV4cGxpY2l0bHkgcmVtb3ZlZCkuCisKKyAgICAgICAgVGhlIG5ldyBhbGdv
cml0aG0gZG9lc24ndCByZXF1aXJlIHdhbGtpbmcgdXAgdGhlIHRyZWUgb2YgcmVuZGVyZXJzIHdo
ZW4gdGhlcmUgYXJlIG5vCisgICAgICAgIFJlbmRlclF1b3RlcyBpbiB0aGUgdHJlZSB5ZXQsIGFu
ZCBhbHNvIHJlbW92ZXMgdGhlIG5lZWQgdG8gd2FsayBvdmVyIGV2ZXJ5IHN1YnRyZWUKKyAgICAg
ICAgd2hlbiBpbnNlcnRpbmcgaW4gcmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBhbnkgYmVoYXZp
b3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdENoaWxkTGlzdDo6cmVtb3ZlQ2hpbGROb2RlKTog
Q2FsbCBkZXRhY2hRdW90ZSB3aGVuIHJlbW92aW5nIGZyb20gYSBjaGlsZCBsaXN0LgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJRdW90ZTo6UmVuZGVyUXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6
On5SZW5kZXJRdW90ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6d2lsbEJlRGVz
dHJveWVkKTogQ2FsbCBkZXRhY2hRdW90ZSB0byBlbnN1cmUgYWxsIGRlc3Ryb3llZCBxdW90ZXMg
YXJlIGRldGFjaGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMpOiBBdHRhY2ggcXVvdGUgYmVmb3JlIGNvbXB1dGluZyB0aGUgd2lkdGguCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjphdHRhY2hRdW90
ZSk6IFB1dHMgdGhlIFJlbmRlclF1b3RlIGluIHRoZSBsaW5rZWQgbGlzdCBvZiBxdW90ZXMgYW5k
IGNvbXB1dGVzIHRoZSBkZXB0aC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclF1b3RlOjpkZXRh
Y2hRdW90ZSk6IFJlbW92ZXMgdGhlIHF1b3RlIGZyb20gdGhlIGxpbmtlZCBsaXN0LgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6OnVwZGF0ZURlcHRoKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUXVvdGUuaDoKKyAgICAgICAgKFJlbmRlclF1b3RlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5
bGU6OmRpZmYpOiBSZXR1cm4gU3R5bGVEaWZmZXJlbmNlTGF5b3V0IGlmIHF1b3RlcyBjaGFuZ2Ug
YW5kIHJlbW92ZSBjaGVjayBpbiBzdHlsZURpZENoYW5nZSBpbiBSZW5kZXJRdW90ZS4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpSZW5kZXJWaWV3KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRSZW5kZXJR
dW90ZUhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVuZGVyUXVvdGVIZWFk
KTogU3RvcmVzIHRoZSBmaXJzdCBxdW90ZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIChSZW5k
ZXJWaWV3KToKKwogMjAxMi0wOC0wMiAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBTbGlkZXIgc2hvdWxkIHNuYXAgdG8gZGF0YWxpc3QgdGljayBtYXJrcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNw
cAppbmRleCBkYTk4MDg4ZTIxNTYzNTY3Mjk0YzY2YzEzNzM5OTQ1YTkzNDViODc2Li4zMTU4ZmJm
YjY5OWRkY2JmYWMwZmYyOTIyYjNjMzgyOGU3MTlmZmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcApAQCAtMTE3LDYgKzExNyw5
IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpyZW1vdmVDaGlsZE5vZGUo
UmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgICAgIGlmIChvbGRDaGlsZC0+aXNSZW5k
ZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG9sZENoaWxkKS0+ZGV0YWNo
UmVnaW9uKCk7CiAKKyAgICAgICAgaWYgKG9sZENoaWxkLT5pc1F1b3RlKCkpCisgICAgICAgICAg
ICB0b1JlbmRlclF1b3RlKG9sZENoaWxkKS0+ZGV0YWNoUXVvdGUoKTsKKwogICAgICAgICBpZiAo
b2xkQ2hpbGQtPmluUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgICAgICBpZiAob2xkQ2hp
bGQtPmlzQm94KCkpCiAgICAgICAgICAgICAgICAgb2xkQ2hpbGQtPmVuY2xvc2luZ1JlbmRlckZs
b3dUaHJlYWQoKS0+cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyh0b1JlbmRlckJveChvbGRDaGls
ZCkpOwpAQCAtMTU4LDcgKzE2MSw2IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0OjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyCiAgICAgLy8g
Ynkgc2tpcHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVzdHJveWluZyB0aGUgZW50aXJlIHRyZWUuCiAg
ICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJlbmRl
ckNvdW50ZXI6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKLSAgICAgICAgUmVu
ZGVyUXVvdGU6OnJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlKG9sZENoaWxkKTsKICAgICB9CiAKICAg
ICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKQEAgLTIxMCwxMyAr
MjEyLDE2IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjphcHBlbmRDaGlsZE5vZGUoUmVu
ZGVyT2JqZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBuCiAgICAgICAgIGlmIChuZXdDaGlsZC0+
aXNSZW5kZXJSZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKG5ld0NoaWxkKS0+
YXR0YWNoUmVnaW9uKCk7CiAKKyAgICAgICAgLy8gWW91IGNhbid0IGF0dGFjaFF1b3RlKCkgb3Ro
ZXJ3aXNlIHRoZSBxdW90ZSB3b3VsZCBiZSBhdHRhY2hlZCB0b28gZWFybHkKKyAgICAgICAgLy8g
YW5kIGdldCB0aGUgd3JvbmcgZGVwdGggc2luY2UgZ2VuZXJhdGVkIGNvbnRlbnQgaXMgaW5zZXJ0
ZWQgaW50byBhbm9ueW1vdXMKKyAgICAgICAgLy8gcmVuZGVyZXJzIGJlZm9yZSBnb2luZyBpbnRv
IHRoZSBtYWluIHJlbmRlciB0cmVlLgorCiAgICAgICAgIGlmIChSZW5kZXJOYW1lZEZsb3dUaHJl
YWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJOYW1lZEZsb3dUaHJlYWRDb250YWluZXIo
b3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxvd1RocmVhZC0+YWRkRmxvd0NoaWxkKG5l
d0NoaWxkKTsKICAgICB9CiAKICAgICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJveWVk
KCkpIHsKICAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQobmV3
Q2hpbGQpOwotICAgICAgICBSZW5kZXJRdW90ZTo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQobmV3
Q2hpbGQpOwogICAgIH0KICAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7IC8vIEdvZXMgdXAgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGllcmFyY2h5LgogICAg
IGlmICghb3duZXItPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKQEAgLTI3OSwxMyArMjg0LDE1
IEBAIHZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2Jq
ZWN0KiBvd25lciwgUmVuZGVyT2JqZWN0KiBjCiAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJS
ZWdpb24oKSkKICAgICAgICAgICAgIHRvUmVuZGVyUmVnaW9uKGNoaWxkKS0+YXR0YWNoUmVnaW9u
KCk7CiAKKyAgICAgICAgLy8gQ2FsbGluZyBhdHRhY2hRdW90ZSgpIGhlcmUgd291bGQgYmUgdG9v
IGVhcmx5IChiZWZvcmUgYW5vbnltb3VzIHJlbmRlcmVycyBhcmUgaW5zZXJ0ZWQpCisgICAgICAg
IC8vIHNlZSBhcHBlbmRDaGlsZCgpIGZvciBtb3JlIGV4cGxhbmF0aW9uLgorCiAgICAgICAgIGlm
IChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGNvbnRhaW5lckZsb3dUaHJlYWQgPSByZW5kZXJOYW1l
ZEZsb3dUaHJlYWRDb250YWluZXIob3duZXIpKQogICAgICAgICAgICAgY29udGFpbmVyRmxvd1Ro
cmVhZC0+YWRkRmxvd0NoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgfQogCiAgICAgaWYg
KCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgIFJlbmRlckNvdW50
ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKLSAgICAgICAgUmVuZGVyUXVvdGU6
OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKGNoaWxkKTsKICAgICB9CiAgICAgY2hpbGQtPnNldE5l
ZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIGlmICghb3duZXItPm5vcm1hbENo
aWxkTmVlZHNMYXlvdXQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJRdW90ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3Bw
CmluZGV4IDdmMWQ3NDliMTJlZmI3OGZjYTY3MDY0MGFkM2JkNTM0MzVmOTZmYjIuLjMxMDAyOTA5
OGJmNGUyYjMxOWIwMjY4NTgxZGQyODRiNzQ1ZDMxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclF1b3RlLmNwcApAQCAtMjEsMTE5ICsyMSwzNCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCi0jZGVmaW5lIFVOS05PV05fREVQVEggLTEK
KyNkZWZpbmUgVSh4KSAoKGNvbnN0IFVDaGFyKilMIyN4KQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0RGVwdGgoaW50ICZkZXB0aCwgUXVvdGVUeXBlIHR5
cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBPUEVOX1FVT1RFOgotICAgIGNh
c2UgTk9fT1BFTl9RVU9URToKLSAgICAgICAgKytkZXB0aDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDTE9TRV9RVU9URToKLSAgICBjYXNlIE5PX0NMT1NFX1FVT1RFOgotICAgICAgICBpZiAo
ZGVwdGgpCi0gICAgICAgICAgICAtLWRlcHRoOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19CiAKIFJlbmRlclF1b3Rl
OjpSZW5kZXJRdW90ZShEb2N1bWVudCogbm9kZSwgUXVvdGVUeXBlIHF1b3RlKQogICAgIDogUmVu
ZGVyVGV4dChub2RlLCBTdHJpbmdJbXBsOjplbXB0eSgpKQogICAgICwgbV90eXBlKHF1b3RlKQot
ICAgICwgbV9kZXB0aChVTktOT1dOX0RFUFRIKQorICAgICwgbV9kZXB0aCgwKQogICAgICwgbV9u
ZXh0KDApCiAgICAgLCBtX3ByZXZpb3VzKDApCisgICAgLCBtX2F0dGFjaGVkKGZhbHNlKQogewot
ICAgIHZpZXcoKS0+YWRkUmVuZGVyUXVvdGUoKTsKIH0KIAogUmVuZGVyUXVvdGU6On5SZW5kZXJR
dW90ZSgpCiB7CisgICAgQVNTRVJUKCFtX2F0dGFjaGVkKTsKKyAgICBBU1NFUlQoIW1fbmV4dCAm
JiAhbV9wcmV2aW91cyk7CiB9CiAKIHZvaWQgUmVuZGVyUXVvdGU6OndpbGxCZURlc3Ryb3llZCgp
CiB7Ci0gICAgaWYgKHZpZXcoKSkKLSAgICAgICAgdmlldygpLT5yZW1vdmVSZW5kZXJRdW90ZSgp
OworICAgIGRldGFjaFF1b3RlKCk7CiAgICAgUmVuZGVyVGV4dDo6d2lsbEJlRGVzdHJveWVkKCk7
CiB9CiAKLWNvbnN0IGNoYXIqIFJlbmRlclF1b3RlOjpyZW5kZXJOYW1lKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gIlJlbmRlclF1b3RlIjsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBwbGFjZXMgYSBs
aXN0IG9mIHF1b3RlIHJlbmRlcmVycyBzdGFydGluZyBhdCAidGhpcyIgaW4gdGhlIGxpc3Qgb2Yg
cXVvdGUgcmVuZGVyZXJzIGFscmVhZHkKLS8vIGluIHRoZSBkb2N1bWVudCdzIHJlbmRlcmVyIHRy
ZWUuCi0vLyBUaGUgYXNzdW1wdGlvbnMgYXJlIG1hZGUgKGZvciBwZXJmb3JtYW5jZSk6Ci0vLyAx
LiBUaGUgbGlzdCBvZiBxdW90ZXMgYWxyZWFkeSBpbiB0aGUgcmVuZGVyZXJzIHRyZWUgb2YgdGhl
IGRvY3VtZW50IGlzIGFscmVhZHkgaW4gYSBjb25zaXN0ZW50IHN0YXRlCi0vLyAoQWxsIHF1b3Rl
IHJlbmRlcmVycyBhcmUgbGlua2VkIGFuZCBoYXZlIHRoZSBjb3JyZWN0IGRlcHRoIHNldCkKLS8v
IDIuIFRoZSBxdW90ZSByZW5kZXJlcnMgb2YgdGhlIGluc2VydGVkIGxpc3QgYXJlIGluIGEgdHJl
ZSBvZiByZW5kZXJlcnMgb2YgdGhlaXIgb3duIHdoaWNoIGhhcyBiZWVuIGp1c3QKLS8vIGluc2Vy
dGVkIGluIHRoZSBtYWluIHJlbmRlcmVyIHRyZWUgd2l0aCBpdHMgcm9vdCBhcyBjaGlsZCBvZiBz
b21lIHJlbmRlcmVyLgotLy8gMy4gVGhlIHF1b3RlIHJlbmRlcmVycyBpbiB0aGUgaW5zZXJ0ZWQg
bGlzdCBoYXZlIGRlcHRocyBjb25zaXN0ZW50IHdpdGggdGhlaXIgcG9zaXRpb24gaW4gdGhlIGxp
c3QgcmVsYXRpdmUKLS8vIHRvICJ0aGlzIiwgdGh1cyBpZiAidGhpcyIgZG9lcyBub3QgbmVlZCB0
byBjaGFuZ2UgaXRzIGRlcHRoIHVwb24gaW5zZXJ0aW9uLCB0aGUgb3RoZXIgcmVuZGVyZXJzIGlu
IHRoZSBsaXN0IGRvbid0Ci0vLyBuZWVkIHRvIGVpdGhlci4KLXZvaWQgUmVuZGVyUXVvdGU6OnBs
YWNlUXVvdGUoKQotewotICAgIFJlbmRlclF1b3RlKiBoZWFkID0gdGhpczsKLSAgICBBU1NFUlQo
IWhlYWQtPm1fcHJldmlvdXMpOwotICAgIFJlbmRlclF1b3RlKiB0YWlsID0gMDsKLSAgICBmb3Ig
KFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBoZWFkLT5wcmV2aW91c0luUHJlT3JkZXIoKTsg
cHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3ItPnByZXZpb3VzSW5QcmVPcmRl
cigpKSB7Ci0gICAgICAgIGlmICghcHJlZGVjZXNzb3ItPmlzUXVvdGUoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBoZWFkLT5tX3ByZXZpb3VzID0gdG9SZW5kZXJRdW90ZShwcmVk
ZWNlc3Nvcik7Ci0gICAgICAgIGlmIChoZWFkLT5tX3ByZXZpb3VzLT5tX25leHQpIHsKLSAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gc3BsaWNlIHRoZSBsaXN0IG9mIHF1b3RlcyBoZWFkZWQgYnkg
aGVhZCBpbnRvIHRoZSBkb2N1bWVudCdzIGxpc3Qgb2YgcXVvdGVzLgotICAgICAgICAgICAgdGFp
bCA9IGhlYWQ7Ci0gICAgICAgICAgICB3aGlsZSAodGFpbC0+bV9uZXh0KQotICAgICAgICAgICAg
ICAgICB0YWlsID0gdGFpbC0+bV9uZXh0OwotICAgICAgICAgICAgdGFpbC0+bV9uZXh0ID0gaGVh
ZC0+bV9wcmV2aW91cy0+bV9uZXh0OwotICAgICAgICAgICAgQVNTRVJUKHRhaWwtPm1fbmV4dC0+
bV9wcmV2aW91cyA9PSBoZWFkLT5tX3ByZXZpb3VzKTsKLSAgICAgICAgICAgIHRhaWwtPm1fbmV4
dC0+bV9wcmV2aW91cyA9ICB0YWlsOwotICAgICAgICAgICAgdGFpbCA9IHRhaWwtPm1fbmV4dDsg
Ly8gVGhpcyBtYXJrcyB0aGUgc3BsaWNpbmcgcG9pbnQgaGVyZSB0aGVyZSBtYXkgYmUgYSBkZXB0
aCBkaXNjb250aW51aXR5Ci0gICAgICAgIH0KLSAgICAgICAgaGVhZC0+bV9wcmV2aW91cy0+bV9u
ZXh0ID0gaGVhZDsKLSAgICAgICAgQVNTRVJUKGhlYWQtPm1fcHJldmlvdXMtPm1fZGVwdGggIT0g
VU5LTk9XTl9ERVBUSCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpbnQgbmV3RGVwdGg7
Ci0gICAgaWYgKCFoZWFkLT5tX3ByZXZpb3VzKSB7Ci0gICAgICAgIG5ld0RlcHRoID0gMDsKLSAg
ICAgICAgZ290byBza2lwTmV3RGVwdGhDYWxjOwotICAgIH0KLSAgICBuZXdEZXB0aCA9IGhlYWQt
Pm1fcHJldmlvdXMtPm1fZGVwdGg7Ci0gICAgZG8gewotICAgICAgICBhZGp1c3REZXB0aChuZXdE
ZXB0aCwgaGVhZC0+bV9wcmV2aW91cy0+bV90eXBlKTsKLXNraXBOZXdEZXB0aENhbGM6Ci0gICAg
ICAgIGlmIChoZWFkLT5tX2RlcHRoID09IG5ld0RlcHRoKSB7IC8vIEFsbCByZW1haW5pbmcgZGVw
dGggc2hvdWxkIGJlIGNvcnJlY3QgZXhjZXB0IGlmIHNwbGljaW5nIHdhcyBkb25lLgotICAgICAg
ICAgICAgaWYgKCF0YWlsKSAvLyBXZSd2ZSBkb25lIHRoZSBwb3N0IHNwbGljaW5nIHNlY3Rpb24g
YWxyZWFkeSBvciB0aGVyZSB3YXMgbm8gc3BsaWNpbmcuCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBoZWFkID0gdGFpbDsgLy8gQ29udGludWUgYWZ0ZXIgdGhlIHNwbGljaW5n
IHBvaW50Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgc3BsaWNp
bmcgcG9pbnQgZGlzY29udGludWl0eSBmaXhlZC4KLSAgICAgICAgICAgIG5ld0RlcHRoID0gaGVh
ZC0+bV9wcmV2aW91cy0+bV9kZXB0aDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIGhlYWQtPm1fZGVwdGggPSBuZXdEZXB0aDsKLSAgICAgICAgLy8gRklYTUU6IElm
IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBkb2VzIG5v
dCBjaGFuZ2Ugd2UgbWF5IG9ubHkgbmVlZCB0bwotICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBy
ZW5kZXJlcidzIGFyZWEgbm90IGEgcmVsYXlvdXQuCi0gICAgICAgIGhlYWQtPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICBoZWFkID0gaGVhZC0+bV9uZXh0Owot
ICAgICAgICBpZiAoaGVhZCA9PSB0YWlsKSAvLyBXZSBhcmUgYXQgdGhlIHNwbGljaW5nIHBvaW50
Ci0gICAgICAgICAgICB0YWlsID0gMDsgLy8gTWFyayB0aGUgcG9zc2libGUgZGVwdGggZGlzY29u
dGludWl0eSBmaXhlZC4KLSAgICB9IHdoaWxlIChoZWFkKTsKLX0KLQotI2RlZmluZSBVKHgpICgo
Y29uc3QgVUNoYXIqKUwjI3gpCi0KIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIGNvbnN0
IFF1b3Rlc0RhdGEqLCBDYXNlRm9sZGluZ0hhc2g+IFF1b3Rlc01hcDsKIAogc3RhdGljIGNvbnN0
IFF1b3Rlc01hcCYgcXVvdGVzRGF0YUxhbmd1YWdlTWFwKCkKQEAgLTE1NywyNyArNzIsMjQgQEAg
c3RhdGljIGNvbnN0IFF1b3Rlc0RhdGEqIGJhc2ljUXVvdGVzRGF0YSgpCiAKIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYg
KCFwYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKG1fZGVwdGggIT0gVU5L
Tk9XTl9ERVBUSCk7Ci0gICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzID0gcXVvdGVzRGF0YSgp
OwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgogICAgIGNh
c2UgTk9fQ0xPU0VfUVVPVEU6CiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwog
ICAgIGNhc2UgQ0xPU0VfUVVPVEU6CiAgICAgICAgIC8vIEZJWE1FOiBXaGVuIG1fZGVwdGggaXMg
MCB3ZSBzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZy4KLSAgICAgICAgcmV0dXJuIHF1b3Rlcy0+
Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0gMSwgMCkpLmltcGwoKTsKKyAgICAgICAg
cmV0dXJuIHF1b3Rlc0RhdGEoKS0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heChtX2RlcHRoIC0gMSwg
MCkpLmltcGwoKTsKICAgICBjYXNlIE9QRU5fUVVPVEU6Ci0gICAgICAgIHJldHVybiBxdW90ZXMt
PmdldE9wZW5RdW90ZShtX2RlcHRoKS5pbXBsKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwor
ICAgICAgICByZXR1cm4gcXVvdGVzRGF0YSgpLT5nZXRPcGVuUXVvdGUobV9kZXB0aCkuaW1wbCgp
OwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nSW1w
bDo6ZW1wdHkoKTsKIH0KIAogdm9pZCBSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoZmxvYXQgbGVhZCkKIHsKKyAgICBpZiAoIW1fYXR0YWNoZWQpCisgICAgICAgIGF0
dGFjaFF1b3RlKCk7CiAgICAgc2V0VGV4dEludGVybmFsKG9yaWdpbmFsVGV4dCgpKTsKICAgICBS
ZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhsZWFkKTsKIH0KQEAgLTE5
Niw1OCArMTA4LDk4IEBAIGNvbnN0IFF1b3Rlc0RhdGEqIFJlbmRlclF1b3RlOjpxdW90ZXNEYXRh
KCkgY29uc3QKICAgICByZXR1cm4gcXVvdGVzOwogfQogCi12b2lkIFJlbmRlclF1b3RlOjpyZW5k
ZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBSZW5kZXJR
dW90ZTo6YXR0YWNoUXVvdGUoKQogewotICAgIEFTU0VSVChyZW5kZXJlci0+dmlldygpKTsKLSAg
ICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhhc1JlbmRlclF1b3RlcygpKQorICAgIEFTU0VSVCh2
aWV3KCkpOworICAgIEFTU0VSVCghbV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX25leHQgJiYg
IW1fcHJldmlvdXMpOworCisgICAgLy8gRklYTUU6IERvbid0IHNldCBwcmVmIHdpZHRocyBkaXJ0
eSBkdXJpbmcgbGF5b3V0LiBTZWUgdXBkYXRlRGVwdGgoKSBmb3IKKyAgICAvLyBtb3JlIGRldGFp
bC4KKyAgICBpZiAoIWlzUm9vdGVkKCkpIHsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVm
V2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKFJlbmRlck9iamVjdCog
ZGVzY2VuZGFudCA9IHJlbmRlcmVyOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFu
dC0+bmV4dEluUHJlT3JkZXIocmVuZGVyZXIpKQotICAgICAgICBpZiAoZGVzY2VuZGFudC0+aXNR
dW90ZSgpKSB7Ci0gICAgICAgICAgICB0b1JlbmRlclF1b3RlKGRlc2NlbmRhbnQpLT5wbGFjZVF1
b3RlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh
dmlldygpLT5yZW5kZXJRdW90ZUhlYWQoKSkgeworICAgICAgICB2aWV3KCktPnNldFJlbmRlclF1
b3RlSGVhZCh0aGlzKTsKKyAgICAgICAgbV9hdHRhY2hlZCA9IHRydWU7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCogcHJlZGVjZXNzb3IgPSBwcmV2aW91
c0luUHJlT3JkZXIoKTsgcHJlZGVjZXNzb3I7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3ItPnBy
ZXZpb3VzSW5QcmVPcmRlcigpKSB7CisgICAgICAgIC8vIFNraXAgdW5hdHRhY2hlZCBwcmVkZWNl
c3NvcnMgdG8gYXZvaWQgaGF2aW5nIHN0YWxlIG1fcHJldmlvdXMgcG9pbnRlcnMKKyAgICAgICAg
Ly8gaWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgbmV2ZXIgYXR0YWNoZWQgYW5kIGlzIHRoZW4gZGVz
dHJveWVkLgorICAgICAgICBpZiAoIXByZWRlY2Vzc29yLT5pc1F1b3RlKCkgfHwgIXRvUmVuZGVy
UXVvdGUocHJlZGVjZXNzb3IpLT5pc0F0dGFjaGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgbV9wcmV2aW91cyA9IHRvUmVuZGVyUXVvdGUocHJlZGVjZXNzb3IpOworICAgICAg
ICBtX25leHQgPSBtX3ByZXZpb3VzLT5tX25leHQ7CisgICAgICAgIG1fcHJldmlvdXMtPm1fbmV4
dCA9IHRoaXM7CisgICAgICAgIGlmIChtX25leHQpCisgICAgICAgICAgICBtX25leHQtPm1fcHJl
dmlvdXMgPSB0aGlzOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIW1fcHJldmlv
dXMpIHsKKyAgICAgICAgbV9uZXh0ID0gdmlldygpLT5yZW5kZXJRdW90ZUhlYWQoKTsKKyAgICAg
ICAgdmlldygpLT5zZXRSZW5kZXJRdW90ZUhlYWQodGhpcyk7CisgICAgfQorICAgIG1fYXR0YWNo
ZWQgPSB0cnVlOworCisgICAgZm9yIChSZW5kZXJRdW90ZSogcXVvdGUgPSB0aGlzOyBxdW90ZTsg
cXVvdGUgPSBxdW90ZS0+bV9uZXh0KQorICAgICAgICBxdW90ZS0+dXBkYXRlRGVwdGgoKTsKKwor
ICAgIEFTU0VSVCghbV9uZXh0IHx8IG1fbmV4dC0+bV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFt
X3ByZXZpb3VzIHx8IG1fcHJldmlvdXMtPm1fYXR0YWNoZWQpOwogfQogCi12b2lkIFJlbmRlclF1
b3RlOjpyZW5kZXJlclJlbW92ZWRGcm9tVHJlZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9p
ZCBSZW5kZXJRdW90ZTo6ZGV0YWNoUXVvdGUoKQogewotICAgIEFTU0VSVChyZW5kZXJlci0+dmll
dygpKTsKLSAgICBpZiAoIXJlbmRlcmVyLT52aWV3KCktPmhhc1JlbmRlclF1b3RlcygpKQorICAg
IEFTU0VSVCghbV9uZXh0IHx8IG1fbmV4dC0+bV9hdHRhY2hlZCk7CisgICAgQVNTRVJUKCFtX3By
ZXZpb3VzIHx8IG1fcHJldmlvdXMtPm1fYXR0YWNoZWQpOworICAgIGlmICghbV9hdHRhY2hlZCkK
ICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gcmVu
ZGVyZXI7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRl
cihyZW5kZXJlcikpCi0gICAgICAgIGlmIChkZXNjZW5kYW50LT5pc1F1b3RlKCkpIHsKLSAgICAg
ICAgICAgIFJlbmRlclF1b3RlKiByZW1vdmVkUXVvdGUgPSB0b1JlbmRlclF1b3RlKGRlc2NlbmRh
bnQpOwotICAgICAgICAgICAgUmVuZGVyUXVvdGUqIGxhc3RRdW90ZUJlZm9yZSA9IHJlbW92ZWRR
dW90ZS0+bV9wcmV2aW91czsKLSAgICAgICAgICAgIHJlbW92ZWRRdW90ZS0+bV9wcmV2aW91cyA9
IDA7Ci0gICAgICAgICAgICBpbnQgZGVwdGggPSByZW1vdmVkUXVvdGUtPm1fZGVwdGg7Ci0gICAg
ICAgICAgICBmb3IgKGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5k
ZXJlcik7IGRlc2NlbmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRl
cihyZW5kZXJlcikpCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NlbmRhbnQtPmlzUXVvdGUoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZFF1b3RlID0gdG9SZW5kZXJRdW90ZShkZXNjZW5k
YW50KTsKLSAgICAgICAgICAgIFJlbmRlclF1b3RlKiBxdW90ZUFmdGVyID0gcmVtb3ZlZFF1b3Rl
LT5tX25leHQ7Ci0gICAgICAgICAgICByZW1vdmVkUXVvdGUtPm1fbmV4dCA9IDA7Ci0gICAgICAg
ICAgICBpZiAobGFzdFF1b3RlQmVmb3JlKQotICAgICAgICAgICAgICAgIGxhc3RRdW90ZUJlZm9y
ZS0+bV9uZXh0ID0gcXVvdGVBZnRlcjsKLSAgICAgICAgICAgIGlmIChxdW90ZUFmdGVyKSB7Ci0g
ICAgICAgICAgICAgICAgcXVvdGVBZnRlci0+bV9wcmV2aW91cyA9IGxhc3RRdW90ZUJlZm9yZTsK
LSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSBx
dW90ZUFmdGVyLT5tX2RlcHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIHF1b3RlQWZ0ZXItPm1fZGVwdGggPSBkZXB0aDsKLSAgICAgICAgICAg
ICAgICAgICAgcXVvdGVBZnRlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGFkanVzdERlcHRoKGRlcHRoLCBxdW90ZUFmdGVyLT5tX3R5
cGUpOwotICAgICAgICAgICAgICAgICAgICBxdW90ZUFmdGVyID0gcXVvdGVBZnRlci0+bV9uZXh0
OwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKHF1b3RlQWZ0ZXIpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBpZiAobV9wcmV2aW91cykKKyAgICAg
ICAgbV9wcmV2aW91cy0+bV9uZXh0ID0gbV9uZXh0OworICAgIGVsc2UgaWYgKHZpZXcoKSkKKyAg
ICAgICAgdmlldygpLT5zZXRSZW5kZXJRdW90ZUhlYWQobV9uZXh0KTsKKyAgICBpZiAobV9uZXh0
KQorICAgICAgICBtX25leHQtPm1fcHJldmlvdXMgPSBtX3ByZXZpb3VzOworICAgIGlmICghZG9j
dW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CisgICAgICAgIGZvciAoUmVuZGVyUXVvdGUqIHF1b3Rl
ID0gbV9uZXh0OyBxdW90ZTsgcXVvdGUgPSBxdW90ZS0+bV9uZXh0KQorICAgICAgICAgICAgcXVv
dGUtPnVwZGF0ZURlcHRoKCk7CisgICAgfQorICAgIG1fYXR0YWNoZWQgPSBmYWxzZTsKKyAgICBt
X25leHQgPSAwOworICAgIG1fcHJldmlvdXMgPSAwOworICAgIG1fZGVwdGggPSAwOwogfQogCi12
b2lkIFJlbmRlclF1b3RlOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQordm9pZCBSZW5kZXJRdW90ZTo6dXBkYXRlRGVwdGgo
KQogewotICAgIGNvbnN0IFF1b3Rlc0RhdGEqIG5ld1F1b3RlcyA9IHN0eWxlKCktPnF1b3Rlcygp
OwotICAgIGNvbnN0IFF1b3Rlc0RhdGEqIG9sZFF1b3RlcyA9IG9sZFN0eWxlID8gb2xkU3R5bGUt
PnF1b3RlcygpIDogMDsKLSAgICBpZiAoIVF1b3Rlc0RhdGE6OmVxdWFscyhuZXdRdW90ZXMsIG9s
ZFF1b3RlcykpCisgICAgQVNTRVJUKG1fYXR0YWNoZWQpOworICAgIGludCBvbGREZXB0aCA9IG1f
ZGVwdGg7CisgICAgbV9kZXB0aCA9IDA7CisgICAgaWYgKG1fcHJldmlvdXMpIHsKKyAgICAgICAg
bV9kZXB0aCA9IG1fcHJldmlvdXMtPm1fZGVwdGg7CisgICAgICAgIHN3aXRjaCAobV9wcmV2aW91
cy0+bV90eXBlKSB7CisgICAgICAgIGNhc2UgT1BFTl9RVU9URToKKyAgICAgICAgY2FzZSBOT19P
UEVOX1FVT1RFOgorICAgICAgICAgICAgbV9kZXB0aCsrOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ0xPU0VfUVVPVEU6CisgICAgICAgIGNhc2UgTk9fQ0xPU0VfUVVPVEU6Cisg
ICAgICAgICAgICBpZiAobV9kZXB0aCkKKyAgICAgICAgICAgICAgICBtX2RlcHRoLS07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBGSVhNRTogRG9uJ3QgY2Fs
bCBzZXROZWVkc0xheW91dCBvciBkaXJ0eSBvdXIgcHJlZmVycmVkIHdpZHRocyBkdXJpbmcgbGF5
b3V0LgorICAgIC8vIFRoaXMgaXMgbGlrZWx5IHRvIGZhaWwgYW55d2F5IGFzIG9uZSBvZiBvdXIg
YW5jZXN0b3Igd2lsbCBjYWxsIHNldE5lZWRzTGF5b3V0KGZhbHNlKSwKKyAgICAvLyBwcmV2ZW50
aW5nIHRoZSBmdXR1cmUgbGF5b3V0IHRvIG9jY3VyIG9uIHx0aGlzfC4gVGhlIHNvbHV0aW9uIGlz
IHRvIG1vdmUgdGhhdCB0byBhCisgICAgLy8gcHJlLWxheW91dCBwaGFzZS4KKyAgICBpZiAob2xk
RGVwdGggIT0gbV9kZXB0aCkKICAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVj
YWxjKCk7Ci0gICAgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUXVvdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJR
dW90ZS5oCmluZGV4IGI2ZjNjNTU5OTI4YjVlZjQwNDlhOTM3OTQzNTIxNzBjMTZhYzIzOGYuLmNm
NzAzMmNhNzQxM2I5ZTQzYzJmMWRlMmJiNjA0YjA0ZDBjOTg5NjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJRdW90ZS5oCkBAIC0yMSw2ICsyMSw5IEBACiAjaWZuZGVmIFJlbmRlclF1
b3RlX2gKICNkZWZpbmUgUmVuZGVyUXVvdGVfaAogCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJRdW90ZXNEYXRhLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKIApAQCAt
MzAsMjQgKzMzLDI1IEBAIGNsYXNzIFJlbmRlclF1b3RlIDogcHVibGljIFJlbmRlclRleHQgewog
cHVibGljOgogICAgIFJlbmRlclF1b3RlKERvY3VtZW50KiwgY29uc3QgUXVvdGVUeXBlKTsKICAg
ICB2aXJ0dWFsIH5SZW5kZXJRdW90ZSgpOworICAgIHZvaWQgYXR0YWNoUXVvdGUoKTsKKyAgICB2
b2lkIGRldGFjaFF1b3RlKCk7CiAKLSAgICBzdGF0aWMgdm9pZCByZW5kZXJlclN1YnRyZWVBdHRh
Y2hlZChSZW5kZXJPYmplY3QqKTsKLSAgICBzdGF0aWMgdm9pZCByZW5kZXJlclJlbW92ZWRGcm9t
VHJlZShSZW5kZXJPYmplY3QqKTsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKIHByaXZhdGU6Ci0gICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUXVv
dGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBvcmlnaW5hbFRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
d2lsbEJlRGVzdHJveWVkKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5k
ZXJOYW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gIlJlbmRlclF1b3RlIjsgfTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNRdW90ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH07Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsVGV4dCgpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhm
bG9hdCBsZWFkV2lkdGgpIE9WRVJSSURFOworCiAgICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVz
RGF0YSgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlRGVwdGgoKTsKKyAgICBib29sIGlzQXR0YWNo
ZWQoKSB7IHJldHVybiBtX2F0dGFjaGVkOyB9CiAKICAgICBRdW90ZVR5cGUgbV90eXBlOwogICAg
IGludCBtX2RlcHRoOwogICAgIFJlbmRlclF1b3RlKiBtX25leHQ7CiAgICAgUmVuZGVyUXVvdGUq
IG1fcHJldmlvdXM7Ci0gICAgdm9pZCBwbGFjZVF1b3RlKCk7CisgICAgYm9vbCBtX2F0dGFjaGVk
OwogfTsKIAogaW5saW5lIFJlbmRlclF1b3RlKiB0b1JlbmRlclF1b3RlKFJlbmRlck9iamVjdCog
b2JqZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IDhiZDQ5
Y2NmYWUxYWRkYzlmNmNlNjVhMmM5YmZkOTI5NTczNzUxOWYuLjc1YjQ3MjU2ODUxNWM4OTNiYWIx
NDZhZjQ2YTc0NTkyM2JlZWE2M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2Rl
LCBGcmFtZVZpZXcqIHZpZXcpCiAgICAgLCBtX3BhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZChmYWxz
ZSkKICAgICAsIG1fbGF5b3V0U3RhdGUoMCkKICAgICAsIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291
bnQoMCkKLSAgICAsIG1fcmVuZGVyUXVvdGVDb3VudCgwKQorICAgICwgbV9yZW5kZXJRdW90ZUhl
YWQoMCkKICAgICAsIG1fcmVuZGVyQ291bnRlckNvdW50KDApCiB7CiAgICAgLy8gQ2xlYXIgb3Vy
IGFub255bW91cyBiaXQsIHNldCBiZWNhdXNlIFJlbmRlck9iamVjdCBhc3N1bWVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCAwNGE4MDZlOWJjYTU5MWUxNWE2NTdhMTI4
MWEyZTAxYmRlZGZiZDA4Li4wMGVhNTM3ZTRkZWZlZDIzZDcwNDlkYzc4NTk4YjhkNDYxZGMyYzY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTMyLDYgKzMyLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG93VGhyZWFkQ29udHJvbGxlcjsKIGNsYXNz
IFJlbmRlcldpZGdldDsKK2NsYXNzIFJlbmRlclF1b3RlOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOwpAQCAtMTk0LDEzICsx
OTUsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGaXhlZFBvc2l0aW9uZWRPYmplY3RzTmVl
ZExheW91dCgpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrIGFyb3VuZCBiZWNhdXNl
IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGNvdW50ZXJzIGFuZCBxdW90ZXMKKyAgICB2
b2lkIHNldFJlbmRlclF1b3RlSGVhZChSZW5kZXJRdW90ZSogaGVhZCkgeyBtX3JlbmRlclF1b3Rl
SGVhZCA9IGhlYWQ7IH0KKyAgICBSZW5kZXJRdW90ZSogcmVuZGVyUXVvdGVIZWFkKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJRdW90ZUhlYWQ7IH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
d29yayBhcm91bmQgYmVjYXVzZSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjb3VudGVy
cwogICAgIC8vIHJlcXVpcmVzIHdhbGtpbmcgdGhlIGVudGlyZSB0cmVlIHJlcGVhdGVkbHkgYW5k
IG1vc3QgcGFnZXMgZG9uJ3QgYWN0dWFsbHkgdXNlIGVpdGhlcgogICAgIC8vIGZlYXR1cmUgc28g
d2Ugc2hvdWxkbid0IHRha2UgdGhlIHBlcmZvcm1hbmNlIGhpdCB3aGVuIG5vdCBuZWVkZWQuIExv
bmcgdGVybSB3ZSBzaG91bGQKICAgICAvLyByZXdyaXRlIHRoZSBjb3VudGVyIGFuZCBxdW90ZXMg
Y29kZS4KLSAgICB2b2lkIGFkZFJlbmRlclF1b3RlKCkgeyBtX3JlbmRlclF1b3RlQ291bnQrKzsg
fQotICAgIHZvaWQgcmVtb3ZlUmVuZGVyUXVvdGUoKSB7IEFTU0VSVChtX3JlbmRlclF1b3RlQ291
bnQgPiAwKTsgbV9yZW5kZXJRdW90ZUNvdW50LS07IH0KLSAgICBib29sIGhhc1JlbmRlclF1b3Rl
cygpIHsgcmV0dXJuIG1fcmVuZGVyUXVvdGVDb3VudDsgfQogICAgIHZvaWQgYWRkUmVuZGVyQ291
bnRlcigpIHsgbV9yZW5kZXJDb3VudGVyQ291bnQrKzsgfQogICAgIHZvaWQgcmVtb3ZlUmVuZGVy
Q291bnRlcigpIHsgQVNTRVJUKG1fcmVuZGVyQ291bnRlckNvdW50ID4gMCk7IG1fcmVuZGVyQ291
bnRlckNvdW50LS07IH0KICAgICBib29sIGhhc1JlbmRlckNvdW50ZXJzKCkgeyByZXR1cm4gbV9y
ZW5kZXJDb3VudGVyQ291bnQ7IH0KQEAgLTMwMSw3ICszMDIsNyBAQCBwcml2YXRlOgogICAgIE93
blB0cjxGbG93VGhyZWFkQ29udHJvbGxlcj4gbV9mbG93VGhyZWFkQ29udHJvbGxlcjsKICAgICBS
ZWZQdHI8SW50ZXJ2YWxBcmVuYT4gbV9pbnRlcnZhbEFyZW5hOwogCi0gICAgdW5zaWduZWQgbV9y
ZW5kZXJRdW90ZUNvdW50OworICAgIFJlbmRlclF1b3RlKiBtX3JlbmRlclF1b3RlSGVhZDsKICAg
ICB1bnNpZ25lZCBtX3JlbmRlckNvdW50ZXJDb3VudDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCmluZGV4IDZmZmVhNGNiZmM1MTliMmNl
ZjIzYmIzYzk0YmUyNzJhZTg3ZDc3OWQuLjhlZDA4MDRmYTQxNzc4MGRlNTE2YzM2NjVlODdhOWU4
NDdkZDRkZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmNwcApAQCAtNTgwLDYgKzU4MCw5IEBAIFN0eWxlRGlmZmVyZW5jZSBSZW5kZXJTdHlsZTo6
ZGlmZihjb25zdCBSZW5kZXJTdHlsZSogb3RoZXIsIHVuc2lnbmVkJiBjaGFuZ2VkQ29uCiAgICAg
ICAgIHJldHVybiBTdHlsZURpZmZlcmVuY2VMYXlvdXQ7CiAgICAgfQogCisgICAgaWYgKCFRdW90
ZXNEYXRhOjplcXVhbHMocmFyZUluaGVyaXRlZERhdGEtPnF1b3Rlcy5nZXQoKSwgb3RoZXItPnJh
cmVJbmhlcml0ZWREYXRhLT5xdW90ZXMuZ2V0KCkpKQorICAgICAgICByZXR1cm4gU3R5bGVEaWZm
ZXJlbmNlTGF5b3V0OworCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBTVkdSZW5kZXJTdHlsZTo6
ZGlmZigpIG1pZ2h0IGhhdmUgcmV0dXJuZWQgU3R5bGVEaWZmZXJlbmNlUmVwYWludCwgZWcuIGlm
IGZpbGwgY2hhbmdlcy4KICAgICAvLyBJZiBlZy4gdGhlIGZvbnQtc2l6ZSBjaGFuZ2VkIGF0IHRo
ZSBzYW1lIHRpbWUsIHdlJ3JlIG5vdCBhbGxvd2VkIHRvIHJldHVybiBTdHlsZURpZmZlcmVuY2VS
ZXBhaW50LAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>