<?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>191527</bug_id>
          
          <creation_ts>2018-11-11 18:11:38 -0800</creation_ts>
          <short_desc>[WebAuthn] Make CtapHidAuthenticator/U2fHidAuthenticator to CtapAuthenticator/U2fAuthenticator</short_desc>
          <delta_ts>2019-08-13 13:43:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>181943</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>alex.gaynor</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1477453</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2018-11-11 18:11:38 -0800</bug_when>
    <thetext>Make CtapHidAuthenticator to CtapAuthenticator, and make a ABC for CTAPHidDriver, called CTAPDriver, such that we will have a better polymorphism model for authenticators that uses the same protocol but different transports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560650</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-12 18:43:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/54237146&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560653</commentid>
    <comment_count>2</comment_count>
      <attachid>376125</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-08-12 18:51:24 -0700</bug_when>
    <thetext>Created attachment 376125
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560693</commentid>
    <comment_count>3</comment_count>
      <attachid>376134</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-08-12 21:05:05 -0700</bug_when>
    <thetext>Created attachment 376134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560705</commentid>
    <comment_count>4</comment_count>
      <attachid>376138</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-08-12 21:47:50 -0700</bug_when>
    <thetext>Created attachment 376138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560857</commentid>
    <comment_count>5</comment_count>
      <attachid>376138</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-08-13 11:14:06 -0700</bug_when>
    <thetext>Comment on attachment 376138
Patch

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

&gt; Source/WebKit/ChangeLog:9
&gt; +        This patch makes a ABC CtapDriver, which suffers as an interface for CtapAuthenticator/U2fAuthenticator to use,

suffers =&gt; services</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560938</commentid>
    <comment_count>6</comment_count>
      <attachid>376138</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-13 13:32:41 -0700</bug_when>
    <thetext>Comment on attachment 376138
Patch

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

&gt;&gt; Source/WebKit/ChangeLog:9
&gt;&gt; +        This patch makes a ABC CtapDriver, which suffers as an interface for CtapAuthenticator/U2fAuthenticator to use,
&gt; 
&gt; suffers =&gt; services

I do not understand this sentence, even after your typo fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560941</commentid>
    <comment_count>7</comment_count>
      <attachid>376138</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-08-13 13:38:09 -0700</bug_when>
    <thetext>Comment on attachment 376138
Patch

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

Thanks Chris for r+ this patch.

&gt;&gt;&gt; Source/WebKit/ChangeLog:9
&gt;&gt;&gt; +        This patch makes a ABC CtapDriver, which suffers as an interface for CtapAuthenticator/U2fAuthenticator to use,
&gt;&gt; 
&gt;&gt; suffers =&gt; services
&gt; 
&gt; I do not understand this sentence, even after your typo fix.

I would expand the sentence to include a description of the CtapDriver. The CtapDriver is an abstract interface for all drivers that implements the CTAP protocol for different transports, i.e. HID, NFC, BLE ......</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560943</commentid>
    <comment_count>8</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-08-13 13:43:13 -0700</bug_when>
    <thetext>Committed r248631: &lt;https://trac.webkit.org/changeset/248631&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376125</attachid>
            <date>2019-08-12 18:51:24 -0700</date>
            <delta_ts>2019-08-12 21:05:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191527-20190812185123.patch</filename>
            <type>text/plain</type>
            <size>63954</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkyNzRkZDkxY2EzYWM2ZmUx
