<?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>102809</bug_id>
          
          <creation_ts>2012-11-20 06:32:19 -0800</creation_ts>
          <short_desc>[CSS Regions] avoid value is not obeyed in region-break-before and region-break-after CSS properties</short_desc>
          <delta_ts>2022-07-12 17:16:05 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>AdobeTracked</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>113050</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihai Balan">mibalan</reporter>
          <assigned_to name="Mihai Maerean">mmaerean</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>hyatt</cc>
    
    <cc>mihnea</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>771811</commentid>
    <comment_count>0</comment_count>
      <attachid>175202</attachid>
    <who name="Mihai Balan">mibalan</who>
    <bug_when>2012-11-20 06:32:19 -0800</bug_when>
    <thetext>Created attachment 175202
HTML file highlighting the problem

When specifying &apos;avoid&apos; for -webkit-region-break-before or -webkit-region-break-after the breaking does not seem to take it into account.
However, &apos;avoid&apos; seems implemented for -webkit-region-break-inside.

In attached file, top and bottom row don&apos;t obey the region break avoid property, but the middle one (for break inside) works as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851210</commentid>
    <comment_count>1</comment_count>
      <attachid>192229</attachid>
    <who name="Mihai Maerean">mmaerean</who>
    <bug_when>2013-03-08 08:04:41 -0800</bug_when>
    <thetext>Created attachment 192229
patch. wip.

How stuff works:

1. when we encounter the 1st block in the series of blocks with break-after:avoid, we store it.
2. when we encounter another block (in the normal flow) that is a sibling of the said block, if there&apos;s a break between the two blocks we move the break:avoid block to the next page by faking break-before:always on it.
3. we reset the layout loop of the parent&apos;s list of children to the break:avoid block.

Things still to be done:

1. test for chains of break:avoid blocks.
2. test for possible infinite loops when the chain of break:avoid blocks doesn&apos;t fit in the page they&apos;re moved to.

Please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851237</commentid>
    <comment_count>2</comment_count>
      <attachid>192229</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2013-03-08 09:05:18 -0800</bug_when>
    <thetext>Comment on attachment 192229
patch. wip.

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

&gt; LayoutTests/fast/regions/break-before-avoid.html:42
&gt; +&lt;/html&gt;

In general, when i create tests for which text is important, i find that specifying the font family, font size and line height make the tests more robust for all the platforms.
Like: body { font: 16px/1.25 monospace; }
I also put the paragraph describing the bug under the body, not at the end of test.

I would also like to see tests that include margins.

&gt; Source/WebCore/rendering/RenderBlock.cpp:7410
&gt; +bool RenderBlock::hasBreakAfterAvoid() const

This function has a similar patter for PBALWAYS in applyBeforeBreak etc. Can we change it to receive the type of break as a parameter?

&gt; Source/WebCore/rendering/RenderBlock.h:1082
&gt; +    void setrendererWithBreakAfterAvoid(RenderBox* r)

Change to setRenderer..., capital R instead of r.

&gt; Source/WebCore/rendering/RenderBlock.h:1089
&gt; +    RenderBox* rendererWhereToResetLayout() const { return m_rareData ? m_rareData-&gt;m_rendererWhereToResetLayout : 0; }

I would try to find a different name instead of reset layout.

&gt; Source/WebCore/rendering/RenderBox.h:173
&gt; +    // All checks are done.

What do you mean by that?

&gt; Source/WebCore/rendering/RenderFlowThread.cpp:788
&gt; +    return ++m_regionList.find(firstEnd) == m_regionList.find(secondStart);

Why do you need the second find here? You can probably do:
*(++m_regionList.find(firstEnd)) == secondStart.

&gt; Source/WebCore/rendering/RenderFlowThread.h:140
&gt; +    bool isABreakBetweenBoxes(const RenderBox*, const RenderBox*) const;

I would name this function differently, inSuccessiveRegions or smth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851245</commentid>
    <comment_count>3</comment_count>
      <attachid>192229</attachid>
    <who name="Mihai Maerean">mmaerean</who>
    <bug_when>2013-03-08 09:20:05 -0800</bug_when>
    <thetext>Comment on attachment 192229
patch. wip.

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

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:7410
&gt;&gt; +bool RenderBlock::hasBreakAfterAvoid() const
&gt; 
&gt; This function has a similar patter for PBALWAYS in applyBeforeBreak etc. Can we change it to receive the type of break as a parameter?

I will think out it.

&gt;&gt; Source/WebCore/rendering/RenderBlock.h:1082
&gt;&gt; +    void setrendererWithBreakAfterAvoid(RenderBox* r)
&gt; 
&gt; Change to setRenderer..., capital R instead of r.

true.

&gt;&gt; Source/WebCore/rendering/RenderBlock.h:1089
&gt;&gt; +    RenderBox* rendererWhereToResetLayout() const { return m_rareData ? m_rareData-&gt;m_rendererWhereToResetLayout : 0; }
&gt; 
&gt; I would try to find a different name instead of reset layout.

I&apos;m open to suggestions.

&gt;&gt; Source/WebCore/rendering/RenderBox.h:173
&gt;&gt; +    // All checks are done.
&gt; 
&gt; What do you mean by that?

The above functions have this comment attached:
// Use this with caution! No type checking is done!

&gt;&gt; Source/WebCore/rendering/RenderFlowThread.cpp:788
&gt;&gt; +    return ++m_regionList.find(firstEnd) == m_regionList.find(secondStart);
&gt; 
&gt; Why do you need the second find here? You can probably do:
&gt; *(++m_regionList.find(firstEnd)) == secondStart.

me like it :)

&gt;&gt; Source/WebCore/rendering/RenderFlowThread.h:140
&gt;&gt; +    bool isABreakBetweenBoxes(const RenderBox*, const RenderBox*) const;
&gt; 
&gt; I would name this function differently, inSuccessiveRegions or smth.

The current name is exactly what I need to determine (if there is a break that conflicts with break:avoid) which makes the code easier to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851266</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-03-08 09:50:44 -0800</bug_when>
    <thetext>You can&apos;t just rewind block layout like that. That approach does not work. The problem of avoidance is also a lot more complicated than this, since you may be a nested block that happens to be the last child, and so a a break can occur after you even when you have no following siblings.

In general, I think knowledge that you are at a breakpoint that needs to be avoided is probably going to need to be in the layout state rather than trying to hack it into the rare data.

I&apos;m also not convinced that rewinding layout is actually necessary to make this work, but I could be wrong about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851281</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-03-08 10:05:54 -0800</bug_when>
    <thetext>Actually I take it back. You probably will need bits in the rare data. This problem is pretty similar to margin propagation and pagination strut propagation. You&apos;ll probably just need to cache and propagate bits indicating the avoidance state before and after the block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854345</commentid>
    <comment_count>6</comment_count>
    <who name="Mihai Maerean">mmaerean</who>
    <bug_when>2013-03-13 09:15:05 -0700</bug_when>
    <thetext>Having in mind that break-[after|before]:avoid properties are propagated to the parents when necessary as David Hyatt said in the previous comment,
this is the proposed algorithm that results in the avoid condition being fulfilled when a break is encountered between 2 consecutive blocks in the normal flow where a break should be avoided:

Starting with the block that needs to avoid a break at the after side where a break did occur,
1. If it&apos;s unsplittable (has break-inside:avoid etc)
     1.1 then if there is a break-avoid rule at the before side
         1.1.1 then we move the cursor of the algorithm to its previous sibling block in normal flow
         1.1.2 else we set a fake break-before:always on it and stop the search.
     1.2 else (meaning it can be split)
         1.2.1 If it doesn&apos;t have any children
                 1.2.1.1 then we set a fake break-before:always on it and stop the search.
         1.2.2 If it only has inline content
                 1.2.2.1 then we break this block based on the widows and orphans algorithm and stop
                         the search.
         1.2.3 starting from the last child block in normal flow, we recursively look for another
               block that meets the same conditions.
2. If we have found a break location
     2.1 then we mark all the objects that have been touched as NeedsLayout as all of them will be
         affected by the break that was just inserted.
         Relayout the parent that is closest to all the touched nodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854435</commentid>
    <comment_count>7</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-03-13 11:43:20 -0700</bug_when>
    <thetext>Note that the pagination strut is the mechanism we are using right now to effectively propagate page-break-before:always out to parents, since we also do this for unforced breaks.

When considering a breakpoint that is between two block-level boxes, you have to look at the margins of all boxes that collapsed at that point. If any one of them is set to &quot;always&quot; on the correct side (either before/after depending on the box) then &quot;always&quot; wins. If any one of them is set to &quot;avoid&quot;, then &quot;avoid&quot; wins, and you can&apos;t break here. If nothing is set explicitly on any before/after, then the inherited value of &quot;inside&quot; from an ancestor container wins.

So with those rules in mind, we need to:
(a) Be able to easily know what the breaking state is where the margins meet. This is very similar to propagation of margins themselves (and a little similar to pagination struts).

(b) Breaks should only apply between siblings, so for the first and last children, we should just propagate the values out to the parent block. This involves changing how the &quot;always&quot; value works.

(c) We need to easily know what the avoidance state is from an ancestor (whether or not we&apos;re inside an ancestor that set page-break-inside:avoid).

(d) Track the last viable breakpoint that is still on the same page. Essentially while laying out the block-level children, you want to know where the last viable encountered breakpoint is. This may be inside a descendant.

(e) When you determine that a break has to be avoided but that you also don&apos;t fit on the page, you need to then see if you have a viable breakpoint that also exists on the page. If it does, then you have to lay the block out again with a note to apply a break at the viable breakpoint. Again, this could be inside a descendant and is not necessarily in between your own immediate childen.

So at a high level, the idea of &quot;rewinding&quot; and then applying a &quot;forced break&quot; is a good one. However rewinding needs to just lay out the whole block again. You can&apos;t just rewind. Also, you can&apos;t just go back to a child&apos;s previous sibling because the place to apply the break may be inside a descendant box.

You also need to know if that breakpoint is on the same page. If it&apos;s on a previous page, then no viable breakpoint exists on the current page, and in that case you have to just overflow the current page (either that or we do a bad slice).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1882800</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2022-07-12 17:16:05 -0700</bug_when>
    <thetext>CSS Regions were removed in Bug 174978.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>175202</attachid>
            <date>2012-11-20 06:32:19 -0800</date>
            <delta_ts>2012-11-20 06:32:19 -0800</delta_ts>
            <desc>HTML file highlighting the problem</desc>
            <filename>bug-break-avoid.html</filename>
            <type>text/html</type>
            <size>3850</size>
            <attacher name="Mihai Balan">mibalan</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUw+CjxodG1sPgo8aGVhZD4KICAgIDx0aXRsZT5DU1MgUmVnaW9ucyBCdWcg
