<?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>38890</bug_id>
          
          <creation_ts>2010-05-11 00:26:19 -0700</creation_ts>
          <short_desc>Multi-byte issue in JavaScriptCore formatLocaleDate</short_desc>
          <delta_ts>2010-05-15 11:39:02 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>0</everconfirmed>
          <reporter name="Leo Yang">leo.yang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>charles.wei</cc>
    
    <cc>commit-queue</cc>
    
    <cc>staikos</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>223796</commentid>
    <comment_count>0</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-11 00:26:19 -0700</bug_when>
    <thetext>formatLocaleDate (non-Mac platform implement) in JavaScriptCore/runtime/DatePrototype.cpp doesn&apos;t take multi-byte into account.
Considering the follow html code for LC_TIME=&quot;zh_CN.UTF-8&quot;, formatLocaleDate behaves incorrect (junk result)

&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; Content=&quot;text/html; Charset=utf-8&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;script&gt;
       var now = new Date();
       document.write(now.toLocaleString());
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223798</commentid>
    <comment_count>1</comment_count>
      <attachid>55672</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-11 00:41:34 -0700</bug_when>
    <thetext>Created attachment 55672
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223805</commentid>
    <comment_count>2</comment_count>
      <attachid>55674</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-11 01:01:37 -0700</bug_when>
    <thetext>Created attachment 55674
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224013</commentid>
    <comment_count>3</comment_count>
      <attachid>55674</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-11 10:51:43 -0700</bug_when>
    <thetext>Comment on attachment 55674
patch

What&apos;s the guarantee that wide characters are UTF-16? This whole patch seems to be based on that assumption. There needs to be at least a comment indicating why that&apos;s so.

&gt; +    // Convert multibyte result to wide char

Sentence comments should use whole words and periods. So please call this &quot;wide characters&quot; and use a period.

&gt; +    UChar buffer[128];

Would be better to the value bufsize that is already here instead of repeating the 128 here.

&gt; +    size_t len;

We don&apos;t abbreviate variable names like this.

&gt; +    // Because sizeof can&apos;t be used during preprocessing, we do runtime check.
&gt; +    if (sizeof(UChar) == sizeof(wchar_t))
&gt; +        len = mbstowcs((wchar_t*)buffer, timebuffer, sizeof(buffer) / sizeof(buffer[0]) - 1);

We don&apos;t use C-style casts, so this should be reinterpret_cast.

Do we really need the optimized case? It seems fine to always copy from a wchar_t buffer into a UChar buffer, so I suggest removing the special case loop.

&gt; +        wchar_t tempbuffer[128];

Would be better to use bufsize instead of repeating the 128 here. We normally don&apos;t ram words together. The existing name &quot;timebuffer&quot; is not our WebKit style. I&apos;d call this &quot;wideCharacterBuffer&quot;.

&gt; +        len = mbstowcs(tempbuffer, timebuffer, sizeof(tempbuffer) / sizeof(tempbuffer[0]) -1);

There should be a space after the &quot;-&quot; here.

&gt; +        for (size_t i = 0; i &lt; len &amp;&amp; len != (size_t)(-1); ++i)
&gt; +            buffer[i] = (UChar)tempbuffer[i];

Checking that length is not -1 every time through the loop doesn&apos;t make sense. That should be a separate if statement.

We don&apos;t use C-style casts, so this should be no cast at all, or a cast to UChar if the cast is needed for some reason.

&gt; +    if (UNLIKELY(len == (size_t)(-1)))

This should be static_cast.

There&apos;s no need to use UNLIKELY for this, because it&apos;s not so performance-critical that we need to optimize that much. The work here dwarfs that single patch.

review- because of these minor issues, but there also is the issue that wchar_t is not always UTF-16, which seems like a major one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224039</commentid>
    <comment_count>4</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-05-11 11:33:30 -0700</bug_when>
    <thetext>mbstowcs: it&apos;s a standard c function, but I think it would be nice if we use WTF::Unicode layer for this, as other Unicode related functions are also gathered there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224349</commentid>
    <comment_count>5</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-11 19:42:58 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; mbstowcs: it&apos;s a standard c function, but I think it would be nice if we use WTF::Unicode layer for this, as other Unicode related functions are also gathered there.

Yes. It&apos;s better to do so. If we do it, we need to add interface and ask each platform to implement. We need also to propagate this bug to every platform. And most platform implementation will just call mbstowcs. Is it necessary to make things complex?

