<?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>239037</bug_id>
          
          <creation_ts>2022-04-09 13:20:58 -0700</creation_ts>
          <short_desc>[GTK][WPE] Move DMABuf-backed GraphicsContextGLANGLE functionality into a standalone derivation chain</short_desc>
          <delta_ts>2022-04-12 07:50:15 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>237649</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>annulen</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1860048</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-09 13:20:58 -0700</bug_when>
    <thetext>[GTK][WPE] Move DMABuf-backed GraphicsContextGLANGLE functionality into a standalone derivation chain</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860049</commentid>
    <comment_count>1</comment_count>
      <attachid>457178</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-09 13:21:13 -0700</bug_when>
    <thetext>Created attachment 457178
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860093</commentid>
    <comment_count>2</comment_count>
      <attachid>457194</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-10 00:45:31 -0700</bug_when>
    <thetext>Created attachment 457194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860670</commentid>
    <comment_count>3</comment_count>
      <attachid>457194</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-12 07:49:10 -0700</bug_when>
    <thetext>Comment on attachment 457194
Patch

Clearing flags on attachment: 457194

Committed r292770 (249554@trunk): &lt;https://commits.webkit.org/249554@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860671</commentid>
    <comment_count>4</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-04-12 07:49:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860672</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-12 07:50:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/91625469&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457178</attachid>
            <date>2022-04-09 13:21:13 -0700</date>
            <delta_ts>2022-04-10 00:45:26 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-239037-20220409222111.patch</filename>
            <type>text/plain</type>
            <size>48443</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZThlZTgxNzU2YTlkM2Zi
