<?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>217563</bug_id>
          
          <creation_ts>2020-10-10 15:22:02 -0700</creation_ts>
          <short_desc>[MotionMark] Computing the fast bounding rect of an arc should not materialize a CGPathRef</short_desc>
          <delta_ts>2020-10-11 19:15:34 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=217568</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1696551</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-10 15:22:02 -0700</bug_when>
    <thetext>Gives us a ~13% win on the Canvas Arcs subtest after enabling GPU process for canvas rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696553</commentid>
    <comment_count>1</comment_count>
      <attachid>411023</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-10 16:28:34 -0700</bug_when>
    <thetext>Created attachment 411023
WIP for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696565</commentid>
    <comment_count>2</comment_count>
      <attachid>411026</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-10 21:07:16 -0700</bug_when>
    <thetext>Created attachment 411026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696567</commentid>
    <comment_count>3</comment_count>
      <attachid>411028</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-10 21:25:18 -0700</bug_when>
    <thetext>Created attachment 411028
Fix ChangeLog typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696571</commentid>
    <comment_count>4</comment_count>
      <attachid>411028</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-10 21:42:23 -0700</bug_when>
    <thetext>Comment on attachment 411028
Fix ChangeLog typo

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

&gt; Source/WebCore/platform/graphics/Path.cpp:406
&gt; +            approximateBounds.extend(arc.offset);

This doesn’t look right to me. Why is FloatRect::extend the appropriate algorithm here? Because extend takes the offset as a point and expands the rectangle to encompass that point. That does not seem like what an arc’s offset does. On the other hand, I guess I don’t really know what an arc’s offset does, so maybe this is correct!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696573</commentid>
    <comment_count>5</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-10 21:47:06 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 411028 [details]
&gt; Fix ChangeLog typo
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=411028&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Path.cpp:406
&gt; &gt; +            approximateBounds.extend(arc.offset);
&gt; 
&gt; This doesn’t look right to me. Why is FloatRect::extend the appropriate
&gt; algorithm here? Because extend takes the offset as a point and expands the
&gt; rectangle to encompass that point. That does not seem like what an arc’s
&gt; offset does. On the other hand, I guess I don’t really know what an arc’s
&gt; offset does, so maybe this is correct!

Ah, so (IIRC) the `offset` member — if hasOffset is true — allows the ArcData to contain a starting point that will be connected to the arc itself. I suppose the name ArcData is misleading here — it’s more like “Arc (with an optional line segment prepended to it)”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696574</commentid>
    <comment_count>6</comment_count>
      <attachid>411028</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-10 21:48:51 -0700</bug_when>
    <thetext>Comment on attachment 411028
Fix ChangeLog typo

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/Path.cpp:406
&gt;&gt;&gt; +            approximateBounds.extend(arc.offset);
&gt;&gt; 
&gt;&gt; This doesn’t look right to me. Why is FloatRect::extend the appropriate algorithm here? Because extend takes the offset as a point and expands the rectangle to encompass that point. That does not seem like what an arc’s offset does. On the other hand, I guess I don’t really know what an arc’s offset does, so maybe this is correct!
&gt; 
&gt; Ah, so (IIRC) the `offset` member — if hasOffset is true — allows the ArcData to contain a starting point that will be connected to the arc itself. I suppose the name ArcData is misleading here — it’s more like “Arc (with an optional line segment prepended to it)”.

We should rename &quot;offset&quot; then, because ... it’s not an offset from anything!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696577</commentid>
    <comment_count>7</comment_count>
      <attachid>411028</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-10 22:02:07 -0700</bug_when>
    <thetext>Comment on attachment 411028
Fix ChangeLog typo

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/Path.cpp:406
&gt;&gt;&gt;&gt; +            approximateBounds.extend(arc.offset);
&gt;&gt;&gt; 
&gt;&gt;&gt; This doesn’t look right to me. Why is FloatRect::extend the appropriate algorithm here? Because extend takes the offset as a point and expands the rectangle to encompass that point. That does not seem like what an arc’s offset does. On the other hand, I guess I don’t really know what an arc’s offset does, so maybe this is correct!
&gt;&gt; 
&gt;&gt; Ah, so (IIRC) the `offset` member — if hasOffset is true — allows the ArcData to contain a starting point that will be connected to the arc itself. I suppose the name ArcData is misleading here — it’s more like “Arc (with an optional line segment prepended to it)”.
&gt; 
&gt; We should rename &quot;offset&quot; then, because ... it’s not an offset from anything!

Yep, that’s a good point! I’ll go ahead and rename it in this patch, as it doesn’t show up in a whole lot of places, and it’s a simple mechanical change. I’m thinking something like `initialMoveLocation` would make it much more obvious what effect this has.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696578</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-10 22:02:20 -0700</bug_when>
    <thetext>I see now that the whole concept of an arc being preceded by a straight line segment comes straight from CoreGraphics and other PostScript-influenced graphics APIs. It does say in CGPathAddArc documentation &quot;possibly preceded by a straight line segment&quot;. So I am making my peace with tis.

Now that I understand this, I get that the name &quot;offset&quot; isn’t right. I think it should just be &quot;start&quot;, just as in LineData. And also, as in LineData, there is no need for a &quot;hasOffset&quot; field. If there is no position set after opening the path, then the start is 0,0 as implemented in Path::addLineTo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696580</commentid>
    <comment_count>9</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-10 22:11:37 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; I see now that the whole concept of an arc being preceded by a straight line
&gt; segment comes straight from CoreGraphics and other PostScript-influenced
&gt; graphics APIs. It does say in CGPathAddArc documentation &quot;possibly preceded
&gt; by a straight line segment&quot;. So I am making my peace with tis.
&gt; 
&gt; Now that I understand this, I get that the name &quot;offset&quot; isn’t right. I
&gt; think it should just be &quot;start&quot;, just as in LineData. And also, as in
&gt; LineData, there is no need for a &quot;hasOffset&quot; field. If there is no position
&gt; set after opening the path, then the start is 0,0 as implemented in
&gt; Path::addLineTo.

`start` sounds good to me, I‘ll go with that.

As for what is currently `bool hasOffset`, that was added to deal with the fact that the act of calling `CGPathMoveToPoint()` with (0, 0) actually changes the bounds of the path:

Trying it out in a simple test app, I see:

    CGPathAddArc(path, NULL, 100, 100, 10, 0, 0.2, true);
    NSLog(@&quot;&gt; Bounds: %@&quot;, NSStringFromRect(CGPathGetBoundingBox(path)));

    &gt; Bounds: {{90, 90}, {20, 20}}

...however:

    CGPathMoveToPoint(path, NULL, 0, 0);
    CGPathAddArc(path, NULL, 100, 100, 10, 0, 0.2, true);
    NSLog(@&quot;&gt; Bounds: %@&quot;, NSStringFromRect(CGPathGetBoundingBox(path)));

    &gt; Bounds: {{0, 0}, {110, 110}}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696635</commentid>
    <comment_count>10</comment_count>
      <attachid>411054</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-11 08:51:14 -0700</bug_when>
    <thetext>Created attachment 411054
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696638</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-11 09:33:39 -0700</bug_when>
    <thetext>Committed r268320: &lt;https://trac.webkit.org/changeset/268320&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 411054.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696639</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-11 09:34:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/70183252&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696653</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-11 11:13:15 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #9)
&gt; As for what is currently `bool hasOffset`, that was added to deal with the
&gt; fact that the act of calling `CGPathMoveToPoint()` with (0, 0) actually
&gt; changes the bounds of the path:
&gt; 
&gt; Trying it out in a simple test app, I see:
&gt; 
&gt;     CGPathAddArc(path, NULL, 100, 100, 10, 0, 0.2, true);
&gt;     NSLog(@&quot;&gt; Bounds: %@&quot;, NSStringFromRect(CGPathGetBoundingBox(path)));
&gt; 
&gt;     &gt; Bounds: {{90, 90}, {20, 20}}
&gt; 
&gt; ...however:
&gt; 
&gt;     CGPathMoveToPoint(path, NULL, 0, 0);
&gt;     CGPathAddArc(path, NULL, 100, 100, 10, 0, 0.2, true);
&gt;     NSLog(@&quot;&gt; Bounds: %@&quot;, NSStringFromRect(CGPathGetBoundingBox(path)));
&gt; 
&gt;     &gt; Bounds: {{0, 0}, {110, 110}}

