<?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>44994</bug_id>
          
          <creation_ts>2010-08-31 14:50:48 -0700</creation_ts>
          <short_desc>Add length and related operations to FloatPoint and FloatSize</short_desc>
          <delta_ts>2010-09-01 10:10:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>44729</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>jamesr</cc>
    
    <cc>mjs</cc>
    
    <cc>senorblanco</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>272399</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-31 14:50:48 -0700</bug_when>
    <thetext>For some geometric algorithms it is useful to treat FloatPoint as a vector on the 2D plane and query its length or the square of its length. It is also useful to be able to compute the distance or squared distance between two points. We should add length computations to FloatPoint and FloatSize for these purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272408</commentid>
    <comment_count>1</comment_count>
      <attachid>66116</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-31 14:54:19 -0700</bug_when>
    <thetext>Created attachment 66116
Patch

From the ChangeLog:

Added length and squared length operations to both FloatPoint and FloatSize, and added set(x, y) operation to FloatPoint. These changes have been tested with new code to be added later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272437</commentid>
    <comment_count>2</comment_count>
      <attachid>66116</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-31 15:27:15 -0700</bug_when>
    <thetext>Comment on attachment 66116
Patch

...
&gt; Index: WebCore/platform/graphics/FloatPoint.h
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/FloatPoint.h	(revision 66532)
&gt; +++ WebCore/platform/graphics/FloatPoint.h	(working copy)
&gt; @@ -80,6 +80,11 @@ public:
&gt;  
&gt;      void setX(float x) { m_x = x; }
&gt;      void setY(float y) { m_y = y; }
&gt; +    void set(float x, float y)
&gt; +    {
&gt; +        m_x = x;
&gt; +        m_y = y;
&gt; +    }
&gt;      void move(float dx, float dy)
&gt;      {
&gt;          m_x += dx;
&gt; @@ -91,6 +96,12 @@ public:
&gt;          m_y *= sy;
&gt;      }
&gt;  
&gt; +    float length() const;
&gt; +    float lengthSquared() const
&gt; +    {
&gt; +        return m_x * m_x + m_y * m_y;
&gt; +    }
&gt; +
&gt;  #if PLATFORM(CG)
&gt;      FloatPoint(const CGPoint&amp;);
&gt;      operator CGPoint() const;
&gt; Index: WebCore/platform/graphics/FloatSize.cpp

Need a casting operator between FloatPoint and FloatPoint3D (here and in FloatPoint3D).

normalize() and dot() would be useful here as well, and would make the classes more consistent. For completeness you could add cross() as well, although I&apos;ve never seen it used for a 2D point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272441</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-31 15:34:34 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Need a casting operator between FloatPoint and FloatPoint3D (here and in FloatPoint3D).

I don&apos;t think this is a good idea. Providing such a casting operator would allow implicit casts and assignments to succeed that could lead to programming errors. FloatPoint3D already has a constructor taking FloatPoint which sets the z component to zero. We could add an xy() method on FloatPoint3D returning FloatPoint (or six methods like xy(), xz(), etc.).

&gt; normalize() and dot() would be useful here as well, and would make the classes more consistent. For completeness you could add cross() as well, although I&apos;ve never seen it used for a 2D point.

I can add normalize() and dot(). Cross product is an operation which is only defined on three-dimensional vectors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272447</commentid>
    <comment_count>4</comment_count>
      <attachid>66127</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-31 15:48:38 -0700</bug_when>
    <thetext>Created attachment 66127
Revised patch

Added normalize() and dot product operations to FloatPoint based on review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272459</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-31 16:08:02 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Need a casting operator between FloatPoint and FloatPoint3D (here and in FloatPoint3D).
&gt; 
&gt; I don&apos;t think this is a good idea. Providing such a casting operator would allow implicit casts and assignments to succeed that could lead to programming errors. FloatPoint3D already has a constructor taking FloatPoint which sets the z component to zero. We could add an xy() method on FloatPoint3D returning FloatPoint (or six methods like xy(), xz(), etc.).

I agree that the ctor is probably sufficient.

