<?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>227899</bug_id>
          
          <creation_ts>2021-07-13 00:13:43 -0700</creation_ts>
          <short_desc>Rename hasOverflowClip() to prepare for the real overflow:clip</short_desc>
          <delta_ts>2021-07-14 13:41:37 -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>CSS</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>
          
          <blocked>198230</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Rob Buis">rbuis</reporter>
          <assigned_to name="Rob Buis">rbuis</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1776567</commentid>
    <comment_count>0</comment_count>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-07-13 00:13:43 -0700</bug_when>
    <thetext>Introduce isScrollContainer helper and start using it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776571</commentid>
    <comment_count>1</comment_count>
      <attachid>433393</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-07-13 00:30:36 -0700</bug_when>
    <thetext>Created attachment 433393
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776582</commentid>
    <comment_count>2</comment_count>
      <attachid>433396</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-07-13 02:38:49 -0700</bug_when>
    <thetext>Created attachment 433396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776649</commentid>
    <comment_count>3</comment_count>
      <attachid>433396</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-07-13 09:39:21 -0700</bug_when>
    <thetext>Comment on attachment 433396
Patch

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

&gt; Source/WebCore/ChangeLog:14
&gt; +        The overflow property decides whether the RenderObject
&gt; +        is scrollable, isScrollContainer captures this.
&gt; +        Right now isScrollContainer will only return false for
&gt; +        overflow visible, but the upcoming overflow clip is
&gt; +        also not scrollable.

Let&apos;s choose a good name for this.

isScrollContainer() is vague because the element might not be scrollable, and overflow:hidden is not user-scrollable, but is programmatically scrollable. I want &quot;overflow&quot; in the name, because it&apos;s about the overflow property.

We also need to decide if this helper will return true or false for overflow:clip, and if we need another helper for the visible/clip combination.

For the current behavior, I suggest:

hasNonVisibleOverflow()

For the future &quot;potentially scrollable&quot; case I suggest:

hasPotentiallyScrollableOverfow() or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776700</commentid>
    <comment_count>4</comment_count>
      <attachid>433435</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-07-13 11:41:15 -0700</bug_when>
    <thetext>Created attachment 433435
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776702</commentid>
    <comment_count>5</comment_count>
      <attachid>433396</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-07-13 11:44:12 -0700</bug_when>
    <thetext>Comment on attachment 433396
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt; +        also not scrollable.
&gt; 
&gt; Let&apos;s choose a good name for this.
&gt; 
&gt; isScrollContainer() is vague because the element might not be scrollable, and overflow:hidden is not user-scrollable, but is programmatically scrollable. I want &quot;overflow&quot; in the name, because it&apos;s about the overflow property.
&gt; 
&gt; We also need to decide if this helper will return true or false for overflow:clip, and if we need another helper for the visible/clip combination.
&gt; 
&gt; For the current behavior, I suggest:
&gt; 
&gt; hasNonVisibleOverflow()
&gt; 
&gt; For the future &quot;potentially scrollable&quot; case I suggest:
&gt; 
&gt; hasPotentiallyScrollableOverfow() or something.

That makes sense. But hasNonVisibleOverflow would just be a rename of hasOverflowClip I think (chromium did this)?

