<?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>211117</bug_id>
          
          <creation_ts>2020-04-27 23:34:45 -0700</creation_ts>
          <short_desc>[GTK] Rename GC3D to GCGL.</short_desc>
          <delta_ts>2020-06-15 22:39:56 -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>WebKitGTK</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="ChangSeok Oh">changseok</reporter>
          <assigned_to name="ChangSeok Oh">changseok</assigned_to>
          <cc>annulen</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1646404</commentid>
    <comment_count>0</comment_count>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2020-04-27 23:34:45 -0700</bug_when>
    <thetext>There is no more GraphicsContext3D* since r254103. It has been renamed GraphicsContextGL*. Let&apos;s rename NicosiaGC3D* and TextureMapperGC3D* accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646415</commentid>
    <comment_count>1</comment_count>
      <attachid>397818</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2020-04-28 00:51:20 -0700</bug_when>
    <thetext>Created attachment 397818
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662954</commentid>
    <comment_count>2</comment_count>
      <attachid>401971</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2020-06-15 20:16:34 -0700</bug_when>
    <thetext>Created attachment 401971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662987</commentid>
    <comment_count>3</comment_count>
      <attachid>401971</attachid>
    <who name="ChangSeok Oh">changseok</who>
    <bug_when>2020-06-15 22:21:55 -0700</bug_when>
    <thetext>Comment on attachment 401971
Patch

Thanks for r+!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662989</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-15 22:39:54 -0700</bug_when>
    <thetext>Committed r263076: &lt;https://trac.webkit.org/changeset/263076&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 401971.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397818</attachid>
            <date>2020-04-28 00:51:20 -0700</date>
            <delta_ts>2020-06-13 21:33:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211117-20200428035119.patch</filename>
            <type>text/plain</type>
            <size>62176</size>
            <attacher name="ChangSeok Oh">changseok</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmU0Y2U3ZWJhOTQzMzc5
