<?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>85844</bug_id>
          
          <creation_ts>2012-05-07 16:42:10 -0700</creation_ts>
          <short_desc>Inline Node::traverseNextNode</short_desc>
          <delta_ts>2012-05-12 09:54:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>85898</dependson>
    
    <dependson>86159</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>jianli</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>618093</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 16:42:10 -0700</bug_when>
    <thetext>We spend quite of bit time here, including the function entry/exit. We should also generate different code for stayWithin and unscoped cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618098</commentid>
    <comment_count>1</comment_count>
      <attachid>140621</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 16:50:38 -0700</bug_when>
    <thetext>Created attachment 140621
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618102</commentid>
    <comment_count>2</comment_count>
      <attachid>140621</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-07 16:54:24 -0700</bug_when>
    <thetext>Comment on attachment 140621
patch

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

&gt; Source/WebCore/dom/Node.h:861
&gt; +    const Node* n = this;

Please spell out node.

&gt; Source/WebCore/dom/Node.h:869
&gt; +inline Node* Node::traverseNextNode(const Node* stayWithin) const

Should we use template to share the code?

&gt; Source/WebCore/dom/Node.h:877
&gt; +    const Node* n = this;

Ditto about one-letter variable name.

&gt; Source/WebCore/dom/Node.h:878
&gt; +    while (n &amp;&amp; !n-&gt;nextSibling() &amp;&amp; (!stayWithin || n-&gt;parentNodeAsNode() != stayWithin))

It appears to me that we should call traverseNextNode() when stayWithin is 0.

&gt; Source/WebCore/dom/Node.h:889
&gt; +    const Node* n = this;

Ditto about one-letter variable name.

&gt; Source/WebCore/dom/Node.h:903
&gt; +    const Node* n = this;

Ditto about one-letter variable name.

&gt; Source/WebCore/dom/Node.h:904
&gt; +    while (n &amp;&amp; !n-&gt;nextSibling() &amp;&amp; (!stayWithin || n-&gt;parentNodeAsNode() != stayWithin))

Ditto about calling traverseNextSibling() instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618103</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-07 16:54:51 -0700</bug_when>
    <thetext>I&apos;m sure Darin &amp; Eric have something to say about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618107</commentid>
    <comment_count>4</comment_count>
      <attachid>140621</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-07 16:57:12 -0700</bug_when>
    <thetext>Comment on attachment 140621
patch

Seems reasonable.  Curious what benchmark hit this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618115</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 17:03:50 -0700</bug_when>
    <thetext>(In reply to comment #2)

&gt; &gt; Source/WebCore/dom/Node.h:869
&gt; &gt; +inline Node* Node::traverseNextNode(const Node* stayWithin) const
&gt; 
&gt; Should we use template to share the code?

I wrote a template version and it was uglier and more confusing. As I mention in the changelog the function is simple.

&gt; &gt; Source/WebCore/dom/Node.h:878
&gt; &gt; +    while (n &amp;&amp; !n-&gt;nextSibling() &amp;&amp; (!stayWithin || n-&gt;parentNodeAsNode() != stayWithin))
&gt; 
&gt; It appears to me that we should call traverseNextNode() when stayWithin is 0.

Yeah but that is an interface change and better done separately. We don&apos;t know what relies on ability to pass null. We should ASSERT(stayWithin).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618122</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-07 17:06:57 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #2)
&gt; 
&gt; &gt; &gt; Source/WebCore/dom/Node.h:869
&gt; &gt; &gt; +inline Node* Node::traverseNextNode(const Node* stayWithin) const
&gt; &gt; 
&gt; &gt; Should we use template to share the code?
&gt; 
&gt; I wrote a template version and it was uglier and more confusing. As I mention in the changelog the function is simple.

Okay.

&gt; &gt; &gt; Source/WebCore/dom/Node.h:878
&gt; &gt; &gt; +    while (n &amp;&amp; !n-&gt;nextSibling() &amp;&amp; (!stayWithin || n-&gt;parentNodeAsNode() != stayWithin))
&gt; &gt; 
&gt; &gt; It appears to me that we should call traverseNextNode() when stayWithin is 0.
&gt; 
&gt; Yeah but that is an interface change and better done separately. We don&apos;t know what relies on ability to pass null. We should ASSERT(stayWithin).

What I meant is that you could just call traverseNextNode() in that case. Oh well, I guess compilers are smart enough to move the condition out of the loop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618129</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 17:10:59 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Yeah but that is an interface change and better done separately. We don&apos;t know what relies on ability to pass null. We should ASSERT(stayWithin).
&gt; 
&gt; What I meant is that you could just call traverseNextNode() in that case. Oh well, I guess compilers are smart enough to move the condition out of the loop?

That still adds an extra branch for no reason. It should really be the callers responsibility to use the right variant as usually they just need one or the other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618130</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-07 17:12:30 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; What I meant is that you could just call traverseNextNode() in that case. Oh well, I guess compilers are smart enough to move the condition out of the loop?
&gt; 
&gt; That still adds an extra branch for no reason. It should really be the callers responsibility to use the right variant as usually they just need one or the other.

Fair enough. I bet editing code is the one that calls this function with null stayWithin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618134</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 17:16:03 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 140621 [details])
&gt; Seems reasonable.  Curious what benchmark hit this?

Nothing really. If you sample regular page loading you can see this function showing up around ~1%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618135</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 17:16:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/10942765&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618145</commentid>
    <comment_count>11</comment_count>
      <attachid>140632</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 17:25:41 -0700</bug_when>
    <thetext>Created attachment 140632
patch2

n -&gt; node</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618148</commentid>
    <comment_count>12</comment_count>
      <attachid>140632</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-07 17:27:21 -0700</bug_when>
    <thetext>Comment on attachment 140632
patch2

Very reasonable patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618151</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-07 17:28:47 -0700</bug_when>
    <thetext>Attachment 140632 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/dom/Node.h:894:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618152</commentid>
    <comment_count>14</comment_count>
      <attachid>140632</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-07 17:29:14 -0700</bug_when>
    <thetext>Comment on attachment 140632
patch2

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

&gt; Source/WebCore/dom/Node.h:853
&gt; +inline Node* Node::parentNodeAsNode() const
&gt; +{
&gt; +    // Avoid circular dependency with ContainerNode.
&gt; +    return reinterpret_cast&lt;Node*&gt;(parentNode());
&gt; +}

Normally the way we handle stuff like this is to put the functions into ContainerNode.h, instead of a trick like this one.

The downside then, is that anyone calling these functions has to include ContainerNode.h, but they probably do anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618181</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 17:58:02 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Normally the way we handle stuff like this is to put the functions into ContainerNode.h, instead of a trick like this one.
&gt; 
&gt; The downside then, is that anyone calling these functions has to include ContainerNode.h, but they probably do anyway.

Generally I would prefer keeping the functions in a predictable place but I see ContainerNode.h is already full of Node function. I&apos;ll move them there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618227</commentid>
    <comment_count>16</comment_count>
      <attachid>140632</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-07 19:28:38 -0700</bug_when>
    <thetext>Comment on attachment 140632
patch2

Attachment 140632 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12652231</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618409</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-08 01:31:04 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/116402</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618630</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-08 11:01:02 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 85898</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618680</commentid>
    <comment_count>19</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-08 11:56:51 -0700</bug_when>
    <thetext>Seems like the inlining here is overly aggressive. I&apos;ll try what bots think of a version that just inlines the initial firstChild/nextSibling checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618726</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-08 12:47:58 -0700</bug_when>
    <thetext>Just for the record, all the time I saw in this function in profiles was in the implementation of HTMLCollection and the related DOM classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618728</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-08 12:51:28 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Just for the record, all the time I saw in this function in profiles was in the implementation of HTMLCollection and the related DOM classes.