&gt; 
&gt; &gt; normalize() and dot() would be useful here as well, and would make the classes more consistent. For completeness you could add cross() as well, although I&apos;ve never seen it used for a 2D point.
&gt; 
&gt; I can add normalize() and dot(). Cross product is an operation which is only defined on three-dimensional vectors.

I have seen 2D cross product implemented. It returns a scalar value which is the magnitude of resultant vector. Apparently (and I never did the math so I can&apos;t verify this), it&apos;s also twice the area of the triangle formed by the two vectors. But I agree, I don&apos;t think this is important.

So just normalize and dot will fill out the class nicely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272516</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-31 17:07:39 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; So just normalize and dot will fill out the class nicely.

normalize and dot have been added per above. Please re-review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272532</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-31 17:38:48 -0700</bug_when>
    <thetext>Committed r66560: &lt;http://trac.webkit.org/changeset/66560&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66116</attachid>
            <date>2010-08-31 14:54:19 -0700</date>
            <delta_ts>2010-08-31 15:48:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>float-point.patch</filename>
            <type>text/plain</type>
            <size>3805</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjU0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTAtMDgtMzEgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBsZW5ndGggYW5kIHJlbGF0ZWQgb3BlcmF0aW9ucyB0byBGbG9hdFBvaW50IGFuZCBGbG9hdFNp
emUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTk0
CisKKyAgICAgICAgQWRkZWQgbGVuZ3RoIGFuZCBzcXVhcmVkIGxlbmd0aCBvcGVyYXRpb25zIHRv
IGJvdGggRmxvYXRQb2ludCBhbmQKKyAgICAgICAgRmxvYXRTaXplLCBhbmQgYWRkZWQgc2V0KHgs
IHkpIG9wZXJhdGlvbiB0byBGbG9hdFBvaW50LiBUaGVzZQorICAgICAgICBjaGFuZ2VzIGhhdmUg
YmVlbiB0ZXN0ZWQgd2l0aCBuZXcgY29kZSB0byBiZSBhZGRlZCBsYXRlci4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRQb2ludDo6bGVuZ3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRQb2ludDo6bGVuZ3RoU3F1YXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0U2l6ZTo6ZGlhZ29uYWxM
ZW5ndGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRTaXplOjpkaWFnb25hbExlbmd0aFNxdWFyZWQpOgorCiAyMDEwLTA4
LTMxICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5jcHAJKHJldmlzaW9uIDY2NTMyKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDxtYXRoLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsNiArMzgsMTEgQEAgRmxvYXRQb2ludDo6Rmxv
YXRQb2ludChjb25zdCBJbnRQb2ludCYgcAogewogfQogCitmbG9hdCBGbG9hdFBvaW50OjpsZW5n
dGgoKSBjb25zdAoreworICAgIHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOworfQorCiBG
bG9hdFBvaW50IEZsb2F0UG9pbnQ6Om1hdHJpeFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkgY29uc3QKIHsKICAgICBkb3VibGUgbmV3WCwgbmV3WTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCShyZXZpc2lvbiA2NjUzMikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MCw2ICs4MCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4
OyB9CiAgICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsgbV95ID0geTsgfQorICAgIHZvaWQgc2V0KGZs
b2F0IHgsIGZsb2F0IHkpCisgICAgeworICAgICAgICBtX3ggPSB4OworICAgICAgICBtX3kgPSB5
OworICAgIH0KICAgICB2b2lkIG1vdmUoZmxvYXQgZHgsIGZsb2F0IGR5KQogICAgIHsKICAgICAg
ICAgbV94ICs9IGR4OwpAQCAtOTEsNiArOTYsMTIgQEAgcHVibGljOgogICAgICAgICBtX3kgKj0g
c3k7CiAgICAgfQogCisgICAgZmxvYXQgbGVuZ3RoKCkgY29uc3Q7CisgICAgZmxvYXQgbGVuZ3Ro
U3F1YXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95ICog
bV95OworICAgIH0KKwogI2lmIFBMQVRGT1JNKENHKQogICAgIEZsb2F0UG9pbnQoY29uc3QgQ0dQ
b2ludCYpOwogICAgIG9wZXJhdG9yIENHUG9pbnQoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHJldmlzaW9uIDY2NTMyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSA8bWF0aC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDYg
KzM3LDExIEBAIEZsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEludFNpemUmIHNpemUKIHsKIH0K
IAorZmxvYXQgRmxvYXRTaXplOjpkaWFnb25hbExlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHNxcnRmKGRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpKTsKK30KKwogRmxvYXRTaXplIEZsb2F0U2l6
ZTo6bmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkKIHsKICAgICBy
ZXR1cm4gRmxvYXRTaXplKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQod2lkdGgpLCBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGhlaWdodCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5oCShyZXZpc2lvbiA2NjUzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgbV9oZWlnaHQgPCBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWln
aHQpOwogICAgIH0KIAorICAgIGZsb2F0IGRpYWdvbmFsTGVuZ3RoKCkgY29uc3Q7CisgICAgZmxv
YXQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3dpZHRoICogbV93aWR0aCArIG1faGVpZ2h0ICogbV9oZWlnaHQ7CisgICAgfQorCiAjaWYgUExB
VEZPUk0oQ0cpIHx8IChQTEFURk9STShXWCkgJiYgT1MoREFSV0lOKSkKICAgICBleHBsaWNpdCBG
bG9hdFNpemUoY29uc3QgQ0dTaXplJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5j
ZSBpdCdzIGxvc3N5CiAgICAgb3BlcmF0b3IgQ0dTaXplKCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="55036"
          type_id="1"
          status="-"
          setter="cmarrin"
    />
    <flag name="commit-queue"
          id="55037"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66127</attachid>
            <date>2010-08-31 15:48:38 -0700</date>
            <delta_ts>2010-08-31 17:26:01 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>float-point.patch</filename>
            <type>text/plain</type>
            <size>4584</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjU0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDgtMzEgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBsZW5ndGggYW5kIHJlbGF0ZWQgb3BlcmF0aW9ucyB0byBGbG9hdFBvaW50IGFuZCBGbG9hdFNp
emUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTk0
CisKKyAgICAgICAgQWRkZWQgbGVuZ3RoIGFuZCBzcXVhcmVkIGxlbmd0aCBvcGVyYXRpb25zIHRv
IGJvdGggRmxvYXRQb2ludCBhbmQKKyAgICAgICAgRmxvYXRTaXplLCBhbmQgYWRkZWQgc2V0KHgs
IHkpLCBkb3QgYW5kIG5vcm1hbGl6ZSBvcGVyYXRpb25zIHRvCisgICAgICAgIEZsb2F0UG9pbnQu
IFRoZXNlIGNoYW5nZXMgaGF2ZSBiZWVuIHRlc3RlZCB3aXRoIG5ldyBjb2RlIHRvIGJlCisgICAg
ICAgIGFkZGVkIGxhdGVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50Ojpub3JtYWxpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6bGVuZ3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6ZG90KToKKyAgICAgICAgKFdlYkNvcmU6OkZs
b2F0UG9pbnQ6Omxlbmd0aFNxdWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IqKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRTaXplOjpkaWFnb25hbExlbmd0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmg6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNpemU6OmRpYWdvbmFs
TGVuZ3RoU3F1YXJlZCk6CisKIDIwMTAtMDgtMzEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAkocmV2aXNpb24gNjY1NDcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgPG1hdGgu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNyw2ICszOCwyMSBAQCBGbG9hdFBvaW50
OjpGbG9hdFBvaW50KGNvbnN0IEludFBvaW50JiBwCiB7CiB9CiAKK3ZvaWQgRmxvYXRQb2ludDo6
bm9ybWFsaXplKCkKK3sKKyAgICBmbG9hdCB0ZW1wTGVuZ3RoID0gbGVuZ3RoKCk7CisKKyAgICBp
ZiAodGVtcExlbmd0aCkgeworICAgICAgICBtX3ggLz0gdGVtcExlbmd0aDsKKyAgICAgICAgbV95
IC89IHRlbXBMZW5ndGg7CisgICAgfQorfQorCitmbG9hdCBGbG9hdFBvaW50OjpsZW5ndGgoKSBj
b25zdAoreworICAgIHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOworfQorCiBGbG9hdFBv
aW50IEZsb2F0UG9pbnQ6Om1hdHJpeFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkgY29uc3QKIHsKICAgICBkb3VibGUgbmV3WCwgbmV3WTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCShyZXZpc2lvbiA2NjU0NykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4
MCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9CiAg
ICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsgbV95ID0geTsgfQorICAgIHZvaWQgc2V0KGZsb2F0IHgs
IGZsb2F0IHkpCisgICAgeworICAgICAgICBtX3ggPSB4OworICAgICAgICBtX3kgPSB5OworICAg
IH0KICAgICB2b2lkIG1vdmUoZmxvYXQgZHgsIGZsb2F0IGR5KQogICAgIHsKICAgICAgICAgbV94
ICs9IGR4OwpAQCAtOTEsNiArOTYsMTkgQEAgcHVibGljOgogICAgICAgICBtX3kgKj0gc3k7CiAg
ICAgfQogCisgICAgdm9pZCBub3JtYWxpemUoKTsKKworICAgIGZsb2F0IGRvdChjb25zdCBGbG9h
dFBvaW50JiBhKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1feCAqIGEueCgpICsgbV95
ICogYS55KCk7CisgICAgfQorCisgICAgZmxvYXQgbGVuZ3RoKCkgY29uc3Q7CisgICAgZmxvYXQg
bGVuZ3RoU3F1YXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV94ICogbV94ICsg
bV95ICogbV95OworICAgIH0KKwogI2lmIFBMQVRGT1JNKENHKQogICAgIEZsb2F0UG9pbnQoY29u
c3QgQ0dQb2ludCYpOwogICAgIG9wZXJhdG9yIENHUG9pbnQoKSBjb25zdDsKQEAgLTE3Myw2ICsx
OTEsMTIgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9hdFBvaW50JgogICAgIHJl
dHVybiBhLngoKSAhPSBiLngoKSB8fCBhLnkoKSAhPSBiLnkoKTsKIH0KIAoraW5saW5lIGZsb2F0
IG9wZXJhdG9yKihjb25zdCBGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFBvaW50JiBiKQorewor
ICAgIC8vIGRvdCBwcm9kdWN0CisgICAgcmV0dXJuIGEuZG90KGIpOworfQorCiBpbmxpbmUgSW50
UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7CiAgICAgcmV0dXJu
IEludFBvaW50KHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAueCgpKSksIHN0YXRpY19jYXN0PGlu
dD4ocm91bmRmKHAueSgpKSkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmNwcAkocmV2aXNpb24gNjY1NDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0U2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUg
IkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlIDxtYXRo
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNiArMzcsMTEgQEAgRmxvYXRTaXpl
OjpGbG9hdFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZQogewogfQogCitmbG9hdCBGbG9hdFNpemU6
OmRpYWdvbmFsTGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3FydGYoZGlhZ29uYWxMZW5n
dGhTcXVhcmVkKCkpOworfQorCiBGbG9hdFNpemUgRmxvYXRTaXplOjpuYXJyb3dQcmVjaXNpb24o
ZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQogewogICAgIHJldHVybiBGbG9hdFNpemUobmFy
cm93UHJlY2lzaW9uVG9GbG9hdCh3aWR0aCksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoaGVpZ2h0
KSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDY2
NTQ3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsMTIgQEAgcHVibGljOgogICAgICAgICAgICBtX2hlaWdodCA8IG90
aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CiAgICAgfQogCisgICAg
ZmxvYXQgZGlhZ29uYWxMZW5ndGgoKSBjb25zdDsKKyAgICBmbG9hdCBkaWFnb25hbExlbmd0aFNx
dWFyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2lkdGggKiBtX3dpZHRoICsg
bV9oZWlnaHQgKiBtX2hlaWdodDsKKyAgICB9CisKICNpZiBQTEFURk9STShDRykgfHwgKFBMQVRG
T1JNKFdYKSAmJiBPUyhEQVJXSU4pKQogICAgIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBDR1Np
emUmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBv
cGVyYXRvciBDR1NpemUoKSBjb25zdDsK
</data>
<flag name="review"
          id="55047"
          type_id="1"
          status="+"
          setter="cmarrin"
    />
    <flag name="commit-queue"
          id="55048"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>