MGE3NTAxOWVhMmM4NDkzOTM2YmI4Mjc2Mi4uZjM1ODkzODRjOGM4M2MxOTM3ZWI5ZTVlOWVmY2Ew
NTQ1MjQzODBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIwLTA0LTI4ICBDaGFu
Z1Nlb2sgT2ggIDxjaGFuZ3Nlb2tAd2Via2l0Lm9yZz4KKworICAgICAgICBbR1RLXSBSZW5hbWUg
R0MzRCB0byBHQ0dMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjExMTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0QgaGFzIGJlZW4gcmVuYW1lZCB0byBHcmFwaGljc0NvbnRl
eHRHTCBhZnRlciByMjU0MTAzIGJ1dCBzb21lIGZpbGVzCisgICAgICAgIHN0aWxsIGZvbGxvdyB0
aGUgb2xkIG5hbWUuIFRoaXMgY2hhbmdlIHJlZmxlY3RzIHRoZSBuZXcgbmFtZSB0byB0aGVtIGZv
ciBjb25zaXN0ZW5jeS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBvZiBubyBuZXcg
ZnVuY3Rpb25hbGl0aWVzLgorCisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFr
ZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NH
TEFOR0xFTGF5ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmNwcC4KKyAgICAgICAg
KE5pY29zaWE6OkdDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6OmVycm9yU3RyaW5nKToKKyAg
ICAgICAgKE5pY29zaWE6OkdDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6Omxhc3RFcnJvclN0
cmluZyk6CisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0Ojpj
cmVhdGVDb250ZXh0KToKKyAgICAgICAgKE5pY29zaWE6OkdDR0xBTkdMRUxheWVyOjpBTkdMRUNv
bnRleHQ6OkFOR0xFQ29udGV4dCk6CisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6
QU5HTEVDb250ZXh0Ojp+QU5HTEVDb250ZXh0KToKKyAgICAgICAgKE5pY29zaWE6OkdDR0xBTkdM
RUxheWVyOjpBTkdMRUNvbnRleHQ6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChOaWNv
c2lhOjpHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoTmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI6OkdDR0xBTkdMRUxheWVyKToKKyAg
ICAgICAgKE5pY29zaWE6OkdDR0xBTkdMRUxheWVyOjp+R0NHTEFOR0xFTGF5ZXIpOgorICAgICAg
ICAoTmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAg
IChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6cGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5
ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5oLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMTGF5ZXIuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdD
M0RMYXllci5jcHAuCisgICAgICAgIChOaWNvc2lhOjpHQ0dMTGF5ZXI6OkdDR0xMYXllcik6Cisg
ICAgICAgIChOaWNvc2lhOjpHQ0dMTGF5ZXI6On5HQ0dMTGF5ZXIpOgorICAgICAgICAoTmljb3Np
YTo6R0NHTExheWVyOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoTmljb3NpYTo6R0NH
TExheWVyOjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoTmljb3NpYTo6R0NHTExh
eWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmgu
CisgICAgICAgIChOaWNvc2lhOjpHQ0dMTGF5ZXI6OmNvbnRlbnRMYXllciBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNE
UGxhdGZvcm1MYXllci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6On5UZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwcm94eSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnN3YXBC
dWZmZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
QzNEUGxhdGZvcm1MYXllci5oLgorCiAyMDIwLTA0LTI3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIERvIGNvcnJlY3QgY2xpcHBpbmcgb2YgY29tcG9z
aXRlZCByZXBsYWNlZCBlbGVtZW50cyB3aXRoIGJvcmRlci1yYWRpdXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4IGZlMjY2OWM0MjM0MzM5ZjFlNDA4
MWJhOGUwMzMzZmNjOWE4NzQxODguLjQ5NTI1MzZhZWQzNGRmMzljNWRmNjBlNjM5ZDRmNTExN2Ew
ZGUzODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIu
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQpA
QCAtMTEsNyArMTEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuY3BwCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJUaWxlLmNwcAogKQpAQCAtOTAs
NyArOTAsNyBAQCBpZiAoVVNFX0NPT1JESU5BVEVEX0dSQVBISUNTKQogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQmFja2luZ1N0b3JlVGV4dHVyZU1hcHBl
ckltcGwuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFDb21wb3NpdGlvbkxheWVyVGV4dHVyZU1hcHBlckltcGwuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3Np
YUdDM0RMYXllci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAv
Tmljb3NpYUdDR0xMYXllci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90
ZXhtYXAvTmljb3NpYUltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsLmNwcAogICAgICkKICAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKQEAgLTExOCw2
ICsxMTgsNiBAQCBlbmRpZiAoKQogCiBpZiAoVVNFX0FOR0xFX1dFQkdMKQogICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3Rl
eG1hcC9OaWNvc2lhR0MzREFOR0xFTGF5ZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAKICAgICApCiBlbmRpZiAo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90
ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4N2QzMmZkNjM3M2U4YmI3OGE1OTI1NWE2NDc2MjZm
M2JjMzRlZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdD
M0RBTkdMRUxheWVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTgsIDIwMTkgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZAotICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOaWNvc2lhR0MzREFOR0xFTGF5ZXIu
aCIKLQotI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0KLSNkZWZpbmUgRUdMX0VHTF9QUk9UT1RZUEVTIDAKLS8vIFNraXAgdGhl
IGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkgcG9pbnRzIGZvciBu
b3cuCi0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKLSNkZWZpbmUgR0xfQU5HTEVf
ZXhwbGljaXRfY29udGV4dF9nbGVzMQotdHlwZWRlZiB2b2lkKiBHTGVnbENvbnRleHQ7Ci0jaW5j
bHVkZSA8QU5HTEUvZWdsLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZWdsZXh0Lmg+Ci0jaW5jbHVkZSA8
QU5HTEUvZWdsZXh0X2FuZ2xlLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2VnbC5o
PgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+Ci0jaW5j
bHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4KLSNpbmNsdWRlIDxB
TkdMRS9nbDJleHQuaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KLQotbmFtZXNw
YWNlIE5pY29zaWEgewotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY29uc3QgY2hhciog
R0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6ZXJyb3JTdHJpbmcoaW50IHN0YXR1c0NvZGUp
Ci17Ci0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoaW50KSA+PSBzaXplb2YoRUdMaW50KSwgIkVH
TGludCBtdXN0IG5vdCBiZSB3aWRlciB0aGFuIGludCIpOwotICAgIHN3aXRjaCAoc3RhdHVzQ29k
ZSkgewotI2RlZmluZSBDQVNFX1JFVFVSTl9TVFJJTkcobmFtZSkgY2FzZSBuYW1lOiByZXR1cm4g
I25hbWUKLSAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvRUdML3Nk
ay9kb2NzL21hbi9odG1sL2VnbEdldEVycm9yLnhodG1sCi0gICAgICAgIENBU0VfUkVUVVJOX1NU
UklORyhFR0xfU1VDQ0VTUyk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfTk9UX0lO
SVRJQUxJWkVEKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQUNDRVNTKTsK
LSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQUxMT0MpOwotICAgICAgICBDQVNF
X1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9BVFRSSUJVVEUpOwotICAgICAgICBDQVNFX1JFVFVSTl9T
VFJJTkcoRUdMX0JBRF9DT05URVhUKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9C
QURfQ09ORklHKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQ1VSUkVOVF9T
VVJGQUNFKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfRElTUExBWSk7Ci0g
ICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX1NVUkZBQ0UpOwotICAgICAgICBDQVNF
X1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9NQVRDSCk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklO
RyhFR0xfQkFEX1BBUkFNRVRFUik7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFE
X05BVElWRV9QSVhNQVApOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9OQVRJ
VkVfV0lORE9XKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9DT05URVhUX0xPU1Qp
OwotI3VuZGVmIENBU0VfUkVUVVJOX1NUUklORwotICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93
biBFR0wgZXJyb3IiOwotICAgIH0KLX0KLQotY29uc3QgY2hhciogR0MzREFOR0xFTGF5ZXI6OkFO
R0xFQ29udGV4dDo6bGFzdEVycm9yU3RyaW5nKCkKLXsKLSAgICByZXR1cm4gZXJyb3JTdHJpbmco
RUdMX0dldEVycm9yKCkpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8R0MzREFOR0xFTGF5ZXI6OkFO
R0xFQ29udGV4dD4gR0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6Y3JlYXRlQ29udGV4dCgp
Ci17Ci0gICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gRUdMX0dldERpc3BsYXkoRUdMX0RFRkFVTFRf
RElTUExBWSk7Ci0gICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgRUdMaW50IG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uOwot
ICAgIGlmIChFR0xfSW5pdGlhbGl6ZShkaXNwbGF5LCAmbWFqb3JWZXJzaW9uLCAmbWlub3JWZXJz
aW9uKSA9PSBFR0xfRkFMU0UpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiRUdMRGlzcGxheSBJbml0
aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAg
ICBMT0coV2ViR0wsICJBTkdMRSBpbml0aWFsaXNlZCBNYWpvcjogJWQgTWlub3I6ICVkIiwgbWFq
b3JWZXJzaW9uLCBtaW5vclZlcnNpb24pOwotCi0gICAgY29uc3QgY2hhciogZGlzcGxheUV4dGVu
c2lvbnMgPSBFR0xfUXVlcnlTdHJpbmcoZGlzcGxheSwgRUdMX0VYVEVOU0lPTlMpOwotICAgIExP
RyhXZWJHTCwgIkV4dGVuc2lvbnM6ICVzIiwgZGlzcGxheUV4dGVuc2lvbnMpOwotCi0gICAgRUdM
Q29uZmlnIGNvbmZpZzsKLSAgICBFR0xpbnQgY29uZmlnQXR0cmlidXRlc1tdID0gewotICAgICAg
ICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCi0gICAgICAgIEVHTF9S
RURfU0laRSwgOCwKLSAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgICAgIEVHTF9CTFVF
X1NJWkUsIDgsCi0gICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAotICAgICAgICBFR0xfTk9ORQot
ICAgIH07Ci0gICAgRUdMaW50IG51bWJlckNvbmZpZ3NSZXR1cm5lZCA9IDA7Ci0gICAgRUdMX0No
b29zZUNvbmZpZyhkaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzLCAmY29uZmlnLCAxLCAmbnVtYmVy
Q29uZmlnc1JldHVybmVkKTsKLSAgICBpZiAobnVtYmVyQ29uZmlnc1JldHVybmVkICE9IDEpIHsK
LSAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29uZmlnIEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIExPRyhXZWJHTCwgIkdvdCBFR0xD
b25maWciKTsKLQotICAgIEVHTF9CaW5kQVBJKEVHTF9PUEVOR0xfRVNfQVBJKTsKLSAgICBpZiAo
RUdMX0dldEVycm9yKCkgIT0gRUdMX1NVQ0NFU1MpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiVW5h
YmxlIHRvIGJpbmQgdG8gT1BFTkdMX0VTX0FQSSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBzdGQ6OnZlY3RvcjxFR0xpbnQ+IGNvbnRleHRBdHRyaWJ1dGVzOwotICAg
IGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTik7
Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKDIpOwotICAgIGNvbnRleHRBdHRyaWJ1
dGVzLnB1c2hfYmFjayhFR0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJQklMSVRZX0FOR0xFKTsKLSAg
ICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1RSVUUpOwotICAgIGNvbnRleHRBdHRy
aWJ1dGVzLnB1c2hfYmFjayhFR0xfRVhURU5TSU9OU19FTkFCTEVEX0FOR0xFKTsKLSAgICBjb250
ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1RSVUUpOwotICAgIGlmIChzdHJzdHIoZGlzcGxh
eUV4dGVuc2lvbnMsICJFR0xfQU5HTEVfcG93ZXJfcHJlZmVyZW5jZSIpKSB7Ci0gICAgICAgIGNv
bnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfUE9XRVJfUFJFRkVSRU5DRV9BTkdMRSk7Ci0g
ICAgICAgIC8vIEVHTF9MT1dfUE9XRVJfQU5HTEUgaXMgdGhlIGRlZmF1bHQuIENoYW5nZSB0bwot
ICAgICAgICAvLyBFR0xfSElHSF9QT1dFUl9BTkdMRSBpZiBkZXNpcmVkLgotICAgICAgICBjb250
ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX0xPV19QT1dFUl9BTkdMRSk7Ci0gICAgfQotICAg
IGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfTk9ORSk7Ci0KLSAgICBFR0xDb250ZXh0
IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5LCBjb25maWcsIEVHTF9OT19DT05U
RVhULCBjb250ZXh0QXR0cmlidXRlcy5kYXRhKCkpOwotICAgIGlmIChjb250ZXh0ID09IEVHTF9O
T19DT05URVhUKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVHTENvbnRleHQgSW5pdGlhbGl6YXRp
b24gZmFpbGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgTE9HKFdl
YkdMLCAiR290IEVHTENvbnRleHQiKTsKLQotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QU5H
TEVDb250ZXh0PihuZXcgQU5HTEVDb250ZXh0KGRpc3BsYXksIGNvbnRleHQsIEVHTF9OT19TVVJG
QUNFKSk7Ci19Ci0KLUdDM0RBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6OkFOR0xFQ29udGV4dChF
R0xEaXNwbGF5IGRpc3BsYXksIEVHTENvbnRleHQgY29udGV4dCwgRUdMU3VyZmFjZSBzdXJmYWNl
KQotICAgIDogbV9kaXNwbGF5KGRpc3BsYXkpCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAg
ICAsIG1fc3VyZmFjZShzdXJmYWNlKQotewotfQotCi1HQzNEQU5HTEVMYXllcjo6QU5HTEVDb250
ZXh0Ojp+QU5HTEVDb250ZXh0KCkKLXsKLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIGds
OjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgICAgICBFR0xfTWFrZUN1
cnJlbnQobV9kaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19D
T05URVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0
KTsKLSAgICB9Ci0KLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICBFR0xfRGVzdHJveVN1cmZh
Y2UobV9kaXNwbGF5LCBtX3N1cmZhY2UpOwotfQotCi1ib29sIEdDM0RBTkdMRUxheWVyOjpBTkdM
RUNvbnRleHQ6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7
Ci0KLSAgICBpZiAoRUdMX0dldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0KQotICAgICAg
ICByZXR1cm4gRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9zdXJmYWNlLCBtX3N1cmZhY2Us
IG1fY29udGV4dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0wgR0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0OwotfQotCi1HQzNEQU5HTEVMYXllcjo6R0MzREFO
R0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKLSAgICA6IEdDM0RMYXllcihjb250
ZXh0KQotewotICAgIHN3aXRjaCAoZGVzdGluYXRpb24pIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuOgotICAgICAgICBtX2FuZ2xlQ29u
dGV4dCA9IEFOR0xFQ29udGV4dDo6Y3JlYXRlQ29udGV4dCgpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbjo6RGlyZWN0bHlUb0hv
c3RXaW5kb3c6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci19Ci0KLUdDM0RBTkdMRUxheWVyOjp+R0MzREFOR0xFTGF5ZXIoKQotewotfQotCi1i
b29sIEdDM0RBTkdMRUxheWVyOjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIEFTU0VSVCht
X2FuZ2xlQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1fYW5nbGVDb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotfQotCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIEdDM0RBTkdMRUxheWVy
OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2FuZ2xlQ29udGV4dCk7
Ci0gICAgcmV0dXJuIG1fYW5nbGVDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgTmljb3NpYQotCi0jZW5kaWYgLy8gVVNFKE5JQ09TSUEpICYmIFVTRShURVhU
VVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMWYxZTU3YmU4NDdlZDQwYjZjZWI3YThm
YWUzZDc4ZTRkNTVhZGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmlj
b3NpYUdDM0RBTkdMRUxheWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTgsIDIwMTkgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZAotICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01B
UFBFUikKLQotI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgiCi0jaW5jbHVkZSAiTmljb3NpYUdDM0RMYXllci5oIgotI2luY2x1ZGUgPG1l
bW9yeT4KLQotdHlwZWRlZiB2b2lkICpFR0xDb25maWc7Ci10eXBlZGVmIHZvaWQgKkVHTENvbnRl
eHQ7Ci10eXBlZGVmIHZvaWQgKkVHTERpc3BsYXk7Ci10eXBlZGVmIHZvaWQgKkVHTFN1cmZhY2U7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBHTENvbnRleHQ7
Ci1jbGFzcyBQbGF0Zm9ybURpc3BsYXk7Ci19Ci0KLW5hbWVzcGFjZSBOaWNvc2lhIHsKLQotY2xh
c3MgR0MzREFOR0xFTGF5ZXIgZmluYWwgOiBwdWJsaWMgR0MzRExheWVyIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBjbGFzcyBBTkdMRUNvbnRleHQgewotICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBTkdMRUNvbnRleHQpOwotICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yU3RyaW5nKGludCBzdGF0dXNDb2RlKTsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGxhc3RFcnJvclN0cmluZygpOwotCi0gICAgICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250ZXh0PiBjcmVhdGVDb250ZXh0KCk7Ci0gICAg
ICAgIHZpcnR1YWwgfkFOR0xFQ29udGV4dCgpOwotCi0gICAgICAgIGJvb2wgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCi0gICAgICAgIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIEFOR0xFQ29udGV4dChFR0xEaXNwbGF5LCBFR0xDb250ZXh0
LCBFR0xTdXJmYWNlKTsKLQotICAgICAgICBFR0xEaXNwbGF5IG1fZGlzcGxheSB7IG51bGxwdHIg
fTsKLSAgICAgICAgRUdMQ29udGV4dCBtX2NvbnRleHQgeyBudWxscHRyIH07Ci0gICAgICAgIEVH
TFN1cmZhY2UgbV9zdXJmYWNlIHsgbnVsbHB0ciB9OwotICAgIH07Ci0KLSAgICBHQzNEQU5HTEVM
YXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbik7Ci0gICAgdmlydHVhbCB+R0MzREFOR0xFTGF5
ZXIoKTsKLQotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgb3ZlcnJpZGU7Ci0gICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsK
LQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250ZXh0PiBtX2FuZ2xlQ29u
dGV4dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5pY29zaWEKLQotI2VuZGlmIC8vIFVTRShOSUNP
U0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNE
TGF5ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzRjNDI2OTYxMjcxYzdi
N2ExOWQyOTZhOTQwMGVmZGMwZmFjOWFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
dGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAq
IENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5pY29zaWFHQzNETGF5ZXIu
aCIKLQotI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLSNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0jaW5j
bHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkK
LSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJHTENvbnRleHQu
aCIKLQotbmFtZXNwYWNlIE5pY29zaWEgewotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
R0MzRExheWVyOjpHQzNETGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCi0g
ICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fY29udGVudExheWVyKE5pY29zaWE6OkNv
bnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
OjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkpCi17Ci19Ci0KLUdDM0RMYXllcjo6R0MzRExheWVyKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
RGVzdGluYXRpb24gZGVzdGluYXRpb24pCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAs
IG1fY29udGVudExheWVyKE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkpCi17Ci0g
ICAgc3dpdGNoIChkZXN0aW5hdGlvbikgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46Ci0gICAgICAgIG1fZ2xDb250ZXh0ID0gR0xDb250
ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3Bs
YXlGb3JDb21wb3NpdGluZygpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1HQzNE
TGF5ZXI6On5HQzNETGF5ZXIoKQotewotICAgIGRvd25jYXN0PENvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsPihtX2NvbnRlbnRMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7Ci19
Ci0KLWJvb2wgR0MzRExheWVyOjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIEFTU0VSVCht
X2dsQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBHQzNETGF5ZXI6OnBsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2xDb250ZXh0KTsKLSAgICByZXR1cm4gbV9n
bENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotfQotCi12b2lkIEdDM0RMYXllcjo6c3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpCi17Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlm
IChtX2NvbnRleHQubGF5ZXJDb21wb3NpdGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
Y29udGV4dC5wcmVwYXJlVGV4dHVyZSgpOwotICAgIEludFNpemUgdGV4dHVyZVNpemUobV9jb250
ZXh0Lm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQubV9jdXJyZW50SGVpZ2h0KTsKLSAgICBUZXh0
dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzID0gbV9jb250ZXh0LmNvbnRleHRBdHRyaWJ1dGVzKCku
YWxwaGEgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMDsKLSNpZiBVU0UoQU5HTEUp
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUodGV4dHVyZVNpemUsIFVuYWNjZWxlcmF0ZWQpOwotICAgIGlmICghaW1hZ2VC
dWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC5wYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyhpbWFnZUJ1ZmZlci5nZXQoKSk7Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgIGlm
ICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgZmxhZ3MgfD0gVGV4dHVyZU1h
cHBlckdMOjpTaG91bGRGbGlwVGV4dHVyZTsKLSNlbmRpZgotCi0gICAgewotICAgICAgICBhdXRv
JiBwcm94eSA9IGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
PihtX2NvbnRlbnRMYXllci0+aW1wbCgpKS5wcm94eSgpOwotI2lmIFVTRShBTkdMRSkKLSAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXll
ckJ1ZmZlcjsKLSAgICAgICAgbGF5ZXJCdWZmZXIgPSBwcm94eS5nZXRBdmFpbGFibGVCdWZmZXIo
dGV4dHVyZVNpemUsIG1fY29udGV4dC5tX2ludGVybmFsQ29sb3JGb3JtYXQpOwotICAgICAgICBp
ZiAoIWxheWVyQnVmZmVyKSB7Ci0gICAgICAgICAgICBhdXRvIHRleHR1cmUgPSBCaXRtYXBUZXh0
dXJlR0w6OmNyZWF0ZShUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXM6OmdldCgpLCBmbGFn
cywgbV9jb250ZXh0Lm1faW50ZXJuYWxDb2xvckZvcm1hdCk7Ci0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxCaXRtYXBUZXh0dXJlR0wmPih0ZXh0dXJlLmdldCgpKS5zZXRQZW5kaW5nQ29udGVudHMo
V1RGTW92ZShpbWFnZSkpOwotICAgICAgICAgICAgbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihXVEZNb3ZlKHRleHR1cmUpLCBmbGFncyk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbGF5ZXJCdWZmZXItPnRleHR1cmVHTCgpLnNl
dFBlbmRpbmdDb250ZW50cyhXVEZNb3ZlKGltYWdlKSk7Ci0KLSAgICAgICAgTG9ja0hvbGRlciBo
b2xkZXIocHJveHkubG9jaygpKTsKLSAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92
ZShsYXllckJ1ZmZlcikpOwotI2Vsc2UKLSAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHku
bG9jaygpKTsKLSAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb250ZXh0Lm1fY29tcG9zaXRvclRleHR1cmUs
IHRleHR1cmVTaXplLCBmbGFncywgbV9jb250ZXh0Lm1faW50ZXJuYWxDb2xvckZvcm1hdCkpOwot
I2VuZGlmCi0gICAgfQotCi0gICAgbV9jb250ZXh0Lm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKLSNl
bmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBOaWNvc2lhCi0KLSNlbmRpZiAvLyBVU0UoTklDT1NJ
QSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXll
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2U0ZDhjN2JmYTY4NTc5YWFmNjNi
NjBhNmU3NjNkNjk2ZjAxNTQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFw
L05pY29zaWFHQzNETGF5ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwot
ICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkCi0gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhP
TERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQot
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJOaWNvc2lh
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdMQ29udGV4dDsKLX0KLQotbmFtZXNwYWNlIE5pY29z
aWEgewotCi1jbGFzcyBHQzNETGF5ZXIgOiBwdWJsaWMgQ29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw6OkNsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgR0MzRExheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7
Ci0gICAgR0MzRExheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uKTsKLQotICAgIHZpcnR1YWwg
fkdDM0RMYXllcigpOwotCi0gICAgQ29udGVudExheWVyJiBjb250ZW50TGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRMYXllcjsgfQotICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1D
b250ZXh0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlk
ZTsKLQotcHJpdmF0ZToKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgbV9j
b250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHTENvbnRleHQ+IG1fZ2xDb250
ZXh0OwotCi0gICAgUmVmPENvbnRlbnRMYXllcj4gbV9jb250ZW50TGF5ZXI7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBOaWNvc2lhCi0KLSNlbmRpZiAvLyBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDEyMDViY2E0YmMwZWMzZjMzNDIyYzBmYmUxY2NlMTdjYmUwNTU2Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAKQEAgLTAsMCArMSwyMTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHly
aWdodCAoQykgMjAxOCwgMjAxOSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5pY29zaWFHQ0dMQU5HTEVM
YXllci5oIgorCisjaWYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikKKworI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKworI2RlZmluZSBFR0xfRUdMX1BST1RPVFlQRVMgMAorLy8gU2tp
cCB0aGUgaW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMg
Zm9yIG5vdy4KKyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAorI2RlZmluZSBHTF9B
TkdMRV9leHBsaWNpdF9jb250ZXh0X2dsZXMxCit0eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsK
KyNpbmNsdWRlIDxBTkdMRS9lZ2wuaD4KKyNpbmNsdWRlIDxBTkdMRS9lZ2xleHQuaD4KKyNpbmNs
dWRlIDxBTkdMRS9lZ2xleHRfYW5nbGUuaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNf
ZWdsLmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4K
KyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgorI2luY2x1
ZGUgPEFOR0xFL2dsMmV4dC5oPgorI2luY2x1ZGUgPEFOR0xFL2dsMmV4dF9hbmdsZS5oPgorCitu
YW1lc3BhY2UgTmljb3NpYSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjb25zdCBj
aGFyKiBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjplcnJvclN0cmluZyhpbnQgc3RhdHVz
Q29kZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQpID49IHNpemVvZihFR0xpbnQp
LCAiRUdMaW50IG11c3Qgbm90IGJlIHdpZGVyIHRoYW4gaW50Iik7CisgICAgc3dpdGNoIChzdGF0
dXNDb2RlKSB7CisjZGVmaW5lIENBU0VfUkVUVVJOX1NUUklORyhuYW1lKSBjYXNlIG5hbWU6IHJl
dHVybiAjbmFtZQorICAgICAgICAvLyBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9F
R0wvc2RrL2RvY3MvbWFuL2h0bWwvZWdsR2V0RXJyb3IueGh0bWwKKyAgICAgICAgQ0FTRV9SRVRV
Uk5fU1RSSU5HKEVHTF9TVUNDRVNTKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9O
T1RfSU5JVElBTElaRUQpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9BQ0NF
U1MpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9BTExPQyk7CisgICAgICAg
IENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0FUVFJJQlVURSk7CisgICAgICAgIENBU0VfUkVU
VVJOX1NUUklORyhFR0xfQkFEX0NPTlRFWFQpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkco
RUdMX0JBRF9DT05GSUcpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9DVVJS
RU5UX1NVUkZBQ0UpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9ESVNQTEFZ
KTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfU1VSRkFDRSk7CisgICAgICAg
IENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX01BVENIKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5f
U1RSSU5HKEVHTF9CQURfUEFSQU1FVEVSKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVH
TF9CQURfTkFUSVZFX1BJWE1BUCk7CisgICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFE
X05BVElWRV9XSU5ET1cpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0NPTlRFWFRf
TE9TVCk7CisjdW5kZWYgQ0FTRV9SRVRVUk5fU1RSSU5HCisgICAgZGVmYXVsdDogcmV0dXJuICJV
bmtub3duIEVHTCBlcnJvciI7CisgICAgfQorfQorCitjb25zdCBjaGFyKiBHQ0dMQU5HTEVMYXll
cjo6QU5HTEVDb250ZXh0OjpsYXN0RXJyb3JTdHJpbmcoKQoreworICAgIHJldHVybiBlcnJvclN0
cmluZyhFR0xfR2V0RXJyb3IoKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHQ0dMQU5HTEVMYXll
cjo6QU5HTEVDb250ZXh0PiBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpjcmVhdGVDb250
ZXh0KCkKK3sKKyAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBFR0xfR2V0RGlzcGxheShFR0xfREVG
QVVMVF9ESVNQTEFZKTsKKyAgICBpZiAoZGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBFR0xpbnQgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNp
b247CisgICAgaWYgKEVHTF9Jbml0aWFsaXplKGRpc3BsYXksICZtYWpvclZlcnNpb24sICZtaW5v
clZlcnNpb24pID09IEVHTF9GQUxTRSkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xEaXNwbGF5
IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIExPRyhXZWJHTCwgIkFOR0xFIGluaXRpYWxpc2VkIE1ham9yOiAlZCBNaW5vcjogJWQi
LCBtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbik7CisKKyAgICBjb25zdCBjaGFyKiBkaXNwbGF5
RXh0ZW5zaW9ucyA9IEVHTF9RdWVyeVN0cmluZyhkaXNwbGF5LCBFR0xfRVhURU5TSU9OUyk7Cisg
ICAgTE9HKFdlYkdMLCAiRXh0ZW5zaW9uczogJXMiLCBkaXNwbGF5RXh0ZW5zaW9ucyk7CisKKyAg
ICBFR0xDb25maWcgY29uZmlnOworICAgIEVHTGludCBjb25maWdBdHRyaWJ1dGVzW10gPSB7Cisg
ICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKKyAgICAgICAg
RUdMX1JFRF9TSVpFLCA4LAorICAgICAgICBFR0xfR1JFRU5fU0laRSwgOCwKKyAgICAgICAgRUdM
X0JMVUVfU0laRSwgOCwKKyAgICAgICAgRUdMX0FMUEhBX1NJWkUsIDgsCisgICAgICAgIEVHTF9O
T05FCisgICAgfTsKKyAgICBFR0xpbnQgbnVtYmVyQ29uZmlnc1JldHVybmVkID0gMDsKKyAgICBF
R0xfQ2hvb3NlQ29uZmlnKGRpc3BsYXksIGNvbmZpZ0F0dHJpYnV0ZXMsICZjb25maWcsIDEsICZu
dW1iZXJDb25maWdzUmV0dXJuZWQpOworICAgIGlmIChudW1iZXJDb25maWdzUmV0dXJuZWQgIT0g
MSkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xDb25maWcgSW5pdGlhbGl6YXRpb24gZmFpbGVk
LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgTE9HKFdlYkdMLCAiR290
IEVHTENvbmZpZyIpOworCisgICAgRUdMX0JpbmRBUEkoRUdMX09QRU5HTF9FU19BUEkpOworICAg
IGlmIChFR0xfR2V0RXJyb3IoKSAhPSBFR0xfU1VDQ0VTUykgeworICAgICAgICBMT0coV2ViR0ws
ICJVbmFibGUgdG8gYmluZCB0byBPUEVOR0xfRVNfQVBJIik7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPEVHTGludD4gY29udGV4dEF0dHJpYnV0ZXM7
CisgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9DT05URVhUX0NMSUVOVF9WRVJT
SU9OKTsKKyAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soMik7CisgICAgY29udGV4dEF0
dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9DT05URVhUX1dFQkdMX0NPTVBBVElCSUxJVFlfQU5HTEUp
OworICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfVFJVRSk7CisgICAgY29udGV4
dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9FWFRFTlNJT05TX0VOQUJMRURfQU5HTEUpOworICAg
IGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfVFJVRSk7CisgICAgaWYgKHN0cnN0cihk
aXNwbGF5RXh0ZW5zaW9ucywgIkVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIikpIHsKKyAgICAg
ICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FOR0xF
KTsKKyAgICAgICAgLy8gRUdMX0xPV19QT1dFUl9BTkdMRSBpcyB0aGUgZGVmYXVsdC4gQ2hhbmdl
IHRvCisgICAgICAgIC8vIEVHTF9ISUdIX1BPV0VSX0FOR0xFIGlmIGRlc2lyZWQuCisgICAgICAg
IGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfTE9XX1BPV0VSX0FOR0xFKTsKKyAgICB9
CisgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9OT05FKTsKKworICAgIEVHTENv
bnRleHQgY29udGV4dCA9IEVHTF9DcmVhdGVDb250ZXh0KGRpc3BsYXksIGNvbmZpZywgRUdMX05P
X0NPTlRFWFQsIGNvbnRleHRBdHRyaWJ1dGVzLmRhdGEoKSk7CisgICAgaWYgKGNvbnRleHQgPT0g
RUdMX05PX0NPTlRFWFQpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29udGV4dCBJbml0aWFs
aXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBM
T0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxBTkdMRUNvbnRleHQ+KG5ldyBBTkdMRUNvbnRleHQoZGlzcGxheSwgY29udGV4dCwgRUdMX05P
X1NVUkZBQ0UpKTsKK30KKworR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6QU5HTEVDb250
ZXh0KEVHTERpc3BsYXkgZGlzcGxheSwgRUdMQ29udGV4dCBjb250ZXh0LCBFR0xTdXJmYWNlIHN1
cmZhY2UpCisgICAgOiBtX2Rpc3BsYXkoZGlzcGxheSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0
KQorICAgICwgbV9zdXJmYWNlKHN1cmZhY2UpCit7Cit9CisKK0dDR0xBTkdMRUxheWVyOjpBTkdM
RUNvbnRleHQ6On5BTkdMRUNvbnRleHQoKQoreworICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIEVHTF9N
YWtlQ3VycmVudChtX2Rpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdM
X05PX0NPTlRFWFQpOworICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2Nv
bnRleHQpOworICAgIH0KKworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIEVHTF9EZXN0cm95
U3VyZmFjZShtX2Rpc3BsYXksIG1fc3VyZmFjZSk7Cit9CisKK2Jvb2wgR0NHTEFOR0xFTGF5ZXI6
OkFOR0xFQ29udGV4dDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBBU1NFUlQobV9jb250
ZXh0KTsKKworICAgIGlmIChFR0xfR2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2NvbnRleHQpCisg
ICAgICAgIHJldHVybiBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBtX3N1cmZhY2UsIG1fc3Vy
ZmFjZSwgbV9jb250ZXh0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTCBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHQ7Cit9CisKK0dDR0xBTkdMRUxheWVyOjpH
Q0dMQU5HTEVMYXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQorICAgIDogR0NHTExheWVy
KGNvbnRleHQpCit7CisgICAgc3dpdGNoIChkZXN0aW5hdGlvbikgeworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46CisgICAgICAgIG1fYW5n
bGVDb250ZXh0ID0gQU5HTEVDb250ZXh0OjpjcmVhdGVDb250ZXh0KCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpEaXJlY3Rs
eVRvSG9zdFdpbmRvdzoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworR0NHTEFOR0xFTGF5ZXI6On5HQ0dMQU5HTEVMYXllcigpCit7Cit9
CisKK2Jvb2wgR0NHTEFOR0xFTGF5ZXI6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgQVNT
RVJUKG1fYW5nbGVDb250ZXh0KTsKKyAgICByZXR1cm4gbV9hbmdsZUNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworCit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR0NHTEFOR0xF
TGF5ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fYW5nbGVDb250
ZXh0KTsKKyAgICByZXR1cm4gbV9hbmdsZUNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCisKKyNlbmRpZiAvLyBVU0UoTklDT1NJQSkgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ZjBkMDA5YzRkYzhmOTAzOGJmYWE4NTEyZGUzMTIwYzJmN2ZiYTY0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmgKQEAgLTAsMCArMSw4OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJp
Z2h0IChDKSAyMDE4LCAyMDE5IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9N
QVBQRVIpCisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIk5pY29zaWFHQ0dMTGF5ZXIuaCIKKyNpbmNsdWRlIDxt
ZW1vcnk+CisKK3R5cGVkZWYgdm9pZCAqRUdMQ29uZmlnOwordHlwZWRlZiB2b2lkICpFR0xDb250
ZXh0OwordHlwZWRlZiB2b2lkICpFR0xEaXNwbGF5OwordHlwZWRlZiB2b2lkICpFR0xTdXJmYWNl
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR0xDb250ZXh0
OworY2xhc3MgUGxhdGZvcm1EaXNwbGF5OworfQorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK2Ns
YXNzIEdDR0xBTkdMRUxheWVyIGZpbmFsIDogcHVibGljIEdDR0xMYXllciB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgY2xhc3MgQU5HTEVDb250ZXh0IHsKKyAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQU5HTEVDb250ZXh0KTsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBlcnJvclN0cmluZyhpbnQgc3RhdHVzQ29kZSk7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBsYXN0RXJyb3JTdHJpbmcoKTsKKworICAgICAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4gY3JlYXRlQ29udGV4dCgpOworICAg
ICAgICB2aXJ0dWFsIH5BTkdMRUNvbnRleHQoKTsKKworICAgICAgICBib29sIG1ha2VDb250ZXh0
Q3VycmVudCgpOworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorICAgICAgICBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OworI2VuZGlmCisK
KyAgICBwcml2YXRlOgorICAgICAgICBBTkdMRUNvbnRleHQoRUdMRGlzcGxheSwgRUdMQ29udGV4
dCwgRUdMU3VyZmFjZSk7CisKKyAgICAgICAgRUdMRGlzcGxheSBtX2Rpc3BsYXkgeyBudWxscHRy
IH07CisgICAgICAgIEVHTENvbnRleHQgbV9jb250ZXh0IHsgbnVsbHB0ciB9OworICAgICAgICBF
R0xTdXJmYWNlIG1fc3VyZmFjZSB7IG51bGxwdHIgfTsKKyAgICB9OworCisgICAgR0NHTEFOR0xF
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24pOworICAgIHZpcnR1YWwgfkdDR0xBTkdMRUxh
eWVyKCk7CisKKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIG92ZXJyaWRlOworICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4gbV9hbmdsZUNv
bnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCisKKyNlbmRpZiAvLyBVU0UoTklD
T1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NH
TExheWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGRhOTgzNzAyZDA5NmVlMTA4ODFjZDUyNjIwMzdmMmE1
ZTNiNDljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5jcHAKQEAgLTAsMCArMSwxMzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENv
cHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5pY29zaWFHQ0dMTGF5ZXIuaCIK
KworI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisjZW5kaWYKKworI2lmIFVTRShBTkdMRSkKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIK
KworbmFtZXNwYWNlIE5pY29zaWEgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworR0NH
TExheWVyOjpHQ0dMTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCisgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fY29udGVudExheWVyKE5pY29zaWE6OkNvbnRl
bnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpj
cmVhdGVGYWN0b3J5KCp0aGlzKSkpCit7Cit9CisKK0dDR0xMYXllcjo6R0NHTExheWVyKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVz
dGluYXRpb24gZGVzdGluYXRpb24pCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1f
Y29udGVudExheWVyKE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRl
bnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkpCit7CisgICAg
c3dpdGNoIChkZXN0aW5hdGlvbikgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46CisgICAgICAgIG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0
OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlG
b3JDb21wb3NpdGluZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitHQ0dMTGF5
ZXI6On5HQ0dMTGF5ZXIoKQoreworICAgIGRvd25jYXN0PENvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsPihtX2NvbnRlbnRMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7Cit9CisK
K2Jvb2wgR0NHTExheWVyOjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworICAgIEFTU0VSVChtX2ds
Q29udGV4dCk7CisgICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
K30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBHQ0dMTGF5ZXI6OnBsYXRmb3JtQ29udGV4
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZ2xDb250ZXh0KTsKKyAgICByZXR1cm4gbV9nbENv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworfQorCit2b2lkIEdDR0xMYXllcjo6c3dhcEJ1ZmZl
cnNJZk5lZWRlZCgpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmICht
X2NvbnRleHQubGF5ZXJDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29u
dGV4dC5wcmVwYXJlVGV4dHVyZSgpOworICAgIEludFNpemUgdGV4dHVyZVNpemUobV9jb250ZXh0
Lm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQubV9jdXJyZW50SGVpZ2h0KTsKKyAgICBUZXh0dXJl
TWFwcGVyR0w6OkZsYWdzIGZsYWdzID0gbV9jb250ZXh0LmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxw
aGEgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMDsKKyNpZiBVU0UoQU5HTEUpCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUodGV4dHVyZVNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAgIGlmICghaW1hZ2VCdWZm
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC5wYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhpbWFnZUJ1ZmZlci5nZXQoKSk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgZmxhZ3MgfD0gVGV4dHVyZU1hcHBl
ckdMOjpTaG91bGRGbGlwVGV4dHVyZTsKKyNlbmRpZgorCisgICAgeworICAgICAgICBhdXRvJiBw
cm94eSA9IGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPiht
X2NvbnRlbnRMYXllci0+aW1wbCgpKS5wcm94eSgpOworI2lmIFVTRShBTkdMRSkKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1
ZmZlcjsKKyAgICAgICAgbGF5ZXJCdWZmZXIgPSBwcm94eS5nZXRBdmFpbGFibGVCdWZmZXIodGV4
dHVyZVNpemUsIG1fY29udGV4dC5tX2ludGVybmFsQ29sb3JGb3JtYXQpOworICAgICAgICBpZiAo
IWxheWVyQnVmZmVyKSB7CisgICAgICAgICAgICBhdXRvIHRleHR1cmUgPSBCaXRtYXBUZXh0dXJl
R0w6OmNyZWF0ZShUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXM6OmdldCgpLCBmbGFncywg
bV9jb250ZXh0Lm1faW50ZXJuYWxDb2xvckZvcm1hdCk7CisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxCaXRtYXBUZXh0dXJlR0wmPih0ZXh0dXJlLmdldCgpKS5zZXRQZW5kaW5nQ29udGVudHMoV1RG
TW92ZShpbWFnZSkpOworICAgICAgICAgICAgbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihXVEZNb3ZlKHRleHR1cmUpLCBmbGFncyk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbGF5ZXJCdWZmZXItPnRleHR1cmVHTCgpLnNldFBl
bmRpbmdDb250ZW50cyhXVEZNb3ZlKGltYWdlKSk7CisKKyAgICAgICAgTG9ja0hvbGRlciBob2xk
ZXIocHJveHkubG9jaygpKTsKKyAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92ZShs
YXllckJ1ZmZlcikpOworI2Vsc2UKKyAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9j
aygpKTsKKyAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb250ZXh0Lm1fY29tcG9zaXRvclRleHR1cmUsIHRl
eHR1cmVTaXplLCBmbGFncywgbV9jb250ZXh0Lm1faW50ZXJuYWxDb2xvckZvcm1hdCkpOworI2Vu
ZGlmCisgICAgfQorCisgICAgbV9jb250ZXh0Lm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyNlbmRp
ZgorfQorCit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCisKKyNlbmRpZiAvLyBVU0UoTklDT1NJQSkg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFiZjA0YmI3ZWZlYWI1NmIxOTA2YzA4YzI3ZDg1MGZmNjA2NjBjOTMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAy
MDE4IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIk5pY29zaWFDb250ZW50
TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgR0xDb250ZXh0OworfQorCituYW1lc3BhY2UgTmljb3NpYSB7CisK
K2NsYXNzIEdDR0xMYXllciA6IHB1YmxpYyBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6
Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBs
aWNpdCBHQ0dMTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKKyAgICBH
Q0dMTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24pOworCisgICAgdmlydHVhbCB+R0NHTExh
eWVyKCk7CisKKyAgICBDb250ZW50TGF5ZXImIGNvbnRlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudExheWVyOyB9CisgICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQo
KSBjb25zdDsKKworICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRleHQ7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7CisK
KyAgICBSZWY8Q29udGVudExheWVyPiBtX2NvbnRlbnRMYXllcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIE5pY29zaWEKKworI2VuZGlmIC8vIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDZjYTQ5ZWJhMmVjNGQ5
NDg3MzZhM2UwZWFlYjY1MGY1ODEzNTQ2OTkuLmQxY2RmNjllZDljYjMwMTA1NTBkMzBhMWQwMDUw
ZWJjNTFkNDM2NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC02Miw3
ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlKiBJT1N1cmZhY2VSZWY7CiAKICNp
ZiBVU0UoTklDT1NJQSkKIG5hbWVzcGFjZSBOaWNvc2lhIHsKLWNsYXNzIEdDM0RMYXllcjsKK2Ns
YXNzIEdDR0xMYXllcjsKIH0KICNlbmRpZgogCkBAIC03OSw3ICs3OSw3IEBAIGNsYXNzIEhvc3RX
aW5kb3c7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEltYWdlRGF0YTsKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCi1jbGFzcyBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI7CitjbGFz
cyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAjZW5kaWYKIAogdHlwZWRlZiBXVEY6
Okhhc2hNYXA8Q1N0cmluZywgdWludDY0X3Q+IFNoYWRlck5hbWVIYXNoOwpAQCAtODcxLDExICs4
NzEsMTEgQEAgcHJpdmF0ZToKICAgICBMaXN0SGFzaFNldDxHQ0dMZW51bT4gbV9zeW50aGV0aWNF
cnJvcnM7CiAKICNpZiBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGZy
aWVuZCBjbGFzcyBOaWNvc2lhOjpHQzNETGF5ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE5pY29z
aWE6OkdDM0RMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisgICAgZnJpZW5kIGNsYXNzIE5pY29zaWE6
OkdDR0xMYXllcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3NpYTo6R0NHTExheWVyPiBtX25p
Y29zaWFMYXllcjsKICNlbGlmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBmcmllbmQgY2xhc3Mg
VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0
dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI+IG1fdGV4bWFwTGF5ZXI7CisgICAgZnJpZW5kIGNs
YXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPiBtX3RleG1hcExheWVyOwogI2VsaWYgIVBM
QVRGT1JNKENPQ09BKQogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFBy
aXZhdGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0
ZT4gbV9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyLmNwcAppbmRleCA4ZTgwYzk5YjQ3N2NkZTVmN2M2YzA4OWJkODU1YzE0YTIwNmZlNzI3Li5j
MGEyZWNiODc0N2MxMThmMDcwNWRmOTE4OThkNDQ5ODJlOTBmMmE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtMzEsNyArMzEsNyBAQAog
I2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUuaCIKLSNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
R0NHTFBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlIDxBTkdMRS9TaGFkZXJMYW5nLmg+CiAjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC03
NSw5ICs3NSw5IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xDb250ZXh0OwogCiAjaWYgVVNFKE5JQ09T
SUEpCiAjaWYgVVNFKEFOR0xFKQotI2luY2x1ZGUgIk5pY29zaWFHQzNEQU5HTEVMYXllci5oIgor
I2luY2x1ZGUgIk5pY29zaWFHQ0dMQU5HTEVMYXllci5oIgogI2Vsc2UKLSNpbmNsdWRlICJOaWNv
c2lhR0MzRExheWVyLmgiCisjaW5jbHVkZSAiTmljb3NpYUdDR0xMYXllci5oIgogI2VuZGlmCiAj
ZW5kaWYKIApAQCAtMTM1LDkgKzEzNSw5IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiB7CiAg
ICAgQVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7CiAjaWYgVVNF
KE5JQ09TSUEpCi0gICAgbV9uaWNvc2lhTGF5ZXIgPSBXVEY6Om1ha2VVbmlxdWU8Tmljb3NpYTo6
R0MzREFOR0xFTGF5ZXI+KCp0aGlzLCBkZXN0aW5hdGlvbik7CisgICAgbV9uaWNvc2lhTGF5ZXIg
PSBXVEY6Om1ha2VVbmlxdWU8Tmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzLCBkZXN0aW5h
dGlvbik7CiAjZWxzZQotICAgIG1fdGV4bWFwTGF5ZXIgPSBXVEY6Om1ha2VVbmlxdWU8VGV4dHVy
ZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPigqdGhpcywgZGVzdGluYXRpb24pOworICAgIG1fdGV4
bWFwTGF5ZXIgPSBXVEY6Om1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVy
PigqdGhpcywgZGVzdGluYXRpb24pOwogI2VuZGlmCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAKQEAgLTIwOCw5ICsyMDgsOSBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogewogICAgIEFT
U0VSVF9VTlVTRUQoc2hhcmVkQ29udGV4dCwgIXNoYXJlZENvbnRleHQpOwogI2lmIFVTRShOSUNP
U0lBKQotICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lhOjpHQzNETGF5ZXI+
KCp0aGlzLCBkZXN0aW5hdGlvbik7CisgICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5p
Y29zaWE6OkdDR0xMYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKICNlbHNlCi0gICAgbV90ZXht
YXBMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPigqdGhp
cywgZGVzdGluYXRpb24pOworICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVN
YXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKICNlbmRpZgogCiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0Mz
RFBsYXRmb3JtTGF5ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmJlMDU3
MTRlYTFmYmYwYzEwY2FmNDczODUzNmI4NWQ5YTc3N2YzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTcg
SWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZQotICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaCIK
LQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
ICYmICFVU0UoTklDT1NJQSkKLQotI2luY2x1ZGUgIkJpdG1hcFRleHR1cmVHTC5oIgotI2luY2x1
ZGUgIkdMQ29udGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTEhlYWRlcnMuaCIKLSNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgotI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OlRleHR1cmVNYXBwZXJHQzNEUGxhdGZv
cm1MYXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQotICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCi17Ci0gICAgc3dpdGNoIChkZXN0aW5hdGlvbikgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46Ci0gICAgICAgIG1fZ2xDb250ZXh0
ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNo
YXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIG1fcGxhdGZvcm1MYXllclByb3h5
ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkoKSk7Ci0jZW5k
aWYKLX0KLQotVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjp+VGV4dHVyZU1hcHBlckdD
M0RQbGF0Zm9ybUxheWVyKCkKLXsKLSNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAg
IGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPnBsYXRmb3JtTGF5ZXJXaWxsQmVEZXN0
cm95ZWQoKTsKLSNlbmRpZgotfQotCi1ib29sIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXll
cjo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBBU1NFUlQobV9nbENvbnRleHQpOwotICAg
IHJldHVybiBtX2dsQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0KLVBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0wgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjpwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2dsQ29udGV4dCk7Ci0gICAgcmV0dXJu
IG1fZ2xDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBUZXh0
dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJH
QzNEUGxhdGZvcm1MYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fY29u
dGV4dC5sYXllckNvbXBvc2l0ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0
LnByZXBhcmVUZXh0dXJlKCk7Ci0gICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9j
dXJyZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJlbnRIZWlnaHQpOwotICAgIFRleHR1cmVNYXBw
ZXJHTDo6RmxhZ3MgZmxhZ3MgPSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEZsaXBUZXh0dXJlIHwg
KG1fY29udGV4dC5tX2F0dHJzLmFscGhhID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6
IDApOwotCi0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX3BsYXRmb3JtTGF5ZXJQ
cm94eS0+bG9jaygpKTsKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHktPnB1c2hOZXh0QnVm
ZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29udGV4
dC5tX2NvbXBvc2l0b3JUZXh0dXJlLCB0ZXh0dXJlU2l6ZSwgZmxhZ3MsIG1fY29udGV4dC5tX2lu
dGVybmFsQ29sb3JGb3JtYXQpKTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQubWFya0xheWVyQ29t
cG9zaXRlZCgpOwotfQotI2Vsc2UKLXZvaWQgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVy
OjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fZ2xDb250ZXh0KTsKLQotICAgIG1f
Y29udGV4dC5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpCi0gICAgYXV0byBhdHRycyA9IG1fY29udGV4dC5jb250ZXh0QXR0cmlidXRlcygpOwotICAg
IEFTU0VSVChtX2NvbnRleHQubV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9jb250ZXh0Lm1fc3Rh
dGUuYm91bmREcmF3RkJPKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fY29udGV4dC5t
X3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBtX2NvbnRleHQubV9tdWx0aXNhbXBsZUZCTykgewotICAg
ICAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVu
dCgpOwotICAgICAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0ICE9IG1fZ2xDb250ZXh0Lmdl
dCgpKQotICAgICAgICAgICAgbV9jb250ZXh0Lm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAg
ICAgIG1fY29udGV4dC5yZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkZSQU1FQlVGRkVS
LCBtX2NvbnRleHQubV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotCi0gICAgICAgIGlmIChwcmV2aW91
c0FjdGl2ZUNvbnRleHQgJiYgcHJldmlvdXNBY3RpdmVDb250ZXh0ICE9IG1fZ2xDb250ZXh0Lmdl
dCgpKQotICAgICAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICB9Ci0KLSAgICBUZXh0dXJlTWFwcGVyR0wmIHRleG1hcEdMID0gc3RhdGljX2Nh
c3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcik7Ci0gICAgVGV4dHVyZU1hcHBlckdM
OjpGbGFncyBmbGFncyA9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUgfCAoYXR0
cnMuYWxwaGEgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMCk7Ci0gICAgSW50U2l6
ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJl
bnRIZWlnaHQpOwotICAgIHRleG1hcEdMLmRyYXdUZXh0dXJlKG1fY29udGV4dC5tX3RleHR1cmUs
IGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLSNlbmRp
ZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi19Ci0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
R1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNE
UGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwY2Y2MGY1NzNkOGJmNmVlODcyYTkyNDM2ZDBmNTI5ZjkwN2Q5NDU5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIsIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZQotICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVT
RShURVhUVVJFX01BUFBFUikgJiYgIVVTRShOSUNPU0lBKQotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAi
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBHTENvbnRleHQ7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OwotCi1j
bGFzcyBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIgOiBwdWJsaWMgUGxhdGZvcm1MYXll
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgVGV4dHVyZU1h
cHBlckdDM0RQbGF0Zm9ybUxheWVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uKTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVy
R0MzRFBsYXRmb3JtTGF5ZXIoKTsKLQotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBC
dWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50
VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotCi1w
cml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRleHQ7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEdMQ29udGV4dD4gbV9nbENvbnRleHQ7Ci0KLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45MDgwNWZiNTk3YjkxMmQ5ZGQ0MmQ4NTUzYzU0MDcxYTEzZWQzMTEw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAKQEAgLTAsMCArMSwxMjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuaCIKKworI2lmIEVOQUJMRShHUkFQ
SElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmICFVU0UoTklDT1NJQSkK
KworI2luY2x1ZGUgIkJpdG1hcFRleHR1cmVHTC5oIgorI2luY2x1ZGUgIkdMQ29udGV4dC5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTEhlYWRlcnMuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0
aW9uIGRlc3RpbmF0aW9uKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCit7CisgICAgc3dpdGNo
IChkZXN0aW5hdGlvbikgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3Rp
bmF0aW9uOjpPZmZzY3JlZW46CisgICAgICAgIG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVh
dGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21w
b3NpdGluZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkoKSk7CisjZW5kaWYKK30KKworVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyOjp+VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyKCkK
K3sKKyNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChjbGllbnQoKSkKKyAg
ICAgICAgY2xpZW50KCktPnBsYXRmb3JtTGF5ZXJXaWxsQmVEZXN0cm95ZWQoKTsKKyNlbmRpZgor
fQorCitib29sIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjo6bWFrZUNvbnRleHRDdXJy
ZW50KCkKK3sKKyAgICBBU1NFUlQobV9nbENvbnRleHQpOworICAgIHJldHVybiBtX2dsQ29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wg
VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAor
eworICAgIEFTU0VSVChtX2dsQ29udGV4dCk7CisgICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKK30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK1JlZlB0
cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBUZXh0dXJlTWFwcGVyR0NHTFBsYXRm
b3JtTGF5ZXI6OnByb3h5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJv
eHkuY29weVJlZigpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjo6
c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fY29udGV4dC5sYXllckNvbXBvc2l0
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LnByZXBhcmVUZXh0dXJlKCk7
CisgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9jdXJyZW50V2lkdGgsIG1fY29u
dGV4dC5tX2N1cnJlbnRIZWlnaHQpOworICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3Mg
PSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEZsaXBUZXh0dXJlIHwgKG1fY29udGV4dC5tX2F0dHJz
LmFscGhhID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6IDApOworCisgICAgeworICAg
ICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX3BsYXRmb3JtTGF5ZXJQcm94eS0+bG9jaygpKTsKKyAg
ICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHktPnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29udGV4dC5tX2NvbXBvc2l0b3JUZXh0
dXJlLCB0ZXh0dXJlU2l6ZSwgZmxhZ3MsIG1fY29udGV4dC5tX2ludGVybmFsQ29sb3JGb3JtYXQp
KTsKKyAgICB9CisKKyAgICBtX2NvbnRleHQubWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorI2Vs
c2UKK3ZvaWQgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwYWludFRvVGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkp
Cit7CisgICAgQVNTRVJUKG1fZ2xDb250ZXh0KTsKKworICAgIG1fY29udGV4dC5tYXJrTGF5ZXJD
b21wb3NpdGVkKCk7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgYXV0byBhdHRy
cyA9IG1fY29udGV4dC5jb250ZXh0QXR0cmlidXRlcygpOworICAgIEFTU0VSVChtX2NvbnRleHQu
bV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9jb250ZXh0Lm1fc3RhdGUuYm91bmREcmF3RkJPKTsK
KyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fY29udGV4dC5tX3N0YXRlLmJvdW5kRHJhd0ZC
TyA9PSBtX2NvbnRleHQubV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICBHTENvbnRleHQqIHBy
ZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgICAgICBpZiAo
cHJldmlvdXNBY3RpdmVDb250ZXh0ICE9IG1fZ2xDb250ZXh0LmdldCgpKQorICAgICAgICAgICAg
bV9jb250ZXh0Lm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgICAgIG1fY29udGV4dC5yZXNv
bHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkZSQU1FQlVGRkVSLCBtX2NvbnRleHQubV9zdGF0
ZS5ib3VuZERyYXdGQk8pOworCisgICAgICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQgJiYg
cHJldmlvdXNBY3RpdmVDb250ZXh0ICE9IG1fZ2xDb250ZXh0LmdldCgpKQorICAgICAgICAgICAg
cHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB9CisKKyAg
ICBUZXh0dXJlTWFwcGVyR0wmIHRleG1hcEdMID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdM
Jj4odGV4dHVyZU1hcHBlcik7CisgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IFRl
eHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUgfCAoYXR0cnMuYWxwaGEgPyBUZXh0dXJl
TWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMCk7CisgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2Nv
bnRleHQubV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJlbnRIZWlnaHQpOworICAgIHRl
eG1hcEdMLmRyYXdUZXh0dXJlKG1fY29udGV4dC5tX3RleHR1cmUsIGZsYWdzLCB0ZXh0dXJlU2l6
ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpCit9CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9H
TCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dM
UGxhdGZvcm1MYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhMDYyMzNmMzI3OGQ0NDc4MmNhOWYyYmMyODVj
NjYxMGRiMjEyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmgKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxNyBJZ2FsaWEgUy5M
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAh
VVNFKE5JQ09TSUEpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdMQ29udGV4dDsKK2NsYXNzIFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJHQ0dM
UGxhdGZvcm1MYXllciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIo
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGlu
YXRpb24pOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcigpOwor
CisgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OworCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94
eSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJy
aWRlOworI2Vsc2UKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYsIGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmIG1fY29udGV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0
PiBtX2dsQ29udGV4dDsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7
CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCg==
</data>
<flag name="review"
          id="413175"
          type_id="1"
          status="+"
          setter="fujii"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401971</attachid>
            <date>2020-06-15 20:16:34 -0700</date>
            <delta_ts>2020-06-15 22:39:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211117-20200615231633.patch</filename>
            <type>text/plain</type>
            <size>62170</size>
            <attacher name="ChangSeok Oh">changseok</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzMDU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWYxZDg1YmY2MjljMWU5
