<?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>48625</bug_id>
          
          <creation_ts>2010-10-29 05:34:58 -0700</creation_ts>
          <short_desc>[GTK] Optimize foldCase, toLower and toUpper methods in glib unicode backend</short_desc>
          <delta_ts>2010-11-24 04:51:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</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="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>301699</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-10-29 05:34:58 -0700</bug_when>
    <thetext>We could use our owns methods to convert between utf8 and utf16 to avoid the last memcpy needed in every method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301700</commentid>
    <comment_count>1</comment_count>
      <attachid>72318</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-10-29 05:37:41 -0700</bug_when>
    <thetext>Created attachment 72318
Patch

GLib methods use UTF-8 strings, so we have to convert from UTF-16 to UTF-8 to perform the case operations and then convert back the result to UTF-16. GLib conversion methods return a new allocated string, so we have to memcpy the result into the destination buffer too. Using our own methods to convert between UTF-8 and UTF-16 from wtf/unicode/UTF8.h we don&apos;t need such memcpy, since they take an already allocated buffer rather than returning a new one. There&apos;s another optimization for the case when the destination buffer is not large enough. In that case, methods should return the expected destination buffer size and are called again with a new buffer. We can avoid the conversion to UTF-16 by pre-calculating the required size for the destination buffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301703</commentid>
    <comment_count>2</comment_count>
      <attachid>72319</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-10-29 05:45:08 -0700</bug_when>
    <thetext>Created attachment 72319
Fixed minor coding style issue in previous patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308006</commentid>
    <comment_count>3</comment_count>
      <attachid>72319</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-11 11:12:28 -0800</bug_when>
    <thetext>Comment on attachment 72319
Fixed minor coding style issue in previous patch

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

Looks good. It just needs a couple small cleanups.

&gt; JavaScriptCore/wtf/unicode/glib/UnicodeGLib.cpp:58
&gt; +        utf16Length += (character &gt;= 0x10000) ? 2 : 1;

There&apos;s a macro in TextBreakIterator.h for this.

&gt; JavaScriptCore/wtf/unicode/glib/UnicodeGLib.cpp:83
&gt; +    GOwnPtr&lt;char&gt; utf8Result;
&gt; +    utf8Result.set(caseFunction(buffer.data(), buffer.size()));

I think it makes more sense for this to be:

GOwnPtr&lt;char&gt; utf8Result(caseFunction(buffer.data(), buffer.size());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308423</commentid>
    <comment_count>4</comment_count>
      <attachid>73710</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2010-11-12 00:19:47 -0800</bug_when>
    <thetext>Created attachment 73710
Updated patch according to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313225</commentid>
    <comment_count>5</comment_count>
      <attachid>73710</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-24 04:29:56 -0800</bug_when>
    <thetext>Comment on attachment 73710
Updated patch according to review

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

&gt; JavaScriptCore/wtf/unicode/glib/UnicodeGLib.cpp:30
&gt; +

Perhaps this could be shared, but you can do that afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313233</commentid>
    <comment_count>6</comment_count>
      <attachid>73710</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-24 04:51:13 -0800</bug_when>
    <thetext>Comment on attachment 73710
Updated patch according to review

Clearing flags on attachment: 73710

Committed r72662: &lt;http://trac.webkit.org/changeset/72662&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313234</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-24 04:51:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72318</attachid>
            <date>2010-10-29 05:37:41 -0700</date>
            <delta_ts>2010-10-29 05:45:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>optimize-case.diff</filename>
            <type>text/plain</type>
            <size>7414</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAwZDg3MGEwLi5iYTlhOGU1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTAtMTAtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IE9wdGltaXplIGZvbGRDYXNlLCB0b0xvd2VyIGFuZCB0b1VwcGVyIG1ldGhvZHMgaW4gZ2xpYiB1
bmljb2RlIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ4NjI1CisKKyAgICAgICAgR0xpYiBtZXRob2RzIHVzZSBVVEYtOCBzdHJpbmdzLCBz
byB3ZSBoYXZlIHRvIGNvbnZlcnQgZnJvbSBVVEYtMTYgdG8KKyAgICAgICAgVVRGLTggdG8gcGVy
Zm9ybSB0aGUgY2FzZSBvcGVyYXRpb25zIGFuZCB0aGVuIGNvbnZlcnQgYmFjayB0aGUgcmVzdWx0
IHRvCisgICAgICAgIFVURi0xNi4gR0xpYiBjb252ZXJzaW9uIG1ldGhvZHMgcmV0dXJuIGEgbmV3
IGFsbG9jYXRlZCBzdHJpbmcsIHNvIHdlCisgICAgICAgIGhhdmUgdG8gbWVtY3B5IHRoZSByZXN1
bHQgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHRvby4gVXNpbmcgb3VyCisgICAgICAgIG93
biBtZXRob2RzIHRvIGNvbnZlcnQgYmV0d2VlbiBVVEYtOCBhbmQgVVRGLTE2IGZyb20gd3RmL3Vu
aWNvZGUvVVRGOC5oCisgICAgICAgIHdlIGRvbid0IG5lZWQgc3VjaCBtZW1jcHksIHNpbmNlIHRo
ZXkgdGFrZSBhbiBhbHJlYWR5IGFsbG9jYXRlZCBidWZmZXIKKyAgICAgICAgcmF0aGVyIHRoYW4g
cmV0dXJuaW5nIGEgbmV3IG9uZS4gVGhlcmUncyBhbm90aGVyIG9wdGltaXphdGlvbiBmb3IgdGhl
CisgICAgICAgIGNhc2Ugd2hlbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBsYXJnZSBl
bm91Z2guIEluIHRoYXQgY2FzZSwKKyAgICAgICAgbWV0aG9kcyBzaG91bGQgcmV0dXJuIHRoZSBl
eHBlY3RlZCBkZXN0aW5hdGlvbiBidWZmZXIgc2l6ZSBhbmQgYXJlCisgICAgICAgIGNhbGxlZCBh
Z2FpbiB3aXRoIGEgbmV3IGJ1ZmZlci4gV2UgY2FuIGF2b2lkIHRoZSBjb252ZXJzaW9uIHRvIFVU
Ri0xNiBieQorICAgICAgICBwcmUtY2FsY3VsYXRpbmcgdGhlIHJlcXVpcmVkIHNpemUgZm9yIHRo
ZSBkZXN0aW5hdGlvbiBidWZmZXIuCisKKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliL1VuaWNv
ZGVHTGliLmNwcDoKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Z2V0VVRGMTZMZW5ndGhGcm9tVVRG
OCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNvbnZlcnRDYXNlKToKKyAgICAgICAgKFdURjo6
VW5pY29kZTo6Zm9sZENhc2UpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp0b0xvd2VyKToKKyAg
ICAgICAgKFdURjo6VW5pY29kZTo6dG9VcHBlcik6CisKIDIwMTAtMTAtMjEgIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIu
Y3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5jcHAKaW5k
ZXggZTIwYzM3Ni4uOTJlMDdiNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNv
ZGUvZ2xpYi9Vbmljb2RlR0xpYi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUv
Z2xpYi9Vbmljb2RlR0xpYi5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55
LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMiw2ICsyMyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VW5pY29kZUdMaWIuaCIKIAorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dW5pY29kZS9VVEY4Lmg+CisKIG5hbWVzcGFjZSBXVEYgewogbmFtZXNwYWNlIFVuaWNvZGUgewog
CkBAIC00MywxMDAgKzQ3LDcyIEBAIFVDaGFyMzIgZm9sZENhc2UoVUNoYXIzMiBjaCkKICAgICBy
ZXR1cm4gKnVjczRSZXN1bHQ7CiB9CiAKLWludCBmb2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQg
cmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJv
cikKK3N0YXRpYyBpbnQgZ2V0VVRGMTZMZW5ndGhGcm9tVVRGOChjb25zdCBnY2hhciogdXRmOFN0
cmluZywgaW50IGxlbmd0aCkKIHsKLSAgICAqZXJyb3IgPSBmYWxzZTsKLSAgICBHT3duUHRyPEdF
cnJvcj4gZ2Vycm9yOwotCi0gICAgR093blB0cjxjaGFyPiB1dGY4c3JjOwotICAgIHV0ZjhzcmMu
c2V0KGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdlcnJvci5vdXRQdHIo
KSkpOwotICAgIGlmIChnZXJyb3IpIHsKLSAgICAgICAgKmVycm9yID0gdHJ1ZTsKLSAgICAgICAg
cmV0dXJuIC0xOwotICAgIH0KKyAgICBpbnQgdXRmMTZMZW5ndGggPSAwOworICAgIGNvbnN0IGdj
aGFyICppbnB1dFN0cmluZyA9IHV0ZjhTdHJpbmc7CiAKLSAgICBHT3duUHRyPGNoYXI+IHV0Zjhy
ZXN1bHQ7Ci0gICAgdXRmOHJlc3VsdC5zZXQoZ191dGY4X2Nhc2Vmb2xkKHV0ZjhzcmMuZ2V0KCks
IC0xKSk7Ci0KLSAgICBsb25nIHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7Ci0gICAgR093blB0cjxV
Q2hhcj4gdXRmMTZyZXN1bHQ7Ci0gICAgdXRmMTZyZXN1bHQuc2V0KGdfdXRmOF90b191dGYxNih1
dGY4cmVzdWx0LmdldCgpLCAtMSwgMCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9yLm91dFB0
cigpKSk7Ci0gICAgaWYgKGdlcnJvcikgewotICAgICAgICAqZXJyb3IgPSB0cnVlOwotICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgfQorICAgIHdoaWxlICgodXRmOFN0cmluZyArIGxlbmd0aCAtIGlu
cHV0U3RyaW5nID4gMCkgJiYgKmlucHV0U3RyaW5nKSB7CisgICAgICAgIGd1bmljaGFyIGNoYXJh
Y3RlciA9IGdfdXRmOF9nZXRfY2hhcihpbnB1dFN0cmluZyk7CiAKLSAgICBpZiAodXRmMTZyZXN1
bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKLSAgICAgICAgKmVycm9yID0gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgICAgICB1dGYxNkxlbmd0aCArPSAoY2hh
cmFjdGVyID49IDB4MTAwMDApID8gMiA6IDE7CisgICAgICAgIGlucHV0U3RyaW5nID0gZ191dGY4
X25leHRfY2hhcihpbnB1dFN0cmluZyk7CiAgICAgfQotICAgIG1lbWNweShyZXN1bHQsIHV0ZjE2
cmVzdWx0LmdldCgpLCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogCi0gICAg
cmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgIHJldHVybiB1dGYxNkxlbmd0aDsKIH0KIAot
aW50IHRvTG93ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIq
IHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCit0eXBlZGVmIGdjaGFyKiAoKlVURjhD
YXNlRnVuY3Rpb24pKGNvbnN0IGdjaGFyKiwgZ3NzaXplIGxlbmd0aCk7CisKK3N0YXRpYyBpbnQg
Y29udmVydENhc2UoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIq
IHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IsIFVURjhDYXNlRnVuY3Rpb24gY2FzZUZ1
bmN0aW9uKQogewogICAgICplcnJvciA9IGZhbHNlOwotICAgIEdPd25QdHI8R0Vycm9yPiBnZXJy
b3I7CiAKLSAgICBHT3duUHRyPGNoYXI+IHV0ZjhzcmM7Ci0gICAgdXRmOHNyYy5zZXQoZ191dGYx
Nl90b191dGY4KHNyYywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9yLm91dFB0cigpKSk7Ci0gICAg
aWYgKGdlcnJvcikgeworICAgIC8vIEFsbG9jYXRlIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaG9s
ZCBhbGwgdGhlIGNoYXJhY3RlcnMuCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcihzcmNMZW5ndGgg
KiAzKTsKKyAgICBjaGFyKiB1dGY4VGFyZ2V0ID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBV
Q2hhciogdXRmMTZTb3VyY2UgPSBzcmM7CisgICAgQ29udmVyc2lvblJlc3VsdCBjb252ZXJzaW9u
UmVzdWx0ID0gY29udmVydFVURjE2VG9VVEY4KCZ1dGYxNlNvdXJjZSwgdXRmMTZTb3VyY2UgKyBz
cmNMZW5ndGgsICZ1dGY4VGFyZ2V0LCB1dGY4VGFyZ2V0ICsgYnVmZmVyLnNpemUoKSwgdHJ1ZSk7
CisgICAgaWYgKGNvbnZlcnNpb25SZXN1bHQgIT0gY29udmVyc2lvbk9LKSB7CiAgICAgICAgICpl
cnJvciA9IHRydWU7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgYnVmZmVyLnNocmlu
ayh1dGY4VGFyZ2V0IC0gYnVmZmVyLmRhdGEoKSk7CiAKLSAgICBHT3duUHRyPGNoYXI+IHV0Zjhy
ZXN1bHQ7Ci0gICAgdXRmOHJlc3VsdC5zZXQoZ191dGY4X3N0cmRvd24odXRmOHNyYy5nZXQoKSwg
LTEpKTsKKyAgICBHT3duUHRyPGNoYXI+IHV0ZjhSZXN1bHQ7CisgICAgdXRmOFJlc3VsdC5zZXQo
Y2FzZUZ1bmN0aW9uKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpKTsKKyAgICBsb25nIHV0
ZjhSZXN1bHRMZW5ndGggPSBzdHJsZW4odXRmOFJlc3VsdC5nZXQoKSk7CiAKLSAgICBsb25nIHV0
ZjE2cmVzdWx0TGVuZ3RoID0gLTE7Ci0gICAgR093blB0cjxVQ2hhcj4gdXRmMTZyZXN1bHQ7Ci0g
ICAgdXRmMTZyZXN1bHQuc2V0KGdfdXRmOF90b191dGYxNih1dGY4cmVzdWx0LmdldCgpLCAtMSwg
MCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9yLm91dFB0cigpKSk7Ci0gICAgaWYgKGdlcnJv
cikgeworICAgIC8vIENhbGN1bGF0ZSB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHNpemUuCisgICAg
aW50IHJlYWxMZW5ndGggPSBnZXRVVEYxNkxlbmd0aEZyb21VVEY4KHV0ZjhSZXN1bHQuZ2V0KCks
IHV0ZjhSZXN1bHRMZW5ndGgpOworICAgIGlmIChyZWFsTGVuZ3RoID4gcmVzdWx0TGVuZ3RoKSB7
CiAgICAgICAgICplcnJvciA9IHRydWU7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0
dXJuIHJlYWxMZW5ndGg7CiAgICAgfQogCi0gICAgaWYgKHV0ZjE2cmVzdWx0TGVuZ3RoID4gcmVz
dWx0TGVuZ3RoKSB7CisgICAgLy8gQ29udmVydCB0aGUgcmVzdWx0IHRvIFVURi0xNi4KKyAgICBV
Q2hhciogdXRmMTZUYXJnZXQgPSByZXN1bHQ7CisgICAgY29uc3QgY2hhciogdXRmOFNvdXJjZSA9
IHV0ZjhSZXN1bHQuZ2V0KCk7CisgICAgY29udmVyc2lvblJlc3VsdCA9IGNvbnZlcnRVVEY4VG9V
VEYxNigmdXRmOFNvdXJjZSwgdXRmOFNvdXJjZSArIHV0ZjhSZXN1bHRMZW5ndGgsICZ1dGYxNlRh
cmdldCwgdXRmMTZUYXJnZXQgKyByZXN1bHRMZW5ndGgsIHRydWUpOworICAgIGxvbmcgdXRmMTZS
ZXN1bHRMZW5ndGggPSB1dGYxNlRhcmdldCAtIHJlc3VsdDsKKyAgICBpZiAoY29udmVyc2lvblJl
c3VsdCAhPSBjb252ZXJzaW9uT0spCiAgICAgICAgICplcnJvciA9IHRydWU7Ci0gICAgICAgIHJl
dHVybiB1dGYxNnJlc3VsdExlbmd0aDsKLSAgICB9Ci0gICAgbWVtY3B5KHJlc3VsdCwgdXRmMTZy
ZXN1bHQuZ2V0KCksIHV0ZjE2cmVzdWx0TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAKLSAgICBy
ZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgcmV0dXJuIHV0ZjE2UmVzdWx0TGVuZ3RoIDw9
IDAgPyAtMSA6IHV0ZjE2UmVzdWx0TGVuZ3RoOwogfQotCi1pbnQgdG9VcHBlcihVQ2hhciogcmVz
dWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBi
b29sKiBlcnJvcikKK2ludCBmb2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3Ro
LCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKIHsKLSAgICAq
ZXJyb3IgPSBmYWxzZTsKLSAgICBHT3duUHRyPEdFcnJvcj4gZ2Vycm9yOwotCi0gICAgR093blB0
cjxjaGFyPiB1dGY4c3JjOwotICAgIHV0ZjhzcmMuc2V0KGdfdXRmMTZfdG9fdXRmOChzcmMsIHNy
Y0xlbmd0aCwgMCwgMCwgJmdlcnJvci5vdXRQdHIoKSkpOwotICAgIGlmIChnZXJyb3IpIHsKLSAg
ICAgICAgKmVycm9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIEdP
d25QdHI8Y2hhcj4gdXRmOHJlc3VsdDsKLSAgICB1dGY4cmVzdWx0LnNldChnX3V0Zjhfc3RydXAo
dXRmOHNyYy5nZXQoKSwgLTEpKTsKLQotICAgIGxvbmcgdXRmMTZyZXN1bHRMZW5ndGggPSAtMTsK
LSAgICBHT3duUHRyPFVDaGFyPiB1dGYxNnJlc3VsdDsKLSAgICB1dGYxNnJlc3VsdC5zZXQoZ191
dGY4X3RvX3V0ZjE2KHV0ZjhyZXN1bHQuZ2V0KCksIC0xLCAwLCAmdXRmMTZyZXN1bHRMZW5ndGgs
ICZnZXJyb3Iub3V0UHRyKCkpKTsKLSAgICBpZiAoZ2Vycm9yKSB7Ci0gICAgICAgICplcnJvciA9
IHRydWU7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisgICAgcmV0dXJuIGNvbnZlcnRDYXNl
KHJlc3VsdCwgcmVzdWx0TGVuZ3RoLCBzcmMsIHNyY0xlbmd0aCwgZXJyb3IsIGdfdXRmOF9jYXNl
Zm9sZCk7Cit9CiAKLSAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsK
LSAgICAgICAgKmVycm9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3Ro
OwotICAgIH0KLSAgICBtZW1jcHkocmVzdWx0LCB1dGYxNnJlc3VsdC5nZXQoKSwgdXRmMTZyZXN1
bHRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKK2ludCB0b0xvd2VyKFVDaGFyKiByZXN1bHQsIGlu
dCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVy
cm9yKQoreworICAgIHJldHVybiBjb252ZXJ0Q2FzZShyZXN1bHQsIHJlc3VsdExlbmd0aCwgc3Jj
LCBzcmNMZW5ndGgsIGVycm9yLCBnX3V0Zjhfc3RyZG93bik7Cit9CiAKLSAgICByZXR1cm4gdXRm
MTZyZXN1bHRMZW5ndGg7CitpbnQgdG9VcHBlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVu
Z3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKK3sKKyAg
ICByZXR1cm4gY29udmVydENhc2UocmVzdWx0LCByZXN1bHRMZW5ndGgsIHNyYywgc3JjTGVuZ3Ro
LCBlcnJvciwgZ191dGY4X3N0cnVwKTsKIH0KIAogRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMy
IGMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72319</attachid>
            <date>2010-10-29 05:45:08 -0700</date>
            <delta_ts>2010-11-12 00:19:47 -0800</delta_ts>
            <desc>Fixed minor coding style issue in previous patch</desc>
            <filename>optimize-case.diff</filename>
            <type>text/plain</type>
            <size>7414</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAwZDg3MGEwLi5iYTlhOGU1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTAtMTAtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IE9wdGltaXplIGZvbGRDYXNlLCB0b0xvd2VyIGFuZCB0b1VwcGVyIG1ldGhvZHMgaW4gZ2xpYiB1
bmljb2RlIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ4NjI1CisKKyAgICAgICAgR0xpYiBtZXRob2RzIHVzZSBVVEYtOCBzdHJpbmdzLCBz
byB3ZSBoYXZlIHRvIGNvbnZlcnQgZnJvbSBVVEYtMTYgdG8KKyAgICAgICAgVVRGLTggdG8gcGVy
Zm9ybSB0aGUgY2FzZSBvcGVyYXRpb25zIGFuZCB0aGVuIGNvbnZlcnQgYmFjayB0aGUgcmVzdWx0
IHRvCisgICAgICAgIFVURi0xNi4gR0xpYiBjb252ZXJzaW9uIG1ldGhvZHMgcmV0dXJuIGEgbmV3
IGFsbG9jYXRlZCBzdHJpbmcsIHNvIHdlCisgICAgICAgIGhhdmUgdG8gbWVtY3B5IHRoZSByZXN1
bHQgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHRvby4gVXNpbmcgb3VyCisgICAgICAgIG93
biBtZXRob2RzIHRvIGNvbnZlcnQgYmV0d2VlbiBVVEYtOCBhbmQgVVRGLTE2IGZyb20gd3RmL3Vu
aWNvZGUvVVRGOC5oCisgICAgICAgIHdlIGRvbid0IG5lZWQgc3VjaCBtZW1jcHksIHNpbmNlIHRo
ZXkgdGFrZSBhbiBhbHJlYWR5IGFsbG9jYXRlZCBidWZmZXIKKyAgICAgICAgcmF0aGVyIHRoYW4g
cmV0dXJuaW5nIGEgbmV3IG9uZS4gVGhlcmUncyBhbm90aGVyIG9wdGltaXphdGlvbiBmb3IgdGhl
CisgICAgICAgIGNhc2Ugd2hlbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBsYXJnZSBl
bm91Z2guIEluIHRoYXQgY2FzZSwKKyAgICAgICAgbWV0aG9kcyBzaG91bGQgcmV0dXJuIHRoZSBl
eHBlY3RlZCBkZXN0aW5hdGlvbiBidWZmZXIgc2l6ZSBhbmQgYXJlCisgICAgICAgIGNhbGxlZCBh
Z2FpbiB3aXRoIGEgbmV3IGJ1ZmZlci4gV2UgY2FuIGF2b2lkIHRoZSBjb252ZXJzaW9uIHRvIFVU
Ri0xNiBieQorICAgICAgICBwcmUtY2FsY3VsYXRpbmcgdGhlIHJlcXVpcmVkIHNpemUgZm9yIHRo
ZSBkZXN0aW5hdGlvbiBidWZmZXIuCisKKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliL1VuaWNv
ZGVHTGliLmNwcDoKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Z2V0VVRGMTZMZW5ndGhGcm9tVVRG
OCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNvbnZlcnRDYXNlKToKKyAgICAgICAgKFdURjo6
VW5pY29kZTo6Zm9sZENhc2UpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp0b0xvd2VyKToKKyAg
ICAgICAgKFdURjo6VW5pY29kZTo6dG9VcHBlcik6CisKIDIwMTAtMTAtMjEgIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIu
Y3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5jcHAKaW5k
ZXggZTIwYzM3Ni4uODc3Y2UyZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNv
ZGUvZ2xpYi9Vbmljb2RlR0xpYi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUv
Z2xpYi9Vbmljb2RlR0xpYi5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55
LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMiw2ICsyMyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VW5pY29kZUdMaWIuaCIKIAorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dW5pY29kZS9VVEY4Lmg+CisKIG5hbWVzcGFjZSBXVEYgewogbmFtZXNwYWNlIFVuaWNvZGUgewog
CkBAIC00MywxMDAgKzQ3LDcyIEBAIFVDaGFyMzIgZm9sZENhc2UoVUNoYXIzMiBjaCkKICAgICBy
ZXR1cm4gKnVjczRSZXN1bHQ7CiB9CiAKLWludCBmb2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQg
cmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJv
cikKK3N0YXRpYyBpbnQgZ2V0VVRGMTZMZW5ndGhGcm9tVVRGOChjb25zdCBnY2hhciogdXRmOFN0
cmluZywgaW50IGxlbmd0aCkKIHsKLSAgICAqZXJyb3IgPSBmYWxzZTsKLSAgICBHT3duUHRyPEdF
cnJvcj4gZ2Vycm9yOwotCi0gICAgR093blB0cjxjaGFyPiB1dGY4c3JjOwotICAgIHV0ZjhzcmMu
c2V0KGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdlcnJvci5vdXRQdHIo
KSkpOwotICAgIGlmIChnZXJyb3IpIHsKLSAgICAgICAgKmVycm9yID0gdHJ1ZTsKLSAgICAgICAg
cmV0dXJuIC0xOwotICAgIH0KKyAgICBpbnQgdXRmMTZMZW5ndGggPSAwOworICAgIGNvbnN0IGdj
aGFyKiBpbnB1dFN0cmluZyA9IHV0ZjhTdHJpbmc7CiAKLSAgICBHT3duUHRyPGNoYXI+IHV0Zjhy
ZXN1bHQ7Ci0gICAgdXRmOHJlc3VsdC5zZXQoZ191dGY4X2Nhc2Vmb2xkKHV0ZjhzcmMuZ2V0KCks
IC0xKSk7Ci0KLSAgICBsb25nIHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7Ci0gICAgR093blB0cjxV
Q2hhcj4gdXRmMTZyZXN1bHQ7Ci0gICAgdXRmMTZyZXN1bHQuc2V0KGdfdXRmOF90b191dGYxNih1
dGY4cmVzdWx0LmdldCgpLCAtMSwgMCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9yLm91dFB0
cigpKSk7Ci0gICAgaWYgKGdlcnJvcikgewotICAgICAgICAqZXJyb3IgPSB0cnVlOwotICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgfQorICAgIHdoaWxlICgodXRmOFN0cmluZyArIGxlbmd0aCAtIGlu
cHV0U3RyaW5nID4gMCkgJiYgKmlucHV0U3RyaW5nKSB7CisgICAgICAgIGd1bmljaGFyIGNoYXJh
Y3RlciA9IGdfdXRmOF9nZXRfY2hhcihpbnB1dFN0cmluZyk7CiAKLSAgICBpZiAodXRmMTZyZXN1
bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKLSAgICAgICAgKmVycm9yID0gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgICAgICB1dGYxNkxlbmd0aCArPSAoY2hh
cmFjdGVyID49IDB4MTAwMDApID8gMiA6IDE7CisgICAgICAgIGlucHV0U3RyaW5nID0gZ191dGY4
X25leHRfY2hhcihpbnB1dFN0cmluZyk7CiAgICAgfQotICAgIG1lbWNweShyZXN1bHQsIHV0ZjE2
cmVzdWx0LmdldCgpLCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogCi0gICAg
cmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgIHJldHVybiB1dGYxNkxlbmd0aDsKIH0KIAot
aW50IHRvTG93ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIq
IHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCit0eXBlZGVmIGdjaGFyKiAoKlVURjhD
YXNlRnVuY3Rpb24pKGNvbnN0IGdjaGFyKiwgZ3NzaXplIGxlbmd0aCk7CisKK3N0YXRpYyBpbnQg
Y29udmVydENhc2UoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIq
IHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IsIFVURjhDYXNlRnVuY3Rpb24gY2FzZUZ1
bmN0aW9uKQogewogICAgICplcnJvciA9IGZhbHNlOwotICAgIEdPd25QdHI8R0Vycm9yPiBnZXJy
b3I7CiAKLSAgICBHT3duUHRyPGNoYXI+IHV0ZjhzcmM7Ci0gICAgdXRmOHNyYy5zZXQoZ191dGYx
Nl90b191dGY4KHNyYywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9yLm91dFB0cigpKSk7Ci0gICAg
aWYgKGdlcnJvcikgeworICAgIC8vIEFsbG9jYXRlIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaG9s
ZCBhbGwgdGhlIGNoYXJhY3RlcnMuCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcihzcmNMZW5ndGgg
KiAzKTsKKyAgICBjaGFyKiB1dGY4VGFyZ2V0ID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBV
Q2hhciogdXRmMTZTb3VyY2UgPSBzcmM7CisgICAgQ29udmVyc2lvblJlc3VsdCBjb252ZXJzaW9u
UmVzdWx0ID0gY29udmVydFVURjE2VG9VVEY4KCZ1dGYxNlNvdXJjZSwgdXRmMTZTb3VyY2UgKyBz
cmNMZW5ndGgsICZ1dGY4VGFyZ2V0LCB1dGY4VGFyZ2V0ICsgYnVmZmVyLnNpemUoKSwgdHJ1ZSk7
CisgICAgaWYgKGNvbnZlcnNpb25SZXN1bHQgIT0gY29udmVyc2lvbk9LKSB7CiAgICAgICAgICpl
cnJvciA9IHRydWU7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgYnVmZmVyLnNocmlu
ayh1dGY4VGFyZ2V0IC0gYnVmZmVyLmRhdGEoKSk7CiAKLSAgICBHT3duUHRyPGNoYXI+IHV0Zjhy
ZXN1bHQ7Ci0gICAgdXRmOHJlc3VsdC5zZXQoZ191dGY4X3N0cmRvd24odXRmOHNyYy5nZXQoKSwg
LTEpKTsKKyAgICBHT3duUHRyPGNoYXI+IHV0ZjhSZXN1bHQ7CisgICAgdXRmOFJlc3VsdC5zZXQo
Y2FzZUZ1bmN0aW9uKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpKTsKKyAgICBsb25nIHV0
ZjhSZXN1bHRMZW5ndGggPSBzdHJsZW4odXRmOFJlc3VsdC5nZXQoKSk7CiAKLSAgICBsb25nIHV0
ZjE2cmVzdWx0TGVuZ3RoID0gLTE7Ci0gICAgR093blB0cjxVQ2hhcj4gdXRmMTZyZXN1bHQ7Ci0g
ICAgdXRmMTZyZXN1bHQuc2V0KGdfdXRmOF90b191dGYxNih1dGY4cmVzdWx0LmdldCgpLCAtMSwg
MCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9yLm91dFB0cigpKSk7Ci0gICAgaWYgKGdlcnJv
cikgeworICAgIC8vIENhbGN1bGF0ZSB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHNpemUuCisgICAg
aW50IHJlYWxMZW5ndGggPSBnZXRVVEYxNkxlbmd0aEZyb21VVEY4KHV0ZjhSZXN1bHQuZ2V0KCks
IHV0ZjhSZXN1bHRMZW5ndGgpOworICAgIGlmIChyZWFsTGVuZ3RoID4gcmVzdWx0TGVuZ3RoKSB7
CiAgICAgICAgICplcnJvciA9IHRydWU7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0
dXJuIHJlYWxMZW5ndGg7CiAgICAgfQogCi0gICAgaWYgKHV0ZjE2cmVzdWx0TGVuZ3RoID4gcmVz
dWx0TGVuZ3RoKSB7CisgICAgLy8gQ29udmVydCB0aGUgcmVzdWx0IHRvIFVURi0xNi4KKyAgICBV
Q2hhciogdXRmMTZUYXJnZXQgPSByZXN1bHQ7CisgICAgY29uc3QgY2hhciogdXRmOFNvdXJjZSA9
IHV0ZjhSZXN1bHQuZ2V0KCk7CisgICAgY29udmVyc2lvblJlc3VsdCA9IGNvbnZlcnRVVEY4VG9V
VEYxNigmdXRmOFNvdXJjZSwgdXRmOFNvdXJjZSArIHV0ZjhSZXN1bHRMZW5ndGgsICZ1dGYxNlRh
cmdldCwgdXRmMTZUYXJnZXQgKyByZXN1bHRMZW5ndGgsIHRydWUpOworICAgIGxvbmcgdXRmMTZS
ZXN1bHRMZW5ndGggPSB1dGYxNlRhcmdldCAtIHJlc3VsdDsKKyAgICBpZiAoY29udmVyc2lvblJl
c3VsdCAhPSBjb252ZXJzaW9uT0spCiAgICAgICAgICplcnJvciA9IHRydWU7Ci0gICAgICAgIHJl
dHVybiB1dGYxNnJlc3VsdExlbmd0aDsKLSAgICB9Ci0gICAgbWVtY3B5KHJlc3VsdCwgdXRmMTZy
ZXN1bHQuZ2V0KCksIHV0ZjE2cmVzdWx0TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAKLSAgICBy
ZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgcmV0dXJuIHV0ZjE2UmVzdWx0TGVuZ3RoIDw9
IDAgPyAtMSA6IHV0ZjE2UmVzdWx0TGVuZ3RoOwogfQotCi1pbnQgdG9VcHBlcihVQ2hhciogcmVz
dWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBi
b29sKiBlcnJvcikKK2ludCBmb2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3Ro
LCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKIHsKLSAgICAq
ZXJyb3IgPSBmYWxzZTsKLSAgICBHT3duUHRyPEdFcnJvcj4gZ2Vycm9yOwotCi0gICAgR093blB0
cjxjaGFyPiB1dGY4c3JjOwotICAgIHV0ZjhzcmMuc2V0KGdfdXRmMTZfdG9fdXRmOChzcmMsIHNy
Y0xlbmd0aCwgMCwgMCwgJmdlcnJvci5vdXRQdHIoKSkpOwotICAgIGlmIChnZXJyb3IpIHsKLSAg
ICAgICAgKmVycm9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIEdP
d25QdHI8Y2hhcj4gdXRmOHJlc3VsdDsKLSAgICB1dGY4cmVzdWx0LnNldChnX3V0Zjhfc3RydXAo
dXRmOHNyYy5nZXQoKSwgLTEpKTsKLQotICAgIGxvbmcgdXRmMTZyZXN1bHRMZW5ndGggPSAtMTsK
LSAgICBHT3duUHRyPFVDaGFyPiB1dGYxNnJlc3VsdDsKLSAgICB1dGYxNnJlc3VsdC5zZXQoZ191
dGY4X3RvX3V0ZjE2KHV0ZjhyZXN1bHQuZ2V0KCksIC0xLCAwLCAmdXRmMTZyZXN1bHRMZW5ndGgs
ICZnZXJyb3Iub3V0UHRyKCkpKTsKLSAgICBpZiAoZ2Vycm9yKSB7Ci0gICAgICAgICplcnJvciA9
IHRydWU7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisgICAgcmV0dXJuIGNvbnZlcnRDYXNl
KHJlc3VsdCwgcmVzdWx0TGVuZ3RoLCBzcmMsIHNyY0xlbmd0aCwgZXJyb3IsIGdfdXRmOF9jYXNl
Zm9sZCk7Cit9CiAKLSAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsK
LSAgICAgICAgKmVycm9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3Ro
OwotICAgIH0KLSAgICBtZW1jcHkocmVzdWx0LCB1dGYxNnJlc3VsdC5nZXQoKSwgdXRmMTZyZXN1
bHRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKK2ludCB0b0xvd2VyKFVDaGFyKiByZXN1bHQsIGlu
dCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVy
cm9yKQoreworICAgIHJldHVybiBjb252ZXJ0Q2FzZShyZXN1bHQsIHJlc3VsdExlbmd0aCwgc3Jj
LCBzcmNMZW5ndGgsIGVycm9yLCBnX3V0Zjhfc3RyZG93bik7Cit9CiAKLSAgICByZXR1cm4gdXRm
MTZyZXN1bHRMZW5ndGg7CitpbnQgdG9VcHBlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVu
Z3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKK3sKKyAg
ICByZXR1cm4gY29udmVydENhc2UocmVzdWx0LCByZXN1bHRMZW5ndGgsIHNyYywgc3JjTGVuZ3Ro
LCBlcnJvciwgZ191dGY4X3N0cnVwKTsKIH0KIAogRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMy
IGMpCg==
</data>
<flag name="review"
          id="62551"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73710</attachid>
            <date>2010-11-12 00:19:47 -0800</date>
            <delta_ts>2010-11-24 04:51:13 -0800</delta_ts>
            <desc>Updated patch according to review</desc>
            <filename>optimize-glib-unicode.diff</filename>
            <type>text/plain</type>
            <size>7478</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA4ZjY2M2ZmLi4wODExNGRiIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTAtMTEtMTIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IE9wdGltaXplIGZvbGRDYXNlLCB0b0xvd2VyIGFuZCB0b1VwcGVyIG1ldGhvZHMgaW4gZ2xpYiB1
bmljb2RlIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ4NjI1CisKKyAgICAgICAgR0xpYiBtZXRob2RzIHVzZSBVVEYtOCBzdHJpbmdzLCBz
byB3ZSBoYXZlIHRvIGNvbnZlcnQgZnJvbSBVVEYtMTYgdG8KKyAgICAgICAgVVRGLTggdG8gcGVy
Zm9ybSB0aGUgY2FzZSBvcGVyYXRpb25zIGFuZCB0aGVuIGNvbnZlcnQgYmFjayB0aGUgcmVzdWx0
IHRvCisgICAgICAgIFVURi0xNi4gR0xpYiBjb252ZXJzaW9uIG1ldGhvZHMgcmV0dXJuIGEgbmV3
IGFsbG9jYXRlZCBzdHJpbmcsIHNvIHdlCisgICAgICAgIGhhdmUgdG8gbWVtY3B5IHRoZSByZXN1
bHQgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHRvby4gVXNpbmcgb3VyCisgICAgICAgIG93
biBtZXRob2RzIHRvIGNvbnZlcnQgYmV0d2VlbiBVVEYtOCBhbmQgVVRGLTE2IGZyb20gd3RmL3Vu
aWNvZGUvVVRGOC5oCisgICAgICAgIHdlIGRvbid0IG5lZWQgc3VjaCBtZW1jcHksIHNpbmNlIHRo
ZXkgdGFrZSBhbiBhbHJlYWR5IGFsbG9jYXRlZCBidWZmZXIKKyAgICAgICAgcmF0aGVyIHRoYW4g
cmV0dXJuaW5nIGEgbmV3IG9uZS4gVGhlcmUncyBhbm90aGVyIG9wdGltaXphdGlvbiBmb3IgdGhl
CisgICAgICAgIGNhc2Ugd2hlbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdCBsYXJnZSBl
bm91Z2guIEluIHRoYXQgY2FzZSwKKyAgICAgICAgbWV0aG9kcyBzaG91bGQgcmV0dXJuIHRoZSBl
eHBlY3RlZCBkZXN0aW5hdGlvbiBidWZmZXIgc2l6ZSBhbmQgYXJlCisgICAgICAgIGNhbGxlZCBh
Z2FpbiB3aXRoIGEgbmV3IGJ1ZmZlci4gV2UgY2FuIGF2b2lkIHRoZSBjb252ZXJzaW9uIHRvIFVU
Ri0xNiBieQorICAgICAgICBwcmUtY2FsY3VsYXRpbmcgdGhlIHJlcXVpcmVkIHNpemUgZm9yIHRo
ZSBkZXN0aW5hdGlvbiBidWZmZXIuCisKKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliL1VuaWNv
ZGVHTGliLmNwcDoKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Z2V0VVRGMTZMZW5ndGhGcm9tVVRG
OCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNvbnZlcnRDYXNlKToKKyAgICAgICAgKFdURjo6
VW5pY29kZTo6Zm9sZENhc2UpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp0b0xvd2VyKToKKyAg
ICAgICAgKFdURjo6VW5pY29kZTo6dG9VcHBlcik6CisKIDIwMTAtMTEtMDggIEFkYW0gUm9iZW4g
IDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJvbGwgb3V0IHI3MTUzMgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5jcHAgYi9KYXZh
U2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmNwcAppbmRleCBlMjBjMzc2
Li5hMDFjM2VlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1Vu
aWNvZGVHTGliLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNv
ZGVHTGliLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IErD
vHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDggRG9taW5p
ayBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorICog
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIyLDYgKzIzLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVW5pY29kZUdM
aWIuaCIKIAorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9V
VEY4Lmg+CisKKyNkZWZpbmUgVVRGOF9JU19TVVJST0dBVEUoY2hhcmFjdGVyKSAoY2hhcmFjdGVy
ID49IDB4MTAwMDAgJiYgY2hhcmFjdGVyIDw9IDB4MTBGRkZGKQorCiBuYW1lc3BhY2UgV1RGIHsK
IG5hbWVzcGFjZSBVbmljb2RlIHsKIApAQCAtNDMsMTAwICs0OSw3MSBAQCBVQ2hhcjMyIGZvbGRD
YXNlKFVDaGFyMzIgY2gpCiAgICAgcmV0dXJuICp1Y3M0UmVzdWx0OwogfQogCi1pbnQgZm9sZENh
c2UoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50
IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCitzdGF0aWMgaW50IGdldFVURjE2TGVuZ3RoRnJvbVVU
RjgoY29uc3QgZ2NoYXIqIHV0ZjhTdHJpbmcsIGludCBsZW5ndGgpCiB7Ci0gICAgKmVycm9yID0g
ZmFsc2U7Ci0gICAgR093blB0cjxHRXJyb3I+IGdlcnJvcjsKKyAgICBpbnQgdXRmMTZMZW5ndGgg
PSAwOworICAgIGNvbnN0IGdjaGFyKiBpbnB1dFN0cmluZyA9IHV0ZjhTdHJpbmc7CiAKLSAgICBH
T3duUHRyPGNoYXI+IHV0ZjhzcmM7Ci0gICAgdXRmOHNyYy5zZXQoZ191dGYxNl90b191dGY4KHNy
Yywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9yLm91dFB0cigpKSk7Ci0gICAgaWYgKGdlcnJvcikg
ewotICAgICAgICAqZXJyb3IgPSB0cnVlOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0g
ICAgR093blB0cjxjaGFyPiB1dGY4cmVzdWx0OwotICAgIHV0ZjhyZXN1bHQuc2V0KGdfdXRmOF9j
YXNlZm9sZCh1dGY4c3JjLmdldCgpLCAtMSkpOworICAgIHdoaWxlICgodXRmOFN0cmluZyArIGxl
bmd0aCAtIGlucHV0U3RyaW5nID4gMCkgJiYgKmlucHV0U3RyaW5nKSB7CisgICAgICAgIGd1bmlj
aGFyIGNoYXJhY3RlciA9IGdfdXRmOF9nZXRfY2hhcihpbnB1dFN0cmluZyk7CiAKLSAgICBsb25n
IHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7Ci0gICAgR093blB0cjxVQ2hhcj4gdXRmMTZyZXN1bHQ7
Ci0gICAgdXRmMTZyZXN1bHQuc2V0KGdfdXRmOF90b191dGYxNih1dGY4cmVzdWx0LmdldCgpLCAt
MSwgMCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9yLm91dFB0cigpKSk7Ci0gICAgaWYgKGdl
cnJvcikgewotICAgICAgICAqZXJyb3IgPSB0cnVlOwotICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgIHV0ZjE2TGVuZ3RoICs9IFVURjhfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcikgPyAyIDogMTsK
KyAgICAgICAgaW5wdXRTdHJpbmcgPSBnX3V0ZjhfbmV4dF9jaGFyKGlucHV0U3RyaW5nKTsKICAg
ICB9CiAKLSAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKLSAgICAg
ICAgKmVycm9yID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOwotICAg
IH0KLSAgICBtZW1jcHkocmVzdWx0LCB1dGYxNnJlc3VsdC5nZXQoKSwgdXRmMTZyZXN1bHRMZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKLQotICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAg
ICByZXR1cm4gdXRmMTZMZW5ndGg7CiB9CiAKLWludCB0b0xvd2VyKFVDaGFyKiByZXN1bHQsIGlu
dCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVy
cm9yKQordHlwZWRlZiBnY2hhciogKCpVVEY4Q2FzZUZ1bmN0aW9uKShjb25zdCBnY2hhciosIGdz
c2l6ZSBsZW5ndGgpOworCitzdGF0aWMgaW50IGNvbnZlcnRDYXNlKFVDaGFyKiByZXN1bHQsIGlu
dCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVy
cm9yLCBVVEY4Q2FzZUZ1bmN0aW9uIGNhc2VGdW5jdGlvbikKIHsKICAgICAqZXJyb3IgPSBmYWxz
ZTsKLSAgICBHT3duUHRyPEdFcnJvcj4gZ2Vycm9yOwogCi0gICAgR093blB0cjxjaGFyPiB1dGY4
c3JjOwotICAgIHV0ZjhzcmMuc2V0KGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwg
MCwgJmdlcnJvci5vdXRQdHIoKSkpOwotICAgIGlmIChnZXJyb3IpIHsKKyAgICAvLyBBbGxvY2F0
ZSBhIGJ1ZmZlciBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBjaGFyYWN0ZXJzLgorICAgIFZl
Y3RvcjxjaGFyPiBidWZmZXIoc3JjTGVuZ3RoICogMyk7CisgICAgY2hhciogdXRmOFRhcmdldCA9
IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgVUNoYXIqIHV0ZjE2U291cmNlID0gc3JjOworICAg
IENvbnZlcnNpb25SZXN1bHQgY29udmVyc2lvblJlc3VsdCA9IGNvbnZlcnRVVEYxNlRvVVRGOCgm
dXRmMTZTb3VyY2UsIHV0ZjE2U291cmNlICsgc3JjTGVuZ3RoLCAmdXRmOFRhcmdldCwgdXRmOFRh
cmdldCArIGJ1ZmZlci5zaXplKCksIHRydWUpOworICAgIGlmIChjb252ZXJzaW9uUmVzdWx0ICE9
IGNvbnZlcnNpb25PSykgewogICAgICAgICAqZXJyb3IgPSB0cnVlOwogICAgICAgICByZXR1cm4g
LTE7CiAgICAgfQorICAgIGJ1ZmZlci5zaHJpbmsodXRmOFRhcmdldCAtIGJ1ZmZlci5kYXRhKCkp
OwogCi0gICAgR093blB0cjxjaGFyPiB1dGY4cmVzdWx0OwotICAgIHV0ZjhyZXN1bHQuc2V0KGdf
dXRmOF9zdHJkb3duKHV0ZjhzcmMuZ2V0KCksIC0xKSk7CisgICAgR093blB0cjxjaGFyPiB1dGY4
UmVzdWx0KGNhc2VGdW5jdGlvbihidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKSk7CisgICAg
bG9uZyB1dGY4UmVzdWx0TGVuZ3RoID0gc3RybGVuKHV0ZjhSZXN1bHQuZ2V0KCkpOwogCi0gICAg
bG9uZyB1dGYxNnJlc3VsdExlbmd0aCA9IC0xOwotICAgIEdPd25QdHI8VUNoYXI+IHV0ZjE2cmVz
dWx0OwotICAgIHV0ZjE2cmVzdWx0LnNldChnX3V0ZjhfdG9fdXRmMTYodXRmOHJlc3VsdC5nZXQo
KSwgLTEsIDAsICZ1dGYxNnJlc3VsdExlbmd0aCwgJmdlcnJvci5vdXRQdHIoKSkpOwotICAgIGlm
IChnZXJyb3IpIHsKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBzaXpl
LgorICAgIGludCByZWFsTGVuZ3RoID0gZ2V0VVRGMTZMZW5ndGhGcm9tVVRGOCh1dGY4UmVzdWx0
LmdldCgpLCB1dGY4UmVzdWx0TGVuZ3RoKTsKKyAgICBpZiAocmVhbExlbmd0aCA+IHJlc3VsdExl
bmd0aCkgewogICAgICAgICAqZXJyb3IgPSB0cnVlOwotICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgIHJldHVybiByZWFsTGVuZ3RoOwogICAgIH0KIAotICAgIGlmICh1dGYxNnJlc3VsdExlbmd0
aCA+IHJlc3VsdExlbmd0aCkgeworICAgIC8vIENvbnZlcnQgdGhlIHJlc3VsdCB0byBVVEYtMTYu
CisgICAgVUNoYXIqIHV0ZjE2VGFyZ2V0ID0gcmVzdWx0OworICAgIGNvbnN0IGNoYXIqIHV0ZjhT
b3VyY2UgPSB1dGY4UmVzdWx0LmdldCgpOworICAgIGNvbnZlcnNpb25SZXN1bHQgPSBjb252ZXJ0
VVRGOFRvVVRGMTYoJnV0ZjhTb3VyY2UsIHV0ZjhTb3VyY2UgKyB1dGY4UmVzdWx0TGVuZ3RoLCAm
dXRmMTZUYXJnZXQsIHV0ZjE2VGFyZ2V0ICsgcmVzdWx0TGVuZ3RoLCB0cnVlKTsKKyAgICBsb25n
IHV0ZjE2UmVzdWx0TGVuZ3RoID0gdXRmMTZUYXJnZXQgLSByZXN1bHQ7CisgICAgaWYgKGNvbnZl
cnNpb25SZXN1bHQgIT0gY29udmVyc2lvbk9LKQogICAgICAgICAqZXJyb3IgPSB0cnVlOwotICAg
ICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7Ci0gICAgfQotICAgIG1lbWNweShyZXN1bHQs
IHV0ZjE2cmVzdWx0LmdldCgpLCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwog
Ci0gICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgIHJldHVybiB1dGYxNlJlc3VsdExl
bmd0aCA8PSAwID8gLTEgOiB1dGYxNlJlc3VsdExlbmd0aDsKIH0KLQotaW50IHRvVXBwZXIoVUNo
YXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xl
bmd0aCwgYm9vbCogZXJyb3IpCitpbnQgZm9sZENhc2UoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3Vs
dExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCiB7
Ci0gICAgKmVycm9yID0gZmFsc2U7Ci0gICAgR093blB0cjxHRXJyb3I+IGdlcnJvcjsKLQotICAg
IEdPd25QdHI8Y2hhcj4gdXRmOHNyYzsKLSAgICB1dGY4c3JjLnNldChnX3V0ZjE2X3RvX3V0Zjgo
c3JjLCBzcmNMZW5ndGgsIDAsIDAsICZnZXJyb3Iub3V0UHRyKCkpKTsKLSAgICBpZiAoZ2Vycm9y
KSB7Ci0gICAgICAgICplcnJvciA9IHRydWU7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0K
LSAgICBHT3duUHRyPGNoYXI+IHV0ZjhyZXN1bHQ7Ci0gICAgdXRmOHJlc3VsdC5zZXQoZ191dGY4
X3N0cnVwKHV0ZjhzcmMuZ2V0KCksIC0xKSk7Ci0KLSAgICBsb25nIHV0ZjE2cmVzdWx0TGVuZ3Ro
ID0gLTE7Ci0gICAgR093blB0cjxVQ2hhcj4gdXRmMTZyZXN1bHQ7Ci0gICAgdXRmMTZyZXN1bHQu
c2V0KGdfdXRmOF90b191dGYxNih1dGY4cmVzdWx0LmdldCgpLCAtMSwgMCwgJnV0ZjE2cmVzdWx0
TGVuZ3RoLCAmZ2Vycm9yLm91dFB0cigpKSk7Ci0gICAgaWYgKGdlcnJvcikgewotICAgICAgICAq
ZXJyb3IgPSB0cnVlOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgIHJldHVybiBjb252
ZXJ0Q2FzZShyZXN1bHQsIHJlc3VsdExlbmd0aCwgc3JjLCBzcmNMZW5ndGgsIGVycm9yLCBnX3V0
ZjhfY2FzZWZvbGQpOworfQogCi0gICAgaWYgKHV0ZjE2cmVzdWx0TGVuZ3RoID4gcmVzdWx0TGVu
Z3RoKSB7Ci0gICAgICAgICplcnJvciA9IHRydWU7Ci0gICAgICAgIHJldHVybiB1dGYxNnJlc3Vs
dExlbmd0aDsKLSAgICB9Ci0gICAgbWVtY3B5KHJlc3VsdCwgdXRmMTZyZXN1bHQuZ2V0KCksIHV0
ZjE2cmVzdWx0TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CitpbnQgdG9Mb3dlcihVQ2hhciogcmVz
dWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBi
b29sKiBlcnJvcikKK3sKKyAgICByZXR1cm4gY29udmVydENhc2UocmVzdWx0LCByZXN1bHRMZW5n
dGgsIHNyYywgc3JjTGVuZ3RoLCBlcnJvciwgZ191dGY4X3N0cmRvd24pOworfQogCi0gICAgcmV0
dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworaW50IHRvVXBwZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJl
c3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3Ip
Cit7CisgICAgcmV0dXJuIGNvbnZlcnRDYXNlKHJlc3VsdCwgcmVzdWx0TGVuZ3RoLCBzcmMsIHNy
Y0xlbmd0aCwgZXJyb3IsIGdfdXRmOF9zdHJ1cCk7CiB9CiAKIERpcmVjdGlvbiBkaXJlY3Rpb24o
VUNoYXIzMiBjKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>