<?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>106929</bug_id>
          
          <creation_ts>2013-01-15 11:12:03 -0800</creation_ts>
          <short_desc>Text Autosizing: extend preOrderTraversal to handle different traversal modes</short_desc>
          <delta_ts>2013-03-01 02:50:16 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>84186</blocked>
    
    <blocked>106792</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter>timvolodine</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>johnme</cc>
    
    <cc>kenneth</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>timvolodine</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>807481</commentid>
    <comment_count>0</comment_count>
    <who name="">timvolodine</who>
    <bug_when>2013-01-15 11:12:03 -0800</bug_when>
    <thetext>Text Autosizing: extend preOrderTraversal to handle different traversal modes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807486</commentid>
    <comment_count>1</comment_count>
      <attachid>182813</attachid>
    <who name="">timvolodine</who>
    <bug_when>2013-01-15 11:13:31 -0800</bug_when>
    <thetext>Created attachment 182813
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807535</commentid>
    <comment_count>2</comment_count>
      <attachid>182813</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2013-01-15 11:55:21 -0800</bug_when>
    <thetext>Comment on attachment 182813
Patch

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

Cool, this is a nice cleanup and lets us do more powerful traversals (like bug 106792 is trying to do). Kenneth/Julien, does this look good?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:299
&gt; +            (renderer == container) ? NormalTraversal : SkipDescendantsOfContainers);

Nit: WebKit doesn&apos;t often wrap long lines (except comments). Perhaps break this into two lines, where the first line sets a temporary |traversalMode| variable?

&gt; Source/WebCore/rendering/TextAutosizer.h:60
&gt; +    enum TraversalMode {

Nit: perhaps TraversalFilter would be clearer? Don&apos;t mind, your call...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807538</commentid>
    <comment_count>3</comment_count>
      <attachid>182813</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2013-01-15 11:57:48 -0800</bug_when>
    <thetext>Comment on attachment 182813
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests (OOPS!).

Please change this to e.g. &quot;Existing tests confirm that there is no change in functionality.&quot; to confirm that you have thought about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807660</commentid>
    <comment_count>4</comment_count>
      <attachid>182813</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2013-01-15 13:50:08 -0800</bug_when>
    <thetext>Comment on attachment 182813
Patch

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

I would need more context to understand how this patch helps in any ways. Adding an extra parameter doesn&apos;t seem to be much of a win compared keeping separated methods as it makes the code easier to misread or misuse but also makes the code less readable (more parameters and your traversal function becomes a swiss-knife function)

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:299
&gt;&gt; +            (renderer == container) ? NormalTraversal : SkipDescendantsOfContainers);
&gt; 
&gt; Nit: WebKit doesn&apos;t often wrap long lines (except comments). Perhaps break this into two lines, where the first line sets a temporary |traversalMode| variable?

This seems to be a change in behavior as you could skip descendants where you didn&apos;t before: you will only skip descendants if renderer == container &amp;&amp; isAutosizingContainer(renderer) where it used to be only isAutosizingContainer(renderer)

&gt; Source/WebCore/rendering/TextAutosizer.cpp:-366
&gt; -    if (current == stayWithin || !isAutosizingContainer(current))

You removed the stayWithin check which means that you can potentially continue iterating if (current == stayWithin)

&gt; Source/WebCore/rendering/TextAutosizer.cpp:367
&gt; +    bool skipChildren = (mode == SkipDescendants) || (mode == SkipDescendantsOfContainers &amp;&amp; isAutosizingContainer(current));

Per our style guide: Precede boolean values with words like &quot;is&quot; and &quot;did&quot;.

I think |shouldSkipChildren| would be more readable.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:371
&gt; +        RenderObject* child = current-&gt;firstChild();
&gt; +        if (child)

if (RenderObject* child = current-&gt;firstChild())
    return child;

&gt; Source/WebCore/rendering/TextAutosizer.cpp:379
&gt; +        RenderObject* sibling = ancestor-&gt;nextSibling();
&gt; +        if (sibling)

Again it should be on one line.

&gt; Source/WebCore/rendering/TextAutosizer.h:62
&gt; +        SkipDescendants,

