<?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>27099</bug_id>
          
          <creation_ts>2009-07-08 15:57:17 -0700</creation_ts>
          <short_desc>Elements with display none still gets focus and take part in the tab order</short_desc>
          <delta_ts>2009-09-06 22:10:37 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Erik Arvidsson">arv</reporter>
          <assigned_to name="Erik Arvidsson">arv</assigned_to>
          <cc>abarth</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130554</commentid>
    <comment_count>0</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-07-08 15:57:17 -0700</bug_when>
    <thetext>Given an element with tabIndex and style.display set to none the user can still focus that element by tabbing to it. This leads to the focus outline getting lost and there seems to be gaps in the focus order. The expected behavior is for non displayed elements to not take part in the tab order and not be focusable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130557</commentid>
    <comment_count>1</comment_count>
      <attachid>32481</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-07-08 15:58:16 -0700</bug_when>
    <thetext>Created attachment 32481
Test case - tabbing should never focus &quot;Div 1&quot; which is hidden.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130987</commentid>
    <comment_count>2</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-07-10 15:41:12 -0700</bug_when>
    <thetext>It seems like the following change works:

bool Node::isFocusable() const
{
    return renderer() &amp;&amp; hasRareData() &amp;&amp; rareData()-&gt;tabIndexSetExplicitly();
}

It checks if the Node has a renderer before it claims to be focusable. This works because display: none has no renderer. I&apos;m not sure that this is sufficient or if it might have other side effects?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130989</commentid>
    <comment_count>3</comment_count>
      <attachid>32584</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-07-10 15:44:37 -0700</bug_when>
    <thetext>Created attachment 32584
Test case

I improved on the test case by including a 0x0 sized div and a visibility hidden div.

IE does not allow focus on the visibility hidden div but I think we should allow that since content might be visible in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133973</commentid>
    <comment_count>4</comment_count>
      <attachid>33305</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-07-22 16:09:23 -0700</bug_when>
    <thetext>Created attachment 33305
Make isKeyboardFocusable return false when there is no renderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133982</commentid>
    <comment_count>5</comment_count>
      <attachid>33305</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-07-22 16:42:22 -0700</bug_when>
    <thetext>Comment on attachment 33305
Make isKeyboardFocusable return false when there is no renderer.

should isFocusable check for the renderer?  If not, why not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133991</commentid>
    <comment_count>6</comment_count>
      <attachid>33305</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-22 17:02:11 -0700</bug_when>
    <thetext>Comment on attachment 33305
Make isKeyboardFocusable return false when there is no renderer.

Thanks for tackling this. It looks like you are on the right track.

Unfortunately this is not quite right.

Calling renderer() inside a Node function can give you a false negative. The object might have a different display type and layout just hasn&apos;t run yet. It&apos;s an error to ever call renderer() unless you know that layout is up to date.

Instead, this check needs to be something done by callers that are at a higher level; they are in a position to know that layout is updated and if renderer() is 0 it actually means something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134145</commentid>
    <comment_count>7</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-07-23 10:27:29 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 33305 [details])
&gt; Thanks for tackling this. It looks like you are on the right track.
&gt; 
&gt; Unfortunately this is not quite right.
&gt; 
&gt; Calling renderer() inside a Node function can give you a false negative. The
&gt; object might have a different display type and layout just hasn&apos;t run yet. It&apos;s
&gt; an error to ever call renderer() unless you know that layout is up to date.
&gt; 
&gt; Instead, this check needs to be something done by callers that are at a higher
&gt; level; they are in a position to know that layout is updated and if renderer()
&gt; is 0 it actually means something.

Is it OK to check the renderer in HTMLElement and its subclasses? 

Another option is to get the computed style and check the display property but that seems less than optimal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137381</commentid>
    <comment_count>8</comment_count>
      <attachid>34159</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-08-05 12:43:05 -0700</bug_when>
    <thetext>Created attachment 34159
Use renderStyle display in Element::isFocusable instead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137387</commentid>
    <comment_count>9</comment_count>
      <attachid>34159</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-05 12:49:25 -0700</bug_when>
    <thetext>Comment on attachment 34159
Use renderStyle display in Element::isFocusable instead

This doesn&apos;t look right to me. One of the best ways to &quot;check&quot; for display: none is to check if there is a renderer, and that can be done at the Node level by checking renderer().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137420</commentid>
    <comment_count>10</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-08-05 13:39:09 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 34159 [details])
&gt; This doesn&apos;t look right to me. One of the best ways to &quot;check&quot; for display:
&gt; none is to check if there is a renderer, and that can be done at the Node level
&gt; by checking renderer().

I&apos;m confused. Earlier you said that &quot;Calling renderer() inside a Node function can give you a false negative&quot;

The main problem I encountered is with option and optgroup elements (as well as with map elements but those are just plain broken). These do not have a renderer but they have display() != NONE. These have a nonRendererRenderStyle so I guess I could use that.

I&apos;ll see what I can come up with</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137433</commentid>
    <comment_count>11</comment_count>
      <attachid>34174</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-08-05 14:09:05 -0700</bug_when>
    <thetext>Created attachment 34174
Checking renderer() first

This now checks renderer() in Element::isFocusable and handles the false negatives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137439</commentid>
    <comment_count>12</comment_count>
      <attachid>34174</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-05 14:27:43 -0700</bug_when>
    <thetext>Comment on attachment 34174
Checking renderer() first

No, in those cases we should check renderer() after calling updateLayoutIgnorePendingStylesheets().

I still don&apos;t understand why Element does this work and Node does not -- it makes sense for other nodes too.

But also, I&apos;m a little worried about such a low level function calling updateLayout. We&apos;ll need to examine all calls to isFocusable and make sure they can handle a layout happening in the middle of the function right where they call updateLayout. A better design might be to do the layout at a higher level and have an assertion in isFocusable instead. Another possibility would be to move isFocusable to the render tree which would implicitly do the same thing in a clearer way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137497</commentid>
    <comment_count>13</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-08-05 18:09:38 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 34174 [details])
&gt; No, in those cases we should check renderer() after calling
&gt; updateLayoutIgnorePendingStylesheets().
&gt; 
&gt; I still don&apos;t understand why Element does this work and Node does not -- it
&gt; makes sense for other nodes too.

I didn&apos;t think Node had any style info

&gt; But also, I&apos;m a little worried about such a low level function calling
&gt; updateLayout. We&apos;ll need to examine all calls to isFocusable and make sure they
&gt; can handle a layout happening in the middle of the function right where they
&gt; call updateLayout. A better design might be to do the layout at a higher level
&gt; and have an assertion in isFocusable instead.

I was also concerned about introducing a layout call in isFocusable.

What would that assertion be?

There is already a few overrides of isFocusable that check renderer() without any call to updateLayoutIgnorePendingStylesheets in them. All code paths that call isFocusable also seems to update the layout. The only exception I found is Element::attach but that one calls createRendererIfNeeded

&gt; Another possibility would be to
&gt; move isFocusable to the render tree which would implicitly do the same thing in
&gt; a clearer way.

isFocusable depends on attributes like tabindex and href for links.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142666</commentid>
    <comment_count>14</comment_count>
      <attachid>38561</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-08-25 12:12:27 -0700</bug_when>
    <thetext>Created attachment 38561
Handle the basic hidden case in Node::isFocusable

This cleans up the mess of supportsFocus and isFocusable. supportsFocus now means that the node should support focus if layout is ignored. For example a link should support focus and a span with tabIndex &gt;= 0 and a contentEditabl element as well. isFocusable checks that the element has a renderer and that it is visible. Some derived classes of Node also check that the box for the element is non empty (but I didn&apos;t change those cases since there were rdar bugs for those).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142683</commentid>
    <comment_count>15</comment_count>
      <attachid>38561</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-08-25 13:39:33 -0700</bug_when>
    <thetext>Comment on attachment 38561
Handle the basic hidden case in Node::isFocusable

I got some more fixes to a elements without href attributes and I&apos;m adding more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142693</commentid>
    <comment_count>16</comment_count>
      <attachid>38569</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-08-25 13:56:25 -0700</bug_when>
    <thetext>Created attachment 38569
Also handles a elements correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143006</commentid>
    <comment_count>17</comment_count>
      <attachid>38648</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-08-26 17:05:09 -0700</bug_when>
    <thetext>Created attachment 38648
This adds an assert that the layout is up to date.

The assert found a code path where the layout was not up to date. When the user clicks somewhere we need to ensure layout is up to date before checking isFocusable as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143269</commentid>
    <comment_count>18</comment_count>
      <attachid>38648</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-27 18:30:23 -0700</bug_when>
    <thetext>Comment on attachment 38648
This adds an assert that the layout is up to date.

// All platforms actually want this code, but bug 12345 handles fixing that.
#if !PLATFORM(GTK)
    if (isLink())
        return false;
#endif

   // Allow tab index etc to control focus.
   return HTMLElement::isMouseFocusable();


Seems:
7474 bool WMLAElement::supportsFocus() const

should be:
return isLink() || WMLElement::supportsFocus();


Needs new comment:
7     // If it supports focus but the stylesheets have not loaded we continue so
 1228     // we can set the the focused node to be handled later when we have the
 1229     // stylehseets loaded.
 1230     if (doc-&gt;haveStylesheetsLoaded()) {
 1231         doc-&gt;updateLayoutIgnorePendingStylesheets();
 1232         if (!isFocusable())
 1233             return;
 1234     }

Something along the lines of:
// If we have already loaded stylesheets, we can reliably check isFocusable()
// If not, then we just continue and focus will update when the stylesheet loads finish.


 1239     // Setting the focused node above might have caused side effects like
 1240     // requiring the layout to update or made the node to no longer be
 1241     // focusable.
 1242     doc-&gt;updateLayoutIgnorePendingStylesheets();

// Setting the focused node may have invalidated layout.
why is that true?

 848     // Dave wants to fix that some day with a &quot;has visible content&quot; flag or the like.

we have like 5 daves now. :)  &quot;Hyatt&quot; is a better indicator these days.

I would have expected this to be closer to an isFocusable call?
2         // The layout needs to be up to date to determine if an element is focusable.
 1683         m_frame-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets();

No need to depend on onload, we can just inline the script after the content, no?

 window.onload = function()
 12 {
 13     if (!window.layoutTestController)
 14         return;
 15 
 16     var aElement = document.getElementById(&apos;t&apos;);
 17     eventSender.mouseMoveTo(aElement.offsetLeft + 2, aElement.offsetTop + 2);
 18     eventSender.mouseDown();    
 19 };

Are you aware of our JS-only/DOM-only tests?
http://trac.webkit.org/wiki/Writing%20Layout%20Tests%20for%20DumpRenderTree
They give you things like testPassed() for free.  These tests are also OK as is.

Need one more round.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143277</commentid>
    <comment_count>19</comment_count>
      <attachid>38708</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-08-27 19:09:45 -0700</bug_when>
    <thetext>Created attachment 38708
Eric&apos;s comments taken care of</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144161</commentid>
    <comment_count>20</comment_count>
      <attachid>38708</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-02 02:39:46 -0700</bug_when>
    <thetext>Comment on attachment 38708
Eric&apos;s comments taken care of

This looks fine to me.

I&apos;m assuming the blur event count change is intentional:
-335 focus / 335 blur events disatched, and should be 335 / 335 PASSED
+329 focus / 329 blur events dispatched, and should be 335 / 335 PASSED

A comment here would have problem helped:
-bool HTMLFrameElementBase::isFocusable() const
+bool HTMLFrameElementBase::supportsFocus() const
 {
-    return renderer();
+    return true;
 }

This is OK as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144172</commentid>
    <comment_count>21</comment_count>
      <attachid>38708</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-02 03:00:21 -0700</bug_when>
    <thetext>Comment on attachment 38708
Eric&apos;s comments taken care of

Rejecting patch 38708 from commit-queue.  This patch will require manual commit.

Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;]&quot;  exit_code: 1  cwd: None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144176</commentid>
    <comment_count>22</comment_count>
      <attachid>38708</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-02 03:12:06 -0700</bug_when>
    <thetext>Comment on attachment 38708
Eric&apos;s comments taken care of

Race condition during commit.  adding back to commit-queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144182</commentid>
    <comment_count>23</comment_count>
      <attachid>38708</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-02 03:26:23 -0700</bug_when>
    <thetext>Comment on attachment 38708
Eric&apos;s comments taken care of

Rejecting patch 38708 from commit-queue.  This patch will require manual commit.

Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;]&quot;  exit_code: 1  cwd: None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144864</commentid>
    <comment_count>24</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2009-09-04 10:45:54 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 38708 [details])
&gt; Rejecting patch 38708 from commit-queue.  This patch will require manual
&gt; commit.
&gt; 
&gt; Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;]&quot;  exit_code: 1  cwd: None

Is there anything I need to do to get this committed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145093</commentid>
    <comment_count>25</comment_count>
      <attachid>38708</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-06 22:10:30 -0700</bug_when>
    <thetext>Comment on attachment 38708
Eric&apos;s comments taken care of

Clearing flags on attachment: 38708

Committed r48106: &lt;http://trac.webkit.org/changeset/48106&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145094</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-06 22:10:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>32481</attachid>
            <date>2009-07-08 15:58:16 -0700</date>
            <delta_ts>2009-07-10 15:44:37 -0700</delta_ts>
            <desc>Test case - tabbing should never focus &quot;Div 1&quot; which is hidden.</desc>
            <filename>focus-display-none.html</filename>
            <type>text/html</type>
            <size>516</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPjwvdGl0bGU+CjxzdHlsZT4KCjwv
c3R5bGU+CjxzY3JpcHQ+CgpmdW5jdGlvbiBwcmludChzKSB7CiAgdmFyIGVsID0gZG9jdW1lbnQu
cXVlcnlTZWxlY3RvcigncHJlJyk7CiAgZWwudGV4dENvbnRlbnQgKz0gcyArICdcbic7Cn0KCmRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZnVuY3Rpb24oZSkgewogIHZhciBlbCA9
IGUudGFyZ2V0OwogIHByaW50KGVsLnRleHRDb250ZW50ICsgJywgJyArCiAgICAgICAgZG9jdW1l
bnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCkuZGlzcGxheSk7Cn0sIHRy
dWUpOwoKPC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHk+Cgo8ZGl2IHRhYmluZGV4PTA+RGl2IDA8L2Rp
dj4KPGRpdiB0YWJpbmRleD0wIHN0eWxlPSJkaXNwbGF5Om5vbmUiPkRpdiAxPC9kaXY+CjxkaXYg
dGFiaW5kZXg9MD5EaXYgMjwvZGl2PgoKPHByZSBpZD1vdXQ+PC9wcmU+Cgo8L2JvZHk+CjwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>32584</attachid>
            <date>2009-07-10 15:44:37 -0700</date>
            <delta_ts>2009-07-10 15:44:37 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>focus-display-none.html</filename>
            <type>text/html</type>
            <size>634</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPjwvdGl0bGU+CjxzdHlsZT4KCjwv
c3R5bGU+CjxzY3JpcHQ+CgpmdW5jdGlvbiBwcmludChzKSB7CiAgdmFyIGVsID0gZG9jdW1lbnQu
cXVlcnlTZWxlY3RvcigncHJlJyk7CiAgZWwudGV4dENvbnRlbnQgKz0gcyArICdcbic7Cn0KCmRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZnVuY3Rpb24oZSkgewogIHZhciBlbCA9
IGUudGFyZ2V0OwogIHByaW50KGVsLnRleHRDb250ZW50ICsgJywgc3R5bGU9IicgKyBlLnRhcmdl
dC5zdHlsZS5jc3NUZXh0ICsgJyInKTsKfSwgdHJ1ZSk7Cgo8L3NjcmlwdD4KPC9oZWFkPgo8Ym9k
eT4KCjxkaXYgdGFiaW5kZXg9MD5EaXYgMDwvZGl2Pgo8ZGl2IHRhYmluZGV4PTAgc3R5bGU9ImRp
c3BsYXk6bm9uZSI+RGl2IDE8L2Rpdj4KPGRpdiB0YWJpbmRleD0wPkRpdiAyPC9kaXY+CjxkaXYg
dGFiaW5kZXg9MCBzdHlsZT0ib3ZlcmZsb3c6aGlkZGVuO2hlaWdodDowIj5EaXYgMyAoKTwvZGl2
Pgo8ZGl2IHRhYmluZGV4PTA+RGl2IDQ8L2Rpdj4KPGRpdiB0YWJpbmRleD0wIHN0eWxlPSJ2aXNp
YmlsaXR5OmhpZGRlbiI+RGl2IDU8L2Rpdj4KCjxwcmUgaWQ9b3V0PjwvcHJlPgoKPC9ib2R5Pgo8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33305</attachid>
            <date>2009-07-22 16:09:23 -0700</date>
            <delta_ts>2009-08-05 12:43:05 -0700</delta_ts>
            <desc>Make isKeyboardFocusable return false when there is no renderer.</desc>
            <filename>tab-hidden.patch</filename>
            <type>text/plain</type>
            <size>3706</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjI0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDctMjIgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
cmV2ZW50IHRhYmJpbmcgdG8gaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5CisKKyAgICAg
ICAgTWFrZSBpc0tleWJvYXJkRm9jdXNhYmxlIHJldHVybiBmYWxzZSBpZiB0aGVyZSBpc24ndCBh
IHJlbmRlcmVyLgorICAgICAgICAKKyAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvdGFiLWZvY3Vz
LWhpZGRlbi5odG1sCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjppc0tleWJvYXJkRm9jdXNhYmxlKToKKwogMjAwOS0wNy0yMiAgT2xpdmVyIEh1bnQg
IDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29u
LgpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
Tm9kZS5jcHAJKHJldmlzaW9uIDQ2MTk1KQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc2NSw3ICs3NjUsNyBAQCBib29sIE5vZGU6OmlzRm9jdXNhYmxlKCkgY29u
c3QKIAogYm9vbCBOb2RlOjppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25z
dAogewotICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpICYmIHRhYkluZGV4KCkgPj0gMDsKKyAgICBy
ZXR1cm4gcmVuZGVyZXIoKSAmJiBpc0ZvY3VzYWJsZSgpICYmIHRhYkluZGV4KCkgPj0gMDsKIH0K
IAogYm9vbCBOb2RlOjppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDQ2MjQ5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMDktMDctMjIgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2ZW50
IHRhYmJpbmcgdG8gaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5CisKKyAgICAgICAgTWFr
ZSBpc0tleWJvYXJkRm9jdXNhYmxlIHJldHVybiBmYWxzZSBpZiB0aGVyZSBpc24ndCBhIHJlbmRl
cmVyLgorICAgICAgICAKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRl
bi5odG1sOiBBZGRlZC4KKwogMjAwOS0wNy0yMiAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0aCBEYWtpbi4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4tZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRlbi1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK0xheW91dCB0ZXN0IGZv
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTkKKworRGl2IDAK
K0RpdiAyCitEaXYgNAorUmVzdWx0CisKK1BBU1MgLSBEaXYgMAorUEFTUyAtIERpdiAyCitQQVNT
IC0gRGl2IDMKK1BBU1MgLSBEaXYgNAorUEFTUyAtIERpdiA1CisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQorewor
ICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgZXZlbnRTZW5k
ZXIua2V5RG93bignXHQnKTsKKyAgICB9Cit9OworCitmdW5jdGlvbiBwcmludChzKQoreworICAg
IHZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ByZScpOworICAgIGVsLnRleHRDb250
ZW50ICs9IHMgKyAnXG4nOworfQorCit2YXIgbmV4dFRvRm9jdXMgPSAwOworCitkb2N1bWVudC5h
ZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGZ1bmN0aW9uKGUpIHsKKyAgICB2YXIgZWwgPSBlLnRh
cmdldDsKKyAgICBwcmludCgoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXRhYicpID09IG5leHRUb0Zv
Y3VzID8gJ1BBU1MnIDogJ0ZBSUwnKSArCisgICAgICAgICAgJyAtICcgKyBlbC50ZXh0Q29udGVu
dCk7CisgICAgbmV4dFRvRm9jdXMrKzsKK30sIHRydWUpOworCis8L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorCis8cD5MYXlvdXQgdGVzdCBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5IiB0YWJpbmRleD0tMT5odHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTk8L2E+CisKKzxkaXYgdGFiaW5kZXg9MCBkYXRh
LXRhYj0wPkRpdiAwPC9kaXY+Cis8ZGl2IHRhYmluZGV4PTAgc3R5bGU9ImRpc3BsYXk6bm9uZSI+
RGl2IDE8L2Rpdj4KKzxkaXYgdGFiaW5kZXg9MCBkYXRhLXRhYj0xPkRpdiAyPC9kaXY+Cis8ZGl2
IHRhYmluZGV4PTAgZGF0YS10YWI9MiBzdHlsZT0ib3ZlcmZsb3c6aGlkZGVuO2hlaWdodDowIj5E
aXYgMzwvZGl2PgorPGRpdiB0YWJpbmRleD0wIGRhdGEtdGFiPTM+RGl2IDQ8L2Rpdj4KKzxkaXYg
dGFiaW5kZXg9MCBkYXRhLXRhYj00IHN0eWxlPSJ2aXNpYmlsaXR5OmhpZGRlbiI+RGl2IDU8L2Rp
dj4KKworPHA+UmVzdWx0CisKKzxwcmUgaWQ9b3V0PjwvcHJlPgorCis8L2JvZHk+Cis8L2h0bWw+
Cg==
</data>
<flag name="review"
          id="17605"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34159</attachid>
            <date>2009-08-05 12:43:05 -0700</date>
            <delta_ts>2009-08-05 14:09:05 -0700</delta_ts>
            <desc>Use renderStyle display in Element::isFocusable instead</desc>
            <filename>tab-hidden.patch</filename>
            <type>text/plain</type>
            <size>6794</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjgwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMDgtMDUgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIGhpZGRlbiBlbGVtZW50cyBub3QgZm9jdXNhYmxlLiBUaGlzIGlzIGltcG9ydGFudCBiZWNh
