<?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>20645</bug_id>
          
          <creation_ts>2008-09-04 04:32:17 -0700</creation_ts>
          <short_desc>Duplicated constants</short_desc>
          <delta_ts>2008-09-21 13:35:38 -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>All</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="Judit Jász">jasy</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>90147</commentid>
    <comment_count>0</comment_count>
    <who name="Judit Jász">jasy</who>
    <bug_when>2008-09-04 04:32:17 -0700</bug_when>
    <thetext>The CodeGenerator differentiates the constants with their JSValue* pointer instead of their contents. In this way many cases there are different constants with the same values. The memory consumption of a particular CodeBlock can be better if it would not duplicate the constants with the same values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90148</commentid>
    <comment_count>1</comment_count>
      <attachid>23166</attachid>
    <who name="Judit Jász">jasy</who>
    <bug_when>2008-09-04 04:34:19 -0700</bug_when>
    <thetext>Created attachment 23166
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90161</commentid>
    <comment_count>2</comment_count>
      <attachid>23166</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-09-04 08:47:47 -0700</bug_when>
    <thetext>Comment on attachment 23166
proposed patch

Is the point of this patch just to unique numbers and strings within a codeblock? I think it is. For everything else, comparing JSValue* would be enough.

Rather than making a JSValue*, then later extracting and comparing the underlying data, I think we should just to add a version of emitLoad() for Identifier, and one for double, which did the unique-ing based on hashes of Identifier and double. 

That would eliminate a lot of complexity, and substantially improve the double hash function, which in this patch just truncates the double to unsigned. It would also reduce memory and GC pressure, in the case where you actually found a duplicate constant (since you would avoid allocating the duplicate just to discover that it was a duplicate).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90260</commentid>
    <comment_count>3</comment_count>
      <attachid>23190</attachid>
    <who name="Judit Jász">jasy</who>
    <bug_when>2008-09-05 05:43:16 -0700</bug_when>
    <thetext>Created attachment 23190
Modification of the solution according to the reviewer&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91637</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-09-18 08:58:03 -0700</bug_when>
    <thetext>Thanks, Judit, this latest patch looks a lot better.

Three comments:

1. I&apos;d like to improve the string map a bit. Right now, the typedef is 

+        typedef HashMap&lt;RefPtr&lt;UString::Rep&gt;, JSValue*&gt; StringMap;

We can get rid of the RefPtr in that typedef. The string is owned by the syntax tree, so there&apos;s no need for the code generator to ref and deref it.

Also, because we know that we&apos;re hashing Identifier strings, we can use IdentifierRepHash, which is optimized for the case where the string has already computed a hash code.

2. Though your patch didn&apos;t introduce this problem, it made me realize that emitLoad for UString and its use are a little weird:

+        RegisterID* emitLoad(RegisterID* dst, const UString&amp;);

-    return generator.emitLoad(dst, jsOwnedString(generator.globalExec(), Identifier(generator.globalExec(), m_value).ustring()));
+    return generator.emitLoad(dst, m_value);

emitLoad is declared to operate on UStrings, but in fact it only wants to operate on Identifiers!

A more efficient solution would be to declare emitLoad to operate on an Identifier: &quot;RegisterID* emitLoad(RegisterID* dst, const Identifier&amp;);&quot;. And StringNode, instead of holding m_value as a UString, should hold m_value as an Identifier. That way, we won&apos;t have to make a temporary Identifier every time we encounter a string in the syntax tree.

3. A simpler way to write

+    NumberMap::iterator iterator = m_numberMap.find(d);
+    if (iterator != m_numberMap.end())
+        return emitLoad(dst, iterator-&gt;second);

is

if (JSValue* v = m_numberMap.get(d))
    return emitLoad(dst, v);

The same goes for emitLoad of a string.

I&apos;m going to say r- because I think these would be good improvements to make, but overall this patch looks really good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91762</commentid>
    <comment_count>5</comment_count>
      <attachid>23565</attachid>
    <who name="Judit Jász">jasy</who>
    <bug_when>2008-09-19 07:40:14 -0700</bug_when>
    <thetext>Created attachment 23565