If a platform has no mbstowcs, just implement it, we can treat mbstowcs as an interface :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224366</commentid>
    <comment_count>6</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-11 20:38:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 55674 [details])
&gt; What&apos;s the guarantee that wide characters are UTF-16? This whole patch seems to be based on that assumption. There needs to be at least a comment indicating why that&apos;s so.
&gt; 
&gt; &gt; +    // Convert multibyte result to wide char
&gt; 
&gt; Sentence comments should use whole words and periods. So please call this &quot;wide characters&quot; and use a period.
&gt; 
&gt; &gt; +    UChar buffer[128];
&gt; 
&gt; Would be better to the value bufsize that is already here instead of repeating the 128 here.
&gt; 
&gt; &gt; +    size_t len;
&gt; 
&gt; We don&apos;t abbreviate variable names like this.
&gt; 
&gt; &gt; +    // Because sizeof can&apos;t be used during preprocessing, we do runtime check.
&gt; &gt; +    if (sizeof(UChar) == sizeof(wchar_t))
&gt; &gt; +        len = mbstowcs((wchar_t*)buffer, timebuffer, sizeof(buffer) / sizeof(buffer[0]) - 1);
&gt; 
&gt; We don&apos;t use C-style casts, so this should be reinterpret_cast.
&gt; 
&gt; Do we really need the optimized case? It seems fine to always copy from a wchar_t buffer into a UChar buffer, so I suggest removing the special case loop.
&gt; 
&gt; &gt; +        wchar_t tempbuffer[128];
&gt; 
&gt; Would be better to use bufsize instead of repeating the 128 here. We normally don&apos;t ram words together. The existing name &quot;timebuffer&quot; is not our WebKit style. I&apos;d call this &quot;wideCharacterBuffer&quot;.
&gt; 
&gt; &gt; +        len = mbstowcs(tempbuffer, timebuffer, sizeof(tempbuffer) / sizeof(tempbuffer[0]) -1);
&gt; 
&gt; There should be a space after the &quot;-&quot; here.
&gt; 
&gt; &gt; +        for (size_t i = 0; i &lt; len &amp;&amp; len != (size_t)(-1); ++i)
&gt; &gt; +            buffer[i] = (UChar)tempbuffer[i];
&gt; 
&gt; Checking that length is not -1 every time through the loop doesn&apos;t make sense. That should be a separate if statement.
&gt; 
&gt; We don&apos;t use C-style casts, so this should be no cast at all, or a cast to UChar if the cast is needed for some reason.
&gt; 
&gt; &gt; +    if (UNLIKELY(len == (size_t)(-1)))
&gt; 
&gt; This should be static_cast.
&gt; 
&gt; There&apos;s no need to use UNLIKELY for this, because it&apos;s not so performance-critical that we need to optimize that much. The work here dwarfs that single patch.
&gt; 
&gt; review- because of these minor issues, but there also is the issue that wchar_t is not always UTF-16, which seems like a major one.
Will follow all above minor issues. 
Yes, wchar_t is not always UTF-16, so I copy the whart_t result to UTF-16 buffer in case of that. In theory, there might be data loss, but datetime related words in different languages should be aligned in to UTF-16; if not, can we handle it by JSString?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224367</commentid>
    <comment_count>7</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-11 20:40:05 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 55674 [details] [details])