I think it helps readibility and overflow: clip to add a method hasProgrammaticallyScrollableOverflow for programmatic scroll API, let me know what you think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776708</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-07-13 12:05:02 -0700</bug_when>
    <thetext>(In reply to Rob Buis from comment #5)
&gt; Comment on attachment 433396 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=433396&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:14
&gt; &gt;&gt; +        also not scrollable.
&gt; &gt; 
&gt; &gt; Let&apos;s choose a good name for this.
&gt; &gt; 
&gt; &gt; isScrollContainer() is vague because the element might not be scrollable, and overflow:hidden is not user-scrollable, but is programmatically scrollable. I want &quot;overflow&quot; in the name, because it&apos;s about the overflow property.
&gt; &gt; 
&gt; &gt; We also need to decide if this helper will return true or false for overflow:clip, and if we need another helper for the visible/clip combination.
&gt; &gt; 
&gt; &gt; For the current behavior, I suggest:
&gt; &gt; 
&gt; &gt; hasNonVisibleOverflow()
&gt; &gt; 
&gt; &gt; For the future &quot;potentially scrollable&quot; case I suggest:
&gt; &gt; 
&gt; &gt; hasPotentiallyScrollableOverfow() or something.
&gt; 
&gt; That makes sense. But hasNonVisibleOverflow would just be a rename of
&gt; hasOverflowClip I think (chromium did this)?

That&apos;s the point!
 
&gt; I think it helps readibility and overflow: clip to add a method
&gt; hasProgrammaticallyScrollableOverflow for programmatic scroll API, let me
&gt; know what you think.

But hasProgrammaticallyScrollableOverflow is also ambiguous: is it hasProgrammaticallyOrUserScrollableOverflow ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776734</commentid>
    <comment_count>7</comment_count>
      <attachid>433446</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-07-13 13:27:43 -0700</bug_when>
    <thetext>Created attachment 433446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776754</commentid>
    <comment_count>8</comment_count>
      <attachid>433396</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-07-13 14:19:32 -0700</bug_when>
    <thetext>Comment on attachment 433396
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt;&gt;&gt; +        also not scrollable.
&gt;&gt;&gt; 
&gt;&gt;&gt; Let&apos;s choose a good name for this.
&gt;&gt;&gt; 
&gt;&gt;&gt; isScrollContainer() is vague because the element might not be scrollable, and overflow:hidden is not user-scrollable, but is programmatically scrollable. I want &quot;overflow&quot; in the name, because it&apos;s about the overflow property.
&gt;&gt;&gt; 
&gt;&gt;&gt; We also need to decide if this helper will return true or false for overflow:clip, and if we need another helper for the visible/clip combination.
&gt;&gt;&gt; 
&gt;&gt;&gt; For the current behavior, I suggest:
&gt;&gt;&gt; 
&gt;&gt;&gt; hasNonVisibleOverflow()
&gt;&gt;&gt; 
&gt;&gt;&gt; For the future &quot;potentially scrollable&quot; case I suggest:
&gt;&gt;&gt; 
&gt;&gt;&gt; hasPotentiallyScrollableOverfow() or something.
&gt;&gt; 
&gt;&gt; That makes sense. But hasNonVisibleOverflow would just be a rename of hasOverflowClip I think (chromium did this)?
&gt;&gt; 
&gt;&gt; I think it helps readibility and overflow: clip to add a method hasProgrammaticallyScrollableOverflow for programmatic scroll API, let me know what you think.
&gt; 
&gt; That&apos;s the point!

Oops, I thought somehow the bug was about adding a new method. Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776756</commentid>
    <comment_count>9</comment_count>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2021-07-13 14:24:06 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #6)
&gt; &gt; I think it helps readibility and overflow: clip to add a method
&gt; &gt; hasProgrammaticallyScrollableOverflow for programmatic scroll API, let me
&gt; &gt; know what you think.
&gt; 
&gt; But hasProgrammaticallyScrollableOverflow is also ambiguous: is it
&gt; hasProgrammaticallyOrUserScrollableOverflow ?

My idea was to restrict that one to programmatic scrolling only. I am not sure yet if we need a hasUserScrollableOverflow. Both may be simple aliases though, anyway this is probably pretty minor, will have another look at that kind of naming tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777020</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-14 13:40:58 -0700</bug_when>
    <thetext>Committed r279918 (239667@main): &lt;https://commits.webkit.org/239667@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 433446.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777021</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-14 13:41:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/80594572&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433393</attachid>
            <date>2021-07-13 00:30:36 -0700</date>
            <delta_ts>2021-07-13 02:38:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227899-20210713093035.patch</filename>
            <type>text/plain</type>
            <size>7855</size>
            <attacher name="Rob Buis">rbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5ODY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGJiMDUyNmMwYjYxZjJh
MWM3OTM0MDRkNDM4NThkMTUzOGQ5NGU1NS4uMGQ0M2VkYjYxMTk0M2FmZjQxNTE5ZmRjY2UwZGIz
NzY0NTQxMTNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTA3LTEzICBSb2Ig
QnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIGlzU2Nyb2xsQ29u
dGFpbmVyIGhlbHBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI3ODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW50cm9kdWNlIGlzU2Nyb2xsQ29udGFpbmVyIGhlbHBlciBhbmQgc3RhcnQgdXNpbmcg
aXQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjpzY3JvbGxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xs
VG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxQb3NpdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmJhY2tncm91bmRIYXNPcGFxdWVUb3BMYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNyZWF0ZXNOZXdGb3JtYXR0
aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmFkZE92ZXJm
bG93RnJvbUNoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU2Nyb2xsQ29udGFpbmVyIGNvbnN0KToKKwog
MjAyMS0wNy0xMiAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbY3VybF0gQ2FuJ3QgZmluaXNoIGxvYWRpbmcgc29tZSB3ZWJzaXRlcyBhZnRlciBy
MjcxOTQ2IHN0YXJ0ZWQgdGhyb3R0bGluZyBsb3cgcHJpb3JpdHkgcmVzb3VyY2VzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDY4OWIxN2RjMDgwZWViNTUwYTJhYjc0
ODZiZmI4N2VjOGNhOTg0ZjEuLmFiMjMyOTg1YzU3ZmE0MTg3NGI4NTRkY2RlYjliZDM2M2Q3Zjhl
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC01NDgsNyArNTQ4
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNsaWVudEhlaWdodCgpIGNvbnN0CiAKIGludCBS
ZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgbGF5ZXIoKSkKKyAgICBpZiAoaXNTY3JvbGxDb250YWluZXIoKSAmJiBsYXllcigpKQog
ICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKTsKICAgICAvLyBGb3Igb2JqZWN0
cyB3aXRoIHZpc2libGUgb3ZlcmZsb3csIHRoaXMgbWF0Y2hlcyBJRS4KICAgICAvLyBGSVhNRTog
TmVlZCB0byB3b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KQEAgLTU2MSw3ICs1NjEsNyBA
QCBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNj
cm9sbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVy
KCkpCisgICAgaWYgKGlzU2Nyb2xsQ29udGFpbmVyKCkgJiYgbGF5ZXIoKSkKICAgICAgICAgcmV0
dXJuIGxheWVyKCktPnNjcm9sbEhlaWdodCgpOwogICAgIC8vIEZvciBvYmplY3RzIHdpdGggdmlz
aWJsZSBvdmVyZmxvdywgdGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHdv
cmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVzLgpAQCAtNTcyLDEzICs1NzIsMTMgQEAgaW50IFJl
bmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIGludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQo
KSBjb25zdAogewogICAgIGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbGF5ZXIoKSA/IGxheWVyKCkt
PnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOwotICAgIHJldHVybiAoaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgc2Nyb2xsYWJsZUFyZWEpID8gc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCku
eCgpIDogMDsKKyAgICByZXR1cm4gKGlzU2Nyb2xsQ29udGFpbmVyKCkgJiYgc2Nyb2xsYWJsZUFy
ZWEpID8gc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKIH0KIAogaW50
IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKIHsKICAgICBhdXRvKiBzY3JvbGxhYmxlQXJl
YSA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKLSAgICBy
ZXR1cm4gKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVBcmVhKSA/IHNjcm9sbGFibGVB
cmVhLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CisgICAgcmV0dXJuIChpc1Njcm9sbENvbnRh
aW5lcigpICYmIHNjcm9sbGFibGVBcmVhKSA/IHNjcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlv
bigpLnkoKSA6IDA7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpyZXNldExvZ2ljYWxIZWlnaHRCZWZv
cmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01OTcsNyArNTk3LDcgQEAgc3RhdGljIHZvaWQgc2V0dXBX
aGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJl
YSkKIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQsIGNvbnN0IFNj
cm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIWhhc092ZXJm
bG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICghaXNTY3JvbGxDb250YWluZXIoKSB8fCAh
bGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbGF5
ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsKICAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEpOwpAQCAt
NjA3LDcgKzYwNyw3IEBAIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdMZWZ0
LCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wCiAKIHZvaWQgUmVuZGVyQm94
OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRp
b25zJiBvcHRpb25zKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkp
CisgICAgaWYgKCFpc1Njcm9sbENvbnRhaW5lcigpIHx8ICFsYXllcigpKQogICAgICAgICByZXR1
cm47CiAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgp
OwogICAgIEFTU0VSVChzY3JvbGxhYmxlQXJlYSk7CkBAIC02MTcsNyArNjE3LDcgQEAgdm9pZCBS
ZW5kZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBjb25zdCBTY3JvbGxQb3NpdGlvbkNo
YW5nZU9wdGlvbnMmIG9wdGkKIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKGNv
bnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VP
cHRpb25zJiBvcHRpb25zKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVy
KCkpCisgICAgaWYgKCFpc1Njcm9sbENvbnRhaW5lcigpIHx8ICFsYXllcigpKQogICAgICAgICBy
ZXR1cm47CiAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpOwogICAgIEFTU0VSVChzY3JvbGxhYmxlQXJlYSk7CkBAIC05NTksNyArOTU5LDcgQEAgYm9v
bCBSZW5kZXJCb3g6OnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAogICAg
IGlmIChpc1JlbmRlclZpZXcoKSB8fCBpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmIChp
c1Njcm9sbENvbnRhaW5lcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChzdHls
ZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkKQEAgLTk3Nyw3ICs5NzcsNyBAQCBib29sIFJl
bmRlckJveDo6Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0CiAgICAgaWYgKGlz
UmVuZGVyVmlldygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkpCisgICAgaWYgKCFpc1Njcm9sbENvbnRhaW5lcigpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAoaGFzU2Nyb2xsYWJsZU92ZXJmbG93WCgpIHx8IGhhc1Njcm9sbGFi
bGVPdmVyZmxvd1koKSkKQEAgLTEwOTksNyArMTA5OSw3IEBAIGJvb2wgUmVuZGVyQm94OjpuZWVk
c1ByZWZlcnJlZFdpZHRoc1JlY2FsY3VsYXRpb24oKSBjb25zdAogCiBTY3JvbGxQb3NpdGlvbiBS
ZW5kZXJCb3g6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93
Q2xpcCgpKQorICAgIGlmICghaXNTY3JvbGxDb250YWluZXIoKSkKICAgICAgICAgcmV0dXJuIHsg
MCwgMCB9OwogCiAgICAgQVNTRVJUKGhhc0xheWVyKCkpOwpAQCAtMTc0NCw3ICsxNzQ0LDcgQEAg
Ym9vbCBSZW5kZXJCb3g6OmJhY2tncm91bmRIYXNPcGFxdWVUb3BMYXllcigpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIENsaXBwZWQgd2l0aCBsb2NhbCBzY3JvbGxpbmcK
LSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgZmlsbExheWVyLmF0dGFjaG1lbnQoKSA9PSBG
aWxsQXR0YWNobWVudDo6TG9jYWxCYWNrZ3JvdW5kKQorICAgIGlmIChpc1Njcm9sbENvbnRhaW5l
cigpICYmIGZpbGxMYXllci5hdHRhY2htZW50KCkgPT0gRmlsbEF0dGFjaG1lbnQ6OkxvY2FsQmFj
a2dyb3VuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGZpbGxMYXllci5oYXNP
cGFxdWVJbWFnZSgqdGhpcykgJiYgZmlsbExheWVyLmhhc1JlcGVhdFhZKCkgJiYgZmlsbExheWVy
LmltYWdlKCktPmNhblJlbmRlcih0aGlzLCBzdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSkpCkBAIC00
Nzg2LDcgKzQ3ODYsNyBAQCBib29sIFJlbmRlckJveDo6c2hyaW5rVG9Bdm9pZEZsb2F0cygpIGNv
bnN0CiAKIGJvb2wgUmVuZGVyQm94OjpjcmVhdGVzTmV3Rm9ybWF0dGluZ0NvbnRleHQoKSBjb25z
dAogewotICAgIHJldHVybiBpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpIHx8IGlzRmxvYXRp
bmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBpc0ZsZXhJ
dGVtSW5jbHVkaW5nRGVwcmVjYXRlZCgpCisgICAgcmV0dXJuIGlzSW5saW5lQmxvY2tPcklubGlu
ZVRhYmxlKCkgfHwgaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IGlzU2Nyb2xs
Q29udGFpbmVyKCkgfHwgaXNGbGV4SXRlbUluY2x1ZGluZ0RlcHJlY2F0ZWQoKQogICAgICAgICB8
fCBpc1RhYmxlQ2VsbCgpIHx8IGlzVGFibGVDYXB0aW9uKCkgfHwgaXNGaWVsZHNldCgpIHx8IGlz
V3JpdGluZ01vZGVSb290KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpIHx8IGlzUmVu
ZGVyRnJhZ21lbnRlZEZsb3coKSB8fCBpc1JlbmRlckZyYWdtZW50Q29udGFpbmVyKCkKICAgICAg
ICAgfHwgc3R5bGUoKS5jb250YWluc0xheW91dCgpIHx8IGlzR3JpZEl0ZW0oKSB8fCBzdHlsZSgp
LnNwZWNpZmllc0NvbHVtbnMoKSB8fCBzdHlsZSgpLmNvbHVtblNwYW4oKSA9PSBDb2x1bW5TcGFu
OjpBbGwgfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OkZsb3dSb290OwogfQpA
QCAtNDg3NCw3ICs0ODc0LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmFkZE92ZXJmbG93RnJvbUNoaWxk
KGNvbnN0IFJlbmRlckJveCogY2hpbGQsIGNvbnN0IExheW91dFNpemUmIGQKICAgICAvLyBBZGQg
aW4gdmlzdWFsIG92ZXJmbG93IGZyb20gdGhlIGNoaWxkLiAgRXZlbiBpZiB0aGUgY2hpbGQgY2xp
cHMgaXRzIG92ZXJmbG93LCBpdCBtYXkgc3RpbGwKICAgICAvLyBoYXZlIHZpc3VhbCBvdmVyZmxv
dyBvZiBpdHMgb3duIHNldCBmcm9tIGJveCBzaGFkb3dzIG9yIHJlZmxlY3Rpb25zLiBJdCBpcyB1
bm5lY2Vzc2FyeSB0byBwcm9wYWdhdGUgdGhpcwogICAgIC8vIG92ZXJmbG93IGlmIHdlIGFyZSBj
bGlwcGluZyBvdXIgb3duIG92ZXJmbG93LgotICAgIGlmIChjaGlsZC0+aGFzU2VsZlBhaW50aW5n
TGF5ZXIoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSkKKyAgICBpZiAoY2hpbGQtPmhhc1NlbGZQYWlu
dGluZ0xheWVyKCkgfHwgaXNTY3JvbGxDb250YWluZXIoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IExheW91dFJlY3QgY2hpbGRWaXN1YWxPdmVyZmxvd1JlY3QgPSBjaGlsZC0+dmlzdWFsT3ZlcmZs
b3dSZWN0Rm9yUHJvcGFnYXRpb24oJnN0eWxlKCkpOwogICAgIGNoaWxkVmlzdWFsT3ZlcmZsb3dS
ZWN0Lm1vdmUoZGVsdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmlu
ZGV4IGYyMGY3NTk1ZDVlMDRjNWIzMjVkNDdhOGRlMDU2Y2M5ZjE4NDNjMDcuLjIwZTViYTkwOTcy
NTI5YzIwNmY2YjUyMzQ3Njc1NTkyMDcwN2FhOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKQEAgLTQzNyw2ICs0MzcsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhh
c092ZXJmbG93Q2xpcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmhhc092ZXJmbG93Q2xp
cCgpOyB9CiAKKyAgICBib29sIGlzU2Nyb2xsQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgc3R5bGUoKS5vdmVyZmxvd1goKSAhPSBPdmVyZmxvdzo6VmlzaWJs
ZTsgfQorCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSBjb25zdCB7IHJl
dHVybiBtX2JpdGZpZWxkcy5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKTsgfSAvLyBUcmFu
c2Zvcm0sIHBlcnNwZWN0aXZlIG9yIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2QuCiAgICAg
Ym9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBoYXNUcmFuc2Zvcm1SZWxhdGVkUHJv
cGVydHkoKSAmJiAoc3R5bGUoKS5oYXNUcmFuc2Zvcm0oKSB8fCBzdHlsZSgpLnRyYW5zbGF0ZSgp
IHx8IHN0eWxlKCkuc2NhbGUoKSB8fCBzdHlsZSgpLnJvdGF0ZSgpKTsgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433396</attachid>
            <date>2021-07-13 02:38:49 -0700</date>
            <delta_ts>2021-07-13 11:41:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227899-20210713113847.patch</filename>
            <type>text/plain</type>
            <size>8336</size>
            <attacher name="Rob Buis">rbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5ODY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGJiMDUyNmMwYjYxZjJh
MWM3OTM0MDRkNDM4NThkMTUzOGQ5NGU1NS4uYTUwMjJmMDU5MmM5NmYzMDBmY2M1YzhmNjVkODY1
YmI4ZjBiYmJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIxLTA3LTEzICBSb2Ig
QnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIGlzU2Nyb2xsQ29u
dGFpbmVyIGhlbHBlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI3ODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW50cm9kdWNlIGlzU2Nyb2xsQ29udGFpbmVyIGhlbHBlciBhbmQgc3RhcnQgdXNpbmcg
aXQuCisKKyAgICAgICAgVGhlIG92ZXJmbG93IHByb3BlcnR5IGRlY2lkZXMgd2hldGhlciB0aGUg
UmVuZGVyT2JqZWN0CisgICAgICAgIGlzIHNjcm9sbGFibGUsIGlzU2Nyb2xsQ29udGFpbmVyIGNh
cHR1cmVzIHRoaXMuCisgICAgICAgIFJpZ2h0IG5vdyBpc1Njcm9sbENvbnRhaW5lciB3aWxsIG9u
bHkgcmV0dXJuIGZhbHNlIGZvcgorICAgICAgICBvdmVyZmxvdyB2aXNpYmxlLCBidXQgdGhlIHVw
Y29taW5nIG92ZXJmbG93IGNsaXAgaXMKKyAgICAgICAgYWxzbyBub3Qgc2Nyb2xsYWJsZS4KKwor
ICAgICAgICBMb2NhdGlvbnMgdGhhdCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGNvbnRhaW5l
ciBpcyBzY3JvbGxhYmxlCisgICAgICAgIGFyZSB1cGRhdGVkIHRvIHVzZSBpc1Njcm9sbENvbnRh
aW5lciBpbnN0ZWFkIG9mIGhhc092ZXJmbG93Q2xpcC4KKworICAgICAgICBObyBuZXcgdGVzdHMg
c2luY2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGVmdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnNldFNjcm9sbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpz
ZXRTY3JvbGxUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlcXVpcmVzTGF5ZXJXaXRoU2Ny
b2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYW5CZVBy
b2dyYW1hdGljYWxseVNjcm9sbGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpi
YWNrZ3JvdW5kSGFzT3BhcXVlVG9wTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpjcmVhdGVzTmV3Rm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjphZGRPdmVyZmxvd0Zyb21DaGlsZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1Nj
cm9sbENvbnRhaW5lciBjb25zdCk6CisKIDIwMjEtMDctMTIgIEZ1amlpIEhpcm9ub3JpICA8SGly
b25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW2N1cmxdIENhbid0IGZpbmlzaCBsb2Fk
aW5nIHNvbWUgd2Vic2l0ZXMgYWZ0ZXIgcjI3MTk0NiBzdGFydGVkIHRocm90dGxpbmcgbG93IHBy
aW9yaXR5IHJlc291cmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRl
eCA2ODliMTdkYzA4MGVlYjU1MGEyYWI3NDg2YmZiODdlYzhjYTk4NGYxLi5hYjIzMjk4NWM1N2Zh
NDE4NzRiODU0ZGNkZWI5YmQzNjNkN2Y4ZTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcApAQCAtNTQ4LDcgKzU0OCw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94OjpjbGll
bnRIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7
Ci0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkpCisgICAgaWYgKGlzU2Nyb2xs
Q29udGFpbmVyKCkgJiYgbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbFdp
ZHRoKCk7CiAgICAgLy8gRm9yIG9iamVjdHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlzIG1h
dGNoZXMgSUUuCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcg
bW9kZXMuCkBAIC01NjEsNyArNTYxLDcgQEAgaW50IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgoKSBj
b25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlmICho
YXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpKQorICAgIGlmIChpc1Njcm9sbENvbnRhaW5lcigp
ICYmIGxheWVyKCkpCiAgICAgICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxIZWlnaHQoKTsKICAg
ICAvLyBGb3Igb2JqZWN0cyB3aXRoIHZpc2libGUgb3ZlcmZsb3csIHRoaXMgbWF0Y2hlcyBJRS4K
ICAgICAvLyBGSVhNRTogTmVlZCB0byB3b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KQEAg
LTU3MiwxMyArNTcyLDEzIEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiBp
bnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKICAgICBhdXRvKiBzY3JvbGxhYmxl
QXJlYSA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKLSAg
ICByZXR1cm4gKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVBcmVhKSA/IHNjcm9sbGFi
bGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CisgICAgcmV0dXJuIChpc1Njcm9sbENv
bnRhaW5lcigpICYmIHNjcm9sbGFibGVBcmVhKSA/IHNjcm9sbGFibGVBcmVhLT5zY3JvbGxQb3Np
dGlvbigpLngoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7
CiAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJs
ZUFyZWEoKSA6IG51bGxwdHI7Ci0gICAgcmV0dXJuIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3Jv
bGxhYmxlQXJlYSkgPyBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwor
ICAgIHJldHVybiAoaXNTY3JvbGxDb250YWluZXIoKSAmJiBzY3JvbGxhYmxlQXJlYSkgPyBzY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwogfQogCiB2b2lkIFJlbmRlckJv
eDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAtNTk3LDcgKzU5
Nyw3IEBAIHN0YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxM
ZWZ0KGludCBuZXdMZWZ0LCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKKyAgICBpZiAo
IWlzU2Nyb2xsQ29udGFpbmVyKCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKICAgICBh
dXRvKiBzY3JvbGxhYmxlQXJlYSA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CiAgICAgQVNT
RVJUKHNjcm9sbGFibGVBcmVhKTsKQEAgLTYwNyw3ICs2MDcsNyBAQCB2b2lkIFJlbmRlckJveDo6
c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRp
b25zJiBvcAogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3AsIGNvbnN0
IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIWhhc092
ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICghaXNTY3JvbGxDb250YWluZXIoKSB8
fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8qIHNjcm9sbGFibGVBcmVhID0g
bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsKICAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEpOwpA
QCAtNjE3LDcgKzYxNyw3IEBAIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1Rv
cCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJiBvcHRpCiAKIHZvaWQgUmVuZGVy
Qm94OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIGNv
bnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIWhh
c092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICghaXNTY3JvbGxDb250YWluZXIo
KSB8fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8qIHNjcm9sbGFibGVBcmVh
ID0gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsKICAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEp
OwpAQCAtOTU5LDcgKzk1OSw3IEBAIGJvb2wgUmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNj
cm9sbGFibGVBcmVhKCkgY29uc3QKICAgICBpZiAoaXNSZW5kZXJWaWV3KCkgfHwgaXNEb2N1bWVu
dEVsZW1lbnRSZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChoYXNP
dmVyZmxvd0NsaXAoKSkKKyAgICBpZiAoaXNTY3JvbGxDb250YWluZXIoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBpZiAoc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpCkBA
IC05NzcsNyArOTc3LDcgQEAgYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Ny
b2xsZWQoKSBjb25zdAogICAgIGlmIChpc1JlbmRlclZpZXcoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmICghaXNTY3JvbGxDb250
YWluZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGhhc1Njcm9sbGFibGVP
dmVyZmxvd1goKSB8fCBoYXNTY3JvbGxhYmxlT3ZlcmZsb3dZKCkpCkBAIC0xMDk5LDcgKzEwOTks
NyBAQCBib29sIFJlbmRlckJveDo6bmVlZHNQcmVmZXJyZWRXaWR0aHNSZWNhbGN1bGF0aW9uKCkg
Y29uc3QKIAogU2Nyb2xsUG9zaXRpb24gUmVuZGVyQm94OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0
CiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSkKKyAgICBpZiAoIWlzU2Nyb2xsQ29udGFp
bmVyKCkpCiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsKIAogICAgIEFTU0VSVChoYXNMYXllcigp
KTsKQEAgLTE3NDQsNyArMTc0NCw3IEBAIGJvb2wgUmVuZGVyQm94OjpiYWNrZ3JvdW5kSGFzT3Bh
cXVlVG9wTGF5ZXIoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBDbGlw
cGVkIHdpdGggbG9jYWwgc2Nyb2xsaW5nCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGZp
bGxMYXllci5hdHRhY2htZW50KCkgPT0gRmlsbEF0dGFjaG1lbnQ6OkxvY2FsQmFja2dyb3VuZCkK
KyAgICBpZiAoaXNTY3JvbGxDb250YWluZXIoKSAmJiBmaWxsTGF5ZXIuYXR0YWNobWVudCgpID09
IEZpbGxBdHRhY2htZW50OjpMb2NhbEJhY2tncm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmIChmaWxsTGF5ZXIuaGFzT3BhcXVlSW1hZ2UoKnRoaXMpICYmIGZpbGxMYXllci5o
YXNSZXBlYXRYWSgpICYmIGZpbGxMYXllci5pbWFnZSgpLT5jYW5SZW5kZXIodGhpcywgc3R5bGUo
KS5lZmZlY3RpdmVab29tKCkpKQpAQCAtNDc4Niw3ICs0Nzg2LDcgQEAgYm9vbCBSZW5kZXJCb3g6
OnNocmlua1RvQXZvaWRGbG9hdHMoKSBjb25zdAogCiBib29sIFJlbmRlckJveDo6Y3JlYXRlc05l
d0Zvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNJbmxpbmVCbG9ja09y
SW5saW5lVGFibGUoKSB8fCBpc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgaGFz
T3ZlcmZsb3dDbGlwKCkgfHwgaXNGbGV4SXRlbUluY2x1ZGluZ0RlcHJlY2F0ZWQoKQorICAgIHJl
dHVybiBpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpIHx8IGlzRmxvYXRpbmdPck91dE9mRmxv
d1Bvc2l0aW9uZWQoKSB8fCBpc1Njcm9sbENvbnRhaW5lcigpIHx8IGlzRmxleEl0ZW1JbmNsdWRp
bmdEZXByZWNhdGVkKCkKICAgICAgICAgfHwgaXNUYWJsZUNlbGwoKSB8fCBpc1RhYmxlQ2FwdGlv
bigpIHx8IGlzRmllbGRzZXQoKSB8fCBpc1dyaXRpbmdNb2RlUm9vdCgpIHx8IGlzRG9jdW1lbnRF
bGVtZW50UmVuZGVyZXIoKSB8fCBpc1JlbmRlckZyYWdtZW50ZWRGbG93KCkgfHwgaXNSZW5kZXJG
cmFnbWVudENvbnRhaW5lcigpCiAgICAgICAgIHx8IHN0eWxlKCkuY29udGFpbnNMYXlvdXQoKSB8
fCBpc0dyaWRJdGVtKCkgfHwgc3R5bGUoKS5zcGVjaWZpZXNDb2x1bW5zKCkgfHwgc3R5bGUoKS5j
b2x1bW5TcGFuKCkgPT0gQ29sdW1uU3Bhbjo6QWxsIHx8IHN0eWxlKCkuZGlzcGxheSgpID09IERp
c3BsYXlUeXBlOjpGbG93Um9vdDsKIH0KQEAgLTQ4NzQsNyArNDg3NCw3IEBAIHZvaWQgUmVuZGVy
Qm94OjphZGRPdmVyZmxvd0Zyb21DaGlsZChjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBM
YXlvdXRTaXplJiBkCiAgICAgLy8gQWRkIGluIHZpc3VhbCBvdmVyZmxvdyBmcm9tIHRoZSBjaGls
ZC4gIEV2ZW4gaWYgdGhlIGNoaWxkIGNsaXBzIGl0cyBvdmVyZmxvdywgaXQgbWF5IHN0aWxsCiAg
ICAgLy8gaGF2ZSB2aXN1YWwgb3ZlcmZsb3cgb2YgaXRzIG93biBzZXQgZnJvbSBib3ggc2hhZG93
cyBvciByZWZsZWN0aW9ucy4gSXQgaXMgdW5uZWNlc3NhcnkgdG8gcHJvcGFnYXRlIHRoaXMKICAg
ICAvLyBvdmVyZmxvdyBpZiB3ZSBhcmUgY2xpcHBpbmcgb3VyIG93biBvdmVyZmxvdy4KLSAgICBp
ZiAoY2hpbGQtPmhhc1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkpCisg
ICAgaWYgKGNoaWxkLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGlzU2Nyb2xsQ29udGFpbmVy
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBMYXlvdXRSZWN0IGNoaWxkVmlzdWFsT3ZlcmZsb3dS
ZWN0ID0gY2hpbGQtPnZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKCZzdHlsZSgpKTsK
ICAgICBjaGlsZFZpc3VhbE92ZXJmbG93UmVjdC5tb3ZlKGRlbHRhKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBmMjBmNzU5NWQ1ZTA0YzViMzI1ZDQ3YThkZTA1
NmNjOWYxODQzYzA3Li4yMGU1YmE5MDk3MjUyOWMyMDZmNmI1MjM0NzY3NTU5MjA3MDdhYTkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC00MzcsNiArNDM3LDgg
QEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNPdmVyZmxvd0NsaXAoKSBjb25zdCB7IHJldHVybiBt
X2JpdGZpZWxkcy5oYXNPdmVyZmxvd0NsaXAoKTsgfQogCisgICAgYm9vbCBpc1Njcm9sbENvbnRh
aW5lcigpIGNvbnN0IHsgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIHN0eWxlKCkub3ZlcmZs
b3dYKCkgIT0gT3ZlcmZsb3c6OlZpc2libGU7IH0KKwogICAgIGJvb2wgaGFzVHJhbnNmb3JtUmVs
YXRlZFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuaGFzVHJhbnNmb3JtUmVs
YXRlZFByb3BlcnR5KCk7IH0gLy8gVHJhbnNmb3JtLCBwZXJzcGVjdGl2ZSBvciB0cmFuc2Zvcm0t
c3R5bGU6IHByZXNlcnZlLTNkLgogICAgIGJvb2wgaGFzVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgJiYgKHN0eWxlKCkuaGFzVHJhbnNmb3Jt
KCkgfHwgc3R5bGUoKS50cmFuc2xhdGUoKSB8fCBzdHlsZSgpLnNjYWxlKCkgfHwgc3R5bGUoKS5y
b3RhdGUoKSk7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433435</attachid>
            <date>2021-07-13 11:41:15 -0700</date>
            <delta_ts>2021-07-13 13:27:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227899-20210713204114.patch</filename>
            <type>text/plain</type>
            <size>5453</size>
            <attacher name="Rob Buis">rbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5ODY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGJiMDUyNmMwYjYxZjJh
MWM3OTM0MDRkNDM4NThkMTUzOGQ5NGU1NS4uMTMxZjg0OGIzY2YyN2Y1ZmMxOGY5ZjAyYzkwNTJm
YmFiYjg3MTAyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIxLTA3LTEzICBSb2Ig
QnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIGhhc1Byb2dyYW1t
YXRpY2FsbHlTY3JvbGxhYmxlT3ZlcmZsb3cgaGVscGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjc4OTkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgaGFzUHJvZ3JhbW1hdGljYWxseVNj
cm9sbGFibGVPdmVyZmxvdyBoZWxwZXIgdG8KKyAgICAgICAgcHJlcGFyZSBmb3Igb3ZlcmZsb3c6
IGNsaXAgYW5kIGltcHJvdmUgcmVhZGFiaWxpdHkgb2YKKyAgICAgICAgcHJvZ3JhbW1hdGljIHNj
cm9sbCBBUEkgY29kZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2Ugbm8gY2hhbmdlIGlu
IGJlaGF2aW9yLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6c2Nyb2xsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnNjcm9sbFRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9s
bExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omhh
c1Byb2dyYW1tYXRpY2FsbHlTY3JvbGxhYmxlT3ZlcmZsb3cgY29uc3QpOgorCiAyMDIxLTA3LTEy
ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtj
dXJsXSBDYW4ndCBmaW5pc2ggbG9hZGluZyBzb21lIHdlYnNpdGVzIGFmdGVyIHIyNzE5NDYgc3Rh
cnRlZCB0aHJvdHRsaW5nIGxvdyBwcmlvcml0eSByZXNvdXJjZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKaW5kZXggNjg5YjE3ZGMwODBlZWI1NTBhMmFiNzQ4NmJmYjg3ZWM4
Y2E5ODRmMS4uNjcxNzMyNjdkODcwY2Y4N2NkNzBlNjliNTBkNzZmZGI1NzA4NTUzYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTU0OCw3ICs1NDgsNyBAQCBMYXlv
dXRVbml0IFJlbmRlckJveDo6Y2xpZW50SGVpZ2h0KCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6
c2Nyb2xsV2lkdGgoKSBjb25zdAogewotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXll
cigpKQorICAgIGlmIChoYXNQcm9ncmFtbWF0aWNhbGx5U2Nyb2xsYWJsZU92ZXJmbG93KCkgJiYg
bGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbFdpZHRoKCk7CiAgICAgLy8g
Rm9yIG9iamVjdHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlzIG1hdGNoZXMgSUUuCiAgICAg
Ly8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcgbW9kZXMuCkBAIC01NjEs
NyArNTYxLDcgQEAgaW50IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgoKSBjb25zdAogCiBpbnQgUmVu
ZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAo
KSAmJiBsYXllcigpKQorICAgIGlmIChoYXNQcm9ncmFtbWF0aWNhbGx5U2Nyb2xsYWJsZU92ZXJm
bG93KCkgJiYgbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbEhlaWdodCgp
OwogICAgIC8vIEZvciBvYmplY3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywgdGhpcyBtYXRjaGVz
IElFLgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVz
LgpAQCAtNTcyLDEzICs1NzIsMTMgQEAgaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29u
c3QKIGludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdAogewogICAgIGF1dG8qIHNjcm9s
bGFibGVBcmVhID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRy
OwotICAgIHJldHVybiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUFyZWEpID8gc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKKyAgICByZXR1cm4gKGhhc1By
b2dyYW1tYXRpY2FsbHlTY3JvbGxhYmxlT3ZlcmZsb3coKSAmJiBzY3JvbGxhYmxlQXJlYSkgPyBz
Y3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOwogfQogCiBpbnQgUmVuZGVy
Qm94OjpzY3JvbGxUb3AoKSBjb25zdAogewogICAgIGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbGF5
ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOwotICAgIHJldHVybiAo
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUFyZWEpID8gc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICByZXR1cm4gKGhhc1Byb2dyYW1tYXRpY2FsbHlT
Y3JvbGxhYmxlT3ZlcmZsb3coKSAmJiBzY3JvbGxhYmxlQXJlYSkgPyBzY3JvbGxhYmxlQXJlYS0+
c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwogfQogCiB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dp
Y2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAtNTk3LDcgKzU5Nyw3IEBAIHN0YXRp
YyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSYg
c2Nyb2xsYWJsZUFyZWEpCiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdM
ZWZ0LCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
aWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKKyAgICBpZiAoIWhhc1Byb2dyYW1t
YXRpY2FsbHlTY3JvbGxhYmxlT3ZlcmZsb3coKSB8fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsK
ICAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEpOwpAQCAtNjA3LDcgKzYwNyw3IEBAIHZvaWQgUmVu
ZGVyQm94OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdMZWZ0LCBjb25zdCBTY3JvbGxQb3NpdGlvbkNo
YW5nZU9wdGlvbnMmIG9wCiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1Rv
cCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlm
ICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYgKCFoYXNQcm9ncmFtbWF0
aWNhbGx5U2Nyb2xsYWJsZU92ZXJmbG93KCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CiAg
ICAgQVNTRVJUKHNjcm9sbGFibGVBcmVhKTsKQEAgLTYxNyw3ICs2MTcsNyBAQCB2b2lkIFJlbmRl
ckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3AsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdl
T3B0aW9ucyYgb3B0aQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3Qg
U2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkK
KyAgICBpZiAoIWhhc1Byb2dyYW1tYXRpY2FsbHlTY3JvbGxhYmxlT3ZlcmZsb3coKSB8fCAhbGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbGF5ZXIo
KS0+c2Nyb2xsYWJsZUFyZWEoKTsKICAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEpOwpAQCAtMTA5
OSw3ICsxMDk5LDcgQEAgYm9vbCBSZW5kZXJCb3g6Om5lZWRzUHJlZmVycmVkV2lkdGhzUmVjYWxj
dWxhdGlvbigpIGNvbnN0CiAKIFNjcm9sbFBvc2l0aW9uIFJlbmRlckJveDo6c2Nyb2xsUG9zaXRp
b24oKSBjb25zdAogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgaWYgKCFoYXNQ
cm9ncmFtbWF0aWNhbGx5U2Nyb2xsYWJsZU92ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiB7IDAs
IDAgfTsKIAogICAgIEFTU0VSVChoYXNMYXllcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAppbmRleCBmMjBmNzU5NWQ1ZTA0YzViMzI1ZDQ3YThkZTA1NmNjOWYxODQz
YzA3Li5kYjU3Yzk0MmQ0ZWE0ZjRhMjU5M2E4NjM3ZTc4ZDI4YmVhOGZiMDEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC00MzcsNiArNDM3LDggQEAgcHVibGlj
OgogCiAgICAgYm9vbCBoYXNPdmVyZmxvd0NsaXAoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxk
cy5oYXNPdmVyZmxvd0NsaXAoKTsgfQogCisgICAgYm9vbCBoYXNQcm9ncmFtbWF0aWNhbGx5U2Ny
b2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCk7IH0KKwog
ICAgIGJvb2wgaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9i
aXRmaWVsZHMuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCk7IH0gLy8gVHJhbnNmb3JtLCBw
ZXJzcGVjdGl2ZSBvciB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkLgogICAgIGJvb2wgaGFz
VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkg
JiYgKHN0eWxlKCkuaGFzVHJhbnNmb3JtKCkgfHwgc3R5bGUoKS50cmFuc2xhdGUoKSB8fCBzdHls
ZSgpLnNjYWxlKCkgfHwgc3R5bGUoKS5yb3RhdGUoKSk7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433446</attachid>
            <date>2021-07-13 13:27:43 -0700</date>
            <delta_ts>2021-07-14 13:41:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227899-20210713222742.patch</filename>
            <type>text/plain</type>
            <size>84878</size>
            <attacher name="Rob Buis">rbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5ODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTk5ZTk1NzcyOTdjMGZj
N2RkMmI2NjZkYjBlYmYxMzBiZGIxYWU4ZC4uMWI0OGVjOTFjM2NmNWM3NWE4ZGRmNmRjZGNkMzA3
NzA1ZjMwMjFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NiBAQAorMjAyMS0wNy0xMyAgUm9i
IEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgorCisgICAgICAgIFJlbmFtZSBoYXNPdmVyZmxvd0Ns
aXAoKSB0byBwcmVwYXJlIGZvciB0aGUgcmVhbCBvdmVyZmxvdzpjbGlwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjc4OTkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgaGFzT3ZlcmZsb3dDbGlw
KCkgdG8gcHJlcGFyZSBmb3IgdGhlIHJlYWwgb3ZlcmZsb3c6Y2xpcC4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgc2luY2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojppc0JvZHlQb3RlbnRpYWxs
eVNjcm9sbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUludGVyc2VjdGlvblN0YXRl
KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpzY3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzY3JvbGxCeVVuaXRzKToK
KyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpm
dWxseUNsaXBzQ29udGVudHMpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dEludGVncmF0aW9uOjpsaW5lT3ZlcmZsb3dXaWR0aCk6CisgICAgICAgICogbGF5b3V0L2lu
dGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y29sbGVjdE92ZXJmbG93KToKKyAg
ICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpu
b2RlUmVzcG9uZGluZ1RvU2Nyb2xsV2hlZWxFdmVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9M
ZWdhY3lMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6
OmxheW91dExpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojph
ZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok92ZXJmbG93RXZlbnREaXNwYXRjaGVyOjpP
dmVyZmxvd0V2ZW50RGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
ZW5kQW5kQ29tbWl0VXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZU92ZXJmbG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6aXNTZWxlY3Rpb25Sb290IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRk
Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEZvckJvcmRlckZpdCBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2tGbG93OjplbmRQYWRkaW5nV2lkdGhGb3JDYXJldCBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnN0eWxlV2lsbENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnN0eWxl
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dXBkYXRlRnJvbVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6c2Nyb2xsVG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9s
bFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmluY2x1ZGVIb3Jpem9udGFs
U2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJp
bnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpoYXNBdXRvU2Nyb2xsYmFyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aGFzQWx3YXlzUHJlc2VudFNjcm9sbGJh
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFBvc2l0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93
Q2xpcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmJhY2tncm91bmRIYXNP
cGFxdWVUb3BMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnB1c2hD
b250ZW50c0NsaXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpwb3BDb250ZW50c0Ns
aXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlVmlzaWJsZVJlY3RJbkNv
bnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNyZWF0ZXNOZXdG
b3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmFk
ZE92ZXJmbG93RnJvbUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWRkTGF5
b3V0T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpsYXlvdXRPdmVyZmxv
d1JlY3RGb3JQcm9wYWdhdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJv
eC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxzT3ZlcmZsb3dYIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsc092ZXJmbG93WSBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpib3hTaGFkb3dTaG91bGRC
ZUFwcGxpZWRUb0JhY2tncm91bmQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnN0eWxlV2lsbENo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjptYXlDYXVzZVJlcGFpbnRJ
bnNpZGVWaWV3cG9ydCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6Omhhc0NsaXBPck5vblZpc2libGVP
dmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpoYXNDbGlw
T3JPdmVyZmxvd0NsaXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6
aGl0VGVzdENoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRDb250
YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OnNo
b3VsZENsaXBGcmFnbWVudGVkRmxvd0NvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmxheW91dE92ZXJmbG93UmVjdEZvckJveEZvclByb3Bh
Z2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhZ21lbnRlZEZsb3c6OmFkZEZyYWdtZW50c092ZXJm
bG93RnJvbUNoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y2xpcHBlZE92ZXJmbG93UmVjdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNvbXB1dGVWaXNpYmxlUmVjdEluQ29u
dGFpbmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNob3VsZEJlTm9ybWFsRmxvd09ubHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ092ZXJm
bG93Q2xpcExheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRh
dGVMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphbGxvd3ND
dXJyZW50U2Nyb2xsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYW5S
ZXNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRm9udFN1YnBpeGVsUXVhbnRp
emF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRQYWludE9yZGVyVHJlZVJlY3Vyc2l2ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjbGlwcGluZ0xheWVyQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmVuY2xvc2luZ05vblN0YWNraW5nQ2xpcHBpbmdMYXllciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVBbmNlc3RvckNsaXBw
aW5nU3RhY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpjbGlwc0NvbXBvc2l0aW5nRGVzY2VuZGFudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnBhaW50T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNpemVy
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsQnlSZWN1cnNpdmVseSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheW91dFN0YXRl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheW91dFN0YXRlOjpSZW5kZXJMYXlvdXRT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXlvdXRTdGF0ZTo6Y29tcHV0ZU9mZnNl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5b3V0U3RhdGU6OmNvbXB1dGVDbGlwUmVj
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RJdGVtOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6YWRk
T3ZlcmZsb3dGcm9tTGlzdE1hcmtlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRp
Q29sdW1uU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0Ojph
ZGRPdmVyZmxvd0Zyb21DaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmVuY2xvc2luZ1Njcm9sbGFi
bGVDb250YWluZXJGb3JTbmFwcGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvYmplY3RJ
c1JlbGF5b3V0Qm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb21w
dXRlVmlzaWJsZVJlY3RJbkNvbnRhaW5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6Om91dHB1dFJlbmRlck9iamVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoYXNOb25W
aXNpYmxlT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpz
ZXRIYXNOb25WaXNpYmxlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpSZW5kZXJPYmplY3RCaXRmaWVsZHM6OlJlbmRlck9iamVjdEJpdGZpZWxkcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omhhc092ZXJmbG93Q2xpcCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldEhhc092ZXJmbG93Q2xpcCk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyUGFydDo6c3R5bGVEaWRDaGFuZ2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJv
dy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sOjpjYW5TY3JvbGwgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
QmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQmxvY2s6OnVwZGF0ZUZyb21T
dHlsZSk6CisKIDIwMjEtMDctMTMgIEt5bGUgUGlkZGluZ3RvbiAgPGtwaWRkaW5ndG9uQGFwcGxl
LmNvbT4KIAogICAgICAgICByQUYgZHJpdmVuIFdlYkdMIHN1Ym1pdHMgZXhjZXNzaXZlIGFtb3Vu
dCBvZiBHUFUgd29yayB3aGVuIGZyYW1lcyBhcmUgc2xvdwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCmluZGV4IGYyYmU0YWNmZTdkNGY1Y2JjMGZiODhmODJmNjQ5YjU3MTgxMjVhZDEuLmMwZTli
ZTY3MTM3MTZlNzI2ZDQ1OTMyY2U1YjYxNjA0Nzc3OWU0YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMS0wNy0xMyAgUm9iIEJ1aXMgIDxyYnVpc0Bp
Z2FsaWEuY29tPgorCisgICAgICAgIFJlbmFtZSBoYXNPdmVyZmxvd0NsaXAoKSB0byBwcmVwYXJl
IGZvciB0aGUgcmVhbCBvdmVyZmxvdzpjbGlwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjc4OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgaGFzT3ZlcmZsb3dDbGlwKCkgdG8gcHJlcGFyZSBm
b3IgdGhlIHJlYWwgb3ZlcmZsb3c6Y2xpcC4KKworICAgICAgICAqIERPTS9ET01IVE1MLm1tOgor
ICAgICAgICAoLVtET01IVE1MRWxlbWVudCBzY3JvbGxYT2Zmc2V0XSk6CisgICAgICAgICgtW0RP
TUhUTUxFbGVtZW50IHNjcm9sbFlPZmZzZXRdKToKKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQg
c2V0U2Nyb2xsWE9mZnNldDpzY3JvbGxZT2Zmc2V0OmFkanVzdEZvcklPU0NhcmV0Ol0pOgorCiAy
MDIxLTA2LTI1ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3OTI2Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CmluZGV4IDFlOTAzMTIyMzA0YTZjMTZmN2ExMTAyNzI4M2U2OTM3OGJlZmFkMjUuLmUwZTljNDQz
NTE1N2E0MTJhZWVhMDZmNWU2NWMzYmNlZmIxNmZmM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cApAQCAtMTYzMCw3ICsxNjMwLDcgQEAgYm9vbCBEb2N1bWVudDo6aXNCb2R5UG90ZW50aWFsbHlT
Y3JvbGxhYmxlKEhUTUxCb2R5RWxlbWVudCYgYm9keSkKICAgICAvLyAgIG92ZXJmbG93LXggb3Ig
b3ZlcmZsb3cteSBwcm9wZXJ0aWVzIGlzIG5vdCB2aXNpYmxlLgogICAgIC8vIC0gVGhlIGVsZW1l
bnQncyB1c2VkIHZhbHVlIG9mIHRoZSBvdmVyZmxvdy14IG9yIG92ZXJmbG93LXkgcHJvcGVydGll
cyBpcyBub3QgdmlzaWJsZS4KICAgICAvLwotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIFJl
bmRlck9iamVjdDo6aGFzT3ZlcmZsb3dDbGlwKCkgaW5zdGVhZCBvZiBFbGVtZW50Ojpjb21wdXRl
ZFN0eWxlKCkgYnV0CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgUmVuZGVyT2JqZWN0Ojpo
YXNOb25WaXNpYmxlT3ZlcmZsb3coKSBpbnN0ZWFkIG9mIEVsZW1lbnQ6OmNvbXB1dGVkU3R5bGUo
KSBidXQKICAgICAvLyB0aGUgdXNlZCB2YWx1ZXMgYXJlIGN1cnJlbnRseSBub3QgY29ycmVjdGx5
IHVwZGF0ZWQuIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi8xODIyOTIuCiAgICAgcmV0dXJuIGJv
ZHkucmVuZGVyZXIoKQogICAgICAgICAmJiBkb2N1bWVudEVsZW1lbnQoKS0+Y29tcHV0ZWRTdHls
ZSgpCkBAIC03ODQzLDcgKzc4NDMsNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnRlcnNlY3Rp
b25PYnNlcnZhdGlvblN0YXRlPiBjb21wdXRlSW50ZXJzZWN0aW9uU3RhdGUoRnJhbQogCiAgICAg
ICAgIGlmIChvYnNlcnZlci5yb290KCkgPT0gJnRhcmdldC5kb2N1bWVudCgpKQogICAgICAgICAg
ICAgbG9jYWxSb290Qm91bmRzID0gZnJhbWVWaWV3LmxheW91dFZpZXdwb3J0UmVjdCgpOwotICAg
ICAgICBlbHNlIGlmIChyb290UmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBl
bHNlIGlmIChyb290UmVuZGVyZXItPmhhc05vblZpc2libGVPdmVyZmxvdygpKQogICAgICAgICAg
ICAgbG9jYWxSb290Qm91bmRzID0gcm9vdFJlbmRlcmVyLT5jb250ZW50Qm94UmVjdCgpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBsb2NhbFJvb3RCb3VuZHMgPSB7IEZsb2F0UG9pbnQoKSwg
cm9vdFJlbmRlcmVyLT5zaXplKCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA0YmZkYmJj
YTdkNGVmZTkxM2QxMDQ5OGJmNGRjODk2ZTIyNjc3NGQ1Li5lY2I3MTg5MGQ3ZTRkNGQ5ZTAxZjg3
NmExNzRkNTkzYjI0M2IyZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMDI4LDcgKzEw
MjgsNyBAQCB2b2lkIEVsZW1lbnQ6OnNjcm9sbFRvKGNvbnN0IFNjcm9sbFRvT3B0aW9ucyYgb3B0
aW9ucywgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsCiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgZG9l
cyBub3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCBDU1MgbGF5b3V0IGJveCwgdGhlIGVsZW1lbnQgaGFz
IG5vIGFzc29jaWF0ZWQgc2Nyb2xsaW5nIGJveCwKICAgICAvLyBvciB0aGUgZWxlbWVudCBoYXMg
bm8gb3ZlcmZsb3csIHRlcm1pbmF0ZSB0aGVzZSBzdGVwcy4KICAgICBSZW5kZXJCb3gqIHJlbmRl
cmVyID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmhhc092
ZXJmbG93Q2xpcCgpKQorICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5oYXNOb25WaXNp
YmxlT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzY3JvbGxUb09wdGlv
bnMgPSBub3JtYWxpemVOb25GaW5pdGVDb29yZGluYXRlc09yRmFsbEJhY2tUbyhvcHRpb25zLApA
QCAtMTA1OCw3ICsxMDU4LDcgQEAgdm9pZCBFbGVtZW50OjpzY3JvbGxCeVVuaXRzKGludCB1bml0
cywgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCisg
ICAgaWYgKCFyZW5kZXJlci0+aGFzTm9uVmlzaWJsZU92ZXJmbG93KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24gPSBTY3JvbGxEb3duOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGMyZmFhOTQyNjRlYjA4NTU5ZDZj
OWZmMmIwZjNlNWIxMDJlZGFmOTAuLmQ3NGU2ZGU1NDk4NjBkMTRjZTcyZmI0MzYxNjAxOWUwMTEw
OTg3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTIwMSw3
ICsyMDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZnVsbHlDbGlwc0NvbnRlbnRzKE5vZGUmIG5v
ZGUpCiAgICAgaWYgKCFpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcik7Ci0g
ICAgaWYgKCFib3guaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgaWYgKCFib3guaGFzTm9uVmlzaWJs
ZU92ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFF1aXJrIHRvIGtl
ZXAgY29weS9wYXN0ZSBpbiB0aGUgQ29kZU1pcnJvciBlZGl0b3IgdmVyc2lvbiB1c2VkIGluIEpl
bmtpbnMgd29ya2luZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklubGluZUNvbnRlbnRC
dWlsZGVyLmNwcAppbmRleCAwNDQxYzI4ZWUyMTNlNWRjYWNkYzE0NTgzYjgxZjc2OGJmYTkxZjE3
Li4wNzhkODRkZTJmYmE5MTMwY2IyYjI2MzA1NjY3MTIxNmVjYTJlZWRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVD
b250ZW50QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9u
L0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwCkBAIC02MCwxMCArNjAs
MTAgQEAgaW5saW5lIExheW91dDo6SW5saW5lTGluZUdlb21ldHJ5OjpFbmNsb3NpbmdUb3BBbmRC
b3R0b20gb3BlcmF0b3IrKGNvbnN0IExheW91dDoKIGlubGluZSBzdGF0aWMgZmxvYXQgbGluZU92
ZXJmbG93V2lkdGgoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBJbmxpbmVMYXlvdXRVbml0
IGxpbmVCb3hMb2dpY2FsV2lkdGgsIElubGluZUxheW91dFVuaXQgbGluZUNvbnRlbnRMb2dpY2Fs
V2lkdGgpCiB7CiAgICAgLy8gRklYTUU6IEl0J3MgdGhlIGNvcHkgb2YgdGhlIGxldHMtYWRqdXN0
LW92ZXJmbG93LWZvci10aGUtY2FyZXQgYmVoYXZpb3IgZnJvbSBMZWdhY3lMaW5lTGF5b3V0Ojph
ZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbi4KLSAgICBhdXRvIGVuZFBhZGRpbmcgPSBmbG93
Lmhhc092ZXJmbG93Q2xpcCgpID8gZmxvdy5wYWRkaW5nRW5kKCkgOiAwX2x1OworICAgIGF1dG8g
ZW5kUGFkZGluZyA9IGZsb3cuaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkgPyBmbG93LnBhZGRpbmdF
bmQoKSA6IDBfbHU7CiAgICAgaWYgKCFlbmRQYWRkaW5nKQogICAgICAgICBlbmRQYWRkaW5nID0g
Zmxvdy5lbmRQYWRkaW5nV2lkdGhGb3JDYXJldCgpOwotICAgIGlmIChmbG93Lmhhc092ZXJmbG93
Q2xpcCgpICYmICFlbmRQYWRkaW5nICYmIGZsb3cuZWxlbWVudCgpICYmIGZsb3cuZWxlbWVudCgp
LT5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICBpZiAoZmxvdy5oYXNOb25WaXNpYmxlT3Zl
cmZsb3coKSAmJiAhZW5kUGFkZGluZyAmJiBmbG93LmVsZW1lbnQoKSAmJiBmbG93LmVsZW1lbnQo
KS0+aXNSb290RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgIGVuZFBhZGRpbmcgPSAxOwogICAg
IGxpbmVDb250ZW50TG9naWNhbFdpZHRoICs9IGVuZFBhZGRpbmc7CiAgICAgcmV0dXJuIHN0ZDo6
bWF4KGxpbmVCb3hMb2dpY2FsV2lkdGgsIGxpbmVDb250ZW50TG9naWNhbFdpZHRoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKaW5kZXggN2Y5Mzk3YTJhYTdiOGU2MTE4ODZjNWJm
YTIzMDE5YTU3OGMxZjM1NC4uNDgxMjBiN2I3OWI5ZjgxNzUzMzVlN2YwMThhZWJhYWI2MWJkMGNj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKQEAgLTM0Niw3ICszNDYsNyBA
QCB2b2lkIExpbmVMYXlvdXQ6OmNvbGxlY3RPdmVyZmxvdygpCiB7CiAgICAgZm9yIChhdXRvJiBs
aW5lIDogaW5saW5lQ29udGVudCgpLT5saW5lcykgewogICAgICAgICBmbG93KCkuYWRkTGF5b3V0
T3ZlcmZsb3coTGF5b3V0Ojp0b0xheW91dFJlY3QobGluZS5zY3JvbGxhYmxlT3ZlcmZsb3coKSkp
OwotICAgICAgICBpZiAoIWZsb3coKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgaWYgKCFm
bG93KCkuaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkpCiAgICAgICAgICAgICBmbG93KCkuYWRkVmlz
dWFsT3ZlcmZsb3coTGF5b3V0Ojp0b0xheW91dFJlY3QobGluZS5pbmtPdmVyZmxvdygpKSk7CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCAxMmNjNzMzNmFlODdi
NmQ5ZDhlYTgzY2Y1NDNkMDI5OTE0ZWFmMWRiLi5hNDk5OWUyMWZhMmQ5MTJkYzMyZWUzOWE3ZDFk
MzJlZWZhMjA4M2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlP
Uy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtNTYwLDcg
KzU2MCw3IEBAIE5vZGUqIEZyYW1lOjpub2RlUmVzcG9uZGluZ1RvU2Nyb2xsV2hlZWxFdmVudHMo
Y29uc3QgRmxvYXRQb2ludCYgdmlld3BvcnRMb2NhdGlvCiAKICAgICAgICAgICAgIGF1dG8mIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAKLSAgICAgICAgICAgIGlmIChyZW5kZXJlci0+aGFz
T3ZlcmZsb3dDbGlwKCkKKyAgICAgICAgICAgIGlmIChyZW5kZXJlci0+aGFzTm9uVmlzaWJsZU92
ZXJmbG93KCkKICAgICAgICAgICAgICAgICAmJiAoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZs
b3c6OkF1dG8gfHwgc3R5bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbAogICAgICAg
ICAgICAgICAgIHx8IHN0eWxlLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHN0eWxl
Lm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwpKSB7CiAgICAgICAgICAgICAgICAgc2Ny
b2xsaW5nQW5jZXN0b3IgPSBub2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2Fj
eUxpbmVMYXlvdXQuY3BwCmluZGV4IDgyZGYyNTJmM2RmNGEzZDk5MTJkY2FmOWZhZGNiMDRhY2Qx
MDYwNGEuLmQyYTdkOTllYjhlYjI2OGU1ODQ5ZmVjMDc2OGRlYTgzZmNiNmM2ZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHAKQEAgLTE3MTgsOCAr
MTcxOCw4IEBAIHZvaWQgTGVnYWN5TGluZUxheW91dDo6bGF5b3V0TGluZUJveGVzKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmVwYWluCiAgICAgLy8gZGlmZmljdWx0IHRvIGZp
Z3VyZSBvdXQgaW4gZ2VuZXJhbCAoZXNwZWNpYWxseSBpbiB0aGUgbWlkZGxlIG9mIGRvaW5nIGxh
eW91dCksIHNvIHdlIG9ubHkgaGFuZGxlIHRoZQogICAgIC8vIHNpbXBsZSBjYXNlIG9mIGFuIGFu
b255bW91cyBibG9jayB0cnVuY2F0aW5nIHdoZW4gaXQncyBwYXJlbnQgaXMgY2xpcHBlZC4KICAg
ICBhdXRvKiBwYXJlbnQgPSBtX2Zsb3cucGFyZW50KCk7Ci0gICAgYm9vbCBoYXNUZXh0T3ZlcmZs
b3cgPSAoc3R5bGUoKS50ZXh0T3ZlcmZsb3coKSA9PSBUZXh0T3ZlcmZsb3c6OkVsbGlwc2lzICYm
IG1fZmxvdy5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgfHwgKG1fZmxvdy5pc0Fub255bW91
c0Jsb2NrKCkgJiYgcGFyZW50ICYmIHBhcmVudC0+aXNSZW5kZXJCbG9jaygpICYmIHBhcmVudC0+
c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSA9PSBUZXh0T3ZlcmZsb3c6OkVsbGlwc2lzICYmIHBhcmVu
dC0+aGFzT3ZlcmZsb3dDbGlwKCkpOworICAgIGJvb2wgaGFzVGV4dE92ZXJmbG93ID0gKHN0eWxl
KCkudGV4dE92ZXJmbG93KCkgPT0gVGV4dE92ZXJmbG93OjpFbGxpcHNpcyAmJiBtX2Zsb3cuaGFz
Tm9uVmlzaWJsZU92ZXJmbG93KCkpCisgICAgICAgIHx8IChtX2Zsb3cuaXNBbm9ueW1vdXNCbG9j
aygpICYmIHBhcmVudCAmJiBwYXJlbnQtPmlzUmVuZGVyQmxvY2soKSAmJiBwYXJlbnQtPnN0eWxl
KCkudGV4dE92ZXJmbG93KCkgPT0gVGV4dE92ZXJmbG93OjpFbGxpcHNpcyAmJiBwYXJlbnQtPmhh
c05vblZpc2libGVPdmVyZmxvdygpKTsKIAogICAgIC8vIFdhbGsgYWxsIHRoZSBsaW5lcyBhbmQg
ZGVsZXRlIG91ciBlbGxpcHNpcyBsaW5lIGJveGVzIGlmIHRoZXkgZXhpc3QuCiAgICAgaWYgKGhh
c1RleHRPdmVyZmxvdykKQEAgLTIxMjMsMTggKzIxMjMsMTggQEAgYm9vbCBMZWdhY3lMaW5lTGF5
b3V0OjptYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBJ
bmxpbmUKIAogdm9pZCBMZWdhY3lMaW5lTGF5b3V0OjphZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGls
ZHJlbigpCiB7Ci0gICAgTGF5b3V0VW5pdCBlbmRQYWRkaW5nID0gbV9mbG93Lmhhc092ZXJmbG93
Q2xpcCgpID8gbV9mbG93LnBhZGRpbmdFbmQoKSA6IDBfbHU7CisgICAgTGF5b3V0VW5pdCBlbmRQ
YWRkaW5nID0gbV9mbG93Lmhhc05vblZpc2libGVPdmVyZmxvdygpID8gbV9mbG93LnBhZGRpbmdF
bmQoKSA6IDBfbHU7CiAgICAgLy8gRklYTUU6IE5lZWQgdG8gZmluZCBhbm90aGVyIHdheSB0byBk
byB0aGlzLCBzaW5jZSBzY3JvbGxiYXJzIGNvdWxkIHNob3cgd2hlbiB3ZSBkb24ndCB3YW50IHRo
ZW0gdG8uCiAgICAgaWYgKCFlbmRQYWRkaW5nKQogICAgICAgICBlbmRQYWRkaW5nID0gbV9mbG93
LmVuZFBhZGRpbmdXaWR0aEZvckNhcmV0KCk7Ci0gICAgaWYgKG1fZmxvdy5oYXNPdmVyZmxvd0Ns
aXAoKSAmJiAhZW5kUGFkZGluZyAmJiBtX2Zsb3cuZWxlbWVudCgpICYmIG1fZmxvdy5lbGVtZW50
KCktPmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpICYmIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKQorICAgIGlmIChtX2Zsb3cuaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkgJiYgIWVuZFBh
ZGRpbmcgJiYgbV9mbG93LmVsZW1lbnQoKSAmJiBtX2Zsb3cuZWxlbWVudCgpLT5pc1Jvb3RFZGl0
YWJsZUVsZW1lbnQoKSAmJiBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAg
ICAgZW5kUGFkZGluZyA9IDE7CiAgICAgZm9yIChhdXRvKiBjdXJyID0gZmlyc3RSb290Qm94KCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgIG1fZmxvdy5hZGRM
YXlvdXRPdmVyZmxvdyhjdXJyLT5wYWRkZWRMYXlvdXRPdmVyZmxvd1JlY3QoZW5kUGFkZGluZykp
OwogICAgICAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQgPSBtX2Zsb3cuZW5j
bG9zaW5nRnJhZ21lbnRlZEZsb3coKSA/IGN1cnItPmNvbnRhaW5pbmdGcmFnbWVudCgpIDogbnVs
bHB0cjsKICAgICAgICAgaWYgKGZyYWdtZW50KQogICAgICAgICAgICAgZnJhZ21lbnQtPmFkZExh
eW91dE92ZXJmbG93Rm9yQm94KCZtX2Zsb3csIGN1cnItPnBhZGRlZExheW91dE92ZXJmbG93UmVj
dChlbmRQYWRkaW5nKSk7Ci0gICAgICAgIGlmICghbV9mbG93Lmhhc092ZXJmbG93Q2xpcCgpKSB7
CisgICAgICAgIGlmICghbV9mbG93Lmhhc05vblZpc2libGVPdmVyZmxvdygpKSB7CiAgICAgICAg
ICAgICBMYXlvdXRSZWN0IGNoaWxkVmlzdWFsT3ZlcmZsb3dSZWN0ID0gY3Vyci0+dmlzdWFsT3Zl
cmZsb3dSZWN0KGN1cnItPmxpbmVUb3AoKSwgY3Vyci0+bGluZUJvdHRvbSgpKTsKICAgICAgICAg
ICAgIG1fZmxvdy5hZGRWaXN1YWxPdmVyZmxvdyhjaGlsZFZpc3VhbE92ZXJmbG93UmVjdCk7CiAg
ICAgICAgICAgICBpZiAoZnJhZ21lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAppbmRleCA5MmU5ZjRiMjgxNzc3MjU1MzNlZGRmMzg4MTExNmI4ZTE0ODUzZDJiLi5m
N2MxMTU4MzM4MjRkMGViNzc0NWFkOGExYzdmODY4ODA4MmYyNjc0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTI3NSw3ICsyNzUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9oYWRIb3Jpem9udGFsTGF5b3V0T3ZlcmZsb3coZmFsc2UpCiAgICAgICAgICwg
bV9oYWRWZXJ0aWNhbExheW91dE92ZXJmbG93KGZhbHNlKQogICAgIHsKLSAgICAgICAgbV9zaG91
bGREaXNwYXRjaEV2ZW50ID0gIW1fYmxvY2stPmlzQW5vbnltb3VzKCkgJiYgbV9ibG9jay0+aGFz
T3ZlcmZsb3dDbGlwKCkgJiYgbV9ibG9jay0+ZG9jdW1lbnQoKS5oYXNMaXN0ZW5lclR5cGUoRG9j
dW1lbnQ6Ok9WRVJGTE9XQ0hBTkdFRF9MSVNURU5FUik7CisgICAgICAgIG1fc2hvdWxkRGlzcGF0
Y2hFdmVudCA9ICFtX2Jsb2NrLT5pc0Fub255bW91cygpICYmIG1fYmxvY2stPmhhc05vblZpc2li
bGVPdmVyZmxvdygpICYmIG1fYmxvY2stPmRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKERvY3Vt
ZW50OjpPVkVSRkxPV0NIQU5HRURfTElTVEVORVIpOwogICAgICAgICBpZiAobV9zaG91bGREaXNw
YXRjaEV2ZW50KSB7CiAgICAgICAgICAgICBtX2hhZEhvcml6b250YWxMYXlvdXRPdmVyZmxvdyA9
IG1fYmxvY2stPmhhc0hvcml6b250YWxMYXlvdXRPdmVyZmxvdygpOwogICAgICAgICAgICAgbV9o
YWRWZXJ0aWNhbExheW91dE92ZXJmbG93ID0gbV9ibG9jay0+aGFzVmVydGljYWxMYXlvdXRPdmVy
ZmxvdygpOwpAQCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmVuZEFuZENvbW1p
dFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uKCkKICAgICAgICAgdXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rpb25TdGFjaygpID0gbnVsbHB0cjsKIAogICAg
IGZvciAoYXV0byogYmxvY2sgOiBibG9ja3NUb1VwZGF0ZSkgewotICAgICAgICBBU1NFUlQoYmxv
Y2stPmhhc092ZXJmbG93Q2xpcCgpKTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5oYXNOb25WaXNp
YmxlT3ZlcmZsb3coKSk7CiAgICAgICAgIGJsb2NrLT5sYXllcigpLT51cGRhdGVTY3JvbGxJbmZv
QWZ0ZXJMYXlvdXQoKTsKICAgICB9CiB9CkBAIC01NjgsNyArNTY4LDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6cmVtb3ZlRnJvbVVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uKCkK
IAogdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKIHsKLSAg
ICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmICghaGFzTm9uVmlzaWJsZU92ZXJmbG93
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3OTM3CkBAIC02OTEsNyArNjkxLDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6Y29tcHV0ZU92ZXJmbG93KExheW91dFVuaXQgb2xkQ2xpZW50QWZ0ZXJFZGdl
LCBib29sKQogCiAgICAgYWRkT3ZlcmZsb3dGcm9tUG9zaXRpb25lZE9iamVjdHMoKTsKIAotICAg
IGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgeworICAgIGlmIChoYXNOb25WaXNpYmxlT3ZlcmZsb3co
KSkgewogICAgICAgICAvLyBXaGVuIHdlIGhhdmUgb3ZlcmZsb3cgY2xpcCwgcHJvcGFnYXRlIHRo
ZSBvcmlnaW5hbCBzcGlsbG91dCBzaW5jZSBpdCB3aWxsIGluY2x1ZGUgY29sbGFwc2VkIGJvdHRv
bSBtYXJnaW5zCiAgICAgICAgIC8vIGFuZCBib3R0b20gcGFkZGluZy4gIFNldCB0aGUgYXhpcyB3
ZSBkb24ndCBjYXJlIGFib3V0IHRvIGJlIDEsIHNpbmNlIHdlIHdhbnQgdGhpcyBvdmVyZmxvdyB0
byBhbHdheXMKICAgICAgICAgLy8gYmUgY29uc2lkZXJlZCByZWFjaGFibGUuCkBAIC0xMTM0LDcg
KzExMzQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIC8vIE91ciBzY3JvbGxiYXIgd2lk
Z2V0cyBwYWludCBleGFjdGx5IHdoZW4gd2UgdGVsbCB0aGVtIHRvLCBzbyB0aGF0IHRoZXkgd29y
ayBwcm9wZXJseSB3aXRoCiAgICAgLy8gei1pbmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRl
ZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAg
IC8vIHNpdCBhYm92ZSB0aGUgYmFja2dyb3VuZC9ib3JkZXIuCi0gICAgaWYgKChwaGFzZSA9PSBQ
YWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRC
bG9ja0JhY2tncm91bmQpICYmIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkKKyAgICBpZiAo
KHBoYXNlID09IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCB8fCBwaGFzZSA9PSBQYWludFBo
YXNlOjpDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkgJiYg
bGF5ZXIoKQogICAgICAgICAmJiBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpICYmIHN0eWxlKCku
dmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUgJiYgcGFpbnRJbmZvLnNob3VsZFBh
aW50V2l0aGluUm9vdCgqdGhpcykgJiYgIXBhaW50SW5mby5wYWludFJvb3RCYWNrZ3JvdW5kT25s
eSgpKQogICAgICAgICBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpLT5wYWludE92ZXJmbG93Q29u
dHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRP
ZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOwogfQpAQCAtMTQ1MSw3ICsx
NDUxLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNTZWxlY3Rpb25Sb290KCkgY29uc3QKICAgICBp
ZiAoaXNUYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgIGlmIChp
c0JvZHkoKSB8fCBpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkgfHwgaGFzT3ZlcmZsb3dDbGlw
KCkKKyAgICBpZiAoaXNCb2R5KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpIHx8IGhh
c05vblZpc2libGVPdmVyZmxvdygpCiAgICAgICAgIHx8IGlzUG9zaXRpb25lZCgpIHx8IGlzRmxv
YXRpbmcoKQogICAgICAgICB8fCBpc1RhYmxlQ2VsbCgpIHx8IGlzSW5saW5lQmxvY2tPcklubGlu
ZVRhYmxlKCkKICAgICAgICAgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8
IGhhc01hc2soKSB8fCBpc1dyaXRpbmdNb2RlUm9vdCgpCkBAIC0yMDc2LDcgKzIwNzYsNyBAQCBi
b29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJ
ZiB3ZSBoYXZlIGNsaXBwaW5nLCB0aGVuIHdlIGNhbid0IGhhdmUgYW55IHNwaWxsb3V0LgotICAg
IGJvb2wgdXNlQ2xpcCA9IChoYXNDb250cm9sQ2xpcCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpKTsK
KyAgICBib29sIHVzZUNsaXAgPSAoaGFzQ29udHJvbENsaXAoKSB8fCBoYXNOb25WaXNpYmxlT3Zl
cmZsb3coKSk7CiAgICAgYm9vbCBjaGVja0NoaWxkcmVuID0gIXVzZUNsaXAgfHwgKGhhc0NvbnRy
b2xDbGlwKCkgPyBsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMoY29udHJvbENsaXBSZWN0
KGFkanVzdGVkTG9jYXRpb24pKSA6IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVy
Zmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24sIG51bGxwdHIsIEluY2x1ZGVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSkpKTsKICAgICBpZiAoY2hlY2tDaGlsZHJlbiAmJiBoaXRUZXN0Q2hpbGRyZW4o
cmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhZGp1c3RlZExvY2F0aW9uLCBo
aXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yODUzLDcgKzI4NTMsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4m
IHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludAogICAgIH0gZWxzZSBpZiAod2lkdGgoKSAmJiBoZWln
aHQoKSkKICAgICAgICAgcmVjdHMuYXBwZW5kKExheW91dFJlY3QoYWRkaXRpb25hbE9mZnNldCwg
c2l6ZSgpKSk7CiAKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpICYmICFoYXNDb250cm9sQ2xp
cCgpKSB7CisgICAgaWYgKCFoYXNOb25WaXNpYmxlT3ZlcmZsb3coKSAmJiAhaGFzQ29udHJvbENs
aXAoKSkgewogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgICAgIGFkZEZv
Y3VzUmluZ1JlY3RzRm9ySW5saW5lQ2hpbGRyZW4ocmVjdHMsIGFkZGl0aW9uYWxPZmZzZXQsIHBh
aW50Q29udGFpbmVyKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHAKaW5kZXggNDg5NzViN2VjZmMzMzRlMDE3NzJmZWZlZjZiNTVjNTNiMjg2Mzkw
Yi4uOWFkMjNlYjU4ODRjODhkN2YxZjJhZGUzOWJkY2RmMTcwZGZmN2RlZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTU4OSwxMiArNTg5LDEy
IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxICiAgICAgYm9vbCBkaWRGdWxsUmVwYWludCA9IHJl
cGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKICAgICBpZiAoIWRpZEZ1bGxSZXBhaW50ICYm
IHJlcGFpbnRMb2dpY2FsVG9wICE9IHJlcGFpbnRMb2dpY2FsQm90dG9tICYmIChzdHlsZVRvVXNl
LnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlIHx8IGVuY2xvc2luZ0xheWVyKCkt
Pmhhc1Zpc2libGVDb250ZW50KCkpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCB0aWdo
dGVuIHVwIHRoZSBsZWZ0IGFuZCByaWdodCBpbnZhbGlkYXRpb24gcG9pbnRzIGlmIHdlIGxldCBs
YXlvdXRJbmxpbmVDaGlsZHJlbiBmaWxsIHRoZW0gaW4gYmFzZWQgb2ZmIHRoZSBwYXJ0aWN1bGFy
IGxpbmVzCi0gICAgICAgIC8vIGl0IGhhZCB0byBsYXkgb3V0LiBXZSB3b3VsZG4ndCBuZWVkIHRo
ZSBoYXNPdmVyZmxvd0NsaXAoKSBoYWNrIGluIHRoYXQgY2FzZSBlaXRoZXIuCisgICAgICAgIC8v
IGl0IGhhZCB0byBsYXkgb3V0LiBXZSB3b3VsZG4ndCBuZWVkIHRoZSBoYXNOb25WaXNpYmxlT3Zl
cmZsb3coKSBoYWNrIGluIHRoYXQgY2FzZSBlaXRoZXIuCiAgICAgICAgIExheW91dFVuaXQgcmVw
YWludExvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpOwogICAgICAgICBM
YXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsUmlnaHQgPSBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxv
dygpOwotICAgICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgaWYgKGhhc05v
blZpc2libGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGNsaXBwZWQg
b3ZlcmZsb3csIHdlIHNob3VsZCB1c2UgbGF5b3V0IG92ZXJmbG93IGFzIHdlbGwsIHNpbmNlIHZp
c3VhbCBvdmVyZmxvdyBmcm9tIGxpbmVzIGRpZG4ndCBwcm9wYWdhdGUgdG8gb3VyIGJsb2NrJ3Mg
b3ZlcmZsb3cuCi0gICAgICAgICAgICAvLyBOb3RlIHRoZSBvbGQgY29kZSBkaWQgdGhpcyBhcyB3
ZWxsIGJ1dCBldmVuIGZvciBvdmVyZmxvdzp2aXNpYmxlLiBUaGUgYWRkaXRpb24gb2YgaGFzT3Zl
cmZsb3dDbGlwKCkgYXQgbGVhc3QgdGlnaHRlbnMgdXAgdGhlIGhhY2sgYSBiaXQuCisgICAgICAg
ICAgICAvLyBOb3RlIHRoZSBvbGQgY29kZSBkaWQgdGhpcyBhcyB3ZWxsIGJ1dCBldmVuIGZvciBv
dmVyZmxvdzp2aXNpYmxlLiBUaGUgYWRkaXRpb24gb2YgaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkg
YXQgbGVhc3QgdGlnaHRlbnMgdXAgdGhlIGhhY2sgYSBiaXQuCiAgICAgICAgICAgICAvLyBsYXlv
dXRJbmxpbmVDaGlsZHJlbiBzaG91bGQgYmUgcGF0Y2hlZCB0byBjb21wdXRlIHRoZSBlbnRpcmUg
cmVwYWludCByZWN0LgogICAgICAgICAgICAgcmVwYWludExvZ2ljYWxMZWZ0ID0gc3RkOjptaW4o
cmVwYWludExvZ2ljYWxMZWZ0LCBsb2dpY2FsTGVmdExheW91dE92ZXJmbG93KCkpOwogICAgICAg
ICAgICAgcmVwYWludExvZ2ljYWxSaWdodCA9IHN0ZDo6bWF4KHJlcGFpbnRMb2dpY2FsUmlnaHQs
IGxvZ2ljYWxSaWdodExheW91dE92ZXJmbG93KCkpOwpAQCAtNjA2LDcgKzYwNiw3IEBAIHZvaWQg
UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91
dFVuaXQgcGFnZUxvZ2ljYWxICiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlcGFpbnRSZWN0
ID0gTGF5b3V0UmVjdChyZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxMZWZ0LCByZXBh
aW50TG9naWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbFJpZ2h0
IC0gcmVwYWludExvZ2ljYWxMZWZ0KTsKIAotICAgICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkp
IHsKKyAgICAgICAgaWYgKGhhc05vblZpc2libGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICAv
LyBBZGp1c3QgcmVwYWludCByZWN0IGZvciBzY3JvbGwgb2Zmc2V0CiAgICAgICAgICAgICByZXBh
aW50UmVjdC5tb3ZlQnkoLXNjcm9sbFBvc2l0aW9uKCkpOwogCkBAIC0zMDUyLDcgKzMwNTIsNyBA
QCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRqdXN0Rm9yQm9yZGVyRml0KExheW91dFVuaXQgeCwg
TGF5b3V0VW5pdCYgbGVmdCwgTGF5b3V0VQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoUmVu
ZGVyQm94KiBvYmogPSBmaXJzdENoaWxkQm94KCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGlu
Z0JveCgpKSB7CiAgICAgICAgICAgICBpZiAoIW9iai0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9z
aXRpb25lZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrRmxvdz4oKm9i
aikgJiYgIW9iai0+aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgICAgICAgICAgaWYgKGlzPFJl
bmRlckJsb2NrRmxvdz4oKm9iaikgJiYgIW9iai0+aGFzTm9uVmlzaWJsZU92ZXJmbG93KCkpCiAg
ICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKm9iaikuYWRqdXN0
Rm9yQm9yZGVyRml0KHggKyBvYmotPngoKSwgbGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG9iai0+c3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJs
ZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgYSByZXBsYWNlZCBlbGVtZW50IG9y
IHNvbWUga2luZCBvZiBub24tYmxvY2stZmxvdyBvYmplY3QuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKaW5kZXggN2NjMGZkZWUzYjg0ZWIxOWU3OGUzYzZlNWE5
OWFiZjhhOTE2MTExZS4uZGZmNjFjYzkxZTc4Y2IyMThjMjk5OTFjNzNlYjIzYzk1M2ZiYjY5NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaApAQCAtNjM3LDcg
KzYzNyw3IEBAIGlubGluZSBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dCogUmVuZGVyQmxv
Y2tGbG93Ojptb2Rlcm5MaW5lTGF5b3V0KCkKIAogaW5saW5lIExheW91dFVuaXQgUmVuZGVyQmxv
Y2tGbG93OjplbmRQYWRkaW5nV2lkdGhGb3JDYXJldCgpIGNvbnN0CiB7Ci0gICAgaWYgKGVsZW1l
bnQoKSAmJiBlbGVtZW50KCktPmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpICYmIGhhc092ZXJmbG93
Q2xpcCgpICYmIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmICFwYWRkaW5nRW5k
KCkpCisgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlzUm9vdEVkaXRhYmxlRWxlbWVu
dCgpICYmIGhhc05vblZpc2libGVPdmVyZmxvdygpICYmIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpICYmICFwYWRkaW5nRW5kKCkpCiAgICAgICAgIHJldHVybiBjYXJldFdpZHRoOwog
ICAgIHJldHVybiB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmlu
ZGV4IDY4OWIxN2RjMDgwZWViNTUwYTJhYjc0ODZiZmI4N2VjOGNhOTg0ZjEuLjQwMjgwZWFhMTNl
MTYzMTFkYTQyMmY5NGU1NDRlM2I2ZDZmYmJkYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCkBAIC0xMzIsNyArMTMyLDcgQEAgc3RhdGljIHZvaWQgcmVtb3ZlQ29udHJv
bFN0YXRlc0ZvclJlbmRlcmVyKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpCiAgICAgY29udHJv
bFN0YXRlc1JlbmRlcmVyTWFwKCkucmVtb3ZlKCZyZW5kZXJlcik7CiB9CiAKLWJvb2wgUmVuZGVy
Qm94OjpzX2hhZE92ZXJmbG93Q2xpcCA9IGZhbHNlOworYm9vbCBSZW5kZXJCb3g6OnNfaGFkTm9u
VmlzaWJsZU92ZXJmbG93ID0gZmFsc2U7CiAKIFJlbmRlckJveDo6UmVuZGVyQm94KEVsZW1lbnQm
IGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUsIEJhc2VUeXBlRmxhZ3MgYmFzZVR5cGVGbGFn
cykKICAgICA6IFJlbmRlckJveE1vZGVsT2JqZWN0KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpLCBi
YXNlVHlwZUZsYWdzKQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgUmVuZGVyQm94OjpyZW1vdmVG
bG9hdGluZ09yUG9zaXRpb25lZENoaWxkRnJvbUJsb2NrTGlzdHMoKQogCiB2b2lkIFJlbmRlckJv
eDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSYgbmV3U3R5bGUpCiB7Ci0gICAgc19oYWRPdmVyZmxvd0NsaXAgPSBoYXNPdmVyZmxvd0NsaXAo
KTsKKyAgICBzX2hhZE5vblZpc2libGVPdmVyZmxvdyA9IGhhc05vblZpc2libGVPdmVyZmxvdygp
OwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHls
ZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOwogICAgIGlmIChvbGRTdHlsZSkgewpAQCAtMzE2LDcg
KzMxNiw3IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2Ug
ZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAKICAgICAvLyBJZiBvdXIgem9vbSBm
YWN0b3IgY2hhbmdlcyBhbmQgd2UgaGF2ZSBhIGRlZmluZWQgc2Nyb2xsTGVmdC9Ub3AsIHdlIG5l
ZWQgdG8gYWRqdXN0IHRoYXQgdmFsdWUgaW50byB0aGUKICAgICAvLyBuZXcgem9vbWVkIGNvb3Jk
aW5hdGUgc3BhY2UuCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgb2xk
U3R5bGUgJiYgb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBuZXdTdHlsZS5lZmZlY3RpdmVa
b29tKCkpIHsKKyAgICBpZiAoaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkgJiYgbGF5ZXIoKSAmJiBv
bGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2
ZVpvb20oKSkgewogICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBsYXllcigpLT5z
Y3JvbGxhYmxlQXJlYSgpKSB7CiAgICAgICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3Np
dGlvbiA9IHNjcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpOwogICAgICAgICAgICAgZmxv
YXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpIC8gb2xkU3R5bGUt
PmVmZmVjdGl2ZVpvb20oKTsKQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lkIFJlbmRlckJveDo6dXBk
YXRlRnJvbVN0eWxlKCkKIAogICAgIC8vIFdlIGFsc28gaGFuZGxlIDxib2R5PiBhbmQgPGh0bWw+
LCB3aG9zZSBvdmVyZmxvdyBhcHBsaWVzIHRvIHRoZSB2aWV3cG9ydC4KICAgICBpZiAoc3R5bGVU
b1VzZS5vdmVyZmxvd1goKSAhPSBPdmVyZmxvdzo6VmlzaWJsZSAmJiAhaXNEb2NFbGVtZW50UmVu
ZGVyZXIgJiYgaXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAgIGJvb2wgYm94SGFzT3ZlcmZsb3dD
bGlwID0gdHJ1ZTsKKyAgICAgICAgYm9vbCBib3hIYXNOb25WaXNpYmxlT3ZlcmZsb3cgPSB0cnVl
OwogICAgICAgICBpZiAoaXNCb2R5KCkpIHsKICAgICAgICAgICAgIC8vIE92ZXJmbG93IG9uIHRo
ZSBib2R5IGNhbiBwcm9wYWdhdGUgdG8gdGhlIHZpZXdwb3J0IHVuZGVyIHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucy4KICAgICAgICAgICAgIC8vICgxKSBUaGUgcm9vdCBlbGVtZW50IGlzIDxodG1s
Pi4KQEAgLTQ5MiwyMCArNDkyLDIwIEBAIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVGcm9tU3R5bGUo
KQogICAgICAgICAgICAgaWYgKGlzPEhUTUxIdG1sRWxlbWVudD4oKmRvY3VtZW50KCkuZG9jdW1l
bnRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgJiYgZG9jdW1lbnQoKS5ib2R5KCkgPT0gZWxl
bWVudCgpCiAgICAgICAgICAgICAgICAgJiYgZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKS0+
cmVuZGVyZXIoKS0+c3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6VmlzaWJsZSkgewot
ICAgICAgICAgICAgICAgIGJveEhhc092ZXJmbG93Q2xpcCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGJveEhhc05vblZpc2libGVPdmVyZmxvdyA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdyBjbGlwLgogICAgICAgICAvLyBJ
dCdzIHN1ZmZpY2llbnQgdG8ganVzdCBjaGVjayBvbmUgZGlyZWN0aW9uLCBzaW5jZSBpdCdzIGls
bGVnYWwgdG8gaGF2ZSB2aXNpYmxlIG9uIG9ubHkgb25lIG92ZXJmbG93IHZhbHVlLgotICAgICAg
ICBpZiAoYm94SGFzT3ZlcmZsb3dDbGlwKSB7Ci0gICAgICAgICAgICBpZiAoIXNfaGFkT3ZlcmZs
b3dDbGlwICYmIGhhc1JlbmRlck92ZXJmbG93KCkpIHsKKyAgICAgICAgaWYgKGJveEhhc05vblZp
c2libGVPdmVyZmxvdykgeworICAgICAgICAgICAgaWYgKCFzX2hhZE5vblZpc2libGVPdmVyZmxv
dyAmJiBoYXNSZW5kZXJPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICAgICAgLy8gRXJhc2UgdGhl
IG92ZXJmbG93LgogICAgICAgICAgICAgICAgIC8vIE92ZXJmbG93IGNoYW5nZXMgaGF2ZSB0byBy
ZXN1bHQgaW4gaW1tZWRpYXRlIHJlcGFpbnRzIG9mIHRoZSBlbnRpcmUgbGF5b3V0IG92ZXJmbG93
IGFyZWEgYmVjYXVzZQogICAgICAgICAgICAgICAgIC8vIHJlcGFpbnRzIGlzc3VlZCBieSByZW1v
dmFsIG9mIGRlc2NlbmRhbnRzIGdldCBjbGlwcGVkIHVzaW5nIHRoZSB1cGRhdGVkIHN0eWxlIHdo
ZW4gdGhleSBzaG91bGRuJ3QuCiAgICAgICAgICAgICAgICAgcmVwYWludFJlY3RhbmdsZSh2aXN1
YWxPdmVyZmxvd1JlY3QoKSk7CiAgICAgICAgICAgICAgICAgcmVwYWludFJlY3RhbmdsZShsYXlv
dXRPdmVyZmxvd1JlY3QoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRIYXNPdmVy
Zmxvd0NsaXAoKTsKKyAgICAgICAgICAgIHNldEhhc05vblZpc2libGVPdmVyZmxvdygpOwogICAg
ICAgICB9CiAgICAgfQogICAgIHNldEhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eShzdHlsZVRv
VXNlLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpKTsKQEAgLTU0OCw3ICs1NDgsNyBAQCBM
YXlvdXRVbml0IFJlbmRlckJveDo6Y2xpZW50SGVpZ2h0KCkgY29uc3QKIAogaW50IFJlbmRlckJv
eDo6c2Nyb2xsV2lkdGgoKSBjb25zdAogewotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBs
YXllcigpKQorICAgIGlmIChoYXNOb25WaXNpYmxlT3ZlcmZsb3coKSAmJiBsYXllcigpKQogICAg
ICAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKTsKICAgICAvLyBGb3Igb2JqZWN0cyB3
aXRoIHZpc2libGUgb3ZlcmZsb3csIHRoaXMgbWF0Y2hlcyBJRS4KICAgICAvLyBGSVhNRTogTmVl
ZCB0byB3b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KQEAgLTU2MSw3ICs1NjEsNyBAQCBp
bnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9s
bEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkp
CisgICAgaWYgKGhhc05vblZpc2libGVPdmVyZmxvdygpICYmIGxheWVyKCkpCiAgICAgICAgIHJl
dHVybiBsYXllcigpLT5zY3JvbGxIZWlnaHQoKTsKICAgICAvLyBGb3Igb2JqZWN0cyB3aXRoIHZp
c2libGUgb3ZlcmZsb3csIHRoaXMgbWF0Y2hlcyBJRS4KICAgICAvLyBGSVhNRTogTmVlZCB0byB3
b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KQEAgLTU3MiwxMyArNTcyLDEzIEBAIGludCBS
ZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiBpbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0
KCkgY29uc3QKIHsKICAgICBhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IGxheWVyKCkgPyBsYXllcigp
LT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKLSAgICByZXR1cm4gKGhhc092ZXJmbG93Q2xp
cCgpICYmIHNjcm9sbGFibGVBcmVhKSA/IHNjcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigp
LngoKSA6IDA7CisgICAgcmV0dXJuIChoYXNOb25WaXNpYmxlT3ZlcmZsb3coKSAmJiBzY3JvbGxh
YmxlQXJlYSkgPyBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOwogfQog
CiBpbnQgUmVuZGVyQm94OjpzY3JvbGxUb3AoKSBjb25zdAogewogICAgIGF1dG8qIHNjcm9sbGFi
bGVBcmVhID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOwot
ICAgIHJldHVybiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUFyZWEpID8gc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICByZXR1cm4gKGhhc05vblZp
c2libGVPdmVyZmxvdygpICYmIHNjcm9sbGFibGVBcmVhKSA/IHNjcm9sbGFibGVBcmVhLT5zY3Jv
bGxQb3NpdGlvbigpLnkoKSA6IDA7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpyZXNldExvZ2ljYWxI
ZWlnaHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01OTcsNyArNTk3LDcgQEAgc3RhdGljIHZv
aWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhJiBzY3Jv
bGxhYmxlQXJlYSkKIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQs
IGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAo
IWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICghaGFzTm9uVmlzaWJsZU92
ZXJmbG93KCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvKiBzY3JvbGxh
YmxlQXJlYSA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CiAgICAgQVNTRVJUKHNjcm9sbGFi
bGVBcmVhKTsKQEAgLTYwNyw3ICs2MDcsNyBAQCB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVm
dChpbnQgbmV3TGVmdCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJiBvcAogCiB2
b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3AsIGNvbnN0IFNjcm9sbFBvc2l0
aW9uQ2hhbmdlT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgp
IHx8ICFsYXllcigpKQorICAgIGlmICghaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkgfHwgIWxheWVy
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IGxheWVyKCkt
PnNjcm9sbGFibGVBcmVhKCk7CiAgICAgQVNTRVJUKHNjcm9sbGFibGVBcmVhKTsKQEAgLTYxNyw3
ICs2MTcsNyBAQCB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3AsIGNvbnN0
IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgb3B0aQogCiB2b2lkIFJlbmRlckJveDo6c2V0
U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTY3Jv
bGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxv
d0NsaXAoKSB8fCAhbGF5ZXIoKSkKKyAgICBpZiAoIWhhc05vblZpc2libGVPdmVyZmxvdygpIHx8
ICFsYXllcigpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOwogICAgIEFTU0VSVChzY3JvbGxhYmxlQXJlYSk7CkBA
IC04NDEsMTMgKzg0MSwxMyBAQCBib29sIFJlbmRlckJveDo6Zml4ZWRFbGVtZW50TGF5c091dFJl
bGF0aXZlVG9GcmFtZShjb25zdCBGcmFtZVZpZXcmIGZyYW1lVmlldykgYwogCiBib29sIFJlbmRl
ckJveDo6aW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgIWxheWVyKCktPmhhc092ZXJsYXlTY3Jv
bGxiYXJzKCkKKyAgICByZXR1cm4gaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkgJiYgbGF5ZXIoKSAm
JiAhbGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQogICAgICAgICAmJiAoc3R5bGUoKS5v
dmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0g
T3ZlcmZsb3c6OkF1dG8pOwogfQogCiBib29sIFJlbmRlckJveDo6aW5jbHVkZUhvcml6b250YWxT
Y3JvbGxiYXJTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
bGF5ZXIoKSAmJiAhbGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQorICAgIHJldHVybiBo
YXNOb25WaXNpYmxlT3ZlcmZsb3coKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVybGF5
U2Nyb2xsYmFycygpCiAgICAgICAgICYmIChzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93
OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byk7CiB9CiAK
QEAgLTg2OSw3ICs4NjksNyBAQCBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdp
ZHRoKCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmICghaGFz
Tm9uVmlzaWJsZU92ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgKHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6
OlNjcm9sbCAmJiAhY2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSkpIHsKQEAgLTk1OSw3ICs5NTks
NyBAQCBib29sIFJlbmRlckJveDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSgpIGNv
bnN0CiAgICAgaWYgKGlzUmVuZGVyVmlldygpIHx8IGlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCisg
ICAgaWYgKGhhc05vblZpc2libGVPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIGlmIChzdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkKQEAgLTk3Nyw3ICs5Nzcs
NyBAQCBib29sIFJlbmRlckJveDo6Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0
CiAgICAgaWYgKGlzUmVuZGVyVmlldygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlm
ICghaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgaWYgKCFoYXNOb25WaXNpYmxlT3ZlcmZsb3coKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGhhc1Njcm9sbGFibGVPdmVyZmxvd1go
KSB8fCBoYXNTY3JvbGxhYmxlT3ZlcmZsb3dZKCkpCkBAIC05ODgsNyArOTg4LDcgQEAgYm9vbCBS
ZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKSBjb25zdAogCiBib29sIFJl
bmRlckJveDo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAogewotICAgIHJldHVybiBo
YXNPdmVyZmxvd0NsaXAoKSAmJiBoYXNMYXllcigpICYmIGxheWVyKCktPnVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7CisgICAgcmV0dXJuIGhhc05vblZpc2libGVPdmVyZmxvdygpICYmIGhhc0xh
eWVyKCkgJiYgbGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKIH0KIAogdm9pZCBS
ZW5kZXJCb3g6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQpAQCAtMTA1OCw3
ICsxMDU4LDcgQEAgYm9vbCBSZW5kZXJCb3g6OmNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkgY29u
c3QKIAogYm9vbCBSZW5kZXJCb3g6Omhhc0F1dG9TY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSkKKyAg
ICBpZiAoIWhhc05vblZpc2libGVPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBhdXRvIGlzQXV0b09yU2Nyb2xsV2l0aE92ZXJsYXlTY3JvbGxiYXIgPSBbJl0oT3ZlcmZs
b3cgb3ZlcmZsb3cpIHsKQEAgLTEwNzYsNyArMTA3Niw3IEBAIGJvb2wgUmVuZGVyQm94OjpoYXNB
dXRvU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAogCiBi
b29sIFJlbmRlckJveDo6aGFzQWx3YXlzUHJlc2VudFNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikgY29uc3QKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQor
ICAgIGlmICghaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGF1dG8gaXNBbHdheXNWaXNpYmxlU2Nyb2xsYmFyID0gWyZdKE92ZXJmbG93IG92ZXJm
bG93KSB7CkBAIC0xMDk5LDcgKzEwOTksNyBAQCBib29sIFJlbmRlckJveDo6bmVlZHNQcmVmZXJy
ZWRXaWR0aHNSZWNhbGN1bGF0aW9uKCkgY29uc3QKIAogU2Nyb2xsUG9zaXRpb24gUmVuZGVyQm94
OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSkK
KyAgICBpZiAoIWhhc05vblZpc2libGVPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4geyAwLCAw
IH07CiAKICAgICBBU1NFUlQoaGFzTGF5ZXIoKSk7CkBAIC0xMTEyLDcgKzExMTIsNyBAQCBTY3Jv
bGxQb3NpdGlvbiBSZW5kZXJCb3g6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIAogTGF5b3V0U2l6
ZSBSZW5kZXJCb3g6OmNhY2hlZFNpemVGb3JPdmVyZmxvd0NsaXAoKSBjb25zdAogewotICAgIEFT
U0VSVChoYXNPdmVyZmxvd0NsaXAoKSk7CisgICAgQVNTRVJUKGhhc05vblZpc2libGVPdmVyZmxv
dygpKTsKICAgICBBU1NFUlQoaGFzTGF5ZXIoKSk7CiAgICAgcmV0dXJuIGxheWVyKCktPnNpemUo
KTsKIH0KQEAgLTE3NDQsNyArMTc0NCw3IEBAIGJvb2wgUmVuZGVyQm94OjpiYWNrZ3JvdW5kSGFz
T3BhcXVlVG9wTGF5ZXIoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBD
bGlwcGVkIHdpdGggbG9jYWwgc2Nyb2xsaW5nCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYm
IGZpbGxMYXllci5hdHRhY2htZW50KCkgPT0gRmlsbEF0dGFjaG1lbnQ6OkxvY2FsQmFja2dyb3Vu
ZCkKKyAgICBpZiAoaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkgJiYgZmlsbExheWVyLmF0dGFjaG1l
bnQoKSA9PSBGaWxsQXR0YWNobWVudDo6TG9jYWxCYWNrZ3JvdW5kKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAoZmlsbExheWVyLmhhc09wYXF1ZUltYWdlKCp0aGlzKSAmJiBmaWxs
TGF5ZXIuaGFzUmVwZWF0WFkoKSAmJiBmaWxsTGF5ZXIuaW1hZ2UoKS0+Y2FuUmVuZGVyKHRoaXMs
IHN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKSkKQEAgLTIwMDAsNyArMjAwMCw3IEBAIGJvb2wgUmVu
ZGVyQm94OjpwdXNoQ29udGVudHNDbGlwKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgaXNDb250
cm9sQ2xpcCA9IGhhc0NvbnRyb2xDbGlwKCk7Ci0gICAgYm9vbCBpc092ZXJmbG93Q2xpcCA9IGhh
c092ZXJmbG93Q2xpcCgpICYmICFsYXllcigpLT5pc1NlbGZQYWludGluZ0xheWVyKCk7CisgICAg
Ym9vbCBpc092ZXJmbG93Q2xpcCA9IGhhc05vblZpc2libGVPdmVyZmxvdygpICYmICFsYXllcigp
LT5pc1NlbGZQYWludGluZ0xheWVyKCk7CiAgICAgCiAgICAgaWYgKCFpc0NvbnRyb2xDbGlwICYm
ICFpc092ZXJmbG93Q2xpcCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjAyNyw3ICsyMDI3
LDcgQEAgYm9vbCBSZW5kZXJCb3g6OnB1c2hDb250ZW50c0NsaXAoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXUKIAogdm9pZCBSZW5kZXJCb3g6OnBvcENvbnRl
bnRzQ2xpcChQYWludEluZm8mIHBhaW50SW5mbywgUGFpbnRQaGFzZSBvcmlnaW5hbFBoYXNlLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKGhhc0Nv
bnRyb2xDbGlwKCkgfHwgKGhhc092ZXJmbG93Q2xpcCgpICYmICFsYXllcigpLT5pc1NlbGZQYWlu
dGluZ0xheWVyKCkpKTsKKyAgICBBU1NFUlQoaGFzQ29udHJvbENsaXAoKSB8fCAoaGFzTm9uVmlz
aWJsZU92ZXJmbG93KCkgJiYgIWxheWVyKCktPmlzU2VsZlBhaW50aW5nTGF5ZXIoKSkpOwogCiAg
ICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpFdmVudFJlZ2lvbikKICAgICAg
ICAgcGFpbnRJbmZvLmV2ZW50UmVnaW9uQ29udGV4dC0+cG9wQ2xpcCgpOwpAQCAtMjUxNSw3ICsy
NTE1LDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJCb3g6OmNvbXB1dGVWaXNp
YmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IExheW91dFIKICAgICAvLyBGSVhNRTogV2UgaWdub3Jl
IHRoZSBsaWdodHdlaWdodCBjbGlwcGluZyByZWN0IHRoYXQgY29udHJvbHMgdXNlLCBzaW5jZSBp
ZiB8b3wgaXMgaW4gbWlkLWxheW91dCwKICAgICAvLyBpdHMgY29udHJvbENsaXBSZWN0IHdpbGwg
YmUgd3JvbmcuIEZvciBvdmVyZmxvdyBjbGlwIHdlIHVzZSB0aGUgdmFsdWVzIGNhY2hlZCBieSB0
aGUgbGF5ZXIuCiAgICAgYWRqdXN0ZWRSZWN0LnNldExvY2F0aW9uKHRvcExlZnQpOwotICAgIGlm
IChsb2NhbENvbnRhaW5lci0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICBpZiAobG9jYWxDb250
YWluZXItPmhhc05vblZpc2libGVPdmVyZmxvdygpKSB7CiAgICAgICAgIFJlbmRlckJveCYgY29u
dGFpbmVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqbG9jYWxDb250YWluZXIpOwogICAgICAg
ICBib29sIGlzRW1wdHkgPSAhY29udGFpbmVyQm94LmFwcGx5Q2FjaGVkQ2xpcEFuZFNjcm9sbFBv
c2l0aW9uKGFkanVzdGVkUmVjdCwgY29udGFpbmVyLCBjb250ZXh0KTsKICAgICAgICAgaWYgKGlz
RW1wdHkpIHsKQEAgLTQ3ODYsNyArNDc4Niw3IEBAIGJvb2wgUmVuZGVyQm94OjpzaHJpbmtUb0F2
b2lkRmxvYXRzKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OmNyZWF0ZXNOZXdGb3JtYXR0aW5n
Q29udGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxl
KCkgfHwgaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IGhhc092ZXJmbG93Q2xp
cCgpIHx8IGlzRmxleEl0ZW1JbmNsdWRpbmdEZXByZWNhdGVkKCkKKyAgICByZXR1cm4gaXNJbmxp
bmVCbG9ja09ySW5saW5lVGFibGUoKSB8fCBpc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgfHwgaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkgfHwgaXNGbGV4SXRlbUluY2x1ZGluZ0RlcHJl
Y2F0ZWQoKQogICAgICAgICB8fCBpc1RhYmxlQ2VsbCgpIHx8IGlzVGFibGVDYXB0aW9uKCkgfHwg
aXNGaWVsZHNldCgpIHx8IGlzV3JpdGluZ01vZGVSb290KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRS
ZW5kZXJlcigpIHx8IGlzUmVuZGVyRnJhZ21lbnRlZEZsb3coKSB8fCBpc1JlbmRlckZyYWdtZW50
Q29udGFpbmVyKCkKICAgICAgICAgfHwgc3R5bGUoKS5jb250YWluc0xheW91dCgpIHx8IGlzR3Jp
ZEl0ZW0oKSB8fCBzdHlsZSgpLnNwZWNpZmllc0NvbHVtbnMoKSB8fCBzdHlsZSgpLmNvbHVtblNw
YW4oKSA9PSBDb2x1bW5TcGFuOjpBbGwgfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5
cGU6OkZsb3dSb290OwogfQpAQCAtNDg3NCw3ICs0ODc0LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmFk
ZE92ZXJmbG93RnJvbUNoaWxkKGNvbnN0IFJlbmRlckJveCogY2hpbGQsIGNvbnN0IExheW91dFNp
emUmIGQKICAgICAvLyBBZGQgaW4gdmlzdWFsIG92ZXJmbG93IGZyb20gdGhlIGNoaWxkLiAgRXZl
biBpZiB0aGUgY2hpbGQgY2xpcHMgaXRzIG92ZXJmbG93LCBpdCBtYXkgc3RpbGwKICAgICAvLyBo
YXZlIHZpc3VhbCBvdmVyZmxvdyBvZiBpdHMgb3duIHNldCBmcm9tIGJveCBzaGFkb3dzIG9yIHJl
ZmxlY3Rpb25zLiBJdCBpcyB1bm5lY2Vzc2FyeSB0byBwcm9wYWdhdGUgdGhpcwogICAgIC8vIG92
ZXJmbG93IGlmIHdlIGFyZSBjbGlwcGluZyBvdXIgb3duIG92ZXJmbG93LgotICAgIGlmIChjaGls
ZC0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSkKKyAgICBpZiAo
Y2hpbGQtPmhhc1NlbGZQYWludGluZ0xheWVyKCkgfHwgaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkp
CiAgICAgICAgIHJldHVybjsKICAgICBMYXlvdXRSZWN0IGNoaWxkVmlzdWFsT3ZlcmZsb3dSZWN0
ID0gY2hpbGQtPnZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKCZzdHlsZSgpKTsKICAg
ICBjaGlsZFZpc3VhbE92ZXJmbG93UmVjdC5tb3ZlKGRlbHRhKTsKQEAgLTQ4ODksNyArNDg4OSw3
IEBAIHZvaWQgUmVuZGVyQm94OjphZGRMYXlvdXRPdmVyZmxvdyhjb25zdCBMYXlvdXRSZWN0JiBy
ZWN0KQogICAgIAogICAgIC8vIEZvciBvdmVyZmxvdyBjbGlwIG9iamVjdHMsIHdlIGRvbid0IHdh
bnQgdG8gcHJvcGFnYXRlIG92ZXJmbG93IGludG8gdW5yZWFjaGFibGUgYXJlYXMuCiAgICAgTGF5
b3V0UmVjdCBvdmVyZmxvd1JlY3QocmVjdCk7Ci0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpIHx8
IGlzUmVuZGVyVmlldygpKSB7CisgICAgaWYgKGhhc05vblZpc2libGVPdmVyZmxvdygpIHx8IGlz
UmVuZGVyVmlldygpKSB7CiAgICAgICAgIC8vIE92ZXJmbG93IGlzIGluIHRoZSBibG9jaydzIGNv
b3JkaW5hdGUgc3BhY2UgYW5kIHRodXMgaXMgZmxpcHBlZCBmb3IgaG9yaXpvbnRhbC1idCBhbmQg
dmVydGljYWwtcmwgCiAgICAgICAgIC8vIHdyaXRpbmcgbW9kZXMuIEF0IHRoaXMgc3RhZ2UgdGhh
dCBpcyBhY3R1YWxseSBhIHNpbXBsaWZpY2F0aW9uLCBzaW5jZSB3ZSBjYW4gdHJlYXQgaG9yaXpv
bnRhbC10Yi9idCBhcyB0aGUgc2FtZQogICAgICAgICAvLyBhbmQgdmVydGljYWwtbHIvcmwgYXMg
dGhlIHNhbWUuCkBAIC01MDM2LDcgKzUwMzYsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6bGF5
b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudAog
ewogICAgIC8vIE9ubHkgcHJvcGFnYXRlIGludGVyaW9yIGxheW91dCBvdmVyZmxvdyBpZiB3ZSBk
b24ndCBjbGlwIGl0LgogICAgIExheW91dFJlY3QgcmVjdCA9IGJvcmRlckJveFJlY3QoKTsKLSAg
ICBpZiAoIXNob3VsZEFwcGx5TGF5b3V0Q29udGFpbm1lbnQoKnRoaXMpICYmICFoYXNPdmVyZmxv
d0NsaXAoKSkKKyAgICBpZiAoIXNob3VsZEFwcGx5TGF5b3V0Q29udGFpbm1lbnQoKnRoaXMpICYm
ICFoYXNOb25WaXNpYmxlT3ZlcmZsb3coKSkKICAgICAgICAgcmVjdC51bml0ZShsYXlvdXRPdmVy
Zmxvd1JlY3QoKSk7CiAKICAgICBib29sIGhhc1RyYW5zZm9ybSA9IHRoaXMtPmhhc1RyYW5zZm9y
bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IGZiODBjMjliY2Q0OTNj
OGNkNWUwZDczOTBlMzNjYmRmNWVjYzVkZjIuLjQwOGVkMWEzZDQ0M2IwNmQzZTUxYzFiYzE1NmFl
Zjk4OTY5YTExNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTUyLDcg
KzUyLDcgQEAgcHVibGljOgogICAgIC8vIHBvc2l0aW9uOnN0YXRpYyBlbGVtZW50cyB0aGF0IGFy
ZSBub3QgZmxleC1pdGVtcyBnZXQgdGhlaXIgei1pbmRleCBjb2VyY2VkIHRvIGF1dG8uCiAgICAg
Ym9vbCByZXF1aXJlc0xheWVyKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVy
biBpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkgfHwgaXNQb3NpdGlvbmVkKCkgfHwgY3JlYXRl
c0dyb3VwKCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkKKyAgICAgICAgcmV0dXJuIGlzRG9jdW1lbnRF
bGVtZW50UmVuZGVyZXIoKSB8fCBpc1Bvc2l0aW9uZWQoKSB8fCBjcmVhdGVzR3JvdXAoKSB8fCBo
YXNOb25WaXNpYmxlT3ZlcmZsb3coKQogICAgICAgICAgICAgfHwgaGFzVHJhbnNmb3JtUmVsYXRl
ZFByb3BlcnR5KCkgfHwgaGFzSGlkZGVuQmFja2ZhY2UoKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwg
c3R5bGUoKS5zcGVjaWZpZXNDb2x1bW5zKCkKICAgICAgICAgICAgIHx8IHN0eWxlKCkuY29udGFp
bnNMYXlvdXQoKSB8fCAhc3R5bGUoKS5oYXNBdXRvVXNlZFpJbmRleCgpIHx8IGhhc1J1bm5pbmdB
Y2NlbGVyYXRlZEFuaW1hdGlvbnMoKTsKICAgICB9CkBAIC00OTAsOCArNDkwLDggQEAgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBoYXNBbHdheXNQcmVzZW50U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0
aW9uKSBjb25zdDsKIAogICAgIGJvb2wgc2Nyb2xsc092ZXJmbG93KCkgY29uc3QgeyByZXR1cm4g
c2Nyb2xsc092ZXJmbG93WCgpIHx8IHNjcm9sbHNPdmVyZmxvd1koKTsgfQotICAgIGJvb2wgc2Ny
b2xsc092ZXJmbG93WCgpIGNvbnN0IHsgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIChzdHls
ZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1go
KSA9PSBPdmVyZmxvdzo6QXV0byk7IH0KLSAgICBib29sIHNjcm9sbHNPdmVyZmxvd1koKSBjb25z
dCB7IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBP
dmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8p
OyB9CisgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3dYKCkgY29uc3QgeyByZXR1cm4gaGFzTm9uVmlz
aWJsZU92ZXJmbG93KCkgJiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9s
bCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvKTsgfQorICAgIGJvb2wg
c2Nyb2xsc092ZXJmbG93WSgpIGNvbnN0IHsgcmV0dXJuIGhhc05vblZpc2libGVPdmVyZmxvdygp
ICYmIChzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5v
dmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0byk7IH0KIAogICAgIGJvb2wgaGFzSG9yaXpvbnRh
bE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gc2Nyb2xsV2lkdGgoKSAhPSByb3VuZFRvSW50KHBh
ZGRpbmdCb3hXaWR0aCgpKTsgfQogICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0
IHsgcmV0dXJuIHNjcm9sbEhlaWdodCgpICE9IHJvdW5kVG9JbnQocGFkZGluZ0JveEhlaWdodCgp
KTsgfQpAQCAtNzkxLDcgKzc5MSw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICAvLyBV
c2VkIHRvIHN0b3JlIHN0YXRlIGJldHdlZW4gc3R5bGVXaWxsQ2hhbmdlIGFuZCBzdHlsZURpZENo
YW5nZQotICAgIHN0YXRpYyBib29sIHNfaGFkT3ZlcmZsb3dDbGlwOworICAgIHN0YXRpYyBib29s
IHNfaGFkTm9uVmlzaWJsZU92ZXJmbG93OwogfTsKIAogaW5saW5lIFJlbmRlckJveCogUmVuZGVy
Qm94OjpwYXJlbnRCb3goKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYzhhZGFmMmJhODE5MzIxYzRjYmZiNTRkYmM3
YzNkNzJmMjA5ZjMwZS4uMDZlOGNjMTg5ZTQ0ODg0NDhkMGIzZjc5M2ViMmM1NGQ5OTY5Nzc3NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCkBAIC03MjcsNyArNzI3LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRG
aWxsTGF5ZXJFeHRlbmRlZChjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY28KICAgICBib29s
IGluY2x1ZGVSaWdodEVkZ2UgPSBib3ggPyBib3gtPmluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKCkg
OiB0cnVlOwogCiAgICAgYm9vbCBoYXNSb3VuZGVkQm9yZGVyID0gc3R5bGUoKS5oYXNCb3JkZXJS
YWRpdXMoKSAmJiAoaW5jbHVkZUxlZnRFZGdlIHx8IGluY2x1ZGVSaWdodEVkZ2UpOwotICAgIGJv
b2wgY2xpcHBlZFdpdGhMb2NhbFNjcm9sbGluZyA9IGhhc092ZXJmbG93Q2xpcCgpICYmIGJnTGF5
ZXIuYXR0YWNobWVudCgpID09IEZpbGxBdHRhY2htZW50OjpMb2NhbEJhY2tncm91bmQ7CisgICAg
Ym9vbCBjbGlwcGVkV2l0aExvY2FsU2Nyb2xsaW5nID0gaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkg
JiYgYmdMYXllci5hdHRhY2htZW50KCkgPT0gRmlsbEF0dGFjaG1lbnQ6OkxvY2FsQmFja2dyb3Vu
ZDsKICAgICBib29sIGlzQm9yZGVyRmlsbCA9IGJnTGF5ZXIuY2xpcCgpID09IEZpbGxCb3g6OkJv
cmRlcjsKICAgICBib29sIGlzUm9vdCA9IHRoaXMtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIo
KTsKIApAQCAtMjM2MCw3ICsyMzYwLDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym94
U2hhZG93U2hvdWxkQmVBcHBsaWVkVG9CYWNrZ3JvdW5kKGNvbnN0IExheW91dFBvaW4KICAgICBp
ZiAoaW5saW5lRmxvd0JveCAmJiAhaW5saW5lRmxvd0JveC0+Ym94U2hhZG93Q2FuQmVBcHBsaWVk
VG9CYWNrZ3JvdW5kKCpsYXN0QmFja2dyb3VuZExheWVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxhc3RCYWNrZ3JvdW5kTGF5ZXItPmF0
dGFjaG1lbnQoKSA9PSBGaWxsQXR0YWNobWVudDo6TG9jYWxCYWNrZ3JvdW5kKQorICAgIGlmICho
YXNOb25WaXNpYmxlT3ZlcmZsb3coKSAmJiBsYXN0QmFja2dyb3VuZExheWVyLT5hdHRhY2htZW50
KCkgPT0gRmlsbEF0dGFjaG1lbnQ6OkxvY2FsQmFja2dyb3VuZCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5jcHAKaW5kZXggMjE5OTNkMWNlZjFlYTgxMzZiZTA3MmI1YzgwZmI4MTA0NjY1Zjg1
OS4uMDUwZWExZWQ3ZWI2NWJiNmExMDVkNmRhOGExZjA0N2FmNjg1YzUwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAtODg5LDcgKzg4OSw3IEBAIHZv
aWQgUmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSYgbmV3CiAKICAgICAgICAgc2V0SG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KHRydWUpOwogICAgICAgICBzZXRIYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoZmFsc2UpOwotICAg
ICAgICBzZXRIYXNPdmVyZmxvd0NsaXAoZmFsc2UpOworICAgICAgICBzZXRIYXNOb25WaXNpYmxl
T3ZlcmZsb3coZmFsc2UpOwogICAgICAgICBzZXRIYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHko
ZmFsc2UpOwogICAgICAgICBzZXRIYXNSZWZsZWN0aW9uKGZhbHNlKTsKICAgICB9CkBAIC0xMzM2
LDcgKzEzMzYsNyBAQCBib29sIFJlbmRlckVsZW1lbnQ6Om1heUNhdXNlUmVwYWludEluc2lkZVZp
ZXdwb3J0KGNvbnN0IEludFJlY3QqIG9wdGlvbmFsVmlld3BvcgogICAgIGlmIChmcmFtZVZpZXcu
aXNPZmZzY3JlZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFoYXNPdmVy
Zmxvd0NsaXAoKSkgeworICAgIGlmICghaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkpIHsKICAgICAg
ICAgLy8gRklYTUU6IENvbXB1dGluZyB0aGUgb3ZlcmZsb3cgcmVjdCBpcyBleHBlbnNpdmUgaWYg
YW55IGRlc2NlbmRhbnQgaGFzCiAgICAgICAgIC8vIGl0cyBvd24gc2VsZi1wYWludGluZyBsYXll
ci4gQXMgYSByZXN1bHQsIHdlIHByZWZlciB0byBhYm9ydCBlYXJseSBpbgogICAgICAgICAvLyB0
aGlzIGNhc2UgYW5kIGFzc3VtZSBpdCBtYXkgY2F1c2UgdXMgdG8gcmVwYWludCBpbnNpZGUgdGhl
IHZpZXdwb3J0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKaW5kZXgg
ZDM3N2VhNjgyNzg3NmNlMTRhNmU5MDgwMGU1NzAyZDU2ZGNmNDgzZC4uMjM3N2JhOTcyYzRhYzk1
Y2M4Zjc4ZGQzMmRkZTgxOTQ5YzQ3ZmUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5oCkBAIC0xNjQsNyArMTY0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQmFj
a2dyb3VuZCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkuaGFzQmFja2dyb3VuZCgpOyB9CiAgICAg
Ym9vbCBoYXNNYXNrKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS5oYXNNYXNrKCk7IH0KICAgICBi
b29sIGhhc0NsaXAoKSBjb25zdCB7IHJldHVybiBpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiBz
dHlsZSgpLmhhc0NsaXAoKTsgfQotICAgIGJvb2wgaGFzQ2xpcE9yT3ZlcmZsb3dDbGlwKCkgY29u
c3QgeyByZXR1cm4gaGFzQ2xpcCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpOyB9CisgICAgYm9vbCBo
YXNDbGlwT3JOb25WaXNpYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBoYXNDbGlwKCkgfHwg
aGFzTm9uVmlzaWJsZU92ZXJmbG93KCk7IH0KICAgICBib29sIGhhc0NsaXBQYXRoKCkgY29uc3Qg
eyByZXR1cm4gc3R5bGUoKS5jbGlwUGF0aCgpOyB9CiAgICAgYm9vbCBoYXNIaWRkZW5CYWNrZmFj
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkuYmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2Zh
Y2VWaXNpYmlsaXR5OjpIaWRkZW47IH0KICAgICBib29sIGhhc091dGxpbmVBbm5vdGF0aW9uKCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGli
bGVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNw
cAppbmRleCAxZWU4Mzk2MTFkYmY1ZTUzOGM2NjQ1MjkyODkyZDdmMjEzZDBhZGVmLi5lZjllZDQy
YWI1MDIwYTA1YmRlMzJlNTU1NDhkNGY2OWRlZjJhMzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKQEAgLTMxNCw3ICszMTQsNyBAQCBib29s
IFJlbmRlckZsZXhpYmxlQm94OjpoaXRUZXN0Q2hpbGRyZW4oY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZQogICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3Jl
Z3JvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBMYXlvdXRQb2ludCBzY3JvbGxl
ZE9mZnNldCA9IGhhc092ZXJmbG93Q2xpcCgpID8gYWRqdXN0ZWRMb2NhdGlvbiAtIHRvTGF5b3V0
U2l6ZShzY3JvbGxQb3NpdGlvbigpKSA6IGFkanVzdGVkTG9jYXRpb247CisgICAgTGF5b3V0UG9p
bnQgc2Nyb2xsZWRPZmZzZXQgPSBoYXNOb25WaXNpYmxlT3ZlcmZsb3coKSA/IGFkanVzdGVkTG9j
YXRpb24gLSB0b0xheW91dFNpemUoc2Nyb2xsUG9zaXRpb24oKSkgOiBhZGp1c3RlZExvY2F0aW9u
OwogCiAgICAgLy8gSWYgY29sbGVjdGluZyB0aGUgY2hpbGRyZW4gaW4gcmV2ZXJzZSBvcmRlciBp
cyBiYWQgZm9yIHBlcmZvcm1hbmNlLCB0aGlzIFZlY3RvciBjb3VsZCBiZSBkZXRlcm1pbmVkIGF0
IGxheW91dCB0aW1lLgogICAgIFZlY3RvcjxSZW5kZXJCb3gqPiByZXZlcnNlZE9yZGVySXRlcmF0
b3JGb3JIaXRUZXN0aW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYWdtZW50Q29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFnbWVudENvbnRhaW5lci5jcHAKaW5kZXggYjMyMzRlMDEzYzY3OGI2M2E3ODg3NDQ1ODFk
YjkwN2YxZDY5Yjg4Ny4uOWQ2MGUyMTY0MGExNGM0ZWNkNjA2YmFkZmI3MjM1ZTY4MDg2ZTU2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50Q29udGFp
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRDb250
YWluZXIuY3BwCkBAIC0xOTUsNyArMTk1LDcgQEAgYm9vbCBSZW5kZXJGcmFnbWVudENvbnRhaW5l
cjo6aXNMYXN0RnJhZ21lbnQoKSBjb25zdAogCiBib29sIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
OjpzaG91bGRDbGlwRnJhZ21lbnRlZEZsb3dDb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
aGFzT3ZlcmZsb3dDbGlwKCk7CisgICAgcmV0dXJuIGhhc05vblZpc2libGVPdmVyZmxvdygpOwog
fQogCiB2b2lkIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOjpzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQpAQCAtNTEyLDcgKzUx
Miw3IEBAIExheW91dFJlY3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXI6OmxheW91dE92ZXJmbG93
UmVjdEZvckJveEZvclByb3BhZ2F0aW9uKGNvbnN0CiAgICAgLy8gT25seSBwcm9wYWdhdGUgaW50
ZXJpb3IgbGF5b3V0IG92ZXJmbG93IGlmIHdlIGRvbid0IGNsaXAgaXQuCiAgICAgTGF5b3V0UmVj
dCByZWN0ID0gYm94LT5ib3JkZXJCb3hSZWN0SW5GcmFnbWVudCh0aGlzKTsKICAgICByZWN0ID0g
cmVjdEZsb3dQb3J0aW9uRm9yQm94KGJveCwgcmVjdCk7Ci0gICAgaWYgKCFib3gtPmhhc092ZXJm
bG93Q2xpcCgpKQorICAgIGlmICghYm94LT5oYXNOb25WaXNpYmxlT3ZlcmZsb3coKSkKICAgICAg
ICAgcmVjdC51bml0ZShsYXlvdXRPdmVyZmxvd1JlY3RGb3JCb3goYm94KSk7CiAKICAgICBib29s
IGhhc1RyYW5zZm9ybSA9IGJveC0+aGFzVHJhbnNmb3JtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhZ21lbnRlZEZsb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZyYWdtZW50ZWRGbG93LmNwcAppbmRleCBhYzViOWY2NjA4MGNk
N2MwNzQ5YTk1OTMwMDU5YzRkMDQ4NDE3ZmMxLi43MjhhMDFiMzdiN2QyYjJhODkwYjUyOTEwYTM2
MmViNjE3NjJmNDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhZ21lbnRlZEZsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
cmFnbWVudGVkRmxvdy5jcHAKQEAgLTEwNTgsNyArMTA1OCw3IEBAIHZvaWQgUmVuZGVyRnJhZ21l
bnRlZEZsb3c6OmFkZEZyYWdtZW50c092ZXJmbG93RnJvbUNoaWxkKGNvbnN0IFJlbmRlckJveCog
Ym94LCBjCiAgICAgICAgIAogICAgICAgICBmcmFnbWVudC0+YWRkTGF5b3V0T3ZlcmZsb3dGb3JC
b3goYm94LCBjaGlsZExheW91dE92ZXJmbG93UmVjdCk7CiAKLSAgICAgICAgaWYgKGNoaWxkLT5o
YXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAg
ICAgaWYgKGNoaWxkLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGJveC0+aGFzTm9uVmlzaWJs
ZU92ZXJmbG93KCkpIHsKICAgICAgICAgICAgIGlmIChmcmFnbWVudCA9PSBlbmRGcmFnbWVudCkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRleCBmNDM1Y2M0ZjVhMDMwM2VkMzBm
M2I3MTEzMzk2MzhkNmYzMjZmMzQwLi41NzU2MjQ0ZWJlNGEwODRkYTdlM2M5MzhkMmI3OTk1N2Jl
ZWRjYWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAt
ODkxLDcgKzg5MSw3IEBAIExheW91dFJlY3QgUmVuZGVySW5saW5lOjpjbGlwcGVkT3ZlcmZsb3dS
ZWN0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpCiAgICAgaWYgKGhpdFJlcGFp
bnRDb250YWluZXIgfHwgIWNvbnRhaW5pbmdCbG9jaykKICAgICAgICAgcmV0dXJuIHJlcGFpbnRS
ZWN0OwogCi0gICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAg
aWYgKGNvbnRhaW5pbmdCbG9jay0+aGFzTm9uVmlzaWJsZU92ZXJmbG93KCkpCiAgICAgICAgIGNv
bnRhaW5pbmdCbG9jay0+YXBwbHlDYWNoZWRDbGlwQW5kU2Nyb2xsUG9zaXRpb24ocmVwYWludFJl
Y3QsIHJlcGFpbnRDb250YWluZXIsIGNvbnRleHQpOwogCiAgICAgcmVwYWludFJlY3QgPSBjb250
YWluaW5nQmxvY2stPmNvbXB1dGVSZWN0KHJlcGFpbnRSZWN0LCByZXBhaW50Q29udGFpbmVyLCBj
b250ZXh0KTsKQEAgLTk1Nyw3ICs5NTcsNyBAQCBzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IFJl
bmRlcklubGluZTo6Y29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3QgTGF5bwogICAg
IC8vIEZJWE1FOiBXZSBpZ25vcmUgdGhlIGxpZ2h0d2VpZ2h0IGNsaXBwaW5nIHJlY3QgdGhhdCBj
b250cm9scyB1c2UsIHNpbmNlIGlmIHxvfCBpcyBpbiBtaWQtbGF5b3V0LAogICAgIC8vIGl0cyBj
b250cm9sQ2xpcFJlY3Qgd2lsbCBiZSB3cm9uZy4gRm9yIG92ZXJmbG93IGNsaXAgd2UgdXNlIHRo
ZSB2YWx1ZXMgY2FjaGVkIGJ5IHRoZSBsYXllci4KICAgICBhZGp1c3RlZFJlY3Quc2V0TG9jYXRp
b24odG9wTGVmdCk7Ci0gICAgaWYgKGxvY2FsQ29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkg
eworICAgIGlmIChsb2NhbENvbnRhaW5lci0+aGFzTm9uVmlzaWJsZU92ZXJmbG93KCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IFJlc3BlY3QgdGhlIHZhbHVlIG9mIGNvbnRleHQub3B0aW9ucy4KICAg
ICAgICAgU2V0Rm9yU2NvcGU8T3B0aW9uU2V0PFZpc2libGVSZWN0Q29udGV4dE9wdGlvbj4+IGNo
YW5nZShjb250ZXh0Lm9wdGlvbnMsIGNvbnRleHQub3B0aW9ucyB8IFZpc2libGVSZWN0Q29udGV4
dE9wdGlvbjo6QXBwbHlDb21wb3NpdGVkQ29udGFpbmVyU2Nyb2xscyk7CiAgICAgICAgIGJvb2wg
aXNFbXB0eSA9ICFkb3duY2FzdDxSZW5kZXJCb3g+KCpsb2NhbENvbnRhaW5lcikuYXBwbHlDYWNo
ZWRDbGlwQW5kU2Nyb2xsUG9zaXRpb24oYWRqdXN0ZWRSZWN0LCBjb250YWluZXIsIGNvbnRleHQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMTYxYzI2MmYw
NWUyNmU4OTgwOGY5MGQ5MGZmMjEwZDFmNjE5OTA2My4uNDNkNDdjNDY0Y2NmNzk1YTI5OTU1YzRk
MzI4YTIwODJmOGYxMTY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCkBAIC01NzMsNyArNTczLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVOb3JtYWxG
bG93T25seSgpIGNvbnN0CiAgICAgaWYgKGNhbkNyZWF0ZVN0YWNraW5nQ29udGV4dCgqdGhpcykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiByZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpCisgICAgcmV0dXJuIHJlbmRlcmVyKCkuaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkK
ICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc0NhbnZhcygpCiAgICAgICAgIHx8IHJlbmRlcmVyKCku
aXNWaWRlbygpCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNFbWJlZGRlZE9iamVjdCgpCkBAIC0x
MTIzLDcgKzExMjMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcAogICAgIGlmIChyZW5kZXJl
cigpLnN0eWxlKCkuaGFzVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpCiAgICAgICAgIGZs
YWdzLmFkZChIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKTsKIAotICAgIGlmIChy
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmIChyZW5kZXJlcigpLmhhc05vblZp
c2libGVPdmVyZmxvdygpKQogICAgICAgICBmbGFncy5hZGQoSGFzU2VlbkFuY2VzdG9yV2l0aE92
ZXJmbG93Q2xpcCk7CiAgICAgCiAgICAgYm9vbCBzaG91bGRDb21wdXRlUmVwYWludFJlY3RzID0g
KGZsYWdzLmNvbnRhaW5zKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IpIHx8IGZs
YWdzLmNvbnRhaW5zQWxsKHsgSXNPdmVyZmxvd1Njcm9sbCwgSGFzU2VlbkFuY2VzdG9yV2l0aE92
ZXJmbG93Q2xpcCB9KSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpOwpAQCAtMTMzMSw3ICsxMzMx
LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdPdmVyZmxvd0NsaXBMYXll
cihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWwKIHsKICAgICBjb25zdCBSZW5kZXJMYXllciog
bGF5ZXIgPSAoaW5jbHVkZVNlbGYgPT0gSW5jbHVkZVNlbGYpID8gdGhpcyA6IHBhcmVudCgpOwog
ICAgIHdoaWxlIChsYXllcikgewotICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaGFzT3Zl
cmZsb3dDbGlwKCkpCisgICAgICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS5oYXNOb25WaXNpYmxl
T3ZlcmZsb3coKSkKICAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4o
bGF5ZXIpOwogCiAgICAgICAgIGxheWVyID0gbGF5ZXItPnBhcmVudCgpOwpAQCAtMTYxNCw3ICsx
NjE0LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25TZXQ8
VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgICAgICAgICBzZXROZWVk
c1Bvc3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAoZmxhZ3MgJiYgcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAg
ICAgIGlmIChmbGFncyAmJiByZW5kZXJlcigpLmhhc05vblZpc2libGVPdmVyZmxvdygpKQogICAg
ICAgICAgICAgICAgIGZsYWdzLT5hZGQoQ29udGFpbmluZ0NsaXBwaW5nTGF5ZXJDaGFuZ2VkU2l6
ZSk7CiAKICAgICAgICAgICAgIHNldFNpemUobmV3U2l6ZSk7CkBAIC0xNjQ1LDcgKzE2NDUsNyBA
QCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVM
YXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVkUGFy
ZW50OwogICAgIGlmIChyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChwb3Np
dGlvbmVkUGFyZW50ID0gZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigpLnN0
eWxlKCkucG9zaXRpb24oKSkpKSB7CiAgICAgICAgIC8vIEZvciBwb3NpdGlvbmVkIGxheWVycywg
d2Ugc3VidHJhY3Qgb3V0IHRoZSBlbmNsb3NpbmcgcG9zaXRpb25lZCBsYXllcidzIHNjcm9sbCBv
ZmZzZXQuCi0gICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKSB7CisgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmhh
c05vblZpc2libGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogcG9zaXRpb25l
ZFBhcmVudFNjcm9sbGFibGVBcmVhID0gcG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsYWJsZUFyZWEo
KSkKICAgICAgICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVk
UGFyZW50U2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgICAgICB9CkBAIC0x
NjU4LDcgKzE2NTgsNyBAQCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9w
dGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgICAgICBBU1NFUlQo
cG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKICAgICAgICAgbV9i
b3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUoKTsKICAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKLSAg
ICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7Cisg
ICAgICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNOb25WaXNpYmxlT3ZlcmZsb3co
KSkgewogICAgICAgICAgICAgaWYgKGF1dG8qIHBhcmVudExheWVyU2Nyb2xsYWJsZUFyZWEgPSBw
YXJlbnRMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgICAgICAgICBsb2NhbFBvaW50
IC09IHRvTGF5b3V0U2l6ZShwYXJlbnRMYXllclNjcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlv
bigpKTsKICAgICAgICAgfQpAQCAtMjM3Myw3ICsyMzczLDcgQEAgc3RhdGljIGlubGluZSBib29s
IGZyYW1lRWxlbWVudEFuZFZpZXdQZXJtaXRTY3JvbGwoSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZy
YW1lRWwKIAogYm9vbCBSZW5kZXJMYXllcjo6YWxsb3dzQ3VycmVudFNjcm9sbCgpIGNvbnN0CiB7
Ci0gICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmICghcmVuZGVy
ZXIoKS5oYXNOb25WaXNpYmxlT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJl
c3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KQEAgLTI2MzYsOSAr
MjYzNiw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBv
c2l0aW9uSW5XaW5kb3cpCiBib29sIFJlbmRlckxheWVyOjpjYW5SZXNpemUoKSBjb25zdAogewog
ICAgIC8vIFdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgZm9yIDxpZnJhbWU+IGJlY2F1c2UgdGhleSBu
ZXZlciBoYXZlCi0gICAgLy8gaGFzT3ZlcmZsb3dDbGlwKCkuIEhvd2V2ZXIsIHRoZXkgZG8gImlt
cGxpY2l0bHkiIGNsaXAgdGhlaXIgY29udGVudHMsIHNvCisgICAgLy8gaGFzTm9uVmlzaWJsZU92
ZXJmbG93KCkuIEhvd2V2ZXIsIHRoZXkgZG8gImltcGxpY2l0bHkiIGNsaXAgdGhlaXIgY29udGVu
dHMsIHNvCiAgICAgLy8gd2Ugd2FudCB0byBhbGxvdyByZXNpemluZyB0aGVtIGFsc28uCi0gICAg
cmV0dXJuIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCkuaXNSZW5k
ZXJJRnJhbWUoKSkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9u
ZTsKKyAgICByZXR1cm4gKHJlbmRlcmVyKCkuaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkgfHwgcmVu
ZGVyZXIoKS5pc1JlbmRlcklGcmFtZSgpKSAmJiByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkg
IT0gUmVzaXplOjpOb25lOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZnNldCkKQEAgLTI4
ODYsNyArMjg4Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYKICAgICAgICAgICAgIGlmIChw
YWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Nj
cm9sbENvbnRlbnQpICYmIGxheWVyLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVy
ZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLmhhc0Jv
cmRlclJhZGl1cygpICYmIGFuY2VzdG9yTGF5ZXJJc0luQ29udGFpbmluZ0Jsb2NrQ2hhaW4oKmxh
eWVyKSkgeworICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLmhhc05vblZpc2libGVP
dmVyZmxvdygpICYmIGxheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCkg
JiYgYW5jZXN0b3JMYXllcklzSW5Db250YWluaW5nQmxvY2tDaGFpbigqbGF5ZXIpKSB7CiAgICAg
ICAgICAgICAgICAgTGF5b3V0UmVjdCBhZGp1c3RlZENsaXBSZWN0ID0gTGF5b3V0UmVjdCh0b0xh
eW91dFBvaW50KGxheWVyLT5vZmZzZXRGcm9tQW5jZXN0b3IocGFpbnRpbmdJbmZvLnJvb3RMYXll
ciwgQWRqdXN0Rm9yQ29sdW1ucykpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgICAgICAgICBh
ZGp1c3RlZENsaXBSZWN0Lm1vdmUocGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KTsKICAgICAg
ICAgICAgICAgICBGbG9hdFJvdW5kZWRSZWN0IHJvdW5kZWRSZWN0ID0gbGF5ZXItPnJlbmRlcmVy
KCkuc3R5bGUoKS5nZXRSb3VuZGVkSW5uZXJCb3JkZXJGb3IoYWRqdXN0ZWRDbGlwUmVjdCkucGl4
ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWludGluZyhkZXZpY2VTY2FsZUZhY3Rvcik7CkBAIC0z
MDg1LDcgKzMwODUsNyBAQCBib29sIFJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1YW50
aXphdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wmCiAKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IGhhdmUgdG8gZGlzYWJsZSBzdWJwaXhlbCBxdWFudGl6YXRpb24gZm9yIG92
ZXJmbG93IGNsaXBzIG9yIHN1YmZyYW1lcyBvbmNlIHdlIHNjcm9sbCB0aG9zZQogICAgIC8vIHRo
aW5ncyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KLSAgICBib29sIGNvbnRlbnRzU2Nyb2xsQnlQ
YWludGluZyA9IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpKSB8fCAocmVuZGVyZXIoKS5mcmFtZSgpLm93bmVyRWxlbWVudCgpKTsKKyAg
ICBib29sIGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyA9IChyZW5kZXJlcigpLmhhc05vblZpc2li
bGVPdmVyZmxvdygpICYmICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB8fCAocmVuZGVyZXIo
KS5mcmFtZSgpLm93bmVyRWxlbWVudCgpKTsKICAgICBib29sIGlzWm9vbWluZyA9ICFwYWdlKCku
Y2hyb21lKCkuY2xpZW50KCkuaGFzU3RhYmxlUGFnZVNjYWxlRmFjdG9yKCk7CiAgICAgaWYgKHNj
cm9sbGluZ09uTWFpblRocmVhZCB8fCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgfHwgaXNab29t
aW5nKSB7CiAgICAgICAgIGRpZFF1YW50aXplRm9udHMgPSBjb250ZXh0LnNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cygpOwpAQCAtMzM0Miw3ICszMzQyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQ
YWludGkKICAgICAgICAgICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhpcyB3aWxsIGNv
bXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBhbmQgcGFpbnQgb2Zmc2V0cyBmb3IgZWFjaCBsYXll
ciBmcmFnbWVudCwgYXMgd2VsbCBhcyB3aGV0aGVyIG9yIG5vdCB0aGUgY29udGVudCBvZiBlYWNo
CiAgICAgICAgICAgICAvLyBmcmFnbWVudCBzaG91bGQgcGFpbnQuIElmIHRoZSBwYXJlbnQncyBm
aWx0ZXIgZGljdGF0ZXMgZnVsbCByZXBhaW50IHRvIGVuc3VyZSBwcm9wZXIgZmlsdGVyIGVmZmVj
dCwKICAgICAgICAgICAgIC8vIHVzZSB0aGUgb3ZlcmZsb3cgY2xpcCBhcyBkaXJ0eSByZWN0LCBp
bnN0ZWFkIG9mIG5vIGNsaXBwaW5nLiBJdCBtYWludGFpbnMgcHJvcGVyIGNsaXBwaW5nIGZvciBv
dmVyZmxvdzo6c2Nyb2xsLgotICAgICAgICAgICAgaWYgKCFsb2NhbFBhaW50aW5nSW5mby5jbGlw
VG9EaXJ0eVJlY3QgJiYgcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICAg
ICAgaWYgKCFsb2NhbFBhaW50aW5nSW5mby5jbGlwVG9EaXJ0eVJlY3QgJiYgcmVuZGVyZXIoKS5o
YXNOb25WaXNpYmxlT3ZlcmZsb3coKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB0dXJu
IGNsaXBwaW5nIGJhY2sgYnkgcmVxdWVzdGluZyBmdWxsIHJlcGFpbnQgZm9yIHRoZSBvdmVyZmxv
dyBhcmVhLgogICAgICAgICAgICAgICAgIGxvY2FsUGFpbnRpbmdJbmZvLmNsaXBUb0RpcnR5UmVj
dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcGFpbnREaXJ0eVJlY3QgPSBjbGlwUmVjdFJlbGF0
aXZlVG9BbmNlc3Rvcihsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9mZnNldEZyb21Sb290
LCBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKSk7CkBAIC00NDUyLDkgKzQ0NTIsOSBAQCB2b2lk
IFJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYg
Y2xpcFJlY3RzQ29udGV4dCwgQwogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgY2xpcCByZWN0cyB0
aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGNoaWxkIGxheWVycy4KICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXBPck92ZXJmbG93Q2xpcCgpICYmIChjbGlw
UmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCB8
fCB0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyKSkgeworICAgIGlmIChyZW5kZXJl
cigpLmhhc0NsaXBPck5vblZpc2libGVPdmVyZmxvdygpICYmIChjbGlwUmVjdHNDb250ZXh0LnJl
c3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCB8fCB0aGlzICE9IGNsaXBS
ZWN0c0NvbnRleHQucm9vdExheWVyKSkgewogI2Vsc2UKLSAgICBpZiAoKHJlbmRlcmVyKCkuaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgKGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9
PSBSZXNwZWN0T3ZlcmZsb3dDbGlwIHx8IHRoaXMgIT0gY2xpcFJlY3RzQ29udGV4dC5yb290TGF5
ZXIpKSB8fCByZW5kZXJlcigpLmhhc0NsaXAoKSkgeworICAgIGlmICgocmVuZGVyZXIoKS5oYXNO
b25WaXNpYmxlT3ZlcmZsb3coKSAmJiAoY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dD
bGlwID09IFJlc3BlY3RPdmVyZmxvd0NsaXAgfHwgdGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJv
b3RMYXllcikpIHx8IHJlbmRlcmVyKCkuaGFzQ2xpcCgpKSB7CiAjZW5kaWYKICAgICAgICAgLy8g
VGhpcyBsYXllciBlc3RhYmxpc2hlcyBhIGNsaXAgb2Ygc29tZSBraW5kLgogICAgICAgICBMYXlv
dXRQb2ludCBvZmZzZXQ7CkBAIC00NDY2LDcgKzQ0NjYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpj
YWxjdWxhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4
dCwgQwogICAgICAgICBpZiAoY2xpcFJlY3RzLmZpeGVkKCkgJiYgJmNsaXBSZWN0c0NvbnRleHQu
cm9vdExheWVyLT5yZW5kZXJlcigpID09ICZyZW5kZXJlcigpLnZpZXcoKSkKICAgICAgICAgICAg
IG9mZnNldCAtPSB0b0xheW91dFNpemUocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Ny
b2xsUG9zaXRpb25Gb3JGaXhlZFBvc2l0aW9uKCkpOwogCi0gICAgICAgIGlmIChyZW5kZXJlcigp
Lmhhc092ZXJmbG93Q2xpcCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc05vblZpc2li
bGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBDbGlwUmVjdCBuZXdPdmVyZmxvd0NsaXAgPSBk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExh
eWVycyhvZmZzZXQsIG51bGxwdHIsIGNsaXBSZWN0c0NvbnRleHQub3ZlcmxheVNjcm9sbGJhclNp
emVSZWxldmFuY3kpOwogICAgICAgICAgICAgbmV3T3ZlcmZsb3dDbGlwLnNldEFmZmVjdGVkQnlS
YWRpdXMocmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpKTsKICAgICAgICAgICAg
IGNsaXBSZWN0cy5zZXRPdmVyZmxvd0NsaXBSZWN0KGludGVyc2VjdGlvbihuZXdPdmVyZmxvd0Ns
aXAsIGNsaXBSZWN0cy5vdmVyZmxvd0NsaXBSZWN0KCkpKTsKQEAgLTQ0NzksNyArNDQ3OSw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250
ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBDCiAgICAgICAgICAgICBjbGlwUmVjdHMuc2V0T3ZlcmZs
b3dDbGlwUmVjdChpbnRlcnNlY3Rpb24obmV3UG9zQ2xpcCwgY2xpcFJlY3RzLm92ZXJmbG93Q2xp
cFJlY3QoKSkpOwogICAgICAgICAgICAgY2xpcFJlY3RzLnNldEZpeGVkQ2xpcFJlY3QoaW50ZXJz
ZWN0aW9uKG5ld1Bvc0NsaXAsIGNsaXBSZWN0cy5maXhlZENsaXBSZWN0KCkpKTsKICAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiB0cmFuc2Zv
cm0oKSAmJiByZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCkpCisgICAgfSBlbHNl
IGlmIChyZW5kZXJlcigpLmhhc05vblZpc2libGVPdmVyZmxvdygpICYmIHRyYW5zZm9ybSgpICYm
IHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSkKICAgICAgICAgY2xpcFJlY3Rz
LnNldE92ZXJmbG93Q2xpcFJlY3RBZmZlY3RlZEJ5UmFkaXVzKCk7CiAKICAgICBMT0dfV0lUSF9T
VFJFQU0oQ2xpcFJlY3RzLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyICIgPDwgdGhpcyA8PCAiIGNh
bGN1bGF0ZUNsaXBSZWN0cyAiIDw8IGNsaXBSZWN0c0NvbnRleHQgPDwgIiBjb21wdXRlZCAiIDw8
IGNsaXBSZWN0cyk7CkBAIC00NTQ4LDkgKzQ1NDgsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxj
dWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25z
dAogICAgIGZvcmVncm91bmRSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CiAKICAgICAvLyBVcGRhdGUg
dGhlIGNsaXAgcmVjdHMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBjaGlsZCBsYXllcnMuCi0gICAg
aWYgKHJlbmRlcmVyKCkuaGFzQ2xpcE9yT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICBpZiAocmVuZGVy
ZXIoKS5oYXNDbGlwT3JOb25WaXNpYmxlT3ZlcmZsb3coKSkgewogICAgICAgICAvLyBUaGlzIGxh
eWVyIGVzdGFibGlzaGVzIGEgY2xpcCBvZiBzb21lIGtpbmQuCi0gICAgICAgIGlmIChyZW5kZXJl
cigpLmhhc092ZXJmbG93Q2xpcCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc05vblZp
c2libGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBpZiAodGhpcyAhPSBjbGlwUmVjdHNDb250
ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0g
UmVzcGVjdE92ZXJmbG93Q2xpcCkgewogICAgICAgICAgICAgICAgIGZvcmVncm91bmRSZWN0Lmlu
dGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3Qo
dG9MYXlvdXRQb2ludChvZmZzZXRGcm9tUm9vdExvY2FsKSwgbnVsbHB0ciwgY2xpcFJlY3RzQ29u
dGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSkpOwogICAgICAgICAgICAgICAgIGZv
cmVncm91bmRSZWN0LnNldEFmZmVjdGVkQnlSYWRpdXModHJ1ZSk7CkBAIC00NjY4LDcgKzQ2Njgs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKICAgICBM
YXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKICAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYSkKICAgICAgICAgcmVjdC5tb3ZlQnkoLW1fc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbFBvc2l0aW9uKCkpOwotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYm
ICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgIGlmIChyZW5kZXJlcigpLmhhc05vblZp
c2libGVPdmVyZmxvdygpICYmICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAgICBy
ZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xp
cFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNj
b3VudGVkIGZvci4KICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpCiAgICAgICAgIHJlY3Qu
aW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QoTGF5b3V0
UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4K
QEAgLTUwNDIsNyArNTA0Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmJhY2tncm91bmRJc0tub3du
VG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJlY3QpCiAgICAgCiAgICAg
Ly8gV2UgY2FuJ3QgY29uc3VsdCBjaGlsZCBsYXllcnMgaWYgd2UgY2xpcCwgc2luY2UgdGhleSBt
aWdodCBjb3ZlcgogICAgIC8vIHBhcnRzIG9mIHRoZSByZWN0IHRoYXQgYXJlIGNsaXBwZWQgb3V0
LgotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmIChyZW5kZXJl
cigpLmhhc05vblZpc2libGVPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgcmV0dXJuIGxpc3RCYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QocG9zaXRp
dmVaT3JkZXJMYXllcnMoKSwgbG9jYWxSZWN0KQpAQCAtNTcyNyw3ICs1NzI3LDcgQEAgc3RhdGlj
IHZvaWQgb3V0cHV0UGFpbnRPcmRlclRyZWVSZWN1cnNpdmUoVGV4dFN0cmVhbSYgc3RyZWFtLCBj
b25zdCBXZWJDb3JlOjpSZW4KIHsKICAgICBzdHJlYW0gPDwgKGxheWVyLmlzQ1NTU3RhY2tpbmdD
b250ZXh0KCkgPyAiUyIgOiAobGF5ZXIuaXNGb3JjZWRTdGFja2luZ0NvbnRleHQoKSA/ICJGIiA6
IChsYXllci5pc09wcG9ydHVuaXN0aWNTdGFja2luZ0NvbnRleHQoKSA/ICJQIiA6ICItIikpKTsK
ICAgICBzdHJlYW0gPDwgKGxheWVyLmlzTm9ybWFsRmxvd09ubHkoKSA/ICJOIiA6ICItIik7Ci0g
ICAgc3RyZWFtIDw8IChsYXllci5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gIk8iIDog
Ii0iKTsKKyAgICBzdHJlYW0gPDwgKGxheWVyLnJlbmRlcmVyKCkuaGFzTm9uVmlzaWJsZU92ZXJm
bG93KCkgPyAiTyIgOiAiLSIpOwogICAgIHN0cmVhbSA8PCAobGF5ZXIuaXNUcmFuc3BhcmVudCgp
ID8gIkEiIDogIi0iKTsKICAgICBzdHJlYW0gPDwgKGxheWVyLmhhc0JsZW5kTW9kZSgpID8gIkIi
IDogIi0iKTsKICAgICBzdHJlYW0gPDwgKGxheWVyLmlzb2xhdGVzQmxlbmRpbmcoKSA/ICJJIiA6
ICItIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCmluZGV4IGI5ZWY5MTg2N2RjZmYyZGY2ZjBlZjZlNzA1ZjkwM2E4MjBiZGQ4MDYuLjZkMWJl
NjEzYTEyOTRiNWFmMjkxOGQ2MTY5MGZjYzdmZTIxZGI0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC02MTAsNyArNjEwLDcgQEAg
c3RhdGljIExheW91dFJlY3Qgc2Nyb2xsQ29udGFpbmVyTGF5ZXJCb3goY29uc3QgUmVuZGVyQm94
JiByZW5kZXJCb3gpCiBzdGF0aWMgTGF5b3V0UmVjdCBjbGlwcGluZ0xheWVyQm94KGNvbnN0IFJl
bmRlckJveCYgcmVuZGVyQm94KQogewogICAgIExheW91dFJlY3QgcmVzdWx0ID0gTGF5b3V0UmVj
dDo6aW5maW5pdGVSZWN0KCk7Ci0gICAgaWYgKHJlbmRlckJveC5oYXNPdmVyZmxvd0NsaXAoKSkK
KyAgICBpZiAocmVuZGVyQm94Lmhhc05vblZpc2libGVPdmVyZmxvdygpKQogICAgICAgICByZXN1
bHQgPSByZW5kZXJCb3gub3ZlcmZsb3dDbGlwUmVjdCh7IH0sIDApOyAvLyBGSVhNRTogSW5jb3Jy
ZWN0IGZvciBDU1MgcmVnaW9ucy4KIAogICAgIGlmIChyZW5kZXJCb3guaGFzQ2xpcCgpKQpAQCAt
ODQ0LDcgKzg0NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVk
Qm91bmRzKCkKICAgICB9CiAKICAgICAvLyBJZiB0aGUgYmFja2luZyBwcm92aWRlciBoYXMgb3Zl
cmZsb3c6Y2xpcCwgd2Uga25vdyBhbGwgc2hhcmluZyBsYXllcnMgYXJlIGFmZmVjdGVkIGJ5IHRo
ZSBjbGlwIGJlY2F1c2UgdGhleSBhcmUgY29udGFpbmluZy1ibG9jayBkZXNjZW5kYW50cy4KLSAg
ICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICBpZiAoIXJlbmRlcmVy
KCkuaGFzTm9uVmlzaWJsZU92ZXJmbG93KCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBsYXllcldl
YWtQdHIgOiBtX2JhY2tpbmdTaGFyaW5nTGF5ZXJzKSB7CiAgICAgICAgICAgICBhdXRvKiBib3Vu
ZHNSb290TGF5ZXIgPSAmbV9vd25pbmdMYXllcjsKICAgICAgICAgICAgIEFTU0VSVChsYXllcldl
YWtQdHItPmlzRGVzY2VuZGFudE9mKG1fb3duaW5nTGF5ZXIpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggMTk3NGU5YmE4
MTA5MTgwNzBmNTQ3ZGZkZTFiY2FiMDEyN2NkYzc1Mi4uNTk3MTljYWI3MjY1Njc5ZTQ5ZThiMThh
ZmExZjI1MjcyNWNkMDM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTE5ODAsNyArMTk4MCw3IEBAIFJlbmRlckxheWVy
KiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuY2xvc2luZ05vblN0YWNraW5nQ2xpcHBpbmdMYXll
cihjb25zdCBSZW5kCiAgICAgZm9yIChhdXRvKiBwYXJlbnQgPSBsYXllci5wYXJlbnQoKTsgcGFy
ZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudCgpKSB7CiAgICAgICAgIGlmIChwYXJlbnQtPmlz
U3RhY2tpbmdDb250ZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
aWYgKHBhcmVudC0+cmVuZGVyZXIoKS5oYXNDbGlwT3JPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAg
aWYgKHBhcmVudC0+cmVuZGVyZXIoKS5oYXNDbGlwT3JOb25WaXNpYmxlT3ZlcmZsb3coKSkKICAg
ICAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwpAQCAt
MjkzMCw3ICsyOTMwLDcgQEAgVmVjdG9yPENvbXBvc2l0ZWRDbGlwRGF0YT4gUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpjb21wdXRlQW5jZXN0b3JDbGlwcGluZ1N0YWNrKGMKICAgICAgICAgICAgIHJl
dHVybiBBbmNlc3RvclRyYXZlcnNhbDo6U3RvcDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChp
c0NvbnRhaW5pbmdCbG9ja0NoYWluICYmIGFuY2VzdG9yTGF5ZXIucmVuZGVyZXIoKS5oYXNDbGlw
T3JPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICBpZiAoaXNDb250YWluaW5nQmxvY2tDaGFpbiAm
JiBhbmNlc3RvckxheWVyLnJlbmRlcmVyKCkuaGFzQ2xpcE9yTm9uVmlzaWJsZU92ZXJmbG93KCkp
IHsKICAgICAgICAgICAgIGlmIChhbmNlc3RvckxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coKSkgewogICAgICAgICAgICAgICAgIGlmIChoYXZlTm9uU2Nyb2xsYWJsZUNsaXBw
aW5nSW50ZXJtZWRpYXRlTGF5ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaE5vblNjcm9s
bGFibGVDbGlwKCpjdXJyZW50Q2xpcHBlZExheWVyLCBhbmNlc3RvckxheWVyKTsKQEAgLTI5OTgs
NyArMjk5OCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjppc0NvbXBvc2l0ZWRTdWJm
cmFtZVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuCiAvLyBpbnRvIHRoZSBoaWVyYXJj
aHkgYmV0d2VlbiB0aGlzIGxheWVyIGFuZCBpdHMgY2hpbGRyZW4gaW4gdGhlIHotb3JkZXIgaGll
cmFyY2h5LgogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsaXBzQ29tcG9zaXRpbmdEZXNj
ZW5kYW50cyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCiB7Ci0gICAgcmV0dXJuIGxheWVyLmhh
c0NvbXBvc2l0aW5nRGVzY2VuZGFudCgpICYmIGxheWVyLnJlbmRlcmVyKCkuaGFzQ2xpcE9yT3Zl
cmZsb3dDbGlwKCkgJiYgIWxheWVyLmlzb2xhdGVzQ29tcG9zaXRlZEJsZW5kaW5nKCkgJiYgIWxh
eWVyLmhhc0NvbXBvc2l0ZWROb25Db250YWluZWREZXNjZW5kYW50cygpOworICAgIHJldHVybiBs
YXllci5oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoKSAmJiBsYXllci5yZW5kZXJlcigpLmhhc0Ns
aXBPck5vblZpc2libGVPdmVyZmxvdygpICYmICFsYXllci5pc29sYXRlc0NvbXBvc2l0ZWRCbGVu
ZGluZygpICYmICFsYXllci5oYXNDb21wb3NpdGVkTm9uQ29udGFpbmVkRGVzY2VuZGFudHMoKTsK
IH0KIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JB
bmltYXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5j
cHAKaW5kZXggYzI4MGQwOWJhMWU2NmJmNDZiMjE1NDcyMDlmZjI3ZjdlNjMxNDE2NS4uN2IwYzll
Yjc3M2I1NTMyYjI1ZmQ4MGI5ZjNjY2YyMjg3YTRkZTA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcApAQCAtMTI5
Myw3ICsxMjkzLDcgQEAgdm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJm
bG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAogewogICAgIC8vIERvbid0IGRv
IGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCiAgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSkK
KyAgICBpZiAoIXJlbmRlcmVyLmhhc05vblZpc2libGVPdmVyZmxvdygpKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQpAQCAtMTYzNiw3ICsxNjM2
LDcgQEAgdm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJT
dHlsZSgpCiB7CiAgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CiAgICAg
UmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5k
ZXJlcik7Ci0gICAgYXV0byBjb3JuZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSA/IGFj
dHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlNjcm9sbGJh
ckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKyAgICBhdXRv
IGNvcm5lciA9IHJlbmRlcmVyLmhhc05vblZpc2libGVPdmVyZmxvdygpID8gYWN0dWFsUmVuZGVy
ZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0s
ICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwogCiAgICAgaWYgKCFjb3JuZXIp
IHsKICAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKQEAgLTE2NjQsNyArMTY2NCw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlUmVzaXplclN0eWxlKCkKIHsKICAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKICAgICBSZW5kZXJFbGVtZW50
KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsKLSAgICBh
dXRvIHJlc2l6ZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVy
LT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJl
bmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisgICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIu
aGFzTm9uVmlzaWJsZU92ZXJmbG93KCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1
ZG9TdHlsZSh7IFBzZXVkb0lkOjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkg
OiBudWxscHRyOwogCiAgICAgaWYgKCFyZXNpemVyKSB7CiAgICAgICAgIGNsZWFyUmVzaXplcigp
OwpAQCAtMTc3Niw3ICsxNzc2LDcgQEAgdm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGwKICAgICBpZiAo
cmVuZGVyZXIucGFyZW50KCkpCiAgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5k
ZXJlci5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKIAotICAgIGlmIChy
ZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7Cisg
ICAgaWYgKHJlbmRlcmVyLmhhc05vblZpc2libGVPdmVyZmxvdygpICYmICFyZXN0cmljdGVkQnlM
aW5lQ2xhbXApIHsKICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9s
bE9mZnNldCgpICsgZGVsdGE7CiAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNl
dCk7CiAgICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5b3V0U3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheW91dFN0YXRlLmNwcAppbmRleCBlZGVlMWI2YWU5OTI3MDk3ZTM2OWU1MWQ5
N2I1YzAxY2JiODcyMDM4Li5hMTQwZWY2ZjUyZWZmYzczNWI1M2MyYzQzYWY0Yjk1MmM4MWZlYTIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5b3V0U3RhdGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXlvdXRTdGF0ZS5jcHAK
QEAgLTQ5LDcgKzQ5LDcgQEAgUmVuZGVyTGF5b3V0U3RhdGU6OlJlbmRlckxheW91dFN0YXRlKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBJc1BhZ2luYXRlZCBpc1BhZ2kKICAgICAgICAgRmxvYXRQ
b2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBv
aW50KCksIFVzZVRyYW5zZm9ybXMpOwogICAgICAgICBtX3BhaW50T2Zmc2V0ID0gTGF5b3V0U2l6
ZShhYnNDb250ZW50UG9pbnQueCgpLCBhYnNDb250ZW50UG9pbnQueSgpKTsKIAotICAgICAgICBp
ZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICBpZiAoY29udGFpbmVy
LT5oYXNOb25WaXNpYmxlT3ZlcmZsb3coKSkgewogICAgICAgICAgICAgbV9jbGlwcGVkID0gdHJ1
ZTsKICAgICAgICAgICAgIGF1dG8mIGNvbnRhaW5lckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
KmNvbnRhaW5lcik7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gTGF5b3V0UmVjdCh0b0xheW91
dFBvaW50KG1fcGFpbnRPZmZzZXQpLCBjb250YWluZXJCb3guY2FjaGVkU2l6ZUZvck92ZXJmbG93
Q2xpcCgpKTsKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIFJlbmRlckxheW91dFN0YXRlOjpjb21w
dXRlT2Zmc2V0cyhjb25zdCBSZW5kZXJMYXlvdXRTdGF0ZSYgYW5jZXN0b3IsIFJlbmRlcgogICAg
IGlmIChyZW5kZXJlci5pc0luRmxvd1Bvc2l0aW9uZWQoKSAmJiByZW5kZXJlci5oYXNMYXllcigp
KQogICAgICAgICBtX3BhaW50T2Zmc2V0ICs9IHJlbmRlcmVyLmxheWVyKCktPm9mZnNldEZvcklu
Rmxvd1Bvc2l0aW9uKCk7CiAKLSAgICBpZiAocmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkpCisg
ICAgaWYgKHJlbmRlcmVyLmhhc05vblZpc2libGVPdmVyZmxvdygpKQogICAgICAgICBtX3BhaW50
T2Zmc2V0IC09IHRvTGF5b3V0U2l6ZShyZW5kZXJlci5zY3JvbGxQb3NpdGlvbigpKTsKIAogICAg
IG1fbGF5b3V0RGVsdGEgPSBhbmNlc3Rvci5sYXlvdXREZWx0YSgpOwpAQCAtMTE2LDcgKzExNiw3
IEBAIHZvaWQgUmVuZGVyTGF5b3V0U3RhdGU6OmNvbXB1dGVDbGlwUmVjdChjb25zdCBSZW5kZXJM
YXlvdXRTdGF0ZSYgYW5jZXN0b3IsIFJlbmRlCiAgICAgbV9jbGlwcGVkID0gIXJlbmRlcmVyLmlz
Rml4ZWRQb3NpdGlvbmVkKCkgJiYgYW5jZXN0b3IuaXNDbGlwcGVkKCk7CiAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgbV9jbGlwUmVjdCA9IGFuY2VzdG9yLmNsaXBSZWN0KCk7Ci0gICAgaWYg
KCFyZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICBpZiAoIXJlbmRlcmVyLmhhc05vblZp
c2libGVPdmVyZmxvdygpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHBhaW50T2Zmc2V0
Rm9yQ2xpcFJlY3QgPSB0b0xheW91dFBvaW50KG1fcGFpbnRPZmZzZXQgKyB0b0xheW91dFNpemUo
cmVuZGVyZXIuc2Nyb2xsUG9zaXRpb24oKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0SXRlbS5jcHAKaW5kZXggZDk5Y2QxNjI4NzY4MjRlYjY1NTdmYmZiNzUwMjgwZWQw
YjRiZjJjYy4uN2FhZWZjMGJiOTMyM2ExZTc3MTdjZGIzMTA4YjJmYTQ2ZWQ0ZTcwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCkBAIC0yNzAsNyArMjcw
LDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMo
KQogCiB2b2lkIFJlbmRlckxpc3RJdGVtOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIGlmICghbG9naWNhbEhlaWdodCgp
ICYmIGhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmICghbG9naWNhbEhlaWdodCgpICYmIGhhc05v
blZpc2libGVPdmVyZmxvdygpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJCbG9ja0Zs
b3c6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCmluZGV4IGFmMWQ5NDJiMWRhMzQ2ZDQxMGVlZjA3
NzNkZDkxMDIzMDBlODg4MDAuLjk3MWM3ZTI3MDk5M2NhMWVjY2E1Mjk0NDBkNzdjY2RmMTQ2YmQ2
NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAK
QEAgLTE3NDUsNyArMTc0NSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6YWRkT3ZlcmZsb3dG
cm9tTGlzdE1hcmtlcigpCiAgICAgICAgIGJvb2wgcHJvcGFnYXRlTGF5b3V0T3ZlcmZsb3cgPSB0
cnVlOwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBtYXJrZXJBbmNlc3RvciA9IHBhcmVudEJv
eCgqbWFya2VyQW5jZXN0b3IpOwotICAgICAgICAgICAgaWYgKG1hcmtlckFuY2VzdG9yLT5oYXNP
dmVyZmxvd0NsaXAoKSkKKyAgICAgICAgICAgIGlmIChtYXJrZXJBbmNlc3Rvci0+aGFzTm9uVmlz
aWJsZU92ZXJmbG93KCkpCiAgICAgICAgICAgICAgICAgcHJvcGFnYXRlVmlzdWFsT3ZlcmZsb3cg
PSBmYWxzZTsKICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4oKm1hcmtlckFuY2VzdG9y
KSkgewogICAgICAgICAgICAgICAgIGlmIChwcm9wYWdhdGVWaXN1YWxPdmVyZmxvdykKQEAgLTE3
NTMsNyArMTc1Myw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6YWRkT3ZlcmZsb3dGcm9tTGlz
dE1hcmtlcigpCiAgICAgICAgICAgICAgICAgaWYgKHByb3BhZ2F0ZUxheW91dE92ZXJmbG93KQog
ICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKm1hcmtlckFuY2VzdG9y
KS5hZGRMYXlvdXRPdmVyZmxvdyhtYXJrZXJSZWN0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChtYXJrZXJBbmNlc3Rvci0+aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgICAgICBp
ZiAobWFya2VyQW5jZXN0b3ItPmhhc05vblZpc2libGVPdmVyZmxvdygpKQogICAgICAgICAgICAg
ICAgIHByb3BhZ2F0ZUxheW91dE92ZXJmbG93ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAobWFy
a2VyQW5jZXN0b3ItPmhhc1NlbGZQYWludGluZ0xheWVyKCkpCiAgICAgICAgICAgICAgICAgcHJv
cGFnYXRlVmlzdWFsT3ZlcmZsb3cgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCmluZGV4IGZmY2JhMDRhYTM0NWM0ODRhOTlk
ODNjNjZiYjRiZjRiZTBhMGRmNDAuLjJlOTQyZmFhNTBhNDg4MTgyZTFjODEzYmFmNGNmZDkzOGYx
Nzk0ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtblNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uU2V0LmNwcApAQCAtODg1LDcgKzg4NSw3IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6
OmFkZE92ZXJmbG93RnJvbUNoaWxkcmVuKCkKICAgICAKICAgICBMYXlvdXRSZWN0IGxhc3RSZWN0
ID0gY29sdW1uUmVjdEF0KGNvbENvdW50IC0gMSk7CiAgICAgYWRkTGF5b3V0T3ZlcmZsb3cobGFz
dFJlY3QpOwotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgaWYgKCFoYXNOb25WaXNp
YmxlT3ZlcmZsb3coKSkKICAgICAgICAgYWRkVmlzdWFsT3ZlcmZsb3cobGFzdFJlY3QpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDBkY2ZiY2Y2
MDFkMzc4ZTI4NmM4MTgyYzRmZGM4NmEwMmRhMzk5MDAuLjk1MGFhYzRkYjYxYzk3MmMzMTk5NTdi
Njc0OWY2NzRmZjFhZmU4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCkBAIC00ODAsNyArNDgwLDcgQEAgUmVuZGVyQm94KiBSZW5kZXJPYmplY3Q6OmVuY2xv
c2luZ1Njcm9sbGFibGVDb250YWluZXJGb3JTbmFwcGluZygpIGNvbnN0CiAgICAgICAgIC8vIHdh
bnQgdG8gcmV0dXJuIHRoaXMgYXMgb3VyIGNvbnRhaW5lci4gSW5zdGVhZCB3ZSBzaG91bGQgdXNl
IHRoZSByb290IGVsZW1lbnQuCiAgICAgICAgIGlmIChjYW5kaWRhdGUtPmlzUmVuZGVyVmlldygp
KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUtPmhhc092ZXJmbG93
Q2xpcCgpKQorICAgICAgICBpZiAoY2FuZGlkYXRlLT5oYXNOb25WaXNpYmxlT3ZlcmZsb3coKSkK
ICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KGNhbmRpZGF0ZSk7CiAgICAg
fQogCkBAIC01MDgsNyArNTA4LDcgQEAgc3RhdGljIGlubGluZSBib29sIG9iamVjdElzUmVsYXlv
dXRCb3VuZGFyeShjb25zdCBSZW5kZXJFbGVtZW50KiBvYmplY3QpCiAgICAgaWYgKG9iamVjdC0+
aXNTVkdSb290KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFvYmplY3QtPmhh
c092ZXJmbG93Q2xpcCgpKQorICAgIGlmICghb2JqZWN0LT5oYXNOb25WaXNpYmxlT3ZlcmZsb3co
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG9iamVjdC0+c3R5bGUoKS53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgfHwgb2JqZWN0LT5zdHlsZSgpLmhlaWdodCgpLmlzSW50
cmluc2ljT3JBdXRvKCkgfHwgb2JqZWN0LT5zdHlsZSgpLmhlaWdodCgpLmlzUGVyY2VudE9yQ2Fs
Y3VsYXRlZCgpKQpAQCAtMTAwNCw3ICsxMDA0LDcgQEAgc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0
PiBSZW5kZXJPYmplY3Q6OmNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IExheW8K
ICAgICAgICAgcmV0dXJuIHJlY3Q7CiAKICAgICBMYXlvdXRSZWN0IGFkanVzdGVkUmVjdCA9IHJl
Y3Q7Ci0gICAgaWYgKHBhcmVudC0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICBpZiAocGFyZW50
LT5oYXNOb25WaXNpYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBib29sIGlzRW1wdHkgPSAhZG93
bmNhc3Q8UmVuZGVyQm94PigqcGFyZW50KS5hcHBseUNhY2hlZENsaXBBbmRTY3JvbGxQb3NpdGlv
bihhZGp1c3RlZFJlY3QsIGNvbnRhaW5lciwgY29udGV4dCk7CiAgICAgICAgIGlmIChpc0VtcHR5
KSB7CiAgICAgICAgICAgICBpZiAoY29udGV4dC5vcHRpb25zLmNvbnRhaW5zKFZpc2libGVSZWN0
Q29udGV4dE9wdGlvbjo6VXNlRWRnZUluY2x1c2l2ZUludGVyc2VjdGlvbikpCkBAIC0xMTI1LDcg
KzExMjUsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2JqZWN0KFRleHRTdHJl
YW0mIHN0cmVhbSwgYm9vbCBtYXJrLCBpbnQgZGVwdGgpCiAgICAgZWxzZQogICAgICAgICBzdHJl
YW0gPDwgIi0iOwogCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmIChoYXNOb25W
aXNpYmxlT3ZlcmZsb3coKSkKICAgICAgICAgc3RyZWFtIDw8ICJPIjsKICAgICBlbHNlCiAgICAg
ICAgIHN0cmVhbSA8PCAiLSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
aW5kZXggZjIwZjc1OTVkNWUwNGM1YjMyNWQ0N2E4ZGUwNTZjYzlmMTg0M2MwNy4uYTc5NTkwZmZh
YzA4ZTJiNWMwODI5NWRlMWFlN2UyNjk4NDdkYjkyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaApAQCAtNDM1LDcgKzQzNSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNTZWxlY3Rpb25Cb3JkZXIoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzT3ZlcmZsb3dDbGlwKCkg
Y29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuaGFzT3ZlcmZsb3dDbGlwKCk7IH0KKyAgICBib29s
IGhhc05vblZpc2libGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmhhc05v
blZpc2libGVPdmVyZmxvdygpOyB9CiAKICAgICBib29sIGhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9w
ZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9w
ZXJ0eSgpOyB9IC8vIFRyYW5zZm9ybSwgcGVyc3BlY3RpdmUgb3IgdHJhbnNmb3JtLXN0eWxlOiBw
cmVzZXJ2ZS0zZC4KICAgICBib29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIGhhc1Ry
YW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpICYmIChzdHlsZSgpLmhhc1RyYW5zZm9ybSgpIHx8IHN0
eWxlKCkudHJhbnNsYXRlKCkgfHwgc3R5bGUoKS5zY2FsZSgpIHx8IHN0eWxlKCkucm90YXRlKCkp
OyB9CkBAIC00OTMsNyArNDkzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNSZW5kZXJWaWV3
KCkgeyBBU1NFUlQoaXNCb3goKSk7IG1fYml0ZmllbGRzLnNldElzVGV4dE9yUmVuZGVyVmlldyh0
cnVlKTsgfQogICAgIHZvaWQgc2V0UmVwbGFjZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX2JpdGZpZWxk
cy5zZXRJc1JlcGxhY2VkKGIpOyB9CiAgICAgdm9pZCBzZXRIb3Jpem9udGFsV3JpdGluZ01vZGUo
Ym9vbCBiID0gdHJ1ZSkgeyBtX2JpdGZpZWxkcy5zZXRIb3Jpem9udGFsV3JpdGluZ01vZGUoYik7
IH0KLSAgICB2b2lkIHNldEhhc092ZXJmbG93Q2xpcChib29sIGIgPSB0cnVlKSB7IG1fYml0Zmll
bGRzLnNldEhhc092ZXJmbG93Q2xpcChiKTsgfQorICAgIHZvaWQgc2V0SGFzTm9uVmlzaWJsZU92
ZXJmbG93KGJvb2wgYiA9IHRydWUpIHsgbV9iaXRmaWVsZHMuc2V0SGFzTm9uVmlzaWJsZU92ZXJm
bG93KGIpOyB9CiAgICAgdm9pZCBzZXRIYXNMYXllcihib29sIGIgPSB0cnVlKSB7IG1fYml0Zmll
bGRzLnNldEhhc0xheWVyKGIpOyB9CiAgICAgdm9pZCBzZXRIYXNUcmFuc2Zvcm1SZWxhdGVkUHJv
cGVydHkoYm9vbCBiID0gdHJ1ZSkgeyBtX2JpdGZpZWxkcy5zZXRIYXNUcmFuc2Zvcm1SZWxhdGVk
UHJvcGVydHkoYik7IH0KIApAQCAtODQ2LDcgKzg0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAsIG1faXNMaW5lQnJlYWsoZmFsc2UpCiAgICAgICAgICAgICAsIG1faG9yaXpvbnRhbFdyaXRp
bmdNb2RlKHRydWUpCiAgICAgICAgICAgICAsIG1faGFzTGF5ZXIoZmFsc2UpCi0gICAgICAgICAg
ICAsIG1faGFzT3ZlcmZsb3dDbGlwKGZhbHNlKQorICAgICAgICAgICAgLCBtX2hhc05vblZpc2li
bGVPdmVyZmxvdyhmYWxzZSkKICAgICAgICAgICAgICwgbV9oYXNUcmFuc2Zvcm1SZWxhdGVkUHJv
cGVydHkoZmFsc2UpCiAgICAgICAgICAgICAsIG1fZXZlckhhZExheW91dChmYWxzZSkKICAgICAg
ICAgICAgICwgbV9jaGlsZHJlbklubGluZShmYWxzZSkKQEAgLTg3OSw3ICs4NzksNyBAQCBwcml2
YXRlOgogICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChob3Jpem9udGFsV3JpdGluZ01vZGUs
IEhvcml6b250YWxXcml0aW5nTW9kZSk7CiAKICAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQo
aGFzTGF5ZXIsIEhhc0xheWVyKTsKLSAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQoaGFzT3Zl
cmZsb3dDbGlwLCBIYXNPdmVyZmxvd0NsaXApOyAvLyBTZXQgaW4gdGhlIGNhc2Ugb2Ygb3ZlcmZs
b3c6YXV0by9zY3JvbGwvaGlkZGVuCisgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGhhc05v
blZpc2libGVPdmVyZmxvdywgSGFzTm9uVmlzaWJsZU92ZXJmbG93KTsgLy8gU2V0IGluIHRoZSBj
YXNlIG9mIG92ZXJmbG93OmF1dG8vc2Nyb2xsL2hpZGRlbgogICAgICAgICBBRERfQk9PTEVBTl9C
SVRGSUVMRChoYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHksIEhhc1RyYW5zZm9ybVJlbGF0ZWRQ
cm9wZXJ0eSk7CiAKICAgICAgICAgQUREX0JPT0xFQU5fQklURklFTEQoZXZlckhhZExheW91dCwg
RXZlckhhZExheW91dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU2Nyb2xsYmFyUGFydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyUGFydC5jcHAKaW5kZXggOTA5M2FlZGEwODc0MTU4MTdlMjEyNWE2MjJiNjVjOWYxM2Rj
NTE0OC4uMzQ0YjM2M2EzN2EyMTRiMmU0MTllOTAxNWI4Nzc2OTk2ZWIzODkxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcApAQCAtMTM3
LDcgKzEzNyw3IEBAIHZvaWQgUmVuZGVyU2Nyb2xsYmFyUGFydDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlCiAgICAgc2V0SW5saW5lKGZhbHNl
KTsKICAgICBjbGVhclBvc2l0aW9uZWRTdGF0ZSgpOwogICAgIHNldEZsb2F0aW5nKGZhbHNlKTsK
LSAgICBzZXRIYXNPdmVyZmxvd0NsaXAoZmFsc2UpOworICAgIHNldEhhc05vblZpc2libGVPdmVy
ZmxvdyhmYWxzZSk7CiAgICAgaWYgKG9sZFN0eWxlICYmIG1fc2Nyb2xsYmFyICYmIG1fcGFydCAh
PSBOb1BhcnQgJiYgZGlmZiA+PSBTdHlsZURpZmZlcmVuY2U6OlJlcGFpbnQpCiAgICAgICAgIG1f
c2Nyb2xsYmFyLT50aGVtZSgpLmludmFsaWRhdGVQYXJ0KCptX3Njcm9sbGJhciwgbV9wYXJ0KTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IGY0NmY5ODky
MmIyNDc4NDBlYzk2NGVlNjRmM2E2ZDcyM2VkZTI5MzguLjlkZDk3MzAzNWJhNTFiM2QyNzJjOGYz
OTQxZTlmM2ZmNjBmMGIxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcApAQCAtMTU2MSw3ICsxNTYxLDcgQEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICBM
YXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlv
bigpOwogCiAgICAgLy8gQ2hlY2sga2lkcyBmaXJzdC4KLSAgICBpZiAoIWhhc092ZXJmbG93Q2xp
cCgpIHx8IGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhvdmVyZmxvd0NsaXBSZWN0KGFk
anVzdGVkTG9jYXRpb24sIG51bGxwdHIpKSkgeworICAgIGlmICghaGFzTm9uVmlzaWJsZU92ZXJm
bG93KCkgfHwgbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3Qo
YWRqdXN0ZWRMb2NhdGlvbiwgbnVsbHB0cikpKSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJs
aW5nKCkpIHsKICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpjaGlsZCkgJiYgIWRvd25j
YXN0PFJlbmRlckJveD4oKmNoaWxkKS5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGlsZC0+
aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZC0+aXNUYWJsZUNhcHRpb24oKSkpIHsKICAgICAgICAg
ICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hp
bGQoZG93bmNhc3Q8UmVuZGVyQm94PihjaGlsZCksIGFkanVzdGVkTG9jYXRpb24pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAppbmRleCBjNjcwZDE4Yjc1OTFjYTI1
N2U3YzdiNDAwYjUyZTI0Yjc0ZjMwMTJmLi5iYTdlYzA5ZTcxZmI4OTZlMjBiYjExZmEzZjIzZWFl
YzA3ODQ2NTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVSb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaApA
QCAtNzYsNyArNzYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7CiAg
ICAgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0KGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIFZpc2libGVSZWN0Q29udGV4dCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKLSAgICBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBo
YXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSB8fCBoYXNI
aWRkZW5CYWNrZmFjZSgpIHx8IGhhc0NsaXBQYXRoKCkgfHwgY3JlYXRlc0dyb3VwKCkgfHwgaXNT
dGlja2lseVBvc2l0aW9uZWQoKTsgfQorICAgIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGhhc05vblZpc2libGVPdmVyZmxvdygpIHx8IGhhc1RyYW5zZm9ybVJl
bGF0ZWRQcm9wZXJ0eSgpIHx8IGhhc0hpZGRlbkJhY2tmYWNlKCkgfHwgaGFzQ2xpcFBhdGgoKSB8
fCBjcmVhdGVzR3JvdXAoKSB8fCBpc1N0aWNraWx5UG9zaXRpb25lZCgpOyB9CiAKICAgICB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggOTcx
MmFlYmExMzA4YjdjMmJmODAxODk3ZGFkMTk3MWFlZjViZDRhOC4uYTRlYmEwODBjNDVmNWE4YWQ2
NjY5NDg1ZmI4ZGFlMDY4MTA0MWI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTE0NTUsNyArMTQ1NSw3IEBAIGJvb2wgUmVuZGVy
VGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsCiAgICAgLy8gSnVzdCBmb3J3YXJkIHRvIG91ciBjaGlsZHJlbiBhbHdheXMu
CiAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsg
bG9jYXRpb24oKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiAhbG9jYXRpb25JbkNv
bnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgbnVs
bHB0cikpKQorICAgIGlmIChoYXNOb25WaXNpYmxlT3ZlcmZsb3coKSAmJiAhbG9jYXRpb25JbkNv
bnRhaW5lci5pbnRlcnNlY3RzKG92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgbnVs
bHB0cikpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaGFzT3ZlcmZsb3dpbmdD
ZWxsKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wu
Y3BwCmluZGV4IDI0MmFjYTNhMDZiOTE1NzRhNzQ4YjEzZWNlZmE4MGM2MTcyYjljNTkuLjBmMjgx
YTA1N2NmNjUxODBlNGJlODY5OTA2ZTgyYzZiMTdiODAyMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcApAQCAtMjExLDcgKzIxMSw3IEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2w6OmxheW91dEV4Y2x1ZGVkQ2hpbGRyZW4oYm9vbCByZWxheW91
dENoaWxkcmVuKQogYm9vbCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FuU2Nyb2xsKCkgY29uc3QKIHsK
ICAgICBhdXRvIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQoKTsKLSAgICByZXR1cm4gaW5u
ZXJUZXh0ICYmIGlubmVyVGV4dC0+cmVuZGVyZXIoKSAmJiBpbm5lclRleHQtPnJlbmRlcmVyKCkt
Pmhhc092ZXJmbG93Q2xpcCgpOworICAgIHJldHVybiBpbm5lclRleHQgJiYgaW5uZXJUZXh0LT5y
ZW5kZXJlcigpICYmIGlubmVyVGV4dC0+cmVuZGVyZXIoKS0+aGFzTm9uVmlzaWJsZU92ZXJmbG93
KCk7CiB9CiAKIGludCBSZW5kZXJUZXh0Q29udHJvbDo6aW5uZXJMaW5lSGVpZ2h0KCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAKaW5kZXggN2E3MDQ0OGNkZjI1NmVjMWQzYTUzODc0ZjBlNzU5MmI1YWFh
Y2QxYy4uMjk3ZWI2ZWU2YzA3NzRiMzA5YTEyMTg5NDExODllMzBjYjJjZWM2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbgogICAg
ICAgICAgICAgICAgIHBsYWNlaG9sZGVyLT5yZW5kZXJlcigpLT5zZXROZWVkc0xheW91dChNYXJr
Q29udGFpbmluZ0Jsb2NrQ2hhaW4pOwogICAgICAgICB9CiAgICAgfQotICAgIHNldEhhc092ZXJm
bG93Q2xpcChmYWxzZSk7CisgICAgc2V0SGFzTm9uVmlzaWJsZU92ZXJmbG93KGZhbHNlKTsKIH0K
IAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omhhc0NvbnRyb2xDbGlwKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRl
eCBmNWFmNTdiYzM4MWI2MmM0MWUzZjI5NjMxOTVlYzUwY2I4NmIyNjQ4Li4yNzE1MWVkMjM5NGRh
N2FiYTRiNzRiNGU2ODRjMjM0YzA2YTM0YmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC02NTgsNyArNjU4LDcgQEAgc3RhdGljIHZvaWQg
d3JpdGVMYXllcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25z
dCBMYXlvdXRSZWMKICAgICAgICAgICAgIHRzIDw8ICIgY2xpcCAiIDw8IGFkanVzdGVkQ2xpcFJl
Y3Q7CiAgICAgfQogCi0gICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkp
IHsKKyAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNOb25WaXNpYmxlT3ZlcmZsb3coKSkgewog
ICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgp
KSB7CiAgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9mZnNldCgpLngoKSkK
ICAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsT2Zmc2V0KCkueCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0Jsb2NrLmNwcAppbmRleCA1NDdlN2E1MTU2NjQyNDAxM2JmOWUwOTM2NjYzMTllNGM0YThi
YjBhLi42NGQzM2Y4NWEwMzQzNzY2YzE3ODZlZDM5ODljMjc5YjY1NTFiZjBiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Jsb2NrLmNwcApAQCAtNDAsNyAr
NDAsNyBAQCB2b2lkIFJlbmRlclNWR0Jsb2NrOjp1cGRhdGVGcm9tU3R5bGUoKQogewogICAgIFJl
bmRlckJsb2NrRmxvdzo6dXBkYXRlRnJvbVN0eWxlKCk7CiAKLSAgICAvLyBSZW5kZXJTVkdsb2Nr
LCB1c2VkIGJ5IFJlbmRlcihTVkdUZXh0fEZvcmVpZ25PYmplY3QpLCBpcyBub3QgYWxsb3dlZCB0
byBjYWxsIHNldEhhc092ZXJmbG93Q2xpcCh0cnVlKS4KKyAgICAvLyBSZW5kZXJTVkdsb2NrLCB1
c2VkIGJ5IFJlbmRlcihTVkdUZXh0fEZvcmVpZ25PYmplY3QpLCBpcyBub3QgYWxsb3dlZCB0byBj
YWxsIHNldEhhc05vblZpc2libGVPdmVyZmxvdyh0cnVlKS4KICAgICAvLyBSZW5kZXJCbG9jayBh
c3N1bWVzIGEgbGF5ZXIgdG8gYmUgcHJlc2VudCB3aGVuIHRoZSBvdmVyZmxvdyBjbGlwIGZ1bmN0
aW9uYWxpdHkgaXMgcmVxdWVzdGVkLiBCb3RoCiAgICAgLy8gUmVuZGVyKFNWR1RleHR8Rm9yZWln
bk9iamVjdCkgcmV0dXJuICdmYWxzZScgb24gJ3JlcXVpcmVzTGF5ZXInLiBGaW5lIGZvciBSZW5k
ZXJTVkdUZXh0LgogICAgIC8vCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgUmVuZGVyU1ZHQmxvY2s6
OnVwZGF0ZUZyb21TdHlsZSgpCiAgICAgLy8KICAgICAvLyBOb3RlOiBUaGlzIGRvZXMgTk9UIGFm
ZmVjdCBvdmVyZmxvdyBoYW5kbGluZyBvbiBvdXRlci9pbm5lciA8c3ZnPiBlbGVtZW50cyAtIHRo
aXMgaXMgaGFuZGxlZAogICAgIC8vIG1hbnVhbGx5IGJ5IFJlbmRlclNWR1Jvb3QgLSB3aGljaCBv
d25zIHRoZSBkb2N1bWVudHMgZW5jbG9zaW5nIHJvb3QgbGF5ZXIgYW5kIHRodXMgd29ya3MgZmlu
ZS4KLSAgICBzZXRIYXNPdmVyZmxvd0NsaXAoZmFsc2UpOworICAgIHNldEhhc05vblZpc2libGVP
dmVyZmxvdyhmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHQmxvY2s6OmFic29sdXRlUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0gYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NSFRNTC5tbQppbmRleCA4ZDZkN2E4ZjNhY2Y3Zjc3YjNlZWIyYjBhZTZm
OTJlZjY5NDQ3MjMzLi41ZjNhMjhmZWU2MzM3MjExYmVhOTg2YjU1Mzc0OWQ4ZmVhNTFiMWQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQpAQCAtNzUsNyArNzUsNyBAQAog
ICAgIGlmICghaXM8V2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKQogICAgICAg
ICByZW5kZXJlciA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKIAotICAgIGlmICghaXM8
V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpIHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dD
bGlwKCkpCisgICAgaWYgKCFpczxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikgfHwgIXJl
bmRlcmVyLT5oYXNOb25WaXNpYmxlT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5s
YXllcigpOwpAQCAtOTYsNyArOTYsNyBAQAogCiAgICAgaWYgKCFpczxXZWJDb3JlOjpSZW5kZXJC
bG9ja0Zsb3c+KCpyZW5kZXJlcikpCiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPmNvbnRh
aW5pbmdCbG9jaygpOwotICAgIGlmICghaXM8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIp
IHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgaWYgKCFpczxXZWJDb3JlOjpS
ZW5kZXJCb3g+KCpyZW5kZXJlcikgfHwgIXJlbmRlcmVyLT5oYXNOb25WaXNpYmxlT3ZlcmZsb3co
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFdlYkNv
cmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigpOwpAQCAtMTIyLDcgKzEyMiw3IEBACiAK
ICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSkKICAgICAg
ICAgcmVuZGVyZXIgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKCFyZW5k
ZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRl
cmVyKSkKKyAgICBpZiAoIXJlbmRlcmVyLT5oYXNOb25WaXNpYmxlT3ZlcmZsb3coKSB8fCAhaXM8
V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvKiBsYXllciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXll
cigpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>