Improvements of the earlier patch according  to the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92000</commentid>
    <comment_count>6</comment_count>
      <attachid>23565</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-21 11:36:22 -0700</bug_when>
    <thetext>Comment on attachment 23565
Improvements of the earlier patch according  to the comments.

Patch looks good, but it needs to be merged with a change I made to StringNode. Sorry!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92008</commentid>
    <comment_count>7</comment_count>
      <attachid>23630</attachid>
    <who name="Judit Jász">jasy</who>
    <bug_when>2008-09-21 12:29:14 -0700</bug_when>
    <thetext>Created attachment 23630
Updating the patch to the actual revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92012</commentid>
    <comment_count>8</comment_count>
      <attachid>23630</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-21 13:26:55 -0700</bug_when>
    <thetext>Comment on attachment 23630
Updating the patch to the actual revision.

This looks good. Does it slow SunSpider down, or speed it up, or have no effect?

+        Reviewed by NOBODY (OOPS!).
+        Duplications of constants values of CodeBlocks are eliminated.

ChangeLog should include the bug number. It&apos;s also better if the list of files and functions below says what was done at each call site.

+    JSValue* number = NULL; 

This variable doesn&apos;t need to be initialized, because it&apos;s always set on the next line. Also, our coding style says we use 0 instead of NULL.

Further, this can be written in a way that doesn&apos;t hash twice, using more advanced features of the HashMap.

    pair&lt;NumberMap::iterator, bool&gt; addResult = m_numberMap.add(d, 0);
    JSValue* number;
    if (!addResult.second)
        number = addResult.first-&gt;second;
    else {
        number = jsNumber(globalExec(), d);
        addResult.first-&gt;second = number;
    }
    return emitLoad(dst, number);

While the above code looks a bit more confusing, it does only one hash table lookup, while the code in your patch does two.

You can do the same thing for the string case.

+    JSValue* str = NULL; 

I&apos;d suggest using &quot;string&quot; instead of &quot;str&quot;.

+        typedef HashMap&lt;UString::Rep*, JSValue*, IdentifierRepHash &gt; IdentifierStringMap;

No need for a space before the &quot;&gt;&quot; symbol.

I&apos;m going to say r=me because my suggestions are probably optional; I think I&apos;ll make the improvements and then test performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92013</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-21 13:35:38 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/36741</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23166</attachid>
            <date>2008-09-04 04:34:19 -0700</date>
            <delta_ts>2008-09-05 09:54:04 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>patch_constant_jsValueMap_size</filename>
            <type>text/plain</type>
            <size>3021</size>
            <attacher name="Judit Jász">jasy</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2MDg3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDgtMDktMDQgIEp1ZGl0IEph