MDQ4NzY3YWI3NDA1OTQ4Mjk4NGZjYWY0Ny4uNjE0MjgyMjFlNmIxZjQzODkwNWZmZTJlMTBjMTU3
NTcyZTE4M2Q5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDIwLTA2LTE1ICBDaGFu
Z1Nlb2sgT2ggIDxjaGFuZ3Nlb2tAd2Via2l0Lm9yZz4KKworICAgICAgICBbR1RLXSBSZW5hbWUg
R0MzRCB0byBHQ0dMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjExMTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRnVqaWkgSGlyb25vcmkuCisKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0QgaGFzIGJlZW4gcmVuYW1lZCB0byBHcmFwaGljc0NvbnRl
eHRHTCBhZnRlciByMjU0MTAzIGJ1dCBzb21lIGZpbGVzCisgICAgICAgIHN0aWxsIGZvbGxvdyB0
aGUgb2xkIG5hbWUuIFRoaXMgY2hhbmdlIHJlZmxlY3RzIHRoZSBuZXcgbmFtZSB0byB0aGVtIGZv
ciBjb25zaXN0ZW5jeS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBvZiBubyBuZXcg
ZnVuY3Rpb25hbGl0aWVzLgorCisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFr
ZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NH
TEFOR0xFTGF5ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmNwcC4KKyAgICAgICAg
KE5pY29zaWE6OkdDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6OmVycm9yU3RyaW5nKToKKyAg
ICAgICAgKE5pY29zaWE6OkdDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6Omxhc3RFcnJvclN0
cmluZyk6CisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0Ojpj
cmVhdGVDb250ZXh0KToKKyAgICAgICAgKE5pY29zaWE6OkdDR0xBTkdMRUxheWVyOjpBTkdMRUNv
bnRleHQ6OkFOR0xFQ29udGV4dCk6CisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6
QU5HTEVDb250ZXh0Ojp+QU5HTEVDb250ZXh0KToKKyAgICAgICAgKE5pY29zaWE6OkdDR0xBTkdM
RUxheWVyOjpBTkdMRUNvbnRleHQ6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChOaWNv
c2lhOjpHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoTmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI6OkdDR0xBTkdMRUxheWVyKToKKyAg
ICAgICAgKE5pY29zaWE6OkdDR0xBTkdMRUxheWVyOjp+R0NHTEFOR0xFTGF5ZXIpOgorICAgICAg
ICAoTmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAg
IChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6cGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5
ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5oLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMTGF5ZXIuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdD
M0RMYXllci5jcHAuCisgICAgICAgIChOaWNvc2lhOjpHQ0dMTGF5ZXI6OkdDR0xMYXllcik6Cisg
ICAgICAgIChOaWNvc2lhOjpHQ0dMTGF5ZXI6On5HQ0dMTGF5ZXIpOgorICAgICAgICAoTmljb3Np
YTo6R0NHTExheWVyOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoTmljb3NpYTo6R0NH
TExheWVyOjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoTmljb3NpYTo6R0NHTExh
eWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmgu
CisgICAgICAgIChOaWNvc2lhOjpHQ0dMTGF5ZXI6OmNvbnRlbnRMYXllciBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNE
UGxhdGZvcm1MYXllci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6On5UZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwcm94eSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnN3YXBC
dWZmZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
QzNEUGxhdGZvcm1MYXllci5oLgorCiAyMDIwLTA2LTE1ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9t
aWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEpJVCB0aHVua3Mgc2hvdWxkIHdvcmsgb24gYXJt
NjRfMzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4
IGZlMjY2OWM0MjM0MzM5ZjFlNDA4MWJhOGUwMzMzZmNjOWE4NzQxODguLjQ5NTI1MzZhZWQzNGRm
MzljNWRmNjBlNjM5ZDRmNTExN2EwZGUzODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGV4dHVyZU1hcHBlci5jbWFrZQpAQCAtMTEsNyArMTEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZv
cm1MYXllci5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdD
R0xQbGF0Zm9ybUxheWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTGF5ZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJUaWxlLmNwcAogKQpAQCAtOTAsNyArOTAsNyBAQCBpZiAoVVNFX0NPT1JESU5BVEVEX0dSQVBI
SUNTKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQmFj
a2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGwuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFDb21wb3NpdGlvbkxheWVyVGV4dHVyZU1hcHBlckltcGwu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUltYWdlQmFja2luZ1RleHR1cmVNYXBw
ZXJJbXBsLmNwcAogICAgICkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKQEAgLTExOCw2ICsxMTgsNiBAQCBlbmRpZiAoKQogCiBpZiAoVVNFX0FOR0xF
X1dFQkdMKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzREFOR0xFTGF5ZXIuY3BwCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXll
ci5jcHAKICAgICApCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNE
QU5HTEVMYXllci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4N2QzMmZkNjM3
M2U4YmI3OGE1OTI1NWE2NDc2MjZmM2JjMzRlZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDIxNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgsIDIwMTkgSWdhbGlhIFMuTC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJO
aWNvc2lhR0MzREFOR0xFTGF5ZXIuaCIKLQotI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0KLSNkZWZpbmUgRUdMX0VHTF9QUk9U
T1RZUEVTIDAKLS8vIFNraXAgdGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRl
eHQgZW50cnkgcG9pbnRzIGZvciBub3cuCi0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRl
eHQKLSNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dF9nbGVzMQotdHlwZWRlZiB2b2lk
KiBHTGVnbENvbnRleHQ7Ci0jaW5jbHVkZSA8QU5HTEUvZWdsLmg+Ci0jaW5jbHVkZSA8QU5HTEUv
ZWdsZXh0Lmg+Ci0jaW5jbHVkZSA8QU5HTEUvZWdsZXh0X2FuZ2xlLmg+Ci0jaW5jbHVkZSA8QU5H
TEUvZW50cnlfcG9pbnRzX2VnbC5oPgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVz
XzJfMF9hdXRvZ2VuLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1
dG9nZW4uaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHQuaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJl
eHRfYW5nbGUuaD4KLQotbmFtZXNwYWNlIE5pY29zaWEgewotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotY29uc3QgY2hhciogR0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6ZXJyb3JT
dHJpbmcoaW50IHN0YXR1c0NvZGUpCi17Ci0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoaW50KSA+
PSBzaXplb2YoRUdMaW50KSwgIkVHTGludCBtdXN0IG5vdCBiZSB3aWRlciB0aGFuIGludCIpOwot
ICAgIHN3aXRjaCAoc3RhdHVzQ29kZSkgewotI2RlZmluZSBDQVNFX1JFVFVSTl9TVFJJTkcobmFt
ZSkgY2FzZSBuYW1lOiByZXR1cm4gI25hbWUKLSAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25v
cy5vcmcvcmVnaXN0cnkvRUdML3Nkay9kb2NzL21hbi9odG1sL2VnbEdldEVycm9yLnhodG1sCi0g
ICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfU1VDQ0VTUyk7Ci0gICAgICAgIENBU0VfUkVU
VVJOX1NUUklORyhFR0xfTk9UX0lOSVRJQUxJWkVEKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RS
SU5HKEVHTF9CQURfQUNDRVNTKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURf
QUxMT0MpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9BVFRSSUJVVEUpOwot
ICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9DT05URVhUKTsKLSAgICAgICAgQ0FT
RV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQ09ORklHKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RS
SU5HKEVHTF9CQURfQ1VSUkVOVF9TVVJGQUNFKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5H
KEVHTF9CQURfRElTUExBWSk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX1NV
UkZBQ0UpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9NQVRDSCk7Ci0gICAg
ICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX1BBUkFNRVRFUik7Ci0gICAgICAgIENBU0Vf
UkVUVVJOX1NUUklORyhFR0xfQkFEX05BVElWRV9QSVhNQVApOwotICAgICAgICBDQVNFX1JFVFVS
Tl9TVFJJTkcoRUdMX0JBRF9OQVRJVkVfV0lORE9XKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RS
SU5HKEVHTF9DT05URVhUX0xPU1QpOwotI3VuZGVmIENBU0VfUkVUVVJOX1NUUklORwotICAgIGRl
ZmF1bHQ6IHJldHVybiAiVW5rbm93biBFR0wgZXJyb3IiOwotICAgIH0KLX0KLQotY29uc3QgY2hh
ciogR0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6bGFzdEVycm9yU3RyaW5nKCkKLXsKLSAg
ICByZXR1cm4gZXJyb3JTdHJpbmcoRUdMX0dldEVycm9yKCkpOwotfQotCi1zdGQ6OnVuaXF1ZV9w
dHI8R0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dD4gR0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29u
dGV4dDo6Y3JlYXRlQ29udGV4dCgpCi17Ci0gICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gRUdMX0dl
dERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7Ci0gICAgaWYgKGRpc3BsYXkgPT0gRUdMX05P
X0RJU1BMQVkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRUdMaW50IG1ham9yVmVy
c2lvbiwgbWlub3JWZXJzaW9uOwotICAgIGlmIChFR0xfSW5pdGlhbGl6ZShkaXNwbGF5LCAmbWFq
b3JWZXJzaW9uLCAmbWlub3JWZXJzaW9uKSA9PSBFR0xfRkFMU0UpIHsKLSAgICAgICAgTE9HKFdl
YkdMLCAiRUdMRGlzcGxheSBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICBMT0coV2ViR0wsICJBTkdMRSBpbml0aWFsaXNlZCBNYWpv
cjogJWQgTWlub3I6ICVkIiwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb24pOwotCi0gICAgY29u
c3QgY2hhciogZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xfUXVlcnlTdHJpbmcoZGlzcGxheSwgRUdM
X0VYVEVOU0lPTlMpOwotICAgIExPRyhXZWJHTCwgIkV4dGVuc2lvbnM6ICVzIiwgZGlzcGxheUV4
dGVuc2lvbnMpOwotCi0gICAgRUdMQ29uZmlnIGNvbmZpZzsKLSAgICBFR0xpbnQgY29uZmlnQXR0
cmlidXRlc1tdID0gewotICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VT
Ml9CSVQsCi0gICAgICAgIEVHTF9SRURfU0laRSwgOCwKLSAgICAgICAgRUdMX0dSRUVOX1NJWkUs
IDgsCi0gICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCi0gICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4
LAotICAgICAgICBFR0xfTk9ORQotICAgIH07Ci0gICAgRUdMaW50IG51bWJlckNvbmZpZ3NSZXR1
cm5lZCA9IDA7Ci0gICAgRUdMX0Nob29zZUNvbmZpZyhkaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVz
LCAmY29uZmlnLCAxLCAmbnVtYmVyQ29uZmlnc1JldHVybmVkKTsKLSAgICBpZiAobnVtYmVyQ29u
Zmlnc1JldHVybmVkICE9IDEpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29uZmlnIEluaXRp
YWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAg
IExPRyhXZWJHTCwgIkdvdCBFR0xDb25maWciKTsKLQotICAgIEVHTF9CaW5kQVBJKEVHTF9PUEVO
R0xfRVNfQVBJKTsKLSAgICBpZiAoRUdMX0dldEVycm9yKCkgIT0gRUdMX1NVQ0NFU1MpIHsKLSAg
ICAgICAgTE9HKFdlYkdMLCAiVW5hYmxlIHRvIGJpbmQgdG8gT1BFTkdMX0VTX0FQSSIpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBzdGQ6OnZlY3RvcjxFR0xpbnQ+IGNv
bnRleHRBdHRyaWJ1dGVzOwotICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfQ09O
VEVYVF9DTElFTlRfVkVSU0lPTik7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKDIp
OwotICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfQ09OVEVYVF9XRUJHTF9DT01Q
QVRJQklMSVRZX0FOR0xFKTsKLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1RS
VUUpOwotICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfRVhURU5TSU9OU19FTkFC
TEVEX0FOR0xFKTsKLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1RSVUUpOwot
ICAgIGlmIChzdHJzdHIoZGlzcGxheUV4dGVuc2lvbnMsICJFR0xfQU5HTEVfcG93ZXJfcHJlZmVy
ZW5jZSIpKSB7Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfUE9XRVJf
UFJFRkVSRU5DRV9BTkdMRSk7Ci0gICAgICAgIC8vIEVHTF9MT1dfUE9XRVJfQU5HTEUgaXMgdGhl
IGRlZmF1bHQuIENoYW5nZSB0bwotICAgICAgICAvLyBFR0xfSElHSF9QT1dFUl9BTkdMRSBpZiBk
ZXNpcmVkLgotICAgICAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX0xPV19QT1dF
Ul9BTkdMRSk7Ci0gICAgfQotICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfTk9O
RSk7Ci0KLSAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5
LCBjb25maWcsIEVHTF9OT19DT05URVhULCBjb250ZXh0QXR0cmlidXRlcy5kYXRhKCkpOwotICAg
IGlmIChjb250ZXh0ID09IEVHTF9OT19DT05URVhUKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVH
TENvbnRleHQgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgTE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKLQotICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250ZXh0PihuZXcgQU5HTEVDb250ZXh0KGRpc3BsYXks
IGNvbnRleHQsIEVHTF9OT19TVVJGQUNFKSk7Ci19Ci0KLUdDM0RBTkdMRUxheWVyOjpBTkdMRUNv
bnRleHQ6OkFOR0xFQ29udGV4dChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTENvbnRleHQgY29udGV4
dCwgRUdMU3VyZmFjZSBzdXJmYWNlKQotICAgIDogbV9kaXNwbGF5KGRpc3BsYXkpCi0gICAgLCBt
X2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc3VyZmFjZShzdXJmYWNlKQotewotfQotCi1HQzNE
QU5HTEVMYXllcjo6QU5HTEVDb250ZXh0Ojp+QU5HTEVDb250ZXh0KCkKLXsKLSAgICBpZiAobV9j
b250ZXh0KSB7Ci0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDAp
OwotICAgICAgICBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdM
X05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0
KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLSAgICB9Ci0KLSAgICBpZiAobV9zdXJmYWNlKQotICAg
ICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5LCBtX3N1cmZhY2UpOwotfQotCi1ib29s
IEdDM0RBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0g
ICAgQVNTRVJUKG1fY29udGV4dCk7Ci0KLSAgICBpZiAoRUdMX0dldEN1cnJlbnRDb250ZXh0KCkg
IT0gbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheSwg
bV9zdXJmYWNlLCBtX3N1cmZhY2UsIG1fY29udGV4dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6
cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0OwotfQotCi1H
QzNEQU5HTEVMYXllcjo6R0MzREFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNv
bnRleHQsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikK
LSAgICA6IEdDM0RMYXllcihjb250ZXh0KQotewotICAgIHN3aXRjaCAoZGVzdGluYXRpb24pIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbjo6T2Zmc2NyZWVu
OgotICAgICAgICBtX2FuZ2xlQ29udGV4dCA9IEFOR0xFQ29udGV4dDo6Y3JlYXRlQ29udGV4dCgp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0
aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5kb3c6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUdDM0RBTkdMRUxheWVyOjp+R0MzREFO
R0xFTGF5ZXIoKQotewotfQotCi1ib29sIEdDM0RBTkdMRUxheWVyOjptYWtlQ29udGV4dEN1cnJl
bnQoKQotewotICAgIEFTU0VSVChtX2FuZ2xlQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1fYW5nbGVD
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotfQotCi1QbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMIEdDM0RBTkdMRUxheWVyOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIEFT
U0VSVChtX2FuZ2xlQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1fYW5nbGVDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgTmljb3NpYQotCi0jZW5kaWYgLy8gVVNF
KE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXll
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmlj
b3NpYUdDM0RBTkdMRUxheWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMWYx
ZTU3YmU4NDdlZDQwYjZjZWI3YThmYWUzZDc4ZTRkNTVhZGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgsIDIwMTkgSWdhbGlhIFMuTC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKE5JQ09T
SUEpICYmIFVTRShURVhUVVJFX01BUFBFUikKLQotI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCi0jaW5jbHVkZSAiTmljb3NpYUdDM0RM
YXllci5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLQotdHlwZWRlZiB2b2lkICpFR0xDb25maWc7Ci10
eXBlZGVmIHZvaWQgKkVHTENvbnRleHQ7Ci10eXBlZGVmIHZvaWQgKkVHTERpc3BsYXk7Ci10eXBl
ZGVmIHZvaWQgKkVHTFN1cmZhY2U7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFNp
emU7Ci1jbGFzcyBHTENvbnRleHQ7Ci1jbGFzcyBQbGF0Zm9ybURpc3BsYXk7Ci19Ci0KLW5hbWVz
cGFjZSBOaWNvc2lhIHsKLQotY2xhc3MgR0MzREFOR0xFTGF5ZXIgZmluYWwgOiBwdWJsaWMgR0Mz
RExheWVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBjbGFz
cyBBTkdMRUNvbnRleHQgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBTkdMRUNvbnRl
eHQpOwotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGVycm9yU3RyaW5n
KGludCBzdGF0dXNDb2RlKTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGxhc3RFcnJvclN0
cmluZygpOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250ZXh0PiBj
cmVhdGVDb250ZXh0KCk7Ci0gICAgICAgIHZpcnR1YWwgfkFOR0xFQ29udGV4dCgpOwotCi0gICAg
ICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRF
WFRfR0wpCi0gICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1Db250ZXh0
KCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEFOR0xFQ29udGV4dChF
R0xEaXNwbGF5LCBFR0xDb250ZXh0LCBFR0xTdXJmYWNlKTsKLQotICAgICAgICBFR0xEaXNwbGF5
IG1fZGlzcGxheSB7IG51bGxwdHIgfTsKLSAgICAgICAgRUdMQ29udGV4dCBtX2NvbnRleHQgeyBu
dWxscHRyIH07Ci0gICAgICAgIEVHTFN1cmZhY2UgbV9zdXJmYWNlIHsgbnVsbHB0ciB9OwotICAg
IH07Ci0KLSAgICBHQzNEQU5HTEVMYXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbik7Ci0gICAg
dmlydHVhbCB+R0MzREFOR0xFTGF5ZXIoKTsKLQotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50
KCkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QU5H
TEVDb250ZXh0PiBtX2FuZ2xlQ29udGV4dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5pY29zaWEK
LQotI2VuZGlmIC8vIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNv
c2lhR0MzRExheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3NTcwMDNiMWYxMWRmNGIyNzY2YjQwOWU4MjJjZDhiNDIwZmI0YTViLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIk5pY29zaWFHQzNETGF5ZXIuaCIKLQotI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckdMLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZm
ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5k
aWYKLQotI2lmIFVTRShBTkdMRSkKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2VuZGlmCi0K
LSNpbmNsdWRlICJHTENvbnRleHQuaCIKLQotbmFtZXNwYWNlIE5pY29zaWEgewotCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotR0MzRExheWVyOjpHQzNETGF5ZXIoR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wmIGNvbnRleHQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fY29u
dGVudExheWVyKE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkpCi17Ci19Ci0KLUdD
M0RMYXllcjo6R0MzRExheWVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0LCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24pCi0gICAgOiBtX2Nv
bnRleHQoY29udGV4dCkKLSAgICAsIG1fY29udGVudExheWVyKE5pY29zaWE6OkNvbnRlbnRMYXll
cjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVG
YWN0b3J5KCp0aGlzKSkpCi17Ci0gICAgc3dpdGNoIChkZXN0aW5hdGlvbikgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46Ci0gICAgICAg
IG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9y
bURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb246OkRpcmVjdGx5
VG9Ib3N0V2luZG93OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi1HQzNETGF5ZXI6On5HQzNETGF5ZXIoKQotewotICAgIGRvd25jYXN0
PENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX2NvbnRlbnRMYXllci0+aW1wbCgpKS5p
bnZhbGlkYXRlQ2xpZW50KCk7Ci19Ci0KLWJvb2wgR0MzRExheWVyOjptYWtlQ29udGV4dEN1cnJl
bnQoKQotewotICAgIEFTU0VSVChtX2dsQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBH
QzNETGF5ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fZ2xDb250
ZXh0KTsKLSAgICByZXR1cm4gbV9nbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotfQotCi12
b2lkIEdDM0RMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbnRleHQubGF5ZXJDb21wb3NpdGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC5wcmVwYXJlVGV4dHVyZSgpOwotICAgIEludFNp
emUgdGV4dHVyZVNpemUobV9jb250ZXh0Lm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQubV9jdXJy
ZW50SGVpZ2h0KTsKLSAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzID0gbV9jb250ZXh0
LmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5k
IDogMDsKLSNpZiBVU0UoQU5HTEUpCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGV4dHVyZVNpemUsIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQpOwotICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY29udGV4dC5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhpbWFnZUJ1
ZmZlci5nZXQoKSk7Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGltYWdlQnVmZmVyLT5jb3B5
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKLSNlbHNlCi0gICAgZmxhZ3MgfD0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4
dHVyZTsKLSNlbmRpZgotCi0gICAgewotICAgICAgICBhdXRvJiBwcm94eSA9IGRvd25jYXN0PE5p
Y29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX2NvbnRlbnRMYXllci0+aW1w
bCgpKS5wcm94eSgpOwotI2lmIFVTRShBTkdMRSkKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlcjsKLSAgICAgICAgbGF5
ZXJCdWZmZXIgPSBwcm94eS5nZXRBdmFpbGFibGVCdWZmZXIodGV4dHVyZVNpemUsIG1fY29udGV4
dC5tX2ludGVybmFsQ29sb3JGb3JtYXQpOwotICAgICAgICBpZiAoIWxheWVyQnVmZmVyKSB7Ci0g
ICAgICAgICAgICBhdXRvIHRleHR1cmUgPSBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZShUZXh0dXJl
TWFwcGVyQ29udGV4dEF0dHJpYnV0ZXM6OmdldCgpLCBmbGFncywgbV9jb250ZXh0Lm1faW50ZXJu
YWxDb2xvckZvcm1hdCk7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wm
Pih0ZXh0dXJlLmdldCgpKS5zZXRQZW5kaW5nQ29udGVudHMoV1RGTW92ZShpbWFnZSkpOwotICAg
ICAgICAgICAgbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyQnVmZmVyPihXVEZNb3ZlKHRleHR1cmUpLCBmbGFncyk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbGF5ZXJCdWZmZXItPnRleHR1cmVHTCgpLnNldFBlbmRpbmdDb250ZW50cyhXVEZN
b3ZlKGltYWdlKSk7Ci0KLSAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsK
LSAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1ZmZlcikpOwotI2Vs
c2UKLSAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKLSAgICAgICAgcHJv
eHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1
ZmZlcj4obV9jb250ZXh0Lm1fY29tcG9zaXRvclRleHR1cmUsIHRleHR1cmVTaXplLCBmbGFncywg
bV9jb250ZXh0Lm1faW50ZXJuYWxDb2xvckZvcm1hdCkpOwotI2VuZGlmCi0gICAgfQotCi0gICAg
bV9jb250ZXh0Lm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVz
cGFjZSBOaWNvc2lhCi0KLSNlbmRpZiAvLyBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyM2U0ZDhjN2JmYTY4NTc5YWFmNjNiNjBhNmU3NjNkNjk2ZjAxNTQ3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5M
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBV
U0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGwuaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNs
YXNzIEdMQ29udGV4dDsKLX0KLQotbmFtZXNwYWNlIE5pY29zaWEgewotCi1jbGFzcyBHQzNETGF5
ZXIgOiBwdWJsaWMgQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudCB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgR0MzRExheWVy
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7Ci0gICAgR0MzRExheWVyKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OkRlc3RpbmF0aW9uKTsKLQotICAgIHZpcnR1YWwgfkdDM0RMYXllcigpOwotCi0gICAg
Q29udGVudExheWVyJiBjb250ZW50TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMYXll
cjsgfQotICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB2aXJ0dWFs
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7Ci0KLSAg
ICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgbV9jb250ZXh0OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpHTENvbnRleHQ+IG1fZ2xDb250ZXh0OwotCi0gICAgUmVmPENvbnRl
bnRMYXllcj4gbV9jb250ZW50TGF5ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaWNvc2lhCi0K
LSNlbmRpZiAvLyBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3Np
YUdDR0xBTkdMRUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDEyMDVi
Y2E0YmMwZWMzZjMzNDIyYzBmYmUxY2NlMTdjYmUwNTU2MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dM
QU5HTEVMYXllci5jcHAKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAxOCwgMjAxOSBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk5pY29zaWFHQ0dMQU5HTEVMYXllci5oIgorCisjaWYgVVNFKE5J
Q09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKwor
I2RlZmluZSBFR0xfRUdMX1BST1RPVFlQRVMgMAorLy8gU2tpcCB0aGUgaW5jbHVzaW9uIG9mIEFO
R0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4KKyNkZWZpbmUgR0xf
QU5HTEVfZXhwbGljaXRfY29udGV4dAorI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0
X2dsZXMxCit0eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKKyNpbmNsdWRlIDxBTkdMRS9lZ2wu
aD4KKyNpbmNsdWRlIDxBTkdMRS9lZ2xleHQuaD4KKyNpbmNsdWRlIDxBTkdMRS9lZ2xleHRfYW5n
bGUuaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZWdsLmg+CisjaW5jbHVkZSA8QU5H
TEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRy
eV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgorI2luY2x1ZGUgPEFOR0xFL2dsMmV4dC5oPgor
I2luY2x1ZGUgPEFOR0xFL2dsMmV4dF9hbmdsZS5oPgorCituYW1lc3BhY2UgTmljb3NpYSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjb25zdCBjaGFyKiBHQ0dMQU5HTEVMYXllcjo6
QU5HTEVDb250ZXh0OjplcnJvclN0cmluZyhpbnQgc3RhdHVzQ29kZSkKK3sKKyAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihpbnQpID49IHNpemVvZihFR0xpbnQpLCAiRUdMaW50IG11c3Qgbm90IGJl
IHdpZGVyIHRoYW4gaW50Iik7CisgICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7CisjZGVmaW5lIENB
U0VfUkVUVVJOX1NUUklORyhuYW1lKSBjYXNlIG5hbWU6IHJldHVybiAjbmFtZQorICAgICAgICAv
LyBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9FR0wvc2RrL2RvY3MvbWFuL2h0bWwv
ZWdsR2V0RXJyb3IueGh0bWwKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9TVUNDRVNT
KTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9OT1RfSU5JVElBTElaRUQpOworICAg
ICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9BQ0NFU1MpOworICAgICAgICBDQVNFX1JF
VFVSTl9TVFJJTkcoRUdMX0JBRF9BTExPQyk7CisgICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhF
R0xfQkFEX0FUVFJJQlVURSk7CisgICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0NP
TlRFWFQpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9DT05GSUcpOworICAg
ICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9DVVJSRU5UX1NVUkZBQ0UpOworICAgICAg
ICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9ESVNQTEFZKTsKKyAgICAgICAgQ0FTRV9SRVRV
Uk5fU1RSSU5HKEVHTF9CQURfU1VSRkFDRSk7CisgICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhF
R0xfQkFEX01BVENIKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfUEFSQU1F
VEVSKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfTkFUSVZFX1BJWE1BUCk7
CisgICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX05BVElWRV9XSU5ET1cpOworICAg
ICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0NPTlRFWFRfTE9TVCk7CisjdW5kZWYgQ0FTRV9S
RVRVUk5fU1RSSU5HCisgICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIEVHTCBlcnJvciI7Cisg
ICAgfQorfQorCitjb25zdCBjaGFyKiBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpsYXN0
RXJyb3JTdHJpbmcoKQoreworICAgIHJldHVybiBlcnJvclN0cmluZyhFR0xfR2V0RXJyb3IoKSk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0PiBHQ0dM
QU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpjcmVhdGVDb250ZXh0KCkKK3sKKyAgICBFR0xEaXNw
bGF5IGRpc3BsYXkgPSBFR0xfR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKKyAgICBp
ZiAoZGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBFR0xpbnQgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb247CisgICAgaWYgKEVHTF9Jbml0
aWFsaXplKGRpc3BsYXksICZtYWpvclZlcnNpb24sICZtaW5vclZlcnNpb24pID09IEVHTF9GQUxT
RSkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxl
ZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIExPRyhXZWJHTCwgIkFO
R0xFIGluaXRpYWxpc2VkIE1ham9yOiAlZCBNaW5vcjogJWQiLCBtYWpvclZlcnNpb24sIG1pbm9y
VmVyc2lvbik7CisKKyAgICBjb25zdCBjaGFyKiBkaXNwbGF5RXh0ZW5zaW9ucyA9IEVHTF9RdWVy
eVN0cmluZyhkaXNwbGF5LCBFR0xfRVhURU5TSU9OUyk7CisgICAgTE9HKFdlYkdMLCAiRXh0ZW5z
aW9uczogJXMiLCBkaXNwbGF5RXh0ZW5zaW9ucyk7CisKKyAgICBFR0xDb25maWcgY29uZmlnOwor
ICAgIEVHTGludCBjb25maWdBdHRyaWJ1dGVzW10gPSB7CisgICAgICAgIEVHTF9SRU5ERVJBQkxF
X1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKKyAgICAgICAgRUdMX1JFRF9TSVpFLCA4LAorICAg
ICAgICBFR0xfR1JFRU5fU0laRSwgOCwKKyAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICAg
ICAgRUdMX0FMUEhBX1NJWkUsIDgsCisgICAgICAgIEVHTF9OT05FCisgICAgfTsKKyAgICBFR0xp
bnQgbnVtYmVyQ29uZmlnc1JldHVybmVkID0gMDsKKyAgICBFR0xfQ2hvb3NlQ29uZmlnKGRpc3Bs
YXksIGNvbmZpZ0F0dHJpYnV0ZXMsICZjb25maWcsIDEsICZudW1iZXJDb25maWdzUmV0dXJuZWQp
OworICAgIGlmIChudW1iZXJDb25maWdzUmV0dXJuZWQgIT0gMSkgeworICAgICAgICBMT0coV2Vi
R0wsICJFR0xDb25maWcgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgTE9HKFdlYkdMLCAiR290IEVHTENvbmZpZyIpOworCisgICAg
RUdMX0JpbmRBUEkoRUdMX09QRU5HTF9FU19BUEkpOworICAgIGlmIChFR0xfR2V0RXJyb3IoKSAh
PSBFR0xfU1VDQ0VTUykgeworICAgICAgICBMT0coV2ViR0wsICJVbmFibGUgdG8gYmluZCB0byBP
UEVOR0xfRVNfQVBJIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHN0
ZDo6dmVjdG9yPEVHTGludD4gY29udGV4dEF0dHJpYnV0ZXM7CisgICAgY29udGV4dEF0dHJpYnV0
ZXMucHVzaF9iYWNrKEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OKTsKKyAgICBjb250ZXh0QXR0
cmlidXRlcy5wdXNoX2JhY2soMik7CisgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVH
TF9DT05URVhUX1dFQkdMX0NPTVBBVElCSUxJVFlfQU5HTEUpOworICAgIGNvbnRleHRBdHRyaWJ1
dGVzLnB1c2hfYmFjayhFR0xfVFJVRSk7CisgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNr
KEVHTF9FWFRFTlNJT05TX0VOQUJMRURfQU5HTEUpOworICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1
c2hfYmFjayhFR0xfVFJVRSk7CisgICAgaWYgKHN0cnN0cihkaXNwbGF5RXh0ZW5zaW9ucywgIkVH
TF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIikpIHsKKyAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMu
cHVzaF9iYWNrKEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FOR0xFKTsKKyAgICAgICAgLy8gRUdMX0xP
V19QT1dFUl9BTkdMRSBpcyB0aGUgZGVmYXVsdC4gQ2hhbmdlIHRvCisgICAgICAgIC8vIEVHTF9I
SUdIX1BPV0VSX0FOR0xFIGlmIGRlc2lyZWQuCisgICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1
c2hfYmFjayhFR0xfTE9XX1BPV0VSX0FOR0xFKTsKKyAgICB9CisgICAgY29udGV4dEF0dHJpYnV0
ZXMucHVzaF9iYWNrKEVHTF9OT05FKTsKKworICAgIEVHTENvbnRleHQgY29udGV4dCA9IEVHTF9D
cmVhdGVDb250ZXh0KGRpc3BsYXksIGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRBdHRy
aWJ1dGVzLmRhdGEoKSk7CisgICAgaWYgKGNvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpIHsKKyAg
ICAgICAgTE9HKFdlYkdMLCAiRUdMQ29udGV4dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29u
dGV4dCIpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUNvbnRleHQ+KG5ldyBB
TkdMRUNvbnRleHQoZGlzcGxheSwgY29udGV4dCwgRUdMX05PX1NVUkZBQ0UpKTsKK30KKworR0NH
TEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6QU5HTEVDb250ZXh0KEVHTERpc3BsYXkgZGlzcGxh
eSwgRUdMQ29udGV4dCBjb250ZXh0LCBFR0xTdXJmYWNlIHN1cmZhY2UpCisgICAgOiBtX2Rpc3Bs
YXkoZGlzcGxheSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9zdXJmYWNlKHN1
cmZhY2UpCit7Cit9CisKK0dDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6On5BTkdMRUNvbnRl
eHQoKQoreworICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXks
IEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworICAgICAg
ICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOworICAgIH0KKworICAg
IGlmIChtX3N1cmZhY2UpCisgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXksIG1f
c3VyZmFjZSk7Cit9CisKK2Jvb2wgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6bWFrZUNv
bnRleHRDdXJyZW50KCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKworICAgIGlmIChFR0xf
R2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2NvbnRleHQpCisgICAgICAgIHJldHVybiBFR0xfTWFr
ZUN1cnJlbnQobV9kaXNwbGF5LCBtX3N1cmZhY2UsIG1fc3VyZmFjZSwgbV9jb250ZXh0KTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBHQ0dMQU5HTEVM
YXllcjo6QU5HTEVDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbnRleHQ7Cit9CisKK0dDR0xBTkdMRUxheWVyOjpHQ0dMQU5HTEVMYXllcihHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3Rp
bmF0aW9uIGRlc3RpbmF0aW9uKQorICAgIDogR0NHTExheWVyKGNvbnRleHQpCit7CisgICAgc3dp
dGNoIChkZXN0aW5hdGlvbikgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRl
c3RpbmF0aW9uOjpPZmZzY3JlZW46CisgICAgICAgIG1fYW5nbGVDb250ZXh0ID0gQU5HTEVDb250
ZXh0OjpjcmVhdGVDb250ZXh0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpEaXJlY3RseVRvSG9zdFdpbmRvdzoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworR0NH
TEFOR0xFTGF5ZXI6On5HQ0dMQU5HTEVMYXllcigpCit7Cit9CisKK2Jvb2wgR0NHTEFOR0xFTGF5
ZXI6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgQVNTRVJUKG1fYW5nbGVDb250ZXh0KTsK
KyAgICByZXR1cm4gbV9hbmdsZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCit9CisK
K1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR0NHTEFOR0xFTGF5ZXI6OnBsYXRmb3JtQ29udGV4
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fYW5nbGVDb250ZXh0KTsKKyAgICByZXR1cm4gbV9h
bmdsZUNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBOaWNv
c2lhCisKKyNlbmRpZiAvLyBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAv
Tmljb3NpYUdDR0xBTkdMRUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjBk
MDA5YzRkYzhmOTAzOGJmYWE4NTEyZGUzMTIwYzJmN2ZiYTY0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdD
R0xBTkdMRUxheWVyLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE4LCAyMDE5IEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQK
KyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNpbmNsdWRlICJH
TENvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1
ZGUgIk5pY29zaWFHQ0dMTGF5ZXIuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisKK3R5cGVkZWYgdm9p
ZCAqRUdMQ29uZmlnOwordHlwZWRlZiB2b2lkICpFR0xDb250ZXh0OwordHlwZWRlZiB2b2lkICpF
R0xEaXNwbGF5OwordHlwZWRlZiB2b2lkICpFR0xTdXJmYWNlOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR0xDb250ZXh0OworY2xhc3MgUGxhdGZvcm1EaXNw
bGF5OworfQorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK2NsYXNzIEdDR0xBTkdMRUxheWVyIGZp
bmFsIDogcHVibGljIEdDR0xMYXllciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgY2xhc3MgQU5HTEVDb250ZXh0IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQU5HTEVDb250ZXh0KTsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBlcnJvclN0cmluZyhpbnQgc3RhdHVzQ29kZSk7CisgICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBsYXN0RXJyb3JTdHJpbmcoKTsKKworICAgICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEFOR0xFQ29udGV4dD4gY3JlYXRlQ29udGV4dCgpOworICAgICAgICB2aXJ0dWFsIH5BTkdMRUNv
bnRleHQoKTsKKworICAgICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmIEVOQUJM
RShHUkFQSElDU19DT05URVhUX0dMKQorICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OworI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAg
ICBBTkdMRUNvbnRleHQoRUdMRGlzcGxheSwgRUdMQ29udGV4dCwgRUdMU3VyZmFjZSk7CisKKyAg
ICAgICAgRUdMRGlzcGxheSBtX2Rpc3BsYXkgeyBudWxscHRyIH07CisgICAgICAgIEVHTENvbnRl
eHQgbV9jb250ZXh0IHsgbnVsbHB0ciB9OworICAgICAgICBFR0xTdXJmYWNlIG1fc3VyZmFjZSB7
IG51bGxwdHIgfTsKKyAgICB9OworCisgICAgR0NHTEFOR0xFTGF5ZXIoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVz
dGluYXRpb24pOworICAgIHZpcnR1YWwgfkdDR0xBTkdMRUxheWVyKCk7CisKKyAgICBib29sIG1h
a2VDb250ZXh0Q3VycmVudCgpIG92ZXJyaWRlOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0wgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4gbV9hbmdsZUNvbnRleHQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBOaWNvc2lhCisKKyNlbmRpZiAvLyBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jYmJhODAwNDJlZTJjYjg1MDYzZmVmYjk0MzBkNjg4NTNjMjE2NzU3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmlj
b3NpYUdDR0xMYXllci5jcHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisg
KiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk5pY29zaWFHQ0dMTGF5ZXIuaCIKKworI2lmIFVTRShOSUNPU0lBKSAm
JiBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5LmgiCisjZW5kaWYKKworI2lmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorI2VuZGlmCisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKworbmFtZXNwYWNlIE5pY29zaWEg
eworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworR0NHTExheWVyOjpHQ0dMTGF5ZXIoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkK
KyAgICAsIG1fY29udGVudExheWVyKE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29z
aWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkp
Cit7Cit9CisKK0dDR0xMYXllcjo6R0NHTExheWVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBj
b250ZXh0LCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24p
CisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fY29udGVudExheWVyKE5pY29zaWE6
OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkpCit7CisgICAgc3dpdGNoIChkZXN0aW5hdGlvbikg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpPZmZzY3Jl
ZW46CisgICAgICAgIG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250
ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRp
b246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitHQ0dMTGF5ZXI6On5HQ0dMTGF5ZXIoKQorewor
ICAgIGRvd25jYXN0PENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX2NvbnRlbnRMYXll
ci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7Cit9CisKK2Jvb2wgR0NHTExheWVyOjptYWtl
Q29udGV4dEN1cnJlbnQoKQoreworICAgIEFTU0VSVChtX2dsQ29udGV4dCk7CisgICAgcmV0dXJu
IG1fZ2xDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTCBHQ0dMTGF5ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fZ2xDb250ZXh0KTsKKyAgICByZXR1cm4gbV9nbENvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOworfQorCit2b2lkIEdDR0xMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCit7CisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbnRleHQubGF5ZXJDb21wb3Np
dGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC5wcmVwYXJlVGV4dHVyZSgp
OworICAgIEludFNpemUgdGV4dHVyZVNpemUobV9jb250ZXh0Lm1fY3VycmVudFdpZHRoLCBtX2Nv
bnRleHQubV9jdXJyZW50SGVpZ2h0KTsKKyAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdz
ID0gbV9jb250ZXh0LmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBUZXh0dXJlTWFwcGVyR0w6
OlNob3VsZEJsZW5kIDogMDsKKyNpZiBVU0UoQU5HTEUpCisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGV4dHVyZVNpemUs
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyhpbWFnZUJ1ZmZlci5nZXQoKSk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGltYWdl
QnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIGlmICghaW1hZ2Up
CisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgZmxhZ3MgfD0gVGV4dHVyZU1hcHBlckdMOjpT
aG91bGRGbGlwVGV4dHVyZTsKKyNlbmRpZgorCisgICAgeworICAgICAgICBhdXRvJiBwcm94eSA9
IGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX2NvbnRl
bnRMYXllci0+aW1wbCgpKS5wcm94eSgpOworI2lmIFVTRShBTkdMRSkKKyAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlcjsK
KyAgICAgICAgbGF5ZXJCdWZmZXIgPSBwcm94eS5nZXRBdmFpbGFibGVCdWZmZXIodGV4dHVyZVNp
emUsIG1fY29udGV4dC5tX2ludGVybmFsQ29sb3JGb3JtYXQpOworICAgICAgICBpZiAoIWxheWVy
QnVmZmVyKSB7CisgICAgICAgICAgICBhdXRvIHRleHR1cmUgPSBCaXRtYXBUZXh0dXJlR0w6OmNy
ZWF0ZShUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXM6OmdldCgpLCBmbGFncywgbV9jb250
ZXh0Lm1faW50ZXJuYWxDb2xvckZvcm1hdCk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxCaXRt
YXBUZXh0dXJlR0wmPih0ZXh0dXJlLmdldCgpKS5zZXRQZW5kaW5nQ29udGVudHMoV1RGTW92ZShp
bWFnZSkpOworICAgICAgICAgICAgbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihXVEZNb3ZlKHRleHR1cmUpLCBmbGFncyk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgbGF5ZXJCdWZmZXItPnRleHR1cmVHTCgpLnNldFBlbmRpbmdD
b250ZW50cyhXVEZNb3ZlKGltYWdlKSk7CisKKyAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJv
eHkubG9jaygpKTsKKyAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1
ZmZlcikpOworI2Vsc2UKKyAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsK
KyAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllckJ1ZmZlcj4obV9jb250ZXh0Lm1fY29tcG9zaXRvclRleHR1cmUsIHRleHR1cmVT
aXplLCBmbGFncywgbV9jb250ZXh0Lm1faW50ZXJuYWxDb2xvckZvcm1hdCkpOworI2VuZGlmCisg
ICAgfQorCisgICAgbV9jb250ZXh0Lm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyNlbmRpZgorfQor
Cit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCisKKyNlbmRpZiAvLyBVU0UoTklDT1NJQSkgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFiZjA0YmI3ZWZlYWI1NmIxOTA2YzA4YzI3ZDg1MGZmNjA2NjBjOTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1h
cC9OaWNvc2lhR0NHTExheWVyLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQK
KyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJU
ZXh0dXJlTWFwcGVySW1wbC5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgR0xDb250ZXh0OworfQorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK2NsYXNz
IEdDR0xMYXllciA6IHB1YmxpYyBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBH
Q0dMTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKKyAgICBHQ0dMTGF5
ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24pOworCisgICAgdmlydHVhbCB+R0NHTExheWVyKCk7
CisKKyAgICBDb250ZW50TGF5ZXImIGNvbnRlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudExheWVyOyB9CisgICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dDsKKworICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRleHQ7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7CisKKyAgICBS
ZWY8Q29udGVudExheWVyPiBtX2NvbnRlbnRMYXllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIE5p
Y29zaWEKKworI2VuZGlmIC8vIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IDQ5ZTEwNjlmNmZlZGE0YzNiOGJj
MmJmMDgzYjJmODdiMzA2MzIzNGUuLjVmMjgxMGM5MGJhOWIyYTNlZmE5YjY3NDViN2E5YmM0NjU5
NmVlMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC02Miw3ICs2Miw3
IEBAIHR5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlKiBJT1N1cmZhY2VSZWY7CiAKICNpZiBVU0Uo
TklDT1NJQSkKIG5hbWVzcGFjZSBOaWNvc2lhIHsKLWNsYXNzIEdDM0RMYXllcjsKK2NsYXNzIEdD
R0xMYXllcjsKIH0KICNlbmRpZgogCkBAIC03OSw3ICs3OSw3IEBAIGNsYXNzIEhvc3RXaW5kb3c7
CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEltYWdlRGF0YTsKICNpZiBVU0UoVEVYVFVSRV9N
QVBQRVIpCi1jbGFzcyBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI7CitjbGFzcyBUZXh0
dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI7CiAjZW5kaWYKIAogdHlwZWRlZiBXVEY6Okhhc2hN
YXA8Q1N0cmluZywgdWludDY0X3Q+IFNoYWRlck5hbWVIYXNoOwpAQCAtODgwLDExICs4ODAsMTEg
QEAgcHJpdmF0ZToKICAgICBMaXN0SGFzaFNldDxHQ0dMZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7
CiAKICNpZiBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGZyaWVuZCBj
bGFzcyBOaWNvc2lhOjpHQzNETGF5ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE5pY29zaWE6OkdD
M0RMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisgICAgZnJpZW5kIGNsYXNzIE5pY29zaWE6OkdDR0xM
YXllcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3NpYTo6R0NHTExheWVyPiBtX25pY29zaWFM
YXllcjsKICNlbGlmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBmcmllbmQgY2xhc3MgVGV4dHVy
ZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFw
cGVyR0MzRFBsYXRmb3JtTGF5ZXI+IG1fdGV4bWFwTGF5ZXI7CisgICAgZnJpZW5kIGNsYXNzIFRl
eHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVy
ZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPiBtX3RleG1hcExheWVyOwogI2VsaWYgIVBMQVRGT1JN
KENPQ09BKQogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZT4gbV9w
cml2YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cAppbmRleCA4ZTgwYzk5YjQ3N2NkZTVmN2M2YzA4OWJkODU1YzE0YTIwNmZlNzI3Li5jMGEyZWNi
ODc0N2MxMThmMDcwNWRmOTE4OThkNDQ5ODJlOTBmMmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2lmIEVO
QUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlIDxBTkdMRS9TaGFkZXJMYW5nLmg+CiAjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC03NSw5ICs3
NSw5IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xDb250ZXh0OwogCiAjaWYgVVNFKE5JQ09TSUEpCiAj
aWYgVVNFKEFOR0xFKQotI2luY2x1ZGUgIk5pY29zaWFHQzNEQU5HTEVMYXllci5oIgorI2luY2x1
ZGUgIk5pY29zaWFHQ0dMQU5HTEVMYXllci5oIgogI2Vsc2UKLSNpbmNsdWRlICJOaWNvc2lhR0Mz
RExheWVyLmgiCisjaW5jbHVkZSAiTmljb3NpYUdDR0xMYXllci5oIgogI2VuZGlmCiAjZW5kaWYK
IApAQCAtMTM1LDkgKzEzNSw5IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiB7CiAgICAgQVNT
RVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7CiAjaWYgVVNFKE5JQ09T
SUEpCi0gICAgbV9uaWNvc2lhTGF5ZXIgPSBXVEY6Om1ha2VVbmlxdWU8Tmljb3NpYTo6R0MzREFO
R0xFTGF5ZXI+KCp0aGlzLCBkZXN0aW5hdGlvbik7CisgICAgbV9uaWNvc2lhTGF5ZXIgPSBXVEY6
Om1ha2VVbmlxdWU8Tmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzLCBkZXN0aW5hdGlvbik7
CiAjZWxzZQotICAgIG1fdGV4bWFwTGF5ZXIgPSBXVEY6Om1ha2VVbmlxdWU8VGV4dHVyZU1hcHBl
ckdDM0RQbGF0Zm9ybUxheWVyPigqdGhpcywgZGVzdGluYXRpb24pOworICAgIG1fdGV4bWFwTGF5
ZXIgPSBXVEY6Om1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhp
cywgZGVzdGluYXRpb24pOwogI2VuZGlmCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKQEAg
LTIwOCw5ICsyMDgsOSBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogewogICAgIEFTU0VSVF9V
TlVTRUQoc2hhcmVkQ29udGV4dCwgIXNoYXJlZENvbnRleHQpOwogI2lmIFVTRShOSUNPU0lBKQot
ICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxOaWNvc2lhOjpHQzNETGF5ZXI+KCp0aGlz
LCBkZXN0aW5hdGlvbik7CisgICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6
OkdDR0xMYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKICNlbHNlCi0gICAgbV90ZXhtYXBMYXll
ciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPigqdGhpcywgZGVz
dGluYXRpb24pOworICAgIG1fdGV4bWFwTGF5ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJH
Q0dMUGxhdGZvcm1MYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKICNlbmRpZgogCiAgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRm
b3JtTGF5ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmJlMDU3MTRlYTFm
YmYwYzEwY2FmNDczODUzNmI4NWQ5YTc3N2YzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTcgSWdhbGlh
IFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICog
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaCIKLQotI2lm
IEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmICFV
U0UoTklDT1NJQSkKLQotI2luY2x1ZGUgIkJpdG1hcFRleHR1cmVHTC5oIgotI2luY2x1ZGUgIkdM
Q29udGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTEhlYWRlcnMuaCIKLSNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1UZXh0
dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OlRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXll
cihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi17
Ci0gICAgc3dpdGNoIChkZXN0aW5hdGlvbikgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46Ci0gICAgICAgIG1fZ2xDb250ZXh0ID0gR0xD
b250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERp
c3BsYXlGb3JDb21wb3NpdGluZygpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRv
cHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkoKSk7Ci0jZW5kaWYKLX0K
LQotVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjp+VGV4dHVyZU1hcHBlckdDM0RQbGF0
Zm9ybUxheWVyKCkKLXsKLSNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChj
bGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPnBsYXRmb3JtTGF5ZXJXaWxsQmVEZXN0cm95ZWQo
KTsKLSNlbmRpZgotfQotCi1ib29sIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6bWFr
ZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBBU1NFUlQobV9nbENvbnRleHQpOwotICAgIHJldHVy
biBtX2dsQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0KLVBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0wgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjpwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2dsQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1fZ2xD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKLVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBUZXh0dXJlTWFw
cGVyR0MzRFBsYXRmb3JtTGF5ZXI6OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0
Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJHQzNEUGxh
dGZvcm1MYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fY29udGV4dC5s
YXllckNvbXBvc2l0ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LnByZXBh
cmVUZXh0dXJlKCk7Ci0gICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9jdXJyZW50
V2lkdGgsIG1fY29udGV4dC5tX2N1cnJlbnRIZWlnaHQpOwotICAgIFRleHR1cmVNYXBwZXJHTDo6
RmxhZ3MgZmxhZ3MgPSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEZsaXBUZXh0dXJlIHwgKG1fY29u
dGV4dC5tX2F0dHJzLmFscGhhID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6IDApOwot
Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX3BsYXRmb3JtTGF5ZXJQcm94eS0+
bG9jaygpKTsKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHktPnB1c2hOZXh0QnVmZmVyKG1h
a2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29udGV4dC5tX2Nv
bXBvc2l0b3JUZXh0dXJlLCB0ZXh0dXJlU2l6ZSwgZmxhZ3MsIG1fY29udGV4dC5tX2ludGVybmFs
Q29sb3JGb3JtYXQpKTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQubWFya0xheWVyQ29tcG9zaXRl
ZCgpOwotfQotI2Vsc2UKLXZvaWQgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjpwYWlu
dFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZs
b2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fZ2xDb250ZXh0KTsKLQotICAgIG1fY29udGV4
dC5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0g
ICAgYXV0byBhdHRycyA9IG1fY29udGV4dC5jb250ZXh0QXR0cmlidXRlcygpOwotICAgIEFTU0VS
VChtX2NvbnRleHQubV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9jb250ZXh0Lm1fc3RhdGUuYm91
bmREcmF3RkJPKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fY29udGV4dC5tX3N0YXRl
LmJvdW5kRHJhd0ZCTyA9PSBtX2NvbnRleHQubV9tdWx0aXNhbXBsZUZCTykgewotICAgICAgICBH
TENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwot
ICAgICAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0ICE9IG1fZ2xDb250ZXh0LmdldCgpKQot
ICAgICAgICAgICAgbV9jb250ZXh0Lm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgICAgIG1f
Y29udGV4dC5yZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkZSQU1FQlVGRkVSLCBtX2Nv
bnRleHQubV9zdGF0ZS5ib3VuZERyYXdGQk8pOwotCi0gICAgICAgIGlmIChwcmV2aW91c0FjdGl2
ZUNvbnRleHQgJiYgcHJldmlvdXNBY3RpdmVDb250ZXh0ICE9IG1fZ2xDb250ZXh0LmdldCgpKQot
ICAgICAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICB9Ci0KLSAgICBUZXh0dXJlTWFwcGVyR0wmIHRleG1hcEdMID0gc3RhdGljX2Nhc3Q8VGV4
dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcik7Ci0gICAgVGV4dHVyZU1hcHBlckdMOjpGbGFn
cyBmbGFncyA9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUgfCAoYXR0cnMuYWxw
aGEgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMCk7Ci0gICAgSW50U2l6ZSB0ZXh0
dXJlU2l6ZShtX2NvbnRleHQubV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJlbnRIZWln
aHQpOwotICAgIHRleG1hcEdMLmRyYXdUZXh0dXJlKG1fY29udGV4dC5tX3RleHR1cmUsIGZsYWdz
LCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLSNlbmRpZiAvLyBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCi19Ci0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZv
cm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwY2Y2MGY1NzNkOGJmNmVlODcyYTkyNDM2ZDBmNTI5ZjkwN2Q5NDU5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIs
IDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZQotICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShURVhU
VVJFX01BUFBFUikgJiYgIVVTRShOSUNPU0lBKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5UHJvdmlkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHTENv
bnRleHQ7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OwotCi1jbGFzcyBU
ZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIgOiBwdWJsaWMgUGxhdGZvcm1MYXllciB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBlckdD
M0RQbGF0Zm9ybUxheWVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkRlc3RpbmF0aW9uKTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyR0MzRFBs
YXRmb3JtTGF5ZXIoKTsKLQotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKLQotI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZmZXJz
SWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0
dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotCi1wcml2YXRl
OgotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRleHQ7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPEdMQ29udGV4dD4gbV9nbENvbnRleHQ7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxh
dGZvcm1MYXllclByb3h5OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45MDgwNWZiNTk3YjkxMmQ5ZGQ0MmQ4NTUzYzU0MDcxYTEzZWQzMTEwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19D
T05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmICFVU0UoTklDT1NJQSkKKworI2lu
Y2x1ZGUgIkJpdG1hcFRleHR1cmVHTC5oIgorI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJHTEhlYWRlcnMuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0dXJlTWFwcGVyR0NHTFBsYXRm
b3JtTGF5ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uIGRl
c3RpbmF0aW9uKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCit7CisgICAgc3dpdGNoIChkZXN0
aW5hdGlvbikgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9u
OjpPZmZzY3JlZW46CisgICAgICAgIG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZz
Y3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGlu
ZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHkoKSk7CisjZW5kaWYKK30KKworVGV4dHVyZU1hcHBlckdD
R0xQbGF0Zm9ybUxheWVyOjp+VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyKCkKK3sKKyNp
ZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAg
Y2xpZW50KCktPnBsYXRmb3JtTGF5ZXJXaWxsQmVEZXN0cm95ZWQoKTsKKyNlbmRpZgorfQorCiti
b29sIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjo6bWFrZUNvbnRleHRDdXJyZW50KCkK
K3sKKyAgICBBU1NFUlQobV9nbENvbnRleHQpOworICAgIHJldHVybiBtX2dsQ29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgVGV4dHVy
ZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAg
IEFTU0VSVChtX2dsQ29udGV4dCk7CisgICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKK30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK1JlZlB0cjxUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5
ZXI6OnByb3h5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29w
eVJlZigpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjo6c3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fY29udGV4dC5sYXllckNvbXBvc2l0ZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LnByZXBhcmVUZXh0dXJlKCk7CisgICAg
SW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC5t
X2N1cnJlbnRIZWlnaHQpOworICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSBUZXh0
dXJlTWFwcGVyR0w6OlNob3VsZEZsaXBUZXh0dXJlIHwgKG1fY29udGV4dC5tX2F0dHJzLmFscGhh
ID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6IDApOworCisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGhvbGRlcihtX3BsYXRmb3JtTGF5ZXJQcm94eS0+bG9jaygpKTsKKyAgICAgICAg
bV9wbGF0Zm9ybUxheWVyUHJveHktPnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29udGV4dC5tX2NvbXBvc2l0b3JUZXh0dXJlLCB0
ZXh0dXJlU2l6ZSwgZmxhZ3MsIG1fY29udGV4dC5tX2ludGVybmFsQ29sb3JGb3JtYXQpKTsKKyAg
ICB9CisKKyAgICBtX2NvbnRleHQubWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorI2Vsc2UKK3Zv
aWQgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7Cisg
ICAgQVNTRVJUKG1fZ2xDb250ZXh0KTsKKworICAgIG1fY29udGV4dC5tYXJrTGF5ZXJDb21wb3Np
dGVkKCk7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgYXV0byBhdHRycyA9IG1f
Y29udGV4dC5jb250ZXh0QXR0cmlidXRlcygpOworICAgIEFTU0VSVChtX2NvbnRleHQubV9zdGF0
ZS5ib3VuZFJlYWRGQk8gPT0gbV9jb250ZXh0Lm1fc3RhdGUuYm91bmREcmF3RkJPKTsKKyAgICBp
ZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fY29udGV4dC5tX3N0YXRlLmJvdW5kRHJhd0ZCTyA9PSBt
X2NvbnRleHQubV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICBHTENvbnRleHQqIHByZXZpb3Vz
QWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgICAgICBpZiAocHJldmlv
dXNBY3RpdmVDb250ZXh0ICE9IG1fZ2xDb250ZXh0LmdldCgpKQorICAgICAgICAgICAgbV9jb250
ZXh0Lm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgICAgIG1fY29udGV4dC5yZXNvbHZlTXVs
dGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OkZSQU1FQlVGRkVSLCBtX2NvbnRleHQubV9zdGF0ZS5ib3Vu
ZERyYXdGQk8pOworCisgICAgICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQgJiYgcHJldmlv
dXNBY3RpdmVDb250ZXh0ICE9IG1fZ2xDb250ZXh0LmdldCgpKQorICAgICAgICAgICAgcHJldmlv
dXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB9CisKKyAgICBUZXh0
dXJlTWFwcGVyR0wmIHRleG1hcEdMID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4
dHVyZU1hcHBlcik7CisgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IFRleHR1cmVN
YXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUgfCAoYXR0cnMuYWxwaGEgPyBUZXh0dXJlTWFwcGVy
R0w6OlNob3VsZEJsZW5kIDogMCk7CisgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQu
bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJlbnRIZWlnaHQpOworICAgIHRleG1hcEdM
LmRyYXdUZXh0dXJlKG1fY29udGV4dC5tX3RleHR1cmUsIGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFy
Z2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpCit9CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZv
cm1MYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhMDYyMzNmMzI3OGQ0NDc4MmNhOWYyYmMyODVjNjYxMGRi
MjEyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmgKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxNyBJZ2FsaWEgUy5MLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiAgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5J
Q09TSUEpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5o
IgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdMQ29udGV4dDsKK2NsYXNzIFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHk7CisKK2NsYXNzIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZv
cm1MYXllciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24p
OworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcigpOworCisgICAg
Ym9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwor
I2Vsc2UKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBl
ciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wmIG1fY29udGV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBtX2ds
Q29udGV4dDsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7CisjZW5k
aWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHUkFQ
SElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>