<?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>90246</bug_id>
          
          <creation_ts>2012-06-28 21:21:53 -0700</creation_ts>
          <short_desc>Change argument types of Element::getAttribute*() from String to AtomicString</short_desc>
          <delta_ts>2022-07-26 10:31:18 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</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>
          <dependson>90265</dependson>
    
    <dependson>90273</dependson>
    
    <dependson>90274</dependson>
    
    <dependson>90276</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>ahmad.saleem792</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>660120</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-28 21:21:53 -0700</bug_when>
    <thetext>This is a follow-up patch for r121439.

r121439 changed an argument type of Element::getAttribute() from String to AtomicString, which optimized performance of Dromaeo/dom-attr.html. We can also change other argument types of Element::getAttribute*() from String to AtomicString. See http://trac.webkit.org/changeset/121439 for more details about why it optimizes performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660122</commentid>
    <comment_count>1</comment_count>
      <attachid>150080</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-28 21:23:56 -0700</bug_when>
    <thetext>Created attachment 150080
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660165</commentid>
    <comment_count>2</comment_count>
      <attachid>150080</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-28 23:20:51 -0700</bug_when>
    <thetext>Comment on attachment 150080
Patch

Clearing flags on attachment: 150080

Committed r121520: &lt;http://trac.webkit.org/changeset/121520&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660166</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-28 23:20:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660187</commentid>
    <comment_count>4</comment_count>
      <attachid>150080</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-06-28 23:58:01 -0700</bug_when>
    <thetext>Comment on attachment 150080
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        of Element::getAttribute*() from String to AtomicString. See the ChangeLog in
&gt; +        http://trac.webkit.org/changeset/121439 for more details about why this change
&gt; +        optimizes performance.

Is there a measurable performance improvement on a test that reflects real life DOM use? If not, why is it OK to make this change (yes, I read the other bug&apos;s ChangeLog, but an explanation cannot trump actual measurement)?

Thrashing AtomicString table has been known to cause practical performance issues in the past.

Also, with a global replacement like this, how can you know which individual changes are progressions, and which are regressions?

&gt; Source/WebCore/dom/DatasetDOMStringMap.cpp:113
&gt; -static String convertPropertyNameToAttributeName(const String&amp; name)
&gt; +static const String convertPropertyNameToAttributeName(const String&amp; name)

This makes no sense. Was this patch carefully reviewed, or rubber-stamped?

If you wrote per-function ChangeLog comments as always recommended, you would have noticed this apparently accidental change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660258</commentid>
    <comment_count>5</comment_count>
      <attachid>150080</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-29 01:05:53 -0700</bug_when>
    <thetext>Comment on attachment 150080
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt; +        optimizes performance.
&gt; 
&gt; Is there a measurable performance improvement on a test that reflects real life DOM use? If not, why is it OK to make this change (yes, I read the other bug&apos;s ChangeLog, but an explanation cannot trump actual measurement)?
&gt; 
&gt; Thrashing AtomicString table has been known to cause practical performance issues in the past.
&gt; 
&gt; Also, with a global replacement like this, how can you know which individual changes are progressions, and which are regressions?

Let me investigate the performance. Though I would guess that it would be difficult to find a test case that can cause a regression caused by the thrashing.

&gt;&gt; Source/WebCore/dom/DatasetDOMStringMap.cpp:113
&gt;&gt; +static const String convertPropertyNameToAttributeName(const String&amp; name)
&gt; 
&gt; This makes no sense. Was this patch carefully reviewed, or rubber-stamped?
&gt; 
&gt; If you wrote per-function ChangeLog comments as always recommended, you would have noticed this apparently accidental change.