dWUgd2Ugc2hvdWxkCisgICAgICAgIG5vdCBhbGxvdyB0YWJiaW5nIHRvIGEgaGlkZGVuIGVsZW1l
bnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzA5
OQorCisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4uaHRtbAorCisg
ICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aXNG
b2N1c2FibGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL05vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNGb2N1c2FibGUpOgorCiAyMDA5LTA4LTA1
ICBTemFibyBDYXJvbCAgPGNhcm9sLnN6YWJvQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0Njc4MCkKKysrIFdlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY3LDYgKzEyNjcsMjAgQEAg
dm9pZCBFbGVtZW50OjpibHVyKCkKICAgICB9CiB9CiAKK2Jvb2wgRWxlbWVudDo6aXNGb2N1c2Fi
bGUoKSBjb25zdAoreworICAgIGlmICghTm9kZTo6aXNGb2N1c2FibGUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworIAorICAgIC8vIENoZWNrIGlmIHRoZSBlbGVtZW50IGhhcyBkaXNwbGF5IG5v
bmUuIFRoaXMgZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgc2lkZQorICAgIC8vIGVmZmVjdHMgc28g
d2UgY2Fubm90IGNhbGwgY29tcHV0ZWRTdHlsZSBkaXJlY3RseS4KKyAgICBkb2N1bWVudCgpLT51
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBpZiAoUmVuZGVyU3R5
bGUqIHVzZWRTdHlsZSA9IHJlbmRlclN0eWxlKCkpCisgICAgICAgIHJldHVybiB1c2VkU3R5bGUt
PmRpc3BsYXkoKSAhPSBOT05FOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwogU3RyaW5n
IEVsZW1lbnQ6OmlubmVyVGV4dCgpIGNvbnN0CiB7CiAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUg
bGF5b3V0LCBzaW5jZSBwbGFpblRleHQgdXNlcyBsaW5lIGJveGVzIGluIHRoZSByZW5kZXIgdHJl
ZS4KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9FbGVtZW50LmgJKHJldmlzaW9uIDQ2NzgwKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBmb2N1cyhib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbiA9IHRydWUpOwogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rp
b24pOwogICAgIHZvaWQgYmx1cigpOworICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNv
bnN0OwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZpcnR1YWwgdm9pZCBmb3JtYXRGb3JEZWJ1Z2dl
cihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2Rv
bS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24g
NDY3ODApCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYwLDcg
Kzc2MCw4IEBAIGJvb2wgTm9kZTo6cmFyZURhdGFGb2N1c2VkKCkgY29uc3QKICAgICAKIGJvb2wg
Tm9kZTo6aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNSYXJlRGF0YSgpICYm
IHJhcmVEYXRhKCktPnRhYkluZGV4U2V0RXhwbGljaXRseSgpOworICAgIC8vIENhbm5vdCBiZSBm
b2N1c2VkIGlmIG5vdCBpbiBhIGRvY3VtZW50LgorICAgIHJldHVybiBhdHRhY2hlZCgpICYmIGhh
c1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+dGFiSW5kZXhTZXRFeHBsaWNpdGx5KCk7CiB9CiAK
IGJvb2wgTm9kZTo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDQ2ODA2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDgtMDUgIEVyaWsgQXJ2aWRzc29uICA8YXJ2
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUZXN0cyBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI3MDk5CisgICAgICAgIE1ha2UgaGlkZGVuIGVsZW1lbnRzIG5vdCBmb2N1c2FibGUuIFRoaXMg
aXMgaW1wb3J0YW50IGJlY2F1ZSB3ZSBzaG91bGQKKyAgICAgICAgbm90IGFsbG93IHRhYmJpbmcg
dG8gYSBoaWRkZW4gZWxlbWVudC4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL3Jlc291cmNlcy90
YWJpbmRleC1mb2N1cy1ibHVyLWFsbC5qczoKKyAgICAgICAgKHRlc3RQcm9ncmFtbWF0aWNGb2N1
cyk6CisgICAgICAgICogZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRlbi1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4uaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdGFiaW5kZXgtZm9jdXMtYmx1ci1hbGwtZXhwZWN0
ZWQudHh0OgorCiAyMDA5LTA4LTA1ICBTemFibyBDYXJvbCAgPGNhcm9sLnN6YWJvQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4tZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRlbi1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK0xheW91dCB0ZXN0IGZv
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTkKKworRGl2IDAK
K0RpdiAyCitEaXYgNAorUmVzdWx0CisKK1BBU1MgLSBEaXYgMAorUEFTUyAtIERpdiAyCitQQVNT
IC0gRGl2IDMKK1BBU1MgLSBEaXYgNAorUEFTUyAtIERpdiA1CisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQorewor
ICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgZXZlbnRTZW5k
ZXIua2V5RG93bignXHQnKTsKKyAgICB9Cit9OworCitmdW5jdGlvbiBwcmludChzKQoreworICAg
IHZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ByZScpOworICAgIGVsLnRleHRDb250
ZW50ICs9IHMgKyAnXG4nOworfQorCit2YXIgbmV4dFRvRm9jdXMgPSAwOworCitkb2N1bWVudC5h
ZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGZ1bmN0aW9uKGUpIHsKKyAgICB2YXIgZWwgPSBlLnRh
cmdldDsKKyAgICBwcmludCgoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXRhYicpID09IG5leHRUb0Zv
Y3VzID8gJ1BBU1MnIDogJ0ZBSUwnKSArCisgICAgICAgICAgJyAtICcgKyBlbC50ZXh0Q29udGVu
dCk7CisgICAgbmV4dFRvRm9jdXMrKzsKK30sIHRydWUpOworCis8L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorCis8cD5MYXlvdXQgdGVzdCBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5IiB0YWJpbmRleD0tMT5odHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTk8L2E+CisKKzxkaXYgdGFiaW5kZXg9MCBkYXRh
LXRhYj0wPkRpdiAwPC9kaXY+Cis8ZGl2IHRhYmluZGV4PTAgc3R5bGU9ImRpc3BsYXk6bm9uZSI+
RGl2IDE8L2Rpdj4KKzxkaXYgdGFiaW5kZXg9MCBkYXRhLXRhYj0xPkRpdiAyPC9kaXY+Cis8ZGl2
IHRhYmluZGV4PTAgZGF0YS10YWI9MiBzdHlsZT0ib3ZlcmZsb3c6aGlkZGVuO2hlaWdodDowIj5E
aXYgMzwvZGl2PgorPGRpdiB0YWJpbmRleD0wIGRhdGEtdGFiPTM+RGl2IDQ8L2Rpdj4KKzxkaXYg
dGFiaW5kZXg9MCBkYXRhLXRhYj00IHN0eWxlPSJ2aXNpYmlsaXR5OmhpZGRlbiI+RGl2IDU8L2Rp
dj4KKworPHA+UmVzdWx0CisKKzxwcmUgaWQ9b3V0PjwvcHJlPgorCis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiaW5k
ZXgtZm9jdXMtYmx1ci1hbGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0Njc4MCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYmluZGV4LWZvY3VzLWJsdXItYWxsLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSwyICsxLDIgQEAKLTMzNSBmb2N1cyAvIDMzNSBibHVyIGV2ZW50
cyBkaXNhdGNoZWQsIGFuZCBzaG91bGQgYmUgMzM1IC8gMzM1IFBBU1NFRAorMzI5IGZvY3VzIC8g
MzI5IGJsdXIgZXZlbnRzIGRpc2F0Y2hlZCwgYW5kIHNob3VsZCBiZSAzMzUgLyAzMzUgUEFTU0VE
CiBUb3RhbCBvZiAwIGZvY3VzIHRlc3QocykgZmFpbGVkLiBQQVNTRUQKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvdGFiaW5kZXgtZm9j
dXMtYmx1ci1hbGwuanMJKHJldmlzaW9uIDQ2NzgwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvcmVzb3VyY2VzL3RhYmluZGV4LWZvY3VzLWJsdXItYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDMsOCArMTAzLDEwIEBAIGZ1bmN0aW9uIHRlc3RQcm9ncmFtbWF0aWNGb2N1cyhlbGVtKQog
ICAgIGVsc2UgaWYgKHRhZ05hbWVzQWx3YXlzRm9jdXNlZC5maW5kKGVsZW0udGFnTmFtZSkpIC8v
IHNwZWNpYWwgY2FzZSBmb3JtIGVsZW1lbnRzIGFuZCBvdGhlciBjb250cm9scyB0aGF0IGFyZSBh
bHdheXMgZm9jdXNhYmxlCiAgICAgICAgIGVsZW1UaGF0U2hvdWxkRm9jdXMgPSBlbGVtOwogICAg
IAotICAgIGlmIChlbGVtLnRhZ05hbWUgPT0gIklOUFVUIiAmJiBlbGVtLnR5cGUgPT0gImhpZGRl
biIpIC8vIG9idmlvdXNseSBzaW5jZSA8aW5wdXQgdHlwZT1oaWRkZW4+IGlzbid0IHJlbmRlcmVk
LCBpdCBjYW4ndCBiZSBmb2N1c2VkCisgICAgLy8gSGlkZGVuIGVsZW1lbnRzIGFyZSBub3QgZm9j
dXNhYmxlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTkKKyAg
ICBpZiAoZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtKS5kaXNwbGF5
ID09ICJub25lIikKICAgICAgICAgZWxlbVRoYXRTaG91bGRGb2N1cyA9IG51bGw7CisKICAgICBp
ZiAodGFnTmFtZXNUcmFuc2ZlckZvY3VzZWQuZmluZChlbGVtLnRhZ05hbWUpKSB7CiAgICAgICAg
IGVsZW1UaGF0U2hvdWxkRm9jdXMgPSBudWxsOwogICAgICAgICBPS3RvRm9jdXNPdGhlckVsZW1l
bnQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="18322"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34174</attachid>
            <date>2009-08-05 14:09:05 -0700</date>
            <delta_ts>2009-08-25 12:12:27 -0700</delta_ts>
            <desc>Checking renderer() first</desc>
            <filename>tab-hidden.patch</filename>
            <type>text/plain</type>
            <size>6912</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjgwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMDgtMDUgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIGhpZGRlbiBlbGVtZW50cyBub3QgZm9jdXNhYmxlLiBUaGlzIGlzIGltcG9ydGFudCBiZWNh
dWUgd2Ugc2hvdWxkCisgICAgICAgIG5vdCBhbGxvdyB0YWJiaW5nIHRvIGEgaGlkZGVuIGVsZW1l
bnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzA5
OQorCisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4uaHRtbAorCisg
ICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aXNG
b2N1c2FibGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL05vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNGb2N1c2FibGUpOgorCiAyMDA5LTA4LTA1
ICBTemFibyBDYXJvbCAgPGNhcm9sLnN6YWJvQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0Njc4MCkKKysrIFdlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY3LDYgKzEyNjcsMjUgQEAg
dm9pZCBFbGVtZW50OjpibHVyKCkKICAgICB9CiB9CiAKK2Jvb2wgRWxlbWVudDo6aXNGb2N1c2Fi
bGUoKSBjb25zdAoreworICAgIGlmICghTm9kZTo6aXNGb2N1c2FibGUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIC8vIERpc3BsYXkgbm9uZSBlbGVtZW50cyBjYW5ub3QgYmUg
Zm9jdXNlZC4KKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgLy8gU29tZSBlbGVtZW50cyBkbyBub3QgaGF2ZSBhIHJlbmRlcmVyIHNvIHRoZSByZW5k
ZXJlcigpIGNoZWNrIGFib3ZlIGNhbgorICAgIC8vIGdpdmUgZmFsc2UgbmVnYXRpdmVzLiBJbiB0
aG9zZSBjYXNlcyB3ZSBjaGVjayB0aGUgcmVuZGVyU3R5bGUuCisgICAgZG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgCisgICAgaWYgKFJlbmRl
clN0eWxlKiB1c2VkU3R5bGUgPSByZW5kZXJTdHlsZSgpKQorICAgICAgICByZXR1cm4gdXNlZFN0
eWxlLT5kaXNwbGF5KCkgIT0gTk9ORTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIFN0
cmluZyBFbGVtZW50Ojppbm5lclRleHQoKSBjb25zdAogewogICAgIC8vIFdlIG5lZWQgdG8gdXBk
YXRlIGxheW91dCwgc2luY2UgcGxhaW5UZXh0IHVzZXMgbGluZSBib3hlcyBpbiB0aGUgcmVuZGVy
IHRyZWUuCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA0Njc4MCkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZm9jdXMoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24gPSB0cnVlKTsKICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wgcmVzdG9yZVByZXZpb3VzU2Vs
ZWN0aW9uKTsKICAgICB2b2lkIGJsdXIoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUo
KSBjb25zdDsKIAogI2lmbmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIHZvaWQgZm9ybWF0Rm9yRGVi
dWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwpJbmRleDogV2ViQ29y
ZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlz
aW9uIDQ2NzgwKQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2
MCw3ICs3NjAsOCBAQCBib29sIE5vZGU6OnJhcmVEYXRhRm9jdXNlZCgpIGNvbnN0CiAgICAgCiBi
b29sIE5vZGU6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzUmFyZURhdGEo
KSAmJiByYXJlRGF0YSgpLT50YWJJbmRleFNldEV4cGxpY2l0bHkoKTsKKyAgICAvLyBDYW5ub3Qg
YmUgZm9jdXNlZCBpZiBub3QgaW4gYSBkb2N1bWVudC4KKyAgICByZXR1cm4gYXR0YWNoZWQoKSAm
JiBoYXNSYXJlRGF0YSgpICYmIHJhcmVEYXRhKCktPnRhYkluZGV4U2V0RXhwbGljaXRseSgpOwog
fQogCiBib29sIE5vZGU6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA0NjgwNikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDA5LTA4LTA1ICBFcmlrIEFydmlkc3NvbiAg
PGFydkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGVzdHMgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzA5OQorICAgICAgICBNYWtlIGhpZGRlbiBlbGVtZW50cyBub3QgZm9jdXNhYmxlLiBU
aGlzIGlzIGltcG9ydGFudCBiZWNhdWUgd2Ugc2hvdWxkCisgICAgICAgIG5vdCBhbGxvdyB0YWJi
aW5nIHRvIGEgaGlkZGVuIGVsZW1lbnQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9yZXNvdXJj
ZXMvdGFiaW5kZXgtZm9jdXMtYmx1ci1hbGwuanM6CisgICAgICAgICh0ZXN0UHJvZ3JhbW1hdGlj
Rm9jdXMpOgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4tZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYmluZGV4LWZvY3VzLWJsdXItYWxsLWV4
cGVjdGVkLnR4dDoKKwogMjAwOS0wOC0wNSAgU3phYm8gQ2Fyb2wgIDxjYXJvbC5zemFib0Bub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRk
ZW4tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACitMYXlvdXQgdGVz
dCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5CisKK0Rp
diAwCitEaXYgMgorRGl2IDQKK1Jlc3VsdAorCitQQVNTIC0gRGl2IDAKK1BBU1MgLSBEaXYgMgor
UEFTUyAtIERpdiAzCitQQVNTIC0gRGl2IDQKK1BBU1MgLSBEaXYgNQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRlbi5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRlbi5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKword2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkK
K3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgICAgIGV2ZW50
U2VuZGVyLmtleURvd24oJ1x0Jyk7CisgICAgfQorfTsKKworZnVuY3Rpb24gcHJpbnQocykKK3sK
KyAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwcmUnKTsKKyAgICBlbC50ZXh0
Q29udGVudCArPSBzICsgJ1xuJzsKK30KKwordmFyIG5leHRUb0ZvY3VzID0gMDsKKworZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBmdW5jdGlvbihlKSB7CisgICAgdmFyIGVsID0g
ZS50YXJnZXQ7CisgICAgcHJpbnQoKGVsLmdldEF0dHJpYnV0ZSgnZGF0YS10YWInKSA9PSBuZXh0
VG9Gb2N1cyA/ICdQQVNTJyA6ICdGQUlMJykgKworICAgICAgICAgICcgLSAnICsgZWwudGV4dENv
bnRlbnQpOworICAgIG5leHRUb0ZvY3VzKys7Cit9LCB0cnVlKTsKKworPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKworPHA+TGF5b3V0IHRlc3QgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzA5OSIgdGFiaW5kZXg9LTE+aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5PC9hPgorCis8ZGl2IHRhYmluZGV4PTAg
ZGF0YS10YWI9MD5EaXYgMDwvZGl2PgorPGRpdiB0YWJpbmRleD0wIHN0eWxlPSJkaXNwbGF5Om5v
bmUiPkRpdiAxPC9kaXY+Cis8ZGl2IHRhYmluZGV4PTAgZGF0YS10YWI9MT5EaXYgMjwvZGl2Pgor
PGRpdiB0YWJpbmRleD0wIGRhdGEtdGFiPTIgc3R5bGU9Im92ZXJmbG93OmhpZGRlbjtoZWlnaHQ6
MCI+RGl2IDM8L2Rpdj4KKzxkaXYgdGFiaW5kZXg9MCBkYXRhLXRhYj0zPkRpdiA0PC9kaXY+Cis8
ZGl2IHRhYmluZGV4PTAgZGF0YS10YWI9NCBzdHlsZT0idmlzaWJpbGl0eTpoaWRkZW4iPkRpdiA1
PC9kaXY+CisKKzxwPlJlc3VsdAorCis8cHJlIGlkPW91dD48L3ByZT4KKworPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiaW5kZXgtZm9jdXMtYmx1ci1h
bGwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Rh
YmluZGV4LWZvY3VzLWJsdXItYWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDY3ODApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbC1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMiArMSwyIEBACi0zMzUgZm9jdXMgLyAzMzUgYmx1ciBl
dmVudHMgZGlzYXRjaGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMzNSBQQVNTRUQKKzMyOSBmb2N1
cyAvIDMyOSBibHVyIGV2ZW50cyBkaXNhdGNoZWQsIGFuZCBzaG91bGQgYmUgMzM1IC8gMzM1IFBB
U1NFRAogVG90YWwgb2YgMCBmb2N1cyB0ZXN0KHMpIGZhaWxlZC4gUEFTU0VECkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMvdGFiaW5kZXgtZm9jdXMtYmx1ci1hbGwuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL3RhYmluZGV4
LWZvY3VzLWJsdXItYWxsLmpzCShyZXZpc2lvbiA0Njc4MCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3Jlc291cmNlcy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbC5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDggKzEwMywxMCBAQCBmdW5jdGlvbiB0ZXN0UHJvZ3JhbW1hdGljRm9jdXMoZWxl
bSkKICAgICBlbHNlIGlmICh0YWdOYW1lc0Fsd2F5c0ZvY3VzZWQuZmluZChlbGVtLnRhZ05hbWUp
KSAvLyBzcGVjaWFsIGNhc2UgZm9ybSBlbGVtZW50cyBhbmQgb3RoZXIgY29udHJvbHMgdGhhdCBh
cmUgYWx3YXlzIGZvY3VzYWJsZQogICAgICAgICBlbGVtVGhhdFNob3VsZEZvY3VzID0gZWxlbTsK
ICAgICAKLSAgICBpZiAoZWxlbS50YWdOYW1lID09ICJJTlBVVCIgJiYgZWxlbS50eXBlID09ICJo
aWRkZW4iKSAvLyBvYnZpb3VzbHkgc2luY2UgPGlucHV0IHR5cGU9aGlkZGVuPiBpc24ndCByZW5k
ZXJlZCwgaXQgY2FuJ3QgYmUgZm9jdXNlZAorICAgIC8vIEhpZGRlbiBlbGVtZW50cyBhcmUgbm90
IGZvY3VzYWJsZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5
CisgICAgaWYgKGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSkuZGlz
cGxheSA9PSAibm9uZSIpCiAgICAgICAgIGVsZW1UaGF0U2hvdWxkRm9jdXMgPSBudWxsOworCiAg
ICAgaWYgKHRhZ05hbWVzVHJhbnNmZXJGb2N1c2VkLmZpbmQoZWxlbS50YWdOYW1lKSkgewogICAg
ICAgICBlbGVtVGhhdFNob3VsZEZvY3VzID0gbnVsbDsKICAgICAgICAgT0t0b0ZvY3VzT3RoZXJF
bGVtZW50ID0gdHJ1ZTsK
</data>
<flag name="review"
          id="18331"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>38561</attachid>
            <date>2009-08-25 12:12:27 -0700</date>
            <delta_ts>2009-08-25 13:56:25 -0700</delta_ts>
            <desc>Handle the basic hidden case in Node::isFocusable</desc>
            <filename>tab-hidden.patch</filename>
            <type>application/octet-stream</type>
            <size>27198</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDktMDgtMjUgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIGhpZGRlbiBlbGVtZW50cyBub3QgZm9jdXNhYmxlLgorCisgICAgICAgIENsZWFuIHVwIHN1
