<?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>52642</bug_id>
          
          <creation_ts>2011-01-18 10:49:52 -0800</creation_ts>
          <short_desc>Get rid of firstDeepEditingPositionForNode and lastDeepEditingPositionForNode</short_desc>
          <delta_ts>2011-03-15 23:28:08 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>53409</dependson>
    
    <dependson>54986</dependson>
          <blocked>52099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>335932</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-01-18 10:49:52 -0800</bug_when>
    <thetext>firstDeepEditingPositionForNode and lastDeepEditingPositionForNode need to be removed because they produce legacy editing positions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353250</commentid>
    <comment_count>1</comment_count>
      <attachid>82877</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-17 17:00:53 -0800</bug_when>
    <thetext>Created attachment 82877
Work in progress

There are still various places in the code I&apos;m uncovering that handle legacy positions incorrectly. I&apos;m addressing them as they become apparent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355700</commentid>
    <comment_count>2</comment_count>
      <attachid>83415</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-22 16:45:57 -0800</bug_when>
    <thetext>Created attachment 83415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355701</commentid>
    <comment_count>3</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-22 16:47:24 -0800</bug_when>
    <thetext>This patch will fail without the changes in the bugs it&apos;s listed to depend on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358208</commentid>
    <comment_count>4</comment_count>
      <attachid>83881</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-25 14:51:08 -0800</bug_when>
    <thetext>Created attachment 83881
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358209</commentid>
    <comment_count>5</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-25 14:51:35 -0800</bug_when>
    <thetext>Re-uploading fixing the conflicts so it&apos;ll build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361423</commentid>
    <comment_count>6</comment_count>
      <attachid>83881</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-03 00:45:47 -0800</bug_when>
    <thetext>Comment on attachment 83881
Patch

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

Thanks for tackling this hard bug!  It seems like we need a few more iterations before landing this one.

&gt; Source/WebCore/dom/Position.h:194
&gt; +    return a.anchorNode() == b.anchorNode() &amp;&amp; a.deprecatedEditingOffset() == b.deprecatedEditingOffset() &amp;&amp; a.anchorType() == b.anchorType();

Should we also check whether values of m_isLegacyEditingPosition are same?

&gt; Source/WebCore/editing/TypingCommand.cpp:574
&gt; -            setEndingSelection(VisibleSelection(endingSelection().end(), lastDeepEditingPositionForNode(downstreamEnd.deprecatedNode()), DOWNSTREAM));
&gt; +            setEndingSelection(VisibleSelection(endingSelection().end(), positionAfterNode(downstreamEnd.deprecatedNode()), DOWNSTREAM));

Why not firstPositionInOrAfterNode?

&gt; Source/WebCore/editing/VisibleSelection.cpp:92
&gt; -    return VisibleSelection(firstDeepEditingPositionForNode(node), lastDeepEditingPositionForNode(node), DOWNSTREAM);
&gt; +    return VisibleSelection(firstPositionInNode(node), lastPositionInNode(node), DOWNSTREAM);

Is it always safe to return position inside the node?  It seems like this is always called for anchor element?  We should probably assert that so that we don&apos;t start generating positions inside other elements / nodes.

&gt; Source/WebCore/editing/VisibleSelection.cpp:501
&gt; -                p = lastDeepEditingPositionForNode(shadowAncestor);
&gt; +                p = lastPositionInNode(shadowAncestor);

Why does this make sense?  If I understand correctly, shadow ancestor is nodes like input, textarea, etc... that contains shadow DOM, right?  We should always position before or after that node.  r- because of this.

&gt; Source/WebCore/editing/htmlediting.cpp:281
&gt; +    if (comparePositions(position, firstPositionInNode(highestRoot)) == -1 &amp;&amp; highestRoot-&gt;isContentEditable())
&gt; +        return firstPositionInOrBeforeNode(highestRoot);

I don&apos;t get this change.  If you know you can always get a position inside the highestRoot, then why would you call firstPositionInOrBeforeNode when you return?  r- because of this.

&gt; Source/WebCore/editing/htmlediting.cpp:287
&gt; -            p = lastDeepEditingPositionForNode(shadowAncestor);
&gt; +            p = lastPositionInOrAfterNode(shadowAncestor);

I don&apos;t think it makes any sense to use a position inside a shadow ancestor.  You should always call positionAfterNode here.

&gt; Source/WebCore/editing/htmlediting.cpp:725
&gt; -    VisiblePosition firstInListChild(firstDeepEditingPositionForNode(listChildNode));
&gt; -    VisiblePosition lastInListChild(lastDeepEditingPositionForNode(listChildNode));
&gt; +    VisiblePosition firstInListChild(firstPositionInNode(listChildNode));
&gt; +    VisiblePosition lastInListChild(lastPositionInNode(listChildNode));

I don&apos;t think this is right. listChildNode can be BR or whatever node under ul / ol, and it&apos;s not necessarily li.

&gt; Source/WebCore/editing/visible_units.cpp:749
&gt; -        return firstDeepEditingPositionForNode(startNode);
&gt; +        return positionBeforeNode(startNode);

Why not firstPositionInOrBeforeNode?

&gt; Source/WebCore/editing/visible_units.cpp:808
&gt; -        return lastDeepEditingPositionForNode(startNode);
&gt; +        return positionAfterNode(startNode);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363588</commentid>
    <comment_count>7</comment_count>
      <attachid>83881</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-07 14:34:48 -0800</bug_when>
    <thetext>Comment on attachment 83881
Patch

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

&gt;&gt; Source/WebCore/dom/Position.h:194
&gt;&gt; +    return a.anchorNode() == b.anchorNode() &amp;&amp; a.deprecatedEditingOffset() == b.deprecatedEditingOffset() &amp;&amp; a.anchorType() == b.anchorType();
&gt; 
&gt; Should we also check whether values of m_isLegacyEditingPosition are same?

Perhaps we should only consider anchorType to matter if both are new positions? I certainly don&apos;t want to and m_isLegacyEditingPosition onto the expression. Two otherwise equivalent positions in a text node shouldn&apos;t be considered different only because one was created using a legacy method.

&gt;&gt; Source/WebCore/editing/TypingCommand.cpp:574
&gt;&gt; +            setEndingSelection(VisibleSelection(endingSelection().end(), positionAfterNode(downstreamEnd.deprecatedNode()), DOWNSTREAM));
&gt; 
&gt; Why not firstPositionInOrAfterNode?

This is only for tables, and we actually want to use the position after it, not inside.

&gt;&gt; Source/WebCore/editing/VisibleSelection.cpp:92
&gt;&gt; +    return VisibleSelection(firstPositionInNode(node), lastPositionInNode(node), DOWNSTREAM);
&gt; 
&gt; Is it always safe to return position inside the node?  It seems like this is always called for anchor element?  We should probably assert that so that we don&apos;t start generating positions inside other elements / nodes.

It should always be safe, and therefor is definitely worthy of an assertion, thanks :)

&gt;&gt; Source/WebCore/editing/VisibleSelection.cpp:501
&gt;&gt; +                p = lastPositionInNode(shadowAncestor);
&gt; 
&gt; Why does this make sense?  If I understand correctly, shadow ancestor is nodes like input, textarea, etc... that contains shadow DOM, right?  We should always position before or after that node.  r- because of this.

Good catch, you&apos;re right. I confused shadowAncestor with shadowRoot, which we never want to be before/after.

&gt;&gt; Source/WebCore/editing/visible_units.cpp:749
&gt;&gt; +        return positionBeforeNode(startNode);
&gt; 
&gt; Why not firstPositionInOrBeforeNode?

We don&apos;t want positions inside tables, images, or horizontal rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363606</commentid>
    <comment_count>8</comment_count>
      <attachid>83881</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-07 14:49:23 -0800</bug_when>
    <thetext>Comment on attachment 83881
Patch

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

&gt;&gt; Source/WebCore/editing/htmlediting.cpp:725
&gt;&gt; +    VisiblePosition lastInListChild(lastPositionInNode(listChildNode));
&gt; 
&gt; I don&apos;t think this is right. listChildNode can be BR or whatever node under ul / ol, and it&apos;s not necessarily li.

Correct me if I&apos;m wrong, but it appears enclosingListChild will only return li, ul, ol, and dl elements. This function is attempting to determine if there&apos;s an empty list item that contains the visible position, so I don&apos;t think we&apos;d want to compare that position to positions before or after that containing list/list item.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363627</commentid>
    <comment_count>9</comment_count>
      <attachid>83881</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-07 15:15:40 -0800</bug_when>
    <thetext>Comment on attachment 83881
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/htmlediting.cpp:725
&gt;&gt;&gt; +    VisiblePosition lastInListChild(lastPositionInNode(listChildNode));
&gt;&gt; 
&gt;&gt; I don&apos;t think this is right. listChildNode can be BR or whatever node under ul / ol, and it&apos;s not necessarily li.
&gt; 
&gt; Correct me if I&apos;m wrong, but it appears enclosingListChild will only return li, ul, ol, and dl elements. This function is attempting to determine if there&apos;s an empty list item that contains the visible position, so I don&apos;t think we&apos;d want to compare that position to positions before or after that containing list/list item.

Ryosuke is totally right. This can return non-list items. Fixing this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364202</commentid>
    <comment_count>10</comment_count>
      <attachid>85102</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-08 15:46:14 -0800</bug_when>
    <thetext>Created attachment 85102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367417</commentid>
    <comment_count>11</comment_count>
      <attachid>85102</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-14 18:27:45 -0700</bug_when>
    <thetext>Comment on attachment 85102
Patch

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

Great! Most of changes look good to me. I have a few questions:

&gt; Source/WebCore/dom/Position.cpp:167
&gt;          return Position(m_anchorNode, 0, PositionIsOffsetInAnchor);

Isn&apos;t this just firstPositionInNode?

&gt; Source/WebCore/dom/Position.cpp:328
&gt; -    return m_offset &lt;= 0;
&gt; +    return m_anchorType == PositionIsBeforeAnchor || m_offset &lt;= 0;

I don&apos;t think this is right.  If we&apos;re before/after node, then I don&apos;t think we&apos;re at first editing position in the (container) node.

&gt; Source/WebCore/dom/Position.cpp:335
&gt; -    return m_offset &gt;= lastOffsetForEditing(deprecatedNode());
&gt; +    return m_anchorType == PositionIsAfterAnchor || m_offset &gt;= lastOffsetForEditing(deprecatedNode());

Ditto.

&gt; Source/WebCore/dom/Position.cpp:786
&gt; -        return !m_offset &amp;&amp; !nodeIsUserSelectNone(deprecatedNode()-&gt;parentNode());
&gt; +        return !m_offset &amp;&amp; m_anchorType != PositionIsAfterAnchor &amp;&amp; !nodeIsUserSelectNone(deprecatedNode()-&gt;parentNode());

Why are we adding this check here?

&gt; Source/WebCore/editing/ApplyBlockElementCommand.cpp:196
&gt; -            start = positionBeforeNode(start.deprecatedNode());
&gt; +            start = firstPositionInNode(start.deprecatedNode());

How do we know that start can always contain a position?

&gt; Source/WebCore/editing/ApplyBlockElementCommand.cpp:227
&gt; -                start = positionBeforeNode(end.deprecatedNode()-&gt;previousSibling());
&gt; +                start = firstPositionInNode(end.deprecatedNode()-&gt;previousSibling());

Ditto about end.

&gt; Source/WebCore/editing/VisibleSelection.cpp:93
&gt; -    return VisibleSelection(firstDeepEditingPositionForNode(node), lastDeepEditingPositionForNode(node), DOWNSTREAM);
&gt; +    ASSERT(!editingIgnoresContent(node));
&gt; +    return VisibleSelection(firstPositionInNode(node), lastPositionInNode(node), DOWNSTREAM);

How do we know that it&apos;s okay to have a position inside node?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367430</commentid>
    <comment_count>12</comment_count>
      <attachid>85102</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-14 18:46:05 -0700</bug_when>
    <thetext>Comment on attachment 85102
Patch

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

Thanks for the review!

&gt;&gt; Source/WebCore/dom/Position.cpp:328
&gt;&gt; +    return m_anchorType == PositionIsBeforeAnchor || m_offset &lt;= 0;
&gt; 
&gt; I don&apos;t think this is right.  If we&apos;re before/after node, then I don&apos;t think we&apos;re at first editing position in the (container) node.

This definitely deserves a fixme and bug to get rid of at[First/last]EditingPositionForNode.

&gt;&gt; Source/WebCore/dom/Position.cpp:786
&gt;&gt; +        return !m_offset &amp;&amp; m_anchorType != PositionIsAfterAnchor &amp;&amp; !nodeIsUserSelectNone(deprecatedNode()-&gt;parentNode());
&gt; 
&gt; Why are we adding this check here?

After positions aren&apos;t considered candidates, but through javascript br&apos;s can still have children.

I&apos;ll add a comment.

&gt;&gt; Source/WebCore/editing/ApplyBlockElementCommand.cpp:196
&gt;&gt; +            start = firstPositionInNode(start.deprecatedNode());
&gt; 
&gt; How do we know that start can always contain a position?

This is a mistake. It should have been firstPositionInOrBefore, thanks!

&gt;&gt; Source/WebCore/editing/ApplyBlockElementCommand.cpp:227
&gt;&gt; +                start = firstPositionInNode(end.deprecatedNode()-&gt;previousSibling());
&gt; 
&gt; Ditto about end.

Ditto :D

&gt;&gt; Source/WebCore/editing/VisibleSelection.cpp:93
&gt;&gt; +    return VisibleSelection(firstPositionInNode(node), lastPositionInNode(node), DOWNSTREAM);
&gt; 
&gt; How do we know that it&apos;s okay to have a position inside node?

That&apos;s why I added the assert. Currently all callers ensure this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367437</commentid>
    <comment_count>13</comment_count>
      <attachid>85758</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-14 19:05:54 -0700</bug_when>
    <thetext>Created attachment 85758
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367450</commentid>
    <comment_count>14</comment_count>
      <attachid>85758</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-14 19:22:12 -0700</bug_when>
    <thetext>Comment on attachment 85758
Patch

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

&gt; Source/WebCore/dom/Position.cpp:328
&gt; -    return m_offset &lt;= 0;
&gt; +    return m_anchorType == PositionIsBeforeAnchor || m_offset &lt;= 0;

Wait, didn&apos;t you say you&apos;ll add comment here?

&gt; Source/WebCore/dom/Position.cpp:786
&gt; -        return !m_offset &amp;&amp; !nodeIsUserSelectNone(deprecatedNode()-&gt;parentNode());
&gt; +        return !m_offset &amp;&amp; m_anchorType != PositionIsAfterAnchor &amp;&amp; !nodeIsUserSelectNone(deprecatedNode()-&gt;parentNode());

Ditto.

&gt; Source/WebCore/editing/htmlediting.cpp:302
&gt; +        return lastPositionInOrAfterNode(highestRoot);

?? Why lastPositionInOrAfterNode?  It should be lastPositionInNode, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367757</commentid>
    <comment_count>15</comment_count>
      <attachid>85758</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-15 10:33:30 -0700</bug_when>
    <thetext>Comment on attachment 85758
Patch

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

&gt;&gt; Source/WebCore/dom/Position.cpp:328
&gt;&gt; +    return m_anchorType == PositionIsBeforeAnchor || m_offset &lt;= 0;
&gt; 
&gt; Wait, didn&apos;t you say you&apos;ll add comment here?

I put a fixme in the header

&gt;&gt; Source/WebCore/dom/Position.cpp:786
&gt;&gt; +        return !m_offset &amp;&amp; m_anchorType != PositionIsAfterAnchor &amp;&amp; !nodeIsUserSelectNone(deprecatedNode()-&gt;parentNode());
&gt; 
&gt; Ditto.

I thought about it more and thought this code really did speak for itself, as writing a comment seemed to just be rehashing.

&gt;&gt; Source/WebCore/editing/htmlediting.cpp:302
&gt;&gt; +        return lastPositionInOrAfterNode(highestRoot);
&gt; 
&gt; ?? Why lastPositionInOrAfterNode?  It should be lastPositionInNode, right?

Good catch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367765</commentid>
    <comment_count>16</comment_count>
      <attachid>85758</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 10:41:10 -0700</bug_when>
    <thetext>Comment on attachment 85758
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Position.cpp:786
&gt;&gt;&gt; +        return !m_offset &amp;&amp; m_anchorType != PositionIsAfterAnchor &amp;&amp; !nodeIsUserSelectNone(deprecatedNode()-&gt;parentNode());
&gt;&gt; 
&gt;&gt; Ditto.
&gt; 
&gt; I thought about it more and thought this code really did speak for itself, as writing a comment seemed to just be rehashing.

I still think we need a FIXME here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367847</commentid>
    <comment_count>17</comment_count>
      <attachid>85841</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-15 12:14:25 -0700</bug_when>
    <thetext>Created attachment 85841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367850</commentid>
    <comment_count>18</comment_count>
      <attachid>85841</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 12:28:23 -0700</bug_when>
    <thetext>Comment on attachment 85841
Patch

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

&gt; Source/WebCore/dom/Position.cpp:244
&gt; +    // FIXME: Explicitly handle before/after positions

I don&apos;t think these comments are valuable.  It&apos;s clear from the fact it calls deprecatedEditingOffset().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367860</commentid>
    <comment_count>19</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-15 12:37:07 -0700</bug_when>
    <thetext>Committed r81165: &lt;http://trac.webkit.org/changeset/81165&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368215</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-15 23:28:08 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/81165 might have broken GTK Linux 32-bit Debug and GTK Linux 64-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82877</attachid>
            <date>2011-02-17 17:00:53 -0800</date>
            <delta_ts>2011-02-22 16:45:55 -0800</delta_ts>
            <desc>Work in progress</desc>
            <filename>52642</filename>
            <type>text/plain</type>
            <size>21454</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAJKHJldmlzaW9uIDc4