This is needed. Without this, convertPropertyNameToAttributeName() in DatasetDOMStringMap.cpp leads to compile error, since Element::removeAttribute() expects &apos;const AtomicString&amp;&apos; after this patch. (I should have explained it in the ChangeLog.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660319</commentid>
    <comment_count>6</comment_count>
      <attachid>150080</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-29 02:37:51 -0700</bug_when>
    <thetext>Comment on attachment 150080
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt;&gt; +        optimizes performance.
&gt;&gt; 
&gt;&gt; Is there a measurable performance improvement on a test that reflects real life DOM use? If not, why is it OK to make this change (yes, I read the other bug&apos;s ChangeLog, but an explanation cannot trump actual measurement)?
&gt;&gt; 
&gt;&gt; Thrashing AtomicString table has been known to cause practical performance issues in the past.
&gt;&gt; 
&gt;&gt; Also, with a global replacement like this, how can you know which individual changes are progressions, and which are regressions?
&gt; 
&gt; Let me investigate the performance. Though I would guess that it would be difficult to find a test case that can cause a regression caused by the thrashing.

ap: You&apos;re right. The optimization I landed was not sufficient. The patch missed replacing s/Strong/AtomicString/ in Element::removeAttribute() and Element::hasAttribute(), without which I found we cannot get a perf win. With the replacement, there is a big perf win. I&apos;ll revert the original patch and will upload patches for each optimization with a performance test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660323</commentid>
    <comment_count>7</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-29 02:44:27 -0700</bug_when>
    <thetext>Reverted r121520 for reason:

the performance optimization needs more investigation

Committed r121539: &lt;http://trac.webkit.org/changeset/121539&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660487</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-06-29 07:59:26 -0700</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/dom/DatasetDOMStringMap.cpp:113
&gt; &gt;&gt; +static const String convertPropertyNameToAttributeName(const String&amp; name)
&gt;&gt;
&gt; This is needed. Without this, convertPropertyNameToAttributeName() in DatasetDOMStringMap.cpp leads to compile error, since Element::removeAttribute() expects &apos;const AtomicString&amp;&apos; after this patch. (I should have explained it in the ChangeLog.)

I still don&apos;t understand why this is needed. Perhaps the bug causing a compilation failure is elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660491</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-06-29 08:03:02 -0700</bug_when>
    <thetext>Thank you for splitting the patch into parts, and adding micro-benchmarks. This is an improvement, although it doesn&apos;t fully alleviate my concerns about this potentially negatively impacting overall performance on real life workloads. I&apos;m not quite sure how to prove that this is an improvement, perhaps others who work on performance aspects more closely will have a better feeling of what to expect from such a  change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660550</commentid>
    <comment_count>10</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-29 09:21:19 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; &gt;&gt; Source/WebCore/dom/DatasetDOMStringMap.cpp:113
&gt; &gt; &gt;&gt; +static const String convertPropertyNameToAttributeName(const String&amp; name)
&gt; &gt;&gt;
&gt; &gt; This is needed. Without this, convertPropertyNameToAttributeName() in DatasetDOMStringMap.cpp leads to compile error, since Element::removeAttribute() expects &apos;const AtomicString&amp;&apos; after this patch. (I should have explained it in the ChangeLog.)
&gt; 
&gt; I still don&apos;t understand why this is needed. Perhaps the bug causing a compilation failure is elsewhere.

Sorry, you&apos;re right... It was not needed. I removed it from the latest patch in bug 90265.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660562</commentid>
    <comment_count>11</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-29 09:30:13 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; This is an improvement, although it doesn&apos;t fully alleviate my concerns about this potentially negatively impacting overall performance on real life workloads.

FWIW, performance improvement is larger in V8 than JSC. In particular, for xxxxNS() methods, no improvement/regression in JSC but a big improvement in V8. Please look at my comment in bug 90276 for more details.

Also I would like to note that if you are concerning about the number of AtomicStrings generated, the patch we should concern is not these patches but the patch of bug 90174 (already landed). The patch of bug 90174 increased the number of AtomicStrings. On the other hand, these patches (i.e. bug 90265, bug 90273, bug 90274, bug 90276) are just changing the timing when a String is converted to an AtomicString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660577</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-29 09:52:31 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Thank you for splitting the patch into parts, and adding micro-benchmarks. This is an improvement, although it doesn&apos;t fully alleviate my concerns about this potentially negatively impacting overall performance on real life workloads.

My expectation is that most websites don&apos;t call getAttribute, hasAttribute, removeAttribute, etc... with arbitrary strings. Given that the number of AtomicString is still bound by the number of distinct content attribute names, I don&apos;t think it&apos;ll negatively affect the performance.

&gt; I&apos;m not quite sure how to prove that this is an improvement, perhaps others who work on performance aspects more closely will have a better feeling of what to expect from such a  change.

Given that some benchmark has shown an improvement, I&apos;d like to see some concrete and realistic evidence to suggest that these changes may indeed case perf. regressions if we&apos;re to re-consider these changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666441</commentid>
    <comment_count>13</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-11 00:24:27 -0700</bug_when>
    <thetext>reviewers: ping? (bug 90265, bug 90273, bug 90274, bug 90276)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680404</commentid>
    <comment_count>14</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-27 03:43:55 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; reviewers: ping? (bug 90265, bug 90273, bug 90274, bug 90276)

ap: Now those patches are r+ed and I&apos;d like to land them. I think the patches are beneficial in the following points:

- They improve performance of V8 as described in each ChangeLog.

- They do not change performance of JSC for now, but will improve the performance once bug 92486 is fixed.

- I couldn&apos;t observe perf regression caused by the increased number of AtomicStrings.

Do you have opinions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1886813</commentid>
    <comment_count>15</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-07-26 10:22:35 -0700</bug_when>
    <thetext>All dependent bugs are landed and I think Comment 03 mention this landing but then it got backed out here:

https://github.com/WebKit/WebKit/commit/4d9a2888319ed8f6e9a349aab7808fc05497517e

I think these changes in one way or another have landed:

https://github.com/WebKit/WebKit/blob/99cdf40835792e421d8e35798c2fed5d8dda4860/Source/WebCore/dom/Element.cpp

https://github.com/WebKit/WebKit/blob/99cdf40835792e421d8e35798c2fed5d8dda4860/Source/WebCore/dom/Element.h

Because I can see few having AtomicString..

Even ElementDataAttribute is changed to different name:

https://github.com/WebKit/WebKit/commit/ffb27b6e3103e265a99e7d9245b7150bf2f07437

&gt; rniwa@webkit.org - is it something RESOLVED LATER or RESOLVED CONFIGURATION CHANGED? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1886815</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-07-26 10:30:08 -0700</bug_when>
    <thetext>We&apos;ve done this already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1886816</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-07-26 10:31:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/97613764&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150080</attachid>
            <date>2012-06-28 21:23:56 -0700</date>
            <delta_ts>2012-06-29 02:37:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90246-20120629132355.patch</filename>
            <type>text/plain</type>
            <size>9230</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ0YzE3ZjhjZWE5ZmY4
YTYxMjdkNmE2MGI5OWMzMWQ3MjU0NzFhMi4uMTIwZmFkMGU4YjZjOTVjNGI1N2Y2YTc0YmM0YzFk
MjZkYzUwMDg4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM4IEBACiAyMDEyLTA2LTI4ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAorICAgICAgICBDaGFuZ2UgYXJndW1l
bnQgdHlwZXMgb2YgRWxlbWVudDo6Z2V0QXR0cmlidXRlKigpIGZyb20gU3RyaW5nIHRvIEF0b21p
Y1N0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTAyNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIGlzIGEgZm9sbG93LXVwIHBhdGNoIGZvciByMTIxNDM5LiByMTIxNDM5IGNoYW5nZWQgYW4g
YXJndW1lbnQgdHlwZSBvZgorICAgICAgICBFbGVtZW50OjpnZXRBdHRyaWJ1dGUoKSBmcm9tIFN0
cmluZyB0byBBdG9taWNTdHJpbmcsIHdoaWNoIG9wdGltaXplZAorICAgICAgICBwZXJmb3JtYW5j
ZSBvZiBEcm9tYWVvL2RvbS1hdHRyLmh0bWwuIFRoaXMgcGF0Y2ggY2hhbmdlcyBvdGhlciBhcmd1
bWVudCB0eXBlcworICAgICAgICBvZiBFbGVtZW50OjpnZXRBdHRyaWJ1dGUqKCkgZnJvbSBTdHJp
bmcgdG8gQXRvbWljU3RyaW5nLiBTZWUgdGhlIENoYW5nZUxvZyBpbgorICAgICAgICBodHRwOi8v
dHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMjE0MzkgZm9yIG1vcmUgZGV0YWlscyBhYm91dCB3
aHkgdGhpcyBjaGFuZ2UKKyAgICAgICAgb3B0aW1pemVzIHBlcmZvcm1hbmNlLgorCisgICAgICAg
IE5vIHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBkb20vRGF0YXNl
dERPTVN0cmluZ01hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0UHJvcGVydHlOYW1l
VG9BdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGVOUyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3Zl
QXR0cmlidXRlTlMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2RlTlMpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAg
ICAgICAoRWxlbWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVOb2Rl
KToKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaDoKKyAgICAgICAgKEVsZW1l
bnRBdHRyaWJ1dGVEYXRhKToKKworMjAxMi0wNi0yOCAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBj
aHJvbWl1bS5vcmc+CisKICAgICAgICAgW1Y4XSBSZXBsYWNlIHY4OjpJbnRlZ2VyOjpOZXcoKSB3
aXRoIHY4SW50ZWdlcigpIGluIGN1c3RvbSBiaW5kaW5ncwogICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAyNDIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rh
dGFzZXRET01TdHJpbmdNYXAuY3BwCmluZGV4IDM4MjAyMmVjZGMzYTBjNDg0YzEyYzk5NTI0MTM0
NjlmOGE1ZWE5MGUuLjczZWFiMDk1MGEzYWQyMjM1NTI4OTQ5MzViNjNiNDNkMDVhZTdiZjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAKQEAgLTExMCw3ICsx
MTAsNyBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkUHJvcGVydHlOYW1lKGNvbnN0IFN0cmluZyYgbmFt
ZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFN0cmluZyBjb252ZXJ0UHJvcGVydHlO
YW1lVG9BdHRyaWJ1dGVOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3N0YXRpYyBjb25zdCBTdHJp
bmcgY29udmVydFByb3BlcnR5TmFtZVRvQXR0cmlidXRlTmFtZShjb25zdCBTdHJpbmcmIG5hbWUp
CiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIGJ1aWxkZXIuYXBwZW5kKCJkYXRh
LSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGViYzBjOWI1M2QzNWJiYzBkZmQ1ODk1ZTUy
MWQwMDkyYWMyYTM5ZjkuLjA2ZTg0OTBhODdkMjY0ZjVkNTlhZTQ0M2E5YTg5YjExOTM0OWVhZmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTYzMCw3ICs2MzAsNyBAQCBjb25zdCBBdG9taWNT
dHJpbmcmIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNv
bnN0CiAgICAgcmV0dXJuIG51bGxBdG9tOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEVsZW1l
bnQ6OmdldEF0dHJpYnV0ZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJp
bmcmIGxvY2FsTmFtZSkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0
cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKIH0KQEAgLTE0NTks
NyArMTQ1OSw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKHNpemVfdCBpbmRleCkK
ICAgICBhdHRyaWJ1dGVEYXRhKCktPnJlbW92ZUF0dHJpYnV0ZShpbmRleCwgdGhpcyk7CiB9CiAK
LXZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQg
RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAg
ICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IHRoaXMtPmF0dHJpYnV0ZURh
dGEoKTsKICAgICBpZiAoIWF0dHJpYnV0ZURhdGEpCkBAIC0xNDczLDEyICsxNDczLDEyIEBAIHZv
aWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBhdHRy
aWJ1dGVEYXRhLT5yZW1vdmVBdHRyaWJ1dGUoaW5kZXgsIHRoaXMpOwogfQogCi12b2lkIEVsZW1l
bnQ6OnJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBT
dHJpbmcmIGxvY2FsTmFtZSkKK3ZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTlMoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
KQogewogICAgIHJlbW92ZUF0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5h
bWUsIG5hbWVzcGFjZVVSSSkpOwogfQogCi1QYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmdldEF0
dHJpYnV0ZU5vZGUoY29uc3QgU3RyaW5nJiBuYW1lKQorUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50
OjpnZXRBdHRyaWJ1dGVOb2RlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBFbGVt
ZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7
CiAgICAgaWYgKCFhdHRyaWJ1dGVEYXRhKQpAQCAtMTQ4Niw3ICsxNDg2LDcgQEAgUGFzc1JlZlB0
cjxBdHRyPiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2RlKGNvbnN0IFN0cmluZyYgbmFtZSkKICAg
ICByZXR1cm4gYXR0cmlidXRlRGF0YS0+Z2V0QXR0cmlidXRlTm9kZShuYW1lLCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKHRoaXMpLCB0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxBdHRyPiBFbGVt
ZW50OjpnZXRBdHRyaWJ1dGVOb2RlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IFN0cmluZyYgbG9jYWxOYW1lKQorUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpnZXRBdHRyaWJ1
dGVOb2RlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lKQogewogICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVE
YXRhID0gdXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICBpZiAoIWF0dHJpYnV0ZURhdGEpCkBA
IC0xNDk0LDcgKzE0OTQsNyBAQCBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0
ZU5vZGVOUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgUwogICAgIHJldHVybiBh
dHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVOb2RlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxv
Y2FsTmFtZSwgbmFtZXNwYWNlVVJJKSwgdGhpcyk7CiB9CiAKLWJvb2wgRWxlbWVudDo6aGFzQXR0
cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK2Jvb2wgRWxlbWVudDo6aGFzQXR0cmli
dXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICBFbGVtZW50QXR0cmli
dXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7CiAgICAgaWYg
KCFhdHRyaWJ1dGVEYXRhKQpAQCAtMTUwNiw3ICsxNTA2LDcgQEAgYm9vbCBFbGVtZW50OjpoYXNB
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogICAgIHJldHVybiBhdHRyaWJ1dGVE
YXRhLT5nZXRBdHRyaWJ1dGVJdGVtKGxvY2FsTmFtZSwgZmFsc2UpOwogfQogCi1ib29sIEVsZW1l
bnQ6Omhhc0F0dHJpYnV0ZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJp
bmcmIGxvY2FsTmFtZSkgY29uc3QKK2Jvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlTlMoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
KSBjb25zdAogewogICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gdXBk
YXRlZEF0dHJpYnV0ZURhdGEoKTsKICAgICBpZiAoIWF0dHJpYnV0ZURhdGEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAppbmRleCBlNGY3MGNmYWI4YmFmZDhiNTM4YjVjZWZlMjJmOTg5YmIyM2U1OWEzLi43ZjRi
ZmQyODMwOTQ0MWQwOWVmZDA2NjhkNjQzYWUxNzA1MGQxMzlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgK
QEAgLTEzOSwxMSArMTM5LDExIEBAIHB1YmxpYzoKICAgICAvLyBpbiBzdHlsZSBhdHRyaWJ1dGUg
b3Igb25lIG9mIHRoZSBTVkcgYW5pbWF0aW9uIGF0dHJpYnV0ZXMuCiAgICAgYm9vbCBoYXNBdHRy
aWJ1dGVzV2l0aG91dFVwZGF0ZSgpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNBdHRyaWJ1dGUoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBib29sIGhhc0F0dHJpYnV0ZU5TKGNvbnN0IFN0
cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3Q7CisgICAg
Ym9vbCBoYXNBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBi
b29sIGhhc0F0dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3Q7CiAKICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGdldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZ2V0QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdDsKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGdldEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3Q7CiAKICAgICB2b2lkIHNldEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxpZmllZE5hbWUsIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmLCBGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24gPSBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwpAQCAtMTk3LDEzICsxOTcsMTMgQEAg
cHVibGljOgogICAgIC8vIFJldHVybnMgdGhlIGFic29sdXRlIGJvdW5kaW5nIGJveCB0cmFuc2xh
dGVkIGludG8gc2NyZWVuIGNvb3JkaW5hdGVzOgogICAgIEludFJlY3Qgc2NyZWVuUmVjdCgpIGNv
bnN0OwogCi0gICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAg
ICB2b2lkIHJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBTdHJpbmcmIGxvY2FsTmFtZSk7CisgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CiAK
ICAgICBQYXNzUmVmUHRyPEF0dHI+IGRldGFjaEF0dHJpYnV0ZShzaXplX3QgaW5kZXgpOwogCi0g
ICAgUGFzc1JlZlB0cjxBdHRyPiBnZXRBdHRyaWJ1dGVOb2RlKGNvbnN0IFN0cmluZyYgbmFtZSk7
Ci0gICAgUGFzc1JlZlB0cjxBdHRyPiBnZXRBdHRyaWJ1dGVOb2RlTlMoY29uc3QgU3RyaW5nJiBu
YW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKTsKKyAgICBQYXNzUmVmUHRyPEF0
dHI+IGdldEF0dHJpYnV0ZU5vZGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKKyAgICBQYXNz
UmVmUHRyPEF0dHI+IGdldEF0dHJpYnV0ZU5vZGVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOwogICAgIFBhc3NSZWZQdHI8
QXR0cj4gc2V0QXR0cmlidXRlTm9kZShBdHRyKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NS
ZWZQdHI8QXR0cj4gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHIqLCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgUGFzc1JlZlB0cjxBdHRyPiByZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHIqLCBFeGNlcHRpb25D
b2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURh
dGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAppbmRl
eCBhYjI3NjhlNjY1ZjgyOGM5M2U1NTE3YmQ3MWZiZGMxMDdlYjA2ZTU4Li4zM2JmMTViNTBlM2Uz
ZmNkOTZiNmQ3MWY0YTRhYjk1ZDIwNDNlYTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50QXR0cmlidXRlRGF0YS5jcHAKQEAgLTI5OSw3ICsyOTksNyBAQCB2b2lkIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjpyZXBsYWNlQXR0cmlidXRlKHNpemVfdCBpbmRleCwgY29uc3QgQXR0cmlidXRl
JiBhdHRyaQogICAgIGVsZW1lbnQtPmRpZE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQog
Ci1QYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVOb2Rl
KGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlLCBFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAorUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50QXR0cmlidXRlRGF0
YTo6Z2V0QXR0cmlidXRlTm9kZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBBU1NF
UlQoZWxlbWVudCk7CiAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBnZXRBdHRyaWJ1dGVJdGVt
KG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudEF0dHJpYnV0ZURhdGEuaAppbmRleCBhMTNkNGQyNThlYmZlZTZmZDk0N2NmNDM3MmY4ODBh
ZWJmYzhkNGM4Li5jNmVjZjFkM2U2NzkyOTlmYTUxNjFkZWViOTE0MzM4YTk1MzIzZDQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaApAQCAtNzUsNyArNzUsNyBA
QCBwdWJsaWM6CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
cy5zaXplKCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZXMuaXNFbXB0eSgpOyB9CiAKLSAgICBQYXNzUmVmUHRyPEF0dHI+IGdldEF0dHJpYnV0ZU5vZGUo
Y29uc3QgU3RyaW5nJiwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlLCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxBdHRyPiBnZXRBdHRyaWJ1dGVOb2RlKGNvbnN0IEF0b21p
Y1N0cmluZyYsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSwgRWxlbWVudCopIGNvbnN0
OwogICAgIFBhc3NSZWZQdHI8QXR0cj4gZ2V0QXR0cmlidXRlTm9kZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgLy8gSW50ZXJuYWwgaW50ZXJmYWNlLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>