<?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>155197</bug_id>
          
          <creation_ts>2016-03-08 14:55:19 -0800</creation_ts>
          <short_desc>[css-grid] Empty grid without explicit tracks shouldn&apos;t have any size</short_desc>
          <delta_ts>2016-05-31 09:41:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>158065</dependson>
          <blocked>60731</blocked>
    
    <blocked>158197</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Manuel Rego Casasnovas">rego</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jfernandez</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rego</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1172225</commentid>
    <comment_count>0</comment_count>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-03-08 14:55:19 -0800</bug_when>
    <thetext>We&apos;ve a problem in our grid layout code, we&apos;re assuming we always have a m_grid of 1x1 as minimum.
Because of that we can have an empty grid of 200x200 like in the attached example:
&lt;div style=&quot;display: -webkit-grid; width: -webkit-min-content; height: -webkit-min-content; background: cyan; -webkit-grid-auto-columns: 200px; -webkit-grid-auto-rows: 200px;&quot;&gt;
&lt;/div&gt;

The grid should actually be 0x0, as it has no items and no explicit tracks.
Check it live at: https://jsbin.com/yavoyek/1/edit?html,css,output

JFTR, this issue is also present in Blink: https://bugs.chromium.org/p/chromium/issues/detail?id=562167</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195816</commentid>
    <comment_count>1</comment_count>
      <attachid>279646</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-05-24 04:45:38 -0700</bug_when>
    <thetext>Created attachment 279646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195842</commentid>
    <comment_count>2</comment_count>
      <attachid>279646</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-05-24 07:51:14 -0700</bug_when>
    <thetext>Comment on attachment 279646
Patch

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

Really cool you&apos;re finally fixing this issue that have been around for a long time.

I&apos;ve some questions about the patch, as I think I&apos;m not getting it 100% yet.

&gt; Source/WebCore/rendering/RenderGrid.cpp:150
&gt; +        ASSERT(!m_grid.isEmpty());

So we&apos;re not calling this if the m_grid is empty.

Are we actually creating any GridIterator when m_grid is empty?
If that&apos;s the case, shouldn&apos;t we just avoid it? What&apos;s the point of having a GridIterator if the grid is empty?

I&apos;m wondering if we could move the ASSERT to GridIterator constructor directly.

&gt; Source/WebCore/rendering/RenderGrid.cpp:335
&gt; +    return m_grid.size() ? m_grid[0].size() : GridPositionsResolver::explicitGridColumnCount(style(), m_autoRepeatColumns);

In an empty grid, do we really need to get the size of the columns from style?
Couldn&apos;t be enough just return &quot;0&quot; here?

I might be missing something as I&apos;m not getting this change.

&gt; Source/WebCore/rendering/RenderGrid.cpp:1529
&gt; +    m_gridIsDirty = true;

Should we add an ASSERT to check that m_gridIsDirty is FALSE when clearGrid() is called?

&gt; Source/WebCore/rendering/RenderGrid.cpp:1773
&gt; +void RenderGrid::populateGridPositionsForDirection(GridSizingData&amp; sizingData, GridTrackSizingDirection direction)

Nice refactoring, but I&apos;d do it in a different patch as it&apos;s unrelated with the rest of things.

&gt; LayoutTests/fast/css-grid-layout/empty-grid-expected.html:4
&gt; +    position: absolute;

Do you need this line?

&gt; LayoutTests/fast/css-grid-layout/empty-grid.html:3
&gt; +.absGrid {

The grid is not absolutely positioned, so the class name is misleading.

&gt; LayoutTests/fast/css-grid-layout/empty-grid.html:20
&gt; +    width: 100%;

I&apos;d use &quot;height: 100%;&quot; too to verify the behaviour on the other axis.

&gt; LayoutTests/fast/css-grid-layout/empty-grid.html:21
&gt; +    background: cyan;

Nit: It&apos;s more common to use &quot;green&quot; or &quot;lime&quot; for the right result, rather than &quot;cyan&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195969</commentid>
    <comment_count>3</comment_count>
      <attachid>279646</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-05-24 12:36:05 -0700</bug_when>
    <thetext>Comment on attachment 279646
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:150
&gt;&gt; +        ASSERT(!m_grid.isEmpty());
&gt; 
&gt; So we&apos;re not calling this if the m_grid is empty.
&gt; 
&gt; Are we actually creating any GridIterator when m_grid is empty?
&gt; If that&apos;s the case, shouldn&apos;t we just avoid it? What&apos;s the point of having a GridIterator if the grid is empty?
&gt; 
&gt; I&apos;m wondering if we could move the ASSERT to GridIterator constructor directly.

We have 2 options, we either check that the grid is empty every time before creating the GridIterator or we create it unconditionally and deal with the empty case. Since having an empty is grid is by far the most uncommon case I decided to optimize the normal case and did not add any extra check.

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:335
&gt;&gt; +    return m_grid.size() ? m_grid[0].size() : GridPositionsResolver::explicitGridColumnCount(style(), m_autoRepeatColumns);
&gt; 
&gt; In an empty grid, do we really need to get the size of the columns from style?
&gt; Couldn&apos;t be enough just return &quot;0&quot; here?
&gt; 
&gt; I might be missing something as I&apos;m not getting this change.

Well that line is basically the main point of this change. The thing is that our grid representation is a Vector of rows. Each row is a Vector of columns, and each column is a Vector of RenderBoxes (the children of the grid). This means that in order to have at least a column we need to artificially create a row.

What happens when you have a declaration like this &quot;grid-template-columns: 10px;&quot; ? If we do what you suggest you&apos;ll return 0 as the number of columns, but we actually have 1. Note that the else part of the ternary operator will only happen in the event of not having any children and not having a grid-template-rows declaration.

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:1529
&gt;&gt; +    m_gridIsDirty = true;
&gt; 
&gt; Should we add an ASSERT to check that m_gridIsDirty is FALSE when clearGrid() is called?

I don&apos;t think we need it. We are not doing anything dangerous, and that would prevent us from calling clearGrid() twice, something not really useful but that should not trigger an ASSERT either.

&gt;&gt; LayoutTests/fast/css-grid-layout/empty-grid-expected.html:4
&gt;&gt; +    position: absolute;
&gt; 
&gt; Do you need this line?

Probably not but this way we process it in the out of flow path as in the test.

&gt;&gt; LayoutTests/fast/css-grid-layout/empty-grid.html:3
&gt;&gt; +.absGrid {
&gt; 
&gt; The grid is not absolutely positioned, so the class name is misleading.

True, should be gridWithAbsItem or something like this.

&gt;&gt; LayoutTests/fast/css-grid-layout/empty-grid.html:20
&gt;&gt; +    width: 100%;
&gt; 
&gt; I&apos;d use &quot;height: 100%;&quot; too to verify the behaviour on the other axis.

To verify which behavior? What we want to verify is how empty grids behave not the sizes of the items.

&gt;&gt; LayoutTests/fast/css-grid-layout/empty-grid.html:21
&gt;&gt; +    background: cyan;
&gt; 
&gt; Nit: It&apos;s more common to use &quot;green&quot; or &quot;lime&quot; for the right result, rather than &quot;cyan&quot;.

Ack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196240</commentid>
    <comment_count>4</comment_count>
      <attachid>279646</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-05-25 01:14:09 -0700</bug_when>
    <thetext>Comment on attachment 279646
Patch

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

&gt; Source/WebCore/ChangeLog:20
&gt; +        A new bool was added to verify that placeItemsOnGrid() was called as the previous code was
&gt; +        relying on the fact that there were items in the internal representation which is wrong as
&gt; +        there might be no items in the grid.

Nit: 3 lines and not a single comma or dot. :-)

&gt;&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:150
&gt;&gt;&gt; +        ASSERT(!m_grid.isEmpty());
&gt;&gt; 
&gt;&gt; So we&apos;re not calling this if the m_grid is empty.
&gt;&gt; 
&gt;&gt; Are we actually creating any GridIterator when m_grid is empty?
&gt;&gt; If that&apos;s the case, shouldn&apos;t we just avoid it? What&apos;s the point of having a GridIterator if the grid is empty?
&gt;&gt; 
&gt;&gt; I&apos;m wondering if we could move the ASSERT to GridIterator constructor directly.
&gt; 
&gt; We have 2 options, we either check that the grid is empty every time before creating the GridIterator or we create it unconditionally and deal with the empty case. Since having an empty is grid is by far the most uncommon case I decided to optimize the normal case and did not add any extra check.

If I&apos;m getting it right, GridIterator is only called when m_grid is not empty.
So we could move this ASSERT to GridIterator constructor.

So in that case we won&apos;t need to modify GridIterator,
we could keep using the previous code relying on m_grid not being empty.

Or just use the new calls to grid.gridColumn|RowCount()
as they make the code cleaner than using directly &quot;m_grid.size()&quot;.
If you do that, probably you need to update isEmptyAreaEnough() too, to use m_maxColumns|Rows.

&gt;&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:335
&gt;&gt;&gt; +    return m_grid.size() ? m_grid[0].size() : GridPositionsResolver::explicitGridColumnCount(style(), m_autoRepeatColumns);
&gt;&gt; 
&gt;&gt; In an empty grid, do we really need to get the size of the columns from style?
&gt;&gt; Couldn&apos;t be enough just return &quot;0&quot; here?
&gt;&gt; 
&gt;&gt; I might be missing something as I&apos;m not getting this change.
&gt; 
&gt; Well that line is basically the main point of this change. The thing is that our grid representation is a Vector of rows. Each row is a Vector of columns, and each column is a Vector of RenderBoxes (the children of the grid). This means that in order to have at least a column we need to artificially create a row.
&gt; 
&gt; What happens when you have a declaration like this &quot;grid-template-columns: 10px;&quot; ? If we do what you suggest you&apos;ll return 0 as the number of columns, but we actually have 1. Note that the else part of the ternary operator will only happen in the event of not having any children and not having a grid-template-rows declaration.

Ok, I got it now. After populateExplicitGridAndOrderIterator() is run you&apos;re sure you have the rows and columns from the style.
But if there&apos;re not rows, populateExplicitGridAndOrderIterator() won&apos;t be able to create the required columns.
That&apos;s why you only need this in gridColumnCount().

I think it&apos;d be nice to add a pair of tests cases for this:
1) grid-template-columns: 100px; grid-tempalte-rows: none;
2) grid-template-columns: none; grid-tempalte-rows: 100px;

I know that the 2) case is not really important for our current implementation,
but if the implementation changes in the future, it&apos;d be good to have a test case for this.

&gt;&gt;&gt; LayoutTests/fast/css-grid-layout/empty-grid.html:3
&gt;&gt;&gt; +.absGrid {
&gt;&gt; 
&gt;&gt; The grid is not absolutely positioned, so the class name is misleading.
&gt; 
&gt; True, should be gridWithAbsItem or something like this.

BTW, in other tests we&apos;ve a comment like this:
    /* Ensures that the grid container is the containing block of the absolutely positioned grid children. */
    position: relative

&gt;&gt;&gt; LayoutTests/fast/css-grid-layout/empty-grid.html:20
&gt;&gt;&gt; +    width: 100%;
&gt;&gt; 
&gt;&gt; I&apos;d use &quot;height: 100%;&quot; too to verify the behaviour on the other axis.
&gt; 
&gt; To verify which behavior? What we want to verify is how empty grids behave not the sizes of the items.

I meant, if we add &quot;height: 200px&quot; on &quot;.absGrid&quot; and &quot;height: 100%&quot; here
the result would be a 200x200 box.

Maybe not really important, but we&apos;ll be checking that everything is working fine in both axis
related with having no rows/columns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196310</commentid>
    <comment_count>5</comment_count>
      <attachid>279761</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-05-25 06:03:42 -0700</bug_when>
    <thetext>Created attachment 279761
Patch

Reworked patch and test. We now need just a few changes to the current code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196321</commentid>
    <comment_count>6</comment_count>
      <attachid>279761</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-05-25 07:01:19 -0700</bug_when>
    <thetext>Comment on attachment 279761
Patch

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

Really nice! The patch LGTM just a few minor comments.

&gt; Source/WebCore/ChangeLog:20
&gt; +        A new bool was added to verify that placeItemsOnGrid() was called as the previous code was
&gt; +        relying on the fact that there were items in the internal representation which is wrong as
&gt; +        there might be no items in the grid.

Nit: Still a very long sentence here. :-)

&gt; Source/WebCore/rendering/RenderGrid.cpp:613
&gt; +        if (!m_gridItemArea.isEmpty()) {

What do you think about having a new function like:
  bool RenderGrid::hasGridItems() const {
    return !m_gridItemArea.isEmpty();
  }

Or &quot;RenderGrid::isEmpty()&quot;, I&apos;m not sure about the name.

Probably it&apos;d be easier to understand what we&apos;re checking on those cases.

&gt; Source/WebCore/rendering/RenderGrid.cpp:940
&gt;      }

I guess you can skip the next while too, if there&apos;re no items.

&gt; LayoutTests/fast/css-grid-layout/empty-grid.html:17
&gt; +    grid-column: 1 / 2;

You don&apos;t need this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197264</commentid>
    <comment_count>7</comment_count>
      <attachid>279761</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-27 16:11:37 -0700</bug_when>
    <thetext>Comment on attachment 279761
Patch

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

&gt; Source/WebCore/rendering/RenderGrid.cpp:189
&gt;          ASSERT(fixedTrackSpan &gt;= 1 &amp;&amp; varyingTrackSpan &gt;= 1);

These assertions should be two separate assertions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197560</commentid>
    <comment_count>8</comment_count>
      <attachid>280077</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-05-30 00:59:56 -0700</bug_when>
    <thetext>Created attachment 280077
Patch

Minor fixes after review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197571</commentid>
    <comment_count>9</comment_count>
      <attachid>280077</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-05-30 01:16:13 -0700</bug_when>
    <thetext>Comment on attachment 280077
Patch

Informal r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197579</commentid>
    <comment_count>10</comment_count>
      <attachid>280077</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2016-05-30 01:50:35 -0700</bug_when>
    <thetext>Comment on attachment 280077
Patch

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

Looks good to me, overall. I fews comments for your conderation.

&gt; Source/WebCore/rendering/RenderGrid.cpp:142
&gt; +        ASSERT(!m_grid[0].isEmpty());

Quick question: Is m_grid is an empty vector, can m_grid[0] be troublesome?