ODQ5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50
QmVmb3JlTm9kZShtX25vZGVBZnRlclBvc2l0aW9uSW5BbmNob3IpOwogICAgIH0KICAgICBpZiAo
bV9hbmNob3JOb2RlLT5oYXNDaGlsZE5vZGVzKCkpCi0gICAgICAgIHJldHVybiBsYXN0RGVlcEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUobV9hbmNob3JOb2RlKTsKKyAgICAgICAgcmV0dXJuIGxhc3RQ
b3NpdGlvbkluT3JBZnRlck5vZGUobV9hbmNob3JOb2RlKTsKICAgICByZXR1cm4gUG9zaXRpb24o
bV9hbmNob3JOb2RlLCBtX29mZnNldEluQW5jaG9yKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmgJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQAogewogICAgIC8vIEZJWE1FOiBJbiA8
ZGl2PjxpbWc+PC9kaXY+IFtkaXYsIDBdICE9IFtpbWcsIDBdIGV2ZW4gdGhvdWdoIG1vc3Qgb2Yg
dGhlCiAgICAgLy8gZWRpdGluZyBjb2RlIHdpbGwgdHJlYXQgdGhlbSBhcyBpZGVudGljYWwuCi0g
ICAgcmV0dXJuIGEuYW5jaG9yTm9kZSgpID09IGIuYW5jaG9yTm9kZSgpICYmIGEuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSA9PSBiLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgcmV0
dXJuIGEuYW5jaG9yTm9kZSgpID09IGIuYW5jaG9yTm9kZSgpICYmIGEuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSA9PSBiLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgJiYgYS5hbmNob3JUeXBl
KCkgPT0gYi5hbmNob3JUeXBlKCk7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
UG9zaXRpb24mIGEsIGNvbnN0IFBvc2l0aW9uJiBiKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCShyZXZpc2lvbiA3ODg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMiArMTU0LDEyIEBACiAgICAgICAgIHJldHVybiBQb3Np
dGlvbigpOwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBvbmx5IGJlIG5lY2Vzc2Fy
eSBmb3IgbGVnYWN5IHBvc2l0aW9ucywgYnV0IGlzIGFsc28gbmVlZGVkIGZvciBwb3NpdGlvbnMg
YmVmb3JlIGFuZCBhZnRlciBUYWJsZXMKLSAgICBpZiAobV9vZmZzZXQgPD0gMCkgeworICAgIGlm
IChtX29mZnNldCA8PSAwICYmIG1fYW5jaG9yVHlwZSAhPSBQb3NpdGlvbklzQWZ0ZXJBbmNob3Ip
IHsKICAgICAgICAgaWYgKG1fYW5jaG9yTm9kZS0+cGFyZW50Tm9kZSgpICYmIChlZGl0aW5nSWdu
b3Jlc0NvbnRlbnQobV9hbmNob3JOb2RlLmdldCgpKSB8fCBpc1RhYmxlRWxlbWVudChtX2FuY2hv
ck5vZGUuZ2V0KCkpKSkKICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3Jl
Tm9kZShtX2FuY2hvck5vZGUuZ2V0KCkpOwogICAgICAgICByZXR1cm4gUG9zaXRpb24obV9hbmNo
b3JOb2RlLCAwLCBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogICAgIH0KLSAgICBpZiAoIW1f
YW5jaG9yTm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fb2Zmc2V0KSA9PSBtX2FuY2hvck5vZGUtPmNoaWxkTm9kZUNvdW50KCkKKyAgICBpZiAoIW1f
YW5jaG9yTm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkgJiYgKG1fYW5jaG9yVHlwZSA9PSBQb3Np
dGlvbklzQWZ0ZXJBbmNob3IgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb2Zmc2V0KSA9PSBt
X2FuY2hvck5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCiAgICAgICAgICYmIChlZGl0aW5nSWdub3Jl
c0NvbnRlbnQobV9hbmNob3JOb2RlLmdldCgpKSB8fCBpc1RhYmxlRWxlbWVudChtX2FuY2hvck5v
ZGUuZ2V0KCkpKSkgewogICAgICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZSht
X2FuY2hvck5vZGUuZ2V0KCkpOwogICAgIH0KQEAgLTIzNCwxNCArMjM0LDE0IEBACiAgICAgaWYg
KCFuKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgCi0gICAgaW50IG8gPSBtX29mZnNldDsK
KyAgICBpbnQgbyA9IG1fYW5jaG9yVHlwZSAhPSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBtX29m
ZnNldCA6IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG1fYW5jaG9yTm9kZS5nZXQoKSk7CiAgICAgLy8g
RklYTUU6IE5lZ2F0aXZlIG9mZnNldHMgc2hvdWxkbid0IGJlIGFsbG93ZWQuIFdlIHNob3VsZCBj
YXRjaCB0aGlzIGVhcmxpZXIuCiAgICAgQVNTRVJUKG8gPj0gMCk7CiAKICAgICBpZiAobyA+IDAp
IHsKICAgICAgICAgTm9kZSogY2hpbGQgPSBuLT5jaGlsZE5vZGUobyAtIDEpOwogICAgICAgICBp
ZiAoY2hpbGQpCi0gICAgICAgICAgICByZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKGNoaWxkKTsKKyAgICAgICAgICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2Rl
KGNoaWxkKTsKIAogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgY2hpbGQgbWlnaHQg
YmUgMDoKICAgICAgICAgLy8gICAxKSBUaGUgbm9kZSBpcyBub2RlIGxpa2UgYSB0ZXh0IG5vZGUg
dGhhdCBpcyBub3QgYW4gZWxlbWVudCwgYW5kIHRoZXJlZm9yZSBoYXMgbm8gY2hpbGRyZW4uCkBA
IC0yNzMsMTQgKzI3MywxNCBAQAogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIAotICAgIGludCBvID0gbV9vZmZzZXQ7CisgICAgaW50IG8gPSBtX2FuY2hvclR5cGUgIT0g
UG9zaXRpb25Jc0FmdGVyQW5jaG9yID8gbV9vZmZzZXQgOiBsYXN0T2Zmc2V0Rm9yRWRpdGluZyht
X2FuY2hvck5vZGUuZ2V0KCkpOwogICAgIC8vIEZJWE1FOiBOZWdhdGl2ZSBvZmZzZXRzIHNob3Vs
ZG4ndCBiZSBhbGxvd2VkLiBXZSBzaG91bGQgY2F0Y2ggdGhpcyBlYXJsaWVyLgogICAgIEFTU0VS
VChvID49IDApOwogCiAgICAgTm9kZSogY2hpbGQgPSBuLT5jaGlsZE5vZGUobyk7CiAgICAgaWYg
KGNoaWxkIHx8ICghbi0+aGFzQ2hpbGROb2RlcygpICYmIG8gPCBsYXN0T2Zmc2V0Rm9yRWRpdGlu
ZyhuKSkpIHsKICAgICAgICAgaWYgKGNoaWxkKQotICAgICAgICAgICAgcmV0dXJuIGZpcnN0RGVl
cEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoY2hpbGQpOworICAgICAgICAgICAgcmV0dXJuIGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShjaGlsZCk7CiAKICAgICAgICAgLy8gVGhlcmUgYXJlIHR3
byByZWFzb25zIGNoaWxkIG1pZ2h0IGJlIDA6CiAgICAgICAgIC8vICAgMSkgVGhlIG5vZGUgaXMg
bm9kZSBsaWtlIGEgdGV4dCBub2RlIHRoYXQgaXMgbm90IGFuIGVsZW1lbnQsIGFuZCB0aGVyZWZv
cmUgaGFzIG5vIGNoaWxkcmVuLgpAQCAtMzE2LDE0ICszMTYsMTQgQEAKIHsKICAgICBpZiAoaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX29mZnNldCA8PSAwOwor
ICAgIHJldHVybiBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0JlZm9yZUFuY2hvciB8fCBtX29m
ZnNldCA8PSAwOwogfQogCiBib29sIFBvc2l0aW9uOjphdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIHJldHVybiBtX29mZnNldCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhub2RlKCkpOworICAg
IHJldHVybiBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yIHx8IG1fb2Zmc2V0
ID49IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG5vZGUoKSk7CiB9CiAKIC8vIEEgcG9zaXRpb24gaXMg
Y29uc2lkZXJlZCBhdCBlZGl0aW5nIGJvdW5kYXJ5IGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlz
IHRydWU6CkBAIC01NjEsNyArNTYxLDcgQEAKICAgICAgICAgLy8gUmV0dXJuIHBvc2l0aW9uIGFm
dGVyIHRhYmxlcyBhbmQgbm9kZXMgd2hpY2ggaGF2ZSBjb250ZW50IHRoYXQgY2FuIGJlIGlnbm9y
ZWQuCiAgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY3VycmVudE5vZGUpIHx8IGlz
VGFibGVFbGVtZW50KGN1cnJlbnROb2RlKSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3Mu
YXRFbmRPZk5vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKGN1cnJlbnROb2RlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRp
b25BZnRlck5vZGUoY3VycmVudE5vZGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIApAQCAtNzcyLDcgKzc3Miw3IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChyZW5kZXJlci0+aXNCUigpKQotICAgICAgICByZXR1cm4gIW1fb2Zmc2V0ICYmICFub2RlSXNV
c2VyU2VsZWN0Tm9uZShub2RlKCktPnBhcmVudE5vZGUoKSk7CisgICAgICAgIHJldHVybiAhbV9v
ZmZzZXQgJiYgbV9hbmNob3JUeXBlICE9IFBvc2l0aW9uSXNBZnRlckFuY2hvciAmJiAhbm9kZUlz
VXNlclNlbGVjdE5vbmUobm9kZSgpLT5wYXJlbnROb2RlKCkpOwogCiAgICAgaWYgKHJlbmRlcmVy
LT5pc1RleHQoKSkKICAgICAgICAgcmV0dXJuICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkp
ICYmIGluUmVuZGVyZWRUZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25J
dGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJh
dG9yLmgJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRl
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiTm9k
ZS5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NSw5ICs0NiwxMSBAQAogCiAgICAgUG9zaXRpb25J
dGVyYXRvcihjb25zdCBQb3NpdGlvbiYgcG9zKQogICAgICAgICA6IG1fYW5jaG9yTm9kZShwb3Mu
YW5jaG9yTm9kZSgpKQotICAgICAgICAsIG1fbm9kZUFmdGVyUG9zaXRpb25JbkFuY2hvcihtX2Fu
Y2hvck5vZGUtPmNoaWxkTm9kZShwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkpCisgICAg
ICAgICwgbV9ub2RlQWZ0ZXJQb3NpdGlvbkluQW5jaG9yKHBvcy5hbmNob3JUeXBlKCkgIT0gUG9z
aXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvciA/IG1fYW5jaG9yTm9kZS0+Y2hpbGROb2RlKHBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSA6IDApCiAgICAgICAgICwgbV9vZmZzZXRJbkFu
Y2hvcihtX25vZGVBZnRlclBvc2l0aW9uSW5BbmNob3IgPyAwIDogcG9zLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpCiAgICAgeworICAgICAgICBpZiAocG9zLmFuY2hvclR5cGUoKSA9PSBQb3Np
dGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yKQorICAgICAgICAgICAgbV9vZmZzZXRJbkFuY2hv
ciA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG1fYW5jaG9yTm9kZSk7CiAgICAgfQogICAgIG9wZXJh
dG9yIFBvc2l0aW9uKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0TGlzdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGlzdENvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODg0OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsOCAr
MjU3LDggQEAKICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQ7CiAgICAgVmlzaWJsZVBvc2l0aW9u
IGVuZDsKICAgICBpZiAobGlzdENoaWxkTm9kZS0+aGFzVGFnTmFtZShsaVRhZykpIHsKLSAgICAg
ICAgc3RhcnQgPSBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxpc3RDaGlsZE5vZGUp
OwotICAgICAgICBlbmQgPSBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGlzdENoaWxk
Tm9kZSk7CisgICAgICAgIHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluTm9kZShsaXN0Q2hpbGROb2Rl
KTsKKyAgICAgICAgZW5kID0gbGFzdFBvc2l0aW9uSW5Ob2RlKGxpc3RDaGlsZE5vZGUpOwogICAg
ICAgICBuZXh0TGlzdENoaWxkID0gbGlzdENoaWxkTm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAg
ICAgcHJldmlvdXNMaXN0Q2hpbGQgPSBsaXN0Q2hpbGROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsK
ICAgICB9IGVsc2UgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNjgsOCAr
MTE2OCw4IEBACiAKICAgICAvLyBEb24ndCBhdm9pZCBibG9jayBsZXZlbCBhbmNob3JzLCBiZWNh
dXNlIHRoYXQgd291bGQgaW5zZXJ0IGNvbnRlbnQgaW50byB0aGUgd3JvbmcgcGFyYWdyYXBoLgog
ICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgIWlzQmxvY2soZW5jbG9zaW5nQW5jaG9yKSkgewot
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkFuY2hvcihmaXJzdERlZXBFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKGVuY2xvc2luZ0FuY2hvcikpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
bGFzdEluQW5jaG9yKGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShlbmNsb3NpbmdBbmNo
b3IpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5BbmNob3IoZmlyc3RQb3NpdGlv
bkluTm9kZShlbmNsb3NpbmdBbmNob3IpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJ
bkFuY2hvcihsYXN0UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7CiAgICAgICAgIC8v
IElmIHZpc3VhbGx5IGp1c3QgYWZ0ZXIgdGhlIGFuY2hvciwgaW5zZXJ0ICppbnNpZGUqIHRoZSBh
bmNob3IgdW5sZXNzIGl0J3MgdGhlIGxhc3QKICAgICAgICAgLy8gVmlzaWJsZVBvc2l0aW9uIGlu
IHRoZSBkb2N1bWVudCwgdG8gbWF0Y2ggTlNUZXh0Vmlldy4KICAgICAgICAgaWYgKHZpc2libGVQ
b3MgPT0gbGFzdEluQW5jaG9yKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBA
QAogCiBWaXNpYmxlU2VsZWN0aW9uIFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250
ZW50c09mTm9kZShOb2RlKiBub2RlKQogewotICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKGZp
cnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSksIGxhc3REZWVwRWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVTZWxlY3Rp
b24oZmlyc3RQb3NpdGlvbkluTm9kZShub2RlKSwgbGFzdFBvc2l0aW9uSW5Ob2RlKG5vZGUpLCBE
T1dOU1RSRUFNKTsKIH0KIAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbikKQEAgLTQ5OCwxMyArNDk4LDEzIEBACiAgICAgICAgICAgICBQb3Np
dGlvbiBwID0gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZW5kKTsKICAgICAg
ICAgICAgIE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gZW5kUm9vdCA/IGVuZFJvb3QtPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpIDogMDsKICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYmIGVuZFJvb3Qg
JiYgKHNoYWRvd0FuY2VzdG9yICE9IGVuZFJvb3QpKQotICAgICAgICAgICAgICAgIHAgPSBsYXN0
RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOworICAgICAgICAgICAg
ICAgIHAgPSBsYXN0UG9zaXRpb25Jbk5vZGUoc2hhZG93QW5jZXN0b3IpOwogICAgICAgICAgICAg
d2hpbGUgKHAuaXNOb3ROdWxsKCkgJiYgIShsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKHAubm9kZSgp
KSA9PSBiYXNlRWRpdGFibGVBbmNlc3RvciAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApKSkgewog
ICAgICAgICAgICAgICAgIE5vZGUqIHJvb3QgPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihwKTsK
ICAgICAgICAgICAgICAgICBzaGFkb3dBbmNlc3RvciA9IHJvb3QgPyByb290LT5zaGFkb3dBbmNl
c3Rvck5vZGUoKSA6IDA7CiAgICAgICAgICAgICAgICAgcCA9IGlzQXRvbWljTm9kZShwLm5vZGUo
KSkgPyBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShwLm5vZGUoKSkgOiBwcmV2aW91c1Zpc3Vh
bGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CiAgICAgICAgICAgICAgICAgaWYgKHAuaXNOdWxsKCkg
JiYgKHNoYWRvd0FuY2VzdG9yICE9IHJvb3QpKQotICAgICAgICAgICAgICAgICAgICBwID0gbGFz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKKyAgICAgICAgICAg
ICAgICAgICAgcCA9IGxhc3RQb3NpdGlvbkluTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMocCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cAkocmV2aXNpb24gNzg4NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBACiBzdGF0aWMg
Ym9vbCBpc1RhYmxlQ2VsbEVtcHR5KE5vZGUqIGNlbGwpCiB7CiAgICAgQVNTRVJUKGlzVGFibGVD
ZWxsKGNlbGwpKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0RGVlcEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUoY2VsbCkpID09IFZpc2libGVQb3NpdGlvbihsYXN0RGVlcEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUoY2VsbCkpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQ
b3NpdGlvbkluTm9kZShjZWxsKSkgPT0gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9k
ZShjZWxsKSk7CiB9CiAKIHN0YXRpYyBib29sIGlzVGFibGVSb3dFbXB0eShOb2RlKiByb3cpCkBA
IC0zNzgsOSArMzc4LDkgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAo
bm9kZSA9PSBtX3N0YXJ0QmxvY2sgJiYgIWlzRW5kT2ZCbG9jayhWaXNpYmxlUG9zaXRpb24oZmly
c3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShtX3N0YXJ0QmxvY2suZ2V0KCkpKS5wcmV2aW91
cygpKSkKKyAgICBpZiAobm9kZSA9PSBtX3N0YXJ0QmxvY2sgJiYgIWlzRW5kT2ZCbG9jayhWaXNp
YmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShtX3N0YXJ0QmxvY2suZ2V0KCkpKS5wcmV2
aW91cygpKSkKICAgICAgICAgbV9uZWVkUGxhY2Vob2xkZXIgPSB0cnVlOwotICAgIGVsc2UgaWYg
KG5vZGUgPT0gbV9lbmRCbG9jayAmJiAhaXNTdGFydE9mQmxvY2soVmlzaWJsZVBvc2l0aW9uKGxh
c3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShtX3N0YXJ0QmxvY2suZ2V0KCkpKS5uZXh0KCkp
KQorICAgIGVsc2UgaWYgKG5vZGUgPT0gbV9lbmRCbG9jayAmJiAhaXNTdGFydE9mQmxvY2soVmlz
aWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShtX3N0YXJ0QmxvY2suZ2V0KCkpKS5uZXh0
KCkpKQogICAgICAgICBtX25lZWRQbGFjZWhvbGRlciA9IHRydWU7CiAgICAgCiAgICAgLy8gRklY
TUU6IFVwZGF0ZSB0aGUgZW5kcG9pbnRzIG9mIHRoZSByYW5nZSBiZWluZyBkZWxldGVkLgpAQCAt
NDE1LDcgKzQxNSw3IEBACiAKIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2Vu
ZXJhbERlbGV0ZSgpCiB7Ci0gICAgaW50IHN0YXJ0T2Zmc2V0ID0gbV91cHN0cmVhbVN0YXJ0LmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbV91cHN0cmVh
bVN0YXJ0LmFuY2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yID8g
bV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgOiBsYXN0T2Zmc2V0Rm9y
RWRpdGluZyhtX3Vwc3RyZWFtU3RhcnQuYW5jaG9yTm9kZSgpKTsKICAgICBOb2RlKiBzdGFydE5v
ZGUgPSBtX3Vwc3RyZWFtU3RhcnQubm9kZSgpOwogICAgIAogICAgIC8vIE5ldmVyIHJlbW92ZSB0
aGUgc3RhcnQgYmxvY2sgdW5sZXNzIGl0J3MgYSB0YWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSB3b24n
dCBtZXJnZSBjb250ZW50IGluLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCShyZXZpc2lvbiA3ODg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlw
aW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3MSw3ICs1NzEsNyBAQAogICAgICAg
ICAgICAgZG93bnN0cmVhbUVuZCA9IHZpc2libGVFbmQubmV4dCh0cnVlKS5kZWVwRXF1aXZhbGVu
dCgpLmRvd25zdHJlYW0oKTsKICAgICAgICAgLy8gV2hlbiBkZWxldGluZyB0YWJsZXM6IFNlbGVj
dCB0aGUgdGFibGUgZmlyc3QsIHRoZW4gcGVyZm9ybSB0aGUgZGVsZXRpb24KICAgICAgICAgaWYg
KGRvd25zdHJlYW1FbmQubm9kZSgpICYmIGRvd25zdHJlYW1FbmQubm9kZSgpLT5yZW5kZXJlcigp
ICYmIGRvd25zdHJlYW1FbmQubm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgIWRvd25z
dHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkgewotICAgICAgICAgICAgc2V0RW5k
aW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIGxh
c3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShkb3duc3RyZWFtRW5kLm5vZGUoKSksIERPV05T
VFJFQU0pKTsKKyAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLCBwb3NpdGlvbkFmdGVyTm9kZShkb3duc3RyZWFtRW5k
Lm5vZGUoKSksIERPV05TVFJFQU0pKTsKICAgICAgICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29t
bWFuZChGb3J3YXJkRGVsZXRlS2V5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA3
ODg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc0Niw3ICs3NDYsNyBAQAogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKCk7CiAgICAgCiAgICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxlSW1hZ2VPckhS
KHN0YXJ0Tm9kZSkpCi0gICAgICAgIHJldHVybiBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKHN0YXJ0Tm9kZSk7CisgICAgICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUoc3RhcnRO
b2RlKTsKIAogICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUp
OwogCkBAIC04MDUsNyArODA1LDcgQEAKICAgICBOb2RlKiBzdGFydE5vZGUgPSBwLm5vZGUoKTsK
IAogICAgIGlmIChpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihzdGFydE5vZGUp
KQotICAgICAgICByZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHN0YXJ0Tm9k
ZSk7CisgICAgICAgIHJldHVybiBwb3NpdGlvbkFmdGVyTm9kZShzdGFydE5vZGUpOwogICAgIAog
ICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpOwogICAgIE5v
ZGUgKnN0YXlJbnNpZGVCbG9jayA9IHN0YXJ0QmxvY2s7CkBAIC0xMDA1LDcgKzEwMDUsNyBAQAog
ICAgIGlmICghaGlnaGVzdFJvb3QpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsK
IAotICAgIHJldHVybiBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290
KTsKKyAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCk7CiB9CiAKIFZp
c2libGVQb3NpdGlvbiBlbmRPZkVkaXRhYmxlQ29udGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHZpc2libGVQb3NpdGlvbikKQEAgLTEwMTQsNyArMTAxNCw3IEBACiAgICAgaWYgKCFoaWdoZXN0
Um9vdCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgcmV0dXJuIGxh
c3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7CisgICAgcmV0dXJuIGxh
c3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldExlYWZC
b3hlc0luTG9naWNhbE9yZGVyKFJvb3RJbmxpbmVCb3gqIHJvb3RCb3gsIFZlY3RvcjxJbmxpbmVC
b3gqPiYgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNzg4NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTM2LDEwICs1MzYsMTAgQEAKIHsKICAgICBOb2RlKiBsYXN0Tm9k
ZSA9IG1fbGFzdExlYWZJbnNlcnRlZC5nZXQoKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMg
aGFjayBoZXJlPyAgV2hhdCdzIHNwZWNpYWwgYWJvdXQgPHNlbGVjdD4gdGFncz8KLSAgICBOb2Rl
KiBlbmNsb3NpbmdTZWxlY3QgPSBlbmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJzdERlZXBFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKGxhc3ROb2RlKSwgc2VsZWN0VGFnKTsKKyAgICBOb2RlKiBlbmNsb3Np
bmdTZWxlY3QgPSBlbmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5v
ZGUobGFzdE5vZGUpLCBzZWxlY3RUYWcpOwogICAgIGlmIChlbmNsb3NpbmdTZWxlY3QpCiAgICAg
ICAgIGxhc3ROb2RlID0gZW5jbG9zaW5nU2VsZWN0OwotICAgIHJldHVybiBsYXN0RGVlcEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUobGFzdE5vZGUpOworICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk9y
QWZ0ZXJOb2RlKGxhc3ROb2RlKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gNzg4NDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4
LDEzICsyNzgsMTMgQEAKIHsKICAgICAvLyBwb3NpdGlvbiBmYWxscyBiZWZvcmUgaGlnaGVzdFJv
b3QuCiAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb24sIGZpcnN0RGVlcEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpKSA9PSAtMSAmJiBoaWdoZXN0Um9vdC0+aXNDb250
ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZv
ck5vZGUoaGlnaGVzdFJvb3QpOworICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluT3JCZWZv
cmVOb2RlKGhpZ2hlc3RSb290KTsKIAogICAgIFBvc2l0aW9uIHAgPSBwb3NpdGlvbjsKICAgICAK
ICAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3IgPSBwLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JO
b2RlKCkpCiAgICAgICAgIGlmIChzaGFkb3dBbmNlc3RvciAhPSBwLm5vZGUoKSkKLSAgICAgICAg
ICAgIHAgPSBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOwor
ICAgICAgICAgICAgcCA9IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoc2hhZG93QW5jZXN0b3Ip
OwogICAgIAogICAgIHdoaWxlIChwLm5vZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApICYm
IHAubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCiAgICAgICAgIHAgPSBpc0F0
b21pY05vZGUocC5ub2RlKCkpID8gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShwLm5vZGUoKSkg
OiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKQEAgLTI5OCwxNCArMjk4LDE0IEBA
CiBWaXNpYmxlUG9zaXRpb24gbGFzdEVkaXRhYmxlUG9zaXRpb25CZWZvcmVQb3NpdGlvbkluUm9v
dChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIE5vZGUqIGhpZ2hlc3RSb290KQogewogICAgIC8v
IFdoZW4gcG9zaXRpb24gZmFsbHMgYWZ0ZXIgaGlnaGVzdFJvb3QsIHRoZSByZXN1bHQgaXMgZWFz
eSB0byBjb21wdXRlLgotICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHBvc2l0aW9uLCBsYXN0RGVl
cEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpKSA9PSAxKQotICAgICAgICByZXR1
cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KTsKKyAgICBpZiAo
Y29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgbGFzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290
KSkgPT0gMSkKKyAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoaGlnaGVz
dFJvb3QpOwogCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwogICAgIAogICAgIGlmIChOb2Rl
KiBzaGFkb3dBbmNlc3RvciA9IHAubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkKICAgICAg
ICAgaWYgKHNoYWRvd0FuY2VzdG9yICE9IHAubm9kZSgpKQotICAgICAgICAgICAgcCA9IGZpcnN0
RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOworICAgICAgICAgICAg
cCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAgCiAg
ICAgd2hpbGUgKHAubm9kZSgpICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkgJiYgcC5ub2RlKCkt
PmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgcCA9IGlzQXRvbWljTm9kZShw
Lm5vZGUoKSkgPyBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShwLm5vZGUoKSkgOiBwcmV2aW91
c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CkBAIC03MjEsOCArNzIxLDggQEAKICAgICBp
ZiAoIWxpc3RDaGlsZE5vZGUgfHwgIWlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSB8fCAh
aXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBW
aXNpYmxlUG9zaXRpb24gZmlyc3RJbkxpc3RDaGlsZChmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKGxpc3RDaGlsZE5vZGUpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gbGFzdEluTGlzdENo
aWxkKGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0Q2hpbGROb2RlKSk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5MaXN0Q2hpbGQoZmlyc3RQb3NpdGlvbkluTm9kZShsaXN0
Q2hpbGROb2RlKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkxpc3RDaGlsZChsYXN0UG9z
aXRpb25Jbk5vZGUobGlzdENoaWxkTm9kZSkpOwogCiAgICAgaWYgKGZpcnN0SW5MaXN0Q2hpbGQg
IT0gdmlzaWJsZVBvcyB8fCBsYXN0SW5MaXN0Q2hpbGQgIT0gdmlzaWJsZVBvcykKICAgICAgICAg
cmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0Nv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlu
ZUJyZWFrQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcg
KzE3Miw3IEBACiAgICAgICAgIC8vIGxlYXZlcyBhbmQgdGhlbiBjb21lcyBiYWNrLCBuZXcgaW5w
dXQgd2lsbCBoYXZlIHRoZSByaWdodCBzdHlsZS4KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBhbHdheXMgYXBwbHkgdGhlIHR5cGluZyBzdHlsZSB0byB0aGUgbGluZSBicmVhayBoZXJl
LAogICAgICAgICAvLyBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU3OTQ0NjI+LgotICAgICAgICBhcHBs
eVN0eWxlKHR5cGluZ1N0eWxlLmdldCgpLCBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2Rl
KG5vZGVUb0luc2VydC5nZXQoKSksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2Rl
VG9JbnNlcnQuZ2V0KCkpKTsKKyAgICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHlsZS5nZXQoKSwg
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGVUb0luc2VydC5nZXQoKSksIGxhc3RQb3Np
dGlvbkluT3JBZnRlck5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSk7CiAgICAgICAgIC8vIEV2ZW4g
dGhvdWdoIHRoaXMgYXBwbHlTdHlsZSBvcGVyYXRlcyBvbiBhIFJhbmdlLCBpdCBzdGlsbCBzZXRz
IGFuIGVuZGluZ1NlbGVjdGlvbigpLgogICAgICAgICAvLyBJdCB0cmllcyB0byBzZXQgYSBWaXNp
YmxlU2VsZWN0aW9uIGFyb3VuZCB0aGUgY29udGVudCBpdCBvcGVyYXRlZCBvbi4gU28sIHRoYXQg
VmlzaWJsZVNlbGVjdGlvbgogICAgICAgICAvLyB3aWxsIGVpdGhlciAoYSkgc2VsZWN0IHRoZSBs
aW5lIGJyZWFrIHdlIGluc2VydGVkLCBvciBpdCB3aWxsIChiKSBiZSBhIGNhcmV0IGp1c3QgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM5OSw4ICsyMzk5LDggQEAKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9z
ID0gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKTsKLSAgICBWaXNpYmxlUG9z
aXRpb24gZW5kUG9zID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpOworICAg
IFZpc2libGVQb3NpdGlvbiBzdGFydFBvcyA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShu
b2RlKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zID0gbGFzdFBvc2l0aW9uSW5PckFmdGVy
Tm9kZShub2RlKTsKIAogICAgIC8vIHRoZSBWaXNpYmxlUG9zaXRpb25zIGFyZSBlcXVhbCBmb3Ig
bm9kZXMgbGlrZSBidXR0b25zLCBzbyBhZGp1c3QgZm9yIHRoYXQKICAgICAvLyBGSVhNRTogUmVh
bGx5PyAgW2J1dHRvbiwgMF0gYW5kIFtidXR0b24sIDFdIGFyZSBkaXN0aW5jdCAoYmVmb3JlIGFu
ZCBhZnRlciB0aGUgYnV0dG9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiA3ODg0OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1OSw3ICszNTksNyBAQAogICAgICAgICBlbmRSZW5kZXJlciA9IHI7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShlbmRSZW5k
ZXJlci0+bm9kZSgpKTsKKyAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShlbmRS
ZW5kZXJlci0+bm9kZSgpKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0
eU9iamVjdDo6c3R5bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvcykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiA3ODg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgxLDcgKzI2ODEsNyBAQAogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyID09IHBhcmVudCkKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGlmIChOb2RlKiBub2RlID0gcmVuZGVyZXItPm5vZGUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9k
ZShub2RlKSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFVzZSB0aGUgcGFyZW50IGl0c2VsZiB1bmxlc3MgaXQgdG9vIGlz
IGFub255bW91cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShy
ZXZpc2lvbiA3ODg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTk2LDcgKzI5OTYsNyBAQAogewogICAgIC8vIG5vIGNoaWxk
cmVuLi4ucmV0dXJuIHRoaXMgcmVuZGVyIG9iamVjdCdzIGVsZW1lbnQsIGlmIHRoZXJlIGlzIG9u
ZSwgYW5kIG9mZnNldCAwCiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBj
cmVhdGVWaXNpYmxlUG9zaXRpb24obm9kZSgpID8gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZShub2RlKCkpIDogUG9zaXRpb24oMCwgMCkpOworICAgICAgICByZXR1cm4gY3JlYXRlVmlz
aWJsZVBvc2l0aW9uKG5vZGUoKSA/IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKCkp
IDogUG9zaXRpb24oMCwgMCkpOwogCiAgICAgaW50IHhQb3MgPSBwb2ludC54KCk7CiAgICAgaW50
IHlQb3MgPSBwb2ludC55KCk7CkBAIC0zMDA3LDggKzMwMDcsOCBAQAogICAgICAgICAKICAgICAg
ICAgaWYgKHhQb3MgPCAwIHx8IHhQb3MgPiByaWdodCB8fCB5UG9zIDwgMCB8fCB5UG9zID4gYm90
dG9tKSB7CiAgICAgICAgICAgICBpZiAoeFBvcyA8PSByaWdodCAvIDIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKG5vZGUoKSkpOwotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlv
bihsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSgpKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5v
ZGUobm9kZSgpKSk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGxh
c3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9kZSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTMwNzksNyArMzA3OSw3IEBACiAgICAgaWYgKGNsb3Nlc3RSZW5kZXJlcikKICAgICAgICAgcmV0
dXJuIGNsb3Nlc3RSZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhuZXdYIC0gY2xvc2Vz
dFJlbmRlcmVyLT54KCksIG5ld1kgLSBjbG9zZXN0UmVuZGVyZXItPnkoKSk7CiAgICAgCi0gICAg
cmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKG5vZGUoKSkpOworICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKG5vZGUoKSkpOwogfQogCiBib29sIFJlbmRlckJveDo6c2hyaW5r
VG9Bdm9pZEZsb2F0cygpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83415</attachid>
            <date>2011-02-22 16:45:57 -0800</date>
            <delta_ts>2011-02-25 14:51:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52642-20110222164556.patch</filename>
            <type>text/plain</type>
            <size>28727</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5MzcxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTEtMDItMjIgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEdldCByaWQgb2YgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9u
