<?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>114108</bug_id>
          
          <creation_ts>2013-04-06 17:23:26 -0700</creation_ts>
          <short_desc>Get rid of skia</short_desc>
          <delta_ts>2013-04-06 18:31:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>dino</cc>
    
    <cc>junov</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>870393</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-06 17:23:26 -0700</bug_when>
    <thetext>Get rid of skia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870394</commentid>
    <comment_count>1</comment_count>
      <attachid>196764</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-06 17:25:51 -0700</bug_when>
    <thetext>Created attachment 196764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870401</commentid>
    <comment_count>2</comment_count>
      <attachid>196764</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-06 18:31:16 -0700</bug_when>
    <thetext>Comment on attachment 196764
Patch

Clearing flags on attachment: 196764

Committed r147864: &lt;http://trac.webkit.org/changeset/147864&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870402</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-06 18:31:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196764</attachid>
            <date>2013-04-06 17:25:51 -0700</date>
            <delta_ts>2013-04-06 18:31:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114108-20130406172532.patch</filename>
            <type>text/plain</type>
            <size>372008</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3ODYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQxZTE1OWM2NzFmM2Rm
MmQwODQ2MmMwNGVhNzhjZDcwNGQ0ODlhMi4uZjk0MGZlNjlhMzQxZmEwZjU3YmJlOWE4NjkyOTcx
MzkxNmQwOTk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE3IEBACiAyMDEzLTA0LTA2ICBCZW5q
YW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAorICAgICAgICBHZXQgcmlkIG9m
IHNraWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
NDEwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhLyo6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS8qOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3NraWEvKjogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNv
ZGVycy9za2lhLyo6IFJlbW92ZWQuCisKKzIwMTMtMDQtMDYgIEJlbmphbWluIFBvdWxhaW4gIDxi
ZW5qYW1pbkB3ZWJraXQub3JnPgorCiAgICAgICAgIFJlbW92ZSB0aGUgY2hyb21pdW0gY29kZSBm
cm9tIHBsYXRmb3JtL2dyYXBoaWNzL21hYwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTE0MTA3CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9Ecm9wU2hhZG93SW1hZ2VGaWx0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0Ryb3BTaGFkb3dJ
bWFnZUZpbHRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZTJiZGJiYThh
ZWRmMmNjYjdhNzFlZjdmOGYzZjdiMDdhOTNlMmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9za2lhL0Ryb3BTaGFkb3dJbWFnZUZpbHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkRyb3BTaGFk
b3dJbWFnZUZpbHRlci5oIgotCi0jaW5jbHVkZSAiU2tCaXRtYXAuaCIKLSNpbmNsdWRlICJTa0Js
dXJJbWFnZUZpbHRlci5oIgotI2luY2x1ZGUgIlNrQ2FudmFzLmgiCi0jaW5jbHVkZSAiU2tDb2xv
ck1hdHJpeEZpbHRlci5oIgotI2luY2x1ZGUgIlNrRGV2aWNlLmgiCi0jaW5jbHVkZSAiU2tGbGF0
dGVuYWJsZUJ1ZmZlcnMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Ecm9wU2hhZG93SW1h
Z2VGaWx0ZXI6OkRyb3BTaGFkb3dJbWFnZUZpbHRlcihTa1NjYWxhciBkeCwgU2tTY2FsYXIgZHks
IFNrU2NhbGFyIHNpZ21hLCBTa0NvbG9yIGNvbG9yLCBTa0ltYWdlRmlsdGVyKiBpbnB1dCkKLSAg
ICA6IFNrSW1hZ2VGaWx0ZXIoaW5wdXQpCi0gICAgLCBtX2R4KGR4KQotICAgICwgbV9keShkeSkK
LSAgICAsIG1fc2lnbWEoc2lnbWEpCi0gICAgLCBtX2NvbG9yKGNvbG9yKQotewotfQotCi1Ecm9w
U2hhZG93SW1hZ2VGaWx0ZXI6OkRyb3BTaGFkb3dJbWFnZUZpbHRlcihTa0ZsYXR0ZW5hYmxlUmVh
ZEJ1ZmZlciYgYnVmZmVyKSA6IFNrSW1hZ2VGaWx0ZXIoYnVmZmVyKQotewotICAgIG1fZHggPSBi
dWZmZXIucmVhZFNjYWxhcigpOwotICAgIG1fZHkgPSBidWZmZXIucmVhZFNjYWxhcigpOwotICAg
IG1fc2lnbWEgPSBidWZmZXIucmVhZFNjYWxhcigpOwotICAgIG1fY29sb3IgPSBidWZmZXIucmVh
ZENvbG9yKCk7Ci19Ci0KLXZvaWQgRHJvcFNoYWRvd0ltYWdlRmlsdGVyOjpmbGF0dGVuKFNrRmxh
dHRlbmFibGVXcml0ZUJ1ZmZlciYgYnVmZmVyKSBjb25zdAotewotICAgIGJ1ZmZlci53cml0ZVNj
YWxhcihtX2R4KTsKLSAgICBidWZmZXIud3JpdGVTY2FsYXIobV9keSk7Ci0gICAgYnVmZmVyLndy
aXRlU2NhbGFyKG1fc2lnbWEpOwotICAgIGJ1ZmZlci53cml0ZUNvbG9yKG1fY29sb3IpOwotfQot
Ci1ib29sIERyb3BTaGFkb3dJbWFnZUZpbHRlcjo6b25GaWx0ZXJJbWFnZShQcm94eSogcHJveHks
IGNvbnN0IFNrQml0bWFwJiBzb3VyY2UsIGNvbnN0IFNrTWF0cml4JiBtYXRyaXgsIFNrQml0bWFw
KiByZXN1bHQsIFNrSVBvaW50KiBsb2MpCi17Ci0gICAgU2tCaXRtYXAgc3JjID0gdGhpcy0+Z2V0
SW5wdXRSZXN1bHQoMCwgcHJveHksIHNvdXJjZSwgbWF0cml4LCBsb2MpOwotICAgIFNrQXV0b1RV
bnJlZjxTa0RldmljZT4gZGV2aWNlKHByb3h5LT5jcmVhdGVEZXZpY2Uoc3JjLndpZHRoKCksIHNy
Yy5oZWlnaHQoKSkpOwotICAgIFNrQ2FudmFzIGNhbnZhcyhkZXZpY2UuZ2V0KCkpOwotCi0gICAg
U2tBdXRvVFVucmVmPFNrSW1hZ2VGaWx0ZXI+IGJsdXJGaWx0ZXIobmV3IFNrQmx1ckltYWdlRmls
dGVyKG1fc2lnbWEsIG1fc2lnbWEpKTsKLSAgICBTa0F1dG9UVW5yZWY8U2tDb2xvckZpbHRlcj4g
Y29sb3JGaWx0ZXIoU2tDb2xvckZpbHRlcjo6Q3JlYXRlTW9kZUZpbHRlcihtX2NvbG9yLCBTa1hm
ZXJtb2RlOjprU3JjSW5fTW9kZSkpOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgcGFpbnQuc2V0
SW1hZ2VGaWx0ZXIoYmx1ckZpbHRlci5nZXQoKSk7Ci0gICAgcGFpbnQuc2V0Q29sb3JGaWx0ZXIo
Y29sb3JGaWx0ZXIuZ2V0KCkpOwotICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShTa1hmZXJtb2Rl
OjprU3JjT3Zlcl9Nb2RlKTsKLSAgICBjYW52YXMuc2F2ZUxheWVyKDAsICZwYWludCk7Ci0gICAg
Y2FudmFzLmRyYXdCaXRtYXAoc3JjLCBtX2R4LCAtbV9keSk7Ci0gICAgY2FudmFzLnJlc3RvcmUo
KTsKLSAgICBjYW52YXMuZHJhd0JpdG1hcChzcmMsIDAsIDApOwotICAgICpyZXN1bHQgPSBkZXZp
Y2UuZ2V0KCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nr
aWEvRHJvcFNoYWRvd0ltYWdlRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NraWEvRHJvcFNoYWRvd0ltYWdlRmlsdGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDQ1YjExN2JkN2JkM2IxMmNkMmIwZWYxMjNhN2FmOTgyMGRmZTY3MDYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0Ryb3BTaGFkb3dJbWFnZUZpbHRl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJTa0Nv
bG9yLmgiCi0jaW5jbHVkZSAiU2tJbWFnZUZpbHRlci5oIgotI2luY2x1ZGUgIlNrU2NhbGFyLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRHJvcFNoYWRvd0ltYWdlRmlsdGVyIDog
cHVibGljIFNrSW1hZ2VGaWx0ZXIgewotcHVibGljOgotICAgIERyb3BTaGFkb3dJbWFnZUZpbHRl
cihTa1NjYWxhciBkeCwgU2tTY2FsYXIgZHksIFNrU2NhbGFyIHNpZ21hLCBTa0NvbG9yLCBTa0lt
YWdlRmlsdGVyKiBpbnB1dCA9IDApOwotICAgIFNLX0RFQ0xBUkVfUFVCTElDX0ZMQVRURU5BQkxF
X0RFU0VSSUFMSVpBVElPTl9QUk9DUyhEcm9wU2hhZG93SW1hZ2VGaWx0ZXIpCi0KLXByb3RlY3Rl
ZDoKLSAgICBleHBsaWNpdCBEcm9wU2hhZG93SW1hZ2VGaWx0ZXIoU2tGbGF0dGVuYWJsZVJlYWRC
dWZmZXImKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmxhdHRlbihTa0ZsYXR0ZW5hYmxlV3JpdGVCdWZm
ZXImKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgb25GaWx0ZXJJbWFnZShQcm94
eSosIGNvbnN0IFNrQml0bWFwJiBzb3VyY2UsIGNvbnN0IFNrTWF0cml4JiwgU2tCaXRtYXAqIHJl
c3VsdCwgU2tJUG9pbnQqIGxvYykgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgU2tTY2FsYXIg
bV9keCwgbV9keSwgbV9zaWdtYTsKLSAgICBTa0NvbG9yIG1fY29sb3I7Ci19OwotCi19OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZF
QmxlbmRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c2tpYS9GRUJsZW5kU2tpYS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOWQ4
Mjg3ODBiMzUxYWExZjJiYTVhMTVhZDIxMzFlMDA3YmExYmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9za2lhL0ZFQmxlbmRTa2lhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEZJTFRFUlMp
Ci0jaW5jbHVkZSAiRkVCbGVuZC5oIgotCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCi0j
aW5jbHVkZSAiU2tCaXRtYXBTb3VyY2UuaCIKLSNpbmNsdWRlICJTa0JsZW5kSW1hZ2VGaWx0ZXIu
aCIKLSNpbmNsdWRlICJTa2lhSW1hZ2VGaWx0ZXJCdWlsZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIFNrQmxlbmRJbWFnZUZpbHRlcjo6TW9kZSB0b1NraWFNb2RlKEJsZW5k
TW9kZVR5cGUgbW9kZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEZFQkxFTkRf
TU9ERV9OT1JNQUw6Ci0gICAgICAgIHJldHVybiBTa0JsZW5kSW1hZ2VGaWx0ZXI6OmtOb3JtYWxf
TW9kZTsKLSAgICBjYXNlIEZFQkxFTkRfTU9ERV9NVUxUSVBMWToKLSAgICAgICAgcmV0dXJuIFNr
QmxlbmRJbWFnZUZpbHRlcjo6a011bHRpcGx5X01vZGU7Ci0gICAgY2FzZSBGRUJMRU5EX01PREVf
U0NSRUVOOgotICAgICAgICByZXR1cm4gU2tCbGVuZEltYWdlRmlsdGVyOjprU2NyZWVuX01vZGU7
Ci0gICAgY2FzZSBGRUJMRU5EX01PREVfREFSS0VOOgotICAgICAgICByZXR1cm4gU2tCbGVuZElt
YWdlRmlsdGVyOjprRGFya2VuX01vZGU7Ci0gICAgY2FzZSBGRUJMRU5EX01PREVfTElHSFRFTjoK
LSAgICAgICAgcmV0dXJuIFNrQmxlbmRJbWFnZUZpbHRlcjo6a0xpZ2h0ZW5fTW9kZTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gU2tCbGVuZEltYWdlRmlsdGVyOjprTm9ybWFsX01vZGU7
Ci0gICAgfQotfQotCi1ib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTa2lhKCkKLXsKLSAgICAv
LyBGb3Igbm93LCBvbmx5IHVzZSB0aGUgc2tpYSBpbXBsZW1lbnRhdGlvbiBmb3IgYWNjZWxlcmF0
ZWQgcmVuZGVyaW5nLgotICAgIGlmIChmaWx0ZXIoKS0+cmVuZGVyaW5nTW9kZSgpICE9IEFjY2Vs
ZXJhdGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsK
LQotICAgIGlmICghaW4gfHwgIWluMikgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
aWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPElt
YWdlPiBmb3JlZ3JvdW5kID0gaW4tPmFzSW1hZ2VCdWZmZXIoKS0+Y29weUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKLSAgICBSZWZQdHI8SW1hZ2U+IGJhY2tncm91bmQgPSBpbjItPmFzSW1h
Z2VCdWZmZXIoKS0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIFJlZlB0
cjxOYXRpdmVJbWFnZVNraWE+IGZvcmVncm91bmROYXRpdmVJbWFnZSA9IGZvcmVncm91bmQtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlU2tpYT4g
YmFja2dyb3VuZE5hdGl2ZUltYWdlID0gYmFja2dyb3VuZC0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKLQotICAgIGlmICghZm9yZWdyb3VuZE5hdGl2ZUltYWdlIHx8ICFiYWNrZ3JvdW5k
TmF0aXZlSW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNrQml0bWFwIGZvcmVn
cm91bmRCaXRtYXAgPSBmb3JlZ3JvdW5kTmF0aXZlSW1hZ2UtPmJpdG1hcCgpOwotICAgIFNrQml0
bWFwIGJhY2tncm91bmRCaXRtYXAgPSBiYWNrZ3JvdW5kTmF0aXZlSW1hZ2UtPmJpdG1hcCgpOwot
Ci0gICAgU2tBdXRvVFVucmVmPFNrSW1hZ2VGaWx0ZXI+IGJhY2tncm91bmRTb3VyY2UobmV3IFNr
Qml0bWFwU291cmNlKGJhY2tncm91bmRCaXRtYXApKTsKLSAgICBTa0JsZW5kSW1hZ2VGaWx0ZXI6
Ok1vZGUgbW9kZSA9IHRvU2tpYU1vZGUobV9tb2RlKTsKLSAgICBTa0F1dG9UVW5yZWY8U2tJbWFn
ZUZpbHRlcj4gYmxlbmQobmV3IFNrQmxlbmRJbWFnZUZpbHRlcihtb2RlLCBiYWNrZ3JvdW5kU291
cmNlKSk7Ci0gICAgU2tQYWludCBwYWludDsKLSAgICBwYWludC5zZXRJbWFnZUZpbHRlcihibGVu
ZCk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdC
aXRtYXAoZm9yZWdyb3VuZEJpdG1hcCwgMCwgMCwgJnBhaW50KTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotU2tJbWFnZUZpbHRlciogRkVCbGVuZDo6Y3JlYXRlSW1hZ2VGaWx0ZXIoU2tpYUltYWdl
RmlsdGVyQnVpbGRlciogYnVpbGRlcikKLXsKLSAgICBTa0F1dG9UVW5yZWY8U2tJbWFnZUZpbHRl
cj4gZm9yZWdyb3VuZChidWlsZGVyLT5idWlsZChpbnB1dEVmZmVjdCgwKSkpOwotICAgIFNrQXV0
b1RVbnJlZjxTa0ltYWdlRmlsdGVyPiBiYWNrZ3JvdW5kKGJ1aWxkZXItPmJ1aWxkKGlucHV0RWZm
ZWN0KDEpKSk7Ci0gICAgU2tCbGVuZEltYWdlRmlsdGVyOjpNb2RlIG1vZGUgPSB0b1NraWFNb2Rl
KG1fbW9kZSk7Ci0gICAgcmV0dXJuIG5ldyBTa0JsZW5kSW1hZ2VGaWx0ZXIobW9kZSwgYmFja2dy
b3VuZCwgZm9yZWdyb3VuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShGSUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29sb3JNYXRyaXhTa2lhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUNvbG9yTWF0cml4U2tpYS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MTlkMGM2ZDY1MmU5ZWU3MjJjYTZkNjNi
M2ViYWQ5ZDIwNTFmYzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29s
b3JNYXRyaXhTa2lhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2lmIEVOQUJMRShGSUxURVJTKSAmJiBVU0UoU0tJQSkKLSNp
bmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCi0KLSNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIK
LSNpbmNsdWRlICJTa0NvbG9yRmlsdGVySW1hZ2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJTa0NvbG9y
TWF0cml4RmlsdGVyLmgiCi0jaW5jbHVkZSAiU2tpYUltYWdlRmlsdGVyQnVpbGRlci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIHNhdHVyYXRlTWF0cml4KGZsb2F0IHMs
IFNrU2NhbGFyIG1hdHJpeFsyMF0pCi17Ci0gICAgbWF0cml4WzBdID0gMC4yMTNmICsgMC43ODdm
ICogczsKLSAgICBtYXRyaXhbMV0gPSAwLjcxNWYgLSAwLjcxNWYgKiBzOwotICAgIG1hdHJpeFsy
XSA9IDAuMDcyZiAtIDAuMDcyZiAqIHM7Ci0gICAgbWF0cml4WzNdID0gbWF0cml4WzRdID0gMDsK
LSAgICBtYXRyaXhbNV0gPSAwLjIxM2YgLSAwLjIxM2YgKiBzOwotICAgIG1hdHJpeFs2XSA9IDAu
NzE1ZiArIDAuMjg1ZiAqIHM7Ci0gICAgbWF0cml4WzddID0gMC4wNzJmIC0gMC4wNzJmICogczsK
LSAgICBtYXRyaXhbOF0gPSBtYXRyaXhbOV0gPSAwOwotICAgIG1hdHJpeFsxMF0gPSAwLjIxM2Yg
LSAwLjIxM2YgKiBzOwotICAgIG1hdHJpeFsxMV0gPSAwLjcxNWYgLSAwLjcxNWYgKiBzOwotICAg
IG1hdHJpeFsxMl0gPSAwLjA3MmYgKyAwLjkyOGYgKiBzOwotICAgIG1hdHJpeFsxM10gPSBtYXRy
aXhbMTRdID0gMDsKLSAgICBtYXRyaXhbMTVdID0gbWF0cml4WzE2XSA9IG1hdHJpeFsxN10gPSAw
OwotICAgIG1hdHJpeFsxOF0gPSAxOwotICAgIG1hdHJpeFsxOV0gPSAwOwotfQotCi1zdGF0aWMg
dm9pZCBodWVSb3RhdGVNYXRyaXgoZmxvYXQgaHVlLCBTa1NjYWxhciBtYXRyaXhbMjBdKQotewot
ICAgIGZsb2F0IGNvc0h1ZSA9IGNvc2YoaHVlICogcGlGbG9hdCAvIDE4MCk7IAotICAgIGZsb2F0
IHNpbkh1ZSA9IHNpbmYoaHVlICogcGlGbG9hdCAvIDE4MCk7IAotICAgIG1hdHJpeFswXSA9IDAu
MjEzZiArIGNvc0h1ZSAqIDAuNzg3ZiAtIHNpbkh1ZSAqIDAuMjEzZjsKLSAgICBtYXRyaXhbMV0g
PSAwLjcxNWYgLSBjb3NIdWUgKiAwLjcxNWYgLSBzaW5IdWUgKiAwLjcxNWY7Ci0gICAgbWF0cml4
WzJdID0gMC4wNzJmIC0gY29zSHVlICogMC4wNzJmICsgc2luSHVlICogMC45MjhmOwotICAgIG1h
dHJpeFszXSA9IG1hdHJpeFs0XSA9IDA7Ci0gICAgbWF0cml4WzVdID0gMC4yMTNmIC0gY29zSHVl
ICogMC4yMTNmICsgc2luSHVlICogMC4xNDNmOwotICAgIG1hdHJpeFs2XSA9IDAuNzE1ZiArIGNv
c0h1ZSAqIDAuMjg1ZiArIHNpbkh1ZSAqIDAuMTQwZjsKLSAgICBtYXRyaXhbN10gPSAwLjA3MmYg
LSBjb3NIdWUgKiAwLjA3MmYgLSBzaW5IdWUgKiAwLjI4M2Y7Ci0gICAgbWF0cml4WzhdID0gbWF0
cml4WzldID0gMDsKLSAgICBtYXRyaXhbMTBdID0gMC4yMTNmIC0gY29zSHVlICogMC4yMTNmIC0g
c2luSHVlICogMC43ODdmOwotICAgIG1hdHJpeFsxMV0gPSAwLjcxNWYgLSBjb3NIdWUgKiAwLjcx
NWYgKyBzaW5IdWUgKiAwLjcxNWY7Ci0gICAgbWF0cml4WzEyXSA9IDAuMDcyZiArIGNvc0h1ZSAq
IDAuOTI4ZiArIHNpbkh1ZSAqIDAuMDcyZjsKLSAgICBtYXRyaXhbMTNdID0gbWF0cml4WzE0XSA9
IDA7Ci0gICAgbWF0cml4WzE1XSA9IG1hdHJpeFsxNl0gPSBtYXRyaXhbMTddID0gMDsKLSAgICBt
YXRyaXhbMThdID0gMTsKLSAgICBtYXRyaXhbMTldID0gMDsKLX0KLQotc3RhdGljIHZvaWQgbHVt
aW5hbmNlVG9BbHBoYU1hdHJpeChTa1NjYWxhciBtYXRyaXhbMjBdKQotewotICAgIG1lbXNldCht
YXRyaXgsIDAsIDIwICogc2l6ZW9mKFNrU2NhbGFyKSk7Ci0gICAgbWF0cml4WzE1XSA9IDAuMjEy
NWY7Ci0gICAgbWF0cml4WzE2XSA9IDAuNzE1NGY7Ci0gICAgbWF0cml4WzE3XSA9IDAuMDcyMWY7
Ci19Ci0KLXN0YXRpYyBTa0NvbG9yRmlsdGVyKiBjcmVhdGVDb2xvckZpbHRlcihDb2xvck1hdHJp
eFR5cGUgdHlwZSwgY29uc3QgZmxvYXQqIHZhbHVlcykKLXsKLSAgICBTa1NjYWxhciBtYXRyaXhb
MjBdOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VO
S05PV046Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WDoKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDsgKytpKQotICAgICAgICAgICAgbWF0
cml4W2ldID0gdmFsdWVzW2ldOwotCi0gICAgICAgIG1hdHJpeFs0XSAqPSBTa1NjYWxhcigyNTUp
OwotICAgICAgICBtYXRyaXhbOV0gKj0gU2tTY2FsYXIoMjU1KTsKLSAgICAgICAgbWF0cml4WzE0
XSAqPSBTa1NjYWxhcigyNTUpOwotICAgICAgICBtYXRyaXhbMTldICo9IFNrU2NhbGFyKDI1NSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAK
LSAgICAgICAgc2F0dXJhdGVNYXRyaXgodmFsdWVzWzBdLCBtYXRyaXgpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGh1ZVJv
dGF0ZU1hdHJpeCh2YWx1ZXNbMF0sIG1hdHJpeCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGx1bWluYW5jZVRv
QWxwaGFNYXRyaXgobWF0cml4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBu
ZXcgU2tDb2xvck1hdHJpeEZpbHRlcihtYXRyaXgpOwotfQotCi1ib29sIEZFQ29sb3JNYXRyaXg6
OnBsYXRmb3JtQXBwbHlTa2lhKCkKLXsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LQotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpKTsKLQotICAgIFNrQXV0b1RVbnJlZjxTa0NvbG9yRmlsdGVyPiBmaWx0ZXIoY3JlYXRl
Q29sb3JGaWx0ZXIobV90eXBlLCBtX3ZhbHVlcy5kYXRhKCkpKTsKLQotICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSBpbi0+YXNJbWFnZUJ1ZmZlcigpLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOwotICAgIFJlZlB0cjxOYXRpdmVJbWFnZVNraWE+IG5hdGl2ZUltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBwYWludC5zZXRD
b2xvckZpbHRlcihmaWx0ZXIpOwotICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShTa1hmZXJtb2Rl
OjprU3JjX01vZGUpOwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpLT5kcmF3Qml0bWFwKG5hdGl2ZUltYWdlLT5iaXRtYXAoKSwgMCwgMCwgJnBhaW50KTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotU2tJbWFnZUZpbHRlciogRkVDb2xvck1hdHJpeDo6Y3JlYXRl
SW1hZ2VGaWx0ZXIoU2tpYUltYWdlRmlsdGVyQnVpbGRlciogYnVpbGRlcikKLXsKLSAgICBTa0F1
dG9UVW5yZWY8U2tJbWFnZUZpbHRlcj4gaW5wdXQoYnVpbGRlci0+YnVpbGQoaW5wdXRFZmZlY3Qo
MCkpKTsKLSAgICBTa0F1dG9UVW5yZWY8U2tDb2xvckZpbHRlcj4gZmlsdGVyKGNyZWF0ZUNvbG9y
RmlsdGVyKG1fdHlwZSwgbV92YWx1ZXMuZGF0YSgpKSk7Ci0gICAgcmV0dXJuIFNrQ29sb3JGaWx0
ZXJJbWFnZUZpbHRlcjo6Q3JlYXRlKGZpbHRlciwgaW5wdXQpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgVVNFKFNLSUEpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVD
b21wb25lbnRUcmFuc2ZlclNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9za2lhL0ZFQ29tcG9uZW50VHJhbnNmZXJTa2lhLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNGE0MGJmOGUyNDQ1ZTViY2E1MmRjNDc1NDA3NGE3NjIyZDY2YTQz
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVDb21wb25lbnRUcmFuc2Zl
clNraWEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZFQ29tcG9uZW50
VHJhbnNmZXIuaCIKLQotI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2luY2x1ZGUgIlNr
Q29sb3JGaWx0ZXJJbWFnZUZpbHRlci5oIgotI2luY2x1ZGUgIlNrVGFibGVDb2xvckZpbHRlci5o
IgotI2luY2x1ZGUgIlNraWFJbWFnZUZpbHRlckJ1aWxkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1ib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTa2lhKCkKLXsK
LSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3Vs
dEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gaW4tPmFzSW1hZ2VCdWZmZXIoKS0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
LSAgICBSZWZQdHI8TmF0aXZlSW1hZ2VTa2lhPiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghbmF0aXZlSW1hZ2UpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGNoYXIgclZhbHVlc1syNTZdLCBnVmFsdWVzWzI1
Nl0sIGJWYWx1ZXNbMjU2XSwgYVZhbHVlc1syNTZdOwotICAgIGdldFZhbHVlcyhyVmFsdWVzLCBn
VmFsdWVzLCBiVmFsdWVzLCBhVmFsdWVzKTsKLQotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgcGFp
bnQuc2V0Q29sb3JGaWx0ZXIoU2tUYWJsZUNvbG9yRmlsdGVyOjpDcmVhdGVBUkdCKGFWYWx1ZXMs
IHJWYWx1ZXMsIGdWYWx1ZXMsIGJWYWx1ZXMpKS0+dW5yZWYoKTsKLSAgICBwYWludC5zZXRYZmVy
bW9kZU1vZGUoU2tYZmVybW9kZTo6a1NyY19Nb2RlKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0JpdG1hcChuYXRpdmVJbWFnZS0+Yml0bWFwKCks
IDAsIDAsICZwYWludCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU2tJbWFnZUZpbHRlciog
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlSW1hZ2VGaWx0ZXIoU2tpYUltYWdlRmlsdGVyQnVp
bGRlciogYnVpbGRlcikKLXsKLSAgICBTa0F1dG9UVW5yZWY8U2tJbWFnZUZpbHRlcj4gaW5wdXQo
YnVpbGRlci0+YnVpbGQoaW5wdXRFZmZlY3QoMCkpKTsKLQotICAgIHVuc2lnbmVkIGNoYXIgclZh
bHVlc1syNTZdLCBnVmFsdWVzWzI1Nl0sIGJWYWx1ZXNbMjU2XSwgYVZhbHVlc1syNTZdOwotICAg
IGdldFZhbHVlcyhyVmFsdWVzLCBnVmFsdWVzLCBiVmFsdWVzLCBhVmFsdWVzKTsKLQotICAgIFNr
QXV0b1RVbnJlZjxTa0NvbG9yRmlsdGVyPiBjb2xvckZpbHRlcihTa1RhYmxlQ29sb3JGaWx0ZXI6
OkNyZWF0ZUFSR0IoYVZhbHVlcywgclZhbHVlcywgZ1ZhbHVlcywgYlZhbHVlcykpOwotCi0gICAg
cmV0dXJuIFNrQ29sb3JGaWx0ZXJJbWFnZUZpbHRlcjo6Q3JlYXRlKGNvbG9yRmlsdGVyLCBpbnB1
dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShGSUxU
RVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9za2lhL0ZFQ29tcG9zaXRlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NraWEvRkVDb21wb3NpdGVTa2lhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjMyNDg4Zjg5MDVlYTk2YmE0NzdiY2NhMzYwOGMwZDQ0MzUwMWU3Zi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVDb21wb3NpdGVTa2lhLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2lmIFVTRShTS0lBKQotI2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCi0KLSNpbmNsdWRlICJTa0Zs
YXR0ZW5hYmxlQnVmZmVycy5oIgotI2luY2x1ZGUgIlNrTW9ycGhvbG9neUltYWdlRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiU2tpYUltYWdlRmlsdGVyQnVpbGRlci5oIgotCi1uYW1lc3BhY2UgewotCi1j
bGFzcyBDb21wb3NpdGVJbWFnZUZpbHRlciA6IHB1YmxpYyBTa0ltYWdlRmlsdGVyIHsKLXB1Ymxp
YzoKLSAgICBDb21wb3NpdGVJbWFnZUZpbHRlcihTa1hmZXJtb2RlOjpNb2RlIG1vZGUsIFNrSW1h
Z2VGaWx0ZXIqIGJhY2tncm91bmQsIFNrSW1hZ2VGaWx0ZXIqIGZvcmVncm91bmQpIDogU2tJbWFn
ZUZpbHRlcihiYWNrZ3JvdW5kLCBmb3JlZ3JvdW5kKSwgbV9tb2RlKG1vZGUpCi0gICAgewotICAg
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBvbkZpbHRlckltYWdlKFByb3h5KiBwcm94eSwgY29uc3Qg
U2tCaXRtYXAmIHNyYywgY29uc3QgU2tNYXRyaXgmIGN0bSwgU2tCaXRtYXAqIGRzdCwgU2tJUG9p
bnQqIG9mZnNldCkKLSAgICB7Ci0gICAgICAgIFNrQml0bWFwIGJhY2tncm91bmQsIGZvcmVncm91
bmQgPSBzcmM7Ci0gICAgICAgIFNrSW1hZ2VGaWx0ZXIqIGJhY2tncm91bmRJbnB1dCA9IGdldElu
cHV0KDApOwotICAgICAgICBTa0ltYWdlRmlsdGVyKiBmb3JlZ3JvdW5kSW5wdXQgPSBnZXRJbnB1
dCgxKTsKLSAgICAgICAgU2tJUG9pbnQgYmFja2dyb3VuZE9mZnNldCA9IFNrSVBvaW50OjpNYWtl
KDAsIDApLCBmb3JlZ3JvdW5kT2Zmc2V0ID0gU2tJUG9pbnQ6Ok1ha2UoMCwgMCk7Ci0gICAgICAg
IGlmIChiYWNrZ3JvdW5kSW5wdXQgJiYgIWJhY2tncm91bmRJbnB1dC0+ZmlsdGVySW1hZ2UocHJv
eHksIHNyYywgY3RtLCAmYmFja2dyb3VuZCwgJmJhY2tncm91bmRPZmZzZXQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChmb3JlZ3JvdW5kSW5wdXQgJiYgIWZvcmVn
cm91bmRJbnB1dC0+ZmlsdGVySW1hZ2UocHJveHksIHNyYywgY3RtLCAmZm9yZWdyb3VuZCwgJmZv
cmVncm91bmRPZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGRz
dC0+c2V0Q29uZmlnKGJhY2tncm91bmQuY29uZmlnKCksIGJhY2tncm91bmQud2lkdGgoKSwgYmFj
a2dyb3VuZC5oZWlnaHQoKSk7Ci0gICAgICAgIGRzdC0+YWxsb2NQaXhlbHMoKTsKLSAgICAgICAg
U2tDYW52YXMgY2FudmFzKCpkc3QpOwotICAgICAgICBTa1BhaW50IHBhaW50OwotICAgICAgICBw
YWludC5zZXRYZmVybW9kZU1vZGUoU2tYZmVybW9kZTo6a1NyY19Nb2RlKTsKLSAgICAgICAgY2Fu
dmFzLmRyYXdCaXRtYXAoYmFja2dyb3VuZCwgYmFja2dyb3VuZE9mZnNldC5mWCwgYmFja2dyb3Vu
ZE9mZnNldC5mWSwgJnBhaW50KTsKLSAgICAgICAgcGFpbnQuc2V0WGZlcm1vZGVNb2RlKG1fbW9k
ZSk7Ci0gICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKGZvcmVncm91bmQsIGZvcmVncm91bmRPZmZz
ZXQuZlgsIGZvcmVncm91bmRPZmZzZXQuZlksICZwYWludCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIFNLX0RFQ0xBUkVfUFVCTElDX0ZMQVRURU5BQkxFX0RFU0VSSUFMSVpB
VElPTl9QUk9DUyhDb21wb3NpdGVJbWFnZUZpbHRlcikKLQotcHJvdGVjdGVkOgotICAgIGV4cGxp
Y2l0IENvbXBvc2l0ZUltYWdlRmlsdGVyKFNrRmxhdHRlbmFibGVSZWFkQnVmZmVyJiBidWZmZXIp
Ci0gICAgICAgIDogU2tJbWFnZUZpbHRlcihidWZmZXIpCi0gICAgewotICAgICAgICBtX21vZGUg
PSAoU2tYZmVybW9kZTo6TW9kZSkgYnVmZmVyLnJlYWRJbnQoKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZmxhdHRlbihTa0ZsYXR0ZW5hYmxlV3JpdGVCdWZmZXImIGJ1ZmZlcikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHRoaXMtPlNrSW1hZ2VGaWx0ZXI6OmZsYXR0ZW4oYnVmZmVyKTsKLSAg
ICAgICAgYnVmZmVyLndyaXRlSW50KChpbnQpIG1fbW9kZSk7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIFNrWGZlcm1vZGU6Ok1vZGUgbV9tb2RlOwotfTsKLQotU2tYZmVybW9kZTo6TW9kZSB0b1hm
ZXJtb2RlKFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdGlvblR5cGUgbW9kZSkKLXsKLSAgICBzd2l0
Y2ggKG1vZGUpIHsKLSAgICBjYXNlIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6
Ci0gICAgICAgIHJldHVybiBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlOwotICAgIGNhc2UgV2Vi
Q29yZTo6RkVDT01QT1NJVEVfT1BFUkFUT1JfSU46Ci0gICAgICAgIHJldHVybiBTa1hmZXJtb2Rl
OjprU3JjSW5fTW9kZTsKLSAgICBjYXNlIFdlYkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX09V
VDoKLSAgICAgICAgcmV0dXJuIFNrWGZlcm1vZGU6OmtEc3RPdXRfTW9kZTsKLSAgICBjYXNlIFdl
YkNvcmU6OkZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIHJldHVybiBTa1hmZXJt
b2RlOjprU3JjQVRvcF9Nb2RlOwotICAgIGNhc2UgV2ViQ29yZTo6RkVDT01QT1NJVEVfT1BFUkFU
T1JfWE9SOgotICAgICAgICByZXR1cm4gU2tYZmVybW9kZTo6a1hvcl9Nb2RlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gU2tYZmVy
bW9kZTo6a1NyY092ZXJfTW9kZTsKLSAgICB9Ci19Ci0KLX07Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotU2tJbWFnZUZpbHRlciogRkVDb21wb3NpdGU6OmNyZWF0ZUltYWdlRmlsdGVyKFNraWFJ
bWFnZUZpbHRlckJ1aWxkZXIqIGJ1aWxkZXIpCi17Ci0gICAgU2tBdXRvVFVucmVmPFNrSW1hZ2VG
aWx0ZXI+IGZvcmVncm91bmQoYnVpbGRlci0+YnVpbGQoaW5wdXRFZmZlY3QoMCkpKTsKLSAgICBT
a0F1dG9UVW5yZWY8U2tJbWFnZUZpbHRlcj4gYmFja2dyb3VuZChidWlsZGVyLT5idWlsZChpbnB1
dEVmZmVjdCgxKSkpOwotICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJ
VEhNRVRJQykKLSAgICAgICAgcmV0dXJuIDA7IC8vIEZJWE1FOiBJbXBsZW1lbnQgYXJpdGhtZXRp
YyBvcAotICAgIHJldHVybiBuZXcgQ29tcG9zaXRlSW1hZ2VGaWx0ZXIodG9YZmVybW9kZShtX3R5
cGUpLCBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kKTsKLX0KLQotfTsKLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29udm9s
dmVNYXRyaXhTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc2tpYS9GRUNvbnZvbHZlTWF0cml4U2tpYS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDk1ZGNmOWQwZTFlYTEzNTI2ZDg3NDM1ODI4ODc1ZGY3Mzk3NDBmZTMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29udm9sdmVNYXRyaXhTa2lhLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCi0KLSNp
bmNsdWRlICJTa01hdHJpeENvbnZvbHV0aW9uSW1hZ2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJTa2lh
SW1hZ2VGaWx0ZXJCdWlsZGVyLmgiCi0jaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+Ci0KLW5h
bWVzcGFjZSB7Ci0KLVNrTWF0cml4Q29udm9sdXRpb25JbWFnZUZpbHRlcjo6VGlsZU1vZGUgdG9T
a2lhVGlsZU1vZGUoV2ViQ29yZTo6RWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIHN3aXRj
aCAoZWRnZU1vZGUpIHsKLSAgICBjYXNlIFdlYkNvcmU6OkVER0VNT0RFX0RVUExJQ0FURToKLSAg
ICAgICAgcmV0dXJuIFNrTWF0cml4Q29udm9sdXRpb25JbWFnZUZpbHRlcjo6a0NsYW1wX1RpbGVN
b2RlOwotICAgIGNhc2UgV2ViQ29yZTo6RURHRU1PREVfV1JBUDoKLSAgICAgICAgcmV0dXJuIFNr
TWF0cml4Q29udm9sdXRpb25JbWFnZUZpbHRlcjo6a1JlcGVhdF9UaWxlTW9kZTsKLSAgICBjYXNl
IFdlYkNvcmU6OkVER0VNT0RFX05PTkU6Ci0gICAgICAgIHJldHVybiBTa01hdHJpeENvbnZvbHV0
aW9uSW1hZ2VGaWx0ZXI6OmtDbGFtcFRvQmxhY2tfVGlsZU1vZGU7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIFNrTWF0cml4Q29udm9sdXRpb25JbWFnZUZpbHRlcjo6a0NsYW1wX1RpbGVN
b2RlOwotICAgIH0KLX0KLQotfTsgLy8gdW5uYW1lZCBuYW1lc3BhY2UKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1Ta0ltYWdlRmlsdGVyKiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGVJbWFnZUZp
bHRlcihTa2lhSW1hZ2VGaWx0ZXJCdWlsZGVyKiBidWlsZGVyKQotewotICAgIFNrQXV0b1RVbnJl
ZjxTa0ltYWdlRmlsdGVyPiBpbnB1dChidWlsZGVyLT5idWlsZChpbnB1dEVmZmVjdCgwKSkpOwot
Ci0gICAgU2tJU2l6ZSBrZXJuZWxTaXplKFNrSVNpemU6Ok1ha2UobV9rZXJuZWxTaXplLndpZHRo
KCksIG1fa2VybmVsU2l6ZS5oZWlnaHQoKSkpOwotICAgIGludCBudW1FbGVtZW50cyA9IGtlcm5l
bFNpemUud2lkdGgoKSAqIGtlcm5lbFNpemUuaGVpZ2h0KCk7Ci0gICAgU2tTY2FsYXIgZ2FpbiA9
IFNrRmxvYXRUb1NjYWxhcigxLjBmIC8gbV9kaXZpc29yKTsKLSAgICBTa1NjYWxhciBiaWFzID0g
U2tGbG9hdFRvU2NhbGFyKG1fYmlhcyk7Ci0gICAgU2tJUG9pbnQgdGFyZ2V0ID0gU2tJUG9pbnQ6
Ok1ha2UobV90YXJnZXRPZmZzZXQueCgpLCBtX3RhcmdldE9mZnNldC55KCkpOwotICAgIFNrTWF0
cml4Q29udm9sdXRpb25JbWFnZUZpbHRlcjo6VGlsZU1vZGUgdGlsZU1vZGUgPSB0b1NraWFUaWxl
TW9kZShtX2VkZ2VNb2RlKTsKLSAgICBib29sIGNvbnZvbHZlQWxwaGEgPSAhbV9wcmVzZXJ2ZUFs
cGhhOwotICAgIE93bkFycmF5UHRyPFNrU2NhbGFyPiBrZXJuZWwgPSBhZG9wdEFycmF5UHRyKG5l
dyBTa1NjYWxhcltudW1FbGVtZW50c10pOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRWxl
bWVudHM7ICsraSkKLSAgICAgICAga2VybmVsW2ldID0gU2tGbG9hdFRvU2NhbGFyKG1fa2VybmVs
TWF0cml4W251bUVsZW1lbnRzIC0gMSAtIGldKTsKLSAgICByZXR1cm4gbmV3IFNrTWF0cml4Q29u
dm9sdXRpb25JbWFnZUZpbHRlcihrZXJuZWxTaXplLCBrZXJuZWwuZ2V0KCksIGdhaW4sIGJpYXMs
IHRhcmdldCwgdGlsZU1vZGUsIGNvbnZvbHZlQWxwaGEsIGlucHV0KTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVEaXNwbGFjZW1l
bnRNYXBTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c2tpYS9GRURpc3BsYWNlbWVudE1hcFNraWEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxYmU0NTUxMmM0NTk1Yjg1M2M0MjUxMmU3N2I0Yjg5MjQ4NDZlYzEzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRURpc3BsYWNlbWVudE1hcFNraWEuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgotCi0j
aW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCi0jaW5jbHVkZSAiU2tCaXRtYXBTb3VyY2UuaCIK
LSNpbmNsdWRlICJTa0Rpc3BsYWNlbWVudE1hcEVmZmVjdC5oIgotI2luY2x1ZGUgIlNraWFJbWFn
ZUZpbHRlckJ1aWxkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgU2tEaXNw
bGFjZW1lbnRNYXBFZmZlY3Q6OkNoYW5uZWxTZWxlY3RvclR5cGUgdG9Ta2lhTW9kZShDaGFubmVs
U2VsZWN0b3JUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDSEFO
TkVMX1I6Ci0gICAgICAgIHJldHVybiBTa0Rpc3BsYWNlbWVudE1hcEVmZmVjdDo6a1JfQ2hhbm5l
bFNlbGVjdG9yVHlwZTsKLSAgICBjYXNlIENIQU5ORUxfRzoKLSAgICAgICAgcmV0dXJuIFNrRGlz
cGxhY2VtZW50TWFwRWZmZWN0OjprR19DaGFubmVsU2VsZWN0b3JUeXBlOwotICAgIGNhc2UgQ0hB
Tk5FTF9COgotICAgICAgICByZXR1cm4gU2tEaXNwbGFjZW1lbnRNYXBFZmZlY3Q6OmtCX0NoYW5u
ZWxTZWxlY3RvclR5cGU7Ci0gICAgY2FzZSBDSEFOTkVMX0E6Ci0gICAgICAgIHJldHVybiBTa0Rp
c3BsYWNlbWVudE1hcEVmZmVjdDo6a0FfQ2hhbm5lbFNlbGVjdG9yVHlwZTsKLSAgICBjYXNlIENI
QU5ORUxfVU5LTk9XTjoKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gU2tEaXNwbGFjZW1l
bnRNYXBFZmZlY3Q6OmtVbmtub3duX0NoYW5uZWxTZWxlY3RvclR5cGU7Ci0gICAgfQotfQotCi1i
b29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U2tpYSgpCi17Ci0gICAgLy8gRm9y
IG5vdywgb25seSB1c2UgdGhlIHNraWEgaW1wbGVtZW50YXRpb24gZm9yIGFjY2VsZXJhdGVkIHJl
bmRlcmluZy4KLSAgICBpZiAoZmlsdGVyKCktPnJlbmRlcmluZ01vZGUoKSAhPSBBY2NlbGVyYXRl
ZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAg
ICBpZiAoIWluIHx8ICFpbjIpIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICgh
cmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxJbWFnZT4g
Y29sb3IgPSBpbi0+YXNJbWFnZUJ1ZmZlcigpLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOwotICAgIFJlZlB0cjxJbWFnZT4gZGlzcGwgPSBpbjItPmFzSW1hZ2VCdWZmZXIoKS0+Y29w
eUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIFJlZlB0cjxOYXRpdmVJbWFnZVNr
aWE+IGNvbG9yTmF0aXZlSW1hZ2UgPSBjb2xvci0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2VTa2lhPiBkaXNwbE5hdGl2ZUltYWdlID0gZGlzcGwt
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0KLSAgICBpZiAoIWNvbG9yTmF0aXZlSW1h
Z2UgfHwgIWRpc3BsTmF0aXZlSW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNr
Qml0bWFwIGNvbG9yQml0bWFwID0gY29sb3JOYXRpdmVJbWFnZS0+Yml0bWFwKCk7Ci0gICAgU2tC
aXRtYXAgZGlzcGxCaXRtYXAgPSBkaXNwbE5hdGl2ZUltYWdlLT5iaXRtYXAoKTsKLQotICAgIFNr
QXV0b1RVbnJlZjxTa0ltYWdlRmlsdGVyPiBjb2xvclNvdXJjZShuZXcgU2tCaXRtYXBTb3VyY2Uo
Y29sb3JCaXRtYXApKTsKLSAgICBTa0F1dG9UVW5yZWY8U2tJbWFnZUZpbHRlcj4gZGlzcGxTb3Vy
Y2UobmV3IFNrQml0bWFwU291cmNlKGRpc3BsQml0bWFwKSk7Ci0gICAgU2tEaXNwbGFjZW1lbnRN
YXBFZmZlY3Q6OkNoYW5uZWxTZWxlY3RvclR5cGUgdHlwZVggPSB0b1NraWFNb2RlKG1feENoYW5u
ZWxTZWxlY3Rvcik7Ci0gICAgU2tEaXNwbGFjZW1lbnRNYXBFZmZlY3Q6OkNoYW5uZWxTZWxlY3Rv
clR5cGUgdHlwZVkgPSB0b1NraWFNb2RlKG1feUNoYW5uZWxTZWxlY3Rvcik7Ci0gICAgU2tBdXRv
VFVucmVmPFNrSW1hZ2VGaWx0ZXI+IGRpc3BsRWZmZWN0KG5ldyBTa0Rpc3BsYWNlbWVudE1hcEVm
ZmVjdCgKLSAgICAgICAgdHlwZVgsIHR5cGVZLCBTa0Zsb2F0VG9TY2FsYXIobV9zY2FsZSksIGRp
c3BsU291cmNlLCBjb2xvclNvdXJjZSkpOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgcGFpbnQu
c2V0SW1hZ2VGaWx0ZXIoZGlzcGxFZmZlY3QpOwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkt
PnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3Qml0bWFwKGNvbG9yQml0bWFwLCAwLCAwLCAmcGFpbnQp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1Ta0ltYWdlRmlsdGVyKiBGRURpc3BsYWNlbWVudE1h
cDo6Y3JlYXRlSW1hZ2VGaWx0ZXIoU2tpYUltYWdlRmlsdGVyQnVpbGRlciogYnVpbGRlcikKLXsK
LSAgICBTa0ltYWdlRmlsdGVyKiBjb2xvciA9IGJ1aWxkZXItPmJ1aWxkKGlucHV0RWZmZWN0KDAp
KTsKLSAgICBTa0ltYWdlRmlsdGVyKiBkaXNwbCA9IGJ1aWxkZXItPmJ1aWxkKGlucHV0RWZmZWN0
KDEpKTsKLSAgICBTa0Rpc3BsYWNlbWVudE1hcEVmZmVjdDo6Q2hhbm5lbFNlbGVjdG9yVHlwZSB0
eXBlWCA9IHRvU2tpYU1vZGUobV94Q2hhbm5lbFNlbGVjdG9yKTsKLSAgICBTa0Rpc3BsYWNlbWVu
dE1hcEVmZmVjdDo6Q2hhbm5lbFNlbGVjdG9yVHlwZSB0eXBlWSA9IHRvU2tpYU1vZGUobV95Q2hh
bm5lbFNlbGVjdG9yKTsKLSAgICByZXR1cm4gbmV3IFNrRGlzcGxhY2VtZW50TWFwRWZmZWN0KHR5
cGVYLCB0eXBlWSwgU2tGbG9hdFRvU2NhbGFyKG1fc2NhbGUpLCBkaXNwbCwgY29sb3IpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9G
RUdhdXNzaWFuQmx1clNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9za2lhL0ZFR2F1c3NpYW5CbHVyU2tpYS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGJjMmIyZWRlOGZkZTRjYWU1YTg4NzQ0YWZiZWZjNGZjOTcxNjZiMTMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFR2F1c3NpYW5CbHVyU2tpYS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2lmIFVTRShTS0lBKQotI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCi0KLSNpbmNsdWRlICJT
a0JsdXJJbWFnZUZpbHRlci5oIgotI2luY2x1ZGUgIlNraWFJbWFnZUZpbHRlckJ1aWxkZXIuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFw
cGx5U2tpYSgpCi17Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBJbnRS
ZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkp
OwotCi0gICAgZmxvYXQgc3RkWCA9IGZpbHRlcigpLT5hcHBseUhvcml6b250YWxTY2FsZShtX3N0
ZFgpOwotICAgIGZsb2F0IHN0ZFkgPSBmaWx0ZXIoKS0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fc3Rk
WSk7Ci0gICAgCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGluLT5hc0ltYWdlQnVmZmVyKCkt
PmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBTa1BhaW50IHBhaW50Owot
ICAgIEdyYXBoaWNzQ29udGV4dCogZHN0Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7
Ci0gICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0ID0gZHN0Q29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgcGFpbnQuc2V0SW1hZ2VGaWx0ZXIobmV3IFNrQmx1cklt
YWdlRmlsdGVyKHN0ZFgsIHN0ZFkpKS0+dW5yZWYoKTsKLQotICAgIHBsYXRmb3JtQ29udGV4dC0+
c2F2ZUxheWVyKDAsICZwYWludCk7Ci0gICAgcGFpbnQuc2V0Q29sb3IoMHhGRkZGRkZGRik7Ci0g
ICAgZHN0Q29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBkcmF3aW5nUmVnaW9uLmxvY2F0aW9uKCksIENvbXBvc2l0ZUNvcHkpOwotICAgIHBsYXRmb3Jt
Q29udGV4dC0+cmVzdG9yZUxheWVyKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVNrSW1hZ2VG
aWx0ZXIqIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGVJbWFnZUZpbHRlcihTa2lhSW1hZ2VGaWx0ZXJC
dWlsZGVyKiBidWlsZGVyKQotewotICAgIFNrQXV0b1RVbnJlZjxTa0ltYWdlRmlsdGVyPiBpbnB1
dChidWlsZGVyLT5idWlsZChpbnB1dEVmZmVjdCgwKSkpOwotICAgIHJldHVybiBuZXcgU2tCbHVy
SW1hZ2VGaWx0ZXIoU2tGbG9hdFRvU2NhbGFyKG1fc3RkWCksIFNrRmxvYXRUb1NjYWxhcihtX3N0
ZFkpLCBpbnB1dCk7Ci19Ci0KLX07Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUxpZ2h0aW5nU2tpYS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVMaWdodGluZ1NraWEu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTBiNzc5YmM4ZTlhZTBkNjlmYjAz
MTUyNzdmZDU4ZWY5OTgxNmRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9G
RUxpZ2h0aW5nU2tpYS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpZiBVU0UoU0tJQSkKLSNpbmNsdWRlICJGRUxpZ2h0aW5n
LmgiCi0KLSNpbmNsdWRlICJEaXN0YW50TGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlICJOYXRpdmVJ
bWFnZVNraWEuaCIKLSNpbmNsdWRlICJQb2ludExpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSAiU2tM
aWdodGluZ0ltYWdlRmlsdGVyLmgiCi0jaW5jbHVkZSAiU2tpYUltYWdlRmlsdGVyQnVpbGRlci5o
IgotI2luY2x1ZGUgIlNwb3RMaWdodFNvdXJjZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LVNrSW1hZ2VGaWx0ZXIqIEZFTGlnaHRpbmc6OmNyZWF0ZUltYWdlRmlsdGVyKFNraWFJbWFnZUZp
bHRlckJ1aWxkZXIqIGJ1aWxkZXIpCi17Ci0gICAgU2tBdXRvVFVucmVmPFNrSW1hZ2VGaWx0ZXI+
IGlucHV0KGJ1aWxkZXIgPyBidWlsZGVyLT5idWlsZChpbnB1dEVmZmVjdCgwKSkgOiAwKTsKLSAg
ICBzd2l0Y2ggKG1fbGlnaHRTb3VyY2UtPnR5cGUoKSkgewotICAgIGNhc2UgTFNfRElTVEFOVDog
ewotICAgICAgICBEaXN0YW50TGlnaHRTb3VyY2UqIGRpc3RhbnRMaWdodFNvdXJjZSA9IHN0YXRp
Y19jYXN0PERpc3RhbnRMaWdodFNvdXJjZSo+KG1fbGlnaHRTb3VyY2UuZ2V0KCkpOwotICAgICAg
ICBmbG9hdCBhemltdXRoUmFkID0gZGVnMnJhZChkaXN0YW50TGlnaHRTb3VyY2UtPmF6aW11dGgo
KSk7Ci0gICAgICAgIGZsb2F0IGVsZXZhdGlvblJhZCA9IGRlZzJyYWQoZGlzdGFudExpZ2h0U291
cmNlLT5lbGV2YXRpb24oKSk7Ci0gICAgICAgIFNrUG9pbnQzIGRpcmVjdGlvbihjb3NmKGF6aW11
dGhSYWQpICogY29zZihlbGV2YXRpb25SYWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2luZihhemltdXRoUmFkKSAqIGNvc2YoZWxldmF0aW9uUmFkKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpbmYoZWxldmF0aW9uUmFkKSk7Ci0gICAgICAgIGlmIChtX3NwZWN1bGFyQ29u
c3RhbnQgPiAwKQotICAgICAgICAgICAgcmV0dXJuIFNrTGlnaHRpbmdJbWFnZUZpbHRlcjo6Q3Jl
YXRlRGlzdGFudExpdFNwZWN1bGFyKGRpcmVjdGlvbiwgbV9saWdodGluZ0NvbG9yLnJnYigpLCBt
X3N1cmZhY2VTY2FsZSwgbV9zcGVjdWxhckNvbnN0YW50LCBtX3NwZWN1bGFyRXhwb25lbnQsIGlu
cHV0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFNrTGlnaHRpbmdJbWFnZUZp
bHRlcjo6Q3JlYXRlRGlzdGFudExpdERpZmZ1c2UoZGlyZWN0aW9uLCBtX2xpZ2h0aW5nQ29sb3Iu
cmdiKCksIG1fc3VyZmFjZVNjYWxlLCBtX2RpZmZ1c2VDb25zdGFudCwgaW5wdXQpOwotICAgIH0K
LSAgICBjYXNlIExTX1BPSU5UOiB7Ci0gICAgICAgIFBvaW50TGlnaHRTb3VyY2UqIHBvaW50TGln
aHRTb3VyY2UgPSBzdGF0aWNfY2FzdDxQb2ludExpZ2h0U291cmNlKj4obV9saWdodFNvdXJjZS5n
ZXQoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbiA9IHBvaW50TGlnaHRTb3VyY2Ut
PnBvc2l0aW9uKCk7Ci0gICAgICAgIFNrUG9pbnQzIHNrUG9zaXRpb24ocG9zaXRpb24ueCgpLCBw
b3NpdGlvbi55KCksIHBvc2l0aW9uLnooKSk7Ci0gICAgICAgIGlmIChtX3NwZWN1bGFyQ29uc3Rh
bnQgPiAwKQotICAgICAgICAgICAgcmV0dXJuIFNrTGlnaHRpbmdJbWFnZUZpbHRlcjo6Q3JlYXRl
UG9pbnRMaXRTcGVjdWxhcihza1Bvc2l0aW9uLCBtX2xpZ2h0aW5nQ29sb3IucmdiKCksIG1fc3Vy
ZmFjZVNjYWxlLCBtX3NwZWN1bGFyQ29uc3RhbnQsIG1fc3BlY3VsYXJFeHBvbmVudCwgaW5wdXQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gU2tMaWdodGluZ0ltYWdlRmlsdGVy
OjpDcmVhdGVQb2ludExpdERpZmZ1c2Uoc2tQb3NpdGlvbiwgbV9saWdodGluZ0NvbG9yLnJnYigp
LCBtX3N1cmZhY2VTY2FsZSwgbV9kaWZmdXNlQ29uc3RhbnQsIGlucHV0KTsKLSAgICB9Ci0gICAg
Y2FzZSBMU19TUE9UOiB7Ci0gICAgICAgIFNwb3RMaWdodFNvdXJjZSogc3BvdExpZ2h0U291cmNl
ID0gc3RhdGljX2Nhc3Q8U3BvdExpZ2h0U291cmNlKj4obV9saWdodFNvdXJjZS5nZXQoKSk7Ci0g
ICAgICAgIFNrUG9pbnQzIGxvY2F0aW9uKHNwb3RMaWdodFNvdXJjZS0+cG9zaXRpb24oKS54KCks
IHNwb3RMaWdodFNvdXJjZS0+cG9zaXRpb24oKS55KCksIHNwb3RMaWdodFNvdXJjZS0+cG9zaXRp
b24oKS56KCkpOwotICAgICAgICBTa1BvaW50MyB0YXJnZXQoc3BvdExpZ2h0U291cmNlLT5kaXJl
Y3Rpb24oKS54KCksIHNwb3RMaWdodFNvdXJjZS0+ZGlyZWN0aW9uKCkueSgpLCBzcG90TGlnaHRT
b3VyY2UtPmRpcmVjdGlvbigpLnooKSk7Ci0gICAgICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQg
PSBzcG90TGlnaHRTb3VyY2UtPnNwZWN1bGFyRXhwb25lbnQoKTsKLSAgICAgICAgZmxvYXQgbGlt
aXRpbmdDb25lQW5nbGUgPSBzcG90TGlnaHRTb3VyY2UtPmxpbWl0aW5nQ29uZUFuZ2xlKCk7Ci0g
ICAgICAgIGlmICghbGltaXRpbmdDb25lQW5nbGUgfHwgbGltaXRpbmdDb25lQW5nbGUgPiA5MCB8
fCBsaW1pdGluZ0NvbmVBbmdsZSA8IC05MCkKLSAgICAgICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xl
ID0gOTA7Ci0gICAgICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPiAwKQotICAgICAgICAgICAg
cmV0dXJuIFNrTGlnaHRpbmdJbWFnZUZpbHRlcjo6Q3JlYXRlU3BvdExpdFNwZWN1bGFyKGxvY2F0
aW9uLCB0YXJnZXQsIHNwZWN1bGFyRXhwb25lbnQsIGxpbWl0aW5nQ29uZUFuZ2xlLCBtX2xpZ2h0
aW5nQ29sb3IucmdiKCksIG1fc3VyZmFjZVNjYWxlLCBtX3NwZWN1bGFyQ29uc3RhbnQsIG1fc3Bl
Y3VsYXJFeHBvbmVudCwgaW5wdXQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4g
U2tMaWdodGluZ0ltYWdlRmlsdGVyOjpDcmVhdGVTcG90TGl0RGlmZnVzZShsb2NhdGlvbiwgdGFy
Z2V0LCBzcGVjdWxhckV4cG9uZW50LCBsaW1pdGluZ0NvbmVBbmdsZSwgbV9saWdodGluZ0NvbG9y
LnJnYigpLCBtX3N1cmZhY2VTY2FsZSwgbV9kaWZmdXNlQ29uc3RhbnQsIGlucHV0KTsKLSAgICB9
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLX0KLQotYm9vbCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U2tpYSgp
Ci17Ci0gICAgLy8gRm9yIG5vdywgb25seSB1c2UgdGhlIHNraWEgaW1wbGVtZW50YXRpb24gZm9y
IGFjY2VsZXJhdGVkIHJlbmRlcmluZy4KLSAgICBpZiAoZmlsdGVyKCktPnJlbmRlcmluZ01vZGUo
KSAhPSBBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSW1hZ2VCdWZm
ZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJl
c3VsdEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLQotICAgIHNldElz
QWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IGluLT5hc0ltYWdlQnVmZmVyKCktPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7
Ci0gICAgUmVmUHRyPE5hdGl2ZUltYWdlU2tpYT4gbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIW5hdGl2ZUltYWdlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGRzdENvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOwotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBwYWludC5zZXRJbWFn
ZUZpbHRlcihjcmVhdGVJbWFnZUZpbHRlcigwKSktPnVucmVmKCk7Ci0gICAgZHN0Q29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPmRyYXdCaXRtYXAobmF0aXZlSW1hZ2UtPmJpdG1hcCgpLCBkcmF3
aW5nUmVnaW9uLmxvY2F0aW9uKCkueCgpLCBkcmF3aW5nUmVnaW9uLmxvY2F0aW9uKCkueSgpLCAm
cGFpbnQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19OwotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVNb3JwaG9sb2d5
U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEv
RkVNb3JwaG9sb2d5U2tpYS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZTlm
NGZjZmI3ZTNlYWYyMjE5YWM0NTZjNTdmMjg1ZTgzNzU5MWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9za2lhL0ZFTW9ycGhvbG9neVNraWEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpZiBVU0UoU0tJQSkKLSNp
bmNsdWRlICJGRU1vcnBob2xvZ3kuaCIKLQotI2luY2x1ZGUgIlNrTW9ycGhvbG9neUltYWdlRmls
dGVyLmgiCi0jaW5jbHVkZSAiU2tpYUltYWdlRmlsdGVyQnVpbGRlci5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U2tpYSgpCi17Ci0g
ICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBJbnRSZWN0IGRyYXdpbmdSZWdp
b24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
LQotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgZmxvYXQg
cmFkaXVzWCA9IGZpbHRlcigpLT5hcHBseUhvcml6b250YWxTY2FsZShtX3JhZGl1c1gpOwotICAg
IGZsb2F0IHJhZGl1c1kgPSBmaWx0ZXIoKS0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fcmFkaXVzWSk7
Ci0gICAgCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGluLT5hc0ltYWdlQnVmZmVyKCktPmNv
cHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBTa1BhaW50IHBhaW50OwotICAg
IEdyYXBoaWNzQ29udGV4dCogZHN0Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0g
ICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0ID0gZHN0Q29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKG1fdHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1Jf
RElMQVRFKQotICAgICAgICBwYWludC5zZXRJbWFnZUZpbHRlcihuZXcgU2tEaWxhdGVJbWFnZUZp
bHRlcihyYWRpdXNYLCByYWRpdXNZKSktPnVucmVmKCk7Ci0gICAgZWxzZSBpZiAobV90eXBlID09
IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcGFpbnQuc2V0SW1hZ2VGaWx0
ZXIobmV3IFNrRXJvZGVJbWFnZUZpbHRlcihyYWRpdXNYLCByYWRpdXNZKSktPnVucmVmKCk7Ci0K
LSAgICBwbGF0Zm9ybUNvbnRleHQtPnNhdmVMYXllcigwLCAmcGFpbnQpOwotICAgIGRzdENvbnRl
eHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1Jl
Z2lvbi5sb2NhdGlvbigpLCBDb21wb3NpdGVDb3B5KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQtPnJl
c3RvcmVMYXllcigpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Ta0ltYWdlRmlsdGVyKiBGRU1v
cnBob2xvZ3k6OmNyZWF0ZUltYWdlRmlsdGVyKFNraWFJbWFnZUZpbHRlckJ1aWxkZXIqIGJ1aWxk
ZXIpCi17Ci0gICAgU2tBdXRvVFVucmVmPFNrSW1hZ2VGaWx0ZXI+IGlucHV0KGJ1aWxkZXItPmJ1
aWxkKGlucHV0RWZmZWN0KDApKSk7Ci0gICAgU2tTY2FsYXIgcmFkaXVzWCA9IFNrRmxvYXRUb1Nj
YWxhcihtX3JhZGl1c1gpOwotICAgIFNrU2NhbGFyIHJhZGl1c1kgPSBTa0Zsb2F0VG9TY2FsYXIo
bV9yYWRpdXNZKTsKLSAgICBpZiAobV90eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxB
VEUpCi0gICAgICAgIHJldHVybiBuZXcgU2tEaWxhdGVJbWFnZUZpbHRlcihyYWRpdXNYLCByYWRp
dXNZLCBpbnB1dCk7Ci0gICAgcmV0dXJuIG5ldyBTa0Vyb2RlSW1hZ2VGaWx0ZXIocmFkaXVzWCwg
cmFkaXVzWSwgaW5wdXQpOwotfQotCi19OwotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVPZmZzZXRTa2lhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRU9mZnNldFNraWEu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWRlYzZhYmQzYTJhMWRiNDQ4N2I3
MWU5ODdmMmE3NzYzNTQzNTRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9G
RU9mZnNldFNraWEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZFT2Zm
c2V0LmgiCi0KLSNpbmNsdWRlICJTa09mZnNldEltYWdlRmlsdGVyLmgiCi0jaW5jbHVkZSAiU2tp
YUltYWdlRmlsdGVyQnVpbGRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNrSW1hZ2VG
aWx0ZXIqIEZFT2Zmc2V0OjpjcmVhdGVJbWFnZUZpbHRlcihTa2lhSW1hZ2VGaWx0ZXJCdWlsZGVy
KiBidWlsZGVyKQotewotICAgIFNrQXV0b1RVbnJlZjxTa0ltYWdlRmlsdGVyPiBpbnB1dChidWls
ZGVyLT5idWlsZChpbnB1dEVmZmVjdCgwKSkpOwotICAgIHJldHVybiBuZXcgU2tPZmZzZXRJbWFn
ZUZpbHRlcihTa0Zsb2F0VG9TY2FsYXIobV9keCksIFNrRmxvYXRUb1NjYWxhcihtX2R5KSwgaW5w
dXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoRklM
VEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc2tpYS9Ta2lhSW1hZ2VGaWx0ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9Ta2lhSW1hZ2VGaWx0ZXJCdWlsZGVyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk3NWRiMWM0ZGZmNDQxNzhiNzA0ZjlhOGQyZDY1
NDYyZGJmNWZmMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvU2tpYUltYWdl
RmlsdGVyQnVpbGRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJTa2lhSW1hZ2VGaWx0ZXJCdWlsZGVyLmgi
Ci0KLSNpbmNsdWRlICJEcm9wU2hhZG93SW1hZ2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiU2tCbHVy
SW1hZ2VGaWx0ZXIuaCIKLSNpbmNsdWRlICJTa0NvbG9yRmlsdGVySW1hZ2VGaWx0ZXIuaCIKLSNp
bmNsdWRlICJTa0NvbG9yTWF0cml4RmlsdGVyLmgiCi0jaW5jbHVkZSAiU2tNYXRyaXguaCIKLQot
bmFtZXNwYWNlIHsKLQotdm9pZCBnZXRCcmlnaHRuZXNzTWF0cml4KGZsb2F0IGFtb3VudCwgU2tT
Y2FsYXIgbWF0cml4WzIwXSkKLXsKLSAgICBtZW1zZXQobWF0cml4LCAwLCAyMCAqIHNpemVvZihT
a1NjYWxhcikpOwotICAgIG1hdHJpeFswXSA9IG1hdHJpeFs2XSA9IG1hdHJpeFsxMl0gPSBhbW91
bnQ7Ci0gICAgbWF0cml4WzE4XSA9IDE7Ci19Ci0KLXZvaWQgZ2V0Q29udHJhc3RNYXRyaXgoZmxv
YXQgYW1vdW50LCBTa1NjYWxhciBtYXRyaXhbMjBdKQotewotICAgIG1lbXNldChtYXRyaXgsIDAs
IDIwICogc2l6ZW9mKFNrU2NhbGFyKSk7Ci0gICAgbWF0cml4WzBdID0gbWF0cml4WzZdID0gbWF0
cml4WzEyXSA9IGFtb3VudDsKLSAgICBtYXRyaXhbNF0gPSBtYXRyaXhbOV0gPSBtYXRyaXhbMTRd
ID0gKC0wLjVmICogYW1vdW50ICsgMC41ZikgKiAyNTU7Ci0gICAgbWF0cml4WzE4XSA9IDE7Ci19
Ci0KLXZvaWQgZ2V0U2F0dXJhdGVNYXRyaXgoZmxvYXQgYW1vdW50LCBTa1NjYWxhciBtYXRyaXhb
MjBdKQotewotICAgIC8vIE5vdGUsIHRoZXNlIHZhbHVlcyBhcmUgY29tcHV0ZWQgdG8gZW5zdXJl
IG1hdHJpeE5lZWRzQ2xhbXBpbmcgaXMgZmFsc2UKLSAgICAvLyBmb3IgYW1vdW50IGluIFswLi4x
XQotICAgIG1hdHJpeFswXSA9IDAuMjEzZiArIDAuNzg3ZiAqIGFtb3VudDsKLSAgICBtYXRyaXhb
MV0gPSAwLjcxNWYgLSAwLjcxNWYgKiBhbW91bnQ7Ci0gICAgbWF0cml4WzJdID0gMS5mIC0gKG1h
dHJpeFswXSArIG1hdHJpeFsxXSk7Ci0gICAgbWF0cml4WzNdID0gbWF0cml4WzRdID0gMDsKLSAg
ICBtYXRyaXhbNV0gPSAwLjIxM2YgLSAwLjIxM2YgKiBhbW91bnQ7Ci0gICAgbWF0cml4WzZdID0g
MC43MTVmICsgMC4yODVmICogYW1vdW50OwotICAgIG1hdHJpeFs3XSA9IDEuZiAtIChtYXRyaXhb
NV0gKyBtYXRyaXhbNl0pOwotICAgIG1hdHJpeFs4XSA9IG1hdHJpeFs5XSA9IDA7Ci0gICAgbWF0
cml4WzEwXSA9IDAuMjEzZiAtIDAuMjEzZiAqIGFtb3VudDsKLSAgICBtYXRyaXhbMTFdID0gMC43
MTVmIC0gMC43MTVmICogYW1vdW50OwotICAgIG1hdHJpeFsxMl0gPSAxLmYgLSAobWF0cml4WzEw
XSArIG1hdHJpeFsxMV0pOwotICAgIG1hdHJpeFsxM10gPSBtYXRyaXhbMTRdID0gMDsKLSAgICBt
YXRyaXhbMTVdID0gbWF0cml4WzE2XSA9IG1hdHJpeFsxN10gPSBtYXRyaXhbMTldID0gMDsKLSAg
ICBtYXRyaXhbMThdID0gMTsKLX0KLQotdm9pZCBnZXRIdWVSb3RhdGVNYXRyaXgoZmxvYXQgaHVl
LCBTa1NjYWxhciBtYXRyaXhbMjBdKQotewotICAgIGZsb2F0IGNvc0h1ZSA9IGNvc2YoaHVlICog
cGlGbG9hdCAvIDE4MCk7Ci0gICAgZmxvYXQgc2luSHVlID0gc2luZihodWUgKiBwaUZsb2F0IC8g
MTgwKTsKLSAgICBtYXRyaXhbMF0gPSAwLjIxM2YgKyBjb3NIdWUgKiAwLjc4N2YgLSBzaW5IdWUg
KiAwLjIxM2Y7Ci0gICAgbWF0cml4WzFdID0gMC43MTVmIC0gY29zSHVlICogMC43MTVmIC0gc2lu
SHVlICogMC43MTVmOwotICAgIG1hdHJpeFsyXSA9IDAuMDcyZiAtIGNvc0h1ZSAqIDAuMDcyZiAr
IHNpbkh1ZSAqIDAuOTI4ZjsKLSAgICBtYXRyaXhbM10gPSBtYXRyaXhbNF0gPSAwOwotICAgIG1h
dHJpeFs1XSA9IDAuMjEzZiAtIGNvc0h1ZSAqIDAuMjEzZiArIHNpbkh1ZSAqIDAuMTQzZjsKLSAg
ICBtYXRyaXhbNl0gPSAwLjcxNWYgKyBjb3NIdWUgKiAwLjI4NWYgKyBzaW5IdWUgKiAwLjE0MGY7
Ci0gICAgbWF0cml4WzddID0gMC4wNzJmIC0gY29zSHVlICogMC4wNzJmIC0gc2luSHVlICogMC4y
ODNmOwotICAgIG1hdHJpeFs4XSA9IG1hdHJpeFs5XSA9IDA7Ci0gICAgbWF0cml4WzEwXSA9IDAu
MjEzZiAtIGNvc0h1ZSAqIDAuMjEzZiAtIHNpbkh1ZSAqIDAuNzg3ZjsKLSAgICBtYXRyaXhbMTFd
ID0gMC43MTVmIC0gY29zSHVlICogMC43MTVmICsgc2luSHVlICogMC43MTVmOwotICAgIG1hdHJp
eFsxMl0gPSAwLjA3MmYgKyBjb3NIdWUgKiAwLjkyOGYgKyBzaW5IdWUgKiAwLjA3MmY7Ci0gICAg
bWF0cml4WzEzXSA9IG1hdHJpeFsxNF0gPSAwOwotICAgIG1hdHJpeFsxNV0gPSBtYXRyaXhbMTZd
ID0gbWF0cml4WzE3XSA9IDA7Ci0gICAgbWF0cml4WzE4XSA9IDE7Ci0gICAgbWF0cml4WzE5XSA9
IDA7Ci19Ci0KLXZvaWQgZ2V0SW52ZXJ0TWF0cml4KGZsb2F0IGFtb3VudCwgU2tTY2FsYXIgbWF0
cml4WzIwXSkKLXsKLSAgICBtZW1zZXQobWF0cml4LCAwLCAyMCAqIHNpemVvZihTa1NjYWxhcikp
OwotICAgIG1hdHJpeFswXSA9IG1hdHJpeFs2XSA9IG1hdHJpeFsxMl0gPSAxIC0gMiAqIGFtb3Vu
dDsKLSAgICBtYXRyaXhbNF0gPSBtYXRyaXhbOV0gPSBtYXRyaXhbMTRdID0gYW1vdW50ICogMjU1
OwotICAgIG1hdHJpeFsxOF0gPSAxOwotfQotCi12b2lkIGdldE9wYWNpdHlNYXRyaXgoZmxvYXQg
YW1vdW50LCBTa1NjYWxhciBtYXRyaXhbMjBdKQotewotICAgIG1lbXNldChtYXRyaXgsIDAsIDIw
ICogc2l6ZW9mKFNrU2NhbGFyKSk7Ci0gICAgbWF0cml4WzBdID0gbWF0cml4WzZdID0gbWF0cml4
WzEyXSA9IDE7Ci0gICAgbWF0cml4WzE4XSA9IGFtb3VudDsKLX0KLQotdm9pZCBnZXRHcmF5c2Nh
bGVNYXRyaXgoZmxvYXQgYW1vdW50LCBTa1NjYWxhciBtYXRyaXhbMjBdKQotewotICAgIC8vIE5v
dGUsIHRoZXNlIHZhbHVlcyBhcmUgY29tcHV0ZWQgdG8gZW5zdXJlIG1hdHJpeE5lZWRzQ2xhbXBp
bmcgaXMgZmFsc2UKLSAgICAvLyBmb3IgYW1vdW50IGluIFswLi4xXQotICAgIG1hdHJpeFswXSA9
IDAuMjEyNmYgKyAwLjc4NzRmICogYW1vdW50OwotICAgIG1hdHJpeFsxXSA9IDAuNzE1MmYgLSAw
LjcxNTJmICogYW1vdW50OwotICAgIG1hdHJpeFsyXSA9IDEuZiAtIChtYXRyaXhbMF0gKyBtYXRy
aXhbMV0pOwotICAgIG1hdHJpeFszXSA9IG1hdHJpeFs0XSA9IDA7Ci0KLSAgICBtYXRyaXhbNV0g
PSAwLjIxMjZmIC0gMC4yMTI2ZiAqIGFtb3VudDsKLSAgICBtYXRyaXhbNl0gPSAwLjcxNTJmICsg
MC4yODQ4ZiAqIGFtb3VudDsKLSAgICBtYXRyaXhbN10gPSAxLmYgLSAobWF0cml4WzVdICsgbWF0
cml4WzZdKTsKLSAgICBtYXRyaXhbOF0gPSBtYXRyaXhbOV0gPSAwOwotCi0gICAgbWF0cml4WzEw
XSA9IDAuMjEyNmYgLSAwLjIxMjZmICogYW1vdW50OwotICAgIG1hdHJpeFsxMV0gPSAwLjcxNTJm
IC0gMC43MTUyZiAqIGFtb3VudDsKLSAgICBtYXRyaXhbMTJdID0gMS5mIC0gKG1hdHJpeFsxMF0g
KyBtYXRyaXhbMTFdKTsKLSAgICBtYXRyaXhbMTNdID0gbWF0cml4WzE0XSA9IDA7Ci0KLSAgICBt
YXRyaXhbMTVdID0gbWF0cml4WzE2XSA9IG1hdHJpeFsxN10gPSBtYXRyaXhbMTldID0gMDsKLSAg
ICBtYXRyaXhbMThdID0gMTsKLX0KLQotdm9pZCBnZXRTZXBpYU1hdHJpeChmbG9hdCBhbW91bnQs
IFNrU2NhbGFyIG1hdHJpeFsyMF0pCi17Ci0gICAgbWF0cml4WzBdID0gMC4zOTNmICsgMC42MDdm
ICogYW1vdW50OwotICAgIG1hdHJpeFsxXSA9IDAuNzY5ZiAtIDAuNzY5ZiAqIGFtb3VudDsKLSAg
ICBtYXRyaXhbMl0gPSAwLjE4OWYgLSAwLjE4OWYgKiBhbW91bnQ7Ci0gICAgbWF0cml4WzNdID0g
bWF0cml4WzRdID0gMDsKLQotICAgIG1hdHJpeFs1XSA9IDAuMzQ5ZiAtIDAuMzQ5ZiAqIGFtb3Vu
dDsKLSAgICBtYXRyaXhbNl0gPSAwLjY4NmYgKyAwLjMxNGYgKiBhbW91bnQ7Ci0gICAgbWF0cml4
WzddID0gMC4xNjhmIC0gMC4xNjhmICogYW1vdW50OwotICAgIG1hdHJpeFs4XSA9IG1hdHJpeFs5
XSA9IDA7Ci0KLSAgICBtYXRyaXhbMTBdID0gMC4yNzJmIC0gMC4yNzJmICogYW1vdW50OwotICAg
IG1hdHJpeFsxMV0gPSAwLjUzNGYgLSAwLjUzNGYgKiBhbW91bnQ7Ci0gICAgbWF0cml4WzEyXSA9
IDAuMTMxZiArIDAuODY5ZiAqIGFtb3VudDsKLSAgICBtYXRyaXhbMTNdID0gbWF0cml4WzE0XSA9
IDA7Ci0KLSAgICBtYXRyaXhbMTVdID0gbWF0cml4WzE2XSA9IG1hdHJpeFsxN10gPSBtYXRyaXhb
MTldID0gMDsKLSAgICBtYXRyaXhbMThdID0gMTsKLX0KLQotU2tJbWFnZUZpbHRlciogY3JlYXRl
TWF0cml4SW1hZ2VGaWx0ZXIoU2tTY2FsYXIgbWF0cml4WzIwXSwgU2tJbWFnZUZpbHRlciogaW5w
dXQpCi17Ci0gICAgU2tBdXRvVFVucmVmPFNrQ29sb3JGaWx0ZXI+IGNvbG9yRmlsdGVyKG5ldyBT
a0NvbG9yTWF0cml4RmlsdGVyKG1hdHJpeCkpOwotICAgIHJldHVybiBTa0NvbG9yRmlsdGVySW1h
Z2VGaWx0ZXI6OkNyZWF0ZShjb2xvckZpbHRlciwgaW5wdXQpOwotfQotCi19OwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLVNraWFJbWFnZUZpbHRlckJ1aWxkZXI6OlNraWFJbWFnZUZpbHRlckJ1
aWxkZXIoKQotewotfQotCi1Ta2lhSW1hZ2VGaWx0ZXJCdWlsZGVyOjp+U2tpYUltYWdlRmlsdGVy
QnVpbGRlcigpCi17Ci0gICAgZm9yIChGaWx0ZXJCdWlsZGVySGFzaE1hcDo6aXRlcmF0b3IgaXQg
PSBtX21hcC5iZWdpbigpOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkKLSAgICAgICAgU2tTYWZl
VW5yZWYoaXQtPnZhbHVlKTsKLX0KLQotU2tJbWFnZUZpbHRlciogU2tpYUltYWdlRmlsdGVyQnVp
bGRlcjo6YnVpbGQoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCi17Ci0gICAgaWYgKCFlZmZlY3QpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgU2tJbWFnZUZpbHRlciogZmlsdGVyID0gMDsKLSAgICBG
aWx0ZXJCdWlsZGVySGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX21hcC5maW5kKGVmZmVjdCk7Ci0g
ICAgaWYgKGl0ICE9IG1fbWFwLmVuZCgpKQotICAgICAgICBmaWx0ZXIgPSBpdC0+dmFsdWU7Ci0g
ICAgZWxzZSBpZiAoKGZpbHRlciA9IGVmZmVjdC0+Y3JlYXRlSW1hZ2VGaWx0ZXIodGhpcykpKQot
ICAgICAgICBtX21hcC5zZXQoZWZmZWN0LCBmaWx0ZXIpOwotICAgIC8vIFRoZSBoYXNoIG1hcCBo
YXMgYSByZWYsIHNvIHdlIHJldHVybiBhIG5ldyByZWYgZm9yIHRoZSBjYWxsZXIuCi0gICAgU2tT
YWZlUmVmKGZpbHRlcik7Ci0gICAgcmV0dXJuIGZpbHRlcjsKLX0KLQotU2tJbWFnZUZpbHRlciog
U2tpYUltYWdlRmlsdGVyQnVpbGRlcjo6YnVpbGQoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3Bl
cmF0aW9ucykKLXsKLSAgICBTa0F1dG9UVW5yZWY8U2tJbWFnZUZpbHRlcj4gZmlsdGVyOwotICAg
IFNrU2NhbGFyIG1hdHJpeFsyMF07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRp
b25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgb3AgPSAq
b3BlcmF0aW9ucy5hdChpKTsKLSAgICAgICAgc3dpdGNoIChvcC5nZXRPcGVyYXRpb25UeXBlKCkp
IHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRTogewotICAgICAgICAg
ICAgRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxjb25zdCBSZWZlcmVu
Y2VGaWx0ZXJPcGVyYXRpb24qPigmb3ApLT5maWx0ZXJFZmZlY3QoKTsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBob29rIHVwIHBhcmVudCBmaWx0ZXIgdG8gaW1hZ2Ugc291cmNlCi0gICAgICAgICAg
ICBmaWx0ZXIucmVzZXQoU2tpYUltYWdlRmlsdGVyQnVpbGRlcjo6YnVpbGQoZmlsdGVyRWZmZWN0
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBzdGF0aWNf
Y2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oJm9wKS0+YW1vdW50
KCk7Ci0gICAgICAgICAgICBnZXRHcmF5c2NhbGVNYXRyaXgoMSAtIGFtb3VudCwgbWF0cml4KTsK
LSAgICAgICAgICAgIGZpbHRlci5yZXNldChjcmVhdGVNYXRyaXhJbWFnZUZpbHRlcihtYXRyaXgs
IGZpbHRlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBzdGF0
aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oJm9wKS0+YW1v
dW50KCk7Ci0gICAgICAgICAgICBnZXRTZXBpYU1hdHJpeCgxIC0gYW1vdW50LCBtYXRyaXgpOwot
ICAgICAgICAgICAgZmlsdGVyLnJlc2V0KGNyZWF0ZU1hdHJpeEltYWdlRmlsdGVyKG1hdHJpeCwg
ZmlsdGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IHN0
YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPigmb3ApLT5h
bW91bnQoKTsKLSAgICAgICAgICAgIGdldFNhdHVyYXRlTWF0cml4KGFtb3VudCwgbWF0cml4KTsK
LSAgICAgICAgICAgIGZpbHRlci5yZXNldChjcmVhdGVNYXRyaXhJbWFnZUZpbHRlcihtYXRyaXgs
IGZpbHRlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPigmb3Ap
LT5hbW91bnQoKTsKLSAgICAgICAgICAgIGdldEh1ZVJvdGF0ZU1hdHJpeChhbW91bnQsIG1hdHJp
eCk7Ci0gICAgICAgICAgICBmaWx0ZXIucmVzZXQoY3JlYXRlTWF0cml4SW1hZ2VGaWx0ZXIobWF0
cml4LCBmaWx0ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24q
Pigmb3ApLT5hbW91bnQoKTsKLSAgICAgICAgICAgIGdldEludmVydE1hdHJpeChhbW91bnQsIG1h
dHJpeCk7Ci0gICAgICAgICAgICBmaWx0ZXIucmVzZXQoY3JlYXRlTWF0cml4SW1hZ2VGaWx0ZXIo
bWF0cml4LCBmaWx0ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAgICBmbG9hdCBhbW91
bnQgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uKj4oJm9wKS0+YW1vdW50KCk7Ci0gICAgICAgICAgICBnZXRPcGFjaXR5TWF0cml4KGFtb3Vu
dCwgbWF0cml4KTsKLSAgICAgICAgICAgIGZpbHRlci5yZXNldChjcmVhdGVNYXRyaXhJbWFnZUZp
bHRlcihtYXRyaXgsIGZpbHRlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKLSAgICAgICAgICAgIGZs
b2F0IGFtb3VudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24qPigmb3ApLT5hbW91bnQoKTsKLSAgICAgICAgICAgIGdldEJyaWdodG5lc3NN
YXRyaXgoYW1vdW50LCBtYXRyaXgpOwotICAgICAgICAgICAgZmlsdGVyLnJlc2V0KGNyZWF0ZU1h
dHJpeEltYWdlRmlsdGVyKG1hdHJpeCwgZmlsdGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAgICAg
ICAgICAgIGZsb2F0IGFtb3VudCA9IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24qPigmb3ApLT5hbW91bnQoKTsKLSAgICAgICAgICAgIGdldENv
bnRyYXN0TWF0cml4KGFtb3VudCwgbWF0cml4KTsKLSAgICAgICAgICAgIGZpbHRlci5yZXNldChj
cmVhdGVNYXRyaXhJbWFnZUZpbHRlcihtYXRyaXgsIGZpbHRlcikpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAg
ICAgICAgICAgIGZsb2F0IHBpeGVsUmFkaXVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRl
ck9wZXJhdGlvbio+KCZvcCktPnN0ZERldmlhdGlvbigpLmdldEZsb2F0VmFsdWUoKTsKLSAgICAg
ICAgICAgIGZpbHRlci5yZXNldChuZXcgU2tCbHVySW1hZ2VGaWx0ZXIocGl4ZWxSYWRpdXMsIHBp
eGVsUmFkaXVzLCBmaWx0ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewotICAgICAgICAgICAgY29u
c3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogZHJvcCA9IHN0YXRpY19jYXN0PGNvbnN0IERy
b3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qPigmb3ApOwotICAgICAgICAgICAgZmlsdGVyLnJlc2V0
KG5ldyBEcm9wU2hhZG93SW1hZ2VGaWx0ZXIoU2tJbnRUb1NjYWxhcihkcm9wLT54KCkpLCBTa0lu
dFRvU2NhbGFyKGRyb3AtPnkoKSksIFNrSW50VG9TY2FsYXIoZHJvcC0+c3RkRGV2aWF0aW9uKCkp
LCBkcm9wLT5jb2xvcigpLnJnYigpLCBmaWx0ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6VkFMSURBVEVEX0NVU1RPTToKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNV
U1RPTToKLSAgICAgICAgICAgIC8vIE5vdCBzdXBwb3J0ZWQuCi0jZW5kaWYKLSAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlBBU1NUSFJPVUdIOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6Tk9ORToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBmaWx0ZXIuZGV0YWNoKCk7Ci19Ci0KLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvU2tpYUltYWdlRmlsdGVyQnVpbGRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL1NraWFJbWFn
ZUZpbHRlckJ1aWxkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMxY2EyMjIw
YTIxMGQxYjMzZWQ3MTVjYWQ3OTEzMjc5ZDk5NzZkZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NraWEvU2tpYUltYWdlRmlsdGVyQnVpbGRlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2tpYUltYWdlRmlsdGVyQnVpbGRlcl9oCi0jZGVm
aW5lIFNraWFJbWFnZUZpbHRlckJ1aWxkZXJfaAotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LQotY2xhc3MgU2tJbWFnZUZpbHRlcjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgRmls
dGVyRWZmZWN0OwotY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLQotY2xhc3MgU2tpYUltYWdlRmls
dGVyQnVpbGRlciB7Ci1wdWJsaWM6Ci0gICAgU2tpYUltYWdlRmlsdGVyQnVpbGRlcigpOwotICAg
IH5Ta2lhSW1hZ2VGaWx0ZXJCdWlsZGVyKCk7Ci0KLSAgICBTa0ltYWdlRmlsdGVyKiBidWlsZChG
aWx0ZXJFZmZlY3QqKTsKLSAgICBTa0ltYWdlRmlsdGVyKiBidWlsZChjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJik7Ci1wcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxGaWx0ZXJFZmZlY3QqLCBT
a0ltYWdlRmlsdGVyKj4gRmlsdGVyQnVpbGRlckhhc2hNYXA7Ci0gICAgRmlsdGVyQnVpbGRlckhh
c2hNYXAgbV9tYXA7Ci19OwotCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRQb2ludFNraWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFBvaW50U2tpYS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NGE3NzIwYjUzNzAzMzBiZDUxZjc1YWVkMmI5Zjk4N2Rm
YTAzN2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFBvaW50U2tpYS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCi0KLSNpbmNsdWRlICJTa1BvaW50LmgiCi0jaW5jbHVkZSAiU2tp
YVV0aWxzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRQb2ludDo6RmxvYXRQb2lu
dChjb25zdCBTa1BvaW50JiBwKQotICAgIDogbV94KHAuZlgpCi0gICAgLCBtX3kocC5mWSkKLXsK
LX0KLQotRmxvYXRQb2ludDo6b3BlcmF0b3IgU2tQb2ludCgpIGNvbnN0Ci17Ci0gICAgU2tQb2lu
dCBwID0geyBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKG1feCksIFdlYkNvcmVGbG9hdFRvU2tTY2Fs
YXIobV95KSB9OwotICAgIHJldHVybiBwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zsb2F0UmVj
dFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFJl
Y3RTa2lhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMwNDViYTk1YWE1YzZi
Y2E1NjI5ZmQzZWZjOGZkODUwMTYzMjk4Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zs
b2F0UmVjdFNraWEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpbmNsdWRlICJTa1JlY3Qu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBT
a1JlY3QmIHIpCi0gICAgOiBtX2xvY2F0aW9uKHIuZkxlZnQsIHIuZlRvcCkKLSAgICAsIG1fc2l6
ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpCi17Ci19Ci0KLUZsb2F0UmVjdDo6b3BlcmF0b3IgU2tS
ZWN0KCkgY29uc3QKLXsKLSAgICBTa1JlY3QgcmVjdCA9IHsgeCgpLCB5KCksIG1heFgoKSwgbWF4
WSgpIH07Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hl
U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNo
ZVNraWEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDU4MzlhNDU2MGJhMWY2
OTBiZDdiNmJiMDVhMjE5NGVkM2FlNWM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9u
dENhY2hlU2tpYS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICog
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNp
bmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAi
Rm9udEZhbWlseS5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgotI2luY2x1ZGUgIlNrUGFpbnQuaCIKLSNpbmNsdWRlICJTa1R5cGVmYWNlLmgi
Ci0jaW5jbHVkZSAiU2tVdGlscy5oIgotI2luY2x1ZGUgPHVuaWNvZGUvbG9jaWQuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci12b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxTaW1w
bGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCi17Ci0gICAgaWN1
OjpMb2NhbGUgbG9jYWxlID0gaWN1OjpMb2NhbGU6OmdldERlZmF1bHQoKTsKLSAgICBGb250Q2Fj
aGU6OlNpbXBsZUZvbnRGYW1pbHkgZmFtaWx5OwotICAgIEZvbnRDYWNoZTo6Z2V0Rm9udEZhbWls
eUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoLCBsb2NhbGUuZ2V0TGFuZ3VhZ2UoKSwg
JmZhbWlseSk7Ci0gICAgaWYgKGZhbWlseS5uYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBBdG9taWNTdHJpbmcgYXRvbWljRmFtaWx5KGZhbWlseS5uYW1lKTsKLSAgICAv
LyBDaGFuZ2VzIHdlaWdodCBhbmQvb3IgaXRhbGljIG9mIGdpdmVuIEZvbnREZXNjcmlwdGlvbiBk
ZXBlbmRzIG9uCi0gICAgLy8gdGhlIHJlc3VsdCBvZiBmb250Y29uZmlnIHNvIHRoYXQga2VlcGlu
ZyB0aGUgY29ycmVjdCBmb250IG1hcHBpbmcKLSAgICAvLyBvZiB0aGUgZ2l2ZW4gY2hhcmFjdGVy
cy4gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzIxMDkgZm9yIGRldGFpbHMuCi0gICAgYm9vbCBzaG91
bGRTZXRGYWtlQm9sZCA9IGZhbHNlOwotICAgIGJvb2wgc2hvdWxkU2V0RmFrZUl0YWxpYyA9IGZh
bHNlOwotICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihmb250LmZvbnREZXNjcmlwdGlv
bigpKTsKLSAgICBpZiAoZmFtaWx5LmlzQm9sZCAmJiBkZXNjcmlwdGlvbi53ZWlnaHQoKSA8IEZv
bnRXZWlnaHRCb2xkKQotICAgICAgICBkZXNjcmlwdGlvbi5zZXRXZWlnaHQoRm9udFdlaWdodEJv
bGQpOwotICAgIGlmICghZmFtaWx5LmlzQm9sZCAmJiBkZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBG
b250V2VpZ2h0Qm9sZCkgewotICAgICAgICBzaG91bGRTZXRGYWtlQm9sZCA9IHRydWU7Ci0gICAg
ICAgIGRlc2NyaXB0aW9uLnNldFdlaWdodChGb250V2VpZ2h0Tm9ybWFsKTsKLSAgICB9Ci0gICAg
aWYgKGZhbWlseS5pc0l0YWxpYyAmJiBkZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBGb250SXRhbGlj
T2ZmKQotICAgICAgICBkZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udEl0YWxpY09uKTsKLSAgICBp
ZiAoIWZhbWlseS5pc0l0YWxpYyAmJiBkZXNjcmlwdGlvbi5pdGFsaWMoKSA9PSBGb250SXRhbGlj
T24pIHsKLSAgICAgICAgc2hvdWxkU2V0RmFrZUl0YWxpYyA9IHRydWU7Ci0gICAgICAgIGRlc2Ny
aXB0aW9uLnNldEl0YWxpYyhGb250SXRhbGljT2ZmKTsKLSAgICB9Ci0KLSAgICBGb250UGxhdGZv
cm1EYXRhKiBzdWJzdGl0dXRlUGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShkZXNjcmlwdGlvbiwgYXRvbWljRmFtaWx5LCBEb05vdFJldGFpbik7Ci0gICAgaWYgKCFzdWJz
dGl0dXRlUGxhdGZvcm1EYXRhKQotICAgICAgICByZXR1cm4gMDsKLSAgICBGb250UGxhdGZvcm1E
YXRhIHBsYXRmb3JtRGF0YSA9IEZvbnRQbGF0Zm9ybURhdGEoKnN1YnN0aXR1dGVQbGF0Zm9ybURh
dGEpOwotICAgIHBsYXRmb3JtRGF0YS5zZXRGYWtlQm9sZChzaG91bGRTZXRGYWtlQm9sZCk7Ci0g
ICAgcGxhdGZvcm1EYXRhLnNldEZha2VJdGFsaWMoc2hvdWxkU2V0RmFrZUl0YWxpYyk7Ci0gICAg
cmV0dXJuIGdldENhY2hlZEZvbnREYXRhKCZwbGF0Zm9ybURhdGEsIERvTm90UmV0YWluKTsKLX0K
LQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQotewotICAgIHJldHVybiAwOwotfQotCi1QYXNz
UmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3Vs
ZFJldGFpbikKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywg
c2Fuc1N0ciwgKCJTYW5zIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBzZXJpZlN0ciwgKCJT
ZXJpZiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgbW9ub3NwYWNlU3RyLCAoIk1vbm9zcGFj
ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLQotICAgIEZvbnRQbGF0
Zm9ybURhdGEqIGZvbnRQbGF0Zm9ybURhdGEgPSAwOwotICAgIHN3aXRjaCAoZGVzY3JpcHRpb24u
Z2VuZXJpY0ZhbWlseSgpKSB7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5
OgotICAgICAgICBmb250UGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShk
ZXNjcmlwdGlvbiwgc2VyaWZTdHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnREZXNj
cmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5OgotICAgICAgICBmb250UGxhdGZvcm1EYXRhID0gZ2V0
Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgbW9ub3NwYWNlU3RyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKLSAg
ICBkZWZhdWx0OgotICAgICAgICBmb250UGxhdGZvcm1EYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRm
b3JtRGF0YShkZXNjcmlwdGlvbiwgc2Fuc1N0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIGlmICghZm9udFBsYXRmb3JtRGF0YSkgewotICAgICAgICAvLyB3ZSBzaG91bGQgYXQgbGVh
c3QgaGF2ZSBBcmlhbDsgdGhpcyBpcyB0aGUgU2tGb250SG9zdF9mb250Y29uZmlnIGxhc3QgcmVz
b3J0IGZhbGxiYWNrCi0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3Ry
aW5nLCBhcmlhbFN0ciwgKCJBcmlhbCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpKTsKLSAgICAgICAgZm9udFBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURh
dGEoZGVzY3JpcHRpb24sIGFyaWFsU3RyKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZm9udFBsYXRm
b3JtRGF0YSk7Ci0gICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGZvbnRQbGF0Zm9ybURhdGEs
IHNob3VsZFJldGFpbik7Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotUGFzc093blB0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNy
ZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQotewotICAgIGNvbnN0IGNoYXIqIG5hbWUg
PSAwOwotICAgIENTdHJpbmcgczsKLQotICAgIC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJh
Y2sgZm9udCAoZS5nLiAiLXdlYmtpdC1tb25vc3BhY2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRv
Ci0gICAgLy8gdGhlIGZhbGxiYWNrIG5hbWUgKGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNv
bmZpZyB1bmRlcnN0YW5kcy4KLSAgICBpZiAoIWZhbWlseS5sZW5ndGgoKSB8fCBmYW1pbHkuc3Rh
cnRzV2l0aCgiLXdlYmtpdC0iKSkgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKLSAg
ICAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6R2VuZXJpY0ZhbWlseVR5cGUgbVR5cGU7Ci0gICAg
ICAgICAgICBjb25zdCBjaGFyKiBtTmFtZTsKLSAgICAgICAgfSBmb250RGVzY3JpcHRpb25zW10g
PSB7Ci0gICAgICAgICAgICB7IEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHksICJzZXJpZiIg
fSwKLSAgICAgICAgICAgIHsgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHksICJzYW5z
LXNlcmlmIiB9LAotICAgICAgICAgICAgeyBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWls
eSwgIm1vbm9zcGFjZSIgfSwKLSAgICAgICAgICAgIHsgRm9udERlc2NyaXB0aW9uOjpDdXJzaXZl
RmFtaWx5LCAiY3Vyc2l2ZSIgfSwKLSAgICAgICAgICAgIHsgRm9udERlc2NyaXB0aW9uOjpGYW50
YXN5RmFtaWx5LCAiZmFudGFzeSIgfQotICAgICAgICB9OwotCi0gICAgICAgIEZvbnREZXNjcmlw
dGlvbjo6R2VuZXJpY0ZhbWlseVR5cGUgdHlwZSA9IGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFt
aWx5KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBTS19BUlJBWV9DT1VOVChm
b250RGVzY3JpcHRpb25zKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBmb250RGVz
Y3JpcHRpb25zW2ldLm1UeXBlKSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGZvbnREZXNjcmlw
dGlvbnNbaV0ubU5hbWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKCFuYW1lKQotICAgICAgICAgICAgbmFtZSA9ICIiOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIGNvbnZlcnQgdGhlIG5hbWUgdG8gdXRmOAotICAgICAgICBz
ID0gZmFtaWx5LnN0cmluZygpLnV0ZjgoKTsKLSAgICAgICAgbmFtZSA9IHMuZGF0YSgpOwotICAg
IH0KLQotICAgIGludCBzdHlsZSA9IFNrVHlwZWZhY2U6OmtOb3JtYWw7Ci0gICAgaWYgKGZvbnRE
ZXNjcmlwdGlvbi53ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkKLSAgICAgICAgc3R5bGUgfD0g
U2tUeXBlZmFjZTo6a0JvbGQ7Ci0gICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSkKLSAg
ICAgICAgc3R5bGUgfD0gU2tUeXBlZmFjZTo6a0l0YWxpYzsKLQotICAgIFNrVHlwZWZhY2UqIHRm
ID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbU5hbWUobmFtZSwgc3RhdGljX2Nhc3Q8U2tUeXBlZmFj
ZTo6U3R5bGU+KHN0eWxlKSk7Ci0gICAgaWYgKCF0ZikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPQotICAgICAgICBuZXcgRm9udFBsYXRm
b3JtRGF0YSh0ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUgJiBTa1R5cGVmYWNlOjprQm9sZCkgJiYg
IXRmLT5pc0JvbGQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlICYgU2tU
eXBlZmFjZTo6a0l0YWxpYykgJiYgIXRmLT5pc0l0YWxpYygpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSk7Ci0gICAgdGYtPnVucmVm
KCk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKHJlc3VsdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjMmMxYjY0YTcxMmVhZGRiN2VhOTA4MGNmYjliOTRmYzdlODA3MjgzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4LCAyMDA5LCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIENvbXBh
bnkgMTAwLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuaCIKLQotI2lmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSAiT3BlblR5cGVVdGlsaXRpZXMu
aCIKLSNlbGlmIE9TKFVOSVgpCi0jaW5jbHVkZSAiU2tTdHJlYW0uaCIKLSNlbmRpZgotCi0jaW5j
bHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0Lmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPcGVuVHlwZVNhbml0aXpl
ci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotCi0jaWYgT1MoV0lORE9XUykKLSNpbmNs
dWRlIDxvYmpiYXNlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jZWxpZiBPUyhV
TklYKQotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1Gb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCi17Ci0j
aWYgT1MoV0lORE9XUykKLSAgICBpZiAobV9mb250UmVmZXJlbmNlKQotICAgICAgICBSZW1vdmVG
b250TWVtUmVzb3VyY2VFeChtX2ZvbnRSZWZlcmVuY2UpOwotI2VsaWYgT1MoVU5JWCkKLSAgICBp
ZiAobV9mb250UmVmZXJlbmNlKQotICAgICAgICBtX2ZvbnRSZWZlcmVuY2UtPnVucmVmKCk7Ci0j
ZW5kaWYKLX0KLQotRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250
UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50
YXRpb24gb3JpZW50YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRm9udFdpZHRoVmFyaWFudCwgRm9udFJlbmRlcmluZ01vZGUg
bW9kZSkKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIEFTU0VSVChtX2ZvbnRSZWZlcmVuY2UpOwot
Ci0gICAgTE9HRk9OVCBsb2dGb250OwotICAgIC8vIG1fbmFtZSBjb21lcyBmcm9tIGNyZWF0ZVVu
aXF1ZUZvbnROYW1lLCB3aGljaCwgaW4gdHVybiwgZ2V0cwotICAgIC8vIGl0IGZyb20gYmFzZTY0
LWVuY29kZWQgdXVpZCAoMTI4LWJpdCkuIFNvLCBtX25hbWUKLSAgICAvLyBjYW4gbmV2ZXIgYmUg
bG9uZ2VyIHRoYW4gTEZfRkFDRVNJWkUgKDMyKS4KLSAgICBpZiAobV9uYW1lLmxlbmd0aCgpICsg
MSA+PSBMRl9GQUNFU0laRSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoKTsKLSAgICB9Ci0gICAgbWVtY3B5KGxvZ0ZvbnQu
bGZGYWNlTmFtZSwgbV9uYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksCi0gICAg
ICAgICAgIHNpemVvZihsb2dGb250LmxmRmFjZU5hbWVbMF0pICogKDEgKyBtX25hbWUubGVuZ3Ro
KCkpKTsKLQotICAgIC8vIEZJWE1FOiBhbG1vc3QgaWRlbnRpY2FsIHRvIEZpbGxMb2dGb250IGlu
IEZvbnRDYWNoZVdpbi5jcHAuCi0gICAgLy8gTmVlZCB0byByZWZhY3Rvci4KLSAgICBsb2dGb250
LmxmSGVpZ2h0ID0gLXNpemU7Ci0gICAgbG9nRm9udC5sZldpZHRoID0gMDsKLSAgICBsb2dGb250
LmxmRXNjYXBlbWVudCA9IDA7Ci0gICAgbG9nRm9udC5sZk9yaWVudGF0aW9uID0gMDsKLSAgICBs
b2dGb250LmxmVW5kZXJsaW5lID0gZmFsc2U7Ci0gICAgbG9nRm9udC5sZlN0cmlrZU91dCA9IGZh
bHNlOwotICAgIGxvZ0ZvbnQubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOwotICAgIGxvZ0Zv
bnQubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfT05MWV9QUkVDSVM7Ci0gICAgbG9nRm9udC5sZlF1
YWxpdHkgPSBpc1J1bm5pbmdMYXlvdXRUZXN0KCkgPwotICAgICAgICAgICAgICAgICAgICAgICAg
Tk9OQU5USUFMSUFTRURfUVVBTElUWSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxU
X1FVQUxJVFk7IC8vIEhvbm9yIHVzZXIncyBkZXNrdG9wIHNldHRpbmdzLgotICAgIGxvZ0ZvbnQu
bGZQaXRjaEFuZEZhbWlseSA9IERFRkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FSRTsKLSAgICBsb2dG
b250LmxmSXRhbGljID0gaXRhbGljOwotICAgIGxvZ0ZvbnQubGZXZWlnaHQgPSBib2xkID8gRldf
Qk9MRCA6IEZXX0RPTlRDQVJFOwotCi0gICAgSEZPTlQgaGZvbnQgPSBDcmVhdGVGb250SW5kaXJl
Y3QoJmxvZ0ZvbnQpOwotICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGhmb250LCBzaXplLCBv
cmllbnRhdGlvbik7Ci0jZWxpZiBPUyhVTklYKQotICAgIEFTU0VSVChtX2ZvbnRSZWZlcmVuY2Up
OwotICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKG1fZm9udFJlZmVyZW5jZSwgIiIsIHNpemUs
IGJvbGQgJiYgIW1fZm9udFJlZmVyZW5jZS0+aXNCb2xkKCksIGl0YWxpYyAmJiAhbV9mb250UmVm
ZXJlbmNlLT5pc0l0YWxpYygpLCBvcmllbnRhdGlvbik7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoKTsKLSNlbmRpZgotfQotCi0jaWYg
T1MoV0lORE9XUykKLS8vIENyZWF0ZXMgYSB1bmlxdWUgYW5kIHVucHJlZGljdGFibGUgZm9udCBu
YW1lLCBpbiBvcmRlciB0byBhdm9pZCBjb2xsaXNpb25zIGFuZCB0bwotLy8gbm90IGFsbG93IGFj
Y2VzcyBmcm9tIENTUy4KLXN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQotewot
ICAgIEdVSUQgZm9udFV1aWQ7Ci0gICAgQ29DcmVhdGVHdWlkKCZmb250VXVpZCk7Ci0KLSAgICBT
dHJpbmcgZm9udE5hbWUgPSBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJmZv
bnRVdWlkKSwgc2l6ZW9mKGZvbnRVdWlkKSk7Ci0gICAgQVNTRVJUKGZvbnROYW1lLmxlbmd0aCgp
IDwgTEZfRkFDRVNJWkUpOwotICAgIHJldHVybiBmb250TmFtZTsKLX0KLSNlbmRpZgotCi0jaWYg
T1MoVU5JWCkKLWNsYXNzIFJlbW90ZUZvbnRTdHJlYW0gOiBwdWJsaWMgU2tTdHJlYW0gewotcHVi
bGljOgotICAgIGV4cGxpY2l0IFJlbW90ZUZvbnRTdHJlYW0oUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlcikKLSAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCi0gICAgICAgICwgbV9vZmZz
ZXQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+UmVtb3RlRm9udFN0cmVhbSgpCi0g
ICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCByZXdpbmQoKQotICAgIHsKLSAgICAgICAg
bV9vZmZzZXQgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHNpemVfdCByZWFkKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICBp
ZiAoIWJ1ZmZlciAmJiAhc2l6ZSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyByZXF1ZXN0IGZv
ciB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJlYW0uCi0gICAgICAgICAgICByZXR1cm4gbV9idWZmZXIt
PnNpemUoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBUaGlzIGlzIGEgcmVxdWVzdCB0byByZWFk
IGJ5dGVzIG9yIHNraXAgYnl0ZXMgKHdoZW4gYnVmZmVyIGlzIDApLgotICAgICAgICBpZiAoIW1f
YnVmZmVyLT5kYXRhKCkgfHwgIW1fYnVmZmVyLT5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgc2l6ZV90IGxlZnQgPSBtX2J1ZmZlci0+c2l6ZSgpIC0gbV9vZmZzZXQ7Ci0g
ICAgICAgIHNpemVfdCBieXRlc1RvQ29uc3VtZSA9IHN0ZDo6bWluKGxlZnQsIHNpemUpOwotICAg
ICAgICBpZiAoYnVmZmVyKQotICAgICAgICAgICAgc3RkOjptZW1jcHkoYnVmZmVyLCBtX2J1ZmZl
ci0+ZGF0YSgpICsgbV9vZmZzZXQsIGJ5dGVzVG9Db25zdW1lKTsKLSAgICAgICAgbV9vZmZzZXQg
Kz0gYnl0ZXNUb0NvbnN1bWU7Ci0gICAgICAgIHJldHVybiBieXRlc1RvQ29uc3VtZTsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAgc2l6
ZV90IG1fb2Zmc2V0OwotfTsKLSNlbmRpZgotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVh
dGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQotewotICAgIEFT
U0VSVF9BUkcoYnVmZmVyLCBidWZmZXIpOwotCi0jaWYgVVNFKE9QRU5UWVBFX1NBTklUSVpFUikK
LSAgICBPcGVuVHlwZVNhbml0aXplciBzYW5pdGl6ZXIoYnVmZmVyKTsKLSAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiB0cmFuc2NvZGVCdWZmZXIgPSBzYW5pdGl6ZXIuc2FuaXRpemUoKTsKLSAgICBp
ZiAoIXRyYW5zY29kZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIDA7IC8vIHZhbGlkYXRpb24gZmFp
bGVkLgotICAgIGJ1ZmZlciA9IHRyYW5zY29kZUJ1ZmZlci5nZXQoKTsKLSNlbmRpZgotCi0jaWYg
T1MoV0lORE9XUykKLSAgICAvLyBJbnRyb2R1Y2UgdGhlIGZvbnQgdG8gR0RJLiBBZGRGb250TWVt
UmVzb3VyY2VFeCBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUsIGJlY2F1c2UgaXQgd2lsbCBwb2xs
dXRlIHRoZSBwcm9jZXNzJ3MKLSAgICAvLyBmb250IG5hbWVzcGFjZSAoV2luZG93cyBoYXMgbm8g
QVBJIGZvciBjcmVhdGluZyBhbiBIRk9OVCBmcm9tIGRhdGEgd2l0aG91dCBleHBvc2luZyB0aGUg
Zm9udCB0byB0aGUKLSAgICAvLyBlbnRpcmUgcHJvY2VzcyBmaXJzdCkuCi0gICAgU3RyaW5nIGZv
bnROYW1lID0gY3JlYXRlVW5pcXVlRm9udE5hbWUoKTsKLSAgICBIQU5ETEUgZm9udFJlZmVyZW5j
ZSA9IHJlbmFtZUFuZEFjdGl2YXRlRm9udChidWZmZXIsIGZvbnROYW1lKTsKLSAgICBpZiAoIWZv
bnRSZWZlcmVuY2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBuZXcgRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YShmb250UmVmZXJlbmNlLCBmb250TmFtZSk7Ci0jZWxpZiBPUyhVTklYKQot
ICAgIFJlbW90ZUZvbnRTdHJlYW0qIHN0cmVhbSA9IG5ldyBSZW1vdGVGb250U3RyZWFtKGJ1ZmZl
cik7Ci0gICAgU2tUeXBlZmFjZSogdHlwZWZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tU3Ry
ZWFtKHN0cmVhbSk7Ci0gICAgc3RyZWFtLT51bnJlZigpOwotICAgIGlmICghdHlwZWZhY2UpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBuZXcgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSh0
eXBlZmFjZSk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci0j
ZW5kaWYKLX0KLQotYm9vbCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpzdXBwb3J0c0Zvcm1hdChj
b25zdCBTdHJpbmcmIGZvcm1hdCkKLXsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoZm9y
bWF0LCAidHJ1ZXR5cGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmb3JtYXQsICJvcGVudHlwZSIp
Ci0jaWYgVVNFKE9QRU5UWVBFX1NBTklUSVpFUikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoZm9ybWF0LCAid29mZiIpCi0jZW5kaWYKLSAgICA7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNWEwOThhNTYzMjdm
MTM1YTUxMzMwYTdjNTU1NWNjYjUyNWRmM2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmln
aHQgKGMpIDIwMDcsIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKLSNkZWZpbmUgRm9udEN1c3RvbVBsYXRm
b3JtRGF0YV9oCi0KLSNpbmNsdWRlICJGb250T3JpZW50YXRpb24uaCIKLSNpbmNsdWRlICJGb250
UmVuZGVyaW5nTW9kZS5oIgotI2luY2x1ZGUgIkZvbnRXaWR0aFZhcmlhbnQuaCIKLSNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi0jaWYgT1Mo
V0lORE9XUykKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0jZWxpZiBPUyhVTklYKQotI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7Ci1jbGFzcyBT
aGFyZWRCdWZmZXI7Ci0KLXN0cnVjdCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShGb250Q3VzdG9tUGxhdGZvcm1EYXRhKTsKLXB1YmxpYzoKLSNpZiBP
UyhXSU5ET1dTKQotICAgIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoSEFORExFIGZvbnRSZWZlcmVu
Y2UsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICAgICAgOiBtX2ZvbnRSZWZlcmVuY2UoZm9udFJl
ZmVyZW5jZSkKLSAgICAgICAgLCBtX25hbWUobmFtZSkKLSAgICB7fQotI2VsaWYgT1MoVU5JWCkK
LSAgICBleHBsaWNpdCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNrVHlwZWZhY2UqIHR5cGVmYWNl
KQotICAgICAgICA6IG1fZm9udFJlZmVyZW5jZSh0eXBlZmFjZSkKLSAgICB7fQotI2VuZGlmCi0K
LSAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSBm
b250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250T3Jp
ZW50YXRpb24gPSBIb3Jpem9udGFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGb250V2lkdGhWYXJpYW50ID0gUmVndWxhcldpZHRoLCBGb250UmVuZGVyaW5nTW9kZSA9
IE5vcm1hbFJlbmRlcmluZ01vZGUpOwotCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGb3JtYXQo
Y29uc3QgU3RyaW5nJik7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIEhBTkRMRSBtX2ZvbnRSZWZl
cmVuY2U7Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSNlbGlmIE9TKFVOSVgpCi0gICAgU2tUeXBlZmFj
ZSogbV9mb250UmVmZXJlbmNlOwotI2VuZGlmCi19OwotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
KiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciopOwotfQotCi0jZW5k
aWYgLy8gRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2NTVhNzRiYjg2MzdhZjUxNTU0NzVmMGI3NjI5ZjNiNDg4MWY1ZDRiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTgy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotCi0jaW5jbHVk
ZSAiRm9udFNtb290aGluZ01vZGUuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dFRlc3RTdXBwb3J0LmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCi0KLSNpbmNsdWRlICJTa0NhbnZhcy5oIgotI2luY2x1ZGUgIlNrUGFpbnQuaCIKLSNpbmNs
dWRlICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAiU2tUeXBlZmFjZV9tYWMuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21w
bGV4VGV4dCgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRm9udDo6Y2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQotewotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgdm9pZCBzZXR1cFBhaW50KFNrUGFpbnQqIHBhaW50LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGEsIGNvbnN0IEZvbnQqIGZvbnQsIGJvb2wgc2hvdWxkQW50aWFsaWFzLCBi
b29sIHNob3VsZFNtb290aEZvbnRzKQotewotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBs
YXRmb3JtRGF0YSA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKTsKLSAgICBjb25zdCBmbG9hdCB0
ZXh0U2l6ZSA9IHBsYXRmb3JtRGF0YS5tX3NpemUgPj0gMCA/IHBsYXRmb3JtRGF0YS5tX3NpemUg
OiAxMjsKLQotICAgIHBhaW50LT5zZXRBbnRpQWxpYXMoc2hvdWxkQW50aWFsaWFzKTsKLSAgICBw
YWludC0+c2V0RW1iZWRkZWRCaXRtYXBUZXh0KGZhbHNlKTsKLSAgICBwYWludC0+c2V0VGV4dFNp
emUoU2tGbG9hdFRvU2NhbGFyKHRleHRTaXplKSk7Ci0gICAgcGFpbnQtPnNldFZlcnRpY2FsVGV4
dChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCk7Ci0gICAgU2tUeXBlZmFj
ZSogdHlwZWZhY2UgPSBTa0NyZWF0ZVR5cGVmYWNlRnJvbUNURm9udChwbGF0Zm9ybURhdGEuY3RG
b250KCkpOwotICAgIFNrQXV0b1VucmVmIGF1dG9VbnJlZih0eXBlZmFjZSk7Ci0gICAgcGFpbnQt
PnNldFR5cGVmYWNlKHR5cGVmYWNlKTsKLSAgICBwYWludC0+c2V0RmFrZUJvbGRUZXh0KHBsYXRm
b3JtRGF0YS5tX3N5bnRoZXRpY0JvbGQpOwotICAgIHBhaW50LT5zZXRUZXh0U2tld1gocGxhdGZv
cm1EYXRhLm1fc3ludGhldGljT2JsaXF1ZSA/IC1TS19TY2FsYXIxIC8gNCA6IDApOwotICAgIHBh
aW50LT5zZXRBdXRvaGludGVkKGZhbHNlKTsgLy8gZnJlZXR5cGUgc3BlY2lmaWMKLSAgICBwYWlu
dC0+c2V0TENEUmVuZGVyVGV4dChzaG91bGRTbW9vdGhGb250cyk7Ci0gICAgcGFpbnQtPnNldFN1
YnBpeGVsVGV4dCh0cnVlKTsKLQotI2lmIE9TKERBUldJTikKLSAgICAvLyBXaGVuIHVzaW5nIENv
cmVHcmFwaGljcywgZGlzYWJsZSBoaW50aW5nIHdoZW4gd2Via2l0LWZvbnQtc21vb3RoaW5nOmFu
dGlhbGlhc2VkIGlzIHVzZWQuCi0gICAgLy8gU2VlIGNyYnVnLmNvbS8xNTIzMDQKLSAgICBpZiAo
Zm9udC0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFNtb290aGluZygpID09IEFudGlhbGlhc2VkKQot
ICAgICAgICBwYWludC0+c2V0SGludGluZyhTa1BhaW50OjprTm9fSGludGluZyk7Ci0jZW5kaWYK
LSAgICAKLSAgICBpZiAoZm9udC0+Zm9udERlc2NyaXB0aW9uKCkudGV4dFJlbmRlcmluZ01vZGUo
KSA9PSBHZW9tZXRyaWNQcmVjaXNpb24pCi0gICAgICAgIHBhaW50LT5zZXRIaW50aW5nKFNrUGFp
bnQ6OmtOb19IaW50aW5nKTsKLX0KLQotLy8gVE9ETzogVGhpcyBuZWVkcyB0byBiZSBzcGxpdCBp
bnRvIGhlbHBlciBmdW5jdGlvbnMgdG8gYmV0dGVyIHNjb3BlIHRoZQotLy8gaW5wdXRzL291dHB1
dHMsIGFuZCByZWR1Y2UgZHVwbGljYXRlIGNvZGUuCi0vLyBUaGlzIGlzc3VlIGlzIHRyYWNrZWQg
aW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTg5Ci12b2lkIEZv
bnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
R2x5cGhCdWZmZXJHbHlwaCkgPT0gc2l6ZW9mKHVpbnQxNl90KSwgR2x5cGhCdWZmZXJHbHlwaFNp
emVfZXF1YWxzX3VpbnQxNl90KTsKLQotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgPSB0cnVl
OwotICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKLQotICAgIHN3aXRjaCAoZm9udERl
c2NyaXB0aW9uKCkuZm9udFNtb290aGluZygpKSB7Ci0gICAgY2FzZSBBbnRpYWxpYXNlZDoKLSAg
ICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBTdWJwaXhlbEFudGlhbGlhc2VkOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5vU21vb3Ro
aW5nOgotICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZTsKLSAgICAgICAgc2hvdWxkU21v
b3RoRm9udHMgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBdXRvU21vb3RoaW5n
OgotICAgICAgICAvLyBGb3IgdGhlIEF1dG9TbW9vdGggY2FzZSwgZG9uJ3QgZG8gYW55dGhpbmch
IEtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGlmICghc2hvdWxkVXNlU21vb3RoaW5nKCkgfHwgaXNSdW5uaW5nTGF5b3V0VGVzdCgpKQotICAg
ICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOwotCi0gICAgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOwotICAgIFNrU2NhbGFyIHgg
PSBTa0Zsb2F0VG9TY2FsYXIocG9pbnQueCgpKTsKLSAgICBTa1NjYWxhciB5ID0gU2tGbG9hdFRv
U2NhbGFyKHBvaW50LnkoKSk7Ci0KLSAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbCkKLSAgICAgICAgeSArPSBTa0Zsb2F0VG9TY2FsYXIoZm9udC0+
Zm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQtPmZv
bnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSk7Ci0gICAgLy8gRklYTUU6IHRleHQgcmVuZGVyaW5n
IHNwZWVkOgotICAgIC8vIEFuZHJvaWQgaGFzIGNvZGUgaW4gdGhlaXIgV2ViQ29yZSBmb3JrIHRv
IHNwZWNpYWwgY2FzZSB3aGVuIHRoZQotICAgIC8vIEdseXBoQnVmZmVyIGhhcyBubyBhZHZhbmNl
cyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0cy4gSW4gdGhhdCBjYXNlIHRoZQotICAgIC8vIHRleHQg
ZHJhd2luZyBjYW4gcHJvY2VlZCBmYXN0ZXIuIEhvd2V2ZXIsIGl0J3MgdW5jbGVhciB3aGVuIHRo
b3NlCi0gICAgLy8gcGF0Y2hlcyBtYXkgYmUgdXBzdHJlYW1lZCB0byBXZWJLaXQgc28gd2UgYWx3
YXlzIHVzZSB0aGUgc2xvd2VyIHBhdGgKLSAgICAvLyBoZXJlLgotICAgIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2ID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSk7Ci0gICAgU2tBdXRv
U1RNYWxsb2M8MzIsIFNrUG9pbnQ+IHN0b3JhZ2UobnVtR2x5cGhzKTsKLSAgICBTa1BvaW50KiBw
b3MgPSBzdG9yYWdlLmdldCgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7
IGkrKykgewotICAgICAgICBwb3NbaV0uc2V0KHgsIHkpOwotICAgICAgICB4ICs9IFNrRmxvYXRU
b1NjYWxhcihhZHZbaV0ud2lkdGgoKSk7Ci0gICAgICAgIHkgKz0gU2tGbG9hdFRvU2NhbGFyKGFk
dltpXS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZv
cm1Db250ZXh0ID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGlmIChmb250LT5wbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKSB7Ci0gICAgICAgIHBsYXRmb3JtQ29u
dGV4dC0+c2F2ZSgpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPnJvdGF0ZSgtOTApOwotICAg
ICAgICBTa01hdHJpeCByb3RhdG9yOwotICAgICAgICByb3RhdG9yLnJlc2V0KCk7Ci0gICAgICAg
IHJvdGF0b3Iuc2V0Um90YXRlKDkwKTsKLSAgICAgICAgcm90YXRvci5tYXBQb2ludHMocG9zLCBu
dW1HbHlwaHMpOwotICAgIH0KLSAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0TW9kZSA9IGdj
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VGV4dERyYXdpbmdNb2RlKCk7Ci0KLSAgICAvLyBXZSBk
cmF3IHRleHQgdXAgdG8gdHdvIHRpbWVzIChvbmNlIGZvciBmaWxsLCBvbmNlIGZvciBzdHJva2Up
LgotICAgIGlmICh0ZXh0TW9kZSAmIFRleHRNb2RlRmlsbCkgewotICAgICAgICBTa1BhaW50IHBh
aW50OwotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5n
KCZwYWludCk7Ci0gICAgICAgIHNldHVwUGFpbnQoJnBhaW50LCBmb250LCB0aGlzLCBzaG91bGRB
bnRpYWxpYXMsIHNob3VsZFNtb290aEZvbnRzKTsKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4
dCgpLT5hZGp1c3RUZXh0UmVuZGVyTW9kZSgmcGFpbnQpOwotICAgICAgICBwYWludC5zZXRUZXh0
RW5jb2RpbmcoU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKLQotICAgICAgICBwbGF0
Zm9ybUNvbnRleHQtPmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzICogc2l6ZW9mKHVpbnQx
Nl90KSwgcG9zLCBwYWludCk7Ci0gICAgfQotCi0gICAgaWYgKCh0ZXh0TW9kZSAmIFRleHRNb2Rl
U3Ryb2tlKQotICAgICAgICAmJiBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0cm9rZVN0eWxl
KCkgIT0gTm9TdHJva2UKLSAgICAgICAgJiYgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJv
a2VUaGlja25lc3MoKSA+IDApIHsKLQotICAgICAgICBTa1BhaW50IHBhaW50OwotICAgICAgICBn
Yy0+cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDAp
OwotICAgICAgICBzZXR1cFBhaW50KCZwYWludCwgZm9udCwgdGhpcywgc2hvdWxkQW50aWFsaWFz
LCBzaG91bGRTbW9vdGhGb250cyk7Ci0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRq
dXN0VGV4dFJlbmRlck1vZGUoJnBhaW50KTsKLSAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5n
KFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7Ci0KLSAgICAgICAgaWYgKHRleHRNb2Rl
ICYgVGV4dE1vZGVGaWxsKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBhbHNvIGZpbGxlZCwgd2Ug
ZG9uJ3Qgd2FudCB0byBkcmF3IHNoYWRvd3MgdHdpY2UuCi0gICAgICAgICAgICAvLyBTZWUgY29t
bWVudCBpbiBGb250Q2hyb21pdW1XaW4uY3BwOjpwYWludFNraWFUZXh0KCkgZm9yIG1vcmUgZGV0
YWlscy4KLSAgICAgICAgICAgIHBhaW50LnNldExvb3BlcigwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgKiBzaXpl
b2YodWludDE2X3QpLCBwb3MsIHBhaW50KTsKLSAgICB9Ci0gICAgaWYgKGZvbnQtPnBsYXRmb3Jt
RGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4
dC0+cmVzdG9yZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRyZWVOb2RlU2tp
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRy
ZWVOb2RlU2tpYS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMjRkNDNkZmNj
ZDE3NDAwNGIzN2UzOGNjMzcwNzJhNmE2YjM1ZjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HbHlwaFBhZ2VUcmVlTm9kZVNraWEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICog
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9k
ZS5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0K
LSNpbmNsdWRlICJTa1RlbXBsYXRlcy5oIgotI2luY2x1ZGUgIlNrUGFpbnQuaCIKLSNpbmNsdWRl
ICJTa1V0aWxzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBHbHlwaFBhZ2U6OmZp
bGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2ln
bmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewotICAg
IGlmIChTa1VURjE2X0lzSGlnaFN1cnJvZ2F0ZShidWZmZXJbYnVmZmVyTGVuZ3RoLTFdKSkgewot
ICAgICAgICBTa0RlYnVnZigiJXMgbGFzdCBjaGFyIGlzIGhpZ2gtc3Vycm9nYXRlIiwgX19GVU5D
VElPTl9fKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBTa1BhaW50
IHBhaW50OwotICAgIGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5zZXR1cFBhaW50KCZwYWludCk7
Ci0gICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2Rpbmcp
OwotICAgIAotICAgIFNrQXV0b1NUTWFsbG9jIDxHbHlwaFBhZ2U6OnNpemUsIHVpbnQxNl90PiBn
bHlwaFN0b3JhZ2UobGVuZ3RoKTsKLSAgICB1aW50MTZfdCogZ2x5cGhzID0gZ2x5cGhTdG9yYWdl
LmdldCgpOwotICAgIC8vIHRleHRUb0dseXBocyB0YWtlcyBhIGJ5dGUgY291bnQsIG5vdCBhIGds
eXBoIGNvdW50IHNvIHdlIG11bHRpcGx5IGJ5IHR3by4KLSAgICB1bnNpZ25lZCBjb3VudCA9IHBh
aW50LnRleHRUb0dseXBocyhidWZmZXIsIGJ1ZmZlckxlbmd0aCAqIDIsIGdseXBocyk7Ci0gICAg
aWYgKGNvdW50ICE9IGxlbmd0aCkgewotICAgICAgICBTa0RlYnVnZigiJXMgY291bnQgIT0gbGVu
Z3RoXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgYWxsR2x5cGhzID0gMDsgLy8gdHJhY2sgaWYgYW55IG9mIHRoZSBnbHlwaElE
cyBhcmUgbm9uLXplcm8KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGhzW2ldLCBn
bHlwaHNbaV0gPyBmb250RGF0YSA6IE5VTEwpOwotICAgICAgICBhbGxHbHlwaHMgfD0gZ2x5cGhz
W2ldOwotICAgIH0KLQotICAgIHJldHVybiBhbGxHbHlwaHMgIT0gMDsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZTcwMDhlMDE1OTlhZWVkMmIzMzRkN2FmYTk1ZDljNzQzZmE3ODM5ZS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYWRpZW50U2tpYS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLQotI2lu
Y2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi0jaW5j
bHVkZSAiU2tDb2xvclNoYWRlci5oIgotI2luY2x1ZGUgIlNrR3JhZGllbnRTaGFkZXIuaCIKLSNp
bmNsdWRlICJTa2lhVXRpbHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEdyYWRp
ZW50OjpwbGF0Zm9ybURlc3Ryb3koKQotewotICAgIFNrU2FmZVVucmVmKG1fZ3JhZGllbnQpOwot
ICAgIG1fZ3JhZGllbnQgPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIFU4Q1BVIEYyQihmbG9hdCB4
KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHggKiAyNTUpOwotfQotCi1zdGF0aWMg
U2tDb2xvciBtYWtlU2tDb2xvcihmbG9hdCBhLCBmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiKQot
ewotICAgIHJldHVybiBTa0NvbG9yU2V0QVJHQihGMkIoYSksIEYyQihyKSwgRjJCKGcpLCBGMkIo
YikpOwotfQotCi0vLyBEZXRlcm1pbmUgdGhlIHRvdGFsIG51bWJlciBvZiBzdG9wcyBuZWVkZWQs
IGluY2x1ZGluZyBwc2V1ZG8tc3RvcHMgYXQgdGhlCi0vLyBlbmRzIGFzIG5lY2Vzc2FyeS4KLXN0
YXRpYyBzaXplX3QgdG90YWxTdG9wc05lZWRlZChjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wKiBz
dG9wRGF0YSwgc2l6ZV90IGNvdW50KQotewotICAgIC8vIE4uQi46ICBUaGUgdGVzdHMgaW4gdGhp
cyBmdW5jdGlvbiBzaG91bGQga2VwdCBpbiBzeW5jIHdpdGggdGhlIG9uZXMgaW4KLSAgICAvLyBm
aWxsU3RvcHMoKSwgb3IgYmFkbmVzcyBoYXBwZW5zLgotICAgIGNvbnN0IEdyYWRpZW50OjpDb2xv
clN0b3AqIHN0b3AgPSBzdG9wRGF0YTsKLSAgICBzaXplX3QgY291bnRVc2VkID0gY291bnQ7Ci0g
ICAgaWYgKGNvdW50IDwgMSB8fCBzdG9wLT5zdG9wID4gMC4wKQotICAgICAgICBjb3VudFVzZWQr
KzsKLSAgICBzdG9wICs9IGNvdW50IC0gMTsKLSAgICBpZiAoY291bnQgPCAxIHx8IHN0b3AtPnN0
b3AgPCAxLjApCi0gICAgICAgIGNvdW50VXNlZCsrOwotICAgIHJldHVybiBjb3VudFVzZWQ7Ci19
Ci0KLS8vIENvbGxlY3Qgc29ydGVkIHN0b3AgcG9zaXRpb24gYW5kIGNvbG9yIGluZm9ybWF0aW9u
IGludG8gdGhlIHBvcyBhbmQgY29sb3JzIAotLy8gYnVmZmVycywgZW5zdXJpbmcgc3RvcHMgYXQg
Ym90aCAwLjAgYW5kIDEuMC4gIFRoZSBidWZmZXJzIG11c3QgYmUgbGFyZ2UKLS8vIGVub3VnaCB0
byBob2xkIGluZm9ybWF0aW9uIGZvciBhbGwgc3RvcHMsIGluY2x1ZGluZyB0aGUgbmV3IGVuZHBv
aW50cyBpZgotLy8gc3RvcHMgYXQgMC4wIGFuZCAxLjAgYXJlbid0IGFscmVhZHkgaW5jbHVkZWQu
Ci1zdGF0aWMgdm9pZCBmaWxsU3RvcHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCogc3RvcERh
dGEsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCwgU2tTY2FsYXIqIHBvcywg
U2tDb2xvciogY29sb3JzKQoteyAKLSAgICBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wKiBzdG9w
ID0gc3RvcERhdGE7Ci0gICAgc2l6ZV90IHN0YXJ0ID0gMDsKLSAgICBpZiAoY291bnQgPCAxKSB7
Ci0gICAgICAgIC8vIEEgZ3JhZGllbnQgd2l0aCBubyBzdG9wcyBtdXN0IGJlIHRyYW5zcGFyZW50
IGJsYWNrLgotICAgICAgICBwb3NbMF0gPSBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKDAuMCk7Ci0g
ICAgICAgIGNvbG9yc1swXSA9IG1ha2VTa0NvbG9yKDAuMCwgMC4wLCAwLjAsIDAuMCk7Ci0gICAg
ICAgIHN0YXJ0ID0gMTsKLSAgICB9IGVsc2UgaWYgKHN0b3AtPnN0b3AgPiAwLjApIHsKLSAgICAg
ICAgLy8gQ29weSB0aGUgZmlyc3Qgc3RvcCB0byAwLjAuIFRoZSBmaXJzdCBzdG9wIHBvc2l0aW9u
IG1heSBoYXZlIGEgc2xpZ2h0Ci0gICAgICAgIC8vIHJvdW5kaW5nIGVycm9yLCBidXQgd2UgZG9u
J3QgY2FyZSBpbiB0aGlzIGZsb2F0IGNvbXBhcmlzb24sIHNpbmNlCi0gICAgICAgIC8vIDAuMCBj
b21lcyB0aHJvdWdoIGNsZWFubHkgYW5kIHBlb3BsZSBhcmVuJ3QgbGlrZWx5IHRvIHdhbnQgYSBn
cmFkaWVudAotICAgICAgICAvLyB3aXRoIGEgc3RvcCBhdCAoMCArIGVwc2lsb24pLgotICAgICAg
ICBwb3NbMF0gPSBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKDAuMCk7Ci0gICAgICAgIGNvbG9yc1sw
XSA9IG1ha2VTa0NvbG9yKHN0b3AtPmFscGhhLCBzdG9wLT5yZWQsIHN0b3AtPmdyZWVuLCBzdG9w
LT5ibHVlKTsKLSAgICAgICAgc3RhcnQgPSAxOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkg
PSBzdGFydDsgaSA8IHN0YXJ0ICsgY291bnQ7IGkrKykgewotICAgICAgICBwb3NbaV0gPSBXZWJD
b3JlRmxvYXRUb1NrU2NhbGFyKHN0b3AtPnN0b3ApOwotICAgICAgICBjb2xvcnNbaV0gPSBtYWtl
U2tDb2xvcihzdG9wLT5hbHBoYSwgc3RvcC0+cmVkLCBzdG9wLT5ncmVlbiwgc3RvcC0+Ymx1ZSk7
Ci0gICAgICAgICsrc3RvcDsKLSAgICB9Ci0KLSAgICAvLyBDb3B5IHRoZSBsYXN0IHN0b3AgdG8g
MS4wIGlmIG5lZWRlZC4gIFNlZSBjb21tZW50IGFib3ZlIGFib3V0IHRoaXMgZmxvYXQKLSAgICAv
LyBjb21wYXJpc29uLgotICAgIGlmIChjb3VudCA8IDEgfHwgKC0tc3RvcCktPnN0b3AgPCAxLjAp
IHsKLSAgICAgICAgcG9zW3N0YXJ0ICsgY291bnRdID0gV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcigx
LjApOwotICAgICAgICBjb2xvcnNbc3RhcnQgKyBjb3VudF0gPSBjb2xvcnNbc3RhcnQgKyBjb3Vu
dCAtIDFdOwotICAgIH0KLX0KLQotU2tTaGFkZXIqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50
KCkKLXsKLSAgICBpZiAobV9ncmFkaWVudCkKLSAgICAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7Ci0K
LSAgICBzb3J0U3RvcHNJZk5lY2Vzc2FyeSgpOwotICAgIEFTU0VSVChtX3N0b3BzU29ydGVkKTsK
LQotICAgIHNpemVfdCBjb3VudFVzZWQgPSB0b3RhbFN0b3BzTmVlZGVkKG1fc3RvcHMuZGF0YSgp
LCBtX3N0b3BzLnNpemUoKSk7Ci0gICAgQVNTRVJUKGNvdW50VXNlZCA+PSAyKTsKLSAgICBBU1NF
UlQoY291bnRVc2VkID49IG1fc3RvcHMuc2l6ZSgpKTsKLQotICAgIC8vIEZJWE1FOiBXaHkgaXMg
YWxsIHRoaXMgbWFudWFsIHBvaW50ZXIgbWF0aCBuZWVkZWQ/IQotICAgIFNrQXV0b01hbGxvYyBz
dG9yYWdlKGNvdW50VXNlZCAqIChzaXplb2YoU2tDb2xvcikgKyBzaXplb2YoU2tTY2FsYXIpKSk7
Ci0gICAgU2tDb2xvciogY29sb3JzID0gKFNrQ29sb3IqKXN0b3JhZ2UuZ2V0KCk7Ci0gICAgU2tT
Y2FsYXIqIHBvcyA9IChTa1NjYWxhciopKGNvbG9ycyArIGNvdW50VXNlZCk7Ci0KLSAgICBmaWxs
U3RvcHMobV9zdG9wcy5kYXRhKCksIG1fc3RvcHMuc2l6ZSgpLCBwb3MsIGNvbG9ycyk7Ci0KLSAg
ICBTa1NoYWRlcjo6VGlsZU1vZGUgdGlsZSA9IFNrU2hhZGVyOjprQ2xhbXBfVGlsZU1vZGU7Ci0g
ICAgc3dpdGNoIChtX3NwcmVhZE1ldGhvZCkgewotICAgIGNhc2UgU3ByZWFkTWV0aG9kUmVmbGVj
dDoKLSAgICAgICAgdGlsZSA9IFNrU2hhZGVyOjprTWlycm9yX1RpbGVNb2RlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFNwcmVhZE1ldGhvZFJlcGVhdDoKLSAgICAgICAgdGlsZSA9IFNrU2hh
ZGVyOjprUmVwZWF0X1RpbGVNb2RlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNwcmVhZE1l
dGhvZFBhZDoKLSAgICAgICAgdGlsZSA9IFNrU2hhZGVyOjprQ2xhbXBfVGlsZU1vZGU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChtX3JhZGlhbCkgewotICAgICAgICAvLyBTaW5j
ZSB0aGUgdHdvLXBvaW50IHJhZGlhbCBncmFkaWVudCBpcyBzbG93ZXIgdGhhbiB0aGUgcGxhaW4g
cmFkaWFsLAotICAgICAgICAvLyBvbmx5IHVzZSBpdCBpZiB3ZSBoYXZlIHRvLgotICAgICAgICBp
ZiAobV9wMCA9PSBtX3AxICYmIG1fcjAgPD0gMC4wZikgewotICAgICAgICAgICAgbV9ncmFkaWVu
dCA9IFNrR3JhZGllbnRTaGFkZXI6OkNyZWF0ZVJhZGlhbChtX3AxLCBtX3IxLCBjb2xvcnMsIHBv
cywgc3RhdGljX2Nhc3Q8aW50Pihjb3VudFVzZWQpLCB0aWxlKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIFRoZSByYWRpaSB3ZSBnaXZlIHRvIFNraWEgbXVzdCBiZSBwb3NpdGl2
ZS4gIElmIHdlJ3JlIGdpdmVuIGEgCi0gICAgICAgICAgICAvLyBuZWdhdGl2ZSByYWRpdXMsIGFz
ayBmb3IgemVybyBpbnN0ZWFkLgotICAgICAgICAgICAgU2tTY2FsYXIgcmFkaXVzMCA9IG1fcjAg
Pj0gMC4wZiA/IFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIobV9yMCkgOiAwOwotICAgICAgICAgICAg
U2tTY2FsYXIgcmFkaXVzMSA9IG1fcjEgPj0gMC4wZiA/IFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIo
bV9yMSkgOiAwOwotICAgICAgICAgICAgbV9ncmFkaWVudCA9IFNrR3JhZGllbnRTaGFkZXI6OkNy
ZWF0ZVR3b1BvaW50Q29uaWNhbChtX3AwLCByYWRpdXMwLCBtX3AxLCByYWRpdXMxLCBjb2xvcnMs
IHBvcywgc3RhdGljX2Nhc3Q8aW50Pihjb3VudFVzZWQpLCB0aWxlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChhc3BlY3RSYXRpbygpICE9IDEpIHsKLSAgICAgICAgICAgIC8vIENTUzMgZWxs
aXB0aWNhbCBncmFkaWVudHM6IGFwcGx5IHRoZSBlbGxpcHRpY2FsIHNjYWxpbmcgYXQgdGhlCi0g
ICAgICAgICAgICAvLyBncmFkaWVudCBjZW50ZXIgcG9pbnQuCi0gICAgICAgICAgICBtX2dyYWRp
ZW50U3BhY2VUcmFuc2Zvcm1hdGlvbi50cmFuc2xhdGUobV9wMC54KCksIG1fcDAueSgpKTsKLSAg
ICAgICAgICAgIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLnNjYWxlKDEsIDEgLyBhc3Bl
Y3RSYXRpbygpKTsKLSAgICAgICAgICAgIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLnRy
YW5zbGF0ZSgtbV9wMC54KCksIC1tX3AwLnkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9wMCA9
PSBtX3AxKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFNrUG9pbnQgcHRzWzJd
ID0geyBtX3AwLCBtX3AxIH07Ci0gICAgICAgIG1fZ3JhZGllbnQgPSBTa0dyYWRpZW50U2hhZGVy
OjpDcmVhdGVMaW5lYXIocHRzLCBjb2xvcnMsIHBvcywgc3RhdGljX2Nhc3Q8aW50Pihjb3VudFVz
ZWQpLCB0aWxlKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZ3JhZGllbnQpCi0gICAgICAgIC8vIHVz
ZSBsYXN0IGNvbG9yLCBzaW5jZSBvdXIgImdlb21ldHJ5IiB3YXMgZGVnZW5lcmF0ZSAoZS5nLiBy
YWRpdXM9PTApCi0gICAgICAgIG1fZ3JhZGllbnQgPSBuZXcgU2tDb2xvclNoYWRlcihjb2xvcnNb
Y291bnRVc2VkIC0gMV0pOwotICAgIGVsc2UKLSAgICAgICAgbV9ncmFkaWVudC0+c2V0TG9jYWxN
YXRyaXgobV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOwotICAgIHJldHVybiBtX2dyYWRp
ZW50OwotfQotCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudCh0
aGlzKTsKLSAgICBjb250ZXh0LT5maWxsUmVjdChyZWN0KTsKLX0KLQotdm9pZCBHcmFkaWVudDo6
c2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
bWF0cml4KQotewotICAgIGlmIChtX2dyYWRpZW50KQotICAgICAgICBtX2dyYWRpZW50LT5zZXRM
b2NhbE1hdHJpeChtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbik7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOGFjNmQwNjA4MWNiZjQ1ZTUxZWQyMGI0MjUzN2M0MmY1Y2IyZmYy
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgVVNFKDNEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNp
bmNsdWRlICJJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKLSNp
bmNsdWRlICJTa0NvbG9yUHJpdi5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0
cmFjdG9yKCkKLXsKLSAgICBpZiAobV9za2lhSW1hZ2UpCi0gICAgICAgIG1fc2tpYUltYWdlLT5i
aXRtYXAoKS51bmxvY2tQaXhlbHMoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCi17Ci0gICAgaWYgKCFtX2ltYWdlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9za2lhSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwotICAgIG1fYWxwaGFPcCA9IEFscGhhRG9Ob3RoaW5nOwotICAgIGJvb2wg
aGFzQWxwaGEgPSBtX3NraWFJbWFnZSA/ICFtX3NraWFJbWFnZS0+Yml0bWFwKCkuaXNPcGFxdWUo
KSA6IHRydWU7Ci0gICAgaWYgKCghbV9za2lhSW1hZ2UgfHwgaWdub3JlR2FtbWFBbmRDb2xvclBy
b2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYgbV9pbWFnZS0+ZGF0
YSgpKSB7Ci0gICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHJhdyB1bnByZW11bHRpcGxpZWQgaW1h
Z2UgZGF0YS4KLSAgICAgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihJ
bWFnZURlY29kZXI6OmNyZWF0ZSgKLSAgICAgICAgICAgICoobV9pbWFnZS0+ZGF0YSgpKSwgSW1h
Z2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwKLSAgICAgICAgICAgIGlnbm9yZUdhbW1h
QW5kQ29sb3JQcm9maWxlID8gSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlSWdub3Jl
ZCA6IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7Ci0gICAgICAg
IGlmICghZGVjb2RlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVjb2Rl
ci0+c2V0RGF0YShtX2ltYWdlLT5kYXRhKCksIHRydWUpOwotICAgICAgICBpZiAoIWRlY29kZXIt
PmZyYW1lQ291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSW1hZ2VG
cmFtZSogZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7Ci0gICAgICAgIGlm
ICghZnJhbWUgfHwgZnJhbWUtPnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGhhc0FscGhhID0gZnJhbWUtPmhh
c0FscGhhKCk7Ci0gICAgICAgIG1fbmF0aXZlSW1hZ2UgPSBmcmFtZS0+YXNOZXdOYXRpdmVJbWFn
ZSgpOwotICAgICAgICBpZiAoIW1fbmF0aXZlSW1hZ2UuZ2V0KCkgfHwgIW1fbmF0aXZlSW1hZ2Ut
PmlzRGF0YUNvbXBsZXRlKCkgfHwgIW1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLndpZHRoKCkgfHwg
IW1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBtX25hdGl2ZUltYWdl
LT5iaXRtYXAoKS5jb25maWcoKTsKLSAgICAgICAgaWYgKHNraWFDb25maWcgIT0gU2tCaXRtYXA6
OmtBUkdCXzg4ODhfQ29uZmlnKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBt
X3NraWFJbWFnZSA9IG1fbmF0aXZlSW1hZ2UuZ2V0KCk7Ci0gICAgICAgIGlmIChoYXNBbHBoYSAm
JiBwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1ByZW11
bHRpcGx5OwotICAgIH0gZWxzZSBpZiAoIXByZW11bHRpcGx5QWxwaGEgJiYgaGFzQWxwaGEpIHsK
LSAgICAgICAgLy8gMS4gRm9yIHRleEltYWdlMkQgd2l0aCBIVE1MVmlkZW9FbG1lbnQgaW5wdXQs
IGFzc3VtZSBubyBQcmVtdWx0aXBseUFscGhhIGhhZCBiZWVuIGFwcGxpZWQgYW5kIHRoZSBhbHBo
YSB2YWx1ZSBmb3IgZWFjaCBwaXhlbCBpcyAweEZGCi0gICAgICAgIC8vIHdoaWNoIGlzIHRydWUg
YXQgcHJlc2VudCBhbmQgbWF5IGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSBhbmQgbmVlZHMgYWRq
dXN0bWVudCBhY2NvcmRpbmdseS4KLSAgICAgICAgLy8gMi4gRm9yIHRleEltYWdlMkQgd2l0aCBI
VE1MQ2FudmFzRWxlbWVudCBpbnB1dCBpbiB3aGljaCBBbHBoYSBpcyBhbHJlYWR5IFByZW11bHRp
cGxpZWQgaW4gdGhpcyBwb3J0LAotICAgICAgICAvLyBkbyBBbHBoYURvVW5tdWx0aXBseSBpZiBV
TlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgaXMgc2V0IHRvIGZhbHNlLgotICAgICAgICBp
ZiAobV9pbWFnZUh0bWxEb21Tb3VyY2UgIT0gSHRtbERvbVZpZGVvKQotICAgICAgICAgICAgbV9h
bHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7Ci0gICAgfQotICAgIGlmICghbV9za2lhSW1hZ2Up
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faW1hZ2VTb3VyY2VGb3JtYXQgPSBTS19C
MzJfU0hJRlQgPyBEYXRhRm9ybWF0UkdCQTggOiBEYXRhRm9ybWF0QkdSQTg7Ci0gICAgbV9pbWFn
ZVdpZHRoID0gbV9za2lhSW1hZ2UtPmJpdG1hcCgpLndpZHRoKCk7Ci0gICAgbV9pbWFnZUhlaWdo
dCA9IG1fc2tpYUltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKTsKLSAgICBpZiAoIW1faW1hZ2VXaWR0
aCB8fCAhbV9pbWFnZUhlaWdodCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1faW1hZ2VT
b3VyY2VVbnBhY2tBbGlnbm1lbnQgPSAwOwotICAgIG1fc2tpYUltYWdlLT5iaXRtYXAoKS5sb2Nr
UGl4ZWxzKCk7Ci0gICAgbV9pbWFnZVBpeGVsRGF0YSA9IG1fc2tpYUltYWdlLT5iaXRtYXAoKS5n
ZXRQaXhlbHMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gVVNFKDNEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNTZjY2I1ZTIzMDM3Mzc5NzEwYzc2YjYw
ZjU4OGExZGRjYzJhNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHRTa2lhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMzMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAwNiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgot
I2luY2x1ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRl
ICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tp
YS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0U2tpYS5oIgotCi0jaW5jbHVkZSAiU2tBbm5vdGF0aW9uLmgiCi0jaW5jbHVkZSAiU2tCaXRt
YXAuaCIKLSNpbmNsdWRlICJTa0JsdXJNYXNrRmlsdGVyLmgiCi0jaW5jbHVkZSAiU2tDb2xvckZp
bHRlci5oIgotI2luY2x1ZGUgIlNrQ29ybmVyUGF0aEVmZmVjdC5oIgotI2luY2x1ZGUgIlNrRGF0
YS5oIgotI2luY2x1ZGUgIlNrTGF5ZXJEcmF3TG9vcGVyLmgiCi0jaW5jbHVkZSAiU2tSUmVjdC5o
IgotI2luY2x1ZGUgIlNrU2hhZGVyLmgiCi0jaW5jbHVkZSAiU2tpYVV0aWxzLmgiCi0jaW5jbHVk
ZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9T
KERBUldJTikKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vydmlj
ZXMuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLW5hbWVzcGFjZSB7Ci0vLyBMb2NhbCBoZWxwZXIgZnVuY3Rpb25zIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSZXR1cm4g
dmFsdWUgJSBtYXgsIGJ1dCBhY2NvdW50IGZvciB2YWx1ZSBwb3NzaWJseSBiZWluZyBuZWdhdGl2
ZS4KLWlubGluZSBpbnQgZmFzdE1vZChpbnQgdmFsdWUsIGludCBtYXgpCi17Ci0gICAgYm9vbCBp
c05lZyA9IGZhbHNlOwotICAgIGlmICh2YWx1ZSA8IDApIHsKLSAgICAgICAgdmFsdWUgPSAtdmFs
dWU7Ci0gICAgICAgIGlzTmVnID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHZhbHVlID49IG1heCkK
LSAgICAgICAgdmFsdWUgJT0gbWF4OwotICAgIGlmIChpc05lZykKLSAgICAgICAgdmFsdWUgPSAt
dmFsdWU7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIGFkZENvcm5lckFyYyhTa1BhdGgq
IHBhdGgsIGNvbnN0IFNrUmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50IHN0YXJ0
QW5nbGUpCi17Ci0gICAgU2tJUmVjdCBpcjsKLSAgICBpbnQgcnggPSBTa01pbjMyKFNrU2NhbGFy
Um91bmQocmVjdC53aWR0aCgpKSwgc2l6ZS53aWR0aCgpKTsKLSAgICBpbnQgcnkgPSBTa01pbjMy
KFNrU2NhbGFyUm91bmQocmVjdC5oZWlnaHQoKSksIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgaXIu
c2V0KC1yeCwgLXJ5LCByeCwgcnkpOwotICAgIHN3aXRjaCAoc3RhcnRBbmdsZSkgewotICAgIGNh
c2UgMDoKLSAgICAgICAgaXIub2Zmc2V0KHJlY3QuZlJpZ2h0IC0gaXIuZlJpZ2h0LCByZWN0LmZC
b3R0b20gLSBpci5mQm90dG9tKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA5MDoKLSAgICAg
ICAgaXIub2Zmc2V0KHJlY3QuZkxlZnQgLSBpci5mTGVmdCwgcmVjdC5mQm90dG9tIC0gaXIuZkJv
dHRvbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMTgwOgotICAgICAgICBpci5vZmZzZXQo
cmVjdC5mTGVmdCAtIGlyLmZMZWZ0LCByZWN0LmZUb3AgLSBpci5mVG9wKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSAyNzA6Ci0gICAgICAgIGlyLm9mZnNldChyZWN0LmZSaWdodCAtIGlyLmZS
aWdodCwgcmVjdC5mVG9wIC0gaXIuZlRvcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVCgwKTsKLSAgICB9Ci0KLSAgICBTa1JlY3QgcjsKLSAgICByLnNldChp
cik7Ci0gICAgcGF0aC0+YXJjVG8ociwgU2tJbnRUb1NjYWxhcihzdGFydEFuZ2xlKSwgU2tJbnRU
b1NjYWxhcig5MCksIGZhbHNlKTsKLX0KLQotdm9pZCBkcmF3MnhNYXJrZXIoU2tCaXRtYXAqIGJp
dG1hcCwgaW50IGluZGV4KQotewotCi0gICAgc3RhdGljIGNvbnN0IFNrUE1Db2xvciBsaW5lQ29s
b3JzWzJdID0gewotICAgICAgICBTa1ByZU11bHRpcGx5QVJHQigweEZGLCAweEZGLCAweDAwLCAw
eDAwKSwgLy8gT3BhcXVlIHJlZC4KLSAgICAgICAgU2tQcmVNdWx0aXBseUFSR0IoMHhGRiwgMHhD
MCwgMHhDMCwgMHhDMCksIC8vIE9wYXF1ZSBncmF5LgotICAgIH07Ci0gICAgc3RhdGljIGNvbnN0
IFNrUE1Db2xvciBhbnRpQ29sb3JzMVsyXSA9IHsKLSAgICAgICAgU2tQcmVNdWx0aXBseUFSR0Io
MHhCMCwgMHhGRiwgMHgwMCwgMHgwMCksIC8vIFNlbWl0cmFuc3BhcmVudCByZWQKLSAgICAgICAg
U2tQcmVNdWx0aXBseUFSR0IoMHhCMCwgMHhDMCwgMHhDMCwgMHhDMCksIC8vIFNlbWl0cmFuc3Bh
cmVudCBncmF5Ci0gICAgfTsKLSAgICBzdGF0aWMgY29uc3QgU2tQTUNvbG9yIGFudGlDb2xvcnMy
WzJdID0gewotICAgICAgICBTa1ByZU11bHRpcGx5QVJHQigweDYwLCAweEZGLCAweDAwLCAweDAw
KSwgLy8gTW9yZSB0cmFuc3BhcmVudCByZWQKLSAgICAgICAgU2tQcmVNdWx0aXBseUFSR0IoMHg2
MCwgMHhDMCwgMHhDMCwgMHhDMCksIC8vIE1vcmUgdHJhbnNwYXJlbnQgZ3JheQotICAgIH07Ci0K
LSAgICBjb25zdCBTa1BNQ29sb3IgbGluZUNvbG9yID0gbGluZUNvbG9yc1tpbmRleF07Ci0gICAg
Y29uc3QgU2tQTUNvbG9yIGFudGlDb2xvcjEgPSBhbnRpQ29sb3JzMVtpbmRleF07Ci0gICAgY29u
c3QgU2tQTUNvbG9yIGFudGlDb2xvcjIgPSBhbnRpQ29sb3JzMltpbmRleF07Ci0KLSAgICB1aW50
MzJfdCogcm93MSA9IGJpdG1hcC0+Z2V0QWRkcjMyKDAsIDApOwotICAgIHVpbnQzMl90KiByb3cy
ID0gYml0bWFwLT5nZXRBZGRyMzIoMCwgMSk7Ci0gICAgdWludDMyX3QqIHJvdzMgPSBiaXRtYXAt
PmdldEFkZHIzMigwLCAyKTsKLSAgICB1aW50MzJfdCogcm93NCA9IGJpdG1hcC0+Z2V0QWRkcjMy
KDAsIDMpOwotCi0gICAgLy8gUGF0dGVybjogWDBvICAgbzBYMG8gICBvMAotICAgIC8vICAgICAg
ICAgIFhYMG8gbzBYWFgwbyBvMFgKLSAgICAvLyAgICAgICAgICAgbzBYWFgwbyBvMFhYWDBvCi0g
ICAgLy8gICAgICAgICAgICBvMFgwbyAgIG8wWDBvCi0gICAgY29uc3QgU2tQTUNvbG9yIHJvdzFD
b2xvcltdID0geyBsaW5lQ29sb3IsIGFudGlDb2xvcjEsIGFudGlDb2xvcjIsIDAsICAgICAgICAg
IDAsICAgICAgICAgMCwgICAgICAgICAgYW50aUNvbG9yMiwgYW50aUNvbG9yMSB9OwotICAgIGNv
bnN0IFNrUE1Db2xvciByb3cyQ29sb3JbXSA9IHsgbGluZUNvbG9yLCBsaW5lQ29sb3IsICBhbnRp
Q29sb3IxLCBhbnRpQ29sb3IyLCAwLCAgICAgICAgIGFudGlDb2xvcjIsIGFudGlDb2xvcjEsIGxp
bmVDb2xvciB9OwotICAgIGNvbnN0IFNrUE1Db2xvciByb3czQ29sb3JbXSA9IHsgMCwgICAgICAg
ICBhbnRpQ29sb3IyLCBhbnRpQ29sb3IxLCBsaW5lQ29sb3IsICBsaW5lQ29sb3IsIGxpbmVDb2xv
ciwgIGFudGlDb2xvcjEsIGFudGlDb2xvcjIgfTsKLSAgICBjb25zdCBTa1BNQ29sb3Igcm93NENv
bG9yW10gPSB7IDAsICAgICAgICAgMCwgICAgICAgICAgYW50aUNvbG9yMiwgYW50aUNvbG9yMSwg
bGluZUNvbG9yLCBhbnRpQ29sb3IxLCBhbnRpQ29sb3IyLCAwIH07Ci0KLSAgICBmb3IgKGludCB4
ID0gMDsgeCA8IGJpdG1hcC0+d2lkdGgoKSArIDg7IHggKz0gOCkgewotICAgICAgICBpbnQgY291
bnQgPSBtaW4oYml0bWFwLT53aWR0aCgpIC0geCwgOCk7Ci0gICAgICAgIGlmIChjb3VudCA+IDAp
IHsKLSAgICAgICAgICAgIG1lbWNweShyb3cxICsgeCwgcm93MUNvbG9yLCBjb3VudCAqIHNpemVv
ZihTa1BNQ29sb3IpKTsKLSAgICAgICAgICAgIG1lbWNweShyb3cyICsgeCwgcm93MkNvbG9yLCBj
b3VudCAqIHNpemVvZihTa1BNQ29sb3IpKTsKLSAgICAgICAgICAgIG1lbWNweShyb3czICsgeCwg
cm93M0NvbG9yLCBjb3VudCAqIHNpemVvZihTa1BNQ29sb3IpKTsKLSAgICAgICAgICAgIG1lbWNw
eShyb3c0ICsgeCwgcm93NENvbG9yLCBjb3VudCAqIHNpemVvZihTa1BNQ29sb3IpKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBkcmF3MXhNYXJrZXIoU2tCaXRtYXAqIGJpdG1hcCwgaW50
IGluZGV4KQotewotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBsaW5lQ29sb3JzWzJdID0gewot
ICAgICAgICAweEZGIDw8IFNLX0EzMl9TSElGVCB8IDB4RkYgPDwgU0tfUjMyX1NISUZULCAvLyBP
cGFxdWUgcmVkLgotICAgICAgICAweEZGIDw8IFNLX0EzMl9TSElGVCB8IDB4QzAgPDwgU0tfUjMy
X1NISUZUIHwgMHhDMCA8PCBTS19HMzJfU0hJRlQgfCAweEMwIDw8IFNLX0IzMl9TSElGVCwgLy8g
T3BhcXVlIGdyYXkuCi0gICAgfTsKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgYW50aUNvbG9y
c1syXSA9IHsKLSAgICAgICAgMHg2MCA8PCBTS19BMzJfU0hJRlQgfCAweDYwIDw8IFNLX1IzMl9T
SElGVCwgLy8gU2VtaXRyYW5zcGFyZW50IHJlZAotICAgICAgICAweEZGIDw8IFNLX0EzMl9TSElG
VCB8IDB4QzAgPDwgU0tfUjMyX1NISUZUIHwgMHhDMCA8PCBTS19HMzJfU0hJRlQgfCAweEMwIDw8
IFNLX0IzMl9TSElGVCwgLy8gU2VtaXRyYW5zcGFyZW50IGdyYXkKLSAgICB9OwotCi0gICAgY29u
c3QgdWludDMyX3QgbGluZUNvbG9yID0gbGluZUNvbG9yc1tpbmRleF07Ci0gICAgY29uc3QgdWlu
dDMyX3QgYW50aUNvbG9yID0gYW50aUNvbG9yc1tpbmRleF07Ci0KLSAgICAvLyBQYXR0ZXJuOiBY
IG8gICBvIFggbyAgIG8gWAotICAgIC8vICAgICAgICAgICAgbyBYIG8gICBvIFggbwotICAgIHVp
bnQzMl90KiByb3cxID0gYml0bWFwLT5nZXRBZGRyMzIoMCwgMCk7Ci0gICAgdWludDMyX3QqIHJv
dzIgPSBiaXRtYXAtPmdldEFkZHIzMigwLCAxKTsKLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IGJp
dG1hcC0+d2lkdGgoKTsgeCsrKSB7Ci0gICAgICAgIHN3aXRjaCAoeCAlIDQpIHsKLSAgICAgICAg
Y2FzZSAwOgotICAgICAgICAgICAgcm93MVt4XSA9IGxpbmVDb2xvcjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICByb3cxW3hdID0gYW50aUNvbG9yOwot
ICAgICAgICAgICAgcm93Mlt4XSA9IGFudGlDb2xvcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIDI6Ci0gICAgICAgICAgICByb3cyW3hdID0gbGluZUNvbG9yOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHJvdzFbeF0gPSBhbnRpQ29s
b3I7Ci0gICAgICAgICAgICByb3cyW3hdID0gYW50aUNvbG9yOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkIHNldFJhZGlpKFNrVmVjdG9yKiBy
YWRpaSwgSW50U2l6ZSB0b3BMZWZ0LCBJbnRTaXplIHRvcFJpZ2h0LCBJbnRTaXplIGJvdHRvbVJp
Z2h0LCBJbnRTaXplIGJvdHRvbUxlZnQpCi17Ci0gICAgcmFkaWlbU2tSUmVjdDo6a1VwcGVyTGVm
dF9Db3JuZXJdLnNldChTa0ludFRvU2NhbGFyKHRvcExlZnQud2lkdGgoKSksCi0gICAgICAgIFNr
SW50VG9TY2FsYXIodG9wTGVmdC5oZWlnaHQoKSkpOwotICAgIHJhZGlpW1NrUlJlY3Q6OmtVcHBl
clJpZ2h0X0Nvcm5lcl0uc2V0KFNrSW50VG9TY2FsYXIodG9wUmlnaHQud2lkdGgoKSksCi0gICAg
ICAgIFNrSW50VG9TY2FsYXIodG9wUmlnaHQuaGVpZ2h0KCkpKTsKLSAgICByYWRpaVtTa1JSZWN0
OjprTG93ZXJSaWdodF9Db3JuZXJdLnNldChTa0ludFRvU2NhbGFyKGJvdHRvbVJpZ2h0LndpZHRo
KCkpLAotICAgICAgICBTa0ludFRvU2NhbGFyKGJvdHRvbVJpZ2h0LmhlaWdodCgpKSk7Ci0gICAg
cmFkaWlbU2tSUmVjdDo6a0xvd2VyTGVmdF9Db3JuZXJdLnNldChTa0ludFRvU2NhbGFyKGJvdHRv
bUxlZnQud2lkdGgoKSksCi0gICAgICAgIFNrSW50VG9TY2FsYXIoYm90dG9tTGVmdC5oZWlnaHQo
KSkpOwotfQotCi19IC8vIG5hbWVzcGFjZQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0v
LyBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgcG9pbnRlciB0byBjcmVhdGUgYSBncmFw
aGljcyBjb250ZXh0IHRoYXQgaGFzCi0vLyBubyBwYWludGluZy4KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGdjKQotewotICAgIGlm
IChnYykKLSAgICAgICAgZ2MtPnNldEdyYXBoaWNzQ29udGV4dCh0aGlzKTsKLQotICAgIC8vIHRo
ZSBjYWxsZXIgb3ducyB0aGUgZ2MKLSAgICBtX2RhdGEgPSBnYzsKLSAgICBzZXRQYWludGluZ0Rp
c2FibGVkKCFnYyB8fCAhZ2MtPmNhbnZhcygpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFwYWlu
dGluZ0Rpc2FibGVkKCkpOwotICAgIHJldHVybiBtX2RhdGE7Ci19Ci0KLS8vIFN0YXRlIHNhdmlu
ZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
U2F2ZSBvdXIgcHJpdmF0ZSBTdGF0ZS4KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2F2ZSgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJlc3Rv
cmUgb3VyIHByaXZhdGUgU3RhdGUuCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnJlc3RvcmUoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFdlIG5lZWQgdGhlICJhbHBoYSIgbGF5ZXIgZmxhZyBoZXJlIGJl
Y2F1c2UgdGhlIGJhc2UgbGF5ZXIgaXMgb3BhcXVlCi0gICAgLy8gKHRoZSBzdXJmYWNlIG9mIHRo
ZSBwYWdlKSBidXQgbGF5ZXJzIG9uIHRvcCBtYXkgaGF2ZSB0cmFuc3BhcmVudCBwYXJ0cy4KLSAg
ICAvLyBXaXRob3V0IGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgYWxwaGEgZmxhZywgdGhlIGxheWVy
IHdpbGwgaW5oZXJpdCB0aGUKLSAgICAvLyBvcGFxdWUgc2V0dGluZyBvZiB0aGUgYmFzZSBhbmQg
c29tZSB0aGluZ3Mgd29uJ3Qgd29yayBwcm9wZXJseS4KLSAgICBTa0NhbnZhczo6U2F2ZUZsYWdz
IHNhdmVGbGFncyA9IHN0YXRpY19jYXN0PFNrQ2FudmFzOjpTYXZlRmxhZ3M+KFNrQ2FudmFzOjpr
SGFzQWxwaGFMYXllcl9TYXZlRmxhZyB8IFNrQ2FudmFzOjprRnVsbENvbG9yTGF5ZXJfU2F2ZUZs
YWcpOwotCi0gICAgU2tQYWludCBsYXllclBhaW50OwotICAgIGxheWVyUGFpbnQuc2V0QWxwaGEo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4ob3BhY2l0eSAqIDI1NSkpOwotICAgIGxheWVyUGFp
bnQuc2V0WGZlcm1vZGVNb2RlKHBsYXRmb3JtQ29udGV4dCgpLT5nZXRYZmVybW9kZU1vZGUoKSk7
Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2F2ZUxheWVyKDAsICZsYXllclBhaW50LCBzYXZl
RmxhZ3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVu
Y3lMYXllcigpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5yZXN0b3JlTGF5ZXIoKTsKLX0KLQotYm9vbCBHcmFw
aGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gR3JhcGhpY3MgcHJpbWl0aXZlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RHJhd0xvb3Blcigw
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgU2tSZWN0IHIgPSByZWN0OwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgcGxhdGZvcm1D
b250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7Ci0gICAgcGFpbnQuc2V0WGZl
cm1vZGVNb2RlKFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+ZHJhd1JlY3QociwgcGFpbnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBSZWN0KHJlY3QpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSBjbGlwUnVsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgUm91bmRlZFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgU2tWZWN0b3IgcmFkaWlbNF07Ci0gICAgUm91bmRlZFJlY3Q6OlJhZGlpIHdrUmFk
aWkgPSByZWN0LnJhZGlpKCk7Ci0gICAgc2V0UmFkaWkocmFkaWksIHdrUmFkaWkudG9wTGVmdCgp
LCB3a1JhZGlpLnRvcFJpZ2h0KCksIHdrUmFkaWkuYm90dG9tUmlnaHQoKSwgd2tSYWRpaS5ib3R0
b21MZWZ0KCkpOwotCi0gICAgU2tSUmVjdCByOwotICAgIHIuc2V0UmVjdFJhZGlpKHJlY3QucmVj
dCgpLCByYWRpaSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFJSZWN0KHIsIFBsYXRm
b3JtQ29udGV4dFNraWE6OkFudGlBbGlhc2VkKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aFRvQ2xpcCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29u
c3QgU2tQYXRoKiBwYXRoID0gcGF0aFRvQ2xpcC5wbGF0Zm9ybVBhdGgoKTsKLSAgICBTa1BhdGg6
OkZpbGxUeXBlIGZ0eXBlID0gKGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCkgPyBTa1BhdGg6OmtF
dmVuT2RkX0ZpbGxUeXBlIDogU2tQYXRoOjprV2luZGluZ19GaWxsVHlwZTsKLSAgICBTa1BhdGgg
c3RvcmFnZTsKLQotICAgIGlmIChwYXRoICYmIChwYXRoLT5nZXRGaWxsVHlwZSgpICE9IGZ0eXBl
KSkgewotICAgICAgICBzdG9yYWdlID0gKnBhdGg7Ci0gICAgICAgIHN0b3JhZ2Uuc2V0RmlsbFR5
cGUoZnR5cGUpOwotICAgICAgICBwYXRoID0gJnN0b3JhZ2U7Ci0gICAgfQotCi0gICAgcGxhdGZv
cm1Db250ZXh0KCktPmNsaXBQYXRoKHBhdGggPyAqcGF0aCA6IFNrUGF0aCgpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+Y2xpcFJlY3QocmVjdCwgUGxhdGZvcm1Db250ZXh0U2tpYTo6Tm90QW50aUFsaWFz
ZWQsIFNrUmVnaW9uOjprRGlmZmVyZW5jZV9PcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHApCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgbXVzdCBtYWtlIGEgY29weSBvZiB0aGUgcGF0
aCwgdG8gbWFyayBpdCBhcyBpbnZlcnNlLWZpbGxlZC4KLSAgICBTa1BhdGggcGF0aChwLmlzTnVs
bCgpID8gU2tQYXRoKCkgOiAqcC5wbGF0Zm9ybVBhdGgoKSk7Ci0gICAgcGF0aC50b2dnbGVJbnZl
cnNlRmlsbFR5cGUoKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGgocGF0aCwgUGxh
dGZvcm1Db250ZXh0U2tpYTo6QW50aUFsaWFzZWQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aFRvQ2xpcCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29u
c3QgU2tQYXRoKiBwYXRoID0gcGF0aFRvQ2xpcC5wbGF0Zm9ybVBhdGgoKTsKLSAgICBTa1BhdGg6
OkZpbGxUeXBlIGZ0eXBlID0gKGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCkgPyBTa1BhdGg6OmtF
dmVuT2RkX0ZpbGxUeXBlIDogU2tQYXRoOjprV2luZGluZ19GaWxsVHlwZTsKLSAgICBTa1BhdGgg
c3RvcmFnZTsKLSAgICBpZiAoIXBhdGgpCi0gICAgICAgIHBhdGggPSAmc3RvcmFnZTsKLSAgICBl
bHNlIGlmIChwYXRoLT5nZXRGaWxsVHlwZSgpICE9IGZ0eXBlKSB7Ci0gICAgICAgIHN0b3JhZ2Ug
PSAqcGF0aDsKLSAgICAgICAgc3RvcmFnZS5zZXRGaWxsVHlwZShmdHlwZSk7Ci0gICAgICAgIHBh
dGggPSAmc3RvcmFnZTsKLSAgICB9Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBQYXRoKCpw
YXRoLCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpBbnRpQWxpYXNlZCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmUpCi17Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZv
cm1Db250ZXh0KCktPmNvbmNhdChhZmZpbmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5z
ZXRNYXRyaXgoYWZmaW5lKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0UGF0aEZyb21Db252ZXhQb2lu
dHMoU2tQYXRoKiBwYXRoLCBzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2lu
dHMpCi17Ci0gICAgcGF0aC0+aW5jUmVzZXJ2ZShudW1Qb2ludHMpOwotICAgIHBhdGgtPm1vdmVU
byhXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHBvaW50c1swXS54KCkpLAotICAgICAgICAgICAgICAg
ICBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHBvaW50c1swXS55KCkpKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMTsgaSA8IG51bVBvaW50czsgKytpKSB7Ci0gICAgICAgIHBhdGgtPmxpbmVUbyhXZWJD
b3JlRmxvYXRUb1NrU2NhbGFyKHBvaW50c1tpXS54KCkpLAotICAgICAgICAgICAgICAgICAgICAg
V2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihwb2ludHNbaV0ueSgpKSk7Ci0gICAgfQotCi0gICAgLyog
IFRoZSBjb2RlIHVzZWQgdG8ganVzdCBibGluZGx5IGNhbGwgdGhpcwotICAgICAgICAgICAgcGF0
aC0+c2V0SXNDb252ZXgodHJ1ZSk7Ci0gICAgICAgIEJ1dCB3ZWJraXQgY2FuIHNvbWV0aW1lcyBz
ZW5kIHVzIG5vbi1jb252ZXggNC1wb2ludCB2YWx1ZXMsIHNvIHdlIG1hcmsgdGhlIHBhdGgncwot
ICAgICAgICBjb252ZXhpdHkgYXMgdW5rbm93biwgc28gaXQgd2lsbCBnZXQgY29tcHV0ZWQgYnkg
c2tpYSBhdCBkcmF3IHRpbWUuCi0gICAgICAgIFNlZSBjcmJ1Zy5jb20gMTA4NjA1Ci0gICAgKi8K
LSAgICBTa1BhdGg6OkNvbnZleGl0eSBjb252ZXhpdHkgPSBTa1BhdGg6OmtDb252ZXhfQ29udmV4
aXR5OwotICAgIGlmIChudW1Qb2ludHMgPT0gNCkKLSAgICAgICAgY29udmV4aXR5ID0gU2tQYXRo
OjprVW5rbm93bl9Db252ZXhpdHk7Ci0gICAgcGF0aC0+c2V0Q29udmV4aXR5KGNvbnZleGl0eSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVt
UG9pbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQqIHBvaW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHNob3VsZEFudGlhbGlhcykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobnVtUG9pbnRzIDw9IDEpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFNrUGF0aCBwYXRoOwotICAgIHNldFBhdGhGcm9tQ29udmV4UG9pbnRzKCZwYXRo
LCBudW1Qb2ludHMsIHBvaW50cyk7Ci0KLSAgICBTa1BhaW50IHBhaW50OwotICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwotICAgIHBhaW50LnNldEFu
dGlBbGlhcyhzaG91bGRBbnRpYWxpYXMpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGF0
aChwYXRoLCBwYWludCk7Ci0KLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewot
ICAgICAgICBwYWludC5yZXNldCgpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQ
YWludEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5kcmF3UGF0aChwYXRoLCBwYWludCk7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCog
cG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChudW1Qb2ludHMgPD0gMSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgU2tQYXRoIHBhdGg7Ci0gICAgc2V0UGF0aEZyb21Db252ZXhQb2ludHMoJnBh
dGgsIG51bVBvaW50cywgcG9pbnRzKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGgo
cGF0aCwgYW50aWFsaWFzZWQKLSAgICAgICAgPyBQbGF0Zm9ybUNvbnRleHRTa2lhOjpBbnRpQWxp
YXNlZAotICAgICAgICA6IFBsYXRmb3JtQ29udGV4dFNraWE6Ok5vdEFudGlBbGlhc2VkKTsKLX0K
LQotLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVz
IHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3Qg
SW50UmVjdCYgZWxpcHNlUmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTa1JlY3QgcmVjdCA9IGVsaXBzZVJlY3Q7Ci0gICAgU2tQYWlu
dCBwYWludDsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBh
aW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd092YWwocmVjdCwgcGFpbnQpOwotCi0g
ICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpIHsKLSAgICAgICAgcGFpbnQucmVzZXQo
KTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFp
bnQsICZyZWN0LCAwKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdPdmFsKHJlY3Qs
IHBhaW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotc3RhdGljIGlubGluZSB2b2lk
IGRyYXdPdXRlclBhdGgoUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgU2tQYXRo
JiBwYXRoLCBTa1BhaW50JiBwYWludCwgaW50IHdpZHRoKQotewotI2lmIFBMQVRGT1JNKENIUk9N
SVVNKSAmJiBPUyhEQVJXSU4pCi0gICAgcGFpbnQuc2V0QWxwaGEoNjQpOwotICAgIHBhaW50LnNl
dFN0cm9rZVdpZHRoKHdpZHRoKTsKLSAgICBwYWludC5zZXRQYXRoRWZmZWN0KG5ldyBTa0Nvcm5l
clBhdGhFZmZlY3QoKHdpZHRoIC0gMSkgKiAwLjVmKSktPnVucmVmKCk7Ci0jZWxzZQotICAgIHBh
aW50LnNldFN0cm9rZVdpZHRoKDEpOwotICAgIHBhaW50LnNldFBhdGhFZmZlY3QobmV3IFNrQ29y
bmVyUGF0aEVmZmVjdCgxKSktPnVucmVmKCk7Ci0jZW5kaWYKLSAgICBjb250ZXh0LT5kcmF3UGF0
aChwYXRoLCBwYWludCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3SW5uZXJQYXRoKFBs
YXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUGF0aCYgcGF0aCwgU2tQYWludCYg
cGFpbnQsIGludCB3aWR0aCkKLXsKLSNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lO
KQotICAgIHBhaW50LnNldEFscGhhKDEyOCk7Ci0gICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgod2lk
dGggKiAwLjVmKTsKLSAgICBjb250ZXh0LT5kcmF3UGF0aChwYXRoLCBwYWludCk7Ci0jZW5kaWYK
LX0KLQotc3RhdGljIGlubGluZSBpbnQgZ2V0Rm9jdXNSaW5nT3V0c2V0KGludCBvZmZzZXQpCi17
Ci0jaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKLSAgICByZXR1cm4gb2Zmc2V0
ICsgMjsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdp
ZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgcmVjdENvdW50ID0g
cmVjdHMuc2l6ZSgpOwotICAgIGlmICghcmVjdENvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTa1JlZ2lvbiBmb2N1c1JpbmdSZWdpb247Ci0gICAgY29uc3QgaW50IGZvY3VzUmluZ091dHNl
dCA9IGdldEZvY3VzUmluZ091dHNldChvZmZzZXQpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWN0Q291bnQ7IGkrKykgewotICAgICAgICBTa0lSZWN0IHIgPSByZWN0c1tpXTsKLSAg
ICAgICAgci5pbnNldCgtZm9jdXNSaW5nT3V0c2V0LCAtZm9jdXNSaW5nT3V0c2V0KTsKLSAgICAg
ICAgZm9jdXNSaW5nUmVnaW9uLm9wKHIsIFNrUmVnaW9uOjprVW5pb25fT3ApOwotICAgIH0KLQot
ICAgIFNrUGF0aCBwYXRoOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgcGFpbnQuc2V0QW50aUFs
aWFzKHRydWUpOwotICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtTdHJva2VfU3R5bGUpOwot
Ci0gICAgcGFpbnQuc2V0Q29sb3IoY29sb3IucmdiKCkpOwotICAgIGZvY3VzUmluZ1JlZ2lvbi5n
ZXRCb3VuZGFyeVBhdGgoJnBhdGgpOwotICAgIGRyYXdPdXRlclBhdGgocGxhdGZvcm1Db250ZXh0
KCksIHBhdGgsIHBhaW50LCB3aWR0aCk7Ci0gICAgZHJhd0lubmVyUGF0aChwbGF0Zm9ybUNvbnRl
eHQoKSwgcGF0aCwgcGFpbnQsIHdpZHRoKTsKLX0KLQotLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8g
ZHJhdyBib3JkZXJzLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBv
aW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCi17Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3Ryb2tlU3R5bGUgcGVuU3R5bGUg
PSBzdHJva2VTdHlsZSgpOwotICAgIGlmIChwZW5TdHlsZSA9PSBOb1N0cm9rZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQx
OwotICAgIEZsb2F0UG9pbnQgcDIgPSBwb2ludDI7Ci0gICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9
IChwMS54KCkgPT0gcDIueCgpKTsKLSAgICBpbnQgd2lkdGggPSByb3VuZGYoc3Ryb2tlVGhpY2tu
ZXNzKCkpOwotCi0gICAgLy8gV2Uga25vdyB0aGVzZSBhcmUgdmVydGljYWwgb3IgaG9yaXpvbnRh
bCBsaW5lcywgc28gdGhlIGxlbmd0aCB3aWxsIGp1c3QKLSAgICAvLyBiZSB0aGUgc3VtIG9mIHRo
ZSBkaXNwbGFjZW1lbnQgY29tcG9uZW50IHZlY3RvcnMgZ2l2ZSBvciB0YWtlIDEgLQotICAgIC8v
IHByb2JhYmx5IHdvcnRoIHRoZSBzcGVlZCB1cCBvZiBubyBzcXVhcmUgcm9vdCwgd2hpY2ggYWxz
byB3b24ndCBiZSBleGFjdC4KLSAgICBGbG9hdFNpemUgZGlzcCA9IHAyIC0gcDE7Ci0gICAgaW50
IGxlbmd0aCA9IFNrU2NhbGFyUm91bmQoZGlzcC53aWR0aCgpICsgZGlzcC5oZWlnaHQoKSk7Ci0g
ICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIGxl
bmd0aCk7Ci0KLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBEb3R0ZWRTdHJva2UgfHwgc3Ryb2tl
U3R5bGUoKSA9PSBEYXNoZWRTdHJva2UpIHsKLSAgICAgICAgLy8gRG8gYSByZWN0IGZpbGwgb2Yg
b3VyIGVuZHBvaW50cy4gIFRoaXMgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSB0aGUKLSAgICAgICAg
Ly8gYXBwZWFyYW5jZSBvZiBiZWluZyBhIGJvcmRlci4gIFdlIHRoZW4gZHJhdyB0aGUgYWN0dWFs
IGRvdHRlZC9kYXNoZWQgbGluZS4KLQotICAgICAgICBTa1JlY3QgcjEsIHIyOwotICAgICAgICBy
MS5zZXQocDEueCgpLCBwMS55KCksIHAxLngoKSArIHdpZHRoLCBwMS55KCkgKyB3aWR0aCk7Ci0g
ICAgICAgIHIyLnNldChwMi54KCksIHAyLnkoKSwgcDIueCgpICsgd2lkdGgsIHAyLnkoKSArIHdp
ZHRoKTsKLQotICAgICAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAgICAgIHIxLm9m
ZnNldCgtd2lkdGggLyAyLCAwKTsKLSAgICAgICAgICAgIHIyLm9mZnNldCgtd2lkdGggLyAyLCAt
d2lkdGgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcjEub2Zmc2V0KDAsIC13aWR0
aCAvIDIpOwotICAgICAgICAgICAgcjIub2Zmc2V0KC13aWR0aCwgLXdpZHRoIC8gMik7Ci0gICAg
ICAgIH0KLSAgICAgICAgU2tQYWludCBmaWxsUGFpbnQ7Ci0gICAgICAgIGZpbGxQYWludC5zZXRD
b2xvcihwYWludC5nZXRDb2xvcigpKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdS
ZWN0KHIxLCBmaWxsUGFpbnQpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1JlY3Qo
cjIsIGZpbGxQYWludCk7Ci0gICAgfQotCi0gICAgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVz
KHAxLCBwMiwgd2lkdGgsIHBlblN0eWxlKTsKLSAgICBTa1BvaW50IHB0c1syXSA9IHsgKFNrUG9p
bnQpcDEsIChTa1BvaW50KXAyIH07Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BvaW50
cyhTa0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZSwgMiwgcHRzLCBwYWludCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9p
bnQmIHB0LCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi17Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGRl
dmljZVNjYWxlRmFjdG9yID0gU2tTY2FsYXJSb3VuZFRvSW50KFdlYkNvcmVGbG9hdFRvU2tTY2Fs
YXIocGxhdGZvcm1Db250ZXh0KCktPmRldmljZVNjYWxlRmFjdG9yKCkpKTsKLSAgICBBU1NFUlQo
ZGV2aWNlU2NhbGVGYWN0b3IgPT0gMSB8fCBkZXZpY2VTY2FsZUZhY3RvciA9PSAyKTsKLQotICAg
IC8vIENyZWF0ZSB0aGUgcGF0dGVybiB3ZSdsbCB1c2UgdG8gZHJhdyB0aGUgdW5kZXJsaW5lLgot
ICAgIGludCBpbmRleCA9IHN0eWxlID09IERvY3VtZW50TWFya2VyR3JhbW1hckxpbmVTdHlsZSA/
IDEgOiAwOwotICAgIHN0YXRpYyBTa0JpdG1hcCogbWlzc3BlbGxCaXRtYXAxeFsyXSA9IHsgMCwg
MCB9OwotICAgIHN0YXRpYyBTa0JpdG1hcCogbWlzc3BlbGxCaXRtYXAyeFsyXSA9IHsgMCwgMCB9
OwotICAgIFNrQml0bWFwKiogbWlzc3BlbGxCaXRtYXAgPSBkZXZpY2VTY2FsZUZhY3RvciA9PSAy
ID8gbWlzc3BlbGxCaXRtYXAyeCA6IG1pc3NwZWxsQml0bWFwMXg7Ci0gICAgaWYgKCFtaXNzcGVs
bEJpdG1hcFtpbmRleF0pIHsKLSNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQot
ICAgICAgICAvLyBNYXRjaCB0aGUgYXJ0d29yayB1c2VkIGJ5IHRoZSBNYWMuCi0gICAgICAgIGNv
bnN0IGludCByb3dQaXhlbHMgPSA0ICogZGV2aWNlU2NhbGVGYWN0b3I7Ci0gICAgICAgIGNvbnN0
IGludCBjb2xQaXhlbHMgPSAzICogZGV2aWNlU2NhbGVGYWN0b3I7Ci0gICAgICAgIG1pc3NwZWxs
Qml0bWFwW2luZGV4XSA9IG5ldyBTa0JpdG1hcDsKLSAgICAgICAgbWlzc3BlbGxCaXRtYXBbaW5k
ZXhdLT5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dQaXhlbHMsIGNvbFBpeGVscyk7Ci0gICAg
ICAgIG1pc3NwZWxsQml0bWFwW2luZGV4XS0+YWxsb2NQaXhlbHMoKTsKLQotICAgICAgICBtaXNz
cGVsbEJpdG1hcFtpbmRleF0tPmVyYXNlQVJHQigwLCAwLCAwLCAwKTsKLSAgICAgICAgY29uc3Qg
dWludDMyX3QgdHJhbnNwYXJlbnRDb2xvciA9IDB4MDAwMDAwMDA7Ci0KLSAgICAgICAgaWYgKGRl
dmljZVNjYWxlRmFjdG9yID09IDEpIHsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGNvbG9y
c1syXVs2XSA9IHsKLSAgICAgICAgICAgICAgICB7IDB4MkEyQTA2MDAsIDB4NTc1NzEwMDAsICAw
eEE4QTgxQjAwLCAweEJGQkYxRjAwLCAgMHg3MDcwMTIwMCwgMHhFMEUwMjQwMCB9LAotICAgICAg
ICAgICAgICAgIHsgMHgyQTAwMTUwMywgMHg1NzAwMkEwOCwgIDB4QTgwMDU0MEQsIDB4QkYwMDVG
MEYsICAweDcwMDAzODA5LCAweEUwMDA3MDEyIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgIC8vIFBhdHRlcm46IGEgYiBhICAgYSBiIGEKLSAgICAgICAgICAgIC8vICAgICAgICAgIGMg
ZCBjICAgYyBkIGMKLSAgICAgICAgICAgIC8vICAgICAgICAgIGUgZiBlICAgZSBmIGUKLSAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29sUGl4ZWxzOyArK3gpIHsKLSAgICAgICAgICAg
ICAgICB1aW50MzJfdCogcm93ID0gbWlzc3BlbGxCaXRtYXBbaW5kZXhdLT5nZXRBZGRyMzIoMCwg
eCk7Ci0gICAgICAgICAgICAgICAgcm93WzBdID0gY29sb3JzW2luZGV4XVt4ICogMl07Ci0gICAg
ICAgICAgICAgICAgcm93WzFdID0gY29sb3JzW2luZGV4XVt4ICogMiArIDFdOwotICAgICAgICAg
ICAgICAgIHJvd1syXSA9IGNvbG9yc1tpbmRleF1beCAqIDJdOwotICAgICAgICAgICAgICAgIHJv
d1szXSA9IHRyYW5zcGFyZW50Q29sb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAoZGV2aWNlU2NhbGVGYWN0b3IgPT0gMikgewotICAgICAgICAgICAgY29uc3QgdWludDMyX3Qg
Y29sb3JzWzJdWzE4XSA9IHsKLSAgICAgICAgICAgICAgICB7IDB4MGEwOTAxMDEsIDB4MzMzMjA4
MDYsIDB4NTU1NDBmMGEsICAweDM3MzYwOTA2LCAweDZlNmMxMjBjLCAweDZlNmMxMjBjLCAgMHg3
Njc0MTQwZCwgMHg4ZDhiMTgxMCwgMHg4ZDhiMTgxMCwKLSAgICAgICAgICAgICAgICAgIDB4OTY5
NDFhMTEsIDB4YjNiMDFmMTUsIDB4YjNiMDFmMTUsICAweDZkNmIxMzBjLCAweGQ5ZDYyNjE5LCAw
eGQ5ZDYyNjE5LCAgMHgxOTE4MDQwMiwgMHg3YzdhMTUwZSwgMHhjZWNiMjQxOCB9LAotICAgICAg
ICAgICAgICAgIHsgMHgwYTAwMDQwMCwgMHgzMzAzMWIwNiwgMHg1NTA2MmYwYiwgIDB4MzcwNDFl
MDYsIDB4NmUwODNkMGQsIDB4NmUwODNkMGQsICAweDc2MDg0MTBlLCAweDhkMDk0ZTExLCAweDhk
MDk0ZTExLAotICAgICAgICAgICAgICAgICAgMHg5NjBhNTMxMywgMHhiMzBkNjQxNywgMHhiMzBk
NjQxNywgIDB4NmQwNzNjMGQsIDB4ZDkwZjc4MWMsIDB4ZDkwZjc4MWMsICAweDE5MDEwZDAzLCAw
eDdjMDk0NTEwLCAweGNlMGY3MzFhIH0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIC8v
IFBhdHRlcm46IGEgYiBjIGMgYiBhCi0gICAgICAgICAgICAvLyAgICAgICAgICBkIGUgZiBmIGUg
ZAotICAgICAgICAgICAgLy8gICAgICAgICAgZyBoIGogaiBoIGcKLSAgICAgICAgICAgIC8vICAg
ICAgICAgIGsgbCBtIG0gbCBrCi0gICAgICAgICAgICAvLyAgICAgICAgICBuIG8gcCBwIG8gbgot
ICAgICAgICAgICAgLy8gICAgICAgICAgcSByIHMgcyByIHEKLSAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgY29sUGl4ZWxzOyArK3gpIHsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCog
cm93ID0gbWlzc3BlbGxCaXRtYXBbaW5kZXhdLT5nZXRBZGRyMzIoMCwgeCk7Ci0gICAgICAgICAg
ICAgICAgcm93WzBdID0gY29sb3JzW2luZGV4XVt4ICogM107Ci0gICAgICAgICAgICAgICAgcm93
WzFdID0gY29sb3JzW2luZGV4XVt4ICogMyArIDFdOwotICAgICAgICAgICAgICAgIHJvd1syXSA9
IGNvbG9yc1tpbmRleF1beCAqIDMgKyAyXTsKLSAgICAgICAgICAgICAgICByb3dbM10gPSBjb2xv
cnNbaW5kZXhdW3ggKiAzICsgMl07Ci0gICAgICAgICAgICAgICAgcm93WzRdID0gY29sb3JzW2lu
ZGV4XVt4ICogMyArIDFdOwotICAgICAgICAgICAgICAgIHJvd1s1XSA9IGNvbG9yc1tpbmRleF1b
eCAqIDNdOwotICAgICAgICAgICAgICAgIHJvd1s2XSA9IHRyYW5zcGFyZW50Q29sb3I7Ci0gICAg
ICAgICAgICAgICAgcm93WzddID0gdHJhbnNwYXJlbnRDb2xvcjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbHNlCi0g
ICAgICAgIC8vIFdlIHVzZSBhIDItcGl4ZWwtaGlnaCBtaXNzcGVsbGluZyBpbmRpY2F0b3IgYmVj
YXVzZSB0aGF0IHNlZW1zIHRvIGJlCi0gICAgICAgIC8vIHdoYXQgV2ViS2l0IGlzIGRlc2lnbmVk
IGZvciwgYW5kIGhvdyBtdWNoIHJvb20gdGhlcmUgaXMgaW4gYSB0eXBpY2FsCi0gICAgICAgIC8v
IHBhZ2UgZm9yIGl0LgotICAgICAgICBjb25zdCBpbnQgcm93UGl4ZWxzID0gMzIgKiBkZXZpY2VT
Y2FsZUZhY3RvcjsgLy8gTXVzdCBiZSBtdWx0aXBsZSBvZiA0IGZvciBwYXR0ZXJuIGJlbG93Lgot
ICAgICAgICBjb25zdCBpbnQgY29sUGl4ZWxzID0gMiAqIGRldmljZVNjYWxlRmFjdG9yOwotICAg
ICAgICBtaXNzcGVsbEJpdG1hcFtpbmRleF0gPSBuZXcgU2tCaXRtYXA7Ci0gICAgICAgIG1pc3Nw
ZWxsQml0bWFwW2luZGV4XS0+c2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywg
cm93UGl4ZWxzLCBjb2xQaXhlbHMpOwotICAgICAgICBtaXNzcGVsbEJpdG1hcFtpbmRleF0tPmFs
bG9jUGl4ZWxzKCk7Ci0KLSAgICAgICAgbWlzc3BlbGxCaXRtYXBbaW5kZXhdLT5lcmFzZUFSR0Io
MCwgMCwgMCwgMCk7Ci0gICAgICAgIGlmIChkZXZpY2VTY2FsZUZhY3RvciA9PSAxKQotICAgICAg
ICAgICAgZHJhdzF4TWFya2VyKG1pc3NwZWxsQml0bWFwW2luZGV4XSwgaW5kZXgpOwotICAgICAg
ICBlbHNlIGlmIChkZXZpY2VTY2FsZUZhY3RvciA9PSAyKQotICAgICAgICAgICAgZHJhdzJ4TWFy
a2VyKG1pc3NwZWxsQml0bWFwW2luZGV4XSwgaW5kZXgpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIH0KLQotI2lmIFBMQVRGT1JN
KENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCi0gICAgU2tTY2FsYXIgb3JpZ2luWCA9IFdlYkNvcmVG
bG9hdFRvU2tTY2FsYXIocHQueCgpKSAqIGRldmljZVNjYWxlRmFjdG9yOwotICAgIFNrU2NhbGFy
IG9yaWdpblkgPSBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHB0LnkoKSkgKiBkZXZpY2VTY2FsZUZh
Y3RvcjsKLQotICAgIC8vIE1ha2Ugc3VyZSB0byBkcmF3IG9ubHkgY29tcGxldGUgZG90cy4KLSAg
ICBpbnQgcm93UGl4ZWxzID0gbWlzc3BlbGxCaXRtYXBbaW5kZXhdLT53aWR0aCgpOwotICAgIGZs
b2F0IHdpZHRoTW9kID0gZm1vZGYod2lkdGggKiBkZXZpY2VTY2FsZUZhY3Rvciwgcm93UGl4ZWxz
KTsKLSAgICBpZiAocm93UGl4ZWxzIC0gd2lkdGhNb2QgPiBkZXZpY2VTY2FsZUZhY3RvcikKLSAg
ICAgICAgd2lkdGggLT0gd2lkdGhNb2QgLyBkZXZpY2VTY2FsZUZhY3RvcjsKLSNlbHNlCi0gICAg
U2tTY2FsYXIgb3JpZ2luWCA9IFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIocHQueCgpKTsKLQotICAg
IC8vIE9mZnNldCBpdCB2ZXJ0aWNhbGx5IGJ5IDEgc28gdGhhdCB0aGVyZSdzIHNvbWUgc3BhY2Ug
dW5kZXIgdGhlIHRleHQuCi0gICAgU2tTY2FsYXIgb3JpZ2luWSA9IFdlYkNvcmVGbG9hdFRvU2tT
Y2FsYXIocHQueSgpKSArIDE7Ci0gICAgb3JpZ2luWCAqPSBkZXZpY2VTY2FsZUZhY3RvcjsKLSAg
ICBvcmlnaW5ZICo9IGRldmljZVNjYWxlRmFjdG9yOwotI2VuZGlmCi0KLSAgICAvLyBNYWtlIGEg
c2hhZGVyIGZvciB0aGUgYml0bWFwIHdpdGggYW4gb3JpZ2luIG9mIHRoZSBib3ggd2UnbGwgZHJh
dy4gVGhpcwotICAgIC8vIHNoYWRlciBpcyByZWZjb3VudGVkIGFuZCB3aWxsIGhhdmUgYW4gaW5p
dGlhbCByZWZjb3VudCBvZiAxLgotICAgIFNrU2hhZGVyKiBzaGFkZXIgPSBTa1NoYWRlcjo6Q3Jl
YXRlQml0bWFwU2hhZGVyKAotICAgICAgICAqbWlzc3BlbGxCaXRtYXBbaW5kZXhdLCBTa1NoYWRl
cjo6a1JlcGVhdF9UaWxlTW9kZSwKLSAgICAgICAgU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUp
OwotICAgIFNrTWF0cml4IG1hdHJpeDsKLSAgICBtYXRyaXguc2V0VHJhbnNsYXRlKG9yaWdpblgs
IG9yaWdpblkpOwotICAgIHNoYWRlci0+c2V0TG9jYWxNYXRyaXgobWF0cml4KTsKLQotICAgIC8v
IEFzc2lnbiB0aGUgc2hhZGVyIHRvIHRoZSBwYWludCAmIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZS4g
VGhlIHBhaW50IHdpbGwKLSAgICAvLyBub3cgb3duIHRoZSBzaGFkZXIgYW5kIHRoZSBzaGFkZXIg
d2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB0aGUgcGFpbnQgZ29lcwotICAgIC8vIG91dCBvZiBzY29w
ZS4KLSAgICBTa1BhaW50IHBhaW50OwotICAgIHBhaW50LnNldFNoYWRlcihzaGFkZXIpLT51bnJl
ZigpOwotCi0gICAgU2tSZWN0IHJlY3Q7Ci0gICAgcmVjdC5zZXQob3JpZ2luWCwgb3JpZ2luWSwg
b3JpZ2luWCArIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIod2lkdGgpICogZGV2aWNlU2NhbGVGYWN0
b3IsIG9yaWdpblkgKyBTa0ludFRvU2NhbGFyKG1pc3NwZWxsQml0bWFwW2luZGV4XS0+aGVpZ2h0
KCkpKTsKLQotICAgIGlmIChkZXZpY2VTY2FsZUZhY3RvciA9PSAyKSB7Ci0gICAgICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5zYXZlKCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zY2FsZShT
S19TY2FsYXJIYWxmLCBTS19TY2FsYXJIYWxmKTsKLSAgICB9Ci0gICAgcGxhdGZvcm1Db250ZXh0
KCktPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsKLSAgICBpZiAoZGV2aWNlU2NhbGVGYWN0b3IgPT0g
MikKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlc3RvcmUoKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJpbnRpbmcpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHdpZHRoIDw9IDAp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGludCB0aGlja25lc3MgPSBTa01heDMyKHN0YXRpY19j
YXN0PGludD4oc3Ryb2tlVGhpY2tuZXNzKCkpLCAxKTsKLSAgICBTa1JlY3QgcjsKLSAgICByLmZM
ZWZ0ID0gV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihwdC54KCkpOwotICAgIC8vIEF2b2lkIGFudGkt
YWxpYXNpbmcgbGluZXMuIEN1cnJlbnRseSwgdGhlc2UgYXJlIGFsd2F5cyBob3Jpem9udGFsLgot
ICAgIC8vIFJvdW5kIHRvIG5lYXJlc3QgcGl4ZWwgdG8gbWF0Y2ggdGV4dCBhbmQgb3RoZXIgY29u
dGVudC4KLSAgICByLmZUb3AgPSBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKGZsb29yZihwdC55KCkg
KyAwLjVmKSk7Ci0gICAgci5mUmlnaHQgPSByLmZMZWZ0ICsgV2ViQ29yZUZsb2F0VG9Ta1NjYWxh
cih3aWR0aCk7Ci0gICAgci5mQm90dG9tID0gci5mVG9wICsgU2tJbnRUb1NjYWxhcih0aGlja25l
c3MpOwotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQ
YWludEZvckZpbGxpbmcoJnBhaW50KTsKLSAgICAvLyBUZXh0IGxpbmVzIGFyZSBkcmF3biB1c2lu
ZyB0aGUgc3Ryb2tlIGNvbG9yLgotICAgIHBhaW50LnNldENvbG9yKHBsYXRmb3JtQ29udGV4dCgp
LT5lZmZlY3RpdmVTdHJva2VDb2xvcigpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1Jl
Y3QociwgcGFpbnQpOwotfQotCi0vLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0
cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgaWYgKHJlY3QuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1JlY3QocmVj
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
VG9GaWxsKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aFRvRmlsbC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgU2tQYXRoOjpGaWxsVHlwZSBmdHlwZSA9IHN0YXRlLmZp
bGxSdWxlID09IFJVTEVfRVZFTk9ERCA/Ci0gICAgICAgIFNrUGF0aDo6a0V2ZW5PZGRfRmlsbFR5
cGUgOiBTa1BhdGg6OmtXaW5kaW5nX0ZpbGxUeXBlOwotCi0gICAgY29uc3QgU2tQYXRoKiBwYXRo
ID0gcGF0aFRvRmlsbC5wbGF0Zm9ybVBhdGgoKTsKLSAgICBTa1BhdGggc3RvcmFnZTsKLSAgICBp
ZiAocGF0aC0+Z2V0RmlsbFR5cGUoKSAhPSBmdHlwZSkgewotICAgICAgICBzdG9yYWdlID0gKnBh
dGg7Ci0gICAgICAgIHN0b3JhZ2Uuc2V0RmlsbFR5cGUoZnR5cGUpOwotICAgICAgICBwYXRoID0g
JnN0b3JhZ2U7Ci0gICAgfQotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKLQotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5kcmF3UGF0aCgqcGF0aCwgcGFpbnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNrUmVjdCByID0gcmVjdDsKLQotICAgIFNr
UGFpbnQgcGFpbnQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5n
KCZwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHIsIHBhaW50KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2tSZWN0IHIgPSByZWN0
OwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRD
b21tb24oJnBhaW50KTsKLSAgICBwYWludC5zZXRDb2xvcihjb2xvci5yZ2IoKSk7Ci0gICAgcGxh
dGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHIsIHBhaW50KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgYm90
dG9tTGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50
U2l6ZSYgYm90dG9tUmlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IENvbG9yJiBjb2xvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0b3BMZWZ0LndpZHRoKCkgKyB0b3BSaWdodC53
aWR0aCgpID4gcmVjdC53aWR0aCgpCi0gICAgICAgICAgICB8fCBib3R0b21MZWZ0LndpZHRoKCkg
KyBib3R0b21SaWdodC53aWR0aCgpID4gcmVjdC53aWR0aCgpCi0gICAgICAgICAgICB8fCB0b3BM
ZWZ0LmhlaWdodCgpICsgYm90dG9tTGVmdC5oZWlnaHQoKSA+IHJlY3QuaGVpZ2h0KCkKLSAgICAg
ICAgICAgIHx8IHRvcFJpZ2h0LmhlaWdodCgpICsgYm90dG9tUmlnaHQuaGVpZ2h0KCkgPiByZWN0
LmhlaWdodCgpKSB7Ci0gICAgICAgIC8vIE5vdCBhbGwgdGhlIHJhZGlpIGZpdCwgcmV0dXJuIGEg
cmVjdC4gVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZgotICAgICAgICAvLyBQYXRoOjpjcmVh
dGVSb3VuZGVkUmVjdGFuZ2xlLiBXaXRob3V0IHRoaXMgd2UgYXR0ZW1wdCB0byBkcmF3IGEgcm91
bmQKLSAgICAgICAgLy8gc2hhZG93IGZvciBhIHNxdWFyZSBib3guCi0gICAgICAgIGZpbGxSZWN0
KHJlY3QsIGNvbG9yLCBjb2xvclNwYWNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFNrVmVjdG9yIHJhZGlpWzRdOwotICAgIHNldFJhZGlpKHJhZGlpLCB0b3BMZWZ0LCB0b3BSaWdo
dCwgYm90dG9tUmlnaHQsIGJvdHRvbUxlZnQpOwotCi0gICAgU2tSUmVjdCBycjsKLSAgICByci5z
ZXRSZWN0UmFkaWkocmVjdCwgcmFkaWkpOwotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKLSAgICBwYWludC5z
ZXRDb2xvcihjb2xvci5yZ2IoKSk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1JSZWN0
KHJyLCBwYWludCk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENU
TShJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwotCi0gICAgY29uc3QgU2tNYXRy
aXgmIG0gPSBwbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VG90YWxNYXRyaXgoKTsKLSAgICByZXR1cm4g
QWZmaW5lVHJhbnNmb3JtKFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTY2FsZVgoKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91YmxlKG0uZ2V0U2tld1koKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91YmxlKG0uZ2V0U2tld1goKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91YmxlKG0uZ2V0U2NhbGVZKCkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0RvdWJsZShtLmdldFRyYW5z
bGF0ZVgoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRG91YmxlKG0u
Z2V0VHJhbnNsYXRlWSgpKSk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUpCi17Ci0g
ICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBG
bG9hdFNpemUmIHNpemUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNjYWxlKFdlYkNvcmVGbG9hdFRvU2tT
Y2FsYXIoc2l6ZS53aWR0aCgpKSwKLSAgICAgICAgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihzaXpl
LmhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShmbG9hdCBh
bHBoYSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0QWxwaGEoYWxwaGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIEJsZW5kTW9kZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0WGZlcm1vZGVNb2RlKFdlYkNv
cmVDb21wb3NpdGVUb1NraWFDb21wb3NpdGUob3ApKTsKLX0KLQotSW50ZXJwb2xhdGlvblF1YWxp
dHkgR3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPmludGVycG9sYXRpb25RdWFsaXR5KCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KElu
dGVycG9sYXRpb25RdWFsaXR5IHEpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEludGVy
cG9sYXRpb25RdWFsaXR5KHEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNh
cChMaW5lQ2FwIGNhcCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgc3dpdGNoIChjYXApIHsKLSAgICBjYXNlIEJ1dHRDYXA6Ci0gICAgICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5zZXRMaW5lQ2FwKFNrUGFpbnQ6OmtCdXR0X0NhcCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgUm91bmRDYXA6Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5z
ZXRMaW5lQ2FwKFNrUGFpbnQ6OmtSb3VuZF9DYXApOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNxdWFyZUNhcDoKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldExpbmVDYXAoU2tQYWlu
dDo6a1NxdWFyZV9DYXApOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlQoMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGxpZnRlZCBkaXJlY3RseSBvZmYgU2tpYVN1cHBvcnQsIGxpbmVz
IDQ5LTc0Ci0gICAgLy8gc28gaXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29yayBjb3JyZWN0bHku
Ci0gICAgc2l6ZV90IGRhc2hMZW5ndGggPSBkYXNoZXMuc2l6ZSgpOwotICAgIGlmICghZGFzaExl
bmd0aCkgewotICAgICAgICAvLyBJZiBubyBkYXNoIGlzIHNldCwgcmV2ZXJ0IHRvIHNvbGlkIHN0
cm9rZQotICAgICAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzZXQgTm9TdHJva2UgaW4gc29t
ZSBjYXNlcz8KLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFN0cm9rZVN0eWxlKFNvbGlk
U3Ryb2tlKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldERhc2hQYXRoRWZmZWN0KDAp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2l6ZV90IGNvdW50ID0gIShkYXNoTGVu
Z3RoICUgMikgPyBkYXNoTGVuZ3RoIDogZGFzaExlbmd0aCAqIDI7Ci0gICAgU2tTY2FsYXIqIGlu
dGVydmFscyA9IG5ldyBTa1NjYWxhcltjb3VudF07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIGludGVydmFsc1tpXSA9IGRhc2hlc1tpICUg
ZGFzaExlbmd0aF07Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RGFzaFBhdGhFZmZlY3Qo
bmV3IFNrRGFzaFBhdGhFZmZlY3QoaW50ZXJ2YWxzLCBjb3VudCwgZGFzaE9mZnNldCkpOwotCi0g
ICAgZGVsZXRlW10gaW50ZXJ2YWxzOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGlu
ZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChqb2luKSB7Ci0gICAgY2FzZSBNaXRlckpvaW46Ci0g
ICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRMaW5lSm9pbihTa1BhaW50OjprTWl0ZXJfSm9p
bik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUm91bmRKb2luOgotICAgICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0TGluZUpvaW4oU2tQYWludDo6a1JvdW5kX0pvaW4pOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEJldmVsSm9pbjoKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNl
dExpbmVKb2luKFNrUGFpbnQ6OmtCZXZlbF9Kb2luKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUKDApOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RmlsbENvbG9yKGNvbG9yLnJnYigpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBibHVy
RmxvYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29s
b3ImIGNvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBEZXRlY3Qgd2hlbiB0aGVyZSdzIG5vIGVmZmVjdGl2ZSBzaGFk
b3cgYW5kIGNsZWFyIHRoZSBsb29wZXIuCi0gICAgaWYgKCFzaXplLndpZHRoKCkgJiYgIXNpemUu
aGVpZ2h0KCkgJiYgIWJsdXJGbG9hdCkgewotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0
RHJhd0xvb3BlcigwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRvdWJsZSB3aWR0
aCA9IHNpemUud2lkdGgoKTsKLSAgICBkb3VibGUgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAg
ICBkb3VibGUgYmx1ciA9IGJsdXJGbG9hdDsKLQotICAgIHVpbnQzMl90IG1mRmxhZ3MgPSBTa0Js
dXJNYXNrRmlsdGVyOjprSGlnaFF1YWxpdHlfQmx1ckZsYWc7Ci0KLSAgICBpZiAobV9zdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcykgIHsKLSAgICAgICAgLy8gQ3VycmVudGx5IG9ubHkgdGhl
IEdyYXBoaWNzQ29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlCi0gICAgICAgIC8vIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQgZm9yIEhUTUxDYW52YXNFbGVtZW50IGhhdmUgc2hhZG93cyBpZ25vcmUK
LSAgICAgICAgLy8gVHJhbnNmb3Jtcy4gU28gd2l0aCB0aGlzIGZsYWcgc2V0LCB3ZSBrbm93IHRo
aXMgc3RhdGUgaXMgYXNzb2NpYXRlZAotICAgICAgICAvLyB3aXRoIGEgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC4KLSAgICAgICAgbWZGbGFncyB8PSBTa0JsdXJNYXNrRmlsdGVyOjprSWdub3JlVHJh
bnNmb3JtX0JsdXJGbGFnOwotCi0gICAgICAgIC8vIENHIHVzZXMgbmF0dXJhbCBvcmllbnRhdGlv
biBmb3IgWSBheGlzLCBidXQgdGhlIEhUTUw1IGNhbnZhcyBzcGVjCi0gICAgICAgIC8vIGRvZXMg
bm90LgotICAgICAgICAvLyBTbyB3ZSBub3cgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIGl0IHdhcyBm
bGlwcGVkIGluCi0gICAgICAgIC8vIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgaW4gb3JkZXIgdG8g
d29yayB3aXRoIENHLgotICAgICAgICBoZWlnaHQgPSAtaGVpZ2h0OwotICAgIH0KLQotICAgIFNr
Q29sb3IgYzsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKQotICAgICAgICBjID0gY29sb3Iucmdi
KCk7Ci0gICAgZWxzZQotICAgICAgICBjID0gU2tDb2xvclNldEFSR0IoMHhGRi8zLCAwLCAwLCAw
KTsgICAgLy8gInN0ZCIgYXBwbGUgc2hhZG93IGNvbG9yLgotCi0gICAgLy8gVE9ETyh0Yyk6IFNo
b3VsZCB3ZSBoYXZlIGEgbWF4IHZhbHVlIGZvciB0aGUgYmx1cj8gIENHIGNsYW1wcyBhdCAxMDAw
LjAKLSAgICAvLyBmb3IgcGVyZiByZWFzb25zLgotCi0gICAgU2tMYXllckRyYXdMb29wZXIqIGRs
ID0gbmV3IFNrTGF5ZXJEcmF3TG9vcGVyOwotICAgIFNrQXV0b1VucmVmIGF1cihkbCk7Ci0KLSAg
ICAvLyB0b3AgbGF5ZXIsIHdlIGp1c3QgZHJhdyB1bmNoYW5nZWQKLSAgICBkbC0+YWRkTGF5ZXIo
KTsKLQotICAgIC8vIGxvd2VyIGxheWVyIGNvbnRhaW5zIG91ciBvZmZzZXQsIGJsdXIsIGFuZCBj
b2xvcmZpbHRlcgotICAgIFNrTGF5ZXJEcmF3TG9vcGVyOjpMYXllckluZm8gaW5mbzsKLQotICAg
IC8vIFNpbmNlIENTUyBib3gtc2hhZG93IGlnbm9yZXMgdGhlIG9yaWdpbmFsIGFscGhhLCB3ZSB1
c2VkIHRvIGRlZmF1bHQgdG8ga1NyY19Nb2RlIGhlcmUgYW5kCi0gICAgLy8gb25seSBzd2l0Y2gg
dG8ga0RzdF9Nb2RlIGZvciBDYW52YXMuIEJ1dCB0aGF0IHByZWNhdXRpb24gaXMgbm90IHJlYWxs
eSBuZWNlc3NhcnkgYmVjYXVzZQotICAgIC8vIFJlbmRlckJveE1vZGVsT2JqZWN0IHBlcmZvcm1z
IGEgZGVkaWNhdGVkIHNoYWRvdyBmaWxsIHdpdGggb3BhcXVlIGJsYWNrIHRvIGVuc3VyZQotICAg
IC8vIGNyb3NzLXBsYXRmb3JtIGNvbnNpc3RlbnQgcmVzdWx0cy4KLSAgICBpbmZvLmZDb2xvck1v
ZGUgPSBTa1hmZXJtb2RlOjprRHN0X01vZGU7Ci0gICAgaW5mby5mUGFpbnRCaXRzIHw9IFNrTGF5
ZXJEcmF3TG9vcGVyOjprTWFza0ZpbHRlcl9CaXQ7IC8vIG91ciBibHVyCi0gICAgaW5mby5mUGFp
bnRCaXRzIHw9IFNrTGF5ZXJEcmF3TG9vcGVyOjprQ29sb3JGaWx0ZXJfQml0OwotICAgIGluZm8u
Zk9mZnNldC5zZXQod2lkdGgsIGhlaWdodCk7Ci0gICAgaW5mby5mUG9zdFRyYW5zbGF0ZSA9IG1f
c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0KLSAgICBTa01hc2tGaWx0ZXIqIG1mID0g
U2tCbHVyTWFza0ZpbHRlcjo6Q3JlYXRlKGJsdXIgLyAyLCBTa0JsdXJNYXNrRmlsdGVyOjprTm9y
bWFsX0JsdXJTdHlsZSwgbWZGbGFncyk7Ci0KLSAgICBTa0NvbG9yRmlsdGVyKiBjZiA9IFNrQ29s
b3JGaWx0ZXI6OkNyZWF0ZU1vZGVGaWx0ZXIoYywgU2tYZmVybW9kZTo6a1NyY0luX01vZGUpOwot
Ci0gICAgU2tQYWludCogcGFpbnQgPSBkbC0+YWRkTGF5ZXIoaW5mbyk7Ci0gICAgU2tTYWZlVW5y
ZWYocGFpbnQtPnNldE1hc2tGaWx0ZXIobWYpKTsKLSAgICBTa1NhZmVVbnJlZihwYWludC0+c2V0
Q29sb3JGaWx0ZXIoY2YpKTsKLQotICAgIC8vIGRsIGlzIG5vdyBidWlsdCwganVzdCBpbnN0YWxs
IGl0Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldERyYXdMb29wZXIoZGwpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgc3Ry
b2tlY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0U3Ry
b2tlQ29sb3Ioc3Ryb2tlY29sb3IucmdiKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHJva2UpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0
KCktPnNldFN0cm9rZVN0eWxlKHN0cm9rZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0
KCktPnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9k
ZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0VGV4dERyYXdpbmdNb2RlKG1vZGUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBLVVJMJiBsaW5rLCBjb25zdCBJ
bnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBTa0F1dG9EYXRhVW5yZWYgdXJsKFNrRGF0YTo6TmV3V2l0aENTdHJp
bmcobGluay5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgU2tBbm5vdGF0ZVJlY3RXaXRo
VVJMKHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgZGVzdFJlY3QsIHVybC5nZXQoKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29s
IGVuYWJsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0VXNlQW50aWFsaWFzaW5nKGVuYWJsZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgciwgaW50
IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBTa1JlY3Qgb3Zh
bCA9IHI7Ci0gICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpIHsKLSAgICAgICAgLy8g
U3Ryb2tlIHVzaW5nIHRoZSBmaWxsIGNvbG9yLgotICAgICAgICAvLyBUT0RPKGJyZXR0dykgaXMg
dGhpcyByZWFsbHkgY29ycmVjdD8gSXQgc2VlbXMgdW5yZWFzb25hYmxlLgotICAgICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKLSAgICAgICAgcGFp
bnQuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHlsZSk7Ci0gICAgICAgIHBhaW50LnNldFN0
cm9rZVdpZHRoKFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoc3Ryb2tlVGhpY2tuZXNzKCkpKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2lu
ZygmcGFpbnQsIDAsIDApOwotCi0gICAgLy8gV2UgZG8gdGhpcyBiZWZvcmUgY29udmVydGluZyB0
byBzY2FsYXIsIHNvIHdlIGRvbid0IG92ZXJmbG93IFNrRml4ZWQuCi0gICAgc3RhcnRBbmdsZSA9
IGZhc3RNb2Qoc3RhcnRBbmdsZSwgMzYwKTsKLSAgICBhbmdsZVNwYW4gPSBmYXN0TW9kKGFuZ2xl
U3BhbiwgMzYwKTsKLQotICAgIFNrUGF0aCBwYXRoOwotICAgIHBhdGguYWRkQXJjKG92YWwsIFNr
SW50VG9TY2FsYXIoLXN0YXJ0QW5nbGUpLCBTa0ludFRvU2NhbGFyKC1hbmdsZVNwYW4pKTsKLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoVG9TdHJva2UpCi17Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoVG9TdHJva2UuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBTa1BhdGgmIHBhdGggPSAqcGF0aFRvU3Ryb2tlLnBs
YXRmb3JtUGF0aCgpOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCkt
PnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNrUGFpbnQg
cGFpbnQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFp
bnQsIDAsIDApOwotICAgIHBhaW50LnNldFN0cm9rZVdpZHRoKFdlYkNvcmVGbG9hdFRvU2tTY2Fs
YXIobGluZVdpZHRoKSk7Ci0gICAgLy8gc3Ryb2tlcmVjdCBoYXMgc3BlY2lhbCBydWxlcyBmb3Ig
Q1NTIHdoZW4gdGhlIHJlY3QgaXMgZGVnZW5lcmF0ZToKLSAgICAvLyBpZiB3aWR0aD09MCAmJiBo
ZWlnaHQ9PTAsIGRvIG5vdGhpbmcKLSAgICAvLyBpZiB3aWR0aD09MCB8fCBoZWlnaHQ9PTAsIHRo
ZW4ganVzdCBkcmF3IGxpbmUgZm9yIHRoZSBvdGhlciBkaW1lbnNpb24KLSAgICBTa1JlY3Qgcihy
ZWN0KTsKLSAgICBib29sIHZhbGlkVyA9IHIud2lkdGgoKSA+IDA7Ci0gICAgYm9vbCB2YWxpZEgg
PSByLmhlaWdodCgpID4gMDsKLSAgICBpZiAodmFsaWRXICYmIHZhbGlkSCkgewotICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgIH0gZWxzZSBpZiAodmFs
aWRXIHx8IHZhbGlkSCkgewotICAgICAgICAvLyB3ZSBhcmUgZXhwZWN0ZWQgdG8gcmVzcGVjdCB0
aGUgbGluZUpvaW4sIHNvIHdlIGNhbid0IGp1c3QgY2FsbAotICAgICAgICAvLyBkcmF3TGluZSAt
LSB3ZSBoYXZlIHRvIGNyZWF0ZSBhIHBhdGggdGhhdCBkb3VibGVzIGJhY2sgb24gaXRzZWxmLgot
ICAgICAgICBTa1BhdGggcGF0aDsKLSAgICAgICAgcGF0aC5tb3ZlVG8oci5mTGVmdCwgci5mVG9w
KTsKLSAgICAgICAgcGF0aC5saW5lVG8oci5mUmlnaHQsIHIuZkJvdHRvbSk7Ci0gICAgICAgIHBh
dGguY2xvc2UoKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdQYXRoKHBhdGgsIHBh
aW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnJvdGF0ZShXZWJDb3JlRmxvYXRUb1NrU2Nh
bGFyKGFuZ2xlSW5SYWRpYW5zICogKDE4MC4wZiAvIDMuMTQxNTkyNjVmKSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHcsIGZsb2F0IGgpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1Db250
ZXh0KCktPnRyYW5zbGF0ZShXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHcpLCBXZWJDb3JlRmxvYXRU
b1NrU2NhbGFyKGgpKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPmlzQWNjZWxl
cmF0ZWQoKTsKLX0KLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pCi1DR0Nv
bG9yU3BhY2VSZWYgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpCi17Ci0gICAgc3RhdGljIENHQ29s
b3JTcGFjZVJlZiBkZXZpY2VTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwot
ICAgIHJldHVybiBkZXZpY2VTcGFjZTsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2tSZWN0IHJl
Y3QgPSBlbGxpcHNlOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCkt
PnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRy
YXdPdmFsKHJlY3QsIHBhaW50KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
U3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2tSZWN0IHJlY3QoZWxsaXBz
ZSk7Ci0gICAgU2tQYWludCBwYWludDsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWlu
dEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdP
dmFsKHJlY3QsIHBhaW50KTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY0ZDhkYjViZDg4NDE0NTU2
Nzk3NTU1MWVjN2NiZjYxZDhiYThjYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NjAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1
ZGUgIkdyQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAi
SlBFR0ltYWdlRW5jb2Rlci5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNs
dWRlICJNZW1vcnlJbnN0cnVtZW50YXRpb25Ta2lhLmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VT
a2lhLmgiCi0jaW5jbHVkZSAiUE5HSW1hZ2VFbmNvZGVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5j
bHVkZSAiU2tDb2xvclByaXYuaCIKLSNpbmNsdWRlICJTa0dwdURldmljZS5oIgotI2luY2x1ZGUg
IlNraWFVdGlscy5oIgotI2luY2x1ZGUgIldFQlBJbWFnZUVuY29kZXIuaCIKLSNpbmNsdWRlIDxw
dWJsaWMvUGxhdGZvcm0uaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNp
bmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdlLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHd0Zi90
ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi11c2luZyBu
YW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFdlIHBhc3MgYSB0ZWNo
bmljYWxseS11bmluaXRpYWxpemVkIGNhbnZhcyB0byB0aGUgcGxhdGZvcm0gY29udGV4dCBoZXJl
IHNpbmNlCi0vLyB0aGUgY2FudmFzIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlcyBpbiBJbWFnZUJ1
ZmZlcjo6SW1hZ2VCdWZmZXIuIEJ1dAotLy8gUGxhdGZvcm1Db250ZXh0IGRvZXNuJ3QgYWN0dWFs
bHkgbmVlZCB0byB1c2UgdGhlIG9iamVjdCwgYW5kIHRoaXMgbWFrZXMgYWxsCi0vLyB0aGUgb3du
ZXJzaGlwIGVhc2llciB0byBtYW5hZ2UuCi1JbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0
YShjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9wbGF0Zm9ybUNvbnRleHQoMCkgIC8vIENh
bnZhcyBpcyBzZXQgaW4gSW1hZ2VCdWZmZXIgY29uc3RydWN0b3IuCi17Ci19Ci0KLXN0YXRpYyBT
a0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1h
Z2VCdWZmZXJEYXRhKiBkYXRhKQotewotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dDNEID0gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpOwotICAgIGlmICghY29udGV4
dDNEKQotICAgICAgICByZXR1cm4gMDsKLSAgICBHckNvbnRleHQqIGdyID0gY29udGV4dDNELT5n
ckNvbnRleHQoKTsKLSAgICBpZiAoIWdyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBnci0+cmVz
ZXRDb250ZXh0KCk7Ci0gICAgR3JUZXh0dXJlRGVzYyBkZXNjOwotICAgIGRlc2MuZkZsYWdzID0g
a1JlbmRlclRhcmdldF9HclRleHR1cmVGbGFnQml0OwotICAgIGRlc2MuZlNhbXBsZUNudCA9IDA7
Ci0gICAgZGVzYy5mV2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgZGVzYy5mSGVpZ2h0ID0gc2l6
ZS5oZWlnaHQoKTsKLSAgICBkZXNjLmZDb25maWcgPSBrU2tpYTg4ODhfR3JQaXhlbENvbmZpZzsK
LSAgICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJlPiB0ZXh0dXJlKGdyLT5jcmVhdGVVbmNhY2hlZFRl
eHR1cmUoZGVzYywgMCwgMCkpOwotICAgIGlmICghdGV4dHVyZS5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgU2tDYW52YXMqIGNhbnZhczsKLSAgICBTa0F1dG9UVW5yZWY8U2tEZXZpY2U+
IGRldmljZShuZXcgU2tHcHVEZXZpY2UoZ3IsIHRleHR1cmUuZ2V0KCkpKTsKLSNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgQ2FudmFzMkRMYXllckJyaWRnZTo6VGhyZWFkTW9k
ZSB0aHJlYWRNb2RlID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5pc1RocmVhZGVkQ29t
cG9zaXRpbmdFbmFibGVkKCkgPyBDYW52YXMyRExheWVyQnJpZGdlOjpUaHJlYWRlZCA6IENhbnZh
czJETGF5ZXJCcmlkZ2U6OlNpbmdsZVRocmVhZDsKLSAgICBkYXRhLT5tX2xheWVyQnJpZGdlID0g
Q2FudmFzMkRMYXllckJyaWRnZTo6Y3JlYXRlKGNvbnRleHQzRC5yZWxlYXNlKCksIHNpemUsIHRo
cmVhZE1vZGUsIHRleHR1cmUuZ2V0KCktPmdldFRleHR1cmVIYW5kbGUoKSk7Ci0gICAgY2FudmFz
ID0gZGF0YS0+bV9sYXllckJyaWRnZS0+c2tDYW52YXMoZGV2aWNlLmdldCgpKTsKLSNlbHNlCi0g
ICAgY2FudmFzID0gbmV3IFNrQ2FudmFzKGRldmljZS5nZXQoKSk7Ci0jZW5kaWYKLSAgICBkYXRh
LT5tX3BsYXRmb3JtQ29udGV4dC5zZXRBY2NlbGVyYXRlZCh0cnVlKTsKLSAgICByZXR1cm4gY2Fu
dmFzOwotfQotCi1zdGF0aWMgU2tDYW52YXMqIGNyZWF0ZU5vblBsYXRmb3JtQ2FudmFzKGNvbnN0
IEludFNpemUmIHNpemUpCi17Ci0gICAgU2tBdXRvVFVucmVmPFNrRGV2aWNlPiBkZXZpY2UobmV3
IFNrRGV2aWNlKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKSk7Ci0gICAgU2tQaXhlbFJlZiogcGl4ZWxSZWYgPSBkZXZpY2UtPmFjY2Vzc0Jp
dG1hcChmYWxzZSkucGl4ZWxSZWYoKTsKLSAgICByZXR1cm4gcGl4ZWxSZWYgPyBuZXcgU2tDYW52
YXMoZGV2aWNlKSA6IDA7Ci19Ci0KLVBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0g
ICAgT3duUHRyPEltYWdlQnVmZmVyPiBidWYgPSBhZG9wdFB0cihuZXcgSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBjb250ZXh0LCBoYXNBbHBoYSwgc3VjY2Vz
cykpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIGJ1Zi5yZWxlYXNlKCk7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJ
bnRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogY29tcGF0aWJsZUNvbnRleHQsIGJvb2wgaGFzQWxwaGEsIGJvb2wmIHN1
Y2Nlc3MpCi0gICAgOiBtX2RhdGEoc2l6ZSkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9s
b2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxl
KQotewotICAgIGlmICghY29tcGF0aWJsZUNvbnRleHQpIHsKLSAgICAgICAgc3VjY2VzcyA9IGZh
bHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2tBdXRvVFVucmVmPFNrRGV2aWNl
PiBkZXZpY2UoY29tcGF0aWJsZUNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcmVhdGVDb21w
YXRpYmxlRGV2aWNlKHNpemUsIGhhc0FscGhhKSk7Ci0gICAgaWYgKCFkZXZpY2UuZ2V0KCkpIHsK
LSAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
U2tQaXhlbFJlZiogcGl4ZWxSZWYgPSBkZXZpY2UtPmFjY2Vzc0JpdG1hcChmYWxzZSkucGl4ZWxS
ZWYoKTsKLSAgICBpZiAoIXBpeGVsUmVmKSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZGF0YS5tX2NhbnZhcyA9IGFkb3B0UHRyKG5l
dyBTa0NhbnZhcyhkZXZpY2UpKTsKLSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q2Fu
dmFzKG1fZGF0YS5tX2NhbnZhcy5nZXQoKSk7Ci0gICAgbV9jb250ZXh0ID0gYWRvcHRQdHIobmV3
IEdyYXBoaWNzQ29udGV4dCgmbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0KSk7Ci0gICAgbV9jb250
ZXh0LT5zZXRTaG91bGRTbW9vdGhGb250cyhmYWxzZSk7Ci0gICAgbV9jb250ZXh0LT5zY2FsZShG
bG9hdFNpemUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKSk7Ci0KLSAgICBz
dWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKHNpemUpCi0gICAg
LCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1
dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBPd25QdHI8U2tDYW52YXM+IGNhbnZh
czsKLQotICAgIGlmIChyZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkKQotICAgICAgICBjYW52
YXMgPSBhZG9wdFB0cihjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyhzaXplLCAmbV9kYXRhKSk7Ci0g
ICAgZWxzZSBpZiAocmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkTm9uUGxhdGZvcm1CdWZm
ZXIpCi0gICAgICAgIGNhbnZhcyA9IGFkb3B0UHRyKGNyZWF0ZU5vblBsYXRmb3JtQ2FudmFzKHNp
emUpKTsKLQotICAgIGlmICghY2FudmFzKQotICAgICAgICBjYW52YXMgPSBhZG9wdFB0cihza2lh
OjpUcnlDcmVhdGVCaXRtYXBDYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxz
ZSkpOwotCi0gICAgaWYgKCFjYW52YXMpIHsKLSAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9kYXRhLm1fY2FudmFzID0gY2FudmFzLnJlbGVh
c2UoKTsKLSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q2FudmFzKG1fZGF0YS5tX2Nh
bnZhcy5nZXQoKSk7Ci0gICAgbV9jb250ZXh0ID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4
dCgmbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0KSk7Ci0gICAgbV9jb250ZXh0LT5zZXRTaG91bGRT
bW9vdGhGb250cyhmYWxzZSk7Ci0gICAgbV9jb250ZXh0LT5zY2FsZShGbG9hdFNpemUobV9yZXNv
bHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKSk7Ci0KLSAgICAvLyBNYWtlIHRoZSBiYWNr
Z3JvdW5kIHRyYW5zcGFyZW50LiBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoaXMgd2Fzbid0Ci0gICAg
Ly8gcmVxdWlyZWQsIGJ1dCB0aGUgY2FudmFzIGlzIGN1cnJlbnRseSBmaWxsZWQgd2l0aCB0aGUg
bWFnaWMgdHJhbnNwYXJlbmN5Ci0gICAgLy8gY29sb3IuIENhbiB3ZSBoYXZlIGFub3RoZXIgd2F5
IHRvIG1hbmFnZSB0aGlzPwotICAgIG1fZGF0YS5tX2NhbnZhcy0+ZHJhd0FSR0IoMCwgMCwgMCwg
MCwgU2tYZmVybW9kZTo6a0NsZWFyX01vZGUpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0K
LUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQotewotfQotCi1HcmFwaGljc0NvbnRleHQqIElt
YWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0gICAgaWYgKG1fZGF0YS5tX2xheWVyQnJpZGdlKSB7Ci0gICAgICAgIC8vIFdlJ3Jl
IHVzaW5nIGNvbnRleHQgYWNxdWlzaXRpb24gYXMgYSBzaWduYWwgdGhhdCBzb21lb25lIGlzIGFi
b3V0IHRvIHJlbmRlciBpbnRvIG91ciBidWZmZXIgYW5kIHdlIG5lZWQKLSAgICAgICAgLy8gdG8g
YmUgcmVhZHkuIFRoaXMgaXNuJ3QgbG9naWNhbGx5IGNvbnN0LWNvcnJlY3QsIGhlbmNlIHRoZSBj
YXN0LgotICAgICAgICBjb25zdF9jYXN0PENhbnZhczJETGF5ZXJCcmlkZ2UqPihtX2RhdGEubV9s
YXllckJyaWRnZS5nZXQoKSktPmNvbnRleHRBY3F1aXJlZCgpOwotICAgIH0KLSNlbmRpZgotICAg
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBTa0JpdG1hcCBkZWVwU2tCaXRt
YXBDb3B5KGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCi17Ci0gICAgU2tCaXRtYXAgdG1wOwotICAg
IGlmICghYml0bWFwLmRlZXBDb3B5VG8oJnRtcCwgYml0bWFwLmNvbmZpZygpKSkKLSAgICAgICAg
Yml0bWFwLmNvcHlUbygmdG1wLCBiaXRtYXAuY29uZmlnKCkpOwotCi0gICAgcmV0dXJuIHRtcDsK
LX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3Rv
cmVDb3B5IGNvcHlCZWhhdmlvciwgU2NhbGVCZWhhdmlvcikgY29uc3QKLXsKLSAgICBjb25zdCBT
a0JpdG1hcCYgYml0bWFwID0gKm1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRtYXAoKTsKLSAg
ICAvLyBGSVhNRTogU3RhcnQgaG9ub3JpbmcgU2NhbGVCZWhhdmlvciB0byBzY2FsZSAyeCBidWZm
ZXJzIGRvd24gdG8gMXguCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoTmF0aXZlSW1h
Z2VTa2lhOjpjcmVhdGUoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUgPyBkZWVwU2tC
aXRtYXBDb3B5KGJpdG1hcCkgOiBiaXRtYXAsIG1fcmVzb2x1dGlvblNjYWxlKSk7Ci19Ci0KLUJh
Y2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICBy
ZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVm
ZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fbGF5ZXJC
cmlkZ2UgPyBtX2RhdGEubV9sYXllckJyaWRnZS0+bGF5ZXIoKSA6IDA7Ci19Ci0KLWJvb2wgSW1h
Z2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCYgY29udGV4
dCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQotewotICAgIGlmICghbV9kYXRhLm1fbGF5
ZXJCcmlkZ2UgfHwgIXBsYXRmb3JtTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgUGxhdGZvcm0zRE9iamVjdCBzb3VyY2VUZXh0dXJlID0gbV9kYXRhLm1fbGF5ZXJCcmlkZ2Ut
PmJhY2tCdWZmZXJUZXh0dXJlKCk7Ci0KLSAgICBpZiAoIWNvbnRleHQubWFrZUNvbnRleHRDdXJy
ZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5z
aW9ucyA9IGNvbnRleHQuZ2V0RXh0ZW5zaW9ucygpOwotICAgIGlmICghZXh0ZW5zaW9ucy0+c3Vw
cG9ydHMoIkdMX0NIUk9NSVVNX2NvcHlfdGV4dHVyZSIpIHx8ICFleHRlbnNpb25zLT5zdXBwb3J0
cygiR0xfQ0hST01JVU1fZmxpcHkiKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
VGhlIGNhbnZhcyBpcyBzdG9yZWQgaW4gYSBwcmVtdWx0aXBsaWVkIGZvcm1hdCwgc28gdW5wcmVt
dWx0aXBseSBpZiBuZWNlc3NhcnkuCi0gICAgY29udGV4dC5waXhlbFN0b3JlaShFeHRlbnNpb25z
M0Q6OlVOUEFDS19VTlBSRU1VTFRJUExZX0FMUEhBX0NIUk9NSVVNLCAhcHJlbXVsdGlwbHlBbHBo
YSk7Ci0KLSAgICAvLyBUaGUgY2FudmFzIGlzIHN0b3JlZCBpbiBhbiBpbnZlcnRlZCBwb3NpdGlv
biwgc28gdGhlIGZsaXAgc2VtYW50aWNzIGFyZSByZXZlcnNlZC4KLSAgICBjb250ZXh0LnBpeGVs
U3RvcmVpKEV4dGVuc2lvbnMzRDo6VU5QQUNLX0ZMSVBfWV9DSFJPTUlVTSwgIWZsaXBZKTsKLQot
ICAgIGV4dGVuc2lvbnMtPmNvcHlUZXh0dXJlQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHNvdXJjZVRleHR1cmUsIHRleHR1cmUsIDAsIGludGVybmFsRm9ybWF0KTsKLQot
ICAgIGNvbnRleHQucGl4ZWxTdG9yZWkoRXh0ZW5zaW9uczNEOjpVTlBBQ0tfRkxJUF9ZX0NIUk9N
SVVNLCBmYWxzZSk7Ci0gICAgY29udGV4dC5waXhlbFN0b3JlaShFeHRlbnNpb25zM0Q6OlVOUEFD
S19VTlBSRU1VTFRJUExZX0FMUEhBX0NIUk9NSVVNLCBmYWxzZSk7Ci0gICAgY29udGV4dC5mbHVz
aCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAotewotICAg
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5iZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UocmVj
dCwgdGhpcyk7Ci19Ci0KLXN0YXRpYyBib29sIGRyYXdOZWVkc0NvcHkoR3JhcGhpY3NDb250ZXh0
KiBzcmMsIEdyYXBoaWNzQ29udGV4dCogZHN0KQotewotICAgIHJldHVybiAoZHN0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+aXNEZWZlcnJlZCgpIHx8IHNyYyA9PSBkc3QpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwKLSAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlLCBib29sIHVzZUxvd1F1
YWxpdHlTY2FsZSkKLXsKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gKm1fZGF0YS5tX3Bs
YXRmb3JtQ29udGV4dC5iaXRtYXAoKTsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFw
SW1hZ2U6OmNyZWF0ZShOYXRpdmVJbWFnZVNraWE6OmNyZWF0ZShkcmF3TmVlZHNDb3B5KG1fY29u
dGV4dC5nZXQoKSwgY29udGV4dCkgPyBkZWVwU2tCaXRtYXBDb3B5KGJpdG1hcCkgOiBiaXRtYXAp
KTsKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uLCB1c2VM
b3dRdWFsaXR5U2NhbGUpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAg
ICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gKm1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRt
YXAoKTsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShOYXRp
dmVJbWFnZVNraWE6OmNyZWF0ZShkcmF3TmVlZHNDb3B5KG1fY29udGV4dC5nZXQoKSwgY29udGV4
dCkgPyBkZWVwU2tCaXRtYXBDb3B5KGJpdG1hcCkgOiBiaXRtYXApKTsKLSAgICBpbWFnZS0+ZHJh
d1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxl
Q29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZv
cm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJsZSkKLXsK
LSAgICAvLyBGSVhNRTogRGlzYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBhY2NlbGVy
YXRlZCBjYW52YXNlcyAoZm9yIG5vdykuCi0gICAgaWYgKG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4
dC5pc0FjY2VsZXJhdGVkKCkpIAotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBTa0JpdG1h
cCYgYml0bWFwID0gKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpOwotICAg
IGlmIChiaXRtYXAuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChiaXRt
YXAuY29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKLSAgICBTa0F1dG9M
b2NrUGl4ZWxzIGJpdG1hcExvY2soYml0bWFwKTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1f
c2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIHVpbnQzMl90KiBzcmNSb3cgPSBiaXRtYXAu
Z2V0QWRkcjMyKDAsIHkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0
aCgpOyArK3gpIHsKLSAgICAgICAgICAgIFNrQ29sb3IgY29sb3IgPSBTa1BNQ29sb3JUb0NvbG9y
KHNyY1Jvd1t4XSk7Ci0gICAgICAgICAgICBzcmNSb3dbeF0gPSBTa1ByZU11bHRpcGx5QVJHQihT
a0NvbG9yR2V0QShjb2xvciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb29rVXBUYWJsZVtTa0NvbG9yR2V0Uihjb2xvcildLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbU2tDb2xvckdldEcoY29sb3IpXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW1Nr
Q29sb3JHZXRCKGNvbG9yKV0pOwotICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8TXVs
dGlwbHkgbXVsdGlwbGllZD4KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplKQot
ewotICAgIGZsb2F0IGFyZWEgPSA0LjBmICogcmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKTsK
LSAgICBpZiAoYXJlYSA+IHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHJl
Y3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRh
dGEgPSByZXN1bHQtPmRhdGEoKTsKLQotICAgIGlmIChyZWN0LngoKSA8IDAKLSAgICAgICAgfHwg
cmVjdC55KCkgPCAwCi0gICAgICAgIHx8IHJlY3QubWF4WCgpID4gc2l6ZS53aWR0aCgpCi0gICAg
ICAgIHx8IHJlY3QubWF4WSgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJv
RmlsbCgpOwotCi0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgo
KTsKLSAgICBTa0JpdG1hcCBkZXN0Qml0bWFwOwotICAgIGRlc3RCaXRtYXAuc2V0Q29uZmlnKFNr
Qml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBk
ZXN0Qnl0ZXNQZXJSb3cpOwotICAgIGRlc3RCaXRtYXAuc2V0UGl4ZWxzKGRhdGEpOwotCi0gICAg
U2tDYW52YXM6OkNvbmZpZzg4ODggY29uZmlnODg4ODsKLSAgICBpZiAobXVsdGlwbGllZCA9PSBQ
cmVtdWx0aXBsaWVkKQotICAgICAgICBjb25maWc4ODg4ID0gU2tDYW52YXM6OmtSR0JBX1ByZW11
bF9Db25maWc4ODg4OwotICAgIGVsc2UKLSAgICAgICAgY29uZmlnODg4OCA9IFNrQ2FudmFzOjpr
UkdCQV9VbnByZW11bF9Db25maWc4ODg4OwotCi0gICAgY29udGV4dC0+cmVhZFBpeGVscygmZGVz
dEJpdG1hcCwgcmVjdC54KCksIHJlY3QueSgpLCBjb25maWc4ODg4KTsKLSAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBDb29y
ZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIHJldHVybiBnZXRJbWFnZURhdGE8VW5tdWx0aXBs
aWVkPihyZWN0LCBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBtX3NpemUpOwotfQotCi1Q
YXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRlU3lzdGVtKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgY29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9zaXplKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBzb3VyY2Us
IGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgQVNTRVJU
KHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgp
ID4gMCk7Ci0KLSAgICBpbnQgb3JpZ2luWCA9IHNvdXJjZVJlY3QueCgpOwotICAgIGludCBkZXN0
WCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LngoKTsKLSAgICBBU1NFUlQoZGVzdFggPj0g
MCk7Ci0gICAgQVNTRVJUKGRlc3RYIDwgbV9zaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmln
aW5YID49IDApOwotICAgIEFTU0VSVChvcmlnaW5YIDwgc291cmNlUmVjdC5tYXhYKCkpOwotCi0g
ICAgaW50IGVuZFggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5tYXhYKCk7Ci0gICAgQVNT
RVJUKGVuZFggPD0gbV9zaXplLndpZHRoKCkpOwotCi0gICAgaW50IG51bUNvbHVtbnMgPSBlbmRY
IC0gZGVzdFg7Ci0KLSAgICBpbnQgb3JpZ2luWSA9IHNvdXJjZVJlY3QueSgpOwotICAgIGludCBk
ZXN0WSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LnkoKTsKLSAgICBBU1NFUlQoZGVzdFkg
Pj0gMCk7Ci0gICAgQVNTRVJUKGRlc3RZIDwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQo
b3JpZ2luWSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2luWSA8IHNvdXJjZVJlY3QubWF4WSgpKTsK
LQotICAgIGludCBlbmRZID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QubWF4WSgpOwotICAg
IEFTU0VSVChlbmRZIDw9IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgaW50IG51bVJvd3MgPSBlbmRZ
IC0gZGVzdFk7Ci0KLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXpl
LndpZHRoKCk7Ci0gICAgU2tCaXRtYXAgc3JjQml0bWFwOwotICAgIHNyY0JpdG1hcC5zZXRDb25m
aWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBudW1Db2x1bW5zLCBudW1Sb3dzLCBzcmNC
eXRlc1BlclJvdyk7Ci0gICAgc3JjQml0bWFwLnNldFBpeGVscyhzb3VyY2UtPmRhdGEoKSArIG9y
aWdpblkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpblggKiA0KTsKLQotICAgIFNrQ2FudmFzOjpD
b25maWc4ODg4IGNvbmZpZzg4ODg7Ci0gICAgaWYgKG11bHRpcGxpZWQgPT0gUHJlbXVsdGlwbGll
ZCkKLSAgICAgICAgY29uZmlnODg4OCA9IFNrQ2FudmFzOjprUkdCQV9QcmVtdWxfQ29uZmlnODg4
ODsKLSAgICBlbHNlCi0gICAgICAgIGNvbmZpZzg4ODggPSBTa0NhbnZhczo6a1JHQkFfVW5wcmVt
dWxfQ29uZmlnODg4ODsKLQotICAgIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPndyaXRl
UGl4ZWxzKHNyY0JpdG1hcCwgZGVzdFgsIGRlc3RZLCBjb25maWc4ODg4KTsKLX0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShUJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgVmVjdG9yPGNoYXI+KiBv
dXRwdXQpCi17Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBlbmNvZGVkSW1hZ2UgPSByZWlu
dGVycHJldF9jYXN0PFZlY3Rvcjx1bnNpZ25lZCBjaGFyPio+KG91dHB1dCk7Ci0KLSAgICBpZiAo
bWltZVR5cGUgPT0gImltYWdlL2pwZWciKSB7Ci0gICAgICAgIGludCBjb21wcmVzc2lvblF1YWxp
dHkgPSBKUEVHSW1hZ2VFbmNvZGVyOjpEZWZhdWx0Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAg
ICBpZiAocXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKQotICAg
ICAgICAgICAgY29tcHJlc3Npb25RdWFsaXR5ID0gc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAq
IDEwMCArIDAuNSk7Ci0gICAgICAgIGlmICghSlBFR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKHNvdXJj
ZSwgY29tcHJlc3Npb25RdWFsaXR5LCBlbmNvZGVkSW1hZ2UpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotI2lmIFVTRShXRUJQKQotICAgIH0gZWxzZSBpZiAobWltZVR5cGUgPT0gImltYWdl
L3dlYnAiKSB7Ci0gICAgICAgIGludCBjb21wcmVzc2lvblF1YWxpdHkgPSBXRUJQSW1hZ2VFbmNv
ZGVyOjpEZWZhdWx0Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBpZiAocXVhbGl0eSAmJiAq
cXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKQotICAgICAgICAgICAgY29tcHJlc3Np
b25RdWFsaXR5ID0gc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMCArIDAuNSk7Ci0gICAg
ICAgIGlmICghV0VCUEltYWdlRW5jb2Rlcjo6ZW5jb2RlKHNvdXJjZSwgY29tcHJlc3Npb25RdWFs
aXR5LCBlbmNvZGVkSW1hZ2UpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFQTkdJbWFnZUVuY29kZXI6OmVuY29kZShzb3VyY2Us
IGVuY29kZWRJbWFnZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEFTU0VS
VChtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBB
U1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rp
bmcobWltZVR5cGUpKTsKLQotICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkSW1hZ2U7Ci0gICAgaWYg
KCFlbmNvZGVJbWFnZSgqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1p
bWVUeXBlLCBxdWFsaXR5LCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwi
OwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVuY29k
ZWRJbWFnZSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsg
IjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpyZXBv
cnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAot
ewotICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMpOwotICAg
IGluZm8uYWRkTWVtYmVyKG1fY2FudmFzLCAiY2FudmFzIik7Ci0gICAgaW5mby5hZGRNZW1iZXIo
bV9wbGF0Zm9ybUNvbnRleHQsICJwbGF0Zm9ybUNvbnRleHQiKTsKLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0gICAgaW5mby5hZGRNZW1iZXIobV9sYXllckJyaWRnZSwgImxheWVy
QnJpZGdlIik7Ci0jZW5kaWYKLX0KLQotU3RyaW5nIEltYWdlRGF0YVRvRGF0YVVSTChjb25zdCBJ
bWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91Ymxl
KiBxdWFsaXR5KQotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgVmVjdG9yPGNoYXI+IGVu
Y29kZWRJbWFnZTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlRGF0YSwgbWltZVR5cGUsIHF1
YWxpdHksICZlbmNvZGVkSW1hZ2UpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBW
ZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLCBi
YXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwi
ICsgYmFzZTY0RGF0YTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2NjZjExZWY4YzE0M2UwMTQ4NWIwNjNlZTk3MzNjZmYy
ZjVlYTQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDY3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRTa2lhLmgiCi0jaW5jbHVkZSAiU2tCaXRtYXAuaCIKLSNpbmNsdWRlICJTa1Bp
eGVsUmVmLmgiCi0jaW5jbHVkZSAiU2tSZWN0LmgiCi0jaW5jbHVkZSAiU2tTaGFkZXIuaCIKLSNp
bmNsdWRlICJTa2lhVXRpbHMuaCIKLSNpbmNsdWRlICJUZXh0dXJlLmgiCi0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVyYXRpb25z
LmgiCi0jaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCi0KLSNpbmNsdWRlIDxs
aW1pdHM+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0jaW5j
bHVkZSAiVHJhY2VFdmVudC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8g
VXNlZCBieSBjb21wdXRlUmVzYW1wbGluZ01vZGUgdG8gdGVsbCBob3cgYml0bWFwcyBzaG91bGQg
YmUgcmVzYW1wbGVkLgotZW51bSBSZXNhbXBsaW5nTW9kZSB7Ci0gICAgLy8gTmVhcmVzdCBuZWln
aGJvciByZXNhbXBsaW5nLiBVc2VkIHdoZW4gd2UgZGV0ZWN0IHRoYXQgdGhlIHBhZ2UgaXMKLSAg
ICAvLyB0cnlpbmcgdG8gbWFrZSBhIHBhdHRlcm4gYnkgc3RyZXRjaGluZyBhIHNtYWxsIGJpdG1h
cCB2ZXJ5IGxhcmdlLgotICAgIFJFU0FNUExFX05PTkUsCi0KLSAgICAvLyBEZWZhdWx0IHNraWEg
cmVzYW1wbGluZy4gVXNlZCBmb3IgbGFyZ2UgZ3Jvd2luZyBvZiBpbWFnZXMgd2hlcmUgaGlnaAot
ICAgIC8vIHF1YWxpdHkgcmVzYW1wbGluZyBkb2Vzbid0IGdldCB1cyB2ZXJ5IG11Y2ggZXhjZXB0
IGEgc2xvd2Rvd24uCi0gICAgUkVTQU1QTEVfTElORUFSLAotCi0gICAgLy8gSGlnaCBxdWFsaXR5
IHJlc2FtcGxpbmcuCi0gICAgUkVTQU1QTEVfQVdFU09NRSwKLX07Ci0KLXN0YXRpYyBSZXNhbXBs
aW5nTW9kZSBjb21wdXRlUmVzYW1wbGluZ01vZGUoY29uc3QgU2tNYXRyaXgmIG1hdHJpeCwgY29u
c3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGZsb2F0IHNyY1dpZHRoLCBmbG9hdCBzcmNIZWln
aHQsIGZsb2F0IGRlc3RXaWR0aCwgZmxvYXQgZGVzdEhlaWdodCkKLXsKLSAgICAvLyBUaGUgcGVy
Y2VudCBjaGFuZ2UgYmVsb3cgd2hpY2ggd2Ugd2lsbCBub3QgcmVzYW1wbGUuIFRoaXMgdXN1YWxs
eSBtZWFucwotICAgIC8vIGFuIG9mZi1ieS1vbmUgZXJyb3Igb24gdGhlIHdlYiBwYWdlLCBhbmQg
anVzdCBkb2luZyBuZWFyZXN0IG5laWdoYm9yCi0gICAgLy8gc2FtcGxpbmcgaXMgdXN1YWxseSBn
b29kIGVub3VnaC4KLSAgICBjb25zdCBmbG9hdCBrRnJhY3Rpb25hbENoYW5nZVRocmVzaG9sZCA9
IDAuMDI1ZjsKLQotICAgIC8vIEltYWdlcyBzbWFsbGVyIHRoYW4gdGhpcyBpbiBlaXRoZXIgZGly
ZWN0aW9uIGFyZSBjb25zaWRlcmVkICJzbWFsbCIgYW5kCi0gICAgLy8gYXJlIG5vdCByZXNhbXBs
ZWQgZXZlciAoc2VlIGJlbG93KS4KLSAgICBjb25zdCBpbnQga1NtYWxsSW1hZ2VTaXplVGhyZXNo
b2xkID0gODsKLQotICAgIC8vIFRoZSBhbW91bnQgYW4gaW1hZ2UgY2FuIGJlIHN0cmV0Y2hlZCBp
biBhIHNpbmdsZSBkaXJlY3Rpb24gYmVmb3JlIHdlCi0gICAgLy8gc2F5IHRoYXQgaXQgaXMgYmVp
bmcgc3RyZXRjaGVkIHNvIG11Y2ggdGhhdCBpdCBtdXN0IGJlIGEgbGluZSBvcgotICAgIC8vIGJh
Y2tncm91bmQgdGhhdCBkb2Vzbid0IG5lZWQgcmVzYW1wbGluZy4KLSAgICBjb25zdCBmbG9hdCBr
TGFyZ2VTdHJldGNoID0gMy4wZjsKLQotICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIHJl
c2FtcGxlIHRoaXMgaW1hZ2UuIFdlIHRyeSB0byBwcnVuZSBvdXQgc29tZQotICAgIC8vIGNvbW1v
biBjYXNlcyB3aGVyZSByZXNhbXBsaW5nIHdvbid0IGdpdmUgdXMgYW55dGhpbmcsIHNpbmNlIGl0
IGlzIG11Y2gKLSAgICAvLyBzbG93ZXIgdGhhbiBkcmF3aW5nIHN0cmV0Y2hlZC4KLSAgICBmbG9h
dCBkaWZmV2lkdGggPSBmYWJzKGRlc3RXaWR0aCAtIHNyY1dpZHRoKTsKLSAgICBmbG9hdCBkaWZm
SGVpZ2h0ID0gZmFicyhkZXN0SGVpZ2h0IC0gc3JjSGVpZ2h0KTsKLSAgICBib29sIHdpZHRoTmVh
cmx5RXF1YWwgPSBkaWZmV2lkdGggPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxv
bigpOwotICAgIGJvb2wgaGVpZ2h0TmVhcmx5RXF1YWwgPSBkaWZmSGVpZ2h0IDwgc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmVwc2lsb24oKTsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJl
c2FtcGxlIGlmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZS4KLSAgICBp
ZiAod2lkdGhOZWFybHlFcXVhbCAmJiBoZWlnaHROZWFybHlFcXVhbCkKLSAgICAgICAgcmV0dXJu
IFJFU0FNUExFX05PTkU7Ci0KLSAgICBpZiAoc3JjV2lkdGggPD0ga1NtYWxsSW1hZ2VTaXplVGhy
ZXNob2xkCi0gICAgICAgIHx8IHNyY0hlaWdodCA8PSBrU21hbGxJbWFnZVNpemVUaHJlc2hvbGQK
LSAgICAgICAgfHwgZGVzdFdpZHRoIDw9IGtTbWFsbEltYWdlU2l6ZVRocmVzaG9sZAotICAgICAg
ICB8fCBkZXN0SGVpZ2h0IDw9IGtTbWFsbEltYWdlU2l6ZVRocmVzaG9sZCkgewotICAgICAgICAv
LyBOZXZlciByZXNhbXBsZSBzbWFsbCBpbWFnZXMuIFRoZXNlIGFyZSBvZnRlbiB1c2VkIGZvciBi
b3JkZXJzIGFuZAotICAgICAgICAvLyBydWxlcyAodGhpbmsgMXgxIGltYWdlcyB1c2VkIHRvIG1h
a2UgbGluZXMpLgotICAgICAgICByZXR1cm4gUkVTQU1QTEVfTk9ORTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3JjSGVpZ2h0ICoga0xhcmdlU3RyZXRjaCA8PSBkZXN0SGVpZ2h0IHx8IHNyY1dpZHRoICog
a0xhcmdlU3RyZXRjaCA8PSBkZXN0V2lkdGgpIHsKLSAgICAgICAgLy8gTGFyZ2UgaW1hZ2UgZGV0
ZWN0ZWQuCi0KLSAgICAgICAgLy8gRG9uJ3QgcmVzYW1wbGUgaWYgaXQgaXMgYmVpbmcgc3RyZXRj
aGVkIGEgbG90IGluIG9ubHkgb25lIGRpcmVjdGlvbi4KLSAgICAgICAgLy8gVGhpcyBpcyB0cnlp
bmcgdG8gY2F0Y2ggY2FzZXMgd2hlcmUgc29tZWJvZHkgaGFzIGNyZWF0ZWQgYSBib3JkZXIKLSAg
ICAgICAgLy8gKHdoaWNoIG1pZ2h0IGJlIGxhcmdlKSBhbmQgdGhlbiBpcyBzdHJldGNoaW5nIGl0
IHRvIGZpbGwgc29tZSBwYXJ0Ci0gICAgICAgIC8vIG9mIHRoZSBwYWdlLgotICAgICAgICBpZiAo
d2lkdGhOZWFybHlFcXVhbCB8fCBoZWlnaHROZWFybHlFcXVhbCkKLSAgICAgICAgICAgIHJldHVy
biBSRVNBTVBMRV9OT05FOwotCi0gICAgICAgIC8vIFRoZSBpbWFnZSBpcyBncm93aW5nIGEgbG90
IGFuZCBpbiBtb3JlIHRoYW4gb25lIGRpcmVjdGlvbi4gUmVzYW1wbGluZwotICAgICAgICAvLyBp
cyBzbG93IGFuZCBkb2Vzbid0IGdpdmUgdXMgdmVyeSBtdWNoIHdoZW4gZ3Jvd2luZyBhIGxvdC4K
LSAgICAgICAgcmV0dXJuIFJFU0FNUExFX0xJTkVBUjsKLSAgICB9Ci0KLSAgICBpZiAoKGRpZmZX
aWR0aCAvIHNyY1dpZHRoIDwga0ZyYWN0aW9uYWxDaGFuZ2VUaHJlc2hvbGQpCi0gICAgICAgICYm
IChkaWZmSGVpZ2h0IC8gc3JjSGVpZ2h0IDwga0ZyYWN0aW9uYWxDaGFuZ2VUaHJlc2hvbGQpKSB7
Ci0gICAgICAgIC8vIEl0IGlzIGRpc2FwcG9pbnRpbmdseSBjb21tb24gb24gdGhlIHdlYiBmb3Ig
aW1hZ2Ugc2l6ZXMgdG8gYmUgb2ZmIGJ5Ci0gICAgICAgIC8vIG9uZSBvciB0d28gcGl4ZWxzLiBX
ZSBkb24ndCBib3RoZXIgcmVzYW1wbGluZyBpZiB0aGUgc2l6ZSBkaWZmZXJlbmNlCi0gICAgICAg
IC8vIGlzIGEgc21hbGwgZnJhY3Rpb24gb2YgdGhlIG9yaWdpbmFsIHNpemUuCi0gICAgICAgIHJl
dHVybiBSRVNBTVBMRV9OT05FOwotICAgIH0KLQotICAgIC8vIFdoZW4gdGhlIGltYWdlIGlzIG5v
dCB5ZXQgZG9uZSBsb2FkaW5nLCB1c2UgbGluZWFyLiBXZSBkb24ndCBjYWNoZSB0aGUKLSAgICAv
LyBwYXJ0aWFsbHkgcmVzYW1wbGVkIGltYWdlcywgYW5kIGFzIHRoZXkgY29tZSBpbiBpbmNyZW1l
bnRhbGx5LCBpdCBjYXVzZXMKLSAgICAvLyB1cyB0byBoYXZlIHRvIHJlc2FtcGxlIHRoZSB3aG9s
ZSB0aGluZyBldmVyeSB0aW1lLgotICAgIGlmICghYml0bWFwLmlzRGF0YUNvbXBsZXRlKCkpCi0g
ICAgICAgIHJldHVybiBSRVNBTVBMRV9MSU5FQVI7Ci0KLSAgICAvLyBFdmVyeXRoaW5nIGVsc2Ug
Z2V0cyByZXNhbXBsZWQuCi0gICAgLy8gSGlnaCBxdWFsaXR5IGludGVycG9sYXRpb24gb25seSBl
bmFibGVkIGZvciBzY2FsaW5nIGFuZCB0cmFuc2xhdGlvbi4KLSAgICBpZiAoIShtYXRyaXguZ2V0
VHlwZSgpICYgKFNrTWF0cml4OjprQWZmaW5lX01hc2sgfCBTa01hdHJpeDo6a1BlcnNwZWN0aXZl
X01hc2spKSkKLSAgICAgICAgcmV0dXJuIFJFU0FNUExFX0FXRVNPTUU7Ci0gICAgCi0gICAgcmV0
dXJuIFJFU0FNUExFX0xJTkVBUjsKLX0KLQotc3RhdGljIFJlc2FtcGxpbmdNb2RlIGxpbWl0UmVz
YW1wbGluZ01vZGUoUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0LCBSZXNhbXBs
aW5nTW9kZSByZXNhbXBsaW5nKQotewotICAgIHN3aXRjaCAocGxhdGZvcm1Db250ZXh0LT5pbnRl
cnBvbGF0aW9uUXVhbGl0eSgpKSB7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uTm9uZToKLSAgICAg
ICAgcmV0dXJuIFJFU0FNUExFX05PTkU7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uTWVkaXVtOgot
ICAgICAgICAvLyBGb3Igbm93IHdlIHRyZWF0IEludGVycG9sYXRpb25NZWRpdW0gYW5kIEludGVy
cG9sYXRpb25Mb3cgdGhlIHNhbWUuCi0gICAgY2FzZSBJbnRlcnBvbGF0aW9uTG93OgotICAgICAg
ICBpZiAocmVzYW1wbGluZyA9PSBSRVNBTVBMRV9BV0VTT01FKQotICAgICAgICAgICAgcmV0dXJu
IFJFU0FNUExFX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9u
SGlnaDoKLSAgICBjYXNlIEludGVycG9sYXRpb25EZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmVzYW1wbGluZzsKLX0KLQotLy8gUmV0dXJuIHRydWUgaWYgdGhl
IHJlY3RhbmdsZSBpcyBhbGlnbmVkIHRvIGludGVnZXIgYm91bmRhcmllcy4KLS8vIFNlZSBjb21t
ZW50cyBmb3IgY29tcHV0ZUJpdG1hcERyYXdSZWN0cygpIGZvciBob3cgdGhpcyBpcyB1c2VkLgot
c3RhdGljIGJvb2wgYXJlQm91bmRhcmllc0ludGVnZXJBbGlnbmVkKGNvbnN0IFNrUmVjdCYgcmVj
dCkKLXsKLSAgICAvLyBWYWx1ZSBpcyAxLjE5MjA5ZS0wMDcuIFRoaXMgaXMgdGhlIHRvbGVyYW5j
ZSB0aHJlc2hvbGQuCi0gICAgY29uc3QgZmxvYXQgZXBzaWxvbiA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjplcHNpbG9uKCk7Ci0gICAgU2tJUmVjdCByb3VuZGVkUmVjdCA9IHJvdW5kZWRJ
bnRSZWN0KHJlY3QpOwotCi0gICAgcmV0dXJuIGZhYnMocmVjdC54KCkgLSByb3VuZGVkUmVjdC54
KCkpIDwgZXBzaWxvbgotICAgICAgICAmJiBmYWJzKHJlY3QueSgpIC0gcm91bmRlZFJlY3QueSgp
KSA8IGVwc2lsb24KLSAgICAgICAgJiYgZmFicyhyZWN0LnJpZ2h0KCkgLSByb3VuZGVkUmVjdC5y
aWdodCgpKSA8IGVwc2lsb24KLSAgICAgICAgJiYgZmFicyhyZWN0LmJvdHRvbSgpIC0gcm91bmRl
ZFJlY3QuYm90dG9tKCkpIDwgZXBzaWxvbjsKLX0KLQotLy8gRklYTUU6IFJlbW92ZSB0aGlzIGNv
ZGUgd2hlbiBTa0NhbnZhcyBhY2NlcHRzIFNrUmVjdCBhcyBzb3VyY2UgcmVjdGFuZ2xlLgotLy8g
U2VlIGNyYnVnLmNvbS8xMTc1OTcgZm9yIGJhY2tncm91bmQuCi0vLwotLy8gV2ViS2l0IHdhbnRz
IHRvIGRyYXcgYSBzdWItcmVjdGFuZ2xlIChGbG9hdFJlY3QpIGluIGEgYml0bWFwIGFuZCBzY2Fs
ZSBpdCB0bwotLy8gYW5vdGhlciBGbG9hdFJlY3QuIEhvd2V2ZXIgU2tpYSBvbmx5IGFsbG93cyBi
aXRtYXAgdG8gYmUgYWRkcmVzc2VkIGJ5IGEKLS8vIEludFJlY3QuIFRoaXMgZnVuY3Rpb24gY29t
cHV0ZXMgdGhlIGFwcHJvcHJpYXRlIEludFJlY3QgdGhhdCBlbmNsb3NlcyB0aGUKLS8vIHNvdXJj
ZSByZWN0YW5nbGUgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGVuY2xvc2luZyBkZXN0aW5hdGlvbiBy
ZWN0YW5nbGUsCi0vLyB3aGlsZSBtYWludGFpbmluZyB0aGUgc2NhbGUgZmFjdG9yLgotLy8KLS8v
IHxzcmNSZWN0fCBpcyB0aGUgc291cmNlIHJlY3RhbmdsZSBpbiB0aGUgYml0bWFwLiBSZXR1cm4g
dHJ1ZSBpZiBmYW5jeQotLy8gYWxpZ25tZW50IGlzIHJlcXVpcmVkLiBVc2VyIG9mIHRoaXMgZnVu
Y3Rpb24gbmVlZHMgdG8gY2xpcCB0byB8ZHN0UmVjdHwuCi0vLyBSZXR1cm4gZmFsc2UgaWYgY2xp
cHBpbmcgaXMgbm90IG5lZWRlZC4KLS8vCi0vLyB8ZHN0UmVjdHwgaXMgdGhlIGlucHV0IHJlY3Rh
bmdsZSB0aGF0IHxzcmNSZWN0fCBpcyBzY2FsZWQgdG8uCi0vLwotLy8gfG91dFNyY1JlY3R8IGFu
ZCB8b3V0RHN0UmVjdHwgYXJlIHRoZSBjb3JyZXNwb25kaW5nIG91dHB1dCByZWN0YW5nbGVzLgot
Ly8KLS8vIEFMR09SSVRITQotLy8KLS8vIFRoZSBvYmplY3RpdmUgaXMgdG8gKGEpIGZpbmQgYW4g
ZW5jbG9zaW5nIEludFJlY3QgZm9yIHRoZSBzb3VyY2UgcmVjdGFuZ2xlCi0vLyBhbmQgKGIpIHRo
ZSBjb3JyZXNwb25kaW5nIEZsb2F0UmVjdCBpbiBkZXN0aW5hdGlvbiBzcGFjZS4KLS8vCi0vLyBU
aGVzZSBhcmUgdGhlIHN0ZXBzIHBlcmZvcm1lZDoKLS8vCi0vLyAxLiBJbnRSZWN0IGVuY2xvc2lu
Z1NyY1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyY1JlY3QpCi0vLwotLy8gICAgQ29tcHV0ZSB0
aGUgZW5jbG9zaW5nIEludFJlY3QgZm9yIHxzcmNSZWN0fC4gVGhpcyBlbnN1cmVzIHRoZSBiaXRt
YXAKLS8vICAgIGltYWdlIGlzIGFkZHJlc3NlZCB3aXRoIGludGVnZXIgYm91bmRhcmllcy4KLS8v
Ci0vLyAyLiBGbG9hdFJlY3QgZW5jbG9zaW5nRGVzdFJlY3QgPSBtYXBTcmNUb0Rlc3QoZW5jbG9z
aW5nU3JjUmVjdCkKLS8vCi0vLyAgICBNYXAgdGhlIGVuY2xvc2luZyBzb3VyY2UgcmVjdGFuZ2xl
IHRvIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGUgc3BhY2UuCi0vLwotLy8gVGhlIG91dHB1dCB3aWxs
IGJlIGVuY2xvc2luZ1NyY1JlY3QgYW5kIGVuY2xvc2luZ0Rlc3RSZWN0IGZyb20gdGhlCi0vLyBh
bGdvcml0aG0gYWJvdmUuCi1zdGF0aWMgYm9vbCBjb21wdXRlQml0bWFwRHJhd1JlY3RzKGNvbnN0
IFNrSVNpemUmIGJpdG1hcFNpemUsIGNvbnN0IFNrUmVjdCYgc3JjUmVjdCwgY29uc3QgU2tSZWN0
JiBkc3RSZWN0LCBTa0lSZWN0KiBvdXRTcmNSZWN0LCBTa1JlY3QqIG91dERzdFJlY3QpCi17Ci0g
ICAgaWYgKGFyZUJvdW5kYXJpZXNJbnRlZ2VyQWxpZ25lZChzcmNSZWN0KSkgewotICAgICAgICAq
b3V0U3JjUmVjdCA9IHJvdW5kZWRJbnRSZWN0KHNyY1JlY3QpOwotICAgICAgICAqb3V0RHN0UmVj
dCA9IGRzdFJlY3Q7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBTa0lSZWN0
IGJpdG1hcFJlY3QgPSBTa0lSZWN0OjpNYWtlU2l6ZShiaXRtYXBTaXplKTsKLSAgICBTa0lSZWN0
IGVuY2xvc2luZ1NyY1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyY1JlY3QpOwotICAgIGVuY2xv
c2luZ1NyY1JlY3QuaW50ZXJzZWN0KGJpdG1hcFJlY3QpOyAvLyBDbGlwIHRvIGJpdG1hcCByZWN0
YW5nbGUuCi0gICAgU2tSZWN0IGVuY2xvc2luZ0RzdFJlY3Q7Ci0gICAgZW5jbG9zaW5nRHN0UmVj
dC5zZXQoZW5jbG9zaW5nU3JjUmVjdCk7Ci0gICAgU2tNYXRyaXggdHJhbnNmb3JtOwotICAgIHRy
YW5zZm9ybS5zZXRSZWN0VG9SZWN0KHNyY1JlY3QsIGRzdFJlY3QsIFNrTWF0cml4OjprRmlsbF9T
Y2FsZVRvRml0KTsKLSAgICB0cmFuc2Zvcm0ubWFwUmVjdCgmZW5jbG9zaW5nRHN0UmVjdCk7Ci0g
ICAgKm91dFNyY1JlY3QgPSBlbmNsb3NpbmdTcmNSZWN0OwotICAgICpvdXREc3RSZWN0ID0gZW5j
bG9zaW5nRHN0UmVjdDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBp
cyB1c2VkIHRvIHNjYWxlIGFuIGltYWdlIGFuZCBleHRyYWN0IGEgc2NhbGVkIGZyYWdtZW50Lgot
Ly8KLS8vIEFMR09SSVRITQotLy8KLS8vIEJlY2F1c2UgdGhlIHNjYWxlZCBpbWFnZSBzaXplIGhh
cyB0byBiZSBpbnRlZ2Vycywgd2UgYXBwcm94aW1hdGUgdGhlIHJlYWwKLS8vIHNjYWxlIHdpdGgg
dGhlIGZvbGxvd2luZyBmb3JtdWxhIChvbmx5IFggZGlyZWN0aW9uIGlzIHNob3duKToKLS8vCi0v
LyBzY2FsZWRJbWFnZVdpZHRoID0gcm91bmQoc2NhbGVYICogaW1hZ2VSZWN0LndpZHRoKCkpCi0v
LyBhcHByb3hpbWF0ZVNjYWxlWCA9IHNjYWxlZEltYWdlV2lkdGggLyBpbWFnZVJlY3Qud2lkdGgo
KQotLy8KLS8vIFdpdGggdGhpcyBtZXRob2Qgd2UgbWFpbnRhaW4gYSBjb25zdGFudCBzY2FsZSBm
YWN0b3IgYW1vbmcgZnJhZ21lbnRzIGluCi0vLyB0aGUgc2NhbGVkIGltYWdlLiBUaGlzIGFsbG93
cyBmcmFnbWVudHMgdG8gc3RpdGNoIHRvZ2V0aGVyIHRvIGZvcm0gdGhlCi0vLyBmdWxsIHNjYWxl
ZCBpbWFnZS4gVGhlIGRvd25zaWRlIGlzIHRoZXJlIHdpbGwgYmUgYSBzbWFsbCBkaWZmZXJlbmNl
Ci0vLyBiZXR3ZWVuIHxzY2FsZVh8IGFuZCB8YXBwcm94aW1hdGVTY2FsZVh8LgotLy8KLS8vIEEg
c2NhbGVkIGltYWdlIGZyYWdtZW50IGlzIGlkZW50aWZpZWQgYnk6Ci0vLwotLy8gLSBTY2FsZWQg
aW1hZ2Ugc2l6ZQotLy8gLSBTY2FsZWQgaW1hZ2UgZnJhZ21lbnQgcmVjdGFuZ2xlIChJbnRSZWN0
KQotLy8KLS8vIFNjYWxlZCBpbWFnZSBzaXplIGhhcyBiZWVuIGRldGVybWluZWQgYW5kIHRoZSBu
ZXh0IHN0ZXAgaXMgdG8gY29tcHV0ZSB0aGUKLS8vIHJlY3RhbmdsZSBmb3IgdGhlIHNjYWxlZCBp
bWFnZSBmcmFnbWVudCB3aGljaCBuZWVkcyB0byBiZSBhbiBJbnRSZWN0LgotLy8KLS8vIHNjYWxl
ZFNyY1JlY3QgPSBzcmNSZWN0ICogKGFwcHJveGltYXRlU2NhbGVYLCBhcHByb3hpbWF0ZVNjYWxl
WSkKLS8vIGVuY2xvc2luZ1NjYWxlZFNyY1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZFNy
Y1JlY3QpCi0vLwotLy8gRmluYWxseSB3ZSBleHRyYWN0IHRoZSBzY2FsZWQgaW1hZ2UgZnJhZ21l
bnQgdXNpbmcKLS8vIChzY2FsZWRJbWFnZVNpemUsIGVuY2xvc2luZ1NjYWxlZFNyY1JlY3QpLgot
Ly8KLXN0YXRpYyBTa0JpdG1hcCBleHRyYWN0U2NhbGVkSW1hZ2VGcmFnbWVudChjb25zdCBOYXRp
dmVJbWFnZVNraWEmIGJpdG1hcCwgY29uc3QgU2tSZWN0JiBzcmNSZWN0LCBmbG9hdCBzY2FsZVgs
IGZsb2F0IHNjYWxlWSwgU2tSZWN0KiBzY2FsZWRTcmNSZWN0LCBTa0lSZWN0KiBlbmNsb3NpbmdT
Y2FsZWRTcmNSZWN0KQotewotICAgIFNrSVNpemUgaW1hZ2VTaXplID0gU2tJU2l6ZTo6TWFrZShi
aXRtYXAuYml0bWFwKCkud2lkdGgoKSwgYml0bWFwLmJpdG1hcCgpLmhlaWdodCgpKTsKLSAgICBT
a0lTaXplIHNjYWxlZEltYWdlU2l6ZSA9IFNrSVNpemU6Ok1ha2UoY2xhbXBUb0ludGVnZXIocm91
bmRmKGltYWdlU2l6ZS53aWR0aCgpICogc2NhbGVYKSksCi0gICAgICAgIGNsYW1wVG9JbnRlZ2Vy
KHJvdW5kZihpbWFnZVNpemUuaGVpZ2h0KCkgKiBzY2FsZVkpKSk7Ci0KLSAgICBTa1JlY3QgaW1h
Z2VSZWN0ID0gU2tSZWN0OjpNYWtlV0goaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWln
aHQoKSk7Ci0gICAgU2tSZWN0IHNjYWxlZEltYWdlUmVjdCA9IFNrUmVjdDo6TWFrZVdIKHNjYWxl
ZEltYWdlU2l6ZS53aWR0aCgpLCBzY2FsZWRJbWFnZVNpemUuaGVpZ2h0KCkpOwotCi0gICAgU2tN
YXRyaXggc2NhbGVUcmFuc2Zvcm07Ci0gICAgc2NhbGVUcmFuc2Zvcm0uc2V0UmVjdFRvUmVjdChp
bWFnZVJlY3QsIHNjYWxlZEltYWdlUmVjdCwgU2tNYXRyaXg6OmtGaWxsX1NjYWxlVG9GaXQpOwot
ICAgIHNjYWxlVHJhbnNmb3JtLm1hcFJlY3Qoc2NhbGVkU3JjUmVjdCwgc3JjUmVjdCk7Ci0KLSAg
ICBzY2FsZWRTcmNSZWN0LT5pbnRlcnNlY3Qoc2NhbGVkSW1hZ2VSZWN0KTsKLSAgICAqZW5jbG9z
aW5nU2NhbGVkU3JjUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoKnNjYWxlZFNyY1JlY3QpOwotCi0g
ICAgLy8gfGVuY2xvc2luZ1NjYWxlZFNyY1JlY3R8IGNhbiBiZSBsYXJnZXIgdGhhbiB8c2NhbGVk
SW1hZ2VTaXplfCBiZWNhdXNlCi0gICAgLy8gb2YgZmxvYXQgaW5hY2N1cmFjeSBzbyBjbGlwIHRv
IGdldCBpbnNpZGUuCi0gICAgZW5jbG9zaW5nU2NhbGVkU3JjUmVjdC0+aW50ZXJzZWN0KFNrSVJl
Y3Q6Ok1ha2VTaXplKHNjYWxlZEltYWdlU2l6ZSkpOwotICAgIHJldHVybiBiaXRtYXAucmVzaXpl
ZEJpdG1hcChzY2FsZWRJbWFnZVNpemUsICplbmNsb3NpbmdTY2FsZWRTcmNSZWN0KTsKLX0KLQot
Ly8gVGhpcyBkb2VzIGEgbG90IG9mIGNvbXB1dGF0aW9uIHRvIHJlc2FtcGxlIG9ubHkgdGhlIHBv
cnRpb24gb2YgdGhlIGJpdG1hcAotLy8gdGhhdCB3aWxsIG9ubHkgYmUgZHJhd24uIFRoaXMgaXMg
Y3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlIHNpbmNlIHdoZW4gd2UgYXJlCi0vLyBzY3JvbGxpbmcs
IGZvciBleGFtcGxlLCB3ZSBhcmUgb25seSBkcmF3aW5nIGEgc21hbGwgc3RyaXAgb2YgdGhlIGlt
YWdlLgotLy8gUmVzYW1wbGluZyB0aGUgd2hvbGUgaW1hZ2UgZXZlcnkgdGltZSBpcyB2ZXJ5IHNs
b3csIHNvIHRoaXMgc3BlZWRzIHVwIHRoaW5ncwotLy8gZHJhbWF0aWNhbGx5LgotLy8KLS8vIE5v
dGU6IHRoaXMgY29kZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgY2FudmFzIHRyYW5zZm9ybWF0aW9u
IGlzIGxpbWl0ZWQgdG8KLS8vIHNjYWxpbmcgb3IgdHJhbnNsYXRpb24uCi1zdGF0aWMgdm9pZCBk
cmF3UmVzYW1wbGVkQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIFNrUGFpbnQm
IHBhaW50LCBjb25zdCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwgY29uc3QgU2tSZWN0JiBzcmNS
ZWN0LCBjb25zdCBTa1JlY3QmIGRlc3RSZWN0KQotewotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQot
ICAgIFRSQUNFX0VWRU5UMCgic2tpYSIsICJkcmF3UmVzYW1wbGVkQml0bWFwIik7Ci0jZW5kaWYK
LSAgICAvLyBXZSB3YW50IHRvIHNjYWxlIHxkZXN0UmVjdHwgd2l0aCB0cmFuc2Zvcm1hdGlvbiBp
biB0aGUgY2FudmFzIHRvIG9idGFpbgotICAgIC8vIHRoZSBmaW5hbCBzY2FsZS4gVGhlIGZpbmFs
IHNjYWxlIGlzIGEgY29tYmluYXRpb24gb2Ygc2NhbGUgdHJhbnNmb3JtCi0gICAgLy8gaW4gY2Fu
dmFzIGFuZCBleHBsaWNpdCBzY2FsaW5nIChzcmNSZWN0IGFuZCBkZXN0UmVjdCkuCi0gICAgU2tS
ZWN0IHNjcmVlblJlY3Q7Ci0gICAgY29udGV4dC0+Z2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZz
Y3JlZW5SZWN0LCBkZXN0UmVjdCk7Ci0gICAgZmxvYXQgcmVhbFNjYWxlWCA9IHNjcmVlblJlY3Qu
d2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsKLSAgICBmbG9hdCByZWFsU2NhbGVZID0gc2NyZWVu
UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7Ci0KLSAgICAvLyBUaGlzIHBhcnQgb2Yg
Y29kZSBsaW1pdHMgc2NhbGluZyBvbmx5IHRvIHZpc2libGUgcG9ydGlvbiBpbiB0aGUKLSAgICBT
a1JlY3QgZGVzdFJlY3RWaXNpYmxlU3Vic2V0OwotICAgIENsaXBSZWN0VG9DYW52YXMoY29udGV4
dCwgZGVzdFJlY3QsICZkZXN0UmVjdFZpc2libGVTdWJzZXQpOwotCi0gICAgLy8gQ2xpcFJlY3RU
b0NhbnZhcyBvZnRlbiBvdmVyc2hvb3RzLCByZXN1bHRpbmcgaW4gYSBsYXJnZXIgcmVnaW9uIHRo
YW4gb3VyCi0gICAgLy8gb3JpZ2luYWwgZGVzdFJlY3QuIEludGVyc2VjdGluZyBnZXRzIHVzIGJh
Y2sgaW5zaWRlLgotICAgIGlmICghZGVzdFJlY3RWaXNpYmxlU3Vic2V0LmludGVyc2VjdChkZXN0
UmVjdCkpCi0gICAgICAgIHJldHVybjsgLy8gTm90aGluZyB2aXNpYmxlIGluIGRlc3RSZWN0Lgot
Ci0gICAgLy8gRmluZCB0aGUgY29ycmVzcG9uZGluZyByZWN0IGluIHRoZSBzb3VyY2UgaW1hZ2Uu
Ci0gICAgU2tNYXRyaXggZGVzdFRvU3JjVHJhbnNmb3JtOwotICAgIFNrUmVjdCBzcmNSZWN0Vmlz
aWJsZVN1YnNldDsKLSAgICBkZXN0VG9TcmNUcmFuc2Zvcm0uc2V0UmVjdFRvUmVjdChkZXN0UmVj
dCwgc3JjUmVjdCwgU2tNYXRyaXg6OmtGaWxsX1NjYWxlVG9GaXQpOwotICAgIGRlc3RUb1NyY1Ry
YW5zZm9ybS5tYXBSZWN0KCZzcmNSZWN0VmlzaWJsZVN1YnNldCwgZGVzdFJlY3RWaXNpYmxlU3Vi
c2V0KTsKLQotICAgIFNrUmVjdCBzY2FsZWRTcmNSZWN0OwotICAgIFNrSVJlY3QgZW5jbG9zaW5n
U2NhbGVkU3JjUmVjdDsKLSAgICBTa0JpdG1hcCBzY2FsZWRJbWFnZUZyYWdtZW50ID0gZXh0cmFj
dFNjYWxlZEltYWdlRnJhZ21lbnQoYml0bWFwLCBzcmNSZWN0VmlzaWJsZVN1YnNldCwgcmVhbFNj
YWxlWCwgcmVhbFNjYWxlWSwgJnNjYWxlZFNyY1JlY3QsICZlbmNsb3NpbmdTY2FsZWRTcmNSZWN0
KTsKLQotICAgIC8vIEV4cGFuZCB0aGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGJlY2F1c2UgdGhl
IHNvdXJjZSByZWN0YW5nbGUgd2FzCi0gICAgLy8gZXhwYW5kZWQgdG8gZml0IHRvIGludGVnZXIg
Ym91bmRhcmllcy4KLSAgICBTa01hdHJpeCBzY2FsZWRTcmNUb0Rlc3RUcmFuc2Zvcm07Ci0gICAg
c2NhbGVkU3JjVG9EZXN0VHJhbnNmb3JtLnNldFJlY3RUb1JlY3Qoc2NhbGVkU3JjUmVjdCwgZGVz
dFJlY3RWaXNpYmxlU3Vic2V0LCBTa01hdHJpeDo6a0ZpbGxfU2NhbGVUb0ZpdCk7Ci0gICAgU2tS
ZWN0IGVuY2xvc2luZ0Rlc3RSZWN0OwotICAgIGVuY2xvc2luZ0Rlc3RSZWN0LnNldChlbmNsb3Np
bmdTY2FsZWRTcmNSZWN0KTsKLSAgICBzY2FsZWRTcmNUb0Rlc3RUcmFuc2Zvcm0ubWFwUmVjdCgm
ZW5jbG9zaW5nRGVzdFJlY3QpOwotCi0gICAgLy8gVGhlIHJlYXNvbiB3ZSBkbyBjbGlwcGluZyBp
cyBiZWNhdXNlIFNraWEgZG9lc24ndCBzdXBwb3J0IFNrUmVjdCBhcwotICAgIC8vIHNvdXJjZSBy
ZWN0LiBTZWUgaHR0cDovL2NyYnVnLmNvbS8xNDU1NDAuCi0gICAgLy8gV2hlbiBTa2lhIHN1cHBv
cnRzIHRoZW4gdXNlIHRoaXMgYXMgdGhlIHNvdXJjZSByZWN0IHRvIHJlcGxhY2UgMC4KLSAgICAv
LwotICAgIC8vIHNjYWxlZFNyY1JlY3Qub2Zmc2V0KC1lbmNsb3NpbmdTY2FsZWRTcmNSZWN0Lngo
KSwgLWVuY2xvc2luZ1NjYWxlZFNyY1JlY3QueSgpKTsKLSAgICBjb250ZXh0LT5zYXZlKCk7Ci0g
ICAgY29udGV4dC0+Y2xpcFJlY3QoZGVzdFJlY3RWaXNpYmxlU3Vic2V0KTsKLQotICAgIC8vIEJl
Y2F1c2UgdGhlIGltYWdlIGZyYWdtZW50IGlzIGdlbmVyYXRlZCB3aXRoIGFuIGFwcHJveG1pYXRl
ZCBzY2FsaW5nCi0gICAgLy8gZmFjdG9yLiBUaGlzIGRyYXcgd2lsbCBwZXJmb3JtIGEgY2xvc2Ug
dG8gMSBzY2FsaW5nLgotICAgIC8vCi0gICAgLy8gTk9URTogRm9yIGZ1dHVyZSBvcHRpbWl6YXRp
b24uIElmIHRoZSBkaWZmZXJlbmNlIGluIHNjYWxlIGlzIHNvIHNtYWxsCi0gICAgLy8gdGhhdCBT
a2lhIGRvZXNuJ3QgcHJvZHVjZSBhIGRpZmZlcmVuY2UgdGhlbiB3ZSBjYW4ganVzdCBibGl0IGl0
IGRpcmVjdGx5Ci0gICAgLy8gdG8gZW5oYW5jZSBwZXJmb3JtYW5jZS4KLSAgICBjb250ZXh0LT5k
cmF3Qml0bWFwUmVjdChzY2FsZWRJbWFnZUZyYWdtZW50LCAwLCBlbmNsb3NpbmdEZXN0UmVjdCwg
JnBhaW50KTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0KLXN0YXRpYyBib29sIGhhc05v
bjkwcm90YXRpb24oUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCkKLXsKLSAgICByZXR1cm4g
IWNvbnRleHQtPmdldFRvdGFsTWF0cml4KCkucmVjdFN0YXlzUmVjdCgpOwotfQotCi1zdGF0aWMg
dm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwg
Y29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0IFNrUmVjdCYgc3JjUmVjdCwgY29u
c3QgU2tSZWN0JiBkZXN0UmVjdCwgY29uc3QgU2tYZmVybW9kZTo6TW9kZSYgY29tcE9wKQotewot
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQotICAgIFRSQUNFX0VWRU5UMCgic2tpYSIsICJwYWludFNr
Qml0bWFwIik7Ci0jZW5kaWYKLSAgICBTa1BhaW50IHBhaW50OwotICAgIHBhaW50LnNldFhmZXJt
b2RlTW9kZShjb21wT3ApOwotICAgIHBhaW50LnNldEFscGhhKHBsYXRmb3JtQ29udGV4dC0+Z2V0
Tm9ybWFsaXplZEFscGhhKCkpOwotICAgIHBhaW50LnNldExvb3BlcihwbGF0Zm9ybUNvbnRleHQt
PmdldERyYXdMb29wZXIoKSk7Ci0gICAgLy8gb25seSBhbnRpYWxpYXMgaWYgd2UncmUgcm90YXRl
ZCBvciBza2V3ZWQKLSAgICBwYWludC5zZXRBbnRpQWxpYXMoaGFzTm9uOTByb3RhdGlvbihwbGF0
Zm9ybUNvbnRleHQpKTsKLQotICAgIFJlc2FtcGxpbmdNb2RlIHJlc2FtcGxpbmc7Ci0gICAgaWYg
KHBsYXRmb3JtQ29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKQotICAgICAgICByZXNhbXBsaW5nID0g
UkVTQU1QTEVfTElORUFSOwotICAgIGVsc2UgaWYgKHBsYXRmb3JtQ29udGV4dC0+cHJpbnRpbmco
KSkKLSAgICAgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX05PTkU7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIC8vIFRha2UgaW50byBhY2NvdW50IHNjYWxlIGFwcGxpZWQgdG8gdGhlIGNhbnZhcyB3aGVu
IGNvbXB1dGluZyBzYW1wbGluZyBtb2RlIChlLmcuIENTUyBzY2FsZSBvciBwYWdlIHNjYWxlKS4K
LSAgICAgICAgU2tSZWN0IGRlc3RSZWN0VGFyZ2V0ID0gZGVzdFJlY3Q7Ci0gICAgICAgIGlmICgh
KHBsYXRmb3JtQ29udGV4dC0+Z2V0VG90YWxNYXRyaXgoKS5nZXRUeXBlKCkgJiAoU2tNYXRyaXg6
OmtBZmZpbmVfTWFzayB8IFNrTWF0cml4OjprUGVyc3BlY3RpdmVfTWFzaykpKQotICAgICAgICAg
ICAgcGxhdGZvcm1Db250ZXh0LT5nZXRUb3RhbE1hdHJpeCgpLm1hcFJlY3QoJmRlc3RSZWN0VGFy
Z2V0LCBkZXN0UmVjdCk7Ci0KLSAgICAgICAgcmVzYW1wbGluZyA9IGNvbXB1dGVSZXNhbXBsaW5n
TW9kZShwbGF0Zm9ybUNvbnRleHQtPmdldFRvdGFsTWF0cml4KCksIGJpdG1hcCwKLSAgICAgICAg
ICAgIFNrU2NhbGFyVG9GbG9hdChzcmNSZWN0LndpZHRoKCkpLCBTa1NjYWxhclRvRmxvYXQoc3Jj
UmVjdC5oZWlnaHQoKSksCi0gICAgICAgICAgICBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3RUYXJn
ZXQud2lkdGgoKSksIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdFRhcmdldC5oZWlnaHQoKSkpOwot
ICAgIH0KLQotICAgIGlmIChyZXNhbXBsaW5nID09IFJFU0FNUExFX05PTkUpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgdG8gbm90IGJyZWFrIHRlc3RzIChpdCByZXN1bHRzIGluIHRoZSBm
aWx0ZXIgYml0bWFwIGZsYWcKLSAgICAgICAgLy8gYmVpbmcgc2V0IHRvIHRydWUpLiBXZSBuZWVk
IHRvIGRlY2lkZSBpZiB3ZSByZXNwZWN0IFJFU0FNUExFX05PTkUKLSAgICAgICAgLy8gYmVpbmcg
cmV0dXJuZWQgZnJvbSBjb21wdXRlUmVzYW1wbGluZ01vZGUuCi0gICAgICAgIHJlc2FtcGxpbmcg
PSBSRVNBTVBMRV9MSU5FQVI7Ci0gICAgfQotICAgIHJlc2FtcGxpbmcgPSBsaW1pdFJlc2FtcGxp
bmdNb2RlKHBsYXRmb3JtQ29udGV4dCwgcmVzYW1wbGluZyk7Ci0gICAgcGFpbnQuc2V0RmlsdGVy
Qml0bWFwKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfTElORUFSKTsKLSAgICBpZiAocmVzYW1wbGlu
ZyA9PSBSRVNBTVBMRV9BV0VTT01FKQotICAgICAgICBkcmF3UmVzYW1wbGVkQml0bWFwKHBsYXRm
b3JtQ29udGV4dCwgcGFpbnQsIGJpdG1hcCwgc3JjUmVjdCwgZGVzdFJlY3QpOwotICAgIGVsc2Ug
ewotICAgICAgICAvLyBObyByZXNhbXBsaW5nIG5lY2Vzc2FyeSwgd2UgY2FuIGp1c3QgZHJhdyB0
aGUgYml0bWFwLiBXZSB3YW50IHRvCi0gICAgICAgIC8vIGZpbHRlciBpdCBpZiB3ZSBkZWNpZGVk
IHRvIGRvIGxpbmVhciBpbnRlcnBvbGF0aW9uIGFib3ZlLCBvciBpZiB0aGVyZQotICAgICAgICAv
LyBpcyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgZ29pbmcgb24gd2l0aCB0aGUgbWF0cml4IChsaWtl
IGEgcm90YXRpb24pLgotICAgICAgICAvLyBOb3RlOiBmb3Igc2VyaWFsaXphdGlvbiwgd2Ugd2ls
bCB3YW50IHRvIHN1YnNldCB0aGUgYml0bWFwIGZpcnN0IHNvCi0gICAgICAgIC8vIHdlIGRvbid0
IHNlbmQgZXh0cmEgcGl4ZWxzLgotICAgICAgICBTa0lSZWN0IGVuY2xvc2luZ1NyY1JlY3Q7Ci0g
ICAgICAgIFNrUmVjdCBlbmNsb3NpbmdEZXN0UmVjdDsKLSAgICAgICAgU2tJU2l6ZSBiaXRtYXBT
aXplID0gU2tJU2l6ZTo6TWFrZShiaXRtYXAuYml0bWFwKCkud2lkdGgoKSwgYml0bWFwLmJpdG1h
cCgpLmhlaWdodCgpKTsKLSAgICAgICAgYm9vbCBuZWVkc0NsaXBwaW5nID0gY29tcHV0ZUJpdG1h
cERyYXdSZWN0cyhiaXRtYXBTaXplLCBzcmNSZWN0LCBkZXN0UmVjdCwgJmVuY2xvc2luZ1NyY1Jl
Y3QsICZlbmNsb3NpbmdEZXN0UmVjdCk7Ci0KLSAgICAgICAgaWYgKGVuY2xvc2luZ1NyY1JlY3Qu
aXNFbXB0eSgpIHx8IGVuY2xvc2luZ0Rlc3RSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAvLyBJZiBkZXN0aW5hdGlvbiBpcyBlbmxhcmdlZCBiZWNhdXNlIHNv
dXJjZSByZWN0YW5nbGUgZGlkbid0IGFsaWduIHRvCi0gICAgICAgIC8vIGludGVnZXIgYm91bmRh
cmllcyB0aGVuIHdlIGRyYXcgYSBzbGlnaHRseSBsYXJnZXIgcmVjdGFuZ2xlIGFuZCBjbGlwCi0g
ICAgICAgIC8vIHRvIHRoZSBvcmlnaW5hbCBkZXN0aW5hdGlvbiByZWN0YW5nbGUuCi0gICAgICAg
IC8vIFNlZSBodHRwOi8vY3JidWcuY29tLzE0NTU0MC4KLSAgICAgICAgaWYgKG5lZWRzQ2xpcHBp
bmcpIHsKLSAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAg
cGxhdGZvcm1Db250ZXh0LT5jbGlwUmVjdChkZXN0UmVjdCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBwbGF0Zm9ybUNvbnRleHQtPmRyYXdCaXRtYXBSZWN0KGJpdG1hcC5iaXRtYXAoKSwgJmVuY2xv
c2luZ1NyY1JlY3QsIGVuY2xvc2luZ0Rlc3RSZWN0LCAmcGFpbnQpOwotCi0gICAgICAgIGlmIChu
ZWVkc0NsaXBwaW5nKQotICAgICAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5yZXN0b3JlKCk7Ci0g
ICAgfQotICAgIHBsYXRmb3JtQ29udGV4dC0+ZGlkRHJhd1JlY3QoZGVzdFJlY3QsIHBhaW50LCAm
Yml0bWFwLmJpdG1hcCgpKTsKLX0KLQotLy8gQSBoZWxwZXIgbWV0aG9kIGZvciB0cmFuc2xhdGlu
ZyBuZWdhdGl2ZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcy4KLUZsb2F0UmVjdCBub3JtYWxpemVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBGbG9hdFJlY3Qgbm9ybSA9IHJlY3Q7
Ci0gICAgaWYgKG5vcm0ud2lkdGgoKSA8IDApIHsKLSAgICAgICAgbm9ybS5zZXRYKG5vcm0ueCgp
ICsgbm9ybS53aWR0aCgpKTsKLSAgICAgICAgbm9ybS5zZXRXaWR0aCgtbm9ybS53aWR0aCgpKTsK
LSAgICB9Ci0gICAgaWYgKG5vcm0uaGVpZ2h0KCkgPCAwKSB7Ci0gICAgICAgIG5vcm0uc2V0WShu
b3JtLnkoKSArIG5vcm0uaGVpZ2h0KCkpOwotICAgICAgICBub3JtLnNldEhlaWdodCgtbm9ybS5o
ZWlnaHQoKSk7Ci0gICAgfQotICAgIHJldHVybiBub3JtOwotfQotCi1ib29sIEZyYW1lRGF0YTo6
Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAg
ICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9vcmllbnRhdGlvbiA9IERlZmF1
bHRJbWFnZU9yaWVudGF0aW9uOwotCi0gICAgaWYgKG1fZnJhbWUpIHsKLSAgICAgICAgbV9mcmFt
ZS5jbGVhcigpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgZmxvYXRTcmNSZWN0
LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLAot
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEJsZW5kTW9kZSkKLXsKLSNpZiBQTEFURk9STShDSFJPTUlVTSkK
LSAgICBUUkFDRV9FVkVOVDAoInNraWEiLCAiSW1hZ2U6OmRyYXdQYXR0ZXJuIik7Ci0jZW5kaWYK
LSAgICBSZWZQdHI8TmF0aXZlSW1hZ2VTa2lhPiBiaXRtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwotICAgIGlmICghYml0bWFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9h
dFJlY3Qgbm9ybVNyY1JlY3QgPSBub3JtYWxpemVSZWN0KGZsb2F0U3JjUmVjdCk7Ci0gICAgbm9y
bVNyY1JlY3QuaW50ZXJzZWN0KEZsb2F0UmVjdCgwLCAwLCBiaXRtYXAtPmJpdG1hcCgpLndpZHRo
KCksIGJpdG1hcC0+Yml0bWFwKCkuaGVpZ2h0KCkpKTsKLSAgICBpZiAoZGVzdFJlY3QuaXNFbXB0
eSgpIHx8IG5vcm1TcmNSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOyAvLyBub3RoaW5n
IHRvIGRyYXcKLQotICAgIFNrTWF0cml4IGN0bSA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5nZXRUb3RhbE1hdHJpeCgpOwotICAgIFNrTWF0cml4IHRvdGFsTWF0cml4OwotICAgIHRvdGFs
TWF0cml4LnNldENvbmNhdChjdG0sIHBhdHRlcm5UcmFuc2Zvcm0pOwotCi0gICAgLy8gRmlndXJl
IG91dCB3aGF0IHNpemUgdGhlIGJpdG1hcCB3aWxsIGJlIGluIHRoZSBkZXN0aW5hdGlvbi4gVGhl
Ci0gICAgLy8gZGVzdGluYXRpb24gcmVjdCBpcyB0aGUgYm91bmRzIG9mIHRoZSBwYXR0ZXJuLCB3
ZSBuZWVkIHRvIHVzZSB0aGUKLSAgICAvLyBtYXRyaXggdG8gc2VlIGhvdyBiaWcgaXQgd2lsbCBi
ZS4KLSAgICBTa1JlY3QgZGVzdFJlY3RUYXJnZXQ7Ci0gICAgdG90YWxNYXRyaXgubWFwUmVjdCgm
ZGVzdFJlY3RUYXJnZXQsIG5vcm1TcmNSZWN0KTsKLQotICAgIGZsb2F0IGRlc3RCaXRtYXBXaWR0
aCA9IFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdFRhcmdldC53aWR0aCgpKTsKLSAgICBmbG9hdCBk
ZXN0Qml0bWFwSGVpZ2h0ID0gU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0VGFyZ2V0LmhlaWdodCgp
KTsKLQotICAgIC8vIENvbXB1dGUgdGhlIHJlc2FtcGxpbmcgbW9kZS4KLSAgICBSZXNhbXBsaW5n
TW9kZSByZXNhbXBsaW5nOwotICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+aXNB
Y2NlbGVyYXRlZCgpIHx8IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmludGluZygpKQot
ICAgICAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOwotICAgIGVsc2UKLSAgICAgICAg
cmVzYW1wbGluZyA9IGNvbXB1dGVSZXNhbXBsaW5nTW9kZSh0b3RhbE1hdHJpeCwgKmJpdG1hcCwg
bm9ybVNyY1JlY3Qud2lkdGgoKSwgbm9ybVNyY1JlY3QuaGVpZ2h0KCksIGRlc3RCaXRtYXBXaWR0
aCwgZGVzdEJpdG1hcEhlaWdodCk7Ci0gICAgcmVzYW1wbGluZyA9IGxpbWl0UmVzYW1wbGluZ01v
ZGUoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHJlc2FtcGxpbmcpOwotCi0gICAgLy8gTG9h
ZCB0aGUgdHJhbnNmb3JtIFdlYktpdCByZXF1ZXN0ZWQuCi0gICAgU2tNYXRyaXggbWF0cml4KHBh
dHRlcm5UcmFuc2Zvcm0pOwotCi0gICAgU2tTaGFkZXIqIHNoYWRlcjsKLSAgICBpZiAocmVzYW1w
bGluZyA9PSBSRVNBTVBMRV9BV0VTT01FKSB7Ci0gICAgICAgIC8vIERvIG5pY2UgcmVzYW1wbGlu
Zy4KLSAgICAgICAgZmxvYXQgc2NhbGVYID0gZGVzdEJpdG1hcFdpZHRoIC8gbm9ybVNyY1JlY3Qu
d2lkdGgoKTsKLSAgICAgICAgZmxvYXQgc2NhbGVZID0gZGVzdEJpdG1hcEhlaWdodCAvIG5vcm1T
cmNSZWN0LmhlaWdodCgpOwotICAgICAgICBTa1JlY3Qgc2NhbGVkU3JjUmVjdDsKLSAgICAgICAg
U2tJUmVjdCBlbmNsb3NpbmdTY2FsZWRTcmNSZWN0OwotCi0gICAgICAgIC8vIFRoZSBpbWFnZSBm
cmFnbWVudCBnZW5lcmF0ZWQgaGVyZSBpcyBub3QgZXhhY3RseSB3aGF0IGlzCi0gICAgICAgIC8v
IHJlcXVlc3RlZC4gVGhlIHNjYWxlIGZhY3RvciB1c2VkIGlzIGFwcHJveGltYXRlZCBhbmQgaW1h
Z2UKLSAgICAgICAgLy8gZnJhZ21lbnQgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRvIGFsaWduIHRvIGlu
dGVnZXIKLSAgICAgICAgLy8gYm91bmRhcmllcy4KLSAgICAgICAgU2tCaXRtYXAgcmVzYW1wbGVk
ID0gZXh0cmFjdFNjYWxlZEltYWdlRnJhZ21lbnQoKmJpdG1hcCwgbm9ybVNyY1JlY3QsIHNjYWxl
WCwgc2NhbGVZLCAmc2NhbGVkU3JjUmVjdCwgJmVuY2xvc2luZ1NjYWxlZFNyY1JlY3QpOwotICAg
ICAgICBzaGFkZXIgPSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVyKHJlc2FtcGxlZCwgU2tT
aGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUsIFNrU2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlKTsKLQot
ICAgICAgICAvLyBTaW5jZSB3ZSBqdXN0IHJlc2l6ZWQgdGhlIGJpdG1hcCwgd2UgbmVlZCB0byBy
ZW1vdmUgdGhlIHNjYWxlCi0gICAgICAgIC8vIGFwcGxpZWQgdG8gdGhlIHBpeGVscyBpbiB0aGUg
Yml0bWFwIHNoYWRlci4gVGhpcyBtZWFucyB3ZSBuZWVkCi0gICAgICAgIC8vIENUTSAqIHBhdHRl
cm5UcmFuc2Zvcm0gdG8gaGF2ZSBpZGVudGl0eSBzY2FsZS4gU2luY2Ugd2UKLSAgICAgICAgLy8g
Y2FuJ3QgbW9kaWZ5IENUTSAob3IgdGhlIHJlY3RhbmdsZSB3aWxsIGJlIGRyYXduIGluIHRoZSB3
cm9uZwotICAgICAgICAvLyBwbGFjZSksIHdlIG11c3Qgc2V0IHBhdHRlcm5UcmFuc2Zvcm0ncyBz
Y2FsZSB0byB0aGUgaW52ZXJzZSBvZgotICAgICAgICAvLyBDVE0gc2NhbGUuCi0gICAgICAgIG1h
dHJpeC5zZXRTY2FsZVgoY3RtLmdldFNjYWxlWCgpID8gMSAvIGN0bS5nZXRTY2FsZVgoKSA6IDEp
OwotICAgICAgICBtYXRyaXguc2V0U2NhbGVZKGN0bS5nZXRTY2FsZVkoKSA/IDEgLyBjdG0uZ2V0
U2NhbGVZKCkgOiAxKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBObyBuZWVkIHRvIGRvIG5p
Y2UgcmVzYW1wbGluZy4KLSAgICAgICAgU2tCaXRtYXAgc3JjU3Vic2V0OwotICAgICAgICBiaXRt
YXAtPmJpdG1hcCgpLmV4dHJhY3RTdWJzZXQoJnNyY1N1YnNldCwgZW5jbG9zaW5nSW50UmVjdChu
b3JtU3JjUmVjdCkpOwotICAgICAgICBzaGFkZXIgPSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hh
ZGVyKHNyY1N1YnNldCwgU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUsIFNrU2hhZGVyOjprUmVw
ZWF0X1RpbGVNb2RlKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBhbHNvIG5lZWQgdG8gdHJhbnNsYXRl
IGl0IHN1Y2ggdGhhdCB0aGUgb3JpZ2luIG9mIHRoZSBwYXR0ZXJuIGlzIHRoZQotICAgIC8vIG9y
aWdpbiBvZiB0aGUgZGVzdGluYXRpb24gcmVjdCwgd2hpY2ggaXMgd2hhdCBXZWJLaXQgZXhwZWN0
cy4gU2tpYSB1c2VzCi0gICAgLy8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9yaWdpbiBhcyB0aGUg
YmFzZSBmb3IgdGhlIHBhdHRlci4gSWYgV2ViS2l0IHdhbnRzCi0gICAgLy8gYSBzaGlmdGVkIGlt
YWdlLCBpdCB3aWxsIHNoaWZ0IGl0IGZyb20gdGhlcmUgdXNpbmcgdGhlIHBhdHRlcm5UcmFuc2Zv
cm0uCi0gICAgZmxvYXQgYWRqdXN0ZWRYID0gcGhhc2UueCgpICsgbm9ybVNyY1JlY3QueCgpICoK
LSAgICAgICAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFu
c2Zvcm0uYSgpKTsKLSAgICBmbG9hdCBhZGp1c3RlZFkgPSBwaGFzZS55KCkgKyBub3JtU3JjUmVj
dC55KCkgKgotICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0
dGVyblRyYW5zZm9ybS5kKCkpOwotICAgIG1hdHJpeC5wb3N0VHJhbnNsYXRlKFNrRmxvYXRUb1Nj
YWxhcihhZGp1c3RlZFgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFNrRmxvYXRUb1NjYWxh
cihhZGp1c3RlZFkpKTsKLSAgICBzaGFkZXItPnNldExvY2FsTWF0cml4KG1hdHJpeCk7Ci0KLSAg
ICBTa1BhaW50IHBhaW50OwotICAgIHBhaW50LnNldFNoYWRlcihzaGFkZXIpLT51bnJlZigpOwot
ICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShXZWJDb3JlQ29tcG9zaXRlVG9Ta2lhQ29tcG9zaXRl
KGNvbXBvc2l0ZU9wKSk7Ci0gICAgcGFpbnQuc2V0RmlsdGVyQml0bWFwKHJlc2FtcGxpbmcgPT0g
UkVTQU1QTEVfTElORUFSKTsKLQotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3
UmVjdChkZXN0UmVjdCwgcGFpbnQpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEJpdG1hcEltYWdlIENsYXNzCi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLy8gRklYTUU6IFRo
ZXNlIHNob3VsZCBnbyB0byBCaXRtYXBJbWFnZVNraWEuY3BwCi0KLUJpdG1hcEltYWdlOjpCaXRt
YXBJbWFnZShQYXNzUmVmUHRyPE5hdGl2ZUltYWdlU2tpYT4gbmF0aXZlSW1hZ2UsIEltYWdlT2Jz
ZXJ2ZXIqIG9ic2VydmVyKQotICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCi0gICAgLCBtX3NpemUobmF0
aXZlSW1hZ2UtPmJpdG1hcCgpLndpZHRoKCksIG5hdGl2ZUltYWdlLT5iaXRtYXAoKS5oZWlnaHQo
KSkKLSAgICAsIG1fY3VycmVudEZyYW1lKDApCi0gICAgLCBtX2ZyYW1lcygwKQotICAgICwgbV9m
cmFtZVRpbWVyKDApCi0gICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKLSAg
ICAsIG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzKFVua25vd24pCi0gICAgLCBtX3JlcGV0aXRpb25z
Q29tcGxldGUoMCkKLSAgICAsIG1fZGVjb2RlZFNpemUobmF0aXZlSW1hZ2UtPmRlY29kZWRTaXpl
KCkpCi0gICAgLCBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSgwKQotICAgICwgbV9mcmFtZUNvdW50
KDEpCi0gICAgLCBtX2lzU29saWRDb2xvcihmYWxzZSkKLSAgICAsIG1fY2hlY2tlZEZvclNvbGlk
Q29sb3IoZmFsc2UpCi0gICAgLCBtX2FuaW1hdGlvbkZpbmlzaGVkKHRydWUpCi0gICAgLCBtX2Fs
bERhdGFSZWNlaXZlZCh0cnVlKQotICAgICwgbV9oYXZlU2l6ZSh0cnVlKQotICAgICwgbV9zaXpl
QXZhaWxhYmxlKHRydWUpCi0gICAgLCBtX2hhdmVGcmFtZUNvdW50KHRydWUpCi17Ci0gICAgLy8g
U2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdlIGNhbid0IGZpZ3VyZSBvdXQgdGhlIGlt
YWdlIG9yaWVudGF0aW9uLgotICAgIC8vIFNldCBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24g
dG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mgbm90IDB4MC4KLSAgICBtX3NpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemU7Ci0KLSAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAg
IG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSAhbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLmlzT3BhcXVl
KCk7Ci0gICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IG5hdGl2ZUltYWdlOwotICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLQotICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwot
fQotCi12b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKLXsKLX0KLQot
dm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKLXsKLSAgICBtX2lzU29saWRD
b2xvciA9IGZhbHNlOwotICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOwotCi0gICAg
aWYgKGZyYW1lQ291bnQoKSA+IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxOYXRp
dmVJbWFnZVNraWE+IGZyYW1lID0gZnJhbWVBdEluZGV4KDApOwotCi0gICAgaWYgKGZyYW1lICYm
IHNpemUoKS53aWR0aCgpID09IDEgJiYgc2l6ZSgpLmhlaWdodCgpID09IDEpIHsKLSAgICAgICAg
U2tBdXRvTG9ja1BpeGVscyBsb2NrKGZyYW1lLT5iaXRtYXAoKSk7Ci0gICAgICAgIGlmICghZnJh
bWUtPmJpdG1hcCgpLmdldFBpeGVscygpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKLSAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoZnJh
bWUtPmJpdG1hcCgpLmdldENvbG9yKDAsIDApKTsKLSAgICB9Ci19Ci0KLXZvaWQgQml0bWFwSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBkcmF3
KGN0eHQsIGRzdFJlY3QsIHNyY1JlY3QsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBibGVuZE1v
ZGUsIERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pOwotfQotCi12b2lkIEJpdG1hcEltYWdl
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25F
bnVtIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotewotICAgIC8vIFNwaW4gdGhlIGFu
aW1hdGlvbiB0byB0aGUgY29ycmVjdCBmcmFtZSBiZWZvcmUgd2UgdHJ5IHRvIGRyYXcgaXQsIHNv
IHdlCi0gICAgLy8gZG9uJ3QgZHJhdyBhbiBvbGQgZnJhbWUgYW5kIHRoZW4gaW1tZWRpYXRlbHkg
bmVlZCB0byBkcmF3IGEgbmV3ZXIgb25lLAotICAgIC8vIGNhdXNpbmcgZmxpY2tlciBhbmQgd2Fz
dGluZyBDUFUuCi0gICAgc3RhcnRBbmltYXRpb24oKTsKLQotICAgIFJlZlB0cjxOYXRpdmVJbWFn
ZVNraWE+IGJtID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIWJtKQot
ICAgICAgICByZXR1cm47IC8vIEl0J3MgdG9vIGVhcmx5IGFuZCB3ZSBkb24ndCBoYXZlIGFuIGlt
YWdlIHlldC4KLQotICAgIEZsb2F0UmVjdCBub3JtRHN0UmVjdCA9IG5vcm1hbGl6ZVJlY3QoZHN0
UmVjdCk7Ci0gICAgRmxvYXRSZWN0IG5vcm1TcmNSZWN0ID0gbm9ybWFsaXplUmVjdChzcmNSZWN0
KTsKLSAgICBub3JtU3JjUmVjdC5pbnRlcnNlY3QoRmxvYXRSZWN0KDAsIDAsIGJtLT5iaXRtYXAo
KS53aWR0aCgpLCBibS0+Yml0bWFwKCkuaGVpZ2h0KCkpKTsKLQotICAgIGlmIChub3JtU3JjUmVj
dC5pc0VtcHR5KCkgfHwgbm9ybURzdFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47IC8v
IE5vdGhpbmcgdG8gZHJhdy4KLQotICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBE
ZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKLSAgICBpZiAoc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50
YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIG9yaWVudGF0aW9uID0g
ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzYXZlQ29udGV4dCgqY3R4dCwgZmFsc2UpOwotICAgIGlmIChvcmll
bnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgewotICAgICAgICBzYXZlQ29udGV4
dC5zYXZlKCk7Ci0KLSAgICAgICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmln
aW4gdG8gYmUgYXQgKDAsIDApCi0gICAgICAgIGN0eHQtPnRyYW5zbGF0ZShub3JtRHN0UmVjdC54
KCksIG5vcm1Ec3RSZWN0LnkoKSk7Ci0gICAgICAgIG5vcm1Ec3RSZWN0LnNldExvY2F0aW9uKEZs
b2F0UG9pbnQoKSk7Ci0KLSAgICAgICAgY3R4dC0+Y29uY2F0Q1RNKG9yaWVudGF0aW9uLnRyYW5z
Zm9ybUZyb21EZWZhdWx0KG5vcm1Ec3RSZWN0LnNpemUoKSkpOwotCi0gICAgICAgIGlmIChvcmll
bnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgZGVzdGlu
YXRpb24gcmVjdCB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJz
ZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBp
dCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJh
Y2sgaGVyZS4KLSAgICAgICAgICAgIG5vcm1Ec3RSZWN0ID0gRmxvYXRSZWN0KG5vcm1Ec3RSZWN0
LngoKSwgbm9ybURzdFJlY3QueSgpLCBub3JtRHN0UmVjdC5oZWlnaHQoKSwgbm9ybURzdFJlY3Qu
d2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwYWludFNrQml0bWFwKGN0eHQtPnBs
YXRmb3JtQ29udGV4dCgpLAotICAgICAgICAqYm0sCi0gICAgICAgIG5vcm1TcmNSZWN0LAotICAg
ICAgICBub3JtRHN0UmVjdCwKLSAgICAgICAgV2ViQ29yZUNvbXBvc2l0ZVRvU2tpYUNvbXBvc2l0
ZShjb21wb3NpdGVPcCkpOwotCi0gICAgaWYgKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyID0gaW1h
Z2VPYnNlcnZlcigpKQotICAgICAgICBvYnNlcnZlci0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbnRQb2ludFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbnRQb2ludFNraWEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmZDlhNmZkMDUyYzY0NGUxNDg2OWI1NGQ5NTkyZjYzYWVmYTY2Y2VkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW50UG9pbnRTa2lhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0K
LSNpbmNsdWRlICJTa1BvaW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50UG9pbnQ6
OkludFBvaW50KGNvbnN0IFNrSVBvaW50JiBwKQotICAgIDogbV94KHAuZlgpCi0gICAgLCBtX3ko
cC5mWSkKLXsKLX0KLQotSW50UG9pbnQ6Om9wZXJhdG9yIFNrSVBvaW50KCkgY29uc3QKLXsKLSAg
ICBTa0lQb2ludCBwID0geyBtX3gsIG1feSB9OwotICAgIHJldHVybiBwOwotfQotCi1JbnRQb2lu
dDo6b3BlcmF0b3IgU2tQb2ludCgpIGNvbnN0Ci17Ci0gICAgU2tQb2ludCBwID0geyBTa0ludFRv
U2NhbGFyKG1feCksIFNrSW50VG9TY2FsYXIobV95KSB9OwotICAgIHJldHVybiBwOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ludFJlY3RTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW50UmVjdFNraWEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDI0MDg2NzUyZWQzNjEyYWY2MDI2YzNmNTc5ZjI1MDYwOWI1ZTE4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW50UmVjdFNraWEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotCi0j
aW5jbHVkZSAiU2tSZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW50UmVjdDo6b3Bl
cmF0b3IgU2tJUmVjdCgpIGNvbnN0Ci17Ci0gICAgU2tJUmVjdCByZWN0ID0geyB4KCksIHkoKSwg
bWF4WCgpLCBtYXhZKCkgfTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotSW50UmVjdDo6b3BlcmF0
b3IgU2tSZWN0KCkgY29uc3QKLXsKLSAgICBTa1JlY3QgcmVjdDsKLSAgICByZWN0LnNldChTa0lu
dFRvU2NhbGFyKHgoKSksIFNrSW50VG9TY2FsYXIoeSgpKSwgU2tJbnRUb1NjYWxhcihtYXhYKCkp
LCBTa0ludFRvU2NhbGFyKG1heFkoKSkpOwotICAgIHJldHVybiByZWN0OwotfQotCi1JbnRSZWN0
OjpJbnRSZWN0KGNvbnN0IFNrSVJlY3QmIHIpCi0gICAgOiBtX2xvY2F0aW9uKHIuZkxlZnQsIHIu
ZlRvcCkKLSAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpCi17Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTWVtb3J5SW5zdHJ1bWVudGF0aW9uU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL01lbW9yeUluc3RydW1lbnRhdGlvblNraWEuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzc2OTJiMzI4N2NmZDQzNmNjMjRjYTlkYzRm
ZDY3YjNhNGY3OGNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uU2tpYS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIk1lbW9yeUluc3RydW1lbnRhdGlvblNraWEuaCIKLQotI2luY2x1
ZGUgIlBsYXRmb3JtTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiU2tCaXRtYXAu
aCIKLSNpbmNsdWRlICJTa0NhbnZhcy5oIgotI2luY2x1ZGUgIlNrRGV2aWNlLmgiCi0jaW5jbHVk
ZSAiU2tQaXhlbFJlZi5oIgotI2luY2x1ZGUgPHd0Zi9NZW1vcnlPYmplY3RJbmZvLmg+Ci0KLXZv
aWQgcmVwb3J0TWVtb3J5VXNhZ2UoY29uc3QgU2tCaXRtYXAqIGNvbnN0JiBpbWFnZSwgV1RGOjpN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKQotewotICAgIFdURjo6TWVtb3J5Q2xh
c3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgaW1hZ2UpOwotICAgIG1lbW9yeU9iamVjdElu
Zm8tPnNldENsYXNzTmFtZSgiU2tCaXRtYXAiKTsKLSAgICBTa1BpeGVsUmVmKiBwaXhlbFJlZiA9
IGltYWdlLT5waXhlbFJlZigpOwotICAgIGluZm8uYWRkTWVtYmVyKHBpeGVsUmVmLCAicGl4ZWxS
ZWYiKTsKLSAgICBpZiAocGl4ZWxSZWYpCi0gICAgICAgIGluZm8uYWRkUmF3QnVmZmVyKHBpeGVs
UmVmLT5waXhlbHMoKSwgaW1hZ2UtPmdldFNpemUoKSwgIlBpeGVscyIsICJwaXhlbFJlZiIpOwot
fQotCi12b2lkIHJlcG9ydE1lbW9yeVVzYWdlKGNvbnN0IFNrRGV2aWNlKiBjb25zdCYgZGV2aWNl
LCBXVEY6Ok1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pCi17Ci0gICAgV1RGOjpN
ZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCBkZXZpY2UpOwotICAgIGluZm8u
YWRkTWVtYmVyKGNvbnN0X2Nhc3Q8U2tEZXZpY2UqPihkZXZpY2UpLT5hY2Nlc3NCaXRtYXAoZmFs
c2UpLCAiYml0bWFwIiwgV1RGOjpSZXRhaW5pbmdQb2ludGVyKTsKLX0KLQotdm9pZCByZXBvcnRN
ZW1vcnlVc2FnZShjb25zdCBTa0NhbnZhcyogY29uc3QmIGNhbnZhcywgV1RGOjpNZW1vcnlPYmpl
Y3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKQotewotICAgIFdURjo6TWVtb3J5Q2xhc3NJbmZvIGlu
Zm8obWVtb3J5T2JqZWN0SW5mbywgY2FudmFzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihjYW52YXMt
PmdldERldmljZSgpLCAiY2FudmFzIiwgV1RGOjpSZXRhaW5pbmdQb2ludGVyKTsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTWVtb3J5SW5zdHJ1
bWVudGF0aW9uU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9N
ZW1vcnlJbnN0cnVtZW50YXRpb25Ta2lhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGU2ZjgxYjBkMjdmNGNjMDE3MjkxM2FmNWM5M2Y5M2JjY2EyOGI0M2UuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9NZW1vcnlJbnN0cnVtZW50YXRpb25Ta2lhLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNZW1vcnlJbnN0cnVtZW50YXRpb25Ta2lhX2gKLSNkZWZp
bmUgTWVtb3J5SW5zdHJ1bWVudGF0aW9uU2tpYV9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybU1lbW9y
eUluc3RydW1lbnRhdGlvbi5oIgotCi1jbGFzcyBTa0JpdG1hcDsKLWNsYXNzIFNrRGV2aWNlOwot
Y2xhc3MgU2tDYW52YXM7Ci0KLXZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoY29uc3QgU2tCaXRtYXAq
IGNvbnN0JiwgV1RGOjpNZW1vcnlPYmplY3RJbmZvKik7Ci12b2lkIHJlcG9ydE1lbW9yeVVzYWdl
KGNvbnN0IFNrRGV2aWNlKiBjb25zdCYsIFdURjo6TWVtb3J5T2JqZWN0SW5mbyopOwotdm9pZCBy
ZXBvcnRNZW1vcnlVc2FnZShjb25zdCBTa0NhbnZhcyogY29uc3QmLCBXVEY6Ok1lbW9yeU9iamVj
dEluZm8qKTsKLQotI2VuZGlmIC8vICFkZWZpbmVkKE1lbW9yeUluc3RydW1lbnRhdGlvblNraWFf
aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0
aXZlSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
TmF0aXZlSW1hZ2VTa2lhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY4OWQw
N2ZlMTQ2YmI3MDQ3N2E0ZDAxMzIwMWYxYzdmNTg0NWJkNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL05hdGl2ZUltYWdlU2tpYS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVy
YXRpb25zLmgiCi0KLSNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIk1lbW9yeUluc3RydW1lbnRhdGlvblNraWEuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
TWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiU2tQaXhlbFJlZi5oIgotI2luY2x1
ZGUgIlNraWFVdGlscy5oIgotCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0jaW5jbHVkZSAiRGVm
ZXJyZWRJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1OYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYSgp
Ci0gICAgOiBtX3Jlc29sdXRpb25TY2FsZSgxKQotICAgICwgbV9yZXNpemVSZXF1ZXN0cygwKQot
ewotfQotCi1OYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYShjb25zdCBTa0JpdG1hcCYg
b3RoZXIsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLSAgICA6IG1faW1hZ2Uob3RoZXIpCi0gICAg
LCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi0gICAgLCBtX3Jlc2l6ZVJlcXVl
c3RzKDApCi17Ci19Ci0KLU5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKGNvbnN0IFNr
Qml0bWFwJiBpbWFnZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBTa0JpdG1hcCYgcmVz
aXplZEltYWdlLCBjb25zdCBDYWNoZWRJbWFnZUluZm8mIGNhY2hlZEltYWdlSW5mbywgaW50IHJl
c2l6ZVJlcXVlc3RzKQotICAgIDogbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fcmVzb2x1dGlvblNj
YWxlKHJlc29sdXRpb25TY2FsZSkKLSAgICAsIG1fcmVzaXplZEltYWdlKHJlc2l6ZWRJbWFnZSkK
LSAgICAsIG1fY2FjaGVkSW1hZ2VJbmZvKGNhY2hlZEltYWdlSW5mbykKLSAgICAsIG1fcmVzaXpl
UmVxdWVzdHMocmVzaXplUmVxdWVzdHMpCi17Ci19Ci0KLU5hdGl2ZUltYWdlU2tpYTo6fk5hdGl2
ZUltYWdlU2tpYSgpCi17Ci19Ci0KLWludCBOYXRpdmVJbWFnZVNraWE6OmRlY29kZWRTaXplKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9pbWFnZS5nZXRTaXplKCkgKyBtX3Jlc2l6ZWRJbWFnZS5n
ZXRTaXplKCk7Ci19Ci0KLWJvb2wgTmF0aXZlSW1hZ2VTa2lhOjpoYXNSZXNpemVkQml0bWFwKGNv
bnN0IFNrSVNpemUmIHNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkSW1hZ2VT
dWJzZXQpIGNvbnN0Ci17Ci0gICAgYm9vbCBpbWFnZVNjYWxlRXF1YWwgPSBtX2NhY2hlZEltYWdl
SW5mby5zY2FsZWRJbWFnZVNpemUgPT0gc2NhbGVkSW1hZ2VTaXplOwotICAgIGJvb2wgc2NhbGVk
SW1hZ2VTdWJzZXRBdmFpbGFibGUgPSBtX2NhY2hlZEltYWdlSW5mby5zY2FsZWRJbWFnZVN1YnNl
dC5jb250YWlucyhzY2FsZWRJbWFnZVN1YnNldCk7Ci0gICAgcmV0dXJuIGltYWdlU2NhbGVFcXVh
bCAmJiBzY2FsZWRJbWFnZVN1YnNldEF2YWlsYWJsZSAmJiAhbV9yZXNpemVkSW1hZ2UuZW1wdHko
KTsKLX0KLQotU2tCaXRtYXAgTmF0aXZlSW1hZ2VTa2lhOjpyZXNpemVkQml0bWFwKGNvbnN0IFNr
SVNpemUmIHNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkSW1hZ2VTdWJzZXQp
IGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0gICAgaWYgKERlZmVycmVkSW1hZ2VE
ZWNvZGVyOjppc0xhenlEZWNvZGVkKG1faW1hZ2UpKQotICAgICAgICByZXR1cm4gRGVmZXJyZWRJ
bWFnZURlY29kZXI6OmNyZWF0ZVJlc2l6ZWRMYXp5RGVjb2RpbmdCaXRtYXAobV9pbWFnZSwgc2Nh
bGVkSW1hZ2VTaXplLCBzY2FsZWRJbWFnZVN1YnNldCk7Ci0jZW5kaWYKLQotICAgIGlmICghaGFz
UmVzaXplZEJpdG1hcChzY2FsZWRJbWFnZVNpemUsIHNjYWxlZEltYWdlU3Vic2V0KSkgewotICAg
ICAgICBib29sIHNob3VsZENhY2hlID0gaXNEYXRhQ29tcGxldGUoKQotICAgICAgICAgICAgJiYg
c2hvdWxkQ2FjaGVSZXNhbXBsaW5nKHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQp
OwotCi0gICAgICAgIFBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVzaXplSW1hZ2Uoc2hv
dWxkQ2FjaGUpOwotICAgICAgICBTa0JpdG1hcCByZXNpemVkSW1hZ2UgPSBza2lhOjpJbWFnZU9w
ZXJhdGlvbnM6OlJlc2l6ZShtX2ltYWdlLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9M
QU5DWk9TMywgc2NhbGVkSW1hZ2VTaXplLndpZHRoKCksIHNjYWxlZEltYWdlU2l6ZS5oZWlnaHQo
KSwgc2NhbGVkSW1hZ2VTdWJzZXQpOwotICAgICAgICByZXNpemVkSW1hZ2Uuc2V0SW1tdXRhYmxl
KCk7Ci0gICAgICAgIFBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uOjpkaWRSZXNpemVJbWFnZSgpOwot
Ci0gICAgICAgIGlmICghc2hvdWxkQ2FjaGUpCi0gICAgICAgICAgICByZXR1cm4gcmVzaXplZElt
YWdlOwotCi0gICAgICAgIG1fcmVzaXplZEltYWdlID0gcmVzaXplZEltYWdlOwotICAgIH0KLQot
ICAgIFNrQml0bWFwIHJlc2l6ZWRTdWJzZXQ7Ci0gICAgU2tJUmVjdCByZXNpemVkU3Vic2V0UmVj
dCA9IG1fY2FjaGVkSW1hZ2VJbmZvLnJlY3RJblN1YnNldChzY2FsZWRJbWFnZVN1YnNldCk7Ci0g
ICAgbV9yZXNpemVkSW1hZ2UuZXh0cmFjdFN1YnNldCgmcmVzaXplZFN1YnNldCwgcmVzaXplZFN1
YnNldFJlY3QpOwotICAgIHJldHVybiByZXNpemVkU3Vic2V0OwotfQotCi1ib29sIE5hdGl2ZUlt
YWdlU2tpYTo6c2hvdWxkQ2FjaGVSZXNhbXBsaW5nKGNvbnN0IFNrSVNpemUmIHNjYWxlZEltYWdl
U2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkSW1hZ2VTdWJzZXQpIGNvbnN0Ci17Ci0gICAgLy8g
Q2hlY2sgd2hldGhlciB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnMgbWF0Y2ggcHJldmlvdXMgcmVx
dWVzdC4KLSAgICBib29sIG1hdGNoZXNQcmV2aW91c1JlcXVlc3QgPSBtX2NhY2hlZEltYWdlSW5m
by5pc0VxdWFsKHNjYWxlZEltYWdlU2l6ZSwgc2NhbGVkSW1hZ2VTdWJzZXQpOwotICAgIGlmICht
YXRjaGVzUHJldmlvdXNSZXF1ZXN0KQotICAgICAgICArK21fcmVzaXplUmVxdWVzdHM7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIG1fY2FjaGVkSW1hZ2VJbmZvLnNldChzY2FsZWRJbWFnZVNpemUsIHNj
YWxlZEltYWdlU3Vic2V0KTsKLSAgICAgICAgbV9yZXNpemVSZXF1ZXN0cyA9IDA7Ci0gICAgICAg
IC8vIFJlc2V0IG1fcmVzaXplZEltYWdlIG5vdywgYmVjYXVzZSB3ZSBkb24ndCBkaXN0aW5ndWlz
aAotICAgICAgICAvLyBiZXR3ZWVuIHRoZSBsYXN0IHJlcXVlc3RlZCByZXNpemUgaW5mbyBhbmQg
bV9yZXNpemVkSW1hZ2UncwotICAgICAgICAvLyByZXNpemUgaW5mby4KLSAgICAgICAgbV9yZXNp
emVkSW1hZ2UucmVzZXQoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBjYW4gbm90IGNhY2hlIGluY29t
cGxldGUgZnJhbWVzLiBUaGlzIG1pZ2h0IGJlIGEgZ29vZCBvcHRpbWl6YXRpb24gaW4KLSAgICAv
LyB0aGUgZnV0dXJlLCB3ZXJlIHdlIGtub3cgaG93IG11Y2ggb2YgdGhlIGZyYW1lIGhhcyBiZWVu
IGRlY29kZWQsIHNvIHdoZW4KLSAgICAvLyB3ZSBpbmNyZW1lbnRhbGx5IGRyYXcgbW9yZSBvZiB0
aGUgaW1hZ2UsIHdlIG9ubHkgaGF2ZSB0byByZXNhbXBsZSB0aGUKLSAgICAvLyBwYXJ0cyB0aGF0
IGFyZSBjaGFuZ2VkLgotICAgIGlmICghaXNEYXRhQ29tcGxldGUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIGRlc3RpbmF0aW9uIGJpdG1hcCBpcyBleGNlc3NpdmVs
eSBsYXJnZSwgd2UnbGwgbmV2ZXIgYWxsb3cgY2FjaGluZy4KLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbG9uZyBsb25nIGtMYXJnZUJpdG1hcFNpemUgPSA0MDk2VUxMICogNDA5NlVMTDsKLSAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgZnVsbFNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KHNjYWxlZEltYWdlU2l6ZS53aWR0aCgpKSAqIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4oc2NhbGVkSW1hZ2VTaXplLmhlaWdodCgpKTsKLSAgICB1bnNpZ25lZCBsb25nIGxv
bmcgZnJhZ21lbnRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzY2FsZWRJ
bWFnZVN1YnNldC53aWR0aCgpKSAqIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2Nh
bGVkSW1hZ2VTdWJzZXQuaGVpZ2h0KCkpOwotCi0gICAgaWYgKGZyYWdtZW50U2l6ZSA+IGtMYXJn
ZUJpdG1hcFNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHRoZSBkZXN0
aW5hdGlvbiBiaXRtYXAgaXMgc21hbGwsIHdlJ2xsIGFsd2F5cyBhbGxvdyBjYWNoaW5nLCBzaW5j
ZQotICAgIC8vIHRoZXJlIGlzIG5vdCB2ZXJ5IG11Y2ggcGVuYWx0eSBmb3IgY29tcHV0aW5nIGl0
IGFuZCBpdCBtYXkgY29tZSBpbiBoYW5keS4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQga1Nt
YWxsQml0bWFwU2l6ZSA9IDQwOTY7Ci0gICAgaWYgKGZyYWdtZW50U2l6ZSA8PSBrU21hbGxCaXRt
YXBTaXplKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmICJ0b28gbWFueSIgcmVx
dWVzdHMgaGF2ZSBiZWVuIG1hZGUgZm9yIHRoaXMgYml0bWFwLCB3ZSBhc3N1bWUgdGhhdAotICAg
IC8vIG1hbnkgbW9yZSB3aWxsIGJlIG1hZGUgYXMgd2VsbCwgYW5kIHdlJ2xsIGdvIGFoZWFkIGFu
ZCBjYWNoZSBpdC4KLSAgICBzdGF0aWMgY29uc3QgaW50IGtNYW55UmVxdWVzdFRocmVzaG9sZCA9
IDQ7Ci0gICAgaWYgKG1fcmVzaXplUmVxdWVzdHMgPj0ga01hbnlSZXF1ZXN0VGhyZXNob2xkKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIG1vcmUgdGhhbiAxLzQgb2YgdGhlIHJl
c2l6ZWQgaW1hZ2UgaXMgcmVxdWVzdGVkLCBpdCdzIHdvcnRoIGNhY2hpbmcuCi0gICAgcmV0dXJu
IGZyYWdtZW50U2l6ZSA+IGZ1bGxTaXplIC8gNDsKLX0KLQotTmF0aXZlSW1hZ2VTa2lhOjpDYWNo
ZWRJbWFnZUluZm86OkNhY2hlZEltYWdlSW5mbygpCi17Ci0gICAgc2NhbGVkSW1hZ2VTaXplLnNl
dEVtcHR5KCk7Ci0gICAgc2NhbGVkSW1hZ2VTdWJzZXQuc2V0RW1wdHkoKTsKLX0KLQotYm9vbCBO
YXRpdmVJbWFnZVNraWE6OkNhY2hlZEltYWdlSW5mbzo6aXNFcXVhbChjb25zdCBTa0lTaXplJiBv
dGhlclNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYgb3RoZXJTY2FsZWRJbWFnZVN1YnNl
dCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2NhbGVkSW1hZ2VTaXplID09IG90aGVyU2NhbGVkSW1h
Z2VTaXplICYmIHNjYWxlZEltYWdlU3Vic2V0ID09IG90aGVyU2NhbGVkSW1hZ2VTdWJzZXQ7Ci19
Ci0KLXZvaWQgTmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OnNldChjb25zdCBTa0lT
aXplJiBvdGhlclNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYgb3RoZXJTY2FsZWRJbWFn
ZVN1YnNldCkKLXsKLSAgICBzY2FsZWRJbWFnZVNpemUgPSBvdGhlclNjYWxlZEltYWdlU2l6ZTsK
LSAgICBzY2FsZWRJbWFnZVN1YnNldCA9IG90aGVyU2NhbGVkSW1hZ2VTdWJzZXQ7Ci19Ci0KLVNr
SVJlY3QgTmF0aXZlSW1hZ2VTa2lhOjpDYWNoZWRJbWFnZUluZm86OnJlY3RJblN1YnNldChjb25z
dCBTa0lSZWN0JiBvdGhlclNjYWxlZEltYWdlU3Vic2V0KQotewotICAgIGlmICghc2NhbGVkSW1h
Z2VTdWJzZXQuY29udGFpbnMob3RoZXJTY2FsZWRJbWFnZVN1YnNldCkpCi0gICAgICAgIHJldHVy
biBTa0lSZWN0OjpNYWtlRW1wdHkoKTsKLSAgICBTa0lSZWN0IHN1YnNldFJlY3QgPSBvdGhlclNj
YWxlZEltYWdlU3Vic2V0OwotICAgIHN1YnNldFJlY3Qub2Zmc2V0KC1zY2FsZWRJbWFnZVN1YnNl
dC54KCksIC1zY2FsZWRJbWFnZVN1YnNldC55KCkpOwotICAgIHJldHVybiBzdWJzZXRSZWN0Owot
fQotCi12b2lkIE5hdGl2ZUltYWdlU2tpYTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKLXsKLSAgICBNZW1vcnlDbGFzc0luZm8gaW5m
byhtZW1vcnlPYmplY3RJbmZvLCB0aGlzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2ltYWdlLCAi
aW1hZ2UiKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3Jlc2l6ZWRJbWFnZSwgInJlc2l6ZWRJbWFn
ZSIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fY2FjaGVkSW1hZ2VJbmZvLCAiY2FjaGVkSW1hZ2VJ
bmZvIik7Ci19Ci0KLXZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoY29uc3QgTmF0aXZlSW1hZ2VTa2lh
KiBpbWFnZSwgTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykKLXsKLSAgICBpbWFn
ZS0+cmVwb3J0TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvTmF0aXZlSW1hZ2VTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL05hdGl2ZUltYWdlU2tpYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
ZmFlYjVhZTQ1Y2VmN2QxNGFjNDk5MGI3NjZiM2E5MWVkNmM1NmVkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIE5hdGl2ZUltYWdlU2tpYV9oCi0jZGVmaW5lIE5hdGl2ZUltYWdlU2tp
YV9oCi0KLSNpbmNsdWRlICJTa0JpdG1hcC5oIgotI2luY2x1ZGUgIlNrUmVjdC5oIgotI2luY2x1
ZGUgIlNrU2l6ZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLS8vIFRoaXMgb2JqZWN0IGlzIHVzZWQgYXMgdGhlICJuYXRpdmUgaW1hZ2UiIGlu
IG91ciBwb3J0LiBXaGVuIFdlYktpdCB1c2VzCi0vLyBQYXNzTmF0aXZlSW1hZ2VQdHIgLyBOYXRp
dmVJbWFnZVB0ciwgaXQgaXMgYSBzbWFydCBwb2ludGVyIHRvIHRoaXMgdHlwZS4KLS8vIEl0IGhh
cyBhbiBTa0JpdG1hcCwgYW5kIGFsc28gc3RvcmVzIGEgY2FjaGVkIHJlc2l6ZWQgaW1hZ2UuCi1j
bGFzcyBOYXRpdmVJbWFnZVNraWEgOiBwdWJsaWMgUmVmQ291bnRlZDxOYXRpdmVJbWFnZVNraWE+
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxOYXRpdmVJbWFnZVNraWE+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5hdGl2ZUltYWdlU2tpYSgp
KTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGZhY3RvcnkgbWV0aG9kIGRvZXMgYSBzaGFsbG93IGNv
cHkgb2YgdGhlIHBhc3NlZC1pbiBTa0JpdG1hcAotICAgIC8vIChpZS4sIGl0IHJlZmVyZW5jZXMg
dGhlIHNhbWUgcGl4ZWwgZGF0YSBhbmQgYnVtcHMgdGhlIHJlZmNvdW50KS4gVXNlCi0gICAgLy8g
b25seSB3aGVuIHlvdSB3YW50IHNoYXJpbmcgc2VtYW50aWNzLgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE5hdGl2ZUltYWdlU2tpYT4gY3JlYXRlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSA9IDEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IE5hdGl2ZUltYWdlU2tpYShiaXRtYXAsIHJlc29sdXRpb25TY2FsZSkpOwotICAgIH0KLQotICAg
IC8vIFRoaXMgbWV0aG9kIGRvZXMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGludGVybmFsIFNrQml0
bWFwIChpZS4sIGl0Ci0gICAgLy8gcmVmZXJlbmNlcyB0aGUgc2FtZSBwaXhlbCBkYXRhIGFuZCBi
dW1wcyB0aGUgcmVmY291bnQpLiBVc2Ugb25seSB3aGVuCi0gICAgLy8geW91IHdhbnQgc2hhcmlu
ZyBzZW1hbnRpY3MuCi0gICAgUGFzc1JlZlB0cjxOYXRpdmVJbWFnZVNraWE+IGNsb25lKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTmF0aXZlSW1hZ2VTa2lhKG1f
aW1hZ2UsIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc2l6ZWRJbWFnZSwgbV9jYWNoZWRJbWFnZUlu
Zm8sIG1fcmVzaXplUmVxdWVzdHMpKTsKLSAgICB9Ci0KLSAgICB+TmF0aXZlSW1hZ2VTa2lhKCk7
Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgaW1hZ2UgZGF0YS4gVGhp
cyBpbmNsdWRlcyB0aGUgY2FjaGVkCi0gICAgLy8gcmVzaXplZCB2ZXJzaW9uIGlmIHRoZXJlIGlz
IG9uZS4KLSAgICBpbnQgZGVjb2RlZFNpemUoKSBjb25zdDsKLQotICAgIC8vIFNldHMgdGhlIGlt
bXV0YWJsZSBmbGFnIG9uIHRoZSBiaXRtYXAsIGluZGljYXRpbmcgdGhhdCB0aGUgaW1hZ2UgZGF0
YQotICAgIC8vIHdpbGwgbm90IGJlIG1vZGlmaWVkIGFueSBmdXJ0aGVyLiBUaGlzIGlzIGNhbGxl
ZCBieSB0aGUgaW1hZ2UgZGVjb2RlcgotICAgIC8vIHdoZW4gYWxsIGRhdGEgaXMgY29tcGxldGUs
IHVzZWQgYnkgdXMgdG8ga25vdyB3aGV0aGVyIHdlIGNhbiBjYWNoZQotICAgIC8vIHJlc2l6ZWQg
aW1hZ2VzLCBhbmQgdXNlZCBieSBTa2lhIGZvciB2YXJpb3VzIG9wdGltaXphdGlvbnMuCi0gICAg
dm9pZCBzZXREYXRhQ29tcGxldGUoKSB7IG1faW1hZ2Uuc2V0SW1tdXRhYmxlKCk7IH0KLQotICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW50aXJlIGltYWdlIGhhcyBiZWVuIGRlY29kZWQuCi0g
ICAgYm9vbCBpc0RhdGFDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuaXNJbW11dGFi
bGUoKTsgfQotCi0gICAgLy8gR2V0IHJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgU2tCaXRtYXAg
cmVwcmVzZW50aW5nIHRoaXMgaW1hZ2UuCi0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNv
bnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KLSAgICBTa0JpdG1hcCYgYml0bWFwKCkgeyByZXR1cm4g
bV9pbWFnZTsgfQotCi0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvbHV0aW9uU2NhbGU7IH0KLQotICAgIC8vIFdlIGNhbiBrZWVwIGEgcmVzaXplZCB2ZXJz
aW9uIG9mIHRoZSBiaXRtYXAgY2FjaGVkIG9uIHRoaXMgb2JqZWN0LgotICAgIC8vIFRoaXMgZnVu
Y3Rpb24gd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRo
ZSBnaXZlbgotICAgIC8vIHNjYWxlIGFuZCBzdWJzZXQuCi0gICAgYm9vbCBoYXNSZXNpemVkQml0
bWFwKGNvbnN0IFNrSVNpemUmIHNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVk
SW1hZ2VTdWJzZXQpIGNvbnN0OwotCi0gICAgLy8gVGhpcyB3aWxsIHJldHVybiBhbiBleGlzdGlu
ZyByZXNpemVkIGltYWdlIHN1YnNldCwgb3IgZ2VuZXJhdGUgYSBuZXcgb25lCi0gICAgLy8gb2Yg
dGhlIHNwZWNpZmllZCBzaXplIGFuZCBzdWJzZXQgYW5kIHBvc3NpYmx5IGNhY2hlIGl0LgotICAg
IC8vCi0gICAgLy8gc2NhbGVkSW1hZ2VTaXplCi0gICAgLy8gRGltZW5zaW9ucyBvZiB0aGUgc2Nh
bGVkIGZ1bGwgaW1hZ2UuCi0gICAgLy8KLSAgICAvLyBzY2FsZWRJbWFnZVN1YnNldAotICAgIC8v
IFJlY3RhbmdsZSBvZiB0aGUgc3Vic2V0IGluIHRoZSBzY2FsZWQgaW1hZ2UuCi0gICAgU2tCaXRt
YXAgcmVzaXplZEJpdG1hcChjb25zdCBTa0lTaXplJiBzY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNr
SVJlY3QmIHNjYWxlZEltYWdlU3Vic2V0KSBjb25zdDsKLQotICAgIHZvaWQgcmVwb3J0TWVtb3J5
VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwotCi1wcml2YXRlOgotICAgIE5hdGl2ZUlt
YWdlU2tpYSgpOwotCi0gICAgTmF0aXZlSW1hZ2VTa2lhKGNvbnN0IFNrQml0bWFwJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlKTsKLQotICAgIC8vIENhY2hlZEltYWdlSW5mbyBpcyB1c2VkIHRvIHVu
aXF1ZWx5IGlkZW50aWZ5IGNhY2hlZCBvciByZXF1ZXN0ZWQgaW1hZ2UKLSAgICAvLyByZXNpemVz
LgotICAgIC8vIEltYWdlIHJlc2l6ZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBzY2FsZWQgaW1hZ2Ug
c2l6ZSBhbmQgc2NhbGVkIGltYWdlIHN1YnNldC4KLSAgICBzdHJ1Y3QgQ2FjaGVkSW1hZ2VJbmZv
IHsKLSAgICAgICAgU2tJU2l6ZSBzY2FsZWRJbWFnZVNpemU7Ci0gICAgICAgIFNrSVJlY3Qgc2Nh
bGVkSW1hZ2VTdWJzZXQ7Ci0KLSAgICAgICAgQ2FjaGVkSW1hZ2VJbmZvKCk7Ci0KLSAgICAgICAg
Ym9vbCBpc0VxdWFsKGNvbnN0IFNrSVNpemUmIG90aGVyU2NhbGVkSW1hZ2VTaXplLCBjb25zdCBT
a0lSZWN0JiBvdGhlclNjYWxlZEltYWdlU3Vic2V0KSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXQo
Y29uc3QgU2tJU2l6ZSYgb3RoZXJTY2FsZWRJbWFnZVNpemUsIGNvbnN0IFNrSVJlY3QmIG90aGVy
U2NhbGVkSW1hZ2VTdWJzZXQpOwotICAgICAgICBTa0lSZWN0IHJlY3RJblN1YnNldChjb25zdCBT
a0lSZWN0JiBvdGhlclNjYWxlZEltYWdlUmVjdCk7Ci0gICAgfTsKLQotICAgIE5hdGl2ZUltYWdl
U2tpYShjb25zdCBTa0JpdG1hcCYgaW1hZ2UsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3Qg
U2tCaXRtYXAmIHJlc2l6ZWRJbWFnZSwgY29uc3QgQ2FjaGVkSW1hZ2VJbmZvJiwgaW50IHJlc2l6
ZVJlcXVlc3RzKTsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcmVzaXplIG9w
ZXJhdGlvbiBzaG91bGQgZWl0aGVyIHJlc2l6ZSB0aGUgd2hvbGUKLSAgICAvLyBpbWFnZSBhbmQg
Y2FjaGUgaXQsIG9yIHJlc2l6ZSBqdXN0IHRoZSBwYXJ0IGl0IG5lZWRzIGFuZCB0aHJvdyB0aGUg
cmVzdWx0Ci0gICAgLy8gYXdheS4KLSAgICAvLwotICAgIC8vIENhbGxpbmcgdGhpcyBmdW5jdGlv
biBtYXkgaW5jcmVtZW50IGEgcmVxdWVzdCBjb3VudCB0aGF0IGNhbiBjaGFuZ2UgdGhlCi0gICAg
Ly8gcmVzdWx0IG9mIHN1YnNlcXVlbnQgY2FsbHMuCi0gICAgLy8KLSAgICAvLyBPbiB0aGUgb25l
IGhhbmQsIGlmIG9ubHkgYSBzbWFsbCBzdWJzZXQgaXMgZGVzaXJlZCwgdGhlbiB3ZSB3aWxsIHdh
c3RlIGEKLSAgICAvLyBsb3Qgb2YgdGltZSByZXNhbXBsaW5nIHRoZSBlbnRpcmUgdGhpbmcsIHNv
IHdlIG9ubHkgd2FudCB0byBkbyBleGFjdGx5Ci0gICAgLy8gd2hhdCdzIHJlcXVpcmVkLiBPbiB0
aGUgb3RoZXIgaGFuZCwgcmVzYW1wbGluZyB0aGUgZW50aXJlIGJpdG1hcCBpcwotICAgIC8vIGJl
dHRlciBpZiB3ZSdyZSBnb2luZyB0byBiZSB1c2luZyBpdCBtb3JlIHRoYW4gb25jZSAobGlrZSBh
IGJpdG1hcAotICAgIC8vIHNjcm9sbGluZyBvbiBhbmQgb2ZmIHRoZSBzY3JlZW4uIFNpbmNlIHdl
IG9ubHkgY2FjaGUgd2hlbiBkb2luZyB0aGUKLSAgICAvLyBlbnRpcmUgdGhpbmcsIGl0J3MgYmVz
dCB0byBqdXN0IGRvIGl0IHVwIGZyb250LgotICAgIGJvb2wgc2hvdWxkQ2FjaGVSZXNhbXBsaW5n
KGNvbnN0IFNrSVNpemUmIHNjYWxlZEltYWdlU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkSW1h
Z2VTdWJzZXQpIGNvbnN0OwotCi0gICAgLy8gVGhlIG9yaWdpbmFsIGltYWdlLgotICAgIFNrQml0
bWFwIG1faW1hZ2U7Ci0gICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICAvLyBUaGUg
Y2FjaGVkIGJpdG1hcCBmcmFnbWVudC4gVGhpcyBpcyBhIHN1YnNldCBvZiB0aGUgc2NhbGVkIHZl
cnNpb24gb2YKLSAgICAvLyB8bV9pbWFnZXwuIGVtcHR5KCkgcmV0dXJucyB0cnVlIGlmIHRoZXJl
IGlzIG5vIGNhY2hlZCBpbWFnZS4KLSAgICBtdXRhYmxlIFNrQml0bWFwIG1fcmVzaXplZEltYWdl
OwotCi0gICAgLy8gUmVmZXJlbmNlcyBob3cgbWFueSB0aW1lcyB0aGF0IHRoZSBpbWFnZSBzaXpl
IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IKLSAgICAvLyB0aGUgbGFzdCBzaXplLgotICAgIC8vCi0g
ICAgLy8gRXZlcnkgdGltZSB3ZSBnZXQgYSBjYWxsIHRvIHNob3VsZENhY2hlUmVzYW1wbGluZywg
aWYgaXQgbWF0Y2hlcyB0aGUKLSAgICAvLyBtX2NhY2hlZEltYWdlSW5mbywgd2UnbGwgaW5jcmVt
ZW50IHRoZSBjb3VudGVyLCBhbmQgaWYgbm90LCB3ZSdsbCByZXNldAotICAgIC8vIHRoZSBjb3Vu
dGVyIGFuZCBzYXZlIHRoZSBkaW1lbnNpb25zLgotICAgIC8vCi0gICAgLy8gVGhpcyBhbGxvd3Mg
dXMgdG8gc2VlIGlmIG1hbnkgcmVxdWVzdHMgaGF2ZSBiZWVuIG1hZGUgZm9yIHRoZSBzYW1lCi0g
ICAgLy8gcmVzaXplZCBpbWFnZSwgd2Uga25vdyB0aGF0IHdlIHNob3VsZCBwcm9iYWJseSBjYWNo
ZSBpdCwgZXZlbiBpZiBhbGwgb2YKLSAgICAvLyB0aG9zZSByZXF1ZXN0cyBpbmRpdmlkdWFsbHkg
YXJlIHNtYWxsIGFuZCB3b3VsZCBub3Qgb3RoZXJ3aXNlIGJlIGNhY2hlZC4KLSAgICAvLwotICAg
IC8vIFdlIGFsc28gdHJhY2sgc2NhbGluZyBpbmZvcm1hdGlvbiBhbmQgZGVzdGluYXRpb24gc3Vi
c2V0IGZvciB0aGUgc2NhbGVkCi0gICAgLy8gaW1hZ2UuIFNlZSBjb21tZW50cyBmb3IgQ2FjaGVk
SW1hZ2VJbmZvLgotICAgIG11dGFibGUgQ2FjaGVkSW1hZ2VJbmZvIG1fY2FjaGVkSW1hZ2VJbmZv
OwotICAgIG11dGFibGUgaW50IG1fcmVzaXplUmVxdWVzdHM7Ci19OwotCi19Ci0jZW5kaWYgIC8v
IE5hdGl2ZUltYWdlU2tpYV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjhlOGQzMDQ2NDMzYTEzNmE2YjY4MzQyNDhjNGIyMDE1YTI5NTc0YS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiT3Bh
cXVlUmVnaW9uU2tpYS5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotCi0j
aW5jbHVkZSAiU2tDYW52YXMuaCIKLSNpbmNsdWRlICJTa0NvbG9yRmlsdGVyLmgiCi0jaW5jbHVk
ZSAiU2tTaGFkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1PcGFxdWVSZWdpb25Ta2lh
OjpPcGFxdWVSZWdpb25Ta2lhKCkKLSAgICA6IG1fb3BhcXVlUmVjdChTa1JlY3Q6Ok1ha2VFbXB0
eSgpKQotewotfQotCi1PcGFxdWVSZWdpb25Ta2lhOjp+T3BhcXVlUmVnaW9uU2tpYSgpCi17Ci19
Ci0KLUludFJlY3QgT3BhcXVlUmVnaW9uU2tpYTo6YXNSZWN0KCkgY29uc3QKLXsKLSAgICAvLyBS
ZXR1cm5zIHRoZSBsYXJnZXN0IGVuY2xvc2VkIHJlY3QuCi0gICAgaW50IGxlZnQgPSBTa1NjYWxh
ckNlaWwobV9vcGFxdWVSZWN0LmZMZWZ0KTsKLSAgICBpbnQgdG9wID0gU2tTY2FsYXJDZWlsKG1f
b3BhcXVlUmVjdC5mVG9wKTsKLSAgICBpbnQgcmlnaHQgPSBTa1NjYWxhckZsb29yKG1fb3BhcXVl
UmVjdC5mUmlnaHQpOwotICAgIGludCBib3R0b20gPSBTa1NjYWxhckZsb29yKG1fb3BhcXVlUmVj
dC5mQm90dG9tKTsKLSAgICByZXR1cm4gSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0LWxlZnQsIGJv
dHRvbS10b3ApOwotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHhmZXJtb2RlIHdpbGwgZm9y
Y2UgdGhlIGRzdCB0byBiZSBvcGFxdWUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgZHN0Lgot
c3RhdGljIGlubGluZSBib29sIHhmZXJtb2RlSXNPcGFxdWUoY29uc3QgU2tQYWludCYgcGFpbnQs
IGJvb2wgc3JjSXNPcGFxdWUpCi17Ci0gICAgaWYgKCFzcmNJc09wYXF1ZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgU2tYZmVybW9kZSogeGZlcm1vZGUgPSBwYWludC5nZXRYZmVybW9k
ZSgpOwotICAgIGlmICgheGZlcm1vZGUpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBkZWZhdWx0
IHRvIGtTcmNPdmVyX01vZGUKLSAgICBTa1hmZXJtb2RlOjpNb2RlIG1vZGU7Ci0gICAgaWYgKCF4
ZmVybW9kZS0+YXNNb2RlKCZtb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dp
dGNoIChtb2RlKSB7Ci0gICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjX01vZGU6IC8vIHNvdXJjZQot
ICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZTogLy8gc291cmNlICsgZGVzdCAtIHNv
dXJjZSpkZXN0Ci0gICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3Zlcl9Nb2RlOiAvLyBzb3VyY2Ug
KyBkZXN0IC0gc291cmNlKmRlc3QKLSAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RBVG9wX01vZGU6
IC8vIHNvdXJjZQotICAgIGNhc2UgU2tYZmVybW9kZTo6a1BsdXNfTW9kZTogLy8gc291cmNlK2Rl
c3QKLSAgICBkZWZhdWx0OiAvLyB0aGUgcmVzdCBhcmUgYWxsIHNvdXJjZSArIGRlc3QgLSBzb3Vy
Y2UqZGVzdAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFNrWGZlcm1vZGU6OmtDbGVh
cl9Nb2RlOiAvLyAwCi0gICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0X01vZGU6IC8vIGRlc3QKLSAg
ICBjYXNlIFNrWGZlcm1vZGU6OmtTcmNJbl9Nb2RlOiAvLyBzb3VyY2UgKiBkZXN0Ci0gICAgY2Fz
ZSBTa1hmZXJtb2RlOjprRHN0SW5fTW9kZTogLy8gZGVzdCAqIHNvdXJjZQotICAgIGNhc2UgU2tY
ZmVybW9kZTo6a1NyY091dF9Nb2RlOiAvLyBzb3VyY2UgKiAoMS1kZXN0KQotICAgIGNhc2UgU2tY
ZmVybW9kZTo6a0RzdE91dF9Nb2RlOiAvLyBkZXN0ICogKDEtc291cmNlKQotICAgIGNhc2UgU2tY
ZmVybW9kZTo6a1NyY0FUb3BfTW9kZTogLy8gZGVzdAotICAgIGNhc2UgU2tYZmVybW9kZTo6a1hv
cl9Nb2RlOiAvLyBzb3VyY2UgKyBkZXN0IC0gMiooc291cmNlKmRlc3QpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgeGZlcm1vZGUgd2ls
bCBrZWVwIHRoZSBkc3Qgb3BhcXVlLCBhc3N1bWluZyB0aGUgZHN0IGlzIGFscmVhZHkgb3BhcXVl
Lgotc3RhdGljIGlubGluZSBib29sIHhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKGNvbnN0IFNrUGFp
bnQmIHBhaW50LCBib29sIHNyY0lzT3BhcXVlKQotewotICAgIFNrWGZlcm1vZGUqIHhmZXJtb2Rl
ID0gcGFpbnQuZ2V0WGZlcm1vZGUoKTsKLSAgICBpZiAoIXhmZXJtb2RlKQotICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gZGVmYXVsdCB0byBrU3JjT3Zlcl9Nb2RlCi0gICAgU2tYZmVybW9kZTo6TW9k
ZSBtb2RlOwotICAgIGlmICgheGZlcm1vZGUtPmFzTW9kZSgmbW9kZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgU2tYZmVybW9kZTo6a0Rz
dF9Nb2RlOiAvLyBkZXN0Ci0gICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlOiAvLyBz
b3VyY2UgKyBkZXN0IC0gc291cmNlKmRlc3QKLSAgICBjYXNlIFNrWGZlcm1vZGU6OmtEc3RPdmVy
X01vZGU6IC8vIHNvdXJjZSArIGRlc3QgLSBzb3VyY2UqZGVzdAotICAgIGNhc2UgU2tYZmVybW9k
ZTo6a1NyY0FUb3BfTW9kZTogLy8gZGVzdAotICAgIGNhc2UgU2tYZmVybW9kZTo6a1BsdXNfTW9k
ZTogLy8gc291cmNlK2Rlc3QKLSAgICBkZWZhdWx0OiAvLyB0aGUgcmVzdCBhcmUgYWxsIHNvdXJj
ZSArIGRlc3QgLSBzb3VyY2UqZGVzdAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFNr
WGZlcm1vZGU6OmtDbGVhcl9Nb2RlOiAvLyAwCi0gICAgY2FzZSBTa1hmZXJtb2RlOjprU3JjT3V0
X01vZGU6IC8vIHNvdXJjZSAqICgxLWRlc3QpCi0gICAgY2FzZSBTa1hmZXJtb2RlOjprRHN0T3V0
X01vZGU6IC8vIGRlc3QgKiAoMS1zb3VyY2UpCi0gICAgY2FzZSBTa1hmZXJtb2RlOjprWG9yX01v
ZGU6IC8vIHNvdXJjZSArIGRlc3QgLSAyKihzb3VyY2UqZGVzdCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGNhc2UgU2tYZmVybW9kZTo6a1NyY19Nb2RlOiAvLyBzb3VyY2UKLSAgICBjYXNl
IFNrWGZlcm1vZGU6OmtTcmNJbl9Nb2RlOiAvLyBzb3VyY2UgKiBkZXN0Ci0gICAgY2FzZSBTa1hm
ZXJtb2RlOjprRHN0SW5fTW9kZTogLy8gZGVzdCAqIHNvdXJjZQotICAgIGNhc2UgU2tYZmVybW9k
ZTo6a0RzdEFUb3BfTW9kZTogLy8gc291cmNlCi0gICAgICAgIHJldHVybiBzcmNJc09wYXF1ZTsK
LSAgICB9Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBhaW50ZWQgd2lsbCBi
ZSBvcGFxdWUuCi1zdGF0aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50
JiBwYWludCwgT3BhcXVlUmVnaW9uU2tpYTo6RHJhd1R5cGUgZHJhd1R5cGUsIGNvbnN0IFNrQml0
bWFwKiBiaXRtYXApCi17Ci0gICAgaWYgKHBhaW50LmdldEFscGhhKCkgPCAweEZGKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZHJhd1R5cGUgIT0gT3Bh
cXVlUmVnaW9uU2tpYTo6RmlsbE9yU3Ryb2tlOwotICAgIGlmICghY2hlY2tGaWxsT25seSAmJiBw
YWludC5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxlICYmIHBhaW50LmlzQW50aUFs
aWFzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTa1NoYWRlciogc2hhZGVyID0gcGFp
bnQuZ2V0U2hhZGVyKCk7Ci0gICAgaWYgKHNoYWRlciAmJiAhc2hhZGVyLT5pc09wYXF1ZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGJpdG1hcCAmJiAhYml0bWFwLT5pc09wYXF1
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHBhaW50LmdldExvb3BlcigpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHBhaW50LmdldEltYWdlRmlsdGVyKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocGFpbnQuZ2V0TWFza0ZpbHRlcigpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU2tDb2xvckZpbHRlciogY29sb3JGaWx0ZXIgPSBwYWlu
dC5nZXRDb2xvckZpbHRlcigpOwotICAgIGlmIChjb2xvckZpbHRlciAmJiAhKGNvbG9yRmlsdGVy
LT5nZXRGbGFncygpICYgU2tDb2xvckZpbHRlcjo6a0FscGhhVW5jaGFuZ2VkX0ZsYWcpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFJldHVybnMgdHJ1
ZSBpZiB0aGVyZSBpcyBhIHJlY3Rhbmd1bGFyIGNsaXAsIHdpdGggdGhlIHJlc3VsdCBpbiB8ZGV2
aWNlQ2xpcFJlY3R8Lgotc3RhdGljIGlubGluZSBib29sIGdldERldmljZUNsaXBBc1JlY3QoY29u
c3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgU2tSZWN0JiBkZXZpY2VDbGlwUmVjdCkK
LXsKLSAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY2xpcCBpbiBkZXZpY2UgY29vcmRpbmF0ZSBzcGFj
ZS4KLSAgICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBUeXBlKCkgIT0gU2tDYW52YXM6
OmtSZWN0X0NsaXBUeXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTa0lSZWN0IGRl
dmljZUNsaXBJUmVjdDsKLSAgICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBEZXZpY2VC
b3VuZHMoJmRldmljZUNsaXBJUmVjdCkpCi0gICAgICAgIGRldmljZUNsaXBSZWN0LnNldChkZXZp
Y2VDbGlwSVJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgZGV2aWNlQ2xpcFJlY3Quc2V0RW1wdHko
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE9wYXF1ZVJlZ2lvblNraWE6OnB1c2hD
YW52YXNMYXllcihjb25zdCBTa1BhaW50KiBwYWludCkKLXsKLSAgICBDYW52YXNMYXllclN0YXRl
IHN0YXRlOwotICAgIGlmIChwYWludCkKLSAgICAgICAgc3RhdGUucGFpbnQgPSAqcGFpbnQ7Ci0g
ICAgbV9jYW52YXNMYXllclN0YWNrLmFwcGVuZChzdGF0ZSk7Ci19Ci0KLXZvaWQgT3BhcXVlUmVn
aW9uU2tpYTo6cG9wQ2FudmFzTGF5ZXIoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4
dCkKLXsKLSAgICBBU1NFUlQoIW1fY2FudmFzTGF5ZXJTdGFjay5pc0VtcHR5KCkpOwotICAgIGlm
IChtX2NhbnZhc0xheWVyU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
b25zdCBDYW52YXNMYXllclN0YXRlJiBjYW52YXNMYXllciA9IG1fY2FudmFzTGF5ZXJTdGFjay5s
YXN0KCk7Ci0gICAgU2tSZWN0IGxheWVyT3BhcXVlUmVjdCA9IGNhbnZhc0xheWVyLm9wYXF1ZVJl
Y3Q7Ci0gICAgU2tQYWludCBsYXllclBhaW50ID0gY2FudmFzTGF5ZXIucGFpbnQ7Ci0KLSAgICAv
LyBBcHBseSB0aGUgaW1hZ2UgbWFzay4KLSAgICBpZiAoY2FudmFzTGF5ZXIuaGFzSW1hZ2VNYXNr
ICYmICFsYXllck9wYXF1ZVJlY3QuaW50ZXJzZWN0KGNhbnZhc0xheWVyLmltYWdlT3BhcXVlUmVj
dCkpCi0gICAgICAgIGxheWVyT3BhcXVlUmVjdC5zZXRFbXB0eSgpOwotCi0gICAgbV9jYW52YXNM
YXllclN0YWNrLnJlbW92ZUxhc3QoKTsKLQotICAgIGFwcGx5T3BhcXVlUmVnaW9uRnJvbUxheWVy
KGNvbnRleHQsIGxheWVyT3BhcXVlUmVjdCwgbGF5ZXJQYWludCk7Ci19Ci0KLXZvaWQgT3BhcXVl
UmVnaW9uU2tpYTo6c2V0SW1hZ2VNYXNrKGNvbnN0IFNrUmVjdCYgaW1hZ2VPcGFxdWVSZWN0KQot
ewotICAgIEFTU0VSVCghbV9jYW52YXNMYXllclN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgbV9jYW52
YXNMYXllclN0YWNrLmxhc3QoKS5oYXNJbWFnZU1hc2sgPSB0cnVlOwotICAgIG1fY2FudmFzTGF5
ZXJTdGFjay5sYXN0KCkuaW1hZ2VPcGFxdWVSZWN0ID0gaW1hZ2VPcGFxdWVSZWN0OwotfQotCi12
b2lkIE9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdSZWN0KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNr
aWEqIGNvbnRleHQsIGNvbnN0IFNrUmVjdCYgZmlsbFJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50
LCBjb25zdCBTa0JpdG1hcCogc291cmNlQml0bWFwKQotewotICAgIC8vIEFueSBzdHJva2luZyBt
YXkgcHV0IGFscGhhIGluIHBpeGVscyBldmVuIGlmIHRoZSBmaWxsaW5nIHBhcnQgZG9lcyBub3Qu
Ci0gICAgaWYgKHBhaW50LmdldFN0eWxlKCkgIT0gU2tQYWludDo6a0ZpbGxfU3R5bGUpIHsKLSAg
ICAgICAgYm9vbCBmaWxsc0JvdW5kcyA9IGZhbHNlOwotCi0gICAgICAgIGlmICghcGFpbnQuY2Fu
Q29tcHV0ZUZhc3RCb3VuZHMoKSkKLSAgICAgICAgICAgIGRpZERyYXdVbmJvdW5kZWQoY29udGV4
dCwgcGFpbnQsIEZpbGxPclN0cm9rZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgU2tS
ZWN0IHN0cm9rZVJlY3Q7Ci0gICAgICAgICAgICBzdHJva2VSZWN0ID0gcGFpbnQuY29tcHV0ZUZh
c3RCb3VuZHMoZmlsbFJlY3QsICZzdHJva2VSZWN0KTsKLSAgICAgICAgICAgIGRpZERyYXcoY29u
dGV4dCwgc3Ryb2tlUmVjdCwgcGFpbnQsIHNvdXJjZUJpdG1hcCwgZmlsbHNCb3VuZHMsIEZpbGxP
clN0cm9rZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGZpbGxzQm91bmRzID0gcGFp
bnQuZ2V0U3R5bGUoKSAhPSBTa1BhaW50OjprU3Ryb2tlX1N0eWxlOwotICAgIGRpZERyYXcoY29u
dGV4dCwgZmlsbFJlY3QsIHBhaW50LCBzb3VyY2VCaXRtYXAsIGZpbGxzQm91bmRzLCBGaWxsT25s
eSk7Ci19Ci0KLXZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BhdGgoY29uc3QgUGxhdGZv
cm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgU2tQYXRoJiBwYXRoLCBjb25zdCBTa1BhaW50
JiBwYWludCkKLXsKLSAgICBTa1JlY3QgcmVjdDsKLSAgICBpZiAocGF0aC5pc1JlY3QoJnJlY3Qp
KSB7Ci0gICAgICAgIGRpZERyYXdSZWN0KGNvbnRleHQsIHJlY3QsIHBhaW50LCAwKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKLQotICAg
IGlmICghcGFpbnQuY2FuQ29tcHV0ZUZhc3RCb3VuZHMoKSkKLSAgICAgICAgZGlkRHJhd1VuYm91
bmRlZChjb250ZXh0LCBwYWludCwgRmlsbE9yU3Ryb2tlKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
cmVjdCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKHBhdGguZ2V0Qm91bmRzKCksICZyZWN0KTsK
LSAgICAgICAgZGlkRHJhdyhjb250ZXh0LCByZWN0LCBwYWludCwgMCwgZmlsbHNCb3VuZHMsIEZp
bGxPclN0cm9rZSk7Ci0gICAgfQotfQotCi12b2lkIE9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQ
b2ludHMoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgU2tDYW52YXM6OlBvaW50
TW9kZSBtb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBTa1BvaW50IHBvaW50c1tdLCBjb25zdCBT
a1BhaW50JiBwYWludCkKLXsKLSAgICBpZiAoIW51bVBvaW50cykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgU2tSZWN0IHJlY3Q7Ci0gICAgcmVjdC5mTGVmdCA9IHBvaW50c1swXS5mWDsKLSAgICBy
ZWN0LmZSaWdodCA9IHBvaW50c1swXS5mWCArIDE7Ci0gICAgcmVjdC5mVG9wID0gcG9pbnRzWzBd
LmZZOwotICAgIHJlY3QuZkJvdHRvbSA9IHBvaW50c1swXS5mWSArIDE7Ci0KLSAgICBmb3IgKGlu
dCBpID0gMTsgaSA8IG51bVBvaW50czsgKytpKSB7Ci0gICAgICAgIHJlY3QuZkxlZnQgPSBzdGQ6
Om1pbihyZWN0LmZMZWZ0LCBwb2ludHNbaV0uZlgpOwotICAgICAgICByZWN0LmZSaWdodCA9IHN0
ZDo6bWF4KHJlY3QuZlJpZ2h0LCBwb2ludHNbaV0uZlggKyAxKTsKLSAgICAgICAgcmVjdC5mVG9w
ID0gc3RkOjptaW4ocmVjdC5mVG9wLCBwb2ludHNbaV0uZlkpOwotICAgICAgICByZWN0LmZCb3R0
b20gPSBzdGQ6Om1heChyZWN0LmZCb3R0b20sIHBvaW50c1tpXS5mWSArIDEpOwotICAgIH0KLQot
ICAgIGJvb2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKLQotICAgIGlmICghcGFpbnQuY2FuQ29tcHV0
ZUZhc3RCb3VuZHMoKSkKLSAgICAgICAgZGlkRHJhd1VuYm91bmRlZChjb250ZXh0LCBwYWludCwg
RmlsbE9yU3Ryb2tlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgcmVjdCA9IHBhaW50LmNvbXB1dGVG
YXN0Qm91bmRzKHJlY3QsICZyZWN0KTsKLSAgICAgICAgZGlkRHJhdyhjb250ZXh0LCByZWN0LCBw
YWludCwgMCwgZmlsbHNCb3VuZHMsIEZpbGxPclN0cm9rZSk7Ci0gICAgfQotfQotCi12b2lkIE9w
YXF1ZVJlZ2lvblNraWE6OmRpZERyYXdCb3VuZGVkKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEq
IGNvbnRleHQsIGNvbnN0IFNrUmVjdCYgYm91bmRzLCBjb25zdCBTa1BhaW50JiBwYWludCkKLXsK
LSAgICBib29sIGZpbGxzQm91bmRzID0gZmFsc2U7Ci0KLSAgICBpZiAoIXBhaW50LmNhbkNvbXB1
dGVGYXN0Qm91bmRzKCkpCi0gICAgICAgIGRpZERyYXdVbmJvdW5kZWQoY29udGV4dCwgcGFpbnQs
IEZpbGxPclN0cm9rZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFNrUmVjdCByZWN0OwotICAgICAg
ICByZWN0ID0gcGFpbnQuY29tcHV0ZUZhc3RCb3VuZHMoYm91bmRzLCAmcmVjdCk7Ci0gICAgICAg
IGRpZERyYXcoY29udGV4dCwgcmVjdCwgcGFpbnQsIDAsIGZpbGxzQm91bmRzLCBGaWxsT3JTdHJv
a2UpOwotICAgIH0KLX0KLQotdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3KGNvbnN0IFBs
YXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUmVjdCYgcmVjdCwgY29uc3QgU2tQ
YWludCYgcGFpbnQsIGNvbnN0IFNrQml0bWFwKiBzb3VyY2VCaXRtYXAsIGJvb2wgZmlsbHNCb3Vu
ZHMsIERyYXdUeXBlIGRyYXdUeXBlKQotewotICAgIFNrUmVjdCB0YXJnZXRSZWN0ID0gcmVjdDsK
LQotICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0gdG8gZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2Uu
Ci0gICAgU2tNYXRyaXggY2FudmFzVHJhbnNmb3JtID0gY29udGV4dC0+Y2FudmFzKCktPmdldFRv
dGFsTWF0cml4KCk7Ci0gICAgaWYgKCFjYW52YXNUcmFuc2Zvcm0ubWFwUmVjdCgmdGFyZ2V0UmVj
dCkpCi0gICAgICAgIGZpbGxzQm91bmRzID0gZmFsc2U7Ci0KLSAgICAvLyBBcHBseSB0aGUgY3Vy
cmVudCBjbGlwLgotICAgIFNrUmVjdCBkZXZpY2VDbGlwUmVjdDsKLSAgICBpZiAoIWdldERldmlj
ZUNsaXBBc1JlY3QoY29udGV4dCwgZGV2aWNlQ2xpcFJlY3QpKQotICAgICAgICBmaWxsc0JvdW5k
cyA9IGZhbHNlOwotICAgIGVsc2UgaWYgKCF0YXJnZXRSZWN0LmludGVyc2VjdChkZXZpY2VDbGlw
UmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgZHJhd3NPcGFxdWUgPSBwYWludElz
T3BhcXVlKHBhaW50LCBkcmF3VHlwZSwgc291cmNlQml0bWFwKTsKLSAgICBib29sIHhmZXJzT3Bh
cXVlID0geGZlcm1vZGVJc09wYXF1ZShwYWludCwgZHJhd3NPcGFxdWUpOwotICAgIGJvb2wgcHJl
c2VydmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIGRyYXdzT3BhcXVl
KTsKLQotICAgIGlmIChmaWxsc0JvdW5kcyAmJiB4ZmVyc09wYXF1ZSkKLSAgICAgICAgbWFya1Jl
Y3RBc09wYXF1ZSh0YXJnZXRSZWN0KTsKLSAgICBlbHNlIGlmICghcHJlc2VydmVzT3BhcXVlKQot
ICAgICAgICBtYXJrUmVjdEFzTm9uT3BhcXVlKHRhcmdldFJlY3QpOwotfQotCi12b2lkIE9wYXF1
ZVJlZ2lvblNraWE6OmRpZERyYXdVbmJvdW5kZWQoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSog
Y29udGV4dCwgY29uc3QgU2tQYWludCYgcGFpbnQsIERyYXdUeXBlIGRyYXdUeXBlKQotewotICAg
IGJvb2wgZHJhd3NPcGFxdWUgPSBwYWludElzT3BhcXVlKHBhaW50LCBkcmF3VHlwZSwgMCk7Ci0g
ICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwg
ZHJhd3NPcGFxdWUpOwotCi0gICAgaWYgKHByZXNlcnZlc09wYXF1ZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgU2tSZWN0IGRldmljZUNsaXBSZWN0OwotICAgIGdldERldmljZUNsaXBBc1JlY3Qo
Y29udGV4dCwgZGV2aWNlQ2xpcFJlY3QpOwotICAgIG1hcmtSZWN0QXNOb25PcGFxdWUoZGV2aWNl
Q2xpcFJlY3QpOwotfQotCi12b2lkIE9wYXF1ZVJlZ2lvblNraWE6OmFwcGx5T3BhcXVlUmVnaW9u
RnJvbUxheWVyKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUmVj
dCYgbGF5ZXJPcGFxdWVSZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCkKLXsKLSAgICBTa1JlY3Qg
ZGV2aWNlQ2xpcFJlY3Q7Ci0gICAgYm9vbCBkZXZpY2VDbGlwSXNBUmVjdCA9IGdldERldmljZUNs
aXBBc1JlY3QoY29udGV4dCwgZGV2aWNlQ2xpcFJlY3QpOwotCi0gICAgaWYgKGRldmljZUNsaXBS
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2tSZWN0IHNvdXJjZU9wYXF1
ZVJlY3QgPSBsYXllck9wYXF1ZVJlY3Q7Ci0gICAgLy8gU2F2ZSB0aGUgb3BhcXVlIGFyZWEgaW4g
dGhlIGRlc3RpbmF0aW9uLCBzbyB3ZSBjYW4gcHJlc2VydmUgdGhlIHBhcnRzIG9mIGl0IHVuZGVy
IHRoZSBzb3VyY2Ugb3BhcXVlIGFyZWEgaWYgcG9zc2libGUuCi0gICAgU2tSZWN0IGRlc3RpbmF0
aW9uT3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QoKTsKLQotICAgIGJvb2wg
b3V0c2lkZVNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZl
c09wYXF1ZShwYWludCwgZmFsc2UpOwotICAgIGlmICghb3V0c2lkZVNvdXJjZU9wYXF1ZVJlY3RQ
cmVzZXJ2ZXNPcGFxdWUpCi0gICAgICAgIG1hcmtSZWN0QXNOb25PcGFxdWUoZGV2aWNlQ2xpcFJl
Y3QpOwotCi0gICAgaWYgKCFkZXZpY2VDbGlwSXNBUmVjdCkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghc291cmNlT3BhcXVlUmVjdC5pbnRlcnNlY3QoZGV2aWNlQ2xpcFJlY3QpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1ZSA9IHBhaW50
SXNPcGFxdWUocGFpbnQsIEZpbGxPbmx5LCAwKTsKLSAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3RY
ZmVyc09wYXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJlY3REcmF3
c09wYXF1ZSk7Ci0gICAgYm9vbCBzb3VyY2VPcGFxdWVSZWN0UHJlc2VydmVzT3BhcXVlID0geGZl
cm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1ZSk7
Ci0KLSAgICAvLyBJZiB0aGUgbGF5ZXIncyBvcGFxdWUgYXJlYSBpcyBiZWluZyBkcmF3biBvcGFx
dWUgaW4gdGhlIGxheWVyIGJlbG93LCB0aGVuIG1hcmsgaXQgb3BhcXVlLiBPdGhlcndpc2UsCi0g
ICAgLy8gaWYgaXQgcHJlc2VydmVzIG9wYXF1ZSB0aGVuIGtlZXAgdGhlIGludGVyc2VjdGlvbiBv
ZiB0aGUgdHdvLgotICAgIGlmIChzb3VyY2VPcGFxdWVSZWN0WGZlcnNPcGFxdWUpCi0gICAgICAg
IG1hcmtSZWN0QXNPcGFxdWUoc291cmNlT3BhcXVlUmVjdCk7Ci0gICAgZWxzZSBpZiAoc291cmNl
T3BhcXVlUmVjdFByZXNlcnZlc09wYXF1ZSAmJiBzb3VyY2VPcGFxdWVSZWN0LmludGVyc2VjdChk
ZXN0aW5hdGlvbk9wYXF1ZVJlY3QpKQotICAgICAgICBtYXJrUmVjdEFzT3BhcXVlKHNvdXJjZU9w
YXF1ZVJlY3QpOwotfQotCi12b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUo
Y29uc3QgU2tSZWN0JiByZWN0KQotewotICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0cmFjayBvZiBh
biBvcGFxdWUgcmVnaW9uIGJ1dCBib3VuZCBpdHMgY29tcGxleGl0eSBhdCBhIGNvbnN0YW50IHNp
emUuCi0gICAgLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgbGFyZ2VzdCByZWN0YW5nbGUgc2VlbiBi
eSBhcmVhLiBJZiB3ZSBjYW4gYWRkIHRoZSBuZXcgcmVjdCB0byB0aGlzCi0gICAgLy8gcmVjdGFu
Z2xlIHRoZW4gd2UgZG8gdGhhdCwgYXMgdGhhdCBpcyB0aGUgY2hlYXBlc3Qgd2F5IHRvIGluY3Jl
YXNlIHRoZSBhcmVhIHJldHVybmVkCi0gICAgLy8gd2l0aG91dCBpbmNyZWFzaW5nIHRoZSBjb21w
bGV4aXR5LgotCi0gICAgU2tSZWN0JiBvcGFxdWVSZWN0ID0gY3VycmVudFRyYWNraW5nT3BhcXVl
UmVjdCgpOwotCi0gICAgaWYgKHJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKG9wYXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
cmVjdC5jb250YWlucyhvcGFxdWVSZWN0KSkgewotICAgICAgICBvcGFxdWVSZWN0ID0gcmVjdDsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChyZWN0LmZUb3AgPD0gb3BhcXVlUmVj
dC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBvcGFxdWVSZWN0LmZCb3R0b20pIHsKLSAgICAgICAg
aWYgKHJlY3QuZkxlZnQgPCBvcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID49IG9wYXF1
ZVJlY3QuZkxlZnQpCi0gICAgICAgICAgICBvcGFxdWVSZWN0LmZMZWZ0ID0gcmVjdC5mTGVmdDsK
LSAgICAgICAgaWYgKHJlY3QuZlJpZ2h0ID4gb3BhcXVlUmVjdC5mUmlnaHQgJiYgcmVjdC5mTGVm
dCA8PSBvcGFxdWVSZWN0LmZSaWdodCkKLSAgICAgICAgICAgIG9wYXF1ZVJlY3QuZlJpZ2h0ID0g
cmVjdC5mUmlnaHQ7Ci0gICAgfSBlbHNlIGlmIChyZWN0LmZMZWZ0IDw9IG9wYXF1ZVJlY3QuZkxl
ZnQgJiYgcmVjdC5mUmlnaHQgPj0gb3BhcXVlUmVjdC5mUmlnaHQpIHsKLSAgICAgICAgaWYgKHJl
Y3QuZlRvcCA8IG9wYXF1ZVJlY3QuZlRvcCAmJiByZWN0LmZCb3R0b20gPj0gb3BhcXVlUmVjdC5m
VG9wKQotICAgICAgICAgICAgb3BhcXVlUmVjdC5mVG9wID0gcmVjdC5mVG9wOwotICAgICAgICBp
ZiAocmVjdC5mQm90dG9tID4gb3BhcXVlUmVjdC5mQm90dG9tICYmIHJlY3QuZlRvcCA8PSBvcGFx
dWVSZWN0LmZCb3R0b20pCi0gICAgICAgICAgICBvcGFxdWVSZWN0LmZCb3R0b20gPSByZWN0LmZC
b3R0b207Ci0gICAgfQotCi0gICAgbG9uZyBvcGFxdWVBcmVhID0gKGxvbmcpb3BhcXVlUmVjdC53
aWR0aCgpICogKGxvbmcpb3BhcXVlUmVjdC5oZWlnaHQoKTsKLSAgICBsb25nIGFyZWEgPSAobG9u
ZylyZWN0LndpZHRoKCkgKiAobG9uZylyZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhID4gb3Bh
cXVlQXJlYSkKLSAgICAgICAgb3BhcXVlUmVjdCA9IHJlY3Q7Ci19Ci0KLXZvaWQgT3BhcXVlUmVn
aW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3QmIHJlY3QpCi17Ci0gICAg
Ly8gV2Ugd2FudCB0byBrZWVwIGFzIG11Y2ggb2YgdGhlIGN1cnJlbnQgb3BhcXVlIHJlY3Rhbmds
ZSBhcyB3ZSBjYW4sIHNvIGZpbmQgdGhlIG9uZSBsYXJnZXN0Ci0gICAgLy8gcmVjdGFuZ2xlIGlu
c2lkZSBtX29wYXF1ZVJlY3QgdGhhdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB8cmVjdHwuCi0K
LSAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KCk7Ci0K
LSAgICBpZiAoIVNrUmVjdDo6SW50ZXJzZWN0cyhyZWN0LCBvcGFxdWVSZWN0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmIChyZWN0LmNvbnRhaW5zKG9wYXF1ZVJlY3QpKSB7Ci0gICAgICAgIG1h
cmtBbGxBc05vbk9wYXF1ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGRl
bHRhTGVmdCA9IHJlY3QuZkxlZnQgLSBvcGFxdWVSZWN0LmZMZWZ0OwotICAgIGludCBkZWx0YVJp
Z2h0ID0gb3BhcXVlUmVjdC5mUmlnaHQgLSByZWN0LmZSaWdodDsKLSAgICBpbnQgZGVsdGFUb3Ag
PSByZWN0LmZUb3AgLSBvcGFxdWVSZWN0LmZUb3A7Ci0gICAgaW50IGRlbHRhQm90dG9tID0gb3Bh
cXVlUmVjdC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOwotCi0gICAgLy8gaG9yaXpvbnRhbCBpcyB0
aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmln
aHQgb2YgfHJlY3R8IGFuZCBpbnNpZGUgb3BhcXVlUmVjdC4KLSAgICAvLyB2ZXJ0aWNhbCBpcyB0
aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBvciBiZWxvdyB8cmVjdHwgYW5k
IGluc2lkZSBvcGFxdWVSZWN0LgotICAgIFNrUmVjdCBob3Jpem9udGFsID0gb3BhcXVlUmVjdDsK
LSAgICBpZiAoZGVsdGFUb3AgPiBkZWx0YUJvdHRvbSkKLSAgICAgICAgaG9yaXpvbnRhbC5mQm90
dG9tID0gcmVjdC5mVG9wOwotICAgIGVsc2UKLSAgICAgICAgaG9yaXpvbnRhbC5mVG9wID0gcmVj
dC5mQm90dG9tOwotICAgIFNrUmVjdCB2ZXJ0aWNhbCA9IG9wYXF1ZVJlY3Q7Ci0gICAgaWYgKGRl
bHRhTGVmdCA+IGRlbHRhUmlnaHQpCi0gICAgICAgIHZlcnRpY2FsLmZSaWdodCA9IHJlY3QuZkxl
ZnQ7Ci0gICAgZWxzZQotICAgICAgICB2ZXJ0aWNhbC5mTGVmdCA9IHJlY3QuZlJpZ2h0OwotCi0g
ICAgaWYgKChsb25nKWhvcml6b250YWwud2lkdGgoKSAqIChsb25nKWhvcml6b250YWwuaGVpZ2h0
KCkgPiAobG9uZyl2ZXJ0aWNhbC53aWR0aCgpICogKGxvbmcpdmVydGljYWwuaGVpZ2h0KCkpCi0g
ICAgICAgIG9wYXF1ZVJlY3QgPSBob3Jpem9udGFsOwotICAgIGVsc2UKLSAgICAgICAgb3BhcXVl
UmVjdCA9IHZlcnRpY2FsOwotfQotCi12b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtBbGxBc05v
bk9wYXF1ZSgpCi17Ci0gICAgU2tSZWN0JiBvcGFxdWVSZWN0ID0gY3VycmVudFRyYWNraW5nT3Bh
cXVlUmVjdCgpOwotICAgIG9wYXF1ZVJlY3Quc2V0RW1wdHkoKTsKLX0KLQotU2tSZWN0JiBPcGFx
dWVSZWdpb25Ta2lhOjpjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KCkKLXsKLSAgICAvLyBJZiB3
ZSBhcmUgZHJhd2luZyBpbnRvIGEgY2FudmFzIGxheWVyLCB0aGVuIHRyYWNrIHRoZSBvcGFxdWUg
cmVjdCBpbiB0aGF0IGxheWVyLgotICAgIHJldHVybiBtX2NhbnZhc0xheWVyU3RhY2suaXNFbXB0
eSgpID8gbV9vcGFxdWVSZWN0IDogbV9jYW52YXNMYXllclN0YWNrLmxhc3QoKS5vcGFxdWVSZWN0
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlOGNiM2M0YmJkY2U2OTIyMThhYWRjODkyYWVjZTk2ZTZhMTUx
ZjUzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBPcGFxdWVSZWdpb25Ta2lhX2gKLSNk
ZWZpbmUgT3BhcXVlUmVnaW9uU2tpYV9oCi0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLSNpbmNs
dWRlICJTa0JpdG1hcC5oIgotI2luY2x1ZGUgIlNrQ2FudmFzLmgiCi0jaW5jbHVkZSAiU2tQYWlu
dC5oIgotI2luY2x1ZGUgIlNrUG9pbnQuaCIKLSNpbmNsdWRlICJTa1JlY3QuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgUGxhdGZvcm1Db250ZXh0U2tpYTsKLQotLy8gVGhpcyBjbGFz
cyBpcyBhbiBlbmNhcHN1bGF0aW9uIG9mIGZ1bmN0aW9uYWxpdHkgZm9yIFBsYXRmb3JtQ29udGV4
dFNraWEsIGFuZCBpdHMgbWV0aG9kcyBhcmUgbWlycm9yZWQKLS8vIHRoZXJlIGZvciB0aGUgb3V0
c2lkZSB3b3JsZC4gSXQgdHJhY2tzIHBhaW50cyBhbmQgY29tcHV0ZXMgd2hhdCBhcmVhIHdpbGwg
YmUgb3BhcXVlLgotY2xhc3MgT3BhcXVlUmVnaW9uU2tpYSB7Ci1wdWJsaWM6Ci0gICAgT3BhcXVl
UmVnaW9uU2tpYSgpOwotICAgIHZpcnR1YWwgfk9wYXF1ZVJlZ2lvblNraWEoKTsKLQotICAgIC8v
IFRoZSByZXN1bHRpbmcgb3BhcXVlIHJlZ2lvbiBhcyBhIHNpbmdsZSByZWN0LgotICAgIEludFJl
Y3QgYXNSZWN0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHB1c2hDYW52YXNMYXllcihjb25zdCBTa1Bh
aW50Kik7Ci0gICAgdm9pZCBwb3BDYW52YXNMYXllcihjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lh
Kik7Ci0KLSAgICB2b2lkIHNldEltYWdlTWFzayhjb25zdCBTa1JlY3QmIGltYWdlT3BhcXVlUmVj
dCk7Ci0KLSAgICBlbnVtIERyYXdUeXBlIHsKLSAgICAgICAgRmlsbE9ubHksCi0gICAgICAgIEZp
bGxPclN0cm9rZQotICAgIH07Ci0KLSAgICB2b2lkIGRpZERyYXdSZWN0KGNvbnN0IFBsYXRmb3Jt
Q29udGV4dFNraWEqLCBjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50JiwgY29uc3QgU2tCaXRt
YXAqIHNvdXJjZUJpdG1hcCk7Ci0gICAgdm9pZCBkaWREcmF3UGF0aChjb25zdCBQbGF0Zm9ybUNv
bnRleHRTa2lhKiwgY29uc3QgU2tQYXRoJiwgY29uc3QgU2tQYWludCYpOwotICAgIHZvaWQgZGlk
RHJhd1BvaW50cyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgU2tDYW52YXM6OlBvaW50TW9k
ZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludFtdLCBjb25zdCBTa1BhaW50Jik7Ci0gICAg
dm9pZCBkaWREcmF3Qm91bmRlZChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tS
ZWN0JiwgY29uc3QgU2tQYWludCYpOwotICAgIHZvaWQgZGlkRHJhd1VuYm91bmRlZChjb25zdCBQ
bGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tQYWludCYsIERyYXdUeXBlKTsKLQotICAgIHN0
cnVjdCBDYW52YXNMYXllclN0YXRlIHsKLSAgICAgICAgQ2FudmFzTGF5ZXJTdGF0ZSgpCi0gICAg
ICAgICAgICA6IGhhc0ltYWdlTWFzayhmYWxzZSkKLSAgICAgICAgICAgICwgb3BhcXVlUmVjdChT
a1JlY3Q6Ok1ha2VFbXB0eSgpKQotICAgICAgICB7IH0KLQotICAgICAgICBTa1BhaW50IHBhaW50
OwotCi0gICAgICAgIC8vIEFuIGltYWdlIG1hc2sgaXMgYmVpbmcgYXBwbGllZCB0byB0aGUgbGF5
ZXIuCi0gICAgICAgIGJvb2wgaGFzSW1hZ2VNYXNrOwotICAgICAgICAvLyBUaGUgb3BhcXVlIGFy
ZWEgaW4gdGhlIGltYWdlIG1hc2suCi0gICAgICAgIFNrUmVjdCBpbWFnZU9wYXF1ZVJlY3Q7Ci0K
LSAgICAgICAgU2tSZWN0IG9wYXF1ZVJlY3Q7Ci0gICAgfTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IGRpZERyYXcoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUmVjdCYsIGNvbnN0
IFNrUGFpbnQmLCBjb25zdCBTa0JpdG1hcCogc291cmNlQml0bWFwLCBib29sIGZpbGxzQm91bmRz
LCBEcmF3VHlwZSk7Ci0gICAgdm9pZCBhcHBseU9wYXF1ZVJlZ2lvbkZyb21MYXllcihjb25zdCBQ
bGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tSZWN0JiBsYXllck9wYXF1ZVJlY3QsIGNvbnN0
IFNrUGFpbnQmKTsKLSAgICB2b2lkIG1hcmtSZWN0QXNPcGFxdWUoY29uc3QgU2tSZWN0Jik7Ci0g
ICAgdm9pZCBtYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYpOwotICAgIHZvaWQgbWFy
a0FsbEFzTm9uT3BhcXVlKCk7Ci0KLSAgICBTa1JlY3QmIGN1cnJlbnRUcmFja2luZ09wYXF1ZVJl
Y3QoKTsKLQotICAgIFNrUmVjdCBtX29wYXF1ZVJlY3Q7Ci0KLSAgICBWZWN0b3I8Q2FudmFzTGF5
ZXJTdGF0ZSwgMz4gbV9jYW52YXNMYXllclN0YWNrOwotfTsKLQotfQotI2VuZGlmIC8vIE9wYXF1
ZVJlZ2lvblNraWFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QYXRoU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BhdGhTa2lhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc1ODc1MjVk
MWJiZGY5OTBjOTNjNjE0YjU0YTViODAxYjk1NTcwZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BhdGhTa2lhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMyArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
Ci0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vIAotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRp
c3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8gCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNp
bmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKLQotI2luY2x1ZGUgIlNrUGF0aC5oIgotI2lu
Y2x1ZGUgIlNrUmVnaW9uLmgiCi0jaW5jbHVkZSAiU2tpYVV0aWxzLmgiCi0KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhdGg6OlBhdGgoKQot
ICAgIDogbV9wYXRoKDApCi17Ci19Ci0KLVBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCi17
Ci0gICAgbV9wYXRoID0gb3RoZXIubV9wYXRoID8gbmV3IFNrUGF0aCgqb3RoZXIubV9wYXRoKSA6
IDA7Ci19Ci0KLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQotUGF0aDo6UGF0aChjb25zdCBTa1Bh
dGgmIHBhdGgpCi17Ci0gICAgbV9wYXRoID0gbmV3IFNrUGF0aChwYXRoKTsKLX0KLSNlbmRpZgot
Ci1QYXRoOjp+UGF0aCgpCi17Ci0gICAgaWYgKG1fcGF0aCkKLSAgICAgICAgZGVsZXRlIG1fcGF0
aDsKLX0KLQotUGxhdGZvcm1QYXRoUHRyIFBhdGg6OmVuc3VyZVBsYXRmb3JtUGF0aCgpCi17Ci0g
ICAgaWYgKCFtX3BhdGgpCi0gICAgICAgIG1fcGF0aCA9IG5ldyBTa1BhdGgoKTsKLSAgICByZXR1
cm4gbV9wYXRoOwotfQotCi1QYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIp
Ci17Ci0gICAgaWYgKG90aGVyLmlzTnVsbCgpKSB7Ci0gICAgICAgIGlmIChtX3BhdGgpCi0gICAg
ICAgICAgICBkZWxldGUgbV9wYXRoOwotICAgICAgICBtX3BhdGggPSAwOwotICAgIH0gZWxzZQot
ICAgICAgICAqZW5zdXJlUGxhdGZvcm1QYXRoKCkgPSAqb3RoZXIubV9wYXRoOwotICAgIHJldHVy
biAqdGhpczsKLX0KLQotYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
aXNOdWxsKCkgfHwgbV9wYXRoLT5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgUGF0aDo6aGFzQ3VycmVu
dFBvaW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWlzTnVsbCgpICYmIG1fcGF0aC0+Z2V0UG9p
bnRzKDAsIDApOwotfQotCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0IAot
ewotICAgIGlmICghaXNOdWxsKCkgJiYgbV9wYXRoLT5jb3VudFBvaW50cygpID4gMCkgewotICAg
ICAgICBTa1BvaW50IHNrUmVzdWx0OwotICAgICAgICBtX3BhdGgtPmdldExhc3RQdCgmc2tSZXN1
bHQpOwotICAgICAgICBGbG9hdFBvaW50IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LnNldFgoU2tT
Y2FsYXJUb0Zsb2F0KHNrUmVzdWx0LmZYKSk7Ci0gICAgICAgIHJlc3VsdC5zZXRZKFNrU2NhbGFy
VG9GbG9hdChza1Jlc3VsdC5mWSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQot
ICAgIC8vIEZJWE1FOiBXaHkgZG9lcyB0aGlzIHJldHVybiBxdWlldE5hTj8gT3RoZXIgcG9ydHMg
cmV0dXJuIDAsMC4KLSAgICBmbG9hdCBxdWlldE5hTiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjpxdWlldF9OYU4oKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludChxdWlldE5hTiwgcXVpZXRO
YU4pOwotfQotCi1ib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBX
aW5kUnVsZSBydWxlKSBjb25zdAotewotICAgIGlmIChpc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBTa1BhdGhDb250YWluc1BvaW50KG1fcGF0aCwgcG9pbnQsIHJ1
bGUgPT0gUlVMRV9OT05aRVJPID8gU2tQYXRoOjprV2luZGluZ19GaWxsVHlwZSA6IFNrUGF0aDo6
a0V2ZW5PZGRfRmlsbFR5cGUpOwotfQotCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCi17Ci0gICAgZW5zdXJlUGxhdGZvcm1QYXRoKCktPm9mZnNldChXZWJDb3Jl
RmxvYXRUb1NrU2NhbGFyKHNpemUud2lkdGgoKSksIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoc2l6
ZS5oZWlnaHQoKSkpOwotfQotCi1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QK
LXsKLSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLSAgICBy
ZXR1cm4gbV9wYXRoLT5nZXRCb3VuZHMoKTsKLX0KLQotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgZW5zdXJlUGxhdGZvcm1QYXRoKCktPm1vdmVUbyhw
b2ludCk7Ci19Ci0KLXZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQotewotICAgIGVuc3VyZVBsYXRmb3JtUGF0aCgpLT5saW5lVG8ocG9pbnQpOwotfQotCi12b2lk
IFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBv
aW50JiBlcCkKLXsKLSAgICBlbnN1cmVQbGF0Zm9ybVBhdGgoKS0+cXVhZFRvKGNwLCBlcCk7Ci19
Ci0KLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29u
c3QgRmxvYXRQb2ludCYgcDIsIGNvbnN0IEZsb2F0UG9pbnQmIGVwKQotewotICAgIGVuc3VyZVBs
YXRmb3JtUGF0aCgpLT5jdWJpY1RvKHAxLCBwMiwgZXApOwotfQotCi12b2lkIFBhdGg6OmFkZEFy
Y1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFk
aXVzKQotewotICAgIGVuc3VyZVBsYXRmb3JtUGF0aCgpLT5hcmNUbyhwMSwgcDIsIFdlYkNvcmVG
bG9hdFRvU2tTY2FsYXIocmFkaXVzKSk7Ci19Ci0KLXZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkK
LXsKLSAgICBlbnN1cmVQbGF0Zm9ybVBhdGgoKS0+Y2xvc2UoKTsKLX0KLQotdm9pZCBQYXRoOjph
ZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2EsIGZsb2F0IGVhLCBi
b29sIGFudGljbG9ja3dpc2UpCi17Ci0gICAgZW5zdXJlUGxhdGZvcm1QYXRoKCk7IC8vIE1ha2Ug
c3VyZSBtX3BhdGggaXMgbm90IG51bGwuCi0KLSAgICBTa1NjYWxhciBjeCA9IFdlYkNvcmVGbG9h
dFRvU2tTY2FsYXIocC54KCkpOwotICAgIFNrU2NhbGFyIGN5ID0gV2ViQ29yZUZsb2F0VG9Ta1Nj
YWxhcihwLnkoKSk7Ci0gICAgU2tTY2FsYXIgcmFkaXVzID0gV2ViQ29yZUZsb2F0VG9Ta1NjYWxh
cihyKTsKLSAgICBTa1NjYWxhciBzMzYwID0gU2tJbnRUb1NjYWxhcigzNjApOwotCi0gICAgU2tS
ZWN0IG92YWw7Ci0gICAgb3ZhbC5zZXQoY3ggLSByYWRpdXMsIGN5IC0gcmFkaXVzLCBjeCArIHJh
ZGl1cywgY3kgKyByYWRpdXMpOwotCi0gICAgZmxvYXQgc3dlZXAgPSBlYSAtIHNhOwotICAgIFNr
U2NhbGFyIHN0YXJ0RGVncmVlcyA9IFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoc2EgKiAxODAgLyBw
aUZsb2F0KTsKLSAgICBTa1NjYWxhciBzd2VlcERlZ3JlZXMgPSBXZWJDb3JlRmxvYXRUb1NrU2Nh
bGFyKHN3ZWVwICogMTgwIC8gcGlGbG9hdCk7Ci0gICAgLy8gQ2hlY2sgZm9yIGEgY2lyY2xlLgot
ICAgIGlmIChzd2VlcERlZ3JlZXMgPj0gczM2MCB8fCBzd2VlcERlZ3JlZXMgPD0gLXMzNjApIHsK
LSAgICAgICAgLy8gTW92ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gKDAgc3dlZXAgbWVhbnMgd2Ug
YWRkIGEgc2luZ2xlIHBvaW50KS4KLSAgICAgICAgbV9wYXRoLT5hcmNUbyhvdmFsLCBzdGFydERl
Z3JlZXMsIDAsIGZhbHNlKTsKLSAgICAgICAgLy8gRHJhdyB0aGUgY2lyY2xlLgotICAgICAgICBt
X3BhdGgtPmFkZE92YWwob3ZhbCwgYW50aWNsb2Nrd2lzZSA/Ci0gICAgICAgICAgICBTa1BhdGg6
OmtDQ1dfRGlyZWN0aW9uIDogU2tQYXRoOjprQ1dfRGlyZWN0aW9uKTsKLSAgICAgICAgLy8gRm9y
Y2UgYSBtb3ZlVG8gdGhlIGVuZCBwb3NpdGlvbi4KLSAgICAgICAgbV9wYXRoLT5hcmNUbyhvdmFs
LCBzdGFydERlZ3JlZXMgKyBzd2VlcERlZ3JlZXMsIDAsIHRydWUpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIENvdW50ZXJjbG9ja3dpc2UgYXJjcyBzaG91bGQgYmUgZHJhd24gd2l0aCBuZWdh
dGl2ZSBzd2VlcHMsIHdoaWxlCi0gICAgICAgIC8vIGNsb2Nrd2lzZSBhcmNzIHNob3VsZCBiZSBk
cmF3biB3aXRoIHBvc2l0aXZlIHN3ZWVwcy4gQ2hlY2sgdG8gc2VlCi0gICAgICAgIC8vIGlmIHRo
ZSBzaXR1YXRpb24gaXMgcmV2ZXJzZWQgYW5kIGNvcnJlY3QgaXQgYnkgYWRkaW5nIG9yIHN1YnRy
YWN0aW5nCi0gICAgICAgIC8vIGEgZnVsbCBjaXJjbGUKLSAgICAgICAgaWYgKGFudGljbG9ja3dp
c2UgJiYgc3dlZXBEZWdyZWVzID4gMCkgewotICAgICAgICAgICAgc3dlZXBEZWdyZWVzIC09IHMz
NjA7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWFudGljbG9ja3dpc2UgJiYgc3dlZXBEZWdyZWVzIDwg
MCkgewotICAgICAgICAgICAgc3dlZXBEZWdyZWVzICs9IHMzNjA7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtX3BhdGgtPmFyY1RvKG92YWwsIHN0YXJ0RGVncmVlcywgc3dlZXBEZWdyZWVzLCBmYWxz
ZSk7Ci0gICAgfQotfQotCi12b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIGVuc3VyZVBsYXRmb3JtUGF0aCgpLT5hZGRSZWN0KHJlY3QpOwotfQotCi12b2lk
IFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGVuc3VyZVBs
YXRmb3JtUGF0aCgpLT5hZGRPdmFsKHJlY3QpOwotfQotCi12b2lkIFBhdGg6OmNsZWFyKCkKLXsK
LSAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3BhdGgtPnJlc2V0KCk7
Ci19Ci0KLXN0YXRpYyBGbG9hdFBvaW50KiBjb252ZXJ0UGF0aFBvaW50cyhGbG9hdFBvaW50IGRz
dFtdLCBjb25zdCBTa1BvaW50IHNyY1tdLCBpbnQgY291bnQpCi17Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIGRzdFtpXS5zZXRYKFNrU2NhbGFyVG9GbG9h
dChzcmNbaV0uZlgpKTsKLSAgICAgICAgZHN0W2ldLnNldFkoU2tTY2FsYXJUb0Zsb2F0KHNyY1tp
XS5mWSkpOwotICAgIH0KLSAgICByZXR1cm4gZHN0OwotfQotCi12b2lkIFBhdGg6OmFwcGx5KHZv
aWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgaWYg
KGlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTa1BhdGg6OlJhd0l0ZXIgaXRlcigq
bV9wYXRoKTsKLSAgICBTa1BvaW50IHB0c1s0XTsKLSAgICBQYXRoRWxlbWVudCBwYXRoRWxlbWVu
dDsKLSAgICBGbG9hdFBvaW50IHBhdGhQb2ludHNbM107Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgIHN3aXRjaCAoaXRlci5uZXh0KHB0cykpIHsKLSAgICAgICAgY2FzZSBTa1BhdGg6OmtNb3Zl
X1ZlcmI6Ci0gICAgICAgICAgICBwYXRoRWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRNb3ZlVG9Q
b2ludDsKLSAgICAgICAgICAgIHBhdGhFbGVtZW50LnBvaW50cyA9IGNvbnZlcnRQYXRoUG9pbnRz
KHBhdGhQb2ludHMsICZwdHNbMF0sIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgU2tQYXRoOjprTGluZV9WZXJiOgotICAgICAgICAgICAgcGF0aEVsZW1lbnQudHlwZSA9IFBh
dGhFbGVtZW50QWRkTGluZVRvUG9pbnQ7Ci0gICAgICAgICAgICBwYXRoRWxlbWVudC5wb2ludHMg
PSBjb252ZXJ0UGF0aFBvaW50cyhwYXRoUG9pbnRzLCAmcHRzWzFdLCAxKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFNrUGF0aDo6a1F1YWRfVmVyYjoKLSAgICAgICAgICAgIHBh
dGhFbGVtZW50LnR5cGUgPSBQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ7Ci0gICAgICAg
ICAgICBwYXRoRWxlbWVudC5wb2ludHMgPSBjb252ZXJ0UGF0aFBvaW50cyhwYXRoUG9pbnRzLCAm
cHRzWzFdLCAyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNrUGF0aDo6a0N1
YmljX1ZlcmI6Ci0gICAgICAgICAgICBwYXRoRWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRBZGRD
dXJ2ZVRvUG9pbnQ7Ci0gICAgICAgICAgICBwYXRoRWxlbWVudC5wb2ludHMgPSBjb252ZXJ0UGF0
aFBvaW50cyhwYXRoUG9pbnRzLCAmcHRzWzFdLCAzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFNrUGF0aDo6a0Nsb3NlX1ZlcmI6Ci0gICAgICAgICAgICBwYXRoRWxlbWVudC50
eXBlID0gUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg7Ci0gICAgICAgICAgICBwYXRoRWxlbWVudC5w
b2ludHMgPSBjb252ZXJ0UGF0aFBvaW50cyhwYXRoUG9pbnRzLCAwLCAwKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFNrUGF0aDo6a0RvbmVfVmVyYjoKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbihpbmZvLCAmcGF0aEVsZW1lbnQpOwot
ICAgIH0KLX0KLQotdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB4
Zm9ybSkKLXsKLSAgICBlbnN1cmVQbGF0Zm9ybVBhdGgoKS0+dHJhbnNmb3JtKHhmb3JtKTsKLX0K
LQotRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIq
IGFwcGxpZXIpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gRmxv
YXRSZWN0KCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIHNjcmF0Y2ggPSBzY3JhdGNoQ29udGV4
dCgpOwotICAgIHNjcmF0Y2gtPnNhdmUoKTsKLQotICAgIGlmIChhcHBsaWVyKQotICAgICAgICBh
cHBsaWVyLT5zdHJva2VTdHlsZShzY3JhdGNoKTsKLQotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAg
c2NyYXRjaC0+cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQs
IDAsIDApOwotICAgIFNrUGF0aCBib3VuZGluZ1BhdGg7Ci0gICAgcGFpbnQuZ2V0RmlsbFBhdGgo
KnBsYXRmb3JtUGF0aCgpLCAmYm91bmRpbmdQYXRoKTsKLQotICAgIEZsb2F0UmVjdCByID0gYm91
bmRpbmdQYXRoLmdldEJvdW5kcygpOwotICAgIHNjcmF0Y2gtPnJlc3RvcmUoKTsKLSAgICByZXR1
cm4gcjsKLX0KLQotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIq
IGFwcGxpZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIGlmIChpc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGFwcGxpZXIpOwotICAg
IEdyYXBoaWNzQ29udGV4dCogc2NyYXRjaCA9IHNjcmF0Y2hDb250ZXh0KCk7Ci0gICAgc2NyYXRj
aC0+c2F2ZSgpOwotCi0gICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoc2NyYXRjaCk7Ci0KLSAgICBT
a1BhaW50IHBhaW50OwotICAgIHNjcmF0Y2gtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50
Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsKLSAgICBTa1BhdGggc3Ryb2tlUGF0aDsKLSAgICBw
YWludC5nZXRGaWxsUGF0aCgqcGxhdGZvcm1QYXRoKCksICZzdHJva2VQYXRoKTsKLSAgICBib29s
IGNvbnRhaW5zID0gU2tQYXRoQ29udGFpbnNQb2ludCgmc3Ryb2tlUGF0aCwgcG9pbnQsIFNrUGF0
aDo6a1dpbmRpbmdfRmlsbFR5cGUpOwotCi0gICAgc2NyYXRjaC0+cmVzdG9yZSgpOwotICAgIHJl
dHVybiBjb250YWluczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXR0ZXJuU2tpYS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRjYmIzZGI3MTRmYmZjMTM3Y2YzOWU2MTY3ZDA2
NGQ5NGVmMWNlNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BhdHRlcm5Ta2lhLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlBhdHRlcm4uaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCi0KLSNpbmNsdWRl
ICJTa0NhbnZhcy5oIgotI2luY2x1ZGUgIlNrQ29sb3IuaCIKLSNpbmNsdWRlICJTa0NvbG9yU2hh
ZGVyLmgiCi0jaW5jbHVkZSAiU2tTaGFkZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFBhdHRlcm46OnBsYXRmb3JtRGVzdHJveSgpCi17
Ci0gICAgU2tTYWZlVW5yZWYobV9wYXR0ZXJuKTsKLSAgICBtX3BhdHRlcm4gPSAwOwotICAgIGlm
IChtX2V4dGVybmFsTWVtb3J5QWxsb2NhdGVkKQotICAgICAgICBtX2V4dGVybmFsTWVtb3J5QWxs
b2NhdGVkID0gMDsKLX0KLQotUGxhdGZvcm1QYXR0ZXJuUHRyIFBhdHRlcm46OnBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0pCi17Ci0gICAgaWYg
KG1fcGF0dGVybikKLSAgICAgICAgcmV0dXJuIG1fcGF0dGVybjsKLQotICAgIC8vIE5vdGU6IHBh
dHRlcm5UcmFuc2Zvcm0gaXMgaWdub3JlZCBzaW5jZSBpdCBzZWVtcyB0byBiZSBhcHBsaWVkIGVs
c2V3aGVyZQotICAgIC8vICh3aGVuIHRoZSBwYXR0ZXJuIGlzIHVzZWQ/KS4gQXBwbHlpbmcgaXQg
dG8gdGhlIHBhdHRlcm4gKGkuZS4KLSAgICAvLyBzaGFkZXItPnNldExvY2FsTWF0cml4KSByZXN1
bHRzIGluIGEgZG91YmxlIHRyYW5zZm9ybWF0aW9uLiBUaGlzIGNhbiBiZQotICAgIC8vIHNlZW4s
IGZvciBpbnN0YW5jZSwgYXMgYW4gZXh0cmEgb2Zmc2V0IGluOgotICAgIC8vIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3BhdHRlcm5maWxsLXJlcGVhdC5odG1sCi0gICAgLy8gYW5kIGV4cGFuZGVk
IHNjYWxlIGFuZCBza2V3IGluOgotICAgIC8vIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9w
c2VydmVycy1ncmFkLTA2LWIuc3ZnCi0KLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2VTa2lhPiBpbWFn
ZSA9IG1fdGlsZUltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIC8vIElm
IHdlIGRvbid0IGhhdmUgYSBiaXRtYXAsIHJldHVybiBhIHRyYW5zcGFyZW50IHNoYWRlci4KLSAg
ICBpZiAoIWltYWdlKQotICAgICAgICBtX3BhdHRlcm4gPSBuZXcgU2tDb2xvclNoYWRlcihTa0Nv
bG9yU2V0QVJHQigwLCAwLCAwLCAwKSk7Ci0KLSAgICBlbHNlIGlmIChtX3JlcGVhdFggJiYgbV9y
ZXBlYXRZKQotICAgICAgICBtX3BhdHRlcm4gPSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVy
KGltYWdlLT5iaXRtYXAoKSwgU2tTaGFkZXI6OmtSZXBlYXRfVGlsZU1vZGUsIFNrU2hhZGVyOjpr
UmVwZWF0X1RpbGVNb2RlKTsKLQotICAgIGVsc2UgewotCi0gICAgICAgIC8vIFNraWEgZG9lcyBu
b3QgaGF2ZSBhICJkcmF3IHRoZSB0aWxlIG9ubHkgb25jZSIgb3B0aW9uLiBDbGFtcF9UaWxlTW9k
ZQotICAgICAgICAvLyByZXBlYXRzIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGltYWdlIGFmdGVyIGRy
YXdpbmcgb25lIHRpbGUuIFRvIGF2b2lkCi0gICAgICAgIC8vIGZpbGxpbmcgdGhlIHNwYWNlIHdp
dGggYXJiaXRyYXJ5IHBpeGVscywgdGhpcyB3b3JrYXJvdW5kIGZvcmNlcyB0aGUKLSAgICAgICAg
Ly8gaW1hZ2UgdG8gaGF2ZSBhIGxpbmUgb2YgdHJhbnNwYXJlbnQgcGl4ZWxzIG9uIHRoZSAicmVw
ZWF0ZWQiIGVkZ2UocyksCi0gICAgICAgIC8vIHRodXMgY2F1c2luZyBleHRyYSBzcGFjZSB0byBi
ZSB0cmFuc3BhcmVudCBmaWxsZWQuCi0gICAgICAgIFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlTW9k
ZVggPSBtX3JlcGVhdFggPyBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSA6IFNrU2hhZGVyOjpr
Q2xhbXBfVGlsZU1vZGU7Ci0gICAgICAgIFNrU2hhZGVyOjpUaWxlTW9kZSB0aWxlTW9kZVkgPSBt
X3JlcGVhdFkgPyBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSA6IFNrU2hhZGVyOjprQ2xhbXBf
VGlsZU1vZGU7Ci0gICAgICAgIGludCBleHBhbmRXID0gbV9yZXBlYXRYID8gMCA6IDE7Ci0gICAg
ICAgIGludCBleHBhbmRIID0gbV9yZXBlYXRZID8gMCA6IDE7Ci0KLSAgICAgICAgLy8gQ3JlYXRl
IGEgdHJhbnNwYXJlbnQgYml0bWFwIDEgcGl4ZWwgd2lkZXIgYW5kL29yIHRhbGxlciB0aGFuIHRo
ZQotICAgICAgICAvLyBvcmlnaW5hbCwgdGhlbiBjb3B5IHRoZSBvcmlnbmFsIGludG8gaXQuCi0g
ICAgICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gcGFkIChub3Qgc2NhbGUp
IGFuIGltYWdlIGluIHNraWE/Ci0gICAgICAgIFNrQml0bWFwIGJtMjsKLSAgICAgICAgYm0yLnNl
dENvbmZpZyhpbWFnZS0+Yml0bWFwKCkuY29uZmlnKCksIGltYWdlLT5iaXRtYXAoKS53aWR0aCgp
ICsgZXhwYW5kVywgaW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpICsgZXhwYW5kSCk7Ci0gICAgICAg
IGJtMi5hbGxvY1BpeGVscygpOwotICAgICAgICBibTIuZXJhc2VBUkdCKDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDApOwotICAgICAgICBTa0NhbnZhcyBjYW52YXMoYm0yKTsKLSAgICAgICAgY2FudmFz
LmRyYXdCaXRtYXAoaW1hZ2UtPmJpdG1hcCgpLCAwLCAwKTsKLSAgICAgICAgYm0yLnNldEltbXV0
YWJsZSgpOwotICAgICAgICBtX3BhdHRlcm4gPSBTa1NoYWRlcjo6Q3JlYXRlQml0bWFwU2hhZGVy
KGJtMiwgdGlsZU1vZGVYLCB0aWxlTW9kZVkpOwotCi0gICAgICAgIC8vIENsYW1wIHRvIGludCwg
c2luY2UgdGhhdCdzIHdoYXQgdGhlIGFkanVzdCBmdW5jdGlvbiB0YWtlcy4KLSAgICAgICAgbV9l
eHRlcm5hbE1lbW9yeUFsbG9jYXRlZCA9IHN0YXRpY19jYXN0PGludD4obWluKHN0YXRpY19jYXN0
PHNpemVfdD4oSU5UX01BWCksIGJtMi5nZXRTYWZlU2l6ZSgpKSk7Ci0gICAgfQotICAgIG1fcGF0
dGVybi0+c2V0TG9jYWxNYXRyaXgobV9wYXR0ZXJuU3BhY2VUcmFuc2Zvcm1hdGlvbik7Ci0gICAg
cmV0dXJuIG1fcGF0dGVybjsKLX0KLQotdm9pZCBQYXR0ZXJuOjpzZXRQbGF0Zm9ybVBhdHRlcm5T
cGFjZVRyYW5zZm9ybSgpCi17Ci0gICAgaWYgKG1fcGF0dGVybikKLSAgICAgICAgbV9wYXR0ZXJu
LT5zZXRMb2NhbE1hdHJpeChtX3BhdHRlcm5TcGFjZVRyYW5zZm9ybWF0aW9uKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDZiYjg4MmFkOWFlOWEwODQ3MzVmNzI5YTFiN2ExMTI1NmRhN2Ji
NzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDYyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVNr
aWEuaCIKLSNpbmNsdWRlICJTa2lhVXRpbHMuaCIKLSNpbmNsdWRlICJUZXh0dXJlLmgiCi0jaW5j
bHVkZSAiVGlsaW5nRGF0YS5oIgotCi0jaW5jbHVkZSAic2tpYS9leHQvaW1hZ2Vfb3BlcmF0aW9u
cy5oIgotI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgotCi0jaW5jbHVkZSAi
U2tCaXRtYXAuaCIKLSNpbmNsdWRlICJTa0NvbG9yUHJpdi5oIgotI2luY2x1ZGUgIlNrRGFzaFBh
dGhFZmZlY3QuaCIKLSNpbmNsdWRlICJTa1NoYWRlci5oIgotCi0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiBQTEFURk9STShDSFJPTUlV
TSkKLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdHJ1Y3QgUGxhdGZvcm1Db250ZXh0U2tpYTo6RGVmZXJyZWRTYXZlU3RhdGUgewotICAg
IERlZmVycmVkU2F2ZVN0YXRlKHVuc2lnbmVkIG1hc2ssIGludCBjb3VudCkgOiBtX2ZsYWdzKG1h
c2spLCBtX3Jlc3RvcmVDb3VudChjb3VudCkgeyB9Ci0KLSAgICB1bnNpZ25lZCBtX2ZsYWdzOwot
ICAgIGludCBtX3Jlc3RvcmVDb3VudDsKLX07Ci0KLS8vIFN0YXRlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LS8vIEVuY2Fwc3VsYXRlcyB0aGUgYWRkaXRpb25hbCBwYWludGluZyBzdGF0ZSBpbmZvcm1hdGlv
biB3ZSBzdG9yZSBmb3IgZWFjaAotLy8gcHVzaGVkIGdyYXBoaWNzIHN0YXRlLgotc3RydWN0IFBs
YXRmb3JtQ29udGV4dFNraWE6OlN0YXRlIHsKLSAgICBTdGF0ZSgpOwotICAgIFN0YXRlKGNvbnN0
IFN0YXRlJik7Ci0gICAgflN0YXRlKCk7Ci0KLSAgICAvLyBDb21tb24gc2hhZGVyIHN0YXRlLgot
ICAgIGZsb2F0IG1fYWxwaGE7Ci0gICAgU2tYZmVybW9kZTo6TW9kZSBtX3hmZXJNb2RlOwotICAg
IGJvb2wgbV91c2VBbnRpYWxpYXNpbmc7Ci0gICAgU2tEcmF3TG9vcGVyKiBtX2xvb3BlcjsKLQot
ICAgIC8vIEZpbGwuCi0gICAgU2tDb2xvciBtX2ZpbGxDb2xvcjsKLQotICAgIC8vIFN0cm9rZS4K
LSAgICBTdHJva2VTdHlsZSBtX3N0cm9rZVN0eWxlOwotICAgIFNrQ29sb3IgbV9zdHJva2VDb2xv
cjsKLSAgICBmbG9hdCBtX3N0cm9rZVRoaWNrbmVzczsKLSAgICBpbnQgbV9kYXNoUmF0aW87ICAv
LyBSYXRpbyBvZiB0aGUgbGVuZ3RoIG9mIGEgZGFzaCB0byBpdHMgd2lkdGguCi0gICAgZmxvYXQg
bV9taXRlckxpbWl0OwotICAgIFNrUGFpbnQ6OkNhcCBtX2xpbmVDYXA7Ci0gICAgU2tQYWludDo6
Sm9pbiBtX2xpbmVKb2luOwotICAgIFNrRGFzaFBhdGhFZmZlY3QqIG1fZGFzaDsKLQotICAgIC8v
IFRleHQuIChTZWUgVGV4dE1vZGVGaWxsICYgZnJpZW5kcyBpbiBHcmFwaGljc0NvbnRleHQuaC4p
Ci0gICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgbV90ZXh0RHJhd2luZ01vZGU7Ci0KLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gZm9yIGFwcGx5aW5nIHRoZSBzdGF0ZSdzIGFscGhhIHZhbHVlIHRvIHRo
ZSBnaXZlbiBpbnB1dAotICAgIC8vIGNvbG9yIHRvIHByb2R1Y2UgYSBuZXcgb3V0cHV0IGNvbG9y
LgotICAgIFNrQ29sb3IgYXBwbHlBbHBoYShTa0NvbG9yKSBjb25zdDsKLQotICAgIC8vIElmIG5v
bi1lbXB0eSwgdGhlIGN1cnJlbnQgU3RhdGUgaXMgY2xpcHBlZCB0byB0aGlzIGltYWdlLgotICAg
IFNrQml0bWFwIG1faW1hZ2VCdWZmZXJDbGlwOwotICAgIC8vIElmIG1faW1hZ2VCdWZmZXJDbGlw
IGlzIG5vbi1lbXB0eSwgdGhpcyBpcyB0aGUgcmVnaW9uIHRoZSBpbWFnZSBpcyBjbGlwcGVkIHRv
LgotICAgIFNrUmVjdCBtX2NsaXA7Ci0KLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVy
cG9sYXRpb25RdWFsaXR5OwotCi0gICAgUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGUgY2xvbmVJ
bmhlcml0ZWRQcm9wZXJ0aWVzKCk7Ci1wcml2YXRlOgotICAgIC8vIE5vdCBzdXBwb3J0ZWQuCi0g
ICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgU3RhdGUmKTsKLX07Ci0KLS8vIE5vdGU6IEtlZXAgdGhl
c2VzIGRlZmF1bHQgdmFsdWVzIGluIHN5bmMgd2l0aCBHcmFwaGljc0NvbnRleHRTdGF0ZS4KLVBs
YXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjpTdGF0ZSgpCi0gICAgOiBtX2FscGhhKDEpCi0gICAg
LCBtX3hmZXJNb2RlKFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpCi0gICAgLCBtX3VzZUFudGlh
bGlhc2luZyh0cnVlKQotICAgICwgbV9sb29wZXIoMCkKLSAgICAsIG1fZmlsbENvbG9yKDB4RkYw
MDAwMDApCi0gICAgLCBtX3N0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKQotICAgICwgbV9zdHJva2VD
b2xvcihDb2xvcjo6YmxhY2spCi0gICAgLCBtX3N0cm9rZVRoaWNrbmVzcygwKQotICAgICwgbV9k
YXNoUmF0aW8oMykKLSAgICAsIG1fbWl0ZXJMaW1pdCg0KQotICAgICwgbV9saW5lQ2FwKFNrUGFp
bnQ6OmtEZWZhdWx0X0NhcCkKLSAgICAsIG1fbGluZUpvaW4oU2tQYWludDo6a0RlZmF1bHRfSm9p
bikKLSAgICAsIG1fZGFzaCgwKQotICAgICwgbV90ZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVGaWxs
KQotI2lmIFVTRShMT1dfUVVBTElUWV9JTUFHRV9JTlRFUlBPTEFUSU9OKQotICAgICwgbV9pbnRl
cnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTG93KQotI2Vsc2UKLSAgICAsIG1faW50ZXJw
b2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbkhpZ2gpCi0jZW5kaWYKLXsKLX0KLQotUGxhdGZv
cm1Db250ZXh0U2tpYTo6U3RhdGU6OlN0YXRlKGNvbnN0IFN0YXRlJiBvdGhlcikKLSAgICA6IG1f
YWxwaGEob3RoZXIubV9hbHBoYSkKLSAgICAsIG1feGZlck1vZGUob3RoZXIubV94ZmVyTW9kZSkK
LSAgICAsIG1fdXNlQW50aWFsaWFzaW5nKG90aGVyLm1fdXNlQW50aWFsaWFzaW5nKQotICAgICwg
bV9sb29wZXIob3RoZXIubV9sb29wZXIpCi0gICAgLCBtX2ZpbGxDb2xvcihvdGhlci5tX2ZpbGxD
b2xvcikKLSAgICAsIG1fc3Ryb2tlU3R5bGUob3RoZXIubV9zdHJva2VTdHlsZSkKLSAgICAsIG1f
c3Ryb2tlQ29sb3Iob3RoZXIubV9zdHJva2VDb2xvcikKLSAgICAsIG1fc3Ryb2tlVGhpY2tuZXNz
KG90aGVyLm1fc3Ryb2tlVGhpY2tuZXNzKQotICAgICwgbV9kYXNoUmF0aW8ob3RoZXIubV9kYXNo
UmF0aW8pCi0gICAgLCBtX21pdGVyTGltaXQob3RoZXIubV9taXRlckxpbWl0KQotICAgICwgbV9s
aW5lQ2FwKG90aGVyLm1fbGluZUNhcCkKLSAgICAsIG1fbGluZUpvaW4ob3RoZXIubV9saW5lSm9p
bikKLSAgICAsIG1fZGFzaChvdGhlci5tX2Rhc2gpCi0gICAgLCBtX3RleHREcmF3aW5nTW9kZShv
dGhlci5tX3RleHREcmF3aW5nTW9kZSkKLSAgICAsIG1faW1hZ2VCdWZmZXJDbGlwKG90aGVyLm1f
aW1hZ2VCdWZmZXJDbGlwKQotICAgICwgbV9jbGlwKG90aGVyLm1fY2xpcCkKLSAgICAsIG1faW50
ZXJwb2xhdGlvblF1YWxpdHkob3RoZXIubV9pbnRlcnBvbGF0aW9uUXVhbGl0eSkKLXsKLSAgICAv
LyBVcCB0aGUgcmVmIGNvdW50IG9mIHRoZXNlLiBTa1NhZmVSZWYgZG9lcyBub3RoaW5nIGlmIGl0
cyBhcmd1bWVudCBpcyAwLgotICAgIFNrU2FmZVJlZihtX2xvb3Blcik7Ci0gICAgU2tTYWZlUmVm
KG1fZGFzaCk7Ci19Ci0KLVBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjp+U3RhdGUoKQotewot
ICAgIFNrU2FmZVVucmVmKG1fbG9vcGVyKTsKLSAgICBTa1NhZmVVbnJlZihtX2Rhc2gpOwotfQot
Ci0vLyBSZXR1cm5zIGEgbmV3IFN0YXRlIHdpdGggYWxsIG9mIHRoaXMgb2JqZWN0J3MgaW5oZXJp
dGVkIHByb3BlcnRpZXMgY29waWVkLgotUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGUgUGxhdGZv
cm1Db250ZXh0U2tpYTo6U3RhdGU6OmNsb25lSW5oZXJpdGVkUHJvcGVydGllcygpCi17Ci0gICAg
cmV0dXJuIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlKCp0aGlzKTsKLX0KLQotU2tDb2xvciBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZTo6YXBwbHlBbHBoYShTa0NvbG9yIGMpIGNvbnN0Ci17
Ci0gICAgaW50IHMgPSByb3VuZGYobV9hbHBoYSAqIDI1Nik7Ci0gICAgaWYgKHMgPj0gMjU2KQot
ICAgICAgICByZXR1cm4gYzsKLSAgICBpZiAocyA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgaW50IGEgPSBTa0FscGhhTXVsKFNrQ29sb3JHZXRBKGMpLCBzKTsKLSAgICByZXR1cm4gKGMg
JiAweDAwRkZGRkZGKSB8IChhIDw8IDI0KTsKLX0KLQotLy8gUGxhdGZvcm1Db250ZXh0U2tpYSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotLy8gRGFuZ2VyOiBjYW52YXMgY2FuIGJlIE5VTEwuCi1QbGF0Zm9ybUNvbnRleHRTa2lhOjpQ
bGF0Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKiBjYW52YXMpCi0gICAgOiBtX2NhbnZhcyhjYW52
YXMpCi0gICAgLCBtX2RlZmVycmVkU2F2ZUZsYWdzKDApCi0gICAgLCBtX3RyYWNrT3BhcXVlUmVn
aW9uKGZhbHNlKQotICAgICwgbV9wcmludGluZyhmYWxzZSkKLSAgICAsIG1fYWNjZWxlcmF0ZWQo
ZmFsc2UpCi0gICAgLCBtX2RlZmVycmVkKGZhbHNlKQotICAgICwgbV9kcmF3aW5nVG9JbWFnZUJ1
ZmZlcihmYWxzZSkKLSAgICAsIG1fZGV2aWNlU2NhbGVGYWN0b3IoMSkKLXsKLSAgICBtX3N0YXRl
U3RhY2suYXBwZW5kKFN0YXRlKCkpOwotICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3Qo
KTsKLQotICAgIC8vIHdpbGwgYmUgYXNzaWduZWQgaW4gc2V0R3JhcGhpY3NDb250ZXh0KCkKLSAg
ICBtX2djID0gMDsKLX0KLQotUGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4dFNr
aWEoKQotewotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyhTa0NhbnZh
cyogY2FudmFzKQotewotICAgIG1fY2FudmFzID0gY2FudmFzOwotfQotCi12b2lkIFBsYXRmb3Jt
Q29udGV4dFNraWE6OnNldERyYXdpbmdUb0ltYWdlQnVmZmVyKGJvb2wgdmFsdWUpCi17Ci0gICAg
bV9kcmF3aW5nVG9JbWFnZUJ1ZmZlciA9IHZhbHVlOwotfQotCi1Ta0RldmljZSogUGxhdGZvcm1D
b250ZXh0U2tpYTo6Y3JlYXRlQ29tcGF0aWJsZURldmljZShjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sIGhhc0FscGhhKQotewotICAgIHJldHVybiBtX2NhbnZhcy0+Y3JlYXRlQ29tcGF0aWJsZURl
dmljZShTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSwgIWhhc0FscGhhKTsKLX0KLQotYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjppc0RyYXdp
bmdUb0ltYWdlQnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kcmF3aW5nVG9JbWFnZUJ1
ZmZlcjsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzYXZlKCkKLXsKLSAgICBtX3N0
YXRlU3RhY2suYXBwZW5kKG1fc3RhdGUtPmNsb25lSW5oZXJpdGVkUHJvcGVydGllcygpKTsKLSAg
ICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7Ci0KLSAgICAvLyBUaGUgY2xpcCBpbWFn
ZSBvbmx5IG5lZWRzIHRvIGJlIGFwcGxpZWQgb25jZS4gUmVzZXQgdGhlIGltYWdlIHNvIHRoYXQg
d2UKLSAgICAvLyBkb24ndCBhdHRlbXB0IHRvIGNsaXAgbXVsdGlwbGUgdGltZXMuCi0gICAgbV9z
dGF0ZS0+bV9pbWFnZUJ1ZmZlckNsaXAucmVzZXQoKTsKLQotICAgIG1fc2F2ZVN0YXRlU3RhY2su
YXBwZW5kKERlZmVycmVkU2F2ZVN0YXRlKG1fZGVmZXJyZWRTYXZlRmxhZ3MsIG1fY2FudmFzLT5n
ZXRTYXZlQ291bnQoKSkpOwotICAgIG1fZGVmZXJyZWRTYXZlRmxhZ3MgfD0gU2tDYW52YXM6OmtN
YXRyaXhDbGlwX1NhdmVGbGFnOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNhdmVM
YXllcihjb25zdCBTa1JlY3QqIGJvdW5kcywgY29uc3QgU2tQYWludCogcGFpbnQsIFNrQ2FudmFz
OjpTYXZlRmxhZ3Mgc2F2ZUZsYWdzKQotewotICAgIHJlYWxpemVTYXZlKFNrQ2FudmFzOjprTWF0
cml4Q2xpcF9TYXZlRmxhZyk7Ci0KLSAgICBtX2NhbnZhcy0+c2F2ZUxheWVyKGJvdW5kcywgcGFp
bnQsIHNhdmVGbGFncyk7Ci0gICAgaWYgKGJvdW5kcykKLSAgICAgICAgbV9jYW52YXMtPmNsaXBS
ZWN0KCpib3VuZHMpOwotICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQotICAgICAgICBtX29w
YXF1ZVJlZ2lvbi5wdXNoQ2FudmFzTGF5ZXIocGFpbnQpOwotfQotCi12b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OnJlc3RvcmVMYXllcigpCi17Ci0gICAgbV9jYW52YXMtPnJlc3RvcmUoKTsKLSAg
ICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKLSAgICAgICAgbV9vcGFxdWVSZWdpb24ucG9wQ2Fu
dmFzTGF5ZXIodGhpcyk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6YmVnaW5MYXll
ckNsaXBwZWRUb0ltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEltYWdlQnVmZmVyKiBpbWFn
ZUJ1ZmZlcikKLXsKLSAgICBTa1JlY3QgYm91bmRzID0geyBTa0Zsb2F0VG9TY2FsYXIocmVjdC54
KCkpLCBTa0Zsb2F0VG9TY2FsYXIocmVjdC55KCkpLAotICAgICAgICAgICAgICAgICAgICAgIFNr
RmxvYXRUb1NjYWxhcihyZWN0Lm1heFgoKSksIFNrRmxvYXRUb1NjYWxhcihyZWN0Lm1heFkoKSkg
fTsKLQotICAgIGlmIChpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGNsaXBSZWN0KGJvdW5kcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBTa2lhIGRvZXNuJ3Qgc3VwcG9ydCBjbGlwcGluZyB0byBhbiBpbWFnZSwgc28gd2UgY3JlYXRl
IGEgbGF5ZXIuIFRoZSBuZXh0Ci0gICAgLy8gdGltZSByZXN0b3JlIGlzIGludm9rZWQgdGhlIGxh
eWVyIGFuZCB8aW1hZ2VCdWZmZXJ8IGFyZSBjb21iaW5lZCB0bwotICAgIC8vIGNyZWF0ZSB0aGUg
cmVzdWx0aW5nIGltYWdlLgotCi0gICAgbV9zdGF0ZS0+bV9jbGlwID0gYm91bmRzOwotICAgIC8v
IEdldCB0aGUgYWJzb2x1dGUgY29vcmRpbmF0ZXMgb2YgdGhlIHN0b3JlZCBjbGlwcGluZyByZWN0
YW5nbGUgdG8gbWFrZSBpdAotICAgIC8vIGluZGVwZW5kZW50IG9mIGFueSB0cmFuc2Zvcm0gY2hh
bmdlcy4KLSAgICBnZXRUb3RhbE1hdHJpeCgpLm1hcFJlY3QoJm1fc3RhdGUtPm1fY2xpcCk7Ci0K
LSAgICBTa0NhbnZhczo6U2F2ZUZsYWdzIHNhdmVGbGFncyA9IHN0YXRpY19jYXN0PFNrQ2FudmFz
OjpTYXZlRmxhZ3M+KFNrQ2FudmFzOjprSGFzQWxwaGFMYXllcl9TYXZlRmxhZyB8IFNrQ2FudmFz
OjprRnVsbENvbG9yTGF5ZXJfU2F2ZUZsYWcpOwotICAgIHNhdmVMYXllcigmYm91bmRzLCAwLCBz
YXZlRmxhZ3MpOwotCi0gICAgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCA9IGltYWdlQnVmZmVyLT5j
b250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKTsKLQotICAgIGlmIChtX3RyYWNr
T3BhcXVlUmVnaW9uKSB7Ci0gICAgICAgIFNrUmVjdCBvcGFxdWVSZWN0ID0gYml0bWFwLT5pc09w
YXF1ZSgpID8gbV9zdGF0ZS0+bV9jbGlwIDogU2tSZWN0OjpNYWtlRW1wdHkoKTsKLSAgICAgICAg
bV9vcGFxdWVSZWdpb24uc2V0SW1hZ2VNYXNrKG9wYXF1ZVJlY3QpOwotICAgIH0KLQotICAgIC8v
IENvcHkgb2ZmIHRoZSBpbWFnZSBhcyB8aW1hZ2VCdWZmZXJ8IG1heSBiZSBkZWxldGVkIGJlZm9y
ZSByZXN0b3JlIGlzIGludm9rZWQuCi0gICAgaWYgKGJpdG1hcC0+aXNJbW11dGFibGUoKSkKLSAg
ICAgICAgbV9zdGF0ZS0+bV9pbWFnZUJ1ZmZlckNsaXAgPSAqYml0bWFwOwotICAgIGVsc2Ugewot
ICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2UgYSBkZWVwLWNvcHkgb2YgdGhlIHBpeGVscyB0aGVt
c2VsdmVzLCBzbyB0aGV5IGRvbid0Ci0gICAgICAgIC8vIGNoYW5nZSBvbiB1cyBiZXR3ZWVuIG5v
dyBhbmQgd2hlbiB3ZSB3YW50IHRvIGFwcGx5IHRoZW0gaW4gcmVzdG9yZSgpCi0gICAgICAgIGJp
dG1hcC0+Y29weVRvKCZtX3N0YXRlLT5tX2ltYWdlQnVmZmVyQ2xpcCwgU2tCaXRtYXA6OmtBUkdC
Xzg4ODhfQ29uZmlnKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVz
dG9yZSgpCi17Ci0gICAgaWYgKCFtX3N0YXRlLT5tX2ltYWdlQnVmZmVyQ2xpcC5lbXB0eSgpKSB7
Ci0gICAgICAgIGFwcGx5Q2xpcEZyb21JbWFnZShtX3N0YXRlLT5tX2NsaXAsIG1fc3RhdGUtPm1f
aW1hZ2VCdWZmZXJDbGlwKTsKLSAgICAgICAgbV9jYW52YXMtPnJlc3RvcmUoKTsKLSAgICB9Ci0K
LSAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0
YWNrLmxhc3QoKTsKLQotICAgIERlZmVycmVkU2F2ZVN0YXRlIHNhdmVkU3RhdGUgPSBtX3NhdmVT
dGF0ZVN0YWNrLmxhc3QoKTsKLSAgICBtX3NhdmVTdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAg
ICBtX2RlZmVycmVkU2F2ZUZsYWdzID0gc2F2ZWRTdGF0ZS5tX2ZsYWdzOwotICAgIG1fY2FudmFz
LT5yZXN0b3JlVG9Db3VudChzYXZlZFN0YXRlLm1fcmVzdG9yZUNvdW50KTsKLX0KLQotdm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdChTa1JlY3QgcmVjdCkKLXsKLSAgICBTa1BhaW50
IHBhaW50OwotICAgIGludCBmaWxsY29sb3JOb3RUcmFuc3BhcmVudCA9IG1fc3RhdGUtPm1fZmls
bENvbG9yICYgMHhGRjAwMDAwMDsKLSAgICBpZiAoZmlsbGNvbG9yTm90VHJhbnNwYXJlbnQpIHsK
LSAgICAgICAgc2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKLSAgICAgICAgZHJhd1JlY3Qo
cmVjdCwgcGFpbnQpOwotICAgIH0KLQotICAgIGlmIChtX3N0YXRlLT5tX3N0cm9rZVN0eWxlICE9
IE5vU3Ryb2tlCi0gICAgICAgICYmIChtX3N0YXRlLT5tX3N0cm9rZUNvbG9yICYgMHhGRjAwMDAw
MCkpIHsKLSAgICAgICAgLy8gV2UgZG8gYSBmaWxsIG9mIGZvdXIgcmVjdHMgdG8gc2ltdWxhdGUg
dGhlIHN0cm9rZSBvZiBhIGJvcmRlci4KLSAgICAgICAgcGFpbnQucmVzZXQoKTsKLSAgICAgICAg
c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKLSAgICAgICAgLy8gbmVlZCB0byBqYW0gaW4g
dGhlIHN0cm9rZUNvbG9yCi0gICAgICAgIHBhaW50LnNldENvbG9yKHRoaXMtPmVmZmVjdGl2ZVN0
cm9rZUNvbG9yKCkpOwotCi0gICAgICAgIFNrUmVjdCB0b3BCb3JkZXIgPSB7IHJlY3QuZkxlZnQs
IHJlY3QuZlRvcCwgcmVjdC5mUmlnaHQsIHJlY3QuZlRvcCArIDEgfTsKLSAgICAgICAgZHJhd1Jl
Y3QodG9wQm9yZGVyLCBwYWludCk7Ci0gICAgICAgIFNrUmVjdCBib3R0b21Cb3JkZXIgPSB7IHJl
Y3QuZkxlZnQsIHJlY3QuZkJvdHRvbSAtIDEsIHJlY3QuZlJpZ2h0LCByZWN0LmZCb3R0b20gfTsK
LSAgICAgICAgZHJhd1JlY3QoYm90dG9tQm9yZGVyLCBwYWludCk7Ci0gICAgICAgIFNrUmVjdCBs
ZWZ0Qm9yZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZUb3AgKyAxLCByZWN0LmZMZWZ0ICsgMSwg
cmVjdC5mQm90dG9tIC0gMSB9OwotICAgICAgICBkcmF3UmVjdChsZWZ0Qm9yZGVyLCBwYWludCk7
Ci0gICAgICAgIFNrUmVjdCByaWdodEJvcmRlciA9IHsgcmVjdC5mUmlnaHQgLSAxLCByZWN0LmZU
b3AgKyAxLCByZWN0LmZSaWdodCwgcmVjdC5mQm90dG9tIC0gMSB9OwotICAgICAgICBkcmF3UmVj
dChyaWdodEJvcmRlciwgcGFpbnQpOwotICAgIH0KLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjpzZXR1cFBhaW50Q29tbW9uKFNrUGFpbnQqIHBhaW50KSBjb25zdAotewotI2lmIGRlZmlu
ZWQoU0tfREVCVUcpCi0gICAgewotICAgICAgICBTa1BhaW50IGRlZmF1bHRQYWludDsKLSAgICAg
ICAgU2tBU1NFUlQoKnBhaW50ID09IGRlZmF1bHRQYWludCk7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBwYWludC0+c2V0QW50aUFsaWFzKG1fc3RhdGUtPm1fdXNlQW50aWFsaWFzaW5nKTsKLSAgICBw
YWludC0+c2V0WGZlcm1vZGVNb2RlKG1fc3RhdGUtPm1feGZlck1vZGUpOwotICAgIHBhaW50LT5z
ZXRMb29wZXIobV9zdGF0ZS0+bV9sb29wZXIpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6OnNldHVwU2hhZGVyKFNrUGFpbnQqIHBhaW50LCBHcmFkaWVudCogZ3JhZCwgUGF0dGVybiog
cGF0LCBTa0NvbG9yIGNvbG9yKSBjb25zdAotewotICAgIFNrU2hhZGVyKiBzaGFkZXIgPSAwOwot
Ci0gICAgaWYgKGdyYWQpIHsKLSAgICAgICAgc2hhZGVyID0gZ3JhZC0+cGxhdGZvcm1HcmFkaWVu
dCgpOwotICAgICAgICBjb2xvciA9IFNLX0NvbG9yQkxBQ0s7Ci0gICAgfSBlbHNlIGlmIChwYXQp
IHsKLSAgICAgICAgc2hhZGVyID0gcGF0LT5wbGF0Zm9ybVBhdHRlcm4obV9nYy0+Z2V0Q1RNKCkp
OwotICAgICAgICBjb2xvciA9IFNLX0NvbG9yQkxBQ0s7Ci0gICAgICAgIHBhaW50LT5zZXRGaWx0
ZXJCaXRtYXAoaW50ZXJwb2xhdGlvblF1YWxpdHkoKSAhPSBJbnRlcnBvbGF0aW9uTm9uZSk7Ci0g
ICAgfQotCi0gICAgcGFpbnQtPnNldENvbG9yKG1fc3RhdGUtPmFwcGx5QWxwaGEoY29sb3IpKTsK
LSAgICBwYWludC0+c2V0U2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6c2V0dXBQYWludEZvckZpbGxpbmcoU2tQYWludCogcGFpbnQpIGNvbnN0Ci17Ci0gICAg
c2V0dXBQYWludENvbW1vbihwYWludCk7Ci0KLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUgPSBtX2djLT5zdGF0ZSgpOwotICAgIHNldHVwU2hhZGVyKHBhaW50LCBzdGF0ZS5m
aWxsR3JhZGllbnQuZ2V0KCksIHN0YXRlLmZpbGxQYXR0ZXJuLmdldCgpLCBtX3N0YXRlLT5tX2Zp
bGxDb2xvcik7Ci19Ci0KLWZsb2F0IFBsYXRmb3JtQ29udGV4dFNraWE6OnNldHVwUGFpbnRGb3JT
dHJva2luZyhTa1BhaW50KiBwYWludCwgU2tSZWN0KiByZWN0LCBpbnQgbGVuZ3RoKSBjb25zdAot
ewotICAgIHNldHVwUGFpbnRDb21tb24ocGFpbnQpOwotCi0gICAgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlID0gbV9nYy0+c3RhdGUoKTsKLSAgICBzZXR1cFNoYWRlcihwYWludCwg
c3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCksIHN0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCksIG1f
c3RhdGUtPm1fc3Ryb2tlQ29sb3IpOwotCi0gICAgZmxvYXQgd2lkdGggPSBtX3N0YXRlLT5tX3N0
cm9rZVRoaWNrbmVzczsKLQotICAgIHBhaW50LT5zZXRTdHlsZShTa1BhaW50OjprU3Ryb2tlX1N0
eWxlKTsKLSAgICBwYWludC0+c2V0U3Ryb2tlV2lkdGgoU2tGbG9hdFRvU2NhbGFyKHdpZHRoKSk7
Ci0gICAgcGFpbnQtPnNldFN0cm9rZUNhcChtX3N0YXRlLT5tX2xpbmVDYXApOwotICAgIHBhaW50
LT5zZXRTdHJva2VKb2luKG1fc3RhdGUtPm1fbGluZUpvaW4pOwotICAgIHBhaW50LT5zZXRTdHJv
a2VNaXRlcihTa0Zsb2F0VG9TY2FsYXIobV9zdGF0ZS0+bV9taXRlckxpbWl0KSk7Ci0KLSAgICBp
ZiAobV9zdGF0ZS0+bV9kYXNoKQotICAgICAgICBwYWludC0+c2V0UGF0aEVmZmVjdChtX3N0YXRl
LT5tX2Rhc2gpOwotICAgIGVsc2UgewotICAgICAgICBzd2l0Y2ggKG1fc3RhdGUtPm1fc3Ryb2tl
U3R5bGUpIHsKLSAgICAgICAgY2FzZSBOb1N0cm9rZToKLSAgICAgICAgY2FzZSBTb2xpZFN0cm9r
ZToKLSNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgICAgICBjYXNlIERvdWJsZVN0cm9rZToKLSAg
ICAgICAgY2FzZSBXYXZ5U3Ryb2tlOiAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkzNTA5IC0gTmVlZHMgcGxhdGZvcm0gc3VwcG9ydC4KLSNlbmRpZiAv
LyBDU1MzX1RFWFQKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERhc2hlZFN0cm9r
ZToKLSAgICAgICAgICAgIHdpZHRoID0gbV9zdGF0ZS0+bV9kYXNoUmF0aW8gKiB3aWR0aDsKLSAg
ICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KLSAgICAgICAgY2FzZSBEb3R0ZWRTdHJva2U6Ci0g
ICAgICAgICAgICAvLyBUcnVuY2F0ZSB0aGUgd2lkdGgsIHNpbmNlIHdlIGRvbid0IHdhbnQgZnV6
enkgZG90cyBvciBkYXNoZXMuCi0gICAgICAgICAgICBpbnQgZGFzaExlbmd0aCA9IHN0YXRpY19j
YXN0PGludD4od2lkdGgpOwotICAgICAgICAgICAgLy8gU3VidHJhY3Qgb2ZmIHRoZSBlbmRjYXBz
LCBzaW5jZSB0aGV5J3JlIHJlbmRlcmVkIHNlcGFyYXRlbHkuCi0gICAgICAgICAgICBpbnQgZGlz
dGFuY2UgPSBsZW5ndGggLSAyICogc3RhdGljX2Nhc3Q8aW50PihtX3N0YXRlLT5tX3N0cm9rZVRo
aWNrbmVzcyk7Ci0gICAgICAgICAgICBpbnQgcGhhc2UgPSAxOwotICAgICAgICAgICAgaWYgKGRh
c2hMZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGhvdyBtYW55IGRh
c2hlcyBvciBkb3RzIHdlIHNob3VsZCBoYXZlLgotICAgICAgICAgICAgICAgIGludCBudW1EYXNo
ZXMgPSBkaXN0YW5jZSAvIGRhc2hMZW5ndGg7Ci0gICAgICAgICAgICAgICAgaW50IHJlbWFpbmRl
ciA9IGRpc3RhbmNlICUgZGFzaExlbmd0aDsKLSAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhl
IHBoYXNlIHRvIGNlbnRlciB0aGUgZGFzaGVzIHdpdGhpbiB0aGUgbGluZS4KLSAgICAgICAgICAg
ICAgICBpZiAobnVtRGFzaGVzICUgMiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEV2
ZW46ICBzaGlmdCByaWdodCBoYWxmIGEgZGFzaCwgbWludXMgaGFsZiB0aGUgcmVtYWluZGVyCi0g
ICAgICAgICAgICAgICAgICAgIHBoYXNlID0gKGRhc2hMZW5ndGggLSByZW1haW5kZXIpIC8gMjsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBPZGQ6ICBz
aGlmdCByaWdodCBhIGZ1bGwgZGFzaCwgbWludXMgaGFsZiB0aGUgcmVtYWluZGVyCi0gICAgICAg
ICAgICAgICAgICAgIHBoYXNlID0gZGFzaExlbmd0aCAtIHJlbWFpbmRlciAvIDI7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgU2tTY2FsYXIgZGFzaExlbmd0
aFNrID0gU2tJbnRUb1NjYWxhcihkYXNoTGVuZ3RoKTsKLSAgICAgICAgICAgIFNrU2NhbGFyIGlu
dGVydmFsc1syXSA9IHsgZGFzaExlbmd0aFNrLCBkYXNoTGVuZ3RoU2sgfTsKLSAgICAgICAgICAg
IHBhaW50LT5zZXRQYXRoRWZmZWN0KG5ldyBTa0Rhc2hQYXRoRWZmZWN0KGludGVydmFscywgMiwg
U2tJbnRUb1NjYWxhcihwaGFzZSkpKS0+dW5yZWYoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB3aWR0aDsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXREcmF3TG9v
cGVyKFNrRHJhd0xvb3BlciogZGwpCi17Ci0gICAgU2tSZWZDbnRfU2FmZUFzc2lnbihtX3N0YXRl
LT5tX2xvb3BlciwgZGwpOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldE1pdGVy
TGltaXQoZmxvYXQgbWwpCi17Ci0gICAgbV9zdGF0ZS0+bV9taXRlckxpbWl0ID0gbWw7Ci19Ci0K
LXZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAg
bV9zdGF0ZS0+bV9hbHBoYSA9IGFscGhhOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6
OnNldExpbmVDYXAoU2tQYWludDo6Q2FwIGxjKQotewotICAgIG1fc3RhdGUtPm1fbGluZUNhcCA9
IGxjOwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldExpbmVKb2luKFNrUGFpbnQ6
OkpvaW4gbGopCi17Ci0gICAgbV9zdGF0ZS0+bV9saW5lSm9pbiA9IGxqOwotfQotCi12b2lkIFBs
YXRmb3JtQ29udGV4dFNraWE6OnNldFhmZXJtb2RlTW9kZShTa1hmZXJtb2RlOjpNb2RlIHBkbSkK
LXsKLSAgICBtX3N0YXRlLT5tX3hmZXJNb2RlID0gcGRtOwotfQotCi12b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OnNldEZpbGxDb2xvcihTa0NvbG9yIGNvbG9yKQotewotICAgIG1fc3RhdGUtPm1f
ZmlsbENvbG9yID0gY29sb3I7Ci19Ci0KLVNrRHJhd0xvb3BlciogUGxhdGZvcm1Db250ZXh0U2tp
YTo6Z2V0RHJhd0xvb3BlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RhdGUtPm1fbG9vcGVy
OwotfQotCi1TdHJva2VTdHlsZSBQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRTdHJva2VTdHlsZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RhdGUtPm1fc3Ryb2tlU3R5bGU7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUpCi17Ci0gICAgbV9zdGF0ZS0+bV9zdHJva2VTdHlsZSA9IHN0cm9rZVN0eWxlOwotfQotCi12
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldFN0cm9rZUNvbG9yKFNrQ29sb3Igc3Ryb2tlQ29s
b3IpCi17Ci0gICAgbV9zdGF0ZS0+bV9zdHJva2VDb2xvciA9IHN0cm9rZUNvbG9yOwotfQotCi1m
bG9hdCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRTdHJva2VUaGlja25lc3MoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3N0YXRlLT5tX3N0cm9rZVRoaWNrbmVzczsKLX0KLQotdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAg
IG1fc3RhdGUtPm1fc3Ryb2tlVGhpY2tuZXNzID0gdGhpY2tuZXNzOwotfQotCi1UZXh0RHJhd2lu
Z01vZGVGbGFncyBQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRUZXh0RHJhd2luZ01vZGUoKSBjb25z
dAotewotICAgIHJldHVybiBtX3N0YXRlLT5tX3RleHREcmF3aW5nTW9kZTsKLX0KLQotZmxvYXQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0QWxwaGEoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0
YXRlLT5tX2FscGhhOwotfQotCi1pbnQgUGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0Tm9ybWFsaXpl
ZEFscGhhKCkgY29uc3QKLXsKLSAgICBpbnQgYWxwaGEgPSByb3VuZGYobV9zdGF0ZS0+bV9hbHBo
YSAqIDI1Nik7Ci0gICAgaWYgKGFscGhhID4gMjU1KQotICAgICAgICBhbHBoYSA9IDI1NTsKLSAg
ICBlbHNlIGlmIChhbHBoYSA8IDApCi0gICAgICAgIGFscGhhID0gMDsKLSAgICByZXR1cm4gYWxw
aGE7Ci19Ci0KLVNrWGZlcm1vZGU6Ok1vZGUgUGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0WGZlcm1v
ZGVNb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0ZS0+bV94ZmVyTW9kZTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdN
b2RlRmxhZ3MgbW9kZSkKLXsKLSAgICBtX3N0YXRlLT5tX3RleHREcmF3aW5nTW9kZSA9IG1vZGU7
Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0VXNlQW50aWFsaWFzaW5nKGJvb2wg
ZW5hYmxlKQotewotICAgIG1fc3RhdGUtPm1fdXNlQW50aWFsaWFzaW5nID0gZW5hYmxlOwotfQot
Ci1Ta0NvbG9yIFBsYXRmb3JtQ29udGV4dFNraWE6OmVmZmVjdGl2ZUZpbGxDb2xvcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fc3RhdGUtPmFwcGx5QWxwaGEobV9zdGF0ZS0+bV9maWxsQ29sb3Ip
OwotfQotCi1Ta0NvbG9yIFBsYXRmb3JtQ29udGV4dFNraWE6OmVmZmVjdGl2ZVN0cm9rZUNvbG9y
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0ZS0+YXBwbHlBbHBoYShtX3N0YXRlLT5tX3N0
cm9rZUNvbG9yKTsKLX0KLQotSW50ZXJwb2xhdGlvblF1YWxpdHkgUGxhdGZvcm1Db250ZXh0U2tp
YTo6aW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlLT5t
X2ludGVycG9sYXRpb25RdWFsaXR5OwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNl
dEludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25R
dWFsaXR5KQotewotICAgIG1fc3RhdGUtPm1faW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbnRlcnBv
bGF0aW9uUXVhbGl0eTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXREYXNoUGF0
aEVmZmVjdChTa0Rhc2hQYXRoRWZmZWN0KiBkYXNoKQotewotICAgIGlmIChkYXNoICE9IG1fc3Rh
dGUtPm1fZGFzaCkgewotICAgICAgICBTa1NhZmVVbnJlZihtX3N0YXRlLT5tX2Rhc2gpOwotICAg
ICAgICBtX3N0YXRlLT5tX2Rhc2ggPSBkYXNoOwotICAgIH0KLX0KLQotY29uc3QgU2tCaXRtYXAq
IFBsYXRmb3JtQ29udGV4dFNraWE6OmJpdG1hcCgpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oQ0hS
T01JVU0pCi0gICAgVFJBQ0VfRVZFTlQwKCJza2lhIiwgIlBsYXRmb3JtQ29udGV4dFNraWE6OmJp
dG1hcCIpOwotI2VuZGlmCi0gICAgcmV0dXJuICZtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vz
c0JpdG1hcChmYWxzZSk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6aXNOYXRpdmVG
b250UmVuZGVyaW5nQWxsb3dlZCgpCi17Ci0jaWYgVVNFKFNLSUFfVEVYVCkKLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZWxzZQotICAgIGlmIChpc0FjY2VsZXJhdGVkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gc2tpYTo6U3VwcG9ydHNQbGF0Zm9ybVBhaW50KG1fY2FudmFzKTsK
LSNlbmRpZgotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFwcGx5Q2xpcEZyb21JbWFn
ZShjb25zdCBTa1JlY3QmIHJlY3QsIGNvbnN0IFNrQml0bWFwJiBpbWFnZUJ1ZmZlcikKLXsKLSAg
ICAvLyBOT1RFOiB0aGlzIGFzc3VtZXMgdGhlIGltYWdlIG1hc2sgY29udGFpbnMgb3BhcXVlIGJs
YWNrIGZvciB0aGUgcG9ydGlvbnMgdGhhdCBhcmUgdG8gYmUgc2hvd24sIGFzIHN1Y2ggd2UKLSAg
ICAvLyBvbmx5IGxvb2sgYXQgdGhlIGFscGhhIHdoZW4gY29tcG9zaXRpbmcuIEknbSBub3QgMTAw
JSBzdXJlIHRoaXMgaXMgd2hhdCBXZWJLaXQgZXhwZWN0cyBmb3IgaW1hZ2UgY2xpcHBpbmcuCi0g
ICAgU2tQYWludCBwYWludDsKLSAgICBwYWludC5zZXRYZmVybW9kZU1vZGUoU2tYZmVybW9kZTo6
a0RzdEluX01vZGUpOwotICAgIHJlYWxpemVTYXZlKFNrQ2FudmFzOjprTWF0cml4Q2xpcF9TYXZl
RmxhZyk7Ci0gICAgbV9jYW52YXMtPnNhdmUoU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcpOwot
ICAgIG1fY2FudmFzLT5yZXNldE1hdHJpeCgpOwotICAgIG1fY2FudmFzLT5kcmF3Qml0bWFwUmVj
dChpbWFnZUJ1ZmZlciwgMCwgcmVjdCwgJnBhaW50KTsKLSAgICBtX2NhbnZhcy0+cmVzdG9yZSgp
OwotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRpZERyYXdSZWN0KGNvbnN0IFNrUmVj
dCYgcmVjdCwgY29uc3QgU2tQYWludCYgcGFpbnQsIGNvbnN0IFNrQml0bWFwKiBiaXRtYXApCi17
Ci0gICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCi0gICAgICAgIG1fb3BhcXVlUmVnaW9uLmRp
ZERyYXdSZWN0KHRoaXMsIHJlY3QsIHBhaW50LCBiaXRtYXApOwotfQotCi12b2lkIFBsYXRmb3Jt
Q29udGV4dFNraWE6OmFkanVzdFRleHRSZW5kZXJNb2RlKFNrUGFpbnQqIHBhaW50KQotewotICAg
IGlmICghcGFpbnQtPmlzTENEUmVuZGVyVGV4dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBw
YWludC0+c2V0TENEUmVuZGVyVGV4dChjb3VsZFVzZUxDRFJlbmRlcmVkVGV4dCgpKTsKLX0KLQot
Ym9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjb3VsZFVzZUxDRFJlbmRlcmVkVGV4dCgpCi17Ci0g
ICAgLy8gT3VyIGxheWVycyBvbmx5IGhhdmUgYSBzaW5nbGUgYWxwaGEgY2hhbm5lbC4gVGhpcyBt
ZWFucyB0aGF0IHN1YnBpeGVsCi0gICAgLy8gcmVuZGVyZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9z
aXRlZCBjb3JyZWN0bHkgd2hlbiB0aGUgbGF5ZXIgaXMKLSAgICAvLyBjb2xsYXBzZWQuIFRoZXJl
Zm9yZSwgc3VicGl4ZWwgdGV4dCBpcyBkaXNhYmxlZCB3aGVuIHdlIGFyZSBkcmF3aW5nCi0gICAg
Ly8gb250byBhIGxheWVyLgotICAgIGlmIChpc0RyYXdpbmdUb0xheWVyKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX2djLT5zaG91bGRTbW9vdGhGb250cygpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwNzg5NjEyOTdhOTJjYzE4MWRkYzNhZDYwOWJlMjg2Zjk1YWU4
YWNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbGF0Zm9ybUNvbnRleHRTa2lh
X2gKLSNkZWZpbmUgUGxhdGZvcm1Db250ZXh0U2tpYV9oCi0KLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJPcGFxdWVSZWdpb25Ta2lhLmgiCi0KLSNpbmNsdWRlICJTa0Nh
bnZhcy5oIgotI2luY2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKLSNpbmNsdWRlICJTa0Rldmlj
ZS5oIgotI2luY2x1ZGUgIlNrRHJhd0xvb3Blci5oIgotI2luY2x1ZGUgIlNrUGFpbnQuaCIKLSNp
bmNsdWRlICJTa1BhdGguaCIKLSNpbmNsdWRlICJTa1JSZWN0LmgiCi0KLSNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotZW51bSBDb21wb3NpdGVPcGVyYXRvcjsKLWNsYXNzIFRleHR1cmU7Ci0KLS8vIFRo
aXMgY2xhc3MgaG9sZHMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0YXRlIGZvciBHcmFwaGljc0Nv
bnRleHQuIFdlIHB1dAotLy8gbW9zdCBvZiBvdXIgU2tpYSB3cmFwcGVycyBvbiB0aGlzIGNsYXNz
LiBJbiB0aGVvcnksIGEgbG90IG9mIHRoaXMgc3R1ZmYgY291bGQKLS8vIGJlIG1vdmVkIHRvIEdy
YXBoaWNzQ29udGV4dCBkaXJlY3RseSwgZXhjZXB0IHRoYXQgc29tZSBjb2RlIGV4dGVybmFsIHRv
IHRoaXMKLS8vIHdvdWxkIGxpa2UgdG8gcG9rZSBhdCBvdXIgZ3JhcGhpY3MgbGF5ZXIgYXMgd2Vs
bCAobGlrZSB0aGUgSW1hZ2UgYW5kIEZvbnQKLS8vIHN0dWZmLCB3aGljaCBuZWVkcyBzb21lIGFt
b3VudCBvZiBvdXIgd3JhcHBlcnMgYW5kIHN0YXRlIGFyb3VuZCBTa0NhbnZhcykuCi0vLwotLy8g
U28gaW4gZ2VuZXJhbCwgdGhpcyBjbGFzcyB1c2VzIGp1c3QgU2tpYSB0eXBlcyBleGNlcHQgd2hl
biB0aGVyZSdzIG5vIGVhc3kKLS8vIGNvbnZlcnNpb24uIEdyYXBoaWNzQ29udGV4dCBpcyByZXNw
b25zaWJsZSBmb3IgY29udmVydGluZyB0aGUgV2ViS2l0IHR5cGVzIHRvCi0vLyBTa2lhIHR5cGVz
IGFuZCBzZXR0aW5nIHVwIHRoZSBldmVudHVhbCBjYWxsIHRvIHRoZSBTa2lhIGZ1bmN0aW9ucy4K
LS8vCi0vLyBUaGlzIGNsYXNzIHRoZW4ga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBjdXJyZW50IFNr
aWEgc3RhdGUuIFdlYktpdCBleHBlY3RzCi0vLyB0aGF0IHRoZSBncmFwaGljcyBzdGF0ZSB0aGF0
IGlzIHB1c2hlZCBhbmQgcG9wcGVkIGJ5IHNhdmUoKSBhbmQgcmVzdG9yZSgpCi0vLyBpbmNsdWRl
cyB0aGluZ3MgbGlrZSBjb2xvcnMgYW5kIHBlbiBzdHlsZXMuIFNraWEgZG9lcyB0aGlzIGRpZmZl
cmVudGx5LCB3aGVyZQotLy8gcHVzaCBhbmQgcG9wIG9ubHkgaW5jbHVkZXMgdHJhbnNmb3JtcyBh
bmQgYml0bWFwcywgYW5kIHRoZSBhcHBsaWNhdGlvbiBpcwotLy8gcmVzcG9uc2libGUgZm9yIG1h
bmFnaW5nIHRoZSBwYWludGluZyBzdGF0ZSB3aGljaCBpcyBzdG9yZSBpbiBzZXBhcmF0ZQotLy8g
U2tQYWludCBvYmplY3RzLiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBhZGFwdG9yIHRoYXQgYWxs
b3dzIHRoZSBwYWludGluZwotLy8gc3RhdGUgdG8gYmUgcHVzaGVkIGFuZCBwb3BwZWQgYWxvbmcg
d2l0aCB0aGUgYml0bWFwLgotY2xhc3MgUGxhdGZvcm1Db250ZXh0U2tpYSB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUGxhdGZvcm1Db250ZXh0U2tpYSk7Ci1wdWJsaWM6Ci0gICAgLy8gRm9y
IHByaW50aW5nLCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IGNhbnZhcy4gY2FudmFzIGNhbiBiZSBO
VUxMLiBJZiB5b3UKLSAgICAvLyBzdXBwbHkgYSBOVUxMIGNhbnZhcywgeW91IGNhbiBhbHNvIGNh
bGwgc2V0Q2FudmFzIGxhdGVyLgotICAgIFBsYXRmb3JtQ29udGV4dFNraWEoU2tDYW52YXMqKTsK
LSAgICB+UGxhdGZvcm1Db250ZXh0U2tpYSgpOwotCi0gICAgLy8gU2V0cyB0aGUgZ3JhcGhpY3Mg
Y29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0LgotICAgIC8vIEdyYXBoaWNzQ29u
dGV4dFNraWEgY2FsbHMgdGhpcyBmcm9tIGl0cyBjb25zdHJ1Y3Rvci4KLSAgICB2b2lkIHNldEdy
YXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQqIGdjKSB7IG1fZ2MgPSBnYzsgfQot
Ci0gICAgLy8gU2V0cyB0aGUgY2FudmFzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnRleHQuIFVz
ZSB3aGVuIHN1cHBseWluZyBOVUxMCi0gICAgLy8gdG8gdGhlIGNvbnN0cnVjdG9yLgotICAgIHZv
aWQgc2V0Q2FudmFzKFNrQ2FudmFzKik7Ci0KLSAgICBTa0RldmljZSogY3JlYXRlQ29tcGF0aWJs
ZURldmljZShjb25zdCBJbnRTaXplJiwgYm9vbCBoYXNBbHBoYSk7Ci0KLSAgICAvLyBJZiBmYWxz
ZSB3ZSdyZSByZW5kZXJpbmcgdG8gYSBHcmFwaGljc0NvbnRleHQgZm9yIGEgd2ViIHBhZ2UsIGlm
IHRydWUKLSAgICAvLyB3ZSdyZSBub3QgKGFzIGlzIHRoZSBjYXNlIHdoZW4gcmVuZGVyaW5nIHRv
IGEgY2FudmFzIG9iamVjdCkuCi0gICAgLy8gSWYgdGhpcyBpcyB0cnVlIHRoZSBjb250ZW50cyBo
YXZlIG5vdCBiZWVuIG1hcmtlZCB1cCB3aXRoIHRoZSBtYWdpYwotICAgIC8vIGNvbG9yIGFuZCBh
bGwgdGV4dCBkcmF3aW5nIG5lZWRzIHRvIGdvIHRvIGEgbGF5ZXIgc28gdGhhdCB0aGUgYWxwaGEg
aXMKLSAgICAvLyBjb3JyZWN0bHkgdXBkYXRlZC4KLSAgICB2b2lkIHNldERyYXdpbmdUb0ltYWdl
QnVmZmVyKGJvb2wpOwotICAgIGJvb2wgaXNEcmF3aW5nVG9JbWFnZUJ1ZmZlcigpIGNvbnN0Owot
Ci0gICAgdm9pZCBzYXZlKCk7Ci0gICAgdm9pZCByZXN0b3JlKCk7Ci0KLSAgICB2b2lkIHNhdmVM
YXllcihjb25zdCBTa1JlY3QqIGJvdW5kcywgY29uc3QgU2tQYWludCosIFNrQ2FudmFzOjpTYXZl
RmxhZ3MgPSBTa0NhbnZhczo6a0FSR0JfQ2xpcExheWVyX1NhdmVGbGFnKTsKLSAgICB2b2lkIHJl
c3RvcmVMYXllcigpOwotCi0gICAgLy8gQmVnaW5zIGEgbGF5ZXIgdGhhdCBpcyBjbGlwcGVkIHRv
IHRoZSBpbWFnZSB8aW1hZ2VCdWZmZXJ8IGF0IHRoZSBsb2NhdGlvbgotICAgIC8vIHxyZWN0fC4g
VGhpcyBsYXllciBpcyBpbXBsaWNpdGx5IHJlc3RvcmVkIHdoZW4gdGhlIG5leHQgcmVzdG9yZSBp
cwotICAgIC8vIGludm9rZWQuCi0gICAgLy8gTk9URTogfGltYWdlQnVmZmVyfCBtYXkgYmUgZGVs
ZXRlZCBiZWZvcmUgdGhlIHxyZXN0b3JlfCBpcyBpbnZva2VkLgotICAgIHZvaWQgYmVnaW5MYXll
ckNsaXBwZWRUb0ltYWdlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKik7Ci0K
LSAgICAvLyBTZXRzIHVwIHRoZSBjb21tb24gZmxhZ3Mgb24gYSBwYWludCBmb3IgYW50aWFsaWFz
aW5nLCBlZmZlY3RzLCBldGMuCi0gICAgLy8gVGhpcyBpcyBpbXBsaWNpdGx5IGNhbGxlZCBieSBz
ZXR1cFBhaW50RmlsbCBhbmQgc2V0dXBQYWludFN0cm9rZSwgYnV0Ci0gICAgLy8geW91IG1heSB3
aXNoIHRvIGNhbGwgaXQgZGlyZWN0bHkgc29tZXRpbWVzIGlmIHlvdSBkb24ndCB3YW50IHRoYXQg
b3RoZXIKLSAgICAvLyBiZWhhdmlvci4KLSAgICB2b2lkIHNldHVwUGFpbnRDb21tb24oU2tQYWlu
dCopIGNvbnN0OwotCi0gICAgLy8gU2V0cyB1cCB0aGUgcGFpbnQgZm9yIHRoZSBjdXJyZW50IGZp
bGwgc3R5bGUuCi0gICAgdm9pZCBzZXR1cFBhaW50Rm9yRmlsbGluZyhTa1BhaW50KikgY29uc3Q7
Ci0KLSAgICAvLyBTZXRzIHVwIHRoZSBwYWludCBmb3Igc3Ryb2tpbmcuIFJldHVybnMgYW4gaW50
IHJlcHJlc2VudGluZyB0aGUgd2lkdGggb2YKLSAgICAvLyB0aGUgcGVuLCBvciAxIGlmIHRoZSBw
ZW4ncyB3aWR0aCBpcyAwIGlmIGEgbm9uLXplcm8gbGVuZ3RoIGlzIHByb3ZpZGVkLAotICAgIC8v
IHRoZSBudW1iZXIgb2YgZGFzaGVzL2RvdHMgb24gYSBkYXNoZWQvZG90dGVkIGxpbmUgd2lsbCBi
ZSBhZGp1c3RlZCB0bwotICAgIC8vIHN0YXJ0IGFuZCBlbmQgdGhhdCBsZW5ndGggd2l0aCBhIGRh
c2gvZG90LgotICAgIGZsb2F0IHNldHVwUGFpbnRGb3JTdHJva2luZyhTa1BhaW50KiwgU2tSZWN0
KiwgaW50IGxlbmd0aCkgY29uc3Q7Ci0KLSAgICAvLyBTdGF0ZSBzZXR0aW5nIGZ1bmN0aW9ucy4K
LSAgICB2b2lkIHNldERyYXdMb29wZXIoU2tEcmF3TG9vcGVyKik7ICAvLyBOb3RlOiB0YWtlcyBh
biBhZGRpdGlvbmFsIHJlZi4KLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpOwotICAgIHZv
aWQgc2V0QWxwaGEoZmxvYXQpOwotICAgIHZvaWQgc2V0TGluZUNhcChTa1BhaW50OjpDYXApOwot
ICAgIHZvaWQgc2V0TGluZUpvaW4oU2tQYWludDo6Sm9pbik7Ci0gICAgdm9pZCBzZXRYZmVybW9k
ZU1vZGUoU2tYZmVybW9kZTo6TW9kZSk7Ci0gICAgdm9pZCBzZXRGaWxsQ29sb3IoU2tDb2xvcik7
Ci0gICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSk7Ci0gICAgdm9pZCBzZXRTdHJv
a2VDb2xvcihTa0NvbG9yKTsKLSAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlj
a25lc3MpOwotICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdz
IG1vZGUpOwotICAgIHZvaWQgc2V0VXNlQW50aWFsaWFzaW5nKGJvb2wgZW5hYmxlKTsKLSAgICB2
b2lkIHNldERhc2hQYXRoRWZmZWN0KFNrRGFzaFBhdGhFZmZlY3QqKTsKLQotICAgIFNrRHJhd0xv
b3BlciogZ2V0RHJhd0xvb3BlcigpIGNvbnN0OwotICAgIFN0cm9rZVN0eWxlIGdldFN0cm9rZVN0
eWxlKCkgY29uc3Q7Ci0gICAgZmxvYXQgZ2V0U3Ryb2tlVGhpY2tuZXNzKCkgY29uc3Q7Ci0gICAg
VGV4dERyYXdpbmdNb2RlRmxhZ3MgZ2V0VGV4dERyYXdpbmdNb2RlKCkgY29uc3Q7Ci0gICAgZmxv
YXQgZ2V0QWxwaGEoKSBjb25zdDsKLSAgICBpbnQgZ2V0Tm9ybWFsaXplZEFscGhhKCkgY29uc3Q7
Ci0gICAgU2tYZmVybW9kZTo6TW9kZSBnZXRYZmVybW9kZU1vZGUoKSBjb25zdDsKLQotICAgIC8v
IFJldHVybnMgdGhlIGZpbGwgY29sb3IuIFRoZSByZXR1cm5lZCBjb2xvciBoYXMgaXQncyBhbHBo
YSBhZGp1c3RlZAotICAgIC8vIGJ5IHRoZSBjdXJyZW50IGFscGhhLgotICAgIFNrQ29sb3IgZWZm
ZWN0aXZlRmlsbENvbG9yKCkgY29uc3Q7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBzdHJva2UgY29s
b3IuIFRoZSByZXR1cm5lZCBjb2xvciBoYXMgaXQncyBhbHBoYSBhZGp1c3RlZAotICAgIC8vIGJ5
IHRoZSBjdXJyZW50IGFscGhhLgotICAgIFNrQ29sb3IgZWZmZWN0aXZlU3Ryb2tlQ29sb3IoKSBj
b25zdDsKLQotICAgIC8vIFJldHVybnMgdGhlIGNhbnZhcyB1c2VkIGZvciBwYWludGluZywgTk9U
IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwuCi0gICAgLy8gQWNjZXNzaW5nIHRoZSBiYWNraW5n
IGNhbnZhcyB0aGlzIHdheSBmbHVzaGVzIGFsbCBxdWV1ZWQgc2F2ZSBvcHMsCi0gICAgLy8gc28g
aXQgc2hvdWxkIGJlIGF2b2lkZWQuIFVzZSB0aGUgY29ycmVzcG9uZGluZyBQbGF0Zm9ybUNvbnRl
eHRTa2lhCi0gICAgLy8gZHJhdy9tYXRyaXgvY2xpcCBtZXRob2RzIGluc3RlYWQuCi0gICAgU2tD
YW52YXMqIGNhbnZhcygpOwotICAgIGNvbnN0IFNrQ2FudmFzKiBjYW52YXMoKSBjb25zdCB7IHJl
dHVybiBtX2NhbnZhczsgfQotCi0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlv
blF1YWxpdHkoKSBjb25zdDsKLSAgICB2b2lkIHNldEludGVycG9sYXRpb25RdWFsaXR5KEludGVy
cG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KTsKLQotICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBwdXNoZWQgZG93biB0byBHcmFwaGljc0NvbnRleHQuCi0gICAgdm9pZCBk
cmF3UmVjdChTa1JlY3QgcmVjdCk7Ci0KLSAgICAvLyBSZXR1cm5zIGlmIHRoZSBjb250ZXh0IGlz
IGEgcHJpbnRpbmcgY29udGV4dCBpbnN0ZWFkIG9mIGEgZGlzcGxheQotICAgIC8vIGNvbnRleHQu
IEJpdG1hcCBzaG91bGRuJ3QgYmUgcmVzYW1wbGVkIHdoZW4gcHJpbnRpbmcgdG8ga2VlcCB0aGUg
YmVzdAotICAgIC8vIHBvc3NpYmxlIHF1YWxpdHkuCi0gICAgYm9vbCBwcmludGluZygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KLSAgICB2b2lkIHNldFByaW50aW5nKGJvb2wgcCkgeyBt
X3ByaW50aW5nID0gcDsgfQotCi0gICAgLy8gUmV0dXJucyBpZiB0aGUgY29udGV4dCBhbGxvd3Mg
cmVuZGVyaW5nIG9mIGZvbnRzIHVzaW5nIG5hdGl2ZSBwbGF0Zm9ybQotICAgIC8vIEFQSXMuIElm
IGZhbHNlIGlzIHJldHVybmVkIGZvbnQgcmVuZGVyaW5nIGlzIHBlcmZvcm1lZCB1c2luZyB0aGUg
c2tpYQotICAgIC8vIHRleHQgZHJhd2luZyBBUElzLgotICAgIC8vIGlmIFVTRShTS0lBX1RFWFQp
IGlzIGVuYWJsZWQsIHRoaXMgYWx3YXlzIHJldHVybnMgZmFsc2UKLSAgICBib29sIGlzTmF0aXZl
Rm9udFJlbmRlcmluZ0FsbG93ZWQoKTsKLQotICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWQ7IH0KLSAgICB2b2lkIHNldEFjY2VsZXJhdGVkKGJvb2wg
YWNjZWxlcmF0ZWQpIHsgbV9hY2NlbGVyYXRlZCA9IGFjY2VsZXJhdGVkOyB9Ci0KLSAgICAvLyBU
cnVlIGlmIHRoaXMgY29udGV4dCBpcyBkZWZlcnJpbmcgZHJhdyBjYWxscyB0byBiZSBleGVjdXRl
ZCBsYXRlci4KLSAgICAvLyBXZSBuZWVkIHRvIGtub3cgdGhpcyBmb3IgY29udGV4dC10by1jb250
ZXh0IGRyYXdzLCBpbiBvcmRlciB0byBrbm93IGlmCi0gICAgLy8gdGhlIHNvdXJjZSBiaXRtYXAg
bmVlZHMgdG8gYmUgY29waWVkLgotICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVmZXJyZWQ7IH0KLSAgICB2b2lkIHNldERlZmVycmVkKGJvb2wgZGVmZXJyZWQpIHsgbV9k
ZWZlcnJlZCA9IGRlZmVycmVkOyB9Ci0KLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fZGV2aWNlU2NhbGVGYWN0b3I7IH0KLSAgICB2b2lkIHNldERldmljZVNj
YWxlRmFjdG9yKGZsb2F0IHNjYWxlKSB7IG1fZGV2aWNlU2NhbGVGYWN0b3IgPSBzY2FsZTsgfQot
Ci0gICAgdm9pZCBzZXRUcmFja09wYXF1ZVJlZ2lvbihib29sIHRyYWNrKSB7IG1fdHJhY2tPcGFx
dWVSZWdpb24gPSB0cmFjazsgfQotCi0gICAgLy8gVGhpcyB3aWxsIGJlIGFuIGVtcHR5IHJlZ2lv
biB1bmxlc3MgdHJhY2tpbmcgaXMgZW5hYmxlZC4KLSAgICBjb25zdCBPcGFxdWVSZWdpb25Ta2lh
JiBvcGFxdWVSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJlZ2lvbjsgfQotCi0gICAg
Ly8gQWZ0ZXIgZHJhd2luZyBkaXJlY3RseSB0byB0aGUgY29udGV4dCdzIGNhbnZhcywgdXNlIHRo
aXMgZnVuY3Rpb24gdG8gbm90aWZ5IHRoZSBjb250ZXh0IHNvCi0gICAgLy8gaXQgY2FuIHRyYWNr
IHRoZSBvcGFxdWUgcmVnaW9uLgotICAgIC8vIEZJWE1FOiB0aGlzIGlzIHN0aWxsIG5lZWRlZCBv
bmx5IGJlY2F1c2UgSW1hZ2VTa2lhOjpwYWludFNrQml0bWFwKCkgbWF5IG5lZWQgdG8gbm90aWZ5
IGZvciBhCi0gICAgLy8gICAgICAgIHNtYWxsZXIgcmVjdCB0aGFuIHRoZSBvbmUgZHJhd24gdG8s
IGR1ZSB0byBpdHMgY2xpcHBpbmcgbG9naWMuCi0gICAgdm9pZCBkaWREcmF3UmVjdChjb25zdCBT
a1JlY3QmLCBjb25zdCBTa1BhaW50JiwgY29uc3QgU2tCaXRtYXAqID0gMCk7Ci0KLSAgICAvLyBU
dXJuIG9mZiBMQ0QgdGV4dCBmb3IgdGhlIHBhaW50IGlmIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBj
b250ZXh0LgotICAgIHZvaWQgYWRqdXN0VGV4dFJlbmRlck1vZGUoU2tQYWludCopOwotICAgIGJv
b2wgY291bGRVc2VMQ0RSZW5kZXJlZFRleHQoKTsKLQotICAgIGVudW0gQW50aUFsaWFzaW5nTW9k
ZSB7Ci0gICAgICAgIE5vdEFudGlBbGlhc2VkLAotICAgICAgICBBbnRpQWxpYXNlZAotICAgIH07
Ci0gICAgZW51bSBBY2Nlc3NNb2RlIHsKLSAgICAgICAgUmVhZE9ubHksCi0gICAgICAgIFJlYWRX
cml0ZQotICAgIH07Ci0KLSAgICAvLyBTa0NhbnZhcyB3cmFwcGVycy4KLSAgICBjb25zdCBTa0Jp
dG1hcCogYml0bWFwKCkgY29uc3Q7Ci0gICAgY29uc3QgU2tCaXRtYXAmIGxheWVyQml0bWFwKEFj
Y2Vzc01vZGUgPSBSZWFkT25seSkgY29uc3Q7Ci0gICAgYm9vbCByZWFkUGl4ZWxzKFNrQml0bWFw
KiwgaW50IHgsIGludCB5LAotICAgICAgICBTa0NhbnZhczo6Q29uZmlnODg4OCA9IFNrQ2FudmFz
OjprTmF0aXZlX1ByZW11bF9Db25maWc4ODg4KTsKLSAgICB2b2lkIHdyaXRlUGl4ZWxzKGNvbnN0
IFNrQml0bWFwJiwgaW50IHgsIGludCB5LAotICAgICAgICBTa0NhbnZhczo6Q29uZmlnODg4OCA9
IFNrQ2FudmFzOjprTmF0aXZlX1ByZW11bF9Db25maWc4ODg4KTsKLSAgICBib29sIGlzRHJhd2lu
Z1RvTGF5ZXIoKSBjb25zdDsKLSAgICBib29sIGlzVmVjdG9yKCkgY29uc3Q7Ci0KLSAgICBib29s
IGNsaXBQYXRoKGNvbnN0IFNrUGF0aCYsIEFudGlBbGlhc2luZ01vZGUgPSBOb3RBbnRpQWxpYXNl
ZCwKLSAgICAgICAgU2tSZWdpb246Ok9wID0gU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOwotICAg
IGJvb2wgY2xpcFJlY3QoY29uc3QgU2tSZWN0JiwgQW50aUFsaWFzaW5nTW9kZSA9IE5vdEFudGlB
bGlhc2VkLAotICAgICAgICBTa1JlZ2lvbjo6T3AgPSBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7
Ci0gICAgYm9vbCBjbGlwUlJlY3QoY29uc3QgU2tSUmVjdCYsIEFudGlBbGlhc2luZ01vZGUgPSBO
b3RBbnRpQWxpYXNlZCwKLSAgICAgICAgU2tSZWdpb246Ok9wID0gU2tSZWdpb246OmtJbnRlcnNl
Y3RfT3ApOwotICAgIGJvb2wgZ2V0Q2xpcEJvdW5kcyhTa1JlY3QqKSBjb25zdDsKLQotICAgIHZv
aWQgc2V0TWF0cml4KGNvbnN0IFNrTWF0cml4Jik7Ci0gICAgY29uc3QgU2tNYXRyaXgmIGdldFRv
dGFsTWF0cml4KCkgY29uc3Q7Ci0gICAgYm9vbCBjb25jYXQoY29uc3QgU2tNYXRyaXgmKTsKLSAg
ICBib29sIHJvdGF0ZShTa1NjYWxhciBkZWdyZWVzKTsKLSAgICBib29sIHNjYWxlKFNrU2NhbGFy
IHN4LCBTa1NjYWxhciBzeSk7Ci0gICAgYm9vbCB0cmFuc2xhdGUoU2tTY2FsYXIgZHgsIFNrU2Nh
bGFyIGR5KTsKLQotICAgIHZvaWQgZHJhd0JpdG1hcChjb25zdCBTa0JpdG1hcCYsIFNrU2NhbGFy
LCBTa1NjYWxhciwgY29uc3QgU2tQYWludCogPSAwKTsKLSAgICB2b2lkIGRyYXdCaXRtYXBSZWN0
KGNvbnN0IFNrQml0bWFwJiwgY29uc3QgU2tJUmVjdCosIGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNr
UGFpbnQqID0gMCk7Ci0gICAgdm9pZCBkcmF3T3ZhbChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1Bh
aW50Jik7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBTa1BhdGgmLCBjb25zdCBTa1BhaW50Jik7
Ci0gICAgdm9pZCBkcmF3UG9pbnRzKFNrQ2FudmFzOjpQb2ludE1vZGUsIHNpemVfdCBjb3VudCwg
Y29uc3QgU2tQb2ludCBwdHNbXSwgY29uc3QgU2tQYWludCYpOwotICAgIHZvaWQgZHJhd1JlY3Qo
Y29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYpOwotICAgIHZvaWQgZHJhd0lSZWN0KGNvbnN0
IFNrSVJlY3QmLCBjb25zdCBTa1BhaW50Jik7Ci0gICAgdm9pZCBkcmF3UlJlY3QoY29uc3QgU2tS
UmVjdCYsIGNvbnN0IFNrUGFpbnQmKTsKLSAgICB2b2lkIGRyYXdQb3NUZXh0KGNvbnN0IHZvaWQq
IHRleHQsIHNpemVfdCBieXRlTGVuZ3RoLCBjb25zdCBTa1BvaW50IHBvc1tdLCBjb25zdCBTa1Bh
aW50Jik7Ci0gICAgdm9pZCBkcmF3UG9zVGV4dEgoY29uc3Qgdm9pZCogdGV4dCwgc2l6ZV90IGJ5
dGVMZW5ndGgsIGNvbnN0IFNrU2NhbGFyIHhwb3NbXSwgU2tTY2FsYXIgY29uc3RZLAotICAgICAg
ICBjb25zdCBTa1BhaW50Jik7Ci0gICAgdm9pZCBkcmF3VGV4dE9uUGF0aChjb25zdCB2b2lkKiB0
ZXh0LCBzaXplX3QgYnl0ZUxlbmd0aCwgY29uc3QgU2tQYXRoJiwKLSAgICAgICAgY29uc3QgU2tN
YXRyaXgqLCBjb25zdCBTa1BhaW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gVXNlZCB3aGVuIHJl
c3RvcmluZyBhbmQgdGhlIHN0YXRlIGhhcyBhbiBpbWFnZSBjbGlwLiBPbmx5IHNob3dzIHRoZSBw
aXhlbHMgaW4KLSAgICAvLyBtX2NhbnZhcyB0aGF0IGFyZSBhbHNvIGluIGltYWdlQnVmZmVyLgot
ICAgIC8vIFRoZSBjbGlwcGluZyByZWN0YW5nbGUgaXMgZ2l2ZW4gaW4gYWJzb2x1dGUgY29vcmRp
bmF0ZXMuCi0gICAgdm9pZCBhcHBseUNsaXBGcm9tSW1hZ2UoY29uc3QgU2tSZWN0JiwgY29uc3Qg
U2tCaXRtYXAmKTsKLQotICAgIC8vIGNvbW1vbiBjb2RlIGJldHdlZW4gc2V0dXBQYWludEZvcltG
aWxsaW5nLFN0cm9raW5nXQotICAgIHZvaWQgc2V0dXBTaGFkZXIoU2tQYWludCosIEdyYWRpZW50
KiwgUGF0dGVybiosIFNrQ29sb3IpIGNvbnN0OwotCi0gICAgdm9pZCByZWFsaXplU2F2ZShTa0Nh
bnZhczo6U2F2ZUZsYWdzKTsKLQotICAgIC8vIERlZmluZXMgZHJhd2luZyBzdHlsZS4KLSAgICBz
dHJ1Y3QgU3RhdGU7Ci0KLSAgICBzdHJ1Y3QgRGVmZXJyZWRTYXZlU3RhdGU7Ci0KLSAgICAvLyBO
VUxMIGluZGljYXRlcyBwYWludGluZyBpcyBkaXNhYmxlZC4gTmV2ZXIgZGVsZXRlIHRoaXMgb2Jq
ZWN0LgotICAgIFNrQ2FudmFzKiBtX2NhbnZhczsKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHQq
IG1fZ2M7Ci0KLSAgICAvLyBTdGF0ZXMgc3RhY2suIEVuYWJsZXMgbG9jYWwgZHJhd2luZyBzdGF0
ZSBjaGFuZ2Ugd2l0aCBzYXZlKCkvcmVzdG9yZSgpCi0gICAgLy8gY2FsbHMuCi0gICAgV1RGOjpW
ZWN0b3I8U3RhdGU+IG1fc3RhdGVTdGFjazsKLSAgICAvLyBQb2ludGVyIHRvIHRoZSBjdXJyZW50
IGRyYXdpbmcgc3RhdGUuIFRoaXMgaXMgYSBjYWNoZWQgdmFsdWUgb2YKLSAgICAvLyBtU3RhdGVT
dGFjay5iYWNrKCkuCi0gICAgU3RhdGUqIG1fc3RhdGU7Ci0KLSAgICBXVEY6OlZlY3RvcjxEZWZl
cnJlZFNhdmVTdGF0ZT4gbV9zYXZlU3RhdGVTdGFjazsKLQotICAgIC8vIEN1cnJlbnRseSBwZW5k
aW5nIHNhdmUgZmxhZ3MuCi0gICAgLy8gRklYTUU6IFdoaWxlIGRlZmluZWQgYXMgYSBiaXRtYXNr
IG9mIFNrQ2FudmFzOjpTYXZlRmxhZ3MsIHRoaXMgaXMgbW9zdGx5IHVzZWQgYXMgYSBib29sLgot
ICAgIC8vICAgICAgICBJdCB3aWxsIGNvbWUgaW4gaGFuZHkgd2hlbiBhZGRpbmcgZ3JhbnVsYXIg
c2F2ZSgpIHN1cHBvcnQgKGNsaXAgdnMuIG1hdHJpeCB2cy4gcGFpbnQpLgotICAgIHVuc2lnbmVk
IG1fZGVmZXJyZWRTYXZlRmxhZ3M7Ci0KLSAgICAvLyBUcmFja3MgdGhlIHJlZ2lvbiBwYWludGVk
IG9wYXF1ZSB2aWEgdGhlIEdyYXBoaWNzQ29udGV4dC4KLSAgICBPcGFxdWVSZWdpb25Ta2lhIG1f
b3BhcXVlUmVnaW9uOwotICAgIGJvb2wgbV90cmFja09wYXF1ZVJlZ2lvbjsKLQotICAgIGJvb2wg
bV9wcmludGluZzsKLSAgICBib29sIG1fYWNjZWxlcmF0ZWQ7Ci0gICAgYm9vbCBtX2RlZmVycmVk
OwotICAgIGJvb2wgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcjsKLSAgICBmbG9hdCBtX2RldmljZVNj
YWxlRmFjdG9yOwotfTsKLQotaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhbGl6
ZVNhdmUoU2tDYW52YXM6OlNhdmVGbGFncyBmbGFncykKLXsKLSAgICBpZiAobV9kZWZlcnJlZFNh
dmVGbGFncyAmIGZsYWdzKSB7Ci0gICAgICAgIG1fY2FudmFzLT5zYXZlKChTa0NhbnZhczo6U2F2
ZUZsYWdzKW1fZGVmZXJyZWRTYXZlRmxhZ3MpOwotICAgICAgICBtX2RlZmVycmVkU2F2ZUZsYWdz
ID0gMDsKLSAgICB9Ci19Ci0KLWlubGluZSBTa0NhbnZhcyogUGxhdGZvcm1Db250ZXh0U2tpYTo6
Y2FudmFzKCkKLXsKLSAgICAvLyBGbHVzaCBhbnkgcGVuZGluZyBzYXZlcy4KLSAgICByZWFsaXpl
U2F2ZShTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOwotCi0gICAgcmV0dXJuIG1fY2Fu
dmFzOwotfQotCi1pbmxpbmUgY29uc3QgU2tCaXRtYXAmIFBsYXRmb3JtQ29udGV4dFNraWE6Omxh
eWVyQml0bWFwKEFjY2Vzc01vZGUgYWNjZXNzKSBjb25zdAotewotICAgIHJldHVybiBtX2NhbnZh
cy0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChhY2Nlc3MgPT0gUmVhZFdyaXRlKTsKLX0K
LQotaW5saW5lIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZFBpeGVscyhTa0JpdG1hcCog
Yml0bWFwLCBpbnQgeCwgaW50IHksCi0gICAgU2tDYW52YXM6OkNvbmZpZzg4ODggY29uZmlnODg4
OCkKLXsKLSAgICByZXR1cm4gbV9jYW52YXMtPnJlYWRQaXhlbHMoYml0bWFwLCB4LCB5LCBjb25m
aWc4ODg4KTsKLX0KLQotaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6d3JpdGVQaXhl
bHMoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgaW50IHgsIGludCB5LAotICAgIFNrQ2FudmFzOjpD
b25maWc4ODg4IGNvbmZpZzg4ODgpCi17Ci0gICAgbV9jYW52YXMtPndyaXRlUGl4ZWxzKGJpdG1h
cCwgeCwgeSwgY29uZmlnODg4OCk7Ci0KLSAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikgewot
ICAgICAgICBTa1JlY3QgcmVjdCA9IFNrUmVjdDo6TWFrZVhZV0goeCwgeSwgYml0bWFwLndpZHRo
KCksIGJpdG1hcC5oZWlnaHQoKSk7Ci0gICAgICAgIFNrUGFpbnQgcGFpbnQ7Ci0KLSAgICAgICAg
cGFpbnQuc2V0WGZlcm1vZGVNb2RlKFNrWGZlcm1vZGU6OmtTcmNfTW9kZSk7Ci0gICAgICAgIG1f
b3BhcXVlUmVnaW9uLmRpZERyYXdSZWN0KHRoaXMsIHJlY3QsIHBhaW50LCAmYml0bWFwKTsKLSAg
ICB9Ci19Ci0KLWlubGluZSBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmlzRHJhd2luZ1RvTGF5
ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2NhbnZhcy0+aXNEcmF3aW5nVG9MYXllcigpOwot
fQotCi1pbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjppc1ZlY3RvcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fY2FudmFzLT5nZXRUb3BEZXZpY2UoKS0+Z2V0RGV2aWNlQ2FwYWJpbGl0
aWVzKCkgJiBTa0RldmljZTo6a1ZlY3Rvcl9DYXBhYmlsaXR5OwotfQotCi1pbmxpbmUgYm9vbCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpjbGlwUGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIEFudGlBbGlh
c2luZ01vZGUgYWEsIFNrUmVnaW9uOjpPcCBvcCkKLXsKLSAgICByZWFsaXplU2F2ZShTa0NhbnZh
czo6a0NsaXBfU2F2ZUZsYWcpOwotCi0gICAgcmV0dXJuIG1fY2FudmFzLT5jbGlwUGF0aChwYXRo
LCBvcCwgYWEgPT0gQW50aUFsaWFzZWQpOwotfQotCi1pbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpjbGlwUmVjdChjb25zdCBTa1JlY3QmIHJlY3QsIEFudGlBbGlhc2luZ01vZGUgYWEs
IFNrUmVnaW9uOjpPcCBvcCkKLXsKLSAgICByZWFsaXplU2F2ZShTa0NhbnZhczo6a0NsaXBfU2F2
ZUZsYWcpOwotCi0gICAgcmV0dXJuIG1fY2FudmFzLT5jbGlwUmVjdChyZWN0LCBvcCwgYWEgPT0g
QW50aUFsaWFzZWQpOwotfQotCi1pbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjbGlw
UlJlY3QoY29uc3QgU2tSUmVjdCYgcmVjdCwgQW50aUFsaWFzaW5nTW9kZSBhYSwgU2tSZWdpb246
Ok9wIG9wKQotewotICAgIHJlYWxpemVTYXZlKFNrQ2FudmFzOjprQ2xpcF9TYXZlRmxhZyk7Ci0K
LSAgICByZXR1cm4gbV9jYW52YXMtPmNsaXBSUmVjdChyZWN0LCBvcCwgYWEgPT0gQW50aUFsaWFz
ZWQpOwotfQotCi1pbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRDbGlwQm91bmRz
KFNrUmVjdCogYm91bmRzKSBjb25zdAotewotICAgIHJldHVybiBtX2NhbnZhcy0+Z2V0Q2xpcEJv
dW5kcyhib3VuZHMpOwotfQotCi1pbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRN
YXRyaXgoY29uc3QgU2tNYXRyaXgmIG1hdHJpeCkKLXsKLSAgICByZWFsaXplU2F2ZShTa0NhbnZh
czo6a01hdHJpeF9TYXZlRmxhZyk7Ci0KLSAgICBtX2NhbnZhcy0+c2V0TWF0cml4KG1hdHJpeCk7
Ci19Ci0KLWlubGluZSBjb25zdCBTa01hdHJpeCYgUGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0VG90
YWxNYXRyaXgoKSBjb25zdAotewotICAgIHJldHVybiBtX2NhbnZhcy0+Z2V0VG90YWxNYXRyaXgo
KTsKLX0KLQotaW5saW5lIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6Y29uY2F0KGNvbnN0IFNr
TWF0cml4JiBtYXRyaXgpCi17Ci0gICAgcmVhbGl6ZVNhdmUoU2tDYW52YXM6OmtNYXRyaXhfU2F2
ZUZsYWcpOwotCi0gICAgcmV0dXJuIG1fY2FudmFzLT5jb25jYXQobWF0cml4KTsKLX0KLQotaW5s
aW5lIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6cm90YXRlKFNrU2NhbGFyIGRlZ3JlZXMpCi17
Ci0gICAgcmVhbGl6ZVNhdmUoU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcpOwotCi0gICAgcmV0
dXJuIG1fY2FudmFzLT5yb3RhdGUoZGVncmVlcyk7Ci19Ci0KLWlubGluZSBib29sIFBsYXRmb3Jt
Q29udGV4dFNraWE6OnNjYWxlKFNrU2NhbGFyIHN4LCBTa1NjYWxhciBzeSkKLXsKLSAgICByZWFs
aXplU2F2ZShTa0NhbnZhczo6a01hdHJpeF9TYXZlRmxhZyk7Ci0KLSAgICByZXR1cm4gbV9jYW52
YXMtPnNjYWxlKHN4LCBzeSk7Ci19Ci0KLWlubGluZSBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6
OnRyYW5zbGF0ZShTa1NjYWxhciBkeCwgU2tTY2FsYXIgZHkpCi17Ci0gICAgcmVhbGl6ZVNhdmUo
U2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcpOwotCi0gICAgcmV0dXJuIG1fY2FudmFzLT50cmFu
c2xhdGUoZHgsIGR5KTsKLX0KLQotaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJh
d0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBTa1NjYWxhciBsZWZ0LCBTa1NjYWxhciB0
b3AsCi0gICAgY29uc3QgU2tQYWludCogcGFpbnQpCi17Ci0gICAgbV9jYW52YXMtPmRyYXdCaXRt
YXAoYml0bWFwLCBsZWZ0LCB0b3AsIHBhaW50KTsKLQotICAgIGlmIChtX3RyYWNrT3BhcXVlUmVn
aW9uKSB7Ci0gICAgICAgIFNrUmVjdCByZWN0ID0gU2tSZWN0OjpNYWtlWFlXSChsZWZ0LCB0b3As
IGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpOwotICAgICAgICBtX29wYXF1ZVJlZ2lv
bi5kaWREcmF3UmVjdCh0aGlzLCByZWN0LCAqcGFpbnQsICZiaXRtYXApOwotICAgIH0KLX0KLQot
aW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd0JpdG1hcFJlY3QoY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCwgY29uc3QgU2tJUmVjdCogaXNyYywKLSAgICBjb25zdCBTa1JlY3QmIGRz
dCwgY29uc3QgU2tQYWludCogcGFpbnQpCi17Ci0gICAgbV9jYW52YXMtPmRyYXdCaXRtYXBSZWN0
KGJpdG1hcCwgaXNyYywgZHN0LCBwYWludCk7Ci0KLSAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lv
bikKLSAgICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd1JlY3QodGhpcywgZHN0LCAqcGFpbnQs
ICZiaXRtYXApOwotfQotCi1pbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3T3Zh
bChjb25zdCBTa1JlY3QmIG92YWwsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIG1fY2Fu
dmFzLT5kcmF3T3ZhbChvdmFsLCBwYWludCk7Ci0KLSAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lv
bikKLSAgICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd0JvdW5kZWQodGhpcywgb3ZhbCwgcGFp
bnQpOwotfQotCi1pbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UGF0aChjb25z
dCBTa1BhdGgmIHBhdGgsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIG1fY2FudmFzLT5k
cmF3UGF0aChwYXRoLCBwYWludCk7Ci0KLSAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKLSAg
ICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd1BhdGgodGhpcywgcGF0aCwgcGFpbnQpOwotfQot
Ci1pbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UG9pbnRzKFNrQ2FudmFzOjpQ
b2ludE1vZGUgbW9kZSwgc2l6ZV90IGNvdW50LAotICAgIGNvbnN0IFNrUG9pbnQgcHRzW10sIGNv
bnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIG1fY2FudmFzLT5kcmF3UG9pbnRzKG1vZGUsIGNv
dW50LCBwdHMsIHBhaW50KTsKLQotICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQotICAgICAg
ICBtX29wYXF1ZVJlZ2lvbi5kaWREcmF3UG9pbnRzKHRoaXMsIG1vZGUsIGNvdW50LCBwdHMsIHBh
aW50KTsKLX0KLQotaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoY29u
c3QgU2tSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCkKLXsKLSAgICBtX2NhbnZhcy0+
ZHJhd1JlY3QocmVjdCwgcGFpbnQpOwotCi0gICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCi0g
ICAgICAgIG1fb3BhcXVlUmVnaW9uLmRpZERyYXdSZWN0KHRoaXMsIHJlY3QsIHBhaW50LCAwKTsK
LX0KLQotaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd0lSZWN0KGNvbnN0IFNr
SVJlY3QmIHJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIG1fY2FudmFzLT5kcmF3
SVJlY3QocmVjdCwgcGFpbnQpOwotCi0gICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pIHsKLSAg
ICAgICAgU2tSZWN0IHIgPSBTa1JlY3Q6Ok1ha2VGcm9tSVJlY3QocmVjdCk7Ci0gICAgICAgIG1f
b3BhcXVlUmVnaW9uLmRpZERyYXdSZWN0KHRoaXMsIHIsIHBhaW50LCAwKTsKLSAgICB9Ci19Ci0K
LWlubGluZSB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdSUmVjdChjb25zdCBTa1JSZWN0
JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCkKLXsKLSAgICBtX2NhbnZhcy0+ZHJhd1JSZWN0
KHJlY3QsIHBhaW50KTsKLQotICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQotICAgICAgICBt
X29wYXF1ZVJlZ2lvbi5kaWREcmF3Qm91bmRlZCh0aGlzLCByZWN0LmdldEJvdW5kcygpLCBwYWlu
dCk7Ci19Ci0KLWlubGluZSB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdQb3NUZXh0KGNv
bnN0IHZvaWQqIHRleHQsIHNpemVfdCBieXRlTGVuZ3RoLAotICAgIGNvbnN0IFNrUG9pbnQgcG9z
W10sIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIG1fY2FudmFzLT5kcmF3UG9zVGV4dCh0
ZXh0LCBieXRlTGVuZ3RoLCBwb3MsIHBhaW50KTsKLQotICAgIC8vIEZJWE1FOiBjb21wdXRlIGJv
dW5kcyBmb3IgcG9zaXRpb25lZCB0ZXh0LgotICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQot
ICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWREcmF3VW5ib3VuZGVkKHRoaXMsIHBhaW50LCBPcGFx
dWVSZWdpb25Ta2lhOjpGaWxsT3JTdHJva2UpOwotfQotCi1pbmxpbmUgdm9pZCBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpkcmF3UG9zVGV4dEgoY29uc3Qgdm9pZCogdGV4dCwgc2l6ZV90IGJ5dGVMZW5n
dGgsCi0gICAgY29uc3QgU2tTY2FsYXIgeHBvc1tdLCBTa1NjYWxhciBjb25zdFksIGNvbnN0IFNr
UGFpbnQmIHBhaW50KQotewotICAgIG1fY2FudmFzLT5kcmF3UG9zVGV4dEgodGV4dCwgYnl0ZUxl
bmd0aCwgeHBvcywgY29uc3RZLCBwYWludCk7Ci0KLSAgICAvLyBGSVhNRTogY29tcHV0ZSBib3Vu
ZHMgZm9yIHBvc2l0aW9uZWQgdGV4dC4KLSAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKLSAg
ICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd1VuYm91bmRlZCh0aGlzLCBwYWludCwgT3BhcXVl
UmVnaW9uU2tpYTo6RmlsbE9yU3Ryb2tlKTsKLX0KLQotaW5saW5lIHZvaWQgUGxhdGZvcm1Db250
ZXh0U2tpYTo6ZHJhd1RleHRPblBhdGgoY29uc3Qgdm9pZCogdGV4dCwgc2l6ZV90IGJ5dGVMZW5n
dGgsCi0gICAgY29uc3QgU2tQYXRoJiBwYXRoLCBjb25zdCBTa01hdHJpeCogbWF0cml4LCBjb25z
dCBTa1BhaW50JiBwYWludCkKLXsKLSAgICBtX2NhbnZhcy0+ZHJhd1RleHRPblBhdGgodGV4dCwg
Ynl0ZUxlbmd0aCwgcGF0aCwgbWF0cml4LCBwYWludCk7Ci0KLSAgICAvLyBGSVhNRTogY29tcHV0
ZSBib3VuZHMgZm9yIHBvc2l0aW9uZWQgdGV4dC4KLSAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lv
bikKLSAgICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd1VuYm91bmRlZCh0aGlzLCBwYWludCwg
T3BhcXVlUmVnaW9uU2tpYTo6RmlsbE9yU3Ryb2tlKTsKLX0KLQotfQotI2VuZGlmIC8vIFBsYXRm
b3JtQ29udGV4dFNraWFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUdyYXBoaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtR3JhcGhpY3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNGFlODgzNTJiZjdlYWIxOThiYzc5NGQ3YWQ3YjI2NGY2ZGJlZjAwZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtR3JhcGhpY3MuaAorKysgL2Rldi9udWxsCkBAIC0x
LDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbGF0Zm9ybUdyYXBoaWNzX2gKLSNkZWZpbmUgUGxhdGZv
cm1HcmFwaGljc19oCi0KLXR5cGVkZWYgY2xhc3MgU2tTaGFkZXIqIFBsYXRmb3JtR3JhZGllbnQ7
Ci10eXBlZGVmIGNsYXNzIFNrU2hhZGVyKiBQbGF0Zm9ybVBhdHRlcm47Ci0KLSNlbmRpZiAvLyBQ
bGF0Zm9ybUdyYXBoaWNzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDg1ZjY3Y2M4MWRiMjIzZDlmNWIxOWMwZDk2MTM4NWRhZDYzZWViMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAw
OSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU2tQYWludC5oIgot
I2luY2x1ZGUgIlNrVGltZS5oIgotI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKLSNpbmNsdWRlICJT
a1R5cGVzLmgiCi0jaW5jbHVkZSAiVkRNWFBhcnNlci5oIgotI2luY2x1ZGUgPHVuaWNvZGUvbm9y
bWx6ci5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBUaGlzIGlzIHRoZSBsYXJnZXN0IFZETVggdGFibGUgd2hpY2ggd2UnbGwg
dHJ5IHRvIGxvYWQgYW5kIHBhcnNlLgotc3RhdGljIGNvbnN0IHNpemVfdCBtYXhWRE1YVGFibGVT
aXplID0gMTAyNCAqIDEwMjQ7IC8vIDEgTUIKLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1Jbml0KCkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUoKSkgewotICAgICAgICBt
X2ZvbnRNZXRyaWNzLnJlc2V0KCk7Ci0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKLSAgICAg
ICAgbV9tYXhDaGFyV2lkdGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2tQ
YWludCBwYWludDsKLSAgICBTa1BhaW50OjpGb250TWV0cmljcyBtZXRyaWNzOwotCi0gICAgbV9w
bGF0Zm9ybURhdGEuc2V0dXBQYWludCgmcGFpbnQpOwotICAgIHBhaW50LmdldEZvbnRNZXRyaWNz
KCZtZXRyaWNzKTsKLSAgICBTa1R5cGVmYWNlKiBmYWNlID0gcGFpbnQuZ2V0VHlwZWZhY2UoKTsK
LQotICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB2ZG14VGFnID0gU2tTZXRGb3VyQnl0ZVRhZygn
VicsICdEJywgJ00nLCAnWCcpOwotICAgIGludCBwaXhlbFNpemUgPSBtX3BsYXRmb3JtRGF0YS5z
aXplKCkgKyAwLjU7Ci0gICAgaW50IHZkbXhBc2NlbnQsIHZkbXhEZXNjZW50OwotICAgIGJvb2wg
aXNWRE1YVmFsaWQgPSBmYWxzZTsKLQotICAgIHNpemVfdCB2ZG14U2l6ZSA9IGZhY2UtPmdldFRh
YmxlU2l6ZSh2ZG14VGFnKTsKLSAgICBpZiAodmRteFNpemUgJiYgdmRteFNpemUgPCBtYXhWRE1Y
VGFibGVTaXplKSB7Ci0gICAgICAgIHVpbnQ4X3QqIHZkbXhUYWJsZSA9ICh1aW50OF90KikgZmFz
dE1hbGxvYyh2ZG14U2l6ZSk7Ci0gICAgICAgIGlmICh2ZG14VGFibGUKLSAgICAgICAgICAgICYm
IGZhY2UtPmdldFRhYmxlRGF0YSh2ZG14VGFnLCAwLCB2ZG14U2l6ZSwgdmRteFRhYmxlKSA9PSB2
ZG14U2l6ZQotICAgICAgICAgICAgJiYgcGFyc2VWRE1YKCZ2ZG14QXNjZW50LCAmdmRteERlc2Nl
bnQsIHZkbXhUYWJsZSwgdmRteFNpemUsIHBpeGVsU2l6ZSkpCi0gICAgICAgICAgICBpc1ZETVhW
YWxpZCA9IHRydWU7Ci0gICAgICAgIGZhc3RGcmVlKHZkbXhUYWJsZSk7Ci0gICAgfQotCi0gICAg
ZmxvYXQgYXNjZW50OwotICAgIGZsb2F0IGRlc2NlbnQ7Ci0KLSAgICAvLyBCZXdhcmUgdGhvc2Ug
d2hvIHN0ZXAgaGVyZTogVGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIG1hdGNoIFdpbjMyIGZvbnQK
LSAgICAvLyBtZXRyaWNzICpleGFjdGx5KiAoZXhjZXB0IHRoZSBhZGp1c3RtZW50IG9mIGFzY2Vu
dC9kZXNjZW50IG9uIExpbnV4L0FuZHJvaWQpLgotICAgIGlmIChpc1ZETVhWYWxpZCkgewotICAg
ICAgICBhc2NlbnQgPSB2ZG14QXNjZW50OwotICAgICAgICBkZXNjZW50ID0gLXZkbXhEZXNjZW50
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFNrU2NhbGFyIGhlaWdodCA9IC1tZXRyaWNzLmZBc2Nl
bnQgKyBtZXRyaWNzLmZEZXNjZW50ICsgbWV0cmljcy5mTGVhZGluZzsKLSAgICAgICAgYXNjZW50
ID0gU2tTY2FsYXJSb3VuZCgtbWV0cmljcy5mQXNjZW50KTsKLSAgICAgICAgZGVzY2VudCA9IFNr
U2NhbGFyUm91bmQoaGVpZ2h0KSAtIGFzY2VudDsKLSNpZiBPUyhMSU5VWCkgfHwgT1MoQU5EUk9J
RCkKLSAgICAgICAgLy8gV2hlbiBzdWJwaXhlbCBwb3NpdGlvbmluZyBpcyBlbmFibGVkLCBpZiB0
aGUgZGVzY2VudCBpcyByb3VuZGVkIGRvd24sIHRoZSBkZXNjZW50IHBhcnQKLSAgICAgICAgLy8g
b2YgdGhlIGdseXBoIG1heSBiZSB0cnVuY2F0ZWQgd2hlbiBkaXNwbGF5ZWQgaW4gYSAnb3ZlcmZs
b3c6IGhpZGRlbicgY29udGFpbmVyLgotICAgICAgICAvLyBUbyBhdm9pZCB0aGF0LCBib3Jyb3cg
MSB1bml0IGZyb20gdGhlIGFzY2VudCB3aGVuIHBvc3NpYmxlLgotICAgICAgICAvLyBGSVhNRTog
VGhpcyBjYW4gYmUgcmVtb3ZlZCBpZiBzdWItcGl4ZWwgYXNjZW50L2Rlc2NlbnQgaXMgc3VwcG9y
dGVkLgotICAgICAgICBpZiAocGxhdGZvcm1EYXRhKCkuZm9udFJlbmRlclN0eWxlKCkudXNlU3Vi
cGl4ZWxQb3NpdGlvbmluZyAmJiBkZXNjZW50IDwgU2tTY2FsYXJUb0Zsb2F0KG1ldHJpY3MuZkRl
c2NlbnQpICYmIGFzY2VudCA+PSAxKSB7Ci0gICAgICAgICAgICArK2Rlc2NlbnQ7Ci0gICAgICAg
ICAgICAtLWFzY2VudDsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0gICAgbV9mb250TWV0
cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVz
Y2VudCk7Ci0KLSAgICBmbG9hdCB4SGVpZ2h0OwotICAgIGlmIChtZXRyaWNzLmZYSGVpZ2h0KSB7
Ci0gICAgICAgIHhIZWlnaHQgPSBtZXRyaWNzLmZYSGVpZ2h0OwotICAgICAgICBtX2ZvbnRNZXRy
aWNzLnNldFhIZWlnaHQoeEhlaWdodCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgeEhlaWdodCA9
IGFzY2VudCAqIDAuNTY7IC8vIEJlc3QgZ3Vlc3MgZnJvbSBXaW5kb3dzIGZvbnQgbWV0cmljcy4K
LSAgICAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwotICAgICAgICBtX2Zv
bnRNZXRyaWNzLnNldEhhc1hIZWlnaHQoZmFsc2UpOwotICAgIH0KLQotCi0gICAgZmxvYXQgbGlu
ZUdhcCA9IFNrU2NhbGFyVG9GbG9hdChtZXRyaWNzLmZMZWFkaW5nKTsKLSAgICBtX2ZvbnRNZXRy
aWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2lu
Zyhscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKSk7
Ci0KLSAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAh
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1aW50
MzJfdCB2aGVhVGFnID0gU2tTZXRGb3VyQnl0ZVRhZygndicsICdoJywgJ2UnLCAnYScpOwotICAg
ICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgdm9yZ1RhZyA9IFNrU2V0Rm91ckJ5dGVUYWcoJ1Yn
LCAnTycsICdSJywgJ0cnKTsKLSAgICAgICAgc2l6ZV90IHZoZWFTaXplID0gZmFjZS0+Z2V0VGFi
bGVTaXplKHZoZWFUYWcpOwotICAgICAgICBzaXplX3Qgdm9yZ1NpemUgPSBmYWNlLT5nZXRUYWJs
ZVNpemUodm9yZ1RhZyk7Ci0gICAgICAgIGlmICgodmhlYVNpemUgPiAwKSB8fCAodm9yZ1NpemUg
PiAwKSkKLSAgICAgICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSB0cnVlOwotICAgIH0KLQot
ICAgIC8vIEluIFdlYktpdC9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRh
LmNwcCwgbV9zcGFjZVdpZHRoIGlzCi0gICAgLy8gY2FsY3VsYXRlZCBmb3IgdXMsIGJ1dCB3ZSBu
ZWVkIHRvIGNhbGN1bGF0ZSBtX21heENoYXJXaWR0aCBhbmQKLSAgICAvLyBtX2F2Z0NoYXJXaWR0
aCBpbiBvcmRlciBmb3IgdGV4dCBlbnRyeSB3aWRnZXRzIHRvIGJlIHNpemVkIGNvcnJlY3RseS4K
LQotICAgIFNrU2NhbGFyIHhSYW5nZSA9IG1ldHJpY3MuZlhNYXggLSBtZXRyaWNzLmZYTWluOwot
ICAgIG1fbWF4Q2hhcldpZHRoID0gU2tTY2FsYXJSb3VuZCh4UmFuZ2UgKiBTa1NjYWxhclJvdW5k
KG1fcGxhdGZvcm1EYXRhLnNpemUoKSkpOwotCi0gICAgaWYgKG1ldHJpY3MuZkF2Z0NoYXJXaWR0
aCkKLSAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBTa1NjYWxhclJvdW5kKG1ldHJpY3MuZkF2Z0No
YXJXaWR0aCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0geEhlaWdodDsK
LQotICAgICAgICBHbHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBHbHlwaFBhZ2VUcmVlTm9kZTo6
Z2V0Um9vdENoaWxkKHRoaXMsIDApLT5wYWdlKCk7Ci0KLSAgICAgICAgaWYgKGdseXBoUGFnZVpl
cm8pIHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdCBVQ2hhcjMyIHhDaGFyID0gJ3gnOwotICAg
ICAgICAgICAgY29uc3QgR2x5cGggeEdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKHhDaGFyKS5nbHlwaDsKLQotICAgICAgICAgICAgaWYgKHhHbHlwaCkgewotICAg
ICAgICAgICAgICAgIC8vIEluIHdpZHRoRm9yR2x5cGgoKSwgeEdseXBoIHdpbGwgYmUgY29tcGFy
ZWQgd2l0aAotICAgICAgICAgICAgICAgIC8vIG1femVyb1dpZHRoU3BhY2VHbHlwaCwgd2hpY2gg
aXNuJ3QgaW5pdGlhbGl6ZWQgeWV0IGhlcmUuCi0gICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6
ZSBpdCB3aXRoIHplcm8gdG8gbWFrZSBzdXJlIHdpZHRoRm9yR2x5cGgoKSByZXR1cm5zCi0gICAg
ICAgICAgICAgICAgLy8gdGhlIHJpZ2h0IHdpZHRoLgotICAgICAgICAgICAgICAgIG1femVyb1dp
ZHRoU3BhY2VHbHlwaCA9IDA7Ci0gICAgICAgICAgICAgICAgbV9hdmdDaGFyV2lkdGggPSB3aWR0
aEZvckdseXBoKHhHbHlwaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoaW50IHVuaXRzUGVyRW0gPSBmYWNlLT5nZXRVbml0c1BlckVtKCkpCi0gICAgICAgIG1f
Zm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKLX0KLQotdm9pZCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKLXsKLSAgICAvLyBjaGFyd2lkdGhzIGFy
ZSBzZXQgaW4gcGxhdGZvcm1Jbml0LgotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bURlc3Ryb3koKQotewotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
ZmxvYXQgc2NhbGVkU2l6ZSA9IGxyb3VuZGYoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgp
ICogc2NhbGVGYWN0b3IpOwotICAgIHJldHVybiBTaW1wbGVGb250RGF0YTo6Y3JlYXRlKEZvbnRQ
bGF0Zm9ybURhdGEobV9wbGF0Zm9ybURhdGEsIHNjYWxlZFNpemUpLCBpc0N1c3RvbUZvbnQoKSwg
ZmFsc2UpOwotfQotCi1ib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgU2tQYWludCBw
YWludDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4QnVmZmVyQ291bnQgPSA2NDsKLSAg
ICB1aW50MTZfdCBnbHlwaHNbbWF4QnVmZmVyQ291bnRdOwotCi0gICAgbV9wbGF0Zm9ybURhdGEu
c2V0dXBQYWludCgmcGFpbnQpOwotICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50Ojpr
VVRGMTZfVGV4dEVuY29kaW5nKTsKLQotICAgIHdoaWxlIChsZW5ndGggPiAwKSB7Ci0gICAgICAg
IGludCBuID0gU2tNaW4zMihsZW5ndGgsIFNLX0FSUkFZX0NPVU5UKGdseXBocykpOwotCi0gICAg
ICAgIC8vIHRleHRUb0dseXBocyB0YWtlcyBhIGJ5dGUgY291bnQgc28gd2UgZG91YmxlIHRoZSBj
aGFyYWN0ZXIgY291bnQuCi0gICAgICAgIGludCBjb3VudCA9IHBhaW50LnRleHRUb0dseXBocyhj
aGFyYWN0ZXJzLCBuICogMiwgZ2x5cGhzKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIWdseXBoc1tpXSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIG1pc3NpbmcgZ2x5cGgKLSAgICAgICAgfQotCi0gICAgICAgIGNo
YXJhY3RlcnMgKz0gbjsKLSAgICAgICAgbGVuZ3RoIC09IG47Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKLXsKLSAg
ICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gcGxhdGZvcm1EYXRhKCkuaXNGaXhlZFBpdGNoKCk7Ci19
Ci0KLUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlw
aCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgU2tBU1NFUlQoc2l6ZW9mKGdseXBoKSA9PSAy
KTsgLy8gY29tcGlsZS10aW1lIGFzc2VydAotCi0gICAgU2tQYWludCBwYWludDsKLQotICAgIG1f
cGxhdGZvcm1EYXRhLnNldHVwUGFpbnQoJnBhaW50KTsKLQotICAgIHBhaW50LnNldFRleHRFbmNv
ZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotICAgIFNrUmVjdCBib3VuZHM7
Ci0gICAgcGFpbnQubWVhc3VyZVRleHQoJmdseXBoLCAyLCAmYm91bmRzKTsKLSAgICBpZiAoIXBh
aW50LmlzU3VicGl4ZWxUZXh0KCkpIHsKLSAgICAgICAgU2tJUmVjdCBpcjsKLSAgICAgICAgYm91
bmRzLnJvdW5kKCZpcik7Ci0gICAgICAgIGJvdW5kcy5zZXQoaXIpOwotICAgIH0KLSAgICByZXR1
cm4gRmxvYXRSZWN0KGJvdW5kcyk7Ci19Ci0gICAgCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmICghbV9wbGF0
Zm9ybURhdGEuc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFNrQVNTRVJUKHNpemVv
ZihnbHlwaCkgPT0gMik7IC8vIGNvbXBpbGUtdGltZSBhc3NlcnQKLQotICAgIFNrUGFpbnQgcGFp
bnQ7Ci0KLSAgICBtX3BsYXRmb3JtRGF0YS5zZXR1cFBhaW50KCZwYWludCk7Ci0KLSAgICBwYWlu
dC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKLSAgICBT
a1NjYWxhciB3aWR0aCA9IHBhaW50Lm1lYXN1cmVUZXh0KCZnbHlwaCwgMik7Ci0gICAgaWYgKCFw
YWludC5pc1N1YnBpeGVsVGV4dCgpKQotICAgICAgICB3aWR0aCA9IFNrU2NhbGFyUm91bmQod2lk
dGgpOwotICAgIHJldHVybiBTa1NjYWxhclRvRmxvYXQod2lkdGgpOwotfQotCi0jaWYgVVNFKEhB
UkZCVVpaKQotYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydCkKLSAgICAgICAg
bV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQgPSBhZG9wdFB0cihuZXcgSGFzaE1h
cDxTdHJpbmcsIGJvb2w+KTsKLQotICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIGJvb2w+OjpBZGRS
ZXN1bHQgYWRkUmVzdWx0ID0gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQtPmFk
ZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSwgZmFsc2UpOwotICAgIGlmICghYWRkUmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwot
Ci0gICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKLSAgICBWZWN0b3I8VUNoYXIs
IDQ+IG5vcm1hbGl6ZWRDaGFyYWN0ZXJzKGxlbmd0aCk7Ci0gICAgaW50MzJfdCBub3JtYWxpemVk
TGVuZ3RoID0gdW5vcm1fbm9ybWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCwgVU5PUk1fTkZDLCBV
Tk9STV9VTklDT0RFXzNfMiwgJm5vcm1hbGl6ZWRDaGFyYWN0ZXJzWzBdLCBsZW5ndGgsICZlcnJv
cik7Ci0gICAgLy8gQ2FuJ3QgcmVuZGVyIGlmIHdlIGhhdmUgYW4gZXJyb3Igb3Igbm8gY29tcG9z
aXRpb24gb2NjdXJyZWQuCi0gICAgaWYgKFVfRkFJTFVSRShlcnJvcikgfHwgKHN0YXRpY19jYXN0
PHNpemVfdD4obm9ybWFsaXplZExlbmd0aCkgPT0gbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBtX3BsYXRmb3JtRGF0YS5zZXR1cFBhaW50
KCZwYWludCk7Ci0gICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtVVEYxNl9UZXh0
RW5jb2RpbmcpOwotICAgIGlmIChwYWludC50ZXh0VG9HbHlwaHMoJm5vcm1hbGl6ZWRDaGFyYWN0
ZXJzWzBdLCBub3JtYWxpemVkTGVuZ3RoICogMiwgMCkpIHsKLSAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA0ZDgyNDU3ZjFjYWYzYmVhOWJiMzE3
NmI1ZDA3N2VjZGRhZTdkZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2lu
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChj
KSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJTa2lhRm9udFdpbi5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmgiCi0jaW5jbHVkZSAi
R3JhZGllbnQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0U2tpYS5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiU2tDYW52
YXMuaCIKLSNpbmNsdWRlICJTa0RldmljZS5oIgotI2luY2x1ZGUgIlNrUGFpbnQuaCIKLSNpbmNs
dWRlICJTa1NoYWRlci5oIgotI2luY2x1ZGUgIlNrVGVtcGxhdGVzLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotI2lmICFVU0UoU0tJQV9URVhUKQotYm9vbCB3aW5kb3dzQ2FuSGFuZGxlRHJh
d1RleHRTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIEZsb2F0U2l6ZSBz
aGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xv
cjsKLSAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2U7Ci0KLSAgICBib29sIGhhc1NoYWRv
dyA9IGNvbnRleHQtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0Nv
bG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKLSAgICByZXR1cm4gIWhhc1NoYWRvdyB8fCAoIXNoYWRv
d0JsdXIgJiYgKHNoYWRvd0NvbG9yLmFscGhhKCkgPT0gMjU1KSAmJiAoY29udGV4dC0+ZmlsbENv
bG9yKCkuYWxwaGEoKSA9PSAyNTUpKTsKLX0KLQotYm9vbCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERy
YXdpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewotICAgIGlmICghd2luZG93c0Nhbkhh
bmRsZVRleHREcmF3aW5nV2l0aG91dFNoYWRvdyhjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gQ2hlY2sgZm9yIHNoYWRvdyBlZmZlY3RzLgotICAgIGlmICghd2luZG93
c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KGNvbnRleHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdp
bmdXaXRob3V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICAvLyBDaGVj
ayBmb3Igbm9uLXRyYW5zbGF0aW9uIHRyYW5zZm9ybXMuIFNvbWV0aW1lcyB6b29tcyB3aWxsIGxv
b2sgYmV0dGVyIGluCi0gICAgLy8gU2tpYSwgYW5kIHNvbWV0aW1lcyBiZXR0ZXIgaW4gV2luZG93
cy4gVGhlIG1haW4gcHJvYmxlbSBpcyB0aGF0IHpvb21pbmcKLSAgICAvLyBpbiB1c2luZyBTa2lh
IHdpbGwgc2hvdyB5b3UgdGhlIGhpbnRlZCBvdXRsaW5lcyBmb3IgdGhlIHNtYWxsZXIgc2l6ZSwK
LSAgICAvLyB3aGljaCBsb29rIHdlaXJkLiBBbGwgZWxzZSBiZWluZyBlcXVhbCwgaXQncyBiZXR0
ZXIgdG8gdXNlIFdpbmRvd3MnIHRleHQKLSAgICAvLyBkcmF3aW5nLCBzbyB3ZSBkb24ndCBjaGVj
ayBmb3Igem9vbXMuCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXggPSBjb250ZXh0
LT5nZXRDVE0oKTsKLSAgICBpZiAobWF0cml4LmIoKSB8fCBtYXRyaXguYygpKSAvLyBDaGVjayBm
b3Igc2tldy4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ2hlY2sgZm9yIHN0cm9r
ZSBlZmZlY3RzLgotICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VGV4dERy
YXdpbmdNb2RlKCkgIT0gVGV4dE1vZGVGaWxsKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBDaGVjayBmb3IgZ3JhZGllbnRzLgotICAgIGlmIChjb250ZXh0LT5maWxsR3JhZGllbnQo
KSB8fCBjb250ZXh0LT5zdHJva2VHcmFkaWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBDaGVjayBmb3IgcGF0dGVybnMuCi0gICAgaWYgKGNvbnRleHQtPmZpbGxQYXR0ZXJu
KCkgfHwgY29udGV4dC0+c3Ryb2tlUGF0dGVybigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIWNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5pc05hdGl2ZUZvbnRSZW5kZXJp
bmdBbGxvd2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHNraWFEcmF3VGV4dChQbGF0Zm9ybUNvbnRleHRTa2lh
KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQmIHBvaW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgIFNrUGFpbnQqIHBhaW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdPUkQqIGdseXBocywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBpbnQqIGFkdmFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdP
RkZTRVQqIG9mZnNldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bUdseXBocykK
LXsKLSAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciA2NCBTa1BvaW50cyBvbiB0aGUgc3RhY2suIElm
IG51bUdseXBocyBpcyBsYXJnZXIsIHRoZSBhcnJheQotICAgIC8vIHdpbGwgZHluYW1pY2FsbHkg
YWxsb2NhdGUgaXQgc3BhY2UgZm9yIG51bUdseXBoIGdseXBocy4gVGhpcyBpcyB1c2VkIHRvIHN0
b3JlCi0gICAgLy8gdGhlIGNvbXB1dGVkIHgseSBsb2NhdGlvbnMuIEluIHRoZSBjYXNlIHdoZXJl
IG9mZnNldHM9PW51bGwsIHRoZW4gd2UgdXNlIGl0Ci0gICAgLy8gdG8gc3RvcmUgKHR3aWNlIGFz
IG1hbnkpIFNrU2NhbGFycyBmb3IgeFtdCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrTG9jYWxH
bHlwaE1heCA9IDY0OwotCi0gICAgU2tTY2FsYXIgeCA9IHBvaW50LmZYOwotICAgIFNrU2NhbGFy
IHkgPSBwb2ludC5mWTsKLSAgICBpZiAob2Zmc2V0cykgewotICAgICAgICBTa0F1dG9TVEFycmF5
PGtMb2NhbEdseXBoTWF4LCBTa1BvaW50PiBzdG9yYWdlKG51bUdseXBocyk7Ci0gICAgICAgIFNr
UG9pbnQqIHBvcyA9IHN0b3JhZ2UuZ2V0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtR2x5cGhzOyBpKyspIHsKLSAgICAgICAgICAgIC8vIEdESSBoYXMgZHYgZ28gdXAsIHNvIHdl
IG5lZ2F0ZSBpdAotICAgICAgICAgICAgcG9zW2ldLnNldCh4ICsgU2tJbnRUb1NjYWxhcihvZmZz
ZXRzW2ldLmR1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgeSArIC1Ta0ludFRvU2NhbGFyKG9m
ZnNldHNbaV0uZHYpKTsKLSAgICAgICAgICAgIHggKz0gU2tJbnRUb1NjYWxhcihhZHZhbmNlc1tp
XSk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGV4dC0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1H
bHlwaHMgKiBzaXplb2YodWludDE2X3QpLCBwb3MsICpwYWludCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgU2tBdXRvU1RBcnJheTxrTG9jYWxHbHlwaE1heCAqIDIsIFNrU2NhbGFyPiBzdG9yYWdl
KG51bUdseXBocyk7Ci0gICAgICAgIFNrU2NhbGFyKiB4cG9zID0gc3RvcmFnZS5nZXQoKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewotICAgICAgICAgICAg
eHBvc1tpXSA9IHg7Ci0gICAgICAgICAgICB4ICs9IFNrSW50VG9TY2FsYXIoYWR2YW5jZXNbaV0p
OwotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHQtPmRyYXdQb3NUZXh0SChnbHlwaHMsIG51bUds
eXBocyAqIHNpemVvZih1aW50MTZfdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhw
b3MsIHksICpwYWludCk7Ci0gICAgfQotfQotCi0vLyBMb29rdXAgdGhlIGN1cnJlbnQgc3lzdGVt
IHNldHRpbmdzIGZvciBmb250IHNtb290aGluZy4KLS8vIFdlIGNhY2hlIHRoZXNlIHZhbHVlcyBm
b3IgcGVyZm9ybWFuY2UsIGJ1dCBpZiB0aGUgYnJvd3NlciBoYXMgYXdheSB0byBiZQotLy8gbm90
aWZpZWQgd2hlbiB0aGVzZSBjaGFuZ2UsIHdlIGNvdWxkIHJlLXF1ZXJ5IHRoZW0gYXQgdGhhdCB0
aW1lLgotc3RhdGljIHVpbnQzMl90IGdldERlZmF1bHRHRElUZXh0RmxhZ3MoKQotewotICAgIHN0
YXRpYyBib29sIGdJbml0ZWQ7Ci0gICAgc3RhdGljIHVpbnQzMl90IGdGbGFnczsKLSAgICBpZiAo
IWdJbml0ZWQpIHsKLSAgICAgICAgQk9PTCBlbmFibGVkOwotICAgICAgICBnRmxhZ3MgPSAwOwot
ICAgICAgICBpZiAoU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkcsIDAs
ICZlbmFibGVkLCAwKSAmJiBlbmFibGVkKSB7Ci0gICAgICAgICAgICBnRmxhZ3MgfD0gU2tQYWlu
dDo6a0FudGlBbGlhc19GbGFnOwotCi0gICAgICAgICAgICBVSU5UIHNtb290aFR5cGU7Ci0gICAg
ICAgICAgICBpZiAoU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkdUWVBF
LCAwLCAmc21vb3RoVHlwZSwgMCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoRkVfRk9OVFNNT09U
SElOR0NMRUFSVFlQRSA9PSBzbW9vdGhUeXBlKQotICAgICAgICAgICAgICAgICAgICBnRmxhZ3Mg
fD0gU2tQYWludDo6a0xDRFJlbmRlclRleHRfRmxhZzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBnSW5pdGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGdGbGFnczsKLX0K
LQotc3RhdGljIHZvaWQgc2V0dXBQYWludEZvckZvbnQoU2tQYWludCogcGFpbnQsIFBsYXRmb3Jt
Q29udGV4dFNraWEqIHBjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrVHlwZWZh
Y2UqIGZhY2UsIGZsb2F0IHNpemUsIGludCBxdWFsaXR5KQotewotICAgIHBhaW50LT5zZXRUZXh0
U2l6ZShTa0Zsb2F0VG9TY2FsYXIoc2l6ZSkpOwotICAgIHBhaW50LT5zZXRUeXBlZmFjZShmYWNl
KTsKLQotICAgIC8vIHR1cm4gcXVhbGl0eSBpbnRvIHRleHQgZmxhZ3MKLSAgICB1aW50MzJfdCB0
ZXh0RmxhZ3M7Ci0gICAgc3dpdGNoIChxdWFsaXR5KSB7Ci0gICAgY2FzZSBOT05BTlRJQUxJQVNF
RF9RVUFMSVRZOgotICAgICAgICB0ZXh0RmxhZ3MgPSAwOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEFOVElBTElBU0VEX1FVQUxJVFk6Ci0gICAgICAgIHRleHRGbGFncyA9IFNrUGFpbnQ6OmtB
bnRpQWxpYXNfRmxhZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTEVBUlRZUEVfUVVBTElU
WToKLSAgICAgICAgdGV4dEZsYWdzID0gKFNrUGFpbnQ6OmtBbnRpQWxpYXNfRmxhZyB8IFNrUGFp
bnQ6OmtMQ0RSZW5kZXJUZXh0X0ZsYWcpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICB0ZXh0RmxhZ3MgPSBnZXREZWZhdWx0R0RJVGV4dEZsYWdzKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAvLyBvbmx5IGFsbG93IGZlYXR1cmVzIHRoYXQgU3lzdGVtUGFyYW1l
dGVyc0luZm8gYWxsb3dzCi0gICAgdGV4dEZsYWdzICY9IGdldERlZmF1bHRHRElUZXh0RmxhZ3Mo
KTsKLQotICAgIC8vIGRvIHRoaXMgY2hlY2sgYWZ0ZXIgb3VyIHN3aXRjaCBvbiBsZlF1YWxpdHkK
LSAgICBpZiAoIXBjcy0+Y291bGRVc2VMQ0RSZW5kZXJlZFRleHQoKSkgewotICAgICAgICB0ZXh0
RmxhZ3MgJj0gflNrUGFpbnQ6OmtMQ0RSZW5kZXJUZXh0X0ZsYWc7Ci0gICAgICAgIC8vIElmIHdl
ICpqdXN0KiBjbGVhciBvdXIgcmVxdWVzdCBmb3IgTENELCB0aGVuIEdESSBzZWVtcyB0bwotICAg
ICAgICAvLyBzb21ldGltZXMgZ2l2ZSB1cyBBQSB0ZXh0LCBhbmQgc29tZXRpbWVzIGdpdmUgdXMg
QlcgdGV4dC4gU2luY2UgdGhlCi0gICAgICAgIC8vIG9yaWdpbmFsIGludGVudCB3YXMgTENELCB3
ZSB3YW50IHRvIGZvcmNlIEFBIChyYXRoZXIgdGhhbiBCVyksIHNvIHdlCi0gICAgICAgIC8vIGFk
ZCBhIHNwZWNpYWwgYml0IHRvIHRlbGwgU2tpYSB0byBkbyBpdHMgYmVzdCB0byBhdm9pZCB0aGUg
Qlc6IGJ5Ci0gICAgICAgIC8vIGRyYXdpbmcgTENEIG9mZnNjcmVlbiBhbmQgZG93bnNhbXBsaW5n
IHRoYXQgdG8gQUEuCi0gICAgICAgIHRleHRGbGFncyB8PSBTa1BhaW50OjprR2VuQThGcm9tTENE
X0ZsYWc7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHRleHRGbGFnc01hc2sg
PSBTa1BhaW50OjprQW50aUFsaWFzX0ZsYWcgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2tQYWludDo6a0xDRFJlbmRlclRleHRfRmxhZyB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BhaW50OjprR2VuQThGcm9tTENEX0Zs
YWc7Ci0KLSAgICAvLyBub3cgY29weSBpbiBqdXN0IHRoZSB0ZXh0IGZsYWdzCi0gICAgU2tBU1NF
UlQoISh0ZXh0RmxhZ3MgJiB+dGV4dEZsYWdzTWFzaykpOwotICAgIHVpbnQzMl90IGZsYWdzID0g
cGFpbnQtPmdldEZsYWdzKCk7Ci0gICAgZmxhZ3MgJj0gfnRleHRGbGFnc01hc2s7Ci0gICAgZmxh
Z3MgfD0gdGV4dEZsYWdzOwotICAgIHBhaW50LT5zZXRGbGFncyhmbGFncyk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHBhaW50U2tpYVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBIRk9OVCBoZm9u
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU2tUeXBlZmFjZSogZmFjZSwgZmxvYXQgc2l6
ZSwgaW50IHF1YWxpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1HbHlwaHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPUkQqIGdseXBocywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgaW50KiBhZHZhbmNlcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgR09GRlNFVCogb2Zmc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2tQb2ludCogb3JpZ2luKQotewotICAgIFBsYXRmb3JtQ29udGV4dFNraWEqIHBs
YXRmb3JtQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIFRleHREcmF3
aW5nTW9kZUZsYWdzIHRleHRNb2RlID0gcGxhdGZvcm1Db250ZXh0LT5nZXRUZXh0RHJhd2luZ01v
ZGUoKTsKLSAgICAvLyBFbnN1cmUgZm9udCBsb2FkIGZvciBwcmludGluZywgYmVjYXVzZSBQREYg
ZGV2aWNlIG5lZWRzIGl0LgotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPmlzVmVjdG9yKCkpCi0g
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGE6OmVuc3VyZUZvbnRMb2FkZWQoaGZvbnQpOwotCi0gICAg
Ly8gRmlsbGluZyAoaWYgbmVjZXNzYXJ5KS4gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuCi0gICAg
U2tQYWludCBwYWludDsKLSAgICBwbGF0Zm9ybUNvbnRleHQtPnNldHVwUGFpbnRGb3JGaWxsaW5n
KCZwYWludCk7Ci0gICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1Rl
eHRFbmNvZGluZyk7Ci0gICAgc2V0dXBQYWludEZvckZvbnQoJnBhaW50LCBwbGF0Zm9ybUNvbnRl
eHQsIGZhY2UsIHNpemUsIHF1YWxpdHkpOwotCi0gICAgYm9vbCBkaWRGaWxsID0gZmFsc2U7Ci0K
LSAgICBpZiAoKHRleHRNb2RlICYgVGV4dE1vZGVGaWxsKSAmJiAoU2tDb2xvckdldEEocGFpbnQu
Z2V0Q29sb3IoKSkgfHwgcGFpbnQuZ2V0TG9vcGVyKCkpKSB7Ci0gICAgICAgIHNraWFEcmF3VGV4
dChwbGF0Zm9ybUNvbnRleHQsICpvcmlnaW4sICZwYWludCwgJmdseXBoc1swXSwgJmFkdmFuY2Vz
WzBdLCAmb2Zmc2V0c1swXSwgbnVtR2x5cGhzKTsKLSAgICAgICAgZGlkRmlsbCA9IHRydWU7Ci0g
ICAgfQotCi0gICAgLy8gU3Ryb2tpbmcgb24gdG9wIChpZiBuZWNlc3NhcnkpLgotICAgIGlmICgo
dGV4dE1vZGUgJiBUZXh0TW9kZVN0cm9rZSkKLSAgICAgICAgJiYgcGxhdGZvcm1Db250ZXh0LT5n
ZXRTdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlCi0gICAgICAgICYmIHBsYXRmb3JtQ29udGV4dC0+
Z2V0U3Ryb2tlVGhpY2tuZXNzKCkgPiAwKSB7Ci0KLSAgICAgICAgcGFpbnQucmVzZXQoKTsKLSAg
ICAgICAgcGxhdGZvcm1Db250ZXh0LT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAw
KTsKLSAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRF
bmNvZGluZyk7Ci0gICAgICAgIHNldHVwUGFpbnRGb3JGb250KCZwYWludCwgcGxhdGZvcm1Db250
ZXh0LCBmYWNlLCBzaXplLCBxdWFsaXR5KTsKLQotICAgICAgICBpZiAoZGlkRmlsbCkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzaGFkb3cgYW5kIHdlIGZpbGxlZCBhYm92ZSwgdGhl
cmUgd2lsbCBhbHJlYWR5IGJlCi0gICAgICAgICAgICAvLyBhIHNoYWRvdy4gV2UgZG9uJ3Qgd2Fu
dCB0byBkcmF3IGl0IGFnYWluIG9yIGl0IHdpbGwgYmUgdG9vIGRhcmsKLSAgICAgICAgICAgIC8v
IGFuZCBpdCB3aWxsIGdvIG9uIHRvcCBvZiB0aGUgZmlsbC4KLSAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpc24ndCBzdHJpY3RseSBjb3JyZWN0LCBzaW5jZSB0
aGUgc3Ryb2tlIGNvdWxkIGJlCi0gICAgICAgICAgICAvLyB2ZXJ5IHRoaWNrIGFuZCB0aGUgc2hh
ZG93IHdvdWxkbid0IGFjY291bnQgZm9yIHRoaXMuIFRoZSAicmlnaHQiCi0gICAgICAgICAgICAv
LyB0aGluZyB3b3VsZCBiZSB0byBkcmF3IHRvIGEgbmV3IGxheWVyIGFuZCB0aGVuIGRyYXcgdGhh
dCBsYXllcgotICAgICAgICAgICAgLy8gd2l0aCBhIHNoYWRvdy4gQnV0IHRoaXMgaXMgYSBsb3Qg
b2YgZXh0cmEgd29yayBmb3Igc29tZXRoaW5nCi0gICAgICAgICAgICAvLyB0aGF0IGlzbid0IG5v
cm1hbGx5IGFuIGlzc3VlLgotICAgICAgICAgICAgcGFpbnQuc2V0TG9vcGVyKDApOwotICAgICAg
ICB9Ci0KLSAgICAgICAgc2tpYURyYXdUZXh0KHBsYXRmb3JtQ29udGV4dCwgKm9yaWdpbiwgJnBh
aW50LCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sICZvZmZzZXRzWzBdLCBudW1HbHlwaHMpOwot
ICAgIH0KLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi12b2lkIHBh
aW50U2tpYVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgaW50IG51
bUdseXBocywKLSAgICAgICAgICAgICAgICAgICBjb25zdCBXT1JEKiBnbHlwaHMsCi0gICAgICAg
ICAgICAgICAgICAgY29uc3QgaW50KiBhZHZhbmNlcywKLSAgICAgICAgICAgICAgICAgICBjb25z
dCBHT0ZGU0VUKiBvZmZzZXRzLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQqIG9y
aWdpbikKLXsKLSAgICBwYWludFNraWFUZXh0KGNvbnRleHQsIGRhdGEuaGZvbnQoKSwgZGF0YS50
eXBlZmFjZSgpLCBkYXRhLnNpemUoKSwgZGF0YS5sZlF1YWxpdHkoKSwKLSAgICAgICAgICAgICAg
ICAgIG51bUdseXBocywgZ2x5cGhzLCBhZHZhbmNlcywgb2Zmc2V0cywgb3JpZ2luKTsKLX0KLQot
dm9pZCBwYWludFNraWFUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAg
ICAgICAgICBIRk9OVCBoZm9udCwKLSAgICAgICAgICAgICAgICAgICBpbnQgbnVtR2x5cGhzLAot
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPUkQqIGdseXBocywKLSAgICAgICAgICAgICAgICAg
ICBjb25zdCBpbnQqIGFkdmFuY2VzLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEdPRkZTRVQq
IG9mZnNldHMsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgU2tQb2ludCogb3JpZ2luKQotewot
ICAgIGludCBzaXplOwotICAgIGludCBxdWFsaXR5OwotICAgIFNrVHlwZWZhY2UqIGZhY2UgPSBD
cmVhdGVUeXBlZmFjZUZyb21IRm9udChoZm9udCwgJnNpemUsICZxdWFsaXR5KTsKLSAgICBTa0F1
dG9VbnJlZiBhdXIoZmFjZSk7Ci0KLSAgICBwYWludFNraWFUZXh0KGNvbnRleHQsIGhmb250LCBm
YWNlLCBzaXplLCBxdWFsaXR5LCBudW1HbHlwaHMsIGdseXBocywgYWR2YW5jZXMsIG9mZnNldHMs
IG9yaWdpbik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDBmMzQzMmRjMGE0NTE0ZWMxNjdiM2RjZDFlNTlhNTg1YjY4MTRl
MTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNraWFGb250V2luX2gKLSNkZWZpbmUgU2tp
YUZvbnRXaW5faAotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHVzcDEwLmg+Ci0K
LXN0cnVjdCBTa1BvaW50OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnRQbGF0
Zm9ybURhdGE7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBQbGF0Zm9ybUNvbnRleHRT
a2lhOwotCi0jaWYgIVVTRShTS0lBX1RFWFQpCi0vLyBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSB1
c2VkIGZvciBtb3JlIGNvbXBsZXggZm9udCBkcmF3aW5nIChlZmZlY3RzIHN1Y2ggYXMKLS8vIHN0
cm9raW5nIGFuZCBtb3JlIGNvbXBsZXggdHJhbnNmb3JtcykgdGhhbiBXaW5kb3dzIHN1cHBvcnRz
IGRpcmVjdGx5LiBTaW5jZQotLy8gV2luZG93cyBkcmF3aW5nIGlzIGZhc3RlciB5b3Ugc2hvdWxk
IHVzZSB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcgZmlyc3QgdG8KLS8vIGNoZWNrIGlmIHVz
aW5nIFNraWEgaXMgcmVxdWlyZWQgYXQgYWxsLgotLy8gTm90ZSB0aGF0IHRoZSB0ZXh0IHdpbGwg
bG9vayBkaWZmZXJlbnQgKG5vIENsZWFyVHlwZSkgc28gdGhpcyBzaG91bGQgb25seSBiZQotLy8g
dXNlZCB3aGVuIG5lY2Vzc2FyeS4KLS8vCi0vLyBXaGVuIHlvdSBjYWxsIGEgU2tpYSogdGV4dCBk
cmF3aW5nIGZ1bmN0aW9uLCB2YXJpb3VzIGdseXBoIG91dGxpbmVzIHdpbGwgYmUKLS8vIGNhY2hl
ZC4gQXMgYSByZXN1bHQsIHlvdSBzaG91bGQgY2FsbCBTa2lhV2luT3V0bGluZUNhY2hlOjpyZW1v
dmVQYXRoc0ZvckZvbnQKLS8vIHdoZW4gdGhlIGZvbnQgaXMgZGVzdHJveWVkIHNvIHRoYXQgdGhl
IGNhY2hlIGRvZXMgbm90IG91dGxpdmUgdGhlIGZvbnQgKHNpbmNlCi0vLyB0aGUgSEZPTlRzIGFy
ZSByZWN5Y2xlZCkuCi0vLwotLy8gUmVtZW1iZXIgdGhhdCBTa2lhJ3MgdGV4dCBkcmF3aW5nIG9y
aWdpbiBpcyB0aGUgYmFzZWxpbmUsIGxpa2UgV2ViS2l0LCBub3QKLS8vIHRoZSB0b3AsIGxpa2Ug
V2luZG93cy4KLQotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmaWxsQ29sb3IgYW5kIHNoYWRvd0Nv
bG9yIGFyZSBvcGFxdWUgYW5kIHRoZSB0ZXh0LXNoYWRvdwotLy8gaXMgbm90IGJsdXJyZWQuCi1i
b29sIHdpbmRvd3NDYW5IYW5kbGVEcmF3VGV4dFNoYWRvdyhHcmFwaGljc0NvbnRleHQqKTsKLQot
Ly8gUmV0dXJucyB0cnVlIGlmIGFkdmFuY2VkIGZvbnQgcmVuZGVyaW5nIGlzIHJlY29tbWVuZGVk
LgotYm9vbCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcoR3JhcGhpY3NDb250ZXh0Kik7Ci0K
LS8vIFJldHVybnMgdHJ1ZSBpZiBhZHZhbmNlZCBmb250IHJlbmRlcmluZyBpcyByZWNvbW1lbmRl
ZCBpZiBzaGFkb3dzIGFyZQotLy8gZGlzcmVnYXJkZWQuCi1ib29sIHdpbmRvd3NDYW5IYW5kbGVU
ZXh0RHJhd2luZ1dpdGhvdXRTaGFkb3coR3JhcGhpY3NDb250ZXh0Kik7Ci0jZW5kaWYKLQotLy8g
Tm90ZSB0aGF0IHRoZSBvZmZzZXRzIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSWYgbm90IG51bGwg
aXQgcmVwcmVzZW50cyBhCi0vLyBwZXIgZ2x5cGggb2Zmc2V0IChzdWNoIGFzIHJldHVybmVkIGJ5
IFNjcmlwdFBsYWNlIFdpbmRvd3MgQVBJIGZ1bmN0aW9uKS4KLXZvaWQgcGFpbnRTa2lhVGV4dChH
cmFwaGljc0NvbnRleHQqLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmLAotICAgICAgICAgICAgICAgICAgIGludCBudW1HbHlwaHMsCi0gICAgICAgICAgICAgICAg
ICAgY29uc3QgV09SRCogZ2x5cGhzLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCogYWR2
YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgR09GRlNFVCogb2Zmc2V0cywKLSAgICAg
ICAgICAgICAgICAgICBjb25zdCBTa1BvaW50KiBvcmlnaW4pOwotCi0vLyBOb3RlIHRoYXQgdGhl
IG9mZnNldHMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBJZiBub3QgbnVsbCBpdCByZXByZXNlbnRz
IGEKLS8vIHBlciBnbHlwaCBvZmZzZXQgKHN1Y2ggYXMgcmV0dXJuZWQgYnkgU2NyaXB0UGxhY2Ug
V2luZG93cyBBUEkgZnVuY3Rpb24pLgotLy8gTm90ZTogdGhpcyBpcyBsZXNzIGVmZmljaWVudCB0
aGFuIGNhbGxpbmcgdGhlIHZlcnNpb24gd2l0aCBGb250UGxhdGZvcm1EYXRhLAotLy8gYXMgdGhh
dCBjYWNoZXMgdGhlIFNrVHlwZWZhY2Ugb2JqZWN0Lgotdm9pZCBwYWludFNraWFUZXh0KEdyYXBo
aWNzQ29udGV4dCosCi0gICAgICAgICAgICAgICAgICAgSEZPTlQsCi0gICAgICAgICAgICAgICAg
ICAgaW50IG51bUdseXBocywKLSAgICAgICAgICAgICAgICAgICBjb25zdCBXT1JEKiBnbHlwaHMs
Ci0gICAgICAgICAgICAgICAgICAgY29uc3QgaW50KiBhZHZhbmNlcywKLSAgICAgICAgICAgICAg
ICAgICBjb25zdCBHT0ZGU0VUKiBvZmZzZXRzLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IFNr
UG9pbnQqIG9yaWdpbik7Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAgLy8g
U2tpYUZvbnRXaW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9Ta2lhVXRpbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9Ta2lhVXRpbHMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODQxOTk0
M2VjNTk5NDBkY2I4YTUyZTVlNDQ5NjI2MmMyMDhmZGE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvU2tpYVV0aWxzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcsMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJTa2lhVXRpbHMuaCIKLQot
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5j
bHVkZSAiU2tDYW52YXMuaCIKLSNpbmNsdWRlICJTa0NvbG9yUHJpdi5oIgotI2luY2x1ZGUgIlNr
TWF0cml4LmgiCi0jaW5jbHVkZSAiU2tSZWdpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1zdGF0aWMgY29uc3Qgc3RydWN0IENvbXBvc2l0T3BUb1hmZXJtb2RlTW9kZSB7Ci0gICAgdWlu
dDhfdCBtQ29tcG9zaXRPcDsKLSAgICB1aW50OF90IG1feGZlcm1vZGVNb2RlOwotfSBnTWFwQ29t
cG9zaXRPcHNUb1hmZXJtb2RlTW9kZXNbXSA9IHsKLSAgICB7IENvbXBvc2l0ZUNsZWFyLCAgICAg
ICAgICAgU2tYZmVybW9kZTo6a0NsZWFyX01vZGUgfSwKLSAgICB7IENvbXBvc2l0ZUNvcHksICAg
ICAgICAgICAgU2tYZmVybW9kZTo6a1NyY19Nb2RlIH0sCi0gICAgeyBDb21wb3NpdGVTb3VyY2VP
dmVyLCAgICAgIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUgfSwKLSAgICB7IENvbXBvc2l0ZVNv
dXJjZUluLCAgICAgICAgU2tYZmVybW9kZTo6a1NyY0luX01vZGUgfSwKLSAgICB7IENvbXBvc2l0
ZVNvdXJjZU91dCwgICAgICAgU2tYZmVybW9kZTo6a1NyY091dF9Nb2RlIH0sCi0gICAgeyBDb21w
b3NpdGVTb3VyY2VBdG9wLCAgICAgIFNrWGZlcm1vZGU6OmtTcmNBVG9wX01vZGUgfSwKLSAgICB7
IENvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlciwgU2tYZmVybW9kZTo6a0RzdE92ZXJfTW9kZSB9LAot
ICAgIHsgQ29tcG9zaXRlRGVzdGluYXRpb25JbiwgICBTa1hmZXJtb2RlOjprRHN0SW5fTW9kZSB9
LAotICAgIHsgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQsICBTa1hmZXJtb2RlOjprRHN0T3V0X01v
ZGUgfSwKLSAgICB7IENvbXBvc2l0ZURlc3RpbmF0aW9uQXRvcCwgU2tYZmVybW9kZTo6a0RzdEFU
b3BfTW9kZSB9LAotICAgIHsgQ29tcG9zaXRlWE9SLCAgICAgICAgICAgICBTa1hmZXJtb2RlOjpr
WG9yX01vZGUgfSwKLSAgICB7IENvbXBvc2l0ZVBsdXNEYXJrZXIsICAgICAgU2tYZmVybW9kZTo6
a0Rhcmtlbl9Nb2RlIH0sCi0gICAgeyBDb21wb3NpdGVQbHVzTGlnaHRlciwgICAgIFNrWGZlcm1v
ZGU6OmtQbHVzX01vZGUgfQotfTsKLQotU2tYZmVybW9kZTo6TW9kZSBXZWJDb3JlQ29tcG9zaXRl
VG9Ta2lhQ29tcG9zaXRlKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQotewotICAgIGNvbnN0IENvbXBv
c2l0T3BUb1hmZXJtb2RlTW9kZSogdGFibGUgPSBnTWFwQ29tcG9zaXRPcHNUb1hmZXJtb2RlTW9k
ZXM7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFNLX0FSUkFZX0NPVU5UKGdN
YXBDb21wb3NpdE9wc1RvWGZlcm1vZGVNb2Rlcyk7IGkrKykgewotICAgICAgICBpZiAodGFibGVb
aV0ubUNvbXBvc2l0T3AgPT0gb3ApCi0gICAgICAgICAgICByZXR1cm4gKFNrWGZlcm1vZGU6Ok1v
ZGUpdGFibGVbaV0ubV94ZmVybW9kZU1vZGU7Ci0gICAgfQotCi0gICAgU2tERUJVR0YoKCJHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uIHVua25vd24gQ29tcG9z
aXRlT3BlcmF0b3IgJWRcbiIsIG9wKSk7Ci0gICAgcmV0dXJuIFNrWGZlcm1vZGU6OmtTcmNPdmVy
X01vZGU7IC8vIGZhbGwtYmFjawotfQotCi1zdGF0aWMgVThDUFUgSW52U2NhbGVCeXRlKFU4Q1BV
IGNvbXBvbmVudCwgdWludDMyX3Qgc2NhbGUpCi17Ci0gICAgU2tBU1NFUlQoY29tcG9uZW50ID09
ICh1aW50OF90KWNvbXBvbmVudCk7Ci0gICAgcmV0dXJuIChjb21wb25lbnQgKiBzY2FsZSArIDB4
ODAwMCkgPj4gMTY7Ci19Ci0KLVNrQ29sb3IgU2tQTUNvbG9yVG9Db2xvcihTa1BNQ29sb3IgcG0p
Ci17Ci0gICAgaWYgKCFwbSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgYSA9IFNr
R2V0UGFja2VkQTMyKHBtKTsKLSAgICBpZiAoIWEpIHsKLSAgICAgICAgLy8gQSB6ZXJvIGFscGhh
IHZhbHVlIHdoZW4gdGhlcmUgYXJlIG5vbi16ZXJvIFIsIEcsIG9yIEIgY2hhbm5lbHMgaXMgYW4K
LSAgICAgICAgLy8gaW52YWxpZCBwcmVtdWx0aXBsaWVkIGNvbG9yIChzaW5jZSBhbGwgY2hhbm5l
bHMgc2hvdWxkIGhhdmUgYmVlbgotICAgICAgICAvLyBtdWx0aXBsaWVkIGJ5IDAgaWYgYT0wKS4K
LSAgICAgICAgU2tBU1NFUlQoZmFsc2UpOyAKLSAgICAgICAgLy8gSW4gcHJvZHVjdGlvbiwgcmV0
dXJuIDAgdG8gcHJvdGVjdCBhZ2FpbnN0IGRpdmlzaW9uIGJ5IHplcm8uCi0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICAKLSAgICB1aW50MzJfdCBzY2FsZSA9ICgyNTUgPDwgMTYpIC8gYTsK
LSAgICAKLSAgICByZXR1cm4gU2tDb2xvclNldEFSR0IoYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW52U2NhbGVCeXRlKFNrR2V0UGFja2VkUjMyKHBtKSwgc2NhbGUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbnZTY2FsZUJ5dGUoU2tHZXRQYWNrZWRHMzIocG0pLCBzY2FsZSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIEludlNjYWxlQnl0ZShTa0dldFBhY2tlZEIzMihw
bSksIHNjYWxlKSk7Ci19Ci0KLUNvbG9yIFNrUE1Db2xvclRvV2ViQ29yZUNvbG9yKFNrUE1Db2xv
ciBwbSkKLXsKLSAgICByZXR1cm4gU2tQTUNvbG9yVG9Db2xvcihwbSk7Ci19Ci0KLXZvaWQgQ2xp
cFJlY3RUb0NhbnZhcyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBT
a1JlY3QmIHNyY1JlY3QsIFNrUmVjdCogZGVzdFJlY3QpCi17Ci0gICAgaWYgKCFjb250ZXh0LT5n
ZXRDbGlwQm91bmRzKGRlc3RSZWN0KSB8fCAhZGVzdFJlY3QtPmludGVyc2VjdChzcmNSZWN0KSkK
LSAgICAgICAgZGVzdFJlY3QtPnNldEVtcHR5KCk7Ci19Ci0KLWJvb2wgU2tQYXRoQ29udGFpbnNQ
b2ludChTa1BhdGgqIG9yaWdpbmFsUGF0aCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFNrUGF0
aDo6RmlsbFR5cGUgZnQpCi17Ci0gICAgU2tSZWN0IGJvdW5kcyA9IG9yaWdpbmFsUGF0aC0+Z2V0
Qm91bmRzKCk7Ci0KLSAgICAvLyBXZSBjYW4gaW1tZWRpYXRlbHkgcmV0dXJuIGZhbHNlIGlmIHRo
ZSBwb2ludCBpcyBvdXRzaWRlIHRoZSBib3VuZGluZwotICAgIC8vIHJlY3QuICBXZSBkb24ndCB1
c2UgYm91bmRzLmNvbnRhaW5zKCkgaGVyZSwgc2luY2UgaXQgd291bGQgZXhjbHVkZQotICAgIC8v
IHBvaW50cyBvbiB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGUgYm91bmRpbmcgcmVj
dCwgYW5kIHdlIHdhbnQKLSAgICAvLyB0byBpbmNsdWRlIHRoZW0uCi0gICAgU2tTY2FsYXIgZlgg
PSBTa0Zsb2F0VG9TY2FsYXIocG9pbnQueCgpKTsKLSAgICBTa1NjYWxhciBmWSA9IFNrRmxvYXRU
b1NjYWxhcihwb2ludC55KCkpOwotICAgIGlmIChmWCA8IGJvdW5kcy5mTGVmdCB8fCBmWCA+IGJv
dW5kcy5mUmlnaHQgfHwgZlkgPCBib3VuZHMuZlRvcCB8fCBmWSA+IGJvdW5kcy5mQm90dG9tKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTY2FsZSB0aGUgcGF0aCB0byBhIGxhcmdl
IHNpemUgYmVmb3JlIGhpdCB0ZXN0aW5nIGZvciB0d28gcmVhc29uczoKLSAgICAvLyAxKSBTa2lh
IGhhcyB0cm91YmxlIHdpdGggY29vcmRpbmF0ZXMgY2xvc2UgdG8gdGhlIG1heCBzaWduZWQgMTYt
Yml0IHZhbHVlcywgc28gd2Ugc2NhbGUgbGFyZ2VyIHBhdGhzIGRvd24uCi0gICAgLy8gICAgVE9E
Tzogd2hlbiBTa2lhIGlzIHBhdGNoZWQgdG8gd29yayBwcm9wZXJseSB3aXRoIGxhcmdlIHZhbHVl
cywgdGhpcyB3aWxsIG5vdCBiZSBuZWNlc3NhcnkuCi0gICAgLy8gMikgU2tpYSBkb2VzIG5vdCBz
dXBwb3J0IGFuYWx5dGljIGhpdCB0ZXN0aW5nLCBzbyB3ZSBzY2FsZSBwYXRocyB1cCB0byBkbyBy
YXN0ZXIgaGl0IHRlc3Rpbmcgd2l0aCBzdWJwaXhlbCBhY2N1cmFjeS4KLSAgICBTa1NjYWxhciBi
aWdnZXN0Q29vcmQgPSBzdGQ6Om1heChzdGQ6Om1heChzdGQ6Om1heChib3VuZHMuZlJpZ2h0LCBi
b3VuZHMuZkJvdHRvbSksIC1ib3VuZHMuZkxlZnQpLCAtYm91bmRzLmZUb3ApOwotICAgIGlmIChT
a1NjYWxhck5lYXJseVplcm8oYmlnZ2VzdENvb3JkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGJpZ2dlc3RDb29yZCA9IHN0ZDo6bWF4KHN0ZDo6bWF4KGJpZ2dlc3RDb29yZCwgZlggKyAx
KSwgZlkgKyAxKTsKLQotICAgIGNvbnN0IFNrU2NhbGFyIGtNYXhDb29yZGluYXRlID0gU2tJbnRU
b1NjYWxhcigxIDw8IDE1KTsKLSAgICBTa1NjYWxhciBzY2FsZSA9IFNrU2NhbGFyRGl2KGtNYXhD
b29yZGluYXRlLCBiaWdnZXN0Q29vcmQpOwotCi0gICAgU2tSZWdpb24gcmduOyAgCi0gICAgU2tS
ZWdpb24gY2xpcDsKLSAgICBTa01hdHJpeCBtOwotICAgIFNrUGF0aCBzY2FsZWRQYXRoOwotCi0g
ICAgU2tQYXRoOjpGaWxsVHlwZSBvcmlnaW5hbEZpbGxUeXBlID0gb3JpZ2luYWxQYXRoLT5nZXRG
aWxsVHlwZSgpOwotICAgIG9yaWdpbmFsUGF0aC0+c2V0RmlsbFR5cGUoZnQpOwotCi0gICAgbS5z
ZXRTY2FsZShzY2FsZSwgc2NhbGUpOwotICAgIG9yaWdpbmFsUGF0aC0+dHJhbnNmb3JtKG0sICZz
Y2FsZWRQYXRoKTsKLQotICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYoMC41ZiAr
IHBvaW50LngoKSAqIHNjYWxlKSk7Ci0gICAgaW50IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29y
ZigwLjVmICsgcG9pbnQueSgpICogc2NhbGUpKTsKLSAgICBjbGlwLnNldFJlY3QoeCAtIDEsIHkg
LSAxLCB4ICsgMSwgeSArIDEpOwotCi0gICAgYm9vbCBjb250YWlucyA9IHJnbi5zZXRQYXRoKHNj
YWxlZFBhdGgsIGNsaXApOwotICAgIG9yaWdpbmFsUGF0aC0+c2V0RmlsbFR5cGUob3JpZ2luYWxG
aWxsVHlwZSk7Ci0gICAgcmV0dXJuIGNvbnRhaW5zOwotfQotCi1HcmFwaGljc0NvbnRleHQqIHNj
cmF0Y2hDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgSW1hZ2VCdWZmZXIqIHNjcmF0Y2ggPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMSwgMSkpLmxlYWtQdHIoKTsKLSAgICAvLyBXZSBkb24n
dCBib3RoZXIgY2hlY2tpbmcgZm9yIGZhaWx1cmUgY3JlYXRpbmcgdGhlIEltYWdlQnVmZmVyLCBz
aW5jZSBvdXIKLSAgICAvLyBJbWFnZUJ1ZmZlciBpbml0aWFsaXplciB3b24ndCBmYWlsLgotICAg
IHJldHVybiBzY3JhdGNoLT5jb250ZXh0KCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFV
dGlscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA0NmExYjViZWVmMTJjOTEzNjIxODc1
MWM3MTk0MWZmYTg1YzExNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5o
CisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAw
NiwyMDA3LDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gQWxsIG9mIHRo
ZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHNob3VsZCBtb3ZlIHRvIG5ldyBob21lcyBhbmQgdGhp
cyBmaWxlIHNob3VsZCBiZSBkZWxldGVkLgotCi0jaWZuZGVmIFNraWFVdGlsc19oCi0jZGVmaW5l
IFNraWFVdGlsc19oCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlNrUGF0aC5oIgotI2luY2x1ZGUgIlNrWGZlcm1v
ZGUuaCIKLQotY2xhc3MgU2tDYW52YXM7Ci1jbGFzcyBTa1JlZ2lvbjsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1Ta1hmZXJtb2RlOjpNb2RlIFdlYkNvcmVDb21wb3NpdGVUb1NraWFDb21wb3Np
dGUoQ29tcG9zaXRlT3BlcmF0b3IpOwotCi0vLyBtb3ZlIHRoaXMgZ3V5IGludG8gU2tDb2xvci5o
Ci1Ta0NvbG9yIFNrUE1Db2xvclRvQ29sb3IoU2tQTUNvbG9yKTsKLQotLy8gVGhpcyBzaG91bGQg
YmUgYW4gb3BlcmF0b3Igb24gQ29sb3IKLUNvbG9yIFNrUE1Db2xvclRvV2ViQ29yZUNvbG9yKFNr
UE1Db2xvcik7Ci0KLS8vIFNraWEgaGFzIHByb2JsZW1zIHdoZW4gcGFzc2VkIGluZmluaXRlLCBl
dGMgZmxvYXRzLCBmaWx0ZXIgdGhlbSB0byAwLgotaW5saW5lIFNrU2NhbGFyIFdlYkNvcmVGbG9h
dFRvU2tTY2FsYXIoZmxvYXQgZikKLXsKLSAgICByZXR1cm4gU2tGbG9hdFRvU2NhbGFyKHN0ZDo6
aXNmaW5pdGUoZikgPyBmIDogMCk7Ci19Ci0KLWlubGluZSBTa1NjYWxhciBXZWJDb3JlRG91Ymxl
VG9Ta1NjYWxhcihkb3VibGUgZCkKLXsKLSAgICByZXR1cm4gU2tEb3VibGVUb1NjYWxhcihzdGQ6
OmlzZmluaXRlKGQpID8gZCA6IDApOwotfQotCi0vLyBDb21wdXRlcyB0aGUgc21hbGxlc3QgcmVj
dGFuZ2xlIHRoYXQsIHdoaWNoIHdoZW4gZHJhd24gdG8gdGhlIGdpdmVuIGNhbnZhcywKLS8vIHdp
bGwgY292ZXIgdGhlIHNhbWUgYXJlYSBhcyB0aGUgc291cmNlIHJlY3RhbmdsZS4gSXQgd2lsbCBj
bGlwIHRvIHRoZSBjYW52YXMnCi0vLyBjbGlwLCBkb2luZyB0aGUgbmVjZXNzYXJ5IGNvb3JkaW5h
dGUgdHJhbnNmb3Jtcy4KLS8vCi0vLyBzcmNSZWN0IGFuZCBkZXN0UmVjdCBjYW4gYmUgdGhlIHNh
bWUuCi12b2lkIENsaXBSZWN0VG9DYW52YXMoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNv
bnN0IFNrUmVjdCYgc3JjUmVjdCwgU2tSZWN0KiBkZXN0UmVjdCk7Ci0KLS8vIERldGVybWluZSBp
ZiBhIGdpdmVuIFdlYktpdCBwb2ludCBpcyBjb250YWluZWQgaW4gYSBwYXRoCi1ib29sIFNrUGF0
aENvbnRhaW5zUG9pbnQoU2tQYXRoKiwgY29uc3QgRmxvYXRQb2ludCYsIFNrUGF0aDo6RmlsbFR5
cGUpOwotCi0vLyBSZXR1cm5zIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgMXgxIEdyYXBoaWNzQ29u
dGV4dCBpbnRlbmRlZCBmb3IgdGVtcG9yYXJ5Ci0vLyBvcGVyYXRpb25zLiBQbGVhc2Ugc2F2ZSgp
IHRoZSBzdGF0ZSBhbmQgcmVzdG9yZSgpIGl0IHdoZW4geW91J3JlIGRvbmUgd2l0aAotLy8gdGhl
IGNvbnRleHQuCi1HcmFwaGljc0NvbnRleHQqIHNjcmF0Y2hDb250ZXh0KCk7Ci0KLX0gIC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAgLy8gU2tpYVV0aWxzX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3JtYXRpb25NYXRyaXhT
a2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvVHJhbnNmb3Jt
YXRpb25NYXRyaXhTa2lhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM2MTBk
NzE0OGM2OWU2NzdlNjliNzg3Yjc5OGExMDE2YzNmYzQyMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1RyYW5zZm9ybWF0aW9uTWF0cml4U2tpYS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3
OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1l
dDoKLS8vIAotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8gCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
Ci0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLQotI2luY2x1ZGUgIlNraWFVdGls
cy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVy
YXRvciBTa01hdHJpeCgpIGNvbnN0Ci17Ci0gICAgU2tNYXRyaXggcmVzdWx0OwotCi0gICAgcmVz
dWx0LnNldFNjYWxlWChXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcihhKCkpKTsKLSAgICByZXN1bHQu
c2V0U2tld1goV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoYygpKSk7Ci0gICAgcmVzdWx0LnNldFRy
YW5zbGF0ZVgoV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoZSgpKSk7Ci0KLSAgICByZXN1bHQuc2V0
U2NhbGVZKFdlYkNvcmVEb3VibGVUb1NrU2NhbGFyKGQoKSkpOwotICAgIHJlc3VsdC5zZXRTa2V3
WShXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcihiKCkpKTsKLSAgICByZXN1bHQuc2V0VHJhbnNsYXRl
WShXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcihmKCkpKTsKLQotICAgIC8vIEZJWE1FOiBTZXQgcGVy
c3BlY3RpdmUgcHJvcGVybHkuCi0gICAgcmVzdWx0LnNldFBlcnNwWCgwKTsKLSAgICByZXN1bHQu
c2V0UGVyc3BZKDApOwotICAgIHJlc3VsdC5zZXQoU2tNYXRyaXg6OmtNUGVyc3AyLCBTS19TY2Fs
YXIxKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybTo6b3BlcmF0
b3IgU2tNYXRyaXgoKSBjb25zdAotewotICAgIFNrTWF0cml4IHJlc3VsdDsKLQotICAgIHJlc3Vs
dC5zZXRTY2FsZVgoV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoYSgpKSk7Ci0gICAgcmVzdWx0LnNl
dFNrZXdYKFdlYkNvcmVEb3VibGVUb1NrU2NhbGFyKGMoKSkpOwotICAgIHJlc3VsdC5zZXRUcmFu
c2xhdGVYKFdlYkNvcmVEb3VibGVUb1NrU2NhbGFyKGUoKSkpOwotCi0gICAgcmVzdWx0LnNldFNj
YWxlWShXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcihkKCkpKTsKLSAgICByZXN1bHQuc2V0U2tld1ko
V2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoYigpKSk7Ci0gICAgcmVzdWx0LnNldFRyYW5zbGF0ZVko
V2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoZigpKSk7Ci0KLSAgICAvLyBGSVhNRTogU2V0IHBlcnNw
ZWN0aXZlIHByb3Blcmx5LgotICAgIHJlc3VsdC5zZXRQZXJzcFgoMCk7Ci0gICAgcmVzdWx0LnNl
dFBlcnNwWSgwKTsKLSAgICByZXN1bHQuc2V0KFNrTWF0cml4OjprTVBlcnNwMiwgU0tfU2NhbGFy
MSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0lt
YWdlRGVjb2RlclNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzI1NDEyYmViMzY3Yzc5OTY2ZTNlN2YzMmQ0ZjcyMGFjZTEwOGM5OS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgR29vZ2xlLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJ
bWFnZURlY29kZXIuaCIKLQotI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotSW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSgpCi0gICAgOiBtX2JpdG1hcChOYXRpdmVJbWFnZVNr
aWE6OmNyZWF0ZSgpKQotICAgICwgbV9hbGxvY2F0b3IoMCkKLSAgICAsIG1faGFzQWxwaGEoZmFs
c2UpCi0gICAgLCBtX3N0YXR1cyhGcmFtZUVtcHR5KQotICAgICwgbV9kdXJhdGlvbigwKQotICAg
ICwgbV9kaXNwb3NhbE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQotICAgICwgbV9wcmVtdWx0
aXBseUFscGhhKHRydWUpCi17Ci19Ci0KLUltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9y
PShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKLXsKLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0g
ICAgICAgIHJldHVybiAqdGhpczsKLQotICAgIG1fYml0bWFwID0gb3RoZXIubV9iaXRtYXAtPmNs
b25lKCk7Ci0gICAgLy8gS2VlcCB0aGUgcGl4ZWxzIGxvY2tlZCBzaW5jZSB3ZSB3aWxsIGJlIHdy
aXRpbmcgZGlyZWN0bHkgaW50byB0aGUKLSAgICAvLyBiaXRtYXAgdGhyb3VnaG91dCB0aGlzIG9i
amVjdCdzIGxpZmV0aW1lLgotICAgIG1fYml0bWFwLT5iaXRtYXAoKS5sb2NrUGl4ZWxzKCk7Ci0g
ICAgc2V0TWVtb3J5QWxsb2NhdG9yKG90aGVyLmFsbG9jYXRvcigpKTsKLSAgICBzZXRPcmlnaW5h
bEZyYW1lUmVjdChvdGhlci5vcmlnaW5hbEZyYW1lUmVjdCgpKTsKLSAgICBzZXRTdGF0dXMob3Ro
ZXIuc3RhdHVzKCkpOwotICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwotICAgIHNl
dERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOwotICAgIHNldFByZW11bHRp
cGx5QWxwaGEob3RoZXIucHJlbXVsdGlwbHlBbHBoYSgpKTsKLSAgICAvLyBCZSBzdXJlIHRoYXQg
dGhpcyBpcyBjYWxsZWQgYWZ0ZXIgd2UndmUgY2FsbGVkIHNldFN0YXR1cygpLCBzaW5jZSB3ZQot
ICAgIC8vIGxvb2sgYXQgb3VyIHN0YXR1cyB0byBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGUgYWxw
aGEgdmFsdWUuCi0gICAgc2V0SGFzQWxwaGEob3RoZXIuaGFzQWxwaGEoKSk7Ci0gICAgcmV0dXJu
ICp0aGlzOwotfQotCi12b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKLXsKLSAgICBt
X2JpdG1hcC0+Yml0bWFwKCkucmVzZXQoKTsKLSAgICBtX3N0YXR1cyA9IEZyYW1lRW1wdHk7Ci0g
ICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1
ZmZlckNhY2hlKCkKLSAgICAvLyBjYWxscyB0aGlzIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBi
dXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UKLSAgICAvLyBpbml0RnJhbWVCdWZmZXIoKSBhbmQgZnJh
bWVDb21wbGV0ZSgpIG1heSBzdGlsbCBuZWVkIHRvIHJlYWQKLSAgICAvLyBvdGhlciBtZXRhZGF0
YSBvdXQgb2YgdGhpcyBmcmFtZSBsYXRlci4KLX0KLQotdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmls
bFBpeGVsRGF0YSgpCi17Ci0gICAgbV9iaXRtYXAtPmJpdG1hcCgpLmVyYXNlQVJHQigwLCAwLCAw
LCAwKTsKLSAgICBtX2hhc0FscGhhID0gdHJ1ZTsKLX0KLQotYm9vbCBJbWFnZUZyYW1lOjpjb3B5
Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKLXsKLSAgICBpZiAodGhpcyA9PSAm
b3RoZXIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgbV9oYXNBbHBoYSA9IG90aGVyLm1f
aGFzQWxwaGE7Ci0gICAgbV9iaXRtYXAtPmJpdG1hcCgpLnJlc2V0KCk7Ci0gICAgY29uc3QgTmF0
aXZlSW1hZ2VTa2lhKiBvdGhlckJpdG1hcCA9IG90aGVyLm1fYml0bWFwLmdldCgpOwotICAgIHJl
dHVybiBvdGhlckJpdG1hcC0+Yml0bWFwKCkuY29weVRvKCZtX2JpdG1hcC0+Yml0bWFwKCksIG90
aGVyQml0bWFwLT5iaXRtYXAoKS5jb25maWcoKSk7Ci19Ci0KLWJvb2wgSW1hZ2VGcmFtZTo6c2V0
U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCi17Ci0gICAgLy8gc2V0U2l6ZSgpIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLCBpdCBsZWFrcyBtZW1vcnkgb3RoZXJ3aXNlLgotICAg
IEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpOwotCi0gICAgbV9iaXRtYXAtPmJpdG1hcCgp
LnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIG5ld1dpZHRoLCBuZXdIZWln
aHQpOwotICAgIGlmICghbV9iaXRtYXAtPmJpdG1hcCgpLmFsbG9jUGl4ZWxzKG1fYWxsb2NhdG9y
LCAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgemVyb0ZpbGxQaXhlbERhdGEoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc05hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWU6OmFz
TmV3TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2JpdG1hcC0+Y2xvbmUoKTsK
LX0KLQotYm9vbCBJbWFnZUZyYW1lOjpoYXNBbHBoYSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
aGFzQWxwaGE7Ci19Ci0KLXZvaWQgSW1hZ2VGcmFtZTo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkK
LXsKLSAgICBtX2hhc0FscGhhID0gYWxwaGE7Ci0KLSAgICAvLyBJZiB0aGUgZnJhbWUgaXMgbm90
IGZ1bGx5IGxvYWRlZCwgdGhlcmUgd2lsbCBiZSB0cmFuc3BhcmVudCBwaXhlbHMsCi0gICAgLy8g
c28gd2UgY2FuJ3QgdGVsbCBza2lhIHdlJ3JlIG9wYXF1ZSwgZXZlbiBmb3IgaW1hZ2UgdHlwZXMg
dGhhdCBsb2dpY2FsbHkKLSAgICAvLyBhbHdheXMgYXJlIChlLmcuIGpwZWcpLgotICAgIGJvb2wg
aXNPcGFxdWUgPSAhbV9oYXNBbHBoYTsKLSAgICBpZiAobV9zdGF0dXMgIT0gRnJhbWVDb21wbGV0
ZSkKLSAgICAgICAgaXNPcGFxdWUgPSBmYWxzZTsKLSAgICBtX2JpdG1hcC0+Yml0bWFwKCkuc2V0
SXNPcGFxdWUoaXNPcGFxdWUpOwotfQotCi12b2lkIEltYWdlRnJhbWU6OnNldENvbG9yUHJvZmls
ZShjb25zdCBDb2xvclByb2ZpbGUmIGNvbG9yUHJvZmlsZSkKLXsKLSAgICAvLyBGSVhNRTogRG8g
d2UgbmVlZCB0aGlzIEltYWdlRnJhbWUgZnVuY3Rpb24gYW55bW9yZSwgb24gYW55IHBvcnQ/Ci0g
ICAgVU5VU0VEX1BBUkFNKGNvbG9yUHJvZmlsZSk7Ci19Ci0KLXZvaWQgSW1hZ2VGcmFtZTo6c2V0
U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cykKLXsKLSAgICBtX3N0YXR1cyA9IHN0YXR1czsKLSAg
ICBpZiAobV9zdGF0dXMgPT0gRnJhbWVDb21wbGV0ZSkgewotICAgICAgICBtX2JpdG1hcC0+Yml0
bWFwKCkuc2V0SXNPcGFxdWUoIW1faGFzQWxwaGEpOwotICAgICAgICBtX2JpdG1hcC0+c2V0RGF0
YUNvbXBsZXRlKCk7IC8vIFRlbGwgdGhlIGJpdG1hcCBpdCdzIGRvbmUuCi0gICAgfQotfQotCi12
b2lkIEltYWdlRnJhbWU6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0Ci17Ci0gICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2Jq
ZWN0SW5mbywgdGhpcywgUGxhdGZvcm1NZW1vcnlUeXBlczo6SW1hZ2UpOwotICAgIGluZm8uYWRk
TWVtYmVyKG1fYml0bWFwLCAiYml0bWFwIik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEv
SlBFR0ltYWdlRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNv
ZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhM2IwYTNhOGY4OWM4NjI0YjBlNGViNDFhNGQ2YjllOTg2MmRiMGNhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpQRUdJ
bWFnZUVuY29kZXIuaCIKLQotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFNp
emUuaCIKLSNpbmNsdWRlICJTa0JpdG1hcC5oIgotI2luY2x1ZGUgIlNrQ29sb3JQcml2LmgiCi1l
eHRlcm4gIkMiIHsKLSNpbmNsdWRlIDxzdGRpby5oPiAvLyBqcGVnbGliLmggbmVlZHMgc3RkaW8u
aCBGSUxFCi0jaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgPHNldGptcC5oPgotfQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBKUEVHT3V0cHV0QnVmZmVyIDogcHVibGljIGpw
ZWdfZGVzdGluYXRpb25fbWdyIHsKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dDsK
LSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gYnVmZmVyOwotfTsKLQotc3RhdGljIHZvaWQgcHJl
cGFyZU91dHB1dChqX2NvbXByZXNzX3B0ciBjaW5mbykKLXsKLSAgICBKUEVHT3V0cHV0QnVmZmVy
KiBvdXQgPSBzdGF0aWNfY2FzdDxKUEVHT3V0cHV0QnVmZmVyKj4oY2luZm8tPmRlc3QpOwotICAg
IGNvbnN0IHNpemVfdCBpbnRlcm5hbEJ1ZmZlclNpemUgPSA4MTkyOwotICAgIG91dC0+YnVmZmVy
LnJlc2l6ZShpbnRlcm5hbEJ1ZmZlclNpemUpOwotICAgIG91dC0+bmV4dF9vdXRwdXRfYnl0ZSA9
IG91dC0+YnVmZmVyLmRhdGEoKTsKLSAgICBvdXQtPmZyZWVfaW5fYnVmZmVyID0gb3V0LT5idWZm
ZXIuc2l6ZSgpOwotfQotCi1zdGF0aWMgYm9vbGVhbiB3cml0ZU91dHB1dChqX2NvbXByZXNzX3B0
ciBjaW5mbykKLXsKLSAgICBKUEVHT3V0cHV0QnVmZmVyKiBvdXQgPSBzdGF0aWNfY2FzdDxKUEVH
T3V0cHV0QnVmZmVyKj4oY2luZm8tPmRlc3QpOwotICAgIG91dC0+b3V0cHV0LT5hcHBlbmQob3V0
LT5idWZmZXIuZGF0YSgpLCBvdXQtPmJ1ZmZlci5zaXplKCkpOwotICAgIG91dC0+bmV4dF9vdXRw
dXRfYnl0ZSA9IG91dC0+YnVmZmVyLmRhdGEoKTsKLSAgICBvdXQtPmZyZWVfaW5fYnVmZmVyID0g
b3V0LT5idWZmZXIuc2l6ZSgpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCBm
aW5pc2hPdXRwdXQoal9jb21wcmVzc19wdHIgY2luZm8pCi17Ci0gICAgSlBFR091dHB1dEJ1ZmZl
ciogb3V0ID0gc3RhdGljX2Nhc3Q8SlBFR091dHB1dEJ1ZmZlcio+KGNpbmZvLT5kZXN0KTsKLSAg
ICBjb25zdCBzaXplX3Qgc2l6ZSA9IG91dC0+YnVmZmVyLnNpemUoKSAtIG91dC0+ZnJlZV9pbl9i
dWZmZXI7Ci0gICAgb3V0LT5vdXRwdXQtPmFwcGVuZChvdXQtPmJ1ZmZlci5kYXRhKCksIHNpemUp
OwotfQotCi1zdGF0aWMgdm9pZCBoYW5kbGVFcnJvcihqX2NvbW1vbl9wdHIgY29tbW9uKQotewot
ICAgIGptcF9idWYqIGp1bXBCdWZmZXJQdHIgPSBzdGF0aWNfY2FzdDxqbXBfYnVmKj4oY29tbW9u
LT5jbGllbnRfZGF0YSk7Ci0gICAgbG9uZ2ptcCgqanVtcEJ1ZmZlclB0ciwgLTEpOwotfQotCi1z
dGF0aWMgdm9pZCBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCKGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBp
eGVscywgdW5zaWduZWQgaW50IHBpeGVsQ291bnQsIHVuc2lnbmVkIGNoYXIqIG91dHB1dCkKLXsK
LSAgICBjb25zdCBTa1BNQ29sb3IqIGlucHV0ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3Qg
U2tQTUNvbG9yKj4ocGl4ZWxzKTsKLSAgICBmb3IgKDsgcGl4ZWxDb3VudC0tID4gMDsgKytpbnB1
dCkgewotICAgICAgICAqb3V0cHV0KysgPSBTa0dldFBhY2tlZFIzMigqaW5wdXQpOwotICAgICAg
ICAqb3V0cHV0KysgPSBTa0dldFBhY2tlZEczMigqaW5wdXQpOwotICAgICAgICAqb3V0cHV0Kysg
PSBTa0dldFBhY2tlZEIzMigqaW5wdXQpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgUkdCQXRv
UkdCKGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBpeGVscywgdW5zaWduZWQgaW50IHBpeGVsQ291bnQs
IHVuc2lnbmVkIGNoYXIqIG91dHB1dCkKLXsKLSAgICBmb3IgKDsgcGl4ZWxDb3VudC0tID4gMDsg
cGl4ZWxzICs9IDQpIHsKLSAgICAgICAgLy8gRG8gc291cmNlLW92ZXIgY29tcG9zaXRpb24gb24g
YmxhY2suCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBwaXhlbHNbM107Ci0gICAgICAg
IGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICpvdXRwdXQrKyA9IFNrTXVsRGl2MjU1
Um91bmQocGl4ZWxzWzBdLCBhbHBoYSk7Ci0gICAgICAgICAgICAqb3V0cHV0KysgPSBTa011bERp
djI1NVJvdW5kKHBpeGVsc1sxXSwgYWxwaGEpOwotICAgICAgICAgICAgKm91dHB1dCsrID0gU2tN
dWxEaXYyNTVSb3VuZChwaXhlbHNbMl0sIGFscGhhKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICpvdXRwdXQrKyA9IHBpeGVsc1swXTsKLSAgICAgICAgICAgICpvdXRwdXQrKyA9IHBp
eGVsc1sxXTsKLSAgICAgICAgICAgICpvdXRwdXQrKyA9IHBpeGVsc1syXTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZW5jb2RlUGl4ZWxzKEludFNpemUgaW1hZ2VTaXplLCB1
bnNpZ25lZCBjaGFyKiBpbnB1dFBpeGVscywgYm9vbCBwcmVtdWx0aXBsaWVkLCBpbnQgcXVhbGl0
eSwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRwdXQpCi17Ci0gICAgSlBFR091dHB1dEJ1ZmZl
ciBkZXN0aW5hdGlvbjsKLSAgICBkZXN0aW5hdGlvbi5vdXRwdXQgPSBvdXRwdXQ7Ci0gICAgVmVj
dG9yPEpTQU1QTEU+IHJvdzsKLQotICAgIGpwZWdfY29tcHJlc3Nfc3RydWN0IGNpbmZvOwotICAg
IGpwZWdfZXJyb3JfbWdyIGVycm9yOwotICAgIGNpbmZvLmVyciA9IGpwZWdfc3RkX2Vycm9yKCZl
cnJvcik7Ci0gICAgZXJyb3IuZXJyb3JfZXhpdCA9IGhhbmRsZUVycm9yOwotICAgIGptcF9idWYg
anVtcEJ1ZmZlcjsKLSAgICBjaW5mby5jbGllbnRfZGF0YSA9ICZqdW1wQnVmZmVyOwotCi0gICAg
aWYgKHNldGptcChqdW1wQnVmZmVyKSkgewotICAgICAgICBqcGVnX2Rlc3Ryb3lfY29tcHJlc3Mo
JmNpbmZvKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGpwZWdfY3JlYXRl
X2NvbXByZXNzKCZjaW5mbyk7Ci0gICAgY2luZm8uZGVzdCA9ICZkZXN0aW5hdGlvbjsKLSAgICBj
aW5mby5kZXN0LT5pbml0X2Rlc3RpbmF0aW9uID0gcHJlcGFyZU91dHB1dDsKLSAgICBjaW5mby5k
ZXN0LT5lbXB0eV9vdXRwdXRfYnVmZmVyID0gd3JpdGVPdXRwdXQ7Ci0gICAgY2luZm8uZGVzdC0+
dGVybV9kZXN0aW5hdGlvbiA9IGZpbmlzaE91dHB1dDsKLQotICAgIGltYWdlU2l6ZS5jbGFtcE5l
Z2F0aXZlVG9aZXJvKCk7Ci0gICAgY2luZm8uaW1hZ2VfaGVpZ2h0ID0gaW1hZ2VTaXplLmhlaWdo
dCgpOwotICAgIGNpbmZvLmltYWdlX3dpZHRoID0gaW1hZ2VTaXplLndpZHRoKCk7Ci0KLSNpZiBk
ZWZpbmVkKEpDU19FWFRFTlNJT05TKQotICAgIGlmIChwcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAg
IGNpbmZvLmluX2NvbG9yX3NwYWNlID0gU0tfQjMyX1NISUZUID8gSkNTX0VYVF9SR0JYIDogSkNT
X0VYVF9CR1JYOwotCi0gICAgICAgIGNpbmZvLmlucHV0X2NvbXBvbmVudHMgPSA0OwotCi0gICAg
ICAgIGpwZWdfc2V0X2RlZmF1bHRzKCZjaW5mbyk7Ci0gICAgICAgIGpwZWdfc2V0X3F1YWxpdHko
JmNpbmZvLCBxdWFsaXR5LCBUUlVFKTsKLSAgICAgICAganBlZ19zdGFydF9jb21wcmVzcygmY2lu
Zm8sIFRSVUUpOwotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGlucHV0UGl4ZWxz
OwotICAgICAgICBjb25zdCBzaXplX3QgcGl4ZWxSb3dTdHJpZGUgPSBjaW5mby5pbWFnZV93aWR0
aCAqIDQ7Ci0gICAgICAgIHdoaWxlIChjaW5mby5uZXh0X3NjYW5saW5lIDwgY2luZm8uaW1hZ2Vf
aGVpZ2h0KSB7Ci0gICAgICAgICAgICBqcGVnX3dyaXRlX3NjYW5saW5lcygmY2luZm8sICZwaXhl
bHMsIDEpOwotICAgICAgICAgICAgcGl4ZWxzICs9IHBpeGVsUm93U3RyaWRlOwotICAgICAgICB9
Ci0KLSAgICAgICAganBlZ19maW5pc2hfY29tcHJlc3MoJmNpbmZvKTsKLSAgICAgICAganBlZ19k
ZXN0cm95X2NvbXByZXNzKCZjaW5mbyk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNl
bmRpZgotCi0gICAgY2luZm8uaW5fY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOwotICAgIGNpbmZvLmlu
cHV0X2NvbXBvbmVudHMgPSAzOwotCi0gICAgdm9pZCAoKmV4dHJhY3RSb3dSR0IpKGNvbnN0IHVu
c2lnbmVkIGNoYXIqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGNoYXIqIG91dHB1dCk7Ci0gICAg
ZXh0cmFjdFJvd1JHQiA9ICZSR0JBdG9SR0I7Ci0gICAgaWYgKHByZW11bHRpcGxpZWQpCi0gICAg
ICAgIGV4dHJhY3RSb3dSR0IgPSAmcHJlTXVsdGlwbGllZEJHUkF0b1JHQjsKLQotICAgIGpwZWdf
c2V0X2RlZmF1bHRzKCZjaW5mbyk7Ci0gICAganBlZ19zZXRfcXVhbGl0eSgmY2luZm8sIHF1YWxp
dHksIFRSVUUpOwotICAgIGpwZWdfc3RhcnRfY29tcHJlc3MoJmNpbmZvLCBUUlVFKTsKLQotICAg
IHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGlucHV0UGl4ZWxzOwotICAgIHJvdy5yZXNpemUoY2lu
Zm8uaW1hZ2Vfd2lkdGggKiBjaW5mby5pbnB1dF9jb21wb25lbnRzKTsKLSAgICBjb25zdCBzaXpl
X3QgcGl4ZWxSb3dTdHJpZGUgPSBjaW5mby5pbWFnZV93aWR0aCAqIDQ7Ci0gICAgd2hpbGUgKGNp
bmZvLm5leHRfc2NhbmxpbmUgPCBjaW5mby5pbWFnZV9oZWlnaHQpIHsKLSAgICAgICAgSlNBTVBM
RSogcm93RGF0YSA9IHJvdy5kYXRhKCk7Ci0gICAgICAgIGV4dHJhY3RSb3dSR0IocGl4ZWxzLCBj
aW5mby5pbWFnZV93aWR0aCwgcm93RGF0YSk7Ci0gICAgICAgIGpwZWdfd3JpdGVfc2NhbmxpbmVz
KCZjaW5mbywgJnJvd0RhdGEsIDEpOwotICAgICAgICBwaXhlbHMgKz0gcGl4ZWxSb3dTdHJpZGU7
Ci0gICAgfQotCi0gICAganBlZ19maW5pc2hfY29tcHJlc3MoJmNpbmZvKTsKLSAgICBqcGVnX2Rl
c3Ryb3lfY29tcHJlc3MoJmNpbmZvKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBKUEVH
SW1hZ2VFbmNvZGVyOjplbmNvZGUoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgaW50IHF1YWxpdHks
IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQotewotICAgIFNrQXV0b0xvY2tQaXhlbHMg
Yml0bWFwTG9jayhiaXRtYXApOwotCi0gICAgaWYgKGJpdG1hcC5jb25maWcoKSAhPSBTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcgfHwgIWJpdG1hcC5nZXRQaXhlbHMoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBPbmx5IHN1cHBvcnQgMzIgYml0L3BpeGVsIHNraWEgYml0bWFwcy4KLQot
ICAgIHJldHVybiBlbmNvZGVQaXhlbHMoSW50U2l6ZShiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhl
aWdodCgpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihiaXRtYXAuZ2V0UGl4ZWxzKCkp
LCB0cnVlLCBxdWFsaXR5LCBvdXRwdXQpOwotfQotCi1ib29sIEpQRUdJbWFnZUVuY29kZXI6OmVu
Y29kZShjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgaW50IHF1YWxpdHksIFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiogb3V0cHV0KQotewotICAgIHJldHVybiBlbmNvZGVQaXhlbHMoaW1hZ2VEYXRh
LnNpemUoKSwgaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpLCBmYWxzZSwgcXVhbGl0eSwgb3V0cHV0
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VFbmNvZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIyNzI1ZDM2YWRlZjZhYzlkNWE2MTdl
ODgyODUxMGE3ODQ5NzFmYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQRUdJ
bWFnZUVuY29kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSlBF
R0ltYWdlRW5jb2Rlcl9oCi0jZGVmaW5lIEpQRUdJbWFnZUVuY29kZXJfaAotCi0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi1jbGFzcyBTa0JpdG1hcDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBJbWFnZURhdGE7Ci0KLWNsYXNzIEpQRUdJbWFnZUVuY29kZXIgewotcHVibGljOgot
ICAgIC8vIEVuY29kZSB0aGUgaW5wdXQgZGF0YSB3aXRoIGEgY29tcHJlc3Npb24gcXVhbGl0eSBp
biBbMC0xMDBdLgotICAgIHN0YXRpYyBib29sIGVuY29kZShjb25zdCBTa0JpdG1hcCYsIGludCBx
dWFsaXR5LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qKTsKLSAgICBzdGF0aWMgYm9vbCBlbmNvZGUo
Y29uc3QgSW1hZ2VEYXRhJiwgaW50IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiopOwot
Ci0gICAgLy8gRm9yIGNhbGxlcnM6IHByb3ZpZGUgYSByZWFzb25hYmxlIGNvbXByZXNzaW9uIHF1
YWxpdHkgZGVmYXVsdC4KLSAgICBlbnVtIFF1YWxpdHkgeyBEZWZhdWx0Q29tcHJlc3Npb25RdWFs
aXR5ID0gOTIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0lt
YWdlRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9z
a2lhL1BOR0ltYWdlRW5jb2Rlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZh
ZDIwNjM0YzZhYWMyYmMyNjg1YjNmZmM3NjhlOWIzZjQzZjBlY2UuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rl
ci5oIgotCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2lu
Y2x1ZGUgIlNrQml0bWFwLmgiCi0jaW5jbHVkZSAiU2tDb2xvclByaXYuaCIKLSNpbmNsdWRlICJT
a1VuUHJlTXVsdGlwbHkuaCIKLWV4dGVybiAiQyIgewotI2luY2x1ZGUgInBuZy5oIgotfQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIHdyaXRlT3V0cHV0KHBuZ19zdHJ1Y3Rw
IHBuZywgcG5nX2J5dGVwIGRhdGEsIHBuZ19zaXplX3Qgc2l6ZSkKLXsKLSAgICBzdGF0aWNfY2Fz
dDxWZWN0b3I8dW5zaWduZWQgY2hhcj4qPihwbmdfZ2V0X2lvX3B0cihwbmcpKS0+YXBwZW5kKGRh
dGEsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZCBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCQShjb25z
dCB2b2lkKiBwaXhlbHMsIGludCBwaXhlbENvdW50LCB1bnNpZ25lZCBjaGFyKiBvdXRwdXQpCi17
Ci0gICAgc3RhdGljIGNvbnN0IFNrVW5QcmVNdWx0aXBseTo6U2NhbGUqIHNjYWxlID0gU2tVblBy
ZU11bHRpcGx5OjpHZXRTY2FsZVRhYmxlKCk7Ci0gICAgY29uc3QgU2tQTUNvbG9yKiBpbnB1dCA9
IHN0YXRpY19jYXN0PGNvbnN0IFNrUE1Db2xvcio+KHBpeGVscyk7Ci0KLSAgICBmb3IgKDsgcGl4
ZWxDb3VudC0tID4gMDsgKytpbnB1dCkgewotICAgICAgICBjb25zdCB1bnNpZ25lZCBhbHBoYSA9
IFNrR2V0UGFja2VkQTMyKCppbnB1dCk7Ci0gICAgICAgIGlmICgoYWxwaGEgIT0gMCkgJiYgKGFs
cGhhICE9IDI1NSkpIHsKLSAgICAgICAgICAgICpvdXRwdXQrKyA9IFNrVW5QcmVNdWx0aXBseTo6
QXBwbHlTY2FsZShzY2FsZVthbHBoYV0sIFNrR2V0UGFja2VkUjMyKCppbnB1dCkpOwotICAgICAg
ICAgICAgKm91dHB1dCsrID0gU2tVblByZU11bHRpcGx5OjpBcHBseVNjYWxlKHNjYWxlW2FscGhh
XSwgU2tHZXRQYWNrZWRHMzIoKmlucHV0KSk7Ci0gICAgICAgICAgICAqb3V0cHV0KysgPSBTa1Vu
UHJlTXVsdGlwbHk6OkFwcGx5U2NhbGUoc2NhbGVbYWxwaGFdLCBTa0dldFBhY2tlZEIzMigqaW5w
dXQpKTsKLSAgICAgICAgICAgICpvdXRwdXQrKyA9IGFscGhhOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgKm91dHB1dCsrID0gU2tHZXRQYWNrZWRSMzIoKmlucHV0KTsKLSAgICAgICAg
ICAgICpvdXRwdXQrKyA9IFNrR2V0UGFja2VkRzMyKCppbnB1dCk7Ci0gICAgICAgICAgICAqb3V0
cHV0KysgPSBTa0dldFBhY2tlZEIzMigqaW5wdXQpOwotICAgICAgICAgICAgKm91dHB1dCsrID0g
YWxwaGE7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGVuY29kZVBpeGVscyhJ
bnRTaXplIGltYWdlU2l6ZSwgdW5zaWduZWQgY2hhciogaW5wdXRQaXhlbHMsIGJvb2wgcHJlbXVs
dGlwbGllZCwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRwdXQpCi17Ci0gICAgaW1hZ2VTaXpl
LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKLSAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcm93Owot
Ci0gICAgcG5nX3N0cnVjdCogcG5nID0gcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3QoUE5HX0xJQlBO
R19WRVJfU1RSSU5HLCAwLCAwLCAwKTsKLSAgICBwbmdfaW5mbyogaW5mbyA9IHBuZ19jcmVhdGVf
aW5mb19zdHJ1Y3QocG5nKTsKLSAgICBpZiAoIXBuZyB8fCAhaW5mbyB8fCBzZXRqbXAocG5nX2pt
cGJ1ZihwbmcpKSkgewotICAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QocG5nID8gJnBu
ZyA6IDAsIGluZm8gPyAmaW5mbyA6IDApOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gT3B0aW1pemUgY29tcHJlc3Npb24gZm9yIHNwZWVkLgotICAgIC8vIFRoZSBwYXJh
bWV0ZXJzIGFyZSB0aGUgc2FtZSBhcyB3aGF0IGxpYnBuZyB1c2VzIGJ5IGRlZmF1bHQgZm9yIFJH
QiBhbmQgUkdCQSBpbWFnZXMsIGV4Y2VwdDoKLSAgICAvLyAtIHRoZSB6bGliIGNvbXByZXNzaW9u
IGxldmVsIGlzIDMgaW5zdGVhZCBvZiA2LCB0byBhdm9pZCB0aGUgbGF6eSBaaXYtTGVtcGVsIG1h
dGNoIHNlYXJjaGluZzsKLSAgICAvLyAtIHRoZSBkZWx0YSBmaWx0ZXIgaXMgMSAoInN1YiIpIGlu
c3RlYWQgb2YgNSAoImFsbCIpLCB0byByZWR1Y2UgdGhlIGZpbHRlciBjb21wdXRhdGlvbnMuCi0g
ICAgLy8gVGhlIHpsaWIgbWVtb3J5IGxldmVsICg4KSBhbmQgc3RyYXRlZ3kgKFpfRklMVEVSRUQp
IHdpbGwgYmUgc2V0IGluc2lkZSBsaWJwbmcuCi0gICAgLy8KLSAgICAvLyBBdm9pZCB0aGUgemxp
YiBzdHJhdGVnaWVzIFpfSFVGRk1BTl9PTkxZIG9yIFpfUkxFLgotICAgIC8vIEFsdGhvdWdoIHRo
ZXkgYXJlIHRoZSBmYXN0ZXN0IGZvciBwb29ybHktY29tcHJlc3NpYmxlIGltYWdlcyAoZS5nLiBw
aG90b2dyYXBocyksCi0gICAgLy8gdGhleSBhcmUgdmVyeSBzbG93IGZvciBoaWdobHktY29tcHJl
c3NpYmxlIGltYWdlcyAoZS5nLiB0ZXh0LCBkcmF3aW5ncyBvciBidXNpbmVzcyBncmFwaGljcyku
Ci0gICAgcG5nX3NldF9jb21wcmVzc2lvbl9sZXZlbChwbmcsIDMpOwotICAgIHBuZ19zZXRfZmls
dGVyKHBuZywgUE5HX0ZJTFRFUl9UWVBFX0JBU0UsIFBOR19GSUxURVJfU1VCKTsKLQotICAgIHBu
Z19zZXRfd3JpdGVfZm4ocG5nLCBvdXRwdXQsIHdyaXRlT3V0cHV0LCAwKTsKLSAgICBwbmdfc2V0
X0lIRFIocG5nLCBpbmZvLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLAot
ICAgICAgICAgICAgICAgICA4LCBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEEsIDAsIDAsIDApOwot
ICAgIHBuZ193cml0ZV9pbmZvKHBuZywgaW5mbyk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBwaXhl
bHMgPSBpbnB1dFBpeGVsczsKLSAgICByb3cucmVzaXplKGltYWdlU2l6ZS53aWR0aCgpICogc2l6
ZW9mKFNrUE1Db2xvcikpOwotICAgIGNvbnN0IHNpemVfdCBwaXhlbFJvd1N0cmlkZSA9IGltYWdl
U2l6ZS53aWR0aCgpICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdlU2l6ZS5oZWln
aHQoKTsgKyt5KSB7Ci0gICAgICAgIGlmIChwcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBw
cmVNdWx0aXBsaWVkQkdSQXRvUkdCQShwaXhlbHMsIGltYWdlU2l6ZS53aWR0aCgpLCByb3cuZGF0
YSgpKTsKLSAgICAgICAgICAgIHBuZ193cml0ZV9yb3cocG5nLCByb3cuZGF0YSgpKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBwbmdfd3JpdGVfcm93KHBuZywgcGl4ZWxzKTsKLSAgICAg
ICAgcGl4ZWxzICs9IHBpeGVsUm93U3RyaWRlOwotICAgIH0KLQotICAgIHBuZ193cml0ZV9lbmQo
cG5nLCBpbmZvKTsKLSAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJnBuZywgJmluZm8pOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0
IFNrQml0bWFwJiBiaXRtYXAsIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogb3V0cHV0KQotewotICAg
IFNrQXV0b0xvY2tQaXhlbHMgYml0bWFwTG9jayhiaXRtYXApOwotCi0gICAgaWYgKGJpdG1hcC5j
b25maWcoKSAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcgfHwgIWJpdG1hcC5nZXRQaXhl
bHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPbmx5IHN1cHBvcnQgMzIgYml0L3BpeGVs
IHNraWEgYml0bWFwcy4KLQotICAgIHJldHVybiBlbmNvZGVQaXhlbHMoSW50U2l6ZShiaXRtYXAu
d2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGJp
dG1hcC5nZXRQaXhlbHMoKSksIHRydWUsIG91dHB1dCk7Ci19Ci0KLWJvb2wgUE5HSW1hZ2VFbmNv
ZGVyOjplbmNvZGUoY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiogb3V0cHV0KQotewotICAgIHJldHVybiBlbmNvZGVQaXhlbHMoaW1hZ2VEYXRhLnNpemUo
KSwgaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpLCBmYWxzZSwgb3V0cHV0KTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDMxZWRhZDM3ZjhhMzY0ODBiNzIyYzJiZDY4M2EzOGNmZjU5ODhmNzgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUE5HSW1hZ2VFbmNvZGVyX2gKLSNk
ZWZpbmUgUE5HSW1hZ2VFbmNvZGVyX2gKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotY2xh
c3MgU2tCaXRtYXA7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW1hZ2VEYXRhOwot
Ci0vLyBJbnRlcmZhY2UgZm9yIGVuY29kaW5nIFBORyBkYXRhLiBUaGlzIGlzIGEgd3JhcHBlciBh
cm91bmQgbGlicG5nLgotY2xhc3MgUE5HSW1hZ2VFbmNvZGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgYm9vbCBlbmNvZGUoY29uc3QgU2tCaXRtYXAmLCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91
dHB1dCk7Ci0gICAgc3RhdGljIGJvb2wgZW5jb2RlKGNvbnN0IEltYWdlRGF0YSYsIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiogb3V0cHV0KTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVy
cy9za2lhL1dFQlBJbWFnZUVuY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZW5jb2RlcnMvc2tpYS9XRUJQSW1hZ2VFbmNvZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMzlkMWRhZmM0OGJhNGZjZjFmZmFiODcxYjQxYWZhMDJiZDhhMDM0Zi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1dFQlBJbWFnZUVuY29kZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldFQlBJbWFnZUVuY29kZXIuaCIKLQotI2lmIFVTRShXRUJQKQotCi0jaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlNrQml0bWFwLmgiCi0jaW5j
bHVkZSAiU2tDb2xvclByaXYuaCIKLSNpbmNsdWRlICJ3ZWJwL2VuY29kZS5oIgotCi10eXBlZGVm
IGludCAoKldlYlBJbXBvcnRlcikoV2ViUFBpY3R1cmUqIGNvbnN0LCBjb25zdCB1aW50OF90KiBj
b25zdCBkYXRhLCBpbnQgcm93U3RyaWRlKTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0
aWMgaW50IHdyaXRlT3V0cHV0KGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLCBjb25z
dCBXZWJQUGljdHVyZSogY29uc3QgcGljdHVyZSkKLXsKLSAgICBzdGF0aWNfY2FzdDxWZWN0b3I8
dW5zaWduZWQgY2hhcj4qPihwaWN0dXJlLT5jdXN0b21fcHRyKS0+YXBwZW5kKGRhdGEsIHNpemUp
OwotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgYm9vbCByZ2JQaWN0dXJlSW1wb3J0KGNvbnN0
IHVuc2lnbmVkIGNoYXIqIHBpeGVscywgYm9vbCBwcmVtdWx0aXBsaWVkLCBXZWJQSW1wb3J0ZXIg
aW1wb3J0UkdCWCwgV2ViUEltcG9ydGVyIGltcG9ydFJHQiwgV2ViUFBpY3R1cmUqIHBpY3R1cmUp
Ci17Ci0gICAgaWYgKHByZW11bHRpcGxpZWQpCi0gICAgICAgIHJldHVybiBpbXBvcnRSR0JYKHBp
Y3R1cmUsIHBpeGVscywgcGljdHVyZS0+d2lkdGggKiA0KTsKLQotICAgIC8vIFdyaXRlIHRoZSBS
R0IgcGl4ZWxzIHRvIGFuIHJnYiBkYXRhIGJ1ZmZlciwgYWxwaGEgcHJlbXVsdGlwbGllZCwgdGhl
biBpbXBvcnQgdGhlIHJnYiBkYXRhLgotCi0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHJnYjsK
LSAgICBzaXplX3QgcGl4ZWxDb3VudCA9IHBpY3R1cmUtPmhlaWdodCAqIHBpY3R1cmUtPndpZHRo
OwotICAgIHJnYi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBpeGVsQ291bnQgKiAzKTsKLQotICAg
IGZvciAodW5zaWduZWQgY2hhciogZGF0YSA9IHJnYi5kYXRhKCk7IHBpeGVsQ291bnQtLSA+IDA7
IHBpeGVscyArPSA0KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBwaXhlbHNbM107
Ci0gICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICpkYXRhKysgPSBTa011
bERpdjI1NVJvdW5kKHBpeGVsc1swXSwgYWxwaGEpOwotICAgICAgICAgICAgKmRhdGErKyA9IFNr
TXVsRGl2MjU1Um91bmQocGl4ZWxzWzFdLCBhbHBoYSk7Ci0gICAgICAgICAgICAqZGF0YSsrID0g
U2tNdWxEaXYyNTVSb3VuZChwaXhlbHNbMl0sIGFscGhhKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICpkYXRhKysgPSBwaXhlbHNbMF07Ci0gICAgICAgICAgICAqZGF0YSsrID0gcGl4
ZWxzWzFdOwotICAgICAgICAgICAgKmRhdGErKyA9IHBpeGVsc1syXTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiBpbXBvcnRSR0IocGljdHVyZSwgcmdiLmRhdGEoKSwgcGljdHVyZS0+
d2lkdGggKiAzKTsKLX0KLQotdGVtcGxhdGUgPGJvb2wgUHJlbXVsdGlwbGllZD4gaW5saW5lIGJv
b2wgaW1wb3J0UGljdHVyZUJHUlgoY29uc3QgdW5zaWduZWQgY2hhciogcGl4ZWxzLCBXZWJQUGlj
dHVyZSogcGljdHVyZSkKLXsKLSAgICByZXR1cm4gcmdiUGljdHVyZUltcG9ydChwaXhlbHMsIFBy
ZW11bHRpcGxpZWQsICZXZWJQUGljdHVyZUltcG9ydEJHUlgsICZXZWJQUGljdHVyZUltcG9ydEJH
UiwgcGljdHVyZSk7Ci19Ci0KLXRlbXBsYXRlIDxib29sIFByZW11bHRpcGxpZWQ+IGlubGluZSBi
b29sIGltcG9ydFBpY3R1cmVSR0JYKGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBpeGVscywgV2ViUFBp
Y3R1cmUqIHBpY3R1cmUpCi17Ci0gICAgcmV0dXJuIHJnYlBpY3R1cmVJbXBvcnQocGl4ZWxzLCBQ
cmVtdWx0aXBsaWVkLCAmV2ViUFBpY3R1cmVJbXBvcnRSR0JYLCAmV2ViUFBpY3R1cmVJbXBvcnRS
R0IsIHBpY3R1cmUpOwotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVQaXhlbHMoSW50U2l6ZSBpbWFn
ZVNpemUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBpeGVscywgYm9vbCBwcmVtdWx0aXBsaWVkLCBp
bnQgcXVhbGl0eSwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRwdXQpCi17Ci0gICAgV2ViUENv
bmZpZyBjb25maWc7Ci0gICAgaWYgKCFXZWJQQ29uZmlnSW5pdCgmY29uZmlnKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIFdlYlBQaWN0dXJlIHBpY3R1cmU7Ci0gICAgaWYgKCFXZWJQUGlj
dHVyZUluaXQoJnBpY3R1cmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbWFnZVNp
emUuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwotICAgIGlmICghaW1hZ2VTaXplLndpZHRoKCkgfHwg
aW1hZ2VTaXplLndpZHRoKCkgPiBXRUJQX01BWF9ESU1FTlNJT04pCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBwaWN0dXJlLndpZHRoID0gaW1hZ2VTaXplLndpZHRoKCk7Ci0gICAgaWYgKCFp
bWFnZVNpemUuaGVpZ2h0KCkgfHwgaW1hZ2VTaXplLmhlaWdodCgpID4gV0VCUF9NQVhfRElNRU5T
SU9OKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcGljdHVyZS5oZWlnaHQgPSBpbWFnZVNp
emUuaGVpZ2h0KCk7Ci0KLSAgICBpZiAocHJlbXVsdGlwbGllZCAmJiAhaW1wb3J0UGljdHVyZUJH
Ulg8dHJ1ZT4ocGl4ZWxzLCAmcGljdHVyZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIXByZW11bHRpcGxpZWQgJiYgIWltcG9ydFBpY3R1cmVSR0JYPGZhbHNlPihwaXhlbHMsICZw
aWN0dXJlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcGljdHVyZS5jdXN0b21fcHRy
ID0gb3V0cHV0OwotICAgIHBpY3R1cmUud3JpdGVyID0gJndyaXRlT3V0cHV0OwotICAgIGNvbmZp
Zy5xdWFsaXR5ID0gcXVhbGl0eTsKLSAgICBjb25maWcubWV0aG9kID0gMzsKLQotICAgIGJvb2wg
c3VjY2VzcyA9IFdlYlBFbmNvZGUoJmNvbmZpZywgJnBpY3R1cmUpOwotICAgIFdlYlBQaWN0dXJl
RnJlZSgmcGljdHVyZSk7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgV0VCUEltYWdl
RW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGludCBxdWFsaXR5LCBWZWN0
b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCkKLXsKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGJpdG1h
cExvY2soYml0bWFwKTsKLQotICAgIGlmIChiaXRtYXAuY29uZmlnKCkgIT0gU2tCaXRtYXA6OmtB
UkdCXzg4ODhfQ29uZmlnIHx8ICFiaXRtYXAuZ2V0UGl4ZWxzKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsgLy8gT25seSBzdXBwb3J0IDMyIGJpdC9waXhlbCBza2lhIGJpdG1hcHMuCi0KLSAgICBy
ZXR1cm4gZW5jb2RlUGl4ZWxzKEludFNpemUoYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQo
KSksIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgKj4oYml0bWFwLmdldFBpeGVscygpKSwgdHJ1
ZSwgcXVhbGl0eSwgb3V0cHV0KTsKLX0KLQotYm9vbCBXRUJQSW1hZ2VFbmNvZGVyOjplbmNvZGUo
Y29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4qIG91dHB1dCkKLXsKLSAgICByZXR1cm4gZW5jb2RlUGl4ZWxzKGltYWdlRGF0YS5zaXpl
KCksIGltYWdlRGF0YS5kYXRhKCktPmRhdGEoKSwgZmFsc2UsIHF1YWxpdHksIG91dHB1dCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1dFQlBJbWFnZUVuY29kZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvV0VCUEltYWdlRW5j
b2Rlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM5MjhlOGQwZmU4YTRhY2Iw
M2U4MDYzMmRiYjRmZGJmYTRjNGY5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEv
V0VCUEltYWdlRW5jb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFdFQlBJbWFnZUVuY29kZXJfaAotI2RlZmluZSBXRUJQSW1hZ2VFbmNvZGVyX2gKLQotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIFVTRShXRUJQKQotCi1jbGFzcyBTa0JpdG1hcDsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbWFnZURhdGE7Ci0KLWNsYXNzIFdFQlBJbWFn
ZUVuY29kZXIgewotcHVibGljOgotICAgIC8vIEVuY29kZSB0aGUgaW5wdXQgZGF0YSB3aXRoIGEg
Y29tcHJlc3Npb24gcXVhbGl0eSBpbiBbMC0xMDBdLgotICAgIHN0YXRpYyBib29sIGVuY29kZShj
b25zdCBTa0JpdG1hcCYsIGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qKTsKLSAg
ICBzdGF0aWMgYm9vbCBlbmNvZGUoY29uc3QgSW1hZ2VEYXRhJiwgaW50IHF1YWxpdHksIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiopOwotCi0gICAgLy8gRm9yIGNhbGxlcnM6IHByb3ZpZGUgYSByZWFz
b25hYmxlIGNvbXByZXNzaW9uIHF1YWxpdHkgZGVmYXVsdC4KLSAgICBlbnVtIFF1YWxpdHkgeyBE
ZWZhdWx0Q29tcHJlc3Npb25RdWFsaXR5ID0gODAgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>