That seems like a mystery. Does stroking the path draw the line from 0,0 or not in that first case? If not, is there code that relies on this?

As a future refinement, I suggest using Optional rather than a separate boolean if the start point truly is optional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696656</commentid>
    <comment_count>14</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-11 11:19:43 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #13)
&gt; (In reply to Wenson Hsieh from comment #9)
&gt; &gt; As for what is currently `bool hasOffset`, that was added to deal with the
&gt; &gt; fact that the act of calling `CGPathMoveToPoint()` with (0, 0) actually
&gt; &gt; changes the bounds of the path:
&gt; &gt; 
&gt; &gt; Trying it out in a simple test app, I see:
&gt; &gt; 
&gt; &gt;     CGPathAddArc(path, NULL, 100, 100, 10, 0, 0.2, true);
&gt; &gt;     NSLog(@&quot;&gt; Bounds: %@&quot;, NSStringFromRect(CGPathGetBoundingBox(path)));
&gt; &gt; 
&gt; &gt;     &gt; Bounds: {{90, 90}, {20, 20}}
&gt; &gt; 
&gt; &gt; ...however:
&gt; &gt; 
&gt; &gt;     CGPathMoveToPoint(path, NULL, 0, 0);
&gt; &gt;     CGPathAddArc(path, NULL, 100, 100, 10, 0, 0.2, true);
&gt; &gt;     NSLog(@&quot;&gt; Bounds: %@&quot;, NSStringFromRect(CGPathGetBoundingBox(path)));
&gt; &gt; 
&gt; &gt;     &gt; Bounds: {{0, 0}, {110, 110}}
&gt; 
&gt; That seems like a mystery. Does stroking the path draw the line from 0,0 or
&gt; not in that first case? If not, is there code that relies on this?

In the first case, stroking the path does not draw the line from (0, 0). However, it does in the second case. I believe there is a canvas layout test that exercises this (which is what originally led me to discover this corner case).

&gt; 
&gt; As a future refinement, I suggest using Optional rather than a separate
&gt; boolean if the start point truly is optional.

I&apos;ll see if I can find a way to use Optional&lt;FloatPoint&gt; here. When I first wrote this, I used a separate `bool` to avoid pushing the size of this struct (currently, the separate bool flag is placed at the end of the struct, which keeps ArcData 32 bytes, with space for a couple more boolean flags).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696666</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-11 11:39:46 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #14)
&gt; I&apos;ll see if I can find a way to use Optional&lt;FloatPoint&gt; here. When I first
&gt; wrote this, I used a separate `bool` to avoid pushing the size of this
&gt; struct (currently, the separate bool flag is placed at the end of the
&gt; struct, which keeps ArcData 32 bytes, with space for a couple more boolean
&gt; flags).

OK. I don’t want to waste your time on this; you have other important things to do!

But I have two parting thoughts:

Not sure that saving space in ArcData is important since BezierCurveData is bigger.

However, if we did want to keep pushing, we could probably make this optional in a way that does not require the separate byte, using Markable. While I don’t like the name of the Markable class template, it’s designed for cases where we want most of the semantics of Optional without taking extra space.

The usage isn’t super-elegant:

struct FloatPointMarkableTraits {
    constexpr static bool isEmptyValue(const FloatPoint&amp; point) { return std::isnan(point.x()); }
    constexpr static FloatPoint emptyValue() { return { std::numeric_limits&lt;float&gt;::quiet_NaN(), 0 }; }
};
using OptionalFloatPoint = Markable&lt;FloatPoint, FloatPointMarkableTraits&gt;;

And since we still have the clockwise flag, it doesn’t actually save any space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696767</commentid>
    <comment_count>16</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-11 19:15:34 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #15)
&gt; (In reply to Wenson Hsieh from comment #14)
&gt; &gt; I&apos;ll see if I can find a way to use Optional&lt;FloatPoint&gt; here. When I first
&gt; &gt; wrote this, I used a separate `bool` to avoid pushing the size of this
&gt; &gt; struct (currently, the separate bool flag is placed at the end of the
&gt; &gt; struct, which keeps ArcData 32 bytes, with space for a couple more boolean
&gt; &gt; flags).
&gt; 
&gt; OK. I don’t want to waste your time on this; you have other important things
&gt; to do!
&gt; 
&gt; But I have two parting thoughts:
&gt; 
&gt; Not sure that saving space in ArcData is important since BezierCurveData is
&gt; bigger.
&gt; 
&gt; However, if we did want to keep pushing, we could probably make this
&gt; optional in a way that does not require the separate byte, using Markable.
&gt; While I don’t like the name of the Markable class template, it’s designed
&gt; for cases where we want most of the semantics of Optional without taking
&gt; extra space.
&gt; 
&gt; The usage isn’t super-elegant:
&gt; 
&gt; struct FloatPointMarkableTraits {
&gt;     constexpr static bool isEmptyValue(const FloatPoint&amp; point) { return
&gt; std::isnan(point.x()); }
&gt;     constexpr static FloatPoint emptyValue() { return {
&gt; std::numeric_limits&lt;float&gt;::quiet_NaN(), 0 }; }
&gt; };
&gt; using OptionalFloatPoint = Markable&lt;FloatPoint, FloatPointMarkableTraits&gt;;

Wow, this is a really neat trick!! Thanks for the tip!

&gt; 
&gt; And since we still have the clockwise flag, it doesn’t actually save any
&gt; space.

Hm... So the reason I was concerned about space is that the largest struct (BezierCurveData) is currently 32 bytes:

  +0 &lt; 32&gt; WebCore::BezierCurveData
  +0 &lt;  8&gt;     WebCore::FloatPoint startPoint
  +0 &lt;  4&gt;       float m_x
  +4 &lt;  4&gt;       float m_y
  +8 &lt;  8&gt;     WebCore::FloatPoint controlPoint1
  +8 &lt;  4&gt;       float m_x
 +12 &lt;  4&gt;       float m_y
 +16 &lt;  8&gt;     WebCore::FloatPoint controlPoint2
 +16 &lt;  4&gt;       float m_x
 +20 &lt;  4&gt;       float m_y
 +24 &lt;  8&gt;     WebCore::FloatPoint endPoint
 +24 &lt;  4&gt;       float m_x
 +28 &lt;  4&gt;       float m_y
Total byte size: 32
Total pad bytes: 0

...and I wanted to avoid bumping ArcData past this current 32-byte threshold. I tried making `start` an Optional&lt;FloatPoint&gt;, but kept ending up with 36 bytes due to the padding in the Optional :(

  +0 &lt; 36&gt; WebCore::ArcData
  +0 &lt;  8&gt;     WebCore::FloatPoint center
  +0 &lt;  4&gt;       float m_x
  +4 &lt;  4&gt;       float m_y
  +8 &lt;  4&gt;   float radius
 +12 &lt;  4&gt;   float startAngle
 +16 &lt;  4&gt;   float endAngle
 +20 &lt; 12&gt;     WTF::Optional&lt;WebCore::FloatPoint&gt; start
 +20 &lt; 12&gt;         WTF::OptionalBase&lt;WebCore::FloatPoint&gt; WTF::OptionalBase&lt;WebCore::FloatPoint&gt;
 +20 &lt;  1&gt;           bool init_
 +21 &lt;  3&gt;           &lt;PADDING: 3 bytes&gt;
 +24 &lt;  8&gt;           WTF::constexpr_storage_t&lt;WebCore::FloatPoint&gt; storage_
 +32 &lt;  1&gt;   bool clockwise
 +33 &lt;  1&gt;   bool endsAtStart
 +34 &lt;  2&gt;   &lt;PADDING: 2 bytes&gt;

I will investigate using `FloatPointMarkableTraits` to avoid this issue in a followup.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411023</attachid>
            <date>2020-10-10 16:28:34 -0700</date>
            <delta_ts>2020-10-10 21:07:15 -0700</delta_ts>
            <desc>WIP for EWS</desc>
            <filename>bug-217563-20201010162833.patch</filename>
            <type>text/plain</type>
            <size>4026</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4Mjk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmM2ODU0MzZkZjAyNzVl
Nzc1M2JhYTNkNmUwY2M0MzhlNTUwODM3ZC4uOWYzMDdlZjA3NjhjYWUxYzExNGRiNzUzMGZiZjMx
NTk0YThiN2RiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTEwLTEwICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtNb3Rpb25NYXJr
XSBDb21wdXRpbmcgdGhlIGZhc3QgYm91bmRpbmcgcmVjdCBvZiBhbiBhcmMgc2hvdWxkIG5vdCBt
YXRlcmlhbGl6ZSBhIENHUGF0aFJlZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE3NTYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRm9yIEVXUy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6ZmFzdEJvdW5kaW5nUmVjdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpmYXN0Qm91bmRpbmdSZWN0RnJvbUlubGluZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Ym91bmRpbmdSZWN0RnJvbUlubGluZURh
dGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6bG9jYWxCb3VuZHMgY29u
c3QpOgorCiAyMDIwLTEwLTA5ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gQWRkIGFkZGl0aW9uYWwgc3VwcG9ydCBmb3IgcGFp
bnRpbmcgdmlkZW8gZWxlbWVudHMgdG8gMkQgY29udGV4dHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0aC5jcHAKaW5kZXggYWFhNDZjNGE0ODMyYjk0MDMxZjkzNjM1YTQzZWMx
OTE5YjUwMmNlOC4uYWI1NzFlODU1NzA1YjFmMjQ4NDM4NGI0NmE3MmRhMTY1ZjhlNzNhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKQEAgLTM4Niw3ICszODYs
NyBAQCBGbG9hdFJlY3QgUGF0aDo6ZmFzdEJvdW5kaW5nUmVjdCgpIGNvbnN0CiAgICAgICAgIHJl
dHVybiB7IH07CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBpZiAoYXV0byBy
ZWN0ID0gYm91bmRpbmdSZWN0RnJvbUlubGluZURhdGEoKSkKKyAgICBpZiAoYXV0byByZWN0ID0g
ZmFzdEJvdW5kaW5nUmVjdEZyb21JbmxpbmVEYXRhKCkpCiAgICAgICAgIHJldHVybiAqcmVjdDsK
ICNlbmRpZgogCkBAIC0zOTUsMTQgKzM5NSwzMSBAQCBGbG9hdFJlY3QgUGF0aDo6ZmFzdEJvdW5k
aW5nUmVjdCgpIGNvbnN0CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAorT3B0aW9u
YWw8RmxvYXRSZWN0PiBQYXRoOjpmYXN0Qm91bmRpbmdSZWN0RnJvbUlubGluZURhdGEoKSBjb25z
dAoreworICAgIGlmIChoYXNJbmxpbmVEYXRhPEFyY0RhdGE+KCkpIHsKKyAgICAgICAgYXV0byYg
YXJjID0gaW5saW5lRGF0YTxBcmNEYXRhPigpOworICAgICAgICBhdXRvIGRpYW1ldGVyID0gMiAq
IGFyYy5yYWRpdXM7CisgICAgICAgIEZsb2F0UmVjdCBhcHByb3hpbWF0ZUJvdW5kcyB7IGFyYy5j
ZW50ZXIsIEZsb2F0U2l6ZShkaWFtZXRlciwgZGlhbWV0ZXIpIH07CisgICAgICAgIGFwcHJveGlt
YXRlQm91bmRzLm1vdmUoLWFyYy5yYWRpdXMsIC1hcmMucmFkaXVzKTsKKyAgICAgICAgaWYgKGFy
Yy5oYXNPZmZzZXQpCisgICAgICAgICAgICBhcHByb3hpbWF0ZUJvdW5kcy5leHRlbmQoYXJjLm9m
ZnNldCk7CisgICAgICAgIHJldHVybiBhcHByb3hpbWF0ZUJvdW5kczsKKyAgICB9CisKKyAgICBy
ZXR1cm4gYm91bmRpbmdSZWN0RnJvbUlubGluZURhdGEoKTsKK30KKwogT3B0aW9uYWw8RmxvYXRS
ZWN0PiBQYXRoOjpib3VuZGluZ1JlY3RGcm9tSW5saW5lRGF0YSgpIGNvbnN0CiB7CisgICAgLy8g
RklYTUU6IEFkZCBsb2dpYyB0byBjb21wdXRlIHRoZSBleGFjdCBib3VuZGluZyByZWN0IGZvciBh
biBhcmMgaW4gaW5saW5lIGRhdGEuCisKICAgICBpZiAoaGFzSW5saW5lRGF0YTxNb3ZlRGF0YT4o
KSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCB7IH07CiAKICAgICBpZiAoaGFzSW5saW5lRGF0
YTxMaW5lRGF0YT4oKSkgewogICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OwotICAgICAgICBhdXRv
JiBsaW5lID0gV1RGOjpnZXQ8TGluZURhdGE+KG1faW5saW5lRGF0YSk7CisgICAgICAgIGF1dG8m
IGxpbmUgPSBpbmxpbmVEYXRhPExpbmVEYXRhPigpOwogICAgICAgICByZXN1bHQuZml0VG9Qb2lu
dHMobGluZS5zdGFydCwgbGluZS5lbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAppbmRleCA1ZTQzN2QzZTZkNDMx
YWNlM2FkM2ZlM2MxZjNjYWI3N2QzNTExNWI2Li5jODQyOTY0ZWI5Y2Q4NWNjZmZlNmQzMTlkNmVk
MGE1Y2MzNWY5ZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCkBA
IC0yNDEsNiArMjQxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKICAgICBib29sIGhhc0FueUlubGluZURhdGEoKSBjb25zdDsKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGZhc3RCb3VuZGluZ1JlY3RGcm9tSW5saW5lRGF0YSgpIGNvbnN0OwogICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gYm91bmRpbmdSZWN0RnJvbUlubGluZURhdGEoKSBjb25zdDsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5kZXggMThkNzBj
ZmJkMjQwOTg1ODY4NDQ5ZmIzNTlhOWY4NWViZGZkMzYzNi4uYjkxN2I5Y2M2YjI0NmNiMDlhNjQ2
YzBjZGE0ZjMyZDBmYzEyOTRmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNw
cApAQCAtMTI5NCw3ICsxMjk0LDcgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VQYXRoOjps
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnMKICAgICAvLyBG
SVhNRTogTmVlZCB0byB0YWtlIHN0cm9rZSB0aGlja25lc3MgaW50byBhY2NvdW50IGNvcnJlY3Rs
eSwgdmlhIENHUGF0aEJ5U3Ryb2tpbmdQYXRoKCkuCiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
ID0gY29udGV4dC5zdHJva2VUaGlja25lc3MoKTsKIAotICAgIEZsb2F0UmVjdCBib3VuZHMgPSBt
X3BhdGguYm91bmRpbmdSZWN0KCk7CisgICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcGF0aC5mYXN0
Qm91bmRpbmdSZWN0KCk7CiAgICAgYm91bmRzLmV4cGFuZChzdHJva2VUaGlja25lc3MsIHN0cm9r
ZVRoaWNrbmVzcyk7CiAgICAgcmV0dXJuIGJvdW5kczsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411026</attachid>
            <date>2020-10-10 21:07:16 -0700</date>
            <delta_ts>2020-10-10 21:25:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217563-20201010210715.patch</filename>
            <type>text/plain</type>
            <size>5128</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4Mjk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmM2ODU0MzZkZjAyNzVl
Nzc1M2JhYTNkNmUwY2M0MzhlNTUwODM3ZC4uMmE0MTg1MzQ3MThkZDY4OTE3ZjBmZjZjYzE0ZjI1
NzhiYTJjM2I2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIwLTEwLTEwICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtNb3Rpb25NYXJr
XSBDb21wdXRpbmcgdGhlIGZhc3QgYm91bmRpbmcgcmVjdCBvZiBhbiBhcmMgc2hvdWxkIG5vdCBt
YXRlcmlhbGl6ZSBhIENHUGF0aFJlZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE3NTYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQXZvaWQgaGl0dGluZyB0aGUgc2xvdyBjYXNlIHdoZW4gYXNraW5nIGZv
ciB0aGUgZmFzdCBib3VuZGluZyByZWN0IG9mIGEgYFBhdGhgLCBpbiB0aGUgY2FzZSB3aGVyZSB0
aGUgcGF0aAorICAgICAgICBjb25zaXN0cyBvZiBhIHNpbmdsZSBjaXJjdWxhciBhcmMuIFRoaXMg
ZmFzdCBib3VuZGluZyByZWN0IGlzIGludGVuZGVkIHRvIGJlIGEgZmFzdCwgY29uc2VydmF0aXZl
IHdheSB0bworICAgICAgICBlc3RpbWF0ZSB0aGUgYm91bmRzIG9mIHRoZSBwYXRoLCBzdWNoIHRo
YXQgdGhlIGFjdHVhbCBib3VuZHMgb2YgdGhlIHBhdGggbXVzdCBsaWUgd2l0aGluIHRoZSBib3Vu
ZHMgb2YgdGhpcworICAgICAgICBmYXN0IHJlY3QuIEF0IHRoZSBjb3N0IG9mIGJlaW5nIGxlc3Mg
YWNjdXJhdGUsIHdlIGNhbiBtYWtlIHRoaXMgZmFzdCBjb21wdXRhdGlvbiB2ZXJ5IGNoZWFwZXIg
aW4gdGhlIGNhc2Ugb2YgYQorICAgICAgICBjaXJjdWxhciBhcmMsIGJ5IHNpbXBseSByZXR1cm5p
bmcgdGhlIGJvdW5kaW5nIHJlY3Qgb2YgdGhlIGNpcmNsZSBjb250YWluaW5nIHRoZSBhcmMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmZhc3RCb3VuZGluZ1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
ZmFzdEJvdW5kaW5nUmVjdEZyb21JbmxpbmVEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmJvdW5kaW5nUmVjdEZyb21JbmxpbmVEYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKworICAgICAgICBBbHNvIHVzZSB0
aGUgZmFzdCBib3VuZGluZyByZWN0IHdoZW4gZXN0aW1hdGluZyBgbG9jYWxCb3VuZHNgIG9mIHRo
ZSBgU3Ryb2tlUGF0aGAgaXRlbTsgdGhlc2UgbG9jYWwgYm91bmRzIGFyZQorICAgICAgICBvbmx5
IHVzZWQgaW4gYW4gb3B0aW1pemF0aW9uIHRoYXQgc2tpcHMgZGlzcGxheSBsaXN0IGl0ZW1zIGR1
cmluZyBwbGF5YmFjaywgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB0aGUgaXRlbSwgc28KKyAgICAg
ICAgaXQncyBzYWZlIHRvIHVzZSBleHRlbnRzIHRoYXQgYXJlIHBvdGVudGlhbGx5IGluZmxhdGVk
LiBVc2luZyB0aGUgZmFzdCBib3VuZGluZyByZWN0IGFsc28gaGVscHMgaW4gdGhlIGNhc2Ugb2YK
KyAgICAgICAgdGhlIG1vcmUgY29tcGxleCBwYXRocyBlbmNvdW50ZXJlZCBpbiB0aGUgQ2FudmFz
IFBhdGhzIHN1YnRlc3Qgb2YgTW90aW9uTWFyaywgd2hlcmUgZWFjaCBQYXRoIGNvbnRhaW5zIG11
bHRpcGxlCisgICAgICAgIGNvbXBvbmVudHMgYW5kIGNhbm5vdCBiZSBleHByZXNzZWQgc29sZWx5
IHdpdGggaW5saW5lIHBhdGggZGF0YS4KKwogMjAyMC0xMC0wOSAgV2Vuc29uIEhzaWVoICA8d2Vu
c29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVIFByb2Nlc3NdIEFkZCBhZGRpdGlv
bmFsIHN1cHBvcnQgZm9yIHBhaW50aW5nIHZpZGVvIGVsZW1lbnRzIHRvIDJEIGNvbnRleHRzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCmluZGV4IGFhYTQ2YzRhNDgz
MmI5NDAzMWY5MzYzNWE0M2VjMTkxOWI1MDJjZTguLmFiNTcxZTg1NTcwNWIxZjI0ODQzODRiNDZh
NzJkYTE2NWY4ZTczYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
Y3BwCkBAIC0zODYsNyArMzg2LDcgQEAgRmxvYXRSZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3Qo
KSBjb25zdAogICAgICAgICByZXR1cm4geyB9OwogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCi0gICAgaWYgKGF1dG8gcmVjdCA9IGJvdW5kaW5nUmVjdEZyb21JbmxpbmVEYXRhKCkpCisg
ICAgaWYgKGF1dG8gcmVjdCA9IGZhc3RCb3VuZGluZ1JlY3RGcm9tSW5saW5lRGF0YSgpKQogICAg
ICAgICByZXR1cm4gKnJlY3Q7CiAjZW5kaWYKIApAQCAtMzk1LDE0ICszOTUsMzEgQEAgRmxvYXRS
ZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3QoKSBjb25zdAogCiAjaWYgRU5BQkxFKElOTElORV9Q
QVRIX0RBVEEpCiAKK09wdGlvbmFsPEZsb2F0UmVjdD4gUGF0aDo6ZmFzdEJvdW5kaW5nUmVjdEZy
b21JbmxpbmVEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoaGFzSW5saW5lRGF0YTxBcmNEYXRhPigp
KSB7CisgICAgICAgIGF1dG8mIGFyYyA9IGlubGluZURhdGE8QXJjRGF0YT4oKTsKKyAgICAgICAg
YXV0byBkaWFtZXRlciA9IDIgKiBhcmMucmFkaXVzOworICAgICAgICBGbG9hdFJlY3QgYXBwcm94
aW1hdGVCb3VuZHMgeyBhcmMuY2VudGVyLCBGbG9hdFNpemUoZGlhbWV0ZXIsIGRpYW1ldGVyKSB9
OworICAgICAgICBhcHByb3hpbWF0ZUJvdW5kcy5tb3ZlKC1hcmMucmFkaXVzLCAtYXJjLnJhZGl1
cyk7CisgICAgICAgIGlmIChhcmMuaGFzT2Zmc2V0KQorICAgICAgICAgICAgYXBwcm94aW1hdGVC
b3VuZHMuZXh0ZW5kKGFyYy5vZmZzZXQpOworICAgICAgICByZXR1cm4gYXBwcm94aW1hdGVCb3Vu
ZHM7CisgICAgfQorCisgICAgcmV0dXJuIGJvdW5kaW5nUmVjdEZyb21JbmxpbmVEYXRhKCk7Cit9
CisKIE9wdGlvbmFsPEZsb2F0UmVjdD4gUGF0aDo6Ym91bmRpbmdSZWN0RnJvbUlubGluZURhdGEo
KSBjb25zdAogeworICAgIC8vIEZJWE1FOiBBZGQgbG9naWMgdG8gY29tcHV0ZSB0aGUgZXhhY3Qg
Ym91bmRpbmcgcmVjdCBmb3IgYW4gYXJjIGluIGlubGluZSBkYXRhLgorCiAgICAgaWYgKGhhc0lu
bGluZURhdGE8TW92ZURhdGE+KCkpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QgeyB9OwogCiAg
ICAgaWYgKGhhc0lubGluZURhdGE8TGluZURhdGE+KCkpIHsKICAgICAgICAgRmxvYXRSZWN0IHJl
c3VsdDsKLSAgICAgICAgYXV0byYgbGluZSA9IFdURjo6Z2V0PExpbmVEYXRhPihtX2lubGluZURh
dGEpOworICAgICAgICBhdXRvJiBsaW5lID0gaW5saW5lRGF0YTxMaW5lRGF0YT4oKTsKICAgICAg
ICAgcmVzdWx0LmZpdFRvUG9pbnRzKGxpbmUuc3RhcnQsIGxpbmUuZW5kKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgK
aW5kZXggNWU0MzdkM2U2ZDQzMWFjZTNhZDNmZTNjMWYzY2FiNzdkMzUxMTViNi4uYzg0Mjk2NGVi
OWNkODVjY2ZmZTZkMzE5ZDZlZDBhNWNjMzVmOWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguaApAQCAtMjQxLDYgKzI0MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgYm9vbCBoYXNBbnlJbmxpbmVEYXRhKCkg
Y29uc3Q7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBmYXN0Qm91bmRpbmdSZWN0RnJvbUlubGlu
ZURhdGEoKSBjb25zdDsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGJvdW5kaW5nUmVjdEZyb21J
bmxpbmVEYXRhKCkgY29uc3Q7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuY3BwCmluZGV4IDE4ZDcwY2ZiZDI0MDk4NTg2ODQ0OWZiMzU5YTlmODVlYmRmZDM2MzYuLmI5
MTdiOWNjNmIyNDZjYjA5YTY0NmMwY2RhNGYzMmQwZmMxMjk0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTEyOTQsNyArMTI5NCw3IEBAIE9wdGlvbmFsPEZsb2F0
UmVjdD4gU3Ryb2tlUGF0aDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gdGFrZSBzdHJva2UgdGhpY2tuZXNzIGlu
dG8gYWNjb3VudCBjb3JyZWN0bHksIHZpYSBDR1BhdGhCeVN0cm9raW5nUGF0aCgpLgogICAgIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CiAKLSAgICBG
bG9hdFJlY3QgYm91bmRzID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOworICAgIEZsb2F0UmVjdCBi
b3VuZHMgPSBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgIGJvdW5kcy5leHBhbmQoc3Ry
b2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MpOwogICAgIHJldHVybiBib3VuZHM7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411028</attachid>
            <date>2020-10-10 21:25:18 -0700</date>
            <delta_ts>2020-10-10 21:48:51 -0700</delta_ts>
            <desc>Fix ChangeLog typo</desc>
            <filename>bug-217563-20201010212517.patch</filename>
            <type>text/plain</type>
            <size>5122</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4Mjk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmM2ODU0MzZkZjAyNzVl
Nzc1M2JhYTNkNmUwY2M0MzhlNTUwODM3ZC4uMjM0ZDY5Njc3NjMyOTBkYmVhOTUwMzk3ZWEyNTdj
OTk5MzJjMTZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIwLTEwLTEwICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtNb3Rpb25NYXJr
XSBDb21wdXRpbmcgdGhlIGZhc3QgYm91bmRpbmcgcmVjdCBvZiBhbiBhcmMgc2hvdWxkIG5vdCBt
YXRlcmlhbGl6ZSBhIENHUGF0aFJlZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE3NTYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQXZvaWQgaGl0dGluZyB0aGUgc2xvdyBjYXNlIHdoZW4gYXNraW5nIGZv
ciB0aGUgZmFzdCBib3VuZGluZyByZWN0IG9mIGEgYFBhdGhgLCBpbiB0aGUgY2FzZSB3aGVyZSB0
aGUgcGF0aAorICAgICAgICBjb25zaXN0cyBvZiBhIHNpbmdsZSBjaXJjdWxhciBhcmMuIFRoaXMg
ZmFzdCBib3VuZGluZyByZWN0IGlzIGludGVuZGVkIHRvIGJlIGEgY29uc2VydmF0aXZlIHdheSB0
byBlc3RpbWF0ZSB0aGUKKyAgICAgICAgYm91bmRzIG9mIHRoZSBwYXRoLCBzdWNoIHRoYXQgdGhl
IGFjdHVhbCBib3VuZHMgb2YgdGhlIHBhdGggbXVzdCBsaWUgd2l0aGluIHRoZSBib3VuZHMgb2Yg
dGhpcyBmYXN0IHJlY3QuIEF0IHRoZQorICAgICAgICBjb3N0IG9mIGJlaW5nIGxlc3MgYWNjdXJh
dGUsIHdlIGNhbiBtYWtlIHRoaXMgZmFzdCBjb21wdXRhdGlvbiBtdWNoIGNoZWFwZXIgaW4gdGhl
IGNhc2Ugb2YgYSBjaXJjdWxhciBhcmMgYnkKKyAgICAgICAgc2ltcGx5IHJldHVybmluZyB0aGUg
Ym91bmRpbmcgcmVjdCBvZiB0aGUgY2lyY2xlIGNvbnRhaW5pbmcgdGhlIGFyYy4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
ZmFzdEJvdW5kaW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpmYXN0Qm91
bmRpbmdSZWN0RnJvbUlubGluZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
Ym91bmRpbmdSZWN0RnJvbUlubGluZURhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdGguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ry
b2tlUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorCisgICAgICAgIEFsc28sIHVzZSB0aGUgZmFz
dCBib3VuZGluZyByZWN0IHdoZW4gZXN0aW1hdGluZyBgbG9jYWxCb3VuZHNgIG9mIHRoZSBgU3Ry
b2tlUGF0aGAgaXRlbTsgdGhlc2UgbG9jYWwgYm91bmRzIGFyZQorICAgICAgICBvbmx5IHVzZWQg
aW4gYW4gb3B0aW1pemF0aW9uIHRoYXQgc2tpcHMgZGlzcGxheSBsaXN0IGl0ZW1zIGR1cmluZyBw
bGF5YmFjaywgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB0aGUgaXRlbSwgc28KKyAgICAgICAgaXQn
cyBzYWZlIHRvIHVzZSBleHRlbnRzIHRoYXQgYXJlIHBvdGVudGlhbGx5IGluZmxhdGVkLiBVc2lu
ZyB0aGUgZmFzdCBib3VuZGluZyByZWN0IGFsc28gaGVscHMgaW4gdGhlIGNhc2Ugb2YKKyAgICAg
ICAgdGhlIG1vcmUgY29tcGxleCBwYXRocyBlbmNvdW50ZXJlZCBpbiB0aGUgQ2FudmFzIFBhdGhz
IHN1YnRlc3Qgb2YgTW90aW9uTWFyaywgd2hlcmUgZWFjaCBQYXRoIGNvbnRhaW5zIG11bHRpcGxl
CisgICAgICAgIGNvbXBvbmVudHMgYW5kIGNhbm5vdCBiZSBleHByZXNzZWQgc29sZWx5IHdpdGgg
aW5saW5lIHBhdGggZGF0YS4KKwogMjAyMC0xMC0wOSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hz
aWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVIFByb2Nlc3NdIEFkZCBhZGRpdGlvbmFsIHN1
cHBvcnQgZm9yIHBhaW50aW5nIHZpZGVvIGVsZW1lbnRzIHRvIDJEIGNvbnRleHRzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCmluZGV4IGFhYTQ2YzRhNDgzMmI5NDAz
MWY5MzYzNWE0M2VjMTkxOWI1MDJjZTguLmFiNTcxZTg1NTcwNWIxZjI0ODQzODRiNDZhNzJkYTE2
NWY4ZTczYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCkBA
IC0zODYsNyArMzg2LDcgQEAgRmxvYXRSZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3QoKSBjb25z
dAogICAgICAgICByZXR1cm4geyB9OwogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0g
ICAgaWYgKGF1dG8gcmVjdCA9IGJvdW5kaW5nUmVjdEZyb21JbmxpbmVEYXRhKCkpCisgICAgaWYg
KGF1dG8gcmVjdCA9IGZhc3RCb3VuZGluZ1JlY3RGcm9tSW5saW5lRGF0YSgpKQogICAgICAgICBy
ZXR1cm4gKnJlY3Q7CiAjZW5kaWYKIApAQCAtMzk1LDE0ICszOTUsMzEgQEAgRmxvYXRSZWN0IFBh
dGg6OmZhc3RCb3VuZGluZ1JlY3QoKSBjb25zdAogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAKK09wdGlvbmFsPEZsb2F0UmVjdD4gUGF0aDo6ZmFzdEJvdW5kaW5nUmVjdEZyb21Jbmxp
bmVEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoaGFzSW5saW5lRGF0YTxBcmNEYXRhPigpKSB7Cisg
ICAgICAgIGF1dG8mIGFyYyA9IGlubGluZURhdGE8QXJjRGF0YT4oKTsKKyAgICAgICAgYXV0byBk
aWFtZXRlciA9IDIgKiBhcmMucmFkaXVzOworICAgICAgICBGbG9hdFJlY3QgYXBwcm94aW1hdGVC
b3VuZHMgeyBhcmMuY2VudGVyLCBGbG9hdFNpemUoZGlhbWV0ZXIsIGRpYW1ldGVyKSB9OworICAg
ICAgICBhcHByb3hpbWF0ZUJvdW5kcy5tb3ZlKC1hcmMucmFkaXVzLCAtYXJjLnJhZGl1cyk7Cisg
ICAgICAgIGlmIChhcmMuaGFzT2Zmc2V0KQorICAgICAgICAgICAgYXBwcm94aW1hdGVCb3VuZHMu
ZXh0ZW5kKGFyYy5vZmZzZXQpOworICAgICAgICByZXR1cm4gYXBwcm94aW1hdGVCb3VuZHM7Cisg
ICAgfQorCisgICAgcmV0dXJuIGJvdW5kaW5nUmVjdEZyb21JbmxpbmVEYXRhKCk7Cit9CisKIE9w
dGlvbmFsPEZsb2F0UmVjdD4gUGF0aDo6Ym91bmRpbmdSZWN0RnJvbUlubGluZURhdGEoKSBjb25z
dAogeworICAgIC8vIEZJWE1FOiBBZGQgbG9naWMgdG8gY29tcHV0ZSB0aGUgZXhhY3QgYm91bmRp
bmcgcmVjdCBmb3IgYW4gYXJjIGluIGlubGluZSBkYXRhLgorCiAgICAgaWYgKGhhc0lubGluZURh
dGE8TW92ZURhdGE+KCkpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QgeyB9OwogCiAgICAgaWYg
KGhhc0lubGluZURhdGE8TGluZURhdGE+KCkpIHsKICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsK
LSAgICAgICAgYXV0byYgbGluZSA9IFdURjo6Z2V0PExpbmVEYXRhPihtX2lubGluZURhdGEpOwor
ICAgICAgICBhdXRvJiBsaW5lID0gaW5saW5lRGF0YTxMaW5lRGF0YT4oKTsKICAgICAgICAgcmVz
dWx0LmZpdFRvUG9pbnRzKGxpbmUuc3RhcnQsIGxpbmUuZW5kKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKaW5kZXgg
NWU0MzdkM2U2ZDQzMWFjZTNhZDNmZTNjMWYzY2FiNzdkMzUxMTViNi4uYzg0Mjk2NGViOWNkODVj
Y2ZmZTZkMzE5ZDZlZDBhNWNjMzVmOWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGguaApAQCAtMjQxLDYgKzI0MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgYm9vbCBoYXNBbnlJbmxpbmVEYXRhKCkgY29uc3Q7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBmYXN0Qm91bmRpbmdSZWN0RnJvbUlubGluZURhdGEo
KSBjb25zdDsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGJvdW5kaW5nUmVjdEZyb21JbmxpbmVE
YXRhKCkgY29uc3Q7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3Bw
CmluZGV4IDE4ZDcwY2ZiZDI0MDk4NTg2ODQ0OWZiMzU5YTlmODVlYmRmZDM2MzYuLmI5MTdiOWNj
NmIyNDZjYjA5YTY0NmMwY2RhNGYzMmQwZmMxMjk0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKQEAgLTEyOTQsNyArMTI5NCw3IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4g
U3Ryb2tlUGF0aDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gdGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNj
b3VudCBjb3JyZWN0bHksIHZpYSBDR1BhdGhCeVN0cm9raW5nUGF0aCgpLgogICAgIGZsb2F0IHN0
cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CiAKLSAgICBGbG9hdFJl
Y3QgYm91bmRzID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOworICAgIEZsb2F0UmVjdCBib3VuZHMg
PSBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhp
Y2tuZXNzLCBzdHJva2VUaGlja25lc3MpOwogICAgIHJldHVybiBib3VuZHM7CiB9Cg==
</data>
<flag name="review"
          id="427145"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411054</attachid>
            <date>2020-10-11 08:51:14 -0700</date>
            <delta_ts>2020-10-11 09:33:40 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-217563-20201011085113.patch</filename>
            <type>text/plain</type>
            <size>8959</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4Mjk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmM2ODU0MzZkZjAyNzVl
Nzc1M2JhYTNkNmUwY2M0MzhlNTUwODM3ZC4uOWRhOTlhOGU0MzQzZDk5Y2QxNGM4ZDEyYmRjYzUy
MDg5NWFkODM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIwLTEwLTEwICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtNb3Rpb25NYXJr
XSBDb21wdXRpbmcgdGhlIGZhc3QgYm91bmRpbmcgcmVjdCBvZiBhbiBhcmMgc2hvdWxkIG5vdCBt
YXRlcmlhbGl6ZSBhIENHUGF0aFJlZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE3NTYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgQXZvaWQgaGl0dGluZyB0aGUgc2xvdyBjYXNlIHdoZW4gYXNraW5nIGZvciB0
aGUgZmFzdCBib3VuZGluZyByZWN0IG9mIGEgYFBhdGhgLCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUg
cGF0aAorICAgICAgICBjb25zaXN0cyBvZiBhIHNpbmdsZSBjaXJjdWxhciBhcmMuIFRoaXMgZmFz
dCBib3VuZGluZyByZWN0IGlzIGludGVuZGVkIHRvIGJlIGEgY29uc2VydmF0aXZlIHdheSB0byBl
c3RpbWF0ZSB0aGUKKyAgICAgICAgYm91bmRzIG9mIHRoZSBwYXRoLCBzdWNoIHRoYXQgdGhlIGFj
dHVhbCBib3VuZHMgb2YgdGhlIHBhdGggbXVzdCBsaWUgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhp
cyBmYXN0IHJlY3QuIEF0IHRoZQorICAgICAgICBjb3N0IG9mIGJlaW5nIGxlc3MgYWNjdXJhdGUs
IHdlIGNhbiBtYWtlIHRoaXMgZmFzdCBjb21wdXRhdGlvbiBtdWNoIGNoZWFwZXIgaW4gdGhlIGNh
c2Ugb2YgYSBjaXJjdWxhciBhcmMgYnkKKyAgICAgICAgc2ltcGx5IHJldHVybmluZyB0aGUgYm91
bmRpbmcgcmVjdCBvZiB0aGUgY2lyY2xlIGNvbnRhaW5pbmcgdGhlIGFyYy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0lubGluZVBhdGhEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpB
cmNEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXJjRGF0YTo6ZGVjb2Rl
KToKKworICAgICAgICBBZGRpdGlvbmFsbHkgcmVuYW1lIHdoYXQgaXMgY3VycmVudGx5IGBBcmNE
YXRhYCdzIGBvZmZzZXRgIG1lbWJlciB0byBgc3RhcnRgIGluc3RlYWQsIGFuZCBgaGFzT2Zmc2V0
YCB0bworICAgICAgICBgaGFzU3RhcnRgIGZvciBjbGFyaXR5LiBUaGlzIHBvaW50IG9wdGlvbmFs
bHkgcHJvdmlkZXMgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIGEgbGluZSBzZWdtZW50IHRoYXQgaXMg
Y29ubmVjdGVkIHRvCisgICAgICAgIHRoZSBjaXJjdWxhciBhcmMgZGVmaW5lZCBieSB0aGUgY2Vu
dGVyIHBvaW50LCByYWRpdXMsIGFuZCBzdGFydCBhbmQgZW5kIGFuZ2xlcy4gTm90ZSB0aGF0IHRo
aXMgc3RhcnRpbmcgcG9pbnQKKyAgICAgICAgbmVlZHMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGZh
c3QgYm91bmRpbmcgcmVjdCBjb21wdXRhdGlvbiBmb3IgdGhpcyByZWFzb24gKHNlZSBhYm92ZSku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OmFkZEFyYyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpmYXN0Qm91bmRpbmdS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmZhc3RCb3VuZGluZ1JlY3RGcm9t
SW5saW5lRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpib3VuZGluZ1JlY3RG
cm9tSW5saW5lRGF0YSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpjcmVhdGVDR1BhdGggY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisKKyAgICAg
ICAgQWxzbywgdXNlIHRoZSBmYXN0IGJvdW5kaW5nIHJlY3Qgd2hlbiBlc3RpbWF0aW5nIGBsb2Nh
bEJvdW5kc2Agb2YgdGhlIGBTdHJva2VQYXRoYCBpdGVtOyB0aGVzZSBsb2NhbCBib3VuZHMgYXJl
CisgICAgICAgIG9ubHkgdXNlZCBpbiBhbiBvcHRpbWl6YXRpb24gdGhhdCBza2lwcyBkaXNwbGF5
IGxpc3QgaXRlbXMgZHVyaW5nIHBsYXliYWNrLCBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHRoZSBp
dGVtLCBzbworICAgICAgICBpdCdzIHNhZmUgdG8gdXNlIGV4dGVudHMgdGhhdCBhcmUgcG90ZW50
aWFsbHkgaW5mbGF0ZWQuIFVzaW5nIHRoZSBmYXN0IGJvdW5kaW5nIHJlY3QgYWxzbyBoZWxwcyBp
biB0aGUgY2FzZSBvZgorICAgICAgICB0aGUgbW9yZSBjb21wbGV4IHBhdGhzIGVuY291bnRlcmVk
IGluIHRoZSBDYW52YXMgUGF0aHMgc3VidGVzdCBvZiBNb3Rpb25NYXJrLCB3aGVyZSBlYWNoIFBh
dGggY29udGFpbnMgbXVsdGlwbGUKKyAgICAgICAgY29tcG9uZW50cyBhbmQgY2Fubm90IGJlIGV4
cHJlc3NlZCBzb2xlbHkgd2l0aCBpbmxpbmUgcGF0aCBkYXRhLgorCiAyMDIwLTEwLTA5ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vz
c10gQWRkIGFkZGl0aW9uYWwgc3VwcG9ydCBmb3IgcGFpbnRpbmcgdmlkZW8gZWxlbWVudHMgdG8g
MkQgY29udGV4dHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0lubGluZVBhdGhEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Jbmxp
bmVQYXRoRGF0YS5oCmluZGV4IDhiZmFkMDkzYjBkN2U2ZWMyMzUwYmQwNTE4MTE1MjNiMzhkZmZj
MmUuLmRlNGJkYmZlNDAxZjFjY2VlMzIzOGU3YTM0MTU3ZmFlNmUwNDkwNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lubGluZVBhdGhEYXRhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW5saW5lUGF0aERhdGEuaApAQCAtNDIs
MTMgKzQyLDEzIEBAIHN0cnVjdCBMaW5lRGF0YSB7CiB9OwogCiBzdHJ1Y3QgQXJjRGF0YSB7Ci0g
ICAgRmxvYXRQb2ludCBvZmZzZXQ7CisgICAgRmxvYXRQb2ludCBzdGFydDsKICAgICBGbG9hdFBv
aW50IGNlbnRlcjsKICAgICBmbG9hdCByYWRpdXMgeyAwIH07CiAgICAgZmxvYXQgc3RhcnRBbmds
ZSB7IDAgfTsKICAgICBmbG9hdCBlbmRBbmdsZSB7IDAgfTsKICAgICBib29sIGNsb2Nrd2lzZSB7
IGZhbHNlIH07Ci0gICAgYm9vbCBoYXNPZmZzZXQgeyBmYWxzZSB9OworICAgIGJvb2wgaGFzU3Rh
cnQgeyBmYWxzZSB9OwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxBcmNEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMTEzLDE5ICsxMTMsMTkgQEAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gT3B0aW9uYWw8TGluZURhdGE+IExpbmVEYXRhOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBBcmNEYXRh
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyIDw8IG9mZnNl
dDsKKyAgICBlbmNvZGVyIDw8IHN0YXJ0OwogICAgIGVuY29kZXIgPDwgY2VudGVyOwogICAgIGVu
Y29kZXIgPDwgcmFkaXVzOwogICAgIGVuY29kZXIgPDwgc3RhcnRBbmdsZTsKICAgICBlbmNvZGVy
IDw8IGVuZEFuZ2xlOwogICAgIGVuY29kZXIgPDwgY2xvY2t3aXNlOwotICAgIGVuY29kZXIgPDwg
aGFzT2Zmc2V0OworICAgIGVuY29kZXIgPDwgaGFzU3RhcnQ7CiB9CiAKIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IE9wdGlvbmFsPEFyY0RhdGE+IEFyY0RhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogewogICAgIEFyY0RhdGEgZGF0YTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEu
b2Zmc2V0KSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEuc3RhcnQpKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLmNlbnRl
cikpCkBAIC0xNDMsNyArMTQzLDcgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gT3B0aW9uYWw8
QXJjRGF0YT4gQXJjRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShkYXRhLmNsb2Nrd2lzZSkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEuaGFzT2Zmc2V0KSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGRhdGEuaGFzU3RhcnQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgcmV0dXJuIGRhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguY3BwCmluZGV4IGFhYTQ2YzRhNDgzMmI5NDAzMWY5MzYzNWE0M2VjMTkxOWI1MDJjZTguLjRl
ZDNkODljYWM3MGM3YmFkYjQzMjU3NGI3MWJkYjIxYTJiMjczMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCkBAIC0yODksOCArMjg5LDggQEAgdm9pZCBQYXRo
OjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3Rh
cnRBbmdsZSwgZmxvYXQKICAgICBpZiAoaXNOdWxsKCkgfHwgaGFzSW5saW5lRGF0YTxNb3ZlRGF0
YT4oKSkgewogICAgICAgICBBcmNEYXRhIGFyYzsKICAgICAgICAgaWYgKGhhc0FueUlubGluZURh
dGEoKSkgewotICAgICAgICAgICAgYXJjLmhhc09mZnNldCA9IHRydWU7Ci0gICAgICAgICAgICBh
cmMub2Zmc2V0ID0gV1RGOjpnZXQ8TW92ZURhdGE+KG1faW5saW5lRGF0YSkubG9jYXRpb247Cisg
ICAgICAgICAgICBhcmMuaGFzU3RhcnQgPSB0cnVlOworICAgICAgICAgICAgYXJjLnN0YXJ0ID0g
V1RGOjpnZXQ8TW92ZURhdGE+KG1faW5saW5lRGF0YSkubG9jYXRpb247CiAgICAgICAgIH0KICAg
ICAgICAgYXJjLmNlbnRlciA9IHBvaW50OwogICAgICAgICBhcmMucmFkaXVzID0gcmFkaXVzOwpA
QCAtMzg2LDcgKzM4Niw3IEBAIEZsb2F0UmVjdCBQYXRoOjpmYXN0Qm91bmRpbmdSZWN0KCkgY29u
c3QKICAgICAgICAgcmV0dXJuIHsgfTsKIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQot
ICAgIGlmIChhdXRvIHJlY3QgPSBib3VuZGluZ1JlY3RGcm9tSW5saW5lRGF0YSgpKQorICAgIGlm
IChhdXRvIHJlY3QgPSBmYXN0Qm91bmRpbmdSZWN0RnJvbUlubGluZURhdGEoKSkKICAgICAgICAg
cmV0dXJuICpyZWN0OwogI2VuZGlmCiAKQEAgLTM5NSwxNCArMzk1LDMxIEBAIEZsb2F0UmVjdCBQ
YXRoOjpmYXN0Qm91bmRpbmdSZWN0KCkgY29uc3QKIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQogCitPcHRpb25hbDxGbG9hdFJlY3Q+IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3RGcm9tSW5s
aW5lRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKGhhc0lubGluZURhdGE8QXJjRGF0YT4oKSkgewor
ICAgICAgICBhdXRvJiBhcmMgPSBpbmxpbmVEYXRhPEFyY0RhdGE+KCk7CisgICAgICAgIGF1dG8g
ZGlhbWV0ZXIgPSAyICogYXJjLnJhZGl1czsKKyAgICAgICAgRmxvYXRSZWN0IGFwcHJveGltYXRl
Qm91bmRzIHsgYXJjLmNlbnRlciwgRmxvYXRTaXplKGRpYW1ldGVyLCBkaWFtZXRlcikgfTsKKyAg
ICAgICAgYXBwcm94aW1hdGVCb3VuZHMubW92ZSgtYXJjLnJhZGl1cywgLWFyYy5yYWRpdXMpOwor
ICAgICAgICBpZiAoYXJjLmhhc1N0YXJ0KQorICAgICAgICAgICAgYXBwcm94aW1hdGVCb3VuZHMu
ZXh0ZW5kKGFyYy5zdGFydCk7CisgICAgICAgIHJldHVybiBhcHByb3hpbWF0ZUJvdW5kczsKKyAg
ICB9CisKKyAgICByZXR1cm4gYm91bmRpbmdSZWN0RnJvbUlubGluZURhdGEoKTsKK30KKwogT3B0
aW9uYWw8RmxvYXRSZWN0PiBQYXRoOjpib3VuZGluZ1JlY3RGcm9tSW5saW5lRGF0YSgpIGNvbnN0
CiB7CisgICAgLy8gRklYTUU6IEFkZCBsb2dpYyB0byBjb21wdXRlIHRoZSBleGFjdCBib3VuZGlu
ZyByZWN0IGZvciBhbiBhcmMgaW4gaW5saW5lIGRhdGEuCisKICAgICBpZiAoaGFzSW5saW5lRGF0
YTxNb3ZlRGF0YT4oKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCB7IH07CiAKICAgICBpZiAo
aGFzSW5saW5lRGF0YTxMaW5lRGF0YT4oKSkgewogICAgICAgICBGbG9hdFJlY3QgcmVzdWx0Owot
ICAgICAgICBhdXRvJiBsaW5lID0gV1RGOjpnZXQ8TGluZURhdGE+KG1faW5saW5lRGF0YSk7Cisg
ICAgICAgIGF1dG8mIGxpbmUgPSBpbmxpbmVEYXRhPExpbmVEYXRhPigpOwogICAgICAgICByZXN1
bHQuZml0VG9Qb2ludHMobGluZS5zdGFydCwgbGluZS5lbmQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BhdGguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAppbmRleCA1
ZTQzN2QzZTZkNDMxYWNlM2FkM2ZlM2MxZjNjYWI3N2QzNTExNWI2Li5jODQyOTY0ZWI5Y2Q4NWNj
ZmZlNmQzMTlkNmVkMGE1Y2MzNWY5ZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5oCkBAIC0yNDEsNiArMjQxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICNpZiBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBib29sIGhhc0FueUlubGluZURhdGEoKSBjb25zdDsK
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGZhc3RCb3VuZGluZ1JlY3RGcm9tSW5saW5lRGF0YSgp
IGNvbnN0OwogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gYm91bmRpbmdSZWN0RnJvbUlubGluZURh
dGEoKSBjb25zdDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0aENHLmNwcAppbmRleCBkZGIyYjk4MjhiNTg0MGVmMjQxMjAyMmRkNzRhN2MyNGI2
ZWZhNzExLi42NmU4ZmY5OWZhMmFkMGY2Yjk4MjA2YTdmNzA4YzA5NWFmYmRkYzM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTk4LDgg
Kzk4LDggQEAgdm9pZCBQYXRoOjpjcmVhdGVDR1BhdGgoKSBjb25zdAogICAgICAgICAgICAgQ0dQ
YXRoQWRkTGluZVRvUG9pbnQobV9wYXRoLmdldCgpLCBudWxscHRyLCBsaW5lLmVuZC54KCksIGxp
bmUuZW5kLnkoKSk7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXShjb25zdCBBcmNEYXRhJiBhcmMp
IHsKLSAgICAgICAgICAgIGlmIChhcmMuaGFzT2Zmc2V0KQotICAgICAgICAgICAgICAgIENHUGF0
aE1vdmVUb1BvaW50KG1fcGF0aC5nZXQoKSwgbnVsbHB0ciwgYXJjLm9mZnNldC54KCksIGFyYy5v
ZmZzZXQueSgpKTsKKyAgICAgICAgICAgIGlmIChhcmMuaGFzU3RhcnQpCisgICAgICAgICAgICAg
ICAgQ0dQYXRoTW92ZVRvUG9pbnQobV9wYXRoLmdldCgpLCBudWxscHRyLCBhcmMuc3RhcnQueCgp
LCBhcmMuc3RhcnQueSgpKTsKICAgICAgICAgICAgIENHUGF0aEFkZEFyYyhtX3BhdGguZ2V0KCks
IG51bGxwdHIsIGFyYy5jZW50ZXIueCgpLCBhcmMuY2VudGVyLnkoKSwgYXJjLnJhZGl1cywgYXJj
LnN0YXJ0QW5nbGUsIGFyYy5lbmRBbmdsZSwgYXJjLmNsb2Nrd2lzZSk7CiAgICAgICAgIH0sCiAg
ICAgICAgIFsmXShjb25zdCBRdWFkQ3VydmVEYXRhJiBjdXJ2ZSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuY3BwCmluZGV4IDE4ZDcwY2ZiZDI0MDk4NTg2ODQ0OWZiMzU5YTlmODVl
YmRmZDM2MzYuLmI5MTdiOWNjNmIyNDZjYjA5YTY0NmMwY2RhNGYzMmQwZmMxMjk0ZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTEyOTQsNyArMTI5NCw3IEBAIE9w
dGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlUGF0aDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gdGFrZSBzdHJva2Ug
dGhpY2tuZXNzIGludG8gYWNjb3VudCBjb3JyZWN0bHksIHZpYSBDR1BhdGhCeVN0cm9raW5nUGF0
aCgpLgogICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNz
KCk7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOworICAg
IEZsb2F0UmVjdCBib3VuZHMgPSBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgIGJvdW5k
cy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MpOwogICAgIHJldHVybiBi
b3VuZHM7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>