cHBvcnRzRm9jdXMgYW5kIGlzRm9jdXNhYmxlLgorICAgICAgICBzdXBwb3J0c0ZvY3VzIG5vdyBz
dHJpY3RseSBtZWFucyB0aGF0IHRoZSBub2RlIGNhbiBiZSBmb2N1c2VkIGJ5IGRlZmF1bHQuCisg
ICAgICAgIFRoaXMgaXMgdHJ1ZSBmb3IgbGlua3MsIGZvcm0gY29udHJvbHMgYW5kIGNvbnRlbnQg
ZWRpdGFibGUgZWxlbWVudHMgZm9yIGV4YW1wbGUuCisgICAgICAgIGlzRm9jdXNhYmxlIG1lYW5z
IHRoYXQgdGhlIHVzZXIgY2FuIGFjdHVhbGx5IGZvY3VzIGl0LgorICAgICAgICBBbGwgKDIpIGNh
bGxzIHRvIHN1cHBvcnRzRm9jdXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGlzIGludG8g
YWNjb3VudC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjcwOTkKKworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0
bWwKKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmZvY3VzKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRm9jdXNhYmxl
KToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnN1cHBvcnRzRm9j
dXMpOgorICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ6
OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAqIGh0bWwvSFRNTEFyZWFFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVu
dDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RmllbGRTZXRFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNGb2N1
cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0ZvY3VzYWJs
ZSk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgICog
aHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oOgorICAgICAgICAqIGh0bWwvSFRNTExlZ2VuZEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQ6OnN1cHBvcnRz
Rm9jdXMpOgorICAgICAgICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdEdy
b3VwRWxlbWVudDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0R3Jv
dXBFbGVtZW50Ojppc0ZvY3VzYWJsZSk6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVt
ZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6aXNGb2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyk6CisgICAgICAg
ICogc3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50Ojpz
dXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50Ojppc0ZvY3VzYWJs
ZSk6CisgICAgICAgICogd21sL1dNTEFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldN
TEFFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKiB3bWwvV01MQUVsZW1lbnQuaDoK
KyAgICAgICAgKiB3bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldNTEZvcm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJD
b3JlOjpXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxlKToKKyAgICAgICAgKiB3bWwv
V01MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisKIDIwMDktMDgtMjUgIERhbiBCZXJuc3RlaW4gIDxt
aXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCklu
ZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIyMSwxNCArMTIyMSwyNiBAQCB2b2lkIEVsZW1lbnQ6OmZvY3Vz
KGJvb2wgcmVzdG9yZVByZXZpb3VzCiAgICAgaWYgKGRvYy0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlz
KQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwotICAgIAogICAgIGlmICghc3VwcG9ydHNGb2N1cygpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgCisKKyAgICAvLyBJZiBpdCBzdXBwb3J0cyBmb2N1cyBidXQgdGhlIHN0eWxl
c2hlZXRzIGhhdmUgbm90IGxvYWRlZCB3ZSBjb250aW51ZSBzbworICAgIC8vIHdlIGNhbiBzZXQg
dGhlIHRoZSBmb2N1c2VkIG5vZGUgdG8gYmUgaGFuZGxlZCBsYXRlciB3aGVuIHdlIGhhdmUgdGhl
CisgICAgLy8gc3R5bGVoc2VldHMgbG9hZGVkLgorICAgIGlmIChkb2MtPmhhdmVTdHlsZXNoZWV0
c0xvYWRlZCgpKSB7CisgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CisgICAgICAgIGlmICghaXNGb2N1c2FibGUoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBpZiAoUGFnZSogcGFnZSA9IGRvYy0+cGFnZSgpKQogICAgICAgICBw
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUodGhpcywgZG9jLT5mcmFtZSgp
KTsKIAorICAgIC8vIFNldHRpbmcgdGhlIGZvY3VzZWQgbm9kZSBhYm92ZSBtaWdodCBoYXZlIGNh
dXNlZCBzaWRlIGVmZmVjdHMgbGlrZQorICAgIC8vIHJlcXVpcmluZyB0aGUgbGF5b3V0IHRvIHVw
ZGF0ZSBvciBtYWRlIHRoZSBub2RlIHRvIG5vIGxvbmdlciBiZQorICAgIC8vIGZvY3VzYWJsZS4K
KyAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCiAgICAg
aWYgKCFpc0ZvY3VzYWJsZSgpKSB7CiAgICAgICAgIGVuc3VyZVJhcmVEYXRhKCktPnNldE5lZWRz
Rm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKHRydWUpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODI4LDEwICs4MjgsMjMgQEAgYm9vbCBOb2RlOjpyYXJlRGF0YUZvY3Vz
ZWQoKSBjb25zdAogICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKICAgICByZXR1cm4gcmFyZURh
dGEoKS0+aXNGb2N1c2VkKCk7CiB9CisKK2Jvb2wgTm9kZTo6c3VwcG9ydHNGb2N1cygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+dGFiSW5kZXhTZXRF
eHBsaWNpdGx5KCk7Cit9CiAgICAgCiBib29sIE5vZGU6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiByYXJlRGF0YSgpLT50YWJJbmRleFNldEV4cGxp
Y2l0bHkoKTsKKyAgICBpZiAoIWluRG9jdW1lbnQoKSB8fCAhc3VwcG9ydHNGb2N1cygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRklYTUU6IEV2ZW4gaWYgd2UgYXJlIG5v
dCB2aXNpYmxlLCB3ZSBtaWdodCBoYXZlIGEgY2hpbGQgdGhhdCBpcyB2aXNpYmxlLgorICAgIC8v
IERhdmUgd2FudHMgdG8gZml4IHRoYXQgc29tZSBkYXkgd2l0aCBhICJoYXMgdmlzaWJsZSBjb250
ZW50IiBmbGFnIG9yIHRoZSBsaWtlLgorICAgIGlmICghcmVuZGVyZXIoKSB8fCByZW5kZXJlcigp
LT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgTm9kZTo6aXNLZXlib2FyZEZvY3VzYWJs
ZShLZXlib2FyZEV2ZW50KikgY29uc3QKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9k
b20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsMTAgKzI4NywxMCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHNob3J0IHRhYkluZGV4KCkgY29uc3Q7CiAKLSAgICAvKioKLSAgICAgKiBX
aGV0aGVyIHRoaXMgbm9kZSBjYW4gcmVjZWl2ZSB0aGUga2V5Ym9hcmQgZm9jdXMuCi0gICAgICov
Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdCB7IHJldHVybiBpc0ZvY3Vz
YWJsZSgpOyB9CisgICAgLy8gV2hldGhlciB0aGlzIGtpbmQgb2Ygbm9kZSBjYW4gcmVjZWl2ZSBm
b2N1cyBieSBkZWZhdWx0LiBNb3N0IG5vZGVzIGFyZQorICAgIC8vIG5vdCBmb2N1c2FibGUgYnV0
IHNvbWUgZWxlbWVudHMsIHN1Y2ggYXMgZm9ybSBjb250cm9scyBhbmQgbGlua3MgYXJlLgorICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CisgICAgLy8gV2hldGhlciB0aGUg
bm9kZSBjYW4gYWN0dWFsbHkgYmUgZm9jdXNlZC4KICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2Fi
bGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2Fy
ZEV2ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25z
dDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MCwyMCArNjAsOCBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgCiB7
CiAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBIVE1MRWxlbWVu
dDo6c3VwcG9ydHNGb2N1cygpOwotICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpIHx8IChpc0xpbmso
KSAmJiBkb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7
Ci19Ci0KLWJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKLXsKLSAg
ICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojpp
c0ZvY3VzYWJsZSgpOwotCi0gICAgLy8gRklYTUU6IEV2ZW4gaWYgd2UgYXJlIG5vdCB2aXNpYmxl
LCB3ZSBtaWdodCBoYXZlIGEgY2hpbGQgdGhhdCBpcyB2aXNpYmxlLgotICAgIC8vIERhdmUgd2Fu
dHMgdG8gZml4IHRoYXQgc29tZSBkYXkgd2l0aCBhICJoYXMgdmlzaWJsZSBjb250ZW50IiBmbGFn
IG9yIHRoZSBsaWtlLgotICAgIGlmICghKGlzTGluaygpICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVy
ZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBJZiBub3QgYSBsaW5rIHdlIHNob3Vs
ZCBzdGlsbCBiZSBhYmxlIHRvIGZvY3VzIHRoZSBlbGVtZW50IGlmIGl0IGhhcyB0YWJJbmRleC4K
KyAgICByZXR1cm4gaXNMaW5rKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKIH0K
IAogYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNiBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNL
ZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlKGJvb2wgYWN0aXZlID0gdHJ1
ZSwgYm9vbCBwYXVzZSA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9u
KGJvb2wgZnVsbEFjdGlvbik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkocmV2aXNp
b24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTYyLDkgKzE2MiwxMCBAQCB2b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0Tm9IcmVm
KGJvb2wgbm9ICiAgICAgc2V0QXR0cmlidXRlKG5vaHJlZkF0dHIsIG5vSHJlZiA/ICIiIDogMCk7
CiB9CiAKLWJvb2wgSFRNTEFyZWFFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Citib29sIEhU
TUxBcmVhRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEhUTUxF
bGVtZW50Ojppc0ZvY3VzYWJsZSgpOworICAgIC8vIFNraXAgSFRNTEFuY2hvckVsZW1lbnRzIGlz
TGluaygpIGNoZWNrLgorICAgIHJldHVybiBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwog
fQogCiBTdHJpbmcgSFRNTEFyZWFFbGVtZW50Ojp0YXJnZXQoKSBjb25zdApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxBcmVhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
QXJlYUVsZW1lbnQuaAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFyZWFF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBU
YWdTdGF0dXNGb3JiaWRkZW47IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlKik7Ci0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmlu
ZyB0YXJnZXQoKSBjb25zdDsKIAogICAgIGVudW0gU2hhcGUgeyBEZWZhdWx0LCBQb2x5LCBSZWN0
LCBDaXJjbGUsIFVua25vd24gfTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNDc3
NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MDEsOSArNjAxLDkgQEAgdm9pZCBIVE1MRWxlbWVudDo6YWRkSFRNTEFsaWdubWVudFRvU3R5bAog
ICAgICAgICBlbGVtZW50LT5hZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eVZlcnRpY2Fs
QWxpZ24sIHZlcnRpY2FsQWxpZ25WYWx1ZSk7CiB9CiAKLWJvb2wgSFRNTEVsZW1lbnQ6OmlzRm9j
dXNhYmxlKCkgY29uc3QKK2Jvb2wgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAog
ewotICAgIHJldHVybiBFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIHx8IChpc0NvbnRlbnRFZGl0YWJs
ZSgpICYmIHBhcmVudCgpICYmICFwYXJlbnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSk7CisgICAg
cmV0dXJuIEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSB8fCAoaXNDb250ZW50RWRpdGFibGUoKSAm
JiBwYXJlbnQoKSAmJiAhcGFyZW50KCktPmlzQ29udGVudEVkaXRhYmxlKCkpOwogfQogCiBib29s
IEhUTUxFbGVtZW50Ojppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmgJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDYgKzU2LDggQEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0QWRqYWNl
bnRIVE1MKGNvbnN0IFN0cmluZyYgd2hlcmUsIGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZvaWQgaW5zZXJ0QWRqYWNlbnRUZXh0KGNvbnN0IFN0cmluZyYgd2hlcmUs
IGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50
RWRpdGFibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50UmljaGx5RWRpdGFi
bGUoKSBjb25zdDsKIApAQCAtODcsOCArODksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBi
b29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJs
ZSgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZChOb2RlKiBuZXdDaGls
ZCk7IC8vIEVycm9yLWNoZWNraW5nIGR1cmluZyBwYXJzaW5nIHRoYXQgY2hlY2tzIHRoZSBEVEQK
IAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0aGUgRFREIGZvciBhIGdpdmVuIGNo
aWxkIG5vZGUuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCShyZXZpc2lv
biA0Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCBib29sIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNoZWNr
RFREKGNvbnN0CiAgICAgcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykgfHwg
SFRNTEVsZW1lbnQ6OmNoZWNrRFREKG5ld0NoaWxkKTsKIH0KIAotYm9vbCBIVE1MRmllbGRTZXRF
bGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Citib29sIEhUTUxGaWVsZFNldEVsZW1lbnQ6OnN1
cHBvcnRzRm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNGb2N1c2Fi
bGUoKTsKKyAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKIH0KIAogY29u
c3QgQXRvbWljU3RyaW5nJiBIVE1MRmllbGRTZXRFbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBj
b25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCShyZXZpc2lvbiA0Nzc1MCkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gMzsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBu
ZXdDaGlsZCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OwogICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAgICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwogCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzc1MCkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMyLDEzICsyMzIsMTkgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWNh
bGNTdHlsZQogICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCiti
b29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAoreworICAg
IHJldHVybiAhZGlzYWJsZWQoKTsKK30KKwogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpp
c0ZvY3VzYWJsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKGRpc2FibGVkKCkgfHwgIXJlbmRlcmVyKCkg
fHwgCi0gICAgICAgIChyZW5kZXJlcigpLT5zdHlsZSgpICYmIHJlbmRlcmVyKCktPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB8fCAKKyAgICBpZiAoIXJlbmRlcmVyKCkgfHwgCiAg
ICAgICAgICFyZW5kZXJlcigpLT5pc0JveCgpIHx8IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5z
aXplKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgLy8gSFRNTEVsZW1lbnQ6OmlzRm9jdXNhYmxlIGhhbmRsZXMgdmlzaWJpbGl0eSBhbmQg
Y2FsbHMgc3Vwb3J0c0ZvY3VzIHdoaWNoCisgICAgLy8gd2lsbCBjb3ZlciB0aGUgZGlzYWJsZWQg
Y2FzZS4KKyAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCk7CiB9CiAKIGJvb2wg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50
KiBldmVudCkgY29uc3QKQEAgLTMwNCwxMSArMzEwLDYgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpkaXNwYXRjaEJsdQogICAgIEhUTUxFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgp
OwogfQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25z
dAotewotICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpIHx8ICghZGlzYWJsZWQoKSAmJiAhZG9jdW1l
bnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpOwotfQotCiBIVE1MRm9ybUVsZW1lbnQqIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9mb3JtOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lv
biA0Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMiw5ICsyMTIsOSBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpz
ZXRMb2NhdGlvbihjCiAgICAgICAgIG9wZW5VUkwoKTsKIH0KIAotYm9vbCBIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6aXNGb2N1c2FibGUoKSBjb25zdAorYm9vbCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6
c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCk7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldEZvY3VzKGJvb2wg
cmVjZWl2ZWQpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaAkocmV2aXNpb24g
NDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBjYW5MYXp5QXR0YWNoKCkgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9v
bCBpc0ZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOwogICAgIAogICAgIHZpcnR1
YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxMZWdlbmRFbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRN
TExlZ2VuZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0Miw5IEBAIEhUTUxM
ZWdlbmRFbGVtZW50Ojp+SFRNTExlZ2VuZEVsZW1lbnQoKQogewogfQogCi1ib29sIEhUTUxMZWdl
bmRFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Citib29sIEhUTUxMZWdlbmRFbGVtZW50Ojpz
dXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzRm9jdXNh
YmxlKCk7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCk7CiB9CiAKIGNv
bnN0IEF0b21pY1N0cmluZyYgSFRNTExlZ2VuZEVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNv
bnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaAkocmV2aXNpb24gNDc3NTApCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNyBAQCBwdWJsaWM6CiAgICAgSFRNTExlZ2VuZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwogICAgIHZpcnR1YWwgfkhUTUxM
ZWdlbmRFbGVtZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OwogICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7CiAKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCwx
NSBAQCBIVE1MT3B0R3JvdXBFbGVtZW50OjpIVE1MT3B0R3JvdXBFbGVtZW50CiAgICAgQVNTRVJU
KGhhc1RhZ05hbWUob3B0Z3JvdXBUYWcpKTsKIH0KIAorYm9vbCBIVE1MT3B0R3JvdXBFbGVtZW50
OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnN1cHBv
cnRzRm9jdXMoKTsKK30KKwogYm9vbCBIVE1MT3B0R3JvdXBFbGVtZW50Ojppc0ZvY3VzYWJsZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOworICAgIC8v
IE9wdGdyb3VwIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGEgcmVuZGVyZXIgc28gd2UgY2hlY2sgdGhl
IHJlbmRlclN0eWxlIGluc3RlYWQuCisgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoKSAmJiByZW5k
ZXJTdHlsZSgpICYmIHJlbmRlclN0eWxlKCktPmRpc3BsYXkoKSAhPSBOT05FOwogfQogCiBjb25z
dCBBdG9taWNTdHJpbmcmIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNv
bnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmgJKHJldmlzaW9uIDQ3NzUwKQor
KysgV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3Qg
Tm9kZSopOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVy
ZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsOSArNjYsMTUgQEAgdm9p
ZCBIVE1MT3B0aW9uRWxlbWVudDo6ZGV0YWNoKCkKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpkZXRhY2goKTsKIH0KIAorYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6c3VwcG9ydHNGb2N1cygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCk7Cit9CisK
IGJvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gSFRNTEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCk7CisgICAgLy8gT3B0aW9uIGVsZW1lbnRzIGRv
IG5vdCBoYXZlIGEgcmVuZGVyZXIgc28gd2UgY2hlY2sgdGhlIHJlbmRlclN0eWxlIGluc3RlYWQu
CisgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoKSAmJiByZW5kZXJTdHlsZSgpICYmIHJlbmRlclN0
eWxlKCktPmRpc3BsYXkoKSAhPSBOT05FOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxP
cHRpb25FbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRp
b25FbGVtZW50LmgJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxPcHRpb25F
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c09wdGlvbmFsOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAyOyB9CiAgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0No
aWxkKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklz
TmVlZGVkKFJlbmRlclN0eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoKCk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNDc3NTAp
CisrKyBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ2LDYgKzE0Niw4IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXMoRm9jdXMK
ICAgICBpZiAoY2FyZXRCcm93c2luZyAmJiAhY3VycmVudE5vZGUpCiAgICAgICAgIGN1cnJlbnRO
b2RlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKTsKIAorICAgIGRvY3VtZW50
LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKwogICAgIE5vZGUqIG5v
ZGUgPSAoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRm9yd2FyZCkKICAgICAgICAgPyBkb2N1
bWVudC0+bmV4dEZvY3VzYWJsZU5vZGUoY3VycmVudE5vZGUsIGV2ZW50KQogICAgICAgICA6IGRv
Y3VtZW50LT5wcmV2aW91c0ZvY3VzYWJsZU5vZGUoY3VycmVudE5vZGUsIGV2ZW50KTsKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdBRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9zdmcvU1ZHQUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsMjAgKzE2NSwxNSBAQCBib29sIFNWR0FFbGVt
ZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKICAgICBpZiAoaXNDb250ZW50RWRpdGFibGUo
KSkKICAgICAgICAgcmV0dXJuIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpzdXBwb3J0
c0ZvY3VzKCk7Ci0gICAgcmV0dXJuIGlzRm9jdXNhYmxlKCkgfHwgKGRvY3VtZW50KCkgJiYgIWRv
Y3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogYm9vbCBTVkdBRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIGlmIChpc0Nv
bnRlbnRFZGl0YWJsZSgpKQotICAgICAgICByZXR1cm4gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OmlzRm9jdXNhYmxlKCk7Ci0gICAgCi0gICAgLy8gRklYTUU6IEV2ZW4gaWYgd2UgYXJl
IG5vdCB2aXNpYmxlLCB3ZSBtaWdodCBoYXZlIGEgY2hpbGQgdGhhdCBpcyB2aXNpYmxlLgotICAg
IC8vIERhdmUgd2FudHMgdG8gZml4IHRoYXQgc29tZSBkYXkgd2l0aCBhICJoYXMgdmlzaWJsZSBj
b250ZW50IiBmbGFnIG9yIHRoZSBsaWtlLgotICAgIGlmICghcmVuZGVyZXIoKSB8fCAhKHJlbmRl
cmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSkKKyAgICBpZiAocmVuZGVy
ZXIoKSAmJiByZW5kZXJlcigpLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICByZXR1cm4gIXJlbmRlcmVyKCkt
PmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gU1ZH
RWxlbWVudDo6aXNGb2N1c2FibGUoKTsKIH0KIAogYm9vbCBTVkdBRWxlbWVudDo6aXNNb3VzZUZv
Y3VzYWJsZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS93bWwvV01MQUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzc1MCkKKysr
IFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTcgKzcz
LDcgQEAgdm9pZCBXTUxBRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTQogCiBib29sIFdN
TEFFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNGb2N1c2Fi
bGUoKSB8fCAoaXNMaW5rKCkgJiYgZG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+aGF2ZVN0eWxl
c2hlZXRzTG9hZGVkKCkpOwotfQotCi1ib29sIFdNTEFFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNv
bnN0Ci17Ci0gICAgLy8gRklYTUU6IEV2ZW4gaWYgd2UgYXJlIG5vdCB2aXNpYmxlLCB3ZSBtaWdo
dCBoYXZlIGEgY2hpbGQgdGhhdCBpcyB2aXNpYmxlLgotICAgIC8vIERhdmUgd2FudHMgdG8gZml4
IHRoYXQgc29tZSBkYXkgd2l0aCBhICJoYXMgdmlzaWJsZSBjb250ZW50IiBmbGFnIG9yIHRoZSBs
aWtlLgotICAgIGlmICghKGlzTGluaygpICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5
bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaXNMaW5rKCk7CiB9CiAKIGJvb2wgV01MQUVs
ZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdApJbmRleDogV2ViQ29yZS93bWwvV01MQUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5oCShyZXZpc2lv
biA0Nzc1MCkKKysrIFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDYgQEAgcHVibGljOgogICAgIFdNTEFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1
cygpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
S2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OwogCkluZGV4OiBXZWJDb3Jl
L3dtbC9XTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21s
L1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS93
bWwvV01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzks
MTEgQEAgV01MRm9ybUNvbnRyb2xFbGVtZW50Ojp+V01MRm9ybUNvbnRyb2xFbAogewogfQogCiti
b29sIFdNTEZvcm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIGJvb2wgV01MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0ZvY3VzYWJs
ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5pc0JveCgp
KQpAQCAtNDYsMTQgKzUxLDEwIEBAIGJvb2wgV01MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0ZvY3Vz
YWJsZSgKIAogICAgIGlmICh0b1JlbmRlckJveChyZW5kZXJlcigpKS0+c2l6ZSgpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9
IHJlbmRlcmVyKCktPnN0eWxlKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLT52aXNpYmlsaXR5KCkg
IT0gVklTSUJMRSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gV01MRWxlbWVudDo6aXNGb2N1c2FibGUoKTsKIH0K
KyAgICAKIAogdm9pZCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCgpCiB7CkluZGV4OiBX
ZWJDb3JlL3dtbC9XTUxGb3JtQ29udHJvbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3dtbC9XTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3Jl
L3dtbC9XTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiID0gdHJ1
ZSkgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gYjsgfQogCisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRm9jdXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NzUw
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMDktMDgtMjUgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBmb3IgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5CisgICAgICAgIE1ha2Ug
aGlkZGVuIGVsZW1lbnRzIG5vdCBmb2N1c2FibGUuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1ZSB3
ZSBzaG91bGQKKyAgICAgICAgbm90IGFsbG93IHRhYmJpbmcgdG8gYSBoaWRkZW4gZWxlbWVudC4K
KworICAgICAgICAqIGZhc3QvZXZlbnRzL3Jlc291cmNlcy90YWJpbmRleC1mb2N1cy1ibHVyLWFs
bC5qczoKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAodGVzdFByb2dyYW1tYXRpY0ZvY3VzKToK
KyAgICAgICAgKiBmYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRlbi5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2V2ZW50cy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbC1leHBlY3RlZC50
eHQ6CisKIDIwMDktMDgtMjUgIFJlbmF0YSBIb2RvdmFuICA8aG9kb3Zhbi5yZW5hdGFAc3R1ZC51
LXN6ZWdlZC5odT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0LgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRlbi1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRlbi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9j
dXMtaGlkZGVuLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorTGF5
b3V0IHRlc3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzA5
OQorCitEaXYgMAorRGl2IDIKK0RpdiA1CitSZXN1bHQKKworUEFTUyAtIERpdiAwCitQQVNTIC0g
RGl2IDIKK1BBU1MgLSBEaXYgMworUEFTUyAtIERpdiA1CisKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQoreworICAg
IGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgZXZlbnRTZW5kZXIu
a2V5RG93bignXHQnKTsKKyAgICB9Cit9OworCitmdW5jdGlvbiBwcmludChzKQoreworICAgIHZh
ciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ByZScpOworICAgIGVsLnRleHRDb250ZW50
ICs9IHMgKyAnXG4nOworfQorCit2YXIgbmV4dFRvRm9jdXMgPSAwOworCitkb2N1bWVudC5hZGRF
dmVudExpc3RlbmVyKCdmb2N1cycsIGZ1bmN0aW9uKGUpIHsKKyAgICB2YXIgZWwgPSBlLnRhcmdl
dDsKKyAgICBwcmludCgoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXRhYicpID09IG5leHRUb0ZvY3Vz
ID8gJ1BBU1MnIDogJ0ZBSUwnKSArCisgICAgICAgICAgJyAtICcgKyBlbC50ZXh0Q29udGVudCk7
CisgICAgbmV4dFRvRm9jdXMrKzsKK30sIHRydWUpOworCis8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorCis8cD5MYXlvdXQgdGVzdCBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI3MDk5IiB0YWJpbmRleD0tMT5odHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTk8L2E+CisKKzxkaXYgdGFiaW5kZXg9MCBkYXRhLXRh
Yj0wPkRpdiAwPC9kaXY+Cis8ZGl2IHRhYmluZGV4PTAgc3R5bGU9ImRpc3BsYXk6bm9uZSI+RGl2
IDE8L2Rpdj4KKzxkaXYgdGFiaW5kZXg9MCBkYXRhLXRhYj0xPkRpdiAyPC9kaXY+Cis8ZGl2IHRh
YmluZGV4PTAgZGF0YS10YWI9MiBzdHlsZT0ib3ZlcmZsb3c6aGlkZGVuO2hlaWdodDowIj5EaXYg
MzwvZGl2PgorPGRpdiB0YWJpbmRleD0wIHN0eWxlPSJ2aXNpYmlsaXR5OmhpZGRlbiI+RGl2IDQ8
L2Rpdj4KKzxkaXYgdGFiaW5kZXg9MCBkYXRhLXRhYj0zPkRpdiA1PC9kaXY+CisKKzxwPlJlc3Vs
dAorCis8cHJlIGlkPW91dD48L3ByZT4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvdGFiaW5kZXgtZm9jdXMtYmx1ci1hbGwtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYmluZGV4LWZvY3VzLWJsdXIt
YWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDc3NTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEsMiArMSwyIEBACi0zMzUgZm9jdXMgLyAzMzUgYmx1ciBldmVudHMgZGlzYXRjaGVkLCBh
bmQgc2hvdWxkIGJlIDMzNSAvIDMzNSBQQVNTRUQKKzMyOSBmb2N1cyAvIDMyOSBibHVyIGV2ZW50
cyBkaXNwYXRjaGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMzNSBQQVNTRUQKIFRvdGFsIG9mIDAg
Zm9jdXMgdGVzdChzKSBmYWlsZWQuIFBBU1NFRApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvcmVzb3VyY2VzL3RhYmluZGV4LWZvY3VzLWJsdXItYWxsLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbC5q
cwkocmV2aXNpb24gNDc3NTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJjZXMv
dGFiaW5kZXgtZm9jdXMtYmx1ci1hbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDcg
QEAgdmFyIHRhZ05hbWVzQWx3YXlzRm9jdXNlZCA9IFsiQSIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJTRUxFQ1QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVEVYVEFS
RUEiXTsKIAotdmFyIHRhZ05hbWVzVHJhbnNmZXJGb2N1c2VkID0gWyJMQUJFTCJdOyAvLyBsYWJs
ZXMgYWx3YXlzIHRyYW5zZmVyIGZvY3VzIHRvIHRoZSBsYWJlbGVkIGVsZW1lbnQKK3ZhciB0YWdO
YW1lc1RyYW5zZmVyRm9jdXNlZCA9IFsiTEFCRUwiXTsgLy8gbGFiZWxzIGFsd2F5cyB0cmFuc2Zl
ciBmb2N1cyB0byB0aGUgbGFiZWxlZCBlbGVtZW50CiAKIGZ1bmN0aW9uIHByaW50VG9Db25zb2xl
KHN0cikKIHsKQEAgLTQ5LDcgKzQ5LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgdmFyIGhvbWVC
YXNlID0gd2luZG93LmZyYW1lc1sxXS5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdo
b21lYmFzZScpOwogICAgIGhvbWVCYXNlWzBdLmZvY3VzKCk7CiAKLSAgICB2YXIgcmVzdWx0U3Vt
bWFyeSA9IGZvY3VzQ291bnQrIiBmb2N1cyAvICIrYmx1ckNvdW50KyIgYmx1ciBldmVudHMgZGlz
YXRjaGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMzNSAiOworICAgIHZhciByZXN1bHRTdW1tYXJ5
ID0gZm9jdXNDb3VudCsiIGZvY3VzIC8gIitibHVyQ291bnQrIiBibHVyIGV2ZW50cyBkaXNwYXRj
aGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMzNSAiOwogICAgIHJlc3VsdFN1bW1hcnkgKz0gKGZv
Y3VzQ291bnQ9PWJsdXJDb3VudCkgPyAiPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz5QQVNTRUQ8
L3NwYW4+PGJyPiIgOiAiPHNwYW4gc3R5bGU9J2NvbG9yOnJlZCc+RkFJTEVEPC9zcGFuPjxicj4i
OwogICAgIHJlc3VsdFN1bW1hcnkgKz0gIlRvdGFsIG9mICIrZmFpbGVkVGVzdENvdW50KyIgZm9j
dXMgdGVzdChzKSBmYWlsZWQuIjsKICAgICBpZiAoZmFpbGVkVGVzdENvdW50KQpAQCAtMTAzLDgg
KzEwMywxMCBAQCBmdW5jdGlvbiB0ZXN0UHJvZ3JhbW1hdGljRm9jdXMoZWxlbSkKICAgICBlbHNl
IGlmICh0YWdOYW1lc0Fsd2F5c0ZvY3VzZWQuZmluZChlbGVtLnRhZ05hbWUpKSAvLyBzcGVjaWFs
IGNhc2UgZm9ybSBlbGVtZW50cyBhbmQgb3RoZXIgY29udHJvbHMgdGhhdCBhcmUgYWx3YXlzIGZv
Y3VzYWJsZQogICAgICAgICBlbGVtVGhhdFNob3VsZEZvY3VzID0gZWxlbTsKICAgICAKLSAgICBp
ZiAoZWxlbS50YWdOYW1lID09ICJJTlBVVCIgJiYgZWxlbS50eXBlID09ICJoaWRkZW4iKSAvLyBv
YnZpb3VzbHkgc2luY2UgPGlucHV0IHR5cGU9aGlkZGVuPiBpc24ndCByZW5kZXJlZCwgaXQgY2Fu
J3QgYmUgZm9jdXNlZAorICAgIC8vIEhpZGRlbiBlbGVtZW50cyBzaG91bGQgbm90IGJlIGZvY3Vz
YWJsZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5CisgICAg
aWYgKGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSkuZGlzcGxheSA9
PSAibm9uZSIpCiAgICAgICAgIGVsZW1UaGF0U2hvdWxkRm9jdXMgPSBudWxsOworCiAgICAgaWYg
KHRhZ05hbWVzVHJhbnNmZXJGb2N1c2VkLmZpbmQoZWxlbS50YWdOYW1lKSkgewogICAgICAgICBl
bGVtVGhhdFNob3VsZEZvY3VzID0gbnVsbDsKICAgICAgICAgT0t0b0ZvY3VzT3RoZXJFbGVtZW50
ID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38569</attachid>
            <date>2009-08-25 13:56:25 -0700</date>
            <delta_ts>2009-08-26 17:05:09 -0700</delta_ts>
            <desc>Also handles a elements correctly.</desc>
            <filename>tab-hidden.patch</filename>
            <type>text/plain</type>
            <size>31577</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Nzc1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzMgQEAKKzIwMDktMDgtMjUgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIGhpZGRlbiBlbGVtZW50cyBub3QgZm9jdXNhYmxlLgorCisgICAgICAgIENsZWFuIHVwIHN1