c3ogIDxqYXN5QGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFZNL0NvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEtKUzo6
Q29kZUdlbmVyYXRvcjo6SlNWYWx1ZUNvbnN0YW50SGFzaDo6aGFzaCk6CisgICAgICAgIChLSlM6
OkNvZGVHZW5lcmF0b3I6OkpTVmFsdWVDb25zdGFudEhhc2g6OmVxdWFsKToKKyAgICAgICAgKEtK
Uzo6Q29kZUdlbmVyYXRvcjo6SlNWYWx1ZUhhc2hUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1
ZSk6CisKIDIwMDgtMDktMDQgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggdGhlIDY0LWJpdCBidWlsZC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDM2MDA5KQorKysgSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzAsMTIgKzMzMCw0NiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgdm9pZCByZXdpbmRVbmFyeU9wKCk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxMYWJlbElEPiBl
bWl0Q29tcGxleEp1bXBTY29wZXMoTGFiZWxJRCogdGFyZ2V0LCBDb250cm9sRmxvd0NvbnRleHQq
IHRvcFNjb3BlLCBDb250cm9sRmxvd0NvbnRleHQqIGJvdHRvbVNjb3BlKTsKKworICAgICAgICBz
dHJ1Y3QgSlNWYWx1ZUNvbnN0YW50SGFzaCA6IFdURjo6UHRySGFzaDxKU1ZhbHVlKj4geworICAg
ICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goSlNWYWx1ZSoga2V5KQorICAgICAgICAgICAg
eyAKKyAgICAgICAgICAgICAgICAgaWYgKGtleS0+aXNTdHJpbmcoKSkgCisgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ga2V5LT5nZXRTdHJpbmcoKS5yZXAoKS0+aGFzaCgpOworICAgICAgICAg
ICAgICAgICBpZiAoa2V5LT5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgbnVtOworICAgICAgICAgICAgICAgICAgICAga2V5LT5nZXROdW1iZXIobnVtKTsKKyAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudW07CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB0ckhhc2g8SlNWYWx1ZSo+OjpoYXNoKGtleSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKEpTVmFsdWUqIGEsIEpTVmFsdWUq
IGIpIHsKKyAgICAgICAgICAgICAgICBpZiAoYSA9PSBiKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWEgfHwgIWIgfHwgYS0+aXNOdWxsKCkgfHwgYi0+aXNOdWxsKCkgCisgICAg
ICAgICAgICAgICAgfHwgYS0+aXNVbmRlZmluZWQoKSB8fCBiLT5pc1VuZGVmaW5lZCgpIAorICAg
ICAgICAgICAgICAgIHx8IGEtPmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgYi0+aXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICAgICAgaWYgKGEtPmlzTnVtYmVyKCkgJiYgYi0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBudW1BLCBudW1COworICAgICAgICAgICAgICAgICAgIGEtPmdldE51bWJl
cihudW1BKTsKKyAgICAgICAgICAgICAgICAgICBiLT5nZXROdW1iZXIobnVtQik7CisgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bUEgPT0gbnVtQjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKGEtPmlzQm9vbGVhbigpICYmIGItPmdldEJvb2xlYW4oKSkgCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhLT5nZXRCb29sZWFuKCkgPT0gYi0+Z2V0Qm9vbGVhbigp
OworICAgICAgICAgICAgICAgIGlmIChhLT5pc1N0cmluZygpICYmIGItPmlzU3RyaW5nKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhLT5nZXRTdHJpbmcoKSA9PSBiLT5nZXRTdHJpbmco
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH07IAogICAgICAgICBzdHJ1Y3QgSlNWYWx1ZUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPEpTVmFs
dWUqPiB7Ci0gICAgICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSlNW
YWx1ZSomIHNsb3QpIHsgc2xvdCA9IEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKTsgfQor
ICAgICAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEpTVmFsdWUqIHNs
b3QpIHsgc2xvdCA9IEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKTsgfQogICAgICAgICAg
ICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoSlNWYWx1ZSogdmFsdWUpIHsgcmV0dXJuIHZh
bHVlID09IEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKTsgfQogICAgICAgICB9OwogCi0g
ICAgICAgIHR5cGVkZWYgSGFzaE1hcDxKU1ZhbHVlKiwgdW5zaWduZWQsIERlZmF1bHRIYXNoPEpT
VmFsdWUqPjo6SGFzaCwgSlNWYWx1ZUhhc2hUcmFpdHM+IEpTVmFsdWVNYXA7CisgICAgICAgIHR5
cGVkZWYgSGFzaE1hcDxKU1ZhbHVlKiwgdW5zaWduZWQsIEpTVmFsdWVDb25zdGFudEhhc2gsIEpT
VmFsdWVIYXNoVHJhaXRzPiBKU1ZhbHVlTWFwOwogCiAgICAgICAgIHN0cnVjdCBJZGVudGlmaWVy
TWFwSW5kZXhIYXNoVHJhaXRzIHsKICAgICAgICAgICAgIHR5cGVkZWYgaW50IFRyYWl0VHlwZTsK
</data>
<flag name="review"
          id="10309"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23190</attachid>
            <date>2008-09-05 05:43:16 -0700</date>
            <delta_ts>2008-09-19 07:40:14 -0700</delta_ts>
            <desc>Modification of the solution according to the reviewer&apos;s comments.</desc>
            <filename>patch-duplicated-constants-elim</filename>
            <type>text/plain</type>
            <size>3603</size>
            <attacher name="Judit Jász">jasy</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2MTExKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMDktMDUgIEp1ZGl0IEph
