<?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>32613</bug_id>
          
          <creation_ts>2009-12-16 08:56:39 -0800</creation_ts>
          <short_desc>REGRESSION (r52008): Middle-clicking on a linked image starts a pan scroll, but should follow the link instead</short_desc>
          <delta_ts>2009-12-18 13:58:28 -0800</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>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://webkit.org/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly, Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Brian Weinstein">bweinstein</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>172311</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-12-16 08:56:39 -0800</bug_when>
    <thetext>To reproduce:

1. Go to http://webkit.org/
2. Middle-click on the &quot;Download Nightly builds&quot; image

A pan scroll starts. But the link should open in a new tab instead!

This seems to be a regression introduced in r52008, which was fixing bug 32303.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172312</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-12-16 08:57:08 -0800</bug_when>
    <thetext>&lt;rdar://problem/7476743&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172576</commentid>
    <comment_count>2</comment_count>
      <attachid>45023</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-12-16 16:40:39 -0800</bug_when>
    <thetext>Created attachment 45023
[PATCH] Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172582</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-16 16:44:47 -0800</bug_when>
    <thetext>Attachment 45023 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/dom/Node.cpp:2835:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2836:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2837:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2838:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2839:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2840:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2841:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2843:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2844:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2846:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2847:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2849:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2850:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2851:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2852:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/dom/Node.cpp:2853:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 16</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172583</commentid>
    <comment_count>4</comment_count>
      <attachid>45023</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-12-16 16:46:20 -0800</bug_when>
    <thetext>Comment on attachment 45023
[PATCH] Fix

This patch contains tabs.

&gt; +        if (mouseEvent-&gt;button() == MiddleButton) {
&gt; +			bool ancestorIsLink = false;
&gt; +			Node* node = this;
&gt; +			while (node &amp;&amp; !ancestorIsLink) {
&gt; +				if (node-&gt;isLink())
&gt; +					ancestorIsLink = true;
&gt; +				node = node-&gt;eventParentNode();
&gt; +			}
&gt; +
&gt; +			if (!ancestorIsLink) {
&gt; +				RenderObject* renderer = this-&gt;renderer();
&gt; +
&gt; +				while (renderer &amp;&amp; (!renderer-&gt;isBox() || !toRenderBox(renderer)-&gt;canBeScrolledAndHasScrollableArea()))
&gt; +					renderer = renderer-&gt;parent();
&gt; +
&gt; +				if (renderer) {
&gt; +					if (Frame* frame = document()-&gt;frame())
&gt; +						frame-&gt;eventHandler()-&gt;startPanScrolling(renderer);
&gt; +				}
&gt; +			}

I think this would all be clearer with an early return (and a for loop):

for (Node* node = this; node; node = node-&gt;eventParentNode()) {
    if (node-&gt;isLink())
        return;
}

RenderObject* renderer = ...

I think it would be good to share this code with the hit-testing code.

Your code doesn&apos;t consider &lt;area&gt; and &lt;map&gt; elements, but the hit-testing code does. I think it&apos;s a bug that your code doesn&apos;t consider that. (You should write a test for it!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172586</commentid>
    <comment_count>5</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-12-16 16:51:42 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 45023 [details])
&gt; This patch contains tabs.

Will fix, sorry about that, using a different machine.

&gt; 
&gt; &gt; +        if (mouseEvent-&gt;button() == MiddleButton) {
&gt; &gt; +			bool ancestorIsLink = false;
&gt; &gt; +			Node* node = this;
&gt; &gt; +			while (node &amp;&amp; !ancestorIsLink) {
&gt; &gt; +				if (node-&gt;isLink())
&gt; &gt; +					ancestorIsLink = true;
&gt; &gt; +				node = node-&gt;eventParentNode();
&gt; &gt; +			}
&gt; &gt; +
&gt; &gt; +			if (!ancestorIsLink) {
&gt; &gt; +				RenderObject* renderer = this-&gt;renderer();
&gt; &gt; +
&gt; &gt; +				while (renderer &amp;&amp; (!renderer-&gt;isBox() || !toRenderBox(renderer)-&gt;canBeScrolledAndHasScrollableArea()))
&gt; &gt; +					renderer = renderer-&gt;parent();
&gt; &gt; +
&gt; &gt; +				if (renderer) {
&gt; &gt; +					if (Frame* frame = document()-&gt;frame())
&gt; &gt; +						frame-&gt;eventHandler()-&gt;startPanScrolling(renderer);
&gt; &gt; +				}
&gt; &gt; +			}
&gt; 
&gt; I think this would all be clearer with an early return (and a for loop):
&gt; 
&gt; for (Node* node = this; node; node = node-&gt;eventParentNode()) {
&gt;     if (node-&gt;isLink())
&gt;         return;
&gt; }
&gt; 

That makes and seems cleaner. I was just wary about adding early returns in case someone decides to add more to that part of the function, but you said on IRC earlier that an early return would work, so I&apos;ll switch to using that.

&gt; RenderObject* renderer = ...
&gt; 
&gt; I think it would be good to share this code with the hit-testing code.
&gt; 

What do you mean?

&gt; Your code doesn&apos;t consider &lt;area&gt; and &lt;map&gt; elements, but the hit-testing code
&gt; does. I think it&apos;s a bug that your code doesn&apos;t consider that. (You should
&gt; write a test for it!)

I don&apos;t see any special casing in RenderLayer::hitTest for area and map elements, won&apos;t area and map elements have isLink = true? I can write a test for that though. Plus, that code is trying to figure out which element has the link, I just need to know if there is one, which makes me thing I don&apos;t need to special case area + map. I will write a test though.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172620</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-12-16 19:52:32 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 45023 [details] [details])
&gt; &gt; RenderObject* renderer = ...
&gt; &gt; 
&gt; &gt; I think it would be good to share this code with the hit-testing code.
&gt; &gt; 
&gt; 
&gt; What do you mean?

I meant that we should find a way to unify the code in RenderLayer::hitTest that finds the enclosing isLink element with your new code here in defaultEventHandler. The RenderLayer code I&apos;m talking about is &lt;http://trac.webkit.org/browser/trunk/WebCore/rendering/RenderLayer.cpp?rev=52034#L2349&gt;.

&gt; &gt; Your code doesn&apos;t consider &lt;area&gt; and &lt;map&gt; elements, but the hit-testing code
&gt; &gt; does. I think it&apos;s a bug that your code doesn&apos;t consider that. (You should
&gt; &gt; write a test for it!)
&gt; 
&gt; I don&apos;t see any special casing in RenderLayer::hitTest for area and map
&gt; elements, won&apos;t area and map elements have isLink = true? I can write a test
&gt; for that though. Plus, that code is trying to figure out which element has the
&gt; link, I just need to know if there is one, which makes me thing I don&apos;t need to
&gt; special case area + map. I will write a test though.

A test sounds like the right way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172621</commentid>
    <comment_count>7</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-12-16 19:55:13 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (From update of attachment 45023 [details] [details] [details])
&gt; &gt; &gt; RenderObject* renderer = ...
&gt; &gt; &gt; 
&gt; &gt; &gt; I think it would be good to share this code with the hit-testing code.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; What do you mean?
&gt; 
&gt; I meant that we should find a way to unify the code in RenderLayer::hitTest
&gt; that finds the enclosing isLink element with your new code here in
&gt; defaultEventHandler. The RenderLayer code I&apos;m talking about is
&gt; &lt;http://trac.webkit.org/browser/trunk/WebCore/rendering/RenderLayer.cpp?rev=52034#L2349&gt;.
&gt; 

I could add a function for Node.h - something like enclosingAnchorNode or isInsideAnchorNode, and call it in both places, but one call expects a boolean, where the other expects a Node, but if you think that&apos;s a good solution, I could do that.

&gt; &gt; &gt; Your code doesn&apos;t consider &lt;area&gt; and &lt;map&gt; elements, but the hit-testing code
&gt; &gt; &gt; does. I think it&apos;s a bug that your code doesn&apos;t consider that. (You should
&gt; &gt; &gt; write a test for it!)
&gt; &gt; 
&gt; &gt; I don&apos;t see any special casing in RenderLayer::hitTest for area and map
&gt; &gt; elements, won&apos;t area and map elements have isLink = true? I can write a test
&gt; &gt; for that though. Plus, that code is trying to figure out which element has the
&gt; &gt; link, I just need to know if there is one, which makes me thing I don&apos;t need to
&gt; &gt; special case area + map. I will write a test though.
&gt; 
&gt; A test sounds like the right way to go.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172622</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-12-16 19:59:57 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; &gt; (From update of attachment 45023 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; RenderObject* renderer = ...
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I think it would be good to share this code with the hit-testing code.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; What do you mean?
&gt; &gt; 
&gt; &gt; I meant that we should find a way to unify the code in RenderLayer::hitTest
&gt; &gt; that finds the enclosing isLink element with your new code here in
&gt; &gt; defaultEventHandler. The RenderLayer code I&apos;m talking about is
&gt; &gt; &lt;http://trac.webkit.org/browser/trunk/WebCore/rendering/RenderLayer.cpp?rev=52034#L2349&gt;.
&gt; &gt; 
&gt; 
&gt; I could add a function for Node.h - something like enclosingAnchorNode or
&gt; isInsideAnchorNode, and call it in both places, but one call expects a boolean,
&gt; where the other expects a Node, but if you think that&apos;s a good solution, I
&gt; could do that.

A function that returns a node will serve both purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173223</commentid>
    <comment_count>9</comment_count>
      <attachid>45163</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-12-18 10:56:27 -0800</bug_when>
    <thetext>Created attachment 45163
[PATCH] Fix with some refactoring + image map tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173224</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-18 11:01:02 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45163 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173281</commentid>
    <comment_count>11</comment_count>
      <attachid>45163</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-12-18 12:57:53 -0800</bug_when>
    <thetext>Comment on attachment 45163
[PATCH] Fix with some refactoring + image map tests

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 52323)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,28 @@
&gt; +2009-12-18  Brian Weinstein  &lt;bweinstein@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Fixes &lt;http://webkit.org/b/32613&gt;.
&gt; +        REGRESSION (r52008): Middle-clicking on a linked image starts a pan scroll,
&gt; +        but should follow the link instead.
&gt; +
&gt; +        The node itself isn&apos;t the only possible node that can be a link (that was the
&gt; +        original check), any of its ancestors could be links as well, we need to climb
&gt; +        up the tree to see. Created a new function (enclosingAnchorNode), that finds a
&gt; +        node&apos;s enclosing anchor element (if it exists), that we can share between RenderLayer
&gt; +        and Node, and also added tests that test pan scrolling behavior in image maps.
&gt; +
&gt; +        Tests: platform/win/fast/events/panScroll-image-no-scroll.html
&gt; +               platform/win/fast/events/panScroll-imageMap-href-no-scroll.html
&gt; +               platform/win/fast/events/panScroll-imageMap-noHref-scroll.html
&gt; +
&gt; +        * dom/Node.cpp:
&gt; +        (WebCore::Node::enclosingAnchorNode):
&gt; +        (WebCore::Node::defaultEventHandler):
&gt; +        * dom/Node.h:
&gt; +        * rendering/RenderLayer.cpp:
&gt; +        (WebCore::RenderLayer::hitTest):
&gt; +
&gt;  2009-12-18  Adam Roben  &lt;aroben@apple.com&gt;
&gt;  
&gt;          GTK build fix
&gt; Index: WebCore/dom/Node.cpp
&gt; ===================================================================
&gt; --- WebCore/dom/Node.cpp	(revision 52231)
&gt; +++ WebCore/dom/Node.cpp	(working copy)
&gt; @@ -2288,6 +2288,19 @@ ContainerNode* Node::eventParentNode()
&gt;      return static_cast&lt;ContainerNode*&gt;(parent);
&gt;  }
&gt;  
&gt; +Node* Node::enclosingAnchorNode()