This new mode is not explained anywhere nor used. I would be more supportive to postpone adding it until it&apos;s actually used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807696</commentid>
    <comment_count>5</comment_count>
      <attachid>182813</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-15 14:28:53 -0800</bug_when>
    <thetext>Comment on attachment 182813
Patch

Why are you doing this? I don’t agree that this is a step in the right direction.

This is makes render tree traversal less like the traversal we do for the DOM tree. But instead we want it to be more like the DOM tree traversal. I really like the work Antti has done in NodeTraversal.h and I’d like to see our render tree traversal use similar patterns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807697</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-15 14:29:16 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I would need more context to understand how this patch helps in any ways. Adding an extra parameter doesn&apos;t seem to be much of a win compared keeping separated methods as it makes the code easier to misread or misuse but also makes the code less readable (more parameters and your traversal function becomes a swiss-knife function)

I agree with this 100%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807819</commentid>
    <comment_count>7</comment_count>
      <attachid>182813</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2013-01-15 16:45:21 -0800</bug_when>
    <thetext>Comment on attachment 182813
Patch

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

(In reply to comment #5)
&gt; This is makes render tree traversal less like the traversal we do for the DOM tree. But instead we want it to be more like the DOM tree traversal. I really like the work Antti has done in NodeTraversal.h and I’d like to see our render tree traversal use similar patterns.

There may have been a slight mis-communication: this wasn&apos;t modifying the core render tree traversal functions defined in RenderObject.h, but merely Text Autosizing&apos;s private traversal function. But I agree that we should try to stay in sync with the core traversal functions, and avoid unnecessary duplication.

(In reply to comment #4)
&gt; I would need more context to understand how this patch helps in any ways.

Agree, more explanation would have been helpful. The current patch to bug 106792 uses a custom tree traversal function because it wants to traverse the descendants of a container, skipping descendants of renderers that are themselves containers (so far this is identical to nextInPreOrderSkippingDescendantsOfContainers), but it also wants to skip descendants of &lt;a&gt; elements. Currently nextInPreOrderSkippingDescendantsOfContainers doesn&apos;t provide any easy way of skipping arbitrary subtrees, and it seemed a feature that might be useful in other places too, so I suggested that Tim make nextInPreOrderSkippingDescendantsOfContainers slightly more flexible.

In hindsight I realise that this was unnecessary, as I&apos;d forgotten that RenderObject.h provides nextInPreOrderAfterChildren(stayWithin) which has exactly the functionality needed for this case. So this patch can probably be dropped.

Instead, to reduce duplication, at some point we might want to reimplement nextInPreOrderSkippingDescendantsOfContainers as simply:

RenderObject* TextAutosizer::nextInPreOrderSkippingDescendantsOfContainers(const RenderObject* current, const RenderObject* stayWithin)
{
    if (current == stayWithin || !isAutosizingContainer(current))
        return current-&gt;nextInPreOrder(stayWithin);
    return current-&gt;nextInPreOrderAfterChildren(stayWithin);
}

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:-366
&gt;&gt; -    if (current == stayWithin || !isAutosizingContainer(current))
&gt; 
&gt; You removed the stayWithin check which means that you can potentially continue iterating if (current == stayWithin)

For the record, no, this stayWithin check was because while we normally want to skip descendants of containers, we usually start a traversal by passing in a container as |current|, and in that specific case we didn&apos;t want to skip descendants of containers (because the whole point is to traverse the container). Instead Tim used NormalTraversal when starting the traversals above, so this special case was no longer necessary which is arguably cleaner (though might make it easier to misuse the traversal?).

The stayWithin check in the for loop below is the one that actually enforces the stayWithin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812113</commentid>
    <comment_count>8</comment_count>
    <who name="">timvolodine</who>
    <bug_when>2013-01-21 06:49:26 -0800</bug_when>
    <thetext>decided to take a different approach, closing this bug.
the simplified implementation of nextInPreOrderSkippingDescendantsOfContainers (as outlined above) is now covered in https://bugs.webkit.org/show_bug.cgi?id=107446.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844981</commentid>
    <comment_count>9</comment_count>
      <attachid>182813</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-01 02:50:16 -0800</bug_when>
    <thetext>Comment on attachment 182813
Patch

Cleared review? from attachment 182813 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182813</attachid>
            <date>2013-01-15 11:13:31 -0800</date>
            <delta_ts>2013-03-01 02:50:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106929-20130115191032.patch</filename>
            <type>text/plain</type>
            <size>6185</size>
            <attacher>timvolodine</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5Njk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMThhZmJlNTIwYjYxNWIz
MmI1NWE0NDgzMmExNmE5YWYzNjJkMWMwZi4uMjM4YjVjNTA2MTNmYWU5NTc3MzhiOGFhMjM1NThj
YTQzNDI4NGZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTAxLTE1ICBUaW0g
Vm9sb2RpbmUgIDx0aW12b2xvZGluZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGV4dCBBdXRv
c2l6aW5nOiBleHRlbmQgcHJlT3JkZXJUcmF2ZXJzYWwgdG8gaGFuZGxlIGRpZmZlcmVudCB0cmF2
ZXJzYWwgbW9kZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwNjkyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRv
c2l6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRh
aW5lcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpjb250YWluZXJDb250YWlu
c09uZU9mVGFncyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVz
Y2VuZGFudFRleHRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpuZXh0
SW5QcmVPcmRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaDoKKwogMjAx
My0wMS0xNCAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
Um9sbGluZyBvdXQgcjEzOTYxOC4gQXBwZWFycyB0byBiZSBjYXVzaW5nIHNwb3JhZGljIGNyYXNo
ZXMgb24gRGVidWcgYm90cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0QXV0b3NpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVy
LmNwcAppbmRleCBjZDFiNWZhZjM4OTg2ZDJjMjRlNmY4ZDZkNGIxNjRhZWFjMGNkOWJiLi5iOTRi
ZDc5MzgzOWY1OTgzYzgwNTUwZGI4MWE4ZGY1N2JjZDI3N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBUZXh0
QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJsb2Nr
KiBjb250YWluZXIsIGMKIAogICAgIGZsb2F0IGxvY2FsTXVsdGlwbGllciA9IGNvbnRhaW5lclNo
b3VsZEJlQXV0b3NpemVkKGNvbnRhaW5lcikgPyBtdWx0aXBsaWVyOiAxOwogCi0gICAgUmVuZGVy
T2JqZWN0KiBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZD
b250YWluZXJzKHN1YnRyZWVSb290LCBzdWJ0cmVlUm9vdCk7CisgICAgUmVuZGVyT2JqZWN0KiBk
ZXNjZW5kYW50ID0gbmV4dEluUHJlT3JkZXIoc3VidHJlZVJvb3QsIHN1YnRyZWVSb290LCBOb3Jt
YWxUcmF2ZXJzYWwpOwogICAgIHdoaWxlIChkZXNjZW5kYW50KSB7CiAgICAgICAgIGlmIChkZXNj
ZW5kYW50LT5pc1RleHQoKSkgewogICAgICAgICAgICAgaWYgKGxvY2FsTXVsdGlwbGllciAhPSBk
ZXNjZW5kYW50LT5zdHlsZSgpLT50ZXh0QXV0b3NpemluZ011bHRpcGxpZXIoKSkgewpAQCAtMTU2
LDcgKzE1Niw3IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBt
dWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjCiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lcihtdWx0aXBsaWVyLCBkZXNjZW5kYW50Qmxv
Y2ssIGJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGRlc2NlbmRhbnRCbG9jaywgd2luZG93SW5mbyk7
CiAgICAgICAgIH0KLSAgICAgICAgZGVzY2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdE
ZXNjZW5kYW50c09mQ29udGFpbmVycyhkZXNjZW5kYW50LCBzdWJ0cmVlUm9vdCk7CisgICAgICAg
IGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRlcihkZXNjZW5kYW50LCBzdWJ0cmVlUm9vdCwgU2tp
cERlc2NlbmRhbnRzT2ZDb250YWluZXJzKTsKICAgICB9CiB9CiAKQEAgLTI5NSw3ICsyOTUsOCBA
QCBib29sIFRleHRBdXRvc2l6ZXI6OmNvbnRhaW5lckNvbnRhaW5zT25lT2ZUYWdzKGNvbnN0IFJl
bmRlckJsb2NrKiBjb250YWluZXIsIGNvbgogICAgICAgICAgICAgaWYgKHRhZ3MuY29udGFpbnMo
dG9FbGVtZW50KHJlbmRlcmVyTm9kZSktPnRhZ1FOYW1lKCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJlbmRlcmVyID0gbmV4dEluUHJlT3JkZXJT
a2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJzKHJlbmRlcmVyLCBjb250YWluZXIpOworICAg
ICAgICByZW5kZXJlciA9IG5leHRJblByZU9yZGVyKHJlbmRlcmVyLCBjb250YWluZXIsCisgICAg
ICAgICAgICAocmVuZGVyZXIgPT0gY29udGFpbmVyKSA/IE5vcm1hbFRyYXZlcnNhbCA6IFNraXBE
ZXNjZW5kYW50c09mQ29udGFpbmVycyk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MzQ2LDcgKzM0Nyw3IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6bWVhc3VyZURlc2NlbmRhbnRUZXh0
V2lkdGgoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgY29uCiB7CiAgICAgYm9vbCBza2lw
TG9jYWxUZXh0ID0gIWNvbnRhaW5lclNob3VsZEJlQXV0b3NpemVkKGNvbnRhaW5lcik7CiAKLSAg
ICBSZW5kZXJPYmplY3QqIGRlc2NlbmRhbnQgPSBuZXh0SW5QcmVPcmRlclNraXBwaW5nRGVzY2Vu
ZGFudHNPZkNvbnRhaW5lcnMoY29udGFpbmVyLCBjb250YWluZXIpOworICAgIFJlbmRlck9iamVj
dCogZGVzY2VuZGFudCA9IG5leHRJblByZU9yZGVyKGNvbnRhaW5lciwgY29udGFpbmVyLCBOb3Jt
YWxUcmF2ZXJzYWwpOwogICAgIHdoaWxlIChkZXNjZW5kYW50KSB7CiAgICAgICAgIGlmICghc2tp
cExvY2FsVGV4dCAmJiBkZXNjZW5kYW50LT5pc1RleHQoKSkgewogICAgICAgICAgICAgdGV4dFdp
ZHRoICs9IHRvUmVuZGVyVGV4dChkZXNjZW5kYW50KS0+cmVuZGVyZWRUZXh0TGVuZ3RoKCkgKiBk
ZXNjZW5kYW50LT5zdHlsZSgpLT5zcGVjaWZpZWRGb250U2l6ZSgpOwpAQCAtMzU3LDIwICszNTgs
MjUgQEAgdm9pZCBUZXh0QXV0b3NpemVyOjptZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25z
dCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBjb24KICAgICAgICAgfQogICAgICAgICBpZiAodGV4
dFdpZHRoID49IG1pblRleHRXaWR0aCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVz
Y2VuZGFudCA9IG5leHRJblByZU9yZGVyU2tpcHBpbmdEZXNjZW5kYW50c09mQ29udGFpbmVycyhk
ZXNjZW5kYW50LCBjb250YWluZXIpOworICAgICAgICBkZXNjZW5kYW50ID0gbmV4dEluUHJlT3Jk
ZXIoZGVzY2VuZGFudCwgY29udGFpbmVyLCBTa2lwRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMpOwog
ICAgIH0KIH0KIAotUmVuZGVyT2JqZWN0KiBUZXh0QXV0b3NpemVyOjpuZXh0SW5QcmVPcmRlclNr
aXBwaW5nRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMoY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyZW50
LCBjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRoaW4pCitSZW5kZXJPYmplY3QqIFRleHRBdXRv
c2l6ZXI6Om5leHRJblByZU9yZGVyKGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBzdGF5V2l0aGluLCBjb25zdCBUcmF2ZXJzYWxNb2RlIG1vZGUpCiB7Ci0g
ICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbiB8fCAhaXNBdXRvc2l6aW5nQ29udGFpbmVyKGN1
cnJlbnQpKQotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBjdXJyZW50LT5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgIGJvb2wg
c2tpcENoaWxkcmVuID0gKG1vZGUgPT0gU2tpcERlc2NlbmRhbnRzKSB8fCAobW9kZSA9PSBTa2lw
RGVzY2VuZGFudHNPZkNvbnRhaW5lcnMgJiYgaXNBdXRvc2l6aW5nQ29udGFpbmVyKGN1cnJlbnQp
KTsKKworICAgIGlmICghc2tpcENoaWxkcmVuKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogY2hp
bGQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7CisgICAgICAgIGlmIChjaGlsZCkKICAgICAgICAg
ICAgIHJldHVybiBjaGlsZDsKKyAgICB9CiAKICAgICBmb3IgKGNvbnN0IFJlbmRlck9iamVjdCog
YW5jZXN0b3IgPSBjdXJyZW50OyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50
KCkpIHsKICAgICAgICAgaWYgKGFuY2VzdG9yID09IHN0YXlXaXRoaW4pCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHNpYmxpbmcgPSBhbmNlc3Rvci0+
bmV4dFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRTaWJsaW5nKCkp
CisgICAgICAgIFJlbmRlck9iamVjdCogc2libGluZyA9IGFuY2VzdG9yLT5uZXh0U2libGluZygp
OworICAgICAgICBpZiAoc2libGluZykKICAgICAgICAgICAgIHJldHVybiBzaWJsaW5nOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKaW5kZXggMTY4YTI4
NWI5NThhOTQ4ZTg4YWI2MDBlMGIxNzNkMDk1ODIyOTQ2MC4uYWRmMTFkZjdiNTA1MmY2N2VjNTY4
NzVkNzRkZjk5ZjE4ZGU3ZWI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRBdXRvc2l6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9z
aXplci5oCkBAIC01Nyw2ICs1NywxMSBAQCBwcml2YXRlOgogICAgICAgICBGaXJzdFRvTGFzdCwK
ICAgICAgICAgTGFzdFRvRmlyc3QKICAgICB9OworICAgIGVudW0gVHJhdmVyc2FsTW9kZSB7Cisg
ICAgICAgIE5vcm1hbFRyYXZlcnNhbCwKKyAgICAgICAgU2tpcERlc2NlbmRhbnRzLAorICAgICAg
ICBTa2lwRGVzY2VuZGFudHNPZkNvbnRhaW5lcnMKKyAgICB9OwogCiAgICAgZXhwbGljaXQgVGV4
dEF1dG9zaXplcihEb2N1bWVudCopOwogCkBAIC03NSw4ICs4MCw5IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIGJvb2wgY2x1c3RlclNob3VsZEJlQXV0b3NpemVkKGNvbnN0IFJlbmRlckJsb2NrKiBi
bG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBmbG9hdCBibG9ja1dpZHRoKTsKICAgICBzdGF0aWMgdm9p
ZCBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVy
LCBjb25zdCBSZW5kZXJCbG9jayogYmxvY2tDb250YWluaW5nQWxsVGV4dCwgZmxvYXQgbWluVGV4
dFdpZHRoLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAotICAgIC8vIFVzZSB0byB0cmF2ZXJzZSB0aGUg
dHJlZSBvZiBkZXNjZW5kYW50cywgZXhjbHVkaW5nIGRlc2NlbmRhbnRzIG9mIGNvbnRhaW5lcnMg
KGJ1dCByZXR1cm5pbmcgdGhlIGNvbnRhaW5lcnMgdGhlbXNlbHZlcykuCi0gICAgc3RhdGljIFJl
bmRlck9iamVjdCogbmV4dEluUHJlT3JkZXJTa2lwcGluZ0Rlc2NlbmRhbnRzT2ZDb250YWluZXJz
KGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbik7Cisg
ICAgLy8gVXNlIHRvIHRyYXZlcnNlIHRoZSB0cmVlIG9mIGRlc2NlbmRhbnRzLCBvcHRpb25hbGx5
IHNraXBwaW5nIGRlc2NlbmRhbnRzIG9yIGRlc2NlbmRhbnRzIG9mIGNvbnRhaW5lcnMKKyAgICAv
LyBkZXBlbmRpbmcgb24gdGhlIHRyYXZlcnNhbCBtb2RlLgorICAgIHN0YXRpYyBSZW5kZXJPYmpl
Y3QqIG5leHRJblByZU9yZGVyKGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCwgY29uc3QgUmVu
ZGVyT2JqZWN0KiBzdGF5V2l0aGluLCBjb25zdCBUcmF2ZXJzYWxNb2RlKTsKIAogICAgIHN0YXRp
YyBjb25zdCBSZW5kZXJCbG9jayogZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNv
bnN0IFJlbmRlckJsb2NrKiBjbHVzdGVyKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>