c3ogIDxqYXN5QGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBEdXBsaWNhdGlvbnMgb2YgY29uc3RhbnRzIHZhbHVlcyBhcmUg
ZWxpbWluYXRlZC4KKyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEtK
Uzo6Q29kZUdlbmVyYXRvcjo6ZW1pdExvYWQpOgorICAgICAgICAqIFZNL0NvZGVHZW5lcmF0b3Iu
aDoKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgorICAgICAgICAoS0pTOjpTdHJpbmdOb2RlOjpl
bWl0Q29kZSk6CisKIDIwMDgtMDktMDQgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgpJbmRleDog
SmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDM2MTExKQorKysgSmF2YVNj
cmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1MCw3ICs2
NTAsMjIgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaQogCiBSZWdp
c3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJsZSBk
KQogewotICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpzTnVtYmVyKGdsb2JhbEV4ZWMoKSwgZCkp
OworICAgIE51bWJlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX251bWJlck1hcC5maW5kKGQp
OworICAgIGlmIChpdGVyYXRvciAhPSBtX251bWJlck1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGVtaXRMb2FkKGRzdCwgaXRlcmF0b3ItPnNlY29uZCk7CisgICAgSlNWYWx1ZSogbnVtYmVyID0g
anNOdW1iZXIoZ2xvYmFsRXhlYygpLCBkKTsKKyAgICBtX251bWJlck1hcC5hZGQoZCwgbnVtYmVy
KTsKKyAgICByZXR1cm4gZW1pdExvYWQoZHN0LCBudW1iZXIpOworfQorCitSZWdpc3RlcklEKiBD
b2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFVTdHJpbmcmIGQp
Cit7CisgICAgU3RyaW5nTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fc3RyaW5nTWFwLmZpbmQo
ZC5yZXAoKSk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fc3RyaW5nTWFwLmVuZCgpKQorICAgICAg
ICByZXR1cm4gZW1pdExvYWQoZHN0LCBpdGVyYXRvci0+c2Vjb25kKTsKKyAgICBKU1ZhbHVlKiBz
dHIgPSBqc093bmVkU3RyaW5nKGdsb2JhbEV4ZWMoKSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
IGQpLnVzdHJpbmcoKSk7CisgICAgbV9zdHJpbmdNYXAuYWRkKGQucmVwKCksIHN0cik7CisgICAg
cmV0dXJuIGVtaXRMb2FkKGRzdCwgc3RyKTsKIH0KIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRv
cjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlKiB2KQpJbmRleDogSmF2YVNjcmlw
dENvcmUvVk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZN
L0NvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMzYxMTEpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9D
b2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3Qs
IGJvb2wpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRv
dWJsZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29u
c3QgVVN0cmluZyYpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBk
c3QsIEpTVmFsdWUqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuZXhwZWN0ZWRMb2FkKFJl
Z2lzdGVySUQqIGRzdCwgYm9vbCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRVbmV4cGVjdGVk
TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJsZSk7CkBAIC0zMzUsNiArMzM2LDggQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICAgIH07CiAKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEpTVmFsdWUq
LCB1bnNpZ25lZCwgRGVmYXVsdEhhc2g8SlNWYWx1ZSo+OjpIYXNoLCBKU1ZhbHVlSGFzaFRyYWl0
cz4gSlNWYWx1ZU1hcDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGRvdWJsZSwgSlNWYWx1ZSo+
IE51bWJlck1hcDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVU3RyaW5nOjpSZXA+
LCBKU1ZhbHVlKj4gU3RyaW5nTWFwOwogCiAgICAgICAgIHN0cnVjdCBJZGVudGlmaWVyTWFwSW5k
ZXhIYXNoVHJhaXRzIHsKICAgICAgICAgICAgIHR5cGVkZWYgaW50IFRyYWl0VHlwZTsKQEAgLTQy
MCw2ICs0MjMsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgLy8gQ29uc3RhbnQgcG9vbAog
ICAgICAgICBJZGVudGlmaWVyTWFwIG1faWRlbnRpZmllck1hcDsKICAgICAgICAgSlNWYWx1ZU1h
cCBtX2pzVmFsdWVNYXA7CisgICAgICAgIE51bWJlck1hcCBtX251bWJlck1hcDsKKyAgICAgICAg
U3RyaW5nTWFwIG1fc3RyaW5nTWFwOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxE
YXRhOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDM2MTExKQorKysgSmF2YVNj
cmlwdENvcmUva2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDcgKzI1NSw3IEBA
IFJlZ2lzdGVySUQqIFN0cmluZ05vZGU6OmVtaXRDb2RlKENvZGVHZW4KICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICAvLyBXZSBhdG9taXplIGNvbnN0YW50IHN0cmluZ3MsIGluIGNhc2UgdGhleSdy
ZSBsYXRlciB1c2VkIGluIHByb3BlcnR5IGxvb2t1cC4KLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRMb2FkKGRzdCwganNPd25lZFN0cmluZyhnZW5lcmF0b3IuZ2xvYmFsRXhlYygpLCBJZGVudGlm
aWVyKGdlbmVyYXRvci5nbG9iYWxFeGVjKCksIG1fdmFsdWUpLnVzdHJpbmcoKSkpOworICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdExvYWQoZHN0LCBtX3ZhbHVlKTsKIH0KIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlZ0V4cE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0K
</data>
<flag name="review"
          id="10320"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23565</attachid>
            <date>2008-09-19 07:40:14 -0700</date>
            <delta_ts>2008-09-21 12:29:14 -0700</delta_ts>
            <desc>Improvements of the earlier patch according  to the comments.</desc>
            <filename>patch-duplicated-constants-elim-version3</filename>
            <type>text/plain</type>
            <size>6480</size>
            <attacher name="Judit Jász">jasy</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NjY3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDgtMDktMTkgIEp1ZGl0IEph