&gt; &gt; What&apos;s the guarantee that wide characters are UTF-16? This whole patch seems to be based on that assumption. There needs to be at least a comment indicating why that&apos;s so.
&gt; &gt; 
&gt; &gt; &gt; +    // Convert multibyte result to wide char
&gt; &gt; 
&gt; &gt; Sentence comments should use whole words and periods. So please call this &quot;wide characters&quot; and use a period.
&gt; &gt; 
&gt; &gt; &gt; +    UChar buffer[128];
&gt; &gt; 
&gt; &gt; Would be better to the value bufsize that is already here instead of repeating the 128 here.
&gt; &gt; 
&gt; &gt; &gt; +    size_t len;
&gt; &gt; 
&gt; &gt; We don&apos;t abbreviate variable names like this.
&gt; &gt; 
&gt; &gt; &gt; +    // Because sizeof can&apos;t be used during preprocessing, we do runtime check.
&gt; &gt; &gt; +    if (sizeof(UChar) == sizeof(wchar_t))
&gt; &gt; &gt; +        len = mbstowcs((wchar_t*)buffer, timebuffer, sizeof(buffer) / sizeof(buffer[0]) - 1);
&gt; &gt; 
&gt; &gt; We don&apos;t use C-style casts, so this should be reinterpret_cast.
&gt; &gt; 
&gt; &gt; Do we really need the optimized case? It seems fine to always copy from a wchar_t buffer into a UChar buffer, so I suggest removing the special case loop.
&gt; &gt; 
&gt; &gt; &gt; +        wchar_t tempbuffer[128];
&gt; &gt; 
&gt; &gt; Would be better to use bufsize instead of repeating the 128 here. We normally don&apos;t ram words together. The existing name &quot;timebuffer&quot; is not our WebKit style. I&apos;d call this &quot;wideCharacterBuffer&quot;.
&gt; &gt; 
&gt; &gt; &gt; +        len = mbstowcs(tempbuffer, timebuffer, sizeof(tempbuffer) / sizeof(tempbuffer[0]) -1);
&gt; &gt; 
&gt; &gt; There should be a space after the &quot;-&quot; here.
&gt; &gt; 
&gt; &gt; &gt; +        for (size_t i = 0; i &lt; len &amp;&amp; len != (size_t)(-1); ++i)
&gt; &gt; &gt; +            buffer[i] = (UChar)tempbuffer[i];
&gt; &gt; 
&gt; &gt; Checking that length is not -1 every time through the loop doesn&apos;t make sense. That should be a separate if statement.
&gt; &gt; 
&gt; &gt; We don&apos;t use C-style casts, so this should be no cast at all, or a cast to UChar if the cast is needed for some reason.
&gt; &gt; 
&gt; &gt; &gt; +    if (UNLIKELY(len == (size_t)(-1)))
&gt; &gt; 
&gt; &gt; This should be static_cast.
&gt; &gt; 
&gt; &gt; There&apos;s no need to use UNLIKELY for this, because it&apos;s not so performance-critical that we need to optimize that much. The work here dwarfs that single patch.
&gt; &gt; 
&gt; &gt; review- because of these minor issues, but there also is the issue that wchar_t is not always UTF-16, which seems like a major one.
Will follow comments about all above minor issues. 
Yes, wchar_t is not always UTF-16, so I copy the whart_t result to UTF-16 buffer in case of that. In theory, there might be data loss, but datetime related words in different languages should be aligned in to UTF-16; if not, can we handle it by JSString?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224907</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-12 14:41:13 -0700</bug_when>
    <thetext>&gt; Yes, wchar_t is not always UTF-16, so I copy the whart_t result to UTF-16 buffer in case of that.

It may be UTF-32, for example. Or it may be something entirely unrelated to Unicode, even if its size is 16 bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225044</commentid>
    <comment_count>9</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-12 18:48:40 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Yes, wchar_t is not always UTF-16, so I copy the whart_t result to UTF-16 buffer in case of that.
&gt; 
&gt; It may be UTF-32, for example. Or it may be something entirely unrelated to Unicode, even if its size is 16 bit.
If it&apos;s UTF-32, we could only static_cast to UTF-16, and may loss data, can we handle UTF-32 using JSString?

For wchar_t itself, it can be everything, but as result of mbstowcs, can it be everything instead of UTF-16/UTF-32?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225163</commentid>
    <comment_count>10</comment_count>
      <attachid>55949</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-12 23:47:19 -0700</bug_when>
    <thetext>Created attachment 55949
patch

Follows review comments to address the following issues.

1. Minor style issue
2. wchar_t to unicode issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225469</commentid>
    <comment_count>11</comment_count>
      <attachid>55949</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-13 13:21:09 -0700</bug_when>
    <thetext>Comment on attachment 55949
patch

Looking better!

&gt; +#ifdef __STDC_ISO_10646__

This seems like an unusual way to detect the presence of the mbstowcs function along with the fact that wide characters are Unicode. Is this really defined consistently everywhere we need to use mbstowcs and nowhere we don&apos;t?

&gt; +    // Convert multi-byte result to unicode.

Unicode should be capitalized, since it&apos;s a proper noun.

&gt; +        for (size_t i = 0; i &lt; length; ++i)
&gt; +            buffer[i] = static_cast&lt;UChar&gt;(tempbuffer[i]);

This needs a comment saying this assumes the characters are all representable by a single UTF-16 code point. That is not a safe assumption in general but we are probably OK for all the cases we will encounter in practice. If any character is a non-BMP one, we&apos;ll give the wrong result.