Rm9yTm9kZSBhbmQgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjY0MgorCisgICAgICAgIFJlcGxh
Y2luZyBjYWxscyB0byBmaXJzdC9sYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUgd2l0aCBj
YWxscyB0byB0aGVpciBhbmFsb2dvdXMKKyAgICAgICAgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIG5l
dyBwb3NpdGlvbnMuIEFsc28gZml4aW5nIHZhcmlvdXMgcGFydHMgb2YgZWRpdGluZyBjb2RlIHRo
YXQKKyAgICAgICAgaW5jb3JyZWN0bHkgaGFuZGxlZCB0aGUgbmV3IHBvc2l0aW9ucyBub3cgYmVp
bmcgY3JlYXRlZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyByZWZhY3Rvcmlu
Zy9jbGVhbnVwLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mU3R5bGVSYW5nZSk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlKToKKyAg
ICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJl
dmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Om5leHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb246OmF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvc2l0aW9uOjphdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvc2l0aW9uOjp1cHN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6aXNDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmdldElubGlu
ZUJveEFuZE9mZnNldCk6CisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjpvcGVyYXRvciBQb3NpdGlvbik6Cisg
ICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0
dGluZ1RleHROb2Rlc0lmTmVlZGVkKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3Np
dGlvbkF2b2lkaW5nU3BlY2lhbEVsZW1lbnRCb3VuZGFyeSk6CisgICAgICAgICogZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzVGFibGVDZWxs
RW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3Zl
Tm9kZSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAg
ICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
ZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBhcmFncmFwaCk6CisgICAgICAgICogZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25BdEVuZE9mSW5zZXJ0ZWRDb250ZW50KToKKyAgICAgICAg
KiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
Ojpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlU2Vs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlv
bkZyb21Db250ZW50c09mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9u
OjphZGp1c3RTZWxlY3Rpb25Ub0F2b2lkQ3Jvc3NpbmdFZGl0aW5nQm91bmRhcmllcyk6CisgICAg
ICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdEVk
aXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KToKKyAgICAgICAgKFdlYkNvcmU6Omxh
c3RFZGl0YWJsZVBvc2l0aW9uQmVmb3JlUG9zaXRpb25JblJvb3QpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3Np
bmdFbXB0eUxpc3RJdGVtKToKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisgICAg
ICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0
T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQYXJhZ3JhcGgpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhcnRPZkVkaXRhYmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpl
bmRPZkVkaXRhYmxlQ29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpjcmVhdGVWaXNpYmxlUG9zaXRpb24pOgorCiAyMDExLTAyLTIyICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2Fy
bHNzb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzU5LDcgKzM1OSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGMK
ICAgICAgICAgZW5kUmVuZGVyZXIgPSByOwogICAgIH0KIAotICAgIHJldHVybiBsYXN0RGVlcEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoZW5kUmVuZGVyZXItPm5vZGUoKSk7CisgICAgcmV0dXJuIGxh
c3RQb3NpdGlvbkluT3JBZnRlck5vZGUoZW5kUmVuZGVyZXItPm5vZGUoKSk7CiB9CiAKIFZpc2li
bGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0eWxlUmFuZ2VGb3JQb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5
OSw4ICsyMzk5LDggQEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlcgog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CiAK
LSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3MgPSBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKG5vZGUpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3MgPSBsYXN0RGVlcEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUobm9kZSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zID0g
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOworICAgIFZpc2libGVQb3NpdGlvbiBl
bmRQb3MgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUpOwogCiAgICAgLy8gdGhlIFZp
c2libGVQb3NpdGlvbnMgYXJlIGVxdWFsIGZvciBub2RlcyBsaWtlIGJ1dHRvbnMsIHNvIGFkanVz
dCBmb3IgdGhhdAogICAgIC8vIEZJWE1FOiBSZWFsbHk/ICBbYnV0dG9uLCAwXSBhbmQgW2J1dHRv
biwgMV0gYXJlIGRpc3RpbmN0IChiZWZvcmUgYW5kIGFmdGVyIHRoZSBidXR0b24pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDEyICsxNTQsMTIgQEAgUG9z
aXRpb24gUG9zaXRpb246OnBhcmVudEFuY2hvcmVkRXF1aXZhbAogICAgICAgICByZXR1cm4gUG9z
aXRpb24oKTsKICAgICAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgb25seSBiZSBuZWNlc3Nh
cnkgZm9yIGxlZ2FjeSBwb3NpdGlvbnMsIGJ1dCBpcyBhbHNvIG5lZWRlZCBmb3IgcG9zaXRpb25z
IGJlZm9yZSBhbmQgYWZ0ZXIgVGFibGVzCi0gICAgaWYgKG1fb2Zmc2V0IDw9IDApIHsKKyAgICBp
ZiAobV9vZmZzZXQgPD0gMCAmJiBtX2FuY2hvclR5cGUgIT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9y
KSB7CiAgICAgICAgIGlmIChtX2FuY2hvck5vZGUtPnBhcmVudE5vZGUoKSAmJiAoZWRpdGluZ0ln
bm9yZXNDb250ZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkgfHwgaXNUYWJsZUVsZW1lbnQobV9hbmNo
b3JOb2RlLmdldCgpKSkpCiAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJlZm9y
ZU5vZGUobV9hbmNob3JOb2RlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG1fYW5j
aG9yTm9kZSwgMCwgUG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAgICB9Ci0gICAgaWYgKCFt
X2FuY2hvck5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihtX29mZnNldCkgPT0gbV9hbmNob3JOb2RlLT5jaGlsZE5vZGVDb3VudCgpCisgICAgaWYgKCFt
X2FuY2hvck5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpICYmIChtX2FuY2hvclR5cGUgPT0gUG9z
aXRpb25Jc0FmdGVyQW5jaG9yIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29mZnNldCkgPT0g
bV9hbmNob3JOb2RlLT5jaGlsZE5vZGVDb3VudCgpKQogICAgICAgICAmJiAoZWRpdGluZ0lnbm9y
ZXNDb250ZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkgfHwgaXNUYWJsZUVsZW1lbnQobV9hbmNob3JO
b2RlLmdldCgpKSkpIHsKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUo
bV9hbmNob3JOb2RlLmdldCgpKTsKICAgICB9CkBAIC0yMzMsMTUgKzIzMywxNiBAQCBQb3NpdGlv
biBQb3NpdGlvbjo6cHJldmlvdXMoUG9zaXRpb25Nb3ZlCiAgICAgTm9kZSogbiA9IG5vZGUoKTsK
ICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAKLSAgICBpbnQgbyA9IG1f
b2Zmc2V0OworCisgICAgLy8gRklYTUU6IEV4cGxpY2l0bHkgaGFuZGxlIGJlZm9yZS9hZnRlciBw
b3NpdGlvbnMKKyAgICBpbnQgbyA9IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgLy8g
RklYTUU6IE5lZ2F0aXZlIG9mZnNldHMgc2hvdWxkbid0IGJlIGFsbG93ZWQuIFdlIHNob3VsZCBj
YXRjaCB0aGlzIGVhcmxpZXIuCiAgICAgQVNTRVJUKG8gPj0gMCk7CiAKICAgICBpZiAobyA+IDAp
IHsKICAgICAgICAgTm9kZSogY2hpbGQgPSBuLT5jaGlsZE5vZGUobyAtIDEpOwogICAgICAgICBp
ZiAoY2hpbGQpCi0gICAgICAgICAgICByZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKGNoaWxkKTsKKyAgICAgICAgICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2Rl
KGNoaWxkKTsKIAogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgY2hpbGQgbWlnaHQg
YmUgMDoKICAgICAgICAgLy8gICAxKSBUaGUgbm9kZSBpcyBub2RlIGxpa2UgYSB0ZXh0IG5vZGUg
dGhhdCBpcyBub3QgYW4gZWxlbWVudCwgYW5kIHRoZXJlZm9yZSBoYXMgbm8gY2hpbGRyZW4uCkBA
IC0yNzIsMTUgKzI3MywxNiBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChQb3NpdGlvbk1vdmVU
eXBlCiAgICAgTm9kZSogbiA9IG5vZGUoKTsKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiAq
dGhpczsKLSAgICAKLSAgICBpbnQgbyA9IG1fb2Zmc2V0OworCisgICAgLy8gRklYTUU6IEV4cGxp
Y2l0bHkgaGFuZGxlIGJlZm9yZS9hZnRlciBwb3NpdGlvbnMKKyAgICBpbnQgbyA9IGRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgLy8gRklYTUU6IE5lZ2F0aXZlIG9mZnNldHMgc2hvdWxk
bid0IGJlIGFsbG93ZWQuIFdlIHNob3VsZCBjYXRjaCB0aGlzIGVhcmxpZXIuCiAgICAgQVNTRVJU
KG8gPj0gMCk7CiAKICAgICBOb2RlKiBjaGlsZCA9IG4tPmNoaWxkTm9kZShvKTsKICAgICBpZiAo
Y2hpbGQgfHwgKCFuLT5oYXNDaGlsZE5vZGVzKCkgJiYgbyA8IGxhc3RPZmZzZXRGb3JFZGl0aW5n
KG4pKSkgewogICAgICAgICBpZiAoY2hpbGQpCi0gICAgICAgICAgICByZXR1cm4gZmlyc3REZWVw
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShjaGlsZCk7CisgICAgICAgICAgICByZXR1cm4gZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKGNoaWxkKTsKIAogICAgICAgICAvLyBUaGVyZSBhcmUgdHdv
IHJlYXNvbnMgY2hpbGQgbWlnaHQgYmUgMDoKICAgICAgICAgLy8gICAxKSBUaGUgbm9kZSBpcyBu
b2RlIGxpa2UgYSB0ZXh0IG5vZGUgdGhhdCBpcyBub3QgYW4gZWxlbWVudCwgYW5kIHRoZXJlZm9y
ZSBoYXMgbm8gY2hpbGRyZW4uCkBAIC0zMTYsMTQgKzMxOCwxNCBAQCBib29sIFBvc2l0aW9uOjph
dEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yCiB7CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9vZmZzZXQgPD0gMDsKKyAgICByZXR1cm4gbV9hbmNo
b3JUeXBlID09IFBvc2l0aW9uSXNCZWZvcmVBbmNob3IgfHwgbV9vZmZzZXQgPD0gMDsKIH0KIAog
Ym9vbCBQb3NpdGlvbjo6YXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9vZmZz
ZXQgPj0gbGFzdE9mZnNldEZvckVkaXRpbmcobm9kZSgpKTsKKyAgICByZXR1cm4gbV9hbmNob3JU
eXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciB8fCBtX29mZnNldCA+PSBsYXN0T2Zmc2V0Rm9y
RWRpdGluZyhub2RlKCkpOwogfQogCiAvLyBBIHBvc2l0aW9uIGlzIGNvbnNpZGVyZWQgYXQgZWRp
dGluZyBib3VuZGFyeSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgpAQCAtNTYxLDcg
KzU2Myw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmQKICAgICAg
ICAgLy8gUmV0dXJuIHBvc2l0aW9uIGFmdGVyIHRhYmxlcyBhbmQgbm9kZXMgd2hpY2ggaGF2ZSBj
b250ZW50IHRoYXQgY2FuIGJlIGlnbm9yZWQuCiAgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0Nv
bnRlbnQoY3VycmVudE5vZGUpIHx8IGlzVGFibGVFbGVtZW50KGN1cnJlbnROb2RlKSkgewogICAg
ICAgICAgICAgaWYgKGN1cnJlbnRQb3MuYXRFbmRPZk5vZGUoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGN1cnJlbnROb2RlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUoY3VycmVudE5vZGUpOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNzcyLDcgKzc3NCw3IEBAIGJvb2wgUG9z
aXRpb246OmlzQ2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAgIHJldHVybiAhbV9vZmZzZXQgJiYgIW5vZGVJ
c1VzZXJTZWxlY3ROb25lKG5vZGUoKS0+cGFyZW50Tm9kZSgpKTsKKyAgICAgICAgcmV0dXJuICFt
X29mZnNldCAmJiBtX2FuY2hvclR5cGUgIT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yICYmICFub2Rl
SXNVc2VyU2VsZWN0Tm9uZShub2RlKCktPnBhcmVudE5vZGUoKSk7CiAKICAgICBpZiAocmVuZGVy
ZXItPmlzVGV4dCgpKQogICAgICAgICByZXR1cm4gIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUo
KSkgJiYgaW5SZW5kZXJlZFRleHQoKTsKQEAgLTEwNDQsNyArMTA0Niw4IEBAIHN0YXRpYyBQb3Np
dGlvbiB1cHN0cmVhbUlnbm9yaW5nRWRpdGluZ0IKIAogdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5l
Qm94QW5kT2Zmc2V0KEVBZmZpbml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGly
ZWN0aW9uLCBJbmxpbmVCb3gqJiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0CiB7
Ci0gICAgY2FyZXRPZmZzZXQgPSBtX29mZnNldDsKKyAgICAvLyBGSVhNRTogRXhwbGljaXRseSBo
YW5kbGUgYmVmb3JlL2FmdGVyIHBvc2l0aW9ucworICAgIGNhcmV0T2Zmc2V0ID0gZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZSgpLT5y
ZW5kZXJlcigpOwogCiAgICAgaWYgKCFyZW5kZXJlci0+aXNUZXh0KCkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5oCShyZXZpc2lvbiA3ODg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBQb3NpdGlvbiYgYQogewogICAgIC8vIEZJWE1FOiBJbiA8ZGl2PjxpbWc+
PC9kaXY+IFtkaXYsIDBdICE9IFtpbWcsIDBdIGV2ZW4gdGhvdWdoIG1vc3Qgb2YgdGhlCiAgICAg
Ly8gZWRpdGluZyBjb2RlIHdpbGwgdHJlYXQgdGhlbSBhcyBpZGVudGljYWwuCi0gICAgcmV0dXJu
IGEuYW5jaG9yTm9kZSgpID09IGIuYW5jaG9yTm9kZSgpICYmIGEuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSA9PSBiLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgcmV0dXJuIGEuYW5j
aG9yTm9kZSgpID09IGIuYW5jaG9yTm9kZSgpICYmIGEuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA9PSBiLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgJiYgYS5hbmNob3JUeXBlKCkgPT0gYi5h
bmNob3JUeXBlKCk7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUG9zaXRpb24m
IGEsIGNvbnN0IFBvc2l0aW9uJiBiKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0
ZXJhdG9yLmNwcAkocmV2aXNpb24gNzg4NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRp
b25JdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgUG9zaXRpb25J
dGVyYXRvcjo6b3BlcmF0b3IgUG9zaXRpb24oKSBjbwogICAgICAgICByZXR1cm4gcG9zaXRpb25J
blBhcmVudEJlZm9yZU5vZGUobV9ub2RlQWZ0ZXJQb3NpdGlvbkluQW5jaG9yKTsKICAgICB9CiAg
ICAgaWYgKG1fYW5jaG9yTm9kZS0+aGFzQ2hpbGROb2RlcygpKQotICAgICAgICByZXR1cm4gbGFz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG1fYW5jaG9yTm9kZSk7CisgICAgICAgIHJldHVy
biBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG1fYW5jaG9yTm9kZSk7CiAgICAgcmV0dXJuIFBv
c2l0aW9uKG1fYW5jaG9yTm9kZSwgbV9vZmZzZXRJbkFuY2hvcik7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJ
KHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBB
cHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgICAgICBpZiAoIXN0YXJ0U3R5
bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgp
ID4gMCkgewogICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCk7CiAgICAgICAgICAgICBzcGxpdFRleHROb2RlKHN0YXRpY19jYXN0PFRleHQq
PihzdGFydC5ub2RlKCkpLCBzdGFydE9mZnNldCk7Ci0gICAgICAgICAgICBzdGFydCA9IHBvc2l0
aW9uQmVmb3JlTm9kZShzdGFydC5ub2RlKCkpOworICAgICAgICAgICAgc3RhcnQgPSBmaXJzdFBv
c2l0aW9uSW5Ob2RlKHN0YXJ0Lm5vZGUoKSk7CiAgICAgICAgICAgICBpZiAoaXNTdGFydEFuZEVu
ZE9uU2FtZU5vZGUpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoZW5kLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpID49IHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBlbmQgPSBQb3NpdGlv
bihlbmQubm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgLSBzdGFydE9mZnNldCwg
UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gNzg4NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE2OCw4ICsxMTY4LDggQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnBvc2l0aW9uQQogCiAgICAgLy8gRG9uJ3QgYXZvaWQgYmxvY2sgbGV2ZWwgYW5jaG9y
cywgYmVjYXVzZSB0aGF0IHdvdWxkIGluc2VydCBjb250ZW50IGludG8gdGhlIHdyb25nIHBhcmFn
cmFwaC4KICAgICBpZiAoZW5jbG9zaW5nQW5jaG9yICYmICFpc0Jsb2NrKGVuY2xvc2luZ0FuY2hv
cikpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5BbmNob3IoZmlyc3REZWVwRWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZShlbmNsb3NpbmdBbmNob3IpKTsKLSAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIGxhc3RJbkFuY2hvcihsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoZW5jbG9z
aW5nQW5jaG9yKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluQW5jaG9yKGZpcnN0
UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlv
biBsYXN0SW5BbmNob3IobGFzdFBvc2l0aW9uSW5Ob2RlKGVuY2xvc2luZ0FuY2hvcikpOwogICAg
ICAgICAvLyBJZiB2aXN1YWxseSBqdXN0IGFmdGVyIHRoZSBhbmNob3IsIGluc2VydCAqaW5zaWRl
KiB0aGUgYW5jaG9yIHVubGVzcyBpdCdzIHRoZSBsYXN0CiAgICAgICAgIC8vIFZpc2libGVQb3Np
dGlvbiBpbiB0aGUgZG9jdW1lbnQsIHRvIG1hdGNoIE5TVGV4dFZpZXcuCiAgICAgICAgIGlmICh2
aXNpYmxlUG9zID09IGxhc3RJbkFuY2hvcikgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODg0OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGJvb2wgaXNUYWJsZVJvdyhjb25zdCBO
b2RlKiBub2RlKQogc3RhdGljIGJvb2wgaXNUYWJsZUNlbGxFbXB0eShOb2RlKiBjZWxsKQogewog
ICAgIEFTU0VSVChpc1RhYmxlQ2VsbChjZWxsKSk7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGNlbGwpKSA9PSBWaXNpYmxlUG9zaXRp
b24obGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGNlbGwpKTsKKyAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUoY2VsbCkpID09IFZpc2libGVQb3NpdGlv
bihsYXN0UG9zaXRpb25Jbk5vZGUoY2VsbCkpOwogfQogCiBzdGF0aWMgYm9vbCBpc1RhYmxlUm93
RW1wdHkoTm9kZSogcm93KQpAQCAtMzc4LDkgKzM3OCw5IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6cmVtb3ZlTm9kZSgKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBp
ZiAobm9kZSA9PSBtX3N0YXJ0QmxvY2sgJiYgIWlzRW5kT2ZCbG9jayhWaXNpYmxlUG9zaXRpb24o
Zmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShtX3N0YXJ0QmxvY2suZ2V0KCkpKS5wcmV2
aW91cygpKSkKKyAgICBpZiAobm9kZSA9PSBtX3N0YXJ0QmxvY2sgJiYgIWlzRW5kT2ZCbG9jayhW
aXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShtX3N0YXJ0QmxvY2suZ2V0KCkpKS5w
cmV2aW91cygpKSkKICAgICAgICAgbV9uZWVkUGxhY2Vob2xkZXIgPSB0cnVlOwotICAgIGVsc2Ug
aWYgKG5vZGUgPT0gbV9lbmRCbG9jayAmJiAhaXNTdGFydE9mQmxvY2soVmlzaWJsZVBvc2l0aW9u
KGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShtX3N0YXJ0QmxvY2suZ2V0KCkpKS5uZXh0
KCkpKQorICAgIGVsc2UgaWYgKG5vZGUgPT0gbV9lbmRCbG9jayAmJiAhaXNTdGFydE9mQmxvY2so
VmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShtX3N0YXJ0QmxvY2suZ2V0KCkpKS5u
ZXh0KCkpKQogICAgICAgICBtX25lZWRQbGFjZWhvbGRlciA9IHRydWU7CiAgICAgCiAgICAgLy8g
RklYTUU6IFVwZGF0ZSB0aGUgZW5kcG9pbnRzIG9mIHRoZSByYW5nZSBiZWluZyBkZWxldGVkLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1h
bmQuY3BwCShyZXZpc2lvbiA3ODg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
TGluZUJyZWFrQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCB2
b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyBsZWF2ZXMg
YW5kIHRoZW4gY29tZXMgYmFjaywgbmV3IGlucHV0IHdpbGwgaGF2ZSB0aGUgcmlnaHQgc3R5bGUu
CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYWx3YXlzIGFwcGx5IHRoZSB0eXBpbmcg
c3R5bGUgdG8gdGhlIGxpbmUgYnJlYWsgaGVyZSwKICAgICAgICAgLy8gc2VlIDxyZGFyOi8vcHJv
YmxlbS81Nzk0NDYyPi4KLSAgICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHlsZS5nZXQoKSwgZmly
c3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBsYXN0RGVl
cEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSk7CisgICAgICAgIGFw
cGx5U3R5bGUodHlwaW5nU3R5bGUuZ2V0KCksIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShu
b2RlVG9JbnNlcnQuZ2V0KCkpLCBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGVUb0luc2Vy
dC5nZXQoKSkpOwogICAgICAgICAvLyBFdmVuIHRob3VnaCB0aGlzIGFwcGx5U3R5bGUgb3BlcmF0
ZXMgb24gYSBSYW5nZSwgaXQgc3RpbGwgc2V0cyBhbiBlbmRpbmdTZWxlY3Rpb24oKS4KICAgICAg
ICAgLy8gSXQgdHJpZXMgdG8gc2V0IGEgVmlzaWJsZVNlbGVjdGlvbiBhcm91bmQgdGhlIGNvbnRl
bnQgaXQgb3BlcmF0ZWQgb24uIFNvLCB0aGF0IFZpc2libGVTZWxlY3Rpb24KICAgICAgICAgLy8g
d2lsbCBlaXRoZXIgKGEpIHNlbGVjdCB0aGUgbGluZSBicmVhayB3ZSBpbnNlcnRlZCwgb3IgaXQg
d2lsbCAoYikgYmUgYSBjYXJldCBqdXN0IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRMaXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw4
ICsyNTcsOCBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjp1bmxpc3RpZnlQYXJhZ3JhCiAgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0OwogICAgIFZpc2libGVQb3NpdGlvbiBlbmQ7CiAgICAgaWYg
KGxpc3RDaGlsZE5vZGUtPmhhc1RhZ05hbWUobGlUYWcpKSB7Ci0gICAgICAgIHN0YXJ0ID0gZmly
c3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0Q2hpbGROb2RlKTsKLSAgICAgICAgZW5k
ID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxpc3RDaGlsZE5vZGUpOworICAgICAg
ICBzdGFydCA9IGZpcnN0UG9zaXRpb25Jbk5vZGUobGlzdENoaWxkTm9kZSk7CisgICAgICAgIGVu
ZCA9IGxhc3RQb3NpdGlvbkluTm9kZShsaXN0Q2hpbGROb2RlKTsKICAgICAgICAgbmV4dExpc3RD
aGlsZCA9IGxpc3RDaGlsZE5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIHByZXZpb3VzTGlz
dENoaWxkID0gbGlzdENoaWxkTm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgfSBlbHNlIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCShyZXZpc2lvbiA3ODg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzYsMTAgKzUzNiwx
MCBAQCBWaXNpYmxlUG9zaXRpb24gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6CiB7CiAgICAgTm9k
ZSogbGFzdE5vZGUgPSBtX2xhc3RMZWFmSW5zZXJ0ZWQuZ2V0KCk7CiAgICAgLy8gRklYTUU6IFdo
eSBpcyB0aGlzIGhhY2sgaGVyZT8gIFdoYXQncyBzcGVjaWFsIGFib3V0IDxzZWxlY3Q+IHRhZ3M/
Ci0gICAgTm9kZSogZW5jbG9zaW5nU2VsZWN0ID0gZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsYXN0Tm9kZSksIHNlbGVjdFRhZyk7CisgICAgTm9k
ZSogZW5jbG9zaW5nU2VsZWN0ID0gZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKGxhc3ROb2RlKSwgc2VsZWN0VGFnKTsKICAgICBpZiAoZW5jbG9zaW5nU2Vs
ZWN0KQogICAgICAgICBsYXN0Tm9kZSA9IGVuY2xvc2luZ1NlbGVjdDsKLSAgICByZXR1cm4gbGFz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxhc3ROb2RlKTsKKyAgICByZXR1cm4gbGFzdFBv
c2l0aW9uSW5PckFmdGVyTm9kZShsYXN0Tm9kZSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiA3
ODg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5NSw3ICs0OTUsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtl
eVByZXNzZWQoVGV4CiAgICAgICAgICAgICBzZWxlY3Rpb24ubW9kaWZ5KFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkFsdGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBncmFudWxhcml0eSk7
CiAgICAgICAgIC8vIElmIHRoZSBjYXJldCBpcyBqdXN0IGFmdGVyIGEgdGFibGUsIHNlbGVjdCB0
aGUgdGFibGUgYW5kIGRvbid0IGRlbGV0ZSBhbnl0aGluZy4KICAgICAgICAgfSBlbHNlIGlmIChO
b2RlKiB0YWJsZSA9IGlzRmlyc3RQb3NpdGlvbkFmdGVyVGFibGUodmlzaWJsZVN0YXJ0KSkgewot
ICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25B
ZnRlck5vZGUodGFibGUpLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBET1dOU1RSRUFNKSk7
CisgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3NpdGlv
bkJlZm9yZU5vZGUodGFibGUpLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBET1dOU1RSRUFN
KSk7CiAgICAgICAgICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRGVsZXRlS2V5KTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTcxLDcgKzU3MSw3IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXMKICAgICAgICAgICAgIGRvd25zdHJlYW1F
bmQgPSB2aXNpYmxlRW5kLm5leHQodHJ1ZSkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7
CiAgICAgICAgIC8vIFdoZW4gZGVsZXRpbmcgdGFibGVzOiBTZWxlY3QgdGhlIHRhYmxlIGZpcnN0
LCB0aGVuIHBlcmZvcm0gdGhlIGRlbGV0aW9uCiAgICAgICAgIGlmIChkb3duc3RyZWFtRW5kLm5v
ZGUoKSAmJiBkb3duc3RyZWFtRW5kLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBkb3duc3RyZWFtRW5k
Lm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmICFkb3duc3RyZWFtRW5kLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpIHsKLSAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLCBsYXN0RGVlcEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoZG93bnN0cmVhbUVuZC5ub2RlKCkpLCBET1dOU1RSRUFNKSk7CisgICAgICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24o
KS5lbmQoKSwgcG9zaXRpb25BZnRlck5vZGUoZG93bnN0cmVhbUVuZC5ub2RlKCkpLCBET1dOU1RS
RUFNKSk7CiAgICAgICAgICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0
ZUtleSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gNzg4NDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OSw3ICs4OSw3IEBAIFZpc2libGVTZWxlY3Rpb246OlZpc2libGVTZWxlY3Rpb24oY29u
c3QKIAogVmlzaWJsZVNlbGVjdGlvbiBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29u
dGVudHNPZk5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbihm
aXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpLCBsYXN0RGVlcEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUobm9kZSksIERPV05TVFJFQU0pOworICAgIHJldHVybiBWaXNpYmxlU2VsZWN0
aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSksIGxhc3RQb3NpdGlvbkluTm9kZShub2RlKSwg
RE9XTlNUUkVBTSk7CiB9CiAKIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0QmFzZShjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24pCkBAIC00OTgsMTMgKzQ5OCwxMyBAQCB2b2lkIFZpc2libGVTZWxl
Y3Rpb246OmFkanVzdFNlbGVjdGlvblRvCiAgICAgICAgICAgICBQb3NpdGlvbiBwID0gcHJldmlv
dXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZW5kKTsKICAgICAgICAgICAgIE5vZGUqIHNo
YWRvd0FuY2VzdG9yID0gZW5kUm9vdCA/IGVuZFJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDog
MDsKICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYmIGVuZFJvb3QgJiYgKHNoYWRvd0FuY2Vz
dG9yICE9IGVuZFJvb3QpKQotICAgICAgICAgICAgICAgIHAgPSBsYXN0RGVlcEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOworICAgICAgICAgICAgICAgIHAgPSBsYXN0UG9z
aXRpb25Jbk5vZGUoc2hhZG93QW5jZXN0b3IpOwogICAgICAgICAgICAgd2hpbGUgKHAuaXNOb3RO
dWxsKCkgJiYgIShsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKHAubm9kZSgpKSA9PSBiYXNlRWRpdGFi
bGVBbmNlc3RvciAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApKSkgewogICAgICAgICAgICAgICAg
IE5vZGUqIHJvb3QgPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihwKTsKICAgICAgICAgICAgICAg
ICBzaGFkb3dBbmNlc3RvciA9IHJvb3QgPyByb290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7
CiAgICAgICAgICAgICAgICAgcCA9IGlzQXRvbWljTm9kZShwLm5vZGUoKSkgPyBwb3NpdGlvbklu
UGFyZW50QmVmb3JlTm9kZShwLm5vZGUoKSkgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUocCk7CiAgICAgICAgICAgICAgICAgaWYgKHAuaXNOdWxsKCkgJiYgKHNoYWRvd0FuY2Vz
dG9yICE9IHJvb3QpKQotICAgICAgICAgICAgICAgICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IGxh
c3RQb3NpdGlvbkluTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMocCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiA3ODg0OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsMTQgKzI3Nywx
NCBAQCBQb3NpdGlvbiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhCiBWaXNpYmxlUG9z
aXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlvbkluUm9vdChjb25zdCBQb3Np
dGlvbiYgcG9zaXRpb24sIE5vZGUqIGhpZ2hlc3RSb290KQogewogICAgIC8vIHBvc2l0aW9uIGZh
bGxzIGJlZm9yZSBoaWdoZXN0Um9vdC4KLSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlv
biwgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCkpID09IC0xICYm
IGhpZ2hlc3RSb290LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQotICAgICAgICByZXR1cm4gZmlyc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7CisgICAgaWYgKGNvbXBhcmVQ
b3NpdGlvbnMocG9zaXRpb24sIGZpcnN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpKSA9PSAt
MSAmJiBoaWdoZXN0Um9vdC0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZp
cnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShoaWdoZXN0Um9vdCk7CiAKICAgICBQb3NpdGlvbiBw
ID0gcG9zaXRpb247CiAgICAgCiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gcC5ub2Rl
KCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQogICAgICAgICBpZiAoc2hhZG93QW5jZXN0b3IgIT0g
cC5ub2RlKCkpCi0gICAgICAgICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2Rl
KHNoYWRvd0FuY2VzdG9yKTsKKyAgICAgICAgICAgIHAgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJO
b2RlKHNoYWRvd0FuY2VzdG9yKTsKICAgICAKICAgICB3aGlsZSAocC5ub2RlKCkgJiYgIWlzRWRp
dGFibGVQb3NpdGlvbihwKSAmJiBwLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3Qp
KQogICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAubm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRB
ZnRlck5vZGUocC5ub2RlKCkpIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CkBA
IC0yOTgsMTQgKzI5OCwxNCBAQCBWaXNpYmxlUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9u
QWZ0CiBWaXNpYmxlUG9zaXRpb24gbGFzdEVkaXRhYmxlUG9zaXRpb25CZWZvcmVQb3NpdGlvbklu
Um9vdChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIE5vZGUqIGhpZ2hlc3RSb290KQogewogICAg
IC8vIFdoZW4gcG9zaXRpb24gZmFsbHMgYWZ0ZXIgaGlnaGVzdFJvb3QsIHRoZSByZXN1bHQgaXMg
ZWFzeSB0byBjb21wdXRlLgotICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHBvc2l0aW9uLCBsYXN0
RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpKSA9PSAxKQotICAgICAgICBy
ZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KTsKKyAgICBp
ZiAoY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgbGFzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RS
b290KSkgPT0gMSkKKyAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoaGln
aGVzdFJvb3QpOwogCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwogICAgIAogICAgIGlmIChO
b2RlKiBzaGFkb3dBbmNlc3RvciA9IHAubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkKICAg
ICAgICAgaWYgKHNoYWRvd0FuY2VzdG9yICE9IHAubm9kZSgpKQotICAgICAgICAgICAgcCA9IGZp
cnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOworICAgICAgICAg
ICAgcCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAg
CiAgICAgd2hpbGUgKHAubm9kZSgpICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkgJiYgcC5ub2Rl
KCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgcCA9IGlzQXRvbWljTm9k
ZShwLm5vZGUoKSkgPyBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShwLm5vZGUoKSkgOiBwcmV2
aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CkBAIC00OTksNyArNDk5LDggQEAgUG9z
aXRpb24gcG9zaXRpb25PdXRzaWRlQ29udGFpbmluZ1NwZWNpYQogTm9kZSogaXNGaXJzdFBvc2l0
aW9uQWZ0ZXJUYWJsZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsK
ICAgICBQb3NpdGlvbiB1cHN0cmVhbSh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS51
cHN0cmVhbSgpKTsKLSAgICBpZiAodXBzdHJlYW0ubm9kZSgpICYmIHVwc3RyZWFtLm5vZGUoKS0+
cmVuZGVyZXIoKSAmJiB1cHN0cmVhbS5ub2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSAmJiB1
cHN0cmVhbS5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpCisgICAgaWYgKHVwc3RyZWFt
Lm5vZGUoKSAmJiB1cHN0cmVhbS5ub2RlKCktPnJlbmRlcmVyKCkgJiYgdXBzdHJlYW0ubm9kZSgp
LT5yZW5kZXJlcigpLT5pc1RhYmxlKCkKKyAgICAgICAgJiYgKHVwc3RyZWFtLmFuY2hvclR5cGUo
KSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yIHx8IHVwc3RyZWFtLmF0TGFzdEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoKSkpCiAgICAgICAgIHJldHVybiB1cHN0cmVhbS5ub2RlKCk7
CiAgICAgCiAgICAgcmV0dXJuIDA7CkBAIC03MjEsOCArNzIyLDggQEAgTm9kZSogZW5jbG9zaW5n
RW1wdHlMaXN0SXRlbShjb25zdCBWaXNpYgogICAgIGlmICghbGlzdENoaWxkTm9kZSB8fCAhaXNT
dGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3MpIHx8ICFpc0VuZE9mUGFyYWdyYXBoKHZpc2libGVQ
b3MpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluTGlz
dENoaWxkKGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGlzdENoaWxkTm9kZSkpOwot
ICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5MaXN0Q2hpbGQobGFzdERlZXBFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKGxpc3RDaGlsZE5vZGUpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkxp
c3RDaGlsZChmaXJzdFBvc2l0aW9uSW5Ob2RlKGxpc3RDaGlsZE5vZGUpKTsKKyAgICBWaXNpYmxl
UG9zaXRpb24gbGFzdEluTGlzdENoaWxkKGxhc3RQb3NpdGlvbkluTm9kZShsaXN0Q2hpbGROb2Rl
KSk7CiAKICAgICBpZiAoZmlyc3RJbkxpc3RDaGlsZCAhPSB2aXNpYmxlUG9zIHx8IGxhc3RJbkxp
c3RDaGlsZCAhPSB2aXNpYmxlUG9zKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMjYgKzEyMyw2
IEBAIGlubGluZSBQb3NpdGlvbiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2QKICAgICByZXR1cm4g
ZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpID8gcG9zaXRpb25BZnRlck5vZGUobm9kZSkgOiBs
YXN0UG9zaXRpb25Jbk5vZGUobm9kZSk7CiB9CiAKLS8vIFBvc2l0aW9uIGNyZWF0aW9uIGZ1bmN0
aW9ucyBhcmUgaW5saW5lIHRvIHByZXZlbnQgcmVmLWNodXJuLgotLy8gT3RoZXIgUG9zaXRpb24g
Y3JlYXRpb24gZnVuY3Rpb25zIGFyZSBpbiBQb3NpdGlvbi5oCi0vLyBidXQgdGhlc2UgZGVwZW5k
IG9uIGxhc3RPZmZzZXRGb3JFZGl0aW5nIHdoaWNoIGlzIGRlZmluZWQgaW4gaHRtbGVkaXRpbmcu
aC4KLQotLy8gTk9URTogZmlyc3QvbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlIHJldHVy
biBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMgKGxpa2UgW2ltZywgMF0pCi0vLyBmb3IgZWxlbWVu
dHMgd2hpY2ggZWRpdGluZyBpZ25vcmVzLiAgVGhlIHJlc3Qgb2YgdGhlIGVkaXRpbmcgY29kZSB3
aWxsIHRyZWF0IFtpbWcsIDBdCi0vLyBhcyAidGhlIGxhc3QgcG9zaXRpb24gYmVmb3JlIHRoZSBp
bWciLgotLy8gTmV3IGNvZGUgc2hvdWxkIHVzZSB0aGUgY3JlYXRpb24gZnVuY3Rpb25zIGluIFBv
c2l0aW9uLmggaW5zdGVhZC4KLWlubGluZSBQb3NpdGlvbiBmaXJzdERlZXBFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKE5vZGUqIGFuY2hvck5vZGUpCi17Ci0gICAgQVNTRVJUKGFuY2hvck5vZGUpOwot
ICAgIHJldHVybiBQb3NpdGlvbihhbmNob3JOb2RlLCAwKTsKLX0KLQotaW5saW5lIFBvc2l0aW9u
IGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShOb2RlKiBhbmNob3JOb2RlKQotewotICAg
IEFTU0VSVChhbmNob3JOb2RlKTsKLSAgICByZXR1cm4gUG9zaXRpb24oYW5jaG9yTm9kZSwgbGFz
dE9mZnNldEZvckVkaXRpbmcoYW5jaG9yTm9kZSkpOwotfQotICAgICAgIAogLy8gY29tcGFyaXNp
b24gZnVuY3Rpb25zIG9uIFBvc2l0aW9uCiAgICAgCiBpbnQgY29tcGFyZVBvc2l0aW9ucyhjb25z
dCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHAJKHJldmlzaW9uIDc4ODQ5KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ2LDcgKzc0Niw3
IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYKICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAogICAgIGlmIChpc1JlbmRlcmVkQXNOb25Jbmxp
bmVUYWJsZUltYWdlT3JIUihzdGFydE5vZGUpKQotICAgICAgICByZXR1cm4gZmlyc3REZWVwRWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZShzdGFydE5vZGUpOworICAgICAgICByZXR1cm4gcG9zaXRpb25C
ZWZvcmVOb2RlKHN0YXJ0Tm9kZSk7CiAKICAgICBOb2RlKiBzdGFydEJsb2NrID0gZW5jbG9zaW5n
QmxvY2soc3RhcnROb2RlKTsKIApAQCAtODA1LDcgKzgwNSw3IEBAIFZpc2libGVQb3NpdGlvbiBl
bmRPZlBhcmFncmFwaChjb25zdCBWaXMKICAgICBOb2RlKiBzdGFydE5vZGUgPSBwLm5vZGUoKTsK
IAogICAgIGlmIChpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihzdGFydE5vZGUp
KQotICAgICAgICByZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHN0YXJ0Tm9k
ZSk7CisgICAgICAgIHJldHVybiBwb3NpdGlvbkFmdGVyTm9kZShzdGFydE5vZGUpOwogICAgIAog
ICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpOwogICAgIE5v
ZGUgKnN0YXlJbnNpZGVCbG9jayA9IHN0YXJ0QmxvY2s7CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCBW
aXNpYmxlUG9zaXRpb24gc3RhcnRPZkVkaXRhYmxlQ29udGVudChjCiAgICAgaWYgKCFoaWdoZXN0
Um9vdCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgcmV0dXJuIGZp
cnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpOworICAgIHJldHVybiBm
aXJzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290KTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIGVu
ZE9mRWRpdGFibGVDb250ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9u
KQpAQCAtMTAxNCw3ICsxMDE0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mRWRpdGFibGVDb250
ZW50KGNvbgogICAgIGlmICghaGlnaGVzdFJvb3QpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsKIAotICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGln
aGVzdFJvb3QpOworICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpOwog
fQogCiBzdGF0aWMgdm9pZCBnZXRMZWFmQm94ZXNJbkxvZ2ljYWxPcmRlcihSb290SW5saW5lQm94
KiByb290Qm94LCBWZWN0b3I8SW5saW5lQm94Kj4mIGxlYWZCb3hlc0luTG9naWNhbE9yZGVyKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDc4ODQ5
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5OTYsNyArMjk5Niw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6OnBvc2l0
aW9uRm9yUG8KIHsKICAgICAvLyBubyBjaGlsZHJlbi4uLnJldHVybiB0aGlzIHJlbmRlciBvYmpl
Y3QncyBlbGVtZW50LCBpZiB0aGVyZSBpcyBvbmUsIGFuZCBvZmZzZXQgMAogICAgIGlmICghZmly
c3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG5vZGUoKSA/
IGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSgpKSA6IFBvc2l0aW9uKDAsIDAp
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihub2RlKCkgPyBmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSgpKSA6IFBvc2l0aW9uKDAsIDApKTsKIAogICAgIGlu
dCB4UG9zID0gcG9pbnQueCgpOwogICAgIGludCB5UG9zID0gcG9pbnQueSgpOwpAQCAtMzAwNyw4
ICszMDA3LDggQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQbwogICAg
ICAgICAKICAgICAgICAgaWYgKHhQb3MgPCAwIHx8IHhQb3MgPiByaWdodCB8fCB5UG9zIDwgMCB8
fCB5UG9zID4gYm90dG9tKSB7CiAgICAgICAgICAgICBpZiAoeFBvcyA8PSByaWdodCAvIDIpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihmaXJzdERlZXBFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUoKSkpOwotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZp
c2libGVQb3NpdGlvbihsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSgpKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9u
SW5PckJlZm9yZU5vZGUobm9kZSgpKSk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJs
ZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9kZSgpKSk7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTMwNzksNyArMzA3OSw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6
OnBvc2l0aW9uRm9yUG8KICAgICBpZiAoY2xvc2VzdFJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
Y2xvc2VzdFJlbmRlcmVyLT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKG5ld1ggLSBjbG9zZXN0UmVu
ZGVyZXItPngoKSwgbmV3WSAtIGNsb3Nlc3RSZW5kZXJlci0+eSgpKTsKICAgICAKLSAgICByZXR1
cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUo
bm9kZSgpKSk7CisgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9u
SW5PckJlZm9yZU5vZGUobm9kZSgpKSk7CiB9CiAKIGJvb2wgUmVuZGVyQm94OjpzaHJpbmtUb0F2
b2lkRmxvYXRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiA3ODg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgxLDcgKzI2ODEsNyBAQCBWaXNp
YmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNpCiAgICAgICAgICAgICBpZiAocmVu
ZGVyZXIgPT0gcGFyZW50KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYg
KE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24obGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpLCBET1dO
U1RSRUFNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3Np
dGlvbkluT3JBZnRlck5vZGUobm9kZSksIERPV05TVFJFQU0pOwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gVXNlIHRoZSBwYXJlbnQgaXRzZWxmIHVubGVzcyBpdCB0b28gaXMgYW5vbnltb3VzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83881</attachid>
            <date>2011-02-25 14:51:08 -0800</date>
            <delta_ts>2011-03-08 15:46:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52642-20110225145107.patch</filename>
            <type>text/plain</type>
            <size>26782</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5NDY3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTEtMDItMjIgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEdldCByaWQgb2YgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9u
