<?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>74782</bug_id>
          
          <creation_ts>2011-12-16 23:59:57 -0800</creation_ts>
          <short_desc>Reduce the memory allocations of WebCore&apos;s cssPropertyName()</short_desc>
          <delta_ts>2012-02-03 18:02:34 -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>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>msaboff</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>523267</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-16 23:59:57 -0800</bug_when>
    <thetext>The function cssPropertyName() show up in Dromaeo and PeaceKeeper due to the allocation of the String. We could reduce that by creating a new string only in the cases where the propertyName Identifier is different from the CSS property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523268</commentid>
    <comment_count>1</comment_count>
      <attachid>119716</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-17 00:02:16 -0800</bug_when>
    <thetext>Created attachment 119716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523269</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-17 00:02:51 -0800</bug_when>
    <thetext>The style breaking is intended.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523270</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-17 00:04:42 -0800</bug_when>
    <thetext>Attachment 119716 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/bindings/js/JSCSSStyleDeclarationCustom.cpp:123:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
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>525523</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-12-21 13:31:55 -0800</bug_when>
    <thetext>Besides the stylebot complaint, the patch looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530432</commentid>
    <comment_count>5</comment_count>
      <attachid>119716</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-05 10:56:44 -0800</bug_when>
    <thetext>Comment on attachment 119716
Patch

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

&gt; Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:99
&gt;      unsigned i = 0;

Reading this again, I&apos;ll replace this by &quot;unsigned prefixOffset = 0&quot; and later use &quot;!prefixOffset&quot; instead of &quot;i == 0&quot;.

I&apos;d still like a review for this version, I can fix that little style issue when landing if everything else is ok :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530433</commentid>
    <comment_count>6</comment_count>
      <attachid>119716</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-05 10:56:46 -0800</bug_when>
    <thetext>Comment on attachment 119716
Patch

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

&gt; Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:99
&gt;      unsigned i = 0;

Reading this again, I&apos;ll replace this by &quot;unsigned prefixOffset = 0&quot; and later use &quot;!prefixOffset&quot; instead of &quot;i == 0&quot;.

I&apos;d still like a review for this version, I can fix that little style issue when landing if everything else is ok :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536109</commentid>
    <comment_count>7</comment_count>
      <attachid>122524</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-13 17:45:28 -0800</bug_when>
    <thetext>Created attachment 122524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536110</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-13 17:46:13 -0800</bug_when>
    <thetext>Fixed the style...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536112</commentid>
    <comment_count>9</comment_count>
      <attachid>122526</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-13 17:59:59 -0800</bug_when>
    <thetext>Created attachment 122526
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536113</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-13 18:01:25 -0800</bug_when>
    <thetext>I get around 1-2% improvement on Peacekeeper, hard to get good numbers on that damn benchmark :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536132</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-13 19:35:21 -0800</bug_when>
    <thetext>Could we write a more reliable micro-benchmark?  We&apos;ve certainly written such in the past.  Trying to judge perf based on peacekeeper is folly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536139</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-13 21:02:22 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Could we write a more reliable micro-benchmark?  We&apos;ve certainly written such in the past.  Trying to judge perf based on peacekeeper is folly.

Sure, I&apos;ll give it a shot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536243</commentid>
    <comment_count>13</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-14 19:40:17 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Could we write a more reliable micro-benchmark?  We&apos;ve certainly written such in the past.  Trying to judge perf based on peacekeeper is folly.

I made this little benchmark: http://jsperf.com/css-property-access-by-name

For the first case (&quot;lowercaseCSSPropertyName&quot;), we are 3 times as fast with the patch.
For the 2 other cases, there is no regression.

Interestingly, on my machine, Firefox is a lot faster than both Safari and Chrome for the first two cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536721</commentid>
    <comment_count>14</comment_count>
      <attachid>122526</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-16 13:04:23 -0800</bug_when>
    <thetext>Comment on attachment 122526
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Previously, cssPropertyName() was always causing memory allocation
&gt; +        if the Identifier is not null.

Which identifier?

&gt; Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:96
&gt; +static String cssPropertyName(StringImpl* stringImpl, const CharType* characters, bool* hadPixelOrPosPrefix = 0)

In the worst case (&quot;epub-&quot;), this function does 8 passes over stringImpl before taking the fast path. In the best case (&quot;css-&quot;), it does 2 passes. That might explain why Firefox is faster. You can get this down to one pass in all cases by writing out explicit branches like so:

if (length &lt; 3)
    return false;