cHBvcnRzRm9jdXMgYW5kIGlzRm9jdXNhYmxlLgorICAgICAgICBzdXBwb3J0c0ZvY3VzIG5vdyBz
dHJpY3RseSBtZWFucyB0aGF0IHRoZSBub2RlIGNhbiBiZSBmb2N1c2VkIGJ5IGRlZmF1bHQuCisg
ICAgICAgIFRoaXMgaXMgdHJ1ZSBmb3IgbGlua3MsIGZvcm0gY29udHJvbHMgYW5kIGNvbnRlbnQg
ZWRpdGFibGUgZWxlbWVudHMgZm9yIGV4YW1wbGUuCisgICAgICAgIGlzRm9jdXNhYmxlIG1lYW5z
IHRoYXQgdGhlIHVzZXIgY2FuIGFjdHVhbGx5IGZvY3VzIGl0LgorICAgICAgICBBbGwgKDIpIGNh
bGxzIHRvIHN1cHBvcnRzRm9jdXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGlzIGludG8g
YWNjb3VudC4KKyAgICAgICAgCisgICAgICAgIE1ha2UgYSBlbGVtZW50cyB3aXRob3V0IGhyZWYg
d29yayBjb3JyZWN0bHkgYXMgd2VsbC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTkKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvY2xp
Y2stZm9jdXMtYW5jaG9yLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3RhYi1mb2N1
cy1hbmNob3IuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRl
bi5odG1sCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50Ojpmb2N1cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0ZvY3Vz
YWJsZSk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpzdXBwb3J0
c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojppc01vdXNlRm9j
dXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJk
Rm9jdXNhYmxlKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFF
bGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgICogaHRtbC9I
VE1MRmllbGRTZXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnN1cHBv
cnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNG
b2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OnN1cHBvcnRzRm9jdXMpOgorICAg
ICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaDoKKyAgICAgICAgKiBodG1sL0hUTUxM
ZWdlbmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50Ojpz
dXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKiBodG1sL0hUTUxMZWdlbmRFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdEdyb3VwRWxlbWVudDo6aXNGb2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdEdy
b3VwRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmlzRm9jdXNhYmxlKToKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRpb25FbGVtZW50Lmg6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXMpOgor
ICAgICAgICAqIHN2Zy9TVkdBRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBRWxl
bWVudDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBRWxlbWVudDo6aXNG
b2N1c2FibGUpOgorICAgICAgICAqIHdtbC9XTUxBRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXTUxBRWxlbWVudDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgICogd21sL1dNTEFFbGVt
ZW50Lmg6CisgICAgICAgICogd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAg
ICAoV2ViQ29yZTo6V01MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0ZvY3VzYWJsZSk6CisgICAgICAg
ICogd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5oOgorCiAyMDA5LTA4LTI1ICBBbHBoYSBMYW0g
IDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4u
CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIyMSwxNCArMTIyMSwyNiBAQCB2b2lkIEVsZW1lbnQ6OmZv
Y3VzKGJvb2wgcmVzdG9yZVByZXZpb3VzCiAgICAgaWYgKGRvYy0+Zm9jdXNlZE5vZGUoKSA9PSB0
aGlzKQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwotICAgIAogICAgIGlmICghc3VwcG9ydHNGb2N1cygpKQogICAgICAg
ICByZXR1cm47Ci0gICAgCisKKyAgICAvLyBJZiBpdCBzdXBwb3J0cyBmb2N1cyBidXQgdGhlIHN0
eWxlc2hlZXRzIGhhdmUgbm90IGxvYWRlZCB3ZSBjb250aW51ZSBzbworICAgIC8vIHdlIGNhbiBz
ZXQgdGhlIHRoZSBmb2N1c2VkIG5vZGUgdG8gYmUgaGFuZGxlZCBsYXRlciB3aGVuIHdlIGhhdmUg
dGhlCisgICAgLy8gc3R5bGVoc2VldHMgbG9hZGVkLgorICAgIGlmIChkb2MtPmhhdmVTdHlsZXNo
ZWV0c0xvYWRlZCgpKSB7CisgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CisgICAgICAgIGlmICghaXNGb2N1c2FibGUoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBpZiAoUGFnZSogcGFnZSA9IGRvYy0+cGFnZSgpKQogICAgICAg
ICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5vZGUodGhpcywgZG9jLT5mcmFt
ZSgpKTsKIAorICAgIC8vIFNldHRpbmcgdGhlIGZvY3VzZWQgbm9kZSBhYm92ZSBtaWdodCBoYXZl
IGNhdXNlZCBzaWRlIGVmZmVjdHMgbGlrZQorICAgIC8vIHJlcXVpcmluZyB0aGUgbGF5b3V0IHRv
IHVwZGF0ZSBvciBtYWRlIHRoZSBub2RlIHRvIG5vIGxvbmdlciBiZQorICAgIC8vIGZvY3VzYWJs
ZS4KKyAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCiAg
ICAgaWYgKCFpc0ZvY3VzYWJsZSgpKSB7CiAgICAgICAgIGVuc3VyZVJhcmVEYXRhKCktPnNldE5l
ZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoKHRydWUpOwogICAgICAgICBy
ZXR1cm47CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODI4LDEwICs4MjgsMjMgQEAgYm9vbCBOb2RlOjpyYXJlRGF0YUZv
Y3VzZWQoKSBjb25zdAogICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKICAgICByZXR1cm4gcmFy
ZURhdGEoKS0+aXNGb2N1c2VkKCk7CiB9CisKK2Jvb2wgTm9kZTo6c3VwcG9ydHNGb2N1cygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+dGFiSW5kZXhT
ZXRFeHBsaWNpdGx5KCk7Cit9CiAgICAgCiBib29sIE5vZGU6OmlzRm9jdXNhYmxlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiByYXJlRGF0YSgpLT50YWJJbmRleFNldEV4
cGxpY2l0bHkoKTsKKyAgICBpZiAoIWluRG9jdW1lbnQoKSB8fCAhc3VwcG9ydHNGb2N1cygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRklYTUU6IEV2ZW4gaWYgd2UgYXJl
IG5vdCB2aXNpYmxlLCB3ZSBtaWdodCBoYXZlIGEgY2hpbGQgdGhhdCBpcyB2aXNpYmxlLgorICAg
IC8vIERhdmUgd2FudHMgdG8gZml4IHRoYXQgc29tZSBkYXkgd2l0aCBhICJoYXMgdmlzaWJsZSBj
b250ZW50IiBmbGFnIG9yIHRoZSBsaWtlLgorICAgIGlmICghcmVuZGVyZXIoKSB8fCByZW5kZXJl
cigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgTm9kZTo6aXNLZXlib2FyZEZvY3Vz
YWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29y
ZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsMTAgKzI4NywxMCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHNob3J0IHRhYkluZGV4KCkgY29uc3Q7CiAKLSAgICAvKioKLSAgICAg
KiBXaGV0aGVyIHRoaXMgbm9kZSBjYW4gcmVjZWl2ZSB0aGUga2V5Ym9hcmQgZm9jdXMuCi0gICAg
ICovCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdCB7IHJldHVybiBpc0Zv
Y3VzYWJsZSgpOyB9CisgICAgLy8gV2hldGhlciB0aGlzIGtpbmQgb2Ygbm9kZSBjYW4gcmVjZWl2
ZSBmb2N1cyBieSBkZWZhdWx0LiBNb3N0IG5vZGVzIGFyZQorICAgIC8vIG5vdCBmb2N1c2FibGUg
YnV0IHNvbWUgZWxlbWVudHMsIHN1Y2ggYXMgZm9ybSBjb250cm9scyBhbmQgbGlua3MgYXJlLgor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CisgICAgLy8gV2hldGhlciB0
aGUgbm9kZSBjYW4gYWN0dWFsbHkgYmUgZm9jdXNlZC4KICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1
c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXli
b2FyZEV2ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBj
b25zdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTAp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MCwyMCArNjAsOCBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkg
CiB7CiAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBIVE1MRWxl
bWVudDo6c3VwcG9ydHNGb2N1cygpOwotICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpIHx8IChpc0xp
bmsoKSAmJiBkb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQo
KSk7Ci19Ci0KLWJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKLXsK
LSAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIEhUTUxFbGVtZW50
Ojppc0ZvY3VzYWJsZSgpOwotCi0gICAgLy8gRklYTUU6IEV2ZW4gaWYgd2UgYXJlIG5vdCB2aXNp
YmxlLCB3ZSBtaWdodCBoYXZlIGEgY2hpbGQgdGhhdCBpcyB2aXNpYmxlLgotICAgIC8vIERhdmUg
d2FudHMgdG8gZml4IHRoYXQgc29tZSBkYXkgd2l0aCBhICJoYXMgdmlzaWJsZSBjb250ZW50IiBm
bGFnIG9yIHRoZSBsaWtlLgotICAgIGlmICghKGlzTGluaygpICYmIHJlbmRlcmVyKCkgJiYgcmVu
ZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBJZiBub3QgYSBsaW5rIHdlIHNo
b3VsZCBzdGlsbCBiZSBhYmxlIHRvIGZvY3VzIHRoZSBlbGVtZW50IGlmIGl0IGhhcyB0YWJJbmRl
eC4KKyAgICByZXR1cm4gaXNMaW5rKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsK
IH0KIAogYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CkBA
IC04MSwxMiArNjksMTggQEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJs
ZQogI2lmIFBMQVRGT1JNKEdUSykKICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzTW91c2VGb2N1
c2FibGUoKTsKICNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc0xpbmsoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEFsbG93IHRhYiBpbmRleCBldGMgdG8gY29udHJv
bCBmb2N1cy4KKyAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKTsKICNl
bmRpZgogfQogCiBib29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtl
eWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogeworICAgIGlmICghaXNMaW5rKCkpCisgICAgICAg
IHJldHVybiBIVE1MRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCk7CisKICAgICBp
ZiAoIWlzRm9jdXNhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MQW5jaG9yRWxlbWVudC5oCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw2IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJv
YXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNG
b2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmUoYm9vbCBhY3RpdmUgPSB0cnVlLCBi
b29sIHBhdXNlID0gZmFsc2UpOwogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9v
bCBmdWxsQWN0aW9uKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0
Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjIsOSArMTYyLDEwIEBAIHZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXROb0hyZWYoYm9v
bCBub0gKICAgICBzZXRBdHRyaWJ1dGUobm9ocmVmQXR0ciwgbm9IcmVmID8gIiIgOiAwKTsKIH0K
IAotYm9vbCBIVE1MQXJlYUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKK2Jvb2wgSFRNTEFy
ZWFFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gSFRNTEVsZW1l
bnQ6OmlzRm9jdXNhYmxlKCk7CisgICAgLy8gU2tpcCBIVE1MQW5jaG9yRWxlbWVudHMgaXNMaW5r
KCkgY2hlY2suCisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCk7CiB9CiAK
IFN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OnRhcmdldCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTEFyZWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVh
RWxlbWVudC5oCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c0ZvcmJpZGRlbjsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUqKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHRh
cmdldCgpIGNvbnN0OwogCiAgICAgZW51bSBTaGFwZSB7IERlZmF1bHQsIFBvbHksIFJlY3QsIENp
cmNsZSwgVW5rbm93biB9OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzc1MCkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMSw5
ICs2MDEsOSBAQCB2b2lkIEhUTUxFbGVtZW50OjphZGRIVE1MQWxpZ25tZW50VG9TdHlsCiAgICAg
ICAgIGVsZW1lbnQtPmFkZENTU1Byb3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5VmVydGljYWxBbGln
biwgdmVydGljYWxBbGlnblZhbHVlKTsKIH0KIAotYm9vbCBIVE1MRWxlbWVudDo6aXNGb2N1c2Fi
bGUoKSBjb25zdAorYm9vbCBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgfHwgKGlzQ29udGVudEVkaXRhYmxlKCkg
JiYgcGFyZW50KCkgJiYgIXBhcmVudCgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICByZXR1
cm4gRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIHx8IChpc0NvbnRlbnRFZGl0YWJsZSgpICYmIHBh
cmVudCgpICYmICFwYXJlbnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSk7CiB9CiAKIGJvb2wgSFRN
TEVsZW1lbnQ6OmlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QgCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAko
cmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNiArNTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRBZGphY2VudEhU
TUwoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBpbnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNGb2N1cygpIGNvbnN0OworICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRFZGl0
YWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgp
IGNvbnN0OwogCkBAIC04Nyw4ICs4OSw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCi0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkg
Y29uc3Q7Ci0KICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKE5vZGUqIG5ld0NoaWxkKTsg
Ly8gRXJyb3ItY2hlY2tpbmcgZHVyaW5nIHBhcnNpbmcgdGhhdCBjaGVja3MgdGhlIERURAogCiAg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBEVEQgZm9yIGEgZ2l2ZW4gY2hpbGQg
bm9kZS4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3
NzUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw5ICs0OCw5IEBAIGJvb2wgSFRNTEZpZWxkU2V0RWxlbWVudDo6Y2hlY2tEVEQo
Y29uc3QKICAgICByZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUobGVnZW5kVGFnKSB8fCBIVE1M
RWxlbWVudDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwogfQogCi1ib29sIEhUTUxGaWVsZFNldEVsZW1l
bnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKK2Jvb2wgSFRNTEZpZWxkU2V0RWxlbWVudDo6c3VwcG9y
dHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgp
OworICAgIHJldHVybiBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwogfQogCiBjb25zdCBB
dG9taWNTdHJpbmcmIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgJKHJldmlzaW9uIDQ3NzUwKQorKysg
V2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAzOyB9CiAgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0No
aWxkKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysg
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzIsMTMgKzIzMiwxOSBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlY2FsY1N0
eWxlCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKK2Jvb2wg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Cit7CisgICAgcmV0
dXJuICFkaXNhYmxlZCgpOworfQorCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9j
dXNhYmxlKCkgY29uc3QKIHsKLSAgICBpZiAoZGlzYWJsZWQoKSB8fCAhcmVuZGVyZXIoKSB8fCAK
LSAgICAgICAgKHJlbmRlcmVyKCktPnN0eWxlKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlz
aWJpbGl0eSgpICE9IFZJU0lCTEUpIHx8IAorICAgIGlmICghcmVuZGVyZXIoKSB8fCAKICAgICAg
ICAgIXJlbmRlcmVyKCktPmlzQm94KCkgfHwgdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPnNpemUo
KS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAvLyBIVE1MRWxlbWVudDo6aXNGb2N1c2FibGUgaGFuZGxlcyB2aXNpYmlsaXR5IGFuZCBjYWxs
cyBzdXBvcnRzRm9jdXMgd2hpY2gKKyAgICAvLyB3aWxsIGNvdmVyIHRoZSBkaXNhYmxlZCBjYXNl
LgorICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNGb2N1c2FibGUoKTsKIH0KIAogYm9vbCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2
ZW50KSBjb25zdApAQCAtMzA0LDExICszMTAsNiBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmRpc3BhdGNoQmx1CiAgICAgSFRNTEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCk7CiB9
CiAKLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGlzRm9jdXNhYmxlKCkgfHwgKCFkaXNhYmxlZCgpICYmICFkb2N1bWVudCgp
LT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7Ci19Ci0KIEhUTUxGb3JtRWxlbWVudCogSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6dmlydHVhbEZvcm0oKSBjb25zdAogewogICAgIHJldHVybiBtX2Zv
cm07CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDQ3
NzUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEyLDkgKzIxMiw5IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldExv
Y2F0aW9uKGMKICAgICAgICAgb3BlblVSTCgpOwogfQogCi1ib29sIEhUTUxGcmFtZUVsZW1lbnRC
YXNlOjppc0ZvY3VzYWJsZSgpIGNvbnN0Citib29sIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzdXBw
b3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVuZGVyZXIoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0Rm9jdXMoYm9vbCByZWNl
aXZlZCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCShyZXZpc2lvbiA0Nzc1
MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29s
IGNhbkxhenlBdHRhY2goKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBib29sIGlz
Rm9jdXNhYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CiAgICAgCiAgICAgdmlydHVhbCBi
b29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxMZWdlbmRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExl
Z2VuZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGVn
ZW5kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDkgQEAgSFRNTExlZ2Vu
ZEVsZW1lbnQ6On5IVE1MTGVnZW5kRWxlbWVudCgpCiB7CiB9CiAKLWJvb2wgSFRNTExlZ2VuZEVs
ZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKK2Jvb2wgSFRNTExlZ2VuZEVsZW1lbnQ6OnN1cHBv
cnRzRm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNGb2N1c2FibGUo
KTsKKyAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKIH0KIAogY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MTGVnZW5kRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5oCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIHB1YmxpYzoKICAgICBIVE1MTGVnZW5kRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CiAgICAgdmlydHVhbCB+SFRNTExlZ2Vu
ZEVsZW1lbnQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBh
Y2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKIApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MT3B0R3JvdXBFbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwv
SFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDE1IEBA
IEhUTUxPcHRHcm91cEVsZW1lbnQ6OkhUTUxPcHRHcm91cEVsZW1lbnQKICAgICBBU1NFUlQoaGFz
VGFnTmFtZShvcHRncm91cFRhZykpOwogfQogCitib29sIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnN1
cHBvcnRzRm9jdXMoKSBjb25zdAoreworICAgIHJldHVybiBIVE1MRWxlbWVudDo6c3VwcG9ydHNG
b2N1cygpOworfQorCiBib29sIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCk7CisgICAgLy8gT3B0
Z3JvdXAgZWxlbWVudHMgZG8gbm90IGhhdmUgYSByZW5kZXJlciBzbyB3ZSBjaGVjayB0aGUgcmVu
ZGVyU3R5bGUgaW5zdGVhZC4KKyAgICByZXR1cm4gc3VwcG9ydHNGb2N1cygpICYmIHJlbmRlclN0
eWxlKCkgJiYgcmVuZGVyU3R5bGUoKS0+ZGlzcGxheSgpICE9IE5PTkU7CiB9CiAKIGNvbnN0IEF0
b21pY1N0cmluZyYgSFRNTE9wdEdyb3VwRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaAkocmV2aXNpb24gNDc3NTApCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2Rl
Kik7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklz
TmVlZGVkKFJlbmRlclN0eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxP
cHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9w
dGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw5ICs2NiwxNSBAQCB2b2lkIEhU
TUxPcHRpb25FbGVtZW50OjpkZXRhY2goKQogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRl
dGFjaCgpOwogfQogCitib29sIEhUTUxPcHRpb25FbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKK30KKwogYm9v
bCBIVE1MT3B0aW9uRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBI
VE1MRWxlbWVudDo6aXNGb2N1c2FibGUoKTsKKyAgICAvLyBPcHRpb24gZWxlbWVudHMgZG8gbm90
IGhhdmUgYSByZW5kZXJlciBzbyB3ZSBjaGVjayB0aGUgcmVuZGVyU3R5bGUgaW5zdGVhZC4KKyAg
ICByZXR1cm4gc3VwcG9ydHNGb2N1cygpICYmIHJlbmRlclN0eWxlKCkgJiYgcmVuZGVyU3R5bGUo
KS0+ZGlzcGxheSgpICE9IE5PTkU7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTE9wdGlv
bkVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVs
ZW1lbnQuaAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzT3B0aW9uYWw7IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDI7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQp
OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVk
ZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2goKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0Nzc1MCkKKysr
IFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYs
NiArMTQ2LDggQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyhGb2N1cwogICAg
IGlmIChjYXJldEJyb3dzaW5nICYmICFjdXJyZW50Tm9kZSkKICAgICAgICAgY3VycmVudE5vZGUg
PSBmcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkubm9kZSgpOwogCisgICAgZG9jdW1lbnQtPnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCiAgICAgTm9kZSogbm9kZSA9
IChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKQogICAgICAgICA/IGRvY3VtZW50
LT5uZXh0Rm9jdXNhYmxlTm9kZShjdXJyZW50Tm9kZSwgZXZlbnQpCiAgICAgICAgIDogZG9jdW1l
bnQtPnByZXZpb3VzRm9jdXNhYmxlTm9kZShjdXJyZW50Tm9kZSwgZXZlbnQpOwpJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FF
bGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSwyMCArMTY1LDE1IEBAIGJvb2wgU1ZHQUVsZW1lbnQ6
OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewogICAgIGlmIChpc0NvbnRlbnRFZGl0YWJsZSgpKQog
ICAgICAgICByZXR1cm4gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN1cHBvcnRzRm9j
dXMoKTsKLSAgICByZXR1cm4gaXNGb2N1c2FibGUoKSB8fCAoZG9jdW1lbnQoKSAmJiAhZG9jdW1l
bnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpOworICAgIHJldHVybiB0cnVlOwogfQogCiBi
b29sIFNWR0FFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKGlzQ29udGVu
dEVkaXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6aXNGb2N1c2FibGUoKTsKLSAgICAKLSAgICAvLyBGSVhNRTogRXZlbiBpZiB3ZSBhcmUgbm90
IHZpc2libGUsIHdlIG1pZ2h0IGhhdmUgYSBjaGlsZCB0aGF0IGlzIHZpc2libGUuCi0gICAgLy8g
RGF2ZSB3YW50cyB0byBmaXggdGhhdCBzb21lIGRheSB3aXRoIGEgImhhcyB2aXNpYmxlIGNvbnRl
bnQiIGZsYWcgb3IgdGhlIGxpa2UuCi0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICEocmVuZGVyZXIo
KS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpKQorICAgIGlmIChyZW5kZXJlcigp
ICYmIHJlbmRlcmVyKCktPmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiAhcmVuZGVyZXIoKS0+YWJz
b2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkuaXNFbXB0eSgpOworICAgIHJldHVybiBTVkdFbGVt
ZW50Ojppc0ZvY3VzYWJsZSgpOwogfQogCiBib29sIFNWR0FFbGVtZW50Ojppc01vdXNlRm9jdXNh
YmxlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysgV2Vi
Q29yZS93bWwvV01MQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxNyArNzMsNyBA
QCB2b2lkIFdNTEFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNCiAKIGJvb2wgV01MQUVs
ZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiBpc0ZvY3VzYWJsZSgp
IHx8IChpc0xpbmsoKSAmJiBkb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVl
dHNMb2FkZWQoKSk7Ci19Ci0KLWJvb2wgV01MQUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QK
LXsKLSAgICAvLyBGSVhNRTogRXZlbiBpZiB3ZSBhcmUgbm90IHZpc2libGUsIHdlIG1pZ2h0IGhh
dmUgYSBjaGlsZCB0aGF0IGlzIHZpc2libGUuCi0gICAgLy8gRGF2ZSB3YW50cyB0byBmaXggdGhh
dCBzb21lIGRheSB3aXRoIGEgImhhcyB2aXNpYmxlIGNvbnRlbnQiIGZsYWcgb3IgdGhlIGxpa2Uu
Ci0gICAgaWYgKCEoaXNMaW5rKCkgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgp
LT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBpc0xpbmsoKTsKIH0KIAogYm9vbCBXTUxBRWxlbWVu
dDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmgJKHJldmlzaW9uIDQ3
NzUwKQorKysgV2ViQ29yZS93bWwvV01MQUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsNiBAQCBwdWJsaWM6CiAgICAgV01MQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXli
b2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvd21s
L1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL3dtbC9X
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxMSBA
QCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5XTUxGb3JtQ29udHJvbEVsCiB7CiB9CiAKK2Jvb2wg
V01MRm9ybUNvbnRyb2xFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogYm9vbCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkg
Y29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmlzQm94KCkpCkBA
IC00NiwxNCArNTEsMTAgQEAgYm9vbCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxl
KAogCiAgICAgaWYgKHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5zaXplKCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVu
ZGVyZXIoKS0+c3R5bGUoKSkgewotICAgICAgICBpZiAoc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBW
SVNJQkxFKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOworICAgIAorICAgIHJldHVybiBXTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOwogfQorICAg
IAogCiB2b2lkIFdNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKIHsKSW5kZXg6IFdlYkNv
cmUvd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21s
L1dNTEZvcm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvd21s
L1dNTEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihib29sIGIgPSB0cnVlKSB7
IG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBiOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNGb2N1cygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDc3NTYpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAor
MjAwOS0wOC0yNSAgRXJpayBBcnZpZHNzb24gIDxhcnZAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIGZvciBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTkKKyAgICAgICAgTWFrZSBoaWRk
ZW4gZWxlbWVudHMgbm90IGZvY3VzYWJsZS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVlIHdlIHNo
b3VsZAorICAgICAgICBub3QgYWxsb3cgdGFiYmluZyB0byBhIGhpZGRlbiBlbGVtZW50LgorICAg
ICAgICAKKyAgICAgICAgVGhlIHBhdGNoIGFsc28gbWFrZXMgYSBlbGVtZW50IHdpdGhvdXQgaHJl
ZiBiZWhhdmUgbGlrZSBnZW5lcmljIGVsZW1lbnRzCisgICAgICAgIHdoZW4gaXQgY29tZXMgdG8g
Zm9jdXMuIEFkZGVkIHRlc3RzIHRoYXQgYXNzZXJ0cyB0aGF0IHRoaXMgd29ya3MgYXMKKyAgICAg
ICAgZXhwZWN0ZWQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9jbGljay1mb2N1cy1hbmNob3It
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9jbGljay1mb2N1cy1h
bmNob3IuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL3RhYmlu
ZGV4LWZvY3VzLWJsdXItYWxsLmpzOgorICAgICAgICAodGVzdCk6CisgICAgICAgICh0ZXN0UHJv
Z3JhbW1hdGljRm9jdXMpOgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYi1mb2N1cy1hbmNob3It
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90YWItZm9jdXMtYW5j
aG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4t
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90YWItZm9jdXMtaGlk
ZGVuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYmluZGV4LWZvY3VzLWJs
dXItYWxsLWV4cGVjdGVkLnR4dDoKKwogMjAwOS0wOC0yNSAgTWFkcyBBZ2VyICA8YWdlckBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL2NsaWNrLWZvY3VzLWFuY2hvci1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvY2xpY2stZm9jdXMtYW5jaG9yLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2NsaWNrLWZv
Y3VzLWFuY2hvci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorVGhp
cyB0ZXN0IGVuc3VyZXMgdGhhdCB3ZSBjYW4gY2xpY2sgdG8gZm9jdXMgYW4gYSBlbGVtZW50IHdp
dGggYSB0YWIgaW5kZXguIENsaWNrIG9uIHRoZSBlbGVtZW50IGJlbG93LgorCitGb2N1c2FibGUK
KworUmVzdWx0CisKK1BBU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2NsaWNrLWZv
Y3VzLWFuY2hvci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2Ns
aWNrLWZvY3VzLWFuY2hvci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvY2xpY2stZm9jdXMtYW5jaG9yLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJX
ZWJLaXRUYWJUb0xpbmtzIiwgZmFsc2UpOworfQorCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24o
KQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICB2YXIgYUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndCcpOwor
ICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGFFbGVtZW50Lm9mZnNldExlZnQgKyAyLCBhRWxl
bWVudC5vZmZzZXRUb3AgKyAyKTsKKyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsgICAgCit9
OworCitmdW5jdGlvbiBwYXNzKCkKK3sKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCdwcmUnKTsKKyAgICBlbC50ZXh0Q29udGVudCA9ICdQQVNTJzsKK30KKworPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKworPHA+VGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCB3ZSBjYW4gY2xp
Y2sgdG8gZm9jdXMgYW4gYSBlbGVtZW50IHdpdGggYSB0YWIgaW5kZXguCitDbGljayBvbiB0aGUg
ZWxlbWVudCBiZWxvdy4KKworPHA+PGEgdGFiaW5kZXg9MCBvbmZvY3VzPSJwYXNzKCkiIGlkPXQ+
Rm9jdXNhYmxlPC9hPgorCis8cD5SZXN1bHQKKworPHByZT5GQUlMPC9wcmU+CisKKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1hbmNob3It
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYi1m
b2N1cy1hbmNob3ItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvdGFiLWZvY3VzLWFuY2hvci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOSBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCB3ZSBjYW4gdGFiIHRvIGFuIGEgZWxl
bWVudCB3aXRoIGEgdGFiIGluZGV4LiBQcmVzcyB0YWIgdG8gZm9jdXMgdGhlIGVsZW1lbnQgYmVs
b3cuCisKK05vdCBmb2N1c2FibGUgKGdpdmVuIHRoZSBXZWJLaXRUYWJUb0xpbmtzIHByZWYgaXMg
c2V0IHRvIGZhbHNlKQorCitGb2N1c2FibGUKKworUmVzdWx0CisKK1BBU1MKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1hbmNob3IuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtYW5jaG9yLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtYW5jaG9yLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
b3ZlcnJpZGVQcmVmZXJlbmNlKCdXZWJLaXRUYWJUb0xpbmtzJywgZmFsc2UpOworfQorCit3aW5k
b3cub25sb2FkID0gZnVuY3Rpb24oKQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE7IGkr
KykgeworICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCdcdCcpOworICAgIH0KK307CisKK2Z1
bmN0aW9uIHBhc3MoKQoreworICAgIHZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3By
ZScpOworICAgIGVsLnRleHRDb250ZW50ID0gJ1BBU1MnOworfQorCitmdW5jdGlvbiBmYWlsKCkK
K3sKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwcmUnKTsKKyAgICBlbC50
ZXh0Q29udGVudCA9ICdGQUlMJzsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKwor
PHA+VGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCB3ZSBjYW4gdGFiIHRvIGFuIGEgZWxlbWVudCB3aXRo
IGEgdGFiIGluZGV4LiBQcmVzcyB0YWIKK3RvIGZvY3VzIHRoZSBlbGVtZW50IGJlbG93LgorCis8
cD48YSB0YWJpbmRleD0wIG9uZm9jdXM9ImZhaWwoKSIgaHJlZj0iIyI+Tm90IGZvY3VzYWJsZSAo
Z2l2ZW4gdGhlIFdlYktpdFRhYlRvTGlua3MgcHJlZiBpcyBzZXQgdG8gZmFsc2UpPC9hPgorPHA+
PGEgdGFiaW5kZXg9MCBvbmZvY3VzPSJwYXNzKCkiPkZvY3VzYWJsZTwvYT4KKworPHA+UmVzdWx0
CisKKzxwcmU+RkFJTDwvcHJlPgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4t
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitMYXlvdXQgdGVzdCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5CisKK0RpdiAw
CitEaXYgMgorRGl2IDUKK1Jlc3VsdAorCitQQVNTIC0gRGl2IDAKK1BBU1MgLSBEaXYgMgorUEFT
UyAtIERpdiAzCitQQVNTIC0gRGl2IDUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
dGFiLWZvY3VzLWhpZGRlbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3RhYi1mb2N1cy1oaWRkZW4uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisKK3dpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpCit7CisgICAgaWYgKCF3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCdc
dCcpOworICAgIH0KK307CisKK2Z1bmN0aW9uIHByaW50KHMpCit7CisgICAgdmFyIGVsID0gZG9j
dW1lbnQucXVlcnlTZWxlY3RvcigncHJlJyk7CisgICAgZWwudGV4dENvbnRlbnQgKz0gcyArICdc
bic7Cit9CisKK3ZhciBuZXh0VG9Gb2N1cyA9IDA7CisKK2RvY3VtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoJ2ZvY3VzJywgZnVuY3Rpb24oZSkgeworICAgIHZhciBlbCA9IGUudGFyZ2V0OworICAgIHBy
aW50KChlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFiJykgPT0gbmV4dFRvRm9jdXMgPyAnUEFTUycg
OiAnRkFJTCcpICsKKyAgICAgICAgICAnIC0gJyArIGVsLnRleHRDb250ZW50KTsKKyAgICBuZXh0
VG9Gb2N1cysrOworfSwgdHJ1ZSk7CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxw
PkxheW91dCB0ZXN0IGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjcwOTkiIHRhYmluZGV4PS0xPmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNzA5OTwvYT4KKworPGRpdiB0YWJpbmRleD0wIGRhdGEtdGFiPTA+RGl2IDA8
L2Rpdj4KKzxkaXYgdGFiaW5kZXg9MCBzdHlsZT0iZGlzcGxheTpub25lIj5EaXYgMTwvZGl2Pgor
PGRpdiB0YWJpbmRleD0wIGRhdGEtdGFiPTE+RGl2IDI8L2Rpdj4KKzxkaXYgdGFiaW5kZXg9MCBk
YXRhLXRhYj0yIHN0eWxlPSJvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjAiPkRpdiAzPC9kaXY+Cis8
ZGl2IHRhYmluZGV4PTAgc3R5bGU9InZpc2liaWxpdHk6aGlkZGVuIj5EaXYgNDwvZGl2PgorPGRp
diB0YWJpbmRleD0wIGRhdGEtdGFiPTM+RGl2IDU8L2Rpdj4KKworPHA+UmVzdWx0CisKKzxwcmUg
aWQ9b3V0PjwvcHJlPgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiaW5kZXgtZm9jdXMtYmx1ci1hbGwtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA0Nzc1MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYmlu
ZGV4LWZvY3VzLWJsdXItYWxsLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwyICsx
LDIgQEAKLTMzNSBmb2N1cyAvIDMzNSBibHVyIGV2ZW50cyBkaXNhdGNoZWQsIGFuZCBzaG91bGQg
YmUgMzM1IC8gMzM1IFBBU1NFRAorMzI5IGZvY3VzIC8gMzI5IGJsdXIgZXZlbnRzIGRpc3BhdGNo
ZWQsIGFuZCBzaG91bGQgYmUgMzM1IC8gMzM1IFBBU1NFRAogVG90YWwgb2YgMCBmb2N1cyB0ZXN0
KHMpIGZhaWxlZC4gUEFTU0VECkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9yZXNvdXJj
ZXMvdGFiaW5kZXgtZm9jdXMtYmx1ci1hbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvcmVzb3VyY2VzL3RhYmluZGV4LWZvY3VzLWJsdXItYWxsLmpzCShyZXZpc2lv
biA0Nzc1MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy90YWJpbmRleC1m
b2N1cy1ibHVyLWFsbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNyBAQCB2YXIgdGFn
TmFtZXNBbHdheXNGb2N1c2VkID0gWyJBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlNFTEVDVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJURVhUQVJFQSJdOwogCi12
YXIgdGFnTmFtZXNUcmFuc2ZlckZvY3VzZWQgPSBbIkxBQkVMIl07IC8vIGxhYmxlcyBhbHdheXMg
dHJhbnNmZXIgZm9jdXMgdG8gdGhlIGxhYmVsZWQgZWxlbWVudAordmFyIHRhZ05hbWVzVHJhbnNm
ZXJGb2N1c2VkID0gWyJMQUJFTCJdOyAvLyBsYWJlbHMgYWx3YXlzIHRyYW5zZmVyIGZvY3VzIHRv
IHRoZSBsYWJlbGVkIGVsZW1lbnQKIAogZnVuY3Rpb24gcHJpbnRUb0NvbnNvbGUoc3RyKQogewpA
QCAtNDksNyArNDksNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICB2YXIgaG9tZUJhc2UgPSB3aW5k
b3cuZnJhbWVzWzFdLmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hvbWViYXNlJyk7
CiAgICAgaG9tZUJhc2VbMF0uZm9jdXMoKTsKIAotICAgIHZhciByZXN1bHRTdW1tYXJ5ID0gZm9j
dXNDb3VudCsiIGZvY3VzIC8gIitibHVyQ291bnQrIiBibHVyIGV2ZW50cyBkaXNhdGNoZWQsIGFu
ZCBzaG91bGQgYmUgMzM1IC8gMzM1ICI7CisgICAgdmFyIHJlc3VsdFN1bW1hcnkgPSBmb2N1c0Nv
dW50KyIgZm9jdXMgLyAiK2JsdXJDb3VudCsiIGJsdXIgZXZlbnRzIGRpc3BhdGNoZWQsIGFuZCBz
aG91bGQgYmUgMzM1IC8gMzM1ICI7CiAgICAgcmVzdWx0U3VtbWFyeSArPSAoZm9jdXNDb3VudD09
Ymx1ckNvdW50KSA/ICI8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPlBBU1NFRDwvc3Bhbj48YnI+
IiA6ICI8c3BhbiBzdHlsZT0nY29sb3I6cmVkJz5GQUlMRUQ8L3NwYW4+PGJyPiI7CiAgICAgcmVz
dWx0U3VtbWFyeSArPSAiVG90YWwgb2YgIitmYWlsZWRUZXN0Q291bnQrIiBmb2N1cyB0ZXN0KHMp
IGZhaWxlZC4iOwogICAgIGlmIChmYWlsZWRUZXN0Q291bnQpCkBAIC0xMDMsOCArMTAzLDEwIEBA
IGZ1bmN0aW9uIHRlc3RQcm9ncmFtbWF0aWNGb2N1cyhlbGVtKQogICAgIGVsc2UgaWYgKHRhZ05h
bWVzQWx3YXlzRm9jdXNlZC5maW5kKGVsZW0udGFnTmFtZSkpIC8vIHNwZWNpYWwgY2FzZSBmb3Jt
IGVsZW1lbnRzIGFuZCBvdGhlciBjb250cm9scyB0aGF0IGFyZSBhbHdheXMgZm9jdXNhYmxlCiAg
ICAgICAgIGVsZW1UaGF0U2hvdWxkRm9jdXMgPSBlbGVtOwogICAgIAotICAgIGlmIChlbGVtLnRh
Z05hbWUgPT0gIklOUFVUIiAmJiBlbGVtLnR5cGUgPT0gImhpZGRlbiIpIC8vIG9idmlvdXNseSBz
aW5jZSA8aW5wdXQgdHlwZT1oaWRkZW4+IGlzbid0IHJlbmRlcmVkLCBpdCBjYW4ndCBiZSBmb2N1
c2VkCisgICAgLy8gSGlkZGVuIGVsZW1lbnRzIHNob3VsZCBub3QgYmUgZm9jdXNhYmxlLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTkKKyAgICBpZiAoZG9jdW1l
bnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtKS5kaXNwbGF5ID09ICJub25lIikK
ICAgICAgICAgZWxlbVRoYXRTaG91bGRGb2N1cyA9IG51bGw7CisKICAgICBpZiAodGFnTmFtZXNU
cmFuc2ZlckZvY3VzZWQuZmluZChlbGVtLnRhZ05hbWUpKSB7CiAgICAgICAgIGVsZW1UaGF0U2hv
dWxkRm9jdXMgPSBudWxsOwogICAgICAgICBPS3RvRm9jdXNPdGhlckVsZW1lbnQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38648</attachid>
            <date>2009-08-26 17:05:09 -0700</date>
            <delta_ts>2009-08-27 19:09:45 -0700</delta_ts>
            <desc>This adds an assert that the layout is up to date.</desc>
            <filename>tab-hidden.patch</filename>
            <type>text/plain</type>
            <size>32976</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzgwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzUgQEAKKzIwMDktMDgtMjYgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIGhpZGRlbiBlbGVtZW50cyBub3QgZm9jdXNhYmxlLgorCisgICAgICAgIENsZWFuIHVwIHN1
