<?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>201403</bug_id>
          
          <creation_ts>2019-09-02 10:03:20 -0700</creation_ts>
          <short_desc>Cache &quot;compositingAncestor&quot; during the compositing updateBackingAndHierarchy() tree walk</short_desc>
          <delta_ts>2019-09-03 12:56:19 -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>Compositing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>dbates</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1567213</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-09-02 10:03:20 -0700</bug_when>
    <thetext>Cache &quot;compositingAncestor&quot; during the compositing updateBackingAndHierarchy() tree walk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567214</commentid>
    <comment_count>1</comment_count>
      <attachid>377855</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-09-02 10:04:59 -0700</bug_when>
    <thetext>Created attachment 377855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567221</commentid>
    <comment_count>2</comment_count>
      <attachid>377855</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-09-02 12:11:40 -0700</bug_when>
    <thetext>Comment on attachment 377855
Patch

This patch looks good. In my opinion it would benefit by using more references and less pointers because:
1. I do not see null checks so the code looks to be written assuming non-nullness
2. Because of (1) a newcomer to this code may think RenderLayer can be null and add null checks or asserts when they are not necessary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567425</commentid>
    <comment_count>3</comment_count>
      <attachid>377855</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-09-03 10:32:32 -0700</bug_when>
    <thetext>Comment on attachment 377855
Patch

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

&gt; Source/WebCore/rendering/RenderLayerCompositor.h:519
&gt; -    OptionSet&lt;ScrollCoordinationRole&gt; coordinatedScrollingRolesForLayer(const RenderLayer&amp;) const;
&gt; +    OptionSet&lt;ScrollCoordinationRole&gt; coordinatedScrollingRolesForLayer(const RenderLayer&amp;, const RenderLayer* compositingAncestor) const;
&gt;  
&gt;      // Returns the ScrollingNodeID which acts as the parent for children.
&gt; -    ScrollingNodeID updateScrollCoordinationForLayer(RenderLayer&amp;, struct ScrollingTreeState&amp;, OptionSet&lt;ScrollingNodeChangeFlags&gt;);
&gt; +    ScrollingNodeID updateScrollCoordinationForLayer(RenderLayer&amp;, const RenderLayer* compositingAncestor, struct ScrollingTreeState&amp;, OptionSet&lt;ScrollingNodeChangeFlags&gt;);

It might be better to pass in UpdateBackingTraversalState&amp; instead of RenderLayer* to these functions. It makes clear in which context these functions are used in and potentially allows caching more things in future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567474</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-09-03 12:51:07 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #2)
&gt; Comment on attachment 377855 [details]
&gt; Patch
&gt; 
&gt; This patch looks good. In my opinion it would benefit by using more
&gt; references and less pointers because:
&gt; 1. I do not see null checks so the code looks to be written assuming
&gt; non-nullness

compositedAncestor can be null (e.g. for the root layer).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567475</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-09-03 12:53:29 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; Comment on attachment 377855 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=377855&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.h:519
&gt; &gt; -    OptionSet&lt;ScrollCoordinationRole&gt; coordinatedScrollingRolesForLayer(const RenderLayer&amp;) const;
&gt; &gt; +    OptionSet&lt;ScrollCoordinationRole&gt; coordinatedScrollingRolesForLayer(const RenderLayer&amp;, const RenderLayer* compositingAncestor) const;
&gt; &gt;  
&gt; &gt;      // Returns the ScrollingNodeID which acts as the parent for children.
&gt; &gt; -    ScrollingNodeID updateScrollCoordinationForLayer(RenderLayer&amp;, struct ScrollingTreeState&amp;, OptionSet&lt;ScrollingNodeChangeFlags&gt;);
&gt; &gt; +    ScrollingNodeID updateScrollCoordinationForLayer(RenderLayer&amp;, const RenderLayer* compositingAncestor, struct ScrollingTreeState&amp;, OptionSet&lt;ScrollingNodeChangeFlags&gt;);
&gt; 
&gt; It might be better to pass in UpdateBackingTraversalState&amp; instead of
&gt; RenderLayer* to these functions. It makes clear in which context these
&gt; functions are used in and potentially allows caching more things in future.

For now, I don&apos;t want UpdateBackingTraversalState to leak out of the tree walking code, but if it gains most stuff for caching, I can pass it around later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567477</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-09-03 12:55:36 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/249440/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1567478</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-03 12:56:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/54987053&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377855</attachid>
            <date>2019-09-02 10:04:59 -0700</date>
            <delta_ts>2019-09-03 10:32:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201403-20190902100458.patch</filename>
            <type>text/plain</type>
            <size>27400</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDZhM2E0ZjYzZDE3NzM1