Y2NmN2RlYTNiNWVlM2ExODBkNTY1NTMuLmZiYjA2NDM5MDEyMzA2MmM5NzQ5YWM0NTA2ODExY2Yx
OTJkMjRlN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTktMDgtMTIgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViQXV0aG5dIE1ha2UgQ3Rh
cEhpZEF1dGhlbnRpY2F0b3IvVTJmSGlkQXV0aGVudGljYXRvciB0byBDdGFwQXV0aGVudGljYXRv
ci9VMmZBdXRoZW50aWNhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTE1MjcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0MjM3MTQ2PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
bWFrZXMgYSBBQkMgQ3RhcERyaXZlciwgd2hpY2ggc3VmZmVycyBhcyBhbiBpbnRlcmZhY2UgZm9y
IEN0YXBBdXRoZW50aWNhdG9yL1UyZkF1dGhlbnRpY2F0b3IgdG8gdXNlLAorICAgICAgICBzdWNo
IHRoYXQgQ3RhcEF1dGhlbnRpY2F0b3IvVTJmQXV0aGVudGljYXRvciBjYW4gYmUgc2hhcmVkIGFj
cm9zcyBkaWZmZXJlbnQgdHJhbnNwb3J0cy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVu
YW1lcyBDdGFwSGlkQXV0aGVudGljYXRvci9VMmZIaWRBdXRoZW50aWNhdG9yIHRvIEN0YXBBdXRo
ZW50aWNhdG9yL1UyZkF1dGhlbnRpY2F0b3IgY29ycmVzcG9uZGluZ2x5LgorCisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29h
L0hpZFNlcnZpY2UubW06CisgICAgICAgIChXZWJLaXQ6OkhpZFNlcnZpY2U6OmNvbnRpbnVlQWRk
RGV2aWNlQWZ0ZXJHZXRJbmZvKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBIaWRBdXRoZW50aWNhdG9yLmNw
cC4KKyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6OkN0YXBBdXRoZW50aWNhdG9y
KToKKyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKToK
KyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRp
YWxBZnRlclJlc3BvbnNlUmVjZWl2ZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpDdGFwQXV0
aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRp
Y2F0b3I6OmNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKToKKyAgICAg
ICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6OnRyeURvd25ncmFkZSk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9D
dGFwSGlkQXV0aGVudGljYXRvci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9maWRvL0N0YXBEcml2ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlkRHJpdmVyLmg6Cisg
ICAgICAgIChXZWJLaXQ6OkN0YXBIaWREcml2ZXI6OnNldFByb3RvY29sKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9VMmZBdXRoZW50aWNhdG9yLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8v
VTJmSGlkQXV0aGVudGljYXRvci5jcHAuCisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0
b3I6OlUyZkF1dGhlbnRpY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9y
OjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6OmNo
ZWNrRXhjbHVkZUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjppc3N1
ZVJlZ2lzdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6Omdl
dEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6Omlzc3VlU2ln
bkNvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjppc3N1ZU5ld0Nv
bW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjppc3N1ZUNvbW1hbmQp
OgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjpyZXNwb25zZVJlY2VpdmVkKToK
KyAgICAgICAgKFdlYktpdDo6VTJmQXV0aGVudGljYXRvcjo6Y29udGludWVSZWdpc3RlckNvbW1h
bmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNh
dG9yOjpjb250aW51ZUNoZWNrT25seUNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjpjb250aW51ZUJvZ3VzQ29tbWFuZEFmdGVy
UmVzcG9uc2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6OmNv
bnRpbnVlU2lnbkNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1UyZkF1dGhlbnRpY2F0b3IuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vVTJmSGlk
QXV0aGVudGljYXRvci5oLgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorCiAyMDE5LTA4LTA4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZS5jb20+CiAKICAgICAgICAgW2lPU10gUG9zaXRpb24gaW1hZ2UgaW5mb3JtYXRpb24gc2hvdWxk
IHJlc3BlY3QgdGhlIGltYWdlIG9yaWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA1YjRmZjY5YzU0
ZjUwMjdhYzllNDRkOTA1ODAxZGIzYmY5YWRhZjIzLi5kOTgxOTczOTczYjE3MDljYTg5MzFhNGJi
ZmI0OGZmNGIyMDVhMGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTQwNyw5ICs0MDcsOSBAQCBVSVByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCiBVSVByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuY3BwCiBVSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCiAKLVVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9maWRvL0N0YXBIaWRBdXRoZW50aWNhdG9yLmNwcAorVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwCiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vZmlkby9DdGFwSGlkRHJpdmVyLmNwcAotVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2Zp
ZG8vVTJmSGlkQXV0aGVudGljYXRvci5jcHAKK1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9m
aWRvL1UyZkF1dGhlbnRpY2F0b3IuY3BwCiAKIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9N
b2NrL01vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Nb2NrL01vY2tIaWRDb25uZWN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvSGlkU2VydmljZS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0hpZFNlcnZpY2UubW0K
aW5kZXggY2EyNmU1MWQ3YTQwNjRhYTI4MTI3YzBmMDFkNTRhNGUwYWMyNDQ2My4uOWVhZTE4ZWRk
NWY0ZDJkYzVkZjM4ZTk2ZDA1MDUwOTNiY2E5YjM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvSGlkU2VydmljZS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9IaWRTZXJ2aWNl
Lm1tCkBAIC0yOCwxMCArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRG
T1JNKE1BQykKIAotI2ltcG9ydCAiQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaCIKKyNpbXBvcnQgIkN0
YXBBdXRoZW50aWNhdG9yLmgiCiAjaW1wb3J0ICJDdGFwSGlkRHJpdmVyLmgiCiAjaW1wb3J0ICJI
aWRDb25uZWN0aW9uLmgiCi0jaW1wb3J0ICJVMmZIaWRBdXRoZW50aWNhdG9yLmgiCisjaW1wb3J0
ICJVMmZBdXRoZW50aWNhdG9yLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RldmljZVJlcXVlc3RDb252
ZXJ0ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRGV2aWNlUmVzcG9uc2VDb252ZXJ0ZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvRmlkb0NvbnN0YW50cy5oPgpAQCAtMTEyLDEyICsxMTIsMTIgQEAgdm9p
ZCBIaWRTZXJ2aWNlOjpjb250aW51ZUFkZERldmljZUFmdGVyR2V0SW5mbyhDdGFwSGlkRHJpdmVy
KiBwdHIsIFZlY3Rvcjx1aW50OF8KIAogICAgIGF1dG8gaW5mbyA9IHJlYWRDVEFQR2V0SW5mb1Jl
c3BvbnNlKHJlc3BvbnNlKTsKICAgICBpZiAoaW5mbyAmJiBpbmZvLT52ZXJzaW9ucygpLmZpbmQo
UHJvdG9jb2xWZXJzaW9uOjprQ3RhcCkgIT0gaW5mby0+dmVyc2lvbnMoKS5lbmQoKSkgewotICAg
ICAgICBvYnNlcnZlcigpLT5hdXRoZW50aWNhdG9yQWRkZWQoQ3RhcEhpZEF1dGhlbnRpY2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGRyaXZlciksIFdURk1vdmUoKmluZm8pKSk7CisgICAgICAgIG9ic2Vy
dmVyKCktPmF1dGhlbnRpY2F0b3JBZGRlZChDdGFwQXV0aGVudGljYXRvcjo6Y3JlYXRlKFdURk1v
dmUoZHJpdmVyKSwgV1RGTW92ZSgqaW5mbykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBMT0dfRVJST1IoIkNvdWxkbid0IHBhcnNlIGEgY3RhcCBnZXQgaW5mbyByZXNwb25zZS4iKTsK
ICAgICBkcml2ZXItPnNldFByb3RvY29sKFByb3RvY29sVmVyc2lvbjo6a1UyZik7Ci0gICAgb2Jz
ZXJ2ZXIoKS0+YXV0aGVudGljYXRvckFkZGVkKFUyZkhpZEF1dGhlbnRpY2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGRyaXZlcikpKTsKKyAgICBvYnNlcnZlcigpLT5hdXRoZW50aWNhdG9yQWRkZWQoVTJm
QXV0aGVudGljYXRvcjo6Y3JlYXRlKFdURk1vdmUoZHJpdmVyKSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWUzN2E0MjVlMGYyMTQ0MWEzYzhiZWQ4OTdiMzlkNzkzZDQ1YTdiYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8v
Q3RhcEF1dGhlbnRpY2F0b3IuY3BwCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN0YXBBdXRoZW50aWNhdG9yLmgiCisKKyNpZiBF
TkFCTEUoV0VCX0FVVEhOKSAmJiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRlICJDdGFwRHJpdmVy
LmgiCisjaW5jbHVkZSAiQ3RhcEhpZERyaXZlci5oIgorI2luY2x1ZGUgIlUyZkF1dGhlbnRpY2F0
b3IuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RldmljZVJlcXVlc3RDb252ZXJ0ZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0RldmljZVJlc3BvbnNlQ29udmVydGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25EYXRhLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBmaWRvOworCitDdGFw
QXV0aGVudGljYXRvcjo6Q3RhcEF1dGhlbnRpY2F0b3Ioc3RkOjp1bmlxdWVfcHRyPEN0YXBEcml2
ZXI+JiYgZHJpdmVyLCBBdXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlJiYgaW5mbykKKyAgICA6
IG1fZHJpdmVyKFdURk1vdmUoZHJpdmVyKSkKKyAgICAsIG1faW5mbyhXVEZNb3ZlKGluZm8pKQor
eworICAgIC8vIEZJWE1FKDE5MTUyMCk6IFdlIG5lZWQgYSB3YXkgdG8gY29udmVydCBzdGQ6OnVu
aXF1ZV9wdHIgdG8gVW5pcXVlUmVmLgorICAgIEFTU0VSVChtX2RyaXZlcik7Cit9CisKK3ZvaWQg
Q3RhcEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKCkKK3sKKyAgICBBU1NFUlQoIW1faXNE
b3duZ3JhZGVkKTsKKyAgICBhdXRvIGNib3JDbWQgPSBlbmNvZGVNYWtlQ3JlZGVuaXRhbFJlcXVl
c3RBc0NCT1IocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9u
cywgbV9pbmZvLm9wdGlvbnMoKS51c2VyVmVyaWZpY2F0aW9uQXZhaWxhYmlsaXR5KCkpOworICAg
IG1fZHJpdmVyLT50cmFuc2FjdChXVEZNb3ZlKGNib3JDbWQpLCBbd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyldKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIHsKKyAgICAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgd2Vha1RoaXMtPmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlclJlc3Bv
bnNlUmVjZWl2ZWQoV1RGTW92ZShkYXRhKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ3RhcEF1dGhl
bnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlclJlc3BvbnNlUmVjZWl2ZWQoVmVj
dG9yPHVpbnQ4X3Q+JiYgZGF0YSkgY29uc3QKK3sKKyAgICBhdXRvIHJlc3BvbnNlID0gcmVhZENU
QVBNYWtlQ3JlZGVudGlhbFJlc3BvbnNlKGRhdGEsIHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRp
b25zLmF0dGVzdGF0aW9uKTsKKyAgICBpZiAoIXJlc3BvbnNlKSB7CisgICAgICAgIGF1dG8gZXJy
b3IgPSBnZXRSZXNwb25zZUNvZGUoZGF0YSk7CisgICAgICAgIGlmIChlcnJvciA9PSBDdGFwRGV2
aWNlUmVzcG9uc2VDb2RlOjprQ3RhcDJFcnJDcmVkZW50aWFsRXhjbHVkZWQpCisgICAgICAgICAg
ICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgSW52YWxpZFN0YXRlRXJyb3IsICJBdCBs
ZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVu
dGlhbHMgbGlzdCBpbiB0aGUgYXV0aGVudGljYXRvci4iX3MgfSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBVbmtub3duRXJyb3IsIG1h
a2VTdHJpbmcoIlVua25vd24gaW50ZXJuYWwgZXJyb3IuIEVycm9yIGNvZGU6ICIsIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KGVycm9yKSkgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVj
ZWl2ZVJlc3BvbmQoV1RGTW92ZSgqcmVzcG9uc2UpKTsKK30KKwordm9pZCBDdGFwQXV0aGVudGlj
YXRvcjo6Z2V0QXNzZXJ0aW9uKCkKK3sKKyAgICBBU1NFUlQoIW1faXNEb3duZ3JhZGVkKTsKKyAg
ICBhdXRvIGNib3JDbWQgPSBlbmNvZGVHZXRBc3NlcnRpb25SZXF1ZXN0QXNDQk9SKHJlcXVlc3RE
YXRhKCkuaGFzaCwgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucywgbV9pbmZvLm9wdGlvbnMo
KS51c2VyVmVyaWZpY2F0aW9uQXZhaWxhYmlsaXR5KCkpOworICAgIG1fZHJpdmVyLT50cmFuc2Fj
dChXVEZNb3ZlKGNib3JDbWQpLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKFZlY3Rv
cjx1aW50OF90PiYmIGRhdGEpIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2Vh
a1RoaXMtPmNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKFdURk1vdmUo
ZGF0YSkpOworICAgIH0pOworfQorCit2b2lkIEN0YXBBdXRoZW50aWNhdG9yOjpjb250aW51ZUdl
dEFzc2VydGlvbkFmdGVyUmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8dWludDhfdD4mJiBkYXRhKQor
eworICAgIGF1dG8gcmVzcG9uc2UgPSByZWFkQ1RBUEdldEFzc2VydGlvblJlc3BvbnNlKGRhdGEp
OworICAgIGlmICghcmVzcG9uc2UpIHsKKyAgICAgICAgYXV0byBlcnJvciA9IGdldFJlc3BvbnNl
Q29kZShkYXRhKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEN0YXBEZXZpY2VSZXNwb25zZUNvZGU6
OmtDdGFwMkVyckludmFsaWRDQk9SICYmIHRyeURvd25ncmFkZSgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9y
LCBtYWtlU3RyaW5nKCJVbmtub3duIGludGVybmFsIGVycm9yLiBFcnJvciBjb2RlOiAiLCBzdGF0
aWNfY2FzdDx1aW50OF90PihlcnJvcikpIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IHJlY2VpdmVSZXNwb25kKFdURk1vdmUoKnJlc3BvbnNlKSk7Cit9CisKK2Jvb2wgQ3RhcEF1dGhl
bnRpY2F0b3I6OnRyeURvd25ncmFkZSgpCit7CisgICAgaWYgKG1faW5mby52ZXJzaW9ucygpLmZp
bmQoUHJvdG9jb2xWZXJzaW9uOjprVTJmKSA9PSBtX2luZm8udmVyc2lvbnMoKS5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghb2JzZXJ2ZXIoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9pc0Rvd25ncmFkZWQgPSB0cnVlOworICAgIGlmIChpczxDdGFwSGlk
RHJpdmVyPigqbV9kcml2ZXIpKQorICAgICAgICBkb3duY2FzdDxDdGFwSGlkRHJpdmVyPigqbV9k
cml2ZXIpLnNldFByb3RvY29sKFByb3RvY29sVmVyc2lvbjo6a1UyZik7CisgICAgb2JzZXJ2ZXIo
KS0+ZG93bmdyYWRlKHRoaXMsIFUyZkF1dGhlbnRpY2F0b3I6OmNyZWF0ZShXVEZNb3ZlKG1fZHJp
dmVyKSkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhl
bnRpY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2Zp
ZG8vQ3RhcEF1dGhlbnRpY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWU4ODg4NzVhNTZmZWY4ZTA5MDgx
OGExODZjNTcxMzM1MDNjZjNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5oCkBAIC0wLDAg
KzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfQVVU
SE4pICYmIFBMQVRGT1JNKE1BQykKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0b3IuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9uc2UuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIEN0YXBEcml2ZXI7CisKK2NsYXNzIEN0YXBBdXRoZW50aWNhdG9y
IGZpbmFsIDogcHVibGljIEF1dGhlbnRpY2F0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
Q3RhcEF1dGhlbnRpY2F0b3I+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8Q3RhcERyaXZlcj4mJiBk
cml2ZXIsIGZpZG86OkF1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9uc2UmJiBpbmZvKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3RhcEF1dGhlbnRpY2F0b3IoV1RGTW92ZShk
cml2ZXIpLCBXVEZNb3ZlKGluZm8pKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IEN0YXBBdXRoZW50aWNhdG9yKHN0ZDo6dW5pcXVlX3B0cjxDdGFwRHJpdmVyPiYmLCBmaWRvOjpB
dXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlJiYpOworCisgICAgdm9pZCBtYWtlQ3JlZGVudGlh
bCgpIGZpbmFsOworICAgIHZvaWQgY29udGludWVNYWtlQ3JlZGVudGlhbEFmdGVyUmVzcG9uc2VS
ZWNlaXZlZChWZWN0b3I8dWludDhfdD4mJikgY29uc3Q7CisgICAgdm9pZCBnZXRBc3NlcnRpb24o
KSBmaW5hbDsKKyAgICB2b2lkIGNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0ZXJSZXNwb25zZVJlY2Vp
dmVkKFZlY3Rvcjx1aW50OF90PiYmKTsKKworICAgIGJvb2wgdHJ5RG93bmdyYWRlKCk7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q3RhcERyaXZlcj4gbV9kcml2ZXI7CisgICAgZmlkbzo6QXV0aGVu
dGljYXRvckdldEluZm9SZXNwb25zZSBtX2luZm87CisgICAgYm9vbCBtX2lzRG93bmdyYWRlZCB7
IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcERyaXZlci5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwRHJpdmVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzQ1NDVkNTE0NmNlYmUzNGM1ODczOWZmNmMxZGVmMTI4MGJlMjFiMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8v
Q3RhcERyaXZlci5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworZW51bSBjbGFzcyBUcmFuc3BvcnRDbGFzcyB7CisgICAgSGlkLAor
fTsKKworY2xhc3MgQ3RhcERyaXZlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDdGFwRHJpdmVy
PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ3RhcERyaXZlcik7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzcG9uc2VDYWxsYmFjayA9IEZ1
bmN0aW9uPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPjsKKworICAgIEN0YXBEcml2ZXIoKSA9IGRl
ZmF1bHQ7CisgICAgdmlydHVhbCB+Q3RhcERyaXZlcigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1
YWwgVHJhbnNwb3J0Q2xhc3MgdHJhbnNwb3J0Q2xhc3MoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgdHJhbnNhY3QoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgUmVzcG9uc2VDYWxsYmFj
ayYmKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2RlZmluZSBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0NUQVBfRFJJVkVSKFRvQ2xhc3NOYW1lLCBUcmFuc3BvcnRDbGFzcykg
XAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJLaXQ6OlRvQ2xhc3NOYW1lKSBcCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6Q3RhcERyaXZlciYgZHJpdmVyKSB7
IHJldHVybiBkcml2ZXIudHJhbnNwb3J0Q2xhc3MoKSA9PSBXZWJLaXQ6OlRyYW5zcG9ydENsYXNz
OyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVUSE4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50
aWNhdGlvbi9maWRvL0N0YXBIaWRBdXRoZW50aWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZEF1dGhlbnRpY2F0b3IuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWM4MDU0MzYzMzJhNTU5NWJhOGExOWVlMDE2
NDlkNGFjZDQxNjA5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhp
ZEF1dGhlbnRpY2F0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3RhcEhpZEF1dGhlbnRpY2F0
b3IuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykKLQotI2luY2x1
ZGUgIkN0YXBIaWREcml2ZXIuaCIKLSNpbmNsdWRlICJVMmZIaWRBdXRoZW50aWNhdG9yLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9EZXZpY2VSZXF1ZXN0Q29udmVydGVyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9EZXZpY2VSZXNwb25zZUNvbnZlcnRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uRGF0YS5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgZmlkbzsKLQotQ3RhcEhpZEF1dGhl
bnRpY2F0b3I6OkN0YXBIaWRBdXRoZW50aWNhdG9yKHN0ZDo6dW5pcXVlX3B0cjxDdGFwSGlkRHJp
dmVyPiYmIGRyaXZlciwgQXV0aGVudGljYXRvckdldEluZm9SZXNwb25zZSYmIGluZm8pCi0gICAg
OiBtX2RyaXZlcihXVEZNb3ZlKGRyaXZlcikpCi0gICAgLCBtX2luZm8oV1RGTW92ZShpbmZvKSkK
LXsKLSAgICAvLyBGSVhNRSgxOTE1MjApOiBXZSBuZWVkIGEgd2F5IHRvIGNvbnZlcnQgc3RkOjp1
bmlxdWVfcHRyIHRvIFVuaXF1ZVJlZi4KLSAgICBBU1NFUlQobV9kcml2ZXIpOwotfQotCi12b2lk
IEN0YXBIaWRBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgpCi17Ci0gICAgQVNTRVJUKCFt
X2lzRG93bmdyYWRlZCk7Ci0gICAgYXV0byBjYm9yQ21kID0gZW5jb2RlTWFrZUNyZWRlbml0YWxS
ZXF1ZXN0QXNDQk9SKHJlcXVlc3REYXRhKCkuaGFzaCwgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9w
dGlvbnMsIG1faW5mby5vcHRpb25zKCkudXNlclZlcmlmaWNhdGlvbkF2YWlsYWJpbGl0eSgpKTsK
LSAgICBtX2RyaXZlci0+dHJhbnNhY3QoV1RGTW92ZShjYm9yQ21kKSwgW3dlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpXShWZWN0b3I8dWludDhfdD4mJiBkYXRhKSB7Ci0gICAgICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHdlYWtUaGlzLT5jb250aW51ZU1ha2VDcmVkZW50aWFsQWZ0ZXJS
ZXNwb25zZVJlY2VpdmVkKFdURk1vdmUoZGF0YSkpOwotICAgIH0pOwotfQotCi12b2lkIEN0YXBI
aWRBdXRoZW50aWNhdG9yOjpjb250aW51ZU1ha2VDcmVkZW50aWFsQWZ0ZXJSZXNwb25zZVJlY2Vp
dmVkKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIGNvbnN0Ci17Ci0gICAgYXV0byByZXNwb25zZSA9
IHJlYWRDVEFQTWFrZUNyZWRlbnRpYWxSZXNwb25zZShkYXRhLCByZXF1ZXN0RGF0YSgpLmNyZWF0
aW9uT3B0aW9ucy5hdHRlc3RhdGlvbik7Ci0gICAgaWYgKCFyZXNwb25zZSkgewotICAgICAgICBh
dXRvIGVycm9yID0gZ2V0UmVzcG9uc2VDb2RlKGRhdGEpOwotICAgICAgICBpZiAoZXJyb3IgPT0g
Q3RhcERldmljZVJlc3BvbnNlQ29kZTo6a0N0YXAyRXJyQ3JlZGVudGlhbEV4Y2x1ZGVkKQotICAg
ICAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IEludmFsaWRTdGF0ZUVycm9y
LCAiQXQgbGVhc3Qgb25lIGNyZWRlbnRpYWwgbWF0Y2hlcyBhbiBlbnRyeSBvZiB0aGUgZXhjbHVk
ZUNyZWRlbnRpYWxzIGxpc3QgaW4gdGhlIGF1dGhlbnRpY2F0b3IuIl9zIH0pOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVy
cm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGludGVybmFsIGVycm9yLiBFcnJvciBjb2RlOiAiLCBz
dGF0aWNfY2FzdDx1aW50OF90PihlcnJvcikpIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHJlY2VpdmVSZXNwb25kKFdURk1vdmUoKnJlc3BvbnNlKSk7Ci19Ci0KLXZvaWQgQ3RhcEhp
ZEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCi17Ci0gICAgQVNTRVJUKCFtX2lzRG93bmdy
YWRlZCk7Ci0gICAgYXV0byBjYm9yQ21kID0gZW5jb2RlR2V0QXNzZXJ0aW9uUmVxdWVzdEFzQ0JP
UihyZXF1ZXN0RGF0YSgpLmhhc2gsIHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMsIG1faW5m
by5vcHRpb25zKCkudXNlclZlcmlmaWNhdGlvbkF2YWlsYWJpbGl0eSgpKTsKLSAgICBtX2RyaXZl
ci0+dHJhbnNhY3QoV1RGTW92ZShjYm9yQ21kKSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpXShWZWN0b3I8dWludDhfdD4mJiBkYXRhKSB7Ci0gICAgICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHdlYWtUaGlzLT5jb250aW51ZUdldEFzc2VydGlvbkFmdGVyUmVzcG9uc2VSZWNlaXZl
ZChXVEZNb3ZlKGRhdGEpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBDdGFwSGlkQXV0aGVudGljYXRv
cjo6Y29udGludWVHZXRBc3NlcnRpb25BZnRlclJlc3BvbnNlUmVjZWl2ZWQoVmVjdG9yPHVpbnQ4
X3Q+JiYgZGF0YSkKLXsKLSAgICBhdXRvIHJlc3BvbnNlID0gcmVhZENUQVBHZXRBc3NlcnRpb25S
ZXNwb25zZShkYXRhKTsKLSAgICBpZiAoIXJlc3BvbnNlKSB7Ci0gICAgICAgIGF1dG8gZXJyb3Ig
PSBnZXRSZXNwb25zZUNvZGUoZGF0YSk7Ci0gICAgICAgIGlmIChlcnJvciAhPSBDdGFwRGV2aWNl
UmVzcG9uc2VDb2RlOjprQ3RhcDJFcnJJbnZhbGlkQ0JPUiAmJiB0cnlEb3duZ3JhZGUoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7
IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBpbnRlcm5hbCBlcnJvci4gRXJyb3Ig
Y29kZTogIiwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZXJyb3IpKSB9KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICByZWNlaXZlUmVzcG9uZChXVEZNb3ZlKCpyZXNwb25zZSkpOwotfQotCi1i
b29sIEN0YXBIaWRBdXRoZW50aWNhdG9yOjp0cnlEb3duZ3JhZGUoKQotewotICAgIGlmIChtX2lu
Zm8udmVyc2lvbnMoKS5maW5kKFByb3RvY29sVmVyc2lvbjo6a1UyZikgPT0gbV9pbmZvLnZlcnNp
b25zKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW9ic2VydmVyKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faXNEb3duZ3JhZGVkID0gdHJ1ZTsKLSAg
ICBtX2RyaXZlci0+c2V0UHJvdG9jb2woUHJvdG9jb2xWZXJzaW9uOjprVTJmKTsKLSAgICBvYnNl
cnZlcigpLT5kb3duZ3JhZGUodGhpcywgVTJmSGlkQXV0aGVudGljYXRvcjo6Y3JlYXRlKFdURk1v
dmUobV9kcml2ZXIpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikgJiYgUExBVEZPUk0oTUFDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9D
dGFwSGlkQXV0aGVudGljYXRvci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vZmlkby9DdGFwSGlkQXV0aGVudGljYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2M2M0NjExNzQyNDI4NDdjNjJmOWE1ZDJhZTM2YzU2MWYwZmFjN2RkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaAor
KysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykKLQotI2luY2x1ZGUgIkF1
dGhlbnRpY2F0b3IuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JHZXRJbmZvUmVz
cG9uc2UuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEN0YXBIaWREcml2ZXI7Ci0K
LWNsYXNzIEN0YXBIaWRBdXRoZW50aWNhdG9yIGZpbmFsIDogcHVibGljIEF1dGhlbnRpY2F0b3Ig
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q3RhcEhpZEF1dGhlbnRpY2F0b3I+IGNyZWF0ZShz
dGQ6OnVuaXF1ZV9wdHI8Q3RhcEhpZERyaXZlcj4mJiBkcml2ZXIsIGZpZG86OkF1dGhlbnRpY2F0
b3JHZXRJbmZvUmVzcG9uc2UmJiBpbmZvKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ3RhcEhpZEF1dGhlbnRpY2F0b3IoV1RGTW92ZShkcml2ZXIpLCBXVEZNb3ZlKGluZm8p
KSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IEN0YXBIaWRBdXRoZW50aWNhdG9y
KHN0ZDo6dW5pcXVlX3B0cjxDdGFwSGlkRHJpdmVyPiYmLCBmaWRvOjpBdXRoZW50aWNhdG9yR2V0
SW5mb1Jlc3BvbnNlJiYpOwotCi0gICAgdm9pZCBtYWtlQ3JlZGVudGlhbCgpIGZpbmFsOwotICAg
IHZvaWQgY29udGludWVNYWtlQ3JlZGVudGlhbEFmdGVyUmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8
dWludDhfdD4mJikgY29uc3Q7Ci0gICAgdm9pZCBnZXRBc3NlcnRpb24oKSBmaW5hbDsKLSAgICB2
b2lkIGNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKFZlY3Rvcjx1aW50
OF90PiYmKTsKLQotICAgIGJvb2wgdHJ5RG93bmdyYWRlKCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q3RhcEhpZERyaXZlcj4gbV9kcml2ZXI7Ci0gICAgZmlkbzo6QXV0aGVudGljYXRvckdldElu
Zm9SZXNwb25zZSBtX2luZm87Ci0gICAgYm9vbCBtX2lzRG93bmdyYWRlZCB7IGZhbHNlIH07Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4p
ICYmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZERyaXZlci5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlkRHJpdmVyLmgKaW5kZXggOGZiNTA0
ZDkxZTk3ODM3MGIwZjZkOTQyODE4Y2QxOTg3OTc4MjNjYy4uMTczNTczNTkxZTM4ZTNlMGMyNDVj
NDU0YzI2Yzg0MWZkMTEyNDY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlkRHJpdmVyLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlkRHJpdmVyLmgKQEAgLTI3
LDI2ICsyNywxOSBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVVRITikgJiYgUExBVEZPUk0oTUFDKQog
CisjaW5jbHVkZSAiQ3RhcERyaXZlci5oIgogI2luY2x1ZGUgIkhpZENvbm5lY3Rpb24uaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0ZpZG9Db25zdGFudHMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZpZG9I
aWRNZXNzYWdlLmg+Ci0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIC8vIFRoZSBmb2xsb3dpbmcgaW1wbGVtZW50cyB0aGUgQ1RBUCBISUQgcHJv
dG9jb2w6CiAvLyBodHRwczovL2ZpZG9hbGxpYW5jZS5vcmcvc3BlY3MvZmlkby12Mi4wLXBzLTIw
MTcwOTI3L2ZpZG8tY2xpZW50LXRvLWF1dGhlbnRpY2F0b3ItcHJvdG9jb2wtdjIuMC1wcy0yMDE3
MDkyNy5odG1sI3VzYgogLy8gRlNNOiBJZGxlID0+IEFsbG9jYXRlQ2hhbm5lbCA9PiBSZWFkeQot
Y2xhc3MgQ3RhcEhpZERyaXZlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDdGFwSGlkRHJpdmVy
PiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ3RhcEhpZERyaXZlcik7CitjbGFzcyBDdGFwSGlkRHJpdmVyIDogcHVibGljIEN0YXBEcml2
ZXIgewogcHVibGljOgotICAgIHVzaW5nIFJlc3BvbnNlQ2FsbGJhY2sgPSBGdW5jdGlvbjx2b2lk
KFZlY3Rvcjx1aW50OF90PiYmKT47Ci0KICAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7
CiAgICAgICAgIElkbGUsCiAgICAgICAgIEFsbG9jYXRlQ2hhbm5lbCwKQEAgLTU3LDggKzUwLDkg
QEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgQ3RhcEhpZERyaXZlcihVbmlxdWVSZWY8SGlkQ29u
bmVjdGlvbj4mJik7CiAKKyAgICB2b2lkIHRyYW5zYWN0KFZlY3Rvcjx1aW50OF90PiYmIGRhdGEs
IFJlc3BvbnNlQ2FsbGJhY2smJikgZmluYWw7CisKICAgICB2b2lkIHNldFByb3RvY29sKGZpZG86
OlByb3RvY29sVmVyc2lvbiBwcm90b2NvbCkgeyBtX3Byb3RvY29sID0gcHJvdG9jb2w7IH0KLSAg
ICB2b2lkIHRyYW5zYWN0KFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIFJlc3BvbnNlQ2FsbGJhY2sm
Jik7CiAKIHByaXZhdGU6CiAgICAgLy8gV29ya2VyIGlzIHRoZSBoZWxwZXIgdGhhdCBtYWludGFp
bnMgdGhlIHRyYW5zYWN0aW9uLgpAQCAtOTMsNiArODcsOCBAQCBwcml2YXRlOgogICAgICAgICBN
ZXNzYWdlQ2FsbGJhY2sgbV9jYWxsYmFjazsKICAgICB9OwogCisgICAgVHJhbnNwb3J0Q2xhc3Mg
dHJhbnNwb3J0Q2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUcmFuc3BvcnRDbGFzczo6SGlk
OyB9CisKICAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJDaGFubmVsQWxsb2NhdGVkKE9wdGlvbmFsPGZp
ZG86OkZpZG9IaWRNZXNzYWdlPiYmKTsKICAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJSZXNwb25zZVJl
Y2VpdmVkKE9wdGlvbmFsPGZpZG86OkZpZG9IaWRNZXNzYWdlPiYmKTsKICAgICB2b2lkIHJldHVy
blJlc3BvbnNlKFZlY3Rvcjx1aW50OF90PiYmKTsKQEAgLTEwOSw0ICsxMDUsNiBAQCBwcml2YXRl
OgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DVEFQ
X0RSSVZFUihDdGFwSGlkRHJpdmVyLCBUcmFuc3BvcnRDbGFzczo6SGlkKQorCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQl9BVVRITikgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9VMmZBdXRoZW50aWNhdG9yLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vVTJmQXV0
aGVudGljYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU4NTY3MmZkMmM5YzMxY2VlYzQzNjE2ZmM3MDU3
ODU1NzVhYTU3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL2ZpZG8vVTJmQXV0aGVudGljYXRvci5jcHAKQEAgLTAsMCArMSwyNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVTJmQXV0aGVu
dGljYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQl9BVVRITikgJiYgUExBVEZPUk0oTUFDKQorCisj
aW5jbHVkZSAiQ3RhcERyaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQXBkdVJlc3BvbnNlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25EYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9V
MmZDb21tYW5kQ29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1UyZlJlc3BvbnNlQ29u
dmVydGVyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBhcGR1OwordXNpbmcgbmFtZXNwYWNl
IGZpZG87CisKK25hbWVzcGFjZSB7Citjb25zdCB1bnNpZ25lZCByZXRyeVRpbWVPdXRWYWx1ZU1z
ID0gMjAwOworfQorCitVMmZBdXRoZW50aWNhdG9yOjpVMmZBdXRoZW50aWNhdG9yKHN0ZDo6dW5p
cXVlX3B0cjxDdGFwRHJpdmVyPiYmIGRyaXZlcikKKyAgICA6IG1fZHJpdmVyKFdURk1vdmUoZHJp
dmVyKSkKKyAgICAsIG1fcmV0cnlUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZVMmZBdXRo
ZW50aWNhdG9yOjpyZXRyeUxhc3RDb21tYW5kKQoreworICAgIC8vIEZJWE1FKDE5MTUyMCk6IFdl
IG5lZWQgYSB3YXkgdG8gY29udmVydCBzdGQ6OnVuaXF1ZV9wdHIgdG8gVW5pcXVlUmVmLgorICAg
IEFTU0VSVChtX2RyaXZlcik7Cit9CisKK3ZvaWQgVTJmQXV0aGVudGljYXRvcjo6bWFrZUNyZWRl
bnRpYWwoKQoreworICAgIGlmICghaXNDb252ZXJ0aWJsZVRvVTJmUmVnaXN0ZXJDb21tYW5kKHJl
cXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zKSkgeworICAgICAgICByZWNlaXZlUmVzcG9uZChF
eGNlcHRpb25EYXRhIHsgTm90U3VwcG9ydGVkRXJyb3IsICJDYW5ub3QgY29udmVydCB0aGUgcmVx
dWVzdCB0byBVMkYgY29tbWFuZC4iX3MgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCFyZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMuaXNF
bXB0eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9uZXh0TGlzdEluZGV4KTsKKyAgICAgICAgY2hl
Y2tFeGNsdWRlTGlzdChtX25leHRMaXN0SW5kZXgrKyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaXNzdWVSZWdpc3RlckNvbW1hbmQoKTsKK30KKwordm9pZCBVMmZBdXRoZW50aWNhdG9y
OjpjaGVja0V4Y2x1ZGVMaXN0KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPj0gcmVx
dWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSkgewor
ICAgICAgICBpc3N1ZVJlZ2lzdGVyQ29tbWFuZCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmQ2hlY2tPbmx5U2lnbkNvbW1hbmQocmVxdWVz
dERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucywgcmVxdWVzdERhdGEo
KS5jcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzW2luZGV4XSk7CisgICAgQVNTRVJU
KHUyZkNtZCk7CisgICAgaXNzdWVOZXdDb21tYW5kKFdURk1vdmUoKnUyZkNtZCksIENvbW1hbmRU
eXBlOjpDaGVja09ubHlDb21tYW5kKTsKK30KKwordm9pZCBVMmZBdXRoZW50aWNhdG9yOjppc3N1
ZVJlZ2lzdGVyQ29tbWFuZCgpCit7CisgICAgYXV0byB1MmZDbWQgPSBjb252ZXJ0VG9VMmZSZWdp
c3RlckNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0
aW9ucyk7CisgICAgQVNTRVJUKHUyZkNtZCk7CisgICAgaXNzdWVOZXdDb21tYW5kKFdURk1vdmUo
KnUyZkNtZCksIENvbW1hbmRUeXBlOjpSZWdpc3RlckNvbW1hbmQpOworfQorCit2b2lkIFUyZkF1
dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCit7CisgICAgaWYgKCFpc0NvbnZlcnRpYmxlVG9V
MmZTaWduQ29tbWFuZChyZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zKSkgeworICAgICAgICBy
ZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgTm90U3VwcG9ydGVkRXJyb3IsICJDYW5ub3Qg
Y29udmVydCB0aGUgcmVxdWVzdCB0byBVMkYgY29tbWFuZC4iX3MgfSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgQVNTRVJUKCFtX25leHRMaXN0SW5kZXgpOworICAgIGlzc3VlU2lnbkNv
bW1hbmQobV9uZXh0TGlzdEluZGV4KyspOworfQorCit2b2lkIFUyZkF1dGhlbnRpY2F0b3I6Omlz
c3VlU2lnbkNvbW1hbmQoc2l6ZV90IGluZGV4KQoreworICAgIGlmIChpbmRleCA+PSByZXF1ZXN0
RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpKSB7CisgICAgICAg
IHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBOb3RBbGxvd2VkRXJyb3IsICJObyBjcmVk
ZW50aWFscyBmcm9tIHRoZSBhbGxvd0NyZWRlbnRpYWxzIGxpc3QgaXMgZm91bmQgaW4gdGhlIGF1
dGhlbnRpY2F0b3IuIl9zIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGF1dG8gdTJm
Q21kID0gY29udmVydFRvVTJmU2lnbkNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0
RGF0YSgpLnJlcXVlc3RPcHRpb25zLCByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93
Q3JlZGVudGlhbHNbaW5kZXhdLmlkVmVjdG9yLCBtX2lzQXBwSWQpOworICAgIEFTU0VSVCh1MmZD
bWQpOworICAgIGlzc3VlTmV3Q29tbWFuZChXVEZNb3ZlKCp1MmZDbWQpLCBDb21tYW5kVHlwZTo6
U2lnbkNvbW1hbmQpOworfQorCit2b2lkIFUyZkF1dGhlbnRpY2F0b3I6Omlzc3VlTmV3Q29tbWFu
ZChWZWN0b3I8dWludDhfdD4mJiBjb21tYW5kLCBDb21tYW5kVHlwZSB0eXBlKQoreworICAgIG1f
bGFzdENvbW1hbmQgPSBXVEZNb3ZlKGNvbW1hbmQpOworICAgIG1fbGFzdENvbW1hbmRUeXBlID0g
dHlwZTsKKyAgICBpc3N1ZUNvbW1hbmQobV9sYXN0Q29tbWFuZCwgbV9sYXN0Q29tbWFuZFR5cGUp
OworfQorCit2b2lkIFUyZkF1dGhlbnRpY2F0b3I6Omlzc3VlQ29tbWFuZChjb25zdCBWZWN0b3I8
dWludDhfdD4mIGNvbW1hbmQsIENvbW1hbmRUeXBlIHR5cGUpCit7CisgICAgbV9kcml2ZXItPnRy
YW5zYWN0KFZlY3Rvcjx1aW50OF90Pihjb21tYW5kKSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCB0eXBlXShWZWN0b3I8dWludDhfdD4mJiBkYXRhKSB7CisgICAgICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5yZXNwb25zZVJlY2VpdmVkKFdURk1vdmUoZGF0YSks
IHR5cGUpOworICAgIH0pOworfQorCit2b2lkIFUyZkF1dGhlbnRpY2F0b3I6OnJlc3BvbnNlUmVj
ZWl2ZWQoVmVjdG9yPHVpbnQ4X3Q+JiYgcmVzcG9uc2UsIENvbW1hbmRUeXBlIHR5cGUpCit7Cisg
ICAgYXV0byBhcGR1UmVzcG9uc2UgPSBBcGR1UmVzcG9uc2U6OmNyZWF0ZUZyb21NZXNzYWdlKHJl
c3BvbnNlKTsKKyAgICBpZiAoIWFwZHVSZXNwb25zZSkgeworICAgICAgICByZWNlaXZlUmVzcG9u
ZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9yLCAiQ291bGRuJ3QgcGFyc2UgdGhlIEFQRFUg
cmVzcG9uc2UuIl9zIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBDb21tYW5kVHlwZTo6UmVnaXN0ZXJDb21tYW5kOgorICAgICAgICBj
b250aW51ZVJlZ2lzdGVyQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChXVEZNb3ZlKCphcGR1
UmVzcG9uc2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tbWFuZFR5cGU6OkNoZWNr
T25seUNvbW1hbmQ6CisgICAgICAgIGNvbnRpbnVlQ2hlY2tPbmx5Q29tbWFuZEFmdGVyUmVzcG9u
c2VSZWNlaXZlZChXVEZNb3ZlKCphcGR1UmVzcG9uc2UpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ29tbWFuZFR5cGU6OkJvZ3VzQ29tbWFuZDoKKyAgICAgICAgY29udGludWVCb2d1c0Nv
bW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoV1RGTW92ZSgqYXBkdVJlc3BvbnNlKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENvbW1hbmRUeXBlOjpTaWduQ29tbWFuZDoKKyAgICAgICAg
Y29udGludWVTaWduQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChXVEZNb3ZlKCphcGR1UmVz
cG9uc2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBVMmZBdXRoZW50aWNhdG9yOjpjb250aW51ZVJlZ2lzdGVyQ29tbWFuZEFm
dGVyUmVzcG9uc2VSZWNlaXZlZChBcGR1UmVzcG9uc2UmJiBhcGR1UmVzcG9uc2UpCit7CisgICAg
c3dpdGNoIChhcGR1UmVzcG9uc2Uuc3RhdHVzKCkpIHsKKyAgICBjYXNlIEFwZHVSZXNwb25zZTo6
U3RhdHVzOjpTV19OT19FUlJPUjogeworICAgICAgICBhdXRvIHJlc3BvbnNlID0gcmVhZFUyZlJl
Z2lzdGVyUmVzcG9uc2UocmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMucnAuaWQsIGFwZHVS
ZXNwb25zZS5kYXRhKCksIHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zLmF0dGVzdGF0aW9u
KTsKKyAgICAgICAgaWYgKCFyZXNwb25zZSkgeworICAgICAgICAgICAgcmVjZWl2ZVJlc3BvbmQo
RXhjZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwgIkNvdWxkbid0IHBhcnNlIHRoZSBVMkYgcmVn
aXN0ZXIgcmVzcG9uc2UuIl9zIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHJlY2VpdmVSZXNwb25kKFdURk1vdmUoKnJlc3BvbnNlKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1dfQ09ORElUSU9OU19O
T1RfU0FUSVNGSUVEOgorICAgICAgICAvLyBQb2xsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB0ZXN0
IG9mIHVzZXIgcHJlc2VuY2UuCisgICAgICAgIG1fcmV0cnlUaW1lci5zdGFydE9uZVNob3QoU2Vj
b25kczo6ZnJvbU1pbGxpc2Vjb25kcyhyZXRyeVRpbWVPdXRWYWx1ZU1zKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRh
IHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGludGVybmFsIGVycm9yLiBFcnJv
ciBjb2RlOiAiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYXBkdVJlc3BvbnNlLnN0YXR1cygpKSkg
fSk7CisgICAgfQorfQorCit2b2lkIFUyZkF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlQ2hlY2tPbmx5
Q29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChBcGR1UmVzcG9uc2UmJiBhcGR1UmVzcG9uc2Up
Cit7CisgICAgc3dpdGNoIChhcGR1UmVzcG9uc2Uuc3RhdHVzKCkpIHsKKyAgICBjYXNlIEFwZHVS
ZXNwb25zZTo6U3RhdHVzOjpTV19OT19FUlJPUjoKKyAgICBjYXNlIEFwZHVSZXNwb25zZTo6U3Rh
dHVzOjpTV19DT05ESVRJT05TX05PVF9TQVRJU0ZJRUQ6CisgICAgICAgIGlzc3VlTmV3Q29tbWFu
ZChjb25zdHJ1Y3RCb2d1c1UyZlJlZ2lzdHJhdGlvbkNvbW1hbmQoKSwgQ29tbWFuZFR5cGU6OkJv
Z3VzQ29tbWFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICBjaGVj
a0V4Y2x1ZGVMaXN0KG1fbmV4dExpc3RJbmRleCsrKTsKKyAgICB9Cit9CisKK3ZvaWQgVTJmQXV0
aGVudGljYXRvcjo6Y29udGludWVCb2d1c0NvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoQXBk
dVJlc3BvbnNlJiYgYXBkdVJlc3BvbnNlKQoreworICAgIHN3aXRjaCAoYXBkdVJlc3BvbnNlLnN0
YXR1cygpKSB7CisgICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1dfTk9fRVJST1I6Cisg
ICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBJbnZhbGlkU3RhdGVFcnJvciwg
IkF0IGxlYXN0IG9uZSBjcmVkZW50aWFsIG1hdGNoZXMgYW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVD
cmVkZW50aWFscyBsaXN0IGluIHRoZSBhdXRoZW50aWNhdG9yLiJfcyB9KTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNXX0NPTkRJVElPTlNfTk9UX1NB
VElTRklFRDoKKyAgICAgICAgLy8gUG9sbGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdGVzdCBvZiB1
c2VyIHByZXNlbmNlLgorICAgICAgICBtX3JldHJ5VGltZXIuc3RhcnRPbmVTaG90KFNlY29uZHM6
OmZyb21NaWxsaXNlY29uZHMocmV0cnlUaW1lT3V0VmFsdWVNcykpOworICAgICAgICByZXR1cm47
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IFVu
a25vd25FcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBpbnRlcm5hbCBlcnJvci4gRXJyb3IgY29k
ZTogIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFwZHVSZXNwb25zZS5zdGF0dXMoKSkpIH0pOwor
ICAgIH0KK30KKwordm9pZCBVMmZBdXRoZW50aWNhdG9yOjpjb250aW51ZVNpZ25Db21tYW5kQWZ0
ZXJSZXNwb25zZVJlY2VpdmVkKEFwZHVSZXNwb25zZSYmIGFwZHVSZXNwb25zZSkKK3sKKyAgICBz
d2l0Y2ggKGFwZHVSZXNwb25zZS5zdGF0dXMoKSkgeworICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpT
dGF0dXM6OlNXX05PX0VSUk9SOiB7CisgICAgICAgIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRp
YWxEYXRhPiByZXNwb25zZTsKKyAgICAgICAgaWYgKG1faXNBcHBJZCkgeworICAgICAgICAgICAg
QVNTRVJUKHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9ucyAmJiAhcmVxdWVz
dERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7CisgICAg
ICAgICAgICByZXNwb25zZSA9IHJlYWRVMmZTaWduUmVzcG9uc2UocmVxdWVzdERhdGEoKS5yZXF1
ZXN0T3B0aW9ucy5leHRlbnNpb25zLT5hcHBpZCwgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9u
cy5hbGxvd0NyZWRlbnRpYWxzW21fbmV4dExpc3RJbmRleCAtIDFdLmlkVmVjdG9yLCBhcGR1UmVz
cG9uc2UuZGF0YSgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXNwb25zZSA9IHJl
YWRVMmZTaWduUmVzcG9uc2UocmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5ycElkLCByZXF1
ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHNbbV9uZXh0TGlzdEluZGV4
IC0gMV0uaWRWZWN0b3IsIGFwZHVSZXNwb25zZS5kYXRhKCkpOworICAgICAgICBpZiAoIXJlc3Bv
bnNlKSB7CisgICAgICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93
bkVycm9yLCAiQ291bGRuJ3QgcGFyc2UgdGhlIFUyRiBzaWduIHJlc3BvbnNlLiJfcyB9KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9pc0FwcElkKQorICAg
ICAgICAgICAgcmVzcG9uc2UtPmFwcGlkID0gbV9pc0FwcElkOworCisgICAgICAgIHJlY2VpdmVS
ZXNwb25kKFdURk1vdmUoKnJlc3BvbnNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1dfQ09ORElUSU9OU19OT1RfU0FUSVNGSUVEOgor
ICAgICAgICAvLyBQb2xsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB0ZXN0IG9mIHVzZXIgcHJlc2Vu
Y2UuCisgICAgICAgIG1fcmV0cnlUaW1lci5zdGFydE9uZVNob3QoU2Vjb25kczo6ZnJvbU1pbGxp
c2Vjb25kcyhyZXRyeVRpbWVPdXRWYWx1ZU1zKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19XUk9OR19EQVRBOgorICAgICAgICBpZiAocmVxdWVz
dERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zICYmICFyZXF1ZXN0RGF0YSgpLnJlcXVl
c3RPcHRpb25zLmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBpZiAo
IW1faXNBcHBJZCkgeworICAgICAgICAgICAgICAgIG1faXNBcHBJZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgaXNzdWVTaWduQ29tbWFuZChtX25leHRMaXN0SW5kZXggLSAxKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2lzQXBwSWQgPSBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpc3N1ZVNpZ25Db21tYW5kKG1fbmV4dExpc3RJbmRl
eCsrKTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlzc3VlU2lnbkNv
bW1hbmQobV9uZXh0TGlzdEluZGV4KyspOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKSAmJiBQTEFURk9STShNQUMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1Uy
ZkF1dGhlbnRpY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL2ZpZG8vVTJmQXV0aGVudGljYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhNDc3MzY4NmY2MDdjMGJh
NDBkY2NjN2Y1ZGY4MTEwNWM1NTU5OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1UyZkF1dGhlbnRpY2F0b3IuaApAQCAt
MCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VC
X0FVVEhOKSAmJiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdG9yLmgiCisj
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIGFwZHUgeworY2xhc3MgQXBkdVJl
c3BvbnNlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQ3RhcERyaXZlcjsKKwor
Y2xhc3MgVTJmQXV0aGVudGljYXRvciBmaW5hbCA6IHB1YmxpYyBBdXRoZW50aWNhdG9yIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFUyZkF1dGhlbnRpY2F0b3I+IGNyZWF0ZShzdGQ6OnVuaXF1
ZV9wdHI8Q3RhcERyaXZlcj4mJiBkcml2ZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBVMmZBdXRoZW50aWNhdG9yKFdURk1vdmUoZHJpdmVyKSkpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBVMmZBdXRoZW50aWNhdG9yKHN0ZDo6dW5pcXVlX3B0cjxDdGFw
RHJpdmVyPiYmKTsKKworICAgIHZvaWQgbWFrZUNyZWRlbnRpYWwoKSBmaW5hbDsKKyAgICB2b2lk
IGNoZWNrRXhjbHVkZUxpc3Qoc2l6ZV90IGluZGV4KTsKKyAgICB2b2lkIGlzc3VlUmVnaXN0ZXJD
b21tYW5kKCk7CisgICAgdm9pZCBnZXRBc3NlcnRpb24oKSBmaW5hbDsKKyAgICB2b2lkIGlzc3Vl
U2lnbkNvbW1hbmQoc2l6ZV90IGluZGV4KTsKKworICAgIGVudW0gY2xhc3MgQ29tbWFuZFR5cGUg
OiB1aW50OF90IHsKKyAgICAgICAgUmVnaXN0ZXJDb21tYW5kLAorICAgICAgICBDaGVja09ubHlD
b21tYW5kLAorICAgICAgICBCb2d1c0NvbW1hbmQsCisgICAgICAgIFNpZ25Db21tYW5kCisgICAg
fTsKKyAgICB2b2lkIGlzc3VlTmV3Q29tbWFuZChWZWN0b3I8dWludDhfdD4mJiBjb21tYW5kLCBD
b21tYW5kVHlwZSk7CisgICAgdm9pZCByZXRyeUxhc3RDb21tYW5kKCkgeyBpc3N1ZUNvbW1hbmQo
bV9sYXN0Q29tbWFuZCwgbV9sYXN0Q29tbWFuZFR5cGUpOyB9CisgICAgdm9pZCBpc3N1ZUNvbW1h
bmQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjb21tYW5kLCBDb21tYW5kVHlwZSk7CisgICAgdm9p
ZCByZXNwb25zZVJlY2VpdmVkKFZlY3Rvcjx1aW50OF90PiYmIHJlc3BvbnNlLCBDb21tYW5kVHlw
ZSk7CisgICAgdm9pZCBjb250aW51ZVJlZ2lzdGVyQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZl
ZChhcGR1OjpBcGR1UmVzcG9uc2UmJik7CisgICAgdm9pZCBjb250aW51ZUNoZWNrT25seUNvbW1h
bmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoYXBkdTo6QXBkdVJlc3BvbnNlJiYpOworICAgIHZvaWQg
Y29udGludWVCb2d1c0NvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoYXBkdTo6QXBkdVJlc3Bv
bnNlJiYpOworICAgIHZvaWQgY29udGludWVTaWduQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZl
ZChhcGR1OjpBcGR1UmVzcG9uc2UmJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3RhcERyaXZl
cj4gbV9kcml2ZXI7CisgICAgUnVuTG9vcDo6VGltZXI8VTJmQXV0aGVudGljYXRvcj4gbV9yZXRy
eVRpbWVyOworICAgIFZlY3Rvcjx1aW50OF90PiBtX2xhc3RDb21tYW5kOworICAgIENvbW1hbmRU
eXBlIG1fbGFzdENvbW1hbmRUeXBlOworICAgIHNpemVfdCBtX25leHRMaXN0SW5kZXggeyAwIH07
CisgICAgYm9vbCBtX2lzQXBwSWQgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKSAmJiBQTEFURk9STShNQUMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1Uy
ZkhpZEF1dGhlbnRpY2F0b3IuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVu
dGljYXRpb24vZmlkby9VMmZIaWRBdXRoZW50aWNhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWNlZWMwZjdlODdmNzIyZGMwZmM4ZDg0ZWFhYzdhM2JmOWI0ZTUxYi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1UyZkhpZEF1dGhlbnRpY2F0b3IuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVTJmSGlkQXV0aGVudGljYXRvci5oIgotCi0jaWYgRU5BQkxF
KFdFQl9BVVRITikgJiYgUExBVEZPUk0oTUFDKQotCi0jaW5jbHVkZSAiQ3RhcEhpZERyaXZlci5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvQXBkdVJlc3BvbnNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25EYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9VMmZDb21tYW5kQ29uc3RydWN0b3Iu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1UyZlJlc3BvbnNlQ29udmVydGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJl
cnMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVz
aW5nIG5hbWVzcGFjZSBhcGR1OwotdXNpbmcgbmFtZXNwYWNlIGZpZG87Ci0KLW5hbWVzcGFjZSB7
Ci1jb25zdCB1bnNpZ25lZCByZXRyeVRpbWVPdXRWYWx1ZU1zID0gMjAwOwotfQotCi1VMmZIaWRB
dXRoZW50aWNhdG9yOjpVMmZIaWRBdXRoZW50aWNhdG9yKHN0ZDo6dW5pcXVlX3B0cjxDdGFwSGlk
RHJpdmVyPiYmIGRyaXZlcikKLSAgICA6IG1fZHJpdmVyKFdURk1vdmUoZHJpdmVyKSkKLSAgICAs
IG1fcmV0cnlUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZVMmZIaWRBdXRoZW50aWNhdG9y
OjpyZXRyeUxhc3RDb21tYW5kKQotewotICAgIC8vIEZJWE1FKDE5MTUyMCk6IFdlIG5lZWQgYSB3
YXkgdG8gY29udmVydCBzdGQ6OnVuaXF1ZV9wdHIgdG8gVW5pcXVlUmVmLgotICAgIEFTU0VSVCht
X2RyaXZlcik7Ci19Ci0KLXZvaWQgVTJmSGlkQXV0aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwo
KQotewotICAgIGlmICghaXNDb252ZXJ0aWJsZVRvVTJmUmVnaXN0ZXJDb21tYW5kKHJlcXVlc3RE
YXRhKCkuY3JlYXRpb25PcHRpb25zKSkgewotICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRp
b25EYXRhIHsgTm90U3VwcG9ydGVkRXJyb3IsICJDYW5ub3QgY29udmVydCB0aGUgcmVxdWVzdCB0
byBVMkYgY29tbWFuZC4iX3MgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFy
ZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIEFTU0VSVCghbV9uZXh0TGlzdEluZGV4KTsKLSAgICAgICAgY2hlY2tFeGNs
dWRlTGlzdChtX25leHRMaXN0SW5kZXgrKyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aXNzdWVSZWdpc3RlckNvbW1hbmQoKTsKLX0KLQotdm9pZCBVMmZIaWRBdXRoZW50aWNhdG9yOjpj
aGVja0V4Y2x1ZGVMaXN0KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gcmVxdWVz
dERhdGEoKS5jcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzLnNpemUoKSkgewotICAg
ICAgICBpc3N1ZVJlZ2lzdGVyQ29tbWFuZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmQ2hlY2tPbmx5U2lnbkNvbW1hbmQocmVxdWVzdERh
dGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucywgcmVxdWVzdERhdGEoKS5j
cmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzW2luZGV4XSk7Ci0gICAgQVNTRVJUKHUy
ZkNtZCk7Ci0gICAgaXNzdWVOZXdDb21tYW5kKFdURk1vdmUoKnUyZkNtZCksIENvbW1hbmRUeXBl
OjpDaGVja09ubHlDb21tYW5kKTsKLX0KLQotdm9pZCBVMmZIaWRBdXRoZW50aWNhdG9yOjppc3N1
ZVJlZ2lzdGVyQ29tbWFuZCgpCi17Ci0gICAgYXV0byB1MmZDbWQgPSBjb252ZXJ0VG9VMmZSZWdp
c3RlckNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0
aW9ucyk7Ci0gICAgQVNTRVJUKHUyZkNtZCk7Ci0gICAgaXNzdWVOZXdDb21tYW5kKFdURk1vdmUo
KnUyZkNtZCksIENvbW1hbmRUeXBlOjpSZWdpc3RlckNvbW1hbmQpOwotfQotCi12b2lkIFUyZkhp
ZEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCi17Ci0gICAgaWYgKCFpc0NvbnZlcnRpYmxl
VG9VMmZTaWduQ29tbWFuZChyZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zKSkgewotICAgICAg
ICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgTm90U3VwcG9ydGVkRXJyb3IsICJDYW5u
b3QgY29udmVydCB0aGUgcmVxdWVzdCB0byBVMkYgY29tbWFuZC4iX3MgfSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKCFtX25leHRMaXN0SW5kZXgpOwotICAgIGlzc3VlU2ln
bkNvbW1hbmQobV9uZXh0TGlzdEluZGV4KyspOwotfQotCi12b2lkIFUyZkhpZEF1dGhlbnRpY2F0
b3I6Omlzc3VlU2lnbkNvbW1hbmQoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBy
ZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHMuc2l6ZSgpKSB7Ci0g
ICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBOb3RBbGxvd2VkRXJyb3IsICJO
byBjcmVkZW50aWFscyBmcm9tIHRoZSBhbGxvd0NyZWRlbnRpYWxzIGxpc3QgaXMgZm91bmQgaW4g
dGhlIGF1dGhlbnRpY2F0b3IuIl9zIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGF1
dG8gdTJmQ21kID0gY29udmVydFRvVTJmU2lnbkNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNoLCBy
ZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLCByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25z
LmFsbG93Q3JlZGVudGlhbHNbaW5kZXhdLmlkVmVjdG9yLCBtX2lzQXBwSWQpOwotICAgIEFTU0VS
VCh1MmZDbWQpOwotICAgIGlzc3VlTmV3Q29tbWFuZChXVEZNb3ZlKCp1MmZDbWQpLCBDb21tYW5k
VHlwZTo6U2lnbkNvbW1hbmQpOwotfQotCi12b2lkIFUyZkhpZEF1dGhlbnRpY2F0b3I6Omlzc3Vl
TmV3Q29tbWFuZChWZWN0b3I8dWludDhfdD4mJiBjb21tYW5kLCBDb21tYW5kVHlwZSB0eXBlKQot
ewotICAgIG1fbGFzdENvbW1hbmQgPSBXVEZNb3ZlKGNvbW1hbmQpOwotICAgIG1fbGFzdENvbW1h
bmRUeXBlID0gdHlwZTsKLSAgICBpc3N1ZUNvbW1hbmQobV9sYXN0Q29tbWFuZCwgbV9sYXN0Q29t
bWFuZFR5cGUpOwotfQotCi12b2lkIFUyZkhpZEF1dGhlbnRpY2F0b3I6Omlzc3VlQ29tbWFuZChj
b25zdCBWZWN0b3I8dWludDhfdD4mIGNvbW1hbmQsIENvbW1hbmRUeXBlIHR5cGUpCi17Ci0gICAg
bV9kcml2ZXItPnRyYW5zYWN0KFZlY3Rvcjx1aW50OF90Pihjb21tYW5kKSwgW3dlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlXShWZWN0b3I8dWludDhfdD4mJiBkYXRhKSB7Ci0gICAg
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdlYWtUaGlzLT5yZXNwb25zZVJlY2VpdmVkKFdU
Rk1vdmUoZGF0YSksIHR5cGUpOwotICAgIH0pOwotfQotCi12b2lkIFUyZkhpZEF1dGhlbnRpY2F0
b3I6OnJlc3BvbnNlUmVjZWl2ZWQoVmVjdG9yPHVpbnQ4X3Q+JiYgcmVzcG9uc2UsIENvbW1hbmRU
eXBlIHR5cGUpCi17Ci0gICAgYXV0byBhcGR1UmVzcG9uc2UgPSBBcGR1UmVzcG9uc2U6OmNyZWF0
ZUZyb21NZXNzYWdlKHJlc3BvbnNlKTsKLSAgICBpZiAoIWFwZHVSZXNwb25zZSkgewotICAgICAg
ICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9yLCAiQ291bGRuJ3Qg
cGFyc2UgdGhlIEFQRFUgcmVzcG9uc2UuIl9zIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDb21tYW5kVHlwZTo6UmVnaXN0ZXJDb21t
YW5kOgotICAgICAgICBjb250aW51ZVJlZ2lzdGVyQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZl
ZChXVEZNb3ZlKCphcGR1UmVzcG9uc2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29t
bWFuZFR5cGU6OkNoZWNrT25seUNvbW1hbmQ6Ci0gICAgICAgIGNvbnRpbnVlQ2hlY2tPbmx5Q29t
bWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChXVEZNb3ZlKCphcGR1UmVzcG9uc2UpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgQ29tbWFuZFR5cGU6OkJvZ3VzQ29tbWFuZDoKLSAgICAgICAg
Y29udGludWVCb2d1c0NvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoV1RGTW92ZSgqYXBkdVJl
c3BvbnNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENvbW1hbmRUeXBlOjpTaWduQ29t
bWFuZDoKLSAgICAgICAgY29udGludWVTaWduQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChX
VEZNb3ZlKCphcGR1UmVzcG9uc2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBVMmZIaWRBdXRoZW50aWNhdG9yOjpjb250aW51
ZVJlZ2lzdGVyQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChBcGR1UmVzcG9uc2UmJiBhcGR1
UmVzcG9uc2UpCi17Ci0gICAgc3dpdGNoIChhcGR1UmVzcG9uc2Uuc3RhdHVzKCkpIHsKLSAgICBj
YXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19OT19FUlJPUjogewotICAgICAgICBhdXRvIHJl
c3BvbnNlID0gcmVhZFUyZlJlZ2lzdGVyUmVzcG9uc2UocmVxdWVzdERhdGEoKS5jcmVhdGlvbk9w
dGlvbnMucnAuaWQsIGFwZHVSZXNwb25zZS5kYXRhKCksIHJlcXVlc3REYXRhKCkuY3JlYXRpb25P
cHRpb25zLmF0dGVzdGF0aW9uKTsKLSAgICAgICAgaWYgKCFyZXNwb25zZSkgewotICAgICAgICAg
ICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwgIkNvdWxkbid0
IHBhcnNlIHRoZSBVMkYgcmVnaXN0ZXIgcmVzcG9uc2UuIl9zIH0pOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJlY2VpdmVSZXNwb25kKFdURk1vdmUoKnJlc3BvbnNl
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1
czo6U1dfQ09ORElUSU9OU19OT1RfU0FUSVNGSUVEOgotICAgICAgICAvLyBQb2xsaW5nIGlzIHJl
cXVpcmVkIGR1cmluZyB0ZXN0IG9mIHVzZXIgcHJlc2VuY2UuCi0gICAgICAgIG1fcmV0cnlUaW1l
ci5zdGFydE9uZVNob3QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhyZXRyeVRpbWVPdXRWYWx1
ZU1zKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICByZWNlaXZlUmVz
cG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGlu
dGVybmFsIGVycm9yLiBFcnJvciBjb2RlOiAiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYXBkdVJl
c3BvbnNlLnN0YXR1cygpKSkgfSk7Ci0gICAgfQotfQotCi12b2lkIFUyZkhpZEF1dGhlbnRpY2F0
b3I6OmNvbnRpbnVlQ2hlY2tPbmx5Q29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChBcGR1UmVz
cG9uc2UmJiBhcGR1UmVzcG9uc2UpCi17Ci0gICAgc3dpdGNoIChhcGR1UmVzcG9uc2Uuc3RhdHVz
KCkpIHsKLSAgICBjYXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19OT19FUlJPUjoKLSAgICBj
YXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19DT05ESVRJT05TX05PVF9TQVRJU0ZJRUQ6Ci0g
ICAgICAgIGlzc3VlTmV3Q29tbWFuZChjb25zdHJ1Y3RCb2d1c1UyZlJlZ2lzdHJhdGlvbkNvbW1h
bmQoKSwgQ29tbWFuZFR5cGU6OkJvZ3VzQ29tbWFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBjaGVja0V4Y2x1ZGVMaXN0KG1fbmV4dExpc3RJbmRleCsrKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgVTJmSGlkQXV0aGVudGljYXRvcjo6Y29udGludWVCb2d1c0NvbW1hbmRB
ZnRlclJlc3BvbnNlUmVjZWl2ZWQoQXBkdVJlc3BvbnNlJiYgYXBkdVJlc3BvbnNlKQotewotICAg
IHN3aXRjaCAoYXBkdVJlc3BvbnNlLnN0YXR1cygpKSB7Ci0gICAgY2FzZSBBcGR1UmVzcG9uc2U6
OlN0YXR1czo6U1dfTk9fRVJST1I6Ci0gICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRh
dGEgeyBJbnZhbGlkU3RhdGVFcnJvciwgIkF0IGxlYXN0IG9uZSBjcmVkZW50aWFsIG1hdGNoZXMg
YW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRoZSBhdXRoZW50aWNh
dG9yLiJfcyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0
dXM6OlNXX0NPTkRJVElPTlNfTk9UX1NBVElTRklFRDoKLSAgICAgICAgLy8gUG9sbGluZyBpcyBy
ZXF1aXJlZCBkdXJpbmcgdGVzdCBvZiB1c2VyIHByZXNlbmNlLgotICAgICAgICBtX3JldHJ5VGlt
ZXIuc3RhcnRPbmVTaG90KFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMocmV0cnlUaW1lT3V0VmFs
dWVNcykpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmVjZWl2ZVJl
c3BvbmQoRXhjZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBp
bnRlcm5hbCBlcnJvci4gRXJyb3IgY29kZTogIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFwZHVS
ZXNwb25zZS5zdGF0dXMoKSkpIH0pOwotICAgIH0KLX0KLQotdm9pZCBVMmZIaWRBdXRoZW50aWNh
dG9yOjpjb250aW51ZVNpZ25Db21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKEFwZHVSZXNwb25z
ZSYmIGFwZHVSZXNwb25zZSkKLXsKLSAgICBzd2l0Y2ggKGFwZHVSZXNwb25zZS5zdGF0dXMoKSkg
ewotICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNXX05PX0VSUk9SOiB7Ci0gICAgICAg
IE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxEYXRhPiByZXNwb25zZTsKLSAgICAgICAgaWYg
KG1faXNBcHBJZCkgewotICAgICAgICAgICAgQVNTRVJUKHJlcXVlc3REYXRhKCkucmVxdWVzdE9w
dGlvbnMuZXh0ZW5zaW9ucyAmJiAhcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNp
b25zLT5hcHBpZC5pc051bGwoKSk7Ci0gICAgICAgICAgICByZXNwb25zZSA9IHJlYWRVMmZTaWdu
UmVzcG9uc2UocmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zLT5hcHBpZCwg
cmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzW21fbmV4dExpc3RJ
bmRleCAtIDFdLmlkVmVjdG9yLCBhcGR1UmVzcG9uc2UuZGF0YSgpKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICByZXNwb25zZSA9IHJlYWRVMmZTaWduUmVzcG9uc2UocmVxdWVzdERhdGEo
KS5yZXF1ZXN0T3B0aW9ucy5ycElkLCByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93
Q3JlZGVudGlhbHNbbV9uZXh0TGlzdEluZGV4IC0gMV0uaWRWZWN0b3IsIGFwZHVSZXNwb25zZS5k
YXRhKCkpOwotICAgICAgICBpZiAoIXJlc3BvbnNlKSB7Ci0gICAgICAgICAgICByZWNlaXZlUmVz
cG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9yLCAiQ291bGRuJ3QgcGFyc2UgdGhlIFUy
RiBzaWduIHJlc3BvbnNlLiJfcyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBpZiAobV9pc0FwcElkKQotICAgICAgICAgICAgcmVzcG9uc2UtPmFwcGlkID0gbV9p
c0FwcElkOwotCi0gICAgICAgIHJlY2VpdmVSZXNwb25kKFdURk1vdmUoKnJlc3BvbnNlKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1df
Q09ORElUSU9OU19OT1RfU0FUSVNGSUVEOgotICAgICAgICAvLyBQb2xsaW5nIGlzIHJlcXVpcmVk
IGR1cmluZyB0ZXN0IG9mIHVzZXIgcHJlc2VuY2UuCi0gICAgICAgIG1fcmV0cnlUaW1lci5zdGFy
dE9uZVNob3QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhyZXRyeVRpbWVPdXRWYWx1ZU1zKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19XUk9O
R19EQVRBOgotICAgICAgICBpZiAocmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNp
b25zICYmICFyZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmV4dGVuc2lvbnMtPmFwcGlkLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW1faXNBcHBJZCkgewotICAgICAgICAgICAgICAg
IG1faXNBcHBJZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaXNzdWVTaWduQ29tbWFuZChtX25l
eHRMaXN0SW5kZXggLSAxKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX2lzQXBwSWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpc3N1
ZVNpZ25Db21tYW5kKG1fbmV4dExpc3RJbmRleCsrKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGlzc3VlU2lnbkNvbW1hbmQobV9uZXh0TGlzdEluZGV4KyspOwotICAg
IH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
VEhOKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1UyZkhpZEF1dGhlbnRpY2F0b3IuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vVTJmSGlkQXV0aGVudGljYXRv
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWFiNjY2ZWQzZjljNWEyNmM1Y2Nj
Mzc1MTE4NWZlYzM3ODIzODk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8v
VTJmSGlkQXV0aGVudGljYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQl9BVVRITikgJiYgUExBVEZP
Uk0oTUFDKQotCi0jaW5jbHVkZSAiQXV0aGVudGljYXRvci5oIgotI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+Ci0KLW5hbWVzcGFjZSBhcGR1IHsKLWNsYXNzIEFwZHVSZXNwb25zZTsKLX0KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEN0YXBIaWREcml2ZXI7Ci0KLWNsYXNzIFUyZkhpZEF1
dGhlbnRpY2F0b3IgZmluYWwgOiBwdWJsaWMgQXV0aGVudGljYXRvciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxVMmZIaWRBdXRoZW50aWNhdG9yPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPEN0
YXBIaWREcml2ZXI+JiYgZHJpdmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgVTJmSGlkQXV0aGVudGljYXRvcihXVEZNb3ZlKGRyaXZlcikpKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgZXhwbGljaXQgVTJmSGlkQXV0aGVudGljYXRvcihzdGQ6OnVuaXF1ZV9wdHI8Q3Rh
cEhpZERyaXZlcj4mJik7Ci0KLSAgICB2b2lkIG1ha2VDcmVkZW50aWFsKCkgZmluYWw7Ci0gICAg
dm9pZCBjaGVja0V4Y2x1ZGVMaXN0KHNpemVfdCBpbmRleCk7Ci0gICAgdm9pZCBpc3N1ZVJlZ2lz
dGVyQ29tbWFuZCgpOwotICAgIHZvaWQgZ2V0QXNzZXJ0aW9uKCkgZmluYWw7Ci0gICAgdm9pZCBp
c3N1ZVNpZ25Db21tYW5kKHNpemVfdCBpbmRleCk7Ci0KLSAgICBlbnVtIGNsYXNzIENvbW1hbmRU
eXBlIDogdWludDhfdCB7Ci0gICAgICAgIFJlZ2lzdGVyQ29tbWFuZCwKLSAgICAgICAgQ2hlY2tP
bmx5Q29tbWFuZCwKLSAgICAgICAgQm9ndXNDb21tYW5kLAotICAgICAgICBTaWduQ29tbWFuZAot
ICAgIH07Ci0gICAgdm9pZCBpc3N1ZU5ld0NvbW1hbmQoVmVjdG9yPHVpbnQ4X3Q+JiYgY29tbWFu
ZCwgQ29tbWFuZFR5cGUpOwotICAgIHZvaWQgcmV0cnlMYXN0Q29tbWFuZCgpIHsgaXNzdWVDb21t
YW5kKG1fbGFzdENvbW1hbmQsIG1fbGFzdENvbW1hbmRUeXBlKTsgfQotICAgIHZvaWQgaXNzdWVD
b21tYW5kKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY29tbWFuZCwgQ29tbWFuZFR5cGUpOwotICAg
IHZvaWQgcmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8dWludDhfdD4mJiByZXNwb25zZSwgQ29tbWFu
ZFR5cGUpOwotICAgIHZvaWQgY29udGludWVSZWdpc3RlckNvbW1hbmRBZnRlclJlc3BvbnNlUmVj
ZWl2ZWQoYXBkdTo6QXBkdVJlc3BvbnNlJiYpOwotICAgIHZvaWQgY29udGludWVDaGVja09ubHlD
b21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKGFwZHU6OkFwZHVSZXNwb25zZSYmKTsKLSAgICB2
b2lkIGNvbnRpbnVlQm9ndXNDb21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKGFwZHU6OkFwZHVS
ZXNwb25zZSYmKTsKLSAgICB2b2lkIGNvbnRpbnVlU2lnbkNvbW1hbmRBZnRlclJlc3BvbnNlUmVj
ZWl2ZWQoYXBkdTo6QXBkdVJlc3BvbnNlJiYpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEN0YXBI
aWREcml2ZXI+IG1fZHJpdmVyOwotICAgIFJ1bkxvb3A6OlRpbWVyPFUyZkhpZEF1dGhlbnRpY2F0
b3I+IG1fcmV0cnlUaW1lcjsKLSAgICBWZWN0b3I8dWludDhfdD4gbV9sYXN0Q29tbWFuZDsKLSAg
ICBDb21tYW5kVHlwZSBtX2xhc3RDb21tYW5kVHlwZTsKLSAgICBzaXplX3QgbV9uZXh0TGlzdElu
ZGV4IHsgMCB9OwotICAgIGJvb2wgbV9pc0FwcElkIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikgJiYgUExBVEZPUk0o
TUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggZTE2NjQwNjBjYTkzN2I3ODczYjNlNGU0ZTBiZjQ2ZGU3ZjFmODdmOC4uMzBiMjEzNjMz
MzhlNDNjNmMzMTA5MTRkMzQyOTJjM2ExNWI5YzAxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDM3LDcgKzEwMzcsNyBAQAogCQk1
NzBBQjhGMzIwQUUzQkQ3MDBCOEJFODcgLyogU2VjS2V5UHJveHlTdG9yZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcwQUI4RjIyMEFFM0JENzAwQjhC
RTg3IC8qIFNlY0tleVByb3h5U3RvcmUuaCAqLzsgfTsKIAkJNTcyRkQ0NDMyMjI2NUNFMjAwQTFF
Q0MzIC8qIFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyRkQ0NDEyMjI2NUNFMjAwQTFFQ0MzIC8q
IFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlci5oICovOyB9OwogCQk1NzU5N0VCOTIxODEx
RDlBMDAzN0Y5MjQgLyogQ3RhcEhpZERyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTc1OTdFQjcyMTgxMUQ5QTAwMzdGOTI0IC8qIEN0YXBIaWRE
cml2ZXIuaCAqLzsgfTsKLQkJNTc1OTdFQkQyMTgxODQ5MDAwMzdGOTI0IC8qIEN0YXBIaWRBdXRo
ZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NzU5N0VCQjIxODE4NDhGMDAzN0Y5MjQgLyogQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaCAqLzsg
fTsKKwkJNTc1OTdFQkQyMTgxODQ5MDAwMzdGOTI0IC8qIEN0YXBBdXRoZW50aWNhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzU5N0VCQjIxODE4
NDhGMDAzN0Y5MjQgLyogQ3RhcEF1dGhlbnRpY2F0b3IuaCAqLzsgfTsKIAkJNTc2Q0E5RDcyMkI4
NjIxODAwMzAxNDNDIC8qIFNPQXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0ZEMzE3MzIyQjM1MTQ4MDA4RDBF
OEIgLyogU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzcyRjIwNjIxN0RCRDZBMDA1NkJGMkMgLyog
SGlkU2VydmljZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTc3MkYyMDQyMTdEQkQ2QTAwNTZCRjJDIC8qIEhpZFNlcnZpY2UuaCAqLzsgfTsKIAkJNTc4
REMyOTgyMTU1QTAwMjAwNzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc4REMyOTcyMTU1
QTAwMTAwNzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oICovOyB9OwpAQCAt
MTA2MSw3ICsxMDYxLDcgQEAKIAkJNTdEQ0VEQzMyMTRGMTE0QzAwMTZCODQ3IC8qIE1vY2tMb2Nh
bFNlcnZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3RENFREMxMjE0RjExNEMwMDE2Qjg0NyAvKiBNb2NrTG9jYWxTZXJ2aWNlLmggKi87IH07CiAJ
CTU3RENFREM3MjE0RjE4MzAwMDE2Qjg0NyAvKiBNb2NrTG9jYWxDb25uZWN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0RDRURDNTIxNEYxODMw
MDAxNkI4NDcgLyogTW9ja0xvY2FsQ29ubmVjdGlvbi5oICovOyB9OwogCQk1N0RDRURDQjIxNEY0
RTQyMDAxNkI4NDcgLyogTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0RDRURDOTIxNEY0RTQyMDAxNkI4NDcg
LyogTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmggKi87IH07Ci0JCTU3RUIyRTNBMjFFMTk4M0Uw
MEI4OUNERiAvKiBVMmZIaWRBdXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VCMkUzODIxRTE5ODNFMDBCODlDREYgLyogVTJmSGlk
QXV0aGVudGljYXRvci5oICovOyB9OworCQk1N0VCMkUzQTIxRTE5ODNFMDBCODlDREYgLyogVTJm
QXV0aGVudGljYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTdFQjJFMzgyMUUxOTgzRTAwQjg5Q0RGIC8qIFUyZkF1dGhlbnRpY2F0b3IuaCAqLzsg
fTsKIAkJNTdGRDMxODAyMkIzNTE1ODAwOEQwRThCIC8qIE5hdmlnYXRpb25TT0F1dGhvcml6YXRp
b25TZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1N0ZEMzE3ODIyQjM1MTQ5MDA4RDBFOEIgLyogTmF2aWdhdGlvblNPQXV0aG9yaXphdGlvblNl
c3Npb24uaCAqLzsgfTsKIAkJNTdGRDMxODEyMkIzNTE1QjAwOEQwRThCIC8qIFBvcFVwU09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTdGRDMxNzAyMkIzNTE0ODAwOEQwRThCIC8qIFBvcFVwU09BdXRob3JpemF0aW9u
U2Vzc2lvbi5oICovOyB9OwogCQk1N0ZEMzE4MjIyQjM1MTVFMDA4RDBFOEIgLyogUmVkaXJlY3RT
T0F1dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1N0ZEMzE3NDIyQjM1MTQ5MDA4RDBFOEIgLyogUmVkaXJlY3RTT0F1dGhv
cml6YXRpb25TZXNzaW9uLmggKi87IH07CkBAIC0zNDY2LDYgKzM0NjYsNyBAQAogCQk1NzBBQjhG
MjIwQUUzQkQ3MDBCOEJFODcgLyogU2VjS2V5UHJveHlTdG9yZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
ZWNLZXlQcm94eVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MEFCOTAw
MjBCMjUxNzQwMEI4QkU4NyAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5Q29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5Q29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MEFCOTAzMjBCMjU0MUMwMEI4QkU4
NyAvKiBTZWNLZXlQcm94eVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gU2VjS2V5UHJveHlTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTcwQjczQ0YyMzAyMzZERDAwRkFFQzUzIC8qIEN0YXBEcml2ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ3RhcERyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJGRDQ0MTIy
MjY1Q0UyMDBBMUVDQzMgLyogV2ViVmlld0RpZE1vdmVUb1dpbmRvd09ic2VydmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzUwNzVBNzIwQUI3NjM2MDA2OTNFQTkgLyogV2ViQ3JlZGVudGlh
bE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNyZWRlbnRpYWxNYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3NTBGMzJBMjAzMkQ0RTUwMDM4OTM0NyAvKiBMb2Nh
bEF1dGhlbnRpY2F0aW9uLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gTG9jYWxBdXRoZW50
aWNhdGlvbi5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0xvY2Fs
QXV0aGVudGljYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKQEAgLTM0
NzQsOCArMzQ3NSw4IEBACiAJCTU3NTZERDc2MjE4RDE0QTIwMEQ0RUU2QSAvKiBNb2NrSGlkQ29u
bmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrSGlkQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1NzU2REQ3NzIxOEQxNEEyMDBENEVFNkEgLyogTW9ja0hpZENv
bm5lY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ja0hpZENvbm5lY3Rpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzU5N0VCNzIxODExRDlBMDAzN0Y5MjQgLyog
Q3RhcEhpZERyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdGFwSGlkRHJpdmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU3NTk3RUJCMjE4MTg0OEYwMDM3RjkyNCAvKiBDdGFwSGlk
QXV0aGVudGljYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdGFwSGlkQXV0aGVudGljYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1NzU5N0VCQzIxODE4NDhGMDAzN0Y5MjQgLyog
Q3RhcEhpZEF1dGhlbnRpY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3RhcEhpZEF1dGhl
bnRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzU5N0VCQjIxODE4
NDhGMDAzN0Y5MjQgLyogQ3RhcEF1dGhlbnRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3RhcEF1
dGhlbnRpY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc1OTdFQkMyMTgx
ODQ4RjAwMzdGOTI0IC8qIEN0YXBBdXRoZW50aWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEN0YXBBdXRoZW50aWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc1
OTdFQzAyMTgxOEJFMjAwMzdGOTI0IC8qIEN0YXBIaWREcml2ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3RhcEhpZERyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3NjA4MjhCMjAyOTg1NDIwMDExNjY3OCAvKiBXZWJBdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXV0aGVudGljYXRvckNvb3JkaW5h
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3NjA4MjhDMjAyOTg1NDIwMDEx
NjY3OCAvKiBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTM1MTYsOCArMzUxNyw4IEBACiAJCTU3RENFREM2MjE0RjE4MzAwMDE2Qjg0NyAv
KiBNb2NrTG9jYWxDb25uZWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTW9ja0xvY2Fs
Q29ubmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTdEQ0VEQzkyMTRG
NEU0MjAwMTZCODQ3IC8qIE1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb2NrQXV0aGVudGljYXRvck1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTdEQ0VEQ0QyMTRGNTE2ODAwMTZCODQ3IC8qIE1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2NrQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1N0VCMkUzODIxRTE5
ODNFMDBCODlDREYgLyogVTJmSGlkQXV0aGVudGljYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVMmZI
aWRBdXRoZW50aWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU3RUIyRTM5
MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRBdXRoZW50aWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFUyZkhpZEF1dGhlbnRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1N0VCMkUzODIxRTE5ODNFMDBCODlDREYgLyogVTJmQXV0aGVudGljYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVMmZBdXRoZW50aWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU3RUIyRTM5MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZBdXRoZW50aWNhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFUyZkF1dGhlbnRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1N0ZEMzE3MDIyQjM1MTQ4MDA4RDBFOEIgLyogUG9wVXBTT0F1dGhvcml6YXRp
b25TZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcFVwU09BdXRo
b3JpemF0aW9uU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1N0ZEMzE3
MTIyQjM1MTQ4MDA4RDBFOEIgLyogV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1NPQXV0aG9yaXphdGlvbkRlbGVnYXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3RkQzMTcyMjJCMzUxNDgwMDhEMEU4QiAvKiBT
T0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNjk1NSwxMiArNjk1NiwxMyBAQAogCQk1NzU5N0VCRjIxODE4NEIyMDAzN0Y5MjQg
LyogZmlkbyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
NTc1OTdFQkMyMTgxODQ4RjAwMzdGOTI0IC8qIEN0YXBIaWRBdXRoZW50aWNhdG9yLmNwcCAqLywK
LQkJCQk1NzU5N0VCQjIxODE4NDhGMDAzN0Y5MjQgLyogQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaCAq
LywKKwkJCQk1NzU5N0VCQzIxODE4NDhGMDAzN0Y5MjQgLyogQ3RhcEF1dGhlbnRpY2F0b3IuY3Bw
ICovLAorCQkJCTU3NTk3RUJCMjE4MTg0OEYwMDM3RjkyNCAvKiBDdGFwQXV0aGVudGljYXRvci5o
ICovLAorCQkJCTU3MEI3M0NGMjMwMjM2REQwMEZBRUM1MyAvKiBDdGFwRHJpdmVyLmggKi8sCiAJ
CQkJNTc1OTdFQzAyMTgxOEJFMjAwMzdGOTI0IC8qIEN0YXBIaWREcml2ZXIuY3BwICovLAogCQkJ
CTU3NTk3RUI3MjE4MTFEOUEwMDM3RjkyNCAvKiBDdGFwSGlkRHJpdmVyLmggKi8sCi0JCQkJNTdF
QjJFMzkyMUUxOTgzRTAwQjg5Q0RGIC8qIFUyZkhpZEF1dGhlbnRpY2F0b3IuY3BwICovLAotCQkJ
CTU3RUIyRTM4MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRBdXRoZW50aWNhdG9yLmggKi8sCisJ
CQkJNTdFQjJFMzkyMUUxOTgzRTAwQjg5Q0RGIC8qIFUyZkF1dGhlbnRpY2F0b3IuY3BwICovLAor
CQkJCTU3RUIyRTM4MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZBdXRoZW50aWNhdG9yLmggKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IGZpZG87CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtOTM0
Nyw3ICs5MzQ5LDcgQEAKIAkJCQkzN0MyMUNBRTFFOTk0QzBDMDAyOUQ1RjkgLyogQ29yZVByZWRp
Y3Rpb25TUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCUI4NzhCNjE1MTMzNDI4REMwMDY4ODhFOSAv
KiBDb3JyZWN0aW9uUGFuZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUExRkI2ODI3MUY2RTUxQzEw
MEM0M0Y5RiAvKiBDcmFzaFJlcG9ydGVyQ2xpZW50U1BJLmggaW4gSGVhZGVycyAqLywKLQkJCQk1
NzU5N0VCRDIxODE4NDkwMDAzN0Y5MjQgLyogQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTU3NTk3RUJEMjE4MTg0OTAwMDM3RjkyNCAvKiBDdGFwQXV0aGVudGljYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc1OTdFQjkyMTgxMUQ5QTAwMzdGOTI0IC8qIEN0YXBI
aWREcml2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NUY5MTcxMUM1OTY3NkUwMDI5RTkyRCAv
KiBEYXRhRGV0ZWN0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUM3NTM4MDE4M0JF
NTBGMDA3MkNCMTUgLyogRGF0YVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05Njk1LDcg
Kzk2OTcsNyBAQAogCQkJCTFBRjA1RDg3MTQ2ODgzNDgwMDhCMUU4MSAvKiBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRjgzMzY4NjFGQTEz
OURGMDBDNkUwODAgLyogVG91Y2hCYXJNZW51RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZC
RUI2RTMyMkZCQjIxQTAwMjY5ODY3IC8qIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNTdFQjJFM0EyMUUxOTgzRTAwQjg5Q0RGIC8qIFUyZkhpZEF1
dGhlbnRpY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3RUIyRTNBMjFFMTk4M0UwMEI4OUNE
RiAvKiBVMmZBdXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZFNDM2NjE4QjZD
MDgxMDA5QzdBNDggLyogVUlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxQjUx
RDU5MTdGRjAwREQ3QzY4IC8qIFVJR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUx
QTkxRDU1MjkzNDAwREQ3QzY4IC8qIFVJR2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376134</attachid>
            <date>2019-08-12 21:05:05 -0700</date>
            <delta_ts>2019-08-12 21:47:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191527-20190812210504.patch</filename>
            <type>text/plain</type>
            <size>64602</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkyNzRkZDkxY2EzYWM2ZmUx
