<?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>52934</bug_id>
          
          <creation_ts>2011-01-21 15:34:00 -0800</creation_ts>
          <short_desc>Use WTF::StringHasher in WebCore</short_desc>
          <delta_ts>2011-03-13 12:10:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>49894</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Patrick R. Gansterer">paroga</reporter>
          <assigned_to name="Patrick R. Gansterer">paroga</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>338388</commentid>
    <comment_count>0</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-01-21 15:34:00 -0800</bug_when>
    <thetext>Use WTF::StringHasher in WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338406</commentid>
    <comment_count>1</comment_count>
      <attachid>79806</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-01-21 15:51:07 -0800</bug_when>
    <thetext>Created attachment 79806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338497</commentid>
    <comment_count>2</comment_count>
      <attachid>79823</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-01-21 21:33:04 -0800</bug_when>
    <thetext>Created attachment 79823
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338703</commentid>
    <comment_count>3</comment_count>
      <attachid>79823</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-23 10:26:19 -0800</bug_when>
    <thetext>Comment on attachment 79823
Patch

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

In WebKit we normally use the word “create” to refer to allocating a new object. Thus, I don’t think that create is a good verb to use in hash functions. I prefer compute.

I don’t think that “blob” is a good name for a range of memory. I know we are using it to mean something like that in the web API.

As far as I am concerned these functions should all be named either computeHash or just hash, and should not have other words in them.

I think it is not good to have an object called StringHasher and then use it to hash things that are not strings.

The mechanics of this patch and the others are fine, but the aesthetics, naming, and semantics all seems subtly wrong.

&gt; Source/JavaScriptCore/wtf/StringHasher.h:144
&gt; +    static inline unsigned createBlobHash(const void* data, unsigned size)

What does the word blob mean in this function name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338707</commentid>
    <comment_count>4</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-01-23 10:55:31 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 79823 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=79823&amp;action=review
&gt; 
&gt; In WebKit we normally use the word “create” to refer to allocating a new object. Thus, I don’t think that create is a good verb to use in hash functions. I prefer compute.
You&apos;re right! All the other methods in the file have the same &quot;problem&quot; and there is already a createBlobHash with different parameters: http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/wtf/StringHasher.h?rev=74855#L138.

Can we land this patch so all calls to StringHasher are done vie create*Hash?
If ok I&apos;ll post a follow up patch with a rename of the file (to e.g. Hasher.h, HashComputer.h or HashCalculator.h???) and all methods to computeHash when this is landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338714</commentid>
    <comment_count>5</comment_count>
      <attachid>79823</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-23 11:17:56 -0800</bug_when>
    <thetext>Comment on attachment 79823
Patch

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

review- because of the WTF prefix issue. Other than this and the function naming that we decided to handle outside the scope of this patch, this seems fine.

&gt; Source/JavaScriptCore/wtf/StringHasher.h:146
&gt; +        ASSERT(!(size % 4));

Where does the number 4 come from here? The hasher can handle any object with a size that’s multiple of 2. It is true that 4 is the size of int and the size of pointers on 32-bit systems, but it seems a bit arbitrary to specifically support only ranges of memory that are multiples of 4.

&gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:92
&gt; -    return AlreadyHashed::avoidDeletedValue(StringImpl::computeHash(url.string().characters() + hostStart, hostEnd - hostStart));
&gt; +    return AlreadyHashed::avoidDeletedValue(WTF::StringHasher::createHash(url.string().characters() + hostStart, hostEnd - hostStart));

There should be no need to use the namespace prefix WTF. The WTF header files make use of using declarations, so files that use things defined in the WTF namespace should almost never need to explicitly include the WTF:: prefix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338733</commentid>
    <comment_count>6</comment_count>
      <attachid>79873</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-01-23 12:46:16 -0800</bug_when>
    <thetext>Created attachment 79873
Patch