HTMLCollection checks DOM tree version to invalidate cache so making any DOM mutation inside a loop to iterate over a HTMLCollection will introduce a O(n^2) iteration where n is the number of nodes in the subtree. We should probably move HTMLCollection to the model DynamicSubtreNodeList uses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618729</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-08 12:53:18 -0700</bug_when>
    <thetext>I still think the right amount of inlining is a good idea for this function. Inlining the whole thing is probably too much.

I also think we can override this in ContainerNode to do a version that’s even tighter for cases where we are starting with an Element* rather than a Node*. The firstChild function is smaller on an Element* than on a Node*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618748</commentid>
    <comment_count>23</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-08 13:23:21 -0700</bug_when>
    <thetext>I think I was remembering wrong. I think the hot cases were in one of the classes derived from DynamicSubtreeNodeList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618757</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-08 13:32:57 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; I think I was remembering wrong. I think the hot cases were in one of the classes derived from DynamicSubtreeNodeList.

I see. Do you happen to know tests / websites you used to obtain this result?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618769</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-08 13:53:38 -0700</bug_when>
    <thetext>I was looking at a profile of loading the front page of nytimes.com.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620444</commentid>
    <comment_count>26</comment_count>
      <attachid>141135</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-10 04:02:19 -0700</bug_when>
    <thetext>Created attachment 141135
another version with non-inlined ancestor sibling search</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620464</commentid>
    <comment_count>27</comment_count>
      <attachid>141135</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-10 04:28:27 -0700</bug_when>
    <thetext>Comment on attachment 141135
another version with non-inlined ancestor sibling search

Attachment 141135 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12654902</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620670</commentid>
    <comment_count>28</comment_count>
      <attachid>141191</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-10 10:10:24 -0700</bug_when>
    <thetext>Created attachment 141191
fix exports</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620686</commentid>
    <comment_count>29</comment_count>
      <attachid>141191</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-10 10:20:45 -0700</bug_when>
    <thetext>Comment on attachment 141191
fix exports

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

&gt; Source/WebCore/dom/ContainerNode.h:236
&gt; +    if (firstChild())
&gt; +        return firstChild();
&gt; +    if (nextSibling())
&gt; +        return nextSibling();

Should we create a local variables for firstChid, nextSibling, etc...?
Or maybe compilers are smart enough to figure that out by themselves?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620706</commentid>
    <comment_count>30</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-10 10:42:58 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Should we create a local variables for firstChid, nextSibling, etc...?
&gt; Or maybe compilers are smart enough to figure that out by themselves?

I think compiler knows best here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620794</commentid>
    <comment_count>31</comment_count>
      <attachid>141191</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-10 11:41:39 -0700</bug_when>
    <thetext>Comment on attachment 141191
fix exports

Attachment 141191 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12672007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620801</commentid>
    <comment_count>32</comment_count>
      <attachid>141191</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-10 11:43:50 -0700</bug_when>
    <thetext>Comment on attachment 141191
fix exports

Attachment 141191 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12653924</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620884</commentid>
    <comment_count>33</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-10 12:57:03 -0700</bug_when>
    <thetext>Lets see what bots think about this one.

http://trac.webkit.org/changeset/116677</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621120</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 16:49:02 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 86159</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621155</commentid>
    <comment_count>35</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-10 17:35:33 -0700</bug_when>
    <thetext>The fix for the Chromium build error mentioned in bug 86159 is to add an include of ContainerNode.h to the Chromium source file that has RetainedDOMInfo::GetElementCount() in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621168</commentid>
    <comment_count>36</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2012-05-10 17:57:01 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; The fix for the Chromium build error mentioned in bug 86159 is to add an include of ContainerNode.h to the Chromium source file that has RetainedDOMInfo::GetElementCount() in it.

This seems to be the right fix for chromium. But it seems that we also have quite a few other places that call Node::traverseNextNode but might not include ContainerNode.h. This could be the reason mac-ews also showed the similar error.

Can the author add the comment to those methods in Node.h, saying that ContainerNode.h should be included to access these inline methods?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621184</commentid>
    <comment_count>37</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-10 18:29:46 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; Can the author add the comment to those methods in Node.h, saying that ContainerNode.h should be included to access these inline methods?

I’m don’t think that kind of comment would be helpful. We have many other functions in Node with that requirement and this really isn’t an ongoing problem.

This kind of build breakage happens at the time we add the requirement, for existing code developed before it was required, and so the comment is not relevant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621408</commentid>
    <comment_count>38</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-11 02:06:19 -0700</bug_when>
    <thetext>I&apos;m starting to feel the approach involving reinterpret_cast&lt;Node*&gt;(parentNode()) was superior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621422</commentid>
    <comment_count>39</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-11 02:28:50 -0700</bug_when>
    <thetext>Relanded with Chromium build fix.

http://trac.webkit.org/changeset/116742</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621672</commentid>
    <comment_count>40</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-11 08:48:25 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; I also think we can override this in ContainerNode to do a version that’s even tighter for cases where we are starting with an Element* rather than a Node*. The firstChild function is smaller on an Element* than on a Node*.

Most of the clients actually want to traverse Elements (or StyledElements) not Nodes. We might want to have traverseNextElement/traverseNextElementSibling. If we tracked whether elements have any Element children (with a bit) we could avoid looking into Text nodes at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622306</commentid>
    <comment_count>41</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-12 03:16:43 -0700</bug_when>
    <thetext>Looks like on Chromium Mac this was ~15% speedup in DOM/GetElement

http://webkit-perf.appspot.com/graph.html#tests=[[19048,2001,3001]]&amp;sel=1336694619128.783,1336808170127.4514,0,750&amp;displayrange=7&amp;datatype=running

and ~5% speedup in DOM/Table

http://webkit-perf.appspot.com/graph.html#tests=[[31016,2001,3001]]&amp;sel=none&amp;displayrange=7&amp;datatype=running

Dromaeo/cssquery-dojo shows a likely few percent speedup too