Y2NmN2RlYTNiNWVlM2ExODBkNTY1NTMuLmZiYjA2NDM5MDEyMzA2MmM5NzQ5YWM0NTA2ODExY2Yx
OTJkMjRlN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTktMDgtMTIgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViQXV0aG5dIE1ha2UgQ3Rh
cEhpZEF1dGhlbnRpY2F0b3IvVTJmSGlkQXV0aGVudGljYXRvciB0byBDdGFwQXV0aGVudGljYXRv
ci9VMmZBdXRoZW50aWNhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTE1MjcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0MjM3MTQ2PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
bWFrZXMgYSBBQkMgQ3RhcERyaXZlciwgd2hpY2ggc3VmZmVycyBhcyBhbiBpbnRlcmZhY2UgZm9y
IEN0YXBBdXRoZW50aWNhdG9yL1UyZkF1dGhlbnRpY2F0b3IgdG8gdXNlLAorICAgICAgICBzdWNo
IHRoYXQgQ3RhcEF1dGhlbnRpY2F0b3IvVTJmQXV0aGVudGljYXRvciBjYW4gYmUgc2hhcmVkIGFj
cm9zcyBkaWZmZXJlbnQgdHJhbnNwb3J0cy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVu
YW1lcyBDdGFwSGlkQXV0aGVudGljYXRvci9VMmZIaWRBdXRoZW50aWNhdG9yIHRvIEN0YXBBdXRo
ZW50aWNhdG9yL1UyZkF1dGhlbnRpY2F0b3IgY29ycmVzcG9uZGluZ2x5LgorCisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29h
L0hpZFNlcnZpY2UubW06CisgICAgICAgIChXZWJLaXQ6OkhpZFNlcnZpY2U6OmNvbnRpbnVlQWRk
RGV2aWNlQWZ0ZXJHZXRJbmZvKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBIaWRBdXRoZW50aWNhdG9yLmNw
cC4KKyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6OkN0YXBBdXRoZW50aWNhdG9y
KToKKyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKToK
KyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRp
YWxBZnRlclJlc3BvbnNlUmVjZWl2ZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpDdGFwQXV0
aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRp
Y2F0b3I6OmNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKToKKyAgICAg
ICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6OnRyeURvd25ncmFkZSk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9D
dGFwSGlkQXV0aGVudGljYXRvci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9maWRvL0N0YXBEcml2ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlkRHJpdmVyLmg6Cisg
ICAgICAgIChXZWJLaXQ6OkN0YXBIaWREcml2ZXI6OnNldFByb3RvY29sKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9VMmZBdXRoZW50aWNhdG9yLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8v
VTJmSGlkQXV0aGVudGljYXRvci5jcHAuCisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0
b3I6OlUyZkF1dGhlbnRpY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9y
OjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6OmNo
ZWNrRXhjbHVkZUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjppc3N1
ZVJlZ2lzdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6Omdl
dEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6Omlzc3VlU2ln
bkNvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjppc3N1ZU5ld0Nv
bW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjppc3N1ZUNvbW1hbmQp
OgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjpyZXNwb25zZVJlY2VpdmVkKToK
KyAgICAgICAgKFdlYktpdDo6VTJmQXV0aGVudGljYXRvcjo6Y29udGludWVSZWdpc3RlckNvbW1h
bmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNh
dG9yOjpjb250aW51ZUNoZWNrT25seUNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjpjb250aW51ZUJvZ3VzQ29tbWFuZEFmdGVy
UmVzcG9uc2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6OmNv
bnRpbnVlU2lnbkNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1UyZkF1dGhlbnRpY2F0b3IuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vVTJmSGlk
QXV0aGVudGljYXRvci5oLgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorCiAyMDE5LTA4LTA4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZS5jb20+CiAKICAgICAgICAgW2lPU10gUG9zaXRpb24gaW1hZ2UgaW5mb3JtYXRpb24gc2hvdWxk
IHJlc3BlY3QgdGhlIGltYWdlIG9yaWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA1YjRmZjY5YzU0
ZjUwMjdhYzllNDRkOTA1ODAxZGIzYmY5YWRhZjIzLi5kOTgxOTczOTczYjE3MDljYTg5MzFhNGJi
ZmI0OGZmNGIyMDVhMGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTQwNyw5ICs0MDcsOSBAQCBVSVByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCiBVSVByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuY3BwCiBVSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCiAKLVVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9maWRvL0N0YXBIaWRBdXRoZW50aWNhdG9yLmNwcAorVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwCiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vZmlkby9DdGFwSGlkRHJpdmVyLmNwcAotVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2Zp
ZG8vVTJmSGlkQXV0aGVudGljYXRvci5jcHAKK1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9m
aWRvL1UyZkF1dGhlbnRpY2F0b3IuY3BwCiAKIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9N
b2NrL01vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Nb2NrL01vY2tIaWRDb25uZWN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvSGlkU2VydmljZS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0hpZFNlcnZpY2UubW0K
aW5kZXggY2EyNmU1MWQ3YTQwNjRhYTI4MTI3YzBmMDFkNTRhNGUwYWMyNDQ2My4uOWVhZTE4ZWRk
NWY0ZDJkYzVkZjM4ZTk2ZDA1MDUwOTNiY2E5YjM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvSGlkU2VydmljZS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9IaWRTZXJ2aWNl
Lm1tCkBAIC0yOCwxMCArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRG
T1JNKE1BQykKIAotI2ltcG9ydCAiQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaCIKKyNpbXBvcnQgIkN0
YXBBdXRoZW50aWNhdG9yLmgiCiAjaW1wb3J0ICJDdGFwSGlkRHJpdmVyLmgiCiAjaW1wb3J0ICJI
aWRDb25uZWN0aW9uLmgiCi0jaW1wb3J0ICJVMmZIaWRBdXRoZW50aWNhdG9yLmgiCisjaW1wb3J0
ICJVMmZBdXRoZW50aWNhdG9yLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RldmljZVJlcXVlc3RDb252
ZXJ0ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRGV2aWNlUmVzcG9uc2VDb252ZXJ0ZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvRmlkb0NvbnN0YW50cy5oPgpAQCAtMTEyLDEyICsxMTIsMTIgQEAgdm9p
ZCBIaWRTZXJ2aWNlOjpjb250aW51ZUFkZERldmljZUFmdGVyR2V0SW5mbyhDdGFwSGlkRHJpdmVy
KiBwdHIsIFZlY3Rvcjx1aW50OF8KIAogICAgIGF1dG8gaW5mbyA9IHJlYWRDVEFQR2V0SW5mb1Jl
c3BvbnNlKHJlc3BvbnNlKTsKICAgICBpZiAoaW5mbyAmJiBpbmZvLT52ZXJzaW9ucygpLmZpbmQo
UHJvdG9jb2xWZXJzaW9uOjprQ3RhcCkgIT0gaW5mby0+dmVyc2lvbnMoKS5lbmQoKSkgewotICAg
ICAgICBvYnNlcnZlcigpLT5hdXRoZW50aWNhdG9yQWRkZWQoQ3RhcEhpZEF1dGhlbnRpY2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGRyaXZlciksIFdURk1vdmUoKmluZm8pKSk7CisgICAgICAgIG9ic2Vy
dmVyKCktPmF1dGhlbnRpY2F0b3JBZGRlZChDdGFwQXV0aGVudGljYXRvcjo6Y3JlYXRlKFdURk1v
dmUoZHJpdmVyKSwgV1RGTW92ZSgqaW5mbykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBMT0dfRVJST1IoIkNvdWxkbid0IHBhcnNlIGEgY3RhcCBnZXQgaW5mbyByZXNwb25zZS4iKTsK
ICAgICBkcml2ZXItPnNldFByb3RvY29sKFByb3RvY29sVmVyc2lvbjo6a1UyZik7Ci0gICAgb2Jz
ZXJ2ZXIoKS0+YXV0aGVudGljYXRvckFkZGVkKFUyZkhpZEF1dGhlbnRpY2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGRyaXZlcikpKTsKKyAgICBvYnNlcnZlcigpLT5hdXRoZW50aWNhdG9yQWRkZWQoVTJm
QXV0aGVudGljYXRvcjo6Y3JlYXRlKFdURk1vdmUoZHJpdmVyKSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDYzZTc3MzViMDZiZGEyNTBkZThlYmFhYWYzOGZjNGEyNDY4YWE3NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8v
Q3RhcEF1dGhlbnRpY2F0b3IuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN0YXBBdXRoZW50aWNhdG9yLmgiCisKKyNpZiBF
TkFCTEUoV0VCX0FVVEhOKSAmJiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRlICJDdGFwRHJpdmVy
LmgiCisjaW5jbHVkZSAiQ3RhcEhpZERyaXZlci5oIgorI2luY2x1ZGUgIlUyZkF1dGhlbnRpY2F0
b3IuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RldmljZVJlcXVlc3RDb252ZXJ0ZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0RldmljZVJlc3BvbnNlQ29udmVydGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25EYXRhLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBmaWRvOworCitDdGFw
QXV0aGVudGljYXRvcjo6Q3RhcEF1dGhlbnRpY2F0b3Ioc3RkOjp1bmlxdWVfcHRyPEN0YXBEcml2
ZXI+JiYgZHJpdmVyLCBBdXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlJiYgaW5mbykKKyAgICA6
IG1fZHJpdmVyKFdURk1vdmUoZHJpdmVyKSkKKyAgICAsIG1faW5mbyhXVEZNb3ZlKGluZm8pKQor
eworICAgIC8vIEZJWE1FKDE5MTUyMCk6IFdlIG5lZWQgYSB3YXkgdG8gY29udmVydCBzdGQ6OnVu
aXF1ZV9wdHIgdG8gVW5pcXVlUmVmLgorICAgIEFTU0VSVChtX2RyaXZlcik7Cit9CisKK3ZvaWQg
Q3RhcEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKCkKK3sKKyAgICBBU1NFUlQoIW1faXNE
b3duZ3JhZGVkKTsKKyAgICBhdXRvIGNib3JDbWQgPSBlbmNvZGVNYWtlQ3JlZGVuaXRhbFJlcXVl
c3RBc0NCT1IocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9u
cywgbV9pbmZvLm9wdGlvbnMoKS51c2VyVmVyaWZpY2F0aW9uQXZhaWxhYmlsaXR5KCkpOworICAg
IG1fZHJpdmVyLT50cmFuc2FjdChXVEZNb3ZlKGNib3JDbWQpLCBbd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyldKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIHsKKyAgICAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgd2Vha1RoaXMtPmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlclJlc3Bv
bnNlUmVjZWl2ZWQoV1RGTW92ZShkYXRhKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ3RhcEF1dGhl
bnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlclJlc3BvbnNlUmVjZWl2ZWQoVmVj
dG9yPHVpbnQ4X3Q+JiYgZGF0YSkgY29uc3QKK3sKKyAgICBhdXRvIHJlc3BvbnNlID0gcmVhZENU
QVBNYWtlQ3JlZGVudGlhbFJlc3BvbnNlKGRhdGEsIHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRp
b25zLmF0dGVzdGF0aW9uKTsKKyAgICBpZiAoIXJlc3BvbnNlKSB7CisgICAgICAgIGF1dG8gZXJy
b3IgPSBnZXRSZXNwb25zZUNvZGUoZGF0YSk7CisgICAgICAgIGlmIChlcnJvciA9PSBDdGFwRGV2
aWNlUmVzcG9uc2VDb2RlOjprQ3RhcDJFcnJDcmVkZW50aWFsRXhjbHVkZWQpCisgICAgICAgICAg
ICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgSW52YWxpZFN0YXRlRXJyb3IsICJBdCBs
ZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVu
dGlhbHMgbGlzdCBpbiB0aGUgYXV0aGVudGljYXRvci4iX3MgfSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBVbmtub3duRXJyb3IsIG1h
a2VTdHJpbmcoIlVua25vd24gaW50ZXJuYWwgZXJyb3IuIEVycm9yIGNvZGU6ICIsIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KGVycm9yKSkgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVj
ZWl2ZVJlc3BvbmQoV1RGTW92ZSgqcmVzcG9uc2UpKTsKK30KKwordm9pZCBDdGFwQXV0aGVudGlj
YXRvcjo6Z2V0QXNzZXJ0aW9uKCkKK3sKKyAgICBBU1NFUlQoIW1faXNEb3duZ3JhZGVkKTsKKyAg
ICBhdXRvIGNib3JDbWQgPSBlbmNvZGVHZXRBc3NlcnRpb25SZXF1ZXN0QXNDQk9SKHJlcXVlc3RE
YXRhKCkuaGFzaCwgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucywgbV9pbmZvLm9wdGlvbnMo
KS51c2VyVmVyaWZpY2F0aW9uQXZhaWxhYmlsaXR5KCkpOworICAgIG1fZHJpdmVyLT50cmFuc2Fj
dChXVEZNb3ZlKGNib3JDbWQpLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKFZlY3Rv
cjx1aW50OF90PiYmIGRhdGEpIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2Vh
a1RoaXMtPmNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKFdURk1vdmUo
ZGF0YSkpOworICAgIH0pOworfQorCit2b2lkIEN0YXBBdXRoZW50aWNhdG9yOjpjb250aW51ZUdl
dEFzc2VydGlvbkFmdGVyUmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8dWludDhfdD4mJiBkYXRhKQor
eworICAgIGF1dG8gcmVzcG9uc2UgPSByZWFkQ1RBUEdldEFzc2VydGlvblJlc3BvbnNlKGRhdGEp
OworICAgIGlmICghcmVzcG9uc2UpIHsKKyAgICAgICAgYXV0byBlcnJvciA9IGdldFJlc3BvbnNl
Q29kZShkYXRhKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEN0YXBEZXZpY2VSZXNwb25zZUNvZGU6
OmtDdGFwMkVyckludmFsaWRDQk9SICYmIHRyeURvd25ncmFkZSgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9y
LCBtYWtlU3RyaW5nKCJVbmtub3duIGludGVybmFsIGVycm9yLiBFcnJvciBjb2RlOiAiLCBzdGF0
aWNfY2FzdDx1aW50OF90PihlcnJvcikpIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IHJlY2VpdmVSZXNwb25kKFdURk1vdmUoKnJlc3BvbnNlKSk7Cit9CisKK2Jvb2wgQ3RhcEF1dGhl
bnRpY2F0b3I6OnRyeURvd25ncmFkZSgpCit7CisgICAgaWYgKG1faW5mby52ZXJzaW9ucygpLmZp
bmQoUHJvdG9jb2xWZXJzaW9uOjprVTJmKSA9PSBtX2luZm8udmVyc2lvbnMoKS5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghb2JzZXJ2ZXIoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9kcml2ZXItPnNldFByb3RvY29sKFByb3RvY29sVmVyc2lvbjo6a1Uy
Zik7CisgICAgb2JzZXJ2ZXIoKS0+ZG93bmdyYWRlKHRoaXMsIFUyZkF1dGhlbnRpY2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKG1fZHJpdmVyKSkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRGT1JN
KE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWU4
ODg4NzVhNTZmZWY4ZTA5MDgxOGExODZjNTcxMzM1MDNjZjNiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwQXV0aGVu
dGljYXRvci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykKKworI2luY2x1ZGUgIkF1dGhl
bnRpY2F0b3IuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9u
c2UuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEN0YXBEcml2ZXI7CisKK2NsYXNz
IEN0YXBBdXRoZW50aWNhdG9yIGZpbmFsIDogcHVibGljIEF1dGhlbnRpY2F0b3IgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8Q3RhcEF1dGhlbnRpY2F0b3I+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9w
dHI8Q3RhcERyaXZlcj4mJiBkcml2ZXIsIGZpZG86OkF1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9u
c2UmJiBpbmZvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3RhcEF1dGhl
bnRpY2F0b3IoV1RGTW92ZShkcml2ZXIpLCBXVEZNb3ZlKGluZm8pKSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIGV4cGxpY2l0IEN0YXBBdXRoZW50aWNhdG9yKHN0ZDo6dW5pcXVlX3B0cjxDdGFw
RHJpdmVyPiYmLCBmaWRvOjpBdXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlJiYpOworCisgICAg
dm9pZCBtYWtlQ3JlZGVudGlhbCgpIGZpbmFsOworICAgIHZvaWQgY29udGludWVNYWtlQ3JlZGVu
dGlhbEFmdGVyUmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8dWludDhfdD4mJikgY29uc3Q7CisgICAg
dm9pZCBnZXRBc3NlcnRpb24oKSBmaW5hbDsKKyAgICB2b2lkIGNvbnRpbnVlR2V0QXNzZXJ0aW9u
QWZ0ZXJSZXNwb25zZVJlY2VpdmVkKFZlY3Rvcjx1aW50OF90PiYmKTsKKworICAgIGJvb2wgdHJ5
RG93bmdyYWRlKCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3RhcERyaXZlcj4gbV9kcml2ZXI7
CisgICAgZmlkbzo6QXV0aGVudGljYXRvckdldEluZm9SZXNwb25zZSBtX2luZm87CisgICAgYm9v
bCBtX2lzRG93bmdyYWRlZCB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcERy
aXZlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9D
dGFwRHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc5YmVhMzg4MmQ2ZDYzMGQ4NjdhNWJhYjFlODNmYzZi
Yzc3ZDlkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcERyaXZlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfQVVUSE4pCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0ZpZG9Db25zdGFudHMuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDdGFwRHJp
dmVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPEN0YXBEcml2ZXI+IHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdGFwRHJpdmVyKTsKK3B1
YmxpYzoKKyAgICB1c2luZyBSZXNwb25zZUNhbGxiYWNrID0gRnVuY3Rpb248dm9pZChWZWN0b3I8
dWludDhfdD4mJik+OworCisgICAgQ3RhcERyaXZlcigpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFs
IH5DdGFwRHJpdmVyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCBzZXRQcm90b2NvbChmaWRvOjpQ
cm90b2NvbFZlcnNpb24gcHJvdG9jb2wpIHsgbV9wcm90b2NvbCA9IHByb3RvY29sOyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNhY3QoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgUmVzcG9uc2VD
YWxsYmFjayYmKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBmaWRvOjpQcm90b2NvbFZlcnNpb24g
cHJvdG9jb2woKSBjb25zdCB7IHJldHVybiBtX3Byb3RvY29sOyB9CisKK3ByaXZhdGU6CisgICAg
Zmlkbzo6UHJvdG9jb2xWZXJzaW9uIG1fcHJvdG9jb2wgeyBmaWRvOjpQcm90b2NvbFZlcnNpb246
OmtDdGFwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQVVUSE4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9maWRvL0N0YXBIaWRBdXRoZW50aWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZEF1dGhlbnRpY2F0b3IuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWM4MDU0MzYzMzJhNTU5NWJhOGExOWVl
MDE2NDlkNGFjZDQxNjA5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3Rh
cEhpZEF1dGhlbnRpY2F0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3RhcEhpZEF1dGhlbnRp
Y2F0b3IuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykKLQotI2lu
Y2x1ZGUgIkN0YXBIaWREcml2ZXIuaCIKLSNpbmNsdWRlICJVMmZIaWRBdXRoZW50aWNhdG9yLmgi
Ci0jaW5jbHVkZSA8V2ViQ29yZS9EZXZpY2VSZXF1ZXN0Q29udmVydGVyLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9EZXZpY2VSZXNwb25zZUNvbnZlcnRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uRGF0YS5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgZmlkbzsKLQotQ3RhcEhpZEF1
dGhlbnRpY2F0b3I6OkN0YXBIaWRBdXRoZW50aWNhdG9yKHN0ZDo6dW5pcXVlX3B0cjxDdGFwSGlk
RHJpdmVyPiYmIGRyaXZlciwgQXV0aGVudGljYXRvckdldEluZm9SZXNwb25zZSYmIGluZm8pCi0g
ICAgOiBtX2RyaXZlcihXVEZNb3ZlKGRyaXZlcikpCi0gICAgLCBtX2luZm8oV1RGTW92ZShpbmZv
KSkKLXsKLSAgICAvLyBGSVhNRSgxOTE1MjApOiBXZSBuZWVkIGEgd2F5IHRvIGNvbnZlcnQgc3Rk
Ojp1bmlxdWVfcHRyIHRvIFVuaXF1ZVJlZi4KLSAgICBBU1NFUlQobV9kcml2ZXIpOwotfQotCi12
b2lkIEN0YXBIaWRBdXRoZW50aWNhdG9yOjptYWtlQ3JlZGVudGlhbCgpCi17Ci0gICAgQVNTRVJU
KCFtX2lzRG93bmdyYWRlZCk7Ci0gICAgYXV0byBjYm9yQ21kID0gZW5jb2RlTWFrZUNyZWRlbml0
YWxSZXF1ZXN0QXNDQk9SKHJlcXVlc3REYXRhKCkuaGFzaCwgcmVxdWVzdERhdGEoKS5jcmVhdGlv
bk9wdGlvbnMsIG1faW5mby5vcHRpb25zKCkudXNlclZlcmlmaWNhdGlvbkF2YWlsYWJpbGl0eSgp
KTsKLSAgICBtX2RyaXZlci0+dHJhbnNhY3QoV1RGTW92ZShjYm9yQ21kKSwgW3dlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpXShWZWN0b3I8dWludDhfdD4mJiBkYXRhKSB7Ci0gICAgICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHdlYWtUaGlzLT5jb250aW51ZU1ha2VDcmVkZW50aWFsQWZ0
ZXJSZXNwb25zZVJlY2VpdmVkKFdURk1vdmUoZGF0YSkpOwotICAgIH0pOwotfQotCi12b2lkIEN0
YXBIaWRBdXRoZW50aWNhdG9yOjpjb250aW51ZU1ha2VDcmVkZW50aWFsQWZ0ZXJSZXNwb25zZVJl
Y2VpdmVkKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIGNvbnN0Ci17Ci0gICAgYXV0byByZXNwb25z
ZSA9IHJlYWRDVEFQTWFrZUNyZWRlbnRpYWxSZXNwb25zZShkYXRhLCByZXF1ZXN0RGF0YSgpLmNy
ZWF0aW9uT3B0aW9ucy5hdHRlc3RhdGlvbik7Ci0gICAgaWYgKCFyZXNwb25zZSkgewotICAgICAg
ICBhdXRvIGVycm9yID0gZ2V0UmVzcG9uc2VDb2RlKGRhdGEpOwotICAgICAgICBpZiAoZXJyb3Ig
PT0gQ3RhcERldmljZVJlc3BvbnNlQ29kZTo6a0N0YXAyRXJyQ3JlZGVudGlhbEV4Y2x1ZGVkKQot
ICAgICAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IEludmFsaWRTdGF0ZUVy
cm9yLCAiQXQgbGVhc3Qgb25lIGNyZWRlbnRpYWwgbWF0Y2hlcyBhbiBlbnRyeSBvZiB0aGUgZXhj
bHVkZUNyZWRlbnRpYWxzIGxpc3QgaW4gdGhlIGF1dGhlbnRpY2F0b3IuIl9zIH0pOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93
bkVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGludGVybmFsIGVycm9yLiBFcnJvciBjb2RlOiAi
LCBzdGF0aWNfY2FzdDx1aW50OF90PihlcnJvcikpIH0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIHJlY2VpdmVSZXNwb25kKFdURk1vdmUoKnJlc3BvbnNlKSk7Ci19Ci0KLXZvaWQgQ3Rh
cEhpZEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCi17Ci0gICAgQVNTRVJUKCFtX2lzRG93
bmdyYWRlZCk7Ci0gICAgYXV0byBjYm9yQ21kID0gZW5jb2RlR2V0QXNzZXJ0aW9uUmVxdWVzdEFz
Q0JPUihyZXF1ZXN0RGF0YSgpLmhhc2gsIHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMsIG1f
aW5mby5vcHRpb25zKCkudXNlclZlcmlmaWNhdGlvbkF2YWlsYWJpbGl0eSgpKTsKLSAgICBtX2Ry
aXZlci0+dHJhbnNhY3QoV1RGTW92ZShjYm9yQ21kKSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpXShWZWN0b3I8dWludDhfdD4mJiBkYXRhKSB7Ci0gICAgICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIHdlYWtUaGlzLT5jb250aW51ZUdldEFzc2VydGlvbkFmdGVyUmVzcG9uc2VSZWNl
aXZlZChXVEZNb3ZlKGRhdGEpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBDdGFwSGlkQXV0aGVudGlj
YXRvcjo6Y29udGludWVHZXRBc3NlcnRpb25BZnRlclJlc3BvbnNlUmVjZWl2ZWQoVmVjdG9yPHVp
bnQ4X3Q+JiYgZGF0YSkKLXsKLSAgICBhdXRvIHJlc3BvbnNlID0gcmVhZENUQVBHZXRBc3NlcnRp
b25SZXNwb25zZShkYXRhKTsKLSAgICBpZiAoIXJlc3BvbnNlKSB7Ci0gICAgICAgIGF1dG8gZXJy
b3IgPSBnZXRSZXNwb25zZUNvZGUoZGF0YSk7Ci0gICAgICAgIGlmIChlcnJvciAhPSBDdGFwRGV2
aWNlUmVzcG9uc2VDb2RlOjprQ3RhcDJFcnJJbnZhbGlkQ0JPUiAmJiB0cnlEb3duZ3JhZGUoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0
YSB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBpbnRlcm5hbCBlcnJvci4gRXJy
b3IgY29kZTogIiwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZXJyb3IpKSB9KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICByZWNlaXZlUmVzcG9uZChXVEZNb3ZlKCpyZXNwb25zZSkpOwotfQot
Ci1ib29sIEN0YXBIaWRBdXRoZW50aWNhdG9yOjp0cnlEb3duZ3JhZGUoKQotewotICAgIGlmICht
X2luZm8udmVyc2lvbnMoKS5maW5kKFByb3RvY29sVmVyc2lvbjo6a1UyZikgPT0gbV9pbmZvLnZl
cnNpb25zKCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW9ic2VydmVy
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faXNEb3duZ3JhZGVkID0gdHJ1ZTsK
LSAgICBtX2RyaXZlci0+c2V0UHJvdG9jb2woUHJvdG9jb2xWZXJzaW9uOjprVTJmKTsKLSAgICBv
YnNlcnZlcigpLT5kb3duZ3JhZGUodGhpcywgVTJmSGlkQXV0aGVudGljYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUobV9kcml2ZXIpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikgJiYgUExBVEZPUk0oTUFDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlk
by9DdGFwSGlkQXV0aGVudGljYXRvci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vZmlkby9DdGFwSGlkQXV0aGVudGljYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2M2M0NjExNzQyNDI4NDdjNjJmOWE1ZDJhZTM2YzU2MWYwZmFjN2RkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZEF1dGhlbnRpY2F0b3Iu
aAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykKLQotI2luY2x1ZGUg
IkF1dGhlbnRpY2F0b3IuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JHZXRJbmZv
UmVzcG9uc2UuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEN0YXBIaWREcml2ZXI7
Ci0KLWNsYXNzIEN0YXBIaWRBdXRoZW50aWNhdG9yIGZpbmFsIDogcHVibGljIEF1dGhlbnRpY2F0
b3IgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q3RhcEhpZEF1dGhlbnRpY2F0b3I+IGNyZWF0
ZShzdGQ6OnVuaXF1ZV9wdHI8Q3RhcEhpZERyaXZlcj4mJiBkcml2ZXIsIGZpZG86OkF1dGhlbnRp
Y2F0b3JHZXRJbmZvUmVzcG9uc2UmJiBpbmZvKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ3RhcEhpZEF1dGhlbnRpY2F0b3IoV1RGTW92ZShkcml2ZXIpLCBXVEZNb3ZlKGlu
Zm8pKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IEN0YXBIaWRBdXRoZW50aWNh
dG9yKHN0ZDo6dW5pcXVlX3B0cjxDdGFwSGlkRHJpdmVyPiYmLCBmaWRvOjpBdXRoZW50aWNhdG9y
R2V0SW5mb1Jlc3BvbnNlJiYpOwotCi0gICAgdm9pZCBtYWtlQ3JlZGVudGlhbCgpIGZpbmFsOwot
ICAgIHZvaWQgY29udGludWVNYWtlQ3JlZGVudGlhbEFmdGVyUmVzcG9uc2VSZWNlaXZlZChWZWN0
b3I8dWludDhfdD4mJikgY29uc3Q7Ci0gICAgdm9pZCBnZXRBc3NlcnRpb24oKSBmaW5hbDsKLSAg
ICB2b2lkIGNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKFZlY3Rvcjx1
aW50OF90PiYmKTsKLQotICAgIGJvb2wgdHJ5RG93bmdyYWRlKCk7Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q3RhcEhpZERyaXZlcj4gbV9kcml2ZXI7Ci0gICAgZmlkbzo6QXV0aGVudGljYXRvckdl
dEluZm9SZXNwb25zZSBtX2luZm87Ci0gICAgYm9vbCBtX2lzRG93bmdyYWRlZCB7IGZhbHNlIH07
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVU
SE4pICYmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZERyaXZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBIaWREcml2ZXIuY3BwCmluZGV4
IDk2ZTVmNTliMWVmOWUxY2MwZDVlY2JiNmFlOTU2NGE4MzU5NzMxODAuLmFlYjM4NDEyZWNkMjJk
NTI5YWU1MmFjZTRiYjJmMGI1Y2U5MjA0MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZERyaXZlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlkRHJpdmVy
LmNwcApAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQgQ3RhcEhpZERyaXZlcjo6Y29udGludWVBZnRl
ckNoYW5uZWxBbGxvY2F0ZWQoT3B0aW9uYWw8Rmlkb0hpZE1lc3NhZ2U+JiYgbWVzCiAgICAgbV9j
aGFubmVsSWQgfD0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHBheWxvYWRbaW5kZXgrK10pIDw8IDg7
CiAgICAgbV9jaGFubmVsSWQgfD0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHBheWxvYWRbaW5kZXhd
KTsKICAgICAvLyBGSVhNRSgxOTE1MzQpOiBDaGVjayB0aGUgcmVzZXQgb2YgdGhlIHBheWxvYWQu
Ci0gICAgYXV0byBjbWQgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY2hhbm5lbElkLCBtX3By
b3RvY29sID09IFByb3RvY29sVmVyc2lvbjo6a0N0YXAgPyBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6
a0Nib3IgOiBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a01zZywgbV9yZXF1ZXN0RGF0YSk7CisgICAg
YXV0byBjbWQgPSBGaWRvSGlkTWVzc2FnZTo6Y3JlYXRlKG1fY2hhbm5lbElkLCBwcm90b2NvbCgp
ID09IFByb3RvY29sVmVyc2lvbjo6a0N0YXAgPyBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a0Nib3Ig
OiBGaWRvSGlkRGV2aWNlQ29tbWFuZDo6a01zZywgbV9yZXF1ZXN0RGF0YSk7CiAgICAgQVNTRVJU
KGNtZCk7CiAgICAgbV93b3JrZXItPnRyYW5zYWN0KFdURk1vdmUoKmNtZCksIFt3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKV0oT3B0aW9uYWw8Rmlkb0hpZE1lc3NhZ2U+JiYgcmVzcG9uc2Up
IG11dGFibGUgewogICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlk
RHJpdmVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRv
L0N0YXBIaWREcml2ZXIuaAppbmRleCA4ZmI1MDRkOTFlOTc4MzcwYjBmNmQ5NDI4MThjZDE5ODc5
NzgyM2NjLi5kZWZiNDY0YjhjMjIxN2E5YTE1YjQ1NWFmNzFmOWZlNWJiZmRhNTEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBI
aWREcml2ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9maWRvL0N0YXBIaWREcml2ZXIuaApAQCAtMjcsMjYgKzI3LDE4IEBACiAKICNpZiBFTkFCTEUo
V0VCX0FVVEhOKSAmJiBQTEFURk9STShNQUMpCiAKKyNpbmNsdWRlICJDdGFwRHJpdmVyLmgiCiAj
aW5jbHVkZSAiSGlkQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRmlkb0NvbnN0YW50
cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmlkb0hpZE1lc3NhZ2UuaD4KLSNpbmNsdWRlIDx3dGYv
Q29tcGxldGlvbkhhbmRsZXIuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KLSNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogLy8gVGhlIGZvbGxvd2lu
ZyBpbXBsZW1lbnRzIHRoZSBDVEFQIEhJRCBwcm90b2NvbDoKIC8vIGh0dHBzOi8vZmlkb2FsbGlh
bmNlLm9yZy9zcGVjcy9maWRvLXYyLjAtcHMtMjAxNzA5MjcvZmlkby1jbGllbnQtdG8tYXV0aGVu
dGljYXRvci1wcm90b2NvbC12Mi4wLXBzLTIwMTcwOTI3Lmh0bWwjdXNiCiAvLyBGU006IElkbGUg
PT4gQWxsb2NhdGVDaGFubmVsID0+IFJlYWR5Ci1jbGFzcyBDdGFwSGlkRHJpdmVyIDogcHVibGlj
IENhbk1ha2VXZWFrUHRyPEN0YXBIaWREcml2ZXI+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdGFwSGlkRHJpdmVyKTsKK2NsYXNzIEN0
YXBIaWREcml2ZXIgOiBwdWJsaWMgQ3RhcERyaXZlciB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgUmVz
cG9uc2VDYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPjsKLQogICAg
IGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsKICAgICAgICAgSWRsZSwKICAgICAgICAgQWxs
b2NhdGVDaGFubmVsLApAQCAtNTcsOCArNDksNyBAQCBwdWJsaWM6CiAKICAgICBleHBsaWNpdCBD
dGFwSGlkRHJpdmVyKFVuaXF1ZVJlZjxIaWRDb25uZWN0aW9uPiYmKTsKIAotICAgIHZvaWQgc2V0
UHJvdG9jb2woZmlkbzo6UHJvdG9jb2xWZXJzaW9uIHByb3RvY29sKSB7IG1fcHJvdG9jb2wgPSBw
cm90b2NvbDsgfQotICAgIHZvaWQgdHJhbnNhY3QoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSwgUmVz
cG9uc2VDYWxsYmFjayYmKTsKKyAgICB2b2lkIHRyYW5zYWN0KFZlY3Rvcjx1aW50OF90PiYmIGRh
dGEsIFJlc3BvbnNlQ2FsbGJhY2smJikgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgLy8gV29ya2Vy
IGlzIHRoZSBoZWxwZXIgdGhhdCBtYWludGFpbnMgdGhlIHRyYW5zYWN0aW9uLgpAQCAtMTA0LDcg
Kzk1LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dWludDhfdD4gbV9yZXF1ZXN0RGF0YTsKICAg
ICBSZXNwb25zZUNhbGxiYWNrIG1fcmVzcG9uc2VDYWxsYmFjazsKICAgICBWZWN0b3I8dWludDhf
dD4gbV9ub25jZTsKLSAgICBmaWRvOjpQcm90b2NvbFZlcnNpb24gbV9wcm90b2NvbCB7IGZpZG86
OlByb3RvY29sVmVyc2lvbjo6a0N0YXAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlk
by9VMmZBdXRoZW50aWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL2ZpZG8vVTJmQXV0aGVudGljYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU4NTY3MmZk
MmM5YzMxY2VlYzQzNjE2ZmM3MDU3ODU1NzVhYTU3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vVTJmQXV0aGVudGljYXRv
ci5jcHAKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVTJmQXV0aGVudGljYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQl9BVVRITikg
JiYgUExBVEZPUk0oTUFDKQorCisjaW5jbHVkZSAiQ3RhcERyaXZlci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvQXBkdVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25EYXRhLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9VMmZDb21tYW5kQ29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1UyZlJlc3BvbnNlQ29udmVydGVyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBh
cGR1OwordXNpbmcgbmFtZXNwYWNlIGZpZG87CisKK25hbWVzcGFjZSB7Citjb25zdCB1bnNpZ25l
ZCByZXRyeVRpbWVPdXRWYWx1ZU1zID0gMjAwOworfQorCitVMmZBdXRoZW50aWNhdG9yOjpVMmZB
dXRoZW50aWNhdG9yKHN0ZDo6dW5pcXVlX3B0cjxDdGFwRHJpdmVyPiYmIGRyaXZlcikKKyAgICA6
IG1fZHJpdmVyKFdURk1vdmUoZHJpdmVyKSkKKyAgICAsIG1fcmV0cnlUaW1lcihSdW5Mb29wOjpt
YWluKCksIHRoaXMsICZVMmZBdXRoZW50aWNhdG9yOjpyZXRyeUxhc3RDb21tYW5kKQoreworICAg
IC8vIEZJWE1FKDE5MTUyMCk6IFdlIG5lZWQgYSB3YXkgdG8gY29udmVydCBzdGQ6OnVuaXF1ZV9w
dHIgdG8gVW5pcXVlUmVmLgorICAgIEFTU0VSVChtX2RyaXZlcik7Cit9CisKK3ZvaWQgVTJmQXV0
aGVudGljYXRvcjo6bWFrZUNyZWRlbnRpYWwoKQoreworICAgIGlmICghaXNDb252ZXJ0aWJsZVRv
VTJmUmVnaXN0ZXJDb21tYW5kKHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zKSkgeworICAg
ICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgTm90U3VwcG9ydGVkRXJyb3IsICJD
YW5ub3QgY29udmVydCB0aGUgcmVxdWVzdCB0byBVMkYgY29tbWFuZC4iX3MgfSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKCFyZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5l
eGNsdWRlQ3JlZGVudGlhbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9uZXh0TGlz
dEluZGV4KTsKKyAgICAgICAgY2hlY2tFeGNsdWRlTGlzdChtX25leHRMaXN0SW5kZXgrKyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaXNzdWVSZWdpc3RlckNvbW1hbmQoKTsKK30KKwor
dm9pZCBVMmZBdXRoZW50aWNhdG9yOjpjaGVja0V4Y2x1ZGVMaXN0KHNpemVfdCBpbmRleCkKK3sK
KyAgICBpZiAoaW5kZXggPj0gcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNy
ZWRlbnRpYWxzLnNpemUoKSkgeworICAgICAgICBpc3N1ZVJlZ2lzdGVyQ29tbWFuZCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmQ2hlY2tP
bmx5U2lnbkNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9u
T3B0aW9ucywgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxz
W2luZGV4XSk7CisgICAgQVNTRVJUKHUyZkNtZCk7CisgICAgaXNzdWVOZXdDb21tYW5kKFdURk1v
dmUoKnUyZkNtZCksIENvbW1hbmRUeXBlOjpDaGVja09ubHlDb21tYW5kKTsKK30KKwordm9pZCBV
MmZBdXRoZW50aWNhdG9yOjppc3N1ZVJlZ2lzdGVyQ29tbWFuZCgpCit7CisgICAgYXV0byB1MmZD
bWQgPSBjb252ZXJ0VG9VMmZSZWdpc3RlckNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1
ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucyk7CisgICAgQVNTRVJUKHUyZkNtZCk7CisgICAgaXNz
dWVOZXdDb21tYW5kKFdURk1vdmUoKnUyZkNtZCksIENvbW1hbmRUeXBlOjpSZWdpc3RlckNvbW1h
bmQpOworfQorCit2b2lkIFUyZkF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCit7CisgICAg
aWYgKCFpc0NvbnZlcnRpYmxlVG9VMmZTaWduQ29tbWFuZChyZXF1ZXN0RGF0YSgpLnJlcXVlc3RP
cHRpb25zKSkgeworICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgTm90U3Vw
cG9ydGVkRXJyb3IsICJDYW5ub3QgY29udmVydCB0aGUgcmVxdWVzdCB0byBVMkYgY29tbWFuZC4i
X3MgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCFtX25leHRMaXN0SW5k
ZXgpOworICAgIGlzc3VlU2lnbkNvbW1hbmQobV9uZXh0TGlzdEluZGV4KyspOworfQorCit2b2lk
IFUyZkF1dGhlbnRpY2F0b3I6Omlzc3VlU2lnbkNvbW1hbmQoc2l6ZV90IGluZGV4KQoreworICAg
IGlmIChpbmRleCA+PSByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlh
bHMuc2l6ZSgpKSB7CisgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBOb3RB
bGxvd2VkRXJyb3IsICJObyBjcmVkZW50aWFscyBmcm9tIHRoZSBhbGxvd0NyZWRlbnRpYWxzIGxp
c3QgaXMgZm91bmQgaW4gdGhlIGF1dGhlbnRpY2F0b3IuIl9zIH0pOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmU2lnbkNvbW1hbmQocmVxdWVz
dERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLCByZXF1ZXN0RGF0YSgp
LnJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHNbaW5kZXhdLmlkVmVjdG9yLCBtX2lzQXBw
SWQpOworICAgIEFTU0VSVCh1MmZDbWQpOworICAgIGlzc3VlTmV3Q29tbWFuZChXVEZNb3ZlKCp1
MmZDbWQpLCBDb21tYW5kVHlwZTo6U2lnbkNvbW1hbmQpOworfQorCit2b2lkIFUyZkF1dGhlbnRp
Y2F0b3I6Omlzc3VlTmV3Q29tbWFuZChWZWN0b3I8dWludDhfdD4mJiBjb21tYW5kLCBDb21tYW5k
VHlwZSB0eXBlKQoreworICAgIG1fbGFzdENvbW1hbmQgPSBXVEZNb3ZlKGNvbW1hbmQpOworICAg
IG1fbGFzdENvbW1hbmRUeXBlID0gdHlwZTsKKyAgICBpc3N1ZUNvbW1hbmQobV9sYXN0Q29tbWFu
ZCwgbV9sYXN0Q29tbWFuZFR5cGUpOworfQorCit2b2lkIFUyZkF1dGhlbnRpY2F0b3I6Omlzc3Vl
Q29tbWFuZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGNvbW1hbmQsIENvbW1hbmRUeXBlIHR5cGUp
Cit7CisgICAgbV9kcml2ZXItPnRyYW5zYWN0KFZlY3Rvcjx1aW50OF90Pihjb21tYW5kKSwgW3dl
YWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlXShWZWN0b3I8dWludDhfdD4mJiBkYXRh
KSB7CisgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIGlmICghd2Vh
a1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5yZXNwb25zZVJl
Y2VpdmVkKFdURk1vdmUoZGF0YSksIHR5cGUpOworICAgIH0pOworfQorCit2b2lkIFUyZkF1dGhl
bnRpY2F0b3I6OnJlc3BvbnNlUmVjZWl2ZWQoVmVjdG9yPHVpbnQ4X3Q+JiYgcmVzcG9uc2UsIENv
bW1hbmRUeXBlIHR5cGUpCit7CisgICAgYXV0byBhcGR1UmVzcG9uc2UgPSBBcGR1UmVzcG9uc2U6
OmNyZWF0ZUZyb21NZXNzYWdlKHJlc3BvbnNlKTsKKyAgICBpZiAoIWFwZHVSZXNwb25zZSkgewor
ICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9yLCAiQ291
bGRuJ3QgcGFyc2UgdGhlIEFQRFUgcmVzcG9uc2UuIl9zIH0pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDb21tYW5kVHlwZTo6UmVnaXN0
ZXJDb21tYW5kOgorICAgICAgICBjb250aW51ZVJlZ2lzdGVyQ29tbWFuZEFmdGVyUmVzcG9uc2VS
ZWNlaXZlZChXVEZNb3ZlKCphcGR1UmVzcG9uc2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ29tbWFuZFR5cGU6OkNoZWNrT25seUNvbW1hbmQ6CisgICAgICAgIGNvbnRpbnVlQ2hlY2tP
bmx5Q29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChXVEZNb3ZlKCphcGR1UmVzcG9uc2UpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tbWFuZFR5cGU6OkJvZ3VzQ29tbWFuZDoKKyAg
ICAgICAgY29udGludWVCb2d1c0NvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoV1RGTW92ZSgq
YXBkdVJlc3BvbnNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbW1hbmRUeXBlOjpT
aWduQ29tbWFuZDoKKyAgICAgICAgY29udGludWVTaWduQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNl
aXZlZChXVEZNb3ZlKCphcGR1UmVzcG9uc2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBVMmZBdXRoZW50aWNhdG9yOjpjb250
aW51ZVJlZ2lzdGVyQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChBcGR1UmVzcG9uc2UmJiBh
cGR1UmVzcG9uc2UpCit7CisgICAgc3dpdGNoIChhcGR1UmVzcG9uc2Uuc3RhdHVzKCkpIHsKKyAg
ICBjYXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19OT19FUlJPUjogeworICAgICAgICBhdXRv
IHJlc3BvbnNlID0gcmVhZFUyZlJlZ2lzdGVyUmVzcG9uc2UocmVxdWVzdERhdGEoKS5jcmVhdGlv
bk9wdGlvbnMucnAuaWQsIGFwZHVSZXNwb25zZS5kYXRhKCksIHJlcXVlc3REYXRhKCkuY3JlYXRp
b25PcHRpb25zLmF0dGVzdGF0aW9uKTsKKyAgICAgICAgaWYgKCFyZXNwb25zZSkgeworICAgICAg
ICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwgIkNvdWxk
bid0IHBhcnNlIHRoZSBVMkYgcmVnaXN0ZXIgcmVzcG9uc2UuIl9zIH0pOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlY2VpdmVSZXNwb25kKFdURk1vdmUoKnJlc3Bv
bnNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0
YXR1czo6U1dfQ09ORElUSU9OU19OT1RfU0FUSVNGSUVEOgorICAgICAgICAvLyBQb2xsaW5nIGlz
IHJlcXVpcmVkIGR1cmluZyB0ZXN0IG9mIHVzZXIgcHJlc2VuY2UuCisgICAgICAgIG1fcmV0cnlU
aW1lci5zdGFydE9uZVNob3QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhyZXRyeVRpbWVPdXRW
YWx1ZU1zKSk7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZWNlaXZl
UmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3du
IGludGVybmFsIGVycm9yLiBFcnJvciBjb2RlOiAiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYXBk
dVJlc3BvbnNlLnN0YXR1cygpKSkgfSk7CisgICAgfQorfQorCit2b2lkIFUyZkF1dGhlbnRpY2F0
b3I6OmNvbnRpbnVlQ2hlY2tPbmx5Q29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChBcGR1UmVz
cG9uc2UmJiBhcGR1UmVzcG9uc2UpCit7CisgICAgc3dpdGNoIChhcGR1UmVzcG9uc2Uuc3RhdHVz
KCkpIHsKKyAgICBjYXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19OT19FUlJPUjoKKyAgICBj
YXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19DT05ESVRJT05TX05PVF9TQVRJU0ZJRUQ6Cisg
ICAgICAgIGlzc3VlTmV3Q29tbWFuZChjb25zdHJ1Y3RCb2d1c1UyZlJlZ2lzdHJhdGlvbkNvbW1h
bmQoKSwgQ29tbWFuZFR5cGU6OkJvZ3VzQ29tbWFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBjaGVja0V4Y2x1ZGVMaXN0KG1fbmV4dExpc3RJbmRleCsrKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVTJmQXV0aGVudGljYXRvcjo6Y29udGludWVCb2d1c0NvbW1hbmRBZnRl
clJlc3BvbnNlUmVjZWl2ZWQoQXBkdVJlc3BvbnNlJiYgYXBkdVJlc3BvbnNlKQoreworICAgIHN3
aXRjaCAoYXBkdVJlc3BvbnNlLnN0YXR1cygpKSB7CisgICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0
YXR1czo6U1dfTk9fRVJST1I6CisgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEg
eyBJbnZhbGlkU3RhdGVFcnJvciwgIkF0IGxlYXN0IG9uZSBjcmVkZW50aWFsIG1hdGNoZXMgYW4g
ZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRoZSBhdXRoZW50aWNhdG9y
LiJfcyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6
OlNXX0NPTkRJVElPTlNfTk9UX1NBVElTRklFRDoKKyAgICAgICAgLy8gUG9sbGluZyBpcyByZXF1
aXJlZCBkdXJpbmcgdGVzdCBvZiB1c2VyIHByZXNlbmNlLgorICAgICAgICBtX3JldHJ5VGltZXIu
c3RhcnRPbmVTaG90KFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMocmV0cnlUaW1lT3V0VmFsdWVN
cykpOworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmVjZWl2ZVJlc3Bv
bmQoRXhjZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBpbnRl
cm5hbCBlcnJvci4gRXJyb3IgY29kZTogIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFwZHVSZXNw
b25zZS5zdGF0dXMoKSkpIH0pOworICAgIH0KK30KKwordm9pZCBVMmZBdXRoZW50aWNhdG9yOjpj
b250aW51ZVNpZ25Db21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKEFwZHVSZXNwb25zZSYmIGFw
ZHVSZXNwb25zZSkKK3sKKyAgICBzd2l0Y2ggKGFwZHVSZXNwb25zZS5zdGF0dXMoKSkgeworICAg
IGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNXX05PX0VSUk9SOiB7CisgICAgICAgIE9wdGlv
bmFsPFB1YmxpY0tleUNyZWRlbnRpYWxEYXRhPiByZXNwb25zZTsKKyAgICAgICAgaWYgKG1faXNB
cHBJZCkgeworICAgICAgICAgICAgQVNTRVJUKHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMu
ZXh0ZW5zaW9ucyAmJiAhcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zLT5h
cHBpZC5pc051bGwoKSk7CisgICAgICAgICAgICByZXNwb25zZSA9IHJlYWRVMmZTaWduUmVzcG9u
c2UocmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zLT5hcHBpZCwgcmVxdWVz
dERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzW21fbmV4dExpc3RJbmRleCAt
IDFdLmlkVmVjdG9yLCBhcGR1UmVzcG9uc2UuZGF0YSgpKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICByZXNwb25zZSA9IHJlYWRVMmZTaWduUmVzcG9uc2UocmVxdWVzdERhdGEoKS5yZXF1
ZXN0T3B0aW9ucy5ycElkLCByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVu
dGlhbHNbbV9uZXh0TGlzdEluZGV4IC0gMV0uaWRWZWN0b3IsIGFwZHVSZXNwb25zZS5kYXRhKCkp
OworICAgICAgICBpZiAoIXJlc3BvbnNlKSB7CisgICAgICAgICAgICByZWNlaXZlUmVzcG9uZChF
eGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9yLCAiQ291bGRuJ3QgcGFyc2UgdGhlIFUyRiBzaWdu
IHJlc3BvbnNlLiJfcyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobV9pc0FwcElkKQorICAgICAgICAgICAgcmVzcG9uc2UtPmFwcGlkID0gbV9pc0FwcElk
OworCisgICAgICAgIHJlY2VpdmVSZXNwb25kKFdURk1vdmUoKnJlc3BvbnNlKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1dfQ09ORElU
SU9OU19OT1RfU0FUSVNGSUVEOgorICAgICAgICAvLyBQb2xsaW5nIGlzIHJlcXVpcmVkIGR1cmlu
ZyB0ZXN0IG9mIHVzZXIgcHJlc2VuY2UuCisgICAgICAgIG1fcmV0cnlUaW1lci5zdGFydE9uZVNo
b3QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhyZXRyeVRpbWVPdXRWYWx1ZU1zKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19XUk9OR19EQVRB
OgorICAgICAgICBpZiAocmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zICYm
ICFyZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgp
KSB7CisgICAgICAgICAgICBpZiAoIW1faXNBcHBJZCkgeworICAgICAgICAgICAgICAgIG1faXNB
cHBJZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaXNzdWVTaWduQ29tbWFuZChtX25leHRMaXN0
SW5kZXggLSAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX2lzQXBwSWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpc3N1ZVNpZ25D
b21tYW5kKG1fbmV4dExpc3RJbmRleCsrKTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGlzc3VlU2lnbkNvbW1hbmQobV9uZXh0TGlzdEluZGV4KyspOworICAgIH0KK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKSAm
JiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9maWRvL1UyZkF1dGhlbnRpY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vVTJmQXV0aGVudGljYXRvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjlhNDc3MzY4NmY2MDdjMGJhNDBkY2NjN2Y1ZGY4MTEwNWM1NTU5OWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1Uy
ZkF1dGhlbnRpY2F0b3IuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKSAmJiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRl
ICJBdXRoZW50aWNhdG9yLmgiCisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNl
IGFwZHUgeworY2xhc3MgQXBkdVJlc3BvbnNlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgQ3RhcERyaXZlcjsKKworY2xhc3MgVTJmQXV0aGVudGljYXRvciBmaW5hbCA6IHB1Ymxp
YyBBdXRoZW50aWNhdG9yIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFUyZkF1dGhlbnRpY2F0
b3I+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8Q3RhcERyaXZlcj4mJiBkcml2ZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVMmZBdXRoZW50aWNhdG9yKFdURk1vdmUoZHJp
dmVyKSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBVMmZBdXRoZW50aWNhdG9y
KHN0ZDo6dW5pcXVlX3B0cjxDdGFwRHJpdmVyPiYmKTsKKworICAgIHZvaWQgbWFrZUNyZWRlbnRp
YWwoKSBmaW5hbDsKKyAgICB2b2lkIGNoZWNrRXhjbHVkZUxpc3Qoc2l6ZV90IGluZGV4KTsKKyAg
ICB2b2lkIGlzc3VlUmVnaXN0ZXJDb21tYW5kKCk7CisgICAgdm9pZCBnZXRBc3NlcnRpb24oKSBm
aW5hbDsKKyAgICB2b2lkIGlzc3VlU2lnbkNvbW1hbmQoc2l6ZV90IGluZGV4KTsKKworICAgIGVu
dW0gY2xhc3MgQ29tbWFuZFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgUmVnaXN0ZXJDb21tYW5k
LAorICAgICAgICBDaGVja09ubHlDb21tYW5kLAorICAgICAgICBCb2d1c0NvbW1hbmQsCisgICAg
ICAgIFNpZ25Db21tYW5kCisgICAgfTsKKyAgICB2b2lkIGlzc3VlTmV3Q29tbWFuZChWZWN0b3I8
dWludDhfdD4mJiBjb21tYW5kLCBDb21tYW5kVHlwZSk7CisgICAgdm9pZCByZXRyeUxhc3RDb21t
YW5kKCkgeyBpc3N1ZUNvbW1hbmQobV9sYXN0Q29tbWFuZCwgbV9sYXN0Q29tbWFuZFR5cGUpOyB9
CisgICAgdm9pZCBpc3N1ZUNvbW1hbmQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjb21tYW5kLCBD
b21tYW5kVHlwZSk7CisgICAgdm9pZCByZXNwb25zZVJlY2VpdmVkKFZlY3Rvcjx1aW50OF90PiYm
IHJlc3BvbnNlLCBDb21tYW5kVHlwZSk7CisgICAgdm9pZCBjb250aW51ZVJlZ2lzdGVyQ29tbWFu
ZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChhcGR1OjpBcGR1UmVzcG9uc2UmJik7CisgICAgdm9pZCBj
b250aW51ZUNoZWNrT25seUNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoYXBkdTo6QXBkdVJl
c3BvbnNlJiYpOworICAgIHZvaWQgY29udGludWVCb2d1c0NvbW1hbmRBZnRlclJlc3BvbnNlUmVj
ZWl2ZWQoYXBkdTo6QXBkdVJlc3BvbnNlJiYpOworICAgIHZvaWQgY29udGludWVTaWduQ29tbWFu
ZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChhcGR1OjpBcGR1UmVzcG9uc2UmJik7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q3RhcERyaXZlcj4gbV9kcml2ZXI7CisgICAgUnVuTG9vcDo6VGltZXI8VTJm
QXV0aGVudGljYXRvcj4gbV9yZXRyeVRpbWVyOworICAgIFZlY3Rvcjx1aW50OF90PiBtX2xhc3RD
b21tYW5kOworICAgIENvbW1hbmRUeXBlIG1fbGFzdENvbW1hbmRUeXBlOworICAgIHNpemVfdCBt
X25leHRMaXN0SW5kZXggeyAwIH07CisgICAgYm9vbCBtX2lzQXBwSWQgeyBmYWxzZSB9OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKSAm
JiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9maWRvL1UyZkhpZEF1dGhlbnRpY2F0b3IuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9VMmZIaWRBdXRoZW50aWNhdG9yLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNlZWMwZjdlODdmNzIyZGMwZmM4ZDg0
ZWFhYzdhM2JmOWI0ZTUxYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1Uy
ZkhpZEF1dGhlbnRpY2F0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVTJmSGlkQXV0aGVudGlj
YXRvci5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVVRITikgJiYgUExBVEZPUk0oTUFDKQotCi0jaW5j
bHVkZSAiQ3RhcEhpZERyaXZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQXBkdVJlc3BvbnNlLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25EYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9V
MmZDb21tYW5kQ29uc3RydWN0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1UyZlJlc3BvbnNlQ29u
dmVydGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBhcGR1OwotdXNpbmcgbmFtZXNwYWNl
IGZpZG87Ci0KLW5hbWVzcGFjZSB7Ci1jb25zdCB1bnNpZ25lZCByZXRyeVRpbWVPdXRWYWx1ZU1z
ID0gMjAwOwotfQotCi1VMmZIaWRBdXRoZW50aWNhdG9yOjpVMmZIaWRBdXRoZW50aWNhdG9yKHN0
ZDo6dW5pcXVlX3B0cjxDdGFwSGlkRHJpdmVyPiYmIGRyaXZlcikKLSAgICA6IG1fZHJpdmVyKFdU
Rk1vdmUoZHJpdmVyKSkKLSAgICAsIG1fcmV0cnlUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMs
ICZVMmZIaWRBdXRoZW50aWNhdG9yOjpyZXRyeUxhc3RDb21tYW5kKQotewotICAgIC8vIEZJWE1F
KDE5MTUyMCk6IFdlIG5lZWQgYSB3YXkgdG8gY29udmVydCBzdGQ6OnVuaXF1ZV9wdHIgdG8gVW5p
cXVlUmVmLgotICAgIEFTU0VSVChtX2RyaXZlcik7Ci19Ci0KLXZvaWQgVTJmSGlkQXV0aGVudGlj
YXRvcjo6bWFrZUNyZWRlbnRpYWwoKQotewotICAgIGlmICghaXNDb252ZXJ0aWJsZVRvVTJmUmVn
aXN0ZXJDb21tYW5kKHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zKSkgewotICAgICAgICBy
ZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgTm90U3VwcG9ydGVkRXJyb3IsICJDYW5ub3Qg
Y29udmVydCB0aGUgcmVxdWVzdCB0byBVMkYgY29tbWFuZC4iX3MgfSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCFyZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5leGNsdWRl
Q3JlZGVudGlhbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9uZXh0TGlzdEluZGV4
KTsKLSAgICAgICAgY2hlY2tFeGNsdWRlTGlzdChtX25leHRMaXN0SW5kZXgrKyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaXNzdWVSZWdpc3RlckNvbW1hbmQoKTsKLX0KLQotdm9pZCBV
MmZIaWRBdXRoZW50aWNhdG9yOjpjaGVja0V4Y2x1ZGVMaXN0KHNpemVfdCBpbmRleCkKLXsKLSAg
ICBpZiAoaW5kZXggPj0gcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRl
bnRpYWxzLnNpemUoKSkgewotICAgICAgICBpc3N1ZVJlZ2lzdGVyQ29tbWFuZCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmQ2hlY2tPbmx5
U2lnbkNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0
aW9ucywgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzW2lu
ZGV4XSk7Ci0gICAgQVNTRVJUKHUyZkNtZCk7Ci0gICAgaXNzdWVOZXdDb21tYW5kKFdURk1vdmUo
KnUyZkNtZCksIENvbW1hbmRUeXBlOjpDaGVja09ubHlDb21tYW5kKTsKLX0KLQotdm9pZCBVMmZI
aWRBdXRoZW50aWNhdG9yOjppc3N1ZVJlZ2lzdGVyQ29tbWFuZCgpCi17Ci0gICAgYXV0byB1MmZD
bWQgPSBjb252ZXJ0VG9VMmZSZWdpc3RlckNvbW1hbmQocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1
ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucyk7Ci0gICAgQVNTRVJUKHUyZkNtZCk7Ci0gICAgaXNz
dWVOZXdDb21tYW5kKFdURk1vdmUoKnUyZkNtZCksIENvbW1hbmRUeXBlOjpSZWdpc3RlckNvbW1h
bmQpOwotfQotCi12b2lkIFUyZkhpZEF1dGhlbnRpY2F0b3I6OmdldEFzc2VydGlvbigpCi17Ci0g
ICAgaWYgKCFpc0NvbnZlcnRpYmxlVG9VMmZTaWduQ29tbWFuZChyZXF1ZXN0RGF0YSgpLnJlcXVl
c3RPcHRpb25zKSkgewotICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgTm90
U3VwcG9ydGVkRXJyb3IsICJDYW5ub3QgY29udmVydCB0aGUgcmVxdWVzdCB0byBVMkYgY29tbWFu
ZC4iX3MgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKCFtX25leHRMaXN0
SW5kZXgpOwotICAgIGlzc3VlU2lnbkNvbW1hbmQobV9uZXh0TGlzdEluZGV4KyspOwotfQotCi12
b2lkIFUyZkhpZEF1dGhlbnRpY2F0b3I6Omlzc3VlU2lnbkNvbW1hbmQoc2l6ZV90IGluZGV4KQot
ewotICAgIGlmIChpbmRleCA+PSByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93Q3Jl
ZGVudGlhbHMuc2l6ZSgpKSB7Ci0gICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEg
eyBOb3RBbGxvd2VkRXJyb3IsICJObyBjcmVkZW50aWFscyBmcm9tIHRoZSBhbGxvd0NyZWRlbnRp
YWxzIGxpc3QgaXMgZm91bmQgaW4gdGhlIGF1dGhlbnRpY2F0b3IuIl9zIH0pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmU2lnbkNvbW1hbmQo
cmVxdWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLCByZXF1ZXN0
RGF0YSgpLnJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHNbaW5kZXhdLmlkVmVjdG9yLCBt
X2lzQXBwSWQpOwotICAgIEFTU0VSVCh1MmZDbWQpOwotICAgIGlzc3VlTmV3Q29tbWFuZChXVEZN
b3ZlKCp1MmZDbWQpLCBDb21tYW5kVHlwZTo6U2lnbkNvbW1hbmQpOwotfQotCi12b2lkIFUyZkhp
ZEF1dGhlbnRpY2F0b3I6Omlzc3VlTmV3Q29tbWFuZChWZWN0b3I8dWludDhfdD4mJiBjb21tYW5k
LCBDb21tYW5kVHlwZSB0eXBlKQotewotICAgIG1fbGFzdENvbW1hbmQgPSBXVEZNb3ZlKGNvbW1h
bmQpOwotICAgIG1fbGFzdENvbW1hbmRUeXBlID0gdHlwZTsKLSAgICBpc3N1ZUNvbW1hbmQobV9s
YXN0Q29tbWFuZCwgbV9sYXN0Q29tbWFuZFR5cGUpOwotfQotCi12b2lkIFUyZkhpZEF1dGhlbnRp
Y2F0b3I6Omlzc3VlQ29tbWFuZChjb25zdCBWZWN0b3I8dWludDhfdD4mIGNvbW1hbmQsIENvbW1h
bmRUeXBlIHR5cGUpCi17Ci0gICAgbV9kcml2ZXItPnRyYW5zYWN0KFZlY3Rvcjx1aW50OF90Pihj
b21tYW5kKSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlXShWZWN0b3I8dWlu
dDhfdD4mJiBkYXRhKSB7Ci0gICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
ICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdlYWtUaGlz
LT5yZXNwb25zZVJlY2VpdmVkKFdURk1vdmUoZGF0YSksIHR5cGUpOwotICAgIH0pOwotfQotCi12
b2lkIFUyZkhpZEF1dGhlbnRpY2F0b3I6OnJlc3BvbnNlUmVjZWl2ZWQoVmVjdG9yPHVpbnQ4X3Q+
JiYgcmVzcG9uc2UsIENvbW1hbmRUeXBlIHR5cGUpCi17Ci0gICAgYXV0byBhcGR1UmVzcG9uc2Ug
PSBBcGR1UmVzcG9uc2U6OmNyZWF0ZUZyb21NZXNzYWdlKHJlc3BvbnNlKTsKLSAgICBpZiAoIWFw
ZHVSZXNwb25zZSkgewotICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5r
bm93bkVycm9yLCAiQ291bGRuJ3QgcGFyc2UgdGhlIEFQRFUgcmVzcG9uc2UuIl9zIH0pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDb21t
YW5kVHlwZTo6UmVnaXN0ZXJDb21tYW5kOgotICAgICAgICBjb250aW51ZVJlZ2lzdGVyQ29tbWFu
ZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChXVEZNb3ZlKCphcGR1UmVzcG9uc2UpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgQ29tbWFuZFR5cGU6OkNoZWNrT25seUNvbW1hbmQ6Ci0gICAgICAg
IGNvbnRpbnVlQ2hlY2tPbmx5Q29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChXVEZNb3ZlKCph
cGR1UmVzcG9uc2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29tbWFuZFR5cGU6OkJv
Z3VzQ29tbWFuZDoKLSAgICAgICAgY29udGludWVCb2d1c0NvbW1hbmRBZnRlclJlc3BvbnNlUmVj
ZWl2ZWQoV1RGTW92ZSgqYXBkdVJlc3BvbnNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IENvbW1hbmRUeXBlOjpTaWduQ29tbWFuZDoKLSAgICAgICAgY29udGludWVTaWduQ29tbWFuZEFm
dGVyUmVzcG9uc2VSZWNlaXZlZChXVEZNb3ZlKCphcGR1UmVzcG9uc2UpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBVMmZIaWRB
dXRoZW50aWNhdG9yOjpjb250aW51ZVJlZ2lzdGVyQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZl
ZChBcGR1UmVzcG9uc2UmJiBhcGR1UmVzcG9uc2UpCi17Ci0gICAgc3dpdGNoIChhcGR1UmVzcG9u
c2Uuc3RhdHVzKCkpIHsKLSAgICBjYXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19OT19FUlJP
UjogewotICAgICAgICBhdXRvIHJlc3BvbnNlID0gcmVhZFUyZlJlZ2lzdGVyUmVzcG9uc2UocmVx
dWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMucnAuaWQsIGFwZHVSZXNwb25zZS5kYXRhKCksIHJl
cXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zLmF0dGVzdGF0aW9uKTsKLSAgICAgICAgaWYgKCFy
ZXNwb25zZSkgewotICAgICAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IFVu
a25vd25FcnJvciwgIkNvdWxkbid0IHBhcnNlIHRoZSBVMkYgcmVnaXN0ZXIgcmVzcG9uc2UuIl9z
IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJlY2VpdmVSZXNw
b25kKFdURk1vdmUoKnJlc3BvbnNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2Fz
ZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1dfQ09ORElUSU9OU19OT1RfU0FUSVNGSUVEOgotICAg
ICAgICAvLyBQb2xsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB0ZXN0IG9mIHVzZXIgcHJlc2VuY2Uu
Ci0gICAgICAgIG1fcmV0cnlUaW1lci5zdGFydE9uZVNob3QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vj
b25kcyhyZXRyeVRpbWVPdXRWYWx1ZU1zKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9yLCBt
YWtlU3RyaW5nKCJVbmtub3duIGludGVybmFsIGVycm9yLiBFcnJvciBjb2RlOiAiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oYXBkdVJlc3BvbnNlLnN0YXR1cygpKSkgfSk7Ci0gICAgfQotfQotCi12
b2lkIFUyZkhpZEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlQ2hlY2tPbmx5Q29tbWFuZEFmdGVyUmVz
cG9uc2VSZWNlaXZlZChBcGR1UmVzcG9uc2UmJiBhcGR1UmVzcG9uc2UpCi17Ci0gICAgc3dpdGNo
IChhcGR1UmVzcG9uc2Uuc3RhdHVzKCkpIHsKLSAgICBjYXNlIEFwZHVSZXNwb25zZTo6U3RhdHVz
OjpTV19OT19FUlJPUjoKLSAgICBjYXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19DT05ESVRJ
T05TX05PVF9TQVRJU0ZJRUQ6Ci0gICAgICAgIGlzc3VlTmV3Q29tbWFuZChjb25zdHJ1Y3RCb2d1
c1UyZlJlZ2lzdHJhdGlvbkNvbW1hbmQoKSwgQ29tbWFuZFR5cGU6OkJvZ3VzQ29tbWFuZCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBjaGVja0V4Y2x1ZGVMaXN0KG1f
bmV4dExpc3RJbmRleCsrKTsKLSAgICB9Ci19Ci0KLXZvaWQgVTJmSGlkQXV0aGVudGljYXRvcjo6
Y29udGludWVCb2d1c0NvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoQXBkdVJlc3BvbnNlJiYg
YXBkdVJlc3BvbnNlKQotewotICAgIHN3aXRjaCAoYXBkdVJlc3BvbnNlLnN0YXR1cygpKSB7Ci0g
ICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1dfTk9fRVJST1I6Ci0gICAgICAgIHJlY2Vp
dmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBJbnZhbGlkU3RhdGVFcnJvciwgIkF0IGxlYXN0IG9u
ZSBjcmVkZW50aWFsIG1hdGNoZXMgYW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBs
aXN0IGluIHRoZSBhdXRoZW50aWNhdG9yLiJfcyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNXX0NPTkRJVElPTlNfTk9UX1NBVElTRklFRDoKLSAg
ICAgICAgLy8gUG9sbGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdGVzdCBvZiB1c2VyIHByZXNlbmNl
LgotICAgICAgICBtX3JldHJ5VGltZXIuc3RhcnRPbmVTaG90KFNlY29uZHM6OmZyb21NaWxsaXNl
Y29uZHMocmV0cnlUaW1lT3V0VmFsdWVNcykpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwg
bWFrZVN0cmluZygiVW5rbm93biBpbnRlcm5hbCBlcnJvci4gRXJyb3IgY29kZTogIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGFwZHVSZXNwb25zZS5zdGF0dXMoKSkpIH0pOwotICAgIH0KLX0KLQot
dm9pZCBVMmZIaWRBdXRoZW50aWNhdG9yOjpjb250aW51ZVNpZ25Db21tYW5kQWZ0ZXJSZXNwb25z
ZVJlY2VpdmVkKEFwZHVSZXNwb25zZSYmIGFwZHVSZXNwb25zZSkKLXsKLSAgICBzd2l0Y2ggKGFw
ZHVSZXNwb25zZS5zdGF0dXMoKSkgewotICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNX
X05PX0VSUk9SOiB7Ci0gICAgICAgIE9wdGlvbmFsPFB1YmxpY0tleUNyZWRlbnRpYWxEYXRhPiBy
ZXNwb25zZTsKLSAgICAgICAgaWYgKG1faXNBcHBJZCkgewotICAgICAgICAgICAgQVNTRVJUKHJl
cXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9ucyAmJiAhcmVxdWVzdERhdGEoKS5y
ZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSk7Ci0gICAgICAgICAgICBy
ZXNwb25zZSA9IHJlYWRVMmZTaWduUmVzcG9uc2UocmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9u
cy5leHRlbnNpb25zLT5hcHBpZCwgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5hbGxvd0Ny
ZWRlbnRpYWxzW21fbmV4dExpc3RJbmRleCAtIDFdLmlkVmVjdG9yLCBhcGR1UmVzcG9uc2UuZGF0
YSgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXNwb25zZSA9IHJlYWRVMmZTaWdu
UmVzcG9uc2UocmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5ycElkLCByZXF1ZXN0RGF0YSgp
LnJlcXVlc3RPcHRpb25zLmFsbG93Q3JlZGVudGlhbHNbbV9uZXh0TGlzdEluZGV4IC0gMV0uaWRW
ZWN0b3IsIGFwZHVSZXNwb25zZS5kYXRhKCkpOwotICAgICAgICBpZiAoIXJlc3BvbnNlKSB7Ci0g
ICAgICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9yLCAi
Q291bGRuJ3QgcGFyc2UgdGhlIFUyRiBzaWduIHJlc3BvbnNlLiJfcyB9KTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9pc0FwcElkKQotICAgICAgICAgICAg
cmVzcG9uc2UtPmFwcGlkID0gbV9pc0FwcElkOwotCi0gICAgICAgIHJlY2VpdmVSZXNwb25kKFdU
Rk1vdmUoKnJlc3BvbnNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBBcGR1
UmVzcG9uc2U6OlN0YXR1czo6U1dfQ09ORElUSU9OU19OT1RfU0FUSVNGSUVEOgotICAgICAgICAv
LyBQb2xsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB0ZXN0IG9mIHVzZXIgcHJlc2VuY2UuCi0gICAg
ICAgIG1fcmV0cnlUaW1lci5zdGFydE9uZVNob3QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhy
ZXRyeVRpbWVPdXRWYWx1ZU1zKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFwZHVSZXNw
b25zZTo6U3RhdHVzOjpTV19XUk9OR19EQVRBOgotICAgICAgICBpZiAocmVxdWVzdERhdGEoKS5y
ZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zICYmICFyZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25z
LmV4dGVuc2lvbnMtPmFwcGlkLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW1faXNBcHBJ
ZCkgewotICAgICAgICAgICAgICAgIG1faXNBcHBJZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
aXNzdWVTaWduQ29tbWFuZChtX25leHRMaXN0SW5kZXggLSAxKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2lzQXBwSWQgPSBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBpc3N1ZVNpZ25Db21tYW5kKG1fbmV4dExpc3RJbmRleCsrKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlzc3VlU2lnbkNvbW1hbmQobV9u
ZXh0TGlzdEluZGV4KyspOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1UyZkhpZEF1dGhl
bnRpY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2Zp
ZG8vVTJmSGlkQXV0aGVudGljYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
YWFiNjY2ZWQzZjljNWEyNmM1Y2NjMzc1MTE4NWZlYzM3ODIzODk5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL2ZpZG8vVTJmSGlkQXV0aGVudGljYXRvci5oCisrKyAvZGV2L251bGwK
QEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KFdFQl9BVVRITikgJiYgUExBVEZPUk0oTUFDKQotCi0jaW5jbHVkZSAiQXV0aGVudGljYXRvci5o
IgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLW5hbWVzcGFjZSBhcGR1IHsKLWNsYXNzIEFw
ZHVSZXNwb25zZTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEN0YXBIaWREcml2
ZXI7Ci0KLWNsYXNzIFUyZkhpZEF1dGhlbnRpY2F0b3IgZmluYWwgOiBwdWJsaWMgQXV0aGVudGlj
YXRvciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxVMmZIaWRBdXRoZW50aWNhdG9yPiBjcmVh
dGUoc3RkOjp1bmlxdWVfcHRyPEN0YXBIaWREcml2ZXI+JiYgZHJpdmVyKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVTJmSGlkQXV0aGVudGljYXRvcihXVEZNb3ZlKGRyaXZl
cikpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgVTJmSGlkQXV0aGVudGljYXRv
cihzdGQ6OnVuaXF1ZV9wdHI8Q3RhcEhpZERyaXZlcj4mJik7Ci0KLSAgICB2b2lkIG1ha2VDcmVk
ZW50aWFsKCkgZmluYWw7Ci0gICAgdm9pZCBjaGVja0V4Y2x1ZGVMaXN0KHNpemVfdCBpbmRleCk7
Ci0gICAgdm9pZCBpc3N1ZVJlZ2lzdGVyQ29tbWFuZCgpOwotICAgIHZvaWQgZ2V0QXNzZXJ0aW9u
KCkgZmluYWw7Ci0gICAgdm9pZCBpc3N1ZVNpZ25Db21tYW5kKHNpemVfdCBpbmRleCk7Ci0KLSAg
ICBlbnVtIGNsYXNzIENvbW1hbmRUeXBlIDogdWludDhfdCB7Ci0gICAgICAgIFJlZ2lzdGVyQ29t
bWFuZCwKLSAgICAgICAgQ2hlY2tPbmx5Q29tbWFuZCwKLSAgICAgICAgQm9ndXNDb21tYW5kLAot
ICAgICAgICBTaWduQ29tbWFuZAotICAgIH07Ci0gICAgdm9pZCBpc3N1ZU5ld0NvbW1hbmQoVmVj
dG9yPHVpbnQ4X3Q+JiYgY29tbWFuZCwgQ29tbWFuZFR5cGUpOwotICAgIHZvaWQgcmV0cnlMYXN0
Q29tbWFuZCgpIHsgaXNzdWVDb21tYW5kKG1fbGFzdENvbW1hbmQsIG1fbGFzdENvbW1hbmRUeXBl
KTsgfQotICAgIHZvaWQgaXNzdWVDb21tYW5kKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY29tbWFu
ZCwgQ29tbWFuZFR5cGUpOwotICAgIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8dWludDhf
dD4mJiByZXNwb25zZSwgQ29tbWFuZFR5cGUpOwotICAgIHZvaWQgY29udGludWVSZWdpc3RlckNv
bW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoYXBkdTo6QXBkdVJlc3BvbnNlJiYpOwotICAgIHZv
aWQgY29udGludWVDaGVja09ubHlDb21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKGFwZHU6OkFw
ZHVSZXNwb25zZSYmKTsKLSAgICB2b2lkIGNvbnRpbnVlQm9ndXNDb21tYW5kQWZ0ZXJSZXNwb25z
ZVJlY2VpdmVkKGFwZHU6OkFwZHVSZXNwb25zZSYmKTsKLSAgICB2b2lkIGNvbnRpbnVlU2lnbkNv
bW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoYXBkdTo6QXBkdVJlc3BvbnNlJiYpOwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEN0YXBIaWREcml2ZXI+IG1fZHJpdmVyOwotICAgIFJ1bkxvb3A6OlRp
bWVyPFUyZkhpZEF1dGhlbnRpY2F0b3I+IG1fcmV0cnlUaW1lcjsKLSAgICBWZWN0b3I8dWludDhf
dD4gbV9sYXN0Q29tbWFuZDsKLSAgICBDb21tYW5kVHlwZSBtX2xhc3RDb21tYW5kVHlwZTsKLSAg
ICBzaXplX3QgbV9uZXh0TGlzdEluZGV4IHsgMCB9OwotICAgIGJvb2wgbV9pc0FwcElkIHsgZmFs
c2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVVRITikgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTE2NjQwNjBjYTkzN2I3ODczYjNlNGU0ZTBiZjQ2
ZGU3ZjFmODdmOC4uMzBiMjEzNjMzMzhlNDNjNmMzMTA5MTRkMzQyOTJjM2ExNWI5YzAxNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MDM3LDcgKzEwMzcsNyBAQAogCQk1NzBBQjhGMzIwQUUzQkQ3MDBCOEJFODcgLyogU2VjS2V5UHJv
eHlTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTcwQUI4RjIyMEFFM0JENzAwQjhCRTg3IC8qIFNlY0tleVByb3h5U3RvcmUuaCAqLzsgfTsKIAkJ
NTcyRkQ0NDMyMjI2NUNFMjAwQTFFQ0MzIC8qIFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyRkQ0
NDEyMjI2NUNFMjAwQTFFQ0MzIC8qIFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlci5oICov
OyB9OwogCQk1NzU5N0VCOTIxODExRDlBMDAzN0Y5MjQgLyogQ3RhcEhpZERyaXZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc1OTdFQjcyMTgxMUQ5
QTAwMzdGOTI0IC8qIEN0YXBIaWREcml2ZXIuaCAqLzsgfTsKLQkJNTc1OTdFQkQyMTgxODQ5MDAw
MzdGOTI0IC8qIEN0YXBIaWRBdXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzU5N0VCQjIxODE4NDhGMDAzN0Y5MjQgLyogQ3RhcEhp
ZEF1dGhlbnRpY2F0b3IuaCAqLzsgfTsKKwkJNTc1OTdFQkQyMTgxODQ5MDAwMzdGOTI0IC8qIEN0
YXBBdXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzU5N0VCQjIxODE4NDhGMDAzN0Y5MjQgLyogQ3RhcEF1dGhlbnRpY2F0b3IuaCAq
LzsgfTsKIAkJNTc2Q0E5RDcyMkI4NjIxODAwMzAxNDNDIC8qIFNPQXV0aG9yaXphdGlvbk5TVVJM
RXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
N0ZEMzE3MzIyQjM1MTQ4MDA4RDBFOEIgLyogU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzcyRjIw
NjIxN0RCRDZBMDA1NkJGMkMgLyogSGlkU2VydmljZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc3MkYyMDQyMTdEQkQ2QTAwNTZCRjJDIC8qIEhpZFNl
cnZpY2UuaCAqLzsgfTsKIAkJNTc4REMyOTgyMTU1QTAwMjAwNzRFODE1IC8qIExvY2FsQXV0aGVu
dGljYXRpb25Tb2Z0TGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTc4REMyOTcyMTU1QTAwMTAwNzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25T
b2Z0TGluay5oICovOyB9OwpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIAkJNTdEQ0VEQzMyMTRGMTE0
QzAwMTZCODQ3IC8qIE1vY2tMb2NhbFNlcnZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RENFREMxMjE0RjExNEMwMDE2Qjg0NyAvKiBNb2NrTG9j
YWxTZXJ2aWNlLmggKi87IH07CiAJCTU3RENFREM3MjE0RjE4MzAwMDE2Qjg0NyAvKiBNb2NrTG9j
YWxDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1N0RDRURDNTIxNEYxODMwMDAxNkI4NDcgLyogTW9ja0xvY2FsQ29ubmVjdGlvbi5oICov
OyB9OwogCQk1N0RDRURDQjIxNEY0RTQyMDAxNkI4NDcgLyogTW9ja0F1dGhlbnRpY2F0b3JNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0RD
RURDOTIxNEY0RTQyMDAxNkI4NDcgLyogTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmggKi87IH07
Ci0JCTU3RUIyRTNBMjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRBdXRoZW50aWNhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VCMkUzODIxRTE5
ODNFMDBCODlDREYgLyogVTJmSGlkQXV0aGVudGljYXRvci5oICovOyB9OworCQk1N0VCMkUzQTIx
RTE5ODNFMDBCODlDREYgLyogVTJmQXV0aGVudGljYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdFQjJFMzgyMUUxOTgzRTAwQjg5Q0RGIC8qIFUy
ZkF1dGhlbnRpY2F0b3IuaCAqLzsgfTsKIAkJNTdGRDMxODAyMkIzNTE1ODAwOEQwRThCIC8qIE5h
dmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0ZEMzE3ODIyQjM1MTQ5MDA4RDBFOEIgLyogTmF2aWdh
dGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24uaCAqLzsgfTsKIAkJNTdGRDMxODEyMkIzNTE1QjAw
OEQwRThCIC8qIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxNzAyMkIzNTE0ODAwOEQwRThCIC8q
IFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oICovOyB9OwogCQk1N0ZEMzE4MjIyQjM1MTVF
MDA4RDBFOEIgLyogUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0ZEMzE3NDIyQjM1MTQ5MDA4RDBF
OEIgLyogUmVkaXJlY3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi87IH07CkBAIC0zNDY2LDYg
KzM0NjYsNyBAQAogCQk1NzBBQjhGMjIwQUUzQkQ3MDBCOEJFODcgLyogU2VjS2V5UHJveHlTdG9y
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZWNLZXlQcm94eVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU3MEFCOTAwMjBCMjUxNzQwMEI4QkU4NyAvKiBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3
MEFCOTAzMjBCMjU0MUMwMEI4QkU4NyAvKiBTZWNLZXlQcm94eVN0b3JlLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VjS2V5UHJveHlTdG9yZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTcwQjczQ0YyMzAyMzZERDAwRkFFQzUzIC8qIEN0YXBE
cml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3RhcERyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NzJGRDQ0MTIyMjY1Q0UyMDBBMUVDQzMgLyogV2ViVmlld0RpZE1vdmVUb1dp
bmRvd09ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNl
cnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzUwNzVBNzIwQUI3NjM2MDA2
OTNFQTkgLyogV2ViQ3JlZGVudGlhbE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNy
ZWRlbnRpYWxNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3NTBGMzJBMjAz
MkQ0RTUwMDM4OTM0NyAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uLmZyYW1ld29yayAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3Jr
OyBuYW1lID0gTG9jYWxBdXRoZW50aWNhdGlvbi5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0xvY2FsQXV0aGVudGljYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVl
ID0gU0RLUk9PVDsgfTsKQEAgLTM0NzQsOCArMzQ3NSw4IEBACiAJCTU3NTZERDc2MjE4RDE0QTIw
MEQ0RUU2QSAvKiBNb2NrSGlkQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrSGlkQ29u
bmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzU2REQ3NzIxOEQxNEEy
MDBENEVFNkEgLyogTW9ja0hpZENvbm5lY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9j
a0hpZENvbm5lY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzU5N0VC
NzIxODExRDlBMDAzN0Y5MjQgLyogQ3RhcEhpZERyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdGFw
SGlkRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU3NTk3RUJCMjE4MTg0
OEYwMDM3RjkyNCAvKiBDdGFwSGlkQXV0aGVudGljYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDdGFw
SGlkQXV0aGVudGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1NzU5N0VC
QzIxODE4NDhGMDAzN0Y5MjQgLyogQ3RhcEhpZEF1dGhlbnRpY2F0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ3RhcEhpZEF1dGhlbnRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1NzU5N0VCQjIxODE4NDhGMDAzN0Y5MjQgLyogQ3RhcEF1dGhlbnRpY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ3RhcEF1dGhlbnRpY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTc1OTdFQkMyMTgxODQ4RjAwMzdGOTI0IC8qIEN0YXBBdXRoZW50aWNhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEN0YXBBdXRoZW50aWNhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTc1OTdFQzAyMTgxOEJFMjAwMzdGOTI0IC8qIEN0YXBIaWREcml2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3RhcEhpZERyaXZl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3NjA4MjhCMjAyOTg1NDIwMDEx
NjY3OCAvKiBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU3NjA4MjhDMjAyOTg1NDIwMDExNjY3OCAvKiBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MTYsOCArMzUxNyw4IEBACiAJCTU3RENF
REM2MjE0RjE4MzAwMDE2Qjg0NyAvKiBNb2NrTG9jYWxDb25uZWN0aW9uLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gTW9ja0xvY2FsQ29ubmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTdEQ0VEQzkyMTRGNEU0MjAwMTZCODQ3IC8qIE1vY2tBdXRoZW50aWNhdG9yTWFu
YWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrQXV0aGVudGljYXRvck1hbmFnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTdEQ0VEQ0QyMTRGNTE2ODAwMTZCODQ3IC8qIE1vY2tB
dXRoZW50aWNhdG9yTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNb2NrQXV0aGVudGljYXRvck1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1N0VCMkUzODIxRTE5ODNFMDBCODlDREYgLyogVTJmSGlkQXV0aGVudGljYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVMmZIaWRBdXRoZW50aWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTU3RUIyRTM5MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRBdXRoZW50aWNh
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFUyZkhpZEF1dGhlbnRpY2F0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1N0VCMkUzODIxRTE5ODNFMDBCODlDREYgLyogVTJm
QXV0aGVudGljYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVMmZBdXRoZW50aWNhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3RUIyRTM5MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZB
dXRoZW50aWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFUyZkF1dGhlbnRpY2F0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1N0ZEMzE3MDIyQjM1MTQ4MDA4RDBFOEIg
LyogUG9wVXBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1N0ZEMzE3MTIyQjM1MTQ4MDA4RDBFOEIgLyogV0tTT0F1dGhvcml6YXRp
b25EZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1NPQXV0aG9y
aXphdGlvbkRlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3RkQzMTcy
MjJCMzUxNDgwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjk1NSwxMiArNjk1NiwxMyBAQAogCQk1NzU5
N0VCRjIxODE4NEIyMDAzN0Y5MjQgLyogZmlkbyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCi0JCQkJNTc1OTdFQkMyMTgxODQ4RjAwMzdGOTI0IC8qIEN0YXBIaWRB
dXRoZW50aWNhdG9yLmNwcCAqLywKLQkJCQk1NzU5N0VCQjIxODE4NDhGMDAzN0Y5MjQgLyogQ3Rh
cEhpZEF1dGhlbnRpY2F0b3IuaCAqLywKKwkJCQk1NzU5N0VCQzIxODE4NDhGMDAzN0Y5MjQgLyog
Q3RhcEF1dGhlbnRpY2F0b3IuY3BwICovLAorCQkJCTU3NTk3RUJCMjE4MTg0OEYwMDM3RjkyNCAv
KiBDdGFwQXV0aGVudGljYXRvci5oICovLAorCQkJCTU3MEI3M0NGMjMwMjM2REQwMEZBRUM1MyAv
KiBDdGFwRHJpdmVyLmggKi8sCiAJCQkJNTc1OTdFQzAyMTgxOEJFMjAwMzdGOTI0IC8qIEN0YXBI
aWREcml2ZXIuY3BwICovLAogCQkJCTU3NTk3RUI3MjE4MTFEOUEwMDM3RjkyNCAvKiBDdGFwSGlk
RHJpdmVyLmggKi8sCi0JCQkJNTdFQjJFMzkyMUUxOTgzRTAwQjg5Q0RGIC8qIFUyZkhpZEF1dGhl
bnRpY2F0b3IuY3BwICovLAotCQkJCTU3RUIyRTM4MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRB
dXRoZW50aWNhdG9yLmggKi8sCisJCQkJNTdFQjJFMzkyMUUxOTgzRTAwQjg5Q0RGIC8qIFUyZkF1
dGhlbnRpY2F0b3IuY3BwICovLAorCQkJCTU3RUIyRTM4MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZB
dXRoZW50aWNhdG9yLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGZpZG87CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwpAQCAtOTM0Nyw3ICs5MzQ5LDcgQEAKIAkJCQkzN0MyMUNBRTFFOTk0QzBD
MDAyOUQ1RjkgLyogQ29yZVByZWRpY3Rpb25TUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCUI4NzhC
NjE1MTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUExRkI2ODI3MUY2RTUxQzEwMEM0M0Y5RiAvKiBDcmFzaFJlcG9ydGVyQ2xpZW50U1BJLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1NzU5N0VCRDIxODE4NDkwMDAzN0Y5MjQgLyogQ3RhcEhpZEF1
dGhlbnRpY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3NTk3RUJEMjE4MTg0OTAwMDM3Rjky
NCAvKiBDdGFwQXV0aGVudGljYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTc1OTdFQjkyMTgx
MUQ5QTAwMzdGOTI0IC8qIEN0YXBIaWREcml2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1NUY5
MTcxMUM1OTY3NkUwMDI5RTkyRCAvKiBEYXRhRGV0ZWN0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUM3NTM4MDE4M0JFNTBGMDA3MkNCMTUgLyogRGF0YVJlZmVyZW5jZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC05Njk1LDcgKzk2OTcsNyBAQAogCQkJCTFBRjA1RDg3MTQ2ODgzNDgwMDhC
MUU4MSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRjgzMzY4NjFGQTEzOURGMDBDNkUwODAgLyogVG91Y2hCYXJNZW51RGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDZCRUI2RTMyMkZCQjIxQTAwMjY5ODY3IC8qIFRyYW5zaWVudExv
Y2FsU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTdFQjJFM0EyMUUxOTgz
RTAwQjg5Q0RGIC8qIFUyZkhpZEF1dGhlbnRpY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3
RUIyRTNBMjFFMTk4M0UwMEI4OUNERiAvKiBVMmZBdXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUZFNDM2NjE4QjZDMDgxMDA5QzdBNDggLyogVUlEZWxlZ2F0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE1QkUxQjUxRDU5MTdGRjAwREQ3QzY4IC8qIFVJR2FtZXBhZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE1QkUxQTkxRDU1MjkzNDAwREQ3QzY4IC8qIFVJR2FtZXBhZFByb3Zp
ZGVyLmggaW4gSGVhZGVycyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376138</attachid>
            <date>2019-08-12 21:47:50 -0700</date>
            <delta_ts>2019-08-13 13:32:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191527-20190812214749.patch</filename>
            <type>text/plain</type>
            <size>64630</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkyNzRkZDkxY2EzYWM2ZmUx