Rm9yTm9kZSBhbmQgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjY0MgorCisgICAgICAgIFJlcGxh
Y2luZyBjYWxscyB0byBmaXJzdC9sYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUgd2l0aCBj
YWxscyB0byB0aGVpciBhbmFsb2dvdXMKKyAgICAgICAgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIG5l
dyBwb3NpdGlvbnMuIEFsc28gZml4aW5nIHZhcmlvdXMgcGFydHMgb2YgZWRpdGluZyBjb2RlIHRo
YXQKKyAgICAgICAgaW5jb3JyZWN0bHkgaGFuZGxlZCB0aGUgbmV3IHBvc2l0aW9ucyBub3cgYmVp
bmcgY3JlYXRlZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyByZWZhY3Rvcmlu
Zy9jbGVhbnVwLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mU3R5bGVSYW5nZSk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlKToKKyAg
ICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJl
dmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Om5leHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UG9zaXRpb246OmF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBvc2l0aW9uOjphdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvc2l0aW9uOjp1cHN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6aXNDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmdldElubGlu
ZUJveEFuZE9mZnNldCk6CisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjpvcGVyYXRvciBQb3NpdGlvbik6Cisg
ICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0
dGluZ1RleHROb2Rlc0lmTmVlZGVkKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3Np
dGlvbkF2b2lkaW5nU3BlY2lhbEVsZW1lbnRCb3VuZGFyeSk6CisgICAgICAgICogZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzVGFibGVDZWxs
RW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3Zl
Tm9kZSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAg
ICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
ZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBhcmFncmFwaCk6CisgICAgICAgICogZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25BdEVuZE9mSW5zZXJ0ZWRDb250ZW50KToKKyAgICAgICAg
KiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
Ojpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlU2Vs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlv
bkZyb21Db250ZW50c09mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9u
OjphZGp1c3RTZWxlY3Rpb25Ub0F2b2lkQ3Jvc3NpbmdFZGl0aW5nQm91bmRhcmllcyk6CisgICAg
ICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdEVk
aXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KToKKyAgICAgICAgKFdlYkNvcmU6Omxh
c3RFZGl0YWJsZVBvc2l0aW9uQmVmb3JlUG9zaXRpb25JblJvb3QpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3Np
bmdFbXB0eUxpc3RJdGVtKToKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisgICAg
ICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0
T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQYXJhZ3JhcGgpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhcnRPZkVkaXRhYmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpl
bmRPZkVkaXRhYmxlQ29udGVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpjcmVhdGVWaXNpYmxlUG9zaXRpb24pOgorCiAyMDExLTAyLTIzICBEYXZpZCBIeWF0
dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlciBh
bmQgU2ltb24gRnJhc2VyLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiA3OTQ2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1OSw3ICszNTksNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU3R5
bGVSYW5nZShjCiAgICAgICAgIGVuZFJlbmRlcmVyID0gcjsKICAgICB9CiAKLSAgICByZXR1cm4g
bGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGVuZFJlbmRlcmVyLT5ub2RlKCkpOworICAg
IHJldHVybiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGVuZFJlbmRlcmVyLT5ub2RlKCkpOwog
fQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHlsZVJhbmdl
Rm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA3OTQ2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzOTksOCArMjM5OSw4IEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxp
dHlSZW5kZXIKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25S
YW5nZSgpOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zID0gZmlyc3REZWVwRWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZShub2RlKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zID0gbGFz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpOworICAgIFZpc2libGVQb3NpdGlvbiBz
dGFydFBvcyA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKKyAgICBWaXNpYmxl
UG9zaXRpb24gZW5kUG9zID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2RlKTsKIAogICAg
IC8vIHRoZSBWaXNpYmxlUG9zaXRpb25zIGFyZSBlcXVhbCBmb3Igbm9kZXMgbGlrZSBidXR0b25z
LCBzbyBhZGp1c3QgZm9yIHRoYXQKICAgICAvLyBGSVhNRTogUmVhbGx5PyAgW2J1dHRvbiwgMF0g
YW5kIFtidXR0b24sIDFdIGFyZSBkaXN0aW5jdCAoYmVmb3JlIGFuZCBhZnRlciB0aGUgYnV0dG9u
KQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZpc2lvbiA3OTQ2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMiArMTU0
LDEyIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwYXJlbnRBbmNob3JlZEVxdWl2YWwKICAgICAgICAg
cmV0dXJuIFBvc2l0aW9uKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG9ubHkg
YmUgbmVjZXNzYXJ5IGZvciBsZWdhY3kgcG9zaXRpb25zLCBidXQgaXMgYWxzbyBuZWVkZWQgZm9y
IHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIFRhYmxlcwotICAgIGlmIChtX29mZnNldCA8PSAw
KSB7CisgICAgaWYgKG1fb2Zmc2V0IDw9IDAgJiYgbV9hbmNob3JUeXBlICE9IFBvc2l0aW9uSXNB
ZnRlckFuY2hvcikgewogICAgICAgICBpZiAobV9hbmNob3JOb2RlLT5wYXJlbnROb2RlKCkgJiYg
KGVkaXRpbmdJZ25vcmVzQ29udGVudChtX2FuY2hvck5vZGUuZ2V0KCkpIHx8IGlzVGFibGVFbGVt
ZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkpKQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5Q
YXJlbnRCZWZvcmVOb2RlKG1fYW5jaG9yTm9kZS5nZXQoKSk7CiAgICAgICAgIHJldHVybiBQb3Np
dGlvbihtX2FuY2hvck5vZGUsIDAsIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgfQot
ICAgIGlmICghbV9hbmNob3JOb2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSAmJiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9vZmZzZXQpID09IG1fYW5jaG9yTm9kZS0+Y2hpbGROb2RlQ291bnQoKQor
ICAgIGlmICghbV9hbmNob3JOb2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSAmJiAobV9hbmNob3JU
eXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9v
ZmZzZXQpID09IG1fYW5jaG9yTm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKICAgICAgICAgJiYgKGVk
aXRpbmdJZ25vcmVzQ29udGVudChtX2FuY2hvck5vZGUuZ2V0KCkpIHx8IGlzVGFibGVFbGVtZW50
KG1fYW5jaG9yTm9kZS5nZXQoKSkpKSB7CiAgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50
QWZ0ZXJOb2RlKG1fYW5jaG9yTm9kZS5nZXQoKSk7CiAgICAgfQpAQCAtMjMzLDE1ICsyMzMsMTYg
QEAgUG9zaXRpb24gUG9zaXRpb246OnByZXZpb3VzKFBvc2l0aW9uTW92ZQogICAgIE5vZGUqIG4g
PSBkZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgIAotICAgIGludCBvID0gbV9vZmZzZXQ7CisKKyAgICAvLyBGSVhNRTogRXhwbGljaXRseSBo
YW5kbGUgYmVmb3JlL2FmdGVyIHBvc2l0aW9ucworICAgIGludCBvID0gZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKTsKICAgICAvLyBGSVhNRTogTmVnYXRpdmUgb2Zmc2V0cyBzaG91bGRuJ3QgYmUg
YWxsb3dlZC4gV2Ugc2hvdWxkIGNhdGNoIHRoaXMgZWFybGllci4KICAgICBBU1NFUlQobyA+PSAw
KTsKIAogICAgIGlmIChvID4gMCkgewogICAgICAgICBOb2RlKiBjaGlsZCA9IG4tPmNoaWxkTm9k
ZShvIC0gMSk7CiAgICAgICAgIGlmIChjaGlsZCkKLSAgICAgICAgICAgIHJldHVybiBsYXN0RGVl
cEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoY2hpbGQpOworICAgICAgICAgICAgcmV0dXJuIGxhc3RQ
b3NpdGlvbkluT3JBZnRlck5vZGUoY2hpbGQpOwogCiAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28g
cmVhc29ucyBjaGlsZCBtaWdodCBiZSAwOgogICAgICAgICAvLyAgIDEpIFRoZSBub2RlIGlzIG5v
ZGUgbGlrZSBhIHRleHQgbm9kZSB0aGF0IGlzIG5vdCBhbiBlbGVtZW50LCBhbmQgdGhlcmVmb3Jl
IGhhcyBubyBjaGlsZHJlbi4KQEAgLTI3MiwxNSArMjczLDE2IEBAIFBvc2l0aW9uIFBvc2l0aW9u
OjpuZXh0KFBvc2l0aW9uTW92ZVR5cGUKICAgICBOb2RlKiBuID0gZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAKLSAgICBpbnQgbyA9IG1f
b2Zmc2V0OworCisgICAgLy8gRklYTUU6IEV4cGxpY2l0bHkgaGFuZGxlIGJlZm9yZS9hZnRlciBw
b3NpdGlvbnMKKyAgICBpbnQgbyA9IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgLy8g
RklYTUU6IE5lZ2F0aXZlIG9mZnNldHMgc2hvdWxkbid0IGJlIGFsbG93ZWQuIFdlIHNob3VsZCBj
YXRjaCB0aGlzIGVhcmxpZXIuCiAgICAgQVNTRVJUKG8gPj0gMCk7CiAKICAgICBOb2RlKiBjaGls
ZCA9IG4tPmNoaWxkTm9kZShvKTsKICAgICBpZiAoY2hpbGQgfHwgKCFuLT5oYXNDaGlsZE5vZGVz
KCkgJiYgbyA8IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG4pKSkgewogICAgICAgICBpZiAoY2hpbGQp
Ci0gICAgICAgICAgICByZXR1cm4gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShjaGls
ZCk7CisgICAgICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGNoaWxk
KTsKIAogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgY2hpbGQgbWlnaHQgYmUgMDoK
ICAgICAgICAgLy8gICAxKSBUaGUgbm9kZSBpcyBub2RlIGxpa2UgYSB0ZXh0IG5vZGUgdGhhdCBp
cyBub3QgYW4gZWxlbWVudCwgYW5kIHRoZXJlZm9yZSBoYXMgbm8gY2hpbGRyZW4uCkBAIC0zMTYs
NyArMzE4LDcgQEAgYm9vbCBQb3NpdGlvbjo6YXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvcgogewog
ICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fb2Zm
c2V0IDw9IDA7CisgICAgcmV0dXJuIG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQmVmb3JlQW5j
aG9yIHx8IG1fb2Zmc2V0IDw9IDA7CiB9CiAKIGJvb2wgUG9zaXRpb246OmF0TGFzdEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUoKSBjb25zdApAQCAtNTYxLDcgKzU2Myw3IEBAIFBvc2l0aW9uIFBvc2l0
aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmQKICAgICAgICAgLy8gUmV0dXJuIHBvc2l0aW9uIGFm
dGVyIHRhYmxlcyBhbmQgbm9kZXMgd2hpY2ggaGF2ZSBjb250ZW50IHRoYXQgY2FuIGJlIGlnbm9y
ZWQuCiAgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY3VycmVudE5vZGUpIHx8IGlz
VGFibGVFbGVtZW50KGN1cnJlbnROb2RlKSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3Mu
YXRFbmRPZk5vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKGN1cnJlbnROb2RlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRp
b25BZnRlck5vZGUoY3VycmVudE5vZGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIApAQCAtMTA0NCw3ICsxMDQ2LDggQEAgc3RhdGljIFBvc2l0aW9uIHVwc3RyZWFtSWdub3Jp
bmdFZGl0aW5nQgogCiB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmlu
aXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveCom
IGlubGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKIHsKLSAgICBjYXJldE9mZnNldCA9
IG1fb2Zmc2V0OworICAgIC8vIEZJWE1FOiBFeHBsaWNpdGx5IGhhbmRsZSBiZWZvcmUvYWZ0ZXIg
cG9zaXRpb25zCisgICAgY2FyZXRPZmZzZXQgPSBkZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigp
OwogCiAgICAgaWYgKCFyZW5kZXJlci0+aXNUZXh0KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5oCShyZXZpc2lvbiA3OTQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBQb3NpdGlvbiYgYQogewogICAgIC8vIEZJWE1FOiBJbiA8ZGl2PjxpbWc+PC9kaXY+IFtk
aXYsIDBdICE9IFtpbWcsIDBdIGV2ZW4gdGhvdWdoIG1vc3Qgb2YgdGhlCiAgICAgLy8gZWRpdGlu
ZyBjb2RlIHdpbGwgdHJlYXQgdGhlbSBhcyBpZGVudGljYWwuCi0gICAgcmV0dXJuIGEuYW5jaG9y
Tm9kZSgpID09IGIuYW5jaG9yTm9kZSgpICYmIGEuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA9
PSBiLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgcmV0dXJuIGEuYW5jaG9yTm9kZSgp
ID09IGIuYW5jaG9yTm9kZSgpICYmIGEuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA9PSBiLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgJiYgYS5hbmNob3JUeXBlKCkgPT0gYi5hbmNob3JUeXBl
KCk7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUG9zaXRpb24mIGEsIGNvbnN0
IFBvc2l0aW9uJiBiKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNw
cAkocmV2aXNpb24gNzk0NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgUG9zaXRpb25JdGVyYXRvcjo6
b3BlcmF0b3IgUG9zaXRpb24oKSBjbwogICAgICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJl
Zm9yZU5vZGUobV9ub2RlQWZ0ZXJQb3NpdGlvbkluQW5jaG9yKTsKICAgICB9CiAgICAgaWYgKG1f
YW5jaG9yTm9kZS0+aGFzQ2hpbGROb2RlcygpKQotICAgICAgICByZXR1cm4gbGFzdERlZXBFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKG1fYW5jaG9yTm9kZSk7CisgICAgICAgIHJldHVybiBsYXN0UG9z
aXRpb25Jbk9yQWZ0ZXJOb2RlKG1fYW5jaG9yTm9kZSk7CiAgICAgcmV0dXJuIFBvc2l0aW9uKG1f
YW5jaG9yTm9kZSwgbV9vZmZzZXRJbkFuY2hvcik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA3OTQ2NykK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTY4LDggKzExNjgsOCBAQCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cG9zaXRpb25BCiAKICAgICAvLyBEb24ndCBhdm9pZCBibG9jayBsZXZlbCBhbmNob3Jz
LCBiZWNhdXNlIHRoYXQgd291bGQgaW5zZXJ0IGNvbnRlbnQgaW50byB0aGUgd3JvbmcgcGFyYWdy
YXBoLgogICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgIWlzQmxvY2soZW5jbG9zaW5nQW5jaG9y
KSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkFuY2hvcihmaXJzdERlZXBFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKGVuY2xvc2luZ0FuY2hvcikpOwotICAgICAgICBWaXNpYmxlUG9z
aXRpb24gbGFzdEluQW5jaG9yKGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShlbmNsb3Np
bmdBbmNob3IpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5BbmNob3IoZmlyc3RQ
b3NpdGlvbkluTm9kZShlbmNsb3NpbmdBbmNob3IpKTsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IGxhc3RJbkFuY2hvcihsYXN0UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7CiAgICAg
ICAgIC8vIElmIHZpc3VhbGx5IGp1c3QgYWZ0ZXIgdGhlIGFuY2hvciwgaW5zZXJ0ICppbnNpZGUq
IHRoZSBhbmNob3IgdW5sZXNzIGl0J3MgdGhlIGxhc3QKICAgICAgICAgLy8gVmlzaWJsZVBvc2l0
aW9uIGluIHRoZSBkb2N1bWVudCwgdG8gbWF0Y2ggTlNUZXh0Vmlldy4KICAgICAgICAgaWYgKHZp
c2libGVQb3MgPT0gbGFzdEluQW5jaG9yKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc5NDY3KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgYm9vbCBpc1RhYmxlUm93KGNvbnN0IE5v
ZGUqIG5vZGUpCiBzdGF0aWMgYm9vbCBpc1RhYmxlQ2VsbEVtcHR5KE5vZGUqIGNlbGwpCiB7CiAg
ICAgQVNTRVJUKGlzVGFibGVDZWxsKGNlbGwpKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoY2VsbCkpID09IFZpc2libGVQb3NpdGlv
bihsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoY2VsbCkpOworICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShjZWxsKSkgPT0gVmlzaWJsZVBvc2l0aW9u
KGxhc3RQb3NpdGlvbkluTm9kZShjZWxsKSk7CiB9CiAKIHN0YXRpYyBib29sIGlzVGFibGVSb3dF
bXB0eShOb2RlKiByb3cpCkBAIC0zNzgsOSArMzc4LDkgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpyZW1vdmVOb2RlKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGlm
IChub2RlID09IG1fc3RhcnRCbG9jayAmJiAhaXNFbmRPZkJsb2NrKFZpc2libGVQb3NpdGlvbihm
aXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG1fc3RhcnRCbG9jay5nZXQoKSkpLnByZXZp
b3VzKCkpKQorICAgIGlmIChub2RlID09IG1fc3RhcnRCbG9jayAmJiAhaXNFbmRPZkJsb2NrKFZp
c2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG1fc3RhcnRCbG9jay5nZXQoKSkpLnBy
ZXZpb3VzKCkpKQogICAgICAgICBtX25lZWRQbGFjZWhvbGRlciA9IHRydWU7Ci0gICAgZWxzZSBp
ZiAobm9kZSA9PSBtX2VuZEJsb2NrICYmICFpc1N0YXJ0T2ZCbG9jayhWaXNpYmxlUG9zaXRpb24o
bGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG1fc3RhcnRCbG9jay5nZXQoKSkpLm5leHQo
KSkpCisgICAgZWxzZSBpZiAobm9kZSA9PSBtX2VuZEJsb2NrICYmICFpc1N0YXJ0T2ZCbG9jayhW
aXNpYmxlUG9zaXRpb24obGFzdFBvc2l0aW9uSW5Ob2RlKG1fc3RhcnRCbG9jay5nZXQoKSkpLm5l
eHQoKSkpCiAgICAgICAgIG1fbmVlZFBsYWNlaG9sZGVyID0gdHJ1ZTsKICAgICAKICAgICAvLyBG
SVhNRTogVXBkYXRlIHRoZSBlbmRwb2ludHMgb2YgdGhlIHJhbmdlIGJlaW5nIGRlbGV0ZWQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDc5NDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRM
aW5lQnJlYWtDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDcgKzE3MSw3IEBAIHZv
aWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGxlYXZlcyBh
bmQgdGhlbiBjb21lcyBiYWNrLCBuZXcgaW5wdXQgd2lsbCBoYXZlIHRoZSByaWdodCBzdHlsZS4K
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBhbHdheXMgYXBwbHkgdGhlIHR5cGluZyBz
dHlsZSB0byB0aGUgbGluZSBicmVhayBoZXJlLAogICAgICAgICAvLyBzZWUgPHJkYXI6Ly9wcm9i
bGVtLzU3OTQ0NjI+LgotICAgICAgICBhcHBseVN0eWxlKHR5cGluZ1N0eWxlLmdldCgpLCBmaXJz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGVUb0luc2VydC5nZXQoKSksIGxhc3REZWVw
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpKTsKKyAgICAgICAgYXBw
bHlTdHlsZSh0eXBpbmdTdHlsZS5nZXQoKSwgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5v
ZGVUb0luc2VydC5nZXQoKSksIGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9kZVRvSW5zZXJ0
LmdldCgpKSk7CiAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHRoaXMgYXBwbHlTdHlsZSBvcGVyYXRl
cyBvbiBhIFJhbmdlLCBpdCBzdGlsbCBzZXRzIGFuIGVuZGluZ1NlbGVjdGlvbigpLgogICAgICAg
ICAvLyBJdCB0cmllcyB0byBzZXQgYSBWaXNpYmxlU2VsZWN0aW9uIGFyb3VuZCB0aGUgY29udGVu
dCBpdCBvcGVyYXRlZCBvbi4gU28sIHRoYXQgVmlzaWJsZVNlbGVjdGlvbgogICAgICAgICAvLyB3
aWxsIGVpdGhlciAoYSkgc2VsZWN0IHRoZSBsaW5lIGJyZWFrIHdlIGluc2VydGVkLCBvciBpdCB3
aWxsIChiKSBiZSBhIGNhcmV0IGp1c3QgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydExpc3RDb21tYW5kLmNwcAkocmV2aXNpb24gNzk0NjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDgg
KzI1Nyw4IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBhcmFncmEKICAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnQ7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZDsKICAgICBpZiAo
bGlzdENoaWxkTm9kZS0+aGFzVGFnTmFtZShsaVRhZykpIHsKLSAgICAgICAgc3RhcnQgPSBmaXJz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxpc3RDaGlsZE5vZGUpOwotICAgICAgICBlbmQg
PSBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGlzdENoaWxkTm9kZSk7CisgICAgICAg
IHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluTm9kZShsaXN0Q2hpbGROb2RlKTsKKyAgICAgICAgZW5k
ID0gbGFzdFBvc2l0aW9uSW5Ob2RlKGxpc3RDaGlsZE5vZGUpOwogICAgICAgICBuZXh0TGlzdENo
aWxkID0gbGlzdENoaWxkTm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgcHJldmlvdXNMaXN0
Q2hpbGQgPSBsaXN0Q2hpbGROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB9IGVsc2UgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDc5NDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzNiwxMCArNTM2LDEw
IEBAIFZpc2libGVQb3NpdGlvbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDoKIHsKICAgICBOb2Rl
KiBsYXN0Tm9kZSA9IG1fbGFzdExlYWZJbnNlcnRlZC5nZXQoKTsKICAgICAvLyBGSVhNRTogV2h5
IGlzIHRoaXMgaGFjayBoZXJlPyAgV2hhdCdzIHNwZWNpYWwgYWJvdXQgPHNlbGVjdD4gdGFncz8K
LSAgICBOb2RlKiBlbmNsb3NpbmdTZWxlY3QgPSBlbmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJzdERl
ZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxhc3ROb2RlKSwgc2VsZWN0VGFnKTsKKyAgICBOb2Rl
KiBlbmNsb3NpbmdTZWxlY3QgPSBlbmNsb3NpbmdOb2RlV2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5P
ckJlZm9yZU5vZGUobGFzdE5vZGUpLCBzZWxlY3RUYWcpOwogICAgIGlmIChlbmNsb3NpbmdTZWxl
Y3QpCiAgICAgICAgIGxhc3ROb2RlID0gZW5jbG9zaW5nU2VsZWN0OwotICAgIHJldHVybiBsYXN0
RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGFzdE5vZGUpOworICAgIHJldHVybiBsYXN0UG9z
aXRpb25Jbk9yQWZ0ZXJOb2RlKGxhc3ROb2RlKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpwb3NpdGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc5
NDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5
UHJlc3NlZChUZXgKICAgICAgICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoU2VsZWN0aW9uQ29udHJv
bGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIGdyYW51bGFyaXR5KTsK
ICAgICAgICAgLy8gSWYgdGhlIGNhcmV0IGlzIGp1c3QgYWZ0ZXIgYSB0YWJsZSwgc2VsZWN0IHRo
ZSB0YWJsZSBhbmQgZG9uJ3QgZGVsZXRlIGFueXRoaW5nLgogICAgICAgICB9IGVsc2UgaWYgKE5v
ZGUqIHRhYmxlID0gaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZSh2aXNpYmxlU3RhcnQpKSB7Ci0g
ICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3NpdGlvbkFm
dGVyTm9kZSh0YWJsZSksIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIERPV05TVFJFQU0pKTsK
KyAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9u
QmVmb3JlTm9kZSh0YWJsZSksIGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIERPV05TVFJFQU0p
KTsKICAgICAgICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChEZWxldGVLZXkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01NzEsNyArNTcxLDcgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlcwogICAgICAgICAgICAgZG93bnN0cmVhbUVu
ZCA9IHZpc2libGVFbmQubmV4dCh0cnVlKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsK
ICAgICAgICAgLy8gV2hlbiBkZWxldGluZyB0YWJsZXM6IFNlbGVjdCB0aGUgdGFibGUgZmlyc3Qs
IHRoZW4gcGVyZm9ybSB0aGUgZGVsZXRpb24KICAgICAgICAgaWYgKGRvd25zdHJlYW1FbmQuZGVw
cmVjYXRlZE5vZGUoKSAmJiBkb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVy
KCkgJiYgZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxl
KCkgJiYgIWRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkgewotICAgICAg
ICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9u
KCkuZW5kKCksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShkb3duc3RyZWFtRW5kLmRl
cHJlY2F0ZWROb2RlKCkpLCBET1dOU1RSRUFNKSk7CisgICAgICAgICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oVmlzaWJsZVNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKSwgcG9zaXRpb25B
ZnRlck5vZGUoZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSwgRE9XTlNUUkVBTSkpOwog
ICAgICAgICAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEZvcndhcmREZWxldGVLZXkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDc5NDY3KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODks
NyArODksNyBAQCBWaXNpYmxlU2VsZWN0aW9uOjpWaXNpYmxlU2VsZWN0aW9uKGNvbnN0CiAKIFZp
c2libGVTZWxlY3Rpb24gVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZO
b2RlKE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24oZmlyc3REZWVw
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKSwgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKG5vZGUpLCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbihmaXJz
dFBvc2l0aW9uSW5Ob2RlKG5vZGUpLCBsYXN0UG9zaXRpb25Jbk5vZGUobm9kZSksIERPV05TVFJF
QU0pOwogfQogCiB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEJhc2UoY29uc3QgUG9zaXRpb24m
IHBvc2l0aW9uKQpAQCAtNDk4LDEzICs0OTgsMTMgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjph
ZGp1c3RTZWxlY3Rpb25UbwogICAgICAgICAgICAgUG9zaXRpb24gcCA9IHByZXZpb3VzVmlzdWFs
bHlEaXN0aW5jdENhbmRpZGF0ZShtX2VuZCk7CiAgICAgICAgICAgICBOb2RlKiBzaGFkb3dBbmNl
c3RvciA9IGVuZFJvb3QgPyBlbmRSb290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CiAgICAg
ICAgICAgICBpZiAocC5pc051bGwoKSAmJiBlbmRSb290ICYmIChzaGFkb3dBbmNlc3RvciAhPSBl
bmRSb290KSkKLSAgICAgICAgICAgICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKHNoYWRvd0FuY2VzdG9yKTsKKyAgICAgICAgICAgICAgICBwID0gbGFzdFBvc2l0aW9uSW5O
b2RlKHNoYWRvd0FuY2VzdG9yKTsKICAgICAgICAgICAgIHdoaWxlIChwLmlzTm90TnVsbCgpICYm
ICEobG93ZXN0RWRpdGFibGVBbmNlc3RvcihwLmRlcHJlY2F0ZWROb2RlKCkpID09IGJhc2VFZGl0
YWJsZUFuY2VzdG9yICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkpKSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogcm9vdCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHApOwogICAgICAgICAgICAg
ICAgIHNoYWRvd0FuY2VzdG9yID0gcm9vdCA/IHJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDog
MDsKICAgICAgICAgICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkg
PyBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShwLmRlcHJlY2F0ZWROb2RlKCkpIDogcHJldmlv
dXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOwogICAgICAgICAgICAgICAgIGlmIChwLmlz
TnVsbCgpICYmIChzaGFkb3dBbmNlc3RvciAhPSByb290KSkKLSAgICAgICAgICAgICAgICAgICAg
cCA9IGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNlc3Rvcik7CisgICAg
ICAgICAgICAgICAgICAgIHAgPSBsYXN0UG9zaXRpb25Jbk5vZGUoc2hhZG93QW5jZXN0b3IpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzKHApOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gNzk0
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjc3LDE0ICsyNzcsMTQgQEAgUG9zaXRpb24gcHJldmlvdXNWaXN1YWxseURpc3Rp
bmN0Q2FuZGlkYQogVmlzaWJsZVBvc2l0aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdGVyUG9z
aXRpb25JblJvb3QoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBOb2RlKiBoaWdoZXN0Um9vdCkK
IHsKICAgICAvLyBwb3NpdGlvbiBmYWxscyBiZWZvcmUgaGlnaGVzdFJvb3QuCi0gICAgaWYgKGNv
bXBhcmVQb3NpdGlvbnMocG9zaXRpb24sIGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUo
aGlnaGVzdFJvb3QpKSA9PSAtMSAmJiBoaWdoZXN0Um9vdC0+aXNDb250ZW50RWRpdGFibGUoKSkK
LSAgICAgICAgcmV0dXJuIGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJv
b3QpOworICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHBvc2l0aW9uLCBmaXJzdFBvc2l0aW9uSW5O
b2RlKGhpZ2hlc3RSb290KSkgPT0gLTEgJiYgaGlnaGVzdFJvb3QtPmlzQ29udGVudEVkaXRhYmxl
KCkpCisgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoaGlnaGVzdFJv
b3QpOwogCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwogICAgIAogICAgIGlmIChOb2RlKiBz
aGFkb3dBbmNlc3RvciA9IHAuZGVwcmVjYXRlZE5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkp
CiAgICAgICAgIGlmIChzaGFkb3dBbmNlc3RvciAhPSBwLmRlcHJlY2F0ZWROb2RlKCkpCi0gICAg
ICAgICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9y
KTsKKyAgICAgICAgICAgIHAgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKHNoYWRvd0FuY2Vz
dG9yKTsKICAgICAKICAgICB3aGlsZSAocC5kZXByZWNhdGVkTm9kZSgpICYmICFpc0VkaXRhYmxl
UG9zaXRpb24ocCkgJiYgcC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0
Um9vdCkpCiAgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA/IHBv
c2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA6IG5leHRWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKHApOwpAQCAtMjk4LDE0ICsyOTgsMTQgQEAgVmlzaWJsZVBvc2l0
aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdAogVmlzaWJsZVBvc2l0aW9uIGxhc3RFZGl0YWJs
ZVBvc2l0aW9uQmVmb3JlUG9zaXRpb25JblJvb3QoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBO
b2RlKiBoaWdoZXN0Um9vdCkKIHsKICAgICAvLyBXaGVuIHBvc2l0aW9uIGZhbGxzIGFmdGVyIGhp
Z2hlc3RSb290LCB0aGUgcmVzdWx0IGlzIGVhc3kgdG8gY29tcHV0ZS4KLSAgICBpZiAoY29tcGFy
ZVBvc2l0aW9ucyhwb3NpdGlvbiwgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hl
c3RSb290KSkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZShoaWdoZXN0Um9vdCk7CisgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb24sIGxh
c3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCkpID09IDEpCisgICAgICAgIHJldHVybiBsYXN0
UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGhpZ2hlc3RSb290KTsKIAogICAgIFBvc2l0aW9uIHAgPSBw
b3NpdGlvbjsKICAgICAKICAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3IgPSBwLmRlcHJlY2F0
ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQogICAgICAgICBpZiAoc2hhZG93QW5jZXN0
b3IgIT0gcC5kZXByZWNhdGVkTm9kZSgpKQotICAgICAgICAgICAgcCA9IGZpcnN0RGVlcEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOworICAgICAgICAgICAgcCA9IGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAgCiAgICAgd2hpbGUg
KHAuZGVwcmVjYXRlZE5vZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApICYmIHAuZGVwcmVj
YXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICBwID0gaXNB
dG9taWNOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkgPyBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9k
ZShwLmRlcHJlY2F0ZWROb2RlKCkpIDogcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KHApOwpAQCAtNzIxLDggKzcyMSw4IEBAIE5vZGUqIGVuY2xvc2luZ0VtcHR5TGlzdEl0ZW0oY29u
c3QgVmlzaWIKICAgICBpZiAoIWxpc3RDaGlsZE5vZGUgfHwgIWlzU3RhcnRPZlBhcmFncmFwaCh2
aXNpYmxlUG9zKSB8fCAhaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkxpc3RDaGlsZChmaXJzdERlZXBF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxpc3RDaGlsZE5vZGUpKTsKLSAgICBWaXNpYmxlUG9zaXRp
b24gbGFzdEluTGlzdENoaWxkKGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0Q2hp
bGROb2RlKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5MaXN0Q2hpbGQoZmlyc3RQb3Np
dGlvbkluTm9kZShsaXN0Q2hpbGROb2RlKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkxp
c3RDaGlsZChsYXN0UG9zaXRpb25Jbk5vZGUobGlzdENoaWxkTm9kZSkpOwogCiAgICAgaWYgKGZp
cnN0SW5MaXN0Q2hpbGQgIT0gdmlzaWJsZVBvcyB8fCBsYXN0SW5MaXN0Q2hpbGQgIT0gdmlzaWJs
ZVBvcykKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0
bWxlZGl0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5oCShyZXZpc2lvbiA3OTQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDI2ICsxMjMsNiBAQCBpbmxpbmUgUG9zaXRp
b24gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kCiAgICAgcmV0dXJuIGVkaXRpbmdJZ25vcmVzQ29u
dGVudChub2RlKSA/IHBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpIDogbGFzdFBvc2l0aW9uSW5Ob2Rl
KG5vZGUpOwogfQogCi0vLyBQb3NpdGlvbiBjcmVhdGlvbiBmdW5jdGlvbnMgYXJlIGlubGluZSB0
byBwcmV2ZW50IHJlZi1jaHVybi4KLS8vIE90aGVyIFBvc2l0aW9uIGNyZWF0aW9uIGZ1bmN0aW9u
cyBhcmUgaW4gUG9zaXRpb24uaAotLy8gYnV0IHRoZXNlIGRlcGVuZCBvbiBsYXN0T2Zmc2V0Rm9y
RWRpdGluZyB3aGljaCBpcyBkZWZpbmVkIGluIGh0bWxlZGl0aW5nLmguCi0KLS8vIE5PVEU6IGZp
cnN0L2xhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSByZXR1cm4gbGVnYWN5IGVkaXRpbmcg
cG9zaXRpb25zIChsaWtlIFtpbWcsIDBdKQotLy8gZm9yIGVsZW1lbnRzIHdoaWNoIGVkaXRpbmcg
aWdub3Jlcy4gIFRoZSByZXN0IG9mIHRoZSBlZGl0aW5nIGNvZGUgd2lsbCB0cmVhdCBbaW1nLCAw
XQotLy8gYXMgInRoZSBsYXN0IHBvc2l0aW9uIGJlZm9yZSB0aGUgaW1nIi4KLS8vIE5ldyBjb2Rl
IHNob3VsZCB1c2UgdGhlIGNyZWF0aW9uIGZ1bmN0aW9ucyBpbiBQb3NpdGlvbi5oIGluc3RlYWQu
Ci1pbmxpbmUgUG9zaXRpb24gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShOb2RlKiBh
bmNob3JOb2RlKQotewotICAgIEFTU0VSVChhbmNob3JOb2RlKTsKLSAgICByZXR1cm4gUG9zaXRp
b24oYW5jaG9yTm9kZSwgMCk7Ci19Ci0KLWlubGluZSBQb3NpdGlvbiBsYXN0RGVlcEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUoTm9kZSogYW5jaG9yTm9kZSkKLXsKLSAgICBBU1NFUlQoYW5jaG9yTm9k
ZSk7Ci0gICAgcmV0dXJuIFBvc2l0aW9uKGFuY2hvck5vZGUsIGxhc3RPZmZzZXRGb3JFZGl0aW5n
KGFuY2hvck5vZGUpKTsKLX0KLSAgICAgICAKIC8vIGNvbXBhcmlzaW9uIGZ1bmN0aW9ucyBvbiBQ
b3NpdGlvbgogICAgIAogaW50IGNvbXBhcmVQb3NpdGlvbnMoY29uc3QgUG9zaXRpb24mLCBjb25z
dCBQb3NpdGlvbiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMu
Y3BwCShyZXZpc2lvbiA3OTQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0Niw3ICs3NDYsNyBAQCBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oKTsKICAgICAKICAgICBpZiAoaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIo
c3RhcnROb2RlKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoc3RhcnROb2RlKTsKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydE5v
ZGUpOwogCiAgICAgTm9kZSogc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7
CiAKQEAgLTgwNSw3ICs4MDUsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29u
c3QgVmlzCiAgICAgTm9kZSogc3RhcnROb2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAg
aWYgKGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxlSW1hZ2VPckhSKHN0YXJ0Tm9kZSkpCi0gICAg
ICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc3RhcnROb2RlKTsKKyAg
ICAgICAgcmV0dXJuIHBvc2l0aW9uQWZ0ZXJOb2RlKHN0YXJ0Tm9kZSk7CiAgICAgCiAgICAgTm9k
ZSogc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7CiAgICAgTm9kZSAqc3Rh
eUluc2lkZUJsb2NrID0gc3RhcnRCbG9jazsKQEAgLTEwMDUsNyArMTAwNSw3IEBAIFZpc2libGVQ
b3NpdGlvbiBzdGFydE9mRWRpdGFibGVDb250ZW50KGMKICAgICBpZiAoIWhpZ2hlc3RSb290KQog
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICByZXR1cm4gZmlyc3REZWVw
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7CisgICAgcmV0dXJuIGZpcnN0UG9z
aXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZFZGl0
YWJsZUNvbnRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCkBAIC0x
MDE0LDcgKzEwMTQsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZFZGl0YWJsZUNvbnRlbnQoY29u
CiAgICAgaWYgKCFoaWdoZXN0Um9vdCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigp
OwogCi0gICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9v
dCk7CisgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCk7CiB9CiAKIHN0
YXRpYyB2b2lkIGdldExlYWZCb3hlc0luTG9naWNhbE9yZGVyKFJvb3RJbmxpbmVCb3gqIHJvb3RC
b3gsIFZlY3RvcjxJbmxpbmVCb3gqPiYgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNzk0NjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAxMyw3ICszMDEzLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQ
bwogewogICAgIC8vIG5vIGNoaWxkcmVuLi4ucmV0dXJuIHRoaXMgcmVuZGVyIG9iamVjdCdzIGVs
ZW1lbnQsIGlmIHRoZXJlIGlzIG9uZSwgYW5kIG9mZnNldCAwCiAgICAgaWYgKCFmaXJzdENoaWxk
KCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24obm9kZSgpID8gZmlyc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKCkpIDogUG9zaXRpb24oMCwgMCkpOworICAg
ICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG5vZGUoKSA/IGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShub2RlKCkpIDogUG9zaXRpb24oMCwgMCkpOwogCiAgICAgaW50IHhQb3Mg
PSBwb2ludC54KCk7CiAgICAgaW50IHlQb3MgPSBwb2ludC55KCk7CkBAIC0zMDI0LDggKzMwMjQs
OCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvCiAgICAgICAgIAog
ICAgICAgICBpZiAoeFBvcyA8IDAgfHwgeFBvcyA+IHJpZ2h0IHx8IHlQb3MgPCAwIHx8IHlQb3Mg
PiBib3R0b20pIHsKICAgICAgICAgICAgIGlmICh4UG9zIDw9IHJpZ2h0IC8gMikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGZpcnN0RGVlcEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUobm9kZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBv
c2l0aW9uKGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKCkpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVm
b3JlTm9kZShub2RlKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRp
b24obGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2RlKCkpKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMzA5Niw3ICszMDk2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRp
b25Gb3JQbwogICAgIGlmIChjbG9zZXN0UmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBjbG9zZXN0
UmVuZGVyZXItPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMobmV3WCAtIGNsb3Nlc3RSZW5kZXJlci0+
eCgpLCBuZXdZIC0gY2xvc2VzdFJlbmRlcmVyLT55KCkpOwogICAgIAotICAgIHJldHVybiBjcmVh
dGVWaXNpYmxlUG9zaXRpb24oZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKCkp
KTsKKyAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVm
b3JlTm9kZShub2RlKCkpKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OnNocmlua1RvQXZvaWRGbG9h
dHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHJldmlzaW9uIDc5NDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2ODEsNyArMjY4MSw3IEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJPYmplY3Q6OmNyZWF0ZVZpc2kKICAgICAgICAgICAgIGlmIChyZW5kZXJlciA9
PSBwYXJlbnQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoTm9kZSog
bm9kZSA9IHJlbmRlcmVyLT5ub2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbihsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSksIERPV05TVFJFQU0p
OworICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obGFzdFBvc2l0aW9uSW5P
ckFmdGVyTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBV
c2UgdGhlIHBhcmVudCBpdHNlbGYgdW5sZXNzIGl0IHRvbyBpcyBhbm9ueW1vdXMuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85102</attachid>
            <date>2011-03-08 15:46:14 -0800</date>
            <delta_ts>2011-03-14 19:05:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52642-20110308154613.patch</filename>
            <type>text/plain</type>
            <size>27005</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNTk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMDMtMDggIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEdldCByaWQgb2YgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9u