I suggest you also add a comment explaining that if mbstowcs fails we just fall back on using the 8-bit characters as-is. And explain why and when that is ever the right thing to do. I think it&apos;s never helpful, myself, and it seems a little strange to leave that code path in there.

I&apos;ll say r=me but I&apos;d appreciate follow-up on the issues I mentioned here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225620</commentid>
    <comment_count>12</comment_count>
      <attachid>56043</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-13 19:25:33 -0700</bug_when>
    <thetext>Created attachment 56043
patch

Follow review comments to add more code comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225630</commentid>
    <comment_count>13</comment_count>
      <attachid>56046</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2010-05-13 19:40:56 -0700</bug_when>
    <thetext>Created attachment 56046
patch

Follow review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226178</commentid>
    <comment_count>14</comment_count>
      <attachid>56046</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-15 00:05:23 -0700</bug_when>
    <thetext>Comment on attachment 56046
patch

In the future, it would be helpful if you included more information in your ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226285</commentid>
    <comment_count>15</comment_count>
      <attachid>56046</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-15 11:38:56 -0700</bug_when>
    <thetext>Comment on attachment 56046
patch

Clearing flags on attachment: 56046

Committed r59545: &lt;http://trac.webkit.org/changeset/59545&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226286</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-15 11:39:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55672</attachid>
            <date>2010-05-11 00:41:34 -0700</date>
            <delta_ts>2010-05-11 01:01:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>formatLocaleDate.patch</filename>
            <type>text/plain</type>
            <size>2459</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5MTQ1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDUtMTEgIExlbyBZYW5n
ICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM4ODkwCisKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmb3JtYXRMb2NhbGVEYXRlKToKKwogMjAxMC0wNS0xMCAgTGFz
emxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDU4NzQ1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBN
b2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0zOCw3ICszOSw5IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVk
ZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2lu
Y2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMjQ4LDggKzI1MSwyNCBAQCBzdGF0aWMgSlNDZWxsKiBmb3Jt
YXRMb2NhbGVEYXRlKEV4ZWNTdGF0CiAgCiAgICAgICAgIHN0cm5jcHkoeWVhckxvY2F0aW9uLCB5
ZWFyU3RyaW5nLCB5ZWFyTGVuIC0gMSk7CiAgICAgfQorCisgICAgLy8gQ29udmVydCBtdWx0aWJ5
dGUgcmVzdWx0IHRvIHdpZGUgY2hhcgorICAgIFVDaGFyIGJ1ZmZlclsxMjhdOworICAgIHNpemVf
dCBsZW47CisgICAgLy8gQmVjYXVzZSBzaXplb2YgY2FuJ3QgYmUgdXNlZCBkdXJpbmcgcHJlcHJv
Y2Vzc2luZywgd2UgZG8gcnVudGltZSBjaGVjay4KKyAgICBpZiAoc2l6ZW9mKFVDaGFyKSA9PSBz
aXplb2Yod2NoYXJfdCkpCisgICAgICAgIGxlbiA9IG1ic3Rvd2NzKCh3Y2hhcl90KilidWZmZXIs
IHRpbWVidWZmZXIsIHNpemVvZihidWZmZXIpIC8gc2l6ZW9mKGJ1ZmZlclswXSkgLSAxKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgd2NoYXJfdCB0ZW1wYnVmZmVyWzEyOF07CisgICAgICAgIGxlbiA9
IG1ic3Rvd2NzKHRlbXBidWZmZXIsIHRpbWVidWZmZXIsIHNpemVvZih0ZW1wYnVmZmVyKSAvIHNp
emVvZih0ZW1wYnVmZmVyWzBdKSAtMSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuOyArK2kpCisgICAgICAgICAgICBidWZmZXJbaV0gPSAoVUNoYXIpdGVtcGJ1ZmZlcltpXTsK
KyAgICB9CiAgCi0gICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCB0aW1lYnVmZmVy
KTsKKyAgICBpZiAoVU5MSUtFTFkobGVuID09IChzaXplX3QpKC0xKSkpCisgICAgICAgIHJldHVy
biBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgdGltZWJ1ZmZlcik7CisKKyAgICByZXR1cm4ganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW4pKTsKIH0KIAogc3RhdGlj
IEpTQ2VsbCogZm9ybWF0TG9jYWxlRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIERhdGVJbnN0YW5jZSog
ZGF0ZU9iamVjdCwgZG91YmxlLCBMb2NhbGVEYXRlVGltZUZvcm1hdCBmb3JtYXQsIGNvbnN0IEFy
Z0xpc3QmKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55674</attachid>
            <date>2010-05-11 01:01:37 -0700</date>
            <delta_ts>2010-05-15 00:04:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>formatLocaleDate.patch</filename>
            <type>text/plain</type>
            <size>2482</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5MTQ1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDUtMTEgIExlbyBZYW5n
ICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM4ODkwCisKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmb3JtYXRMb2NhbGVEYXRlKToKKwogMjAxMC0wNS0xMCAgTGFz
emxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDU4NzQ1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBN
b2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0zOCw3ICszOSw5IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVk
ZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2lu
Y2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMjQ4LDggKzI1MSwyNCBAQCBzdGF0aWMgSlNDZWxsKiBmb3Jt
YXRMb2NhbGVEYXRlKEV4ZWNTdGF0CiAgCiAgICAgICAgIHN0cm5jcHkoeWVhckxvY2F0aW9uLCB5
ZWFyU3RyaW5nLCB5ZWFyTGVuIC0gMSk7CiAgICAgfQorCisgICAgLy8gQ29udmVydCBtdWx0aWJ5
dGUgcmVzdWx0IHRvIHdpZGUgY2hhcgorICAgIFVDaGFyIGJ1ZmZlclsxMjhdOworICAgIHNpemVf
dCBsZW47CisgICAgLy8gQmVjYXVzZSBzaXplb2YgY2FuJ3QgYmUgdXNlZCBkdXJpbmcgcHJlcHJv
Y2Vzc2luZywgd2UgZG8gcnVudGltZSBjaGVjay4KKyAgICBpZiAoc2l6ZW9mKFVDaGFyKSA9PSBz
aXplb2Yod2NoYXJfdCkpCisgICAgICAgIGxlbiA9IG1ic3Rvd2NzKCh3Y2hhcl90KilidWZmZXIs
IHRpbWVidWZmZXIsIHNpemVvZihidWZmZXIpIC8gc2l6ZW9mKGJ1ZmZlclswXSkgLSAxKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgd2NoYXJfdCB0ZW1wYnVmZmVyWzEyOF07CisgICAgICAgIGxlbiA9
IG1ic3Rvd2NzKHRlbXBidWZmZXIsIHRpbWVidWZmZXIsIHNpemVvZih0ZW1wYnVmZmVyKSAvIHNp
emVvZih0ZW1wYnVmZmVyWzBdKSAtMSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuICYmIGxlbiAhPSAoc2l6ZV90KSgtMSk7ICsraSkKKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9
IChVQ2hhcil0ZW1wYnVmZmVyW2ldOworICAgIH0KICAKLSAgICByZXR1cm4ganNOb250cml2aWFs
U3RyaW5nKGV4ZWMsIHRpbWVidWZmZXIpOworICAgIGlmIChVTkxJS0VMWShsZW4gPT0gKHNpemVf
dCkoLTEpKSkKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCB0aW1lYnVm
ZmVyKTsKKworICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgVVN0cmluZyhidWZm
ZXIsIGxlbikpOwogfQogCiBzdGF0aWMgSlNDZWxsKiBmb3JtYXRMb2NhbGVEYXRlKEV4ZWNTdGF0
ZSogZXhlYywgRGF0ZUluc3RhbmNlKiBkYXRlT2JqZWN0LCBkb3VibGUsIExvY2FsZURhdGVUaW1l
Rm9ybWF0IGZvcm1hdCwgY29uc3QgQXJnTGlzdCYpCg==
</data>
<flag name="review"
          id="39912"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55949</attachid>
            <date>2010-05-12 23:47:19 -0700</date>
            <delta_ts>2010-05-15 00:04:51 -0700</delta_ts>
            <desc>patch</desc>
            <filename>formatLocaleDate-1.patch</filename>
            <type>text/plain</type>
            <size>2022</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5MzQ3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDUtMTIgIExlbyBZYW5n
ICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM4ODkwCisKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmb3JtYXRMb2NhbGVEYXRlKToKKwogMjAxMC0wNS0xMiAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDU4NzQ1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBN
b2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0zOCw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVk
ZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2lu
Y2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9EYXRlTWF0aC5oPgpAQCAtMjQ4LDcgKzI1MCwyMCBAQCBzdGF0aWMgSlNDZWxsKiBmb3JtYXRM
b2NhbGVEYXRlKEV4ZWNTdGF0CiAgCiAgICAgICAgIHN0cm5jcHkoeWVhckxvY2F0aW9uLCB5ZWFy
U3RyaW5nLCB5ZWFyTGVuIC0gMSk7CiAgICAgfQotIAorCisjaWZkZWYgX19TVERDX0lTT18xMDY0
Nl9fCisgICAgLy8gQ29udmVydCBtdWx0aS1ieXRlIHJlc3VsdCB0byB1bmljb2RlLgorICAgIFVD
aGFyIGJ1ZmZlcltidWZzaXplXTsKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIHdjaGFyX3QgdGVt
cGJ1ZmZlcltidWZzaXplXTsKKyAgICBsZW5ndGggPSBtYnN0b3djcyh0ZW1wYnVmZmVyLCB0aW1l
YnVmZmVyLCBidWZzaXplIC0gMSk7CisgICAgaWYgKGxlbmd0aCAhPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KC0xKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgYnVmZmVyW2ldID0gc3RhdGljX2Nhc3Q8VUNoYXI+KHRlbXBidWZmZXJbaV0p
OworICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVy
LCBsZW5ndGgpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoZXhlYywgdGltZWJ1ZmZlcik7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56043</attachid>
            <date>2010-05-13 19:25:33 -0700</date>
            <delta_ts>2010-05-13 19:40:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>formatLocaleDate-2.patch</filename>
            <type>text/plain</type>
            <size>2526</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5NDM3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDUtMTMgIExlbyBZYW5n
ICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM4ODkwCisKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmb3JtYXRMb2NhbGVEYXRlKToKKwogMjAxMC0wNS0xMyAgTWFj
aWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIE5vIHJldmlldywgYXR0
ZW1wdGVkIGJ1aWxkIGZpeC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gNTg3NDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1v
YmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRl
IDxsb2NhbGUuaD4KICNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5j
bHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3Rm
L0RhdGVNYXRoLmg+CkBAIC0yNDgsNyArMjUwLDI3IEBAIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExv
Y2FsZURhdGUoRXhlY1N0YXQKICAKICAgICAgICAgc3RybmNweSh5ZWFyTG9jYXRpb24sIHllYXJT
dHJpbmcsIHllYXJMZW4gLSAxKTsKICAgICB9Ci0gCisKKyAgICAvLyBDb252ZXJ0IG11bHRpLWJ5
dGUgcmVzdWx0IHRvIFVOSUNPREUuCisgICAgLy8gSWYgX19TVERDX0lTT18xMDY0Nl9fIGlzIGRl
ZmluZWQsIHdpZGUgY2hhcmFjdGVyIHJlcHJlc2VudHMKKyAgICAvLyBVVEYtMTYgKG9yIFVURi0z
MikgY29kZSBwb2ludC4gSW4gbW9zdCBtb2Rlcm4gVW5peCBsaWtlIHN5c3RlbQorICAgIC8vIChl
LmcuIExpbnV4IHdpdGggZ2xpYmMgMi4yIGFuZCBhYm92ZSkgdGhlIG1hY3JvIGlzIGRlZmluZWQs
CisgICAgLy8gYW5kIHdpZGUgY2hhcmFjdGVyIHJlcHJlc2VudHMgVVRGLTMyIGNvZGUgcG9pbnQu
CisgICAgLy8gSGVyZSB3ZSBzdGF0aWNfY2FzdCBwb3RlbnRpYWwgVVRGLTMyIHRvIFVURi0xNiwg
aXQgc2hvdWxkIGJlCisgICAgLy8gc2FmZSBiZWNhdXNlIGRhdGV0aW1lIHJlbGF0ZWQgY2hhcmFj
dGVycyBpbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzCisgICAgLy8gc2hvdWxkIGJlIGluIFVOSUNPREUg
Qk1QLiBJZiBtYnN0b3djcyBmYWlscywgd2UganVzdCBmYWxsCisgICAgLy8gYmFjayBvbiB1c2lu
ZyBtdWx0aS1ieXRlIHJlc3VsdCBhcy1pcy4KKyNpZmRlZiBfX1NURENfSVNPXzEwNjQ2X18KKyAg
ICBVQ2hhciBidWZmZXJbYnVmc2l6ZV07CisgICAgd2NoYXJfdCB0ZW1wYnVmZmVyW2J1ZnNpemVd
OworICAgIHNpemVfdCBsZW5ndGggPSBtYnN0b3djcyh0ZW1wYnVmZmVyLCB0aW1lYnVmZmVyLCBi
dWZzaXplIC0gMSk7CisgICAgaWYgKGxlbmd0aCAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgYnVmZmVyW2ldID0gc3RhdGljX2Nhc3Q8VUNoYXI+KHRlbXBidWZmZXJbaV0pOworICAgICAg
ICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgp
KTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
dGltZWJ1ZmZlcik7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56046</attachid>
            <date>2010-05-13 19:40:56 -0700</date>
            <delta_ts>2010-05-15 11:38:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>formatLocaleDate-3.patch</filename>
            <type>text/plain</type>
            <size>2536</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5NDM3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDUtMTMgIExlbyBZYW5n
ICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM4ODkwCisKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpmb3JtYXRMb2NhbGVEYXRlKToKKwogMjAxMC0wNS0xMyAgTWFj
aWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIE5vIHJldmlldywgYXR0
ZW1wdGVkIGJ1aWxkIGZpeC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gNTg3NDUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1v
YmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRl
IDxsb2NhbGUuaD4KICNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5j
bHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3Rm
L0RhdGVNYXRoLmg+CkBAIC0yNDgsNyArMjUwLDI3IEBAIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExv
Y2FsZURhdGUoRXhlY1N0YXQKICAKICAgICAgICAgc3RybmNweSh5ZWFyTG9jYXRpb24sIHllYXJT
dHJpbmcsIHllYXJMZW4gLSAxKTsKICAgICB9Ci0gCisKKyAgICAvLyBDb252ZXJ0IG11bHRpLWJ5
dGUgcmVzdWx0IHRvIFVOSUNPREUuCisgICAgLy8gSWYgX19TVERDX0lTT18xMDY0Nl9fIGlzIGRl
ZmluZWQsIHdpZGUgY2hhcmFjdGVyIHJlcHJlc2VudHMKKyAgICAvLyBVVEYtMTYgKG9yIFVURi0z
MikgY29kZSBwb2ludC4gSW4gbW9zdCBtb2Rlcm4gVW5peCBsaWtlIHN5c3RlbQorICAgIC8vIChl
LmcuIExpbnV4IHdpdGggZ2xpYmMgMi4yIGFuZCBhYm92ZSkgdGhlIG1hY3JvIGlzIGRlZmluZWQs
CisgICAgLy8gYW5kIHdpZGUgY2hhcmFjdGVyIHJlcHJlc2VudHMgVVRGLTMyIGNvZGUgcG9pbnQu
CisgICAgLy8gSGVyZSB3ZSBzdGF0aWNfY2FzdCBwb3RlbnRpYWwgVVRGLTMyIHRvIFVURi0xNiwg
aXQgc2hvdWxkIGJlCisgICAgLy8gc2FmZSBiZWNhdXNlIGRhdGUgYW5kIChvcikgdGltZSByZWxh
dGVkIGNoYXJhY3RlcnMgaW4gZGlmZmVyZW50IGxhbmd1YWdlcworICAgIC8vIHNob3VsZCBiZSBp
biBVTklDT0RFIEJNUC4gSWYgbWJzdG93Y3MgZmFpbHMsIHdlIGp1c3QgZmFsbAorICAgIC8vIGJh
Y2sgb24gdXNpbmcgbXVsdGktYnl0ZSByZXN1bHQgYXMtaXMuCisjaWZkZWYgX19TVERDX0lTT18x
MDY0Nl9fCisgICAgVUNoYXIgYnVmZmVyW2J1ZnNpemVdOworICAgIHdjaGFyX3QgdGVtcGJ1ZmZl
cltidWZzaXplXTsKKyAgICBzaXplX3QgbGVuZ3RoID0gbWJzdG93Y3ModGVtcGJ1ZmZlciwgdGlt
ZWJ1ZmZlciwgYnVmc2l6ZSAtIDEpOworICAgIGlmIChsZW5ndGggIT0gc3RhdGljX2Nhc3Q8c2l6
ZV90PigtMSkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkK
KyAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXRpY19jYXN0PFVDaGFyPih0ZW1wYnVmZmVyW2ld
KTsKKyAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZl
ciwgbGVuZ3RoKSk7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsIHRpbWVidWZmZXIpOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>