if (characters[0] == &apos;c&apos;) {
    if (characters[1] == &apos;s&apos;) {
        if (characters[2] == &apos;s&apos;)
            return true;
....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536725</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-16 13:05:36 -0800</bug_when>
    <thetext>It&apos;s odd to have a non-ASCII version of CSS property name matching: all CSS property names are ASCII. Instead of this:

 156    if (stringImpl-&gt;is8Bit())
 157        return cssPropertyName(stringImpl, stringImpl-&gt;characters8(), hadPixelOrPosPrefix);
 158    return cssPropertyName(stringImpl, stringImpl-&gt;characters16(), hadPixelOrPosPrefix);

&lt;followed by lots of function templates&gt;

I&apos;d like to see something like this:

if (!stringImpl-&gt;is8Bit())
    if (!stringImpl-&gt;convertTo8Bit())
        return String()

return cssPropertyName(...)

&lt;followed by no function templates&gt;

StringImpl::convertTo8Bit doesn&apos;t need to malloc -- it can just perform a compaction on the existing 16bit buffer. Plus, it will be exceptionally rare.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536728</commentid>
    <comment_count>16</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-16 13:10:18 -0800</bug_when>
    <thetext>I&apos;d also be curious to know what happens if you just use operator[] on the String, rather than the underlying characters buffer. That&apos;s a much simpler change, and it accomplishes 100% of your goal of removing the 16bit buffer malloc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536735</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-01-16 13:25:02 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; I&apos;d also be curious to know what happens if you just use operator[] on the String, rather than the underlying characters buffer. That&apos;s a much simpler change, and it accomplishes 100% of your goal of removing the 16bit buffer malloc.

operator[] does an internal is8Bit() check and then uses either the 8 or 16 bit buffer.  operator equal is great for accessing one or two characters once.  For multiple accesses like matching, access the underlying buffer via the appropriate bit-ness pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536783</commentid>
    <comment_count>18</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-16 15:25:01 -0800</bug_when>
    <thetext>&gt; I&apos;d like to see something like this:
&gt; 
&gt; if (!stringImpl-&gt;is8Bit())
&gt;     if (!stringImpl-&gt;convertTo8Bit())
&gt;         return String()
&gt; 
&gt; return cssPropertyName(...)

I had considered this, but I was afraid the Identifier would have to be converted back somewhere for a good reason. In which case we would have costly 8-&gt;16-&gt;8-&gt;16, etc.

Maybe I am being overly pessimistic, I will test your suggestion.

(In reply to comment #16)
&gt; I&apos;d also be curious to know what happens if you just use operator[] on the String, rather than the underlying characters buffer. That&apos;s a much simpler change, and it accomplishes 100% of your goal of removing the 16bit buffer malloc.

Michael answered about the operator[].

Note this patch also adds the path to skip the string builder altogether. This was really my goal here, the string conversion was a needed by-product.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536817</commentid>
    <comment_count>19</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-16 17:10:49 -0800</bug_when>
    <thetext>&gt; &gt; if (!stringImpl-&gt;is8Bit())
&gt; &gt;     if (!stringImpl-&gt;convertTo8Bit())
&gt; &gt;         return String()
&gt; &gt; 
&gt; &gt; return cssPropertyName(...)
&gt; 
&gt; I had considered this, but I was afraid the Identifier would have to be converted back somewhere for a good reason. In which case we would have costly 8-&gt;16-&gt;8-&gt;16, etc.

Just to clarify, using my suggestion, it&apos;s possible to go 16-&gt;8-&gt;16+8, but no further conversions are possible afterwards. You can&apos;t ping-pong.

&gt; &gt; I&apos;d also be curious to know what happens if you just use operator[] on the String, rather than the underlying characters buffer. That&apos;s a much simpler change, and it accomplishes 100% of your goal of removing the 16bit buffer malloc.
&gt; 
&gt; Michael answered about the operator[].

I&apos;m not sure that Michael&apos;s comment rules out using operator[]. Yes, it branches. But we&apos;re only comparing a few characters here, so the branches may be OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542674</commentid>
    <comment_count>20</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-25 15:05:17 -0800</bug_when>
    <thetext>&gt; I&apos;d like to see something like this:
&gt; 
&gt; if (!stringImpl-&gt;is8Bit())
&gt;     if (!stringImpl-&gt;convertTo8Bit())
&gt;         return String()
&gt; 
&gt; return cssPropertyName(...)
&gt; 
&gt; &lt;followed by no function templates&gt;
&gt; 
&gt; StringImpl::convertTo8Bit doesn&apos;t need to malloc -- it can just perform a compaction on the existing 16bit buffer. Plus, it will be exceptionally rare.

I wanted to give that a shot, but it turns out there is no way to write &quot;bool StringImpl::convertTo8Bit()&quot; in a clean way. :(

StringImpl are allocated as a whole, not by allocating the character buffers. E.g.: 
StringImpl* string = static_cast&lt;StringImpl*&gt;(fastMalloc(size));

This makes it impossible to realloc since it could change the StringImpl* pointer (and others can have references to the previous pointer).

Changing the Implementation of StringImpl to support convertTo8Bit() would cause performance regression since we would have to malloc twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542873</commentid>
    <comment_count>21</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-25 21:49:32 -0800</bug_when>
    <thetext>There&apos;s no need to realloc: an 8bit characters buffer is strictly smaller than a 16bit characters buffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544536</commentid>
    <comment_count>22</comment_count>
      <attachid>124406</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-27 17:38:15 -0800</bug_when>
    <thetext>Created attachment 124406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544537</commentid>
    <comment_count>23</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-27 17:39:46 -0800</bug_when>
    <thetext>I have some ideas for the &quot;slow case&quot; to get those 2-3% back (or hopefully even faster than before). I will make followups for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544580</commentid>
    <comment_count>24</comment_count>
      <attachid>124420</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-01-27 18:32:38 -0800</bug_when>
    <thetext>Created attachment 124420
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545228</commentid>
    <comment_count>25</comment_count>
      <attachid>124420</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-30 11:18:36 -0800</bug_when>
    <thetext>Comment on attachment 124420
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549298</commentid>
    <comment_count>26</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-02-03 18:02:34 -0800</bug_when>
    <thetext>Committed r106724: &lt;http://trac.webkit.org/changeset/106724&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119716</attachid>
            <date>2011-12-17 00:02:16 -0800</date>
            <delta_ts>2012-01-13 17:45:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74782-20111217000214.patch</filename>
            <type>text/plain</type>
            <size>7115</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTVhMjM1Zjk2MWU1ZTU4
OGFjNWVhMzY0NDZiMTQ2MGYxN2U2MDEzYi4uMTQ0M2Y1YTM3YjFiZjBjZTYzZjFmMzM0MzZhZDBk
ODNiY2RlZDliMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMzIEBACiAyMDExLTEyLTE2ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCisgICAgICAgIFJlZHVjZSB0aGUg
bWVtb3J5IGFsbG9jYXRpb25zIG9mIFdlYkNvcmUncyBjc3NQcm9wZXJ0eU5hbWUoKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3ODIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBjc3NQ
cm9wZXJ0eU5hbWUoKSB3YXMgYWx3YXlzIGNhdXNpbmcgbWVtb3J5IGFsbG9jYXRpb24KKyAgICAg
ICAgaWYgdGhlIElkZW50aWZpZXIgaXMgbm90IG51bGwuCisKKyAgICAgICAgRmlyc3QgOGJpdHMg
c3RyaW5ncyB3ZXJlIGFsd2F5cyBjb252ZXJ0ZWQgdG8gMTZiaXRzIGJlY2F1c2Ugb2YgdGhlCisg
ICAgICAgIG1ldGhvZCBTdHJpbmc6OmNoYXJhY3RlcnMoKS4KKyAgICAgICAgVGhlbiBhIG5ldyBz
dHJpbmcgd2FzIGFsd2F5cyBjcmVhdGVkIHdpdGggU3RyaW5nQnVpbGRlci4KKworICAgICAgICBU
aGlzIHBhdGNoIGxpbWl0cyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIGZ1bmN0aW9uLgor
CisgICAgICAgIFRoZSBjb2RlIGlzIGNoYW5nZSB0byBhIHRlbXBsYXRlIHRha2luZyB0aGUgOGJp
dHMgb3IgMTZiaXRzIHN0cmluZworICAgICAgICB0byBhdm9pZCB0aGUgY29udmVyc2lvbiB0byAx
NmJpdHMuCisKKyAgICAgICAgVG8gYXZvaWQgYnVpbGRpbmcgYSBuZXcgc3RyaW5nLCB3ZSBmaXJz
dCBjaGVjayBpZiB0aGUgaW5jb21pbmcgc3RyaW5nIGNhbgorICAgICAgICBiZSB1c2VkIGFzIGEg
Q1NTIGlkZW50aWZpZXIuIElmIGl0IGRvZXMsIHdlIGp1c3QgcmV0dXJuIHRoZSBpbmNvbWluZyBz
dHJpbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zVXBwZXJDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OmNz
c1Byb3BlcnR5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppc0NTU1Byb3BlcnR5TmFtZSk6CisK
KzIwMTEtMTItMTYgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKICAg
ICAgICAgRkVDb21wb3NpdGUgZG9lcyBub3QgYnVpbGQgd2hlbiB5b3UgZGlzYWJsZSBmaWx0ZXJz
IG9uIEFSTXY3CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NDc3MgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0
eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAppbmRleCBhZmZlMGUwNmEzZDlmMzVhOGUzMWU3
NGYwYjdmMTg3OWVkM2Y0NDFhLi4yOThmZjQ0MzhiMWI0MzBiMDQ4NTIyNmI0NDQ4MmNhNDUxZWIw
MjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVj
bGFyYXRpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NT
U3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKQEAgLTYxLDc5ICs2MSwxMDYgQEAgdm9pZCBKU0NT
U1N0eWxlRGVjbGFyYXRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKIC8vIEZpcnN0IGNoYXJhY3RlciBvZiB0aGUgcHJlZml4IHdpdGhpbiB0aGUg
cHJvcGVydHkgbmFtZSBtYXkgYmUgdXBwZXIgb3IgbG93ZXJjYXNlLgogLy8gT3RoZXIgY2hhcmFj
dGVycyBpbiB0aGUgcHJlZml4IHdpdGhpbiB0aGUgcHJvcGVydHkgbmFtZSBtdXN0IGJlIGxvd2Vy
Y2FzZS4KIC8vIFRoZSBwcmVmaXggd2l0aGluIHRoZSBwcm9wZXJ0eSBuYW1lIG11c3QgYmUgZm9s
bG93ZWQgYnkgYSBjYXBpdGFsIGxldHRlci4KLXN0YXRpYyBib29sIGhhc0NTU1Byb3BlcnR5TmFt
ZVByZWZpeChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IGNoYXIqIHByZWZp
eCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgorc3RhdGljIGJvb2wgaGFzQ1NTUHJvcGVy
dHlOYW1lUHJlZml4KGNvbnN0IENoYXJUeXBlKiBwcm9wZXJ0eVN0cmluZywgc2l6ZV90IGxlbmd0
aCwgY29uc3QgY2hhciogcHJlZml4KQogewogI2lmbmRlZiBOREVCVUcKICAgICBBU1NFUlQoKnBy
ZWZpeCk7CiAgICAgZm9yIChjb25zdCBjaGFyKiBwID0gcHJlZml4OyAqcDsgKytwKQogICAgICAg
ICBBU1NFUlQoaXNBU0NJSUxvd2VyKCpwKSk7Ci0gICAgQVNTRVJUKHByb3BlcnR5TmFtZS5sZW5n
dGgoKSk7CisgICAgQVNTRVJUKGxlbmd0aCk7CiAjZW5kaWYKIAotICAgIGlmICh0b0FTQ0lJTG93
ZXIocHJvcGVydHlOYW1lLmNoYXJhY3RlcnMoKVswXSkgIT0gcHJlZml4WzBdKQorICAgIGlmICh0
b0FTQ0lJTG93ZXIocHJvcGVydHlTdHJpbmdbMF0pICE9IHByZWZpeFswXSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gcHJvcGVydHlOYW1lLmxlbmd0aCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBp
ZiAoIXByZWZpeFtpXSkKLSAgICAgICAgICAgIHJldHVybiBpc0FTQ0lJVXBwZXIocHJvcGVydHlO
YW1lLmNoYXJhY3RlcnMoKVtpXSk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUuY2hhcmFjdGVy
cygpW2ldICE9IHByZWZpeFtpXSkKKyAgICAgICAgICAgIHJldHVybiBpc0FTQ0lJVXBwZXIocHJv
cGVydHlTdHJpbmdbaV0pOworICAgICAgICBpZiAocHJvcGVydHlTdHJpbmdbaV0gIT0gcHJlZml4
W2ldKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyBTdHJpbmcgY3NzUHJvcGVydHlOYW1lKGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgYm9vbCogaGFkUGl4ZWxPclBvc1ByZWZpeCA9IDApCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1VwcGVyQ2hhcihjb25z
dCBDaGFyVHlwZSogc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCiB7Ci0g
ICAgaWYgKGhhZFBpeGVsT3JQb3NQcmVmaXgpCi0gICAgICAgICpoYWRQaXhlbE9yUG9zUHJlZml4
ID0gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBwcm9wZXJ0eU5hbWUubGVuZ3RoKCk7
Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IG9mZnNldDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBp
ZiAoaXNBU0NJSVVwcGVyKHN0cmluZ1tpXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgorc3RhdGlj
IFN0cmluZyBjc3NQcm9wZXJ0eU5hbWUoU3RyaW5nSW1wbCogc3RyaW5nSW1wbCwgY29uc3QgQ2hh
clR5cGUqIGNoYXJhY3RlcnMsIGJvb2wqIGhhZFBpeGVsT3JQb3NQcmVmaXggPSAwKQoreworICAg
IHNpemVfdCBsZW5ndGggPSBzdHJpbmdJbXBsLT5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBpID0g
MDsKKyAgICBib29sIGlzV2ViS2l0UHJlZml4ZWQgPSBmYWxzZTsKIAotICAgIGlmIChoYXNDU1NQ
cm9wZXJ0eU5hbWVQcmVmaXgocHJvcGVydHlOYW1lLCAiY3NzIikpCi0gICAgICAgIGkgKz0gMzsK
LSAgICBlbHNlIGlmIChoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgocHJvcGVydHlOYW1lLCAicGl4
ZWwiKSkgewotICAgICAgICBpICs9IDU7CisgICAgaWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZp
eChjaGFyYWN0ZXJzLCBsZW5ndGgsICJjc3MiKSkKKyAgICAgICAgaSA9IDM7CisgICAgZWxzZSBp
ZiAoaGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4KGNoYXJhY3RlcnMsIGxlbmd0aCwgInBpeGVsIikp
IHsKKyAgICAgICAgaSA9IDU7CiAgICAgICAgIGlmIChoYWRQaXhlbE9yUG9zUHJlZml4KQogICAg
ICAgICAgICAgKmhhZFBpeGVsT3JQb3NQcmVmaXggPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoaGFz
Q1NTUHJvcGVydHlOYW1lUHJlZml4KHByb3BlcnR5TmFtZSwgInBvcyIpKSB7Ci0gICAgICAgIGkg
Kz0gMzsKKyAgICB9IGVsc2UgaWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChjaGFyYWN0ZXJz
LCBsZW5ndGgsICJwb3MiKSkgeworICAgICAgICBpID0gMzsKICAgICAgICAgaWYgKGhhZFBpeGVs
T3JQb3NQcmVmaXgpCiAgICAgICAgICAgICAqaGFkUGl4ZWxPclBvc1ByZWZpeCA9IHRydWU7Ci0g
ICAgfSBlbHNlIGlmIChoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgocHJvcGVydHlOYW1lLCAid2Vi
a2l0IikKLSAgICAgICAgICAgIHx8IGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChwcm9wZXJ0eU5h
bWUsICJraHRtbCIpCi0gICAgICAgICAgICB8fCBoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgocHJv
cGVydHlOYW1lLCAiYXBwbGUiKQotICAgICAgICAgICAgfHwgaGFzQ1NTUHJvcGVydHlOYW1lUHJl
Zml4KHByb3BlcnR5TmFtZSwgImVwdWIiKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJy0nKTsK
KyAgICB9IGVsc2UgaWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChjaGFyYWN0ZXJzLCBsZW5n
dGgsICJ3ZWJraXQiKQorICAgICAgICAgICAgICAgfHwgaGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4
KGNoYXJhY3RlcnMsIGxlbmd0aCwgImtodG1sIikKKyAgICAgICAgICAgICAgIHx8IGhhc0NTU1By
b3BlcnR5TmFtZVByZWZpeChjaGFyYWN0ZXJzLCBsZW5ndGgsICJhcHBsZSIpCisgICAgICAgICAg
ICAgICB8fCBoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgoY2hhcmFjdGVycywgbGVuZ3RoLCAiZXB1
YiIpKQorICAgICAgICBpc1dlYktpdFByZWZpeGVkID0gdHJ1ZTsKICAgICBlbHNlIHsKLSAgICAg
ICAgaWYgKGlzQVNDSUlVcHBlcihwcm9wZXJ0eU5hbWUuY2hhcmFjdGVycygpWzBdKSkKKyAgICAg
ICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXJzWzBdKSkKICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKICAgICB9CiAKLSAgICBidWlsZGVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIocHJvcGVy
dHlOYW1lLmNoYXJhY3RlcnMoKVtpKytdKSk7CisgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBhbHJl
YWR5IGFsbCBsb3dlciwgd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBzYW1lLgorICAgIGlmICghaXNX
ZWJLaXRQcmVmaXhlZCAmJiBpID09IDApCisgICAgICAgIGlmICghY29udGFpbnNVcHBlckNoYXIo
Y2hhcmFjdGVycywgMSwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc3RyaW5n
SW1wbCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKKyAgICBpZiAoaXNXZWJLaXRQcmVmaXhlZCkKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoJy0nKTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKGNoYXJhY3RlcnNbaSsrXSk7
CiAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBwcm9w
ZXJ0eU5hbWUuY2hhcmFjdGVycygpW2ldOworICAgICAgICBDaGFyVHlwZSBjID0gY2hhcmFjdGVy
c1tpXTsKICAgICAgICAgaWYgKCFpc0FTQ0lJVXBwZXIoYykpCiAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZChjKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygnLScsIHRvQVNDSUlMb3dlcihjKSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh0b0FT
Q0lJTG93ZXIoYykpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKIH0KIAorc3RhdGljIFN0cmluZyBjc3NQcm9wZXJ0eU5hbWUoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBib29sKiBoYWRQaXhlbE9yUG9zUHJlZml4ID0gMCkKK3sKKyAg
ICBpZiAoaGFkUGl4ZWxPclBvc1ByZWZpeCkKKyAgICAgICAgKmhhZFBpeGVsT3JQb3NQcmVmaXgg
PSBmYWxzZTsKKworCisgICAgaWYgKHByb3BlcnR5TmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBwcm9wZXJ0eU5h
bWUudXN0cmluZygpLmltcGwoKTsKKyAgICBpZiAoc3RyaW5nSW1wbC0+aXM4Qml0KCkpCisgICAg
ICAgIHJldHVybiBjc3NQcm9wZXJ0eU5hbWUoc3RyaW5nSW1wbCwgc3RyaW5nSW1wbC0+Y2hhcmFj
dGVyczgoKSwgaGFkUGl4ZWxPclBvc1ByZWZpeCk7CisgICAgcmV0dXJuIGNzc1Byb3BlcnR5TmFt
ZShzdHJpbmdJbXBsLCBzdHJpbmdJbXBsLT5jaGFyYWN0ZXJzMTYoKSwgaGFkUGl4ZWxPclBvc1By
ZWZpeCk7Cit9CisKIHN0YXRpYyBib29sIGlzQ1NTUHJvcGVydHlOYW1lKGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5SWRlbnRpZmllcikKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBtYWxsb2NzIGEg
c3RyaW5nIGZvciB0aGUgcHJvcGVydHkgbmFtZSBhbmQgdGhlbiB0aHJvd3MgaXQKLSAgICAvLyBh
d2F5LiAgVGhpcyBzaG93cyB1cCBvbiBwZWFjZWtlZXBlcidzIGRvbUR5bmFtaWNDcmVhdGlvbkNy
ZWF0ZUVsZW1lbnQuCiAgICAgcmV0dXJuIENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlO
YW1lKGNzc1Byb3BlcnR5TmFtZShwcm9wZXJ0eUlkZW50aWZpZXIpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122524</attachid>
            <date>2012-01-13 17:45:28 -0800</date>
            <delta_ts>2012-01-13 17:59:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74782-20120113174527.patch</filename>
            <type>text/plain</type>
            <size>7199</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRhZmQ1NWJkNjEyNWU0
YmVlM2EyMzY4M2M1ZWYyM2NlMDE3NGI2Ny4uNmJmZjhmYzdhZTY0OGU0YjQyMWYzZjdmNzBiMWEz
OGM1YTA3MTUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAxLTEzICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSB0aGUg
bWVtb3J5IGFsbG9jYXRpb25zIG9mIFdlYkNvcmUncyBjc3NQcm9wZXJ0eU5hbWUoKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3ODIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBjc3NQ
cm9wZXJ0eU5hbWUoKSB3YXMgYWx3YXlzIGNhdXNpbmcgbWVtb3J5IGFsbG9jYXRpb24KKyAgICAg
ICAgaWYgdGhlIElkZW50aWZpZXIgaXMgbm90IG51bGwuCisKKyAgICAgICAgRmlyc3QgOGJpdHMg
c3RyaW5ncyB3ZXJlIGFsd2F5cyBjb252ZXJ0ZWQgdG8gMTZiaXRzIGJlY2F1c2Ugb2YgdGhlCisg
ICAgICAgIG1ldGhvZCBTdHJpbmc6OmNoYXJhY3RlcnMoKS4KKyAgICAgICAgVGhlbiBhIG5ldyBz
dHJpbmcgd2FzIGFsd2F5cyBjcmVhdGVkIHdpdGggU3RyaW5nQnVpbGRlci4KKworICAgICAgICBU
aGlzIHBhdGNoIGxpbWl0cyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIGZ1bmN0aW9uLgor
CisgICAgICAgIFRoZSBjb2RlIGlzIGNoYW5nZSB0byBhIHRlbXBsYXRlIHRha2luZyB0aGUgOGJp
dHMgb3IgMTZiaXRzIHN0cmluZworICAgICAgICB0byBhdm9pZCB0aGUgY29udmVyc2lvbiB0byAx
NmJpdHMuCisKKyAgICAgICAgVG8gYXZvaWQgYnVpbGRpbmcgYSBuZXcgc3RyaW5nLCB3ZSBmaXJz
dCBjaGVjayBpZiB0aGUgaW5jb21pbmcgc3RyaW5nIGNhbgorICAgICAgICBiZSB1c2VkIGFzIGEg
Q1NTIGlkZW50aWZpZXIuIElmIGl0IGRvZXMsIHdlIGp1c3QgcmV0dXJuIHRoZSBpbmNvbWluZyBz
dHJpbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zVXBwZXJDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OmNz
c1Byb3BlcnR5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppc0NTU1Byb3BlcnR5TmFtZSk6CisK
IDIwMTItMDEtMTMgIFZpbmNlbnQgU2NoZWliICA8c2NoZWliQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBQb2ludGVyIExvY2s6IENoYW5nZSBpc0xvY2tlZCgpIGZyb20gb3BlcmF0b3IgdG8gYXR0
cmlidXRlIGlzTG9ja2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAppbmRleCBhZmZlMGUwNmEzZDlmMzVh
OGUzMWU3NGYwYjdmMTg3OWVkM2Y0NDFhLi4xMGY5NTY5ZmJiNjQwZDI4NDkyYWFiMjEwY2ZlOTRj
ZjZiMzg1Njk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0
eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKQEAgLTYxLDc5ICs2MSwxMDYgQEAgdm9p
ZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKIC8vIEZpcnN0IGNoYXJhY3RlciBvZiB0aGUgcHJlZml4IHdpdGhp
biB0aGUgcHJvcGVydHkgbmFtZSBtYXkgYmUgdXBwZXIgb3IgbG93ZXJjYXNlLgogLy8gT3RoZXIg
Y2hhcmFjdGVycyBpbiB0aGUgcHJlZml4IHdpdGhpbiB0aGUgcHJvcGVydHkgbmFtZSBtdXN0IGJl
IGxvd2VyY2FzZS4KIC8vIFRoZSBwcmVmaXggd2l0aGluIHRoZSBwcm9wZXJ0eSBuYW1lIG11c3Qg
YmUgZm9sbG93ZWQgYnkgYSBjYXBpdGFsIGxldHRlci4KLXN0YXRpYyBib29sIGhhc0NTU1Byb3Bl
cnR5TmFtZVByZWZpeChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IGNoYXIq
IHByZWZpeCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgorc3RhdGljIGJvb2wgaGFzQ1NT
UHJvcGVydHlOYW1lUHJlZml4KGNvbnN0IENoYXJUeXBlKiBwcm9wZXJ0eVN0cmluZywgc2l6ZV90
IGxlbmd0aCwgY29uc3QgY2hhciogcHJlZml4KQogewogI2lmbmRlZiBOREVCVUcKICAgICBBU1NF
UlQoKnByZWZpeCk7CiAgICAgZm9yIChjb25zdCBjaGFyKiBwID0gcHJlZml4OyAqcDsgKytwKQog
ICAgICAgICBBU1NFUlQoaXNBU0NJSUxvd2VyKCpwKSk7Ci0gICAgQVNTRVJUKHByb3BlcnR5TmFt
ZS5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGxlbmd0aCk7CiAjZW5kaWYKIAotICAgIGlmICh0b0FT
Q0lJTG93ZXIocHJvcGVydHlOYW1lLmNoYXJhY3RlcnMoKVswXSkgIT0gcHJlZml4WzBdKQorICAg
IGlmICh0b0FTQ0lJTG93ZXIocHJvcGVydHlTdHJpbmdbMF0pICE9IHByZWZpeFswXSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gcHJvcGVydHlOYW1lLmxl
bmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICBpZiAoIXByZWZpeFtpXSkKLSAgICAgICAgICAgIHJldHVybiBpc0FTQ0lJVXBwZXIocHJv
cGVydHlOYW1lLmNoYXJhY3RlcnMoKVtpXSk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUuY2hh
cmFjdGVycygpW2ldICE9IHByZWZpeFtpXSkKKyAgICAgICAgICAgIHJldHVybiBpc0FTQ0lJVXBw
ZXIocHJvcGVydHlTdHJpbmdbaV0pOworICAgICAgICBpZiAocHJvcGVydHlTdHJpbmdbaV0gIT0g
cHJlZml4W2ldKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXN0YXRpYyBTdHJpbmcgY3NzUHJvcGVydHlOYW1lKGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgYm9vbCogaGFkUGl4ZWxPclBvc1ByZWZpeCA9IDApCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1VwcGVyQ2hh
cihjb25zdCBDaGFyVHlwZSogc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsIHNpemVfdCBsZW5ndGgp
CiB7Ci0gICAgaWYgKGhhZFBpeGVsT3JQb3NQcmVmaXgpCi0gICAgICAgICpoYWRQaXhlbE9yUG9z
UHJlZml4ID0gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBwcm9wZXJ0eU5hbWUubGVu
Z3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShsZW5n
dGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IG9mZnNldDsgaSA8IGxlbmd0aDsgKytpKQorICAg
ICAgICBpZiAoaXNBU0NJSVVwcGVyKHN0cmluZ1tpXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICB1bnNpZ25lZCBpID0gMDsKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJUeXBlPgorc3RhdGljIFN0cmluZyBjc3NQcm9wZXJ0eU5hbWUoU3RyaW5n
SW1wbCogc3RyaW5nSW1wbCwgY29uc3QgQ2hhclR5cGUqIGNoYXJhY3RlcnMsIGJvb2wqIGhhZFBp
eGVsT3JQb3NQcmVmaXggPSAwKQoreworICAgIHNpemVfdCBsZW5ndGggPSBzdHJpbmdJbXBsLT5s
ZW5ndGgoKTsKKyAgICBzaXplX3QgcHJlZml4T2Zmc2V0ID0gMDsKKyAgICBib29sIGlzV2ViS2l0
UHJlZml4ZWQgPSBmYWxzZTsKIAotICAgIGlmIChoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgocHJv
cGVydHlOYW1lLCAiY3NzIikpCi0gICAgICAgIGkgKz0gMzsKLSAgICBlbHNlIGlmIChoYXNDU1NQ
cm9wZXJ0eU5hbWVQcmVmaXgocHJvcGVydHlOYW1lLCAicGl4ZWwiKSkgewotICAgICAgICBpICs9
IDU7CisgICAgaWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChjaGFyYWN0ZXJzLCBsZW5ndGgs
ICJjc3MiKSkKKyAgICAgICAgcHJlZml4T2Zmc2V0ID0gMzsKKyAgICBlbHNlIGlmIChoYXNDU1NQ
cm9wZXJ0eU5hbWVQcmVmaXgoY2hhcmFjdGVycywgbGVuZ3RoLCAicGl4ZWwiKSkgeworICAgICAg
ICBwcmVmaXhPZmZzZXQgPSA1OwogICAgICAgICBpZiAoaGFkUGl4ZWxPclBvc1ByZWZpeCkKICAg
ICAgICAgICAgICpoYWRQaXhlbE9yUG9zUHJlZml4ID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGhh
c0NTU1Byb3BlcnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJwb3MiKSkgewotICAgICAgICBp
ICs9IDM7CisgICAgfSBlbHNlIGlmIChoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgoY2hhcmFjdGVy
cywgbGVuZ3RoLCAicG9zIikpIHsKKyAgICAgICAgcHJlZml4T2Zmc2V0ID0gMzsKICAgICAgICAg
aWYgKGhhZFBpeGVsT3JQb3NQcmVmaXgpCiAgICAgICAgICAgICAqaGFkUGl4ZWxPclBvc1ByZWZp
eCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgocHJvcGVy
dHlOYW1lLCAid2Via2l0IikKLSAgICAgICAgICAgIHx8IGhhc0NTU1Byb3BlcnR5TmFtZVByZWZp
eChwcm9wZXJ0eU5hbWUsICJraHRtbCIpCi0gICAgICAgICAgICB8fCBoYXNDU1NQcm9wZXJ0eU5h
bWVQcmVmaXgocHJvcGVydHlOYW1lLCAiYXBwbGUiKQotICAgICAgICAgICAgfHwgaGFzQ1NTUHJv
cGVydHlOYW1lUHJlZml4KHByb3BlcnR5TmFtZSwgImVwdWIiKSkKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoJy0nKTsKKyAgICB9IGVsc2UgaWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChjaGFy
YWN0ZXJzLCBsZW5ndGgsICJ3ZWJraXQiKQorICAgICAgICAgICAgICAgfHwgaGFzQ1NTUHJvcGVy
dHlOYW1lUHJlZml4KGNoYXJhY3RlcnMsIGxlbmd0aCwgImtodG1sIikKKyAgICAgICAgICAgICAg
IHx8IGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChjaGFyYWN0ZXJzLCBsZW5ndGgsICJhcHBsZSIp
CisgICAgICAgICAgICAgICB8fCBoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgoY2hhcmFjdGVycywg
bGVuZ3RoLCAiZXB1YiIpKQorICAgICAgICBpc1dlYktpdFByZWZpeGVkID0gdHJ1ZTsKICAgICBl
bHNlIHsKLSAgICAgICAgaWYgKGlzQVNDSUlVcHBlcihwcm9wZXJ0eU5hbWUuY2hhcmFjdGVycygp
WzBdKSkKKyAgICAgICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXJzWzBdKSkKICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBidWlsZGVyLmFwcGVuZCh0b0FTQ0lJ
TG93ZXIocHJvcGVydHlOYW1lLmNoYXJhY3RlcnMoKVtpKytdKSk7CisgICAgLy8gSWYgdGhlIHN0
cmluZyBpcyBhbHJlYWR5IGFsbCBsb3dlciwgd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBzYW1lLgor
ICAgIGlmICghaXNXZWJLaXRQcmVmaXhlZCAmJiAhcHJlZml4T2Zmc2V0KQorICAgICAgICBpZiAo
IWNvbnRhaW5zVXBwZXJDaGFyKGNoYXJhY3RlcnMsIDEsIGxlbmd0aCkpCisgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0cmluZ0ltcGwpOwogCi0gICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBVQ2hhciBjID0gcHJvcGVydHlOYW1lLmNoYXJhY3RlcnMoKVtpXTsKKyAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3Ro
KTsKKyAgICBpZiAoaXNXZWJLaXRQcmVmaXhlZCkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJy0n
KTsKKworICAgIGJ1aWxkZXIuYXBwZW5kKGNoYXJhY3RlcnNbcHJlZml4T2Zmc2V0KytdKTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSBwcmVmaXhPZmZzZXQ7IGkgPCBsZW5ndGg7ICsraSkgeworICAg
ICAgICBDaGFyVHlwZSBjID0gY2hhcmFjdGVyc1tpXTsKICAgICAgICAgaWYgKCFpc0FTQ0lJVXBw
ZXIoYykpCiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygnLScsIHRvQVNDSUlMb3dlcihjKSkp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIoYykpOworICAgICAgICB9CiAgICAg
fQogCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAorc3RhdGljIFN0cmluZyBj
c3NQcm9wZXJ0eU5hbWUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBib29sKiBoYWRQ
aXhlbE9yUG9zUHJlZml4ID0gMCkKK3sKKyAgICBpZiAoaGFkUGl4ZWxPclBvc1ByZWZpeCkKKyAg
ICAgICAgKmhhZFBpeGVsT3JQb3NQcmVmaXggPSBmYWxzZTsKKworCisgICAgaWYgKHByb3BlcnR5
TmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFN0cmluZ0lt
cGwqIHN0cmluZ0ltcGwgPSBwcm9wZXJ0eU5hbWUudXN0cmluZygpLmltcGwoKTsKKyAgICBpZiAo
c3RyaW5nSW1wbC0+aXM4Qml0KCkpCisgICAgICAgIHJldHVybiBjc3NQcm9wZXJ0eU5hbWUoc3Ry
aW5nSW1wbCwgc3RyaW5nSW1wbC0+Y2hhcmFjdGVyczgoKSwgaGFkUGl4ZWxPclBvc1ByZWZpeCk7
CisgICAgcmV0dXJuIGNzc1Byb3BlcnR5TmFtZShzdHJpbmdJbXBsLCBzdHJpbmdJbXBsLT5jaGFy
YWN0ZXJzMTYoKSwgaGFkUGl4ZWxPclBvc1ByZWZpeCk7Cit9CisKIHN0YXRpYyBib29sIGlzQ1NT
UHJvcGVydHlOYW1lKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5SWRlbnRpZmllcikKIHsKLSAg
ICAvLyBGSVhNRTogVGhpcyBtYWxsb2NzIGEgc3RyaW5nIGZvciB0aGUgcHJvcGVydHkgbmFtZSBh
bmQgdGhlbiB0aHJvd3MgaXQKLSAgICAvLyBhd2F5LiAgVGhpcyBzaG93cyB1cCBvbiBwZWFjZWtl
ZXBlcidzIGRvbUR5bmFtaWNDcmVhdGlvbkNyZWF0ZUVsZW1lbnQuCiAgICAgcmV0dXJuIENTU1N0
eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlOYW1lKGNzc1Byb3BlcnR5TmFtZShwcm9wZXJ0eUlk
ZW50aWZpZXIpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122526</attachid>
            <date>2012-01-13 17:59:59 -0800</date>
            <delta_ts>2012-01-27 17:38:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74782-20120113175958.patch</filename>
            <type>text/plain</type>
            <size>7197</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRhZmQ1NWJkNjEyNWU0
YmVlM2EyMzY4M2M1ZWYyM2NlMDE3NGI2Ny4uNmJmZjhmYzdhZTY0OGU0YjQyMWYzZjdmNzBiMWEz
OGM1YTA3MTUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAxLTEzICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSB0aGUg
bWVtb3J5IGFsbG9jYXRpb25zIG9mIFdlYkNvcmUncyBjc3NQcm9wZXJ0eU5hbWUoKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3ODIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBjc3NQ
cm9wZXJ0eU5hbWUoKSB3YXMgYWx3YXlzIGNhdXNpbmcgbWVtb3J5IGFsbG9jYXRpb24KKyAgICAg
ICAgaWYgdGhlIElkZW50aWZpZXIgaXMgbm90IG51bGwuCisKKyAgICAgICAgRmlyc3QgOGJpdHMg
c3RyaW5ncyB3ZXJlIGFsd2F5cyBjb252ZXJ0ZWQgdG8gMTZiaXRzIGJlY2F1c2Ugb2YgdGhlCisg
ICAgICAgIG1ldGhvZCBTdHJpbmc6OmNoYXJhY3RlcnMoKS4KKyAgICAgICAgVGhlbiBhIG5ldyBz
dHJpbmcgd2FzIGFsd2F5cyBjcmVhdGVkIHdpdGggU3RyaW5nQnVpbGRlci4KKworICAgICAgICBU
aGlzIHBhdGNoIGxpbWl0cyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIGZ1bmN0aW9uLgor
CisgICAgICAgIFRoZSBjb2RlIGlzIGNoYW5nZSB0byBhIHRlbXBsYXRlIHRha2luZyB0aGUgOGJp
dHMgb3IgMTZiaXRzIHN0cmluZworICAgICAgICB0byBhdm9pZCB0aGUgY29udmVyc2lvbiB0byAx
NmJpdHMuCisKKyAgICAgICAgVG8gYXZvaWQgYnVpbGRpbmcgYSBuZXcgc3RyaW5nLCB3ZSBmaXJz
dCBjaGVjayBpZiB0aGUgaW5jb21pbmcgc3RyaW5nIGNhbgorICAgICAgICBiZSB1c2VkIGFzIGEg
Q1NTIGlkZW50aWZpZXIuIElmIGl0IGRvZXMsIHdlIGp1c3QgcmV0dXJuIHRoZSBpbmNvbWluZyBz
dHJpbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zVXBwZXJDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OmNz
c1Byb3BlcnR5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppc0NTU1Byb3BlcnR5TmFtZSk6CisK
IDIwMTItMDEtMTMgIFZpbmNlbnQgU2NoZWliICA8c2NoZWliQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBQb2ludGVyIExvY2s6IENoYW5nZSBpc0xvY2tlZCgpIGZyb20gb3BlcmF0b3IgdG8gYXR0
cmlidXRlIGlzTG9ja2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAppbmRleCBhZmZlMGUwNmEzZDlmMzVh
OGUzMWU3NGYwYjdmMTg3OWVkM2Y0NDFhLi45NzJmNmU1NDkwODU0YWQ2MThmMjQ0MWJlZmY1YjYz
NzJkMzQ0NWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0
eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKQEAgLTYxLDc5ICs2MSwxMDUgQEAgdm9p
ZCBKU0NTU1N0eWxlRGVjbGFyYXRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKIC8vIEZpcnN0IGNoYXJhY3RlciBvZiB0aGUgcHJlZml4IHdpdGhp
biB0aGUgcHJvcGVydHkgbmFtZSBtYXkgYmUgdXBwZXIgb3IgbG93ZXJjYXNlLgogLy8gT3RoZXIg
Y2hhcmFjdGVycyBpbiB0aGUgcHJlZml4IHdpdGhpbiB0aGUgcHJvcGVydHkgbmFtZSBtdXN0IGJl
IGxvd2VyY2FzZS4KIC8vIFRoZSBwcmVmaXggd2l0aGluIHRoZSBwcm9wZXJ0eSBuYW1lIG11c3Qg
YmUgZm9sbG93ZWQgYnkgYSBjYXBpdGFsIGxldHRlci4KLXN0YXRpYyBib29sIGhhc0NTU1Byb3Bl
cnR5TmFtZVByZWZpeChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IGNoYXIq
IHByZWZpeCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPgorc3RhdGljIGJvb2wgaGFzQ1NT
UHJvcGVydHlOYW1lUHJlZml4KGNvbnN0IENoYXJUeXBlKiBwcm9wZXJ0eVN0cmluZywgc2l6ZV90
IGxlbmd0aCwgY29uc3QgY2hhciogcHJlZml4KQogewogI2lmbmRlZiBOREVCVUcKICAgICBBU1NF
UlQoKnByZWZpeCk7CiAgICAgZm9yIChjb25zdCBjaGFyKiBwID0gcHJlZml4OyAqcDsgKytwKQog
ICAgICAgICBBU1NFUlQoaXNBU0NJSUxvd2VyKCpwKSk7Ci0gICAgQVNTRVJUKHByb3BlcnR5TmFt
ZS5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGxlbmd0aCk7CiAjZW5kaWYKIAotICAgIGlmICh0b0FT
Q0lJTG93ZXIocHJvcGVydHlOYW1lLmNoYXJhY3RlcnMoKVswXSkgIT0gcHJlZml4WzBdKQorICAg
IGlmICh0b0FTQ0lJTG93ZXIocHJvcGVydHlTdHJpbmdbMF0pICE9IHByZWZpeFswXSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gcHJvcGVydHlOYW1lLmxl
bmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICBpZiAoIXByZWZpeFtpXSkKLSAgICAgICAgICAgIHJldHVybiBpc0FTQ0lJVXBwZXIocHJv
cGVydHlOYW1lLmNoYXJhY3RlcnMoKVtpXSk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUuY2hh
cmFjdGVycygpW2ldICE9IHByZWZpeFtpXSkKKyAgICAgICAgICAgIHJldHVybiBpc0FTQ0lJVXBw
ZXIocHJvcGVydHlTdHJpbmdbaV0pOworICAgICAgICBpZiAocHJvcGVydHlTdHJpbmdbaV0gIT0g
cHJlZml4W2ldKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXN0YXRpYyBTdHJpbmcgY3NzUHJvcGVydHlOYW1lKGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgYm9vbCogaGFkUGl4ZWxPclBvc1ByZWZpeCA9IDApCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1VwcGVyQ2hh
cihjb25zdCBDaGFyVHlwZSogc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsIHNpemVfdCBsZW5ndGgp
CiB7Ci0gICAgaWYgKGhhZFBpeGVsT3JQb3NQcmVmaXgpCi0gICAgICAgICpoYWRQaXhlbE9yUG9z
UHJlZml4ID0gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBwcm9wZXJ0eU5hbWUubGVu
Z3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShsZW5n
dGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IG9mZnNldDsgaSA8IGxlbmd0aDsgKytpKQorICAg
ICAgICBpZiAoaXNBU0NJSVVwcGVyKHN0cmluZ1tpXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICB1bnNpZ25lZCBpID0gMDsKK3RlbXBsYXRl
PHR5cGVuYW1lIENoYXJUeXBlPgorc3RhdGljIFN0cmluZyBjc3NQcm9wZXJ0eU5hbWUoU3RyaW5n
SW1wbCogc3RyaW5nSW1wbCwgY29uc3QgQ2hhclR5cGUqIGNoYXJhY3RlcnMsIGJvb2wqIGhhZFBp
eGVsT3JQb3NQcmVmaXggPSAwKQoreworICAgIHNpemVfdCBsZW5ndGggPSBzdHJpbmdJbXBsLT5s
ZW5ndGgoKTsKKyAgICBzaXplX3QgcHJlZml4T2Zmc2V0ID0gMDsKKyAgICBib29sIGlzV2ViS2l0
UHJlZml4ZWQgPSBmYWxzZTsKIAotICAgIGlmIChoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgocHJv
cGVydHlOYW1lLCAiY3NzIikpCi0gICAgICAgIGkgKz0gMzsKLSAgICBlbHNlIGlmIChoYXNDU1NQ
cm9wZXJ0eU5hbWVQcmVmaXgocHJvcGVydHlOYW1lLCAicGl4ZWwiKSkgewotICAgICAgICBpICs9
IDU7CisgICAgaWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChjaGFyYWN0ZXJzLCBsZW5ndGgs
ICJjc3MiKSkKKyAgICAgICAgcHJlZml4T2Zmc2V0ID0gMzsKKyAgICBlbHNlIGlmIChoYXNDU1NQ
cm9wZXJ0eU5hbWVQcmVmaXgoY2hhcmFjdGVycywgbGVuZ3RoLCAicGl4ZWwiKSkgeworICAgICAg
ICBwcmVmaXhPZmZzZXQgPSA1OwogICAgICAgICBpZiAoaGFkUGl4ZWxPclBvc1ByZWZpeCkKICAg
ICAgICAgICAgICpoYWRQaXhlbE9yUG9zUHJlZml4ID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGhh
c0NTU1Byb3BlcnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJwb3MiKSkgewotICAgICAgICBp
ICs9IDM7CisgICAgfSBlbHNlIGlmIChoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgoY2hhcmFjdGVy
cywgbGVuZ3RoLCAicG9zIikpIHsKKyAgICAgICAgcHJlZml4T2Zmc2V0ID0gMzsKICAgICAgICAg
aWYgKGhhZFBpeGVsT3JQb3NQcmVmaXgpCiAgICAgICAgICAgICAqaGFkUGl4ZWxPclBvc1ByZWZp
eCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmIChoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgocHJvcGVy
dHlOYW1lLCAid2Via2l0IikKLSAgICAgICAgICAgIHx8IGhhc0NTU1Byb3BlcnR5TmFtZVByZWZp
eChwcm9wZXJ0eU5hbWUsICJraHRtbCIpCi0gICAgICAgICAgICB8fCBoYXNDU1NQcm9wZXJ0eU5h
bWVQcmVmaXgocHJvcGVydHlOYW1lLCAiYXBwbGUiKQotICAgICAgICAgICAgfHwgaGFzQ1NTUHJv
cGVydHlOYW1lUHJlZml4KHByb3BlcnR5TmFtZSwgImVwdWIiKSkKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoJy0nKTsKKyAgICB9IGVsc2UgaWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChjaGFy
YWN0ZXJzLCBsZW5ndGgsICJ3ZWJraXQiKQorICAgICAgICAgICAgICAgfHwgaGFzQ1NTUHJvcGVy
dHlOYW1lUHJlZml4KGNoYXJhY3RlcnMsIGxlbmd0aCwgImtodG1sIikKKyAgICAgICAgICAgICAg
IHx8IGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChjaGFyYWN0ZXJzLCBsZW5ndGgsICJhcHBsZSIp
CisgICAgICAgICAgICAgICB8fCBoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgoY2hhcmFjdGVycywg
bGVuZ3RoLCAiZXB1YiIpKQorICAgICAgICBpc1dlYktpdFByZWZpeGVkID0gdHJ1ZTsKICAgICBl
bHNlIHsKLSAgICAgICAgaWYgKGlzQVNDSUlVcHBlcihwcm9wZXJ0eU5hbWUuY2hhcmFjdGVycygp
WzBdKSkKKyAgICAgICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXJzWzBdKSkKICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBidWlsZGVyLmFwcGVuZCh0b0FTQ0lJ
TG93ZXIocHJvcGVydHlOYW1lLmNoYXJhY3RlcnMoKVtpKytdKSk7CisgICAgLy8gSWYgdGhlIHN0
cmluZyBpcyBhbHJlYWR5IGFsbCBsb3dlciwgd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBzYW1lLgor
ICAgIGlmICghaXNXZWJLaXRQcmVmaXhlZCAmJiAhcHJlZml4T2Zmc2V0KQorICAgICAgICBpZiAo
IWNvbnRhaW5zVXBwZXJDaGFyKGNoYXJhY3RlcnMsIDEsIGxlbmd0aCkpCisgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0cmluZ0ltcGwpOworCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwor
ICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgaWYgKGlzV2ViS2l0UHJl
Zml4ZWQpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7CisKKyAgICBidWlsZGVyLmFwcGVu
ZChjaGFyYWN0ZXJzW3ByZWZpeE9mZnNldCsrXSk7CiAKLSAgICBmb3IgKDsgaSA8IGxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBwcm9wZXJ0eU5hbWUuY2hhcmFjdGVycygpW2ldOwor
ICAgIGZvciAoc2l6ZV90IGkgPSBwcmVmaXhPZmZzZXQ7IGkgPCBsZW5ndGg7ICsraSkgeworICAg
ICAgICBDaGFyVHlwZSBjID0gY2hhcmFjdGVyc1tpXTsKICAgICAgICAgaWYgKCFpc0FTQ0lJVXBw
ZXIoYykpCiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygnLScsIHRvQVNDSUlMb3dlcihjKSkp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIoYykpOworICAgICAgICB9CiAgICAg
fQogCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAorc3RhdGljIFN0cmluZyBj
c3NQcm9wZXJ0eU5hbWUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBib29sKiBoYWRQ
aXhlbE9yUG9zUHJlZml4ID0gMCkKK3sKKyAgICBpZiAoaGFkUGl4ZWxPclBvc1ByZWZpeCkKKyAg
ICAgICAgKmhhZFBpeGVsT3JQb3NQcmVmaXggPSBmYWxzZTsKKworICAgIGlmIChwcm9wZXJ0eU5h
bWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmdJbXBs
KiBzdHJpbmdJbXBsID0gcHJvcGVydHlOYW1lLnVzdHJpbmcoKS5pbXBsKCk7CisgICAgaWYgKHN0
cmluZ0ltcGwtPmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gY3NzUHJvcGVydHlOYW1lKHN0cmlu
Z0ltcGwsIHN0cmluZ0ltcGwtPmNoYXJhY3RlcnM4KCksIGhhZFBpeGVsT3JQb3NQcmVmaXgpOwor
ICAgIHJldHVybiBjc3NQcm9wZXJ0eU5hbWUoc3RyaW5nSW1wbCwgc3RyaW5nSW1wbC0+Y2hhcmFj
dGVyczE2KCksIGhhZFBpeGVsT3JQb3NQcmVmaXgpOworfQorCiBzdGF0aWMgYm9vbCBpc0NTU1By
b3BlcnR5TmFtZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eUlkZW50aWZpZXIpCiB7Ci0gICAg
Ly8gRklYTUU6IFRoaXMgbWFsbG9jcyBhIHN0cmluZyBmb3IgdGhlIHByb3BlcnR5IG5hbWUgYW5k
IHRoZW4gdGhyb3dzIGl0Ci0gICAgLy8gYXdheS4gIFRoaXMgc2hvd3MgdXAgb24gcGVhY2VrZWVw
ZXIncyBkb21EeW5hbWljQ3JlYXRpb25DcmVhdGVFbGVtZW50LgogICAgIHJldHVybiBDU1NTdHls
ZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5TmFtZShjc3NQcm9wZXJ0eU5hbWUocHJvcGVydHlJZGVu
dGlmaWVyKSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124406</attachid>
            <date>2012-01-27 17:38:15 -0800</date>
            <delta_ts>2012-01-27 18:32:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74782-20120127173814.patch</filename>
            <type>text/plain</type>
            <size>3708</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmUyMzdmMWI3ZjM5NTRl
Zjc2ZTNmOWRhMTZhNDM5NmRmMTM5NGIzYy4uNTQ3ZGM5ODRjMzU0OGRhMTFlZWI4NThiNGY4YmJl
YWNkYjZjODRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAxLTI3ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSB0aGUg
bWVtb3J5IGFsbG9jYXRpb25zIG9mIFdlYkNvcmUncyBjc3NQcm9wZXJ0eU5hbWUoKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3ODIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBmYXN0IHBhdGgg
dG8gYXZvaWQgdGhlIHVzZSBvZiB0aGUgU3RyaW5nQnVpbGRlci4KKworICAgICAgICBUaGUgc3Ry
aW5nIGJ1aWxkZXIgaXMgbmVlZGVkIGZvciB0d28gY2FzZXM6CisgICAgICAgIC1DU1MgcHJlZml4
ICh0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBwcmVmaXggbXVzdCBiZSB1cHBlcmNhc2UpCisgICAg
ICAgIC1KYXZhU2NyaXB0IENhbWVsQ2FzZSBuYW1lIGZvciBDU1MgcHJvcGVydGllcworCisgICAg
ICAgIFdlIGNhbiBza2lwIGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaWYgdGhlIHByb3BlcnR5IGlz
IG5vdCBpbiB0aG9zZQorICAgICAgICB0d28gY2FzZXMuIFdlIHN0YXJ0IGJ5IHRlc3RpbmcgdGhl
IHN0cmluZyBmb3IgdXBwZXJjYXNlIGNoYXJhY3RlcnMsCisgICAgICAgIGFuZCBqdXN0IHJldHVy
biB0aGUgYW4gaWRlbnRpY2FsIHN0cmluZy4KKworICAgICAgICBUaGlzIHBhdGNoIGNyZWF0ZSBh
ICJmYXN0IGNhc2UiIDIuNyB0aW1lcyBmYXN0ZXIgdGhhbiBwcmV2aW91c2x5LgorICAgICAgICBU
aGUgInNsb3cgY2FzZSIgaXMgMi0zJSBzbG93ZXIgZHVlIHRvIHRoZSBhZGRpdGlvbmFsIGNoZWNr
IGF0IHRoZSBiZWdpbm5pbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVj
bGFyYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250YWluc0FTQ0lJVXBwZXJDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OmNzc1Byb3BlcnR5
TmFtZSk6CisKIDIwMTItMDEtMjcgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVy
cy5jb20+CiAKICAgICAgICAgW3d4XSBVbnJldmlld2VkLiBCdWlsZCBmaXgsIGFkZCBtaXNzaW5n
IGhlYWRlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5
bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCmluZGV4IDIzZmRhNDhkNjE2MWEyNWExMDhhNmYy
ZmZhZGI2MDg3ZTI3NmUyNDcuLmUwNTJjMDkxMGRhZWYzN2JmZDlhN2FhM2ZmYzkyNmFlYzIzMWRm
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNs
YXJhdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NT
dHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcApAQCAtMTM3LDYgKzEzNywyMyBAQCBzdGF0aWMgUHJv
cGVydHlOYW1lUHJlZml4IGdldENTU1Byb3BlcnR5TmFtZVByZWZpeChjb25zdCBTdHJpbmdJbXBs
JiBwcm9wZXJ0eU5hbQogICAgIHJldHVybiBQcm9wZXJ0eU5hbWVQcmVmaXhOb25lOwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIGNvbnRh
aW5zQVNDSUlVcHBlckNoYXIoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3RyaW5nLCBzaXplX3QgbGVu
Z3RoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAg
ICAgICBpZiAoaXNBU0NJSVVwcGVyKHN0cmluZ1tpXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29u
dGFpbnNBU0NJSVVwcGVyQ2hhcihjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCit7CisgICAgaWYg
KHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5zQVNDSUlVcHBlckNoYXIo
c3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGNvbnRh
aW5zQVNDSUlVcHBlckNoYXIoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkp
OworfQorCiBzdGF0aWMgU3RyaW5nIGNzc1Byb3BlcnR5TmFtZShjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGJvb2wqIGhhZFBpeGVsT3JQb3NQcmVmaXggPSAwKQogewogICAgIGlmICho
YWRQaXhlbE9yUG9zUHJlZml4KQpAQCAtMTQ2LDEwICsxNjMsMTUgQEAgc3RhdGljIFN0cmluZyBj
c3NQcm9wZXJ0eU5hbWUoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBib29sKiBoYWRQ
aXhlbE9yUG8KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCisg
ICAgU3RyaW5nSW1wbCogcHJvcGVydHlOYW1lU3RyaW5nID0gcHJvcGVydHlOYW1lLmltcGwoKTsK
KyAgICAvLyBJZiB0aGVyZSBpcyBubyB1cHBlcmNhc2UgY2hhcmFjdGVyIGluIHRoZSBwcm9wZXJ0
eU5hbWUsIHRoZXJlIGNhbgorICAgIC8vIGJlIG5vIHByZWZpeCwgbm9yIGV4dGVuc2lvbiBhbmQg
d2UgY2FuIHJldHVybiB0aGUgc2FtZSBzdHJpbmcuCisgICAgaWYgKCFjb250YWluc0FTQ0lJVXBw
ZXJDaGFyKCpwcm9wZXJ0eU5hbWVTdHJpbmcpKQorICAgICAgICByZXR1cm4gU3RyaW5nKHByb3Bl
cnR5TmFtZVN0cmluZyk7CisKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVpbGRl
ci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKIAotICAgIGNvbnN0IFN0cmluZ0ltcGwqIHByb3Bl
cnR5TmFtZVN0cmluZyA9IHByb3BlcnR5TmFtZS5pbXBsKCk7CiAgICAgdW5zaWduZWQgaSA9IDA7
CiAgICAgc3dpdGNoIChnZXRDU1NQcm9wZXJ0eU5hbWVQcmVmaXgoKnByb3BlcnR5TmFtZVN0cmlu
ZykpIHsKICAgICBjYXNlIFByb3BlcnR5TmFtZVByZWZpeE5vbmU6CkBAIC0xNzYsMTAgKzE5OCwx
MCBAQCBzdGF0aWMgU3RyaW5nIGNzc1Byb3BlcnR5TmFtZShjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGJvb2wqIGhhZFBpeGVsT3JQbwogICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScp
OwogICAgIH0KIAotICAgIGJ1aWxkZXIuYXBwZW5kKHRvQVNDSUlMb3dlcihwcm9wZXJ0eU5hbWUu
Y2hhcmFjdGVycygpW2krK10pKTsKKyAgICBidWlsZGVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIoKCpw
cm9wZXJ0eU5hbWVTdHJpbmcpW2krK10pKTsKIAogICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgVUNoYXIgYyA9IHByb3BlcnR5TmFtZS5jaGFyYWN0ZXJzKClbaV07CisgICAg
ICAgIFVDaGFyIGMgPSAoKnByb3BlcnR5TmFtZVN0cmluZylbaV07CiAgICAgICAgIGlmICghaXNB
U0NJSVVwcGVyKGMpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYyk7CiAgICAgICAgIGVs
c2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124420</attachid>
            <date>2012-01-27 18:32:38 -0800</date>
            <delta_ts>2012-01-30 11:18:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74782-20120127183237.patch</filename>
            <type>text/plain</type>
            <size>4170</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmUyMzdmMWI3ZjM5NTRl
Zjc2ZTNmOWRhMTZhNDM5NmRmMTM5NGIzYy4uOTMwZDYxOTk1YmIxYmI1NjU5ZGExMjM0Njk1MzI0
NzViNzRjY2U0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAxLTI3ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSB0aGUg
bWVtb3J5IGFsbG9jYXRpb25zIG9mIFdlYkNvcmUncyBjc3NQcm9wZXJ0eU5hbWUoKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3ODIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBmYXN0IHBhdGgg
dG8gYXZvaWQgdGhlIHVzZSBvZiB0aGUgU3RyaW5nQnVpbGRlci4KKworICAgICAgICBUaGUgc3Ry
aW5nIGJ1aWxkZXIgaXMgbmVlZGVkIGZvciB0d28gY2FzZXM6CisgICAgICAgIC1DU1MgcHJlZml4
ICh0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBwcmVmaXggbXVzdCBiZSB1cHBlcmNhc2UpCisgICAg
ICAgIC1KYXZhU2NyaXB0IENhbWVsQ2FzZSBuYW1lIGZvciBDU1MgcHJvcGVydGllcworCisgICAg
ICAgIFdlIGNhbiBza2lwIGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaWYgdGhlIHByb3BlcnR5IGlz
IG5vdCBpbiB0aG9zZQorICAgICAgICB0d28gY2FzZXMuIFdlIHN0YXJ0IGJ5IHRlc3RpbmcgdGhl
IHN0cmluZyBmb3IgdXBwZXJjYXNlIGNoYXJhY3RlcnMsCisgICAgICAgIGFuZCBqdXN0IHJldHVy
biB0aGUgYW4gaWRlbnRpY2FsIHN0cmluZy4KKworICAgICAgICBUaGlzIHBhdGNoIGNyZWF0ZSBh
ICJmYXN0IGNhc2UiIDIuNyB0aW1lcyBmYXN0ZXIgdGhhbiBwcmV2aW91c2x5LgorICAgICAgICBU
aGUgInNsb3cgY2FzZSIgaXMgMi0zJSBzbG93ZXIgZHVlIHRvIHRoZSBhZGRpdGlvbmFsIGNoZWNr
IGF0IHRoZSBiZWdpbm5pbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVj
bGFyYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250YWluc0FTQ0lJVXBwZXJDaGFyKToKKyAgICAgICAgKFdlYkNvcmU6OmNzc1Byb3BlcnR5
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppc0NTU1Byb3BlcnR5TmFtZSk6CisKIDIwMTItMDEt
MjcgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAg
W3d4XSBVbnJldmlld2VkLiBCdWlsZCBmaXgsIGFkZCBtaXNzaW5nIGhlYWRlci4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25D
dXN0b20uY3BwCmluZGV4IDIzZmRhNDhkNjE2MWEyNWExMDhhNmYyZmZhZGI2MDg3ZTI3NmUyNDcu
LjY4Y2ZmZGJjMGQ1MTkwNmU5Njg0MjZmMmQwNzhkYWU0YWY2MzFiMjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3Vz
dG9tLmNwcApAQCAtMTM3LDYgKzEzNywyMyBAQCBzdGF0aWMgUHJvcGVydHlOYW1lUHJlZml4IGdl
dENTU1Byb3BlcnR5TmFtZVByZWZpeChjb25zdCBTdHJpbmdJbXBsJiBwcm9wZXJ0eU5hbQogICAg
IHJldHVybiBQcm9wZXJ0eU5hbWVQcmVmaXhOb25lOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zQVNDSUlVcHBlckNoYXIo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogc3RyaW5nLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaXNBU0NJSVVw
cGVyKHN0cmluZ1tpXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNBU0NJSVVwcGVyQ2hh
cihjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkK
KyAgICAgICAgcmV0dXJuIGNvbnRhaW5zQVNDSUlVcHBlckNoYXIoc3RyaW5nLmNoYXJhY3RlcnM4
KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGNvbnRhaW5zQVNDSUlVcHBlckNoYXIo
c3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworfQorCiBzdGF0aWMgU3Ry
aW5nIGNzc1Byb3BlcnR5TmFtZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGJvb2wq
IGhhZFBpeGVsT3JQb3NQcmVmaXggPSAwKQogewogICAgIGlmIChoYWRQaXhlbE9yUG9zUHJlZml4
KQpAQCAtMTQ2LDEwICsxNjMsMTUgQEAgc3RhdGljIFN0cmluZyBjc3NQcm9wZXJ0eU5hbWUoY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBib29sKiBoYWRQaXhlbE9yUG8KICAgICBpZiAo
IWxlbmd0aCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCisgICAgU3RyaW5nSW1wbCogcHJv
cGVydHlOYW1lU3RyaW5nID0gcHJvcGVydHlOYW1lLmltcGwoKTsKKyAgICAvLyBJZiB0aGVyZSBp
cyBubyB1cHBlcmNhc2UgY2hhcmFjdGVyIGluIHRoZSBwcm9wZXJ0eU5hbWUsIHRoZXJlIGNhbgor
ICAgIC8vIGJlIG5vIHByZWZpeCwgbm9yIGV4dGVuc2lvbiBhbmQgd2UgY2FuIHJldHVybiB0aGUg
c2FtZSBzdHJpbmcuCisgICAgaWYgKCFjb250YWluc0FTQ0lJVXBwZXJDaGFyKCpwcm9wZXJ0eU5h
bWVTdHJpbmcpKQorICAgICAgICByZXR1cm4gU3RyaW5nKHByb3BlcnR5TmFtZVN0cmluZyk7CisK
ICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKTsKIAotICAgIGNvbnN0IFN0cmluZ0ltcGwqIHByb3BlcnR5TmFtZVN0cmluZyA9IHBy
b3BlcnR5TmFtZS5pbXBsKCk7CiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgc3dpdGNoIChnZXRD
U1NQcm9wZXJ0eU5hbWVQcmVmaXgoKnByb3BlcnR5TmFtZVN0cmluZykpIHsKICAgICBjYXNlIFBy
b3BlcnR5TmFtZVByZWZpeE5vbmU6CkBAIC0xNzYsMTAgKzE5OCwxMCBAQCBzdGF0aWMgU3RyaW5n
IGNzc1Byb3BlcnR5TmFtZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGJvb2wqIGhh
ZFBpeGVsT3JQbwogICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOwogICAgIH0KIAotICAgIGJ1
aWxkZXIuYXBwZW5kKHRvQVNDSUlMb3dlcihwcm9wZXJ0eU5hbWUuY2hhcmFjdGVycygpW2krK10p
KTsKKyAgICBidWlsZGVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIoKCpwcm9wZXJ0eU5hbWVTdHJpbmcp
W2krK10pKTsKIAogICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIg
YyA9IHByb3BlcnR5TmFtZS5jaGFyYWN0ZXJzKClbaV07CisgICAgICAgIFVDaGFyIGMgPSAoKnBy
b3BlcnR5TmFtZVN0cmluZylbaV07CiAgICAgICAgIGlmICghaXNBU0NJSVVwcGVyKGMpKQogICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoYyk7CiAgICAgICAgIGVsc2UKQEAgLTE5MSw4ICsyMTMs
NiBAQCBzdGF0aWMgU3RyaW5nIGNzc1Byb3BlcnR5TmFtZShjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGJvb2wqIGhhZFBpeGVsT3JQbwogCiBzdGF0aWMgYm9vbCBpc0NTU1Byb3BlcnR5
TmFtZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eUlkZW50aWZpZXIpCiB7Ci0gICAgLy8gRklY
TUU6IFRoaXMgbWFsbG9jcyBhIHN0cmluZyBmb3IgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4g
dGhyb3dzIGl0Ci0gICAgLy8gYXdheS4gIFRoaXMgc2hvd3MgdXAgb24gcGVhY2VrZWVwZXIncyBk
b21EeW5hbWljQ3JlYXRpb25DcmVhdGVFbGVtZW50LgogICAgIHJldHVybiBDU1NTdHlsZURlY2xh
cmF0aW9uOjppc1Byb3BlcnR5TmFtZShjc3NQcm9wZXJ0eU5hbWUocHJvcGVydHlJZGVudGlmaWVy
KSk7CiB9CiAK
</data>
<flag name="review"
          id="125668"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>