<?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>226621</bug_id>
          
          <creation_ts>2021-06-03 20:45:00 -0700</creation_ts>
          <short_desc>DFG should speculate on CompareStrictEq(@x, @x)</short_desc>
          <delta_ts>2021-06-04 14:22:13 -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>Other</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1766653</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-06-03 20:45:00 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766655</commentid>
    <comment_count>1</comment_count>
      <attachid>430535</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-06-03 20:48:03 -0700</bug_when>
    <thetext>Created attachment 430535
the patch

Not yet ready for review - still need to test it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766795</commentid>
    <comment_count>2</comment_count>
      <attachid>430535</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-04 09:21:37 -0700</bug_when>
    <thetext>Comment on attachment 430535
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766803</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-06-04 09:33:22 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/278465/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766804</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-04 09:34:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/78872738&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766814</commentid>
    <comment_count>5</comment_count>
      <attachid>430535</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-06-04 09:50:48 -0700</bug_when>
    <thetext>Comment on attachment 430535
the patch

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

LGTM too, one comment

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:11387
&gt; +    JITCompiler::Jump done = m_jit.branchIfInt32(regs);

nit: we always do this branch, even if we&apos;re proven not to be a double.

Maybe let&apos;s read AI state before doing this

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:18287
&gt; +        m_out.branch(isInt32(value, provenType(edge)), unsure(continuation), unsure(isNotInt32));

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766821</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-06-04 10:17:47 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #5)
&gt; Comment on attachment 430535 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430535&amp;action=review
&gt; 
&gt; LGTM too, one comment
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:11387
&gt; &gt; +    JITCompiler::Jump done = m_jit.branchIfInt32(regs);
&gt; 
&gt; nit: we always do this branch, even if we&apos;re proven not to be a double.

If we&apos;re proven not to be a double then this entire check would have been eliminated.

&gt; 
&gt; Maybe let&apos;s read AI state before doing this
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:18287
&gt; &gt; +        m_out.branch(isInt32(value, provenType(edge)), unsure(continuation), unsure(isNotInt32));
&gt; 
&gt; ditto

This actually reads AI state (that&apos;s the provenType(edge) thing).