Y2NmN2RlYTNiNWVlM2ExODBkNTY1NTMuLmZiYjA2NDM5MDEyMzA2MmM5NzQ5YWM0NTA2ODExY2Yx
OTJkMjRlN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTktMDgtMTIgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViQXV0aG5dIE1ha2UgQ3Rh
cEhpZEF1dGhlbnRpY2F0b3IvVTJmSGlkQXV0aGVudGljYXRvciB0byBDdGFwQXV0aGVudGljYXRv
ci9VMmZBdXRoZW50aWNhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTE1MjcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0MjM3MTQ2PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
bWFrZXMgYSBBQkMgQ3RhcERyaXZlciwgd2hpY2ggc3VmZmVycyBhcyBhbiBpbnRlcmZhY2UgZm9y
IEN0YXBBdXRoZW50aWNhdG9yL1UyZkF1dGhlbnRpY2F0b3IgdG8gdXNlLAorICAgICAgICBzdWNo
IHRoYXQgQ3RhcEF1dGhlbnRpY2F0b3IvVTJmQXV0aGVudGljYXRvciBjYW4gYmUgc2hhcmVkIGFj
cm9zcyBkaWZmZXJlbnQgdHJhbnNwb3J0cy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gcmVu
YW1lcyBDdGFwSGlkQXV0aGVudGljYXRvci9VMmZIaWRBdXRoZW50aWNhdG9yIHRvIEN0YXBBdXRo
ZW50aWNhdG9yL1UyZkF1dGhlbnRpY2F0b3IgY29ycmVzcG9uZGluZ2x5LgorCisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29h
L0hpZFNlcnZpY2UubW06CisgICAgICAgIChXZWJLaXQ6OkhpZFNlcnZpY2U6OmNvbnRpbnVlQWRk
RGV2aWNlQWZ0ZXJHZXRJbmZvKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBIaWRBdXRoZW50aWNhdG9yLmNw
cC4KKyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6OkN0YXBBdXRoZW50aWNhdG9y
KToKKyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKToK
KyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRp
YWxBZnRlclJlc3BvbnNlUmVjZWl2ZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpDdGFwQXV0
aGVudGljYXRvcjo6Z2V0QXNzZXJ0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRp
Y2F0b3I6OmNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKToKKyAgICAg
ICAgKFdlYktpdDo6Q3RhcEF1dGhlbnRpY2F0b3I6OnRyeURvd25ncmFkZSk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9D
dGFwSGlkQXV0aGVudGljYXRvci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9maWRvL0N0YXBEcml2ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlkRHJpdmVyLmg6Cisg
ICAgICAgIChXZWJLaXQ6OkN0YXBIaWREcml2ZXI6OnNldFByb3RvY29sKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9VMmZBdXRoZW50aWNhdG9yLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8v
VTJmSGlkQXV0aGVudGljYXRvci5jcHAuCisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0
b3I6OlUyZkF1dGhlbnRpY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9y
OjptYWtlQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6OmNo
ZWNrRXhjbHVkZUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjppc3N1
ZVJlZ2lzdGVyQ29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6Omdl
dEFzc2VydGlvbik6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6Omlzc3VlU2ln
bkNvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjppc3N1ZU5ld0Nv
bW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjppc3N1ZUNvbW1hbmQp
OgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjpyZXNwb25zZVJlY2VpdmVkKToK
KyAgICAgICAgKFdlYktpdDo6VTJmQXV0aGVudGljYXRvcjo6Y29udGludWVSZWdpc3RlckNvbW1h
bmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNh
dG9yOjpjb250aW51ZUNoZWNrT25seUNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpVMmZBdXRoZW50aWNhdG9yOjpjb250aW51ZUJvZ3VzQ29tbWFuZEFmdGVy
UmVzcG9uc2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6OlUyZkF1dGhlbnRpY2F0b3I6OmNv
bnRpbnVlU2lnbkNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1UyZkF1dGhlbnRpY2F0b3IuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vVTJmSGlk
QXV0aGVudGljYXRvci5oLgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorCiAyMDE5LTA4LTA4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZS5jb20+CiAKICAgICAgICAgW2lPU10gUG9zaXRpb24gaW1hZ2UgaW5mb3JtYXRpb24gc2hvdWxk
IHJlc3BlY3QgdGhlIGltYWdlIG9yaWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA1YjRmZjY5YzU0
ZjUwMjdhYzllNDRkOTA1ODAxZGIzYmY5YWRhZjIzLi5kOTgxOTczOTczYjE3MDljYTg5MzFhNGJi
ZmI0OGZmNGIyMDVhMGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTQwNyw5ICs0MDcsOSBAQCBVSVByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCiBVSVByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuY3BwCiBVSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCiAKLVVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9maWRvL0N0YXBIaWRBdXRoZW50aWNhdG9yLmNwcAorVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwCiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vZmlkby9DdGFwSGlkRHJpdmVyLmNwcAotVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2Zp
ZG8vVTJmSGlkQXV0aGVudGljYXRvci5jcHAKK1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9m
aWRvL1UyZkF1dGhlbnRpY2F0b3IuY3BwCiAKIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9N
b2NrL01vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9Nb2NrL01vY2tIaWRDb25uZWN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvSGlkU2VydmljZS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0hpZFNlcnZpY2UubW0K
aW5kZXggY2EyNmU1MWQ3YTQwNjRhYTI4MTI3YzBmMDFkNTRhNGUwYWMyNDQ2My4uOWVhZTE4ZWRk
NWY0ZDJkYzVkZjM4ZTk2ZDA1MDUwOTNiY2E5YjM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvSGlkU2VydmljZS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9IaWRTZXJ2aWNl
Lm1tCkBAIC0yOCwxMCArMjgsMTAgQEAKIAogI2lmIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRG
T1JNKE1BQykKIAotI2ltcG9ydCAiQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaCIKKyNpbXBvcnQgIkN0
YXBBdXRoZW50aWNhdG9yLmgiCiAjaW1wb3J0ICJDdGFwSGlkRHJpdmVyLmgiCiAjaW1wb3J0ICJI
aWRDb25uZWN0aW9uLmgiCi0jaW1wb3J0ICJVMmZIaWRBdXRoZW50aWNhdG9yLmgiCisjaW1wb3J0
ICJVMmZBdXRoZW50aWNhdG9yLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0RldmljZVJlcXVlc3RDb252
ZXJ0ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRGV2aWNlUmVzcG9uc2VDb252ZXJ0ZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvRmlkb0NvbnN0YW50cy5oPgpAQCAtMTEyLDEyICsxMTIsMTIgQEAgdm9p
ZCBIaWRTZXJ2aWNlOjpjb250aW51ZUFkZERldmljZUFmdGVyR2V0SW5mbyhDdGFwSGlkRHJpdmVy
KiBwdHIsIFZlY3Rvcjx1aW50OF8KIAogICAgIGF1dG8gaW5mbyA9IHJlYWRDVEFQR2V0SW5mb1Jl
c3BvbnNlKHJlc3BvbnNlKTsKICAgICBpZiAoaW5mbyAmJiBpbmZvLT52ZXJzaW9ucygpLmZpbmQo
UHJvdG9jb2xWZXJzaW9uOjprQ3RhcCkgIT0gaW5mby0+dmVyc2lvbnMoKS5lbmQoKSkgewotICAg
ICAgICBvYnNlcnZlcigpLT5hdXRoZW50aWNhdG9yQWRkZWQoQ3RhcEhpZEF1dGhlbnRpY2F0b3I6
OmNyZWF0ZShXVEZNb3ZlKGRyaXZlciksIFdURk1vdmUoKmluZm8pKSk7CisgICAgICAgIG9ic2Vy
dmVyKCktPmF1dGhlbnRpY2F0b3JBZGRlZChDdGFwQXV0aGVudGljYXRvcjo6Y3JlYXRlKFdURk1v
dmUoZHJpdmVyKSwgV1RGTW92ZSgqaW5mbykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBMT0dfRVJST1IoIkNvdWxkbid0IHBhcnNlIGEgY3RhcCBnZXQgaW5mbyByZXNwb25zZS4iKTsK
ICAgICBkcml2ZXItPnNldFByb3RvY29sKFByb3RvY29sVmVyc2lvbjo6a1UyZik7Ci0gICAgb2Jz
ZXJ2ZXIoKS0+YXV0aGVudGljYXRvckFkZGVkKFUyZkhpZEF1dGhlbnRpY2F0b3I6OmNyZWF0ZShX
VEZNb3ZlKGRyaXZlcikpKTsKKyAgICBvYnNlcnZlcigpLT5hdXRoZW50aWNhdG9yQWRkZWQoVTJm
QXV0aGVudGljYXRvcjo6Y3JlYXRlKFdURk1vdmUoZHJpdmVyKSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwQXV0aGVudGljYXRvci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTAxNTVlZDFiZjYyMGY4MGE4YzRlODg2NjU1MWRjNDg2MzE0MGM2ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8v
Q3RhcEF1dGhlbnRpY2F0b3IuY3BwCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN0YXBBdXRoZW50aWNhdG9yLmgiCisKKyNpZiBF
TkFCTEUoV0VCX0FVVEhOKSAmJiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRlICJDdGFwRHJpdmVy
LmgiCisjaW5jbHVkZSAiQ3RhcEhpZERyaXZlci5oIgorI2luY2x1ZGUgIlUyZkF1dGhlbnRpY2F0
b3IuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RldmljZVJlcXVlc3RDb252ZXJ0ZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0RldmljZVJlc3BvbnNlQ29udmVydGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25EYXRhLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBmaWRvOworCitDdGFw
QXV0aGVudGljYXRvcjo6Q3RhcEF1dGhlbnRpY2F0b3Ioc3RkOjp1bmlxdWVfcHRyPEN0YXBEcml2
ZXI+JiYgZHJpdmVyLCBBdXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlJiYgaW5mbykKKyAgICA6
IG1fZHJpdmVyKFdURk1vdmUoZHJpdmVyKSkKKyAgICAsIG1faW5mbyhXVEZNb3ZlKGluZm8pKQor
eworICAgIC8vIEZJWE1FKDE5MTUyMCk6IFdlIG5lZWQgYSB3YXkgdG8gY29udmVydCBzdGQ6OnVu
aXF1ZV9wdHIgdG8gVW5pcXVlUmVmLgorICAgIEFTU0VSVChtX2RyaXZlcik7Cit9CisKK3ZvaWQg
Q3RhcEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKCkKK3sKKyAgICBBU1NFUlQoIW1faXNE
b3duZ3JhZGVkKTsKKyAgICBhdXRvIGNib3JDbWQgPSBlbmNvZGVNYWtlQ3JlZGVuaXRhbFJlcXVl
c3RBc0NCT1IocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9u
cywgbV9pbmZvLm9wdGlvbnMoKS51c2VyVmVyaWZpY2F0aW9uQXZhaWxhYmlsaXR5KCkpOworICAg
IG1fZHJpdmVyLT50cmFuc2FjdChXVEZNb3ZlKGNib3JDbWQpLCBbd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyldKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpIHsKKyAgICAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgd2Vha1RoaXMtPmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlclJlc3Bv
bnNlUmVjZWl2ZWQoV1RGTW92ZShkYXRhKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ3RhcEF1dGhl
bnRpY2F0b3I6OmNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlclJlc3BvbnNlUmVjZWl2ZWQoVmVj
dG9yPHVpbnQ4X3Q+JiYgZGF0YSkgY29uc3QKK3sKKyAgICBhdXRvIHJlc3BvbnNlID0gcmVhZENU
QVBNYWtlQ3JlZGVudGlhbFJlc3BvbnNlKGRhdGEsIHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRp
b25zLmF0dGVzdGF0aW9uKTsKKyAgICBpZiAoIXJlc3BvbnNlKSB7CisgICAgICAgIGF1dG8gZXJy
b3IgPSBnZXRSZXNwb25zZUNvZGUoZGF0YSk7CisgICAgICAgIGlmIChlcnJvciA9PSBDdGFwRGV2
aWNlUmVzcG9uc2VDb2RlOjprQ3RhcDJFcnJDcmVkZW50aWFsRXhjbHVkZWQpCisgICAgICAgICAg
ICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgSW52YWxpZFN0YXRlRXJyb3IsICJBdCBs
ZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVu
dGlhbHMgbGlzdCBpbiB0aGUgYXV0aGVudGljYXRvci4iX3MgfSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBVbmtub3duRXJyb3IsIG1h
a2VTdHJpbmcoIlVua25vd24gaW50ZXJuYWwgZXJyb3IuIEVycm9yIGNvZGU6ICIsIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KGVycm9yKSkgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVj
ZWl2ZVJlc3BvbmQoV1RGTW92ZSgqcmVzcG9uc2UpKTsKK30KKwordm9pZCBDdGFwQXV0aGVudGlj
YXRvcjo6Z2V0QXNzZXJ0aW9uKCkKK3sKKyAgICBBU1NFUlQoIW1faXNEb3duZ3JhZGVkKTsKKyAg
ICBhdXRvIGNib3JDbWQgPSBlbmNvZGVHZXRBc3NlcnRpb25SZXF1ZXN0QXNDQk9SKHJlcXVlc3RE
YXRhKCkuaGFzaCwgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucywgbV9pbmZvLm9wdGlvbnMo
KS51c2VyVmVyaWZpY2F0aW9uQXZhaWxhYmlsaXR5KCkpOworICAgIG1fZHJpdmVyLT50cmFuc2Fj
dChXVEZNb3ZlKGNib3JDbWQpLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKFZlY3Rv
cjx1aW50OF90PiYmIGRhdGEpIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2Vh
a1RoaXMtPmNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKFdURk1vdmUo
ZGF0YSkpOworICAgIH0pOworfQorCit2b2lkIEN0YXBBdXRoZW50aWNhdG9yOjpjb250aW51ZUdl
dEFzc2VydGlvbkFmdGVyUmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8dWludDhfdD4mJiBkYXRhKQor
eworICAgIGF1dG8gcmVzcG9uc2UgPSByZWFkQ1RBUEdldEFzc2VydGlvblJlc3BvbnNlKGRhdGEp
OworICAgIGlmICghcmVzcG9uc2UpIHsKKyAgICAgICAgYXV0byBlcnJvciA9IGdldFJlc3BvbnNl
Q29kZShkYXRhKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEN0YXBEZXZpY2VSZXNwb25zZUNvZGU6
OmtDdGFwMkVyckludmFsaWRDQk9SICYmIHRyeURvd25ncmFkZSgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgVW5rbm93bkVycm9y
LCBtYWtlU3RyaW5nKCJVbmtub3duIGludGVybmFsIGVycm9yLiBFcnJvciBjb2RlOiAiLCBzdGF0
aWNfY2FzdDx1aW50OF90PihlcnJvcikpIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IHJlY2VpdmVSZXNwb25kKFdURk1vdmUoKnJlc3BvbnNlKSk7Cit9CisKK2Jvb2wgQ3RhcEF1dGhl
bnRpY2F0b3I6OnRyeURvd25ncmFkZSgpCit7CisgICAgaWYgKG1faW5mby52ZXJzaW9ucygpLmZp
bmQoUHJvdG9jb2xWZXJzaW9uOjprVTJmKSA9PSBtX2luZm8udmVyc2lvbnMoKS5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghb2JzZXJ2ZXIoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9pc0Rvd25ncmFkZWQgPSB0cnVlOworICAgIG1fZHJpdmVyLT5zZXRQ
cm90b2NvbChQcm90b2NvbFZlcnNpb246OmtVMmYpOworICAgIG9ic2VydmVyKCktPmRvd25ncmFk
ZSh0aGlzLCBVMmZBdXRoZW50aWNhdG9yOjpjcmVhdGUoV1RGTW92ZShtX2RyaXZlcikpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVVEhOKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRoZW50aWNhdG9yLmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBBdXRo
ZW50aWNhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFlODg4ODc1YTU2ZmVmOGUwOTA4MThhMTg2YzU3MTMz
NTAzY2YzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1
dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEF1dGhlbnRpY2F0b3IuaApAQCAtMCwwICsxLDYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX0FVVEhOKSAmJiBQTEFU
Rk9STShNQUMpCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdG9yLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9BdXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBDdGFwRHJpdmVyOworCitjbGFzcyBDdGFwQXV0aGVudGljYXRvciBmaW5hbCA6IHB1
YmxpYyBBdXRoZW50aWNhdG9yIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEN0YXBBdXRoZW50
aWNhdG9yPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPEN0YXBEcml2ZXI+JiYgZHJpdmVyLCBmaWRv
OjpBdXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlJiYgaW5mbykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEN0YXBBdXRoZW50aWNhdG9yKFdURk1vdmUoZHJpdmVyKSwgV1RG
TW92ZShpbmZvKSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDdGFwQXV0aGVu
dGljYXRvcihzdGQ6OnVuaXF1ZV9wdHI8Q3RhcERyaXZlcj4mJiwgZmlkbzo6QXV0aGVudGljYXRv
ckdldEluZm9SZXNwb25zZSYmKTsKKworICAgIHZvaWQgbWFrZUNyZWRlbnRpYWwoKSBmaW5hbDsK
KyAgICB2b2lkIGNvbnRpbnVlTWFrZUNyZWRlbnRpYWxBZnRlclJlc3BvbnNlUmVjZWl2ZWQoVmVj
dG9yPHVpbnQ4X3Q+JiYpIGNvbnN0OworICAgIHZvaWQgZ2V0QXNzZXJ0aW9uKCkgZmluYWw7Cisg
ICAgdm9pZCBjb250aW51ZUdldEFzc2VydGlvbkFmdGVyUmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8
dWludDhfdD4mJik7CisKKyAgICBib29sIHRyeURvd25ncmFkZSgpOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPEN0YXBEcml2ZXI+IG1fZHJpdmVyOworICAgIGZpZG86OkF1dGhlbnRpY2F0b3JHZXRJ
bmZvUmVzcG9uc2UgbV9pbmZvOworICAgIGJvb2wgbV9pc0Rvd25ncmFkZWQgeyBmYWxzZSB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhO
KSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBEcml2ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcERyaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3OWJl
YTM4ODJkNmQ2MzBkODY3YTViYWIxZTgzZmM2YmM3N2Q5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBEcml2ZXIu
aApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCX0FVVEhOKQorCisjaW5jbHVkZSA8V2ViQ29yZS9GaWRvQ29uc3RhbnRzLmg+CisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgQ3RhcERyaXZlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxD
dGFwRHJpdmVyPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ3RhcERyaXZlcik7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzcG9uc2VDYWxs
YmFjayA9IEZ1bmN0aW9uPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPjsKKworICAgIEN0YXBEcml2
ZXIoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+Q3RhcERyaXZlcigpID0gZGVmYXVsdDsKKwor
ICAgIHZvaWQgc2V0UHJvdG9jb2woZmlkbzo6UHJvdG9jb2xWZXJzaW9uIHByb3RvY29sKSB7IG1f
cHJvdG9jb2wgPSBwcm90b2NvbDsgfQorCisgICAgdmlydHVhbCB2b2lkIHRyYW5zYWN0KFZlY3Rv
cjx1aW50OF90PiYmIGRhdGEsIFJlc3BvbnNlQ2FsbGJhY2smJikgPSAwOworCitwcm90ZWN0ZWQ6
CisgICAgZmlkbzo6UHJvdG9jb2xWZXJzaW9uIHByb3RvY29sKCkgY29uc3QgeyByZXR1cm4gbV9w
cm90b2NvbDsgfQorCitwcml2YXRlOgorICAgIGZpZG86OlByb3RvY29sVmVyc2lvbiBtX3Byb3Rv
Y29sIHsgZmlkbzo6UHJvdG9jb2xWZXJzaW9uOjprQ3RhcCB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlkQXV0aGVu
dGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9m
aWRvL0N0YXBIaWRBdXRoZW50aWNhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZGFjODA1NDM2MzMyYTU1OTViYThhMTllZTAxNjQ5ZDRhY2Q0MTYwOS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBIaWRBdXRoZW50aWNhdG9yLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkN0YXBIaWRBdXRoZW50aWNhdG9yLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FV
VEhOKSAmJiBQTEFURk9STShNQUMpCi0KLSNpbmNsdWRlICJDdGFwSGlkRHJpdmVyLmgiCi0jaW5j
bHVkZSAiVTJmSGlkQXV0aGVudGljYXRvci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGV2aWNlUmVx
dWVzdENvbnZlcnRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGV2aWNlUmVzcG9uc2VDb252ZXJ0
ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkRhdGEuaD4KLSNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcg
bmFtZXNwYWNlIGZpZG87Ci0KLUN0YXBIaWRBdXRoZW50aWNhdG9yOjpDdGFwSGlkQXV0aGVudGlj
YXRvcihzdGQ6OnVuaXF1ZV9wdHI8Q3RhcEhpZERyaXZlcj4mJiBkcml2ZXIsIEF1dGhlbnRpY2F0
b3JHZXRJbmZvUmVzcG9uc2UmJiBpbmZvKQotICAgIDogbV9kcml2ZXIoV1RGTW92ZShkcml2ZXIp
KQotICAgICwgbV9pbmZvKFdURk1vdmUoaW5mbykpCi17Ci0gICAgLy8gRklYTUUoMTkxNTIwKTog
V2UgbmVlZCBhIHdheSB0byBjb252ZXJ0IHN0ZDo6dW5pcXVlX3B0ciB0byBVbmlxdWVSZWYuCi0g
ICAgQVNTRVJUKG1fZHJpdmVyKTsKLX0KLQotdm9pZCBDdGFwSGlkQXV0aGVudGljYXRvcjo6bWFr
ZUNyZWRlbnRpYWwoKQotewotICAgIEFTU0VSVCghbV9pc0Rvd25ncmFkZWQpOwotICAgIGF1dG8g
Y2JvckNtZCA9IGVuY29kZU1ha2VDcmVkZW5pdGFsUmVxdWVzdEFzQ0JPUihyZXF1ZXN0RGF0YSgp
Lmhhc2gsIHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zLCBtX2luZm8ub3B0aW9ucygpLnVz
ZXJWZXJpZmljYXRpb25BdmFpbGFiaWxpdHkoKSk7Ci0gICAgbV9kcml2ZXItPnRyYW5zYWN0KFdU
Rk1vdmUoY2JvckNtZCksIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oVmVjdG9yPHVp
bnQ4X3Q+JiYgZGF0YSkgewotICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
ICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3ZWFrVGhp
cy0+Y29udGludWVNYWtlQ3JlZGVudGlhbEFmdGVyUmVzcG9uc2VSZWNlaXZlZChXVEZNb3ZlKGRh
dGEpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBDdGFwSGlkQXV0aGVudGljYXRvcjo6Y29udGludWVN
YWtlQ3JlZGVudGlhbEFmdGVyUmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8dWludDhfdD4mJiBkYXRh
KSBjb25zdAotewotICAgIGF1dG8gcmVzcG9uc2UgPSByZWFkQ1RBUE1ha2VDcmVkZW50aWFsUmVz
cG9uc2UoZGF0YSwgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMuYXR0ZXN0YXRpb24pOwot
ICAgIGlmICghcmVzcG9uc2UpIHsKLSAgICAgICAgYXV0byBlcnJvciA9IGdldFJlc3BvbnNlQ29k
ZShkYXRhKTsKLSAgICAgICAgaWYgKGVycm9yID09IEN0YXBEZXZpY2VSZXNwb25zZUNvZGU6OmtD
dGFwMkVyckNyZWRlbnRpYWxFeGNsdWRlZCkKLSAgICAgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4
Y2VwdGlvbkRhdGEgeyBJbnZhbGlkU3RhdGVFcnJvciwgIkF0IGxlYXN0IG9uZSBjcmVkZW50aWFs
IG1hdGNoZXMgYW4gZW50cnkgb2YgdGhlIGV4Y2x1ZGVDcmVkZW50aWFscyBsaXN0IGluIHRoZSBh
dXRoZW50aWNhdG9yLiJfcyB9KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVjZWl2ZVJl
c3BvbmQoRXhjZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBp
bnRlcm5hbCBlcnJvci4gRXJyb3IgY29kZTogIiwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZXJyb3Ip
KSB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICByZWNlaXZlUmVzcG9uZChXVEZNb3Zl
KCpyZXNwb25zZSkpOwotfQotCi12b2lkIEN0YXBIaWRBdXRoZW50aWNhdG9yOjpnZXRBc3NlcnRp
b24oKQotewotICAgIEFTU0VSVCghbV9pc0Rvd25ncmFkZWQpOwotICAgIGF1dG8gY2JvckNtZCA9
IGVuY29kZUdldEFzc2VydGlvblJlcXVlc3RBc0NCT1IocmVxdWVzdERhdGEoKS5oYXNoLCByZXF1
ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLCBtX2luZm8ub3B0aW9ucygpLnVzZXJWZXJpZmljYXRp
b25BdmFpbGFiaWxpdHkoKSk7Ci0gICAgbV9kcml2ZXItPnRyYW5zYWN0KFdURk1vdmUoY2JvckNt
ZCksIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0
YSkgewotICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgICAgICBpZiAoIXdl
YWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3ZWFrVGhpcy0+Y29udGludWVH
ZXRBc3NlcnRpb25BZnRlclJlc3BvbnNlUmVjZWl2ZWQoV1RGTW92ZShkYXRhKSk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgQ3RhcEhpZEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlR2V0QXNzZXJ0aW9uQWZ0
ZXJSZXNwb25zZVJlY2VpdmVkKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpCi17Ci0gICAgYXV0byBy
ZXNwb25zZSA9IHJlYWRDVEFQR2V0QXNzZXJ0aW9uUmVzcG9uc2UoZGF0YSk7Ci0gICAgaWYgKCFy
ZXNwb25zZSkgewotICAgICAgICBhdXRvIGVycm9yID0gZ2V0UmVzcG9uc2VDb2RlKGRhdGEpOwot
ICAgICAgICBpZiAoZXJyb3IgIT0gQ3RhcERldmljZVJlc3BvbnNlQ29kZTo6a0N0YXAyRXJySW52
YWxpZENCT1IgJiYgdHJ5RG93bmdyYWRlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmco
IlVua25vd24gaW50ZXJuYWwgZXJyb3IuIEVycm9yIGNvZGU6ICIsIHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KGVycm9yKSkgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmVjZWl2ZVJlc3Bv
bmQoV1RGTW92ZSgqcmVzcG9uc2UpKTsKLX0KLQotYm9vbCBDdGFwSGlkQXV0aGVudGljYXRvcjo6
dHJ5RG93bmdyYWRlKCkKLXsKLSAgICBpZiAobV9pbmZvLnZlcnNpb25zKCkuZmluZChQcm90b2Nv
bFZlcnNpb246OmtVMmYpID09IG1faW5mby52ZXJzaW9ucygpLmVuZCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFvYnNlcnZlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBtX2lzRG93bmdyYWRlZCA9IHRydWU7Ci0gICAgbV9kcml2ZXItPnNldFByb3RvY29sKFBy
b3RvY29sVmVyc2lvbjo6a1UyZik7Ci0gICAgb2JzZXJ2ZXIoKS0+ZG93bmdyYWRlKHRoaXMsIFUy
ZkhpZEF1dGhlbnRpY2F0b3I6OmNyZWF0ZShXVEZNb3ZlKG1fZHJpdmVyKSkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZEF1dGhl
bnRpY2F0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNjNDYxMTc0MjQyODQ3
YzYyZjlhNWQyYWUzNmM1NjFmMGZhYzdkZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9maWRvL0N0YXBIaWRBdXRoZW50aWNhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCX0FVVEhOKSAm
JiBQTEFURk9STShNQUMpCi0KLSNpbmNsdWRlICJBdXRoZW50aWNhdG9yLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9BdXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBDdGFwSGlkRHJpdmVyOwotCi1jbGFzcyBDdGFwSGlkQXV0aGVudGljYXRv
ciBmaW5hbCA6IHB1YmxpYyBBdXRoZW50aWNhdG9yIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEN0YXBIaWRBdXRoZW50aWNhdG9yPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPEN0YXBIaWREcml2
ZXI+JiYgZHJpdmVyLCBmaWRvOjpBdXRoZW50aWNhdG9yR2V0SW5mb1Jlc3BvbnNlJiYgaW5mbykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEN0YXBIaWRBdXRoZW50aWNhdG9y
KFdURk1vdmUoZHJpdmVyKSwgV1RGTW92ZShpbmZvKSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBDdGFwSGlkQXV0aGVudGljYXRvcihzdGQ6OnVuaXF1ZV9wdHI8Q3RhcEhpZERy
aXZlcj4mJiwgZmlkbzo6QXV0aGVudGljYXRvckdldEluZm9SZXNwb25zZSYmKTsKLQotICAgIHZv
aWQgbWFrZUNyZWRlbnRpYWwoKSBmaW5hbDsKLSAgICB2b2lkIGNvbnRpbnVlTWFrZUNyZWRlbnRp
YWxBZnRlclJlc3BvbnNlUmVjZWl2ZWQoVmVjdG9yPHVpbnQ4X3Q+JiYpIGNvbnN0OwotICAgIHZv
aWQgZ2V0QXNzZXJ0aW9uKCkgZmluYWw7Ci0gICAgdm9pZCBjb250aW51ZUdldEFzc2VydGlvbkFm
dGVyUmVzcG9uc2VSZWNlaXZlZChWZWN0b3I8dWludDhfdD4mJik7Ci0KLSAgICBib29sIHRyeURv
d25ncmFkZSgpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEN0YXBIaWREcml2ZXI+IG1fZHJpdmVy
OwotICAgIGZpZG86OkF1dGhlbnRpY2F0b3JHZXRJbmZvUmVzcG9uc2UgbV9pbmZvOwotICAgIGJv
b2wgbV9pc0Rvd25ncmFkZWQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVVEhOKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL0N0YXBI
aWREcml2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
Zmlkby9DdGFwSGlkRHJpdmVyLmNwcAppbmRleCA5NmU1ZjU5YjFlZjllMWNjMGQ1ZWNiYjZhZTk1
NjRhODM1OTczMTgwLi5hZWIzODQxMmVjZDIyZDUyOWFlNTJhY2U0YmIyZjBiNWNlOTIwNDAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRv
L0N0YXBIaWREcml2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZERyaXZlci5jcHAKQEAgLTE5NCw3ICsxOTQsNyBAQCB2b2lk
IEN0YXBIaWREcml2ZXI6OmNvbnRpbnVlQWZ0ZXJDaGFubmVsQWxsb2NhdGVkKE9wdGlvbmFsPEZp
ZG9IaWRNZXNzYWdlPiYmIG1lcwogICAgIG1fY2hhbm5lbElkIHw9IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihwYXlsb2FkW2luZGV4KytdKSA8PCA4OwogICAgIG1fY2hhbm5lbElkIHw9IHN0YXRpY19j
YXN0PHVpbnQzMl90PihwYXlsb2FkW2luZGV4XSk7CiAgICAgLy8gRklYTUUoMTkxNTM0KTogQ2hl
Y2sgdGhlIHJlc2V0IG9mIHRoZSBwYXlsb2FkLgotICAgIGF1dG8gY21kID0gRmlkb0hpZE1lc3Nh
Z2U6OmNyZWF0ZShtX2NoYW5uZWxJZCwgbV9wcm90b2NvbCA9PSBQcm90b2NvbFZlcnNpb246OmtD
dGFwID8gRmlkb0hpZERldmljZUNvbW1hbmQ6OmtDYm9yIDogRmlkb0hpZERldmljZUNvbW1hbmQ6
OmtNc2csIG1fcmVxdWVzdERhdGEpOworICAgIGF1dG8gY21kID0gRmlkb0hpZE1lc3NhZ2U6OmNy
ZWF0ZShtX2NoYW5uZWxJZCwgcHJvdG9jb2woKSA9PSBQcm90b2NvbFZlcnNpb246OmtDdGFwID8g
Rmlkb0hpZERldmljZUNvbW1hbmQ6OmtDYm9yIDogRmlkb0hpZERldmljZUNvbW1hbmQ6OmtNc2cs
IG1fcmVxdWVzdERhdGEpOwogICAgIEFTU0VSVChjbWQpOwogICAgIG1fd29ya2VyLT50cmFuc2Fj
dChXVEZNb3ZlKCpjbWQpLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKE9wdGlvbmFs
PEZpZG9IaWRNZXNzYWdlPiYmIHJlc3BvbnNlKSBtdXRhYmxlIHsKICAgICAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL2ZpZG8vQ3RhcEhpZERyaXZlci5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlkRHJpdmVyLmgKaW5kZXggOGZiNTA0
ZDkxZTk3ODM3MGIwZjZkOTQyODE4Y2QxOTg3OTc4MjNjYy4uZGVmYjQ2NGI4YzIyMTdhOWExNWI0
NTVhZjcxZjlmZTViYmZkYTUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlkRHJpdmVyLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9DdGFwSGlkRHJpdmVyLmgKQEAgLTI3
LDI2ICsyNywxOCBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVVRITikgJiYgUExBVEZPUk0oTUFDKQog
CisjaW5jbHVkZSAiQ3RhcERyaXZlci5oIgogI2luY2x1ZGUgIkhpZENvbm5lY3Rpb24uaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0ZpZG9Db25zdGFudHMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZpZG9I
aWRNZXNzYWdlLmg+Ci0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIC8vIFRoZSBmb2xsb3dpbmcgaW1wbGVtZW50cyB0aGUgQ1RBUCBISUQgcHJv
dG9jb2w6CiAvLyBodHRwczovL2ZpZG9hbGxpYW5jZS5vcmcvc3BlY3MvZmlkby12Mi4wLXBzLTIw
MTcwOTI3L2ZpZG8tY2xpZW50LXRvLWF1dGhlbnRpY2F0b3ItcHJvdG9jb2wtdjIuMC1wcy0yMDE3
MDkyNy5odG1sI3VzYgogLy8gRlNNOiBJZGxlID0+IEFsbG9jYXRlQ2hhbm5lbCA9PiBSZWFkeQot
Y2xhc3MgQ3RhcEhpZERyaXZlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxDdGFwSGlkRHJpdmVy
PiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ3RhcEhpZERyaXZlcik7CitjbGFzcyBDdGFwSGlkRHJpdmVyIDogcHVibGljIEN0YXBEcml2
ZXIgewogcHVibGljOgotICAgIHVzaW5nIFJlc3BvbnNlQ2FsbGJhY2sgPSBGdW5jdGlvbjx2b2lk
KFZlY3Rvcjx1aW50OF90PiYmKT47Ci0KICAgICBlbnVtIGNsYXNzIFN0YXRlIDogdWludDhfdCB7
CiAgICAgICAgIElkbGUsCiAgICAgICAgIEFsbG9jYXRlQ2hhbm5lbCwKQEAgLTU3LDggKzQ5LDcg
QEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgQ3RhcEhpZERyaXZlcihVbmlxdWVSZWY8SGlkQ29u
bmVjdGlvbj4mJik7CiAKLSAgICB2b2lkIHNldFByb3RvY29sKGZpZG86OlByb3RvY29sVmVyc2lv
biBwcm90b2NvbCkgeyBtX3Byb3RvY29sID0gcHJvdG9jb2w7IH0KLSAgICB2b2lkIHRyYW5zYWN0
KFZlY3Rvcjx1aW50OF90PiYmIGRhdGEsIFJlc3BvbnNlQ2FsbGJhY2smJik7CisgICAgdm9pZCB0
cmFuc2FjdChWZWN0b3I8dWludDhfdD4mJiBkYXRhLCBSZXNwb25zZUNhbGxiYWNrJiYpIGZpbmFs
OwogCiBwcml2YXRlOgogICAgIC8vIFdvcmtlciBpcyB0aGUgaGVscGVyIHRoYXQgbWFpbnRhaW5z
IHRoZSB0cmFuc2FjdGlvbi4KQEAgLTEwNCw3ICs5NSw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IG1fcmVxdWVzdERhdGE7CiAgICAgUmVzcG9uc2VDYWxsYmFjayBtX3Jlc3BvbnNl
Q2FsbGJhY2s7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fbm9uY2U7Ci0gICAgZmlkbzo6UHJvdG9j
b2xWZXJzaW9uIG1fcHJvdG9jb2wgeyBmaWRvOjpQcm90b2NvbFZlcnNpb246OmtDdGFwIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL2ZpZG8vVTJmQXV0aGVudGljYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1UyZkF1dGhlbnRpY2F0
b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE1ODU2NzJmZDJjOWMzMWNlZWM0MzYxNmZjNzA1Nzg1NTc1YWE1
NzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50
aWNhdGlvbi9maWRvL1UyZkF1dGhlbnRpY2F0b3IuY3BwCkBAIC0wLDAgKzEsMjQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlUyZkF1dGhlbnRpY2F0b3Iu
aCIKKworI2lmIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykKKworI2luY2x1ZGUg
IkN0YXBEcml2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FwZHVSZXNwb25zZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVTJmQ29tbWFu
ZENvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VMmZSZXNwb25zZUNvbnZlcnRlci5o
PgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGVOdW1iZXJzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgYXBkdTsKK3VzaW5nIG5hbWVzcGFjZSBmaWRvOwor
CituYW1lc3BhY2UgeworY29uc3QgdW5zaWduZWQgcmV0cnlUaW1lT3V0VmFsdWVNcyA9IDIwMDsK
K30KKworVTJmQXV0aGVudGljYXRvcjo6VTJmQXV0aGVudGljYXRvcihzdGQ6OnVuaXF1ZV9wdHI8
Q3RhcERyaXZlcj4mJiBkcml2ZXIpCisgICAgOiBtX2RyaXZlcihXVEZNb3ZlKGRyaXZlcikpCisg
ICAgLCBtX3JldHJ5VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVTJmQXV0aGVudGljYXRv
cjo6cmV0cnlMYXN0Q29tbWFuZCkKK3sKKyAgICAvLyBGSVhNRSgxOTE1MjApOiBXZSBuZWVkIGEg
d2F5IHRvIGNvbnZlcnQgc3RkOjp1bmlxdWVfcHRyIHRvIFVuaXF1ZVJlZi4KKyAgICBBU1NFUlQo
bV9kcml2ZXIpOworfQorCit2b2lkIFUyZkF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKCkK
K3sKKyAgICBpZiAoIWlzQ29udmVydGlibGVUb1UyZlJlZ2lzdGVyQ29tbWFuZChyZXF1ZXN0RGF0
YSgpLmNyZWF0aW9uT3B0aW9ucykpIHsKKyAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9u
RGF0YSB7IE5vdFN1cHBvcnRlZEVycm9yLCAiQ2Fubm90IGNvbnZlcnQgdGhlIHJlcXVlc3QgdG8g
VTJGIGNvbW1hbmQuIl9zIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghcmVx
dWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzLmlzRW1wdHkoKSkg
eworICAgICAgICBBU1NFUlQoIW1fbmV4dExpc3RJbmRleCk7CisgICAgICAgIGNoZWNrRXhjbHVk
ZUxpc3QobV9uZXh0TGlzdEluZGV4KyspOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlz
c3VlUmVnaXN0ZXJDb21tYW5kKCk7Cit9CisKK3ZvaWQgVTJmQXV0aGVudGljYXRvcjo6Y2hlY2tF
eGNsdWRlTGlzdChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKGluZGV4ID49IHJlcXVlc3REYXRh
KCkuY3JlYXRpb25PcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscy5zaXplKCkpIHsKKyAgICAgICAg
aXNzdWVSZWdpc3RlckNvbW1hbmQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhdXRv
IHUyZkNtZCA9IGNvbnZlcnRUb1UyZkNoZWNrT25seVNpZ25Db21tYW5kKHJlcXVlc3REYXRhKCku
aGFzaCwgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMsIHJlcXVlc3REYXRhKCkuY3JlYXRp
b25PcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFsc1tpbmRleF0pOworICAgIEFTU0VSVCh1MmZDbWQp
OworICAgIGlzc3VlTmV3Q29tbWFuZChXVEZNb3ZlKCp1MmZDbWQpLCBDb21tYW5kVHlwZTo6Q2hl
Y2tPbmx5Q29tbWFuZCk7Cit9CisKK3ZvaWQgVTJmQXV0aGVudGljYXRvcjo6aXNzdWVSZWdpc3Rl
ckNvbW1hbmQoKQoreworICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmUmVnaXN0ZXJDb21t
YW5kKHJlcXVlc3REYXRhKCkuaGFzaCwgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMpOwor
ICAgIEFTU0VSVCh1MmZDbWQpOworICAgIGlzc3VlTmV3Q29tbWFuZChXVEZNb3ZlKCp1MmZDbWQp
LCBDb21tYW5kVHlwZTo6UmVnaXN0ZXJDb21tYW5kKTsKK30KKwordm9pZCBVMmZBdXRoZW50aWNh
dG9yOjpnZXRBc3NlcnRpb24oKQoreworICAgIGlmICghaXNDb252ZXJ0aWJsZVRvVTJmU2lnbkNv
bW1hbmQocmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucykpIHsKKyAgICAgICAgcmVjZWl2ZVJl
c3BvbmQoRXhjZXB0aW9uRGF0YSB7IE5vdFN1cHBvcnRlZEVycm9yLCAiQ2Fubm90IGNvbnZlcnQg
dGhlIHJlcXVlc3QgdG8gVTJGIGNvbW1hbmQuIl9zIH0pOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIEFTU0VSVCghbV9uZXh0TGlzdEluZGV4KTsKKyAgICBpc3N1ZVNpZ25Db21tYW5kKG1f
bmV4dExpc3RJbmRleCsrKTsKK30KKwordm9pZCBVMmZBdXRoZW50aWNhdG9yOjppc3N1ZVNpZ25D
b21tYW5kKHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPj0gcmVxdWVzdERhdGEoKS5y
ZXF1ZXN0T3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLnNpemUoKSkgeworICAgICAgICByZWNlaXZl
UmVzcG9uZChFeGNlcHRpb25EYXRhIHsgTm90QWxsb3dlZEVycm9yLCAiTm8gY3JlZGVudGlhbHMg
ZnJvbSB0aGUgYWxsb3dDcmVkZW50aWFscyBsaXN0IGlzIGZvdW5kIGluIHRoZSBhdXRoZW50aWNh
dG9yLiJfcyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhdXRvIHUyZkNtZCA9IGNv
bnZlcnRUb1UyZlNpZ25Db21tYW5kKHJlcXVlc3REYXRhKCkuaGFzaCwgcmVxdWVzdERhdGEoKS5y
ZXF1ZXN0T3B0aW9ucywgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5hbGxvd0NyZWRlbnRp
YWxzW2luZGV4XS5pZFZlY3RvciwgbV9pc0FwcElkKTsKKyAgICBBU1NFUlQodTJmQ21kKTsKKyAg
ICBpc3N1ZU5ld0NvbW1hbmQoV1RGTW92ZSgqdTJmQ21kKSwgQ29tbWFuZFR5cGU6OlNpZ25Db21t
YW5kKTsKK30KKwordm9pZCBVMmZBdXRoZW50aWNhdG9yOjppc3N1ZU5ld0NvbW1hbmQoVmVjdG9y
PHVpbnQ4X3Q+JiYgY29tbWFuZCwgQ29tbWFuZFR5cGUgdHlwZSkKK3sKKyAgICBtX2xhc3RDb21t
YW5kID0gV1RGTW92ZShjb21tYW5kKTsKKyAgICBtX2xhc3RDb21tYW5kVHlwZSA9IHR5cGU7Cisg
ICAgaXNzdWVDb21tYW5kKG1fbGFzdENvbW1hbmQsIG1fbGFzdENvbW1hbmRUeXBlKTsKK30KKwor
dm9pZCBVMmZBdXRoZW50aWNhdG9yOjppc3N1ZUNvbW1hbmQoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBjb21tYW5kLCBDb21tYW5kVHlwZSB0eXBlKQoreworICAgIG1fZHJpdmVyLT50cmFuc2FjdChW
ZWN0b3I8dWludDhfdD4oY29tbWFuZCksIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwg
dHlwZV0oVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgeworICAgICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB3ZWFrVGhpcy0+cmVzcG9uc2VSZWNlaXZlZChXVEZNb3ZlKGRhdGEpLCB0eXBlKTsK
KyAgICB9KTsKK30KKwordm9pZCBVMmZBdXRoZW50aWNhdG9yOjpyZXNwb25zZVJlY2VpdmVkKFZl
Y3Rvcjx1aW50OF90PiYmIHJlc3BvbnNlLCBDb21tYW5kVHlwZSB0eXBlKQoreworICAgIGF1dG8g
YXBkdVJlc3BvbnNlID0gQXBkdVJlc3BvbnNlOjpjcmVhdGVGcm9tTWVzc2FnZShyZXNwb25zZSk7
CisgICAgaWYgKCFhcGR1UmVzcG9uc2UpIHsKKyAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0
aW9uRGF0YSB7IFVua25vd25FcnJvciwgIkNvdWxkbid0IHBhcnNlIHRoZSBBUERVIHJlc3BvbnNl
LiJfcyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgQ29tbWFuZFR5cGU6OlJlZ2lzdGVyQ29tbWFuZDoKKyAgICAgICAgY29udGludWVS
ZWdpc3RlckNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoV1RGTW92ZSgqYXBkdVJlc3BvbnNl
KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbW1hbmRUeXBlOjpDaGVja09ubHlDb21t
YW5kOgorICAgICAgICBjb250aW51ZUNoZWNrT25seUNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2
ZWQoV1RGTW92ZSgqYXBkdVJlc3BvbnNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENv
bW1hbmRUeXBlOjpCb2d1c0NvbW1hbmQ6CisgICAgICAgIGNvbnRpbnVlQm9ndXNDb21tYW5kQWZ0
ZXJSZXNwb25zZVJlY2VpdmVkKFdURk1vdmUoKmFwZHVSZXNwb25zZSkpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBDb21tYW5kVHlwZTo6U2lnbkNvbW1hbmQ6CisgICAgICAgIGNvbnRpbnVl
U2lnbkNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoV1RGTW92ZSgqYXBkdVJlc3BvbnNlKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgVTJmQXV0aGVudGljYXRvcjo6Y29udGludWVSZWdpc3RlckNvbW1hbmRBZnRlclJlc3Bv
bnNlUmVjZWl2ZWQoQXBkdVJlc3BvbnNlJiYgYXBkdVJlc3BvbnNlKQoreworICAgIHN3aXRjaCAo
YXBkdVJlc3BvbnNlLnN0YXR1cygpKSB7CisgICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6
U1dfTk9fRVJST1I6IHsKKyAgICAgICAgYXV0byByZXNwb25zZSA9IHJlYWRVMmZSZWdpc3RlclJl
c3BvbnNlKHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zLnJwLmlkLCBhcGR1UmVzcG9uc2Uu
ZGF0YSgpLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5hdHRlc3RhdGlvbik7CisgICAg
ICAgIGlmICghcmVzcG9uc2UpIHsKKyAgICAgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlv
bkRhdGEgeyBVbmtub3duRXJyb3IsICJDb3VsZG4ndCBwYXJzZSB0aGUgVTJGIHJlZ2lzdGVyIHJl
c3BvbnNlLiJfcyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBy
ZWNlaXZlUmVzcG9uZChXVEZNb3ZlKCpyZXNwb25zZSkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNXX0NPTkRJVElPTlNfTk9UX1NBVElT
RklFRDoKKyAgICAgICAgLy8gUG9sbGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdGVzdCBvZiB1c2Vy
IHByZXNlbmNlLgorICAgICAgICBtX3JldHJ5VGltZXIuc3RhcnRPbmVTaG90KFNlY29uZHM6OmZy
b21NaWxsaXNlY29uZHMocmV0cnlUaW1lT3V0VmFsdWVNcykpOworICAgICAgICByZXR1cm47Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IFVua25v
d25FcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBpbnRlcm5hbCBlcnJvci4gRXJyb3IgY29kZTog
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFwZHVSZXNwb25zZS5zdGF0dXMoKSkpIH0pOworICAg
IH0KK30KKwordm9pZCBVMmZBdXRoZW50aWNhdG9yOjpjb250aW51ZUNoZWNrT25seUNvbW1hbmRB
ZnRlclJlc3BvbnNlUmVjZWl2ZWQoQXBkdVJlc3BvbnNlJiYgYXBkdVJlc3BvbnNlKQoreworICAg
IHN3aXRjaCAoYXBkdVJlc3BvbnNlLnN0YXR1cygpKSB7CisgICAgY2FzZSBBcGR1UmVzcG9uc2U6
OlN0YXR1czo6U1dfTk9fRVJST1I6CisgICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1df
Q09ORElUSU9OU19OT1RfU0FUSVNGSUVEOgorICAgICAgICBpc3N1ZU5ld0NvbW1hbmQoY29uc3Ry
dWN0Qm9ndXNVMmZSZWdpc3RyYXRpb25Db21tYW5kKCksIENvbW1hbmRUeXBlOjpCb2d1c0NvbW1h
bmQpOworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgY2hlY2tFeGNsdWRl
TGlzdChtX25leHRMaXN0SW5kZXgrKyk7CisgICAgfQorfQorCit2b2lkIFUyZkF1dGhlbnRpY2F0
b3I6OmNvbnRpbnVlQm9ndXNDb21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKEFwZHVSZXNwb25z
ZSYmIGFwZHVSZXNwb25zZSkKK3sKKyAgICBzd2l0Y2ggKGFwZHVSZXNwb25zZS5zdGF0dXMoKSkg
eworICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNXX05PX0VSUk9SOgorICAgICAgICBy
ZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgSW52YWxpZFN0YXRlRXJyb3IsICJBdCBsZWFz
dCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5IG9mIHRoZSBleGNsdWRlQ3JlZGVudGlh
bHMgbGlzdCBpbiB0aGUgYXV0aGVudGljYXRvci4iX3MgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19DT05ESVRJT05TX05PVF9TQVRJU0ZJRUQ6
CisgICAgICAgIC8vIFBvbGxpbmcgaXMgcmVxdWlyZWQgZHVyaW5nIHRlc3Qgb2YgdXNlciBwcmVz
ZW5jZS4KKyAgICAgICAgbV9yZXRyeVRpbWVyLnN0YXJ0T25lU2hvdChTZWNvbmRzOjpmcm9tTWls
bGlzZWNvbmRzKHJldHJ5VGltZU91dFZhbHVlTXMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJlY2VpdmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBVbmtub3duRXJy
b3IsIG1ha2VTdHJpbmcoIlVua25vd24gaW50ZXJuYWwgZXJyb3IuIEVycm9yIGNvZGU6ICIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihhcGR1UmVzcG9uc2Uuc3RhdHVzKCkpKSB9KTsKKyAgICB9Cit9
CisKK3ZvaWQgVTJmQXV0aGVudGljYXRvcjo6Y29udGludWVTaWduQ29tbWFuZEFmdGVyUmVzcG9u
c2VSZWNlaXZlZChBcGR1UmVzcG9uc2UmJiBhcGR1UmVzcG9uc2UpCit7CisgICAgc3dpdGNoIChh
cGR1UmVzcG9uc2Uuc3RhdHVzKCkpIHsKKyAgICBjYXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpT
V19OT19FUlJPUjogeworICAgICAgICBPcHRpb25hbDxQdWJsaWNLZXlDcmVkZW50aWFsRGF0YT4g
cmVzcG9uc2U7CisgICAgICAgIGlmIChtX2lzQXBwSWQpIHsKKyAgICAgICAgICAgIEFTU0VSVChy
ZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmV4dGVuc2lvbnMgJiYgIXJlcXVlc3REYXRhKCku
cmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9ucy0+YXBwaWQuaXNOdWxsKCkpOworICAgICAgICAgICAg
cmVzcG9uc2UgPSByZWFkVTJmU2lnblJlc3BvbnNlKHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlv
bnMuZXh0ZW5zaW9ucy0+YXBwaWQsIHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMuYWxsb3dD
cmVkZW50aWFsc1ttX25leHRMaXN0SW5kZXggLSAxXS5pZFZlY3RvciwgYXBkdVJlc3BvbnNlLmRh
dGEoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzcG9uc2UgPSByZWFkVTJmU2ln
blJlc3BvbnNlKHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMucnBJZCwgcmVxdWVzdERhdGEo
KS5yZXF1ZXN0T3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzW21fbmV4dExpc3RJbmRleCAtIDFdLmlk
VmVjdG9yLCBhcGR1UmVzcG9uc2UuZGF0YSgpKTsKKyAgICAgICAgaWYgKCFyZXNwb25zZSkgewor
ICAgICAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwg
IkNvdWxkbid0IHBhcnNlIHRoZSBVMkYgc2lnbiByZXNwb25zZS4iX3MgfSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1faXNBcHBJZCkKKyAgICAgICAgICAg
IHJlc3BvbnNlLT5hcHBpZCA9IG1faXNBcHBJZDsKKworICAgICAgICByZWNlaXZlUmVzcG9uZChX
VEZNb3ZlKCpyZXNwb25zZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQXBk
dVJlc3BvbnNlOjpTdGF0dXM6OlNXX0NPTkRJVElPTlNfTk9UX1NBVElTRklFRDoKKyAgICAgICAg
Ly8gUG9sbGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdGVzdCBvZiB1c2VyIHByZXNlbmNlLgorICAg
ICAgICBtX3JldHJ5VGltZXIuc3RhcnRPbmVTaG90KFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMo
cmV0cnlUaW1lT3V0VmFsdWVNcykpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcGR1UmVz
cG9uc2U6OlN0YXR1czo6U1dfV1JPTkdfREFUQToKKyAgICAgICAgaWYgKHJlcXVlc3REYXRhKCku
cmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9ucyAmJiAhcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9u
cy5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSkgeworICAgICAgICAgICAgaWYgKCFtX2lzQXBw
SWQpIHsKKyAgICAgICAgICAgICAgICBtX2lzQXBwSWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IGlzc3VlU2lnbkNvbW1hbmQobV9uZXh0TGlzdEluZGV4IC0gMSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pc0FwcElkID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaXNzdWVTaWduQ29tbWFuZChtX25leHRMaXN0SW5kZXgrKyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICBpc3N1ZVNpZ25Db21tYW5kKG1f
bmV4dExpc3RJbmRleCsrKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9VMmZBdXRoZW50
aWNhdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRv
L1UyZkF1dGhlbnRpY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTQ3NzM2ODZmNjA3YzBiYTQwZGNjYzdm
NWRmODExMDVjNTU1OTljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9VMmZBdXRoZW50aWNhdG9yLmgKQEAgLTAsMCArMSw4
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9BVVRITikg
JiYgUExBVEZPUk0oTUFDKQorCisjaW5jbHVkZSAiQXV0aGVudGljYXRvci5oIgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBhcGR1IHsKK2NsYXNzIEFwZHVSZXNwb25zZTsK
K30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEN0YXBEcml2ZXI7CisKK2NsYXNzIFUy
ZkF1dGhlbnRpY2F0b3IgZmluYWwgOiBwdWJsaWMgQXV0aGVudGljYXRvciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxVMmZBdXRoZW50aWNhdG9yPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPEN0
YXBEcml2ZXI+JiYgZHJpdmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
VTJmQXV0aGVudGljYXRvcihXVEZNb3ZlKGRyaXZlcikpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgZXhwbGljaXQgVTJmQXV0aGVudGljYXRvcihzdGQ6OnVuaXF1ZV9wdHI8Q3RhcERyaXZlcj4m
Jik7CisKKyAgICB2b2lkIG1ha2VDcmVkZW50aWFsKCkgZmluYWw7CisgICAgdm9pZCBjaGVja0V4
Y2x1ZGVMaXN0KHNpemVfdCBpbmRleCk7CisgICAgdm9pZCBpc3N1ZVJlZ2lzdGVyQ29tbWFuZCgp
OworICAgIHZvaWQgZ2V0QXNzZXJ0aW9uKCkgZmluYWw7CisgICAgdm9pZCBpc3N1ZVNpZ25Db21t
YW5kKHNpemVfdCBpbmRleCk7CisKKyAgICBlbnVtIGNsYXNzIENvbW1hbmRUeXBlIDogdWludDhf
dCB7CisgICAgICAgIFJlZ2lzdGVyQ29tbWFuZCwKKyAgICAgICAgQ2hlY2tPbmx5Q29tbWFuZCwK
KyAgICAgICAgQm9ndXNDb21tYW5kLAorICAgICAgICBTaWduQ29tbWFuZAorICAgIH07CisgICAg
dm9pZCBpc3N1ZU5ld0NvbW1hbmQoVmVjdG9yPHVpbnQ4X3Q+JiYgY29tbWFuZCwgQ29tbWFuZFR5
cGUpOworICAgIHZvaWQgcmV0cnlMYXN0Q29tbWFuZCgpIHsgaXNzdWVDb21tYW5kKG1fbGFzdENv
bW1hbmQsIG1fbGFzdENvbW1hbmRUeXBlKTsgfQorICAgIHZvaWQgaXNzdWVDb21tYW5kKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgY29tbWFuZCwgQ29tbWFuZFR5cGUpOworICAgIHZvaWQgcmVzcG9u
c2VSZWNlaXZlZChWZWN0b3I8dWludDhfdD4mJiByZXNwb25zZSwgQ29tbWFuZFR5cGUpOworICAg
IHZvaWQgY29udGludWVSZWdpc3RlckNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoYXBkdTo6
QXBkdVJlc3BvbnNlJiYpOworICAgIHZvaWQgY29udGludWVDaGVja09ubHlDb21tYW5kQWZ0ZXJS
ZXNwb25zZVJlY2VpdmVkKGFwZHU6OkFwZHVSZXNwb25zZSYmKTsKKyAgICB2b2lkIGNvbnRpbnVl
Qm9ndXNDb21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKGFwZHU6OkFwZHVSZXNwb25zZSYmKTsK
KyAgICB2b2lkIGNvbnRpbnVlU2lnbkNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoYXBkdTo6
QXBkdVJlc3BvbnNlJiYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEN0YXBEcml2ZXI+IG1fZHJp
dmVyOworICAgIFJ1bkxvb3A6OlRpbWVyPFUyZkF1dGhlbnRpY2F0b3I+IG1fcmV0cnlUaW1lcjsK
KyAgICBWZWN0b3I8dWludDhfdD4gbV9sYXN0Q29tbWFuZDsKKyAgICBDb21tYW5kVHlwZSBtX2xh
c3RDb21tYW5kVHlwZTsKKyAgICBzaXplX3QgbV9uZXh0TGlzdEluZGV4IHsgMCB9OworICAgIGJv
b2wgbV9pc0FwcElkIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9VMmZIaWRBdXRo
ZW50aWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9u
L2ZpZG8vVTJmSGlkQXV0aGVudGljYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGVjZWVjMGY3ZTg3ZjcyMmRjMGZjOGQ4NGVhYWM3YTNiZjliNGU1MWIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vZmlkby9VMmZIaWRBdXRoZW50aWNhdG9yLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlUyZkhpZEF1dGhlbnRpY2F0b3IuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVU
SE4pICYmIFBMQVRGT1JNKE1BQykKLQotI2luY2x1ZGUgIkN0YXBIaWREcml2ZXIuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0FwZHVSZXNwb25zZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9u
RGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVTJmQ29tbWFuZENvbnN0cnVjdG9yLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9VMmZSZXNwb25zZUNvbnZlcnRlci5oPgotI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1l
c3BhY2UgYXBkdTsKLXVzaW5nIG5hbWVzcGFjZSBmaWRvOwotCi1uYW1lc3BhY2UgewotY29uc3Qg
dW5zaWduZWQgcmV0cnlUaW1lT3V0VmFsdWVNcyA9IDIwMDsKLX0KLQotVTJmSGlkQXV0aGVudGlj
YXRvcjo6VTJmSGlkQXV0aGVudGljYXRvcihzdGQ6OnVuaXF1ZV9wdHI8Q3RhcEhpZERyaXZlcj4m
JiBkcml2ZXIpCi0gICAgOiBtX2RyaXZlcihXVEZNb3ZlKGRyaXZlcikpCi0gICAgLCBtX3JldHJ5
VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVTJmSGlkQXV0aGVudGljYXRvcjo6cmV0cnlM
YXN0Q29tbWFuZCkKLXsKLSAgICAvLyBGSVhNRSgxOTE1MjApOiBXZSBuZWVkIGEgd2F5IHRvIGNv
bnZlcnQgc3RkOjp1bmlxdWVfcHRyIHRvIFVuaXF1ZVJlZi4KLSAgICBBU1NFUlQobV9kcml2ZXIp
OwotfQotCi12b2lkIFUyZkhpZEF1dGhlbnRpY2F0b3I6Om1ha2VDcmVkZW50aWFsKCkKLXsKLSAg
ICBpZiAoIWlzQ29udmVydGlibGVUb1UyZlJlZ2lzdGVyQ29tbWFuZChyZXF1ZXN0RGF0YSgpLmNy
ZWF0aW9uT3B0aW9ucykpIHsKLSAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7
IE5vdFN1cHBvcnRlZEVycm9yLCAiQ2Fubm90IGNvbnZlcnQgdGhlIHJlcXVlc3QgdG8gVTJGIGNv
bW1hbmQuIl9zIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghcmVxdWVzdERh
dGEoKS5jcmVhdGlvbk9wdGlvbnMuZXhjbHVkZUNyZWRlbnRpYWxzLmlzRW1wdHkoKSkgewotICAg
ICAgICBBU1NFUlQoIW1fbmV4dExpc3RJbmRleCk7Ci0gICAgICAgIGNoZWNrRXhjbHVkZUxpc3Qo
bV9uZXh0TGlzdEluZGV4KyspOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlzc3VlUmVn
aXN0ZXJDb21tYW5kKCk7Ci19Ci0KLXZvaWQgVTJmSGlkQXV0aGVudGljYXRvcjo6Y2hlY2tFeGNs
dWRlTGlzdChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4ID49IHJlcXVlc3REYXRhKCku
Y3JlYXRpb25PcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscy5zaXplKCkpIHsKLSAgICAgICAgaXNz
dWVSZWdpc3RlckNvbW1hbmQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIHUy
ZkNtZCA9IGNvbnZlcnRUb1UyZkNoZWNrT25seVNpZ25Db21tYW5kKHJlcXVlc3REYXRhKCkuaGFz
aCwgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMsIHJlcXVlc3REYXRhKCkuY3JlYXRpb25P
cHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFsc1tpbmRleF0pOwotICAgIEFTU0VSVCh1MmZDbWQpOwot
ICAgIGlzc3VlTmV3Q29tbWFuZChXVEZNb3ZlKCp1MmZDbWQpLCBDb21tYW5kVHlwZTo6Q2hlY2tP
bmx5Q29tbWFuZCk7Ci19Ci0KLXZvaWQgVTJmSGlkQXV0aGVudGljYXRvcjo6aXNzdWVSZWdpc3Rl
ckNvbW1hbmQoKQotewotICAgIGF1dG8gdTJmQ21kID0gY29udmVydFRvVTJmUmVnaXN0ZXJDb21t
YW5kKHJlcXVlc3REYXRhKCkuaGFzaCwgcmVxdWVzdERhdGEoKS5jcmVhdGlvbk9wdGlvbnMpOwot
ICAgIEFTU0VSVCh1MmZDbWQpOwotICAgIGlzc3VlTmV3Q29tbWFuZChXVEZNb3ZlKCp1MmZDbWQp
LCBDb21tYW5kVHlwZTo6UmVnaXN0ZXJDb21tYW5kKTsKLX0KLQotdm9pZCBVMmZIaWRBdXRoZW50
aWNhdG9yOjpnZXRBc3NlcnRpb24oKQotewotICAgIGlmICghaXNDb252ZXJ0aWJsZVRvVTJmU2ln
bkNvbW1hbmQocmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucykpIHsKLSAgICAgICAgcmVjZWl2
ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IE5vdFN1cHBvcnRlZEVycm9yLCAiQ2Fubm90IGNvbnZl
cnQgdGhlIHJlcXVlc3QgdG8gVTJGIGNvbW1hbmQuIl9zIH0pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIEFTU0VSVCghbV9uZXh0TGlzdEluZGV4KTsKLSAgICBpc3N1ZVNpZ25Db21tYW5k
KG1fbmV4dExpc3RJbmRleCsrKTsKLX0KLQotdm9pZCBVMmZIaWRBdXRoZW50aWNhdG9yOjppc3N1
ZVNpZ25Db21tYW5kKHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gcmVxdWVzdERh
dGEoKS5yZXF1ZXN0T3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLnNpemUoKSkgewotICAgICAgICBy
ZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgTm90QWxsb3dlZEVycm9yLCAiTm8gY3JlZGVu
dGlhbHMgZnJvbSB0aGUgYWxsb3dDcmVkZW50aWFscyBsaXN0IGlzIGZvdW5kIGluIHRoZSBhdXRo
ZW50aWNhdG9yLiJfcyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIHUyZkNt
ZCA9IGNvbnZlcnRUb1UyZlNpZ25Db21tYW5kKHJlcXVlc3REYXRhKCkuaGFzaCwgcmVxdWVzdERh
dGEoKS5yZXF1ZXN0T3B0aW9ucywgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5hbGxvd0Ny
ZWRlbnRpYWxzW2luZGV4XS5pZFZlY3RvciwgbV9pc0FwcElkKTsKLSAgICBBU1NFUlQodTJmQ21k
KTsKLSAgICBpc3N1ZU5ld0NvbW1hbmQoV1RGTW92ZSgqdTJmQ21kKSwgQ29tbWFuZFR5cGU6OlNp
Z25Db21tYW5kKTsKLX0KLQotdm9pZCBVMmZIaWRBdXRoZW50aWNhdG9yOjppc3N1ZU5ld0NvbW1h
bmQoVmVjdG9yPHVpbnQ4X3Q+JiYgY29tbWFuZCwgQ29tbWFuZFR5cGUgdHlwZSkKLXsKLSAgICBt
X2xhc3RDb21tYW5kID0gV1RGTW92ZShjb21tYW5kKTsKLSAgICBtX2xhc3RDb21tYW5kVHlwZSA9
IHR5cGU7Ci0gICAgaXNzdWVDb21tYW5kKG1fbGFzdENvbW1hbmQsIG1fbGFzdENvbW1hbmRUeXBl
KTsKLX0KLQotdm9pZCBVMmZIaWRBdXRoZW50aWNhdG9yOjppc3N1ZUNvbW1hbmQoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBjb21tYW5kLCBDb21tYW5kVHlwZSB0eXBlKQotewotICAgIG1fZHJpdmVy
LT50cmFuc2FjdChWZWN0b3I8dWludDhfdD4oY29tbWFuZCksIFt3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgdHlwZV0oVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkgewotICAgICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB3ZWFrVGhpcy0+cmVzcG9uc2VSZWNlaXZlZChXVEZNb3ZlKGRh
dGEpLCB0eXBlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVMmZIaWRBdXRoZW50aWNhdG9yOjpyZXNw
b25zZVJlY2VpdmVkKFZlY3Rvcjx1aW50OF90PiYmIHJlc3BvbnNlLCBDb21tYW5kVHlwZSB0eXBl
KQotewotICAgIGF1dG8gYXBkdVJlc3BvbnNlID0gQXBkdVJlc3BvbnNlOjpjcmVhdGVGcm9tTWVz
c2FnZShyZXNwb25zZSk7Ci0gICAgaWYgKCFhcGR1UmVzcG9uc2UpIHsKLSAgICAgICAgcmVjZWl2
ZVJlc3BvbmQoRXhjZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwgIkNvdWxkbid0IHBhcnNlIHRo
ZSBBUERVIHJlc3BvbnNlLiJfcyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3
aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ29tbWFuZFR5cGU6OlJlZ2lzdGVyQ29tbWFuZDoKLSAg
ICAgICAgY29udGludWVSZWdpc3RlckNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoV1RGTW92
ZSgqYXBkdVJlc3BvbnNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENvbW1hbmRUeXBl
OjpDaGVja09ubHlDb21tYW5kOgotICAgICAgICBjb250aW51ZUNoZWNrT25seUNvbW1hbmRBZnRl
clJlc3BvbnNlUmVjZWl2ZWQoV1RGTW92ZSgqYXBkdVJlc3BvbnNlKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIENvbW1hbmRUeXBlOjpCb2d1c0NvbW1hbmQ6Ci0gICAgICAgIGNvbnRpbnVl
Qm9ndXNDb21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKFdURk1vdmUoKmFwZHVSZXNwb25zZSkp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDb21tYW5kVHlwZTo6U2lnbkNvbW1hbmQ6Ci0g
ICAgICAgIGNvbnRpbnVlU2lnbkNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoV1RGTW92ZSgq
YXBkdVJlc3BvbnNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19Ci0KLXZvaWQgVTJmSGlkQXV0aGVudGljYXRvcjo6Y29udGludWVSZWdpc3Rl
ckNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoQXBkdVJlc3BvbnNlJiYgYXBkdVJlc3BvbnNl
KQotewotICAgIHN3aXRjaCAoYXBkdVJlc3BvbnNlLnN0YXR1cygpKSB7Ci0gICAgY2FzZSBBcGR1
UmVzcG9uc2U6OlN0YXR1czo6U1dfTk9fRVJST1I6IHsKLSAgICAgICAgYXV0byByZXNwb25zZSA9
IHJlYWRVMmZSZWdpc3RlclJlc3BvbnNlKHJlcXVlc3REYXRhKCkuY3JlYXRpb25PcHRpb25zLnJw
LmlkLCBhcGR1UmVzcG9uc2UuZGF0YSgpLCByZXF1ZXN0RGF0YSgpLmNyZWF0aW9uT3B0aW9ucy5h
dHRlc3RhdGlvbik7Ci0gICAgICAgIGlmICghcmVzcG9uc2UpIHsKLSAgICAgICAgICAgIHJlY2Vp
dmVSZXNwb25kKEV4Y2VwdGlvbkRhdGEgeyBVbmtub3duRXJyb3IsICJDb3VsZG4ndCBwYXJzZSB0
aGUgVTJGIHJlZ2lzdGVyIHJlc3BvbnNlLiJfcyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICByZWNlaXZlUmVzcG9uZChXVEZNb3ZlKCpyZXNwb25zZSkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNXX0NP
TkRJVElPTlNfTk9UX1NBVElTRklFRDoKLSAgICAgICAgLy8gUG9sbGluZyBpcyByZXF1aXJlZCBk
dXJpbmcgdGVzdCBvZiB1c2VyIHByZXNlbmNlLgotICAgICAgICBtX3JldHJ5VGltZXIuc3RhcnRP
bmVTaG90KFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMocmV0cnlUaW1lT3V0VmFsdWVNcykpOwot
ICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhj
ZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBpbnRlcm5hbCBl
cnJvci4gRXJyb3IgY29kZTogIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFwZHVSZXNwb25zZS5z
dGF0dXMoKSkpIH0pOwotICAgIH0KLX0KLQotdm9pZCBVMmZIaWRBdXRoZW50aWNhdG9yOjpjb250
aW51ZUNoZWNrT25seUNvbW1hbmRBZnRlclJlc3BvbnNlUmVjZWl2ZWQoQXBkdVJlc3BvbnNlJiYg
YXBkdVJlc3BvbnNlKQotewotICAgIHN3aXRjaCAoYXBkdVJlc3BvbnNlLnN0YXR1cygpKSB7Ci0g
ICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1dfTk9fRVJST1I6Ci0gICAgY2FzZSBBcGR1
UmVzcG9uc2U6OlN0YXR1czo6U1dfQ09ORElUSU9OU19OT1RfU0FUSVNGSUVEOgotICAgICAgICBp
c3N1ZU5ld0NvbW1hbmQoY29uc3RydWN0Qm9ndXNVMmZSZWdpc3RyYXRpb25Db21tYW5kKCksIENv
bW1hbmRUeXBlOjpCb2d1c0NvbW1hbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgY2hlY2tFeGNsdWRlTGlzdChtX25leHRMaXN0SW5kZXgrKyk7Ci0gICAgfQotfQot
Ci12b2lkIFUyZkhpZEF1dGhlbnRpY2F0b3I6OmNvbnRpbnVlQm9ndXNDb21tYW5kQWZ0ZXJSZXNw
b25zZVJlY2VpdmVkKEFwZHVSZXNwb25zZSYmIGFwZHVSZXNwb25zZSkKLXsKLSAgICBzd2l0Y2gg
KGFwZHVSZXNwb25zZS5zdGF0dXMoKSkgewotICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6
OlNXX05PX0VSUk9SOgotICAgICAgICByZWNlaXZlUmVzcG9uZChFeGNlcHRpb25EYXRhIHsgSW52
YWxpZFN0YXRlRXJyb3IsICJBdCBsZWFzdCBvbmUgY3JlZGVudGlhbCBtYXRjaGVzIGFuIGVudHJ5
IG9mIHRoZSBleGNsdWRlQ3JlZGVudGlhbHMgbGlzdCBpbiB0aGUgYXV0aGVudGljYXRvci4iX3Mg
fSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19D
T05ESVRJT05TX05PVF9TQVRJU0ZJRUQ6Ci0gICAgICAgIC8vIFBvbGxpbmcgaXMgcmVxdWlyZWQg
ZHVyaW5nIHRlc3Qgb2YgdXNlciBwcmVzZW5jZS4KLSAgICAgICAgbV9yZXRyeVRpbWVyLnN0YXJ0
T25lU2hvdChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKHJldHJ5VGltZU91dFZhbHVlTXMpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlY2VpdmVSZXNwb25kKEV4
Y2VwdGlvbkRhdGEgeyBVbmtub3duRXJyb3IsIG1ha2VTdHJpbmcoIlVua25vd24gaW50ZXJuYWwg
ZXJyb3IuIEVycm9yIGNvZGU6ICIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihhcGR1UmVzcG9uc2Uu
c3RhdHVzKCkpKSB9KTsKLSAgICB9Ci19Ci0KLXZvaWQgVTJmSGlkQXV0aGVudGljYXRvcjo6Y29u
dGludWVTaWduQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChBcGR1UmVzcG9uc2UmJiBhcGR1
UmVzcG9uc2UpCi17Ci0gICAgc3dpdGNoIChhcGR1UmVzcG9uc2Uuc3RhdHVzKCkpIHsKLSAgICBj
YXNlIEFwZHVSZXNwb25zZTo6U3RhdHVzOjpTV19OT19FUlJPUjogewotICAgICAgICBPcHRpb25h
bDxQdWJsaWNLZXlDcmVkZW50aWFsRGF0YT4gcmVzcG9uc2U7Ci0gICAgICAgIGlmIChtX2lzQXBw
SWQpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXF1ZXN0RGF0YSgpLnJlcXVlc3RPcHRpb25zLmV4
dGVuc2lvbnMgJiYgIXJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9ucy0+YXBw
aWQuaXNOdWxsKCkpOwotICAgICAgICAgICAgcmVzcG9uc2UgPSByZWFkVTJmU2lnblJlc3BvbnNl
KHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9ucy0+YXBwaWQsIHJlcXVlc3RE
YXRhKCkucmVxdWVzdE9wdGlvbnMuYWxsb3dDcmVkZW50aWFsc1ttX25leHRMaXN0SW5kZXggLSAx
XS5pZFZlY3RvciwgYXBkdVJlc3BvbnNlLmRhdGEoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgcmVzcG9uc2UgPSByZWFkVTJmU2lnblJlc3BvbnNlKHJlcXVlc3REYXRhKCkucmVxdWVz
dE9wdGlvbnMucnBJZCwgcmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5hbGxvd0NyZWRlbnRp
YWxzW21fbmV4dExpc3RJbmRleCAtIDFdLmlkVmVjdG9yLCBhcGR1UmVzcG9uc2UuZGF0YSgpKTsK
LSAgICAgICAgaWYgKCFyZXNwb25zZSkgewotICAgICAgICAgICAgcmVjZWl2ZVJlc3BvbmQoRXhj
ZXB0aW9uRGF0YSB7IFVua25vd25FcnJvciwgIkNvdWxkbid0IHBhcnNlIHRoZSBVMkYgc2lnbiBy
ZXNwb25zZS4iX3MgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1faXNBcHBJZCkKLSAgICAgICAgICAgIHJlc3BvbnNlLT5hcHBpZCA9IG1faXNBcHBJZDsK
LQotICAgICAgICByZWNlaXZlUmVzcG9uZChXVEZNb3ZlKCpyZXNwb25zZSkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQXBkdVJlc3BvbnNlOjpTdGF0dXM6OlNXX0NPTkRJVElP
TlNfTk9UX1NBVElTRklFRDoKLSAgICAgICAgLy8gUG9sbGluZyBpcyByZXF1aXJlZCBkdXJpbmcg
dGVzdCBvZiB1c2VyIHByZXNlbmNlLgotICAgICAgICBtX3JldHJ5VGltZXIuc3RhcnRPbmVTaG90
KFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMocmV0cnlUaW1lT3V0VmFsdWVNcykpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBBcGR1UmVzcG9uc2U6OlN0YXR1czo6U1dfV1JPTkdfREFUQToK
LSAgICAgICAgaWYgKHJlcXVlc3REYXRhKCkucmVxdWVzdE9wdGlvbnMuZXh0ZW5zaW9ucyAmJiAh
cmVxdWVzdERhdGEoKS5yZXF1ZXN0T3B0aW9ucy5leHRlbnNpb25zLT5hcHBpZC5pc051bGwoKSkg
ewotICAgICAgICAgICAgaWYgKCFtX2lzQXBwSWQpIHsKLSAgICAgICAgICAgICAgICBtX2lzQXBw
SWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlzc3VlU2lnbkNvbW1hbmQobV9uZXh0TGlzdElu
ZGV4IC0gMSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9pc0FwcElkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaXNzdWVTaWduQ29t
bWFuZChtX25leHRMaXN0SW5kZXgrKyk7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBpc3N1ZVNpZ25Db21tYW5kKG1fbmV4dExpc3RJbmRleCsrKTsKLSAgICB9Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVVRITikgJiYg
UExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vZmlkby9VMmZIaWRBdXRoZW50aWNhdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1UyZkhpZEF1dGhlbnRpY2F0b3IuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFhYjY2NmVkM2Y5YzVhMjZjNWNjYzM3NTExODVm
ZWMzNzgyMzg5OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9maWRvL1UyZkhpZEF1
dGhlbnRpY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykK
LQotI2luY2x1ZGUgIkF1dGhlbnRpY2F0b3IuaCIKLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgot
Ci1uYW1lc3BhY2UgYXBkdSB7Ci1jbGFzcyBBcGR1UmVzcG9uc2U7Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBDdGFwSGlkRHJpdmVyOwotCi1jbGFzcyBVMmZIaWRBdXRoZW50aWNh
dG9yIGZpbmFsIDogcHVibGljIEF1dGhlbnRpY2F0b3IgewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8VTJmSGlkQXV0aGVudGljYXRvcj4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxDdGFwSGlkRHJp
dmVyPiYmIGRyaXZlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFUyZkhp
ZEF1dGhlbnRpY2F0b3IoV1RGTW92ZShkcml2ZXIpKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IGV4cGxpY2l0IFUyZkhpZEF1dGhlbnRpY2F0b3Ioc3RkOjp1bmlxdWVfcHRyPEN0YXBIaWREcml2
ZXI+JiYpOwotCi0gICAgdm9pZCBtYWtlQ3JlZGVudGlhbCgpIGZpbmFsOwotICAgIHZvaWQgY2hl
Y2tFeGNsdWRlTGlzdChzaXplX3QgaW5kZXgpOwotICAgIHZvaWQgaXNzdWVSZWdpc3RlckNvbW1h
bmQoKTsKLSAgICB2b2lkIGdldEFzc2VydGlvbigpIGZpbmFsOwotICAgIHZvaWQgaXNzdWVTaWdu
Q29tbWFuZChzaXplX3QgaW5kZXgpOwotCi0gICAgZW51bSBjbGFzcyBDb21tYW5kVHlwZSA6IHVp
bnQ4X3QgewotICAgICAgICBSZWdpc3RlckNvbW1hbmQsCi0gICAgICAgIENoZWNrT25seUNvbW1h
bmQsCi0gICAgICAgIEJvZ3VzQ29tbWFuZCwKLSAgICAgICAgU2lnbkNvbW1hbmQKLSAgICB9Owot
ICAgIHZvaWQgaXNzdWVOZXdDb21tYW5kKFZlY3Rvcjx1aW50OF90PiYmIGNvbW1hbmQsIENvbW1h
bmRUeXBlKTsKLSAgICB2b2lkIHJldHJ5TGFzdENvbW1hbmQoKSB7IGlzc3VlQ29tbWFuZChtX2xh
c3RDb21tYW5kLCBtX2xhc3RDb21tYW5kVHlwZSk7IH0KLSAgICB2b2lkIGlzc3VlQ29tbWFuZChj
b25zdCBWZWN0b3I8dWludDhfdD4mIGNvbW1hbmQsIENvbW1hbmRUeXBlKTsKLSAgICB2b2lkIHJl
c3BvbnNlUmVjZWl2ZWQoVmVjdG9yPHVpbnQ4X3Q+JiYgcmVzcG9uc2UsIENvbW1hbmRUeXBlKTsK
LSAgICB2b2lkIGNvbnRpbnVlUmVnaXN0ZXJDb21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKGFw
ZHU6OkFwZHVSZXNwb25zZSYmKTsKLSAgICB2b2lkIGNvbnRpbnVlQ2hlY2tPbmx5Q29tbWFuZEFm
dGVyUmVzcG9uc2VSZWNlaXZlZChhcGR1OjpBcGR1UmVzcG9uc2UmJik7Ci0gICAgdm9pZCBjb250
aW51ZUJvZ3VzQ29tbWFuZEFmdGVyUmVzcG9uc2VSZWNlaXZlZChhcGR1OjpBcGR1UmVzcG9uc2Um
Jik7Ci0gICAgdm9pZCBjb250aW51ZVNpZ25Db21tYW5kQWZ0ZXJSZXNwb25zZVJlY2VpdmVkKGFw
ZHU6OkFwZHVSZXNwb25zZSYmKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDdGFwSGlkRHJpdmVy
PiBtX2RyaXZlcjsKLSAgICBSdW5Mb29wOjpUaW1lcjxVMmZIaWRBdXRoZW50aWNhdG9yPiBtX3Jl
dHJ5VGltZXI7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IG1fbGFzdENvbW1hbmQ7Ci0gICAgQ29tbWFu
ZFR5cGUgbV9sYXN0Q29tbWFuZFR5cGU7Ci0gICAgc2l6ZV90IG1fbmV4dExpc3RJbmRleCB7IDAg
fTsKLSAgICBib29sIG1faXNBcHBJZCB7IGZhbHNlIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVUSE4pICYmIFBMQVRGT1JNKE1BQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUx
NjY0MDYwY2E5MzdiNzg3M2IzZTRlNGUwYmY0NmRlN2YxZjg3ZjguLjMwYjIxMzYzMzM4ZTQzYzZj
MzEwOTE0ZDM0MjkyYzNhMTViOWMwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAzNyw3ICsxMDM3LDcgQEAKIAkJNTcwQUI4RjMy
MEFFM0JENzAwQjhCRTg3IC8qIFNlY0tleVByb3h5U3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MEFCOEYyMjBBRTNCRDcwMEI4QkU4NyAvKiBT
ZWNLZXlQcm94eVN0b3JlLmggKi87IH07CiAJCTU3MkZENDQzMjIyNjVDRTIwMEExRUNDMyAvKiBX
ZWJWaWV3RGlkTW92ZVRvV2luZG93T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkZENDQxMjIyNjVDRTIwMEExRUNDMyAvKiBXZWJWaWV3
RGlkTW92ZVRvV2luZG93T2JzZXJ2ZXIuaCAqLzsgfTsKIAkJNTc1OTdFQjkyMTgxMUQ5QTAwMzdG
OTI0IC8qIEN0YXBIaWREcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU3NTk3RUI3MjE4MTFEOUEwMDM3RjkyNCAvKiBDdGFwSGlkRHJpdmVyLmgg
Ki87IH07Ci0JCTU3NTk3RUJEMjE4MTg0OTAwMDM3RjkyNCAvKiBDdGFwSGlkQXV0aGVudGljYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc1OTdF
QkIyMTgxODQ4RjAwMzdGOTI0IC8qIEN0YXBIaWRBdXRoZW50aWNhdG9yLmggKi87IH07CisJCTU3
NTk3RUJEMjE4MTg0OTAwMDM3RjkyNCAvKiBDdGFwQXV0aGVudGljYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc1OTdFQkIyMTgxODQ4RjAwMzdG
OTI0IC8qIEN0YXBBdXRoZW50aWNhdG9yLmggKi87IH07CiAJCTU3NkNBOUQ3MjJCODYyMTgwMDMw
MTQzQyAvKiBTT0F1dGhvcml6YXRpb25OU1VSTEV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMxNzMyMkIzNTE0ODAwOEQwRThCIC8qIFNP
QXV0aG9yaXphdGlvbk5TVVJMRXh0cmFzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTc3MkYyMDYyMTdEQkQ2QTAwNTZCRjJDIC8qIEhpZFNlcnZp
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3NzJG
MjA0MjE3REJENkEwMDU2QkYyQyAvKiBIaWRTZXJ2aWNlLmggKi87IH07CiAJCTU3OERDMjk4MjE1
NUEwMDIwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OERDMjk3MjE1NUEwMDEwMDc0
RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCAqLzsgfTsKQEAgLTEwNjEsNyAr
MTA2MSw3IEBACiAJCTU3RENFREMzMjE0RjExNEMwMDE2Qjg0NyAvKiBNb2NrTG9jYWxTZXJ2aWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0RDRURD
MTIxNEYxMTRDMDAxNkI4NDcgLyogTW9ja0xvY2FsU2VydmljZS5oICovOyB9OwogCQk1N0RDRURD
NzIxNEYxODMwMDAxNkI4NDcgLyogTW9ja0xvY2FsQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdEQ0VEQzUyMTRGMTgzMDAwMTZCODQ3
IC8qIE1vY2tMb2NhbENvbm5lY3Rpb24uaCAqLzsgfTsKIAkJNTdEQ0VEQ0IyMTRGNEU0MjAwMTZC
ODQ3IC8qIE1vY2tBdXRoZW50aWNhdG9yTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdEQ0VEQzkyMTRGNEU0MjAwMTZCODQ3IC8qIE1vY2tB
dXRoZW50aWNhdG9yTWFuYWdlci5oICovOyB9OwotCQk1N0VCMkUzQTIxRTE5ODNFMDBCODlDREYg
LyogVTJmSGlkQXV0aGVudGljYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTdFQjJFMzgyMUUxOTgzRTAwQjg5Q0RGIC8qIFUyZkhpZEF1dGhlbnRp
Y2F0b3IuaCAqLzsgfTsKKwkJNTdFQjJFM0EyMUUxOTgzRTAwQjg5Q0RGIC8qIFUyZkF1dGhlbnRp
Y2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
RUIyRTM4MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZBdXRoZW50aWNhdG9yLmggKi87IH07CiAJCTU3
RkQzMTgwMjJCMzUxNTgwMDhEMEU4QiAvKiBOYXZpZ2F0aW9uU09BdXRob3JpemF0aW9uU2Vzc2lv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdGRDMx
NzgyMkIzNTE0OTAwOEQwRThCIC8qIE5hdmlnYXRpb25TT0F1dGhvcml6YXRpb25TZXNzaW9uLmgg
Ki87IH07CiAJCTU3RkQzMTgxMjJCMzUxNUIwMDhEMEU4QiAvKiBQb3BVcFNPQXV0aG9yaXphdGlv
blNlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU3RkQzMTcwMjJCMzUxNDgwMDhEMEU4QiAvKiBQb3BVcFNPQXV0aG9yaXphdGlvblNlc3Npb24u
aCAqLzsgfTsKIAkJNTdGRDMxODIyMkIzNTE1RTAwOEQwRThCIC8qIFJlZGlyZWN0U09BdXRob3Jp
emF0aW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTdGRDMxNzQyMkIzNTE0OTAwOEQwRThCIC8qIFJlZGlyZWN0U09BdXRob3JpemF0aW9u
U2Vzc2lvbi5oICovOyB9OwpAQCAtMzQ2Niw2ICszNDY2LDcgQEAKIAkJNTcwQUI4RjIyMEFFM0JE
NzAwQjhCRTg3IC8qIFNlY0tleVByb3h5U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjS2V5UHJv
eHlTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzBBQjkwMDIwQjI1MTc0
MDBCOEJFODcgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNvY29hLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNvY29hLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzBBQjkwMzIwQjI1NDFDMDBCOEJFODcgLyogU2Vj
S2V5UHJveHlTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFNlY0tleVByb3h5U3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3MEI3
M0NGMjMwMjM2REQwMEZBRUM1MyAvKiBDdGFwRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEN0YXBE
cml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcyRkQ0NDEyMjI2NUNFMjAw
QTFFQ0MzIC8qIFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJWaWV3RGlkTW92ZVRvV2luZG93T2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTc1MDc1QTcyMEFCNzYzNjAwNjkzRUE5IC8qIFdlYkNyZWRlbnRpYWxNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDcmVkZW50aWFsTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzUwRjMyQTIwMzJENEU1MDAzODkzNDcgLyogTG9jYWxBdXRoZW50
aWNhdGlvbi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IExvY2FsQXV0aGVudGljYXRpb24u
ZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Mb2NhbEF1dGhlbnRp
Y2F0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CkBAIC0zNDc0LDggKzM0
NzUsOCBAQAogCQk1NzU2REQ3NjIxOEQxNEEyMDBENEVFNkEgLyogTW9ja0hpZENvbm5lY3Rpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTW9ja0hpZENvbm5lY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTc1NkRENzcyMThEMTRBMjAwRDRFRTZBIC8qIE1vY2tIaWRDb25uZWN0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vY2tIaWRDb25uZWN0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTc1OTdFQjcyMTgxMUQ5QTAwMzdGOTI0IC8qIEN0YXBIaWRE
cml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3RhcEhpZERyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1NzU5N0VCQjIxODE4NDhGMDAzN0Y5MjQgLyogQ3RhcEhpZEF1dGhlbnRp
Y2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3RhcEhpZEF1dGhlbnRpY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTc1OTdFQkMyMTgxODQ4RjAwMzdGOTI0IC8qIEN0YXBIaWRB
dXRoZW50aWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEN0YXBIaWRBdXRoZW50aWNhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTc1OTdFQkIyMTgxODQ4RjAwMzdG
OTI0IC8qIEN0YXBBdXRoZW50aWNhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEN0YXBBdXRoZW50aWNh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3NTk3RUJDMjE4MTg0OEYwMDM3
RjkyNCAvKiBDdGFwQXV0aGVudGljYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDdGFwQXV0
aGVudGljYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3NTk3RUMwMjE4
MThCRTIwMDM3RjkyNCAvKiBDdGFwSGlkRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEN0YXBIaWREcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1NzYwODI4QjIwMjk4NTQyMDAxMTY2NzggLyogV2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzYwODI4QzIwMjk4NTQyMDAxMTY2NzggLyog
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkF1
dGhlbnRpY2F0b3JDb29yZGluYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0zNTE2LDggKzM1MTcsOCBAQAogCQk1N0RDRURDNjIxNEYxODMwMDAxNkI4NDcgLyogTW9ja0xv
Y2FsQ29ubmVjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1vY2tMb2NhbENvbm5lY3Rp
b24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3RENFREM5MjE0RjRFNDIwMDE2
Qjg0NyAvKiBNb2NrQXV0aGVudGljYXRvck1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja0F1
dGhlbnRpY2F0b3JNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3RENF
RENEMjE0RjUxNjgwMDE2Qjg0NyAvKiBNb2NrQXV0aGVudGljYXRvck1hbmFnZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ja0F1dGhlbnRpY2F0b3JNYW5hZ2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTdFQjJFMzgyMUUxOTgzRTAwQjg5
Q0RGIC8qIFUyZkhpZEF1dGhlbnRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVTJmSGlkQXV0aGVu
dGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1N0VCMkUzOTIxRTE5ODNF
MDBCODlDREYgLyogVTJmSGlkQXV0aGVudGljYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBV
MmZIaWRBdXRoZW50aWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdF
QjJFMzgyMUUxOTgzRTAwQjg5Q0RGIC8qIFUyZkF1dGhlbnRpY2F0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVTJmQXV0aGVudGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1N0VC
MkUzOTIxRTE5ODNFMDBCODlDREYgLyogVTJmQXV0aGVudGljYXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBVMmZBdXRoZW50aWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTdGRDMxNzAyMkIzNTE0ODAwOEQwRThCIC8qIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb3BVcFNPQXV0aG9yaXphdGlv
blNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTdGRDMxNzEyMkIzNTE0
ODAwOEQwRThCIC8qIFdLU09BdXRob3JpemF0aW9uRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tTT0F1dGhvcml6YXRpb25EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1N0ZEMzE3MjIyQjM1MTQ4MDA4RDBFOEIgLyogU09BdXRob3Jp
emF0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU09B
dXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTY5NTUsMTIgKzY5NTYsMTMgQEAKIAkJNTc1OTdFQkYyMTgxODRCMjAwMzdGOTI0IC8qIGZpZG8g
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTU3NTk3RUJD
MjE4MTg0OEYwMDM3RjkyNCAvKiBDdGFwSGlkQXV0aGVudGljYXRvci5jcHAgKi8sCi0JCQkJNTc1
OTdFQkIyMTgxODQ4RjAwMzdGOTI0IC8qIEN0YXBIaWRBdXRoZW50aWNhdG9yLmggKi8sCisJCQkJ
NTc1OTdFQkMyMTgxODQ4RjAwMzdGOTI0IC8qIEN0YXBBdXRoZW50aWNhdG9yLmNwcCAqLywKKwkJ
CQk1NzU5N0VCQjIxODE4NDhGMDAzN0Y5MjQgLyogQ3RhcEF1dGhlbnRpY2F0b3IuaCAqLywKKwkJ
CQk1NzBCNzNDRjIzMDIzNkREMDBGQUVDNTMgLyogQ3RhcERyaXZlci5oICovLAogCQkJCTU3NTk3
RUMwMjE4MThCRTIwMDM3RjkyNCAvKiBDdGFwSGlkRHJpdmVyLmNwcCAqLywKIAkJCQk1NzU5N0VC
NzIxODExRDlBMDAzN0Y5MjQgLyogQ3RhcEhpZERyaXZlci5oICovLAotCQkJCTU3RUIyRTM5MjFF
MTk4M0UwMEI4OUNERiAvKiBVMmZIaWRBdXRoZW50aWNhdG9yLmNwcCAqLywKLQkJCQk1N0VCMkUz
ODIxRTE5ODNFMDBCODlDREYgLyogVTJmSGlkQXV0aGVudGljYXRvci5oICovLAorCQkJCTU3RUIy
RTM5MjFFMTk4M0UwMEI4OUNERiAvKiBVMmZBdXRoZW50aWNhdG9yLmNwcCAqLywKKwkJCQk1N0VC
MkUzODIxRTE5ODNFMDBCODlDREYgLyogVTJmQXV0aGVudGljYXRvci5oICovLAogCQkJKTsKIAkJ
CXBhdGggPSBmaWRvOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTkzNDcsNyArOTM0
OSw3IEBACiAJCQkJMzdDMjFDQUUxRTk5NEMwQzAwMjlENUY5IC8qIENvcmVQcmVkaWN0aW9uU1BJ
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCODc4QjYxNTEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVj
dGlvblBhbmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUZCNjgyNzFGNkU1MUMxMDBDNDNGOUYg
LyogQ3Jhc2hSZXBvcnRlckNsaWVudFNQSS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTc1OTdFQkQy
MTgxODQ5MDAwMzdGOTI0IC8qIEN0YXBIaWRBdXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1NzU5N0VCRDIxODE4NDkwMDAzN0Y5MjQgLyogQ3RhcEF1dGhlbnRpY2F0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTU3NTk3RUI5MjE4MTFEOUEwMDM3RjkyNCAvKiBDdGFwSGlkRHJpdmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTVGOTE3MTFDNTk2NzZFMDAyOUU5MkQgLyogRGF0YURl
dGVjdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNzUzODAxODNCRTUwRjAwNzJD
QjE1IC8qIERhdGFSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTY5NSw3ICs5Njk3LDcg
QEAKIAkJCQkxQUYwNUQ4NzE0Njg4MzQ4MDA4QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWFQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkY4MzM2ODYxRkExMzlERjAwQzZF
MDgwIC8qIFRvdWNoQmFyTWVudURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2QkVCNkUzMjJG
QkIyMUEwMDI2OTg2NyAvKiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTU3RUIyRTNBMjFFMTk4M0UwMEI4OUNERiAvKiBVMmZIaWRBdXRoZW50aWNh
dG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk1N0VCMkUzQTIxRTE5ODNFMDBCODlDREYgLyogVTJm
QXV0aGVudGljYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGRTQzNjYxOEI2QzA4MTAwOUM3
QTQ4IC8qIFVJRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMUI1MUQ1OTE3RkYw
MEREN0M2OCAvKiBVSUdhbWVwYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMUE5MUQ1NTI5
MzQwMEREN0M2OCAvKiBVSUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCg==
</data>
<flag name="review"
          id="391921"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>