c3ogIDxqYXN5QGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBEdXBsaWNhdGlvbnMgb2YgY29uc3RhbnRzIHZhbHVlcyBvZiBD
b2RlQmxvY2tzIGFyZSBlbGltaW5hdGVkLgorICAgICAgICAqIFZNL0NvZGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpDb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAgICAgICogVk0v
Q29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OlN0cmluZ05vZGU6OlN0cmluZ05vZGUpOgorICAgICAgICAoSlNDOjpTdHJpbmdOb2RlOjplbWl0
Q29kZSk6CisgICAgICAgIChKU0M6OnByb2Nlc3NDbGF1c2VMaXN0KToKKyAgICAgICAgKiBranMv
bm9kZXMuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nTm9kZTo6dmFsdWUpOgorICAgICAgICAqIGtq
cy9ub2RlczJzdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdOb2RlOjpzdHJlYW1Ubyk6
CisKIDIwMDgtMDktMTkgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHBsZXlvLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogSmF2YVNj
cmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvVk0vQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDM2NjE4KQorKysgSmF2YVNjcmlwdENv
cmUvVk0vQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw3ICs3MzAsMjIg
QEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaQogCiBSZWdpc3RlcklE
KiBDb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJsZSBkKQogewot
ICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpzTnVtYmVyKGdsb2JhbEV4ZWMoKSwgZCkpOworICAg
IEpTVmFsdWUqIG51bWJlciA9IE5VTEw7IAorICAgIGlmICgobnVtYmVyID0gbV9udW1iZXJNYXAu
Z2V0KGQpKSkKKyAgICAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgbnVtYmVyKTsKKyAgICBudW1i
ZXIgPSBqc051bWJlcihnbG9iYWxFeGVjKCksIGQpOworICAgIG1fbnVtYmVyTWFwLmFkZChkLCBu
dW1iZXIpOworICAgIHJldHVybiBlbWl0TG9hZChkc3QsIG51bWJlcik7Cit9CisKK1JlZ2lzdGVy
SUQqIENvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRp
ZmllciYgZCkKK3sKKyAgICBKU1ZhbHVlKiBzdHIgPSBOVUxMOyAKKyAgICBpZiAoKHN0ciA9IG1f
c3RyaW5nTWFwLmdldChkLnVzdHJpbmcoKS5yZXAoKSkpKQorICAgICAgICByZXR1cm4gZW1pdExv
YWQoZHN0LCBzdHIpOworICAgIHN0ciA9IGpzT3duZWRTdHJpbmcoZ2xvYmFsRXhlYygpLCBkLnVz
dHJpbmcoKSk7CisgICAgbV9zdHJpbmdNYXAuYWRkKGQudXN0cmluZygpLnJlcCgpLCBzdHIpOwor
ICAgIHJldHVybiBlbWl0TG9hZChkc3QsIHN0cik7CiB9CiAKIFJlZ2lzdGVySUQqIENvZGVHZW5l
cmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNWYWx1ZSogdikKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9WTS9Db2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDM2NjE4KQorKysgSmF2YVNjcmlwdENvcmUv
Vk0vQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCog
ZHN0LCBib29sKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0
LCBkb3VibGUpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3Qs
IGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBKU1ZhbHVlKik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRVbmV4cGVjdGVk
TG9hZChSZWdpc3RlcklEKiBkc3QsIGJvb2wpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VW5l
eHBlY3RlZExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUpOwpAQCAtMzQ3LDYgKzM0OCw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9OwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZWZQdHI8VVN0cmluZzo6UmVwPiwgaW50LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxS
ZWZQdHI8VVN0cmluZzo6UmVwPiA+LCBJZGVudGlmaWVyTWFwSW5kZXhIYXNoVHJhaXRzPiBJZGVu
dGlmaWVyTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8ZG91YmxlLCBKU1ZhbHVlKj4gTnVt
YmVyTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VVN0cmluZzo6UmVwKiwgSlNWYWx1ZSos
IElkZW50aWZpZXJSZXBIYXNoID4gSWRlbnRpZmllclN0cmluZ01hcDsKIAogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0Q2FsbChPcGNvZGVJRCwgUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBSZWdp
c3RlcklEKiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIApAQCAtNDIxLDYgKzQyNCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAvLyBDb25zdGFudCBwb29sCiAgICAgICAgIElkZW50aWZpZXJNYXAg
bV9pZGVudGlmaWVyTWFwOwogICAgICAgICBKU1ZhbHVlTWFwIG1fanNWYWx1ZU1hcDsKKyAgICAg
ICAgTnVtYmVyTWFwIG1fbnVtYmVyTWFwOworICAgICAgICBJZGVudGlmaWVyU3RyaW5nTWFwIG1f
c3RyaW5nTWFwOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMyc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvbm9kZXMyc3RyaW5nLmNwcAkocmV2aXNpb24gMzY2MTgpCisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvbm9kZXMyc3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcg
KzMwOSw3IEBAIHZvaWQgTnVtYmVyTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiAKIAogdm9p
ZCBTdHJpbmdOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7Ci0gICAgcyA8
PCAnIicgPDwgZXNjYXBlU3RyaW5nRm9yUHJldHR5UHJpbnRpbmcobV92YWx1ZSkgPDwgJyInOwor
ICAgIHMgPDwgJyInIDw8IGVzY2FwZVN0cmluZ0ZvclByZXR0eVByaW50aW5nKG1fdmFsdWUudXN0
cmluZygpKSA8PCAnIic7CiB9CiAKIHZvaWQgUmVnRXhwTm9kZTo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtJiBzKSBjb25zdApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCShyZXZpc2lvbiAzNjYxOCkKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw2ICsy
NDgsMTEgQEAgUmVnaXN0ZXJJRCogTnVtYmVyTm9kZTo6ZW1pdENvZGUoQ29kZUdlbgogfQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RyaW5nTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3RyaW5nTm9kZTo6U3RyaW5nTm9kZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcqIHYpCisgICAgOiBFeHByZXNzaW9uTm9kZShn
bG9iYWxEYXRhLCBTdHJpbmdUeXBlKQorICAgICwgbV92YWx1ZShJZGVudGlmaWVyKGdsb2JhbERh
dGEtPmhlYWQtPmdsb2JhbEV4ZWMoKSwgKnYpKQoreworfQogCiBSZWdpc3RlcklEKiBTdHJpbmdO
b2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKQEAgLTI1NSw3ICsyNjAsNyBAQCBSZWdpc3RlcklEKiBTdHJpbmdOb2RlOjplbWl0Q29kZShD
b2RlR2VuCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gV2UgYXRvbWl6ZSBjb25zdGFudCBz
dHJpbmdzLCBpbiBjYXNlIHRoZXkncmUgbGF0ZXIgdXNlZCBpbiBwcm9wZXJ0eSBsb29rdXAuCi0g
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGpzT3duZWRTdHJpbmcoZ2VuZXJhdG9y
Lmdsb2JhbEV4ZWMoKSwgSWRlbnRpZmllcihnZW5lcmF0b3IuZ2xvYmFsRXhlYygpLCBtX3ZhbHVl
KS51c3RyaW5nKCkpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwgbV92YWx1
ZSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWdFeHBOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDk0LDcgKzE0OTksNyBAQCBz
dGF0aWMgdm9pZCBwcm9jZXNzQ2xhdXNlTGlzdChDbGF1c2VMaXN0CiAgICAgICAgICAgICAgICAg
dHlwZUZvclRhYmxlID0gU3dpdGNoTmVpdGhlcjsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIFVTdHJpbmcmIHZhbHVlID0gc3RhdGljX2Nhc3Q8U3Ry
aW5nTm9kZSo+KGNsYXVzZUV4cHJlc3Npb24pLT52YWx1ZSgpOworICAgICAgICAgICAgY29uc3Qg
VVN0cmluZyYgdmFsdWUgPSBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4oY2xhdXNlRXhwcmVzc2lv
biktPnZhbHVlKCk7CiAgICAgICAgICAgICBpZiAoc2luZ2xlQ2hhcmFjdGVyU3dpdGNoICY9IHZh
bHVlLnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgaW50MzJfdCBpbnRWYWwgPSB2YWx1
ZS5yZXAoKS0+ZGF0YSgpWzBdOwogICAgICAgICAgICAgICAgIGlmIChpbnRWYWwgPCBtaW5fbnVt
KQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL25vZGVzLmgJKHJldmlzaW9uIDM2NjE4KQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMywyMiArMzEzLDE5IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgU3RyaW5nTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7
CiAgICAgcHVibGljOgotICAgICAgICBTdHJpbmdOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgY29uc3QgVVN0cmluZyogdikgSlNDX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBFeHByZXNz
aW9uTm9kZShnbG9iYWxEYXRhLCBTdHJpbmdUeXBlKQotICAgICAgICAgICAgLCBtX3ZhbHVlKCp2
KQotICAgICAgICB7Ci0gICAgICAgIH0KKyAgICAgICAgU3RyaW5nTm9kZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcqIHYpIEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGlzU3Ry
aW5nKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIFVTdHJp
bmcmIHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICBjb25zdCBVU3RyaW5nJiB2
YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWUudXN0cmluZygpOyB9CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1B1cmUoQ29kZUdlbmVyYXRvciYpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1
ZTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
SlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgVVN0
cmluZyBtX3ZhbHVlOworICAgICAgICBJZGVudGlmaWVyIG1fdmFsdWU7CisKICAgICB9OwogICAg
IAogICAgIGNsYXNzIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsK
</data>
<flag name="review"
          id="10550"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23630</attachid>
            <date>2008-09-21 12:29:14 -0700</date>
            <delta_ts>2008-09-21 13:26:55 -0700</delta_ts>
            <desc>Updating the patch to the actual revision.</desc>
            <filename>patch-duplicated-constants-elim-version4</filename>
            <type>text/plain</type>
            <size>3571</size>
            <attacher name="Judit Jász">jasy</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NzM5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMDktMjEgIEp1ZGl0IEph