Rm9yTm9kZSBhbmQgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjY0MgorCisgICAgICAgIFJlcGxh
Y2luZyBjYWxscyB0byBmaXJzdC9sYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUgd2l0aCBj
YWxscyB0byB0aGVpciBhbmFsb2dvdXMKKyAgICAgICAgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIG5l
dyBwb3NpdGlvbnMuIEFsc28gZml4aW5nIHZhcmlvdXMgcGFydHMgb2YgZWRpdGluZyBjb2RlIHRo
YXQKKyAgICAgICAgaW5jb3JyZWN0bHkgaGFuZGxlZCB0aGUgbmV3IHBvc2l0aW9ucyBub3cgYmVp
bmcgY3JlYXRlZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyByZWZhY3Rvcmlu
Zy9jbGVhbnVwLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnZpc2libGVQb3NpdGlvblJhbmdlKToKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJldmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmF0Rmlyc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjphdExhc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjp1cHN0cmVh
bSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6aXNDYW5kaWRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldCk6CisgICAgICAgICogZG9t
L1Bvc2l0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBk
b20vUG9zaXRpb25JdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJh
dG9yOjpvcGVyYXRvciBQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21t
YW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKToKKyAgICAg
ICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbkF2b2lkaW5nU3BlY2lhbEVsZW1lbnRCb3Vu
ZGFyeSk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzVGFibGVDZWxsRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6CisgICAgICAgICogZWRpdGluZy9JbnNl
cnRMaW5lQnJlYWtDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpbmVCcmVh
a0NvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBhcmFn
cmFwaCk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25BdEVuZE9m
SW5zZXJ0ZWRDb250ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENy
b3NzaW5nRWRpdGluZ0JvdW5kYXJpZXMpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlv
bkluUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpsYXN0RWRpdGFibGVQb3NpdGlvbkJlZm9yZVBv
c2l0aW9uSW5Sb290KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0VtcHR5TGlzdEl0ZW0p
OgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKiBlZGl0aW5nL3Zp
c2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZlBhcmFncmFwaCk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjpzdGFy
dE9mRWRpdGFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mRWRpdGFibGVDb250
ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludCk6CisKIDIwMTEtMDMtMDggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1vcmUgYnVpbGQgYnVzdGFn
ZSBmaXguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDgwNTk4KQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQwMSw4ICsyNDAxLDggQEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
QWNjZXNzaWJpbGl0eVJlbmRlcgogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvblJhbmdlKCk7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3MgPSBmaXJz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpOwotICAgIFZpc2libGVQb3NpdGlvbiBl
bmRQb3MgPSBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSk7CisgICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0UG9zID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwor
ICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3MgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5v
ZGUpOwogCiAgICAgLy8gdGhlIFZpc2libGVQb3NpdGlvbnMgYXJlIGVxdWFsIGZvciBub2RlcyBs
aWtlIGJ1dHRvbnMsIHNvIGFkanVzdCBmb3IgdGhhdAogICAgIC8vIEZJWE1FOiBSZWFsbHk/ICBb
YnV0dG9uLCAwXSBhbmQgW2J1dHRvbiwgMV0gYXJlIGRpc3RpbmN0IChiZWZvcmUgYW5kIGFmdGVy
IHRoZSBidXR0b24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDgwNTk4
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYxLDEyICsxNjEsMTIgQEAgUG9zaXRpb24gUG9zaXRpb246OnBhcmVudEFuY2hvcmVkRXF1aXZh
bAogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKICAgICAKICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgb25seSBiZSBuZWNlc3NhcnkgZm9yIGxlZ2FjeSBwb3NpdGlvbnMsIGJ1dCBpcyBhbHNv
IG5lZWRlZCBmb3IgcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgVGFibGVzCi0gICAgaWYgKG1f
b2Zmc2V0IDw9IDApIHsKKyAgICBpZiAobV9vZmZzZXQgPD0gMCAmJiBtX2FuY2hvclR5cGUgIT0g
UG9zaXRpb25Jc0FmdGVyQW5jaG9yKSB7CiAgICAgICAgIGlmIChtX2FuY2hvck5vZGUtPnBhcmVu
dE5vZGUoKSAmJiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkgfHwg
aXNUYWJsZUVsZW1lbnQobV9hbmNob3JOb2RlLmdldCgpKSkpCiAgICAgICAgICAgICByZXR1cm4g
cG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobV9hbmNob3JOb2RlLmdldCgpKTsKICAgICAgICAg
cmV0dXJuIFBvc2l0aW9uKG1fYW5jaG9yTm9kZSwgMCwgUG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KTsKICAgICB9Ci0gICAgaWYgKCFtX2FuY2hvck5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpICYm
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29mZnNldCkgPT0gbV9hbmNob3JOb2RlLT5jaGlsZE5v
ZGVDb3VudCgpCisgICAgaWYgKCFtX2FuY2hvck5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpICYm
IChtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yIHx8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX29mZnNldCkgPT0gbV9hbmNob3JOb2RlLT5jaGlsZE5vZGVDb3VudCgpKQogICAg
ICAgICAmJiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkgfHwgaXNU
YWJsZUVsZW1lbnQobV9hbmNob3JOb2RlLmdldCgpKSkpIHsKICAgICAgICAgcmV0dXJuIHBvc2l0
aW9uSW5QYXJlbnRBZnRlck5vZGUobV9hbmNob3JOb2RlLmdldCgpKTsKICAgICB9CkBAIC0yNDAs
MTUgKzI0MCwxNiBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXMoUG9zaXRpb25Nb3ZlCiAg
ICAgTm9kZSogbiA9IGRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFuKQogICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgCi0gICAgaW50IG8gPSBtX29mZnNldDsKKworICAgIC8vIEZJWE1FOiBF
eHBsaWNpdGx5IGhhbmRsZSBiZWZvcmUvYWZ0ZXIgcG9zaXRpb25zCisgICAgaW50IG8gPSBkZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIC8vIEZJWE1FOiBOZWdhdGl2ZSBvZmZzZXRzIHNo
b3VsZG4ndCBiZSBhbGxvd2VkLiBXZSBzaG91bGQgY2F0Y2ggdGhpcyBlYXJsaWVyLgogICAgIEFT
U0VSVChvID49IDApOwogCiAgICAgaWYgKG8gPiAwKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0g
bi0+Y2hpbGROb2RlKG8gLSAxKTsKICAgICAgICAgaWYgKGNoaWxkKQotICAgICAgICAgICAgcmV0
dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShjaGlsZCk7CisgICAgICAgICAgICBy
ZXR1cm4gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShjaGlsZCk7CiAKICAgICAgICAgLy8gVGhl
cmUgYXJlIHR3byByZWFzb25zIGNoaWxkIG1pZ2h0IGJlIDA6CiAgICAgICAgIC8vICAgMSkgVGhl
IG5vZGUgaXMgbm9kZSBsaWtlIGEgdGV4dCBub2RlIHRoYXQgaXMgbm90IGFuIGVsZW1lbnQsIGFu
ZCB0aGVyZWZvcmUgaGFzIG5vIGNoaWxkcmVuLgpAQCAtMjc5LDE1ICsyODAsMTYgQEAgUG9zaXRp
b24gUG9zaXRpb246Om5leHQoUG9zaXRpb25Nb3ZlVHlwZQogICAgIE5vZGUqIG4gPSBkZXByZWNh
dGVkTm9kZSgpOwogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIAotICAg
IGludCBvID0gbV9vZmZzZXQ7CisKKyAgICAvLyBGSVhNRTogRXhwbGljaXRseSBoYW5kbGUgYmVm
b3JlL2FmdGVyIHBvc2l0aW9ucworICAgIGludCBvID0gZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KTsKICAgICAvLyBGSVhNRTogTmVnYXRpdmUgb2Zmc2V0cyBzaG91bGRuJ3QgYmUgYWxsb3dlZC4g
V2Ugc2hvdWxkIGNhdGNoIHRoaXMgZWFybGllci4KICAgICBBU1NFUlQobyA+PSAwKTsKIAogICAg
IE5vZGUqIGNoaWxkID0gbi0+Y2hpbGROb2RlKG8pOwogICAgIGlmIChjaGlsZCB8fCAoIW4tPmhh
c0NoaWxkTm9kZXMoKSAmJiBvIDwgbGFzdE9mZnNldEZvckVkaXRpbmcobikpKSB7CiAgICAgICAg
IGlmIChjaGlsZCkKLSAgICAgICAgICAgIHJldHVybiBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKGNoaWxkKTsKKyAgICAgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUoY2hpbGQpOwogCiAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVhc29ucyBjaGlsZCBt
aWdodCBiZSAwOgogICAgICAgICAvLyAgIDEpIFRoZSBub2RlIGlzIG5vZGUgbGlrZSBhIHRleHQg
bm9kZSB0aGF0IGlzIG5vdCBhbiBlbGVtZW50LCBhbmQgdGhlcmVmb3JlIGhhcyBubyBjaGlsZHJl
bi4KQEAgLTMyMywxNCArMzI1LDE0IEBAIGJvb2wgUG9zaXRpb246OmF0Rmlyc3RFZGl0aW5nUG9z
aXRpb25Gb3IKIHsKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBtX29mZnNldCA8PSAwOworICAgIHJldHVybiBtX2FuY2hvclR5cGUgPT0gUG9zaXRp
b25Jc0JlZm9yZUFuY2hvciB8fCBtX29mZnNldCA8PSAwOwogfQogCiBib29sIFBvc2l0aW9uOjph
dExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX29mZnNldCA+PSBsYXN0T2Zmc2V0
Rm9yRWRpdGluZyhkZXByZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gbV9hbmNob3JUeXBlID09
IFBvc2l0aW9uSXNBZnRlckFuY2hvciB8fCBtX29mZnNldCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGlu
ZyhkZXByZWNhdGVkTm9kZSgpKTsKIH0KIAogLy8gQSBwb3NpdGlvbiBpcyBjb25zaWRlcmVkIGF0
IGVkaXRpbmcgYm91bmRhcnkgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKQEAgLTU2
OSw3ICs1NzEsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kCiAg
ICAgICAgIC8vIFJldHVybiBwb3NpdGlvbiBhZnRlciB0YWJsZXMgYW5kIG5vZGVzIHdoaWNoIGhh
dmUgY29udGVudCB0aGF0IGNhbiBiZSBpZ25vcmVkLgogICAgICAgICBpZiAoZWRpdGluZ0lnbm9y
ZXNDb250ZW50KGN1cnJlbnROb2RlKSB8fCBpc1RhYmxlRWxlbWVudChjdXJyZW50Tm9kZSkpIHsK
ICAgICAgICAgICAgIGlmIChjdXJyZW50UG9zLmF0RW5kT2ZOb2RlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShjdXJyZW50Tm9kZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQWZ0ZXJOb2RlKGN1cnJlbnROb2RlKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTc4MSw3ICs3ODMsNyBAQCBib29s
IFBvc2l0aW9uOjppc0NhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGlmIChyZW5kZXJlci0+aXNCUigpKQotICAgICAgICByZXR1cm4gIW1fb2Zmc2V0ICYmICFu
b2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkpOworICAg
ICAgICByZXR1cm4gIW1fb2Zmc2V0ICYmIG1fYW5jaG9yVHlwZSAhPSBQb3NpdGlvbklzQWZ0ZXJB
bmNob3IgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5v
ZGUoKSk7CiAKICAgICBpZiAocmVuZGVyZXItPmlzVGV4dCgpKQogICAgICAgICByZXR1cm4gIW5v
ZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGluUmVuZGVyZWRUZXh0KCk7
CkBAIC0xMDUzLDcgKzEwNTUsOCBAQCBzdGF0aWMgUG9zaXRpb24gdXBzdHJlYW1JZ25vcmluZ0Vk
aXRpbmdCCiAKIHZvaWQgUG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldChFQWZmaW5pdHkg
YWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5lQm94KiYgaW5s
aW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAogewotICAgIGNhcmV0T2Zmc2V0ID0gbV9v
ZmZzZXQ7CisgICAgLy8gRklYTUU6IEV4cGxpY2l0bHkgaGFuZGxlIGJlZm9yZS9hZnRlciBwb3Np
dGlvbnMKKyAgICBjYXJldE9mZnNldCA9IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAK
ICAgICBpZiAoIXJlbmRlcmVyLT5pc1RleHQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJ
KHJldmlzaW9uIDgwNTk4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5Niw3ICsxOTYsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFBvc2l0aW9uJiBhCiB7CiAgICAgLy8gRklYTUU6IEluIDxkaXY+PGltZz48L2Rpdj4gW2Rpdiwg
MF0gIT0gW2ltZywgMF0gZXZlbiB0aG91Z2ggbW9zdCBvZiB0aGUKICAgICAvLyBlZGl0aW5nIGNv
ZGUgd2lsbCB0cmVhdCB0aGVtIGFzIGlkZW50aWNhbC4KLSAgICByZXR1cm4gYS5hbmNob3JOb2Rl
KCkgPT0gYi5hbmNob3JOb2RlKCkgJiYgYS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID09IGIu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICByZXR1cm4gYS5hbmNob3JOb2RlKCkgPT0g
Yi5hbmNob3JOb2RlKCkgJiYgYS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID09IGIuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSAmJiBhLmFuY2hvclR5cGUoKSA9PSBiLmFuY2hvclR5cGUoKTsK
IH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9z
aXRpb24mIGIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShy
ZXZpc2lvbiA4MDU5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBQb3NpdGlvbkl0ZXJhdG9yOjpvcGVy
YXRvciBQb3NpdGlvbigpIGNvCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3Jl
Tm9kZShtX25vZGVBZnRlclBvc2l0aW9uSW5BbmNob3IpOwogICAgIH0KICAgICBpZiAobV9hbmNo
b3JOb2RlLT5oYXNDaGlsZE5vZGVzKCkpCi0gICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUobV9hbmNob3JOb2RlKTsKKyAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlv
bkluT3JBZnRlck5vZGUobV9hbmNob3JOb2RlKTsKICAgICByZXR1cm4gUG9zaXRpb24obV9hbmNo
b3JOb2RlLCBtX29mZnNldEluQW5jaG9yKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gODA1
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lkIEFwcGx5QmxvY2tFbGVt
ZW50Q29tbWFuZDo6cmFuZ2VGb3JQCiAgICAgICAgIGlmICghc3RhcnRTdHlsZS0+Y29sbGFwc2VX
aGl0ZVNwYWNlKCkgJiYgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPiAwKSB7CiAgICAg
ICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsK
ICAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCkpLCBzdGFydE9mZnNldCk7Ci0gICAgICAgICAgICBzdGFydCA9IHBvc2l0aW9u
QmVmb3JlTm9kZShzdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgICAgIHN0YXJ0ID0g
Zmlyc3RQb3NpdGlvbkluTm9kZShzdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAg
IGlmIChpc1N0YXJ0QW5kRW5kT25TYW1lTm9kZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChl
bmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0gc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAg
ICAgIGVuZCA9IFBvc2l0aW9uKGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkgLSBzdGFydE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvcik7CkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6
OnJhbmdlRm9yUAogICAgICAgICAgICAgJiYgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDwg
ZW5kLmNvbnRhaW5lck5vZGUoKS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHsKICAgICAgICAgICAg
IHNwbGl0VGV4dE5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KGVuZC5kZXByZWNhdGVkTm9kZSgpKSwg
ZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgICAgIGlmIChpc1N0YXJ0QW5k
RW5kT25TYW1lTm9kZSkKLSAgICAgICAgICAgICAgICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9k
ZShlbmQuZGVwcmVjYXRlZE5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCkpOworICAgICAgICAgICAg
ICAgIHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluTm9kZShlbmQuZGVwcmVjYXRlZE5vZGUoKS0+cHJl
dmlvdXNTaWJsaW5nKCkpOwogICAgICAgICAgICAgaWYgKGlzRW5kQW5kRW5kT2ZMYXN0UGFyYWdy
YXBoT25TYW1lTm9kZSkgewogICAgICAgICAgICAgICAgIGlmIChtX2VuZE9mTGFzdFBhcmFncmFw
aC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
CiAgICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gbGFzdFBvc2l0aW9u
SW5Ob2RlKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2
aXNpb24gODA1OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3Myw4ICsxMTczLDggQEAgUG9zaXRpb24gQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uQQogCiAgICAgLy8gRG9uJ3QgYXZvaWQgYmxvY2sg
bGV2ZWwgYW5jaG9ycywgYmVjYXVzZSB0aGF0IHdvdWxkIGluc2VydCBjb250ZW50IGludG8gdGhl
IHdyb25nIHBhcmFncmFwaC4KICAgICBpZiAoZW5jbG9zaW5nQW5jaG9yICYmICFpc0Jsb2NrKGVu
Y2xvc2luZ0FuY2hvcikpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5BbmNob3Io
Zmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShlbmNsb3NpbmdBbmNob3IpKTsKLSAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkFuY2hvcihsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZv
ck5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdElu
QW5jaG9yKGZpcnN0UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7CisgICAgICAgIFZp
c2libGVQb3NpdGlvbiBsYXN0SW5BbmNob3IobGFzdFBvc2l0aW9uSW5Ob2RlKGVuY2xvc2luZ0Fu
Y2hvcikpOwogICAgICAgICAvLyBJZiB2aXN1YWxseSBqdXN0IGFmdGVyIHRoZSBhbmNob3IsIGlu
c2VydCAqaW5zaWRlKiB0aGUgYW5jaG9yIHVubGVzcyBpdCdzIHRoZSBsYXN0CiAgICAgICAgIC8v
IFZpc2libGVQb3NpdGlvbiBpbiB0aGUgZG9jdW1lbnQsIHRvIG1hdGNoIE5TVGV4dFZpZXcuCiAg
ICAgICAgIGlmICh2aXNpYmxlUG9zID09IGxhc3RJbkFuY2hvcikgewpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lv
biA4MDU5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGljIGJvb2wgaXNUYWJs
ZVJvdyhjb25zdCBOb2RlKiBub2RlKQogc3RhdGljIGJvb2wgaXNUYWJsZUNlbGxFbXB0eShOb2Rl
KiBjZWxsKQogewogICAgIEFTU0VSVChpc1RhYmxlQ2VsbChjZWxsKSk7Ci0gICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGNlbGwpKSA9PSBW
aXNpYmxlUG9zaXRpb24obGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGNlbGwpKTsKKyAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUoY2VsbCkpID09IFZp
c2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk5vZGUoY2VsbCkpOwogfQogCiBzdGF0aWMgYm9v
bCBpc1RhYmxlUm93RW1wdHkoTm9kZSogcm93KQpAQCAtMzc4LDkgKzM3OCw5IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSgKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBpZiAobm9kZSA9PSBtX3N0YXJ0QmxvY2sgJiYgIWlzRW5kT2ZCbG9jayhWaXNp
YmxlUG9zaXRpb24oZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShtX3N0YXJ0QmxvY2su
Z2V0KCkpKS5wcmV2aW91cygpKSkKKyAgICBpZiAobm9kZSA9PSBtX3N0YXJ0QmxvY2sgJiYgIWlz
RW5kT2ZCbG9jayhWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShtX3N0YXJ0Qmxv
Y2suZ2V0KCkpKS5wcmV2aW91cygpKSkKICAgICAgICAgbV9uZWVkUGxhY2Vob2xkZXIgPSB0cnVl
OwotICAgIGVsc2UgaWYgKG5vZGUgPT0gbV9lbmRCbG9jayAmJiAhaXNTdGFydE9mQmxvY2soVmlz
aWJsZVBvc2l0aW9uKGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShtX3N0YXJ0QmxvY2su
Z2V0KCkpKS5uZXh0KCkpKQorICAgIGVsc2UgaWYgKG5vZGUgPT0gbV9lbmRCbG9jayAmJiAhaXNT
dGFydE9mQmxvY2soVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShtX3N0YXJ0Qmxv
Y2suZ2V0KCkpKS5uZXh0KCkpKQogICAgICAgICBtX25lZWRQbGFjZWhvbGRlciA9IHRydWU7CiAg
ICAgCiAgICAgLy8gRklYTUU6IFVwZGF0ZSB0aGUgZW5kcG9pbnRzIG9mIHRoZSByYW5nZSBiZWlu
ZyBkZWxldGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExp
bmVCcmVha0NvbW1hbmQuY3BwCShyZXZpc2lvbiA4MDU5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3
ICsxNzEsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAg
ICAvLyBsZWF2ZXMgYW5kIHRoZW4gY29tZXMgYmFjaywgbmV3IGlucHV0IHdpbGwgaGF2ZSB0aGUg
cmlnaHQgc3R5bGUuCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYWx3YXlzIGFwcGx5
IHRoZSB0eXBpbmcgc3R5bGUgdG8gdGhlIGxpbmUgYnJlYWsgaGVyZSwKICAgICAgICAgLy8gc2Vl
IDxyZGFyOi8vcHJvYmxlbS81Nzk0NDYyPi4KLSAgICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHls
ZS5nZXQoKSwgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlVG9JbnNlcnQuZ2V0
KCkpLCBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSk7
CisgICAgICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5bGUuZ2V0KCksIGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2Rl
KG5vZGVUb0luc2VydC5nZXQoKSkpOwogICAgICAgICAvLyBFdmVuIHRob3VnaCB0aGlzIGFwcGx5
U3R5bGUgb3BlcmF0ZXMgb24gYSBSYW5nZSwgaXQgc3RpbGwgc2V0cyBhbiBlbmRpbmdTZWxlY3Rp
b24oKS4KICAgICAgICAgLy8gSXQgdHJpZXMgdG8gc2V0IGEgVmlzaWJsZVNlbGVjdGlvbiBhcm91
bmQgdGhlIGNvbnRlbnQgaXQgb3BlcmF0ZWQgb24uIFNvLCB0aGF0IFZpc2libGVTZWxlY3Rpb24K
ICAgICAgICAgLy8gd2lsbCBlaXRoZXIgKGEpIHNlbGVjdCB0aGUgbGluZSBicmVhayB3ZSBpbnNl
cnRlZCwgb3IgaXQgd2lsbCAoYikgYmUgYSBjYXJldCBqdXN0IApJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDgwNTk4KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1Nyw4ICsyNTcsOCBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjp1bmxpc3RpZnlQ
YXJhZ3JhCiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0OwogICAgIFZpc2libGVQb3NpdGlvbiBl
bmQ7CiAgICAgaWYgKGxpc3RDaGlsZE5vZGUtPmhhc1RhZ05hbWUobGlUYWcpKSB7Ci0gICAgICAg
IHN0YXJ0ID0gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0Q2hpbGROb2RlKTsK
LSAgICAgICAgZW5kID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxpc3RDaGlsZE5v
ZGUpOworICAgICAgICBzdGFydCA9IGZpcnN0UG9zaXRpb25Jbk5vZGUobGlzdENoaWxkTm9kZSk7
CisgICAgICAgIGVuZCA9IGxhc3RQb3NpdGlvbkluTm9kZShsaXN0Q2hpbGROb2RlKTsKICAgICAg
ICAgbmV4dExpc3RDaGlsZCA9IGxpc3RDaGlsZE5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgICAg
IHByZXZpb3VzTGlzdENoaWxkID0gbGlzdENoaWxkTm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7CiAg
ICAgfSBlbHNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA4MDU5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MzYsMTAgKzUzNiwxMCBAQCBWaXNpYmxlUG9zaXRpb24gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
CiB7CiAgICAgTm9kZSogbGFzdE5vZGUgPSBtX2xhc3RMZWFmSW5zZXJ0ZWQuZ2V0KCk7CiAgICAg
Ly8gRklYTUU6IFdoeSBpcyB0aGlzIGhhY2sgaGVyZT8gIFdoYXQncyBzcGVjaWFsIGFib3V0IDxz
ZWxlY3Q+IHRhZ3M/Ci0gICAgTm9kZSogZW5jbG9zaW5nU2VsZWN0ID0gZW5jbG9zaW5nTm9kZVdp
dGhUYWcoZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsYXN0Tm9kZSksIHNlbGVjdFRh
Zyk7CisgICAgTm9kZSogZW5jbG9zaW5nU2VsZWN0ID0gZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmly
c3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGxhc3ROb2RlKSwgc2VsZWN0VGFnKTsKICAgICBpZiAo
ZW5jbG9zaW5nU2VsZWN0KQogICAgICAgICBsYXN0Tm9kZSA9IGVuY2xvc2luZ1NlbGVjdDsKLSAg
ICByZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxhc3ROb2RlKTsKKyAgICBy
ZXR1cm4gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShsYXN0Tm9kZSk7CiB9CiAKIFZpc2libGVQ
b3NpdGlvbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRl
ZENvbnRlbnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3Bw
CShyZXZpc2lvbiA4MDU5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6OmZvcndhcmREZWxldGVLZXlQcmVzCiAgICAgICAgICAgICBkb3duc3RyZWFtRW5kID0gdmlz
aWJsZUVuZC5uZXh0KHRydWUpLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwogICAgICAg
ICAvLyBXaGVuIGRlbGV0aW5nIHRhYmxlczogU2VsZWN0IHRoZSB0YWJsZSBmaXJzdCwgdGhlbiBw
ZXJmb3JtIHRoZSBkZWxldGlvbgogICAgICAgICBpZiAoZG93bnN0cmVhbUVuZC5kZXByZWNhdGVk
Tm9kZSgpICYmIGRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBk
b3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSAmJiAh
ZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSB7Ci0gICAgICAgICAgICBz
ZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5lbmQo
KSwgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGRvd25zdHJlYW1FbmQuZGVwcmVjYXRl
ZE5vZGUoKSksIERPV05TVFJFQU0pKTsKKyAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLCBwb3NpdGlvbkFmdGVyTm9k
ZShkb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpLCBET1dOU1RSRUFNKSk7CiAgICAgICAg
ICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gODA1OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw4
IEBAIFZpc2libGVTZWxlY3Rpb246OlZpc2libGVTZWxlY3Rpb24oY29uc3QKIAogVmlzaWJsZVNl
bGVjdGlvbiBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoTm9k
ZSogbm9kZSkKIHsKLSAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbihmaXJzdERlZXBFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKG5vZGUpLCBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9k
ZSksIERPV05TVFJFQU0pOworICAgIEFTU0VSVCghZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUp
KTsKKyAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGUp
LCBsYXN0UG9zaXRpb25Jbk5vZGUobm9kZSksIERPV05TVFJFQU0pOwogfQogCiB2b2lkIFZpc2li
bGVTZWxlY3Rpb246OnNldEJhc2UoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtNDk4LDEz
ICs0OTksMTMgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RTZWxlY3Rpb25UbwogICAg
ICAgICAgICAgUG9zaXRpb24gcCA9IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSht
X2VuZCk7CiAgICAgICAgICAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9IGVuZFJvb3QgPyBlbmRS
b290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CiAgICAgICAgICAgICBpZiAocC5pc051bGwo
KSAmJiBlbmRSb290ICYmIChzaGFkb3dBbmNlc3RvciAhPSBlbmRSb290KSkKLSAgICAgICAgICAg
ICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsK
KyAgICAgICAgICAgICAgICBwID0gcG9zaXRpb25BZnRlck5vZGUoc2hhZG93QW5jZXN0b3IpOwog
ICAgICAgICAgICAgd2hpbGUgKHAuaXNOb3ROdWxsKCkgJiYgIShsb3dlc3RFZGl0YWJsZUFuY2Vz
dG9yKHAuZGVwcmVjYXRlZE5vZGUoKSkgPT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IgJiYgIWlzRWRp
dGFibGVQb3NpdGlvbihwKSkpIHsKICAgICAgICAgICAgICAgICBOb2RlKiByb290ID0gZWRpdGFi
bGVSb290Rm9yUG9zaXRpb24ocCk7CiAgICAgICAgICAgICAgICAgc2hhZG93QW5jZXN0b3IgPSBy
b290ID8gcm9vdC0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwogICAgICAgICAgICAgICAgIHAg
PSBpc0F0b21pY05vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRCZWZv
cmVOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUocCk7CiAgICAgICAgICAgICAgICAgaWYgKHAuaXNOdWxsKCkgJiYgKHNoYWRvd0FuY2Vz
dG9yICE9IHJvb3QpKQotICAgICAgICAgICAgICAgICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IHBv
c2l0aW9uQWZ0ZXJOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyhwKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDgwNTk4KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NywxNCArMjc3LDE0
IEBAIFBvc2l0aW9uIHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGEKIFZpc2libGVQb3Np
dGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbiwgTm9kZSogaGlnaGVzdFJvb3QpCiB7CiAgICAgLy8gcG9zaXRpb24gZmFs
bHMgYmVmb3JlIGhpZ2hlc3RSb290LgotICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHBvc2l0aW9u
LCBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KSkgPT0gLTEgJiYg
aGlnaGVzdFJvb3QtPmlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBmaXJzdERl
ZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KTsKKyAgICBpZiAoY29tcGFyZVBv
c2l0aW9ucyhwb3NpdGlvbiwgZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCkpID09IC0x
ICYmIGhpZ2hlc3RSb290LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICByZXR1cm4gZmly
c3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCk7CiAKICAgICBQb3NpdGlvbiBwID0gcG9zaXRp
b247CiAgICAgCiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gcC5kZXByZWNhdGVkTm9k
ZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkKICAgICAgICAgaWYgKHNoYWRvd0FuY2VzdG9yICE9
IHAuZGVwcmVjYXRlZE5vZGUoKSkKLSAgICAgICAgICAgIHAgPSBsYXN0RGVlcEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOworICAgICAgICAgICAgcCA9IHBvc2l0aW9uQWZ0
ZXJOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAgICAKICAgICB3aGlsZSAocC5kZXByZWNhdGVkTm9k
ZSgpICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkgJiYgcC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rl
c2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCiAgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5kZXBy
ZWNhdGVkTm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5kZXByZWNhdGVkTm9k
ZSgpKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOwpAQCAtMjk4LDE0ICsyOTgs
MTQgQEAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdAogVmlzaWJsZVBv
c2l0aW9uIGxhc3RFZGl0YWJsZVBvc2l0aW9uQmVmb3JlUG9zaXRpb25JblJvb3QoY29uc3QgUG9z
aXRpb24mIHBvc2l0aW9uLCBOb2RlKiBoaWdoZXN0Um9vdCkKIHsKICAgICAvLyBXaGVuIHBvc2l0
aW9uIGZhbGxzIGFmdGVyIGhpZ2hlc3RSb290LCB0aGUgcmVzdWx0IGlzIGVhc3kgdG8gY29tcHV0
ZS4KLSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgbGFzdERlZXBFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KSkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGxhc3REZWVw
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7CisgICAgaWYgKGNvbXBhcmVQb3Np
dGlvbnMocG9zaXRpb24sIGxhc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCkpID09IDEpCisg
ICAgICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGhpZ2hlc3RSb290KTsKIAog
ICAgIFBvc2l0aW9uIHAgPSBwb3NpdGlvbjsKICAgICAKICAgICBpZiAoTm9kZSogc2hhZG93QW5j
ZXN0b3IgPSBwLmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQogICAgICAg
ICBpZiAoc2hhZG93QW5jZXN0b3IgIT0gcC5kZXByZWNhdGVkTm9kZSgpKQotICAgICAgICAgICAg
cCA9IGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOworICAg
ICAgICAgICAgcCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzaGFkb3dBbmNlc3Rvcik7
CiAgICAgCiAgICAgd2hpbGUgKHAuZGVwcmVjYXRlZE5vZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0
aW9uKHApICYmIHAuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3Qp
KQogICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkgPyBwb3NpdGlv
bkluUGFyZW50QmVmb3JlTm9kZShwLmRlcHJlY2F0ZWROb2RlKCkpIDogcHJldmlvdXNWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKHApOwpAQCAtNzIxLDggKzcyMSw4IEBAIE5vZGUqIGVuY2xvc2lu
Z0VtcHR5TGlzdEl0ZW0oY29uc3QgVmlzaWIKICAgICBpZiAoIWxpc3RDaGlsZE5vZGUgfHwgIWlz
U3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSB8fCAhaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxl
UG9zKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkxp
c3RDaGlsZChmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxpc3RDaGlsZE5vZGUpKTsK
LSAgICBWaXNpYmxlUG9zaXRpb24gbGFzdEluTGlzdENoaWxkKGxhc3REZWVwRWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZShsaXN0Q2hpbGROb2RlKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5M
aXN0Q2hpbGQoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGxpc3RDaGlsZE5vZGUpKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gbGFzdEluTGlzdENoaWxkKGxhc3RQb3NpdGlvbkluT3JBZnRlck5v
ZGUobGlzdENoaWxkTm9kZSkpOwogCiAgICAgaWYgKGZpcnN0SW5MaXN0Q2hpbGQgIT0gdmlzaWJs
ZVBvcyB8fCBsYXN0SW5MaXN0Q2hpbGQgIT0gdmlzaWJsZVBvcykKICAgICAgICAgcmV0dXJuIDA7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCShyZXZpc2lvbiA4MDU5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtMTIzLDI2ICsxMjMsNiBAQCBpbmxpbmUgUG9zaXRpb24gbGFzdFBvc2l0aW9uSW5PckFmdGVy
Tm9kCiAgICAgcmV0dXJuIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSA/IHBvc2l0aW9uQWZ0
ZXJOb2RlKG5vZGUpIDogbGFzdFBvc2l0aW9uSW5Ob2RlKG5vZGUpOwogfQogCi0vLyBQb3NpdGlv
biBjcmVhdGlvbiBmdW5jdGlvbnMgYXJlIGlubGluZSB0byBwcmV2ZW50IHJlZi1jaHVybi4KLS8v
IE90aGVyIFBvc2l0aW9uIGNyZWF0aW9uIGZ1bmN0aW9ucyBhcmUgaW4gUG9zaXRpb24uaAotLy8g
YnV0IHRoZXNlIGRlcGVuZCBvbiBsYXN0T2Zmc2V0Rm9yRWRpdGluZyB3aGljaCBpcyBkZWZpbmVk
IGluIGh0bWxlZGl0aW5nLmguCi0KLS8vIE5PVEU6IGZpcnN0L2xhc3REZWVwRWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZSByZXR1cm4gbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zIChsaWtlIFtpbWcsIDBd
KQotLy8gZm9yIGVsZW1lbnRzIHdoaWNoIGVkaXRpbmcgaWdub3Jlcy4gIFRoZSByZXN0IG9mIHRo
ZSBlZGl0aW5nIGNvZGUgd2lsbCB0cmVhdCBbaW1nLCAwXQotLy8gYXMgInRoZSBsYXN0IHBvc2l0
aW9uIGJlZm9yZSB0aGUgaW1nIi4KLS8vIE5ldyBjb2RlIHNob3VsZCB1c2UgdGhlIGNyZWF0aW9u
IGZ1bmN0aW9ucyBpbiBQb3NpdGlvbi5oIGluc3RlYWQuCi1pbmxpbmUgUG9zaXRpb24gZmlyc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShOb2RlKiBhbmNob3JOb2RlKQotewotICAgIEFTU0VS
VChhbmNob3JOb2RlKTsKLSAgICByZXR1cm4gUG9zaXRpb24oYW5jaG9yTm9kZSwgMCk7Ci19Ci0K
LWlubGluZSBQb3NpdGlvbiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoTm9kZSogYW5j
aG9yTm9kZSkKLXsKLSAgICBBU1NFUlQoYW5jaG9yTm9kZSk7Ci0gICAgcmV0dXJuIFBvc2l0aW9u
KGFuY2hvck5vZGUsIGxhc3RPZmZzZXRGb3JFZGl0aW5nKGFuY2hvck5vZGUpKTsKLX0KLSAgICAg
ICAKIC8vIGNvbXBhcmlzaW9uIGZ1bmN0aW9ucyBvbiBQb3NpdGlvbgogICAgIAogaW50IGNvbXBh
cmVQb3NpdGlvbnMoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA4MDU5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc0Myw3ICs3NDMsNyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25z
dCBWCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICBpZiAoaXNS
ZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIoc3RhcnROb2RlKSkKLSAgICAgICAgcmV0
dXJuIGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc3RhcnROb2RlKTsKKyAgICAgICAg
cmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydE5vZGUpOwogCiAgICAgTm9kZSogc3RhcnRC
bG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7CiAKQEAgLTgwNyw3ICs4MDcsNyBAQCBW
aXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzCiAgICAgTm9kZSogc3RhcnRO
b2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGlu
ZVRhYmxlSW1hZ2VPckhSKHN0YXJ0Tm9kZSkpCi0gICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUoc3RhcnROb2RlKTsKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uQWZ0
ZXJOb2RlKHN0YXJ0Tm9kZSk7CiAgICAgCiAgICAgTm9kZSogc3RhcnRCbG9jayA9IGVuY2xvc2lu
Z0Jsb2NrKHN0YXJ0Tm9kZSk7CiAgICAgTm9kZSAqc3RheUluc2lkZUJsb2NrID0gc3RhcnRCbG9j
azsKQEAgLTEwMTIsNyArMTAxMiw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mRWRpdGFibGVD
b250ZW50KGMKICAgICBpZiAoIWhpZ2hlc3RSb290KQogICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKCk7CiAKLSAgICByZXR1cm4gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSho
aWdoZXN0Um9vdCk7CisgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3Qp
OwogfQogCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZFZGl0YWJsZUNvbnRlbnQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCkBAIC0xMDIxLDcgKzEwMjEsNyBAQCBWaXNpYmxl
UG9zaXRpb24gZW5kT2ZFZGl0YWJsZUNvbnRlbnQoY29uCiAgICAgaWYgKCFoaWdoZXN0Um9vdCkK
ICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgcmV0dXJuIGxhc3REZWVw
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7CisgICAgcmV0dXJuIGxhc3RQb3Np
dGlvbkluTm9kZShoaWdoZXN0Um9vdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldExlYWZCb3hlc0lu
TG9naWNhbE9yZGVyKFJvb3RJbmxpbmVCb3gqIHJvb3RCb3gsIFZlY3RvcjxJbmxpbmVCb3gqPiYg
bGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAkocmV2aXNpb24gODA1OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1Myw3ICszMDUzLDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQbwogewogICAgIC8vIG5vIGNoaWxkcmVu
Li4ucmV0dXJuIHRoaXMgcmVuZGVyIG9iamVjdCdzIGVsZW1lbnQsIGlmIHRoZXJlIGlzIG9uZSwg
YW5kIG9mZnNldCAwCiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBjcmVh
dGVWaXNpYmxlUG9zaXRpb24obm9kZSgpID8gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9k
ZShub2RlKCkpIDogUG9zaXRpb24oMCwgMCkpOworICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJs
ZVBvc2l0aW9uKG5vZGUoKSA/IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKCkpIDog
UG9zaXRpb24oMCwgMCkpOwogCiAgICAgaW50IHhQb3MgPSBwb2ludC54KCk7CiAgICAgaW50IHlQ
b3MgPSBwb2ludC55KCk7CkBAIC0zMDY0LDggKzMwNjQsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVu
ZGVyQm94Ojpwb3NpdGlvbkZvclBvCiAgICAgICAgIAogICAgICAgICBpZiAoeFBvcyA8IDAgfHwg
eFBvcyA+IHJpZ2h0IHx8IHlQb3MgPCAwIHx8IHlQb3MgPiBib3R0b20pIHsKICAgICAgICAgICAg
IGlmICh4UG9zIDw9IHJpZ2h0IC8gMikKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlz
aWJsZVBvc2l0aW9uKGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSgpKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGxhc3REZWVwRWRpdGluZ1Bv
c2l0aW9uRm9yTm9kZShub2RlKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlz
aWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKCkpKTsKKyAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24obGFzdFBvc2l0aW9uSW5PckFmdGVy
Tm9kZShub2RlKCkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzEzNiw3ICszMTM2LDcgQEAg
VmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQbwogICAgIGlmIChjbG9zZXN0
UmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBjbG9zZXN0UmVuZGVyZXItPnBvc2l0aW9uRm9yQ29v
cmRpbmF0ZXMobmV3WCAtIGNsb3Nlc3RSZW5kZXJlci0+eCgpLCBuZXdZIC0gY2xvc2VzdFJlbmRl
cmVyLT55KCkpOwogICAgIAotICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oZmlyc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKCkpKTsKKyAgICByZXR1cm4gY3JlYXRlVmlz
aWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKCkpKTsKIH0KIAog
Ym9vbCBSZW5kZXJCb3g6OnNocmlua1RvQXZvaWRGbG9hdHMoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85758</attachid>
            <date>2011-03-14 19:05:54 -0700</date>
            <delta_ts>2011-03-15 12:14:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52642-20110314190553.patch</filename>
            <type>text/plain</type>
            <size>27416</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNTk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMDMtMDggIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEdldCByaWQgb2YgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9u