(In reply to comment #5)
&gt; (From update of attachment 79823 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=79823&amp;action=review
&gt; 
&gt; review- because of the WTF prefix issue. Other than this and the function naming that we decided to handle outside the scope of this patch, this seems fine.
&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/StringHasher.h:146
&gt; &gt; +        ASSERT(!(size % 4));
&gt; 
&gt; Where does the number 4 come from here? The hasher can handle any object with a size that’s multiple of 2. It is true that 4 is the size of int and the size of pointers on 32-bit systems, but it seems a bit arbitrary to specifically support only ranges of memory that are multiples of 4.
Fixed.

&gt; &gt; Source/WebCore/loader/appcache/ApplicationCacheStorage.cpp:92
&gt; &gt; -    return AlreadyHashed::avoidDeletedValue(StringImpl::computeHash(url.string().characters() + hostStart, hostEnd - hostStart));
&gt; &gt; +    return AlreadyHashed::avoidDeletedValue(WTF::StringHasher::createHash(url.string().characters() + hostStart, hostEnd - hostStart));
&gt; 
&gt; There should be no need to use the namespace prefix WTF. The WTF header files make use of using declarations, so files that use things defined in the WTF namespace should almost never need to explicitly include the WTF:: prefix.
Is ok to adress this too in the follow up patch? StringHaser.h has no using WTF:StringHasher, and we use it already with the WTF prefix everywhere. see http://trac.webkit.org/changeset/70705</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338787</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-23 16:22:37 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; There should be no need to use the namespace prefix WTF. The WTF header files make use of using declarations, so files that use things defined in the WTF namespace should almost never need to explicitly include the WTF:: prefix.
&gt; Is ok to adress this too in the follow up patch?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338788</commentid>
    <comment_count>8</comment_count>
      <attachid>79873</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-23 16:23:15 -0800</bug_when>
    <thetext>Comment on attachment 79873
Patch

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

&gt; Source/JavaScriptCore/wtf/StringHasher.h:146
&gt; +        ASSERT(!(size % 2));

This is OK, but we could also use sizeof(UChar) here instead of the constant 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338797</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-23 17:00:22 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 79873:

http/tests/xmlhttprequest/failed-auth.html bug 51835 (author: ap@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338798</commentid>
    <comment_count>10</comment_count>
      <attachid>79873</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-23 17:01:05 -0800</bug_when>
    <thetext>Comment on attachment 79873
Patch

Clearing flags on attachment: 79873

Committed r76474: &lt;http://trac.webkit.org/changeset/76474&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338799</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-23 17:01:10 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338863</commentid>
    <comment_count>12</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-01-23 23:50:05 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 79873 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=79873&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/StringHasher.h:146
&gt; &gt; +        ASSERT(!(size % 2));
&gt; 
&gt; This is OK, but we could also use sizeof(UChar) here instead of the constant 2.

I&apos;ll address this too in the follow up patch.

@darin:
Can you please give me your opinion for the names (so I don&apos;t need to change it more than once ;-):
What is the preferred name for the file+classname? I would suggest Hasher, HashCalculator and my favorite HashComputer. But the resulting HashComputer::computeHash() would look kind of strange IMHO.
createHash should be renamed to comuteHash (that&apos;s easy :-)
If we rename createBlobHash to computeHash too, this will result in ugly overloads. I prefer computeBinaryDataHash, since you don&apos;t like &quot;blob&quot;.
Should I move the static computeHash() directly into WTF namespace and add using WTF::computeHash; ? This would solve the HashComputer::computeHash &quot;problem&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339268</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-24 14:25:00 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Can you please give me your opinion for the names (so I don&apos;t need to change it more than once ;-):
&gt; What is the preferred name for the file+classname? I would suggest Hasher, HashCalculator and my favorite HashComputer. But the resulting HashComputer::computeHash() would look kind of strange IMHO.

There are two ways to think of this:

    1) General purpose hasher for arbitrary data that we also use for strings.

    2) String hasher that we repurpose for arbitrary data.

If we think it’s (2), then I think StringHasher is a fine name. If we think it’s (1) then Hasher is a better name.

&gt; createHash should be renamed to computeHash (that&apos;s easy :-)

Yes. The other candidate would just be hash, but as long as we have a function named hash that gives the current hash of an instance, it’s bad style to use the same name using the verb form of “hash”.

&gt; If we rename createBlobHash to computeHash too, this will result in ugly overloads.

The strange overloading here is the one where we hash single-byte characters and expand them to UChars treating them as Latin-1. This is a useful operation, but I don’t think it should be hidden in an overload. This is the function of the “defaultCoverter“ (sic) for char, and it’s weak that this unusual behavior occurs automatically. It would do the wrong thing if the string had UTF-8 sequences in it, computing an incorrect hash.

I also think that overloading is a bit too subtle for the &quot;null-terminated string&quot; vs. &quot;arbitrary array of character&quot; versions. That seems the kind of thing I’d want to express in function names.

I think that overloading based on the type of data we want to hash is not ugly at all. It’s what overloading is best at!

But you are probably thinking of is the ambiguity between a size that is a number of bytes and a size that is a number of UChars. That is indeed a problem. We can’t use overloading if that will be the difference.

&gt; I prefer computeBinaryDataHash, since you don&apos;t like &quot;blob&quot;.

We definitely shouldn’t include the word “binary” since all our data is binary.

The standard library calls this kind of thing “memory”. As in “memcpy” vs. “strcpy” and the C++ header &lt;memory&gt;. So maybe we can use that term. Or “raw data” perhaps.

I think one good thing here is to acknowledge that we are making a hash by treating the data as characters. A name that acknowledged that would also make clear why the length needs to be a multiple of sizeof(UChar).

&gt; Should I move the static computeHash() directly into WTF namespace and add using WTF::computeHash; ? This would solve the HashComputer::computeHash &quot;problem&quot;.

I think it’s a close call. Normally I like free functions much better than static members. But in the case of StringHasher, I think that:

    StringHasher::hashMemory

makes it clear that we are reusing the string hash to hash memory, which is something I suggested we do above.

Sorry I couldn’t give you straighter answers. Those are my thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366632</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-12 19:27:43 -0800</bug_when>
    <thetext>The IntegerArrayHash::hash change here was wrong; passing the wrong length. Not sure how I missed it when reviewing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366700</commentid>
    <comment_count>15</comment_count>
      <attachid>85616</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-03-13 03:52:16 -0700</bug_when>
    <thetext>Created attachment 85616
IntegerArray fix

(In reply to comment #14)
&gt; The IntegerArrayHash::hash change here was wrong; passing the wrong length. Not sure how I missed it when reviewing!
The IntegerArray::size returns the count of integers and not the memory size in bytes, so the hashing was wrong all the time.

BTW: Can you review the follow up patch at bug 53532?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366713</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-13 12:10:31 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; The IntegerArrayHash::hash change here was wrong; passing the wrong length. Not sure how I missed it when reviewing!
&gt; The IntegerArray::size returns the count of integers and not the memory size in bytes, so the hashing was wrong all the time.

No, that’s incorrect. The old code was right. This was broken during the conversion process by removing the old code without understanding it.

The old code did math involving both sizeof(int) and sizeof(UChar) to convert from count of integers to count of UChar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366714</commentid>
    <comment_count>17</comment_count>
      <attachid>85616</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-13 12:10:57 -0700</bug_when>
    <thetext>Comment on attachment 85616
IntegerArray fix

Patch is fine, but I already dealt with this yesterday.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79806</attachid>
            <date>2011-01-21 15:51:07 -0800</date>
            <delta_ts>2011-01-21 21:32:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52934-20110122005104.patch</filename>
            <type>text/plain</type>
            <size>5747</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDk0M2Y3MTk4NmM5ODEzZjU3YTE0YWU1ODVhY2Uz
ODE0YTQ1NzVjZGQuLmFlNTM0ZjViNzMzZGM0NzM2MDg2NTc2MzI4YjQ5M2EzNjUzYWJhYjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTAxLTIxICBQYXRy
aWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBXVEY6OlN0cmluZ0hhc2hlciBpbiBXZWJD
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjkz
NAorCisgICAgICAgIEFkZCBhbiBhZGRpdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUg
aGFzaAorICAgICAgICBvZiBkYXRhIHdpdGggYSBydW50aW1lZGVwZW5kZW50IHNpemUuCisKKyAg
ICAgICAgKiB3dGYvU3RyaW5nSGFzaGVyLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0hhc2hlcjo6
Y3JlYXRlQmxvYkhhc2gpOgorCiAyMDExLTAxLTIxICBQZXRlciBHYWwgIDxnYWxwZXRlckBpbmYu
dS1zemVnZWQuaHU+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0hhc2hlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9TdHJpbmdIYXNoZXIuaAppbmRleCA2M2NlNzRmMGVmZWE2ZmU0YzY5
NjM3MmE3OGRjNTIxYjdkZTZiMDU4Li43OTA1YjNjZmFkNTE4MDg5ZmI1ZjY0MjVmY2MxYjFmNTdi
OTNlNGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0hhc2hl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RyaW5nSGFzaGVyLmgKQEAgLTE0
MSw2ICsxNDEsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRlSGFzaDxVQ2hhcj4o
c3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihkYXRhKSwgbGVuZ3RoIC8gc2l6ZW9mKFVDaGFyKSk7
CiAgICAgfQogCisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBjcmVhdGVCbG9iSGFzaChjb25z
dCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEoc2l6
ZSAlIDQpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUhhc2g8VUNoYXI+KHN0YXRpY19jYXN0PGNv
bnN0IFVDaGFyKj4oZGF0YSksIHNpemUgLyBzaXplb2YoVUNoYXIpKTsKKyAgICB9CisKIHByaXZh
dGU6CiAgICAgc3RhdGljIGlubGluZSBVQ2hhciBkZWZhdWx0Q292ZXJ0ZXIoVUNoYXIgY2gpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDA0ODhkYTU1MGJiOTJkNmVmYmIxYjIwMjFhMjQ4MDdlODBkZDUw
OTIuLjI3MTM3MTExYzQ0NTY0NGUxMjcxYWEwYTU0NDdjNzFjNmE4N2I4ODEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOSBAQAorMjAxMS0wMS0yMSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FA
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVc2UgV1RGOjpTdHJpbmdIYXNoZXIgaW4gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI5MzQKKworICAgICAgICAqIGxvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1
cmxIb3N0SGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVnZXJBcnJheUhhc2g6Omhhc2gpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRQbGF0Zm9ybURhdGFXeC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpjb21wdXRlSGFzaCk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2VIYXNoLmg6CisgICAgICAgIChXZWJDb3JlOjpQcm90
ZWN0aW9uU3BhY2VIYXNoOjpoYXNoKToKKwogMjAxMS0wMS0yMSAgVG9ueSBDaGFuZyAgPHRvbnlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlLmNwcAppbmRleCA3YjIwNzc1N2E5M2Q2OWY5NWZlNDdlNDFhMzA3ZDFiYmNiNTdkY2Rl
Li4wYzAwZWU2MWQ0NDk4NTFkMDFmOGYzM2NhOTNhNDVhN2RjYWM3MGMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgc3RhdGljIHVuc2lnbmVkIHVybEhvc3RIYXNoKGNv
bnN0IEtVUkwmIHVybCkKICAgICB1bnNpZ25lZCBob3N0U3RhcnQgPSB1cmwuaG9zdFN0YXJ0KCk7
CiAgICAgdW5zaWduZWQgaG9zdEVuZCA9IHVybC5ob3N0RW5kKCk7CiAgICAgCi0gICAgcmV0dXJu
IEFscmVhZHlIYXNoZWQ6OmF2b2lkRGVsZXRlZFZhbHVlKFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNo
KHVybC5zdHJpbmcoKS5jaGFyYWN0ZXJzKCkgKyBob3N0U3RhcnQsIGhvc3RFbmQgLSBob3N0U3Rh
cnQpKTsKKyAgICByZXR1cm4gQWxyZWFkeUhhc2hlZDo6YXZvaWREZWxldGVkVmFsdWUoV1RGOjpT
dHJpbmdIYXNoZXI6OmNyZWF0ZUhhc2godXJsLnN0cmluZygpLmNoYXJhY3RlcnMoKSArIGhvc3RT
dGFydCwgaG9zdEVuZCAtIGhvc3RTdGFydCkpOwogfQogCiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAq
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cChjb25zdCBLVVJMJiBtYW5p
ZmVzdFVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVBy
b3BlcnR5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0
eUxpc3QuY3BwCmluZGV4IDI3YjQ0ZDQ1ODRkY2NlMmRjNzUyOWE2YmM3Yjg5ZGY5NzE4N2NlOTUu
LjQxNzY5ZTgwZWJkMWQ1ZmFiZDMwYWQyMzM3NGY1ZDg5MzFkMzE2MjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcApAQCAtOTIsNyAr
OTIsNyBAQCBzdHJ1Y3QgSW50ZWdlckFycmF5SGFzaCB7CiAKIHVuc2lnbmVkIEludGVnZXJBcnJh
eUhhc2g6Omhhc2goY29uc3QgSW50ZWdlckFycmF5JiBhcnJheSkKIHsKLSAgICByZXR1cm4gU3Ry
aW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KGFycmF5
LmludGVnZXJzKCkpLCBhcnJheS5zaXplKCkgLyAoc2l6ZW9mKGludCkgLyBzaXplb2YoVUNoYXIp
KSk7CisgICAgcmV0dXJuIFdURjo6U3RyaW5nSGFzaGVyOjpjcmVhdGVCbG9iSGFzaChhcnJheS5p
bnRlZ2VycygpLCBhcnJheS5zaXplKCkpOwogfQogCiBib29sIEludGVnZXJBcnJheUhhc2g6OmVx
dWFsKGNvbnN0IEludGVnZXJBcnJheSYgYSwgY29uc3QgSW50ZWdlckFycmF5JiBiKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFBsYXRmb3JtRGF0
YVd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRQbGF0Zm9y
bURhdGFXeC5jcHAKaW5kZXggNjZjNjllZWZkYWY2MmMyMjIwZDZiNmIxNTA2ZTU4MDliZDBmYmU3
MS4uZDE0NGEyYzA3ZGVmM2JkMjQzOWViZjg3ZmI1ZjY3YWU5MDkwYTM0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFBsYXRmb3JtRGF0YVd4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250UGxhdGZvcm1E
YXRhV3guY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6
Y29tcHV0ZUhhc2goKSBjb25zdAogICAgICAgICB0aGlzRm9udC0+R2V0U3R5bGUoKSwKICAgICAg
ICAgdGhpc0ZvbnQtPkdldFdlaWdodCgpLAogICAgICAgICB0aGlzRm9udC0+R2V0VW5kZXJsaW5l
ZCgpLCAKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2godGhpc0ZvbnQtPkdldEZhY2VO
YW1lKCkudXRmOF9zdHIoKSkKKyAgICAgICAgV1RGOjpTdHJpbmdIYXNoZXI6OmNyZWF0ZUhhc2go
dGhpc0ZvbnQtPkdldEZhY2VOYW1lKCkudXRmOF9zdHIoKSkKICAgICB9OwogCiAgICAgcmV0dXJu
IFdURjo6U3RyaW5nSGFzaGVyOjpjcmVhdGVCbG9iSGFzaDxzaXplb2YoaGFzaENvZGVzKT4oaGFz
aENvZGVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJv
dGVjdGlvblNwYWNlSGFzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90
ZWN0aW9uU3BhY2VIYXNoLmgKaW5kZXggMDg3MTZiNTk2MWQ3ODM3YWFjZDJhNmZlMDkyZTIwYWI4
ZjFkNDUwMC4uOTkzNDMyMThhYzkwNDczNDYzMjJmOTZlNjIxNzE0ZTQ3NTFmNTJjOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2VIYXNo
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2VI
YXNoLmgKQEAgLTQyLDExICs0MiwxMSBAQCBzdHJ1Y3QgUHJvdGVjdGlvblNwYWNlSGFzaCB7CiAg
ICAgICAgICAgICBwcm90ZWN0aW9uU3BhY2UucmVhbG0oKS5pbXBsKCkgPyBwcm90ZWN0aW9uU3Bh
Y2UucmVhbG0oKS5pbXBsKCktPmhhc2goKSA6IDAKICAgICAgICAgfTsKIAotICAgICAgICB1bnNp
Z25lZCBjb2RlQ291bnQgPSBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcik7CisgICAg
ICAgIHVuc2lnbmVkIGNvZGVDb3VudCA9IHNpemVvZihoYXNoQ29kZXMpOwogICAgICAgICAvLyBJ
Z25vcmUgcmVhbG0gZm9yIHByb3hpZXMuCiAgICAgICAgIGlmIChwcm90ZWN0aW9uU3BhY2UuaXNQ
cm94eSgpKQotICAgICAgICAgICAgY29kZUNvdW50IC09IHNpemVvZihoYXNoQ29kZXNbMF0pIC8g
c2l6ZW9mKFVDaGFyKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJl
aW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCBjb2RlQ291bnQpOworICAgICAgICAg
ICAgY29kZUNvdW50IC09IHNpemVvZihoYXNoQ29kZXNbMF0pOworICAgICAgICByZXR1cm4gV1RG
OjpTdHJpbmdIYXNoZXI6OmNyZWF0ZUJsb2JIYXNoKGhhc2hDb2RlcywgY29kZUNvdW50KTsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBh
LCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79823</attachid>
            <date>2011-01-21 21:33:04 -0800</date>
            <delta_ts>2011-01-23 12:46:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52934-20110122063301.patch</filename>
            <type>text/plain</type>
            <size>6549</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQwYmY4ZTgxZGM1NTNkOTFlNGY4NTc3ZjQ2Mzhj
YjIxZGYwODU2NjIuLjgxM2I1NmU3OGUxYjA2ZmJhYTkzMzg4Nzk4NWM1MzkwOGJiYTZhZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTAxLTIxICBQYXRy
aWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBXVEY6OlN0cmluZ0hhc2hlciBpbiBXZWJD
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjkz
NAorCisgICAgICAgIEFkZCBhbiBhZGRpdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUg
aGFzaAorICAgICAgICBvZiBkYXRhIHdpdGggYSBydW50aW1lZGVwZW5kZW50IHNpemUuCisKKyAg
ICAgICAgKiB3dGYvU3RyaW5nSGFzaGVyLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0hhc2hlcjo6
Y3JlYXRlQmxvYkhhc2gpOgorCiAyMDExLTAxLTIxICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0hhc2hlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9TdHJpbmdIYXNoZXIuaAppbmRleCA2M2NlNzRmMGVmZWE2ZmU0
YzY5NjM3MmE3OGRjNTIxYjdkZTZiMDU4Li43OTA1YjNjZmFkNTE4MDg5ZmI1ZjY0MjVmY2MxYjFm
NTdiOTNlNGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0hh
c2hlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RyaW5nSGFzaGVyLmgKQEAg
LTE0MSw2ICsxNDEsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRlSGFzaDxVQ2hh
cj4oc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihkYXRhKSwgbGVuZ3RoIC8gc2l6ZW9mKFVDaGFy
KSk7CiAgICAgfQogCisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBjcmVhdGVCbG9iSGFzaChj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEo
c2l6ZSAlIDQpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUhhc2g8VUNoYXI+KHN0YXRpY19jYXN0
PGNvbnN0IFVDaGFyKj4oZGF0YSksIHNpemUgLyBzaXplb2YoVUNoYXIpKTsKKyAgICB9CisKIHBy
aXZhdGU6CiAgICAgc3RhdGljIGlubGluZSBVQ2hhciBkZWZhdWx0Q292ZXJ0ZXIoVUNoYXIgY2gp
CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNjZGVkMTU4MGI0YjFhMzMxYmRhYTdjYTI4OGFiMjI4YTRl
YzBmOTUuLjRhNWNhMDE3MGJkOTA1YzIwYWJiMjJmMDcxMTZmNDNkODQwOTJlODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0wMS0yMSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVc2UgV1RGOjpTdHJpbmdIYXNoZXIgaW4gV2ViQ29yZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI5MzQKKworICAgICAgICAqIGxvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp1cmxIb3N0SGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vTGlua0hhc2guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoSW5saW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
Zi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZWdlckFycmF5
SGFzaDo6aGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFBsYXRmb3Jt
RGF0YVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmNvbXB1dGVI
YXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFjZUhhc2guaDoK
KyAgICAgICAgKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZUhhc2g6Omhhc2gpOgorCiAyMDExLTAx
LTIxICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4
IDdiMjA3NzU3YTkzZDY5Zjk1ZmU0N2U0MWEzMDdkMWJiY2I1N2RjZGUuLjBjMDBlZTYxZDQ0OTg1
MWQwMWY4ZjMzY2E5M2E0NWE3ZGNhYzcwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtODks
NyArODksNyBAQCBzdGF0aWMgdW5zaWduZWQgdXJsSG9zdEhhc2goY29uc3QgS1VSTCYgdXJsKQog
ICAgIHVuc2lnbmVkIGhvc3RTdGFydCA9IHVybC5ob3N0U3RhcnQoKTsKICAgICB1bnNpZ25lZCBo
b3N0RW5kID0gdXJsLmhvc3RFbmQoKTsKICAgICAKLSAgICByZXR1cm4gQWxyZWFkeUhhc2hlZDo6
YXZvaWREZWxldGVkVmFsdWUoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2godXJsLnN0cmluZygpLmNo
YXJhY3RlcnMoKSArIGhvc3RTdGFydCwgaG9zdEVuZCAtIGhvc3RTdGFydCkpOworICAgIHJldHVy
biBBbHJlYWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZShXVEY6OlN0cmluZ0hhc2hlcjo6Y3Jl
YXRlSGFzaCh1cmwuc3RyaW5nKCkuY2hhcmFjdGVycygpICsgaG9zdFN0YXJ0LCBob3N0RW5kIC0g
aG9zdFN0YXJ0KSk7CiB9CiAKIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmxvYWRDYWNoZUdyb3VwKGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCmluZGV4IGFjM2FhM2MzNDQxYTI5MmQ4MGI3NTU1ZDk4
M2I1YTBiZTU4MWMzNDQuLmEyYWNhZDEzN2VmZjQyNjMxZjVkZGFkYjAxOGE0OTZiODhlMGVmY2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAKQEAgLTE5Nyw3ICsxOTcsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgbmVlZHNUcmFpbGluZ1NsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIExpbmtIYXNoIHZp
c2l0ZWRMaW5rSGFzaElubGluZShjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCiB7
Ci0gICAgcmV0dXJuIEFscmVhZHlIYXNoZWQ6OmF2b2lkRGVsZXRlZFZhbHVlKFN0cmluZ0ltcGw6
OmNvbXB1dGVIYXNoKHVybCwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIEFscmVhZHlIYXNoZWQ6OmF2
b2lkRGVsZXRlZFZhbHVlKFdURjo6U3RyaW5nSGFzaGVyOjpjcmVhdGVIYXNoKHVybCwgbGVuZ3Ro
KSk7CiB9CiAKIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNp
Z25lZCBsZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5h
cnlQcm9wZXJ0eUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJv
cGVydHlMaXN0LmNwcAppbmRleCAyN2I0NGQ0NTg0ZGNjZTJkYzc1MjlhNmJjN2I4OWRmOTcxODdj
ZTk1Li40MTc2OWU4MGViZDFkNWZhYmQzMGFkMjMzNzRmNWQ4OTMxZDMxNjIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKQEAgLTky
LDcgKzkyLDcgQEAgc3RydWN0IEludGVnZXJBcnJheUhhc2ggewogCiB1bnNpZ25lZCBJbnRlZ2Vy
QXJyYXlIYXNoOjpoYXNoKGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkpCiB7Ci0gICAgcmV0dXJu
IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihh
cnJheS5pbnRlZ2VycygpKSwgYXJyYXkuc2l6ZSgpIC8gKHNpemVvZihpbnQpIC8gc2l6ZW9mKFVD
aGFyKSkpOworICAgIHJldHVybiBXVEY6OlN0cmluZ0hhc2hlcjo6Y3JlYXRlQmxvYkhhc2goYXJy
YXkuaW50ZWdlcnMoKSwgYXJyYXkuc2l6ZSgpKTsKIH0KIAogYm9vbCBJbnRlZ2VyQXJyYXlIYXNo
OjplcXVhbChjb25zdCBJbnRlZ2VyQXJyYXkmIGEsIGNvbnN0IEludGVnZXJBcnJheSYgYikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRQbGF0Zm9y
bURhdGFXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250UGxh
dGZvcm1EYXRhV3guY3BwCmluZGV4IDY2YzY5ZWVmZGFmNjJjMjIyMGQ2YjZiMTUwNmU1ODA5YmQw
ZmJlNzEuLmQxNDRhMmMwN2RlZjNiZDI0MzllYmY4N2ZiNWY2N2FlOTA5MGEzNDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRQbGF0Zm9ybURhdGFX
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFBsYXRm
b3JtRGF0YVd4LmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIHVuc2lnbmVkIEZvbnRQbGF0Zm9ybURh
dGE6OmNvbXB1dGVIYXNoKCkgY29uc3QKICAgICAgICAgdGhpc0ZvbnQtPkdldFN0eWxlKCksCiAg
ICAgICAgIHRoaXNGb250LT5HZXRXZWlnaHQoKSwKICAgICAgICAgdGhpc0ZvbnQtPkdldFVuZGVy
bGluZWQoKSwgCi0gICAgICAgIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHRoaXNGb250LT5HZXRG
YWNlTmFtZSgpLnV0Zjhfc3RyKCkpCisgICAgICAgIFdURjo6U3RyaW5nSGFzaGVyOjpjcmVhdGVI
YXNoKHRoaXNGb250LT5HZXRGYWNlTmFtZSgpLnV0Zjhfc3RyKCkpCiAgICAgfTsKIAogICAgIHJl
dHVybiBXVEY6OlN0cmluZ0hhc2hlcjo6Y3JlYXRlQmxvYkhhc2g8c2l6ZW9mKGhhc2hDb2Rlcyk+
KGhhc2hDb2Rlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Byb3RlY3Rpb25TcGFjZUhhc2guaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UHJvdGVjdGlvblNwYWNlSGFzaC5oCmluZGV4IDA4NzE2YjU5NjFkNzgzN2FhY2QyYTZmZTA5MmUy
MGFiOGYxZDQ1MDAuLjk5MzQzMjE4YWM5MDQ3MzQ2MzIyZjk2ZTYyMTcxNGU0NzUxZjUyYzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNl
SGFzaC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNw
YWNlSGFzaC5oCkBAIC00MiwxMSArNDIsMTEgQEAgc3RydWN0IFByb3RlY3Rpb25TcGFjZUhhc2gg
ewogICAgICAgICAgICAgcHJvdGVjdGlvblNwYWNlLnJlYWxtKCkuaW1wbCgpID8gcHJvdGVjdGlv
blNwYWNlLnJlYWxtKCkuaW1wbCgpLT5oYXNoKCkgOiAwCiAgICAgICAgIH07CiAKLSAgICAgICAg
dW5zaWduZWQgY29kZUNvdW50ID0gc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpOwor
ICAgICAgICB1bnNpZ25lZCBjb2RlQ291bnQgPSBzaXplb2YoaGFzaENvZGVzKTsKICAgICAgICAg
Ly8gSWdub3JlIHJlYWxtIGZvciBwcm94aWVzLgogICAgICAgICBpZiAocHJvdGVjdGlvblNwYWNl
LmlzUHJveHkoKSkKLSAgICAgICAgICAgIGNvZGVDb3VudCAtPSBzaXplb2YoaGFzaENvZGVzWzBd
KSAvIHNpemVvZihVQ2hhcik7Ci0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFz
aChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgY29kZUNvdW50KTsKKyAgICAg
ICAgICAgIGNvZGVDb3VudCAtPSBzaXplb2YoaGFzaENvZGVzWzBdKTsKKyAgICAgICAgcmV0dXJu
IFdURjo6U3RyaW5nSGFzaGVyOjpjcmVhdGVCbG9iSGFzaChoYXNoQ29kZXMsIGNvZGVDb3VudCk7
CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb3RlY3Rpb25TcGFj
ZSYgYSwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBiKSB7IHJldHVybiBhID09IGI7IH0K
</data>
<flag name="review"
          id="71260"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="71261"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79873</attachid>
            <date>2011-01-23 12:46:16 -0800</date>
            <delta_ts>2011-03-13 03:52:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52934.patch</filename>
            <type>text/plain</type>
            <size>6549</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQwYmY4ZTgxZGM1NTNkOTFlNGY4NTc3ZjQ2Mzhj
YjIxZGYwODU2NjIuLjgxM2I1NmU3OGUxYjA2ZmJhYTkzMzg4Nzk4NWM1MzkwOGJiYTZhZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTAxLTIxICBQYXRy
aWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBXVEY6OlN0cmluZ0hhc2hlciBpbiBXZWJD
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjkz
NAorCisgICAgICAgIEFkZCBhbiBhZGRpdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUg
aGFzaAorICAgICAgICBvZiBkYXRhIHdpdGggYSBydW50aW1lZGVwZW5kZW50IHNpemUuCisKKyAg
ICAgICAgKiB3dGYvU3RyaW5nSGFzaGVyLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0hhc2hlcjo6
Y3JlYXRlQmxvYkhhc2gpOgorCiAyMDExLTAxLTIxICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0hhc2hlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9TdHJpbmdIYXNoZXIuaAppbmRleCA2M2NlNzRmMGVmZWE2ZmU0
YzY5NjM3MmE3OGRjNTIxYjdkZTZiMDU4Li43OTA1YjNjZmFkNTE4MDg5ZmI1ZjY0MjVmY2MxYjFm
NTdiOTNlNGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0hh
c2hlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RyaW5nSGFzaGVyLmgKQEAg
LTE0MSw2ICsxNDEsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY3JlYXRlSGFzaDxVQ2hh
cj4oc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihkYXRhKSwgbGVuZ3RoIC8gc2l6ZW9mKFVDaGFy
KSk7CiAgICAgfQogCisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBjcmVhdGVCbG9iSGFzaChj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEo
c2l6ZSAlIDIpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUhhc2g8VUNoYXI+KHN0YXRpY19jYXN0
PGNvbnN0IFVDaGFyKj4oZGF0YSksIHNpemUgLyBzaXplb2YoVUNoYXIpKTsKKyAgICB9CisKIHBy
aXZhdGU6CiAgICAgc3RhdGljIGlubGluZSBVQ2hhciBkZWZhdWx0Q292ZXJ0ZXIoVUNoYXIgY2gp
CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNjZGVkMTU4MGI0YjFhMzMxYmRhYTdjYTI4OGFiMjI4YTRl
YzBmOTUuLjRhNWNhMDE3MGJkOTA1YzIwYWJiMjJmMDcxMTZmNDNkODQwOTJlODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0wMS0yMSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVc2UgV1RGOjpTdHJpbmdIYXNoZXIgaW4gV2ViQ29yZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI5MzQKKworICAgICAgICAqIGxvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp1cmxIb3N0SGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vTGlua0hhc2guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dmlzaXRlZExpbmtIYXNoSW5saW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
Zi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZWdlckFycmF5
SGFzaDo6aGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFBsYXRmb3Jt
RGF0YVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmNvbXB1dGVI
YXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFjZUhhc2guaDoK
KyAgICAgICAgKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZUhhc2g6Omhhc2gpOgorCiAyMDExLTAx
LTIxICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCmluZGV4
IDdiMjA3NzU3YTkzZDY5Zjk1ZmU0N2U0MWEzMDdkMWJiY2I1N2RjZGUuLjBjMDBlZTYxZDQ0OTg1
MWQwMWY4ZjMzY2E5M2E0NWE3ZGNhYzcwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcApAQCAtODks
NyArODksNyBAQCBzdGF0aWMgdW5zaWduZWQgdXJsSG9zdEhhc2goY29uc3QgS1VSTCYgdXJsKQog
ICAgIHVuc2lnbmVkIGhvc3RTdGFydCA9IHVybC5ob3N0U3RhcnQoKTsKICAgICB1bnNpZ25lZCBo
b3N0RW5kID0gdXJsLmhvc3RFbmQoKTsKICAgICAKLSAgICByZXR1cm4gQWxyZWFkeUhhc2hlZDo6
YXZvaWREZWxldGVkVmFsdWUoU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2godXJsLnN0cmluZygpLmNo
YXJhY3RlcnMoKSArIGhvc3RTdGFydCwgaG9zdEVuZCAtIGhvc3RTdGFydCkpOworICAgIHJldHVy
biBBbHJlYWR5SGFzaGVkOjphdm9pZERlbGV0ZWRWYWx1ZShXVEY6OlN0cmluZ0hhc2hlcjo6Y3Jl
YXRlSGFzaCh1cmwuc3RyaW5nKCkuY2hhcmFjdGVycygpICsgaG9zdFN0YXJ0LCBob3N0RW5kIC0g
aG9zdFN0YXJ0KSk7CiB9CiAKIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OmxvYWRDYWNoZUdyb3VwKGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGlua0hhc2guY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCmluZGV4IGFjM2FhM2MzNDQxYTI5MmQ4MGI3NTU1ZDk4
M2I1YTBiZTU4MWMzNDQuLmEyYWNhZDEzN2VmZjQyNjMxZjVkZGFkYjAxOGE0OTZiODhlMGVmY2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAKQEAgLTE5Nyw3ICsxOTcsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgbmVlZHNUcmFpbGluZ1NsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIExpbmtIYXNoIHZp
c2l0ZWRMaW5rSGFzaElubGluZShjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCiB7
Ci0gICAgcmV0dXJuIEFscmVhZHlIYXNoZWQ6OmF2b2lkRGVsZXRlZFZhbHVlKFN0cmluZ0ltcGw6
OmNvbXB1dGVIYXNoKHVybCwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIEFscmVhZHlIYXNoZWQ6OmF2
b2lkRGVsZXRlZFZhbHVlKFdURjo6U3RyaW5nSGFzaGVyOjpjcmVhdGVIYXNoKHVybCwgbGVuZ3Ro
KSk7CiB9CiAKIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNp
Z25lZCBsZW5ndGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5h
cnlQcm9wZXJ0eUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJv
cGVydHlMaXN0LmNwcAppbmRleCAyN2I0NGQ0NTg0ZGNjZTJkYzc1MjlhNmJjN2I4OWRmOTcxODdj
ZTk1Li40MTc2OWU4MGViZDFkNWZhYmQzMGFkMjMzNzRmNWQ4OTMxZDMxNjIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAKQEAgLTky
LDcgKzkyLDcgQEAgc3RydWN0IEludGVnZXJBcnJheUhhc2ggewogCiB1bnNpZ25lZCBJbnRlZ2Vy
QXJyYXlIYXNoOjpoYXNoKGNvbnN0IEludGVnZXJBcnJheSYgYXJyYXkpCiB7Ci0gICAgcmV0dXJu
IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihh
cnJheS5pbnRlZ2VycygpKSwgYXJyYXkuc2l6ZSgpIC8gKHNpemVvZihpbnQpIC8gc2l6ZW9mKFVD
aGFyKSkpOworICAgIHJldHVybiBXVEY6OlN0cmluZ0hhc2hlcjo6Y3JlYXRlQmxvYkhhc2goYXJy
YXkuaW50ZWdlcnMoKSwgYXJyYXkuc2l6ZSgpKTsKIH0KIAogYm9vbCBJbnRlZ2VyQXJyYXlIYXNo
OjplcXVhbChjb25zdCBJbnRlZ2VyQXJyYXkmIGEsIGNvbnN0IEludGVnZXJBcnJheSYgYikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRQbGF0Zm9y
bURhdGFXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250UGxh
dGZvcm1EYXRhV3guY3BwCmluZGV4IDY2YzY5ZWVmZGFmNjJjMjIyMGQ2YjZiMTUwNmU1ODA5YmQw
ZmJlNzEuLmQxNDRhMmMwN2RlZjNiZDI0MzllYmY4N2ZiNWY2N2FlOTA5MGEzNDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRQbGF0Zm9ybURhdGFX
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFBsYXRm
b3JtRGF0YVd4LmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIHVuc2lnbmVkIEZvbnRQbGF0Zm9ybURh
dGE6OmNvbXB1dGVIYXNoKCkgY29uc3QKICAgICAgICAgdGhpc0ZvbnQtPkdldFN0eWxlKCksCiAg
ICAgICAgIHRoaXNGb250LT5HZXRXZWlnaHQoKSwKICAgICAgICAgdGhpc0ZvbnQtPkdldFVuZGVy
bGluZWQoKSwgCi0gICAgICAgIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHRoaXNGb250LT5HZXRG
YWNlTmFtZSgpLnV0Zjhfc3RyKCkpCisgICAgICAgIFdURjo6U3RyaW5nSGFzaGVyOjpjcmVhdGVI
YXNoKHRoaXNGb250LT5HZXRGYWNlTmFtZSgpLnV0Zjhfc3RyKCkpCiAgICAgfTsKIAogICAgIHJl
dHVybiBXVEY6OlN0cmluZ0hhc2hlcjo6Y3JlYXRlQmxvYkhhc2g8c2l6ZW9mKGhhc2hDb2Rlcyk+
KGhhc2hDb2Rlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Byb3RlY3Rpb25TcGFjZUhhc2guaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UHJvdGVjdGlvblNwYWNlSGFzaC5oCmluZGV4IDA4NzE2YjU5NjFkNzgzN2FhY2QyYTZmZTA5MmUy
MGFiOGYxZDQ1MDAuLjk5MzQzMjE4YWM5MDQ3MzQ2MzIyZjk2ZTYyMTcxNGU0NzUxZjUyYzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNl
SGFzaC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNw
YWNlSGFzaC5oCkBAIC00MiwxMSArNDIsMTEgQEAgc3RydWN0IFByb3RlY3Rpb25TcGFjZUhhc2gg
ewogICAgICAgICAgICAgcHJvdGVjdGlvblNwYWNlLnJlYWxtKCkuaW1wbCgpID8gcHJvdGVjdGlv
blNwYWNlLnJlYWxtKCkuaW1wbCgpLT5oYXNoKCkgOiAwCiAgICAgICAgIH07CiAKLSAgICAgICAg
dW5zaWduZWQgY29kZUNvdW50ID0gc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpOwor
ICAgICAgICB1bnNpZ25lZCBjb2RlQ291bnQgPSBzaXplb2YoaGFzaENvZGVzKTsKICAgICAgICAg
Ly8gSWdub3JlIHJlYWxtIGZvciBwcm94aWVzLgogICAgICAgICBpZiAocHJvdGVjdGlvblNwYWNl
LmlzUHJveHkoKSkKLSAgICAgICAgICAgIGNvZGVDb3VudCAtPSBzaXplb2YoaGFzaENvZGVzWzBd
KSAvIHNpemVvZihVQ2hhcik7Ci0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFz
aChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgY29kZUNvdW50KTsKKyAgICAg
ICAgICAgIGNvZGVDb3VudCAtPSBzaXplb2YoaGFzaENvZGVzWzBdKTsKKyAgICAgICAgcmV0dXJu
IFdURjo6U3RyaW5nSGFzaGVyOjpjcmVhdGVCbG9iSGFzaChoYXNoQ29kZXMsIGNvZGVDb3VudCk7
CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFByb3RlY3Rpb25TcGFj
ZSYgYSwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBiKSB7IHJldHVybiBhID09IGI7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85616</attachid>
            <date>2011-03-13 03:52:16 -0700</date>
            <delta_ts>2011-03-13 12:10:57 -0700</delta_ts>
            <desc>IntegerArray fix</desc>
            <filename>bug-52934.patch</filename>
            <type>text/plain</type>
            <size>1197</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNThjNjY1Li42YWNmOTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTEtMDMtMTMgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIHRoZSBj
b3JyZWN0IGxlbmd0aCB3aGVuIGhhc2hpbmcgSW50ZWdlckFycmF5LgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI5MzQKKworICAgICAgICAqIHBsYXRm
b3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlZ2Vy
QXJyYXlIYXNoOjpoYXNoKToKKwogMjAxMS0wMy0xMiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBmb3Ig
cjgwOTAwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJv
cGVydHlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5
TGlzdC5jcHAKaW5kZXggNDE3NjllOC4uY2IyNDFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwCkBAIC05Miw3ICs5Miw3IEBAIHN0
cnVjdCBJbnRlZ2VyQXJyYXlIYXNoIHsKIAogdW5zaWduZWQgSW50ZWdlckFycmF5SGFzaDo6aGFz
aChjb25zdCBJbnRlZ2VyQXJyYXkmIGFycmF5KQogewotICAgIHJldHVybiBXVEY6OlN0cmluZ0hh
c2hlcjo6Y3JlYXRlQmxvYkhhc2goYXJyYXkuaW50ZWdlcnMoKSwgYXJyYXkuc2l6ZSgpKTsKKyAg
ICByZXR1cm4gV1RGOjpTdHJpbmdIYXNoZXI6OmNyZWF0ZUJsb2JIYXNoKGFycmF5LmludGVnZXJz
KCksIGFycmF5LnNpemUoKSAqIHNpemVvZihpbnQpKTsKIH0KIAogYm9vbCBJbnRlZ2VyQXJyYXlI
YXNoOjplcXVhbChjb25zdCBJbnRlZ2VyQXJyYXkmIGEsIGNvbnN0IEludGVnZXJBcnJheSYgYikK
</data>
<flag name="review"
          id="77769"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="77770"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>