c3ogIDxqYXN5QGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgRHVwbGljYXRpb25zIG9mIGNvbnN0YW50cyB2YWx1ZXMgb2YgQ29k
ZUJsb2NrcyBhcmUgZWxpbWluYXRlZC4KKworICAgICAgICAqIFZNL0NvZGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpDb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAgICAgICogVk0v
Q29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OlN0cmluZ05vZGU6OmVtaXRDb2RlKToKKwogMjAwOC0wOS0yMSAgR2Fib3IgTG9raSAgPGxva2lA
aW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRl
eDogSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDM2NzM4KQorKysgSmF2
YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMiw3
ICs3MzIsMjIgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaQogCiBS
ZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGRvdWJs
ZSBkKQogewotICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpzTnVtYmVyKGdsb2JhbEV4ZWMoKSwg
ZCkpOworICAgIEpTVmFsdWUqIG51bWJlciA9IE5VTEw7IAorICAgIGlmICgobnVtYmVyID0gbV9u
dW1iZXJNYXAuZ2V0KGQpKSkKKyAgICAgICAgcmV0dXJuIGVtaXRMb2FkKGRzdCwgbnVtYmVyKTsK
KyAgICBudW1iZXIgPSBqc051bWJlcihnbG9iYWxFeGVjKCksIGQpOworICAgIG1fbnVtYmVyTWFw
LmFkZChkLCBudW1iZXIpOworICAgIHJldHVybiBlbWl0TG9hZChkc3QsIG51bWJlcik7Cit9CisK
K1JlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgY29u
c3QgSWRlbnRpZmllciYgZCkKK3sKKyAgICBKU1ZhbHVlKiBzdHIgPSBOVUxMOyAKKyAgICBpZiAo
KHN0ciA9IG1fc3RyaW5nTWFwLmdldChkLnVzdHJpbmcoKS5yZXAoKSkpKQorICAgICAgICByZXR1
cm4gZW1pdExvYWQoZHN0LCBzdHIpOworICAgIHN0ciA9IGpzT3duZWRTdHJpbmcoZ2xvYmFsRXhl
YygpLCBkLnVzdHJpbmcoKSk7CisgICAgbV9zdHJpbmdNYXAuYWRkKGQudXN0cmluZygpLnJlcCgp
LCBzdHIpOworICAgIHJldHVybiBlbWl0TG9hZChkc3QsIHN0cik7CiB9CiAKIFJlZ2lzdGVySUQq
IENvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNWYWx1ZSogdikKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDM2NzM4KQorKysgSmF2YVNj
cmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVn
aXN0ZXJJRCogZHN0LCBib29sKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBkb3VibGUpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3Rl
cklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExv
YWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlKik7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRV
bmV4cGVjdGVkTG9hZChSZWdpc3RlcklEKiBkc3QsIGJvb2wpOwogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0VW5leHBlY3RlZExvYWQoUmVnaXN0ZXJJRCogZHN0LCBkb3VibGUpOwpAQCAtMzQ3LDYg
KzM0OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9OwogCiAgICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8VVN0cmluZzo6UmVwPiwgaW50LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFz
aFRyYWl0czxSZWZQdHI8VVN0cmluZzo6UmVwPiA+LCBJZGVudGlmaWVyTWFwSW5kZXhIYXNoVHJh
aXRzPiBJZGVudGlmaWVyTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8ZG91YmxlLCBKU1Zh
bHVlKj4gTnVtYmVyTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VVN0cmluZzo6UmVwKiwg
SlNWYWx1ZSosIElkZW50aWZpZXJSZXBIYXNoID4gSWRlbnRpZmllclN0cmluZ01hcDsKIAogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbChPcGNvZGVJRCwgUmVnaXN0ZXJJRCosIFJlZ2lzdGVy
SUQqLCBSZWdpc3RlcklEKiwgQXJndW1lbnRzTm9kZSosIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKIApAQCAtNDIxLDYgKzQyNCw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBDb25zdGFudCBwb29sCiAgICAgICAgIElkZW50
aWZpZXJNYXAgbV9pZGVudGlmaWVyTWFwOwogICAgICAgICBKU1ZhbHVlTWFwIG1fanNWYWx1ZU1h
cDsKKyAgICAgICAgTnVtYmVyTWFwIG1fbnVtYmVyTWFwOworICAgICAgICBJZGVudGlmaWVyU3Ry
aW5nTWFwIG1fc3RyaW5nTWFwOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDM2NzM4KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1Myw3IEBAIFJl
Z2lzdGVySUQqIFN0cmluZ05vZGU6OmVtaXRDb2RlKENvZGVHZW4KIHsKICAgICBpZiAoZHN0ID09
IGlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0TG9hZChkc3QsIGpzT3duZWRTdHJpbmcoZ2VuZXJhdG9yLmdsb2JhbEV4ZWMoKSwgbV92
YWx1ZS51c3RyaW5nKCkpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwgbV92
YWx1ZSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWdFeHBOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg==
</data>
<flag name="review"
          id="10594"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>