http://webkit-perf.appspot.com/graph.html#tests=[[45012,2001,3001]]&amp;sel=1336673435809.816,1336817676814,78125,150000&amp;displayrange=7&amp;datatype=running</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622378</commentid>
    <comment_count>42</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-12 09:54:13 -0700</bug_when>
    <thetext>On the other hand, DOM/GridSort appears to have regressed 15% on Qt :(

http://webkit-perf.appspot.com/graph.html#tests=[[9106,2001,963028]]&amp;sel=1336678907863.6448,1336774846949.939,37.20704845814978,47.286343612334804&amp;displayrange=7&amp;datatype=running</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140621</attachid>
            <date>2012-05-07 16:50:38 -0700</date>
            <delta_ts>2012-05-07 17:25:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>node-traversal-simple.patch</filename>
            <type>text/plain</type>
            <size>6137</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNjM3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA1LTA3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBJbmxpbmUgTm9kZTo6dHJhdmVy
c2VOZXh0Tm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODU4NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbmxpbmUgdHJhdmVyc2VOZXh0Tm9kZSBhbmQgdHJhdmVyc2VOZXh0U2libGluZyB0byByZWR1
Y2UgZW50cnkvZXhpdCBvdmVyaGVhZCBhbmQgYWxsb3cgYmV0dGVyIGNvZGUgZ2VuZXJhdGlvbgor
ICAgICAgICBmb3IgbG9vcHMgd2hlcmUgdGhleSBhcmUgdXNlZC4gQWxzbyBhZGRlZCBzZXBhcmF0
ZSB2ZXJzaW9ucyBvZiBzdGF5V2l0aGluIGFuZCB1bnNjb3BlZCBjYXNlcyAodGhlIGZ1bmN0aW9u
IGlzCisgICAgICAgIHNvIHNpbXBsZSB0aGF0IHRoaXMgc2VlbWVkIGxpa2UgdGhlIGNsZWFuZXN0
IHdheSB0byBkbyBpdCwgbW9zdCByZWxpYWJsZSB0b28pIGFuZCB1c2VkIFVOTElLRUxZIGZvciB0
aGUgCisgICAgICAgIGVuZC1vZi10cmF2ZXJzYWwgY29uZGl0aW9uLgorICAgICAgICAKKyAgICAg
ICAgcnVuLXBlcmYtdGVzdHMgc2VlbXMgdG8gdGhpbmsgdGhpcyBpcyBhIHByb2dyZXNzaW9uIGlu
IHNvbWUgc3VidGVzdHMgdGhvdWdoIGJvdHMgd2lsbCB0ZWxsIGZvciBjZXJ0YWluLgorCisgICAg
ICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6cGFyZW50Tm9kZUFzTm9kZSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnRyYXZlcnNlTmV4dE5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6dHJhdmVyc2VOZXh0U2libGluZyk6CisKIDIwMTItMDUtMDcgIFByYXZpbiBE
ICA8cHJhdmluZC4yazRAZ21haWwuY29tPgogCiAgICAgICAgIDpmaXJzdC1saW5lIHRleHQtZGVj
b3JhdGlvbnMgYXJlIG5vdCByZW5kZXJlZApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlz
aW9uIDExNjI4MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDk2LDcgKzIwOTYsNiBAQCBfX1pON1dlYkNvcmU4RG9jdW1lbnQyNXNldEZ1bGxT
Y3JlZW5SZW5kCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQzNnNldEZ1bGxTY3JlZW5SZW5kZXJlckJh
Y2tncm91bmRDb2xvckVOU181Q29sb3JFCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQyMnNldEFuaW1h
dGluZ0Z1bGxTY3JlZW5FYgogX19aTks3V2ViQ29yZThEb2N1bWVudDlkb21XaW5kb3dFdgotX19a
Tks3V2ViQ29yZTROb2RlMTZ0cmF2ZXJzZU5leHROb2RlRVBLUzBfCiAjZW5kaWYKIAogX19aTjdX
ZWJDb3JlMTZBcHBsaWNhdGlvbkNhY2hlMThkaXNrVXNhZ2VGb3JPcmlnaW5FUE5TXzE0U2VjdXJp
dHlPcmlnaW5FCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMTYyODEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODQsMzYgKzEwODQs
NiBAQCB2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZENoaWxkTm9kZUxpc3QoKQogICAgIHJhcmVEYXRh
KCktPnNldENoaWxkTm9kZUxpc3QoMCk7CiB9CiAKLU5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dE5v
ZGUoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3QKLXsKLSAgICBpZiAoZmlyc3RDaGlsZCgp
KQotICAgICAgICByZXR1cm4gZmlyc3RDaGlsZCgpOwotICAgIGlmICh0aGlzID09IHN0YXlXaXRo
aW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChuZXh0U2libGluZygpKQotICAgICAgICBy
ZXR1cm4gbmV4dFNpYmxpbmcoKTsKLSAgICBjb25zdCBOb2RlICpuID0gdGhpczsKLSAgICB3aGls
ZSAobiAmJiAhbi0+bmV4dFNpYmxpbmcoKSAmJiAoIXN0YXlXaXRoaW4gfHwgbi0+cGFyZW50Tm9k
ZSgpICE9IHN0YXlXaXRoaW4pKQotICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwotICAgIGlm
IChuKQotICAgICAgICByZXR1cm4gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotTm9kZSogTm9kZTo6dHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGlu
KSBjb25zdAotewotICAgIGlmICh0aGlzID09IHN0YXlXaXRoaW4pCi0gICAgICAgIHJldHVybiAw
OwotICAgIGlmIChuZXh0U2libGluZygpKQotICAgICAgICByZXR1cm4gbmV4dFNpYmxpbmcoKTsK
LSAgICBjb25zdCBOb2RlICpuID0gdGhpczsKLSAgICB3aGlsZSAobiAmJiAhbi0+bmV4dFNpYmxp
bmcoKSAmJiAoIXN0YXlXaXRoaW4gfHwgbi0+cGFyZW50Tm9kZSgpICE9IHN0YXlXaXRoaW4pKQot
ICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChuKQotICAgICAgICByZXR1cm4g
bi0+bmV4dFNpYmxpbmcoKTsKLSAgICByZXR1cm4gMDsKLX0KLQogTm9kZSogTm9kZTo6dHJhdmVy
c2VOZXh0Tm9kZVBvc3RPcmRlcigpIGNvbnN0CiB7CiAgICAgTm9kZSogbmV4dCA9IG5leHRTaWJs
aW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDExNjI4MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNywxMCArNDI3LDEyIEBAIHB1Ymxp
YzoKICAgICAvLyBUaGlzIHVzZXMgdGhlIHNhbWUgb3JkZXIgdGhhdCB0YWdzIGFwcGVhciBpbiB0
aGUgc291cmNlIGZpbGUuIElmIHRoZSBzdGF5V2l0aGluCiAgICAgLy8gYXJndW1lbnQgaXMgbm9u
LW51bGwsIHRoZSB0cmF2ZXJzYWwgd2lsbCBzdG9wIG9uY2UgdGhlIHNwZWNpZmllZCBub2RlIGlz
IHJlYWNoZWQuCiAgICAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0cmF2ZXJzYWwg
dG8gYSBwYXJ0aWN1bGFyIHN1Yi10cmVlLgotICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5vZGUoY29u
c3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5v
ZGUoKSBjb25zdDsKKyAgICBOb2RlKiB0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUqIHN0YXlX
aXRoaW4pIGNvbnN0OwogCiAgICAgLy8gTGlrZSB0cmF2ZXJzZU5leHROb2RlLCBidXQgc2tpcHMg
Y2hpbGRyZW4gYW5kIHN0YXJ0cyB3aXRoIHRoZSBuZXh0IHNpYmxpbmcuCi0gICAgTm9kZSogdHJh
dmVyc2VOZXh0U2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCkgY29uc3Q7CisgICAg
Tm9kZSogdHJhdmVyc2VOZXh0U2libGluZygpIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlTmV4
dFNpYmxpbmcoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3Q7CiAKICAgICAvLyBEb2VzIGEg
cmV2ZXJzZSBwcmUtb3JkZXIgdHJhdmVyc2FsIHRvIGZpbmQgdGhlIG5vZGUgdGhhdCBjb21lcyBi
ZWZvcmUgdGhlIGN1cnJlbnQgb25lIGluIGRvY3VtZW50IG9yZGVyCiAgICAgTm9kZSogdHJhdmVy
c2VQcmV2aW91c05vZGUoY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OwpAQCAtNzY0
LDYgKzc2Niw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBtZXRob2QgaXMgbWFkZSBwcml2YXRl
IHRvIGVuc3VyZSBhIGNvbXBpbGVyIGVycm9yIG9uIGNhbGwgc2l0ZXMgdGhhdAogICAgIC8vIGRv
bid0IGZvbGxvdyB0aGlzIHJ1bGUuCiAgICAgdXNpbmcgVHJlZVNoYXJlZDxDb250YWluZXJOb2Rl
Pjo6cGFyZW50OworICAgIE5vZGUqIHBhcmVudE5vZGVBc05vZGUoKSBjb25zdDsKIAogICAgIHZv
aWQgdHJhY2tGb3JEZWJ1Z2dpbmcoKTsKIApAQCAtODQzLDYgKzg0Niw2OCBAQCBpbmxpbmUgdm9p
ZCBOb2RlOjpyZWF0dGFjaElmQXR0YWNoZWQoKQogICAgICAgICByZWF0dGFjaCgpOwogfQogCitp
bmxpbmUgTm9kZSogTm9kZTo6cGFyZW50Tm9kZUFzTm9kZSgpIGNvbnN0Cit7CisgICAgLy8gQXZv
aWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHdpdGggQ29udGFpbmVyTm9kZS4KKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxOb2RlKj4ocGFyZW50Tm9kZSgpKTsKK30KKworaW5saW5lIE5vZGUq
IE5vZGU6OnRyYXZlcnNlTmV4dE5vZGUoKSBjb25zdAoreworICAgIGlmIChmaXJzdENoaWxkKCkp
CisgICAgICAgIHJldHVybiBmaXJzdENoaWxkKCk7CisgICAgaWYgKG5leHRTaWJsaW5nKCkpCisg
ICAgICAgIHJldHVybiBuZXh0U2libGluZygpOworICAgIGNvbnN0IE5vZGUqIG4gPSB0aGlzOwor
ICAgIHdoaWxlIChuICYmICFuLT5uZXh0U2libGluZygpKQorICAgICAgICBuID0gbi0+cGFyZW50
Tm9kZUFzTm9kZSgpOworICAgIGlmIChVTkxJS0VMWSghbikpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBuLT5uZXh0U2libGluZygpOworfQorCitpbmxpbmUgTm9kZSogTm9kZTo6dHJh
dmVyc2VOZXh0Tm9kZShjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAoreworICAgIGlmIChm
aXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiBmaXJzdENoaWxkKCk7CisgICAgaWYgKFVOTElL
RUxZKHRoaXMgPT0gc3RheVdpdGhpbikpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChuZXh0
U2libGluZygpKQorICAgICAgICByZXR1cm4gbmV4dFNpYmxpbmcoKTsKKyAgICBjb25zdCBOb2Rl
KiBuID0gdGhpczsKKyAgICB3aGlsZSAobiAmJiAhbi0+bmV4dFNpYmxpbmcoKSAmJiAoIXN0YXlX
aXRoaW4gfHwgbi0+cGFyZW50Tm9kZUFzTm9kZSgpICE9IHN0YXlXaXRoaW4pKQorICAgICAgICBu
ID0gbi0+cGFyZW50Tm9kZUFzTm9kZSgpOworICAgIGlmIChVTkxJS0VMWSghbikpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBuLT5uZXh0U2libGluZygpOworfQorCitpbmxpbmUgTm9k
ZSogTm9kZTo6dHJhdmVyc2VOZXh0U2libGluZygpIGNvbnN0Cit7CisgICAgaWYgKG5leHRTaWJs
aW5nKCkpCisgICAgICAgIHJldHVybiBuZXh0U2libGluZygpOworICAgIGNvbnN0IE5vZGUqIG4g
PSB0aGlzOworICAgIHdoaWxlIChuICYmICFuLT5uZXh0U2libGluZygpKQorICAgICAgICBuID0g
bi0+cGFyZW50Tm9kZUFzTm9kZSgpOworICAgIGlmIChVTkxJS0VMWSghbikpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBuLT5uZXh0U2libGluZygpOworfQorCitpbmxpbmUgTm9kZSog
Tm9kZTo6dHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAor
eworICAgIGlmIChVTkxJS0VMWSh0aGlzID09IHN0YXlXaXRoaW4pKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAobmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nKCk7
CisgICAgY29uc3QgTm9kZSogbiA9IHRoaXM7CisgICAgd2hpbGUgKG4gJiYgIW4tPm5leHRTaWJs
aW5nKCkgJiYgKCFzdGF5V2l0aGluIHx8IG4tPnBhcmVudE5vZGVBc05vZGUoKSAhPSBzdGF5V2l0
aGluKSkKKyAgICAgICAgbiA9IG4tPnBhcmVudE5vZGVBc05vZGUoKTsKKyAgICBpZiAoVU5MSUtF
TFkoIW4pKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbi0+bmV4dFNpYmxpbmcoKTsK
K30KKwogfSAvL25hbWVzcGFjZQogCiAjaWZuZGVmIE5ERUJVRwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140632</attachid>
            <date>2012-05-07 17:25:41 -0700</date>
            <delta_ts>2012-05-10 04:02:19 -0700</delta_ts>
            <desc>patch2</desc>
            <filename>node-traversal-simple-2.patch</filename>
            <type>text/plain</type>
            <size>6215</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNjM3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA1LTA3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBJbmxpbmUgTm9kZTo6dHJhdmVy
c2VOZXh0Tm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODU4NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbmxpbmUgdHJhdmVyc2VOZXh0Tm9kZSBhbmQgdHJhdmVyc2VOZXh0U2libGluZyB0byByZWR1
Y2UgZW50cnkvZXhpdCBvdmVyaGVhZCBhbmQgYWxsb3cgYmV0dGVyIGNvZGUgZ2VuZXJhdGlvbgor
ICAgICAgICBmb3IgbWFueSBob3QgbG9vcHMuIEFsc28gYWRkZWQgc2VwYXJhdGUgdmVyc2lvbnMg
b2Ygc3RheVdpdGhpbiBhbmQgdW5zY29wZWQgY2FzZXMgKHRoZSBmdW5jdGlvbiBpcworICAgICAg
ICBzbyBzaW1wbGUgdGhhdCB0aGlzIHNlZW1lZCBsaWtlIHRoZSBjbGVhbmVzdCB3YXkgdG8gZG8g
aXQsIG1vc3QgcmVsaWFibGUgdG9vKSBhbmQgdXNlZCBVTkxJS0VMWSBmb3IgdGhlIAorICAgICAg
ICBlbmQtb2YtdHJhdmVyc2FsIGNvbmRpdGlvbi4KKyAgICAgICAgCisgICAgICAgIHJ1bi1wZXJm
LXRlc3RzIHNlZW1zIHRvIHRoaW5rIHRoaXMgaXMgYSBwcm9ncmVzc2lvbiBpbiBzb21lIHN1YnRl
c3RzIHRob3VnaCBib3RzIHdpbGwgdGVsbCBmb3IgY2VydGFpbi4KKworICAgICAgICAqIFdlYkNv
cmUuZXhwLmluOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnBhcmVudE5vZGVBc05vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjp0cmF2ZXJzZU5leHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OnRyYXZlcnNlTmV4dFNpYmxpbmcpOgorCiAyMDEyLTA1LTA3ICBQcmF2aW4gRCAgPHByYXZpbmQu
Mms0QGdtYWlsLmNvbT4KIAogICAgICAgICA6Zmlyc3QtbGluZSB0ZXh0LWRlY29yYXRpb25zIGFy
ZSBub3QgcmVuZGVyZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMTYyODEp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjA5
Niw3ICsyMDk2LDYgQEAgX19aTjdXZWJDb3JlOERvY3VtZW50MjVzZXRGdWxsU2NyZWVuUmVuZAog
X19aTjdXZWJDb3JlOERvY3VtZW50MzZzZXRGdWxsU2NyZWVuUmVuZGVyZXJCYWNrZ3JvdW5kQ29s
b3JFTlNfNUNvbG9yRQogX19aTjdXZWJDb3JlOERvY3VtZW50MjJzZXRBbmltYXRpbmdGdWxsU2Ny
ZWVuRWIKIF9fWk5LN1dlYkNvcmU4RG9jdW1lbnQ5ZG9tV2luZG93RXYKLV9fWk5LN1dlYkNvcmU0
Tm9kZTE2dHJhdmVyc2VOZXh0Tm9kZUVQS1MwXwogI2VuZGlmCiAKIF9fWk43V2ViQ29yZTE2QXBw
bGljYXRpb25DYWNoZTE4ZGlza1VzYWdlRm9yT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTE2MjgxKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg0LDM2ICsxMDg0LDYgQEAgdm9pZCBO
b2RlOjpyZW1vdmVDYWNoZWRDaGlsZE5vZGVMaXN0KCkKICAgICByYXJlRGF0YSgpLT5zZXRDaGls
ZE5vZGVMaXN0KDApOwogfQogCi1Ob2RlKiBOb2RlOjp0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5v
ZGUqIHN0YXlXaXRoaW4pIGNvbnN0Ci17Ci0gICAgaWYgKGZpcnN0Q2hpbGQoKSkKLSAgICAgICAg
cmV0dXJuIGZpcnN0Q2hpbGQoKTsKLSAgICBpZiAodGhpcyA9PSBzdGF5V2l0aGluKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBpZiAobmV4dFNpYmxpbmcoKSkKLSAgICAgICAgcmV0dXJuIG5leHRT
aWJsaW5nKCk7Ci0gICAgY29uc3QgTm9kZSAqbiA9IHRoaXM7Ci0gICAgd2hpbGUgKG4gJiYgIW4t
Pm5leHRTaWJsaW5nKCkgJiYgKCFzdGF5V2l0aGluIHx8IG4tPnBhcmVudE5vZGUoKSAhPSBzdGF5
V2l0aGluKSkKLSAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICBpZiAobikKLSAgICAg
ICAgcmV0dXJuIG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUqIE5v
ZGU6OnRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3QKLXsK
LSAgICBpZiAodGhpcyA9PSBzdGF5V2l0aGluKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nKCk7Ci0gICAgY29uc3Qg
Tm9kZSAqbiA9IHRoaXM7Ci0gICAgd2hpbGUgKG4gJiYgIW4tPm5leHRTaWJsaW5nKCkgJiYgKCFz
dGF5V2l0aGluIHx8IG4tPnBhcmVudE5vZGUoKSAhPSBzdGF5V2l0aGluKSkKLSAgICAgICAgbiA9
IG4tPnBhcmVudE5vZGUoKTsKLSAgICBpZiAobikKLSAgICAgICAgcmV0dXJuIG4tPm5leHRTaWJs
aW5nKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIE5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dE5vZGVQ
b3N0T3JkZXIoKSBjb25zdAogewogICAgIE5vZGUqIG5leHQgPSBuZXh0U2libGluZygpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCShyZXZpc2lvbiAxMTYyODEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjcsMTAgKzQyNywxMiBAQCBwdWJsaWM6CiAgICAgLy8g
VGhpcyB1c2VzIHRoZSBzYW1lIG9yZGVyIHRoYXQgdGFncyBhcHBlYXIgaW4gdGhlIHNvdXJjZSBm
aWxlLiBJZiB0aGUgc3RheVdpdGhpbgogICAgIC8vIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB0aGUg
dHJhdmVyc2FsIHdpbGwgc3RvcCBvbmNlIHRoZSBzcGVjaWZpZWQgbm9kZSBpcyByZWFjaGVkLgog
ICAgIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdHJhdmVyc2FsIHRvIGEgcGFydGlj
dWxhciBzdWItdHJlZS4KLSAgICBOb2RlKiB0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4gPSAwKSBjb25zdDsKKyAgICBOb2RlKiB0cmF2ZXJzZU5leHROb2RlKCkgY29uc3Q7
CisgICAgTm9kZSogdHJhdmVyc2VOZXh0Tm9kZShjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25z
dDsKIAogICAgIC8vIExpa2UgdHJhdmVyc2VOZXh0Tm9kZSwgYnV0IHNraXBzIGNoaWxkcmVuIGFu
ZCBzdGFydHMgd2l0aCB0aGUgbmV4dCBzaWJsaW5nLgotICAgIE5vZGUqIHRyYXZlcnNlTmV4dFNp
YmxpbmcoY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OworICAgIE5vZGUqIHRyYXZl
cnNlTmV4dFNpYmxpbmcoKSBjb25zdDsKKyAgICBOb2RlKiB0cmF2ZXJzZU5leHRTaWJsaW5nKGNv
bnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0OwogCiAgICAgLy8gRG9lcyBhIHJldmVyc2UgcHJl
LW9yZGVyIHRyYXZlcnNhbCB0byBmaW5kIHRoZSBub2RlIHRoYXQgY29tZXMgYmVmb3JlIHRoZSBj
dXJyZW50IG9uZSBpbiBkb2N1bWVudCBvcmRlcgogICAgIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNO
b2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKQEAgLTc2NCw2ICs3NjYsNyBA
QCBwcml2YXRlOgogICAgIC8vIFRoaXMgbWV0aG9kIGlzIG1hZGUgcHJpdmF0ZSB0byBlbnN1cmUg
YSBjb21waWxlciBlcnJvciBvbiBjYWxsIHNpdGVzIHRoYXQKICAgICAvLyBkb24ndCBmb2xsb3cg
dGhpcyBydWxlLgogICAgIHVzaW5nIFRyZWVTaGFyZWQ8Q29udGFpbmVyTm9kZT46OnBhcmVudDsK
KyAgICBOb2RlKiBwYXJlbnROb2RlQXNOb2RlKCkgY29uc3Q7CiAKICAgICB2b2lkIHRyYWNrRm9y
RGVidWdnaW5nKCk7CiAKQEAgLTg0Myw2ICs4NDYsNjggQEAgaW5saW5lIHZvaWQgTm9kZTo6cmVh
dHRhY2hJZkF0dGFjaGVkKCkKICAgICAgICAgcmVhdHRhY2goKTsKIH0KIAoraW5saW5lIE5vZGUq
IE5vZGU6OnBhcmVudE5vZGVBc05vZGUoKSBjb25zdAoreworICAgIC8vIEF2b2lkIGNpcmN1bGFy
IGRlcGVuZGVuY3kgd2l0aCBDb250YWluZXJOb2RlLgorICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PE5vZGUqPihwYXJlbnROb2RlKCkpOworfQorCitpbmxpbmUgTm9kZSogTm9kZTo6dHJhdmVy
c2VOZXh0Tm9kZSgpIGNvbnN0Cit7CisgICAgaWYgKGZpcnN0Q2hpbGQoKSkKKyAgICAgICAgcmV0
dXJuIGZpcnN0Q2hpbGQoKTsKKyAgICBpZiAobmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJu
IG5leHRTaWJsaW5nKCk7CisgICAgY29uc3QgTm9kZSogbm9kZSA9IHRoaXM7CisgICAgd2hpbGUg
KG5vZGUgJiYgIW5vZGUtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJl
bnROb2RlQXNOb2RlKCk7CisgICAgaWYgKFVOTElLRUxZKCFub2RlKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIG5vZGUtPm5leHRTaWJsaW5nKCk7Cit9CisKK2lubGluZSBOb2RlKiBO
b2RlOjp0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0Cit7Cisg
ICAgaWYgKGZpcnN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQoKTsKKyAgICBp
ZiAoVU5MSUtFTFkodGhpcyA9PSBzdGF5V2l0aGluKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
aWYgKG5leHRTaWJsaW5nKCkpCisgICAgICAgIHJldHVybiBuZXh0U2libGluZygpOworICAgIGNv
bnN0IE5vZGUqIG5vZGUgPSB0aGlzOworICAgIHdoaWxlIChub2RlICYmICFub2RlLT5uZXh0U2li
bGluZygpICYmICghc3RheVdpdGhpbiB8fCBub2RlLT5wYXJlbnROb2RlQXNOb2RlKCkgIT0gc3Rh
eVdpdGhpbikpCisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlQXNOb2RlKCk7CisgICAg
aWYgKFVOTElLRUxZKCFub2RlKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5vZGUt
Pm5leHRTaWJsaW5nKCk7Cit9CisKK2lubGluZSBOb2RlKiBOb2RlOjp0cmF2ZXJzZU5leHRTaWJs
aW5nKCkgY29uc3QKK3sKKyAgICBpZiAobmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIG5l
eHRTaWJsaW5nKCk7CisgICAgY29uc3QgTm9kZSogbm9kZSA9IHRoaXM7CisgICAgd2hpbGUgKG5v
ZGUgJiYgIW5vZGUtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnRO
b2RlQXNOb2RlKCk7CisgICAgaWYgKFVOTElLRUxZKCFub2RlKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG5vZGUtPm5leHRTaWJsaW5nKCk7OworfQorCitpbmxpbmUgTm9kZSogTm9k
ZTo6dHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAorewor
ICAgIGlmIChVTkxJS0VMWSh0aGlzID09IHN0YXlXaXRoaW4pKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAobmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nKCk7Cisg
ICAgY29uc3QgTm9kZSogbm9kZSA9IHRoaXM7CisgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPm5l
eHRTaWJsaW5nKCkgJiYgKCFzdGF5V2l0aGluIHx8IG5vZGUtPnBhcmVudE5vZGVBc05vZGUoKSAh
PSBzdGF5V2l0aGluKSkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGVBc05vZGUoKTsK
KyAgICBpZiAoVU5MSUtFTFkoIW5vZGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bm9kZS0+bmV4dFNpYmxpbmcoKTsKK30KKwogfSAvL25hbWVzcGFjZQogCiAjaWZuZGVmIE5ERUJV
Rwo=
</data>
<flag name="review"
          id="146570"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="146594"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141135</attachid>
            <date>2012-05-10 04:02:19 -0700</date>
            <delta_ts>2012-05-10 10:11:18 -0700</delta_ts>
            <desc>another version with non-inlined ancestor sibling search</desc>
            <filename>node-traversal-partial-inline.patch</filename>
            <type>text/plain</type>
            <size>5584</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNjYyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA1LTEwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBJbmxpbmUgTm9kZTo6dHJhdmVy
c2VOZXh0Tm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODU4NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIElubGluZSB0cmF2ZXJzZU5leHROb2RlIGFuZCB0cmF2ZXJzZU5leHRTaWJsaW5n
IHRvIHJlZHVjZSBlbnRyeS9leGl0IG92ZXJoZWFkIGFuZCBhbGxvdyBiZXR0ZXIgY29kZSBnZW5l
cmF0aW9uCisgICAgICAgIGZvciBtYW55IGhvdCBsb29wcy4KKworICAgICAgICBJbiB0aGlzIHZl
cnNpb24gb25seSB0aGUgZmlyc3RDaGlsZCgpL25leHRTaWJsaW5nKCkgdGVzdHMgYXJlIGlubGlu
ZWQgYW5kIHRoZSBhbmNlc3RvciB0cmF2ZXJzYWwgaXMgbm90LgorICAgICAgICAKKyAgICAgICAg
UGVyZm9ybWFuY2UgYm90cyB3aWxsIHRlbGwgaWYgdGhpcyB3YXMgd29ydGh3aGlsZS4KKworICAg
ICAgICAqIGRvbS9Db250YWluZXJOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp0cmF2
ZXJzZU5leHROb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6dHJhdmVyc2VOZXh0U2libGluZyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6dHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKToKKyAgICAgICAg
KiBkb20vTm9kZS5oOgorICAgICAgICAoTm9kZSk6CisKIDIwMTItMDUtMTAgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENoYW5nZSB0aGUgcmV0dXJuIHR5
cGUgb2YgRW50cnkudG9VUkwoKSBiYWNrIHRvIFN0cmluZyBmcm9tIEtVUkwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuaAkocmV2aXNpb24gMTE2NTI2KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDYgKzIyOCw0MiBA
QCBpbmxpbmUgTm9kZSogTm9kZTo6aGlnaGVzdEFuY2VzdG9yKCkgY29uCiAgICAgcmV0dXJuIGhp
Z2hlc3Q7CiB9CiAKK2lubGluZSBOb2RlKiBOb2RlOjp0cmF2ZXJzZU5leHROb2RlKCkgY29uc3QK
K3sKKyAgICBpZiAoZmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmlyc3RDaGlsZCgpOwor
ICAgIGlmIChuZXh0U2libGluZygpKQorICAgICAgICByZXR1cm4gbmV4dFNpYmxpbmcoKTsKKyAg
ICByZXR1cm4gdHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKCk7Cit9CisKK2lubGluZSBOb2Rl
KiBOb2RlOjp0cmF2ZXJzZU5leHRTaWJsaW5nKCkgY29uc3QKK3sKKyAgICBpZiAobmV4dFNpYmxp
bmcoKSkKKyAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nKCk7CisgICAgcmV0dXJuIHRyYXZlcnNl
TmV4dEFuY2VzdG9yU2libGluZygpOworfQorCitpbmxpbmUgTm9kZSogTm9kZTo6dHJhdmVyc2VO
ZXh0Tm9kZShjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAoreworICAgIGlmIChmaXJzdENo
aWxkKCkpCisgICAgICAgIHJldHVybiBmaXJzdENoaWxkKCk7CisgICAgaWYgKHRoaXMgPT0gc3Rh
eVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG5leHRTaWJsaW5nKCkpCisgICAg
ICAgIHJldHVybiBuZXh0U2libGluZygpOworICAgIHJldHVybiB0cmF2ZXJzZU5leHRBbmNlc3Rv
clNpYmxpbmcoc3RheVdpdGhpbik7Cit9CisKK2lubGluZSBOb2RlKiBOb2RlOjp0cmF2ZXJzZU5l
eHRTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0Cit7CisgICAgaWYgKHRoaXMg
PT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG5leHRTaWJsaW5nKCkp
CisgICAgICAgIHJldHVybiBuZXh0U2libGluZygpOworICAgIHJldHVybiB0cmF2ZXJzZU5leHRB
bmNlc3RvclNpYmxpbmcoc3RheVdpdGhpbik7Cit9CisKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxO
b2RlPiwgMTE+IE5vZGVWZWN0b3I7CiAKIGlubGluZSB2b2lkIGdldENoaWxkTm9kZXMoTm9kZSog
bm9kZSwgTm9kZVZlY3RvciYgbm9kZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAx
MTY1MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwODgsMzMgKzEwODgsMjkgQEAgdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWRDaGlsZE5vZGVMaXN0
KCkKICAgICByYXJlRGF0YSgpLT5zZXRDaGlsZE5vZGVMaXN0KDApOwogfQogCi1Ob2RlKiBOb2Rl
Ojp0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0CitOb2RlKiBO
b2RlOjp0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmcoKSBjb25zdAogewotICAgIGlmIChmaXJz
dENoaWxkKCkpCi0gICAgICAgIHJldHVybiBmaXJzdENoaWxkKCk7Ci0gICAgaWYgKHRoaXMgPT0g
c3RheVdpdGhpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIHJldHVybiBuZXh0U2libGluZygpOwotICAgIGNvbnN0IE5vZGUgKm4gPSB0aGlzOwot
ICAgIHdoaWxlIChuICYmICFuLT5uZXh0U2libGluZygpICYmICghc3RheVdpdGhpbiB8fCBuLT5w
YXJlbnROb2RlKCkgIT0gc3RheVdpdGhpbikpCi0gICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7
Ci0gICAgaWYgKG4pCi0gICAgICAgIHJldHVybiBuLT5uZXh0U2libGluZygpOworICAgIEFTU0VS
VCghbmV4dFNpYmxpbmcoKSk7CisgICAgY29uc3QgTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsK
KyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZS0+bmV4dFNpYmxpbmcoKSkKKyAg
ICAgICAgICAgIHJldHVybiBub2RlLT5uZXh0U2libGluZygpOworICAgICAgICBub2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogTm9kZTo6
dHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAorTm9kZSog
Tm9kZTo6dHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4p
IGNvbnN0CiB7Ci0gICAgaWYgKHRoaXMgPT0gc3RheVdpdGhpbikKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKG5leHRTaWJsaW5nKCkpCi0gICAgICAgIHJldHVybiBuZXh0U2libGluZygpOwot
ICAgIGNvbnN0IE5vZGUgKm4gPSB0aGlzOwotICAgIHdoaWxlIChuICYmICFuLT5uZXh0U2libGlu
ZygpICYmICghc3RheVdpdGhpbiB8fCBuLT5wYXJlbnROb2RlKCkgIT0gc3RheVdpdGhpbikpCi0g
ICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKG4pCi0gICAgICAgIHJldHVybiBu
LT5uZXh0U2libGluZygpOworICAgIEFTU0VSVCghbmV4dFNpYmxpbmcoKSk7CisgICAgY29uc3Qg
Tm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBp
ZiAoc3RheVdpdGhpbiAmJiBub2RlID09IHN0YXlXaXRoaW4pCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgaWYgKG5vZGUtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4g
bm9kZS0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsK
KyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTE2
NTI2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMy
LDEwICs0MzIsMTIgQEAgcHVibGljOgogICAgIC8vIFRoaXMgdXNlcyB0aGUgc2FtZSBvcmRlciB0
aGF0IHRhZ3MgYXBwZWFyIGluIHRoZSBzb3VyY2UgZmlsZS4gSWYgdGhlIHN0YXlXaXRoaW4KICAg
ICAvLyBhcmd1bWVudCBpcyBub24tbnVsbCwgdGhlIHRyYXZlcnNhbCB3aWxsIHN0b3Agb25jZSB0
aGUgc3BlY2lmaWVkIG5vZGUgaXMgcmVhY2hlZC4KICAgICAvLyBUaGlzIGNhbiBiZSB1c2VkIHRv
IHJlc3RyaWN0IHRyYXZlcnNhbCB0byBhIHBhcnRpY3VsYXIgc3ViLXRyZWUuCi0gICAgTm9kZSog
dHJhdmVyc2VOZXh0Tm9kZShjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCkgY29uc3Q7CisgICAg
Tm9kZSogdHJhdmVyc2VOZXh0Tm9kZSgpIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5v
ZGUoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3Q7CiAKICAgICAvLyBMaWtlIHRyYXZlcnNl
TmV4dE5vZGUsIGJ1dCBza2lwcyBjaGlsZHJlbiBhbmQgc3RhcnRzIHdpdGggdGhlIG5leHQgc2li
bGluZy4KLSAgICBOb2RlKiB0cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRo
aW4gPSAwKSBjb25zdDsKKyAgICBOb2RlKiB0cmF2ZXJzZU5leHRTaWJsaW5nKCkgY29uc3Q7Cisg
ICAgTm9kZSogdHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25z
dDsKIAogICAgIC8vIERvZXMgYSByZXZlcnNlIHByZS1vcmRlciB0cmF2ZXJzYWwgdG8gZmluZCB0
aGUgbm9kZSB0aGF0IGNvbWVzIGJlZm9yZSB0aGUgY3VycmVudCBvbmUgaW4gZG9jdW1lbnQgb3Jk
ZXIKICAgICBOb2RlKiB0cmF2ZXJzZVByZXZpb3VzTm9kZShjb25zdCBOb2RlKiBzdGF5V2l0aGlu
ID0gMCkgY29uc3Q7CkBAIC03NjksNiArNzcxLDkgQEAgcHJpdmF0ZToKIAogICAgIEVsZW1lbnQq
IGFuY2VzdG9yRWxlbWVudCgpIGNvbnN0OwogCisgICAgTm9kZSogdHJhdmVyc2VOZXh0QW5jZXN0
b3JTaWJsaW5nKCkgY29uc3Q7CisgICAgTm9kZSogdHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5n
KGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0OworCiAgICAgLy8gVXNlIE5vZGU6OnBhcmVu
dE5vZGUgYXMgdGhlIGNvbnNpc3RlbnQgd2F5IG9mIHF1ZXJ5aW5nIGEgcGFyZW50IG5vZGUuCiAg
ICAgLy8gVGhpcyBtZXRob2QgaXMgbWFkZSBwcml2YXRlIHRvIGVuc3VyZSBhIGNvbXBpbGVyIGVy
cm9yIG9uIGNhbGwgc2l0ZXMgdGhhdAogICAgIC8vIGRvbid0IGZvbGxvdyB0aGlzIHJ1bGUuCg==
</data>
<flag name="commit-queue"
          id="147223"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141191</attachid>
            <date>2012-05-10 10:10:24 -0700</date>
            <delta_ts>2012-05-10 11:43:50 -0700</delta_ts>
            <desc>fix exports</desc>
            <filename>node-traversal-partial-inline-2.patch</filename>
            <type>text/plain</type>
            <size>6125</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNjYyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA1LTEwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBJbmxpbmUgTm9kZTo6dHJhdmVy
c2VOZXh0Tm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODU4NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIElubGluZSB0cmF2ZXJzZU5leHROb2RlIGFuZCB0cmF2ZXJzZU5leHRTaWJsaW5n
IHRvIHJlZHVjZSBlbnRyeS9leGl0IG92ZXJoZWFkIGFuZCBhbGxvdyBiZXR0ZXIgY29kZSBnZW5l
cmF0aW9uCisgICAgICAgIGZvciBtYW55IGhvdCBsb29wcy4KKworICAgICAgICBJbiB0aGlzIHZl
cnNpb24gb25seSB0aGUgZmlyc3RDaGlsZCgpL25leHRTaWJsaW5nKCkgdGVzdHMgYXJlIGlubGlu
ZWQgYW5kIHRoZSBhbmNlc3RvciB0cmF2ZXJzYWwgaXMgbm90LgorICAgICAgICAKKyAgICAgICAg
UGVyZm9ybWFuY2UgYm90cyB3aWxsIHRlbGwgaWYgdGhpcyB3YXMgd29ydGh3aGlsZS4KKworICAg
ICAgICAqIGRvbS9Db250YWluZXJOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp0cmF2
ZXJzZU5leHROb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6dHJhdmVyc2VOZXh0U2libGluZyk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6dHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKToKKyAgICAgICAg
KiBkb20vTm9kZS5oOgorICAgICAgICAoTm9kZSk6CisKIDIwMTItMDUtMTAgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENoYW5nZSB0aGUgcmV0dXJuIHR5
cGUgb2YgRW50cnkudG9VUkwoKSBiYWNrIHRvIFN0cmluZyBmcm9tIEtVUkwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMTY1MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjA5OSw3ICsyMDk5LDYgQEAgX19aTjdXZWJDb3Jl
OERvY3VtZW50MjVzZXRGdWxsU2NyZWVuUmVuZAogX19aTjdXZWJDb3JlOERvY3VtZW50MzZzZXRG
dWxsU2NyZWVuUmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3JFTlNfNUNvbG9yRQogX19aTjdXZWJDb3Jl
OERvY3VtZW50MjJzZXRBbmltYXRpbmdGdWxsU2NyZWVuRWIKIF9fWk5LN1dlYkNvcmU4RG9jdW1l
bnQ5ZG9tV2luZG93RXYKLV9fWk5LN1dlYkNvcmU0Tm9kZTE2dHJhdmVyc2VOZXh0Tm9kZUVQS1Mw
XwogI2VuZGlmCiAKIF9fWk43V2ViQ29yZTE2QXBwbGljYXRpb25DYWNoZTE4ZGlza1VzYWdlRm9y
T3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCShyZXZpc2lvbiAxMTY1MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDQyIEBAIGlubGluZSBOb2RlKiBO
b2RlOjpoaWdoZXN0QW5jZXN0b3IoKSBjb24KICAgICByZXR1cm4gaGlnaGVzdDsKIH0KIAoraW5s
aW5lIE5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dE5vZGUoKSBjb25zdAoreworICAgIGlmIChmaXJz
dENoaWxkKCkpCisgICAgICAgIHJldHVybiBmaXJzdENoaWxkKCk7CisgICAgaWYgKG5leHRTaWJs
aW5nKCkpCisgICAgICAgIHJldHVybiBuZXh0U2libGluZygpOworICAgIHJldHVybiB0cmF2ZXJz
ZU5leHRBbmNlc3RvclNpYmxpbmcoKTsKK30KKworaW5saW5lIE5vZGUqIE5vZGU6OnRyYXZlcnNl
TmV4dFNpYmxpbmcoKSBjb25zdAoreworICAgIGlmIChuZXh0U2libGluZygpKQorICAgICAgICBy
ZXR1cm4gbmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gdHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJs
aW5nKCk7Cit9CisKK2lubGluZSBOb2RlKiBOb2RlOjp0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5v
ZGUqIHN0YXlXaXRoaW4pIGNvbnN0Cit7CisgICAgaWYgKGZpcnN0Q2hpbGQoKSkKKyAgICAgICAg
cmV0dXJuIGZpcnN0Q2hpbGQoKTsKKyAgICBpZiAodGhpcyA9PSBzdGF5V2l0aGluKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAobmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIG5leHRT
aWJsaW5nKCk7CisgICAgcmV0dXJuIHRyYXZlcnNlTmV4dEFuY2VzdG9yU2libGluZyhzdGF5V2l0
aGluKTsKK30KKworaW5saW5lIE5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3Qg
Tm9kZSogc3RheVdpdGhpbikgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBzdGF5V2l0aGluKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJu
IG5leHRTaWJsaW5nKCk7CisgICAgcmV0dXJuIHRyYXZlcnNlTmV4dEFuY2VzdG9yU2libGluZyhz
dGF5V2l0aGluKTsKK30KKwogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPE5vZGU+LCAxMT4gTm9kZVZl
Y3RvcjsKIAogaW5saW5lIHZvaWQgZ2V0Q2hpbGROb2RlcyhOb2RlKiBub2RlLCBOb2RlVmVjdG9y
JiBub2RlcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDExNjUyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4OCwzMyArMTA4OCwy
NiBAQCB2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZENoaWxkTm9kZUxpc3QoKQogICAgIHJhcmVEYXRh
KCktPnNldENoaWxkTm9kZUxpc3QoMCk7CiB9CiAKLU5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dE5v
ZGUoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3QKK05vZGUqIE5vZGU6OnRyYXZlcnNlTmV4
dEFuY2VzdG9yU2libGluZygpIGNvbnN0CiB7Ci0gICAgaWYgKGZpcnN0Q2hpbGQoKSkKLSAgICAg
ICAgcmV0dXJuIGZpcnN0Q2hpbGQoKTsKLSAgICBpZiAodGhpcyA9PSBzdGF5V2l0aGluKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAobmV4dFNpYmxpbmcoKSkKLSAgICAgICAgcmV0dXJuIG5l
eHRTaWJsaW5nKCk7Ci0gICAgY29uc3QgTm9kZSAqbiA9IHRoaXM7Ci0gICAgd2hpbGUgKG4gJiYg
IW4tPm5leHRTaWJsaW5nKCkgJiYgKCFzdGF5V2l0aGluIHx8IG4tPnBhcmVudE5vZGUoKSAhPSBz
dGF5V2l0aGluKSkKLSAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICBpZiAobikKLSAg
ICAgICAgcmV0dXJuIG4tPm5leHRTaWJsaW5nKCk7CisgICAgQVNTRVJUKCFuZXh0U2libGluZygp
KTsKKyAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPm5leHRTaWJsaW5nKCkp
CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+bmV4dFNpYmxpbmcoKTsKKyAgICB9CiAgICAgcmV0
dXJuIDA7CiB9CiAKLU5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3QgTm9kZSog
c3RheVdpdGhpbikgY29uc3QKK05vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dEFuY2VzdG9yU2libGlu
Zyhjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAogewotICAgIGlmICh0aGlzID09IHN0YXlX
aXRoaW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChuZXh0U2libGluZygpKQotICAgICAg
ICByZXR1cm4gbmV4dFNpYmxpbmcoKTsKLSAgICBjb25zdCBOb2RlICpuID0gdGhpczsKLSAgICB3
aGlsZSAobiAmJiAhbi0+bmV4dFNpYmxpbmcoKSAmJiAoIXN0YXlXaXRoaW4gfHwgbi0+cGFyZW50
Tm9kZSgpICE9IHN0YXlXaXRoaW4pKQotICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwotICAg
IGlmIChuKQotICAgICAgICByZXR1cm4gbi0+bmV4dFNpYmxpbmcoKTsKKyAgICBBU1NFUlQoIW5l
eHRTaWJsaW5nKCkpOworICAgIEFTU0VSVCh0aGlzICE9IHN0YXlXaXRoaW4pOworICAgIGZvciAo
Y29uc3QgTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVu
dE5vZGUoKSkgeworICAgICAgICBpZiAobm9kZSA9PSBzdGF5V2l0aGluKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIGlmIChub2RlLT5uZXh0U2libGluZygpKQorICAgICAgICAgICAg
cmV0dXJuIG5vZGUtPm5leHRTaWJsaW5nKCk7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDExNjUyNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMiwxMCArNDMyLDEyIEBAIHB1YmxpYzoKICAgICAv
LyBUaGlzIHVzZXMgdGhlIHNhbWUgb3JkZXIgdGhhdCB0YWdzIGFwcGVhciBpbiB0aGUgc291cmNl
IGZpbGUuIElmIHRoZSBzdGF5V2l0aGluCiAgICAgLy8gYXJndW1lbnQgaXMgbm9uLW51bGwsIHRo
ZSB0cmF2ZXJzYWwgd2lsbCBzdG9wIG9uY2UgdGhlIHNwZWNpZmllZCBub2RlIGlzIHJlYWNoZWQu
CiAgICAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0cmF2ZXJzYWwgdG8gYSBwYXJ0
aWN1bGFyIHN1Yi10cmVlLgotICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5vZGUoY29uc3QgTm9kZSog
c3RheVdpdGhpbiA9IDApIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5vZGUoKSBjb25z
dDsKKyAgICBOb2RlKiB0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNv
bnN0OwogCiAgICAgLy8gTGlrZSB0cmF2ZXJzZU5leHROb2RlLCBidXQgc2tpcHMgY2hpbGRyZW4g
YW5kIHN0YXJ0cyB3aXRoIHRoZSBuZXh0IHNpYmxpbmcuCi0gICAgTm9kZSogdHJhdmVyc2VOZXh0
U2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCkgY29uc3Q7CisgICAgTm9kZSogdHJh
dmVyc2VOZXh0U2libGluZygpIGNvbnN0OworICAgIE5vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmco
Y29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3Q7CiAKICAgICAvLyBEb2VzIGEgcmV2ZXJzZSBw
cmUtb3JkZXIgdHJhdmVyc2FsIHRvIGZpbmQgdGhlIG5vZGUgdGhhdCBjb21lcyBiZWZvcmUgdGhl
IGN1cnJlbnQgb25lIGluIGRvY3VtZW50IG9yZGVyCiAgICAgTm9kZSogdHJhdmVyc2VQcmV2aW91
c05vZGUoY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OwpAQCAtNzY5LDYgKzc3MSw5
IEBAIHByaXZhdGU6CiAKICAgICBFbGVtZW50KiBhbmNlc3RvckVsZW1lbnQoKSBjb25zdDsKIAor
ICAgIE5vZGUqIHRyYXZlcnNlTmV4dEFuY2VzdG9yU2libGluZygpIGNvbnN0OworICAgIE5vZGUq
IHRyYXZlcnNlTmV4dEFuY2VzdG9yU2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25z
dDsKKwogICAgIC8vIFVzZSBOb2RlOjpwYXJlbnROb2RlIGFzIHRoZSBjb25zaXN0ZW50IHdheSBv
ZiBxdWVyeWluZyBhIHBhcmVudCBub2RlLgogICAgIC8vIFRoaXMgbWV0aG9kIGlzIG1hZGUgcHJp
dmF0ZSB0byBlbnN1cmUgYSBjb21waWxlciBlcnJvciBvbiBjYWxsIHNpdGVzIHRoYXQKICAgICAv
LyBkb24ndCBmb2xsb3cgdGhpcyBydWxlLgo=
</data>
<flag name="review"
          id="147281"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="147303"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>