Rm9yTm9kZSBhbmQgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjY0MgorCisgICAgICAgIFJlcGxh
Y2luZyBjYWxscyB0byBmaXJzdC9sYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUgd2l0aCBj
YWxscyB0byB0aGVpciBhbmFsb2dvdXMKKyAgICAgICAgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIG5l
dyBwb3NpdGlvbnMuIEFsc28gZml4aW5nIHZhcmlvdXMgcGFydHMgb2YgZWRpdGluZyBjb2RlIHRo
YXQKKyAgICAgICAgaW5jb3JyZWN0bHkgaGFuZGxlZCB0aGUgbmV3IHBvc2l0aW9ucyBub3cgYmVp
bmcgY3JlYXRlZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyByZWZhY3Rvcmlu
Zy9jbGVhbnVwLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnZpc2libGVQb3NpdGlvblJhbmdlKToKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJldmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmF0Rmlyc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjphdExhc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjp1cHN0cmVh
bSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6aXNDYW5kaWRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldCk6CisgICAgICAgICogZG9t
L1Bvc2l0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBk
b20vUG9zaXRpb25JdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJh
dG9yOjpvcGVyYXRvciBQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21t
YW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKToKKyAgICAg
ICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbkF2b2lkaW5nU3BlY2lhbEVsZW1lbnRCb3Vu
ZGFyeSk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzVGFibGVDZWxsRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6CisgICAgICAgICogZWRpdGluZy9JbnNl
cnRMaW5lQnJlYWtDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpbmVCcmVh
a0NvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBhcmFn
cmFwaCk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25BdEVuZE9m
SW5zZXJ0ZWRDb250ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENy
b3NzaW5nRWRpdGluZ0JvdW5kYXJpZXMpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlv
bkluUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpsYXN0RWRpdGFibGVQb3NpdGlvbkJlZm9yZVBv
c2l0aW9uSW5Sb290KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0VtcHR5TGlzdEl0ZW0p
OgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKiBlZGl0aW5nL3Zp
c2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZlBhcmFncmFwaCk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjpzdGFy
dE9mRWRpdGFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mRWRpdGFibGVDb250
ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludCk6CisKIDIwMTEtMDMtMDggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1vcmUgYnVpbGQgYnVzdGFn
ZSBmaXguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDgwNTk4KQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQwMSw4ICsyNDAxLDggQEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ug
QWNjZXNzaWJpbGl0eVJlbmRlcgogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvblJhbmdlKCk7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3MgPSBmaXJz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpOwotICAgIFZpc2libGVQb3NpdGlvbiBl
bmRQb3MgPSBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSk7CisgICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0UG9zID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwor
ICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3MgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5v
ZGUpOwogCiAgICAgLy8gdGhlIFZpc2libGVQb3NpdGlvbnMgYXJlIGVxdWFsIGZvciBub2RlcyBs
aWtlIGJ1dHRvbnMsIHNvIGFkanVzdCBmb3IgdGhhdAogICAgIC8vIEZJWE1FOiBSZWFsbHk/ICBb
YnV0dG9uLCAwXSBhbmQgW2J1dHRvbiwgMV0gYXJlIGRpc3RpbmN0IChiZWZvcmUgYW5kIGFmdGVy
IHRoZSBidXR0b24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDgwNTk4
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYxLDEyICsxNjEsMTIgQEAgUG9zaXRpb24gUG9zaXRpb246OnBhcmVudEFuY2hvcmVkRXF1aXZh
bAogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKICAgICAKICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgb25seSBiZSBuZWNlc3NhcnkgZm9yIGxlZ2FjeSBwb3NpdGlvbnMsIGJ1dCBpcyBhbHNv
IG5lZWRlZCBmb3IgcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgVGFibGVzCi0gICAgaWYgKG1f
b2Zmc2V0IDw9IDApIHsKKyAgICBpZiAobV9vZmZzZXQgPD0gMCAmJiBtX2FuY2hvclR5cGUgIT0g
UG9zaXRpb25Jc0FmdGVyQW5jaG9yKSB7CiAgICAgICAgIGlmIChtX2FuY2hvck5vZGUtPnBhcmVu
dE5vZGUoKSAmJiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkgfHwg
aXNUYWJsZUVsZW1lbnQobV9hbmNob3JOb2RlLmdldCgpKSkpCiAgICAgICAgICAgICByZXR1cm4g
cG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobV9hbmNob3JOb2RlLmdldCgpKTsKLSAgICAgICAg
cmV0dXJuIFBvc2l0aW9uKG1fYW5jaG9yTm9kZSwgMCwgUG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KTsKKyAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUobV9hbmNob3JOb2RlLmdldCgp
KTsKICAgICB9Ci0gICAgaWYgKCFtX2FuY2hvck5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpICYm
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29mZnNldCkgPT0gbV9hbmNob3JOb2RlLT5jaGlsZE5v
ZGVDb3VudCgpCisgICAgaWYgKCFtX2FuY2hvck5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpICYm
IChtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yIHx8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX29mZnNldCkgPT0gbV9hbmNob3JOb2RlLT5jaGlsZE5vZGVDb3VudCgpKQogICAg
ICAgICAmJiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkgfHwgaXNU
YWJsZUVsZW1lbnQobV9hbmNob3JOb2RlLmdldCgpKSkpIHsKICAgICAgICAgcmV0dXJuIHBvc2l0
aW9uSW5QYXJlbnRBZnRlck5vZGUobV9hbmNob3JOb2RlLmdldCgpKTsKICAgICB9CkBAIC0yNDAs
MTUgKzI0MCwxNiBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXMoUG9zaXRpb25Nb3ZlCiAg
ICAgTm9kZSogbiA9IGRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFuKQogICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgCi0gICAgaW50IG8gPSBtX29mZnNldDsKKworICAgIC8vIEZJWE1FOiBF
eHBsaWNpdGx5IGhhbmRsZSBiZWZvcmUvYWZ0ZXIgcG9zaXRpb25zCisgICAgaW50IG8gPSBkZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIC8vIEZJWE1FOiBOZWdhdGl2ZSBvZmZzZXRzIHNo
b3VsZG4ndCBiZSBhbGxvd2VkLiBXZSBzaG91bGQgY2F0Y2ggdGhpcyBlYXJsaWVyLgogICAgIEFT
U0VSVChvID49IDApOwogCiAgICAgaWYgKG8gPiAwKSB7CiAgICAgICAgIE5vZGUqIGNoaWxkID0g
bi0+Y2hpbGROb2RlKG8gLSAxKTsKICAgICAgICAgaWYgKGNoaWxkKQotICAgICAgICAgICAgcmV0
dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShjaGlsZCk7CisgICAgICAgICAgICBy
ZXR1cm4gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShjaGlsZCk7CiAKICAgICAgICAgLy8gVGhl
cmUgYXJlIHR3byByZWFzb25zIGNoaWxkIG1pZ2h0IGJlIDA6CiAgICAgICAgIC8vICAgMSkgVGhl
IG5vZGUgaXMgbm9kZSBsaWtlIGEgdGV4dCBub2RlIHRoYXQgaXMgbm90IGFuIGVsZW1lbnQsIGFu
ZCB0aGVyZWZvcmUgaGFzIG5vIGNoaWxkcmVuLgpAQCAtMjc5LDE1ICsyODAsMTYgQEAgUG9zaXRp
b24gUG9zaXRpb246Om5leHQoUG9zaXRpb25Nb3ZlVHlwZQogICAgIE5vZGUqIG4gPSBkZXByZWNh
dGVkTm9kZSgpOwogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIAotICAg
IGludCBvID0gbV9vZmZzZXQ7CisKKyAgICAvLyBGSVhNRTogRXhwbGljaXRseSBoYW5kbGUgYmVm
b3JlL2FmdGVyIHBvc2l0aW9ucworICAgIGludCBvID0gZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KTsKICAgICAvLyBGSVhNRTogTmVnYXRpdmUgb2Zmc2V0cyBzaG91bGRuJ3QgYmUgYWxsb3dlZC4g
V2Ugc2hvdWxkIGNhdGNoIHRoaXMgZWFybGllci4KICAgICBBU1NFUlQobyA+PSAwKTsKIAogICAg
IE5vZGUqIGNoaWxkID0gbi0+Y2hpbGROb2RlKG8pOwogICAgIGlmIChjaGlsZCB8fCAoIW4tPmhh
c0NoaWxkTm9kZXMoKSAmJiBvIDwgbGFzdE9mZnNldEZvckVkaXRpbmcobikpKSB7CiAgICAgICAg
IGlmIChjaGlsZCkKLSAgICAgICAgICAgIHJldHVybiBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKGNoaWxkKTsKKyAgICAgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUoY2hpbGQpOwogCiAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVhc29ucyBjaGlsZCBt
aWdodCBiZSAwOgogICAgICAgICAvLyAgIDEpIFRoZSBub2RlIGlzIG5vZGUgbGlrZSBhIHRleHQg
bm9kZSB0aGF0IGlzIG5vdCBhbiBlbGVtZW50LCBhbmQgdGhlcmVmb3JlIGhhcyBubyBjaGlsZHJl
bi4KQEAgLTMyMywxNCArMzI1LDE0IEBAIGJvb2wgUG9zaXRpb246OmF0Rmlyc3RFZGl0aW5nUG9z
aXRpb25Gb3IKIHsKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBtX29mZnNldCA8PSAwOworICAgIHJldHVybiBtX2FuY2hvclR5cGUgPT0gUG9zaXRp
b25Jc0JlZm9yZUFuY2hvciB8fCBtX29mZnNldCA8PSAwOwogfQogCiBib29sIFBvc2l0aW9uOjph
dExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX29mZnNldCA+PSBsYXN0T2Zmc2V0
Rm9yRWRpdGluZyhkZXByZWNhdGVkTm9kZSgpKTsKKyAgICByZXR1cm4gbV9hbmNob3JUeXBlID09
IFBvc2l0aW9uSXNBZnRlckFuY2hvciB8fCBtX29mZnNldCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGlu
ZyhkZXByZWNhdGVkTm9kZSgpKTsKIH0KIAogLy8gQSBwb3NpdGlvbiBpcyBjb25zaWRlcmVkIGF0
IGVkaXRpbmcgYm91bmRhcnkgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKQEAgLTU2
OSw3ICs1NzEsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kCiAg
ICAgICAgIC8vIFJldHVybiBwb3NpdGlvbiBhZnRlciB0YWJsZXMgYW5kIG5vZGVzIHdoaWNoIGhh
dmUgY29udGVudCB0aGF0IGNhbiBiZSBpZ25vcmVkLgogICAgICAgICBpZiAoZWRpdGluZ0lnbm9y
ZXNDb250ZW50KGN1cnJlbnROb2RlKSB8fCBpc1RhYmxlRWxlbWVudChjdXJyZW50Tm9kZSkpIHsK
ICAgICAgICAgICAgIGlmIChjdXJyZW50UG9zLmF0RW5kT2ZOb2RlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShjdXJyZW50Tm9kZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQWZ0ZXJOb2RlKGN1cnJlbnROb2RlKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTc4MSw3ICs3ODMsNyBAQCBib29s
IFBvc2l0aW9uOjppc0NhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGlmIChyZW5kZXJlci0+aXNCUigpKQotICAgICAgICByZXR1cm4gIW1fb2Zmc2V0ICYmICFu
b2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkpOworICAg
ICAgICByZXR1cm4gIW1fb2Zmc2V0ICYmIG1fYW5jaG9yVHlwZSAhPSBQb3NpdGlvbklzQWZ0ZXJB
bmNob3IgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5v
ZGUoKSk7CiAKICAgICBpZiAocmVuZGVyZXItPmlzVGV4dCgpKQogICAgICAgICByZXR1cm4gIW5v
ZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGluUmVuZGVyZWRUZXh0KCk7
CkBAIC0xMDUzLDcgKzEwNTUsOCBAQCBzdGF0aWMgUG9zaXRpb24gdXBzdHJlYW1JZ25vcmluZ0Vk
aXRpbmdCCiAKIHZvaWQgUG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldChFQWZmaW5pdHkg
YWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5lQm94KiYgaW5s
aW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAogewotICAgIGNhcmV0T2Zmc2V0ID0gbV9v
ZmZzZXQ7CisgICAgLy8gRklYTUU6IEV4cGxpY2l0bHkgaGFuZGxlIGJlZm9yZS9hZnRlciBwb3Np
dGlvbnMKKyAgICBjYXJldE9mZnNldCA9IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAK
ICAgICBpZiAoIXJlbmRlcmVyLT5pc1RleHQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJ
KHJldmlzaW9uIDgwNTk4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzMyw2ICsxMzMsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSBjYW4g
YmUgZWl0aGVyIGluc2lkZSBvciBqdXN0IGJlZm9yZS9hZnRlciB0aGUgbm9kZSwgZGVwZW5kaW5n
IG9uCiAgICAgLy8gaWYgdGhlIG5vZGUgaXMgaWdub3JlZCBieSBlZGl0aW5nIG9yIG5vdC4KKyAg
ICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGdvIGF3YXkuIFRoZXkgb25seSBtYWtlIHNlbnNlIGZv
ciBsZWdhY3kgcG9zaXRpb25zLgogICAgIGJvb2wgYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoKSBjb25zdDsKICAgICBib29sIGF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSBjb25z
dDsKIApAQCAtMTk2LDcgKzE5Nyw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUG9z
aXRpb24mIGEKIHsKICAgICAvLyBGSVhNRTogSW4gPGRpdj48aW1nPjwvZGl2PiBbZGl2LCAwXSAh
PSBbaW1nLCAwXSBldmVuIHRob3VnaCBtb3N0IG9mIHRoZQogICAgIC8vIGVkaXRpbmcgY29kZSB3
aWxsIHRyZWF0IHRoZW0gYXMgaWRlbnRpY2FsLgotICAgIHJldHVybiBhLmFuY2hvck5vZGUoKSA9
PSBiLmFuY2hvck5vZGUoKSAmJiBhLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPT0gYi5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIHJldHVybiBhLmFuY2hvck5vZGUoKSA9PSBiLmFu
Y2hvck5vZGUoKSAmJiBhLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPT0gYi5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpICYmIGEuYW5jaG9yVHlwZSgpID09IGIuYW5jaG9yVHlwZSgpOwogfQog
CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlv
biYgYikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAJKHJldmlz
aW9uIDgwNTk4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIFBvc2l0aW9uSXRlcmF0b3I6Om9wZXJhdG9y
IFBvc2l0aW9uKCkgY28KICAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2Rl
KG1fbm9kZUFmdGVyUG9zaXRpb25JbkFuY2hvcik7CiAgICAgfQogICAgIGlmIChtX2FuY2hvck5v
ZGUtPmhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZShtX2FuY2hvck5vZGUpOworICAgICAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5P
ckFmdGVyTm9kZShtX2FuY2hvck5vZGUpOwogICAgIHJldHVybiBQb3NpdGlvbihtX2FuY2hvck5v
ZGUsIG1fb2Zmc2V0SW5BbmNob3IpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCShyZXZpc2lvbiA4MDU5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kOjpyYW5nZUZvclAKICAgICAgICAgaWYgKCFzdGFydFN0eWxlLT5jb2xsYXBzZVdoaXRl
U3BhY2UoKSAmJiBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+IDApIHsKICAgICAgICAg
ICAgIGludCBzdGFydE9mZnNldCA9IHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwogICAg
ICAgICAgICAgc3BsaXRUZXh0Tm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKSksIHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgIHN0YXJ0ID0gcG9zaXRpb25CZWZv
cmVOb2RlKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICAgICAgc3RhcnQgPSBmaXJz
dFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAg
ICAgICBpZiAoaXNTdGFydEFuZEVuZE9uU2FtZU5vZGUpIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQoZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID49IHN0YXJ0T2Zmc2V0KTsKICAgICAgICAg
ICAgICAgICBlbmQgPSBQb3NpdGlvbihlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpIC0gc3RhcnRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRDb21t
YW5kOjpyYW5nZUZvclAKICAgICAgICAgICAgICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSA8IGVuZC5jb250YWluZXJOb2RlKCktPm1heENoYXJhY3Rlck9mZnNldCgpKSB7CiAgICAgICAg
ICAgICBzcGxpdFRleHROb2RlKHN0YXRpY19jYXN0PFRleHQqPihlbmQuZGVwcmVjYXRlZE5vZGUo
KSksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgICAgICBpZiAoaXNTdGFy
dEFuZEVuZE9uU2FtZU5vZGUpCi0gICAgICAgICAgICAgICAgc3RhcnQgPSBwb3NpdGlvbkJlZm9y
ZU5vZGUoZW5kLmRlcHJlY2F0ZWROb2RlKCktPnByZXZpb3VzU2libGluZygpKTsKKyAgICAgICAg
ICAgICAgICBzdGFydCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShlbmQuZGVwcmVjYXRl
ZE5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCkpOwogICAgICAgICAgICAgaWYgKGlzRW5kQW5kRW5k
T2ZMYXN0UGFyYWdyYXBoT25TYW1lTm9kZSkgewogICAgICAgICAgICAgICAgIGlmIChtX2VuZE9m
TGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA9PSBlbmQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0g
bGFzdFBvc2l0aW9uSW5Ob2RlKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wcmV2aW91c1NpYmxpbmco
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAkocmV2aXNpb24gODA1OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3Myw4ICsxMTczLDggQEAg
UG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uQQogCiAgICAgLy8gRG9uJ3Qg
YXZvaWQgYmxvY2sgbGV2ZWwgYW5jaG9ycywgYmVjYXVzZSB0aGF0IHdvdWxkIGluc2VydCBjb250
ZW50IGludG8gdGhlIHdyb25nIHBhcmFncmFwaC4KICAgICBpZiAoZW5jbG9zaW5nQW5jaG9yICYm
ICFpc0Jsb2NrKGVuY2xvc2luZ0FuY2hvcikpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZp
cnN0SW5BbmNob3IoZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShlbmNsb3NpbmdBbmNo
b3IpKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkFuY2hvcihsYXN0RGVlcEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7CisgICAgICAgIFZpc2libGVQb3Np
dGlvbiBmaXJzdEluQW5jaG9yKGZpcnN0UG9zaXRpb25Jbk5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7
CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5BbmNob3IobGFzdFBvc2l0aW9uSW5Ob2Rl
KGVuY2xvc2luZ0FuY2hvcikpOwogICAgICAgICAvLyBJZiB2aXN1YWxseSBqdXN0IGFmdGVyIHRo
ZSBhbmNob3IsIGluc2VydCAqaW5zaWRlKiB0aGUgYW5jaG9yIHVubGVzcyBpdCdzIHRoZSBsYXN0
CiAgICAgICAgIC8vIFZpc2libGVQb3NpdGlvbiBpbiB0aGUgZG9jdW1lbnQsIHRvIG1hdGNoIE5T
VGV4dFZpZXcuCiAgICAgICAgIGlmICh2aXNpYmxlUG9zID09IGxhc3RJbkFuY2hvcikgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCShyZXZpc2lvbiA4MDU5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgc3RhdGlj
IGJvb2wgaXNUYWJsZVJvdyhjb25zdCBOb2RlKiBub2RlKQogc3RhdGljIGJvb2wgaXNUYWJsZUNl
bGxFbXB0eShOb2RlKiBjZWxsKQogewogICAgIEFTU0VSVChpc1RhYmxlQ2VsbChjZWxsKSk7Ci0g
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2Rl
KGNlbGwpKSA9PSBWaXNpYmxlUG9zaXRpb24obGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2Rl
KGNlbGwpKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUo
Y2VsbCkpID09IFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk5vZGUoY2VsbCkpOwogfQog
CiBzdGF0aWMgYm9vbCBpc1RhYmxlUm93RW1wdHkoTm9kZSogcm93KQpAQCAtMzc4LDkgKzM3OCw5
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSgKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAobm9kZSA9PSBtX3N0YXJ0QmxvY2sgJiYgIWlzRW5k
T2ZCbG9jayhWaXNpYmxlUG9zaXRpb24oZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSht
X3N0YXJ0QmxvY2suZ2V0KCkpKS5wcmV2aW91cygpKSkKKyAgICBpZiAobm9kZSA9PSBtX3N0YXJ0
QmxvY2sgJiYgIWlzRW5kT2ZCbG9jayhWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9k
ZShtX3N0YXJ0QmxvY2suZ2V0KCkpKS5wcmV2aW91cygpKSkKICAgICAgICAgbV9uZWVkUGxhY2Vo
b2xkZXIgPSB0cnVlOwotICAgIGVsc2UgaWYgKG5vZGUgPT0gbV9lbmRCbG9jayAmJiAhaXNTdGFy
dE9mQmxvY2soVmlzaWJsZVBvc2l0aW9uKGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSht
X3N0YXJ0QmxvY2suZ2V0KCkpKS5uZXh0KCkpKQorICAgIGVsc2UgaWYgKG5vZGUgPT0gbV9lbmRC
bG9jayAmJiAhaXNTdGFydE9mQmxvY2soVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9k
ZShtX3N0YXJ0QmxvY2suZ2V0KCkpKS5uZXh0KCkpKQogICAgICAgICBtX25lZWRQbGFjZWhvbGRl
ciA9IHRydWU7CiAgICAgCiAgICAgLy8gRklYTUU6IFVwZGF0ZSB0aGUgZW5kcG9pbnRzIG9mIHRo
ZSByYW5nZSBiZWluZyBkZWxldGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRMaW5lQnJlYWtDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCShyZXZpc2lvbiA4MDU5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBw
bHkoKQogICAgICAgICAvLyBsZWF2ZXMgYW5kIHRoZW4gY29tZXMgYmFjaywgbmV3IGlucHV0IHdp
bGwgaGF2ZSB0aGUgcmlnaHQgc3R5bGUuCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
YWx3YXlzIGFwcGx5IHRoZSB0eXBpbmcgc3R5bGUgdG8gdGhlIGxpbmUgYnJlYWsgaGVyZSwKICAg
ICAgICAgLy8gc2VlIDxyZGFyOi8vcHJvYmxlbS81Nzk0NDYyPi4KLSAgICAgICAgYXBwbHlTdHls
ZSh0eXBpbmdTdHlsZS5nZXQoKSwgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2Rl
VG9JbnNlcnQuZ2V0KCkpLCBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZVRvSW5z
ZXJ0LmdldCgpKSk7CisgICAgICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5bGUuZ2V0KCksIGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBsYXN0UG9zaXRpb25J
bk9yQWZ0ZXJOb2RlKG5vZGVUb0luc2VydC5nZXQoKSkpOwogICAgICAgICAvLyBFdmVuIHRob3Vn
aCB0aGlzIGFwcGx5U3R5bGUgb3BlcmF0ZXMgb24gYSBSYW5nZSwgaXQgc3RpbGwgc2V0cyBhbiBl
bmRpbmdTZWxlY3Rpb24oKS4KICAgICAgICAgLy8gSXQgdHJpZXMgdG8gc2V0IGEgVmlzaWJsZVNl
bGVjdGlvbiBhcm91bmQgdGhlIGNvbnRlbnQgaXQgb3BlcmF0ZWQgb24uIFNvLCB0aGF0IFZpc2li
bGVTZWxlY3Rpb24KICAgICAgICAgLy8gd2lsbCBlaXRoZXIgKGEpIHNlbGVjdCB0aGUgbGluZSBi
cmVhayB3ZSBpbnNlcnRlZCwgb3IgaXQgd2lsbCAoYikgYmUgYSBjYXJldCBqdXN0IApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9u
IDgwNTk4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1Nyw4ICsyNTcsOCBAQCB2b2lkIEluc2VydExpc3RDb21tYW5k
Ojp1bmxpc3RpZnlQYXJhZ3JhCiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0OwogICAgIFZpc2li
bGVQb3NpdGlvbiBlbmQ7CiAgICAgaWYgKGxpc3RDaGlsZE5vZGUtPmhhc1RhZ05hbWUobGlUYWcp
KSB7Ci0gICAgICAgIHN0YXJ0ID0gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0
Q2hpbGROb2RlKTsKLSAgICAgICAgZW5kID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2Rl
KGxpc3RDaGlsZE5vZGUpOworICAgICAgICBzdGFydCA9IGZpcnN0UG9zaXRpb25Jbk5vZGUobGlz
dENoaWxkTm9kZSk7CisgICAgICAgIGVuZCA9IGxhc3RQb3NpdGlvbkluTm9kZShsaXN0Q2hpbGRO
b2RlKTsKICAgICAgICAgbmV4dExpc3RDaGlsZCA9IGxpc3RDaGlsZE5vZGUtPm5leHRTaWJsaW5n
KCk7CiAgICAgICAgIHByZXZpb3VzTGlzdENoaWxkID0gbGlzdENoaWxkTm9kZS0+cHJldmlvdXNT
aWJsaW5nKCk7CiAgICAgfSBlbHNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA4MDU5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MzYsMTAgKzUzNiwxMCBAQCBWaXNpYmxlUG9zaXRpb24gUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6CiB7CiAgICAgTm9kZSogbGFzdE5vZGUgPSBtX2xhc3RMZWFmSW5zZXJ0ZWQu
Z2V0KCk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGhhY2sgaGVyZT8gIFdoYXQncyBzcGVj
aWFsIGFib3V0IDxzZWxlY3Q+IHRhZ3M/Ci0gICAgTm9kZSogZW5jbG9zaW5nU2VsZWN0ID0gZW5j
bG9zaW5nTm9kZVdpdGhUYWcoZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsYXN0Tm9k
ZSksIHNlbGVjdFRhZyk7CisgICAgTm9kZSogZW5jbG9zaW5nU2VsZWN0ID0gZW5jbG9zaW5nTm9k
ZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGxhc3ROb2RlKSwgc2VsZWN0VGFn
KTsKICAgICBpZiAoZW5jbG9zaW5nU2VsZWN0KQogICAgICAgICBsYXN0Tm9kZSA9IGVuY2xvc2lu
Z1NlbGVjdDsKLSAgICByZXR1cm4gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxhc3RO
b2RlKTsKKyAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShsYXN0Tm9kZSk7CiB9
CiAKIFZpc2libGVQb3NpdGlvbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25BdFN0
YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwCShyZXZpc2lvbiA4MDU5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lk
IFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzCiAgICAgICAgICAgICBkb3duc3Ry
ZWFtRW5kID0gdmlzaWJsZUVuZC5uZXh0KHRydWUpLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVh
bSgpOwogICAgICAgICAvLyBXaGVuIGRlbGV0aW5nIHRhYmxlczogU2VsZWN0IHRoZSB0YWJsZSBm
aXJzdCwgdGhlbiBwZXJmb3JtIHRoZSBkZWxldGlvbgogICAgICAgICBpZiAoZG93bnN0cmVhbUVu
ZC5kZXByZWNhdGVkTm9kZSgpICYmIGRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKS0+cmVu
ZGVyZXIoKSAmJiBkb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmlz
VGFibGUoKSAmJiAhZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSB7Ci0g
ICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihlbmRpbmdTZWxl
Y3Rpb24oKS5lbmQoKSwgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGRvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZE5vZGUoKSksIERPV05TVFJFQU0pKTsKKyAgICAgICAgICAgIHNldEVuZGlu
Z1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLCBwb3Np
dGlvbkFmdGVyTm9kZShkb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpLCBET1dOU1RSRUFN
KSk7CiAgICAgICAgICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtl
eSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gODA1OTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OSw3ICs4OSw4IEBAIFZpc2libGVTZWxlY3Rpb246OlZpc2libGVTZWxlY3Rpb24oY29uc3QK
IAogVmlzaWJsZVNlbGVjdGlvbiBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVu
dHNPZk5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbihmaXJz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpLCBsYXN0RGVlcEVkaXRpbmdQb3NpdGlv
bkZvck5vZGUobm9kZSksIERPV05TVFJFQU0pOworICAgIEFTU0VSVCghZWRpdGluZ0lnbm9yZXND
b250ZW50KG5vZGUpKTsKKyAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9u
SW5Ob2RlKG5vZGUpLCBsYXN0UG9zaXRpb25Jbk5vZGUobm9kZSksIERPV05TVFJFQU0pOwogfQog
CiB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEJhc2UoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
KQpAQCAtNDk4LDEzICs0OTksMTMgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RTZWxl
Y3Rpb25UbwogICAgICAgICAgICAgUG9zaXRpb24gcCA9IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5j
dENhbmRpZGF0ZShtX2VuZCk7CiAgICAgICAgICAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9IGVu
ZFJvb3QgPyBlbmRSb290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CiAgICAgICAgICAgICBp
ZiAocC5pc051bGwoKSAmJiBlbmRSb290ICYmIChzaGFkb3dBbmNlc3RvciAhPSBlbmRSb290KSkK
LSAgICAgICAgICAgICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRv
d0FuY2VzdG9yKTsKKyAgICAgICAgICAgICAgICBwID0gcG9zaXRpb25BZnRlck5vZGUoc2hhZG93
QW5jZXN0b3IpOwogICAgICAgICAgICAgd2hpbGUgKHAuaXNOb3ROdWxsKCkgJiYgIShsb3dlc3RF
ZGl0YWJsZUFuY2VzdG9yKHAuZGVwcmVjYXRlZE5vZGUoKSkgPT0gYmFzZUVkaXRhYmxlQW5jZXN0
b3IgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSkpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBy
b290ID0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24ocCk7CiAgICAgICAgICAgICAgICAgc2hhZG93
QW5jZXN0b3IgPSByb290ID8gcm9vdC0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwogICAgICAg
ICAgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA/IHBvc2l0aW9u
SW5QYXJlbnRCZWZvcmVOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkgOiBwcmV2aW91c1Zpc3VhbGx5
RGlzdGluY3RDYW5kaWRhdGUocCk7CiAgICAgICAgICAgICAgICAgaWYgKHAuaXNOdWxsKCkgJiYg
KHNoYWRvd0FuY2VzdG9yICE9IHJvb3QpKQotICAgICAgICAgICAgICAgICAgICBwID0gbGFzdERl
ZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKKyAgICAgICAgICAgICAg
ICAgICAgcCA9IHBvc2l0aW9uQWZ0ZXJOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyhwKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDgwNTk4KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
NywxNCArMjc3LDE0IEBAIFBvc2l0aW9uIHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGEK
IFZpc2libGVQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290
KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgTm9kZSogaGlnaGVzdFJvb3QpCiB7CiAgICAgLy8g
cG9zaXRpb24gZmFsbHMgYmVmb3JlIGhpZ2hlc3RSb290LgotICAgIGlmIChjb21wYXJlUG9zaXRp
b25zKHBvc2l0aW9uLCBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290
KSkgPT0gLTEgJiYgaGlnaGVzdFJvb3QtPmlzQ29udGVudEVkaXRhYmxlKCkpCi0gICAgICAgIHJl
dHVybiBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KTsKKyAgICBp
ZiAoY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0
Um9vdCkpID09IC0xICYmIGhpZ2hlc3RSb290LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAg
ICByZXR1cm4gZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCk7CiAKICAgICBQb3NpdGlv
biBwID0gcG9zaXRpb247CiAgICAgCiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gcC5k
ZXByZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkKICAgICAgICAgaWYgKHNoYWRv
d0FuY2VzdG9yICE9IHAuZGVwcmVjYXRlZE5vZGUoKSkKLSAgICAgICAgICAgIHAgPSBsYXN0RGVl
cEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOworICAgICAgICAgICAgcCA9
IHBvc2l0aW9uQWZ0ZXJOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAgICAKICAgICB3aGlsZSAocC5k
ZXByZWNhdGVkTm9kZSgpICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkgJiYgcC5kZXByZWNhdGVk
Tm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCiAgICAgICAgIHAgPSBpc0F0b21p
Y05vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5k
ZXByZWNhdGVkTm9kZSgpKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOwpAQCAt
Mjk4LDE0ICsyOTgsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbkFm
dAogVmlzaWJsZVBvc2l0aW9uIGxhc3RFZGl0YWJsZVBvc2l0aW9uQmVmb3JlUG9zaXRpb25JblJv
b3QoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBOb2RlKiBoaWdoZXN0Um9vdCkKIHsKICAgICAv
LyBXaGVuIHBvc2l0aW9uIGZhbGxzIGFmdGVyIGhpZ2hlc3RSb290LCB0aGUgcmVzdWx0IGlzIGVh
c3kgdG8gY29tcHV0ZS4KLSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgbGFzdERl
ZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KSkgPT0gMSkKLSAgICAgICAgcmV0
dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7CisgICAgaWYg
KGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb24sIGxhc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9v
dCkpID09IDEpCisgICAgICAgIHJldHVybiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGhpZ2hl
c3RSb290KTsKIAogICAgIFBvc2l0aW9uIHAgPSBwb3NpdGlvbjsKICAgICAKICAgICBpZiAoTm9k
ZSogc2hhZG93QW5jZXN0b3IgPSBwLmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9k
ZSgpKQogICAgICAgICBpZiAoc2hhZG93QW5jZXN0b3IgIT0gcC5kZXByZWNhdGVkTm9kZSgpKQot
ICAgICAgICAgICAgcCA9IGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5j
ZXN0b3IpOworICAgICAgICAgICAgcCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzaGFk
b3dBbmNlc3Rvcik7CiAgICAgCiAgICAgd2hpbGUgKHAuZGVwcmVjYXRlZE5vZGUoKSAmJiAhaXNF
ZGl0YWJsZVBvc2l0aW9uKHApICYmIHAuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yo
aGlnaGVzdFJvb3QpKQogICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuZGVwcmVjYXRlZE5vZGUo
KSkgPyBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShwLmRlcHJlY2F0ZWROb2RlKCkpIDogcHJl
dmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOwpAQCAtNzIxLDggKzcyMSw4IEBAIE5v
ZGUqIGVuY2xvc2luZ0VtcHR5TGlzdEl0ZW0oY29uc3QgVmlzaWIKICAgICBpZiAoIWxpc3RDaGls
ZE5vZGUgfHwgIWlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSB8fCAhaXNFbmRPZlBhcmFn
cmFwaCh2aXNpYmxlUG9zKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBWaXNpYmxlUG9zaXRp
b24gZmlyc3RJbkxpc3RDaGlsZChmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxpc3RD
aGlsZE5vZGUpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gbGFzdEluTGlzdENoaWxkKGxhc3REZWVw
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0Q2hpbGROb2RlKSk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIGZpcnN0SW5MaXN0Q2hpbGQoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGxpc3RDaGls
ZE5vZGUpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gbGFzdEluTGlzdENoaWxkKGxhc3RQb3NpdGlv
bkluT3JBZnRlck5vZGUobGlzdENoaWxkTm9kZSkpOwogCiAgICAgaWYgKGZpcnN0SW5MaXN0Q2hp
bGQgIT0gdmlzaWJsZVBvcyB8fCBsYXN0SW5MaXN0Q2hpbGQgIT0gdmlzaWJsZVBvcykKICAgICAg
ICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCShyZXZp
c2lvbiA4MDU5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTIzLDI2ICsxMjMsNiBAQCBpbmxpbmUgUG9zaXRpb24gbGFzdFBvc2l0
aW9uSW5PckFmdGVyTm9kCiAgICAgcmV0dXJuIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSA/
IHBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpIDogbGFzdFBvc2l0aW9uSW5Ob2RlKG5vZGUpOwogfQog
Ci0vLyBQb3NpdGlvbiBjcmVhdGlvbiBmdW5jdGlvbnMgYXJlIGlubGluZSB0byBwcmV2ZW50IHJl
Zi1jaHVybi4KLS8vIE90aGVyIFBvc2l0aW9uIGNyZWF0aW9uIGZ1bmN0aW9ucyBhcmUgaW4gUG9z
aXRpb24uaAotLy8gYnV0IHRoZXNlIGRlcGVuZCBvbiBsYXN0T2Zmc2V0Rm9yRWRpdGluZyB3aGlj
aCBpcyBkZWZpbmVkIGluIGh0bWxlZGl0aW5nLmguCi0KLS8vIE5PVEU6IGZpcnN0L2xhc3REZWVw
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSByZXR1cm4gbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zIChs
aWtlIFtpbWcsIDBdKQotLy8gZm9yIGVsZW1lbnRzIHdoaWNoIGVkaXRpbmcgaWdub3Jlcy4gIFRo
ZSByZXN0IG9mIHRoZSBlZGl0aW5nIGNvZGUgd2lsbCB0cmVhdCBbaW1nLCAwXQotLy8gYXMgInRo
ZSBsYXN0IHBvc2l0aW9uIGJlZm9yZSB0aGUgaW1nIi4KLS8vIE5ldyBjb2RlIHNob3VsZCB1c2Ug
dGhlIGNyZWF0aW9uIGZ1bmN0aW9ucyBpbiBQb3NpdGlvbi5oIGluc3RlYWQuCi1pbmxpbmUgUG9z
aXRpb24gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShOb2RlKiBhbmNob3JOb2RlKQot
ewotICAgIEFTU0VSVChhbmNob3JOb2RlKTsKLSAgICByZXR1cm4gUG9zaXRpb24oYW5jaG9yTm9k
ZSwgMCk7Ci19Ci0KLWlubGluZSBQb3NpdGlvbiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoTm9kZSogYW5jaG9yTm9kZSkKLXsKLSAgICBBU1NFUlQoYW5jaG9yTm9kZSk7Ci0gICAgcmV0
dXJuIFBvc2l0aW9uKGFuY2hvck5vZGUsIGxhc3RPZmZzZXRGb3JFZGl0aW5nKGFuY2hvck5vZGUp
KTsKLX0KLSAgICAgICAKIC8vIGNvbXBhcmlzaW9uIGZ1bmN0aW9ucyBvbiBQb3NpdGlvbgogICAg
IAogaW50IGNvbXBhcmVQb3NpdGlvbnMoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lv
biA4MDU5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc0Myw3ICs3NDMsNyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBh
cmFncmFwaChjb25zdCBWCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAK
ICAgICBpZiAoaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIoc3RhcnROb2RlKSkK
LSAgICAgICAgcmV0dXJuIGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc3RhcnROb2Rl
KTsKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydE5vZGUpOwogCiAgICAg
Tm9kZSogc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7CiAKQEAgLTgwNyw3
ICs4MDcsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzCiAgICAg
Tm9kZSogc3RhcnROb2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKGlzUmVuZGVy
ZWRBc05vbklubGluZVRhYmxlSW1hZ2VPckhSKHN0YXJ0Tm9kZSkpCi0gICAgICAgIHJldHVybiBs
YXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc3RhcnROb2RlKTsKKyAgICAgICAgcmV0dXJu
IHBvc2l0aW9uQWZ0ZXJOb2RlKHN0YXJ0Tm9kZSk7CiAgICAgCiAgICAgTm9kZSogc3RhcnRCbG9j
ayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7CiAgICAgTm9kZSAqc3RheUluc2lkZUJsb2Nr
ID0gc3RhcnRCbG9jazsKQEAgLTEwMTIsNyArMTAxMiw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFy
dE9mRWRpdGFibGVDb250ZW50KGMKICAgICBpZiAoIWhpZ2hlc3RSb290KQogICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICByZXR1cm4gZmlyc3REZWVwRWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7CisgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUo
aGlnaGVzdFJvb3QpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZFZGl0YWJsZUNvbnRlbnQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCkBAIC0xMDIxLDcgKzEwMjEs
NyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZFZGl0YWJsZUNvbnRlbnQoY29uCiAgICAgaWYgKCFo
aWdoZXN0Um9vdCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgcmV0
dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7CisgICAgcmV0
dXJuIGxhc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGdl
dExlYWZCb3hlc0luTG9naWNhbE9yZGVyKFJvb3RJbmxpbmVCb3gqIHJvb3RCb3gsIFZlY3RvcjxJ
bmxpbmVCb3gqPiYgbGVhZkJveGVzSW5Mb2dpY2FsT3JkZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gODA1OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1Myw3ICszMDUz
LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQbwogewogICAgIC8v
IG5vIGNoaWxkcmVuLi4ucmV0dXJuIHRoaXMgcmVuZGVyIG9iamVjdCdzIGVsZW1lbnQsIGlmIHRo
ZXJlIGlzIG9uZSwgYW5kIG9mZnNldCAwCiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCi0gICAgICAg
IHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24obm9kZSgpID8gZmlyc3REZWVwRWRpdGluZ1Bv
c2l0aW9uRm9yTm9kZShub2RlKCkpIDogUG9zaXRpb24oMCwgMCkpOworICAgICAgICByZXR1cm4g
Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKG5vZGUoKSA/IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShub2RlKCkpIDogUG9zaXRpb24oMCwgMCkpOwogCiAgICAgaW50IHhQb3MgPSBwb2ludC54KCk7
CiAgICAgaW50IHlQb3MgPSBwb2ludC55KCk7CkBAIC0zMDY0LDggKzMwNjQsOCBAQCBWaXNpYmxl
UG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvCiAgICAgICAgIAogICAgICAgICBpZiAo
eFBvcyA8IDAgfHwgeFBvcyA+IHJpZ2h0IHx8IHlQb3MgPCAwIHx8IHlQb3MgPiBib3R0b20pIHsK
ICAgICAgICAgICAgIGlmICh4UG9zIDw9IHJpZ2h0IC8gMikKLSAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUo
bm9kZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGxhc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2Rl
KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24obGFzdFBvc2l0
aW9uSW5PckFmdGVyTm9kZShub2RlKCkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzEzNiw3
ICszMTM2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQbwogICAg
IGlmIChjbG9zZXN0UmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBjbG9zZXN0UmVuZGVyZXItPnBv
c2l0aW9uRm9yQ29vcmRpbmF0ZXMobmV3WCAtIGNsb3Nlc3RSZW5kZXJlci0+eCgpLCBuZXdZIC0g
Y2xvc2VzdFJlbmRlcmVyLT55KCkpOwogICAgIAotICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9z
aXRpb24oZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKCkpKTsKKyAgICByZXR1
cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2Rl
KCkpKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OnNocmlua1RvQXZvaWRGbG9hdHMoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85841</attachid>
            <date>2011-03-15 12:14:25 -0700</date>
            <delta_ts>2011-03-15 12:28:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52642-20110315121424.patch</filename>
            <type>text/plain</type>
            <size>27568</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMTQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMDMtMDggIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEdldCByaWQgb2YgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9u