OGU1MDM0MGYzZjRjNDFkZjMyZTdiZDU2Yy4uNGRjMmY2Zjc4M2QyYTAxNmVmMzA2Y2M5MGUzZmQ3
OTQ0MmZjZmY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE5LTA5LTAyICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIENhY2hlICJjb21w
b3NpdGluZ0FuY2VzdG9yIiBkdXJpbmcgdGhlIGNvbXBvc2l0aW5nIHVwZGF0ZUJhY2tpbmdBbmRI
aWVyYXJjaHkoKSB0cmVlIHdhbGsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMTQwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZpbmRpbmcgYSBsYXllcidzIGNvbXBvc2l0aW5nQW5jZXN0b3IgcmVxdWly
ZXMgYW4gYW5jZXN0b3IgdHJlZSB3YWxrLiBXZSBjYW4gYXZvaWQgdGhpcyBkdXJpbmcKKyAgICAg
ICAgY29tcG9zaXRpbmcgdXBkYXRlcywgc2luY2Ugd2UncmUgYWxyZWFkeSBpbiB0aGUgbWlkZGxl
IG9mIGEgcGFpbnQtb3JkZXIgdHJlZSB3YWxrLCBhbmQgY2FuIGp1c3QKKyAgICAgICAga2VlcCB0
cmFjayBvZiB0aGUgY3VycmVudCBjb21wb3NpdGluZ0FuY2VzdG9yIG9uIHRoZSB3YXkgZG93bi4K
KworICAgICAgICBTaGF2ZXMgYSBmZXcgJSBvZmYgdGltZSBpbiB1cGRhdGVDb21wb3NpdGluZ0xh
eWVycygpLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRPZmZzZXRzOjpDb21wdXRlZE9mZnNldHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRPZmZzZXRzOjpmcm9tQW5jZXN0b3JHcmFwaGljc0xh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVByaW1h
cnlHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OlVwZGF0ZUJhY2tp
bmdUcmF2ZXJzYWxTdGF0ZTo6VXBkYXRlQmFja2luZ1RyYXZlcnNhbFN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6VXBkYXRlQmFja2luZ1RyYXZlcnNhbFN0
YXRlOjpzdGF0ZUZvckRlc2NlbmRhbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNr
aW5nQW5kSGllcmFyY2h5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlTGF5ZXJDb21wb3NpdGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvb3JkaW5hdGVkUG9zaXRpb25pbmdGb3JMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvb3JkaW5h
dGVkU2Nyb2xsaW5nUm9sZXNGb3JMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGlvbkZvckxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9k
ZUZvclBvc2l0aW9uaW5nUm9sZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oOgorCiAyMDE5LTA4LTMxICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIE1ha2UgImNsaXBzIGNvbXBvc2l0aW5nIGRlc2NlbmRhbnRzIiBh
biBpbmRpcmVjdCBjb21wb3NpdGluZyByZWFzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggZTYxNzI1OWJkYTU1ZjE4YTE3NzQ4Yzll
NzRiMGU4OTY2MTMzNmVhYy4uMGE1NDY1NzljZjZhZjIzNzNmMmNlYWJlOTNkZTE2Zjg2YWNjNmI5
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAKQEAgLTgzMSw3ICs4MzEsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29u
ZmlndXJhdGlvbkFmdGVyU3R5bGVDaGFuZ2UoKQogICAgIHVwZGF0ZUN1c3RvbUFwcGVhcmFuY2Uo
c3R5bGUpOwogfQogCi1ib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlv
bigpCitib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbihjb25zdCBS
ZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvcikKIHsKICAgICBBU1NFUlQoIW1fb3duaW5n
TGF5ZXIubm9ybWFsRmxvd0xpc3REaXJ0eSgpKTsKICAgICBBU1NFUlQoIW1fb3duaW5nTGF5ZXIu
ek9yZGVyTGlzdHNEaXJ0eSgpKTsKQEAgLTg2NSw3ICs4NjUsNyBAQCBib29sIFJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbigpCiAgICAgaWYgKHVwZGF0ZURlc2NlbmRhbnRD
bGlwcGluZ0xheWVyKG5lZWRzRGVzY2VuZGFudHNDbGlwcGluZ0xheWVyKSkKICAgICAgICAgbGF5
ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKIAotICAgIGF1dG8qIGNvbXBvc2l0aW5nQW5jZXN0b3Ig
PSBtX293bmluZ0xheWVyLmFuY2VzdG9yQ29tcG9zaXRpbmdMYXllcigpOworICAgIEFTU0VSVChj
b21wb3NpdGluZ0FuY2VzdG9yID09IG1fb3duaW5nTGF5ZXIuYW5jZXN0b3JDb21wb3NpdGluZ0xh
eWVyKCkpOwogICAgIGlmICh1cGRhdGVBbmNlc3RvckNsaXBwaW5nKGNvbXBvc2l0b3IuY2xpcHBl
ZEJ5QW5jZXN0b3IobV9vd25pbmdMYXllciwgY29tcG9zaXRpbmdBbmNlc3RvciksIGNvbXBvc2l0
aW5nQW5jZXN0b3IpKQogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwogCkBAIC0x
MDI2LDggKzEwMjYsOSBAQCBzdGF0aWMgTGF5b3V0U2l6ZSBjb21wdXRlT2Zmc2V0RnJvbUFuY2Vz
dG9yR3JhcGhpY3NMYXllcihjb25zdCBSZW5kZXJMYXllciogY29tcAogCiBjbGFzcyBDb21wdXRl
ZE9mZnNldHMgewogcHVibGljOgotICAgIENvbXB1dGVkT2Zmc2V0cyhjb25zdCBSZW5kZXJMYXll
ciYgcmVuZGVyTGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCwgY29uc3QgTGF5b3V0
UmVjdCYgcGFyZW50R3JhcGhpY3NMYXllclJlY3QsIGNvbnN0IExheW91dFJlY3QmIHByaW1hcnlH
cmFwaGljc0xheWVyUmVjdCkKKyAgICBDb21wdXRlZE9mZnNldHMoY29uc3QgUmVuZGVyTGF5ZXIm
IHJlbmRlckxheWVyLCBjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciwgY29u
c3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBwYXJlbnRHcmFwaGlj
c0xheWVyUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgcHJpbWFyeUdyYXBoaWNzTGF5ZXJSZWN0KQog
ICAgICAgICA6IG1fcmVuZGVyTGF5ZXIocmVuZGVyTGF5ZXIpCisgICAgICAgICwgbV9jb21wb3Np
dGluZ0FuY2VzdG9yKGNvbXBvc2l0aW5nQW5jZXN0b3IpCiAgICAgICAgICwgbV9sb2NhdGlvbihs
b2NhbFJlY3QubG9jYXRpb24oKSkKICAgICAgICAgLCBtX3BhcmVudEdyYXBoaWNzTGF5ZXJPZmZz
ZXQodG9MYXlvdXRTaXplKHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0LmxvY2F0aW9uKCkpKQogICAg
ICAgICAsIG1fcHJpbWFyeUdyYXBoaWNzTGF5ZXJPZmZzZXQodG9MYXlvdXRTaXplKHByaW1hcnlH
cmFwaGljc0xheWVyUmVjdC5sb2NhdGlvbigpKSkKQEAgLTEwNTMsOSArMTA1NCw4IEBAIHByaXZh
dGU6CiAgICAgTGF5b3V0U2l6ZSBmcm9tQW5jZXN0b3JHcmFwaGljc0xheWVyKCkKICAgICB7CiAg
ICAgICAgIGlmICghbV9mcm9tQW5jZXN0b3JHcmFwaGljc0xheWVyKSB7Ci0gICAgICAgICAgICBh
dXRvKiBjb21wb3NpdGVkQW5jZXN0b3IgPSBtX3JlbmRlckxheWVyLmFuY2VzdG9yQ29tcG9zaXRp
bmdMYXllcigpOwotICAgICAgICAgICAgTGF5b3V0UG9pbnQgbG9jYWxQb2ludEluQW5jZXN0b3JS
ZW5kZXJMYXllckNvb3JkcyA9IG1fcmVuZGVyTGF5ZXIuY29udmVydFRvTGF5ZXJDb29yZHMoY29t
cG9zaXRlZEFuY2VzdG9yLCBtX2xvY2F0aW9uLCBSZW5kZXJMYXllcjo6QWRqdXN0Rm9yQ29sdW1u
cyk7Ci0gICAgICAgICAgICBtX2Zyb21BbmNlc3RvckdyYXBoaWNzTGF5ZXIgPSBjb21wdXRlT2Zm
c2V0RnJvbUFuY2VzdG9yR3JhcGhpY3NMYXllcihjb21wb3NpdGVkQW5jZXN0b3IsIGxvY2FsUG9p
bnRJbkFuY2VzdG9yUmVuZGVyTGF5ZXJDb29yZHMsIG1fZGV2aWNlU2NhbGVGYWN0b3IpOworICAg
ICAgICAgICAgTGF5b3V0UG9pbnQgbG9jYWxQb2ludEluQW5jZXN0b3JSZW5kZXJMYXllckNvb3Jk
cyA9IG1fcmVuZGVyTGF5ZXIuY29udmVydFRvTGF5ZXJDb29yZHMobV9jb21wb3NpdGluZ0FuY2Vz
dG9yLCBtX2xvY2F0aW9uLCBSZW5kZXJMYXllcjo6QWRqdXN0Rm9yQ29sdW1ucyk7CisgICAgICAg
ICAgICBtX2Zyb21BbmNlc3RvckdyYXBoaWNzTGF5ZXIgPSBjb21wdXRlT2Zmc2V0RnJvbUFuY2Vz
dG9yR3JhcGhpY3NMYXllcihtX2NvbXBvc2l0aW5nQW5jZXN0b3IsIGxvY2FsUG9pbnRJbkFuY2Vz
dG9yUmVuZGVyTGF5ZXJDb29yZHMsIG1fZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBtX2Zyb21BbmNlc3RvckdyYXBoaWNzTGF5ZXIudmFsdWUoKTsKICAgICB9
CkBAIC0xMDY1LDYgKzEwNjUsNyBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPExheW91dFNpemU+
IG1fZnJvbVByaW1hcnlHcmFwaGljc0xheWVyOwogICAgIAogICAgIGNvbnN0IFJlbmRlckxheWVy
JiBtX3JlbmRlckxheWVyOworICAgIGNvbnN0IFJlbmRlckxheWVyKiBtX2NvbXBvc2l0aW5nQW5j
ZXN0b3I7CiAgICAgLy8gTG9jYXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlIHJlbmRlcmVyLgogICAg
IGNvbnN0IExheW91dFBvaW50IG1fbG9jYXRpb247CiAgICAgY29uc3QgTGF5b3V0U2l6ZSBtX3Bh
cmVudEdyYXBoaWNzTGF5ZXJPZmZzZXQ7CkBAIC0xMDcyLDkgKzEwNzMsOSBAQCBwcml2YXRlOgog
ICAgIGZsb2F0IG1fZGV2aWNlU2NhbGVGYWN0b3I7CiB9OwogCi1MYXlvdXRSZWN0IFJlbmRlckxh
eWVyQmFja2luZzo6Y29tcHV0ZVByaW1hcnlHcmFwaGljc0xheWVyUmVjdChjb25zdCBMYXlvdXRS
ZWN0JiBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5
ZXJCYWNraW5nOjpjb21wdXRlUHJpbWFyeUdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxh
eWVyKiBjb21wb3NpdGVkQW5jZXN0b3IsIGNvbnN0IExheW91dFJlY3QmIHBhcmVudEdyYXBoaWNz
TGF5ZXJSZWN0KSBjb25zdAogewotICAgIENvbXB1dGVkT2Zmc2V0cyBjb21wb3NpdGVkQm91bmRz
T2Zmc2V0KG1fb3duaW5nTGF5ZXIsIGNvbXBvc2l0ZWRCb3VuZHMoKSwgcGFyZW50R3JhcGhpY3NM
YXllclJlY3QsIHsgfSk7CisgICAgQ29tcHV0ZWRPZmZzZXRzIGNvbXBvc2l0ZWRCb3VuZHNPZmZz
ZXQobV9vd25pbmdMYXllciwgY29tcG9zaXRlZEFuY2VzdG9yLCBjb21wb3NpdGVkQm91bmRzKCks
IHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0LCB7IH0pOwogICAgIHJldHVybiBMYXlvdXRSZWN0KGVu
Y2xvc2VSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdCh0b0xheW91dFBvaW50KGNvbXBvc2l0
ZWRCb3VuZHNPZmZzZXQuZnJvbVBhcmVudEdyYXBoaWNzTGF5ZXIoKSksIGNvbXBvc2l0ZWRCb3Vu
ZHMoKS5zaXplKCkpLAogICAgICAgICBkZXZpY2VTY2FsZUZhY3RvcigpKSk7CiB9CkBAIC0xMTEy
LDcgKzExMTMsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVu
dEdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAgIHJldHVybiBwYXJlbnRH
cmFwaGljc0xheWVyUmVjdDsKIH0KIAotdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdl
b21ldHJ5KCkKK3ZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBS
ZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogewogICAgIEFTU0VSVCghbV9vd25pbmdM
YXllci5ub3JtYWxGbG93TGlzdERpcnR5KCkpOwogICAgIEFTU0VSVCghbV9vd25pbmdMYXllci56
T3JkZXJMaXN0c0RpcnR5KCkpOwpAQCAtMTEzOCw3ICsxMTM5LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KCkKICAgICB1cGRhdGVCbGVuZE1vZGUoc3R5bGUpOwog
I2VuZGlmCiAKLSAgICBhdXRvKiBjb21wb3NpdGVkQW5jZXN0b3IgPSBtX293bmluZ0xheWVyLmFu
Y2VzdG9yQ29tcG9zaXRpbmdMYXllcigpOworICAgIEFTU0VSVChjb21wb3NpdGVkQW5jZXN0b3Ig
PT0gbV9vd25pbmdMYXllci5hbmNlc3RvckNvbXBvc2l0aW5nTGF5ZXIoKSk7CiAgICAgTGF5b3V0
UmVjdCBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCA9IGNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVy
UmVjdChjb21wb3NpdGVkQW5jZXN0b3IpOwogCiAgICAgaWYgKG1fYW5jZXN0b3JDbGlwcGluZ1N0
YWNrKSB7CkBAIC0xMTY4LDEwICsxMTY5LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1
cGRhdGVHZW9tZXRyeSgpCiAgICAgICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gbGFzdENs
aXBMYXllclJlY3Q7CiAgICAgfQogCi0gICAgTGF5b3V0UmVjdCBwcmltYXJ5R3JhcGhpY3NMYXll
clJlY3QgPSBjb21wdXRlUHJpbWFyeUdyYXBoaWNzTGF5ZXJSZWN0KHBhcmVudEdyYXBoaWNzTGF5
ZXJSZWN0KTsKKyAgICBMYXlvdXRSZWN0IHByaW1hcnlHcmFwaGljc0xheWVyUmVjdCA9IGNvbXB1
dGVQcmltYXJ5R3JhcGhpY3NMYXllclJlY3QoY29tcG9zaXRlZEFuY2VzdG9yLCBwYXJlbnRHcmFw
aGljc0xheWVyUmVjdCk7CiAKLSAgICBDb21wdXRlZE9mZnNldHMgY29tcG9zaXRlZEJvdW5kc09m
ZnNldChtX293bmluZ0xheWVyLCBjb21wb3NpdGVkQm91bmRzKCksIHBhcmVudEdyYXBoaWNzTGF5
ZXJSZWN0LCBwcmltYXJ5R3JhcGhpY3NMYXllclJlY3QpOwotICAgIENvbXB1dGVkT2Zmc2V0cyBy
ZW5kZXJlck9mZnNldChtX293bmluZ0xheWVyLCB7IH0sIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0
LCBwcmltYXJ5R3JhcGhpY3NMYXllclJlY3QpOworICAgIENvbXB1dGVkT2Zmc2V0cyBjb21wb3Np
dGVkQm91bmRzT2Zmc2V0KG1fb3duaW5nTGF5ZXIsIGNvbXBvc2l0ZWRBbmNlc3RvciwgY29tcG9z
aXRlZEJvdW5kcygpLCBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCwgcHJpbWFyeUdyYXBoaWNzTGF5
ZXJSZWN0KTsKKyAgICBDb21wdXRlZE9mZnNldHMgcmVuZGVyZXJPZmZzZXQobV9vd25pbmdMYXll
ciwgY29tcG9zaXRlZEFuY2VzdG9yLCB7IH0sIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0LCBwcmlt
YXJ5R3JhcGhpY3NMYXllclJlY3QpOwogCiAgICAgbV9jb21wb3NpdGVkQm91bmRzT2Zmc2V0RnJv
bUdyYXBoaWNzTGF5ZXIgPSBjb21wb3NpdGVkQm91bmRzT2Zmc2V0LmZyb21QcmltYXJ5R3JhcGhp
Y3NMYXllcigpOwogCkBAIC0xMjgxLDcgKzEyODIsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR2VvbWV0cnkoKQogCiAgICAgaWYgKG1fb3duaW5nTGF5ZXIucmVmbGVjdGlvbkxh
eWVyKCkgJiYgbV9vd25pbmdMYXllci5yZWZsZWN0aW9uTGF5ZXIoKS0+aXNDb21wb3NpdGVkKCkp
IHsKICAgICAgICAgYXV0byogcmVmbGVjdGlvbkJhY2tpbmcgPSBtX293bmluZ0xheWVyLnJlZmxl
Y3Rpb25MYXllcigpLT5iYWNraW5nKCk7Ci0gICAgICAgIHJlZmxlY3Rpb25CYWNraW5nLT51cGRh
dGVHZW9tZXRyeSgpOworICAgICAgICByZWZsZWN0aW9uQmFja2luZy0+dXBkYXRlR2VvbWV0cnko
Jm1fb3duaW5nTGF5ZXIpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlIHJlZmxlY3Rpb24gbGF5
ZXIgaGFzIHRoZSBib3VuZHMgb2YgbV9vd25pbmdMYXllci5yZWZsZWN0aW9uTGF5ZXIoKSwKICAg
ICAgICAgLy8gYnV0IHRoZSByZWZsZWN0ZWQgbGF5ZXIgaXMgdGhlIGJvdW5kcyBvZiB0aGlzIGxh
eWVyLCBzbyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFwcHJvcHJpYXRlbHkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKaW5kZXggYjM1NGQwYjVjODI2
NzcyOTViYzFmYTc5NDQwODc1OTczOGYwZWZmMi4uZWQ2MDEzOGQ5MzVkZGJmYTMwMDcxN2I5MGI3
NGU0YThhM2JiMjEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuaApAQCAtODEsMTAgKzgxLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUNv
bmZpZ3VyYXRpb25BZnRlclN0eWxlQ2hhbmdlKCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
bGF5ZXIgY29uZmlndXJhdGlvbiBjaGFuZ2VkLgotICAgIGJvb2wgdXBkYXRlQ29uZmlndXJhdGlv
bigpOworICAgIGJvb2wgdXBkYXRlQ29uZmlndXJhdGlvbihjb25zdCBSZW5kZXJMYXllciogY29t
cG9zaXRpbmdBbmNlc3Rvcik7CiAKICAgICAvLyBVcGRhdGUgZ3JhcGhpY3MgbGF5ZXIgcG9zaXRp
b24gYW5kIGJvdW5kcy4KLSAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KCk7CisgICAgdm9pZCB1cGRh
dGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3Rvcik7CiAKICAg
ICAvLyBVcGRhdGUgc3RhdGUgdGhlIHJlcXVpcmVzIHRoYXQgZGVzY2VuZGFudCBsYXllcnMgaGF2
ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdm9pZCB1cGRhdGVBZnRlckRlc2NlbmRhbnRzKCk7CkBAIC0z
ODUsNyArMzg1LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgY2FuSXNzdWVTZXROZWVkc0Rpc3Bs
YXkoKSBjb25zdCB7IHJldHVybiAhcGFpbnRzSW50b1dpbmRvdygpICYmICFwYWludHNJbnRvQ29t
cG9zaXRlZEFuY2VzdG9yKCk7IH0KICAgICBMYXlvdXRSZWN0IGNvbXB1dGVQYXJlbnRHcmFwaGlj
c0xheWVyUmVjdChjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKSBjb25zdDsK
LSAgICBMYXlvdXRSZWN0IGNvbXB1dGVQcmltYXJ5R3JhcGhpY3NMYXllclJlY3QoY29uc3QgTGF5
b3V0UmVjdCYgcGFyZW50R3JhcGhpY3NMYXllclJlY3QpIGNvbnN0OworICAgIExheW91dFJlY3Qg
Y29tcHV0ZVByaW1hcnlHcmFwaGljc0xheWVyUmVjdChjb25zdCBSZW5kZXJMYXllciogY29tcG9z
aXRlZEFuY2VzdG9yLCBjb25zdCBMYXlvdXRSZWN0JiBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCkg
Y29uc3Q7CiAKICAgICBSZW5kZXJMYXllciYgbV9vd25pbmdMYXllcjsKICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXgg
MDQ5OTIyMzllYjZlNDliNDU4MTIxNjAyNjFmMTllNWI4M2E4YTU3Yy4uM2NjZTdjM2Q2OTgxZTRh
OTcxNzYzNjE1MGNlYWI5MjM3YzgzNDMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTE5OSw2ICsxOTksMjggQEAgc3Ry
dWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Q29tcG9zaXRpbmdTdGF0ZSB7CiAjZW5kaWYKIH07
CiAKK3N0cnVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OlVwZGF0ZUJhY2tpbmdUcmF2ZXJzYWxT
dGF0ZSB7CisKKyAgICBVcGRhdGVCYWNraW5nVHJhdmVyc2FsU3RhdGUoUmVuZGVyTGF5ZXIqIGNv
bXBBbmNlc3RvciA9IG51bGxwdHIpCisgICAgICAgIDogY29tcG9zaXRpbmdBbmNlc3Rvcihjb21w
QW5jZXN0b3IpCisgICAgeworICAgIH0KKworICAgIFVwZGF0ZUJhY2tpbmdUcmF2ZXJzYWxTdGF0
ZSBzdGF0ZUZvckRlc2NlbmRhbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIFVwZGF0ZUJhY2tp
bmdUcmF2ZXJzYWxTdGF0ZSBzdGF0ZShjb21wb3NpdGluZ0FuY2VzdG9yKTsKKyNpZiAhTE9HX0RJ
U0FCTEVECisgICAgICAgIHN0YXRlLmRlcHRoID0gZGVwdGggKyAxOworI2VuZGlmCisgICAgICAg
IHJldHVybiBzdGF0ZTsKKyAgICB9CisKKyAgICBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNl
c3RvcjsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdW5zaWduZWQgZGVwdGggeyAwIH07CisjZW5k
aWYKK307CisKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6QmFja2luZ1NoYXJpbmdTdGF0
ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFja2luZ1NoYXJpbmdTdGF0ZSk7CiBwdWJs
aWM6CkBAIC03OTEsOCArODEzLDkgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0
ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICAgICAg
aWYgKCFtX3JlbmRlclZpZXcuZnJhbWUoKS5pc01haW5GcmFtZSgpKQogICAgICAgICAgICAgc2Ny
b2xsaW5nVHJlZVN0YXRlLnBhcmVudE5vZGVJRCA9IGZyYW1lSG9zdGluZ05vZGVGb3JGcmFtZSht
X3JlbmRlclZpZXcuZnJhbWUoKSk7CiAKKyAgICAgICAgVXBkYXRlQmFja2luZ1RyYXZlcnNhbFN0
YXRlIHRyYXZlcnNhbFN0YXRlOwogICAgICAgICBWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiBj
aGlsZExpc3Q7Ci0gICAgICAgIHVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHkoKnVwZGF0ZVJvb3Qs
IGNoaWxkTGlzdCwgc2Nyb2xsaW5nVHJlZVN0YXRlKTsKKyAgICAgICAgdXBkYXRlQmFja2luZ0Fu
ZEhpZXJhcmNoeSgqdXBkYXRlUm9vdCwgY2hpbGRMaXN0LCB0cmF2ZXJzYWxTdGF0ZSwgc2Nyb2xs
aW5nVHJlZVN0YXRlKTsKIAogICAgICAgICAvLyBIb3N0IHRoZSBkb2N1bWVudCBsYXllciBpbiB0
aGUgUmVuZGVyVmlldydzIHJvb3QgbGF5ZXIuCiAgICAgICAgIGFwcGVuZERvY3VtZW50T3Zlcmxh
eUxheWVycyhjaGlsZExpc3QpOwpAQCAtMTA1Miw3ICsxMDc1LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciog
YW5jZXN0b3IKICAgICB9CiAKICAgICAvLyBVcGRhdGUgbGF5ZXIgc3RhdGUgYml0cy4KLSAgICBp
ZiAobGF5ZXIucmVmbGVjdGlvbkxheWVyKCkgJiYgdXBkYXRlTGF5ZXJDb21wb3NpdGluZ1N0YXRl
KCpsYXllci5yZWZsZWN0aW9uTGF5ZXIoKSwgcXVlcnlEYXRhLCBDb21wb3NpdGluZ0NoYW5nZVJl
cGFpbnROb3cpKQorICAgIGlmIChsYXllci5yZWZsZWN0aW9uTGF5ZXIoKSAmJiB1cGRhdGVMYXll
ckNvbXBvc2l0aW5nU3RhdGUoKmxheWVyLnJlZmxlY3Rpb25MYXllcigpLCAmbGF5ZXIsIHF1ZXJ5
RGF0YSwgQ29tcG9zaXRpbmdDaGFuZ2VSZXBhaW50Tm93KSkKICAgICAgICAgbGF5ZXIuc2V0TmVl
ZHNDb21wb3NpdGluZ0xheWVyQ29ubmVjdGlvbigpOwogICAgIAogICAgIC8vIEZJWE1FOiBjbGFy
aWZ5IG5lZWRzQ29tcG9zaXRpbmdQYWludE9yZGVyQ2hpbGRyZW5VcGRhdGUuIElmIGEgY29tcG9z
aXRlZCBsYXllciBnZXRzIGEgbmV3IGFuY2VzdG9yLCBpdCBuZWVkcyBnZW9tZXRyeSBjb21wdXRh
dGlvbnMuCkBAIC0xMTc1LDcgKzExOTgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
dHJhdmVyc2VVbmNoYW5nZWRTdWJ0cmVlKFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLAogICAg
IEFTU0VSVCghbGF5ZXIubmVlZHNDb21wb3NpdGluZ1JlcXVpcmVtZW50c1RyYXZlcnNhbCgpKTsK
IH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJj
aHkoUmVuZGVyTGF5ZXImIGxheWVyLCBWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiYgY2hpbGRM
YXllcnNPZkVuY2xvc2luZ0xheWVyLCBTY3JvbGxpbmdUcmVlU3RhdGUmIHNjcm9sbGluZ1RyZWVT
dGF0ZSwgT3B0aW9uU2V0PFVwZGF0ZUxldmVsPiB1cGRhdGVMZXZlbCwgaW50IGRlcHRoKQordm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHkoUmVuZGVy
TGF5ZXImIGxheWVyLCBWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiYgY2hpbGRMYXllcnNPZkVu
Y2xvc2luZ0xheWVyLCBVcGRhdGVCYWNraW5nVHJhdmVyc2FsU3RhdGUmIHRyYXZlcnNhbFN0YXRl
LCBTY3JvbGxpbmdUcmVlU3RhdGUmIHNjcm9sbGluZ1RyZWVTdGF0ZSwgT3B0aW9uU2V0PFVwZGF0
ZUxldmVsPiB1cGRhdGVMZXZlbCkKIHsKICAgICBsYXllci51cGRhdGVEZXNjZW5kYW50RGVwZW5k
ZW50RmxhZ3MoKTsKICAgICBsYXllci51cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKTsKQEAgLTEx
ODQsNyArMTIwNyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5n
QW5kSGllcmFyY2h5KFJlbmRlckxheWVyJiBsYXllciwgVmVjdG9yCiAgICAgaWYgKGxheWVyLmRl
c2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKSkKICAgICAg
ICAgdXBkYXRlTGV2ZWwuYWRkKFVwZGF0ZUxldmVsOjpBbGxEZXNjZW5kYW50cyk7CiAKLSAgICBT
Y3JvbGxpbmdUcmVlU3RhdGUgc3RhdGVGb3JEZXNjZW5kYW50cyA9IHNjcm9sbGluZ1RyZWVTdGF0
ZTsKKyAgICBTY3JvbGxpbmdUcmVlU3RhdGUgc2Nyb2xsaW5nU3RhdGVGb3JEZXNjZW5kYW50cyA9
IHNjcm9sbGluZ1RyZWVTdGF0ZTsKKyAgICBVcGRhdGVCYWNraW5nVHJhdmVyc2FsU3RhdGUgdHJh
dmVyc2FsU3RhdGVGb3JEZXNjZW5kYW50cyA9IHRyYXZlcnNhbFN0YXRlLnN0YXRlRm9yRGVzY2Vu
ZGFudHMoKTsKIAogICAgIGF1dG8qIGxheWVyQmFja2luZyA9IGxheWVyLmJhY2tpbmcoKTsKICAg
ICBpZiAobGF5ZXJCYWNraW5nKSB7CkBAIC0xMTk5LDcgKzEyMjMsNyBAQCB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeShSZW5kZXJMYXllciYgbGF5
ZXIsIFZlY3RvcgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobGF5ZXJOZWVkc1Vw
ZGF0ZSB8fCBsYXllci5uZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAobGF5ZXJCYWNraW5nLT51cGRhdGVDb25maWd1cmF0aW9uKCkpIHsKKyAg
ICAgICAgICAgIGlmIChsYXllckJhY2tpbmctPnVwZGF0ZUNvbmZpZ3VyYXRpb24odHJhdmVyc2Fs
U3RhdGUuY29tcG9zaXRpbmdBbmNlc3RvcikpIHsKICAgICAgICAgICAgICAgICBsYXllck5lZWRz
VXBkYXRlID0gdHJ1ZTsgLy8gV2UgYWxzbyBuZWVkIHRvIHVwZGF0ZSBnZW9tZXRyeS4KICAgICAg
ICAgICAgICAgICBsYXllci5zZXROZWVkc0NvbXBvc2l0aW5nTGF5ZXJDb25uZWN0aW9uKCk7CiAg
ICAgICAgICAgICB9CkBAIC0xMjA5LDcgKzEyMzMsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeShSZW5kZXJMYXllciYgbGF5ZXIsIFZlY3Rv
cgogICAgICAgICAKICAgICAgICAgT3B0aW9uU2V0PFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFncz4g
c2Nyb2xsaW5nTm9kZUNoYW5nZXMgPSB7IFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIg
fTsKICAgICAgICAgaWYgKGxheWVyTmVlZHNVcGRhdGUgfHwgbGF5ZXIubmVlZHNDb21wb3NpdGlu
Z0dlb21ldHJ5VXBkYXRlKCkpIHsKLSAgICAgICAgICAgIGxheWVyQmFja2luZy0+dXBkYXRlR2Vv
bWV0cnkoKTsKKyAgICAgICAgICAgIGxheWVyQmFja2luZy0+dXBkYXRlR2VvbWV0cnkodHJhdmVy
c2FsU3RhdGUuY29tcG9zaXRpbmdBbmNlc3Rvcik7CiAgICAgICAgICAgICBzY3JvbGxpbmdOb2Rl
Q2hhbmdlcy5hZGQoU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5KTsKICAg
ICAgICAgfSBlbHNlIGlmIChsYXllci5uZWVkc1Njcm9sbGluZ1RyZWVVcGRhdGUoKSkKICAgICAg
ICAgICAgIHNjcm9sbGluZ05vZGVDaGFuZ2VzLmFkZChTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6
OkxheWVyR2VvbWV0cnkpOwpAQCAtMTIyMiw3ICsxMjQ2LDcgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHkoUmVuZGVyTGF5ZXImIGxheWVyLCBW
ZWN0b3IKICAgICAgICAgaWYgKGF1dG8qIHJlZmxlY3Rpb24gPSBsYXllci5yZWZsZWN0aW9uTGF5
ZXIoKSkgewogICAgICAgICAgICAgaWYgKGF1dG8qIHJlZmxlY3Rpb25CYWNraW5nID0gcmVmbGVj
dGlvbi0+YmFja2luZygpKSB7CiAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbkJhY2tpbmctPnVw
ZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKTsKLSAgICAgICAgICAgICAgICByZWZsZWN0aW9uQmFja2lu
Zy0+dXBkYXRlR2VvbWV0cnkoKTsKKyAgICAgICAgICAgICAgICByZWZsZWN0aW9uQmFja2luZy0+
dXBkYXRlR2VvbWV0cnkoJmxheWVyKTsKICAgICAgICAgICAgICAgICByZWZsZWN0aW9uQmFja2lu
Zy0+dXBkYXRlQWZ0ZXJEZXNjZW5kYW50cygpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0xMjMyLDEzICsxMjU2LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVC
YWNraW5nQW5kSGllcmFyY2h5KFJlbmRlckxheWVyJiBsYXllciwgVmVjdG9yCiAKICAgICAgICAg
Ly8gRklYTUU6IGRvIGJhc2VkIG9uIGRpcnR5IGZsYWdzLiBOZWVkIHRvIGRvIHRoaXMgZm9yIGNo
YW5nZXMgb2YgZ2VvbWV0cnksIGNvbmZpZ3VyYXRpb24gYW5kIGhpZXJhcmNoeS4KICAgICAgICAg
Ly8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGRvIHRoZSByaWdodCB0aGluZyB3aGVuIGEgc2Nyb2xs
LWNvb3JkaW5hdGVkIGxheWVyIGxvc2VzIGEgc2Nyb2xsLWNvb3JkaW5hdGVkIGFuY2VzdG9yLgot
ICAgICAgICBzdGF0ZUZvckRlc2NlbmRhbnRzLnBhcmVudE5vZGVJRCA9IHVwZGF0ZVNjcm9sbENv
b3JkaW5hdGlvbkZvckxheWVyKGxheWVyLCBzY3JvbGxpbmdUcmVlU3RhdGUsIHNjcm9sbGluZ05v
ZGVDaGFuZ2VzKTsKLSAgICAgICAgc3RhdGVGb3JEZXNjZW5kYW50cy5uZXh0Q2hpbGRJbmRleCA9
IDA7CisgICAgICAgIHNjcm9sbGluZ1N0YXRlRm9yRGVzY2VuZGFudHMucGFyZW50Tm9kZUlEID0g
dXBkYXRlU2Nyb2xsQ29vcmRpbmF0aW9uRm9yTGF5ZXIobGF5ZXIsIHRyYXZlcnNhbFN0YXRlLmNv
bXBvc2l0aW5nQW5jZXN0b3IsIHNjcm9sbGluZ1RyZWVTdGF0ZSwgc2Nyb2xsaW5nTm9kZUNoYW5n
ZXMpOworICAgICAgICBzY3JvbGxpbmdTdGF0ZUZvckRlc2NlbmRhbnRzLm5leHRDaGlsZEluZGV4
ID0gMDsKKyAgICAgICAgCisgICAgICAgIHRyYXZlcnNhbFN0YXRlRm9yRGVzY2VuZGFudHMuY29t
cG9zaXRpbmdBbmNlc3RvciA9ICZsYXllcjsKIAogI2lmICFMT0dfRElTQUJMRUQKLSAgICAgICAg
bG9nTGF5ZXJJbmZvKGxheWVyLCAidXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeSIsIGRlcHRoKTsK
LSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShkZXB0aCk7CisgICAgICAgIGxvZ0xheWVySW5m
byhsYXllciwgInVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHkiLCB0cmF2ZXJzYWxTdGF0ZS5kZXB0
aCk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTEyNjksMTUgKzEyOTMsMTUgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHkoUmVuZGVyTGF5ZXImIGxh
eWVyLCBWZWN0b3IKIAogICAgIGlmIChyZXF1aXJlRGVzY2VuZGFudFRyYXZlcnNhbCkgewogICAg
ICAgICBmb3IgKGF1dG8qIHJlbmRlckxheWVyIDogbGF5ZXIubmVnYXRpdmVaT3JkZXJMYXllcnMo
KSkKLSAgICAgICAgICAgIHVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHkoKnJlbmRlckxheWVyLCBj
aGlsZExpc3QsIHN0YXRlRm9yRGVzY2VuZGFudHMsIHVwZGF0ZUxldmVsLCBkZXB0aCArIDEpOwor
ICAgICAgICAgICAgdXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeSgqcmVuZGVyTGF5ZXIsIGNoaWxk
TGlzdCwgdHJhdmVyc2FsU3RhdGVGb3JEZXNjZW5kYW50cywgc2Nyb2xsaW5nU3RhdGVGb3JEZXNj
ZW5kYW50cywgdXBkYXRlTGV2ZWwpOwogCiAgICAgICAgIGFwcGVuZEZvcmVncm91bmRMYXllcklm
TmVjZXNzYXJ5KCk7CiAKICAgICAgICAgZm9yIChhdXRvKiByZW5kZXJMYXllciA6IGxheWVyLm5v
cm1hbEZsb3dMYXllcnMoKSkKLSAgICAgICAgICAgIHVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHko
KnJlbmRlckxheWVyLCBjaGlsZExpc3QsIHN0YXRlRm9yRGVzY2VuZGFudHMsIHVwZGF0ZUxldmVs
LCBkZXB0aCArIDEpOworICAgICAgICAgICAgdXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeSgqcmVu
ZGVyTGF5ZXIsIGNoaWxkTGlzdCwgdHJhdmVyc2FsU3RhdGVGb3JEZXNjZW5kYW50cywgc2Nyb2xs
aW5nU3RhdGVGb3JEZXNjZW5kYW50cywgdXBkYXRlTGV2ZWwpOwogICAgICAgICAKICAgICAgICAg
Zm9yIChhdXRvKiByZW5kZXJMYXllciA6IGxheWVyLnBvc2l0aXZlWk9yZGVyTGF5ZXJzKCkpCi0g
ICAgICAgICAgICB1cGRhdGVCYWNraW5nQW5kSGllcmFyY2h5KCpyZW5kZXJMYXllciwgY2hpbGRM
aXN0LCBzdGF0ZUZvckRlc2NlbmRhbnRzLCB1cGRhdGVMZXZlbCwgZGVwdGggKyAxKTsKKyAgICAg
ICAgICAgIHVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHkoKnJlbmRlckxheWVyLCBjaGlsZExpc3Qs
IHRyYXZlcnNhbFN0YXRlRm9yRGVzY2VuZGFudHMsIHNjcm9sbGluZ1N0YXRlRm9yRGVzY2VuZGFu
dHMsIHVwZGF0ZUxldmVsKTsKICAgICB9IGVsc2UgaWYgKHJlcXVpcmVzQ2hpbGRSZWJ1aWxkKQog
ICAgICAgICBhcHBlbmRGb3JlZ3JvdW5kTGF5ZXJJZk5lY2Vzc2FyeSgpOwogCkBAIC0xNjg5LDEz
ICsxNzEzLDEzIEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKFJl
bmRlckxheWVyJiBsYXllciwgUmVxdWlyZXNDb21wb3NpdGluCiAgICAgcmV0dXJuIGxheWVyQ2hh
bmdlZDsKIH0KIAotYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyQ29tcG9z
aXRpbmdTdGF0ZShSZW5kZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdEYXRhJiBx
dWVyeURhdGEsIENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludCBzaG91bGRSZXBhaW50KQorYm9vbCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyQ29tcG9zaXRpbmdTdGF0ZShSZW5kZXJM
YXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yLCBSZXF1
aXJlc0NvbXBvc2l0aW5nRGF0YSYgcXVlcnlEYXRhLCBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnQg
c2hvdWxkUmVwYWludCkKIHsKICAgICBib29sIGxheWVyQ2hhbmdlZCA9IHVwZGF0ZUJhY2tpbmco
bGF5ZXIsIHF1ZXJ5RGF0YSwgc2hvdWxkUmVwYWludCk7CiAKICAgICAvLyBTZWUgaWYgd2UgbmVl
ZCBjb250ZW50IG9yIGNsaXBwaW5nIGxheWVycy4gTWV0aG9kcyBjYWxsZWQgaGVyZSBzaG91bGQg
YXNzdW1lCiAgICAgLy8gdGhhdCB0aGUgY29tcG9zaXRpbmcgc3RhdGUgb2YgZGVzY2VuZGFudCBs
YXllcnMgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgeWV0LgotICAgIGlmIChsYXllci5iYWNraW5nKCkg
JiYgbGF5ZXIuYmFja2luZygpLT51cGRhdGVDb25maWd1cmF0aW9uKCkpCisgICAgaWYgKGxheWVy
LmJhY2tpbmcoKSAmJiBsYXllci5iYWNraW5nKCktPnVwZGF0ZUNvbmZpZ3VyYXRpb24oY29tcG9z
aXRpbmdBbmNlc3RvcikpCiAgICAgICAgIGxheWVyQ2hhbmdlZCA9IHRydWU7CiAKICAgICByZXR1
cm4gbGF5ZXJDaGFuZ2VkOwpAQCAtMzI0MSw3ICszMjY1LDcgQEAgc3RhdGljIHZvaWQgY29sbGVj
dFN0YXRpb25hcnlMYXllclJlbGF0ZWRPdmVyZmxvd05vZGVzKGNvbnN0IFJlbmRlckxheWVyJiBs
YXllciwKICAgICB9KTsKIH0KIAotU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvciBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmNvbXB1dGVDb29yZGluYXRlZFBvc2l0aW9uaW5nRm9yTGF5ZXIoY29uc3Qg
UmVuZGVyTGF5ZXImIGxheWVyKSBjb25zdAorU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvciBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb29yZGluYXRlZFBvc2l0aW9uaW5nRm9yTGF5ZXIo
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFu
Y2VzdG9yKSBjb25zdAogewogICAgIGlmIChsYXllci5pc1JlbmRlclZpZXdMYXllcigpKQogICAg
ICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZTsKQEAgLTMyNTYsNyAr
MzI4MCw2IEBAIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3IgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojpjb21wdXRlQ29vcmRpbmF0ZWRQb3NpdGlvbmluZ0ZvCiAgICAgaWYgKCFzY3JvbGxpbmdDb29y
ZGluYXRvcikKICAgICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3I6Ok5vbmU7
CiAKLSAgICBhdXRvKiBjb21wb3NpdGVkQW5jZXN0b3IgPSBsYXllci5hbmNlc3RvckNvbXBvc2l0
aW5nTGF5ZXIoKTsKICAgICBpZiAoIWNvbXBvc2l0ZWRBbmNlc3RvcikgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZp
b3I6Ok5vbmU7CkBAIC00MzA2LDcgKzQzMjksNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6ZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIE9wdAog
ICAgIGJhY2tpbmctPmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcihyb2xlcyk7CiB9CiAK
LU9wdGlvblNldDxTY3JvbGxDb29yZGluYXRpb25Sb2xlPiBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmNvb3JkaW5hdGVkU2Nyb2xsaW5nUm9sZXNGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5
ZXIpIGNvbnN0CitPcHRpb25TZXQ8U2Nyb2xsQ29vcmRpbmF0aW9uUm9sZT4gUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpjb29yZGluYXRlZFNjcm9sbGluZ1JvbGVzRm9yTGF5ZXIoY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvcikgY29u
c3QKIHsKICAgICBPcHRpb25TZXQ8U2Nyb2xsQ29vcmRpbmF0aW9uUm9sZT4gY29vcmRpbmF0aW9u
Um9sZXM7CiAgICAgaWYgKGlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlja3lMYXllcihs
YXllcikpCkBAIC00MzE1LDcgKzQzMzgsNyBAQCBPcHRpb25TZXQ8U2Nyb2xsQ29vcmRpbmF0aW9u
Um9sZT4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb29yZGluYXRlZFNjcm9sbGluZ1JvbAogICAg
IGlmICh1c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKGxheWVyKSkKICAgICAgICAgY29v
cmRpbmF0aW9uUm9sZXMuYWRkKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7CiAK
LSAgICBhdXRvIGNvb3JkaW5hdGVkUG9zaXRpb25pbmcgPSBjb21wdXRlQ29vcmRpbmF0ZWRQb3Np
dGlvbmluZ0ZvckxheWVyKGxheWVyKTsKKyAgICBhdXRvIGNvb3JkaW5hdGVkUG9zaXRpb25pbmcg
PSBjb21wdXRlQ29vcmRpbmF0ZWRQb3NpdGlvbmluZ0ZvckxheWVyKGxheWVyLCBjb21wb3NpdGlu
Z0FuY2VzdG9yKTsKICAgICBzd2l0Y2ggKGNvb3JkaW5hdGVkUG9zaXRpb25pbmcpIHsKICAgICBj
YXNlIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3I6Ok1vdmVzOgogICAgICAgICBjb29yZGluYXRp
b25Sb2xlcy5hZGQoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nUHJveHkpOwpAQCAt
NDMzMyw5ICs0MzU2LDkgQEAgT3B0aW9uU2V0PFNjcm9sbENvb3JkaW5hdGlvblJvbGU+IFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y29vcmRpbmF0ZWRTY3JvbGxpbmdSb2wKICAgICByZXR1cm4gY29v
cmRpbmF0aW9uUm9sZXM7CiB9CiAKLVNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGlvbkZvckxheWVyKFJlbmRlckxheWVyJiBsYXllciwg
U2Nyb2xsaW5nVHJlZVN0YXRlJiB0cmVlU3RhdGUsIE9wdGlvblNldDxTY3JvbGxpbmdOb2RlQ2hh
bmdlRmxhZ3M+IGNoYW5nZXMpCitTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVTY3JvbGxDb29yZGluYXRpb25Gb3JMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIGNv
bnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yLCBTY3JvbGxpbmdUcmVlU3RhdGUm
IHRyZWVTdGF0ZSwgT3B0aW9uU2V0PFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFncz4gY2hhbmdlcykK
IHsKLSAgICBhdXRvIHJvbGVzID0gY29vcmRpbmF0ZWRTY3JvbGxpbmdSb2xlc0ZvckxheWVyKGxh
eWVyKTsKKyAgICBhdXRvIHJvbGVzID0gY29vcmRpbmF0ZWRTY3JvbGxpbmdSb2xlc0ZvckxheWVy
KGxheWVyLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgaWYgKG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcikgewpAQCAtNDM1OCw3
ICs0MzgxLDcgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
U2Nyb2xsQ29vcmRpbmF0aW9uRm9yTGF5ZXIoUmVuZGVyTGEKIAogICAgIC8vIElmIHRoZXJlJ3Mg
YSBwb3NpdGlvbmluZyBub2RlLCBpdCdzIHRoZSBwYXJlbnQgc2Nyb2xsaW5nIG5vZGUgZm9yIGZp
eGVkL3N0aWNreS9zY3JvbGxpbmcvZnJhbWUgaG9zdGluZy4KICAgICBpZiAocm9sZXMuY29udGFp
bnMoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6UG9zaXRpb25pbmcpKSB7Ci0gICAgICAgIG5ld05v
ZGVJRCA9IHVwZGF0ZVNjcm9sbGluZ05vZGVGb3JQb3NpdGlvbmluZ1JvbGUobGF5ZXIsICpjdXJy
ZW50VHJlZVN0YXRlLCBjaGFuZ2VzKTsKKyAgICAgICAgbmV3Tm9kZUlEID0gdXBkYXRlU2Nyb2xs
aW5nTm9kZUZvclBvc2l0aW9uaW5nUm9sZShsYXllciwgY29tcG9zaXRpbmdBbmNlc3RvciwgKmN1
cnJlbnRUcmVlU3RhdGUsIGNoYW5nZXMpOwogICAgICAgICBjaGlsZFRyZWVTdGF0ZS5wYXJlbnRO
b2RlSUQgPSBuZXdOb2RlSUQ7CiAgICAgICAgIGN1cnJlbnRUcmVlU3RhdGUgPSAmY2hpbGRUcmVl
U3RhdGU7CiAgICAgfSBlbHNlCkBAIC00NTg0LDcgKzQ2MDcsNyBAQCBTY3JvbGxpbmdOb2RlSUQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yRnJhbWVIb3N0aW5n
Um9sZShSZQogICAgIHJldHVybiBuZXdOb2RlSUQ7CiB9CiAKLVNjcm9sbGluZ05vZGVJRCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JQb3NpdGlvbmluZ1JvbGUo
UmVuZGVyTGF5ZXImIGxheWVyLCBTY3JvbGxpbmdUcmVlU3RhdGUmIHRyZWVTdGF0ZSwgT3B0aW9u
U2V0PFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFncz4gY2hhbmdlcykKK1Njcm9sbGluZ05vZGVJRCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JQb3NpdGlvbmluZ1Jv
bGUoUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNl
c3RvciwgU2Nyb2xsaW5nVHJlZVN0YXRlJiB0cmVlU3RhdGUsIE9wdGlvblNldDxTY3JvbGxpbmdO
b2RlQ2hhbmdlRmxhZ3M+IGNoYW5nZXMpCiB7CiAgICAgYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0
b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpOwogCkBAIC00NjAxLDcgKzQ2MjQsNyBA
QCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdO
b2RlRm9yUG9zaXRpb25pbmdSb2xlKFJlbgogCiAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdO
b2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkg
ewogICAgICAgICAvLyBXb3VsZCBiZSBuaWNlIHRvIGF2b2lkIGNhbGxpbmcgY29tcHV0ZUNvb3Jk
aW5hdGVkUG9zaXRpb25pbmdGb3JMYXllcigpIGFnYWluLgotICAgICAgICBhdXRvIHBvc2l0aW9u
aW5nQmVoYXZpb3IgPSBjb21wdXRlQ29vcmRpbmF0ZWRQb3NpdGlvbmluZ0ZvckxheWVyKGxheWVy
KTsKKyAgICAgICAgYXV0byBwb3NpdGlvbmluZ0JlaGF2aW9yID0gY29tcHV0ZUNvb3JkaW5hdGVk
UG9zaXRpb25pbmdGb3JMYXllcihsYXllciwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CiAgICAgICAg
IGF1dG8gcmVsYXRlZE5vZGVJRHMgPSBjb2xsZWN0UmVsYXRlZENvb3JkaW5hdGVkU2Nyb2xsaW5n
Tm9kZXMobGF5ZXIsIHBvc2l0aW9uaW5nQmVoYXZpb3IpOwogICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci0+c2V0UmVsYXRlZE92ZXJmbG93U2Nyb2xsaW5nTm9kZXMobmV3Tm9kZUlELCBXVEZN
b3ZlKHJlbGF0ZWROb2RlSURzKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCBkZTZjODAzYzI0MmU1MGIyZDgxNTlkOGUxYmFm
MGE3M2ZkZWI5YmRmLi5mY2Y5MDRkMmI0ZmQ4ZDRlZDA0ODNiZWQwNjNkNjQwNGUxYmI3OGY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
CkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgogICAgICAgICBib29sIHJlZXZhbHVhdGVBZnRl
ckxheW91dCB7IGZhbHNlIH07CiAgICAgfTsKIAotICAgIGJvb2wgdXBkYXRlTGF5ZXJDb21wb3Np
dGluZ1N0YXRlKFJlbmRlckxheWVyJiwgUmVxdWlyZXNDb21wb3NpdGluZ0RhdGEmLCBDb21wb3Np
dGluZ0NoYW5nZVJlcGFpbnQgPSBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnROb3cpOworICAgIGJv
b2wgdXBkYXRlTGF5ZXJDb21wb3NpdGluZ1N0YXRlKFJlbmRlckxheWVyJiwgY29uc3QgUmVuZGVy
TGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IsIFJlcXVpcmVzQ29tcG9zaXRpbmdEYXRhJiwgQ29t
cG9zaXRpbmdDaGFuZ2VSZXBhaW50ID0gQ29tcG9zaXRpbmdDaGFuZ2VSZXBhaW50Tm93KTsKIAog
ICAgIC8vIFdoZXRoZXIgbGF5ZXIncyBiYWNraW5nIG5lZWRzIGEgZ3JhcGhpY3MgbGF5ZXIgdG8g
ZG8gY2xpcHBpbmcgYnkgYW4gYW5jZXN0b3IgKG5vbi1zdGFja2luZy1jb250ZXh0IHBhcmVudCB3
aXRoIG92ZXJmbG93KS4KICAgICBib29sIGNsaXBwZWRCeUFuY2VzdG9yKFJlbmRlckxheWVyJiwg
Y29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IpIGNvbnN0OwpAQCAtMzQ3LDcg
KzM0Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogbWFrZSB0aGUgY29vcmRpbmF0ZWQvYXN5
bmMgdGVybWlub2xvZ3kgY29uc2lzdGVudC4KICAgICBib29sIGlzVmlld3BvcnRDb25zdHJhaW5l
ZEZpeGVkT3JTdGlja3lMYXllcihjb25zdCBSZW5kZXJMYXllciYpIGNvbnN0OwogICAgIGJvb2wg
dXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciYpIGNvbnN0
OwotICAgIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3IgY29tcHV0ZUNvb3JkaW5hdGVkUG9zaXRp
b25pbmdGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciYpIGNvbnN0OworICAgIFNjcm9sbFBvc2l0
aW9uaW5nQmVoYXZpb3IgY29tcHV0ZUNvb3JkaW5hdGVkUG9zaXRpb25pbmdGb3JMYXllcihjb25z
dCBSZW5kZXJMYXllciYsIGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yKSBj
b25zdDsKICAgICBib29sIGlzTGF5ZXJGb3JJRnJhbWVXaXRoU2Nyb2xsQ29vcmRpbmF0ZWRDb250
ZW50cyhjb25zdCBSZW5kZXJMYXllciYpIGNvbnN0OwogCiAgICAgU2Nyb2xsYWJsZUFyZWEqIHNj
cm9sbGFibGVBcmVhRm9yU2Nyb2xsTGF5ZXJJRChTY3JvbGxpbmdOb2RlSUQpIGNvbnN0OwpAQCAt
MzkwLDYgKzM5MCw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgQmFja2luZ1NoYXJpbmdTdGF0ZTsK
ICAgICBzdHJ1Y3QgQ29tcG9zaXRpbmdTdGF0ZTsKICAgICBzdHJ1Y3QgT3ZlcmxhcEV4dGVudDsK
KyAgICBzdHJ1Y3QgVXBkYXRlQmFja2luZ1RyYXZlcnNhbFN0YXRlOwogCiAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBwb2xpY3kgY2hhbmdlZC4KICAgICBib29sIHVwZGF0ZUNvbXBvc2l0aW5n
UG9saWN5KCk7CkBAIC00NDAsNyArNDQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ29tcG9zaXRl
ZENoaWxkcmVuICAgICAgPSAxIDw8IDEsCiAgICAgfTsKICAgICAvLyBSZWN1cnNlcyBkb3duIHRo
ZSB0cmVlLCBwYXJlbnRpbmcgZGVzY2VuZGFudCBjb21wb3NpdGluZyBsYXllcnMgYW5kIGNvbGxl
Y3RpbmcgYW4gYXJyYXkgb2YgY2hpbGQgbGF5ZXJzIGZvciB0aGUgY3VycmVudCBjb21wb3NpdGlu
ZyBsYXllci4KLSAgICB2b2lkIHVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHkoUmVuZGVyTGF5ZXIm
LCBWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiYgY2hpbGRHcmFwaGljc0xheWVyc09mRW5jbG9z
aW5nTGF5ZXIsIHN0cnVjdCBTY3JvbGxpbmdUcmVlU3RhdGUmLCBPcHRpb25TZXQ8VXBkYXRlTGV2
ZWw+ID0geyB9LCBpbnQgZGVwdGggPSAwKTsKKyAgICB2b2lkIHVwZGF0ZUJhY2tpbmdBbmRIaWVy
YXJjaHkoUmVuZGVyTGF5ZXImLCBWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiYgY2hpbGRHcmFw
aGljc0xheWVyc09mRW5jbG9zaW5nTGF5ZXIsIHN0cnVjdCBVcGRhdGVCYWNraW5nVHJhdmVyc2Fs
U3RhdGUmLCBzdHJ1Y3QgU2Nyb2xsaW5nVHJlZVN0YXRlJiwgT3B0aW9uU2V0PFVwZGF0ZUxldmVs
PiA9IHsgfSk7CiAKICAgICBib29sIGxheWVySGFzM0RDb250ZW50KGNvbnN0IFJlbmRlckxheWVy
JikgY29uc3Q7CiAgICAgYm9vbCBpc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24oUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCYpIGNvbnN0OwpAQCAtNTEyLDE3ICs1MTMsMTcgQEAgcHJpdmF0ZToKICAg
ICBTY3JvbGxpbmdOb2RlSUQgYXR0YWNoU2Nyb2xsaW5nTm9kZShSZW5kZXJMYXllciYsIFNjcm9s
bGluZ05vZGVUeXBlLCBzdHJ1Y3QgU2Nyb2xsaW5nVHJlZVN0YXRlJik7CiAgICAgU2Nyb2xsaW5n
Tm9kZUlEIHJlZ2lzdGVyU2Nyb2xsaW5nTm9kZUlEKFNjcm9sbGluZ0Nvb3JkaW5hdG9yJiwgU2Ny
b2xsaW5nTm9kZUlELCBTY3JvbGxpbmdOb2RlVHlwZSwgc3RydWN0IFNjcm9sbGluZ1RyZWVTdGF0
ZSYpOwogCi0gICAgT3B0aW9uU2V0PFNjcm9sbENvb3JkaW5hdGlvblJvbGU+IGNvb3JkaW5hdGVk
U2Nyb2xsaW5nUm9sZXNGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciYpIGNvbnN0OworICAgIE9w
dGlvblNldDxTY3JvbGxDb29yZGluYXRpb25Sb2xlPiBjb29yZGluYXRlZFNjcm9sbGluZ1JvbGVz
Rm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImLCBjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRp
bmdBbmNlc3RvcikgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBTY3JvbGxpbmdOb2RlSUQg
d2hpY2ggYWN0cyBhcyB0aGUgcGFyZW50IGZvciBjaGlsZHJlbi4KLSAgICBTY3JvbGxpbmdOb2Rl
SUQgdXBkYXRlU2Nyb2xsQ29vcmRpbmF0aW9uRm9yTGF5ZXIoUmVuZGVyTGF5ZXImLCBzdHJ1Y3Qg
U2Nyb2xsaW5nVHJlZVN0YXRlJiwgT3B0aW9uU2V0PFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFncz4p
OworICAgIFNjcm9sbGluZ05vZGVJRCB1cGRhdGVTY3JvbGxDb29yZGluYXRpb25Gb3JMYXllcihS
ZW5kZXJMYXllciYsIGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yLCBzdHJ1
Y3QgU2Nyb2xsaW5nVHJlZVN0YXRlJiwgT3B0aW9uU2V0PFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFn
cz4pOwogCiAgICAgLy8gVGhlc2UgcmV0dXJuIHRoZSBTY3JvbGxpbmdOb2RlSUQgd2hpY2ggYWN0
cyBhcyB0aGUgcGFyZW50IGZvciBjaGlsZHJlbi4KICAgICBTY3JvbGxpbmdOb2RlSUQgdXBkYXRl
U2Nyb2xsaW5nTm9kZUZvclZpZXdwb3J0Q29uc3RyYWluZWRSb2xlKFJlbmRlckxheWVyJiwgc3Ry
dWN0IFNjcm9sbGluZ1RyZWVTdGF0ZSYsIE9wdGlvblNldDxTY3JvbGxpbmdOb2RlQ2hhbmdlRmxh
Z3M+KTsKICAgICBTY3JvbGxpbmdOb2RlSUQgdXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGlu
Z1JvbGUoUmVuZGVyTGF5ZXImLCBzdHJ1Y3QgU2Nyb2xsaW5nVHJlZVN0YXRlJiwgT3B0aW9uU2V0
PFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFncz4pOwogICAgIFNjcm9sbGluZ05vZGVJRCB1cGRhdGVT
Y3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUHJveHlSb2xlKFJlbmRlckxheWVyJiwgc3RydWN0IFNj
cm9sbGluZ1RyZWVTdGF0ZSYsIE9wdGlvblNldDxTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M+KTsK
ICAgICBTY3JvbGxpbmdOb2RlSUQgdXBkYXRlU2Nyb2xsaW5nTm9kZUZvckZyYW1lSG9zdGluZ1Jv
bGUoUmVuZGVyTGF5ZXImLCBzdHJ1Y3QgU2Nyb2xsaW5nVHJlZVN0YXRlJiwgT3B0aW9uU2V0PFNj
cm9sbGluZ05vZGVDaGFuZ2VGbGFncz4pOwotICAgIFNjcm9sbGluZ05vZGVJRCB1cGRhdGVTY3Jv
bGxpbmdOb2RlRm9yUG9zaXRpb25pbmdSb2xlKFJlbmRlckxheWVyJiwgc3RydWN0IFNjcm9sbGlu
Z1RyZWVTdGF0ZSYsIE9wdGlvblNldDxTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M+KTsKKyAgICBT
Y3JvbGxpbmdOb2RlSUQgdXBkYXRlU2Nyb2xsaW5nTm9kZUZvclBvc2l0aW9uaW5nUm9sZShSZW5k
ZXJMYXllciYsIGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yLCBzdHJ1Y3Qg
U2Nyb2xsaW5nVHJlZVN0YXRlJiwgT3B0aW9uU2V0PFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFncz4p
OwogCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKFNjcm9sbGluZ05vZGVJRCwg
UmVuZGVyTGF5ZXImLCBTY3JvbGxpbmdDb29yZGluYXRvciYpOwogCg==
</data>
<flag name="review"
          id="393542"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>