<?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>230312</bug_id>
          
          <creation_ts>2021-09-15 11:10:10 -0700</creation_ts>
          <short_desc>Rename ScrollController to ScollingEffectsController</short_desc>
          <delta_ts>2021-09-15 16:51:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Scrolling</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>annulen</cc>
    
    <cc>cathiechen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>luiz</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1793765</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-15 11:10:10 -0700</bug_when>
    <thetext>Rename ScrollController to ScollingEffectsController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793766</commentid>
    <comment_count>1</comment_count>
      <attachid>438261</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-15 11:12:25 -0700</bug_when>
    <thetext>Created attachment 438261
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793790</commentid>
    <comment_count>2</comment_count>
      <attachid>438269</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-15 11:52:12 -0700</bug_when>
    <thetext>Created attachment 438269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793793</commentid>
    <comment_count>3</comment_count>
      <attachid>438271</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-09-15 11:58:26 -0700</bug_when>
    <thetext>Created attachment 438271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793891</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-15 16:50:44 -0700</bug_when>
    <thetext>Committed r282480 (241728@main): &lt;https://commits.webkit.org/241728@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 438271.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793892</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-15 16:51:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/83174051&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438261</attachid>
            <date>2021-09-15 11:12:25 -0700</date>
            <delta_ts>2021-09-15 11:32:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230312-20210915111224.patch</filename>
            <type>text/plain</type>
            <size>122604</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWVkM2VlMjc0M2EyYjNi
M2I2NWFlMGIxMzJkMTk5ZmMxNjcxM2VlMy4uMTk1ZGQ4MTU5NGFhMWMwNGRkMTcwOGZkNzEwZDRj
N2ZmYTk0ZTM4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDIxLTA5LTE1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBTY3Jv
bGxDb250cm9sbGVyIHRvIFNjb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDMxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNjcm9sbENvbnRyb2xsZXIgaXMgYWJv
dXQgcnViYmVyYmFuZGluZywgbW9tZW50dW0gZXRjLCB3aGljaCBhcmUgc2Nyb2xsaW5nICJlZmZl
Y3RzIiwKKyAgICAgICAgc28gcmVuYW1lIHRvIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLgor
CisgICAgICAgIFNjcm9sbENvbnRyb2xsZXIgaXMgdGhlIG5hbWUgSSB3YW50IHRvIHVsdGltYXRl
bHkgdXNlIGZvciBTY3JvbGxBbmltYXRvci4KKworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtl
OgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBh
Z2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2Ny
b2xsYWJsZUFyZWFDYW5IYW5kbGVFdmVudCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaDoKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6
OnN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c3RvcEFuaW1hdGlvbkNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFsbG93
c0hvcml6b250YWxTdHJldGNoaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjpLZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnN0b3BBbmltYXRpb25DYWxsYmFjayk6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6YW5pbWF0aW9uQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0YXJ0
T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyOjpiZWdpbktleWJvYXJkU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdG9wS2V5Ym9hcmRTY3JvbGxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNldElzQW5pbWF0
aW5nUnViYmVyQmFuZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJv
bGxlcjo6c2V0SXNBbmltYXRpbmdTY3JvbGxTbmFwKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyOjpzZXRJc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1c2VzU2Nyb2xs
U25hcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxl
cjo6c2V0U25hcE9mZnNldHNJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVj
dHNDb250cm9sbGVyOjpzbmFwT2Zmc2V0c0luZm8gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNl
dEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5k
T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjph
ZGp1c3RTY3JvbGxEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZl
Y3RzQ29udHJvbGxlcjo6dXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQ2xpZW50T2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpyZXNuYXBB
ZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxl
cjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6flNjcm9sbGluZ0VmZmVjdHNDb250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdG9w
QWxsVGltZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
OjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZm
ZWN0c0NvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBBbmltYXRpbmdTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6dXBkYXRlUnViYmVyQmFuZEFu
aW1hdGluZ1N0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxpbmdFZmZlY3RzQ29udHJv
bGxlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJv
bGxlci5oLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxl
ci5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxDb250
cm9sbGVyLm1tLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6
On5TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdFZmZlY3RzQ29udHJvbGxlcjo6c3RvcEFsbFRpbWVycyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6d2hlZWxEZWx0YUJpYXNpbmdUb3dh
cmRzVmVydGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xs
ZXI6OmRpcmVjdGlvbkZyb21FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZl
Y3RzQ29udHJvbGxlcjo6dXBkYXRlUnViYmVyQmFuZEFuaW1hdGluZ1N0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzY3JvbGxQb3NpdGlvbkNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OmlzVXNl
clNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZm
ZWN0c0NvbnRyb2xsZXI6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jl
c3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6
OnN0b3BSdWJiZXJiYW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyOjpzdGFydFJ1YmJlcmJhbmRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0b3BTbmFwUnViYmVyYmFuZEFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c25hcFJ1YmJl
ckJhbmQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNo
b3VsZFJ1YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNob3VsZFJ1YmJlckJhbmRJbkRpcmVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxl
cjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVybmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnVwZGF0ZVJ1
YmJlckJhbmRpbmdFZGdlcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29u
dHJvbGxlcjo6c2hvdWxkT3ZlcnJpZGVNb21lbnR1bVNjcm9sbGluZyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2NoZWR1bGVTdGF0ZWxlc3NT
Y3JvbGxTbmFwKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
OjpzdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0YXJ0RGVmZXJyaW5nV2hlZWxFdmVudFRlc3RD
b21wbGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdFZmZlY3RzQ29udHJvbGxlcjo6c3RvcERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlv
bkR1ZVRvU2Nyb2xsU25hcHBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0
c0NvbnRyb2xsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6dXBkYXRlR2VzdHVyZUluUHJvZ3Jl
c3NTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6
c3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyOjpzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcEFuaW1hdGlu
Z1N0YXRlKToKKwogMjAyMS0wOS0xNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KIAogICAgICAgICBNb3ZlIHNjcm9sbGJhci1yZWxhdGVkIGNvZGUgb3V0IG9mIFNjcm9s
bEFuaW1hdG9yIGFuZCBpbnRvIFNjcm9sbGJhcnNDb250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCmluZGV4IDA1NmNhMjdmN2YyN2EyNGMxOTQ0YzAxODVjNjI1NzRkMGRkZDhhMmQuLjkw
ZGJlMTJkOTdjYTAwNDY5NTYwNTJkOWFiNWJiY2I5NDAyOTI5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCkBAIC0zNzQsNyArMzc0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vbWFjL1B1YmxpY1N1ZmZpeE1hYy5tbQogICAgIHBsYXRmb3JtL21hYy9T
U0xLZXlHZW5lcmF0b3JNYWMubW0KICAgICBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMu
bW0KLSAgICBwbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQorICAgIHBsYXRmb3JtL21h
Yy9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5tbQogICAgIHBsYXRmb3JtL21hYy9TY3JvbGxW
aWV3TWFjLm1tCiAgICAgcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCiAgICAgcGxh
dGZvcm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVNYWMubW0KQEAgLTU1NCw3ICs1NTQs
NyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS9NYWluVGhyZWFkU2hhcmVkVGltZXIuaAogICAgIHBsYXRmb3JtL1BpY3R1cmVJblBp
Y3R1cmVTdXBwb3J0LmgKICAgICBwbGF0Zm9ybS9QbGF0Zm9ybUNvbnRlbnRGaWx0ZXIuaAotICAg
IHBsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaAorICAgIHBsYXRmb3JtL1Njcm9sbGluZ0VmZmVj
dHNDb250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCiAg
ICAgcGxhdGZvcm0vU2hhcmVkVGltZXIuaAogICAgIHBsYXRmb3JtL1N5c3RlbVNvdW5kTWFuYWdl
ci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CmluZGV4IGRkOTM0YjA3MjlhODI3ZWM0Y2YzOWI4YmI1OWEyNmZjOGIx
N2VmNmMuLjRkZGYyYjE2NjdkYjg3MzU2YTdmODM2ZDFhYzUwM2JjNzdjODI1YjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CkBAIC0xODEyLDcgKzE4MTIsNyBAQCBwbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25D
aGVja3MuY3BwCiBwbGF0Zm9ybS9TU0xLZXlHZW5lcmF0b3IuY3BwCiBwbGF0Zm9ybS9TY3JvbGxB
bmltYXRpb25TbW9vdGguY3BwCiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKLXBsYXRmb3Jt
L1Njcm9sbENvbnRyb2xsZXIuY3BwCitwbGF0Zm9ybS9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxl
ci5jcHAKIHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcAogcGxhdGZvcm0vU2Ny
b2xsVHlwZXMuY3BwCiBwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggZGYxZWNmYTI2YTJjMDdhNmU2MmI1YTc1YjdhNWFkMjE5OGI1YThiNC4uNWM0YWFj
OGMyZGI0NTliNTY4Mjc2MjFkYzYzMzM0YTVmYzM4NjQ0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC00ODksNyArNDg5LDcgQEAgcGxhdGZvcm0vbWFjL1Bvd2VyT2JzZXJ2ZXJNYWMuY3Bw
CiBwbGF0Zm9ybS9tYWMvUHVibGljU3VmZml4TWFjLm1tCiBwbGF0Zm9ybS9tYWMvU1NMS2V5R2Vu
ZXJhdG9yTWFjLm1tCiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0gQG5vLXVuaWZ5
Ci1wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQorcGxhdGZvcm0vbWFjL1Njcm9sbGlu
Z0VmZmVjdHNDb250cm9sbGVyLm1tCiBwbGF0Zm9ybS9tYWMvU2Nyb2xsVmlld01hYy5tbQogcGxh
dGZvcm0vbWFjL1Njcm9sbGJhcnNDb250cm9sbGVyTWFjLm1tIEBuby11bmlmeQogcGxhdGZvcm0v
bWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJmNDM4ZTBhYzYyZWI4ZGNk
MmExZTlkYmFkZDUzZjhjMDVmNmY5OTQuLjBhM2ZmMGU1YzhlN2JiM2I5NGQxMjcxNzQ0YThmNWY5
ZGQ5NTQyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTIwMDEsNyArMjAwMSw3IEBACiAJCTVBNTc0RjI1MTMxREI5MzkwMDQ3
MUI4OCAvKiBSZW5kZXJRdW90ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUE1NzRGMjMxMzFEQjkzOTAwNDcxQjg4IC8qIFJlbmRlclF1b3RlLmggKi87
IH07CiAJCTVBNTc0RjI5MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QTU3NEYyNzEzMURCOTZEMDA0
NzFCODggLyogUXVvdGVzRGF0YS5oICovOyB9OwogCQk1QjMwNjk1RTE4QjNEMzQ1MDA5OUQ1RTgg
LyogV2ViR0xEcmF3QnVmZmVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUIzMDY5NUIxOEIzRDM0NTAwOTlENUU4IC8qIFdlYkdMRHJhd0J1ZmZlcnMu
aCAqLzsgfTsKLQkJNUI0NjY1NjMyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbENvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNDY2NTVG
MjVEMTRDMDkwMDBDRkUxNCAvKiBTY3JvbGxDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNUI0NjY1NjMyNUQxNEMwQTAwMENGRTE0
IC8qIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjQ2NjU1RjI1RDE0QzA5MDAwQ0ZFMTQgLyogU2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1QjQ2NjU2NDI1RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVCNDY2NTYwMjVEMTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDMkIx
QUVDMjIzOTdFQkMwMEI5MUNGNyAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUY3OEQwQjFDMjU0MjJDMDAy
NDU0NDYgLyogUmVzb3VyY2VSZXNwb25zZUNvY29hLm1tICovOyB9OwogCQk1QzQzMDRCMTE5MUFD
OTA4MDAwRTJCQzAgLyogRVhUU2hhZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0MzA0QUUxOTFBQzkwODAwMEUyQkMwIC8qIEVY
VFNoYWRlclRleHR1cmVMT0QuaCAqLzsgfTsKQEAgLTk3MTcsMTMgKzk3MTcsMTMgQEAKIAkJNUE1
NzRGMjYxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUXVvdGVzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVBNTc0RjI3MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1b3Rlc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUE5MTQ2OUU4RTlGODQ4NUMzN0EyODc2IC8qIEpTU1ZHR3JhcGhpY3NF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0dy
YXBoaWNzRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVCMUUwRTQz
MjVEMTYyOUIwMDI3MjI4MSAvKiBTY3JvbGxDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gU2Nyb2xsQ29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUIxRTBFNDMyNUQxNjI5QjAwMjcyMjgxIC8qIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCMzA2OTVBMThCM0QzNDUwMDk5RDVFOCAvKiBX
ZWJHTERyYXdCdWZmZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYkdMRHJhd0J1ZmZlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjMw
Njk1QjE4QjNEMzQ1MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVycy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVCMzA2OTVDMThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJz
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHTERyYXdCdWZmZXJzLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI0NjY1NUQyNUQxNEMwOTAwMENGRTE0IC8qIFNjcm9s
bFNuYXBBbmltYXRvclN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNUI0NjY1NUUyNUQxNEMwOTAwMENGRTE0IC8qIFNjcm9sbENvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsQ29udHJvbGxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVCNDY2NTVGMjVEMTRDMDkwMDBDRkUxNCAv
KiBTY3JvbGxDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cm9sbENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0NjY1NUUy
NUQxNEMwOTAwMENGRTE0IC8qIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0NjY1NUYyNUQxNEMwOTAwMENG
RTE0IC8qIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTVCNDY2NTYwMjVEMTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjdBQjlGNjI1
NjdEQjdFMDA2NTkyRDAgLyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbFNuYXBPZmZzZXRzSW5mby5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMDAxNTIxMjUwMDExMDAwMDk0QUE5MyAvKiBUZXh0
Q29kZWNTaW5nbGVCeXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRleHRDb2RlY1NpbmdsZUJ5dGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjIwMzYsNyArMjIwMzYsNyBAQAogCQkJCTBGMDIyNDUzMjZGMTVENzUwMDAyNjVDMyAvKiBTY3Jv
bGxiYXJzQ29udHJvbGxlck1hYy5tbSAqLywKIAkJCQlCQzhCODUzQzBFN0M3RjExMDBBQjY5ODQg
LyogU2Nyb2xsYmFyVGhlbWVNYWMuaCAqLywKIAkJCQlCQ0VGODY5RTBFODQ0RTlEMDBBODVDRDUg
LyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gKi8sCi0JCQkJNUIxRTBFNDMyNUQxNjI5QjAwMjcyMjgx
IC8qIFNjcm9sbENvbnRyb2xsZXIubW0gKi8sCisJCQkJNUIxRTBFNDMyNUQxNjI5QjAwMjcyMjgx
IC8qIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLm1tICovLAogCQkJCTkzNTM2NzZBMDlBRUQ4
OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tICovLAogCQkJCTA3N0FGMTQxMThGNEIxQkIw
MDAxRUQ2MSAvKiBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlTWFjLmggKi8sCiAJCQkJMDc3QUYx
NDIxOEY0QjFCQjAwMDFFRDYxIC8qIFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVNYWMubW0gKi8s
CkBAIC0yNzk5Nyw4ICsyNzk5Nyw4IEBACiAJCQkJQkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8q
IFNjcm9sbGJhclRoZW1lLmggKi8sCiAJCQkJQkMxNDAyODgwRTgzNjgwODAwMzE5NzE3IC8qIFNj
cm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCAqLywKIAkJCQlCQzE0MDI4OTBFODM2ODA4MDAzMTk3
MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAqLywKLQkJCQk1QjQ2NjU1RTI1RDE0QzA5
MDAwQ0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxlci5jcHAgKi8sCi0JCQkJNUI0NjY1NUYyNUQxNEMw
OTAwMENGRTE0IC8qIFNjcm9sbENvbnRyb2xsZXIuaCAqLywKKwkJCQk1QjQ2NjU1RTI1RDE0QzA5
MDAwQ0ZFMTQgLyogU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuY3BwICovLAorCQkJCTVCNDY2
NTVGMjVEMTRDMDkwMDBDRkUxNCAvKiBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5oICovLAog
CQkJCTVCNDY2NTVEMjVEMTRDMDkwMDBDRkUxNCAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5j
cHAgKi8sCiAJCQkJNUI0NjY1NjAyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbFNuYXBBbmltYXRv
clN0YXRlLmggKi8sCiAJCQkJMEY0Q0RFQUEyM0Q5MUE4QTAwMjUxQjAyIC8qIFNjcm9sbFR5cGVz
LmNwcCAqLywKQEAgLTM0NzU4LDExICszNDc1OCwxMSBAQAogCQkJCUJDOEI4NTNFMEU3QzdGMTEw
MEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzE0
MDYxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODNDNTc5NUQxREE1QzMwMTAwNkZBQzg2IC8qIFNjcm9sbEJlaGF2aW9yLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1QjQ2NjU2MzI1RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MDVBRUQxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9s
bGluZ0NvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUY2MkVFODE0REEyMkE3MDA0
MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTFB
OTkxMTYyNzQ2Q0IwMDI5NzMzMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzEyREJBNDkyMUY4QUQ4MzAwOEYzNkIyIC8qIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yVHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTVCNDY2NTYzMjVEMTRDMEEwMDBDRkUxNCAv
KiBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFDNjFC
MEIxREU1MzZFNzAwOEEyMTJEIC8qIFNjcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE3REVFRTgxREU5NEIwODAwQjkxNjQ0IC8qIFNjcm9sbGluZ01vbWVu
dHVtQ2FsY3VsYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDMzhCRkYxNjQ0NzNDNzAw
MDkxRUIyIC8qIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBiNmExNjc3NGM3YmEzZTZmMjU4MDZiYThi
NjRhZGIxOTk5NmI5Nzk2Li5mYjlmZDdhYmRmNWU1MDcyOWM0NjhkNWY2ZDFkMzI2NWZhNTc4MzZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMDY2LDcgKzMwNjYsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3Np
bmdCb3goTm9kZSogc3RhcnROb2RlLCBjbwogYm9vbCBFdmVudEhhbmRsZXI6OnNjcm9sbGFibGVB
cmVhQ2FuSGFuZGxlRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBT
Y3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQotICAg
IGF1dG8gYmlhc2VkRGVsdGEgPSBTY3JvbGxDb250cm9sbGVyOjp3aGVlbERlbHRhQmlhc2luZ1Rv
d2FyZHNWZXJ0aWNhbCh3aGVlbEV2ZW50KTsKKyAgICBhdXRvIGJpYXNlZERlbHRhID0gU2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXI6OndoZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRpY2FsKHdo
ZWVsRXZlbnQpOwogI2Vsc2UKICAgICBhdXRvIGJpYXNlZERlbHRhID0gd2hlZWxFdmVudC5kZWx0
YSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9t
YWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWMuaAppbmRleCA2ZGE3ZDhkNmZmMzBkZWIyZjJiNzNhNDE0ZTgyOTVmMzY2Mjg1MTgxLi4zODlm
ZTRjNDY4NmZjMzk4YmQ1OTg4NWMzOGJmMzFmODMzYzAxZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2lm
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFBMQVRGT1JNKE1BQykKIAotI2luY2x1ZGUgIlNj
cm9sbENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIE9CSkNfQ0xBU1MgTlNTY3JvbGxlckltcDsK
QEAgLTcyLDggKzcyLDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFNjcm9sbENvbnRyb2xsZXJDbGll
bnQuCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbENvbnRyb2xsZXJUaW1lcj4gY3JlYXRlVGlt
ZXIoRnVuY3Rpb248dm9pZCgpPiYmKSBmaW5hbDsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uQ2Fs
bGJhY2soU2Nyb2xsQ29udHJvbGxlciYpIGZpbmFsOwotICAgIHZvaWQgc3RvcEFuaW1hdGlvbkNh
bGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKSBmaW5hbDsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9u
Q2FsbGJhY2soU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXImKSBmaW5hbDsKKyAgICB2b2lkIHN0
b3BBbmltYXRpb25DYWxsYmFjayhTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciYpIGZpbmFsOwog
CiAgICAgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmKSBjb25zdCBmaW5hbDsKICAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyhj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdCBmaW5hbDsKQEAgLTEwMiw3ICsxMDIsNyBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCByZWxlYXNlUmVmZXJlbmNlc1RvU2Nyb2xsZXJJbXBzT25U
aGVNYWluVGhyZWFkKCk7CiAKLSAgICBTY3JvbGxDb250cm9sbGVyIG1fc2Nyb2xsQ29udHJvbGxl
cjsKKyAgICBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciBtX3Njcm9sbENvbnRyb2xsZXI7CiAK
ICAgICBSZXRhaW5QdHI8TlNTY3JvbGxlckltcD4gbV92ZXJ0aWNhbFNjcm9sbGVySW1wOwogICAg
IFJldGFpblB0cjxOU1Njcm9sbGVySW1wPiBtX2hvcml6b250YWxTY3JvbGxlckltcDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KaW5kZXggMjYzMzJl
MzQ1NDhkN2E5MWM5N2VlZWE5MjVlNjUxM2M0ZDg4ZmYyOC4uMTIzMmUxNzkyYTJjYmZkM2Q3NWEz
MDk2Mjg2M2EwZTE4OTZmYThmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVNYWMubW0KQEAgLTIyMSw3ICsyMjEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2Ny
b2xsQ29udHJvbGxlclRpbWVyPiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFj
OjpjcgogICAgIH0pOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVNYWM6OnN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsQ29udHJvbGxlciYpCit2b2lkIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnN0YXJ0QW5pbWF0aW9uQ2FsbGJh
Y2soU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXImKQogewogICAgIGlmICghbV9zY3JvbGxDb250
cm9sbGVyQW5pbWF0aW9uVGltZXIpCiAgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlv
blRpbWVyID0gV1RGOjptYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVyPFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVNYWM+PihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpzY3JvbGxDb250cm9sbGVyQW5pbWF0aW9u
VGltZXJGaXJlZCk7CkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjOjpzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2wK
ICAgICBtX3Njcm9sbENvbnRyb2xsZXJBbmltYXRpb25UaW1lci0+c3RhcnRSZXBlYXRpbmcoMV9z
IC8gNjAuKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFj
OjpzdG9wQW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsQ29udHJvbGxlciYpCit2b2lkIFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnN0b3BBbmltYXRpb25DYWxsYmFjayhTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlciYpCiB7CiAgICAgaWYgKG1fc2Nyb2xsQ29udHJvbGxlckFu
aW1hdGlvblRpbWVyKQogICAgICAgICBtX3Njcm9sbENvbnRyb2xsZXJBbmltYXRpb25UaW1lci0+
c3RvcCgpOwpAQCAtMjU0LDcgKzI1NCw3IEBAIGJvb2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhCiAgICAg
Y2FzZSBTY3JvbGxFbGFzdGljaXR5Tm9uZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNh
c2UgU2Nyb2xsRWxhc3RpY2l0eUFsbG93ZWQ6IHsKLSAgICAgICAgYXV0byBzY3JvbGxEaXJlY3Rp
b24gPSBTY3JvbGxDb250cm9sbGVyOjpkaXJlY3Rpb25Gcm9tRXZlbnQod2hlZWxFdmVudCwgU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICAgICAgYXV0byBzY3JvbGxEaXJlY3Rpb24g
PSBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6ZGlyZWN0aW9uRnJvbUV2ZW50KHdoZWVsRXZl
bnQsIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CiAgICAgICAgIGlmIChzY3JvbGxEaXJl
Y3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKHNj
cm9sbERpcmVjdGlvbi52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzYsNyAr
Mjc2LDcgQEAgYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjphbGxv
d3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGYKICAgICBjYXNlIFNjcm9sbEVsYXN0aWNp
dHlOb25lOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5
QWxsb3dlZDogewotICAgICAgICBhdXRvIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbENvbnRyb2xs
ZXI6OmRpcmVjdGlvbkZyb21FdmVudCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRp
Y2FsKTsKKyAgICAgICAgYXV0byBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxpbmdFZmZlY3RzQ29u
dHJvbGxlcjo6ZGlyZWN0aW9uRnJvbUV2ZW50KHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6
VmVydGljYWwpOwogICAgICAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uKQogICAgICAgICAgICAgcmV0
dXJuIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihzY3JvbGxEaXJlY3Rpb24udmFsdWUoKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcAppbmRleCBjOGYwZTY3M2YyYTJlMjAwZDI1
NDIxZmNmOGM2YzBhOWZiMzBhN2JkLi5kNjA3NzgxZTc5NTk1MDdhNWI4MTgzNzhhZWI3NGI3ZDdl
MmQ1YzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9s
bGluZ0FuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yLmNwcApAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IoU2Nyb2xsQW5pbWF0b3ImIHNjcm9sbEFuaW1hdG9yLCBTY3JvbGxDb250cm9sbGVyJiBzY3Jv
bGxDb250cm9sbGVyKQorS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6S2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvcihTY3JvbGxBbmltYXRvciYgc2Nyb2xsQW5pbWF0b3IsIFNjcm9sbGluZ0VmZmVj
dHNDb250cm9sbGVyJiBzY3JvbGxDb250cm9sbGVyKQogICAgIDogbV9zY3JvbGxBbmltYXRvcihz
Y3JvbGxBbmltYXRvcikKICAgICAsIG1fc2Nyb2xsQ29udHJvbGxlcihzY3JvbGxDb250cm9sbGVy
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdB
bmltYXRvci5oCmluZGV4IDgzMmI5MWJiZjk1YWYyNDgwYjEwN2I3ZDc4ZWRkNWU2MjdkYmUzMjcu
LmQzZTZkNGQ4Yjk4MjgyODdhZGNjMGYxNDY5Yzg0NzFiOTNhMmU4ZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmgKQEAgLTM2
LDcgKzM2LDcgQEAgY2xhc3MgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcik7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcihT
Y3JvbGxBbmltYXRvciYsIFNjcm9sbENvbnRyb2xsZXImKTsKKyAgICBLZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yKFNjcm9sbEFuaW1hdG9yJiwgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXImKTsK
IAogICAgIGJvb2wgYmVnaW5LZXlib2FyZFNjcm9sbEdlc3R1cmUoS2V5Ym9hcmRFdmVudCYpOwog
ICAgIHZvaWQgaGFuZGxlS2V5VXBFdmVudCgpOwpAQCAtNDksNyArNDksNyBAQCBwcml2YXRlOgog
ICAgIGZsb2F0IHNjcm9sbERpc3RhbmNlKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkpIGNvbnN0OwogCiAgICAgU2Nyb2xsQW5pbWF0b3ImIG1fc2Nyb2xsQW5pbWF0b3I7Ci0gICAg
U2Nyb2xsQ29udHJvbGxlciYgbV9zY3JvbGxDb250cm9sbGVyOworICAgIFNjcm9sbGluZ0VmZmVj
dHNDb250cm9sbGVyJiBtX3Njcm9sbENvbnRyb2xsZXI7CiAgICAgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpLZXlib2FyZFNjcm9sbD4gbV9jdXJyZW50S2V5Ym9hcmRTY3JvbGw7CiAgICAgYm9vbCBt
X3Njcm9sbFRyaWdnZXJpbmdLZXlJc1ByZXNzZWQgeyBmYWxzZSB9OwogICAgIEZsb2F0U2l6ZSBt
X3ZlbG9jaXR5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmlu
ZGV4IDgwZTAxMTk5NzQyZGY0ZGRkMTdjMGUxMjk3MjkzNzVkNGZkMTRiM2QuLjhkOTk3OWE5ZWUy
NzcyMjJjM2U0NTQ2ODZkNTM5YjAwYjEwOWUwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTM3LDggKzM3LDggQEAKICNpbmNsdWRlICJMYXlvdXRT
aXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xs
QW5pbWF0aW9uU21vb3RoLmgiCi0jaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMz
MCw3ICszMzAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQ29udHJvbGxlclRpbWVyPiBTY3Jv
bGxBbmltYXRvcjo6Y3JlYXRlVGltZXIoRnVuY3Rpb248dm9pZAogICAgIH0pOwogfQogCi12b2lk
IFNjcm9sbEFuaW1hdG9yOjpzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXIm
KQordm9pZCBTY3JvbGxBbmltYXRvcjo6c3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlciYpCiB7CiAgICAgaWYgKG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlv
blRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMzOCw3ICszMzgsNyBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yOjpzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xs
ZXImKQogICAgIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyLnN0YXJ0UmVwZWF0aW5n
KDFfcyAvIDYwLik7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3I6OnN0b3BBbmltYXRpb25DYWxs
YmFjayhTY3JvbGxDb250cm9sbGVyJikKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnN0b3BBbmltYXRp
b25DYWxsYmFjayhTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciYpCiB7CiAgICAgbV9zY3JvbGxD
b250cm9sbGVyQW5pbWF0aW9uVGltZXIuc3RvcCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggYTMzYTBiYzlmNWJiMWE2Mzc0ZWQ5ZDBhMjE5Y2I5YmFi
ZGNhMWE0Zi4uMTdkODk0NWU3NDM1MTMxMzY0M2JjMjY4NDdjN2UwMTRiYTAyYTZjYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0zMyw3ICszMyw3IEBACiAK
ICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
Ci0jaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0VmZmVj
dHNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJXaGVlbEV2ZW50
VGVzdE1vbml0b3IuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgpAQCAtMTEzLDggKzEx
Myw4IEBAIHB1YmxpYzoKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGlt
ZXI+IGNyZWF0ZVRpbWVyKEZ1bmN0aW9uPHZvaWQoKT4mJikgZmluYWw7CiAKLSAgICB2b2lkIHN0
YXJ0QW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsQ29udHJvbGxlciYpIGZpbmFsOwotICAgIHZvaWQg
c3RvcEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKSBmaW5hbDsKKyAgICB2b2lk
IHN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXImKSBmaW5h
bDsKKyAgICB2b2lkIHN0b3BBbmltYXRpb25DYWxsYmFjayhTY3JvbGxpbmdFZmZlY3RzQ29udHJv
bGxlciYpIGZpbmFsOwogCiAgICAgdm9pZCBzY3JvbGxDb250cm9sbGVyQW5pbWF0aW9uVGltZXJG
aXJlZCgpOwogCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgU2Nyb2xsYWJs
ZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgUmVmUHRyPFdoZWVsRXZlbnRUZXN0TW9uaXRv
cj4gbV93aGVlbEV2ZW50VGVzdE1vbml0b3I7Ci0gICAgU2Nyb2xsQ29udHJvbGxlciBtX3Njcm9s
bENvbnRyb2xsZXI7CisgICAgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIgbV9zY3JvbGxDb250
cm9sbGVyOwogICAgIFRpbWVyIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyOwogICAg
IEZsb2F0UG9pbnQgbV9jdXJyZW50UG9zaXRpb247CiAgICAgYm9vbCBtX2hhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxD
b250cm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNkZjdjNDhjNmU2
OTAzZGM0YzA2ZGMyMDdmNzVjZjQ0ZGZjOGY1YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9s
bGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgotCi0j
aW5jbHVkZSAiS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oIgotI2luY2x1ZGUgIkxheW91dFNp
emUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKLSNpbmNsdWRlICJTY3Jv
bGxhYmxlQXJlYS5oIgotI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0TW9uaXRvci5oIgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TY3Jv
bGxDb250cm9sbGVyOjpTY3JvbGxDb250cm9sbGVyKFNjcm9sbENvbnRyb2xsZXJDbGllbnQmIGNs
aWVudCkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLXsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9s
bGVyOjphbmltYXRpb25DYWxsYmFjayhNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lKQotewotICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlciAi
IDw8IHRoaXMgPDwgIiBhbmltYXRpb25DYWxsYmFjazogaXNBbmltYXRpbmdSdWJiZXJCYW5kICIg
PDwgbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgPDwgIiBpc0FuaW1hdGluZ1Njcm9sbFNuYXAgIiA8
PCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCA8PCAiaXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGlu
ZyIgPDwgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKTsKLQotICAgIHVwZGF0ZVNjcm9s
bFNuYXBBbmltYXRpbmdTdGF0ZShjdXJyZW50VGltZSk7Ci0gICAgdXBkYXRlUnViYmVyQmFuZEFu
aW1hdGluZ1N0YXRlKGN1cnJlbnRUaW1lKTsKLSAgICB1cGRhdGVLZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdGluZ1N0YXRlKGN1cnJlbnRUaW1lKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpz
dGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpCi17Ci0gICAgYm9vbCBuZWVkc0NhbGxiYWNr
cyA9IG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIHx8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwIHx8
IG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZzsKLSAgICBpZiAobmVlZHNDYWxsYmFja3Mg
PT0gbV9pc1J1bm5pbmdBbmltYXRpbmdDYWxsYmFjaykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG5lZWRzQ2FsbGJhY2tzKSB7Ci0gICAgICAgIG1fY2xpZW50LnN0YXJ0QW5pbWF0aW9uQ2Fs
bGJhY2soKnRoaXMpOwotICAgICAgICBtX2lzUnVubmluZ0FuaW1hdGluZ0NhbGxiYWNrID0gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY2xpZW50LnN0b3BBbmltYXRpb25D
YWxsYmFjaygqdGhpcyk7Ci0gICAgbV9pc1J1bm5pbmdBbmltYXRpbmdDYWxsYmFjayA9IGZhbHNl
OwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OmJlZ2luS2V5Ym9hcmRTY3JvbGxpbmcoKQot
ewotICAgIHNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcodHJ1ZSk7Ci19Ci0KLXZvaWQg
U2Nyb2xsQ29udHJvbGxlcjo6c3RvcEtleWJvYXJkU2Nyb2xsaW5nKCkKLXsKLSAgICBzZXRJc0Fu
aW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKGZhbHNlKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9s
bGVyOjpzZXRJc0FuaW1hdGluZ1J1YmJlckJhbmQoYm9vbCBpc0FuaW1hdGluZ1J1YmJlckJhbmQp
Ci17Ci0gICAgaWYgKGlzQW5pbWF0aW5nUnViYmVyQmFuZCA9PSBtX2lzQW5pbWF0aW5nUnViYmVy
QmFuZCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBtX2lzQW5pbWF0aW5nUnViYmVy
QmFuZCA9IGlzQW5pbWF0aW5nUnViYmVyQmFuZDsKLSAgICBzdGFydE9yU3RvcEFuaW1hdGlvbkNh
bGxiYWNrcygpOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nU2Ny
b2xsU25hcChib29sIGlzQW5pbWF0aW5nU2Nyb2xsU25hcCkKLXsKLSAgICBpZiAoaXNBbmltYXRp
bmdTY3JvbGxTbmFwID09IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwKQotICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgIG1faXNBbmltYXRpbmdTY3JvbGxTbmFwID0gaXNBbmltYXRpbmdTY3Jv
bGxTbmFwOwotICAgIHN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsQ29udHJvbGxlcjo6c2V0SXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyhib29sIGlz
QW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcpCi17Ci0gICAgaWYgKGlzQW5pbWF0aW5nS2V5Ym9h
cmRTY3JvbGxpbmcgPT0gbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcgPSBpc0FuaW1hdGlu
Z0tleWJvYXJkU2Nyb2xsaW5nOwotICAgIHN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCk7
Ci19Ci0KLWJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6dXNlc1Njcm9sbFNuYXAoKSBjb25zdAotewot
ICAgIHJldHVybiAhIW1fc2Nyb2xsU25hcFN0YXRlOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xs
ZXI6OnNldFNuYXBPZmZzZXRzSW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8m
IHNuYXBPZmZzZXRJbmZvKQotewotICAgIGlmIChzbmFwT2Zmc2V0SW5mby5pc0VtcHR5KCkpIHsK
LSAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYm9vbCBzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzID0gIW1fc2Ny
b2xsU25hcFN0YXRlOwotICAgIGlmICghbV9zY3JvbGxTbmFwU3RhdGUpCi0gICAgICAgIG1fc2Ny
b2xsU25hcFN0YXRlID0gbWFrZVVuaXF1ZTxTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZT4oKTsKLQot
ICAgIG1fc2Nyb2xsU25hcFN0YXRlLT5zZXRTbmFwT2Zmc2V0SW5mbyhzbmFwT2Zmc2V0SW5mbyk7
Ci0KLSAgICBpZiAoc2hvdWxkQ29tcHV0ZUN1cnJlbnRTbmFwSW5kaWNlcykKLSAgICAgICAgdXBk
YXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQ2xpZW50T2Zmc2V0KCk7Ci0KLSAgICBMT0dfV0lU
SF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhp
cyA8PCAiIHNldFNuYXBPZmZzZXRzSW5mbyBuZXcgc3RhdGU6ICIgPDwgVmFsdWVPck51bGwobV9z
Y3JvbGxTbmFwU3RhdGUuZ2V0KCkpKTsKLX0KLQotY29uc3QgTGF5b3V0U2Nyb2xsU25hcE9mZnNl
dHNJbmZvKiBTY3JvbGxDb250cm9sbGVyOjpzbmFwT2Zmc2V0c0luZm8oKSBjb25zdAotewotICAg
IHJldHVybiBtX3Njcm9sbFNuYXBTdGF0ZSA/ICZtX3Njcm9sbFNuYXBTdGF0ZS0+c25hcE9mZnNl
dEluZm8oKSA6IG51bGxwdHI7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IFNjcm9sbENv
bnRyb2xsZXI6OmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4
aXMpIGNvbnN0Ci17Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotICAgIHJldHVybiBtX3Njcm9sbFNuYXBTdGF0ZS0+YWN0aXZlU25hcElu
ZGV4Rm9yQXhpcyhheGlzKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXRBY3RpdmVT
Y3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBpbmRleCkKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2Nyb2xsU25hcFN0YXRlLT5zZXRBY3RpdmVTbmFwSW5kZXhGb3JB
eGlzKGF4aXMsIGluZGV4KTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXROZWFyZXN0
U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgU2Ny
b2xsT2Zmc2V0IHNjcm9sbE9mZnNldCkKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gbV9jbGllbnQucGFnZVNj
YWxlRmFjdG9yKCk7Ci0gICAgTGF5b3V0UG9pbnQgbGF5b3V0U2Nyb2xsT2Zmc2V0KHNjcm9sbE9m
ZnNldC54KCkgLyBzY2FsZUZhY3Rvciwgc2Nyb2xsT2Zmc2V0LnkoKSAvIHNjYWxlRmFjdG9yKTsK
LSAgICBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0
YXRlOwotCi0gICAgYXV0byBzbmFwT2Zmc2V0cyA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4
aXMoYXhpcyk7Ci0gICAgTGF5b3V0U2l6ZSB2aWV3cG9ydFNpemUobV9jbGllbnQudmlld3BvcnRT
aXplKCkud2lkdGgoKSwgbV9jbGllbnQudmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOwotICAgIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGFjdGl2ZUluZGV4OwotICAgIGlmIChzbmFwT2Zmc2V0cy5z
aXplKCkpCi0gICAgICAgIGFjdGl2ZUluZGV4ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJbmZvKCku
Y2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgdmlld3BvcnRTaXplLCBsYXlvdXRTY3JvbGxPZmZzZXQs
IDApLnNlY29uZDsKLQotICAgIGlmIChhY3RpdmVJbmRleCA9PSBhY3RpdmVTY3JvbGxTbmFwSW5k
ZXhGb3JBeGlzKGF4aXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FjdGl2ZVNjcm9sbFNu
YXBJbmRleERpZENoYW5nZSA9IHRydWU7Ci0gICAgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9y
QXhpcyhheGlzLCBhY3RpdmVJbmRleCk7Ci19Ci0KLWZsb2F0IFNjcm9sbENvbnRyb2xsZXI6OmFk
anVzdFNjcm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBGbG9hdFBvaW50IGRl
c3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3Jp
Z2luYWxPZmZzZXQpCi17Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1
cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBkZXN0aW5hdGlvbk9mZnNl
dC54KCkgOiBkZXN0aW5hdGlvbk9mZnNldC55KCk7Ci0KLSAgICBTY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOwotICAgIGF1dG8gc25hcE9mZnNl
dHMgPSBzbmFwU3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKGF4aXMpOwotICAgIGlmICghc25hcE9m
ZnNldHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhv
cml6b250YWwgPyBkZXN0aW5hdGlvbk9mZnNldC54KCkgOiBkZXN0aW5hdGlvbk9mZnNldC55KCk7
Ci0KLSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpOwot
ICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRz
OwotICAgIGlmIChvcmlnaW5hbE9mZnNldCkKLSAgICAgICAgb3JpZ2luYWxPZmZzZXRJbkxheW91
dFVuaXRzID0gTGF5b3V0VW5pdCgqb3JpZ2luYWxPZmZzZXQgLyBzY2FsZUZhY3Rvcik7Ci0gICAg
TGF5b3V0U2l6ZSB2aWV3cG9ydFNpemUobV9jbGllbnQudmlld3BvcnRTaXplKCkud2lkdGgoKSwg
bV9jbGllbnQudmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOwotICAgIExheW91dFBvaW50IGxheW91
dERlc3RpbmF0aW9uT2Zmc2V0KGRlc3RpbmF0aW9uT2Zmc2V0LngoKSAvIHNjYWxlRmFjdG9yLCBk
ZXN0aW5hdGlvbk9mZnNldC55KCkgLyBzY2FsZUZhY3Rvcik7Ci0gICAgTGF5b3V0VW5pdCBvZmZz
ZXQgPSBzbmFwU3RhdGUuc25hcE9mZnNldEluZm8oKS5jbG9zZXN0U25hcE9mZnNldChheGlzLCB2
aWV3cG9ydFNpemUsIGxheW91dERlc3RpbmF0aW9uT2Zmc2V0LCB2ZWxvY2l0eSwgb3JpZ2luYWxP
ZmZzZXRJbkxheW91dFVuaXRzKS5maXJzdDsKLSAgICByZXR1cm4gb2Zmc2V0ICogc2NhbGVGYWN0
b3I7Ci19Ci0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVBY3RpdmVTY3JvbGxTbmFw
SW5kZXhGb3JDbGllbnRPZmZzZXQoKQotewotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgU2Nyb2xsT2Zmc2V0IG9mZnNldCA9IHJvdW5kZWRJbnRQb2lu
dChtX2NsaWVudC5zY3JvbGxPZmZzZXQoKSk7Ci0gICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRl
eEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBvZmZzZXQpOwot
ICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwsIG9mZnNldCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6cmVz
bmFwQWZ0ZXJMYXlvdXQoKQotewotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgc25hcHBlZCBpbiBhIHBhcnRpY3Vs
YXIgYXhpcywgbWFpbnRhaW4gdGhhdC4gT3RoZXJ3aXNlLCBzbmFwIHRvIHRoZSBuZWFyZXN0IGVs
aWdpYmxlIHNuYXAgcG9pbnQuCi0gICAgU2Nyb2xsT2Zmc2V0IG9mZnNldCA9IHJvdW5kZWRJbnRQ
b2ludChtX2NsaWVudC5zY3JvbGxPZmZzZXQoKSk7Ci0gICAgU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUmIHNuYXBTdGF0ZSA9ICptX3Njcm9sbFNuYXBTdGF0ZTsKLQotICAgIGF1dG8gYWN0aXZlSG9y
aXpvbnRhbEluZGV4ID0gbV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNuYXBJbmRleEZvckF4aXMo
U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKLSAgICBpZiAoIWFjdGl2ZUhvcml6b250YWxJ
bmRleCB8fCAqYWN0aXZlSG9yaXpvbnRhbEluZGV4ID49IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0Zv
ckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKS5zaXplKCkpCi0gICAgICAgIHNldE5l
YXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9y
aXpvbnRhbCwgb2Zmc2V0KTsKLQotICAgIGF1dG8gYWN0aXZlVmVydGljYWxJbmRleCA9IG1fc2Ny
b2xsU25hcFN0YXRlLT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVy
dGljYWwpOwotICAgIGlmICghYWN0aXZlVmVydGljYWxJbmRleCB8fCAqYWN0aXZlVmVydGljYWxJ
bmRleCA+PSBzbmFwU3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVy
dGljYWwpLnNpemUoKSkKLSAgICAgICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNB
bmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0KTsKLQotfQotCi12b2lk
IFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZUtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0aW5nU3RhdGUo
TW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKLXsKLSAgICBpZiAoIW1faXNBbmltYXRpbmdLZXli
b2FyZFNjcm9sbGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQua2V5Ym9hcmRT
Y3JvbGxpbmdBbmltYXRvcigpLT51cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKGN1cnJlbnRU
aW1lKTsKLX0KLQotLy8gQ3VycmVudGx5LCBvbmx5IE1hYyBzdXBwb3J0cyBtb21lbnR1bSBzcm9s
bGluZy1iYXNlZCBzY3JvbGxzbmFwcGluZyBhbmQgcnViYmVyIGJhbmRpbmcKLS8vIHNvIGFsbCBv
ZiB0aGVzZSBtZXRob2RzIGFyZSBhIG5vb3Agb24gbm9uLU1hYyBwbGF0Zm9ybXMuCi0jaWYgIVBM
QVRGT1JNKE1BQykKLVNjcm9sbENvbnRyb2xsZXI6On5TY3JvbGxDb250cm9sbGVyKCkKLXsKLX0K
LQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wQWxsVGltZXJzKCkKLXsKLX0KLQotdm9pZCBT
Y3JvbGxDb250cm9sbGVyOjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQotewotfQotCi12b2lkIFNj
cm9sbENvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNU
aW1lKQotewotCi19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlUnViYmVyQmFuZEFu
aW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpCi17Ci0KLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQ29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDljMDky
MGU0YWYxZjliYTMyNDIxYTlkN2ZkYWMxODNhNTFlMzcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENv
bnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNs
dWRlICJGbG9hdFNpemUuaCIKLQotI2luY2x1ZGUgIlJlY3RFZGdlcy5oIgotI2luY2x1ZGUgIlNj
cm9sbFNuYXBBbmltYXRvclN0YXRlLmgiCi0jaW5jbHVkZSAiU2Nyb2xsU25hcE9mZnNldHNJbmZv
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKLSNpbmNsdWRlICJXaGVlbEV2ZW50VGVzdE1v
bml0b3IuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUnVu
TG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEtleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0b3I7Ci1jbGFzcyBMYXlvdXRTaXplOwotY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50Owot
Y2xhc3MgU2Nyb2xsQ29udHJvbGxlcjsKLWNsYXNzIFNjcm9sbGFibGVBcmVhOwotY2xhc3MgV2hl
ZWxFdmVudFRlc3RNb25pdG9yOwotCi1jbGFzcyBTY3JvbGxDb250cm9sbGVyVGltZXIgOiBwdWJs
aWMgUnVuTG9vcDo6VGltZXJCYXNlIHsKLXB1YmxpYzoKLSAgICBTY3JvbGxDb250cm9sbGVyVGlt
ZXIoUnVuTG9vcCYgcnVuTG9vcCwgRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQotICAgICAg
ICA6IFJ1bkxvb3A6OlRpbWVyQmFzZShydW5Mb29wKQotICAgICAgICAsIG1fY2FsbGJhY2soV1RG
TW92ZShjYWxsYmFjaykpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZmlyZWQoKSBmaW5hbAot
ICAgIHsKLSAgICAgICAgbV9jYWxsYmFjaygpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBGdW5j
dGlvbjx2b2lkKCk+IG1fY2FsbGJhY2s7Ci19OwotCi1jbGFzcyBTY3JvbGxDb250cm9sbGVyQ2xp
ZW50IHsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5TY3JvbGxDb250cm9sbGVyQ2xpZW50KCkg
PSBkZWZhdWx0OwotCi1wdWJsaWM6Ci0gICAgLy8gT25seSB1c2VkIGZvciBub24tYW5pbWF0aW9u
IHRpbWVycy4KLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGlt
ZXI+IGNyZWF0ZVRpbWVyKEZ1bmN0aW9uPHZvaWQoKT4mJikgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIHN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsQ29udHJvbGxlciYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlS2V5Ym9hcmRTY3JvbGxQb3NpdGlvbihNb25vdG9u
aWNUaW1lKSB7IH0KLSAgICB2aXJ0dWFsIEtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IgKmtleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9Ci0KLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgdmlydHVhbCBib29sIGFsbG93c0hvcml6b250YWxT
dHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEludFNpemUgc3RyZXRjaEFtb3VudCgpIGNvbnN0
ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1Bpbm5lZEZvclNjcm9sbERlbHRhKGNvbnN0IEZs
b2F0U2l6ZSYpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgUmVjdEVkZ2VzPGJvb2w+IGVkZ2VQ
aW5uZWRTdGF0ZSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9u
dGFsU2Nyb2xsaW5nKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNh
bFNjcm9sbGluZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnViYmVyQmFu
ZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgY29uc3QgPSAwOwotCi0gICAgLy8gRklYTUU6
IHVzZSBTY3JvbGxDbGFtcGluZyB0byBjb2xsYXBzZSB0aGVzZSB0byBvbmUuCi0gICAgdmlydHVh
bCB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhj
b25zdCBGbG9hdFNpemUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0UnViYmVy
QmFuZFNuYXBBbmltYXRpb24oKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcFJ1YmJlcmJh
bmRTbmFwQW5pbWF0aW9uKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnViYmVyQmFuZGluZ1N0
YXRlQ2hhbmdlZChib29sKSB7IH0KLQotICAgIC8vIElmIHRoZSBjdXJyZW50IHNjcm9sbCBwb3Np
dGlvbiBpcyB3aXRoaW4gdGhlIG92ZXJoYW5nIGFyZWEsIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVz
ZQotICAgIC8vIHRoZSBwYWdlIHRvIHNjcm9sbCB0byB0aGUgbmVhcmVzdCBib3VuZGFyeSBwb2lu
dC4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNz
YXJ5KCkgPSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgZGVmZXJXaGVlbEV2ZW50VGVz
dENvbXBsZXRpb25Gb3JSZWFzb24oV2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJl
YUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6RGVmZXJSZWFzb24pIGNvbnN0IHsg
LyogRG8gbm90aGluZyAqLyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVdoZWVsRXZlbnRUZXN0
Q29tcGxldGlvbkRlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkRlZmVyUmVhc29uKSBj
b25zdCB7IC8qIERvIG5vdGhpbmcgKi8gfQotCi0gICAgdmlydHVhbCBGbG9hdFBvaW50IHNjcm9s
bE9mZnNldCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsT25B
eGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgZGVsdGEpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
d2lsbFN0YXJ0U2Nyb2xsU25hcEFuaW1hdGlvbigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRT
dG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpIHsgfQotICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxl
RmFjdG9yKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgTGF5b3V0U2l6ZSBzY3JvbGxFeHRlbnQo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFNpemUgdmlld3BvcnRTaXplKCkgY29uc3Qg
PSAwOwotfTsKLQotY2xhc3MgU2Nyb2xsQ29udHJvbGxlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU2Nyb2xsQ29udHJvbGxlcik7Ci0KLXB1YmxpYzoKLSAgICBleHBsaWNpdCBTY3JvbGxD
b250cm9sbGVyKFNjcm9sbENvbnRyb2xsZXJDbGllbnQmKTsKLSAgICB+U2Nyb2xsQ29udHJvbGxl
cigpOwotCi0gICAgYm9vbCB1c2VzU2Nyb2xsU25hcCgpIGNvbnN0OwotICAgIHZvaWQgc3RvcEFs
bFRpbWVycygpOwotICAgIHZvaWQgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7Ci0KLSAgICB2b2lk
IGJlZ2luS2V5Ym9hcmRTY3JvbGxpbmcoKTsKLSAgICB2b2lkIHN0b3BLZXlib2FyZFNjcm9sbGlu
ZygpOwotICAgIAotICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IGJ5IHRoZSBj
bGllbnQuIFN0YXJ0ZWQgYnkgc3RhcnRBbmltYXRpb25DYWxsYmFjaygpLCBzdG9wcGVkIGJ5IHN0
b3BBbmltYXRpb25DYWxsYmFjaygpLgotICAgIHZvaWQgYW5pbWF0aW9uQ2FsbGJhY2soTW9ub3Rv
bmljVGltZSk7Ci0KLSAgICB2b2lkIHNldFNuYXBPZmZzZXRzSW5mbyhjb25zdCBMYXlvdXRTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8mKTsKLSAgICBjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8qIHNuYXBPZmZzZXRzSW5mbygpIGNvbnN0OwotICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25h
cEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KTsK
LSAgICB2b2lkIHVwZGF0ZUFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckNsaWVudE9mZnNldCgpOwot
ICAgIHZvaWQgcmVzbmFwQWZ0ZXJMYXlvdXQoKTsKLSAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBJ
bmRleERpZENoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlk
Q2hhbmdlOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoYm9vbCBzdGF0
ZSkgeyBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSA9IHN0YXRlOyB9Ci0gICAgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxF
dmVudEF4aXMpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKGNvbnN0IFNj
cm9sbGFibGVBcmVhJik7Ci0gICAgdm9pZCB1cGRhdGVHZXN0dXJlSW5Qcm9ncmVzc1N0YXRlKGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwotICAgIGZsb2F0IGFkanVzdFNjcm9sbERlc3RpbmF0
aW9uKFNjcm9sbEV2ZW50QXhpcywgRmxvYXRQb2ludCBkZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQg
dmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFsT2Zmc2V0KTsKLQotI2lmIFBM
QVRGT1JNKE1BQykKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgaGFuZGxlZC4KLSAgICBib29sIGhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0KLSAgICBlbnVtIGNs
YXNzIFdoZWVsQXhpc0JpYXMgeyBOb25lLCBWZXJ0aWNhbCB9OwotICAgIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFNjcm9sbERpcmVjdGlvbj4gZGlyZWN0aW9uRnJvbUV2ZW50KGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYsIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsRXZlbnRBeGlzPiwgV2hlZWxBeGlzQmlh
cyA9IFdoZWVsQXhpc0JpYXM6Ok5vbmUpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgd2hlZWxEZWx0
YUJpYXNpbmdUb3dhcmRzVmVydGljYWwoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0KLSAg
ICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdDsKLSAgICBib29sIGlzVXNlclNj
cm9sbEluUHJvZ3Jlc3MoKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBoYW5kbGVk
LgotICAgIGJvb2wgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYpOwotCi0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIHZvaWQgc3Rv
cFJ1YmJlcmJhbmRpbmcoKTsKLSAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25z
dDsKLSAgICBSZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGluZ0VkZ2VzKCkgY29uc3QgeyByZXR1
cm4gbV9ydWJiZXJCYW5kaW5nRWRnZXM7IH0KLSNlbmRpZgotI2VuZGlmCi0KLXByaXZhdGU6Ci0g
ICAgdm9pZCBzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxF
dmVudEF4aXMsIFNjcm9sbE9mZnNldCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBBbmlt
YXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKLSAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRBbmlt
YXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKLSAgICB2b2lkIHVwZGF0ZUtleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGltZSk7Ci0KLSAgICB2b2lkIHNldElzQW5pbWF0
aW5nUnViYmVyQmFuZChib29sKTsKLSAgICB2b2lkIHNldElzQW5pbWF0aW5nU2Nyb2xsU25hcChi
b29sKTsKLSAgICB2b2lkIHNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcoYm9vbCk7Ci0K
LSNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBzdGFydFNjcm9sbFNuYXBBbmltYXRpb24oKTsK
LSAgICB2b2lkIHN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCk7Ci0KLSAgICBib29sIHNob3VsZE92
ZXJyaWRlTW9tZW50dW1TY3JvbGxpbmcoKSBjb25zdDsKLSAgICB2b2lkIHN0YXRlbGVzc1NuYXBU
cmFuc2l0aW9uVGltZXJGaXJlZCgpOwotICAgIHZvaWQgc2NoZWR1bGVTdGF0ZWxlc3NTY3JvbGxT
bmFwKCk7Ci0gICAgdm9pZCBzdGFydERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1
ZVRvU2Nyb2xsU25hcHBpbmcoKTsKLSAgICB2b2lkIHN0b3BEZWZlcnJpbmdXaGVlbEV2ZW50VGVz
dENvbXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKCk7Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JB
TkRJTkcpCi0gICAgdm9pZCBzdGFydFJ1YmJlcmJhbmRBbmltYXRpb24oKTsKLSAgICB2b2lkIHN0
b3BTbmFwUnViYmVyYmFuZEFuaW1hdGlvbigpOwotCi0gICAgdm9pZCBzbmFwUnViYmVyQmFuZCgp
OwotICAgIGJvb2wgc2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbihjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdDsKLSAgICBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRp
cmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pIGNvbnN0OwotICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Q
cm9ncmVzc0ludGVybmFsKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVSdWJiZXJCYW5kaW5nU3Rh
dGUoKTsKLSAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdlcyhJbnRTaXplIGNsaWVudFN0
cmV0Y2gpOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIHZvaWQgc3RhcnRPclN0b3BBbmltYXRpb25D
YWxsYmFja3MoKTsKLQotICAgIFNjcm9sbENvbnRyb2xsZXJDbGllbnQmIG1fY2xpZW50OwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZT4gbV9zY3JvbGxTbmFwU3Rh
dGU7Ci0gICAgYm9vbCBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSB7IGZhbHNlIH07
Ci0KLSAgICBib29sIG1faXNSdW5uaW5nQW5pbWF0aW5nQ2FsbGJhY2sgeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc0Fu
aW1hdGluZ1Njcm9sbFNuYXAgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc0FuaW1hdGluZ0tleWJv
YXJkU2Nyb2xsaW5nIHsgZmFsc2UgfTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBXYWxsVGlt
ZSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKLSAgICBGbG9hdFNpemUgbV9vdmVyZmxv
d1Njcm9sbERlbHRhOwotICAgIEZsb2F0U2l6ZSBtX3N0cmV0Y2hTY3JvbGxGb3JjZTsKLSAgICBG
bG9hdFNpemUgbV9tb21lbnR1bVZlbG9jaXR5OwotCi0gICAgYm9vbCBtX2luU2Nyb2xsR2VzdHVy
ZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2lzUnViYmVyQmFuZGluZyB7IGZhbHNlIH07Ci0KLSAgICBGbG9hdFNpemUgbV9kcmFnRW5k
ZWRTY3JvbGxpbmdWZWxvY2l0eTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQ29udHJvbGxl
clRpbWVyPiBtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXI7Ci0KLSNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCi0gICAgLy8gUnViYmVyIGJhbmQgc3RhdGUuCi0gICAgTW9ub3RvbmljVGlt
ZSBtX3N0YXJ0VGltZTsKLSAgICBGbG9hdFNpemUgbV9zdGFydFN0cmV0Y2g7Ci0gICAgRmxvYXRT
aXplIG1fb3JpZ1ZlbG9jaXR5OwotICAgIFJlY3RFZGdlczxib29sPiBtX3J1YmJlckJhbmRpbmdF
ZGdlczsKLSNlbmRpZgotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1fdGltZXJzV2Vy
ZVN0b3BwZWQgeyBmYWxzZSB9OwotI2VuZGlmCi0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDU5M2Q4ZWQ5ZGQwOGRmOGIyNGEzMTJj
ODJmNTJhOGYzODA3ODhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMjU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nRWZm
ZWN0c0NvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Iu
aCIKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbFNuYXBBbmltYXRvclN0
YXRlLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50
VGVzdE1vbml0b3IuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OlNjcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyKFNjcm9sbENvbnRyb2xsZXJDbGllbnQmIGNsaWVudCkKKyAgICA6IG1f
Y2xpZW50KGNsaWVudCkKK3sKK30KKwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6
YW5pbWF0aW9uQ2FsbGJhY2soTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKK3sKKyAgICBMT0df
V0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNjcm9sbGluZ0VmZmVjdHNDb250cm9s
bGVyICIgPDwgdGhpcyA8PCAiIGFuaW1hdGlvbkNhbGxiYWNrOiBpc0FuaW1hdGluZ1J1YmJlckJh
bmQgIiA8PCBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCA8PCAiIGlzQW5pbWF0aW5nU2Nyb2xsU25h
cCAiIDw8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwIDw8ICJpc0FuaW1hdGluZ0tleWJvYXJkU2Ny
b2xsaW5nIiA8PCBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcpOworCisgICAgdXBkYXRl
U2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKGN1cnJlbnRUaW1lKTsKKyAgICB1cGRhdGVSdWJiZXJC
YW5kQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOworICAgIHVwZGF0ZUtleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVj
dHNDb250cm9sbGVyOjpzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpCit7CisgICAgYm9v
bCBuZWVkc0NhbGxiYWNrcyA9IG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIHx8IG1faXNBbmltYXRp
bmdTY3JvbGxTbmFwIHx8IG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZzsKKyAgICBpZiAo
bmVlZHNDYWxsYmFja3MgPT0gbV9pc1J1bm5pbmdBbmltYXRpbmdDYWxsYmFjaykKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG5lZWRzQ2FsbGJhY2tzKSB7CisgICAgICAgIG1fY2xpZW50LnN0
YXJ0QW5pbWF0aW9uQ2FsbGJhY2soKnRoaXMpOworICAgICAgICBtX2lzUnVubmluZ0FuaW1hdGlu
Z0NhbGxiYWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2xpZW50
LnN0b3BBbmltYXRpb25DYWxsYmFjaygqdGhpcyk7CisgICAgbV9pc1J1bm5pbmdBbmltYXRpbmdD
YWxsYmFjayA9IGZhbHNlOworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpi
ZWdpbktleWJvYXJkU2Nyb2xsaW5nKCkKK3sKKyAgICBzZXRJc0FuaW1hdGluZ0tleWJvYXJkU2Ny
b2xsaW5nKHRydWUpOworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdG9w
S2V5Ym9hcmRTY3JvbGxpbmcoKQoreworICAgIHNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxp
bmcoZmFsc2UpOworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzZXRJc0Fu
aW1hdGluZ1J1YmJlckJhbmQoYm9vbCBpc0FuaW1hdGluZ1J1YmJlckJhbmQpCit7CisgICAgaWYg
KGlzQW5pbWF0aW5nUnViYmVyQmFuZCA9PSBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgPSBpc0FuaW1hdGluZ1J1
YmJlckJhbmQ7CisgICAgc3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKTsKK30KKwordm9p
ZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2V0SXNBbmltYXRpbmdTY3JvbGxTbmFwKGJv
b2wgaXNBbmltYXRpbmdTY3JvbGxTbmFwKQoreworICAgIGlmIChpc0FuaW1hdGluZ1Njcm9sbFNu
YXAgPT0gbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXApCisgICAgICAgIHJldHVybjsKKworICAgIG1f
aXNBbmltYXRpbmdTY3JvbGxTbmFwID0gaXNBbmltYXRpbmdTY3JvbGxTbmFwOworICAgIHN0YXJ0
T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0Nv
bnRyb2xsZXI6OnNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcoYm9vbCBpc0FuaW1hdGlu
Z0tleWJvYXJkU2Nyb2xsaW5nKQoreworICAgIGlmIChpc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xs
aW5nID09IG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nID0gaXNBbmltYXRpbmdLZXlib2Fy
ZFNjcm9sbGluZzsKKyAgICBzdGFydE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpOworfQorCiti
b29sIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1c2VzU2Nyb2xsU25hcCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICEhbV9zY3JvbGxTbmFwU3RhdGU7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZm
ZWN0c0NvbnRyb2xsZXI6OnNldFNuYXBPZmZzZXRzSW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFw
T2Zmc2V0c0luZm8mIHNuYXBPZmZzZXRJbmZvKQoreworICAgIGlmIChzbmFwT2Zmc2V0SW5mby5p
c0VtcHR5KCkpIHsKKyAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBudWxscHRyOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRp
Y2VzID0gIW1fc2Nyb2xsU25hcFN0YXRlOworICAgIGlmICghbV9zY3JvbGxTbmFwU3RhdGUpCisg
ICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlID0gbWFrZVVuaXF1ZTxTY3JvbGxTbmFwQW5pbWF0b3JT
dGF0ZT4oKTsKKworICAgIG1fc2Nyb2xsU25hcFN0YXRlLT5zZXRTbmFwT2Zmc2V0SW5mbyhzbmFw
T2Zmc2V0SW5mbyk7CisKKyAgICBpZiAoc2hvdWxkQ29tcHV0ZUN1cnJlbnRTbmFwSW5kaWNlcykK
KyAgICAgICAgdXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQ2xpZW50T2Zmc2V0KCk7CisK
KyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJTY3JvbGxpbmdFZmZl
Y3RzQ29udHJvbGxlciAiIDw8IHRoaXMgPDwgIiBzZXRTbmFwT2Zmc2V0c0luZm8gbmV3IHN0YXRl
OiAiIDw8IFZhbHVlT3JOdWxsKG1fc2Nyb2xsU25hcFN0YXRlLmdldCgpKSk7Cit9CisKK2NvbnN0
IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyogU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6
OnNuYXBPZmZzZXRzSW5mbygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsU25hcFN0YXRl
ID8gJm1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0SW5mbygpIDogbnVsbHB0cjsKK30KKwor
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OmFjdGl2
ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0Cit7Cisg
ICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIHJldHVybiBtX3Njcm9sbFNuYXBTdGF0ZS0+YWN0aXZlU25hcEluZGV4Rm9yQXhpcyhheGlz
KTsKK30KKwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xs
U25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4gaW5kZXgpCit7CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+c2V0QWN0aXZlU25hcEluZGV4Rm9yQXhpcyhh
eGlzLCBpbmRleCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNldE5l
YXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlz
LCBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQoreworICAgIGlmICghdXNlc1Njcm9sbFNuYXAo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBtX2NsaWVudC5w
YWdlU2NhbGVGYWN0b3IoKTsKKyAgICBMYXlvdXRQb2ludCBsYXlvdXRTY3JvbGxPZmZzZXQoc2Ny
b2xsT2Zmc2V0LngoKSAvIHNjYWxlRmFjdG9yLCBzY3JvbGxPZmZzZXQueSgpIC8gc2NhbGVGYWN0
b3IpOworICAgIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSAqbV9zY3JvbGxT
bmFwU3RhdGU7CisKKyAgICBhdXRvIHNuYXBPZmZzZXRzID0gc25hcFN0YXRlLnNuYXBPZmZzZXRz
Rm9yQXhpcyhheGlzKTsKKyAgICBMYXlvdXRTaXplIHZpZXdwb3J0U2l6ZShtX2NsaWVudC52aWV3
cG9ydFNpemUoKS53aWR0aCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKS5oZWlnaHQoKSk7Cisg
ICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gYWN0aXZlSW5kZXg7CisgICAgaWYgKHNuYXBPZmZz
ZXRzLnNpemUoKSkKKyAgICAgICAgYWN0aXZlSW5kZXggPSBzbmFwU3RhdGUuc25hcE9mZnNldElu
Zm8oKS5jbG9zZXN0U25hcE9mZnNldChheGlzLCB2aWV3cG9ydFNpemUsIGxheW91dFNjcm9sbE9m
ZnNldCwgMCkuc2Vjb25kOworCisgICAgaWYgKGFjdGl2ZUluZGV4ID09IGFjdGl2ZVNjcm9sbFNu
YXBJbmRleEZvckF4aXMoYXhpcykpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYWN0aXZlU2Ny
b2xsU25hcEluZGV4RGlkQ2hhbmdlID0gdHJ1ZTsKKyAgICBzZXRBY3RpdmVTY3JvbGxTbmFwSW5k
ZXhGb3JBeGlzKGF4aXMsIGFjdGl2ZUluZGV4KTsKK30KKworZmxvYXQgU2Nyb2xsaW5nRWZmZWN0
c0NvbnRyb2xsZXI6OmFkanVzdFNjcm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpcyBheGlz
LCBGbG9hdFBvaW50IGRlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRp
b25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQpCit7CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgp
KQorICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBk
ZXN0aW5hdGlvbk9mZnNldC54KCkgOiBkZXN0aW5hdGlvbk9mZnNldC55KCk7CisKKyAgICBTY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOworICAg
IGF1dG8gc25hcE9mZnNldHMgPSBzbmFwU3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKGF4aXMpOwor
ICAgIGlmICghc25hcE9mZnNldHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBkZXN0aW5hdGlvbk9mZnNldC54KCkgOiBkZXN0aW5h
dGlvbk9mZnNldC55KCk7CisKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IG1fY2xpZW50LnBhZ2VT
Y2FsZUZhY3RvcigpOworICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gb3JpZ2luYWxPZmZz
ZXRJbkxheW91dFVuaXRzOworICAgIGlmIChvcmlnaW5hbE9mZnNldCkKKyAgICAgICAgb3JpZ2lu
YWxPZmZzZXRJbkxheW91dFVuaXRzID0gTGF5b3V0VW5pdCgqb3JpZ2luYWxPZmZzZXQgLyBzY2Fs
ZUZhY3Rvcik7CisgICAgTGF5b3V0U2l6ZSB2aWV3cG9ydFNpemUobV9jbGllbnQudmlld3BvcnRT
aXplKCkud2lkdGgoKSwgbV9jbGllbnQudmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOworICAgIExh
eW91dFBvaW50IGxheW91dERlc3RpbmF0aW9uT2Zmc2V0KGRlc3RpbmF0aW9uT2Zmc2V0LngoKSAv
IHNjYWxlRmFjdG9yLCBkZXN0aW5hdGlvbk9mZnNldC55KCkgLyBzY2FsZUZhY3Rvcik7CisgICAg
TGF5b3V0VW5pdCBvZmZzZXQgPSBzbmFwU3RhdGUuc25hcE9mZnNldEluZm8oKS5jbG9zZXN0U25h
cE9mZnNldChheGlzLCB2aWV3cG9ydFNpemUsIGxheW91dERlc3RpbmF0aW9uT2Zmc2V0LCB2ZWxv
Y2l0eSwgb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzKS5maXJzdDsKKyAgICByZXR1cm4gb2Zm
c2V0ICogc2NhbGVGYWN0b3I7Cit9CisKKwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxl
cjo6dXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQ2xpZW50T2Zmc2V0KCkKK3sKKyAgICBp
ZiAoIXVzZXNTY3JvbGxTbmFwKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbE9mZnNl
dCBvZmZzZXQgPSByb3VuZGVkSW50UG9pbnQobV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkpOworICAg
IHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhp
czo6SG9yaXpvbnRhbCwgb2Zmc2V0KTsKKyAgICBzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9y
QXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBvZmZzZXQpOworfQorCit2
b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpyZXNuYXBBZnRlckxheW91dCgpCit7Cisg
ICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3
ZSBhcmUgYWxyZWFkeSBzbmFwcGVkIGluIGEgcGFydGljdWxhciBheGlzLCBtYWludGFpbiB0aGF0
LiBPdGhlcndpc2UsIHNuYXAgdG8gdGhlIG5lYXJlc3QgZWxpZ2libGUgc25hcCBwb2ludC4KKyAg
ICBTY3JvbGxPZmZzZXQgb2Zmc2V0ID0gcm91bmRlZEludFBvaW50KG1fY2xpZW50LnNjcm9sbE9m
ZnNldCgpKTsKKyAgICBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1fc2Ny
b2xsU25hcFN0YXRlOworCisgICAgYXV0byBhY3RpdmVIb3Jpem9udGFsSW5kZXggPSBtX3Njcm9s
bFNuYXBTdGF0ZS0+YWN0aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwpOworICAgIGlmICghYWN0aXZlSG9yaXpvbnRhbEluZGV4IHx8ICphY3RpdmVIb3Jpem9u
dGFsSW5kZXggPj0gc25hcFN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwpLnNpemUoKSkKKyAgICAgICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZv
ckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBvZmZzZXQpOworCisg
ICAgYXV0byBhY3RpdmVWZXJ0aWNhbEluZGV4ID0gbV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNu
YXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CisgICAgaWYgKCFhY3Rp
dmVWZXJ0aWNhbEluZGV4IHx8ICphY3RpdmVWZXJ0aWNhbEluZGV4ID49IHNuYXBTdGF0ZS5zbmFw
T2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkuc2l6ZSgpKQorICAgICAg
ICBzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsLCBvZmZzZXQpOworCit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRy
b2xsZXI6OnVwZGF0ZUtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGlt
ZSBjdXJyZW50VGltZSkKK3sKKyAgICBpZiAoIW1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGlu
ZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQua2V5Ym9hcmRTY3JvbGxpbmdBbmlt
YXRvcigpLT51cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKGN1cnJlbnRUaW1lKTsKK30KKwor
Ly8gQ3VycmVudGx5LCBvbmx5IE1hYyBzdXBwb3J0cyBtb21lbnR1bSBzcm9sbGluZy1iYXNlZCBz
Y3JvbGxzbmFwcGluZyBhbmQgcnViYmVyIGJhbmRpbmcKKy8vIHNvIGFsbCBvZiB0aGVzZSBtZXRo
b2RzIGFyZSBhIG5vb3Agb24gbm9uLU1hYyBwbGF0Zm9ybXMuCisjaWYgIVBMQVRGT1JNKE1BQykK
K1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp+U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIo
KQoreworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdG9wQWxsVGltZXJz
KCkKK3sKK30KKwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2Nyb2xsUG9zaXRp
b25DaGFuZ2VkKCkKK3sKK30KKwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6dXBk
YXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpCit7CisKK30KKwordm9p
ZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6dXBkYXRlUnViYmVyQmFuZEFuaW1hdGluZ1N0
YXRlKE1vbm90b25pY1RpbWUpCit7CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjAyNmNlYmVhYzJjNzlm
YTlhYjYxYjlmNjZmZDJhYmI2NWU3NWVlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmgKQEAgLTAsMCArMSwyNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorCisjaW5jbHVkZSAiUmVjdEVkZ2Vz
LmgiCisjaW5jbHVkZSAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKKyNpbmNsdWRlICJTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUg
IldoZWVsRXZlbnRUZXN0TW9uaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjsKK2NsYXNzIExheW91dFNpemU7CitjbGFzcyBQbGF0
Zm9ybVdoZWVsRXZlbnQ7CitjbGFzcyBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjsKK2NsYXNz
IFNjcm9sbGFibGVBcmVhOworY2xhc3MgV2hlZWxFdmVudFRlc3RNb25pdG9yOworCitjbGFzcyBT
Y3JvbGxDb250cm9sbGVyVGltZXIgOiBwdWJsaWMgUnVuTG9vcDo6VGltZXJCYXNlIHsKK3B1Ymxp
YzoKKyAgICBTY3JvbGxDb250cm9sbGVyVGltZXIoUnVuTG9vcCYgcnVuTG9vcCwgRnVuY3Rpb248
dm9pZCgpPiYmIGNhbGxiYWNrKQorICAgICAgICA6IFJ1bkxvb3A6OlRpbWVyQmFzZShydW5Mb29w
KQorICAgICAgICAsIG1fY2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgZmlyZWQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgbV9jYWxsYmFjaygpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fY2FsbGJhY2s7Cit9Owor
CitjbGFzcyBTY3JvbGxDb250cm9sbGVyQ2xpZW50IHsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IH5TY3JvbGxDb250cm9sbGVyQ2xpZW50KCkgPSBkZWZhdWx0OworCitwdWJsaWM6CisgICAgLy8g
T25seSB1c2VkIGZvciBub24tYW5pbWF0aW9uIHRpbWVycy4KKyAgICB2aXJ0dWFsIHN0ZDo6dW5p
cXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IGNyZWF0ZVRpbWVyKEZ1bmN0aW9uPHZvaWQo
KT4mJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2soU2Ny
b2xsaW5nRWZmZWN0c0NvbnRyb2xsZXImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BBbmlt
YXRpb25DYWxsYmFjayhTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciYpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVLZXlib2FyZFNjcm9sbFBvc2l0aW9uKE1vbm90b25pY1RpbWUpIHsg
fQorICAgIHZpcnR1YWwgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvciAqa2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKworI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmco
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBh
bGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkgY29uc3QgPSAwOworCisg
ICAgdmlydHVhbCBib29sIGlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJikg
Y29uc3QgPSAwOworCisgICAgdmlydHVhbCBSZWN0RWRnZXM8Ym9vbD4gZWRnZVBpbm5lZFN0YXRl
KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBib29sIGFsbG93c0hvcml6b250YWxTY3JvbGxp
bmcoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5n
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rp
b24oU2Nyb2xsRGlyZWN0aW9uKSBjb25zdCA9IDA7CisKKyAgICAvLyBGSVhNRTogdXNlIFNjcm9s
bENsYW1waW5nIHRvIGNvbGxhcHNlIHRoZXNlIHRvIG9uZS4KKyAgICB2aXJ0dWFsIHZvaWQgaW1t
ZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXplJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBp
bW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0
U2l6ZSYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRSdWJiZXJCYW5kU25hcEFu
aW1hdGlvbigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9wUnViYmVyYmFuZFNuYXBBbmlt
YXRpb24oKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBydWJiZXJCYW5kaW5nU3RhdGVDaGFuZ2Vk
KGJvb2wpIHsgfQorCisgICAgLy8gSWYgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGlzIHdp
dGhpbiB0aGUgb3ZlcmhhbmcgYXJlYSwgdGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlCisgICAgLy8g
dGhlIHBhZ2UgdG8gc2Nyb2xsIHRvIHRoZSBuZWFyZXN0IGJvdW5kYXJ5IHBvaW50LgorICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSA9IDA7
CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBkZWZlcldoZWVsRXZlbnRUZXN0Q29tcGxldGlv
bkZvclJlYXNvbihXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmll
ciwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpEZWZlclJlYXNvbikgY29uc3QgeyAvKiBEbyBub3Ro
aW5nICovIH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlV2hlZWxFdmVudFRlc3RDb21wbGV0aW9u
RGVmZXJyYWxGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlk
ZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6RGVmZXJSZWFzb24pIGNvbnN0IHsgLyog
RG8gbm90aGluZyAqLyB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0KCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xs
RXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRT
Y3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0b3BTY3JvbGxT
bmFwQW5pbWF0aW9uKCkgeyB9CisgICAgdmlydHVhbCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBMYXlvdXRTaXplIHNjcm9sbEV4dGVudCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdCA9IDA7Cit9Owor
CitjbGFzcyBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIpOworCitwdWJsaWM6CisgICAgZXhwbGlj
aXQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCYpOwor
ICAgIH5TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcigpOworCisgICAgYm9vbCB1c2VzU2Nyb2xs
U25hcCgpIGNvbnN0OworICAgIHZvaWQgc3RvcEFsbFRpbWVycygpOworICAgIHZvaWQgc2Nyb2xs
UG9zaXRpb25DaGFuZ2VkKCk7CisKKyAgICB2b2lkIGJlZ2luS2V5Ym9hcmRTY3JvbGxpbmcoKTsK
KyAgICB2b2lkIHN0b3BLZXlib2FyZFNjcm9sbGluZygpOworICAgIAorICAgIC8vIFNob3VsZCBi
ZSBjYWxsZWQgcGVyaW9kaWNhbGx5IGJ5IHRoZSBjbGllbnQuIFN0YXJ0ZWQgYnkgc3RhcnRBbmlt
YXRpb25DYWxsYmFjaygpLCBzdG9wcGVkIGJ5IHN0b3BBbmltYXRpb25DYWxsYmFjaygpLgorICAg
IHZvaWQgYW5pbWF0aW9uQ2FsbGJhY2soTW9ub3RvbmljVGltZSk7CisKKyAgICB2b2lkIHNldFNu
YXBPZmZzZXRzSW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8mKTsKKyAgICBj
b25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8qIHNuYXBPZmZzZXRzSW5mbygpIGNvbnN0
OworICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4
aXMsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KTsKKyAgICB2b2lkIHVwZGF0ZUFjdGl2ZVNjcm9s
bFNuYXBJbmRleEZvckNsaWVudE9mZnNldCgpOworICAgIHZvaWQgcmVzbmFwQWZ0ZXJMYXlvdXQo
KTsKKyAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlOyB9CisgICAgdm9pZCBzZXRTY3Jv
bGxTbmFwSW5kZXhEaWRDaGFuZ2UoYm9vbCBzdGF0ZSkgeyBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRl
eERpZENoYW5nZSA9IHN0YXRlOyB9CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gYWN0aXZl
U2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0OworICAgIHZvaWQg
dXBkYXRlU2Nyb2xsU25hcFN0YXRlKGNvbnN0IFNjcm9sbGFibGVBcmVhJik7CisgICAgdm9pZCB1
cGRhdGVHZXN0dXJlSW5Qcm9ncmVzc1N0YXRlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwor
ICAgIGZsb2F0IGFkanVzdFNjcm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpcywgRmxvYXRQ
b2ludCBkZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8Zmxv
YXQ+IG9yaWdpbmFsT2Zmc2V0KTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBSZXR1cm5z
IHRydWUgaWYgaGFuZGxlZC4KKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50Jik7CisKKyAgICBlbnVtIGNsYXNzIFdoZWVsQXhpc0JpYXMgeyBOb25lLCBW
ZXJ0aWNhbCB9OworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNjcm9sbERpcmVjdGlvbj4gZGly
ZWN0aW9uRnJvbUV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIHN0ZDo6b3B0aW9uYWw8
U2Nyb2xsRXZlbnRBeGlzPiwgV2hlZWxBeGlzQmlhcyA9IFdoZWVsQXhpc0JpYXM6Ok5vbmUpOwor
ICAgIHN0YXRpYyBGbG9hdFNpemUgd2hlZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisKKyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jl
c3MoKSBjb25zdDsKKyAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdDsKKwor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBoYW5kbGVkLgorICAgIGJvb2wgcHJvY2Vzc1doZWVsRXZl
bnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworCisjaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQorICAgIHZvaWQgc3RvcFJ1YmJlcmJhbmRpbmcoKTsKKyAgICBib29s
IGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdDsKKyAgICBSZWN0RWRnZXM8Ym9vbD4gcnVi
YmVyQmFuZGluZ0VkZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9ydWJiZXJCYW5kaW5nRWRnZXM7IH0K
KyNlbmRpZgorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXROZWFyZXN0U2Nyb2xsU25h
cEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMsIFNjcm9sbE9mZnNldCk7CisK
KyAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsK
KyAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsK
KyAgICB2b2lkIHVwZGF0ZUtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0aW5nU3RhdGUoTW9ub3Rvbmlj
VGltZSk7CisKKyAgICB2b2lkIHNldElzQW5pbWF0aW5nUnViYmVyQmFuZChib29sKTsKKyAgICB2
b2lkIHNldElzQW5pbWF0aW5nU2Nyb2xsU25hcChib29sKTsKKyAgICB2b2lkIHNldElzQW5pbWF0
aW5nS2V5Ym9hcmRTY3JvbGxpbmcoYm9vbCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9p
ZCBzdGFydFNjcm9sbFNuYXBBbmltYXRpb24oKTsKKyAgICB2b2lkIHN0b3BTY3JvbGxTbmFwQW5p
bWF0aW9uKCk7CisKKyAgICBib29sIHNob3VsZE92ZXJyaWRlTW9tZW50dW1TY3JvbGxpbmcoKSBj
b25zdDsKKyAgICB2b2lkIHN0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXJGaXJlZCgpOworICAg
IHZvaWQgc2NoZWR1bGVTdGF0ZWxlc3NTY3JvbGxTbmFwKCk7CisgICAgdm9pZCBzdGFydERlZmVy
cmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKKyAgICB2
b2lkIHN0b3BEZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25EdWVUb1Njcm9sbFNuYXBw
aW5nKCk7CisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgdm9pZCBzdGFydFJ1YmJl
cmJhbmRBbmltYXRpb24oKTsKKyAgICB2b2lkIHN0b3BTbmFwUnViYmVyYmFuZEFuaW1hdGlvbigp
OworCisgICAgdm9pZCBzbmFwUnViYmVyQmFuZCgpOworICAgIGJvb2wgc2hvdWxkUnViYmVyQmFu
ZEluSG9yaXpvbnRhbERpcmVjdGlvbihjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdDsK
KyAgICBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pIGNv
bnN0OworICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVybmFsKCkgY29uc3Q7Cisg
ICAgdm9pZCB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKKyAgICB2b2lkIHVwZGF0ZVJ1YmJl
ckJhbmRpbmdFZGdlcyhJbnRTaXplIGNsaWVudFN0cmV0Y2gpOworI2VuZGlmCisjZW5kaWYKKwor
ICAgIHZvaWQgc3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFja3MoKTsKKworICAgIFNjcm9sbENv
bnRyb2xsZXJDbGllbnQmIG1fY2xpZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZT4gbV9zY3JvbGxTbmFwU3RhdGU7CisgICAgYm9vbCBtX2FjdGl2ZVNjcm9s
bFNuYXBJbmRleERpZENoYW5nZSB7IGZhbHNlIH07CisKKyAgICBib29sIG1faXNSdW5uaW5nQW5p
bWF0aW5nQ2FsbGJhY2sgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0FuaW1hdGluZ1J1YmJlckJh
bmQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nIHsgZmFsc2UgfTsKKwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBXYWxsVGltZSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVz
dGFtcDsKKyAgICBGbG9hdFNpemUgbV9vdmVyZmxvd1Njcm9sbERlbHRhOworICAgIEZsb2F0U2l6
ZSBtX3N0cmV0Y2hTY3JvbGxGb3JjZTsKKyAgICBGbG9hdFNpemUgbV9tb21lbnR1bVZlbG9jaXR5
OworCisgICAgYm9vbCBtX2luU2Nyb2xsR2VzdHVyZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX21v
bWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZU1vbWVu
dHVtU2Nyb2xscyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzUnViYmVyQmFuZGluZyB7IGZhbHNl
IH07CisKKyAgICBGbG9hdFNpemUgbV9kcmFnRW5kZWRTY3JvbGxpbmdWZWxvY2l0eTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQ29udHJvbGxlclRpbWVyPiBtX3N0YXRlbGVzc1NuYXBUcmFu
c2l0aW9uVGltZXI7CisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgLy8gUnViYmVy
IGJhbmQgc3RhdGUuCisgICAgTW9ub3RvbmljVGltZSBtX3N0YXJ0VGltZTsKKyAgICBGbG9hdFNp
emUgbV9zdGFydFN0cmV0Y2g7CisgICAgRmxvYXRTaXplIG1fb3JpZ1ZlbG9jaXR5OworICAgIFJl
Y3RFZGdlczxib29sPiBtX3J1YmJlckJhbmRpbmdFZGdlczsKKyNlbmRpZgorCisjaWYgQVNTRVJU
X0VOQUJMRUQKKyAgICBib29sIG1fdGltZXJzV2VyZVN0b3BwZWQgeyBmYWxzZSB9OworI2VuZGlm
CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xsZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNhYzliMmIxNDljMzllYzBjZWYwMDUxYmQyMTdhZmQ4NDZkNjM4OWEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xsZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSw3ODgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJT
Y3JvbGxDb250cm9sbGVyLmgiCi0KLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgotI2ltcG9ydCAiV2hlZWxFdmVudFRlc3RNb25pdG9yLmgiCi0jaW1w
b3J0IDxwYWwvc3BpL21hYy9OU1Njcm9sbFZpZXdTUEkuaD4KLSNpbXBvcnQgPHN5cy9zeXNjdGwu
aD4KLSNpbXBvcnQgPHN5cy90aW1lLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKLXN0YXRpYyBjb25zdCBTZWNvbmRzIHNjcm9sbFZlbG9jaXR5WmVy
b2luZ1RpbWVvdXQgPSAxMDBfbXM7Ci1zdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZERpcmVj
dGlvbkxvY2tTdHJldGNoUmF0aW8gPSAxOwotc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRN
aW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2ggPSAxMDsKLSNlbmRpZgotCi1zdGF0aWMg
ZmxvYXQgZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGluaXRpYWxQb3NpdGlvbiwgZmxv
YXQgaW5pdGlhbFZlbG9jaXR5LCBTZWNvbmRzIGVsYXBzZWRUaW1lKQotewotICAgIHJldHVybiBf
TlNFbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsVmVsb2Np
dHksIGVsYXBzZWRUaW1lLnNlY29uZHMoKSk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBlbGFzdGljRGVs
dGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEpCi17Ci0gICAgcmV0dXJuIF9OU0VsYXN0aWNE
ZWx0YUZvclJlYm91bmREZWx0YShkZWx0YSk7Ci19Ci0KLXN0YXRpYyBmbG9hdCByZWJvdW5kRGVs
dGFGb3JFbGFzdGljRGVsdGEoZmxvYXQgZGVsdGEpCi17Ci0gICAgcmV0dXJuIF9OU1JlYm91bmRE
ZWx0YUZvckVsYXN0aWNEZWx0YShkZWx0YSk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBzY3JvbGxXaGVl
bE11bHRpcGxpZXIoKQotewotICAgIHN0YXRpYyBmbG9hdCBtdWx0aXBsaWVyID0gLTE7Ci0gICAg
aWYgKG11bHRpcGxpZXIgPCAwKSB7Ci0gICAgICAgIG11bHRpcGxpZXIgPSBbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBmbG9hdEZvcktleTpAIk5TU2Nyb2xsV2hlZWxNdWx0
aXBsaWVyIl07Ci0gICAgICAgIGlmIChtdWx0aXBsaWVyIDw9IDApCi0gICAgICAgICAgICBtdWx0
aXBsaWVyID0gMTsKLSAgICB9Ci0gICAgcmV0dXJuIG11bHRpcGxpZXI7Ci19Ci0KLVNjcm9sbENv
bnRyb2xsZXI6On5TY3JvbGxDb250cm9sbGVyKCkKLXsKLSAgICBBU1NFUlQobV90aW1lcnNXZXJl
U3RvcHBlZCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcEFsbFRpbWVycygpCi17
Ci0gICAgaWYgKG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lcikKLSAgICAgICAgbV9zdGF0
ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyLT5zdG9wKCk7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAot
ICAgIG1fdGltZXJzV2VyZVN0b3BwZWQgPSB0cnVlOwotI2VuZGlmCi19Ci0KLWJvb2wgU2Nyb2xs
Q29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCi17Ci0gICAgaWYgKHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCh3aGVl
bEV2ZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAod2hlZWxFdmVudC5waGFz
ZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpNYXlCZWdpbiB8fCB3aGVlbEV2ZW50LnBo
YXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNhbmNlbGxlZCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZTo6QmVnYW4pIHsKLSAgICAgICAgLy8gRklYTUU6IFRyeWluZyB0byBkZWNpZGUg
aWYgYSBnZXN0dXJlIGlzIGhvcml6b250YWwgb3IgdmVydGljYWwgYXQgdGhlICJiZWdhbiIgcGhh
c2UgaXMgdmVyeSBlcnJvci1wcm9uZS4KLSAgICAgICAgYXV0byBkaXJlY3Rpb24gPSBkaXJlY3Rp
b25Gcm9tRXZlbnQod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKLSAg
ICAgICAgaWYgKGRpcmVjdGlvbiAmJiBtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZs
b2F0U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgoKSwgMCkpICYmICFzaG91bGRSdWJiZXJCYW5kSW5E
aXJlY3Rpb24oZGlyZWN0aW9uLnZhbHVlKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbkZyb21FdmVudCh3aGVlbEV2ZW50LCBTY3Jv
bGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiAmJiBtX2NsaWVu
dC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZSgwLCAtd2hlZWxFdmVudC5kZWx0YVko
KSkpICYmICFzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oZGlyZWN0aW9uLnZhbHVlKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblBy
b2dyZXNzID0gZmFsc2U7Ci0gICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7
Ci0gICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0geyB9OwotICAgICAgICBt
X21vbWVudHVtVmVsb2NpdHkgPSB7IH07Ci0KLSAgICAgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50
ID0gbV9jbGllbnQuc3RyZXRjaEFtb3VudCgpOwotICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZS5zZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC53aWR0
aCgpKSk7Ci0gICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVs
dGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC5oZWlnaHQoKSkpOwotICAgICAgICBtX292
ZXJmbG93U2Nyb2xsRGVsdGEgPSB7IH07Ci0KLSAgICAgICAgc3RvcFNuYXBSdWJiZXJiYW5kQW5p
bWF0aW9uKCk7Ci0gICAgICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZCkgewotICAgICAgICAvLyBGSVhNRTogVGhpcyB0cmln
Z2VycyB0aGUgcnViYmVyYmFuZCB0aW1lciBldmVuIHdoZW4gd2UgZG9uJ3Qgc3RhcnQgcnViYmVy
YmFuZGluZy4KLSAgICAgICAgc25hcFJ1YmJlckJhbmQoKTsKLSAgICAgICAgdXBkYXRlUnViYmVy
QmFuZGluZ1N0YXRlKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wg
aXNNb21lbnR1bVNjcm9sbEV2ZW50ID0gKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlOjpOb25lKTsKLSAgICBpZiAobV9pZ25vcmVNb21lbnR1bVNj
cm9sbHMgJiYgKGlzTW9tZW50dW1TY3JvbGxFdmVudCB8fCBtX2lzQW5pbWF0aW5nUnViYmVyQmFu
ZCkpIHsKLSAgICAgICAgaWYgKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlOjpFbmRlZCkgewotICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNj
cm9sbHMgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGlzTW9tZW50dW1TY3JvbGxFdmVudCAmJiBtX2lnbm9yZU1vbWVudHVtU2Nyb2xs
cykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBmbG9hdCBkZWx0YVggPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKTsK
LSAgICBmbG9hdCBkZWx0YVkgPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0KLSAg
ICAvLyBSZXNldCBvdmVyZmxvdyB2YWx1ZXMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIHJlbW92
ZSBkZWx0YSBhdCB2YXJpb3VzIHBvaW50cyBhbmQgcHV0IGl0IGludG8gb3ZlcmZsb3cuCi0gICAg
bV9vdmVyZmxvd1Njcm9sbERlbHRhID0geyB9OwotCi0gICAgSW50U2l6ZSBzdHJldGNoQW1vdW50
ID0gbV9jbGllbnQuc3RyZXRjaEFtb3VudCgpOwotICAgIGJvb2wgaXNWZXJ0aWNhbGx5U3RyZXRj
aGVkID0gc3RyZXRjaEFtb3VudC5oZWlnaHQoKTsKLSAgICBib29sIGlzSG9yaXpvbnRhbGx5U3Ry
ZXRjaGVkID0gc3RyZXRjaEFtb3VudC53aWR0aCgpOwotCi0gICAgZmxvYXQgZXZlbnRDb2FsZXNj
ZWREZWx0YVg7Ci0gICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVk7Ci0KLSAgICBpZiAoaXNW
ZXJ0aWNhbGx5U3RyZXRjaGVkIHx8IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSB7Ci0gICAgICAg
IGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGlu
Z0RlbHRhWCgpOwotICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LnVu
YWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVkoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBldmVu
dENvYWxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRhWCgpOwotICAgICAgICBldmVudENv
YWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LmRlbHRhWSgpOwotICAgIH0KLQotICAgIGRlbHRh
WCArPSBldmVudENvYWxlc2NlZERlbHRhWDsKLSAgICBkZWx0YVkgKz0gZXZlbnRDb2FsZXNjZWRE
ZWx0YVk7Ci0KLSAgICAvLyBTbGlnaHRseSBwcmVmZXIgc2Nyb2xsaW5nIHZlcnRpY2FsbHkgYnkg
YXBwbHlpbmcgdGhlID0gY2FzZSB0byBkZWx0YVkKLSAgICAvLyBGSVhNRTogVXNlIHdoZWVsRGVs
dGFCaWFzaW5nVG93YXJkc1ZlcnRpY2FsKCkuCi0gICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFi
c2YoZGVsdGFYKSkKLSAgICAgICAgZGVsdGFYID0gMDsKLSAgICBlbHNlCi0gICAgICAgIGRlbHRh
WSA9IDA7Ci0KLSAgICBib29sIHNob3VsZFN0cmV0Y2ggPSBmYWxzZTsKLQotICAgIFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2UgPSB3aGVlbEV2ZW50Lm1vbWVudHVtUGhhc2Uo
KTsKLQotICAgIC8vIElmIHdlIGFyZSBzdGFydGluZyBtb21lbnR1bSBzY3JvbGxpbmcgdGhlbiBk
byBzb21lIHNldHVwLgotICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgKG1v
bWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkJlZ2FuIHx8IG1vbWVudHVt
UGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNoYW5nZWQpKQotICAgICAgICBtX21v
bWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IHRydWU7Ci0KLSAgICBhdXRvIHRpbWVEZWx0YSA9IHdo
ZWVsRXZlbnQudGltZXN0YW1wKCkgLSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKLSAg
ICBpZiAobV9pblNjcm9sbEdlc3R1cmUgfHwgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsK
LSAgICAgICAgaWYgKG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+
IDBfcyAmJiB0aW1lRGVsdGEgPCBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KSB7Ci0gICAg
ICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkuc2V0V2lkdGgoZXZlbnRDb2FsZXNjZWREZWx0YVgg
LyB0aW1lRGVsdGEuc2Vjb25kcygpKTsKLSAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eS5z
ZXRIZWlnaHQoZXZlbnRDb2FsZXNjZWREZWx0YVkgLyB0aW1lRGVsdGEuc2Vjb25kcygpKTsKLSAg
ICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1l
c3RhbXAoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Ny
b2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKLSAgICAgICAgICAgIG1fbW9t
ZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlz
VmVydGljYWxseVN0cmV0Y2hlZCkgewotICAgICAgICAgICAgaWYgKCFpc0hvcml6b250YWxseVN0
cmV0Y2hlZCAmJiBtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZShkZWx0
YVgsIDApKSkgewotICAgICAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUgdmVy
dGljYWwuCi0gICAgICAgICAgICAgICAgaWYgKGRlbHRhWSAmJiAoZmFic2YoZGVsdGFYIC8gZGVs
dGFZKSA8IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJhdGlvKSkKLSAgICAgICAgICAg
ICAgICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChmYWJzZihkZWx0
YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgewotICAg
ICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxv
d1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOwotICAgICAgICAgICAgICAgICAgICBkZWx0
YVggPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX292
ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkg
KyBkZWx0YVgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzSG9yaXpvbnRh
bGx5U3RyZXRjaGVkKSB7Ci0gICAgICAgICAgICAvLyBTdHJldGNoaW5nIG9ubHkgaW4gdGhlIGhv
cml6b250YWwuCi0gICAgICAgICAgICBpZiAobV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0
YShGbG9hdFNpemUoMCwgZGVsdGFZKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGVsdGFYICYm
IChmYWJzZihkZWx0YVkgLyBkZWx0YVgpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNo
UmF0aW8pKQotICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGZhYnNmKGRlbHRhWSkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFC
ZWZvcmVTdHJldGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YS5zZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVsdGFZKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJm
bG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTm90IHN0cmV0Y2hpbmcgYXQgYWxsIHlldC4KLSAg
ICAgICAgICAgIGlmIChtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZShk
ZWx0YVgsIGRlbHRhWSkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0g
ZmFic2YoZGVsdGFYKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFYKSA8
IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93
U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWx0YVggPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVs
dGEud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5hbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyh3aGVlbEV2ZW50KSkK
LSAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLQotICAgICAgICAgICAgICAgIGlmICgh
bV9jbGllbnQuYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKHdoZWVsRXZlbnQpKQotICAgICAgICAg
ICAgICAgICAgICBkZWx0YVkgPSAwOwotCi0gICAgICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9
IGRlbHRhWCB8fCBkZWx0YVk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXI6Omhh
bmRsZVdoZWVsRXZlbnQoKSAtIGRlbHRhWCAiIDw8IGRlbHRhWCA8PCAiIGRlbHRhWSAiIDw8IGRl
bHRhWSA8PCAiIHBpbm5lZCAiIDw8IG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxv
YXRTaXplKGRlbHRhWCwgZGVsdGFZKSkgPDwgIiBzaG91bGRTdHJldGNoICIgPDwgc2hvdWxkU3Ry
ZXRjaCk7Ci0gICAgfQotCi0gICAgYm9vbCBoYW5kbGVkID0gdHJ1ZTsKLQotICAgIGlmIChkZWx0
YVggfHwgZGVsdGFZKSB7Ci0gICAgICAgIGlmICghKHNob3VsZFN0cmV0Y2ggfHwgaXNWZXJ0aWNh
bGx5U3RyZXRjaGVkIHx8IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSkgewotICAgICAgICAgICAg
aWYgKGRlbHRhWSkgewotICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVlbE11bHRp
cGxpZXIoKTsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeShGbG9h
dFNpemUoMCwgZGVsdGFZKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGVsdGFY
KSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwot
ICAgICAgICAgICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5KEZsb2F0U2l6ZShkZWx0
YVgsIDApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChkZWx0YVgpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmFsbG93c0hvcml6b250
YWxTdHJldGNoaW5nKHdoZWVsRXZlbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIWlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkICYmICFtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9s
bERlbHRhKEZsb2F0U2l6ZShkZWx0YVgsIDApKSkgewotICAgICAgICAgICAgICAgICAgICBkZWx0
YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbV9j
bGllbnQuaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhGbG9h
dFNpemUoZGVsdGFYLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGVsdGFZKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5hbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmco
d2hlZWxFdmVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNWZXJ0aWNh
bGx5U3RyZXRjaGVkICYmICFtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6
ZSgwLCBkZWx0YVkpKSkgewotICAgICAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hl
ZWxNdWx0aXBsaWVyKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQuaW1tZWRpYXRl
U2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhGbG9hdFNpemUoMCwgZGVsdGFZ
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX2Ns
aWVudC5zdHJldGNoQW1vdW50KCk7Ci0KLSAgICAgICAgICAgIGlmIChtX21vbWVudHVtU2Nyb2xs
SW5Qcm9ncmVzcykgewotICAgICAgICAgICAgICAgIGlmICgobV9jbGllbnQuaXNQaW5uZWRGb3JT
Y3JvbGxEZWx0YShGbG9hdFNpemUoZXZlbnRDb2FsZXNjZWREZWx0YVgsIGV2ZW50Q29hbGVzY2Vk
RGVsdGFZKSkgfHwgKGZhYnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFYKSArIGZhYnNmKGV2ZW50Q29h
bGVzY2VkRGVsdGFZKSA8PSAwKSkgJiYgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXApIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICBzbmFwUnViYmVyQmFuZCgpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgo
bV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICBtX3N0
cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkg
KyBkZWx0YVkpOwotCi0gICAgICAgICAgICBGbG9hdFNpemUgZGFtcGVkRGVsdGEoY2VpbGYoZWxh
c3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkpKSwg
Y2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhl
aWdodCgpKSkpOwotCi0gICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhv
dXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGRhbXBlZERlbHRhIC0gc3RyZXRjaEFtb3VudCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYg
bW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQpIHsKLSAgICAg
ICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICAgICAgbV9pZ25vcmVN
b21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKLSAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1l
c3RhbXAgPSB7IH07Ci0gICAgfQotCi0gICAgdXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7Ci0K
LSAgICByZXR1cm4gaGFuZGxlZDsKLX0KLQotRmxvYXRTaXplIFNjcm9sbENvbnRyb2xsZXI6Ondo
ZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRpY2FsKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYg
d2hlZWxFdmVudCkKLXsKLSAgICBhdXRvIGRlbHRhWCA9IHdoZWVsRXZlbnQuZGVsdGFYKCk7Ci0g
ICAgYXV0byBkZWx0YVkgPSB3aGVlbEV2ZW50LmRlbHRhWSgpOwotCi0gICAgaWYgKGZhYnNmKGRl
bHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKLSAgICAgICAgZGVsdGFYID0gMDsKLSAgICBlbHNlCi0g
ICAgICAgIGRlbHRhWSA9IDA7Ci0KLSAgICByZXR1cm4geyBkZWx0YVgsIGRlbHRhWSB9OwotfQot
Ci1zdGQ6Om9wdGlvbmFsPFNjcm9sbERpcmVjdGlvbj4gU2Nyb2xsQ29udHJvbGxlcjo6ZGlyZWN0
aW9uRnJvbUV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgc3RkOjpv
cHRpb25hbDxTY3JvbGxFdmVudEF4aXM+IGF4aXMsIFdoZWVsQXhpc0JpYXMgYmlhcykKLXsKLSAg
ICAvLyBGSVhNRTogSXQncyBpbXBvc3NpYmxlIHRvIGluZmVyIGRpcmVjdGlvbiBmcm9tIGEgc2lu
Z2xlIGV2ZW50LCBzaW5jZSB0aGUgc3RhcnQgb2YgYSBnZXN0dXJlIGlzIGVpdGhlciB6ZXJvIG9y
Ci0gICAgLy8gaGFzIHNtYWxsIGRlbHRhcyBvbiBib3RoIGF4ZXMuCi0KLSAgICBhdXRvIHdoZWVs
RGVsdGEgPSBGbG9hdFNpemUgeyB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2ZW50LmRlbHRh
WSgpIH07Ci0gICAgaWYgKGJpYXMgPT0gV2hlZWxBeGlzQmlhczo6VmVydGljYWwpCi0gICAgICAg
IHdoZWVsRGVsdGEgPSB3aGVlbERlbHRhQmlhc2luZ1Rvd2FyZHNWZXJ0aWNhbCh3aGVlbEV2ZW50
KTsKLQotICAgIGlmIChheGlzKSB7Ci0gICAgICAgIHN3aXRjaCAoYXhpcy52YWx1ZSgpKSB7Ci0g
ICAgICAgIGNhc2UgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbDoKLSAgICAgICAgICAgIGlmICh3
aGVlbERlbHRhLmhlaWdodCgpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsRG93
bjsKLQotICAgICAgICAgICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0KCkgPiAwKQotICAgICAgICAg
ICAgICAgIHJldHVybiBTY3JvbGxVcDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsOgotICAgICAgICAgICAgaWYgKHdoZWVsRGVs
dGEud2lkdGgoKSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbExlZnQ7Ci0KLSAg
ICAgICAgICAgIGlmICh3aGVlbERlbHRhLndpZHRoKCkgPCAwKQotICAgICAgICAgICAgICAgIHJl
dHVybiBTY3JvbGxSaWdodDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgWSBmaXJzdCBiZWNhdXNlIHZlcnRpY2FsIHNjcm9s
bGluZyBkb21pbmF0ZXMuCi0gICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0KCkgPCAwKQotICAgICAg
ICByZXR1cm4gU2Nyb2xsRG93bjsKLQotICAgIGlmICh3aGVlbERlbHRhLmhlaWdodCgpID4gMCkK
LSAgICAgICAgcmV0dXJuIFNjcm9sbFVwOwotCi0gICAgaWYgKHdoZWVsRGVsdGEud2lkdGgoKSA+
IDApCi0gICAgICAgIHJldHVybiBTY3JvbGxMZWZ0OwotCi0gICAgaWYgKHdoZWVsRGVsdGEud2lk
dGgoKSA8IDApCi0gICAgICAgIHJldHVybiBTY3JvbGxSaWdodDsKLQotICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci19Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi1zdGF0aWMgaW5saW5l
IGZsb2F0IHJvdW5kVG93YXJkWmVybyhmbG9hdCBudW0pCi17Ci0gICAgcmV0dXJuIG51bSA+IDAg
PyBjZWlsZihudW0gLSAwLjVmKSA6IGZsb29yZihudW0gKyAwLjVmKTsKLX0KLQotc3RhdGljIGlu
bGluZSBmbG9hdCByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGZsb2F0IG51bSkKLXsKLSAg
ICBmbG9hdCByb3VuZGVkTnVtID0gcm91bmRmKG51bSk7Ci0gICAgaWYgKGZhYnMobnVtIC0gcm91
bmRlZE51bSkgPCAwLjEyNSkKLSAgICAgICAgbnVtID0gcm91bmRlZE51bTsKLQotICAgIHJldHVy
biByb3VuZFRvd2FyZFplcm8obnVtKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRh
dGVSdWJiZXJCYW5kQW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKLXsK
LSAgICBpZiAoIW1faXNBbmltYXRpbmdSdWJiZXJCYW5kKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVy
Ojp1cGRhdGVSdWJiZXJCYW5kQW5pbWF0aW5nU3RhdGUoKSAtIG1haW4gdGhyZWFkICIgPDwgaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyB8fCBt
X2lnbm9yZU1vbWVudHVtU2Nyb2xscykgewotICAgICAgICBhdXRvIHRpbWVEZWx0YSA9IGN1cnJl
bnRUaW1lIC0gbV9zdGFydFRpbWU7Ci0KLSAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoLmlzWmVy
bygpKSB7Ci0gICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IG1fY2xpZW50LnN0cmV0Y2hBbW91
bnQoKTsKLSAgICAgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBGbG9hdFNpemUoKSkgewot
ICAgICAgICAgICAgICAgIHN0b3BSdWJiZXJiYW5kaW5nKCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IG1fbW9t
ZW50dW1WZWxvY2l0eTsKLQotICAgICAgICAgICAgLy8gSnVzdCBsaWtlIG5vcm1hbCBzY3JvbGxp
bmcsIHByZWZlciB2ZXJ0aWNhbCBydWJiZXJiYW5kaW5nCi0gICAgICAgICAgICBpZiAoZmFic2Yo
bV9vcmlnVmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LndpZHRoKCkp
KQotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOwotCi0gICAgICAg
ICAgICAvLyBEb24ndCBydWJiZXItYmFuZCBob3Jpem9udGFsbHkgaWYgaXQncyBub3QgcG9zc2li
bGUgdG8gc2Nyb2xsIGhvcml6b250YWxseQotICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5hbGxv
d3NIb3Jpem9udGFsU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHku
c2V0V2lkdGgoMCk7Ci0KLSAgICAgICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5kIHZlcnRpY2Fs
bHkgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2Nyb2xsIHZlcnRpY2FsbHkKLSAgICAgICAgICAg
IGlmICghbV9jbGllbnQuYWxsb3dzVmVydGljYWxTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgICAg
ICBtX29yaWdWZWxvY2l0eS5zZXRIZWlnaHQoMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9h
dFBvaW50IGRlbHRhKHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9y
VGltZURlbHRhKG1fc3RhcnRTdHJldGNoLndpZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgp
LCB0aW1lRGVsdGEpKSwKLSAgICAgICAgICAgIHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8o
ZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNoLmhlaWdodCgpLCAtbV9vcmln
VmVsb2NpdHkuaGVpZ2h0KCksIHRpbWVEZWx0YSkpKTsKLQotICAgICAgICBpZiAoZmFicyhkZWx0
YS54KCkpID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEpIHsKLSAgICAgICAgICAgIG1fY2xp
ZW50LmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoRmxvYXRT
aXplKGRlbHRhLngoKSwgZGVsdGEueSgpKSAtIG1fY2xpZW50LnN0cmV0Y2hBbW91bnQoKSk7Ci0K
LSAgICAgICAgICAgIEZsb2F0U2l6ZSBuZXdTdHJldGNoID0gbV9jbGllbnQuc3RyZXRjaEFtb3Vu
dCgpOwotCi0gICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChyZWJvdW5k
RGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC53aWR0aCgpKSk7Ci0gICAgICAgICAgICBt
X3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRh
KG5ld1N0cmV0Y2guaGVpZ2h0KCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1f
Y2xpZW50LmFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSgpOwotICAgICAg
ICAgICAgc3RvcFJ1YmJlcmJhbmRpbmcoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG1fc3RhcnRUaW1lID0gY3VycmVudFRpbWU7Ci0gICAgICAgIG1fc3RhcnRTdHJldGNoID0g
eyB9OwotICAgICAgICBpZiAoIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3NJbnRlcm5hbCgpKQotICAg
ICAgICAgICAgc3RvcFNuYXBSdWJiZXJiYW5kQW5pbWF0aW9uKCk7Ci0gICAgfQotCi0gICAgdXBk
YXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBTY3JvbGxDb250cm9s
bGVyOjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQotewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKLSAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKLSNlbmRpZgotfQotCi1ib29sIFNj
cm9sbENvbnRyb2xsZXI6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2luU2Nyb2xsR2VzdHVyZTsKLX0KLQotYm9vbCBTY3JvbGxDb250cm9sbGVyOjppc1J1
YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
Ci0gICAgcmV0dXJuIG1faXNSdWJiZXJCYW5kaW5nOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7
Ci0jZW5kaWYKLX0KLQotYm9vbCBTY3JvbGxDb250cm9sbGVyOjppc1Njcm9sbFNuYXBJblByb2dy
ZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xs
SW5Qcm9ncmVzcyB8fCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3Rv
cFJ1YmJlcmJhbmRpbmcoKQotewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBzdG9w
U25hcFJ1YmJlcmJhbmRBbmltYXRpb24oKTsKLSAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IHsg
fTsKLSAgICBtX3N0YXJ0VGltZSA9IHsgfTsKLSAgICBtX3N0YXJ0U3RyZXRjaCA9IHsgfTsKLSAg
ICBtX29yaWdWZWxvY2l0eSA9IHsgfTsKLSAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsK
LSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotdm9pZCBTY3JvbGxDb250
cm9sbGVyOjpzdGFydFJ1YmJlcmJhbmRBbmltYXRpb24oKQotewotICAgIG1fY2xpZW50LndpbGxT
dGFydFJ1YmJlckJhbmRTbmFwQW5pbWF0aW9uKCk7Ci0KLSAgICBzZXRJc0FuaW1hdGluZ1J1YmJl
ckJhbmQodHJ1ZSk7Ci0KLSAgICBtX2NsaWVudC5kZWZlcldoZWVsRXZlbnRUZXN0Q29tcGxldGlv
bkZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpSdWJiZXJi
YW5kSW5Qcm9ncmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNuYXBSdWJi
ZXJiYW5kQW5pbWF0aW9uKCkKLXsKLSAgICBtX2NsaWVudC5kaWRTdG9wUnViYmVyYmFuZFNuYXBB
bmltYXRpb24oKTsKLQotICAgIHNldElzQW5pbWF0aW5nUnViYmVyQmFuZChmYWxzZSk7Ci0KLSAg
ICBtX2NsaWVudC5yZW1vdmVXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25EZWZlcnJhbEZvclJlYXNv
bihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJ
ZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpSdWJiZXJiYW5kSW5Qcm9n
cmVzcyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmQoKQotewot
ICAgIGF1dG8gdGltZURlbHRhID0gV2FsbFRpbWU6Om5vdygpIC0gbV9sYXN0TW9tZW50dW1TY3Jv
bGxUaW1lc3RhbXA7Ci0gICAgaWYgKG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wICYmIHRp
bWVEZWx0YSA+PSBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KQotICAgICAgICBtX21vbWVu
dHVtVmVsb2NpdHkgPSB7IH07Ci0KLSAgICBpZiAobV9pc0FuaW1hdGluZ1J1YmJlckJhbmQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7
Ci0gICAgbV9zdGFydFN0cmV0Y2ggPSB7IH07Ci0gICAgbV9vcmlnVmVsb2NpdHkgPSB7IH07Ci0K
LSAgICBzdGFydFJ1YmJlcmJhbmRBbmltYXRpb24oKTsKLX0KLQotYm9vbCBTY3JvbGxDb250cm9s
bGVyOjpzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFsRGlyZWN0aW9uKGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYgd2hlZWxFdmVudCkgY29uc3QKLXsKLSAgICBhdXRvIGRpcmVjdGlvbiA9IGRp
cmVjdGlvbkZyb21FdmVudCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwp
OwotICAgIGlmIChkaXJlY3Rpb24pCi0gICAgICAgIHJldHVybiBzaG91bGRSdWJiZXJCYW5kSW5E
aXJlY3Rpb24oZGlyZWN0aW9uLnZhbHVlKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgU2Nyb2xsQ29udHJvbGxlcjo6c2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERp
cmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZFJ1
YmJlckJhbmRJbkRpcmVjdGlvbihkaXJlY3Rpb24pOwotfQotCi1ib29sIFNjcm9sbENvbnRyb2xs
ZXI6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3NJbnRlcm5hbCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2luU2Nyb2xsR2VzdHVyZSAmJiAhbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgIW1faXNB
bmltYXRpbmdSdWJiZXJCYW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
IW1fY2xpZW50LnN0cmV0Y2hBbW91bnQoKS5pc1plcm8oKTsKLX0KLQotdm9pZCBTY3JvbGxDb250
cm9sbGVyOjp1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKQotewotICAgIGJvb2wgaXNSdWJiZXJC
YW5kaW5nID0gaXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVybmFsKCk7Ci0gICAgaWYgKGlzUnVi
YmVyQmFuZGluZyA9PSBtX2lzUnViYmVyQmFuZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9pc1J1YmJlckJhbmRpbmcgPSBpc1J1YmJlckJhbmRpbmc7Ci0gICAgaWYgKG1faXNSdWJiZXJC
YW5kaW5nKQotICAgICAgICB1cGRhdGVSdWJiZXJCYW5kaW5nRWRnZXMobV9jbGllbnQuc3RyZXRj
aEFtb3VudCgpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcnViYmVyQmFuZGluZ0VkZ2VzID0geyB9
OwotCi0gICAgbV9jbGllbnQucnViYmVyQmFuZGluZ1N0YXRlQ2hhbmdlZChtX2lzUnViYmVyQmFu
ZGluZyk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlUnViYmVyQmFuZGluZ0Vk
Z2VzKEludFNpemUgY2xpZW50U3RyZXRjaCkKLXsKLSAgICBtX3J1YmJlckJhbmRpbmdFZGdlcy5z
ZXRMZWZ0KGNsaWVudFN0cmV0Y2gud2lkdGgoKSA8IDApOwotICAgIG1fcnViYmVyQmFuZGluZ0Vk
Z2VzLnNldFJpZ2h0KGNsaWVudFN0cmV0Y2gud2lkdGgoKSA+IDApOwotCi0gICAgbV9ydWJiZXJC
YW5kaW5nRWRnZXMuc2V0VG9wKGNsaWVudFN0cmV0Y2guaGVpZ2h0KCkgPCAwKTsKLSAgICBtX3J1
YmJlckJhbmRpbmdFZGdlcy5zZXRCb3R0b20oY2xpZW50U3RyZXRjaC5oZWlnaHQoKSA+IDApOwot
fQotCi0jZW5kaWYgLy8gRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotCi1lbnVtIGNsYXNzIFdoZWVs
RXZlbnRTdGF0dXMgewotICAgIFVzZXJTY3JvbGxCZWdpbiwKLSAgICBVc2VyU2Nyb2xsaW5nLAot
ICAgIFVzZXJTY3JvbGxFbmQsCi0gICAgTW9tZW50dW1TY3JvbGxCZWdpbiwKLSAgICBNb21lbnR1
bVNjcm9sbGluZywKLSAgICBNb21lbnR1bVNjcm9sbEVuZCwKLSAgICBTdGF0ZWxlc3NTY3JvbGxF
dmVudCwKLSAgICBVbmtub3duCi19OwotCi1zdGF0aWMgaW5saW5lIFdoZWVsRXZlbnRTdGF0dXMg
dG9XaGVlbEV2ZW50U3RhdHVzKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlLCBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZSBtb21lbnR1bVBoYXNlKQotewotICAgIGlmIChwaGFzZSA9PSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Tm9uZSkgewotICAgICAgICBzd2l0Y2ggKG1vbWVudHVtUGhh
c2UpIHsKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW46Ci0gICAg
ICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxCZWdpbjsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2hh
bmdlZDoKLSAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9s
bGluZzsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZTo6RW5kZWQ6Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6TW9tZW50
dW1TY3JvbGxFbmQ7Ci0KLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Tm9u
ZToKLSAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpTdGF0ZWxlc3NTY3JvbGxF
dmVudDsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRT
dGF0dXM6OlVua25vd247Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1vbWVudHVtUGhhc2Ug
PT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok5vbmUpIHsKLSAgICAgICAgc3dpdGNoIChwaGFz
ZSkgewotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpCZWdhbjoKLSAgICAg
ICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6TWF5QmVnaW46Ci0gICAgICAgICAgICBy
ZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOwotICAgICAgICAgICAgICAg
IAotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpDaGFuZ2VkOgotICAgICAg
ICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkOgotICAg
ICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpDYW5jZWxsZWQ6Ci0gICAgICAgICAg
ICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEVuZDsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVz
OjpVbmtub3duOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVz
OjpVbmtub3duOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFdoZWVsRXZlbnRTdGF0dXMgc3RhdHVzKQotewotICAg
IHN3aXRjaCAoc3RhdHVzKSB7Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xs
QmVnaW46IHRzIDw8ICJVc2VyU2Nyb2xsQmVnaW4iOyBicmVhazsKLSAgICBjYXNlIFdoZWVsRXZl
bnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc6IHRzIDw8ICJVc2VyU2Nyb2xsaW5nIjsgYnJlYWs7Ci0g
ICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsRW5kOiB0cyA8PCAiVXNlclNjcm9s
bEVuZCI7IGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxC
ZWdpbjogdHMgPDwgIk1vbWVudHVtU2Nyb2xsQmVnaW4iOyBicmVhazsKLSAgICBjYXNlIFdoZWVs
RXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsaW5nOiB0cyA8PCAiTW9tZW50dW1TY3JvbGxpbmci
OyBicmVhazsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsRW5kOiB0
cyA8PCAiTW9tZW50dW1TY3JvbGxFbmQiOyBicmVhazsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0
dXM6OlN0YXRlbGVzc1Njcm9sbEV2ZW50OiB0cyA8PCAiU3RhdGVsZXNzU2Nyb2xsRXZlbnQiOyBi
cmVhazsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd246IHRzIDw8ICJVbmtub3du
IjsgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsKLX0KLSNlbmRpZgotCi1ib29sIFNjcm9s
bENvbnRyb2xsZXI6OnNob3VsZE92ZXJyaWRlTW9tZW50dW1TY3JvbGxpbmcoKSBjb25zdAotewot
ICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
U2Nyb2xsU25hcFN0YXRlIHNjcm9sbFNuYXBTdGF0ZSA9IG1fc2Nyb2xsU25hcFN0YXRlLT5jdXJy
ZW50U3RhdGUoKTsKLSAgICByZXR1cm4gc2Nyb2xsU25hcFN0YXRlID09IFNjcm9sbFNuYXBTdGF0
ZTo6R2xpZGluZyB8fCBzY3JvbGxTbmFwU3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpEZXN0aW5h
dGlvblJlYWNoZWQ7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2NoZWR1bGVTdGF0ZWxl
c3NTY3JvbGxTbmFwKCkKLXsKLSAgICBzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpOwotICAgIGlm
IChtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXIpIHsKLSAgICAgICAgbV9zdGF0ZWxlc3NT
bmFwVHJhbnNpdGlvblRpbWVyLT5zdG9wKCk7Ci0gICAgICAgIG1fc3RhdGVsZXNzU25hcFRyYW5z
aXRpb25UaW1lciA9IG51bGxwdHI7Ci0gICAgfQotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhdGljIGNvbnN0IFNlY29uZHMgc3RhdGVsZXNzU2Ny
b2xsU25hcERlbGF5ID0gNzUwX21zOwotICAgIG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1l
ciA9IG1fY2xpZW50LmNyZWF0ZVRpbWVyKFt0aGlzXSB7Ci0gICAgICAgIHN0YXRlbGVzc1NuYXBU
cmFuc2l0aW9uVGltZXJGaXJlZCgpOwotICAgIH0pOwotICAgIG1fc3RhdGVsZXNzU25hcFRyYW5z
aXRpb25UaW1lci0+c3RhcnRPbmVTaG90KHN0YXRlbGVzc1Njcm9sbFNuYXBEZWxheSk7Ci0gICAg
c3RhcnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5n
KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RhdGVsZXNzU25hcFRyYW5zaXRpb25U
aW1lckZpcmVkKCkKLXsKLSAgICBtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXIgPSBudWxs
cHRyOwotCi0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlvblRvU25hcEFuaW1hdGlvblN0YXRlKG1fY2xp
ZW50LnNjcm9sbEV4dGVudCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKSwgbV9jbGllbnQucGFn
ZVNjYWxlRmFjdG9yKCksIG1fY2xpZW50LnNjcm9sbE9mZnNldCgpKTsKLSAgICBzdGFydFNjcm9s
bFNuYXBBbmltYXRpb24oKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdGFydERlZmVy
cmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKQotewotICAg
IG1fY2xpZW50LmRlZmVyV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRm9yUmVhc29uKHJlaW50ZXJw
cmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+
KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbFNuYXBJblByb2dyZXNzKTsKLX0K
LQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wRGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21w
bGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygpCi17Ci0gICAgbV9jbGllbnQucmVtb3ZlV2hlZWxF
dmVudFRlc3RDb21wbGV0aW9uRGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVl
bEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVs
RXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsU25hcEluUHJvZ3Jlc3MpOwotfQotCi1ib29sIFNjcm9s
bENvbnRyb2xsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9zY3JvbGxTbmFwU3RhdGUtPnNuYXBP
ZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpLmlzRW1wdHkoKSAmJiBt
X3Njcm9sbFNuYXBTdGF0ZS0+c25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVy
dGljYWwpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBzdGF0
dXMgPSB0b1doZWVsRXZlbnRTdGF0dXMod2hlZWxFdmVudC5waGFzZSgpLCB3aGVlbEV2ZW50Lm1v
bWVudHVtUGhhc2UoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFt
IDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIHByb2Nlc3NXaGVlbEV2ZW50Rm9y
U2Nyb2xsU25hcDogc3RhdHVzICIgPDwgc3RhdHVzKTsKLQotICAgIGJvb2wgaXNNb21lbnR1bVNj
cm9sbGluZyA9IGZhbHNlOwotICAgIHN3aXRjaCAoc3RhdHVzKSB7Ci0gICAgY2FzZSBXaGVlbEV2
ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVnaW46Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpV
c2VyU2Nyb2xsaW5nOgotICAgICAgICBzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpOwotICAgICAg
ICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlvblRvVXNlckludGVyYWN0aW9uU3RhdGUoKTsK
LSAgICAgICAgbV9kcmFnRW5kZWRTY3JvbGxpbmdWZWxvY2l0eSA9IC13aGVlbEV2ZW50LnNjcm9s
bGluZ1ZlbG9jaXR5KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1
czo6VXNlclNjcm9sbEVuZDoKLSAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnRyYW5zaXRpb25U
b1NuYXBBbmltYXRpb25TdGF0ZShtX2NsaWVudC5zY3JvbGxFeHRlbnQoKSwgbV9jbGllbnQudmll
d3BvcnRTaXplKCksIG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpLCBtX2NsaWVudC5zY3JvbGxP
ZmZzZXQoKSk7Ci0gICAgICAgIHN0YXJ0U2Nyb2xsU25hcEFuaW1hdGlvbigpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsQmVnaW46Ci0g
ICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9HbGlkZUFuaW1hdGlvblN0YXRl
KG1fY2xpZW50LnNjcm9sbEV4dGVudCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKSwgbV9jbGll
bnQucGFnZVNjYWxlRmFjdG9yKCksIG1fY2xpZW50LnNjcm9sbE9mZnNldCgpLCBtX2RyYWdFbmRl
ZFNjcm9sbGluZ1ZlbG9jaXR5LCBGbG9hdFNpemUoLXdoZWVsRXZlbnQuZGVsdGFYKCksIC13aGVl
bEV2ZW50LmRlbHRhWSgpKSk7Ci0gICAgICAgIG1fZHJhZ0VuZGVkU2Nyb2xsaW5nVmVsb2NpdHkg
PSB7IH07Ci0gICAgICAgIGlzTW9tZW50dW1TY3JvbGxpbmcgPSB0cnVlOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsaW5nOgotICAgIGNh
c2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxFbmQ6Ci0gICAgICAgIGlzTW9tZW50
dW1TY3JvbGxpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdoZWVsRXZlbnRT
dGF0dXM6OlN0YXRlbGVzc1Njcm9sbEV2ZW50OgotICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+
dHJhbnNpdGlvblRvVXNlckludGVyYWN0aW9uU3RhdGUoKTsKLSAgICAgICAgc2NoZWR1bGVTdGF0
ZWxlc3NTY3JvbGxTbmFwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0
YXR1czo6VW5rbm93bjoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIHJldHVybiBpc01vbWVudHVtU2Nyb2xsaW5nICYmIHNob3VsZE92
ZXJyaWRlTW9tZW50dW1TY3JvbGxpbmcoKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1
cGRhdGVHZXN0dXJlSW5Qcm9ncmVzc1N0YXRlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCkKLXsKLSAgICBpZiAod2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpIHx8IHdoZWVs
RXZlbnQuaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpKQotICAgICAgICBtX2luU2Ny
b2xsR2VzdHVyZSA9IHRydWU7Ci0gICAgZWxzZSBpZiAod2hlZWxFdmVudC5pc0VuZE9mTm9uTW9t
ZW50dW1TY3JvbGwoKSB8fCB3aGVlbEV2ZW50LmlzR2VzdHVyZUNhbmNlbCgpIHx8IHdoZWVsRXZl
bnQuaXNFbmRPZk1vbWVudHVtU2Nyb2xsKCkpCi0gICAgICAgIG1faW5TY3JvbGxHZXN0dXJlID0g
ZmFsc2U7Ci0KLSAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKLX0KLQotdm9pZCBTY3Jv
bGxDb250cm9sbGVyOjpzdGFydFNjcm9sbFNuYXBBbmltYXRpb24oKQotewotICAgIGlmIChtX2lz
QW5pbWF0aW5nU2Nyb2xsU25hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HX1dJVEhfU1RS
RUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlciAiIDw8IHRoaXMgPDwg
IiBzdGFydFNjcm9sbFNuYXBBbmltYXRpb24gKG1haW4gdGhyZWFkICIgPDwgaXNNYWluVGhyZWFk
KCkgPDwgIikiKTsKLQotICAgIHN0YXJ0RGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9u
RHVlVG9TY3JvbGxTbmFwcGluZygpOwotICAgIG1fY2xpZW50LndpbGxTdGFydFNjcm9sbFNuYXBB
bmltYXRpb24oKTsKLSAgICBzZXRJc0FuaW1hdGluZ1Njcm9sbFNuYXAodHJ1ZSk7Ci19Ci0KLXZv
aWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNjcm9sbFNuYXBBbmltYXRpb24oKQotewotICAgIGlm
ICghbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0
aGlzIDw8ICIgc3RvcFNjcm9sbFNuYXBBbmltYXRpb24gKG1haW4gdGhyZWFkICIgPDwgaXNNYWlu
VGhyZWFkKCkgPDwgIikiKTsKLQotICAgIHN0b3BEZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBs
ZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKCk7Ci0gICAgbV9jbGllbnQuZGlkU3RvcFNjcm9sbFNu
YXBBbmltYXRpb24oKTsKLQotICAgIHNldElzQW5pbWF0aW5nU2Nyb2xsU25hcChmYWxzZSk7Ci19
Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRl
KE1vbm90b25pY1RpbWUgY3VycmVudFRpbWUpCi17Ci0gICAgaWYgKCFtX2lzQW5pbWF0aW5nU2Ny
b2xsU25hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0FuaW1hdGlvbkNvbXBsZXRlOwotICAgIGF1dG8gYW5pbWF0aW9uT2Zmc2V0
ID0gbV9zY3JvbGxTbmFwU3RhdGUtPmN1cnJlbnRBbmltYXRlZFNjcm9sbE9mZnNldChjdXJyZW50
VGltZSwgaXNBbmltYXRpb25Db21wbGV0ZSk7Ci0gICAgYXV0byBjdXJyZW50T2Zmc2V0ID0gbV9j
bGllbnQuc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwg
c3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIHVwZGF0ZVNjcm9sbFNu
YXBBbmltYXRpbmdTdGF0ZSAtIGlzQW5pbWF0aW9uQ29tcGxldGUgIiA8PCBpc0FuaW1hdGlvbkNv
bXBsZXRlIDw8ICIgY3VycmVudE9mZnNldCAiIDw8IGN1cnJlbnRPZmZzZXQgPDwgIiAobWFpbiB0
aHJlYWQgIiA8PCBpc01haW5UaHJlYWQoKSA8PCAiKSIpOwotCi0gICAgbV9jbGllbnQuaW1tZWRp
YXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhGbG9hdFNpemUoYW5pbWF0
aW9uT2Zmc2V0LngoKSAtIGN1cnJlbnRPZmZzZXQueCgpLCBhbmltYXRpb25PZmZzZXQueSgpIC0g
Y3VycmVudE9mZnNldC55KCkpKTsKLSAgICBpZiAoaXNBbmltYXRpb25Db21wbGV0ZSkgewotICAg
ICAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlvblRvRGVzdGluYXRpb25SZWFjaGVkU3Rh
dGUoKTsKLSAgICAgICAgc3RvcFNjcm9sbFNuYXBBbmltYXRpb24oKTsKLSAgICB9Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxl
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxpbmdFZmZlY3RzQ29udHJv
bGxlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NzExOTRlOTdmNTU4MmFiNmE3YmE2OWQwYzkzYTdjMTAyZWJk
ZWJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsNzg4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNjcm9sbGluZ0VmZmVjdHNDb250cm9s
bGVyLmgiCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgorI2ltcG9ydCAiV2hlZWxFdmVudFRlc3RNb25pdG9yLmgiCisjaW1wb3J0IDxwYWwvc3Bp
L21hYy9OU1Njcm9sbFZpZXdTUEkuaD4KKyNpbXBvcnQgPHN5cy9zeXNjdGwuaD4KKyNpbXBvcnQg
PHN5cy90aW1lLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKKyNpZiBQTEFU
Rk9STShNQUMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKK3N0YXRpYyBjb25zdCBTZWNvbmRzIHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQg
PSAxMDBfbXM7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJl
dGNoUmF0aW8gPSAxOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWly
ZWREZWx0YUJlZm9yZVN0cmV0Y2ggPSAxMDsKKyNlbmRpZgorCitzdGF0aWMgZmxvYXQgZWxhc3Rp
Y0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGluaXRpYWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlhbFZl
bG9jaXR5LCBTZWNvbmRzIGVsYXBzZWRUaW1lKQoreworICAgIHJldHVybiBfTlNFbGFzdGljRGVs
dGFGb3JUaW1lRGVsdGEoaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsVmVsb2NpdHksIGVsYXBzZWRU
aW1lLnNlY29uZHMoKSk7Cit9CisKK3N0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JSZWJvdW5k
RGVsdGEoZmxvYXQgZGVsdGEpCit7CisgICAgcmV0dXJuIF9OU0VsYXN0aWNEZWx0YUZvclJlYm91
bmREZWx0YShkZWx0YSk7Cit9CisKK3N0YXRpYyBmbG9hdCByZWJvdW5kRGVsdGFGb3JFbGFzdGlj
RGVsdGEoZmxvYXQgZGVsdGEpCit7CisgICAgcmV0dXJuIF9OU1JlYm91bmREZWx0YUZvckVsYXN0
aWNEZWx0YShkZWx0YSk7Cit9CisKK3N0YXRpYyBmbG9hdCBzY3JvbGxXaGVlbE11bHRpcGxpZXIo
KQoreworICAgIHN0YXRpYyBmbG9hdCBtdWx0aXBsaWVyID0gLTE7CisgICAgaWYgKG11bHRpcGxp
ZXIgPCAwKSB7CisgICAgICAgIG11bHRpcGxpZXIgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXSBmbG9hdEZvcktleTpAIk5TU2Nyb2xsV2hlZWxNdWx0aXBsaWVyIl07Cisg
ICAgICAgIGlmIChtdWx0aXBsaWVyIDw9IDApCisgICAgICAgICAgICBtdWx0aXBsaWVyID0gMTsK
KyAgICB9CisgICAgcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK1Njcm9sbGluZ0VmZmVjdHNDb250
cm9sbGVyOjp+U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIoKQoreworICAgIEFTU0VSVChtX3Rp
bWVyc1dlcmVTdG9wcGVkKTsKK30KKwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6
c3RvcEFsbFRpbWVycygpCit7CisgICAgaWYgKG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1l
cikKKyAgICAgICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyLT5zdG9wKCk7CisKKyNp
ZiBBU1NFUlRfRU5BQkxFRAorICAgIG1fdGltZXJzV2VyZVN0b3BwZWQgPSB0cnVlOworI2VuZGlm
Cit9CisKK2Jvb2wgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGlmIChwcm9jZXNz
V2hlZWxFdmVudEZvclNjcm9sbFNuYXAod2hlZWxFdmVudCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZTo6TWF5QmVnaW4gfHwgd2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlOjpDYW5jZWxsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh3aGVlbEV2
ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkJlZ2FuKSB7CisgICAgICAg
IC8vIEZJWE1FOiBUcnlpbmcgdG8gZGVjaWRlIGlmIGEgZ2VzdHVyZSBpcyBob3Jpem9udGFsIG9y
IHZlcnRpY2FsIGF0IHRoZSAiYmVnYW4iIHBoYXNlIGlzIHZlcnkgZXJyb3ItcHJvbmUuCisgICAg
ICAgIGF1dG8gZGlyZWN0aW9uID0gZGlyZWN0aW9uRnJvbUV2ZW50KHdoZWVsRXZlbnQsIFNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CisgICAgICAgIGlmIChkaXJlY3Rpb24gJiYgbV9jbGll
bnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUoLXdoZWVsRXZlbnQuZGVsdGFYKCks
IDApKSAmJiAhc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKGRpcmVjdGlvbi52YWx1ZSgpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBkaXJlY3Rpb24gPSBkaXJlY3Rp
b25Gcm9tRXZlbnQod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CisgICAg
ICAgIGlmIChkaXJlY3Rpb24gJiYgbV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9h
dFNpemUoMCwgLXdoZWVsRXZlbnQuZGVsdGFZKCkpKSAmJiAhc2hvdWxkUnViYmVyQmFuZEluRGly
ZWN0aW9uKGRpcmVjdGlvbi52YWx1ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICBtX2ln
bm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9s
bFRpbWVzdGFtcCA9IHsgfTsKKyAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0geyB9OworCisg
ICAgICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fY2xpZW50LnN0cmV0Y2hBbW91bnQoKTsK
KyAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRhRm9yRWxh
c3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQud2lkdGgoKSkpOworICAgICAgICBtX3N0cmV0Y2hTY3Jv
bGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91
bnQuaGVpZ2h0KCkpKTsKKyAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0geyB9OworCisg
ICAgICAgIHN0b3BTbmFwUnViYmVyYmFuZEFuaW1hdGlvbigpOworICAgICAgICB1cGRhdGVSdWJi
ZXJCYW5kaW5nU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYg
KHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQpIHsK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgdHJpZ2dlcnMgdGhlIHJ1YmJlcmJhbmQgdGltZXIgZXZl
biB3aGVuIHdlIGRvbid0IHN0YXJ0IHJ1YmJlcmJhbmRpbmcuCisgICAgICAgIHNuYXBSdWJiZXJC
YW5kKCk7CisgICAgICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGlzTW9tZW50dW1TY3JvbGxFdmVudCA9ICh3aGVl
bEV2ZW50Lm1vbWVudHVtUGhhc2UoKSAhPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Tm9uZSk7
CisgICAgaWYgKG1faWdub3JlTW9tZW50dW1TY3JvbGxzICYmIChpc01vbWVudHVtU2Nyb2xsRXZl
bnQgfHwgbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQpKSB7CisgICAgICAgIGlmICh3aGVlbEV2ZW50
Lm1vbWVudHVtUGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQpIHsKKyAg
ICAgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc01vbWVudHVtU2Nyb2xsRXZl
bnQgJiYgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZmxvYXQgZGVsdGFYID0gbV9v
dmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCk7CisgICAgZmxvYXQgZGVsdGFZID0gbV9vdmVyZmxv
d1Njcm9sbERlbHRhLmhlaWdodCgpOworCisgICAgLy8gUmVzZXQgb3ZlcmZsb3cgdmFsdWVzIGJl
Y2F1c2Ugd2UgbWF5IGRlY2lkZSB0byByZW1vdmUgZGVsdGEgYXQgdmFyaW91cyBwb2ludHMgYW5k
IHB1dCBpdCBpbnRvIG92ZXJmbG93LgorICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IHsgfTsK
KworICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fY2xpZW50LnN0cmV0Y2hBbW91bnQoKTsK
KyAgICBib29sIGlzVmVydGljYWxseVN0cmV0Y2hlZCA9IHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCk7
CisgICAgYm9vbCBpc0hvcml6b250YWxseVN0cmV0Y2hlZCA9IHN0cmV0Y2hBbW91bnQud2lkdGgo
KTsKKworICAgIGZsb2F0IGV2ZW50Q29hbGVzY2VkRGVsdGFYOworICAgIGZsb2F0IGV2ZW50Q29h
bGVzY2VkRGVsdGFZOworCisgICAgaWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCB8fCBpc0hvcml6
b250YWxseVN0cmV0Y2hlZCkgeworICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWCA9IC13aGVl
bEV2ZW50LnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgoKTsKKyAgICAgICAgZXZlbnRDb2Fs
ZXNjZWREZWx0YVkgPSAtd2hlZWxFdmVudC51bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVu
dC5kZWx0YVgoKTsKKyAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVkgPSAtd2hlZWxFdmVudC5k
ZWx0YVkoKTsKKyAgICB9CisKKyAgICBkZWx0YVggKz0gZXZlbnRDb2FsZXNjZWREZWx0YVg7Cisg
ICAgZGVsdGFZICs9IGV2ZW50Q29hbGVzY2VkRGVsdGFZOworCisgICAgLy8gU2xpZ2h0bHkgcHJl
ZmVyIHNjcm9sbGluZyB2ZXJ0aWNhbGx5IGJ5IGFwcGx5aW5nIHRoZSA9IGNhc2UgdG8gZGVsdGFZ
CisgICAgLy8gRklYTUU6IFVzZSB3aGVlbERlbHRhQmlhc2luZ1Rvd2FyZHNWZXJ0aWNhbCgpLgor
ICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpCisgICAgICAgIGRlbHRhWCA9
IDA7CisgICAgZWxzZQorICAgICAgICBkZWx0YVkgPSAwOworCisgICAgYm9vbCBzaG91bGRTdHJl
dGNoID0gZmFsc2U7CisKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBtb21lbnR1bVBoYXNl
ID0gd2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCk7CisKKyAgICAvLyBJZiB3ZSBhcmUgc3RhcnRp
bmcgbW9tZW50dW0gc2Nyb2xsaW5nIHRoZW4gZG8gc29tZSBzZXR1cC4KKyAgICBpZiAoIW1fbW9t
ZW50dW1TY3JvbGxJblByb2dyZXNzICYmIChtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlOjpCZWdhbiB8fCBtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlOjpDaGFuZ2VkKSkKKyAgICAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSB0cnVl
OworCisgICAgYXV0byB0aW1lRGVsdGEgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpIC0gbV9sYXN0
TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7CisgICAgaWYgKG1faW5TY3JvbGxHZXN0dXJlIHx8IG1f
bW9tZW50dW1TY3JvbGxJblByb2dyZXNzKSB7CisgICAgICAgIGlmIChtX2xhc3RNb21lbnR1bVNj
cm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVsdGEgPiAwX3MgJiYgdGltZURlbHRhIDwgc2Nyb2xsVmVs
b2NpdHlaZXJvaW5nVGltZW91dCkgeworICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNl
dFdpZHRoKGV2ZW50Q29hbGVzY2VkRGVsdGFYIC8gdGltZURlbHRhLnNlY29uZHMoKSk7CisgICAg
ICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkuc2V0SGVpZ2h0KGV2ZW50Q29hbGVzY2VkRGVsdGFZ
IC8gdGltZURlbHRhLnNlY29uZHMoKSk7CisgICAgICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9s
bFRpbWVzdGFtcCA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IHdoZWVsRXZlbnQudGlt
ZXN0YW1wKCk7CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1ZlcnRpY2FsbHlTdHJldGNoZWQpIHsKKyAgICAg
ICAgICAgIGlmICghaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgJiYgbV9jbGllbnQuaXNQaW5uZWRG
b3JTY3JvbGxEZWx0YShGbG9hdFNpemUoZGVsdGFYLCAwKSkpIHsKKyAgICAgICAgICAgICAgICAv
LyBTdHJldGNoaW5nIG9ubHkgaW4gdGhlIHZlcnRpY2FsLgorICAgICAgICAgICAgICAgIGlmIChk
ZWx0YVkgJiYgKGZhYnNmKGRlbHRhWCAvIGRlbHRhWSkgPCBydWJiZXJiYW5kRGlyZWN0aW9uTG9j
a1N0cmV0Y2hSYXRpbykpCisgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVsdGFYKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWly
ZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Nj
cm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFY
KTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1f
b3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChpc0hvcml6b250YWxseVN0cmV0Y2hlZCkgeworICAgICAgICAgICAg
Ly8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSBob3Jpem9udGFsLgorICAgICAgICAgICAgaWYgKG1f
Y2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKDAsIGRlbHRhWSkpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGRlbHRhWCAmJiAoZmFic2YoZGVsdGFZIC8gZGVsdGFYKSA8IHJ1
YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJhdGlvKSkKKyAgICAgICAgICAgICAgICAgICAg
ZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmYWJzZihkZWx0YVkpIDwgcnVi
YmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgeworICAgICAgICAgICAg
ICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVpZ2h0KG1fb3ZlcmZsb3dTY3JvbGxE
ZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dT
Y3JvbGxEZWx0YS5zZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVs
dGFZKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5v
dCBzdHJldGNoaW5nIGF0IGFsbCB5ZXQuCisgICAgICAgICAgICBpZiAobV9jbGllbnQuaXNQaW5u
ZWRGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUoZGVsdGFYLCBkZWx0YVkpKSkgeworICAgICAgICAg
ICAgICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVs
dGFCZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Ny
b2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgp
OworICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEu
c2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dzSG9yaXpv
bnRhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpCisgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9
IDA7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmFsbG93c1ZlcnRpY2FsU3RyZXRj
aGluZyh3aGVlbEV2ZW50KSkKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKworICAg
ICAgICAgICAgICAgIHNob3VsZFN0cmV0Y2ggPSBkZWx0YVggfHwgZGVsdGFZOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3Ry
ZWFtIDw8ICJTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudCgpIC0g
ZGVsdGFYICIgPDwgZGVsdGFYIDw8ICIgZGVsdGFZICIgPDwgZGVsdGFZIDw8ICIgcGlubmVkICIg
PDwgbV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUoZGVsdGFYLCBkZWx0
YVkpKSA8PCAiIHNob3VsZFN0cmV0Y2ggIiA8PCBzaG91bGRTdHJldGNoKTsKKyAgICB9CisKKyAg
ICBib29sIGhhbmRsZWQgPSB0cnVlOworCisgICAgaWYgKGRlbHRhWCB8fCBkZWx0YVkpIHsKKyAg
ICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwgaXNI
b3Jpem9udGFsbHlTdHJldGNoZWQpKSB7CisgICAgICAgICAgICBpZiAoZGVsdGFZKSB7CisgICAg
ICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOworICAgICAgICAg
ICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5KEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWx0YVgpIHsKKyAgICAgICAgICAgICAg
ICBkZWx0YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7CisgICAgICAgICAgICAgICAgbV9j
bGllbnQuaW1tZWRpYXRlU2Nyb2xsQnkoRmxvYXRTaXplKGRlbHRhWCwgMCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGRlbHRhWCkgeworICAgICAg
ICAgICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcod2hlZWxF
dmVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAwOworICAgICAgICAgICAgICAgICAgICBoYW5k
bGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNIb3Jpem9udGFsbHlT
dHJldGNoZWQgJiYgIW1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKGRl
bHRhWCwgMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11
bHRpcGxpZXIoKTsKKworICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3Jv
bGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZShkZWx0YVgsIDApKTsK
KyAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkZWx0YVkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1fY2xpZW50LmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyh3aGVlbEV2ZW50KSkgeworICAg
ICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAgICAgICAgICBldmVudENv
YWxlc2NlZERlbHRhWSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1ZlcnRpY2FsbHlTdHJldGNoZWQgJiYgIW1f
Y2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKDAsIGRlbHRhWSkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKwor
ICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250
ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fY2xpZW50LnN0cmV0Y2hBbW91bnQo
KTsKKworICAgICAgICAgICAgaWYgKG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKSB7CisgICAg
ICAgICAgICAgICAgaWYgKChtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6
ZShldmVudENvYWxlc2NlZERlbHRhWCwgZXZlbnRDb2FsZXNjZWREZWx0YVkpKSB8fCAoZmFic2Yo
ZXZlbnRDb2FsZXNjZWREZWx0YVgpICsgZmFic2YoZXZlbnRDb2FsZXNjZWREZWx0YVkpIDw9IDAp
KSAmJiBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCkgeworICAgICAgICAgICAgICAgICAg
ICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1f
bW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNu
YXBSdWJiZXJCYW5kKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZS53aWR0aCgpICsgZGVsdGFYKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNl
dEhlaWdodChtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSArIGRlbHRhWSk7CisKKyAgICAg
ICAgICAgIEZsb2F0U2l6ZSBkYW1wZWREZWx0YShjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5k
RGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFG
b3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkpKSk7CisKKyAgICAg
ICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3Ry
YWludHMoZGFtcGVkRGVsdGEgLSBzdHJldGNoQW1vdW50KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiBtb21lbnR1bVBoYXNlID09IFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZCkgeworICAgICAgICBtX21vbWVudHVtU2Nyb2xs
SW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZh
bHNlOworICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IHsgfTsKKyAgICB9
CisKKyAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKKworICAgIHJldHVybiBoYW5kbGVk
OworfQorCitGbG9hdFNpemUgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OndoZWVsRGVsdGFC
aWFzaW5nVG93YXJkc1ZlcnRpY2FsKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVu
dCkKK3sKKyAgICBhdXRvIGRlbHRhWCA9IHdoZWVsRXZlbnQuZGVsdGFYKCk7CisgICAgYXV0byBk
ZWx0YVkgPSB3aGVlbEV2ZW50LmRlbHRhWSgpOworCisgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0g
ZmFic2YoZGVsdGFYKSkKKyAgICAgICAgZGVsdGFYID0gMDsKKyAgICBlbHNlCisgICAgICAgIGRl
bHRhWSA9IDA7CisKKyAgICByZXR1cm4geyBkZWx0YVgsIGRlbHRhWSB9OworfQorCitzdGQ6Om9w
dGlvbmFsPFNjcm9sbERpcmVjdGlvbj4gU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OmRpcmVj
dGlvbkZyb21FdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIHN0ZDo6
b3B0aW9uYWw8U2Nyb2xsRXZlbnRBeGlzPiBheGlzLCBXaGVlbEF4aXNCaWFzIGJpYXMpCit7Cisg
ICAgLy8gRklYTUU6IEl0J3MgaW1wb3NzaWJsZSB0byBpbmZlciBkaXJlY3Rpb24gZnJvbSBhIHNp
bmdsZSBldmVudCwgc2luY2UgdGhlIHN0YXJ0IG9mIGEgZ2VzdHVyZSBpcyBlaXRoZXIgemVybyBv
cgorICAgIC8vIGhhcyBzbWFsbCBkZWx0YXMgb24gYm90aCBheGVzLgorCisgICAgYXV0byB3aGVl
bERlbHRhID0gRmxvYXRTaXplIHsgd2hlZWxFdmVudC5kZWx0YVgoKSwgd2hlZWxFdmVudC5kZWx0
YVkoKSB9OworICAgIGlmIChiaWFzID09IFdoZWVsQXhpc0JpYXM6OlZlcnRpY2FsKQorICAgICAg
ICB3aGVlbERlbHRhID0gd2hlZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwod2hlZWxFdmVu
dCk7CisKKyAgICBpZiAoYXhpcykgeworICAgICAgICBzd2l0Y2ggKGF4aXMudmFsdWUoKSkgewor
ICAgICAgICBjYXNlIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWw6CisgICAgICAgICAgICBpZiAo
d2hlZWxEZWx0YS5oZWlnaHQoKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbERv
d247CisKKyAgICAgICAgICAgIGlmICh3aGVlbERlbHRhLmhlaWdodCgpID4gMCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gU2Nyb2xsVXA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbDoKKyAgICAgICAgICAgIGlmICh3aGVlbERl
bHRhLndpZHRoKCkgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiBTY3JvbGxMZWZ0OworCisg
ICAgICAgICAgICBpZiAod2hlZWxEZWx0YS53aWR0aCgpIDwgMCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gU2Nyb2xsUmlnaHQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH0KKworICAgIC8vIENoZWNrIFkgZmlyc3QgYmVjYXVzZSB2ZXJ0aWNhbCBzY3Jv
bGxpbmcgZG9taW5hdGVzLgorICAgIGlmICh3aGVlbERlbHRhLmhlaWdodCgpIDwgMCkKKyAgICAg
ICAgcmV0dXJuIFNjcm9sbERvd247CisKKyAgICBpZiAod2hlZWxEZWx0YS5oZWlnaHQoKSA+IDAp
CisgICAgICAgIHJldHVybiBTY3JvbGxVcDsKKworICAgIGlmICh3aGVlbERlbHRhLndpZHRoKCkg
PiAwKQorICAgICAgICByZXR1cm4gU2Nyb2xsTGVmdDsKKworICAgIGlmICh3aGVlbERlbHRhLndp
ZHRoKCkgPCAwKQorICAgICAgICByZXR1cm4gU2Nyb2xsUmlnaHQ7CisKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorc3RhdGljIGlubGlu
ZSBmbG9hdCByb3VuZFRvd2FyZFplcm8oZmxvYXQgbnVtKQoreworICAgIHJldHVybiBudW0gPiAw
ID8gY2VpbGYobnVtIC0gMC41ZikgOiBmbG9vcmYobnVtICsgMC41Zik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgZmxvYXQgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhmbG9hdCBudW0pCit7Cisg
ICAgZmxvYXQgcm91bmRlZE51bSA9IHJvdW5kZihudW0pOworICAgIGlmIChmYWJzKG51bSAtIHJv
dW5kZWROdW0pIDwgMC4xMjUpCisgICAgICAgIG51bSA9IHJvdW5kZWROdW07CisKKyAgICByZXR1
cm4gcm91bmRUb3dhcmRaZXJvKG51bSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRy
b2xsZXI6OnVwZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lIGN1cnJl
bnRUaW1lKQoreworICAgIGlmICghbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNjcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyOjp1cGRhdGVSdWJiZXJCYW5kQW5pbWF0aW5nU3RhdGUoKSAt
IG1haW4gdGhyZWFkICIgPDwgaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX21vbWVudHVt
U2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykgeworICAgICAgICBh
dXRvIHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gbV9zdGFydFRpbWU7CisKKyAgICAgICAgaWYg
KG1fc3RhcnRTdHJldGNoLmlzWmVybygpKSB7CisgICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9
IG1fY2xpZW50LnN0cmV0Y2hBbW91bnQoKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRj
aCA9PSBGbG9hdFNpemUoKSkgeworICAgICAgICAgICAgICAgIHN0b3BSdWJiZXJiYW5kaW5nKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBt
X29yaWdWZWxvY2l0eSA9IG1fbW9tZW50dW1WZWxvY2l0eTsKKworICAgICAgICAgICAgLy8gSnVz
dCBsaWtlIG5vcm1hbCBzY3JvbGxpbmcsIHByZWZlciB2ZXJ0aWNhbCBydWJiZXJiYW5kaW5nCisg
ICAgICAgICAgICBpZiAoZmFic2YobV9vcmlnVmVsb2NpdHkuaGVpZ2h0KCkpID49IGZhYnNmKG1f
b3JpZ1ZlbG9jaXR5LndpZHRoKCkpKQorICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNl
dFdpZHRoKDApOworCisgICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCBob3Jpem9udGFs
bHkgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2Nyb2xsIGhvcml6b250YWxseQorICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5hbGxvd3NIb3Jpem9udGFsU2Nyb2xsaW5nKCkpCisgICAgICAgICAg
ICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0V2lkdGgoMCk7CisKKyAgICAgICAgICAgIC8vIERvbid0
IHJ1YmJlci1iYW5kIHZlcnRpY2FsbHkgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2Nyb2xsIHZl
cnRpY2FsbHkKKyAgICAgICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dzVmVydGljYWxTY3JvbGxp
bmcoKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRIZWlnaHQoMCk7CisgICAg
ICAgIH0KKworICAgICAgICBGbG9hdFBvaW50IGRlbHRhKHJvdW5kVG9EZXZpY2VQaXhlbFRvd2Fy
ZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNoLndpZHRoKCksIC1t
X29yaWdWZWxvY2l0eS53aWR0aCgpLCB0aW1lRGVsdGEpKSwKKyAgICAgICAgICAgIHJvdW5kVG9E
ZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJl
dGNoLmhlaWdodCgpLCAtbV9vcmlnVmVsb2NpdHkuaGVpZ2h0KCksIHRpbWVEZWx0YSkpKTsKKwor
ICAgICAgICBpZiAoZmFicyhkZWx0YS54KCkpID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEp
IHsKKyAgICAgICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRF
ZGdlQ29uc3RyYWludHMoRmxvYXRTaXplKGRlbHRhLngoKSwgZGVsdGEueSgpKSAtIG1fY2xpZW50
LnN0cmV0Y2hBbW91bnQoKSk7CisKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBuZXdTdHJldGNoID0g
bV9jbGllbnQuc3RyZXRjaEFtb3VudCgpOworCisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxG
b3JjZS5zZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC53aWR0
aCgpKSk7CisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3Vu
ZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2guaGVpZ2h0KCkpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG1fY2xpZW50LmFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJ
Zk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgc3RvcFJ1YmJlcmJhbmRpbmcoKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fc3RhcnRUaW1lID0gY3VycmVudFRpbWU7CisgICAg
ICAgIG1fc3RhcnRTdHJldGNoID0geyB9OworICAgICAgICBpZiAoIWlzUnViYmVyQmFuZEluUHJv
Z3Jlc3NJbnRlcm5hbCgpKQorICAgICAgICAgICAgc3RvcFNuYXBSdWJiZXJiYW5kQW5pbWF0aW9u
KCk7CisgICAgfQorCisgICAgdXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7Cit9CisjZW5kaWYK
Kwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
KCkKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgdXBkYXRlUnViYmVyQmFuZGlu
Z1N0YXRlKCk7CisjZW5kaWYKK30KKworYm9vbCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6
aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5TY3JvbGxH
ZXN0dXJlOworfQorCitib29sIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjppc1J1YmJlckJh
bmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAg
cmV0dXJuIG1faXNSdWJiZXJCYW5kaW5nOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKK30KKworYm9vbCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6aXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcygpIGNvbnN0Cit7CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9pblNjcm9sbEdlc3R1cmUgfHwgbV9tb21lbnR1bVNj
cm9sbEluUHJvZ3Jlc3MgfHwgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXApCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyOjpzdG9wUnViYmVyYmFuZGluZygpCit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQorICAgIHN0b3BTbmFwUnViYmVyYmFuZEFuaW1hdGlvbigpOworICAgIG1fc3RyZXRjaFNj
cm9sbEZvcmNlID0geyB9OworICAgIG1fc3RhcnRUaW1lID0geyB9OworICAgIG1fc3RhcnRTdHJl
dGNoID0geyB9OworICAgIG1fb3JpZ1ZlbG9jaXR5ID0geyB9OworICAgIHVwZGF0ZVJ1YmJlckJh
bmRpbmdTdGF0ZSgpOworI2VuZGlmCit9CisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCit2
b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdGFydFJ1YmJlcmJhbmRBbmltYXRpb24o
KQoreworICAgIG1fY2xpZW50LndpbGxTdGFydFJ1YmJlckJhbmRTbmFwQW5pbWF0aW9uKCk7CisK
KyAgICBzZXRJc0FuaW1hdGluZ1J1YmJlckJhbmQodHJ1ZSk7CisKKyAgICBtX2NsaWVudC5kZWZl
cldoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVs
RXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxF
dmVudFRlc3RNb25pdG9yOjpSdWJiZXJiYW5kSW5Qcm9ncmVzcyk7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0b3BTbmFwUnViYmVyYmFuZEFuaW1hdGlvbigpCit7Cisg
ICAgbV9jbGllbnQuZGlkU3RvcFJ1YmJlcmJhbmRTbmFwQW5pbWF0aW9uKCk7CisKKyAgICBzZXRJ
c0FuaW1hdGluZ1J1YmJlckJhbmQoZmFsc2UpOworCisgICAgbV9jbGllbnQucmVtb3ZlV2hlZWxF
dmVudFRlc3RDb21wbGV0aW9uRGVmZXJyYWxGb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVl
bEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVs
RXZlbnRUZXN0TW9uaXRvcjo6UnViYmVyYmFuZEluUHJvZ3Jlc3MpOworfQorCit2b2lkIFNjcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyOjpzbmFwUnViYmVyQmFuZCgpCit7CisgICAgYXV0byB0aW1l
RGVsdGEgPSBXYWxsVGltZTo6bm93KCkgLSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsK
KyAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID49IHNj
cm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCisgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9
IHsgfTsKKworICAgIGlmIChtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBtX3N0YXJ0
U3RyZXRjaCA9IHsgfTsKKyAgICBtX29yaWdWZWxvY2l0eSA9IHsgfTsKKworICAgIHN0YXJ0UnVi
YmVyYmFuZEFuaW1hdGlvbigpOworfQorCitib29sIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
OjpzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFsRGlyZWN0aW9uKGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYgd2hlZWxFdmVudCkgY29uc3QKK3sKKyAgICBhdXRvIGRpcmVjdGlvbiA9IGRpcmVj
dGlvbkZyb21FdmVudCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwor
ICAgIGlmIChkaXJlY3Rpb24pCisgICAgICAgIHJldHVybiBzaG91bGRSdWJiZXJCYW5kSW5EaXJl
Y3Rpb24oZGlyZWN0aW9uLnZhbHVlKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihT
Y3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAoreworICAgIHJldHVybiBtX2NsaWVudC5z
aG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oZGlyZWN0aW9uKTsKK30KKworYm9vbCBTY3JvbGxp
bmdFZmZlY3RzQ29udHJvbGxlcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVybmFsKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1faW5TY3JvbGxHZXN0dXJlICYmICFtX21vbWVudHVtU2Nyb2xsSW5Q
cm9ncmVzcyAmJiAhbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiAhbV9jbGllbnQuc3RyZXRjaEFtb3VudCgpLmlzWmVybygpOworfQor
Cit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1cGRhdGVSdWJiZXJCYW5kaW5nU3Rh
dGUoKQoreworICAgIGJvb2wgaXNSdWJiZXJCYW5kaW5nID0gaXNSdWJiZXJCYW5kSW5Qcm9ncmVz
c0ludGVybmFsKCk7CisgICAgaWYgKGlzUnViYmVyQmFuZGluZyA9PSBtX2lzUnViYmVyQmFuZGlu
ZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1J1YmJlckJhbmRpbmcgPSBpc1J1YmJlckJh
bmRpbmc7CisgICAgaWYgKG1faXNSdWJiZXJCYW5kaW5nKQorICAgICAgICB1cGRhdGVSdWJiZXJC
YW5kaW5nRWRnZXMobV9jbGllbnQuc3RyZXRjaEFtb3VudCgpKTsKKyAgICBlbHNlCisgICAgICAg
IG1fcnViYmVyQmFuZGluZ0VkZ2VzID0geyB9OworCisgICAgbV9jbGllbnQucnViYmVyQmFuZGlu
Z1N0YXRlQ2hhbmdlZChtX2lzUnViYmVyQmFuZGluZyk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZm
ZWN0c0NvbnRyb2xsZXI6OnVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdlcyhJbnRTaXplIGNsaWVudFN0
cmV0Y2gpCit7CisgICAgbV9ydWJiZXJCYW5kaW5nRWRnZXMuc2V0TGVmdChjbGllbnRTdHJldGNo
LndpZHRoKCkgPCAwKTsKKyAgICBtX3J1YmJlckJhbmRpbmdFZGdlcy5zZXRSaWdodChjbGllbnRT
dHJldGNoLndpZHRoKCkgPiAwKTsKKworICAgIG1fcnViYmVyQmFuZGluZ0VkZ2VzLnNldFRvcChj
bGllbnRTdHJldGNoLmhlaWdodCgpIDwgMCk7CisgICAgbV9ydWJiZXJCYW5kaW5nRWRnZXMuc2V0
Qm90dG9tKGNsaWVudFN0cmV0Y2guaGVpZ2h0KCkgPiAwKTsKK30KKworI2VuZGlmIC8vIEVOQUJM
RShSVUJCRVJfQkFORElORykKKworZW51bSBjbGFzcyBXaGVlbEV2ZW50U3RhdHVzIHsKKyAgICBV
c2VyU2Nyb2xsQmVnaW4sCisgICAgVXNlclNjcm9sbGluZywKKyAgICBVc2VyU2Nyb2xsRW5kLAor
ICAgIE1vbWVudHVtU2Nyb2xsQmVnaW4sCisgICAgTW9tZW50dW1TY3JvbGxpbmcsCisgICAgTW9t
ZW50dW1TY3JvbGxFbmQsCisgICAgU3RhdGVsZXNzU2Nyb2xsRXZlbnQsCisgICAgVW5rbm93bgor
fTsKKworc3RhdGljIGlubGluZSBXaGVlbEV2ZW50U3RhdHVzIHRvV2hlZWxFdmVudFN0YXR1cyhQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSwgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9t
ZW50dW1QaGFzZSkKK3sKKyAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6
Ok5vbmUpIHsKKyAgICAgICAgc3dpdGNoIChtb21lbnR1bVBoYXNlKSB7CisgICAgICAgIGNhc2Ug
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkJlZ2FuOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVs
RXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsQmVnaW47CisgICAgICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNoYW5nZWQ6CisgICAgICAgICAgICBy
ZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxpbmc7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkOgorICAgICAg
ICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsRW5kOworCisgICAg
ICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok5vbmU6CisgICAgICAgICAgICByZXR1
cm4gV2hlZWxFdmVudFN0YXR1czo6U3RhdGVsZXNzU2Nyb2xsRXZlbnQ7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOworICAg
ICAgICB9CisgICAgfQorICAgIGlmIChtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlOjpOb25lKSB7CisgICAgICAgIHN3aXRjaCAocGhhc2UpIHsKKyAgICAgICAgY2FzZSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW46CisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U6Ok1heUJlZ2luOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0
dXM6OlVzZXJTY3JvbGxCZWdpbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2hhbmdlZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2
ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNl
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZDoKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZTo6Q2FuY2VsbGVkOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRT
dGF0dXM6OlVzZXJTY3JvbGxFbmQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjsKK30KKworI2lm
ICFMT0dfRElTQUJMRUQKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBXaGVlbEV2ZW50U3RhdHVzIHN0YXR1cykKK3sKKyAgICBzd2l0Y2ggKHN0YXR1cykgewor
ICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOiB0cyA8PCAiVXNlclNj
cm9sbEJlZ2luIjsgYnJlYWs7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xs
aW5nOiB0cyA8PCAiVXNlclNjcm9sbGluZyI7IGJyZWFrOworICAgIGNhc2UgV2hlZWxFdmVudFN0
YXR1czo6VXNlclNjcm9sbEVuZDogdHMgPDwgIlVzZXJTY3JvbGxFbmQiOyBicmVhazsKKyAgICBj
YXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsQmVnaW46IHRzIDw8ICJNb21lbnR1
bVNjcm9sbEJlZ2luIjsgYnJlYWs7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1
bVNjcm9sbGluZzogdHMgPDwgIk1vbWVudHVtU2Nyb2xsaW5nIjsgYnJlYWs7CisgICAgY2FzZSBX
aGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbEVuZDogdHMgPDwgIk1vbWVudHVtU2Nyb2xs
RW5kIjsgYnJlYWs7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpTdGF0ZWxlc3NTY3JvbGxF
dmVudDogdHMgPDwgIlN0YXRlbGVzc1Njcm9sbEV2ZW50IjsgYnJlYWs7CisgICAgY2FzZSBXaGVl
bEV2ZW50U3RhdHVzOjpVbmtub3duOiB0cyA8PCAiVW5rbm93biI7IGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gdHM7Cit9CisjZW5kaWYKKworYm9vbCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxl
cjo6c2hvdWxkT3ZlcnJpZGVNb21lbnR1bVNjcm9sbGluZygpIGNvbnN0Cit7CisgICAgaWYgKCF1
c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTY3JvbGxTbmFw
U3RhdGUgc2Nyb2xsU25hcFN0YXRlID0gbV9zY3JvbGxTbmFwU3RhdGUtPmN1cnJlbnRTdGF0ZSgp
OworICAgIHJldHVybiBzY3JvbGxTbmFwU3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5n
IHx8IHNjcm9sbFNuYXBTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkRlc3RpbmF0aW9uUmVhY2hl
ZDsKK30KKwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2NoZWR1bGVTdGF0ZWxl
c3NTY3JvbGxTbmFwKCkKK3sKKyAgICBzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpOworICAgIGlm
IChtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXIpIHsKKyAgICAgICAgbV9zdGF0ZWxlc3NT
bmFwVHJhbnNpdGlvblRpbWVyLT5zdG9wKCk7CisgICAgICAgIG1fc3RhdGVsZXNzU25hcFRyYW5z
aXRpb25UaW1lciA9IG51bGxwdHI7CisgICAgfQorICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgc3RhdGVsZXNzU2Ny
b2xsU25hcERlbGF5ID0gNzUwX21zOworICAgIG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1l
ciA9IG1fY2xpZW50LmNyZWF0ZVRpbWVyKFt0aGlzXSB7CisgICAgICAgIHN0YXRlbGVzc1NuYXBU
cmFuc2l0aW9uVGltZXJGaXJlZCgpOworICAgIH0pOworICAgIG1fc3RhdGVsZXNzU25hcFRyYW5z
aXRpb25UaW1lci0+c3RhcnRPbmVTaG90KHN0YXRlbGVzc1Njcm9sbFNuYXBEZWxheSk7CisgICAg
c3RhcnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5n
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0YXRlbGVzc1NuYXBU
cmFuc2l0aW9uVGltZXJGaXJlZCgpCit7CisgICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRp
bWVyID0gbnVsbHB0cjsKKworICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnRyYW5zaXRpb25Ub1NuYXBBbmltYXRpb25T
dGF0ZShtX2NsaWVudC5zY3JvbGxFeHRlbnQoKSwgbV9jbGllbnQudmlld3BvcnRTaXplKCksIG1f
Y2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpLCBtX2NsaWVudC5zY3JvbGxPZmZzZXQoKSk7CisgICAg
c3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0Nv
bnRyb2xsZXI6OnN0YXJ0RGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVlVG9TY3Jv
bGxTbmFwcGluZygpCit7CisgICAgbV9jbGllbnQuZGVmZXJXaGVlbEV2ZW50VGVzdENvbXBsZXRp
b25Gb3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9s
bGFibGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xs
U25hcEluUHJvZ3Jlc3MpOworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpz
dG9wRGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygp
Cit7CisgICAgbV9jbGllbnQucmVtb3ZlV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRGVmZXJyYWxG
b3JSZWFzb24ocmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFi
bGVBcmVhSWRlbnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsU25h
cEluUHJvZ3Jlc3MpOworfQorCitib29sIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpwcm9j
ZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVl
bEV2ZW50KQoreworICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKG1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKS5pc0VtcHR5KCkgJiYgbV9zY3JvbGxTbmFwU3RhdGUt
PnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gc3RhdHVzID0gdG9XaGVlbEV2ZW50
U3RhdHVzKHdoZWVsRXZlbnQucGhhc2UoKSwgd2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkpOwor
CisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsaW5nRWZm
ZWN0c0NvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxT
bmFwOiBzdGF0dXMgIiA8PCBzdGF0dXMpOworCisgICAgYm9vbCBpc01vbWVudHVtU2Nyb2xsaW5n
ID0gZmFsc2U7CisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0
dXM6OlVzZXJTY3JvbGxCZWdpbjoKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3Jv
bGxpbmc6CisgICAgICAgIHN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCk7CisgICAgICAgIG1fc2Ny
b2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZSgpOworICAgICAg
ICBtX2RyYWdFbmRlZFNjcm9sbGluZ1ZlbG9jaXR5ID0gLXdoZWVsRXZlbnQuc2Nyb2xsaW5nVmVs
b2NpdHkoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2Vy
U2Nyb2xsRW5kOgorICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlvblRvU25hcEFu
aW1hdGlvblN0YXRlKG1fY2xpZW50LnNjcm9sbEV4dGVudCgpLCBtX2NsaWVudC52aWV3cG9ydFNp
emUoKSwgbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCksIG1fY2xpZW50LnNjcm9sbE9mZnNldCgp
KTsKKyAgICAgICAgc3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxCZWdpbjoKKyAgICAgICAg
bV9zY3JvbGxTbmFwU3RhdGUtPnRyYW5zaXRpb25Ub0dsaWRlQW5pbWF0aW9uU3RhdGUobV9jbGll
bnQuc2Nyb2xsRXh0ZW50KCksIG1fY2xpZW50LnZpZXdwb3J0U2l6ZSgpLCBtX2NsaWVudC5wYWdl
U2NhbGVGYWN0b3IoKSwgbV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCksIG1fZHJhZ0VuZGVkU2Nyb2xs
aW5nVmVsb2NpdHksIEZsb2F0U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgoKSwgLXdoZWVsRXZlbnQu
ZGVsdGFZKCkpKTsKKyAgICAgICAgbV9kcmFnRW5kZWRTY3JvbGxpbmdWZWxvY2l0eSA9IHsgfTsK
KyAgICAgICAgaXNNb21lbnR1bVNjcm9sbGluZyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxpbmc6CisgICAgY2FzZSBXaGVl
bEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbEVuZDoKKyAgICAgICAgaXNNb21lbnR1bVNjcm9s
bGluZyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6
U3RhdGVsZXNzU2Nyb2xsRXZlbnQ6CisgICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0
aW9uVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZSgpOworICAgICAgICBzY2hlZHVsZVN0YXRlbGVzc1Nj
cm9sbFNuYXAoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpV
bmtub3duOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIGlzTW9tZW50dW1TY3JvbGxpbmcgJiYgc2hvdWxkT3ZlcnJpZGVN
b21lbnR1bVNjcm9sbGluZygpOworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
Ojp1cGRhdGVHZXN0dXJlSW5Qcm9ncmVzc1N0YXRlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYg
d2hlZWxFdmVudCkKK3sKKyAgICBpZiAod2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpIHx8IHdo
ZWVsRXZlbnQuaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpKQorICAgICAgICBtX2lu
U2Nyb2xsR2VzdHVyZSA9IHRydWU7CisgICAgZWxzZSBpZiAod2hlZWxFdmVudC5pc0VuZE9mTm9u
TW9tZW50dW1TY3JvbGwoKSB8fCB3aGVlbEV2ZW50LmlzR2VzdHVyZUNhbmNlbCgpIHx8IHdoZWVs
RXZlbnQuaXNFbmRPZk1vbWVudHVtU2Nyb2xsKCkpCisgICAgICAgIG1faW5TY3JvbGxHZXN0dXJl
ID0gZmFsc2U7CisKKyAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKK30KKwordm9pZCBT
Y3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCkKK3sK
KyAgICBpZiAobV9pc0FuaW1hdGluZ1Njcm9sbFNuYXApCisgICAgICAgIHJldHVybjsKKworICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyICIgPDwgdGhpcyA8PCAiIHN0YXJ0U2Nyb2xsU25hcEFuaW1hdGlvbiAobWFpbiB0
aHJlYWQgIiA8PCBpc01haW5UaHJlYWQoKSA8PCAiKSIpOworCisgICAgc3RhcnREZWZlcnJpbmdX
aGVlbEV2ZW50VGVzdENvbXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKCk7CisgICAgbV9jbGll
bnQud2lsbFN0YXJ0U2Nyb2xsU25hcEFuaW1hdGlvbigpOworICAgIHNldElzQW5pbWF0aW5nU2Ny
b2xsU25hcCh0cnVlKTsKK30KKwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3Rv
cFNjcm9sbFNuYXBBbmltYXRpb24oKQoreworICAgIGlmICghbV9pc0FuaW1hdGluZ1Njcm9sbFNu
YXApCisgICAgICAgIHJldHVybjsKKworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBz
dHJlYW0gPDwgIlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIHN0b3BT
Y3JvbGxTbmFwQW5pbWF0aW9uIChtYWluIHRocmVhZCAiIDw8IGlzTWFpblRocmVhZCgpIDw8ICIp
Iik7CisKKyAgICBzdG9wRGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVlVG9TY3Jv
bGxTbmFwcGluZygpOworICAgIG1fY2xpZW50LmRpZFN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCk7
CisKKyAgICBzZXRJc0FuaW1hdGluZ1Njcm9sbFNuYXAoZmFsc2UpOworfQorCit2b2lkIFNjcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwQW5pbWF0aW5nU3RhdGUoTW9u
b3RvbmljVGltZSBjdXJyZW50VGltZSkKK3sKKyAgICBpZiAoIW1faXNBbmltYXRpbmdTY3JvbGxT
bmFwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBib29sIGlzQW5pbWF0aW9uQ29tcGxldGU7CisgICAgYXV0byBhbmltYXRpb25PZmZzZXQgPSBt
X3Njcm9sbFNuYXBTdGF0ZS0+Y3VycmVudEFuaW1hdGVkU2Nyb2xsT2Zmc2V0KGN1cnJlbnRUaW1l
LCBpc0FuaW1hdGlvbkNvbXBsZXRlKTsKKyAgICBhdXRvIGN1cnJlbnRPZmZzZXQgPSBtX2NsaWVu
dC5zY3JvbGxPZmZzZXQoKTsKKworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJl
YW0gPDwgIlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIHVwZGF0ZVNj
cm9sbFNuYXBBbmltYXRpbmdTdGF0ZSAtIGlzQW5pbWF0aW9uQ29tcGxldGUgIiA8PCBpc0FuaW1h
dGlvbkNvbXBsZXRlIDw8ICIgY3VycmVudE9mZnNldCAiIDw8IGN1cnJlbnRPZmZzZXQgPDwgIiAo
bWFpbiB0aHJlYWQgIiA8PCBpc01haW5UaHJlYWQoKSA8PCAiKSIpOworCisgICAgbV9jbGllbnQu
aW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhGbG9hdFNpemUo
YW5pbWF0aW9uT2Zmc2V0LngoKSAtIGN1cnJlbnRPZmZzZXQueCgpLCBhbmltYXRpb25PZmZzZXQu
eSgpIC0gY3VycmVudE9mZnNldC55KCkpKTsKKyAgICBpZiAoaXNBbmltYXRpb25Db21wbGV0ZSkg
eworICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlvblRvRGVzdGluYXRpb25SZWFj
aGVkU3RhdGUoKTsKKyAgICAgICAgc3RvcFNjcm9sbFNuYXBBbmltYXRpb24oKTsKKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
</data>
<flag name="review"
          id="461590"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438269</attachid>
            <date>2021-09-15 11:52:12 -0700</date>
            <delta_ts>2021-09-15 11:58:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230312-20210915115211.patch</filename>
            <type>text/plain</type>
            <size>76943</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWVkM2VlMjc0M2EyYjNi
M2I2NWFlMGIxMzJkMTk5ZmMxNjcxM2VlMy4uN2FiYjQwZjg2NDczY2I4ZjBjYTI0MDBhMzcyZjFm
Y2U2ODhlNzBkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDIxLTA5LTE1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBTY3Jv
bGxDb250cm9sbGVyIHRvIFNjb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDMxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgU2Nyb2xsQ29udHJvbGxlciBpcyBhYm91dCBy
dWJiZXJiYW5kaW5nLCBtb21lbnR1bSBldGMsIHdoaWNoIGFyZSBzY3JvbGxpbmcgImVmZmVjdHMi
LAorICAgICAgICBzbyByZW5hbWUgdG8gU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuCisKKyAg
ICAgICAgU2Nyb2xsQ29udHJvbGxlciBpcyB0aGUgbmFtZSBJIHdhbnQgdG8gdWx0aW1hdGVseSB1
c2UgZm9yIFNjcm9sbEFuaW1hdG9yLgorCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6Cisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY3JvbGxh
YmxlQXJlYUNhbkhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c3Rh
cnRBbmltYXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlTWFjOjpzdG9wQW5pbWF0aW9uQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6YWxsb3dzSG9y
aXpvbnRhbFN0cmV0Y2hpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OktleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c3RhcnRBbmltYXRpb25DYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c3RvcEFuaW1hdGlvbkNhbGxiYWNrKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
RWZmZWN0c0NvbnRyb2xsZXI6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjphbmltYXRpb25DYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3RhcnRPclN0
b3BBbmltYXRpb25DYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0
c0NvbnRyb2xsZXI6OmJlZ2luS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0b3BLZXlib2FyZFNjcm9sbGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2V0SXNBbmltYXRpbmdS
dWJiZXJCYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
OjpzZXRJc0FuaW1hdGluZ1Njcm9sbFNuYXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
RWZmZWN0c0NvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnVzZXNTY3JvbGxTbmFw
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpz
ZXRTbmFwT2Zmc2V0c0luZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0Nv
bnRyb2xsZXI6OnNuYXBPZmZzZXRzSW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2V0QWN0
aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlcjo6c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OmFkanVz
dFNjcm9sbERlc3RpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyOjp1cGRhdGVBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JDbGllbnRPZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnJlc25hcEFmdGVy
TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1
cGRhdGVLZXlib2FyZFNjcm9sbGluZ0FuaW1hdGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp+U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0b3BBbGxU
aW1lcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNj
cm9sbFBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3Rz
Q29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1cGRhdGVSdWJiZXJCYW5kQW5pbWF0
aW5nU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVy
LmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLm1t
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xs
ZXIubW0uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6flNj
cm9sbGluZ0VmZmVjdHNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyOjpzdG9wQWxsVGltZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp3aGVlbERlbHRhQmlhc2luZ1Rvd2FyZHNW
ZXJ0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6
ZGlyZWN0aW9uRnJvbUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyOjp1cGRhdGVSdWJiZXJCYW5kQW5pbWF0aW5nU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6aXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3Rz
Q29udHJvbGxlcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3Rv
cFJ1YmJlcmJhbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRy
b2xsZXI6OnN0YXJ0UnViYmVyYmFuZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3RvcFNuYXBSdWJiZXJiYW5kQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzbmFwUnViYmVyQmFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2hvdWxk
UnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpp
c1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6dXBkYXRlUnViYmVy
QmFuZGluZ0VkZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9s
bGVyOjpzaG91bGRPdmVycmlkZU1vbWVudHVtU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzY2hlZHVsZVN0YXRlbGVzc1Njcm9s
bFNuYXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0
YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3RhcnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBs
ZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyOjpzdG9wRGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVl
VG9TY3JvbGxTbmFwcGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29u
dHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1cGRhdGVHZXN0dXJlSW5Qcm9ncmVzc1N0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdGFy
dFNjcm9sbFNuYXBBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0
c0NvbnRyb2xsZXI6OnN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwQW5pbWF0aW5nU3Rh
dGUpOgorCiAyMDIxLTA5LTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIE1vdmUgc2Nyb2xsYmFyLXJlbGF0ZWQgY29kZSBvdXQgb2YgU2Nyb2xsQW5p
bWF0b3IgYW5kIGludG8gU2Nyb2xsYmFyc0NvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKaW5kZXggMDU2Y2EyN2Y3ZjI3YTI0YzE5NDRjMDE4NWM2MjU3NGQwZGRkOGEyZC4uOTBkYmUx
MmQ5N2NhMDA0Njk1NjA1MmQ5YWI1YmJjYjk0MDI5MjlkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UKQEAgLTM3NCw3ICszNzQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9tYWMvUHVibGljU3VmZml4TWFjLm1tCiAgICAgcGxhdGZvcm0vbWFjL1NTTEtl
eUdlbmVyYXRvck1hYy5tbQogICAgIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQot
ICAgIHBsYXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1tCisgICAgcGxhdGZvcm0vbWFjL1Nj
cm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLm1tCiAgICAgcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdN
YWMubW0KICAgICBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KICAgICBwbGF0Zm9y
bS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZU1hYy5tbQpAQCAtNTU0LDcgKzU1NCw3IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL01haW5UaHJlYWRTaGFyZWRUaW1lci5oCiAgICAgcGxhdGZvcm0vUGljdHVyZUluUGljdHVy
ZVN1cHBvcnQuaAogICAgIHBsYXRmb3JtL1BsYXRmb3JtQ29udGVudEZpbHRlci5oCi0gICAgcGxh
dGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCisgICAgcGxhdGZvcm0vU2Nyb2xsaW5nRWZmZWN0c0Nv
bnRyb2xsZXIuaAogICAgIHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKICAgICBw
bGF0Zm9ybS9TaGFyZWRUaW1lci5oCiAgICAgcGxhdGZvcm0vU3lzdGVtU291bmRNYW5hZ2VyLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggZGQ5MzRiMDcyOWE4MjdlYzRjZjM5YjhiYjU5YTI2ZmM4YjE3ZWY2
Yy4uNGRkZjJiMTY2N2RiODczNTZhN2Y4MzZkMWFjNTAzYmM3N2M4MjViMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTE4MTIsNyArMTgxMiw3IEBAIHBsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNr
cy5jcHAKIHBsYXRmb3JtL1NTTEtleUdlbmVyYXRvci5jcHAKIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dGlvblNtb290aC5jcHAKIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAotcGxhdGZvcm0vU2Ny
b2xsQ29udHJvbGxlci5jcHAKK3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmNw
cAogcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwCiBwbGF0Zm9ybS9TY3JvbGxU
eXBlcy5jcHAKIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApp
bmRleCBkZjFlY2ZhMjZhMmMwN2E2ZTYyYjVhNzViN2E1YWQyMTk4YjVhOGI0Li41YzRhYWM4YzJk
YjQ1OWI1NjgyNzYyMWRjNjMzMzRhNWZjMzg2NDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQK
QEAgLTQ4OSw3ICs0ODksNyBAQCBwbGF0Zm9ybS9tYWMvUG93ZXJPYnNlcnZlck1hYy5jcHAKIHBs
YXRmb3JtL21hYy9QdWJsaWNTdWZmaXhNYWMubW0KIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0
b3JNYWMubW0KIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBAbm8tdW5pZnkKLXBs
YXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1tCitwbGF0Zm9ybS9tYWMvU2Nyb2xsaW5nRWZm
ZWN0c0NvbnRyb2xsZXIubW0KIHBsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1tCiBwbGF0Zm9y
bS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9tYWMv
U2Nyb2xsYmFyVGhlbWVNYWMubW0gQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmY0MzhlMGFjNjJlYjhkY2QyYTFl
OWRiYWRkNTNmOGMwNWY2Zjk5NC4uMGEzZmYwZTVjOGU3YmIzYjk0ZDEyNzE3NDRhOGY1ZjlkZDk1
NDIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMjAwMSw3ICsyMDAxLDcgQEAKIAkJNUE1NzRGMjUxMzFEQjkzOTAwNDcxQjg4
IC8qIFJlbmRlclF1b3RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QTU3NEYyMzEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCAqLzsgfTsK
IAkJNUE1NzRGMjkxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVBNTc0RjI3MTMxREI5NkQwMDQ3MUI4
OCAvKiBRdW90ZXNEYXRhLmggKi87IH07CiAJCTVCMzA2OTVFMThCM0QzNDUwMDk5RDVFOCAvKiBX
ZWJHTERyYXdCdWZmZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QjMwNjk1QjE4QjNEMzQ1MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVycy5oICov
OyB9OwotCQk1QjQ2NjU2MzI1RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI0NjY1NUYyNUQx
NEMwOTAwMENGRTE0IC8qIFNjcm9sbENvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1QjQ2NjU2MzI1RDE0QzBBMDAwQ0ZFMTQgLyog
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVCNDY2NTVGMjVEMTRDMDkwMDBDRkUxNCAvKiBTY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTVCNDY2NTY0MjVEMTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUI0NjY1NjAyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUMyQjFBRUMy
MjM5N0VCQzAwQjkxQ0Y3IC8qIFJlc291cmNlUmVzcG9uc2VDb2NvYS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExRjc4RDBCMUMyNTQyMkMwMDI0NTQ0
NiAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gKi87IH07CiAJCTVDNDMwNEIxMTkxQUM5MDgw
MDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzQzMDRBRTE5MUFDOTA4MDAwRTJCQzAgLyogRVhUU2hh
ZGVyVGV4dHVyZUxPRC5oICovOyB9OwpAQCAtOTcxNywxMyArOTcxNywxMyBAQAogCQk1QTU3NEYy
NjEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBRdW90ZXNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUE1NzRGMjcxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVvdGVzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1QTkxNDY5RThFOUY4NDg1QzM3QTI4NzYgLyogSlNTVkdHcmFwaGljc0VsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHR3JhcGhp
Y3NFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUIxRTBFNDMyNUQx
NjI5QjAwMjcyMjgxIC8qIFNjcm9sbENvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBTY3JvbGxDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjFF
MEU0MzI1RDE2MjlCMDAyNzIyODEgLyogU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUIzMDY5NUExOEIzRDM0NTAwOTlENUU4IC8qIFdlYkdM
RHJhd0J1ZmZlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
R0xEcmF3QnVmZmVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCMzA2OTVC
MThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkdMRHJhd0J1ZmZlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUIzMDY5NUMxOEIzRDM0NTAwOTlENUU4IC8qIFdlYkdMRHJhd0J1ZmZlcnMuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYkdMRHJhd0J1ZmZlcnMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1QjQ2NjU1RDI1RDE0QzA5MDAwQ0ZFMTQgLyogU2Nyb2xsU25h
cEFuaW1hdG9yU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1QjQ2NjU1RTI1RDE0QzA5MDAwQ0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxDb250cm9sbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUI0NjY1NUYyNUQxNEMwOTAwMENGRTE0IC8qIFNj
cm9sbENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xs
Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjQ2NjU1RTI1RDE0
QzA5MDAwQ0ZFMTQgLyogU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjQ2NjU1RjI1RDE0QzA5MDAwQ0ZFMTQg
LyogU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUI0NjY1NjAyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbFNuYXBBbmltYXRv
clN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbFNuYXBBbmlt
YXRvclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCN0FCOUY2MjU2N0RC
N0UwMDY1OTJEMCAvKiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMwMDE1MjEyNTAwMTEwMDAwOTRBQTkzIC8qIFRleHRDb2Rl
Y1NpbmdsZUJ5dGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4
dENvZGVjU2luZ2xlQnl0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAz
Niw3ICsyMjAzNiw3IEBACiAJCQkJMEYwMjI0NTMyNkYxNUQ3NTAwMDI2NUMzIC8qIFNjcm9sbGJh
cnNDb250cm9sbGVyTWFjLm1tICovLAogCQkJCUJDOEI4NTNDMEU3QzdGMTEwMEFCNjk4NCAvKiBT
Y3JvbGxiYXJUaGVtZU1hYy5oICovLAogCQkJCUJDRUY4NjlFMEU4NDRFOUQwMEE4NUNENSAvKiBT
Y3JvbGxiYXJUaGVtZU1hYy5tbSAqLywKLQkJCQk1QjFFMEU0MzI1RDE2MjlCMDAyNzIyODEgLyog
U2Nyb2xsQ29udHJvbGxlci5tbSAqLywKKwkJCQk1QjFFMEU0MzI1RDE2MjlCMDAyNzIyODEgLyog
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0gKi8sCiAJCQkJOTM1MzY3NkEwOUFFRDg4QjAw
RDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMubW0gKi8sCiAJCQkJMDc3QUYxNDExOEY0QjFCQjAwMDFF
RDYxIC8qIFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVNYWMuaCAqLywKIAkJCQkwNzdBRjE0MjE4
RjRCMUJCMDAwMUVENjEgLyogU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZU1hYy5tbSAqLywKQEAg
LTI3OTk3LDggKzI3OTk3LDggQEAKIAkJCQlCQzhCODU0QTBFN0M3RjU2MDBBQjY5ODQgLyogU2Ny
b2xsYmFyVGhlbWUuaCAqLywKIAkJCQlCQzE0MDI4ODBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xs
YmFyVGhlbWVDb21wb3NpdGUuY3BwICovLAogCQkJCUJDMTQwMjg5MEU4MzY4MDgwMDMxOTcxNyAv
KiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oICovLAotCQkJCTVCNDY2NTVFMjVEMTRDMDkwMDBD
RkUxNCAvKiBTY3JvbGxDb250cm9sbGVyLmNwcCAqLywKLQkJCQk1QjQ2NjU1RjI1RDE0QzA5MDAw
Q0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxlci5oICovLAorCQkJCTVCNDY2NTVFMjVEMTRDMDkwMDBD
RkUxNCAvKiBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5jcHAgKi8sCisJCQkJNUI0NjY1NUYy
NUQxNEMwOTAwMENGRTE0IC8qIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmggKi8sCiAJCQkJ
NUI0NjY1NUQyNUQxNEMwOTAwMENGRTE0IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcCAq
LywKIAkJCQk1QjQ2NjU2MDI1RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUuaCAqLywKIAkJCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3Bw
ICovLApAQCAtMzQ3NTgsMTEgKzM0NzU4LDExIEBACiAJCQkJQkM4Qjg1M0UwRTdDN0YxMTAwQUI2
OTg0IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU3MTQwNjE0
MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4M0M1Nzk1RDFEQTVDMzAxMDA2RkFDODYgLyogU2Nyb2xsQmVoYXZpb3IuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTVCNDY2NTYzMjVEMTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjYwNUFFRDE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5n
Q29uc3RyYWludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjYyRUU4MTREQTIyQTcwMDQxNTU2
QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MUE5OTEx
NjI3NDZDQjAwMjk3MzMwIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3MTJEQkE0OTIxRjhBRDgzMDA4RjM2QjIgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JU
eXBlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUI0NjY1NjMyNUQxNEMwQTAwMENGRTE0IC8qIFNj
cm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUM2MUIwQjFE
RTUzNkU3MDA4QTIxMkQgLyogU2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTdERUVFODFERTk0QjA4MDBCOTE2NDQgLyogU2Nyb2xsaW5nTW9tZW50dW1D
YWxjdWxhdG9yTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0MzOEJGRjE2NDQ3M0M3MDAwOTFF
QjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGI2YTE2Nzc0YzdiYTNlNmYyNTgwNmJhOGI2NGFk
YjE5OTk2Yjk3OTYuLmZiOWZkN2FiZGY1ZTUwNzI5YzQ2OGQ1ZjZkMWQzMjY1ZmE1NzgzNmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTMwNjYsNyArMzA2Niw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0Jv
eChOb2RlKiBzdGFydE5vZGUsIGNvCiBib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsYWJsZUFyZWFD
YW5IYW5kbGVFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9s
bGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsKICNpZiBQTEFURk9STShNQUMpCi0gICAgYXV0
byBiaWFzZWREZWx0YSA9IFNjcm9sbENvbnRyb2xsZXI6OndoZWVsRGVsdGFCaWFzaW5nVG93YXJk
c1ZlcnRpY2FsKHdoZWVsRXZlbnQpOworICAgIGF1dG8gYmlhc2VkRGVsdGEgPSBTY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlcjo6d2hlZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwod2hlZWxF
dmVudCk7CiAjZWxzZQogICAgIGF1dG8gYmlhc2VkRGVsdGEgPSB3aGVlbEV2ZW50LmRlbHRhKCk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5o
CmluZGV4IDZkYTdkOGQ2ZmYzMGRlYjJmMmI3M2E0MTRlODI5NWYzNjYyODUxODEuLmE5MDhlNTRj
ODc5ZDQwOGI3MDBhNTliY2NmNzFhOTBjNDAzYTEyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
TWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaApAQCAtMjksNyArMjksNyBAQAogCiAjaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oTUFDKQogCi0jaW5jbHVkZSAiU2Nyb2xs
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogT0JKQ19DTEFTUyBOU1Njcm9sbGVySW1wOwpAQCAt
NDMsNyArNDMsNyBAQCBjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7CiBjbGFzcyBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1RyZWU7CiAKLWNsYXNz
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMgOiBwdWJsaWMgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZSwgcHJpdmF0ZSBTY3JvbGxDb250cm9sbGVyQ2xpZW50
IHsKK2NsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMgOiBwdWJsaWMg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZSwgcHJpdmF0ZSBTY3JvbGxpbmdFZmZl
Y3RzQ29udHJvbGxlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYyhTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYpOwog
ICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMoKTsKQEAg
LTcwLDEwICs3MCwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaXNQaW5uZWRGb3JT
Y3JvbGxEZWx0YU9uQXhpcyhmbG9hdCBzY3JvbGxEZWx0YSwgU2Nyb2xsRXZlbnRBeGlzLCBmbG9h
dCBzY3JvbGxMaW1pdCA9IDApIGNvbnN0OwogCi0gICAgLy8gU2Nyb2xsQ29udHJvbGxlckNsaWVu
dC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQ29udHJvbGxlclRpbWVyPiBjcmVhdGVUaW1l
cihGdW5jdGlvbjx2b2lkKCk+JiYpIGZpbmFsOwotICAgIHZvaWQgc3RhcnRBbmltYXRpb25DYWxs
YmFjayhTY3JvbGxDb250cm9sbGVyJikgZmluYWw7Ci0gICAgdm9pZCBzdG9wQW5pbWF0aW9uQ2Fs
bGJhY2soU2Nyb2xsQ29udHJvbGxlciYpIGZpbmFsOworICAgIC8vIFNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyQ2xpZW50LgorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxpbmdFZmZlY3RzQ29u
dHJvbGxlclRpbWVyPiBjcmVhdGVUaW1lcihGdW5jdGlvbjx2b2lkKCk+JiYpIGZpbmFsOworICAg
IHZvaWQgc3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciYp
IGZpbmFsOworICAgIHZvaWQgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyJikgZmluYWw7CiAKICAgICBib29sIGFsbG93c0hvcml6b250YWxTdHJldGNoaW5n
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgYWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IGZpbmFs
OwpAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlbGVhc2VSZWZlcmVu
Y2VzVG9TY3JvbGxlckltcHNPblRoZU1haW5UaHJlYWQoKTsKIAotICAgIFNjcm9sbENvbnRyb2xs
ZXIgbV9zY3JvbGxDb250cm9sbGVyOworICAgIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyIG1f
c2Nyb2xsQ29udHJvbGxlcjsKIAogICAgIFJldGFpblB0cjxOU1Njcm9sbGVySW1wPiBtX3ZlcnRp
Y2FsU2Nyb2xsZXJJbXA7CiAgICAgUmV0YWluUHRyPE5TU2Nyb2xsZXJJbXA+IG1faG9yaXpvbnRh
bFNjcm9sbGVySW1wOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYy5tbQppbmRleCAyNjMzMmUzNDU0OGQ3YTkxYzk3ZWVlYTkyNWU2NTEzYzRkODhmZjI4Li5j
OGE3YmNmYmI5NTZkN2QxNjUwZDgxODg0ZTk4ZTcwMzcxOGZiMWE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQpAQCAtMjEzLDE1ICsyMTMsMTUg
QEAgYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjppc1Bpbm5lZEZv
clNjcm9sbERlbHRhT25BeGlzKGZsb2F0IHMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVNYWM6OmNyZWF0ZVRpbWVyKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikK
K3N0ZDo6dW5pcXVlX3B0cjxTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlclRpbWVyPiBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpjcmVhdGVUaW1lcihGdW5jdGlvbjx2b2lk
KCk+JiYgZnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxTY3JvbGxDb250
cm9sbGVyVGltZXI+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgW2Z1bmN0aW9uID0gV1RGTW92ZShmdW5j
dGlvbiksIHByb3RlY3RlZE5vZGUgPSBtYWtlUmVmKHNjcm9sbGluZ05vZGUoKSldIHsKKyAgICBy
ZXR1cm4gV1RGOjptYWtlVW5pcXVlPFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyVGltZXI+KFJ1
bkxvb3A6OmN1cnJlbnQoKSwgW2Z1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbiksIHByb3RlY3Rl
ZE5vZGUgPSBtYWtlUmVmKHNjcm9sbGluZ05vZGUoKSldIHsKICAgICAgICAgTG9ja2VyIGxvY2tl
ciB7IHByb3RlY3RlZE5vZGUtPnNjcm9sbGluZ1RyZWUoKS50cmVlTG9jaygpIH07CiAgICAgICAg
IGZ1bmN0aW9uKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZU1hYzo6c3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikK
K3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c3RhcnRBbmltYXRp
b25DYWxsYmFjayhTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciYpCiB7CiAgICAgaWYgKCFtX3Nj
cm9sbENvbnRyb2xsZXJBbmltYXRpb25UaW1lcikKICAgICAgICAgbV9zY3JvbGxDb250cm9sbGVy
QW5pbWF0aW9uVGltZXIgPSBXVEY6Om1ha2VVbmlxdWU8UnVuTG9vcDo6VGltZXI8U2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYz4+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywg
JlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnNjcm9sbENvbnRyb2xsZXJB
bmltYXRpb25UaW1lckZpcmVkKTsKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xs
Q29udHJvbAogICAgIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyLT5zdGFydFJlcGVh
dGluZygxX3MgLyA2MC4pOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVNYWM6OnN0b3BBbmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikKK3ZvaWQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c3RvcEFuaW1hdGlvbkNhbGxi
YWNrKFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyJikKIHsKICAgICBpZiAobV9zY3JvbGxDb250
cm9sbGVyQW5pbWF0aW9uVGltZXIpCiAgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlv
blRpbWVyLT5zdG9wKCk7CkBAIC0yNTQsNyArMjU0LDcgQEAgYm9vbCBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQ
bGEKICAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDogewotICAgICAgICBhdXRvIHNjcm9s
bERpcmVjdGlvbiA9IFNjcm9sbENvbnRyb2xsZXI6OmRpcmVjdGlvbkZyb21FdmVudCh3aGVlbEV2
ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOworICAgICAgICBhdXRvIHNjcm9sbERp
cmVjdGlvbiA9IFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpkaXJlY3Rpb25Gcm9tRXZlbnQo
d2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKICAgICAgICAgaWYgKHNj
cm9sbERpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBzaG91bGRSdWJiZXJCYW5kSW5EaXJl
Y3Rpb24oc2Nyb2xsRGlyZWN0aW9uLnZhbHVlKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTI3Niw3ICsyNzYsNyBAQCBib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWM6OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyhjb25zdCBQbGF0ZgogICAgIGNhc2UgU2Nyb2xs
RWxhc3RpY2l0eU5vbmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIFNjcm9sbEVs
YXN0aWNpdHlBbGxvd2VkOiB7Ci0gICAgICAgIGF1dG8gc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xs
Q29udHJvbGxlcjo6ZGlyZWN0aW9uRnJvbUV2ZW50KHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhp
czo6VmVydGljYWwpOworICAgICAgICBhdXRvIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyOjpkaXJlY3Rpb25Gcm9tRXZlbnQod2hlZWxFdmVudCwgU2Nyb2xsRXZl
bnRBeGlzOjpWZXJ0aWNhbCk7CiAgICAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24pCiAgICAgICAg
ICAgICByZXR1cm4gc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKHNjcm9sbERpcmVjdGlvbi52
YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCmluZGV4IGM4ZjBlNjczZjJh
MmUyMDBkMjU0MjFmY2Y4YzZjMGE5ZmIzMGE3YmQuLmQ2MDc3ODFlNzk1OTUwN2E1YjgxODM3OGFl
Yjc0YjdkN2UyZDVjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6S2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvcihTY3JvbGxBbmltYXRvciYgc2Nyb2xsQW5pbWF0b3IsIFNjcm9sbENvbnRyb2xs
ZXImIHNjcm9sbENvbnRyb2xsZXIpCitLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjpLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yKFNjcm9sbEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvciwgU2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXImIHNjcm9sbENvbnRyb2xsZXIpCiAgICAgOiBtX3Njcm9sbEFu
aW1hdG9yKHNjcm9sbEFuaW1hdG9yKQogICAgICwgbV9zY3JvbGxDb250cm9sbGVyKHNjcm9sbENv
bnRyb2xsZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yLmgKaW5kZXggODMyYjkxYmJmOTVhZjI0ODBiMTA3YjdkNzhlZGQ1ZTYy
N2RiZTMyNy4uZDNlNmQ0ZDhiOTgyODI4N2FkY2MwZjE0NjljODQ3MWI5M2EyZThlOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Iu
aApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBLZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yKFNjcm9sbEFuaW1hdG9yJiwgU2Nyb2xsQ29udHJvbGxlciYpOworICAgIEtleWJvYXJk
U2Nyb2xsaW5nQW5pbWF0b3IoU2Nyb2xsQW5pbWF0b3ImLCBTY3JvbGxpbmdFZmZlY3RzQ29udHJv
bGxlciYpOwogCiAgICAgYm9vbCBiZWdpbktleWJvYXJkU2Nyb2xsR2VzdHVyZShLZXlib2FyZEV2
ZW50Jik7CiAgICAgdm9pZCBoYW5kbGVLZXlVcEV2ZW50KCk7CkBAIC00OSw3ICs0OSw3IEBAIHBy
aXZhdGU6CiAgICAgZmxvYXQgc2Nyb2xsRGlzdGFuY2UoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSkgY29uc3Q7CiAKICAgICBTY3JvbGxBbmltYXRvciYgbV9zY3JvbGxBbmltYXRv
cjsKLSAgICBTY3JvbGxDb250cm9sbGVyJiBtX3Njcm9sbENvbnRyb2xsZXI7CisgICAgU2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXImIG1fc2Nyb2xsQ29udHJvbGxlcjsKICAgICBzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OktleWJvYXJkU2Nyb2xsPiBtX2N1cnJlbnRLZXlib2FyZFNjcm9sbDsKICAg
ICBib29sIG1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlzUHJlc3NlZCB7IGZhbHNlIH07CiAgICAgRmxv
YXRTaXplIG1fdmVsb2NpdHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5jcHAKaW5kZXggODBlMDExOTk3NDJkZjRkZGQxN2MwZTEyOTcyOTM3NWQ0ZmQxNGIzZC4uY2Vk
ZDk2ODBjMzljNGZiN2MxNmFkYWU4MDBiMWQ1NDk2NzNjNDVlMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtMzcsOCArMzcsOCBAQAogI2luY2x1ZGUg
IkxheW91dFNpemUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRl
ICJTY3JvbGxBbmltYXRpb25TbW9vdGguaCIKLSNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdFZmZlY3Rz
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMzIxLDE2ICszMjEsMTYgQEAgZmxvYXQgU2Nyb2xsQW5pbWF0b3I6OnBhZ2VTY2FsZUZh
Y3RvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEucGFnZVNjYWxlRmFjdG9y
KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IFNjcm9sbEFu
aW1hdG9yOjpjcmVhdGVUaW1lcihGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCitzdGQ6OnVu
aXF1ZV9wdHI8U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXJUaW1lcj4gU2Nyb2xsQW5pbWF0b3I6
OmNyZWF0ZVRpbWVyKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKIHsKLSAgICByZXR1cm4g
V1RGOjptYWtlVW5pcXVlPFNjcm9sbENvbnRyb2xsZXJUaW1lcj4oUnVuTG9vcDo6Y3VycmVudCgp
LCBbZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKSwgd2Vha1Njcm9sbGFibGVBcmVhID0gbWFr
ZVdlYWtQdHIobV9zY3JvbGxhYmxlQXJlYSldIHsKKyAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVl
PFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyVGltZXI+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgW2Z1
bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbiksIHdlYWtTY3JvbGxhYmxlQXJlYSA9IG1ha2VXZWFr
UHRyKG1fc2Nyb2xsYWJsZUFyZWEpXSB7CiAgICAgICAgIGlmICghd2Vha1Njcm9sbGFibGVBcmVh
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBmdW5jdGlvbigpOwogICAgIH0pOwogfQog
Ci12b2lkIFNjcm9sbEFuaW1hdG9yOjpzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRy
b2xsZXImKQordm9pZCBTY3JvbGxBbmltYXRvcjo6c3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlciYpCiB7CiAgICAgaWYgKG1fc2Nyb2xsQ29udHJvbGxlckFu
aW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMzOCw3ICszMzgs
NyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjpzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENv
bnRyb2xsZXImKQogICAgIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyLnN0YXJ0UmVw
ZWF0aW5nKDFfcyAvIDYwLik7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3I6OnN0b3BBbmltYXRp
b25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnN0b3BB
bmltYXRpb25DYWxsYmFjayhTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciYpCiB7CiAgICAgbV9z
Y3JvbGxDb250cm9sbGVyQW5pbWF0aW9uVGltZXIuc3RvcCgpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggYTMzYTBiYzlmNWJiMWE2Mzc0ZWQ5ZDBhMjE5
Y2I5YmFiZGNhMWE0Zi4uNTQzYWU2MTk1NzEwYjAwZGYxZmM5MDQxNzRlMGJjZGQ1NzY0ZjQzMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0zMyw3ICszMyw3
IEBACiAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2
ZW50LmgiCi0jaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcm9sbGlu
Z0VmZmVjdHNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJXaGVl
bEV2ZW50VGVzdE1vbml0b3IuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgpAQCAtNDks
OSArNDksOSBAQCBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhcjsKIGNsYXNz
IFdoZWVsRXZlbnRUZXN0TW9uaXRvcjsKIAotY2xhc3MgU2Nyb2xsQ29udHJvbGxlclRpbWVyOwor
Y2xhc3MgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXJUaW1lcjsKIAotY2xhc3MgU2Nyb2xsQW5p
bWF0b3IgOiBwcml2YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgeworY2xhc3MgU2Nyb2xsQW5p
bWF0b3IgOiBwcml2YXRlIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyQ2xpZW50IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFNjcm9sbEFuaW1hdG9yPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmKTsKQEAgLTExMSwxMCAr
MTExLDEwIEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IGFkanVzdFNjcm9sbE9mZnNldEZvclNu
YXBwaW5nSWZOZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0LCBTY3JvbGxTbmFwUG9pbnRT
ZWxlY3Rpb25NZXRob2QpOwogICAgIGZsb2F0IGFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5n
SWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBGbG9hdFBvaW50JiBuZXdPZmZzZXQsIFNj
cm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Ny
b2xsQ29udHJvbGxlclRpbWVyPiBjcmVhdGVUaW1lcihGdW5jdGlvbjx2b2lkKCk+JiYpIGZpbmFs
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlclRpbWVyPiBj
cmVhdGVUaW1lcihGdW5jdGlvbjx2b2lkKCk+JiYpIGZpbmFsOwogCi0gICAgdm9pZCBzdGFydEFu
aW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKSBmaW5hbDsKLSAgICB2b2lkIHN0b3BB
bmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikgZmluYWw7CisgICAgdm9pZCBzdGFy
dEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyJikgZmluYWw7Cisg
ICAgdm9pZCBzdG9wQW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIm
KSBmaW5hbDsKIAogICAgIHZvaWQgc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyRmlyZWQo
KTsKIApAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBMYXlvdXRTY3JvbGxT
bmFwT2Zmc2V0c0luZm8qIHNuYXBPZmZzZXRzSW5mbygpIGNvbnN0OwogICAgIHZvaWQgcmVzbmFw
QWZ0ZXJMYXlvdXQoKTsKIAotICAgIC8vIFNjcm9sbENvbnRyb2xsZXJDbGllbnQuCisgICAgLy8g
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXJDbGllbnQuCiAgICAgRmxvYXRQb2ludCBzY3JvbGxP
ZmZzZXQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhT
Y3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRhKSBvdmVycmlkZTsKICAgICBmbG9hdCBwYWdlU2Nh
bGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKQEAgLTE0OCw3ICsxNDgsNyBAQCBwcm90ZWN0ZWQ6
CiAKICAgICBTY3JvbGxhYmxlQXJlYSYgbV9zY3JvbGxhYmxlQXJlYTsKICAgICBSZWZQdHI8V2hl
ZWxFdmVudFRlc3RNb25pdG9yPiBtX3doZWVsRXZlbnRUZXN0TW9uaXRvcjsKLSAgICBTY3JvbGxD
b250cm9sbGVyIG1fc2Nyb2xsQ29udHJvbGxlcjsKKyAgICBTY3JvbGxpbmdFZmZlY3RzQ29udHJv
bGxlciBtX3Njcm9sbENvbnRyb2xsZXI7CiAgICAgVGltZXIgbV9zY3JvbGxDb250cm9sbGVyQW5p
bWF0aW9uVGltZXI7CiAgICAgRmxvYXRQb2ludCBtX2N1cnJlbnRQb3NpdGlvbjsKICAgICBib29s
IG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2M2RmN2M0OGM2ZTY5MDNkYzRjMDZkYzIwN2Y3NWNmNDRkZmM4ZjVhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxD
b250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmgiCi0j
aW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5o
IgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCi0jaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RN
b25pdG9yLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVNjcm9sbENvbnRyb2xsZXI6OlNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29u
dHJvbGxlckNsaWVudCYgY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQotewotfQotCi12
b2lkIFNjcm9sbENvbnRyb2xsZXI6OmFuaW1hdGlvbkNhbGxiYWNrKE1vbm90b25pY1RpbWUgY3Vy
cmVudFRpbWUpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJT
Y3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIGFuaW1hdGlvbkNhbGxiYWNrOiBpc0FuaW1h
dGluZ1J1YmJlckJhbmQgIiA8PCBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCA8PCAiIGlzQW5pbWF0
aW5nU2Nyb2xsU25hcCAiIDw8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwIDw8ICJpc0FuaW1hdGlu
Z0tleWJvYXJkU2Nyb2xsaW5nIiA8PCBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcpOwot
Ci0gICAgdXBkYXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKGN1cnJlbnRUaW1lKTsKLSAgICB1
cGRhdGVSdWJiZXJCYW5kQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOwotICAgIHVwZGF0ZUtl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOwotfQotCi12b2lkIFNj
cm9sbENvbnRyb2xsZXI6OnN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCkKLXsKLSAgICBi
b29sIG5lZWRzQ2FsbGJhY2tzID0gbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgfHwgbV9pc0FuaW1h
dGluZ1Njcm9sbFNuYXAgfHwgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nOwotICAgIGlm
IChuZWVkc0NhbGxiYWNrcyA9PSBtX2lzUnVubmluZ0FuaW1hdGluZ0NhbGxiYWNrKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobmVlZHNDYWxsYmFja3MpIHsKLSAgICAgICAgbV9jbGllbnQu
c3RhcnRBbmltYXRpb25DYWxsYmFjaygqdGhpcyk7Ci0gICAgICAgIG1faXNSdW5uaW5nQW5pbWF0
aW5nQ2FsbGJhY2sgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jbGll
bnQuc3RvcEFuaW1hdGlvbkNhbGxiYWNrKCp0aGlzKTsKLSAgICBtX2lzUnVubmluZ0FuaW1hdGlu
Z0NhbGxiYWNrID0gZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6YmVnaW5LZXli
b2FyZFNjcm9sbGluZygpCi17Ci0gICAgc2V0SXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyh0
cnVlKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wS2V5Ym9hcmRTY3JvbGxpbmco
KQotewotICAgIHNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcoZmFsc2UpOwotfQotCi12
b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nUnViYmVyQmFuZChib29sIGlzQW5p
bWF0aW5nUnViYmVyQmFuZCkKLXsKLSAgICBpZiAoaXNBbmltYXRpbmdSdWJiZXJCYW5kID09IG1f
aXNBbmltYXRpbmdSdWJiZXJCYW5kKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIG1f
aXNBbmltYXRpbmdSdWJiZXJCYW5kID0gaXNBbmltYXRpbmdSdWJiZXJCYW5kOwotICAgIHN0YXJ0
T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6
c2V0SXNBbmltYXRpbmdTY3JvbGxTbmFwKGJvb2wgaXNBbmltYXRpbmdTY3JvbGxTbmFwKQotewot
ICAgIGlmIChpc0FuaW1hdGluZ1Njcm9sbFNuYXAgPT0gbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAp
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAg
PSBpc0FuaW1hdGluZ1Njcm9sbFNuYXA7Ci0gICAgc3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFj
a3MoKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXRJc0FuaW1hdGluZ0tleWJvYXJk
U2Nyb2xsaW5nKGJvb2wgaXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZykKLXsKLSAgICBpZiAo
aXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyA9PSBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3Jv
bGxpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9s
bGluZyA9IGlzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmc7Ci0gICAgc3RhcnRPclN0b3BBbmlt
YXRpb25DYWxsYmFja3MoKTsKLX0KLQotYm9vbCBTY3JvbGxDb250cm9sbGVyOjp1c2VzU2Nyb2xs
U25hcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9zY3JvbGxTbmFwU3RhdGU7Ci19Ci0KLXZv
aWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0U25hcE9mZnNldHNJbmZvKGNvbnN0IExheW91dFNjcm9s
bFNuYXBPZmZzZXRzSW5mbyYgc25hcE9mZnNldEluZm8pCi17Ci0gICAgaWYgKHNuYXBPZmZzZXRJ
bmZvLmlzRW1wdHkoKSkgewotICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZSA9IG51bGxwdHI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZENvbXB1dGVDdXJyZW50U25h
cEluZGljZXMgPSAhbV9zY3JvbGxTbmFwU3RhdGU7Ci0gICAgaWYgKCFtX3Njcm9sbFNuYXBTdGF0
ZSkKLSAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBtYWtlVW5pcXVlPFNjcm9sbFNuYXBBbmlt
YXRvclN0YXRlPigpOwotCi0gICAgbV9zY3JvbGxTbmFwU3RhdGUtPnNldFNuYXBPZmZzZXRJbmZv
KHNuYXBPZmZzZXRJbmZvKTsKLQotICAgIGlmIChzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRp
Y2VzKQotICAgICAgICB1cGRhdGVBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JDbGllbnRPZmZzZXQo
KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENv
bnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgc2V0U25hcE9mZnNldHNJbmZvIG5ldyBzdGF0ZTogIiA8
PCBWYWx1ZU9yTnVsbChtX3Njcm9sbFNuYXBTdGF0ZS5nZXQoKSkpOwotfQotCi1jb25zdCBMYXlv
dXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8qIFNjcm9sbENvbnRyb2xsZXI6OnNuYXBPZmZzZXRzSW5m
bygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Nyb2xsU25hcFN0YXRlID8gJm1fc2Nyb2xsU25h
cFN0YXRlLT5zbmFwT2Zmc2V0SW5mbygpIDogbnVsbHB0cjsKLX0KLQotc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gU2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhT
Y3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsU25hcFN0
YXRlLT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKGF4aXMpOwotfQotCi12b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4
aXMsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGluZGV4KQotewotICAgIGlmICghdXNlc1Njcm9s
bFNuYXAoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3JvbGxTbmFwU3RhdGUtPnNldEFj
dGl2ZVNuYXBJbmRleEZvckF4aXMoYXhpcywgaW5kZXgpOwotfQotCi12b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2
ZW50QXhpcyBheGlzLCBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQotewotICAgIGlmICghdXNl
c1Njcm9sbFNuYXAoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKTsKLSAgICBMYXlvdXRQb2ludCBsYXlvdXRTY3Jv
bGxPZmZzZXQoc2Nyb2xsT2Zmc2V0LngoKSAvIHNjYWxlRmFjdG9yLCBzY3JvbGxPZmZzZXQueSgp
IC8gc2NhbGVGYWN0b3IpOwotICAgIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUg
PSAqbV9zY3JvbGxTbmFwU3RhdGU7Ci0KLSAgICBhdXRvIHNuYXBPZmZzZXRzID0gc25hcFN0YXRl
LnNuYXBPZmZzZXRzRm9yQXhpcyhheGlzKTsKLSAgICBMYXlvdXRTaXplIHZpZXdwb3J0U2l6ZSht
X2NsaWVudC52aWV3cG9ydFNpemUoKS53aWR0aCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKS5o
ZWlnaHQoKSk7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gYWN0aXZlSW5kZXg7Ci0gICAg
aWYgKHNuYXBPZmZzZXRzLnNpemUoKSkKLSAgICAgICAgYWN0aXZlSW5kZXggPSBzbmFwU3RhdGUu
c25hcE9mZnNldEluZm8oKS5jbG9zZXN0U25hcE9mZnNldChheGlzLCB2aWV3cG9ydFNpemUsIGxh
eW91dFNjcm9sbE9mZnNldCwgMCkuc2Vjb25kOwotCi0gICAgaWYgKGFjdGl2ZUluZGV4ID09IGFj
dGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcykpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlID0gdHJ1ZTsKLSAgICBzZXRBY3RpdmVT
Y3JvbGxTbmFwSW5kZXhGb3JBeGlzKGF4aXMsIGFjdGl2ZUluZGV4KTsKLX0KLQotZmxvYXQgU2Ny
b2xsQ29udHJvbGxlcjo6YWRqdXN0U2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzIGF4
aXMsIEZsb2F0UG9pbnQgZGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBvcmlnaW5hbE9mZnNldCkKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFw
KCkpCi0gICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/
IGRlc3RpbmF0aW9uT2Zmc2V0LngoKSA6IGRlc3RpbmF0aW9uT2Zmc2V0LnkoKTsKLQotICAgIFNj
cm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSAqbV9zY3JvbGxTbmFwU3RhdGU7Ci0g
ICAgYXV0byBzbmFwT2Zmc2V0cyA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoYXhpcyk7
Ci0gICAgaWYgKCFzbmFwT2Zmc2V0cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBheGlzID09IFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IGRlc3RpbmF0aW9uT2Zmc2V0LngoKSA6IGRlc3Rp
bmF0aW9uT2Zmc2V0LnkoKTsKLQotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gbV9jbGllbnQucGFn
ZVNjYWxlRmFjdG9yKCk7Ci0gICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbE9m
ZnNldEluTGF5b3V0VW5pdHM7Ci0gICAgaWYgKG9yaWdpbmFsT2Zmc2V0KQotICAgICAgICBvcmln
aW5hbE9mZnNldEluTGF5b3V0VW5pdHMgPSBMYXlvdXRVbml0KCpvcmlnaW5hbE9mZnNldCAvIHNj
YWxlRmFjdG9yKTsKLSAgICBMYXlvdXRTaXplIHZpZXdwb3J0U2l6ZShtX2NsaWVudC52aWV3cG9y
dFNpemUoKS53aWR0aCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKS5oZWlnaHQoKSk7Ci0gICAg
TGF5b3V0UG9pbnQgbGF5b3V0RGVzdGluYXRpb25PZmZzZXQoZGVzdGluYXRpb25PZmZzZXQueCgp
IC8gc2NhbGVGYWN0b3IsIGRlc3RpbmF0aW9uT2Zmc2V0LnkoKSAvIHNjYWxlRmFjdG9yKTsKLSAg
ICBMYXlvdXRVbml0IG9mZnNldCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0SW5mbygpLmNsb3Nlc3RT
bmFwT2Zmc2V0KGF4aXMsIHZpZXdwb3J0U2l6ZSwgbGF5b3V0RGVzdGluYXRpb25PZmZzZXQsIHZl
bG9jaXR5LCBvcmlnaW5hbE9mZnNldEluTGF5b3V0VW5pdHMpLmZpcnN0OwotICAgIHJldHVybiBv
ZmZzZXQgKiBzY2FsZUZhY3RvcjsKLX0KLQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0
ZUFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckNsaWVudE9mZnNldCgpCi17Ci0gICAgaWYgKCF1c2Vz
U2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY3JvbGxPZmZzZXQgb2Zmc2V0
ID0gcm91bmRlZEludFBvaW50KG1fY2xpZW50LnNjcm9sbE9mZnNldCgpKTsKLSAgICBzZXROZWFy
ZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwsIG9mZnNldCk7Ci0gICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRP
ZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0KTsKLX0KLQotdm9pZCBTY3Jv
bGxDb250cm9sbGVyOjpyZXNuYXBBZnRlckxheW91dCgpCi17Ci0gICAgaWYgKCF1c2VzU2Nyb2xs
U25hcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBzbmFw
cGVkIGluIGEgcGFydGljdWxhciBheGlzLCBtYWludGFpbiB0aGF0LiBPdGhlcndpc2UsIHNuYXAg
dG8gdGhlIG5lYXJlc3QgZWxpZ2libGUgc25hcCBwb2ludC4KLSAgICBTY3JvbGxPZmZzZXQgb2Zm
c2V0ID0gcm91bmRlZEludFBvaW50KG1fY2xpZW50LnNjcm9sbE9mZnNldCgpKTsKLSAgICBTY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOwotCi0g
ICAgYXV0byBhY3RpdmVIb3Jpem9udGFsSW5kZXggPSBtX3Njcm9sbFNuYXBTdGF0ZS0+YWN0aXZl
U25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwotICAgIGlmICgh
YWN0aXZlSG9yaXpvbnRhbEluZGV4IHx8ICphY3RpdmVIb3Jpem9udGFsSW5kZXggPj0gc25hcFN0
YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpLnNpemUo
KSkKLSAgICAgICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBvZmZzZXQpOwotCi0gICAgYXV0byBhY3RpdmVWZXJ0
aWNhbEluZGV4ID0gbV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7Ci0gICAgaWYgKCFhY3RpdmVWZXJ0aWNhbEluZGV4IHx8
ICphY3RpdmVWZXJ0aWNhbEluZGV4ID49IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkuc2l6ZSgpKQotICAgICAgICBzZXROZWFyZXN0U2Nyb2xs
U25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBvZmZz
ZXQpOwotCi19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lKQotewotICAgIGlmICgh
bV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2NsaWVudC5rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKCktPnVwZGF0ZUtleWJvYXJkU2Nyb2xs
UG9zaXRpb24oY3VycmVudFRpbWUpOwotfQotCi0vLyBDdXJyZW50bHksIG9ubHkgTWFjIHN1cHBv
cnRzIG1vbWVudHVtIHNyb2xsaW5nLWJhc2VkIHNjcm9sbHNuYXBwaW5nIGFuZCBydWJiZXIgYmFu
ZGluZwotLy8gc28gYWxsIG9mIHRoZXNlIG1ldGhvZHMgYXJlIGEgbm9vcCBvbiBub24tTWFjIHBs
YXRmb3Jtcy4KLSNpZiAhUExBVEZPUk0oTUFDKQotU2Nyb2xsQ29udHJvbGxlcjo6flNjcm9sbENv
bnRyb2xsZXIoKQotewotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BBbGxUaW1lcnMo
KQotewotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgp
Ci17Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcEFuaW1hdGlu
Z1N0YXRlKE1vbm90b25pY1RpbWUpCi17Ci0KLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1
cGRhdGVSdWJiZXJCYW5kQW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGltZSkKLXsKLQotfQotCi0j
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGRkOWMwOTIwZTRhZjFmOWJhMzI0MjFhOWQ3ZmRhYzE4M2E1MWUzNzAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotCi0jaW5jbHVkZSAiUmVjdEVkZ2Vz
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKLSNpbmNsdWRlICJTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uaCIKLSNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgotI2luY2x1ZGUg
IldoZWVsRXZlbnRUZXN0TW9uaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgot
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjsKLWNsYXNzIExheW91dFNpemU7Ci1jbGFzcyBQbGF0
Zm9ybVdoZWVsRXZlbnQ7Ci1jbGFzcyBTY3JvbGxDb250cm9sbGVyOwotY2xhc3MgU2Nyb2xsYWJs
ZUFyZWE7Ci1jbGFzcyBXaGVlbEV2ZW50VGVzdE1vbml0b3I7Ci0KLWNsYXNzIFNjcm9sbENvbnRy
b2xsZXJUaW1lciA6IHB1YmxpYyBSdW5Mb29wOjpUaW1lckJhc2UgewotcHVibGljOgotICAgIFNj
cm9sbENvbnRyb2xsZXJUaW1lcihSdW5Mb29wJiBydW5Mb29wLCBGdW5jdGlvbjx2b2lkKCk+JiYg
Y2FsbGJhY2spCi0gICAgICAgIDogUnVuTG9vcDo6VGltZXJCYXNlKHJ1bkxvb3ApCi0gICAgICAg
ICwgbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9p
ZCBmaXJlZCgpIGZpbmFsCi0gICAgewotICAgICAgICBtX2NhbGxiYWNrKCk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9jYWxsYmFjazsKLX07Ci0KLWNsYXNzIFNj
cm9sbENvbnRyb2xsZXJDbGllbnQgewotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgflNjcm9sbENv
bnRyb2xsZXJDbGllbnQoKSA9IGRlZmF1bHQ7Ci0KLXB1YmxpYzoKLSAgICAvLyBPbmx5IHVzZWQg
Zm9yIG5vbi1hbmltYXRpb24gdGltZXJzLgotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbENvbnRyb2xsZXJUaW1lcj4gY3JlYXRlVGltZXIoRnVuY3Rpb248dm9pZCgpPiYmKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9s
bGVyJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wQW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xs
Q29udHJvbGxlciYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVLZXlib2FyZFNjcm9s
bFBvc2l0aW9uKE1vbm90b25pY1RpbWUpIHsgfQotICAgIHZpcnR1YWwgS2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvciAqa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpIGNvbnN0IHsgcmV0dXJuIG51
bGxwdHI7IH0KLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSW50U2l6ZSBzdHJl
dGNoQW1vdW50KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzUGlubmVkRm9yU2Ny
b2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJikgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBSZWN0
RWRnZXM8Ym9vbD4gZWRnZVBpbm5lZFN0YXRlKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBi
b29sIGFsbG93c0hvcml6b250YWxTY3JvbGxpbmcoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uKSBjb25zdCA9IDA7
Ci0KLSAgICAvLyBGSVhNRTogdXNlIFNjcm9sbENsYW1waW5nIHRvIGNvbGxhcHNlIHRoZXNlIHRv
IG9uZS4KLSAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXpl
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50
RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCB3aWxsU3RhcnRSdWJiZXJCYW5kU25hcEFuaW1hdGlvbigpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkaWRTdG9wUnViYmVyYmFuZFNuYXBBbmltYXRpb24oKSB7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBydWJiZXJCYW5kaW5nU3RhdGVDaGFuZ2VkKGJvb2wpIHsgfQotCi0gICAgLy8gSWYgdGhlIGN1
cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGlzIHdpdGhpbiB0aGUgb3ZlcmhhbmcgYXJlYSwgdGhpcyBm
dW5jdGlvbiB3aWxsIGNhdXNlCi0gICAgLy8gdGhlIHBhZ2UgdG8gc2Nyb2xsIHRvIHRoZSBuZWFy
ZXN0IGJvdW5kYXJ5IHBvaW50LgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlv
blRvQm91bmRzSWZOZWNlc3NhcnkoKSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBk
ZWZlcldoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkZvclJlYXNvbihXaGVlbEV2ZW50VGVzdE1vbml0
b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpEZWZl
clJlYXNvbikgY29uc3QgeyAvKiBEbyBub3RoaW5nICovIH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRGVmZXJyYWxGb3JSZWFzb24oV2hlZWxFdmVudFRl
c3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0TW9uaXRv
cjo6RGVmZXJSZWFzb24pIGNvbnN0IHsgLyogRG8gbm90aGluZyAqLyB9Ci0KLSAgICB2aXJ0dWFs
IEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBp
bW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9Ci0gICAgdmlydHVh
bCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRT
aXplIHNjcm9sbEV4dGVudCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2aWV3
cG9ydFNpemUoKSBjb25zdCA9IDA7Ci19OwotCi1jbGFzcyBTY3JvbGxDb250cm9sbGVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JvbGxDb250cm9sbGVyKTsKLQotcHVibGljOgotICAg
IGV4cGxpY2l0IFNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCYpOwotICAg
IH5TY3JvbGxDb250cm9sbGVyKCk7Ci0KLSAgICBib29sIHVzZXNTY3JvbGxTbmFwKCkgY29uc3Q7
Ci0gICAgdm9pZCBzdG9wQWxsVGltZXJzKCk7Ci0gICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5n
ZWQoKTsKLQotICAgIHZvaWQgYmVnaW5LZXlib2FyZFNjcm9sbGluZygpOwotICAgIHZvaWQgc3Rv
cEtleWJvYXJkU2Nyb2xsaW5nKCk7Ci0gICAgCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBwZXJp
b2RpY2FsbHkgYnkgdGhlIGNsaWVudC4gU3RhcnRlZCBieSBzdGFydEFuaW1hdGlvbkNhbGxiYWNr
KCksIHN0b3BwZWQgYnkgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKCkuCi0gICAgdm9pZCBhbmltYXRp
b25DYWxsYmFjayhNb25vdG9uaWNUaW1lKTsKLQotICAgIHZvaWQgc2V0U25hcE9mZnNldHNJbmZv
KGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYpOwotICAgIGNvbnN0IExheW91dFNj
cm9sbFNuYXBPZmZzZXRzSW5mbyogc25hcE9mZnNldHNJbmZvKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcywgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4pOwotICAgIHZvaWQgdXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9y
Q2xpZW50T2Zmc2V0KCk7Ci0gICAgdm9pZCByZXNuYXBBZnRlckxheW91dCgpOwotICAgIGJvb2wg
YWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVT
Y3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2U7IH0KLSAgICB2b2lkIHNldFNjcm9sbFNuYXBJbmRleERp
ZENoYW5nZShib29sIHN0YXRlKSB7IG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlID0g
c3RhdGU7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBhY3RpdmVTY3JvbGxTbmFwSW5k
ZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxT
bmFwU3RhdGUoY29uc3QgU2Nyb2xsYWJsZUFyZWEmKTsKLSAgICB2b2lkIHVwZGF0ZUdlc3R1cmVJ
blByb2dyZXNzU3RhdGUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgZmxvYXQgYWRq
dXN0U2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzLCBGbG9hdFBvaW50IGRlc3RpbmF0
aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxP
ZmZzZXQpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBoYW5k
bGVkLgotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
KTsKLQotICAgIGVudW0gY2xhc3MgV2hlZWxBeGlzQmlhcyB7IE5vbmUsIFZlcnRpY2FsIH07Ci0g
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsRGlyZWN0aW9uPiBkaXJlY3Rpb25Gcm9tRXZl
bnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jiwgc3RkOjpvcHRpb25hbDxTY3JvbGxFdmVudEF4
aXM+LCBXaGVlbEF4aXNCaWFzID0gV2hlZWxBeGlzQmlhczo6Tm9uZSk7Ci0gICAgc3RhdGljIEZs
b2F0U2l6ZSB3aGVlbERlbHRhQmlhc2luZ1Rvd2FyZHNWZXJ0aWNhbChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmKTsKLQotICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Owot
ICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJu
cyB0cnVlIGlmIGhhbmRsZWQuCi0gICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNu
YXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCi0gICAgdm9pZCBzdG9wUnViYmVyYmFuZGluZygpOwotICAgIGJvb2wgaXNSdWJiZXJCYW5k
SW5Qcm9ncmVzcygpIGNvbnN0OwotICAgIFJlY3RFZGdlczxib29sPiBydWJiZXJCYW5kaW5nRWRn
ZXMoKSBjb25zdCB7IHJldHVybiBtX3J1YmJlckJhbmRpbmdFZGdlczsgfQotI2VuZGlmCi0jZW5k
aWYKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlz
QW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgU2Nyb2xsT2Zmc2V0KTsKLQotICAgIHZvaWQgdXBk
YXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgdXBk
YXRlUnViYmVyQmFuZEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgdXBk
YXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKLQotICAg
IHZvaWQgc2V0SXNBbmltYXRpbmdSdWJiZXJCYW5kKGJvb2wpOwotICAgIHZvaWQgc2V0SXNBbmlt
YXRpbmdTY3JvbGxTbmFwKGJvb2wpOwotICAgIHZvaWQgc2V0SXNBbmltYXRpbmdLZXlib2FyZFNj
cm9sbGluZyhib29sKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIHN0YXJ0U2Nyb2xs
U25hcEFuaW1hdGlvbigpOwotICAgIHZvaWQgc3RvcFNjcm9sbFNuYXBBbmltYXRpb24oKTsKLQot
ICAgIGJvb2wgc2hvdWxkT3ZlcnJpZGVNb21lbnR1bVNjcm9sbGluZygpIGNvbnN0OwotICAgIHZv
aWQgc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lckZpcmVkKCk7Ci0gICAgdm9pZCBzY2hlZHVs
ZVN0YXRlbGVzc1Njcm9sbFNuYXAoKTsKLSAgICB2b2lkIHN0YXJ0RGVmZXJyaW5nV2hlZWxFdmVu
dFRlc3RDb21wbGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygpOwotICAgIHZvaWQgc3RvcERlZmVy
cmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKLQotI2lm
IEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICB2b2lkIHN0YXJ0UnViYmVyYmFuZEFuaW1hdGlv
bigpOwotICAgIHZvaWQgc3RvcFNuYXBSdWJiZXJiYW5kQW5pbWF0aW9uKCk7Ci0KLSAgICB2b2lk
IHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFs
RGlyZWN0aW9uKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0OwotICAgIGJvb2wgc2hv
dWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgY29uc3Q7Ci0gICAgYm9v
bCBpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0
ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOwotICAgIHZvaWQgdXBkYXRlUnViYmVyQmFuZGluZ0VkZ2Vz
KEludFNpemUgY2xpZW50U3RyZXRjaCk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgdm9pZCBzdGFy
dE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpOwotCi0gICAgU2Nyb2xsQ29udHJvbGxlckNsaWVu
dCYgbV9jbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbFNuYXBBbmltYXRvclN0YXRl
PiBtX3Njcm9sbFNuYXBTdGF0ZTsKLSAgICBib29sIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlk
Q2hhbmdlIHsgZmFsc2UgfTsKLQotICAgIGJvb2wgbV9pc1J1bm5pbmdBbmltYXRpbmdDYWxsYmFj
ayB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcgeyBmYWxzZSB9OwotCi0jaWYgUExBVEZPUk0o
TUFDKQotICAgIFdhbGxUaW1lIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIEZs
b2F0U2l6ZSBtX292ZXJmbG93U2Nyb2xsRGVsdGE7Ci0gICAgRmxvYXRTaXplIG1fc3RyZXRjaFNj
cm9sbEZvcmNlOwotICAgIEZsb2F0U2l6ZSBtX21vbWVudHVtVmVsb2NpdHk7Ci0KLSAgICBib29s
IG1faW5TY3JvbGxHZXN0dXJlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fbW9tZW50dW1TY3JvbGxJ
blByb2dyZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlTW9tZW50dW1TY3JvbGxzIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1faXNSdWJiZXJCYW5kaW5nIHsgZmFsc2UgfTsKLQotICAgIEZs
b2F0U2l6ZSBtX2RyYWdFbmRlZFNjcm9sbGluZ1ZlbG9jaXR5OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lcjsK
LQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAvLyBSdWJiZXIgYmFuZCBzdGF0ZS4K
LSAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOwotICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3Ry
ZXRjaDsKLSAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7Ci0gICAgUmVjdEVkZ2VzPGJvb2w+
IG1fcnViYmVyQmFuZGluZ0VkZ2VzOwotI2VuZGlmCi0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IGJvb2wgbV90aW1lcnNXZXJlU3RvcHBlZCB7IGZhbHNlIH07Ci0jZW5kaWYKLSNlbmRpZgotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAppbmRleCA1YjViYTUzYWRiNDgyZTFhZjUzMmNjNmUwOWRh
ZTFjMzhkNTJhMmU0Li5iMzhjZTJhYjQ0NWVkNTExMzIxMWM1Yjg1YzQ0MTEzOTNmOGIxNzI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaApA
QCAtNzAsNyArNzAsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZv
clNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7CiAKLSAgICAvLyBT
Y3JvbGxDb250cm9sbGVyQ2xpZW50LgorICAgIC8vIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
Q2xpZW50LgogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICBJbnRTaXplIHN0cmV0Y2hB
bW91bnQoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGFsbG93c0hvcml6b250YWxTdHJldGNoaW5n
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggY2FjOWIyYjE0OWMzOWVjMGNlZjAwNTFiZDIxN2FmZDg0NmQ2Mzg5YS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDc4
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlNjcm9sbENvbnRyb2xsZXIuaCIKLQotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiUGxh
dGZvcm1XaGVlbEV2ZW50LmgiCi0jaW1wb3J0ICJXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCIKLSNp
bXBvcnQgPHBhbC9zcGkvbWFjL05TU2Nyb2xsVmlld1NQSS5oPgotI2ltcG9ydCA8c3lzL3N5c2N0
bC5oPgotI2ltcG9ydCA8c3lzL3RpbWUuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQotc3RhdGljIGNvbnN0IFNlY29uZHMgc2Nyb2xsVmVsb2NpdHla
ZXJvaW5nVGltZW91dCA9IDEwMF9tczsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kRGly
ZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbyA9IDE7Ci1zdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFu
ZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOwotI2VuZGlmCi0KLXN0YXRp
YyBmbG9hdCBlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoZmxvYXQgaW5pdGlhbFBvc2l0aW9uLCBm
bG9hdCBpbml0aWFsVmVsb2NpdHksIFNlY29uZHMgZWxhcHNlZFRpbWUpCi17Ci0gICAgcmV0dXJu
IF9OU0VsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShpbml0aWFsUG9zaXRpb24sIGluaXRpYWxWZWxv
Y2l0eSwgZWxhcHNlZFRpbWUuc2Vjb25kcygpKTsKLX0KLQotc3RhdGljIGZsb2F0IGVsYXN0aWNE
ZWx0YUZvclJlYm91bmREZWx0YShmbG9hdCBkZWx0YSkKLXsKLSAgICByZXR1cm4gX05TRWxhc3Rp
Y0RlbHRhRm9yUmVib3VuZERlbHRhKGRlbHRhKTsKLX0KLQotc3RhdGljIGZsb2F0IHJlYm91bmRE
ZWx0YUZvckVsYXN0aWNEZWx0YShmbG9hdCBkZWx0YSkKLXsKLSAgICByZXR1cm4gX05TUmVib3Vu
ZERlbHRhRm9yRWxhc3RpY0RlbHRhKGRlbHRhKTsKLX0KLQotc3RhdGljIGZsb2F0IHNjcm9sbFdo
ZWVsTXVsdGlwbGllcigpCi17Ci0gICAgc3RhdGljIGZsb2F0IG11bHRpcGxpZXIgPSAtMTsKLSAg
ICBpZiAobXVsdGlwbGllciA8IDApIHsKLSAgICAgICAgbXVsdGlwbGllciA9IFtbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGZsb2F0Rm9yS2V5OkAiTlNTY3JvbGxXaGVlbE11
bHRpcGxpZXIiXTsKLSAgICAgICAgaWYgKG11bHRpcGxpZXIgPD0gMCkKLSAgICAgICAgICAgIG11
bHRpcGxpZXIgPSAxOwotICAgIH0KLSAgICByZXR1cm4gbXVsdGlwbGllcjsKLX0KLQotU2Nyb2xs
Q29udHJvbGxlcjo6flNjcm9sbENvbnRyb2xsZXIoKQotewotICAgIEFTU0VSVChtX3RpbWVyc1dl
cmVTdG9wcGVkKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wQWxsVGltZXJzKCkK
LXsKLSAgICBpZiAobV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyKQotICAgICAgICBtX3N0
YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXItPnN0b3AoKTsKLQotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgbV90aW1lcnNXZXJlU3RvcHBlZCA9IHRydWU7Ci0jZW5kaWYKLX0KLQotYm9vbCBTY3Jv
bGxDb250cm9sbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYg
d2hlZWxFdmVudCkKLXsKLSAgICBpZiAocHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKHdo
ZWVsRXZlbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICh3aGVlbEV2ZW50LnBo
YXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok1heUJlZ2luIHx8IHdoZWVsRXZlbnQu
cGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2FuY2VsbGVkKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlOjpCZWdhbikgewotICAgICAgICAvLyBGSVhNRTogVHJ5aW5nIHRvIGRlY2lk
ZSBpZiBhIGdlc3R1cmUgaXMgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBhdCB0aGUgImJlZ2FuIiBw
aGFzZSBpcyB2ZXJ5IGVycm9yLXByb25lLgotICAgICAgICBhdXRvIGRpcmVjdGlvbiA9IGRpcmVj
dGlvbkZyb21FdmVudCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwot
ICAgICAgICBpZiAoZGlyZWN0aW9uICYmIG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEo
RmxvYXRTaXplKC13aGVlbEV2ZW50LmRlbHRhWCgpLCAwKSkgJiYgIXNob3VsZFJ1YmJlckJhbmRJ
bkRpcmVjdGlvbihkaXJlY3Rpb24udmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uRnJvbUV2ZW50KHdoZWVsRXZlbnQsIFNj
cm9sbEV2ZW50QXhpczo6VmVydGljYWwpOwotICAgICAgICBpZiAoZGlyZWN0aW9uICYmIG1fY2xp
ZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKDAsIC13aGVlbEV2ZW50LmRlbHRh
WSgpKSkgJiYgIXNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihkaXJlY3Rpb24udmFsdWUoKSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9tb21lbnR1bVNjcm9sbElu
UHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxz
ZTsKLSAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB7IH07Ci0gICAgICAg
IG1fbW9tZW50dW1WZWxvY2l0eSA9IHsgfTsKLQotICAgICAgICBJbnRTaXplIHN0cmV0Y2hBbW91
bnQgPSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCk7Ci0gICAgICAgIG1fc3RyZXRjaFNjcm9sbEZv
cmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50Lndp
ZHRoKCkpKTsKLSAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmRE
ZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50LmhlaWdodCgpKSk7Ci0gICAgICAgIG1f
b3ZlcmZsb3dTY3JvbGxEZWx0YSA9IHsgfTsKLQotICAgICAgICBzdG9wU25hcFJ1YmJlcmJhbmRB
bmltYXRpb24oKTsKLSAgICAgICAgdXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICh3aGVlbEV2ZW50LnBoYXNlKCkgPT0gUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHRy
aWdnZXJzIHRoZSBydWJiZXJiYW5kIHRpbWVyIGV2ZW4gd2hlbiB3ZSBkb24ndCBzdGFydCBydWJi
ZXJiYW5kaW5nLgotICAgICAgICBzbmFwUnViYmVyQmFuZCgpOwotICAgICAgICB1cGRhdGVSdWJi
ZXJCYW5kaW5nU3RhdGUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9v
bCBpc01vbWVudHVtU2Nyb2xsRXZlbnQgPSAod2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgIT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok5vbmUpOwotICAgIGlmIChtX2lnbm9yZU1vbWVudHVt
U2Nyb2xscyAmJiAoaXNNb21lbnR1bVNjcm9sbEV2ZW50IHx8IG1faXNBbmltYXRpbmdSdWJiZXJC
YW5kKSkgewotICAgICAgICBpZiAod2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgPT0gUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkKSB7Ci0gICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVt
U2Nyb2xscyA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoaXNNb21lbnR1bVNjcm9sbEV2ZW50ICYmIG1faWdub3JlTW9tZW50dW1TY3Jv
bGxzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgp
OwotICAgIGZsb2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKTsKLQot
ICAgIC8vIFJlc2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gcmVt
b3ZlIGRlbHRhIGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50byBvdmVyZmxvdy4KLSAg
ICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSB7IH07Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2hBbW91
bnQgPSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCk7Ci0gICAgYm9vbCBpc1ZlcnRpY2FsbHlTdHJl
dGNoZWQgPSBzdHJldGNoQW1vdW50LmhlaWdodCgpOwotICAgIGJvb2wgaXNIb3Jpem9udGFsbHlT
dHJldGNoZWQgPSBzdHJldGNoQW1vdW50LndpZHRoKCk7Ci0KLSAgICBmbG9hdCBldmVudENvYWxl
c2NlZERlbHRhWDsKLSAgICBmbG9hdCBldmVudENvYWxlc2NlZERlbHRhWTsKLQotICAgIGlmIChp
c1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsKLSAgICAg
ICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVudC51bmFjY2VsZXJhdGVkU2Nyb2xs
aW5nRGVsdGFYKCk7Ci0gICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gLXdoZWVsRXZlbnQu
dW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGV2
ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQuZGVsdGFYKCk7Ci0gICAgICAgIGV2ZW50
Q29hbGVzY2VkRGVsdGFZID0gLXdoZWVsRXZlbnQuZGVsdGFZKCk7Ci0gICAgfQotCi0gICAgZGVs
dGFYICs9IGV2ZW50Q29hbGVzY2VkRGVsdGFYOwotICAgIGRlbHRhWSArPSBldmVudENvYWxlc2Nl
ZERlbHRhWTsKLQotICAgIC8vIFNsaWdodGx5IHByZWZlciBzY3JvbGxpbmcgdmVydGljYWxseSBi
eSBhcHBseWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQotICAgIC8vIEZJWE1FOiBVc2Ugd2hlZWxE
ZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwoKS4KLSAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBm
YWJzZihkZWx0YVgpKQotICAgICAgICBkZWx0YVggPSAwOwotICAgIGVsc2UKLSAgICAgICAgZGVs
dGFZID0gMDsKLQotICAgIGJvb2wgc2hvdWxkU3RyZXRjaCA9IGZhbHNlOwotCi0gICAgUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSA9IHdoZWVsRXZlbnQubW9tZW50dW1QaGFz
ZSgpOwotCi0gICAgLy8gSWYgd2UgYXJlIHN0YXJ0aW5nIG1vbWVudHVtIHNjcm9sbGluZyB0aGVu
IGRvIHNvbWUgc2V0dXAuCi0gICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAo
bW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW4gfHwgbW9tZW50
dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2hhbmdlZCkpCi0gICAgICAgIG1f
bW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gdHJ1ZTsKLQotICAgIGF1dG8gdGltZURlbHRhID0g
d2hlZWxFdmVudC50aW1lc3RhbXAoKSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwot
ICAgIGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykg
ewotICAgICAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRh
ID4gMF9zICYmIHRpbWVEZWx0YSA8IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpIHsKLSAg
ICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eS5zZXRXaWR0aChldmVudENvYWxlc2NlZERlbHRh
WCAvIHRpbWVEZWx0YS5zZWNvbmRzKCkpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5
LnNldEhlaWdodChldmVudENvYWxlc2NlZERlbHRhWSAvIHRpbWVEZWx0YS5zZWNvbmRzKCkpOwot
ICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRp
bWVzdGFtcCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1T
Y3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAgICAgbV9t
b21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
aXNWZXJ0aWNhbGx5U3RyZXRjaGVkKSB7Ci0gICAgICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbGx5
U3RyZXRjaGVkICYmIG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKGRl
bHRhWCwgMCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSB2
ZXJ0aWNhbC4KLSAgICAgICAgICAgICAgICBpZiAoZGVsdGFZICYmIChmYWJzZihkZWx0YVggLyBk
ZWx0YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQotICAgICAgICAg
ICAgICAgICAgICBkZWx0YVggPSAwOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRl
bHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJm
bG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICAgICAgICAgIGRl
bHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1f
b3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgo
KSArIGRlbHRhWCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNIb3Jpem9u
dGFsbHlTdHJldGNoZWQpIHsKLSAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUg
aG9yaXpvbnRhbC4KLSAgICAgICAgICAgIGlmIChtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERl
bHRhKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKSkgewotICAgICAgICAgICAgICAgIGlmIChkZWx0YVgg
JiYgKGZhYnNmKGRlbHRhWSAvIGRlbHRhWCkgPCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0
Y2hSYXRpbykpCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAoZmFic2YoZGVsdGFZKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0
YUJlZm9yZVN0cmV0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERl
bHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOwot
ICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVpZ2h0KG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBOb3Qgc3RyZXRjaGluZyBhdCBhbGwgeWV0Lgot
ICAgICAgICAgICAgaWYgKG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXpl
KGRlbHRhWCwgZGVsdGFZKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFZKSA+
PSBmYWJzZihkZWx0YVgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmYWJzZihkZWx0YVgp
IDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZs
b3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxE
ZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIW1fY2xpZW50LmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKHdoZWVsRXZlbnQp
KQotICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOwotCi0gICAgICAgICAgICAgICAgaWYg
KCFtX2NsaWVudC5hbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpCi0gICAgICAg
ICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0KLSAgICAgICAgICAgICAgICBzaG91bGRTdHJldGNo
ID0gZGVsdGFYIHx8IGRlbHRhWTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlcjo6
aGFuZGxlV2hlZWxFdmVudCgpIC0gZGVsdGFYICIgPDwgZGVsdGFYIDw8ICIgZGVsdGFZICIgPDwg
ZGVsdGFZIDw8ICIgcGlubmVkICIgPDwgbV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShG
bG9hdFNpemUoZGVsdGFYLCBkZWx0YVkpKSA8PCAiIHNob3VsZFN0cmV0Y2ggIiA8PCBzaG91bGRT
dHJldGNoKTsKLSAgICB9Ci0KLSAgICBib29sIGhhbmRsZWQgPSB0cnVlOwotCi0gICAgaWYgKGRl
bHRhWCB8fCBkZWx0YVkpIHsKLSAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRp
Y2FsbHlTdHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7Ci0gICAgICAgICAg
ICBpZiAoZGVsdGFZKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVs
dGlwbGllcigpOwotICAgICAgICAgICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5KEZs
b2F0U2l6ZSgwLCBkZWx0YVkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkZWx0
YVgpIHsKLSAgICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7
Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQuaW1tZWRpYXRlU2Nyb2xsQnkoRmxvYXRTaXplKGRl
bHRhWCwgMCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKGRlbHRhWCkgewotICAgICAgICAgICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dzSG9yaXpv
bnRhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFY
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAwOwotICAg
ICAgICAgICAgICAgICAgICBoYW5kbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmICghaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgJiYgIW1fY2xpZW50LmlzUGlubmVkRm9yU2Ny
b2xsRGVsdGEoRmxvYXRTaXplKGRlbHRhWCwgMCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRl
bHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICBt
X2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZs
b2F0U2l6ZShkZWx0YVgsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkZWx0YVkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmFsbG93c1ZlcnRpY2FsU3RyZXRjaGlu
Zyh3aGVlbEV2ZW50KSkgewotICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAg
ICAgICAgICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgIGhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1ZlcnRp
Y2FsbHlTdHJldGNoZWQgJiYgIW1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRT
aXplKDAsIGRlbHRhWSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxX
aGVlbE11bHRpcGxpZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC5pbW1lZGlh
dGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZSgwLCBkZWx0
YVkpKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1f
Y2xpZW50LnN0cmV0Y2hBbW91bnQoKTsKLQotICAgICAgICAgICAgaWYgKG1fbW9tZW50dW1TY3Jv
bGxJblByb2dyZXNzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChtX2NsaWVudC5pc1Bpbm5lZEZv
clNjcm9sbERlbHRhKEZsb2F0U2l6ZShldmVudENvYWxlc2NlZERlbHRhWCwgZXZlbnRDb2FsZXNj
ZWREZWx0YVkpKSB8fCAoZmFic2YoZXZlbnRDb2FsZXNjZWREZWx0YVgpICsgZmFic2YoZXZlbnRD
b2FsZXNjZWREZWx0YVkpIDw9IDApKSAmJiBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCkg
ewotICAgICAgICAgICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgIHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0
aChtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgIG1f
c3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQo
KSArIGRlbHRhWSk7Ci0KLSAgICAgICAgICAgIEZsb2F0U2l6ZSBkYW1wZWREZWx0YShjZWlsZihl
bGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSkp
LCBjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uu
aGVpZ2h0KCkpKSk7Ci0KLSAgICAgICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5V2l0
aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoZGFtcGVkRGVsdGEgLSBzdHJldGNoQW1vdW50KTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAm
JiBtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZCkgewotICAg
ICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAgICBtX2lnbm9y
ZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOwotICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRp
bWVzdGFtcCA9IHsgfTsKLSAgICB9Ci0KLSAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsK
LQotICAgIHJldHVybiBoYW5kbGVkOwotfQotCi1GbG9hdFNpemUgU2Nyb2xsQ29udHJvbGxlcjo6
d2hlZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiB3aGVlbEV2ZW50KQotewotICAgIGF1dG8gZGVsdGFYID0gd2hlZWxFdmVudC5kZWx0YVgoKTsK
LSAgICBhdXRvIGRlbHRhWSA9IHdoZWVsRXZlbnQuZGVsdGFZKCk7Ci0KLSAgICBpZiAoZmFic2Yo
ZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKQotICAgICAgICBkZWx0YVggPSAwOwotICAgIGVsc2UK
LSAgICAgICAgZGVsdGFZID0gMDsKLQotICAgIHJldHVybiB7IGRlbHRhWCwgZGVsdGFZIH07Ci19
Ci0KLXN0ZDo6b3B0aW9uYWw8U2Nyb2xsRGlyZWN0aW9uPiBTY3JvbGxDb250cm9sbGVyOjpkaXJl
Y3Rpb25Gcm9tRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBzdGQ6
Om9wdGlvbmFsPFNjcm9sbEV2ZW50QXhpcz4gYXhpcywgV2hlZWxBeGlzQmlhcyBiaWFzKQotewot
ICAgIC8vIEZJWE1FOiBJdCdzIGltcG9zc2libGUgdG8gaW5mZXIgZGlyZWN0aW9uIGZyb20gYSBz
aW5nbGUgZXZlbnQsIHNpbmNlIHRoZSBzdGFydCBvZiBhIGdlc3R1cmUgaXMgZWl0aGVyIHplcm8g
b3IKLSAgICAvLyBoYXMgc21hbGwgZGVsdGFzIG9uIGJvdGggYXhlcy4KLQotICAgIGF1dG8gd2hl
ZWxEZWx0YSA9IEZsb2F0U2l6ZSB7IHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVs
dGFZKCkgfTsKLSAgICBpZiAoYmlhcyA9PSBXaGVlbEF4aXNCaWFzOjpWZXJ0aWNhbCkKLSAgICAg
ICAgd2hlZWxEZWx0YSA9IHdoZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRpY2FsKHdoZWVsRXZl
bnQpOwotCi0gICAgaWYgKGF4aXMpIHsKLSAgICAgICAgc3dpdGNoIChheGlzLnZhbHVlKCkpIHsK
LSAgICAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsOgotICAgICAgICAgICAgaWYg
KHdoZWVsRGVsdGEuaGVpZ2h0KCkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBTY3JvbGxE
b3duOwotCi0gICAgICAgICAgICBpZiAod2hlZWxEZWx0YS5oZWlnaHQoKSA+IDApCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFNjcm9sbFVwOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWw6Ci0gICAgICAgICAgICBpZiAod2hlZWxE
ZWx0YS53aWR0aCgpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsTGVmdDsKLQot
ICAgICAgICAgICAgaWYgKHdoZWVsRGVsdGEud2lkdGgoKSA8IDApCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFNjcm9sbFJpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBZIGZpcnN0IGJlY2F1c2UgdmVydGljYWwgc2Ny
b2xsaW5nIGRvbWluYXRlcy4KLSAgICBpZiAod2hlZWxEZWx0YS5oZWlnaHQoKSA8IDApCi0gICAg
ICAgIHJldHVybiBTY3JvbGxEb3duOwotCi0gICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0KCkgPiAw
KQotICAgICAgICByZXR1cm4gU2Nyb2xsVXA7Ci0KLSAgICBpZiAod2hlZWxEZWx0YS53aWR0aCgp
ID4gMCkKLSAgICAgICAgcmV0dXJuIFNjcm9sbExlZnQ7Ci0KLSAgICBpZiAod2hlZWxEZWx0YS53
aWR0aCgpIDwgMCkKLSAgICAgICAgcmV0dXJuIFNjcm9sbFJpZ2h0OwotCi0gICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLX0KLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLXN0YXRpYyBpbmxp
bmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51bSkKLXsKLSAgICByZXR1cm4gbnVtID4g
MCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51bSArIDAuNWYpOwotfQotCi1zdGF0aWMg
aW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZmxvYXQgbnVtKQotewot
ICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVtKTsKLSAgICBpZiAoZmFicyhudW0gLSBy
b3VuZGVkTnVtKSA8IDAuMTI1KQotICAgICAgICBudW0gPSByb3VuZGVkTnVtOwotCi0gICAgcmV0
dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVw
ZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lKQot
ewotICAgIGlmICghbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xs
ZXI6OnVwZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0ZSgpIC0gbWFpbiB0aHJlYWQgIiA8PCBp
c01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzIHx8
IG1faWdub3JlTW9tZW50dW1TY3JvbGxzKSB7Ci0gICAgICAgIGF1dG8gdGltZURlbHRhID0gY3Vy
cmVudFRpbWUgLSBtX3N0YXJ0VGltZTsKLQotICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2guaXNa
ZXJvKCkpIHsKLSAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gbV9jbGllbnQuc3RyZXRjaEFt
b3VudCgpOwotICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgc3RvcFJ1YmJlcmJhbmRpbmcoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gbV9t
b21lbnR1bVZlbG9jaXR5OwotCi0gICAgICAgICAgICAvLyBKdXN0IGxpa2Ugbm9ybWFsIHNjcm9s
bGluZywgcHJlZmVyIHZlcnRpY2FsIHJ1YmJlcmJhbmRpbmcKLSAgICAgICAgICAgIGlmIChmYWJz
ZihtX29yaWdWZWxvY2l0eS5oZWlnaHQoKSkgPj0gZmFic2YobV9vcmlnVmVsb2NpdHkud2lkdGgo
KSkpCi0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0V2lkdGgoMCk7Ci0KLSAgICAg
ICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5kIGhvcml6b250YWxseSBpZiBpdCdzIG5vdCBwb3Nz
aWJsZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5Ci0gICAgICAgICAgICBpZiAoIW1fY2xpZW50LmFs
bG93c0hvcml6b250YWxTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0
eS5zZXRXaWR0aCgwKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgcnViYmVyLWJhbmQgdmVydGlj
YWxseSBpZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzY3JvbGwgdmVydGljYWxseQotICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5hbGxvd3NWZXJ0aWNhbFNjcm9sbGluZygpKQotICAgICAgICAgICAg
ICAgIG1fb3JpZ1ZlbG9jaXR5LnNldEhlaWdodCgwKTsKLSAgICAgICAgfQotCi0gICAgICAgIEZs
b2F0UG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFG
b3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRo
KCksIHRpbWVEZWx0YSkpLAotICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVy
byhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1tX29y
aWdWZWxvY2l0eS5oZWlnaHQoKSwgdGltZURlbHRhKSkpOwotCi0gICAgICAgIGlmIChmYWJzKGRl
bHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnkoKSkgPj0gMSkgewotICAgICAgICAgICAgbV9j
bGllbnQuaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhGbG9h
dFNpemUoZGVsdGEueCgpLCBkZWx0YS55KCkpIC0gbV9jbGllbnQuc3RyZXRjaEFtb3VudCgpKTsK
LQotICAgICAgICAgICAgRmxvYXRTaXplIG5ld1N0cmV0Y2ggPSBtX2NsaWVudC5zdHJldGNoQW1v
dW50KCk7Ci0KLSAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91
bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLndpZHRoKCkpKTsKLSAgICAgICAgICAg
IG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVs
dGEobmV3U3RyZXRjaC5oZWlnaHQoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
bV9jbGllbnQuYWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCk7Ci0gICAg
ICAgICAgICBzdG9wUnViYmVyYmFuZGluZygpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgbV9zdGFydFRpbWUgPSBjdXJyZW50VGltZTsKLSAgICAgICAgbV9zdGFydFN0cmV0Y2gg
PSB7IH07Ci0gICAgICAgIGlmICghaXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVybmFsKCkpCi0g
ICAgICAgICAgICBzdG9wU25hcFJ1YmJlcmJhbmRBbmltYXRpb24oKTsKLSAgICB9Ci0KLSAgICB1
cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKLX0KLSNlbmRpZgotCi12b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpCi17Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOwotI2VuZGlmCi19Ci0KLWJvb2wg
U2Nyb2xsQ29udHJvbGxlcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1faW5TY3JvbGxHZXN0dXJlOwotfQotCi1ib29sIFNjcm9sbENvbnRyb2xsZXI6Omlz
UnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAotewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKLSAgICByZXR1cm4gbV9pc1J1YmJlckJhbmRpbmc7Ci0jZWxzZQotICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZgotfQotCi1ib29sIFNjcm9sbENvbnRyb2xsZXI6OmlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3MoKSBjb25zdAotewotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKG1faW5TY3JvbGxHZXN0dXJlIHx8IG1fbW9tZW50dW1TY3Jv
bGxJblByb2dyZXNzIHx8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpz
dG9wUnViYmVyYmFuZGluZygpCi17Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIHN0
b3BTbmFwUnViYmVyYmFuZEFuaW1hdGlvbigpOwotICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0g
eyB9OwotICAgIG1fc3RhcnRUaW1lID0geyB9OwotICAgIG1fc3RhcnRTdHJldGNoID0geyB9Owot
ICAgIG1fb3JpZ1ZlbG9jaXR5ID0geyB9OwotICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgp
OwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi12b2lkIFNjcm9sbENv
bnRyb2xsZXI6OnN0YXJ0UnViYmVyYmFuZEFuaW1hdGlvbigpCi17Ci0gICAgbV9jbGllbnQud2ls
bFN0YXJ0UnViYmVyQmFuZFNuYXBBbmltYXRpb24oKTsKLQotICAgIHNldElzQW5pbWF0aW5nUnVi
YmVyQmFuZCh0cnVlKTsKLQotICAgIG1fY2xpZW50LmRlZmVyV2hlZWxFdmVudFRlc3RDb21wbGV0
aW9uRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3Jv
bGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlJ1YmJl
cmJhbmRJblByb2dyZXNzKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wU25hcFJ1
YmJlcmJhbmRBbmltYXRpb24oKQotewotICAgIG1fY2xpZW50LmRpZFN0b3BSdWJiZXJiYW5kU25h
cEFuaW1hdGlvbigpOwotCi0gICAgc2V0SXNBbmltYXRpbmdSdWJiZXJCYW5kKGZhbHNlKTsKLQot
ICAgIG1fY2xpZW50LnJlbW92ZVdoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkRlZmVycmFsRm9yUmVh
c29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJl
YUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlJ1YmJlcmJhbmRJblBy
b2dyZXNzKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzbmFwUnViYmVyQmFuZCgpCi17
Ci0gICAgYXV0byB0aW1lRGVsdGEgPSBXYWxsVGltZTo6bm93KCkgLSBtX2xhc3RNb21lbnR1bVNj
cm9sbFRpbWVzdGFtcDsKLSAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYg
dGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCi0gICAgICAgIG1fbW9t
ZW50dW1WZWxvY2l0eSA9IHsgfTsKLQotICAgIGlmIChtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3co
KTsKLSAgICBtX3N0YXJ0U3RyZXRjaCA9IHsgfTsKLSAgICBtX29yaWdWZWxvY2l0eSA9IHsgfTsK
LQotICAgIHN0YXJ0UnViYmVyYmFuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIFNjcm9sbENvbnRy
b2xsZXI6OnNob3VsZFJ1YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24oY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KSBjb25zdAotewotICAgIGF1dG8gZGlyZWN0aW9uID0g
ZGlyZWN0aW9uRnJvbUV2ZW50KHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCk7Ci0gICAgaWYgKGRpcmVjdGlvbikKLSAgICAgICAgcmV0dXJuIHNob3VsZFJ1YmJlckJhbmRJ
bkRpcmVjdGlvbihkaXJlY3Rpb24udmFsdWUoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBTY3JvbGxDb250cm9sbGVyOjpzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xs
RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jbGllbnQuc2hvdWxk
UnViYmVyQmFuZEluRGlyZWN0aW9uKGRpcmVjdGlvbik7Ci19Ci0KLWJvb2wgU2Nyb2xsQ29udHJv
bGxlcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVybmFsKCkgY29uc3QKLXsKLSAgICBpZiAo
IW1faW5TY3JvbGxHZXN0dXJlICYmICFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAhbV9p
c0FuaW1hdGluZ1J1YmJlckJhbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biAhbV9jbGllbnQuc3RyZXRjaEFtb3VudCgpLmlzWmVybygpOwotfQotCi12b2lkIFNjcm9sbENv
bnRyb2xsZXI6OnVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpCi17Ci0gICAgYm9vbCBpc1J1YmJl
ckJhbmRpbmcgPSBpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKTsKLSAgICBpZiAoaXNS
dWJiZXJCYW5kaW5nID09IG1faXNSdWJiZXJCYW5kaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2lzUnViYmVyQmFuZGluZyA9IGlzUnViYmVyQmFuZGluZzsKLSAgICBpZiAobV9pc1J1YmJl
ckJhbmRpbmcpCi0gICAgICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdlcyhtX2NsaWVudC5zdHJl
dGNoQW1vdW50KCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9ydWJiZXJCYW5kaW5nRWRnZXMgPSB7
IH07Ci0KLSAgICBtX2NsaWVudC5ydWJiZXJCYW5kaW5nU3RhdGVDaGFuZ2VkKG1faXNSdWJiZXJC
YW5kaW5nKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVSdWJiZXJCYW5kaW5n
RWRnZXMoSW50U2l6ZSBjbGllbnRTdHJldGNoKQotewotICAgIG1fcnViYmVyQmFuZGluZ0VkZ2Vz
LnNldExlZnQoY2xpZW50U3RyZXRjaC53aWR0aCgpIDwgMCk7Ci0gICAgbV9ydWJiZXJCYW5kaW5n
RWRnZXMuc2V0UmlnaHQoY2xpZW50U3RyZXRjaC53aWR0aCgpID4gMCk7Ci0KLSAgICBtX3J1YmJl
ckJhbmRpbmdFZGdlcy5zZXRUb3AoY2xpZW50U3RyZXRjaC5oZWlnaHQoKSA8IDApOwotICAgIG1f
cnViYmVyQmFuZGluZ0VkZ2VzLnNldEJvdHRvbShjbGllbnRTdHJldGNoLmhlaWdodCgpID4gMCk7
Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0KLWVudW0gY2xhc3MgV2hl
ZWxFdmVudFN0YXR1cyB7Ci0gICAgVXNlclNjcm9sbEJlZ2luLAotICAgIFVzZXJTY3JvbGxpbmcs
Ci0gICAgVXNlclNjcm9sbEVuZCwKLSAgICBNb21lbnR1bVNjcm9sbEJlZ2luLAotICAgIE1vbWVu
dHVtU2Nyb2xsaW5nLAotICAgIE1vbWVudHVtU2Nyb2xsRW5kLAotICAgIFN0YXRlbGVzc1Njcm9s
bEV2ZW50LAotICAgIFVua25vd24KLX07Ci0KLXN0YXRpYyBpbmxpbmUgV2hlZWxFdmVudFN0YXR1
cyB0b1doZWVsRXZlbnRTdGF0dXMoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UsIFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2UpCi17Ci0gICAgaWYgKHBoYXNlID09IFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlOjpOb25lKSB7Ci0gICAgICAgIHN3aXRjaCAobW9tZW50dW1Q
aGFzZSkgewotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpCZWdhbjoKLSAg
ICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbEJlZ2luOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpD
aGFuZ2VkOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Ny
b2xsaW5nOwotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlOjpFbmRlZDoKLSAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpNb21l
bnR1bVNjcm9sbEVuZDsKLQotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpO
b25lOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlN0YXRlbGVzc1Njcm9s
bEV2ZW50OwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVu
dFN0YXR1czo6VW5rbm93bjsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobW9tZW50dW1QaGFz
ZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Tm9uZSkgewotICAgICAgICBzd2l0Y2ggKHBo
YXNlKSB7Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkJlZ2FuOgotICAg
ICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpNYXlCZWdpbjoKLSAgICAgICAgICAg
IHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVnaW47Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNoYW5nZWQ6Ci0gICAg
ICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGluZzsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQ6Ci0g
ICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNhbmNlbGxlZDoKLSAgICAgICAg
ICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsRW5kOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0
dXM6OlVua25vd247Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0
dXM6OlVua25vd247Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgV2hlZWxFdmVudFN0YXR1cyBzdGF0dXMpCi17Ci0g
ICAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3Jv
bGxCZWdpbjogdHMgPDwgIlVzZXJTY3JvbGxCZWdpbiI7IGJyZWFrOwotICAgIGNhc2UgV2hlZWxF
dmVudFN0YXR1czo6VXNlclNjcm9sbGluZzogdHMgPDwgIlVzZXJTY3JvbGxpbmciOyBicmVhazsK
LSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ6IHRzIDw8ICJVc2VyU2Ny
b2xsRW5kIjsgYnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9s
bEJlZ2luOiB0cyA8PCAiTW9tZW50dW1TY3JvbGxCZWdpbiI7IGJyZWFrOwotICAgIGNhc2UgV2hl
ZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxpbmc6IHRzIDw8ICJNb21lbnR1bVNjcm9sbGlu
ZyI7IGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxFbmQ6
IHRzIDw8ICJNb21lbnR1bVNjcm9sbEVuZCI7IGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0
YXR1czo6U3RhdGVsZXNzU2Nyb2xsRXZlbnQ6IHRzIDw8ICJTdGF0ZWxlc3NTY3JvbGxFdmVudCI7
IGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjogdHMgPDwgIlVua25v
d24iOyBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQotI2VuZGlmCi0KLWJvb2wgU2Ny
b2xsQ29udHJvbGxlcjo6c2hvdWxkT3ZlcnJpZGVNb21lbnR1bVNjcm9sbGluZygpIGNvbnN0Ci17
Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBTY3JvbGxTbmFwU3RhdGUgc2Nyb2xsU25hcFN0YXRlID0gbV9zY3JvbGxTbmFwU3RhdGUtPmN1
cnJlbnRTdGF0ZSgpOwotICAgIHJldHVybiBzY3JvbGxTbmFwU3RhdGUgPT0gU2Nyb2xsU25hcFN0
YXRlOjpHbGlkaW5nIHx8IHNjcm9sbFNuYXBTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkRlc3Rp
bmF0aW9uUmVhY2hlZDsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzY2hlZHVsZVN0YXRl
bGVzc1Njcm9sbFNuYXAoKQotewotICAgIHN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCk7Ci0gICAg
aWYgKG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lcikgewotICAgICAgICBtX3N0YXRlbGVz
c1NuYXBUcmFuc2l0aW9uVGltZXItPnN0b3AoKTsKLSAgICAgICAgbV9zdGF0ZWxlc3NTbmFwVHJh
bnNpdGlvblRpbWVyID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyBzdGF0ZWxlc3NT
Y3JvbGxTbmFwRGVsYXkgPSA3NTBfbXM7Ci0gICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRp
bWVyID0gbV9jbGllbnQuY3JlYXRlVGltZXIoW3RoaXNdIHsKLSAgICAgICAgc3RhdGVsZXNzU25h
cFRyYW5zaXRpb25UaW1lckZpcmVkKCk7Ci0gICAgfSk7Ci0gICAgbV9zdGF0ZWxlc3NTbmFwVHJh
bnNpdGlvblRpbWVyLT5zdGFydE9uZVNob3Qoc3RhdGVsZXNzU2Nyb2xsU25hcERlbGF5KTsKLSAg
ICBzdGFydERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBp
bmcoKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdGF0ZWxlc3NTbmFwVHJhbnNpdGlv
blRpbWVyRmlyZWQoKQotewotICAgIG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lciA9IG51
bGxwdHI7Ci0KLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9TbmFwQW5pbWF0aW9uU3RhdGUobV9j
bGllbnQuc2Nyb2xsRXh0ZW50KCksIG1fY2xpZW50LnZpZXdwb3J0U2l6ZSgpLCBtX2NsaWVudC5w
YWdlU2NhbGVGYWN0b3IoKSwgbV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkpOwotICAgIHN0YXJ0U2Ny
b2xsU25hcEFuaW1hdGlvbigpOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0RGVm
ZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygpCi17Ci0g
ICAgbV9jbGllbnQuZGVmZXJXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25Gb3JSZWFzb24ocmVpbnRl
cnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmll
cj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsU25hcEluUHJvZ3Jlc3MpOwot
fQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BEZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENv
bXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKCkKLXsKLSAgICBtX2NsaWVudC5yZW1vdmVXaGVl
bEV2ZW50VGVzdENvbXBsZXRpb25EZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdo
ZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hl
ZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxTbmFwSW5Qcm9ncmVzcyk7Ci19Ci0KLWJvb2wgU2Ny
b2xsQ29udHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3Njcm9sbFNuYXBTdGF0ZS0+c25h
cE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkuaXNFbXB0eSgpICYm
IG1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpW
ZXJ0aWNhbCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHN0
YXR1cyA9IHRvV2hlZWxFdmVudFN0YXR1cyh3aGVlbEV2ZW50LnBoYXNlKCksIHdoZWVsRXZlbnQu
bW9tZW50dW1QaGFzZSgpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJl
YW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgcHJvY2Vzc1doZWVsRXZlbnRG
b3JTY3JvbGxTbmFwOiBzdGF0dXMgIiA8PCBzdGF0dXMpOwotCi0gICAgYm9vbCBpc01vbWVudHVt
U2Nyb2xsaW5nID0gZmFsc2U7Ci0gICAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICBjYXNlIFdoZWVs
RXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxCZWdpbjoKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6
OlVzZXJTY3JvbGxpbmc6Ci0gICAgICAgIHN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCk7Ci0gICAg
ICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZSgp
OwotICAgICAgICBtX2RyYWdFbmRlZFNjcm9sbGluZ1ZlbG9jaXR5ID0gLXdoZWVsRXZlbnQuc2Ny
b2xsaW5nVmVsb2NpdHkoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3Rh
dHVzOjpVc2VyU2Nyb2xsRW5kOgotICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlv
blRvU25hcEFuaW1hdGlvblN0YXRlKG1fY2xpZW50LnNjcm9sbEV4dGVudCgpLCBtX2NsaWVudC52
aWV3cG9ydFNpemUoKSwgbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCksIG1fY2xpZW50LnNjcm9s
bE9mZnNldCgpKTsKLSAgICAgICAgc3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxCZWdpbjoK
LSAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnRyYW5zaXRpb25Ub0dsaWRlQW5pbWF0aW9uU3Rh
dGUobV9jbGllbnQuc2Nyb2xsRXh0ZW50KCksIG1fY2xpZW50LnZpZXdwb3J0U2l6ZSgpLCBtX2Ns
aWVudC5wYWdlU2NhbGVGYWN0b3IoKSwgbV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCksIG1fZHJhZ0Vu
ZGVkU2Nyb2xsaW5nVmVsb2NpdHksIEZsb2F0U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgoKSwgLXdo
ZWVsRXZlbnQuZGVsdGFZKCkpKTsKLSAgICAgICAgbV9kcmFnRW5kZWRTY3JvbGxpbmdWZWxvY2l0
eSA9IHsgfTsKLSAgICAgICAgaXNNb21lbnR1bVNjcm9sbGluZyA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxpbmc6Ci0gICAg
Y2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbEVuZDoKLSAgICAgICAgaXNNb21l
bnR1bVNjcm9sbGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVu
dFN0YXR1czo6U3RhdGVsZXNzU2Nyb2xsRXZlbnQ6Ci0gICAgICAgIG1fc2Nyb2xsU25hcFN0YXRl
LT50cmFuc2l0aW9uVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZSgpOwotICAgICAgICBzY2hlZHVsZVN0
YXRlbGVzc1Njcm9sbFNuYXAoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2ZW50
U3RhdHVzOjpVbmtub3duOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlzTW9tZW50dW1TY3JvbGxpbmcgJiYgc2hvdWxk
T3ZlcnJpZGVNb21lbnR1bVNjcm9sbGluZygpOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6
OnVwZGF0ZUdlc3R1cmVJblByb2dyZXNzU3RhdGUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3
aGVlbEV2ZW50KQotewotICAgIGlmICh3aGVlbEV2ZW50LmlzR2VzdHVyZVN0YXJ0KCkgfHwgd2hl
ZWxFdmVudC5pc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkpCi0gICAgICAgIG1faW5T
Y3JvbGxHZXN0dXJlID0gdHJ1ZTsKLSAgICBlbHNlIGlmICh3aGVlbEV2ZW50LmlzRW5kT2ZOb25N
b21lbnR1bVNjcm9sbCgpIHx8IHdoZWVsRXZlbnQuaXNHZXN0dXJlQ2FuY2VsKCkgfHwgd2hlZWxF
dmVudC5pc0VuZE9mTW9tZW50dW1TY3JvbGwoKSkKLSAgICAgICAgbV9pblNjcm9sbEdlc3R1cmUg
PSBmYWxzZTsKLQotICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOwotfQotCi12b2lkIFNj
cm9sbENvbnRyb2xsZXI6OnN0YXJ0U2Nyb2xsU25hcEFuaW1hdGlvbigpCi17Ci0gICAgaWYgKG1f
aXNBbmltYXRpbmdTY3JvbGxTbmFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8
PCAiIHN0YXJ0U2Nyb2xsU25hcEFuaW1hdGlvbiAobWFpbiB0aHJlYWQgIiA8PCBpc01haW5UaHJl
YWQoKSA8PCAiKSIpOwotCi0gICAgc3RhcnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRp
b25EdWVUb1Njcm9sbFNuYXBwaW5nKCk7Ci0gICAgbV9jbGllbnQud2lsbFN0YXJ0U2Nyb2xsU25h
cEFuaW1hdGlvbigpOwotICAgIHNldElzQW5pbWF0aW5nU2Nyb2xsU25hcCh0cnVlKTsKLX0KLQot
dm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpCi17Ci0gICAg
aWYgKCFtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxlciAiIDw8
IHRoaXMgPDwgIiBzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbiAobWFpbiB0aHJlYWQgIiA8PCBpc01h
aW5UaHJlYWQoKSA8PCAiKSIpOwotCi0gICAgc3RvcERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29t
cGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKLSAgICBtX2NsaWVudC5kaWRTdG9wU2Nyb2xs
U25hcEFuaW1hdGlvbigpOwotCi0gICAgc2V0SXNBbmltYXRpbmdTY3JvbGxTbmFwKGZhbHNlKTsK
LX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwQW5pbWF0aW5nU3Rh
dGUoTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKLXsKLSAgICBpZiAoIW1faXNBbmltYXRpbmdT
Y3JvbGxTbmFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkp
IHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBib29sIGlzQW5pbWF0aW9uQ29tcGxldGU7Ci0gICAgYXV0byBhbmltYXRpb25PZmZz
ZXQgPSBtX3Njcm9sbFNuYXBTdGF0ZS0+Y3VycmVudEFuaW1hdGVkU2Nyb2xsT2Zmc2V0KGN1cnJl
bnRUaW1lLCBpc0FuaW1hdGlvbkNvbXBsZXRlKTsKLSAgICBhdXRvIGN1cnJlbnRPZmZzZXQgPSBt
X2NsaWVudC5zY3JvbGxPZmZzZXQoKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFw
LCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgdXBkYXRlU2Nyb2xs
U25hcEFuaW1hdGluZ1N0YXRlIC0gaXNBbmltYXRpb25Db21wbGV0ZSAiIDw8IGlzQW5pbWF0aW9u
Q29tcGxldGUgPDwgIiBjdXJyZW50T2Zmc2V0ICIgPDwgY3VycmVudE9mZnNldCA8PCAiIChtYWlu
IHRocmVhZCAiIDw8IGlzTWFpblRocmVhZCgpIDw8ICIpIik7Ci0KLSAgICBtX2NsaWVudC5pbW1l
ZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZShhbmlt
YXRpb25PZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCksIGFuaW1hdGlvbk9mZnNldC55KCkg
LSBjdXJyZW50T2Zmc2V0LnkoKSkpOwotICAgIGlmIChpc0FuaW1hdGlvbkNvbXBsZXRlKSB7Ci0g
ICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9EZXN0aW5hdGlvblJlYWNoZWRT
dGF0ZSgpOwotICAgICAgICBzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpOwotICAgIH0KLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQo=
</data>
<flag name="commit-queue"
          id="461596"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438271</attachid>
            <date>2021-09-15 11:58:26 -0700</date>
            <delta_ts>2021-09-15 16:50:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230312-20210915115825.patch</filename>
            <type>text/plain</type>
            <size>126488</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWVkM2VlMjc0M2EyYjNi
M2I2NWFlMGIxMzJkMTk5ZmMxNjcxM2VlMy4uN2FiYjQwZjg2NDczY2I4ZjBjYTI0MDBhMzcyZjFm
Y2U2ODhlNzBkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDIxLTA5LTE1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBTY3Jv
bGxDb250cm9sbGVyIHRvIFNjb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDMxMgorCisgICAgICAgIFJldmll
d2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgU2Nyb2xsQ29udHJvbGxlciBpcyBhYm91dCBy
dWJiZXJiYW5kaW5nLCBtb21lbnR1bSBldGMsIHdoaWNoIGFyZSBzY3JvbGxpbmcgImVmZmVjdHMi
LAorICAgICAgICBzbyByZW5hbWUgdG8gU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuCisKKyAg
ICAgICAgU2Nyb2xsQ29udHJvbGxlciBpcyB0aGUgbmFtZSBJIHdhbnQgdG8gdWx0aW1hdGVseSB1
c2UgZm9yIFNjcm9sbEFuaW1hdG9yLgorCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6Cisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzY3JvbGxh
YmxlQXJlYUNhbkhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5oOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c3Rh
cnRBbmltYXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlTWFjOjpzdG9wQW5pbWF0aW9uQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6YWxsb3dzSG9y
aXpvbnRhbFN0cmV0Y2hpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OktleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3I6OktleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0
b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c3RhcnRBbmltYXRpb25DYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c3RvcEFuaW1hdGlvbkNhbGxiYWNrKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
RWZmZWN0c0NvbnRyb2xsZXI6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjphbmltYXRpb25DYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3RhcnRPclN0
b3BBbmltYXRpb25DYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0
c0NvbnRyb2xsZXI6OmJlZ2luS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0b3BLZXlib2FyZFNjcm9sbGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2V0SXNBbmltYXRpbmdS
dWJiZXJCYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
OjpzZXRJc0FuaW1hdGluZ1Njcm9sbFNuYXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
RWZmZWN0c0NvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnVzZXNTY3JvbGxTbmFw
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpz
ZXRTbmFwT2Zmc2V0c0luZm8pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0Nv
bnRyb2xsZXI6OnNuYXBPZmZzZXRzSW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2V0QWN0
aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlcjo6c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OmFkanVz
dFNjcm9sbERlc3RpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyOjp1cGRhdGVBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JDbGllbnRPZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnJlc25hcEFmdGVy
TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1
cGRhdGVLZXlib2FyZFNjcm9sbGluZ0FuaW1hdGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp+U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0b3BBbGxU
aW1lcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNj
cm9sbFBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3Rz
Q29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1cGRhdGVSdWJiZXJCYW5kQW5pbWF0
aW5nU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVy
LmguCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLm1t
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xs
ZXIubW0uCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6flNj
cm9sbGluZ0VmZmVjdHNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyOjpzdG9wQWxsVGltZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp3aGVlbERlbHRhQmlhc2luZ1Rvd2FyZHNW
ZXJ0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6
ZGlyZWN0aW9uRnJvbUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyOjp1cGRhdGVSdWJiZXJCYW5kQW5pbWF0aW5nU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6aXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3Rz
Q29udHJvbGxlcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3Rv
cFJ1YmJlcmJhbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRy
b2xsZXI6OnN0YXJ0UnViYmVyYmFuZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3RvcFNuYXBSdWJiZXJiYW5kQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzbmFwUnViYmVyQmFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2hvdWxk
UnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpp
c1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6dXBkYXRlUnViYmVy
QmFuZGluZ0VkZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9s
bGVyOjpzaG91bGRPdmVycmlkZU1vbWVudHVtU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzY2hlZHVsZVN0YXRlbGVzc1Njcm9s
bFNuYXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0
YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3RhcnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBs
ZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyOjpzdG9wRGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVl
VG9TY3JvbGxTbmFwcGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdFZmZlY3RzQ29u
dHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1cGRhdGVHZXN0dXJlSW5Qcm9ncmVzc1N0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdGFy
dFNjcm9sbFNuYXBBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nRWZmZWN0
c0NvbnRyb2xsZXI6OnN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwQW5pbWF0aW5nU3Rh
dGUpOgorCiAyMDIxLTA5LTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIE1vdmUgc2Nyb2xsYmFyLXJlbGF0ZWQgY29kZSBvdXQgb2YgU2Nyb2xsQW5p
bWF0b3IgYW5kIGludG8gU2Nyb2xsYmFyc0NvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKaW5kZXggMDU2Y2EyN2Y3ZjI3YTI0YzE5NDRjMDE4NWM2MjU3NGQwZGRkOGEyZC4uOTBkYmUx
MmQ5N2NhMDA0Njk1NjA1MmQ5YWI1YmJjYjk0MDI5MjlkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UKQEAgLTM3NCw3ICszNzQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9tYWMvUHVibGljU3VmZml4TWFjLm1tCiAgICAgcGxhdGZvcm0vbWFjL1NTTEtl
eUdlbmVyYXRvck1hYy5tbQogICAgIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQot
ICAgIHBsYXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1tCisgICAgcGxhdGZvcm0vbWFjL1Nj
cm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLm1tCiAgICAgcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdN
YWMubW0KICAgICBwbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KICAgICBwbGF0Zm9y
bS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZU1hYy5tbQpAQCAtNTU0LDcgKzU1NCw3IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL01haW5UaHJlYWRTaGFyZWRUaW1lci5oCiAgICAgcGxhdGZvcm0vUGljdHVyZUluUGljdHVy
ZVN1cHBvcnQuaAogICAgIHBsYXRmb3JtL1BsYXRmb3JtQ29udGVudEZpbHRlci5oCi0gICAgcGxh
dGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCisgICAgcGxhdGZvcm0vU2Nyb2xsaW5nRWZmZWN0c0Nv
bnRyb2xsZXIuaAogICAgIHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKICAgICBw
bGF0Zm9ybS9TaGFyZWRUaW1lci5oCiAgICAgcGxhdGZvcm0vU3lzdGVtU291bmRNYW5hZ2VyLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggZGQ5MzRiMDcyOWE4MjdlYzRjZjM5YjhiYjU5YTI2ZmM4YjE3ZWY2
Yy4uNGRkZjJiMTY2N2RiODczNTZhN2Y4MzZkMWFjNTAzYmM3N2M4MjViMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTE4MTIsNyArMTgxMiw3IEBAIHBsYXRmb3JtL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNr
cy5jcHAKIHBsYXRmb3JtL1NTTEtleUdlbmVyYXRvci5jcHAKIHBsYXRmb3JtL1Njcm9sbEFuaW1h
dGlvblNtb290aC5jcHAKIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAotcGxhdGZvcm0vU2Ny
b2xsQ29udHJvbGxlci5jcHAKK3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmNw
cAogcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwCiBwbGF0Zm9ybS9TY3JvbGxU
eXBlcy5jcHAKIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApp
bmRleCBkZjFlY2ZhMjZhMmMwN2E2ZTYyYjVhNzViN2E1YWQyMTk4YjVhOGI0Li41YzRhYWM4YzJk
YjQ1OWI1NjgyNzYyMWRjNjMzMzRhNWZjMzg2NDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQK
QEAgLTQ4OSw3ICs0ODksNyBAQCBwbGF0Zm9ybS9tYWMvUG93ZXJPYnNlcnZlck1hYy5jcHAKIHBs
YXRmb3JtL21hYy9QdWJsaWNTdWZmaXhNYWMubW0KIHBsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0
b3JNYWMubW0KIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBAbm8tdW5pZnkKLXBs
YXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1tCitwbGF0Zm9ybS9tYWMvU2Nyb2xsaW5nRWZm
ZWN0c0NvbnRyb2xsZXIubW0KIHBsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1tCiBwbGF0Zm9y
bS9tYWMvU2Nyb2xsYmFyc0NvbnRyb2xsZXJNYWMubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9tYWMv
U2Nyb2xsYmFyVGhlbWVNYWMubW0gQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmY0MzhlMGFjNjJlYjhkY2QyYTFl
OWRiYWRkNTNmOGMwNWY2Zjk5NC4uMGEzZmYwZTVjOGU3YmIzYjk0ZDEyNzE3NDRhOGY1ZjlkZDk1
NDIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMjAwMSw3ICsyMDAxLDcgQEAKIAkJNUE1NzRGMjUxMzFEQjkzOTAwNDcxQjg4
IC8qIFJlbmRlclF1b3RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QTU3NEYyMzEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCAqLzsgfTsK
IAkJNUE1NzRGMjkxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVBNTc0RjI3MTMxREI5NkQwMDQ3MUI4
OCAvKiBRdW90ZXNEYXRhLmggKi87IH07CiAJCTVCMzA2OTVFMThCM0QzNDUwMDk5RDVFOCAvKiBX
ZWJHTERyYXdCdWZmZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QjMwNjk1QjE4QjNEMzQ1MDA5OUQ1RTggLyogV2ViR0xEcmF3QnVmZmVycy5oICov
OyB9OwotCQk1QjQ2NjU2MzI1RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI0NjY1NUYyNUQx
NEMwOTAwMENGRTE0IC8qIFNjcm9sbENvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1QjQ2NjU2MzI1RDE0QzBBMDAwQ0ZFMTQgLyog
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVCNDY2NTVGMjVEMTRDMDkwMDBDRkUxNCAvKiBTY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTVCNDY2NTY0MjVEMTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUI0NjY1NjAyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUMyQjFBRUMy
MjM5N0VCQzAwQjkxQ0Y3IC8qIFJlc291cmNlUmVzcG9uc2VDb2NvYS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExRjc4RDBCMUMyNTQyMkMwMDI0NTQ0
NiAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gKi87IH07CiAJCTVDNDMwNEIxMTkxQUM5MDgw
MDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzQzMDRBRTE5MUFDOTA4MDAwRTJCQzAgLyogRVhUU2hh
ZGVyVGV4dHVyZUxPRC5oICovOyB9OwpAQCAtOTcxNywxMyArOTcxNywxMyBAQAogCQk1QTU3NEYy
NjEzMURCOTZEMDA0NzFCODggLyogUXVvdGVzRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBRdW90ZXNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUE1NzRGMjcxMzFEQjk2RDAwNDcxQjg4IC8qIFF1b3Rlc0RhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVvdGVzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1QTkxNDY5RThFOUY4NDg1QzM3QTI4NzYgLyogSlNTVkdHcmFwaGljc0VsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHR3JhcGhp
Y3NFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUIxRTBFNDMyNUQx
NjI5QjAwMjcyMjgxIC8qIFNjcm9sbENvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBTY3JvbGxDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjFF
MEU0MzI1RDE2MjlCMDAyNzIyODEgLyogU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUIzMDY5NUExOEIzRDM0NTAwOTlENUU4IC8qIFdlYkdM
RHJhd0J1ZmZlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
R0xEcmF3QnVmZmVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCMzA2OTVC
MThCM0QzNDUwMDk5RDVFOCAvKiBXZWJHTERyYXdCdWZmZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkdMRHJhd0J1ZmZlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUIzMDY5NUMxOEIzRDM0NTAwOTlENUU4IC8qIFdlYkdMRHJhd0J1ZmZlcnMuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYkdMRHJhd0J1ZmZlcnMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1QjQ2NjU1RDI1RDE0QzA5MDAwQ0ZFMTQgLyogU2Nyb2xsU25h
cEFuaW1hdG9yU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1QjQ2NjU1RTI1RDE0QzA5MDAwQ0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxDb250cm9sbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUI0NjY1NUYyNUQxNEMwOTAwMENGRTE0IC8qIFNj
cm9sbENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xs
Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjQ2NjU1RTI1RDE0
QzA5MDAwQ0ZFMTQgLyogU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjQ2NjU1RjI1RDE0QzA5MDAwQ0ZFMTQg
LyogU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUI0NjY1NjAyNUQxNEMwQTAwMENGRTE0IC8qIFNjcm9sbFNuYXBBbmltYXRv
clN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbFNuYXBBbmlt
YXRvclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCN0FCOUY2MjU2N0RC
N0UwMDY1OTJEMCAvKiBTY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMwMDE1MjEyNTAwMTEwMDAwOTRBQTkzIC8qIFRleHRDb2Rl
Y1NpbmdsZUJ5dGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4
dENvZGVjU2luZ2xlQnl0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAz
Niw3ICsyMjAzNiw3IEBACiAJCQkJMEYwMjI0NTMyNkYxNUQ3NTAwMDI2NUMzIC8qIFNjcm9sbGJh
cnNDb250cm9sbGVyTWFjLm1tICovLAogCQkJCUJDOEI4NTNDMEU3QzdGMTEwMEFCNjk4NCAvKiBT
Y3JvbGxiYXJUaGVtZU1hYy5oICovLAogCQkJCUJDRUY4NjlFMEU4NDRFOUQwMEE4NUNENSAvKiBT
Y3JvbGxiYXJUaGVtZU1hYy5tbSAqLywKLQkJCQk1QjFFMEU0MzI1RDE2MjlCMDAyNzIyODEgLyog
U2Nyb2xsQ29udHJvbGxlci5tbSAqLywKKwkJCQk1QjFFMEU0MzI1RDE2MjlCMDAyNzIyODEgLyog
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0gKi8sCiAJCQkJOTM1MzY3NkEwOUFFRDg4QjAw
RDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMubW0gKi8sCiAJCQkJMDc3QUYxNDExOEY0QjFCQjAwMDFF
RDYxIC8qIFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVNYWMuaCAqLywKIAkJCQkwNzdBRjE0MjE4
RjRCMUJCMDAwMUVENjEgLyogU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZU1hYy5tbSAqLywKQEAg
LTI3OTk3LDggKzI3OTk3LDggQEAKIAkJCQlCQzhCODU0QTBFN0M3RjU2MDBBQjY5ODQgLyogU2Ny
b2xsYmFyVGhlbWUuaCAqLywKIAkJCQlCQzE0MDI4ODBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xs
YmFyVGhlbWVDb21wb3NpdGUuY3BwICovLAogCQkJCUJDMTQwMjg5MEU4MzY4MDgwMDMxOTcxNyAv
KiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oICovLAotCQkJCTVCNDY2NTVFMjVEMTRDMDkwMDBD
RkUxNCAvKiBTY3JvbGxDb250cm9sbGVyLmNwcCAqLywKLQkJCQk1QjQ2NjU1RjI1RDE0QzA5MDAw
Q0ZFMTQgLyogU2Nyb2xsQ29udHJvbGxlci5oICovLAorCQkJCTVCNDY2NTVFMjVEMTRDMDkwMDBD
RkUxNCAvKiBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5jcHAgKi8sCisJCQkJNUI0NjY1NUYy
NUQxNEMwOTAwMENGRTE0IC8qIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmggKi8sCiAJCQkJ
NUI0NjY1NUQyNUQxNEMwOTAwMENGRTE0IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcCAq
LywKIAkJCQk1QjQ2NjU2MDI1RDE0QzBBMDAwQ0ZFMTQgLyogU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUuaCAqLywKIAkJCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3Bw
ICovLApAQCAtMzQ3NTgsMTEgKzM0NzU4LDExIEBACiAJCQkJQkM4Qjg1M0UwRTdDN0YxMTAwQUI2
OTg0IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU3MTQwNjE0
MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4M0M1Nzk1RDFEQTVDMzAxMDA2RkFDODYgLyogU2Nyb2xsQmVoYXZpb3IuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTVCNDY2NTYzMjVEMTRDMEEwMDBDRkUxNCAvKiBTY3JvbGxDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjYwNUFFRDE1Rjk0ODQ4MDA0REYwQzAgLyogU2Nyb2xsaW5n
Q29uc3RyYWludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjYyRUU4MTREQTIyQTcwMDQxNTU2
QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MUE5OTEx
NjI3NDZDQjAwMjk3MzMwIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3MTJEQkE0OTIxRjhBRDgzMDA4RjM2QjIgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JU
eXBlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUI0NjY1NjMyNUQxNEMwQTAwMENGRTE0IC8qIFNj
cm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUM2MUIwQjFE
RTUzNkU3MDA4QTIxMkQgLyogU2Nyb2xsaW5nTW9tZW50dW1DYWxjdWxhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTdERUVFODFERTk0QjA4MDBCOTE2NDQgLyogU2Nyb2xsaW5nTW9tZW50dW1D
YWxjdWxhdG9yTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0MzOEJGRjE2NDQ3M0M3MDAwOTFF
QjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGI2YTE2Nzc0YzdiYTNlNmYyNTgwNmJhOGI2NGFk
YjE5OTk2Yjk3OTYuLmZiOWZkN2FiZGY1ZTUwNzI5YzQ2OGQ1ZjZkMWQzMjY1ZmE1NzgzNmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTMwNjYsNyArMzA2Niw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0Jv
eChOb2RlKiBzdGFydE5vZGUsIGNvCiBib29sIEV2ZW50SGFuZGxlcjo6c2Nyb2xsYWJsZUFyZWFD
YW5IYW5kbGVFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9s
bGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKIHsKICNpZiBQTEFURk9STShNQUMpCi0gICAgYXV0
byBiaWFzZWREZWx0YSA9IFNjcm9sbENvbnRyb2xsZXI6OndoZWVsRGVsdGFCaWFzaW5nVG93YXJk
c1ZlcnRpY2FsKHdoZWVsRXZlbnQpOworICAgIGF1dG8gYmlhc2VkRGVsdGEgPSBTY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlcjo6d2hlZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwod2hlZWxF
dmVudCk7CiAjZWxzZQogICAgIGF1dG8gYmlhc2VkRGVsdGEgPSB3aGVlbEV2ZW50LmRlbHRhKCk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5o
CmluZGV4IDZkYTdkOGQ2ZmYzMGRlYjJmMmI3M2E0MTRlODI5NWYzNjYyODUxODEuLmE5MDhlNTRj
ODc5ZDQwOGI3MDBhNTliY2NmNzFhOTBjNDAzYTEyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRl
TWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMuaApAQCAtMjksNyArMjksNyBAQAogCiAjaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oTUFDKQogCi0jaW5jbHVkZSAiU2Nyb2xs
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogT0JKQ19DTEFTUyBOU1Njcm9sbGVySW1wOwpAQCAt
NDMsNyArNDMsNyBAQCBjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7CiBjbGFzcyBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1RyZWU7CiAKLWNsYXNz
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMgOiBwdWJsaWMgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZSwgcHJpdmF0ZSBTY3JvbGxDb250cm9sbGVyQ2xpZW50
IHsKK2NsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMgOiBwdWJsaWMg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZSwgcHJpdmF0ZSBTY3JvbGxpbmdFZmZl
Y3RzQ29udHJvbGxlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYyhTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSYpOwog
ICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMoKTsKQEAg
LTcwLDEwICs3MCwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaXNQaW5uZWRGb3JT
Y3JvbGxEZWx0YU9uQXhpcyhmbG9hdCBzY3JvbGxEZWx0YSwgU2Nyb2xsRXZlbnRBeGlzLCBmbG9h
dCBzY3JvbGxMaW1pdCA9IDApIGNvbnN0OwogCi0gICAgLy8gU2Nyb2xsQ29udHJvbGxlckNsaWVu
dC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQ29udHJvbGxlclRpbWVyPiBjcmVhdGVUaW1l
cihGdW5jdGlvbjx2b2lkKCk+JiYpIGZpbmFsOwotICAgIHZvaWQgc3RhcnRBbmltYXRpb25DYWxs
YmFjayhTY3JvbGxDb250cm9sbGVyJikgZmluYWw7Ci0gICAgdm9pZCBzdG9wQW5pbWF0aW9uQ2Fs
bGJhY2soU2Nyb2xsQ29udHJvbGxlciYpIGZpbmFsOworICAgIC8vIFNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyQ2xpZW50LgorICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxpbmdFZmZlY3RzQ29u
dHJvbGxlclRpbWVyPiBjcmVhdGVUaW1lcihGdW5jdGlvbjx2b2lkKCk+JiYpIGZpbmFsOworICAg
IHZvaWQgc3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciYp
IGZpbmFsOworICAgIHZvaWQgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyJikgZmluYWw7CiAKICAgICBib29sIGFsbG93c0hvcml6b250YWxTdHJldGNoaW5n
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgYWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IGZpbmFs
OwpAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlbGVhc2VSZWZlcmVu
Y2VzVG9TY3JvbGxlckltcHNPblRoZU1haW5UaHJlYWQoKTsKIAotICAgIFNjcm9sbENvbnRyb2xs
ZXIgbV9zY3JvbGxDb250cm9sbGVyOworICAgIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyIG1f
c2Nyb2xsQ29udHJvbGxlcjsKIAogICAgIFJldGFpblB0cjxOU1Njcm9sbGVySW1wPiBtX3ZlcnRp
Y2FsU2Nyb2xsZXJJbXA7CiAgICAgUmV0YWluUHRyPE5TU2Nyb2xsZXJJbXA+IG1faG9yaXpvbnRh
bFNjcm9sbGVySW1wOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYy5tbQppbmRleCAyNjMzMmUzNDU0OGQ3YTkxYzk3ZWVlYTkyNWU2NTEzYzRkODhmZjI4Li5j
OGE3YmNmYmI5NTZkN2QxNjUwZDgxODg0ZTk4ZTcwMzcxOGZiMWE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQpAQCAtMjEzLDE1ICsyMTMsMTUg
QEAgYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjppc1Bpbm5lZEZv
clNjcm9sbERlbHRhT25BeGlzKGZsb2F0IHMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVNYWM6OmNyZWF0ZVRpbWVyKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikK
K3N0ZDo6dW5pcXVlX3B0cjxTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlclRpbWVyPiBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjpjcmVhdGVUaW1lcihGdW5jdGlvbjx2b2lk
KCk+JiYgZnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxTY3JvbGxDb250
cm9sbGVyVGltZXI+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgW2Z1bmN0aW9uID0gV1RGTW92ZShmdW5j
dGlvbiksIHByb3RlY3RlZE5vZGUgPSBtYWtlUmVmKHNjcm9sbGluZ05vZGUoKSldIHsKKyAgICBy
ZXR1cm4gV1RGOjptYWtlVW5pcXVlPFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyVGltZXI+KFJ1
bkxvb3A6OmN1cnJlbnQoKSwgW2Z1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbiksIHByb3RlY3Rl
ZE5vZGUgPSBtYWtlUmVmKHNjcm9sbGluZ05vZGUoKSldIHsKICAgICAgICAgTG9ja2VyIGxvY2tl
ciB7IHByb3RlY3RlZE5vZGUtPnNjcm9sbGluZ1RyZWUoKS50cmVlTG9jaygpIH07CiAgICAgICAg
IGZ1bmN0aW9uKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZU1hYzo6c3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikK
K3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c3RhcnRBbmltYXRp
b25DYWxsYmFjayhTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciYpCiB7CiAgICAgaWYgKCFtX3Nj
cm9sbENvbnRyb2xsZXJBbmltYXRpb25UaW1lcikKICAgICAgICAgbV9zY3JvbGxDb250cm9sbGVy
QW5pbWF0aW9uVGltZXIgPSBXVEY6Om1ha2VVbmlxdWU8UnVuTG9vcDo6VGltZXI8U2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYz4+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywg
JlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnNjcm9sbENvbnRyb2xsZXJB
bmltYXRpb25UaW1lckZpcmVkKTsKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OnN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xs
Q29udHJvbAogICAgIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyLT5zdGFydFJlcGVh
dGluZygxX3MgLyA2MC4pOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVNYWM6OnN0b3BBbmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikKK3ZvaWQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6c3RvcEFuaW1hdGlvbkNhbGxi
YWNrKFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyJikKIHsKICAgICBpZiAobV9zY3JvbGxDb250
cm9sbGVyQW5pbWF0aW9uVGltZXIpCiAgICAgICAgIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlv
blRpbWVyLT5zdG9wKCk7CkBAIC0yNTQsNyArMjU0LDcgQEAgYm9vbCBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlTWFjOjphbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQ
bGEKICAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDogewotICAgICAgICBhdXRvIHNjcm9s
bERpcmVjdGlvbiA9IFNjcm9sbENvbnRyb2xsZXI6OmRpcmVjdGlvbkZyb21FdmVudCh3aGVlbEV2
ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOworICAgICAgICBhdXRvIHNjcm9sbERp
cmVjdGlvbiA9IFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpkaXJlY3Rpb25Gcm9tRXZlbnQo
d2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKICAgICAgICAgaWYgKHNj
cm9sbERpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBzaG91bGRSdWJiZXJCYW5kSW5EaXJl
Y3Rpb24oc2Nyb2xsRGlyZWN0aW9uLnZhbHVlKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTI3Niw3ICsyNzYsNyBAQCBib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWM6OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyhjb25zdCBQbGF0ZgogICAgIGNhc2UgU2Nyb2xs
RWxhc3RpY2l0eU5vbmU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIFNjcm9sbEVs
YXN0aWNpdHlBbGxvd2VkOiB7Ci0gICAgICAgIGF1dG8gc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xs
Q29udHJvbGxlcjo6ZGlyZWN0aW9uRnJvbUV2ZW50KHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhp
czo6VmVydGljYWwpOworICAgICAgICBhdXRvIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbGluZ0Vm
ZmVjdHNDb250cm9sbGVyOjpkaXJlY3Rpb25Gcm9tRXZlbnQod2hlZWxFdmVudCwgU2Nyb2xsRXZl
bnRBeGlzOjpWZXJ0aWNhbCk7CiAgICAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24pCiAgICAgICAg
ICAgICByZXR1cm4gc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKHNjcm9sbERpcmVjdGlvbi52
YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9LZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCmluZGV4IGM4ZjBlNjczZjJh
MmUyMDBkMjU0MjFmY2Y4YzZjMGE5ZmIzMGE3YmQuLmQ2MDc3ODFlNzk1OTUwN2E1YjgxODM3OGFl
Yjc0YjdkN2UyZDVjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJv
YXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjo6S2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvcihTY3JvbGxBbmltYXRvciYgc2Nyb2xsQW5pbWF0b3IsIFNjcm9sbENvbnRyb2xs
ZXImIHNjcm9sbENvbnRyb2xsZXIpCitLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yOjpLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yKFNjcm9sbEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvciwgU2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXImIHNjcm9sbENvbnRyb2xsZXIpCiAgICAgOiBtX3Njcm9sbEFu
aW1hdG9yKHNjcm9sbEFuaW1hdG9yKQogICAgICwgbV9zY3JvbGxDb250cm9sbGVyKHNjcm9sbENv
bnRyb2xsZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXlib2FyZFNj
cm9sbGluZ0FuaW1hdG9yLmgKaW5kZXggODMyYjkxYmJmOTVhZjI0ODBiMTA3YjdkNzhlZGQ1ZTYy
N2RiZTMyNy4uZDNlNmQ0ZDhiOTgyODI4N2FkY2MwZjE0NjljODQ3MWI5M2EyZThlOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Iu
aApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBLZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yKFNjcm9sbEFuaW1hdG9yJiwgU2Nyb2xsQ29udHJvbGxlciYpOworICAgIEtleWJvYXJk
U2Nyb2xsaW5nQW5pbWF0b3IoU2Nyb2xsQW5pbWF0b3ImLCBTY3JvbGxpbmdFZmZlY3RzQ29udHJv
bGxlciYpOwogCiAgICAgYm9vbCBiZWdpbktleWJvYXJkU2Nyb2xsR2VzdHVyZShLZXlib2FyZEV2
ZW50Jik7CiAgICAgdm9pZCBoYW5kbGVLZXlVcEV2ZW50KCk7CkBAIC00OSw3ICs0OSw3IEBAIHBy
aXZhdGU6CiAgICAgZmxvYXQgc2Nyb2xsRGlzdGFuY2UoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSkgY29uc3Q7CiAKICAgICBTY3JvbGxBbmltYXRvciYgbV9zY3JvbGxBbmltYXRv
cjsKLSAgICBTY3JvbGxDb250cm9sbGVyJiBtX3Njcm9sbENvbnRyb2xsZXI7CisgICAgU2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXImIG1fc2Nyb2xsQ29udHJvbGxlcjsKICAgICBzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OktleWJvYXJkU2Nyb2xsPiBtX2N1cnJlbnRLZXlib2FyZFNjcm9sbDsKICAg
ICBib29sIG1fc2Nyb2xsVHJpZ2dlcmluZ0tleUlzUHJlc3NlZCB7IGZhbHNlIH07CiAgICAgRmxv
YXRTaXplIG1fdmVsb2NpdHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5jcHAKaW5kZXggODBlMDExOTk3NDJkZjRkZGQxN2MwZTEyOTcyOTM3NWQ0ZmQxNGIzZC4uY2Vk
ZDk2ODBjMzljNGZiN2MxNmFkYWU4MDBiMWQ1NDk2NzNjNDVlMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtMzcsOCArMzcsOCBAQAogI2luY2x1ZGUg
IkxheW91dFNpemUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRl
ICJTY3JvbGxBbmltYXRpb25TbW9vdGguaCIKLSNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdFZmZlY3Rz
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMzIxLDE2ICszMjEsMTYgQEAgZmxvYXQgU2Nyb2xsQW5pbWF0b3I6OnBhZ2VTY2FsZUZh
Y3RvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEucGFnZVNjYWxlRmFjdG9y
KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IFNjcm9sbEFu
aW1hdG9yOjpjcmVhdGVUaW1lcihGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCitzdGQ6OnVu
aXF1ZV9wdHI8U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXJUaW1lcj4gU2Nyb2xsQW5pbWF0b3I6
OmNyZWF0ZVRpbWVyKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKIHsKLSAgICByZXR1cm4g
V1RGOjptYWtlVW5pcXVlPFNjcm9sbENvbnRyb2xsZXJUaW1lcj4oUnVuTG9vcDo6Y3VycmVudCgp
LCBbZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKSwgd2Vha1Njcm9sbGFibGVBcmVhID0gbWFr
ZVdlYWtQdHIobV9zY3JvbGxhYmxlQXJlYSldIHsKKyAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVl
PFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyVGltZXI+KFJ1bkxvb3A6OmN1cnJlbnQoKSwgW2Z1
bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbiksIHdlYWtTY3JvbGxhYmxlQXJlYSA9IG1ha2VXZWFr
UHRyKG1fc2Nyb2xsYWJsZUFyZWEpXSB7CiAgICAgICAgIGlmICghd2Vha1Njcm9sbGFibGVBcmVh
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBmdW5jdGlvbigpOwogICAgIH0pOwogfQog
Ci12b2lkIFNjcm9sbEFuaW1hdG9yOjpzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRy
b2xsZXImKQordm9pZCBTY3JvbGxBbmltYXRvcjo6c3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlciYpCiB7CiAgICAgaWYgKG1fc2Nyb2xsQ29udHJvbGxlckFu
aW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMzOCw3ICszMzgs
NyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjpzdGFydEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbENv
bnRyb2xsZXImKQogICAgIG1fc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyLnN0YXJ0UmVw
ZWF0aW5nKDFfcyAvIDYwLik7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3I6OnN0b3BBbmltYXRp
b25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnN0b3BB
bmltYXRpb25DYWxsYmFjayhTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciYpCiB7CiAgICAgbV9z
Y3JvbGxDb250cm9sbGVyQW5pbWF0aW9uVGltZXIuc3RvcCgpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggYTMzYTBiYzlmNWJiMWE2Mzc0ZWQ5ZDBhMjE5
Y2I5YmFiZGNhMWE0Zi4uNTQzYWU2MTk1NzEwYjAwZGYxZmM5MDQxNzRlMGJjZGQ1NzY0ZjQzMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0zMyw3ICszMyw3
IEBACiAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2
ZW50LmgiCi0jaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcm9sbGlu
Z0VmZmVjdHNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJXaGVl
bEV2ZW50VGVzdE1vbml0b3IuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgpAQCAtNDks
OSArNDksOSBAQCBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhcjsKIGNsYXNz
IFdoZWVsRXZlbnRUZXN0TW9uaXRvcjsKIAotY2xhc3MgU2Nyb2xsQ29udHJvbGxlclRpbWVyOwor
Y2xhc3MgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXJUaW1lcjsKIAotY2xhc3MgU2Nyb2xsQW5p
bWF0b3IgOiBwcml2YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgeworY2xhc3MgU2Nyb2xsQW5p
bWF0b3IgOiBwcml2YXRlIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyQ2xpZW50IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFNjcm9sbEFuaW1hdG9yPiBjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmKTsKQEAgLTExMSwxMCAr
MTExLDEwIEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IGFkanVzdFNjcm9sbE9mZnNldEZvclNu
YXBwaW5nSWZOZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0LCBTY3JvbGxTbmFwUG9pbnRT
ZWxlY3Rpb25NZXRob2QpOwogICAgIGZsb2F0IGFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5n
SWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBGbG9hdFBvaW50JiBuZXdPZmZzZXQsIFNj
cm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Ny
b2xsQ29udHJvbGxlclRpbWVyPiBjcmVhdGVUaW1lcihGdW5jdGlvbjx2b2lkKCk+JiYpIGZpbmFs
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlclRpbWVyPiBj
cmVhdGVUaW1lcihGdW5jdGlvbjx2b2lkKCk+JiYpIGZpbmFsOwogCi0gICAgdm9pZCBzdGFydEFu
aW1hdGlvbkNhbGxiYWNrKFNjcm9sbENvbnRyb2xsZXImKSBmaW5hbDsKLSAgICB2b2lkIHN0b3BB
bmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9sbGVyJikgZmluYWw7CisgICAgdm9pZCBzdGFy
dEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyJikgZmluYWw7Cisg
ICAgdm9pZCBzdG9wQW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIm
KSBmaW5hbDsKIAogICAgIHZvaWQgc2Nyb2xsQ29udHJvbGxlckFuaW1hdGlvblRpbWVyRmlyZWQo
KTsKIApAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBMYXlvdXRTY3JvbGxT
bmFwT2Zmc2V0c0luZm8qIHNuYXBPZmZzZXRzSW5mbygpIGNvbnN0OwogICAgIHZvaWQgcmVzbmFw
QWZ0ZXJMYXlvdXQoKTsKIAotICAgIC8vIFNjcm9sbENvbnRyb2xsZXJDbGllbnQuCisgICAgLy8g
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXJDbGllbnQuCiAgICAgRmxvYXRQb2ludCBzY3JvbGxP
ZmZzZXQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhT
Y3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRhKSBvdmVycmlkZTsKICAgICBmbG9hdCBwYWdlU2Nh
bGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKQEAgLTE0OCw3ICsxNDgsNyBAQCBwcm90ZWN0ZWQ6
CiAKICAgICBTY3JvbGxhYmxlQXJlYSYgbV9zY3JvbGxhYmxlQXJlYTsKICAgICBSZWZQdHI8V2hl
ZWxFdmVudFRlc3RNb25pdG9yPiBtX3doZWVsRXZlbnRUZXN0TW9uaXRvcjsKLSAgICBTY3JvbGxD
b250cm9sbGVyIG1fc2Nyb2xsQ29udHJvbGxlcjsKKyAgICBTY3JvbGxpbmdFZmZlY3RzQ29udHJv
bGxlciBtX3Njcm9sbENvbnRyb2xsZXI7CiAgICAgVGltZXIgbV9zY3JvbGxDb250cm9sbGVyQW5p
bWF0aW9uVGltZXI7CiAgICAgRmxvYXRQb2ludCBtX2N1cnJlbnRQb3NpdGlvbjsKICAgICBib29s
IG1faGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2M2RmN2M0OGM2ZTY5MDNkYzRjMDZkYzIwN2Y3NWNmNDRkZmM4ZjVhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxD
b250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLmgiCi0j
aW5jbHVkZSAiTGF5b3V0U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5o
IgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCi0jaW5jbHVkZSAiV2hlZWxFdmVudFRlc3RN
b25pdG9yLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVNjcm9sbENvbnRyb2xsZXI6OlNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29u
dHJvbGxlckNsaWVudCYgY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQotewotfQotCi12
b2lkIFNjcm9sbENvbnRyb2xsZXI6OmFuaW1hdGlvbkNhbGxiYWNrKE1vbm90b25pY1RpbWUgY3Vy
cmVudFRpbWUpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJT
Y3JvbGxDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIGFuaW1hdGlvbkNhbGxiYWNrOiBpc0FuaW1h
dGluZ1J1YmJlckJhbmQgIiA8PCBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCA8PCAiIGlzQW5pbWF0
aW5nU2Nyb2xsU25hcCAiIDw8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwIDw8ICJpc0FuaW1hdGlu
Z0tleWJvYXJkU2Nyb2xsaW5nIiA8PCBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcpOwot
Ci0gICAgdXBkYXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKGN1cnJlbnRUaW1lKTsKLSAgICB1
cGRhdGVSdWJiZXJCYW5kQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOwotICAgIHVwZGF0ZUtl
eWJvYXJkU2Nyb2xsaW5nQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUpOwotfQotCi12b2lkIFNj
cm9sbENvbnRyb2xsZXI6OnN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCkKLXsKLSAgICBi
b29sIG5lZWRzQ2FsbGJhY2tzID0gbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQgfHwgbV9pc0FuaW1h
dGluZ1Njcm9sbFNuYXAgfHwgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nOwotICAgIGlm
IChuZWVkc0NhbGxiYWNrcyA9PSBtX2lzUnVubmluZ0FuaW1hdGluZ0NhbGxiYWNrKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobmVlZHNDYWxsYmFja3MpIHsKLSAgICAgICAgbV9jbGllbnQu
c3RhcnRBbmltYXRpb25DYWxsYmFjaygqdGhpcyk7Ci0gICAgICAgIG1faXNSdW5uaW5nQW5pbWF0
aW5nQ2FsbGJhY2sgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jbGll
bnQuc3RvcEFuaW1hdGlvbkNhbGxiYWNrKCp0aGlzKTsKLSAgICBtX2lzUnVubmluZ0FuaW1hdGlu
Z0NhbGxiYWNrID0gZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6YmVnaW5LZXli
b2FyZFNjcm9sbGluZygpCi17Ci0gICAgc2V0SXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyh0
cnVlKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wS2V5Ym9hcmRTY3JvbGxpbmco
KQotewotICAgIHNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcoZmFsc2UpOwotfQotCi12
b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nUnViYmVyQmFuZChib29sIGlzQW5p
bWF0aW5nUnViYmVyQmFuZCkKLXsKLSAgICBpZiAoaXNBbmltYXRpbmdSdWJiZXJCYW5kID09IG1f
aXNBbmltYXRpbmdSdWJiZXJCYW5kKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIG1f
aXNBbmltYXRpbmdSdWJiZXJCYW5kID0gaXNBbmltYXRpbmdSdWJiZXJCYW5kOwotICAgIHN0YXJ0
T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6
c2V0SXNBbmltYXRpbmdTY3JvbGxTbmFwKGJvb2wgaXNBbmltYXRpbmdTY3JvbGxTbmFwKQotewot
ICAgIGlmIChpc0FuaW1hdGluZ1Njcm9sbFNuYXAgPT0gbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAp
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAg
PSBpc0FuaW1hdGluZ1Njcm9sbFNuYXA7Ci0gICAgc3RhcnRPclN0b3BBbmltYXRpb25DYWxsYmFj
a3MoKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXRJc0FuaW1hdGluZ0tleWJvYXJk
U2Nyb2xsaW5nKGJvb2wgaXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZykKLXsKLSAgICBpZiAo
aXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyA9PSBtX2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3Jv
bGxpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNBbmltYXRpbmdLZXlib2FyZFNjcm9s
bGluZyA9IGlzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmc7Ci0gICAgc3RhcnRPclN0b3BBbmlt
YXRpb25DYWxsYmFja3MoKTsKLX0KLQotYm9vbCBTY3JvbGxDb250cm9sbGVyOjp1c2VzU2Nyb2xs
U25hcCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9zY3JvbGxTbmFwU3RhdGU7Ci19Ci0KLXZv
aWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0U25hcE9mZnNldHNJbmZvKGNvbnN0IExheW91dFNjcm9s
bFNuYXBPZmZzZXRzSW5mbyYgc25hcE9mZnNldEluZm8pCi17Ci0gICAgaWYgKHNuYXBPZmZzZXRJ
bmZvLmlzRW1wdHkoKSkgewotICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZSA9IG51bGxwdHI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZENvbXB1dGVDdXJyZW50U25h
cEluZGljZXMgPSAhbV9zY3JvbGxTbmFwU3RhdGU7Ci0gICAgaWYgKCFtX3Njcm9sbFNuYXBTdGF0
ZSkKLSAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUgPSBtYWtlVW5pcXVlPFNjcm9sbFNuYXBBbmlt
YXRvclN0YXRlPigpOwotCi0gICAgbV9zY3JvbGxTbmFwU3RhdGUtPnNldFNuYXBPZmZzZXRJbmZv
KHNuYXBPZmZzZXRJbmZvKTsKLQotICAgIGlmIChzaG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRp
Y2VzKQotICAgICAgICB1cGRhdGVBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JDbGllbnRPZmZzZXQo
KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENv
bnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgc2V0U25hcE9mZnNldHNJbmZvIG5ldyBzdGF0ZTogIiA8
PCBWYWx1ZU9yTnVsbChtX3Njcm9sbFNuYXBTdGF0ZS5nZXQoKSkpOwotfQotCi1jb25zdCBMYXlv
dXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8qIFNjcm9sbENvbnRyb2xsZXI6OnNuYXBPZmZzZXRzSW5m
bygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Nyb2xsU25hcFN0YXRlID8gJm1fc2Nyb2xsU25h
cFN0YXRlLT5zbmFwT2Zmc2V0SW5mbygpIDogbnVsbHB0cjsKLX0KLQotc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gU2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhT
Y3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsU25hcFN0
YXRlLT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKGF4aXMpOwotfQotCi12b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4
aXMsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGluZGV4KQotewotICAgIGlmICghdXNlc1Njcm9s
bFNuYXAoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3JvbGxTbmFwU3RhdGUtPnNldEFj
dGl2ZVNuYXBJbmRleEZvckF4aXMoYXhpcywgaW5kZXgpOwotfQotCi12b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2
ZW50QXhpcyBheGlzLCBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQotewotICAgIGlmICghdXNl
c1Njcm9sbFNuYXAoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKTsKLSAgICBMYXlvdXRQb2ludCBsYXlvdXRTY3Jv
bGxPZmZzZXQoc2Nyb2xsT2Zmc2V0LngoKSAvIHNjYWxlRmFjdG9yLCBzY3JvbGxPZmZzZXQueSgp
IC8gc2NhbGVGYWN0b3IpOwotICAgIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUg
PSAqbV9zY3JvbGxTbmFwU3RhdGU7Ci0KLSAgICBhdXRvIHNuYXBPZmZzZXRzID0gc25hcFN0YXRl
LnNuYXBPZmZzZXRzRm9yQXhpcyhheGlzKTsKLSAgICBMYXlvdXRTaXplIHZpZXdwb3J0U2l6ZSht
X2NsaWVudC52aWV3cG9ydFNpemUoKS53aWR0aCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKS5o
ZWlnaHQoKSk7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gYWN0aXZlSW5kZXg7Ci0gICAg
aWYgKHNuYXBPZmZzZXRzLnNpemUoKSkKLSAgICAgICAgYWN0aXZlSW5kZXggPSBzbmFwU3RhdGUu
c25hcE9mZnNldEluZm8oKS5jbG9zZXN0U25hcE9mZnNldChheGlzLCB2aWV3cG9ydFNpemUsIGxh
eW91dFNjcm9sbE9mZnNldCwgMCkuc2Vjb25kOwotCi0gICAgaWYgKGFjdGl2ZUluZGV4ID09IGFj
dGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcykpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlID0gdHJ1ZTsKLSAgICBzZXRBY3RpdmVT
Y3JvbGxTbmFwSW5kZXhGb3JBeGlzKGF4aXMsIGFjdGl2ZUluZGV4KTsKLX0KLQotZmxvYXQgU2Ny
b2xsQ29udHJvbGxlcjo6YWRqdXN0U2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzIGF4
aXMsIEZsb2F0UG9pbnQgZGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBvcmlnaW5hbE9mZnNldCkKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFw
KCkpCi0gICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/
IGRlc3RpbmF0aW9uT2Zmc2V0LngoKSA6IGRlc3RpbmF0aW9uT2Zmc2V0LnkoKTsKLQotICAgIFNj
cm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSAqbV9zY3JvbGxTbmFwU3RhdGU7Ci0g
ICAgYXV0byBzbmFwT2Zmc2V0cyA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoYXhpcyk7
Ci0gICAgaWYgKCFzbmFwT2Zmc2V0cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBheGlzID09IFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IGRlc3RpbmF0aW9uT2Zmc2V0LngoKSA6IGRlc3Rp
bmF0aW9uT2Zmc2V0LnkoKTsKLQotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gbV9jbGllbnQucGFn
ZVNjYWxlRmFjdG9yKCk7Ci0gICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbE9m
ZnNldEluTGF5b3V0VW5pdHM7Ci0gICAgaWYgKG9yaWdpbmFsT2Zmc2V0KQotICAgICAgICBvcmln
aW5hbE9mZnNldEluTGF5b3V0VW5pdHMgPSBMYXlvdXRVbml0KCpvcmlnaW5hbE9mZnNldCAvIHNj
YWxlRmFjdG9yKTsKLSAgICBMYXlvdXRTaXplIHZpZXdwb3J0U2l6ZShtX2NsaWVudC52aWV3cG9y
dFNpemUoKS53aWR0aCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKS5oZWlnaHQoKSk7Ci0gICAg
TGF5b3V0UG9pbnQgbGF5b3V0RGVzdGluYXRpb25PZmZzZXQoZGVzdGluYXRpb25PZmZzZXQueCgp
IC8gc2NhbGVGYWN0b3IsIGRlc3RpbmF0aW9uT2Zmc2V0LnkoKSAvIHNjYWxlRmFjdG9yKTsKLSAg
ICBMYXlvdXRVbml0IG9mZnNldCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0SW5mbygpLmNsb3Nlc3RT
bmFwT2Zmc2V0KGF4aXMsIHZpZXdwb3J0U2l6ZSwgbGF5b3V0RGVzdGluYXRpb25PZmZzZXQsIHZl
bG9jaXR5LCBvcmlnaW5hbE9mZnNldEluTGF5b3V0VW5pdHMpLmZpcnN0OwotICAgIHJldHVybiBv
ZmZzZXQgKiBzY2FsZUZhY3RvcjsKLX0KLQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0
ZUFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckNsaWVudE9mZnNldCgpCi17Ci0gICAgaWYgKCF1c2Vz
U2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY3JvbGxPZmZzZXQgb2Zmc2V0
ID0gcm91bmRlZEludFBvaW50KG1fY2xpZW50LnNjcm9sbE9mZnNldCgpKTsKLSAgICBzZXROZWFy
ZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwsIG9mZnNldCk7Ci0gICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRP
ZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0KTsKLX0KLQotdm9pZCBTY3Jv
bGxDb250cm9sbGVyOjpyZXNuYXBBZnRlckxheW91dCgpCi17Ci0gICAgaWYgKCF1c2VzU2Nyb2xs
U25hcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBzbmFw
cGVkIGluIGEgcGFydGljdWxhciBheGlzLCBtYWludGFpbiB0aGF0LiBPdGhlcndpc2UsIHNuYXAg
dG8gdGhlIG5lYXJlc3QgZWxpZ2libGUgc25hcCBwb2ludC4KLSAgICBTY3JvbGxPZmZzZXQgb2Zm
c2V0ID0gcm91bmRlZEludFBvaW50KG1fY2xpZW50LnNjcm9sbE9mZnNldCgpKTsKLSAgICBTY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOwotCi0g
ICAgYXV0byBhY3RpdmVIb3Jpem9udGFsSW5kZXggPSBtX3Njcm9sbFNuYXBTdGF0ZS0+YWN0aXZl
U25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwotICAgIGlmICgh
YWN0aXZlSG9yaXpvbnRhbEluZGV4IHx8ICphY3RpdmVIb3Jpem9udGFsSW5kZXggPj0gc25hcFN0
YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpLnNpemUo
KSkKLSAgICAgICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBvZmZzZXQpOwotCi0gICAgYXV0byBhY3RpdmVWZXJ0
aWNhbEluZGV4ID0gbV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7Ci0gICAgaWYgKCFhY3RpdmVWZXJ0aWNhbEluZGV4IHx8
ICphY3RpdmVWZXJ0aWNhbEluZGV4ID49IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Ny
b2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkuc2l6ZSgpKQotICAgICAgICBzZXROZWFyZXN0U2Nyb2xs
U25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBvZmZz
ZXQpOwotCi19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlS2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lKQotewotICAgIGlmICgh
bV9pc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2NsaWVudC5rZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKCktPnVwZGF0ZUtleWJvYXJkU2Nyb2xs
UG9zaXRpb24oY3VycmVudFRpbWUpOwotfQotCi0vLyBDdXJyZW50bHksIG9ubHkgTWFjIHN1cHBv
cnRzIG1vbWVudHVtIHNyb2xsaW5nLWJhc2VkIHNjcm9sbHNuYXBwaW5nIGFuZCBydWJiZXIgYmFu
ZGluZwotLy8gc28gYWxsIG9mIHRoZXNlIG1ldGhvZHMgYXJlIGEgbm9vcCBvbiBub24tTWFjIHBs
YXRmb3Jtcy4KLSNpZiAhUExBVEZPUk0oTUFDKQotU2Nyb2xsQ29udHJvbGxlcjo6flNjcm9sbENv
bnRyb2xsZXIoKQotewotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BBbGxUaW1lcnMo
KQotewotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgp
Ci17Ci19Ci0KLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcEFuaW1hdGlu
Z1N0YXRlKE1vbm90b25pY1RpbWUpCi17Ci0KLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1
cGRhdGVSdWJiZXJCYW5kQW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGltZSkKLXsKLQotfQotCi0j
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGRkOWMwOTIwZTRhZjFmOWJhMzI0MjFhOWQ3ZmRhYzE4M2E1MWUzNzAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotCi0jaW5jbHVkZSAiUmVjdEVkZ2Vz
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKLSNpbmNsdWRlICJTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8uaCIKLSNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgotI2luY2x1ZGUg
IldoZWVsRXZlbnRUZXN0TW9uaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgot
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjsKLWNsYXNzIExheW91dFNpemU7Ci1jbGFzcyBQbGF0
Zm9ybVdoZWVsRXZlbnQ7Ci1jbGFzcyBTY3JvbGxDb250cm9sbGVyOwotY2xhc3MgU2Nyb2xsYWJs
ZUFyZWE7Ci1jbGFzcyBXaGVlbEV2ZW50VGVzdE1vbml0b3I7Ci0KLWNsYXNzIFNjcm9sbENvbnRy
b2xsZXJUaW1lciA6IHB1YmxpYyBSdW5Mb29wOjpUaW1lckJhc2UgewotcHVibGljOgotICAgIFNj
cm9sbENvbnRyb2xsZXJUaW1lcihSdW5Mb29wJiBydW5Mb29wLCBGdW5jdGlvbjx2b2lkKCk+JiYg
Y2FsbGJhY2spCi0gICAgICAgIDogUnVuTG9vcDo6VGltZXJCYXNlKHJ1bkxvb3ApCi0gICAgICAg
ICwgbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9p
ZCBmaXJlZCgpIGZpbmFsCi0gICAgewotICAgICAgICBtX2NhbGxiYWNrKCk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9jYWxsYmFjazsKLX07Ci0KLWNsYXNzIFNj
cm9sbENvbnRyb2xsZXJDbGllbnQgewotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgflNjcm9sbENv
bnRyb2xsZXJDbGllbnQoKSA9IGRlZmF1bHQ7Ci0KLXB1YmxpYzoKLSAgICAvLyBPbmx5IHVzZWQg
Zm9yIG5vbi1hbmltYXRpb24gdGltZXJzLgotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbENvbnRyb2xsZXJUaW1lcj4gY3JlYXRlVGltZXIoRnVuY3Rpb248dm9pZCgpPiYmKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnRBbmltYXRpb25DYWxsYmFjayhTY3JvbGxDb250cm9s
bGVyJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wQW5pbWF0aW9uQ2FsbGJhY2soU2Nyb2xs
Q29udHJvbGxlciYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVLZXlib2FyZFNjcm9s
bFBvc2l0aW9uKE1vbm90b25pY1RpbWUpIHsgfQotICAgIHZpcnR1YWwgS2V5Ym9hcmRTY3JvbGxp
bmdBbmltYXRvciAqa2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpIGNvbnN0IHsgcmV0dXJuIG51
bGxwdHI7IH0KLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSW50U2l6ZSBzdHJl
dGNoQW1vdW50KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzUGlubmVkRm9yU2Ny
b2xsRGVsdGEoY29uc3QgRmxvYXRTaXplJikgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBSZWN0
RWRnZXM8Ym9vbD4gZWRnZVBpbm5lZFN0YXRlKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBi
b29sIGFsbG93c0hvcml6b250YWxTY3JvbGxpbmcoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGFsbG93c1ZlcnRpY2FsU2Nyb2xsaW5nKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9uKSBjb25zdCA9IDA7
Ci0KLSAgICAvLyBGSVhNRTogdXNlIFNjcm9sbENsYW1waW5nIHRvIGNvbGxhcHNlIHRoZXNlIHRv
IG9uZS4KLSAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXpl
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50
RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCB3aWxsU3RhcnRSdWJiZXJCYW5kU25hcEFuaW1hdGlvbigpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkaWRTdG9wUnViYmVyYmFuZFNuYXBBbmltYXRpb24oKSB7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBydWJiZXJCYW5kaW5nU3RhdGVDaGFuZ2VkKGJvb2wpIHsgfQotCi0gICAgLy8gSWYgdGhlIGN1
cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGlzIHdpdGhpbiB0aGUgb3ZlcmhhbmcgYXJlYSwgdGhpcyBm
dW5jdGlvbiB3aWxsIGNhdXNlCi0gICAgLy8gdGhlIHBhZ2UgdG8gc2Nyb2xsIHRvIHRoZSBuZWFy
ZXN0IGJvdW5kYXJ5IHBvaW50LgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlv
blRvQm91bmRzSWZOZWNlc3NhcnkoKSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBk
ZWZlcldoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkZvclJlYXNvbihXaGVlbEV2ZW50VGVzdE1vbml0
b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpEZWZl
clJlYXNvbikgY29uc3QgeyAvKiBEbyBub3RoaW5nICovIH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRGVmZXJyYWxGb3JSZWFzb24oV2hlZWxFdmVudFRl
c3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0TW9uaXRv
cjo6RGVmZXJSZWFzb24pIGNvbnN0IHsgLyogRG8gbm90aGluZyAqLyB9Ci0KLSAgICB2aXJ0dWFs
IEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBp
bW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBkZWx0YSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCkgeyB9Ci0gICAgdmlydHVh
bCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRT
aXplIHNjcm9sbEV4dGVudCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSB2aWV3
cG9ydFNpemUoKSBjb25zdCA9IDA7Ci19OwotCi1jbGFzcyBTY3JvbGxDb250cm9sbGVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JvbGxDb250cm9sbGVyKTsKLQotcHVibGljOgotICAg
IGV4cGxpY2l0IFNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCYpOwotICAg
IH5TY3JvbGxDb250cm9sbGVyKCk7Ci0KLSAgICBib29sIHVzZXNTY3JvbGxTbmFwKCkgY29uc3Q7
Ci0gICAgdm9pZCBzdG9wQWxsVGltZXJzKCk7Ci0gICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5n
ZWQoKTsKLQotICAgIHZvaWQgYmVnaW5LZXlib2FyZFNjcm9sbGluZygpOwotICAgIHZvaWQgc3Rv
cEtleWJvYXJkU2Nyb2xsaW5nKCk7Ci0gICAgCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBwZXJp
b2RpY2FsbHkgYnkgdGhlIGNsaWVudC4gU3RhcnRlZCBieSBzdGFydEFuaW1hdGlvbkNhbGxiYWNr
KCksIHN0b3BwZWQgYnkgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKCkuCi0gICAgdm9pZCBhbmltYXRp
b25DYWxsYmFjayhNb25vdG9uaWNUaW1lKTsKLQotICAgIHZvaWQgc2V0U25hcE9mZnNldHNJbmZv
KGNvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyYpOwotICAgIGNvbnN0IExheW91dFNj
cm9sbFNuYXBPZmZzZXRzSW5mbyogc25hcE9mZnNldHNJbmZvKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcywgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4pOwotICAgIHZvaWQgdXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9y
Q2xpZW50T2Zmc2V0KCk7Ci0gICAgdm9pZCByZXNuYXBBZnRlckxheW91dCgpOwotICAgIGJvb2wg
YWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVT
Y3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2U7IH0KLSAgICB2b2lkIHNldFNjcm9sbFNuYXBJbmRleERp
ZENoYW5nZShib29sIHN0YXRlKSB7IG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlID0g
c3RhdGU7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBhY3RpdmVTY3JvbGxTbmFwSW5k
ZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxT
bmFwU3RhdGUoY29uc3QgU2Nyb2xsYWJsZUFyZWEmKTsKLSAgICB2b2lkIHVwZGF0ZUdlc3R1cmVJ
blByb2dyZXNzU3RhdGUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgZmxvYXQgYWRq
dXN0U2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzLCBGbG9hdFBvaW50IGRlc3RpbmF0
aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxP
ZmZzZXQpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBoYW5k
bGVkLgotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
KTsKLQotICAgIGVudW0gY2xhc3MgV2hlZWxBeGlzQmlhcyB7IE5vbmUsIFZlcnRpY2FsIH07Ci0g
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsRGlyZWN0aW9uPiBkaXJlY3Rpb25Gcm9tRXZl
bnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jiwgc3RkOjpvcHRpb25hbDxTY3JvbGxFdmVudEF4
aXM+LCBXaGVlbEF4aXNCaWFzID0gV2hlZWxBeGlzQmlhczo6Tm9uZSk7Ci0gICAgc3RhdGljIEZs
b2F0U2l6ZSB3aGVlbERlbHRhQmlhc2luZ1Rvd2FyZHNWZXJ0aWNhbChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmKTsKLQotICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Owot
ICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJu
cyB0cnVlIGlmIGhhbmRsZWQuCi0gICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNu
YXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCi0gICAgdm9pZCBzdG9wUnViYmVyYmFuZGluZygpOwotICAgIGJvb2wgaXNSdWJiZXJCYW5k
SW5Qcm9ncmVzcygpIGNvbnN0OwotICAgIFJlY3RFZGdlczxib29sPiBydWJiZXJCYW5kaW5nRWRn
ZXMoKSBjb25zdCB7IHJldHVybiBtX3J1YmJlckJhbmRpbmdFZGdlczsgfQotI2VuZGlmCi0jZW5k
aWYKLQotcHJpdmF0ZToKLSAgICB2b2lkIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlz
QW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgU2Nyb2xsT2Zmc2V0KTsKLQotICAgIHZvaWQgdXBk
YXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgdXBk
YXRlUnViYmVyQmFuZEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgdXBk
YXRlS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKLQotICAg
IHZvaWQgc2V0SXNBbmltYXRpbmdSdWJiZXJCYW5kKGJvb2wpOwotICAgIHZvaWQgc2V0SXNBbmlt
YXRpbmdTY3JvbGxTbmFwKGJvb2wpOwotICAgIHZvaWQgc2V0SXNBbmltYXRpbmdLZXlib2FyZFNj
cm9sbGluZyhib29sKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIHN0YXJ0U2Nyb2xs
U25hcEFuaW1hdGlvbigpOwotICAgIHZvaWQgc3RvcFNjcm9sbFNuYXBBbmltYXRpb24oKTsKLQot
ICAgIGJvb2wgc2hvdWxkT3ZlcnJpZGVNb21lbnR1bVNjcm9sbGluZygpIGNvbnN0OwotICAgIHZv
aWQgc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lckZpcmVkKCk7Ci0gICAgdm9pZCBzY2hlZHVs
ZVN0YXRlbGVzc1Njcm9sbFNuYXAoKTsKLSAgICB2b2lkIHN0YXJ0RGVmZXJyaW5nV2hlZWxFdmVu
dFRlc3RDb21wbGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygpOwotICAgIHZvaWQgc3RvcERlZmVy
cmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKLQotI2lm
IEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICB2b2lkIHN0YXJ0UnViYmVyYmFuZEFuaW1hdGlv
bigpOwotICAgIHZvaWQgc3RvcFNuYXBSdWJiZXJiYW5kQW5pbWF0aW9uKCk7Ci0KLSAgICB2b2lk
IHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFs
RGlyZWN0aW9uKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0OwotICAgIGJvb2wgc2hv
dWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgY29uc3Q7Ci0gICAgYm9v
bCBpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0
ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOwotICAgIHZvaWQgdXBkYXRlUnViYmVyQmFuZGluZ0VkZ2Vz
KEludFNpemUgY2xpZW50U3RyZXRjaCk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgdm9pZCBzdGFy
dE9yU3RvcEFuaW1hdGlvbkNhbGxiYWNrcygpOwotCi0gICAgU2Nyb2xsQ29udHJvbGxlckNsaWVu
dCYgbV9jbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbFNuYXBBbmltYXRvclN0YXRl
PiBtX3Njcm9sbFNuYXBTdGF0ZTsKLSAgICBib29sIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlk
Q2hhbmdlIHsgZmFsc2UgfTsKLQotICAgIGJvb2wgbV9pc1J1bm5pbmdBbmltYXRpbmdDYWxsYmFj
ayB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2lzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcgeyBmYWxzZSB9OwotCi0jaWYgUExBVEZPUk0o
TUFDKQotICAgIFdhbGxUaW1lIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIEZs
b2F0U2l6ZSBtX292ZXJmbG93U2Nyb2xsRGVsdGE7Ci0gICAgRmxvYXRTaXplIG1fc3RyZXRjaFNj
cm9sbEZvcmNlOwotICAgIEZsb2F0U2l6ZSBtX21vbWVudHVtVmVsb2NpdHk7Ci0KLSAgICBib29s
IG1faW5TY3JvbGxHZXN0dXJlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fbW9tZW50dW1TY3JvbGxJ
blByb2dyZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlTW9tZW50dW1TY3JvbGxzIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1faXNSdWJiZXJCYW5kaW5nIHsgZmFsc2UgfTsKLQotICAgIEZs
b2F0U2l6ZSBtX2RyYWdFbmRlZFNjcm9sbGluZ1ZlbG9jaXR5OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lcjsK
LQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAvLyBSdWJiZXIgYmFuZCBzdGF0ZS4K
LSAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOwotICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3Ry
ZXRjaDsKLSAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7Ci0gICAgUmVjdEVkZ2VzPGJvb2w+
IG1fcnViYmVyQmFuZGluZ0VkZ2VzOwotI2VuZGlmCi0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAg
IGJvb2wgbV90aW1lcnNXZXJlU3RvcHBlZCB7IGZhbHNlIH07Ci0jZW5kaWYKLSNlbmRpZgotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwYzkzOGI2
NDM1Yjk5OWYxZDEzYWUyNmFmMWFlZjA2MzExNjNiYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5jcHAKQEAgLTAs
MCArMSwyNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiS2V5Ym9hcmRT
Y3JvbGxpbmdBbmltYXRvci5oIgorI2luY2x1ZGUgIkxheW91dFNpemUuaCIKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2Ny
b2xsU25hcEFuaW1hdG9yU3RhdGUuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2lu
Y2x1ZGUgIldoZWVsRXZlbnRUZXN0TW9uaXRvci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTY3JvbGxpbmdFZmZlY3RzQ29udHJv
bGxlcjo6U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIoU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xs
ZXJDbGllbnQmIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKK30KKwordm9pZCBT
Y3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6YW5pbWF0aW9uQ2FsbGJhY2soTW9ub3RvbmljVGlt
ZSBjdXJyZW50VGltZSkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0g
PDwgIlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIGFuaW1hdGlvbkNh
bGxiYWNrOiBpc0FuaW1hdGluZ1J1YmJlckJhbmQgIiA8PCBtX2lzQW5pbWF0aW5nUnViYmVyQmFu
ZCA8PCAiIGlzQW5pbWF0aW5nU2Nyb2xsU25hcCAiIDw8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFw
IDw8ICJpc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nIiA8PCBtX2lzQW5pbWF0aW5nS2V5Ym9h
cmRTY3JvbGxpbmcpOworCisgICAgdXBkYXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKGN1cnJl
bnRUaW1lKTsKKyAgICB1cGRhdGVSdWJiZXJCYW5kQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUp
OworICAgIHVwZGF0ZUtleWJvYXJkU2Nyb2xsaW5nQW5pbWF0aW5nU3RhdGUoY3VycmVudFRpbWUp
OworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdGFydE9yU3RvcEFuaW1h
dGlvbkNhbGxiYWNrcygpCit7CisgICAgYm9vbCBuZWVkc0NhbGxiYWNrcyA9IG1faXNBbmltYXRp
bmdSdWJiZXJCYW5kIHx8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwIHx8IG1faXNBbmltYXRpbmdL
ZXlib2FyZFNjcm9sbGluZzsKKyAgICBpZiAobmVlZHNDYWxsYmFja3MgPT0gbV9pc1J1bm5pbmdB
bmltYXRpbmdDYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG5lZWRzQ2FsbGJh
Y2tzKSB7CisgICAgICAgIG1fY2xpZW50LnN0YXJ0QW5pbWF0aW9uQ2FsbGJhY2soKnRoaXMpOwor
ICAgICAgICBtX2lzUnVubmluZ0FuaW1hdGluZ0NhbGxiYWNrID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fY2xpZW50LnN0b3BBbmltYXRpb25DYWxsYmFjaygqdGhpcyk7
CisgICAgbV9pc1J1bm5pbmdBbmltYXRpbmdDYWxsYmFjayA9IGZhbHNlOworfQorCit2b2lkIFNj
cm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpiZWdpbktleWJvYXJkU2Nyb2xsaW5nKCkKK3sKKyAg
ICBzZXRJc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKHRydWUpOworfQorCit2b2lkIFNjcm9s
bGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdG9wS2V5Ym9hcmRTY3JvbGxpbmcoKQoreworICAgIHNl
dElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcoZmFsc2UpOworfQorCit2b2lkIFNjcm9sbGlu
Z0VmZmVjdHNDb250cm9sbGVyOjpzZXRJc0FuaW1hdGluZ1J1YmJlckJhbmQoYm9vbCBpc0FuaW1h
dGluZ1J1YmJlckJhbmQpCit7CisgICAgaWYgKGlzQW5pbWF0aW5nUnViYmVyQmFuZCA9PSBtX2lz
QW5pbWF0aW5nUnViYmVyQmFuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc0FuaW1hdGlu
Z1J1YmJlckJhbmQgPSBpc0FuaW1hdGluZ1J1YmJlckJhbmQ7CisgICAgc3RhcnRPclN0b3BBbmlt
YXRpb25DYWxsYmFja3MoKTsKK30KKwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6
c2V0SXNBbmltYXRpbmdTY3JvbGxTbmFwKGJvb2wgaXNBbmltYXRpbmdTY3JvbGxTbmFwKQorewor
ICAgIGlmIChpc0FuaW1hdGluZ1Njcm9sbFNuYXAgPT0gbV9pc0FuaW1hdGluZ1Njcm9sbFNuYXAp
CisgICAgICAgIHJldHVybjsKKworICAgIG1faXNBbmltYXRpbmdTY3JvbGxTbmFwID0gaXNBbmlt
YXRpbmdTY3JvbGxTbmFwOworICAgIHN0YXJ0T3JTdG9wQW5pbWF0aW9uQ2FsbGJhY2tzKCk7Cit9
CisKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNldElzQW5pbWF0aW5nS2V5Ym9h
cmRTY3JvbGxpbmcoYm9vbCBpc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nKQoreworICAgIGlm
IChpc0FuaW1hdGluZ0tleWJvYXJkU2Nyb2xsaW5nID09IG1faXNBbmltYXRpbmdLZXlib2FyZFNj
cm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc0FuaW1hdGluZ0tleWJvYXJkU2Ny
b2xsaW5nID0gaXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZzsKKyAgICBzdGFydE9yU3RvcEFu
aW1hdGlvbkNhbGxiYWNrcygpOworfQorCitib29sIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
Ojp1c2VzU2Nyb2xsU25hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhbV9zY3JvbGxTbmFwU3Rh
dGU7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNldFNuYXBPZmZzZXRz
SW5mbyhjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8mIHNuYXBPZmZzZXRJbmZvKQor
eworICAgIGlmIChzbmFwT2Zmc2V0SW5mby5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9zY3JvbGxT
bmFwU3RhdGUgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBz
aG91bGRDb21wdXRlQ3VycmVudFNuYXBJbmRpY2VzID0gIW1fc2Nyb2xsU25hcFN0YXRlOworICAg
IGlmICghbV9zY3JvbGxTbmFwU3RhdGUpCisgICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlID0gbWFr
ZVVuaXF1ZTxTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZT4oKTsKKworICAgIG1fc2Nyb2xsU25hcFN0
YXRlLT5zZXRTbmFwT2Zmc2V0SW5mbyhzbmFwT2Zmc2V0SW5mbyk7CisKKyAgICBpZiAoc2hvdWxk
Q29tcHV0ZUN1cnJlbnRTbmFwSW5kaWNlcykKKyAgICAgICAgdXBkYXRlQWN0aXZlU2Nyb2xsU25h
cEluZGV4Rm9yQ2xpZW50T2Zmc2V0KCk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25h
cCwgc3RyZWFtIDw8ICJTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciAiIDw8IHRoaXMgPDwgIiBz
ZXRTbmFwT2Zmc2V0c0luZm8gbmV3IHN0YXRlOiAiIDw8IFZhbHVlT3JOdWxsKG1fc2Nyb2xsU25h
cFN0YXRlLmdldCgpKSk7Cit9CisKK2NvbnN0IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyog
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNuYXBPZmZzZXRzSW5mbygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc2Nyb2xsU25hcFN0YXRlID8gJm1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zm
c2V0SW5mbygpIDogbnVsbHB0cjsKK30KKworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gU2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXI6OmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xs
RXZlbnRBeGlzIGF4aXMpIGNvbnN0Cit7CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiBtX3Njcm9sbFNuYXBTdGF0ZS0+
YWN0aXZlU25hcEluZGV4Rm9yQXhpcyhheGlzKTsKK30KKwordm9pZCBTY3JvbGxpbmdFZmZlY3Rz
Q29udHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4
aXMgYXhpcywgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gaW5kZXgpCit7CisgICAgaWYgKCF1c2Vz
U2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+
c2V0QWN0aXZlU25hcEluZGV4Rm9yQXhpcyhheGlzLCBpbmRleCk7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5k
T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQor
eworICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxv
YXQgc2NhbGVGYWN0b3IgPSBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKTsKKyAgICBMYXlvdXRQ
b2ludCBsYXlvdXRTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0LngoKSAvIHNjYWxlRmFjdG9yLCBz
Y3JvbGxPZmZzZXQueSgpIC8gc2NhbGVGYWN0b3IpOworICAgIFNjcm9sbFNuYXBBbmltYXRvclN0
YXRlJiBzbmFwU3RhdGUgPSAqbV9zY3JvbGxTbmFwU3RhdGU7CisKKyAgICBhdXRvIHNuYXBPZmZz
ZXRzID0gc25hcFN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhheGlzKTsKKyAgICBMYXlvdXRTaXpl
IHZpZXdwb3J0U2l6ZShtX2NsaWVudC52aWV3cG9ydFNpemUoKS53aWR0aCgpLCBtX2NsaWVudC52
aWV3cG9ydFNpemUoKS5oZWlnaHQoKSk7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gYWN0
aXZlSW5kZXg7CisgICAgaWYgKHNuYXBPZmZzZXRzLnNpemUoKSkKKyAgICAgICAgYWN0aXZlSW5k
ZXggPSBzbmFwU3RhdGUuc25hcE9mZnNldEluZm8oKS5jbG9zZXN0U25hcE9mZnNldChheGlzLCB2
aWV3cG9ydFNpemUsIGxheW91dFNjcm9sbE9mZnNldCwgMCkuc2Vjb25kOworCisgICAgaWYgKGFj
dGl2ZUluZGV4ID09IGFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcykpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlID0gdHJ1ZTsK
KyAgICBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKGF4aXMsIGFjdGl2ZUluZGV4KTsK
K30KKworZmxvYXQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OmFkanVzdFNjcm9sbERlc3Rp
bmF0aW9uKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBGbG9hdFBvaW50IGRlc3RpbmF0aW9uT2Zmc2V0
LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQpCit7
CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBkZXN0aW5hdGlvbk9mZnNldC54KCkgOiBkZXN0aW5h
dGlvbk9mZnNldC55KCk7CisKKyAgICBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0YXRl
ID0gKm1fc2Nyb2xsU25hcFN0YXRlOworICAgIGF1dG8gc25hcE9mZnNldHMgPSBzbmFwU3RhdGUu
c25hcE9mZnNldHNGb3JBeGlzKGF4aXMpOworICAgIGlmICghc25hcE9mZnNldHMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBkZXN0
aW5hdGlvbk9mZnNldC54KCkgOiBkZXN0aW5hdGlvbk9mZnNldC55KCk7CisKKyAgICBmbG9hdCBz
Y2FsZUZhY3RvciA9IG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpOworICAgIHN0ZDo6b3B0aW9u
YWw8TGF5b3V0VW5pdD4gb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzOworICAgIGlmIChvcmln
aW5hbE9mZnNldCkKKyAgICAgICAgb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzID0gTGF5b3V0
VW5pdCgqb3JpZ2luYWxPZmZzZXQgLyBzY2FsZUZhY3Rvcik7CisgICAgTGF5b3V0U2l6ZSB2aWV3
cG9ydFNpemUobV9jbGllbnQudmlld3BvcnRTaXplKCkud2lkdGgoKSwgbV9jbGllbnQudmlld3Bv
cnRTaXplKCkuaGVpZ2h0KCkpOworICAgIExheW91dFBvaW50IGxheW91dERlc3RpbmF0aW9uT2Zm
c2V0KGRlc3RpbmF0aW9uT2Zmc2V0LngoKSAvIHNjYWxlRmFjdG9yLCBkZXN0aW5hdGlvbk9mZnNl
dC55KCkgLyBzY2FsZUZhY3Rvcik7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBzbmFwU3RhdGUu
c25hcE9mZnNldEluZm8oKS5jbG9zZXN0U25hcE9mZnNldChheGlzLCB2aWV3cG9ydFNpemUsIGxh
eW91dERlc3RpbmF0aW9uT2Zmc2V0LCB2ZWxvY2l0eSwgb3JpZ2luYWxPZmZzZXRJbkxheW91dFVu
aXRzKS5maXJzdDsKKyAgICByZXR1cm4gb2Zmc2V0ICogc2NhbGVGYWN0b3I7Cit9CisKKwordm9p
ZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6dXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4
Rm9yQ2xpZW50T2Zmc2V0KCkKK3sKKyAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFNjcm9sbE9mZnNldCBvZmZzZXQgPSByb3VuZGVkSW50UG9pbnQobV9j
bGllbnQuc2Nyb2xsT2Zmc2V0KCkpOworICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JB
eGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgb2Zmc2V0KTsKKyAgICBz
ZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6
OlZlcnRpY2FsLCBvZmZzZXQpOworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVy
OjpyZXNuYXBBZnRlckxheW91dCgpCit7CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBzbmFwcGVkIGluIGEgcGFy
dGljdWxhciBheGlzLCBtYWludGFpbiB0aGF0LiBPdGhlcndpc2UsIHNuYXAgdG8gdGhlIG5lYXJl
c3QgZWxpZ2libGUgc25hcCBwb2ludC4KKyAgICBTY3JvbGxPZmZzZXQgb2Zmc2V0ID0gcm91bmRl
ZEludFBvaW50KG1fY2xpZW50LnNjcm9sbE9mZnNldCgpKTsKKyAgICBTY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOworCisgICAgYXV0byBhY3Rp
dmVIb3Jpem9udGFsSW5kZXggPSBtX3Njcm9sbFNuYXBTdGF0ZS0+YWN0aXZlU25hcEluZGV4Rm9y
QXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOworICAgIGlmICghYWN0aXZlSG9yaXpv
bnRhbEluZGV4IHx8ICphY3RpdmVIb3Jpem9udGFsSW5kZXggPj0gc25hcFN0YXRlLnNuYXBPZmZz
ZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpLnNpemUoKSkKKyAgICAgICAg
c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsLCBvZmZzZXQpOworCisgICAgYXV0byBhY3RpdmVWZXJ0aWNhbEluZGV4ID0g
bV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
OjpWZXJ0aWNhbCk7CisgICAgaWYgKCFhY3RpdmVWZXJ0aWNhbEluZGV4IHx8ICphY3RpdmVWZXJ0
aWNhbEluZGV4ID49IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
OjpWZXJ0aWNhbCkuc2l6ZSgpKQorICAgICAgICBzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9y
QXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBvZmZzZXQpOworCit9CisK
K3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnVwZGF0ZUtleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKK3sKKyAgICBpZiAoIW1f
aXNBbmltYXRpbmdLZXlib2FyZFNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9j
bGllbnQua2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcigpLT51cGRhdGVLZXlib2FyZFNjcm9sbFBv
c2l0aW9uKGN1cnJlbnRUaW1lKTsKK30KKworLy8gQ3VycmVudGx5LCBvbmx5IE1hYyBzdXBwb3J0
cyBtb21lbnR1bSBzcm9sbGluZy1iYXNlZCBzY3JvbGxzbmFwcGluZyBhbmQgcnViYmVyIGJhbmRp
bmcKKy8vIHNvIGFsbCBvZiB0aGVzZSBtZXRob2RzIGFyZSBhIG5vb3Agb24gbm9uLU1hYyBwbGF0
Zm9ybXMuCisjaWYgIVBMQVRGT1JNKE1BQykKK1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjp+
U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIoKQoreworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVj
dHNDb250cm9sbGVyOjpzdG9wQWxsVGltZXJzKCkKK3sKK30KKwordm9pZCBTY3JvbGxpbmdFZmZl
Y3RzQ29udHJvbGxlcjo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCkKK3sKK30KKwordm9pZCBTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6dXBkYXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKE1v
bm90b25pY1RpbWUpCit7CisKK30KKwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6
dXBkYXRlUnViYmVyQmFuZEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpCit7CisKK30KKwor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTVjMzljYTIwNmNmM2U1YmFiOWJjOTMzYWRjM2VkYmNkNTljZjZmNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyLmgKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgorCisjaW5jbHVkZSAiUmVjdEVkZ2VzLmgiCisjaW5jbHVkZSAiU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGUuaCIKKyNpbmNsdWRlICJTY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCIKKyNpbmNsdWRl
ICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgIldoZWVsRXZlbnRUZXN0TW9uaXRvci5oIgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvcjsKK2Ns
YXNzIExheW91dFNpemU7CitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CitjbGFzcyBTY3JvbGxp
bmdFZmZlY3RzQ29udHJvbGxlcjsKK2NsYXNzIFNjcm9sbGFibGVBcmVhOworY2xhc3MgV2hlZWxF
dmVudFRlc3RNb25pdG9yOworCitjbGFzcyBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlclRpbWVy
IDogcHVibGljIFJ1bkxvb3A6OlRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgU2Nyb2xsaW5nRWZm
ZWN0c0NvbnRyb2xsZXJUaW1lcihSdW5Mb29wJiBydW5Mb29wLCBGdW5jdGlvbjx2b2lkKCk+JiYg
Y2FsbGJhY2spCisgICAgICAgIDogUnVuTG9vcDo6VGltZXJCYXNlKHJ1bkxvb3ApCisgICAgICAg
ICwgbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBmaXJlZCgpIGZpbmFsCisgICAgeworICAgICAgICBtX2NhbGxiYWNrKCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9jYWxsYmFjazsKK307CisKK2NsYXNzIFNj
cm9sbGluZ0VmZmVjdHNDb250cm9sbGVyQ2xpZW50IHsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IH5TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlckNsaWVudCgpID0gZGVmYXVsdDsKKworcHVibGlj
OgorICAgIC8vIE9ubHkgdXNlZCBmb3Igbm9uLWFuaW1hdGlvbiB0aW1lcnMuCisgICAgdmlydHVh
bCBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXJUaW1lcj4gY3JlYXRl
VGltZXIoRnVuY3Rpb248dm9pZCgpPiYmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRB
bmltYXRpb25DYWxsYmFjayhTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlciYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc3RvcEFuaW1hdGlvbkNhbGxiYWNrKFNjcm9sbGluZ0VmZmVjdHNDb250cm9s
bGVyJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUtleWJvYXJkU2Nyb2xsUG9zaXRp
b24oTW9ub3RvbmljVGltZSkgeyB9CisgICAgdmlydHVhbCBLZXlib2FyZFNjcm9sbGluZ0FuaW1h
dG9yICprZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsg
fQorCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NI
b3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyhjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIHN0cmV0Y2hBbW91
bnQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNQaW5uZWRGb3JTY3JvbGxEZWx0
YShjb25zdCBGbG9hdFNpemUmKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFJlY3RFZGdlczxi
b29sPiBlZGdlUGlubmVkU3RhdGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dzSG9yaXpvbnRhbFNjcm9sbGluZygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dzVmVydGljYWxTY3JvbGxpbmcoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHNob3Vs
ZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pIGNvbnN0ID0gMDsKKworICAg
IC8vIEZJWE1FOiB1c2UgU2Nyb2xsQ2xhbXBpbmcgdG8gY29sbGFwc2UgdGhlc2UgdG8gb25lLgor
ICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29u
c3RyYWludHMoY29uc3QgRmxvYXRTaXplJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxT
dGFydFJ1YmJlckJhbmRTbmFwQW5pbWF0aW9uKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0
b3BSdWJiZXJiYW5kU25hcEFuaW1hdGlvbigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHJ1YmJl
ckJhbmRpbmdTdGF0ZUNoYW5nZWQoYm9vbCkgeyB9CisKKyAgICAvLyBJZiB0aGUgY3VycmVudCBz
Y3JvbGwgcG9zaXRpb24gaXMgd2l0aGluIHRoZSBvdmVyaGFuZyBhcmVhLCB0aGlzIGZ1bmN0aW9u
IHdpbGwgY2F1c2UKKyAgICAvLyB0aGUgcGFnZSB0byBzY3JvbGwgdG8gdGhlIG5lYXJlc3QgYm91
bmRhcnkgcG9pbnQuCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3Vu
ZHNJZk5lY2Vzc2FyeSgpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGRlZmVyV2hl
ZWxFdmVudFRlc3RDb21wbGV0aW9uRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Ny
b2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OkRlZmVyUmVhc29u
KSBjb25zdCB7IC8qIERvIG5vdGhpbmcgKi8gfQorICAgIHZpcnR1YWwgdm9pZCByZW1vdmVXaGVl
bEV2ZW50VGVzdENvbXBsZXRpb25EZWZlcnJhbEZvclJlYXNvbihXaGVlbEV2ZW50VGVzdE1vbml0
b3I6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpEZWZl
clJlYXNvbikgY29uc3QgeyAvKiBEbyBub3RoaW5nICovIH0KKworICAgIHZpcnR1YWwgRmxvYXRQ
b2ludCBzY3JvbGxPZmZzZXQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGltbWVkaWF0
ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRhKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHdpbGxTdGFydFNjcm9sbFNuYXBBbmltYXRpb24oKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkU3RvcFNjcm9sbFNuYXBBbmltYXRpb24oKSB7IH0KKyAgICB2aXJ0dWFsIGZsb2F0
IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIExheW91dFNpemUgc2Ny
b2xsRXh0ZW50KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgRmxvYXRTaXplIHZpZXdwb3J0U2l6
ZSgpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcik7CisK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcihTY3JvbGxp
bmdFZmZlY3RzQ29udHJvbGxlckNsaWVudCYpOworICAgIH5TY3JvbGxpbmdFZmZlY3RzQ29udHJv
bGxlcigpOworCisgICAgYm9vbCB1c2VzU2Nyb2xsU25hcCgpIGNvbnN0OworICAgIHZvaWQgc3Rv
cEFsbFRpbWVycygpOworICAgIHZvaWQgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CisKKyAgICB2
b2lkIGJlZ2luS2V5Ym9hcmRTY3JvbGxpbmcoKTsKKyAgICB2b2lkIHN0b3BLZXlib2FyZFNjcm9s
bGluZygpOworICAgIAorICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IGJ5IHRo
ZSBjbGllbnQuIFN0YXJ0ZWQgYnkgc3RhcnRBbmltYXRpb25DYWxsYmFjaygpLCBzdG9wcGVkIGJ5
IHN0b3BBbmltYXRpb25DYWxsYmFjaygpLgorICAgIHZvaWQgYW5pbWF0aW9uQ2FsbGJhY2soTW9u
b3RvbmljVGltZSk7CisKKyAgICB2b2lkIHNldFNuYXBPZmZzZXRzSW5mbyhjb25zdCBMYXlvdXRT
Y3JvbGxTbmFwT2Zmc2V0c0luZm8mKTsKKyAgICBjb25zdCBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0
c0luZm8qIHNuYXBPZmZzZXRzSW5mbygpIGNvbnN0OworICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xs
U25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
KTsKKyAgICB2b2lkIHVwZGF0ZUFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckNsaWVudE9mZnNldCgp
OworICAgIHZvaWQgcmVzbmFwQWZ0ZXJMYXlvdXQoKTsKKyAgICBib29sIGFjdGl2ZVNjcm9sbFNu
YXBJbmRleERpZENoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4
RGlkQ2hhbmdlOyB9CisgICAgdm9pZCBzZXRTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoYm9vbCBz
dGF0ZSkgeyBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSA9IHN0YXRlOyB9CisgICAg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3Jv
bGxFdmVudEF4aXMpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKGNvbnN0
IFNjcm9sbGFibGVBcmVhJik7CisgICAgdm9pZCB1cGRhdGVHZXN0dXJlSW5Qcm9ncmVzc1N0YXRl
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAgIGZsb2F0IGFkanVzdFNjcm9sbERlc3Rp
bmF0aW9uKFNjcm9sbEV2ZW50QXhpcywgRmxvYXRQb2ludCBkZXN0aW5hdGlvbk9mZnNldCwgZmxv
YXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFsT2Zmc2V0KTsKKworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaGFuZGxlZC4KKyAgICBib29s
IGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisKKyAgICBlbnVt
IGNsYXNzIFdoZWVsQXhpc0JpYXMgeyBOb25lLCBWZXJ0aWNhbCB9OworICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFNjcm9sbERpcmVjdGlvbj4gZGlyZWN0aW9uRnJvbUV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYsIHN0ZDo6b3B0aW9uYWw8U2Nyb2xsRXZlbnRBeGlzPiwgV2hlZWxBeGlz
QmlhcyA9IFdoZWVsQXhpc0JpYXM6Ok5vbmUpOworICAgIHN0YXRpYyBGbG9hdFNpemUgd2hlZWxE
ZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisK
KyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdDsKKyAgICBib29sIGlzVXNl
clNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBoYW5k
bGVkLgorICAgIGJvb2wgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYpOworCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIHZvaWQg
c3RvcFJ1YmJlcmJhbmRpbmcoKTsKKyAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBj
b25zdDsKKyAgICBSZWN0RWRnZXM8Ym9vbD4gcnViYmVyQmFuZGluZ0VkZ2VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydWJiZXJCYW5kaW5nRWRnZXM7IH0KKyNlbmRpZgorI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgdm9pZCBzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3Jv
bGxFdmVudEF4aXMsIFNjcm9sbE9mZnNldCk7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBB
bmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKKyAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRB
bmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKKyAgICB2b2lkIHVwZGF0ZUtleWJvYXJkU2Ny
b2xsaW5nQW5pbWF0aW5nU3RhdGUoTW9ub3RvbmljVGltZSk7CisKKyAgICB2b2lkIHNldElzQW5p
bWF0aW5nUnViYmVyQmFuZChib29sKTsKKyAgICB2b2lkIHNldElzQW5pbWF0aW5nU2Nyb2xsU25h
cChib29sKTsKKyAgICB2b2lkIHNldElzQW5pbWF0aW5nS2V5Ym9hcmRTY3JvbGxpbmcoYm9vbCk7
CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBzdGFydFNjcm9sbFNuYXBBbmltYXRpb24o
KTsKKyAgICB2b2lkIHN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCk7CisKKyAgICBib29sIHNob3Vs
ZE92ZXJyaWRlTW9tZW50dW1TY3JvbGxpbmcoKSBjb25zdDsKKyAgICB2b2lkIHN0YXRlbGVzc1Nu
YXBUcmFuc2l0aW9uVGltZXJGaXJlZCgpOworICAgIHZvaWQgc2NoZWR1bGVTdGF0ZWxlc3NTY3Jv
bGxTbmFwKCk7CisgICAgdm9pZCBzdGFydERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlv
bkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKKyAgICB2b2lkIHN0b3BEZWZlcnJpbmdXaGVlbEV2ZW50
VGVzdENvbXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKCk7CisKKyNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCisgICAgdm9pZCBzdGFydFJ1YmJlcmJhbmRBbmltYXRpb24oKTsKKyAgICB2b2lk
IHN0b3BTbmFwUnViYmVyYmFuZEFuaW1hdGlvbigpOworCisgICAgdm9pZCBzbmFwUnViYmVyQmFu
ZCgpOworICAgIGJvb2wgc2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbihjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdDsKKyAgICBib29sIHNob3VsZFJ1YmJlckJhbmRJ
bkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pIGNvbnN0OworICAgIGJvb2wgaXNSdWJiZXJCYW5k
SW5Qcm9ncmVzc0ludGVybmFsKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVSdWJiZXJCYW5kaW5n
U3RhdGUoKTsKKyAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdlcyhJbnRTaXplIGNsaWVu
dFN0cmV0Y2gpOworI2VuZGlmCisjZW5kaWYKKworICAgIHZvaWQgc3RhcnRPclN0b3BBbmltYXRp
b25DYWxsYmFja3MoKTsKKworICAgIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyQ2xpZW50JiBt
X2NsaWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU+IG1f
c2Nyb2xsU25hcFN0YXRlOworICAgIGJvb2wgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFu
Z2UgeyBmYWxzZSB9OworCisgICAgYm9vbCBtX2lzUnVubmluZ0FuaW1hdGluZ0NhbGxiYWNrIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1faXNBbmltYXRpbmdSdWJiZXJCYW5kIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faXNBbmltYXRpbmdTY3JvbGxTbmFwIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNB
bmltYXRpbmdLZXlib2FyZFNjcm9sbGluZyB7IGZhbHNlIH07CisKKyNpZiBQTEFURk9STShNQUMp
CisgICAgV2FsbFRpbWUgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7CisgICAgRmxvYXRT
aXplIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YTsKKyAgICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xs
Rm9yY2U7CisgICAgRmxvYXRTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsKKworICAgIGJvb2wgbV9p
blNjcm9sbEdlc3R1cmUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJv
Z3Jlc3MgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9pc1J1YmJlckJhbmRpbmcgeyBmYWxzZSB9OworCisgICAgRmxvYXRT
aXplIG1fZHJhZ0VuZGVkU2Nyb2xsaW5nVmVsb2NpdHk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbGluZ0VmZmVjdHNDb250cm9sbGVyVGltZXI+IG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25U
aW1lcjsKKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAvLyBSdWJiZXIgYmFuZCBz
dGF0ZS4KKyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOworICAgIEZsb2F0U2l6ZSBtX3N0
YXJ0U3RyZXRjaDsKKyAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7CisgICAgUmVjdEVkZ2Vz
PGJvb2w+IG1fcnViYmVyQmFuZGluZ0VkZ2VzOworI2VuZGlmCisKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgIGJvb2wgbV90aW1lcnNXZXJlU3RvcHBlZCB7IGZhbHNlIH07CisjZW5kaWYKKyNlbmRp
ZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAppbmRleCA1YjViYTUzYWRiNDgyZTFhZjUzMmNj
NmUwOWRhZTFjMzhkNTJhMmU0Li5iMzhjZTJhYjQ0NWVkNTExMzIxMWM1Yjg1YzQ0MTEzOTNmOGIx
NzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0
b3JNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JN
YWMuaApAQCAtNzAsNyArNzAsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBwcm9jZXNzV2hlZWxF
dmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7CiAKLSAg
ICAvLyBTY3JvbGxDb250cm9sbGVyQ2xpZW50LgorICAgIC8vIFNjcm9sbGluZ0VmZmVjdHNDb250
cm9sbGVyQ2xpZW50LgogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICBJbnRTaXplIHN0
cmV0Y2hBbW91bnQoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGFsbG93c0hvcml6b250YWxTdHJl
dGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xsZXIubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggY2FjOWIyYjE0OWMzOWVjMGNlZjAwNTFiZDIxN2FmZDg0NmQ2Mzg5
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQorKysgL2Rldi9udWxsCkBA
IC0xLDc4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlNjcm9sbENvbnRyb2xsZXIuaCIKLQotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9y
dCAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW1wb3J0ICJXaGVlbEV2ZW50VGVzdE1vbml0b3Iu
aCIKLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TU2Nyb2xsVmlld1NQSS5oPgotI2ltcG9ydCA8c3lz
L3N5c2N0bC5oPgotI2ltcG9ydCA8c3lzL3RpbWUuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0j
aWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotc3RhdGljIGNvbnN0IFNlY29uZHMgc2Nyb2xsVmVs
b2NpdHlaZXJvaW5nVGltZW91dCA9IDEwMF9tczsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJi
YW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbyA9IDE7Ci1zdGF0aWMgY29uc3QgZmxvYXQgcnVi
YmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOwotI2VuZGlmCi0K
LXN0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoZmxvYXQgaW5pdGlhbFBvc2l0
aW9uLCBmbG9hdCBpbml0aWFsVmVsb2NpdHksIFNlY29uZHMgZWxhcHNlZFRpbWUpCi17Ci0gICAg
cmV0dXJuIF9OU0VsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShpbml0aWFsUG9zaXRpb24sIGluaXRp
YWxWZWxvY2l0eSwgZWxhcHNlZFRpbWUuc2Vjb25kcygpKTsKLX0KLQotc3RhdGljIGZsb2F0IGVs
YXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShmbG9hdCBkZWx0YSkKLXsKLSAgICByZXR1cm4gX05T
RWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKGRlbHRhKTsKLX0KLQotc3RhdGljIGZsb2F0IHJl
Ym91bmREZWx0YUZvckVsYXN0aWNEZWx0YShmbG9hdCBkZWx0YSkKLXsKLSAgICByZXR1cm4gX05T
UmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKGRlbHRhKTsKLX0KLQotc3RhdGljIGZsb2F0IHNj
cm9sbFdoZWVsTXVsdGlwbGllcigpCi17Ci0gICAgc3RhdGljIGZsb2F0IG11bHRpcGxpZXIgPSAt
MTsKLSAgICBpZiAobXVsdGlwbGllciA8IDApIHsKLSAgICAgICAgbXVsdGlwbGllciA9IFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGZsb2F0Rm9yS2V5OkAiTlNTY3JvbGxX
aGVlbE11bHRpcGxpZXIiXTsKLSAgICAgICAgaWYgKG11bHRpcGxpZXIgPD0gMCkKLSAgICAgICAg
ICAgIG11bHRpcGxpZXIgPSAxOwotICAgIH0KLSAgICByZXR1cm4gbXVsdGlwbGllcjsKLX0KLQot
U2Nyb2xsQ29udHJvbGxlcjo6flNjcm9sbENvbnRyb2xsZXIoKQotewotICAgIEFTU0VSVChtX3Rp
bWVyc1dlcmVTdG9wcGVkKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wQWxsVGlt
ZXJzKCkKLXsKLSAgICBpZiAobV9zdGF0ZWxlc3NTbmFwVHJhbnNpdGlvblRpbWVyKQotICAgICAg
ICBtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXItPnN0b3AoKTsKLQotI2lmIEFTU0VSVF9F
TkFCTEVECi0gICAgbV90aW1lcnNXZXJlU3RvcHBlZCA9IHRydWU7Ci0jZW5kaWYKLX0KLQotYm9v
bCBTY3JvbGxDb250cm9sbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBpZiAocHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxT
bmFwKHdoZWVsRXZlbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICh3aGVlbEV2
ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok1heUJlZ2luIHx8IHdoZWVs
RXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2FuY2VsbGVkKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlOjpCZWdhbikgewotICAgICAgICAvLyBGSVhNRTogVHJ5aW5nIHRv
IGRlY2lkZSBpZiBhIGdlc3R1cmUgaXMgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBhdCB0aGUgImJl
Z2FuIiBwaGFzZSBpcyB2ZXJ5IGVycm9yLXByb25lLgotICAgICAgICBhdXRvIGRpcmVjdGlvbiA9
IGRpcmVjdGlvbkZyb21FdmVudCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwpOwotICAgICAgICBpZiAoZGlyZWN0aW9uICYmIG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xs
RGVsdGEoRmxvYXRTaXplKC13aGVlbEV2ZW50LmRlbHRhWCgpLCAwKSkgJiYgIXNob3VsZFJ1YmJl
ckJhbmRJbkRpcmVjdGlvbihkaXJlY3Rpb24udmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uRnJvbUV2ZW50KHdoZWVsRXZl
bnQsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOwotICAgICAgICBpZiAoZGlyZWN0aW9uICYm
IG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKDAsIC13aGVlbEV2ZW50
LmRlbHRhWSgpKSkgJiYgIXNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihkaXJlY3Rpb24udmFs
dWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9tb21lbnR1bVNj
cm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMg
PSBmYWxzZTsKLSAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB7IH07Ci0g
ICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IHsgfTsKLQotICAgICAgICBJbnRTaXplIHN0cmV0
Y2hBbW91bnQgPSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCk7Ci0gICAgICAgIG1fc3RyZXRjaFNj
cm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1v
dW50LndpZHRoKCkpKTsKLSAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJl
Ym91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50LmhlaWdodCgpKSk7Ci0gICAg
ICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IHsgfTsKLQotICAgICAgICBzdG9wU25hcFJ1YmJl
cmJhbmRBbmltYXRpb24oKTsKLSAgICAgICAgdXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICh3aGVlbEV2ZW50LnBoYXNlKCkg
PT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBU
aGlzIHRyaWdnZXJzIHRoZSBydWJiZXJiYW5kIHRpbWVyIGV2ZW4gd2hlbiB3ZSBkb24ndCBzdGFy
dCBydWJiZXJiYW5kaW5nLgotICAgICAgICBzbmFwUnViYmVyQmFuZCgpOwotICAgICAgICB1cGRh
dGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgYm9vbCBpc01vbWVudHVtU2Nyb2xsRXZlbnQgPSAod2hlZWxFdmVudC5tb21lbnR1bVBoYXNl
KCkgIT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6Ok5vbmUpOwotICAgIGlmIChtX2lnbm9yZU1v
bWVudHVtU2Nyb2xscyAmJiAoaXNNb21lbnR1bVNjcm9sbEV2ZW50IHx8IG1faXNBbmltYXRpbmdS
dWJiZXJCYW5kKSkgewotICAgICAgICBpZiAod2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgPT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkKSB7Ci0gICAgICAgICAgICBtX2lnbm9yZU1v
bWVudHVtU2Nyb2xscyA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoaXNNb21lbnR1bVNjcm9sbEV2ZW50ICYmIG1faWdub3JlTW9tZW50
dW1TY3JvbGxzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53
aWR0aCgpOwotICAgIGZsb2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQo
KTsKLQotICAgIC8vIFJlc2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1heSBkZWNpZGUg
dG8gcmVtb3ZlIGRlbHRhIGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50byBvdmVyZmxv
dy4KLSAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSB7IH07Ci0KLSAgICBJbnRTaXplIHN0cmV0
Y2hBbW91bnQgPSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCk7Ci0gICAgYm9vbCBpc1ZlcnRpY2Fs
bHlTdHJldGNoZWQgPSBzdHJldGNoQW1vdW50LmhlaWdodCgpOwotICAgIGJvb2wgaXNIb3Jpem9u
dGFsbHlTdHJldGNoZWQgPSBzdHJldGNoQW1vdW50LndpZHRoKCk7Ci0KLSAgICBmbG9hdCBldmVu
dENvYWxlc2NlZERlbHRhWDsKLSAgICBmbG9hdCBldmVudENvYWxlc2NlZERlbHRhWTsKLQotICAg
IGlmIChpc1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsK
LSAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVudC51bmFjY2VsZXJhdGVk
U2Nyb2xsaW5nRGVsdGFYKCk7Ci0gICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gLXdoZWVs
RXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWSgpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQuZGVsdGFYKCk7Ci0gICAgICAg
IGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gLXdoZWVsRXZlbnQuZGVsdGFZKCk7Ci0gICAgfQotCi0g
ICAgZGVsdGFYICs9IGV2ZW50Q29hbGVzY2VkRGVsdGFYOwotICAgIGRlbHRhWSArPSBldmVudENv
YWxlc2NlZERlbHRhWTsKLQotICAgIC8vIFNsaWdodGx5IHByZWZlciBzY3JvbGxpbmcgdmVydGlj
YWxseSBieSBhcHBseWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQotICAgIC8vIEZJWE1FOiBVc2Ug
d2hlZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwoKS4KLSAgICBpZiAoZmFic2YoZGVsdGFZ
KSA+PSBmYWJzZihkZWx0YVgpKQotICAgICAgICBkZWx0YVggPSAwOwotICAgIGVsc2UKLSAgICAg
ICAgZGVsdGFZID0gMDsKLQotICAgIGJvb2wgc2hvdWxkU3RyZXRjaCA9IGZhbHNlOwotCi0gICAg
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSA9IHdoZWVsRXZlbnQubW9tZW50
dW1QaGFzZSgpOwotCi0gICAgLy8gSWYgd2UgYXJlIHN0YXJ0aW5nIG1vbWVudHVtIHNjcm9sbGlu
ZyB0aGVuIGRvIHNvbWUgc2V0dXAuCi0gICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVz
cyAmJiAobW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW4gfHwg
bW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2hhbmdlZCkpCi0gICAg
ICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gdHJ1ZTsKLQotICAgIGF1dG8gdGltZURl
bHRhID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0
YW1wOwotICAgIGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9n
cmVzcykgewotICAgICAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGlt
ZURlbHRhID4gMF9zICYmIHRpbWVEZWx0YSA8IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQp
IHsKLSAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eS5zZXRXaWR0aChldmVudENvYWxlc2Nl
ZERlbHRhWCAvIHRpbWVEZWx0YS5zZWNvbmRzKCkpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZl
bG9jaXR5LnNldEhlaWdodChldmVudENvYWxlc2NlZERlbHRhWSAvIHRpbWVEZWx0YS5zZWNvbmRz
KCkpOwotICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2
ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9sYXN0TW9t
ZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAg
ICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoaXNWZXJ0aWNhbGx5U3RyZXRjaGVkKSB7Ci0gICAgICAgICAgICBpZiAoIWlzSG9yaXpv
bnRhbGx5U3RyZXRjaGVkICYmIG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxvYXRT
aXplKGRlbHRhWCwgMCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGlu
IHRoZSB2ZXJ0aWNhbC4KLSAgICAgICAgICAgICAgICBpZiAoZGVsdGFZICYmIChmYWJzZihkZWx0
YVggLyBkZWx0YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQotICAg
ICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZh
YnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNo
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aCht
X292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEu
d2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNI
b3Jpem9udGFsbHlTdHJldGNoZWQpIHsKLSAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBp
biB0aGUgaG9yaXpvbnRhbC4KLSAgICAgICAgICAgIGlmIChtX2NsaWVudC5pc1Bpbm5lZEZvclNj
cm9sbERlbHRhKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKSkgewotICAgICAgICAgICAgICAgIGlmIChk
ZWx0YVggJiYgKGZhYnNmKGRlbHRhWSAvIGRlbHRhWCkgPCBydWJiZXJiYW5kRGlyZWN0aW9uTG9j
a1N0cmV0Y2hSYXRpbykpCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVsdGFZKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWly
ZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Nj
cm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0
YVkpOwotICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVpZ2h0
KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBOb3Qgc3RyZXRjaGluZyBhdCBhbGwg
eWV0LgotICAgICAgICAgICAgaWYgKG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEoRmxv
YXRTaXplKGRlbHRhWCwgZGVsdGFZKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZmFic2YoZGVs
dGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmYWJzZihk
ZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1f
b3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dT
Y3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIW1fY2xpZW50LmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKHdoZWVs
RXZlbnQpKQotICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOwotCi0gICAgICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5hbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpCi0g
ICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0KLSAgICAgICAgICAgICAgICBzaG91bGRT
dHJldGNoID0gZGVsdGFYIHx8IGRlbHRhWTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJv
bGxlcjo6aGFuZGxlV2hlZWxFdmVudCgpIC0gZGVsdGFYICIgPDwgZGVsdGFYIDw8ICIgZGVsdGFZ
ICIgPDwgZGVsdGFZIDw8ICIgcGlubmVkICIgPDwgbV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxE
ZWx0YShGbG9hdFNpemUoZGVsdGFYLCBkZWx0YVkpKSA8PCAiIHNob3VsZFN0cmV0Y2ggIiA8PCBz
aG91bGRTdHJldGNoKTsKLSAgICB9Ci0KLSAgICBib29sIGhhbmRsZWQgPSB0cnVlOwotCi0gICAg
aWYgKGRlbHRhWCB8fCBkZWx0YVkpIHsKLSAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBp
c1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7Ci0gICAg
ICAgICAgICBpZiAoZGVsdGFZKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdo
ZWVsTXVsdGlwbGllcigpOwotICAgICAgICAgICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9s
bEJ5KEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChkZWx0YVgpIHsKLSAgICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBs
aWVyKCk7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQuaW1tZWRpYXRlU2Nyb2xsQnkoRmxvYXRT
aXplKGRlbHRhWCwgMCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaWYgKGRlbHRhWCkgewotICAgICAgICAgICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dz
SG9yaXpvbnRhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAw
OwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmICghaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgJiYgIW1fY2xpZW50LmlzUGlubmVk
Rm9yU2Nyb2xsRGVsdGEoRmxvYXRTaXplKGRlbHRhWCwgMCkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLQotICAgICAgICAgICAgICAg
ICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFp
bnRzKEZsb2F0U2l6ZShkZWx0YVgsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0g
MDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChk
ZWx0YVkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmFsbG93c1ZlcnRpY2FsU3Ry
ZXRjaGluZyh3aGVlbEV2ZW50KSkgewotICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwot
ICAgICAgICAgICAgICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFp
c1ZlcnRpY2FsbHlTdHJldGNoZWQgJiYgIW1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEo
RmxvYXRTaXplKDAsIGRlbHRhWSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBz
Y3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC5p
bW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZSgw
LCBkZWx0YVkpKTsKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEludFNpemUgc3RyZXRjaEFtb3Vu
dCA9IG1fY2xpZW50LnN0cmV0Y2hBbW91bnQoKTsKLQotICAgICAgICAgICAgaWYgKG1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChtX2NsaWVudC5pc1Bp
bm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZShldmVudENvYWxlc2NlZERlbHRhWCwgZXZlbnRD
b2FsZXNjZWREZWx0YVkpKSB8fCAoZmFic2YoZXZlbnRDb2FsZXNjZWREZWx0YVgpICsgZmFic2Yo
ZXZlbnRDb2FsZXNjZWREZWx0YVkpIDw9IDApKSAmJiBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVz
dGFtcCkgewotICAgICAgICAgICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5z
ZXRXaWR0aChtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAg
ICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChtX3N0cmV0Y2hTY3JvbGxGb3JjZS5o
ZWlnaHQoKSArIGRlbHRhWSk7Ci0KLSAgICAgICAgICAgIEZsb2F0U2l6ZSBkYW1wZWREZWx0YShj
ZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lk
dGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xs
Rm9yY2UuaGVpZ2h0KCkpKSk7Ci0KLSAgICAgICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9s
bEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoZGFtcGVkRGVsdGEgLSBzdHJldGNoQW1v
dW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9n
cmVzcyAmJiBtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRlZCkg
ewotICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAgICBt
X2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOwotICAgICAgICBtX2xhc3RNb21lbnR1bVNj
cm9sbFRpbWVzdGFtcCA9IHsgfTsKLSAgICB9Ci0KLSAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3Rh
dGUoKTsKLQotICAgIHJldHVybiBoYW5kbGVkOwotfQotCi1GbG9hdFNpemUgU2Nyb2xsQ29udHJv
bGxlcjo6d2hlZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIGF1dG8gZGVsdGFYID0gd2hlZWxFdmVudC5kZWx0
YVgoKTsKLSAgICBhdXRvIGRlbHRhWSA9IHdoZWVsRXZlbnQuZGVsdGFZKCk7Ci0KLSAgICBpZiAo
ZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKQotICAgICAgICBkZWx0YVggPSAwOwotICAg
IGVsc2UKLSAgICAgICAgZGVsdGFZID0gMDsKLQotICAgIHJldHVybiB7IGRlbHRhWCwgZGVsdGFZ
IH07Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8U2Nyb2xsRGlyZWN0aW9uPiBTY3JvbGxDb250cm9sbGVy
OjpkaXJlY3Rpb25Gcm9tRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
LCBzdGQ6Om9wdGlvbmFsPFNjcm9sbEV2ZW50QXhpcz4gYXhpcywgV2hlZWxBeGlzQmlhcyBiaWFz
KQotewotICAgIC8vIEZJWE1FOiBJdCdzIGltcG9zc2libGUgdG8gaW5mZXIgZGlyZWN0aW9uIGZy
b20gYSBzaW5nbGUgZXZlbnQsIHNpbmNlIHRoZSBzdGFydCBvZiBhIGdlc3R1cmUgaXMgZWl0aGVy
IHplcm8gb3IKLSAgICAvLyBoYXMgc21hbGwgZGVsdGFzIG9uIGJvdGggYXhlcy4KLQotICAgIGF1
dG8gd2hlZWxEZWx0YSA9IEZsb2F0U2l6ZSB7IHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZl
bnQuZGVsdGFZKCkgfTsKLSAgICBpZiAoYmlhcyA9PSBXaGVlbEF4aXNCaWFzOjpWZXJ0aWNhbCkK
LSAgICAgICAgd2hlZWxEZWx0YSA9IHdoZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRpY2FsKHdo
ZWVsRXZlbnQpOwotCi0gICAgaWYgKGF4aXMpIHsKLSAgICAgICAgc3dpdGNoIChheGlzLnZhbHVl
KCkpIHsKLSAgICAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsOgotICAgICAgICAg
ICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0KCkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBT
Y3JvbGxEb3duOwotCi0gICAgICAgICAgICBpZiAod2hlZWxEZWx0YS5oZWlnaHQoKSA+IDApCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbFVwOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWw6Ci0gICAgICAgICAgICBpZiAo
d2hlZWxEZWx0YS53aWR0aCgpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2Nyb2xsTGVm
dDsKLQotICAgICAgICAgICAgaWYgKHdoZWVsRGVsdGEud2lkdGgoKSA8IDApCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFNjcm9sbFJpZ2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBZIGZpcnN0IGJlY2F1c2UgdmVydGlj
YWwgc2Nyb2xsaW5nIGRvbWluYXRlcy4KLSAgICBpZiAod2hlZWxEZWx0YS5oZWlnaHQoKSA8IDAp
Ci0gICAgICAgIHJldHVybiBTY3JvbGxEb3duOwotCi0gICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0
KCkgPiAwKQotICAgICAgICByZXR1cm4gU2Nyb2xsVXA7Ci0KLSAgICBpZiAod2hlZWxEZWx0YS53
aWR0aCgpID4gMCkKLSAgICAgICAgcmV0dXJuIFNjcm9sbExlZnQ7Ci0KLSAgICBpZiAod2hlZWxE
ZWx0YS53aWR0aCgpIDwgMCkKLSAgICAgICAgcmV0dXJuIFNjcm9sbFJpZ2h0OwotCi0gICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLXN0YXRp
YyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51bSkKLXsKLSAgICByZXR1cm4g
bnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51bSArIDAuNWYpOwotfQotCi1z
dGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZmxvYXQgbnVt
KQotewotICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVtKTsKLSAgICBpZiAoZmFicyhu
dW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQotICAgICAgICBudW0gPSByb3VuZGVkTnVtOwotCi0g
ICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xs
ZXI6OnVwZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lIGN1cnJlbnRU
aW1lKQotewotICAgIGlmICghbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlNjcm9sbENv
bnRyb2xsZXI6OnVwZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdTdGF0ZSgpIC0gbWFpbiB0aHJlYWQg
IiA8PCBpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fbW9tZW50dW1TY3JvbGxJblByb2dy
ZXNzIHx8IG1faWdub3JlTW9tZW50dW1TY3JvbGxzKSB7Ci0gICAgICAgIGF1dG8gdGltZURlbHRh
ID0gY3VycmVudFRpbWUgLSBtX3N0YXJ0VGltZTsKLQotICAgICAgICBpZiAobV9zdGFydFN0cmV0
Y2guaXNaZXJvKCkpIHsKLSAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gbV9jbGllbnQuc3Ry
ZXRjaEFtb3VudCgpOwotICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgc3RvcFJ1YmJlcmJhbmRpbmcoKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5
ID0gbV9tb21lbnR1bVZlbG9jaXR5OwotCi0gICAgICAgICAgICAvLyBKdXN0IGxpa2Ugbm9ybWFs
IHNjcm9sbGluZywgcHJlZmVyIHZlcnRpY2FsIHJ1YmJlcmJhbmRpbmcKLSAgICAgICAgICAgIGlm
IChmYWJzZihtX29yaWdWZWxvY2l0eS5oZWlnaHQoKSkgPj0gZmFic2YobV9vcmlnVmVsb2NpdHku
d2lkdGgoKSkpCi0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0V2lkdGgoMCk7Ci0K
LSAgICAgICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5kIGhvcml6b250YWxseSBpZiBpdCdzIG5v
dCBwb3NzaWJsZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5Ci0gICAgICAgICAgICBpZiAoIW1fY2xp
ZW50LmFsbG93c0hvcml6b250YWxTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgICAgICBtX29yaWdW
ZWxvY2l0eS5zZXRXaWR0aCgwKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgcnViYmVyLWJhbmQg
dmVydGljYWxseSBpZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzY3JvbGwgdmVydGljYWxseQotICAg
ICAgICAgICAgaWYgKCFtX2NsaWVudC5hbGxvd3NWZXJ0aWNhbFNjcm9sbGluZygpKQotICAgICAg
ICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldEhlaWdodCgwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEZsb2F0UG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGlj
RGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5
LndpZHRoKCksIHRpbWVEZWx0YSkpLAotICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93
YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCks
IC1tX29yaWdWZWxvY2l0eS5oZWlnaHQoKSwgdGltZURlbHRhKSkpOwotCi0gICAgICAgIGlmIChm
YWJzKGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnkoKSkgPj0gMSkgewotICAgICAgICAg
ICAgbV9jbGllbnQuaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50
cyhGbG9hdFNpemUoZGVsdGEueCgpLCBkZWx0YS55KCkpIC0gbV9jbGllbnQuc3RyZXRjaEFtb3Vu
dCgpKTsKLQotICAgICAgICAgICAgRmxvYXRTaXplIG5ld1N0cmV0Y2ggPSBtX2NsaWVudC5zdHJl
dGNoQW1vdW50KCk7Ci0KLSAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRo
KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLndpZHRoKCkpKTsKLSAgICAg
ICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFz
dGljRGVsdGEobmV3U3RyZXRjaC5oZWlnaHQoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgbV9jbGllbnQuYWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCk7
Ci0gICAgICAgICAgICBzdG9wUnViYmVyYmFuZGluZygpOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgbV9zdGFydFRpbWUgPSBjdXJyZW50VGltZTsKLSAgICAgICAgbV9zdGFydFN0
cmV0Y2ggPSB7IH07Ci0gICAgICAgIGlmICghaXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVybmFs
KCkpCi0gICAgICAgICAgICBzdG9wU25hcFJ1YmJlcmJhbmRBbmltYXRpb24oKTsKLSAgICB9Ci0K
LSAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKLX0KLSNlbmRpZgotCi12b2lkIFNjcm9s
bENvbnRyb2xsZXI6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpCi17Ci0jaWYgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQotICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOwotI2VuZGlmCi19Ci0K
LWJvb2wgU2Nyb2xsQ29udHJvbGxlcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1faW5TY3JvbGxHZXN0dXJlOwotfQotCi1ib29sIFNjcm9sbENvbnRyb2xs
ZXI6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAotewotI2lmIEVOQUJMRShSVUJCRVJf
QkFORElORykKLSAgICByZXR1cm4gbV9pc1J1YmJlckJhbmRpbmc7Ci0jZWxzZQotICAgIHJldHVy
biBmYWxzZTsKLSNlbmRpZgotfQotCi1ib29sIFNjcm9sbENvbnRyb2xsZXI6OmlzU2Nyb2xsU25h
cEluUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1faW5TY3JvbGxHZXN0dXJlIHx8IG1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzIHx8IG1faXNBbmltYXRpbmdTY3JvbGxTbmFwKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9s
bGVyOjpzdG9wUnViYmVyYmFuZGluZygpCi17Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQot
ICAgIHN0b3BTbmFwUnViYmVyYmFuZEFuaW1hdGlvbigpOwotICAgIG1fc3RyZXRjaFNjcm9sbEZv
cmNlID0geyB9OwotICAgIG1fc3RhcnRUaW1lID0geyB9OwotICAgIG1fc3RhcnRTdHJldGNoID0g
eyB9OwotICAgIG1fb3JpZ1ZlbG9jaXR5ID0geyB9OwotICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdT
dGF0ZSgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi12b2lkIFNj
cm9sbENvbnRyb2xsZXI6OnN0YXJ0UnViYmVyYmFuZEFuaW1hdGlvbigpCi17Ci0gICAgbV9jbGll
bnQud2lsbFN0YXJ0UnViYmVyQmFuZFNuYXBBbmltYXRpb24oKTsKLQotICAgIHNldElzQW5pbWF0
aW5nUnViYmVyQmFuZCh0cnVlKTsKLQotICAgIG1fY2xpZW50LmRlZmVyV2hlZWxFdmVudFRlc3RD
b21wbGV0aW9uRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9y
OjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6
OlJ1YmJlcmJhbmRJblByb2dyZXNzKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9w
U25hcFJ1YmJlcmJhbmRBbmltYXRpb24oKQotewotICAgIG1fY2xpZW50LmRpZFN0b3BSdWJiZXJi
YW5kU25hcEFuaW1hdGlvbigpOwotCi0gICAgc2V0SXNBbmltYXRpbmdSdWJiZXJCYW5kKGZhbHNl
KTsKLQotICAgIG1fY2xpZW50LnJlbW92ZVdoZWVsRXZlbnRUZXN0Q29tcGxldGlvbkRlZmVycmFs
Rm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nhc3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxh
YmxlQXJlYUlkZW50aWZpZXI+KHRoaXMpLCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlJ1YmJlcmJh
bmRJblByb2dyZXNzKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzbmFwUnViYmVyQmFu
ZCgpCi17Ci0gICAgYXV0byB0aW1lRGVsdGEgPSBXYWxsVGltZTo6bm93KCkgLSBtX2xhc3RNb21l
bnR1bVNjcm9sbFRpbWVzdGFtcDsKLSAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3Rh
bXAgJiYgdGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCi0gICAgICAg
IG1fbW9tZW50dW1WZWxvY2l0eSA9IHsgfTsKLQotICAgIGlmIChtX2lzQW5pbWF0aW5nUnViYmVy
QmFuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKLSAgICBtX3N0YXJ0U3RyZXRjaCA9IHsgfTsKLSAgICBtX29yaWdWZWxvY2l0eSA9
IHsgfTsKLQotICAgIHN0YXJ0UnViYmVyYmFuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIFNjcm9s
bENvbnRyb2xsZXI6OnNob3VsZFJ1YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24oY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KSBjb25zdAotewotICAgIGF1dG8gZGlyZWN0
aW9uID0gZGlyZWN0aW9uRnJvbUV2ZW50KHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6SG9y
aXpvbnRhbCk7Ci0gICAgaWYgKGRpcmVjdGlvbikKLSAgICAgICAgcmV0dXJuIHNob3VsZFJ1YmJl
ckJhbmRJbkRpcmVjdGlvbihkaXJlY3Rpb24udmFsdWUoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBTY3JvbGxDb250cm9sbGVyOjpzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24o
U2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jbGllbnQu
c2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKGRpcmVjdGlvbik7Ci19Ci0KLWJvb2wgU2Nyb2xs
Q29udHJvbGxlcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzc0ludGVybmFsKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1faW5TY3JvbGxHZXN0dXJlICYmICFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAm
JiAhbV9pc0FuaW1hdGluZ1J1YmJlckJhbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiAhbV9jbGllbnQuc3RyZXRjaEFtb3VudCgpLmlzWmVybygpOwotfQotCi12b2lkIFNj
cm9sbENvbnRyb2xsZXI6OnVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpCi17Ci0gICAgYm9vbCBp
c1J1YmJlckJhbmRpbmcgPSBpc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJuYWwoKTsKLSAgICBp
ZiAoaXNSdWJiZXJCYW5kaW5nID09IG1faXNSdWJiZXJCYW5kaW5nKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2lzUnViYmVyQmFuZGluZyA9IGlzUnViYmVyQmFuZGluZzsKLSAgICBpZiAobV9p
c1J1YmJlckJhbmRpbmcpCi0gICAgICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdFZGdlcyhtX2NsaWVu
dC5zdHJldGNoQW1vdW50KCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9ydWJiZXJCYW5kaW5nRWRn
ZXMgPSB7IH07Ci0KLSAgICBtX2NsaWVudC5ydWJiZXJCYW5kaW5nU3RhdGVDaGFuZ2VkKG1faXNS
dWJiZXJCYW5kaW5nKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVSdWJiZXJC
YW5kaW5nRWRnZXMoSW50U2l6ZSBjbGllbnRTdHJldGNoKQotewotICAgIG1fcnViYmVyQmFuZGlu
Z0VkZ2VzLnNldExlZnQoY2xpZW50U3RyZXRjaC53aWR0aCgpIDwgMCk7Ci0gICAgbV9ydWJiZXJC
YW5kaW5nRWRnZXMuc2V0UmlnaHQoY2xpZW50U3RyZXRjaC53aWR0aCgpID4gMCk7Ci0KLSAgICBt
X3J1YmJlckJhbmRpbmdFZGdlcy5zZXRUb3AoY2xpZW50U3RyZXRjaC5oZWlnaHQoKSA8IDApOwot
ICAgIG1fcnViYmVyQmFuZGluZ0VkZ2VzLnNldEJvdHRvbShjbGllbnRTdHJldGNoLmhlaWdodCgp
ID4gMCk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0KLWVudW0gY2xh
c3MgV2hlZWxFdmVudFN0YXR1cyB7Ci0gICAgVXNlclNjcm9sbEJlZ2luLAotICAgIFVzZXJTY3Jv
bGxpbmcsCi0gICAgVXNlclNjcm9sbEVuZCwKLSAgICBNb21lbnR1bVNjcm9sbEJlZ2luLAotICAg
IE1vbWVudHVtU2Nyb2xsaW5nLAotICAgIE1vbWVudHVtU2Nyb2xsRW5kLAotICAgIFN0YXRlbGVz
c1Njcm9sbEV2ZW50LAotICAgIFVua25vd24KLX07Ci0KLXN0YXRpYyBpbmxpbmUgV2hlZWxFdmVu
dFN0YXR1cyB0b1doZWVsRXZlbnRTdGF0dXMoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2Us
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2UpCi17Ci0gICAgaWYgKHBoYXNl
ID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpOb25lKSB7Ci0gICAgICAgIHN3aXRjaCAobW9t
ZW50dW1QaGFzZSkgewotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpCZWdh
bjoKLSAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbEJl
Z2luOwotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlOjpDaGFuZ2VkOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVu
dHVtU2Nyb2xsaW5nOwotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlOjpFbmRlZDoKLSAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVz
OjpNb21lbnR1bVNjcm9sbEVuZDsKLQotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlOjpOb25lOgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlN0YXRlbGVz
c1Njcm9sbEV2ZW50OwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gV2hl
ZWxFdmVudFN0YXR1czo6VW5rbm93bjsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobW9tZW50
dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Tm9uZSkgewotICAgICAgICBzd2l0
Y2ggKHBoYXNlKSB7Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkJlZ2Fu
OgotICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpNYXlCZWdpbjoKLSAgICAg
ICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVnaW47Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNoYW5nZWQ6
Ci0gICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGluZzsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5k
ZWQ6Ci0gICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkNhbmNlbGxlZDoKLSAg
ICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsRW5kOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZl
bnRTdGF0dXM6OlVua25vd247Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFdoZWVsRXZl
bnRTdGF0dXM6OlVua25vd247Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgV2hlZWxFdmVudFN0YXR1cyBzdGF0dXMp
Ci17Ci0gICAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVz
ZXJTY3JvbGxCZWdpbjogdHMgPDwgIlVzZXJTY3JvbGxCZWdpbiI7IGJyZWFrOwotICAgIGNhc2Ug
V2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGluZzogdHMgPDwgIlVzZXJTY3JvbGxpbmciOyBi
cmVhazsKLSAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ6IHRzIDw8ICJV
c2VyU2Nyb2xsRW5kIjsgYnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1
bVNjcm9sbEJlZ2luOiB0cyA8PCAiTW9tZW50dW1TY3JvbGxCZWdpbiI7IGJyZWFrOwotICAgIGNh
c2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxpbmc6IHRzIDw8ICJNb21lbnR1bVNj
cm9sbGluZyI7IGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3Jv
bGxFbmQ6IHRzIDw8ICJNb21lbnR1bVNjcm9sbEVuZCI7IGJyZWFrOwotICAgIGNhc2UgV2hlZWxF
dmVudFN0YXR1czo6U3RhdGVsZXNzU2Nyb2xsRXZlbnQ6IHRzIDw8ICJTdGF0ZWxlc3NTY3JvbGxF
dmVudCI7IGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjogdHMgPDwg
IlVua25vd24iOyBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQotI2VuZGlmCi0KLWJv
b2wgU2Nyb2xsQ29udHJvbGxlcjo6c2hvdWxkT3ZlcnJpZGVNb21lbnR1bVNjcm9sbGluZygpIGNv
bnN0Ci17Ci0gICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBTY3JvbGxTbmFwU3RhdGUgc2Nyb2xsU25hcFN0YXRlID0gbV9zY3JvbGxTbmFwU3Rh
dGUtPmN1cnJlbnRTdGF0ZSgpOwotICAgIHJldHVybiBzY3JvbGxTbmFwU3RhdGUgPT0gU2Nyb2xs
U25hcFN0YXRlOjpHbGlkaW5nIHx8IHNjcm9sbFNuYXBTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6
OkRlc3RpbmF0aW9uUmVhY2hlZDsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzY2hlZHVs
ZVN0YXRlbGVzc1Njcm9sbFNuYXAoKQotewotICAgIHN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCk7
Ci0gICAgaWYgKG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lcikgewotICAgICAgICBtX3N0
YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXItPnN0b3AoKTsKLSAgICAgICAgbV9zdGF0ZWxlc3NT
bmFwVHJhbnNpdGlvblRpbWVyID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKCF1c2VzU2Nyb2xs
U25hcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyBzdGF0
ZWxlc3NTY3JvbGxTbmFwRGVsYXkgPSA3NTBfbXM7Ci0gICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNp
dGlvblRpbWVyID0gbV9jbGllbnQuY3JlYXRlVGltZXIoW3RoaXNdIHsKLSAgICAgICAgc3RhdGVs
ZXNzU25hcFRyYW5zaXRpb25UaW1lckZpcmVkKCk7Ci0gICAgfSk7Ci0gICAgbV9zdGF0ZWxlc3NT
bmFwVHJhbnNpdGlvblRpbWVyLT5zdGFydE9uZVNob3Qoc3RhdGVsZXNzU2Nyb2xsU25hcERlbGF5
KTsKLSAgICBzdGFydERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xs
U25hcHBpbmcoKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdGF0ZWxlc3NTbmFwVHJh
bnNpdGlvblRpbWVyRmlyZWQoKQotewotICAgIG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1l
ciA9IG51bGxwdHI7Ci0KLSAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9TbmFwQW5pbWF0aW9uU3Rh
dGUobV9jbGllbnQuc2Nyb2xsRXh0ZW50KCksIG1fY2xpZW50LnZpZXdwb3J0U2l6ZSgpLCBtX2Ns
aWVudC5wYWdlU2NhbGVGYWN0b3IoKSwgbV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkpOwotICAgIHN0
YXJ0U2Nyb2xsU25hcEFuaW1hdGlvbigpOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0
YXJ0RGVmZXJyaW5nV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRHVlVG9TY3JvbGxTbmFwcGluZygp
Ci17Ci0gICAgbV9jbGllbnQuZGVmZXJXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25Gb3JSZWFzb24o
cmVpbnRlcnByZXRfY2FzdDxXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlNjcm9sbGFibGVBcmVhSWRl
bnRpZmllcj4odGhpcyksIFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsU25hcEluUHJvZ3Jl
c3MpOwotfQotCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0b3BEZWZlcnJpbmdXaGVlbEV2ZW50
VGVzdENvbXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKCkKLXsKLSAgICBtX2NsaWVudC5yZW1v
dmVXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25EZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9j
YXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlz
KSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxTbmFwSW5Qcm9ncmVzcyk7Ci19Ci0KLWJv
b2wgU2Nyb2xsQ29udHJvbGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBpZiAoIXVzZXNTY3JvbGxT
bmFwKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3Njcm9sbFNuYXBTdGF0
ZS0+c25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkuaXNFbXB0
eSgpICYmIG1fc2Nyb2xsU25hcFN0YXRlLT5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIHN0YXR1cyA9IHRvV2hlZWxFdmVudFN0YXR1cyh3aGVlbEV2ZW50LnBoYXNlKCksIHdoZWVs
RXZlbnQubW9tZW50dW1QaGFzZSgpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxTbmFw
LCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgcHJvY2Vzc1doZWVs
RXZlbnRGb3JTY3JvbGxTbmFwOiBzdGF0dXMgIiA8PCBzdGF0dXMpOwotCi0gICAgYm9vbCBpc01v
bWVudHVtU2Nyb2xsaW5nID0gZmFsc2U7Ci0gICAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICBjYXNl
IFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxCZWdpbjoKLSAgICBjYXNlIFdoZWVsRXZlbnRT
dGF0dXM6OlVzZXJTY3JvbGxpbmc6Ci0gICAgICAgIHN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCk7
Ci0gICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9Vc2VySW50ZXJhY3Rpb25T
dGF0ZSgpOwotICAgICAgICBtX2RyYWdFbmRlZFNjcm9sbGluZ1ZlbG9jaXR5ID0gLXdoZWVsRXZl
bnQuc2Nyb2xsaW5nVmVsb2NpdHkoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaGVlbEV2
ZW50U3RhdHVzOjpVc2VyU2Nyb2xsRW5kOgotICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJh
bnNpdGlvblRvU25hcEFuaW1hdGlvblN0YXRlKG1fY2xpZW50LnNjcm9sbEV4dGVudCgpLCBtX2Ns
aWVudC52aWV3cG9ydFNpemUoKSwgbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCksIG1fY2xpZW50
LnNjcm9sbE9mZnNldCgpKTsKLSAgICAgICAgc3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxC
ZWdpbjoKLSAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnRyYW5zaXRpb25Ub0dsaWRlQW5pbWF0
aW9uU3RhdGUobV9jbGllbnQuc2Nyb2xsRXh0ZW50KCksIG1fY2xpZW50LnZpZXdwb3J0U2l6ZSgp
LCBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSwgbV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCksIG1f
ZHJhZ0VuZGVkU2Nyb2xsaW5nVmVsb2NpdHksIEZsb2F0U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgo
KSwgLXdoZWVsRXZlbnQuZGVsdGFZKCkpKTsKLSAgICAgICAgbV9kcmFnRW5kZWRTY3JvbGxpbmdW
ZWxvY2l0eSA9IHsgfTsKLSAgICAgICAgaXNNb21lbnR1bVNjcm9sbGluZyA9IHRydWU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxpbmc6
Ci0gICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbEVuZDoKLSAgICAgICAg
aXNNb21lbnR1bVNjcm9sbGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2hl
ZWxFdmVudFN0YXR1czo6U3RhdGVsZXNzU2Nyb2xsRXZlbnQ6Ci0gICAgICAgIG1fc2Nyb2xsU25h
cFN0YXRlLT50cmFuc2l0aW9uVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZSgpOwotICAgICAgICBzY2hl
ZHVsZVN0YXRlbGVzc1Njcm9sbFNuYXAoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaGVl
bEV2ZW50U3RhdHVzOjpVbmtub3duOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlzTW9tZW50dW1TY3JvbGxpbmcgJiYg
c2hvdWxkT3ZlcnJpZGVNb21lbnR1bVNjcm9sbGluZygpOwotfQotCi12b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnVwZGF0ZUdlc3R1cmVJblByb2dyZXNzU3RhdGUoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50KQotewotICAgIGlmICh3aGVlbEV2ZW50LmlzR2VzdHVyZVN0YXJ0KCkg
fHwgd2hlZWxFdmVudC5pc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkpCi0gICAgICAg
IG1faW5TY3JvbGxHZXN0dXJlID0gdHJ1ZTsKLSAgICBlbHNlIGlmICh3aGVlbEV2ZW50LmlzRW5k
T2ZOb25Nb21lbnR1bVNjcm9sbCgpIHx8IHdoZWVsRXZlbnQuaXNHZXN0dXJlQ2FuY2VsKCkgfHwg
d2hlZWxFdmVudC5pc0VuZE9mTW9tZW50dW1TY3JvbGwoKSkKLSAgICAgICAgbV9pblNjcm9sbEdl
c3R1cmUgPSBmYWxzZTsKLQotICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOwotfQotCi12
b2lkIFNjcm9sbENvbnRyb2xsZXI6OnN0YXJ0U2Nyb2xsU25hcEFuaW1hdGlvbigpCi17Ci0gICAg
aWYgKG1faXNBbmltYXRpbmdTY3JvbGxTbmFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0df
V0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJTY3JvbGxDb250cm9sbGVyICIgPDwg
dGhpcyA8PCAiIHN0YXJ0U2Nyb2xsU25hcEFuaW1hdGlvbiAobWFpbiB0aHJlYWQgIiA8PCBpc01h
aW5UaHJlYWQoKSA8PCAiKSIpOwotCi0gICAgc3RhcnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENv
bXBsZXRpb25EdWVUb1Njcm9sbFNuYXBwaW5nKCk7Ci0gICAgbV9jbGllbnQud2lsbFN0YXJ0U2Ny
b2xsU25hcEFuaW1hdGlvbigpOwotICAgIHNldElzQW5pbWF0aW5nU2Nyb2xsU25hcCh0cnVlKTsK
LX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpCi17
Ci0gICAgaWYgKCFtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsQ29udHJvbGxl
ciAiIDw8IHRoaXMgPDwgIiBzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbiAobWFpbiB0aHJlYWQgIiA8
PCBpc01haW5UaHJlYWQoKSA8PCAiKSIpOwotCi0gICAgc3RvcERlZmVycmluZ1doZWVsRXZlbnRU
ZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKLSAgICBtX2NsaWVudC5kaWRTdG9w
U2Nyb2xsU25hcEFuaW1hdGlvbigpOwotCi0gICAgc2V0SXNBbmltYXRpbmdTY3JvbGxTbmFwKGZh
bHNlKTsKLX0KLQotdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVTY3JvbGxTbmFwQW5pbWF0
aW5nU3RhdGUoTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSkKLXsKLSAgICBpZiAoIW1faXNBbmlt
YXRpbmdTY3JvbGxTbmFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXVzZXNTY3JvbGxT
bmFwKCkpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBib29sIGlzQW5pbWF0aW9uQ29tcGxldGU7Ci0gICAgYXV0byBhbmltYXRp
b25PZmZzZXQgPSBtX3Njcm9sbFNuYXBTdGF0ZS0+Y3VycmVudEFuaW1hdGVkU2Nyb2xsT2Zmc2V0
KGN1cnJlbnRUaW1lLCBpc0FuaW1hdGlvbkNvbXBsZXRlKTsKLSAgICBhdXRvIGN1cnJlbnRPZmZz
ZXQgPSBtX2NsaWVudC5zY3JvbGxPZmZzZXQoKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3Jv
bGxTbmFwLCBzdHJlYW0gPDwgIlNjcm9sbENvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgdXBkYXRl
U2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlIC0gaXNBbmltYXRpb25Db21wbGV0ZSAiIDw8IGlzQW5p
bWF0aW9uQ29tcGxldGUgPDwgIiBjdXJyZW50T2Zmc2V0ICIgPDwgY3VycmVudE9mZnNldCA8PCAi
IChtYWluIHRocmVhZCAiIDw8IGlzTWFpblRocmVhZCgpIDw8ICIpIik7Ci0KLSAgICBtX2NsaWVu
dC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6
ZShhbmltYXRpb25PZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCksIGFuaW1hdGlvbk9mZnNl
dC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKSkpOwotICAgIGlmIChpc0FuaW1hdGlvbkNvbXBsZXRl
KSB7Ci0gICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9EZXN0aW5hdGlvblJl
YWNoZWRTdGF0ZSgpOwotICAgICAgICBzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpOwotICAgIH0K
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGluZ0VmZmVj
dHNDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3MTE5NGU5N2Y1NTgyYWI2YTdiYTY5ZDBjOTNh
N2MxMDJlYmRlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIubW0KQEAgLTAsMCArMSw3ODggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiU2Nyb2xsaW5nRWZmZWN0
c0NvbnRyb2xsZXIuaCIKKworI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiUGxhdGZvcm1X
aGVlbEV2ZW50LmgiCisjaW1wb3J0ICJXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCIKKyNpbXBvcnQg
PHBhbC9zcGkvbWFjL05TU2Nyb2xsVmlld1NQSS5oPgorI2ltcG9ydCA8c3lzL3N5c2N0bC5oPgor
I2ltcG9ydCA8c3lzL3RpbWUuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKwor
I2lmIFBMQVRGT1JNKE1BQykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQorc3RhdGljIGNvbnN0IFNlY29uZHMgc2Nyb2xsVmVsb2NpdHlaZXJvaW5n
VGltZW91dCA9IDEwMF9tczsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kRGlyZWN0aW9u
TG9ja1N0cmV0Y2hSYXRpbyA9IDE7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZE1pbmlt
dW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOworI2VuZGlmCisKK3N0YXRpYyBmbG9h
dCBlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoZmxvYXQgaW5pdGlhbFBvc2l0aW9uLCBmbG9hdCBp
bml0aWFsVmVsb2NpdHksIFNlY29uZHMgZWxhcHNlZFRpbWUpCit7CisgICAgcmV0dXJuIF9OU0Vs
YXN0aWNEZWx0YUZvclRpbWVEZWx0YShpbml0aWFsUG9zaXRpb24sIGluaXRpYWxWZWxvY2l0eSwg
ZWxhcHNlZFRpbWUuc2Vjb25kcygpKTsKK30KKworc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZv
clJlYm91bmREZWx0YShmbG9hdCBkZWx0YSkKK3sKKyAgICByZXR1cm4gX05TRWxhc3RpY0RlbHRh
Rm9yUmVib3VuZERlbHRhKGRlbHRhKTsKK30KKworc3RhdGljIGZsb2F0IHJlYm91bmREZWx0YUZv
ckVsYXN0aWNEZWx0YShmbG9hdCBkZWx0YSkKK3sKKyAgICByZXR1cm4gX05TUmVib3VuZERlbHRh
Rm9yRWxhc3RpY0RlbHRhKGRlbHRhKTsKK30KKworc3RhdGljIGZsb2F0IHNjcm9sbFdoZWVsTXVs
dGlwbGllcigpCit7CisgICAgc3RhdGljIGZsb2F0IG11bHRpcGxpZXIgPSAtMTsKKyAgICBpZiAo
bXVsdGlwbGllciA8IDApIHsKKyAgICAgICAgbXVsdGlwbGllciA9IFtbTlNVc2VyRGVmYXVsdHMg
c3RhbmRhcmRVc2VyRGVmYXVsdHNdIGZsb2F0Rm9yS2V5OkAiTlNTY3JvbGxXaGVlbE11bHRpcGxp
ZXIiXTsKKyAgICAgICAgaWYgKG11bHRpcGxpZXIgPD0gMCkKKyAgICAgICAgICAgIG11bHRpcGxp
ZXIgPSAxOworICAgIH0KKyAgICByZXR1cm4gbXVsdGlwbGllcjsKK30KKworU2Nyb2xsaW5nRWZm
ZWN0c0NvbnRyb2xsZXI6On5TY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcigpCit7CisgICAgQVNT
RVJUKG1fdGltZXJzV2VyZVN0b3BwZWQpOworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250
cm9sbGVyOjpzdG9wQWxsVGltZXJzKCkKK3sKKyAgICBpZiAobV9zdGF0ZWxlc3NTbmFwVHJhbnNp
dGlvblRpbWVyKQorICAgICAgICBtX3N0YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXItPnN0b3Ao
KTsKKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbV90aW1lcnNXZXJlU3RvcHBlZCA9IHRydWU7
CisjZW5kaWYKK30KKworYm9vbCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6aGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYg
KHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCh3aGVlbEV2ZW50KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlOjpNYXlCZWdpbiB8fCB3aGVlbEV2ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U6OkNhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW4pIHsK
KyAgICAgICAgLy8gRklYTUU6IFRyeWluZyB0byBkZWNpZGUgaWYgYSBnZXN0dXJlIGlzIGhvcml6
b250YWwgb3IgdmVydGljYWwgYXQgdGhlICJiZWdhbiIgcGhhc2UgaXMgdmVyeSBlcnJvci1wcm9u
ZS4KKyAgICAgICAgYXV0byBkaXJlY3Rpb24gPSBkaXJlY3Rpb25Gcm9tRXZlbnQod2hlZWxFdmVu
dCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiAm
JiBtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZSgtd2hlZWxFdmVudC5k
ZWx0YVgoKSwgMCkpICYmICFzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oZGlyZWN0aW9uLnZh
bHVlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGRpcmVjdGlvbiA9
IGRpcmVjdGlvbkZyb21FdmVudCh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2Fs
KTsKKyAgICAgICAgaWYgKGRpcmVjdGlvbiAmJiBtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERl
bHRhKEZsb2F0U2l6ZSgwLCAtd2hlZWxFdmVudC5kZWx0YVkoKSkpICYmICFzaG91bGRSdWJiZXJC
YW5kSW5EaXJlY3Rpb24oZGlyZWN0aW9uLnZhbHVlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7CisgICAg
ICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CisgICAgICAgIG1fbGFzdE1vbWVu
dHVtU2Nyb2xsVGltZXN0YW1wID0geyB9OworICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSB7
IH07CisKKyAgICAgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9jbGllbnQuc3RyZXRjaEFt
b3VudCgpOworICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChyZWJvdW5kRGVs
dGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC53aWR0aCgpKSk7CisgICAgICAgIG1fc3Ry
ZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3Ry
ZXRjaEFtb3VudC5oZWlnaHQoKSkpOworICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSB7
IH07CisKKyAgICAgICAgc3RvcFNuYXBSdWJiZXJiYW5kQW5pbWF0aW9uKCk7CisgICAgICAgIHVw
ZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpF
bmRlZCkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyB0cmlnZ2VycyB0aGUgcnViYmVyYmFuZCB0
aW1lciBldmVuIHdoZW4gd2UgZG9uJ3Qgc3RhcnQgcnViYmVyYmFuZGluZy4KKyAgICAgICAgc25h
cFJ1YmJlckJhbmQoKTsKKyAgICAgICAgdXBkYXRlUnViYmVyQmFuZGluZ1N0YXRlKCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgaXNNb21lbnR1bVNjcm9sbEV2ZW50
ID0gKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
OjpOb25lKTsKKyAgICBpZiAobV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgJiYgKGlzTW9tZW50dW1T
Y3JvbGxFdmVudCB8fCBtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCkpIHsKKyAgICAgICAgaWYgKHdo
ZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpFbmRl
ZCkgeworICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzTW9tZW50dW1T
Y3JvbGxFdmVudCAmJiBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmbG9hdCBkZWx0
YVggPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKTsKKyAgICBmbG9hdCBkZWx0YVkgPSBt
X292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CisKKyAgICAvLyBSZXNldCBvdmVyZmxvdyB2
YWx1ZXMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIHJlbW92ZSBkZWx0YSBhdCB2YXJpb3VzIHBv
aW50cyBhbmQgcHV0IGl0IGludG8gb3ZlcmZsb3cuCisgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRh
ID0geyB9OworCisgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9jbGllbnQuc3RyZXRjaEFt
b3VudCgpOworICAgIGJvb2wgaXNWZXJ0aWNhbGx5U3RyZXRjaGVkID0gc3RyZXRjaEFtb3VudC5o
ZWlnaHQoKTsKKyAgICBib29sIGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkID0gc3RyZXRjaEFtb3Vu
dC53aWR0aCgpOworCisgICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVg7CisgICAgZmxvYXQg
ZXZlbnRDb2FsZXNjZWREZWx0YVk7CisKKyAgICBpZiAoaXNWZXJ0aWNhbGx5U3RyZXRjaGVkIHx8
IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSB7CisgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFY
ID0gLXdoZWVsRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWCgpOworICAgICAgICBl
dmVudENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdE
ZWx0YVkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWCA9IC13
aGVlbEV2ZW50LmRlbHRhWCgpOworICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IC13aGVl
bEV2ZW50LmRlbHRhWSgpOworICAgIH0KKworICAgIGRlbHRhWCArPSBldmVudENvYWxlc2NlZERl
bHRhWDsKKyAgICBkZWx0YVkgKz0gZXZlbnRDb2FsZXNjZWREZWx0YVk7CisKKyAgICAvLyBTbGln
aHRseSBwcmVmZXIgc2Nyb2xsaW5nIHZlcnRpY2FsbHkgYnkgYXBwbHlpbmcgdGhlID0gY2FzZSB0
byBkZWx0YVkKKyAgICAvLyBGSVhNRTogVXNlIHdoZWVsRGVsdGFCaWFzaW5nVG93YXJkc1ZlcnRp
Y2FsKCkuCisgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKKyAgICAgICAg
ZGVsdGFYID0gMDsKKyAgICBlbHNlCisgICAgICAgIGRlbHRhWSA9IDA7CisKKyAgICBib29sIHNo
b3VsZFN0cmV0Y2ggPSBmYWxzZTsKKworICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1vbWVu
dHVtUGhhc2UgPSB3aGVlbEV2ZW50Lm1vbWVudHVtUGhhc2UoKTsKKworICAgIC8vIElmIHdlIGFy
ZSBzdGFydGluZyBtb21lbnR1bSBzY3JvbGxpbmcgdGhlbiBkbyBzb21lIHNldHVwLgorICAgIGlm
ICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgKG1vbWVudHVtUGhhc2UgPT0gUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2U6OkJlZ2FuIHx8IG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U6OkNoYW5nZWQpKQorICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVz
cyA9IHRydWU7CisKKyAgICBhdXRvIHRpbWVEZWx0YSA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCkg
LSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9pblNjcm9sbEdlc3R1
cmUgfHwgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgaWYgKG1fbGFzdE1v
bWVudHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+IDBfcyAmJiB0aW1lRGVsdGEgPCBz
Y3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KSB7CisgICAgICAgICAgICBtX21vbWVudHVtVmVs
b2NpdHkuc2V0V2lkdGgoZXZlbnRDb2FsZXNjZWREZWx0YVggLyB0aW1lRGVsdGEuc2Vjb25kcygp
KTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eS5zZXRIZWlnaHQoZXZlbnRDb2FsZXNj
ZWREZWx0YVkgLyB0aW1lRGVsdGEuc2Vjb25kcygpKTsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVu
dHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxF
dmVudC50aW1lc3RhbXAoKTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0
U2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCkg
eworICAgICAgICAgICAgaWYgKCFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiBtX2NsaWVudC5p
c1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZShkZWx0YVgsIDApKSkgeworICAgICAgICAg
ICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUgdmVydGljYWwuCisgICAgICAgICAgICAg
ICAgaWYgKGRlbHRhWSAmJiAoZmFic2YoZGVsdGFYIC8gZGVsdGFZKSA8IHJ1YmJlcmJhbmREaXJl
Y3Rpb25Mb2NrU3RyZXRjaFJhdGlvKSkKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmlt
dW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgeworICAgICAgICAgICAgICAgICAgICBtX292
ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkg
KyBkZWx0YVgpOworICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0
V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSB7CisgICAg
ICAgICAgICAvLyBTdHJldGNoaW5nIG9ubHkgaW4gdGhlIGhvcml6b250YWwuCisgICAgICAgICAg
ICBpZiAobV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUoMCwgZGVsdGFZ
KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGVsdGFYICYmIChmYWJzZihkZWx0YVkgLyBkZWx0
YVgpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQorICAgICAgICAgICAg
ICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRh
WSkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRIZWlnaHQobV9vdmVyZmxv
d1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVsdGFZKTsKKyAgICAgICAgICAgICAgICAgICAgZGVs
dGFZID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9v
dmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0
KCkgKyBkZWx0YVkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gTm90IHN0cmV0Y2hpbmcgYXQgYWxsIHlldC4KKyAgICAgICAgICAgIGlmIChtX2NsaWVu
dC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZShkZWx0YVgsIGRlbHRhWSkpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFYKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVx
dWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSAr
IGRlbHRhWCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3Jv
bGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5hbGxv
d3NIb3Jpem9udGFsU3RyZXRjaGluZyh3aGVlbEV2ZW50KSkKKyAgICAgICAgICAgICAgICAgICAg
ZGVsdGFYID0gMDsKKworICAgICAgICAgICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dzVmVydGlj
YWxTdHJldGNoaW5nKHdoZWVsRXZlbnQpKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAw
OworCisgICAgICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9IGRlbHRhWCB8fCBkZWx0YVk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xs
aW5nLCBzdHJlYW0gPDwgIlNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpoYW5kbGVXaGVlbEV2
ZW50KCkgLSBkZWx0YVggIiA8PCBkZWx0YVggPDwgIiBkZWx0YVkgIiA8PCBkZWx0YVkgPDwgIiBw
aW5uZWQgIiA8PCBtX2NsaWVudC5pc1Bpbm5lZEZvclNjcm9sbERlbHRhKEZsb2F0U2l6ZShkZWx0
YVgsIGRlbHRhWSkpIDw8ICIgc2hvdWxkU3RyZXRjaCAiIDw8IHNob3VsZFN0cmV0Y2gpOworICAg
IH0KKworICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7CisKKyAgICBpZiAoZGVsdGFYIHx8IGRlbHRh
WSkgeworICAgICAgICBpZiAoIShzaG91bGRTdHJldGNoIHx8IGlzVmVydGljYWxseVN0cmV0Y2hl
ZCB8fCBpc0hvcml6b250YWxseVN0cmV0Y2hlZCkpIHsKKyAgICAgICAgICAgIGlmIChkZWx0YVkp
IHsKKyAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7Cisg
ICAgICAgICAgICAgICAgbV9jbGllbnQuaW1tZWRpYXRlU2Nyb2xsQnkoRmxvYXRTaXplKDAsIGRl
bHRhWSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlbHRhWCkgeworICAgICAg
ICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKyAgICAgICAgICAg
ICAgICBtX2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeShGbG9hdFNpemUoZGVsdGFYLCAwKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZGVsdGFYKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5hbGxvd3NIb3Jpem9udGFsU3RyZXRjaGlu
Zyh3aGVlbEV2ZW50KSkgeworICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAg
ICAgICAgICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0hvcml6
b250YWxseVN0cmV0Y2hlZCAmJiAhbV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9h
dFNpemUoZGVsdGFYLCAwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9s
bFdoZWVsTXVsdGlwbGllcigpOworCisgICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LmltbWVk
aWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoRmxvYXRTaXplKGRlbHRh
WCwgMCkpOworICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRlbHRhWSkgeworICAgICAgICAg
ICAgICAgIGlmICghbV9jbGllbnQuYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKHdoZWVsRXZlbnQp
KSB7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7CisgICAgICAgICAgICAgICAgICAg
IGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzVmVydGljYWxseVN0cmV0Y2hl
ZCAmJiAhbV9jbGllbnQuaXNQaW5uZWRGb3JTY3JvbGxEZWx0YShGbG9hdFNpemUoMCwgZGVsdGFZ
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGll
cigpOworCisgICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LmltbWVkaWF0ZVNjcm9sbEJ5V2l0
aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoRmxvYXRTaXplKDAsIGRlbHRhWSkpOworICAgICAg
ICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9jbGllbnQuc3RyZXRj
aEFtb3VudCgpOworCisgICAgICAgICAgICBpZiAobV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3Mp
IHsKKyAgICAgICAgICAgICAgICBpZiAoKG1fY2xpZW50LmlzUGlubmVkRm9yU2Nyb2xsRGVsdGEo
RmxvYXRTaXplKGV2ZW50Q29hbGVzY2VkRGVsdGFYLCBldmVudENvYWxlc2NlZERlbHRhWSkpIHx8
IChmYWJzZihldmVudENvYWxlc2NlZERlbHRhWCkgKyBmYWJzZihldmVudENvYWxlc2NlZERlbHRh
WSkgPD0gMCkpICYmIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgc25hcFJ1YmJlckJhbmQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKG1fc3RyZXRjaFNj
cm9sbEZvcmNlLndpZHRoKCkgKyBkZWx0YVgpOworICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xs
Rm9yY2Uuc2V0SGVpZ2h0KG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpICsgZGVsdGFZKTsK
KworICAgICAgICAgICAgRmxvYXRTaXplIGRhbXBlZERlbHRhKGNlaWxmKGVsYXN0aWNEZWx0YUZv
clJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpKSksIGNlaWxmKGVsYXN0
aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSkpKTsK
KworICAgICAgICAgICAgbV9jbGllbnQuaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVk
Z2VDb25zdHJhaW50cyhkYW1wZWREZWx0YSAtIHN0cmV0Y2hBbW91bnQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzICYmIG1vbWVudHVtUGhh
c2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkKSB7CisgICAgICAgIG1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3Jv
bGxzID0gZmFsc2U7CisgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0geyB9
OworICAgIH0KKworICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOworCisgICAgcmV0dXJu
IGhhbmRsZWQ7Cit9CisKK0Zsb2F0U2l6ZSBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6d2hl
ZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3
aGVlbEV2ZW50KQoreworICAgIGF1dG8gZGVsdGFYID0gd2hlZWxFdmVudC5kZWx0YVgoKTsKKyAg
ICBhdXRvIGRlbHRhWSA9IHdoZWVsRXZlbnQuZGVsdGFZKCk7CisKKyAgICBpZiAoZmFic2YoZGVs
dGFZKSA+PSBmYWJzZihkZWx0YVgpKQorICAgICAgICBkZWx0YVggPSAwOworICAgIGVsc2UKKyAg
ICAgICAgZGVsdGFZID0gMDsKKworICAgIHJldHVybiB7IGRlbHRhWCwgZGVsdGFZIH07Cit9CisK
K3N0ZDo6b3B0aW9uYWw8U2Nyb2xsRGlyZWN0aW9uPiBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxl
cjo6ZGlyZWN0aW9uRnJvbUV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVu
dCwgc3RkOjpvcHRpb25hbDxTY3JvbGxFdmVudEF4aXM+IGF4aXMsIFdoZWVsQXhpc0JpYXMgYmlh
cykKK3sKKyAgICAvLyBGSVhNRTogSXQncyBpbXBvc3NpYmxlIHRvIGluZmVyIGRpcmVjdGlvbiBm
cm9tIGEgc2luZ2xlIGV2ZW50LCBzaW5jZSB0aGUgc3RhcnQgb2YgYSBnZXN0dXJlIGlzIGVpdGhl
ciB6ZXJvIG9yCisgICAgLy8gaGFzIHNtYWxsIGRlbHRhcyBvbiBib3RoIGF4ZXMuCisKKyAgICBh
dXRvIHdoZWVsRGVsdGEgPSBGbG9hdFNpemUgeyB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2
ZW50LmRlbHRhWSgpIH07CisgICAgaWYgKGJpYXMgPT0gV2hlZWxBeGlzQmlhczo6VmVydGljYWwp
CisgICAgICAgIHdoZWVsRGVsdGEgPSB3aGVlbERlbHRhQmlhc2luZ1Rvd2FyZHNWZXJ0aWNhbCh3
aGVlbEV2ZW50KTsKKworICAgIGlmIChheGlzKSB7CisgICAgICAgIHN3aXRjaCAoYXhpcy52YWx1
ZSgpKSB7CisgICAgICAgIGNhc2UgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbDoKKyAgICAgICAg
ICAgIGlmICh3aGVlbERlbHRhLmhlaWdodCgpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
U2Nyb2xsRG93bjsKKworICAgICAgICAgICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0KCkgPiAwKQor
ICAgICAgICAgICAgICAgIHJldHVybiBTY3JvbGxVcDsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsOgorICAgICAgICAgICAgaWYg
KHdoZWVsRGVsdGEud2lkdGgoKSA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbExl
ZnQ7CisKKyAgICAgICAgICAgIGlmICh3aGVlbERlbHRhLndpZHRoKCkgPCAwKQorICAgICAgICAg
ICAgICAgIHJldHVybiBTY3JvbGxSaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgLy8gQ2hlY2sgWSBmaXJzdCBiZWNhdXNlIHZlcnRp
Y2FsIHNjcm9sbGluZyBkb21pbmF0ZXMuCisgICAgaWYgKHdoZWVsRGVsdGEuaGVpZ2h0KCkgPCAw
KQorICAgICAgICByZXR1cm4gU2Nyb2xsRG93bjsKKworICAgIGlmICh3aGVlbERlbHRhLmhlaWdo
dCgpID4gMCkKKyAgICAgICAgcmV0dXJuIFNjcm9sbFVwOworCisgICAgaWYgKHdoZWVsRGVsdGEu
d2lkdGgoKSA+IDApCisgICAgICAgIHJldHVybiBTY3JvbGxMZWZ0OworCisgICAgaWYgKHdoZWVs
RGVsdGEud2lkdGgoKSA8IDApCisgICAgICAgIHJldHVybiBTY3JvbGxSaWdodDsKKworICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCitzdGF0
aWMgaW5saW5lIGZsb2F0IHJvdW5kVG93YXJkWmVybyhmbG9hdCBudW0pCit7CisgICAgcmV0dXJu
IG51bSA+IDAgPyBjZWlsZihudW0gLSAwLjVmKSA6IGZsb29yZihudW0gKyAwLjVmKTsKK30KKwor
c3RhdGljIGlubGluZSBmbG9hdCByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGZsb2F0IG51
bSkKK3sKKyAgICBmbG9hdCByb3VuZGVkTnVtID0gcm91bmRmKG51bSk7CisgICAgaWYgKGZhYnMo
bnVtIC0gcm91bmRlZE51bSkgPCAwLjEyNSkKKyAgICAgICAgbnVtID0gcm91bmRlZE51bTsKKwor
ICAgIHJldHVybiByb3VuZFRvd2FyZFplcm8obnVtKTsKK30KKwordm9pZCBTY3JvbGxpbmdFZmZl
Y3RzQ29udHJvbGxlcjo6dXBkYXRlUnViYmVyQmFuZEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1Rp
bWUgY3VycmVudFRpbWUpCit7CisgICAgaWYgKCFtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8
PCAiU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnVwZGF0ZVJ1YmJlckJhbmRBbmltYXRpbmdT
dGF0ZSgpIC0gbWFpbiB0aHJlYWQgIiA8PCBpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1f
bW9tZW50dW1TY3JvbGxJblByb2dyZXNzIHx8IG1faWdub3JlTW9tZW50dW1TY3JvbGxzKSB7Cisg
ICAgICAgIGF1dG8gdGltZURlbHRhID0gY3VycmVudFRpbWUgLSBtX3N0YXJ0VGltZTsKKworICAg
ICAgICBpZiAobV9zdGFydFN0cmV0Y2guaXNaZXJvKCkpIHsKKyAgICAgICAgICAgIG1fc3RhcnRT
dHJldGNoID0gbV9jbGllbnQuc3RyZXRjaEFtb3VudCgpOworICAgICAgICAgICAgaWYgKG1fc3Rh
cnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgc3RvcFJ1YmJlcmJh
bmRpbmcoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gbV9tb21lbnR1bVZlbG9jaXR5OworCisgICAgICAgICAg
ICAvLyBKdXN0IGxpa2Ugbm9ybWFsIHNjcm9sbGluZywgcHJlZmVyIHZlcnRpY2FsIHJ1YmJlcmJh
bmRpbmcKKyAgICAgICAgICAgIGlmIChmYWJzZihtX29yaWdWZWxvY2l0eS5oZWlnaHQoKSkgPj0g
ZmFic2YobV9vcmlnVmVsb2NpdHkud2lkdGgoKSkpCisgICAgICAgICAgICAgICAgbV9vcmlnVmVs
b2NpdHkuc2V0V2lkdGgoMCk7CisKKyAgICAgICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5kIGhv
cml6b250YWxseSBpZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5Cisg
ICAgICAgICAgICBpZiAoIW1fY2xpZW50LmFsbG93c0hvcml6b250YWxTY3JvbGxpbmcoKSkKKyAg
ICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRXaWR0aCgwKTsKKworICAgICAgICAgICAg
Ly8gRG9uJ3QgcnViYmVyLWJhbmQgdmVydGljYWxseSBpZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBz
Y3JvbGwgdmVydGljYWxseQorICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5hbGxvd3NWZXJ0aWNh
bFNjcm9sbGluZygpKQorICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldEhlaWdodCgw
KTsKKyAgICAgICAgfQorCisgICAgICAgIEZsb2F0UG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBp
eGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lk
dGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRoKCksIHRpbWVEZWx0YSkpLAorICAgICAgICAgICAg
cm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9z
dGFydFN0cmV0Y2guaGVpZ2h0KCksIC1tX29yaWdWZWxvY2l0eS5oZWlnaHQoKSwgdGltZURlbHRh
KSkpOworCisgICAgICAgIGlmIChmYWJzKGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnko
KSkgPj0gMSkgeworICAgICAgICAgICAgbV9jbGllbnQuaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0
Q29udGVudEVkZ2VDb25zdHJhaW50cyhGbG9hdFNpemUoZGVsdGEueCgpLCBkZWx0YS55KCkpIC0g
bV9jbGllbnQuc3RyZXRjaEFtb3VudCgpKTsKKworICAgICAgICAgICAgRmxvYXRTaXplIG5ld1N0
cmV0Y2ggPSBtX2NsaWVudC5zdHJldGNoQW1vdW50KCk7CisKKyAgICAgICAgICAgIG1fc3RyZXRj
aFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJl
dGNoLndpZHRoKCkpKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdo
dChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC5oZWlnaHQoKSkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9jbGllbnQuYWRqdXN0U2Nyb2xsUG9zaXRpb25U
b0JvdW5kc0lmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICBzdG9wUnViYmVyYmFuZGluZygpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9zdGFydFRpbWUgPSBjdXJyZW50VGlt
ZTsKKyAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSB7IH07CisgICAgICAgIGlmICghaXNSdWJiZXJC
YW5kSW5Qcm9ncmVzc0ludGVybmFsKCkpCisgICAgICAgICAgICBzdG9wU25hcFJ1YmJlcmJhbmRB
bmltYXRpb24oKTsKKyAgICB9CisKKyAgICB1cGRhdGVSdWJiZXJCYW5kaW5nU3RhdGUoKTsKK30K
KyNlbmRpZgorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzY3JvbGxQb3NpdGlv
bkNoYW5nZWQoKQoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICB1cGRhdGVSdWJi
ZXJCYW5kaW5nU3RhdGUoKTsKKyNlbmRpZgorfQorCitib29sIFNjcm9sbGluZ0VmZmVjdHNDb250
cm9sbGVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
blNjcm9sbEdlc3R1cmU7Cit9CisKK2Jvb2wgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6Omlz
UnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKKyAgICByZXR1cm4gbV9pc1J1YmJlckJhbmRpbmc7CisjZWxzZQorICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorfQorCitib29sIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjppc1Njcm9s
bFNuYXBJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21v
bWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2Nyb2xsaW5n
RWZmZWN0c0NvbnRyb2xsZXI6OnN0b3BSdWJiZXJiYW5kaW5nKCkKK3sKKyNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCisgICAgc3RvcFNuYXBSdWJiZXJiYW5kQW5pbWF0aW9uKCk7CisgICAgbV9z
dHJldGNoU2Nyb2xsRm9yY2UgPSB7IH07CisgICAgbV9zdGFydFRpbWUgPSB7IH07CisgICAgbV9z
dGFydFN0cmV0Y2ggPSB7IH07CisgICAgbV9vcmlnVmVsb2NpdHkgPSB7IH07CisgICAgdXBkYXRl
UnViYmVyQmFuZGluZ1N0YXRlKCk7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnN0YXJ0UnViYmVyYmFuZEFu
aW1hdGlvbigpCit7CisgICAgbV9jbGllbnQud2lsbFN0YXJ0UnViYmVyQmFuZFNuYXBBbmltYXRp
b24oKTsKKworICAgIHNldElzQW5pbWF0aW5nUnViYmVyQmFuZCh0cnVlKTsKKworICAgIG1fY2xp
ZW50LmRlZmVyV2hlZWxFdmVudFRlc3RDb21wbGV0aW9uRm9yUmVhc29uKHJlaW50ZXJwcmV0X2Nh
c3Q8V2hlZWxFdmVudFRlc3RNb25pdG9yOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXI+KHRoaXMp
LCBXaGVlbEV2ZW50VGVzdE1vbml0b3I6OlJ1YmJlcmJhbmRJblByb2dyZXNzKTsKK30KKwordm9p
ZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3RvcFNuYXBSdWJiZXJiYW5kQW5pbWF0aW9u
KCkKK3sKKyAgICBtX2NsaWVudC5kaWRTdG9wUnViYmVyYmFuZFNuYXBBbmltYXRpb24oKTsKKwor
ICAgIHNldElzQW5pbWF0aW5nUnViYmVyQmFuZChmYWxzZSk7CisKKyAgICBtX2NsaWVudC5yZW1v
dmVXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25EZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9j
YXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlz
KSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpSdWJiZXJiYW5kSW5Qcm9ncmVzcyk7Cit9CisKK3Zv
aWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnNuYXBSdWJiZXJCYW5kKCkKK3sKKyAgICBh
dXRvIHRpbWVEZWx0YSA9IFdhbGxUaW1lOjpub3coKSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGlt
ZXN0YW1wOworICAgIGlmIChtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVs
dGEgPj0gc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCkKKyAgICAgICAgbV9tb21lbnR1bVZl
bG9jaXR5ID0geyB9OworCisgICAgaWYgKG1faXNBbmltYXRpbmdSdWJiZXJCYW5kKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAg
IG1fc3RhcnRTdHJldGNoID0geyB9OworICAgIG1fb3JpZ1ZlbG9jaXR5ID0geyB9OworCisgICAg
c3RhcnRSdWJiZXJiYW5kQW5pbWF0aW9uKCk7Cit9CisKK2Jvb2wgU2Nyb2xsaW5nRWZmZWN0c0Nv
bnRyb2xsZXI6OnNob3VsZFJ1YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24oY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KSBjb25zdAoreworICAgIGF1dG8gZGlyZWN0aW9u
ID0gZGlyZWN0aW9uRnJvbUV2ZW50KHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCk7CisgICAgaWYgKGRpcmVjdGlvbikKKyAgICAgICAgcmV0dXJuIHNob3VsZFJ1YmJlckJh
bmRJbkRpcmVjdGlvbihkaXJlY3Rpb24udmFsdWUoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c2hvdWxkUnViYmVyQmFuZEluRGly
ZWN0aW9uKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Y2xpZW50LnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihkaXJlY3Rpb24pOworfQorCitib29s
IFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzSW50ZXJu
YWwoKSBjb25zdAoreworICAgIGlmICghbV9pblNjcm9sbEdlc3R1cmUgJiYgIW1fbW9tZW50dW1T
Y3JvbGxJblByb2dyZXNzICYmICFtX2lzQW5pbWF0aW5nUnViYmVyQmFuZCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuICFtX2NsaWVudC5zdHJldGNoQW1vdW50KCkuaXNaZXJv
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnVwZGF0ZVJ1YmJlckJh
bmRpbmdTdGF0ZSgpCit7CisgICAgYm9vbCBpc1J1YmJlckJhbmRpbmcgPSBpc1J1YmJlckJhbmRJ
blByb2dyZXNzSW50ZXJuYWwoKTsKKyAgICBpZiAoaXNSdWJiZXJCYW5kaW5nID09IG1faXNSdWJi
ZXJCYW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzUnViYmVyQmFuZGluZyA9IGlz
UnViYmVyQmFuZGluZzsKKyAgICBpZiAobV9pc1J1YmJlckJhbmRpbmcpCisgICAgICAgIHVwZGF0
ZVJ1YmJlckJhbmRpbmdFZGdlcyhtX2NsaWVudC5zdHJldGNoQW1vdW50KCkpOworICAgIGVsc2UK
KyAgICAgICAgbV9ydWJiZXJCYW5kaW5nRWRnZXMgPSB7IH07CisKKyAgICBtX2NsaWVudC5ydWJi
ZXJCYW5kaW5nU3RhdGVDaGFuZ2VkKG1faXNSdWJiZXJCYW5kaW5nKTsKK30KKwordm9pZCBTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6dXBkYXRlUnViYmVyQmFuZGluZ0VkZ2VzKEludFNpemUg
Y2xpZW50U3RyZXRjaCkKK3sKKyAgICBtX3J1YmJlckJhbmRpbmdFZGdlcy5zZXRMZWZ0KGNsaWVu
dFN0cmV0Y2gud2lkdGgoKSA8IDApOworICAgIG1fcnViYmVyQmFuZGluZ0VkZ2VzLnNldFJpZ2h0
KGNsaWVudFN0cmV0Y2gud2lkdGgoKSA+IDApOworCisgICAgbV9ydWJiZXJCYW5kaW5nRWRnZXMu
c2V0VG9wKGNsaWVudFN0cmV0Y2guaGVpZ2h0KCkgPCAwKTsKKyAgICBtX3J1YmJlckJhbmRpbmdF
ZGdlcy5zZXRCb3R0b20oY2xpZW50U3RyZXRjaC5oZWlnaHQoKSA+IDApOworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorCitlbnVtIGNsYXNzIFdoZWVsRXZlbnRTdGF0dXMg
eworICAgIFVzZXJTY3JvbGxCZWdpbiwKKyAgICBVc2VyU2Nyb2xsaW5nLAorICAgIFVzZXJTY3Jv
bGxFbmQsCisgICAgTW9tZW50dW1TY3JvbGxCZWdpbiwKKyAgICBNb21lbnR1bVNjcm9sbGluZywK
KyAgICBNb21lbnR1bVNjcm9sbEVuZCwKKyAgICBTdGF0ZWxlc3NTY3JvbGxFdmVudCwKKyAgICBV
bmtub3duCit9OworCitzdGF0aWMgaW5saW5lIFdoZWVsRXZlbnRTdGF0dXMgdG9XaGVlbEV2ZW50
U3RhdHVzKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlLCBQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZSBtb21lbnR1bVBoYXNlKQoreworICAgIGlmIChwaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZTo6Tm9uZSkgeworICAgICAgICBzd2l0Y2ggKG1vbWVudHVtUGhhc2UpIHsKKyAgICAg
ICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6QmVnYW46CisgICAgICAgICAgICByZXR1
cm4gV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxCZWdpbjsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Q2hhbmdlZDoKKyAgICAg
ICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbGluZzsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6RW5kZWQ6
CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxFbmQ7
CisKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZTo6Tm9uZToKKyAgICAgICAg
ICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpTdGF0ZWxlc3NTY3JvbGxFdmVudDsKKworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVua25v
d247CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2U6Ok5vbmUpIHsKKyAgICAgICAgc3dpdGNoIChwaGFzZSkgeworICAgICAg
ICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpCZWdhbjoKKyAgICAgICAgY2FzZSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZTo6TWF5QmVnaW46CisgICAgICAgICAgICByZXR1cm4gV2hlZWxF
dmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOworICAgICAgICAgICAgICAgIAorICAgICAgICBj
YXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlOjpDaGFuZ2VkOgorICAgICAgICAgICAgcmV0dXJu
IFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U6OkVuZGVkOgorICAgICAgICBjYXNlIFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlOjpDYW5jZWxsZWQ6CisgICAgICAgICAgICByZXR1cm4gV2hl
ZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEVuZDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOwor
fQorCisjaWYgIUxPR19ESVNBQkxFRAorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIFdoZWVsRXZlbnRTdGF0dXMgc3RhdHVzKQoreworICAgIHN3aXRjaCAoc3Rh
dHVzKSB7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVnaW46IHRzIDw8
ICJVc2VyU2Nyb2xsQmVnaW4iOyBicmVhazsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVz
ZXJTY3JvbGxpbmc6IHRzIDw8ICJVc2VyU2Nyb2xsaW5nIjsgYnJlYWs7CisgICAgY2FzZSBXaGVl
bEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsRW5kOiB0cyA8PCAiVXNlclNjcm9sbEVuZCI7IGJyZWFr
OworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6TW9tZW50dW1TY3JvbGxCZWdpbjogdHMgPDwg
Ik1vbWVudHVtU2Nyb2xsQmVnaW4iOyBicmVhazsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6
Ok1vbWVudHVtU2Nyb2xsaW5nOiB0cyA8PCAiTW9tZW50dW1TY3JvbGxpbmciOyBicmVhazsKKyAg
ICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsRW5kOiB0cyA8PCAiTW9tZW50
dW1TY3JvbGxFbmQiOyBicmVhazsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlN0YXRlbGVz
c1Njcm9sbEV2ZW50OiB0cyA8PCAiU3RhdGVsZXNzU2Nyb2xsRXZlbnQiOyBicmVhazsKKyAgICBj
YXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd246IHRzIDw8ICJVbmtub3duIjsgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiB0czsKK30KKyNlbmRpZgorCitib29sIFNjcm9sbGluZ0VmZmVjdHND
b250cm9sbGVyOjpzaG91bGRPdmVycmlkZU1vbWVudHVtU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAg
ICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNj
cm9sbFNuYXBTdGF0ZSBzY3JvbGxTbmFwU3RhdGUgPSBtX3Njcm9sbFNuYXBTdGF0ZS0+Y3VycmVu
dFN0YXRlKCk7CisgICAgcmV0dXJuIHNjcm9sbFNuYXBTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6
OkdsaWRpbmcgfHwgc2Nyb2xsU25hcFN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6RGVzdGluYXRp
b25SZWFjaGVkOworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzY2hlZHVs
ZVN0YXRlbGVzc1Njcm9sbFNuYXAoKQoreworICAgIHN0b3BTY3JvbGxTbmFwQW5pbWF0aW9uKCk7
CisgICAgaWYgKG1fc3RhdGVsZXNzU25hcFRyYW5zaXRpb25UaW1lcikgeworICAgICAgICBtX3N0
YXRlbGVzc1NuYXBUcmFuc2l0aW9uVGltZXItPnN0b3AoKTsKKyAgICAgICAgbV9zdGF0ZWxlc3NT
bmFwVHJhbnNpdGlvblRpbWVyID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKCF1c2VzU2Nyb2xs
U25hcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyBzdGF0
ZWxlc3NTY3JvbGxTbmFwRGVsYXkgPSA3NTBfbXM7CisgICAgbV9zdGF0ZWxlc3NTbmFwVHJhbnNp
dGlvblRpbWVyID0gbV9jbGllbnQuY3JlYXRlVGltZXIoW3RoaXNdIHsKKyAgICAgICAgc3RhdGVs
ZXNzU25hcFRyYW5zaXRpb25UaW1lckZpcmVkKCk7CisgICAgfSk7CisgICAgbV9zdGF0ZWxlc3NT
bmFwVHJhbnNpdGlvblRpbWVyLT5zdGFydE9uZVNob3Qoc3RhdGVsZXNzU2Nyb2xsU25hcERlbGF5
KTsKKyAgICBzdGFydERlZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xs
U25hcHBpbmcoKTsKK30KKwordm9pZCBTY3JvbGxpbmdFZmZlY3RzQ29udHJvbGxlcjo6c3RhdGVs
ZXNzU25hcFRyYW5zaXRpb25UaW1lckZpcmVkKCkKK3sKKyAgICBtX3N0YXRlbGVzc1NuYXBUcmFu
c2l0aW9uVGltZXIgPSBudWxscHRyOworCisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlvblRvU25hcEFu
aW1hdGlvblN0YXRlKG1fY2xpZW50LnNjcm9sbEV4dGVudCgpLCBtX2NsaWVudC52aWV3cG9ydFNp
emUoKSwgbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCksIG1fY2xpZW50LnNjcm9sbE9mZnNldCgp
KTsKKyAgICBzdGFydFNjcm9sbFNuYXBBbmltYXRpb24oKTsKK30KKwordm9pZCBTY3JvbGxpbmdF
ZmZlY3RzQ29udHJvbGxlcjo6c3RhcnREZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25E
dWVUb1Njcm9sbFNuYXBwaW5nKCkKK3sKKyAgICBtX2NsaWVudC5kZWZlcldoZWVsRXZlbnRUZXN0
Q29tcGxldGlvbkZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRv
cjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9y
OjpTY3JvbGxTbmFwSW5Qcm9ncmVzcyk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRy
b2xsZXI6OnN0b3BEZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25EdWVUb1Njcm9sbFNu
YXBwaW5nKCkKK3sKKyAgICBtX2NsaWVudC5yZW1vdmVXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25E
ZWZlcnJhbEZvclJlYXNvbihyZWludGVycHJldF9jYXN0PFdoZWVsRXZlbnRUZXN0TW9uaXRvcjo6
U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyPih0aGlzKSwgV2hlZWxFdmVudFRlc3RNb25pdG9yOjpT
Y3JvbGxTbmFwSW5Qcm9ncmVzcyk7Cit9CisKK2Jvb2wgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xs
ZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9zY3JvbGxTbmFwU3RhdGUtPnNuYXBPZmZzZXRzRm9y
QXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpLmlzRW1wdHkoKSAmJiBtX3Njcm9sbFNu
YXBTdGF0ZS0+c25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBzdGF0dXMgPSB0b1do
ZWVsRXZlbnRTdGF0dXMod2hlZWxFdmVudC5waGFzZSgpLCB3aGVlbEV2ZW50Lm1vbWVudHVtUGhh
c2UoKSk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsU25hcCwgc3RyZWFtIDw8ICJTY3Jv
bGxpbmdFZmZlY3RzQ29udHJvbGxlciAiIDw8IHRoaXMgPDwgIiBwcm9jZXNzV2hlZWxFdmVudEZv
clNjcm9sbFNuYXA6IHN0YXR1cyAiIDw8IHN0YXR1cyk7CisKKyAgICBib29sIGlzTW9tZW50dW1T
Y3JvbGxpbmcgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNhc2UgV2hlZWxF
dmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOgorICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6
VXNlclNjcm9sbGluZzoKKyAgICAgICAgc3RvcFNjcm9sbFNuYXBBbmltYXRpb24oKTsKKyAgICAg
ICAgbV9zY3JvbGxTbmFwU3RhdGUtPnRyYW5zaXRpb25Ub1VzZXJJbnRlcmFjdGlvblN0YXRlKCk7
CisgICAgICAgIG1fZHJhZ0VuZGVkU2Nyb2xsaW5nVmVsb2NpdHkgPSAtd2hlZWxFdmVudC5zY3Jv
bGxpbmdWZWxvY2l0eSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0
dXM6OlVzZXJTY3JvbGxFbmQ6CisgICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9u
VG9TbmFwQW5pbWF0aW9uU3RhdGUobV9jbGllbnQuc2Nyb2xsRXh0ZW50KCksIG1fY2xpZW50LnZp
ZXdwb3J0U2l6ZSgpLCBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSwgbV9jbGllbnQuc2Nyb2xs
T2Zmc2V0KCkpOworICAgICAgICBzdGFydFNjcm9sbFNuYXBBbmltYXRpb24oKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbEJlZ2luOgor
ICAgICAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+dHJhbnNpdGlvblRvR2xpZGVBbmltYXRpb25TdGF0
ZShtX2NsaWVudC5zY3JvbGxFeHRlbnQoKSwgbV9jbGllbnQudmlld3BvcnRTaXplKCksIG1fY2xp
ZW50LnBhZ2VTY2FsZUZhY3RvcigpLCBtX2NsaWVudC5zY3JvbGxPZmZzZXQoKSwgbV9kcmFnRW5k
ZWRTY3JvbGxpbmdWZWxvY2l0eSwgRmxvYXRTaXplKC13aGVlbEV2ZW50LmRlbHRhWCgpLCAtd2hl
ZWxFdmVudC5kZWx0YVkoKSkpOworICAgICAgICBtX2RyYWdFbmRlZFNjcm9sbGluZ1ZlbG9jaXR5
ID0geyB9OworICAgICAgICBpc01vbWVudHVtU2Nyb2xsaW5nID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpNb21lbnR1bVNjcm9sbGluZzoKKyAgICBj
YXNlIFdoZWVsRXZlbnRTdGF0dXM6Ok1vbWVudHVtU2Nyb2xsRW5kOgorICAgICAgICBpc01vbWVu
dHVtU2Nyb2xsaW5nID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXaGVlbEV2ZW50
U3RhdHVzOjpTdGF0ZWxlc3NTY3JvbGxFdmVudDoKKyAgICAgICAgbV9zY3JvbGxTbmFwU3RhdGUt
PnRyYW5zaXRpb25Ub1VzZXJJbnRlcmFjdGlvblN0YXRlKCk7CisgICAgICAgIHNjaGVkdWxlU3Rh
dGVsZXNzU2Nyb2xsU25hcCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdoZWVsRXZlbnRT
dGF0dXM6OlVua25vd246CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaXNNb21lbnR1bVNjcm9sbGluZyAmJiBzaG91bGRP
dmVycmlkZU1vbWVudHVtU2Nyb2xsaW5nKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nRWZmZWN0c0Nv
bnRyb2xsZXI6OnVwZGF0ZUdlc3R1cmVJblByb2dyZXNzU3RhdGUoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGlmICh3aGVlbEV2ZW50LmlzR2VzdHVyZVN0YXJ0
KCkgfHwgd2hlZWxFdmVudC5pc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkpCisgICAg
ICAgIG1faW5TY3JvbGxHZXN0dXJlID0gdHJ1ZTsKKyAgICBlbHNlIGlmICh3aGVlbEV2ZW50Lmlz
RW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpIHx8IHdoZWVsRXZlbnQuaXNHZXN0dXJlQ2FuY2VsKCkg
fHwgd2hlZWxFdmVudC5pc0VuZE9mTW9tZW50dW1TY3JvbGwoKSkKKyAgICAgICAgbV9pblNjcm9s
bEdlc3R1cmUgPSBmYWxzZTsKKworICAgIHVwZGF0ZVJ1YmJlckJhbmRpbmdTdGF0ZSgpOworfQor
Cit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9sbGVyOjpzdGFydFNjcm9sbFNuYXBBbmltYXRp
b24oKQoreworICAgIGlmIChtX2lzQW5pbWF0aW5nU2Nyb2xsU25hcCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsaW5n
RWZmZWN0c0NvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgc3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9u
IChtYWluIHRocmVhZCAiIDw8IGlzTWFpblRocmVhZCgpIDw8ICIpIik7CisKKyAgICBzdGFydERl
ZmVycmluZ1doZWVsRXZlbnRUZXN0Q29tcGxldGlvbkR1ZVRvU2Nyb2xsU25hcHBpbmcoKTsKKyAg
ICBtX2NsaWVudC53aWxsU3RhcnRTY3JvbGxTbmFwQW5pbWF0aW9uKCk7CisgICAgc2V0SXNBbmlt
YXRpbmdTY3JvbGxTbmFwKHRydWUpOworfQorCit2b2lkIFNjcm9sbGluZ0VmZmVjdHNDb250cm9s
bGVyOjpzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpCit7CisgICAgaWYgKCFtX2lzQW5pbWF0aW5n
U2Nyb2xsU25hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9s
bFNuYXAsIHN0cmVhbSA8PCAiU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIgIiA8PCB0aGlzIDw8
ICIgc3RvcFNjcm9sbFNuYXBBbmltYXRpb24gKG1haW4gdGhyZWFkICIgPDwgaXNNYWluVGhyZWFk
KCkgPDwgIikiKTsKKworICAgIHN0b3BEZWZlcnJpbmdXaGVlbEV2ZW50VGVzdENvbXBsZXRpb25E
dWVUb1Njcm9sbFNuYXBwaW5nKCk7CisgICAgbV9jbGllbnQuZGlkU3RvcFNjcm9sbFNuYXBBbmlt
YXRpb24oKTsKKworICAgIHNldElzQW5pbWF0aW5nU2Nyb2xsU25hcChmYWxzZSk7Cit9CisKK3Zv
aWQgU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXI6OnVwZGF0ZVNjcm9sbFNuYXBBbmltYXRpbmdT
dGF0ZShNb25vdG9uaWNUaW1lIGN1cnJlbnRUaW1lKQoreworICAgIGlmICghbV9pc0FuaW1hdGlu
Z1Njcm9sbFNuYXApCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdXNlc1Njcm9sbFNuYXAo
KSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGJvb2wgaXNBbmltYXRpb25Db21wbGV0ZTsKKyAgICBhdXRvIGFuaW1hdGlvbk9m
ZnNldCA9IG1fc2Nyb2xsU25hcFN0YXRlLT5jdXJyZW50QW5pbWF0ZWRTY3JvbGxPZmZzZXQoY3Vy
cmVudFRpbWUsIGlzQW5pbWF0aW9uQ29tcGxldGUpOworICAgIGF1dG8gY3VycmVudE9mZnNldCA9
IG1fY2xpZW50LnNjcm9sbE9mZnNldCgpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbFNu
YXAsIHN0cmVhbSA8PCAiU2Nyb2xsaW5nRWZmZWN0c0NvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIg
dXBkYXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlIC0gaXNBbmltYXRpb25Db21wbGV0ZSAiIDw8
IGlzQW5pbWF0aW9uQ29tcGxldGUgPDwgIiBjdXJyZW50T2Zmc2V0ICIgPDwgY3VycmVudE9mZnNl
dCA8PCAiIChtYWluIHRocmVhZCAiIDw8IGlzTWFpblRocmVhZCgpIDw8ICIpIik7CisKKyAgICBt
X2NsaWVudC5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZs
b2F0U2l6ZShhbmltYXRpb25PZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCksIGFuaW1hdGlv
bk9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKSkpOworICAgIGlmIChpc0FuaW1hdGlvbkNv
bXBsZXRlKSB7CisgICAgICAgIG1fc2Nyb2xsU25hcFN0YXRlLT50cmFuc2l0aW9uVG9EZXN0aW5h
dGlvblJlYWNoZWRTdGF0ZSgpOworICAgICAgICBzdG9wU2Nyb2xsU25hcEFuaW1hdGlvbigpOwor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>