Rm9yTm9kZSBhbmQgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjY0MgorCisgICAgICAgIFJlcGxh
Y2luZyBjYWxscyB0byBmaXJzdC9sYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUgd2l0aCBj
YWxscyB0byB0aGVpciBhbmFsb2dvdXMKKyAgICAgICAgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIG5l
dyBwb3NpdGlvbnMuIEFsc28gZml4aW5nIHZhcmlvdXMgcGFydHMgb2YgZWRpdGluZyBjb2RlIHRo
YXQKKyAgICAgICAgaW5jb3JyZWN0bHkgaGFuZGxlZCB0aGUgbmV3IHBvc2l0aW9ucyBub3cgYmVp
bmcgY3JlYXRlZC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyByZWZhY3Rvcmlu
Zy9jbGVhbnVwLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnZpc2libGVQb3NpdGlvblJhbmdlKToKKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJldmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmF0Rmlyc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjphdExhc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjp1cHN0cmVh
bSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6aXNDYW5kaWRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldCk6CisgICAgICAgICogZG9t
L1Bvc2l0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBk
b20vUG9zaXRpb25JdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJh
dG9yOjpvcGVyYXRvciBQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21t
YW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKToKKyAgICAg
ICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbkF2b2lkaW5nU3BlY2lhbEVsZW1lbnRCb3Vu
ZGFyeSk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzVGFibGVDZWxsRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6CisgICAgICAgICogZWRpdGluZy9JbnNl
cnRMaW5lQnJlYWtDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpbmVCcmVh
a0NvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBhcmFn
cmFwaCk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cG9zaXRpb25BdEVuZE9m
SW5zZXJ0ZWRDb250ZW50KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQp
OgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENy
b3NzaW5nRWRpdGluZ0JvdW5kYXJpZXMpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlv
bkluUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpsYXN0RWRpdGFibGVQb3NpdGlvbkJlZm9yZVBv
c2l0aW9uSW5Sb290KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0VtcHR5TGlzdEl0ZW0p
OgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKiBlZGl0aW5nL3Zp
c2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZlBhcmFncmFwaCk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjpzdGFy
dE9mRWRpdGFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mRWRpdGFibGVDb250
ZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludCk6CisKIDIwMTEtMDMtMTUgIEFsZXhpcyBN
ZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRXJpYyBDYXJsc29uLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA4MTE0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MDUsOCArMjQwNSw4IEBAIFZpc2libGVQb3Np
dGlvblJhbmdlIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
UG9zID0gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKTsKLSAgICBWaXNpYmxl
UG9zaXRpb24gZW5kUG9zID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUpOwor
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvcyA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShub2RlKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zID0gbGFzdFBvc2l0aW9uSW5PckFm
dGVyTm9kZShub2RlKTsKIAogICAgIC8vIHRoZSBWaXNpYmxlUG9zaXRpb25zIGFyZSBlcXVhbCBm
b3Igbm9kZXMgbGlrZSBidXR0b25zLCBzbyBhZGp1c3QgZm9yIHRoYXQKICAgICAvLyBGSVhNRTog
UmVhbGx5PyAgW2J1dHRvbiwgMF0gYW5kIFtidXR0b24sIDFdIGFyZSBkaXN0aW5jdCAoYmVmb3Jl
IGFuZCBhZnRlciB0aGUgYnV0dG9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZp
c2lvbiA4MTE0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MSwxMiArMTYxLDEyIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwYXJlbnRBbmNo
b3JlZEVxdWl2YWwKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAgICAgCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGZvciBsZWdhY3kgcG9zaXRpb25zLCBi
dXQgaXMgYWxzbyBuZWVkZWQgZm9yIHBvc2l0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIFRhYmxlcwot
ICAgIGlmIChtX29mZnNldCA8PSAwKSB7CisgICAgaWYgKG1fb2Zmc2V0IDw9IDAgJiYgbV9hbmNo
b3JUeXBlICE9IFBvc2l0aW9uSXNBZnRlckFuY2hvcikgewogICAgICAgICBpZiAobV9hbmNob3JO
b2RlLT5wYXJlbnROb2RlKCkgJiYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChtX2FuY2hvck5vZGUu
Z2V0KCkpIHx8IGlzVGFibGVFbGVtZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkpKQogICAgICAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG1fYW5jaG9yTm9kZS5nZXQoKSk7
Ci0gICAgICAgIHJldHVybiBQb3NpdGlvbihtX2FuY2hvck5vZGUsIDAsIFBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvcik7CisgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5Ob2RlKG1fYW5jaG9y
Tm9kZS5nZXQoKSk7CiAgICAgfQotICAgIGlmICghbV9hbmNob3JOb2RlLT5vZmZzZXRJbkNoYXJh
Y3RlcnMoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vZmZzZXQpID09IG1fYW5jaG9yTm9k
ZS0+Y2hpbGROb2RlQ291bnQoKQorICAgIGlmICghbV9hbmNob3JOb2RlLT5vZmZzZXRJbkNoYXJh
Y3RlcnMoKSAmJiAobV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciB8fCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9vZmZzZXQpID09IG1fYW5jaG9yTm9kZS0+Y2hpbGROb2RlQ291
bnQoKSkKICAgICAgICAgJiYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChtX2FuY2hvck5vZGUuZ2V0
KCkpIHx8IGlzVGFibGVFbGVtZW50KG1fYW5jaG9yTm9kZS5nZXQoKSkpKSB7CiAgICAgICAgIHJl
dHVybiBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG1fYW5jaG9yTm9kZS5nZXQoKSk7CiAgICAg
fQpAQCAtMjQwLDE1ICsyNDAsMTYgQEAgUG9zaXRpb24gUG9zaXRpb246OnByZXZpb3VzKFBvc2l0
aW9uTW92ZQogICAgIE5vZGUqIG4gPSBkZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbikKICAg
ICAgICAgcmV0dXJuICp0aGlzOwotICAgIAotICAgIGludCBvID0gbV9vZmZzZXQ7CisKKyAgICAv
LyBGSVhNRTogRXhwbGljaXRseSBoYW5kbGUgYmVmb3JlL2FmdGVyIHBvc2l0aW9ucworICAgIGlu
dCBvID0gZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAvLyBGSVhNRTogTmVnYXRpdmUg
b2Zmc2V0cyBzaG91bGRuJ3QgYmUgYWxsb3dlZC4gV2Ugc2hvdWxkIGNhdGNoIHRoaXMgZWFybGll
ci4KICAgICBBU1NFUlQobyA+PSAwKTsKIAogICAgIGlmIChvID4gMCkgewogICAgICAgICBOb2Rl
KiBjaGlsZCA9IG4tPmNoaWxkTm9kZShvIC0gMSk7CiAgICAgICAgIGlmIChjaGlsZCkKLSAgICAg
ICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoY2hpbGQpOworICAg
ICAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoY2hpbGQpOwogCiAgICAg
ICAgIC8vIFRoZXJlIGFyZSB0d28gcmVhc29ucyBjaGlsZCBtaWdodCBiZSAwOgogICAgICAgICAv
LyAgIDEpIFRoZSBub2RlIGlzIG5vZGUgbGlrZSBhIHRleHQgbm9kZSB0aGF0IGlzIG5vdCBhbiBl
bGVtZW50LCBhbmQgdGhlcmVmb3JlIGhhcyBubyBjaGlsZHJlbi4KQEAgLTI3OSwxNSArMjgwLDE2
IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0KFBvc2l0aW9uTW92ZVR5cGUKICAgICBOb2RlKiBu
ID0gZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiAqdGhpczsK
LSAgICAKLSAgICBpbnQgbyA9IG1fb2Zmc2V0OworCisgICAgLy8gRklYTUU6IEV4cGxpY2l0bHkg
aGFuZGxlIGJlZm9yZS9hZnRlciBwb3NpdGlvbnMKKyAgICBpbnQgbyA9IGRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCk7CiAgICAgLy8gRklYTUU6IE5lZ2F0aXZlIG9mZnNldHMgc2hvdWxkbid0IGJl
IGFsbG93ZWQuIFdlIHNob3VsZCBjYXRjaCB0aGlzIGVhcmxpZXIuCiAgICAgQVNTRVJUKG8gPj0g
MCk7CiAKICAgICBOb2RlKiBjaGlsZCA9IG4tPmNoaWxkTm9kZShvKTsKICAgICBpZiAoY2hpbGQg
fHwgKCFuLT5oYXNDaGlsZE5vZGVzKCkgJiYgbyA8IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG4pKSkg
ewogICAgICAgICBpZiAoY2hpbGQpCi0gICAgICAgICAgICByZXR1cm4gZmlyc3REZWVwRWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZShjaGlsZCk7CisgICAgICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKGNoaWxkKTsKIAogICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlYXNv
bnMgY2hpbGQgbWlnaHQgYmUgMDoKICAgICAgICAgLy8gICAxKSBUaGUgbm9kZSBpcyBub2RlIGxp
a2UgYSB0ZXh0IG5vZGUgdGhhdCBpcyBub3QgYW4gZWxlbWVudCwgYW5kIHRoZXJlZm9yZSBoYXMg
bm8gY2hpbGRyZW4uCkBAIC0zMjMsMTQgKzMyNSwxNCBAQCBib29sIFBvc2l0aW9uOjphdEZpcnN0
RWRpdGluZ1Bvc2l0aW9uRm9yCiB7CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICByZXR1cm4gbV9vZmZzZXQgPD0gMDsKKyAgICByZXR1cm4gbV9hbmNob3JUeXBl
ID09IFBvc2l0aW9uSXNCZWZvcmVBbmNob3IgfHwgbV9vZmZzZXQgPD0gMDsKIH0KIAogYm9vbCBQ
b3NpdGlvbjo6YXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpIGNvbnN0CiB7CiAgICAgaWYg
KGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gbV9vZmZzZXQgPj0g
bGFzdE9mZnNldEZvckVkaXRpbmcoZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgcmV0dXJuIG1fYW5j
aG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgfHwgbV9vZmZzZXQgPj0gbGFzdE9mZnNl
dEZvckVkaXRpbmcoZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIC8vIEEgcG9zaXRpb24gaXMgY29u
c2lkZXJlZCBhdCBlZGl0aW5nIGJvdW5kYXJ5IGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRy
dWU6CkBAIC01NjksNyArNTcxLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRp
bmdCb3VuZAogICAgICAgICAvLyBSZXR1cm4gcG9zaXRpb24gYWZ0ZXIgdGFibGVzIGFuZCBub2Rl
cyB3aGljaCBoYXZlIGNvbnRlbnQgdGhhdCBjYW4gYmUgaWdub3JlZC4KICAgICAgICAgaWYgKGVk
aXRpbmdJZ25vcmVzQ29udGVudChjdXJyZW50Tm9kZSkgfHwgaXNUYWJsZUVsZW1lbnQoY3VycmVu
dE5vZGUpKSB7CiAgICAgICAgICAgICBpZiAoY3VycmVudFBvcy5hdEVuZE9mTm9kZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoY3VycmVu
dE5vZGUpOworICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkFmdGVyTm9kZShjdXJyZW50
Tm9kZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC03ODEsNyArNzgz
LDggQEAgYm9vbCBQb3NpdGlvbjo6aXNDYW5kaWRhdGUoKSBjb25zdAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAocmVuZGVyZXItPmlzQlIoKSkKLSAgICAgICAgcmV0dXJuICFtX29m
ZnNldCAmJiAhbm9kZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9k
ZSgpKTsKKyAgICAgICAgLy8gRklYTUU6IFRoZSBjb25kaXRpb24gc2hvdWxkIGJlIG1fYW5jaG9y
VHlwZSA9PSBQb3NpdGlvbklzQmVmb3JlQW5jaG9yLCBidXQgZm9yIG5vdyB3ZSBzdGlsbCBuZWVk
IHRvIHN1cHBvcnQgbGVnYWN5IHBvc2l0aW9ucy4KKyAgICAgICAgcmV0dXJuICFtX29mZnNldCAm
JiBtX2FuY2hvclR5cGUgIT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yICYmICFub2RlSXNVc2VyU2Vs
ZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkpOwogCiAgICAgaWYgKHJlbmRl
cmVyLT5pc1RleHQoKSkKICAgICAgICAgcmV0dXJuICFub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXBy
ZWNhdGVkTm9kZSgpKSAmJiBpblJlbmRlcmVkVGV4dCgpOwpAQCAtMTA1Myw3ICsxMDU2LDggQEAg
c3RhdGljIFBvc2l0aW9uIHVwc3RyZWFtSWdub3JpbmdFZGl0aW5nQgogCiB2b2lkIFBvc2l0aW9u
OjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9u
IHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveComIGlubGluZUJveCwgaW50JiBjYXJldE9mZnNl
dCkgY29uc3QKIHsKLSAgICBjYXJldE9mZnNldCA9IG1fb2Zmc2V0OworICAgIC8vIEZJWE1FOiBF
eHBsaWNpdGx5IGhhbmRsZSBiZWZvcmUvYWZ0ZXIgcG9zaXRpb25zCisgICAgY2FyZXRPZmZzZXQg
PSBkZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBkZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogCiAgICAgaWYgKCFyZW5kZXJlci0+aXNU
ZXh0KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCShyZXZpc2lvbiA4MTE0NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMz
LDcgQEAgcHVibGljOgogCiAgICAgLy8gVGhlc2UgY2FuIGJlIGVpdGhlciBpbnNpZGUgb3IganVz
dCBiZWZvcmUvYWZ0ZXIgdGhlIG5vZGUsIGRlcGVuZGluZyBvbgogICAgIC8vIGlmIHRoZSBub2Rl
IGlzIGlnbm9yZWQgYnkgZWRpdGluZyBvciBub3QuCisgICAgLy8gRklYTUU6IFRoZXNlIHNob3Vs
ZCBnbyBhd2F5LiBUaGV5IG9ubHkgbWFrZSBzZW5zZSBmb3IgbGVnYWN5IHBvc2l0aW9ucy4KICAg
ICBib29sIGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBh
dExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgY29uc3Q7CiAKQEAgLTE5Niw3ICsxOTcsNyBA
QCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBvc2l0aW9uJiBhCiB7CiAgICAgLy8gRklY
TUU6IEluIDxkaXY+PGltZz48L2Rpdj4gW2RpdiwgMF0gIT0gW2ltZywgMF0gZXZlbiB0aG91Z2gg
bW9zdCBvZiB0aGUKICAgICAvLyBlZGl0aW5nIGNvZGUgd2lsbCB0cmVhdCB0aGVtIGFzIGlkZW50
aWNhbC4KLSAgICByZXR1cm4gYS5hbmNob3JOb2RlKCkgPT0gYi5hbmNob3JOb2RlKCkgJiYgYS5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID09IGIuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsK
KyAgICByZXR1cm4gYS5hbmNob3JOb2RlKCkgPT0gYi5hbmNob3JOb2RlKCkgJiYgYS5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpID09IGIuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAmJiBhLmFu
Y2hvclR5cGUoKSA9PSBiLmFuY2hvclR5cGUoKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShyZXZpc2lvbiA4MTE0NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsNyBAQCBQb3NpdGlvbkl0ZXJhdG9yOjpvcGVyYXRvciBQb3NpdGlvbigpIGNvCiAgICAgICAg
IHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShtX25vZGVBZnRlclBvc2l0aW9uSW5B
bmNob3IpOwogICAgIH0KICAgICBpZiAobV9hbmNob3JOb2RlLT5oYXNDaGlsZE5vZGVzKCkpCi0g
ICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobV9hbmNob3JOb2Rl
KTsKKyAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobV9hbmNob3JOb2Rl
KTsKICAgICByZXR1cm4gUG9zaXRpb24obV9hbmNob3JOb2RlLCBtX29mZnNldEluQW5jaG9yKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0Vs
ZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gODExNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3
ICsxOTMsNyBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQCiAgICAg
ICAgIGlmICghc3RhcnRTdHlsZS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgc3RhcnQub2Zmc2V0
SW5Db250YWluZXJOb2RlKCkgPiAwKSB7CiAgICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBz
dGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKICAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUo
c3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpLCBzdGFydE9mZnNldCk7
Ci0gICAgICAgICAgICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydC5kZXByZWNhdGVk
Tm9kZSgpKTsKKyAgICAgICAgICAgIHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAgICAgaWYgKGlzU3RhcnRBbmRFbmRP
blNhbWVOb2RlKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVuZC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSA+PSBzdGFydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgZW5kID0gUG9zaXRpb24o
ZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0
T2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKQEAgLTIyNCw3ICsy
MjQsNyBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQCiAgICAgICAg
ICAgICAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgp
LT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgewogICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZShzdGF0
aWNfY2FzdDxUZXh0Kj4oZW5kLmRlcHJlY2F0ZWROb2RlKCkpLCBlbmQub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCkpOwogICAgICAgICAgICAgaWYgKGlzU3RhcnRBbmRFbmRPblNhbWVOb2RlKQotICAg
ICAgICAgICAgICAgIHN0YXJ0ID0gcG9zaXRpb25CZWZvcmVOb2RlKGVuZC5kZXByZWNhdGVkTm9k
ZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUoZW5kLmRlcHJlY2F0ZWROb2RlKCktPnByZXZpb3VzU2libGlu
ZygpKTsKICAgICAgICAgICAgIGlmIChpc0VuZEFuZEVuZE9mTGFzdFBhcmFncmFwaE9uU2FtZU5v
ZGUpIHsKICAgICAgICAgICAgICAgICBpZiAobV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkgPT0gZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQogICAgICAgICAg
ICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IGxhc3RQb3NpdGlvbkluTm9kZShlbmQu
ZGVwcmVjYXRlZE5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDgxMTQ1
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNzIsOCArMTE3Miw4IEBAIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpwb3NpdGlvbkEKIAogICAgIC8vIERvbid0IGF2b2lkIGJsb2NrIGxldmVsIGFuY2hv
cnMsIGJlY2F1c2UgdGhhdCB3b3VsZCBpbnNlcnQgY29udGVudCBpbnRvIHRoZSB3cm9uZyBwYXJh
Z3JhcGguCiAgICAgaWYgKGVuY2xvc2luZ0FuY2hvciAmJiAhaXNCbG9jayhlbmNsb3NpbmdBbmNo
b3IpKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluQW5jaG9yKGZpcnN0RGVlcEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoZW5jbG9zaW5nQW5jaG9yKSk7Ci0gICAgICAgIFZpc2libGVQ
b3NpdGlvbiBsYXN0SW5BbmNob3IobGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGVuY2xv
c2luZ0FuY2hvcikpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkFuY2hvcihmaXJz
dFBvc2l0aW9uSW5Ob2RlKGVuY2xvc2luZ0FuY2hvcikpOworICAgICAgICBWaXNpYmxlUG9zaXRp
b24gbGFzdEluQW5jaG9yKGxhc3RQb3NpdGlvbkluTm9kZShlbmNsb3NpbmdBbmNob3IpKTsKICAg
ICAgICAgLy8gSWYgdmlzdWFsbHkganVzdCBhZnRlciB0aGUgYW5jaG9yLCBpbnNlcnQgKmluc2lk
ZSogdGhlIGFuY2hvciB1bmxlc3MgaXQncyB0aGUgbGFzdAogICAgICAgICAvLyBWaXNpYmxlUG9z
aXRpb24gaW4gdGhlIGRvY3VtZW50LCB0byBtYXRjaCBOU1RleHRWaWV3LgogICAgICAgICBpZiAo
dmlzaWJsZVBvcyA9PSBsYXN0SW5BbmNob3IpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gODExNDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBib29sIGlzVGFibGVSb3coY29uc3Qg
Tm9kZSogbm9kZSkKIHN0YXRpYyBib29sIGlzVGFibGVDZWxsRW1wdHkoTm9kZSogY2VsbCkKIHsK
ICAgICBBU1NFUlQoaXNUYWJsZUNlbGwoY2VsbCkpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShjZWxsKSkgPT0gVmlzaWJsZVBvc2l0
aW9uKGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShjZWxsKSk7CisgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2RlKGNlbGwpKSA9PSBWaXNpYmxlUG9zaXRp
b24obGFzdFBvc2l0aW9uSW5Ob2RlKGNlbGwpKTsKIH0KIAogc3RhdGljIGJvb2wgaXNUYWJsZVJv
d0VtcHR5KE5vZGUqIHJvdykKQEAgLTM4MCw5ICszODAsOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OnJlbW92ZU5vZGUoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aWYgKG5vZGUgPT0gbV9zdGFydEJsb2NrICYmICFpc0VuZE9mQmxvY2soVmlzaWJsZVBvc2l0aW9u
KGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobV9zdGFydEJsb2NrLmdldCgpKSkucHJl
dmlvdXMoKSkpCisgICAgaWYgKG5vZGUgPT0gbV9zdGFydEJsb2NrICYmICFpc0VuZE9mQmxvY2so
VmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobV9zdGFydEJsb2NrLmdldCgpKSku
cHJldmlvdXMoKSkpCiAgICAgICAgIG1fbmVlZFBsYWNlaG9sZGVyID0gdHJ1ZTsKLSAgICBlbHNl
IGlmIChub2RlID09IG1fZW5kQmxvY2sgJiYgIWlzU3RhcnRPZkJsb2NrKFZpc2libGVQb3NpdGlv
bihsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobV9zdGFydEJsb2NrLmdldCgpKSkubmV4
dCgpKSkKKyAgICBlbHNlIGlmIChub2RlID09IG1fZW5kQmxvY2sgJiYgIWlzU3RhcnRPZkJsb2Nr
KFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk5vZGUobV9zdGFydEJsb2NrLmdldCgpKSku
bmV4dCgpKSkKICAgICAgICAgbV9uZWVkUGxhY2Vob2xkZXIgPSB0cnVlOwogICAgIAogICAgIC8v
IEZJWE1FOiBVcGRhdGUgdGhlIGVuZHBvaW50cyBvZiB0aGUgcmFuZ2UgYmVpbmcgZGVsZXRlZC4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21t
YW5kLmNwcAkocmV2aXNpb24gODExNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dExpbmVCcmVha0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAg
dm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gbGVhdmVz
IGFuZCB0aGVuIGNvbWVzIGJhY2ssIG5ldyBpbnB1dCB3aWxsIGhhdmUgdGhlIHJpZ2h0IHN0eWxl
LgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGFsd2F5cyBhcHBseSB0aGUgdHlwaW5n
IHN0eWxlIHRvIHRoZSBsaW5lIGJyZWFrIGhlcmUsCiAgICAgICAgIC8vIHNlZSA8cmRhcjovL3By
b2JsZW0vNTc5NDQ2Mj4uCi0gICAgICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5bGUuZ2V0KCksIGZp
cnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSwgbGFzdERl
ZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGVUb0luc2VydC5nZXQoKSkpOworICAgICAgICBh
cHBseVN0eWxlKHR5cGluZ1N0eWxlLmdldCgpLCBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
bm9kZVRvSW5zZXJ0LmdldCgpKSwgbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2RlVG9JbnNl
cnQuZ2V0KCkpKTsKICAgICAgICAgLy8gRXZlbiB0aG91Z2ggdGhpcyBhcHBseVN0eWxlIG9wZXJh
dGVzIG9uIGEgUmFuZ2UsIGl0IHN0aWxsIHNldHMgYW4gZW5kaW5nU2VsZWN0aW9uKCkuCiAgICAg
ICAgIC8vIEl0IHRyaWVzIHRvIHNldCBhIFZpc2libGVTZWxlY3Rpb24gYXJvdW5kIHRoZSBjb250
ZW50IGl0IG9wZXJhdGVkIG9uLiBTbywgdGhhdCBWaXNpYmxlU2VsZWN0aW9uCiAgICAgICAgIC8v
IHdpbGwgZWl0aGVyIChhKSBzZWxlY3QgdGhlIGxpbmUgYnJlYWsgd2UgaW5zZXJ0ZWQsIG9yIGl0
IHdpbGwgKGIpIGJlIGEgY2FyZXQganVzdCAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGlzdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCShyZXZpc2lvbiA4MTE0NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcs
OCArMjU3LDggQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdyYQogICAg
IFZpc2libGVQb3NpdGlvbiBzdGFydDsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kOwogICAgIGlm
IChsaXN0Q2hpbGROb2RlLT5oYXNUYWdOYW1lKGxpVGFnKSkgewotICAgICAgICBzdGFydCA9IGZp
cnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGlzdENoaWxkTm9kZSk7Ci0gICAgICAgIGVu
ZCA9IGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0Q2hpbGROb2RlKTsKKyAgICAg
ICAgc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKGxpc3RDaGlsZE5vZGUpOworICAgICAgICBl
bmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUobGlzdENoaWxkTm9kZSk7CiAgICAgICAgIG5leHRMaXN0
Q2hpbGQgPSBsaXN0Q2hpbGROb2RlLT5uZXh0U2libGluZygpOwogICAgICAgICBwcmV2aW91c0xp
c3RDaGlsZCA9IGxpc3RDaGlsZE5vZGUtPnByZXZpb3VzU2libGluZygpOwogICAgIH0gZWxzZSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcAkocmV2aXNpb24gODExNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM2LDEwICs1MzYs
MTAgQEAgVmlzaWJsZVBvc2l0aW9uIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOgogewogICAgIE5v
ZGUqIGxhc3ROb2RlID0gbV9sYXN0TGVhZkluc2VydGVkLmdldCgpOwogICAgIC8vIEZJWE1FOiBX
aHkgaXMgdGhpcyBoYWNrIGhlcmU/ICBXaGF0J3Mgc3BlY2lhbCBhYm91dCA8c2VsZWN0PiB0YWdz
PwotICAgIE5vZGUqIGVuY2xvc2luZ1NlbGVjdCA9IGVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0
RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGFzdE5vZGUpLCBzZWxlY3RUYWcpOworICAgIE5v
ZGUqIGVuY2xvc2luZ1NlbGVjdCA9IGVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShsYXN0Tm9kZSksIHNlbGVjdFRhZyk7CiAgICAgaWYgKGVuY2xvc2luZ1Nl
bGVjdCkKICAgICAgICAgbGFzdE5vZGUgPSBlbmNsb3NpbmdTZWxlY3Q7Ci0gICAgcmV0dXJuIGxh
c3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsYXN0Tm9kZSk7CisgICAgcmV0dXJuIGxhc3RQ
b3NpdGlvbkluT3JBZnRlck5vZGUobGFzdE5vZGUpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50KCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkocmV2aXNpb24g
ODExNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NzcsNyArNTc3LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJk
RGVsZXRlS2V5UHJlcwogICAgICAgICAgICAgZG93bnN0cmVhbUVuZCA9IHZpc2libGVFbmQubmV4
dChDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFt
KCk7CiAgICAgICAgIC8vIFdoZW4gZGVsZXRpbmcgdGFibGVzOiBTZWxlY3QgdGhlIHRhYmxlIGZp
cnN0LCB0aGVuIHBlcmZvcm0gdGhlIGRlbGV0aW9uCiAgICAgICAgIGlmIChkb3duc3RyZWFtRW5k
LmRlcHJlY2F0ZWROb2RlKCkgJiYgZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpLT5yZW5k
ZXJlcigpICYmIGRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNU
YWJsZSgpICYmICFkb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpIHsKLSAg
ICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVj
dGlvbigpLmVuZCgpLCBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoZG93bnN0cmVhbUVu
ZC5kZXByZWNhdGVkTm9kZSgpKSwgRE9XTlNUUkVBTSkpOworICAgICAgICAgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIHBvc2l0
aW9uQWZ0ZXJOb2RlKGRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSksIERPV05TVFJFQU0p
KTsKICAgICAgICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA4MTE0NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg5LDcgKzg5LDggQEAgVmlzaWJsZVNlbGVjdGlvbjo6VmlzaWJsZVNlbGVjdGlvbihjb25zdAog
CiBWaXNpYmxlU2VsZWN0aW9uIFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50
c09mTm9kZShOb2RlKiBub2RlKQogewotICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKGZpcnN0
RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZSksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9u
Rm9yTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CisgICAgQVNTRVJUKCFlZGl0aW5nSWdub3Jlc0Nv
bnRlbnQobm9kZSkpOworICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb25J
bk5vZGUobm9kZSksIGxhc3RQb3NpdGlvbkluTm9kZShub2RlKSwgRE9XTlNUUkVBTSk7CiB9CiAK
IHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0QmFzZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24p
CkBAIC00OTgsMTMgKzQ5OSwxMyBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFkanVzdFNlbGVj
dGlvblRvCiAgICAgICAgICAgICBQb3NpdGlvbiBwID0gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKG1fZW5kKTsKICAgICAgICAgICAgIE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gZW5k
Um9vdCA/IGVuZFJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKICAgICAgICAgICAgIGlm
IChwLmlzTnVsbCgpICYmIGVuZFJvb3QgJiYgKHNoYWRvd0FuY2VzdG9yICE9IGVuZFJvb3QpKQot
ICAgICAgICAgICAgICAgIHAgPSBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93
QW5jZXN0b3IpOworICAgICAgICAgICAgICAgIHAgPSBwb3NpdGlvbkFmdGVyTm9kZShzaGFkb3dB
bmNlc3Rvcik7CiAgICAgICAgICAgICB3aGlsZSAocC5pc05vdE51bGwoKSAmJiAhKGxvd2VzdEVk
aXRhYmxlQW5jZXN0b3IocC5jb250YWluZXJOb2RlKCkpID09IGJhc2VFZGl0YWJsZUFuY2VzdG9y
ICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogcm9v
dCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHApOwogICAgICAgICAgICAgICAgIHNoYWRvd0Fu
Y2VzdG9yID0gcm9vdCA/IHJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKICAgICAgICAg
ICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuY29udGFpbmVyTm9kZSgpKSA/IHBvc2l0aW9uSW5Q
YXJlbnRCZWZvcmVOb2RlKHAuY29udGFpbmVyTm9kZSgpKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShwKTsKICAgICAgICAgICAgICAgICBpZiAocC5pc051bGwoKSAmJiAoc2hh
ZG93QW5jZXN0b3IgIT0gcm9vdCkpCi0gICAgICAgICAgICAgICAgICAgIHAgPSBsYXN0RGVlcEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOworICAgICAgICAgICAgICAgICAg
ICBwID0gcG9zaXRpb25BZnRlck5vZGUoc2hhZG93QW5jZXN0b3IpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzKHApOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gODExNDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDE0
ICsyNzcsMTQgQEAgUG9zaXRpb24gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYQogVmlz
aWJsZVBvc2l0aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdGVyUG9zaXRpb25JblJvb3QoY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uLCBOb2RlKiBoaWdoZXN0Um9vdCkKIHsKICAgICAvLyBwb3Np
dGlvbiBmYWxscyBiZWZvcmUgaGlnaGVzdFJvb3QuCi0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMo
cG9zaXRpb24sIGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpKSA9
PSAtMSAmJiBoaWdoZXN0Um9vdC0+aXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJu
IGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpOworICAgIGlmIChj
b21wYXJlUG9zaXRpb25zKHBvc2l0aW9uLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290
KSkgPT0gLTEgJiYgaGlnaGVzdFJvb3QtPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIHJl
dHVybiBmaXJzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290KTsKIAogICAgIFBvc2l0aW9uIHAg
PSBwb3NpdGlvbjsKICAgICAKICAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3IgPSBwLmRlcHJl
Y2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQogICAgICAgICBpZiAoc2hhZG93QW5j
ZXN0b3IgIT0gcC5kZXByZWNhdGVkTm9kZSgpKQotICAgICAgICAgICAgcCA9IGxhc3REZWVwRWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNlc3Rvcik7CisgICAgICAgICAgICBwID0gcG9z
aXRpb25BZnRlck5vZGUoc2hhZG93QW5jZXN0b3IpOwogICAgIAogICAgIHdoaWxlIChwLmRlcHJl
Y2F0ZWROb2RlKCkgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSAmJiBwLmRlcHJlY2F0ZWROb2Rl
KCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgcCA9IGlzQXRvbWljTm9k
ZShwLmRlcHJlY2F0ZWROb2RlKCkpID8gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShwLmRlcHJl
Y2F0ZWROb2RlKCkpIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CkBAIC0yOTgs
MTQgKzI5OCwxNCBAQCBWaXNpYmxlUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0CiBW
aXNpYmxlUG9zaXRpb24gbGFzdEVkaXRhYmxlUG9zaXRpb25CZWZvcmVQb3NpdGlvbkluUm9vdChj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIE5vZGUqIGhpZ2hlc3RSb290KQogewogICAgIC8vIFdo
ZW4gcG9zaXRpb24gZmFsbHMgYWZ0ZXIgaGlnaGVzdFJvb3QsIHRoZSByZXN1bHQgaXMgZWFzeSB0
byBjb21wdXRlLgotICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHBvc2l0aW9uLCBsYXN0RGVlcEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpKSA9PSAxKQotICAgICAgICByZXR1cm4g
bGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KTsKKyAgICBpZiAoY29t
cGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgbGFzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290KSkg
PT0gMSkKKyAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCk7CiAK
ICAgICBQb3NpdGlvbiBwID0gcG9zaXRpb247CiAgICAgCiAgICAgaWYgKE5vZGUqIHNoYWRvd0Fu
Y2VzdG9yID0gcC5kZXByZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkKICAgICAg
ICAgaWYgKHNoYWRvd0FuY2VzdG9yICE9IHAuZGVwcmVjYXRlZE5vZGUoKSkKLSAgICAgICAgICAg
IHAgPSBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKKyAg
ICAgICAgICAgIHAgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKHNoYWRvd0FuY2VzdG9yKTsKICAgICAK
ICAgICB3aGlsZSAocC5kZXByZWNhdGVkTm9kZSgpICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkg
JiYgcC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCiAgICAg
ICAgIHAgPSBpc0F0b21pY05vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJl
bnRCZWZvcmVOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUocCk7CkBAIC03MjMsOCArNzIzLDggQEAgTm9kZSogZW5jbG9zaW5nRW1wdHlM
aXN0SXRlbShjb25zdCBWaXNpYgogICAgIGlmICghbGlzdENoaWxkTm9kZSB8fCAhaXNTdGFydE9m
UGFyYWdyYXBoKHZpc2libGVQb3MpIHx8ICFpc0VuZE9mUGFyYWdyYXBoKHZpc2libGVQb3MpKQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluTGlzdENoaWxk
KGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGlzdENoaWxkTm9kZSkpOwotICAgIFZp
c2libGVQb3NpdGlvbiBsYXN0SW5MaXN0Q2hpbGQobGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKGxpc3RDaGlsZE5vZGUpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkxpc3RDaGls
ZChmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobGlzdENoaWxkTm9kZSkpOworICAgIFZpc2li
bGVQb3NpdGlvbiBsYXN0SW5MaXN0Q2hpbGQobGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShsaXN0
Q2hpbGROb2RlKSk7CiAKICAgICBpZiAoZmlyc3RJbkxpc3RDaGlsZCAhPSB2aXNpYmxlUG9zIHx8
IGxhc3RJbkxpc3RDaGlsZCAhPSB2aXNpYmxlUG9zKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDgxMTQ1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQs
MjYgKzEyNCw2IEBAIGlubGluZSBQb3NpdGlvbiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2QKICAg
ICByZXR1cm4gZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpID8gcG9zaXRpb25BZnRlck5vZGUo
bm9kZSkgOiBsYXN0UG9zaXRpb25Jbk5vZGUobm9kZSk7CiB9CiAKLS8vIFBvc2l0aW9uIGNyZWF0
aW9uIGZ1bmN0aW9ucyBhcmUgaW5saW5lIHRvIHByZXZlbnQgcmVmLWNodXJuLgotLy8gT3RoZXIg
UG9zaXRpb24gY3JlYXRpb24gZnVuY3Rpb25zIGFyZSBpbiBQb3NpdGlvbi5oCi0vLyBidXQgdGhl
c2UgZGVwZW5kIG9uIGxhc3RPZmZzZXRGb3JFZGl0aW5nIHdoaWNoIGlzIGRlZmluZWQgaW4gaHRt
bGVkaXRpbmcuaC4KLQotLy8gTk9URTogZmlyc3QvbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlIHJldHVybiBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMgKGxpa2UgW2ltZywgMF0pCi0vLyBm
b3IgZWxlbWVudHMgd2hpY2ggZWRpdGluZyBpZ25vcmVzLiAgVGhlIHJlc3Qgb2YgdGhlIGVkaXRp
bmcgY29kZSB3aWxsIHRyZWF0IFtpbWcsIDBdCi0vLyBhcyAidGhlIGxhc3QgcG9zaXRpb24gYmVm
b3JlIHRoZSBpbWciLgotLy8gTmV3IGNvZGUgc2hvdWxkIHVzZSB0aGUgY3JlYXRpb24gZnVuY3Rp
b25zIGluIFBvc2l0aW9uLmggaW5zdGVhZC4KLWlubGluZSBQb3NpdGlvbiBmaXJzdERlZXBFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKE5vZGUqIGFuY2hvck5vZGUpCi17Ci0gICAgQVNTRVJUKGFuY2hv
ck5vZGUpOwotICAgIHJldHVybiBQb3NpdGlvbihhbmNob3JOb2RlLCAwKTsKLX0KLQotaW5saW5l
IFBvc2l0aW9uIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShOb2RlKiBhbmNob3JOb2Rl
KQotewotICAgIEFTU0VSVChhbmNob3JOb2RlKTsKLSAgICByZXR1cm4gUG9zaXRpb24oYW5jaG9y
Tm9kZSwgbGFzdE9mZnNldEZvckVkaXRpbmcoYW5jaG9yTm9kZSkpOwotfQotICAgICAgIAogLy8g
Y29tcGFyaXNpb24gZnVuY3Rpb25zIG9uIFBvc2l0aW9uCiAgICAgCiBpbnQgY29tcGFyZVBvc2l0
aW9ucyhjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHJldmlzaW9uIDgxMTQ1KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ3
LDcgKzc0Nyw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYKICAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAogICAgIGlmIChpc1JlbmRlcmVk
QXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihzdGFydE5vZGUpKQotICAgICAgICByZXR1cm4gZmly
c3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShzdGFydE5vZGUpOworICAgICAgICByZXR1cm4g
cG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0Tm9kZSk7CiAKICAgICBOb2RlKiBzdGFydEJsb2NrID0g
ZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKTsKIApAQCAtODE4LDcgKzgxOCw3IEBAIFZpc2libGVQ
b3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXMKICAgICBOb2RlKiBzdGFydE5vZGUgPSBw
LmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBpZiAoaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJ
bWFnZU9ySFIoc3RhcnROb2RlKSkKLSAgICAgICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZShzdGFydE5vZGUpOworICAgICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUo
c3RhcnROb2RlKTsKICAgICAKICAgICBOb2RlKiBzdGFydEJsb2NrID0gZW5jbG9zaW5nQmxvY2so
c3RhcnROb2RlKTsKICAgICBOb2RlKiBzdGF5SW5zaWRlQmxvY2sgPSBzdGFydEJsb2NrOwpAQCAt
MTAyOCw3ICsxMDI4LDcgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQo
YwogICAgIGlmICghaGlnaGVzdFJvb3QpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
KTsKIAotICAgIHJldHVybiBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RS
b290KTsKKyAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCk7CiB9CiAK
IFZpc2libGVQb3NpdGlvbiBlbmRPZkVkaXRhYmxlQ29udGVudChjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3NpdGlvbikKQEAgLTEwMzcsNyArMTAzNyw3IEBAIFZpc2libGVQb3NpdGlv
biBlbmRPZkVkaXRhYmxlQ29udGVudChjb24KICAgICBpZiAoIWhpZ2hlc3RSb290KQogICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICByZXR1cm4gbGFzdERlZXBFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKGhpZ2hlc3RSb290KTsKKyAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5O
b2RlKGhpZ2hlc3RSb290KTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0TGVhZkJveGVzSW5Mb2dpY2Fs
T3JkZXIoUm9vdElubGluZUJveCogcm9vdEJveCwgVmVjdG9yPElubGluZUJveCo+JiBsZWFmQm94
ZXNJbkxvZ2ljYWxPcmRlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCShyZXZpc2lvbiA4MTE0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQ4LDcgKzMwNDgsNyBAQCBWaXNpYmxlUG9zaXRp
b24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvCiB7CiAgICAgLy8gbm8gY2hpbGRyZW4uLi5yZXR1
cm4gdGhpcyByZW5kZXIgb2JqZWN0J3MgZWxlbWVudCwgaWYgdGhlcmUgaXMgb25lLCBhbmQgb2Zm
c2V0IDAKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2li
bGVQb3NpdGlvbihub2RlKCkgPyBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUo
KSkgOiBQb3NpdGlvbigwLCAwKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRp
b24obm9kZSgpID8gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUoKSkgOiBQb3NpdGlv
bigwLCAwKSk7CiAKICAgICBpbnQgeFBvcyA9IHBvaW50LngoKTsKICAgICBpbnQgeVBvcyA9IHBv
aW50LnkoKTsKQEAgLTMwNTksOCArMzA1OSw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJCb3g6
OnBvc2l0aW9uRm9yUG8KICAgICAgICAgCiAgICAgICAgIGlmICh4UG9zIDwgMCB8fCB4UG9zID4g
cmlnaHQgfHwgeVBvcyA8IDAgfHwgeVBvcyA+IGJvdHRvbSkgewogICAgICAgICAgICAgaWYgKHhQ
b3MgPD0gcmlnaHQgLyAyKQotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9z
aXRpb24oZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlKCkpKTsKLSAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24obGFzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKG5vZGUoKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9z
aXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUoKSkpOworICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5v
ZGUoKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMTMxLDcgKzMxMzEsNyBAQCBWaXNpYmxl
UG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvCiAgICAgaWYgKGNsb3Nlc3RSZW5kZXJl
cikKICAgICAgICAgcmV0dXJuIGNsb3Nlc3RSZW5kZXJlci0+cG9zaXRpb25Gb3JDb29yZGluYXRl
cyhuZXdYIC0gY2xvc2VzdFJlbmRlcmVyLT54KCksIG5ld1kgLSBjbG9zZXN0UmVuZGVyZXItPnko
KSk7CiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihmaXJzdERlZXBFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGUoKSkpOworICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9z
aXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUoKSkpOwogfQogCiBib29sIFJl
bmRlckJveDo6c2hyaW5rVG9Bdm9pZEZsb2F0cygpIGNvbnN0Cg==
</data>
<flag name="review"
          id="78031"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>