I think I&apos;ll leave it as is for now.  We&apos;ve got bigger fish to fry in this area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766932</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-06-04 14:22:13 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #6)
&gt; (In reply to Saam Barati from comment #5)
&gt; &gt; Comment on attachment 430535 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=430535&amp;action=review
&gt; &gt; 
&gt; &gt; LGTM too, one comment
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:11387
&gt; &gt; &gt; +    JITCompiler::Jump done = m_jit.branchIfInt32(regs);
&gt; &gt; 
&gt; &gt; nit: we always do this branch, even if we&apos;re proven not to be a double.
&gt; 
&gt; If we&apos;re proven not to be a double then this entire check would have been
&gt; eliminated.
&gt; 
&gt; &gt; 
&gt; &gt; Maybe let&apos;s read AI state before doing this
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:18287
&gt; &gt; &gt; +        m_out.branch(isInt32(value, provenType(edge)), unsure(continuation), unsure(isNotInt32));
&gt; &gt; 
&gt; &gt; ditto
&gt; 
&gt; This actually reads AI state (that&apos;s the provenType(edge) thing).
&gt; 
&gt; I think I&apos;ll leave it as is for now.  We&apos;ve got bigger fish to fry in this
&gt; area.

We discussed over slack.

Phil landed this:
https://trac.webkit.org/changeset/278476/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430535</attachid>
            <date>2021-06-03 20:48:03 -0700</date>
            <delta_ts>2021-06-04 09:21:37 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>the.patch</filename>
            <type>text/plain</type>
            <size>11058</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzg0NDcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIxLTA2LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIHNob3VsZCBzcGVjdWxhdGUgb24gQ29tcGFyZVN0cmljdEVxKEB4
LCBAeCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NjYyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
bWljcm9iZW5jaG1hcmtzL3VudHlwZWQtc3RyaWN0ZXEtc2VsZi5qczogQWRkZWQuCisgICAgICAg
IChmb28pOgorICAgICAgICAqIHN0cmVzcy91bnR5cGVkLXN0cmljdGVxLXNlbGYtZmFpbC5qczog
QWRkZWQuCisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9vKToKKwogMjAyMS0wNi0wMyAgUm9z
cyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgW0pTQ10gSW1w
bGVtZW50IEpJVCBJQ3MgZm9yIEluQnlWYWwKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L3VudHlwZWQtc3RyaWN0ZXEtc2VsZi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy91bnR5cGVkLXN0cmljdGVxLXNlbGYuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvdW50eXBlZC1zdHJpY3RlcS1zZWxmLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTcgQEAKK2Z1bmN0aW9uIGZvbyh4KSB7CisgICAgdmFyIHk7CisgICAgaWYg
KHg9PT14KQorICAgICAgICB5ID0gNDI7CisgICAgZWxzZQorICAgICAgICB5ID0gYmFyKCk7Cisg
ICAgcmV0dXJuIHkgKyAxOworfQorCit2YXIgcmVzdWx0ID0gMDsKK3ZhciBhcnJheSA9IFsiZm9v
IiwgNDIsIHRydWUsIG51bGwsIHt9LCBbXSwgZm9vXTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDAwMDA7ICsraSkKKyAgICByZXN1bHQgKz0gZm9vKGFycmF5W2kgJSBhcnJheS5sZW5ndGhdKTsK
KworaWYgKHJlc3VsdCAhPSAoNDIgKyAxKSAqIDEwMDAwMDAwKQorICAgIHRocm93ICJFcnJvciI7
CisKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3VudHlwZWQtc3RyaWN0ZXEtc2VsZi1mYWlsLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3VudHlwZWQtc3RyaWN0ZXEtc2VsZi1mYWlsLmpz
CShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL3VudHlwZWQtc3RyaWN0ZXEtc2VsZi1m
YWlsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKK2Z1bmN0aW9uIGJhcigpIHsg
cmV0dXJuIDEwOyB9CisKK2Z1bmN0aW9uIGZvbyh4KSB7CisgICAgdmFyIHk7CisgICAgaWYgKHg9
PT14KQorICAgICAgICB5ID0gNDI7CisgICAgZWxzZQorICAgICAgICB5ID0gYmFyKCk7CisgICAg
cmV0dXJuIHkgKyAxOworfQorCitub0lubGluZShmb28pOworCit2YXIgcmVzdWx0ID0gMDsKK3Zh
ciBhcnJheSA9IFsiZm9vIiwgNDIsIHRydWUsIG51bGwsIHt9LCBbXSwgZm9vXTsKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKQorICAgIHJlc3VsdCArPSBmb28oYXJyYXlbaSAlIGFy
cmF5Lmxlbmd0aF0pOworCitpZiAocmVzdWx0ICE9ICg0MiArIDEpICogMTAwMDAwMCkKKyAgICB0
aHJvdyAiRXJyb3IiOworCit2YXIgcmVzdWx0QXRFbmQgPSBmb28oMC4wIC8gMC4wKTsKK2lmIChy
ZXN1bHRBdEVuZCAhPSAxMSkKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kIjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDIxLTA2LTAz
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgREZHIHNob3VsZCBz
cGVjdWxhdGUgb24gQ29tcGFyZVN0cmljdEVxKEB4LCBAeCkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjYyMQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZXMgYSBOb3REb3VibGU6IHNwZWN1
bGF0aW9uLiBXZSB1c2UgaXQgdG8gc3BlY3VsYXRlIG9uIENvbXBhcmVTdHJpY3RFcShAeCwgQHgp
LgorCisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaDoKKyAgICAgICAgKEpTQzo6
aXNOb3REb3VibGVTcGVjdWxhdGlvbik6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwQ29tcGFyZVN0cmljdEVxQW5k
U2FtZVZhbHVlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OnNob3VsZFNwZWN1bGF0ZU5vdERvdWJsZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3BlcmF0
b3IoKSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90RG91YmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHVXNlS2luZC5jcHA6CisgICAgICAgIChX
VEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmg6CisgICAgICAg
IChKU0M6OkRGRzo6dHlwZUZpbHRlckZvcik6CisgICAgICAgIChKU0M6OkRGRzo6Y2hlY2tNYXlD
cmFzaElmSW5wdXRJc0VtcHR5KToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6c3BlY3Vs
YXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6c3BlY3VsYXRlTm90
RG91YmxlKToKKwogMjAyMS0wNi0wMyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CiAKICAgICAgICAgW0pTQ10gSW1wbGVtZW50IEpJVCBJQ3MgZm9yIEluQnlWYWwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5o
CShyZXZpc2lvbiAyNzgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Bl
Y3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDM5LDYgKzQzOSwxMSBAQCBpbmxpbmUg
Ym9vbCBpc05vdEJvb2xlYW5TcGVjdWxhdGlvbihTcGVjCiAgICAgcmV0dXJuIHZhbHVlICYmICEo
dmFsdWUgJiBTcGVjQm9vbGVhbik7CiB9CiAKK2lubGluZSBib29sIGlzTm90RG91YmxlU3BlY3Vs
YXRpb24oU3BlY3VsYXRlZFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gISh0eXBlICYgU3BlY0Z1
bGxEb3VibGUpOworfQorCiBpbmxpbmUgYm9vbCBpc090aGVyU3BlY3VsYXRpb24oU3BlY3VsYXRl
ZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHZhbHVlID09IFNwZWNPdGhlcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjc4
Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDI3OCw2ICs0Mjc4LDE0IEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTYW1lVmFsdWUgfHwgbm9kZS0+b3AoKSA9PSBDb21wYXJl
U3RyaWN0RXEpOwogCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS5ub2RlKCkgPT0gbm9kZS0+
Y2hpbGQyKCkubm9kZSgpCisgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlTm90RG91YmxlKCkpIHsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVjaywgbm9k
ZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBO
b3REb3VibGVVc2UpKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9k
ZSwganNCb29sZWFuKHRydWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlQm9vbGVhbihub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKICAgICAgICAgICAgIGZpeEVkZ2U8Qm9vbGVh
blVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgZml4RWRnZTxCb29sZWFuVXNlPihu
b2RlLT5jaGlsZDIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMjc4Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3OTcsNiArMjc5NywxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gaXNOb3RDZWxsTm9yQmlnSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKICAg
ICB9CisKKyAgICBib29sIHNob3VsZFNwZWN1bGF0ZU5vdERvdWJsZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gaXNOb3REb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uKCkpOworICAgIH0KICAg
ICAKICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVVudHlwZWRGb3JBcml0aG1ldGljKCkKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAko
cmV2aXNpb24gMjc4Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIE1pc2NVc2U6CiAgICAgICAgIGNhc2UgQW55SW50VXNlOgogICAgICAgICBjYXNlIERv
dWJsZVJlcEFueUludFVzZToKKyAgICAgICAgY2FzZSBOb3REb3VibGVVc2U6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDI3ODI4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTM3Nyw2ICsxMTM3NywxOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVOb3RDZWxsTm9yCiAjZW5kaWYKIH0KIAordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90RG91YmxlKEVkZ2UgZWRnZSkKK3sKKyAgICBKU1Zh
bHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgSlNWYWx1ZVJlZ3MgcmVncyA9IG9w
ZXJhbmQuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Cisg
ICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaElmSW50MzIocmVn
cyk7CisgICAgREZHX1RZUEVfQ0hFQ0socmVncywgZWRnZSwgflNwZWNGdWxsRG91YmxlLCBtX2pp
dC5icmFuY2hJZk51bWJlcihyZWdzLCB0ZW1wR1BSKSk7CisgICAgZG9uZS5saW5rKCZtX2ppdCk7
Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU90aGVyKEVkZ2UgZWRnZSwgSlNW
YWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIpCiB7CiAgICAgREZHX1RZUEVfQ0hFQ0socmVn
cywgZWRnZSwgU3BlY090aGVyLCBtX2ppdC5icmFuY2hJZk5vdE90aGVyKHJlZ3MsIHRlbXBHUFIp
KTsKQEAgLTExNTU5LDYgKzExNTcxLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRl
KE5vZGUqLCBFZAogICAgIGNhc2UgTm90Q2VsbE5vckJpZ0ludFVzZToKICAgICAgICAgc3BlY3Vs
YXRlTm90Q2VsbE5vckJpZ0ludChlZGdlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb3RE
b3VibGVVc2U6CisgICAgICAgIHNwZWN1bGF0ZU5vdERvdWJsZShlZGdlKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgc3BlY3VsYXRlT3RoZXIoZWRnZSk7CiAg
ICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjc4Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcwLDYgKzE2NzAs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzcGVjdWxhdGVOb3RDZWxsKEVkZ2UsIEpTVmFsdWVSZWdz
KTsKICAgICB2b2lkIHNwZWN1bGF0ZU5vdENlbGwoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVO
b3RDZWxsTm9yQmlnSW50KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTm90RG91YmxlKEVkZ2Up
OwogICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoRWRnZSwgSlNWYWx1ZVJlZ3MsIEdQUlJlZyB0ZW1w
KTsKICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UsIEpTVmFsdWVSZWdzKTsKICAgICB2b2lk
IHNwZWN1bGF0ZU90aGVyKEVkZ2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1VzZUtpbmQuY3BwCShyZXZpc2lvbiAyNzgyODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDkgQEAgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVzZQogICAgIGNhc2UgTm90Q2VsbE5v
ckJpZ0ludFVzZToKICAgICAgICAgb3V0LnByaW50KCJOb3RDZWxsTm9yQmlnSW50Iik7CiAgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE5vdERvdWJsZVVzZToKKyAgICAgICAgb3V0LnByaW50KCJO
b3REb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS25vd25PdGhlclVzZToKICAg
ICAgICAgb3V0LnByaW50KCJLbm93bk90aGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAyNzgyODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODEsNiArODEsNyBAQCBlbnVtIFVzZUtpbmQgewogICAgIE5vdFN5bWJvbFVzZSwKICAgICBOb3RD
ZWxsVXNlLAogICAgIE5vdENlbGxOb3JCaWdJbnRVc2UsCisgICAgTm90RG91YmxlVXNlLAogICAg
IEtub3duT3RoZXJVc2UsCiAgICAgT3RoZXJVc2UsCiAgICAgTWlzY1VzZSwKQEAgLTE4Nyw2ICsx
ODgsOCBAQCBpbmxpbmUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAgICAg
IHJldHVybiB+U3BlY0NlbGxDaGVjazsKICAgICBjYXNlIE5vdENlbGxOb3JCaWdJbnRVc2U6CiAg
ICAgICAgIHJldHVybiB+U3BlY0NlbGxDaGVjayAmIH5TcGVjQmlnSW50OworICAgIGNhc2UgTm90
RG91YmxlVXNlOgorICAgICAgICByZXR1cm4gflNwZWNGdWxsRG91YmxlOwogICAgIGNhc2UgS25v
d25PdGhlclVzZToKICAgICBjYXNlIE90aGVyVXNlOgogICAgICAgICByZXR1cm4gU3BlY090aGVy
OwpAQCAtMzA1LDYgKzMwOCw3IEBAIGlubGluZSBib29sIGNoZWNrTWF5Q3Jhc2hJZklucHV0SXNF
bXB0eSgKICAgICBjYXNlIE1pc2NVc2U6CiAgICAgY2FzZSBOb3RDZWxsVXNlOgogICAgIGNhc2Ug
Tm90Q2VsbE5vckJpZ0ludFVzZToKKyAgICBjYXNlIE5vdERvdWJsZVVzZToKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
Mjc4Mjg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhbkNv
bXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAgICAgIGNhc2UgTm90U3ltYm9sVXNlOgog
ICAgICAgICAgICAgICAgIGNhc2UgQW55SW50VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgRG91
YmxlUmVwQW55SW50VXNlOgorICAgICAgICAgICAgICAgIGNhc2UgTm90RG91YmxlVXNlOgogICAg
ICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzgyODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4MjI5LDYgKzE4MjI5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBOb3RDZWxsTm9y
QmlnSW50VXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlTm90Q2VsbE5vckJpZ0ludChlZGdlKTsK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vdERvdWJsZVVzZToKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU5vdERvdWJsZShlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIE90aGVyVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlT3RoZXIoZWRnZSk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTE4MjczLDYgKzE4Mjc2LDIyIEBAIHByaXZhdGU6CiAgICAgICAg
IHNwZWN1bGF0ZU5vdENlbGwoZWRnZSk7CiAjZW5kaWYKICAgICB9CisKKyAgICB2b2lkIHNwZWN1
bGF0ZU5vdERvdWJsZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIAorICAg
ICAgICBMQmFzaWNCbG9jayBpc05vdEludDMyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBt
X291dC5icmFuY2goaXNJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjb250
aW51YXRpb24pLCB1bnN1cmUoaXNOb3RJbnQzMikpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RJbnQzMiwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgflNwZWNGdWxsRG91
YmxlLCBpc051bWJlcih2YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
fQogICAgIAogICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdlKQogICAgIHsK
</data>
<flag name="review"
          id="452067"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>