LSBicmVhay1hZnRlcjogYXZvaWQ8L3RpdGxlPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgog
ICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgIGJvZHkgewogICAgICAgIGZvbnQtc2l6ZTog
MTZweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgfQogICAgcCB7CiAgICAg
ICAgbWFyZ2luOiAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxZW07CiAgICB9CiAgICAuYXZvaWQt
YWZ0ZXIgewogICAgICAgIC13ZWJraXQtcmVnaW9uLWJyZWFrLWFmdGVyOiBhdm9pZDsKICAgICAg
ICAtd2Via2l0LWJyZWFrLWFmdGVyOiBhdm9pZC1yZWdpb247CiAgICAgICAgYnJlYWstYWZ0ZXI6
IGF2b2lkLXJlZ2lvbjsKICAgICAgICBjb2xvcjogZG9kZ2VyYmx1ZTsKICAgIH0KICAgIC5hdm9p
ZC1pbnNpZGUgewogICAgICAgIC13ZWJraXQtcmVnaW9uLWJyZWFrLWluc2lkZTogYXZvaWQ7CiAg
ICAgICAgLXdlYmtpdC1icmVhay1pbnNpZGU6IGF2b2lkLXJlZ2lvbjsKICAgICAgICBicmVhay1p
bnNpZGU6IGF2b2lkLXJlZ2lvbjsKICAgICAgICBjb2xvcjogZG9kZ2VyYmx1ZTsKICAgIH0KICAg
IC5iZWZvcmUtYXZvaWQtYmVmb3JlIHsKICAgICAgICBjb2xvcjogZG9kZ2VyYmx1ZTsKICAgIH0K
ICAgIC5hdm9pZC1iZWZvcmUgewogICAgICAgIC13ZWJraXQtcmVnaW9uLWJyZWFrLWJlZm9yZTog
YXZvaWQ7CiAgICAgICAgLXdlYmtpdC1icmVhay1iZWZvcmU6IGF2b2lkLXJlZ2lvbjsKICAgICAg
ICBicmVhay1iZWZvcmU6IGF2b2lkLXJlZ2lvbjsKICAgIH0KCiAgICAjZmxvdzEgewogICAgICAg
IC13ZWJraXQtZmxvdy1pbnRvOiBmbG93MTsKICAgIH0KICAgIC5yZWdpb24xIHsKICAgICAgICAt
d2Via2l0LWZsb3ctZnJvbTogZmxvdzE7CiAgICB9CiAgICAjZmxvdzIgewogICAgICAgIC13ZWJr
aXQtZmxvdy1pbnRvOiBmbG93MjsKICAgIH0KICAgIC5yZWdpb24yIHsKICAgICAgICAtd2Via2l0
LWZsb3ctZnJvbTogZmxvdzI7CiAgICB9CiAgICAjZmxvdzMgewogICAgICAgIC13ZWJraXQtZmxv
dy1pbnRvOiBmbG93MzsKICAgIH0KICAgIC5yZWdpb24zIHsKICAgICAgICAtd2Via2l0LWZsb3ct
ZnJvbTogZmxvdzM7CiAgICB9CgogICAgLnJlZ2lvbjEsIC5yZWdpb24yLCAucmVnaW9uMyB7CiAg
ICAgICAgYm9yZGVyOiA0cHggc29saWQgYmxhY2s7CiAgICAgICAgYm94LXNpemluZzogY29udGVu
dC1ib3g7CiAgICAgICAgd2lkdGg6IDE1ZW07CiAgICAgICAgaGVpZ2h0OiA4MHB4OwogICAgICAg
IGZsb2F0OiBsZWZ0OwogICAgICAgIG1hcmdpbjogMCAxZW07CiAgICB9CiAgICAuZmlyc3Qgewog
ICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIGNsZWFyOiBsZWZ0OwogICAgfQogICAgaDIgewog
ICAgICAgIGNsZWFyOiBib3RoOwogICAgfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KICAg
IDxkaXYgaWQ9ImZsb3cxIj4KICAgICAgICA8cD5zb21lIHRleHQgaGVyZTwvcD4KICAgICAgICA8
cD5zb21lIHRleHQgaGVyZTwvcD4KICAgICAgICA8cD5zb21lIHRleHQgaGVyZTwvcD4KICAgICAg
ICA8cCBjbGFzcz0iYmVmb3JlLWF2b2lkLWJlZm9yZSI+c29tZSB0ZXh0IGhlcmU8L3A+CiAgICAg
ICAgPHAgY2xhc3M9ImF2b2lkLWJlZm9yZSI+c29tZSB0ZXh0IGhlcmU8L3A+CiAgICAgICAgPHA+
c29tZSB0ZXh0IGhlcmU8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImZsb3cyIj4KICAgICAg
ICA8cD5zb21lIHRleHQgaGVyZTwvcD4KICAgICAgICA8cD5zb21lIHRleHQgaGVyZTwvcD4KICAg
ICAgICA8cD5zb21lIHRleHQgaGVyZTwvcD4KICAgICAgICA8cCBjbGFzcz0iYXZvaWQtaW5zaWRl
Ij5zb21lIHRleHQgaGVyZTxicj4KICAgICAgICAgICAgc29tZSB0ZXh0IGhlcmU8L3A+CiAgICAg
ICAgPHA+c29tZSB0ZXh0IGhlcmU8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImZsb3czIj4K
ICAgICAgICA8cD5zb21lIHRleHQgaGVyZTwvcD4KICAgICAgICA8cD5zb21lIHRleHQgaGVyZTwv
cD4KICAgICAgICA8cD5zb21lIHRleHQgaGVyZTwvcD4KICAgICAgICA8cCBjbGFzcz0iYXZvaWQt
YWZ0ZXIiPnNvbWUgdGV4dCBoZXJlPC9wPgogICAgICAgIDxwPnNvbWUgdGV4dCBoZXJlPC9wPgog
ICAgICAgIDxwPnNvbWUgdGV4dCBoZXJlPC9wPgogICAgPC9kaXY+CgogICAgPGgxPkJ1Z3MgZm9y
IGJyZWFrIGF2b2lkPC9oMT4KICAgIFlvdSBzaG91bGQgc2VlIG5vIGJsdWUgdGV4dCBpbiB0aGUg
bGVmdCBjb2x1bW4sIG9ubHkgaW4gdGhlIHJpZ2h0IGNvbHVtbi4KICAgIDxoMj5icmVhay1iZWZv
cmU6IGF2b2lkLXJlZ2lvbjwvaDI+CiAgICA8ZGl2IGNsYXNzPSJyZWdpb24xIGZpcnN0Ij48L2Rp
dj4KICAgIDxkaXYgY2xhc3M9InJlZ2lvbjEiPjwvZGl2PgoKICAgIDxoMj5icmVhay1pbnNpZGU6
IGF2b2lkLXJlZ2lvbjwvaDI+CiAgICA8ZGl2IGNsYXNzPSJyZWdpb24yIGZpcnN0Ij48L2Rpdj4K
ICAgIDxkaXYgY2xhc3M9InJlZ2lvbjIiPjwvZGl2PgoKICAgIDxoMj5icmVhay1hZnRlcjogYXZv
aWQtcmVnaW9uPC9oMj4KICAgIDxkaXYgY2xhc3M9InJlZ2lvbjMgZmlyc3QiPjwvZGl2PgogICAg
PGRpdiBjbGFzcz0icmVnaW9uMyI+PC9kaXY+CiAgICA8IS0tIDxwPgogICAgICA8c3Ryb25nPkJ1
ZzogPC9zdHJvbmc+IDxjb2RlPmJyZWFrLWFmdGVyOiBhdm9pZDwvY29kZT4gaXMgbm90IGFwcGxp
ZWQuCiAgICA8L3A+CiAgICA8cD4KICAgICAgPHN0cm9uZz5PYnNlcnZlOiA8L3N0cm9uZz4gVGhl
IGhlYWRpbmcgIkhlYWRpbmcgMiIgYXBwZWFycyBhdCB0aGUgYm90dG9tIG9mIHRoZSByZWdpb24g
c3BsaXQgZnJvbSB0aGUgY29udGVudCB0aGF0IGZvbGxvd3MgaXQuCiAgICA8L3A+CiAgICA8cD4K
ICAgICAgPHN0cm9uZz5FeHBlY3RlZDogPC9zdHJvbmc+IFRoZSBoZWFkaW5nIHNob3VsZCBub3Qg
YmUgc2VwYXJhdGVkIGZyb20gaXRzIG5leHQgc2libGluZyB3aGVuIDxjb2RlPmJyZWFrLWFmdGVy
OiBhdm9pZDwvY29kZT4gaXMgdXNlZCBvbiBpdC4KICAgIDwvcD4KICAgIDxwPgogICAgICA8c3Ry
b25nPlVzZS1jYXNlOiA8L3N0cm9uZz4gQXZvaWQgaGVhZGluZ3MgZnJvbSBhcHBlYXJpbmcgYXQg
dGhlIGJvdHRvbSBvZiBvbmUgcmVnaW9uIGFuZCBpdHMgc2libGluZyBjb250ZW50IGluIHRoZSBu
ZXh0LiBJbiBwcmludCBwdWJsaXNoaW5nIHRoZSBjb25jZXB0IGlzIGNhbGxlZCAia2VlcCB3aXRo
IG5leHQiLgogICAgPC9wPgoKICAgIDxkaXYgaWQ9InJlZ2lvbjEiIGNsYXNzPSJyZWdpb24iPjwv
ZGl2PgogICAgPGRpdiBpZD0icmVnaW9uMiIgY2xhc3M9InJlZ2lvbiI+PC9kaXY+CiAgICA8YXJ0
aWNsZT4KICAgICAgICA8cD5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIg
YWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFi
b3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuPC9wPgogICAgICAgIDxwPkR1aXMgYXV0ZSBpcnVy
ZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBk
b2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBj
dXBpZGF0YXQgbm9uLjwvcD4KICAgICAgICA8aDI+SGVhZGluZyAyPC9oMj4KICAgICAgICA8cD5V
dCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNv
IGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LjwvcD4KICAg
IDwvYXJ0aWNsZT4gLS0+CjwvYm9keT4KPC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192229</attachid>
            <date>2013-03-08 08:04:41 -0800</date>
            <delta_ts>2013-03-08 09:20:05 -0800</delta_ts>
            <desc>patch. wip.</desc>
            <filename>patch102809BreakAvoid.diff</filename>
            <type>text/plain</type>
            <size>27464</size>
            <attacher name="Mihai Maerean">mmaerean</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvYnJlYWstYmVmb3JlLWF2b2lk
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2JyZWFrLWJlZm9yZS1hdm9pZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNTM2NmEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2JyZWFrLWJlZm9yZS1hdm9pZC5odG1s
CkBAIC0wLDAgKzEsMzUgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+Cisg
ICAgPHRpdGxlPkJ1ZyAxMDI4MDkgLSBbQ1NTIFJlZ2lvbnNdIGF2b2lkIHZhbHVlIGlzIG5vdCBv
YmV5ZWQgaW4gcmVnaW9uLWJyZWFrLWJlZm9yZSBhbmQgcmVnaW9uLWJyZWFrLWFmdGVyIENTUyBw
cm9wZXJ0aWVzPC90aXRsZT4KKyAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKworICAg
ICAgICAgICAgLmF2b2lkLWJlZm9yZSB7CisgICAgICAgICAgICAgICAgLXdlYmtpdC1jb2x1bW5z
LWJyZWFrLWJlZm9yZTogYXZvaWQ7CisgICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogc29saWQg
MXB4ICNiYmI7CisgICAgICAgICAgICAgICAgY29sb3I6IGRvZGdlcmJsdWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC5jb250ZW50IHsKKworICAgICAgICAgICAgICAgIGJvcmRlcjog
MXB4IHNvbGlkICNiYmI7CisgICAgICAgICAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICAg
ICAgICAgIGhlaWdodDogMTYwcHg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgPC9zdHlsZT4K
KyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgor
ICAgICAgICAgICAgPHA+c29tZSBsb25nIHRleHQgaGVyZTwvcD4KKyAgICAgICAgICAgIDxwPnNv
bWUgbG9uZyB0ZXh0IGhlcmU8L3A+CisgICAgICAgICAgICA8cD5zb21lIGxvbmcgdGV4dCBoZXJl
PC9wPgorICAgICAgICAgICAgPHAgY2xhc3M9ImF2b2lkLWJlZm9yZSI+YXZvaWQgYnJlYWtpbmcg
QkVGT1JFIHRoaXM8L3A+CisgICAgICAgICAgICA8cD5zb21lIGxvbmcgdGV4dCBoZXJlPC9wPgor
ICAgICAgICA8L2Rpdj4KKworICAgICAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBibHVlIHRleHQgb25s
eSBpbiB0aGUgcmlnaHQgY29sdW1uLjxwPgorICAgICAgICA8cD5CdWcgMTAyODA5IC0gW0NTUyBS
ZWdpb25zXSBhdm9pZCB2YWx1ZSBpcyBub3Qgb2JleWVkIGluIHJlZ2lvbi1icmVhay1iZWZvcmUg
YW5kIHJlZ2lvbi1icmVhay1hZnRlciBDU1MgcHJvcGVydGllczwvcD4KKworICAgIDwvYm9keT4K
KzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L3JlZ2lvbnMvYnJlYWstYWZ0ZXItYXZvaWQtZXhwZWN0ZWQuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvcmVnaW9ucy9icmVhay1hZnRlci1hdm9pZC1leHBlY3RlZC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZjUwNWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lvbnMvYnJlYWstYWZ0ZXItYXZvaWQtZXhwZWN0ZWQuaHRt
bApAQCAtMCwwICsxLDM1IEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgor
ICAgIDx0aXRsZT5CdWcgMTAyODA5IC0gW0NTUyBSZWdpb25zXSBhdm9pZCB2YWx1ZSBpcyBub3Qg
b2JleWVkIGluIHJlZ2lvbi1icmVhay1iZWZvcmUgYW5kIHJlZ2lvbi1icmVhay1hZnRlciBDU1Mg
cHJvcGVydGllczwvdGl0bGU+CisgICAgICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisKKyAg
ICAgICAgICAgIC5hdm9pZC1hZnRlciB7CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTog
c29saWQgMXB4ICNiYmI7CisgICAgICAgICAgICAgICAgY29sb3I6IGRvZGdlcmJsdWU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC5yZWdpb24geworICAgICAgICAgICAgICAgIGJvcmRl
cjogMXB4IHNvbGlkICNiYmI7CisgICAgICAgICAgICAgICAgd2lkdGg6IDE4MHB4OworICAgICAg
ICAgICAgICAgIGhlaWdodDogMTQwcHg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgPC9zdHls
ZT4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAgIDxkaXYgY2xhc3M9InJlZ2lvbiI+
CisgICAgICAgICAgICA8cD5zb21lIHRleHQgaGVyZTwvcD4KKyAgICAgICAgICAgIDxwPnNvbWUg
dGV4dCBoZXJlPC9wPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0icmVnaW9u
IiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDoxOTBweDt0b3A6LTE0MnB4OyI+CisgICAg
ICAgICAgICA8aDQgY2xhc3M9ImF2b2lkLWFmdGVyIj5hdm9pZCBicmVha2luZyBBRlRFUiB0aGlz
PC9oND4KKyAgICAgICAgICAgIDxwPnNvbWUgdGV4dCBoZXJlPC9wPgorICAgICAgICAgICAgPHA+
c29tZSB0ZXh0IGhlcmU8L3A+CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxwPllvdSBzaG91
bGQgc2VlIGJsdWUgdGV4dCBvbmx5IGluIHRoZSByaWdodCBjb2x1bW4uPHA+CisgICAgICAgIDxw
PkJ1ZyAxMDI4MDkgLSBbQ1NTIFJlZ2lvbnNdIGF2b2lkIHZhbHVlIGlzIG5vdCBvYmV5ZWQgaW4g
cmVnaW9uLWJyZWFrLWJlZm9yZSBhbmQgcmVnaW9uLWJyZWFrLWFmdGVyIENTUyBwcm9wZXJ0aWVz
PC9wPgorCisgICAgPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9icmVhay1hZnRlci1hdm9pZC1m
b2xsb3dlZC1ieS1wb3NpdGlvbi1maXhlZC1hbmQtbm9ybWFsLWZsb3ctZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9icmVhay1hZnRlci1hdm9pZC1mb2xsb3dlZC1ieS1w
b3NpdGlvbi1maXhlZC1hbmQtbm9ybWFsLWZsb3ctZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTk4ZThmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9yZWdpb25zL2JyZWFrLWFmdGVyLWF2b2lkLWZvbGxvd2VkLWJ5LXBvc2l0aW9u
LWZpeGVkLWFuZC1ub3JtYWwtZmxvdy1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzwh
ZG9jdHlwZSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgPHRpdGxlPkJ1ZyAxMDI4MDkg
LSBbQ1NTIFJlZ2lvbnNdIGF2b2lkIHZhbHVlIGlzIG5vdCBvYmV5ZWQgaW4gcmVnaW9uLWJyZWFr
LWJlZm9yZSBhbmQgcmVnaW9uLWJyZWFrLWFmdGVyIENTUyBwcm9wZXJ0aWVzPC90aXRsZT4KKyAg
ICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKworICAgICAgICAgICAgLmF2b2lkLWFmdGVy
IHsKKyAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2JiYjsKKyAgICAg
ICAgICAgICAgICBjb2xvcjogZG9kZ2VyYmx1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLnJlZ2lvbiB7CisgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JiYjsKKyAg
ICAgICAgICAgICAgICB3aWR0aDogMTgwcHg7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNDBw
eDsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLnBvc2l0aW9uLWFic29sdXRlIHsKKyAgICAgICAgICAgICAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgICAgICAgICAgICAgdG9wOiAxMTBweDsKKyAgICAgICAgICAgICAg
ICBsZWZ0OiA3MHB4OworICAgICAgICAgICAgfQorCisgICAgICAgIDwvc3R5bGU+CisgICAgPC9o
ZWFkPgorICAgIDxib2R5PgorICAgICAgICA8ZGl2IGNsYXNzPSJyZWdpb24iPgorICAgICAgICAg
ICAgPHA+c29tZSB0ZXh0IGhlcmU8L3A+CisgICAgICAgICAgICA8cD5zb21lIHRleHQgaGVyZTwv
cD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InJlZ2lvbiIgc3R5bGU9InBv
c2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTkwcHg7dG9wOi0xNDJweDsiPgorICAgICAgICAgICAgPGg0
IGNsYXNzPSJhdm9pZC1hZnRlciI+YXZvaWQgYnJlYWtpbmcgQUZURVIgdGhpczwvaDQ+CisgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJwb3NpdGlvbi1hYnNvbHV0ZSI+cG9zaXRpb24gYWJzb2x1dGU8
L2Rpdj4KKyAgICAgICAgICAgIDxwPnNvbWUgdGV4dCBoZXJlPC9wPgorICAgICAgICA8L2Rpdj4K
KworICAgICAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBibHVlIHRleHQgb25seSBpbiB0aGUgcmlnaHQg
Y29sdW1uLjxwPgorICAgICAgICA8cD5CdWcgMTAyODA5IC0gW0NTUyBSZWdpb25zXSBhdm9pZCB2
YWx1ZSBpcyBub3Qgb2JleWVkIGluIHJlZ2lvbi1icmVhay1iZWZvcmUgYW5kIHJlZ2lvbi1icmVh
ay1hZnRlciBDU1MgcHJvcGVydGllczwvcD4KKworICAgIDwvYm9keT4KKzwvaHRtbD4KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lv
bnMvYnJlYWstYWZ0ZXItYXZvaWQtZm9sbG93ZWQtYnktcG9zaXRpb24tZml4ZWQtYW5kLW5vcm1h
bC1mbG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3JlZ2lvbnMvYnJlYWstYWZ0ZXItYXZvaWQt
Zm9sbG93ZWQtYnktcG9zaXRpb24tZml4ZWQtYW5kLW5vcm1hbC1mbG93Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMGM1OAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9icmVhay1hZnRlci1hdm9pZC1mb2xsb3dlZC1ieS1wb3Np
dGlvbi1maXhlZC1hbmQtbm9ybWFsLWZsb3cuaHRtbApAQCAtMCwwICsxLDQ4IEBACis8IWRvY3R5
cGUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgIDx0aXRsZT5CdWcgMTAyODA5IC0gW0NT
UyBSZWdpb25zXSBhdm9pZCB2YWx1ZSBpcyBub3Qgb2JleWVkIGluIHJlZ2lvbi1icmVhay1iZWZv
cmUgYW5kIHJlZ2lvbi1icmVhay1hZnRlciBDU1MgcHJvcGVydGllczwvdGl0bGU+CisgICAgICAg
IDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisKKyAgICAgICAgICAgIC5hdm9pZC1hZnRlciB7Cisg
ICAgICAgICAgICAgICAgLXdlYmtpdC1yZWdpb24tYnJlYWstYWZ0ZXI6IGF2b2lkOworICAgICAg
ICAgICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjYmJiOworICAgICAgICAgICAgICAg
IGNvbG9yOiBkb2RnZXJibHVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuY29udGVu
dCB7CisgICAgICAgICAgICAgICAgLXdlYmtpdC1mbG93LWludG86IGZsb3cxOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLnJlZ2lvbiB7CisgICAgICAgICAgICAgICAgLXdlYmtpdC1mbG93
LWZyb206IGZsb3cxOworCisgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JiYjsK
KyAgICAgICAgICAgICAgICB3aWR0aDogMTgwcHg7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAx
NDBweDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLnBvc2l0aW9uLWFic29sdXRlIHsK
KyAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICAgICAgdG9w
OiAxMTBweDsKKyAgICAgICAgICAgICAgICBsZWZ0OiA3MHB4OworICAgICAgICAgICAgfQorCisg
ICAgICAgIDwvc3R5bGU+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAgICA8ZGl2IGNs
YXNzPSJjb250ZW50Ij4KKyAgICAgICAgICAgIDxwPnNvbWUgdGV4dCBoZXJlPC9wPgorICAgICAg
ICAgICAgPHA+c29tZSB0ZXh0IGhlcmU8L3A+CisgICAgICAgICAgICA8aDQgY2xhc3M9ImF2b2lk
LWFmdGVyIj5hdm9pZCBicmVha2luZyBBRlRFUiB0aGlzPC9oND4KKyAgICAgICAgICAgIDxkaXYg
Y2xhc3M9InBvc2l0aW9uLWFic29sdXRlIj5wb3NpdGlvbiBhYnNvbHV0ZTwvZGl2PgorICAgICAg
ICAgICAgPHA+c29tZSB0ZXh0IGhlcmU8L3A+CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxk
aXYgY2xhc3M9InJlZ2lvbiI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InJlZ2lvbiIgc3R5
bGU9InBvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTkwcHg7dG9wOi0xNDJweDsiPjwvZGl2PgorCisg
ICAgICAgIDxwPllvdSBzaG91bGQgc2VlIGJsdWUgdGV4dCBvbmx5IGluIHRoZSByaWdodCBjb2x1
bW4uPHA+CisgICAgICAgIDxwPkJ1ZyAxMDI4MDkgLSBbQ1NTIFJlZ2lvbnNdIGF2b2lkIHZhbHVl
IGlzIG5vdCBvYmV5ZWQgaW4gcmVnaW9uLWJyZWFrLWJlZm9yZSBhbmQgcmVnaW9uLWJyZWFrLWFm
dGVyIENTUyBwcm9wZXJ0aWVzPC9wPgorCisgICAgPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9i
cmVhay1hZnRlci1hdm9pZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9yZWdpb25zL2JyZWFrLWFm
dGVyLWF2b2lkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlmYmEx
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9icmVhay1hZnRl
ci1hdm9pZC5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cisg
ICAgPGhlYWQ+CisgICAgPHRpdGxlPkJ1ZyAxMDI4MDkgLSBbQ1NTIFJlZ2lvbnNdIGF2b2lkIHZh
bHVlIGlzIG5vdCBvYmV5ZWQgaW4gcmVnaW9uLWJyZWFrLWJlZm9yZSBhbmQgcmVnaW9uLWJyZWFr
LWFmdGVyIENTUyBwcm9wZXJ0aWVzPC90aXRsZT4KKyAgICAgICAgPHN0eWxlIHR5cGU9InRleHQv
Y3NzIj4KKworICAgICAgICAgICAgLmF2b2lkLWFmdGVyIHsKKyAgICAgICAgICAgICAgICAtd2Vi
a2l0LXJlZ2lvbi1icmVhay1hZnRlcjogYXZvaWQ7CisgICAgICAgICAgICAgICAgYm9yZGVyLWJv
dHRvbTogc29saWQgMXB4ICNiYmI7CisgICAgICAgICAgICAgICAgY29sb3I6IGRvZGdlcmJsdWU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5jb250ZW50IHsKKyAgICAgICAgICAgICAg
ICAtd2Via2l0LWZsb3ctaW50bzogZmxvdzE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAu
cmVnaW9uIHsKKyAgICAgICAgICAgICAgICAtd2Via2l0LWZsb3ctZnJvbTogZmxvdzE7CisKKyAg
ICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYmJiOworICAgICAgICAgICAgICAgIHdp
ZHRoOiAxODBweDsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDE0MHB4OworICAgICAgICAgICAg
fQorCisgICAgICAgIDwvc3R5bGU+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAgICA8
ZGl2IGNsYXNzPSJjb250ZW50Ij4KKyAgICAgICAgICAgIDxwPnNvbWUgdGV4dCBoZXJlPC9wPgor
ICAgICAgICAgICAgPHA+c29tZSB0ZXh0IGhlcmU8L3A+CisgICAgICAgICAgICA8aDQgY2xhc3M9
ImF2b2lkLWFmdGVyIj5hdm9pZCBicmVha2luZyBBRlRFUiB0aGlzPC9oND4KKyAgICAgICAgICAg
IDxwPnNvbWUgdGV4dCBoZXJlPC9wPgorICAgICAgICAgICAgPHA+c29tZSB0ZXh0IGhlcmU8L3A+
CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgY2xhc3M9InJlZ2lvbiI+PC9kaXY+Cisg
ICAgICAgIDxkaXYgY2xhc3M9InJlZ2lvbiIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6
MTkwcHg7dG9wOi0xNDJweDsiPjwvZGl2PgorCisgICAgICAgIDxwPllvdSBzaG91bGQgc2VlIGJs
dWUgdGV4dCBvbmx5IGluIHRoZSByaWdodCBjb2x1bW4uPHA+CisgICAgICAgIDxwPkJ1ZyAxMDI4
MDkgLSBbQ1NTIFJlZ2lvbnNdIGF2b2lkIHZhbHVlIGlzIG5vdCBvYmV5ZWQgaW4gcmVnaW9uLWJy
ZWFrLWJlZm9yZSBhbmQgcmVnaW9uLWJyZWFrLWFmdGVyIENTUyBwcm9wZXJ0aWVzPC9wPgorCisg
ICAgPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9icmVhay1iZWZvcmUtYXZvaWQtZXhwZWN0ZWQu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9icmVhay1iZWZvcmUtYXZvaWQtZXhwZWN0
ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjJhNTgwCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9yZWdpb25zL2JyZWFrLWJlZm9yZS1hdm9p
ZC1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+
CisgICAgPGhlYWQ+CisgICAgPHRpdGxlPkJ1ZyAxMDI4MDkgLSBbQ1NTIFJlZ2lvbnNdIGF2b2lk
IHZhbHVlIGlzIG5vdCBvYmV5ZWQgaW4gcmVnaW9uLWJyZWFrLWJlZm9yZSBhbmQgcmVnaW9uLWJy
ZWFrLWFmdGVyIENTUyBwcm9wZXJ0aWVzPC90aXRsZT4KKyAgICAgICAgPHN0eWxlIHR5cGU9InRl
eHQvY3NzIj4KKworICAgICAgICAgICAgLmF2b2lkLWJlZm9yZSB7CisgICAgICAgICAgICAgICAg
Ym9yZGVyLXRvcDogc29saWQgMXB4ICNiYmI7CisgICAgICAgICAgICAgICAgY29sb3I6IGRvZGdl
cmJsdWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5yZWdpb24geworICAgICAgICAg
ICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiYmI7CisgICAgICAgICAgICAgICAgd2lkdGg6IDEw
MHB4OworICAgICAgICAgICAgICAgIGhlaWdodDogMTYwcHg7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgPC9zdHlsZT4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAgIDxkaXYgY2xh
c3M9ImNvbnRlbnQiPgorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJyZWdp
b24iPgorICAgICAgICAgICAgPHA+c29tZSBsb25nIHRleHQgaGVyZTwvcD4KKyAgICAgICAgICAg
IDxwPnNvbWUgbG9uZyB0ZXh0IGhlcmU8L3A+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2
IGNsYXNzPSJyZWdpb24iIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjExMHB4O3RvcDot
MTYycHg7Ij4KKyAgICAgICAgICAgIDxwPnNvbWUgbG9uZyB0ZXh0IGhlcmU8L3A+CisgICAgICAg
ICAgICA8cCBjbGFzcz0iYXZvaWQtYmVmb3JlIj5hdm9pZCBicmVha2luZyBCRUZPUkUgdGhpczwv
cD4KKyAgICAgICAgICAgIDxwPnNvbWUgbG9uZyB0ZXh0IGhlcmU8L3A+CisgICAgICAgIDwvZGl2
PgorCisgICAgICAgIDxwPllvdSBzaG91bGQgc2VlIGJsdWUgdGV4dCBvbmx5IGluIHRoZSByaWdo
dCBjb2x1bW4uPHA+CisgICAgICAgIDxwPkJ1ZyAxMDI4MDkgLSBbQ1NTIFJlZ2lvbnNdIGF2b2lk
IHZhbHVlIGlzIG5vdCBvYmV5ZWQgaW4gcmVnaW9uLWJyZWFrLWJlZm9yZSBhbmQgcmVnaW9uLWJy
ZWFrLWFmdGVyIENTUyBwcm9wZXJ0aWVzPC9wPgorCisgICAgPC9ib2R5PgorPC9odG1sPgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvcmVn
aW9ucy9icmVhay1iZWZvcmUtYXZvaWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvcmVnaW9ucy9i
cmVhay1iZWZvcmUtYXZvaWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zMzRhOWU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9yZWdpb25zL2Jy
ZWFrLWJlZm9yZS1hdm9pZC5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzwhZG9jdHlwZSBodG1sPgor
PGh0bWw+CisgICAgPGhlYWQ+CisgICAgPHRpdGxlPkJ1ZyAxMDI4MDkgLSBbQ1NTIFJlZ2lvbnNd
IGF2b2lkIHZhbHVlIGlzIG5vdCBvYmV5ZWQgaW4gcmVnaW9uLWJyZWFrLWJlZm9yZSBhbmQgcmVn
aW9uLWJyZWFrLWFmdGVyIENTUyBwcm9wZXJ0aWVzPC90aXRsZT4KKyAgICAgICAgPHN0eWxlIHR5
cGU9InRleHQvY3NzIj4KKworICAgICAgICAgICAgLmF2b2lkLWJlZm9yZSB7CisgICAgICAgICAg
ICAgICAgLXdlYmtpdC1yZWdpb24tYnJlYWstYmVmb3JlOiBhdm9pZDsKKyAgICAgICAgICAgICAg
ICBib3JkZXItdG9wOiBzb2xpZCAxcHggI2JiYjsKKyAgICAgICAgICAgICAgICBjb2xvcjogZG9k
Z2VyYmx1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLmNvbnRlbnQgeworICAgICAg
ICAgICAgICAgIC13ZWJraXQtZmxvdy1pbnRvOiBmbG93MTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC5yZWdpb24geworICAgICAgICAgICAgICAgIC13ZWJraXQtZmxvdy1mcm9tOiBmbG93
MTsKKworICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiYmI7CisgICAgICAgICAg
ICAgICAgd2lkdGg6IDEwMHB4OworICAgICAgICAgICAgICAgIGhlaWdodDogMTYwcHg7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgPC9zdHlsZT4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+Cisg
ICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgorICAgICAgICAgICAgPHA+c29tZSBsb25nIHRl
eHQgaGVyZTwvcD4KKyAgICAgICAgICAgIDxwPnNvbWUgbG9uZyB0ZXh0IGhlcmU8L3A+CisgICAg
ICAgICAgICA8cD5zb21lIGxvbmcgdGV4dCBoZXJlPC9wPgorICAgICAgICAgICAgPHAgY2xhc3M9
ImF2b2lkLWJlZm9yZSI+YXZvaWQgYnJlYWtpbmcgQkVGT1JFIHRoaXM8L3A+CisgICAgICAgICAg
ICA8cD5zb21lIGxvbmcgdGV4dCBoZXJlPC9wPgorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8
ZGl2IGNsYXNzPSJyZWdpb24iPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJyZWdpb24iIHN0
eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjExMHB4O3RvcDotMTYycHg7Ij48L2Rpdj4KKwor
ICAgICAgICA8cD5Zb3Ugc2hvdWxkIHNlZSBibHVlIHRleHQgb25seSBpbiB0aGUgcmlnaHQgY29s
dW1uLjxwPgorICAgICAgICA8cD5CdWcgMTAyODA5IC0gW0NTUyBSZWdpb25zXSBhdm9pZCB2YWx1
ZSBpcyBub3Qgb2JleWVkIGluIHJlZ2lvbi1icmVhay1iZWZvcmUgYW5kIHJlZ2lvbi1icmVhay1h
ZnRlciBDU1MgcHJvcGVydGllczwvcD4KKworICAgIDwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAppbmRleCBiZGQyMWNjLi5iY2Q2OGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKQEAgLTE2NSw3ICsxNjUsNyBAQCBwcml2YXRlOgogfTsKIAogLy8gT3VyIE1h
cmdpbkluZm8gc3RhdGUgdXNlZCB3aGVuIGxheWluZyBvdXQgYmxvY2sgY2hpbGRyZW4uCi1SZW5k
ZXJCbG9jazo6TWFyZ2luSW5mbzo6TWFyZ2luSW5mbyhSZW5kZXJCbG9jayogYmxvY2ssIExheW91
dFVuaXQgYmVmb3JlQm9yZGVyUGFkZGluZywgTGF5b3V0VW5pdCBhZnRlckJvcmRlclBhZGRpbmcp
CitSZW5kZXJCbG9jazo6TWFyZ2luSW5mbzo6TWFyZ2luSW5mbyhjb25zdCBSZW5kZXJCbG9jayog
YmxvY2ssIExheW91dFVuaXQgYmVmb3JlQm9yZGVyUGFkZGluZywgTGF5b3V0VW5pdCBhZnRlckJv
cmRlclBhZGRpbmcpCiAgICAgOiBtX2F0QmVmb3JlU2lkZU9mQmxvY2sodHJ1ZSkKICAgICAsIG1f
YXRBZnRlclNpZGVPZkJsb2NrKGZhbHNlKQogICAgICwgbV9oYXNNYXJnaW5CZWZvcmVRdWlyayhm
YWxzZSkKQEAgLTI0NzMsMTAgKzI0NzMsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0Qmxv
Y2tDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIG1heEZsb2EKIAog
ICAgIFJlbmRlckJveCogbmV4dCA9IGZpcnN0Q2hpbGRCb3goKTsKIAotICAgIHdoaWxlIChuZXh0
KSB7Ci0gICAgICAgIFJlbmRlckJveCogY2hpbGQgPSBuZXh0OworICAgIHdoaWxlIChuZXh0IHx8
IHJlbmRlcmVyV2hlcmVUb1Jlc2V0TGF5b3V0KCkpIHsKKyAgICAgICAgUmVuZGVyQm94KiByZW5k
ZXJlcldoZXJlVG9SZXNldCA9IHJlbmRlcmVyV2hlcmVUb1Jlc2V0TGF5b3V0KCk7CisgICAgICAg
IFJlbmRlckJveCogY2hpbGQgPSByZW5kZXJlcldoZXJlVG9SZXNldCA/IHJlbmRlcmVyV2hlcmVU
b1Jlc2V0IDogbmV4dDsKICAgICAgICAgbmV4dCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpOwog
CisgICAgICAgIGlmIChyZW5kZXJlcldoZXJlVG9SZXNldCAmJiBjaGlsZC0+aXNSZW5kZXJCbG9j
aygpKSB7CisgICAgICAgICAgICBNYXJnaW5JbmZvKiBzdG9yZWRNYXJnaW5JbmZvID0gdG9SZW5k
ZXJCbG9jayhjaGlsZCktPm1hcmdpbkluZm9CZWZvcmVMYXlvdXRGb3JCbG9ja1dpdGhCcmVha0Fm
dGVyQXZvaWQoKTsKKyAgICAgICAgICAgIGlmIChzdG9yZWRNYXJnaW5JbmZvKQorICAgICAgICAg
ICAgICAgIG1hcmdpbkluZm8gPSAqc3RvcmVkTWFyZ2luSW5mbzsKKyAgICAgICAgICAgIHJlc2V0
UmVuZGVyZXJXaGVyZVRvUmVzZXRMYXlvdXQoKTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChj
aGlsZFRvRXhjbHVkZSA9PSBjaGlsZCkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIHRo
aXMgY2hpbGQsIHNpbmNlIGl0IHdpbGwgYmUgcG9zaXRpb25lZCBieSB0aGUgc3BlY2lhbGl6ZWQg
c3ViY2xhc3MgKGZpZWxkc2V0cyBhbmQgcnVieSBydW5zKS4KIApAQCAtMjQ5Myw4ICsyNTAxLDE0
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCByZWxheW91dENo
aWxkcmVuLCBMYXlvdXRVbml0JiBtYXhGbG9hCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCisgICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAg
dG9SZW5kZXJCbG9jayhjaGlsZCktPmNoZWNrQnJlYWtBdm9pZEJlZm9yZUxheW91dChtYXJnaW5J
bmZvKTsKKwogICAgICAgICAvLyBMYXkgb3V0IHRoZSBjaGlsZC4KICAgICAgICAgbGF5b3V0Qmxv
Y2tDaGlsZChjaGlsZCwgbWFyZ2luSW5mbywgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20sIG1h
eEZsb2F0TG9naWNhbEJvdHRvbSk7CisKKyAgICAgICAgaWYgKGNoaWxkLT5pc1JlbmRlckJsb2Nr
KCkpCisgICAgICAgICAgICBhZGp1c3RGb3JDaGlsZFdpdGhCcmVha0FmdGVyQXZvaWQoY2hpbGQp
OwogICAgIH0KICAgICAKICAgICAvLyBOb3cgZG8gdGhlIGhhbmRsaW5nIG9mIHRoZSBib3R0b20g
b2YgdGhlIGJsb2NrLCBhZGRpbmcgaW4gb3VyIGJvdHRvbSBib3JkZXIvcGFkZGluZyBhbmQKQEAg
LTcyNjcsMTMgKzcyODEsMTcgQEAgQ29sdW1uSW5mbzo6UGFnaW5hdGlvblVuaXQgUmVuZGVyQmxv
Y2s6OnBhZ2luYXRpb25Vbml0KCkgY29uc3QKIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YXBw
bHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQp
CiB7CisgICAgLy8gRklYTUU6IGFzIHBlciB0aGUgc3BlYyAoaHR0cDovL2Rldi53My5vcmcvY3Nz
d2cvY3NzMy1icmVhay8jYnJlYWstYmVmb3JlKSBhc3NlcnQgY2hpbGQgaXMgYSBibG9jay4KKwog
ICAgIC8vIEZJWE1FOiBBZGQgcGFnZSBicmVhayBjaGVja2luZyBoZXJlIHdoZW4gd2Ugc3VwcG9y
dCBwcmludGluZy4KKyAgICBib29sIGZha2VJdCA9IGNoaWxkLT5pc1JlbmRlckJsb2NrKCkgJiYg
dG9SZW5kZXJCbG9jayhjaGlsZCktPmZha2VIYXZpbmdCcmVha0JlZm9yZUFsd2F5cygpOwogICAg
IGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5h
dGluZ0NvbHVtbnMoKTsKICAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9ICFjaGVja0NvbHVtbkJy
ZWFrcyAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7IC8vIEZJ
WE1FOiBPbmNlIGNvbHVtbnMgY2FuIHByaW50IHdlIGhhdmUgdG8gY2hlY2sgdGhpcy4KICAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygp
OwogICAgIGJvb2wgY2hlY2tSZWdpb25CcmVha3MgPSBmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQt
PmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCk7Ci0gICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9
IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtCZWZvcmUo
KSA9PSBQQkFMV0FZUykgfHwgKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFn
ZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IChjaGVja1JlZ2lvbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cmVnaW9uQnJlYWtCZWZv
cmUoKSA9PSBQQkFMV0FZUyk7CisgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9IChjaGVja0Nv
bHVtbkJyZWFrcyAmJiAoY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJB
TFdBWVMgfHwgZmFrZUl0KSkKKyAgICAgICAgfHwgKGNoZWNrUGFnZUJyZWFrcyAmJiAoY2hpbGQt
PnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTIHx8IGZha2VJdCkpCisgICAg
ICAgIHx8IChjaGVja1JlZ2lvbkJyZWFrcyAmJiAoY2hpbGQtPnN0eWxlKCktPnJlZ2lvbkJyZWFr
QmVmb3JlKCkgPT0gUEJBTFdBWVMgfHwgZmFrZUl0KSk7CiAgICAgaWYgKGNoZWNrQmVmb3JlQWx3
YXlzICYmIGluTm9ybWFsRmxvdyhjaGlsZCkgJiYgaGFzTmV4dFBhZ2UobG9naWNhbE9mZnNldCwg
SW5jbHVkZVBhZ2VCb3VuZGFyeSkpIHsKICAgICAgICAgaWYgKGNoZWNrQ29sdW1uQnJlYWtzKQog
ICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5hZGRGb3JjZWRDb2x1bW5CcmVhayhj
aGlsZCwgbG9naWNhbE9mZnNldCk7CkBAIC03Mzg5LDYgKzc0MDcsNjkgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwg
TGF5b3V0VW5pdAogICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0OwogfQogCitib29sIFJlbmRlckJs
b2NrOjpoYXNCcmVha0FmdGVyQXZvaWQoKSBjb25zdAoreworICAgIGJvb2wgY2hlY2tDb2x1bW5C
cmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGluZ0NvbHVtbnMoKTsKKyAg
ICBib29sIGNoZWNrUGFnZUJyZWFrcyA9ICFjaGVja0NvbHVtbkJyZWFrcyAmJiB2aWV3KCktPmxh
eW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7CisgICAgUmVuZGVyRmxvd1RocmVhZCog
Zmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICBib29sIGNoZWNr
UmVnaW9uQnJlYWtzID0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxv
d1RocmVhZCgpOworICAgIHJldHVybiAoY2hlY2tDb2x1bW5CcmVha3MgJiYgdGhpcy0+c3R5bGUo
KS0+Y29sdW1uQnJlYWtBZnRlcigpID09IFBCQVZPSUQpCisgICAgICAgIHx8IChjaGVja1BhZ2VC
cmVha3MgJiYgdGhpcy0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFWT0lEKQorICAg
ICAgICB8fCAoY2hlY2tSZWdpb25CcmVha3MgJiYgdGhpcy0+c3R5bGUoKS0+cmVnaW9uQnJlYWtB
ZnRlcigpID09IFBCQVZPSUQpOworfQorCit2b2lkIFJlbmRlckJsb2NrOjpjaGVja0JyZWFrQXZv
aWRCZWZvcmVMYXlvdXQoY29uc3QgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKK3sKKyAgICBpZiAo
IWhhc0JyZWFrQWZ0ZXJBdm9pZCgpKQorICAgICAgICByZXR1cm47CisgICAgc2V0TWFyZ2luSW5m
b0JlZm9yZUxheW91dEZvckJsb2NrV2l0aEJyZWFrQWZ0ZXJBdm9pZChtYXJnaW5JbmZvKTsKK30K
Kwordm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ2hpbGRXaXRoQnJlYWtBZnRlckF2b2lkKFJl
bmRlckJveCogY2hpbGQpCit7CisgICAgaWYgKGNoaWxkLT5pc1Bvc2l0aW9uZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGNoaWxkLT5pc1JlbmRlckJsb2NrKCkgJiYgdG9SZW5kZXJC
bG9jayhjaGlsZCktPmhhc0JyZWFrQWZ0ZXJBdm9pZCgpKSB7CisgICAgICAgIGlmICghcmVuZGVy
ZXJXaXRoQnJlYWtBZnRlckF2b2lkKCkpCisgICAgICAgICAgICBzZXRyZW5kZXJlcldpdGhCcmVh
a0FmdGVyQXZvaWQoY2hpbGQpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlbmRlckJveCogcHJl
dmlvdXNTaWJsaW5nID0gY2hpbGQtPnByZXZpb3VzU2libGluZ0JveEluTm9ybWFsRmxvdygpOwor
CisgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcgJiYgcHJldmlvdXNTaWJsaW5nID09IHJlbmRl
cmVyV2l0aEJyZWFrQWZ0ZXJBdm9pZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJGbG93VGhyZWFk
KiBmbG93VGhyZWFkID0gY2hpbGQtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKKyAgICAg
ICAgICAgIGJvb2wgaXNBQnJlYWtCZXR3ZWVuVGhlbSA9IGZsb3dUaHJlYWQgJiYgZmxvd1RocmVh
ZC0+aXNBQnJlYWtCZXR3ZWVuQm94ZXMocHJldmlvdXNTaWJsaW5nLCBjaGlsZCk7CisgICAgICAg
ICAgICBpZiAoaXNBQnJlYWtCZXR3ZWVuVGhlbSkgeworICAgICAgICAgICAgICAgIHNldE5lZWRz
TGF5b3V0KHRydWUsIE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgY2hpbGQtPnNldE5l
ZWRzTGF5b3V0KHRydWUsIE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgcHJldmlvdXNT
aWJsaW5nLT5zZXROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRoaXMpOworCisgICAgICAgICAg
ICAgICAgLy8gRmluZCB0aGUgZmFydGhlc3Qgc2libGluZyB0aGF0IG5lZWRzIHRvIG1vdmUgdG8g
dGhpcyBwYWdlIChiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIGEgc2VyaWVzCisgICAgICAgICAgICAg
ICAgLy8gb2Ygc2libGluZ3Mgd2l0aCBicmVhazphdm9pZCkuCisgICAgICAgICAgICAgICAgUmVu
ZGVyQm94KiBmYXJ0aGVzdFNpYmxpbmcgPSBwcmV2aW91c1NpYmxpbmc7CisgICAgICAgICAgICAg
ICAgZm9yIChSZW5kZXJCb3gqIGN1cnJlbnQgPSBmYXJ0aGVzdFNpYmxpbmctPnByZXZpb3VzU2li
bGluZ0JveEluTm9ybWFsRmxvdygpOyBjdXJyZW50ICYmIGN1cnJlbnQtPmlzUmVuZGVyQmxvY2so
KSAmJiB0b1JlbmRlckJsb2NrKGN1cnJlbnQpLT5oYXNCcmVha0FmdGVyQXZvaWQoKTsgZmFydGhl
c3RTaWJsaW5nID0gY3VycmVudCwgY3VycmVudCA9IGN1cnJlbnQtPnByZXZpb3VzU2libGluZ0Jv
eEluTm9ybWFsRmxvdygpKQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5zZXROZWVkc0xh
eW91dCh0cnVlLCBNYXJrT25seVRoaXMpOworICAgICAgICAgICAgICAgIGZhcnRoZXN0U2libGlu
Zy0+c2V0TmVlZHNMYXlvdXQodHJ1ZSwgTWFya09ubHlUaGlzKTsKKworICAgICAgICAgICAgICAg
IGlmIChmYXJ0aGVzdFNpYmxpbmctPmlzUmVuZGVyQmxvY2soKSkKKyAgICAgICAgICAgICAgICAg
ICAgdG9SZW5kZXJCbG9jayhmYXJ0aGVzdFNpYmxpbmcpLT5zZXRGYWtlSGF2aW5nQnJlYWtCZWZv
cmVBbHdheXMoKTsgLy8gQmxvY2tzIHRoYXQgaGF2ZSBicmVhay1hZnRlcjphdm9pZCB0aGF0IG5l
ZWQgdG8gbW92ZSB0byB0aGUgbmV4dCBwYWdlIG5lZWQgdG8gZmFrZSBoYXZpbmcgYnJlYWstYmVm
b3JlOmFsd2F5cy4KKworICAgICAgICAgICAgICAgIHJlc2V0TGF5b3V0VG9UaGlzQ2hpbGQoZmFy
dGhlc3RTaWJsaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBSZW5kZXJCbG9jazo6cmVzZXRMYXlvdXRUb1RoaXNDaGlsZChSZW5kZXJCb3gqIGNoaWxkKQor
eworICAgIEFTU0VSVChjaGlsZC0+bmVlZHNMYXlvdXQoKSk7CisgICAgQVNTRVJUKG5lZWRzTGF5
b3V0KCkpOworCisgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICBtX3JhcmVEYXRhID0gYWRv
cHRQdHIobmV3IFJlbmRlckJsb2NrUmFyZURhdGEodGhpcykpOworICAgIG1fcmFyZURhdGEtPm1f
cmVuZGVyZXJXaGVyZVRvUmVzZXRMYXlvdXQgPSBjaGlsZDsKK30KKwogYm9vbCBSZW5kZXJCbG9j
azo6cHVzaFRvTmV4dFBhZ2VXaXRoTWluaW11bUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCYgYWRq
dXN0bWVudCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBMYXlvdXRVbml0IG1pbmltdW1Mb2dp
Y2FsSGVpZ2h0KSBjb25zdAogewogICAgIGJvb2wgY2hlY2tSZWdpb24gPSBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggNDIxYzA1YS4uNDI3OThmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTk4Myw3ICs5ODMsNyBAQCBw
cml2YXRlOgogICAgICAgICBMYXlvdXRVbml0IG1fbmVnYXRpdmVNYXJnaW47CiAKICAgICBwdWJs
aWM6Ci0gICAgICAgIE1hcmdpbkluZm8oUmVuZGVyQmxvY2sqLCBMYXlvdXRVbml0IGJlZm9yZUJv
cmRlclBhZGRpbmcsIExheW91dFVuaXQgYWZ0ZXJCb3JkZXJQYWRkaW5nKTsKKyAgICAgICAgTWFy
Z2luSW5mbyhjb25zdCBSZW5kZXJCbG9jayosIExheW91dFVuaXQgYmVmb3JlQm9yZGVyUGFkZGlu
ZywgTGF5b3V0VW5pdCBhZnRlckJvcmRlclBhZGRpbmcpOwogCiAgICAgICAgIHZvaWQgc2V0QXRC
ZWZvcmVTaWRlT2ZCbG9jayhib29sIGIpIHsgbV9hdEJlZm9yZVNpZGVPZkJsb2NrID0gYjsgfQog
ICAgICAgICB2b2lkIHNldEF0QWZ0ZXJTaWRlT2ZCbG9jayhib29sIGIpIHsgbV9hdEFmdGVyU2lk
ZU9mQmxvY2sgPSBiOyB9CkBAIC0xMDE1LDYgKzEwMTUsNyBAQCBwcml2YXRlOgogICAgICAgICB2
b2lkIHNldERpc2NhcmRNYXJnaW4oYm9vbCB2YWx1ZSkgeyBtX2Rpc2NhcmRNYXJnaW4gPSB2YWx1
ZTsgfQogCiAgICAgICAgIGJvb2wgYXRCZWZvcmVTaWRlT2ZCbG9jaygpIGNvbnN0IHsgcmV0dXJu
IG1fYXRCZWZvcmVTaWRlT2ZCbG9jazsgfQorICAgICAgICBib29sIGF0QWZ0ZXJTaWRlT2ZCbG9j
aygpIGNvbnN0IHsgcmV0dXJuIG1fYXRBZnRlclNpZGVPZkJsb2NrOyB9CiAgICAgICAgIGJvb2wg
Y2FuQ29sbGFwc2VXaXRoTWFyZ2luQmVmb3JlKCkgY29uc3QgeyByZXR1cm4gbV9hdEJlZm9yZVNp
ZGVPZkJsb2NrICYmIG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVXaXRoQ2hpbGRyZW47IH0KICAg
ICAgICAgYm9vbCBjYW5Db2xsYXBzZVdpdGhNYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YXRBZnRlclNpZGVPZkJsb2NrICYmIG1fY2FuQ29sbGFwc2VNYXJnaW5BZnRlcldpdGhDaGlsZHJl
bjsgfQogICAgICAgICBib29sIGNhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gbV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJlbjsgfQpA
QCAtMTA3Myw2ICsxMDc0LDQzIEBAIHByb3RlY3RlZDoKICAgICBMYXlvdXRVbml0IGFwcGx5QmVm
b3JlQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0KTsgLy8g
SWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBicmVhaywgdGhlbiByZXR1cm4gYSBuZXcgeVBvcyB0
aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgogICAgIExheW91
dFVuaXQgYXBwbHlBZnRlckJyZWFrKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNh
bE9mZnNldCwgTWFyZ2luSW5mbyYpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGFuIGFmdGVyIGJyZWFr
LCB0aGVuIHJldHVybiBhIG5ldyBvZmZzZXQgdGhhdCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0aGUg
bmV4dCBwYWdlL2NvbHVtbi4KIAorICAgIGJvb2wgaGFzQnJlYWtBZnRlckF2b2lkKCkgY29uc3Q7
CisgICAgdm9pZCBjaGVja0JyZWFrQXZvaWRCZWZvcmVMYXlvdXQoY29uc3QgTWFyZ2luSW5mbyYp
OyAvLyBXaGF0IG5lZWRzIHRvIGJlIGRvbmUgd2hlbiBkdXJpbmcgbGF5b3V0IGEgYmxvY2sgd2l0
aCBicmVhazphdm9pZCBpcyBlbmNvdW50ZXJlZC4KKyAgICB2b2lkIHJlc2V0TGF5b3V0VG9UaGlz
Q2hpbGQoUmVuZGVyQm94KiBjaGlsZCk7IC8vIENhdXNlcyB0aGUgbGF5b3V0IHByb2Nlc3MgdG8g
YmUgcmVzZXQgc3RhcnRpbmcgd2l0aCBnaXZlbiBjaGlsZC4KKworICAgIFJlbmRlckJveCogcmVu
ZGVyZXJXaXRoQnJlYWtBZnRlckF2b2lkKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1f
cmFyZURhdGEtPm1fcmVuZGVyZXJXaXRoQnJlYWtBZnRlckF2b2lkIDogMDsgfQorICAgIHZvaWQg
c2V0cmVuZGVyZXJXaXRoQnJlYWtBZnRlckF2b2lkKFJlbmRlckJveCogcikKKyAgICB7CisgICAg
ICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihu
ZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKSk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fcmVu
ZGVyZXJXaXRoQnJlYWtBZnRlckF2b2lkID0gcjsKKyAgICB9CisKKyAgICBSZW5kZXJCb3gqIHJl
bmRlcmVyV2hlcmVUb1Jlc2V0TGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1f
cmFyZURhdGEtPm1fcmVuZGVyZXJXaGVyZVRvUmVzZXRMYXlvdXQgOiAwOyB9CisgICAgdm9pZCBy
ZXNldFJlbmRlcmVyV2hlcmVUb1Jlc2V0TGF5b3V0KCkKKyAgICB7CisgICAgICAgIGlmICghbV9y
YXJlRGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9yZW5k
ZXJlcldoZXJlVG9SZXNldExheW91dCA9IDA7CisgICAgfQorCisgICAgTWFyZ2luSW5mbyogbWFy
Z2luSW5mb0JlZm9yZUxheW91dEZvckJsb2NrV2l0aEJyZWFrQWZ0ZXJBdm9pZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmFyZURhdGEgPyAmbV9yYXJlRGF0YS0+bV9tYXJnaW5JbmZvQmVmb3JlTGF5b3V0
Rm9yQmxvY2tXaXRoQnJlYWtBZnRlckF2b2lkIDogMDsgfQorICAgIHZvaWQgc2V0TWFyZ2luSW5m
b0JlZm9yZUxheW91dEZvckJsb2NrV2l0aEJyZWFrQWZ0ZXJBdm9pZChjb25zdCBNYXJnaW5JbmZv
JiBtYXJnaW5JbmZvKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICAg
ICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJCbG9ja1JhcmVEYXRhKHRoaXMpKTsK
KyAgICAgICAgbV9yYXJlRGF0YS0+bV9tYXJnaW5JbmZvQmVmb3JlTGF5b3V0Rm9yQmxvY2tXaXRo
QnJlYWtBZnRlckF2b2lkID0gbWFyZ2luSW5mbzsKKyAgICB9CisKKyAgICBib29sIGZha2VIYXZp
bmdCcmVha0JlZm9yZUFsd2F5cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5tX2Zha2VIYXZpbmdCcmVha0JlZm9yZUFsd2F5cyA6IGZhbHNlOyB9CisgICAgdm9pZCBz
ZXRGYWtlSGF2aW5nQnJlYWtCZWZvcmVBbHdheXMoYm9vbCBiID0gdHJ1ZSkKKyAgICB7CisgICAg
ICAgIGlmICghbV9yYXJlRGF0YSkKKyAgICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihu
ZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKSk7CisgICAgICAgIG1fcmFyZURhdGEtPm1fZmFr
ZUhhdmluZ0JyZWFrQmVmb3JlQWx3YXlzID0gYjsKKyAgICB9CisgICAgCisKIHB1YmxpYzoKICAg
ICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsVG9wRm9yT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KSBj
b25zdDsKICAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0KExheW91dFVu
aXQgb2Zmc2V0KSBjb25zdDsKQEAgLTEwODIsNiArMTEyMCw3IEBAIHByb3RlY3RlZDoKICAgICBi
b29sIHB1c2hUb05leHRQYWdlV2l0aE1pbmltdW1Mb2dpY2FsSGVpZ2h0KExheW91dFVuaXQmIGFk
anVzdG1lbnQsIExheW91dFVuaXQgbG9naWNhbE9mZnNldCwgTGF5b3V0VW5pdCBtaW5pbXVtTG9n
aWNhbEhlaWdodCkgY29uc3Q7CiAKICAgICBMYXlvdXRVbml0IGFkanVzdEZvclVuc3BsaXR0YWJs
ZUNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbE9mZnNldCwgYm9vbCBp
bmNsdWRlTWFyZ2lucyA9IGZhbHNlKTsgLy8gSWYgdGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBh
bmQgY2FuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBu
ZXh0IHBhZ2UvY29sdW1uLgorICAgIHZvaWQgYWRqdXN0Rm9yQ2hpbGRXaXRoQnJlYWtBZnRlckF2
b2lkKFJlbmRlckJveCogY2hpbGQpOyAvLyBIYW5kbGUgdGhlIHNpdHVhdGlvbiB3aGVuIHRoZSBj
aGlsZCBoYXMgYnJlYWsgYWZ0ZXIgYXZvaWQgb3IgaXRzIHByZXZpb3VzIHNpYmxpbmcgKGluIG5v
cm1hbCBmbG93KSBoYXMgaXQuCiAgICAgdm9pZCBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0
aW9uKFJvb3RJbmxpbmVCb3gqLCBMYXlvdXRVbml0JiBkZWx0YU9mZnNldCwgUmVuZGVyRmxvd1Ro
cmVhZCopOyAvLyBDb21wdXRlcyBhIGRlbHRhT2Zmc2V0IHZhbHVlIHRoYXQgcHV0IGEgbGluZSBh
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24gdGhlIGN1cnJl
bnQgcGFnZS4KICAgICBMYXlvdXRVbml0IGFkanVzdEJsb2NrQ2hpbGRGb3JQYWdpbmF0aW9uKExh
eW91dFVuaXQgbG9naWNhbFRvcEFmdGVyQ2xlYXIsIExheW91dFVuaXQgZXN0aW1hdGVXaXRob3V0
UGFnaW5hdGlvbiwgUmVuZGVyQm94KiBjaGlsZCwgYm9vbCBhdEJlZm9yZVNpZGVPZkJsb2NrKTsK
IApAQCAtMTIzMCw2ICsxMjY5LDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICwgbV9zaG91
bGRCcmVha0F0TGluZVRvQXZvaWRXaWRvdyhmYWxzZSkKICAgICAgICAgICAgICwgbV9kaXNjYXJk
TWFyZ2luQmVmb3JlKGZhbHNlKQogICAgICAgICAgICAgLCBtX2Rpc2NhcmRNYXJnaW5BZnRlcihm
YWxzZSkKKyAgICAgICAgICAgICwgbV9mYWtlSGF2aW5nQnJlYWtCZWZvcmVBbHdheXMoMCkKKyAg
ICAgICAgICAgICwgbV9yZW5kZXJlcldpdGhCcmVha0FmdGVyQXZvaWQoMCkKKyAgICAgICAgICAg
ICwgbV9tYXJnaW5JbmZvQmVmb3JlTGF5b3V0Rm9yQmxvY2tXaXRoQnJlYWtBZnRlckF2b2lkKGJs
b2NrLCAwLCAwKQorICAgICAgICAgICAgLCBtX3JlbmRlcmVyV2hlcmVUb1Jlc2V0TGF5b3V0KDAp
CiAgICAgICAgIHsgCiAgICAgICAgIH0KIApAQCAtMTI2MCw2ICsxMzAzLDEyIEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgYm9vbCBtX3Nob3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93IDogMTsKICAg
ICAgICAgYm9vbCBtX2Rpc2NhcmRNYXJnaW5CZWZvcmUgOiAxOwogICAgICAgICBib29sIG1fZGlz
Y2FyZE1hcmdpbkFmdGVyIDogMTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbV9mYWtlSGF2aW5n
QnJlYWtCZWZvcmVBbHdheXMgOiAxOyAvLyBCbG9ja3MgdGhhdCBoYXZlIGJyZWFrLWFmdGVyOmF2
b2lkIHRoYXQgbmVlZCB0byBtb3ZlIHRvIHRoZSBuZXh0IHBhZ2UgbmVlZCB0byBmYWtlIGhhdmlu
ZyBicmVhay1iZWZvcmU6YWx3YXlzLgorCisgICAgICAgIFJlbmRlckJveCogbV9yZW5kZXJlcldp
dGhCcmVha0FmdGVyQXZvaWQ7IC8vIFRoZSAxc3QgY2hpbGQgYmxvY2sgdGhhdCBoYXMgYnJlYWs6
YXZvaWQuCisgICAgICAgIE1hcmdpbkluZm8gbV9tYXJnaW5JbmZvQmVmb3JlTGF5b3V0Rm9yQmxv
Y2tXaXRoQnJlYWtBZnRlckF2b2lkOyAvLyBTdG9yZWQganVzdCBiZWZvcmUgdGhlIGxheW91dCBi
ZWdpbnMgZm9yIHRoYXQgYmxvY2suCisgICAgICAgIFJlbmRlckJveCogbV9yZW5kZXJlcldoZXJl
VG9SZXNldExheW91dDsgLy8gQmxvY2tzIHRoYXQgaGF2ZSBicmVhay1hZnRlcjphdm9pZCB0aGF0
IG5lZWQgdG8gbW92ZSB0byB0aGUgbmV4dCBwYWdlIG5lZWQgdG8gZmFrZSBoYXZpbmcgYnJlYWst
YmVmb3JlOmFsd2F5cyBhbmQgc28gdGhleSBhcmUgYmVpbmcgbGF5ZWQgb3V0IGFnYWluLgogICAg
ICB9OwogCiAgICAgT3duUHRyPFJlbmRlckJsb2NrUmFyZURhdGE+IG1fcmFyZURhdGE7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDcwNDk2NDEuLmEwZGY2N2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC01NDgsNiArNTQ4LDIzIEBA
IHZvaWQgUmVuZGVyQm94OjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
LCBjb25zdCBMYXlvdXRQb2ludCYgYWRkCiAgICAgICAgIHJlY3RzLmFwcGVuZChwaXhlbFNuYXBw
ZWRJbnRSZWN0KGFkZGl0aW9uYWxPZmZzZXQsIHNpemUoKSkpOwogfQogCisKK1JlbmRlckJveCog
UmVuZGVyQm94OjpwcmV2aW91c1NpYmxpbmdCb3hJbk5vcm1hbEZsb3coKSBjb25zdAoreworICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gdGhpcy0+cHJldmlvdXNTaWJsaW5nKCk7IGN1
cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgaWYg
KGN1cnJlbnQtPmlzQm94KCkgJiYgIWN1cnJlbnQtPmlzUG9zaXRpb25lZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRvUmVuZGVyQm94KGN1cnJlbnQpOworICAgIHJldHVybiAwOworfQorCitSZW5k
ZXJCb3gqIFJlbmRlckJveDo6bmV4dFNpYmxpbmdCb3hJbk5vcm1hbEZsb3coKSBjb25zdAorewor
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gdGhpcy0+bmV4dFNpYmxpbmcoKTsgY3Vy
cmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGlmIChjdXJy
ZW50LT5pc0JveCgpICYmICFjdXJyZW50LT5pc1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0b1JlbmRlckJveChjdXJyZW50KTsKKyAgICByZXR1cm4gMDsKK30KKwogTGF5b3V0UmVj
dCBSZW5kZXJCb3g6OnJlZmxlY3Rpb25Cb3goKSBjb25zdAogewogICAgIExheW91dFJlY3QgcmVz
dWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IDg4YjI5NTAuLmVlMjk5
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTE2OSw2ICsxNjksMTEg
QEAgcHVibGljOgogICAgIFJlbmRlckJveCogbmV4dFNpYmxpbmdCb3goKSBjb25zdDsKICAgICBS
ZW5kZXJCb3gqIHBhcmVudEJveCgpIGNvbnN0OwogCisgICAgLy8gVHJhdmVyc2VzIHRoZSByZW5k
ZXIgb2JqZWN0IHRyZWUgYW5kIHJldHVybnMgdGhlIGZpcnN0IHByZXZpb3VzIHNpYmxpbmcgdGhh
dCBpcyBib3RoIGEgYm94IGFuZCBpcyBzdGF0aWNhbGx5IHBvc2l0aW9uZWQuCisgICAgLy8gQWxs
IGNoZWNrcyBhcmUgZG9uZS4KKyAgICBSZW5kZXJCb3gqIHByZXZpb3VzU2libGluZ0JveEluTm9y
bWFsRmxvdygpIGNvbnN0OworICAgIFJlbmRlckJveCogbmV4dFNpYmxpbmdCb3hJbk5vcm1hbEZs
b3coKSBjb25zdDsKKwogICAgIC8vIFZpc3VhbCBhbmQgbGF5b3V0IG92ZXJmbG93IGFyZSBpbiB0
aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgYm94LiAgVGhpcyBtZWFucyB0aGF0IHRoZXkgYXJl
bid0IHB1cmVseSBwaHlzaWNhbCBkaXJlY3Rpb25zLgogICAgIC8vIEZvciBob3Jpem9udGFsLXRi
IGFuZCB2ZXJ0aWNhbC1sciB0aGV5IHdpbGwgbWF0Y2ggcGh5c2ljYWwgZGlyZWN0aW9ucywgYnV0
IGZvciBob3Jpem9udGFsLWJ0IGFuZCB2ZXJ0aWNhbC1ybCwgdGhlIHRvcC9ib3R0b20gYW5kIGxl
ZnQvcmlnaHQKICAgICAvLyByZXNwZWN0aXZlbHkgYXJlIGZsaXBwZWQgd2hlbiBjb21wYXJlZCB0
byB0aGVpciBwaHlzaWNhbCBjb3VudGVycGFydHMuICBGb3IgZXhhbXBsZSBtaW5YIGlzIG9uIHRo
ZSBsZWZ0IGluIHZlcnRpY2FsLWxyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsb3dUaHJlYWQuY3BwCmluZGV4IDA3NjBjNTcuLjcwMTMyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKQEAgLTc3NCw2ICs3NzQsMjAgQEAg
Ym9vbCBSZW5kZXJGbG93VGhyZWFkOjpvYmplY3RJbkZsb3dSZWdpb24oY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFJlbmQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgUmVu
ZGVyRmxvd1RocmVhZDo6aXNBQnJlYWtCZXR3ZWVuQm94ZXMoY29uc3QgUmVuZGVyQm94KiBmaXJz
dCwgY29uc3QgUmVuZGVyQm94KiBzZWNvbmQpIGNvbnN0Cit7CisgICAgUmVuZGVyUmVnaW9uKiBm
aXJzdFN0YXJ0LCAqZmlyc3RFbmQ7CisgICAgZ2V0UmVnaW9uUmFuZ2VGb3JCb3goZmlyc3QsIGZp
cnN0U3RhcnQsIGZpcnN0RW5kKTsKKworICAgIFJlbmRlclJlZ2lvbiogc2Vjb25kU3RhcnQsICpz
ZWNvbmRFbmQ7CisgICAgZ2V0UmVnaW9uUmFuZ2VGb3JCb3goc2Vjb25kLCBzZWNvbmRTdGFydCwg
c2Vjb25kRW5kKTsKKworICAgIGlmIChmaXJzdEVuZCA9PSBzZWNvbmRTdGFydCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICsrbV9yZWdpb25MaXN0LmZpbmQoZmlyc3RFbmQp
ID09IG1fcmVnaW9uTGlzdC5maW5kKHNlY29uZFN0YXJ0KTsKK30KKwogI2lmbmRlZiBOREVCVUcK
IGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6aXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudENv
bnNpc3RlbnQoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3dUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
VGhyZWFkLmgKaW5kZXggYjY1MjI5NC4uMGM0Zjg2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCkBAIC0xMzYsNiArMTM2LDkgQEAgcHVibGljOgogICAg
IC8vIENoZWNrIGlmIHRoZSBvYmplY3QgaXMgaW4gcmVnaW9uIGFuZCB0aGUgcmVnaW9uIGlzIHBh
cnQgb2YgdGhpcyBmbG93IHRocmVhZC4KICAgICBib29sIG9iamVjdEluRmxvd1JlZ2lvbihjb25z
dCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJSZWdpb24qKSBjb25zdDsKIAorICAgIC8vIFdo
ZXRoZXIgdGhlIDJuZCBib3ggaXMgaW4gYSByZWdpb24gdGhhdCBpcyBuZXh0IGluIHRoZSBjaGFp
biBhZnRlciB0aGUgcmVnaW9uIG9mIHRoZSAxc3QgYm94LgorICAgIGJvb2wgaXNBQnJlYWtCZXR3
ZWVuQm94ZXMoY29uc3QgUmVuZGVyQm94KiwgY29uc3QgUmVuZGVyQm94KikgY29uc3Q7CisKICAg
ICB2b2lkIHJlc2V0UmVnaW9uc092ZXJyaWRlTG9naWNhbENvbnRlbnRIZWlnaHQoKTsKICAgICB2
b2lkIG1hcmtBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNGb3JMYXlvdXQoKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>