<?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>20982</bug_id>
          
          <creation_ts>2008-09-21 20:49:54 -0700</creation_ts>
          <short_desc>Speed up the apply method of functions by special-casing array and &apos;arguments&apos; objects</short_desc>
          <delta_ts>2008-09-22 14:21:28 -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>All</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>
          
          <blocked>20813</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92070</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-21 20:49:54 -0700</bug_when>
    <thetext>Currently, functionProtoFuncApply() accesses the arguments via numerical indices using the generic path for lookup. We should really fix this. Sam has a patch to do this, so I&apos;m assigning this to him.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92086</commentid>
    <comment_count>1</comment_count>
      <attachid>23643</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-21 23:18:06 -0700</bug_when>
    <thetext>Created attachment 23643
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92088</commentid>
    <comment_count>2</comment_count>
      <attachid>23643</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-21 23:34:38 -0700</bug_when>
    <thetext>Comment on attachment 23643
patch

Taking this out of the review queue.  I am afraid that this might break RegExpMatchesArray.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92089</commentid>
    <comment_count>3</comment_count>
      <attachid>23643</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-21 23:35:29 -0700</bug_when>
    <thetext>Comment on attachment 23643
patch

As we discussed on IRC, this code seems like it would break with the RegExpMatchesArray, since that array is lazily filled when a property is retrieved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92124</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-22 07:49:41 -0700</bug_when>
    <thetext>Should be straightforward to fix it for RegExpMatchesArray one of two ways:

    1) Make a call to fill out a RegExpMatchesArray before doing the rest.
    2) Do a check for JSArray with the exec-&gt;machine()-&gt;isJSArray() function that returns false for RegExpMatchesArray and keep a slow case for JSArray derived classes around for RegExpMatchesArray (and maybe WebCore/bridge bindings arrays?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92167</commentid>
    <comment_count>5</comment_count>
      <attachid>23643</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-22 11:36:22 -0700</bug_when>
    <thetext>Comment on attachment 23643
patch

Putting this back up for review since it doesn&apos;t break RegExpMatchesArray.  I have added new test cases for it however and will land them if this gets reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92168</commentid>
    <comment_count>6</comment_count>
      <attachid>23643</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-22 11:41:47 -0700</bug_when>
    <thetext>Comment on attachment 23643
patch

If speed really matters for Arguments, then we need to do various checks outside the loops rather than inside, so for example:

    - We need an entirely separate loop for the Arguments case where there are no deleted arguments.

    - The loop for the parameters should come first, then a separate loop to handle arguments.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92200</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-22 14:21:28 -0700</bug_when>
    <thetext>Landed in r36779.  There is still more work to be done to speed up Function.apply however.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23643</attachid>
            <date>2008-09-21 23:18:06 -0700</date>
            <delta_ts>2008-09-22 11:41:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>applyish.diff</filename>
            <type>text/plain</type>
            <size>10954</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2NzU4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDgtMDktMjEgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwOTgyCisgICAgICAgIFNwZWVkIHVwIHRoZSBhcHBseSBtZXRob2Qgb2YgZnVuY3Rp
b25zIGJ5IHNwZWNpYWwtY2FzaW5nIGFycmF5IGFuZCAnYXJndW1lbnRzJyBvYmplY3RzCisKKyAg
ICAgICAgVGVzdDogZmFzdC9qcy9mdW5jdGlvbi1hcHBseS5odG1sCisKKyAgICAgICAgKiBranMv
QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpmaWxsQXJnTGlzdCk6Cisg
ICAgICAgICoga2pzL0FyZ3VtZW50cy5oOgorICAgICAgICAqIGtqcy9GdW5jdGlvblByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkpOgorICAgICAgICAq
IGtqcy9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgor
ICAgICAgICAqIGtqcy9KU0FycmF5Lmg6CisKIDIwMDgtMDktMjEgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIC0gYmxpbmQgYXR0ZW1wdCB0byBmaXggbm9uLWFsbC1p
bi1vbmUgYnVpbGRzCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQXJndW1lbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMzY3
NTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTEsNiArOTEsMTkgQEAgdm9pZCBBcmd1bWVudHM6Om1hcmsoKSAKICAgICAgICAgZC0+YWN0
aXZhdGlvbi0+bWFyaygpOwogfQogCit2b2lkIEFyZ3VtZW50czo6ZmlsbEFyZ0xpc3QoRXhlY1N0
YXRlKiBleGVjLCBBcmdMaXN0JiBhcmdzKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkLT5udW1Bcmd1bWVudHM7ICsraSkgeworICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVu
dHMgfHwgIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pIHsKKyAgICAgICAgICAgIGlmIChpIDwgZC0+
bnVtUGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChkLT5hY3RpdmF0aW9u
LT51bmNoZWNrZWRTeW1ib2xUYWJsZUdldFZhbHVlKGQtPmZpcnN0QXJndW1lbnRJbmRleCArIGkp
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChkLT5leHRy
YUFyZ3VtZW50c1tpIC0gZC0+bnVtUGFyYW1ldGVyc10pOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAgfQorfQorCiBib29sIEFyZ3Vt
ZW50czo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIGlmIChpIDwgZC0+bnVtQXJndW1lbnRzICYmICghZC0+
ZGVsZXRlZEFyZ3VtZW50cyB8fCAhZC0+ZGVsZXRlZEFyZ3VtZW50c1tpXSkpIHsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvQXJndW1lbnRzLmgJKHJldmlzaW9uIDM2NzUzKQorKysgSmF2YVNjcmlwdENvcmUva2pz
L0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKKyAgICAgICAgdm9pZCBmaWxs
QXJnTGlzdChFeGVjU3RhdGUqLCBBcmdMaXN0Jik7CisKICAgICBwcml2YXRlOgogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9GdW5jdGlvblByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0Z1bmN0aW9uUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMzY3NTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRnVuY3Rpb25Qcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwxNCArOTUsMTMgQEAgSlNWYWx1ZSogZnVuY3Rp
b25Qcm90b0Z1bmNBcHBseShFeGVjU3RhdAogCiAgICAgQXJnTGlzdCBhcHBseUFyZ3M7CiAgICAg
aWYgKCFhcmdBcnJheS0+aXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICBpZiAoYXJnQXJy
YXktPmlzT2JqZWN0KCkgJiYKLSAgICAgICAgICAgIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KGFy
Z0FycmF5KS0+aW5oZXJpdHMoJkpTQXJyYXk6OmluZm8pIHx8Ci0gICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPihhcmdBcnJheSktPmluaGVyaXRzKCZBcmd1bWVudHM6OmluZm8pKSkg
ewotCi0gICAgICAgICAgICBKU09iamVjdCogYXJnQXJyYXlPYmogPSBzdGF0aWNfY2FzdDxKU09i
amVjdCo+KGFyZ0FycmF5KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBhcmdB
cnJheU9iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQz
MihleGVjKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspCi0gICAgICAgICAgICAgICAgYXBwbHlBcmdzLmFwcGVuZChhcmdBcnJheU9iai0+Z2V0
KGV4ZWMsIGkpKTsKKyAgICAgICAgaWYgKGFyZ0FycmF5LT5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihhcmdBcnJheSktPmluaGVyaXRzKCZKU0Fy
cmF5OjppbmZvKSkKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxKU0FycmF5Kj4oYXJnQXJy
YXkpLT5maWxsQXJnTGlzdChleGVjLCBhcHBseUFyZ3MpOworICAgICAgICAgICAgZWxzZSBpZiAo
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihhcmdBcnJheSktPmluaGVyaXRzKCZBcmd1bWVudHM6Omlu
Zm8pKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEFyZ3VtZW50cyo+KGFyZ0FycmF5KS0+
ZmlsbEFyZ0xpc3QoZXhlYywgYXBwbHlBcmdzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAg
fQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9KU0FycmF5LmNwcAkocmV2aXNpb24gMzY3NTMpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3NSw2ICs3NzUsMTYg
QEAgdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIGNoZWNrQ29u
c2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCit2b2lkIEpTQXJyYXk6OmZpbGxB
cmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgQXJnTGlzdCYgYXJncykKK3sKKyAgICB1bnNpZ25lZCBm
YXN0QWNjZXNzTGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIG1fZmFzdEFjY2Vzc0N1
dG9mZik7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZm9yICg7IGkgPCBmYXN0QWNjZXNzTGVu
Z3RoOyArK2kpCisgICAgICAgIGFyZ3MuYXBwZW5kKGdldEluZGV4KGkpKTsKKyAgICBmb3IgKDsg
aSA8IG1fc3RvcmFnZS0+bV9sZW5ndGg7ICsraSkKKyAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4
ZWMsIGkpKTsKK30KKwogdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoKQogewog
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0FycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTQXJyYXkuaAkocmV2aXNpb24g
MzY3NTMpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw2ICs3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV0gPSB2OwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBmaWxsQXJn
TGlzdChFeGVjU3RhdGUqLCBBcmdMaXN0Jik7CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKiwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxl
dGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMzY3NTgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOC0wOS0yMSAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk4
MgorCisgICAgICAgICogZmFzdC9qcy9mdW5jdGlvbi1hcHBseS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvanMvZnVuY3Rpb24tYXBwbHkuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9qcy9yZXNvdXJjZXMvZnVuY3Rpb24tYXBwbHkuanM6IEFkZGVkLgorCiAyMDA4LTA5
LTIxICBHYWJvciBMb2tpICA8bG9raUBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgUmV2aWV3
ZWQgYW5kIHR3ZWFrZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pz
L2Z1bmN0aW9uLWFwcGx5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2pzL2Z1bmN0aW9uLWFwcGx5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tYXBwbHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI1IEBACitUZXN0cyB0byBlbnN1cmUgdGhhdCBGdW5jdGlvbi5hcHBseSB3b3Jr
cyBjb3JyZWN0bHkgZm9yIEFycmF5cyBhbmQgYXJndW1lbnRzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBhcmd1bWVudHNBcHBseTEoMSwgMiwgMykgaXMgMQorUEFTUyBh
cmd1bWVudHNBcHBseTIoMSwgMiwgMykgaXMgMgorUEFTUyBhcmd1bWVudHNBcHBseTMoMSwgMiwg
MykgaXMgMworUEFTUyBhcmd1bWVudHNBcHBseUxlbmd0aCgxLCAyLCAzKSBpcyAzCitQQVNTIGFy
cmF5QXBwbHkxKFsxLCAyLCAzXSkgaXMgMQorUEFTUyBhcnJheUFwcGx5MihbMSwgMiwgM10pIGlz
IDIKK1BBU1MgYXJyYXlBcHBseTMoWzEsIDIsIDNdKSBpcyAzCitQQVNTIGFycmF5QXBwbHlMZW5n
dGgoWzEsIDIsIDNdKSBpcyAzCitQQVNTIGFyZ3VtZW50c0FwcGx5RGVsZXRlMSgxLCAyLCAzKSBp
cyAxCitQQVNTIGFyZ3VtZW50c0FwcGx5RGVsZXRlMigxLCAyLCAzKSBpcyB1bmRlZmluZWQKK1BB
U1MgYXJndW1lbnRzQXBwbHlEZWxldGUzKDEsIDIsIDMpIGlzIDMKK1BBU1MgYXJndW1lbnRzQXBw
bHlEZWxldGVMZW5ndGgoMSwgMiwgMykgaXMgMworUEFTUyBhcnJheUFwcGx5RGVsZXRlMShbMSwg
MiwgM10pIGlzIDEKK1BBU1MgYXJyYXlBcHBseURlbGV0ZTIoWzEsIDIsIDNdKSBpcyB1bmRlZmlu
ZWQKK1BBU1MgYXJyYXlBcHBseURlbGV0ZTMoWzEsIDIsIDNdKSBpcyAzCitQQVNTIGFycmF5QXBw
bHlEZWxldGVMZW5ndGgoWzEsIDIsIDNdKSBpcyAzCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5j
dGlvbi1hcHBseS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rp
b24tYXBwbHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rp
b24tYXBwbHkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9mdW5jdGlvbi1hcHBseS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9mdW5jdGlvbi1h
cHBseS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9mdW5j
dGlvbi1hcHBseS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3Vy
Y2VzL2Z1bmN0aW9uLWFwcGx5LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3NyBAQAorZGVz
Y3JpcHRpb24oJ1Rlc3RzIHRvIGVuc3VyZSB0aGF0IEZ1bmN0aW9uLmFwcGx5IHdvcmtzIGNvcnJl
Y3RseSBmb3IgQXJyYXlzIGFuZCBhcmd1bWVudHMuJyk7CisKK2Z1bmN0aW9uIGFyZ3VtZW50c0Fw
cGx5MShhLCBiLCBjKQoreworICAgIGZ1bmN0aW9uIHQoYSwgYiwgYykKKyAgICB7CisgICAgICAg
IHJldHVybiBhOworICAgIH0KKyAgICByZXR1cm4gdC5hcHBseShudWxsLCBhcmd1bWVudHMpOwor
fQorCitmdW5jdGlvbiBhcmd1bWVudHNBcHBseTIoYSwgYiwgYykKK3sKKyAgICBmdW5jdGlvbiB0
KGEsIGIsIGMpCisgICAgeworICAgICAgICByZXR1cm4gYjsKKyAgICB9CisgICAgcmV0dXJuIHQu
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKK30KKworZnVuY3Rpb24gYXJndW1lbnRzQXBwbHkzKGEs
IGIsIGMpCit7CisgICAgZnVuY3Rpb24gdChhLCBiLCBjKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGM7CisgICAgfQorICAgIHJldHVybiB0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cit9CisKK2Z1
bmN0aW9uIGFyZ3VtZW50c0FwcGx5TGVuZ3RoKGEsIGIsIGMpCit7CisgICAgZnVuY3Rpb24gdChh
LCBiLCBjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7CisgICAgfQor
ICAgIHJldHVybiB0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cit9CisKK3Nob3VsZEJlKCJhcmd1
bWVudHNBcHBseTEoMSwgMiwgMykiLCAiMSIpOworc2hvdWxkQmUoImFyZ3VtZW50c0FwcGx5Migx
LCAyLCAzKSIsICIyIik7CitzaG91bGRCZSgiYXJndW1lbnRzQXBwbHkzKDEsIDIsIDMpIiwgIjMi
KTsKK3Nob3VsZEJlKCJhcmd1bWVudHNBcHBseUxlbmd0aCgxLCAyLCAzKSIsICIzIik7CisKK2Z1
bmN0aW9uIGFycmF5QXBwbHkxKGFycmF5KQoreworICAgIGZ1bmN0aW9uIHQoYSwgYiwgYykKKyAg
ICB7CisgICAgICAgIHJldHVybiBhOworICAgIH0KKyAgICByZXR1cm4gdC5hcHBseShudWxsLCBh
cnJheSk7Cit9CisKK2Z1bmN0aW9uIGFycmF5QXBwbHkyKGFycmF5KQoreworICAgIGZ1bmN0aW9u
IHQoYSwgYiwgYykKKyAgICB7CisgICAgICAgIHJldHVybiBiOworICAgIH0KKyAgICByZXR1cm4g
dC5hcHBseShudWxsLCBhcnJheSk7Cit9CisKK2Z1bmN0aW9uIGFycmF5QXBwbHkzKGFycmF5KQor
eworICAgIGZ1bmN0aW9uIHQoYSwgYiwgYykKKyAgICB7CisgICAgICAgIHJldHVybiBjOworICAg
IH0KKyAgICByZXR1cm4gdC5hcHBseShudWxsLCBhcnJheSk7Cit9CisKK2Z1bmN0aW9uIGFycmF5
QXBwbHlMZW5ndGgoYXJyYXkpCit7CisgICAgZnVuY3Rpb24gdChhLCBiLCBjKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7CisgICAgfQorICAgIHJldHVybiB0LmFwcGx5
KG51bGwsIGFycmF5KTsKK30KKworc2hvdWxkQmUoImFycmF5QXBwbHkxKFsxLCAyLCAzXSkiLCAi
MSIpOworc2hvdWxkQmUoImFycmF5QXBwbHkyKFsxLCAyLCAzXSkiLCAiMiIpOworc2hvdWxkQmUo
ImFycmF5QXBwbHkzKFsxLCAyLCAzXSkiLCAiMyIpOworc2hvdWxkQmUoImFycmF5QXBwbHlMZW5n
dGgoWzEsIDIsIDNdKSIsICIzIik7CisKKworZnVuY3Rpb24gYXJndW1lbnRzQXBwbHlEZWxldGUx
KGEsIGIsIGMpCit7CisgICAgZnVuY3Rpb24gdChhLCBiLCBjKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGE7CisgICAgfQorICAgIGRlbGV0ZSBhcmd1bWVudHNbMV07CisgICAgcmV0dXJuIHQuYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKK30KKworZnVuY3Rpb24gYXJndW1lbnRzQXBwbHlEZWxldGUy
KGEsIGIsIGMpCit7CisgICAgZnVuY3Rpb24gdChhLCBiLCBjKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGI7CisgICAgfQorICAgIGRlbGV0ZSBhcmd1bWVudHNbMV07CisgICAgcmV0dXJuIHQuYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKK30KKworZnVuY3Rpb24gYXJndW1lbnRzQXBwbHlEZWxldGUz
KGEsIGIsIGMpCit7CisgICAgZnVuY3Rpb24gdChhLCBiLCBjKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGM7CisgICAgfQorICAgIGRlbGV0ZSBhcmd1bWVudHNbMV07CisgICAgcmV0dXJuIHQuYXBw
bHkobnVsbCwgYXJndW1lbnRzKTsKK30KKworZnVuY3Rpb24gYXJndW1lbnRzQXBwbHlEZWxldGVM
ZW5ndGgoYSwgYiwgYykKK3sKKyAgICBmdW5jdGlvbiB0KGEsIGIsIGMpCisgICAgeworICAgICAg
ICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKKyAgICB9CisgICAgZGVsZXRlIGFyZ3VtZW50c1sx
XTsKKyAgICByZXR1cm4gdC5hcHBseShudWxsLCBhcmd1bWVudHMpOworfQorCitzaG91bGRCZSgi
YXJndW1lbnRzQXBwbHlEZWxldGUxKDEsIDIsIDMpIiwgIjEiKTsKK3Nob3VsZEJlKCJhcmd1bWVu
dHNBcHBseURlbGV0ZTIoMSwgMiwgMykiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiYXJndW1l
bnRzQXBwbHlEZWxldGUzKDEsIDIsIDMpIiwgIjMiKTsKK3Nob3VsZEJlKCJhcmd1bWVudHNBcHBs
eURlbGV0ZUxlbmd0aCgxLCAyLCAzKSIsICIzIik7CisKKworZnVuY3Rpb24gYXJyYXlBcHBseURl
bGV0ZTEoYXJyYXkpCit7CisgICAgZnVuY3Rpb24gdChhLCBiLCBjKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGE7CisgICAgfQorICAgIGRlbGV0ZSBhcnJheVsxXTsKKyAgICByZXR1cm4gdC5hcHBs
eShudWxsLCBhcnJheSk7Cit9CisKK2Z1bmN0aW9uIGFycmF5QXBwbHlEZWxldGUyKGFycmF5KQor
eworICAgIGZ1bmN0aW9uIHQoYSwgYiwgYykKKyAgICB7CisgICAgICAgIHJldHVybiBiOworICAg
IH0KKyAgICBkZWxldGUgYXJyYXlbMV07CisgICAgcmV0dXJuIHQuYXBwbHkobnVsbCwgYXJyYXkp
OworfQorCitmdW5jdGlvbiBhcnJheUFwcGx5RGVsZXRlMyhhcnJheSkKK3sKKyAgICBmdW5jdGlv
biB0KGEsIGIsIGMpCisgICAgeworICAgICAgICByZXR1cm4gYzsKKyAgICB9CisgICAgZGVsZXRl
IGFycmF5WzFdOworICAgIHJldHVybiB0LmFwcGx5KG51bGwsIGFycmF5KTsKK30KKworZnVuY3Rp
b24gYXJyYXlBcHBseURlbGV0ZUxlbmd0aChhcnJheSkKK3sKKyAgICBmdW5jdGlvbiB0KGEsIGIs
IGMpCisgICAgeworICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKKyAgICB9CisgICAg
ZGVsZXRlIGFycmF5WzFdOworICAgIHJldHVybiB0LmFwcGx5KG51bGwsIGFycmF5KTsKK30KKwor
c2hvdWxkQmUoImFycmF5QXBwbHlEZWxldGUxKFsxLCAyLCAzXSkiLCAiMSIpOworc2hvdWxkQmUo
ImFycmF5QXBwbHlEZWxldGUyKFsxLCAyLCAzXSkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgi
YXJyYXlBcHBseURlbGV0ZTMoWzEsIDIsIDNdKSIsICIzIik7CitzaG91bGRCZSgiYXJyYXlBcHBs
eURlbGV0ZUxlbmd0aChbMSwgMiwgM10pIiwgIjMiKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cg==
</data>
<flag name="review"
          id="10599"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>