cHBvcnRzRm9jdXMgYW5kIGlzRm9jdXNhYmxlLgorICAgICAgICBzdXBwb3J0c0ZvY3VzIG5vdyBz
dHJpY3RseSBtZWFucyB0aGF0IHRoZSBub2RlIGNhbiBiZSBmb2N1c2VkIGJ5IGRlZmF1bHQuCisg
ICAgICAgIFRoaXMgaXMgdHJ1ZSBmb3IgbGlua3MsIGZvcm0gY29udHJvbHMgYW5kIGNvbnRlbnQg
ZWRpdGFibGUgZWxlbWVudHMgZm9yIGV4YW1wbGUuCisgICAgICAgIGlzRm9jdXNhYmxlIG1lYW5z
IHRoYXQgdGhlIHVzZXIgY2FuIGFjdHVhbGx5IGZvY3VzIGl0LgorICAgICAgICBBbGwgKDIpIGNh
bGxzIHRvIHN1cHBvcnRzRm9jdXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGlzIGludG8g
YWNjb3VudC4KKyAgICAgICAgCisgICAgICAgIE1ha2UgYSBlbGVtZW50cyB3aXRob3V0IGhyZWYg
d29yayBjb3JyZWN0bHkgYXMgd2VsbC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTkKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvY2xp
Y2stZm9jdXMtYW5jaG9yLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3RhYi1mb2N1
cy1hbmNob3IuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRl
bi5odG1sCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50Ojpmb2N1cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0ZvY3Vz
YWJsZSk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpzdXBwb3J0
c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojppc01vdXNlRm9j
dXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJk
Rm9jdXNhYmxlKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFF
bGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgICogaHRtbC9I
VE1MRmllbGRTZXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnN1cHBv
cnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNG
b2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OnN1cHBvcnRzRm9jdXMpOgorICAg
ICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaDoKKyAgICAgICAgKiBodG1sL0hUTUxM
ZWdlbmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50Ojpz
dXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKiBodG1sL0hUTUxMZWdlbmRFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdEdyb3VwRWxlbWVudDo6aXNGb2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdEdy
b3VwRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmlzRm9jdXNhYmxlKToKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRpb25FbGVtZW50Lmg6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQpOgor
ICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
Y3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzKToKKyAgICAgICAgKiBzdmcvU1ZHQUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OmlzRm9jdXNhYmxlKToKKyAgICAgICAgKiB3bWwv
V01MQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MQUVsZW1lbnQ6OnN1cHBvcnRz
Rm9jdXMpOgorICAgICAgICAqIHdtbC9XTUxBRWxlbWVudC5oOgorICAgICAgICAqIHdtbC9XTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MRm9ybUNvbnRyb2xF
bGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OldNTEZvcm1Db250cm9s
RWxlbWVudDo6aXNGb2N1c2FibGUpOgorICAgICAgICAqIHdtbC9XTUxGb3JtQ29udHJvbEVsZW1l
bnQuaDoKKwogMjAwOS0wOC0yNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNp
b24gNDc3NTApCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIyMSwxNCArMTIyMSwyNiBAQCB2b2lkIEVsZW1lbnQ6OmZvY3VzKGJvb2wgcmVzdG9yZVByZXZp
b3VzCiAgICAgaWYgKGRvYy0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQogICAgICAgICByZXR1cm47
CiAKLSAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAg
IAogICAgIGlmICghc3VwcG9ydHNGb2N1cygpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAg
ICAvLyBJZiBpdCBzdXBwb3J0cyBmb2N1cyBidXQgdGhlIHN0eWxlc2hlZXRzIGhhdmUgbm90IGxv
YWRlZCB3ZSBjb250aW51ZSBzbworICAgIC8vIHdlIGNhbiBzZXQgdGhlIHRoZSBmb2N1c2VkIG5v
ZGUgdG8gYmUgaGFuZGxlZCBsYXRlciB3aGVuIHdlIGhhdmUgdGhlCisgICAgLy8gc3R5bGVoc2Vl
dHMgbG9hZGVkLgorICAgIGlmIChkb2MtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKSB7CisgICAg
ICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAg
IGlmICghaXNGb2N1c2FibGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBp
ZiAoUGFnZSogcGFnZSA9IGRvYy0+cGFnZSgpKQogICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+c2V0Rm9jdXNlZE5vZGUodGhpcywgZG9jLT5mcmFtZSgpKTsKIAorICAgIC8vIFNldHRp
bmcgdGhlIGZvY3VzZWQgbm9kZSBhYm92ZSBtaWdodCBoYXZlIGNhdXNlZCBzaWRlIGVmZmVjdHMg
bGlrZQorICAgIC8vIHJlcXVpcmluZyB0aGUgbGF5b3V0IHRvIHVwZGF0ZSBvciBtYWRlIHRoZSBu
b2RlIHRvIG5vIGxvbmdlciBiZQorICAgIC8vIGZvY3VzYWJsZS4KKyAgICBkb2MtPnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCiAgICAgaWYgKCFpc0ZvY3VzYWJsZSgp
KSB7CiAgICAgICAgIGVuc3VyZVJhcmVEYXRhKCktPnNldE5lZWRzRm9jdXNBcHBlYXJhbmNlVXBk
YXRlU29vbkFmdGVyQXR0YWNoKHRydWUpOwogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3Jl
L2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNp
b24gNDc3NTApCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4
LDEwICs4MjgsMjggQEAgYm9vbCBOb2RlOjpyYXJlRGF0YUZvY3VzZWQoKSBjb25zdAogICAgIEFT
U0VSVChoYXNSYXJlRGF0YSgpKTsKICAgICByZXR1cm4gcmFyZURhdGEoKS0+aXNGb2N1c2VkKCk7
CiB9CisKK2Jvb2wgTm9kZTo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhh
c1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+dGFiSW5kZXhTZXRFeHBsaWNpdGx5KCk7Cit9CiAg
ICAgCiBib29sIE5vZGU6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzUmFy
ZURhdGEoKSAmJiByYXJlRGF0YSgpLT50YWJJbmRleFNldEV4cGxpY2l0bHkoKTsKKyAgICBpZiAo
IWluRG9jdW1lbnQoKSB8fCAhc3VwcG9ydHNGb2N1cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS0+
bmVlZHNMYXlvdXQoKSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlQoIW5lZWRzU3R5bGVSZWNh
bGMoKSk7CisgICAgCisgICAgLy8gRklYTUU6IEV2ZW4gaWYgd2UgYXJlIG5vdCB2aXNpYmxlLCB3
ZSBtaWdodCBoYXZlIGEgY2hpbGQgdGhhdCBpcyB2aXNpYmxlLgorICAgIC8vIERhdmUgd2FudHMg
dG8gZml4IHRoYXQgc29tZSBkYXkgd2l0aCBhICJoYXMgdmlzaWJsZSBjb250ZW50IiBmbGFnIG9y
IHRoZSBsaWtlLgorICAgIGlmICghcmVuZGVyZXIoKSB8fCByZW5kZXJlcigpLT5zdHlsZSgpLT52
aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgTm9kZTo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2
ZW50KikgY29uc3QKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9kb20vTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODcsMTAgKzI4NywxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHNob3J0IHRhYkluZGV4KCkgY29uc3Q7CiAKLSAgICAvKioKLSAgICAgKiBXaGV0aGVyIHRoaXMg
bm9kZSBjYW4gcmVjZWl2ZSB0aGUga2V5Ym9hcmQgZm9jdXMuCi0gICAgICovCi0gICAgdmlydHVh
bCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdCB7IHJldHVybiBpc0ZvY3VzYWJsZSgpOyB9Cisg
ICAgLy8gV2hldGhlciB0aGlzIGtpbmQgb2Ygbm9kZSBjYW4gcmVjZWl2ZSBmb2N1cyBieSBkZWZh
dWx0LiBNb3N0IG5vZGVzIGFyZQorICAgIC8vIG5vdCBmb2N1c2FibGUgYnV0IHNvbWUgZWxlbWVu
dHMsIHN1Y2ggYXMgZm9ybSBjb250cm9scyBhbmQgbGlua3MgYXJlLgorICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CisgICAgLy8gV2hldGhlciB0aGUgbm9kZSBjYW4gYWN0
dWFsbHkgYmUgZm9jdXNlZC4KICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwyMCArNjAsOCBA
QCBib29sIEhUTUxBbmNob3JFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgCiB7CiAgICAgaWYgKGlz
Q29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBIVE1MRWxlbWVudDo6c3VwcG9ydHNG
b2N1cygpOwotICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpIHx8IChpc0xpbmsoKSAmJiBkb2N1bWVu
dCgpICYmICFkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7Ci19Ci0KLWJvb2wg
SFRNTEFuY2hvckVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKLXsKLSAgICBpZiAoaXNDb250
ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgp
OwotCi0gICAgLy8gRklYTUU6IEV2ZW4gaWYgd2UgYXJlIG5vdCB2aXNpYmxlLCB3ZSBtaWdodCBo
YXZlIGEgY2hpbGQgdGhhdCBpcyB2aXNpYmxlLgotICAgIC8vIERhdmUgd2FudHMgdG8gZml4IHRo
YXQgc29tZSBkYXkgd2l0aCBhICJoYXMgdmlzaWJsZSBjb250ZW50IiBmbGFnIG9yIHRoZSBsaWtl
LgotICAgIGlmICghKGlzTGluaygpICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUo
KS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBJZiBub3QgYSBsaW5rIHdlIHNob3VsZCBzdGlsbCBiZSBh
YmxlIHRvIGZvY3VzIHRoZSBlbGVtZW50IGlmIGl0IGhhcyB0YWJJbmRleC4KKyAgICByZXR1cm4g
aXNMaW5rKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKIH0KIAogYm9vbCBIVE1M
QW5jaG9yRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CkBAIC04MSwxMiArNjksMTgg
QEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZQogI2lmIFBMQVRGT1JN
KEdUSykKICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKTsKICNlbHNl
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc0xpbmsoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIC8vIEFsbG93IHRhYiBpbmRleCBldGMgdG8gY29udHJvbCBmb2N1cy4KKyAgICBy
ZXR1cm4gSFRNTEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKTsKICNlbmRpZgogfQogCiBib29s
IEhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2
ZW50KSBjb25zdAogeworICAgIGlmICghaXNMaW5rKCkpCisgICAgICAgIHJldHVybiBIVE1MRWxl
bWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCk7CisKICAgICBpZiAoIWlzRm9jdXNhYmxl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
QW5jaG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxl
bWVudC5oCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZv
Y3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtl
eWJvYXJkRXZlbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRBY3RpdmUoYm9vbCBhY3RpdmUgPSB0cnVlLCBib29sIHBhdXNlID0gZmFs
c2UpOwogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBmdWxsQWN0aW9uKTsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsOSArMTYy
LDEwIEBAIHZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXROb0hyZWYoYm9vbCBub0gKICAgICBzZXRB
dHRyaWJ1dGUobm9ocmVmQXR0ciwgbm9IcmVmID8gIiIgOiAwKTsKIH0KIAotYm9vbCBIVE1MQXJl
YUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKK2Jvb2wgSFRNTEFyZWFFbGVtZW50OjpzdXBw
b3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzRm9jdXNhYmxl
KCk7CisgICAgLy8gU2tpcCBIVE1MQW5jaG9yRWxlbWVudHMgaXNMaW5rKCkgY2hlY2suCisgICAg
cmV0dXJuIEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCk7CiB9CiAKIFN0cmluZyBIVE1MQXJl
YUVsZW1lbnQ6OnRhcmdldCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5oCShyZXZp
c2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1
cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsg
fQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNGb2N1cygpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHRhcmdldCgpIGNvbnN0Owog
CiAgICAgZW51bSBTaGFwZSB7IERlZmF1bHQsIFBvbHksIFJlY3QsIENpcmNsZSwgVW5rbm93biB9
OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMSw5ICs2MDEsOSBAQCB2b2lk
IEhUTUxFbGVtZW50OjphZGRIVE1MQWxpZ25tZW50VG9TdHlsCiAgICAgICAgIGVsZW1lbnQtPmFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbiwgdmVydGljYWxBbGln
blZhbHVlKTsKIH0KIAotYm9vbCBIVE1MRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAorYm9v
bCBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEVsZW1l
bnQ6OmlzRm9jdXNhYmxlKCkgfHwgKGlzQ29udGVudEVkaXRhYmxlKCkgJiYgcGFyZW50KCkgJiYg
IXBhcmVudCgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICByZXR1cm4gRWxlbWVudDo6c3Vw
cG9ydHNGb2N1cygpIHx8IChpc0NvbnRlbnRFZGl0YWJsZSgpICYmIHBhcmVudCgpICYmICFwYXJl
bnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSk7CiB9CiAKIGJvb2wgSFRNTEVsZW1lbnQ6OmlzQ29u
dGVudEVkaXRhYmxlKCkgY29uc3QgCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkocmV2aXNpb24gNDc3NTAp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiAr
NTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRBZGphY2VudEhUTUwoY29uc3QgU3RyaW5n
JiB3aGVyZSwgY29uc3QgU3RyaW5nJiBodG1sLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBp
bnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBFeGNlcHRpb25Db2RlJik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNv
bnN0OworICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0OwogCkBAIC04
Nyw4ICs4OSw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSopOwogCi0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0KICAgICB2
aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKE5vZGUqIG5ld0NoaWxkKTsgLy8gRXJyb3ItY2hlY2tp
bmcgZHVyaW5nIHBhcnNpbmcgdGhhdCBjaGVja3MgdGhlIERURAogCiAgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIGNoZWNrIHRoZSBEVEQgZm9yIGEgZ2l2ZW4gY2hpbGQgbm9kZS4KSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw5ICs0
OCw5IEBAIGJvb2wgSFRNTEZpZWxkU2V0RWxlbWVudDo6Y2hlY2tEVEQoY29uc3QKICAgICByZXR1
cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUobGVnZW5kVGFnKSB8fCBIVE1MRWxlbWVudDo6Y2hlY2tE
VEQobmV3Q2hpbGQpOwogfQogCi1ib29sIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmlzRm9jdXNhYmxl
KCkgY29uc3QKK2Jvb2wgSFRNTEZpZWxkU2V0RWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOworICAgIHJldHVybiBI
VE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhU
TUxGaWVsZFNldEVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRmllbGRTZXRFbGVtZW50LmgJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9odG1sL0hU
TUxGaWVsZFNldEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CiAg
ICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKIAotICAgIHZp
cnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0ZvY3VzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsMTMgKzIzMiwx
OSBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlY2FsY1N0eWxlCiAgICAgICAgIHJl
bmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKK2Jvb2wgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFkaXNhYmxlZCgp
OworfQorCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QK
IHsKLSAgICBpZiAoZGlzYWJsZWQoKSB8fCAhcmVuZGVyZXIoKSB8fCAKLSAgICAgICAgKHJlbmRl
cmVyKCktPnN0eWxlKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUpIHx8IAorICAgIGlmICghcmVuZGVyZXIoKSB8fCAKICAgICAgICAgIXJlbmRlcmVyKCkt
PmlzQm94KCkgfHwgdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPnNpemUoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBIVE1MRWxlbWVu
dDo6aXNGb2N1c2FibGUgaGFuZGxlcyB2aXNpYmlsaXR5IGFuZCBjYWxscyBzdXBvcnRzRm9jdXMg
d2hpY2gKKyAgICAvLyB3aWxsIGNvdmVyIHRoZSBkaXNhYmxlZCBjYXNlLgorICAgIHJldHVybiBI
VE1MRWxlbWVudDo6aXNGb2N1c2FibGUoKTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdApAQCAt
MzA0LDExICszMTAsNiBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoQmx1
CiAgICAgSFRNTEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCk7CiB9CiAKLWJvb2wgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlz
Rm9jdXNhYmxlKCkgfHwgKCFkaXNhYmxlZCgpICYmICFkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVl
dHNMb2FkZWQoKSk7Ci19Ci0KIEhUTUxGb3JtRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6dmlydHVhbEZvcm0oKSBjb25zdAogewogICAgIHJldHVybiBtX2Zvcm07CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDkg
KzIxMiw5IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldExvY2F0aW9uKGMKICAgICAg
ICAgb3BlblVSTCgpOwogfQogCi1ib29sIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjppc0ZvY3VzYWJs
ZSgpIGNvbnN0Citib29sIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzdXBwb3J0c0ZvY3VzKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gcmVuZGVyZXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9p
ZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0Rm9jdXMoYm9vbCByZWNlaXZlZCkKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3
IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNhbkxhenlBdHRhY2go
KSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Rm9jdXMoYm9vbCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmli
dXRlKEF0dHJpYnV0ZSopIGNvbnN0OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDkgQEAgSFRNTExlZ2VuZEVsZW1lbnQ6On5IVE1M
TGVnZW5kRWxlbWVudCgpCiB7CiB9CiAKLWJvb2wgSFRNTExlZ2VuZEVsZW1lbnQ6OmlzRm9jdXNh
YmxlKCkgY29uc3QKK2Jvb2wgSFRNTExlZ2VuZEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25z
dAogewotICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNGb2N1c2FibGUoKTsKKyAgICByZXR1cm4g
SFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MTGVnZW5kRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MTGVnZW5kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
TGVnZW5kRWxlbWVudC5oCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGVn
ZW5kRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIHB1YmxpYzoKICAg
ICBIVE1MTGVnZW5kRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1M
Rm9ybUVsZW1lbnQqID0gMCk7CiAgICAgdmlydHVhbCB+SFRNTExlZ2VuZEVsZW1lbnQoKTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZv
cm1Db250cm9sVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24o
Ym9vbCBzZW5kVG9BbnlFbGVtZW50KTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91
cEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVt
ZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDE1IEBAIEhUTUxPcHRHcm91cEVs
ZW1lbnQ6OkhUTUxPcHRHcm91cEVsZW1lbnQKICAgICBBU1NFUlQoaGFzVGFnTmFtZShvcHRncm91
cFRhZykpOwogfQogCitib29sIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBj
b25zdAoreworICAgIHJldHVybiBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOworfQorCiBi
b29sIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gSFRNTEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCk7CisgICAgLy8gT3B0Z3JvdXAgZWxlbWVudHMg
ZG8gbm90IGhhdmUgYSByZW5kZXJlciBzbyB3ZSBjaGVjayB0aGUgcmVuZGVyU3R5bGUgaW5zdGVh
ZC4KKyAgICByZXR1cm4gc3VwcG9ydHNGb2N1cygpICYmIHJlbmRlclN0eWxlKCkgJiYgcmVuZGVy
U3R5bGUoKS0+ZGlzcGxheSgpICE9IE5PTkU7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRN
TE9wdEdyb3VwRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxPcHRHcm91cEVsZW1lbnQuaAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRN
TE9wdEdyb3VwRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNh
YmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0
eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNw
cAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Niw5ICs2NiwxNSBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50
OjpkZXRhY2goKQogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRldGFjaCgpOwogfQogCiti
b29sIEhUTUxPcHRpb25FbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKK30KKwogYm9vbCBIVE1MT3B0aW9uRWxl
bWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNG
b2N1c2FibGUoKTsKKyAgICAvLyBPcHRpb24gZWxlbWVudHMgZG8gbm90IGhhdmUgYSByZW5kZXJl
ciBzbyB3ZSBjaGVjayB0aGUgcmVuZGVyU3R5bGUgaW5zdGVhZC4KKyAgICByZXR1cm4gc3VwcG9y
dHNGb2N1cygpICYmIHJlbmRlclN0eWxlKCkgJiYgcmVuZGVyU3R5bGUoKS0+ZGlzcGxheSgpICE9
IE5PTkU7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTE9wdGlvbkVsZW1lbnQ6OmZvcm1D
b250cm9sVHlwZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAkocmV2aXNp
b24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0K
ICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDI7IH0KICAgICB2
aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpOworICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxl
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUq
KSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKSW5kZXg6IFdl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc5LDEyICsxNjc5LDE1IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQoY28KICAgICAgICAgc3dhbGxvd0V2ZW50ID0g
bV9ub2RlVW5kZXJNb3VzZS0+ZGlzcGF0Y2hNb3VzZUV2ZW50KG1vdXNlRXZlbnQsIGV2ZW50VHlw
ZSwgY2xpY2tDb3VudCk7CiAgICAgCiAgICAgaWYgKCFzd2FsbG93RXZlbnQgJiYgZXZlbnRUeXBl
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgeworICAgICAgICAvLyBUaGUgbGF5b3V0
IG5lZWRzIHRvIGJlIHVwIHRvIGRhdGUgdG8gZGV0ZXJtaW5lIGlmIGFuIGVsZW1lbnQgaXMgZm9j
dXNhYmxlLgorICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKKwogICAgICAgICAvLyBCbHVyIGN1cnJlbnQgZm9jdXMgbm9k
ZSB3aGVuIGEgbGluay9idXR0b24gaXMgY2xpY2tlZDsgdGhpcwogICAgICAgICAvLyBpcyBleHBl
Y3RlZCBieSBzb21lIHNpdGVzIHRoYXQgcmVseSBvbiBvbkNoYW5nZSBoYW5kbGVycyBydW5uaW5n
CiAgICAgICAgIC8vIGZyb20gZm9ybSBmaWVsZHMgYmVmb3JlIHRoZSBidXR0b24gY2xpY2sgaXMg
cHJvY2Vzc2VkLgogICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlVW5kZXJNb3VzZS5nZXQoKTsK
ICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUgPyBub2RlLT5yZW5kZXJlcigp
IDogMDsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAvLyBXYWxrIHVwIHRoZSByZW5kZXIg
dHJlZSB0byBzZWFyY2ggZm9yIGEgbm9kZSB0byBmb2N1cy4KICAgICAgICAgLy8gV2Fsa2luZyB1
cCB0aGUgRE9NIHRyZWUgd291bGRuJ3Qgd29yayBmb3Igc2hhZG93IHRyZWVzLCBsaWtlIHRob3Nl
IGJlaGluZCB0aGUgZW5naW5lLWJhc2VkIHRleHQgZmllbGRzLgogICAgICAgICB3aGlsZSAocmVu
ZGVyZXIpIHsKSW5kZXg6IFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0Nzc1MCkK
KysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDYsNiArMTQ2LDggQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyhGb2N1cwog
ICAgIGlmIChjYXJldEJyb3dzaW5nICYmICFjdXJyZW50Tm9kZSkKICAgICAgICAgY3VycmVudE5v
ZGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkubm9kZSgpOwogCisgICAgZG9jdW1lbnQt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCiAgICAgTm9kZSogbm9k
ZSA9IChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKQogICAgICAgICA/IGRvY3Vt
ZW50LT5uZXh0Rm9jdXNhYmxlTm9kZShjdXJyZW50Tm9kZSwgZXZlbnQpCiAgICAgICAgIDogZG9j
dW1lbnQtPnByZXZpb3VzRm9jdXNhYmxlTm9kZShjdXJyZW50Tm9kZSwgZXZlbnQpOwpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R0FFbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSwyMCArMTY1LDE1IEBAIGJvb2wgU1ZHQUVsZW1l
bnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewogICAgIGlmIChpc0NvbnRlbnRFZGl0YWJsZSgp
KQogICAgICAgICByZXR1cm4gU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnN1cHBvcnRz
Rm9jdXMoKTsKLSAgICByZXR1cm4gaXNGb2N1c2FibGUoKSB8fCAoZG9jdW1lbnQoKSAmJiAhZG9j
dW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpOworICAgIHJldHVybiB0cnVlOwogfQog
CiBib29sIFNWR0FFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKGlzQ29u
dGVudEVkaXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6aXNGb2N1c2FibGUoKTsKLSAgICAKLSAgICAvLyBGSVhNRTogRXZlbiBpZiB3ZSBhcmUg
bm90IHZpc2libGUsIHdlIG1pZ2h0IGhhdmUgYSBjaGlsZCB0aGF0IGlzIHZpc2libGUuCi0gICAg
Ly8gRGF2ZSB3YW50cyB0byBmaXggdGhhdCBzb21lIGRheSB3aXRoIGEgImhhcyB2aXNpYmxlIGNv
bnRlbnQiIGZsYWcgb3IgdGhlIGxpa2UuCi0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICEocmVuZGVy
ZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpKQorICAgIGlmIChyZW5kZXJl
cigpICYmIHJlbmRlcmVyKCktPmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVybiAhcmVuZGVyZXIoKS0+
YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkuaXNFbXB0eSgpOworICAgIHJldHVybiBTVkdF
bGVtZW50Ojppc0ZvY3VzYWJsZSgpOwogfQogCiBib29sIFNWR0FFbGVtZW50Ojppc01vdXNlRm9j
dXNhYmxlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysg
V2ViQ29yZS93bWwvV01MQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxNyArNzMs
NyBAQCB2b2lkIFdNTEFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNCiAKIGJvb2wgV01M
QUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiBpc0ZvY3VzYWJs
ZSgpIHx8IChpc0xpbmsoKSAmJiBkb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5oYXZlU3R5bGVz
aGVldHNMb2FkZWQoKSk7Ci19Ci0KLWJvb2wgV01MQUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogRXZlbiBpZiB3ZSBhcmUgbm90IHZpc2libGUsIHdlIG1pZ2h0
IGhhdmUgYSBjaGlsZCB0aGF0IGlzIHZpc2libGUuCi0gICAgLy8gRGF2ZSB3YW50cyB0byBmaXgg
dGhhdCBzb21lIGRheSB3aXRoIGEgImhhcyB2aXNpYmxlIGNvbnRlbnQiIGZsYWcgb3IgdGhlIGxp
a2UuCi0gICAgaWYgKCEoaXNMaW5rKCkgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBpc0xpbmsoKTsKIH0KIAogYm9vbCBXTUxBRWxl
bWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmgJKHJldmlzaW9u
IDQ3NzUwKQorKysgV2ViQ29yZS93bWwvV01MQUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNiBAQCBwdWJsaWM6CiAgICAgV01MQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3Vz
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNL
ZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUv
d21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwv
V01MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL3dt
bC9XTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwx
MSBAQCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5XTUxGb3JtQ29udHJvbEVsCiB7CiB9CiAKK2Jv
b2wgV01MRm9ybUNvbnRyb2xFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxl
KCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmlzQm94KCkp
CkBAIC00NiwxNCArNTEsMTAgQEAgYm9vbCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNh
YmxlKAogCiAgICAgaWYgKHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5zaXplKCkuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0g
cmVuZGVyZXIoKS0+c3R5bGUoKSkgewotICAgICAgICBpZiAoc3R5bGUtPnZpc2liaWxpdHkoKSAh
PSBWSVNJQkxFKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIHJldHVybiBXTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOwogfQor
ICAgIAogCiB2b2lkIFdNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKIHsKSW5kZXg6IFdl
YkNvcmUvd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUv
d21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5k
ZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihib29sIGIgPSB0cnVl
KSB7IG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBiOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNGb2N1cygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0
OwogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDc4MDAp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBA
QAorMjAwOS0wOC0yNiAgRXJpayBBcnZpZHNzb24gIDxhcnZAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTkKKyAgICAgICAgTWFrZSBo
aWRkZW4gZWxlbWVudHMgbm90IGZvY3VzYWJsZS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVlIHdl
IHNob3VsZAorICAgICAgICBub3QgYWxsb3cgdGFiYmluZyB0byBhIGhpZGRlbiBlbGVtZW50Lgor
ICAgICAgICAKKyAgICAgICAgVGhlIHBhdGNoIGFsc28gbWFrZXMgYSBlbGVtZW50IHdpdGhvdXQg
aHJlZiBiZWhhdmUgbGlrZSBnZW5lcmljIGVsZW1lbnRzCisgICAgICAgIHdoZW4gaXQgY29tZXMg
dG8gZm9jdXMuIEFkZGVkIHRlc3RzIHRoYXQgYXNzZXJ0cyB0aGF0IHRoaXMgd29ya3MgYXMKKyAg
ICAgICAgZXhwZWN0ZWQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9jbGljay1mb2N1cy1hbmNo
b3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9jbGljay1mb2N1
cy1hbmNob3IuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL3Rh
YmluZGV4LWZvY3VzLWJsdXItYWxsLmpzOgorICAgICAgICAodGVzdCk6CisgICAgICAgICh0ZXN0
UHJvZ3JhbW1hdGljRm9jdXMpOgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYi1mb2N1cy1hbmNo
b3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90YWItZm9jdXMt
YW5jaG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRk
ZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90YWItZm9jdXMt
aGlkZGVuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYmluZGV4LWZvY3Vz
LWJsdXItYWxsLWV4cGVjdGVkLnR4dDoKKwogMjAwOS0wOC0yNiAgRGF2ZSBIeWF0dCAgPGh5YXR0
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbGF5b3V0IHRlc3QgZm9yIHJlbHBvc2l0aW9uZWQg
aW5saW5lIHJlZ3Jlc3Npb24uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9jbGljay1m
b2N1cy1hbmNob3ItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL2NsaWNrLWZvY3VzLWFuY2hvci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9jbGljay1mb2N1cy1hbmNob3ItZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHRoYXQgd2UgY2Fu
IGNsaWNrIHRvIGZvY3VzIGFuIGEgZWxlbWVudCB3aXRoIGEgdGFiIGluZGV4LiBDbGljayBvbiB0
aGUgZWxlbWVudCBiZWxvdy4KKworRm9jdXNhYmxlCisKK1Jlc3VsdAorCitQQVNTCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9jbGljay1mb2N1cy1hbmNob3IuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9jbGljay1mb2N1cy1hbmNob3IuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2NsaWNrLWZvY3VzLWFuY2hvci5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0VGFiVG9MaW5rcyIsIGZhbHNlKTsK
K30KKword2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFyIGFFbGVtZW50ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3QnKTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVU
byhhRWxlbWVudC5vZmZzZXRMZWZ0ICsgMiwgYUVsZW1lbnQub2Zmc2V0VG9wICsgMik7CisgICAg
ZXZlbnRTZW5kZXIubW91c2VEb3duKCk7ICAgIAorfTsKKworZnVuY3Rpb24gcGFzcygpCit7Cisg
ICAgdmFyIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigncHJlJyk7CisgICAgZWwudGV4dENv
bnRlbnQgPSAnUEFTUyc7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxwPlRo
aXMgdGVzdCBlbnN1cmVzIHRoYXQgd2UgY2FuIGNsaWNrIHRvIGZvY3VzIGFuIGEgZWxlbWVudCB3
aXRoIGEgdGFiIGluZGV4LgorQ2xpY2sgb24gdGhlIGVsZW1lbnQgYmVsb3cuCisKKzxwPjxhIHRh
YmluZGV4PTAgb25mb2N1cz0icGFzcygpIiBpZD10PkZvY3VzYWJsZTwvYT4KKworPHA+UmVzdWx0
CisKKzxwcmU+RkFJTDwvcHJlPgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtYW5jaG9yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtYW5jaG9yLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1hbmNob3It
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK1RoaXMgdGVzdCBlbnN1
cmVzIHRoYXQgd2UgY2FuIHRhYiB0byBhbiBhIGVsZW1lbnQgd2l0aCBhIHRhYiBpbmRleC4gUHJl
c3MgdGFiIHRvIGZvY3VzIHRoZSBlbGVtZW50IGJlbG93LgorCitOb3QgZm9jdXNhYmxlIChnaXZl
biB0aGUgV2ViS2l0VGFiVG9MaW5rcyBwcmVmIGlzIHNldCB0byBmYWxzZSkKKworRm9jdXNhYmxl
CisKK1Jlc3VsdAorCitQQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9j
dXMtYW5jaG9yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFi
LWZvY3VzLWFuY2hvci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdGFiLWZvY3VzLWFuY2hvci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgnV2ViS2l0
VGFiVG9MaW5rcycsIGZhbHNlKTsKK30KKword2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkKK3sK
KyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxOyBpKyspIHsKKyAgICAgICAgZXZlbnRTZW5kZXIu
a2V5RG93bignXHQnKTsKKyAgICB9Cit9OworCitmdW5jdGlvbiBwYXNzKCkKK3sKKyAgICB2YXIg
ZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwcmUnKTsKKyAgICBlbC50ZXh0Q29udGVudCA9
ICdQQVNTJzsKK30KKworZnVuY3Rpb24gZmFpbCgpCit7CisgICAgdmFyIGVsID0gZG9jdW1lbnQu
cXVlcnlTZWxlY3RvcigncHJlJyk7CisgICAgZWwudGV4dENvbnRlbnQgPSAnRkFJTCc7Cit9CisK
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxwPlRoaXMgdGVzdCBlbnN1cmVzIHRoYXQg
d2UgY2FuIHRhYiB0byBhbiBhIGVsZW1lbnQgd2l0aCBhIHRhYiBpbmRleC4gUHJlc3MgdGFiCit0
byBmb2N1cyB0aGUgZWxlbWVudCBiZWxvdy4KKworPHA+PGEgdGFiaW5kZXg9MCBvbmZvY3VzPSJm
YWlsKCkiIGhyZWY9IiMiPk5vdCBmb2N1c2FibGUgKGdpdmVuIHRoZSBXZWJLaXRUYWJUb0xpbmtz
IHByZWYgaXMgc2V0IHRvIGZhbHNlKTwvYT4KKzxwPjxhIHRhYmluZGV4PTAgb25mb2N1cz0icGFz
cygpIj5Gb2N1c2FibGU8L2E+CisKKzxwPlJlc3VsdAorCis8cHJlPkZBSUw8L3ByZT4KKworPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhp
ZGRlbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
dGFiLWZvY3VzLWhpZGRlbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMiBAQAorTGF5b3V0IHRlc3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNzA5OQorCitEaXYgMAorRGl2IDIKK0RpdiA1CitSZXN1bHQKKwor
UEFTUyAtIERpdiAwCitQQVNTIC0gRGl2IDIKK1BBU1MgLSBEaXYgMworUEFTUyAtIERpdiA1CisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVu
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit3aW5kb3cub25sb2Fk
ID0gZnVuY3Rpb24oKQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHsK
KyAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93bignXHQnKTsKKyAgICB9Cit9OworCitmdW5jdGlv
biBwcmludChzKQoreworICAgIHZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ByZScp
OworICAgIGVsLnRleHRDb250ZW50ICs9IHMgKyAnXG4nOworfQorCit2YXIgbmV4dFRvRm9jdXMg
PSAwOworCitkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGZ1bmN0aW9uKGUpIHsK
KyAgICB2YXIgZWwgPSBlLnRhcmdldDsKKyAgICBwcmludCgoZWwuZ2V0QXR0cmlidXRlKCdkYXRh
LXRhYicpID09IG5leHRUb0ZvY3VzID8gJ1BBU1MnIDogJ0ZBSUwnKSArCisgICAgICAgICAgJyAt
ICcgKyBlbC50ZXh0Q29udGVudCk7CisgICAgbmV4dFRvRm9jdXMrKzsKK30sIHRydWUpOworCis8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8cD5MYXlvdXQgdGVzdCBmb3IgPGEgaHJlZj0i
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5IiB0YWJpbmRleD0t
MT5odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTk8L2E+CisKKzxk
aXYgdGFiaW5kZXg9MCBkYXRhLXRhYj0wPkRpdiAwPC9kaXY+Cis8ZGl2IHRhYmluZGV4PTAgc3R5
bGU9ImRpc3BsYXk6bm9uZSI+RGl2IDE8L2Rpdj4KKzxkaXYgdGFiaW5kZXg9MCBkYXRhLXRhYj0x
PkRpdiAyPC9kaXY+Cis8ZGl2IHRhYmluZGV4PTAgZGF0YS10YWI9MiBzdHlsZT0ib3ZlcmZsb3c6
aGlkZGVuO2hlaWdodDowIj5EaXYgMzwvZGl2PgorPGRpdiB0YWJpbmRleD0wIHN0eWxlPSJ2aXNp
YmlsaXR5OmhpZGRlbiI+RGl2IDQ8L2Rpdj4KKzxkaXYgdGFiaW5kZXg9MCBkYXRhLXRhYj0zPkRp
diA1PC9kaXY+CisKKzxwPlJlc3VsdAorCis8cHJlIGlkPW91dD48L3ByZT4KKworPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiaW5kZXgtZm9jdXMtYmx1
ci1hbGwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RhYmluZGV4LWZvY3VzLWJsdXItYWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDc3NTApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbC1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMiArMSwyIEBACi0zMzUgZm9jdXMgLyAzMzUgYmx1
ciBldmVudHMgZGlzYXRjaGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMzNSBQQVNTRUQKKzMyOSBm
b2N1cyAvIDMyOSBibHVyIGV2ZW50cyBkaXNwYXRjaGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMz
NSBQQVNTRUQKIFRvdGFsIG9mIDAgZm9jdXMgdGVzdChzKSBmYWlsZWQuIFBBU1NFRApJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL3RhYmluZGV4LWZvY3VzLWJsdXItYWxs
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy90YWJp
bmRleC1mb2N1cy1ibHVyLWFsbC5qcwkocmV2aXNpb24gNDc3NTApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9yZXNvdXJjZXMvdGFiaW5kZXgtZm9jdXMtYmx1ci1hbGwuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTE4LDcgKzE4LDcgQEAgdmFyIHRhZ05hbWVzQWx3YXlzRm9jdXNlZCA9IFsiQSIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1QiLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiVEVYVEFSRUEiXTsKIAotdmFyIHRhZ05hbWVzVHJhbnNmZXJGb2N1c2Vk
ID0gWyJMQUJFTCJdOyAvLyBsYWJsZXMgYWx3YXlzIHRyYW5zZmVyIGZvY3VzIHRvIHRoZSBsYWJl
bGVkIGVsZW1lbnQKK3ZhciB0YWdOYW1lc1RyYW5zZmVyRm9jdXNlZCA9IFsiTEFCRUwiXTsgLy8g
bGFiZWxzIGFsd2F5cyB0cmFuc2ZlciBmb2N1cyB0byB0aGUgbGFiZWxlZCBlbGVtZW50CiAKIGZ1
bmN0aW9uIHByaW50VG9Db25zb2xlKHN0cikKIHsKQEAgLTQ5LDcgKzQ5LDcgQEAgZnVuY3Rpb24g
dGVzdCgpCiAgICAgdmFyIGhvbWVCYXNlID0gd2luZG93LmZyYW1lc1sxXS5kb2N1bWVudC5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lKCdob21lYmFzZScpOwogICAgIGhvbWVCYXNlWzBdLmZvY3VzKCk7
CiAKLSAgICB2YXIgcmVzdWx0U3VtbWFyeSA9IGZvY3VzQ291bnQrIiBmb2N1cyAvICIrYmx1ckNv
dW50KyIgYmx1ciBldmVudHMgZGlzYXRjaGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMzNSAiOwor
ICAgIHZhciByZXN1bHRTdW1tYXJ5ID0gZm9jdXNDb3VudCsiIGZvY3VzIC8gIitibHVyQ291bnQr
IiBibHVyIGV2ZW50cyBkaXNwYXRjaGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMzNSAiOwogICAg
IHJlc3VsdFN1bW1hcnkgKz0gKGZvY3VzQ291bnQ9PWJsdXJDb3VudCkgPyAiPHNwYW4gc3R5bGU9
J2NvbG9yOmdyZWVuJz5QQVNTRUQ8L3NwYW4+PGJyPiIgOiAiPHNwYW4gc3R5bGU9J2NvbG9yOnJl
ZCc+RkFJTEVEPC9zcGFuPjxicj4iOwogICAgIHJlc3VsdFN1bW1hcnkgKz0gIlRvdGFsIG9mICIr
ZmFpbGVkVGVzdENvdW50KyIgZm9jdXMgdGVzdChzKSBmYWlsZWQuIjsKICAgICBpZiAoZmFpbGVk
VGVzdENvdW50KQpAQCAtMTAzLDggKzEwMywxMCBAQCBmdW5jdGlvbiB0ZXN0UHJvZ3JhbW1hdGlj
Rm9jdXMoZWxlbSkKICAgICBlbHNlIGlmICh0YWdOYW1lc0Fsd2F5c0ZvY3VzZWQuZmluZChlbGVt
LnRhZ05hbWUpKSAvLyBzcGVjaWFsIGNhc2UgZm9ybSBlbGVtZW50cyBhbmQgb3RoZXIgY29udHJv
bHMgdGhhdCBhcmUgYWx3YXlzIGZvY3VzYWJsZQogICAgICAgICBlbGVtVGhhdFNob3VsZEZvY3Vz
ID0gZWxlbTsKICAgICAKLSAgICBpZiAoZWxlbS50YWdOYW1lID09ICJJTlBVVCIgJiYgZWxlbS50
eXBlID09ICJoaWRkZW4iKSAvLyBvYnZpb3VzbHkgc2luY2UgPGlucHV0IHR5cGU9aGlkZGVuPiBp
c24ndCByZW5kZXJlZCwgaXQgY2FuJ3QgYmUgZm9jdXNlZAorICAgIC8vIEhpZGRlbiBlbGVtZW50
cyBzaG91bGQgbm90IGJlIGZvY3VzYWJsZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI3MDk5CisgICAgaWYgKGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVk
U3R5bGUoZWxlbSkuZGlzcGxheSA9PSAibm9uZSIpCiAgICAgICAgIGVsZW1UaGF0U2hvdWxkRm9j
dXMgPSBudWxsOworCiAgICAgaWYgKHRhZ05hbWVzVHJhbnNmZXJGb2N1c2VkLmZpbmQoZWxlbS50
YWdOYW1lKSkgewogICAgICAgICBlbGVtVGhhdFNob3VsZEZvY3VzID0gbnVsbDsKICAgICAgICAg
T0t0b0ZvY3VzT3RoZXJFbGVtZW50ID0gdHJ1ZTsK
</data>
<flag name="review"
          id="19644"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38708</attachid>
            <date>2009-08-27 19:09:45 -0700</date>
            <delta_ts>2009-09-06 22:10:29 -0700</delta_ts>
            <desc>Eric&apos;s comments taken care of</desc>
            <filename>tab-hidden.patch</filename>
            <type>text/plain</type>
            <size>33030</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzgwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzUgQEAKKzIwMDktMDgtMjYgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIGhpZGRlbiBlbGVtZW50cyBub3QgZm9jdXNhYmxlLgorCisgICAgICAgIENsZWFuIHVwIHN1