NDBhOTEyMjVmNjBlMmFjNDY3OGU1Mjg4NS4uNDI3N2FlMTIzODAzMmEzZmIzNWZkZDE3MDFmMmIx
ODE5MDYyNTM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDIyLTA0LTA5ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIE1v
dmUgRE1BQnVmLWJhY2tlZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFIGZ1bmN0aW9uYWxpdHkgaW50
byBhIHN0YW5kYWxvbmUgZGVyaXZhdGlvbiBjaGFpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5MDM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAg
KiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzV1BFLnR4dDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dibS9HcmFwaGljc0NvbnRleHRHTEdCTS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJB
TkdMRS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6On5HcmFwaGljc0NvbnRleHRHTEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtRGlzcGxheSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybUNvbmZpZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29udGV4dEN1cnJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Y2hlY2tHUFVTdGF0
dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1S
ZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMQU5HTEU6OnJlYWRDb21wb3NpdGVkUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEdCTTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMR0JNOjpHcmFwaGljc0NvbnRleHRHTEdCTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEdCTTo6cGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEdCTTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMR0JNOjpwcmVwYXJlVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEdCTTo6bGF5ZXJDb250ZW50c0Rpc3BsYXlE
ZWxlZ2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEdCTTo6Y29weVRl
eHR1cmVGcm9tTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xHQk06
OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb1ZpZGVvRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xHQk06OnNldENvbnRleHRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMR0JNOjpyZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xHQk06OnByZXBhcmVGb3JEaXNw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMR0JNOjpTd2FwY2hhaW46
OlN3YXBjaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEdCTTo6U3dh
cGNoYWluOjp+U3dhcGNoYWluKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vR3Jh
cGhpY3NDb250ZXh0R0xHQk0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEdCTTo6c3dhcGNoYWluKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0v
R3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0wpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyOjpHcmFwaGljc0Nv
bnRleHRHTEdCTVRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xHQk1UZXh0dXJlTWFwcGVyOjpsYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlcjo6cGxhdGZv
cm1Jbml0aWFsaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhpY3ND
b250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHA6CisgICAgICAg
IChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAg
IChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6R0NHTEFOR0xFTGF5ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1
cmVNYXBwZXJBTkdMRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEU6On5HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJB
TkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJB
TkdMRTo6cGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFOjpwcmVw
YXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXJBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFOjpwcmVwYXJlRm9yRGlzcGxh
eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdM
RTo6U3dhcGNoYWluOjpTd2FwY2hhaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEU6OlN3YXBjaGFpbjo6flN3YXBjaGFpbik6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmg6CisKIDIwMjItMDQtMDkgIFNpaHVpIExpdSAgPHNp
aHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBjYW5BY2Nlc3NTdG9yYWdlKCkgY2hl
Y2sgZnJvbSBTZWN1cml0eU9yaWdpbiB0byBTY3JpcHRFeGVjdXRpb25Db250ZXh0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNHVEsudHh0CmluZGV4IGM2Mzg2YTY1ZDQ3MTA3MWY3Y2MzYjQwMTg5OGZiNjE1YWZkNmFhOTUu
LjIzMjJlMmZkMTY4NjgzMjk0MjQ2NTYxNDA1MWRiNzM4Y2FiZmU5ZTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNH
VEsudHh0CkBAIC04Myw2ICs4Myw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRF
R0xYMTEuY3BwIEBuby11bmlmeQogCiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vR0JNQnVmZmVyU3dh
cGNoYWluLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dCTURldmljZS5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2dibS9HcmFwaGljc0NvbnRleHRHTEdCTS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNz
L2dibS9HcmFwaGljc0NvbnRleHRHTEdCTVRleHR1cmVNYXBwZXIuY3BwCiAKIHBsYXRmb3JtL2dy
YXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwIEBuby11bmlmeQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0
CmluZGV4IDE2ZDM1MzQ0YTMwODY1YTAxMjU3ZDdmOWFjNTQ0ZTYxMzFkZGNlNjcuLjNjNjRiZmQ5
ZTJhNWVkNTZmZmQ2MWY2YzBlMWE0MmY3OGM5ZTcyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CkBA
IC03Miw2ICs3Miw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0xMaWJXUEUu
Y3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1CdWZmZXJTd2FwY2hhaW4uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9nYm0vR0JNRGV2aWNlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dy
YXBoaWNzQ29udGV4dEdMR0JNLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dyYXBoaWNzQ29u
dGV4dEdMR0JNVGV4dHVyZU1hcHBlci5jcHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvbGlid3BlL1Bs
YXRmb3JtRGlzcGxheUxpYldQRS5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1
cmVNYXBwZXIuY21ha2UKaW5kZXggNTU2OGFkMDg5YWUwYmFiODdhMGI5OGQzNGQ5YzhjOTI0MWFj
OWRhYi4uNGNmODQ4OWNlNDEyYmE4OTljYzQ5NjFmMmNhM2U3MTk3NzI1Y2Q5NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCkBAIC0xNTgsNSArMTU4LDcg
QEAgaWYgKFVTRV9MSUJHQk0pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZS
ZWxlYXNlRmxhZy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dibS9HQk1CdWZmZXJTd2Fw
Y2hhaW4uaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vR0JNRGV2aWNlLmgKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dyYXBoaWNzQ29udGV4dEdMR0JNLmgKKyAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlci5o
CiAgICAgKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dibS9HcmFwaGljc0NvbnRleHRHTEdCTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhpY3NDb250ZXh0R0xHQk0uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNj
N2M3ODU4N2UwYjQ0YzhhNDA1MmM4NjM0M2Q3MGE0NTEzY2UzZTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhpY3NDb250ZXh0R0xH
Qk0uY3BwCkBAIC0wLDAgKzEsNDAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
R0JNLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShMSUJHQk0pICYmIFVTRShBTkdMRSkK
KworI2luY2x1ZGUgIkFOR0xFSGVhZGVycy5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUgIlZpZGVvRnJhbWUuaCIKKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMp
CisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQoreworfQorCitHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjp+R3JhcGhpY3NDb250ZXh0R0xBTkdMRSgpCit7CisgICAgYm9vbCBzdWNj
ZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICBHTF9EZWxldGVUZXh0dXJlcygx
LCAmbV90ZXh0dXJlKTsKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVz
KCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgR0xfRGVsZXRl
UmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYg
KGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgR0xf
RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgICAgIEdMX0RlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgewor
ICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBHTF9EZWxldGVS
ZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorICAgIEdMX0Rl
bGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworfQorCitHQ0dMRGlzcGxheSBHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAoreworICAgIHJldHVybiBtX2Rp
c3BsYXlPYmo7Cit9CisKK0dDR0xDb25maWcgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZv
cm1Db25maWcoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmZpZ09iajsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworICAgIGF1dG8g
bWFkZUN1cnJlbnQgPQorICAgICAgICBbJl0geworICAgICAgICAgICAgaWYgKEVHTF9HZXRDdXJy
ZW50Q29udGV4dCgpID09IG1fY29udGV4dE9iaikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiAhIUVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVH
TF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKTsKKyAgICAgICAgfSgp
OworCisgICAgYXV0byYgY29udGV4dFN3YXBjaGFpbiA9IHN0YXRpY19jYXN0PEdyYXBoaWNzQ29u
dGV4dEdMR0JNJj4oKnRoaXMpLnN3YXBjaGFpbigpOworICAgIGlmIChtYWRlQ3VycmVudCAmJiBj
b250ZXh0U3dhcGNoYWluLnN3YXBjaGFpbiAmJiAhY29udGV4dFN3YXBjaGFpbi5kcmF3Qk8pIHsK
KyAgICAgICAgYXV0byBzaXplID0gZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsKKyAgICAg
ICAgY29udGV4dFN3YXBjaGFpbi5kcmF3Qk8gPSBjb250ZXh0U3dhcGNoYWluLnN3YXBjaGFpbi0+
Z2V0QnVmZmVyKAorICAgICAgICAgICAgR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXJEZXNjcmlw
dGlvbiB7CisgICAgICAgICAgICAgICAgLmZvcm1hdCA9IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlKHVp
bnQzMl90KGNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6
QVJHQjg4ODggOiBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6WFJHQjg4ODgpKSwKKyAgICAgICAgICAg
ICAgICAud2lkdGggPSBzdGQ6OmNsYW1wPHVpbnQzMl90PihzaXplLndpZHRoKCksIDAsIFVJTlRf
TUFYKSwKKyAgICAgICAgICAgICAgICAuaGVpZ2h0ID0gc3RkOjpjbGFtcDx1aW50MzJfdD4oc2l6
ZS5oZWlnaHQoKSwgMCwgVUlOVF9NQVgpLAorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgR0xl
bnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworICAgICAg
ICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmcoZHJhd2luZ0J1ZmZl
clRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4dHVyZVRhcmdldCksIHRleHR1
cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNUQU5HTEVfQVJCKTsKKworICAg
ICAgICBhdXRvIHJlc3VsdCA9IGNvbnRleHRTd2FwY2hhaW4uaW1hZ2VzLmVuc3VyZShjb250ZXh0
U3dhcGNoYWluLmRyYXdCTy0+aGFuZGxlKCksCisgICAgICAgICAgICBbJl0geworICAgICAgICAg
ICAgICAgIGF1dG8gZG1hYnVmT2JqZWN0ID0gY29udGV4dFN3YXBjaGFpbi5kcmF3Qk8tPmNyZWF0
ZURNQUJ1Zk9iamVjdCgwKTsKKworICAgICAgICAgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxFR0xpbnQ+IGF0dHJpYnV0ZXMgeworICAgICAgICAgICAgICAgICAgICBFR0xfV0lEVEgsIEVH
TGludChkbWFidWZPYmplY3QuZm9ybWF0LnBsYW5lV2lkdGgoMCwgZG1hYnVmT2JqZWN0LndpZHRo
KSksCisgICAgICAgICAgICAgICAgICAgIEVHTF9IRUlHSFQsIEVHTGludChkbWFidWZPYmplY3Qu
Zm9ybWF0LnBsYW5lSGVpZ2h0KDAsIGRtYWJ1Zk9iamVjdC5oZWlnaHQpKSwKKyAgICAgICAgICAg
ICAgICAgICAgRUdMX0xJTlVYX0RSTV9GT1VSQ0NfRVhULCBzdGF0aWNfY2FzdDxFR0xpbnQ+KGRt
YWJ1Zk9iamVjdC5mb3JtYXQucGxhbmVzWzBdLmZvdXJjYyksCisgICAgICAgICAgICAgICAgICAg
IEVHTF9ETUFfQlVGX1BMQU5FMF9GRF9FWFQsIGRtYWJ1Zk9iamVjdC5mZFswXS52YWx1ZSgpLAor
ICAgICAgICAgICAgICAgICAgICBFR0xfRE1BX0JVRl9QTEFORTBfUElUQ0hfRVhULCBzdGF0aWNf
Y2FzdDxFR0xpbnQ+KGRtYWJ1Zk9iamVjdC5zdHJpZGVbMF0pLAorICAgICAgICAgICAgICAgICAg
ICBFR0xfRE1BX0JVRl9QTEFORTBfT0ZGU0VUX0VYVCwgMCwKKyAgICAgICAgICAgICAgICAgICAg
RUdMX05PTkUsCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRUdM
X0NyZWF0ZUltYWdlS0hSKGNvbnRleHRTd2FwY2hhaW4ucGxhdGZvcm1EaXNwbGF5LCBFR0xfTk9f
Q09OVEVYVCwgRUdMX0xJTlVYX0RNQV9CVUZfRVhULCAoRUdMQ2xpZW50QnVmZmVyKW51bGxwdHIs
IHN0ZDo6ZGF0YShhdHRyaWJ1dGVzKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBHTF9C
aW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUpOworICAgICAgICBHTF9FR0xJbWFn
ZVRhcmdldFRleHR1cmUyRE9FUyh0ZXh0dXJlVGFyZ2V0LCByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
KTsKKworICAgICAgICAvLyBJZiBqdXN0IGNyZWF0ZWQsIHRoZSBkbWFidWYgaGFzIHRvIGJlIGNs
ZWFyZWQgdG8gcHJvdmlkZSBhIHplcm9lZC1vdXQgYnVmZmVyLgorICAgICAgICAvLyBDdXJyZW50
IGNvbG9yLWNsZWFyIGFuZCBmcmFtZWJ1ZmZlciBzdGF0ZSBoYXMgdG8gYmUgcHJlc2VydmVkIGFu
ZCByZS1lc3RhYmxpc2hlZCBhZnRlciB0aGlzLgorICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpIHsKKyAgICAgICAgICAgIEdDR0x1aW50IGJvdW5kRkJPIHsgMCB9OworICAgICAgICAgICAg
R0xfR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgcmVpbnRlcnByZXRfY2FzdDxH
Q0dMaW50Kj4oJmJvdW5kRkJPKSk7CisKKyAgICAgICAgICAgIEdDR0x1aW50IHRhcmdldEZCTyA9
IGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJv
OworICAgICAgICAgICAgaWYgKHRhcmdldEZCTyAhPSBib3VuZEZCTykKKyAgICAgICAgICAgICAg
ICBHTF9CaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHRhcmdldEZCTyk7CisKKyAgICAg
ICAgICAgIHN0ZDo6YXJyYXk8ZmxvYXQsIDQ+IGNsZWFyQ29sb3IgeyAwLCAwLCAwLCAwIH07Cisg
ICAgICAgICAgICBHTF9HZXRGbG9hdHYoR0xfQ09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29sb3Iu
ZGF0YSgpKTsKKworICAgICAgICAgICAgR0xfQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAg
ICAgICAgIEdMX0NsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOworCisgICAgICAgICAgICBHTF9D
bGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNs
ZWFyQ29sb3JbM10pOworCisgICAgICAgICAgICBpZiAodGFyZ2V0RkJPICE9IGJvdW5kRkJPKQor
ICAgICAgICAgICAgICAgIEdMX0JpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgYm91bmRG
Qk8pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1hZGVDdXJyZW50OworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNoZWNrR1BVU3RhdHVzKCkKK3sKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMo
KQoreworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQoreworICAgIHJldHVybiByZWFkUmVuZGVyaW5n
UmVzdWx0cygpOworfQorCitSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xHQk0+IEdyYXBoaWNzQ29u
dGV4dEdMR0JNOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRl
cykKK3sKKyAgICBhdXRvIGNvbnRleHQgPSBhZG9wdFJlZigqbmV3IEdyYXBoaWNzQ29udGV4dEdM
R0JNKFdURk1vdmUoYXR0cmlidXRlcykpKTsKKyAgICBpZiAoIWNvbnRleHQtPmluaXRpYWxpemUo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK0dy
YXBoaWNzQ29udGV4dEdMR0JNOjpHcmFwaGljc0NvbnRleHRHTEdCTShHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0xBTkdMRShX
VEZNb3ZlKGF0dHJpYnV0ZXMpKQoreyB9CisKK0dyYXBoaWNzQ29udGV4dEdMR0JNOjp+R3JhcGhp
Y3NDb250ZXh0R0xHQk0oKSA9IGRlZmF1bHQ7CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xHQk06
OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQoreworI2lmIEVOQUJMRShXRUJHTDIpCisgICAg
bV9pc0ZvcldlYkdMMiA9IGNvbnRleHRBdHRyaWJ1dGVzKCkud2ViR0xWZXJzaW9uID09IEdyYXBo
aWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CisjZW5kaWYKKworICAgIFZlY3RvcjxF
R0xpbnQ+IGRpc3BsYXlBdHRyaWJ1dGVzIHsKKyNpZiAhT1MoV0lORE9XUykKKyAgICAgICAgRUdM
X1BMQVRGT1JNX0FOR0xFX1RZUEVfQU5HTEUsIEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX09QRU5H
TEVTX0FOR0xFLAorICAgICAgICBFR0xfUExBVEZPUk1fQU5HTEVfREVWSUNFX1RZUEVfQU5HTEUs
IEVHTF9QTEFURk9STV9BTkdMRV9ERVZJQ0VfVFlQRV9FR0xfQU5HTEUsCisgICAgICAgIEVHTF9Q
TEFURk9STV9BTkdMRV9OQVRJVkVfUExBVEZPUk1fVFlQRV9BTkdMRSwgRUdMX1BMQVRGT1JNX1NV
UkZBQ0VMRVNTX01FU0EsCisjZW5kaWYKKyAgICAgICAgRUdMX05PTkUsCisgICAgfTsKKworICAg
IG1fZGlzcGxheU9iaiA9IEVHTF9HZXRQbGF0Zm9ybURpc3BsYXlFWFQoRUdMX1BMQVRGT1JNX0FO
R0xFX0FOR0xFLCBFR0xfREVGQVVMVF9ESVNQTEFZLCBkaXNwbGF5QXR0cmlidXRlcy5kYXRhKCkp
OworICAgIGlmIChtX2Rpc3BsYXlPYmogPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEVHTGludCBtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbjsKKyAgICBp
ZiAoRUdMX0luaXRpYWxpemUobV9kaXNwbGF5T2JqLCAmbWFqb3JWZXJzaW9uLCAmbWlub3JWZXJz
aW9uKSA9PSBFR0xfRkFMU0UpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdMRGlzcGxheSBJbml0
aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
TE9HKFdlYkdMLCAiQU5HTEUgaW5pdGlhbGlzZWQgTWFqb3I6ICVkIE1pbm9yOiAlZCIsIG1ham9y
VmVyc2lvbiwgbWlub3JWZXJzaW9uKTsKKworICAgIGNvbnN0IGNoYXIqIGRpc3BsYXlFeHRlbnNp
b25zID0gRUdMX1F1ZXJ5U3RyaW5nKG1fZGlzcGxheU9iaiwgRUdMX0VYVEVOU0lPTlMpOworICAg
IExPRyhXZWJHTCwgIkV4dGVuc2lvbnM6ICVzIiwgZGlzcGxheUV4dGVuc2lvbnMpOworCisgICAg
RUdMaW50IGNvbmZpZ0F0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQ
RSwgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAg
IEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICBF
R0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgRUdMX0RFUFRIX1NJWkUsIDAsCisgICAgICAgIEVH
TF9TVEVOQ0lMX1NJWkUsIDAsCisgICAgICAgIEVHTF9OT05FCisgICAgfTsKKyAgICBFR0xpbnQg
bnVtYmVyQ29uZmlnc1JldHVybmVkID0gMDsKKyAgICBFR0xfQ2hvb3NlQ29uZmlnKG1fZGlzcGxh
eU9iaiwgY29uZmlnQXR0cmlidXRlcywgJm1fY29uZmlnT2JqLCAxLCAmbnVtYmVyQ29uZmlnc1Jl
dHVybmVkKTsKKyAgICBpZiAobnVtYmVyQ29uZmlnc1JldHVybmVkICE9IDEpIHsKKyAgICAgICAg
TE9HKFdlYkdMLCAiRUdMQ29uZmlnIEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29uZmlnIik7CisK
KyAgICBFR0xfQmluZEFQSShFR0xfT1BFTkdMX0VTX0FQSSk7CisgICAgaWYgKEVHTF9HZXRFcnJv
cigpICE9IEVHTF9TVUNDRVNTKSB7CisgICAgICAgIExPRyhXZWJHTCwgIlVuYWJsZSB0byBiaW5k
IHRvIE9QRU5HTF9FU19BUEkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFZlY3RvcjxFR0xpbnQ+IGVnbENvbnRleHRBdHRyaWJ1dGVzOworICAgIGlmIChtX2lzRm9yV2Vi
R0wyKSB7CisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9D
TElFTlRfVkVSU0lPTik7CisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZCgzKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NP
TlRFWFRfQ0xJRU5UX1ZFUlNJT04pOworICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBl
bmQoMik7CisgICAgICAgIC8vIEFOR0xFIHdpbGwgdXBncmFkZSB0aGUgY29udGV4dCB0byBFUzMg
YXV0b21hdGljYWxseSB1bmxlc3MgdGhpcyBpcyBzcGVjaWZpZWQuCisgICAgICAgIGVnbENvbnRl
eHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElC
TEVfQU5HTEUpOworICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZBTFNF
KTsKKyAgICB9CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX1dF
QkdMX0NPTVBBVElCSUxJVFlfQU5HTEUpOworICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVu
ZChFR0xfVFJVRSk7CisgICAgLy8gV2ViR0wgcmVxdWlyZXMgdGhhdCBhbGwgcmVzb3VyY2VzIGFy
ZSBjbGVhcmVkIGF0IGNyZWF0aW9uLgorICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChF
R0xfUk9CVVNUX1JFU09VUkNFX0lOSVRJQUxJWkFUSU9OX0FOR0xFKTsKKyAgICBlZ2xDb250ZXh0
QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOworICAgIC8vIFdlYkdMIGRvZXNuJ3QgYWxsb3cg
Y2xpZW50IGFycmF5cy4KKyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRF
WFRfQ0xJRU5UX0FSUkFZU19FTkFCTEVEX0FOR0xFKTsKKyAgICBlZ2xDb250ZXh0QXR0cmlidXRl
cy5hcHBlbmQoRUdMX0ZBTFNFKTsKKyAgICAvLyBXZWJHTCBkb2Vzbid0IGFsbG93IGltcGxpY2l0
IGNyZWF0aW9uIG9mIG9iamVjdHMgb24gYmluZC4KKyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5h
cHBlbmQoRUdMX0NPTlRFWFRfQklORF9HRU5FUkFURVNfUkVTT1VSQ0VfQ0hST01JVU0pOworICAg
IGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfRkFMU0UpOworCisgICAgaWYgKHN0cnN0
cihkaXNwbGF5RXh0ZW5zaW9ucywgIkVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIikpIHsKKyAg
ICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FO
R0xFKTsKKyAgICAgICAgLy8gRUdMX0xPV19QT1dFUl9BTkdMRSBpcyB0aGUgZGVmYXVsdC4gQ2hh
bmdlIHRvCisgICAgICAgIC8vIEVHTF9ISUdIX1BPV0VSX0FOR0xFIGlmIGRlc2lyZWQuCisgICAg
ICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTE9XX1BPV0VSX0FOR0xFKTsKKyAg
ICB9CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9OT05FKTsKKworICAgIG1f
Y29udGV4dE9iaiA9IEVHTF9DcmVhdGVDb250ZXh0KG1fZGlzcGxheU9iaiwgbV9jb25maWdPYmos
IEVHTF9OT19DT05URVhULCBlZ2xDb250ZXh0QXR0cmlidXRlcy5kYXRhKCkpOworICAgIGlmICht
X2NvbnRleHRPYmogPT0gRUdMX05PX0NPTlRFWFQpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdM
Q29udGV4dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkgeworICAgICAgICBMT0coV2Vi
R0wsICJBTkdMRSBtYWtlQ29udGV4dEN1cnJlbnQgZmFpbGVkLiIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIExPRyhXZWJHTCwgIkdvdCBFR0xDb250ZXh0Iik7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xHQk06OnBsYXRmb3JtSW5pdGlh
bGl6ZSgpCit7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
QVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKworICAgIC8vIFdlIHJlcXVpcmUgdGhp
cyBleHRlbnNpb24gdG8gcmVuZGVyIGludG8gdGhlIGRtYWJ1Zi1iYWNrZWQgRUdMSW1hZ2UuCisg
ICAgUkVMRUFTRV9BU1NFUlQoc3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2UiX3Mp
KTsKKyAgICBHTF9SZXF1ZXN0RXh0ZW5zaW9uQU5HTEUoIkdMX09FU19FR0xfaW1hZ2UiKTsKKwor
ICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4K
KworICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQo
KTsKKyAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgIEdMX0dlblRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIEdMX0JpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQs
IG1fdGV4dHVyZSk7CisgICAgR0xfVGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgR0xfVGV4UGFyYW1ldGVyZih0ZXh0dXJl
VGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgR0xfVGV4UGFy
YW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURH
RSk7CisgICAgR0xfVGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgR0xfQmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwg
MCk7CisKKyAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAgIEdMX0dlbkZyYW1lYnVmZmVycygxLCAm
bV9mYm8pOworICAgIEdMX0JpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwor
CisgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgIEFTU0VSVChtX3N0YXRlLmJv
dW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CisgICAgaWYgKGF0dHJpYnV0ZXMu
YW50aWFsaWFzKSB7CisgICAgICAgIEdMX0dlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBs
ZUZCTyk7CisgICAgICAgIEdMX0JpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7CisgICAgICAgIG1fc3RhdGUuYm91bmREcmF3RkJPID0gbV9zdGF0ZS5ib3Vu
ZFJlYWRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAgICAgICBHTF9HZW5SZW5kZXJidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5z
dGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBHTF9HZW5SZW5kZXJidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCisgICAgICAgIEdMX0JpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1f
c3RhdGUuYm91bmRSZWFkRkJPID0gbV9mYm87CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5j
aWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIEdMX0dlblJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKKyAgICBHTF9DbGVhckNvbG9yKDAs
IDAsIDAsIDApOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybUlu
aXRpYWxpemUoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEdCTTo6cHJlcGFyZVRleHR1
cmUoKQoreworICAgIEFTU0VSVCghbV9sYXllckNvbXBvc2l0ZWQpOworCisgICAgaWYgKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQorICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KCk7CisKKyAgICBHTF9CaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1f
ZmJvKTsKKyAgICBHTF9GcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09M
T1JfQVRUQUNITUVOVDAsIGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCksIG1fdGV4dHVyZSwg
MCk7CisgICAgR0xfRmx1c2goKTsKKworICAgIGlmIChtX3N0YXRlLmJvdW5kRHJhd0ZCTyAhPSBt
X2ZibykKKyAgICAgICAgR0xfQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUiwgbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworfQorCitSZWZQdHI8R3JhcGhpY3NMYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiBHcmFwaGljc0NvbnRleHRHTEdCTTo6bGF5ZXJDb250
ZW50c0Rpc3BsYXlEZWxlZ2F0ZSgpCit7CisgICAgcmV0dXJuIHsgfTsKK30KKworI2lmIEVOQUJM
RShWSURFTykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xHQk06OmNvcHlUZXh0dXJlRnJvbU1lZGlh
KE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIEdDR0xpbnQsIEdDR0xl
bnVtLCBHQ0dMZW51bSwgR0NHTGVudW0sIGJvb2wsIGJvb2wpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorUmVmUHRyPFZpZGVvRnJh
bWU+IEdyYXBoaWNzQ29udGV4dEdMR0JNOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9WaWRlb0Zy
YW1lKCkKK3sKKyAgICByZXR1cm4geyB9OworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xHQk06OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpCit7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xHQk06OnJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpCit7CisgICAgYXV0
byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAgY29uc3QgYXV0byBzaXplID0gZ2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsKKyAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndp
ZHRoKCk7CisgICAgY29uc3QgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgR0x1aW50
IGNvbG9yRm9ybWF0ID0gYXR0cnMuYWxwaGEgPyBHTF9SR0JBIDogR0xfUkdCOworICAgIEdMZW51
bSB0ZXh0dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKKyAgICBHTHVp
bnQgaW50ZXJuYWxDb2xvckZvcm1hdCA9IHRleHR1cmVUYXJnZXQgPT0gR0xfVEVYVFVSRV8yRCA/
IGNvbG9yRm9ybWF0IDogbV9pbnRlcm5hbENvbG9yRm9ybWF0OworICAgIFNjb3BlZFJlc3RvcmVU
ZXh0dXJlQmluZGluZyByZXN0b3JlQmluZGluZyhkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldFF1
ZXJ5Rm9yRHJhd2luZ1RhcmdldCh0ZXh0dXJlVGFyZ2V0KSwgdGV4dHVyZVRhcmdldCwgdGV4dHVy
ZVRhcmdldCAhPSBURVhUVVJFX1JFQ1RBTkdMRV9BUkIpOworCisgICAgbV9zd2FwY2hhaW4gPSBT
d2FwY2hhaW4ocGxhdGZvcm1EaXNwbGF5KCkpOworCisgICAgR0xfQmluZFRleHR1cmUodGV4dHVy
ZVRhcmdldCwgbV90ZXh0dXJlKTsKKyAgICBHTF9UZXhJbWFnZTJEKHRleHR1cmVUYXJnZXQsIDAs
IGludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9V
TlNJR05FRF9CWVRFLCAwKTsKKyAgICBHTF9GcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJV
RkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIHRleHR1cmVUYXJnZXQsIG1fdGV4dHVyZSwgMCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEdCTTo6cHJl
cGFyZUZvckRpc3BsYXkoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCB8fCAhbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHByZXBhcmVUZXh0dXJlKCk7
CisgICAgbWFya0xheWVyQ29tcG9zaXRlZCgpOworCisgICAgYXV0byBwcmV2RGlzcGxheSA9IFdU
Rk1vdmUobV9zd2FwY2hhaW4uZGlzcGxheUJPKTsKKyAgICBtX3N3YXBjaGFpbi5kaXNwbGF5Qk8g
PSBXVEZNb3ZlKG1fc3dhcGNoYWluLmRyYXdCTyk7CisKKyAgICBwcmV2RGlzcGxheSA9IG51bGxw
dHI7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMR0JNOjpTd2FwY2hhaW46OlN3YXBjaGFpbihHQ0dM
RGlzcGxheSBwbGF0Zm9ybURpc3BsYXkpCisgICAgOiBwbGF0Zm9ybURpc3BsYXkocGxhdGZvcm1E
aXNwbGF5KQorICAgICwgc3dhcGNoYWluKGFkb3B0UmVmKG5ldyBHQk1CdWZmZXJTd2FwY2hhaW4o
R0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXJTd2FwY2hhaW5TaXplOjpGb3VyKSkpCit7IH0KKwor
R3JhcGhpY3NDb250ZXh0R0xHQk06OlN3YXBjaGFpbjo6flN3YXBjaGFpbigpCit7CisgICAgZm9y
IChFR0xJbWFnZUtIUiBpbWFnZSA6IGltYWdlcy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoaW1h
Z2UgIT0gRUdMX05PX0lNQUdFX0tIUikKKyAgICAgICAgICAgIEVHTF9EZXN0cm95SW1hZ2VLSFIo
cGxhdGZvcm1EaXNwbGF5LCBpbWFnZSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmIFVTRShMSUJHQk0pICYmIFVTRShBTkdM
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HcmFw
aGljc0NvbnRleHRHTEdCTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2Jt
L0dyYXBoaWNzQ29udGV4dEdMR0JNLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUzZjM4M2Q3ZmZlYWRiZTEwNDQ5
ZWQ1YzJlN2Y2MDgyNjVkNzgyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dibS9HcmFwaGljc0NvbnRleHRHTEdCTS5oCkBAIC0wLDAgKzEsMTAx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShMSUJHQk0pICYmIFVTRShBTkdMRSkKKworI2lu
Y2x1ZGUgIkdCTUJ1ZmZlclN3YXBjaGFpbi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
QU5HTEUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCit0eXBlZGVmIHZvaWQgKkVHTElt
YWdlS0hSOworCisjaWYgVVNFKE5JQ09TSUEpCituYW1lc3BhY2UgTmljb3NpYSB7CitjbGFzcyBH
Q0dMQU5HTEVMYXllcjsKK30KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dEdMR0JNIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xHQk0+IGNyZWF0ZShX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CisgICAgdmlydHVhbCB+R3Jh
cGhpY3NDb250ZXh0R0xHQk0oKTsKKworICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMIG92ZXJyaWRl
cworICAgIFJlZlB0cjxHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+IGxheWVy
Q29udGVudHNEaXNwbGF5RGVsZWdhdGUoKSBvdmVycmlkZTsKKworI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCisgICAgUmVmUHRyPFZpZGVvRnJhbWU+IHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb1Zp
ZGVvRnJhbWUoKSBvdmVycmlkZTsKKyNlbmRpZgorI2lmIEVOQUJMRShWSURFTykKKyAgICBib29s
IGNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0
dXJlLCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgYm9vbCBmbGlwWSkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIHZvaWQgc2V0Q29udGV4dFZp
c2liaWxpdHkoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpIG92
ZXJyaWRlOworCisgICAgLy8gR3JhcGhpY3NDb250ZXh0R0xBTkdMRSBvdmVycmlkZXMKKyAgICBi
b29sIHBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRm
b3JtSW5pdGlhbGl6ZSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpIG92
ZXJyaWRlOworICAgIGJvb2wgcmVzaGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkgb3ZlcnJpZGU7
CisKKyAgICBzdHJ1Y3QgU3dhcGNoYWluIHsKKyAgICAgICAgU3dhcGNoYWluKCkgPSBkZWZhdWx0
OworICAgICAgICBTd2FwY2hhaW4oR0NHTERpc3BsYXkpOworICAgICAgICB+U3dhcGNoYWluKCk7
CisKKyAgICAgICAgR0NHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5IHsgbnVsbHB0ciB9OworICAg
ICAgICBSZWZQdHI8R0JNQnVmZmVyU3dhcGNoYWluPiBzd2FwY2hhaW47CisgICAgICAgIFJlZlB0
cjxHQk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZlcj4gZHJhd0JPOworICAgICAgICBSZWZQdHI8R0JN
QnVmZmVyU3dhcGNoYWluOjpCdWZmZXI+IGRpc3BsYXlCTzsKKworICAgICAgICAvLyBDYWNoZSBm
b3IgRUdMSW1hZ2Ugb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBidWZmZXJzIG9yaWdpbmF0
aW5nIGZyb20gdGhlIHN3YXBjaGFpbi4KKyAgICAgICAgLy8gVGhlIHN3YXBjaGFpbiBpcyByZWdl
bmVyYXRlZCAoYW5kIHRoZXNlIEVHTEltYWdlIG9iamVjdHMgZGVzdHJveWVkKSB1cG9uIGVhY2gg
YnVmZmVyIHJlc2hhcGluZywKKyAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGJlIGZpbmUgd2l0aG91
dCBtYW5hZ2luZyBzdGFsZSBidWZmZXJzIGFuZCBjb3JyZXNwb25kaW5nIEVHTEltYWdlcyAod2hp
Y2ggc2hvdWxkbid0IG9jY3VyIGFueXdheSkuCisgICAgICAgIEhhc2hNYXA8dWludDMyX3QsIEVH
TEltYWdlS0hSLCBXVEY6OkRlZmF1bHRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IGltYWdlczsKKyAgICB9OworCisgICAgU3dhcGNo
YWluJiBzd2FwY2hhaW4oKSB7IHJldHVybiBtX3N3YXBjaGFpbjsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgR3JhcGhpY3NDb250ZXh0R0xHQk0oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzJiYpOworCitwcml2YXRlOgorICAgIFN3YXBjaGFpbiBtX3N3YXBjaGFpbjsKKworI2lmIFVT
RShOSUNPU0lBKQorICAgIGZyaWVuZCBjbGFzcyBOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjsKKyNl
bmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKSAmJiBVU0UoTElCR0JNKSAmJiBVU0UoQU5HTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFw
cGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HcmFwaGljc0Nv
bnRleHRHTEdCTVRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmMmJmZjFkZTNkMTQyY2Y5
OTRjNGNjZDU2ODhmNzA0NDE2ZTRmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVy
LmNwcApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMR0JN
VGV4dHVyZU1hcHBlci5oIgorCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpICYmIFVTRShMSUJHQk0pICYmIFVTRShBTkdMRSkKKworI2luY2x1ZGUgIk5pY29zaWFHQ0dM
QU5HTEVMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0w+IGNyZWF0
ZVdlYlByb2Nlc3NHcmFwaGljc0NvbnRleHRHTChjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMmIGF0dHJpYnV0ZXMpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMR0JNVGV4
dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyhhdHRyaWJ1dGVz
KSk7Cit9CisKK1JlZlB0cjxHcmFwaGljc0NvbnRleHRHTEdCTVRleHR1cmVNYXBwZXI+IEdyYXBo
aWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyYmIGF0dHJpYnV0ZXMpCit7CisgICAgYXV0byBjb250ZXh0ID0gYWRvcHRSZWYoKm5l
dyBHcmFwaGljc0NvbnRleHRHTEdCTVRleHR1cmVNYXBwZXIoV1RGTW92ZShhdHRyaWJ1dGVzKSkp
OworICAgIGlmICghY29udGV4dC0+aW5pdGlhbGl6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gY29udGV4dDsKK30KKworR3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJl
TWFwcGVyOjpHcmFwaGljc0NvbnRleHRHTEdCTVRleHR1cmVNYXBwZXIoR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKKyAgICA6IEdyYXBoaWNzQ29udGV4dEdMR0JNKFdU
Rk1vdmUoYXR0cmlidXRlcykpCit7IH0KKworR3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFw
cGVyOjp+R3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyKCkgPSBkZWZhdWx0OworCitS
ZWZQdHI8R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiBHcmFwaGljc0NvbnRl
eHRHTEdCTVRleHR1cmVNYXBwZXI6OmxheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUoKQorewor
ICAgIHJldHVybiBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuY29weVJlZigpOworfQor
Citib29sIEdyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1Jbml0aWFs
aXplKCkKK3sKKyAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmljb3NpYTo6R0NHTEFO
R0xFTGF5ZXI+KCp0aGlzKTsKKyAgICBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUgPSBQ
bGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlOjpjcmVhdGUoJm1fbmljb3NpYUxheWVyLT5jb250
ZW50TGF5ZXIoKSk7CisKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0xHQk06OnBsYXRmb3Jt
SW5pdGlhbGl6ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgVVNFKExJQkdCTSkgJiYgVVNF
KEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2Jt
L0dyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ2JtL0dyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIxZTJlYzJlMTNlNGE3YzEwMzU0N2VlOGQ0MDczYTQ0YWFjYmY0ZGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhp
Y3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChD
KSAyMDIyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkdMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFVTRShMSUJHQk0pICYmIFVTRShBTkdM
RSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMR0JNLmgiCisjaW5jbHVkZSA8bWVtb3J5
PgorCituYW1lc3BhY2UgTmljb3NpYSB7CitjbGFzcyBHQ0dMQU5HTEVMYXllcjsKK30KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHRHTEdCTVRleHR1cmVNYXBw
ZXIgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xHQk0geworcHVibGljOgorICAgIHN0
YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOworICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4
dEdMR0JNVGV4dHVyZU1hcHBlcigpOworCisgICAgLy8gR3JhcGhpY3NDb250ZXh0R0wgb3ZlcnJp
ZGVzCisgICAgUmVmUHRyPEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gbGF5
ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSgpIGZpbmFsOworCisgICAgLy8gR3JhcGhpY3NDb250
ZXh0R0xBTkdMRSBvdmVycmlkZXMKKyAgICBib29sIHBsYXRmb3JtSW5pdGlhbGl6ZSgpIGZpbmFs
OworCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlcihHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3Np
YTo6R0NHTEFOR0xFTGF5ZXI+IG1fbmljb3NpYUxheWVyOworICAgIFJlZlB0cjxHcmFwaGljc0xh
eWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+IG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBVU0UoTElCR0JNKSAmJiBVU0UoQU5HTEUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1h
cC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcAppbmRleCBmOGVj
NGJjZjQ1MDg3NjM0MDA4MmIzZWRkZDVkZTdhYTA5NGMzOTJlLi41N2IyNDJmM2ZlY2Y5ZTFiMDM4
Y2EzZjIzMGNhOThlM2IxMjk2YTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFH
Q0dMQU5HTEVMYXllci5jcHAKQEAgLTI5LDkgKzI5LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJOaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCIKIAotI2lmIFVTRShOSUNPU0lBKSAm
JiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01B
UFBFUikgJiYgVVNFKExJQkdCTSkgJiYgVVNFKEFOR0xFKQogCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TEdCTS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgpAQCAtNTQsNyArNTQsOCBAQCB2b2lkIEdDR0xB
TkdMRUxheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKIAogI2lmIFVTRShURVhUVVJFX01BUFBF
Ul9ETUFCVUYpCiAgICAgaWYgKGlzPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlETUFC
dWY+KHByb3h5KSkgewotICAgICAgICBhdXRvIGJvID0gV1RGTW92ZShtX2NvbnRleHQubV9zd2Fw
Y2hhaW4uZGlzcGxheUJPKTsKKyAgICAgICAgYXV0byYgc3dhcGNoYWluID0gbV9jb250ZXh0LnN3
YXBjaGFpbigpOworICAgICAgICBhdXRvIGJvID0gV1RGTW92ZShzd2FwY2hhaW4uZGlzcGxheUJP
KTsKICAgICAgICAgaWYgKGJvKSB7CiAgICAgICAgICAgICBMb2NrZXIgbG9ja2VyIHsgcHJveHku
bG9jaygpIH07CiAKQEAgLTYzLDcgKzY0LDcgQEAgdm9pZCBHQ0dMQU5HTEVMYXllcjo6c3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpCiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gVGV4dHVyZU1hcHBlckdM
OjpTaG91bGRCbGVuZDsKIAogICAgICAgICAgICAgZG93bmNhc3Q8VGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eURNQUJ1Zj4ocHJveHkpLnB1c2hETUFCdWYoCi0gICAgICAgICAgICAgICAg
RE1BQnVmT2JqZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX2NvbnRleHQubV9zd2Fw
Y2hhaW4uc3dhcGNoYWluLmdldCgpKSArIGJvLT5oYW5kbGUoKSksCisgICAgICAgICAgICAgICAg
RE1BQnVmT2JqZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihzd2FwY2hhaW4uc3dhcGNo
YWluLmdldCgpKSArIGJvLT5oYW5kbGUoKSksCiAgICAgICAgICAgICAgICAgWyZdKGF1dG8mJiBv
YmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvLT5jcmVhdGVETUFCdWZPYmpl
Y3Qob2JqZWN0LmhhbmRsZSk7CiAgICAgICAgICAgICAgICAgfSwgZmxhZ3MpOwpAQCAtOTksNyAr
MTAwLDcgQEAgdXNpbmcgUGxhdGZvcm1MYXllclByb3h5VHlwZSA9IFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHlETUFCdWY7CiB1c2luZyBQbGF0Zm9ybUxheWVyUHJveHlUeXBlID0gVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eUdMOwogI2VuZGlmCiAKLUdDR0xBTkdMRUxheWVy
OjpHQ0dMQU5HTEVMYXllcihHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRSYgY29u
dGV4dCkKK0dDR0xBTkdMRUxheWVyOjpHQ0dMQU5HTEVMYXllcihHcmFwaGljc0NvbnRleHRHTEdC
TSYgY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9jb250ZW50TGF5
ZXIoTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMsIGFkb3B0UmVmKCpuZXcgUGxhdGZv
cm1MYXllclByb3h5VHlwZSkpKSkKIHsKQEAgLTExMiw0ICsxMTMsNCBAQCBHQ0dMQU5HTEVMYXll
cjo6fkdDR0xBTkdMRUxheWVyKCkKIAogfSAvLyBuYW1lc3BhY2UgTmljb3NpYQogCi0jZW5kaWYg
Ly8gVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNlbmRpZiAvLyBVU0UoTklD
T1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBVU0UoTElCR0JNKSAmJiBVU0UoQU5HTEUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3Rl
eG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCmluZGV4IDUzOGUw
NTY1ODhhNDBhODkyMTk1YmMxZGQ5N2JlNGRkYmFjNzE2MDIuLjRlNWM2YmFjYzgzZTA4NDliMjY4
MjE5ZTMyMjUyYWVlNDY4MjVjMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dM
QU5HTEVMYXllci5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgVVNF
KE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBVU0UoTklDT1NJQSkgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKSAmJiBVU0UoTElCR0JNKSAmJiBVU0UoQU5HTEUpCiAKICNpbmNsdWRl
ICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKIApAQCAtMzksNyArMzks
NyBAQCB0eXBlZGVmIHZvaWQgKkVHTFN1cmZhY2U7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEludFNpemU7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRTsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMR0JNOwogY2xhc3MgUGxhdGZvcm1EaXNwbGF5OwogfQog
CkBAIC00OCwxNyArNDgsMTcgQEAgbmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgR0NHTEFOR0xF
TGF5ZXIgZmluYWwgOiBwdWJsaWMgQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVu
dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgR0NHTEFOR0xF
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUmKTsKKyAg
ICBHQ0dMQU5HTEVMYXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEdCTSYpOwogICAgIHZp
cnR1YWwgfkdDR0xBTkdMRUxheWVyKCk7CiAKICAgICBDb250ZW50TGF5ZXImIGNvbnRlbnRMYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExheWVyOyB9CiAgICAgdm9pZCBzd2FwQnVmZmVy
c0lmTmVlZGVkKCkgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUmIG1fY29udGV4dDsKKyAgICBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEdCTSYgbV9jb250ZXh0OwogICAgIFJlZjxDb250ZW50TGF5ZXI+IG1fY29udGVu
dExheWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgTmljb3NpYQogCi0jZW5kaWYgLy8gVVNFKE5J
Q09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNlbmRpZiAvLyBVU0UoTklDT1NJQSkgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBVU0UoTElCR0JNKSAmJiBVU0UoQU5HTEUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcAppbmRl
eCBmY2M4YmNjMTkxMDQ0NTY1ZjU0OTgwOGI1ZmRjNDhhMWMxYTg2YjMyLi4wODYwMDAxNjFhYzBk
YWU5MWEyNWI4NDYzMWQzY2ExNTQ1YTBiNTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5H
TEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBw
ZXJBTkdMRS5oIgogCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYm
IFVTRShBTkdMRSkKKyNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYg
IVVTRShOSUNPU0lBKSAmJiBVU0UoQU5HTEUpCiAKICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIK
ICNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgpAQCAtMzUsMTcgKzM1LDkgQEAKICNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGUu
aCIKIAotI2lmIFVTRShOSUNPU0lBKQotI2luY2x1ZGUgIkdCTURldmljZS5oIgotI2luY2x1ZGUg
Ik5pY29zaWFHQ0dMQU5HTEVMYXllci5oIgotCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRl
IDxnYm0uaD4KLSNlbHNlCiAjaW5jbHVkZSAiR0xDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1EaXNwbGF5LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmgi
Ci0jZW5kaWYKIAogI2lmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAj
aW5jbHVkZSAiVmlkZW9GcmFtZUdTdHJlYW1lci5oIgpAQCAtOTEsNzcgKzgzLDkgQEAgR0NHTENv
bmZpZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0CiAKIGJv
b2wgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBh
dXRvIG1hZGVDdXJyZW50ID0KLSAgICAgICAgWyZdIHsKLSAgICAgICAgICAgIGlmIChFR0xfR2V0
Q3VycmVudENvbnRleHQoKSA9PSBtX2NvbnRleHRPYmopCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gISFFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2Jq
LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIG1fY29udGV4dE9iaik7Ci0gICAgICAg
IH0oKTsKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9ETUFCVUYpCi0gICAgLy8gT25jZSB0aGUg
Y29udGV4dCBpcyBtYWRlIGN1cnJlbnQsIHdlIGhhdmUgdG8gbWFudWFsbHkgcHJvdmlkZSB0aGUg
YmFjay9kcmF3IGJ1ZmZlci4KLSAgICAvLyBJZiBub3QgeWV0IHNldCAoZHVlIHRvIHJlcGV0aXRp
dmUgbWFrZUNvbnRleHRDdXJyZW50KCkgY2FsbHMpLCB3ZSByZXRyaWV2ZSBpdCBmcm9tCi0gICAg
Ly8gdGhlIHN3YXBjaGFpbi4gV2UgYWxzbyBoYXZlIHRvIHByb3ZpZGUgKGkuZS4gcmV0cmlldmUg
ZnJvbSB0aGUgY2FjaGUgb3IgY3JlYXRlKQotICAgIC8vIHRoZSBBTkdMRS15IEVHTEltYWdlIG9i
amVjdCB0aGF0IHdpbGwgYmUgYmFja2VkIGJ5IHRoaXMgZG1hYnVmIGFuZCB3aWxsIGJlIHRhcmdl
dGVkCi0gICAgLy8gYnkgdGhlIHRleHR1cmUgdGhhdCdzIGFjdGluZyBhcyB0aGUgY29sb3IgYXR0
YWNobWVudCBvZiB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlci4KLQotICAgIGF1dG8mIGNvbnRleHQg
PSBzdGF0aWNfY2FzdDxHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRSY+KCp0aGlz
KTsKLSAgICBpZiAobWFkZUN1cnJlbnQgJiYgY29udGV4dC5tX3N3YXBjaGFpbi5zd2FwY2hhaW4g
JiYgIWNvbnRleHQubV9zd2FwY2hhaW4uZHJhd0JPKSB7Ci0gICAgICAgIGF1dG8gc2l6ZSA9IGdl
dEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7Ci0gICAgICAgIGNvbnRleHQubV9zd2FwY2hhaW4u
ZHJhd0JPID0gY29udGV4dC5tX3N3YXBjaGFpbi5zd2FwY2hhaW4tPmdldEJ1ZmZlcigKLSAgICAg
ICAgICAgIEdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyRGVzY3JpcHRpb24gewotICAgICAgICAg
ICAgICAgIC5mb3JtYXQgPSBETUFCdWZGb3JtYXQ6OmNyZWF0ZSh1aW50MzJfdChjb250ZXh0QXR0
cmlidXRlcygpLmFscGhhID8gRE1BQnVmRm9ybWF0OjpGb3VyQ0M6OkFSR0I4ODg4IDogRE1BQnVm
Rm9ybWF0OjpGb3VyQ0M6OlhSR0I4ODg4KSksCi0gICAgICAgICAgICAgICAgLndpZHRoID0gc3Rk
OjpjbGFtcDx1aW50MzJfdD4oc2l6ZS53aWR0aCgpLCAwLCBVSU5UX01BWCksCi0gICAgICAgICAg
ICAgICAgLmhlaWdodCA9IHN0ZDo6Y2xhbXA8dWludDMyX3Q+KHNpemUuaGVpZ2h0KCksIDAsIFVJ
TlRfTUFYKSwKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0
ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLSAgICAgICAgU2NvcGVkUmVzdG9yZVRl
eHR1cmVCaW5kaW5nIHJlc3RvcmVCaW5kaW5nKGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVl
cnlGb3JEcmF3aW5nVGFyZ2V0KHRleHR1cmVUYXJnZXQpLCB0ZXh0dXJlVGFyZ2V0LCB0ZXh0dXJl
VGFyZ2V0ICE9IFRFWFRVUkVfUkVDVEFOR0xFX0FSQik7Ci0KLSAgICAgICAgYXV0byByZXN1bHQg
PSBjb250ZXh0Lm1fc3dhcGNoYWluLmltYWdlcy5lbnN1cmUoY29udGV4dC5tX3N3YXBjaGFpbi5k
cmF3Qk8tPmhhbmRsZSgpLAotICAgICAgICAgICAgWyZdIHsKLSAgICAgICAgICAgICAgICBhdXRv
IGRtYWJ1Zk9iamVjdCA9IGNvbnRleHQubV9zd2FwY2hhaW4uZHJhd0JPLT5jcmVhdGVETUFCdWZP
YmplY3QoMCk7Ci0KLSAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8RUdMaW50
PiBhdHRyaWJ1dGVzIHsKLSAgICAgICAgICAgICAgICAgICAgRUdMX1dJRFRILCBFR0xpbnQoZG1h
YnVmT2JqZWN0LmZvcm1hdC5wbGFuZVdpZHRoKDAsIGRtYWJ1Zk9iamVjdC53aWR0aCkpLAotICAg
ICAgICAgICAgICAgICAgICBFR0xfSEVJR0hULCBFR0xpbnQoZG1hYnVmT2JqZWN0LmZvcm1hdC5w
bGFuZUhlaWdodCgwLCBkbWFidWZPYmplY3QuaGVpZ2h0KSksCi0gICAgICAgICAgICAgICAgICAg
IEVHTF9MSU5VWF9EUk1fRk9VUkNDX0VYVCwgc3RhdGljX2Nhc3Q8RUdMaW50PihkbWFidWZPYmpl
Y3QuZm9ybWF0LnBsYW5lc1swXS5mb3VyY2MpLAotICAgICAgICAgICAgICAgICAgICBFR0xfRE1B
X0JVRl9QTEFORTBfRkRfRVhULCBkbWFidWZPYmplY3QuZmRbMF0udmFsdWUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgRUdMX0RNQV9CVUZfUExBTkUwX1BJVENIX0VYVCwgc3RhdGljX2Nhc3Q8RUdM
aW50PihkbWFidWZPYmplY3Quc3RyaWRlWzBdKSwKLSAgICAgICAgICAgICAgICAgICAgRUdMX0RN
QV9CVUZfUExBTkUwX09GRlNFVF9FWFQsIDAsCi0gICAgICAgICAgICAgICAgICAgIEVHTF9OT05F
LAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVHTF9DcmVhdGVJ
bWFnZUtIUihjb250ZXh0Lm1fc3dhcGNoYWluLnBsYXRmb3JtRGlzcGxheSwgRUdMX05PX0NPTlRF
WFQsIEVHTF9MSU5VWF9ETUFfQlVGX0VYVCwgKEVHTENsaWVudEJ1ZmZlciludWxscHRyLCBzdGQ6
OmRhdGEoYXR0cmlidXRlcykpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgR0xfQmluZFRl
eHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICAgICAgR0xfRUdMSW1hZ2VUYXJn
ZXRUZXh0dXJlMkRPRVModGV4dHVyZVRhcmdldCwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7Ci0K
LSAgICAgICAgLy8gSWYganVzdCBjcmVhdGVkLCB0aGUgZG1hYnVmIGhhcyB0byBiZSBjbGVhcmVk
IHRvIHByb3ZpZGUgYSB6ZXJvZWQtb3V0IGJ1ZmZlci4KLSAgICAgICAgLy8gQ3VycmVudCBjb2xv
ci1jbGVhciBhbmQgZnJhbWVidWZmZXIgc3RhdGUgaGFzIHRvIGJlIHByZXNlcnZlZCBhbmQgcmUt
ZXN0YWJsaXNoZWQgYWZ0ZXIgdGhpcy4KLSAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7
Ci0gICAgICAgICAgICBHQ0dMdWludCBib3VuZEZCTyB7IDAgfTsKLSAgICAgICAgICAgIEdMX0dl
dEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsIHJlaW50ZXJwcmV0X2Nhc3Q8R0NHTGlu
dCo+KCZib3VuZEZCTykpOwotCi0gICAgICAgICAgICBHQ0dMdWludCB0YXJnZXRGQk8gPSBjb250
ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2ZibzsKLSAg
ICAgICAgICAgIGlmICh0YXJnZXRGQk8gIT0gYm91bmRGQk8pCi0gICAgICAgICAgICAgICAgR0xf
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCB0YXJnZXRGQk8pOwotCi0gICAgICAgICAg
ICBzdGQ6OmFycmF5PGZsb2F0LCA0PiBjbGVhckNvbG9yIHsgMCwgMCwgMCwgMCB9OwotICAgICAg
ICAgICAgR0xfR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yLmRhdGEo
KSk7Ci0KLSAgICAgICAgICAgIEdMX0NsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgICAgICAg
ICBHTF9DbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKLQotICAgICAgICAgICAgR0xfQ2xlYXJD
b2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNv
bG9yWzNdKTsKLQotICAgICAgICAgICAgaWYgKHRhcmdldEZCTyAhPSBib3VuZEZCTykKLSAgICAg
ICAgICAgICAgICBHTF9CaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGJvdW5kRkJPKTsK
LSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIG1hZGVDdXJyZW50OworICAg
IGlmIChFR0xfR2V0Q3VycmVudENvbnRleHQoKSA9PSBtX2NvbnRleHRPYmopCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiAhIUVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVH
TF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpjaGVja0dQVVN0YXR1cygpCkBAIC0yMDAsMTQgKzEyNCwx
MiBAQCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRTo6fkdyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlckFOR0xFKCkKICAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogCi0jaWYgIVVT
RShURVhUVVJFX01BUFBFUl9ETUFCVUYpCiAgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCiAg
ICAgICAgIEdMX0RlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKICNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgaWYgKG1faW50ZXJtZWRpYXRlVGV4dHVyZSkK
ICAgICAgICAgR0xfRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CiAj
ZW5kaWYKLSNlbmRpZgogfQogCiBSZWZQdHI8R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURl
bGVnYXRlPiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRTo6bGF5ZXJDb250ZW50
c0Rpc3BsYXlEZWxlZ2F0ZSgpCkBAIC0zMTgsMTEgKzI0MCw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEU6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQogICAg
IH0KICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX05PTkUpOwogCi0jaWYgVVNF
KE5JQ09TSUEpCi0gICAgYXV0byBzaGFyaW5nQ29udGV4dCA9IEVHTF9OT19DT05URVhUOwotI2Vs
c2UKICAgICBhdXRvIHNoYXJpbmdDb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNw
bGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgp
OwotI2VuZGlmCiAgICAgbV9jb250ZXh0T2JqID0gRUdMX0NyZWF0ZUNvbnRleHQobV9kaXNwbGF5
T2JqLCBtX2NvbmZpZ09iaiwgc2hhcmluZ0NvbnRleHQsIGVnbENvbnRleHRBdHRyaWJ1dGVzLmRh
dGEoKSk7CiAgICAgaWYgKG1fY29udGV4dE9iaiA9PSBFR0xfTk9fQ09OVEVYVCkgewogICAgICAg
ICBMT0coV2ViR0wsICJFR0xDb250ZXh0IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKQEAgLTMz
OCwxMyArMjU2LDggQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRTo6
cGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCgpCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyQU5HTEU6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7Ci0jaWYgVVNFKE5JQ09TSUEp
Ci0gICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xBTkdMRUxheWVy
PigqdGhpcyk7Ci0gICAgbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlID0gUGxhdGZvcm1M
YXllckRpc3BsYXlEZWxlZ2F0ZTo6Y3JlYXRlKCZtX25pY29zaWFMYXllci0+Y29udGVudExheWVy
KCkpOwotI2Vsc2UKICAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVy
R0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlzKTsKICAgICBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVs
ZWdhdGUgPSBQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlOjpjcmVhdGUobV90ZXhtYXBMYXll
ci5nZXQoKSk7Ci0jZW5kaWYKIAogICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CkBAIC0zNzAsNyArMjgz
LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRTo6cGxhdGZvcm1J
bml0aWFsaXplKCkKICAgICBHTF9HZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKICAgICBHTF9C
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKIAotI2lmICFVU0UoVEVYVFVS
RV9NQVBQRVJfRE1BQlVGKQogICAgIEdMX0dlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0
dXJlKTsKICAgICBHTF9CaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX2NvbXBvc2l0b3JUZXh0
dXJlKTsKICAgICBHTF9UZXhQYXJhbWV0ZXJmKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKQEAgLTM4Nyw3ICsyOTksNiBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogICAgIEdMX1Rl
eFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOwogCiAgICAgR0xfQmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgMCk7Ci0jZW5kaWYK
ICNlbmRpZgogCiAgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgpAQCAtNDE4LDExICsz
MjksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFOjpwcmVwYXJl
VGV4dHVyZSgpCiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQogICAgICAg
ICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CiAKLSNpZiAhVVNFKFRFWFRVUkVf
TUFQUEVSX0RNQUJVRikKICAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0
dXJlKTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgc3RkOjpzd2FwKG1fdGV4
dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSNlbmRpZgogI2VuZGlmCiAKICAgICBHTF9C
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKQEAgLTQ0OCwxNSArMzU3LDEx
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEU6OnJlc2hhcGVEaXNw
bGF5QnVmZmVyQmFja2luZygpCiAgICAgR0x1aW50IGludGVybmFsQ29sb3JGb3JtYXQgPSB0ZXh0
dXJlVGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgPyBjb2xvckZvcm1hdCA6IG1faW50ZXJuYWxDb2xv
ckZvcm1hdDsKICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcgcmVzdG9yZUJpbmRpbmco
ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdUYXJnZXQodGV4dHVyZVRh
cmdldCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVYVFVSRV9SRUNUQU5HTEVf
QVJCKTsKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUl9ETUFCVUYpCi0gICAgbV9zd2FwY2hhaW4g
PSBTd2FwY2hhaW4ocGxhdGZvcm1EaXNwbGF5KCkpOwotI2Vsc2UKICAgICBHTF9CaW5kVGV4dHVy
ZSh0ZXh0dXJlVGFyZ2V0LCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKICAgICBHTF9UZXhJbWFnZTJE
KHRleHR1cmVUYXJnZXQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAs
IGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCiAgICAgR0xfQmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9pbnRlcm1lZGlh
dGVUZXh0dXJlKTsKICAgICBHTF9UZXhJbWFnZTJEKHRleHR1cmVUYXJnZXQsIDAsIGludGVybmFs
Q29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9C
WVRFLCAwKTsKLSNlbmRpZgogI2VuZGlmCiAgICAgR0xfQmluZFRleHR1cmUodGV4dHVyZVRhcmdl
dCwgbV90ZXh0dXJlKTsKICAgICBHTF9UZXhJbWFnZTJEKHRleHR1cmVUYXJnZXQsIDAsIGludGVy
bmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05F
RF9CWVRFLCAwKTsKQEAgLTQ3MiwyNyArMzc3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXJBTkdMRTo6cHJlcGFyZUZvckRpc3BsYXkoKQogCiAgICAgcHJlcGFyZVRleHR1
cmUoKTsKICAgICBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVJfRE1BQlVGKQotICAgIG1fc3dhcGNoYWluLmRpc3BsYXlCTyA9IFdURk1vdmUobV9zd2FwY2hh
aW4uZHJhd0JPKTsKLSNlbmRpZgogfQogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0RNQUJVRikK
LUdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFOjpTd2FwY2hhaW46OlN3YXBjaGFp
bihHQ0dMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkpCi0gICAgOiBwbGF0Zm9ybURpc3BsYXkocGxh
dGZvcm1EaXNwbGF5KQotICAgICwgc3dhcGNoYWluKGFkb3B0UmVmKG5ldyBHQk1CdWZmZXJTd2Fw
Y2hhaW4oR0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXJTd2FwY2hhaW5TaXplOjpGb3VyKSkpCi17
IH0KLQotR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEU6OlN3YXBjaGFpbjo6flN3
YXBjaGFpbigpCi17Ci0gICAgZm9yIChFR0xJbWFnZUtIUiBpbWFnZSA6IGltYWdlcy52YWx1ZXMo
KSkgewotICAgICAgICBpZiAoaW1hZ2UgIT0gRUdMX05PX0lNQUdFX0tIUikKLSAgICAgICAgICAg
IEVHTF9EZXN0cm95SW1hZ2VLSFIocGxhdGZvcm1EaXNwbGF5LCBpbWFnZSk7Ci0gICAgfQotfQot
I2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBVU0UoQU5HTEUpCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmICFVU0UoTklDT1NJQSkgJiYgVVNFKEFO
R0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5H
TEUuaAppbmRleCAxNThjZDZiZjc3MGIwNTk0MDYzYTBmYWRmMjIxNzMwYjdkZGNkOTBmLi5jMmM1
YTMyMDEyYTk0M2JkZGMwNWEyNTQ0ZmI3Njg0MjVhYjUxZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyQU5HTEUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuaApAQCAtMjUsMjQgKzI1LDEw
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoVEVYVFVSRV9N
QVBQRVIpICYmIFVTRShBTkdMRSkKKyNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShURVhUVVJFX01B
UFBFUikgJiYgIVVTRShOSUNPU0lBKSAmJiBVU0UoQU5HTEUpCiAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmgiCiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfRE1BQlVGKQotI2lu
Y2x1ZGUgIkdCTUJ1ZmZlclN3YXBjaGFpbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
ZW5kaWYKLQotI2lmIFVTRShOSUNPU0lBKQotbmFtZXNwYWNlIE5pY29zaWEgewotY2xhc3MgR0NH
TEFOR0xFTGF5ZXI7Ci1jbGFzcyBHQ0dMTGF5ZXI7Ci19Ci0KLXR5cGVkZWYgdm9pZCAqRUdMSW1h
Z2VLSFI7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0dXJlTWFw
cGVyR0NHTFBsYXRmb3JtTGF5ZXI7CkBAIC03NSw0OSArNjEsMTYgQEAgcHJpdmF0ZToKIAogICAg
IFJlZlB0cjxHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+IG1fbGF5ZXJDb250
ZW50c0Rpc3BsYXlEZWxlZ2F0ZTsKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUl9ETUFCVUYpCi0g
ICAgc3RydWN0IFN3YXBjaGFpbiB7Ci0gICAgICAgIFN3YXBjaGFpbigpID0gZGVmYXVsdDsKLSAg
ICAgICAgU3dhcGNoYWluKEdDR0xEaXNwbGF5KTsKLSAgICAgICAgflN3YXBjaGFpbigpOwotCi0g
ICAgICAgIEdDR0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSB7IG51bGxwdHIgfTsKLSAgICAgICAg
UmVmUHRyPEdCTUJ1ZmZlclN3YXBjaGFpbj4gc3dhcGNoYWluOwotICAgICAgICBSZWZQdHI8R0JN
QnVmZmVyU3dhcGNoYWluOjpCdWZmZXI+IGRyYXdCTzsKLSAgICAgICAgUmVmUHRyPEdCTUJ1ZmZl
clN3YXBjaGFpbjo6QnVmZmVyPiBkaXNwbGF5Qk87Ci0KLSAgICAgICAgLy8gQ2FjaGUgZm9yIEVH
TEltYWdlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgYnVmZmVycyBvcmlnaW5hdGluZyBm
cm9tIHRoZSBzd2FwY2hhaW4uCi0gICAgICAgIC8vIFRoZSBzd2FwY2hhaW4gaXMgcmVnZW5lcmF0
ZWQgKGFuZCB0aGVzZSBFR0xJbWFnZSBvYmplY3RzIGRlc3Ryb3llZCkgdXBvbiBlYWNoIGJ1ZmZl
ciByZXNoYXBpbmcsCi0gICAgICAgIC8vIHNvIHdlIHNob3VsZCBiZSBmaW5lIHdpdGhvdXQgbWFu
YWdpbmcgc3RhbGUgYnVmZmVycyBhbmQgY29ycmVzcG9uZGluZyBFR0xJbWFnZXMgKHdoaWNoIHNo
b3VsZG4ndCBvY2N1ciBhbnl3YXkpLgotICAgICAgICBIYXNoTWFwPHVpbnQzMl90LCBFR0xJbWFn
ZUtIUiwgV1RGOjpEZWZhdWx0SGFzaDx1aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dWludDMyX3Q+PiBpbWFnZXM7Ci0gICAgfSBtX3N3YXBjaGFpbjsKLSNlbHNl
CiAgICAgR0NHTHVpbnQgbV9jb21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKICNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCiAgICAgR0NHTHVpbnQgbV9pbnRlcm1lZGlhdGVUZXh0dXJlIHsgMCB9
OwogI2VuZGlmCi0jZW5kaWYKIAotI2lmIFVTRShOSUNPU0lBKQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Ci0jZWxzZQogICAgIHN0
ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI+IG1fdGV4bWFwTGF5
ZXI7Ci0jZW5kaWYKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUl9ETUFCVUYpCi0gICAgLy8gUmVx
dWlyZWQgKGZvciBub3cpIGluIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDb250ZXh0Q3Vy
cmVudCgpCi0gICAgLy8gdG8gY29uc3RydWN0IGFuZCBzZXQgdGhlIGRyYXcgYnVmZmVyLW9iamVj
dC4KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTsKLSNlbmRpZgotCi0j
aWYgVVNFKE5JQ09TSUEpCi0gICAgZnJpZW5kIGNsYXNzIE5pY29zaWE6OkdDR0xBTkdMRUxheWVy
OwotICAgIGZyaWVuZCBjbGFzcyBOaWNvc2lhOjpHQ0dMTGF5ZXI7Ci0jZWxzZQogICAgIGZyaWVu
ZCBjbGFzcyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7Ci0jZW5kaWYKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKSAmJiBVU0UoQU5HTEUpCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpICYmICFVU0UoTklDT1NJQSkgJiYgVVNFKEFOR0xFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457194</attachid>
            <date>2022-04-10 00:45:31 -0700</date>
            <delta_ts>2022-04-12 07:49:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239037-20220410094529.patch</filename>
            <type>text/plain</type>
            <size>50208</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNjg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjQ2ODNlMDc5MWZhMjQ5