This name is a bit misleading in two ways:
1) The function can return &quot;this&quot;, but its name implies it can only return an ancestor of &quot;this&quot;
2) It can return something other than an HTMLAnchorElement, which is what it names implies it will return.

I&apos;d call it enclosingLinkNodeOrSelf or enclosingURLNodeOrSelf or something like that (enclosingLinkNode parallels isLink(), and enclosingURLNode (kind of) parallels HitTestResult::URLElement()). In either case, I think it needs a comment in the header explaining what it does. Maybe there&apos;s even a better name that would be so clear it wouldn&apos;t need a comment.

&gt; @@ -2831,9 +2844,11 @@ void Node::defaultEventHandler(Event* ev
&gt;  #if ENABLE(PAN_SCROLLING)
&gt;      } else if (eventType == eventNames().mousedownEvent) {
&gt;          MouseEvent* mouseEvent = static_cast&lt;MouseEvent*&gt;(event);
&gt; -        if (mouseEvent-&gt;button() == MiddleButton &amp;&amp; !this-&gt;isLink()) {
&gt; -            RenderObject* renderer = this-&gt;renderer();
&gt; +        if (mouseEvent-&gt;button() == MiddleButton) {
&gt; +            if (this-&gt;enclosingAnchorNode())
&gt; +                return;

No need for this-&gt; here.

&gt; +    // The node&apos;s enclosing anchor element (if it exists).
&gt; +    Node* enclosingAnchorNode();

This comment is incorrect, since this function doesn&apos;t always return an HTMLAnchorElement (see, I told you the name was confusing!).

&gt; @@ -2346,15 +2346,10 @@ bool RenderLayer::hitTest(const HitTestR
&gt;          }
&gt;      }
&gt;  
&gt; -    // Now determine if the result is inside an anchor; make sure an image map wins if
&gt; -    // it already set URLElement and only use the innermost.
&gt; +    // Now determine if the result is inside an anchor.
&gt;      Node* node = result.innerNode();
&gt; -    while (node) {
&gt; -        // for imagemaps, URLElement is the associated area element not the image itself
&gt; -        if (node-&gt;isLink() &amp;&amp; !result.URLElement() &amp;&amp; !node-&gt;hasTagName(imgTag))
&gt; -            result.setURLElement(static_cast&lt;Element*&gt;(node));
&gt; -        node = node-&gt;eventParentNode();
&gt; -    }
&gt; +    if (node)
&gt; +        result.setURLElement(static_cast&lt;Element*&gt;(node-&gt;enclosingAnchorNode()));

This changes the behavior of this function if result.URLElement() was already set. Can that ever happen? I think it might be possible for it to happen via nodeAtPoint() being called from RenderBlock::hitTestContents and RenderLineBoxList::hitTest. (You should see if you can come up with a testcase that demonstrates what bug the change you made causes.)

&gt; +        &lt;div id=&quot;overflow&quot; style=&quot;width:500px; height:150px; overflow:auto; border:2px solid red; padding:10px&quot;&gt;
&gt; +            &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;&quot; width=&quot;100px&quot; height=&quot;100px&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&gt; +            &lt;h1&gt;Test for &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=32399&quot;&gt;bug 32399&lt;/a&gt; This tests that middle
&gt; +            clicking on a link that is an image doesn&apos;t start to scroll.&lt;/h1&gt;

I&apos;d maybe say &quot;middle clicking on an image within a link&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173288</commentid>
    <comment_count>12</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-12-18 13:08:45 -0800</bug_when>
    <thetext>(In reply to comment #11) 
&gt; &gt; +Node* Node::enclosingAnchorNode()
&gt; 
&gt; This name is a bit misleading in two ways:
&gt; 1) The function can return &quot;this&quot;, but its name implies it can only return an
&gt; ancestor of &quot;this&quot;
&gt; 2) It can return something other than an HTMLAnchorElement, which is what it
&gt; names implies it will return.
&gt; 
&gt; I&apos;d call it enclosingLinkNodeOrSelf or enclosingURLNodeOrSelf or something like
&gt; that (enclosingLinkNode parallels isLink(), and enclosingURLNode (kind of)
&gt; parallels HitTestResult::URLElement()). In either case, I think it needs a
&gt; comment in the header explaining what it does. Maybe there&apos;s even a better name
&gt; that would be so clear it wouldn&apos;t need a comment.

Changed function title and comment to:

// The node&apos;s enclosing node or self where isLink() is true - and we are not an image (needed for image map issues).
    Node* enclosingLinkNodeOrSelf();


&gt; 
&gt; &gt; @@ -2831,9 +2844,11 @@ void Node::defaultEventHandler(Event* ev
&gt; &gt;  #if ENABLE(PAN_SCROLLING)
&gt; &gt;      } else if (eventType == eventNames().mousedownEvent) {
&gt; &gt;          MouseEvent* mouseEvent = static_cast&lt;MouseEvent*&gt;(event);
&gt; &gt; -        if (mouseEvent-&gt;button() == MiddleButton &amp;&amp; !this-&gt;isLink()) {
&gt; &gt; -            RenderObject* renderer = this-&gt;renderer();
&gt; &gt; +        if (mouseEvent-&gt;button() == MiddleButton) {
&gt; &gt; +            if (this-&gt;enclosingAnchorNode())
&gt; &gt; +                return;
&gt; 
&gt; No need for this-&gt; here.

Done.

&gt; 
&gt; &gt; +    // The node&apos;s enclosing anchor element (if it exists).
&gt; &gt; +    Node* enclosingAnchorNode();
&gt; 
&gt; This comment is incorrect, since this function doesn&apos;t always return an
&gt; HTMLAnchorElement (see, I told you the name was confusing!).
&gt; 
&gt; &gt; @@ -2346,15 +2346,10 @@ bool RenderLayer::hitTest(const HitTestR
&gt; &gt;          }
&gt; &gt;      }
&gt; &gt;  
&gt; &gt; -    // Now determine if the result is inside an anchor; make sure an image map wins if
&gt; &gt; -    // it already set URLElement and only use the innermost.
&gt; &gt; +    // Now determine if the result is inside an anchor.
&gt; &gt;      Node* node = result.innerNode();
&gt; &gt; -    while (node) {
&gt; &gt; -        // for imagemaps, URLElement is the associated area element not the image itself
&gt; &gt; -        if (node-&gt;isLink() &amp;&amp; !result.URLElement() &amp;&amp; !node-&gt;hasTagName(imgTag))
&gt; &gt; -            result.setURLElement(static_cast&lt;Element*&gt;(node));
&gt; &gt; -        node = node-&gt;eventParentNode();
&gt; &gt; -    }
&gt; &gt; +    if (node)
&gt; &gt; +        result.setURLElement(static_cast&lt;Element*&gt;(node-&gt;enclosingAnchorNode()));
&gt; 
&gt; This changes the behavior of this function if result.URLElement() was already
&gt; set. Can that ever happen? I think it might be possible for it to happen via
&gt; nodeAtPoint() being called from RenderBlock::hitTestContents and
&gt; RenderLineBoxList::hitTest. (You should see if you can come up with a testcase
&gt; that demonstrates what bug the change you made causes.)

Added a check for !result.urlElement to make sure we don&apos;t overwrite something that&apos;s already there.

&gt; 
&gt; &gt; +        &lt;div id=&quot;overflow&quot; style=&quot;width:500px; height:150px; overflow:auto; border:2px solid red; padding:10px&quot;&gt;
&gt; &gt; +            &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;&quot; width=&quot;100px&quot; height=&quot;100px&quot;&gt;&lt;/img&gt;&lt;/a&gt;
&gt; &gt; +            &lt;h1&gt;Test for &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=32399&quot;&gt;bug 32399&lt;/a&gt; This tests that middle
&gt; &gt; +            clicking on a link that is an image doesn&apos;t start to scroll.&lt;/h1&gt;
&gt; 
&gt; I&apos;d maybe say &quot;middle clicking on an image within a link&quot;.

Done.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173324</commentid>
    <comment_count>13</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-12-18 13:58:28 -0800</bug_when>
    <thetext>Landed in r52340.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45023</attachid>
            <date>2009-12-16 16:40:39 -0800</date>
            <delta_ts>2009-12-18 10:56:27 -0800</delta_ts>
            <desc>[PATCH] Fix</desc>
            <filename>middle_click_image.patch</filename>
            <type>text/plain</type>
            <size>5507</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjIyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMDktMTItMTYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZpeGVzIDxodHRwOi8vd2Via2l0Lm9yZy9iLzMyNjEzPi4KKyAgICAgICAgUkVHUkVTU0lP
TiAocjUyMDA4KTogTWlkZGxlLWNsaWNraW5nIG9uIGEgbGlua2VkIGltYWdlIHN0YXJ0cyBhIHBh
biBzY3JvbGwsCisgICAgICAgIGJ1dCBzaG91bGQgZm9sbG93IHRoZSBsaW5rIGluc3RlYWQuCisg
ICAgICAgIAorICAgICAgICBUaGUgbm9kZSBpdHNlbGYgaXNuJ3QgdGhlIG9ubHkgcG9zc2libGUg
bm9kZSB0aGF0IGNhbiBiZSBhIGxpbmsgKHRoYXQgd2FzIHRoZQorICAgICAgICBvcmlnaW5hbCBj
aGVjayksIGFueSBvZiBpdHMgYW5jZXN0b3JzIGNvdWxkIGJlIGxpbmtzIGFzIHdlbGwsIHdlIG5l
ZWQgdG8gY2xpbWIKKyAgICAgICAgdXAgdGhlIHRyZWUgdG8gc2VlLgorCisgICAgICAgIFRlc3Q6
IHBsYXRmb3JtL3dpbi9mYXN0L2V2ZW50cy9wYW5TY3JvbGwtaW1hZ2Utbm8tc2Nyb2xsLmh0bWwK
KworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlZmF1
bHRFdmVudEhhbmRsZXIpOgorCiAyMDA5LTEyLTE2ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtv
dkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4
OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNw
cAkocmV2aXNpb24gNTIyMDcpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgzMCwxNiArMjgzMCwyNiBAQCB2b2lkIE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIo
RXZlbnQqIGV2CiAjaWYgRU5BQkxFKFBBTl9TQ1JPTExJTkcpCiAgICAgfSBlbHNlIGlmIChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CiAgICAgICAgIE1vdXNlRXZl
bnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwotICAgICAg
ICBpZiAobW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTWlkZGxlQnV0dG9uICYmICF0aGlzLT5pc0xp
bmsoKSkgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChyZW5kZXJlciAmJiAoIXJlbmRlcmVyLT5pc0Jv
eCgpIHx8ICF0b1JlbmRlckJveChyZW5kZXJlciktPmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxh
YmxlQXJlYSgpKSkKLSAgICAgICAgICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQo
KTsKLQotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+c3RhcnRQYW5TY3JvbGxpbmcocmVuZGVyZXIpOwotICAgICAg
ICAgICAgfQorICAgICAgICBpZiAobW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTWlkZGxlQnV0dG9u
KSB7CisJCQlib29sIGFuY2VzdG9ySXNMaW5rID0gZmFsc2U7CisJCQlOb2RlKiBub2RlID0gdGhp
czsKKwkJCXdoaWxlIChub2RlICYmICFhbmNlc3RvcklzTGluaykgeworCQkJCWlmIChub2RlLT5p
c0xpbmsoKSkKKwkJCQkJYW5jZXN0b3JJc0xpbmsgPSB0cnVlOworCQkJCW5vZGUgPSBub2RlLT5l
dmVudFBhcmVudE5vZGUoKTsKKwkJCX0KKworCQkJaWYgKCFhbmNlc3RvcklzTGluaykgeworCQkJ
CVJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOworCisJCQkJd2hpbGUg
KHJlbmRlcmVyICYmICghcmVuZGVyZXItPmlzQm94KCkgfHwgIXRvUmVuZGVyQm94KHJlbmRlcmVy
KS0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpKQorCQkJCQlyZW5kZXJlciA9
IHJlbmRlcmVyLT5wYXJlbnQoKTsKKworCQkJCWlmIChyZW5kZXJlcikgeworCQkJCQlpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKwkJCQkJCWZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+c3RhcnRQYW5TY3JvbGxpbmcocmVuZGVyZXIpOworCQkJCX0KKwkJCX0KICAgICAgICAg
fQogI2VuZGlmCiAgICAgfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTIyMjcpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAwOS0xMi0xNiAg
QnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9u
IGFuZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9mYXN0L2V2ZW50
cy9wYW5TY3JvbGwtaW1hZ2Utbm8tc2Nyb2xsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3BhblNjcm9sbC1pbWFnZS1uby1zY3JvbGwuaHRt
bDogQWRkZWQuCisKIDIwMDktMTItMTYgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0
Lm9yZz4KIAogICAgICAgICBbUXRdIGVkaXRpbmcvc2VsZWN0aW9uL2VtcHR5LWNlbGwtcmlnaHQt
Y2xpY2suaHRtbCBpbnRyb2R1Y2VkIGluIHI1MjIyMCBmYWlsZWQuCkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvcGFuU2Nyb2xsLWltYWdlLW5vLXNjcm9sbC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZXZl
bnRzL3BhblNjcm9sbC1pbWFnZS1uby1zY3JvbGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3BhblNjcm9sbC1pbWFnZS1u
by1zY3JvbGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKworVGVz
dCBmb3IgYnVnIDMyMzk5IFRoaXMgdGVzdHMgdGhhdCBtaWRkbGUgY2xpY2tpbmcgb24gYSBsaW5r
IHRoYXQgaXMgYW4gaW1hZ2UgZG9lc24ndCBzdGFydCB0byBzY3JvbGwuCisKK1N1Y2Nlc3MhIERp
diB3aXRoIG92ZXJmbG93IHdhcyBub3Qgc2Nyb2xsZWQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9mYXN0L2V2ZW50cy9wYW5TY3JvbGwtaW1hZ2Utbm8tc2Nyb2xsLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3BhblNjcm9sbC1p
bWFnZS1uby1zY3JvbGwuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbi9mYXN0L2V2ZW50cy9wYW5TY3JvbGwtaW1hZ2Utbm8tc2Nyb2xsLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDAgQEAKKzxodG1sPg0KKyAgICA8aGVhZD4NCisgICAgICAgIDx0aXRs
ZT5QYW4gU2Nyb2xsaW5nIFRlc3Q8L3RpdGxlPg0KKyAgICA8L2hlYWQ+DQorICAgIDxib2R5Pg0K
KyAgICAgICAgPHNjcmlwdD4NCisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7DQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsNCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIDwvc2NyaXB0Pg0KKyAgICAgICAgPGRpdiBp
ZD0ib3ZlcmZsb3ciIHN0eWxlPSJ3aWR0aDo1MDBweDsgaGVpZ2h0OjE1MHB4OyBvdmVyZmxvdzph
dXRvOyBib3JkZXI6MnB4IHNvbGlkIHJlZDsgcGFkZGluZzoxMHB4Ij4NCisgICAgICAgICAgICA8
YSBocmVmPSIjIj48aW1nIHNyYz0iIiB3aWR0aD0iMTAwcHgiIGhlaWdodD0iMTAwcHgiPjwvaW1n
PjwvYT4NCisgICAgICAgICAgICA8aDE+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzk5Ij5idWcgMzIzOTk8L2E+IFRoaXMgdGVzdHMg
dGhhdCBtaWRkbGUNCisgICAgICAgICAgICBjbGlja2luZyBvbiBhIGxpbmsgdGhhdCBpcyBhbiBp
bWFnZSBkb2Vzbid0IHN0YXJ0IHRvIHNjcm9sbC48L2gxPg0KKyAgICAgICAgPC9kaXY+DQorICAg
ICAgICA8cD4NCisgICAgICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pg0KKyAgICAgICAgPHNj
cmlwdD4NCisgICAgICAgICAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKQ0KKyAgICAgICAgICAg
IHsNCisgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oNTAsIDUwKTsNCisg
ICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKDEpOw0KKyAgICAgICAgICAgICAg
ICBldmVudFNlbmRlci5tb3VzZVVwKDEpOw0KKyAgICAgICAgICAgICAgICBldmVudFNlbmRlci5t
b3VzZU1vdmVUbyg1MCwgMjAwKTsNCisgICAgICAgICAgICAgICAgc2V0VGltZW91dChmaW5pc2hl
ZCwgNTAwKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgZnVu
Y3Rpb24gZmluaXNoZWQoKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgaWYgKCFk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3ZlcmZsb3cnKS5zY3JvbGxUb3ApDQorICAgICAgICAg
ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9
ICJTdWNjZXNzISBEaXYgd2l0aCBvdmVyZmxvdyB3YXMgbm90IHNjcm9sbGVkIjsNCisgICAgICAg
ICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgPSAiRmFpbCEgRGl2IHdpdGggb3ZlcmZsb3cgd2FzIHNj
cm9sbGVkIjsNCisgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAg
PC9zY3JpcHQ+DQorICAgIDwvYm9keT4NCis8L2h0bWw+DQo=
</data>
<flag name="review"
          id="26980"
          type_id="1"
          status="-"
          setter="aroben"
    />
    <flag name="commit-queue"
          id="26981"
          type_id="3"
          status="-"
          setter="bweinstein"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45163</attachid>
            <date>2009-12-18 10:56:27 -0800</date>
            <delta_ts>2009-12-18 12:57:52 -0800</delta_ts>
            <desc>[PATCH] Fix with some refactoring + image map tests</desc>
            <filename>middle_click_image.patch</filename>
            <type>text/plain</type>
            <size>13720</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjMyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDktMTItMTggIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZpeGVzIDxodHRwOi8vd2Via2l0Lm9yZy9iLzMyNjEzPi4KKyAgICAgICAgUkVHUkVTU0lP
TiAocjUyMDA4KTogTWlkZGxlLWNsaWNraW5nIG9uIGEgbGlua2VkIGltYWdlIHN0YXJ0cyBhIHBh
biBzY3JvbGwsCisgICAgICAgIGJ1dCBzaG91bGQgZm9sbG93IHRoZSBsaW5rIGluc3RlYWQuCisK
KyAgICAgICAgVGhlIG5vZGUgaXRzZWxmIGlzbid0IHRoZSBvbmx5IHBvc3NpYmxlIG5vZGUgdGhh
dCBjYW4gYmUgYSBsaW5rICh0aGF0IHdhcyB0aGUKKyAgICAgICAgb3JpZ2luYWwgY2hlY2spLCBh
bnkgb2YgaXRzIGFuY2VzdG9ycyBjb3VsZCBiZSBsaW5rcyBhcyB3ZWxsLCB3ZSBuZWVkIHRvIGNs
aW1iCisgICAgICAgIHVwIHRoZSB0cmVlIHRvIHNlZS4gQ3JlYXRlZCBhIG5ldyBmdW5jdGlvbiAo
ZW5jbG9zaW5nQW5jaG9yTm9kZSksIHRoYXQgZmluZHMgYQorICAgICAgICBub2RlJ3MgZW5jbG9z
aW5nIGFuY2hvciBlbGVtZW50IChpZiBpdCBleGlzdHMpLCB0aGF0IHdlIGNhbiBzaGFyZSBiZXR3
ZWVuIFJlbmRlckxheWVyCisgICAgICAgIGFuZCBOb2RlLCBhbmQgYWxzbyBhZGRlZCB0ZXN0cyB0
aGF0IHRlc3QgcGFuIHNjcm9sbGluZyBiZWhhdmlvciBpbiBpbWFnZSBtYXBzLgorCisgICAgICAg
IFRlc3RzOiBwbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvcGFuU2Nyb2xsLWltYWdlLW5vLXNjcm9s
bC5odG1sCisgICAgICAgICAgICAgICBwbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvcGFuU2Nyb2xs
LWltYWdlTWFwLWhyZWYtbm8tc2Nyb2xsLmh0bWwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL3dp
bi9mYXN0L2V2ZW50cy9wYW5TY3JvbGwtaW1hZ2VNYXAtbm9IcmVmLXNjcm9sbC5odG1sCisKKyAg
ICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjplbmNsb3NpbmdB
bmNob3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIp
OgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKwogMjAwOS0x
Mi0xOCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgR1RLIGJ1aWxk
IGZpeApJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHJldmlzaW9uIDUyMjMxKQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyODgsNiArMjI4OCwxOSBAQCBDb250YWluZXJOb2RlKiBOb2RlOjpl
dmVudFBhcmVudE5vZGUoKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb250YWluZXJOb2RlKj4o
cGFyZW50KTsKIH0KIAorTm9kZSogTm9kZTo6ZW5jbG9zaW5nQW5jaG9yTm9kZSgpCit7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPmV2ZW50UGFyZW50Tm9k
ZSgpKSB7CisgICAgICAgIC8vIEZvciBpbWFnZW1hcHMsIHRoZSBlbmNsb3NpbmcgbGluayBub2Rl
IGlzIHRoZSBhc3NvY2lhdGVkIGFyZWEgZWxlbWVudCBub3QgdGhlIGltYWdlIGl0c2VsZi4KKyAg
ICAgICAgLy8gU28gd2UgZG9uJ3QgbGV0IGltYWdlcyBiZSB0aGUgZW5jbG9zaW5nTGlua05vZGUs
IGV2ZW4gdGhvdWdoIGlzTGluayBzb21ldGltZXMgcmV0dXJucyB0cnVlCisgICAgICAgIC8vIGZv
ciB0aGVtLgorICAgICAgICBpZiAobm9kZS0+aXNMaW5rKCkgJiYgIW5vZGUtPmhhc1RhZ05hbWUo
aW1nVGFnKSkKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIHJldHVybiAw
OworfQorCiAvLyAtLS0tLS0tLQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBOb2RlOjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKQEAgLTI4MzEsOSArMjg0NCwxMSBAQCB2b2lkIE5v
ZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2CiAjaWYgRU5BQkxFKFBBTl9TQ1JPTExJ
TkcpCiAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2
ZW50KSB7CiAgICAgICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50Kj4oZXZlbnQpOwotICAgICAgICBpZiAobW91c2VFdmVudC0+YnV0dG9uKCkgPT0gTWlk
ZGxlQnV0dG9uICYmICF0aGlzLT5pc0xpbmsoKSkgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CisgICAgICAgIGlmIChtb3VzZUV2ZW50LT5i
dXR0b24oKSA9PSBNaWRkbGVCdXR0b24pIHsKKyAgICAgICAgICAgIGlmICh0aGlzLT5lbmNsb3Np
bmdBbmNob3JOb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIHdo
aWxlIChyZW5kZXJlciAmJiAoIXJlbmRlcmVyLT5pc0JveCgpIHx8ICF0b1JlbmRlckJveChyZW5k
ZXJlciktPmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKSkKICAgICAgICAgICAg
ICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKIApJbmRleDogV2ViQ29yZS9kb20v
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gNTIyMzEp
CisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw2ICsyMDYsOSBA
QCBwdWJsaWM6CiAgICAgLy8gVGhlIG5vZGUncyBwYXJlbnQgZm9yIHRoZSBwdXJwb3NlIG9mIGV2
ZW50IGNhcHR1cmUgYW5kIGJ1YmJsaW5nLgogICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZSogZXZl
bnRQYXJlbnROb2RlKCk7CiAKKyAgICAvLyBUaGUgbm9kZSdzIGVuY2xvc2luZyBhbmNob3IgZWxl
bWVudCAoaWYgaXQgZXhpc3RzKS4KKyAgICBOb2RlKiBlbmNsb3NpbmdBbmNob3JOb2RlKCk7CisK
ICAgICAvLyBOb2RlIGFuY2VzdG9ycyB3aGVuIGNvbmNlcm5lZCBhYm91dCBldmVudCBmbG93CiAg
ICAgdm9pZCBldmVudEFuY2VzdG9ycyhWZWN0b3I8UmVmUHRyPENvbnRhaW5lck5vZGU+ID4gJmFu
Y2VzdG9ycyk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDUy
MjMxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzQ2LDE1ICsyMzQ2LDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3Qg
SGl0VGVzdFIKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIE5vdyBkZXRlcm1pbmUgaWYgdGhl
IHJlc3VsdCBpcyBpbnNpZGUgYW4gYW5jaG9yOyBtYWtlIHN1cmUgYW4gaW1hZ2UgbWFwIHdpbnMg
aWYKLSAgICAvLyBpdCBhbHJlYWR5IHNldCBVUkxFbGVtZW50IGFuZCBvbmx5IHVzZSB0aGUgaW5u
ZXJtb3N0LgorICAgIC8vIE5vdyBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdCBpcyBpbnNpZGUgYW4g
YW5jaG9yLgogICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7Ci0gICAgd2hpbGUg
KG5vZGUpIHsKLSAgICAgICAgLy8gZm9yIGltYWdlbWFwcywgVVJMRWxlbWVudCBpcyB0aGUgYXNz
b2NpYXRlZCBhcmVhIGVsZW1lbnQgbm90IHRoZSBpbWFnZSBpdHNlbGYKLSAgICAgICAgaWYgKG5v
ZGUtPmlzTGluaygpICYmICFyZXN1bHQuVVJMRWxlbWVudCgpICYmICFub2RlLT5oYXNUYWdOYW1l
KGltZ1RhZykpCi0gICAgICAgICAgICByZXN1bHQuc2V0VVJMRWxlbWVudChzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSkpOwotICAgICAgICBub2RlID0gbm9kZS0+ZXZlbnRQYXJlbnROb2RlKCk7
Ci0gICAgfQorICAgIGlmIChub2RlKQorICAgICAgICByZXN1bHQuc2V0VVJMRWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZS0+ZW5jbG9zaW5nQW5jaG9yTm9kZSgpKSk7CiAKICAgICAv
LyBOZXh0IHNldCB1cCB0aGUgY29ycmVjdCA6aG92ZXIvOmFjdGl2ZSBzdGF0ZSBhbG9uZyB0aGUg
bmV3IGNoYWluLgogICAgIHVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUocmVxdWVzdCwgcmVzdWx0KTsK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyMzIzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMTItMTggIEJyaWFuIFdlaW5zdGVpbiAg
PGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgRml4ZXMgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzI2MTM+
LgorICAgICAgICBSRUdSRVNTSU9OIChyNTIwMDgpOiBNaWRkbGUtY2xpY2tpbmcgb24gYSBsaW5r
ZWQgaW1hZ2Ugc3RhcnRzIGEgcGFuIHNjcm9sbCwKKyAgICAgICAgYnV0IHNob3VsZCBmb2xsb3cg
dGhlIGxpbmsgaW5zdGVhZC4KKworICAgICAgICBBZGRlZCB0ZXN0cyB0aGF0IHRlc3QgcGFuIHNj
cm9sbGluZyBiZWhhdmlvciB3aGVuIHlvdSBtaWRkbGUgY2xpY2sgb24gaW1hZ2VzIHdpdGgKKyAg
ICAgICAgbGlua3MsIGFuZCBpZiB5b3UgY2xpY2sgb24gcGFydHMgb24gaW1hZ2UgbWFwcyB0aGF0
IGFyZSBsaW5rcywgYW5kIHRoYXQgYXJlbid0LgorCisgICAgICAgICogcGxhdGZvcm0vd2luL2Zh
c3QvZXZlbnRzL3BhblNjcm9sbC1pbWFnZS1uby1zY3JvbGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvcGFuU2Nyb2xsLWltYWdlLW5vLXNj
cm9sbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvcGFu
U2Nyb2xsLWltYWdlTWFwLWhyZWYtbm8tc2Nyb2xsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3BhblNjcm9sbC1pbWFnZU1hcC1ocmVmLW5v
LXNjcm9sbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMv
cGFuU2Nyb2xsLWltYWdlTWFwLW5vSHJlZi1zY3JvbGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvcGFuU2Nyb2xsLWltYWdlTWFwLW5vSHJl
Zi1zY3JvbGwuaHRtbDogQWRkZWQuCisKIDIwMDktMTItMTggIFNodSBDaGFuZyAgPENoYW5nLlNo
dUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvcGFuU2Nyb2xsLWltYWdlLW5vLXNj
cm9sbC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L2Zhc3QvZXZlbnRzL3BhblNjcm9sbC1pbWFnZS1uby1zY3JvbGwtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3BhblNjcm9s
bC1pbWFnZS1uby1zY3JvbGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQg
QEAKKworVGVzdCBmb3IgYnVnIDMyMzk5IFRoaXMgdGVzdHMgdGhhdCBtaWRkbGUgY2xpY2tpbmcg
b24gYSBsaW5rIHRoYXQgaXMgYW4gaW1hZ2UgZG9lc24ndCBzdGFydCB0byBzY3JvbGwuCisKK1N1
Y2Nlc3MhIERpdiB3aXRoIG92ZXJmbG93IHdhcyBub3Qgc2Nyb2xsZWQKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL3dpbi9mYXN0L2V2ZW50cy9wYW5TY3JvbGwtaW1hZ2Utbm8tc2Nyb2xsLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3Bh
blNjcm9sbC1pbWFnZS1uby1zY3JvbGwuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9mYXN0L2V2ZW50cy9wYW5TY3JvbGwtaW1hZ2Utbm8tc2Nyb2xsLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKzxodG1sPg0KKyAgICA8aGVhZD4NCisgICAg
ICAgIDx0aXRsZT5QYW4gU2Nyb2xsaW5nIFRlc3Q8L3RpdGxlPg0KKyAgICA8L2hlYWQ+DQorICAg
IDxib2R5Pg0KKyAgICAgICAgPHNjcmlwdD4NCisgICAgICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7DQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsNCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIDwvc2NyaXB0Pg0KKyAgICAg
ICAgPGRpdiBpZD0ib3ZlcmZsb3ciIHN0eWxlPSJ3aWR0aDo1MDBweDsgaGVpZ2h0OjE1MHB4OyBv
dmVyZmxvdzphdXRvOyBib3JkZXI6MnB4IHNvbGlkIHJlZDsgcGFkZGluZzoxMHB4Ij4NCisgICAg
ICAgICAgICA8YSBocmVmPSIjIj48aW1nIHNyYz0iIiB3aWR0aD0iMTAwcHgiIGhlaWdodD0iMTAw
cHgiPjwvaW1nPjwvYT4NCisgICAgICAgICAgICA8aDE+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMzk5Ij5idWcgMzIzOTk8L2E+IFRo
aXMgdGVzdHMgdGhhdCBtaWRkbGUNCisgICAgICAgICAgICBjbGlja2luZyBvbiBhIGxpbmsgdGhh
dCBpcyBhbiBpbWFnZSBkb2Vzbid0IHN0YXJ0IHRvIHNjcm9sbC48L2gxPg0KKyAgICAgICAgPC9k
aXY+DQorICAgICAgICA8cD4NCisgICAgICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pg0KKyAg
ICAgICAgPHNjcmlwdD4NCisgICAgICAgICAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKQ0KKyAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oNTAs
IDUwKTsNCisgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKDEpOw0KKyAgICAg
ICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKDEpOw0KKyAgICAgICAgICAgICAgICBldmVu
dFNlbmRlci5tb3VzZU1vdmVUbyg1MCwgMjAwKTsNCisgICAgICAgICAgICAgICAgc2V0VGltZW91
dChmaW5pc2hlZCwgNTAwKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgDQorICAgICAg
ICAgICAgZnVuY3Rpb24gZmluaXNoZWQoKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAg
ICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3ZlcmZsb3cnKS5zY3JvbGxUb3ApDQor
ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlu
bmVySFRNTCA9ICJTdWNjZXNzISBEaXYgd2l0aCBvdmVyZmxvdyB3YXMgbm90IHNjcm9sbGVkIjsN
CisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lckhUTUwgPSAiRmFpbCEgRGl2IHdpdGggb3ZlcmZs
b3cgd2FzIHNjcm9sbGVkIjsNCisgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7DQorICAgICAgICAgICAgfQ0K
KyAgICAgICAgPC9zY3JpcHQ+DQorICAgIDwvYm9keT4NCis8L2h0bWw+DQpJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3BhblNjcm9sbC1pbWFnZU1hcC1ocmVmLW5v
LXNjcm9sbC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL2Zhc3QvZXZlbnRzL3BhblNjcm9sbC1pbWFnZU1hcC1ocmVmLW5vLXNjcm9sbC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vZmFzdC9ldmVu
dHMvcGFuU2Nyb2xsLWltYWdlTWFwLWhyZWYtbm8tc2Nyb2xsLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0IEBACisgCitUZXN0IGZvciBidWcgMzI2MTMgVGhpcyB0ZXN0cyB0
aGF0IG1pZGRsZSBjbGlja2luZyBvbiB0aGUgcGFydCBvZiBhbiBpbWFnZSBtYXAgdGhhdCBkb2Vz
IGhhdmUgYSBsaW5rIHdpbGwgbm90IHNjcm9sbC4KKworU3VjY2VzcyEgRGl2IHdpdGggb3ZlcmZs
b3cgd2FzIG5vdCBzY3JvbGxlZApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3Qv
ZXZlbnRzL3BhblNjcm9sbC1pbWFnZU1hcC1ocmVmLW5vLXNjcm9sbC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9mYXN0L2V2ZW50cy9wYW5TY3JvbGwtaW1hZ2VN
YXAtaHJlZi1uby1zY3JvbGwuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9mYXN0L2V2ZW50cy9wYW5TY3JvbGwtaW1hZ2VNYXAtaHJlZi1uby1zY3JvbGwuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorPGh0bWw+DQorICAgIDxoZWFkPg0KKyAg
ICAgICAgPHRpdGxlPlBhbiBTY3JvbGxpbmcgVGVzdDwvdGl0bGU+DQorICAgIDwvaGVhZD4NCisg
ICAgPGJvZHk+DQorICAgICAgICA8c2NyaXB0Pg0KKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsNCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOw0KKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgPC9zY3JpcHQ+DQorICAg
ICAgICA8ZGl2IGlkPSJvdmVyZmxvdyIgc3R5bGU9IndpZHRoOjUwMHB4OyBoZWlnaHQ6MTUwcHg7
IG92ZXJmbG93OmF1dG87IGJvcmRlcjoycHggc29saWQgcmVkOyBwYWRkaW5nOjEwcHgiPg0KKyAg
ICAgICAgICAgIDxtYXAgbmFtZT0ibmF2TWFwIj4NCisgICAgICAgICAgICAgICAgPGFyZWEgc2hh
cGU9cmVjdCBjb29yZHM9IjAsMCwxMDAsNTAiIGhyZWY9IiI+IA0KKyAgICAgICAgICAgIDwvbWFw
Pg0KKyAgICAgICAgICAgIDxpbWcgYm9yZGVyPSIyIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIg
dXNlbWFwPSIjbmF2bWFwIiBpc21hcD4NCisgICAgICAgICAgICA8aDE+VGVzdCBmb3IgPGEgaHJl
Zj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNjEzIj5idWcgMzI2
MTM8L2E+IFRoaXMgdGVzdHMgdGhhdCBtaWRkbGUNCisgICAgICAgICAgICBjbGlja2luZyBvbiB0
aGUgcGFydCBvZiBhbiBpbWFnZSBtYXAgdGhhdCBkb2VzIGhhdmUgYSBsaW5rIHdpbGwgbm90IHNj
cm9sbC48L2gxPg0KKyAgICAgICAgPC9kaXY+DQorICAgICAgICA8cD4NCisgICAgICAgIDxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2Pg0KKyAgICAgICAgPHNjcmlwdD4NCisgICAgICAgICAgICBpZiAo
d2luZG93LmV2ZW50U2VuZGVyKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgLy8g
NTAsIDUwIGlzIGluc2lkZSB0aGUgYXJlYSBwYXJ0IG9mIHRoZSBtYXAgd2l0aCB0aGUgaHJlZi4N
CisgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oNTAsIDUwKTsNCisgICAg
ICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKDEpOw0KKyAgICAgICAgICAgICAgICBl
dmVudFNlbmRlci5tb3VzZU1vdmVUbyg1MCwgMjAwKTsNCisgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dChmaW5pc2hlZCwgNTAwKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgDQorICAg
ICAgICAgICAgZnVuY3Rpb24gZmluaXNoZWQoKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgxKTsNCisgICAgICAgICAgICAgICAgaWYgKCFkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnb3ZlcmZsb3cnKS5zY3JvbGxUb3ApDQorICAgICAgICAgICAg
ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVySFRNTCA9ICJT
dWNjZXNzISBEaXYgd2l0aCBvdmVyZmxvdyB3YXMgbm90IHNjcm9sbGVkIjsNCisgICAgICAgICAg
ICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnNvbGUnKS5pbm5lckhUTUwgPSAiRmFpbCEgRGl2IHdpdGggb3ZlcmZsb3cgd2FzIHNjcm9s
bGVkIjsNCisgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgPC9z
Y3JpcHQ+DQorICAgIDwvYm9keT4NCis8L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luL2Zhc3QvZXZlbnRzL3BhblNjcm9sbC1pbWFnZU1hcC1ub0hyZWYtc2Nyb2xsLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vZmFzdC9ldmVu
dHMvcGFuU2Nyb2xsLWltYWdlTWFwLW5vSHJlZi1zY3JvbGwtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3BhblNjcm9sbC1p
bWFnZU1hcC1ub0hyZWYtc2Nyb2xsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0IEBACisgCitUZXN0IGZvciBidWcgMzI2MTMgVGhpcyB0ZXN0cyB0aGF0IG1pZGRsZSBjbGlj
a2luZyBvbiB0aGUgcGFydCBvZiBhbiBpbWFnZSBtYXAgdGhhdCBkb2Vzbid0IGhhdmUgYSBsaW5r
IHdpbGwgc2Nyb2xsLgorCitTdWNjZXNzISBEaXYgd2l0aCBvdmVyZmxvdyB3YXMgc2Nyb2xsZWQK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9mYXN0L2V2ZW50cy9wYW5TY3JvbGwtaW1h
Z2VNYXAtbm9IcmVmLXNjcm9sbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9mYXN0L2V2ZW50cy9wYW5TY3JvbGwtaW1hZ2VNYXAtbm9IcmVmLXNjcm9sbC5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3Bh
blNjcm9sbC1pbWFnZU1hcC1ub0hyZWYtc2Nyb2xsLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDQgQEAKKzxodG1sPg0KKyAgICA8aGVhZD4NCisgICAgICAgIDx0aXRsZT5QYW4gU2Nyb2xs
aW5nIFRlc3Q8L3RpdGxlPg0KKyAgICA8L2hlYWQ+DQorICAgIDxib2R5Pg0KKyAgICAgICAgPHNj
cmlwdD4NCisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7DQor
ICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsNCisgICAg
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOw0KKyAgICAg
ICAgICAgIH0NCisgICAgICAgIDwvc2NyaXB0Pg0KKyAgICAgICAgPGRpdiBpZD0ib3ZlcmZsb3ci
IHN0eWxlPSJ3aWR0aDo1MDBweDsgaGVpZ2h0OjE1MHB4OyBvdmVyZmxvdzphdXRvOyBib3JkZXI6
MnB4IHNvbGlkIHJlZDsgcGFkZGluZzoxMHB4Ij4NCisgICAgICAgICAgICA8bWFwIG5hbWU9Im5h
dk1hcCI+DQorICAgICAgICAgICAgICAgIDxhcmVhIHNoYXBlPXJlY3QgY29vcmRzPSIwLDAsMTAw
LDUwIiBocmVmPSIiPiANCisgICAgICAgICAgICA8L21hcD4NCisgICAgICAgICAgICA8aW1nIGJv
cmRlcj0iMiIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHVzZW1hcD0iI25hdm1hcCIgaXNtYXA+
DQorICAgICAgICAgICAgPGgxPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMjYxMyI+YnVnIDMyNjEzPC9hPiBUaGlzIHRlc3RzIHRoYXQg
bWlkZGxlDQorICAgICAgICAgICAgY2xpY2tpbmcgb24gdGhlIHBhcnQgb2YgYW4gaW1hZ2UgbWFw
IHRoYXQgZG9lc24ndCBoYXZlIGEgbGluayB3aWxsIHNjcm9sbC48L2gxPg0KKyAgICAgICAgPC9k
aXY+DQorICAgICAgICA8cD4NCisgICAgICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pg0KKyAg
ICAgICAgPHNjcmlwdD4NCisgICAgICAgICAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKQ0KKyAg
ICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgLy8gNTAsIDEwMCBpcyBub3QgaW5zaWRlIHRo
ZSBhcmVhIHBhcnQgb2YgdGhlIG1hcCB3aXRoIHRoZSBocmVmIChidXQgaXMgaW4gdGhlIGltYWdl
IG1hcCkuDQorICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDUwLCAxMDAp
Ow0KKyAgICAgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZURvd24oMSk7DQorICAgICAgICAg
ICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDUwLCAyMDApOw0KKyAgICAgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZpbmlzaGVkLCA1MDApOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAg
ICANCisgICAgICAgICAgICBmdW5jdGlvbiBmaW5pc2hlZCgpDQorICAgICAgICAgICAgew0KKyAg
ICAgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKDEpOw0KKyAgICAgICAgICAgICAgICBp
ZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdmVyZmxvdycpLnNjcm9sbFRvcCkNCisgICAg
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJI
VE1MID0gIlN1Y2Nlc3MhIERpdiB3aXRoIG92ZXJmbG93IHdhcyBzY3JvbGxlZCI7DQorICAgICAg
ICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjb25zb2xlJykuaW5uZXJIVE1MID0gIkZhaWwhIERpdiB3aXRoIG92ZXJmbG93IHdhcyBu
b3Qgc2Nyb2xsZWQiOw0KKyAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgd2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsNCisgICAgICAgICAgICB9DQorICAg
ICAgICA8L3NjcmlwdD4NCisgICAgPC9ib2R5Pg0KKzwvaHRtbD4NCg==
</data>
<flag name="review"
          id="27141"
          type_id="1"
          status="+"
          setter="aroben"
    />
    <flag name="commit-queue"
          id="27142"
          type_id="3"
          status="-"
          setter="bweinstein"
    />
          </attachment>
      

    </bug>

</bugzilla>