cHBvcnRzRm9jdXMgYW5kIGlzRm9jdXNhYmxlLgorICAgICAgICBzdXBwb3J0c0ZvY3VzIG5vdyBz
dHJpY3RseSBtZWFucyB0aGF0IHRoZSBub2RlIGNhbiBiZSBmb2N1c2VkIGJ5IGRlZmF1bHQuCisg
ICAgICAgIFRoaXMgaXMgdHJ1ZSBmb3IgbGlua3MsIGZvcm0gY29udHJvbHMgYW5kIGNvbnRlbnQg
ZWRpdGFibGUgZWxlbWVudHMgZm9yIGV4YW1wbGUuCisgICAgICAgIGlzRm9jdXNhYmxlIG1lYW5z
IHRoYXQgdGhlIHVzZXIgY2FuIGFjdHVhbGx5IGZvY3VzIGl0LgorICAgICAgICBBbGwgKDIpIGNh
bGxzIHRvIHN1cHBvcnRzRm9jdXMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGlzIGludG8g
YWNjb3VudC4KKyAgICAgICAgCisgICAgICAgIE1ha2UgYSBlbGVtZW50cyB3aXRob3V0IGhyZWYg
d29yayBjb3JyZWN0bHkgYXMgd2VsbC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTkKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHMvY2xp
Y2stZm9jdXMtYW5jaG9yLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzL3RhYi1mb2N1
cy1hbmNob3IuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRl
bi5odG1sCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50Ojpmb2N1cyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0ZvY3Vz
YWJsZSk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpzdXBwb3J0
c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojppc01vdXNlRm9j
dXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJk
Rm9jdXNhYmxlKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFF
bGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgICogaHRtbC9I
VE1MRmllbGRTZXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnN1cHBv
cnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNG
b2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OnN1cHBvcnRzRm9jdXMpOgorICAg
ICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaDoKKyAgICAgICAgKiBodG1sL0hUTUxM
ZWdlbmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50Ojpz
dXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKiBodG1sL0hUTUxMZWdlbmRFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdEdyb3VwRWxlbWVudDo6aXNGb2N1c2FibGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdEdy
b3VwRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmlzRm9jdXNhYmxlKToKKyAgICAgICAgKiBo
dG1sL0hUTUxPcHRpb25FbGVtZW50Lmg6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQpOgor
ICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
Y3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzKToKKyAgICAgICAgKiBzdmcvU1ZHQUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OmlzRm9jdXNhYmxlKToKKyAgICAgICAgKiB3bWwv
V01MQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MQUVsZW1lbnQ6OnN1cHBvcnRz
Rm9jdXMpOgorICAgICAgICAqIHdtbC9XTUxBRWxlbWVudC5oOgorICAgICAgICAqIHdtbC9XTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MRm9ybUNvbnRyb2xF
bGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OldNTEZvcm1Db250cm9s
RWxlbWVudDo6aXNGb2N1c2FibGUpOgorICAgICAgICAqIHdtbC9XTUxGb3JtQ29udHJvbEVsZW1l
bnQuaDoKKwogMjAwOS0wOC0yNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNp
b24gNDc3NTApCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIyMSwxNCArMTIyMSwyNCBAQCB2b2lkIEVsZW1lbnQ6OmZvY3VzKGJvb2wgcmVzdG9yZVByZXZp
b3VzCiAgICAgaWYgKGRvYy0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQogICAgICAgICByZXR1cm47
CiAKLSAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAg
IAogICAgIGlmICghc3VwcG9ydHNGb2N1cygpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAg
ICAvLyBJZiB0aGUgc3R5bGVzaGVldHMgaGF2ZSBhbHJlYWR5IGJlZW4gbG9hZGVkIHdlIGNhbiBy
ZWxpYWJseSBjaGVjayBpc0ZvY3VzYWJsZS4KKyAgICAvLyBJZiBub3QsIHdlIGNvbnRpbnVlIGFu
ZCBzZXQgdGhlIGZvY3VzZWQgbm9kZSBvbiB0aGUgZm9jdXMgY29udHJvbGxlciBiZWxvdyBzbwor
ICAgIC8vIHRoYXQgaXQgY2FuIGJlIHVwZGF0ZWQgc29vbiBhZnRlciBhdHRhY2guIAorICAgIGlm
IChkb2MtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKSB7CisgICAgICAgIGRvYy0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgIGlmICghaXNGb2N1c2FibGUo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoUGFnZSogcGFnZSA9IGRv
Yy0+cGFnZSgpKQogICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZE5v
ZGUodGhpcywgZG9jLT5mcmFtZSgpKTsKIAorICAgIC8vIFNldHRpbmcgdGhlIGZvY3VzZWQgbm9k
ZSBhYm92ZSBtaWdodCBoYXZlIGludmFsaWRhdGVkIHRoZSBsYXlvdXQgZHVlIHRvIHNjcmlwdHMu
CisgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKwogICAg
IGlmICghaXNGb2N1c2FibGUoKSkgewogICAgICAgICBlbnN1cmVSYXJlRGF0YSgpLT5zZXROZWVk
c0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaCh0cnVlKTsKICAgICAgICAgcmV0
dXJuOwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyOCwxMCArODI4LDI4IEBAIGJvb2wgTm9kZTo6cmFyZURhdGFGb2N1
c2VkKCkgY29uc3QKICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CiAgICAgcmV0dXJuIHJhcmVE
YXRhKCktPmlzRm9jdXNlZCgpOwogfQorCitib29sIE5vZGU6OnN1cHBvcnRzRm9jdXMoKSBjb25z
dAoreworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpICYmIHJhcmVEYXRhKCktPnRhYkluZGV4U2V0
RXhwbGljaXRseSgpOworfQogICAgIAogYm9vbCBOb2RlOjppc0ZvY3VzYWJsZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+dGFiSW5kZXhTZXRFeHBs
aWNpdGx5KCk7CisgICAgaWYgKCFpbkRvY3VtZW50KCkgfHwgIXN1cHBvcnRzRm9jdXMoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICBB
U1NFUlQoIXJlbmRlcmVyKCktPm5lZWRzTGF5b3V0KCkpOworICAgIGVsc2UKKyAgICAgICAgQVNT
RVJUKCFuZWVkc1N0eWxlUmVjYWxjKCkpOworICAgIAorICAgIC8vIEZJWE1FOiBFdmVuIGlmIHdl
IGFyZSBub3QgdmlzaWJsZSwgd2UgbWlnaHQgaGF2ZSBhIGNoaWxkIHRoYXQgaXMgdmlzaWJsZS4K
KyAgICAvLyBIeWF0dCB3YW50cyB0byBmaXggdGhhdCBzb21lIGRheSB3aXRoIGEgImhhcyB2aXNp
YmxlIGNvbnRlbnQiIGZsYWcgb3IgdGhlIGxpa2UuCisgICAgaWYgKCFyZW5kZXJlcigpIHx8IHJl
bmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBOb2RlOjppc0tleWJvYXJk
Rm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdApJbmRleDogV2ViQ29yZS9kb20vTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gNDc3NTApCisrKyBX
ZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4NywxMCArMjg3LDEwIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKIAotICAgIC8qKgot
ICAgICAqIFdoZXRoZXIgdGhpcyBub2RlIGNhbiByZWNlaXZlIHRoZSBrZXlib2FyZCBmb2N1cy4K
LSAgICAgKi8KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0IHsgcmV0dXJu
IGlzRm9jdXNhYmxlKCk7IH0KKyAgICAvLyBXaGV0aGVyIHRoaXMga2luZCBvZiBub2RlIGNhbiBy
ZWNlaXZlIGZvY3VzIGJ5IGRlZmF1bHQuIE1vc3Qgbm9kZXMgYXJlCisgICAgLy8gbm90IGZvY3Vz
YWJsZSBidXQgc29tZSBlbGVtZW50cywgc3VjaCBhcyBmb3JtIGNvbnRyb2xzIGFuZCBsaW5rcyBh
cmUuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKKyAgICAvLyBXaGV0
aGVyIHRoZSBub2RlIGNhbiBhY3R1YWxseSBiZSBmb2N1c2VkLgogICAgIHZpcnR1YWwgYm9vbCBp
c0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxl
KEtleWJvYXJkRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJs
ZSgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiA0
Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDMzICs2MCwyNiBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50OjpzdXBwb3J0c0Zv
Y3VzKCkgCiB7CiAgICAgaWYgKGlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBI
VE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwotICAgIHJldHVybiBpc0ZvY3VzYWJsZSgpIHx8
IChpc0xpbmsoKSAmJiBkb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNM
b2FkZWQoKSk7Ci19Ci0KLWJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29u
c3QKLXsKLSAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIEhUTUxF
bGVtZW50Ojppc0ZvY3VzYWJsZSgpOwotCi0gICAgLy8gRklYTUU6IEV2ZW4gaWYgd2UgYXJlIG5v
dCB2aXNpYmxlLCB3ZSBtaWdodCBoYXZlIGEgY2hpbGQgdGhhdCBpcyB2aXNpYmxlLgotICAgIC8v
IERhdmUgd2FudHMgdG8gZml4IHRoYXQgc29tZSBkYXkgd2l0aCBhICJoYXMgdmlzaWJsZSBjb250
ZW50IiBmbGFnIG9yIHRoZSBsaWtlLgotICAgIGlmICghKGlzTGluaygpICYmIHJlbmRlcmVyKCkg
JiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBJZiBub3QgYSBsaW5r
IHdlIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIGZvY3VzIHRoZSBlbGVtZW50IGlmIGl0IGhhcyB0
YWJJbmRleC4KKyAgICByZXR1cm4gaXNMaW5rKCkgfHwgSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9j
dXMoKTsKIH0KIAogYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNv
bnN0CiB7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNNb3Vz
ZUZvY3VzYWJsZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gQW5jaG9yIGVs
ZW1lbnRzIHNob3VsZCBiZSBtb3VzZSBmb2N1c2FibGUsIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNjg1NgorI2lmICFQTEFURk9STShHVEspCisgICAgaWYgKGlzTGlu
aygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKKyAgICAvLyBBbGxvdyB0YWIgaW5k
ZXggZXRjIHRvIGNvbnRyb2wgZm9jdXMuCisgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc01vdXNl
Rm9jdXNhYmxlKCk7CiB9CiAKIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1
c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiB7CisgICAgaWYgKCFpc0xpbmsoKSkK
KyAgICAgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KTsK
KwogICAgIGlmICghaXNGb2N1c2FibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDYg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShib29sIGFjdGl2ZSA9
IHRydWUsIGJvb2wgcGF1c2UgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFj
dGlvbihib29sIGZ1bGxBY3Rpb24pOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2Miw5ICsxNjIsMTAgQEAgdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldE5v
SHJlZihib29sIG5vSAogICAgIHNldEF0dHJpYnV0ZShub2hyZWZBdHRyLCBub0hyZWYgPyAiIiA6
IDApOwogfQogCi1ib29sIEhUTUxBcmVhRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAorYm9v
bCBIVE1MQXJlYUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiBI
VE1MRWxlbWVudDo6aXNGb2N1c2FibGUoKTsKKyAgICAvLyBTa2lwIEhUTUxBbmNob3JFbGVtZW50
cyBpc0xpbmsoKSBjaGVjay4KKyAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMo
KTsKIH0KIAogU3RyaW5nIEhUTUxBcmVhRWxlbWVudDo6dGFyZ2V0KCkgY29uc3QKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEFyZWFFbGVtZW50LmgJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxB
cmVhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSopOwotICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBT
dHJpbmcgdGFyZ2V0KCkgY29uc3Q7CiAKICAgICBlbnVtIFNoYXBlIHsgRGVmYXVsdCwgUG9seSwg
UmVjdCwgQ2lyY2xlLCBVbmtub3duIH07CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9u
IDQ3NzUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjAxLDkgKzYwMSw5IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFkZEhUTUxBbGlnbm1lbnRUb1N0
eWwKICAgICAgICAgZWxlbWVudC0+YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlWZXJ0
aWNhbEFsaWduLCB2ZXJ0aWNhbEFsaWduVmFsdWUpOwogfQogCi1ib29sIEhUTUxFbGVtZW50Ojpp
c0ZvY3VzYWJsZSgpIGNvbnN0Citib29sIEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gRWxlbWVudDo6aXNGb2N1c2FibGUoKSB8fCAoaXNDb250ZW50RWRp
dGFibGUoKSAmJiBwYXJlbnQoKSAmJiAhcGFyZW50KCktPmlzQ29udGVudEVkaXRhYmxlKCkpOwor
ICAgIHJldHVybiBFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgfHwgKGlzQ29udGVudEVkaXRhYmxl
KCkgJiYgcGFyZW50KCkgJiYgIXBhcmVudCgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKIH0KIAog
Ym9vbCBIVE1MRWxlbWVudDo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdCAKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5oCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc2VydEFk
amFjZW50SFRNTChjb25zdCBTdHJpbmcmIHdoZXJlLCBjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2b2lkIGluc2VydEFkamFjZW50VGV4dChjb25zdCBTdHJpbmcmIHdo
ZXJlLCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CisgICAgCiAgICAgdmlydHVhbCBib29sIGlzQ29u
dGVudEVkaXRhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudFJpY2hseUVk
aXRhYmxlKCkgY29uc3Q7CiAKQEAgLTg3LDggKzg5LDYgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1
c2FibGUoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoTm9kZSogbmV3
Q2hpbGQpOyAvLyBFcnJvci1jaGVja2luZyBkdXJpbmcgcGFyc2luZyB0aGF0IGNoZWNrcyB0aGUg
RFRECiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIERURCBmb3IgYSBnaXZl
biBjaGlsZCBub2RlLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkocmV2
aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDkgQEAgYm9vbCBIVE1MRmllbGRTZXRFbGVtZW50Ojpj
aGVja0RURChjb25zdAogICAgIHJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShsZWdlbmRUYWcp
IHx8IEhUTUxFbGVtZW50OjpjaGVja0RURChuZXdDaGlsZCk7CiB9CiAKLWJvb2wgSFRNTEZpZWxk
U2V0RWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAorYm9vbCBIVE1MRmllbGRTZXRFbGVtZW50
OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzRm9j
dXNhYmxlKCk7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCk7CiB9CiAK
IGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTEZpZWxkU2V0RWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBl
KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaAkocmV2aXNpb24gNDc3
NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIDM7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9k
ZSogbmV3Q2hpbGQpOwogCi0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKIApJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDc3
NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMiwxMyArMjMyLDE5IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
cmVjYWxjU3R5bGUKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0K
IAorYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIWRpc2FibGVkKCk7Cit9CisKIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIGlmIChkaXNhYmxlZCgpIHx8ICFyZW5kZXJl
cigpIHx8IAotICAgICAgICAocmVuZGVyZXIoKS0+c3R5bGUoKSAmJiByZW5kZXJlcigpLT5zdHls
ZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkgfHwgCisgICAgaWYgKCFyZW5kZXJlcigpIHx8
IAogICAgICAgICAhcmVuZGVyZXIoKS0+aXNCb3goKSB8fCB0b1JlbmRlckJveChyZW5kZXJlcigp
KS0+c2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0
cnVlOworICAgIC8vIEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSBoYW5kbGVzIHZpc2liaWxpdHkg
YW5kIGNhbGxzIHN1cG9ydHNGb2N1cyB3aGljaAorICAgIC8vIHdpbGwgY292ZXIgdGhlIGRpc2Fi
bGVkIGNhc2UuCisgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOwogfQogCiBi
b29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRF
dmVudCogZXZlbnQpIGNvbnN0CkBAIC0zMDQsMTEgKzMxMCw2IEBAIHZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6ZGlzcGF0Y2hCbHUKICAgICBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZl
bnQoKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gaXNGb2N1c2FibGUoKSB8fCAoIWRpc2FibGVkKCkgJiYgIWRv
Y3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKTsKLX0KLQogSFRNTEZvcm1FbGVtZW50
KiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2aXJ0dWFsRm9ybSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fZm9ybTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkocmV2
aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTIsOSArMjEyLDkgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFz
ZTo6c2V0TG9jYXRpb24oYwogICAgICAgICBvcGVuVVJMKCk7CiB9CiAKLWJvb2wgSFRNTEZyYW1l
RWxlbWVudEJhc2U6OmlzRm9jdXNhYmxlKCkgY29uc3QKK2Jvb2wgSFRNTEZyYW1lRWxlbWVudEJh
c2U6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiByZW5kZXJlcigpOworICAg
IHJldHVybiB0cnVlOwogfQogCiB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRGb2N1cyhi
b29sIHJlY2VpdmVkKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmgJKHJldmlz
aW9uIDQ3NzUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgY2FuTGF6eUF0dGFjaCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1
cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKICAgICAKICAgICB2
aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MTGVnZW5kRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9odG1s
L0hUTUxMZWdlbmRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIsOSBAQCBI
VE1MTGVnZW5kRWxlbWVudDo6fkhUTUxMZWdlbmRFbGVtZW50KCkKIHsKIH0KIAotYm9vbCBIVE1M
TGVnZW5kRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAorYm9vbCBIVE1MTGVnZW5kRWxlbWVu
dDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc0Zv
Y3VzYWJsZSgpOworICAgIHJldHVybiBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwogfQog
CiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxMZWdlbmRFbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUo
KSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmgJKHJldmlzaW9uIDQ3NzUwKQor
KysgV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAgcHVibGljOgogICAgIEhUTUxMZWdlbmRFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKICAgICB2aXJ0dWFsIH5I
VE1MTGVnZW5kRWxlbWVudCgpOwogCi0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1lbnQpOwogCkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSAr
NDQsMTUgQEAgSFRNTE9wdEdyb3VwRWxlbWVudDo6SFRNTE9wdEdyb3VwRWxlbWVudAogICAgIEFT
U0VSVChoYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSk7CiB9CiAKK2Jvb2wgSFRNTE9wdEdyb3VwRWxl
bWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojpz
dXBwb3J0c0ZvY3VzKCk7Cit9CisKIGJvb2wgSFRNTE9wdEdyb3VwRWxlbWVudDo6aXNGb2N1c2Fi
bGUoKSBjb25zdAogewotICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNGb2N1c2FibGUoKTsKKyAg
ICAvLyBPcHRncm91cCBlbGVtZW50cyBkbyBub3QgaGF2ZSBhIHJlbmRlcmVyIHNvIHdlIGNoZWNr
IHRoZSByZW5kZXJTdHlsZSBpbnN0ZWFkLgorICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKCkgJiYg
cmVuZGVyU3R5bGUoKSAmJiByZW5kZXJTdHlsZSgpLT5kaXNwbGF5KCkgIT0gTk9ORTsKIH0KIAog
Y29uc3QgQXRvbWljU3RyaW5nJiBIVE1MT3B0R3JvdXBFbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUo
KSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oCShyZXZpc2lvbiA0Nzc1
MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDYgKzM3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNv
bnN0IE5vZGUqKTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xU
eXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29sIHJl
bmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDkgKzY2LDE1IEBA
IHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmRldGFjaCgpCiAgICAgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6ZGV0YWNoKCk7CiB9CiAKK2Jvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OnN1cHBvcnRzRm9j
dXMoKSBjb25zdAoreworICAgIHJldHVybiBIVE1MRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwor
fQorCiBib29sIEhUTUxPcHRpb25FbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOworICAgIC8vIE9wdGlvbiBlbGVtZW50
cyBkbyBub3QgaGF2ZSBhIHJlbmRlcmVyIHNvIHdlIGNoZWNrIHRoZSByZW5kZXJTdHlsZSBpbnN0
ZWFkLgorICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKCkgJiYgcmVuZGVyU3R5bGUoKSAmJiByZW5k
ZXJTdHlsZSgpLT5kaXNwbGF5KCkgIT0gTk9ORTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MT3B0aW9uRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
T3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVy
biBUYWdTdGF0dXNPcHRpb25hbDsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gMjsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBu
ZXdDaGlsZCk7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVy
ZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaCgpOwpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDQ3NzUwKQor
KysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nzks
MTIgKzE2NzksMTUgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudChjbwog
ICAgICAgICBzd2FsbG93RXZlbnQgPSBtX25vZGVVbmRlck1vdXNlLT5kaXNwYXRjaE1vdXNlRXZl
bnQobW91c2VFdmVudCwgZXZlbnRUeXBlLCBjbGlja0NvdW50KTsKICAgICAKICAgICBpZiAoIXN3
YWxsb3dFdmVudCAmJiBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7
CisgICAgICAgIC8vIFRoZSBsYXlvdXQgbmVlZHMgdG8gYmUgdXAgdG8gZGF0ZSB0byBkZXRlcm1p
bmUgaWYgYW4gZWxlbWVudCBpcyBmb2N1c2FibGUuCisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCiAgICAgICAgIC8v
IEJsdXIgY3VycmVudCBmb2N1cyBub2RlIHdoZW4gYSBsaW5rL2J1dHRvbiBpcyBjbGlja2VkOyB0
aGlzCiAgICAgICAgIC8vIGlzIGV4cGVjdGVkIGJ5IHNvbWUgc2l0ZXMgdGhhdCByZWx5IG9uIG9u
Q2hhbmdlIGhhbmRsZXJzIHJ1bm5pbmcKICAgICAgICAgLy8gZnJvbSBmb3JtIGZpZWxkcyBiZWZv
cmUgdGhlIGJ1dHRvbiBjbGljayBpcyBwcm9jZXNzZWQuCiAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X25vZGVVbmRlck1vdXNlLmdldCgpOwogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiAwOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAg
IC8vIFdhbGsgdXAgdGhlIHJlbmRlciB0cmVlIHRvIHNlYXJjaCBmb3IgYSBub2RlIHRvIGZvY3Vz
LgogICAgICAgICAvLyBXYWxraW5nIHVwIHRoZSBET00gdHJlZSB3b3VsZG4ndCB3b3JrIGZvciBz
aGFkb3cgdHJlZXMsIGxpa2UgdGhvc2UgYmVoaW5kIHRoZSBlbmdpbmUtYmFzZWQgdGV4dCBmaWVs
ZHMuCiAgICAgICAgIHdoaWxlIChyZW5kZXJlcikgewpJbmRleDogV2ViQ29yZS9wYWdlL0ZvY3Vz
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDQ3NzUwKQorKysgV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw2ICsxNDYsOCBAQCBib29sIEZvY3VzQ29udHJvbGxl
cjo6YWR2YW5jZUZvY3VzKEZvY3VzCiAgICAgaWYgKGNhcmV0QnJvd3NpbmcgJiYgIWN1cnJlbnRO
b2RlKQogICAgICAgICBjdXJyZW50Tm9kZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5u
b2RlKCk7CiAKKyAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CisKICAgICBOb2RlKiBub2RlID0gKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZv
cndhcmQpCiAgICAgICAgID8gZG9jdW1lbnQtPm5leHRGb2N1c2FibGVOb2RlKGN1cnJlbnROb2Rl
LCBldmVudCkKICAgICAgICAgOiBkb2N1bWVudC0+cHJldmlvdXNGb2N1c2FibGVOb2RlKGN1cnJl
bnROb2RlLCBldmVudCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzc1MCkKKysr
IFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDIwICsx
NjUsMTUgQEAgYm9vbCBTVkdBRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7CiAgICAg
aWYgKGlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpOwotICAgIHJldHVybiBpc0ZvY3VzYWJsZSgp
IHx8IChkb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHQUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkg
Y29uc3QKIHsKLSAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOwotICAgIAotICAgIC8v
IEZJWE1FOiBFdmVuIGlmIHdlIGFyZSBub3QgdmlzaWJsZSwgd2UgbWlnaHQgaGF2ZSBhIGNoaWxk
IHRoYXQgaXMgdmlzaWJsZS4KLSAgICAvLyBEYXZlIHdhbnRzIHRvIGZpeCB0aGF0IHNvbWUgZGF5
IHdpdGggYSAiaGFzIHZpc2libGUgY29udGVudCIgZmxhZyBvciB0aGUgbGlrZS4KLSAgICBpZiAo
IXJlbmRlcmVyKCkgfHwgIShyZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklT
SUJMRSkpCisgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+YWJzb2x1dGVDbGlwcGVk
T3ZlcmZsb3dSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgcmV0dXJuICFyZW5kZXJlcigpLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKS5pc0Vt
cHR5KCk7CisgICAgcmV0dXJuIFNWR0VsZW1lbnQ6OmlzRm9jdXNhYmxlKCk7CiB9CiAKIGJvb2wg
U1ZHQUVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdApJbmRleDogV2ViQ29yZS93bWwv
V01MQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmNw
cAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTczLDE3ICs3Myw3IEBAIHZvaWQgV01MQUVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE0KIAogYm9vbCBXTUxBRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGlzRm9jdXNhYmxlKCkgfHwgKGlzTGluaygpICYmIGRvY3VtZW50KCkgJiYg
IWRvY3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKTsKLX0KLQotYm9vbCBXTUxBRWxl
bWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBFdmVuIGlmIHdlIGFy
ZSBub3QgdmlzaWJsZSwgd2UgbWlnaHQgaGF2ZSBhIGNoaWxkIHRoYXQgaXMgdmlzaWJsZS4KLSAg
ICAvLyBEYXZlIHdhbnRzIHRvIGZpeCB0aGF0IHNvbWUgZGF5IHdpdGggYSAiaGFzIHZpc2libGUg
Y29udGVudCIgZmxhZyBvciB0aGUgbGlrZS4KLSAgICBpZiAoIShpc0xpbmsoKSAmJiByZW5kZXJl
cigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGlzTGlu
aygpIHx8IFdNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKIH0KIAogYm9vbCBXTUxBRWxlbWVu
dDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmgJKHJldmlzaW9uIDQ3
NzUwKQorKysgV2ViQ29yZS93bWwvV01MQUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsNiBAQCBwdWJsaWM6CiAgICAgV01MQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXli
b2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvd21s
L1dNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTApCisrKyBXZWJDb3JlL3dtbC9X
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxMSBA
QCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5XTUxGb3JtQ29udHJvbEVsCiB7CiB9CiAKK2Jvb2wg
V01MRm9ybUNvbnRyb2xFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogYm9vbCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkg
Y29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmlzQm94KCkpCkBA
IC00NiwxNCArNTEsMTAgQEAgYm9vbCBXTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxl
KAogCiAgICAgaWYgKHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5zaXplKCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVu
ZGVyZXIoKS0+c3R5bGUoKSkgewotICAgICAgICBpZiAoc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBW
SVNJQkxFKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOworICAgIAorICAgIHJldHVybiBXTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOwogfQorICAg
IAogCiB2b2lkIFdNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKIHsKSW5kZXg6IFdlYkNv
cmUvd21sL1dNTEZvcm1Db250cm9sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21s
L1dNTEZvcm1Db250cm9sRWxlbWVudC5oCShyZXZpc2lvbiA0Nzc1MCkKKysrIFdlYkNvcmUvd21s
L1dNTEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihib29sIGIgPSB0cnVlKSB7
IG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBiOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNGb2N1cygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDc4MDApCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAor
MjAwOS0wOC0yNiAgRXJpayBBcnZpZHNzb24gIDxhcnZAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIGZvciBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTkKKyAgICAgICAgTWFrZSBoaWRk
ZW4gZWxlbWVudHMgbm90IGZvY3VzYWJsZS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVlIHdlIHNo
b3VsZAorICAgICAgICBub3QgYWxsb3cgdGFiYmluZyB0byBhIGhpZGRlbiBlbGVtZW50LgorICAg
ICAgICAKKyAgICAgICAgVGhlIHBhdGNoIGFsc28gbWFrZXMgYSBlbGVtZW50IHdpdGhvdXQgaHJl
ZiBiZWhhdmUgbGlrZSBnZW5lcmljIGVsZW1lbnRzCisgICAgICAgIHdoZW4gaXQgY29tZXMgdG8g
Zm9jdXMuIEFkZGVkIHRlc3RzIHRoYXQgYXNzZXJ0cyB0aGF0IHRoaXMgd29ya3MgYXMKKyAgICAg
ICAgZXhwZWN0ZWQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9jbGljay1mb2N1cy1hbmNob3It
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9jbGljay1mb2N1cy1h
bmNob3IuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvcmVzb3VyY2VzL3RhYmlu
ZGV4LWZvY3VzLWJsdXItYWxsLmpzOgorICAgICAgICAodGVzdCk6CisgICAgICAgICh0ZXN0UHJv
Z3JhbW1hdGljRm9jdXMpOgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYi1mb2N1cy1hbmNob3It
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90YWItZm9jdXMtYW5j
aG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4t
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy90YWItZm9jdXMtaGlk
ZGVuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RhYmluZGV4LWZvY3VzLWJs
dXItYWxsLWV4cGVjdGVkLnR4dDoKKwogMjAwOS0wOC0yNiAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgbGF5b3V0IHRlc3QgZm9yIHJlbHBvc2l0aW9uZWQgaW5s
aW5lIHJlZ3Jlc3Npb24uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9jbGljay1mb2N1
cy1hbmNob3ItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL2NsaWNrLWZvY3VzLWFuY2hvci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9jbGljay1mb2N1cy1hbmNob3ItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHRoYXQgd2UgY2FuIGNs
aWNrIHRvIGZvY3VzIGFuIGEgZWxlbWVudCB3aXRoIGEgdGFiIGluZGV4LiBDbGljayBvbiB0aGUg
ZWxlbWVudCBiZWxvdy4KKworRm9jdXNhYmxlCisKK1Jlc3VsdAorCitQQVNTCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9jbGljay1mb2N1cy1hbmNob3IuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9jbGljay1mb2N1cy1hbmNob3IuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2NsaWNrLWZvY3VzLWFuY2hvci5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHA+VGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCB3ZSBj
YW4gY2xpY2sgdG8gZm9jdXMgYW4gYSBlbGVtZW50IHdpdGggYSB0YWIgaW5kZXguCitDbGljayBv
biB0aGUgZWxlbWVudCBiZWxvdy4KKworPHA+PGEgdGFiaW5kZXg9MCBvbmZvY3VzPSJwYXNzKCki
IGlkPXQ+Rm9jdXNhYmxlPC9hPgorCis8cD5SZXN1bHQKKworPHByZT5GQUlMPC9wcmU+CisKKzxz
Y3JpcHQ+CisKK2Z1bmN0aW9uIHBhc3MoKQoreworICAgIHZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3IoJ3ByZScpOworICAgIGVsLnRleHRDb250ZW50ID0gJ1BBU1MnOworfQorCitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5j
ZSgiV2ViS2l0VGFiVG9MaW5rcyIsIGZhbHNlKTsKK30KKword2luZG93Lm9ubG9hZCA9IGZ1bmN0
aW9uKCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgdmFyIGFFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Qn
KTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhhRWxlbWVudC5vZmZzZXRMZWZ0ICsgMiwg
YUVsZW1lbnQub2Zmc2V0VG9wICsgMik7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7ICAg
IAorfTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy90YWItZm9jdXMtYW5jaG9yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtYW5jaG9yLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1hbmNob3ItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK1RoaXMgdGVzdCBlbnN1cmVz
IHRoYXQgd2UgY2FuIHRhYiB0byBhbiBhIGVsZW1lbnQgd2l0aCBhIHRhYiBpbmRleC4gUHJlc3Mg
dGFiIHRvIGZvY3VzIHRoZSBlbGVtZW50IGJlbG93LgorCitOb3QgZm9jdXNhYmxlIChnaXZlbiB0
aGUgV2ViS2l0VGFiVG9MaW5rcyBwcmVmIGlzIHNldCB0byBmYWxzZSkKKworRm9jdXNhYmxlCisK
K1Jlc3VsdAorCitQQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMt
YW5jaG9yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiLWZv
Y3VzLWFuY2hvci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
dGFiLWZvY3VzLWFuY2hvci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBwYXNzKCkK
K3sKKyAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwcmUnKTsKKyAgICBlbC50
ZXh0Q29udGVudCA9ICdQQVNTJzsKK30KKworZnVuY3Rpb24gZmFpbCgpCit7CisgICAgdmFyIGVs
ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigncHJlJyk7CisgICAgZWwudGV4dENvbnRlbnQgPSAn
RkFJTCc7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
b3ZlcnJpZGVQcmVmZXJlbmNlKCdXZWJLaXRUYWJUb0xpbmtzJywgZmFsc2UpOworfQorCit3aW5k
b3cub25sb2FkID0gZnVuY3Rpb24oKQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE7IGkr
KykgeworICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCdcdCcpOworICAgIH0KK307CisKKzwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxwPlRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgd2Ug
Y2FuIHRhYiB0byBhbiBhIGVsZW1lbnQgd2l0aCBhIHRhYiBpbmRleC4gUHJlc3MgdGFiCit0byBm
b2N1cyB0aGUgZWxlbWVudCBiZWxvdy4KKworPHA+PGEgdGFiaW5kZXg9MCBvbmZvY3VzPSJmYWls
KCkiIGhyZWY9IiMiPk5vdCBmb2N1c2FibGUgKGdpdmVuIHRoZSBXZWJLaXRUYWJUb0xpbmtzIHBy
ZWYgaXMgc2V0IHRvIGZhbHNlKTwvYT4KKzxwPjxhIHRhYmluZGV4PTAgb25mb2N1cz0icGFzcygp
Ij5Gb2N1c2FibGU8L2E+CisKKzxwPlJlc3VsdAorCis8cHJlPkZBSUw8L3ByZT4KKworPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiLWZvY3VzLWhpZGRl
bi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFi
LWZvY3VzLWhpZGRlbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMiBAQAorTGF5b3V0IHRlc3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNzA5OQorCitEaXYgMAorRGl2IDIKK0RpdiA1CitSZXN1bHQKKworUEFT
UyAtIERpdiAwCitQQVNTIC0gRGl2IDIKK1BBU1MgLSBEaXYgMworUEFTUyAtIERpdiA1CisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RhYi1mb2N1cy1oaWRkZW4uaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWItZm9jdXMtaGlkZGVuLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit3aW5kb3cub25sb2FkID0g
ZnVuY3Rpb24oKQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAg
ICAgICAgZXZlbnRTZW5kZXIua2V5RG93bignXHQnKTsKKyAgICB9Cit9OworCitmdW5jdGlvbiBw
cmludChzKQoreworICAgIHZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ByZScpOwor
ICAgIGVsLnRleHRDb250ZW50ICs9IHMgKyAnXG4nOworfQorCit2YXIgbmV4dFRvRm9jdXMgPSAw
OworCitkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGZ1bmN0aW9uKGUpIHsKKyAg
ICB2YXIgZWwgPSBlLnRhcmdldDsKKyAgICBwcmludCgoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXRh
YicpID09IG5leHRUb0ZvY3VzID8gJ1BBU1MnIDogJ0ZBSUwnKSArCisgICAgICAgICAgJyAtICcg
KyBlbC50ZXh0Q29udGVudCk7CisgICAgbmV4dFRvRm9jdXMrKzsKK30sIHRydWUpOworCis8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8cD5MYXlvdXQgdGVzdCBmb3IgPGEgaHJlZj0iaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk5IiB0YWJpbmRleD0tMT5o
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcwOTk8L2E+CisKKzxkaXYg
dGFiaW5kZXg9MCBkYXRhLXRhYj0wPkRpdiAwPC9kaXY+Cis8ZGl2IHRhYmluZGV4PTAgc3R5bGU9
ImRpc3BsYXk6bm9uZSI+RGl2IDE8L2Rpdj4KKzxkaXYgdGFiaW5kZXg9MCBkYXRhLXRhYj0xPkRp
diAyPC9kaXY+Cis8ZGl2IHRhYmluZGV4PTAgZGF0YS10YWI9MiBzdHlsZT0ib3ZlcmZsb3c6aGlk
ZGVuO2hlaWdodDowIj5EaXYgMzwvZGl2PgorPGRpdiB0YWJpbmRleD0wIHN0eWxlPSJ2aXNpYmls
aXR5OmhpZGRlbiI+RGl2IDQ8L2Rpdj4KKzxkaXYgdGFiaW5kZXg9MCBkYXRhLXRhYj0zPkRpdiA1
PC9kaXY+CisKKzxwPlJlc3VsdAorCis8cHJlIGlkPW91dD48L3ByZT4KKworPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdGFiaW5kZXgtZm9jdXMtYmx1ci1h
bGwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Rh
YmluZGV4LWZvY3VzLWJsdXItYWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDc3NTApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbC1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMiArMSwyIEBACi0zMzUgZm9jdXMgLyAzMzUgYmx1ciBl
dmVudHMgZGlzYXRjaGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMzNSBQQVNTRUQKKzMyOSBmb2N1
cyAvIDMyOSBibHVyIGV2ZW50cyBkaXNwYXRjaGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMzNSBQ
QVNTRUQKIFRvdGFsIG9mIDAgZm9jdXMgdGVzdChzKSBmYWlsZWQuIFBBU1NFRApJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvcmVzb3VyY2VzL3RhYmluZGV4LWZvY3VzLWJsdXItYWxsLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Jlc291cmNlcy90YWJpbmRl
eC1mb2N1cy1ibHVyLWFsbC5qcwkocmV2aXNpb24gNDc3NTApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9yZXNvdXJjZXMvdGFiaW5kZXgtZm9jdXMtYmx1ci1hbGwuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTE4LDcgKzE4LDcgQEAgdmFyIHRhZ05hbWVzQWx3YXlzRm9jdXNlZCA9IFsiQSIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1QiLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiVEVYVEFSRUEiXTsKIAotdmFyIHRhZ05hbWVzVHJhbnNmZXJGb2N1c2VkID0g
WyJMQUJFTCJdOyAvLyBsYWJsZXMgYWx3YXlzIHRyYW5zZmVyIGZvY3VzIHRvIHRoZSBsYWJlbGVk
IGVsZW1lbnQKK3ZhciB0YWdOYW1lc1RyYW5zZmVyRm9jdXNlZCA9IFsiTEFCRUwiXTsgLy8gbGFi
ZWxzIGFsd2F5cyB0cmFuc2ZlciBmb2N1cyB0byB0aGUgbGFiZWxlZCBlbGVtZW50CiAKIGZ1bmN0
aW9uIHByaW50VG9Db25zb2xlKHN0cikKIHsKQEAgLTQ5LDcgKzQ5LDcgQEAgZnVuY3Rpb24gdGVz
dCgpCiAgICAgdmFyIGhvbWVCYXNlID0gd2luZG93LmZyYW1lc1sxXS5kb2N1bWVudC5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKCdob21lYmFzZScpOwogICAgIGhvbWVCYXNlWzBdLmZvY3VzKCk7CiAK
LSAgICB2YXIgcmVzdWx0U3VtbWFyeSA9IGZvY3VzQ291bnQrIiBmb2N1cyAvICIrYmx1ckNvdW50
KyIgYmx1ciBldmVudHMgZGlzYXRjaGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMzNSAiOworICAg
IHZhciByZXN1bHRTdW1tYXJ5ID0gZm9jdXNDb3VudCsiIGZvY3VzIC8gIitibHVyQ291bnQrIiBi
bHVyIGV2ZW50cyBkaXNwYXRjaGVkLCBhbmQgc2hvdWxkIGJlIDMzNSAvIDMzNSAiOwogICAgIHJl
c3VsdFN1bW1hcnkgKz0gKGZvY3VzQ291bnQ9PWJsdXJDb3VudCkgPyAiPHNwYW4gc3R5bGU9J2Nv
bG9yOmdyZWVuJz5QQVNTRUQ8L3NwYW4+PGJyPiIgOiAiPHNwYW4gc3R5bGU9J2NvbG9yOnJlZCc+
RkFJTEVEPC9zcGFuPjxicj4iOwogICAgIHJlc3VsdFN1bW1hcnkgKz0gIlRvdGFsIG9mICIrZmFp
bGVkVGVzdENvdW50KyIgZm9jdXMgdGVzdChzKSBmYWlsZWQuIjsKICAgICBpZiAoZmFpbGVkVGVz
dENvdW50KQpAQCAtMTAzLDggKzEwMywxMCBAQCBmdW5jdGlvbiB0ZXN0UHJvZ3JhbW1hdGljRm9j
dXMoZWxlbSkKICAgICBlbHNlIGlmICh0YWdOYW1lc0Fsd2F5c0ZvY3VzZWQuZmluZChlbGVtLnRh
Z05hbWUpKSAvLyBzcGVjaWFsIGNhc2UgZm9ybSBlbGVtZW50cyBhbmQgb3RoZXIgY29udHJvbHMg
dGhhdCBhcmUgYWx3YXlzIGZvY3VzYWJsZQogICAgICAgICBlbGVtVGhhdFNob3VsZEZvY3VzID0g
ZWxlbTsKICAgICAKLSAgICBpZiAoZWxlbS50YWdOYW1lID09ICJJTlBVVCIgJiYgZWxlbS50eXBl
ID09ICJoaWRkZW4iKSAvLyBvYnZpb3VzbHkgc2luY2UgPGlucHV0IHR5cGU9aGlkZGVuPiBpc24n
dCByZW5kZXJlZCwgaXQgY2FuJ3QgYmUgZm9jdXNlZAorICAgIC8vIEhpZGRlbiBlbGVtZW50cyBz
aG91bGQgbm90IGJlIGZvY3VzYWJsZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI3MDk5CisgICAgaWYgKGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5
bGUoZWxlbSkuZGlzcGxheSA9PSAibm9uZSIpCiAgICAgICAgIGVsZW1UaGF0U2hvdWxkRm9jdXMg
PSBudWxsOworCiAgICAgaWYgKHRhZ05hbWVzVHJhbnNmZXJGb2N1c2VkLmZpbmQoZWxlbS50YWdO
YW1lKSkgewogICAgICAgICBlbGVtVGhhdFNob3VsZEZvY3VzID0gbnVsbDsKICAgICAgICAgT0t0
b0ZvY3VzT3RoZXJFbGVtZW50ID0gdHJ1ZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>