<?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>206605</bug_id>
          
          <creation_ts>2020-01-22 11:43:11 -0800</creation_ts>
          <short_desc>Prevent infinite recursion when upgrading custom elements</short_desc>
          <delta_ts>2021-02-09 21:51:25 -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>DOM</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=221652</see_also>
          <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>
          
          <blocked>154907</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Domenic Denicola">d</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1609657</commentid>
    <comment_count>0</comment_count>
    <who name="Domenic Denicola">d</who>
    <bug_when>2020-01-22 11:43:11 -0800</bug_when>
    <thetext>We recently discovered a bug where certain strange patterns of author code could cause infinite recursion in the spec algorithms and in all browsers. Blink has fixed this and Gecko has a bug on file, so here&apos;s one for WebKit.

Spec fix: https://github.com/whatwg/html/pull/5126

Tests: https://github.com/web-platform-tests/wpt/pull/20465

Live tests: https://wpt.fyi/results/custom-elements/upgrading.html?label=master&amp;label=experimental&amp;aligned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683303</commentid>
    <comment_count>1</comment_count>
      <attachid>407380</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-26 23:51:08 -0700</bug_when>
    <thetext>Created attachment 407380
Implements the new behavior</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683415</commentid>
    <comment_count>2</comment_count>
      <attachid>407380</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-08-27 09:59:49 -0700</bug_when>
    <thetext>Comment on attachment 407380
Implements the new behavior

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

&gt; Source/WebCore/bindings/js/JSCustomElementInterface.cpp:203
&gt; +    // Unlike spec, set element&apos;s custom element state to &quot;failed&quot; after enqueueing post-upgrade reactions
&gt; +    // to avoid hitting debug assertions in enqueuePostUpgradeReactions.
&gt; +    element.setIsFailedCustomElementWithoutClearingReactionQueue();

Isn&apos;t this confusing? Wouldn&apos;t it be better to change the asserts?

&gt; Source/WebCore/dom/Element.cpp:2468
&gt; +#if ASSERT_ENABLED
&gt; +    if (isFailedCustomElement()) {
&gt; +        auto* queue = elementRareData()-&gt;customElementReactionQueue();
&gt; +        ASSERT(queue);
&gt; +        ASSERT(queue-&gt;isEmpty() || queue-&gt;hasJustUpgradeReaction());
&gt; +    } else
&gt; +        ASSERT(isDefinedCustomElement() || isCustomElementUpgradeCandidate());
&gt; +#endif

Alternatively you could factor the validity tests into a boolean returning function and ASSERT that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683561</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-27 19:53:18 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to Antti Koivisto from comment #2)
&gt; Comment on attachment 407380 [details]
&gt; Implements the new behavior
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407380&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSCustomElementInterface.cpp:203
&gt; &gt; +    // Unlike spec, set element&apos;s custom element state to &quot;failed&quot; after enqueueing post-upgrade reactions
&gt; &gt; +    // to avoid hitting debug assertions in enqueuePostUpgradeReactions.
&gt; &gt; +    element.setIsFailedCustomElementWithoutClearingReactionQueue();
&gt; 
&gt; Isn&apos;t this confusing? Wouldn&apos;t it be better to change the asserts?

I don&apos;t think so. enqueuePostUpgradeReactions asserts that the element is isCustomElementUpgradeCandidate. It would be weird to assert that it&apos;s a &quot;failed&quot; custom element since that could occur when the custom element had actually failed to upgrade.

&gt; &gt; Source/WebCore/dom/Element.cpp:2468
&gt; &gt; +#if ASSERT_ENABLED
&gt; &gt; +    if (isFailedCustomElement()) {
&gt; &gt; +        auto* queue = elementRareData()-&gt;customElementReactionQueue();
&gt; &gt; +        ASSERT(queue);
&gt; &gt; +        ASSERT(queue-&gt;isEmpty() || queue-&gt;hasJustUpgradeReaction());
&gt; &gt; +    } else
&gt; &gt; +        ASSERT(isDefinedCustomElement() || isCustomElementUpgradeCandidate());
&gt; &gt; +#endif
&gt; 
&gt; Alternatively you could factor the validity tests into a boolean returning
&gt; function and ASSERT that.

Hm... that would make it less obvious which condition had failed when one of these debug assertions hit so I&apos;d keep it as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683562</commentid>
    <comment_count>4</comment_count>
      <attachid>407380</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-27 19:55:22 -0700</bug_when>
    <thetext>Comment on attachment 407380
Implements the new behavior

Clearing flags on attachment: 407380

Committed r266269: &lt;https://trac.webkit.org/changeset/266269&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683563</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-27 19:55:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683564</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-27 19:56:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/67914221&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407380</attachid>
            <date>2020-08-26 23:51:08 -0700</date>
            <delta_ts>2020-08-27 19:55:22 -0700</delta_ts>
            <desc>Implements the new behavior</desc>
            <filename>bug-206605-20200826235107.patch</filename>
            <type>text/plain</type>
            <size>19452</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTMzNTlmNTA5ODhmZTE1