NTdmNGJlYTJjN2NmYzMzMDE4ZWQxMWYwOS4uNmQ2MmVmMmFkNTU2ZTA3NGI1Zjk0ZGI4ZmU3M2Yy
ZjZiYThkZWRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDIyLTA0LTEwICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIE1v
dmUgRE1BQnVmLWJhY2tlZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFIGZ1bmN0aW9uYWxpdHkgaW50
byBhIHN0YW5kYWxvbmUgZGVyaXZhdGlvbiBjaGFpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5MDM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIHRoZSBwdXJwb3NlcyBvZiBBTkdMRS1iYWNrZWQg
V2ViR0wgZXhlY3V0aW9uLCB0aGUgTGludXgteSBwb3J0cyBhcmUKKyAgICAgICAgZm9yIG5vdyBs
ZXZlcmFnaW5nIERNQUJ1ZiBpbmZyYXN0cnVjdHVyZSB0aHJvdWdoIHRoZSBsaWJnYm0gZGVwZW5k
ZW5jeS4KKyAgICAgICAgUmlnaHQgbm93IHRoaXMgY291bGQgYmUgdXNlZCBmb3IgYm90aCB0aGUg
Y3VycmVudCBpbi1XZWJQcm9jZXNzCisgICAgICAgIGV4ZWN1dGlvbiBhcyB3ZWxsIGFzIHVuZGVy
LWNvbnN0cnVjdGlvbiBpbi1HUFVQcm9jZXNzIGV4ZWN1dGlvbi4KKworICAgICAgICBUaGUgZm9y
bWVyIHJlcXVpcmVzIGFsbCB0aGUgR0JNIGJpdHMgYW5kIGJvbHRzIHRoYXQgYXJlIHRoZW4gdGll
ZAorICAgICAgICB0b2dldGhlciB3aXRoIGEgTmljb3NpYTo6R0NHTEFOR0xFTGF5ZXIgaW5zdGFu
Y2UgdGhhdCB0YWtlcyBjYXJlIG9mCisgICAgICAgIHByZXNlbnRpbmcgdGhlIHJlbmRlcmVkLWlu
dG8gRE1BQnVmIG9iamVjdHMgaW4gVGV4dHVyZU1hcHBlci4gVGhlIGxhdHRlcgorICAgICAgICBy
ZXF1aXJlcyBqdXN0IHRoZSBiaXRzIGFuZCBib2x0cywgYnV0IGl0IHJ1bnMgdGhvc2UgaW4gdGhl
IEdQVVByb2Nlc3MKKyAgICAgICAgYW5kIHRoZW4gdGFrZXMgdGhlIERNQUJ1ZiBvYmplY3RzIGFu
ZCB0cmFuc3BvcnRzIHRoZW0gb3ZlciBJUEMgdG8gdGhlCisgICAgICAgIHBvaW50IG9mIGludGVn
cmF0aW9uIGludG8gdGhlIGNvbXBvc2l0aW9uIGVuZ2luZS4gQXQgdGhlIG1vbWVudCB0aGF0J3MK
KyAgICAgICAgc3RpbGwgdGhlIFRleHR1cmVNYXBwZXIgaW4gV2ViUHJvY2VzcywgYnV0IHRoYXQg
Y2FuIG1vdmUgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBUaGUgR3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyQU5HTEUgY2xhc3MgaGFzIGRpZmZlcmVudCBwYXJ0cyBvZgorICAgICAgICBH
Qk0vRE1BQnVmIGludGVncmF0aW9uIHJlbW92ZWQuIENsYXNzIGlzIG5vdyBhZGRpdGlvbmFsbHkg
Z3VhcmRlZCB3aXRoCisgICAgICAgIHRoZSAhVVNFKE5JQ09TSUEpIGZsYWcgc28gdGhhdCBpdCBy
ZW1haW5zIGJ1aWxkYWJsZSBvbiB0aGUgV2luIHBvcnQKKyAgICAgICAgd2hpY2ggdXNlcyB0aGlz
IGNsYXNzIGZvciBBTkdMRSBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBOaWNvc2lhLWxlc3MKKyAgICAg
ICAgVGV4dHVyZU1hcHBlciBjb25maWd1cmF0aW9uLgorCisgICAgICAgIFRoZXNlIHBhcnRzIGFy
ZSBub3cgbW92ZWQgaW50byB0aGUgR3JhcGhpY3NDb250ZXh0R0xHQk0gYW5kCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlciBjbGFzc2VzLiBUaGUgZmlyc3Qgb25lIGRv
ZXMgYWxsIHRoZQorICAgICAgICBoZWF2eSB3b3JrLCBhbmQgdGhlIHNlY29uZCBvbmUganVzdCBh
ZGRzIG9uIHRvcCB0aGUgVGV4dHVyZU1hcHBlcgorICAgICAgICBpbnRlZ3JhdGlvbiB0aHJvdWdo
IHRoZSBOaWNvc2lhOjpHQ0dMQU5HTEVMYXllciBjbGFzcy4KKworICAgICAgICBJbiB0aGUgR3Jh
cGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyIGltcGxlbWVudGF0aW9uIGZpbGUsIHRoZQor
ICAgICAgICBjcmVhdGVXZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0woKSBmdW5jdGlvbiByZXR1
cm5zIGFuIG9iamVjdCBvZiB0aGF0CisgICAgICAgIHR5cGUsIG1lYW5pbmcgaXQncyB0aGUgaW1w
bGVtZW50YXRpb24gdGhhdCBzaG91bGQgYmUgdXNlZCBvbiB0aGUKKyAgICAgICAgV2ViUHJvY2Vz
cyBzaWRlLiBUaGUgVGV4dHVyZU1hcHBlci1sZXNzIEdyYXBoaWNzQ29udGV4dEdMR0JNIGNsYXNz
IGlzCisgICAgICAgIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBpbnNpZGUg
dGhlIEdQVVByb2Nlc3MuCisKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBT
b3VyY2VzV1BFLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dibS9HcmFwaGljc0NvbnRleHRHTEdCTS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6On5HcmFwaGljc0NvbnRleHRHTEFOR0xF
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtRGlz
cGxheSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpw
bGF0Zm9ybUNvbmZpZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6Y2hlY2tHUFVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1SZWxlYXNlVGhyZWFkUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnJlYWRDb21wb3NpdGVkUmVzdWx0
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEdCTTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMR0JNOjpHcmFwaGljc0NvbnRleHRHTEdC
TSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEdCTTo6cGxhdGZvcm1Jbml0
aWFsaXplQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEdCTTo6
cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
R0JNOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEdCTTo6bGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTEdCTTo6Y29weVRleHR1cmVGcm9tTWVkaWEpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xHQk06OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb1ZpZGVv
RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xHQk06OnNldENvbnRl
eHRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMR0JNOjpy
ZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xHQk06OnByZXBhcmVGb3JEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMR0JNOjpTd2FwY2hhaW46OlN3YXBjaGFpbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEdCTTo6U3dhcGNoYWluOjp+U3dhcGNoYWluKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhpY3NDb250ZXh0R0xHQk0uaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEdCTTo6c3dhcGNoYWluKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFw
cGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVXZWJQcm9jZXNzR3JhcGhp
Y3NDb250ZXh0R0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0
dXJlTWFwcGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xH
Qk1UZXh0dXJlTWFwcGVyOjpHcmFwaGljc0NvbnRleHRHTEdCTVRleHR1cmVNYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyOjpsYXllckNv
bnRlbnRzRGlzcGxheURlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMR0JNVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyLmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFH
Q0dMQU5HTEVMYXllci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6c3dh
cEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6R0NH
TEFOR0xFTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFw
L05pY29zaWFHQ0dMQU5HTEVMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEU6On5HcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRTo6cGxhdGZvcm1Jbml0aWFsaXplQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdM
RTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlckFOR0xFOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRTo6cmVzaGFwZURpc3BsYXlCdWZm
ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlckFOR0xFOjpwcmVwYXJlRm9yRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRTo6U3dhcGNoYWluOjpTd2FwY2hhaW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5H
TEU6OlN3YXBjaGFpbjo6flN3YXBjaGFpbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmg6CisK
IDIwMjItMDQtMDkgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtU
ZXh0IGF1dG9zaXppbmddIFJlbW92ZSByZWR1bmRhbnQgbGluZUNvdW50Rm9yVGV4dEF1dG9zaXpp
bmcgbWVtYmVyIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RL
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IGM2Mzg2YTY1ZDQ3MTA3
MWY3Y2MzYjQwMTg5OGZiNjE1YWZkNmFhOTUuLjIzMjJlMmZkMTY4NjgzMjk0MjQ2NTYxNDA1MWRi
NzM4Y2FiZmU5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC04Myw2ICs4Myw4IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0xYMTEuY3BwIEBuby11bmlmeQogCiBwbGF0Zm9y
bS9ncmFwaGljcy9nYm0vR0JNQnVmZmVyU3dhcGNoYWluLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z2JtL0dCTURldmljZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HcmFwaGljc0NvbnRleHRH
TEdCTS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HcmFwaGljc0NvbnRleHRHTEdCTVRleHR1
cmVNYXBwZXIuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwIEBu
by11bmlmeQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CmluZGV4IDE2ZDM1MzQ0YTMwODY1YTAxMjU3ZDdm
OWFjNTQ0ZTYxMzFkZGNlNjcuLjNjNjRiZmQ5ZTJhNWVkNTZmZmQ2MWY2YzBlMWE0MmY3OGM5ZTcy
NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CkBAIC03Miw2ICs3Miw4IEBAIHBsYXRmb3JtL2dyYXBo
aWNzL2VnbC9HTENvbnRleHRFR0xMaWJXUEUuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dibS9H
Qk1CdWZmZXJTd2FwY2hhaW4uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9nYm0vR0JNRGV2aWNlLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dyYXBoaWNzQ29udGV4dEdMR0JNLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvZ2JtL0dyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlci5jcHAKIAog
cGxhdGZvcm0vZ3JhcGhpY3MvbGlid3BlL1BsYXRmb3JtRGlzcGxheUxpYldQRS5jcHAKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKaW5kZXggNTU2OGFkMDg5
YWUwYmFiODdhMGI5OGQzNGQ5YzhjOTI0MWFjOWRhYi4uNGNmODQ4OWNlNDEyYmE4OTljYzQ5NjFm
MmNhM2U3MTk3NzI1Y2Q5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4
dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFw
cGVyLmNtYWtlCkBAIC0xNTgsNSArMTU4LDcgQEAgaWYgKFVTRV9MSUJHQk0pCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dibS9ETUFCdWZSZWxlYXNlRmxhZy5oCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2dibS9HQk1CdWZmZXJTd2FwY2hhaW4uaAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9nYm0vR0JNRGV2aWNlLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dyYXBo
aWNzQ29udGV4dEdMR0JNLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dyYXBoaWNz
Q29udGV4dEdMR0JNVGV4dHVyZU1hcHBlci5oCiAgICAgKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9HcmFwaGljc0NvbnRleHRHTEdC
TS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhpY3NDb250
ZXh0R0xHQk0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzMGYyZTcxYWU4YzZiZmM5OGQzYTU4Y2VmNzJmYTRi
OGFhMmY4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nYm0vR3JhcGhpY3NDb250ZXh0R0xHQk0uY3BwCkBAIC0wLDAgKzEsMzk5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMR0JNLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpICYm
IFVTRShMSUJHQk0pICYmIFVTRShBTkdMRSkKKworI2luY2x1ZGUgIkFOR0xFSGVhZGVycy5oIgor
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorI2lu
Y2x1ZGUgIlZpZGVvRnJhbWUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dy
YXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRy
aWJ1dGVzKQoreworfQorCitHcmFwaGljc0NvbnRleHRHTEFOR0xFOjp+R3JhcGhpY3NDb250ZXh0
R0xBTkdMRSgpCit7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICBpZiAobV90ZXh0dXJlKQor
ICAgICAgICBHTF9EZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKworICAgIGF1dG8gYXR0
cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRp
YWxpYXMpIHsKKyAgICAgICAgR0xfRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1
dGVzLmRlcHRoKQorICAgICAgICAgICAgR0xfRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIEdMX0RlbGV0ZUZyYW1lYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5j
aWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpCisgICAgICAgICAgICBHTF9EZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgfQorICAgIEdMX0RlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwor
fQorCitHQ0dMRGlzcGxheSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybURpc3BsYXko
KSBjb25zdAoreworICAgIHJldHVybiBtX2Rpc3BsYXlPYmo7Cit9CisKK0dDR0xDb25maWcgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1Db25maWcoKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbmZpZ09iajsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQoreworICAgIGF1dG8gbWFkZUN1cnJlbnQgPQorICAgICAgICBbJl0gewor
ICAgICAgICAgICAgaWYgKEVHTF9HZXRDdXJyZW50Q29udGV4dCgpID09IG1fY29udGV4dE9iaikK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiAhIUVHTF9N
YWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwg
bV9jb250ZXh0T2JqKTsKKyAgICAgICAgfSgpOworCisgICAgYXV0byYgY29udGV4dFN3YXBjaGFp
biA9IHN0YXRpY19jYXN0PEdyYXBoaWNzQ29udGV4dEdMR0JNJj4oKnRoaXMpLnN3YXBjaGFpbigp
OworICAgIGlmIChtYWRlQ3VycmVudCAmJiBjb250ZXh0U3dhcGNoYWluLnN3YXBjaGFpbiAmJiAh
Y29udGV4dFN3YXBjaGFpbi5kcmF3Qk8pIHsKKyAgICAgICAgYXV0byBzaXplID0gZ2V0SW50ZXJu
YWxGcmFtZWJ1ZmZlclNpemUoKTsKKyAgICAgICAgY29udGV4dFN3YXBjaGFpbi5kcmF3Qk8gPSBj
b250ZXh0U3dhcGNoYWluLnN3YXBjaGFpbi0+Z2V0QnVmZmVyKAorICAgICAgICAgICAgR0JNQnVm
ZmVyU3dhcGNoYWluOjpCdWZmZXJEZXNjcmlwdGlvbiB7CisgICAgICAgICAgICAgICAgLmZvcm1h
dCA9IERNQUJ1ZkZvcm1hdDo6Y3JlYXRlKHVpbnQzMl90KGNvbnRleHRBdHRyaWJ1dGVzKCkuYWxw
aGEgPyBETUFCdWZGb3JtYXQ6OkZvdXJDQzo6QVJHQjg4ODggOiBETUFCdWZGb3JtYXQ6OkZvdXJD
Qzo6WFJHQjg4ODgpKSwKKyAgICAgICAgICAgICAgICAud2lkdGggPSBzdGQ6OmNsYW1wPHVpbnQz
Ml90PihzaXplLndpZHRoKCksIDAsIFVJTlRfTUFYKSwKKyAgICAgICAgICAgICAgICAuaGVpZ2h0
ID0gc3RkOjpjbGFtcDx1aW50MzJfdD4oc2l6ZS5oZWlnaHQoKSwgMCwgVUlOVF9NQVgpLAorICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCgpOworICAgICAgICBTY29wZWRSZXN0b3JlVGV4dHVyZUJpbmRpbmcg
cmVzdG9yZUJpbmRpbmcoZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXRRdWVyeUZvckRyYXdpbmdU
YXJnZXQodGV4dHVyZVRhcmdldCksIHRleHR1cmVUYXJnZXQsIHRleHR1cmVUYXJnZXQgIT0gVEVY
VFVSRV9SRUNUQU5HTEVfQVJCKTsKKworICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnRleHRTd2Fw
Y2hhaW4uaW1hZ2VzLmVuc3VyZShjb250ZXh0U3dhcGNoYWluLmRyYXdCTy0+aGFuZGxlKCksCisg
ICAgICAgICAgICBbJl0geworICAgICAgICAgICAgICAgIGF1dG8gZG1hYnVmT2JqZWN0ID0gY29u
dGV4dFN3YXBjaGFpbi5kcmF3Qk8tPmNyZWF0ZURNQUJ1Zk9iamVjdCgwKTsKKworICAgICAgICAg
ICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxFR0xpbnQ+IGF0dHJpYnV0ZXMgeworICAgICAg
ICAgICAgICAgICAgICBFR0xfV0lEVEgsIEVHTGludChkbWFidWZPYmplY3QuZm9ybWF0LnBsYW5l
V2lkdGgoMCwgZG1hYnVmT2JqZWN0LndpZHRoKSksCisgICAgICAgICAgICAgICAgICAgIEVHTF9I
RUlHSFQsIEVHTGludChkbWFidWZPYmplY3QuZm9ybWF0LnBsYW5lSGVpZ2h0KDAsIGRtYWJ1Zk9i
amVjdC5oZWlnaHQpKSwKKyAgICAgICAgICAgICAgICAgICAgRUdMX0xJTlVYX0RSTV9GT1VSQ0Nf
RVhULCBzdGF0aWNfY2FzdDxFR0xpbnQ+KGRtYWJ1Zk9iamVjdC5mb3JtYXQucGxhbmVzWzBdLmZv
dXJjYyksCisgICAgICAgICAgICAgICAgICAgIEVHTF9ETUFfQlVGX1BMQU5FMF9GRF9FWFQsIGRt
YWJ1Zk9iamVjdC5mZFswXS52YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICBFR0xfRE1BX0JV
Rl9QTEFORTBfUElUQ0hfRVhULCBzdGF0aWNfY2FzdDxFR0xpbnQ+KGRtYWJ1Zk9iamVjdC5zdHJp
ZGVbMF0pLAorICAgICAgICAgICAgICAgICAgICBFR0xfRE1BX0JVRl9QTEFORTBfT0ZGU0VUX0VY
VCwgMCwKKyAgICAgICAgICAgICAgICAgICAgRUdMX05PTkUsCisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0NyZWF0ZUltYWdlS0hSKGNvbnRleHRTd2FwY2hh
aW4ucGxhdGZvcm1EaXNwbGF5LCBFR0xfTk9fQ09OVEVYVCwgRUdMX0xJTlVYX0RNQV9CVUZfRVhU
LCAoRUdMQ2xpZW50QnVmZmVyKW51bGxwdHIsIHN0ZDo6ZGF0YShhdHRyaWJ1dGVzKSk7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICBHTF9CaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3Rl
eHR1cmUpOworICAgICAgICBHTF9FR0xJbWFnZVRhcmdldFRleHR1cmUyRE9FUyh0ZXh0dXJlVGFy
Z2V0LCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKKworICAgICAgICAvLyBJZiBqdXN0IGNyZWF0
ZWQsIHRoZSBkbWFidWYgaGFzIHRvIGJlIGNsZWFyZWQgdG8gcHJvdmlkZSBhIHplcm9lZC1vdXQg
YnVmZmVyLgorICAgICAgICAvLyBDdXJyZW50IGNvbG9yLWNsZWFyIGFuZCBmcmFtZWJ1ZmZlciBz
dGF0ZSBoYXMgdG8gYmUgcHJlc2VydmVkIGFuZCByZS1lc3RhYmxpc2hlZCBhZnRlciB0aGlzLgor
ICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIEdDR0x1aW50IGJv
dW5kRkJPIHsgMCB9OworICAgICAgICAgICAgR0xfR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJf
QklORElORywgcmVpbnRlcnByZXRfY2FzdDxHQ0dMaW50Kj4oJmJvdW5kRkJPKSk7CisKKyAgICAg
ICAgICAgIEdDR0x1aW50IHRhcmdldEZCTyA9IGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFz
ID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvOworICAgICAgICAgICAgaWYgKHRhcmdldEZCTyAh
PSBib3VuZEZCTykKKyAgICAgICAgICAgICAgICBHTF9CaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIHRhcmdldEZCTyk7CisKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8ZmxvYXQsIDQ+IGNs
ZWFyQ29sb3IgeyAwLCAwLCAwLCAwIH07CisgICAgICAgICAgICBHTF9HZXRGbG9hdHYoR0xfQ09M
T1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IuZGF0YSgpKTsKKworICAgICAgICAgICAgR0xfQ2xl
YXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIEdMX0NsZWFyKEdMX0NPTE9SX0JVRkZF
Ul9CSVQpOworCisgICAgICAgICAgICBHTF9DbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFy
Q29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOworCisgICAgICAgICAgICBp
ZiAodGFyZ2V0RkJPICE9IGJvdW5kRkJPKQorICAgICAgICAgICAgICAgIEdMX0JpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgYm91bmRGQk8pOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIG1hZGVDdXJyZW50OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmNo
ZWNrR1BVU3RhdHVzKCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0
Zm9ybVJlbGVhc2VUaHJlYWRSZXNvdXJjZXMoKQoreworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpyZWFkQ29tcG9zaXRlZFJlc3VsdHMoKQor
eworICAgIHJldHVybiByZWFkUmVuZGVyaW5nUmVzdWx0cygpOworfQorCitSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0R0xHQk0+IEdyYXBoaWNzQ29udGV4dEdMR0JNOjpjcmVhdGUoR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKK3sKKyAgICBhdXRvIGNvbnRleHQgPSBhZG9w
dFJlZigqbmV3IEdyYXBoaWNzQ29udGV4dEdMR0JNKFdURk1vdmUoYXR0cmlidXRlcykpKTsKKyAg
ICBpZiAoIWNvbnRleHQtPmluaXRpYWxpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMR0JNOjpHcmFwaGljc0Nv
bnRleHRHTEdCTShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQorICAg
IDogR3JhcGhpY3NDb250ZXh0R0xBTkdMRShXVEZNb3ZlKGF0dHJpYnV0ZXMpKQoreyB9CisKK0dy
YXBoaWNzQ29udGV4dEdMR0JNOjp+R3JhcGhpY3NDb250ZXh0R0xHQk0oKSA9IGRlZmF1bHQ7CisK
K1JlZlB0cjxHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+IEdyYXBoaWNzQ29u
dGV4dEdMR0JNOjpsYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCkKK3sKKyAgICByZXR1cm4g
eyB9OworfQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKK1JlZlB0cjxWaWRlb0ZyYW1lPiBH
cmFwaGljc0NvbnRleHRHTEdCTTo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvVmlkZW9GcmFtZSgp
Cit7CisgICAgcmV0dXJuIHsgfTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZJREVPKQorYm9v
bCBHcmFwaGljc0NvbnRleHRHTEdCTTo6Y29weVRleHR1cmVGcm9tTWVkaWEoTWVkaWFQbGF5ZXIm
LCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgR0NHTGludCwgR0NHTGVudW0sIEdDR0xlbnVt
LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYK
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTEdCTTo6c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkK
K3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTEdCTTo6cHJlcGFyZUZvckRpc3BsYXkoKQor
eworICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCB8fCAhbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHByZXBhcmVUZXh0dXJlKCk7CisgICAgbWFya0xheWVyQ29t
cG9zaXRlZCgpOworCisgICAgbV9zd2FwY2hhaW4uZGlzcGxheUJPID0gV1RGTW92ZShtX3N3YXBj
aGFpbi5kcmF3Qk8pOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMR0JNOjpwbGF0Zm9ybUlu
aXRpYWxpemVDb250ZXh0KCkKK3sKKyNpZiBFTkFCTEUoV0VCR0wyKQorICAgIG1faXNGb3JXZWJH
TDIgPSBjb250ZXh0QXR0cmlidXRlcygpLndlYkdMVmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRH
TFdlYkdMVmVyc2lvbjo6V2ViR0wyOworI2VuZGlmCisKKyAgICBWZWN0b3I8RUdMaW50PiBkaXNw
bGF5QXR0cmlidXRlcyB7CisjaWYgIU9TKFdJTkRPV1MpCisgICAgICAgIEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX0FOR0xFLCBFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9PUEVOR0xFU19BTkdMRSwK
KyAgICAgICAgRUdMX1BMQVRGT1JNX0FOR0xFX0RFVklDRV9UWVBFX0FOR0xFLCBFR0xfUExBVEZP
Uk1fQU5HTEVfREVWSUNFX1RZUEVfRUdMX0FOR0xFLAorICAgICAgICBFR0xfUExBVEZPUk1fQU5H
TEVfTkFUSVZFX1BMQVRGT1JNX1RZUEVfQU5HTEUsIEVHTF9QTEFURk9STV9TVVJGQUNFTEVTU19N
RVNBLAorI2VuZGlmCisgICAgICAgIEVHTF9OT05FLAorICAgIH07CisKKyAgICBtX2Rpc3BsYXlP
YmogPSBFR0xfR2V0UGxhdGZvcm1EaXNwbGF5RVhUKEVHTF9QTEFURk9STV9BTkdMRV9BTkdMRSwg
RUdMX0RFRkFVTFRfRElTUExBWSwgZGlzcGxheUF0dHJpYnV0ZXMuZGF0YSgpKTsKKyAgICBpZiAo
bV9kaXNwbGF5T2JqID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBFR0xpbnQgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb247CisgICAgaWYgKEVHTF9Jbml0
aWFsaXplKG1fZGlzcGxheU9iaiwgJm1ham9yVmVyc2lvbiwgJm1pbm9yVmVyc2lvbikgPT0gRUdM
X0ZBTFNFKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24g
ZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIExPRyhXZWJHTCwg
IkFOR0xFIGluaXRpYWxpc2VkIE1ham9yOiAlZCBNaW5vcjogJWQiLCBtYWpvclZlcnNpb24sIG1p
bm9yVmVyc2lvbik7CisKKyAgICBjb25zdCBjaGFyKiBkaXNwbGF5RXh0ZW5zaW9ucyA9IEVHTF9R
dWVyeVN0cmluZyhtX2Rpc3BsYXlPYmosIEVHTF9FWFRFTlNJT05TKTsKKyAgICBMT0coV2ViR0ws
ICJFeHRlbnNpb25zOiAlcyIsIGRpc3BsYXlFeHRlbnNpb25zKTsKKworICAgIEVHTGludCBjb25m
aWdBdHRyaWJ1dGVzW10gPSB7CisgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVO
R0xfRVMyX0JJVCwKKyAgICAgICAgRUdMX1JFRF9TSVpFLCA4LAorICAgICAgICBFR0xfR1JFRU5f
U0laRSwgOCwKKyAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICAgICAgRUdMX0FMUEhBX1NJ
WkUsIDgsCisgICAgICAgIEVHTF9ERVBUSF9TSVpFLCAwLAorICAgICAgICBFR0xfU1RFTkNJTF9T
SVpFLCAwLAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdMaW50IG51bWJlckNvbmZp
Z3NSZXR1cm5lZCA9IDA7CisgICAgRUdMX0Nob29zZUNvbmZpZyhtX2Rpc3BsYXlPYmosIGNvbmZp
Z0F0dHJpYnV0ZXMsICZtX2NvbmZpZ09iaiwgMSwgJm51bWJlckNvbmZpZ3NSZXR1cm5lZCk7Cisg
ICAgaWYgKG51bWJlckNvbmZpZ3NSZXR1cm5lZCAhPSAxKSB7CisgICAgICAgIExPRyhXZWJHTCwg
IkVHTENvbmZpZyBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgTE9HKFdlYkdMLCAiR290IEVHTENvbmZpZyIpOworCisgICAgRUdMX0Jp
bmRBUEkoRUdMX09QRU5HTF9FU19BUEkpOworICAgIGlmIChFR0xfR2V0RXJyb3IoKSAhPSBFR0xf
U1VDQ0VTUykgeworICAgICAgICBMT0coV2ViR0wsICJVbmFibGUgdG8gYmluZCB0byBPUEVOR0xf
RVNfQVBJIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBWZWN0b3I8RUdM
aW50PiBlZ2xDb250ZXh0QXR0cmlidXRlczsKKyAgICBpZiAobV9pc0ZvcldlYkdMMikgeworICAg
ICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJ
T04pOworICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoMyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVO
VF9WRVJTSU9OKTsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKDIpOworICAg
ICAgICAvLyBBTkdMRSB3aWxsIHVwZ3JhZGUgdGhlIGNvbnRleHQgdG8gRVMzIGF1dG9tYXRpY2Fs
bHkgdW5sZXNzIHRoaXMgaXMgc3BlY2lmaWVkLgorICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRl
cy5hcHBlbmQoRUdMX0NPTlRFWFRfT1BFTkdMX0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFKTsK
KyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9GQUxTRSk7CisgICAgfQor
ICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJ
QklMSVRZX0FOR0xFKTsKKyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUp
OworICAgIC8vIFdlYkdMIHJlcXVpcmVzIHRoYXQgYWxsIHJlc291cmNlcyBhcmUgY2xlYXJlZCBh
dCBjcmVhdGlvbi4KKyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1JPQlVTVF9S
RVNPVVJDRV9JTklUSUFMSVpBVElPTl9BTkdMRSk7CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMu
YXBwZW5kKEVHTF9UUlVFKTsKKyAgICAvLyBXZWJHTCBkb2Vzbid0IGFsbG93IGNsaWVudCBhcnJh
eXMuCisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9B
UlJBWVNfRU5BQkxFRF9BTkdMRSk7CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVH
TF9GQUxTRSk7CisgICAgLy8gV2ViR0wgZG9lc24ndCBhbGxvdyBpbXBsaWNpdCBjcmVhdGlvbiBv
ZiBvYmplY3RzIG9uIGJpbmQuCisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9D
T05URVhUX0JJTkRfR0VORVJBVEVTX1JFU09VUkNFX0NIUk9NSVVNKTsKKyAgICBlZ2xDb250ZXh0
QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZBTFNFKTsKKworICAgIGlmIChzdHJzdHIoZGlzcGxheUV4
dGVuc2lvbnMsICJFR0xfQU5HTEVfcG93ZXJfcHJlZmVyZW5jZSIpKSB7CisgICAgICAgIGVnbENv
bnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUE9XRVJfUFJFRkVSRU5DRV9BTkdMRSk7CisgICAg
ICAgIC8vIEVHTF9MT1dfUE9XRVJfQU5HTEUgaXMgdGhlIGRlZmF1bHQuIENoYW5nZSB0bworICAg
ICAgICAvLyBFR0xfSElHSF9QT1dFUl9BTkdMRSBpZiBkZXNpcmVkLgorICAgICAgICBlZ2xDb250
ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0xPV19QT1dFUl9BTkdMRSk7CisgICAgfQorICAgIGVn
bENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CisKKyAgICBtX2NvbnRleHRPYmog
PSBFR0xfQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29uZmlnT2JqLCBFR0xfTk9fQ09O
VEVYVCwgZWdsQ29udGV4dEF0dHJpYnV0ZXMuZGF0YSgpKTsKKyAgICBpZiAobV9jb250ZXh0T2Jq
ID09IEVHTF9OT19DT05URVhUKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkVHTENvbnRleHQgSW5p
dGlhbGl6YXRpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiQU5HTEUg
bWFrZUNvbnRleHRDdXJyZW50IGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMR0JNOjpwbGF0Zm9ybUluaXRpYWxpemUoKQorewor
ICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVT
RUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisKKyAgICAvLyBXZSByZXF1aXJlIHRoaXMgZXh0ZW5zaW9u
IHRvIHJlbmRlciBpbnRvIHRoZSBkbWFidWYtYmFja2VkIEVHTEltYWdlLgorICAgIFJFTEVBU0Vf
QVNTRVJUKHN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlIl9zKSk7CisgICAgR0xf
UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJHTF9PRVNfRUdMX2ltYWdlIik7CisKKyAgICB2YWxpZGF0
ZUF0dHJpYnV0ZXMoKTsKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygp
OyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAgICBHTGVu
dW0gdGV4dHVyZVRhcmdldCA9IGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisgICAgLy8g
Q3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50by4KKyAgICBHTF9HZW5UZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKKyAgICBHTF9CaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUp
OworICAgIEdMX1RleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOworICAgIEdMX1RleFBhcmFtZXRlcmYodGV4dHVyZVRhcmdldCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIEdMX1RleFBhcmFtZXRlcmkodGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIEdM
X1RleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgIEdMX0JpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOworCisgICAg
Ly8gQ3JlYXRlIGFuIEZCTy4KKyAgICBHTF9HZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyAg
ICBHTF9CaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKworICAgIC8vIENy
ZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8g
PT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykg
eworICAgICAgICBHTF9HZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAg
ICAgICBHTF9CaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICBtX3N0YXRlLmJvdW5kRHJhd0ZCTyA9IG1fc3RhdGUuYm91bmRSZWFkRkJPID0g
bV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgR0xfR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgR0xfR2VuUmVuZGVyYnVmZmVycygxLCAmbV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
QmluZCBjYW52YXMgRkJPLgorICAgICAgICBHTF9CaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIG1fZmJvKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPSBtX3N0YXRlLmJvdW5k
UmVhZEZCTyA9IG1fZmJvOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJp
YnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBHTF9HZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7CisgICAgfQorCisgICAgR0xfQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsK
KyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1Jbml0aWFsaXplKCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xHQk06OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAg
ICBBU1NFUlQoIW1fbGF5ZXJDb21wb3NpdGVkKTsKKworICAgIGlmIChjb250ZXh0QXR0cmlidXRl
cygpLmFudGlhbGlhcykKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgp
OworCisgICAgR0xfQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAg
R0xfRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpLCBtX3RleHR1cmUsIDApOworICAgIEdM
X0ZsdXNoKCk7CisKKyAgICBpZiAobV9zdGF0ZS5ib3VuZERyYXdGQk8gIT0gbV9mYm8pCisgICAg
ICAgIEdMX0JpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTEdCTTo6cmVz
aGFwZURpc3BsYXlCdWZmZXJCYWNraW5nKCkKK3sKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0
dHJpYnV0ZXMoKTsKKyAgICBjb25zdCBhdXRvIHNpemUgPSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVy
U2l6ZSgpOworICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBjb25zdCBp
bnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBHTHVpbnQgY29sb3JGb3JtYXQgPSBhdHRy
cy5hbHBoYSA/IEdMX1JHQkEgOiBHTF9SR0I7CisgICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBk
cmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOworICAgIEdMdWludCBpbnRlcm5hbENvbG9yRm9y
bWF0ID0gdGV4dHVyZVRhcmdldCA9PSBHTF9URVhUVVJFXzJEID8gY29sb3JGb3JtYXQgOiBtX2lu
dGVybmFsQ29sb3JGb3JtYXQ7CisgICAgU2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nIHJlc3Rv
cmVCaW5kaW5nKGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0
KHRleHR1cmVUYXJnZXQpLCB0ZXh0dXJlVGFyZ2V0LCB0ZXh0dXJlVGFyZ2V0ICE9IFRFWFRVUkVf
UkVDVEFOR0xFX0FSQik7CisKKyAgICBtX3N3YXBjaGFpbiA9IFN3YXBjaGFpbihwbGF0Zm9ybURp
c3BsYXkoKSk7CisKKyAgICBHTF9CaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUp
OworICAgIEdMX1RleEltYWdlMkQodGV4dHVyZVRhcmdldCwgMCwgaW50ZXJuYWxDb2xvckZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwor
ICAgIEdMX0ZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRB
Q0hNRU5UMCwgdGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlLCAwKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitHcmFwaGljc0NvbnRleHRHTEdCTTo6U3dhcGNoYWluOjpTd2FwY2hhaW4oR0NHTERp
c3BsYXkgcGxhdGZvcm1EaXNwbGF5KQorICAgIDogcGxhdGZvcm1EaXNwbGF5KHBsYXRmb3JtRGlz
cGxheSkKKyAgICAsIHN3YXBjaGFpbihhZG9wdFJlZihuZXcgR0JNQnVmZmVyU3dhcGNoYWluKEdC
TUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyU3dhcGNoYWluU2l6ZTo6Rm91cikpKQoreyB9CisKK0dy
YXBoaWNzQ29udGV4dEdMR0JNOjpTd2FwY2hhaW46On5Td2FwY2hhaW4oKQoreworICAgIGZvciAo
RUdMSW1hZ2VLSFIgaW1hZ2UgOiBpbWFnZXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGltYWdl
ICE9IEVHTF9OT19JTUFHRV9LSFIpCisgICAgICAgICAgICBFR0xfRGVzdHJveUltYWdlS0hSKHBs
YXRmb3JtRGlzcGxheSwgaW1hZ2UpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSAmJiBVU0UoTElCR0JNKSAmJiBVU0UoQU5HTEUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhp
Y3NDb250ZXh0R0xHQk0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9H
cmFwaGljc0NvbnRleHRHTEdCTS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1M2YzODNkN2ZmZWFkYmUxMDQ0OWVk
NWMyZTdmNjA4MjY1ZDc4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhpY3NDb250ZXh0R0xHQk0uaApAQCAtMCwwICsxLDEwMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
Q29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoTElCR0JNKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNs
dWRlICJHQk1CdWZmZXJTd2FwY2hhaW4uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKwordHlwZWRlZiB2b2lkICpFR0xJbWFn
ZUtIUjsKKworI2lmIFVTRShOSUNPU0lBKQorbmFtZXNwYWNlIE5pY29zaWEgeworY2xhc3MgR0NH
TEFOR0xFTGF5ZXI7Cit9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
cmFwaGljc0NvbnRleHRHTEdCTSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTEFOR0xFIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMR0JNPiBjcmVhdGUoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOworICAgIHZpcnR1YWwgfkdyYXBo
aWNzQ29udGV4dEdMR0JNKCk7CisKKyAgICAvLyBHcmFwaGljc0NvbnRleHRHTCBvdmVycmlkZXMK
KyAgICBSZWZQdHI8R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiBsYXllckNv
bnRlbnRzRGlzcGxheURlbGVnYXRlKCkgb3ZlcnJpZGU7CisKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQorICAgIFJlZlB0cjxWaWRlb0ZyYW1lPiBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9WaWRl
b0ZyYW1lKCkgb3ZlcnJpZGU7CisjZW5kaWYKKyNpZiBFTkFCTEUoVklERU8pCisgICAgYm9vbCBj
b3B5VGV4dHVyZUZyb21NZWRpYShNZWRpYVBsYXllciYsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVy
ZSwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgZmxpcFkpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2b2lkIHNldENvbnRleHRWaXNp
YmlsaXR5KGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgcHJlcGFyZUZvckRpc3BsYXkoKSBvdmVy
cmlkZTsKKworICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUgb3ZlcnJpZGVzCisgICAgYm9v
bCBwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9y
bUluaXRpYWxpemUoKSBvdmVycmlkZTsKKworICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKSBvdmVy
cmlkZTsKKyAgICBib29sIHJlc2hhcGVEaXNwbGF5QnVmZmVyQmFja2luZygpIG92ZXJyaWRlOwor
CisgICAgc3RydWN0IFN3YXBjaGFpbiB7CisgICAgICAgIFN3YXBjaGFpbigpID0gZGVmYXVsdDsK
KyAgICAgICAgU3dhcGNoYWluKEdDR0xEaXNwbGF5KTsKKyAgICAgICAgflN3YXBjaGFpbigpOwor
CisgICAgICAgIEdDR0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSB7IG51bGxwdHIgfTsKKyAgICAg
ICAgUmVmUHRyPEdCTUJ1ZmZlclN3YXBjaGFpbj4gc3dhcGNoYWluOworICAgICAgICBSZWZQdHI8
R0JNQnVmZmVyU3dhcGNoYWluOjpCdWZmZXI+IGRyYXdCTzsKKyAgICAgICAgUmVmUHRyPEdCTUJ1
ZmZlclN3YXBjaGFpbjo6QnVmZmVyPiBkaXNwbGF5Qk87CisKKyAgICAgICAgLy8gQ2FjaGUgZm9y
IEVHTEltYWdlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgYnVmZmVycyBvcmlnaW5hdGlu
ZyBmcm9tIHRoZSBzd2FwY2hhaW4uCisgICAgICAgIC8vIFRoZSBzd2FwY2hhaW4gaXMgcmVnZW5l
cmF0ZWQgKGFuZCB0aGVzZSBFR0xJbWFnZSBvYmplY3RzIGRlc3Ryb3llZCkgdXBvbiBlYWNoIGJ1
ZmZlciByZXNoYXBpbmcsCisgICAgICAgIC8vIHNvIHdlIHNob3VsZCBiZSBmaW5lIHdpdGhvdXQg
bWFuYWdpbmcgc3RhbGUgYnVmZmVycyBhbmQgY29ycmVzcG9uZGluZyBFR0xJbWFnZXMgKHdoaWNo
IHNob3VsZG4ndCBvY2N1ciBhbnl3YXkpLgorICAgICAgICBIYXNoTWFwPHVpbnQzMl90LCBFR0xJ
bWFnZUtIUiwgV1RGOjpEZWZhdWx0SGFzaDx1aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBpbWFnZXM7CisgICAgfTsKKworICAgIFN3YXBjaGFp
biYgc3dhcGNoYWluKCkgeyByZXR1cm4gbV9zd2FwY2hhaW47IH0KKworcHJvdGVjdGVkOgorICAg
IEdyYXBoaWNzQ29udGV4dEdMR0JNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyYmKTsKKworcHJpdmF0ZToKKyAgICBTd2FwY2hhaW4gbV9zd2FwY2hhaW47CisKKyNpZiBVU0Uo
TklDT1NJQSkKKyAgICBmcmllbmQgY2xhc3MgTmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI7CisjZW5k
aWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkgJiYgVVNFKExJQkdCTSkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nYm0vR3JhcGhpY3NDb250
ZXh0R0xHQk1UZXh0dXJlTWFwcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjJiZmYxZGUzZDE0MmNmOTk0
YzRjY2Q1Njg4ZjcwNDQxNmU0ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlci5j
cHAKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIyIElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEdCTVRl
eHR1cmVNYXBwZXIuaCIKKworI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
KSAmJiBVU0UoTElCR0JNKSAmJiBVU0UoQU5HTEUpCisKKyNpbmNsdWRlICJOaWNvc2lhR0NHTEFO
R0xFTGF5ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMPiBjcmVhdGVX
ZWJQcm9jZXNzR3JhcGhpY3NDb250ZXh0R0woY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzJiBhdHRyaWJ1dGVzKQoreworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTEdCTVRleHR1
cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMoYXR0cmlidXRlcykp
OworfQorCitSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyPiBHcmFwaGlj
c0NvbnRleHRHTEdCTVRleHR1cmVNYXBwZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMmJiBhdHRyaWJ1dGVzKQoreworICAgIGF1dG8gY29udGV4dCA9IGFkb3B0UmVmKCpuZXcg
R3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyKFdURk1vdmUoYXR0cmlidXRlcykpKTsK
KyAgICBpZiAoIWNvbnRleHQtPmluaXRpYWxpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1h
cHBlcjo6R3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTEdCTShXVEZN
b3ZlKGF0dHJpYnV0ZXMpKQoreyB9CisKK0dyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBl
cjo6fkdyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlcigpID0gZGVmYXVsdDsKKworUmVm
UHRyPEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gR3JhcGhpY3NDb250ZXh0
R0xHQk1UZXh0dXJlTWFwcGVyOjpsYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCkKK3sKKyAg
ICByZXR1cm4gbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmNvcHlSZWYoKTsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTEdCTVRleHR1cmVNYXBwZXI6OnBsYXRmb3JtSW5pdGlhbGl6
ZSgpCit7CisgICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xBTkdM
RUxheWVyPigqdGhpcyk7CisgICAgbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlID0gUGxh
dGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZTo6Y3JlYXRlKCZtX25pY29zaWFMYXllci0+Y29udGVu
dExheWVyKCkpOworCisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMR0JNOjpwbGF0Zm9ybUlu
aXRpYWxpemUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFVTRShMSUJHQk0pICYmIFVTRShB
TkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dibS9H
cmFwaGljc0NvbnRleHRHTEdCTVRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dibS9HcmFwaGljc0NvbnRleHRHTEdCTVRleHR1cmVNYXBwZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yMWUyZWMyZTEzZTRhN2MxMDM1NDdlZThkNDA3M2E0NGFhY2JmNGRiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2JtL0dyYXBoaWNz
Q29udGV4dEdMR0JNVGV4dHVyZU1hcHBlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykg
MjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBVU0UoTElCR0JNKSAmJiBVU0UoQU5HTEUp
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEdCTS5oIgorI2luY2x1ZGUgPG1lbW9yeT4K
KworbmFtZXNwYWNlIE5pY29zaWEgeworY2xhc3MgR0NHTEFOR0xFTGF5ZXI7Cit9CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xHQk1UZXh0dXJlTWFwcGVy
IGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMR0JNIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMR0JNVGV4dHVyZU1hcHBlcj4gY3JlYXRlKEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyYmKTsKKyAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRH
TEdCTVRleHR1cmVNYXBwZXIoKTsKKworICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMIG92ZXJyaWRl
cworICAgIFJlZlB0cjxHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+IGxheWVy
Q29udGVudHNEaXNwbGF5RGVsZWdhdGUoKSBmaW5hbDsKKworICAgIC8vIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEUgb3ZlcnJpZGVzCisgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBmaW5hbDsK
KworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHRHTEdCTVRleHR1cmVNYXBwZXIoR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPE5pY29zaWE6
OkdDR0xBTkdMRUxheWVyPiBtX25pY29zaWFMYXllcjsKKyAgICBSZWZQdHI8R3JhcGhpY3NMYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
ICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgVVNFKExJQkdCTSkgJiYgVVNFKEFOR0xFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAv
Tmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAKaW5kZXggZjhlYzRi
Y2Y0NTA4NzYzNDAwODJiM2VkZGQ1ZGU3YWEwOTRjMzkyZS4uNTdiMjQyZjNmZWNmOWUxYjAzOGNh
M2YyMzBjYTk4ZTNiMTI5NmE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NH
TEFOR0xFTGF5ZXIuY3BwCkBAIC0yOSw5ICsyOSw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTmljb3NpYUdDR0xBTkdMRUxheWVyLmgiCiAKLSNpZiBVU0UoTklDT1NJQSkgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpICYmIFVTRShMSUJHQk0pICYmIFVTRShBTkdMRSkKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xH
Qk0uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKQEAgLTU0LDcgKzU0LDggQEAgdm9pZCBHQ0dMQU5H
TEVMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
RE1BQlVGKQogICAgIGlmIChpczxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5RE1BQnVm
Pihwcm94eSkpIHsKLSAgICAgICAgYXV0byBibyA9IFdURk1vdmUobV9jb250ZXh0Lm1fc3dhcGNo
YWluLmRpc3BsYXlCTyk7CisgICAgICAgIGF1dG8mIHN3YXBjaGFpbiA9IG1fY29udGV4dC5zd2Fw
Y2hhaW4oKTsKKyAgICAgICAgYXV0byBibyA9IFdURk1vdmUoc3dhcGNoYWluLmRpc3BsYXlCTyk7
CiAgICAgICAgIGlmIChibykgewogICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7IHByb3h5Lmxv
Y2soKSB9OwogCkBAIC02Myw3ICs2NCw3IEBAIHZvaWQgR0NHTEFOR0xFTGF5ZXI6OnN3YXBCdWZm
ZXJzSWZOZWVkZWQoKQogICAgICAgICAgICAgICAgIGZsYWdzIHw9IFRleHR1cmVNYXBwZXJHTDo6
U2hvdWxkQmxlbmQ7CiAKICAgICAgICAgICAgIGRvd25jYXN0PFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHlETUFCdWY+KHByb3h5KS5wdXNoRE1BQnVmKAotICAgICAgICAgICAgICAgIERN
QUJ1Zk9iamVjdChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9jb250ZXh0Lm1fc3dhcGNo
YWluLnN3YXBjaGFpbi5nZXQoKSkgKyBiby0+aGFuZGxlKCkpLAorICAgICAgICAgICAgICAgIERN
QUJ1Zk9iamVjdChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3dhcGNoYWluLnN3YXBjaGFp
bi5nZXQoKSkgKyBiby0+aGFuZGxlKCkpLAogICAgICAgICAgICAgICAgIFsmXShhdXRvJiYgb2Jq
ZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiby0+Y3JlYXRlRE1BQnVmT2JqZWN0
KG9iamVjdC5oYW5kbGUpOwogICAgICAgICAgICAgICAgIH0sIGZsYWdzKTsKQEAgLTk5LDcgKzEw
MCw3IEBAIHVzaW5nIFBsYXRmb3JtTGF5ZXJQcm94eVR5cGUgPSBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5RE1BQnVmOwogdXNpbmcgUGxhdGZvcm1MYXllclByb3h5VHlwZSA9IFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlHTDsKICNlbmRpZgogCi1HQ0dMQU5HTEVMYXllcjo6
R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUmIGNvbnRl
eHQpCitHQ0dMQU5HTEVMYXllcjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xHQk0m
IGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fY29udGVudExheWVy
KE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzLCBhZG9wdFJlZigqbmV3IFBsYXRmb3Jt
TGF5ZXJQcm94eVR5cGUpKSkpCiB7CkBAIC0xMTIsNCArMTEzLDQgQEAgR0NHTEFOR0xFTGF5ZXI6
On5HQ0dMQU5HTEVMYXllcigpCiAKIH0gLy8gbmFtZXNwYWNlIE5pY29zaWEKIAotI2VuZGlmIC8v
IFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjZW5kaWYgLy8gVVNFKE5JQ09T
SUEpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgVVNFKExJQkdCTSkgJiYgVVNFKEFOR0xFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaAppbmRleCA1MzhlMDU2
NTg4YTQwYTg5MjE5NWJjMWRkOTdiZTRkZGJhYzcxNjAyLi40ZTVjNmJhY2M4M2UwODQ5YjI2ODIx
OWUzMjI1MmFlZTQ2ODI1YzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFO
R0xFTGF5ZXIuaApAQCAtMjgsNyArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIFVTRShO
SUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaWYgVVNFKE5JQ09TSUEpICYmIFVTRShU
RVhUVVJFX01BUFBFUikgJiYgVVNFKExJQkdCTSkgJiYgVVNFKEFOR0xFKQogCiAjaW5jbHVkZSAi
Tmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCiAKQEAgLTM5LDcgKzM5LDcg
QEAgdHlwZWRlZiB2b2lkICpFR0xTdXJmYWNlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBJbnRTaXplOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEU7Citj
bGFzcyBHcmFwaGljc0NvbnRleHRHTEdCTTsKIGNsYXNzIFBsYXRmb3JtRGlzcGxheTsKIH0KIApA
QCAtNDgsMTcgKzQ4LDE3IEBAIG5hbWVzcGFjZSBOaWNvc2lhIHsKIGNsYXNzIEdDR0xBTkdMRUxh
eWVyIGZpbmFsIDogcHVibGljIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEdDR0xBTkdMRUxh
eWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFJik7CisgICAg
R0NHTEFOR0xFTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xHQk0mKTsKICAgICB2aXJ0
dWFsIH5HQ0dMQU5HTEVMYXllcigpOwogCiAgICAgQ29udGVudExheWVyJiBjb250ZW50TGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMYXllcjsgfQogICAgIHZvaWQgc3dhcEJ1ZmZlcnNJ
Zk5lZWRlZCgpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlckFOR0xFJiBtX2NvbnRleHQ7CisgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xHQk0mIG1fY29udGV4dDsKICAgICBSZWY8Q29udGVudExheWVyPiBtX2NvbnRlbnRM
YXllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIE5pY29zaWEKIAotI2VuZGlmIC8vIFVTRShOSUNP
U0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjZW5kaWYgLy8gVVNFKE5JQ09TSUEpICYmIFVT
RShURVhUVVJFX01BUFBFUikgJiYgVVNFKExJQkdCTSkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKaW5kZXgg
ZmNjOGJjYzE5MTA0NDU2NWY1NDk4MDhiNWZkYzQ4YTFjMWE4NmIzMi4uMDg2MDAwMTYxYWMwZGFl
OTFhMjViODQ2MzFkM2NhMTU0NWEwYjU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVy
QU5HTEUuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBV
U0UoQU5HTEUpCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmICFV
U0UoTklDT1NJQSkgJiYgVVNFKEFOR0xFKQogCiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCiAj
aW5jbHVkZSAiQU5HTEVVdGlsaXRpZXMuaCIKQEAgLTM1LDE3ICszNSw5IEBACiAjaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlLmgi
CiAKLSNpZiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJHQk1EZXZpY2UuaCIKLSNpbmNsdWRlICJO
aWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCIKLQotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8
Z2JtLmg+Ci0jZWxzZQogI2luY2x1ZGUgIkdMQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
RGlzcGxheS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oIgot
I2VuZGlmCiAKICNpZiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2lu
Y2x1ZGUgIlZpZGVvRnJhbWVHU3RyZWFtZXIuaCIKQEAgLTkxLDc3ICs4Myw5IEBAIEdDR0xDb25m
aWcgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1Db25maWcoKSBjb25zdAogCiBib29s
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0gICAgYXV0
byBtYWRlQ3VycmVudCA9Ci0gICAgICAgIFsmXSB7Ci0gICAgICAgICAgICBpZiAoRUdMX0dldEN1
cnJlbnRDb250ZXh0KCkgPT0gbV9jb250ZXh0T2JqKQotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgcmV0dXJuICEhRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwg
RUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRPYmopOwotICAgICAgICB9
KCk7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfRE1BQlVGKQotICAgIC8vIE9uY2UgdGhlIGNv
bnRleHQgaXMgbWFkZSBjdXJyZW50LCB3ZSBoYXZlIHRvIG1hbnVhbGx5IHByb3ZpZGUgdGhlIGJh
Y2svZHJhdyBidWZmZXIuCi0gICAgLy8gSWYgbm90IHlldCBzZXQgKGR1ZSB0byByZXBldGl0aXZl
IG1ha2VDb250ZXh0Q3VycmVudCgpIGNhbGxzKSwgd2UgcmV0cmlldmUgaXQgZnJvbQotICAgIC8v
IHRoZSBzd2FwY2hhaW4uIFdlIGFsc28gaGF2ZSB0byBwcm92aWRlIChpLmUuIHJldHJpZXZlIGZy
b20gdGhlIGNhY2hlIG9yIGNyZWF0ZSkKLSAgICAvLyB0aGUgQU5HTEUteSBFR0xJbWFnZSBvYmpl
Y3QgdGhhdCB3aWxsIGJlIGJhY2tlZCBieSB0aGlzIGRtYWJ1ZiBhbmQgd2lsbCBiZSB0YXJnZXRl
ZAotICAgIC8vIGJ5IHRoZSB0ZXh0dXJlIHRoYXQncyBhY3RpbmcgYXMgdGhlIGNvbG9yIGF0dGFj
aG1lbnQgb2YgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIuCi0KLSAgICBhdXRvJiBjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUmPigqdGhpcyk7
Ci0gICAgaWYgKG1hZGVDdXJyZW50ICYmIGNvbnRleHQubV9zd2FwY2hhaW4uc3dhcGNoYWluICYm
ICFjb250ZXh0Lm1fc3dhcGNoYWluLmRyYXdCTykgewotICAgICAgICBhdXRvIHNpemUgPSBnZXRJ
bnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwotICAgICAgICBjb250ZXh0Lm1fc3dhcGNoYWluLmRy
YXdCTyA9IGNvbnRleHQubV9zd2FwY2hhaW4uc3dhcGNoYWluLT5nZXRCdWZmZXIoCi0gICAgICAg
ICAgICBHQk1CdWZmZXJTd2FwY2hhaW46OkJ1ZmZlckRlc2NyaXB0aW9uIHsKLSAgICAgICAgICAg
ICAgICAuZm9ybWF0ID0gRE1BQnVmRm9ybWF0OjpjcmVhdGUodWludDMyX3QoY29udGV4dEF0dHJp
YnV0ZXMoKS5hbHBoYSA/IERNQUJ1ZkZvcm1hdDo6Rm91ckNDOjpBUkdCODg4OCA6IERNQUJ1ZkZv
cm1hdDo6Rm91ckNDOjpYUkdCODg4OCkpLAotICAgICAgICAgICAgICAgIC53aWR0aCA9IHN0ZDo6
Y2xhbXA8dWludDMyX3Q+KHNpemUud2lkdGgoKSwgMCwgVUlOVF9NQVgpLAotICAgICAgICAgICAg
ICAgIC5oZWlnaHQgPSBzdGQ6OmNsYW1wPHVpbnQzMl90PihzaXplLmhlaWdodCgpLCAwLCBVSU5U
X01BWCksCi0gICAgICAgICAgICB9KTsKLQotICAgICAgICBHTGVudW0gdGV4dHVyZVRhcmdldCA9
IGRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7Ci0gICAgICAgIFNjb3BlZFJlc3RvcmVUZXh0
dXJlQmluZGluZyByZXN0b3JlQmluZGluZyhkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldFF1ZXJ5
Rm9yRHJhd2luZ1RhcmdldCh0ZXh0dXJlVGFyZ2V0KSwgdGV4dHVyZVRhcmdldCwgdGV4dHVyZVRh
cmdldCAhPSBURVhUVVJFX1JFQ1RBTkdMRV9BUkIpOwotCi0gICAgICAgIGF1dG8gcmVzdWx0ID0g
Y29udGV4dC5tX3N3YXBjaGFpbi5pbWFnZXMuZW5zdXJlKGNvbnRleHQubV9zd2FwY2hhaW4uZHJh
d0JPLT5oYW5kbGUoKSwKLSAgICAgICAgICAgIFsmXSB7Ci0gICAgICAgICAgICAgICAgYXV0byBk
bWFidWZPYmplY3QgPSBjb250ZXh0Lm1fc3dhcGNoYWluLmRyYXdCTy0+Y3JlYXRlRE1BQnVmT2Jq
ZWN0KDApOwotCi0gICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PEVHTGludD4g
YXR0cmlidXRlcyB7Ci0gICAgICAgICAgICAgICAgICAgIEVHTF9XSURUSCwgRUdMaW50KGRtYWJ1
Zk9iamVjdC5mb3JtYXQucGxhbmVXaWR0aCgwLCBkbWFidWZPYmplY3Qud2lkdGgpKSwKLSAgICAg
ICAgICAgICAgICAgICAgRUdMX0hFSUdIVCwgRUdMaW50KGRtYWJ1Zk9iamVjdC5mb3JtYXQucGxh
bmVIZWlnaHQoMCwgZG1hYnVmT2JqZWN0LmhlaWdodCkpLAotICAgICAgICAgICAgICAgICAgICBF
R0xfTElOVVhfRFJNX0ZPVVJDQ19FWFQsIHN0YXRpY19jYXN0PEVHTGludD4oZG1hYnVmT2JqZWN0
LmZvcm1hdC5wbGFuZXNbMF0uZm91cmNjKSwKLSAgICAgICAgICAgICAgICAgICAgRUdMX0RNQV9C
VUZfUExBTkUwX0ZEX0VYVCwgZG1hYnVmT2JqZWN0LmZkWzBdLnZhbHVlKCksCi0gICAgICAgICAg
ICAgICAgICAgIEVHTF9ETUFfQlVGX1BMQU5FMF9QSVRDSF9FWFQsIHN0YXRpY19jYXN0PEVHTGlu
dD4oZG1hYnVmT2JqZWN0LnN0cmlkZVswXSksCi0gICAgICAgICAgICAgICAgICAgIEVHTF9ETUFf
QlVGX1BMQU5FMF9PRkZTRVRfRVhULCAwLAotICAgICAgICAgICAgICAgICAgICBFR0xfTk9ORSwK
LSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQ3JlYXRlSW1h
Z2VLSFIoY29udGV4dC5tX3N3YXBjaGFpbi5wbGF0Zm9ybURpc3BsYXksIEVHTF9OT19DT05URVhU
LCBFR0xfTElOVVhfRE1BX0JVRl9FWFQsIChFR0xDbGllbnRCdWZmZXIpbnVsbHB0ciwgc3RkOjpk
YXRhKGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIEdMX0JpbmRUZXh0
dXJlKHRleHR1cmVUYXJnZXQsIG1fdGV4dHVyZSk7Ci0gICAgICAgIEdMX0VHTEltYWdlVGFyZ2V0
VGV4dHVyZTJET0VTKHRleHR1cmVUYXJnZXQsIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwotCi0g
ICAgICAgIC8vIElmIGp1c3QgY3JlYXRlZCwgdGhlIGRtYWJ1ZiBoYXMgdG8gYmUgY2xlYXJlZCB0
byBwcm92aWRlIGEgemVyb2VkLW91dCBidWZmZXIuCi0gICAgICAgIC8vIEN1cnJlbnQgY29sb3It
Y2xlYXIgYW5kIGZyYW1lYnVmZmVyIHN0YXRlIGhhcyB0byBiZSBwcmVzZXJ2ZWQgYW5kIHJlLWVz
dGFibGlzaGVkIGFmdGVyIHRoaXMuCi0gICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewot
ICAgICAgICAgICAgR0NHTHVpbnQgYm91bmRGQk8geyAwIH07Ci0gICAgICAgICAgICBHTF9HZXRJ
bnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCByZWludGVycHJldF9jYXN0PEdDR0xpbnQq
PigmYm91bmRGQk8pKTsKLQotICAgICAgICAgICAgR0NHTHVpbnQgdGFyZ2V0RkJPID0gY29udGV4
dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm87Ci0gICAg
ICAgICAgICBpZiAodGFyZ2V0RkJPICE9IGJvdW5kRkJPKQotICAgICAgICAgICAgICAgIEdMX0Jp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgdGFyZ2V0RkJPKTsKLQotICAgICAgICAgICAg
c3RkOjphcnJheTxmbG9hdCwgND4gY2xlYXJDb2xvciB7IDAsIDAsIDAsIDAgfTsKLSAgICAgICAg
ICAgIEdMX0dldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xvci5kYXRhKCkp
OwotCi0gICAgICAgICAgICBHTF9DbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgICAgICAgICAg
R0xfQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0KLSAgICAgICAgICAgIEdMX0NsZWFyQ29s
b3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xv
clszXSk7Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXRGQk8gIT0gYm91bmRGQk8pCi0gICAgICAg
ICAgICAgICAgR0xfQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZCTyk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBtYWRlQ3VycmVudDsKKyAgICBp
ZiAoRUdMX0dldEN1cnJlbnRDb250ZXh0KCkgPT0gbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gISFFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xf
Tk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIG1fY29udGV4dE9iaik7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6Y2hlY2tHUFVTdGF0dXMoKQpAQCAtMjAwLDE0ICsxMjQsMTIg
QEAgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEU6On5HcmFwaGljc0NvbnRleHRH
TFRleHR1cmVNYXBwZXJBTkdMRSgpCiAgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKIAotI2lmICFVU0Uo
VEVYVFVSRV9NQVBQRVJfRE1BQlVGKQogICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQogICAg
ICAgICBHTF9EZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIGlmIChtX2ludGVybWVkaWF0ZVRleHR1cmUpCiAg
ICAgICAgIEdMX0RlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwogI2Vu
ZGlmCi0jZW5kaWYKIH0KIAogUmVmUHRyPEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxl
Z2F0ZT4gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEU6OmxheWVyQ29udGVudHNE
aXNwbGF5RGVsZWdhdGUoKQpAQCAtMzE4LDExICsyNDAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlckFOR0xFOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKICAgICB9
CiAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9OT05FKTsKIAotI2lmIFVTRShO
SUNPU0lBKQotICAgIGF1dG8gc2hhcmluZ0NvbnRleHQgPSBFR0xfTk9fQ09OVEVYVDsKLSNlbHNl
CiAgICAgYXV0byBzaGFyaW5nQ29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxh
eUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsK
LSNlbmRpZgogICAgIG1fY29udGV4dE9iaiA9IEVHTF9DcmVhdGVDb250ZXh0KG1fZGlzcGxheU9i
aiwgbV9jb25maWdPYmosIHNoYXJpbmdDb250ZXh0LCBlZ2xDb250ZXh0QXR0cmlidXRlcy5kYXRh
KCkpOwogICAgIGlmIChtX2NvbnRleHRPYmogPT0gRUdMX05PX0NPTlRFWFQpIHsKICAgICAgICAg
TE9HKFdlYkdMLCAiRUdMQ29udGV4dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CkBAIC0zMzgs
MTMgKzI1Niw4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEU6OnBs
YXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVy
ZU1hcHBlckFOR0xFOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewotI2lmIFVTRShOSUNPU0lBKQot
ICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcj4o
KnRoaXMpOwotICAgIG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSA9IFBsYXRmb3JtTGF5
ZXJEaXNwbGF5RGVsZWdhdGU6OmNyZWF0ZSgmbV9uaWNvc2lhTGF5ZXItPmNvbnRlbnRMYXllcigp
KTsKLSNlbHNlCiAgICAgbV90ZXhtYXBMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdD
R0xQbGF0Zm9ybUxheWVyPigqdGhpcyk7CiAgICAgbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVn
YXRlID0gUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZTo6Y3JlYXRlKG1fdGV4bWFwTGF5ZXIu
Z2V0KCkpOwotI2VuZGlmCiAKICAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwpAQCAtMzcwLDcgKzI4Myw2
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEU6OnBsYXRmb3JtSW5p
dGlhbGl6ZSgpCiAgICAgR0xfR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CiAgICAgR0xfQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CiAKLSNpZiAhVVNFKFRFWFRVUkVf
TUFQUEVSX0RNQUJVRikKICAgICBHTF9HZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CiAgICAgR0xfQmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CiAgICAgR0xfVGV4UGFyYW1ldGVyZih0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19G
SUxURVIsIEdMX0xJTkVBUik7CkBAIC0zODcsNyArMjk5LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXJBTkdMRTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKICAgICBHTF9UZXhQ
YXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKIAogICAgIEdMX0JpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOwotI2VuZGlmCiAj
ZW5kaWYKIAogICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KQEAgLTQxOCwxMSArMzI5
LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRTo6cHJlcGFyZVRl
eHR1cmUoKQogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykKICAgICAgICAg
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwogCi0jaWYgIVVTRShURVhUVVJFX01B
UFBFUl9ETUFCVUYpCiAgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHN0ZDo6c3dhcChtX3RleHR1
cmUsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0jZW5kaWYKICNlbmRpZgogCiAgICAgR0xfQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CkBAIC00NDgsMTUgKzM1NywxMSBA
QCBib29sIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFOjpyZXNoYXBlRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoKQogICAgIEdMdWludCBpbnRlcm5hbENvbG9yRm9ybWF0ID0gdGV4dHVy
ZVRhcmdldCA9PSBHTF9URVhUVVJFXzJEID8gY29sb3JGb3JtYXQgOiBtX2ludGVybmFsQ29sb3JG
b3JtYXQ7CiAgICAgU2NvcGVkUmVzdG9yZVRleHR1cmVCaW5kaW5nIHJlc3RvcmVCaW5kaW5nKGRy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0UXVlcnlGb3JEcmF3aW5nVGFyZ2V0KHRleHR1cmVUYXJn
ZXQpLCB0ZXh0dXJlVGFyZ2V0LCB0ZXh0dXJlVGFyZ2V0ICE9IFRFWFRVUkVfUkVDVEFOR0xFX0FS
Qik7CiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfRE1BQlVGKQotICAgIG1fc3dhcGNoYWluID0g
U3dhcGNoYWluKHBsYXRmb3JtRGlzcGxheSgpKTsKLSNlbHNlCiAgICAgR0xfQmluZFRleHR1cmUo
dGV4dHVyZVRhcmdldCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CiAgICAgR0xfVGV4SW1hZ2UyRCh0
ZXh0dXJlVGFyZ2V0LCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBj
b2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CiAjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQogICAgIEdMX0JpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1faW50ZXJtZWRpYXRl
VGV4dHVyZSk7CiAgICAgR0xfVGV4SW1hZ2UyRCh0ZXh0dXJlVGFyZ2V0LCAwLCBpbnRlcm5hbENv
bG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllU
RSwgMCk7Ci0jZW5kaWYKICNlbmRpZgogICAgIEdMX0JpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQs
IG1fdGV4dHVyZSk7CiAgICAgR0xfVGV4SW1hZ2UyRCh0ZXh0dXJlVGFyZ2V0LCAwLCBpbnRlcm5h
bENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURf
QllURSwgMCk7CkBAIC00NzIsMjcgKzM3Nyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyQU5HTEU6OnByZXBhcmVGb3JEaXNwbGF5KCkKIAogICAgIHByZXBhcmVUZXh0dXJl
KCk7CiAgICAgbWFya0xheWVyQ29tcG9zaXRlZCgpOwotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVS
X0RNQUJVRikKLSAgICBtX3N3YXBjaGFpbi5kaXNwbGF5Qk8gPSBXVEZNb3ZlKG1fc3dhcGNoYWlu
LmRyYXdCTyk7Ci0jZW5kaWYKIH0KIAotI2lmIFVTRShURVhUVVJFX01BUFBFUl9ETUFCVUYpCi1H
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRTo6U3dhcGNoYWluOjpTd2FwY2hhaW4o
R0NHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KQotICAgIDogcGxhdGZvcm1EaXNwbGF5KHBsYXRm
b3JtRGlzcGxheSkKLSAgICAsIHN3YXBjaGFpbihhZG9wdFJlZihuZXcgR0JNQnVmZmVyU3dhcGNo
YWluKEdCTUJ1ZmZlclN3YXBjaGFpbjo6QnVmZmVyU3dhcGNoYWluU2l6ZTo6Rm91cikpKQoteyB9
Ci0KLUdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFOjpTd2FwY2hhaW46On5Td2Fw
Y2hhaW4oKQotewotICAgIGZvciAoRUdMSW1hZ2VLSFIgaW1hZ2UgOiBpbWFnZXMudmFsdWVzKCkp
IHsKLSAgICAgICAgaWYgKGltYWdlICE9IEVHTF9OT19JTUFHRV9LSFIpCi0gICAgICAgICAgICBF
R0xfRGVzdHJveUltYWdlS0hSKHBsYXRmb3JtRGlzcGxheSwgaW1hZ2UpOwotICAgIH0KLX0KLSNl
bmRpZgotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
ICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgVVNFKEFOR0xFKQorI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEpICYmIFVTRShBTkdM
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xF
LmgKaW5kZXggMTU4Y2Q2YmY3NzBiMDU5NDA2M2EwZmFkZjIyMTczMGI3ZGRjZDkwZi4uYzJjNWEz
MjAxMmE5NDNiZGRjMDVhMjU0NGZiNzY4NDI1YWI1MWYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlckFOR0xFLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmgKQEAgLTI1LDI0ICsyNSwxMCBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKSAmJiBVU0UoQU5HTEUpCisjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpICYmICFVU0UoTklDT1NJQSkgJiYgVVNFKEFOR0xFKQogCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xBTkdMRS5oIgogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0RNQUJVRikKLSNpbmNs
dWRlICJHQk1CdWZmZXJTd2FwY2hhaW4uaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2Vu
ZGlmCi0KLSNpZiBVU0UoTklDT1NJQSkKLW5hbWVzcGFjZSBOaWNvc2lhIHsKLWNsYXNzIEdDR0xB
TkdMRUxheWVyOwotY2xhc3MgR0NHTExheWVyOwotfQotCi10eXBlZGVmIHZvaWQgKkVHTEltYWdl
S0hSOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVGV4dHVyZU1hcHBl
ckdDR0xQbGF0Zm9ybUxheWVyOwpAQCAtNzUsNDkgKzYxLDE2IEBAIHByaXZhdGU6CiAKICAgICBS
ZWZQdHI8R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiBtX2xheWVyQ29udGVu
dHNEaXNwbGF5RGVsZWdhdGU7CiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfRE1BQlVGKQotICAg
IHN0cnVjdCBTd2FwY2hhaW4gewotICAgICAgICBTd2FwY2hhaW4oKSA9IGRlZmF1bHQ7Ci0gICAg
ICAgIFN3YXBjaGFpbihHQ0dMRGlzcGxheSk7Ci0gICAgICAgIH5Td2FwY2hhaW4oKTsKLQotICAg
ICAgICBHQ0dMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkgeyBudWxscHRyIH07Ci0gICAgICAgIFJl
ZlB0cjxHQk1CdWZmZXJTd2FwY2hhaW4+IHN3YXBjaGFpbjsKLSAgICAgICAgUmVmUHRyPEdCTUJ1
ZmZlclN3YXBjaGFpbjo6QnVmZmVyPiBkcmF3Qk87Ci0gICAgICAgIFJlZlB0cjxHQk1CdWZmZXJT
d2FwY2hhaW46OkJ1ZmZlcj4gZGlzcGxheUJPOwotCi0gICAgICAgIC8vIENhY2hlIGZvciBFR0xJ
bWFnZSBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJ1ZmZlcnMgb3JpZ2luYXRpbmcgZnJv
bSB0aGUgc3dhcGNoYWluLgotICAgICAgICAvLyBUaGUgc3dhcGNoYWluIGlzIHJlZ2VuZXJhdGVk
IChhbmQgdGhlc2UgRUdMSW1hZ2Ugb2JqZWN0cyBkZXN0cm95ZWQpIHVwb24gZWFjaCBidWZmZXIg
cmVzaGFwaW5nLAotICAgICAgICAvLyBzbyB3ZSBzaG91bGQgYmUgZmluZSB3aXRob3V0IG1hbmFn
aW5nIHN0YWxlIGJ1ZmZlcnMgYW5kIGNvcnJlc3BvbmRpbmcgRUdMSW1hZ2VzICh3aGljaCBzaG91
bGRuJ3Qgb2NjdXIgYW55d2F5KS4KLSAgICAgICAgSGFzaE1hcDx1aW50MzJfdCwgRUdMSW1hZ2VL
SFIsIFdURjo6RGVmYXVsdEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPHVpbnQzMl90Pj4gaW1hZ2VzOwotICAgIH0gbV9zd2FwY2hhaW47Ci0jZWxzZQog
ICAgIEdDR0x1aW50IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CiAjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQogICAgIEdDR0x1aW50IG1faW50ZXJtZWRpYXRlVGV4dHVyZSB7IDAgfTsK
ICNlbmRpZgotI2VuZGlmCiAKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
Tmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPiBtX3RleG1hcExheWVy
OwotI2VuZGlmCiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfRE1BQlVGKQotICAgIC8vIFJlcXVp
cmVkIChmb3Igbm93KSBpbiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29udGV4dEN1cnJl
bnQoKQotICAgIC8vIHRvIGNvbnN0cnVjdCBhbmQgc2V0IHRoZSBkcmF3IGJ1ZmZlci1vYmplY3Qu
Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU7Ci0jZW5kaWYKLQotI2lm
IFVTRShOSUNPU0lBKQotICAgIGZyaWVuZCBjbGFzcyBOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjsK
LSAgICBmcmllbmQgY2xhc3MgTmljb3NpYTo6R0NHTExheWVyOwotI2Vsc2UKICAgICBmcmllbmQg
Y2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOwotI2VuZGlmCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmIFVTRShURVhU
VVJFX01BUFBFUikgJiYgVVNFKEFOR0xFKQorI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEpICYmIFVTRShBTkdMRSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>