&gt; Source/WebCore/rendering/RenderGrid.cpp:615
&gt; +            for (unsigned i = 0; i &lt; flexibleSizedTracksIndex.size(); ++i) {

Minor: I believe here you can use the &quot;for (auto trackIndex = )&quot; as you did below (line 630).

&gt; Source/WebCore/rendering/RenderGrid.h:201
&gt; +    bool m_gridIsDirty { true };

Minor: I believe WTF::Optional is the new cool way of &quot;flippable&quot; class variables like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197580</commentid>
    <comment_count>11</comment_count>
      <attachid>280077</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2016-05-30 01:51:34 -0700</bug_when>
    <thetext>Comment on attachment 280077
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:142
&gt;&gt; +        ASSERT(!m_grid[0].isEmpty());
&gt; 
&gt; Quick question: Is m_grid is an empty vector, can m_grid[0] be troublesome?

s/Is m_grid/If m_grid/g</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197581</commentid>
    <comment_count>12</comment_count>
      <attachid>280077</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-05-30 02:05:23 -0700</bug_when>
    <thetext>Comment on attachment 280077
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:142
&gt;&gt;&gt; +        ASSERT(!m_grid[0].isEmpty());
&gt;&gt; 
&gt;&gt; Quick question: Is m_grid is an empty vector, can m_grid[0] be troublesome?
&gt; 
&gt; s/Is m_grid/If m_grid/g

That&apos;s the main point of this change. If m_grid is empty none of the GridIterator methods could be called (not even constructed). The caller must enforce that restriction, with all these asserts we just make the preconditions explicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197716</commentid>
    <comment_count>13</comment_count>
      <attachid>280077</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-30 20:58:18 -0700</bug_when>
    <thetext>Comment on attachment 280077
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:615
&gt;&gt; +            for (unsigned i = 0; i &lt; flexibleSizedTracksIndex.size(); ++i) {
&gt; 
&gt; Minor: I believe here you can use the &quot;for (auto trackIndex = )&quot; as you did below (line 630).

Not if he wants to use &quot;i - 1&quot;.

&gt; Source/WebCore/rendering/RenderGrid.cpp:617
&gt; +                while (RenderBox* gridItem = iterator.nextGridItem()) {

I suggest auto* or auto here instead of RenderBox*.

&gt; Source/WebCore/rendering/RenderGrid.cpp:618
&gt; +                    const GridSpan span = cachedGridSpan(*gridItem, direction);

I don’t think const adds much here. I would just write auto or auto&amp; or GridSpan.

&gt; Source/WebCore/rendering/RenderGrid.cpp:930
&gt; +            while (RenderBox* gridItem = iterator.nextGridItem()) {

Ditto.

&gt; Source/WebCore/rendering/RenderGrid.cpp:932
&gt; +                    const GridSpan&amp; span = cachedGridSpan(*gridItem, direction);

Ditto.

&gt;&gt; Source/WebCore/rendering/RenderGrid.h:201
&gt;&gt; +    bool m_gridIsDirty { true };
&gt; 
&gt; Minor: I believe WTF::Optional is the new cool way of &quot;flippable&quot; class variables like this.

I agree that it would be neat if we could make something optional rather than having a separate dirty bit. I guess maybe you are suggesting we make m_grid optional?

&gt; LayoutTests/fast/css-grid-layout/empty-grid-expected.txt:12
&gt; +PASS
&gt; +XXXX
&gt; +PASS
&gt; +PASS
&gt; +PASS
&gt; +PASS
&gt; +PASS
&gt; +PASS
&gt; +PASS
&gt; +PASS

The best quality tests should state what they are testing as the go rather than just writing PASS PASS PASS. I won’t insist on that for this test, but it’s something to consider when writing new tests. The checkLayout style of test unfortunately always ends up like this, but that seems like something we could fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197762</commentid>
    <comment_count>14</comment_count>
      <attachid>280077</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-05-31 05:05:51 -0700</bug_when>
    <thetext>Comment on attachment 280077
Patch

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

Thanks for the reviews!

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:618
&gt;&gt; +                    const GridSpan span = cachedGridSpan(*gridItem, direction);
&gt; 
&gt; I don’t think const adds much here. I would just write auto or auto&amp; or GridSpan.

I was not changing that code just moving it inside the if block. Anyway I can do those changes before landing.

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:932
&gt;&gt; +                    const GridSpan&amp; span = cachedGridSpan(*gridItem, direction);
&gt; 
&gt; Ditto.

And ditto. :)

&gt;&gt;&gt; Source/WebCore/rendering/RenderGrid.h:201
&gt;&gt;&gt; +    bool m_gridIsDirty { true };
&gt;&gt; 
&gt;&gt; Minor: I believe WTF::Optional is the new cool way of &quot;flippable&quot; class variables like this.
&gt; 
&gt; I agree that it would be neat if we could make something optional rather than having a separate dirty bit. I guess maybe you are suggesting we make m_grid optional?

Not really because it&apos;s just signaling that the children (if any) have been processed and added to m_grid.

&gt;&gt; LayoutTests/fast/css-grid-layout/empty-grid-expected.txt:12
&gt;&gt; +PASS
&gt; 
&gt; The best quality tests should state what they are testing as the go rather than just writing PASS PASS PASS. I won’t insist on that for this test, but it’s something to consider when writing new tests. The checkLayout style of test unfortunately always ends up like this, but that seems like something we could fix.

I agree with you but unfortunately for checkLayout() tests there is nothing much we can do apart from adding some description at the very beginning as I&apos;m doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197781</commentid>
    <comment_count>15</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-05-31 08:15:55 -0700</bug_when>
    <thetext>Committed r201510: &lt;http://trac.webkit.org/changeset/201510&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197801</commentid>
    <comment_count>16</comment_count>
      <attachid>280077</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-31 09:41:04 -0700</bug_when>
    <thetext>Comment on attachment 280077
Patch

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

&gt;&gt;&gt; LayoutTests/fast/css-grid-layout/empty-grid-expected.txt:12
&gt;&gt;&gt; +PASS
&gt;&gt; 
&gt;&gt; The best quality tests should state what they are testing as the go rather than just writing PASS PASS PASS. I won’t insist on that for this test, but it’s something to consider when writing new tests. The checkLayout style of test unfortunately always ends up like this, but that seems like something we could fix.
&gt; 
&gt; I agree with you but unfortunately for checkLayout() tests there is nothing much we can do apart from adding some description at the very beginning as I&apos;m doing.

In the future we should change checkLayout so we don’t make so many cryptic tests. I think we could pass in a string to checkLayout to clarify what is being tested.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279646</attachid>
            <date>2016-05-24 04:45:38 -0700</date>
            <delta_ts>2016-05-25 06:03:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155197-20160524134643.patch</filename>
            <type>text/plain</type>
            <size>23033</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMjEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjYxMWI5OWJlZjkwMmZm
OGFiMmFjMzIyZWE2MTE0MWFlMDU2OTczNC4uMmI2N2QyYzVmYWMwZjk2ZTg5M2M2MTNiMjg3ZTky
YTUzZGU5MTAxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE2LTA1LTI0ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gRW1wdHkgZ3JpZCB3aXRob3V0IGV4cGxpY2l0IHRyYWNrcyBzaG91bGRuJ3QgaGF2ZSBhbnkg
c2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1
MTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBncmlkIGlzIGEgVmVjdG9yIG9mIFZlY3Rv
ciByZXByZXNlbnRpbmcgcm93cyBhbmQKKyAgICAgICAgY29sdW1ucy4gQmVjYXVzZSBvZiB0aGF0
IGl0IHdhcyBub3QgcG9zc2libGUgdG8gaGF2ZSBjb2x1bW5zIHdpdGhvdXQgaGF2aW5nIGF0IGxl
YXN0IG9uZQorICAgICAgICByb3cuIFRoYXQgZm9yY2VkIHVzIHRvIGhhdmUgYSAxeDEgaW50ZXJu
YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyaWQgZXZlbiBpZiBpdCB3YXMKKyAgICAgICAgYWN0
dWFsbHkgZW1wdHkuIFRoYXQgd29ya3MgZm9yIG1vc3Qgb2YgdGhlIGNhc2VzIGV4Y2VwdCB3aGVu
IHRoZSBncmlkIGlzIGFjdHVhbGx5IGVtcHR5LgorCisgICAgICAgIEJ5IGNoYW5naW5nIHRoZSB3
YXkgd2UgY29tcHV0ZSB0aGUgc2l6ZXMgd2UgY2FuIG92ZXJjb21lIHRoYXQgaW1wbGVtZW50YXRp
b24KKyAgICAgICAgcmVzdHJpY3Rpb24uIEFsdGhvdWdodCBub3Qgc3RyaWN0bHkgcmVxdWlyZWQs
IHdlIHRvb2sgdGhlIGNoYW5jZSB0byBhbHNvIHJlZmFjdG9yIHRoZSBjb2RlCisgICAgICAgIG9m
IHBvcHVsYXRlR3JpZFBvc2l0aW9ucyBpbiBhIG5ldyBtZXRob2QgYXMgdGhlIGltcGxlbWVudGF0
aW9ucyBmb3Igcm93cyBhbmQgY29sdW1ucyB3ZXJlCisgICAgICAgIG1vc3RseSBpZGVudGljYWwu
CisKKyAgICAgICAgQSBuZXcgYm9vbCB3YXMgYWRkZWQgdG8gdmVyaWZ5IHRoYXQgcGxhY2VJdGVt
c09uR3JpZCgpIHdhcyBjYWxsZWQgYXMgdGhlIHByZXZpb3VzIGNvZGUgd2FzCisgICAgICAgIHJl
bHlpbmcgb24gdGhlIGZhY3QgdGhhdCB0aGVyZSB3ZXJlIGl0ZW1zIGluIHRoZSBpbnRlcm5hbCBy
ZXByZXNlbnRhdGlvbiB3aGljaCBpcyB3cm9uZyBhcworICAgICAgICB0aGVyZSBtaWdodCBiZSBu
byBpdGVtcyBpbiB0aGUgZ3JpZC4KKworICAgICAgICBUZXN0OiBmYXN0L2Nzcy1ncmlkLWxheW91
dC9lbXB0eS1ncmlkLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OkdyaWRJdGVyYXRvcjo6R3JpZEl0ZXJhdG9y
KTogUmVuZGVyR3JpZCBpcyBwYXNzZWQgYXMgZmlyc3QgYXJndW1lbnQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJHcmlkOjpHcmlkSXRlcmF0b3I6Om5leHRHcmlkSXRlbSk6IFRyYW5zZm9ybWVk
IGFuIGlmIGludG8gYW4gQVNTRVJULgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6R3Jp
ZEl0ZXJhdG9yOjpuZXh0RW1wdHlHcmlkQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJH
cmlkOjpncmlkQ29sdW1uQ291bnQpOiBVc2UgdGhlIHN0eWxlIHRvIHJlc29sdmUgdGhlIG51bWJl
ciBvZiBjb2x1bW5zIGlmCisgICAgICAgIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBpcyBl
bXB0eS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmdyaWRSb3dDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpndXR0ZXJzU2l6ZSk6IEFsbG93IHRvIHBhc3MgMCBh
cyBzcGFuLCB0aGlzIHBlcm1pdHMgdXNpbmcgdGhlIHJldHVybgorICAgICAgICB2YWx1ZSBvZiBn
cmlkQ29sdW1uQ291bnR8Z3JpZFJvd0NvdW50IGRpcmVjdGx5IHRvIGNhbGwgdGhpcyBtZXRob2Qu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdp
ZHRocyk6IFVzZSBtX2dyaWRJc0RpcnR5LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6
Y29tcHV0ZVVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKTogU2V0IG1fZ3JpZElzRGly
dHkgdG8gZmFsc2UuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwb3B1bGF0ZUV4cGxp
Y2l0R3JpZEFuZE9yZGVySXRlcmF0b3IpOiBEbyBub3Qgc2V0IDEgYXMgbWluaW11bSBmb3IKKyAg
ICAgICAgcm93L2NvbHVtbiBjb3VudC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBs
YWNlU3BlY2lmaWVkTWFqb3JBeGlzSXRlbXNPbkdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJHcmlkOjpjbGVhckdyaWQpOiBTZXQgbV9ncmlkSXNEaXJ0eSBiYWNrIHRvIHRydWUu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpsYXlvdXRHcmlkSXRlbXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cG9wdWxhdGVHcmlkUG9zaXRpb25zRm9yRGlyZWN0aW9u
KTogUmVmYWN0b3JlZCBmcm9tCisgICAgICAgIHBvcHVsYXRlR3JpZFBvc2l0aW9ucygpLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cG9wdWxhdGVHcmlkUG9zaXRpb25zKTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5oOiBNb3ZlZCBncmlkQ29sdW1uQ291
bnQvZ3JpZFJvd0NvdW50IHRvIGNwcCBmaWxlLgorCiAyMDE2LTA1LTE5ICBUaW0gSG9ydG9uICA8
dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMDA2Mzgp
OiAtW0RPTUhUTUxWaWRlb0VsZW1lbnQgcGxheV0gZGlzYXBwZWFyZWQgZnJvbSBPYmpDIGJpbmRp
bmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggZTVhY2U3NzY1
ZWFiYmU1ZDQ3NDg0OWI1N2ZmMmRlODYyZTY5NTM2ZS4uMDI2OTczMjg1NmE5MjFkNTZmMGYxYWU3
OTFhMGVhNjBhZTViNGJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNw
cApAQCAtMTMxLDI0ICsxMzEsMjcgQEAgY2xhc3MgUmVuZGVyR3JpZDo6R3JpZEl0ZXJhdG9yIHsK
IHB1YmxpYzoKICAgICAvLyB8ZGlyZWN0aW9ufCBpcyB0aGUgZGlyZWN0aW9uIHRoYXQgaXMgZml4
ZWQgdG8gfGZpeGVkVHJhY2tJbmRleHwgc28gZS5nCiAgICAgLy8gR3JpZEl0ZXJhdG9yKG1fZ3Jp
ZCwgRm9yQ29sdW1ucywgMSkgd2lsbCB3YWxrIG92ZXIgdGhlIHJvd3Mgb2YgdGhlIDJuZCBjb2x1
bW4uCi0gICAgR3JpZEl0ZXJhdG9yKGNvbnN0IFZlY3RvcjxWZWN0b3I8VmVjdG9yPFJlbmRlckJv
eCosIDE+Pj4mIGdyaWQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2ln
bmVkIGZpeGVkVHJhY2tJbmRleCwgdW5zaWduZWQgdmFyeWluZ1RyYWNrSW5kZXggPSAwKQotICAg
ICAgICA6IG1fZ3JpZChncmlkKQorICAgIEdyaWRJdGVyYXRvcihSZW5kZXJHcmlkJiBncmlkLCBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCB1bnNpZ25lZCBmaXhlZFRyYWNrSW5k
ZXgsIHVuc2lnbmVkIHZhcnlpbmdUcmFja0luZGV4ID0gMCkKKyAgICAgICAgOiBtX2dyaWQoZ3Jp
ZC5tX2dyaWQpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgICAgICAsIG1f
cm93SW5kZXgoKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IHZhcnlpbmdUcmFja0luZGV4IDog
Zml4ZWRUcmFja0luZGV4KQogICAgICAgICAsIG1fY29sdW1uSW5kZXgoKGRpcmVjdGlvbiA9PSBG
b3JDb2x1bW5zKSA/IGZpeGVkVHJhY2tJbmRleCA6IHZhcnlpbmdUcmFja0luZGV4KQotICAgICAg
ICAsIG1fY2hpbGRJbmRleCgwKQorICAgICAgICAsIG1fbWF4Q29sdW1ucyhncmlkLmdyaWRDb2x1
bW5Db3VudCgpKQorICAgICAgICAsIG1fbWF4Um93cyhncmlkLmdyaWRSb3dDb3VudCgpKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fcm93SW5kZXggPCBtX2dyaWQuc2l6ZSgpKTsKLSAgICAgICAg
QVNTRVJUKG1fY29sdW1uSW5kZXggPCBtX2dyaWRbMF0uc2l6ZSgpKTsKKyAgICAgICAgLy8gTm90
ZSB0aGF0IG1fbWF4Um93c3xDb2x1bW5zIG1pZ2h0IGJlIDAgaWYgdGhlcmUgYXJlIG5vIGV4cGxp
Y2l0IHRyYWNrcyBmb3Igc29tZSBheGlzIGFuZCB0aGVyZSBhcmUKKyAgICAgICAgLy8gbm8gaXRl
bXMgKGV4Y2x1ZGluZyBvdXQgb2YgZmxvdyBpdGVtcykgaW4gdGhlIGdyaWQuCisgICAgICAgIEFT
U0VSVCgobV9yb3dJbmRleCA8IG1fbWF4Um93cykgfHwgIW1fbWF4Um93cyk7CisgICAgICAgIEFT
U0VSVCgobV9jb2x1bW5JbmRleCA8IG1fbWF4Q29sdW1ucykgfHwgIW1fbWF4Q29sdW1ucyk7CiAg
ICAgfQogCiAgICAgUmVuZGVyQm94KiBuZXh0R3JpZEl0ZW0oKQogICAgIHsKLSAgICAgICAgaWYg
KCFtX2dyaWQuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEFTU0VSVCgh
bV9ncmlkLmlzRW1wdHkoKSk7CiAKLSAgICAgICAgdW5zaWduZWQmIHZhcnlpbmdUcmFja0luZGV4
ID0gKG1fZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gbV9yb3dJbmRleCA6IG1fY29sdW1uSW5k
ZXg7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGVuZE9mVmFyeWluZ1RyYWNrSW5kZXggPSAobV9k
aXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBtX2dyaWQuc2l6ZSgpIDogbV9ncmlkWzBdLnNpemUo
KTsKKyAgICAgICAgYm9vbCBpc1Jvd0F4aXMgPSBtX2RpcmVjdGlvbiA9PSBGb3JDb2x1bW5zOwor
ICAgICAgICB1bnNpZ25lZCYgdmFyeWluZ1RyYWNrSW5kZXggPSBpc1Jvd0F4aXMgPyBtX3Jvd0lu
ZGV4IDogbV9jb2x1bW5JbmRleDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgZW5kT2ZWYXJ5aW5n
VHJhY2tJbmRleCA9IGlzUm93QXhpcyA/IG1fbWF4Um93cyA6IG1fbWF4Q29sdW1uczsKICAgICAg
ICAgZm9yICg7IHZhcnlpbmdUcmFja0luZGV4IDwgZW5kT2ZWYXJ5aW5nVHJhY2tJbmRleDsgKyt2
YXJ5aW5nVHJhY2tJbmRleCkgewogICAgICAgICAgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBt
X2dyaWRbbV9yb3dJbmRleF1bbV9jb2x1bW5JbmRleF07CiAgICAgICAgICAgICBpZiAobV9jaGls
ZEluZGV4IDwgY2hpbGRyZW4uc2l6ZSgpKQpAQCAtMTg0LDExICsxODcsMTIgQEAgcHVibGljOgog
ICAgICAgICBpZiAobV9ncmlkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgICAgIHVuc2lnbmVkIHJvd1NwYW4gPSAobV9kaXJlY3Rpb24gPT0gRm9yQ29sdW1u
cykgPyB2YXJ5aW5nVHJhY2tTcGFuIDogZml4ZWRUcmFja1NwYW47Ci0gICAgICAgIHVuc2lnbmVk
IGNvbHVtblNwYW4gPSAobV9kaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBmaXhlZFRyYWNrU3Bh
biA6IHZhcnlpbmdUcmFja1NwYW47CisgICAgICAgIGJvb2wgaXNSb3dBeGlzID0gbV9kaXJlY3Rp
b24gPT0gRm9yQ29sdW1uczsKKyAgICAgICAgdW5zaWduZWQgcm93U3BhbiA9IGlzUm93QXhpcyA/
IHZhcnlpbmdUcmFja1NwYW4gOiBmaXhlZFRyYWNrU3BhbjsKKyAgICAgICAgdW5zaWduZWQgY29s
dW1uU3BhbiA9IGlzUm93QXhpcyA/IGZpeGVkVHJhY2tTcGFuIDogdmFyeWluZ1RyYWNrU3BhbjsK
IAotICAgICAgICB1bnNpZ25lZCYgdmFyeWluZ1RyYWNrSW5kZXggPSAobV9kaXJlY3Rpb24gPT0g
Rm9yQ29sdW1ucykgPyBtX3Jvd0luZGV4IDogbV9jb2x1bW5JbmRleDsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgZW5kT2ZWYXJ5aW5nVHJhY2tJbmRleCA9IChtX2RpcmVjdGlvbiA9PSBGb3JDb2x1
bW5zKSA/IG1fZ3JpZC5zaXplKCkgOiBtX2dyaWRbMF0uc2l6ZSgpOworICAgICAgICB1bnNpZ25l
ZCYgdmFyeWluZ1RyYWNrSW5kZXggPSBpc1Jvd0F4aXMgPyBtX3Jvd0luZGV4IDogbV9jb2x1bW5J
bmRleDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgZW5kT2ZWYXJ5aW5nVHJhY2tJbmRleCA9IGlz
Um93QXhpcyA/IG1fbWF4Um93cyA6IG1fbWF4Q29sdW1uczsKICAgICAgICAgZm9yICg7IHZhcnlp
bmdUcmFja0luZGV4IDwgZW5kT2ZWYXJ5aW5nVHJhY2tJbmRleDsgKyt2YXJ5aW5nVHJhY2tJbmRl
eCkgewogICAgICAgICAgICAgaWYgKGlzRW1wdHlBcmVhRW5vdWdoKHJvd1NwYW4sIGNvbHVtblNw
YW4pKSB7CiAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRBcmVhPiByZXN1bHQg
PSBzdGQ6Om1ha2VfdW5pcXVlPEdyaWRBcmVhPihHcmlkU3Bhbjo6dHJhbnNsYXRlZERlZmluaXRl
R3JpZFNwYW4obV9yb3dJbmRleCwgbV9yb3dJbmRleCArIHJvd1NwYW4pLCBHcmlkU3Bhbjo6dHJh
bnNsYXRlZERlZmluaXRlR3JpZFNwYW4obV9jb2x1bW5JbmRleCwgbV9jb2x1bW5JbmRleCArIGNv
bHVtblNwYW4pKTsKQEAgLTIwNSw3ICsyMDksOSBAQCBwcml2YXRlOgogICAgIEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbiBtX2RpcmVjdGlvbjsKICAgICB1bnNpZ25lZCBtX3Jvd0luZGV4OwogICAg
IHVuc2lnbmVkIG1fY29sdW1uSW5kZXg7Ci0gICAgdW5zaWduZWQgbV9jaGlsZEluZGV4OworICAg
IHVuc2lnbmVkIG1fY2hpbGRJbmRleCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX21heENvbHVtbnM7
CisgICAgdW5zaWduZWQgbV9tYXhSb3dzOwogfTsKIAogY2xhc3MgUmVuZGVyR3JpZDo6R3JpZFNp
emluZ0RhdGEgewpAQCAtMzE4LDYgKzMyNCwyMyBAQCB2b2lkIFJlbmRlckdyaWQ6OnN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bAog
ICAgIH0KIH0KIAordW5zaWduZWQgUmVuZGVyR3JpZDo6Z3JpZENvbHVtbkNvdW50KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIW1fZ3JpZElzRGlydHkpOworICAgIC8vIER1ZSB0byBsaW1pdGF0aW9u
cyBpbiBvdXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sIHdlIGNhbm5vdCBrbm93IHRoZSBudW1i
ZXIgb2YgY29sdW1ucyBmcm9tCisgICAgLy8gbV9ncmlkICppZiogdGhlcmUgaXMgbm8gcm93IChi
ZWNhdXNlIG1fZ3JpZCB3b3VsZCBiZSBlbXB0eSkuIFRoYXQncyB3aHkgaW4gdGhhdCBjYXNlIHdl
IG5lZWQKKyAgICAvLyB0byBnZXQgaXQgZnJvbSB0aGUgc3R5bGUuIE5vdGUgdGhhdCB3ZSBrbm93
IGZvciBzdXJlIHRoYXQgdGhlcmUgYXJlJ3QgYW55IGltcGxpY2l0IHRyYWNrcywKKyAgICAvLyBi
ZWNhdXNlIG5vdCBoYXZpbmcgcm93cyBpbXBsaWVzIHRoYXQgdGhlcmUgYXJlIG5vICJub3JtYWwi
IGNoaWxkcmVuIChvdXQtb2YtZmxvdyBjaGlsZHJlbiBhcmUKKyAgICAvLyBub3Qgc3RvcmVkIGlu
IG1fZ3JpZCkuCisgICAgcmV0dXJuIG1fZ3JpZC5zaXplKCkgPyBtX2dyaWRbMF0uc2l6ZSgpIDog
R3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRDb2x1bW5Db3VudChzdHlsZSgpLCBt
X2F1dG9SZXBlYXRDb2x1bW5zKTsKK30KKwordW5zaWduZWQgUmVuZGVyR3JpZDo6Z3JpZFJvd0Nv
dW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fZ3JpZElzRGlydHkpOworICAgIHJldHVybiBt
X2dyaWQuc2l6ZSgpOworfQorCiBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmNvbXB1dGVUcmFja0Jh
c2VkTG9naWNhbEhlaWdodChjb25zdCBHcmlkU2l6aW5nRGF0YSYgc2l6aW5nRGF0YSkgY29uc3QK
IHsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQ7CkBAIC00MTksOSArNDQyLDcgQEAgdm9p
ZCBSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVu
aXQpCiAKIExheW91dFVuaXQgUmVuZGVyR3JpZDo6Z3V0dGVyc1NpemUoR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgc3BhbikgY29uc3QKIHsKLSAgICBBU1NFUlQo
c3BhbiA+PSAxKTsKLQotICAgIGlmIChzcGFuID09IDEpCisgICAgaWYgKHNwYW4gPD0gMSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGNvbnN0IExlbmd0aCYgdHJhY2tHYXAgPSBkaXJlY3Rp
b24gPT0gRm9yQ29sdW1ucyA/IHN0eWxlKCkuZ3JpZENvbHVtbkdhcCgpIDogc3R5bGUoKS5ncmlk
Um93R2FwKCk7CkBAIC00MzUsNyArNDU2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpvZmZz
ZXRCZXR3ZWVuVHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGMKIAog
dm9pZCBSZW5kZXJHcmlkOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0
JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3QKIHsK
LSAgICBib29sIHdhc1BvcHVsYXRlZCA9IGdyaWRXYXNQb3B1bGF0ZWQoKTsKKyAgICBib29sIHdh
c1BvcHVsYXRlZCA9ICFtX2dyaWRJc0RpcnR5OwogICAgIGlmICghd2FzUG9wdWxhdGVkKQogICAg
ICAgICBjb25zdF9jYXN0PFJlbmRlckdyaWQqPih0aGlzKS0+cGxhY2VJdGVtc09uR3JpZCgpOwog
CkBAIC01ODksNyArNjEwLDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpjb21wdXRlVXNlZEJyZWFkdGhP
ZkdyaWRUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGkKICAgICAgICAgICAg
IGZsZXhGcmFjdGlvbiA9IHN0ZDo6bWF4KGZsZXhGcmFjdGlvbiwgbm9ybWFsaXplZEZsZXhGcmFj
dGlvbih0cmFja3NbdHJhY2tJbmRleF0sIGdyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0cmFja0lu
ZGV4KS5tYXhUcmFja0JyZWFkdGgoKS5mbGV4KCkpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZmxleGlibGVTaXplZFRyYWNrc0luZGV4LnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBkaXJlY3Rpb24sIGZsZXhpYmxl
U2l6ZWRUcmFja3NJbmRleFtpXSk7CisgICAgICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3Io
KnRoaXMsIGRpcmVjdGlvbiwgZmxleGlibGVTaXplZFRyYWNrc0luZGV4W2ldKTsKICAgICAgICAg
ICAgIHdoaWxlIChSZW5kZXJCb3gqIGdyaWRJdGVtID0gaXRlcmF0b3IubmV4dEdyaWRJdGVtKCkp
IHsKICAgICAgICAgICAgICAgICBjb25zdCBHcmlkU3BhbiBzcGFuID0gY2FjaGVkR3JpZFNwYW4o
KmdyaWRJdGVtLCBkaXJlY3Rpb24pOwogCkBAIC04OTMsNyArOTE0LDcgQEAgdm9pZCBSZW5kZXJH
cmlkOjpyZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnMoR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW8KICAgICBzaXppbmdEYXRhLml0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3Bhbi5z
aHJpbmsoMCk7CiAgICAgSGFzaFNldDxSZW5kZXJCb3gqPiBpdGVtc1NldDsKICAgICBmb3IgKGF1
dG8gdHJhY2tJbmRleCA6IHNpemluZ0RhdGEuY29udGVudFNpemVkVHJhY2tzSW5kZXgpIHsKLSAg
ICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKG1fZ3JpZCwgZGlyZWN0aW9uLCB0cmFja0luZGV4
KTsKKyAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKCp0aGlzLCBkaXJlY3Rpb24sIHRyYWNr
SW5kZXgpOwogICAgICAgICBHcmlkVHJhY2smIHRyYWNrID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1
bW5zKSA/IHNpemluZ0RhdGEuY29sdW1uVHJhY2tzW3RyYWNrSW5kZXhdIDogc2l6aW5nRGF0YS5y
b3dUcmFja3NbdHJhY2tJbmRleF07CiAKICAgICAgICAgd2hpbGUgKFJlbmRlckJveCogZ3JpZEl0
ZW0gPSBpdGVyYXRvci5uZXh0R3JpZEl0ZW0oKSkgewpAQCAtMTI4OSwxMyArMTMxMCwxNCBAQCB1
bnNpZ25lZCBSZW5kZXJHcmlkOjpjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBkaXJlYwogCiB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdy
aWQoKQogewotICAgIEFTU0VSVCghZ3JpZFdhc1BvcHVsYXRlZCgpKTsKKyAgICBBU1NFUlQobV9n
cmlkSXNEaXJ0eSk7CiAgICAgQVNTRVJUKG1fZ3JpZEl0ZW1BcmVhLmlzRW1wdHkoKSk7CiAKICAg
ICBtX2F1dG9SZXBlYXRDb2x1bW5zID0gY29tcHV0ZUF1dG9SZXBlYXRUcmFja3NDb3VudChGb3JD
b2x1bW5zKTsKICAgICBtX2F1dG9SZXBlYXRSb3dzID0gY29tcHV0ZUF1dG9SZXBlYXRUcmFja3ND
b3VudChGb3JSb3dzKTsKIAogICAgIHBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRv
cigpOworICAgIG1fZ3JpZElzRGlydHkgPSBmYWxzZTsKIAogICAgIFZlY3RvcjxSZW5kZXJCb3gq
PiBhdXRvTWFqb3JBeGlzQXV0b0dyaWRJdGVtczsKICAgICBWZWN0b3I8UmVuZGVyQm94Kj4gc3Bl
Y2lmaWVkTWFqb3JBeGlzQXV0b0dyaWRJdGVtczsKQEAgLTEzNDMsOCArMTM2NSw4IEBAIHZvaWQg
UmVuZGVyR3JpZDo6cG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9yKCkKIHsKICAg
ICBPcmRlckl0ZXJhdG9yUG9wdWxhdG9yIHBvcHVsYXRvcihtX29yZGVySXRlcmF0b3IpOwogICAg
IG1fc21hbGxlc3RSb3dTdGFydCA9IG1fc21hbGxlc3RDb2x1bW5TdGFydCA9IDA7Ci0gICAgdW5z
aWduZWQgbWF4aW11bVJvd0luZGV4ID0gc3RkOjptYXg8dW5zaWduZWQ+KDEsIEdyaWRQb3NpdGlv
bnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkUm93Q291bnQoc3R5bGUoKSwgbV9hdXRvUmVwZWF0Um93
cykpOwotICAgIHVuc2lnbmVkIG1heGltdW1Db2x1bW5JbmRleCA9IHN0ZDo6bWF4PHVuc2lnbmVk
PigxLCBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KHN0eWxl
KCksIG1fYXV0b1JlcGVhdENvbHVtbnMpKTsKKyAgICB1bnNpZ25lZCBtYXhpbXVtUm93SW5kZXgg
PSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZFJvd0NvdW50KHN0eWxlKCksIG1f
YXV0b1JlcGVhdFJvd3MpOworICAgIHVuc2lnbmVkIG1heGltdW1Db2x1bW5JbmRleCA9IEdyaWRQ
b3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoc3R5bGUoKSwgbV9hdXRv
UmVwZWF0Q29sdW1ucyk7CiAKICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxk
Qm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAg
IGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCkBAIC0xNDA2LDcgKzE0MjgsNyBA
QCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlU3BlY2lmaWVkTWFqb3JBeGlzSXRlbXNPbkdyaWQoY29u
c3QgVmVjdG9yPFJlbmRlckJveCo+JiBhdQogICAgICAgICB1bnNpZ25lZCBtaW5vckF4aXNTcGFu
U2l6ZSA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6c3BhblNpemVGb3JBdXRvUGxhY2VkSXRlbShz
dHlsZSgpLCAqYXV0b0dyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCkp
OwogICAgICAgICB1bnNpZ25lZCBtYWpvckF4aXNJbml0aWFsUG9zaXRpb24gPSBtYWpvckF4aXNQ
b3NpdGlvbnMuc3RhcnRMaW5lKCk7CiAKLSAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKG1f
Z3JpZCwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpLCBtYWpvckF4aXNQb3NpdGlv
bnMuc3RhcnRMaW5lKCksIGlzR3JpZEF1dG9GbG93RGVuc2UgPyAwIDogbWlub3JBeGlzQ3Vyc29y
cy5nZXQobWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uKSk7CisgICAgICAgIEdyaWRJdGVyYXRvciBp
dGVyYXRvcigqdGhpcywgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpLCBtYWpvckF4
aXNQb3NpdGlvbnMuc3RhcnRMaW5lKCksIGlzR3JpZEF1dG9GbG93RGVuc2UgPyAwIDogbWlub3JB
eGlzQ3Vyc29ycy5nZXQobWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uKSk7CiAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxHcmlkQXJlYT4gZW1wdHlHcmlkQXJlYSA9IGl0ZXJhdG9yLm5leHRFbXB0eUdy
aWRBcmVhKG1ham9yQXhpc1Bvc2l0aW9ucy5pbnRlZ2VyU3BhbigpLCBtaW5vckF4aXNTcGFuU2l6
ZSk7CiAgICAgICAgIGlmICghZW1wdHlHcmlkQXJlYSkKICAgICAgICAgICAgIGVtcHR5R3JpZEFy
ZWEgPSBjcmVhdGVFbXB0eUdyaWRBcmVhQXRTcGVjaWZpZWRQb3NpdGlvbnNPdXRzaWRlR3JpZCgq
YXV0b0dyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCksIG1ham9yQXhp
c1Bvc2l0aW9ucyk7CkBAIC0xNDUxLDcgKzE0NzMsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNl
QXV0b01ham9yQXhpc0l0ZW1PbkdyaWQoUmVuZGVyQm94JiBncmlkSXRlbSwgQXV0b1BsYWNlbWVu
dAogICAgICAgICAgICAgbWFqb3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcisrOwogCiAgICAgICAg
IGlmIChtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yIDwgZW5kT2ZNYWpvckF4aXMpIHsKLSAg
ICAgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGF1dG9QbGFjZW1lbnRNaW5v
ckF4aXNEaXJlY3Rpb24oKSwgbWlub3JBeGlzUG9zaXRpb25zLnN0YXJ0TGluZSgpLCBtYWpvckF4
aXNBdXRvUGxhY2VtZW50Q3Vyc29yKTsKKyAgICAgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRv
cigqdGhpcywgYXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpLCBtaW5vckF4aXNQb3Np
dGlvbnMuc3RhcnRMaW5lKCksIG1ham9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3IpOwogICAgICAg
ICAgICAgZW1wdHlHcmlkQXJlYSA9IGl0ZXJhdG9yLm5leHRFbXB0eUdyaWRBcmVhKG1pbm9yQXhp
c1Bvc2l0aW9ucy5pbnRlZ2VyU3BhbigpLCBtYWpvckF4aXNTcGFuU2l6ZSk7CiAgICAgICAgIH0K
IApAQCAtMTQ2MSw3ICsxNDgzLDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUF1dG9NYWpvckF4
aXNJdGVtT25HcmlkKFJlbmRlckJveCYgZ3JpZEl0ZW0sIEF1dG9QbGFjZW1lbnQKICAgICAgICAg
dW5zaWduZWQgbWlub3JBeGlzU3BhblNpemUgPSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnNwYW5T
aXplRm9yQXV0b1BsYWNlZEl0ZW0oc3R5bGUoKSwgZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5v
ckF4aXNEaXJlY3Rpb24oKSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBtYWpvckF4aXNJbmRl
eCA9IG1ham9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3I7IG1ham9yQXhpc0luZGV4IDwgZW5kT2ZN
YWpvckF4aXM7ICsrbWFqb3JBeGlzSW5kZXgpIHsKLSAgICAgICAgICAgIEdyaWRJdGVyYXRvciBp
dGVyYXRvcihtX2dyaWQsIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgbWFqb3JB
eGlzSW5kZXgsIG1pbm9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3IpOworICAgICAgICAgICAgR3Jp
ZEl0ZXJhdG9yIGl0ZXJhdG9yKCp0aGlzLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9u
KCksIG1ham9yQXhpc0luZGV4LCBtaW5vckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yKTsKICAgICAg
ICAgICAgIGVtcHR5R3JpZEFyZWEgPSBpdGVyYXRvci5uZXh0RW1wdHlHcmlkQXJlYShtYWpvckF4
aXNTcGFuU2l6ZSwgbWlub3JBeGlzU3BhblNpemUpOwogCiAgICAgICAgICAgICBpZiAoZW1wdHlH
cmlkQXJlYSkgewpAQCAtMTUwNCw2ICsxNTI2LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpjbGVhckdy
aWQoKQogewogICAgIG1fZ3JpZC5jbGVhcigpOwogICAgIG1fZ3JpZEl0ZW1BcmVhLmNsZWFyKCk7
CisgICAgbV9ncmlkSXNEaXJ0eSA9IHRydWU7CiB9CiAKIHN0YXRpYyBjb25zdCBTdHlsZUNvbnRl
bnRBbGlnbm1lbnREYXRhJiBub3JtYWxWYWx1ZUJlaGF2aW9yR3JpZCgpCkBAIC0xNTQ0LDcgKzE1
NjcsOCBAQCB2b2lkIFJlbmRlckdyaWQ6OmFwcGx5U3RyZXRjaEFsaWdubWVudFRvVHJhY2tzSWZO
ZWVkZWQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uCiAKIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0
R3JpZEl0ZW1zKEdyaWRTaXppbmdEYXRhJiBzaXppbmdEYXRhKQogewotICAgIHBvcHVsYXRlR3Jp
ZFBvc2l0aW9ucyhzaXppbmdEYXRhKTsKKyAgICBwb3B1bGF0ZUdyaWRQb3NpdGlvbnNGb3JEaXJl
Y3Rpb24oc2l6aW5nRGF0YSwgRm9yQ29sdW1ucyk7CisgICAgcG9wdWxhdGVHcmlkUG9zaXRpb25z
Rm9yRGlyZWN0aW9uKHNpemluZ0RhdGEsIEZvclJvd3MpOwogCiAgICAgZm9yIChSZW5kZXJCb3gq
IGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmdCb3goKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7
CkBAIC0xNzQ2LDcgKzE3NzAsNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmdyaWRBcmVhQnJl
YWR0aEZvckNoaWxkSW5jbHVkaW5nQWxpZ25tZW50T2Zmc2V0cyhjb25zdCBSZQogICAgIHJldHVy
biBmaW5hbFRyYWNrUG9zaXRpb24gLSBpbml0aWFsVHJhY2tQb3NpdGlvbiArIHRyYWNrc1tzcGFu
LmVuZExpbmUoKSAtIDFdLmJhc2VTaXplKCk7CiB9CiAKLXZvaWQgUmVuZGVyR3JpZDo6cG9wdWxh
dGVHcmlkUG9zaXRpb25zKEdyaWRTaXppbmdEYXRhJiBzaXppbmdEYXRhKQordm9pZCBSZW5kZXJH
cmlkOjpwb3B1bGF0ZUdyaWRQb3NpdGlvbnNGb3JEaXJlY3Rpb24oR3JpZFNpemluZ0RhdGEmIHNp
emluZ0RhdGEsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgLy8g
U2luY2Ugd2UgYWRkIGFsaWdubWVudCBvZmZzZXRzIGFuZCB0cmFjayBndXR0ZXJzLCBncmlkIGxp
bmVzIGFyZSBub3QgYWx3YXlzIGFkamFjZW50LiBIZW5jZSB3ZSB3aWxsIGhhdmUgdG8KICAgICAv
LyBhc3N1bWUgZnJvbSBub3cgb24gdGhhdCB3ZSBqdXN0IHN0b3JlIHBvc2l0aW9ucyBvZiB0aGUg
aW5pdGlhbCBncmlkIGxpbmVzIG9mIGVhY2ggdHJhY2ssCkBAIC0xNzU1LDMxICsxNzc5LDI3IEBA
IHZvaWQgUmVuZGVyR3JpZDo6cG9wdWxhdGVHcmlkUG9zaXRpb25zKEdyaWRTaXppbmdEYXRhJiBz
aXppbmdEYXRhKQogICAgIC8vIFRoZSBncmlkIGNvbnRhaW5lcidzIGZyYW1lIGVsZW1lbnRzIChi
b3JkZXIsIHBhZGRpbmcgYW5kIDxjb250ZW50LXBvc2l0aW9uPiBvZmZzZXQpIGFyZSBzZW5zaWJs
ZSB0byB0aGUKICAgICAvLyBpbmxpbmUtYXhpcyBmbG93IGRpcmVjdGlvbi4gSG93ZXZlciwgY29s
dW1uIGxpbmVzIHBvc2l0aW9ucyBhcmUgJ2RpcmVjdGlvbicgdW5hd2FyZS4gVGhpcyBzaW1wbGlm
aWNhdGlvbgogICAgIC8vIGFsbG93cyB1cyB0byB1c2UgdGhlIHNhbWUgaW5kZXhlcyB0byBpZGVu
dGlmeSB0aGUgY29sdW1ucyBpbmRlcGVuZGVudGx5IG9uIHRoZSBpbmxpbmUtYXhpcyBkaXJlY3Rp
b24uCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZUcmFja3MgPSBzaXppbmdEYXRhLmNvbHVtblRyYWNr
cy5zaXplKCk7CisgICAgYm9vbCBpc1Jvd0F4aXMgPSBkaXJlY3Rpb24gPT0gRm9yQ29sdW1uczsK
KyAgICBhdXRvJiB0cmFja3MgPSBpc1Jvd0F4aXMgPyBzaXppbmdEYXRhLmNvbHVtblRyYWNrcyA6
IHNpemluZ0RhdGEucm93VHJhY2tzOworICAgIGF1dG8mIHBvc2l0aW9ucyA9IGlzUm93QXhpcyA/
IG1fY29sdW1uUG9zaXRpb25zIDogbV9yb3dQb3NpdGlvbnM7CisKKyAgICB1bnNpZ25lZCBudW1i
ZXJPZlRyYWNrcyA9IHRyYWNrcy5zaXplKCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZMaW5lcyA9
IG51bWJlck9mVHJhY2tzICsgMTsKKyAgICBwb3NpdGlvbnMucmVzaXplKG51bWJlck9mTGluZXMp
OworCisgICAgQ29udGVudEFsaWdubWVudERhdGEgb2Zmc2V0ID0gY29tcHV0ZUNvbnRlbnRQb3Np
dGlvbkFuZERpc3RyaWJ1dGlvbk9mZnNldChkaXJlY3Rpb24sIHNpemluZ0RhdGEuZnJlZVNwYWNl
Rm9yRGlyZWN0aW9uKGRpcmVjdGlvbikudmFsdWUoKSwgbnVtYmVyT2ZUcmFja3MpOworICAgIExh
eW91dFVuaXQgdHJhY2tHYXAgPSBndXR0ZXJzU2l6ZShkaXJlY3Rpb24sIDIpOworICAgIExheW91
dFVuaXQgYm9yZGVyQW5kUGFkZGluZyA9IGlzUm93QXhpcyA/IGJvcmRlckFuZFBhZGRpbmdMb2dp
Y2FsTGVmdCgpIDogYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwogICAgIHVuc2lnbmVkIGxhc3RM
aW5lID0gbnVtYmVyT2ZMaW5lcyAtIDE7Ci0gICAgdW5zaWduZWQgbmV4dFRvTGFzdExpbmUgPSBu
dW1iZXJPZkxpbmVzIC0gMjsKLSAgICBDb250ZW50QWxpZ25tZW50RGF0YSBvZmZzZXQgPSBjb21w
dXRlQ29udGVudFBvc2l0aW9uQW5kRGlzdHJpYnV0aW9uT2Zmc2V0KEZvckNvbHVtbnMsIHNpemlu
Z0RhdGEuZnJlZVNwYWNlRm9yRGlyZWN0aW9uKEZvckNvbHVtbnMpLnZhbHVlKCksIG51bWJlck9m
VHJhY2tzKTsKLSAgICBMYXlvdXRVbml0IHRyYWNrR2FwID0gZ3V0dGVyc1NpemUoRm9yQ29sdW1u
cywgMik7Ci0gICAgbV9jb2x1bW5Qb3NpdGlvbnMucmVzaXplKG51bWJlck9mTGluZXMpOwotICAg
IG1fY29sdW1uUG9zaXRpb25zWzBdID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxMZWZ0KCkgKyBv
ZmZzZXQucG9zaXRpb25PZmZzZXQ7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5leHRU
b0xhc3RMaW5lOyArK2kpCi0gICAgICAgIG1fY29sdW1uUG9zaXRpb25zW2kgKyAxXSA9IG1fY29s
dW1uUG9zaXRpb25zW2ldICsgb2Zmc2V0LmRpc3RyaWJ1dGlvbk9mZnNldCArIHNpemluZ0RhdGEu
Y29sdW1uVHJhY2tzW2ldLmJhc2VTaXplKCkgKyB0cmFja0dhcDsKLSAgICBtX2NvbHVtblBvc2l0
aW9uc1tsYXN0TGluZV0gPSBtX2NvbHVtblBvc2l0aW9uc1tuZXh0VG9MYXN0TGluZV0gKyBzaXpp
bmdEYXRhLmNvbHVtblRyYWNrc1tuZXh0VG9MYXN0TGluZV0uYmFzZVNpemUoKTsKLSAgICBtX29m
ZnNldEJldHdlZW5Db2x1bW5zID0gb2Zmc2V0LmRpc3RyaWJ1dGlvbk9mZnNldDsKLQotICAgIG51
bWJlck9mVHJhY2tzID0gc2l6aW5nRGF0YS5yb3dUcmFja3Muc2l6ZSgpOwotICAgIG51bWJlck9m
TGluZXMgPSBudW1iZXJPZlRyYWNrcyArIDE7Ci0gICAgbGFzdExpbmUgPSBudW1iZXJPZkxpbmVz
IC0gMTsKLSAgICBuZXh0VG9MYXN0TGluZSA9IG51bWJlck9mTGluZXMgLSAyOwotICAgIG9mZnNl
dCA9IGNvbXB1dGVDb250ZW50UG9zaXRpb25BbmREaXN0cmlidXRpb25PZmZzZXQoRm9yUm93cywg
c2l6aW5nRGF0YS5mcmVlU3BhY2VGb3JEaXJlY3Rpb24oRm9yUm93cykudmFsdWUoKSwgbnVtYmVy
T2ZUcmFja3MpOwotICAgIHRyYWNrR2FwID0gZ3V0dGVyc1NpemUoRm9yUm93cywgMik7Ci0gICAg
bV9yb3dQb3NpdGlvbnMucmVzaXplKG51bWJlck9mTGluZXMpOwotICAgIG1fcm93UG9zaXRpb25z
WzBdID0gYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpICsgb2Zmc2V0LnBvc2l0aW9uT2Zmc2V0Owot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXh0VG9MYXN0TGluZTsgKytpKQotICAgICAg
ICBtX3Jvd1Bvc2l0aW9uc1tpICsgMV0gPSBtX3Jvd1Bvc2l0aW9uc1tpXSArIG9mZnNldC5kaXN0
cmlidXRpb25PZmZzZXQgKyBzaXppbmdEYXRhLnJvd1RyYWNrc1tpXS5iYXNlU2l6ZSgpICsgdHJh
Y2tHYXA7Ci0gICAgbV9yb3dQb3NpdGlvbnNbbGFzdExpbmVdID0gbV9yb3dQb3NpdGlvbnNbbmV4
dFRvTGFzdExpbmVdICsgc2l6aW5nRGF0YS5yb3dUcmFja3NbbmV4dFRvTGFzdExpbmVdLmJhc2VT
aXplKCk7Ci0gICAgbV9vZmZzZXRCZXR3ZWVuUm93cyA9IG9mZnNldC5kaXN0cmlidXRpb25PZmZz
ZXQ7CisgICAgcG9zaXRpb25zWzBdID0gYm9yZGVyQW5kUGFkZGluZyArIG9mZnNldC5wb3NpdGlv
bk9mZnNldDsKKyAgICBpZiAobnVtYmVyT2ZMaW5lcyA+IDEpIHsKKyAgICAgICAgdW5zaWduZWQg
bmV4dFRvTGFzdExpbmUgPSBudW1iZXJPZkxpbmVzIC0gMjsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG5leHRUb0xhc3RMaW5lOyArK2kpCisgICAgICAgICAgICBwb3NpdGlvbnNb
aSArIDFdID0gcG9zaXRpb25zW2ldICsgb2Zmc2V0LmRpc3RyaWJ1dGlvbk9mZnNldCArIHRyYWNr
c1tpXS5iYXNlU2l6ZSgpICsgdHJhY2tHYXA7CisgICAgICAgIHBvc2l0aW9uc1tsYXN0TGluZV0g
PSBwb3NpdGlvbnNbbmV4dFRvTGFzdExpbmVdICsgdHJhY2tzW25leHRUb0xhc3RMaW5lXS5iYXNl
U2l6ZSgpOworICAgIH0KKyAgICBMYXlvdXRVbml0JiBvZmZzZXRCZXR3ZWVuVHJhY2tzID0gaXNS
b3dBeGlzID8gbV9vZmZzZXRCZXR3ZWVuQ29sdW1ucyA6IG1fb2Zmc2V0QmV0d2VlblJvd3M7Cisg
ICAgb2Zmc2V0QmV0d2VlblRyYWNrcyA9IG9mZnNldC5kaXN0cmlidXRpb25PZmZzZXQ7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBjb21wdXRlT3ZlcmZsb3dBbGlnbm1lbnRPZmZzZXQo
T3ZlcmZsb3dBbGlnbm1lbnQgb3ZlcmZsb3csIExheW91dFVuaXQgdHJhY2tCcmVhZHRoLCBMYXlv
dXRVbml0IGNoaWxkQnJlYWR0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmlu
ZGV4IGRiZDk5NDg2NzI0MDMzYzA0Nzk2YjM2Nzg0OGZlNWQxN2MzNmRhNDYuLmNlMDFhNmRjZDU4
ZTEzMDQ3ZmU3NzZhMzdhZTg0MThjZGI3OTdiNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckdyaWQuaApAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21wdXRl
VHJhY2tTaXplc0ZvckRpcmVjdGlvbihHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIEdyaWRTaXpp
bmdEYXRhJiwgTGF5b3V0VW5pdCBmcmVlU3BhY2UpOwogCiAgICAgdm9pZCBsYXlvdXRHcmlkSXRl
bXMoR3JpZFNpemluZ0RhdGEmKTsKLSAgICB2b2lkIHBvcHVsYXRlR3JpZFBvc2l0aW9ucyhHcmlk
U2l6aW5nRGF0YSYpOworICAgIHZvaWQgcG9wdWxhdGVHcmlkUG9zaXRpb25zRm9yRGlyZWN0aW9u
KEdyaWRTaXppbmdEYXRhJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKICAgICB2b2lkIGNs
ZWFyR3JpZCgpOwogCiAgICAgZW51bSBUcmFja1NpemVSZXN0cmljdGlvbiB7CkBAIC0xNzMsMjAg
KzE3MywxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgdHJhY2tzQXJlV2lkZXJUaGFuTWluVHJhY2tC
cmVhZHRoKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgR3JpZFNpemluZ0RhdGEmKTsKICNlbmRp
ZgogCi0gICAgYm9vbCBncmlkV2FzUG9wdWxhdGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZ3JpZC5p
c0VtcHR5KCkgJiYgIW1fZ3JpZFswXS5pc0VtcHR5KCk7IH0KLQogICAgIGJvb2wgc3Bhbm5pbmdJ
dGVtQ3Jvc3Nlc0ZsZXhpYmxlU2l6ZWRUcmFja3MoY29uc3QgR3JpZFNwYW4mLCBHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24pIGNvbnN0OwogCi0gICAgdW5zaWduZWQgZ3JpZENvbHVtbkNvdW50KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChncmlkV2FzUG9wdWxhdGVkKCkpOwotICAgICAg
ICByZXR1cm4gbV9ncmlkWzBdLnNpemUoKTsKLSAgICB9Ci0gICAgdW5zaWduZWQgZ3JpZFJvd0Nv
dW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChncmlkV2FzUG9wdWxhdGVkKCkpOwot
ICAgICAgICByZXR1cm4gbV9ncmlkLnNpemUoKTsKLSAgICB9CisgICAgdW5zaWduZWQgZ3JpZENv
bHVtbkNvdW50KCkgY29uc3Q7CisgICAgdW5zaWduZWQgZ3JpZFJvd0NvdW50KCkgY29uc3Q7CiAK
ICAgICBib29sIGhhc0RlZmluaXRlTG9naWNhbFNpemUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
KSBjb25zdDsKICAgICBMYXlvdXRVbml0IHRyYW5zbGF0ZVJUTENvb3JkaW5hdGUoTGF5b3V0VW5p
dCkgY29uc3Q7CkBAIC0yMDcsNiArMTk3LDggQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1f
YXV0b1JlcGVhdENvbHVtbnMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9hdXRvUmVwZWF0Um93cyB7
IDAgfTsKKworICAgIGJvb2wgbV9ncmlkSXNEaXJ0eSB7IHRydWUgfTsKIH07CiAKIHNpemVfdCBp
bmxpbmUgUmVuZGVyR3JpZDo6YXV0b1JlcGVhdENvdW50Rm9yRGlyZWN0aW9uKEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNmE0MDI2MmI1ZmUwZWQ1MzM3
ZGIxNTBmYWYzMjczYWI2NzBiYTgwMi4uNzU4ZGJlMmM0NjZjYTUzOThlYWRlYmM2Nzk5ZTEyYTVm
N2M3Mjg0NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE2LTA1LTI0ICBTZXJnaW8gVmlsbGFy
IFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3JpZF0gRW1wdHkg
Z3JpZCB3aXRob3V0IGV4cGxpY2l0IHRyYWNrcyBzaG91bGRuJ3QgaGF2ZSBhbnkgc2l6ZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTk3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBzdXJlIHRo
YXQgZW1wdHkgZ3JpZHMgYXJlIHByb3Blcmx5IGhhbmRsZWQuIERvIGFsc28gdmVyaWZ5IHRoYXQg
cmVtb3ZpbmcgYWxsIHRoZSBpdGVtcworICAgICAgICBmcm9tIGEgZ3JpZCBhbHNvIGdlbmVyYXRl
cyBhbiBjb3JyZWN0IGVtcHR5IGdyaWQuCisKKyAgICAgICAgKiBmYXN0L2Nzcy1ncmlkLWxheW91
dC9lbXB0eS1ncmlkLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzLWdy
aWQtbGF5b3V0L2VtcHR5LWdyaWQuaHRtbDogQWRkZWQuCisKIDIwMTYtMDUtMTkgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBUZXN0IGdhcmRlbmlu
ZyBhZnRlciByMjAxMjAzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxh
eW91dC9lbXB0eS1ncmlkLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlk
LWxheW91dC9lbXB0eS1ncmlkLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTM5MjEwMzY3ZTMz
NmJlNmI5YzRhMjI2NDQ1OGE3ZGE3MDdiZjE5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2VtcHR5LWdyaWQtZXhwZWN0ZWQuaHRtbApAQCAtMCww
ICsxLDEyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxzdHlsZT4KKy5pdGVtIHsKKyAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgd2lkdGg6IDIwMHB4OworICAgIGJhY2tncm91bmQ6IGN5YW47Cit9
Cis8L3N0eWxlPgorCis8cD5UaGlzIHRlc3QgUEFTU0VTIGlmIHlvdSBvbmx5IHNlZSBhIGN5YW4g
Y29sb3VyZWQgYm94IHdpdGggdGhlIHRleHQgIml0ZW0iPC9wPgorCis8ZGl2IGNsYXNzPSJpdGVt
Ij5pdGVtPC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91
dC9lbXB0eS1ncmlkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9lbXB0
eS1ncmlkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU3ZDkyOGYxMTVjODBlMGQ1YTRmODQ4Y2E3ZDA5NmJi
MmM1NTBiYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5
b3V0L2VtcHR5LWdyaWQuaHRtbApAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxz
dHlsZT4KKy5hYnNHcmlkIHsKKyAgICBkaXNwbGF5OiBncmlkOworICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKKyAgICB3aWR0aDogMjAwcHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKK30K
KworLmdyaWQgeworICAgIGRpc3BsYXk6IGdyaWQ7CisgICAgYmFja2dyb3VuZDogY3lhbjsKKyAg
ICBncmlkLWF1dG8tY29sdW1uczogMjAwcHg7CisgICAgZ3JpZC1hdXRvLXJvd3M6IDIwMHB4Owor
ICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOworfQorCisuaXRlbSB7CisgICAgcG9zaXRpb246
IGFic29sdXRlOworICAgIHdpZHRoOiAxMDAlOworICAgIGJhY2tncm91bmQ6IGN5YW47CisgICAg
Z3JpZC1jb2x1bW46IDEgLyAyOworfQorPC9zdHlsZT4KKworPHNjcmlwdD4KK2Z1bmN0aW9uIGFk
ZFJlbW92ZUl0ZW1UZXN0KCkKK3sKKyAgICAgdmFyIGdyaWRJdGVtID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CisgICAgIGdyaWRJdGVtLnN0eWxlLndpZHRoID0gIjEwMHB4IjsKKyAg
ICAgZ3JpZEl0ZW0uc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKKyAgICAgZ3JpZEl0ZW0uc3R5bGUu
YmFja2dyb3VuZENvbG9yID0gInJlZCI7CisgICAgIHZhciBncmlkRWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJkeW5hbWljR3JpZCIpOworICAgICBncmlkRWxlbWVudC5hcHBlbmRD
aGlsZChncmlkSXRlbSk7CisgICAgIGdyaWRFbGVtZW50LnJlbW92ZUNoaWxkKGdyaWRJdGVtKTsK
K30KKzwvc2NyaXB0PgorCis8Ym9keSBvbmxvYWQ9ImFkZFJlbW92ZUl0ZW1UZXN0KCkiPgorCis8
cD5UaGlzIHRlc3QgUEFTU0VTIGlmIHlvdSBvbmx5IHNlZSBhIGN5YW4gY29sb3VyZWQgYm94IHdp
dGggdGhlIHRleHQgIml0ZW0iPC9wPgorCis8ZGl2IHN0eWxlPSJncmlkIj4KKzwvZGl2PgorCis8
ZGl2IGNsYXNzPSJhYnNHcmlkIj4KKyAgPGRpdiBjbGFzcz0iaXRlbSI+aXRlbTwvZGl2PgorPC9k
aXY+CisKKzxkaXYgaWQ9ImR5bmFtaWNHcmlkIiBjbGFzcz0iZ3JpZCI+Cis8L2Rpdj4KKworPC9i
b2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279761</attachid>
            <date>2016-05-25 06:03:42 -0700</date>
            <delta_ts>2016-05-30 00:59:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155197-20160525150448.patch</filename>
            <type>text/plain</type>
            <size>18926</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGIyZDkxZTJjNWNlOTli
MzExMjQ3YzYxOGFmMzkyYmViZDJiYTM4Yi4uZjE3YmMyNDk3OWZkN2VkZjRjYWZkZWY5MjRmMDlm
NGEwYmE0ZTk2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ4IEBACiAyMDE2LTA1LTI1ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCisgICAgICAgIFtjc3MtZ3Jp
ZF0gRW1wdHkgZ3JpZCB3aXRob3V0IGV4cGxpY2l0IHRyYWNrcyBzaG91bGRuJ3QgaGF2ZSBhbnkg
c2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1
MTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBncmlkIGlzIGEgVmVjdG9yIG9mIFZlY3Rv
ciByZXByZXNlbnRpbmcgcm93cyBhbmQKKyAgICAgICAgY29sdW1ucy4gQmVjYXVzZSBvZiB0aGF0
IGl0IHdhcyBub3QgcG9zc2libGUgdG8gaGF2ZSBjb2x1bW5zIHdpdGhvdXQgaGF2aW5nIGF0IGxl
YXN0IG9uZQorICAgICAgICByb3cuIFRoYXQgZm9yY2VkIHVzIHRvIGhhdmUgYSAxeDEgaW50ZXJu
YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyaWQgZXZlbiBpZiBpdCB3YXMKKyAgICAgICAgYWN0
dWFsbHkgZW1wdHkuIFRoYXQgd29ya3MgZm9yIG1vc3Qgb2YgdGhlIGNhc2VzIGV4Y2VwdCB3aGVu
IHRoZSBncmlkIGlzIGFjdHVhbGx5IGVtcHR5LgorCisgICAgICAgIEJ5IGNoYW5naW5nIHRoZSB3
YXkgd2UgY29tcHV0ZSB0aGUgc2l6ZXMgd2UgY2FuIG92ZXJjb21lIHRoYXQgaW1wbGVtZW50YXRp
b24KKyAgICAgICAgcmVzdHJpY3Rpb24uIFRoaXMgYWxsb3dlZCB1cyBhbHNvIHRvIHRoaWdodGVu
IHRoZSBjb25kaXRpb25zIHVuZGVyIHdlIGNvdWxkIHVzZSB0aGUKKyAgICAgICAgR3JpZEl0ZXJh
dG9yLiBGcm9tIG5vdyBvbiBpdCB3b24ndCBiZSBwb3NzaWJsZSB0byB1c2UgaXQgb24gZW1wdHkg
Z3JpZHMgc28gY2FsbGVycyBzaG91bGQKKyAgICAgICAgZW5mb3JjZSB0aGF0IHJlc3RyaWN0aW9u
LgorCisgICAgICAgIEEgbmV3IGJvb2wgd2FzIGFkZGVkIHRvIHZlcmlmeSB0aGF0IHBsYWNlSXRl
bXNPbkdyaWQoKSB3YXMgY2FsbGVkIGFzIHRoZSBwcmV2aW91cyBjb2RlIHdhcworICAgICAgICBy
ZWx5aW5nIG9uIHRoZSBmYWN0IHRoYXQgdGhlcmUgd2VyZSBpdGVtcyBpbiB0aGUgaW50ZXJuYWwg
cmVwcmVzZW50YXRpb24gd2hpY2ggaXMgd3JvbmcgYXMKKyAgICAgICAgdGhlcmUgbWlnaHQgYmUg
bm8gaXRlbXMgaW4gdGhlIGdyaWQuCisKKyAgICAgICAgVGVzdDogZmFzdC9jc3MtZ3JpZC1sYXlv
dXQvZW1wdHktZ3JpZC5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpHcmlkSXRlcmF0b3I6OkdyaWRJdGVyYXRv
cik6IEFkZGVkIEFTU0VSVHMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpHcmlkSXRl
cmF0b3I6Om5leHRHcmlkSXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6R3JpZEl0ZXJhdG9yOjppc0VtcHR5QXJlYUVub3VnaCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyR3JpZDo6R3JpZEl0ZXJhdG9yOjpuZXh0RW1wdHlHcmlkQXJlYSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Z3JpZENvbHVtbkNvdW50KTogVXNlIHRo
ZSBzdHlsZSB0byByZXNvbHZlIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpZgorICAgICAgICB0aGUg
aW50ZXJuYWwgcmVwcmVzZW50YXRpb24gaXMgZW1wdHkuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHcmlkOjpncmlkUm93Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Z3V0
dGVyc1NpemUpOiBBbGxvdyB0byBwYXNzIDAgYXMgc3BhbiwgdGhpcyBwZXJtaXRzIHVzaW5nIHRo
ZSByZXR1cm4KKyAgICAgICAgdmFsdWUgb2YgZ3JpZENvbHVtbkNvdW50fGdyaWRSb3dDb3VudCBk
aXJlY3RseSB0byBjYWxsIHRoaXMgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMpOiBVc2UgbV9ncmlkSXNEaXJ0eS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmNvbXB1dGVVc2VkQnJlYWR0aE9mR3JpZFRyYWNr
cyk6IERvIG5vdCBleGFtaW5lIHRoZSBjb250ZW50cyBvZiBncmlkCisgICAgICAgIHRyYWNrcyBp
ZiB0aGVyZSBhcmUgbm8gaXRlbXMgaW4gdGhlIGdyaWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHcmlkOjpyZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdyaWQpOiBTZXQgbV9n
cmlkSXNEaXJ0eSB0byBmYWxzZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBvcHVs
YXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHcmlkOjpjbGVhckdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cG9wdWxh
dGVHcmlkUG9zaXRpb25zRm9yRGlyZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
R3JpZC5oOiBNb3ZlZCBncmlkQ29sdW1uQ291bnQvZ3JpZFJvd0NvdW50IHRvIGNwcCBmaWxlLgor
CisyMDE2LTA1LTI1ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgor
CiAgICAgICAgIFtjc3MtZ3JpZF0gUmVmYWN0b3IgcG9wdWxhdGVHcmlkUG9zaXRpb25zKCkKICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODA2NQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggODJiM2U1NGMzOWE4NWYy
MDI1YmFjMjY1YzE2MDRmZDJjMTA2YjBjNS4uZGVlMWQ5NzZlY2VhNzlmMzg3MzgwYWNhNWE5NTVi
NDdlMmFkNjQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdy
aWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAt
MTM4LDE0ICsxMzgsMTYgQEAgcHVibGljOgogICAgICAgICAsIG1fY29sdW1uSW5kZXgoKGRpcmVj
dGlvbiA9PSBGb3JDb2x1bW5zKSA/IGZpeGVkVHJhY2tJbmRleCA6IHZhcnlpbmdUcmFja0luZGV4
KQogICAgICAgICAsIG1fY2hpbGRJbmRleCgwKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2dy
aWQuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKCFtX2dyaWRbMF0uaXNFbXB0eSgpKTsKICAg
ICAgICAgQVNTRVJUKG1fcm93SW5kZXggPCBtX2dyaWQuc2l6ZSgpKTsKICAgICAgICAgQVNTRVJU
KG1fY29sdW1uSW5kZXggPCBtX2dyaWRbMF0uc2l6ZSgpKTsKICAgICB9CiAKICAgICBSZW5kZXJC
b3gqIG5leHRHcmlkSXRlbSgpCiAgICAgewotICAgICAgICBpZiAoIW1fZ3JpZC5zaXplKCkpCi0g
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgQVNTRVJUKCFtX2dyaWQuaXNFbXB0eSgpKTsK
KyAgICAgICAgQVNTRVJUKCFtX2dyaWRbMF0uaXNFbXB0eSgpKTsKIAogICAgICAgICB1bnNpZ25l
ZCYgdmFyeWluZ1RyYWNrSW5kZXggPSAobV9kaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBtX3Jv
d0luZGV4IDogbV9jb2x1bW5JbmRleDsKICAgICAgICAgY29uc3QgdW5zaWduZWQgZW5kT2ZWYXJ5
aW5nVHJhY2tJbmRleCA9IChtX2RpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IG1fZ3JpZC5zaXpl
KCkgOiBtX2dyaWRbMF0uc2l6ZSgpOwpAQCAtMTYxLDYgKzE2Myw5IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNFbXB0eUFyZWFFbm91Z2godW5zaWduZWQgcm93U3BhbiwgdW5zaWduZWQgY29sdW1u
U3BhbikgY29uc3QKICAgICB7CisgICAgICAgIEFTU0VSVCghbV9ncmlkLmlzRW1wdHkoKSk7Cisg
ICAgICAgIEFTU0VSVCghbV9ncmlkWzBdLmlzRW1wdHkoKSk7CisKICAgICAgICAgLy8gSWdub3Jl
IGNlbGxzIG91dHNpZGUgY3VycmVudCBncmlkIGFzIHdlIHdpbGwgZ3JvdyBpdCBsYXRlciBpZiBu
ZWVkZWQuCiAgICAgICAgIHVuc2lnbmVkIG1heFJvd3MgPSBzdGQ6Om1pbjx1bnNpZ25lZD4obV9y
b3dJbmRleCArIHJvd1NwYW4sIG1fZ3JpZC5zaXplKCkpOwogICAgICAgICB1bnNpZ25lZCBtYXhD
b2x1bW5zID0gc3RkOjptaW48dW5zaWduZWQ+KG1fY29sdW1uSW5kZXggKyBjb2x1bW5TcGFuLCBt
X2dyaWRbMF0uc2l6ZSgpKTsKQEAgLTE3OSw2ICsxODQsOCBAQCBwdWJsaWM6CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JpZEFyZWE+IG5leHRFbXB0eUdyaWRBcmVhKHVuc2lnbmVkIGZpeGVkVHJh
Y2tTcGFuLCB1bnNpZ25lZCB2YXJ5aW5nVHJhY2tTcGFuKQogICAgIHsKKyAgICAgICAgQVNTRVJU
KCFtX2dyaWQuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKCFtX2dyaWRbMF0uaXNFbXB0eSgp
KTsKICAgICAgICAgQVNTRVJUKGZpeGVkVHJhY2tTcGFuID49IDEgJiYgdmFyeWluZ1RyYWNrU3Bh
biA+PSAxKTsKIAogICAgICAgICBpZiAobV9ncmlkLmlzRW1wdHkoKSkKQEAgLTMxOCw2ICszMjUs
MjMgQEAgdm9pZCBSZW5kZXJHcmlkOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlm
ZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWwKICAgICB9CiB9CiAKK3Vuc2lnbmVkIFJlbmRl
ckdyaWQ6OmdyaWRDb2x1bW5Db3VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX2dyaWRJc0Rp
cnR5KTsKKyAgICAvLyBEdWUgdG8gbGltaXRhdGlvbnMgaW4gb3VyIGludGVybmFsIHJlcHJlc2Vu
dGF0aW9uLCB3ZSBjYW5ub3Qga25vdyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgZnJvbQorICAgIC8v
IG1fZ3JpZCAqaWYqIHRoZXJlIGlzIG5vIHJvdyAoYmVjYXVzZSBtX2dyaWQgd291bGQgYmUgZW1w
dHkpLiBUaGF0J3Mgd2h5IGluIHRoYXQgY2FzZSB3ZSBuZWVkCisgICAgLy8gdG8gZ2V0IGl0IGZy
b20gdGhlIHN0eWxlLiBOb3RlIHRoYXQgd2Uga25vdyBmb3Igc3VyZSB0aGF0IHRoZXJlIGFyZSd0
IGFueSBpbXBsaWNpdCB0cmFja3MsCisgICAgLy8gYmVjYXVzZSBub3QgaGF2aW5nIHJvd3MgaW1w
bGllcyB0aGF0IHRoZXJlIGFyZSBubyAibm9ybWFsIiBjaGlsZHJlbiAob3V0LW9mLWZsb3cgY2hp
bGRyZW4gYXJlCisgICAgLy8gbm90IHN0b3JlZCBpbiBtX2dyaWQpLgorICAgIHJldHVybiBtX2dy
aWQuc2l6ZSgpID8gbV9ncmlkWzBdLnNpemUoKSA6IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhw
bGljaXRHcmlkQ29sdW1uQ291bnQoc3R5bGUoKSwgbV9hdXRvUmVwZWF0Q29sdW1ucyk7Cit9CisK
K3Vuc2lnbmVkIFJlbmRlckdyaWQ6OmdyaWRSb3dDb3VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFtX2dyaWRJc0RpcnR5KTsKKyAgICByZXR1cm4gbV9ncmlkLnNpemUoKTsKK30KKwogTGF5b3V0
VW5pdCBSZW5kZXJHcmlkOjpjb21wdXRlVHJhY2tCYXNlZExvZ2ljYWxIZWlnaHQoY29uc3QgR3Jp
ZFNpemluZ0RhdGEmIHNpemluZ0RhdGEpIGNvbnN0CiB7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0OwpAQCAtNDE5LDkgKzQ0Myw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0QmxvY2so
Ym9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQogCiBMYXlvdXRVbml0IFJlbmRlckdy
aWQ6Omd1dHRlcnNTaXplKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2ln
bmVkIHNwYW4pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNwYW4gPj0gMSk7Ci0KLSAgICBpZiAoc3Bh
biA9PSAxKQorICAgIGlmIChzcGFuIDw9IDEpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBj
b25zdCBMZW5ndGgmIHRyYWNrR2FwID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBzdHlsZSgp
LmdyaWRDb2x1bW5HYXAoKSA6IHN0eWxlKCkuZ3JpZFJvd0dhcCgpOwpAQCAtNDM1LDcgKzQ1Nyw3
IEBAIExheW91dFVuaXQgUmVuZGVyR3JpZDo6b2Zmc2V0QmV0d2VlblRyYWNrcyhHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjCiAKIHZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZUlu
dHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRV
bml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0CiB7Ci0gICAgYm9vbCB3YXNQb3B1bGF0ZWQgPSBn
cmlkV2FzUG9wdWxhdGVkKCk7CisgICAgYm9vbCB3YXNQb3B1bGF0ZWQgPSAhbV9ncmlkSXNEaXJ0
eTsKICAgICBpZiAoIXdhc1BvcHVsYXRlZCkKICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJHcmlk
Kj4odGhpcyktPnBsYWNlSXRlbXNPbkdyaWQoKTsKIApAQCAtNTg4LDE2ICs2MTAsMTggQEAgdm9p
ZCBSZW5kZXJHcmlkOjpjb21wdXRlVXNlZEJyZWFkdGhPZkdyaWRUcmFja3MoR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uIGRpcmVjdGkKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0cmFja0luZGV4
IDogZmxleGlibGVTaXplZFRyYWNrc0luZGV4KQogICAgICAgICAgICAgZmxleEZyYWN0aW9uID0g
c3RkOjptYXgoZmxleEZyYWN0aW9uLCBub3JtYWxpemVkRmxleEZyYWN0aW9uKHRyYWNrc1t0cmFj
a0luZGV4XSwgZ3JpZFRyYWNrU2l6ZShkaXJlY3Rpb24sIHRyYWNrSW5kZXgpLm1heFRyYWNrQnJl
YWR0aCgpLmZsZXgoKSkpOwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmbGV4
aWJsZVNpemVkVHJhY2tzSW5kZXguc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEdyaWRJdGVy
YXRvciBpdGVyYXRvcihtX2dyaWQsIGRpcmVjdGlvbiwgZmxleGlibGVTaXplZFRyYWNrc0luZGV4
W2ldKTsKLSAgICAgICAgICAgIHdoaWxlIChSZW5kZXJCb3gqIGdyaWRJdGVtID0gaXRlcmF0b3Iu
bmV4dEdyaWRJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBHcmlkU3BhbiBzcGFuID0g
Y2FjaGVkR3JpZFNwYW4oKmdyaWRJdGVtLCBkaXJlY3Rpb24pOworICAgICAgICBpZiAoIW1fZ3Jp
ZEl0ZW1BcmVhLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGRpcmVjdGlvbiwgZmxleGlibGVTaXpl
ZFRyYWNrc0luZGV4W2ldKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoUmVuZGVyQm94KiBncmlk
SXRlbSA9IGl0ZXJhdG9yLm5leHRHcmlkSXRlbSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdyaWRTcGFuIHNwYW4gPSBjYWNoZWRHcmlkU3BhbigqZ3JpZEl0ZW0sIGRpcmVjdGlvbik7
CiAKLSAgICAgICAgICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBhbHJlYWR5IHByb2Nlc3NlZCBp
dGVtcy4KLSAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgc3Bhbi5zdGFydExpbmUoKSA8PSBm
bGV4aWJsZVNpemVkVHJhY2tzSW5kZXhbaSAtIDFdKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGluY2x1ZGUgYWxyZWFkeSBwcm9j
ZXNzZWQgaXRlbXMuCisgICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBzcGFuLnN0YXJ0
TGluZSgpIDw9IGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleFtpIC0gMV0pCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIGZsZXhGcmFjdGlvbiA9IHN0
ZDo6bWF4KGZsZXhGcmFjdGlvbiwgZmluZEZsZXhGYWN0b3JVbml0U2l6ZSh0cmFja3MsIHNwYW4s
IGRpcmVjdGlvbiwgbWF4Q29udGVudEZvckNoaWxkKCpncmlkSXRlbSwgZGlyZWN0aW9uLCBzaXpp
bmdEYXRhKSkpOworICAgICAgICAgICAgICAgICAgICBmbGV4RnJhY3Rpb24gPSBzdGQ6Om1heChm
bGV4RnJhY3Rpb24sIGZpbmRGbGV4RmFjdG9yVW5pdFNpemUodHJhY2tzLCBzcGFuLCBkaXJlY3Rp
b24sIG1heENvbnRlbnRGb3JDaGlsZCgqZ3JpZEl0ZW0sIGRpcmVjdGlvbiwgc2l6aW5nRGF0YSkp
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC04OTcsMjEgKzkyMSwyMyBAQCB2b2lkIFJlbmRlckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRU
cmFja1NpemluZ0Z1bmN0aW9ucyhHcmlkVHJhY2tTaXppbmdEaXJlY3RpbwogewogICAgIHNpemlu
Z0RhdGEuaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLnNocmluaygwKTsKICAgICBIYXNoU2V0
PFJlbmRlckJveCo+IGl0ZW1zU2V0OwotICAgIGZvciAoYXV0byB0cmFja0luZGV4IDogc2l6aW5n
RGF0YS5jb250ZW50U2l6ZWRUcmFja3NJbmRleCkgewotICAgICAgICBHcmlkSXRlcmF0b3IgaXRl
cmF0b3IobV9ncmlkLCBkaXJlY3Rpb24sIHRyYWNrSW5kZXgpOwotICAgICAgICBHcmlkVHJhY2sm
IHRyYWNrID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IHNpemluZ0RhdGEuY29sdW1uVHJh
Y2tzW3RyYWNrSW5kZXhdIDogc2l6aW5nRGF0YS5yb3dUcmFja3NbdHJhY2tJbmRleF07CisgICAg
aWYgKCFtX2dyaWRJdGVtQXJlYS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHRyYWNr
SW5kZXggOiBzaXppbmdEYXRhLmNvbnRlbnRTaXplZFRyYWNrc0luZGV4KSB7CisgICAgICAgICAg
ICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBkaXJlY3Rpb24sIHRyYWNrSW5kZXgpOwor
ICAgICAgICAgICAgR3JpZFRyYWNrJiB0cmFjayA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykg
PyBzaXppbmdEYXRhLmNvbHVtblRyYWNrc1t0cmFja0luZGV4XSA6IHNpemluZ0RhdGEucm93VHJh
Y2tzW3RyYWNrSW5kZXhdOwogCi0gICAgICAgIHdoaWxlIChSZW5kZXJCb3gqIGdyaWRJdGVtID0g
aXRlcmF0b3IubmV4dEdyaWRJdGVtKCkpIHsKLSAgICAgICAgICAgIGlmIChpdGVtc1NldC5hZGQo
Z3JpZEl0ZW0pLmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBHcmlkU3BhbiYg
c3BhbiA9IGNhY2hlZEdyaWRTcGFuKCpncmlkSXRlbSwgZGlyZWN0aW9uKTsKLSAgICAgICAgICAg
ICAgICBpZiAoc3Bhbi5pbnRlZ2VyU3BhbigpID09IDEpCi0gICAgICAgICAgICAgICAgICAgIHJl
c29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvck5vblNwYW5uaW5nSXRlbXMo
ZGlyZWN0aW9uLCBzcGFuLCAqZ3JpZEl0ZW0sIHRyYWNrLCBzaXppbmdEYXRhKTsKLSAgICAgICAg
ICAgICAgICBlbHNlIGlmICghc3Bhbm5pbmdJdGVtQ3Jvc3Nlc0ZsZXhpYmxlU2l6ZWRUcmFja3Mo
c3BhbiwgZGlyZWN0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgc2l6aW5nRGF0YS5pdGVtc1Nv
cnRlZEJ5SW5jcmVhc2luZ1NwYW4uYXBwZW5kKEdyaWRJdGVtV2l0aFNwYW4oKmdyaWRJdGVtLCBz
cGFuKSk7CisgICAgICAgICAgICB3aGlsZSAoUmVuZGVyQm94KiBncmlkSXRlbSA9IGl0ZXJhdG9y
Lm5leHRHcmlkSXRlbSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW1zU2V0LmFkZChncmlk
SXRlbSkuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmlkU3BhbiYg
c3BhbiA9IGNhY2hlZEdyaWRTcGFuKCpncmlkSXRlbSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNwYW4uaW50ZWdlclNwYW4oKSA9PSAxKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9yTm9uU3Bhbm5p
bmdJdGVtcyhkaXJlY3Rpb24sIHNwYW4sICpncmlkSXRlbSwgdHJhY2ssIHNpemluZ0RhdGEpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghc3Bhbm5pbmdJdGVtQ3Jvc3Nlc0ZsZXhpYmxl
U2l6ZWRUcmFja3Moc3BhbiwgZGlyZWN0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNp
emluZ0RhdGEuaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmFwcGVuZChHcmlkSXRlbVdpdGhT
cGFuKCpncmlkSXRlbSwgc3BhbikpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQorICAgICAgICBzdGQ6OnNvcnQoc2l6aW5nRGF0YS5pdGVtc1NvcnRlZEJ5SW5j
cmVhc2luZ1NwYW4uYmVnaW4oKSwgc2l6aW5nRGF0YS5pdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1Nw
YW4uZW5kKCkpOwogICAgIH0KLSAgICBzdGQ6OnNvcnQoc2l6aW5nRGF0YS5pdGVtc1NvcnRlZEJ5
SW5jcmVhc2luZ1NwYW4uYmVnaW4oKSwgc2l6aW5nRGF0YS5pdGVtc1NvcnRlZEJ5SW5jcmVhc2lu
Z1NwYW4uZW5kKCkpOwogCiAgICAgYXV0byBpdCA9IHNpemluZ0RhdGEuaXRlbXNTb3J0ZWRCeUlu
Y3JlYXNpbmdTcGFuLmJlZ2luKCk7CiAgICAgYXV0byBlbmQgPSBzaXppbmdEYXRhLml0ZW1zU29y
dGVkQnlJbmNyZWFzaW5nU3Bhbi5lbmQoKTsKQEAgLTEyOTQsMTMgKzEzMjAsMTQgQEAgdW5zaWdu
ZWQgUmVuZGVyR3JpZDo6Y29tcHV0ZUF1dG9SZXBlYXRUcmFja3NDb3VudChHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24gZGlyZWMKIAogdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKCkK
IHsKLSAgICBBU1NFUlQoIWdyaWRXYXNQb3B1bGF0ZWQoKSk7CisgICAgQVNTRVJUKG1fZ3JpZElz
RGlydHkpOwogICAgIEFTU0VSVChtX2dyaWRJdGVtQXJlYS5pc0VtcHR5KCkpOwogCiAgICAgbV9h
dXRvUmVwZWF0Q29sdW1ucyA9IGNvbXB1dGVBdXRvUmVwZWF0VHJhY2tzQ291bnQoRm9yQ29sdW1u
cyk7CiAgICAgbV9hdXRvUmVwZWF0Um93cyA9IGNvbXB1dGVBdXRvUmVwZWF0VHJhY2tzQ291bnQo
Rm9yUm93cyk7CiAKICAgICBwb3B1bGF0ZUV4cGxpY2l0R3JpZEFuZE9yZGVySXRlcmF0b3IoKTsK
KyAgICBtX2dyaWRJc0RpcnR5ID0gZmFsc2U7CiAKICAgICBWZWN0b3I8UmVuZGVyQm94Kj4gYXV0
b01ham9yQXhpc0F1dG9HcmlkSXRlbXM7CiAgICAgVmVjdG9yPFJlbmRlckJveCo+IHNwZWNpZmll
ZE1ham9yQXhpc0F1dG9HcmlkSXRlbXM7CkBAIC0xMzQ4LDggKzEzNzUsOCBAQCB2b2lkIFJlbmRl
ckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcigpCiB7CiAgICAgT3Jk
ZXJJdGVyYXRvclBvcHVsYXRvciBwb3B1bGF0b3IobV9vcmRlckl0ZXJhdG9yKTsKICAgICBtX3Nt
YWxsZXN0Um93U3RhcnQgPSBtX3NtYWxsZXN0Q29sdW1uU3RhcnQgPSAwOwotICAgIHVuc2lnbmVk
IG1heGltdW1Sb3dJbmRleCA9IHN0ZDo6bWF4PHVuc2lnbmVkPigxLCBHcmlkUG9zaXRpb25zUmVz
b2x2ZXI6OmV4cGxpY2l0R3JpZFJvd0NvdW50KHN0eWxlKCksIG1fYXV0b1JlcGVhdFJvd3MpKTsK
LSAgICB1bnNpZ25lZCBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6Om1heDx1bnNpZ25lZD4oMSwg
R3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRDb2x1bW5Db3VudChzdHlsZSgpLCBt
X2F1dG9SZXBlYXRDb2x1bW5zKSk7CisgICAgdW5zaWduZWQgbWF4aW11bVJvd0luZGV4ID0gR3Jp
ZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRSb3dDb3VudChzdHlsZSgpLCBtX2F1dG9S
ZXBlYXRSb3dzKTsKKyAgICB1bnNpZ25lZCBtYXhpbXVtQ29sdW1uSW5kZXggPSBHcmlkUG9zaXRp
b25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KHN0eWxlKCksIG1fYXV0b1JlcGVh
dENvbHVtbnMpOwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgewogICAgICAgICBpZiAo
Y2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQpAQCAtMTUwOSw2ICsxNTM2LDcgQEAgdm9p
ZCBSZW5kZXJHcmlkOjpjbGVhckdyaWQoKQogewogICAgIG1fZ3JpZC5jbGVhcigpOwogICAgIG1f
Z3JpZEl0ZW1BcmVhLmNsZWFyKCk7CisgICAgbV9ncmlkSXNEaXJ0eSA9IHRydWU7CiB9CiAKIHN0
YXRpYyBjb25zdCBTdHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhJiBub3JtYWxWYWx1ZUJlaGF2aW9y
R3JpZCgpCkBAIC0xNzY2LDE2ICsxNzk0LDE5IEBAIHZvaWQgUmVuZGVyR3JpZDo6cG9wdWxhdGVH
cmlkUG9zaXRpb25zRm9yRGlyZWN0aW9uKEdyaWRTaXppbmdEYXRhJiBzaXppbmdEYXRhLCBHCiAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZUcmFja3MgPSB0cmFja3Muc2l6ZSgpOwogICAgIHVuc2lnbmVk
IG51bWJlck9mTGluZXMgPSBudW1iZXJPZlRyYWNrcyArIDE7CiAgICAgdW5zaWduZWQgbGFzdExp
bmUgPSBudW1iZXJPZkxpbmVzIC0gMTsKLSAgICB1bnNpZ25lZCBuZXh0VG9MYXN0TGluZSA9IG51
bWJlck9mTGluZXMgLSAyOworCiAgICAgQ29udGVudEFsaWdubWVudERhdGEgb2Zmc2V0ID0gY29t
cHV0ZUNvbnRlbnRQb3NpdGlvbkFuZERpc3RyaWJ1dGlvbk9mZnNldChkaXJlY3Rpb24sIHNpemlu
Z0RhdGEuZnJlZVNwYWNlRm9yRGlyZWN0aW9uKGRpcmVjdGlvbikudmFsdWUoKSwgbnVtYmVyT2ZU
cmFja3MpOwogICAgIExheW91dFVuaXQgdHJhY2tHYXAgPSBndXR0ZXJzU2l6ZShkaXJlY3Rpb24s
IDIpOwogICAgIGF1dG8mIHBvc2l0aW9ucyA9IGlzUm93QXhpcyA/IG1fY29sdW1uUG9zaXRpb25z
IDogbV9yb3dQb3NpdGlvbnM7CiAgICAgcG9zaXRpb25zLnJlc2l6ZShudW1iZXJPZkxpbmVzKTsK
ICAgICBhdXRvIGJvcmRlckFuZFBhZGRpbmcgPSBpc1Jvd0F4aXMgPyBib3JkZXJBbmRQYWRkaW5n
TG9naWNhbExlZnQoKSA6IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKICAgICBwb3NpdGlvbnNb
MF0gPSBib3JkZXJBbmRQYWRkaW5nICsgb2Zmc2V0LnBvc2l0aW9uT2Zmc2V0OwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBuZXh0VG9MYXN0TGluZTsgKytpKQotICAgICAgICBwb3NpdGlv
bnNbaSArIDFdID0gcG9zaXRpb25zW2ldICsgb2Zmc2V0LmRpc3RyaWJ1dGlvbk9mZnNldCArIHRy
YWNrc1tpXS5iYXNlU2l6ZSgpICsgdHJhY2tHYXA7Ci0gICAgcG9zaXRpb25zW2xhc3RMaW5lXSA9
IHBvc2l0aW9uc1tuZXh0VG9MYXN0TGluZV0gKyB0cmFja3NbbmV4dFRvTGFzdExpbmVdLmJhc2VT
aXplKCk7CisgICAgaWYgKG51bWJlck9mTGluZXMgPiAxKSB7CisgICAgICAgIHVuc2lnbmVkIG5l
eHRUb0xhc3RMaW5lID0gbnVtYmVyT2ZMaW5lcyAtIDI7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBuZXh0VG9MYXN0TGluZTsgKytpKQorICAgICAgICAgICAgcG9zaXRpb25zW2kg
KyAxXSA9IHBvc2l0aW9uc1tpXSArIG9mZnNldC5kaXN0cmlidXRpb25PZmZzZXQgKyB0cmFja3Nb
aV0uYmFzZVNpemUoKSArIHRyYWNrR2FwOworICAgICAgICBwb3NpdGlvbnNbbGFzdExpbmVdID0g
cG9zaXRpb25zW25leHRUb0xhc3RMaW5lXSArIHRyYWNrc1tuZXh0VG9MYXN0TGluZV0uYmFzZVNp
emUoKTsKKyAgICB9CiAgICAgYXV0byYgb2Zmc2V0QmV0d2VlblRyYWNrcyA9IGlzUm93QXhpcyA/
IG1fb2Zmc2V0QmV0d2VlbkNvbHVtbnMgOiBtX29mZnNldEJldHdlZW5Sb3dzOwogICAgIG9mZnNl
dEJldHdlZW5UcmFja3MgPSBvZmZzZXQuZGlzdHJpYnV0aW9uT2Zmc2V0OwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKaW5kZXggNDdhMDBhN2Q2ODdkNGI2MjZjYjMyMDk5ZTFj
ZTc0YTE4ZTM1NDdhZi4uY2UwMWE2ZGNkNThlMTMwNDdmZTc3NmEzN2FlODQxOGNkYjc5N2I2NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCkBAIC0xNzMsMjAgKzE3MywxMCBA
QCBwcml2YXRlOgogICAgIGJvb2wgdHJhY2tzQXJlV2lkZXJUaGFuTWluVHJhY2tCcmVhZHRoKEdy
aWRUcmFja1NpemluZ0RpcmVjdGlvbiwgR3JpZFNpemluZ0RhdGEmKTsKICNlbmRpZgogCi0gICAg
Ym9vbCBncmlkV2FzUG9wdWxhdGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZ3JpZC5pc0VtcHR5KCkg
JiYgIW1fZ3JpZFswXS5pc0VtcHR5KCk7IH0KLQogICAgIGJvb2wgc3Bhbm5pbmdJdGVtQ3Jvc3Nl
c0ZsZXhpYmxlU2l6ZWRUcmFja3MoY29uc3QgR3JpZFNwYW4mLCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24pIGNvbnN0OwogCi0gICAgdW5zaWduZWQgZ3JpZENvbHVtbkNvdW50KCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChncmlkV2FzUG9wdWxhdGVkKCkpOwotICAgICAgICByZXR1cm4g
bV9ncmlkWzBdLnNpemUoKTsKLSAgICB9Ci0gICAgdW5zaWduZWQgZ3JpZFJvd0NvdW50KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChncmlkV2FzUG9wdWxhdGVkKCkpOwotICAgICAgICBy
ZXR1cm4gbV9ncmlkLnNpemUoKTsKLSAgICB9CisgICAgdW5zaWduZWQgZ3JpZENvbHVtbkNvdW50
KCkgY29uc3Q7CisgICAgdW5zaWduZWQgZ3JpZFJvd0NvdW50KCkgY29uc3Q7CiAKICAgICBib29s
IGhhc0RlZmluaXRlTG9naWNhbFNpemUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsK
ICAgICBMYXlvdXRVbml0IHRyYW5zbGF0ZVJUTENvb3JkaW5hdGUoTGF5b3V0VW5pdCkgY29uc3Q7
CkBAIC0yMDcsNiArMTk3LDggQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fYXV0b1JlcGVh
dENvbHVtbnMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9hdXRvUmVwZWF0Um93cyB7IDAgfTsKKwor
ICAgIGJvb2wgbV9ncmlkSXNEaXJ0eSB7IHRydWUgfTsKIH07CiAKIHNpemVfdCBpbmxpbmUgUmVu
ZGVyR3JpZDo6YXV0b1JlcGVhdENvdW50Rm9yRGlyZWN0aW9uKEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiBkaXJlY3Rpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzVhZGQ1YWVmZjZmNTRlOGFhNTk1ZTljNmMy
MzBmYzVhZjNmZTY5ZS4uMGE5N2MxNTNiZmY5OGYwN2I3NTMzYWVhY2FmZDExMjI4MjljZGQ5ZCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE2LTA1LTI1ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8
c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3JpZF0gRW1wdHkgZ3JpZCB3aXRo
b3V0IGV4cGxpY2l0IHRyYWNrcyBzaG91bGRuJ3QgaGF2ZSBhbnkgc2l6ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTk3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBzdXJlIHRoYXQgZW1wdHkg
Z3JpZHMgKGFuZCBncmlkcyB3aXRoIG9uZSBlbXB0eSBheGlzKSBhcmUgcHJvcGVybHkgaGFuZGxl
ZC4gRG8gYWxzbworICAgICAgICB2ZXJpZnkgdGhhdCByZW1vdmluZyBhbGwgdGhlIGl0ZW1zIGZy
b20gYSBncmlkIGFsc28gZ2VuZXJhdGVzIGFuIGNvcnJlY3QgZW1wdHkgZ3JpZC4KKworICAgICAg
ICAqIGZhc3QvY3NzLWdyaWQtbGF5b3V0L2VtcHR5LWdyaWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2Nzcy1ncmlkLWxheW91dC9lbXB0eS1ncmlkLmh0bWw6IEFkZGVkLgor
CiAyMDE2LTA1LTI1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
VXBkYXRlIGRvbS9XaW5kb3cvbWVzc2FnZWV2ZW50LXNvdXJjZS1wb3N0bWVzc2FnZS1yZWlmaWVk
Lmh0bWwgYWZ0ZXIgcjIwMTMxNQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ3Jp
ZC1sYXlvdXQvZW1wdHktZ3JpZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1n
cmlkLWxheW91dC9lbXB0eS1ncmlkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MGVkYjZlNzUw
MWY3NzQ4OGJkOGNiNWI1NzA2YzM0YjIxMGY0OGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZW1wdHktZ3JpZC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMiBAQAorVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGdyaWRzIHdpdGggbm8gaW4tZmxvdyBp
dGVtcyBhcmUgYWN0dWFsbHkgZW1wdHkuCisKK1BBU1MKK1hYWFgKK1BBU1MKK1BBU1MKK1BBU1MK
K1BBU1MKK1BBU1MKK1BBU1MKK1BBU1MKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvY3NzLWdyaWQtbGF5b3V0L2VtcHR5LWdyaWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3Nz
LWdyaWQtbGF5b3V0L2VtcHR5LWdyaWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzM5ZTc2NDA1MDRmZjgz
NzA4ODBkMzUyMDIwMmRmM2E5OGE3Nzc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZW1wdHktZ3JpZC5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGxpbmsgaHJlZj0icmVzb3VyY2VzL2dyaWQuY3NzIiByZWw9InN0eWxl
c2hlZXQiPgorPGxpbmsgaHJlZj0iLi4vY3NzLWludHJpbnNpYy1kaW1lbnNpb25zL3Jlc291cmNl
cy93aWR0aC1rZXl3b3JkLWNsYXNzZXMuY3NzIiByZWw9c3R5bGVzaGVldD4KKzxzdHlsZT4KKy5n
cmlkV2l0aEFic29sdXRlUG9zaXRpb25lZEl0ZW0geworICAgIC8qIEVuc3VyZXMgdGhhdCB0aGUg
Z3JpZCBjb250YWluZXIgaXMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgb2YgdGhlIGFic29sdXRlbHkg
cG9zaXRpb25lZCBncmlkIGNoaWxkcmVuLiAqLworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30K
KworLmdyaWQgeworICAgIGdyaWQtYXV0by1jb2x1bW5zOiAyMDBweDsKKyAgICBncmlkLWF1dG8t
cm93czogMjAwcHg7Cit9CisKKy5pdGVtIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
Z3JpZC1jb2x1bW46IDEgLyAyOworICAgIGZvbnQ6IDEwcHgvMSBBaGVtOworfQorCis8L3N0eWxl
PgorCis8c2NyaXB0PgorZnVuY3Rpb24gYWRkUmVtb3ZlSXRlbSgpCit7CisgICAgdmFyIGdyaWRJ
dGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZ3JpZEl0ZW0uc3R5bGUu
d2lkdGggPSAiMTAwcHgiOworICAgIGdyaWRJdGVtLnN0eWxlLmhlaWdodCA9ICIxMDBweCI7Cisg
ICAgZ3JpZEl0ZW0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gInJlZCI7CisgICAgdmFyIGdyaWRF
bGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImR5bmFtaWNHcmlkIik7CisgICAgZ3Jp
ZEVsZW1lbnQuYXBwZW5kQ2hpbGQoZ3JpZEl0ZW0pOworICAgIGdyaWRFbGVtZW50LnJlbW92ZUNo
aWxkKGdyaWRJdGVtKTsKK30KKworZnVuY3Rpb24gZG9UZXN0KCkgeworICAgICBhZGRSZW1vdmVJ
dGVtKCk7CisgICAgIGNoZWNrTGF5b3V0KCIuZ3JpZCIpOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2NoZWNrLWxheW91dC5qcyI+PC9zY3JpcHQ+CisKKzxib2R5
IG9ubG9hZD0iZG9UZXN0KCkiPgorCis8cD5UaGlzIHRlc3QgY2hlY2tzIHRoYXQgZ3JpZHMgd2l0
aCBubyBpbi1mbG93IGl0ZW1zIGFyZSBhY3R1YWxseSBlbXB0eS48L3A+CisKKzxkaXYgY2xhc3M9
ImdyaWQgbWluLWNvbnRlbnQiIGRhdGEtZXhwZWN0ZWQtd2lkdGg9IjAiIGRhdGEtZXhwZWN0ZWQt
aGVpZ2h0PSIwIj48L2Rpdj4KKworPGRpdiBjbGFzcz0iZ3JpZCBtaW4tY29udGVudCBncmlkV2l0
aEFic29sdXRlUG9zaXRpb25lZEl0ZW0iIGRhdGEtZXhwZWN0ZWQtd2lkdGg9IjAiIGRhdGEtZXhw
ZWN0ZWQtaGVpZ2h0PSIwIj4KKyAgICA8ZGl2IGNsYXNzPSJpdGVtIiBkYXRhLWV4cGVjdGVkLXdp
ZHRoPSI0MCIgZGF0YS1leHBlY3RlZC1oZWlnaHQ9IjEwIj5YWFhYPC9kaXY+Cis8L2Rpdj4KKwor
PGRpdiBpZD0iZHluYW1pY0dyaWQiIGNsYXNzPSJncmlkIG1pbi1jb250ZW50IiBkYXRhLWV4cGVj
dGVkLXdpZHRoPSIwIiBkYXRhLWV4cGVjdGVkLWhlaWdodD0iMCI+PC9kaXY+CisKKzxkaXYgY2xh
c3M9ImdyaWQgbWluLWNvbnRlbnQiIHN0eWxlPSJncmlkLXRlbXBsYXRlLXJvd3M6IDEwMHB4OyIg
ZGF0YS1leHBlY3RlZC13aWR0aD0iMCIgZGF0YS1leHBlY3RlZC1oZWlnaHQ9IjEwMCI+PC9kaXY+
Cis8ZGl2IGNsYXNzPSJncmlkIG1pbi1jb250ZW50IiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1yb3dz
OiBhdXRvOyIgZGF0YS1leHBlY3RlZC13aWR0aD0iMCIgZGF0YS1leHBlY3RlZC1oZWlnaHQ9IjAi
PjwvZGl2PgorPGRpdiBjbGFzcz0iZ3JpZCBtaW4tY29udGVudCIgc3R5bGU9ImdyaWQtdGVtcGxh
dGUtcm93czogMWZyOyIgZGF0YS1leHBlY3RlZC13aWR0aD0iMCIgZGF0YS1leHBlY3RlZC1oZWln
aHQ9IjAiPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJncmlkIG1pbi1jb250ZW50IiBzdHlsZT0iZ3Jp
ZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDBweDsiIGRhdGEtZXhwZWN0ZWQtd2lkdGg9IjEwMCIgZGF0
YS1leHBlY3RlZC1oZWlnaHQ9IjAiPjwvZGl2PgorPGRpdiBjbGFzcz0iZ3JpZCBtaW4tY29udGVu
dCIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0bzsiIGRhdGEtZXhwZWN0ZWQtd2lk
dGg9IjAiIGRhdGEtZXhwZWN0ZWQtaGVpZ2h0PSIwIj48L2Rpdj4KKzxkaXYgY2xhc3M9ImdyaWQg
bWluLWNvbnRlbnQiIHN0eWxlPSJncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsiIGRhdGEtZXhw
ZWN0ZWQtd2lkdGg9IjAiIGRhdGEtZXhwZWN0ZWQtaGVpZ2h0PSIwIj48L2Rpdj4KKworPC9ib2R5
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280077</attachid>
            <date>2016-05-30 00:59:56 -0700</date>
            <delta_ts>2016-05-30 20:58:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155197-20160530100108.patch</filename>
            <type>text/plain</type>
            <size>19022</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGIyZDkxZTJjNWNlOTli
MzExMjQ3YzYxOGFmMzkyYmViZDJiYTM4Yi4uZjJiOWQzMzdlZmEzYWRhN2NjYzU4OTU1ZTExNTI2
ZDU5ZWM2OTcwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ4IEBACiAyMDE2LTA1LTI1ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCisgICAgICAgIFtjc3MtZ3Jp
ZF0gRW1wdHkgZ3JpZCB3aXRob3V0IGV4cGxpY2l0IHRyYWNrcyBzaG91bGRuJ3QgaGF2ZSBhbnkg
c2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1
MTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBncmlkIGlzIGEgVmVjdG9yIG9mIFZlY3Rv
ciByZXByZXNlbnRpbmcgcm93cyBhbmQKKyAgICAgICAgY29sdW1ucy4gQmVjYXVzZSBvZiB0aGF0
IGl0IHdhcyBub3QgcG9zc2libGUgdG8gaGF2ZSBjb2x1bW5zIHdpdGhvdXQgaGF2aW5nIGF0IGxl
YXN0IG9uZQorICAgICAgICByb3cuIFRoYXQgZm9yY2VkIHVzIHRvIGhhdmUgYSAxeDEgaW50ZXJu
YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyaWQgZXZlbiBpZiBpdCB3YXMKKyAgICAgICAgYWN0
dWFsbHkgZW1wdHkuIFRoYXQgd29ya3MgZm9yIG1vc3Qgb2YgdGhlIGNhc2VzIGV4Y2VwdCB3aGVu
IHRoZSBncmlkIGlzIGFjdHVhbGx5IGVtcHR5LgorCisgICAgICAgIEJ5IGNoYW5naW5nIHRoZSB3
YXkgd2UgY29tcHV0ZSB0aGUgc2l6ZXMgd2UgY2FuIG92ZXJjb21lIHRoYXQgaW1wbGVtZW50YXRp
b24KKyAgICAgICAgcmVzdHJpY3Rpb24uIFRoaXMgYWxsb3dlZCB1cyBhbHNvIHRvIHRoaWdodGVu
IHRoZSBjb25kaXRpb25zIHVuZGVyIHdlIGNvdWxkIHVzZSB0aGUKKyAgICAgICAgR3JpZEl0ZXJh
dG9yLiBGcm9tIG5vdyBvbiBpdCB3b24ndCBiZSBwb3NzaWJsZSB0byB1c2UgaXQgb24gZW1wdHkg
Z3JpZHMgc28gY2FsbGVycyBzaG91bGQKKyAgICAgICAgZW5mb3JjZSB0aGF0IHJlc3RyaWN0aW9u
LgorCisgICAgICAgIEEgbmV3IGJvb2wgd2FzIGFkZGVkIHRvIHZlcmlmeSB0aGF0IHBsYWNlSXRl
bXNPbkdyaWQoKSBoYXMgYmVlbiBhbHJlYWR5IGNhbGxlZC4gVGhlIHByZXZpb3VzCisgICAgICAg
IGNvZGUgd2FzIHJlbHlpbmcgb24gdGhlIGZhY3QgdGhhdCB0aGVyZSB3ZXJlIGl0ZW1zIGluIHRo
ZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgd2hpY2ggaXMKKyAgICAgICAgd3JvbmcsIGFzIHRo
ZXJlIG1pZ2h0IGJlIG5vIGl0ZW1zIGluIHRoZSBncmlkLgorCisgICAgICAgIFRlc3Q6IGZhc3Qv
Y3NzLWdyaWQtbGF5b3V0L2VtcHR5LWdyaWQuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6R3JpZEl0ZXJhdG9y
OjpHcmlkSXRlcmF0b3IpOiBBZGRlZCBBU1NFUlRzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
R3JpZDo6R3JpZEl0ZXJhdG9yOjpuZXh0R3JpZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckdyaWQ6OkdyaWRJdGVyYXRvcjo6aXNFbXB0eUFyZWFFbm91Z2gpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OkdyaWRJdGVyYXRvcjo6bmV4dEVtcHR5R3Jp
ZEFyZWEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmdyaWRDb2x1bW5D
b3VudCk6IFVzZSB0aGUgc3R5bGUgdG8gcmVzb2x2ZSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaWYK
KyAgICAgICAgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGlzIGVtcHR5LgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyR3JpZDo6Z3JpZFJvd0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckdyaWQ6Omd1dHRlcnNTaXplKTogQWxsb3cgdG8gcGFzcyAwIGFzIHNwYW4sIHRoaXMgcGVy
bWl0cyB1c2luZyB0aGUgcmV0dXJuCisgICAgICAgIHZhbHVlIG9mIGdyaWRDb2x1bW5Db3VudHxn
cmlkUm93Q291bnQgZGlyZWN0bHkgdG8gY2FsbCB0aGlzIG1ldGhvZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckdyaWQ6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKTogVXNlIG1fZ3Jp
ZElzRGlydHkuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpjb21wdXRlVXNlZEJyZWFk
dGhPZkdyaWRUcmFja3MpOiBEbyBub3QgZXhhbWluZSB0aGUgY29udGVudHMgb2YgZ3JpZAorICAg
ICAgICB0cmFja3MgaWYgdGhlcmUgYXJlIG5vIGl0ZW1zIGluIHRoZSBncmlkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyR3JpZDo6cmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rp
b25zKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25H
cmlkKTogU2V0IG1fZ3JpZElzRGlydHkgdG8gZmFsc2UuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHcmlkOjpwb3B1bGF0ZUV4cGxpY2l0R3JpZEFuZE9yZGVySXRlcmF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyR3JpZDo6Y2xlYXJHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckdyaWQ6OnBvcHVsYXRlR3JpZFBvc2l0aW9uc0ZvckRpcmVjdGlvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckdyaWQuaDogTW92ZWQgZ3JpZENvbHVtbkNvdW50L2dyaWRSb3dDb3VudCB0
byBjcHAgZmlsZS4KKworMjAxNi0wNS0yNSAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJA
aWdhbGlhLmNvbT4KKwogICAgICAgICBbY3NzLWdyaWRdIFJlZmFjdG9yIHBvcHVsYXRlR3JpZFBv
c2l0aW9ucygpCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTgwNjUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdy
aWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4IDgy
YjNlNTRjMzlhODVmMjAyNWJhYzI2NWMxNjA0ZmQyYzEwNmIwYzUuLmE5ZjNiZGE5ZjQwNzY4MmVk
MzM5NDcyZGI1NTBkZDY4NWQ5OWM4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R3JpZC5jcHAKQEAgLTEzOCwxNCArMTM4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvbHVt
bkluZGV4KChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBmaXhlZFRyYWNrSW5kZXggOiB2YXJ5
aW5nVHJhY2tJbmRleCkKICAgICAgICAgLCBtX2NoaWxkSW5kZXgoMCkKICAgICB7CisgICAgICAg
IEFTU0VSVCghbV9ncmlkLmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVCghbV9ncmlkWzBdLmlz
RW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChtX3Jvd0luZGV4IDwgbV9ncmlkLnNpemUoKSk7CiAg
ICAgICAgIEFTU0VSVChtX2NvbHVtbkluZGV4IDwgbV9ncmlkWzBdLnNpemUoKSk7CiAgICAgfQog
CiAgICAgUmVuZGVyQm94KiBuZXh0R3JpZEl0ZW0oKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2dy
aWQuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEFTU0VSVCghbV9ncmlk
LmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVCghbV9ncmlkWzBdLmlzRW1wdHkoKSk7CiAKICAg
ICAgICAgdW5zaWduZWQmIHZhcnlpbmdUcmFja0luZGV4ID0gKG1fZGlyZWN0aW9uID09IEZvckNv
bHVtbnMpID8gbV9yb3dJbmRleCA6IG1fY29sdW1uSW5kZXg7CiAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGVuZE9mVmFyeWluZ1RyYWNrSW5kZXggPSAobV9kaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykg
PyBtX2dyaWQuc2l6ZSgpIDogbV9ncmlkWzBdLnNpemUoKTsKQEAgLTE2MSw2ICsxNjMsOSBAQCBw
dWJsaWM6CiAKICAgICBib29sIGlzRW1wdHlBcmVhRW5vdWdoKHVuc2lnbmVkIHJvd1NwYW4sIHVu
c2lnbmVkIGNvbHVtblNwYW4pIGNvbnN0CiAgICAgeworICAgICAgICBBU1NFUlQoIW1fZ3JpZC5p
c0VtcHR5KCkpOworICAgICAgICBBU1NFUlQoIW1fZ3JpZFswXS5pc0VtcHR5KCkpOworCiAgICAg
ICAgIC8vIElnbm9yZSBjZWxscyBvdXRzaWRlIGN1cnJlbnQgZ3JpZCBhcyB3ZSB3aWxsIGdyb3cg
aXQgbGF0ZXIgaWYgbmVlZGVkLgogICAgICAgICB1bnNpZ25lZCBtYXhSb3dzID0gc3RkOjptaW48
dW5zaWduZWQ+KG1fcm93SW5kZXggKyByb3dTcGFuLCBtX2dyaWQuc2l6ZSgpKTsKICAgICAgICAg
dW5zaWduZWQgbWF4Q29sdW1ucyA9IHN0ZDo6bWluPHVuc2lnbmVkPihtX2NvbHVtbkluZGV4ICsg
Y29sdW1uU3BhbiwgbV9ncmlkWzBdLnNpemUoKSk7CkBAIC0xNzksNyArMTg0LDEwIEBAIHB1Ymxp
YzoKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQXJlYT4gbmV4dEVtcHR5R3JpZEFyZWEodW5z
aWduZWQgZml4ZWRUcmFja1NwYW4sIHVuc2lnbmVkIHZhcnlpbmdUcmFja1NwYW4pCiAgICAgewot
ICAgICAgICBBU1NFUlQoZml4ZWRUcmFja1NwYW4gPj0gMSAmJiB2YXJ5aW5nVHJhY2tTcGFuID49
IDEpOworICAgICAgICBBU1NFUlQoIW1fZ3JpZC5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQo
IW1fZ3JpZFswXS5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQoZml4ZWRUcmFja1NwYW4gPj0g
MSk7CisgICAgICAgIEFTU0VSVCh2YXJ5aW5nVHJhY2tTcGFuID49IDEpOwogCiAgICAgICAgIGlm
IChtX2dyaWQuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zMTgs
NiArMzI2LDIzIEBAIHZvaWQgUmVuZGVyR3JpZDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsCiAgICAgfQogfQogCit1bnNpZ25l
ZCBSZW5kZXJHcmlkOjpncmlkQ29sdW1uQ291bnQoKSBjb25zdAoreworICAgIEFTU0VSVCghbV9n
cmlkSXNEaXJ0eSk7CisgICAgLy8gRHVlIHRvIGxpbWl0YXRpb25zIGluIG91ciBpbnRlcm5hbCBy
ZXByZXNlbnRhdGlvbiwgd2UgY2Fubm90IGtub3cgdGhlIG51bWJlciBvZiBjb2x1bW5zIGZyb20K
KyAgICAvLyBtX2dyaWQgKmlmKiB0aGVyZSBpcyBubyByb3cgKGJlY2F1c2UgbV9ncmlkIHdvdWxk
IGJlIGVtcHR5KS4gVGhhdCdzIHdoeSBpbiB0aGF0IGNhc2Ugd2UgbmVlZAorICAgIC8vIHRvIGdl
dCBpdCBmcm9tIHRoZSBzdHlsZS4gTm90ZSB0aGF0IHdlIGtub3cgZm9yIHN1cmUgdGhhdCB0aGVy
ZSBhcmUndCBhbnkgaW1wbGljaXQgdHJhY2tzLAorICAgIC8vIGJlY2F1c2Ugbm90IGhhdmluZyBy
b3dzIGltcGxpZXMgdGhhdCB0aGVyZSBhcmUgbm8gIm5vcm1hbCIgY2hpbGRyZW4gKG91dC1vZi1m
bG93IGNoaWxkcmVuIGFyZQorICAgIC8vIG5vdCBzdG9yZWQgaW4gbV9ncmlkKS4KKyAgICByZXR1
cm4gbV9ncmlkLnNpemUoKSA/IG1fZ3JpZFswXS5zaXplKCkgOiBHcmlkUG9zaXRpb25zUmVzb2x2
ZXI6OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KHN0eWxlKCksIG1fYXV0b1JlcGVhdENvbHVtbnMp
OworfQorCit1bnNpZ25lZCBSZW5kZXJHcmlkOjpncmlkUm93Q291bnQoKSBjb25zdAoreworICAg
IEFTU0VSVCghbV9ncmlkSXNEaXJ0eSk7CisgICAgcmV0dXJuIG1fZ3JpZC5zaXplKCk7Cit9CisK
IExheW91dFVuaXQgUmVuZGVyR3JpZDo6Y29tcHV0ZVRyYWNrQmFzZWRMb2dpY2FsSGVpZ2h0KGNv
bnN0IEdyaWRTaXppbmdEYXRhJiBzaXppbmdEYXRhKSBjb25zdAogewogICAgIExheW91dFVuaXQg
bG9naWNhbEhlaWdodDsKQEAgLTQxOSw5ICs0NDQsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OmxheW91
dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKIAogTGF5b3V0VW5pdCBS
ZW5kZXJHcmlkOjpndXR0ZXJzU2l6ZShHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9u
LCB1bnNpZ25lZCBzcGFuKSBjb25zdAogewotICAgIEFTU0VSVChzcGFuID49IDEpOwotCi0gICAg
aWYgKHNwYW4gPT0gMSkKKyAgICBpZiAoc3BhbiA8PSAxKQogICAgICAgICByZXR1cm4geyB9Owog
CiAgICAgY29uc3QgTGVuZ3RoJiB0cmFja0dhcCA9IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8g
c3R5bGUoKS5ncmlkQ29sdW1uR2FwKCkgOiBzdHlsZSgpLmdyaWRSb3dHYXAoKTsKQEAgLTQzNSw3
ICs0NTgsNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6Om9mZnNldEJldHdlZW5UcmFja3MoR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikgYwogCiB2b2lkIFJlbmRlckdyaWQ6OmNv
bXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwg
TGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdAogewotICAgIGJvb2wgd2FzUG9wdWxh
dGVkID0gZ3JpZFdhc1BvcHVsYXRlZCgpOworICAgIGJvb2wgd2FzUG9wdWxhdGVkID0gIW1fZ3Jp
ZElzRGlydHk7CiAgICAgaWYgKCF3YXNQb3B1bGF0ZWQpCiAgICAgICAgIGNvbnN0X2Nhc3Q8UmVu
ZGVyR3JpZCo+KHRoaXMpLT5wbGFjZUl0ZW1zT25HcmlkKCk7CiAKQEAgLTU4OCwxNiArNjExLDE4
IEBAIHZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZVVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3RpCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJh
Y2tJbmRleCA6IGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleCkKICAgICAgICAgICAgIGZsZXhGcmFj
dGlvbiA9IHN0ZDo6bWF4KGZsZXhGcmFjdGlvbiwgbm9ybWFsaXplZEZsZXhGcmFjdGlvbih0cmFj
a3NbdHJhY2tJbmRleF0sIGdyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0cmFja0luZGV4KS5tYXhU
cmFja0JyZWFkdGgoKS5mbGV4KCkpKTsKIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZmxleGlibGVTaXplZFRyYWNrc0luZGV4LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBH
cmlkSXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBkaXJlY3Rpb24sIGZsZXhpYmxlU2l6ZWRUcmFj
a3NJbmRleFtpXSk7Ci0gICAgICAgICAgICB3aGlsZSAoUmVuZGVyQm94KiBncmlkSXRlbSA9IGl0
ZXJhdG9yLm5leHRHcmlkSXRlbSgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgR3JpZFNwYW4g
c3BhbiA9IGNhY2hlZEdyaWRTcGFuKCpncmlkSXRlbSwgZGlyZWN0aW9uKTsKKyAgICAgICAgaWYg
KCFtX2dyaWRJdGVtQXJlYS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmbGV4aWJsZVNpemVkVHJhY2tzSW5kZXguc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBkaXJlY3Rpb24sIGZsZXhp
YmxlU2l6ZWRUcmFja3NJbmRleFtpXSk7CisgICAgICAgICAgICAgICAgd2hpbGUgKFJlbmRlckJv
eCogZ3JpZEl0ZW0gPSBpdGVyYXRvci5uZXh0R3JpZEl0ZW0oKSkgeworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBHcmlkU3BhbiBzcGFuID0gY2FjaGVkR3JpZFNwYW4oKmdyaWRJdGVtLCBkaXJl
Y3Rpb24pOwogCi0gICAgICAgICAgICAgICAgLy8gRG8gbm90IGluY2x1ZGUgYWxyZWFkeSBwcm9j
ZXNzZWQgaXRlbXMuCi0gICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIHNwYW4uc3RhcnRMaW5l
KCkgPD0gZmxleGlibGVTaXplZFRyYWNrc0luZGV4W2kgLSAxXSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCBpbmNsdWRlIGFscmVh
ZHkgcHJvY2Vzc2VkIGl0ZW1zLgorICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgc3Bh
bi5zdGFydExpbmUoKSA8PSBmbGV4aWJsZVNpemVkVHJhY2tzSW5kZXhbaSAtIDFdKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBmbGV4RnJhY3Rp
b24gPSBzdGQ6Om1heChmbGV4RnJhY3Rpb24sIGZpbmRGbGV4RmFjdG9yVW5pdFNpemUodHJhY2tz
LCBzcGFuLCBkaXJlY3Rpb24sIG1heENvbnRlbnRGb3JDaGlsZCgqZ3JpZEl0ZW0sIGRpcmVjdGlv
biwgc2l6aW5nRGF0YSkpKTsKKyAgICAgICAgICAgICAgICAgICAgZmxleEZyYWN0aW9uID0gc3Rk
OjptYXgoZmxleEZyYWN0aW9uLCBmaW5kRmxleEZhY3RvclVuaXRTaXplKHRyYWNrcywgc3Bhbiwg
ZGlyZWN0aW9uLCBtYXhDb250ZW50Rm9yQ2hpbGQoKmdyaWRJdGVtLCBkaXJlY3Rpb24sIHNpemlu
Z0RhdGEpKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtODk3LDIxICs5MjIsMjMgQEAgdm9pZCBSZW5kZXJHcmlkOjpyZXNvbHZlQ29udGVu
dEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnMoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW8KIHsKICAg
ICBzaXppbmdEYXRhLml0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3Bhbi5zaHJpbmsoMCk7CiAgICAg
SGFzaFNldDxSZW5kZXJCb3gqPiBpdGVtc1NldDsKLSAgICBmb3IgKGF1dG8gdHJhY2tJbmRleCA6
IHNpemluZ0RhdGEuY29udGVudFNpemVkVHJhY2tzSW5kZXgpIHsKLSAgICAgICAgR3JpZEl0ZXJh
dG9yIGl0ZXJhdG9yKG1fZ3JpZCwgZGlyZWN0aW9uLCB0cmFja0luZGV4KTsKLSAgICAgICAgR3Jp
ZFRyYWNrJiB0cmFjayA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBzaXppbmdEYXRhLmNv
bHVtblRyYWNrc1t0cmFja0luZGV4XSA6IHNpemluZ0RhdGEucm93VHJhY2tzW3RyYWNrSW5kZXhd
OworICAgIGlmICghbV9ncmlkSXRlbUFyZWEuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoYXV0
byB0cmFja0luZGV4IDogc2l6aW5nRGF0YS5jb250ZW50U2l6ZWRUcmFja3NJbmRleCkgeworICAg
ICAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKG1fZ3JpZCwgZGlyZWN0aW9uLCB0cmFja0lu
ZGV4KTsKKyAgICAgICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSAoZGlyZWN0aW9uID09IEZvckNv
bHVtbnMpID8gc2l6aW5nRGF0YS5jb2x1bW5UcmFja3NbdHJhY2tJbmRleF0gOiBzaXppbmdEYXRh
LnJvd1RyYWNrc1t0cmFja0luZGV4XTsKIAotICAgICAgICB3aGlsZSAoUmVuZGVyQm94KiBncmlk
SXRlbSA9IGl0ZXJhdG9yLm5leHRHcmlkSXRlbSgpKSB7Ci0gICAgICAgICAgICBpZiAoaXRlbXNT
ZXQuYWRkKGdyaWRJdGVtKS5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgR3Jp
ZFNwYW4mIHNwYW4gPSBjYWNoZWRHcmlkU3BhbigqZ3JpZEl0ZW0sIGRpcmVjdGlvbik7Ci0gICAg
ICAgICAgICAgICAgaWYgKHNwYW4uaW50ZWdlclNwYW4oKSA9PSAxKQotICAgICAgICAgICAgICAg
ICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JOb25TcGFubmlu
Z0l0ZW1zKGRpcmVjdGlvbiwgc3BhbiwgKmdyaWRJdGVtLCB0cmFjaywgc2l6aW5nRGF0YSk7Ci0g
ICAgICAgICAgICAgICAgZWxzZSBpZiAoIXNwYW5uaW5nSXRlbUNyb3NzZXNGbGV4aWJsZVNpemVk
VHJhY2tzKHNwYW4sIGRpcmVjdGlvbikpCi0gICAgICAgICAgICAgICAgICAgIHNpemluZ0RhdGEu
aXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmFwcGVuZChHcmlkSXRlbVdpdGhTcGFuKCpncmlk
SXRlbSwgc3BhbikpOworICAgICAgICAgICAgd2hpbGUgKFJlbmRlckJveCogZ3JpZEl0ZW0gPSBp
dGVyYXRvci5uZXh0R3JpZEl0ZW0oKSkgeworICAgICAgICAgICAgICAgIGlmIChpdGVtc1NldC5h
ZGQoZ3JpZEl0ZW0pLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgR3Jp
ZFNwYW4mIHNwYW4gPSBjYWNoZWRHcmlkU3BhbigqZ3JpZEl0ZW0sIGRpcmVjdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChzcGFuLmludGVnZXJTcGFuKCkgPT0gMSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvck5v
blNwYW5uaW5nSXRlbXMoZGlyZWN0aW9uLCBzcGFuLCAqZ3JpZEl0ZW0sIHRyYWNrLCBzaXppbmdE
YXRhKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXNwYW5uaW5nSXRlbUNyb3NzZXNG
bGV4aWJsZVNpemVkVHJhY2tzKHNwYW4sIGRpcmVjdGlvbikpCisgICAgICAgICAgICAgICAgICAg
ICAgICBzaXppbmdEYXRhLml0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3Bhbi5hcHBlbmQoR3JpZEl0
ZW1XaXRoU3BhbigqZ3JpZEl0ZW0sIHNwYW4pKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgc3RkOjpzb3J0KHNpemluZ0RhdGEuaXRlbXNTb3J0
ZWRCeUluY3JlYXNpbmdTcGFuLmJlZ2luKCksIHNpemluZ0RhdGEuaXRlbXNTb3J0ZWRCeUluY3Jl
YXNpbmdTcGFuLmVuZCgpKTsKICAgICB9Ci0gICAgc3RkOjpzb3J0KHNpemluZ0RhdGEuaXRlbXNT
b3J0ZWRCeUluY3JlYXNpbmdTcGFuLmJlZ2luKCksIHNpemluZ0RhdGEuaXRlbXNTb3J0ZWRCeUlu
Y3JlYXNpbmdTcGFuLmVuZCgpKTsKIAogICAgIGF1dG8gaXQgPSBzaXppbmdEYXRhLml0ZW1zU29y
dGVkQnlJbmNyZWFzaW5nU3Bhbi5iZWdpbigpOwogICAgIGF1dG8gZW5kID0gc2l6aW5nRGF0YS5p
dGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4uZW5kKCk7CkBAIC0xMjk0LDEzICsxMzIxLDE0IEBA
IHVuc2lnbmVkIFJlbmRlckdyaWQ6OmNvbXB1dGVBdXRvUmVwZWF0VHJhY2tzQ291bnQoR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjCiAKIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09u
R3JpZCgpCiB7Ci0gICAgQVNTRVJUKCFncmlkV2FzUG9wdWxhdGVkKCkpOworICAgIEFTU0VSVCht
X2dyaWRJc0RpcnR5KTsKICAgICBBU1NFUlQobV9ncmlkSXRlbUFyZWEuaXNFbXB0eSgpKTsKIAog
ICAgIG1fYXV0b1JlcGVhdENvbHVtbnMgPSBjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEZv
ckNvbHVtbnMpOwogICAgIG1fYXV0b1JlcGVhdFJvd3MgPSBjb21wdXRlQXV0b1JlcGVhdFRyYWNr
c0NvdW50KEZvclJvd3MpOwogCiAgICAgcG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJh
dG9yKCk7CisgICAgbV9ncmlkSXNEaXJ0eSA9IGZhbHNlOwogCiAgICAgVmVjdG9yPFJlbmRlckJv
eCo+IGF1dG9NYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwogICAgIFZlY3RvcjxSZW5kZXJCb3gqPiBz
cGVjaWZpZWRNYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwpAQCAtMTM0OCw4ICsxMzc2LDggQEAgdm9p
ZCBSZW5kZXJHcmlkOjpwb3B1bGF0ZUV4cGxpY2l0R3JpZEFuZE9yZGVySXRlcmF0b3IoKQogewog
ICAgIE9yZGVySXRlcmF0b3JQb3B1bGF0b3IgcG9wdWxhdG9yKG1fb3JkZXJJdGVyYXRvcik7CiAg
ICAgbV9zbWFsbGVzdFJvd1N0YXJ0ID0gbV9zbWFsbGVzdENvbHVtblN0YXJ0ID0gMDsKLSAgICB1
bnNpZ25lZCBtYXhpbXVtUm93SW5kZXggPSBzdGQ6Om1heDx1bnNpZ25lZD4oMSwgR3JpZFBvc2l0
aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRSb3dDb3VudChzdHlsZSgpLCBtX2F1dG9SZXBlYXRS
b3dzKSk7Ci0gICAgdW5zaWduZWQgbWF4aW11bUNvbHVtbkluZGV4ID0gc3RkOjptYXg8dW5zaWdu
ZWQ+KDEsIEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoc3R5
bGUoKSwgbV9hdXRvUmVwZWF0Q29sdW1ucykpOworICAgIHVuc2lnbmVkIG1heGltdW1Sb3dJbmRl
eCA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkUm93Q291bnQoc3R5bGUoKSwg
bV9hdXRvUmVwZWF0Um93cyk7CisgICAgdW5zaWduZWQgbWF4aW11bUNvbHVtbkluZGV4ID0gR3Jp
ZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRDb2x1bW5Db3VudChzdHlsZSgpLCBtX2F1
dG9SZXBlYXRDb2x1bW5zKTsKIAogICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hp
bGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAg
ICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKQEAgLTE1MDksNiArMTUzNyw3
IEBAIHZvaWQgUmVuZGVyR3JpZDo6Y2xlYXJHcmlkKCkKIHsKICAgICBtX2dyaWQuY2xlYXIoKTsK
ICAgICBtX2dyaWRJdGVtQXJlYS5jbGVhcigpOworICAgIG1fZ3JpZElzRGlydHkgPSB0cnVlOwog
fQogCiBzdGF0aWMgY29uc3QgU3R5bGVDb250ZW50QWxpZ25tZW50RGF0YSYgbm9ybWFsVmFsdWVC
ZWhhdmlvckdyaWQoKQpAQCAtMTc2NiwxNiArMTc5NSwxOSBAQCB2b2lkIFJlbmRlckdyaWQ6OnBv
cHVsYXRlR3JpZFBvc2l0aW9uc0ZvckRpcmVjdGlvbihHcmlkU2l6aW5nRGF0YSYgc2l6aW5nRGF0
YSwgRwogICAgIHVuc2lnbmVkIG51bWJlck9mVHJhY2tzID0gdHJhY2tzLnNpemUoKTsKICAgICB1
bnNpZ25lZCBudW1iZXJPZkxpbmVzID0gbnVtYmVyT2ZUcmFja3MgKyAxOwogICAgIHVuc2lnbmVk
IGxhc3RMaW5lID0gbnVtYmVyT2ZMaW5lcyAtIDE7Ci0gICAgdW5zaWduZWQgbmV4dFRvTGFzdExp
bmUgPSBudW1iZXJPZkxpbmVzIC0gMjsKKwogICAgIENvbnRlbnRBbGlnbm1lbnREYXRhIG9mZnNl
dCA9IGNvbXB1dGVDb250ZW50UG9zaXRpb25BbmREaXN0cmlidXRpb25PZmZzZXQoZGlyZWN0aW9u
LCBzaXppbmdEYXRhLmZyZWVTcGFjZUZvckRpcmVjdGlvbihkaXJlY3Rpb24pLnZhbHVlKCksIG51
bWJlck9mVHJhY2tzKTsKICAgICBMYXlvdXRVbml0IHRyYWNrR2FwID0gZ3V0dGVyc1NpemUoZGly
ZWN0aW9uLCAyKTsKICAgICBhdXRvJiBwb3NpdGlvbnMgPSBpc1Jvd0F4aXMgPyBtX2NvbHVtblBv
c2l0aW9ucyA6IG1fcm93UG9zaXRpb25zOwogICAgIHBvc2l0aW9ucy5yZXNpemUobnVtYmVyT2ZM
aW5lcyk7CiAgICAgYXV0byBib3JkZXJBbmRQYWRkaW5nID0gaXNSb3dBeGlzID8gYm9yZGVyQW5k
UGFkZGluZ0xvZ2ljYWxMZWZ0KCkgOiBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAgICAgcG9z
aXRpb25zWzBdID0gYm9yZGVyQW5kUGFkZGluZyArIG9mZnNldC5wb3NpdGlvbk9mZnNldDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmV4dFRvTGFzdExpbmU7ICsraSkKLSAgICAgICAg
cG9zaXRpb25zW2kgKyAxXSA9IHBvc2l0aW9uc1tpXSArIG9mZnNldC5kaXN0cmlidXRpb25PZmZz
ZXQgKyB0cmFja3NbaV0uYmFzZVNpemUoKSArIHRyYWNrR2FwOwotICAgIHBvc2l0aW9uc1tsYXN0
TGluZV0gPSBwb3NpdGlvbnNbbmV4dFRvTGFzdExpbmVdICsgdHJhY2tzW25leHRUb0xhc3RMaW5l
XS5iYXNlU2l6ZSgpOworICAgIGlmIChudW1iZXJPZkxpbmVzID4gMSkgeworICAgICAgICB1bnNp
Z25lZCBuZXh0VG9MYXN0TGluZSA9IG51bWJlck9mTGluZXMgLSAyOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbmV4dFRvTGFzdExpbmU7ICsraSkKKyAgICAgICAgICAgIHBvc2l0
aW9uc1tpICsgMV0gPSBwb3NpdGlvbnNbaV0gKyBvZmZzZXQuZGlzdHJpYnV0aW9uT2Zmc2V0ICsg
dHJhY2tzW2ldLmJhc2VTaXplKCkgKyB0cmFja0dhcDsKKyAgICAgICAgcG9zaXRpb25zW2xhc3RM
aW5lXSA9IHBvc2l0aW9uc1tuZXh0VG9MYXN0TGluZV0gKyB0cmFja3NbbmV4dFRvTGFzdExpbmVd
LmJhc2VTaXplKCk7CisgICAgfQogICAgIGF1dG8mIG9mZnNldEJldHdlZW5UcmFja3MgPSBpc1Jv
d0F4aXMgPyBtX29mZnNldEJldHdlZW5Db2x1bW5zIDogbV9vZmZzZXRCZXR3ZWVuUm93czsKICAg
ICBvZmZzZXRCZXR3ZWVuVHJhY2tzID0gb2Zmc2V0LmRpc3RyaWJ1dGlvbk9mZnNldDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmluZGV4IDQ3YTAwYTdkNjg3ZDRiNjI2Y2Iz
MjA5OWUxY2U3NGExOGUzNTQ3YWYuLmNlMDFhNmRjZDU4ZTEzMDQ3ZmU3NzZhMzdhZTg0MThjZGI3
OTdiNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaApAQCAtMTczLDIwICsx
NzMsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIHRyYWNrc0FyZVdpZGVyVGhhbk1pblRyYWNrQnJl
YWR0aChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIEdyaWRTaXppbmdEYXRhJik7CiAjZW5kaWYK
IAotICAgIGJvb2wgZ3JpZFdhc1BvcHVsYXRlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2dyaWQuaXNF
bXB0eSgpICYmICFtX2dyaWRbMF0uaXNFbXB0eSgpOyB9Ci0KICAgICBib29sIHNwYW5uaW5nSXRl
bUNyb3NzZXNGbGV4aWJsZVNpemVkVHJhY2tzKGNvbnN0IEdyaWRTcGFuJiwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uKSBjb25zdDsKIAotICAgIHVuc2lnbmVkIGdyaWRDb2x1bW5Db3VudCgpIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoZ3JpZFdhc1BvcHVsYXRlZCgpKTsKLSAgICAgICAg
cmV0dXJuIG1fZ3JpZFswXS5zaXplKCk7Ci0gICAgfQotICAgIHVuc2lnbmVkIGdyaWRSb3dDb3Vu
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoZ3JpZFdhc1BvcHVsYXRlZCgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fZ3JpZC5zaXplKCk7Ci0gICAgfQorICAgIHVuc2lnbmVkIGdyaWRDb2x1
bW5Db3VudCgpIGNvbnN0OworICAgIHVuc2lnbmVkIGdyaWRSb3dDb3VudCgpIGNvbnN0OwogCiAg
ICAgYm9vbCBoYXNEZWZpbml0ZUxvZ2ljYWxTaXplKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbikg
Y29uc3Q7CiAgICAgTGF5b3V0VW5pdCB0cmFuc2xhdGVSVExDb29yZGluYXRlKExheW91dFVuaXQp
IGNvbnN0OwpAQCAtMjA3LDYgKzE5Nyw4IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX2F1
dG9SZXBlYXRDb2x1bW5zIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fYXV0b1JlcGVhdFJvd3MgeyAw
IH07CisKKyAgICBib29sIG1fZ3JpZElzRGlydHkgeyB0cnVlIH07CiB9OwogCiBzaXplX3QgaW5s
aW5lIFJlbmRlckdyaWQ6OmF1dG9SZXBlYXRDb3VudEZvckRpcmVjdGlvbihHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDc1YWRkNWFlZmY2ZjU0ZThhYTU5
NWU5YzZjMjMwZmM1YWYzZmU2OWUuLjBhOTdjMTUzYmZmOThmMDdiNzUzM2FlYWNhZmQxMTIyODI5
Y2RkOWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0wNS0yNSAgU2VyZ2lvIFZpbGxhciBT
ZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbY3NzLWdyaWRdIEVtcHR5IGdy
aWQgd2l0aG91dCBleHBsaWNpdCB0cmFja3Mgc2hvdWxkbid0IGhhdmUgYW55IHNpemUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTE5NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2Ugc3VyZSB0aGF0
IGVtcHR5IGdyaWRzIChhbmQgZ3JpZHMgd2l0aCBvbmUgZW1wdHkgYXhpcykgYXJlIHByb3Blcmx5
IGhhbmRsZWQuIERvIGFsc28KKyAgICAgICAgdmVyaWZ5IHRoYXQgcmVtb3ZpbmcgYWxsIHRoZSBp
dGVtcyBmcm9tIGEgZ3JpZCBhbHNvIGdlbmVyYXRlcyBhbiBjb3JyZWN0IGVtcHR5IGdyaWQuCisK
KyAgICAgICAgKiBmYXN0L2Nzcy1ncmlkLWxheW91dC9lbXB0eS1ncmlkLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9jc3MtZ3JpZC1sYXlvdXQvZW1wdHktZ3JpZC5odG1sOiBB
ZGRlZC4KKwogMjAxNi0wNS0yNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVwZGF0ZSBkb20vV2luZG93L21lc3NhZ2VldmVudC1zb3VyY2UtcG9zdG1lc3NhZ2Ut
cmVpZmllZC5odG1sIGFmdGVyIHIyMDEzMTUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzLWdyaWQtbGF5b3V0L2VtcHR5LWdyaWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9jc3MtZ3JpZC1sYXlvdXQvZW1wdHktZ3JpZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODBl
ZGI2ZTc1MDFmNzc0ODhiZDhjYjViNTcwNmMzNGIyMTBmNDhkOAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2VtcHR5LWdyaWQtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTIgQEAKK1RoaXMgdGVzdCBjaGVja3MgdGhhdCBncmlkcyB3aXRoIG5vIGlu
LWZsb3cgaXRlbXMgYXJlIGFjdHVhbGx5IGVtcHR5LgorCitQQVNTCitYWFhYCitQQVNTCitQQVNT
CitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy1ncmlkLWxheW91dC9lbXB0eS1ncmlkLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy1ncmlkLWxheW91dC9lbXB0eS1ncmlkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRmNzUwOTYx
OTI2YmFiMTQwMGJkOTU3MDkzNTEzOGM3NDdmMjZhNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvY3NzLWdyaWQtbGF5b3V0L2VtcHR5LWdyaWQuaHRtbApAQCAtMCwwICsxLDYx
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxsaW5rIGhyZWY9InJlc291cmNlcy9ncmlkLmNzcyIgcmVs
PSJzdHlsZXNoZWV0Ij4KKzxsaW5rIGhyZWY9Ii4uL2Nzcy1pbnRyaW5zaWMtZGltZW5zaW9ucy9y
ZXNvdXJjZXMvd2lkdGgta2V5d29yZC1jbGFzc2VzLmNzcyIgcmVsPXN0eWxlc2hlZXQ+Cis8c3R5
bGU+CisuZ3JpZFdpdGhBYnNvbHV0ZVBvc2l0aW9uZWRJdGVtIHsKKyAgICAvKiBFbnN1cmVzIHRo
YXQgdGhlIGdyaWQgY29udGFpbmVyIGlzIHRoZSBjb250YWluaW5nIGJsb2NrIG9mIHRoZSBhYnNv
bHV0ZWx5IHBvc2l0aW9uZWQgZ3JpZCBjaGlsZHJlbi4gKi8KKyAgICBwb3NpdGlvbjogcmVsYXRp
dmU7Cit9CisKKy5ncmlkIHsKKyAgICBncmlkLWF1dG8tY29sdW1uczogMjAwcHg7CisgICAgZ3Jp
ZC1hdXRvLXJvd3M6IDIwMHB4OworfQorCisuaXRlbSB7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIGZvbnQ6IDEwcHgvMSBBaGVtOworfQorCis8L3N0eWxlPgorCis8c2NyaXB0PgorZnVu
Y3Rpb24gYWRkUmVtb3ZlSXRlbSgpCit7CisgICAgdmFyIGdyaWRJdGVtID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisgICAgZ3JpZEl0ZW0uc3R5bGUud2lkdGggPSAiMTAwcHgiOwor
ICAgIGdyaWRJdGVtLnN0eWxlLmhlaWdodCA9ICIxMDBweCI7CisgICAgZ3JpZEl0ZW0uc3R5bGUu
YmFja2dyb3VuZENvbG9yID0gInJlZCI7CisgICAgdmFyIGdyaWRFbGVtZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImR5bmFtaWNHcmlkIik7CisgICAgZ3JpZEVsZW1lbnQuYXBwZW5kQ2hp
bGQoZ3JpZEl0ZW0pOworICAgIGdyaWRFbGVtZW50LnJlbW92ZUNoaWxkKGdyaWRJdGVtKTsKK30K
KworZnVuY3Rpb24gZG9UZXN0KCkgeworICAgICBhZGRSZW1vdmVJdGVtKCk7CisgICAgIGNoZWNr
TGF5b3V0KCIuZ3JpZCIpOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2NoZWNrLWxheW91dC5qcyI+PC9zY3JpcHQ+CisKKzxib2R5IG9ubG9hZD0iZG9UZXN0KCki
PgorCis8cD5UaGlzIHRlc3QgY2hlY2tzIHRoYXQgZ3JpZHMgd2l0aCBubyBpbi1mbG93IGl0ZW1z
IGFyZSBhY3R1YWxseSBlbXB0eS48L3A+CisKKzxkaXYgY2xhc3M9ImdyaWQgbWluLWNvbnRlbnQi
IGRhdGEtZXhwZWN0ZWQtd2lkdGg9IjAiIGRhdGEtZXhwZWN0ZWQtaGVpZ2h0PSIwIj48L2Rpdj4K
KworPGRpdiBjbGFzcz0iZ3JpZCBtaW4tY29udGVudCBncmlkV2l0aEFic29sdXRlUG9zaXRpb25l
ZEl0ZW0iIGRhdGEtZXhwZWN0ZWQtd2lkdGg9IjAiIGRhdGEtZXhwZWN0ZWQtaGVpZ2h0PSIwIj4K
KyAgICA8ZGl2IGNsYXNzPSJpdGVtIiBkYXRhLWV4cGVjdGVkLXdpZHRoPSI0MCIgZGF0YS1leHBl
Y3RlZC1oZWlnaHQ9IjEwIj5YWFhYPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBpZD0iZHluYW1pY0dy
aWQiIGNsYXNzPSJncmlkIG1pbi1jb250ZW50IiBkYXRhLWV4cGVjdGVkLXdpZHRoPSIwIiBkYXRh
LWV4cGVjdGVkLWhlaWdodD0iMCI+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImdyaWQgbWluLWNvbnRl
bnQiIHN0eWxlPSJncmlkLXRlbXBsYXRlLXJvd3M6IDEwMHB4OyIgZGF0YS1leHBlY3RlZC13aWR0
aD0iMCIgZGF0YS1leHBlY3RlZC1oZWlnaHQ9IjEwMCI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJncmlk
IG1pbi1jb250ZW50IiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvOyIgZGF0YS1leHBl
Y3RlZC13aWR0aD0iMCIgZGF0YS1leHBlY3RlZC1oZWlnaHQ9IjAiPjwvZGl2PgorPGRpdiBjbGFz
cz0iZ3JpZCBtaW4tY29udGVudCIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtcm93czogMWZyOyIgZGF0
YS1leHBlY3RlZC13aWR0aD0iMCIgZGF0YS1leHBlY3RlZC1oZWlnaHQ9IjAiPjwvZGl2PgorCis8
ZGl2IGNsYXNzPSJncmlkIG1pbi1jb250ZW50IiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5z
OiAxMDBweDsiIGRhdGEtZXhwZWN0ZWQtd2lkdGg9IjEwMCIgZGF0YS1leHBlY3RlZC1oZWlnaHQ9
IjAiPjwvZGl2PgorPGRpdiBjbGFzcz0iZ3JpZCBtaW4tY29udGVudCIgc3R5bGU9ImdyaWQtdGVt
cGxhdGUtY29sdW1uczogYXV0bzsiIGRhdGEtZXhwZWN0ZWQtd2lkdGg9IjAiIGRhdGEtZXhwZWN0
ZWQtaGVpZ2h0PSIwIj48L2Rpdj4KKzxkaXYgY2xhc3M9ImdyaWQgbWluLWNvbnRlbnQiIHN0eWxl
PSJncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsiIGRhdGEtZXhwZWN0ZWQtd2lkdGg9IjAiIGRh
dGEtZXhwZWN0ZWQtaGVpZ2h0PSIwIj48L2Rpdj4KKworPC9ib2R5Pgo=
</data>
<flag name="review"
          id="304073"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>