MGNiYzhiMTg1YTA0YmUwZTc0ZjBhYzMxMC4uMjI0NTVhZGFlNmQyOTNkOWY0OWRjYmFiZTM2Zjhh
Y2VlZjc0OWI1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIwLTA4LTI2ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFByZXZlbnQgaW5maW5pdGUg
cmVjdXJzaW9uIHdoZW4gdXBncmFkaW5nIGN1c3RvbSBlbGVtZW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NjA1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCB1cGRhdGVzIG91ciBp
bXBsZW1lbnRhdGlvbiBvZiB0aGUgY29uY2VwdCB0byB1cGdyYWRlIGFuIGVsZW1lbnQgWzFdIGFu
ZCByZWxhdGVkIGFsZ29yaXRobXMKKyAgICAgICAgdG8gbWF0Y2ggdGhlIGxhdGVzdCBIVE1MNSBz
cGVjaWZpY2F0aW9uLiBJbiBwYXJ0aWN1bGFyLCBpdCBpbmNvcnBvcmF0ZXMgdGhlIGFsZ29yaXRo
bWljIGNoYW5nZSBbMl0gdG8KKyAgICAgICAgcHJldmVudCBpbmZpbml0ZSByZWN1cnNpb24gYW4g
ZWxlbWVudCBpcyByZS1pbnNlcnRlZCBpbnRvIGEgZG9jdW1lbnQgdHJlZSBpbnNpZGUgaXRzIGNv
bnN0cnVjdG9yLgorCisgICAgICAgIFRoZSBrZXkgY29kZSBjaGFuZ2UgaXMgaW4gSlNDdXN0b21F
bGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWxlbWVudCB3aGVyZSB0aGlzIHBhdGNoIGFkZHMgYW4g
ZWFybHkgZXhpdAorICAgICAgICB3aGVuIGN1c3RvbSBlbGVtZW50IGlzIG5vdCAidW5kZWZpbmVk
IiBvciAidW5jdXN0b21pemVkIiBhbmQgdGhlIGN1c3RvbSBlbGVtZW50IHN0YXRlIGlzIHNldCB0
byAiZmFpbGVkIgorICAgICAgICBpbW1lZGlhdGVseSBiZWZvcmUgaW52b2tpbmcgdGhlIGNvbnN0
cnVjdG9yLiBUaGUgcmVzdCBvZiBjb2RlIGNoYW5nZXMgZGVhbHMgd2l0aCB0aGlzICJmYWlsZWQi
IHN0YXRlCisgICAgICAgIGFwcGVhcmluZyBkdXJpbmcgdXBncmFkZXMgYW5kIHVwZGF0ZXMgdmFy
aW91cyBkZWJ1ZyBhc3NlcnRpb25zLgorCisgICAgICAgIFsxXSBodHRwczovL2h0bWwuc3BlYy53
aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjb25jZXB0LXVwZ3JhZGUt
YW4tZWxlbWVudAorICAgICAgICBbMl0gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL3B1
bGwvNTEyNgorICAgICAgICBbM10gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY29uY2VwdC10cnktdXBncmFkZQorCisgICAgICAgIFRl
c3Q6IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3VzdG9tLWVsZW1lbnRzL3VwZ3Jh
ZGluZy5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZh
Y2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpjb25z
dHJ1Y3RFbGVtZW50V2l0aEZhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tRWxl
bWVudEludGVyZmFjZTo6dXBncmFkZUVsZW1lbnQpOiBJbXBsZW1lbnRzIHRoZSBuZXcgYmVoYXZp
b3IuIE5vdGUgdGhhdCB3ZSBzdGlsbAorICAgICAgICBuZWVkIHRvIGNsZWFyIHRoZSBxdWV1ZSB3
aGVyZSB3ZSB1c2VkIHRvIHNldCB0aGUgY3VzdG9tIGVsZW1lbnQgc3RhdGUgdG8gImZhaWxlZCIg
dG8gYXZvaWQgbWVtb3J5IGxlYWtzLgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50UmVhY3Rp
b25RdWV1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZTo6aGFzSnVzdFVwZ3JhZGVSZWFjdGlvbiBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OmVucXVldWVFbGVtZW50VXBncmFkZSk6IEVu
cXVldWUgdGhlIGVsZW1lbnQgdG8gdGhlIGVsZW1lbnQgcXVldWUKKyAgICAgICAgZXZlbiBpZiBp
dCBoYWQgYWxyZWFkeSBiZWVuIHNjaGVkdWxlZCB0byB1cGdyYWRlIHByZXZpb3VzbHkuIFRoaXMg
bWFrZXMgdGhlIGlubmVybW9zdCBhdHRlbXB0IHRvIHVwZ3JhZGUKKyAgICAgICAgdG8gc3VjY2Vl
ZCBpbnN0ZWFkIG9mIHRoZSBvdXRlcm1vc3QuIEFsc28gdXBkYXRlZCBkZWJ1ZyBhc3NlcnRpb25z
LgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OnRyeVRvVXBn
cmFkZUVsZW1lbnQpOiBSZW5hbWVkIGZyb20gZW5xdWV1ZUVsZW1lbnRVcGdyYWRlSWZEZWZpbmVk
CisgICAgICAgIHRvIG1hdGNoIHRoZSBzcGVjJ3MgbmFtZSBbM10uIFVubGlrZSB0aGUgY29uY2Vw
dCBpbiB0aGUgc3BlYywgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGdldCBjYWxsZWQgd2hlbgorICAg
ICAgICB0aGUgY3VzdG9tIGVsZW1lbnQgc3RhdGUgb2YgdGhlIGVsZW1udCBpcyBlaXRoZXIgInVu
ZGVmaW5lZCIgb3IgInVuY3VzdG9taXplZCIgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd29yay4KKyAg
ICAgICAgKiBkb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjppc0VtcHR5IGNvbnN0KTogQWRkZWQuCisg
ICAgICAgICogZG9tL0N1c3RvbUVsZW1lbnRSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp1cGdyYWRlRWxlbWVudHNJblNoYWRvd0luY2x1ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6dXBncmFkZSk6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZhbGxiYWNrSFRNTEVsZW1l
bnQpOiBDYWxsIHNldElzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5kaWRhdGUgb24gYSBuZXdseSBj
cmVhdGVkIHNpbmNlCisgICAgICAgIHdlIGNhbiBubyBsb25nZXIgdXBkYXRlIG5vZGUgZmxhZ3Mg
aW4gZW5xdWV1ZVRvVXBncmFkZQorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OnNldElzRmFpbGVkQ3VzdG9tRWxlbWVudCk6IFJlbW92ZWQgdGhlIHVudXNl
ZCBmdW5jdGlvbiBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldElzRmFp
bGVkQ3VzdG9tRWxlbWVudFdpdGhvdXRDbGVhcmluZ1JlYWN0aW9uUXVldWUpOiBFeHRyYWN0ZWQg
ZnJvbQorICAgICAgICBzZXRJc0ZhaWxlZEN1c3RvbUVsZW1lbnQuCisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpjbGVhclJlYWN0aW9uUXVldWVGcm9tRmFpbGVkQ3VzdG9tRWxlbWVudCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZW5xdWV1ZVRvVXBncmFkZSk6IE5vIGxv
bmdlciB1cGRhdGVzIG5vZGUgZmxhZ3MgYXMgdGhpcyB3b3VsZCBjbGVhciAiZmFpbGVkIiBzdGF0
ZQorICAgICAgICBmcm9tIGEgY3VzdG9tIGVsZW1lbnQgd2hpY2ggaXMgY3VycmVudGx5IGJlaW5n
IHVwZ3JhZGVkIGFuZCBjYXVzZSBhbGwgc29ydHMgb2YgaXNzdWVzLgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6cmVhY3Rpb25RdWV1ZSBjb25zdCk6IFVwZGF0ZWQgZGVidWcgYXNzZXJ0aW9u
cy4KKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorCiAyMDIwLTA4LTI1ICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEhhc2hNYXA8UmVmPFQ+Pjo6dGFrZSBzaG91
bGQgcmV0dXJuIFJlZlB0cjxUPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAKaW5kZXggMDMwZTgwNTVhNmJiMDdlY2Qw
OTBjYmE2YTFkNmRkOGIxNWMzZDIyOS4uNjc5MTdmOTU1ODE0MGMxMzg3YjkzZDNkZjMwMTEyYzA2
YzMwYzZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21F
bGVtZW50SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCkBAIC02NCw3ICs2NCw3IEBAIFJlZjxFbGVtZW50PiBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OmNvbnN0cnVjdEVsZW1lbnRXaXRoRmFsbGJhY2soRG9j
dW1lbnQmIGRvCiAKICAgICBhdXRvIGVsZW1lbnQgPSBIVE1MVW5rbm93bkVsZW1lbnQ6OmNyZWF0
ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tKCksIGxvY2FsTmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5h
bWVzcGFjZVVSSSksIGRvY3VtZW50KTsKICAgICBlbGVtZW50LT5zZXRJc0N1c3RvbUVsZW1lbnRV
cGdyYWRlQ2FuZGlkYXRlKCk7Ci0gICAgZWxlbWVudC0+c2V0SXNGYWlsZWRDdXN0b21FbGVtZW50
KCp0aGlzKTsKKyAgICBlbGVtZW50LT5zZXRJc0ZhaWxlZEN1c3RvbUVsZW1lbnQoKTsKIAogICAg
IHJldHVybiBlbGVtZW50OwogfQpAQCAtNzksNyArNzksNyBAQCBSZWY8RWxlbWVudD4gSlNDdXN0
b21FbGVtZW50SW50ZXJmYWNlOjpjb25zdHJ1Y3RFbGVtZW50V2l0aEZhbGxiYWNrKERvY3VtZW50
JiBkbwogCiAgICAgYXV0byBlbGVtZW50ID0gSFRNTFVua25vd25FbGVtZW50OjpjcmVhdGUobmFt
ZSwgZG9jdW1lbnQpOwogICAgIGVsZW1lbnQtPnNldElzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5k
aWRhdGUoKTsKLSAgICBlbGVtZW50LT5zZXRJc0ZhaWxlZEN1c3RvbUVsZW1lbnQoKnRoaXMpOwor
ICAgIGVsZW1lbnQtPnNldElzRmFpbGVkQ3VzdG9tRWxlbWVudCgpOwogCiAgICAgcmV0dXJuIGVs
ZW1lbnQ7CiB9CkBAIC0xNjIsOSArMTYyLDE0IEBAIHN0YXRpYyBSZWZQdHI8RWxlbWVudD4gY29u
c3RydWN0Q3VzdG9tRWxlbWVudFN5bmNocm9ub3VzbHkoRG9jdW1lbnQmIGRvY3VtZW50LCBWCiAg
ICAgcmV0dXJuIHdyYXBwZWRFbGVtZW50OwogfQogCisvLyBodHRwczovL2h0bWwuc3BlYy53aGF0
d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjb25jZXB0LXVwZ3JhZGUtYW4t
ZWxlbWVudAogdm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnVwZ3JhZGVFbGVtZW50KEVs
ZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQudGFnUU5hbWUoKSA9PSBuYW1l
KCkpOworCisgICAgaWYgKGVsZW1lbnQuaXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgpIHx8IGVsZW1l
bnQuaXNGYWlsZWRDdXN0b21FbGVtZW50KCkpCisgICAgICAgIHJldHVybjsgLy8gSWYgZWxlbWVu
dCdzIGN1c3RvbSBlbGVtZW50IHN0YXRlIGlzIG5vdCAidW5kZWZpbmVkIiBvciAidW5jdXN0b21p
emVkIiwgdGhlbiByZXR1cm4uCisKICAgICBBU1NFUlQoZWxlbWVudC5pc0N1c3RvbUVsZW1lbnRV
cGdyYWRlQ2FuZGlkYXRlKCkpOwogICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTkzLDYgKzE5OCwxMCBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVy
ZmFjZTo6dXBncmFkZUVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKIAogICAgIEN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlUG9zdFVwZ3JhZGVSZWFjdGlvbnMoZWxlbWVudCk7CiAK
KyAgICAvLyBVbmxpa2Ugc3BlYywgc2V0IGVsZW1lbnQncyBjdXN0b20gZWxlbWVudCBzdGF0ZSB0
byAiZmFpbGVkIiBhZnRlciBlbnF1ZXVlaW5nIHBvc3QtdXBncmFkZSByZWFjdGlvbnMKKyAgICAv
LyB0byBhdm9pZCBoaXR0aW5nIGRlYnVnIGFzc2VydGlvbnMgaW4gZW5xdWV1ZVBvc3RVcGdyYWRl
UmVhY3Rpb25zLgorICAgIGVsZW1lbnQuc2V0SXNGYWlsZWRDdXN0b21FbGVtZW50V2l0aG91dENs
ZWFyaW5nUmVhY3Rpb25RdWV1ZSgpOworCiAgICAgbV9jb25zdHJ1Y3Rpb25TdGFjay5hcHBlbmQo
JmVsZW1lbnQpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKQEAgLTIwNCwxNCAr
MjEzLDE0IEBAIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWxlbWVudChF
bGVtZW50JiBlbGVtZW50KQogICAgIG1fY29uc3RydWN0aW9uU3RhY2sucmVtb3ZlTGFzdCgpOwog
CiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICBlbGVtZW50
LnNldElzRmFpbGVkQ3VzdG9tRWxlbWVudCgqdGhpcyk7CisgICAgICAgIGVsZW1lbnQuY2xlYXJS
ZWFjdGlvblF1ZXVlRnJvbUZhaWxlZEN1c3RvbUVsZW1lbnQoKTsKICAgICAgICAgcmVwb3J0RXhj
ZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIEVsZW1lbnQqIHdyYXBwZWRFbGVtZW50ID0gSlNFbGVtZW50
Ojp0b1dyYXBwZWQodm0sIHJldHVybmVkRWxlbWVudCk7CiAgICAgaWYgKCF3cmFwcGVkRWxlbWVu
dCB8fCB3cmFwcGVkRWxlbWVudCAhPSAmZWxlbWVudCkgewotICAgICAgICBlbGVtZW50LnNldElz
RmFpbGVkQ3VzdG9tRWxlbWVudCgqdGhpcyk7CisgICAgICAgIGVsZW1lbnQuY2xlYXJSZWFjdGlv
blF1ZXVlRnJvbUZhaWxlZEN1c3RvbUVsZW1lbnQoKTsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9u
KGxleGljYWxHbG9iYWxPYmplY3QsIGNyZWF0ZURPTUV4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBUeXBlRXJyb3IsICJDdXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvciByZXR1cm5lZCBhIHdy
b25nIGVsZW1lbnQiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcAppbmRleCA1ZGYzZWVlZGI0
YzU4NWFhMTE4MGJkMDc3MTNlYTdhMWM4ZmY1MGQyLi45NDgxNzI4YzI0ZjkxNGRjNWU3ODU5ODY5
YjIxZDQ1MDgxNzNkZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZS5jcHAKQEAgLTExOCwyMSArMTE4LDI3IEBAIHZvaWQgQ3VzdG9tRWxl
bWVudFJlYWN0aW9uUXVldWU6OmNsZWFyKCkKICAgICBtX2l0ZW1zLmNsZWFyKCk7CiB9CiAKKyNp
ZiBBU1NFUlRfRU5BQkxFRAorYm9vbCBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6aGFzSnVz
dFVwZ3JhZGVSZWFjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faXRlbXMuc2l6ZSgpID09
IDEgJiYgbV9pdGVtc1swXS50eXBlKCkgPT0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVt
OjpUeXBlOjpFbGVtZW50VXBncmFkZTsKK30KKyNlbmRpZgorCiB2b2lkIEN1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlOjplbnF1ZXVlRWxlbWVudFVwZ3JhZGUoRWxlbWVudCYgZWxlbWVudCwgYm9v
bCBhbHJlYWR5U2NoZWR1bGVkVG9VcGdyYWRlKQogewogICAgIEFTU0VSVChDdXN0b21FbGVtZW50
UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGU6OmlzUmVhY3Rpb25BbGxvd2VkKCkpOwogICAgIEFTU0VS
VChlbGVtZW50LnJlYWN0aW9uUXVldWUoKSk7CiAgICAgYXV0byYgcXVldWUgPSAqZWxlbWVudC5y
ZWFjdGlvblF1ZXVlKCk7Ci0gICAgaWYgKGFscmVhZHlTY2hlZHVsZWRUb1VwZ3JhZGUpIHsKLSAg
ICAgICAgQVNTRVJUKHF1ZXVlLm1faXRlbXMuc2l6ZSgpID09IDEpOwotICAgICAgICBBU1NFUlQo
cXVldWUubV9pdGVtc1swXS50eXBlKCkgPT0gQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWVJdGVt
OjpUeXBlOjpFbGVtZW50VXBncmFkZSk7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoYWxyZWFkeVNj
aGVkdWxlZFRvVXBncmFkZSkKKyAgICAgICAgQVNTRVJUKHF1ZXVlLmhhc0p1c3RVcGdyYWRlUmVh
Y3Rpb24oKSk7CisgICAgZWxzZQogICAgICAgICBxdWV1ZS5tX2l0ZW1zLmFwcGVuZCh7Q3VzdG9t
RWxlbWVudFJlYWN0aW9uUXVldWVJdGVtOjpUeXBlOjpFbGVtZW50VXBncmFkZX0pOwotICAgICAg
ICBlbnF1ZXVlRWxlbWVudE9uQXBwcm9wcmlhdGVFbGVtZW50UXVldWUoZWxlbWVudCk7Ci0gICAg
fQorICAgIGVucXVldWVFbGVtZW50T25BcHByb3ByaWF0ZUVsZW1lbnRRdWV1ZShlbGVtZW50KTsK
IH0KIAotdm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZUVsZW1lbnRVcGdy
YWRlSWZEZWZpbmVkKEVsZW1lbnQmIGVsZW1lbnQpCisvLyBodHRwczovL2h0bWwuc3BlYy53aGF0
d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjb25jZXB0LXRyeS11cGdyYWRl
Cit2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjp0cnlUb1VwZ3JhZGVFbGVtZW50KEVs
ZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKEN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2Fs
bG93ZWRTY29wZTo6aXNSZWFjdGlvbkFsbG93ZWQoKSk7CiAgICAgQVNTRVJUKGVsZW1lbnQuaXND
dXN0b21FbGVtZW50VXBncmFkZUNhbmRpZGF0ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgKaW5kZXggZTVlZDRkMWFjN2MxNDYxNWE0YmM1
ZjYwNGZmMDczNjcxMzAxMGUwNS4uNjMxYzUzM2I3ZWZiZmZmOGY3N2M4MTdmMGM5NDUyMjg3YmEx
ZGRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1
ZXVlLmgKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIH5DdXN0b21FbGVtZW50UmVhY3Rp
b25RdWV1ZSgpOwogCiAgICAgc3RhdGljIHZvaWQgZW5xdWV1ZUVsZW1lbnRVcGdyYWRlKEVsZW1l
bnQmLCBib29sIGFscmVhZHlTY2hlZHVsZWRUb1VwZ3JhZGUpOwotICAgIHN0YXRpYyB2b2lkIGVu
cXVldWVFbGVtZW50VXBncmFkZUlmRGVmaW5lZChFbGVtZW50Jik7CisgICAgc3RhdGljIHZvaWQg
dHJ5VG9VcGdyYWRlRWxlbWVudChFbGVtZW50Jik7CiAgICAgc3RhdGljIHZvaWQgZW5xdWV1ZUNv
bm5lY3RlZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVudCYpOwogICAgIHN0YXRpYyB2b2lkIGVucXVl
dWVEaXNjb25uZWN0ZWRDYWxsYmFja0lmTmVlZGVkKEVsZW1lbnQmKTsKICAgICBzdGF0aWMgdm9p
ZCBlbnF1ZXVlQWRvcHRlZENhbGxiYWNrSWZOZWVkZWQoRWxlbWVudCYsIERvY3VtZW50JiBvbGRE
b2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KTsKQEAgLTgwLDYgKzgwLDEwIEBAIHB1Ymxp
YzoKICAgICBib29sIG9ic2VydmVzU3R5bGVBdHRyaWJ1dGUoKSBjb25zdDsKICAgICB2b2lkIGlu
dm9rZUFsbChFbGVtZW50Jik7CiAgICAgdm9pZCBjbGVhcigpOworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1faXRlbXMuaXNFbXB0eSgpOyB9CisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICBib29sIGhhc0p1c3RVcGdyYWRlUmVhY3Rpb24oKSBjb25zdDsKKyNlbmRpZgogCiAgICAg
c3RhdGljIHZvaWQgcHJvY2Vzc0JhY2t1cFF1ZXVlKEN1c3RvbUVsZW1lbnRRdWV1ZSYpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVnaXN0cnkuY3BwCmluZGV4IDQzMzU0
ZTNhOTRjZmNiMmM1NzJlMmY4ZGQzNTI2ZTMyZmZiZWJjOGMuLjRjMjJmNzg1YmMxZDE0MmI3YTI4
MzVjZjgxNTNkNGQ3YmM0ZmE0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0
b21FbGVtZW50UmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50UmVnaXN0cnkuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgc3RhdGljIHZvaWQgdXBncmFkZUVs
ZW1lbnRzSW5TaGFkb3dJbmNsdWRpbmdEZXNjZW5kYW50cyhDb250YWluZXJOb2RlJiByb290KQog
ewogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KHJv
b3QpKSB7CiAgICAgICAgIGlmIChlbGVtZW50LmlzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5kaWRh
dGUoKSkKLSAgICAgICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1ZXVlRWxl
bWVudFVwZ3JhZGVJZkRlZmluZWQoZWxlbWVudCk7CisgICAgICAgICAgICBDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZTo6dHJ5VG9VcGdyYWRlRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgaWYg
KGF1dG8qIHNoYWRvd1Jvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIHVw
Z3JhZGVFbGVtZW50c0luU2hhZG93SW5jbHVkaW5nRGVzY2VuZGFudHMoKnNoYWRvd1Jvb3QpOwog
ICAgIH0KQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIEN1c3RvbUVsZW1lbnRSZWdpc3RyeTo6dXBn
cmFkZShOb2RlJiByb290KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXM8RWxlbWVudD4o
cm9vdCkgJiYgZG93bmNhc3Q8RWxlbWVudD4ocm9vdCkuaXNDdXN0b21FbGVtZW50VXBncmFkZUNh
bmRpZGF0ZSgpKQotICAgICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZUVs
ZW1lbnRVcGdyYWRlSWZEZWZpbmVkKGRvd25jYXN0PEVsZW1lbnQ+KHJvb3QpKTsKKyAgICAgICAg
Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OnRyeVRvVXBncmFkZUVsZW1lbnQoZG93bmNhc3Q8
RWxlbWVudD4ocm9vdCkpOwogCiAgICAgdXBncmFkZUVsZW1lbnRzSW5TaGFkb3dJbmNsdWRpbmdE
ZXNjZW5kYW50cyhkb3duY2FzdDxDb250YWluZXJOb2RlPihyb290KSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAppbmRleCBmYTdhNmVhNzM4YTllNzhlMzFhZjRlODIyNTVhODgyMzFmNTBjN2Jj
Li42NTQ2NDc5ZjIzZjZhMWVkYmYyODljYjc4N2ZmN2MyZWYwNTUyOTY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKQEAgLTExNTEsNiArMTE1MSw3IEBAIHN0YXRpYyBSZWY8SFRNTEVsZW1lbnQ+
IGNyZWF0ZUZhbGxiYWNrSFRNTEVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBRdWFs
CiAgICAgICAgIGlmIChVTkxJS0VMWShyZWdpc3RyeSkpIHsKICAgICAgICAgICAgIGlmIChhdXRv
KiBlbGVtZW50SW50ZXJmYWNlID0gcmVnaXN0cnktPmZpbmRJbnRlcmZhY2UobmFtZSkpIHsKICAg
ICAgICAgICAgICAgICBhdXRvIGVsZW1lbnQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKG5hbWUsIGRv
Y3VtZW50KTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRJc0N1c3RvbUVsZW1lbnRVcGdy
YWRlQ2FuZGlkYXRlKCk7CiAgICAgICAgICAgICAgICAgZWxlbWVudC0+ZW5xdWV1ZVRvVXBncmFk
ZSgqZWxlbWVudEludGVyZmFjZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAg
ICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggMTA4ODE5OGVhYzBjNmY1NGU0
ODllMTlmNGRmN2VhNDExNDQyZjBkZC4uYmQ4MDI5YmJmNTc0ZDVlYTg0Yzg5NmJhYTA1Mjk3Yjlk
MWNlNzUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMjE3Myw3ICsyMTczLDcgQEAgTm9k
ZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0
b3IoSW5zZXJ0aW9uVHlwZSBpbnMKICAgICBpZiAoYmVjb21lQ29ubmVjdGVkKSB7CiAgICAgICAg
IGlmIChVTkxJS0VMWShpc0N1c3RvbUVsZW1lbnRVcGdyYWRlQ2FuZGlkYXRlKCkpKSB7CiAgICAg
ICAgICAgICBBU1NFUlQoaXNDb25uZWN0ZWQoKSk7Ci0gICAgICAgICAgICBDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZTo6ZW5xdWV1ZUVsZW1lbnRVcGdyYWRlSWZEZWZpbmVkKCp0aGlzKTsKKyAg
ICAgICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjp0cnlUb1VwZ3JhZGVFbGVtZW50
KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICBpZiAoVU5MSUtFTFkoaXNEZWZpbmVkQ3VzdG9t
RWxlbWVudCgpKSkKICAgICAgICAgICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjplbnF1
ZXVlQ29ubmVjdGVkQ2FsbGJhY2tJZk5lZWRlZCgqdGhpcyk7CkBAIC0yNDEzLDE4ICsyNDEzLDI4
IEBAIHZvaWQgRWxlbWVudDo6c2V0SXNEZWZpbmVkQ3VzdG9tRWxlbWVudChKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UmIGVsZW1lbnRJbnRlcmZhCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRDaGFuZ2VDdXN0b21FbGVtZW50U3RhdGUoKnRoaXMpOwogfQogCi12b2lkIEVsZW1lbnQ6
OnNldElzRmFpbGVkQ3VzdG9tRWxlbWVudChKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UmKQordm9p
ZCBFbGVtZW50OjpzZXRJc0ZhaWxlZEN1c3RvbUVsZW1lbnQoKQoreworICAgIHNldElzRmFpbGVk
Q3VzdG9tRWxlbWVudFdpdGhvdXRDbGVhcmluZ1JlYWN0aW9uUXVldWUoKTsKKyAgICBjbGVhclJl
YWN0aW9uUXVldWVGcm9tRmFpbGVkQ3VzdG9tRWxlbWVudCgpOworfQorCit2b2lkIEVsZW1lbnQ6
OnNldElzRmFpbGVkQ3VzdG9tRWxlbWVudFdpdGhvdXRDbGVhcmluZ1JlYWN0aW9uUXVldWUoKQog
ewogICAgIEFTU0VSVChpc1VuZGVmaW5lZEN1c3RvbUVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKGdl
dEZsYWcoSXNFZGl0aW5nVGV4dE9yVW5kZWZpbmVkQ3VzdG9tRWxlbWVudEZsYWcpKTsKICAgICBj
bGVhckZsYWcoSXNDdXN0b21FbGVtZW50KTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENoYW5nZUN1c3RvbUVsZW1lbnRTdGF0ZSgqdGhpcyk7Cit9CiAKK3ZvaWQgRWxlbWVudDo6
Y2xlYXJSZWFjdGlvblF1ZXVlRnJvbUZhaWxlZEN1c3RvbUVsZW1lbnQoKQoreworICAgIEFTU0VS
VChpc0ZhaWxlZEN1c3RvbUVsZW1lbnQoKSk7CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsKICAg
ICAgICAgLy8gQ2xlYXIgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZGVsZXRpbmcgaXQgc2luY2UgdGhp
cyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGluc2lkZSBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZTo6aW52b2tlQWxsIGR1cmluZyB1cGdyYWRlcy4KICAgICAgICAgaWYgKGF1dG8qIHF1ZXVlID0g
ZWxlbWVudFJhcmVEYXRhKCktPmN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlKCkpCiAgICAgICAg
ICAgICBxdWV1ZS0+Y2xlYXIoKTsKICAgICB9Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRDaGFuZ2VDdXN0b21FbGVtZW50U3RhdGUoKnRoaXMpOwogfQogCiB2b2lkIEVsZW1lbnQ6
OnNldElzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5kaWRhdGUoKQpAQCAtMjQzNywxMSArMjQ0Nyw4
IEBAIHZvaWQgRWxlbWVudDo6c2V0SXNDdXN0b21FbGVtZW50VXBncmFkZUNhbmRpZGF0ZSgpCiAK
IHZvaWQgRWxlbWVudDo6ZW5xdWV1ZVRvVXBncmFkZShKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2Um
IGVsZW1lbnRJbnRlcmZhY2UpCiB7CisgICAgQVNTRVJUKGlzQ3VzdG9tRWxlbWVudFVwZ3JhZGVD
YW5kaWRhdGUoKSk7CiAgICAgQVNTRVJUKCFpc0RlZmluZWRDdXN0b21FbGVtZW50KCkgJiYgIWlz
RmFpbGVkQ3VzdG9tRWxlbWVudCgpKTsKLSAgICBzZXRGbGFnKElzQ3VzdG9tRWxlbWVudCk7Ci0g
ICAgc2V0RmxhZyhJc0VkaXRpbmdUZXh0T3JVbmRlZmluZWRDdXN0b21FbGVtZW50RmxhZyk7Ci0g
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDdXN0b21FbGVtZW50U3RhdGUo
KnRoaXMpOwotCiAgICAgYXV0byYgZGF0YSA9IGVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpOwogICAg
IGJvb2wgYWxyZWFkeVNjaGVkdWxlZFRvVXBncmFkZSA9IGRhdGEuY3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWUoKTsKICAgICBpZiAoIWFscmVhZHlTY2hlZHVsZWRUb1VwZ3JhZGUpCkBAIC0yNDUx
LDcgKzI0NTgsMTQgQEAgdm9pZCBFbGVtZW50OjplbnF1ZXVlVG9VcGdyYWRlKEpTQ3VzdG9tRWxl
bWVudEludGVyZmFjZSYgZWxlbWVudEludGVyZmFjZSkKIAogQ3VzdG9tRWxlbWVudFJlYWN0aW9u
UXVldWUqIEVsZW1lbnQ6OnJlYWN0aW9uUXVldWUoKSBjb25zdAogewotICAgIEFTU0VSVChpc0Rl
ZmluZWRDdXN0b21FbGVtZW50KCkgfHwgaXNDdXN0b21FbGVtZW50VXBncmFkZUNhbmRpZGF0ZSgp
KTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGlmIChpc0ZhaWxlZEN1c3RvbUVsZW1lbnQoKSkg
eworICAgICAgICBhdXRvKiBxdWV1ZSA9IGVsZW1lbnRSYXJlRGF0YSgpLT5jdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZSgpOworICAgICAgICBBU1NFUlQocXVldWUpOworICAgICAgICBBU1NFUlQo
cXVldWUtPmlzRW1wdHkoKSB8fCBxdWV1ZS0+aGFzSnVzdFVwZ3JhZGVSZWFjdGlvbigpKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgQVNTRVJUKGlzRGVmaW5lZEN1c3RvbUVsZW1lbnQoKSB8fCBpc0N1
c3RvbUVsZW1lbnRVcGdyYWRlQ2FuZGlkYXRlKCkpOworI2VuZGlmCiAgICAgaWYgKCFoYXNSYXJl
RGF0YSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gZWxlbWVudFJhcmVE
YXRhKCktPmN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRl
eCBlNzdhZDcyOWQzMjAzYjEwMzk0ZDBiZWIwNTJmZjVkNTZiYTJlZGU1Li4zNGM2ZmU4OTE1MDcw
NzRlYzIxYTg1ZWYyMTYyN2I3YjFmZmU5NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTMwMyw3
ICszMDMsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgU2hhZG93Um9vdCYgZW5zdXJl
VXNlckFnZW50U2hhZG93Um9vdCgpOwogCiAgICAgdm9pZCBzZXRJc0RlZmluZWRDdXN0b21FbGVt
ZW50KEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYpOwotICAgIHZvaWQgc2V0SXNGYWlsZWRDdXN0
b21FbGVtZW50KEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSYpOworICAgIHZvaWQgc2V0SXNGYWls
ZWRDdXN0b21FbGVtZW50KCk7CisgICAgdm9pZCBzZXRJc0ZhaWxlZEN1c3RvbUVsZW1lbnRXaXRo
b3V0Q2xlYXJpbmdSZWFjdGlvblF1ZXVlKCk7CisgICAgdm9pZCBjbGVhclJlYWN0aW9uUXVldWVG
cm9tRmFpbGVkQ3VzdG9tRWxlbWVudCgpOwogICAgIHZvaWQgc2V0SXNDdXN0b21FbGVtZW50VXBn
cmFkZUNhbmRpZGF0ZSgpOwogICAgIHZvaWQgZW5xdWV1ZVRvVXBncmFkZShKU0N1c3RvbUVsZW1l
bnRJbnRlcmZhY2UmKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZSogcmVhY3Rpb25R
dWV1ZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE3ZWZlZjNiMDYyNTc3YTkyNGZkNDIzMmJjYjRhNzM1NTQw
ZWNiOTEuLmRhZDljZjA0YjBjMDI0MmI0MDRlNjQ5ZGE0NGU5OTRhNDk5Y2JhOGMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAyMC0wOC0yNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KKworICAgICAgICBQcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiB3aGVuIHVwZ3JhZGluZyBj
dXN0b20gZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNjYwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJlbW92ZWQgdGhlIGNyYXNoIGV4cGVjdGF0aW9uIGZyb20gYSB0ZXN0IG5vdyB0aGF0
IGl0J3MgcGFzc2luZy4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjAtMDgt
MjUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBGYWNlYm9vayBw
b3N0IHdpdGggbG90cyBvZiBjb21tZW50cyBoYXMgY3V0IG9mZiBzY3JvbGxiYXIsIGFuZCBjYW4n
dCBzY3JvbGwgZnVsbHkgdG8gdGhlIGJvdHRvbSAoc3RpY2t5KQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9D
aGFuZ2VMb2cKaW5kZXggYjZjODY4NzgxMzk3MjllNGEzODFmNjdiOGYyMzBjN2RhMzI5MDkzMS4u
NmJiMzQxODQ1M2E0ZGVkNTIwNjZkYzg2MDY3ZjUzMmZjMzY1Yzg5MSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDgtMjYgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUHJldmVudCBpbmZpbml0ZSByZWN1cnNp
b24gd2hlbiB1cGdyYWRpbmcgY3VzdG9tIGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY2MDUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWJhc2VsaW5lZCB0aGUgdGVzdCBub3cgdGhhdCBv
bmUgbW9yZSB0ZXN0IGNhc2UgaXMgcGFzc2luZy4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10
ZXN0cy9jdXN0b20tZWxlbWVudHMvdXBncmFkaW5nLWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wOC0y
NSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXNvbHZlIHdp
dGggdGhlIGNsYXNzIHVzZWQgdG8gZGVmaW5lIHRoZSBDdXN0b20gRWxlbWVudApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3Rh
dGlvbnMKaW5kZXggMTIxYmQzYTk3YjlmZjIzOGRiZWNmZjVlOGFkNDg5NGY2Y2ZhNDY1Yi4uMjA2
NmFlNjAwNGYyMjBjNTE2Mzk1ZmIyMmMyMGQ3MWI5M2I3YmFlNiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25z
CkBAIC01NjMsNyArNTYzLDYgQEAgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L3JlbmRlcmluZy9ub24tcmVwbGFjZWQtZWxlbWVudHMvcGhyYXNpbmctY28KIGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tb3BlbmVyLXBvbGljeSBbIFNr
aXAgXQogCiAjIE5ld2x5IGltcG9ydGVkIFdQVCB0ZXN0cyB0aGF0IGFyZSBjcmFzaGluZy4KLVsg
RGVidWcgXSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2N1c3RvbS1lbGVtZW50cy91
cGdyYWRpbmcuaHRtbCBbIENyYXNoIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
aHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC90aGUtZW1iZWQtZWxlbWVudC9lbWJlZC1y
ZXByZXNlbnQtbm90aGluZy0wNC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBDcmFzaCBdCiAKICMg
TmV3bHkgaW1wb3J0ZWQgV1BUIHRlc3RzIHRoYXQgYXJlIGZsYWt5LgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jdXN0b20tZWxlbWVudHMv
dXBncmFkaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3VzdG9tLWVsZW1lbnRzL3VwZ3JhZGluZy1leHBlY3RlZC50eHQKaW5kZXgg
YWM0MTljMjdhODVlOWNkNjVhYTNjYzU0MzM5Yjg3MGMxOWI3MTc2Yy4uM2Q1M2E4ZTU0M2MwMzFj
OTBiMTM1N2VjODQyNDE2MGQwZDg3NzgxOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jdXN0b20tZWxlbWVudHMvdXBncmFkaW5nLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2N1c3RvbS1lbGVtZW50cy91cGdyYWRpbmctZXhwZWN0ZWQudHh0CkBAIC0yNiw1ICsyNiw1IEBA
IFBBU1MgQWRvcHRpbmcgKGFuZCBsZWF2aW5nIGRpc2Nvbm5jZXRlZCkgYW4gdW5yZXNvbHZlZCBj
dXN0b20gZWxlbWVudCBpbnRvIHRoZSBkCiBQQVNTIEFkb3B0aW5nIGFuZCBpbnNlcnRpbmcgYW4g
dW5yZXNvbHZlZCBjdXN0b20gZWxlbWVudCBpbnRvIHRoZSBkb2N1bWVudCBvZiBhbiBpZnJhbWUg
bXVzdCBlbnF1ZXVlIGEgY3VzdG9tIGVsZW1lbnQgdXBncmFkZSByZWFjdGlvbiAKIEZBSUwgSWYg
ZGVmaW5pdGlvbidzIGRpc2FibGUgc2hhZG93IGlzIHRydWUgYW5kIGVsZW1lbnQncyBzaGFkb3cg
cm9vdCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhICJOb3RTdXBwb3J0ZWRFcnJvciIgRE9NRXhj
ZXB0aW9uLiBhc3NlcnRfZmFsc2U6IFVwZ3JhZGluZyBzaG91bGQgZmFpbC4gZXhwZWN0ZWQgZmFs
c2UgZ290IHRydWUKIFBBU1MgSW5maW5pdGUgY29uc3RydWN0b3IgcmVjdXJzaW9uIHdpdGggdXBn
cmFkZSh0aGlzKSBzaG91bGQgbm90IGJlIHBvc3NpYmxlIAotRkFJTCBJbmZpbml0ZSBjb25zdHJ1
Y3RvciByZWN1cnNpb24gd2l0aCBhcHBlbmRDaGlsZCBzaG91bGQgbm90IGJlIHBvc3NpYmxlIGFz
c2VydF9hcnJheV9lcXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5IDAgdG8gYmUgRWxlbWVudCBub2Rl
IDxpbmZpbml0ZS1jbG9uaW5nLWVsZW1lbnQtMiBpZD0iYiI+PC9pbmZpbml0ZS1jbG9uaW5nLWVs
ZS4uLiBidXQgZ290IEVsZW1lbnQgbm9kZSA8aW5maW5pdGUtY2xvbmluZy1lbGVtZW50LTIgaWQ9
ImEiPjwvaW5maW5pdGUtY2xvbmluZy1lbGUuLi4gKGV4cGVjdGVkIGFycmF5IFtFbGVtZW50IG5v
ZGUgPGluZmluaXRlLWNsb25pbmctZWxlbWVudC0yIGlkPSJiIj48L2luZmluaXRlLWNsb25pbmct
ZWxlLi4uLCAiYmVnaW4iXSBnb3QgW0VsZW1lbnQgbm9kZSA8aW5maW5pdGUtY2xvbmluZy1lbGVt
ZW50LTIgaWQ9ImEiPjwvaW5maW5pdGUtY2xvbmluZy1lbGUuLi4sICJlbmQiXSkKK1BBU1MgSW5m
aW5pdGUgY29uc3RydWN0b3IgcmVjdXJzaW9uIHdpdGggYXBwZW5kQ2hpbGQgc2hvdWxkIG5vdCBi
ZSBwb3NzaWJsZSAKICAK
</data>

          </attachment>
      

    </bug>

</bugzilla>